diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2b14fb77197b7..5de033b4fca2c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,12 +1,13 @@ # This list auto requests reviews from the specified org members # when a PR that modifies the file in question is opened -# This list is alphabetized by User -> Filename KEEP IT THAT WAY -# In the event that multiple org members are to be informed of changes -# to the same file or dir, add them to the end under Multiple Owners +# This list is alphabetized by User -> Filename and separated into sections for Maintainers/Contributors KEEP IT THAT WAY +# In the event that people are to be informed of changes +# to the same file or dir, add them to the end of under Multiple Owners + -# Maptainers /code/ @nevimer @Cyprex /modular_zubbers/ @nevimer @magatsuchi @Cyprex +# Maptainers /_maps/ @KathrinBailey @projectkepler-ru @@ -19,3 +20,4 @@ modular_skyrat/modules @projectkepler-ru /code/modules/surgery @Majkl-J /modular_skyrat/master_files/code/modules/surgery @Majkl-J /modular_skyrat/modules/synths @Majkl-J +/modular_zubbers @Majkl-J diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 412aa25ddf4db..d65fd5e6c2cd8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -98,13 +98,13 @@ Our team is entirely voluntary, as such we extend our thanks to maintainers, iss ## Development Guides -#### Writing readable code +#### Writing readable code [Style guide](./guides/STYLE.md) -#### Writing sane code +#### Writing sane code [Code standards](./guides/STANDARDS.md) -#### Writing understandable code +#### Writing understandable code [Autodocumenting code](./guides/AUTODOC.md) #### Misc @@ -136,8 +136,6 @@ There is no strict process when it comes to merging pull requests. Pull requests * If your pull request is accepted, the code you add no longer belongs exclusively to you but to everyone; everyone is free to work on it, but you are also free to support or object to any changes being made, which will likely hold more weight, as you're the one who added the feature. It is a shame this has to be explicitly said, but there have been cases where this would've saved some trouble. -* Please explain why you are submitting the pull request, and how you think your change will be beneficial to the game. Failure to do so will be grounds for rejecting the PR. - * If your pull request is not finished, you may open it as a draft for potential review. If you open it as a full-fledged PR make sure it is at least testable in a live environment. Pull requests that do not at least meet this requirement will be closed. You may request a maintainer reopen the pull request when you're ready, or make a new one. * While we have no issue helping contributors (and especially new contributors) bring reasonably sized contributions up to standards via the pull request review process, larger contributions are expected to pass a higher bar of completeness and code quality *before* you open a pull request. Maintainers may close such pull requests that are deemed to be substantially flawed. You should take some time to discuss with maintainers or other contributors on how to improve the changes. @@ -145,6 +143,22 @@ There is no strict process when it comes to merging pull requests. Pull requests * After leaving reviews on an open pull request, maintainers may convert it to a draft. Once you have addressed all their comments to the best of your ability, feel free to mark the pull as `Ready for Review` again. * **Pull requests that include sprites must have in-game screenshots that were taken on your own test-server in the PR body.** For instance, if you're adding new clothes, a screenshot of those clothes being worn is expected in the PR body. Not every single direction needs to be displayed, but each icon that's actually being used in-game should be showcased. +## Justifying Your Changes + +You must explain why you are submitting the pull request in the "Why It's Good For The Game" section of your pull request, and how you think your change will be beneficial to the game. Failure to do so will be grounds for rejecting your pull request wholesale, or requiring that you fix it before your pull request is merged. A reasonable justification for your changes is a requirement. + +Your "How This Contributes To The Skyrat Roleplay Experience" section must make a good faith and reasonable attempt to: +* Assert and argue that the current state of affairs in the game is not good, and needs changing. +* Assert and argue that your pull request will either fix or help fix the problems you described. +* Assert and argue that any downsides introduced by your solution as a matter of design, if any, are worth it, and why they are worth it. + +More controversial changes have higher standards for justification to be considered reasonable. A bugfix for example does not typically require any effort at all in justification as its value to the game is usually self evident, however a major feature overhaul or balance change may require significant explanation to adequately justify its supposed benefit to the game. + +This is still a requirement if your pull request is supported and/or requested by maintainers before it is opened. This is still a requirement if your pull request is supported and/or requested by head coders before it is opened. The purpose of arguing for your changes is not to convince just the maintainer team of its merits, it is to document the "why" behind your changes to the game to a necessary level of detail. The reason behind a change must exist as it is the purpose of this codebase to improve the game, thus said reasoning must be adequately stated and explained. + +This is also still a requirement if your pull request has a corresponding design document that justifies your changes inside it. You must always properly justify changes (those that actually need justification) within the pull request, even if you also do it elsewhere. This is to ensure that: +1. All reviewers can easily see the reasoning behind your changes on the pull request itself, no reliance on other sites required. +2. The actual, manifested implementation of the idea behind the design document is being justified after said implementation is actually realized. This is in contrast to any reasoning put on the design document itself, which very well may have been made before any work was done on it, possibly even by an author different from the author of the pull request. Any idea in the design document may have had compromises put into it due to complications not seen in the original vision, thus the current state of the implementation (the pull request as it stands) must be defended, explained, and ultimately justified in and of itself. Of course, you should still list the design document the pull request is implementing, and may even use arguments from the design document if said arguments are applicable to the current reality of your proposed changes. ## Good Boy Points @@ -158,7 +172,7 @@ Negative GBP increases the likelihood of a maintainer closing your PR. With that There is no benefit to having a higher positive GBP score, since GBP only comes into consideration when it is negative. -You can see each tag and their GBP values [Here](https://github.com/tgstation/tgstation/blob/master/.github/gbp.toml). +You can see each tag and their GBP values [Here](https://github.com/tgstation/tgstation/blob/master/.github/gbp.toml). ## Porting features/sprites/sounds/tools from other codebases diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 953aa99c0b2a0..8821b180c1ba3 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -14,6 +14,10 @@ ## Proof Of Testing +
+Screenshots/Videos + +
## Changelog diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000000..84bd4fa20aad9 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + target-branch: master + schedule: + interval: daily + labels: + - GitHub + open-pull-requests-limit: 10 diff --git a/.github/gbp.toml b/.github/gbp.toml index fe086e79b55f9..fd52ca827a160 100644 --- a/.github/gbp.toml +++ b/.github/gbp.toml @@ -23,3 +23,4 @@ reset_label = "GBP: Reset" "Sound" = 3 "Sprites" = 3 "Unit Tests" = 6 +"Wallening Revert Recovery" = 10 diff --git a/.github/guides/RUNNING_A_SERVER.md b/.github/guides/RUNNING_A_SERVER.md index 095c33d20710f..a1b43e2bb2a32 100644 --- a/.github/guides/RUNNING_A_SERVER.md +++ b/.github/guides/RUNNING_A_SERVER.md @@ -4,7 +4,7 @@ BYOND installed. You can get it from https://www.byond.com/download. Once you've that, extract the game files to wherever you want to keep them. This is a sourcecode-only release, so the next step is to compile the server files. -Double-click `BUILD.bat` in the root directory of the source code. This'll take +Double-click `BUILD.cmd` in the root directory of the source code. This'll take a little while, and if everything's done right you'll get a message like this: ``` diff --git a/.github/guides/STANDARDS.md b/.github/guides/STANDARDS.md index 9c6496e0c4dc9..c27c8ae7417ec 100644 --- a/.github/guides/STANDARDS.md +++ b/.github/guides/STANDARDS.md @@ -513,6 +513,30 @@ The following is a list of procs, and their safe replacements. * Move away from something, taking turf density into account `walk_away()` -> `SSmove_manager.move_away()` * Move to a random place nearby. NOT random walk `walk_rand()` -> `SSmove_manager.move_rand()` is random walk, `SSmove_manager.move_to_rand()` is walk to a random place +### Avoid pointer use + +BYOND has a variable type called pointers, which allow you to reference a variable rather then its value. As an example of how this works: + +``` +var/pointed_at = "text" +var/value = pointed_at // copies the VALUE of pointed at +var/reference = &pointed_at // points at pointed_at itself + +// so we can retain a reference even if pointed_at changes +pointed_at = "text AGAIN" +world << (*reference) // Deref to get the value, outputs "text AGAIN" + +// or modify the var remotely +*reference = "text a THIRD TIME" +world << pointed_at // outputs "text a THIRD TIME" +``` + +The problem with this is twofold. +- First: if you use a pointer to reference a var on a datum, it is essentially as if you held an invisible reference to that datum. This risks hard deletes in very unclear ways that cannot be tested for. +- Second: People don't like, understand how pointers work? They mix them up with classical C pointers, when they're more like `std::shared_ptr`. This leads to code that just doesn't work properly, or is hard to follow without first getting your mind around it. It also risks hiding what code does in dumb ways because pointers don't have unique types. + +For these reasons and with the hope of avoiding pointers entering general use, be very careful using them, if you use them at all. + ### BYOND hellspawn What follows is documentation of inconsistent or strange behavior found in our engine, BYOND. diff --git a/.github/guides/STYLE.md b/.github/guides/STYLE.md index c9b284bd33847..349933f38bf33 100644 --- a/.github/guides/STYLE.md +++ b/.github/guides/STYLE.md @@ -27,23 +27,6 @@ Do not use tabs/spaces for indentation in the middle of a code line. Not only is #define SPECIES_FELINID "felinid" ``` -### Comments - -You mustn't use box comments as headers for code, nor for anything else. -While it may be slightly more aesthetically pleasing, it can cause problems with auto-documentation and makes it far harder to add anything after the fact. -It's much easier to stick down a new line than have to balance a bunch of whitespaces and forward slashes. - -```dm -////////////////////////////////// -// BAD. DON'T DO THIS. STOP IT. // -////////////////////////////////// - -/* -* GOOD! -* CONTINUE TO DO THIS -*/ -``` - ### Control statements (if, while, for, etc) @@ -457,7 +440,7 @@ Pop-quiz, what does this do? give_pizza(TRUE, 2) ``` -Well, obviously the `TRUE` makes the pizza hot, and `2` is the number of toppings. +Well, obviously the `TRUE` makes the pizza hot, and `2` is the number of toppings. Code like this can be very difficult to read, especially since our LSP does not show argument names at this time. Because of this, you should prefer to use named arguments where the meaning is not otherwise obvious. @@ -607,7 +590,7 @@ This is [a real bug that tends to come up](https://github.com/tgstation/tgstatio The same goes for arguments passed to a macro... ``` -// Guarantee +// Guarantee #define CALCULATE_TEMPERATURE(base) (T20C + (##base)) ``` diff --git a/.github/guides/VISUALS.md b/.github/guides/VISUALS.md index a56d9f17677d5..69194004d4c10 100644 --- a/.github/guides/VISUALS.md +++ b/.github/guides/VISUALS.md @@ -367,6 +367,8 @@ You can actually force it to use a particular mob's sight to avoid aspects of th - [Table of Contents](#table-of-contents) - [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_in_dark) +`/mob/var/see_in_dark` sets the radius of a square around the mob that cuts out BYOND darkness. + This is why when you stand in darkness you can see yourself, and why you can see a line of objects appear when you use mesons (horrible effect btw). It's quite simple, but worth describing. diff --git a/.github/workflows/auto_changelog.yml b/.github/workflows/auto_changelog.yml index 6c40415fd3401..f7c8d14658049 100644 --- a/.github/workflows/auto_changelog.yml +++ b/.github/workflows/auto_changelog.yml @@ -15,8 +15,20 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + + - name: Generate App Token + id: app-token-generation + uses: actions/create-github-app-token@v1 + if: env.APP_PRIVATE_KEY != '' && env.APP_ID != '' + with: + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + env: + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} + APP_ID: ${{ secrets.APP_ID }} + - name: Run auto changelog - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | const { processAutoChangelog } = await import('${{ github.workspace }}/tools/pull_request_hooks/autoChangelog.js') diff --git a/.github/workflows/autowiki.yml b/.github/workflows/autowiki.yml index 82d164e0c7c2a..740b5d7d9eb21 100644 --- a/.github/workflows/autowiki.yml +++ b/.github/workflows/autowiki.yml @@ -26,7 +26,7 @@ jobs: uses: actions/cache@v4 with: path: ~/BYOND - key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }} + key: ${{ runner.os }}-byond-${{ hashFiles('dependencies.sh') }} - name: Install rust-g if: steps.secrets_set.outputs.SECRETS_ENABLED run: | diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index 2d6050dfc0a53..8e5d06138529d 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -13,21 +13,35 @@ on: merge_group: branches: - master + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: - run_linters: + start_gate: if: ( !contains(github.event.head_commit.message, '[ci skip]') ) + name: Start Gate + runs-on: ubuntu-latest + steps: + - name: Mandatory Empty Step + run: exit 0 + + run_linters: name: Run Linters + needs: start_gate runs-on: ubuntu-22.04 - concurrency: - group: run_linters-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + timeout-minutes: 5 + steps: - uses: actions/checkout@v4 - name: Restore SpacemanDMM cache uses: actions/cache@v4 with: path: ~/SpacemanDMM - key: ${{ runner.os }}-spacemandmm + key: ${{ runner.os }}-spacemandmm-${{ hashFiles('dependencies.sh') }} + restore-keys: | + ${{ runner.os }}-spacemandmm- - name: Restore Yarn cache uses: actions/cache@v4 with: @@ -53,18 +67,27 @@ jobs: uses: actions/cache@v4 with: path: ~/.cargo - key: ${{ runner.os }}-rust + key: ${{ runner.os }}-rust-${{ hashFiles('tools/ci/ci_dependencies.sh')}} + restore-keys: | + ${{ runner.os }}-rust- - name: Restore Cutter cache uses: actions/cache@v4 with: path: tools/icon_cutter/cache key: ${{ runner.os }}-cutter-${{ hashFiles('dependencies.sh') }} + - name: Install OpenDream + uses: robinraju/release-downloader@v1.11 + with: + repository: "OpenDreamProject/OpenDream" + tag: "latest" + fileName: "DMCompiler_linux-x64.tar.gz" + extract: true - name: Install Tools run: | pip3 install setuptools bash tools/ci/install_node.sh bash tools/ci/install_spaceman_dmm.sh dreamchecker - cargo install ripgrep --features pcre2 + bash tools/ci/install_ripgrep.sh tools/bootstrap/python -c '' - name: Give Linters A Go id: linter-setup @@ -81,8 +104,6 @@ jobs: 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 tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/modular_zubbers.json # BUBBER EDIT ADDITION - modular tick enforcement - name: Check Define Sanity if: steps.linter-setup.conclusion == 'success' && !cancelled() run: tools/bootstrap/python -m define_sanity.check @@ -93,6 +114,9 @@ jobs: if: steps.linter-setup.conclusion == 'success' && !cancelled() shell: bash run: ~/dreamchecker 2>&1 | bash tools/ci/annotate_dm.sh + #- name: Run OpenDream - SKYRAT REMOVAL - DreamChecker is fine for us so far - SKYRAT TODO + # if: steps.linter-setup.conclusion == 'success' && !cancelled() + # run: ./DMCompiler_linux-x64/DMCompiler tgstation.dme --suppress-unimplemented --define=CIBUILDING | bash tools/ci/annotate_od.sh - name: Run Map Checks if: steps.linter-setup.conclusion == 'success' && !cancelled() run: | @@ -118,20 +142,18 @@ jobs: run: tools/build/build --ci lint tgui-test compile_all_maps: - if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Compile Maps - needs: [collect_data] + needs: collect_data runs-on: ubuntu-22.04 - concurrency: - group: compile_all_maps-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + timeout-minutes: 5 + steps: - uses: actions/checkout@v4 - name: Restore BYOND cache uses: actions/cache@v4 with: path: ~/BYOND - key: ${{ runner.os }}-byond + key: ${{ runner.os }}-byond-${{ hashFiles('dependencies.sh') }} - name: Compile All Maps run: | bash tools/ci/install_byond.sh @@ -144,16 +166,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]') ) name: Collect data for other tasks + needs: start_gate runs-on: ubuntu-22.04 + timeout-minutes: 5 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.head_ref || github.run_id }} - cancel-in-progress: true + steps: - uses: actions/checkout@v4 - name: Find Maps @@ -175,32 +196,28 @@ 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]') ) name: Integration Tests - needs: [collect_data] + needs: collect_data + strategy: fail-fast: false matrix: map: ${{ fromJSON(needs.collect_data.outputs.maps).paths }} - concurrency: - group: run_all_tests-${{ github.head_ref || github.run_id }}-${{ matrix.map }} - cancel-in-progress: true + uses: ./.github/workflows/run_integration_tests.yml with: map: ${{ matrix.map }} 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: needs.collect_data.outputs.alternate_tests != '[]' name: Alternate Tests - needs: [collect_data] + needs: collect_data strategy: fail-fast: false matrix: setup: ${{ fromJSON(needs.collect_data.outputs.alternate_tests) }} - concurrency: - 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: map: ${{ matrix.setup.map }} @@ -208,19 +225,12 @@ jobs: minor: ${{ matrix.setup.minor }} 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 != '[]' ) - name: Check Alternate Tests - needs: [run_alternate_tests] - runs-on: ubuntu-22.04 - steps: - - run: echo Alternate tests passed. - compare_screenshots: - if: "!contains(github.event.head_commit.message, '[ci skip]') && always()" - needs: [run_all_tests, run_alternate_tests] + if: needs.collect_data.outputs.alternate_tests == '[]' || needs.run_alternate_tests.result == 'success' + needs: [ collect_data, run_all_tests, run_alternate_tests ] name: Compare Screenshot Tests - runs-on: ubuntu-20.04 + timeout-minutes: 15 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Setup directory @@ -254,13 +264,11 @@ jobs: path: artifacts/screenshot_comparisons test_windows: - if: ( !contains(github.event.head_commit.message, '[ci skip]') ) name: Windows Build needs: [collect_data] runs-on: windows-latest - concurrency: - group: test_windows-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + timeout-minutes: 5 + steps: - uses: actions/checkout@v4 - name: Restore Yarn cache @@ -279,3 +287,14 @@ jobs: with: dmb-location: tgstation.dmb max-required-client-version: ${{needs.collect_data.outputs.max_required_byond_client}} + + completion_gate: # Serves as a non-moving target for branch rulesets + if: always() && !cancelled() + name: Completion Gate + needs: [ test_windows, compare_screenshots, compile_all_maps, run_linters ] + runs-on: ubuntu-latest + steps: + - name: Decide whether the needed jobs succeeded or failed + uses: re-actors/alls-green@release/v1 + with: + jobs: ${{ toJSON(needs) }} diff --git a/.github/workflows/codeowner_reviews.yml.disabled b/.github/workflows/codeowner_reviews.yml.disabled index a9e78b3513602..e6cfb98027901 100644 --- a/.github/workflows/codeowner_reviews.yml.disabled +++ b/.github/workflows/codeowner_reviews.yml.disabled @@ -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: runs-on: ubuntu-latest + timeout-minutes: 5 steps: # Checks-out your repository under $GITHUB_WORKSPACE, so the job can access it - uses: actions/checkout@v4 - #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 4fa5bb5a6819a..cfdca5f75c289 100644 --- a/.github/workflows/compile_changelogs.yml +++ b/.github/workflows/compile_changelogs.yml @@ -2,13 +2,15 @@ name: Compile changelogs on: schedule: - - cron: "0 0 * * *" + - cron: "0 8 * * *" workflow_dispatch: jobs: compile: name: "Compile changelogs" runs-on: ubuntu-22.04 + permissions: + contents: write steps: - name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps" id: value_holder @@ -18,35 +20,52 @@ jobs: unset SECRET_EXISTS if [ -n "$ENABLER_SECRET" ]; then SECRET_EXISTS=true ; fi echo "ACTIONS_ENABLED=$SECRET_EXISTS" >> $GITHUB_OUTPUT + - name: "Setup python" if: steps.value_holder.outputs.ACTIONS_ENABLED - uses: actions/setup-python@v1 + uses: actions/setup-python@v5 with: python-version: '3.x' + - name: "Install deps" if: steps.value_holder.outputs.ACTIONS_ENABLED run: | python -m pip install --upgrade pip python -m pip install pyyaml sudo apt-get install dos2unix + - name: "Checkout" if: steps.value_holder.outputs.ACTIONS_ENABLED uses: actions/checkout@v4 with: fetch-depth: 25 persist-credentials: false + - name: "Compile" if: steps.value_holder.outputs.ACTIONS_ENABLED run: | python tools/ss13_genchangelog.py html/changelogs + - name: Commit if: steps.value_holder.outputs.ACTIONS_ENABLED run: | - git config --local user.email "action@github.com" git config --local user.name "Changelogs" + git config --local user.email "actions@github.com" git pull origin master git add html/changelogs - git commit -m "Automatic changelog compile [ci skip]" -a || true + git commit -m "Bubberstation automatic changelog compile [ci skip]" -a || true + + - name: Generate App Token + id: app-token-generation + uses: actions/create-github-app-token@v1 + if: env.APP_PRIVATE_KEY != '' && env.APP_ID != '' + with: + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + env: + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} + APP_ID: ${{ secrets.APP_ID }} + - name: "Push" if: steps.value_holder.outputs.ACTIONS_ENABLED uses: ad-m/github-push-action@master diff --git a/.github/workflows/docker_publish.yml b/.github/workflows/docker_publish.yml index daf078d2d4c54..6daec1ded1057 100644 --- a/.github/workflows/docker_publish.yml +++ b/.github/workflows/docker_publish.yml @@ -1,10 +1,8 @@ name: Docker Build - on: - push: - branches: - - master - + schedule: + - cron: "19 1 * * *" + workflow_dispatch: jobs: publish: if: ( !contains(github.event.head_commit.message, '[ci skip]') ) diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index e2234ca7ee0ed..40710a9044b74 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -1,11 +1,10 @@ name: Generate documentation on: - push: - branches: - - master + schedule: + - cron: "44 */6 * * *" + workflow_dispatch: permissions: contents: read - jobs: generate_documentation: permissions: @@ -28,10 +27,9 @@ jobs: touch dmdoc/.nojekyll echo codedocs.tgstation13.org > dmdoc/CNAME - name: Deploy - uses: JamesIves/github-pages-deploy-action@3.7.1 + uses: JamesIves/github-pages-deploy-action@v4.6.4 with: - BRANCH: gh-pages - CLEAN: true - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SINGLE_COMMIT: true - FOLDER: dmdoc + branch: gh-pages + clean: true + single-commit: true + folder: dmdoc diff --git a/.github/workflows/remove_guide_comments.yml b/.github/workflows/remove_guide_comments.yml index e3a4ac3feda06..621d860c5cd47 100644 --- a/.github/workflows/remove_guide_comments.yml +++ b/.github/workflows/remove_guide_comments.yml @@ -11,7 +11,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Remove guide comments - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | const { removeGuideComments } = await import('${{ github.workspace }}/tools/pull_request_hooks/removeGuideComments.js') diff --git a/.github/workflows/rerun_flaky_tests.yml b/.github/workflows/rerun_flaky_tests.yml index 7f498de144308..80ece468061b4 100644 --- a/.github/workflows/rerun_flaky_tests.yml +++ b/.github/workflows/rerun_flaky_tests.yml @@ -12,7 +12,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Rerun flaky tests - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | const { rerunFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js') @@ -24,7 +24,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Report flaky tests - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | const { reportFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js') diff --git a/.github/workflows/run_integration_tests.yml b/.github/workflows/run_integration_tests.yml index 368430162d394..3485b90d47489 100644 --- a/.github/workflows/run_integration_tests.yml +++ b/.github/workflows/run_integration_tests.yml @@ -16,9 +16,11 @@ on: max_required_byond_client: required: true type: string + jobs: run_integration_tests: runs-on: ubuntu-latest + timeout-minutes: 15 services: mysql: image: mysql:latest @@ -33,7 +35,7 @@ jobs: uses: actions/cache@v4 with: path: ~/BYOND - key: ${{ runner.os }}-byond-${{ secrets.CACHE_PURGE_KEY }} + key: ${{ runner.os }}-byond-${{ hashFiles('dependencies.sh') }} - name: Setup database run: | sudo systemctl start mysql @@ -44,9 +46,9 @@ jobs: - name: Install rust-g run: | bash tools/ci/install_rust_g.sh - - name: Install auxlua + - name: Install dreamluau run: | - bash tools/ci/install_auxlua.sh + bash tools/ci/install_dreamluau.sh - name: Configure version run: | echo "BYOND_MAJOR=${{ inputs.major }}" >> $GITHUB_ENV @@ -57,7 +59,7 @@ jobs: run: | bash tools/ci/install_byond.sh source $HOME/BYOND/byond/bin/byondsetup - tools/build/build --ci dm -DCIBUILDING -DANSICOLORS -WError -NWTG0001 + tools/build/build --ci dm -DCIBUILDING -DANSICOLORS -Werror -ITG0001 -I"loop_checks" - name: Run Tests run: | source $HOME/BYOND/byond/bin/byondsetup diff --git a/.github/workflows/show_screenshot_test_results.yml b/.github/workflows/show_screenshot_test_results.yml index c61d09fa89057..b48ca983b35e7 100644 --- a/.github/workflows/show_screenshot_test_results.yml +++ b/.github/workflows/show_screenshot_test_results.yml @@ -34,7 +34,7 @@ jobs: npm install node-fetch - name: Show screenshot test results if: steps.secrets_set.outputs.SECRETS_ENABLED - uses: actions/github-script@v6 + uses: actions/github-script@v7 env: FILE_HOUSE_KEY: ${{ secrets.ARTIFACTS_FILE_HOUSE_KEY }} with: diff --git a/.github/workflows/stale.yml.disabled b/.github/workflows/stale.yml.disabled index e7e41eebbab3a..cb42759342468 100644 --- a/.github/workflows/stale.yml.disabled +++ b/.github/workflows/stale.yml.disabled @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/stale@v4 + - uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-pr-message: "This PR has been inactive for long enough to be automatically marked as stale. This means it is at risk of being auto closed in ~ 7 days, please address any outstanding review items and ensure your PR is finished, if these are all true and you are auto-staled anyway, you need to actively ask maintainers if your PR will be merged. Once you have done any of the previous actions then you should request a maintainer remove the stale label on your PR, to reset the stale timer. If you feel no maintainer will respond in that time, you may wish to close this PR youself, while you seek maintainer comment, as you will then be able to reopen the PR yourself." diff --git a/.github/workflows/test_merge_bot.yml b/.github/workflows/test_merge_bot.yml index c77e507794413..76dcd3cabc5b0 100644 --- a/.github/workflows/test_merge_bot.yml +++ b/.github/workflows/test_merge_bot.yml @@ -32,7 +32,7 @@ jobs: npm install node-fetch - name: Check for test merges if: steps.secrets_set.outputs.GET_TEST_MERGES_URL - uses: actions/github-script@v6 + uses: actions/github-script@v7 env: GET_TEST_MERGES_URL: ${{ secrets.GET_TEST_MERGES_URL }} with: diff --git a/.github/workflows/tgs_test.yml b/.github/workflows/tgs_test.yml index bd538307aa3f3..4b7853aa77cfe 100644 --- a/.github/workflows/tgs_test.yml +++ b/.github/workflows/tgs_test.yml @@ -14,6 +14,7 @@ on: - 'code/__DEFINES/tgs.dm' - 'code/game/world.dm' - 'code/modules/tgs/**' + - 'tools/bootstrap/**' - 'tools/tgs_scripts/**' - 'tools/tgs_test/**' pull_request: @@ -28,6 +29,7 @@ on: - 'code/__DEFINES/tgs.dm' - 'code/game/world.dm' - 'code/modules/tgs/**' + - 'tools/bootstrap/**' - 'tools/tgs_scripts/**' - 'tools/tgs_test/**' merge_group: @@ -57,7 +59,7 @@ jobs: - 5000:5000 #Can't use env here for some reason steps: - name: Setup dotnet - uses: actions/setup-dotnet@v2 + uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x diff --git a/.github/workflows/update_tgs_dmapi.yml b/.github/workflows/update_tgs_dmapi.yml index 15d45b7935f05..3f7ee320d90b5 100644 --- a/.github/workflows/update_tgs_dmapi.yml +++ b/.github/workflows/update_tgs_dmapi.yml @@ -9,6 +9,9 @@ jobs: update-dmapi: runs-on: ubuntu-22.04 name: Update the TGS DMAPI + permissions: + contents: write + pull-requests: write steps: - name: Clone uses: actions/checkout@v4 @@ -21,6 +24,7 @@ jobs: - name: Apply DMAPI update uses: tgstation/tgs-dmapi-updater@v2 + id: dmapi-update with: header-path: 'code/__DEFINES/tgs.dm' library-path: 'code/modules/tgs' @@ -28,12 +32,23 @@ jobs: - name: Commit and Push continue-on-error: true run: | - git config user.name tgstation-server - git config user.email tgstation-server@users.noreply.github.com + git config user.name "tgstation-ci[bot]" + git config user.email "179393467+tgstation-ci[bot]@users.noreply.github.com" git add . git commit -m 'Update TGS DMAPI' git push -f -u origin tgs-dmapi-update + - name: Generate App Token + id: app-token-generation + uses: actions/create-github-app-token@v1 + if: env.APP_PRIVATE_KEY != '' && env.APP_ID != '' + with: + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + env: + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} + APP_ID: ${{ secrets.APP_ID }} + - name: Create Pull Request uses: repo-sync/pull-request@v2 if: ${{ success() }} @@ -41,7 +56,7 @@ jobs: source_branch: "tgs-dmapi-update" destination_branch: "master" pr_title: "Automatic TGS DMAPI Update" - 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_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.\n\n${{ steps.dmapi-update.outputs.release-notes }}" pr_label: "Tools" pr_allow_empty: false - github_token: ${{ secrets.COMFY_ORANGE_PAT }} + github_token: ${{ steps.app-token-generation.outputs.token || secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index ae125254922ef..8ef9946abc935 100644 --- a/.gitignore +++ b/.gitignore @@ -25,8 +25,6 @@ # Ignore compiled linux libs in the root folder, e.g. librust_g.so /*.so -# - #Ignore compiled files and other files generated during compilation. *.mdme *.mdme.* @@ -37,16 +35,6 @@ *.lk *.int *.backup - -# Ignore tools ported over from SpacemanDMM for personal use -.fingerprint -build/ -deps/ -incremental/ -dmm-tools.exe -dmm-tools.d -git-diagnostics-2024-08-11-1513.zip - ### https://raw.github.com/github/gitignore/cc542de017c606138a87ee4880e5f06b3a306def/Global/Linux.gitignore *~ @@ -223,16 +211,10 @@ Temporary Items /tools/tgs_test/bin/* /tools/tgs_test/obj/* -# Autowiki -/tools/autowiki/node_modules - -# TGUI bundles - SKYRAT EDIT -/tgui/public/tgui-common.bundle.js - # Built auxtools libraries and intermediate files aux*.dll libaux*.so -aux*.pdb +*.pdb # byond-tracy, we intentionally do not ship this and do not want to maintain it # https://github.com/mafemergency/byond-tracy/ @@ -259,10 +241,6 @@ define_sanity_output.txt # ezdb /db/ /config/ezdb.txt -<<<<<<< HEAD -======= # Running OpenDream locally tgstation.json -.cargo-lock ->>>>>>> 5d81843b3302 (Raptor faction fix (#85792)) diff --git a/Dockerfile b/Dockerfile index 0ae4f82be8036..a27c64574f146 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,5 @@ # base = ubuntu + full apt update FROM ubuntu:xenial AS base - RUN dpkg --add-architecture i386 \ && apt-get update \ && apt-get upgrade -y \ diff --git a/README.md b/README.md index af6a52b8bc89a..0a609379f9347 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ -## SPLURT Station +## SPLURT Station (Bubberstation Downstream) [![CI Suite](https://github.com/SPLURT-Station/S.P.L.U.R.T-tg/actions/workflows/ci_suite.yml/badge.svg)](https://github.com/SPLURT-Station/S.P.L.U.R.T-tg/actions/workflows/ci_suite.yml) +[![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) [![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 | @@ -14,7 +15,7 @@ | Codedocs | [https://skyrat-ss13.github.io/Skyrat-tg/](https://skyrat-ss13.github.io/Skyrat-tg/) | | S.P.L.U.R.T Station Discord | [https://discord.gg/wynHVMzHzC](https://discord.gg/wynHVMzHzC) | -This is S.P.L.U.R.T Station's downstream fork of bubberstation, which is in turn a fork of skyrat, which is in turn a fork of tgstation. +This is S.P.L.U.R.T Station's downstream fork of bubberstation, which is in turn a fork of TG (formerly skyrat). **Please note that this repository contains sexually explicit content and is not suitable for those under the age of 18.** @@ -23,7 +24,8 @@ Space Station 13 is a paranoia-laden round-based roleplaying game set against th ## Contribution Rules and Guidelines **1. Do Not Be A Dick** -- The S.P.L.U.R.T. main repository is run by and contributed by volunteers. Please be considerate with the people who help maintain our codebase. We reserve the right to permanently remove anyone who does not show both our contributors and maintainers common decency. +- The S.P.L.U.R.T. main repository is run by and contributed by volunteers and hobbiests. Please be considerate with the people who help maintain our codebase. We reserve the right to permanently remove anyone who does not show both our contributors and maintainers common decency. +- S.P.L.U.R.T. does not operate a strict "goodboy" points system or have defined goals, and anyone is welcome to contribute to this project. That being said, the maintainers of this project are free to curate comments as seen fit to uphold a respectful environment. **2. Modularization Standards Will be Upheld** - This codebase is a active downstream to Bubberstation with frequent upstream merges. @@ -44,6 +46,10 @@ Space Station 13 is a paranoia-laden round-based roleplaying game set against th *Credit: [Goonstation contribution guidelines](https://hackmd.io/@goonstation/docs/%2F%40goonstation%2Fcontribute#What-if-I-change-my-mind-about-my-contributions-being-published)* +## Modularization and codedocs note + +As of our recent split from Skyrat, a lot of codedocs/modularization guides need to be rewritten. Until it is done expect some wait time with larger refactors. You are also free to edit any Skyrat files + ## 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. @@ -54,6 +60,7 @@ You are responsible for the testing of your content. You should not mark a pull [Running on the server](.github/guides/RUNNING_A_SERVER.md) +[Maps and Away Missions](.github/guides/MAPS_AND_AWAY_MISSIONS.md) [Maps and Away Missions](.github/guides/MAPS_AND_AWAY_MISSIONS.md) ## Compilation @@ -78,6 +85,7 @@ All code before [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 a See LICENSE and GPLv3.txt for more details. +The TGS DMAPI is licensed as a subproject under the MIT license. 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. diff --git a/SQL/bubber_schema.sql b/SQL/bubber_schema.sql index 76e7c91742d31..cfa5e7b6b3d40 100644 --- a/SQL/bubber_schema.sql +++ b/SQL/bubber_schema.sql @@ -22,3 +22,14 @@ CREATE TABLE `jobexempt` ( PRIMARY KEY (`ckey`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; /*!40101 SET character_set_client = @saved_cs_client */; + + +DROP TABLE IF EXISTS `vetted_list`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vetted_list` ( + `ckey` varchar(32) NOT NULL, + `admin_who_added` VARCHAR(32) DEFAULT NULL, + PRIMARY KEY (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; diff --git a/SQL/database_changelog.md b/SQL/database_changelog.md index bad8912ce9357..2e60016b3bd91 100644 --- a/SQL/database_changelog.md +++ b/SQL/database_changelog.md @@ -2,10 +2,10 @@ 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.30 (5.27 for /tg/); The query to update the schema revision table is: +The latest database version is 5.31 (for bubberstation, 5.30 for skyrat) (5.27 for /tg/); The query to update the schema revision table is: ```sql -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 30); +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 31); ``` or @@ -283,7 +283,11 @@ Modified table `messages`, adding column `playtime` to show the user's playtime ```sql ALTER TABLE `messages` ADD `playtime` INT(11) NULL DEFAULT(NULL) AFTER `severity` ``` +======= +Version 5.12, 29 December 2020, by Missfox +Modified table `messages`, adding column `playtime` to show the user's playtime when the note was created. +ALTER TABLE `messages` ADD `playtime` INT(11) NULL DEFAULT(NULL) AFTER `severity` ----------------------------------------------------- Version 5.11, 7 September 2020, by bobbahbrown, MrStonedOne, and Jordie0608 (Updated 26 March 2021 by bobbahbrown) diff --git a/__odlint.dm b/__odlint.dm new file mode 100644 index 0000000000000..b7c120514a1d0 --- /dev/null +++ b/__odlint.dm @@ -0,0 +1,10 @@ +// This file is included right at the start of the DME. +// Its purpose is to enable multiple lints (pragmas) that are supported by OpenDream to better validate the codebase +// These are essentially nitpicks the DM compiler should pick up on but doesnt + +#if !defined(SPACEMAN_DMM) && defined(OPENDREAM) +// This is in a separate file as a hack to avoid SpacemanDMM +// evaluating the #pragma lines, even if its outside a block it cares about +// (Also so people can code-own it. Shoutout to AA) +#include "tools/ci/od_lints.dm" +#endif diff --git a/_maps/RandomRuins/IceRuins/bubberstation/icemoon_interdyne.dmm b/_maps/RandomRuins/IceRuins/bubberstation/icemoon_interdyne.dmm index 45b312c0b1ccd..02ae56925efd1 100644 --- a/_maps/RandomRuins/IceRuins/bubberstation/icemoon_interdyne.dmm +++ b/_maps/RandomRuins/IceRuins/bubberstation/icemoon_interdyne.dmm @@ -2666,7 +2666,7 @@ /area/ruin/syndicate_lava_base/main) "tf" = ( /obj/machinery/light/directional/south, -/obj/machinery/vending/medical/syndicate_access/cybersun{ +/obj/machinery/vending/medical/syndicate/cybersun{ desc = "An advanced vendor that dispenses medical drugs, both recreational and medicinal. It's said to have been salvaged from an old decommissioned Cybersun Cruiser."; name = "\improper SyndiMed ++"; onstation = 0; @@ -7168,7 +7168,7 @@ /area/ruin/syndicate_lava_base/main) "Zi" = ( /obj/effect/turf_decal/tile/bar, -/obj/machinery/vending/boozeomat/syndicate_access{ +/obj/machinery/vending/boozeomat/syndicate{ onstation = 0; onstation_override = 1 }, diff --git a/_maps/RandomRuins/IceRuins/bubberstation/icemoon_surface_gas_bubber.dmm b/_maps/RandomRuins/IceRuins/bubberstation/icemoon_surface_gas_bubber.dmm new file mode 100644 index 0000000000000..d7af2438b786d --- /dev/null +++ b/_maps/RandomRuins/IceRuins/bubberstation/icemoon_surface_gas_bubber.dmm @@ -0,0 +1,2050 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"aR" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/duct, +/turf/open/floor/plating/lavaland_baseturf, +/area/ruin/powered/lizard_gas) +"bn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"bJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/starkist/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"bP" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/girder/reinforced, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"cv" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/stack/spacecash/c10{ + pixel_y = 9; + pixel_x = -2 + }, +/obj/item/stack/spacecash/c20{ + pixel_y = 6 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"cE" = ( +/obj/machinery/duct, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"cF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/spawner/random/entertainment/lighter, +/obj/structure/sign/poster/contraband/smoke/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"cI" = ( +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"dd" = ( +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"ed" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored) +"ei" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"eq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"es" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/directional/south, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"ev" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"eF" = ( +/obj/structure/sign/poster/contraband/tipper_cream_soda/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/bbqsauce{ + pixel_y = 17; + pixel_x = 9 + }, +/obj/item/reagent_containers/condiment/hotsauce{ + pixel_y = 15; + pixel_x = -8 + }, +/obj/item/reagent_containers/condiment/coldsauce{ + pixel_x = -9; + pixel_y = 5 + }, +/obj/item/reagent_containers/condiment/donksauce{ + pixel_x = 1; + pixel_y = 15 + }, +/obj/item/reagent_containers/condiment/mayonnaise{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/bun, +/obj/item/food/bun, +/obj/item/food/bun, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"eM" = ( +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/powered/lizard_gas) +"eZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"gm" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/food/cornuto{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/food/cornuto{ + pixel_y = -5; + pixel_x = 2 + }, +/obj/item/food/cornuto{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/food/cornuto{ + pixel_y = -5; + pixel_x = -3 + }, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"gq" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/storage/fancy/egg_box, +/obj/item/storage/fancy/egg_box{ + pixel_y = 9 + }, +/obj/item/storage/fancy/pickles_jar, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"gv" = ( +/turf/template_noop, +/area/template_noop) +"gW" = ( +/obj/structure/sink/gasstation{ + dir = 4; + pixel_x = -14 + }, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"hf" = ( +/obj/structure/table, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"hO" = ( +/obj/machinery/light/directional/south, +/obj/structure/sign/warning/chem_diamond/directional/south, +/obj/machinery/duct, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"ih" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"iS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"jB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8; + chamber_id = "lizardgaslava" + }, +/obj/item/toy/plush/lizard_plushie/space/green{ + desc = "A famous lizard, in plushy form."; + name = "Bingo" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/powered/lizard_gas) +"jD" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"jG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/sign/warning/no_smoking/directional/east, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"jQ" = ( +/turf/closed/wall{ + baseturfs = /turf/open/floor/plating/lavaland_baseturf + }, +/area/ruin/powered/lizard_gas) +"kc" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "lizardgas_lavaland_entrance" + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"kd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/effect/mob_spawn/ghost_role/human/lavaland_gasstation{ + dir = 4 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"kl" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"ku" = ( +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/structure/bed/dogbed{ + name = "Zarpo's bed"; + desc = "A comfy-looking lizard bed. Looks a lot like a dog bed." + }, +/mob/living/basic/lizard{ + name = "Zarpo"; + desc = "This little guy is a survivor, that's for sure. It's also the manager of the gas station!" + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"kI" = ( +/obj/machinery/dryer{ + pixel_x = 26 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"kJ" = ( +/obj/structure/sink/gasstation{ + dir = 8; + pixel_x = 14 + }, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"kS" = ( +/obj/structure/sign/poster/official/pda_ad/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/table/reinforced, +/obj/item/food/rootbread_peanut_butter_banana{ + pixel_y = 12; + pixel_x = -3 + }, +/obj/item/food/rootbread_peanut_butter_jelly{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"kT" = ( +/obj/structure/table, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -4; + pixel_y = 2 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/unexplored) +"lt" = ( +/obj/machinery/vending/dorms{ + onstation = 0 + }, +/turf/closed/wall/r_wall{ + baseturfs = /turf/open/floor/plating/lavaland_baseturf + }, +/area/ruin/powered/lizard_gas) +"lK" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/food/burger/rootguffin{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/food/burger/rootguffin{ + pixel_x = 4; + pixel_y = 10 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"ma" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"mz" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/girder/reinforced, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"mE" = ( +/obj/structure/bonfire/prelit, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored) +"oo" = ( +/obj/structure/rack, +/obj/item/food/chips{ + pixel_x = 7 + }, +/obj/item/food/chips{ + pixel_y = 7; + pixel_x = -4 + }, +/obj/item/food/chips/shrimp{ + pixel_y = 10; + pixel_x = 7 + }, +/obj/item/food/chips/shrimp{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"oy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"oI" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "lizardgas_lavaland_entrance" + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"pH" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"pL" = ( +/obj/structure/rack, +/obj/item/food/sticko/nutty{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/food/sticko{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"pO" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"qM" = ( +/turf/closed/wall/r_wall{ + baseturfs = /turf/open/floor/plating/lavaland_baseturf + }, +/area/ruin/powered/lizard_gas) +"rh" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"sm" = ( +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/griddle/frontier_tabletop, +/obj/item/food/raw_sausage, +/obj/item/food/raw_sausage{ + pixel_y = 4 + }, +/obj/item/food/raw_sausage{ + pixel_y = 9 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"sn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"sO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"sQ" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored) +"sU" = ( +/obj/structure/barricade/wooden/snowed, +/obj/structure/barricade/wooden/crude/snow, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored) +"tx" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/unexplored) +"tS" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/structure/reagent_dispensers/fueltank/large{ + anchored = 1; + can_be_unanchored = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"tW" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/storage/cans/sixbeer, +/obj/item/storage/cans/sixsoda, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"ul" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/food/popsicle/creamsicle_berry{ + pixel_y = 4; + pixel_x = -1 + }, +/obj/item/food/popsicle/creamsicle_berry{ + pixel_y = 1; + pixel_x = 5 + }, +/obj/item/food/popsicle/creamsicle_orange, +/obj/item/food/popsicle/creamsicle_orange{ + pixel_y = 6; + pixel_x = 3 + }, +/obj/structure/closet/crate/freezer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"ur" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"uv" = ( +/obj/structure/shipping_container/donk_co, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"vp" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/food/cheese/mozzarella{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/food/cheese/mozzarella{ + pixel_y = -4; + pixel_x = 1 + }, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/cheese_curds, +/obj/item/food/cheese/curd_cheese, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"vA" = ( +/obj/machinery/atmospherics/components/tank/oxygen{ + dir = 8 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"wH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"wK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"wN" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"wU" = ( +/obj/structure/table, +/obj/structure/sign/poster/official/festive/directional/south, +/obj/item/wrench, +/obj/item/universal_scanner{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"wX" = ( +/obj/structure/cable, +/obj/structure/sign/poster/fluff/lizards_gas_power/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/breath, +/obj/item/pickaxe, +/obj/item/gun/ballistic/rifle/boltaction/pipegun, +/obj/item/ammo_casing/junk/hunter, +/obj/item/ammo_casing/junk/hunter, +/obj/item/ammo_casing/junk/hunter, +/obj/item/storage/box/coffeepack/robusta, +/obj/item/storage/box/coffeepack/robusta, +/obj/item/flatpacked_machine, +/obj/item/flatpacked_machine/ore_silo, +/obj/item/flatpacked_machine/sustenance_machine, +/obj/item/flatpacked_machine/organics_ration_printer, +/obj/item/flatpacked_machine/macrowave, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"xi" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ + dir = 4; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/powered/lizard_gas) +"xw" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"xK" = ( +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"xN" = ( +/obj/structure/rack, +/obj/item/reagent_containers/condiment/vegetable_oil{ + pixel_y = 5; + pixel_x = -1 + }, +/obj/item/reagent_containers/condiment/vegetable_oil{ + pixel_y = 1; + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"yG" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/mini_fridge{ + pixel_y = 5 + }, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/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/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"yH" = ( +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"yZ" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/powered/lizard_gas) +"zh" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bucket{ + pixel_y = 2 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/unexplored) +"zm" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"zF" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/lavaland_baseturf, +/area/ruin/powered/lizard_gas) +"zJ" = ( +/obj/machinery/door/window/right/directional/east, +/obj/machinery/door/window/left/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"zL" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Ao" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ + dir = 4; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/powered/lizard_gas) +"AM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/machinery/light_switch/directional/south, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Bc" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"Cc" = ( +/obj/structure/table/reinforced, +/obj/machinery/coffeemaker/impressa{ + pixel_x = 2 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Ce" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Cm" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"CW" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Dl" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"DP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/machinery/duct, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"Ea" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/powered/lizard_gas) +"El" = ( +/obj/structure/table, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/unexplored) +"Ez" = ( +/obj/structure/billboard/roadsign/twothousand, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"EC" = ( +/obj/structure/sign/poster/contraband/jumbo_bar/directional/east, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"EO" = ( +/obj/structure/chair/sofa/right/maroon{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Fp" = ( +/obj/structure/rack, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random{ + pixel_x = 8; + pixel_y = -5 + }, +/obj/item/food/cornchips/random{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/item/food/cornchips/random{ + pixel_y = -7; + pixel_x = -5 + }, +/obj/item/food/cornchips/random{ + pixel_y = -7; + pixel_x = 3 + }, +/obj/item/food/cornchips/random{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/structure/sign/poster/contraband/eat/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"FP" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Gn" = ( +/obj/structure/rack, +/obj/item/food/candy, +/obj/item/food/candy, +/obj/item/food/candy, +/obj/item/food/chocolatebar, +/obj/item/food/chocolatebar{ + pixel_y = 3 + }, +/obj/item/food/chocolatebar{ + pixel_y = 6 + }, +/obj/structure/sign/poster/contraband/space_cola/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Go" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"GO" = ( +/obj/structure/water_source/puddle, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored) +"HE" = ( +/obj/machinery/light/directional/north, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"HI" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"HJ" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"IF" = ( +/turf/closed/wall/r_wall, +/area/ruin/powered/lizard_gas) +"Ji" = ( +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored) +"Jv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Kr" = ( +/obj/structure/toilet, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"KG" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"KV" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Lh" = ( +/obj/structure/cable, +/obj/structure/sign/poster/official/fruit_bowl/directional/east, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"LG" = ( +/obj/structure/billboard/lizards_gas, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"LP" = ( +/obj/structure/mop_bucket, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/unexplored) +"Md" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored) +"Mz" = ( +/obj/structure/sign/warning/fire/directional/south, +/obj/structure/reagent_dispensers/fueltank/large{ + anchored = 1; + can_be_unanchored = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"MA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"MW" = ( +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Pg" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"Py" = ( +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"QI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/sign/poster/fluff/lizards_gas_payment/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"QK" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/reagent_containers/condiment/yoghurt{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/reagent_containers/condiment/yoghurt{ + pixel_x = 6; + pixel_y = -1 + }, +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"QQ" = ( +/obj/effect/spawner/random/trash/food_packaging, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Rc" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump/on/pink/visible{ + dir = 8; + target_pressure = 4100 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Rs" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/robust_softdrinks/directional/east, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"RC" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"RD" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron, +/area/ruin/powered/lizard_gas) +"RE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"RW" = ( +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"Sb" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/machinery/door/airlock/grunge, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"SX" = ( +/obj/structure/chair/sofa/left/maroon{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"SZ" = ( +/obj/structure/table, +/obj/item/mop, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/unexplored) +"Tz" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/machinery/computer/atmos_control/noreconnect{ + atmos_chambers = list("lizardgaslava"="Plasma Supply"); + dir = 4; + name = "gas tank monitor"; + desc = "This computer connects to and controls the sensors and equipment in a nearby pressurised gas reservoir." + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"TA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"TY" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"UB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"UH" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Vp" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Vq" = ( +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/unexplored) +"Ww" = ( +/obj/machinery/duct, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/chem_diamond/directional/north, +/turf/open/floor/asphalt, +/area/ruin/powered/lizard_gas) +"Wz" = ( +/obj/structure/sign/poster/official/plasma_effects/directional/east, +/obj/structure/reagent_dispensers/plumbed/storage{ + dir = 8; + reagent_id = /datum/reagent/toxin/plasma; + name = "plasma storage tank"; + tank_volume = 2500 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"WG" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"WN" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/item/food/donut/choco{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/item/food/donut/berry{ + pixel_x = 5 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Xn" = ( +/obj/machinery/door/airlock/bathroom, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"XA" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Yh" = ( +/obj/structure/table, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Yn" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/powered/lizard_gas) +"Yv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"YC" = ( +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored) +"YP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"YX" = ( +/obj/machinery/air_sensor{ + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/powered/lizard_gas) +"Zu" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/spawner/random/trash/deluxe_garbage, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) +"Zv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/powered/lizard_gas) + +(1,1,1) = {" +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +LG +Ji +Ji +gv +gv +"} +(2,1,1) = {" +gv +gv +gv +gv +gv +gv +gv +gv +gv +gv +Ji +Ji +Ji +Ji +Ji +gv +gv +gv +gv +gv +ur +Ji +Ji +gv +gv +"} +(3,1,1) = {" +gv +gv +gv +gv +gv +gv +gv +Ji +Ji +Ji +Ji +tx +tx +GO +Ji +Ji +gv +gv +gv +gv +ur +Ji +ur +gv +gv +"} +(4,1,1) = {" +gv +gv +gv +gv +gv +gv +Ji +Ji +gv +gv +zh +tx +tx +El +Vq +Ji +gv +gv +gv +gv +Ez +ur +Ji +gv +gv +"} +(5,1,1) = {" +gv +gv +gv +gv +gv +Ji +Ji +gv +gv +gv +SZ +tx +tx +kT +LP +Ji +gv +gv +gv +gv +ur +Ji +Ji +gv +gv +"} +(6,1,1) = {" +gv +gv +gv +gv +gv +Ji +gv +bP +rh +rh +rh +rh +rh +rh +rh +rh +mz +gv +gv +gv +ur +Ji +ur +gv +gv +"} +(7,1,1) = {" +gv +gv +gv +gv +gv +Ji +Ji +kl +cE +jD +cE +jD +jD +cE +jD +cE +Pg +Ji +Ji +Ji +Ji +Ji +Ji +gv +gv +"} +(8,1,1) = {" +gv +gv +gv +gv +gv +Ji +Ji +RE +cE +kJ +cI +kJ +kJ +cI +kJ +cE +RE +Ji +ur +Ji +ur +Ji +Ji +gv +gv +"} +(9,1,1) = {" +gv +gv +gv +gv +gv +Ji +Ji +RE +hO +cI +Mz +cI +cI +tS +cI +Ww +RE +gv +gv +Ji +Ji +ur +gv +gv +gv +"} +(10,1,1) = {" +gv +gv +gv +gv +gv +Ji +Ji +RE +cE +gW +cI +gW +gW +cI +gW +cE +RE +gv +gv +gv +gv +gv +gv +gv +gv +"} +(11,1,1) = {" +gv +gv +gv +gv +gv +Ji +Ji +RE +cE +Bc +cE +Bc +Bc +cE +Bc +cE +RE +gv +gv +gv +gv +gv +gv +gv +gv +"} +(12,1,1) = {" +gv +gv +gv +gv +Ji +Ji +gv +RE +RE +DP +RE +RE +RE +jG +RE +RE +RE +gv +gv +gv +gv +gv +gv +gv +gv +"} +(13,1,1) = {" +gv +gv +gv +gv +Ji +gv +gv +qM +zF +aR +zF +qM +qM +qM +kc +kc +qM +gv +gv +gv +gv +gv +gv +gv +gv +"} +(14,1,1) = {" +gv +gv +qM +qM +Yn +Yn +qM +qM +Fp +FP +yG +cF +Tz +jQ +ma +sn +qM +Zv +UH +UH +HI +IF +gv +gv +gv +"} +(15,1,1) = {" +gv +gv +qM +hf +SX +EO +wU +jQ +oo +QQ +lK +dd +es +jQ +wK +eZ +qM +Rc +Rc +Rc +ih +Vp +gv +gv +gv +"} +(16,1,1) = {" +gv +gv +qM +Yh +yH +bn +kd +jQ +Gn +MA +Cc +cv +zJ +jQ +oI +kc +qM +yZ +jB +Ea +ih +xw +gv +gv +gv +"} +(17,1,1) = {" +gv +gv +qM +wX +Lh +ev +wH +Sb +XA +WG +oy +TA +oy +QI +TA +AM +qM +eM +YX +eM +ih +xw +gv +gv +gv +"} +(18,1,1) = {" +gv +gv +qM +jQ +jQ +jQ +Cm +jQ +bJ +QK +ul +gm +Py +WN +pL +kS +qM +eM +eM +eM +ih +zL +gv +gv +gv +"} +(19,1,1) = {" +gv +gv +qM +KV +Zu +Yv +Dl +jQ +MW +sO +aN +zm +Py +UB +aN +Go +qM +xi +Ao +Ao +ih +zL +gv +gv +gv +"} +(20,1,1) = {" +gv +gv +qM +CW +ku +vA +Wz +jQ +TY +vp +gq +tW +Py +xN +sm +eF +qM +Rc +Rc +Rc +ih +HJ +gv +gv +gv +"} +(21,1,1) = {" +gv +gv +qM +qM +qM +qM +qM +qM +iS +xK +EC +xK +iS +Rs +xK +RC +RD +YP +eq +Ce +pH +IF +gv +gv +gv +"} +(22,1,1) = {" +gv +gv +gv +sU +Ji +uv +Ji +qM +qM +qM +qM +qM +qM +qM +qM +Xn +qM +qM +gv +gv +gv +gv +gv +gv +gv +"} +(23,1,1) = {" +gv +gv +gv +sQ +Ji +Ji +Ji +Ji +ed +Ji +ur +qM +qM +HE +Jv +Py +lt +qM +gv +gv +gv +gv +gv +gv +gv +"} +(24,1,1) = {" +gv +gv +gv +sQ +Ji +Ji +ed +wN +RW +mE +pO +qM +qM +Kr +kI +ei +qM +qM +gv +gv +gv +gv +gv +gv +gv +"} +(25,1,1) = {" +gv +gv +gv +KG +Ji +Ji +YC +Md +Ji +Ji +Ji +qM +qM +qM +qM +qM +qM +qM +gv +gv +gv +gv +gv +gv +gv +"} diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm index 2e500943b6430..905403954b67b 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm @@ -70,7 +70,7 @@ /area/ruin/powered/icemoon_phone_booth) "W" = ( /obj/machinery/vending/cigarette{ - onstation_override = 1 + all_products_free = 0 }, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating/icemoon, diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm index 0e78558d6f38c..c9b3d35aa7264 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm @@ -300,7 +300,6 @@ /area/ruin/pizzeria) "kr" = ( /obj/structure/table, -/obj/item/trash/waffles, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, @@ -539,9 +538,7 @@ }, /area/ruin/pizzeria) "yP" = ( -/obj/machinery/vending/dinnerware{ - onstation = 0 - }, +/obj/machinery/vending/dinnerware, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm index e910474b12c7b..047d4b4c042b1 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm @@ -2,7 +2,7 @@ "a" = ( /turf/closed/mineral/random/snow, /area/icemoon/surface/outdoors/nospawn) -"c" = ( +"b" = ( /obj/item/circuitboard/machine/space_heater, /obj/item/stack/cable_coil/five, /obj/structure/frame/machine, @@ -173,6 +173,20 @@ /obj/effect/decal/cleanable/ash, /turf/open/floor/carpet/blue, /area/ruin/smoking_room/room) +"E" = ( +/obj/item/trash/shrimp_chips, +/obj/item/cigarette/rollie/trippy{ + pixel_x = 3; + pixel_y = -1 + }, +/obj/item/cigarette/rollie/trippy{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/effect/spawner/random/trash/bin, +/obj/effect/spawner/random/special_lighter, +/turf/open/floor/wood, +/area/ruin/smoking_room/house) "F" = ( /obj/structure/table/wood/fancy/black, /obj/item/storage/fancy/cigarettes/cigars/cohiba, @@ -258,20 +272,6 @@ }, /turf/open/floor/wood, /area/ruin/smoking_room/house) -"U" = ( -/obj/item/trash/shrimp_chips, -/obj/item/cigarette/rollie/trippy{ - pixel_x = 3; - pixel_y = -1 - }, -/obj/item/cigarette/rollie/trippy{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/effect/spawner/random/trash/bin, -/obj/effect/spawner/random/special_lighter, -/turf/open/floor/wood, -/area/ruin/smoking_room/house) "V" = ( /obj/structure/fireplace, /obj/effect/turf_decal/siding/wood, @@ -373,7 +373,7 @@ x B r S -c +b I Q Q @@ -471,7 +471,7 @@ a a a I -U +E u y L diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm index ff3417fefce6d..d5c344e9cd31a 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm @@ -451,12 +451,8 @@ /area/ruin/comms_agent) "xq" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom{ - pixel_x = 31; - syndie = 1; - freerange = 1; - name = "syndicate radio intercom"; - desc = "A custom-made Syndicate-issue intercom used to transmit on all Nanotrasen frequencies. Particularly expensive." +/obj/item/radio/intercom/syndicate/freerange{ + pixel_x = 31 }, /obj/structure/table/reinforced, /obj/machinery/fax{ diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm new file mode 100644 index 0000000000000..8d90a5079dbb1 --- /dev/null +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm @@ -0,0 +1,1247 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clipboard{ + pixel_y = 3; + pixel_x = -4 + }, +/obj/structure/noticeboard/directional/north, +/obj/item/petri_dish/random, +/obj/item/paper/fluff/junkmail_generic{ + name = "weird note" + }, +/obj/item/paper/guides/antag/supermatter_sliver, +/obj/item/stack/sheet/mineral/plasma{ + pixel_x = 5 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"aP" = ( +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/cup/soda_cans/beer{ + pixel_x = -6 + }, +/obj/item/reagent_containers/cup/soda_cans/beer{ + pixel_x = 6 + }, +/obj/structure/closet/mini_fridge, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"bn" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/petri_dish{ + pixel_x = -10; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/mortar{ + pixel_x = -17; + pixel_y = 1 + }, +/obj/item/pestle{ + pixel_x = -12; + pixel_y = -2 + }, +/obj/structure/microscope, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"bx" = ( +/obj/item/cigbutt, +/turf/template_noop, +/area/template_noop) +"bC" = ( +/obj/machinery/navbeacon{ + location = "syndielab_beacon1"; + codes_txt = "patrol;next_patrol=syndielab_beacon2" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"cd" = ( +/obj/structure/chair/sofa/corp/left, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"cg" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/machinery/light/warm/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"ci" = ( +/obj/structure/flora/bush/pointy/style_3{ + pixel_y = -4; + pixel_x = 6 + }, +/obj/structure/flora/bush/ferny/style_2{ + pixel_y = 6; + pixel_x = -3 + }, +/turf/open/floor/grass{ + initial_gas_mix = "o2=1000;n2=1100;TEMP=280" + }, +/area/ruin/syndielab) +"cu" = ( +/obj/machinery/door/airlock/security{ + desc = "It opens and closes. Menacingly!"; + name = "Syndicate Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"cM" = ( +/mob/living/basic/trooper/syndicate/ranged/shotgun, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"cP" = ( +/obj/effect/mapping_helpers/bombable_wall, +/turf/closed/wall/r_wall/syndicate/nodiagonal{ + desc = "An ominous looking wall. It has extra insulation to keep the heat in."; + name = "plastitanium wall" + }, +/area/ruin/syndielab) +"dD" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/condiment/bbqsauce{ + pixel_y = 8; + pixel_x = -9 + }, +/obj/item/reagent_containers/condiment/donksauce{ + pixel_y = 5; + pixel_x = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"el" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"ex" = ( +/obj/structure/flora/tree/jungle/small/style_4{ + pixel_x = -14; + pixel_y = 5 + }, +/obj/structure/flora/bush/sunny{ + pixel_y = 12; + pixel_x = 12 + }, +/obj/structure/flora/bush/fullgrass/style_2, +/turf/open/floor/grass{ + initial_gas_mix = "o2=1000;n2=1100;TEMP=280" + }, +/area/ruin/syndielab) +"ey" = ( +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"gE" = ( +/obj/machinery/vending/donksnack{ + onstation_override = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"hl" = ( +/obj/machinery/navbeacon{ + location = "syndielab_beacon2"; + codes_txt = "patrol;next_patrol=syndielab_beacon3" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"hn" = ( +/obj/machinery/computer/telecomms/monitor{ + dir = 8; + icon_keyboard = "syndie_key" + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"hu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"iy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"iQ" = ( +/obj/structure/closet/crate/preopen, +/obj/item/radio/off{ + pixel_x = 8 + }, +/obj/item/radio/off{ + pixel_x = -5 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"lW" = ( +/obj/structure/filingcabinet, +/obj/item/paper/fluff/ruins/hauntedtradingpost/receipt/alternate, +/obj/item/pen, +/obj/item/paper/guides/antag/nuke_instructions, +/obj/item/cigarette/syndicate, +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/item/sticker/syndicate, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"mi" = ( +/obj/structure/sign/poster/contraband/cybersun_six_hundred/directional/west, +/obj/item/vending_refill/donksoft{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/item/vending_refill/donksnackvendor, +/obj/structure/closet/crate/freezer/donk, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"na" = ( +/obj/item/climbing_hook, +/obj/item/pickaxe/silver{ + pixel_x = 3; + pixel_y = 5 + }, +/obj/item/t_scanner/adv_mining_scanner{ + pixel_x = 3; + pixel_y = -1 + }, +/obj/item/hatchet/wooden{ + pixel_y = -7; + pixel_x = -3 + }, +/obj/structure/closet/crate/preopen, +/obj/structure/sign/poster/contraband/gorlex_recruitment/directional/west, +/obj/effect/decal/cleanable/plastic, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"nD" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/microwave, +/obj/machinery/light/warm/directional/east, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"nT" = ( +/obj/machinery/atmospherics/components/binary/pump/on/dark/hidden{ + dir = 1; + target_pressure = 180 + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"oA" = ( +/obj/structure/syndicate_uplink_beacon, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"oY" = ( +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/machinery/power/apc/auto_name/directional/east{ + cable_layer = 1 + }, +/obj/effect/mapping_helpers/apc/cut_AI_wire, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"pK" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/airalarm/directional/north, +/obj/item/implanter/radio, +/obj/item/implantcase{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/traitor_bug{ + pixel_y = 6; + pixel_x = 6 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"qy" = ( +/obj/item/clothing/suit/hooded/explorer/syndicate{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/clothing/mask/gas/syndicate, +/obj/structure/rack, +/obj/machinery/light/warm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"qC" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"ry" = ( +/obj/item/clothing/shoes/workboots/mining{ + pixel_x = -7; + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"rH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"rO" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"sa" = ( +/obj/effect/decal/cleanable/ash, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"sj" = ( +/obj/structure/chair/office/tactical{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"sp" = ( +/obj/effect/decal/cleanable/plastic, +/obj/structure/mop_bucket/janitorialcart{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"sV" = ( +/obj/machinery/vending/donksofttoyvendor{ + onstation_override = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"tb" = ( +/obj/machinery/light/warm/directional/north, +/obj/effect/decal/cleanable/oil/streak, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"tC" = ( +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"uT" = ( +/obj/structure/table/wood, +/obj/item/ammo_casing/shotgun/scatterlaser{ + pixel_y = 6; + pixel_x = 1 + }, +/obj/item/ammo_casing/shotgun/buckshot{ + pixel_y = 4; + pixel_x = 8 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndielab) +"uX" = ( +/obj/structure/flora/bush/ferny{ + pixel_y = 2; + pixel_x = -2 + }, +/obj/machinery/air_sensor{ + chamber_id = "syndielab_biodome" + }, +/turf/open/floor/grass{ + initial_gas_mix = "o2=1000;n2=1100;TEMP=280" + }, +/area/ruin/syndielab) +"vr" = ( +/obj/structure/sign/poster/contraband/revolver/directional/east, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"vE" = ( +/obj/structure/safe, +/obj/item/book/granter/crafting_recipe/donk_secret_recipe, +/obj/item/stack/sheet/mineral/plasma/thirty, +/obj/item/storage/wallet/money{ + desc = "It can hold a few small and personal things." + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"vO" = ( +/obj/machinery/door/airlock/survival_pod{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"wh" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/trash/ready_donk{ + pixel_x = 6 + }, +/obj/structure/sign/poster/contraband/eat/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"wj" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"wl" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"wJ" = ( +/obj/structure/rack, +/obj/item/storage/backpack/satchel, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/suit/hooded/explorer/syndicate{ + pixel_x = 8; + pixel_y = -2 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"xa" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"xg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"xr" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/security{ + desc = "It opens and closes. Menacingly!"; + name = "Syndicate Airlock" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"yW" = ( +/turf/open/floor/carpet/red, +/area/ruin/syndielab) +"AD" = ( +/obj/structure/bookcase, +/obj/item/book/manual/fish_catalog{ + pixel_x = -3; + pixel_y = -6 + }, +/obj/item/book/manual/nuclear{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/book/manual/wiki/cytology{ + pixel_x = 6; + pixel_y = -2 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"AR" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal{ + desc = "An ominous looking wall. It has extra insulation to keep the heat in."; + name = "plastitanium wall" + }, +/area/ruin/syndielab) +"AX" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_y = -6; + pixel_x = 4 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndielab) +"Co" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"CS" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"Dd" = ( +/obj/item/storage/bag/trash/filled, +/obj/structure/closet/crate/bin, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"De" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/trash/semki{ + pixel_y = 12 + }, +/obj/item/soap/syndie, +/obj/structure/noticeboard/directional/east, +/obj/item/paper/fluff/junkmail_generic{ + name = "weird note" + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"EY" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/security/glass{ + desc = "It opens and closes. Menacingly!"; + name = "Syndicate Airlock" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"Fz" = ( +/obj/structure/cable/layer1, +/obj/machinery/power/terminal{ + cable_layer = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"FJ" = ( +/obj/machinery/light/warm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"Gi" = ( +/obj/machinery/navbeacon{ + location = "syndielab_beacon4"; + codes_txt = "patrol;next_patrol=syndielab_beacon1" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"GL" = ( +/obj/structure/chair/office/tactical, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"GV" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/security{ + desc = "It opens and closes. Menacingly!"; + name = "Syndicate Airlock" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"Hq" = ( +/obj/item/seeds/lavaland/cactus{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/seeds/lavaland/cactus{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/item/seeds/lavaland/fireblossom{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/stack/ore/glass/basalt{ + amount = 50; + pixel_y = -3; + pixel_x = -3 + }, +/obj/structure/closet/crate/secure/cybersun/dawn, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"Hs" = ( +/obj/structure/rack, +/obj/item/storage/bag/trash, +/obj/item/pushbroom, +/obj/item/storage/bag/trash{ + pixel_x = 9; + pixel_y = -3 + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/cable/layer1, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"HH" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/paper/guides/antag/hdd_extraction{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/book/manual/wiki/tcomms{ + pixel_x = 12; + pixel_y = 1 + }, +/obj/structure/sign/poster/contraband/interdyne_gene_clinics/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"HS" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/syndicate, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"IQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/mob/living/basic/bot/dedbot, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"Jc" = ( +/obj/effect/overloader_trap{ + uses_remaining = 1; + shock_damage = 55; + shock_range = 2; + machine_overload_damage = 160 + }, +/obj/machinery/telecomms/hub, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"JF" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/sign/poster/contraband/hacking_guide/directional/north, +/obj/item/assembly/signaler/cyborg{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/assembly/voice{ + pixel_x = -5; + pixel_y = 3 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"Ka" = ( +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/security/glass{ + desc = "It opens and closes. Menacingly!"; + name = "Syndicate Airlock" + }, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"KV" = ( +/obj/machinery/computer/atmos_control/noreconnect{ + atmos_chambers = list("syndielab_biodome"="Biodome Atmos"); + dir = 4; + name = "gas tank monitor"; + desc = "This computer connects to and controls the sensors and equipment in a nearby pressurised gas reservoir."; + icon_keyboard = "syndie_key" + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"Lt" = ( +/obj/item/paper/fluff/operative, +/obj/structure/noticeboard/directional/north, +/obj/structure/cable/layer1, +/obj/item/ammo_casing/shotgun/buckshot/spent{ + pixel_x = 8; + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"MW" = ( +/turf/template_noop, +/area/template_noop) +"NM" = ( +/obj/structure/sign/poster/contraband/donk_co/directional/east, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"Qj" = ( +/obj/structure/flora/bush/grassy{ + pixel_x = 15; + pixel_y = 3 + }, +/obj/structure/flora/bush, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output{ + dir = 1; + chamber_id = "syndielab_biodome" + }, +/turf/open/floor/grass{ + initial_gas_mix = "o2=1000;n2=1100;TEMP=280" + }, +/area/ruin/syndielab) +"QO" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/computer_disk/syndicate/camera_app{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/crowbar/hammer{ + pixel_x = 3; + pixel_y = 1 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"Sq" = ( +/obj/structure/rack, +/obj/item/pinata/donk{ + pixel_y = 10 + }, +/obj/item/storage/box/party_poppers{ + pixel_y = 1; + pixel_x = 7 + }, +/obj/item/storage/box/firecrackers{ + pixel_x = -8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"Te" = ( +/obj/machinery/navbeacon{ + location = "syndielab_beacon3"; + codes_txt = "patrol;next_patrol=syndielab_beacon4" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"Tl" = ( +/obj/item/stack/tile/carpet/donk/thirty{ + pixel_x = 6; + pixel_y = -5 + }, +/obj/item/toy/plush/donkpocket{ + pixel_x = 12; + pixel_y = 3 + }, +/obj/item/stack/tile/carpet/donk/thirty{ + pixel_x = -6; + pixel_y = -5 + }, +/obj/item/toy/plush/donkpocket{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/stack/package_wrap, +/obj/structure/closet/crate/preopen, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"Ts" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/sign/poster/contraband/c20r/directional/north, +/obj/item/anomaly_releaser{ + pixel_y = 6 + }, +/obj/item/anomaly_releaser, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"TB" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"UF" = ( +/obj/machinery/door/airlock/survival_pod/glass{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/fans/tiny, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"UM" = ( +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/structure/closet/crate/secure/gorlex_weapons{ + req_one_access = list("syndicate") + }, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/syndielab) +"Vf" = ( +/obj/effect/decal/cleanable/molten_object, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/item/stack/ore/plasma{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"Vu" = ( +/obj/structure/aquarium/donkfish, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"VO" = ( +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"Wn" = ( +/obj/machinery/computer/terminal{ + dir = 4; + upperinfo = "ERROR - NO FINGERPRINT MATCH ON FILE!"; + tguitheme = "syndicate"; + desc = "An state-of-the-art lab terminal. The Cybersun Industries logo is imprinted just below the screen."; + content = list("*Solid Matter Analyzer and Research Terminal*"); + name = "lab terminal"; + icon_screen = "tcboss"; + icon_keyboard = "syndie_key" + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"Wo" = ( +/obj/structure/table/wood, +/obj/item/ammo_casing/shotgun/fletchette{ + pixel_y = 6 + }, +/obj/item/ammo_casing/shotgun/fletchette{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/item/gun/ballistic/shotgun/musket, +/turf/open/floor/carpet/red, +/area/ruin/syndielab) +"WO" = ( +/obj/item/trash/boritos/red{ + pixel_y = -9; + pixel_x = -5 + }, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) +"Xe" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/paint/red{ + pixel_y = 2; + pixel_x = -6 + }, +/obj/item/paint_palette{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/item/mod/paint, +/obj/structure/sign/poster/contraband/energy_swords/directional/south, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"Xm" = ( +/obj/structure/closet/crate/secure/trashcart, +/obj/item/relic, +/obj/item/storage/bag/trash/filled{ + pixel_y = 1; + pixel_x = 6 + }, +/obj/item/storage/bag/trash/filled{ + pixel_x = -6; + pixel_y = 1 + }, +/obj/item/storage/bag/trash/filled{ + pixel_y = -1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"Xt" = ( +/turf/closed/mineral/snowmountain/icemoon, +/area/icemoon/underground/explored) +"YH" = ( +/obj/item/storage/medkit, +/obj/structure/sign/poster/contraband/free_key/directional/south, +/obj/structure/rack, +/obj/item/stack/medical/suture, +/obj/item/clothing/neck/stethoscope, +/obj/item/reagent_containers/hypospray/medipen/atropine, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"Ze" = ( +/obj/machinery/porta_turret/syndicate/energy/cybersun, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"Zx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/smes/magical/cybersun{ + cable_layer = 1; + input_level = 180000; + output_level = 200000; + dir = 1 + }, +/obj/structure/cable/layer1, +/turf/open/floor/mineral/plastitanium, +/area/ruin/syndielab) +"ZW" = ( +/obj/structure/chair/sofa/corp/right, +/mob/living/basic/trooper/syndicate/ranged/shotgun, +/obj/machinery/light/warm/directional/north, +/obj/structure/cable/layer1, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndielab) + +(1,1,1) = {" +MW +MW +MW +MW +Xt +Xt +bx +MW +MW +Xt +MW +MW +MW +MW +MW +MW +"} +(2,1,1) = {" +MW +MW +MW +MW +Xt +AR +AR +vO +AR +Xt +Xt +Xt +Xt +MW +MW +MW +"} +(3,1,1) = {" +MW +MW +Xt +Xt +Xt +AR +cg +xg +AR +AR +cP +AR +Xt +Xt +Xt +MW +"} +(4,1,1) = {" +MW +AR +AR +AR +AR +AR +AR +UF +AR +na +mi +AR +AR +AR +Xt +Xt +"} +(5,1,1) = {" +Xt +AR +aa +Wn +bC +EY +el +el +AR +iQ +iy +vE +Xe +AR +AR +Xt +"} +(6,1,1) = {" +Xt +AR +Ts +sj +FJ +AR +qy +el +AR +AD +ry +ey +VO +Tl +AR +Xt +"} +(7,1,1) = {" +Xt +AR +bn +Vf +xa +AR +Ze +Gi +cu +el +ey +wl +sa +Hq +AR +Xt +"} +(8,1,1) = {" +Xt +AR +AR +AR +EY +AR +qC +qC +AR +tb +HS +ey +sp +UM +AR +Xt +"} +(9,1,1) = {" +Xt +AR +pK +KV +el +nT +Qj +ex +qC +el +Sq +cM +Hs +AR +AR +Xt +"} +(10,1,1) = {" +Xt +AR +JF +sj +el +qC +uX +ci +qC +el +oY +Fz +Zx +AR +Xt +Xt +"} +(11,1,1) = {" +Xt +AR +Jc +oA +FJ +AR +qC +qC +AR +GV +AR +qC +qC +AR +Xt +MW +"} +(12,1,1) = {" +Xt +AR +HH +GL +hl +IQ +rH +rH +xr +Te +hu +TB +lW +AR +Xt +MW +"} +(13,1,1) = {" +Xt +AR +QO +hn +el +Xm +rO +aP +AR +Lt +AX +yW +YH +AR +Xt +MW +"} +(14,1,1) = {" +Xt +AR +AR +AR +EY +qC +qC +qC +AR +ZW +uT +yW +Vu +AR +Xt +MW +"} +(15,1,1) = {" +Xt +Xt +AR +gE +el +wj +dD +Co +AR +cd +Wo +yW +Dd +AR +Xt +MW +"} +(16,1,1) = {" +MW +Xt +AR +sV +NM +tC +tC +tC +Ka +WO +vr +CS +wJ +AR +Xt +MW +"} +(17,1,1) = {" +MW +Xt +AR +AR +AR +nD +wh +De +AR +AR +AR +AR +AR +AR +MW +MW +"} +(18,1,1) = {" +MW +MW +Xt +Xt +AR +AR +AR +AR +AR +Xt +Xt +Xt +Xt +Xt +Xt +MW +"} +(19,1,1) = {" +MW +MW +MW +Xt +Xt +Xt +Xt +Xt +Xt +Xt +MW +MW +MW +MW +MW +MW +"} diff --git a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm b/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm index 307c75b01151f..a15227c437cf5 100644 --- a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm +++ b/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_syndicate_base1_skyrat.dmm @@ -5492,7 +5492,7 @@ /area/ruin/syndicate_lava_base/medbay) "IP" = ( /obj/effect/turf_decal/tile/dark/full, -/obj/machinery/vending/boozeomat/syndicate_access{ +/obj/machinery/vending/boozeomat/syndicate{ onstation = 0 }, /turf/open/floor/iron/dark/textured_large, diff --git a/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_dauntless.dmm b/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_dauntless.dmm index 7336a1da4fcf4..4e4ecaf975e54 100644 --- a/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_dauntless.dmm +++ b/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_dauntless.dmm @@ -181,8 +181,7 @@ }, /obj/machinery/vending/drugs{ name = "\improper SyndiDrug Plus"; - onstation = 0; - onstation_override = 1 + all_products_free = 1 }, /turf/open/floor/iron/white/diagonal, /area/ruin/space/has_grav/bubbers/dauntless/med/treatment) @@ -310,10 +309,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/vending/security/noaccess{ - onstation = 0; density = 0; - onstation_override = 1; - pixel_y = 32 + pixel_y = 32; + all_products_free = 1 }, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/bubbers/dauntless/sec/brig) @@ -537,11 +535,10 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/line{ dir = 8 }, -/obj/machinery/vending/medical/syndicate_access/cybersun{ +/obj/machinery/vending/medical/syndicate/cybersun{ desc = "An advanced vendor that dispenses medical drugs, both recreational and medicinal. It's said to have been salvaged from an old decommissioned Cybersun Cruiser."; name = "\improper SyndiMed ++"; - onstation = 0; - onstation_override = 1 + all_products_free = 1 }, /turf/open/floor/iron/white/diagonal, /area/ruin/space/has_grav/bubbers/dauntless/med/treatment) @@ -708,10 +705,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/vending/security/noaccess{ - onstation = 0; pixel_x = -32; density = 0; - onstation_override = 1 + all_products_free = 1 }, /turf/open/floor/carpet/royalblack, /area/ruin/space/has_grav/bubbers/dauntless/command/maa) @@ -844,10 +840,9 @@ /area/ruin/space/has_grav/bubbers/dauntless/engineering/turbine) "eg" = ( /obj/machinery/vending/dorms/prison{ - onstation = 0; - onstation_override = 1; density = 0; - pixel_x = -27 + pixel_x = -27; + all_products_free = 1 }, /turf/open/floor/wood/tile, /area/ruin/space/has_grav/bubbers/dauntless/sec/prison/rec) @@ -900,8 +895,7 @@ /area/ruin/space/has_grav/bubbers/dauntless/sec/prison/rec) "et" = ( /obj/machinery/vending/games{ - onstation = 0; - onstation_override = 1 + all_products_free = 1 }, /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -1267,10 +1261,9 @@ /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/siding/wood/corner, /obj/machinery/vending/wardrobe/syndie_wardrobe{ - onstation = 0; - onstation_override = 1; pixel_x = 28; - density = 0 + density = 0; + all_products_free = 1 }, /turf/open/floor/wood/tile, /area/ruin/space/has_grav/bubbers/dauntless/service/dorms) @@ -1918,8 +1911,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/vending/dorms{ - onstation_override = 1; - onstation = 0 + all_products_free = 1 }, /turf/open/floor/wood/tile, /area/ruin/space/has_grav/bubbers/dauntless/service/dorms) @@ -2319,10 +2311,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/vending/clothing{ - onstation = 0; - onstation_override = 1; pixel_x = 27; - density = 0 + density = 0; + all_products_free = 1 }, /turf/open/floor/wood/tile, /area/ruin/space/has_grav/bubbers/dauntless/service/dorms) @@ -4449,8 +4440,7 @@ /area/ruin/space/has_grav/bubbers/dauntless/sec/officer) "tx" = ( /obj/machinery/vending/dinnerware{ - onstation = 0; - onstation_override = 1 + all_products_free = 1 }, /turf/open/floor/iron/kitchen{ dir = 4 @@ -4568,10 +4558,9 @@ dir = 8 }, /obj/machinery/vending/cigarette/syndicate{ - onstation = 0; - onstation_override = 1; density = 0; - pixel_x = -29 + pixel_x = -29; + all_products_free = 1 }, /turf/open/floor/iron/cafeteria, /area/ruin/space/has_grav/bubbers/dauntless/service/diner) @@ -5065,18 +5054,16 @@ dir = 8 }, /obj/machinery/vending/hydronutrients{ - onstation = 0; - onstation_override = 1; pixel_x = -28; can_astar_pass = 1; - density = 0 + density = 0; + all_products_free = 1 }, /turf/open/floor/stone, /area/ruin/space/has_grav/bubbers/dauntless/service/hydro) "vX" = ( -/obj/machinery/vending/boozeomat/syndicate_access{ - onstation = 0; - onstation_override = 1 +/obj/machinery/vending/boozeomat/syndicate{ + all_products_free = 1 }, /obj/machinery/door/firedoor, /obj/structure/curtain/cloth{ @@ -5889,7 +5876,7 @@ name = "green" }, /obj/machinery/vending/sustenance{ - onstation = 0 + all_products_free = 1 }, /turf/open/floor/iron/dark/smooth_large, /area/ruin/space/has_grav/bubbers/dauntless/sec/prison) @@ -6297,10 +6284,9 @@ dir = 4 }, /obj/machinery/vending/wardrobe/sec_wardrobe/red{ - onstation = 0; - onstation_override = 1; pixel_x = 28; - density = 0 + density = 0; + all_products_free = 1 }, /turf/open/floor/wood/tile, /area/ruin/space/has_grav/bubbers/dauntless/service/dorms) @@ -10776,8 +10762,7 @@ dir = 8 }, /obj/machinery/vending/imported/tiziran{ - onstation = 0; - onstation_override = 1 + all_products_free = 1 }, /turf/open/floor/iron/cafeteria, /area/ruin/space/has_grav/bubbers/dauntless/service/diner) @@ -10967,10 +10952,9 @@ "UV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/vending/cigarette{ - onstation = 0; - onstation_override = 1; density = 0; - pixel_x = -27 + pixel_x = -27; + all_products_free = 1 }, /turf/open/floor/wood/tile, /area/ruin/space/has_grav/bubbers/dauntless/sec/prison/rec) @@ -11604,11 +11588,10 @@ dir = 10 }, /obj/machinery/vending/hydroseeds{ - onstation = 0; - onstation_override = 1; pixel_x = -28; can_astar_pass = 1; - density = 0 + density = 0; + all_products_free = 1 }, /turf/open/floor/stone, /area/ruin/space/has_grav/bubbers/dauntless/service/hydro) diff --git a/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_surface_gas_bubber.dmm b/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_surface_gas_bubber.dmm new file mode 100644 index 0000000000000..23907c1d0b62f --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/bubberstation/lavaland_surface_gas_bubber.dmm @@ -0,0 +1,1797 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aK" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/stack/spacecash/c10{ + pixel_y = 9; + pixel_x = -2 + }, +/obj/item/stack/spacecash/c20{ + pixel_y = 6 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"aW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"bT" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/food/popsicle/creamsicle_berry{ + pixel_y = 4; + pixel_x = -1 + }, +/obj/item/food/popsicle/creamsicle_berry{ + pixel_y = 1; + pixel_x = 5 + }, +/obj/item/food/popsicle/creamsicle_orange, +/obj/item/food/popsicle/creamsicle_orange{ + pixel_y = 6; + pixel_x = 3 + }, +/obj/structure/closet/crate/freezer, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"cc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/sign/warning/no_smoking/directional/east, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"ck" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"cC" = ( +/obj/machinery/light/directional/north, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"dm" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"dC" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ + dir = 4; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"dI" = ( +/obj/structure/rack, +/obj/item/food/candy, +/obj/item/food/candy, +/obj/item/food/candy, +/obj/item/food/chocolatebar, +/obj/item/food/chocolatebar{ + pixel_y = 3 + }, +/obj/item/food/chocolatebar{ + pixel_y = 6 + }, +/obj/structure/sign/poster/contraband/space_cola/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"dT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"fj" = ( +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"fl" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/structure/sign/poster/contraband/starkist/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"fy" = ( +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/turf/open/floor/asphalt/lavaland, +/area/lavaland/surface/outdoors) +"fF" = ( +/obj/machinery/portable_atmospherics/canister, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"fH" = ( +/obj/machinery/duct, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"fO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"fX" = ( +/obj/structure/sink/gasstation{ + dir = 4; + pixel_x = -14 + }, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"fZ" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/robust_softdrinks/directional/east, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"go" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"ia" = ( +/obj/structure/rack, +/obj/item/food/chips{ + pixel_x = 7 + }, +/obj/item/food/chips{ + pixel_y = 7; + pixel_x = -4 + }, +/obj/item/food/chips/shrimp{ + pixel_y = 10; + pixel_x = 7 + }, +/obj/item/food/chips/shrimp{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"iK" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"iN" = ( +/obj/machinery/airalarm/directional/west, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/machinery/computer/atmos_control/noreconnect{ + atmos_chambers = list("lizardgaslava"="Plasma Supply"); + dir = 4; + name = "gas tank monitor"; + desc = "This computer connects to and controls the sensors and equipment in a nearby pressurised gas reservoir." + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"iP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"iT" = ( +/obj/structure/rack, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random{ + pixel_x = 8; + pixel_y = -5 + }, +/obj/item/food/cornchips/random{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/item/food/cornchips/random{ + pixel_y = -7; + pixel_x = -5 + }, +/obj/item/food/cornchips/random{ + pixel_y = -7; + pixel_x = 3 + }, +/obj/item/food/cornchips/random{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/structure/sign/poster/contraband/eat/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"jB" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"jY" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/storage/cans/sixbeer, +/obj/item/storage/cans/sixsoda, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"ks" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/structure/reagent_dispensers/fueltank/large{ + anchored = 1; + can_be_unanchored = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"lI" = ( +/obj/effect/spawner/random/structure/billboard/roadsigns, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"mn" = ( +/obj/structure/sign/poster/official/plasma_effects/directional/east, +/obj/structure/reagent_dispensers/plumbed/storage{ + dir = 8; + reagent_id = /datum/reagent/toxin/plasma; + name = "plasma storage tank"; + tank_volume = 2500 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"mz" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/mini_fridge{ + pixel_y = 5 + }, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/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/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"mG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"mJ" = ( +/obj/structure/chair/sofa/left/maroon{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"mY" = ( +/obj/structure/chair/sofa/right/maroon{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"nc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/sign/poster/fluff/lizards_gas_payment/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"ng" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"nX" = ( +/obj/structure/sign/poster/contraband/tipper_cream_soda/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/bbqsauce{ + pixel_y = 17; + pixel_x = 9 + }, +/obj/item/reagent_containers/condiment/hotsauce{ + pixel_y = 15; + pixel_x = -8 + }, +/obj/item/reagent_containers/condiment/coldsauce{ + pixel_x = -9; + pixel_y = 5 + }, +/obj/item/reagent_containers/condiment/donksauce{ + pixel_x = 1; + pixel_y = 15 + }, +/obj/item/reagent_containers/condiment/mayonnaise{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/bun, +/obj/item/food/bun, +/obj/item/food/bun, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"om" = ( +/turf/open/floor/asphalt/lavaland, +/area/lavaland/surface/outdoors) +"ou" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"oD" = ( +/obj/effect/spawner/random/trash/crushed_can, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"oT" = ( +/obj/machinery/vending/dorms{ + onstation = 0 + }, +/turf/closed/wall/r_wall{ + baseturfs = /turf/open/floor/plating/lavaland_baseturf + }, +/area/ruin/thelizardsgas_lavaland) +"pp" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"pJ" = ( +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"qk" = ( +/obj/structure/cable, +/obj/structure/sign/poster/fluff/lizards_gas_power/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/breath, +/obj/item/pickaxe, +/obj/item/gun/ballistic/rifle/boltaction/pipegun, +/obj/item/ammo_casing/junk/hunter, +/obj/item/ammo_casing/junk/hunter, +/obj/item/ammo_casing/junk/hunter, +/obj/item/storage/box/coffeepack/robusta, +/obj/item/storage/box/coffeepack/robusta, +/obj/item/flatpacked_machine, +/obj/item/flatpacked_machine/ore_silo, +/obj/item/flatpacked_machine/sustenance_machine, +/obj/item/flatpacked_machine/organics_ration_printer, +/obj/item/flatpacked_machine/macrowave, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"qO" = ( +/obj/structure/sign/warning/fire/directional/south, +/obj/structure/reagent_dispensers/fueltank/large{ + anchored = 1; + can_be_unanchored = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"rr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"rv" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"rM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"rW" = ( +/obj/machinery/portable_atmospherics/canister/plasma{ + filled = 0.05 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"sY" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/item/food/donut/choco{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/item/food/donut/berry{ + pixel_x = 5 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"tk" = ( +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"tC" = ( +/obj/machinery/door/airlock/bathroom, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"tD" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/machinery/door/airlock/grunge, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"ub" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/girder/reinforced, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"uV" = ( +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/griddle/frontier_tabletop, +/obj/item/food/raw_sausage, +/obj/item/food/raw_sausage{ + pixel_y = 4 + }, +/obj/item/food/raw_sausage{ + pixel_y = 9 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"vb" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/storage/fancy/egg_box, +/obj/item/storage/fancy/egg_box{ + pixel_y = 9 + }, +/obj/item/storage/fancy/pickles_jar, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"vi" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"vt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"vH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"wl" = ( +/obj/structure/sink/gasstation{ + dir = 8; + pixel_x = 14 + }, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"wY" = ( +/obj/structure/table, +/obj/structure/sign/poster/official/festive/directional/south, +/obj/item/wrench, +/obj/item/universal_scanner{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"xw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"xH" = ( +/obj/machinery/door/window/right/directional/east, +/obj/machinery/door/window/left/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"xW" = ( +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"yH" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"zr" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/reagent_containers/condiment/yoghurt{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/reagent_containers/condiment/yoghurt{ + pixel_x = 6; + pixel_y = -1 + }, +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Ag" = ( +/obj/structure/table, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Ao" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Bb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Bf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Bp" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/duct, +/turf/open/floor/plating/lavaland_baseturf, +/area/ruin/thelizardsgas_lavaland) +"Bw" = ( +/obj/structure/toilet, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Bz" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/food/cheese/mozzarella{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/food/cheese/mozzarella{ + pixel_y = -4; + pixel_x = 1 + }, +/obj/item/food/cheese/wheel, +/obj/item/food/cheese/cheese_curds, +/obj/item/food/cheese/curd_cheese, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"BH" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"BU" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ + dir = 4; + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"BX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/directional/south, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Cs" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating/lavaland_baseturf, +/area/ruin/thelizardsgas_lavaland) +"Cx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"CJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"CR" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Dw" = ( +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"DI" = ( +/turf/template_noop, +/area/template_noop) +"Ef" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Eh" = ( +/obj/machinery/atmospherics/components/tank/oxygen{ + dir = 8 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"El" = ( +/obj/structure/sign/poster/official/pda_ad/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/table/reinforced, +/obj/item/food/rootbread_peanut_butter_banana{ + pixel_y = 12; + pixel_x = -3 + }, +/obj/item/food/rootbread_peanut_butter_jelly{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Es" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "lizardgas_lavaland_entrance" + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"EA" = ( +/turf/closed/wall/r_wall, +/area/ruin/thelizardsgas_lavaland) +"FA" = ( +/turf/closed/wall/r_wall{ + baseturfs = /turf/open/floor/plating/lavaland_baseturf + }, +/area/ruin/thelizardsgas_lavaland) +"FC" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/thelizardsgas_lavaland) +"FL" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Gg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Gu" = ( +/obj/effect/spawner/random/structure/billboard/lizardsgas, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Gv" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"GK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Hd" = ( +/obj/machinery/dryer{ + pixel_x = 26 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Hz" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"HB" = ( +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"HI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"HL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"HS" = ( +/obj/structure/rack, +/obj/item/reagent_containers/condiment/vegetable_oil{ + pixel_y = 5; + pixel_x = -1 + }, +/obj/item/reagent_containers/condiment/vegetable_oil{ + pixel_y = 1; + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/olive_oil, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"HW" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "lizardgas_lavaland_entrance" + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"IC" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"IU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"JB" = ( +/obj/machinery/air_sensor{ + chamber_id = "lizardgaslava" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"JK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ + dir = 8; + chamber_id = "lizardgaslava" + }, +/obj/item/toy/plush/lizard_plushie/space/green{ + desc = "A famous lizard, in plushy form."; + name = "Bingo" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"JX" = ( +/obj/machinery/duct, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/chem_diamond/directional/north, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Kb" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Kc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Kl" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/machinery/light_switch/directional/south, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Km" = ( +/obj/structure/table/reinforced, +/obj/machinery/coffeemaker/impressa{ + pixel_x = 2 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"KJ" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Lh" = ( +/obj/structure/cable, +/obj/structure/sign/poster/official/fruit_bowl/directional/east, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Mv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/spawner/random/entertainment/lighter, +/obj/structure/sign/poster/contraband/smoke/directional/west, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"MX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron, +/area/ruin/thelizardsgas_lavaland) +"Nr" = ( +/obj/effect/spawner/random/trash/food_packaging, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"NY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/obj/effect/mob_spawn/ghost_role/human/lavaland_gasstation{ + dir = 4 + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Om" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/structure/girder/reinforced, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Ov" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/food/burger/rootguffin{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/food/burger/rootguffin{ + pixel_x = 4; + pixel_y = 10 + }, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"PS" = ( +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/structure/bed/dogbed{ + name = "Zarpo's bed"; + desc = "A comfy-looking lizard bed. Looks a lot like a dog bed." + }, +/mob/living/basic/lizard{ + name = "Zarpo"; + desc = "This little guy is a survivor, that's for sure. It's also the manager of the gas station!" + }, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Qb" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Qt" = ( +/obj/structure/sign/poster/contraband/jumbo_bar/directional/east, +/obj/structure/cable, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Rq" = ( +/obj/machinery/light/directional/south, +/obj/structure/sign/warning/chem_diamond/directional/south, +/obj/machinery/duct, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Ry" = ( +/obj/structure/rack, +/obj/item/food/sticko/nutty{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/food/sticko{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"RA" = ( +/turf/closed/wall{ + baseturfs = /turf/open/floor/plating/lavaland_baseturf + }, +/area/ruin/thelizardsgas_lavaland) +"RK" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"SL" = ( +/obj/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"SZ" = ( +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Ty" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"TA" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/spawner/random/trash/deluxe_garbage, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"TI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/machinery/duct, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Uk" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"Ux" = ( +/obj/structure/table, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"UK" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"UZ" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"VD" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"VQ" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden/layer4, +/turf/open/floor/iron/smooth{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Wa" = ( +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/asphalt/lavaland, +/area/ruin/thelizardsgas_lavaland) +"WY" = ( +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=30000;TEMP=293.15" + }, +/area/ruin/thelizardsgas_lavaland) +"Xe" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump/on/pink/visible{ + dir = 8; + target_pressure = 4100 + }, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Xo" = ( +/obj/structure/sign/warning/fire/directional/north, +/turf/template_noop, +/area/template_noop) +"XB" = ( +/obj/structure/sign/warning/fire/directional/north, +/obj/machinery/atmospherics/components/unary/passive_vent/layer4{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Yx" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/lavaland_atmos{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) +"Zf" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/food/cornuto{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/food/cornuto{ + pixel_y = -5; + pixel_x = 2 + }, +/obj/item/food/cornuto{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/food/cornuto{ + pixel_y = -5; + pixel_x = -3 + }, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/thelizardsgas_lavaland) + +(1,1,1) = {" +DI +DI +DI +DI +DI +ub +BH +BH +BH +BH +BH +BH +BH +BH +Om +DI +DI +DI +DI +DI +DI +"} +(2,1,1) = {" +DI +DI +DI +DI +DI +KJ +fH +Wa +fH +Wa +Wa +fH +Wa +fH +Ty +DI +DI +DI +DI +DI +DI +"} +(3,1,1) = {" +DI +DI +om +fy +om +xw +fH +wl +fj +wl +wl +fj +wl +fH +xw +om +fy +DI +DI +DI +DI +"} +(4,1,1) = {" +DI +om +om +fy +om +xw +Rq +FA +qO +FA +FA +ks +FA +JX +xw +om +fy +om +DI +DI +DI +"} +(5,1,1) = {" +DI +DI +om +fy +om +xw +fH +fX +fj +fX +fX +fj +fX +fH +xw +om +fy +om +om +DI +DI +"} +(6,1,1) = {" +DI +DI +HB +Gu +Ao +xw +fH +Uk +fH +Uk +Uk +fH +Uk +fH +xw +oD +lI +Ao +DI +DI +DI +"} +(7,1,1) = {" +DI +DI +Ao +Ao +Ao +xw +xw +TI +xw +xw +xw +cc +xw +xw +xw +GK +Ao +Ao +DI +DI +DI +"} +(8,1,1) = {" +DI +DI +fF +Ao +HB +FA +Cs +Bp +Cs +FA +FA +FA +HW +HW +FA +UZ +Ao +Ao +DI +DI +DI +"} +(9,1,1) = {" +FA +FA +FC +FC +FA +FA +iT +yH +mz +Mv +iN +RA +VQ +Kc +FA +dT +Yx +Yx +ng +EA +Xo +"} +(10,1,1) = {" +FA +Ux +mJ +mY +wY +RA +ia +Nr +Ov +tk +BX +RA +mG +rr +FA +Xe +Xe +Xe +Ef +IC +DI +"} +(11,1,1) = {" +FA +Ag +pJ +ou +NY +RA +dI +HI +Km +aK +xH +RA +Es +HW +FA +rv +JK +fO +Ef +vi +DI +"} +(12,1,1) = {" +FA +qk +Lh +go +vt +tD +VD +Gv +Bf +vH +Bf +nc +vH +Kl +FA +WY +JB +WY +Ef +vi +DI +"} +(13,1,1) = {" +FA +RA +RA +RA +CR +RA +fl +zr +bT +Zf +xW +sY +Ry +El +FA +WY +WY +WY +Ef +SL +DI +"} +(14,1,1) = {" +FA +UK +TA +ck +dm +RA +SZ +iP +IU +HL +xW +rM +IU +pp +FA +dC +BU +BU +Ef +SL +DI +"} +(15,1,1) = {" +FA +iK +PS +Eh +mn +RA +Qb +Bz +vb +jY +xW +HS +uV +nX +FA +Xe +Xe +Xe +Ef +Hz +DI +"} +(16,1,1) = {" +FA +FA +FA +FA +FA +FA +Cx +Dw +Qt +Dw +Cx +fZ +Dw +Gg +MX +aW +CJ +FL +RK +EA +Xo +"} +(17,1,1) = {" +DI +DI +Ao +fF +fF +FA +FA +FA +FA +FA +tC +FA +FA +FA +FA +XB +Kb +Ao +rW +DI +DI +"} +(18,1,1) = {" +DI +DI +DI +DI +DI +DI +DI +FA +FA +cC +Bb +xW +oT +FA +DI +DI +DI +DI +DI +DI +DI +"} +(19,1,1) = {" +DI +DI +DI +DI +DI +DI +DI +FA +FA +Bw +Hd +jB +FA +FA +DI +DI +DI +DI +DI +DI +DI +"} +(20,1,1) = {" +DI +DI +DI +DI +DI +DI +DI +FA +FA +FA +FA +FA +FA +FA +DI +DI +DI +DI +DI +DI +DI +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 7b6718717a66a..85b662d04aa95 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -406,6 +406,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/ruin/powered/beach) +"mv" = ( +/obj/effect/spawner/message_in_a_bottle/low_prob, +/turf/open/misc/beach/coast, +/area/ruin/powered/beach) "mw" = ( /obj/structure/flora/coconuts, /turf/open/misc/beach/sand, @@ -523,6 +527,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, /turf/closed/wall/mineral/sandstone, /area/ruin/powered/beach) +"qK" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/closet/secure_closet/bar/lavaland_bartender_clothes, +/turf/open/floor/wood, +/area/ruin/powered/beach) "qT" = ( /obj/machinery/light/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -543,6 +552,14 @@ /obj/item/toy/beach_ball, /turf/open/misc/beach/sand, /area/ruin/powered/beach) +"rU" = ( +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 5 + }, +/obj/structure/table, +/turf/open/floor/wood, +/area/ruin/powered/beach) "sa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/structure/chair/stool/bar/directional/south, @@ -903,6 +920,15 @@ /obj/structure/sign/poster/contraband/space_cola/directional/north, /turf/open/misc/beach/sand, /area/ruin/powered/beach) +"GA" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/chair/stool/directional/south, +/obj/item/storage/backpack/duffelbag, +/obj/item/clothing/under/shorts/red, +/obj/item/clothing/glasses/sunglasses, +/turf/open/floor/wood, +/area/ruin/powered/beach) "GB" = ( /obj/structure/table/wood, /obj/item/reagent_containers/condiment/peppermill, @@ -963,6 +989,7 @@ dir = 1 }, /obj/machinery/light/directional/south, +/obj/effect/spawner/message_in_a_bottle/low_prob, /turf/open/misc/beach/coast/corner{ dir = 8 }, @@ -1088,11 +1115,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/wood, /area/ruin/powered/beach) -"OU" = ( -/obj/machinery/light/small/directional/east, -/obj/structure/closet/secure_closet/bar/lavaland_bartender_clothes, -/turf/open/floor/wood, -/area/ruin/powered/beach) "Pr" = ( /obj/machinery/vending/hydronutrients, /turf/open/floor/iron/grimy, @@ -1266,15 +1288,6 @@ /obj/structure/noticeboard/staff, /turf/closed/wall/mineral/wood/nonmetal, /area/ruin/powered/beach) -"UQ" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/chair/stool/directional/south, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/under/shorts/red, -/obj/item/clothing/glasses/sunglasses, -/turf/open/floor/wood, -/area/ruin/powered/beach) "UT" = ( /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/misc/beach/sand, @@ -1365,14 +1378,6 @@ }, /turf/open/misc/beach/sand, /area/ruin/powered/beach) -"Xj" = ( -/obj/item/reagent_containers/condiment/enzyme, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 5 - }, -/obj/structure/table, -/turf/open/floor/wood, -/area/ruin/powered/beach) "Xt" = ( /obj/machinery/door/airlock/sandstone{ name = "Surfer Shack 1" @@ -1542,7 +1547,7 @@ VI VI FH aj -OU +qK aC aC CK @@ -1880,7 +1885,7 @@ hj CT VI tQ -Xj +rU aC Ds ww @@ -1990,7 +1995,7 @@ bG bL VI VI -yT +mv pz Eu pz @@ -2017,7 +2022,7 @@ Lm Lm rv VI -UQ +GA bH bM VI diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm index a2b3d227d5db2..7b7cec2c72a05 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm @@ -66,7 +66,7 @@ /obj/effect/step_trigger/sound_effect{ happens_once = 1; name = "\proper a grave mistake"; - sound = 'sound/hallucinations/i_see_you1.ogg'; + sound = 'sound/effects/hallucinations/i_see_you1.ogg'; triggerer_only = 1 }, /obj/effect/step_trigger/message{ diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_phonebooth.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_phonebooth.dmm index 851cfe35548b6..4cbf3478bc233 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_phonebooth.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_phonebooth.dmm @@ -13,7 +13,7 @@ /area/ruin/powered/lavaland_phone_booth) "k" = ( /obj/machinery/vending/snack/green{ - onstation_override = 1 + all_products_free = 0 }, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating/lavaland_atmos, @@ -66,7 +66,7 @@ /area/ruin/powered/lavaland_phone_booth) "W" = ( /obj/machinery/vending/cigarette{ - onstation_override = 1 + all_products_free = 0 }, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating/lavaland_atmos, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 5653125ca0e60..6e29288ba6737 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -376,7 +376,7 @@ /obj/item/storage/box/lights/bulbs, /obj/item/storage/toolbox/mechanical/old, /obj/item/gift{ - contains_type = /obj/item/gun/ballistic/automatic/toy/unrestricted + contains_type = /obj/item/gun/ballistic/automatic/toy }, /obj/item/gift{ contains_type = /obj/item/gun/ballistic/automatic/pistol/toy diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index b99f9df9681bb..b73cf11fda63e 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -18,19 +18,19 @@ "aj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/medical/syndicate_access, +/obj/machinery/vending/medical/syndicate, /turf/open/floor/iron/white/side{ dir = 4 }, /area/ruin/syndicate_lava_base/virology) "ak" = ( -/obj/machinery/vending/boozeomat/syndicate_access, +/obj/machinery/vending/boozeomat/syndicate, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/syndicate_lava_base/bar) "al" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/medical/syndicate_access, +/obj/machinery/vending/medical/syndicate, /turf/open/floor/iron/white, /area/ruin/syndicate_lava_base/medbay) "ap" = ( @@ -4034,34 +4034,6 @@ /obj/effect/mapping_helpers/airalarm/syndicate_access, /turf/open/floor/iron, /area/ruin/syndicate_lava_base/main) -"TM" = ( -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/item/turbine_parts/rotor{ - current_tier = 3 - }, -/obj/item/turbine_parts/stator{ - current_tier = 2 - }, -/obj/item/turbine_parts/compressor{ - current_tier = 3 - }, -/obj/item/pipe_dispenser, -/obj/structure/closet/crate/engineering, -/obj/item/stack/sheet/mineral/plastitanium{ - amount = 30 - }, -/obj/item/stack/sheet/plastitaniumglass{ - amount = 15 - }, -/obj/item/holosign_creator/atmos, -/obj/item/circuitboard/machine/thermomachine, -/obj/item/circuitboard/machine/thermomachine, -/turf/open/floor/iron, -/area/ruin/syndicate_lava_base/engineering) "TN" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/east, @@ -4431,6 +4403,34 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/ruin/syndicate_lava_base/engineering) +"YJ" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/item/turbine_parts/rotor{ + current_tier = 3 + }, +/obj/item/turbine_parts/stator{ + current_tier = 2 + }, +/obj/item/turbine_parts/compressor{ + current_tier = 3 + }, +/obj/item/pipe_dispenser, +/obj/structure/closet/crate/engineering, +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 30 + }, +/obj/item/stack/sheet/plastitaniumglass{ + amount = 15 + }, +/obj/item/holosign_creator/atmos, +/obj/item/circuitboard/machine/thermomachine, +/obj/item/circuitboard/machine/thermomachine, +/turf/open/floor/iron, +/area/ruin/syndicate_lava_base/engineering) "YP" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -6614,7 +6614,7 @@ ju ju TO JE -TM +YJ ta vB LW 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 4b4daf0586b89..9dfb448cffecb 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_feasible.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1/mistake_feasible.dmm @@ -17,6 +17,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/testlab) +"ad" = ( +/obj/structure/table/reinforced, +/obj/item/restraints/handcuffs, +/obj/item/taperecorder, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) "ae" = ( /obj/machinery/firealarm/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -25,6 +33,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/testlab) +"af" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) "ag" = ( /obj/structure/table/reinforced, /obj/item/restraints/handcuffs, @@ -46,6 +67,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/testlab) +"aj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) "ak" = ( /obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt, @@ -56,6 +83,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/testlab) +"al" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) "am" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /obj/machinery/door/firedoor, @@ -87,6 +122,35 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/testlab) +"aq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"ar" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi"; + name = "Syndicate Research Experimentation Shutters" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/syndicate_lava_base/testlab) +"as" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) "at" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -110,6 +174,43 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/testlab) +"aw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"ax" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"ay" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"az" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) "aA" = ( /obj/structure/bed/medical/emergency, /obj/machinery/iv_drip, @@ -139,6 +240,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/testlab) +"aC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) "aD" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/syndicate_lava_base/testlab) @@ -155,6 +262,27 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/testlab) +"aF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/hatch{ + name = "Experimentation Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/cable, +/obj/modular_map_connector, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"aG" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/table/reinforced, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) "aH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, @@ -172,6 +300,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/ruin/syndicate_lava_base/testlab) +"aK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) "aL" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /turf/open/floor/plating, @@ -207,6 +340,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/ruin/syndicate_lava_base/testlab) +"aR" = ( +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) "aS" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/engine, @@ -222,6 +365,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/ruin/syndicate_lava_base/testlab) +"aU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"aV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) "aW" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/engine, diff --git a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm index e17ed5908b39e..e44cefcbc5def 100644 --- a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm +++ b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_syndicate_base1_skyrat.dmm @@ -5609,7 +5609,7 @@ /area/ruin/syndicate_lava_base/main) "KB" = ( /obj/effect/turf_decal/tile/dark/full, -/obj/machinery/vending/boozeomat/syndicate_access{ +/obj/machinery/vending/boozeomat/syndicate{ onstation = 0 }, /turf/open/floor/iron/dark/textured_large, diff --git a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm index 449122260ef98..32329cf4a5cfd 100644 --- a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm +++ b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm @@ -243,6 +243,12 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) +"nq" = ( +/obj/machinery/shower/directional/east, +/obj/structure/fluff/shower_drain, +/obj/item/soap, +/turf/open/floor/iron/freezer, +/area/ruin/space/has_grav/allamericandiner) "nr" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -597,6 +603,12 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/allamericandiner) +"CF" = ( +/obj/machinery/shower/directional/west, +/obj/structure/fluff/shower_drain, +/obj/item/soap, +/turf/open/floor/iron/freezer, +/area/ruin/space/has_grav/allamericandiner) "Du" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/condiment/peppermill{ @@ -612,12 +624,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) -"DD" = ( -/obj/machinery/shower/directional/east, -/obj/structure/fluff/shower_drain, -/obj/item/soap, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/allamericandiner) "DQ" = ( /obj/structure/chair/sofa/right/maroon, /obj/effect/decal/cleanable/dirt, @@ -952,12 +958,6 @@ /obj/item/storage/dice, /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) -"OJ" = ( -/obj/machinery/shower/directional/west, -/obj/structure/fluff/shower_drain, -/obj/item/soap, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/allamericandiner) "Ph" = ( /obj/structure/chair/sofa/left/maroon{ dir = 4 @@ -2083,7 +2083,7 @@ Kp jx Kp Lp -OJ +CF EK oN oN @@ -2157,7 +2157,7 @@ YX Im YX bE -DD +nq EK oN oN diff --git a/_maps/RandomRuins/SpaceRuins/bubberstation/space_dauntless.dmm b/_maps/RandomRuins/SpaceRuins/bubberstation/space_dauntless.dmm index 702af17133e13..9ae0dec200c70 100644 --- a/_maps/RandomRuins/SpaceRuins/bubberstation/space_dauntless.dmm +++ b/_maps/RandomRuins/SpaceRuins/bubberstation/space_dauntless.dmm @@ -2015,7 +2015,7 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/line{ dir = 8 }, -/obj/machinery/vending/medical/syndicate_access/cybersun{ +/obj/machinery/vending/medical/syndicate/cybersun{ desc = "An advanced vendor that dispenses medical drugs, both recreational and medicinal. It's said to have been salvaged from an old decommissioned Cybersun Cruiser."; name = "\improper SyndiMed ++"; onstation = 0; @@ -9555,7 +9555,7 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/ruin/space/has_grav/bubbers/dauntless_space/engineering) "Py" = ( -/obj/machinery/vending/boozeomat/syndicate_access{ +/obj/machinery/vending/boozeomat/syndicate{ onstation = 0; onstation_override = 1 }, diff --git a/_maps/RandomRuins/SpaceRuins/bubberstation/thelizardsgas_bubber.dmm b/_maps/RandomRuins/SpaceRuins/bubberstation/thelizardsgas_bubber.dmm new file mode 100644 index 0000000000000..bd714d23827a4 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/bubberstation/thelizardsgas_bubber.dmm @@ -0,0 +1,1402 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ak" = ( +/obj/structure/cable, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/white/side, +/area/ruin/space/has_grav/thelizardsgas) +"aK" = ( +/obj/structure/chair/stool/bar/directional/south, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/thelizardsgas) +"aS" = ( +/obj/structure/closet, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/breath, +/obj/item/pickaxe, +/obj/item/gun/ballistic/rifle/boltaction/pipegun, +/obj/item/ammo_casing/junk/hunter, +/obj/item/ammo_casing/junk/hunter, +/obj/item/ammo_casing/junk/hunter, +/obj/item/storage/box/coffeepack/robusta, +/obj/item/storage/box/coffeepack/robusta, +/obj/item/flatpacked_machine, +/obj/item/flatpacked_machine/ore_silo, +/obj/item/flatpacked_machine/sustenance_machine, +/obj/item/flatpacked_machine/organics_ration_printer, +/obj/item/flatpacked_machine/macrowave, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"bo" = ( +/obj/structure/rack, +/obj/item/clothing/shoes/cowboy/lizard{ + desc = "You can hear a faint hissing from inside the boots." + }, +/obj/structure/cable, +/turf/open/floor/iron/white/side, +/area/ruin/space/has_grav/thelizardsgas) +"bp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"bO" = ( +/obj/structure/closet/crate/secure/gear, +/turf/closed/mineral, +/area/ruin/space/has_grav/thelizardsgas) +"bW" = ( +/obj/effect/spawner/random/structure/billboard/lizardsgas, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/thelizardsgas) +"cm" = ( +/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/light_switch/directional/east, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"cn" = ( +/obj/structure/rack, +/obj/item/food/candy, +/obj/item/food/candy, +/obj/item/food/candy, +/obj/item/food/chocolatebar, +/obj/item/food/chocolatebar{ + pixel_y = 3 + }, +/obj/item/food/chocolatebar{ + pixel_y = 6 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"ct" = ( +/turf/open/floor/iron/white/corner{ + dir = 4 + }, +/area/ruin/space/has_grav/thelizardsgas) +"cv" = ( +/obj/structure/sign/poster/fluff/lizards_gas_payment/directional/west, +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden, +/turf/open/floor/iron/white/corner{ + dir = 4 + }, +/area/ruin/space/has_grav/thelizardsgas) +"de" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/binary/pump/off{ + dir = 8 + }, +/turf/template_noop, +/area/ruin/space/has_grav/thelizardsgas) +"dz" = ( +/obj/structure/rack, +/obj/item/food/sticko/nutty{ + pixel_y = 5; + pixel_x = -5 + }, +/obj/item/food/sticko{ + pixel_y = 2; + pixel_x = 6 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"eV" = ( +/obj/structure/sign/poster/fluff/lizards_gas_payment/directional/north, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 8 + }, +/area/ruin/space/has_grav/thelizardsgas) +"fA" = ( +/obj/structure/table/reinforced, +/obj/machinery/griddle/frontier_tabletop, +/obj/item/food/raw_sausage, +/obj/item/food/raw_sausage{ + pixel_y = 4 + }, +/obj/item/food/raw_sausage{ + pixel_y = 9 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"gL" = ( +/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/space/has_grav/thelizardsgas) +"gS" = ( +/obj/structure/rack, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/structure/cable, +/turf/open/floor/iron/white/side, +/area/ruin/space/has_grav/thelizardsgas) +"hl" = ( +/obj/structure/cable, +/turf/open/floor/iron/white/side, +/area/ruin/space/has_grav/thelizardsgas) +"ig" = ( +/obj/structure/table/wood, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/thelizardsgas) +"iA" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"iO" = ( +/obj/effect/turf_decal/tile/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"jv" = ( +/obj/machinery/airalarm/directional/north{ + locked = 0 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/ruin/space/has_grav/thelizardsgas) +"jN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"kk" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/white/side, +/area/ruin/space/has_grav/thelizardsgas) +"kS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "lizardgas" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=35000;TEMP=293.15" + }, +/area/ruin/space/has_grav/thelizardsgas) +"mN" = ( +/obj/item/reagent_containers/condiment/yoghurt{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/reagent_containers/condiment/yoghurt{ + pixel_x = 6; + pixel_y = -1 + }, +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/storage/fancy/egg_box{ + pixel_y = 9 + }, +/obj/item/storage/fancy/egg_box, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/space/has_grav/thelizardsgas) +"mR" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/thelizardsgas) +"na" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden, +/turf/open/floor/iron/white/side, +/area/ruin/space/has_grav/thelizardsgas) +"nL" = ( +/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/cable, +/turf/open/floor/iron/white/side, +/area/ruin/space/has_grav/thelizardsgas) +"oZ" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/ruin/space/has_grav/thelizardsgas) +"rs" = ( +/obj/machinery/button/door/directional/west{ + desc = "After all, what's more important than making sure you get what you're due?"; + name = "Criminal Shutters" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/ruin/space/has_grav/thelizardsgas) +"rC" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"ss" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"sN" = ( +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"tq" = ( +/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, +/obj/structure/sign/poster/fluff/lizards_gas_power/directional/east, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"tH" = ( +/obj/structure/table/reinforced, +/obj/item/food/rootbread_peanut_butter_banana{ + pixel_y = 12; + pixel_x = -3 + }, +/obj/item/food/rootbread_peanut_butter_jelly{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"ua" = ( +/obj/effect/spawner/random/structure/billboard/roadsigns, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/thelizardsgas) +"uh" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Criminal Shutters" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"vj" = ( +/obj/item/food/cornuto{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/food/cornuto{ + pixel_y = -5; + pixel_x = 2 + }, +/obj/item/food/cornuto{ + pixel_y = 5; + pixel_x = 6 + }, +/obj/item/food/cornuto{ + pixel_y = -5; + pixel_x = -3 + }, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/space/has_grav/thelizardsgas) +"wb" = ( +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/thelizardsgas) +"xb" = ( +/obj/structure/cable, +/obj/structure/sign/warning/fire/directional/north, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/white/side, +/area/ruin/space/has_grav/thelizardsgas) +"xy" = ( +/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/plating, +/area/ruin/space/has_grav/thelizardsgas) +"yG" = ( +/obj/structure/rack, +/obj/item/food/cornchips/random, +/obj/item/food/cornchips/random{ + pixel_x = 8; + pixel_y = -5 + }, +/obj/item/food/cornchips/random{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/item/food/cornchips/random{ + pixel_y = -7; + pixel_x = -5 + }, +/obj/item/food/cornchips/random{ + pixel_y = -7; + pixel_x = 3 + }, +/obj/item/food/cornchips/random{ + pixel_x = 5; + pixel_y = 6 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"yU" = ( +/obj/structure/sign/warning/no_smoking/directional/north{ + desc = "An incredibly bad idea." + }, +/turf/template_noop, +/area/template_noop) +"zn" = ( +/obj/structure/rack, +/obj/item/food/chips{ + pixel_x = 7 + }, +/obj/item/food/chips{ + pixel_y = 7; + pixel_x = -4 + }, +/obj/item/food/chips/shrimp{ + pixel_y = 10; + pixel_x = 7 + }, +/obj/item/food/chips/shrimp{ + pixel_y = -4; + pixel_x = -5 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"zz" = ( +/obj/machinery/door/window/left/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 + }, +/area/ruin/space/has_grav/thelizardsgas) +"Bi" = ( +/obj/structure/closet{ + desc = "Why leave the chairs in a locker?"; + name = "CHAIRS" + }, +/obj/item/chair/plastic, +/obj/item/chair/plastic, +/obj/item/chair/plastic, +/obj/item/chair/plastic, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/thelizardsgas) +"Bu" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden, +/turf/template_noop, +/area/ruin/space/has_grav/thelizardsgas) +"BJ" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/binary/pump/off{ + dir = 4 + }, +/turf/template_noop, +/area/ruin/space/has_grav/thelizardsgas) +"Cv" = ( +/obj/machinery/door/airlock/hatch, +/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/plating, +/area/ruin/space/has_grav/thelizardsgas) +"CA" = ( +/turf/template_noop, +/area/template_noop) +"DG" = ( +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=35000;TEMP=293.15" + }, +/area/ruin/space/has_grav/thelizardsgas) +"Es" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"EH" = ( +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/ruin/space/has_grav/thelizardsgas) +"Gr" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/bbqsauce{ + pixel_y = 17; + pixel_x = 9 + }, +/obj/item/reagent_containers/condiment/hotsauce{ + pixel_y = 15; + pixel_x = -8 + }, +/obj/item/reagent_containers/condiment/coldsauce{ + pixel_x = -9; + pixel_y = 5 + }, +/obj/item/reagent_containers/condiment/donksauce{ + pixel_x = 1; + pixel_y = 15 + }, +/obj/item/reagent_containers/condiment/mayonnaise{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/food/bun, +/obj/item/food/bun, +/obj/item/food/bun, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"GM" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Criminal Shutters" + }, +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"GR" = ( +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"Hc" = ( +/obj/structure/flora/rock, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/thelizardsgas) +"Io" = ( +/obj/structure/cable, +/obj/machinery/power/smes/full, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"Je" = ( +/turf/open/floor/iron/white/side{ + dir = 8 + }, +/area/ruin/space/has_grav/thelizardsgas) +"Jg" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 4 + }, +/turf/template_noop, +/area/ruin/space/has_grav/thelizardsgas) +"Jw" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/thelizardsgas) +"JA" = ( +/obj/structure/closet/crate/secure/freezer{ + desc = "There's a reason why this is behind the counter. Do not sell to minors."; + locked = 0; + name = "The GOOD Stuff" + }, +/obj/machinery/power/apc/auto_name/directional/north{ + coverlocked = 0; + start_charge = 60 + }, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/structure/cable, +/obj/item/paper/fluff/spaceruins/lizardsgas/memorandum, +/obj/effect/spawner/random/contraband/cannabis/lizardsgas, +/obj/effect/spawner/random/contraband/cannabis/lizardsgas, +/obj/effect/spawner/random/contraband/cannabis/lizardsgas, +/obj/machinery/light/small/directional/west, +/obj/effect/mapping_helpers/apc/cell_10k, +/turf/open/floor/iron/dark/smooth_corner, +/area/ruin/space/has_grav/thelizardsgas) +"JM" = ( +/obj/structure/table/reinforced, +/obj/machinery/coffeemaker/impressa{ + pixel_x = 2 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"JP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/directional/west, +/obj/effect/mob_spawn/ghost_role/human/lavaland_gasstation{ + dir = 4; + flavour_text = "Your employer, however, failed to realize that there are is hardly anything in the area, so make sure that you can survive without eating your own stock. Also sell stuff to people, occasionally." + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"JY" = ( +/obj/structure/cable, +/turf/open/floor/iron/white/corner, +/area/ruin/space/has_grav/thelizardsgas) +"Kw" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"LA" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/thelizardsgas) +"LT" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/machinery/suit_storage_unit/standard_unit, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"MB" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden{ + dir = 4 + }, +/turf/template_noop, +/area/ruin/space/has_grav/thelizardsgas) +"Ow" = ( +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark/smooth_edge, +/area/ruin/space/has_grav/thelizardsgas) +"OQ" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=35000;TEMP=293.15" + }, +/area/ruin/space/has_grav/thelizardsgas) +"Pb" = ( +/obj/structure/sign/warning/vacuum/directional/east, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"Pi" = ( +/obj/effect/turf_decal/tile/dark{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"PF" = ( +/obj/machinery/computer/atmos_control/noreconnect{ + atmos_chambers = list("lizardgas"="Plasma Supply"); + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/ruin/space/has_grav/thelizardsgas) +"Qg" = ( +/turf/closed/mineral, +/area/ruin/space/has_grav/thelizardsgas) +"Qi" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 8 + }, +/turf/template_noop, +/area/ruin/space/has_grav/thelizardsgas) +"QQ" = ( +/obj/item/toy/plush/lizard_plushie/space/green{ + desc = "How the fuck did he get in there?!"; + name = "Zingo" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=35000;TEMP=293.15" + }, +/area/ruin/space/has_grav/thelizardsgas) +"RB" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/thelizardsgas) +"Tj" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/pink/hidden, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"Ua" = ( +/mob/living/basic/lizard/space{ + desc = "How are you ALIVE?!"; + name = "Blarpo" + }, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/ruin/space/has_grav/thelizardsgas) +"Ud" = ( +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/thelizardsgas) +"Uh" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored{ + chamber_id = "lizardgas"; + dir = 4 + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=35000;TEMP=293.15" + }, +/area/ruin/space/has_grav/thelizardsgas) +"Um" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/thelizardsgas) +"UO" = ( +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/ruin/space/has_grav/thelizardsgas) +"Ve" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"VP" = ( +/obj/structure/table/reinforced, +/obj/item/gps/spaceruin, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 1 + }, +/area/ruin/space/has_grav/thelizardsgas) +"Wh" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/ruin/space/has_grav/thelizardsgas) +"WP" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/hidden, +/turf/template_noop, +/area/ruin/space/has_grav/thelizardsgas) +"WY" = ( +/obj/machinery/air_sensor{ + chamber_id = "lizardgas" + }, +/turf/open/floor/engine/plasma{ + initial_gas_mix = "plasma=35000;TEMP=293.15" + }, +/area/ruin/space/has_grav/thelizardsgas) +"Ys" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/thelizardsgas) +"YK" = ( +/obj/item/food/popsicle/creamsicle_berry{ + pixel_y = 4; + pixel_x = -1 + }, +/obj/item/food/popsicle/creamsicle_berry{ + pixel_y = 1; + pixel_x = 5 + }, +/obj/item/food/popsicle/creamsicle_orange, +/obj/item/food/popsicle/creamsicle_orange{ + pixel_y = 6; + pixel_x = 3 + }, +/obj/structure/closet/crate/freezer, +/turf/open/floor/iron/freezer{ + baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface + }, +/area/ruin/space/has_grav/thelizardsgas) +"Zr" = ( +/obj/effect/turf_decal/tile/dark{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) +"Zs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/thelizardsgas) + +(1,1,1) = {" +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +"} +(2,1,1) = {" +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +"} +(3,1,1) = {" +CA +CA +CA +CA +Qg +Qg +Qg +Qg +Qg +Qg +Qg +Qg +Um +wb +Qg +wb +wb +CA +CA +CA +CA +CA +CA +CA +CA +"} +(4,1,1) = {" +CA +CA +CA +Qg +Qg +mR +mR +mR +mR +mR +mR +Qg +Qg +wb +RB +Um +wb +CA +CA +CA +CA +CA +CA +CA +CA +"} +(5,1,1) = {" +CA +CA +CA +Qg +Qg +mR +JA +rs +zz +JY +ct +mR +Qg +Qg +wb +bW +wb +CA +CA +CA +CA +CA +CA +CA +CA +"} +(6,1,1) = {" +CA +CA +CA +Qg +bO +mR +jv +aK +Ow +hl +Zr +ct +mR +Qg +RB +wb +RB +CA +Jg +CA +CA +Jg +CA +CA +CA +"} +(7,1,1) = {" +CA +CA +Qg +Qg +Qg +mR +eV +PF +VP +hl +fA +UO +mR +Qg +wb +wb +wb +CA +de +CA +CA +de +CA +CA +CA +"} +(8,1,1) = {" +CA +CA +Qg +Qg +LA +LA +rC +rC +rC +hl +Gr +UO +mR +mR +mR +mR +RB +CA +MB +CA +CA +MB +CA +CA +CA +"} +(9,1,1) = {" +CA +CA +Qg +Qg +LA +OQ +DG +kS +Tj +na +sN +iO +cv +GM +Pb +ss +Bu +Bu +WP +Bu +Bu +WP +CA +CA +CA +"} +(10,1,1) = {" +CA +CA +Qg +Qg +LA +DG +WY +QQ +rC +hl +bp +GR +Wh +mR +mR +mR +yU +CA +MB +CA +CA +MB +CA +CA +CA +"} +(11,1,1) = {" +CA +CA +CA +Qg +LA +Uh +DG +DG +rC +hl +Zs +GR +UO +uh +CA +CA +CA +CA +BJ +CA +CA +BJ +CA +CA +CA +"} +(12,1,1) = {" +CA +CA +CA +Qg +LA +Ud +LA +LA +LA +xb +Zs +yG +UO +uh +CA +CA +CA +CA +Qi +CA +CA +Qi +CA +CA +CA +"} +(13,1,1) = {" +CA +CA +CA +Qg +mR +iA +JP +Ys +mR +ak +Zs +zn +UO +uh +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +"} +(14,1,1) = {" +CA +CA +CA +Jw +oZ +Es +Ve +aS +mR +gS +Zs +cn +Ua +uh +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +"} +(15,1,1) = {" +CA +CA +CA +Qg +mR +LT +xy +Kw +mR +bo +Zs +dz +UO +uh +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +"} +(16,1,1) = {" +CA +CA +CA +Qg +mR +Io +cm +tq +Cv +nL +gL +GR +UO +uh +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +"} +(17,1,1) = {" +CA +CA +CA +Qg +mR +mR +mR +mR +mR +kk +jN +GR +Wh +mR +Qg +Um +wb +wb +CA +CA +CA +CA +CA +CA +CA +"} +(18,1,1) = {" +CA +Qg +Qg +Qg +Qg +Bi +wb +mR +vj +Pi +GR +tH +UO +mR +Qg +wb +wb +wb +RB +CA +CA +CA +CA +CA +CA +"} +(19,1,1) = {" +CA +Qg +wb +wb +wb +wb +Um +mR +YK +GR +GR +JM +UO +mR +Qg +Qg +wb +ua +wb +CA +CA +CA +CA +CA +CA +"} +(20,1,1) = {" +CA +Qg +wb +ig +ig +wb +Qg +mR +mN +Je +Je +Je +EH +mR +Qg +Hc +RB +wb +RB +CA +CA +CA +CA +CA +CA +"} +(21,1,1) = {" +CA +CA +wb +wb +wb +wb +Qg +mR +mR +mR +mR +mR +mR +mR +wb +wb +wb +wb +wb +CA +CA +CA +CA +CA +CA +"} +(22,1,1) = {" +CA +CA +CA +wb +wb +wb +Qg +Qg +Qg +Qg +Qg +Qg +Qg +Qg +wb +Qg +RB +wb +wb +CA +CA +CA +CA +CA +CA +"} +(23,1,1) = {" +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +"} +(24,1,1) = {" +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +"} +(25,1,1) = {" +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +CA +"} diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index a7eac1fe1a8b1..edd734ee6f586 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -1062,7 +1062,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research/lab) "oJ" = ( -/obj/structure/closet/crate/medical, +/obj/structure/closet/crate/secure/interdyne, /obj/item/stack/medical/suture/emergency, /obj/item/stack/medical/gauze/twelve, /obj/item/reagent_containers/hypospray/medipen/blood_loss, @@ -2155,7 +2155,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research/lab) "BG" = ( -/obj/structure/closet/crate, +/obj/structure/closet/crate/secure/interdyne, /obj/item/stack/sheet/mineral/plasma/thirty, /obj/item/stack/sheet/mineral/wood/fifty, /obj/item/stack/sheet/iron/fifty, @@ -3658,7 +3658,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research) "VQ" = ( -/obj/structure/closet/crate, +/obj/structure/closet/crate/secure/interdyne, /obj/item/reagent_containers/cup/glass/waterbottle/large, /obj/item/reagent_containers/cup/glass/waterbottle/large, /obj/item/reagent_containers/cup/glass/waterbottle/large, diff --git a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm index 7b12e87992c8a..cb2a35084f93e 100644 --- a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm +++ b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm @@ -613,7 +613,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/syndicate_forgotten_ship) "ct" = ( -/obj/machinery/vending/medical/syndicate_access/cybersun, +/obj/machinery/vending/medical/syndicate/cybersun, /turf/open/floor/plastic, /area/ruin/space/has_grav/syndicate_forgotten_ship) "cu" = ( diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm index 62cc4e2930d10..6aca5d7938a01 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm @@ -253,13 +253,6 @@ /obj/structure/closet/secure_closet/freezer/empty, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/foodwaste) -"jy" = ( -/obj/structure/closet/cardboard, -/obj/item/toy/plush/snakeplushie, -/obj/item/clothing/glasses/eyepatch, -/obj/item/cigarette/cigar/havana, -/turf/open/floor/plating/dumpsterair, -/area/ruin/space/has_grav/garbagetruck/foodwaste) "ki" = ( /obj/effect/spawner/random/trash/food_packaging, /obj/item/shard, @@ -480,6 +473,13 @@ }, /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/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{ @@ -491,9 +491,6 @@ /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, @@ -751,6 +748,12 @@ /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/power_store/cell/lead, +/turf/open/floor/iron/smooth, +/area/ruin/space/has_grav/garbagetruck/foodwaste) "FL" = ( /obj/structure/closet/cardboard, /obj/item/pen/blue, @@ -867,12 +870,6 @@ }, /turf/open/floor/iron/smooth, /area/ruin/space/has_grav/garbagetruck/foodwaste) -"Ji" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/lead, -/turf/open/floor/iron/smooth, -/area/ruin/space/has_grav/garbagetruck/foodwaste) "JH" = ( /obj/item/petri_dish/random, /obj/item/petri_dish/random, @@ -888,20 +885,6 @@ /obj/effect/spawner/random/medical/surgery_tool, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/foodwaste) -"Kj" = ( -/obj/item/clothing/head/cone{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/machinery/light/warm, -/obj/machinery/power/apc{ - locked = 0; - pixel_y = -25; - start_charge = 0 - }, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/space/has_grav/garbagetruck/foodwaste) "KD" = ( /obj/structure/closet/crate/critter, /obj/item/dog_bone{ @@ -1077,6 +1060,20 @@ /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{ + 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, @@ -1282,7 +1279,7 @@ Sa XY Od kJ -Ji +Fz gI OD Sa @@ -1291,7 +1288,7 @@ rL HC YB iH -jy +wv KD wR nS @@ -1415,7 +1412,7 @@ XY Od fI bF -Kj +PU OD Sa Qi diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm index 3e842bd1979ee..03a9b87ff4edf 100644 --- a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm +++ b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm @@ -140,13 +140,13 @@ }, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/squat) -"iC" = ( +"ih" = ( +/obj/item/bedsheet/purple, +/obj/item/cigarette/space_cigarette, +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/dirt, /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/power_store/cell/lead, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/squat) "iU" = ( @@ -154,14 +154,6 @@ /obj/effect/decal/cleanable/fuel_pool, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/squat) -"ja" = ( -/obj/item/food/deadmouse, -/obj/item/clothing/shoes/sneakers/red, -/obj/item/cigarette/carp, -/obj/item/extinguisher/mini, -/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{ @@ -193,6 +185,13 @@ /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/power_store/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, @@ -318,15 +317,6 @@ /mob/living/basic/cockroach, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/squat) -"ra" = ( -/obj/item/bedsheet/purple, -/obj/item/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) "rq" = ( /obj/effect/decal/cleanable/fuel_pool, /obj/effect/decal/cleanable/dirt, @@ -367,12 +357,6 @@ }, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/squat) -"so" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/lead, -/turf/open/floor/iron/smooth, -/area/ruin/space/has_grav/garbagetruck/squat) "sF" = ( /obj/structure/table/reinforced, /obj/item/storage/box/gloves{ @@ -388,6 +372,14 @@ }, /turf/open/floor/iron/smooth, /area/ruin/space/has_grav/garbagetruck/squat) +"tu" = ( +/obj/item/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, @@ -449,20 +441,21 @@ /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/power_store/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) -"wk" = ( -/obj/item/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) "xg" = ( /obj/structure/chair/office, /obj/item/reagent_containers/cup/mortar, @@ -470,6 +463,20 @@ /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{ + 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, @@ -530,33 +537,6 @@ /obj/structure/reagent_dispensers/fueltank/large, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/squat) -"Cc" = ( -/obj/item/stock_parts/power_store/cell/crap/empty{ - pixel_x = -4; - pixel_y = 10 - }, -/obj/item/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) -"Ci" = ( -/obj/effect/decal/cleanable/fuel_pool, -/obj/item/stock_parts/power_store/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) "Cm" = ( /obj/effect/decal/cleanable/fuel_pool, /obj/item/mod/module/jetpack{ @@ -685,6 +665,12 @@ /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/power_store/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) @@ -767,6 +753,26 @@ /obj/item/crowbar/large/emergency, /turf/open/space/basic, /area/ruin/space/has_grav/garbagetruck/squat) +"MQ" = ( +/obj/item/stock_parts/power_store/cell/crap/empty{ + pixel_x = -4; + pixel_y = 10 + }, +/obj/item/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, @@ -800,20 +806,6 @@ /obj/item/food/drug/moon_rock, /turf/open/floor/plating/dumpsterair, /area/ruin/space/has_grav/garbagetruck/squat) -"Qs" = ( -/obj/item/clothing/head/cone{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/machinery/light/warm, -/obj/machinery/power/apc{ - locked = 0; - pixel_y = -25; - start_charge = 0 - }, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/ruin/space/has_grav/garbagetruck/squat) "Rw" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/fuel_pool, @@ -910,6 +902,14 @@ "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/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, @@ -981,19 +981,19 @@ mV la gq sF -so +HN dC HZ mV bR -ra +ih un aI rq Fe lv pM -wk +tu hm pC fF @@ -1016,7 +1016,7 @@ za aG zo HD -Cc +MQ qF Cm mV @@ -1039,7 +1039,7 @@ uW XS nX BN -iC +vJ vW mV "} @@ -1061,7 +1061,7 @@ Hk vq zY Hn -Ci +kb le mV "} @@ -1114,7 +1114,7 @@ la gq Gn dF -Qs +yo HZ mV ui @@ -1150,7 +1150,7 @@ Dq yF Nd Er -ja +Xv Pz "} (11,1,1) = {" diff --git a/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm b/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm index 50e0bffd56727..df3c3ca64277e 100644 --- a/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm @@ -139,7 +139,7 @@ "bq" = ( /obj/structure/cable/layer1, /obj/machinery/vending/sovietsoda{ - onstation_override = 1 + all_products_free = 0 }, /obj/structure/sign/poster/contraband/clown/directional/east, /obj/machinery/duct, @@ -527,7 +527,7 @@ "dU" = ( /obj/structure/cable/layer1, /obj/machinery/vending/cigarette/syndicate{ - onstation_override = 1 + all_products_free = 0 }, /obj/machinery/duct, /obj/effect/mapping_helpers/broken_machine, @@ -544,7 +544,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, /obj/machinery/duct, /obj/machinery/vending/clothing{ - onstation_override = 1 + all_products_free = 0 }, /obj/machinery/firealarm/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ @@ -1378,7 +1378,7 @@ /area/ruin/space/has_grav/hauntedtradingpost/office/meetingroom) "lT" = ( /obj/machinery/vending/cola/black{ - onstation_override = 1 + all_products_free = 0 }, /obj/machinery/duct, /obj/effect/mapping_helpers/broken_machine, @@ -1866,7 +1866,7 @@ /obj/structure/cable/layer1, /obj/machinery/duct, /obj/machinery/vending/assist{ - onstation_override = 1 + all_products_free = 0 }, /obj/machinery/camera/xray/directional/west, /turf/open/floor/catwalk_floor/iron_smooth, @@ -2475,7 +2475,7 @@ /obj/structure/cable/layer1, /obj/machinery/duct, /obj/machinery/vending/cola/shamblers{ - onstation_override = 1 + all_products_free = 0 }, /turf/open/floor/catwalk_floor/iron_smooth, /area/ruin/space/has_grav/hauntedtradingpost/public/corridor) @@ -4199,7 +4199,7 @@ "KH" = ( /obj/structure/cable/layer1, /obj/machinery/vending/donksnack{ - onstation_override = 1 + all_products_free = 0 }, /obj/machinery/duct, /obj/machinery/camera/autoname/directional/west{ @@ -4516,7 +4516,7 @@ "MO" = ( /obj/machinery/duct, /obj/machinery/vending/snack{ - onstation_override = 1 + all_products_free = 0 }, /turf/open/floor/catwalk_floor/iron_smooth, /area/ruin/space/has_grav/hauntedtradingpost/public/corridor) @@ -4616,7 +4616,7 @@ "NY" = ( /obj/structure/cable/layer1, /obj/machinery/vending/coffee{ - onstation_override = 1 + all_products_free = 0 }, /obj/machinery/duct, /turf/open/floor/catwalk_floor/iron_smooth, @@ -4755,7 +4755,7 @@ "Pk" = ( /obj/structure/cable/layer1, /obj/machinery/vending/tool{ - onstation_override = 1 + all_products_free = 0 }, /obj/structure/sign/poster/contraband/donk_co/directional/west, /obj/machinery/duct, @@ -4886,7 +4886,7 @@ "QM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, /obj/machinery/vending/sovietsoda{ - onstation_override = 1 + all_products_free = 0 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ pipe_color = "#FF7B00"; @@ -5415,7 +5415,7 @@ /obj/structure/cable/layer1, /obj/machinery/duct, /obj/machinery/vending/medical{ - onstation_override = 1; + all_products_free = 0; name = "\improper CyberMed +" }, /turf/open/floor/catwalk_floor/iron_smooth, @@ -5635,7 +5635,7 @@ /area/ruin/space/has_grav/hauntedtradingpost/office) "Ww" = ( /obj/machinery/vending/coffee{ - onstation_override = 1 + all_products_free = 0 }, /obj/structure/cable/layer1, /obj/machinery/duct, @@ -5712,7 +5712,7 @@ "Xe" = ( /obj/structure/cable/layer1, /obj/machinery/vending/cola/shamblers{ - onstation_override = 1 + all_products_free = 0 }, /obj/machinery/duct, /obj/effect/overloader_trap, @@ -5802,7 +5802,7 @@ /area/ruin/space/has_grav/hauntedtradingpost/public) "XK" = ( /obj/machinery/vending/donksnack{ - onstation_override = 1 + all_products_free = 0 }, /obj/machinery/duct, /turf/open/floor/catwalk_floor/iron_smooth, diff --git a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm index e7b7dc402915a..524e81ebb69cc 100644 --- a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm +++ b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm @@ -283,6 +283,11 @@ /obj/item/stack/package_wrap, /turf/open/floor/plating, /area/ruin/space/has_grav/hellfactory) +"aT" = ( +/obj/effect/mine/gas/water_vapor, +/obj/machinery/door/window/left/directional/south, +/turf/open/floor/plastic, +/area/ruin/space/has_grav/hellfactory) "aU" = ( /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) @@ -563,6 +568,11 @@ /obj/structure/mirror/directional/north, /turf/open/floor/holofloor/wood, /area/ruin/space/has_grav/hellfactory) +"cc" = ( +/obj/structure/bed, +/obj/effect/spawner/random/bedsheet, +/turf/open/floor/holofloor/wood, +/area/ruin/space/has_grav/hellfactory) "cd" = ( /obj/machinery/plumbing/synthesizer{ desc = "Produces a single chemical at a given volume. This one appears to have been hotwired to generate universal enzyme."; @@ -833,11 +843,6 @@ /obj/structure/sign/warning/vacuum, /turf/closed/wall, /area/ruin/space/has_grav/hellfactory) -"oG" = ( -/obj/effect/mine/gas/water_vapor, -/obj/machinery/door/window/left/directional/south, -/turf/open/floor/plastic, -/area/ruin/space/has_grav/hellfactory) "oH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/west, @@ -870,11 +875,6 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/ruin/space/has_grav/hellfactory) -"sQ" = ( -/obj/structure/bed, -/obj/effect/spawner/random/bedsheet, -/turf/open/floor/holofloor/wood, -/area/ruin/space/has_grav/hellfactory) "ux" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/iron, @@ -897,6 +897,12 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/ruin/space/has_grav/hellfactoryoffice) +"xK" = ( +/obj/structure/bed, +/obj/effect/spawner/random/bedsheet, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/holofloor/wood, +/area/ruin/space/has_grav/hellfactory) "BC" = ( /obj/machinery/light/floor, /obj/effect/turf_decal/bot_white/left, @@ -938,12 +944,6 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/ruin/space/has_grav/hellfactory) -"Oo" = ( -/obj/structure/bed, -/obj/effect/spawner/random/bedsheet, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/holofloor/wood, -/area/ruin/space/has_grav/hellfactory) "OJ" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2, @@ -1090,7 +1090,7 @@ ad au aC aM -oG +aT ba bl bl @@ -1422,9 +1422,9 @@ by by QS aL -sQ +cc aL -Oo +xK ac ac aW diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm index a6da6eb66a9da..01ef1895a66b9 100644 --- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm +++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm @@ -43,6 +43,18 @@ }, /turf/open/floor/wood, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"bi" = ( +/obj/structure/rack, +/obj/item/reagent_containers/syringe/bluespace{ + pixel_y = 2 + }, +/obj/item/reagent_containers/syringe/bluespace{ + pixel_y = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/machinery/door/window/survival_pod/left/directional/south, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "bE" = ( /turf/open/floor/iron/stairs, /area/ruin/space/has_grav/powered/hilbertresearchfacility) @@ -240,6 +252,14 @@ /obj/structure/railing/corner, /turf/open/floor/glass, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"hB" = ( +/obj/machinery/door/window/survival_pod/left/directional/east, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 5 + }, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "hL" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/siding/thinplating_new/light{ @@ -474,14 +494,6 @@ /obj/item/transfer_valve, /turf/open/floor/plating/airless, /area/ruin/space) -"mz" = ( -/obj/structure/rack, -/obj/item/clothing/suit/bio_suit/cmo, -/obj/item/clothing/head/bio_hood/cmo, -/obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/door/window/survival_pod/left/directional/south, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "mC" = ( /obj/machinery/chem_mass_spec, /turf/open/floor/mineral/titanium/tiled/blue, @@ -524,18 +536,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/ruin/space/has_grav/powered/hilbertresearchfacility) -"nv" = ( -/obj/structure/rack, -/obj/item/reagent_containers/syringe/bluespace{ - pixel_y = 2 - }, -/obj/item/reagent_containers/syringe/bluespace{ - pixel_y = 8 - }, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/door/window/survival_pod/left/directional/south, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "nx" = ( /obj/machinery/door/window/left/directional/south, /obj/effect/decal/cleanable/dirt, @@ -551,12 +551,6 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/hilbertresearchfacility) -"nK" = ( -/obj/structure/rack, -/obj/item/gun/syringe, -/obj/machinery/door/window/survival_pod/left/directional/west, -/turf/open/floor/mineral/plastitanium/red, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "nM" = ( /obj/structure/lattice, /turf/template_noop, @@ -580,14 +574,6 @@ /obj/item/assembly/signaler, /turf/open/floor/plating/airless, /area/ruin/space) -"nY" = ( -/obj/machinery/door/window/survival_pod/left/directional/east, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 5 - }, -/obj/item/stack/cable_coil/cut, -/turf/open/floor/mineral/titanium/tiled/purple, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "og" = ( /obj/item/slime_extract/bluespace, /obj/effect/decal/cleanable/dirt, @@ -664,14 +650,6 @@ }, /turf/open/floor/iron/grimy, /area/ruin/space/has_grav/powered/hilbertresearchfacility) -"qj" = ( -/obj/machinery/door/window/survival_pod/left/directional/west, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/tiled/purple, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "qC" = ( /obj/machinery/transport/tram_controller/hilbert, /turf/closed/indestructible/riveted/plastinum/nodiagonal, @@ -756,6 +734,12 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"th" = ( +/obj/structure/rack, +/obj/item/gun/syringe, +/obj/machinery/door/window/survival_pod/left/directional/west, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "ty" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/stock_parts/matter_bin/bluespace{ @@ -804,6 +788,13 @@ /obj/effect/turf_decal/trimline/neutral/mid_joiner, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"us" = ( +/obj/machinery/door/window/survival_pod/left/directional/west, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 10 + }, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "uV" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 5 @@ -831,6 +822,14 @@ }, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"vz" = ( +/obj/structure/rack, +/obj/item/clothing/suit/bio_suit/cmo, +/obj/item/clothing/head/bio_hood/cmo, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/door/window/survival_pod/left/directional/south, +/turf/open/floor/mineral/plastitanium/red, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "vG" = ( /obj/structure/fluff/tram_rail/end{ dir = 8 @@ -971,6 +970,14 @@ /obj/item/grown/bananapeel/mimanapeel, /turf/open/floor/glass, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"yK" = ( +/obj/machinery/door/window/survival_pod/left/directional/west, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "yO" = ( /obj/structure/door_assembly/door_assembly_shuttle, /turf/open/floor/mineral/titanium/blue, @@ -1151,6 +1158,13 @@ /obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod, /turf/open/floor/wood, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"BF" = ( +/obj/machinery/door/window/survival_pod/left/directional/west, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 9 + }, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "BH" = ( /obj/item/kirbyplants/photosynthetic, /obj/effect/turf_decal/stripes/red/line, @@ -1216,13 +1230,6 @@ }, /turf/open/floor/wood, /area/ruin/space/has_grav/powered/hilbertresearchfacility) -"CB" = ( -/obj/machinery/door/window/survival_pod/left/directional/west, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 10 - }, -/turf/open/floor/mineral/titanium/tiled/purple, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "CO" = ( /turf/open/floor/glass, /area/ruin/space/has_grav/powered/hilbertresearchfacility) @@ -1257,6 +1264,14 @@ }, /turf/open/floor/engine, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"DO" = ( +/obj/machinery/door/window/survival_pod/left/directional/east, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "DR" = ( /turf/open/floor/mineral/titanium/tiled/purple, /area/ruin/space/has_grav/powered/hilbertresearchfacility) @@ -1353,13 +1368,6 @@ /obj/item/paper_bin, /turf/open/floor/wood, /area/ruin/space/has_grav/powered/hilbertresearchfacility) -"Fy" = ( -/obj/machinery/door/window/survival_pod/left/directional/west, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 9 - }, -/turf/open/floor/mineral/titanium/tiled/purple, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "FB" = ( /obj/structure/table/wood, /obj/item/lighter, @@ -1386,15 +1394,6 @@ /obj/structure/table/reinforced, /turf/open/floor/wood, /area/ruin/space/has_grav/powered/hilbertresearchfacility) -"Gr" = ( -/obj/machinery/door/window/survival_pod/left/directional/west, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/slime/hilbert, -/turf/open/floor/mineral/titanium/tiled/purple, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "Gs" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 8 @@ -1590,14 +1589,6 @@ /obj/item/flashlight/lamp/green, /turf/open/floor/carpet/black, /area/ruin/space/has_grav/powered/hilbertresearchfacility) -"JW" = ( -/obj/effect/decal/remains/human, -/obj/machinery/door/window/survival_pod/left/directional/east, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 6 - }, -/turf/open/floor/mineral/titanium/tiled/purple, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "Kd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/barricade/wooden, @@ -1723,6 +1714,14 @@ /obj/structure/girder, /turf/open/floor/plating, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"NJ" = ( +/obj/effect/decal/remains/human, +/obj/machinery/door/window/survival_pod/left/directional/east, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 6 + }, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "NU" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -1991,14 +1990,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/titanium/tiled/purple, /area/ruin/space/has_grav/powered/hilbertresearchfacility) -"SL" = ( -/obj/machinery/door/window/survival_pod/left/directional/east, -/obj/effect/turf_decal/siding/wideplating_new/dark{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium/tiled/purple, -/area/ruin/space/has_grav/powered/hilbertresearchfacility) "SR" = ( /obj/structure/railing{ dir = 4 @@ -2166,6 +2157,15 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, /area/ruin/space/has_grav/powered/hilbertresearchfacility) +"WC" = ( +/obj/machinery/door/window/survival_pod/left/directional/west, +/obj/effect/turf_decal/siding/wideplating_new/dark{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/slime/hilbert, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/ruin/space/has_grav/powered/hilbertresearchfacility) "WI" = ( /obj/structure/table/wood, /obj/item/food/cornchips/blue, @@ -3139,7 +3139,7 @@ Bo Bo Bo Bo -nv +bi sz Bo Dk @@ -3178,7 +3178,7 @@ Dk Dk Dk Bo -mz +vz te Bo Dk @@ -3218,7 +3218,7 @@ Dk Dk Bo Ok -nK +th Bo Dk Dk @@ -3581,11 +3581,11 @@ Bo Bk Bk Bo -nY -JW +hB +NJ Bo -SL -JW +DO +NJ Bo Dk Dk @@ -3893,11 +3893,11 @@ Bo Dk Dk Bo -qj -CB +yK +us Bo -Fy -Gr +BF +WC Bo Dk Dk diff --git a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm index f8904976f725f..c925d017ad3a3 100644 --- a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm +++ b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm @@ -557,6 +557,15 @@ /obj/item/kirbyplants/random, /turf/open/floor/mineral/titanium/tiled/white, /area/ruin/space/has_grav/infested_frigate) +"hX" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/icecream_vat{ + desc = "Waffle Corp. actually ordered these guys to steal one of these just to be sure." + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/infested_frigate) "ie" = ( /obj/structure/showcase/machinery{ icon_state = "autolathe"; @@ -681,7 +690,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/infested_frigate) "kw" = ( -/obj/machinery/vending/boozeomat/syndicate_access, +/obj/machinery/vending/boozeomat/syndicate, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/infested_frigate) "kS" = ( @@ -2475,15 +2484,6 @@ /obj/machinery/computer/operating, /turf/open/floor/pod/dark, /area/ruin/space/has_grav/infested_frigate) -"NW" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/icecream_vat{ - desc = "Waffle Corp. actually ordered these guys to steal one of these just to be sure." - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/infested_frigate) "NX" = ( /obj/structure/table/glass, /obj/effect/decal/cleanable/glass, @@ -3373,7 +3373,7 @@ fl wP EQ wP -NW +hX SM ME KT diff --git a/_maps/RandomRuins/SpaceRuins/interdyne.dmm b/_maps/RandomRuins/SpaceRuins/interdyne.dmm index cf8c7f8c0d408..9c802b0be434c 100644 --- a/_maps/RandomRuins/SpaceRuins/interdyne.dmm +++ b/_maps/RandomRuins/SpaceRuins/interdyne.dmm @@ -140,7 +140,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/interdyne) "fS" = ( -/obj/machinery/vending/medical/syndicate_access, +/obj/machinery/vending/medical/syndicate, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/interdyne) "ga" = ( diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index ec4126fafe58f..0c3c231b5f225 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -45,15 +45,6 @@ "ak" = ( /turf/closed/wall/rust, /area/ruin/space/ancientstation/charlie/bridge) -"al" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/monitor, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "ao" = ( /obj/structure/alien/weeds, /mob/living/basic/alien/drone, @@ -341,20 +332,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/mining) -"bH" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ruin/space/ancientstation/charlie/engie) "bJ" = ( /turf/closed/wall, /area/ruin/space/ancientstation/beta/atmos) @@ -431,6 +408,18 @@ /obj/structure/sign/poster/official/science, /turf/closed/wall/rust, /area/ruin/space/ancientstation/delta/hall) +"cd" = ( +/obj/machinery/door/airlock/command{ + name = "Beta Station Access" + }, +/obj/machinery/door/poddoor{ + id = "ancient" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hall) "ce" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -730,26 +719,20 @@ /obj/structure/alien/weeds, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/hall) -"dg" = ( -/obj/machinery/door/airlock/science{ - name = "Biolab" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/closed, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/away/general, -/turf/open/floor/iron/white/textured_large, -/area/ruin/space/ancientstation/delta/biolab) "dh" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"dj" = ( +/obj/machinery/door/airlock/external/glass/ruin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/beta/mining) "dk" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -917,14 +900,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"dW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light_switch/directional/west{ - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine/airless, -/area/ruin/space/ancientstation/beta/supermatter) "dX" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -981,11 +956,28 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) +"el" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) "em" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) +"en" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) "eo" = ( /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, @@ -1292,12 +1284,6 @@ /obj/machinery/light/small/broken/directional/east, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) -"fy" = ( -/obj/machinery/atmospherics/components/unary/airlock_pump{ - dir = 1 - }, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/ancientstation/beta/supermatter) "fE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -1659,9 +1645,7 @@ /area/ruin/space/ancientstation/charlie/hall) "hr" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/dinnerware{ - onstation = 0 - }, +/obj/machinery/vending/dinnerware, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) "ht" = ( @@ -1718,6 +1702,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) +"hJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) "hM" = ( /obj/structure/sign/departments/science, /turf/closed/wall, @@ -1739,15 +1728,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) -"hR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine/airless, -/area/ruin/space/ancientstation/beta/supermatter) "hS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/purple/anticorner/contrasted, @@ -1799,6 +1779,27 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) +"ib" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/command{ + name = "Delta Station Access" + }, +/obj/machinery/door/poddoor{ + id = "ancient" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hall) "ic" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/transit_tube_pod{ @@ -2040,14 +2041,6 @@ }, /turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/hall) -"iS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine/airless, -/area/ruin/space/ancientstation/beta/supermatter) "iU" = ( /obj/machinery/power/terminal{ dir = 4 @@ -2076,6 +2069,10 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) +"iY" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/charlie/engie) "jc" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -2166,24 +2163,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) -"jy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) -"jz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/machinery/firealarm/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "jB" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -2387,9 +2366,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/coffee{ - onstation = 0 - }, +/obj/machinery/vending/coffee, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) "ku" = ( @@ -2763,9 +2740,7 @@ /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/hall) "lU" = ( -/obj/machinery/vending/hydronutrients{ - onstation = 0 - }, +/obj/machinery/vending/hydronutrients, /obj/effect/turf_decal/tile/green/anticorner/contrasted, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) @@ -2904,6 +2879,19 @@ }, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/mining) +"mB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/mining) "mC" = ( /turf/closed/wall/rust, /area/ruin/space/ancientstation/charlie/storage) @@ -2961,6 +2949,11 @@ /obj/machinery/mineral/processing_unit_console, /turf/closed/wall, /area/ruin/space/ancientstation/beta/mining) +"mP" = ( +/obj/machinery/door/airlock/external/glass/ruin, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/ancientstation/beta/supermatter) "mR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -3034,6 +3027,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/hall) +"nb" = ( +/obj/machinery/door/airlock/command{ + name = "Beta Station Access" + }, +/obj/machinery/door/poddoor{ + id = "ancient" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hall) "nc" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -3043,6 +3055,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/hall) +"nd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/command{ + name = "Delta Station Access" + }, +/obj/machinery/door/poddoor{ + id = "ancient" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hall) "nf" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/east, @@ -3474,6 +3506,15 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) +"pI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/apc_control/away, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) "pK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -3581,20 +3622,20 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"qx" = ( +/obj/machinery/door/airlock/external/glass/ruin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/ancientstation/beta/supermatter) "qF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2{ dir = 4 }, /turf/closed/wall, /area/ruin/space/ancientstation/beta/atmos) -"qH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/airlock_pump{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/charlie/engie) "qK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/portable_atmospherics/scrubber, @@ -3616,7 +3657,7 @@ /obj/effect/mapping_helpers/airalarm/away_general_access, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"qT" = ( +"qQ" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external/glass/ruin, @@ -3709,6 +3750,10 @@ /obj/effect/mapping_helpers/apc/away_general_access, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) +"rL" = ( +/obj/machinery/atmospherics/components/unary/airlock_pump, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/beta/mining) "rN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -3774,17 +3819,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) -"se" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, +"rY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 5 + dir = 10 }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/ancientstation/charlie/engie) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/airless, +/area/ruin/space/ancientstation/beta/supermatter) "si" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, @@ -3852,15 +3893,6 @@ "sA" = ( /turf/closed/wall, /area/ruin/space/ancientstation/beta/gravity) -"sF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/catwalk_floor, -/area/ruin/space/ancientstation/beta/mining) "sJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -3935,16 +3967,6 @@ }, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) -"tg" = ( -/obj/machinery/door/airlock/external/glass/ruin, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/beta/mining) "tm" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/mapping_helpers/damaged_window, @@ -3954,15 +3976,7 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/hall) -"tw" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Air to Distro" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/ancientstation/charlie/hall) -"tz" = ( +"tz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ @@ -4054,11 +4068,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) -"ue" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "uj" = ( /turf/closed/wall/r_wall, /area/ruin/space/ancientstation/delta/proto) @@ -4104,10 +4113,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) -"uq" = ( -/obj/machinery/light/small/red/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/charlie/engie) "ur" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/suit_storage_unit/void_old/jetpack, @@ -4261,6 +4266,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/hall) +"vs" = ( +/obj/machinery/light/small/red/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/charlie/engie) "vv" = ( /obj/machinery/light/small/directional/south, /obj/structure/closet/crate, @@ -4319,14 +4328,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) -"vQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/official/safety_internals/directional/north, -/obj/machinery/atmospherics/components/unary/airlock_pump{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/hall) "vS" = ( /obj/structure/table/glass, /obj/item/reagent_containers/cup/bottle/silver{ @@ -4476,10 +4477,6 @@ }, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) -"wI" = ( -/obj/machinery/atmospherics/components/unary/airlock_pump, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/beta/mining) "wJ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/computer/old{ @@ -4524,6 +4521,14 @@ /obj/machinery/light/broken/directional/north, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"wR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/airlock_pump{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/charlie/engie) "wS" = ( /obj/item/stack/rods, /obj/machinery/atmospherics/components/unary/vent_scrubber{ @@ -4615,14 +4620,6 @@ }, /turf/open/floor/engine, /area/ruin/space/ancientstation/delta/biolab) -"xS" = ( -/obj/machinery/door/airlock/external/glass/ruin, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/ancientstation/beta/supermatter) "xT" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -4638,15 +4635,6 @@ /obj/item/reagent_containers/condiment/enzyme, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) -"xX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "xY" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/effect/turf_decal/stripes/line, @@ -4666,6 +4654,14 @@ /obj/structure/table, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) +"yk" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Air to Distro" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/hall) "yq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -4751,6 +4747,22 @@ }, /turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/medbay) +"zj" = ( +/obj/machinery/door/airlock/science{ + name = "Biolab" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/closed, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/ancientstation/delta/biolab) "zm" = ( /obj/machinery/door/window/brigdoor/right/directional/west{ name = "Plasma Canister Storage" @@ -4863,27 +4875,24 @@ }, /turf/template_noop, /area/space/nearstation) -"zU" = ( +"zX" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/command{ - name = "Delta Station Access" - }, -/obj/machinery/door/poddoor{ - id = "ancient" +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/east, /obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) +"zZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/access/all/away/general, +/obj/structure/cable, /turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hall) +/area/ruin/space/ancientstation/charlie/engie) "Aa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -5009,16 +5018,6 @@ /obj/structure/tank_dispenser/plasma, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) -"AO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/sign/warning/vacuum/directional/west, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "AT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5119,6 +5118,15 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/hall) +"By" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/monitor, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) "Bz" = ( /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/hall) @@ -5157,6 +5165,11 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) +"BP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine/airless, +/area/ruin/space/ancientstation/beta/supermatter) "BR" = ( /obj/machinery/shower/directional/west{ has_water_reclaimer = 0 @@ -5176,13 +5189,6 @@ /obj/item/ammo_box/strilka310, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) -"BT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor/airless, -/area/ruin/space/ancientstation/beta/supermatter) "Cc" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -5530,6 +5536,14 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"EI" = ( +/obj/effect/decal/cleanable/dirt, +/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/iron, +/area/ruin/space/ancientstation/delta/hall) "EP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -5649,18 +5663,6 @@ /obj/item/stack/rods, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) -"FF" = ( -/obj/machinery/door/airlock/command{ - name = "Beta Station Access" - }, -/obj/machinery/door/poddoor{ - id = "ancient" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/away/general, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hall) "FJ" = ( /obj/structure/alien/weeds, /obj/machinery/light/small/broken/directional/west, @@ -5799,6 +5801,16 @@ /obj/structure/closet/firecloset/full, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"Gt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/engie) "Gv" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -5820,6 +5832,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"GJ" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine/airless, +/area/ruin/space/ancientstation/beta/supermatter) "GK" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Storage Room" @@ -5899,15 +5919,6 @@ initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15" }, /area/ruin/space/ancientstation/delta/hall) -"Ht" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/machinery/computer/apc_control/away, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "Hw" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -5943,11 +5954,6 @@ /obj/machinery/door/firedoor/closed, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/hall) -"HF" = ( -/obj/machinery/door/airlock/external/glass/ruin, -/obj/effect/mapping_helpers/airlock/access/all/away/general, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/ancientstation/beta/supermatter) "HG" = ( /obj/structure/grille/broken, /turf/open/floor/plating/airless, @@ -6044,6 +6050,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/rust, /area/ruin/space/ancientstation/delta/hall) +"Im" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light_switch/directional/west{ + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/engine/airless, +/area/ruin/space/ancientstation/beta/supermatter) "Ip" = ( /obj/effect/decal/cleanable/dirt, /obj/item/kitchen/fork{ @@ -6335,6 +6349,12 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"JR" = ( +/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/catwalk_floor, +/area/ruin/space/ancientstation/delta/hall) "JT" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -6444,11 +6464,6 @@ /obj/item/storage/backpack/duffelbag/sec, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) -"Kt" = ( -/obj/machinery/door/airlock/external/glass/ruin, -/obj/effect/mapping_helpers/airlock/access/all/away/general, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/ancientstation/delta/hall) "Ku" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -6538,12 +6553,6 @@ /obj/item/paper/guides/jobs/engi/gravity_gen, /turf/open/floor/iron/diagonal, /area/ruin/space/ancientstation/beta/gravity) -"KW" = ( -/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/catwalk_floor, -/area/ruin/space/ancientstation/delta/hall) "KX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6553,12 +6562,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/hall) -"Lb" = ( -/obj/machinery/door/airlock/external/glass/ruin, -/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/ancientstation/delta/hall) "Lc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -6583,22 +6586,21 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"Lg" = ( +"Lh" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/engine/o2, +/area/ruin/space/ancientstation/beta/atmos) +"Li" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/obj/machinery/door/airlock/external/glass/ruin, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 6 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 5 }, -/turf/open/floor/iron/dark, +/turf/open/floor/catwalk_floor, /area/ruin/space/ancientstation/charlie/engie) -"Lh" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/engine/o2, -/area/ruin/space/ancientstation/beta/atmos) "Lm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6712,26 +6714,6 @@ /obj/effect/decal/cleanable/generic, /turf/open/floor/iron/white/textured_large, /area/ruin/space/ancientstation/delta/biolab) -"LO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/command{ - name = "Delta Station Access" - }, -/obj/machinery/door/poddoor{ - id = "ancient" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/away/general, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hall) "LS" = ( /obj/structure/table, /obj/item/stack/sheet/glass, @@ -6801,11 +6783,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) -"Mh" = ( -/obj/machinery/door/airlock/external/glass/ruin, -/obj/effect/mapping_helpers/airlock/access/all/away/general, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/ancientstation/beta/mining) "Mr" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -6927,6 +6904,14 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/supermatter) +"Ni" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/safety_internals/directional/north, +/obj/machinery/atmospherics/components/unary/airlock_pump{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/hall) "Np" = ( /obj/effect/decal/cleanable/blood/xtracks{ dir = 10 @@ -6941,16 +6926,6 @@ /obj/structure/window/plasma/spawner/directional/west, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) -"Nu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ruin/space/ancientstation/charlie/engie) "Nx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -6980,6 +6955,12 @@ /obj/structure/table_frame, /turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/medbay) +"NC" = ( +/obj/machinery/atmospherics/components/unary/airlock_pump{ + dir = 1 + }, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/ancientstation/beta/supermatter) "ND" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/portable_atmospherics/pump, @@ -7038,25 +7019,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/textured_half, /area/ruin/space/ancientstation/beta/supermatter) -"NV" = ( -/obj/machinery/door/airlock/command{ - name = "Beta Station Access" - }, -/obj/machinery/door/poddoor{ - id = "ancient" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/away/general, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hall) "NW" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor{ @@ -7239,11 +7201,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) -"Pa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/engine/airless, -/area/ruin/space/ancientstation/beta/supermatter) "Pd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -7275,6 +7232,11 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) +"Po" = ( +/obj/machinery/door/airlock/external/glass/ruin, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/ancientstation/delta/hall) "Pq" = ( /obj/machinery/door/airlock/science, /obj/effect/decal/cleanable/dirt, @@ -7506,23 +7468,23 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) -"QW" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/charlie/engie) "QZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) -"Re" = ( +"Rd" = ( /obj/effect/decal/cleanable/dirt, /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/iron, -/area/ruin/space/ancientstation/delta/hall) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/engie) "Rf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -7548,14 +7510,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"Rs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "Rv" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -7783,6 +7737,20 @@ "Td" = ( /turf/closed/mineral/random, /area/ruin/space/ancientstation/beta/hall) +"Tf" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/engie) "Tg" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -7816,14 +7784,6 @@ /obj/structure/sign/warning/electric_shock/directional/south, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/storage) -"Tn" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine/airless, -/area/ruin/space/ancientstation/beta/supermatter) "Tq" = ( /obj/structure/alien/weeds, /obj/machinery/light/small/broken/directional/east, @@ -7950,19 +7910,12 @@ /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, /area/ruin/space/solars/ancientstation/charlie/solars) -"Uc" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/beta/mining) +"Ui" = ( +/obj/machinery/door/airlock/external/glass/ruin, +/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/ancientstation/delta/hall) "Uj" = ( /obj/structure/girder, /turf/closed/mineral/random, @@ -8002,6 +7955,15 @@ /obj/item/soap/nanotrasen, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/charlie/hall) +"Us" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/catwalk_floor, +/area/ruin/space/ancientstation/beta/mining) "Uu" = ( /turf/closed/mineral/plasma, /area/space/nearstation) @@ -8027,6 +7989,15 @@ "UJ" = ( /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) +"UN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine/airless, +/area/ruin/space/ancientstation/beta/supermatter) "UP" = ( /turf/closed/mineral/random, /area/space/nearstation) @@ -8094,18 +8065,6 @@ /obj/machinery/griddle, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) -"Vq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ruin/space/ancientstation/charlie/engie) "Vw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -8160,6 +8119,11 @@ }, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) +"VU" = ( +/obj/machinery/door/airlock/external/glass/ruin, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/dark/airless, +/area/ruin/space/ancientstation/beta/mining) "VV" = ( /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) @@ -8167,6 +8131,18 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/ruin/space/ancientstation/delta/biolab) +"Wa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/door/airlock/external/glass/ruin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/charlie/engie) "Wd" = ( /obj/effect/decal/cleanable/blood/xtracks{ dir = 5 @@ -8182,6 +8158,16 @@ /obj/structure/lattice/catwalk, /turf/template_noop, /area/space/nearstation) +"Wn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum/directional/west, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) "Wp" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -8309,17 +8295,6 @@ /obj/effect/mapping_helpers/apc/away_general_access, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) -"Xr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ruin/space/ancientstation/charlie/engie) "Xs" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/transit_tube/station/reverse/flipped{ @@ -8370,6 +8345,17 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"XJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/engie) "XK" = ( /obj/machinery/door/airlock/atmos/glass{ name = "Station Atmospherics" @@ -8722,6 +8708,14 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"ZN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine/airless, +/area/ruin/space/ancientstation/beta/supermatter) "ZP" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -10588,9 +10582,9 @@ Hj rJ uw wn -Pa -dW -hR +BP +Im +UN SK Jg Jg @@ -10656,7 +10650,7 @@ Hj vY Sk wo -Tn +GJ Vl cx cx @@ -10722,11 +10716,11 @@ iv Qi ZD Hj -iS -xS -BT -fy -HF +ZN +qx +rY +NC +mP Jg aa aa @@ -11292,11 +11286,11 @@ aa aa aa aa -Mh -wI -sF -tg -Uc +VU +rL +Us +dj +mB cm cm gh @@ -11508,7 +11502,7 @@ aa aa eI Ma -qT +qQ eI aa aa @@ -11573,8 +11567,8 @@ aa aa aa Ma -QW -qH +iY +wR Ma aa aa @@ -11639,8 +11633,8 @@ aa aa aa Ma -uq -se +vs +Li Ma aa aa @@ -11706,7 +11700,7 @@ Ma eI dl eI -Lg +Wa eI Ma eI @@ -11768,11 +11762,11 @@ mS jE aa Ma -al +By YT fc -AO -bH +Wn +Tf YM hl lo @@ -11834,11 +11828,11 @@ mS jE dl eI -Ht +pI ju hm Yi -Nu +Gt Yi hm em @@ -11904,7 +11898,7 @@ kJ em fe fE -Vq +Rd fE fe em @@ -11966,11 +11960,11 @@ mY kQ AX em -ue +hJ eM pn fF -Xr +XJ wL QZ hP @@ -12032,10 +12026,10 @@ mY kQ lJ oP -Rs -jy -jz -xX +en +zZ +zX +el kJ WA ho @@ -12093,8 +12087,8 @@ aT hi hi hi -FF -NV +cd +nb hi eI eI @@ -12248,7 +12242,7 @@ JJ XZ Ga HL -tw +yk hT aT aa @@ -13150,7 +13144,7 @@ aT aT aT bX -LO +nd bX eJ eJ @@ -13166,7 +13160,7 @@ eJ eJ eJ hM -zU +ib bX aT hi @@ -13884,7 +13878,7 @@ zL UP bE bE -Kt +Po bE bE hF @@ -13950,7 +13944,7 @@ Fo Hr cs Gz -vQ +Ni bE Ac TV @@ -14016,7 +14010,7 @@ LH Bu Ej Gz -KW +JR Gz Ac Ik @@ -14082,7 +14076,7 @@ XD Gz Gz bE -Lb +Ui Gz bE Gz @@ -14148,7 +14142,7 @@ MS EE cD Dg -Re +EI yq cD TA @@ -15204,7 +15198,7 @@ NG GX GX yr -dg +zj rp rp rp diff --git a/_maps/RandomRuins/SpaceRuins/phonebooth.dmm b/_maps/RandomRuins/SpaceRuins/phonebooth.dmm index 2eb0698ebbfd5..1cf0f64e7ff0a 100644 --- a/_maps/RandomRuins/SpaceRuins/phonebooth.dmm +++ b/_maps/RandomRuins/SpaceRuins/phonebooth.dmm @@ -13,7 +13,7 @@ /area/ruin/space/has_grav/powered/space_phone_booth) "k" = ( /obj/machinery/vending/snack/green{ - onstation_override = 1 + all_products_free = 1 }, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating/airless, @@ -66,7 +66,7 @@ /area/ruin/space/has_grav/powered/space_phone_booth) "W" = ( /obj/machinery/vending/cigarette{ - onstation_override = 1 + all_products_free = 0 }, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating/airless, diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm index baabb21c0a9c3..4a0d1475cab7a 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm @@ -532,12 +532,6 @@ }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/bridge) -"ih" = ( -/obj/structure/safe, -/obj/item/mod/module/jetpack, -/obj/item/mod/control/pre_equipped/standard, -/turf/open/floor/mineral/plastitanium, -/area/ruin/space/has_grav/cargodise_freighter/vault) "is" = ( /turf/open/floor/plating, /area/ruin/space/has_grav/cargodise_freighter/utility) @@ -1588,6 +1582,17 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark/smooth_half, /area/ruin/space/has_grav/cargodise_freighter/primaryhall) +"Ai" = ( +/obj/structure/closet/crate/secure/engineering, +/obj/item/storage/toolbox/electrical, +/obj/item/storage/toolbox/electrical, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/construction/rcd/loaded, +/obj/item/pipe_dispenser, +/obj/item/construction/plumbing/engineering, +/turf/open/floor/plating, +/area/ruin/space/has_grav/cargodise_freighter/utility) "Aj" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -2145,7 +2150,7 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/ruin/space/has_grav/cargodise_freighter/primaryhall) "Iy" = ( -/obj/machinery/vending/medical/syndicate_access/cybersun{ +/obj/machinery/vending/medical/syndicate/cybersun{ req_access = null }, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ @@ -2496,6 +2501,12 @@ }, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/cargodise_freighter/kitchen) +"NQ" = ( +/obj/structure/safe, +/obj/item/mod/module/jetpack, +/obj/item/mod/control/pre_equipped/standard, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/cargodise_freighter/vault) "NV" = ( /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/space/has_grav/cargodise_freighter/quarters) @@ -2545,7 +2556,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/mining) "Ox" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "Oy" = ( @@ -3112,17 +3123,6 @@ dir = 4 }, /area/ruin/space/has_grav/cargodise_freighter/bridge) -"XQ" = ( -/obj/structure/closet/crate/secure/engineering, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/toolbox/electrical, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/construction/rcd/loaded, -/obj/item/pipe_dispenser, -/obj/item/construction/plumbing/engineering, -/turf/open/floor/plating, -/area/ruin/space/has_grav/cargodise_freighter/utility) "XT" = ( /turf/open/floor/wood, /area/ruin/space/has_grav/cargodise_freighter/quarters) @@ -3649,7 +3649,7 @@ pm dp SZ VL -XQ +Ai is Mu NE @@ -4994,7 +4994,7 @@ Gh Gh Gh vh -ih +NQ Eo dT mL diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm index 9573a9a60b977..828abf3212d2a 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm @@ -2498,7 +2498,7 @@ /obj/effect/turf_decal/siding/wideplating/dark{ dir = 1 }, -/obj/machinery/vending/medical/syndicate_access/cybersun{ +/obj/machinery/vending/medical/syndicate/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 ++" }, @@ -5854,7 +5854,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/skyrat/interdynefob/service/dorms/fitness) "AZ" = ( -/obj/machinery/vending/boozeomat/syndicate_access, +/obj/machinery/vending/boozeomat/syndicate, /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/space/has_grav/skyrat/interdynefob/service/diner) "Bb" = ( diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm index b0770c8277ab6..88f83ea5e6726 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/piratefort.dmm @@ -130,7 +130,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/powered) "ff" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/powered) "fl" = ( diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/wreckedhomestead.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/wreckedhomestead.dmm index 9832ad639cc4c..680ee3a654e7b 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/wreckedhomestead.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/wreckedhomestead.dmm @@ -19,12 +19,6 @@ /obj/item/stack/sheet/glass/fifty, /turf/open/floor/iron/airless, /area/ruin/unpowered) -"cw" = ( -/obj/machinery/door/airlock/research/glass, -/obj/effect/mapping_helpers/airlock/welded, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/airless, -/area/ruin/unpowered) "dL" = ( /obj/structure/table/optable, /obj/effect/mob_spawn/corpse/human/charredskeleton, @@ -71,12 +65,6 @@ /obj/structure/girder, /turf/open/floor/plating/airless, /area/ruin/unpowered) -"lN" = ( -/obj/machinery/door/window/brigdoor/left/directional/west, -/obj/machinery/light/directional/east, -/obj/effect/mob_spawn/corpse/human/skeleton, -/turf/open/floor/iron/dark/airless, -/area/ruin/unpowered) "ma" = ( /obj/structure/frame/computer, /obj/effect/mapping_helpers/burnt_floor, @@ -195,6 +183,12 @@ "Di" = ( /turf/open/floor/engine/airless, /area/ruin/unpowered) +"DU" = ( +/obj/machinery/door/window/brigdoor/left/directional/west, +/obj/machinery/light/directional/east, +/obj/effect/mob_spawn/corpse/human/skeleton, +/turf/open/floor/iron/dark/airless, +/area/ruin/unpowered) "Fc" = ( /obj/machinery/light/directional/south, /obj/effect/mapping_helpers/burnt_floor, @@ -257,6 +251,13 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/ruin/unpowered) +"RO" = ( +/obj/machinery/door/airlock/research/glass{ + welded = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/airless, +/area/ruin/unpowered) "Sl" = ( /obj/machinery/atmospherics/pipe/smart/manifold{ dir = 1 @@ -1140,7 +1141,7 @@ wY Bf Bf Bf -cw +RO Bf Bf sx @@ -1948,7 +1949,7 @@ wY Bf Wp on -lN +DU Wp sx sr diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm index 3dea99fc020b7..03999ed12451a 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel_skyrat.dmm @@ -1069,6 +1069,14 @@ /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, +/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, @@ -1149,6 +1157,22 @@ }, /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, +/turf/open/floor/carpet/black, +/area/ruin/space/has_grav/hotel) "gv" = ( /obj/effect/mob_spawn/ghost_role/human/hotel_staff, /obj/machinery/firealarm{ @@ -2368,22 +2392,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/sauna) -"ld" = ( -/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, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) "le" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/wood, @@ -2457,7 +2465,7 @@ pixel_y = 24 }, /obj/effect/turf_decal/siding/dark, -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /turf/open/floor/carpet/black, /area/ruin/space/has_grav/hotel) "lA" = ( @@ -2692,6 +2700,15 @@ /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, @@ -3193,15 +3210,6 @@ }, /turf/open/floor/iron/white, /area/ruin/space/has_grav/hotel/pool) -"py" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/table, -/obj/item/reagent_containers/condiment/enzyme, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/hotel/bar) "pA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -4113,14 +4121,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/hotel/power) -"uY" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/table/glass, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/hotel) "va" = ( /obj/structure/table/wood/fancy/green, /obj/item/reagent_containers/cup/glass/drinkingglass{ @@ -4441,21 +4441,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/ruin/space/has_grav/hotel/custodial) -"xj" = ( -/obj/structure/table/wood/fancy/green, -/obj/item/flashlight/lamp/green{ - pixel_x = 7; - pixel_y = 14 - }, -/obj/item/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) "xl" = ( /obj/structure/sign/warning/vacuum/directional/south, /obj/structure/cable, @@ -4814,13 +4799,6 @@ }, /turf/open/floor/plating, /area/ruin/space/has_grav/hotel) -"zN" = ( -/obj/item/kirbyplants/random/dead, -/obj/effect/turf_decal/siding/purple{ - dir = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/hotel/custodial) "zP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 @@ -5989,6 +5967,15 @@ }, /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, +/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 @@ -6722,6 +6709,16 @@ }, /turf/open/floor/carpet/black, /area/ruin/space/has_grav/hotel) +"MJ" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/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{ @@ -7057,16 +7054,6 @@ /obj/machinery/light, /turf/open/floor/carpet/black, /area/ruin/space/has_grav/hotel/bar) -"OO" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/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) "OQ" = ( /obj/effect/turf_decal/siding/dark{ dir = 10 @@ -7161,6 +7148,18 @@ /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, +/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, @@ -8233,24 +8232,27 @@ /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/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) -"Xl" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/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) "Xm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 @@ -9277,7 +9279,7 @@ fi Sb fh vI -py +HD Rr Cc hw @@ -9717,7 +9719,7 @@ md hK cZ cZ -zN +mE md lr SF @@ -10512,7 +10514,7 @@ aa (27,1,1) = {" xH by -xj +Xi sj PW av @@ -11382,7 +11384,7 @@ am Yu so so -ld +gt Ci Sg lD @@ -11452,7 +11454,7 @@ am DL so so -OO +MJ ol us Jb @@ -11522,7 +11524,7 @@ am hL so so -uY +ge Pw Jq Gd @@ -11592,7 +11594,7 @@ eG eG il Fm -Xl +Pr BC gs gs diff --git a/_maps/RandomRuins/SpaceRuins/spinwardsmoothies.dmm b/_maps/RandomRuins/SpaceRuins/spinwardsmoothies.dmm index 91f7771f0ea69..1ac14090b39ce 100644 --- a/_maps/RandomRuins/SpaceRuins/spinwardsmoothies.dmm +++ b/_maps/RandomRuins/SpaceRuins/spinwardsmoothies.dmm @@ -44,9 +44,7 @@ }, /area/ruin/space/has_grav/spinwardsmoothies) "ti" = ( -/obj/machinery/vending/boozeomat/all_access{ - onstation = 0 - }, +/obj/machinery/vending/boozeomat, /turf/open/floor/wood/tile, /area/ruin/space/has_grav/spinwardsmoothies) "wv" = ( diff --git a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm index fe750bec85339..f31929b70a4e2 100644 --- a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm +++ b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm @@ -85,6 +85,13 @@ }, /turf/open/floor/iron/white, /area/ruin/space/has_grav/the_outlet/researchrooms) +"cL" = ( +/obj/effect/rune/apocalypse{ + req_cultists = 999 + }, +/obj/structure/destructible/cult/pants_altar, +/turf/open/floor/cult, +/area/ruin/space/has_grav/the_outlet/cultinfluence) "cZ" = ( /obj/structure/kitchenspike, /obj/effect/decal/cleanable/blood/gibs{ @@ -548,6 +555,18 @@ /obj/item/clothing/suit/jacket/straight_jacket, /turf/open/floor/iron/freezer, /area/ruin/space/has_grav/the_outlet/researchrooms) +"oI" = ( +/obj/structure/rack, +/obj/item/clothing/head/cowboy/brown, +/obj/item/clothing/shoes/cowboy, +/obj/item/clothing/under/costume/dutch, +/obj/item/clothing/suit/costume/poncho, +/obj/item/cigarette/cigar, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/eighties, +/area/ruin/space/has_grav/the_outlet/storefront) "ps" = ( /obj/structure/rack, /obj/item/clothing/under/misc/bouncer, @@ -1017,18 +1036,6 @@ }, /turf/open/floor/iron/white, /area/ruin/space/has_grav/the_outlet/cultinfluence) -"zk" = ( -/obj/structure/rack, -/obj/item/clothing/head/cowboy/brown, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/under/costume/dutch, -/obj/item/clothing/suit/costume/poncho, -/obj/item/cigarette/cigar, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/eighties, -/area/ruin/space/has_grav/the_outlet/storefront) "zm" = ( /obj/effect/spawner/random/vending/colavend, /turf/open/floor/eighties, @@ -1682,13 +1689,6 @@ /obj/effect/decal/cleanable/blood/tracks, /turf/open/floor/iron/white, /area/ruin/space/has_grav/the_outlet/researchrooms) -"Ob" = ( -/obj/effect/rune/apocalypse{ - req_cultists = 999 - }, -/obj/structure/destructible/cult/pants_altar, -/turf/open/floor/cult, -/area/ruin/space/has_grav/the_outlet/cultinfluence) "Od" = ( /obj/effect/baseturf_helper/asteroid/airless, /turf/open/floor/cult, @@ -3430,7 +3430,7 @@ HV xI TM nq -zk +oI HH HH Kp @@ -3635,7 +3635,7 @@ qy wl RO PE -Ob +cL ML RO zc diff --git a/_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm b/_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm index 602aa1a273b9d..12bc608bda910 100644 --- a/_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm +++ b/_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm @@ -1331,9 +1331,7 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 }, -/obj/machinery/vending/medical{ - onstation = 0 - }, +/obj/machinery/vending/medical, /turf/open/floor/iron/showroomfloor/airless, /area/ruin/space/has_grav/whiteship/box) "PV" = ( diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm index bfbc5a18c56a1..0c30bb3c51d51 100644 --- a/_maps/RandomZLevels/SnowCabin.dmm +++ b/_maps/RandomZLevels/SnowCabin.dmm @@ -4122,7 +4122,7 @@ pixel_x = -1; pixel_y = 10 }, -/obj/item/gun/ballistic/shotgun/toy/unrestricted{ +/obj/item/gun/ballistic/shotgun/toy{ pixel_y = -2 }, /obj/effect/light_emitter{ diff --git a/_maps/RandomZLevels/TheBeach.dmm b/_maps/RandomZLevels/TheBeach.dmm index 1abeb5c67e643..d179a7dc5148c 100644 --- a/_maps/RandomZLevels/TheBeach.dmm +++ b/_maps/RandomZLevels/TheBeach.dmm @@ -102,6 +102,17 @@ "bi" = ( /turf/open/floor/iron/white/textured_large, /area/awaymission/beach) +"bo" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/turf_decal/tile/dark/half{ + pixel_y = -1; + pixel_x = 5; + dir = 8 + }, +/turf/open/water/beach, +/area/awaymission/beach) "bx" = ( /obj/effect/turf_decal/sand, /obj/machinery/door/airlock/wood{ @@ -355,10 +366,6 @@ }, /turf/open/floor/iron/white/textured_large, /area/awaymission/beach) -"fc" = ( -/obj/item/broken_bottle, -/turf/open/misc/beach/sand, -/area/awaymission/beach) "fd" = ( /obj/structure/table/bronze, /obj/structure/desk_bell{ @@ -499,6 +506,10 @@ }, /turf/closed/wall/mineral/wood, /area/awaymission/beach) +"gq" = ( +/obj/item/broken_bottle, +/turf/open/misc/beach/sand, +/area/awaymission/beach) "gw" = ( /obj/item/stack/sheet/mineral/sandstone{ pixel_x = -8 @@ -727,7 +738,7 @@ /turf/open/floor/iron/white/textured_large, /area/awaymission/beach) "jF" = ( -/obj/machinery/vending/boozeomat/all_access{ +/obj/machinery/vending/boozeomat{ 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." }, /turf/open/floor/wood/large, @@ -888,17 +899,6 @@ /obj/structure/table/wood, /turf/open/floor/wood/large, /area/awaymission/beach) -"lk" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/effect/turf_decal/tile/dark/half{ - pixel_y = -1; - pixel_x = 5; - dir = 8 - }, -/turf/open/water/beach, -/area/awaymission/beach) "ll" = ( /obj/machinery/door/airlock/wood{ name = "Room 11"; @@ -1072,16 +1072,6 @@ /obj/structure/table/glass, /turf/open/floor/wood/large, /area/awaymission/beach) -"nu" = ( -/obj/structure/sign/directions/dorms/directional/north{ - pixel_y = 35 - }, -/obj/structure/sign/directions/medical/directional/north{ - pixel_y = 29 - }, -/obj/machinery/computer/slot_machine, -/turf/open/floor/wood/large, -/area/awaymission/beach) "nC" = ( /obj/effect/turf_decal/tile/dark_red/full, /turf/open/floor/iron/smooth_large, @@ -1195,6 +1185,10 @@ }, /turf/open/misc/beach/sand, /area/awaymission/beach) +"pq" = ( +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/misc/beach/sand, +/area/awaymission/beach) "pr" = ( /obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ pixel_x = -17; @@ -1630,10 +1624,6 @@ }, /turf/open/floor/iron/dark/diagonal, /area/awaymission/beach) -"uK" = ( -/obj/effect/spawner/random/trash/cigbutt, -/turf/open/misc/beach/sand, -/area/awaymission/beach) "uL" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -2345,11 +2335,6 @@ }, /turf/open/misc/beach/sand, /area/awaymission/beach) -"DS" = ( -/obj/effect/mob_spawn/corpse/human/old_pirate_captain, -/obj/structure/bed/maint, -/turf/open/misc/beach/sand, -/area/awaymission/beach) "DU" = ( /obj/structure/table/bronze, /turf/open/misc/beach/sand, @@ -2586,13 +2571,6 @@ }, /turf/open/misc/beach/sand, /area/awaymission/beach) -"FJ" = ( -/obj/item/instrument/guitar{ - pixel_y = 4; - pixel_x = -1 - }, -/turf/open/misc/beach/coast, -/area/awaymission/beach) "FK" = ( /obj/item/toy/seashell{ pixel_x = 12; @@ -2788,7 +2766,7 @@ /turf/open/floor/iron/white/textured_large, /area/awaymission/beach) "Il" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /turf/open/misc/beach/sand, /area/awaymission/beach) "It" = ( @@ -2869,6 +2847,17 @@ /obj/machinery/light/directional/west, /turf/open/floor/wood/large, /area/awaymission/beach) +"Jv" = ( +/obj/item/paper/fluff/old_pirate_note{ + pixel_x = -5; + pixel_y = -7 + }, +/obj/item/pen/fountain{ + pixel_y = -11; + pixel_x = -8 + }, +/turf/open/misc/beach/sand, +/area/awaymission/beach) "JF" = ( /obj/structure/marker_beacon/burgundy, /turf/open/water/beach, @@ -2973,6 +2962,13 @@ }, /turf/open/misc/beach/sand, /area/awaymission/beach) +"KQ" = ( +/obj/item/instrument/guitar{ + pixel_y = 4; + pixel_x = -1 + }, +/turf/open/misc/beach/coast, +/area/awaymission/beach) "KV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -3270,17 +3266,6 @@ }, /turf/open/floor/iron/white/textured_large, /area/awaymission/beach) -"Oa" = ( -/obj/item/paper/fluff/old_pirate_note{ - pixel_x = -5; - pixel_y = -7 - }, -/obj/item/pen/fountain{ - pixel_y = -11; - pixel_x = -8 - }, -/turf/open/misc/beach/sand, -/area/awaymission/beach) "Og" = ( /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood/large, @@ -3354,6 +3339,12 @@ }, /turf/open/misc/beach/sand, /area/awaymission/beach) +"Pb" = ( +/obj/item/fishing_rod, +/obj/structure/closet/crate/trashcart, +/obj/item/reagent_containers/cup/glass/bottle/rum/aged, +/turf/open/misc/beach/sand, +/area/awaymission/beach) "Pe" = ( /turf/open/misc/beach/coast{ dir = 5 @@ -3402,6 +3393,11 @@ }, /turf/open/misc/beach/sand, /area/awaymission/beach) +"PU" = ( +/obj/effect/mob_spawn/corpse/human/old_pirate_captain, +/obj/structure/bed/maint, +/turf/open/misc/beach/sand, +/area/awaymission/beach) "Qe" = ( /obj/effect/turf_decal/sand, /obj/machinery/door/airlock/wood{ @@ -3418,12 +3414,6 @@ "Qg" = ( /turf/open/floor/wood/parquet, /area/awaymission/beach) -"Qj" = ( -/obj/item/fishing_rod, -/obj/structure/closet/crate/trashcart, -/obj/item/reagent_containers/cup/glass/bottle/rum/aged, -/turf/open/misc/beach/sand, -/area/awaymission/beach) "Qk" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/item/clothing/suit/jacket/miljacket, @@ -4026,6 +4016,16 @@ "Zp" = ( /turf/open/floor/wood/large, /area/awaymission/beach) +"Zs" = ( +/obj/structure/sign/directions/dorms/directional/north{ + pixel_y = 35 + }, +/obj/structure/sign/directions/medical/directional/north{ + pixel_y = 29 + }, +/obj/machinery/computer/slot_machine, +/turf/open/floor/wood/large, +/area/awaymission/beach) "Zt" = ( /obj/structure/table/bronze, /obj/item/storage/toolbox/fishing{ @@ -7445,8 +7445,8 @@ XB XB Vf YV -Qj -fc +Pb +gq hL ni XB @@ -7702,8 +7702,8 @@ XB XB Vf VY -uK -DS +pq +PU Er BK XB @@ -7959,7 +7959,7 @@ XB XB Vf VY -Oa +Jv VY VY BK @@ -8217,7 +8217,7 @@ XB Vf IZ VY -uK +pq VY BK XB @@ -13240,7 +13240,7 @@ xv xv xv xv -nu +Zs Zp Zp mb @@ -16314,7 +16314,7 @@ vx Bq Xd Ej -lk +bo LC XB XB @@ -29450,7 +29450,7 @@ VY VY Rn VY -FJ +KQ xv CG Gh diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 1dce7d2ab60ff..a8f52784b343a 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -1390,10 +1390,6 @@ }, /turf/open/floor/plating, /area/awaymission/moonoutpost19/syndicate) -"jE" = ( -/obj/effect/landmark/awaystart/moonoutpost, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/moonoutpost19/arrivals) "jH" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -1906,6 +1902,17 @@ "mr" = ( /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) +"ms" = ( +/obj/effect/landmark/awaystart/moonoutpost, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/moonoutpost19/arrivals) +"mt" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/awaystart/moonoutpost, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/moonoutpost19/arrivals) "mu" = ( /obj/machinery/light/small/directional/east, /obj/structure/window/reinforced/spawner/directional/north, @@ -1947,6 +1954,20 @@ }, /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) +"mI" = ( +/obj/effect/landmark/awaystart/moonoutpost, +/turf/open/floor/mineral/titanium/yellow, +/area/awaymission/moonoutpost19/arrivals) +"mJ" = ( +/obj/structure/sign/warning/vacuum{ + desc = "A beacon used by a teleporter."; + icon = 'icons/obj/devices/tracker.dmi'; + icon_state = "beacon"; + name = "tracking beacon" + }, +/obj/effect/landmark/awaystart/moonoutpost, +/turf/open/floor/mineral/titanium/yellow, +/area/awaymission/moonoutpost19/arrivals) "mK" = ( /obj/machinery/door/airlock/titanium{ name = "Shuttle Airlock" @@ -4584,16 +4605,6 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"Ei" = ( -/obj/structure/sign/warning/vacuum{ - desc = "A beacon used by a teleporter."; - icon = 'icons/obj/devices/tracker.dmi'; - icon_state = "beacon"; - name = "tracking beacon" - }, -/obj/effect/landmark/awaystart/moonoutpost, -/turf/open/floor/mineral/titanium/yellow, -/area/awaymission/moonoutpost19/arrivals) "Ep" = ( /turf/closed/mineral/random/labormineral, /area/awaymission/moonoutpost19/mines) @@ -5128,13 +5139,6 @@ }, /turf/open/floor/iron, /area/awaymission/moonoutpost19/research) -"HX" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/landmark/awaystart/moonoutpost, -/turf/open/floor/mineral/titanium/blue, -/area/awaymission/moonoutpost19/arrivals) "HY" = ( /obj/structure/sign/departments/science{ pixel_y = 32 @@ -7674,10 +7678,6 @@ /obj/effect/spawner/random/medical/surgery_tool, /turf/open/misc/asteroid/moon/dug, /area/awaymission/moonoutpost19/mines) -"Zk" = ( -/obj/effect/landmark/awaystart/moonoutpost, -/turf/open/floor/mineral/titanium/yellow, -/area/awaymission/moonoutpost19/arrivals) "Zo" = ( /turf/open/floor/pod/light, /area/awaymission/moonoutpost19/tent) @@ -33419,9 +33419,9 @@ hI My Jc mb -jE -Zk -jE +ms +mI +ms mb Jc My @@ -33676,9 +33676,9 @@ iM My ld mc -HX -Ei -HX +mt +mJ +mt mc ld My @@ -33933,9 +33933,9 @@ iM My ld md -jE -Zk -jE +ms +mI +ms nh ld My diff --git a/_maps/RandomZLevels/museum.dmm b/_maps/RandomZLevels/museum.dmm index afd0cd888fdcd..d9c7d0aa705a6 100644 --- a/_maps/RandomZLevels/museum.dmm +++ b/_maps/RandomZLevels/museum.dmm @@ -1235,7 +1235,7 @@ }, /obj/item/reagent_containers/cup/glass/coffee, /obj/item/paper/fluff/scrambled_pass{ - puzzle_id = "museum_r_wing_puzzle" + puzzle_id = "museum_right_wing" }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -2720,7 +2720,7 @@ "wi" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 8; - id = "museum_secret" + id = "museum_right_wing" }, /turf/open/floor/iron, /area/awaymission/museum) @@ -3128,7 +3128,7 @@ /turf/open/floor/bluespace, /area/awaymission/museum) "zC" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/wood/tile, /area/awaymission/museum) "zE" = ( @@ -3958,7 +3958,7 @@ /area/awaymission/museum) "FO" = ( /obj/effect/decal/cleanable/crayon/puzzle/pin{ - puzzle_id = "museum_r_wing_puzzle" + puzzle_id = "museum_right_wing" }, /turf/closed/indestructible/reinforced, /area/awaymission/museum) @@ -4152,7 +4152,7 @@ /obj/effect/turf_decal/siding/dark_blue, /obj/machinery/door/poddoor/shutters/indestructible{ dir = 8; - id = "museum_secret" + id = "museum_right_wing" }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -4221,7 +4221,7 @@ /area/awaymission/museum) "Id" = ( /obj/effect/decal/cleanable/crayon/puzzle/pin{ - puzzle_id = "museum_r_wing_puzzle" + puzzle_id = "museum_right_wing" }, /turf/closed/indestructible/wood, /area/awaymission/museum) @@ -5246,7 +5246,7 @@ /obj/structure/fluff/fake_camera, /obj/effect/decal/puzzle_dots{ pixel_y = -32; - id = "museum_r_wing_puzzle" + id = "museum_right_wing" }, /turf/open/floor/iron/dark, /area/awaymission/museum) @@ -5332,10 +5332,10 @@ }, /obj/machinery/door/poddoor/shutters/indestructible{ dir = 8; - id = "museum_secret" + id = "museum_right_wing" }, /obj/machinery/puzzle/password/pin/directional/south{ - id = "museum_r_wing_puzzle"; + id = "museum_right_wing"; late_initialize_pop = 1 }, /turf/open/floor/iron/dark, @@ -5349,7 +5349,7 @@ /obj/machinery/light/directional/west, /obj/effect/decal/cleanable/crayon/puzzle/pin{ pixel_x = -32; - puzzle_id = "museum_r_wing_puzzle" + puzzle_id = "museum_right_wing" }, /turf/open/floor/iron/white/small, /area/awaymission/museum) @@ -34926,7 +34926,7 @@ FK FK FK FK -FO +FK FK FK FK @@ -37490,7 +37490,7 @@ GQ FK FK vb -FK +FO FK FK PP diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index f72d9fd320724..be1301a9fbabf 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -176,6 +176,15 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/awaymission/snowdin/post/dorm) +"aR" = ( +/obj/structure/bed, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/landmark/awaystart/snowdin, +/obj/item/bedsheet/purple, +/turf/open/floor/wood, +/area/awaymission/snowdin/post/dorm) "aS" = ( /turf/closed/wall, /area/awaymission/snowdin/post/dorm) @@ -199,6 +208,14 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood, /area/awaymission/snowdin/post/dorm) +"aX" = ( +/obj/structure/bed, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/landmark/awaystart/snowdin, +/turf/open/floor/wood, +/area/awaymission/snowdin/post/dorm) "aY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/wood, @@ -217,6 +234,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/awaymission/snowdin/post/dorm) +"bb" = ( +/obj/structure/bed, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/landmark/awaystart/snowdin, +/obj/item/paper/crumpled/ruins/snowdin/dontdeadopeninside, +/obj/item/bedsheet/green, +/turf/open/floor/wood, +/area/awaymission/snowdin/post/dorm) "bc" = ( /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/dark, @@ -381,20 +408,16 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/awaymission/snowdin/post/research) -"bK" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/landmark/awaystart/snowdin, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/garage) "bL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/structure/spider/stickyweb, /turf/open/floor/iron/freezer, /area/awaymission/snowdin/post/kitchen) +"bM" = ( +/obj/effect/landmark/awaystart/snowdin, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/freezer, +/area/awaymission/snowdin/post/kitchen) "bN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, /obj/structure/spider/stickyweb, @@ -1066,6 +1089,14 @@ }, /turf/open/floor/iron, /area/awaymission/snowdin/post/dorm) +"eh" = ( +/obj/structure/bed, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/landmark/awaystart/snowdin, +/obj/item/bedsheet/red, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/awaymission/snowdin/post/dorm) "ei" = ( /obj/effect/baseturf_helper/asteroid/snow, /turf/closed/wall, @@ -1117,14 +1148,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/awaymission/snowdin/post/messhall) -"ew" = ( -/obj/structure/bed, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/landmark/awaystart/snowdin, -/obj/item/bedsheet/red, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/awaymission/snowdin/post/dorm) "ex" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, @@ -1886,11 +1909,6 @@ }, /turf/open/floor/iron/cafeteria, /area/awaymission/snowdin/post/messhall) -"ht" = ( -/obj/structure/table, -/obj/item/trash/waffles, -/turf/open/floor/iron/cafeteria, -/area/awaymission/snowdin/post/messhall) "hu" = ( /obj/structure/chair{ dir = 8 @@ -2048,6 +2066,25 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/awaymission/snowdin/post/gateway) +"hR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/landmark/awaystart/snowdin, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/gateway) +"hS" = ( +/obj/effect/landmark/awaystart/snowdin, +/obj/effect/turf_decal/loading_area, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/gateway) +"hT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/landmark/awaystart/snowdin, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/gateway) "hU" = ( /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, @@ -2256,6 +2293,29 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/awaymission/snowdin/post/engineering) +"iA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 5 + }, +/obj/effect/landmark/awaystart/snowdin, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/gateway) +"iB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 10 + }, +/obj/effect/landmark/awaystart/snowdin, +/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/gateway) +"iC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/obj/effect/landmark/awaystart/snowdin, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/gateway) "iD" = ( /obj/structure/table, /obj/item/crowbar, @@ -2513,6 +2573,20 @@ }, /turf/open/floor/iron/white, /area/awaymission/snowdin/post/minipost) +"ju" = ( +/obj/effect/landmark/awaystart/snowdin, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/gateway) +"jv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/obj/effect/landmark/awaystart/snowdin, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/gateway) "jw" = ( /obj/structure/table, /obj/item/paper/pamphlet/gateway, @@ -2567,6 +2641,15 @@ /obj/structure/cable, /turf/open/floor/plating/snowed/smoothed, /area/awaymission/snowdin/outside) +"jE" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/awaystart/snowdin, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/garage) "jF" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -2807,16 +2890,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/iron/showroomfloor, /area/awaymission/snowdin/post/dorm) -"kE" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/effect/landmark/awaystart/snowdin, -/obj/item/bedsheet/nanotrasen{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/awaymission/snowdin/post/dorm) "kF" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 @@ -3441,6 +3514,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/awaymission/snowdin/post/garage) +"mA" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/awaystart/snowdin, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/garage) "mB" = ( /obj/item/storage/toolbox/electrical, /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -3687,14 +3768,6 @@ slowdown = 1 }, /area/awaymission/snowdin/outside) -"nz" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/landmark/awaystart/snowdin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/garage) "nA" = ( /obj/structure/reagent_dispensers/watertank/high, /obj/item/reagent_containers/cup/bucket, @@ -5167,7 +5240,7 @@ 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" + name = "Shuttle Transit Console" }, /turf/open/floor/iron/dark/snowdin, /area/awaymission/snowdin/outside) @@ -5248,12 +5321,6 @@ }, /turf/open/floor/iron/dark/snowdin, /area/awaymission/snowdin/outside) -"tm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/effect/landmark/awaystart/snowdin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/gateway) "tp" = ( /turf/closed/wall/mineral/snow, /area/awaymission/snowdin/cave/cavern) @@ -5315,14 +5382,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/awaymission/snowdin/post/mining_main/mechbay) -"tN" = ( -/obj/structure/bed, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/effect/landmark/awaystart/snowdin, -/turf/open/floor/wood, -/area/awaymission/snowdin/post/dorm) "tQ" = ( /obj/machinery/light/small/directional/south, /obj/structure/sign/nanotrasen{ @@ -5766,7 +5825,7 @@ desc = "A console meant for calling and sending a transit ferry. It seems iced-over and non-functional."; dir = 1; icon_screen = null; - name = "Shuttle Transist Console" + name = "Shuttle Transit Console" }, /turf/open/floor/mineral/titanium/blue, /area/awaymission/snowdin/post/broken_shuttle) @@ -6569,11 +6628,6 @@ }, /turf/open/misc/asteroid/snow, /area/awaymission/snowdin/cave) -"zB" = ( -/obj/effect/landmark/awaystart/snowdin, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/gateway) "zC" = ( /obj/structure/rack, /obj/item/grown/log/tree, @@ -6984,6 +7038,13 @@ slowdown = 1 }, /area/awaymission/snowdin/cave) +"Be" = ( +/obj/effect/landmark/awaystart/snowdin, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/awaymission/snowdin/post/minipost) "Bf" = ( /obj/machinery/space_heater, /obj/effect/mapping_helpers/broken_floor, @@ -7430,6 +7491,16 @@ }, /turf/open/floor/iron/dark, /area/awaymission/snowdin/cave) +"CX" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/effect/landmark/awaystart/snowdin, +/obj/item/bedsheet/nanotrasen{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/awaymission/snowdin/post/dorm) "CZ" = ( /obj/structure/frame/machine, /obj/item/stack/cable_coil{ @@ -7620,17 +7691,6 @@ /mob/living/basic/bear/snow, /turf/open/floor/iron/dark/snowdin, /area/awaymission/snowdin/cave) -"DZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 10 - }, -/obj/effect/landmark/awaystart/snowdin, -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/gateway) "Ea" = ( /obj/item/reagent_containers/cup/glass/bottle/beer{ list_reagents = null @@ -7729,11 +7789,6 @@ }, /turf/open/floor/iron/dark, /area/awaymission/snowdin/cave) -"Ex" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, -/obj/effect/landmark/awaystart/snowdin, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/gateway) "Ez" = ( /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, @@ -7949,13 +8004,6 @@ /obj/structure/lattice/catwalk, /turf/open/floor/plating/snowed/smoothed, /area/awaymission/snowdin/outside) -"FH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 5 - }, -/obj/effect/landmark/awaystart/snowdin, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/gateway) "FI" = ( /obj/machinery/conveyor{ id = "snowdin_belt_mine" @@ -8628,11 +8676,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/awaymission/snowdin/post/mining_main/mechbay) -"Jn" = ( -/obj/effect/landmark/awaystart/snowdin, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/freezer, -/area/awaymission/snowdin/post/kitchen) "Jq" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -9057,16 +9100,6 @@ }, /turf/open/floor/iron, /area/awaymission/snowdin/post/mining_main/mechbay) -"LH" = ( -/obj/structure/bed, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/effect/landmark/awaystart/snowdin, -/obj/item/paper/crumpled/ruins/snowdin/dontdeadopeninside, -/obj/item/bedsheet/green, -/turf/open/floor/wood, -/area/awaymission/snowdin/post/dorm) "LI" = ( /obj/effect/turf_decal/weather/snow, /obj/effect/decal/cleanable/blood/drip, @@ -9729,13 +9762,6 @@ slowdown = 1 }, /area/awaymission/snowdin/cave) -"Pk" = ( -/obj/effect/landmark/awaystart/snowdin, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/minipost) "Pm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ @@ -9966,15 +9992,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/awaymission/snowdin/post/engineering) -"Qy" = ( -/obj/structure/bed, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/effect/landmark/awaystart/snowdin, -/obj/item/bedsheet/purple, -/turf/open/floor/wood, -/area/awaymission/snowdin/post/dorm) "Qz" = ( /obj/machinery/door/firedoor, /obj/structure/holosign/barrier/atmos, @@ -10508,12 +10525,6 @@ /mob/living/basic/bear/snow, /turf/open/misc/asteroid/snow, /area/awaymission/snowdin/outside) -"Th" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/landmark/awaystart/snowdin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/gateway) "Tk" = ( /obj/effect/turf_decal/weather/snow/corner, /turf/open/misc/asteroid/snow{ @@ -10588,15 +10599,6 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron, /area/awaymission/snowdin/post/mining_main) -"TL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, -/obj/effect/landmark/awaystart/snowdin, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/gateway) "TM" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 5 @@ -10787,13 +10789,6 @@ /obj/structure/flora/rock/pile/icy/style_random, /turf/open/misc/asteroid/snow/ice, /area/awaymission/snowdin/cave/cavern) -"UW" = ( -/obj/effect/landmark/awaystart/snowdin, -/obj/effect/turf_decal/loading_area, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/awaymission/snowdin/post/gateway) "Va" = ( /obj/structure/fence{ dir = 4 @@ -16268,7 +16263,7 @@ dB Cx eN dC -kE +CX Nb hG aK @@ -17543,7 +17538,7 @@ ae Zy Qj aK -Qy +aR Uk Nh aV @@ -18835,7 +18830,7 @@ bS cu db aV -ew +eh eW aS gm @@ -19085,7 +19080,7 @@ Zy Zy Qj aK -tN +aX XW ND aS @@ -20627,7 +20622,7 @@ Zy Zy Qj aK -LH +bb RX IC aS @@ -22438,9 +22433,9 @@ fh fG gw gw -tm -FH -zB +hR +iA +ju jY kJ lu @@ -22695,9 +22690,9 @@ fh fG gx hm -UW -DZ -TL +hS +iB +jv jZ kK lv @@ -22952,9 +22947,9 @@ fh fG fG hn -Th -Ex -zB +hT +iC +ju jY kJ lw @@ -23075,7 +23070,7 @@ Av Lw yX AY -Pk +Be yX Lz BA @@ -24484,7 +24479,7 @@ Zy Qj bf bv -Jn +bM cb cH do @@ -25007,7 +25002,7 @@ Kd ex fJ gA -ht +hq hW iH jz @@ -29122,7 +29117,7 @@ gO ic ic iN -bK +jE kh kU lM @@ -30154,7 +30149,7 @@ jH ie kY id -nz +mA mV fY Qj diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index e77200a0aca43..16cc8924aae9b 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -100,6 +100,38 @@ /obj/item/clothing/mask/breath, /turf/open/floor/iron/dark, /area/awaymission/undergroundoutpost45/central) +"ax" = ( +/obj/effect/landmark/awaystart/underground, +/turf/open/floor/iron, +/area/awaymission/undergroundoutpost45/central) +"ay" = ( +/obj/structure/chair/comfy/beige{ + dir = 4 + }, +/obj/effect/landmark/awaystart/underground, +/turf/open/floor/iron/grimy, +/area/awaymission/undergroundoutpost45/central) +"az" = ( +/obj/structure/sign/warning/vacuum{ + desc = "A beacon used by a teleporter."; + icon = 'icons/obj/devices/tracker.dmi'; + icon_state = "beacon"; + name = "tracking beacon" + }, +/obj/effect/landmark/awaystart/underground, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/awaymission/undergroundoutpost45/central) +"aB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/landmark/awaystart/underground, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/awaymission/undergroundoutpost45/central) "aC" = ( /turf/closed/wall, /area/awaymission/undergroundoutpost45/central) @@ -185,6 +217,10 @@ "aS" = ( /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/central) +"aT" = ( +/obj/effect/landmark/awaystart/underground, +/turf/open/floor/iron/grimy, +/area/awaymission/undergroundoutpost45/central) "aU" = ( /obj/structure/closet/secure_closet/personal/cabinet{ locked = 0; @@ -5436,10 +5472,6 @@ dir = 1 }, /area/awaymission/undergroundoutpost45/engineering) -"uB" = ( -/obj/effect/landmark/awaystart/underground, -/turf/open/floor/iron, -/area/awaymission/undergroundoutpost45/central) "uC" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -5906,13 +5938,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/awaymission/undergroundoutpost45/engineering) -"wm" = ( -/obj/structure/chair/comfy/beige{ - dir = 4 - }, -/obj/effect/landmark/awaystart/underground, -/turf/open/floor/iron/grimy, -/area/awaymission/undergroundoutpost45/central) "wn" = ( /turf/closed/wall/rust, /area/awaymission/undergroundoutpost45/engineering) @@ -7092,10 +7117,6 @@ }, /turf/open/misc/asteroid/plasma, /area/awaymission/undergroundoutpost45/caves) -"LC" = ( -/obj/effect/landmark/awaystart/underground, -/turf/open/floor/iron/grimy, -/area/awaymission/undergroundoutpost45/central) "LT" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -7306,19 +7327,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/awaymission/undergroundoutpost45/central) -"PF" = ( -/obj/structure/sign/warning/vacuum{ - desc = "A beacon used by a teleporter."; - icon = 'icons/obj/devices/tracker.dmi'; - icon_state = "beacon"; - name = "tracking beacon" - }, -/obj/effect/landmark/awaystart/underground, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/undergroundoutpost45/central) "Qb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7573,14 +7581,6 @@ }, /turf/open/floor/carpet, /area/awaymission/undergroundoutpost45/crew_quarters) -"TV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/landmark/awaystart/underground, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/awaymission/undergroundoutpost45/central) "Ud" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38052,9 +38052,9 @@ ae aS aS aN -uB -uB -uB +ax +ax +ax bk aS bA @@ -38309,9 +38309,9 @@ an aS aS aO -uB -PF -TV +ax +az +aB Xd bw bB @@ -38566,9 +38566,9 @@ an aF aS aP -wm -wm -LC +ay +ay +aT bm aC fq diff --git a/_maps/_basemap.dm b/_maps/_basemap.dm index 33ab986f84d1d..b0f5bc314d92a 100644 --- a/_maps/_basemap.dm +++ b/_maps/_basemap.dm @@ -15,17 +15,13 @@ #include "map_files\tramstation\tramstation.dmm" // SKYRAT EDIT ADDITON START - Compiling our modular maps too! #include "map_files\VoidRaptor\VoidRaptor.dmm" - #include "map_files\NSVBlueshift\Blueshift.dmm" #include "map_files\KiloStation\KiloStation.dmm" // SKYRAT EDIT END //#include "map_files\wawastation\wawastation.dmm" BUBBER EDIT - UNUSED // BUBBER EDIT ADDITION START #include "map_files\biodome\biodome.dmm" - #include "map_files\LimaStation\LimaStation.dmm" #include "map_files\moonstation\moonstation.dmm" - #include "map_files\KiloStation\KiloStation.dmm" #include "map_files\BoxStation\BoxStation.dmm" - // #include "map_files\ss13construct\ss13_construct.dmm" // BUBBER EDIT ADDITION END #ifdef CIBUILDING diff --git a/_maps/bubber/automapper/templates/IceBoxStation/Icebox_ntrep_office.dmm b/_maps/bubber/automapper/templates/IceBoxStation/Icebox_ntrep_office.dmm index 60e1d48f48443..a53b9c3712e7d 100644 --- a/_maps/bubber/automapper/templates/IceBoxStation/Icebox_ntrep_office.dmm +++ b/_maps/bubber/automapper/templates/IceBoxStation/Icebox_ntrep_office.dmm @@ -234,7 +234,7 @@ /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "zI" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/closed/wall/r_wall, /area/station/command/heads_quarters/nt_rep) "Fk" = ( diff --git a/_maps/bubber/automapper/templates/MetaStation/metastation_ntrep_office.dmm b/_maps/bubber/automapper/templates/MetaStation/metastation_ntrep_office.dmm index a89a053357448..1f5c31bf21db5 100644 --- a/_maps/bubber/automapper/templates/MetaStation/metastation_ntrep_office.dmm +++ b/_maps/bubber/automapper/templates/MetaStation/metastation_ntrep_office.dmm @@ -188,7 +188,7 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "H" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/closed/wall/r_wall, /area/station/command/heads_quarters/nt_rep) "I" = ( diff --git a/_maps/bubber/automapper/templates/kilostation/kilostation_ert_bay.dmm b/_maps/bubber/automapper/templates/kilostation/kilostation_ert_bay.dmm index 4ad0a4d10b39f..dfcfda5ec5223 100644 --- a/_maps/bubber/automapper/templates/kilostation/kilostation_ert_bay.dmm +++ b/_maps/bubber/automapper/templates/kilostation/kilostation_ert_bay.dmm @@ -1522,7 +1522,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/closed/wall/r_wall, /area/station/command/heads_quarters/nt_rep) "Nu" = ( diff --git a/_maps/bubber/automapper/templates/tramstation/tramstation_ntrep_office.dmm b/_maps/bubber/automapper/templates/tramstation/tramstation_ntrep_office.dmm index 650024ae354a0..bcd6ec3f0b00e 100644 --- a/_maps/bubber/automapper/templates/tramstation/tramstation_ntrep_office.dmm +++ b/_maps/bubber/automapper/templates/tramstation/tramstation_ntrep_office.dmm @@ -87,7 +87,7 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/closed/wall, /area/station/command/heads_quarters/nt_rep) "m" = ( diff --git a/_maps/bubber/automapper/templates/wawastation/wawastation_ntrep_office.dmm b/_maps/bubber/automapper/templates/wawastation/wawastation_ntrep_office.dmm index 1ee4435c206c9..0e9e8e8ea98cc 100644 --- a/_maps/bubber/automapper/templates/wawastation/wawastation_ntrep_office.dmm +++ b/_maps/bubber/automapper/templates/wawastation/wawastation_ntrep_office.dmm @@ -48,7 +48,7 @@ /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "f" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/closed/wall/r_wall, /area/station/command/heads_quarters/nt_rep) "g" = ( diff --git a/_maps/deathmatch/lattice_battles.dmm b/_maps/deathmatch/lattice_battles.dmm new file mode 100644 index 0000000000000..25508fc93d462 --- /dev/null +++ b/_maps/deathmatch/lattice_battles.dmm @@ -0,0 +1,976 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bm" = ( +/obj/structure/lattice/catwalk, +/obj/structure/closet/crate/large/hats, +/turf/open/chasm, +/area/deathmatch/fullbright) +"bz" = ( +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/obj/item/clothing/head/cone, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"cN" = ( +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"dM" = ( +/turf/open/chasm, +/area/deathmatch/fullbright) +"gz" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"gN" = ( +/turf/closed/mineral/random, +/area/deathmatch/fullbright) +"gW" = ( +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/obj/structure/flora/lunar_plant/style_1, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"ho" = ( +/obj/structure/flora/lunar_plant/style_1, +/obj/effect/invisible_wall, +/obj/structure/railing/unbreakable{ + dir = 6 + }, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"hH" = ( +/obj/structure/railing/unbreakable{ + dir = 5 + }, +/obj/structure/flora/rock/pile/style_random, +/obj/structure/flora/lunar_plant/style_3, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"jb" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"lO" = ( +/obj/structure/railing/unbreakable{ + dir = 9 + }, +/obj/structure/flora/rock/pile/style_random, +/obj/structure/flora/lunar_plant/style_3, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"rE" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/closed/mineral/random, +/area/deathmatch/fullbright) +"sl" = ( +/mob/living/basic/spider/giant/hunter/away_caves, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/spider/stickyweb, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"sQ" = ( +/obj/structure/flora/lunar_plant/style_2, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"tw" = ( +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"tL" = ( +/obj/structure/railing/unbreakable, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"uJ" = ( +/obj/structure/railing/unbreakable{ + dir = 4 + }, +/obj/item/clothing/head/cone, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"uO" = ( +/obj/structure/lattice/catwalk, +/obj/structure/closet/crate/critter, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/turf/open/chasm, +/area/deathmatch/fullbright) +"vk" = ( +/obj/structure/lattice/catwalk, +/turf/open/chasm, +/area/deathmatch/fullbright) +"vr" = ( +/obj/structure/flora/lunar_plant/style_2, +/obj/structure/spider/stickyweb/very_sticky, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"wb" = ( +/obj/structure/lattice/catwalk, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/chasm, +/area/deathmatch/fullbright) +"yB" = ( +/obj/structure/railing/unbreakable{ + dir = 8 + }, +/obj/structure/flora/lunar_plant/style_1, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"AS" = ( +/mob/living/basic/pet/cat/space, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"BL" = ( +/obj/structure/railing/unbreakable{ + dir = 1 + }, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"Cf" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/structure/flora/lunar_plant/style_3, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"CI" = ( +/mob/living/basic/pet/dog/corgi/puppy/void, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"CP" = ( +/obj/structure/lattice/catwalk, +/obj/item/clothing/head/cone, +/turf/open/chasm, +/area/deathmatch/fullbright) +"Dk" = ( +/mob/living/basic/wumborian_fugu, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"He" = ( +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"Ia" = ( +/obj/machinery/power/floodlight, +/obj/structure/lattice/catwalk, +/turf/open/chasm, +/area/deathmatch/fullbright) +"IT" = ( +/obj/structure/lattice/catwalk, +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/decal/cleanable/rubble, +/turf/open/chasm, +/area/deathmatch/fullbright) +"JE" = ( +/obj/structure/railing/unbreakable{ + dir = 10 + }, +/obj/structure/flora/lunar_plant/style_1, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"KO" = ( +/obj/structure/closet/crate/cardboard, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"LN" = ( +/obj/structure/railing/corner, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"MF" = ( +/obj/structure/lattice, +/turf/open/chasm, +/area/deathmatch/fullbright) +"MZ" = ( +/obj/item/clothing/head/cone, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"Nf" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/structure/lattice, +/turf/open/chasm, +/area/deathmatch/fullbright) +"NA" = ( +/obj/structure/flora/lunar_plant/style_2, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"NG" = ( +/obj/structure/lattice/catwalk, +/obj/structure/closet/crate/cardboard, +/obj/item/statuebust, +/turf/open/chasm, +/area/deathmatch/fullbright) +"NI" = ( +/obj/structure/lattice/catwalk, +/obj/effect/decal/cleanable/rubble, +/turf/open/chasm, +/area/deathmatch/fullbright) +"NY" = ( +/obj/effect/invisible_wall, +/obj/structure/railing/unbreakable, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"OF" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"St" = ( +/mob/living/basic/spider/giant/nurse/away_caves, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"SL" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/structure/flora/lunar_plant/style_3, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"Uy" = ( +/obj/item/clothing/head/cone, +/obj/effect/invisible_wall, +/obj/structure/railing/corner/unbreakable{ + dir = 1 + }, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"UU" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/flora/rock/style_random, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"Xf" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/structure/spider/stickyweb, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"Xk" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/power/floodlight, +/turf/open/chasm, +/area/deathmatch/fullbright) +"Xo" = ( +/obj/structure/flora/rock/style_random, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"Yu" = ( +/obj/structure/flora/rock/pile/style_random, +/obj/structure/railing/unbreakable{ + dir = 6 + }, +/obj/structure/flora/lunar_plant/style_3, +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"YH" = ( +/obj/effect/invisible_wall, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"YV" = ( +/obj/structure/lattice/catwalk, +/obj/item/clothing/head/cone, +/obj/effect/decal/cleanable/rubble, +/turf/open/chasm, +/area/deathmatch/fullbright) +"Zp" = ( +/obj/effect/decal/cleanable/garbage, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) +"ZH" = ( +/obj/structure/flora/rock/pile/style_random, +/mob/living/basic/cow/moonicorn, +/turf/open/misc/asteroid/moon, +/area/deathmatch/fullbright) + +(1,1,1) = {" +rE +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +"} +(2,1,1) = {" +gN +gN +He +He +jb +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +"} +(3,1,1) = {" +gN +He +He +Dk +He +KO +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +"} +(4,1,1) = {" +gN +jb +Cf +He +LN +tw +uJ +tw +tw +Yu +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +"} +(5,1,1) = {" +gN +gN +OF +Zp +NY +dM +MF +MF +MF +MF +MF +gN +gN +gN +gN +gN +gN +gN +gN +MF +gN +gN +gN +gN +gN +"} +(6,1,1) = {" +gN +gN +gN +MZ +ho +vk +MF +vk +vk +MF +MF +MF +vk +vk +vk +vk +vk +MF +dM +dM +lO +gN +gN +gN +gN +"} +(7,1,1) = {" +gN +gN +gN +gN +gN +MF +MF +wb +vk +vk +MF +vk +wb +vk +vk +vk +vk +wb +MF +dM +bz +gN +gN +gN +gN +"} +(8,1,1) = {" +gN +gN +gN +gN +JE +MF +vk +vk +vk +vk +vk +NI +vk +vk +vk +vk +MF +vk +MF +MF +BL +sQ +gN +gN +gN +"} +(9,1,1) = {" +gN +gN +sQ +YH +tL +MF +vk +vk +vk +CP +vk +vk +vk +vk +vk +CP +MF +vk +vk +MF +BL +ZH +gN +gN +gN +"} +(10,1,1) = {" +gN +gN +gN +AS +tL +MF +vk +MF +MF +vk +vk +NI +vk +MF +vk +vk +MF +vk +vk +MF +gW +jb +gN +gN +gN +"} +(11,1,1) = {" +gN +gN +gN +CI +tL +MF +vk +vk +MF +MF +vk +vk +MF +MF +vk +vk +vk +vk +vk +vk +hH +gN +gN +gN +gN +"} +(12,1,1) = {" +gN +gN +gN +jb +tL +MF +vk +vk +vk +vk +vk +vk +vk +vk +vk +vk +vk +vk +vk +NG +gN +gN +gN +gN +gN +"} +(13,1,1) = {" +gN +gN +gN +gN +Yu +MF +MF +wb +vk +vk +vk +vk +wb +CP +vk +vk +vk +wb +vk +Xk +gN +gN +gN +gN +gN +"} +(14,1,1) = {" +gN +gN +gN +gN +gN +Ia +MF +vk +vk +vk +vk +vk +vk +vk +vk +NI +vk +vk +vk +gN +gN +gN +gN +gN +gN +"} +(15,1,1) = {" +gN +gN +gN +gN +gN +gN +bm +vk +vk +vk +vk +MF +MF +vk +vk +vk +MF +MF +vk +gN +gN +gN +gN +gN +gN +"} +(16,1,1) = {" +gN +gN +gN +gN +gN +gN +gN +MF +MF +vk +vk +MF +vk +vk +vk +vk +MF +vk +vk +gN +gN +gN +gN +gN +gN +"} +(17,1,1) = {" +gN +gN +gN +gN +gN +gN +MF +MF +vk +vk +NI +vk +vk +vk +vk +CP +vk +vk +vk +gN +gN +gN +gN +gN +gN +"} +(18,1,1) = {" +gN +gN +gN +gN +gN +MF +MF +MF +vk +vk +YV +vk +MF +MF +vk +vk +vk +vk +vk +gN +gN +gN +gN +gN +gN +"} +(19,1,1) = {" +gN +gN +gN +gN +SL +dM +MF +Nf +vk +vk +vk +MF +Nf +MF +MF +vk +vk +IT +vk +uO +gN +gN +gN +gN +gN +"} +(20,1,1) = {" +gN +gN +gN +gN +dM +dM +dM +MF +MF +vk +MF +MF +MF +MF +MF +MF +vk +vk +MF +MF +UU +gN +gN +gN +gN +"} +(21,1,1) = {" +gN +gN +gN +SL +dM +dM +dM +dM +uO +gN +gN +gN +gN +gN +gN +gN +vk +MF +dM +dM +BL +St +Xf +gN +gN +"} +(22,1,1) = {" +gN +gN +gN +jb +NA +dM +SL +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +lO +yB +cN +Uy +vr +gN +gN +gN +"} +(23,1,1) = {" +gN +gN +gN +gN +gz +Xo +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +sl +gz +gN +gN +gN +gN +gN +"} +(24,1,1) = {" +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +"} +(25,1,1) = {" +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +gN +"} diff --git a/_maps/deathmatch/meta_brig.dmm b/_maps/deathmatch/meta_brig.dmm index 1d2950dd0bb1b..60b8d8a471b0a 100644 --- a/_maps/deathmatch/meta_brig.dmm +++ b/_maps/deathmatch/meta_brig.dmm @@ -196,16 +196,6 @@ /obj/effect/decal/cleanable/blood/drip, /turf/open/indestructible, /area/deathmatch) -"cQ" = ( -/obj/structure/chair/stool/directional/east, -/obj/effect/turf_decal/trimline/red/warning{ - dir = 4 - }, -/obj/machinery/flasher/directional/north{ - id = "visitorflash" - }, -/turf/open/floor/iron, -/area/deathmatch) "cW" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -268,6 +258,16 @@ "du" = ( /turf/closed/indestructible/fakedoor, /area/deathmatch) +"dy" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 4 + }, +/obj/machinery/flasher/directional/north{ + id = "visitorflash" + }, +/turf/open/floor/iron, +/area/deathmatch) "dA" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -459,6 +459,15 @@ }, /turf/open/floor/iron/white, /area/deathmatch) +"hS" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/carpet, +/area/deathmatch) "hY" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -608,15 +617,6 @@ /obj/machinery/syndicatebomb/training, /turf/open/indestructible, /area/deathmatch) -"kM" = ( -/obj/effect/turf_decal/tile/red, -/obj/machinery/light/directional/west, -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/indestructible, -/area/deathmatch) "kU" = ( /obj/effect/turf_decal/stripes/line, /turf/open/indestructible, @@ -889,14 +889,6 @@ }, /turf/open/indestructible, /area/deathmatch) -"oc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/stool/directional/east, -/obj/effect/turf_decal/trimline/red/warning{ - dir = 4 - }, -/turf/open/floor/iron, -/area/deathmatch) "os" = ( /obj/structure/sign/warning/pods{ pixel_x = 32 @@ -1190,18 +1182,6 @@ /obj/item/storage/toolbox/emergency/old, /turf/open/indestructible/dark, /area/deathmatch) -"sd" = ( -/obj/machinery/door/window/brigdoor/security/holding/left/directional/south{ - id = "Holding Cell"; - name = "Holding Cell" - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/indestructible, -/area/deathmatch) "sg" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/iron/grimy, @@ -1355,10 +1335,6 @@ }, /turf/open/indestructible, /area/deathmatch) -"tW" = ( -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/grimy, -/area/deathmatch) "ua" = ( /obj/machinery/door/poddoor/preopen{ id = "dm10"; @@ -1532,6 +1508,17 @@ /obj/effect/decal/cleanable/blood/drip, /turf/open/indestructible, /area/deathmatch) +"wm" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/indestructible/dark, +/area/deathmatch) "wn" = ( /obj/structure/fluff/fake_camera{ dir = 9 @@ -1647,6 +1634,14 @@ }, /turf/open/indestructible/dark, /area/deathmatch) +"yN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/deathmatch) "yO" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -1677,6 +1672,14 @@ }, /turf/open/floor/iron/showroomfloor, /area/deathmatch) +"yT" = ( +/obj/effect/turf_decal/tile/red, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) "yY" = ( /obj/structure/cable, /obj/machinery/computer/old{ @@ -1711,15 +1714,6 @@ /obj/machinery/light/small/directional/east, /turf/open/indestructible/dark, /area/deathmatch) -"zn" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/telescreen/prison/directional/north, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/turf/open/floor/carpet, -/area/deathmatch) "zq" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/grimy, @@ -1815,11 +1809,6 @@ /obj/machinery/light/directional/north, /turf/open/indestructible, /area/deathmatch) -"AG" = ( -/obj/machinery/light_switch/directional/south, -/obj/structure/cable, -/turf/open/floor/carpet, -/area/deathmatch) "AS" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -2331,16 +2320,6 @@ "HK" = ( /turf/closed/indestructible/fakeglass, /area/deathmatch) -"HP" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/light_switch/directional/east, -/turf/open/indestructible/dark, -/area/deathmatch) "HV" = ( /obj/structure/rack, /obj/effect/turf_decal/tile/blue{ @@ -2398,10 +2377,6 @@ /obj/structure/sign/warning/pods, /turf/closed/wall/r_wall, /area/deathmatch) -"IZ" = ( -/obj/machinery/light_switch/directional/west, -/turf/open/indestructible/dark, -/area/deathmatch) "Jb" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -2671,14 +2646,6 @@ /obj/structure/table/wood, /turf/open/floor/iron/grimy, /area/deathmatch) -"Mt" = ( -/obj/machinery/computer/security/telescreen/prison/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/indestructible, -/area/deathmatch) "Mx" = ( /obj/structure/table, /obj/item/clothing/mask/gas/sechailer{ @@ -2891,13 +2858,6 @@ }, /turf/open/indestructible/hotelwood, /area/deathmatch) -"Po" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/machinery/light_switch/directional/east, -/turf/open/indestructible, -/area/deathmatch) "Pt" = ( /turf/open/floor/iron/grimy, /area/deathmatch) @@ -2929,6 +2889,14 @@ /obj/structure/cable, /turf/open/indestructible, /area/deathmatch) +"PV" = ( +/obj/machinery/computer/security/telescreen/prison/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) "Qd" = ( /obj/structure/table, /obj/item/clothing/glasses/sunglasses{ @@ -3495,20 +3463,6 @@ }, /turf/open/indestructible, /area/deathmatch) -"YG" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/light_switch/directional/west{ - pixel_y = -12 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/indestructible/dark, -/area/deathmatch) "YI" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -3602,6 +3556,18 @@ }, /turf/open/floor/iron/white, /area/deathmatch) +"Zj" = ( +/obj/machinery/door/window/brigdoor/security/holding{ + id = "Holding Cell"; + name = "Holding Cell" + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) "Zq" = ( /turf/template_noop, /area/template_noop) @@ -3667,9 +3633,9 @@ IJ Yh Yh Yh -cQ +dy YW -oc +yN IJ IJ IJ @@ -4121,7 +4087,7 @@ tH xi Am EP -HP +tH Kh Rv UU @@ -4176,7 +4142,7 @@ yH uD xk Bf -IZ +Ux JU YW yy @@ -4281,7 +4247,7 @@ IJ Yh sw sJ -YG +wm YW nB GM @@ -4318,7 +4284,7 @@ ob ob tQ mS -kM +yT Ux YW yy @@ -4352,7 +4318,7 @@ AS Nw pc WI -sd +Zj xu bM nI @@ -4430,7 +4396,7 @@ vt CS bA GU -Mt +PV XK XK XI @@ -4466,7 +4432,7 @@ Hz Ik Zv ad -tW +Pt Pt eD QG @@ -4549,7 +4515,7 @@ Ik Os mE Yh -zn +hS FY dp Pt @@ -4567,7 +4533,7 @@ Cx ri yO cW -Po +Os Os Hp UQ @@ -4675,7 +4641,7 @@ cf cf YN aE -AG +cf Yh Wg qP diff --git a/_maps/deathmatch/ragin_mages.dmm b/_maps/deathmatch/ragin_mages.dmm index 3dcdb966d1147..96249fcf6928d 100644 --- a/_maps/deathmatch/ragin_mages.dmm +++ b/_maps/deathmatch/ragin_mages.dmm @@ -8,7 +8,7 @@ dir = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "aT" = ( /obj/item/cardboard_cutout/adaptive{ pixel_y = 14; @@ -17,7 +17,7 @@ /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "bb" = ( /obj/structure/chair/wood/wings{ dir = 8 @@ -28,15 +28,15 @@ set_luminosity = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "bg" = ( /obj/effect/spawner/random/entertainment/arcade, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "bv" = ( /obj/machinery/power/shuttle_engine/propulsion, /turf/open/floor/plating/airless, -/area/deathmatch/teleport) +/area/deathmatch) "co" = ( /obj/structure/table/reinforced, /obj/item/paper_bin/carbon{ @@ -44,7 +44,7 @@ pixel_x = 7 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "ct" = ( /obj/structure/flora/bush/grassy/style_random, /mob/living/basic/pet/gondola{ @@ -52,24 +52,24 @@ faction = list("gondola", "Wizard") }, /turf/open/floor/grass, -/area/deathmatch/teleport) +/area/deathmatch) "cU" = ( /obj/structure/chair/wood/wings{ dir = 1 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "dj" = ( /obj/machinery/door/airlock/wood, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "ds" = ( /turf/open/floor/carpet/purple, -/area/deathmatch/teleport) +/area/deathmatch) "ez" = ( /obj/structure/closet/crate, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "fH" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/machinery/griddle, @@ -82,19 +82,19 @@ pixel_x = 9 }, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "fI" = ( /turf/open/lava, -/area/deathmatch/teleport) +/area/deathmatch) "gn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "gr" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/chair/wood, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "hg" = ( /obj/structure/railing/corner/end/flip{ dir = 8 @@ -104,14 +104,14 @@ dir = 8 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "hk" = ( /obj/item/kirbyplants/organic/plant10{ pixel_y = 21; pixel_x = -7 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "hK" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/light_emitter{ @@ -120,20 +120,20 @@ set_luminosity = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "ig" = ( /obj/structure/table/wood, /obj/item/stack/medical/bruise_pack{ pixel_x = -12 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "iz" = ( /obj/structure/chair/comfy/brown{ dir = 1 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "iL" = ( /obj/effect/light_emitter{ set_cap = 2; @@ -141,7 +141,7 @@ set_luminosity = 4 }, /turf/open/floor/carpet/red, -/area/deathmatch/teleport) +/area/deathmatch) "iQ" = ( /obj/structure/table, /obj/structure/bedsheetbin{ @@ -149,42 +149,42 @@ pixel_x = 3 }, /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "iZ" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/sink/directional/west, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "jb" = ( /obj/machinery/door/airlock/wood, /obj/structure/railing/corner/end/flip, /obj/structure/railing/corner/end, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "jg" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/effect/landmark/deathmatch_player_spawn, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "jm" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/mystery_box/wands, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "js" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "jM" = ( /obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "jV" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/machinery/door/airlock/wood, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "kl" = ( /obj/structure/flora/bush/grassy/style_random, /obj/machinery/light/floor, @@ -194,7 +194,7 @@ set_luminosity = 4 }, /turf/open/floor/grass, -/area/deathmatch/teleport) +/area/deathmatch) "li" = ( /obj/structure/table, /obj/item/extinguisher{ @@ -206,7 +206,7 @@ pixel_x = -6 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "lM" = ( /obj/structure/bed{ dir = 1 @@ -220,19 +220,19 @@ set_luminosity = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "lO" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "mu" = ( /obj/effect/turf_decal/stripes, /obj/structure/railing{ dir = 4 }, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "mV" = ( /obj/structure/railing{ dir = 4 @@ -242,40 +242,40 @@ }, /obj/structure/mystery_box/tdome, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "nk" = ( /obj/item/gun/magic/wand/death, /obj/structure/window/reinforced/plasma/spawner/directional/east, /obj/structure/window/reinforced/plasma/spawner/directional/north, /obj/structure/window/reinforced/plasma/spawner/directional/west, /turf/open/floor/grass, -/area/deathmatch/teleport) +/area/deathmatch) "nx" = ( /obj/effect/landmark/deathmatch_player_spawn, /turf/open/floor/carpet/red, -/area/deathmatch/teleport) +/area/deathmatch) "nQ" = ( /obj/machinery/door/airlock/wood, /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "on" = ( /obj/structure/table/wood, /turf/open/floor/carpet/red, -/area/deathmatch/teleport) +/area/deathmatch) "oP" = ( /obj/structure/destructible/cult/item_dispenser/archives/library, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "pe" = ( /obj/item/kirbyplants/organic/plant10{ pixel_y = 21; pixel_x = -7 }, /turf/open/floor/carpet/red, -/area/deathmatch/teleport) +/area/deathmatch) "ph" = ( /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "pv" = ( /obj/effect/light_emitter{ set_cap = 2; @@ -283,18 +283,18 @@ set_luminosity = 4 }, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "pL" = ( /obj/effect/turf_decal/stripes{ dir = 1 }, /obj/structure/mystery_box/wands, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "pV" = ( /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, -/area/deathmatch/teleport) +/area/deathmatch) "qx" = ( /obj/effect/light_emitter{ set_cap = 2; @@ -302,15 +302,15 @@ set_luminosity = 4 }, /turf/open/floor/carpet/purple, -/area/deathmatch/teleport) +/area/deathmatch) "qY" = ( /obj/structure/closet/crate/bin, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "rj" = ( /obj/machinery/door/window/right/directional/east, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "rD" = ( /obj/structure/railing{ dir = 4 @@ -319,11 +319,11 @@ dir = 8 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "sf" = ( /obj/structure/mirror/directional/east, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "tL" = ( /obj/structure/flora/bush/fullgrass/style_random, /mob/living/simple_animal/hostile/ooze/gelatinous{ @@ -331,7 +331,7 @@ faction = list("slime", "Wizard") }, /turf/open/floor/grass, -/area/deathmatch/teleport) +/area/deathmatch) "ue" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/item/food/burger/yellow{ @@ -347,14 +347,14 @@ }, /obj/structure/table/reinforced, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "ui" = ( /obj/effect/turf_decal/stripes, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "uz" = ( /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "uR" = ( /obj/item/clothing/shoes/sandal/magic{ pixel_y = 16 @@ -365,82 +365,82 @@ set_luminosity = 4 }, /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "vh" = ( /obj/structure/mystery_box/wands, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "vv" = ( /obj/vehicle/ridden/scooter/skateboard{ dir = 4 }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "vR" = ( /obj/structure/bookcase/random, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "wd" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/mystery_box/wands, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "wl" = ( /obj/item/kirbyplants/organic/plant10{ pixel_y = 1; pixel_x = -6 }, /turf/open/floor/carpet/purple, -/area/deathmatch/teleport) +/area/deathmatch) "wL" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/machinery/gibber/autogibber, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "xk" = ( /obj/structure/sink/directional/south, /obj/structure/mirror/directional/north{ pixel_y = 36 }, /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "xs" = ( /obj/structure/flora/bush/grassy/style_random, /turf/open/floor/grass, -/area/deathmatch/teleport) +/area/deathmatch) "yA" = ( /obj/structure/chair/wood/wings, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "zN" = ( /obj/structure/mystery_box/wands, /obj/structure/sign/poster/contraband/the_big_gas_giant_truth/directional/north, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "zO" = ( /obj/structure/closet, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Au" = ( /obj/structure/railing{ dir = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "AD" = ( /obj/structure/sign/departments/restroom/directional/west, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Bm" = ( /obj/effect/landmark/deathmatch_player_spawn, /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "Cb" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table/wood, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "Cj" = ( /obj/structure/table, /obj/item/clothing/ears/earmuffs{ @@ -456,10 +456,10 @@ pixel_y = -10 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Cq" = ( /turf/open/floor/carpet/red, -/area/deathmatch/teleport) +/area/deathmatch) "CM" = ( /obj/structure/railing/corner, /obj/structure/railing/corner{ @@ -477,11 +477,8 @@ set_luminosity = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "DK" = ( -/obj/structure/railing{ - dir = 8 - }, /obj/structure/railing{ dir = 8 }, @@ -489,11 +486,11 @@ dir = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "DW" = ( /obj/machinery/computer, /turf/open/floor/carpet/red, -/area/deathmatch/teleport) +/area/deathmatch) "Eh" = ( /obj/effect/light_emitter{ set_cap = 2; @@ -501,64 +498,64 @@ set_luminosity = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Fb" = ( /obj/effect/turf_decal/stripes{ dir = 1 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Fm" = ( /obj/structure/chair/comfy/black{ dir = 1 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Fv" = ( /obj/structure/chair/wood/wings{ dir = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Fx" = ( /obj/item/target, /obj/structure/sign/flag/nanotrasen/directional/north, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "FL" = ( /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "Ge" = ( /obj/item/flashlight/flare{ pixel_x = -5; pixel_y = -12 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Gv" = ( /obj/item/kirbyplants/organic/plant10{ pixel_y = 2; pixel_x = 5 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "GC" = ( /obj/effect/spawner/structure/window, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "GZ" = ( /obj/structure/curtain, /obj/machinery/shower/directional/north, /obj/item/soap/syndie, /turf/open/floor/noslip, -/area/deathmatch/teleport) +/area/deathmatch) "Hf" = ( /obj/item/kirbyplants/organic/plant10{ pixel_y = 1; pixel_x = -6 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Hs" = ( /turf/template_noop, /area/template_noop) @@ -572,17 +569,17 @@ pixel_y = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "HP" = ( /obj/structure/chair/comfy/black{ dir = 1 }, /turf/open/floor/carpet/red, -/area/deathmatch/teleport) +/area/deathmatch) "HS" = ( /obj/structure/table/wood/fancy, /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "IE" = ( /obj/structure/table/wood, /obj/item/clothing/suit/wizrobe/black{ @@ -594,40 +591,40 @@ pixel_x = 6 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "IM" = ( /obj/item/kirbyplants/organic/plant10{ pixel_y = 2; pixel_x = 5 }, /turf/open/floor/carpet/purple, -/area/deathmatch/teleport) +/area/deathmatch) "Jm" = ( /turf/closed/wall/mineral/wood, -/area/deathmatch/teleport) +/area/deathmatch) "Jo" = ( /obj/structure/toilet{ dir = 4 }, /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "Kr" = ( /obj/effect/landmark/deathmatch_player_spawn, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "KW" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Le" = ( /obj/structure/filingcabinet, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Mg" = ( /obj/machinery/computer, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Nl" = ( /obj/machinery/power/shuttle_engine/heater{ resistance_flags = 3 @@ -636,21 +633,21 @@ resistance_flags = 3 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Nm" = ( /obj/item/kirbyplants/organic/plant10{ pixel_y = 21; pixel_x = 6 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Nt" = ( /obj/item/target{ pixel_y = 11 }, /obj/effect/turf_decal/stripes, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "NW" = ( /obj/structure/railing{ dir = 4 @@ -659,30 +656,30 @@ dir = 1 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Ok" = ( /obj/machinery/vending/cigarette, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "OD" = ( /obj/structure/filingcabinet, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "OK" = ( /obj/item/kirbyplants/organic/plant10{ pixel_y = 21; pixel_x = 6 }, /turf/open/floor/carpet/red, -/area/deathmatch/teleport) +/area/deathmatch) "PD" = ( /obj/structure/table/wood, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Qj" = ( /obj/structure/dresser, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "QH" = ( /obj/structure/table, /obj/item/clothing/head/wizard{ @@ -690,19 +687,19 @@ pixel_x = 4 }, /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "QT" = ( /obj/structure/mystery_box/wands, /turf/open/floor/plastic, -/area/deathmatch/teleport) +/area/deathmatch) "RB" = ( /obj/machinery/vending/snack, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "RI" = ( /obj/effect/decal/cleanable/cobweb, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "RT" = ( /obj/machinery/power/shuttle_engine/heater{ resistance_flags = 3 @@ -711,14 +708,14 @@ resistance_flags = 3 }, /turf/open/lava, -/area/deathmatch/teleport) +/area/deathmatch) "Sa" = ( /turf/open/floor/grass, -/area/deathmatch/teleport) +/area/deathmatch) "SK" = ( /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, -/area/deathmatch/teleport) +/area/deathmatch) "Th" = ( /obj/effect/turf_decal/tile/bar/opposingcorners, /obj/structure/table/reinforced, @@ -736,15 +733,15 @@ set_luminosity = 4 }, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) "Vk" = ( /obj/machinery/door/window/left/directional/east, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "VM" = ( /obj/structure/table/wood/poker, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Wl" = ( /obj/structure/railing{ dir = 4 @@ -755,37 +752,37 @@ set_luminosity = 4 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "WX" = ( /obj/machinery/vending/magivend, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Xv" = ( /obj/structure/railing, /obj/structure/railing{ dir = 1 }, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "YP" = ( /obj/structure/closet/crate/coffin, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "YS" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine/cult, -/area/deathmatch/teleport) +/area/deathmatch) "Zo" = ( /obj/structure/flora/bush/flowers_pp/style_random, /turf/open/floor/grass, -/area/deathmatch/teleport) +/area/deathmatch) "ZS" = ( /obj/structure/railing/corner/end/flip, /turf/open/floor/iron, -/area/deathmatch/teleport) +/area/deathmatch) (1,1,1) = {" Hs diff --git a/_maps/deathmatch/ragnarok.dmm b/_maps/deathmatch/ragnarok.dmm index 328055398e71a..89273eb45ada2 100644 --- a/_maps/deathmatch/ragnarok.dmm +++ b/_maps/deathmatch/ragnarok.dmm @@ -7,13 +7,17 @@ /obj/structure/flora/rock/pile/jungle/style_random, /turf/open/misc/asteroid/moon, /area/deathmatch) +"aR" = ( +/obj/structure/bonfire/dense/prelit, +/turf/open/misc/grass/jungle, +/area/deathmatch) "bb" = ( /obj/structure/flora/coconuts, /turf/open/misc/dirt/jungle, /area/deathmatch) "bj" = ( /obj/effect/turf_decal/siding/wood/corner, -/obj/structure/bonfire/prelit, +/obj/structure/bonfire/dense/prelit, /turf/open/floor/wood/large, /area/deathmatch) "bn" = ( @@ -24,7 +28,7 @@ dir = 4 }, /obj/effect/turf_decal/siding/wood, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "bI" = ( /turf/open/misc/asteroid/moon, @@ -122,7 +126,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "fO" = ( /obj/effect/decal/cleanable/dirt/dust, @@ -224,7 +228,7 @@ /obj/effect/turf_decal/weather/dirt{ dir = 6 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "jv" = ( /obj/structure/flora/grass/jungle/b/style_random, @@ -263,7 +267,7 @@ /area/deathmatch) "lr" = ( /obj/effect/turf_decal/siding/wood, -/obj/structure/bonfire/prelit, +/obj/structure/bonfire/dense/prelit, /turf/open/floor/wood/large, /area/deathmatch) "lx" = ( @@ -321,7 +325,7 @@ /obj/effect/turf_decal/weather/dirt{ dir = 8 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "ox" = ( /obj/effect/cosmic_rune, @@ -344,7 +348,7 @@ /obj/effect/turf_decal/weather/dirt{ dir = 6 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "pr" = ( /obj/structure/flora/bush/jungle/a/style_random, @@ -426,7 +430,7 @@ /obj/effect/turf_decal/weather/dirt{ dir = 4 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "rH" = ( /obj/effect/turf_decal/siding/wood{ @@ -522,6 +526,12 @@ /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood/large, /area/deathmatch) +"wJ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/misc/dirt/jungle, +/area/deathmatch) "wP" = ( /obj/structure/flora/rock/style_random, /obj/effect/turf_decal/weather/dirt{ @@ -564,6 +574,11 @@ /obj/effect/spawner/random/decoration/glowstick/on, /turf/open/floor/plating/heretic_rust, /area/deathmatch) +"yZ" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/misc/dirt/jungle, +/area/deathmatch) "zo" = ( /obj/structure/flora/rock/pile/jungle/style_random, /obj/effect/landmark/deathmatch_player_spawn, @@ -616,8 +631,10 @@ /turf/open/floor/wood/tile, /area/deathmatch) "AO" = ( -/obj/effect/decal/cleanable/ants, -/turf/closed/wall/heretic_rust, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/misc/dirt/jungle, /area/deathmatch) "Ba" = ( /obj/structure/destructible/cult/pylon, @@ -648,7 +665,7 @@ /obj/effect/turf_decal/weather/dirt{ dir = 6 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "CB" = ( /obj/structure/destructible/eldritch_crucible, @@ -664,7 +681,7 @@ /obj/effect/turf_decal/weather/dirt{ dir = 8 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "CR" = ( /mob/living/carbon/human/species/monkey, @@ -681,14 +698,14 @@ /obj/effect/turf_decal/weather/dirt{ dir = 9 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "Ds" = ( /obj/effect/turf_decal/weather/dirt{ dir = 8 }, /obj/effect/turf_decal/siding/wood, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "Du" = ( /obj/structure/flora/rock/pile/style_random, @@ -705,7 +722,13 @@ /obj/effect/turf_decal/weather/dirt{ dir = 6 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, +/area/deathmatch) +"Ed" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/misc/dirt/jungle, /area/deathmatch) "EF" = ( /obj/effect/decal/cleanable/dirt, @@ -731,7 +754,6 @@ /area/deathmatch) "FQ" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/ants, /turf/open/misc/grass/jungle, /area/deathmatch) "FS" = ( @@ -785,7 +807,9 @@ /turf/open/floor/cult, /area/deathmatch) "Ic" = ( -/obj/effect/decal/cleanable/ants, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, /turf/open/misc/dirt/jungle, /area/deathmatch) "Ig" = ( @@ -827,7 +851,8 @@ /turf/open/misc/grass/jungle, /area/deathmatch) "Kg" = ( -/turf/open/water/jungle, +/obj/structure/flora/rock/style_4, +/turf/open/misc/dirt/jungle, /area/deathmatch) "Kl" = ( /obj/effect/spawner/structure/window/bronze, @@ -855,6 +880,15 @@ /obj/structure/flora/grass/jungle/a/style_random, /turf/open/misc/grass/jungle, /area/deathmatch) +"LW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/water/jungle, +/area/deathmatch) "My" = ( /obj/structure/table/wood, /obj/item/food/grown/holymelon, @@ -883,7 +917,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/turf/open/water/jungle, +/obj/structure/flora/rock/style_4, +/turf/open/misc/dirt/jungle, /area/deathmatch) "Or" = ( /obj/structure/flora/tree/jungle/style_random, @@ -899,12 +934,18 @@ dir = 6 }, /obj/effect/turf_decal/siding/wood, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "Px" = ( /obj/structure/flora/tree/jungle/style_random, /turf/open/misc/grass/jungle, /area/deathmatch) +"PC" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/misc/dirt/jungle, +/area/deathmatch) "PH" = ( /obj/effect/visible_heretic_influence, /turf/open/misc/dirt/jungle, @@ -940,10 +981,6 @@ /obj/effect/forcefield/cult/permanent, /turf/open/misc/dirt/jungle/dark, /area/deathmatch) -"RE" = ( -/obj/structure/bonfire/prelit, -/turf/open/misc/grass/jungle, -/area/deathmatch) "RL" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/flora/rock/pile/jungle/style_random, @@ -1057,7 +1094,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/turf/open/water/jungle, +/turf/open/misc/dirt/jungle, /area/deathmatch) "VF" = ( /obj/effect/turf_decal/siding/wood{ @@ -1098,6 +1135,15 @@ /obj/structure/flora/grass/jungle/b/style_random, /turf/open/misc/dirt/jungle/dark, /area/deathmatch) +"Ww" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/water/jungle, +/area/deathmatch) "Xa" = ( /obj/structure/rack/skeletal, /obj/item/clothing/head/helmet/chaplain/ancient{ @@ -1114,8 +1160,13 @@ /turf/closed/wall/mineral/cult/artificer, /area/deathmatch) "Yn" = ( -/obj/effect/decal/cleanable/ants, -/turf/open/misc/grass/jungle, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/water/jungle, /area/deathmatch) "Ys" = ( /obj/effect/turf_decal/siding/wood{ @@ -1193,7 +1244,7 @@ /turf/open/misc/grass/jungle, /area/deathmatch) "ZY" = ( -/obj/structure/bonfire/prelit, +/obj/structure/bonfire/dense/prelit, /turf/open/misc/dirt/jungle, /area/deathmatch) @@ -1362,7 +1413,7 @@ jL jv CR LU -Yn +qa Sw Sw yY @@ -1464,7 +1515,7 @@ eL Be XL VP -AO +SC tm qa vI @@ -1515,7 +1566,7 @@ GD qa LU Fn -qa +aR Sw Sw oC @@ -1528,7 +1579,7 @@ dI lx PI Vm -iJ +Ic TN qh FK @@ -1543,7 +1594,7 @@ Ig Ig wR ZY -Ic +FK FK FK sC @@ -1561,8 +1612,8 @@ PI NX NQ NQ -NQ -TN +Ed +AO CE DA Ig @@ -1576,7 +1627,7 @@ iJ TN TN TN -qh +Ww FK FK FK @@ -1586,16 +1637,16 @@ eB SC FK sC -iJ +Ic Ds PI Bp FK FK wR -SE +wJ FK -sC +yZ Ig Ig Ig @@ -1606,18 +1657,18 @@ Ig SE NQ NQ -NQ +LW Kg -TN -qh +AO +PC FK FK -iJ -qh +Yn +PC RL PI Do -Kg +FK Pi PI gx @@ -1638,24 +1689,24 @@ sC sC FK bb -SE -NQ +wJ +Ed bv PI ou -NQ -Kg +Ed +FK Ds ft Vv oO FK -ZY -qa +FK +aR GD qa jv -Yn +qa GD RW jL @@ -1675,7 +1726,7 @@ RL PI Bp bb -SE +wJ rD YI jb @@ -1770,7 +1821,7 @@ QO Jf Yv qa -RE +aR Ov qg qg @@ -1954,7 +2005,7 @@ YN Wp qa qa -Yn +qa qa qa qa @@ -1982,7 +2033,7 @@ KL Nf Sf Jf -RE +aR Px Ik GO diff --git a/_maps/deathmatch/species_warfare.dmm b/_maps/deathmatch/species_warfare.dmm new file mode 100644 index 0000000000000..e80485c2b5e5c --- /dev/null +++ b/_maps/deathmatch/species_warfare.dmm @@ -0,0 +1,2461 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aA" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/medical_kiosk, +/obj/structure/sign/poster/official/moth_meth/directional/east, +/turf/open/indestructible/white, +/area/deathmatch) +"aD" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/effect/spawner/random/vending/colavend, +/turf/open/indestructible, +/area/deathmatch) +"by" = ( +/mob/living/basic/mothroach, +/turf/open/indestructible/white, +/area/deathmatch) +"bL" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/surgery_tray/full, +/turf/open/indestructible/white, +/area/deathmatch) +"bX" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/structure/table/glass, +/obj/item/storage/fancy/donut_box, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"cd" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/machinery/light/built/directional/south, +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"cl" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/structure/bed, +/obj/effect/spawner/random/bedsheet, +/obj/machinery/light/small/blacklight/directional/north, +/turf/open/floor/wood, +/area/deathmatch) +"cs" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/vehicle/sealed/mecha/ripley, +/obj/item/mecha_parts/mecha_equipment/air_tank/full, +/turf/open/floor/iron/dark, +/area/deathmatch) +"cy" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/cryo_cell, +/turf/open/indestructible/white, +/area/deathmatch) +"dv" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/turf/open/indestructible, +/area/deathmatch) +"dA" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"dB" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/portable_atmospherics/canister, +/turf/open/indestructible, +/area/deathmatch) +"ee" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"em" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"es" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/stasis{ + dir = 1 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/light/floor, +/turf/open/indestructible/white, +/area/deathmatch) +"eE" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/atmospherics/components/binary/crystallizer{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"eO" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"eW" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"fg" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/turf/open/indestructible/dark, +/area/deathmatch) +"fm" = ( +/obj/item/pillow/random, +/turf/open/floor/wood, +/area/deathmatch) +"fA" = ( +/obj/machinery/power/tracker, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/deathmatch) +"fP" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/machinery/door/airlock/command/glass, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"fV" = ( +/obj/effect/turf_decal/tile/purple/full, +/obj/machinery/door/airlock/science/glass, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"gH" = ( +/mob/living/basic/pet/cat/feral, +/obj/structure/bed, +/obj/item/bedsheet/runtime, +/obj/machinery/light/small/blacklight/directional/south, +/turf/open/floor/wood, +/area/deathmatch) +"gI" = ( +/turf/open/indestructible/dark, +/area/deathmatch) +"gM" = ( +/obj/effect/spawner/random/structure/closet_private, +/obj/effect/decal/cleanable/vomit, +/turf/open/floor/wood, +/area/deathmatch) +"hk" = ( +/obj/effect/turf_decal/tile/green/full, +/obj/machinery/door/airlock/glass, +/turf/open/indestructible/large, +/area/deathmatch) +"ho" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible, +/area/deathmatch) +"hA" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/machinery/atmospherics/pipe/smart/simple/green/visible{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"hC" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/table/optable, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/white, +/area/deathmatch) +"hG" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/oil/slippery, +/obj/item/mecha_parts/mecha_equipment/ripleyupgrade, +/turf/open/floor/iron/dark, +/area/deathmatch) +"hR" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/indestructible/plating, +/area/deathmatch) +"is" = ( +/obj/item/grenade/spawnergrenade/cat, +/turf/open/floor/wood, +/area/deathmatch) +"iu" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/sleeper/self_control, +/turf/open/indestructible/white, +/area/deathmatch) +"ix" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"iK" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"iM" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/table/glass, +/obj/item/surgery_tray/full, +/turf/open/indestructible/white, +/area/deathmatch) +"iV" = ( +/obj/item/card/id/advanced/engioutpost, +/obj/effect/decal/remains/human/smokey, +/turf/open/indestructible, +/area/deathmatch) +"jm" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/closet/firecloset/full, +/turf/open/indestructible/dark, +/area/deathmatch) +"jn" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/light/floor, +/turf/open/indestructible/dark, +/area/deathmatch) +"ju" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"jw" = ( +/turf/open/space/basic, +/area/deathmatch) +"jR" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/machinery/rnd/production/protolathe/offstation, +/obj/machinery/light/directional/east, +/turf/open/indestructible/white, +/area/deathmatch) +"ko" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/vending/cigarette/syndicate, +/obj/machinery/light/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"kY" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin2"; + name = "Cabin 4" + }, +/turf/open/chasm{ + icon_state = "wood"; + icon = 'icons/turf/floors.dmi'; + base_icon_state = "wood"; + name = "Dorms 4" + }, +/area/deathmatch) +"lF" = ( +/obj/effect/spawner/random/structure/closet_private, +/turf/open/floor/wood, +/area/deathmatch) +"mn" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/machinery/computer/security/wooden_tv{ + pixel_x = 1; + pixel_y = 6 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"mo" = ( +/obj/effect/turf_decal/tile/yellow/full, +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/west, +/turf/open/indestructible/large, +/area/deathmatch) +"mK" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/closet/emcloset, +/turf/open/indestructible/white, +/area/deathmatch) +"mO" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"nb" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/indestructible/dark/textured, +/area/deathmatch) +"nf" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/glass/bottle/champagne/cursed, +/obj/item/food/donut/trumpet, +/turf/open/indestructible/dark, +/area/deathmatch) +"nQ" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"nT" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/obj/structure/closet/firecloset/full, +/turf/open/indestructible/white, +/area/deathmatch) +"oq" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/greenglow, +/turf/open/indestructible/white, +/area/deathmatch) +"oy" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/indestructible, +/area/deathmatch) +"oD" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/blacklight/directional/west, +/turf/open/indestructible/dark/textured, +/area/deathmatch) +"oN" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/indestructible, +/area/deathmatch) +"pD" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"pH" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/item/fireaxe/metal_h2_axe, +/turf/open/indestructible, +/area/deathmatch) +"pJ" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/light/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"pL" = ( +/mob/living/basic/lizard/wags_his_tail, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"qF" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted, +/turf/open/indestructible/white, +/area/deathmatch) +"qM" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"qV" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"rq" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/toy/plush/slimeplushie{ + pixel_y = 10 + }, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/mecha_kineticgun, +/turf/open/floor/iron/dark, +/area/deathmatch) +"ru" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/rnd/production/circuit_imprinter/offstation, +/obj/item/mecha_parts/mecha_equipment/wormhole_generator, +/turf/open/indestructible/white, +/area/deathmatch) +"rO" = ( +/obj/structure/bed, +/obj/effect/spawner/random/bedsheet, +/obj/item/melee/supermatter_sword, +/obj/machinery/light/small/blacklight/directional/south, +/turf/open/floor/wood, +/area/deathmatch) +"rP" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/table, +/obj/item/restraints/legcuffs/beartrap{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/restraints/legcuffs/beartrap{ + pixel_x = 2 + }, +/obj/item/key/janitor{ + pixel_y = 10 + }, +/turf/open/indestructible, +/area/deathmatch) +"rV" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/deathmatch) +"sn" = ( +/obj/effect/decal/cleanable/vomit, +/turf/open/floor/wood, +/area/deathmatch) +"st" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on, +/turf/open/indestructible/white, +/area/deathmatch) +"su" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/storage/belt/utility/full{ + pixel_y = 4 + }, +/obj/item/storage/belt/utility/full, +/turf/open/indestructible, +/area/deathmatch) +"sx" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"sJ" = ( +/turf/open/floor/wood, +/area/deathmatch) +"sL" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"sW" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"tR" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"uq" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/dice, +/turf/open/indestructible, +/area/deathmatch) +"uQ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"uX" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"vb" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/indestructible, +/area/deathmatch) +"vm" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"vq" = ( +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/deathmatch) +"vB" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible, +/area/deathmatch) +"vI" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple, +/turf/open/indestructible, +/area/deathmatch) +"vT" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/light/built/directional/south, +/turf/open/indestructible, +/area/deathmatch) +"wb" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/stasis{ + dir = 1 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/light/floor, +/turf/open/indestructible/white, +/area/deathmatch) +"wd" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"wj" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"wA" = ( +/obj/structure/table/glass, +/obj/item/storage/box/syringes, +/obj/item/gun/syringe, +/obj/item/reagent_containers/cup/bottle/morphine{ + pixel_y = 17; + pixel_x = -7 + }, +/obj/item/reagent_containers/cup/bottle/traitor{ + pixel_y = 17; + pixel_x = 8 + }, +/obj/item/toy/plush/moth{ + name = "Mender Moff" + }, +/turf/open/indestructible/white, +/area/deathmatch) +"wG" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/structure/closet/firecloset/full, +/turf/open/indestructible/white, +/area/deathmatch) +"wM" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/vending/wardrobe/jani_wardrobe, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/blacklight/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"xe" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/indestructible, +/area/deathmatch) +"xj" = ( +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/indestructible/white, +/area/deathmatch) +"xL" = ( +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/indestructible/large, +/area/deathmatch) +"xT" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/item/storage/medkit/brute{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/cable, +/obj/structure/table/glass, +/turf/open/indestructible/white, +/area/deathmatch) +"yq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/indestructible/white, +/area/deathmatch) +"yy" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/glass/bottle/champagne/cursed, +/obj/item/food/donut/trumpet, +/turf/open/indestructible/dark, +/area/deathmatch) +"yD" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood, +/obj/machinery/light/cold/dim/directional/east, +/turf/open/indestructible/white, +/area/deathmatch) +"yU" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"zg" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/item/kirbyplants/random, +/turf/open/indestructible, +/area/deathmatch) +"zs" = ( +/obj/effect/turf_decal/tile/blue/full, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"zt" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/machinery/light/built/directional/south, +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"zw" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"zx" = ( +/obj/item/stack/tile/iron/four{ + pixel_y = 7; + pixel_x = 10 + }, +/obj/structure/cable, +/turf/open/indestructible/plating, +/area/deathmatch) +"zJ" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"zK" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/turf/open/indestructible/dark, +/area/deathmatch) +"zZ" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/spawner/random/vending/colavend, +/turf/open/indestructible, +/area/deathmatch) +"Ac" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/light/floor, +/turf/open/indestructible, +/area/deathmatch) +"Ag" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/decal/cleanable/oil, +/turf/open/indestructible/white, +/area/deathmatch) +"AE" = ( +/obj/effect/turf_decal/tile/yellow/full, +/obj/machinery/door/airlock/engineering/glass, +/turf/open/indestructible/large, +/area/deathmatch) +"AQ" = ( +/mob/living/basic/migo/hatsune, +/obj/structure/bed, +/obj/item/bedsheet/cult, +/obj/machinery/light/small/blacklight/directional/south, +/turf/open/floor/wood, +/area/deathmatch) +"AZ" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/item/storage/medkit/brute{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/table/glass, +/turf/open/indestructible/white, +/area/deathmatch) +"Bc" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/item/clothing/suit/armor/elder_atmosian, +/obj/item/clothing/head/helmet/elder_atmosian, +/turf/open/indestructible, +/area/deathmatch) +"Bh" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/structure/table/glass, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health{ + pixel_y = 6 + }, +/obj/machinery/light/cold/dim/directional/east, +/turf/open/indestructible/white, +/area/deathmatch) +"Bu" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/atmospherics/pipe/smart/manifold/green/visible, +/turf/open/indestructible, +/area/deathmatch) +"BA" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill, +/turf/open/indestructible/white, +/area/deathmatch) +"BH" = ( +/turf/open/chasm{ + icon_state = "wood"; + icon = 'icons/turf/floors.dmi'; + base_icon_state = "wood"; + name = "Dorms 4" + }, +/area/deathmatch) +"BL" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"BV" = ( +/obj/effect/decal/cleanable/garbage, +/turf/open/indestructible, +/area/deathmatch) +"Dm" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/indestructible/dark/textured, +/area/deathmatch) +"DN" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/machinery/vending/engivend, +/turf/open/indestructible, +/area/deathmatch) +"DV" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"DZ" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/deathmatch) +"El" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/machinery/vending/wardrobe/engi_wardrobe, +/obj/machinery/light/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"Es" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/table/glass, +/obj/item/gun/ballistic/rifle/rebarxbow/forced, +/obj/item/ammo_casing/rebar, +/obj/item/ammo_casing/rebar, +/obj/item/ammo_casing/rebar, +/obj/machinery/light/built/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"EC" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/effect/decal/cleanable/ash/large, +/turf/open/indestructible, +/area/deathmatch) +"EN" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"FY" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/sleeper/self_control{ + dir = 1 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"Gl" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/mecha_part_fabricator/maint, +/turf/open/floor/iron/dark, +/area/deathmatch) +"Gm" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/machinery/recharger, +/turf/open/indestructible/dark, +/area/deathmatch) +"Gp" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/light/floor, +/turf/open/indestructible/white, +/area/deathmatch) +"Gy" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"GA" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"GF" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/light/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"GY" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/indestructible, +/area/deathmatch) +"Hj" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/obj/structure/closet/firecloset/full, +/turf/open/indestructible, +/area/deathmatch) +"Hy" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/cryo_cell{ + dir = 1 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"Ia" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"Iq" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/structure/rack, +/obj/item/gun/energy/e_gun/mini/practice_phaser, +/obj/machinery/light/built/directional/north, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Iu" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma, +/turf/open/indestructible/white, +/area/deathmatch) +"Iz" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/machinery/vending/tool, +/turf/open/indestructible, +/area/deathmatch) +"IA" = ( +/obj/effect/spawner/random/structure/closet_private, +/obj/item/toy/plush/awakenedplushie, +/turf/open/floor/wood, +/area/deathmatch) +"IJ" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/indestructible, +/area/deathmatch) +"IR" = ( +/obj/vehicle/ridden/janicart/upgraded, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/tile/iron/four{ + pixel_y = 7; + pixel_x = 10 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"JL" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/obj/structure/table/glass, +/obj/machinery/recharger, +/turf/open/indestructible/dark, +/area/deathmatch) +"JS" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow, +/turf/open/indestructible, +/area/deathmatch) +"JX" = ( +/obj/item/melee/chainofcommand/tailwhip/kitty, +/turf/open/floor/wood, +/area/deathmatch) +"Ka" = ( +/obj/machinery/door/airlock{ + id_tag = "Cabin7"; + name = "Cabin 1" + }, +/turf/open/floor/wood, +/area/deathmatch) +"Kv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/mecha_wreckage/durand, +/obj/item/mecha_parts/mecha_equipment/repair_droid, +/turf/open/indestructible/white, +/area/deathmatch) +"Lk" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"Lq" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/machinery/computer, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Lr" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/mop_bucket/janitorialcart, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"Lt" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/turf/open/indestructible, +/area/deathmatch) +"LY" = ( +/obj/item/clothing/suit/pillow_suit, +/obj/item/clothing/head/pillow_hood, +/turf/open/floor/wood, +/area/deathmatch) +"Mi" = ( +/obj/structure/cable, +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible, +/area/deathmatch) +"Mn" = ( +/turf/open/indestructible/white, +/area/deathmatch) +"ME" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/head/collectable/welding, +/obj/item/sticker/syndicate/flash{ + pixel_x = 3 + }, +/obj/item/sticker/syndicate/flash{ + pixel_x = -4 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"MG" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health{ + pixel_y = 6 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"Nb" = ( +/obj/machinery/light/floor, +/turf/open/indestructible/white, +/area/deathmatch) +"Ne" = ( +/obj/effect/turf_decal/tile/purple/full, +/obj/effect/turf_decal/tile/purple/full, +/obj/effect/turf_decal/tile/purple/full, +/obj/effect/turf_decal/tile/purple/full, +/obj/structure/table/reinforced/plasmarglass, +/obj/machinery/door/window/right/directional/north, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"Nr" = ( +/obj/machinery/vending/medical, +/turf/open/indestructible/white, +/area/deathmatch) +"Ns" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bucket, +/obj/item/mop, +/turf/open/indestructible, +/area/deathmatch) +"Nv" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/blacklight/directional/east, +/turf/open/indestructible/dark/textured, +/area/deathmatch) +"ND" = ( +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Oa" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/indestructible, +/area/deathmatch) +"Oo" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Os" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"Ot" = ( +/obj/effect/turf_decal/tile/dark_blue, +/turf/open/indestructible/dark, +/area/deathmatch) +"OF" = ( +/obj/effect/turf_decal/tile/dark_blue/full, +/obj/structure/rack, +/obj/item/cane, +/obj/structure/fireaxecabinet/directional/south, +/obj/machinery/light/built/directional/south, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"ON" = ( +/obj/effect/turf_decal/tile/blue/full, +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 8 + }, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"Ps" = ( +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"Qo" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted, +/mob/living/basic/bot/medbot, +/obj/item/mecha_parts/mecha_equipment/gravcatapult, +/turf/open/indestructible/white, +/area/deathmatch) +"QM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible, +/area/deathmatch) +"RX" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -1; + pixel_y = 3 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/toy/plush/lizard_plushie, +/turf/open/indestructible/plating, +/area/deathmatch) +"RY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/obj/item/mecha_parts/mecha_equipment/extinguisher, +/turf/open/indestructible/white, +/area/deathmatch) +"Sh" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/deathmatch) +"Sm" = ( +/obj/structure/table/reinforced, +/obj/item/grenade/gas_crystal/crystal_foam, +/turf/open/indestructible, +/area/deathmatch) +"Sn" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/table/optable, +/obj/item/reagent_containers/syringe/contraband/methamphetamine, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/white, +/area/deathmatch) +"Sy" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer, +/turf/open/indestructible/white, +/area/deathmatch) +"To" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"TZ" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/deathmatch) +"Uj" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/indestructible, +/area/deathmatch) +"Ur" = ( +/obj/machinery/washing_machine, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/deathmatch) +"UD" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"UH" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/deck, +/turf/open/indestructible, +/area/deathmatch) +"Vl" = ( +/turf/open/indestructible, +/area/deathmatch) +"Vp" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/item/kirbyplants/photosynthetic, +/turf/open/indestructible/dark, +/area/deathmatch) +"VE" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants/random/dead, +/obj/effect/decal/cleanable/vomit, +/turf/open/indestructible, +/area/deathmatch) +"Wf" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/storage/medkit/fire, +/obj/item/toy/plush/plasmamanplushie, +/turf/open/indestructible, +/area/deathmatch) +"Wy" = ( +/obj/machinery/vending/drugs, +/turf/open/indestructible/white, +/area/deathmatch) +"WE" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible, +/area/deathmatch) +"XZ" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"Yb" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/structure/closet/firecloset/full, +/turf/open/indestructible, +/area/deathmatch) +"Yo" = ( +/mob/living/basic/cat_butcherer, +/obj/structure/bed, +/obj/item/bedsheet/runtime, +/obj/machinery/light/small/blacklight/directional/north, +/turf/open/floor/wood, +/area/deathmatch) +"Yr" = ( +/mob/living/basic/alien/maid, +/obj/structure/bed, +/obj/effect/spawner/random/bedsheet, +/obj/effect/decal/cleanable/vomit, +/obj/machinery/light/small/blacklight/directional/north, +/turf/open/floor/wood, +/area/deathmatch) +"YJ" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/machinery/rnd/destructive_analyzer, +/turf/open/indestructible/white, +/area/deathmatch) +"YQ" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Za" = ( +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/indestructible/plating, +/area/deathmatch) +"Zb" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"ZO" = ( +/obj/effect/turf_decal/tile/green, +/turf/open/indestructible, +/area/deathmatch) + +(1,1,1) = {" +jw +jw +jw +jw +jw +jw +jw +jw +jw +TZ +rV +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} +(2,1,1) = {" +jw +jw +jw +jw +jw +vq +vq +vq +vq +Sh +vq +vq +vq +vq +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} +(3,1,1) = {" +jw +jw +jw +jw +jw +jw +jw +jw +rV +Sh +rV +rV +Za +Za +Za +Za +Za +Za +Za +Za +rV +rV +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} +(4,1,1) = {" +jw +jw +jw +jw +jw +vq +vq +vq +vq +Sh +vq +zJ +zJ +mK +cy +st +dA +Hy +wG +zJ +zJ +rV +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} +(5,1,1) = {" +jw +jw +jw +jw +jw +jw +jw +jw +rV +Sh +rV +Za +hC +Mn +yq +yq +yq +yq +Mn +Sn +Za +rV +rV +rV +rV +jw +jw +jw +jw +jw +jw +jw +"} +(6,1,1) = {" +jw +jw +jw +jw +jw +jw +vq +vq +vq +Sh +vq +Za +bL +Mn +Mn +Mn +wA +xj +xj +iM +zJ +zJ +zJ +Za +zJ +zJ +jw +jw +jw +jw +jw +jw +"} +(7,1,1) = {" +jw +jw +rV +rV +rV +jw +jw +jw +jw +Sh +jw +Za +wb +Mn +Mn +by +Nr +by +Mn +es +zJ +Lr +rP +uX +IR +zJ +rV +jw +jw +jw +jw +jw +"} +(8,1,1) = {" +jw +rV +zJ +Za +Za +Za +zJ +rV +jw +Sh +jw +Za +AZ +Mn +Mn +Mn +Wy +Mn +Mn +xT +zJ +wM +BV +pL +dv +Za +rV +jw +jw +jw +jw +jw +"} +(9,1,1) = {" +rV +zJ +zJ +tR +sx +cd +zJ +zJ +rV +Sh +jw +Za +iu +Mn +Mn +Mn +Nb +Mn +Mn +FY +zJ +Ns +ZO +VE +hR +zJ +rV +rV +jw +jw +jw +jw +"} +(10,1,1) = {" +rV +zJ +Lq +Gy +YQ +eW +sL +zJ +rV +Sh +rV +Za +MG +yD +qM +qM +aA +qM +qM +Bh +zJ +RX +yU +zJ +xL +zJ +zJ +Za +zJ +jw +jw +jw +"} +(11,1,1) = {" +rV +Za +nf +gI +jn +gI +Gm +zJ +zJ +zJ +zJ +zJ +zJ +zJ +zs +ON +zJ +zs +ON +zJ +zJ +zJ +hk +Za +Iu +Kv +Gl +cs +zJ +jw +jw +jw +"} +(12,1,1) = {" +jw +Za +jm +ix +gI +gI +zK +fP +nb +fP +eO +wd +pD +pD +sW +Zb +Zb +Zb +Zb +ee +pJ +ho +vm +Za +ME +Ag +rq +hG +zJ +jw +jw +jw +"} +(13,1,1) = {" +rV +zJ +Iq +Oo +gI +Ot +fg +fP +Nv +fP +iK +QM +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +vI +Ne +BA +uQ +em +RY +Za +rV +jw +jw +"} +(14,1,1) = {" +rV +Za +Lq +BL +gI +Vp +OF +zJ +zJ +zJ +Hj +Vl +Ac +Vl +Vl +Vl +Vl +Vl +Vl +Ac +Vl +Vl +zg +Za +Sy +Mn +Gp +qF +Za +rV +jw +jw +"} +(15,1,1) = {" +rV +zJ +Iq +Oo +gI +DV +ju +fP +oD +fP +iK +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +JS +fV +oq +Mn +Mn +Qo +Za +rV +jw +jw +"} +(16,1,1) = {" +jw +Za +mn +EN +gI +gI +zK +fP +Dm +fP +UD +wj +GF +WE +Uj +aD +ko +zZ +xe +GA +GA +vB +Yb +Za +ru +jR +YJ +nT +zJ +rV +rV +jw +"} +(17,1,1) = {" +rV +Za +yy +gI +jn +gI +JL +zJ +zJ +zJ +zJ +hk +zJ +hk +zJ +zJ +zJ +zJ +Za +mo +Za +AE +Za +zJ +zJ +Za +Za +Za +zJ +zJ +rV +jw +"} +(18,1,1) = {" +rV +zJ +Lq +mO +To +nQ +bX +zJ +cl +sJ +zJ +Lk +vb +vm +zJ +sJ +rO +zJ +Oa +XZ +XZ +XZ +XZ +XZ +Os +dB +dB +dB +dB +zJ +rV +jw +"} +(19,1,1) = {" +rV +zJ +zJ +qV +ND +zt +zJ +zJ +lF +sJ +Ka +Ia +Ac +dv +kY +BH +IA +zJ +Wf +Vl +Vl +Vl +Vl +Vl +EC +dB +dB +dB +dB +zJ +jw +jw +"} +(20,1,1) = {" +jw +rV +zJ +Za +Za +Za +zJ +zJ +zJ +zJ +zJ +Ia +Vl +dv +zJ +zJ +zJ +zJ +Es +Vl +Sm +DZ +Ps +Vl +vT +zJ +zJ +zJ +zJ +zJ +jw +jw +"} +(21,1,1) = {" +jw +jw +jw +jw +rV +rV +rV +zJ +Yo +JX +zJ +Ia +uq +dv +zJ +sn +AQ +zJ +su +Vl +pH +zx +Mi +Vl +eE +zJ +rV +rV +rV +jw +jw +jw +"} +(22,1,1) = {" +jw +jw +vq +jw +jw +vq +rV +zJ +gM +sJ +Ka +Ia +UH +dv +Ka +sJ +lF +zJ +IJ +iV +Vl +Vl +Vl +oy +Bu +zJ +rV +rV +jw +jw +jw +jw +"} +(23,1,1) = {" +jw +jw +vq +rV +rV +vq +jw +zJ +zJ +zJ +zJ +Ia +Vl +dv +zJ +zJ +zJ +zJ +Bc +Iz +DN +El +GY +oN +hA +zJ +rV +jw +jw +jw +jw +jw +"} +(24,1,1) = {" +jw +fA +Sh +Sh +Sh +Sh +Sh +zJ +Yr +LY +zJ +Ia +Ac +dv +zJ +is +gH +zJ +zJ +Za +Za +zJ +Za +Za +zJ +zJ +jw +jw +jw +jw +jw +jw +"} +(25,1,1) = {" +jw +rV +vq +rV +rV +vq +jw +zJ +lF +fm +Ka +zw +Ur +Lt +Ka +sJ +lF +zJ +rV +rV +jw +Sh +rV +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} +(26,1,1) = {" +jw +jw +vq +jw +jw +vq +rV +zJ +Za +zJ +zJ +zJ +Za +zJ +zJ +zJ +Za +zJ +rV +vq +vq +Sh +vq +vq +jw +jw +jw +jw +jw +jw +jw +jw +"} +(27,1,1) = {" +jw +jw +jw +jw +jw +jw +rV +rV +rV +rV +rV +jw +jw +jw +jw +rV +rV +rV +rV +jw +rV +Sh +rV +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} +(28,1,1) = {" +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +rV +Sh +rV +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} +(29,1,1) = {" +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +vq +vq +Sh +vq +vq +jw +jw +jw +jw +jw +jw +jw +jw +"} +(30,1,1) = {" +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +rV +TZ +rV +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} +(31,1,1) = {" +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +rV +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} +(32,1,1) = {" +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +jw +"} diff --git a/_maps/deathmatch/sunrise.dmm b/_maps/deathmatch/sunrise.dmm index 31594d8e2773d..b4de46385cd5c 100644 --- a/_maps/deathmatch/sunrise.dmm +++ b/_maps/deathmatch/sunrise.dmm @@ -225,7 +225,7 @@ /area/deathmatch) "oR" = ( /obj/structure/table/bronze, -/obj/item/nullrod/bostaff, +/obj/item/nullrod/claymore/bostaff, /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/west, /obj/machinery/light{ diff --git a/_maps/icebox.json b/_maps/icebox.json index 3e10e516bf35c..6e9f4000611b5 100644 --- a/_maps/icebox.json +++ b/_maps/icebox.json @@ -48,6 +48,9 @@ "job_changes": { "Captain": { "special_charter": "moon" + }, + "Cook": { + "additional_cqc_areas": ["/area/station/service/bar/atrium"] } } } diff --git a/_maps/map_files/Basketball/stadium.dmm b/_maps/map_files/Basketball/stadium.dmm index bcbb91ce4b7ef..c6b6901672553 100644 --- a/_maps/map_files/Basketball/stadium.dmm +++ b/_maps/map_files/Basketball/stadium.dmm @@ -405,7 +405,7 @@ /turf/open/floor/wood, /area/centcom/basketball) "Ax" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/wood, /area/centcom/basketball) "AC" = ( diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index acd43eff48546..351066a4417a4 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -152,6 +152,20 @@ }, /turf/open/floor/grass/Airless, /area/station/hallway/primary/central/aft) +"ael" = ( +/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/machinery/airlock_controller/incinerator_atmos{ + pixel_x = -40; + pixel_y = -8 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "aem" = ( /obj/machinery/power/terminal, /obj/structure/cable, @@ -191,6 +205,21 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"aeH" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/layer2{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/button/door/incinerator_vent_atmos_aux{ + pixel_x = 8; + pixel_y = 24 + }, +/obj/machinery/button/door/incinerator_vent_atmos_main{ + pixel_x = 8; + pixel_y = 36 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "aeX" = ( /obj/structure/window/spawner/directional/east, /obj/item/kirbyplants/random, @@ -513,12 +542,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) -"amT" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/chair/stool/bar/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "anb" = ( /obj/effect/turf_decal/siding/thinplating_new/terracotta, /obj/effect/turf_decal/siding/red/corner{ @@ -1654,23 +1677,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"aGI" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/trash/can/food/pine_nuts{ - pixel_x = 16; - pixel_y = 6 - }, -/obj/machinery/cell_charger{ - pixel_x = -1; - pixel_y = 2 - }, -/obj/item/stock_parts/power_store/cell/high{ - pixel_x = -1; - pixel_y = 1 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "aGU" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/iron, @@ -1734,15 +1740,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"aIr" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/south, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/turf/open/floor/iron/kitchen/small, -/area/station/service/kitchen) "aIu" = ( /obj/structure/bookcase/random/reference, /obj/machinery/camera/autoname/directional/north, @@ -2052,10 +2049,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"aOx" = ( -/obj/structure/water_source/puddle, -/turf/open/misc/asteroid, -/area/station/maintenance/starboard/greater) "aOz" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -2647,6 +2640,13 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"baO" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/spawner/random/entertainment/arcade{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "baP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2887,6 +2887,29 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"bgJ" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot_white, +/obj/item/clothing/gloves/color/fyellow, +/obj/item/stack/package_wrap{ + pixel_y = 5 + }, +/obj/item/stack/package_wrap{ + pixel_y = 2 + }, +/obj/item/storage/box{ + desc = "It smells of monkey business..."; + name = "Empty Gorillacube Box" + }, +/obj/item/weldingtool, +/obj/item/radio{ + pixel_y = 3; + pixel_x = -6 + }, +/obj/item/assembly/signaler, +/turf/open/floor/iron/smooth, +/area/station/commons/storage/tools) "bgQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -3060,6 +3083,13 @@ /obj/structure/hedge, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) +"bli" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/supermatter/room) "blk" = ( /obj/effect/turf_decal/siding/white/corner{ dir = 1 @@ -3146,6 +3176,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs, /area/station/maintenance/department/engine/atmos) +"bmR" = ( +/obj/structure/table, +/obj/item/toy/foamblade, +/obj/item/analyzer{ + pixel_y = 8; + pixel_x = -9 + }, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "bmT" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 @@ -3350,10 +3389,6 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/cafeteria, /area/station/science/breakroom) -"bpM" = ( -/obj/structure/water_source/puddle, -/turf/open/floor/grass, -/area/station/security/prison/garden) "bpS" = ( /obj/item/kirbyplants/random/fullysynthetic, /obj/item/radio/intercom/directional/north, @@ -3618,16 +3653,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security) -"buw" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "CO2 to Pure" - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "buA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4380,6 +4405,27 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/service/chapel) +"bJH" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + name = "Engineering Office" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "atmos_airlock_1" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "bJK" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -4922,6 +4968,13 @@ }, /turf/open/space/basic, /area/space/nearstation) +"bWp" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "bWs" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -4929,6 +4982,12 @@ /obj/machinery/chem_heater/withbuffer, /turf/open/floor/iron, /area/station/science/xenobiology) +"bXb" = ( +/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/electrical) "bXi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5086,6 +5145,25 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"cag" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + name = "Engineering Office" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "atmos_airlock_1" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/iron, +/area/station/engineering/atmos/office) "cam" = ( /obj/machinery/flasher/directional/east{ id = "AI"; @@ -5205,6 +5283,23 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/meeting_room) +"cbv" = ( +/obj/structure/table/reinforced, +/obj/item/folder/yellow{ + pixel_x = 13; + pixel_y = 1 + }, +/obj/item/flashlight/lamp{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = 15; + pixel_y = 7 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/engineering/break_room) "cbH" = ( /obj/structure/cable, /obj/item/kirbyplants/random, @@ -5250,6 +5345,15 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/engineering/storage_shared) +"ccC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/elevatorshaft, +/area/station/engineering/break_room) "ccD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5665,6 +5769,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"ckR" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Plasma to Pure" + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "ckV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6231,16 +6345,6 @@ }, /turf/open/floor/wood, /area/station/engineering/atmos/storage) -"cwr" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage) "cwt" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -7281,6 +7385,15 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"cQV" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Storage" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, +/turf/open/floor/iron/smooth_half{ + dir = 8 + }, +/area/station/engineering/main) "cRc" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7491,6 +7604,12 @@ }, /turf/closed/wall, /area/station/service/library) +"cUB" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "cUH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -7693,6 +7812,15 @@ /obj/structure/sign/departments/telecomms/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"cYp" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/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/fitness/recreation/entertainment) "cYt" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -7885,9 +8013,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"dbg" = ( -/turf/closed/wall/r_wall/rust, -/area/station/maintenance/department/electrical) "dbs" = ( /obj/structure/chair/plastic{ dir = 8 @@ -8322,6 +8447,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/textured_half, /area/station/commons/fitness/locker_room) +"diG" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/small/directional/east, +/obj/structure/chair/stool/bar/directional/south, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "diI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral, @@ -8453,6 +8585,20 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/hallway/secondary/construction) +"dkX" = ( +/obj/structure/railing{ + 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 + }, +/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/engineering/break_room) "dlj" = ( /obj/structure/reflector/single/anchored{ dir = 9 @@ -8682,13 +8828,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"dpz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/west, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "dpH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ dir = 8 @@ -8832,6 +8971,13 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) +"dti" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/engineering/break_room) "dtk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/closed/wall, @@ -8955,10 +9101,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark/herringbone, /area/station/ai_monitored/command/nuke_storage) -"dvD" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/smooth_large, -/area/station/engineering/supermatter/room) "dvJ" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/dark_red/fourcorners, @@ -8984,6 +9126,28 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/tram) +"dwd" = ( +/obj/structure/table/reinforced, +/obj/structure/desk_bell{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "dwr" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/flora/rock/pile/jungle/style_random, @@ -9163,12 +9327,6 @@ /obj/item/radio/intercom/chapel/directional/east, /turf/open/floor/iron/terracotta/diagonal, /area/station/service/chapel/office) -"dzp" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/station/maintenance/department/engine/atmos) "dzE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -9177,6 +9335,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"dzH" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/turf/open/floor/engine/plasma, +/area/station/engineering/atmos) "dAn" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -10095,13 +10258,6 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"dUn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/turf/open/floor/iron, -/area/station/engineering/atmos) "dUw" = ( /obj/structure/railing{ dir = 4 @@ -10274,11 +10430,6 @@ dir = 1 }, /area/station/science/xenobiology) -"dXX" = ( -/obj/item/reagent_containers/cup/watering_can/wood, -/obj/structure/table, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "dYc" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -10678,6 +10829,10 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"efn" = ( +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) "efy" = ( /obj/item/kirbyplants/organic/plant21, /obj/machinery/status_display/ai/directional/west, @@ -10814,13 +10969,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"ehP" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/light/small/directional/east, -/obj/structure/chair/stool/bar/directional/south, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "ehT" = ( /obj/machinery/door/airlock{ id_tag = "commiss2"; @@ -10921,6 +11069,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"ejA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/gps{ + pixel_y = 5; + pixel_x = 13 + }, +/obj/item/storage/toolbox/emergency/old, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "ejL" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden, /obj/effect/turf_decal/tile/yellow, @@ -11022,20 +11185,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/security) -"elb" = ( -/obj/structure/table/reinforced, -/obj/structure/displaycase/forsale/kitchen{ - pixel_y = 5 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/turf/open/floor/plating, -/area/station/service/kitchen) "elc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12382,6 +12531,14 @@ /obj/effect/turf_decal/stripes/asteroid/end, /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) +"eKd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/light/small/directional/west, +/obj/machinery/airlock_sensor/incinerator_atmos{ + pixel_y = -20 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "eKf" = ( /obj/structure/table, /obj/item/storage/box/donkpockets/donkpocketpizza, @@ -12561,6 +12718,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"eOX" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/item/kirbyplants/random, +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "eOY" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 4 @@ -12675,13 +12839,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"eRi" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "eRy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -13990,6 +14147,26 @@ /obj/machinery/door/window/brigdoor/right/directional/north, /turf/open/floor/iron/textured_large, /area/station/security/checkpoint/customs) +"frT" = ( +/obj/effect/decal/cleanable/molten_object, +/obj/effect/landmark/event_spawn, +/obj/structure/table, +/obj/item/reagent_containers/cup/bottle/welding_fuel{ + pixel_y = -3; + pixel_x = 13 + }, +/obj/item/stack/sheet/iron/ten{ + pixel_y = -6; + pixel_x = -2 + }, +/obj/item/hand_labeler{ + pixel_y = -15 + }, +/obj/item/reagent_containers/cup/watering_can{ + pixel_y = 12 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "frZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14067,16 +14244,6 @@ }, /turf/open/floor/wood/tile, /area/station/maintenance/aft) -"ftj" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Atmospherics Maintenance" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "fts" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14335,6 +14502,11 @@ "fxi" = ( /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) +"fxp" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "fxF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14390,14 +14562,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/plating, /area/station/service/chapel/funeral) -"fyC" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/light/small/directional/east, -/obj/structure/chair/stool/bar/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "fyH" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -14921,14 +15085,6 @@ }, /turf/open/floor/iron/smooth_large, /area/station/engineering/supermatter/room) -"fGk" = ( -/obj/machinery/smartfridge, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/turf/open/floor/iron/kitchen/small, -/area/station/service/kitchen) "fGT" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -16444,6 +16600,10 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"ggr" = ( +/obj/item/pickaxe, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) "ggw" = ( /obj/effect/turf_decal/stripes/white/end{ dir = 1 @@ -16635,6 +16795,13 @@ }, /turf/open/floor/iron/dark/corner, /area/station/science/xenobiology) +"gjn" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "gjE" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt/dust, @@ -16900,15 +17067,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/execution/transfer) -"goY" = ( -/obj/structure/disposalpipe/segment{ - 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/plating, -/area/station/maintenance/starboard/fore) "goZ" = ( /obj/structure/rack, /obj/item/clothing/head/costume/papersack/smiley, @@ -17924,12 +18082,6 @@ }, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/captain/private) -"gGt" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Atmospherics Tank - Mix" - }, -/turf/open/floor/engine/vacuum, -/area/station/engineering/atmos) "gGw" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/newscaster/directional/west, @@ -18555,22 +18707,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) -"gQG" = ( -/obj/structure/window/spawner/directional/east, -/obj/structure/closet/crate, -/obj/effect/turf_decal/bot_white, -/obj/item/stack/package_wrap{ - pixel_y = 5 - }, -/obj/item/stack/package_wrap{ - pixel_y = 2 - }, -/obj/item/storage/box{ - desc = "It smells of monkey business..."; - name = "Empty Gorillacube Box" - }, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) "gRm" = ( /obj/structure/flora/bush/flowers_br, /obj/structure/flora/bush/flowers_pp/style_random, @@ -18669,13 +18805,6 @@ /obj/structure/sign/departments/cargo/directional/west, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/fore) -"gTa" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "gTb" = ( /turf/open/floor/iron/dark/side{ dir = 8 @@ -18816,6 +18945,12 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/engine/o2, /area/station/engineering/atmos) +"gUQ" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine/atmos) "gUV" = ( /obj/structure/cable, /obj/structure/chair/stool/directional/south{ @@ -19515,22 +19650,6 @@ dir = 4 }, /area/station/commons/storage/tools) -"hgd" = ( -/obj/structure/table, -/obj/item/clothing/head/collectable/paper{ - pixel_x = -6; - pixel_y = -2 - }, -/obj/item/paper/crumpled{ - pixel_x = 5; - pixel_y = 8 - }, -/obj/item/trash/candle{ - pixel_x = 7; - pixel_y = 1 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "hgf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/green{ @@ -19634,6 +19753,12 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"hhr" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine/atmos) "hhL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19876,17 +20001,6 @@ dir = 4 }, /area/station/commons/storage/tools) -"hmj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/storage/toolbox/emergency/old, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "hmk" = ( /obj/structure/chair/stool/directional/east, /turf/open/floor/iron/smooth, @@ -19932,27 +20046,6 @@ dir = 1 }, /area/station/service/bar/backroom) -"hmQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/toolbox/mechanical/old{ - pixel_x = 15; - pixel_y = 15 - }, -/obj/item/crowbar/large{ - pixel_y = 18 - }, -/obj/item/clothing/head/costume/pirate{ - pixel_x = 17; - pixel_y = -10 - }, -/obj/item/clothing/suit/hazardvest{ - pixel_x = -3; - pixel_y = -2 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "hnf" = ( /obj/item/bikehorn/rubberducky{ pixel_x = -6; @@ -20113,6 +20206,11 @@ dir = 8 }, /area/station/science/lobby) +"hqH" = ( +/obj/item/reagent_containers/cup/watering_can/wood, +/obj/structure/table, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "hqM" = ( /obj/structure/toiletbong{ dir = 1 @@ -20137,16 +20235,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"hrl" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/west, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/turf/open/floor/iron, -/area/station/service/kitchen) "hrx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20319,19 +20407,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"huh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/delivery/white, -/obj/structure/rack, -/obj/item/stack/cable_coil/five, -/obj/item/pickaxe, -/obj/item/wrench, -/obj/item/radio/off, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) "huj" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -20479,6 +20554,18 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"hwF" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/south, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/obj/effect/turf_decal/siding/end{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "hwJ" = ( /turf/closed/wall/rust, /area/space/nearstation) @@ -20941,6 +21028,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"hEw" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/light/small/directional/east, +/obj/structure/chair/stool/bar/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "hED" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -21014,6 +21109,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) +"hGa" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Atmospherics Tank - Mix" + }, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) "hGb" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/storage) @@ -21819,6 +21920,13 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/science/genetics) +"hWa" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) "hWk" = ( /obj/machinery/vending/coffee, /obj/structure/extinguisher_cabinet/directional/south, @@ -21929,12 +22037,6 @@ }, /turf/open/floor/iron/textured_half, /area/station/security/prison) -"hYc" = ( -/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/iron/dark, -/area/station/engineering/atmospherics_engine) "hYf" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -22147,6 +22249,13 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"ibF" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "ibI" = ( /obj/effect/turf_decal/siding/white/corner{ dir = 8 @@ -23248,6 +23357,13 @@ "itb" = ( /turf/closed/wall/r_wall/rust, /area/station/ai_monitored/turret_protected/aisat/maint) +"itr" = ( +/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, +/turf/open/floor/iron, +/area/station/engineering/atmos) "itw" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -23423,12 +23539,6 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"iwi" = ( -/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/electrical) "iwt" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 8 @@ -23757,16 +23867,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"iBz" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "O2 to Airmix" - }, -/obj/machinery/light/no_nightlight/directional/north, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "iBE" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/cable, @@ -23927,6 +24027,26 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos) +"iDV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/crowbar/large{ + pixel_y = 18 + }, +/obj/item/clothing/head/costume/pirate{ + pixel_x = 15; + pixel_y = -3 + }, +/obj/item/clothing/suit/hazardvest{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/wrench{ + pixel_y = 15 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "iEi" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -24127,17 +24247,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"iHo" = ( -/obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "Supermatter Chamber" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "iHq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24427,13 +24536,6 @@ /obj/effect/spawner/random/trash/food_packaging, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"iKM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "iLe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24954,13 +25056,6 @@ /obj/structure/sign/warning/pods/directional/west, /turf/open/floor/iron/checker, /area/station/security/breakroom) -"iST" = ( -/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, -/turf/open/floor/iron, -/area/station/engineering/atmos) "iTe" = ( /obj/effect/turf_decal/siding/red{ dir = 6 @@ -25036,9 +25131,6 @@ /obj/item/crowbar/large/old, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_command) -"iUc" = ( -/turf/open/floor/engine/vacuum, -/area/station/engineering/atmos) "iUh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26661,6 +26753,17 @@ /obj/structure/cable, /turf/open/floor/iron/dark/small, /area/station/command/heads_quarters/captain/private) +"jvm" = ( +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "jvB" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -27437,6 +27540,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold/dark/hidden, /turf/open/floor/circuit, /area/station/tcommsat/server) +"jHy" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_y = 6 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/engineering/break_room) "jHB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27621,10 +27736,6 @@ /obj/item/stack/sheet/cardboard, /turf/open/floor/iron, /area/station/maintenance/department/engine/atmos) -"jJY" = ( -/obj/effect/spawner/random/structure/crate_loot, -/turf/open/floor/plating, -/area/station/maintenance/department/electrical) "jKa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -27673,6 +27784,18 @@ /obj/machinery/door/window/right/directional/north, /turf/open/floor/iron, /area/station/security/prison/workout) +"jKK" = ( +/obj/machinery/smartfridge, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding/end{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "jKS" = ( /obj/structure/table/reinforced, /obj/item/trash/cheesie{ @@ -27716,10 +27839,6 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/smooth, /area/station/engineering/main) -"jLz" = ( -/obj/machinery/button/ignition/incinerator/atmos, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) "jLB" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -27802,6 +27921,15 @@ /obj/structure/spider/stickyweb, /turf/open/floor/iron/small, /area/station/maintenance/department/engine/atmos) +"jMQ" = ( +/obj/machinery/atmospherics/components/binary/pump/off{ + name = "O2 To Pure" + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "jMX" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -28214,6 +28342,13 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron, /area/station/cargo/storage) +"jTC" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "jTD" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ dir = 8 @@ -28651,6 +28786,31 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) +"kad" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/spawner/random/food_or_drink/condiment, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "kam" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/disposal/delivery_chute{ @@ -28715,6 +28875,22 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) +"kaL" = ( +/obj/structure/table/reinforced, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 5 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding/end, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "kaP" = ( /obj/structure/lattice, /obj/structure/grille, @@ -29717,20 +29893,6 @@ /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) -"krp" = ( -/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/airlock_controller/incinerator_atmos{ - pixel_x = -40; - pixel_y = -8 - }, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "krz" = ( /obj/structure/cable, /turf/open/floor/iron/stairs, @@ -29862,6 +30024,13 @@ }, /turf/open/floor/catwalk_floor/iron, /area/station/engineering/gravity_generator) +"ksD" = ( +/obj/machinery/vending/autodrobe, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/turf/open/floor/iron/small, +/area/station/commons/fitness/locker_room) "ksJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30893,6 +31062,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"kLk" = ( +/obj/docking_port/stationary/syndicate/northeast, +/turf/open/space/basic, +/area/space) "kLo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30958,6 +31131,10 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"kNv" = ( +/obj/machinery/air_sensor/mix_tank, +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) "kNx" = ( /turf/open/floor/engine/o2, /area/station/engineering/atmos) @@ -31740,15 +31917,6 @@ /obj/structure/tram, /turf/open/floor/tram, /area/station/maintenance/port/aft) -"lbJ" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engineering Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, -/turf/open/floor/iron/smooth_half{ - dir = 8 - }, -/area/station/maintenance/department/engine/atmos) "lbO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31879,14 +32047,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/textured_half, /area/station/security/brig) -"ldP" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "lee" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/purple/opposingcorners, @@ -32141,11 +32301,6 @@ dir = 1 }, /area/station/hallway/primary/aft) -"lgy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/prison/garden) "lgD" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/iron/smooth_large, @@ -32172,6 +32327,10 @@ /obj/item/camera, /turf/open/floor/iron, /area/station/security/prison/workout) +"lhd" = ( +/obj/structure/water_source/puddle, +/turf/open/floor/grass, +/area/station/security/prison/garden) "lhi" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/button/door/directional/north{ @@ -32326,6 +32485,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/rust, /area/station/maintenance/department/engine/atmos) +"ljc" = ( +/obj/structure/disposalpipe/segment{ + 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/plating, +/area/station/maintenance/starboard/fore) "ljg" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -33013,14 +33181,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/engineering/storage_shared) -"ltY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, -/obj/machinery/light/small/directional/west, -/obj/machinery/airlock_sensor/incinerator_atmos{ - pixel_y = -20 - }, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "luc" = ( /obj/machinery/door/airlock{ id_tag = "ShowerToilet1"; @@ -33405,6 +33565,16 @@ }, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"lzF" = ( +/obj/structure/table, +/obj/item/screwdriver{ + pixel_y = -6 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 7 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "lzG" = ( /obj/structure/flora/bush/jungle/c/style_3{ pixel_x = -7; @@ -33903,6 +34073,11 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/science/lower) +"lGO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison/garden) "lGT" = ( /obj/structure/chair/stool/directional/south, /obj/effect/decal/cleanable/dirt, @@ -34386,11 +34561,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/diagonal, /area/station/engineering/lobby) -"lNN" = ( -/obj/structure/table, -/obj/item/toy/foamblade, -/turf/open/floor/iron/dark/small, -/area/station/commons/fitness/locker_room) "lNQ" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/firealarm/directional/north, @@ -34573,10 +34743,6 @@ dir = 8 }, /area/station/science/xenobiology) -"lRx" = ( -/obj/machinery/air_sensor/mix_tank, -/turf/open/floor/engine/vacuum, -/area/station/engineering/atmos) "lRy" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, @@ -34803,14 +34969,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"lVv" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 - }, -/obj/effect/landmark/start/atmospheric_technician, -/turf/open/floor/wood, -/area/station/engineering/break_room) "lVy" = ( /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 8 @@ -35073,6 +35231,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"lYP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/machinery/firealarm/directional/south, +/obj/item/storage/belt/utility, +/turf/open/floor/iron/smooth, +/area/station/commons/storage/tools) "lYT" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/engineering/atmospherics_portable, @@ -35183,17 +35350,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/hallway/secondary/dock) -"lZP" = ( -/obj/structure/table, -/obj/item/clothing/head/fedora/det_hat/minor{ - pixel_x = 7; - pixel_y = 9 - }, -/obj/item/toy/eightball{ - pixel_x = -4 - }, -/turf/open/floor/iron/dark/small, -/area/station/commons/fitness/locker_room) "lZR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/duct, @@ -35509,13 +35665,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/engineering/atmos) -"mgO" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/spawner/random/entertainment/arcade{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "mgR" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 9 @@ -36119,25 +36268,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/dock) -"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, @@ -37238,6 +37368,23 @@ }, /turf/open/floor/wood, /area/station/engineering/main) +"mMf" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/cell_charger{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/assembly/timer{ + pixel_x = 14; + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "mMp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38023,6 +38170,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"nbN" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) "ncb" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, @@ -38840,16 +38991,6 @@ }, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/supply) -"nrJ" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Plasma to Pure" - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "nsc" = ( /obj/structure/cable, /obj/item/kirbyplants/organic/applebush, @@ -39095,6 +39236,17 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/solars/starboard/aft) +"nuV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "nuY" = ( /obj/structure/broken_flooring/pile/directional/east, /obj/structure/alien/weeds/node, @@ -39208,6 +39360,25 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/storage) +"nxY" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/spawner/random/food_or_drink/donuts, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/effect/turf_decal/siding{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "nyd" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -39520,11 +39691,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/service/chapel) -"nDq" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "nDJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/smooth_large, @@ -39656,6 +39822,30 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"nFT" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/item/folder/red{ + pixel_y = 3 + }, +/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!" + }, +/obj/item/wirecutters{ + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "nFU" = ( /obj/machinery/door/airlock{ name = "Maintenance" @@ -39761,22 +39951,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/office) -"nHq" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow{ - pixel_x = 13; - pixel_y = 1 - }, -/obj/item/flashlight/lamp{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = 15; - pixel_y = 7 - }, -/turf/open/floor/wood, -/area/station/engineering/break_room) "nHu" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -39860,12 +40034,6 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"nIF" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/spawner/random/entertainment/arcade, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "nIJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -39944,6 +40112,13 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"nKe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "nKj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40183,21 +40358,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"nPY" = ( -/obj/structure/table/reinforced, -/obj/structure/desk_bell{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/turf/open/floor/plating, -/area/station/service/kitchen) "nQa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -40267,19 +40427,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/smooth, /area/station/engineering/break_room) -"nQE" = ( -/obj/structure/railing{ - 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 - }, -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/small, -/area/station/engineering/break_room) "nQH" = ( /obj/structure/closet{ name = "Paramedic Supplies" @@ -40886,6 +41033,16 @@ /obj/machinery/computer/records/security, /turf/open/floor/iron, /area/station/security/brig/entrance) +"ocZ" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "odh" = ( /obj/effect/landmark/atmospheric_sanity/ignore_area, /turf/open/floor/plating, @@ -41171,9 +41328,9 @@ /turf/open/floor/iron/dark/small, /area/station/security/checkpoint/customs) "ohN" = ( -/obj/item/kirbyplants/random, /obj/item/radio/intercom/directional/north, /obj/machinery/firealarm/directional/west, +/obj/machinery/vending/cytopro, /turf/open/floor/iron/white, /area/station/science/cytology) "oig" = ( @@ -43079,25 +43236,6 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"oRL" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering{ - name = "Engineering Office" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "atmos_airlock_1" - }, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/iron, -/area/station/engineering/atmos/office) "oRP" = ( /obj/machinery/mech_bay_recharge_port{ dir = 1 @@ -43145,6 +43283,14 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"oSj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/west, +/obj/effect/landmark/event_spawn, +/obj/machinery/portable_atmospherics/pump/lil_pump, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "oSv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/computer/rdconsole{ @@ -43201,12 +43347,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"oTK" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "oTM" = ( /obj/structure/table, /obj/effect/turf_decal/siding{ @@ -43351,11 +43491,6 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron, /area/station/security/execution/transfer) -"oVN" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "oVW" = ( /obj/effect/turf_decal/weather/dirt{ dir = 5 @@ -43436,6 +43571,10 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"oYf" = ( +/obj/machinery/button/ignition/incinerator/atmos, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) "oYi" = ( /obj/effect/turf_decal/trimline/neutral/line, /obj/effect/turf_decal/trimline/neutral/line{ @@ -43485,6 +43624,15 @@ /obj/item/radio/intercom/command/directional/east, /turf/open/floor/iron/dark, /area/station/command/corporate_dock) +"oZg" = ( +/obj/structure/chair/stool/directional/south, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 + }, +/obj/effect/landmark/start/atmospheric_technician, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/engineering/break_room) "oZi" = ( /obj/effect/turf_decal/siding/wideplating/dark/corner, /obj/effect/turf_decal/tile/dark_red/half/contrasted{ @@ -44183,6 +44331,18 @@ /obj/item/weldingtool, /turf/open/floor/iron/dark, /area/station/maintenance/department/engine/atmos) +"pkK" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters" + }, +/obj/effect/turf_decal/siding/end{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "pkQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -44345,6 +44505,11 @@ /obj/structure/flora/bush/jungle/c/style_random, /turf/open/floor/grass, /area/station/service/chapel) +"pnO" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "pnQ" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 @@ -44569,6 +44734,10 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"prd" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/supermatter/room) "prf" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -46131,6 +46300,18 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"pTk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/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/fitness/recreation/entertainment) "pTq" = ( /obj/machinery/door/airlock/maintenance{ name = "Crematorium Maintenance" @@ -46151,6 +46332,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_large, /area/station/service/lawoffice) +"pTA" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/spawner/random/entertainment/arcade, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "pTZ" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 @@ -46466,6 +46653,14 @@ /obj/structure/broken_flooring/pile/directional/east, /turf/open/floor/plating, /area/station/hallway/secondary/dock) +"pYi" = ( +/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/plating, +/area/station/maintenance/starboard/fore) "pYr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46917,14 +47112,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/small, /area/station/commons/toilet/restrooms) -"qgK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/tools) "qhh" = ( /obj/structure/cable, /obj/structure/table/glass, @@ -46943,6 +47130,16 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/white, /area/station/science/cytology) +"qht" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "CO2 to Pure" + }, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "qhD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47559,14 +47756,6 @@ }, /turf/open/floor/iron/dark/small, /area/station/maintenance/aft) -"qux" = ( -/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/plating, -/area/station/maintenance/starboard/fore) "quO" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/east, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -47621,6 +47810,11 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"qwh" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "qwq" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/computer/prisoner/management{ @@ -47710,14 +47904,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/tcommsat/server) -"qxF" = ( -/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/plating/elevatorshaft, -/area/station/engineering/break_room) "qxN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -49088,13 +49274,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"qUI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "qUJ" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -50320,27 +50499,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"rpc" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering{ - name = "Engineering Office" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "atmos_airlock_1" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/iron, -/area/station/engineering/atmos/office) "rpg" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -50668,6 +50826,14 @@ "ruD" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"ruR" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Airlock" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/turf/open/floor/plating, +/area/station/engineering/supermatter/room) "ruS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51155,17 +51321,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/lone, /area/station/service/abandoned_gambling_den) -"rDc" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/yellow{ - dir = 4 - }, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_y = 6 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood, -/area/station/engineering/break_room) "rDj" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 @@ -51572,11 +51727,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"rKa" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "rKv" = ( /obj/structure/broken_flooring/singular/directional/east, /turf/open/floor/iron, @@ -51750,10 +51900,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron, /area/station/security) -"rNw" = ( -/obj/effect/spawner/random/structure/girder, -/turf/open/floor/plating, -/area/station/maintenance/department/electrical) "rNB" = ( /obj/machinery/light/small/directional/west, /turf/open/floor/catwalk_floor/iron_smooth, @@ -52204,24 +52350,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"rVt" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/obj/effect/spawner/random/food_or_drink/condiment, -/turf/open/floor/plating, -/area/station/service/kitchen) "rVy" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 4 @@ -52430,6 +52558,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, +/obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/station/science/cytology) "rYx" = ( @@ -52458,10 +52587,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) -"rYM" = ( -/obj/item/pickaxe, -/turf/open/floor/plating, -/area/station/maintenance/department/electrical) "rZb" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -52940,6 +53065,11 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"siN" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "sjl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53138,6 +53268,7 @@ name = "Detective Requests Console" }, /obj/machinery/light/small/directional/west, +/obj/structure/detectiveboard/directional/west, /turf/open/floor/wood, /area/station/security/detectives_office) "smf" = ( @@ -53451,6 +53582,9 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/station/maintenance/port/greater) +"srw" = ( +/turf/closed/wall/r_wall/rust, +/area/station/maintenance/department/electrical) "srx" = ( /obj/machinery/power/port_gen/pacman, /obj/effect/turf_decal/bot{ @@ -53570,13 +53704,6 @@ dir = 1 }, /area/station/maintenance/department/science/xenobiology) -"stG" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "stH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/brown/half, @@ -53624,6 +53751,14 @@ }, /turf/open/floor/carpet/purple, /area/station/commons/dorms) +"sue" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "sul" = ( /obj/effect/turf_decal/siding{ dir = 1 @@ -54377,6 +54512,20 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/starboard/central) +"sHW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/delivery/white, +/obj/structure/rack, +/obj/item/hand_labeler, +/obj/item/stack/cable_coil/five, +/obj/item/pickaxe, +/obj/item/wrench, +/obj/item/radio/off, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron/smooth, +/area/station/commons/storage/tools) "sHX" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 6 @@ -54416,6 +54565,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) +"sJf" = ( +/obj/structure/water_source/puddle, +/turf/open/misc/asteroid, +/area/station/maintenance/starboard/greater) "sJg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /obj/machinery/door/airlock/command{ @@ -55284,6 +55437,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/hallway/secondary/recreation) +"sWZ" = ( +/obj/structure/table, +/obj/item/toy/eightball{ + pixel_x = -4 + }, +/obj/item/wirecutters{ + pixel_y = 17; + pixel_x = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/commons/fitness/locker_room) "sXi" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, @@ -55447,29 +55611,6 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/white/small, /area/station/medical/cryo) -"sYS" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchenshutters"; - name = "Kitchen Shutters" - }, -/obj/effect/spawner/random/food_or_drink/donuts, -/turf/open/floor/plating, -/area/station/service/kitchen) -"sYY" = ( -/obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "Supermatter Chamber" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "sZo" = ( /obj/effect/turf_decal/siding/thinplating_new/light{ dir = 10 @@ -56202,6 +56343,12 @@ }, /turf/open/misc/sandy_dirt, /area/station/security/tram) +"tlJ" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/item/kirbyplants/random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "tlX" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -56525,6 +56672,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/commons/fitness/recreation) +"tqn" = ( +/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/iron/dark, +/area/station/engineering/atmospherics_engine) "tqo" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -56743,18 +56896,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/server) -"tuI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/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/fitness/recreation/entertainment) "tuP" = ( /obj/machinery/light/small/directional/east, /obj/item/kirbyplants/random, @@ -56927,21 +57068,6 @@ }, /turf/open/floor/grass, /area/station/service/chapel) -"twP" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/layer2{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - pixel_x = 8; - pixel_y = 24 - }, -/obj/machinery/button/door/incinerator_vent_atmos_main{ - pixel_x = 8; - pixel_y = 36 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "twQ" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 9 @@ -58714,6 +58840,9 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/project) +"uct" = ( +/turf/open/floor/engine/vacuum, +/area/station/engineering/atmos) "ucy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/siding/red{ @@ -59988,6 +60117,11 @@ "uvA" = ( /turf/closed/wall/r_wall, /area/station/command/gateway) +"uvG" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/spawner/random/entertainment/arcade, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation/entertainment) "uwB" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 4 @@ -60122,11 +60256,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"uAD" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/effect/spawner/random/entertainment/arcade, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "uAK" = ( /obj/machinery/computer/security, /obj/effect/turf_decal/siding/red{ @@ -60243,15 +60372,6 @@ /obj/item/mop, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"uCg" = ( -/obj/machinery/atmospherics/components/binary/pump/off{ - name = "O2 To Pure" - }, -/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "uCo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61136,6 +61256,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"uQO" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/clothing/suit/hooded/wintercoat/engineering, +/obj/structure/cable, +/turf/open/floor/iron/small, +/area/station/engineering/break_room) "uQT" = ( /obj/machinery/air_sensor/carbon_tank, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -61515,15 +61641,6 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"uXe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/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/fitness/recreation/entertainment) "uXs" = ( /obj/structure/window/spawner/directional/east, /obj/structure/window/spawner/directional/west, @@ -61685,14 +61802,6 @@ /obj/item/kirbyplants/organic/applebush, /turf/open/floor/iron/smooth, /area/station/hallway/secondary/command) -"vaY" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engine Airlock" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/turf/open/floor/plating, -/area/station/engineering/supermatter/room) "vba" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -63692,11 +63801,6 @@ /obj/effect/turf_decal/tile/dark_red/opposingcorners, /turf/open/floor/iron, /area/station/security/lockers) -"vDS" = ( -/obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/suit/hooded/wintercoat/engineering, -/turf/open/floor/iron/small, -/area/station/engineering/break_room) "vDV" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/cmo) @@ -63945,6 +64049,15 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/engine, /area/station/science/xenobiology) +"vHU" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engineering Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, +/turf/open/floor/iron/smooth_half{ + dir = 8 + }, +/area/station/maintenance/department/engine/atmos) "vHV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -65697,12 +65810,6 @@ /obj/structure/tank_holder/extinguisher, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"wjw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/station/engineering/supermatter/room) "wjG" = ( /obj/structure/filingcabinet, /turf/open/floor/iron/dark/small, @@ -66932,17 +67039,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"wDO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "wEf" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -67394,11 +67490,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/service/library) -"wMy" = ( -/obj/machinery/portable_atmospherics/canister/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/turf/open/floor/engine/plasma, -/area/station/engineering/atmos) "wMz" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -67674,12 +67765,6 @@ /obj/effect/landmark/navigate_destination/disposals, /turf/open/floor/iron, /area/station/maintenance/hallway/abandoned_command) -"wOZ" = ( -/obj/effect/decal/cleanable/molten_object, -/obj/effect/landmark/event_spawn, -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "wPd" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/lesser) @@ -67735,6 +67820,16 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/main) +"wPO" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "O2 to Airmix" + }, +/obj/machinery/light/no_nightlight/directional/north, +/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "wPP" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 @@ -68294,13 +68389,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood/tile, /area/station/science/lower) -"wYb" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/item/kirbyplants/random, -/obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) "wYd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69581,15 +69669,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/catwalk_floor/iron_white, /area/station/science/robotics/augments) -"xrg" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, -/turf/open/floor/iron/smooth_half{ - dir = 8 - }, -/area/station/engineering/main) "xru" = ( /obj/item/kirbyplants/random/fullysynthetic, /obj/machinery/airalarm/directional/east, @@ -70042,10 +70121,6 @@ /obj/structure/bed/maint, /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/starboard/central) -"xwn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "xwr" = ( /obj/effect/turf_decal/siding/thinplating_new/light, /obj/machinery/recharge_station, @@ -70085,6 +70160,18 @@ "xwz" = ( /turf/closed/wall, /area/station/cargo/miningfoundry) +"xwC" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/west, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchenshutters"; + name = "Kitchen Shutters"; + dir = 8 + }, +/obj/effect/turf_decal/siding/end, +/turf/open/floor/iron/dark/textured_large, +/area/station/service/kitchen) "xwH" = ( /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, @@ -70327,6 +70414,17 @@ /obj/effect/spawner/random/trash, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"xAx" = ( +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "xAA" = ( /obj/effect/turf_decal/tile/green/half/contrasted{ dir = 1 @@ -70579,12 +70677,6 @@ /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/misc/sandy_dirt, /area/station/commons/fitness/locker_room) -"xEP" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/station/maintenance/department/engine/atmos) "xEQ" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2{ dir = 1 @@ -72353,6 +72445,16 @@ "yeh" = ( /turf/closed/wall, /area/station/hallway/primary/starboard) +"yei" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Atmospherics Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "yel" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -72482,13 +72584,6 @@ "yfD" = ( /turf/closed/wall, /area/station/medical/surgery/theatre) -"yfF" = ( -/obj/machinery/vending/autodrobe/all_access, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 8 - }, -/turf/open/floor/iron/small, -/area/station/commons/fitness/locker_room) "yfJ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/decal/cleanable/dirt, @@ -79383,7 +79478,7 @@ ybp qBK jMp cor -iBz +wPO wLw udH gbh @@ -79624,7 +79719,7 @@ rDU hYC bLp wGx -buw +qht nrn lCT trX @@ -79640,7 +79735,7 @@ kNx tyc dJn nrn -uCg +jMQ wmL civ gbh @@ -81426,7 +81521,7 @@ fAD jWm ybO kVB -wMy +dzH rPg nrn trY @@ -81669,7 +81764,7 @@ wWm mPB pit wWm -oVN +pnO pCn teV dix @@ -81680,7 +81775,7 @@ ykk hYC egC nlt -nrJ +ckR nrn ktJ saq @@ -81922,7 +82017,7 @@ wBo sRf wBo hFO -jLz +oYf mPB wWm nlR @@ -82178,9 +82273,9 @@ wBo fgX uFS wBo -ltY +eKd wBo -twP +aeH dOP pit dHx @@ -82436,7 +82531,7 @@ bTI jnI gya qBM -krp +ael wcF eqr mUe @@ -83477,8 +83572,8 @@ oVm fjf sRW fjf -iST -dUn +itr +hWa wFK ybO qOr @@ -83982,7 +84077,7 @@ pWm pRw pnl pxz -ftj +yei ybO ybO qKA @@ -84253,7 +84348,7 @@ wmq vMI pKW kiP -hYc +tqn dYv jZl feu @@ -84263,7 +84358,7 @@ bGX jhj cGV tkU -cwr +ocZ pqr tkU kUN @@ -84500,7 +84595,7 @@ fjh wzv pnl dpH -lRx +kNv gAy jZl bKK @@ -84756,9 +84851,9 @@ pWm uEH dfd pnl -iUc -iUc -iUc +uct +uct +uct jZl bEG rCk @@ -85013,9 +85108,9 @@ wzv yil wzv pnl -iUc -gGt -iUc +uct +hGa +uct jZl oqq tmK @@ -85268,12 +85363,12 @@ kNn yil xnL yil -iwi +bXb pnl pnl pnl pnl -dbg +srw tXF qaU yew @@ -85525,10 +85620,10 @@ rjo pWm pWm pWm -iwi -iwi -iwi -iwi +bXb +bXb +bXb +bXb yil fTJ qpp @@ -85782,7 +85877,7 @@ mmT vtJ acg pWm -jJY +efn wzv wzv wzv @@ -86041,8 +86136,8 @@ bOa pWm bvt bvt -rNw -rYM +nbN +ggr oii pnl gmv @@ -86308,14 +86403,14 @@ jDi jDi jDi pnl -dbg +srw pnl pnl jZl xck -oRL +cag xck -rpc +bJH xck cGV bNq @@ -86323,9 +86418,9 @@ bNq ecq bNq bNq -dzp +hhr bNq -xEP +gUQ bNq bNq bNq @@ -86734,7 +86829,7 @@ aWt sis sis sis -bpM +lhd xjz blb dDB @@ -86986,7 +87081,7 @@ eua izh xAG jWd -lgy +lGO cZA hyX tBm @@ -87076,7 +87171,7 @@ kNn pnl pnl pnl -dbg +srw pnl tOc oCE @@ -88356,9 +88451,9 @@ kMe kMe nDJ lWV -mWB -wjw -kMe +cYt +bli +gAV tDu ccA oPa @@ -88372,14 +88467,14 @@ oYv jJg bsG wqW -xrg +cQV tdb tdb tdb tdb qyr mLZ -lbJ +vHU lER hRO knv @@ -88862,7 +88957,7 @@ ayK ayK ayK lQU -vaY +ruR lQU ayK lQU @@ -88870,7 +88965,7 @@ lQU lQU ayK lQU -vaY +ruR lQU ayK rDV @@ -89432,7 +89527,7 @@ aus voz sRg hmb -huh +sHW slY slY qQP @@ -89629,8 +89724,8 @@ uqe uLW blb aKm -nDq -iKM +fxp +nKe guh cBl fJe @@ -90201,8 +90296,8 @@ slY slY eVc hbw -wOZ -hmj +frT +ejA arL sRg slY @@ -90416,7 +90511,7 @@ szg tpW pUM kMe -dvD +prd fGf ayK izf @@ -90456,10 +90551,10 @@ sRg cJT eEq sRg -gQG +bgJ hbw -aGI -hmQ +mMf +iDV pGE jug rqq @@ -90715,8 +90810,8 @@ mGY hXf xGf jLb -hgd -mrP +lzF +nFT xrZ sRg xat @@ -90932,11 +91027,11 @@ awH gAV qkq wRy -ayK -vDS -aWA -lVv -nHq +urz +uQO +dti +oZg +cbv exQ fib cca @@ -91179,7 +91274,7 @@ dyI dyI ozQ ozQ -sYY +xAx brA brA dyI @@ -91193,7 +91288,7 @@ ayK swK jTf nCC -rDc +jHy qQi sVu wfn @@ -91232,7 +91327,7 @@ hgZ hgZ kaz eOk -qgK +lYP xPX wzo hLm @@ -91450,7 +91545,7 @@ ayK nXC nmi cED -nQE +dkX rLj gNt iIK @@ -91693,7 +91788,7 @@ cBd cBd dyI ozQ -iHo +jvm brA dyI oer @@ -91707,7 +91802,7 @@ ayK wfn wfn osT -qxF +ccC wap wfn gKL @@ -93312,7 +93407,7 @@ hIm azq iTv wMg -wKr +lql vtr mcV iGq @@ -97430,7 +97525,7 @@ cri bOG xmt xmt -hrl +xwC xmt xmt lHZ @@ -98203,7 +98298,7 @@ oTM pLf aTg aTg -aIr +pkK sWq nUd bmY @@ -98460,7 +98555,7 @@ sJL sne aTg aTg -aIr +hwF bIN nUd bmY @@ -98968,11 +99063,11 @@ tGq xmt xmt oTN -fGk -sYS -nPY -rVt -elb +jKK +nxY +dwd +kad +kaL xmt xmt xli @@ -105127,7 +105222,7 @@ sRL bCP dqB pIf -lZP +sWZ jgF wqj rEa @@ -105639,7 +105734,7 @@ nVa fuD xVV eWP -lNN +bmR lWp xhD heN @@ -106672,7 +106767,7 @@ jvQ eul eeJ egJ -yfF +ksD gMq duT gtk @@ -112316,14 +112411,14 @@ fcW jVY cvk nFW -uAD -rKa +uvG +siN jpp -wDO -ldP +nuV +sue jpp -amT -mgO +cUB +baO pzd gMz rem @@ -112573,14 +112668,14 @@ xUy rEd aWb nFW -nIF -fyC -stG -qUI +pTA +hEw +bWp +gjn jpp -eRi -ehP -mgO +ibF +diG +baO pzd ycQ rem @@ -112832,10 +112927,10 @@ nFW nFW pzd pzd -oTK -uXe -gTa -wYb +tlJ +cYp +jTC +eOX pzd xQJ xQJ @@ -113090,7 +113185,7 @@ fsq iRl pzd pzd -tuI +pTk pzd pzd pzd @@ -113347,7 +113442,7 @@ fLg tHi tfc wOp -goY +ljc xQJ ejn vJx @@ -113604,7 +113699,7 @@ pot rUq lyq wOp -goY +ljc xQJ mbV vJx @@ -113861,7 +113956,7 @@ iqi cUY dnk wOp -qux +pYi xXT ihv rdw @@ -118680,7 +118775,7 @@ dDB dDB dDB dDB -dDB +kLk dDB dDB dDB @@ -122122,7 +122217,7 @@ lkV iJL rci vTv -dpz +oSj boY agI kQt @@ -122893,7 +122988,7 @@ nWh xnR aLC wLZ -xwn +qwh cns vwJ kQt @@ -129078,10 +129173,10 @@ uxL lhl jxD ylD -dXX +hqH vzv brz -aOx +sJf ylD wyj dYR diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index d6650037bc4be..2a95ba89ab234 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -92,11 +92,6 @@ "aaZ" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory) -"abc" = ( -/obj/machinery/power/tracker, -/obj/structure/cable, -/turf/open/floor/iron/solarpanel/airless, -/area/station/solars/starboard/fore) "abk" = ( /obj/machinery/keycard_auth{ pixel_x = 24; @@ -480,6 +475,14 @@ /area/station/command/heads_quarters/qm) "adx" = ( /obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/flatpack_cart, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, /turf/open/floor/iron/smooth_large, /area/station/engineering/break_room) "adz" = ( @@ -1375,8 +1378,7 @@ /turf/open/floor/plating, /area/station/engineering/supermatter) "akS" = ( -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/cake_ingredients, +/obj/structure/table/rolling, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "akV" = ( @@ -1409,10 +1411,11 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "alj" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/spawner/random/burgerstation/loot/with_maintenance_loot, +/obj/machinery/door/window/right/directional/east{ + req_access = list("engineering") + }, /turf/open/floor/plating, -/area/station/maintenance/port/fore) +/area/station/maintenance/aft) "aln" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -1432,9 +1435,12 @@ /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory) "alu" = ( -/obj/effect/turf_decal/vg_decals/department/bar, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 + }, +/obj/structure/chair/stool/directional/west, /turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/area/station/commons/fitness) "alw" = ( /obj/machinery/button/flasher{ id = "solitaryflashb"; @@ -1503,6 +1509,18 @@ /obj/machinery/atmospherics/components/tank/air, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"alI" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/railing/corner/end{ + 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) "alO" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -1535,6 +1553,7 @@ /area/station/maintenance/port/fore) "alV" = ( /obj/effect/spawner/random/burgerstation/table, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/aft) "alW" = ( @@ -1579,6 +1598,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/machinery/computer/security/telescreen/normal/directional/east, /turf/open/floor/iron/dark, /area/station/security/brig) "amr" = ( @@ -1586,12 +1606,25 @@ /turf/open/floor/plating, /area/station/security/courtroom) "ams" = ( -/obj/structure/closet/wardrobe/mixed, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, /obj/machinery/airalarm/directional/west, -/obj/effect/landmark/start/hangover/closet, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/effect/turf_decal/siding/thinplating/light{ + 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, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -1604,20 +1637,30 @@ /turf/open/floor/iron/dark, /area/station/security/courtroom) "amv" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance" +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/structure/railing{ + dir = 10 + }, +/obj/item/kirbyplants/photosynthetic, +/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/solars/starboard/fore) +/area/station/maintenance/starboard/fore) "amw" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/sticker/pslime, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "amx" = ( -/obj/effect/decal/cleanable/cobweb, /obj/effect/spawner/random/structure/crate, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, @@ -1775,10 +1818,6 @@ /obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"ane" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "anf" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/fore) @@ -1812,6 +1851,7 @@ "ann" = ( /obj/structure/table, /obj/effect/spawner/random/maintenance/three, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood, /area/station/maintenance/port/fore) "ano" = ( @@ -1957,39 +1997,25 @@ /turf/open/floor/plating, /area/station/maintenance/fore/lesser) "aoe" = ( -/obj/machinery/space_heater, -/turf/open/floor/iron/dark/textured_large, +/obj/effect/spawner/random/burgerstation/odd, +/turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aof" = ( -/turf/closed/wall/r_wall, -/area/station/maintenance/solars/starboard/fore) +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "aog" = ( /obj/docking_port/stationary/public_mining_dock{ dir = 8 }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) -"aoh" = ( -/obj/machinery/power/solar_control{ - id = "auxsolareast"; - name = "Starboard Bow Solar Control" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) -"aoi" = ( -/obj/structure/rack, -/obj/item/clothing/mask/gas, -/obj/structure/sign/warning/vacuum/external/directional/north, -/obj/item/multitool, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "aoj" = ( /obj/machinery/camera/directional/north{ c_tag = "Fore Port Solar Access" }, /obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating, /area/station/maintenance/port/fore) "aok" = ( @@ -2050,18 +2076,15 @@ "aoM" = ( /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"aoN" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "aoO" = ( -/obj/machinery/power/terminal, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end/flip, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) +/area/station/maintenance/starboard/fore) "aoP" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance, @@ -2166,6 +2189,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/corner/end{ + dir = 4 + }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "apn" = ( @@ -2227,13 +2253,9 @@ /turf/open/floor/mineral/titanium/blue, /area/station/commons/dorms) "apB" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Fore Starboard Solars" - }, -/obj/machinery/power/smes, -/obj/structure/cable, +/obj/machinery/drone_dispenser, /turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) +/area/station/maintenance/aft) "apC" = ( /obj/structure/bed/pod, /obj/effect/mapping_helpers/broken_floor, @@ -2436,17 +2458,26 @@ /turf/open/floor/iron/dark, /area/station/security/execution/education) "aqw" = ( -/obj/machinery/door/airlock/engineering{ - name = "Starboard Bow Solar Access" +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/structure/railing{ + dir = 6 + }, +/obj/item/kirbyplants/organic/plant14, +/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/solars/starboard/fore) +/area/station/maintenance/starboard/fore) "aqx" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/maintenance/solars/starboard/fore) +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "aqy" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -2558,7 +2589,6 @@ /turf/open/floor/plating, /area/station/maintenance/fore/lesser) "ari" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet/secure_closet/personal/cabinet, /obj/machinery/airalarm/directional/north, /turf/open/floor/wood, @@ -2608,10 +2638,9 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "art" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Fore Starboard Solar Access" +/obj/structure/railing/corner/end/flip{ + dir = 8 }, -/obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aru" = ( @@ -2631,8 +2660,8 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "ary" = ( -/obj/structure/closet/firecloset, /obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/burgerstation/loot/with_maintenance_loot, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "arz" = ( @@ -2673,6 +2702,9 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end, +/obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "arK" = ( @@ -2771,6 +2803,8 @@ dir = 4 }, /obj/machinery/airalarm/directional/north, +/obj/structure/closet/wardrobe/pjs, +/obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron/dark/side{ dir = 5 }, @@ -2871,6 +2905,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood, /area/station/commons/dorms) "asv" = ( @@ -2977,7 +3012,6 @@ /turf/open/floor/plating, /area/station/maintenance/fore) "asR" = ( -/obj/effect/decal/cleanable/cobweb, /obj/machinery/atmospherics/pipe/smart/simple/general/visible{ dir = 6 }, @@ -2997,9 +3031,8 @@ /turf/open/floor/plating/airless, /area/station/solars/port/fore) "asX" = ( -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/plating/airless, -/area/station/solars/starboard/fore) +/turf/open/floor/iron/dark/corner, +/area/station/commons/fitness) "asZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 @@ -3085,8 +3118,7 @@ }, /area/station/commons/dorms) "atl" = ( -/obj/structure/cable, -/turf/open/floor/plating/airless, +/turf/open/space/basic, /area/station/solars/starboard/fore) "atm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -3196,6 +3228,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/yellow, +/obj/machinery/computer/security/telescreen/auxbase/directional/east, /turf/open/floor/iron, /area/station/construction/mining/aux_base) "atJ" = ( @@ -3318,11 +3351,13 @@ /turf/open/floor/iron/solarpanel/airless, /area/station/solars/port/aft) "aua" = ( -/obj/structure/closet/wardrobe/green, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/landmark/start/hangover/closet, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -3522,7 +3557,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron/dark/side{ dir = 1 }, @@ -3591,7 +3625,6 @@ /turf/open/floor/iron/white, /area/station/maintenance/port/fore) "ava" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/chair, /obj/item/reagent_containers/blood/random, /obj/effect/turf_decal/tile/blue{ @@ -3696,8 +3729,8 @@ /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "avs" = ( -/turf/open/floor/plating/airless, -/area/station/solars/starboard/fore) +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "avt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 @@ -4074,31 +4107,28 @@ }, /area/station/commons/dorms) "awB" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/siding/thinplating_new{ + 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, /turf/open/floor/iron/dark/corner{ dir = 1 }, /area/station/commons/fitness) -"awD" = ( -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "awE" = ( /obj/effect/landmark/start/botanist, /turf/open/floor/iron, /area/station/service/hydroponics) "awF" = ( -/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "awG" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"awH" = ( -/obj/machinery/portable_atmospherics/canister/air, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "awI" = ( @@ -4422,9 +4452,7 @@ /turf/open/floor/iron, /area/station/commons/fitness) "axN" = ( -/obj/structure/bed, /obj/effect/turf_decal/tile/neutral, -/obj/effect/landmark/start/assistant, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -4478,8 +4506,12 @@ /turf/open/floor/iron, /area/station/commons/dorms) "axY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/blue/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, /area/station/commons/fitness) "axZ" = ( /obj/effect/turf_decal/tile/neutral{ @@ -4642,8 +4674,12 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "ayz" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, +/obj/machinery/vending/clothing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -4984,7 +5020,6 @@ /obj/item/wallframe/camera, /obj/item/wallframe/camera, /obj/item/assault_pod/mining, -/obj/machinery/computer/security/telescreen/auxbase/directional/west, /obj/effect/turf_decal/tile/brown{ dir = 4 }, @@ -5071,6 +5106,7 @@ req_access = list("eva"); name = "Inducer Storage" }, +/obj/item/stock_parts/power_store/battery, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) "azX" = ( @@ -5136,7 +5172,7 @@ }, /obj/effect/mapping_helpers/airlock/access/any/service/kitchen, /turf/open/floor/iron/cafeteria, -/area/station/hallway/secondary/service) +/area/station/service/kitchen) "aAf" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -5251,8 +5287,14 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aAu" = ( -/obj/structure/trash_pile, -/turf/open/floor/iron/dark/textured_large, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing, +/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) "aAv" = ( /obj/item/food/pizzaslice/ants, @@ -5393,11 +5435,12 @@ /turf/open/floor/iron/dark/textured_large, /area/station/cargo/drone_bay) "aBa" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/camera/directional/east{ c_tag = "Pool East" }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/bed, +/obj/effect/landmark/start/assistant, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -5615,7 +5658,6 @@ /area/station/commons/storage/primary) "aBR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 }, @@ -5635,9 +5677,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 }, -/obj/structure/bed, /obj/effect/turf_decal/tile/neutral, -/obj/effect/landmark/start/assistant, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -5705,9 +5745,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "aCm" = ( -/obj/effect/turf_decal/siding/yellow/corner{ - dir = 1 - }, +/obj/effect/landmark/start/assistant, +/obj/structure/chair/sofa/left/brown, /turf/open/floor/iron, /area/station/commons/fitness) "aCp" = ( @@ -5723,6 +5762,8 @@ dir = 1 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/closet/athletic_mixed, +/obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron/dark/side{ dir = 10 }, @@ -5736,9 +5777,9 @@ }, /area/station/service/hydroponics) "aCu" = ( -/obj/machinery/vending/games, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "aCv" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -5777,6 +5818,13 @@ /obj/effect/turf_decal/siding/thinplating/dark/corner{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/tank_holder/oxygen/red, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aCB" = ( @@ -5789,8 +5837,19 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aCD" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/iron/dark/textured_large, +/obj/item/chair/plastic, +/obj/item/chair/plastic{ + pixel_y = 5 + }, +/obj/item/chair/plastic{ + pixel_y = 10 + }, +/obj/item/stack/sheet/glass{ + amount = 12 + }, +/obj/item/stack/cable_coil/five, +/obj/structure/rack, +/turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aCE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ @@ -5933,16 +5992,14 @@ /turf/open/floor/iron, /area/station/commons/storage/primary) "aDr" = ( -/obj/structure/table/glass, -/obj/item/storage/medkit/regular, /obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 }, +/obj/structure/table/wood/fancy, /turf/open/floor/iron/dark/side, /area/station/commons/fitness) "aDs" = ( -/obj/structure/table/glass, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 }, @@ -5971,6 +6028,13 @@ dir = 8 }, /area/station/commons/fitness) +"aDw" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/bed, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) "aDx" = ( /obj/machinery/light/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6074,22 +6138,6 @@ dir = 4 }, /area/station/service/theater) -"aDS" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Fitness Room" - }, -/obj/structure/closet/wardrobe/black, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/landmark/start/hangover/closet, -/turf/open/floor/iron/dark/side{ - dir = 9 - }, -/area/station/commons/fitness) "aDT" = ( /turf/open/floor/iron/freezer, /area/station/commons/toilet) @@ -6244,25 +6292,20 @@ /turf/open/floor/iron, /area/station/service/hydroponics/garden) "aEM" = ( -/obj/structure/chair/sofa/right/brown, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/commons/fitness) -"aEN" = ( -/obj/structure/chair/sofa/left/brown, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, +/obj/structure/closet/wardrobe/grey, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, /turf/open/floor/iron/dark/side{ - dir = 5 + dir = 1 }, /area/station/commons/fitness) +"aEN" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/plating, +/area/space/nearstation) "aEO" = ( /obj/machinery/camera/directional/north{ c_tag = "Holodeck - Fore"; @@ -6273,9 +6316,18 @@ }, /area/station/holodeck/rec_center) "aEP" = ( -/obj/structure/table/wood/fancy, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" + }, +/obj/item/plate, +/obj/item/food/mint{ + pixel_y = 3 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "aET" = ( /obj/structure/rack, /obj/item/clothing/head/fedora/beige, @@ -6320,14 +6372,15 @@ }, /area/station/commons/dorms) "aFf" = ( -/obj/structure/table/wood/fancy, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "kitchen"; + name = "Kitchen Shutters" }, -/area/station/commons/fitness) +/obj/item/storage/fancy/donut_box, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "aFg" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -6409,15 +6462,6 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"aFs" = ( -/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/plating, -/area/station/maintenance/starboard/fore) "aFu" = ( /turf/closed/wall, /area/station/service/library) @@ -6584,36 +6628,30 @@ /turf/open/floor/carpet, /area/station/commons/dorms) "aGb" = ( -/obj/structure/closet/wardrobe/grey, -/obj/effect/spawner/random/clothing/kittyears_or_rabbitears, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/landmark/start/hangover/closet, -/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, /turf/open/floor/iron/dark/side{ dir = 8 }, /area/station/commons/fitness) "aGc" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 1 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "aGd" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/commons/fitness) +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/fore) "aGe" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/engine{ @@ -6780,20 +6818,17 @@ "aGE" = ( /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 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aGF" = ( -/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/plating, +/obj/effect/turf_decal/tile/dark_red/opposingcorners, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/toy/plush/nukeplushie, +/turf/open/floor/iron, /area/station/maintenance/starboard/fore) "aGH" = ( /obj/structure/disposalpipe/segment{ @@ -6872,9 +6907,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/cable, +/obj/structure/railing/corner/end/flip{ + 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/plating, /area/station/maintenance/starboard/fore) "aGY" = ( @@ -7232,8 +7270,11 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "aIk" = ( -/turf/open/floor/iron/dark/textured_large, -/area/station/maintenance/starboard/fore) +/obj/effect/turf_decal/stripes/blue/line, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) "aIl" = ( /obj/structure/table, /obj/item/camera, @@ -7260,6 +7301,7 @@ dir = 4 }, /obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/wood, /area/station/service/library) "aIt" = ( @@ -8327,7 +8369,7 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, -/obj/machinery/computer/holodeck, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/commons/fitness) "aMq" = ( @@ -8335,9 +8377,9 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/light/directional/east, /obj/item/radio/intercom/directional/north, +/obj/machinery/computer/holodeck, /turf/open/floor/iron, /area/station/commons/fitness) "aMr" = ( @@ -8413,7 +8455,7 @@ /turf/open/floor/stone, /area/station/service/bar) "aMD" = ( -/obj/machinery/icecream_vat, +/obj/structure/closet/secure_closet/freezer/fridge, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen) "aME" = ( @@ -8496,12 +8538,18 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "aMR" = ( -/obj/structure/closet/wardrobe/pink, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, /obj/machinery/light/directional/west, -/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/siding/thinplating_new{ + 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, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -8716,8 +8764,8 @@ /turf/open/floor/iron, /area/station/cargo/office) "aNM" = ( -/obj/structure/kitchenspike, /obj/machinery/light/small/directional/west, +/obj/machinery/icecream_vat, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen) "aNO" = ( @@ -9432,13 +9480,6 @@ /obj/structure/closet/wardrobe/white, /turf/open/floor/iron, /area/station/commons/locker) -"aQP" = ( -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/obj/machinery/vending/autodrobe/all_access, -/turf/open/floor/iron, -/area/station/commons/locker) "aQQ" = ( /obj/machinery/vending/dorms, /turf/open/floor/iron, @@ -9733,7 +9774,6 @@ "aRN" = ( /obj/structure/chair, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron, /area/station/security/checkpoint/escape) "aRO" = ( @@ -10343,6 +10383,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/bridge) +"aUb" = ( +/obj/machinery/modular_computer/preset/engineering, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/machinery/incident_display/bridge/directional/north, +/turf/open/floor/iron, +/area/station/command/bridge) "aUc" = ( /obj/structure/table/reinforced, /obj/item/folder{ @@ -10464,9 +10516,7 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/aft) "aUx" = ( -/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/dust, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aUy" = ( @@ -10763,15 +10813,7 @@ /area/station/service/kitchen) "aVD" = ( /obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/food/mint{ - pixel_y = 10 - }, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, /obj/item/reagent_containers/cup/rag{ pixel_x = -4 }, @@ -10873,6 +10915,7 @@ "aVZ" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/dark/side, /area/station/security/checkpoint/escape) "aWa" = ( @@ -11480,36 +11523,12 @@ /turf/open/floor/iron, /area/station/service/bar) "aXB" = ( -/obj/machinery/button/door{ - id = "Biohazard"; - name = "Biohazard Shutter Control"; - pixel_x = -6; - pixel_y = -25; - req_access = list("research") - }, -/obj/machinery/button/door{ - id = "rnd2"; - name = "Research Lab Shutter Control"; - pixel_x = 6; - pixel_y = -25; - req_access = list("research") - }, -/obj/machinery/button/door{ - id = "xenobiomain"; - name = "Xenobiology Containment Blast Doors"; - pixel_x = -6; - pixel_y = -38 - }, /obj/machinery/light/directional/south, -/obj/machinery/button/door/directional/south{ - pixel_y = -38; - pixel_x = 6; - id = "rdprivacy" - }, /obj/structure/chair/comfy{ color = "#596479"; dir = 1 }, +/obj/machinery/requests_console/directional/south, /turf/open/floor/carpet, /area/station/science/breakroom) "aXC" = ( @@ -12387,12 +12406,17 @@ /area/station/service/bar) "baj" = ( /obj/structure/table/reinforced, -/obj/item/storage/fancy/donut_box, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ id = "kitchen"; name = "Kitchen Shutters" }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "bak" = ( @@ -12456,6 +12480,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, +/obj/structure/sign/painting/library{ + pixel_x = -32 + }, /turf/open/floor/wood, /area/station/service/library) "bax" = ( @@ -13036,6 +13063,8 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/item/clipboard, +/obj/item/pen, /turf/open/floor/iron, /area/station/medical/virology) "bcx" = ( @@ -14218,12 +14247,9 @@ /turf/open/floor/wood, /area/station/command/meeting_room) "bgM" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "bgP" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/trimline/yellow/end{ @@ -14237,15 +14263,9 @@ /turf/open/space/basic, /area/space/nearstation) "bgS" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/commons/fitness) +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "bgT" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, @@ -14770,13 +14790,13 @@ }, /obj/structure/table, /obj/item/book/manual/wiki/robotics_cyborgs{ - pixel_x = 2; - pixel_y = 5 + pixel_x = 11; + pixel_y = -1 }, -/obj/item/reagent_containers/cup/beaker/large, /obj/effect/turf_decal/tile/purple{ dir = 4 }, +/obj/machinery/ecto_sniffer, /turf/open/floor/iron/white, /area/station/science/robotics/lab) "biP" = ( @@ -15550,13 +15570,6 @@ }, /turf/open/floor/iron, /area/station/science/robotics/lab) -"blD" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "blE" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -15819,9 +15832,15 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "bmz" = ( -/obj/machinery/vending/autodrobe/all_access, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/structure/railing/corner/end, +/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) "bmA" = ( /obj/machinery/door/airlock{ name = "Private Restroom" @@ -15942,6 +15961,7 @@ "bmO" = ( /obj/effect/turf_decal/bot, /obj/structure/rack/shelf, +/obj/item/flatpack/export_gate, /turf/open/floor/iron, /area/station/cargo/storage) "bmP" = ( @@ -16006,7 +16026,7 @@ pixel_y = 7; req_access = list("kitchen") }, -/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/machinery/smartfridge/drying, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "bmY" = ( @@ -16620,10 +16640,6 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"boO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/closed/wall/r_wall, -/area/station/science/cytology) "boP" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/table/glass, @@ -17777,7 +17793,6 @@ /area/station/medical/storage) "bsO" = ( /obj/structure/bodycontainer/morgue, -/obj/item/food/burger/roburger, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) "bsP" = ( @@ -18400,10 +18415,15 @@ /turf/open/floor/iron/white, /area/station/science/research) "buA" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/structure/trash_pile, -/turf/open/floor/plating, -/area/station/maintenance/aft) +/obj/machinery/door/airlock/research{ + name = "Cyto Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, +/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/smooth_large, +/area/station/science/cytology) "buB" = ( /obj/machinery/conveyor_switch/oneway{ dir = 8; @@ -18905,6 +18925,7 @@ /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/dark_blue, /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) "bvP" = ( @@ -18918,6 +18939,9 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plating, /area/station/maintenance/aft) "bvQ" = ( @@ -19012,6 +19036,7 @@ /area/station/hallway/primary/central) "bwc" = ( /obj/structure/sign/warning/fire/directional/south, +/obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/aft) "bwd" = ( @@ -19035,11 +19060,13 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "bwg" = ( -/obj/effect/turf_decal/stripes/line, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plating, /area/station/maintenance/aft) "bwh" = ( @@ -19278,7 +19305,7 @@ }, /area/station/science/research) "bxg" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/aft) @@ -19413,7 +19440,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/smartfridge/organ, +/obj/structure/table/glass, /turf/open/floor/iron, /area/station/medical/medbay/central) "bxT" = ( @@ -19723,7 +19750,6 @@ /turf/open/floor/plating, /area/station/science/server) "bzx" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/airalarm/directional/north, /obj/machinery/button/door/directional/east{ id = "serverroomrd" @@ -20003,6 +20029,7 @@ /obj/item/paper_bin, /obj/item/pen, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/dark, /area/station/science/server) "bAD" = ( @@ -21382,7 +21409,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "bFk" = ( -/obj/machinery/photobooth, +/obj/machinery/photobooth{ + req_one_access = list("lawyer","security","command") + }, /obj/machinery/door/window/left/directional/south, /obj/effect/turf_decal/bot, /turf/open/floor/iron, @@ -22307,6 +22336,7 @@ }, /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/white, /area/station/science/xenobiology) "bIw" = ( @@ -22418,19 +22448,10 @@ /area/station/science/lab) "bIO" = ( /obj/structure/table/glass, -/obj/item/storage/box/syringes{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, /obj/item/storage/box/monkeycubes{ pixel_x = -5 }, /obj/item/storage/box/monkeycubes, -/obj/item/sticker/pslime, /turf/open/floor/iron/white, /area/station/science/xenobiology) "bIQ" = ( @@ -22868,7 +22889,6 @@ /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) "bKx" = ( -/obj/structure/closet/crate, /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/construction) @@ -22961,14 +22981,9 @@ /turf/open/floor/plating, /area/station/maintenance/aft) "bKK" = ( -/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/structure/cable, +/obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/construction) "bKL" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -23059,8 +23074,7 @@ /area/station/science/xenobiology) "bLc" = ( /obj/effect/turf_decal/stripes/line, -/obj/structure/table, -/obj/item/assembly/igniter, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/iron, /area/station/science/xenobiology) "bLe" = ( @@ -23068,6 +23082,10 @@ dir = 1 }, /obj/structure/table/reinforced, +/obj/item/storage/box/monkeycubes{ + pixel_x = -5 + }, +/obj/item/extinguisher/mini, /turf/open/floor/iron, /area/station/science/xenobiology) "bLh" = ( @@ -23386,16 +23404,6 @@ "bMi" = ( /turf/open/floor/iron/white, /area/station/science/xenobiology) -"bMk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/smartfridge/extract/preloaded, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "bMr" = ( /obj/effect/spawner/structure/window, /obj/structure/sign/departments/xenobio/directional/south, @@ -23663,7 +23671,11 @@ dir = 9 }, /obj/structure/table/reinforced, -/obj/item/slime_scanner, +/obj/item/assembly/igniter, +/obj/item/assembly/igniter, +/obj/item/slime_scanner{ + pixel_x = -6 + }, /turf/open/floor/iron, /area/station/science/xenobiology) "bNr" = ( @@ -24177,6 +24189,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/space_heater, /turf/open/floor/iron, /area/station/science/xenobiology) "bPL" = ( @@ -24641,6 +24654,9 @@ dir = 1 }, /obj/effect/landmark/start/assistant, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, /turf/open/floor/iron, /area/station/commons/fitness) "bSs" = ( @@ -24981,7 +24997,6 @@ /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) "bTS" = ( -/obj/effect/decal/cleanable/cobweb, /obj/item/kirbyplants/random/dead, /turf/open/floor/plating, /area/station/maintenance/aft) @@ -25294,9 +25309,14 @@ /area/station/hallway/primary/aft) "bVk" = ( /obj/machinery/light/small/directional/west, -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/smooth_corner{ + dir = 8 + }, +/area/station/science/cytology) "bVo" = ( /obj/machinery/door/poddoor/preopen{ id = "Engineering"; @@ -25351,7 +25371,6 @@ /turf/open/floor/wood, /area/station/commons/vacant_room/office) "bVE" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -26057,6 +26076,8 @@ /obj/effect/turf_decal/tile/green{ dir = 4 }, +/obj/item/clipboard, +/obj/item/pen, /turf/open/floor/iron, /area/station/medical/virology) "bYn" = ( @@ -26081,6 +26102,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"bYq" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/obj/machinery/incident_display/delam/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "bYr" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -26285,12 +26315,11 @@ /turf/open/floor/iron/white, /area/station/medical/virology) "bZb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 8 }, -/obj/structure/cable, /turf/open/floor/iron, -/area/station/science/xenobiology) +/area/station/commons/fitness) "bZe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26439,7 +26468,6 @@ /turf/open/floor/plating, /area/station/maintenance/aft) "bZO" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft) @@ -26478,10 +26506,13 @@ /turf/open/floor/plating, /area/station/maintenance/aft) "bZU" = ( -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/cobweb, +/obj/machinery/camera/directional/south{ + c_tag = "Fore Starboard Solars" + }, +/obj/machinery/power/smes, +/obj/structure/cable, /turf/open/floor/plating, -/area/station/maintenance/aft) +/area/station/maintenance/solars/starboard/fore) "cac" = ( /obj/structure/chair/stool, /turf/open/floor/plating, @@ -26505,14 +26536,15 @@ /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) "caj" = ( -/obj/machinery/door/airlock/research{ - name = "Cyto Access" +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Firing Range" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/any/science/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/science/cytology) +/obj/machinery/door/poddoor/preopen{ + id = "cytologysecure"; + name = "Secure Pen Lockdown" + }, +/turf/open/floor/plating, +/area/station/science/auxlab/firing_range) "caq" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -26565,7 +26597,6 @@ /turf/open/floor/iron/smooth, /area/station/engineering/break_room) "cax" = ( -/obj/effect/decal/cleanable/cobweb, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 }, @@ -26811,8 +26842,16 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "cbv" = ( -/turf/closed/wall/r_wall, -/area/station/science/cytology) +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/item/relic/lavaland, +/obj/structure/closet/crate{ + name = "E.X.P.E.R.I-MENTOR Supply Crate" + }, +/turf/open/floor/iron/dark, +/area/station/science/explab) "cbw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -26838,6 +26877,7 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/port/aft) "cby" = ( @@ -27096,14 +27136,14 @@ /obj/structure/sign/warning/no_smoking{ pixel_y = 28 }, +/obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/aft) "ccF" = ( -/obj/machinery/light/small/directional/north, +/obj/effect/spawner/random/burgerstation/loot/with_maintenance_loot, /turf/open/floor/plating, -/area/station/maintenance/aft) +/area/station/maintenance/port/fore) "ccG" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/random/burgerstation/loot/with_maintenance_loot, /turf/open/floor/plating, /area/station/maintenance/aft) @@ -27143,11 +27183,12 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "ccW" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/punching_bag, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "ccZ" = ( /obj/effect/mapping_helpers/airlock/abandoned, /obj/effect/decal/cleanable/dirt, @@ -27326,7 +27367,6 @@ /obj/structure/sign/warning/no_smoking{ pixel_x = 25 }, -/obj/effect/landmark/start/scientist, /turf/open/floor/iron/white/side{ dir = 9 }, @@ -27429,6 +27469,19 @@ }, /turf/open/floor/iron/smooth_large, /area/station/engineering/engine_smes) +"ceo" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/obj/machinery/computer/station_alert{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/ce/directional/west, +/turf/open/floor/iron/white/corner{ + dir = 4 + }, +/area/station/command/heads_quarters/ce) "cer" = ( /obj/structure/cable, /obj/machinery/hydroponics/constructable, @@ -27501,19 +27554,18 @@ /area/station/maintenance/starboard/aft) "ceO" = ( /obj/machinery/meter, -/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/general, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "ceR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, +/obj/effect/turf_decal/bot, +/obj/item/target/alien, +/obj/structure/training_machine, /turf/open/floor/engine, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "ceT" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/plating, @@ -27765,7 +27817,6 @@ capacity = 9e+006; charge = 10000 }, -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/effect/turf_decal/stripes/box, @@ -27784,9 +27835,11 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "cgp" = ( -/obj/structure/closet/wardrobe/mixed, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/explab) "cgw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ @@ -27987,6 +28040,7 @@ /obj/effect/mapping_helpers/airalarm/all_access, /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "chz" = ( @@ -28248,11 +28302,13 @@ "ciy" = ( /obj/effect/turf_decal/trimline/green/filled/end, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/iron, /area/station/service/hydroponics/garden/abandoned) "ciD" = ( +/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/iron, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "ciF" = ( /obj/structure/table, /obj/effect/spawner/random/maintenance, @@ -28411,10 +28467,15 @@ /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/aft) "cjE" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/spawner/random/burgerstation/liquid, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/closet/wardrobe/mixed, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) "cjF" = ( /obj/machinery/door/airlock/engineering{ name = "Starboard Quarter Solar Access" @@ -28605,14 +28666,11 @@ /turf/open/floor/iron/smooth_large, /area/station/command/heads_quarters/ce) "ckS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 9 +/obj/effect/turf_decal/stripes{ + dir = 6 }, /turf/open/floor/engine, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "clq" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/iron, @@ -28751,20 +28809,16 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "cmo" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/science/cytology) +/turf/open/floor/plating, +/area/station/science/auxlab/firing_range) "cmq" = ( -/obj/effect/landmark/generic_maintenance_landmark, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/area/station/maintenance/port/aft) "cmr" = ( -/obj/effect/spawner/random/structure/crate, /obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "cmw" = ( @@ -28913,6 +28967,11 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/smooth_large, /area/station/engineering/main) +"cnY" = ( +/obj/structure/cable, +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/engineering/main) "cnZ" = ( /obj/effect/turf_decal/tile/purple/opposingcorners{ dir = 4 @@ -28949,10 +29008,26 @@ /turf/open/floor/engine/plasma, /area/station/engineering/atmos) "cou" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/machinery/button/door/directional/south{ + id = "cytologysecure"; + name = "Pen Lockdown" + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/item/gun/energy/laser/carbine/practice{ + pixel_y = 6 + }, /turf/open/floor/iron, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "cow" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 5; @@ -29113,9 +29188,6 @@ /obj/machinery/camera/directional/east{ c_tag = "Holodeck Control" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, /turf/open/floor/iron, /area/station/commons/fitness) "cpX" = ( @@ -30831,16 +30903,10 @@ /turf/open/floor/plating, /area/station/security/processing) "cxN" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/general, -/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/door/airlock/hatch, /turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) +/area/station/maintenance/starboard/fore) "cxS" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Desk" @@ -31000,9 +31066,19 @@ /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) "czb" = ( -/obj/machinery/portable_atmospherics/canister/bz, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/machinery/light/directional/east, +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_y = -6; + pixel_x = 9 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "cze" = ( /obj/structure/grille/broken, /turf/open/floor/plating, @@ -31611,16 +31687,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/smooth_large, /area/station/engineering/main) -"cBP" = ( -/obj/structure/table, -/obj/item/coin, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/commons/fitness) "cBR" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -31785,6 +31851,17 @@ }, /turf/open/floor/engine, /area/station/engineering/main) +"cDh" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical, +/obj/item/flashlight, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/pipe_dispenser, +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/engine, +/area/station/engineering/main) "cDi" = ( /obj/structure/table/reinforced, /obj/item/clothing/suit/utility/radiation, @@ -32197,7 +32274,6 @@ c_tag = "Cargo - Bitrunning Den"; network = list("ss13","cargo") }, -/obj/effect/decal/cleanable/cobweb, /obj/structure/table, /obj/item/modular_computer/laptop/preset/civilian, /obj/item/clothing/suit/costume/wellworn_shirt/messy/graphic/gamer, @@ -32425,13 +32501,14 @@ /turf/open/floor/iron/dark, /area/station/engineering/main) "cGm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/thinplating/light{ - dir = 4 +/obj/machinery/camera/directional/west{ + c_tag = "Cytology Lab" }, -/turf/open/floor/iron/white, -/area/station/science/explab) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/auxlab/firing_range) "cGt" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -32906,10 +32983,26 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"cLK" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/railing/corner/end/flip{ + 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/plating, +/area/station/maintenance/starboard/fore) "cMm" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/main) +"cMA" = ( +/obj/machinery/vending/autodrobe, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "cMC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -33022,11 +33115,11 @@ /obj/machinery/camera/directional/east{ c_tag = "Cytology Cell" }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 +/obj/effect/turf_decal/stripes{ + dir = 5 }, /turf/open/floor/engine, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "cOF" = ( /obj/machinery/door/airlock/public/glass{ name = "Art Storage" @@ -33413,6 +33506,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"cTT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/modular_computer/preset/civilian{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) "cUl" = ( /obj/machinery/mass_driver/ordnance{ dir = 4 @@ -33558,6 +33662,15 @@ }, /turf/open/floor/iron/dark/telecomms, /area/station/science/server) +"daR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "dbg" = ( /obj/structure/mirror/directional/north, /obj/structure/toilet{ @@ -33785,7 +33898,6 @@ /area/station/medical/surgery/fore) "diU" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/red/line, /turf/open/floor/engine, /area/station/science/explab) "djs" = ( @@ -33869,11 +33981,12 @@ /turf/open/floor/wood, /area/station/hallway/secondary/service) "dlx" = ( -/obj/structure/punching_bag, -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/floor/iron, +/obj/effect/spawner/random/maintenance, +/obj/structure/table, +/turf/open/floor/plating, /area/station/maintenance/starboard/fore) "dlH" = ( /obj/machinery/door/airlock/maintenance, @@ -34025,18 +34138,20 @@ }, /turf/open/floor/plating, /area/station/science/xenobiology) +"dqI" = ( +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "dqL" = ( /obj/structure/cable, /obj/structure/tank_holder, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "dqV" = ( -/obj/machinery/smartfridge/petri/preloaded, -/obj/machinery/camera/directional/west{ - c_tag = "Cytology Lab" - }, /turf/open/floor/iron, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "drV" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -34181,13 +34296,16 @@ /turf/open/floor/iron, /area/station/science/ordnance) "dwb" = ( -/obj/structure/tank_holder/extinguisher, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/structure/table, +/obj/item/storage/toolbox/electrical{ + pixel_y = 5 }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/machinery/camera/directional/south{ + c_tag = "Testing Lab"; + network = list("ss13","rd") + }, +/turf/open/floor/iron/white, +/area/station/science/explab) "dwi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 @@ -34217,9 +34335,20 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "dxm" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/structure/microscope{ + pixel_x = 5 + }, +/obj/structure/table, +/obj/machinery/newscaster/directional/east, +/obj/item/petri_dish/random{ + pixel_x = -10 + }, +/obj/item/petri_dish/oldstation{ + pixel_x = -7; + pixel_y = 10 + }, +/turf/open/floor/iron/smooth_corner, +/area/station/science/cytology) "dxQ" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -34351,14 +34480,21 @@ /obj/effect/turf_decal/tile/green{ dir = 4 }, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, /turf/open/floor/iron/dark, /area/station/medical/virology) "dEw" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, /turf/open/floor/iron, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "dEC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 @@ -34369,9 +34505,16 @@ /turf/closed/wall, /area/station/service/lawoffice) "dFp" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/item/soap{ + pixel_y = -2 + }, +/obj/item/food/cheese/wedge, +/obj/structure/closet/secure_closet/cytology, +/obj/item/storage/box/gloves, +/obj/item/storage/box/swab, +/obj/item/storage/box/petridish, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "dFs" = ( /obj/structure/rack, /obj/item/electronics/apc, @@ -34633,6 +34776,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/abandon_cafeteria) +"dQe" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/boxing/green, +/obj/item/reagent_containers/cup/glass/waterbottle, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "dQy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -35098,11 +35247,11 @@ /turf/closed/wall/r_wall, /area/station/engineering/atmos) "efu" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/turf/open/floor/iron/dark/side, +/turf/open/floor/iron, /area/station/commons/fitness) "efy" = ( /obj/structure/chair/stool, @@ -35266,12 +35415,8 @@ /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) "enl" = ( -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/commons/fitness) +/turf/closed/wall/r_wall, +/area/station/maintenance/solars/starboard/fore) "eoi" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -35364,6 +35509,15 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/smooth, /area/station/ai_monitored/security/armory) +"erg" = ( +/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, +/turf/open/floor/iron/smooth_corner{ + dir = 1 + }, +/area/station/science/cytology) "erI" = ( /obj/effect/turf_decal/bot_white, /obj/structure/cable, @@ -35382,6 +35536,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/processing) +"erY" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) "esn" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ dir = 4 @@ -35425,6 +35591,23 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/closed/wall/r_wall, /area/station/science/ordnance/freezerchamber) +"eup" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end/flip, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"euK" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/closet/wardrobe/black, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/spawner/random/clothing/kittyears_or_rabbitears, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/commons/fitness) "euL" = ( /obj/machinery/camera/directional/south{ c_tag = "Prison - Entrance"; @@ -35509,6 +35692,10 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron/dark/textured, /area/station/science/genetics) +"exP" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/plating/airless, +/area/station/solars/starboard/fore) "eyd" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -35523,17 +35710,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"eyF" = ( -/obj/item/toy/figure/scientist, -/obj/structure/table, -/obj/item/clothing/glasses/science, -/obj/item/clothing/gloves/latex, -/obj/item/storage/box/petridish{ - pixel_x = -5; - pixel_y = 8 - }, -/turf/open/floor/iron, -/area/station/science/cytology) "eyQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35715,17 +35891,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"eGp" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/mechanical, -/obj/item/flashlight, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/pipe_dispenser, -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/engine, -/area/station/engineering/main) "eGE" = ( /obj/structure/table/wood, /obj/item/flashlight/lantern, @@ -35782,6 +35947,26 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"eIP" = ( +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/commons/fitness) "eIS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 @@ -35803,6 +35988,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"eJd" = ( +/obj/effect/landmark/start/scientist, +/turf/open/floor/iron/white, +/area/station/science/research) "eJB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/chair/stool/directional/south, @@ -35958,6 +36147,12 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/miningdock) +"ePf" = ( +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "ePs" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/line{ dir = 1 @@ -35992,6 +36187,19 @@ }, /turf/open/floor/iron, /area/station/cargo/office) +"eQF" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/window/reinforced/spawner/directional/north{ + pixel_y = 2 + }, +/obj/structure/rack, +/obj/item/swab{ + pixel_y = 2; + pixel_x = 5 + }, +/obj/item/food/grown/grass, +/turf/open/floor/grass, +/area/station/science/cytology) "eQL" = ( /obj/structure/chair{ name = "Judge" @@ -36355,7 +36563,9 @@ /turf/open/floor/iron/dark, /area/station/hallway/primary/fore) "ffa" = ( -/obj/structure/tank_holder/oxygen/red, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "ffy" = ( @@ -36437,6 +36647,10 @@ /obj/item/soap/nanotrasen, /turf/open/floor/iron/freezer, /area/station/maintenance/starboard/fore) +"fhs" = ( +/obj/machinery/holopad, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "fhy" = ( /obj/item/trash/pistachios, /turf/open/floor/plating, @@ -36475,16 +36689,8 @@ /turf/open/floor/iron/dark, /area/station/medical/medbay) "fie" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/obj/machinery/door/airlock/research{ - name = "Xenobiology Storage" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/turf/closed/wall, +/area/station/science/cytology) "fif" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36612,10 +36818,18 @@ }, /turf/open/floor/iron/dark, /area/station/security/processing) +"fmf" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Fitness Room South" + }, +/obj/structure/closet/boxinggloves, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "fmC" = ( -/obj/item/clothing/head/collectable/slime, -/turf/open/floor/engine, -/area/station/science/xenobiology) +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/science/cytology) "fmP" = ( /obj/machinery/dna_scannernew, /obj/effect/turf_decal/siding/purple{ @@ -36623,6 +36837,11 @@ }, /turf/open/floor/iron/dark/textured, /area/station/science/genetics) +"fna" = ( +/obj/machinery/power/tracker, +/obj/structure/cable, +/turf/open/floor/iron/solarpanel/airless, +/area/station/solars/starboard/fore) "fnl" = ( /obj/machinery/light/directional/north, /turf/open/floor/iron/dark, @@ -36983,12 +37202,9 @@ /area/station/medical/medbay/aft) "fBm" = ( /obj/machinery/firealarm/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, /obj/effect/spawner/random/trash, /obj/machinery/light/small/blacklight/directional/north, -/obj/item/trash/energybar, +/obj/structure/filingcabinet, /turf/open/floor/iron/dark/small, /area/station/cargo/bitrunning/den) "fBp" = ( @@ -37303,6 +37519,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison) +"fNt" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/fitness) "fNu" = ( /obj/structure/chair/office/light{ dir = 4; @@ -37339,6 +37561,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, /area/station/security/prison) +"fOu" = ( +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/fitness) "fOI" = ( /turf/open/floor/iron, /area/station/security/execution/transfer) @@ -37730,9 +37957,7 @@ /turf/open/floor/iron, /area/station/science/xenobiology) "gbT" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, +/obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "gbV" = ( @@ -37867,6 +38092,18 @@ }, /turf/open/floor/wood, /area/station/service/library) +"ghJ" = ( +/obj/structure/table, +/obj/item/food/grown/grass{ + pixel_x = 14 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/item/reagent_containers/cup/mortar, +/obj/item/pestle, +/turf/open/floor/iron, +/area/station/commons/fitness) "gia" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/ore_silo, @@ -37924,23 +38161,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/security/execution/transfer) -"gjD" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, -/turf/open/floor/iron, -/area/station/commons/fitness) -"gjY" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "gkk" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -38051,6 +38271,13 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/smooth_large, /area/station/service/hydroponics) +"gpj" = ( +/obj/structure/window/reinforced/spawner/directional/north{ + pixel_y = 2 + }, +/mob/living/basic/mouse/white, +/turf/open/floor/grass, +/area/station/science/cytology) "gpz" = ( /obj/structure/table/reinforced, /obj/structure/disposalpipe/segment{ @@ -38087,8 +38314,11 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/north, /obj/structure/table, -/obj/item/gun/energy/laser/practice, -/obj/item/gun/energy/laser/practice, +/obj/item/gps/science, +/obj/item/gps/science{ + pixel_x = -2; + pixel_y = 2 + }, /turf/open/floor/iron, /area/station/science/explab) "gqg" = ( @@ -38144,10 +38374,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft) -"gsv" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/closed/wall, -/area/station/maintenance/aft) +"gtL" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/rack, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "guf" = ( /obj/structure/closet/secure_closet/warden, /obj/structure/cable, @@ -38325,7 +38556,6 @@ /turf/open/floor/iron, /area/station/security/prison) "gAG" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/kirbyplants/random, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -38375,12 +38605,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "gBW" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" }, /turf/open/floor/iron, /area/station/commons/fitness) @@ -38500,11 +38727,6 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "gGz" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/white, /area/station/science/explab) "gGQ" = ( @@ -38678,6 +38900,13 @@ /obj/item/food/grown/harebell, /turf/open/floor/iron/dark, /area/station/service/chapel) +"gPY" = ( +/obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "gQz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38708,8 +38937,10 @@ dir = 8 }, /obj/effect/landmark/start/scientist, +/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/cytology) +/area/station/science/auxlab/firing_range) "gRd" = ( /obj/effect/turf_decal/plaque{ icon_state = "L12" @@ -39123,8 +39354,9 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, -/obj/structure/training_machine, -/obj/item/target, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, /turf/open/floor/iron, /area/station/commons/fitness) "hgP" = ( @@ -39328,6 +39560,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 }, +/obj/machinery/rnd/experimentor, /turf/open/floor/engine, /area/station/science/explab) "hlK" = ( @@ -39546,10 +39779,21 @@ pixel_y = 28 }, /obj/structure/closet/secure_closet/courtroom, -/obj/effect/decal/cleanable/cobweb, /obj/item/gavelhammer, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"hvJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/railing/corner/end{ + 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) "hvP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/window/reinforced/tinted/spawner/directional/south, @@ -39625,12 +39869,24 @@ /turf/open/floor/plating, /area/station/maintenance/aft) "hyp" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Service Hall Maintenance" +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/tank_holder/oxygen, /turf/open/floor/plating, -/area/station/service/hydroponics) +/area/station/maintenance/starboard/fore) +"hyU" = ( +/obj/structure/punching_bag, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron, +/area/station/commons/fitness) "hyV" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -39925,6 +40181,16 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/security/prison) +"hHe" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "hHq" = ( /obj/structure/cable, /turf/open/floor/plating/airless, @@ -40118,14 +40384,10 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, -/obj/item/training_toolbox{ - pixel_y = 5 - }, /obj/structure/table, -/obj/item/training_toolbox{ - pixel_y = -2 - }, /obj/machinery/light/directional/east, +/obj/item/toy/ammo/gun, +/obj/item/toy/gun, /turf/open/floor/iron, /area/station/commons/fitness) "hQK" = ( @@ -40142,17 +40404,16 @@ /turf/open/floor/iron/dark, /area/station/security/prison) "hRy" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4 }, /obj/effect/mapping_helpers/mail_sorting/service/chapel, +/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) "hRF" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/aft) @@ -40353,10 +40614,11 @@ /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/ce) "hYR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general, /obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, +/obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "hZy" = ( @@ -40866,7 +41128,14 @@ dir = 8 }, /obj/structure/table, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, /obj/item/book/manual/wiki/medicine, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/item/blood_filter, /obj/item/storage/belt/medical{ pixel_y = 2 }, @@ -40875,15 +41144,11 @@ }, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, -/obj/item/blood_filter, /turf/open/floor/iron/dark, /area/station/medical/storage) "iob" = ( @@ -40891,6 +41156,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/explab) "ioq" = ( @@ -40899,6 +41165,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/prison) +"iox" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/commons/fitness) "ioy" = ( /obj/effect/turf_decal/siding/purple{ dir = 8 @@ -40917,7 +41188,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "ipA" = ( -/obj/machinery/drone_dispenser, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "iqu" = ( @@ -40944,12 +41214,10 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) "iqX" = ( -/obj/structure/table, -/obj/item/pen/fourcolor, -/obj/item/taperecorder, -/obj/item/wrench, -/turf/open/floor/iron, -/area/station/science/cytology) +/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) "iry" = ( /obj/machinery/light/directional/east, /obj/item/book/manual/hydroponics_pod_people, @@ -41123,11 +41391,8 @@ /turf/open/floor/iron/cafeteria, /area/station/security/prison) "iwV" = ( -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/turf/open/floor/iron, -/area/station/science/cytology) +/turf/closed/wall/r_wall, +/area/station/science/auxlab/firing_range) "ixi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41179,9 +41444,20 @@ /turf/open/floor/iron, /area/station/science/ordnance/bomb) "izV" = ( -/obj/item/clothing/gloves/boxing/green, -/obj/structure/rack, -/obj/item/reagent_containers/cup/glass/waterbottle, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/oil/slippery, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + 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/plating, /area/station/maintenance/starboard/fore) "iAB" = ( @@ -41230,6 +41506,31 @@ /area/station/hallway/secondary/exit) "iBG" = ( /obj/structure/displaycase/labcage, +/obj/machinery/button/door{ + id = "rnd2"; + name = "Research Lab Shutter Control"; + pixel_x = 6; + pixel_y = -25; + req_access = list("research") + }, +/obj/machinery/button/door{ + id = "Biohazard"; + name = "Biohazard Shutter Control"; + pixel_x = -6; + pixel_y = -25; + req_access = list("research") + }, +/obj/machinery/button/door/directional/south{ + pixel_y = -38; + pixel_x = 6; + id = "rdprivacy" + }, +/obj/machinery/button/door{ + id = "xenobiomain"; + name = "Xenobiology Containment Blast Doors"; + pixel_x = -6; + pixel_y = -38 + }, /turf/open/floor/iron/dark/textured, /area/station/command/heads_quarters/rd) "iBY" = ( @@ -41447,6 +41748,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"iLt" = ( +/obj/item/sticker/pslime, +/turf/open/floor/engine, +/area/station/science/xenobiology) "iLy" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/light/directional/east, @@ -41467,6 +41772,7 @@ }, /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, /area/station/science/xenobiology) "iLX" = ( @@ -41509,7 +41815,6 @@ /turf/open/floor/wood, /area/station/maintenance/abandon_cafeteria) "iMV" = ( -/obj/effect/decal/cleanable/cobweb, /obj/structure/table/reinforced, /obj/item/surgery_tray/full/morgue, /turf/open/floor/iron/dark, @@ -41559,6 +41864,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"iOK" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "iOY" = ( /obj/machinery/rnd/production/protolathe/department/science, /obj/machinery/camera/directional/west{ @@ -41628,13 +41939,11 @@ /turf/open/floor/plating, /area/station/maintenance/port) "iRQ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "cytologysecure"; - name = "Secure Pen Lockdown" +/obj/effect/turf_decal/stripes{ + dir = 10 }, /turf/open/floor/engine, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "iSr" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27 @@ -41680,10 +41989,6 @@ "iTx" = ( /turf/open/floor/iron/dark, /area/station/security/interrogation) -"iTC" = ( -/obj/machinery/vatgrower, -/turf/open/floor/engine, -/area/station/science/explab) "iTH" = ( /turf/open/floor/iron/chapel{ dir = 4 @@ -41730,6 +42035,10 @@ "iVu" = ( /turf/open/floor/iron/dark, /area/station/security/office) +"iVv" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/floor/grass, +/area/station/science/cytology) "iWe" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/thinplating/dark/corner{ @@ -42001,6 +42310,7 @@ "jeI" = ( /obj/effect/spawner/random/entertainment/drugs, /obj/effect/spawner/random/burgerstation/loot/with_maintenance_loot, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/station/maintenance/aft) "jeQ" = ( @@ -42355,8 +42665,19 @@ /turf/open/floor/iron/dark/textured, /area/station/command/heads_quarters/blueshield) "jpu" = ( -/obj/machinery/vending/clothing, -/turf/open/floor/iron/dark, +/obj/structure/table, +/obj/item/reagent_containers/condiment/protein{ + pixel_x = -8; + pixel_y = 7 + }, +/obj/item/reagent_containers/condiment/milk/small_ration{ + pixel_x = 2 + }, +/obj/structure/closet/mini_fridge, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/turf/open/floor/iron, /area/station/commons/fitness) "jpA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ @@ -42530,6 +42851,7 @@ "jsP" = ( /obj/structure/table/optable, /obj/item/paper/guides/jobs/medical/morgue, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron/dark, /area/station/medical/morgue) "jsT" = ( @@ -42542,6 +42864,12 @@ dir = 8 }, /area/station/engineering/atmos/hfr_room) +"jtb" = ( +/obj/machinery/vatgrower{ + dir = 4 + }, +/turf/open/floor/grass, +/area/station/science/cytology) "jte" = ( /obj/machinery/conveyor{ dir = 4; @@ -42582,7 +42910,15 @@ /area/station/security/processing) "jtQ" = ( /obj/effect/landmark/start/assistant, -/turf/open/floor/iron, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, /area/station/commons/fitness) "jud" = ( /turf/open/floor/iron/dark, @@ -42688,6 +43024,12 @@ /obj/machinery/vending/cola/pwr_game, /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) +"jys" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "jzb" = ( /obj/machinery/door/airlock/research/glass{ name = "Ordnance Lab" @@ -42722,6 +43064,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"jAi" = ( +/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/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/aft) "jAv" = ( /obj/machinery/space_heater, /obj/structure/sign/poster/official/random/directional/east, @@ -43205,11 +43555,7 @@ /turf/open/floor/plating, /area/station/maintenance/aft) "jTp" = ( -/obj/effect/decal/cleanable/dirt, /obj/item/circuitboard/machine/experimentor, -/obj/structure/closet/crate{ - name = "E.X.P.E.R.I-MENTOR Supply Crate" - }, /obj/item/stock_parts/scanning_module, /obj/item/stock_parts/micro_laser, /obj/item/stock_parts/micro_laser, @@ -43217,8 +43563,11 @@ /obj/item/stock_parts/servo, /obj/item/stack/sheet/iron/five, /obj/item/stack/cable_coil, +/obj/structure/closet/crate{ + name = "E.X.P.E.R.I-MENTOR Supply Crate" + }, /obj/effect/turf_decal/stripes/line{ - dir = 10 + dir = 8 }, /turf/open/floor/iron/dark, /area/station/science/explab) @@ -43314,6 +43663,10 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/commons/storage/tools) +"jWl" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/station/science/cytology) "jWt" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/decal/cleanable/dirt, @@ -43420,6 +43773,17 @@ }, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) +"kaE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing, +/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/plating, +/area/station/maintenance/starboard/fore) "kbk" = ( /obj/machinery/computer/exoscanner_control{ dir = 4 @@ -43740,6 +44104,7 @@ /obj/structure/chair/office/light{ dir = 1 }, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron/dark/small, /area/station/cargo/bitrunning/den) "kkc" = ( @@ -43871,6 +44236,13 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central) +"kpb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kpe" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/warning{ dir = 9 @@ -44073,6 +44445,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, /obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/pipe_scrubber, /turf/open/floor/iron, /area/station/science/ordnance/storage) "kwD" = ( @@ -44125,6 +44498,13 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) +"kyp" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 1 + }, +/obj/structure/chair/sofa/right/brown, +/turf/open/floor/iron, +/area/station/commons/fitness) "kyO" = ( /obj/machinery/camera/directional/south{ c_tag = "Brig Central" @@ -44151,8 +44531,11 @@ /turf/open/floor/iron, /area/station/commons/dorms) "kzL" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/closet/lasertag/blue, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "kzT" = ( @@ -44174,6 +44557,11 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) +"kAH" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "kAK" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -44327,6 +44715,10 @@ /obj/structure/weightmachine, /turf/open/floor/iron/dark/side, /area/station/security/prison) +"kFm" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/maintenance/aft) "kFx" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -44463,6 +44855,11 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall, /area/station/maintenance/aft) +"kKu" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kKM" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 10 @@ -44525,8 +44922,25 @@ "kNm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/item/gun/energy/laser/practice{ + pixel_y = -3 + }, +/obj/machinery/light_switch{ + pixel_y = 28 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/item/gun/energy/laser/practice{ + pixel_x = 1; + pixel_y = 2 + }, /turf/open/floor/iron, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "kNq" = ( /obj/effect/turf_decal/trimline/green/line, /obj/item/kirbyplants/random/fullysynthetic, @@ -44694,6 +45108,7 @@ /obj/structure/table/wood, /obj/machinery/light/directional/east, /obj/item/flashlight/lamp, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood, /area/station/commons/vacant_room/office) "kRc" = ( @@ -44768,11 +45183,11 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/rd) "kWk" = ( -/obj/structure/chair/stool/bar, -/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/cytology) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/explab) "kWp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, @@ -44890,11 +45305,6 @@ /turf/open/floor/iron, /area/station/security/prison/safe) "lbd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/thinplating/light{ dir = 4 }, @@ -45019,6 +45429,13 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/service/library) +"lfU" = ( +/obj/structure/window/reinforced/spawner/directional/north{ + pixel_y = 2 + }, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/station/science/cytology) "lgc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 9 @@ -45139,6 +45556,19 @@ /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) +"lon" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/item/storage/medkit/brute{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/desk_bell/speed_demon{ + pixel_x = -16 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "loM" = ( /obj/structure/disposalpipe/junction/yjunction{ dir = 1 @@ -45226,18 +45656,15 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "lsM" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/door/airlock/corporate{ - name = "Blueshield's Quarters" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, /obj/structure/cable, -/obj/effect/landmark/navigate_destination, -/obj/effect/mapping_helpers/airlock/access/all/command/captain, -/turf/open/floor/wood, +/obj/structure/curtain/cloth/fancy/mechanical{ + icon_state = "bounty-open"; + icon_type = "bounty"; + id = "prisonlibrarycurtain4"; + name = "curtain" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/station/command/heads_quarters/blueshield) "lsP" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -45328,6 +45755,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/maintenance/aft) +"lwU" = ( +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "lxj" = ( /obj/item/toy/figure/rd{ pixel_y = 11 @@ -45485,17 +45918,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth_large, /area/station/engineering/main) -"lBc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/button/door/directional/south{ - id = "cytologysecure"; - name = "Pen Lockdown" - }, -/turf/open/floor/iron/dark, -/area/station/science/cytology) "lBh" = ( /obj/machinery/recharge_station, /obj/effect/decal/cleanable/dirt, @@ -45513,6 +45935,7 @@ "lBD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/trash_pile, +/obj/item/trash/energybar, /turf/open/floor/iron/dark/small, /area/station/cargo/bitrunning/den) "lCb" = ( @@ -45557,6 +45980,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/fore) +"lDZ" = ( +/obj/machinery/door/window/right/directional/north{ + req_access = list("science"); + name = "Cytology" + }, +/turf/open/floor/grass, +/area/station/science/cytology) "lEl" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -45909,12 +46339,13 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "lOU" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/paper_bin, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/science/cytology) +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/poddoor/preopen{ + id = "cytologysecure"; + name = "Secure Pen Lockdown" + }, +/turf/open/floor/plating, +/area/station/science/auxlab/firing_range) "lOX" = ( /obj/machinery/suit_storage_unit/hos, /obj/effect/turf_decal/stripes{ @@ -46015,6 +46446,16 @@ /obj/machinery/recharge_station, /turf/open/floor/iron/dark, /area/station/security/office) +"lSQ" = ( +/obj/structure/railing, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "lSU" = ( /obj/effect/turf_decal/tile/dark_blue, /turf/open/floor/iron/dark/textured_corner, @@ -46339,9 +46780,8 @@ }, /area/station/security/prison) "meU" = ( -/obj/structure/rack, -/obj/item/integrated_circuit/loaded/hello_world, -/obj/item/integrated_circuit/loaded/speech_relay, +/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/explab) "mfD" = ( @@ -46460,6 +46900,12 @@ }, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) +"mjW" = ( +/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/white, +/area/station/science/xenobiology) "mku" = ( /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/carpet, @@ -46468,7 +46914,6 @@ /obj/structure/bodycontainer/morgue/beeper_off{ dir = 2 }, -/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/dark, /area/station/medical/morgue) "mlh" = ( @@ -46477,6 +46922,10 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"mll" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/plating, +/area/station/maintenance/aft) "mmf" = ( /obj/machinery/button/door/directional/north{ id = "gatewayshutters"; @@ -46579,9 +47028,6 @@ name = "Brig Desk"; req_access = list("brig") }, -/obj/item/restraints/handcuffs, -/obj/item/radio/off, -/obj/machinery/computer/security/telescreen/normal/directional/south, /turf/open/floor/iron/dark, /area/station/security/brig) "mrg" = ( @@ -46618,10 +47064,6 @@ }, /turf/open/floor/engine, /area/station/science/explab) -"mrX" = ( -/obj/machinery/vending/autodrobe/all_access, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "msc" = ( /obj/structure/sign/warning/no_smoking/circle/directional/east, /turf/closed/wall, @@ -46662,6 +47104,17 @@ /obj/machinery/computer/prisoner/gulag_teleporter_computer, /turf/open/floor/iron/dark, /area/station/security/processing) +"mtq" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/fitness) "mts" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46753,6 +47206,17 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"mvN" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "mwi" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "briggate"; @@ -47270,11 +47734,11 @@ /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/command/nuke_storage) "mSk" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 6 - }, -/turf/open/floor/engine, -/area/station/science/cytology) +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/iron, +/area/station/science/auxlab/firing_range) "mSu" = ( /obj/machinery/mech_bay_recharge_port{ dir = 8 @@ -47295,17 +47759,9 @@ /turf/open/floor/iron, /area/station/security/prison) "mUx" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/structure/crate, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating, -/area/station/maintenance/aft) +/area/station/maintenance/starboard/aft) "mUy" = ( /obj/machinery/door/airlock/command{ name = "Captain's Office" @@ -47576,6 +48032,7 @@ dir = 1 }, /obj/machinery/airalarm/directional/south, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, /turf/open/floor/iron/white, /area/station/medical/break_room) "ncD" = ( @@ -47663,7 +48120,7 @@ "neV" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/camera/autoname/directional/south, -/obj/machinery/requests_console/directional/south, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, /turf/open/floor/carpet, /area/station/science/breakroom) "nfj" = ( @@ -47768,6 +48225,14 @@ dir = 8 }, /area/station/hallway/primary/central) +"nls" = ( +/obj/structure/rack, +/obj/item/clothing/mask/gas, +/obj/structure/sign/warning/vacuum/external/directional/north, +/obj/item/multitool, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "nlx" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -47807,12 +48272,13 @@ /turf/open/floor/iron, /area/station/medical/pharmacy) "nlQ" = ( -/obj/structure/trash_pile, -/obj/item/storage/box/monkeycubes{ - pixel_x = -5 +/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/smooth_edge{ + dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/area/station/science/cytology) "nlW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/large, @@ -47854,11 +48320,10 @@ /turf/open/floor/iron, /area/station/commons/locker) "nnI" = ( -/obj/structure/table, -/obj/structure/microscope, -/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/north, /turf/open/floor/iron, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "noK" = ( /obj/structure/girder, /turf/open/floor/iron/dark, @@ -48039,11 +48504,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/table/glass, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/folder/white, /obj/item/radio/intercom/directional/south, +/obj/machinery/smartfridge/extract/preloaded, /turf/open/floor/iron, /area/station/science/xenobiology) "nxP" = ( @@ -48106,13 +48568,16 @@ /turf/open/floor/iron/grimy, /area/station/service/library/abandoned) "nzE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate{ + name = "Target Practice Crate" }, -/obj/machinery/atmospherics/components/binary/pump, -/turf/open/floor/iron/dark, -/area/station/science/cytology) +/obj/item/target/clown, +/obj/item/target/syndicate, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/auxlab/firing_range) "nzH" = ( /obj/machinery/door/airlock/corporate{ name = "Representative's Quarters"; @@ -48423,18 +48888,11 @@ /obj/machinery/door/poddoor/incinerator_atmos_aux, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"nLD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "nLO" = ( +/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/trash_pile, /turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/area/station/maintenance/port/aft) "nLS" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -48764,14 +49222,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/textured_large, /area/station/hallway/primary/central) -"nTD" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/structure/sign/painting/library{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/station/service/library) "nTG" = ( /obj/effect/turf_decal/siding/white{ dir = 9 @@ -48835,11 +49285,15 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "nXf" = ( -/obj/structure/chair{ +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ dir = 4 }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, /area/station/commons/fitness) "nXi" = ( /obj/effect/landmark/navigate_destination, @@ -48948,19 +49402,9 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "nZP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/poddoor/preopen{ - id = "experilab"; - name = "Experimentation Lab Lockdown" - }, -/obj/machinery/door/window/left/directional/east{ - name = "Containment Cell"; - req_access = list("science") - }, +/obj/effect/landmark/event_spawn, /turf/open/floor/engine, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "nZS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49048,6 +49492,17 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/port/aft) +"oex" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) "oeC" = ( /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron, @@ -49105,9 +49560,6 @@ }, /turf/open/floor/circuit/telecomms, /area/station/science/xenobiology) -"ohi" = ( -/turf/open/water, -/area/station/maintenance/port/fore) "ohj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, @@ -49551,6 +50003,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"oyf" = ( +/obj/machinery/light_switch{ + pixel_y = 28 + }, +/obj/machinery/vending/autodrobe, +/turf/open/floor/iron, +/area/station/commons/locker) "oyM" = ( /obj/structure/cable, /obj/effect/landmark/start/head_of_security, @@ -49750,6 +50209,14 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison) +"oEA" = ( +/obj/machinery/door/airlock/engineering{ + name = "Starboard Bow Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "oEV" = ( /obj/structure/railing{ dir = 10 @@ -49958,12 +50425,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible/layer4, /turf/open/floor/plating, /area/station/security/prison) +"oOj" = ( +/obj/effect/spawner/random/burgerstation/liquid, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "oOF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"oOQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/boozeomat, +/turf/open/floor/wood, +/area/station/maintenance/abandon_cafeteria) "oOU" = ( /obj/structure/closet/secure_closet/miner, /obj/item/radio/intercom/directional/east, @@ -50482,6 +50959,25 @@ }, /turf/open/floor/iron/dark, /area/station/service/barber) +"pix" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Fitness Room" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/vending/autodrobe, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/commons/fitness) "piD" = ( /obj/machinery/light/directional/west, /obj/machinery/portable_atmospherics/pump, @@ -50617,10 +51113,14 @@ /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "pnD" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "pnL" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -50687,6 +51187,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/commons/storage/primary) +"ppU" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/plating, +/area/station/maintenance/aft) "ppW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/plating, @@ -50711,6 +51220,7 @@ /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/cobweb, /turf/open/floor/iron/dark, /area/station/security/courtroom) "pqP" = ( @@ -50908,6 +51418,11 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/maintenance/port) +"pzZ" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/vg_decals/department/bar, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "pAk" = ( /obj/structure/table, /obj/item/kitchen/rollingpin{ @@ -51171,6 +51686,10 @@ /obj/machinery/light/directional/west, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) +"pIw" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/cytology) "pIJ" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -51264,15 +51783,18 @@ /turf/open/floor/plating, /area/station/maintenance/disposal) "pLA" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/obj/structure/curtain/cloth/fancy/mechanical{ - icon_state = "bounty-open"; - icon_type = "bounty"; - id = "prisonlibrarycurtain4"; - name = "curtain" +/obj/effect/landmark/navigate_destination, +/obj/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 }, -/turf/open/floor/plating, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/airlock/corporate{ + name = "Blueshield's Quarters" + }, +/turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) "pLL" = ( /obj/structure/extinguisher_cabinet{ @@ -51324,6 +51846,7 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, +/obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) "pOC" = ( @@ -51592,6 +52115,7 @@ /area/station/service/hydroponics) "pWm" = ( /obj/structure/frame/machine/secured, +/obj/item/circuitboard/machine/flatpacker, /turf/open/floor/iron, /area/station/science/lab) "pWp" = ( @@ -51667,6 +52191,14 @@ }, /turf/open/floor/engine/n2, /area/station/engineering/atmos) +"qar" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/bed, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) "qat" = ( /obj/structure/falsewall, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51861,6 +52393,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/service/janitor) +"qgu" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "qgC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/north, @@ -52124,6 +52660,17 @@ }, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) +"qqC" = ( +/obj/effect/turf_decal/tile/dark{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/commons/fitness) "qqW" = ( /obj/structure/rack, /obj/machinery/status_display/evac{ @@ -52489,6 +53036,7 @@ /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood, /area/station/service/library/abandoned) "qFL" = ( @@ -52508,6 +53056,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard) +"qGx" = ( +/obj/machinery/power/solar_control{ + id = "auxsolareast"; + name = "Starboard Bow Solar Control" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "qGI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/structure/window/reinforced/tinted, @@ -52597,13 +53153,13 @@ /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/hfr_room) "qHR" = ( -/obj/machinery/computer/security/telescreen/interrogation, /obj/structure/cable, /obj/effect/turf_decal/trimline/dark_blue/filled/line{ dir = 1 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/computer/security/telescreen/interrogation/directional/north, /turf/open/floor/iron/dark, /area/station/security/brig) "qHX" = ( @@ -52650,15 +53206,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/mineral/titanium/blue, /area/station/commons/toilet) -"qKh" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/obj/machinery/incident_display/delam/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "qKp" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -52685,21 +53232,23 @@ /turf/open/floor/plating, /area/station/security/prison) "qLd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/science/cytology) +/turf/open/floor/iron/white, +/area/station/science/explab) "qLk" = ( /obj/machinery/computer/cargo, /turf/open/floor/carpet/royalblack, /area/station/command/heads_quarters/qm) +"qLv" = ( +/obj/machinery/power/terminal, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "qLx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52892,11 +53441,8 @@ /turf/open/floor/iron, /area/station/commons/locker) "qRt" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 5 - }, /turf/open/floor/engine, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "qRE" = ( /obj/structure/table, /obj/item/pai_card, @@ -53054,13 +53600,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "qWu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, /turf/open/floor/engine, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "qWy" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53332,6 +53874,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/engine_smes) +"ree" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/training_machine, +/obj/item/target, +/turf/open/floor/iron, +/area/station/commons/fitness) "reH" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -53425,6 +53973,10 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/aft) +"rhR" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "rhV" = ( /obj/structure/chair/wood{ dir = 4 @@ -53466,6 +54018,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"rjU" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Ordnance Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/iron/dark/airless, +/area/station/science/ordnance/freezerchamber) "rkf" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -53757,6 +54316,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, +/obj/structure/cable, /turf/open/floor/mineral/gold, /area/station/command/heads_quarters/qm) "rtB" = ( @@ -53832,8 +54392,10 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/chair/stool/directional/west, /obj/effect/spawner/random/trash, +/obj/structure/chair/office/tactical{ + dir = 8 + }, /turf/open/floor/iron/dark, /area/station/cargo/bitrunning/den) "rxv" = ( @@ -53877,6 +54439,12 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) +"rym" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/vg_decals/department/bar, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "ryC" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ dir = 4 @@ -54013,6 +54581,11 @@ "rAC" = ( /turf/open/floor/wood, /area/station/service/lawoffice) +"rBG" = ( +/obj/machinery/vending/autodrobe, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/maintenance/abandon_cafeteria) "rBN" = ( /obj/effect/turf_decal/bot, /turf/closed/wall/r_wall, @@ -54281,14 +54854,16 @@ /area/station/security/office) "rMU" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/modular_computer/preset/civilian{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ - dir = 5 + dir = 4 }, /turf/open/floor/iron, /area/station/science/ordnance) +"rMV" = ( +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/commons/fitness) "rNh" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -54550,21 +55125,6 @@ /obj/item/stack/rods/fifty, /turf/open/floor/iron/smooth_large, /area/station/engineering/gravity_generator) -"rWl" = ( -/obj/item/chair/plastic{ - pixel_y = 10 - }, -/obj/item/chair/plastic{ - pixel_y = 5 - }, -/obj/item/chair/plastic, -/obj/structure/rack, -/obj/item/stack/sheet/glass{ - amount = 12 - }, -/obj/item/stack/cable_coil/five, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "rWN" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -54575,6 +55135,9 @@ "rXJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, /turf/open/floor/iron/dark/small, /area/station/cargo/bitrunning/den) "rXY" = ( @@ -54639,7 +55202,6 @@ /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "sad" = ( -/obj/machinery/airalarm/directional/west, /obj/effect/spawner/random/structure/grille, /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54688,6 +55250,19 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"sch" = ( +/obj/effect/turf_decal/stripes/blue/line{ + dir = 5 + }, +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/bot_white/right, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/station/commons/fitness) "scL" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, @@ -54970,6 +55545,10 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/break_room) +"smk" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/solars/starboard/fore) "smo" = ( /obj/machinery/recharger{ pixel_y = 4 @@ -55154,6 +55733,11 @@ req_access = list("brig"); name = "Brig Desk" }, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, /turf/open/floor/iron/dark, /area/station/security/brig) "sqp" = ( @@ -55191,9 +55775,17 @@ /turf/open/floor/iron/dark, /area/station/hallway/primary/fore) "srU" = ( -/obj/effect/decal/cleanable/cobweb, -/turf/closed/wall/r_wall, -/area/station/science/xenobiology) +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/closet/lasertag/red, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"ssc" = ( +/obj/structure/closet/masks, +/obj/effect/landmark/start/hangover/closet, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "stP" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -55210,7 +55802,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/iron/white, +/obj/item/wrench, +/turf/open/floor/plating, /area/station/maintenance/starboard/aft) "suK" = ( /obj/item/electropack/shockcollar, @@ -55240,6 +55833,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/hallway/primary/central) +"svO" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/commons/fitness) "swA" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -55356,6 +55956,13 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"sAR" = ( +/obj/machinery/door/airlock/research{ + name = "Cyto Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/science/xenobio, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "sAV" = ( /obj/structure/grille, /obj/effect/decal/cleanable/dirt, @@ -55415,10 +56022,19 @@ /turf/open/floor/iron/dark, /area/station/security/courtroom) "sDq" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) +"sDM" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/station/commons/fitness) "sDW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55490,7 +56106,6 @@ /area/station/command/heads_quarters/cmo) "sHc" = ( /obj/structure/table/wood, -/obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/storage/briefcase, /obj/item/pen/fountain, /obj/item/pen/fourcolor{ @@ -55546,6 +56161,7 @@ name = "Secure Storage"; req_access = list("morgue_secure") }, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/dark, /area/station/medical/morgue) "sIZ" = ( @@ -55590,13 +56206,21 @@ }, /area/station/security/prison) "sJG" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) +/turf/open/floor/plating/airless, +/area/station/solars/starboard/fore) "sJN" = ( /obj/machinery/power/port_gen/pacman, /turf/open/floor/plating, /area/station/maintenance/department/electrical) +"sKC" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) "sKS" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -55672,15 +56296,10 @@ /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) "sMz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) +/obj/effect/turf_decal/box/blue, +/obj/structure/closet/secure_closet/evidence, +/turf/open/floor/iron/dark, +/area/station/security/brig) "sNC" = ( /obj/structure/chalkboard, /turf/closed/wall, @@ -55706,6 +56325,14 @@ }, /turf/open/floor/iron/smooth_large, /area/station/engineering/main) +"sNX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/station/cargo/bitrunning/den) "sNY" = ( /obj/effect/landmark/carpspawn, /turf/open/space/basic, @@ -56164,9 +56791,9 @@ /turf/open/floor/iron, /area/station/cargo/storage) "tds" = ( -/obj/structure/closet/secure_closet/cytology, -/turf/open/floor/iron, -/area/station/science/cytology) +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall/r_wall, +/area/station/science/auxlab/firing_range) "tdz" = ( /obj/structure/cable, /obj/structure/sink/directional/west, @@ -56246,6 +56873,7 @@ /area/station/security/prison) "tgp" = ( /obj/machinery/atmospherics/components/binary/pump, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/fore) "tgF" = ( @@ -56300,11 +56928,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"tiA" = ( -/obj/structure/cable, -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/engineering/main) "tiR" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ dir = 8 @@ -56342,9 +56965,9 @@ /obj/machinery/camera/directional/north{ c_tag = "Kitchen" }, -/obj/structure/closet/secure_closet/freezer/fridge, /obj/structure/cable, /obj/item/radio/intercom/directional/north, +/obj/structure/closet/secure_closet/freezer/kitchen, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "tka" = ( @@ -56429,11 +57052,13 @@ /turf/open/floor/iron, /area/station/cargo/office) "tnh" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 10 +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger{ + pixel_y = 5 }, -/turf/open/floor/engine, -/area/station/science/cytology) +/turf/open/floor/iron/white, +/area/station/science/explab) "tnF" = ( /obj/structure/cable, /obj/structure/extinguisher_cabinet{ @@ -56504,6 +57129,14 @@ }, /turf/open/floor/engine, /area/station/engineering/main) +"tqB" = ( +/obj/effect/spawner/random/burgerstation/loot/with_maintenance_loot, +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Fore Starboard Solar Access" + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "tqI" = ( /turf/open/floor/engine, /area/station/science/explab) @@ -56530,13 +57163,11 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "tte" = ( -/obj/machinery/door/poddoor/preopen{ - id = "cytologysecure"; - name = "Secure Pen Lockdown" +/obj/effect/turf_decal/stripes{ + dir = 9 }, -/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "tti" = ( /obj/machinery/computer/cryopod/directional/west, /obj/machinery/cryopod{ @@ -56658,10 +57289,10 @@ /turf/open/floor/iron/dark, /area/station/security/medical) "twX" = ( -/obj/structure/reagent_dispensers/water_cooler, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/vending/cigarette, /turf/open/floor/iron/dark/side, /area/station/commons/dorms) "txy" = ( @@ -56824,14 +57455,11 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/science/ordnance/bomb) -"tDr" = ( -/obj/effect/turf_decal/stripes/red/box, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/open/floor/iron, -/area/station/science/cytology) "tDC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, /turf/open/floor/iron, @@ -56857,6 +57485,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"tEK" = ( +/obj/effect/spawner/random/trash/mess, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "tEN" = ( /obj/docking_port/stationary{ dheight = 3; @@ -56886,6 +57519,26 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard) +"tGi" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/vending/games, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/commons/fitness) +"tGs" = ( +/obj/structure/table, +/obj/item/training_toolbox{ + pixel_y = 5 + }, +/obj/item/training_toolbox{ + pixel_y = -2 + }, +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/iron, +/area/station/commons/fitness) "tGv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56905,9 +57558,14 @@ /turf/open/floor/iron/dark, /area/station/security/brig) "tHv" = ( -/obj/machinery/vending/cigarette, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "tHT" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 2"; @@ -57033,9 +57691,14 @@ /turf/open/floor/engine, /area/station/engineering/supermatter) "tKG" = ( -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron, -/area/station/science/cytology) +/obj/machinery/door/airlock/research{ + name = "Firing Range" + }, +/obj/effect/mapping_helpers/airlock/access/any/science/general, +/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/auxlab/firing_range) "tKY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -57271,11 +57934,22 @@ "tTU" = ( /turf/open/floor/iron/kitchen, /area/station/security/prison) +"tUi" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white, +/obj/structure/punching_bag, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/iron, +/area/station/commons/fitness) "tUq" = ( /obj/effect/turf_decal/bot_white/right, /obj/structure/closet/crate/goldcrate, /obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/item/pen, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) "tUV" = ( @@ -57507,6 +58181,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/cryo) +"ucn" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall/r_wall, +/area/station/maintenance/solars/starboard/fore) "uco" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 @@ -57652,6 +58330,12 @@ }, /turf/open/floor/carpet, /area/station/commons/dorms) +"ukT" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "ukX" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/line, /turf/open/floor/iron/dark, @@ -57759,6 +58443,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"upx" = ( +/obj/structure/weightmachine/weightlifter, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "upJ" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 @@ -57834,15 +58525,8 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "uss" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Testing Lab"; - network = list("ss13","rd") - }, -/obj/structure/table, -/obj/item/storage/toolbox/electrical{ - pixel_y = 5 - }, -/turf/open/floor/iron/white, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/engine, /area/station/science/explab) "usA" = ( /obj/machinery/conveyor{ @@ -58226,7 +58910,7 @@ "uHu" = ( /obj/structure/cable, /turf/open/floor/iron, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "uIQ" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -58364,6 +59048,10 @@ }, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"uOi" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/fore) "uOx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/window/reinforced/spawner/directional/west, @@ -58589,6 +59277,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, /turf/open/floor/iron, /area/station/command/bridge) "uUe" = ( @@ -58818,6 +59507,21 @@ /obj/effect/turf_decal/siding/wood/end, /turf/open/floor/iron/dark/textured_large, /area/station/service/library) +"vdd" = ( +/obj/structure/railing/corner/end/flip{ + dir = 1 + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/light{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "ves" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -59067,6 +59771,20 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/kitchen, /area/station/security/prison) +"vlw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/aft) "vlB" = ( /obj/structure/chair{ dir = 8 @@ -59197,14 +59915,15 @@ /turf/open/floor/iron/smooth_half, /area/station/engineering/main) "vpB" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/structure/railing{ + dir = 5 }, +/obj/effect/turf_decal/bot_white/right, /turf/open/floor/iron/dark/side{ - dir = 6 + dir = 5 }, /area/station/commons/fitness) "vpO" = ( @@ -59223,6 +59942,11 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/service/hydroponics) +"vqX" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "vrh" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -59268,6 +59992,12 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"vsQ" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/obj/item/stack/cable_coil, +/turf/open/space/basic, +/area/station/solars/starboard/fore) "vtB" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -59320,6 +60050,14 @@ }, /turf/open/floor/wood, /area/station/security/prison) +"vwM" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "vwX" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -59423,6 +60161,28 @@ }, /turf/open/floor/iron/white, /area/station/science/explab) +"vzT" = ( +/obj/structure/cable, +/obj/structure/table, +/obj/item/book/manual/wiki/cytology{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/swab{ + pixel_y = 10; + pixel_x = 5 + }, +/obj/item/biopsy_tool{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/petri_dish{ + pixel_y = -1; + pixel_x = -1 + }, +/obj/item/hand_labeler, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "vAv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -59906,11 +60666,6 @@ }, /turf/open/floor/plating, /area/station/science/server) -"vOr" = ( -/obj/machinery/vending/autodrobe/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/maintenance/abandon_cafeteria) "vOt" = ( /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/tile/purple/opposingcorners{ @@ -60119,11 +60874,11 @@ "vXl" = ( /obj/structure/cable, /obj/machinery/door/airlock/research{ - name = "Cyto Access" + name = "Firing Range" }, /obj/effect/mapping_helpers/airlock/access/any/science/general, /turf/open/floor/plating, -/area/station/science/cytology) +/area/station/science/auxlab/firing_range) "vXW" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/flora/bush/jungle/b, @@ -60260,18 +61015,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/office) -"wdv" = ( -/obj/machinery/modular_computer/preset/engineering, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/machinery/incident_display/bridge/directional/north, -/turf/open/floor/iron, -/area/station/command/bridge) "wdA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron/white, @@ -60515,6 +61258,24 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/security/prison) +"wkZ" = ( +/obj/structure/closet/crate/engineering, +/obj/item/gps/engineering, +/obj/item/gps/engineering, +/obj/item/clothing/head/playbunnyears/engineer, +/obj/item/clothing/head/playbunnyears/engineer, +/obj/item/clothing/head/utility/hardhat, +/obj/item/clothing/head/utility/hardhat, +/obj/item/clothing/head/utility/hardhat/orange, +/obj/item/clothing/head/utility/hardhat/orange, +/obj/item/clothing/head/utility/hardhat/red, +/obj/item/clothing/head/utility/hardhat/red, +/obj/item/clothing/head/beret/atmos, +/obj/item/clothing/head/beret/atmos, +/obj/item/clothing/head/beret/engi, +/obj/item/clothing/head/beret/engi, +/turf/open/floor/plating, +/area/station/maintenance/aft) "wlB" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ @@ -60977,6 +61738,11 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/smooth_large, /area/station/hallway/secondary/service) +"wBv" = ( +/obj/structure/weightmachine, +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/iron, +/area/station/commons/fitness) "wBE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/thinplating/light, @@ -60995,11 +61761,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"wCp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/boozeomat/all_access, -/turf/open/floor/wood, -/area/station/maintenance/abandon_cafeteria) "wCx" = ( /obj/structure/frame/computer, /obj/effect/mapping_helpers/broken_floor, @@ -61016,12 +61777,9 @@ /turf/open/floor/iron, /area/station/cargo/miningdock) "wCU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/cytology) +/obj/machinery/dish_drive/bullet, +/turf/open/floor/iron, +/area/station/science/auxlab/firing_range) "wDq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 6 @@ -61046,6 +61804,18 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"wEe" = ( +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/commons/fitness) "wEv" = ( /obj/structure/tank_holder/oxygen, /turf/open/floor/plating, @@ -61154,6 +61924,16 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/engineering/gravity_generator) +"wIx" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/west, +/obj/machinery/pdapainter/supply, +/obj/machinery/computer/security/telescreen/cargo/directional/north, +/obj/machinery/camera/directional/west{ + c_tag = "Quartermaster's Office"; + network = list("ss13","cargo") + }, +/turf/open/floor/carpet/royalblack, +/area/station/command/heads_quarters/qm) "wIK" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/item/radio/intercom/directional/west, @@ -61316,6 +62096,7 @@ /area/station/maintenance/starboard/aft) "wOS" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, /turf/closed/wall, /area/station/maintenance/aft) "wPd" = ( @@ -61348,9 +62129,18 @@ /obj/item/screwdriver{ pixel_y = 10 }, -/obj/item/analyzer, -/obj/item/pipe_dispenser, +/obj/item/analyzer{ + pixel_x = 8 + }, +/obj/item/pipe_dispenser{ + pixel_x = -2; + pixel_y = 2 + }, /obj/machinery/light/directional/north, +/obj/item/holosign_creator/atmos{ + pixel_x = -7; + pixel_y = -7 + }, /turf/open/floor/iron, /area/station/science/ordnance) "wQh" = ( @@ -61743,12 +62533,10 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) "xec" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Fitness Room South" - }, -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/engine, +/area/station/science/xenobiology) "xey" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -61783,8 +62571,15 @@ /turf/open/floor/iron/dark, /area/station/security/office) "xeQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, /area/station/commons/fitness) "xfe" = ( /obj/structure/window/reinforced/spawner/directional/west, @@ -61876,12 +62671,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/structure/closet/crate{ - name = "E.X.P.E.R.I-MENTOR Supply Crate" - }, -/obj/item/target/syndicate, -/obj/item/target/clown, -/obj/item/target/alien, +/obj/structure/rack, +/obj/item/integrated_circuit/loaded/speech_relay, +/obj/item/integrated_circuit/loaded/hello_world, /turf/open/floor/iron/dark, /area/station/science/explab) "xgo" = ( @@ -61936,6 +62728,13 @@ }, /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) +"xhx" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark/side, +/area/station/commons/fitness) "xhN" = ( /obj/structure/table/wood, /obj/item/toy/crayon/spraycan, @@ -62111,19 +62910,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) -"xmV" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/obj/machinery/computer/station_alert{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/ce/directional/west, -/turf/open/floor/iron/white/corner{ - dir = 4 - }, -/area/station/command/heads_quarters/ce) "xne" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/engine, @@ -62201,6 +62987,29 @@ }, /turf/open/floor/plating, /area/station/science/explab) +"xpq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) +"xpt" = ( +/obj/structure/cable, +/obj/item/storage/box/syringes{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/folder/white, +/obj/structure/table, +/obj/item/food/deadmouse{ + pixel_y = 18; + pixel_x = 4 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/station/science/cytology) "xpA" = ( /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, @@ -62442,11 +63251,14 @@ /area/station/maintenance/disposal) "xyR" = ( /obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Cell 1"; + c_tag = "Cytology"; network = list("ss13","xeno") }, -/turf/open/floor/engine, -/area/station/science/xenobiology) +/obj/machinery/smartfridge/petri/preloaded, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/station/science/cytology) "xzh" = ( /turf/open/space/basic, /area/space) @@ -62536,16 +63348,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"xCB" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/west, -/obj/machinery/pdapainter/supply, -/obj/machinery/computer/security/telescreen/cargo/directional/north, -/obj/machinery/camera/directional/west{ - c_tag = "Quartermaster's Office"; - network = list("ss13","cargo") - }, -/turf/open/floor/carpet/royalblack, -/area/station/command/heads_quarters/qm) "xCD" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, @@ -62567,6 +63369,17 @@ }, /turf/open/floor/wood, /area/station/maintenance/aft) +"xDe" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/spawner/random/maintenance/two, +/obj/structure/table, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "xDp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -62727,9 +63540,12 @@ /turf/open/floor/iron/grimy, /area/station/security/detectives_office) "xKS" = ( -/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_new{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness) "xKU" = ( @@ -62740,11 +63556,14 @@ /turf/open/floor/iron, /area/station/hallway/primary/port) "xLo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /obj/structure/cable, -/obj/structure/lattice/catwalk, -/obj/item/stack/cable_coil, -/turf/open/space/basic, -/area/station/solars/starboard/fore) +/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) "xLr" = ( /turf/open/floor/wood, /area/station/hallway/secondary/service) @@ -63356,6 +64175,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 6 }, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/aft) "yeI" = ( @@ -63485,8 +64305,8 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "yhZ" = ( -/obj/effect/spawner/random/structure/crate, /obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, /turf/open/floor/iron, /area/station/maintenance/port/aft) "yig" = ( @@ -63575,11 +64395,8 @@ name = "Brig Desk"; req_access = list("brig") }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, +/obj/item/radio/off, +/obj/item/restraints/handcuffs, /turf/open/floor/iron/dark, /area/station/security/brig) "ykK" = ( @@ -69907,7 +70724,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -70974,7 +71791,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -77660,7 +78477,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh @@ -78649,7 +79466,7 @@ jXl alU alU alU -ohi +alU alU alU aDg @@ -80186,7 +81003,7 @@ aok anJ anJ aFJ -alj +apD aol alU alU @@ -80442,7 +81259,7 @@ alR aom amC apP -amC +ccF amC aol aol @@ -81234,7 +82051,7 @@ aLE avJ aOn aPA -aQP +oyf axi aTx aTB @@ -83360,7 +84177,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -83597,7 +84414,7 @@ vLX bYu tKn fcO -jCY +cmq lrN vLX bHE @@ -84327,7 +85144,7 @@ aPz aav abK abX -xCB +wIx aed aea aem @@ -84877,7 +85694,7 @@ xzh xzh bCq bVE -vLX +nLO vLX bCq fLp @@ -85396,7 +86213,7 @@ vLX bCq nsM iMH -wCp +oOQ bCq kOB otQ @@ -85410,7 +86227,7 @@ bCq xzh sUX xzh -sNY +xzh xzh xzh xzh @@ -85855,7 +86672,7 @@ bjn ewj aJA rID -pLA +lsM aLl cyT aLE @@ -85897,7 +86714,7 @@ byE xto qhp fBm -fdJ +sNX wET bCq veE @@ -86113,7 +86930,7 @@ apg bCx aps pLA -aLE +jTW aMU aLE aPN @@ -86205,7 +87022,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -86370,7 +87187,7 @@ fXT mEE ghm lsM -sMz +aLE jTW aLE aPQ @@ -87456,7 +88273,7 @@ tlT wqq wqq vVc -vOr +rBG bCq bUt bCq @@ -88777,7 +89594,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh @@ -88917,7 +89734,7 @@ sLm agj mVz mVz -mVz +sMz aiX cQt srG @@ -89008,7 +89825,7 @@ ckB ckB ckB cjJ -tiA +cnY kja cBO cgR @@ -89431,7 +90248,7 @@ nmv agj mVz mVz -mVz +sMz aiX gnf jmA @@ -90009,7 +90826,7 @@ teU bKt bLx bCs -cCe +bKK bRl bNJ bLC @@ -91836,7 +92653,7 @@ lZH cTf cgR ccw -eGp +cDh cDp cDv cDD @@ -92595,7 +93412,7 @@ bSw cbr cau bXk -qKh +bYq cfb ceW cjM @@ -93372,7 +94189,7 @@ cfH cSL cim hjs -xmV +ceo cfb cfa aiN @@ -94086,7 +94903,7 @@ aOG aPR aPR aPR -wdv +aUb aVq aWM aYr @@ -95973,7 +96790,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -96232,7 +97049,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh @@ -98461,7 +99278,7 @@ dfp xAH eJQ bbx -alu +aYV iKz aYV bfF @@ -98718,7 +99535,7 @@ cTP aRw ntB twl -aDe +rym dCL bes bfF @@ -99460,16 +100277,16 @@ aBV aBW aCq rQR -aDS +pix aua aGb ams aMR awB xKS +ePf hBw -hBw -azr +xhx cVb cVb myW @@ -99489,7 +100306,7 @@ xJJ aXO aZb bbx -hXL +pzZ iKz bet tyB @@ -99719,15 +100536,15 @@ aLJ rQR ayz hBw -wpa -hBw -hBw +iox +eIP +wEe xeQ -xKS -hBw -hBw -azr -tHv +sch +upx +asX +sDM +rhR cVb vkQ uoD @@ -99975,16 +100792,16 @@ aCf kWp aDt aBR -aBR -aBR -aBR -aBR -aBR -xKS -jtQ hBw +tGs +erY +ukT +qqC +aIk +ghJ +azr efu -aCu +hyU cVb kWH dlp @@ -100225,7 +101042,7 @@ avp axm azd azd -azd +rcG azd azd aCf @@ -100233,15 +101050,15 @@ bte hBw hBw hBw -hBw -hBw -hBw -hBw -axY -hBw -hBw +lon +oex +fOu +vwM +aIk +jpu azr -bmz +gPY +ree cVb bkg xVA @@ -100482,23 +101299,23 @@ ass axm azd azd -rcG +azd azd azd aCf fnC rQR aEM -aEP -aGc hBw +wBv +vpB nXf -bgM +jtQ axY tDC -hBw azr -jpu +xpq +tUi cVb xLr aGA @@ -100735,7 +101552,7 @@ xzh xzh xzh arq -aCv +tGi bil azd azd @@ -100745,17 +101562,17 @@ azd aCf iWJ rQR -aEN -aFf -aGd -leY -bgS -cBP -leY -kbz -leY -vpB -xec +cjE +hBw +dqI +bZb +alu +alu +vdd +lwU +rMV +fNt +ssc cVb rrd xVA @@ -100816,7 +101633,7 @@ bIH bzs bPn bPn -bPn +bzs bzs bzs bzs @@ -101002,17 +101819,17 @@ azd aCh pKr rQR -rQR -arq -arq -gjD -arq -arq -gjD -arq -arq -rQR -rQR +euK +leY +kbz +leY +leY +leY +leY +kbz +leY +mtq +fmf cVb ijI goT @@ -101058,7 +101875,7 @@ lCT bIn bzs bKL -nEs +jAi nEs nEs nEs @@ -101070,13 +101887,13 @@ qTC bzs bAw bzs -buA -sUi -bAw bXZ +kFm +sUi bzs -dFS -caK +mll +bAw +apB bRa bxs upJ @@ -101259,16 +102076,16 @@ azd aCf iWJ rQR -aro -aro -aro -aro -aro -aro -aro -aro -aro -aro +rQR +arq +arq +gBW +arq +arq +gBW +arq +arq +rQR rQR dJS xLr @@ -101314,7 +102131,7 @@ pHl bFA wXA bzs -gsv +bzs bzs bzs bzs @@ -101329,11 +102146,11 @@ but bzs bAw vmy +dFS +bzs +wkZ bAw -bAw -bAw -bAw -bAw +ppU bRa bxB byw @@ -101518,7 +102335,7 @@ iWJ rQR aro aro -aGe +aro aro aro aro @@ -101543,7 +102360,7 @@ axD axD axD aYL -bak +aFf cVV uly teo @@ -101584,12 +102401,12 @@ buh cze bAw hzQ -bAw +cze bzs bzs bzs -ccF -bAw +bzs +alj bwc bRa bxD @@ -101775,11 +102592,11 @@ iWJ rQR aro aro +aGe aro aro aro aro -aGe aro aro aro @@ -102021,22 +102838,22 @@ xzh xzh arq auy -axm -azd -azd -azd -azd -azd -aCf -iWJ -rQR -aro +axM +azT +azT +azT +azT +azT +kyp +aDr +arq aro aro aro aro aro aro +aGe aro aro aro @@ -102278,16 +103095,17 @@ xzh xzh arq auS -axM -azT -enl -azT -azT -azT +hBw +hBw +hBw +wpa +hBw +hBw aCm aDr -rQR -aEO +arq +aro +aro aro aro aro @@ -102296,7 +103114,6 @@ aro aro aro aro -vUu rQR aLd xLr @@ -102314,7 +103131,7 @@ aTN aVB aVz cAg -bak +aEP cVV aYV iKz @@ -102357,11 +103174,11 @@ bRa bRa bRa bZO -hxs +vlw bzs ccG alV -bAw +vmy bRa cga chm @@ -102536,24 +103353,24 @@ xzh rQR auU axN -axN -axN +qar +aDw aBa -aBT +svO aBT aBT aDs rQR +aEO aro aro aro aro -aGe aro aro -aGe aro aro +vUu rQR czn xLr @@ -102777,38 +103594,38 @@ xzh xzh xzh xzh -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc +xzh +xzh +xzh +xzh +xzh +xzh +xzh +xzh +xzh +xzh +xzh +xzh +xzh rQR rQR arq arq arq rQR -arq -arq -arq +avm +avm +rQR rQR rQR aro aro aro aro +aGe aro aro -aro -aro +aGe aro aro rQR @@ -103034,9 +103851,6 @@ xzh xzh xzh xzh -bJc -xzh -sUX xzh xzh xzh @@ -103046,7 +103860,6 @@ xzh xzh xzh xzh -bJc xzh xzh xzh @@ -103056,8 +103869,12 @@ xzh xzh xzh xzh +alP +uOi +aGd +alP xzh -rQR +arq aro aro aro @@ -103291,19 +104108,9 @@ xzh xzh xzh xzh -bJc xzh -age -aee -age xzh -age -aee -age xzh -age -aee -age xzh xzh xzh @@ -103314,7 +104121,17 @@ xzh xzh xzh xzh -rQR +xzh +xzh +xzh +xzh +xzh +aof +aGd +aGd +aof +xzh +arq aro aro aro @@ -103387,7 +104204,7 @@ bRa bRa bzs bzs -mUx +wzK cdL sjo bzs @@ -103548,19 +104365,9 @@ xzh xzh xzh xzh -bJc xzh -age -aee -age xzh -age -aee -age xzh -age -aee -age xzh xzh xzh @@ -103571,17 +104378,27 @@ xzh xzh xzh xzh +xzh +xzh +xzh +xzh +xzh +aof +aGd +aGd +aof +xzh rQR -rQR -rQR -rQR -gjD -arq -arq -gjD -rQR -rQR -rQR +aro +aro +aro +aro +aro +aro +aro +aro +aro +aro rQR kPd cRr @@ -103805,19 +104622,9 @@ xzh xzh xzh xzh -bJc xzh -age -xLo -age xzh -age -aee -age xzh -age -aee -age xzh xzh xzh @@ -103831,14 +104638,24 @@ xzh xzh xzh xzh +xzh +xzh +aof +aGd +aGd +aof +xzh +rQR +rQR +rQR +arq +gBW +arq arq -blD -blD -gjY gBW rQR -aoe -aAu +alP +alP alP aNP hFi @@ -104061,41 +104878,41 @@ xzh xzh xzh xzh -xzh -xzh -xzh -age -aee -age -xzh -age -aee -age -xzh -age -aee -age -xzh -xzh -xzh -xzh -xzh -xzh +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc xzh xzh xzh xzh +aof +aGd +aGd +aof xzh xzh xzh +aEN arq aMp bSp -gjY +hns hgK rQR aoe -aCD +bWL alP kCD wBd @@ -104160,7 +104977,7 @@ caR bzs vTL cdL -uRs +bAw bzs gAG qFb @@ -104316,43 +105133,43 @@ xzh xzh xzh xzh -bJc -bJc +xzh +xzh bJc xzh +sUX xzh -age -aee -age xzh -age -aee -age xzh -age -aee -age xzh xzh xzh xzh xzh xzh -amw -aof -aof +sUX +xzh +bJc +xzh +xzh +xzh +xzh aof +aGd +aGd aof -alP -alP +xzh +xzh +xzh +xzh rQR aMq cpW hns hQC rQR -aoe -aIk +alP +alP alP alP alP @@ -104417,7 +105234,7 @@ bzs bzs wzK cdL -vmy +bAw bzs bzs wuS @@ -104573,47 +105390,47 @@ xzh xzh xzh xzh -bJc -xzh -sUX xzh xzh +bJc xzh +age aee +age xzh -xzh -xzh +age aee +age xzh -xzh -xzh +age aee +age xzh +bJc xzh xzh xzh -asX -amw -amw -amw -aoh -aoN -sDq -aof -kzL -anf +xzh +alP +uOi +aGd +alP +alP +alP +alP +alP rQR rQR rQR lOv rQR rQR -arI +xDe arI aCA -uGz -awD -aGW +aUx +alI +aGE aIp rAx aRJ @@ -104669,7 +105486,7 @@ bNk gIB bbE bRa -bZU +bIx yeE nEs ccN @@ -104830,47 +105647,47 @@ xzh xzh xzh xzh +xzh +xzh bJc -sUX -abc -aee +xzh +age aee -aqe -aqe -aqe -aqe -aqe -aqe -aqe -aqe -aqe -aqe -aqe -rJF -rJF -rJF +age atl -amv -ane +age +aee +age +xzh +age +aee +age +xzh +xzh +xzh +xzh +xzh +xzh +alP cxN -ane -aoM -ane -aqw -arr +cxN +alP +awG +bgS +kKu arr arr arr arr qNW aEe +aGc +daR apl -apl -apl -aCz -aUx -aUx -aGW +kpb +anf +kaE +anf aIp aBc awE @@ -104928,7 +105745,7 @@ bcw bRa bZT hxs -bAw +uRs cdL vmy iZM @@ -105087,48 +105904,48 @@ xzh xzh xzh xzh -bJc xzh -sUX xzh +bJc xzh +age +vsQ +age xzh +age aee +age xzh -xzh -xzh +age aee +age xzh xzh xzh -aee -xzh xzh xzh xzh -avs -amw -amw -amw -aoi -aoO -apB -aqx -art -aoP -atw -anf alP -awH +anf +aty +anf +anf +cAb +arr +anf +aty anf alP aCQ alP alP -awF -anf -bKK -hyp +srU +hHe +cLK +aoO +aqw +aGF +aIp aRJ aKU aME @@ -105149,7 +105966,7 @@ beB bfS bfS bfS -sJG +bfS gbT ipA iIT @@ -105161,10 +105978,10 @@ lHs buG bvA bzs -rhx +ccG +sUi rhx bAw -sUi bzs bzs bzs @@ -105344,9 +106161,8 @@ xzh xzh xzh xzh -bJc -bJc -bJc +xzh +xzh xzh xzh age @@ -105366,25 +106182,26 @@ xzh xzh xzh xzh -amw -aof -aof -aof -aof -aCQ alP -ldN -anf +atw +aqy +jaH +alP +alP +tHv alP -aoP anf -apE anf -izV alP -awG anf -bKK +dQe +alP +alP +izV +alP +alP +alP +alP alP vqW aRJ @@ -105600,10 +106417,9 @@ xzh xzh xzh xzh -xzh -xzh -xzh -xzh +bJc +bJc +bJc xzh xzh age @@ -105623,25 +106439,26 @@ xzh xzh xzh xzh -xzh -xzh -xzh -alP -aqy -anf +bgM +enl +enl +enl +enl +aCD +arr alP ary anf alP -alP -anf -alP -anf +uGz vvP alP -ffa -anf -aGF +kzL +lSQ +hvJ +bmz +amv +amw alP aJN aCt @@ -105675,8 +106492,8 @@ bto buL bvB bzs +bZN bxg -bBR bRa bRa bRa @@ -105857,48 +106674,48 @@ xzh xzh xzh xzh +bJc xzh +sUX xzh xzh xzh -bJc -xzh -age aee -age xzh -age -aee -age -xzh -age -aee -age xzh xzh +aee xzh xzh xzh +aee xzh xzh xzh xzh -alP -rWl -aqA -alP -atx +exP +bgM +bgM +bgM +qGx +iOK +jys +enl anf +tEK alP -bWL +atx anf -alP +apE aAs mEX alP -jaH -aFs -aGE +ffa +art +aqx +anf +aAu +anf alP aJO bsq @@ -106114,48 +106931,48 @@ xzh xzh xzh xzh -xzh -xzh -xzh -xzh bJc -xzh -age +sUX +fna aee -age -xzh -age aee -age -xzh -age -aee -age -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -alP -aty -anf +aqe +aqe +aqe +aqe +aqe +aqe +aqe +aqe +aqe +aqe +aqe +rJF +rJF +rJF +smk +sKC +qgu +mvN +qgu +aoM +qgu +oEA +vqX +arr alP apE aCQ alP -aoP -anf -apE -dlx +ccW wgt alP +dlx +eup +hyp anf aGW -alP +anf alP aFu aFu @@ -106211,7 +107028,7 @@ fBE xAv bJN vYW -fmC +xAv xAv bJN vYW @@ -106371,41 +107188,41 @@ xzh xzh xzh xzh +bJc xzh +sUX xzh xzh xzh -bJc -xzh -age aee -age xzh -age -aee -age xzh -age -aee -age xzh -bJc +aee xzh xzh xzh +aee xzh xzh xzh xzh -alP -ldN +sJG +bgM +bgM +bgM +nls +qLv +bZU +ucn +tqB cmr alP -anf +gtL anf alP alP -anf +alP alP alP alP @@ -106413,7 +107230,7 @@ alP aVL hRy alP -nTD +alP bav aLf aPb @@ -106456,7 +107273,7 @@ cAE peU baW iiD -bMk +bAW bIO bIT mdh @@ -106628,33 +107445,33 @@ xzh xzh xzh xzh -xzh -xzh -xzh -xzh bJc -xzh -sUX -xzh -xzh -xzh -xzh -xzh -xzh +bJc +bJc xzh xzh +age +aee +age xzh -bcW +age +aee +age xzh -bJc +age +aee +age xzh xzh xzh xzh xzh xzh -alP -alP +bgM +enl +enl +enl +enl alP alP alP @@ -106709,7 +107526,7 @@ bDb bEn cAC xAv -xAv +iLt aWC bdB bMi @@ -106889,21 +107706,21 @@ xzh xzh xzh xzh -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc -bJc +xzh +age +aee +age +xzh +age +aee +age +xzh +age +aee +age +xzh +xzh +xzh xzh xzh xzh @@ -106920,7 +107737,7 @@ aty avE anf anf -awD +anf aAt aty aCC @@ -107072,18 +107889,8 @@ xzh xzh xzh xzh -"} -(170,1,1) = {" -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh +"} +(170,1,1) = {" xzh xzh xzh @@ -107155,9 +107962,19 @@ xzh xzh xzh xzh +bJc xzh +age +aee +age xzh +age +aee +age xzh +age +aee +age xzh xzh xzh @@ -107402,19 +108219,19 @@ xzh xzh xzh xzh +bJc xzh +age +aee +age xzh +age +aee +age xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh +age +aee +age xzh xzh xzh @@ -107659,21 +108476,21 @@ xzh xzh xzh xzh +bJc xzh +age +aee +age xzh +age +aee +age xzh +age +aee +age xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh +bJc xzh xzh xzh @@ -107916,7 +108733,9 @@ xzh xzh xzh xzh +bJc xzh +sUX xzh xzh xzh @@ -107926,11 +108745,9 @@ xzh xzh xzh xzh +bcW xzh -xzh -xzh -xzh -xzh +bJc xzh xzh xzh @@ -107998,16 +108815,16 @@ uTD kHN bvK bnB -dQy +bIu bMi bNp bJN jRs txJ bJN -wOk -eJI -kvB +sAR +pIw +pIw bJN wOk eJI @@ -108173,25 +108990,25 @@ xzh xzh xzh xzh +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc +bJc xzh xzh xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh -xzh +sNY xzh xzh xzh @@ -108255,16 +109072,16 @@ aWt hnE bvK bnT -dQy +bIu bMi bLe -bJN -bJN -bJN -bJN -ylY -lpf -dqk +fie +fie +fie +fie +avs +lfU +jtb bJN ylY lpf @@ -108512,16 +109329,16 @@ cvi kfh bvK boP -dQy -bMi -bNr -bJN +bIu +mjW +xLo +buA bVk nlQ -bJN -xAv -xAv -vYW +erg +sDq +gpj +jWl bJN xAv xAv @@ -108770,15 +109587,15 @@ neV bvK bsd dQy -blq -bZb +bMi +bNr fie dFp pnD -bJN -xAv -xAv -vYW +vzT +fhs +lDZ +fmC bJN xAv fBE @@ -109029,20 +109846,20 @@ bsd dQy bMi bPJ -bJN +fie czb dxm -bJN +xpt xyR -fOT -kDh +eQF +iVv bJN nDM fOT kDh bJN wuD -fOT +xec kDh bJN rqY @@ -109230,7 +110047,7 @@ qrt ouC cfm alP -anf +jaH anf aEe asA @@ -109299,7 +110116,7 @@ mwK mwK xQR bDb -srU +bDb bDb bDb bDb @@ -109469,7 +110286,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh @@ -109569,7 +110386,7 @@ njf jsw jsw jsw -cmq +upr jsw upr cri @@ -109804,7 +110621,7 @@ aYA aYA aYA xUe -bWr +eJd bWo lGf iGm @@ -110100,7 +110917,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh @@ -110352,7 +111169,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -110587,11 +111404,11 @@ cdR hYR ceO cNW -cgp +arA bhG wZQ cNW -bYs +mUx lSv lSv cNW @@ -110840,11 +111657,11 @@ oTO vzq uzY mtK -cdR -nLD -dwb cNW -arA +cNW +cNW +cNW +cNW bhG cNW cNW @@ -111095,12 +111912,12 @@ pKB tNK ndc nrs -uss -mtK -cNW -cNW -cNW -cNW +gGz +dwb +iwV +mSk +cGm +wCU cNW bhG cNW @@ -111295,7 +112112,7 @@ alP anf dJh fzr -mrX +cMA alP nAp qPm @@ -111353,11 +112170,11 @@ xDp pRg eCd gGz -cbv -eyF +tnh +iwV nnI dqV -ciD +nzE cNW bhG cOT @@ -111594,7 +112411,7 @@ hFU bzL aLu bCg -aXE +rjU euc ogm aXJ @@ -111608,9 +112425,9 @@ cas gwq tNK iob -eCd +qLd meU -cbv +iqX tKG gQT ciD @@ -111850,7 +112667,7 @@ cKR byu bzJ byb -uEh +cTT rMU rAg ogm @@ -111866,9 +112683,9 @@ hJz wBE tcj lbd -cGm -caj -kNm +lbd +lbd +iwV kNm dEw cou @@ -112126,8 +112943,8 @@ xgh jTp cbv iwV -kNm -kNm +lOU +caj lOU cNW chz @@ -112381,11 +113198,11 @@ xAy uoh xAy xAy -boO +xAy tds cmo -kWk -iqX +cmo +cmo cNW chC ciL @@ -112637,12 +113454,12 @@ mrT eRr eKb eRr +cgp rZq -cbv -tDr -nzE -qLd -lBc +iwV +cmo +cmo +cmo cNW ccp ydc @@ -112895,16 +113712,16 @@ joa hlw tqI diU -cbv -iRQ +uss +iwV tte nZP iRQ mtK jVl ciL -cjE bFZ +oOj clw cNW xzh @@ -113148,13 +113965,13 @@ bMu sUX xQR fdR -iTC +tqI vZB +kWk liH qby -boO -mSk -wCU +tds +qRt ceR qRt mtK @@ -113408,9 +114225,9 @@ wvS fZT qmh fZT +fZT hSU -cbv -tnh +iwV cOx qWu ckS @@ -113596,7 +114413,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -114422,8 +115239,8 @@ bHu bIV ktt mtK -nLO -cOe +wZQ +aCu cOe cOe cOe @@ -114438,8 +115255,8 @@ cOe cad cbi cNW -ccW -cdV +ccV +kAH cOe cNW cgy @@ -114619,7 +115436,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh @@ -114729,7 +115546,7 @@ bJc xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -114947,7 +115764,7 @@ xzh xzh xzh cNW -arA +mUx cOe cae cOe @@ -116013,7 +116830,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh @@ -116772,7 +117589,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -117005,7 +117822,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -117233,7 +118050,7 @@ xzh xzh xzh xzh -xzh +sNY xzh xzh xzh @@ -117798,7 +118615,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh @@ -118544,7 +119361,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh @@ -118776,7 +119593,7 @@ xzh xzh xzh xzh -sNY +xzh xzh xzh xzh diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index ffb2192c4d0cd..da57feb278136 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -2842,6 +2842,9 @@ /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/service/library/printer) "aII" = ( @@ -3233,15 +3236,15 @@ /area/station/ai_monitored/command/storage/eva) "aNM" = ( /obj/structure/cable, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /obj/machinery/duct, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, /turf/open/floor/iron, /area/station/maintenance/department/chapel) "aNP" = ( @@ -4050,6 +4053,29 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) +"aYN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Brig" + }, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark, +/area/station/security/brig) "aYO" = ( /obj/structure/chair/pew/right, /turf/open/floor/iron/chapel{ @@ -12186,9 +12212,6 @@ "cXb" = ( /obj/structure/cable, /obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -16902,9 +16925,6 @@ /turf/open/floor/plating, /area/station/cargo/storage) "ehg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/newscaster/directional/west, /obj/structure/table/wood, /obj/item/clipboard, @@ -18854,6 +18874,20 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/science) +"eIh" = ( +/obj/machinery/computer/robotics{ + dir = 8 + }, +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/rd) "eIi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22241,6 +22275,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/service/kitchen) +"fyH" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/south{ + pixel_x = 6 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = -8 + }, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain) "fyP" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/effect/turf_decal/siding/yellow{ @@ -24860,6 +24903,7 @@ /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 1 }, +/obj/machinery/vending/cytopro, /turf/open/floor/iron, /area/station/science/xenobiology) "gfR" = ( @@ -25512,6 +25556,27 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"goc" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/south{ + pixel_y = -38 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + id = "teleportershutters"; + name = "Teleporter Shutters"; + pixel_x = -6; + req_access = list("command") + }, +/obj/machinery/button/door/directional/south{ + id = "evastorage"; + name = "E.V.A. Shutters"; + pixel_x = 6; + req_access = list("command") + }, +/turf/open/floor/carpet, +/area/station/command/bridge) "goj" = ( /obj/structure/sign/painting/library{ pixel_y = 33 @@ -26984,33 +27049,6 @@ }, /turf/open/floor/iron, /area/station/medical/medbay) -"gFz" = ( -/obj/machinery/status_display/ai/directional/north, -/obj/machinery/button/door/directional/east{ - id = "hosprivacy"; - name = "Privacy Control"; - pixel_y = 6; - req_access = list("hos") - }, -/obj/machinery/button/door/directional/east{ - id = "hosspace"; - name = "Space Shutters Control"; - pixel_y = -6; - req_access = list("hos") - }, -/obj/machinery/keycard_auth/wall_mounted/directional/east{ - pixel_x = 38; - pixel_y = 6 - }, -/obj/machinery/light_switch/directional/east{ - pixel_x = 37; - pixel_y = -6 - }, -/obj/structure/tank_holder/extinguisher, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hos) "gFB" = ( /obj/effect/turf_decal/siding/white{ dir = 9 @@ -27234,6 +27272,33 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) +"gIw" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/button/door/directional/east{ + id = "hosprivacy"; + name = "Privacy Control"; + pixel_y = 6; + req_access = list("hos") + }, +/obj/machinery/button/door/directional/east{ + id = "hosspace"; + name = "Space Shutters Control"; + pixel_y = -6; + req_access = list("hos") + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east{ + pixel_x = 38; + pixel_y = 6 + }, +/obj/machinery/light_switch/directional/east{ + pixel_x = 37; + pixel_y = -6 + }, +/obj/structure/tank_holder/extinguisher, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) "gIx" = ( /obj/machinery/atmospherics/components/binary/valve, /obj/effect/decal/cleanable/dirt, @@ -30810,7 +30875,6 @@ /turf/open/misc/sandy_dirt, /area/station/security/prison/garden) "hHo" = ( -/obj/structure/disposalpipe/trunk, /obj/machinery/chem_heater/withbuffer, /obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/stripes/line{ @@ -31340,20 +31404,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/brig) -"hOU" = ( -/obj/machinery/computer/robotics{ - dir = 8 - }, -/obj/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/rd) "hOY" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32094,6 +32144,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/research/abandoned) +"hXQ" = ( +/obj/machinery/door/window/left/directional/east{ + name = "Monkey Pen"; + req_access = list("genetics") + }, +/obj/structure/flora/bush/lavendergrass, +/obj/structure/flora/bush/flowers_yw, +/turf/open/floor/grass, +/area/station/science/genetics) "hXZ" = ( /obj/item/storage/box/teargas{ pixel_x = 3; @@ -32805,9 +32864,6 @@ "ifr" = ( /obj/structure/cable, /obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -33641,9 +33697,6 @@ /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, @@ -39075,27 +39128,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) -"jIN" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/south{ - pixel_y = -38 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/button/door/directional/south{ - id = "teleportershutters"; - name = "Teleporter Shutters"; - pixel_x = -6; - req_access = list("command") - }, -/obj/machinery/button/door/directional/south{ - id = "evastorage"; - name = "E.V.A. Shutters"; - pixel_x = 6; - req_access = list("command") - }, -/turf/open/floor/carpet, -/area/station/command/bridge) "jIQ" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/structure/chair/wood{ @@ -39764,7 +39796,7 @@ /area/station/tcommsat/server) "jQx" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /turf/open/floor/plating, /area/station/maintenance/fore) "jQB" = ( @@ -42701,6 +42733,24 @@ /obj/item/storage/crayons, /turf/open/floor/wood, /area/station/service/library/abandoned) +"kEp" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/machinery/door/airlock/security/glass{ + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark, +/area/station/security/brig) "kEw" = ( /obj/structure/cable, /obj/structure/reagent_dispensers/plumbed{ @@ -42914,6 +42964,9 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/service/library/printer) "kHp" = ( @@ -44525,13 +44578,13 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "ldl" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/disposal/bin, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/line{ dir = 6 }, /obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/disposalpipe/trunk, /turf/open/floor/iron/dark, /area/station/medical/pharmacy) "ldm" = ( @@ -45327,9 +45380,6 @@ /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, @@ -46604,6 +46654,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/service/library/printer) "lDV" = ( @@ -47442,7 +47495,7 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "lMF" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /obj/effect/turf_decal/siding/dark_blue{ dir = 8 }, @@ -50601,29 +50654,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"mEB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Brig" - }, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark, -/area/station/security/brig) "mEH" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, @@ -52894,9 +52924,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 = 4 - }, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, @@ -55495,37 +55522,6 @@ }, /turf/open/floor/iron, /area/station/service/kitchen/abandoned) -"nTg" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/obj/structure/extinguisher_cabinet/directional/north{ - pixel_x = 32 - }, -/obj/item/radio/intercom/directional/east{ - pixel_x = 38; - pixel_y = 3 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/east{ - pixel_x = 40; - pixel_y = -8 - }, -/obj/machinery/button/door/directional/east{ - id = "qmspace"; - name = "Space Shutters Control"; - pixel_y = -8 - }, -/obj/machinery/button/door/directional/east{ - id = "qmprivacy"; - name = "Privacy Control"; - pixel_y = 6 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "nTn" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/neutral/filled/corner{ @@ -55979,15 +55975,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"nZG" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/south{ - pixel_x = 6 - }, -/obj/machinery/light_switch/directional/south{ - pixel_x = -8 - }, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain) "nZK" = ( /obj/effect/turf_decal/tile/brown{ dir = 1 @@ -56036,9 +56023,6 @@ /obj/structure/sign/painting/library_private{ pixel_y = -32 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/modular_computer/preset/curator{ dir = 1 }, @@ -64201,6 +64185,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/service/library/printer) "qaF" = ( @@ -66390,9 +66377,6 @@ /turf/open/floor/iron/white, /area/station/medical/medbay) "qEj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/light/small/directional/south, /obj/structure/table/wood, /obj/item/paper_bin{ @@ -67692,7 +67676,7 @@ "qVn" = ( /obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /obj/structure/sign/poster/contraband/random/directional/south, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) @@ -70834,13 +70818,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/command/heads_quarters/qm) -"rLs" = ( -/obj/structure/table/wood, -/obj/machinery/keycard_auth/wall_mounted/directional/west, -/obj/item/flashlight/lamp, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "rLt" = ( /obj/machinery/camera/directional/north{ c_tag = "Holodeck Control"; @@ -72163,13 +72140,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/theater/abandoned) -"rZL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/grille, -/turf/closed/wall/r_wall, -/area/station/engineering/atmos) "rZU" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -72306,15 +72276,6 @@ /obj/structure/sign/warning/biohazard/directional/south, /turf/open/floor/iron, /area/station/maintenance/department/science) -"sbn" = ( -/obj/machinery/door/window/left/directional/east{ - name = "Monkey Pen"; - req_access = list("genetics") - }, -/obj/structure/flora/bush/lavendergrass, -/obj/structure/flora/bush/flowers_yw, -/turf/open/floor/grass, -/area/station/science/genetics) "sbP" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -72728,6 +72689,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/main) +"shc" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/smartfridge/drying, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "shm" = ( /obj/effect/spawner/random/structure/table_or_rack, /obj/machinery/airalarm/directional/north, @@ -74148,6 +74114,37 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"szZ" = ( +/obj/structure/table/reinforced, +/obj/item/folder/yellow, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/structure/extinguisher_cabinet/directional/north{ + pixel_x = 32 + }, +/obj/item/radio/intercom/directional/east{ + pixel_x = 38; + pixel_y = 3 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east{ + pixel_x = 40; + pixel_y = -8 + }, +/obj/machinery/button/door/directional/east{ + id = "qmspace"; + name = "Space Shutters Control"; + pixel_y = -8 + }, +/obj/machinery/button/door/directional/east{ + id = "qmprivacy"; + name = "Privacy Control"; + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "sAh" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -76952,6 +76949,13 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"tns" = ( +/obj/structure/table/wood, +/obj/machinery/keycard_auth/wall_mounted/directional/west, +/obj/item/flashlight/lamp, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "tnu" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -80332,24 +80336,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"ucz" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-entrance" - }, -/obj/machinery/door/airlock/security/glass{ - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark, -/area/station/security/brig) "ucA" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -80576,9 +80562,6 @@ /area/station/commons/toilet/locker) "ufz" = ( /obj/machinery/firealarm/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, /obj/effect/turf_decal/bot_white, /obj/structure/filingcabinet, /turf/open/floor/iron/dark, @@ -82432,25 +82415,6 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"uDg" = ( -/obj/machinery/modular_computer/preset/id{ - dir = 1 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/south{ - pixel_x = -5 - }, -/obj/machinery/button/door/directional/south{ - id = "cmoshutter"; - name = "CMO Office Shutters"; - pixel_x = 8; - pixel_y = -26; - req_access = list("cmo") - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/cmo) "uDj" = ( /obj/structure/cable, /obj/structure/sign/nanotrasen{ @@ -89984,8 +89948,10 @@ "wwN" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, -/obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/iron/dark, /area/station/service/library/printer) "wwP" = ( @@ -90342,9 +90308,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "wAZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/table/wood, /obj/item/taperecorder, /obj/item/camera, @@ -90608,6 +90571,25 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/medical/medsci) +"wDO" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/south{ + pixel_x = -5 + }, +/obj/machinery/button/door/directional/south{ + id = "cmoshutter"; + name = "CMO Office Shutters"; + pixel_x = 8; + pixel_y = -26; + req_access = list("cmo") + }, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/cmo) "wDX" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -94090,11 +94072,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/chapel) -"xyX" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/smartfridge/drying, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "xyZ" = ( /obj/machinery/light/directional/north, /obj/item/kirbyplants/random, @@ -96089,9 +96066,6 @@ dir = 4 }, /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, @@ -117146,7 +117120,7 @@ pxN yfC pxN pxN -rZL +pxN pxN pxN qYo @@ -127672,7 +127646,7 @@ spq nyp vmh rEJ -xyX +shc xtp hBF jUU @@ -127739,7 +127713,7 @@ tYP hBT ipr xwC -hOU +eIh urt mjW lPM @@ -132589,7 +132563,7 @@ jpe sCh cvE vcU -rLs +tns lZx lZx dQf @@ -132869,7 +132843,7 @@ rcW oJy oFr pXk -sbn +hXQ lfz fvi nlK @@ -133662,7 +133636,7 @@ dQT akg hdH jgt -uDg +wDO loe iId nuI @@ -136173,7 +136147,7 @@ cQv sHn qBY wIe -jIN +goc eVl dol uIY @@ -138493,7 +138467,7 @@ wkt aby dFo xnw -nZG +fyH ivA hTg pgE @@ -143600,7 +143574,7 @@ aaa aaa aad ljS -nTg +szZ bdF wob eZV @@ -146974,9 +146948,9 @@ hOz hOz hOz dzw -mEB +aYN hOz -ucz +kEp mTA mTA tNZ @@ -153121,7 +153095,7 @@ qIH aad kOA kOA -gFz +gIw huI fbW okz diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index b88647d4934a0..ce8f714c0e456 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -1,21 +1,13 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aac" = ( -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Security Checkpoint" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brigoutpost" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/station/security/brig/entrance) +"aab" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) +"aao" = ( +/obj/structure/sign/warning/radiation/rad_area/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "aap" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, @@ -31,10 +23,6 @@ /obj/item/taperecorder, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"aaD" = ( -/obj/structure/sign/warning, -/turf/closed/wall/r_wall, -/area/mine/storage) "aaI" = ( /obj/structure/closet/wardrobe/white, /obj/item/clothing/shoes/jackboots, @@ -53,11 +41,6 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/iron, /area/station/hallway/primary/port) -"aaX" = ( -/obj/structure/chair/sofa/bench/right, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "abb" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 5 @@ -67,13 +50,6 @@ "abe" = ( /turf/open/floor/engine, /area/station/science/xenobiology) -"abm" = ( -/obj/structure/table, -/obj/item/trash/can/food/beans, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "abv" = ( /obj/effect/turf_decal/loading_area{ dir = 1 @@ -91,6 +67,22 @@ /obj/item/clothing/head/helmet/skull, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"abJ" = ( +/obj/machinery/camera{ + c_tag = "Service - Botany"; + dir = 9 + }, +/obj/machinery/hydroponics/constructable, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "abL" = ( /obj/machinery/light/directional/north, /obj/structure/sign/warning/secure_area/directional/north, @@ -107,6 +99,24 @@ }, /turf/open/floor/iron, /area/station/science/robotics/lab) +"abQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) +"abT" = ( +/obj/structure/table, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/pen, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/explab) "abU" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ @@ -119,53 +129,32 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"abZ" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) "ace" = ( /obj/structure/table/wood, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"acg" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"acm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"acl" = ( +/mob/living/carbon/human/species/monkey, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/grass, +/area/station/medical/virology) "acE" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"acG" = ( -/obj/effect/spawner/random/trash/moisture_trap, -/obj/item/reagent_containers/cup/bucket, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"ade" = ( -/obj/structure/table/glass, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/item/reagent_containers/cup/bottle/epinephrine, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = 6 - }, -/obj/item/reagent_containers/syringe, -/obj/effect/turf_decal/tile/blue/full, -/turf/open/floor/iron/large, -/area/station/medical/treatment_center) -"adm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/conveyor{ - id = "mining_internal" - }, -/obj/machinery/bouldertech/refinery, +"acN" = ( +/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/neutral/half/contrasted, /turf/open/floor/iron, -/area/mine/production) +/area/station/commons/fitness) "adq" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres{ @@ -174,12 +163,42 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"adv" = ( +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"adA" = ( +/turf/closed/wall/r_wall, +/area/icemoon/surface/outdoors/labor_camp) "adD" = ( /obj/structure/railing/corner{ dir = 8 }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) +"adP" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"adS" = ( +/obj/structure/statue/snow/snowman{ + name = "Steve" + }, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "adY" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -220,14 +239,6 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"aes" = ( -/obj/machinery/computer/cargo, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "aey" = ( /obj/machinery/camera/directional/east{ c_tag = "Xenobiology Pens - Starboard Fore"; @@ -240,15 +251,6 @@ /obj/item/clothing/mask/gas, /turf/open/floor/iron/smooth, /area/mine/living_quarters) -"aeF" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "aeQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -259,52 +261,24 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"aeV" = ( -/obj/structure/sign/warning, -/turf/closed/wall, -/area/station/maintenance/port/fore) +"aeS" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"afb" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/commons/lounge) "afp" = ( /obj/machinery/air_sensor/nitrogen_tank, /turf/open/floor/engine/n2, /area/station/engineering/atmos) -"afs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "mining-aux-mechbay-external" - }, -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Mining Mech Bay External Airlock"; - opacity = 0 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/turf/open/floor/iron/large, -/area/mine/mechbay) -"aft" = ( -/obj/machinery/vending/boozeomat, -/turf/open/floor/iron, -/area/station/service/bar) -"afy" = ( -/obj/structure/railing/corner/end/flip{ - dir = 8 - }, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "afz" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"afK" = ( -/obj/structure/cable, -/turf/open/floor/iron/stairs/left{ - dir = 4 - }, -/area/station/engineering/lobby) "afR" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer1{ @@ -320,6 +294,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/upper) +"agd" = ( +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger{ + pixel_y = 5 + }, +/turf/open/floor/iron/white/corner{ + dir = 4 + }, +/area/station/science/explab) "agk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -356,10 +340,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) -"agG" = ( -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron/grimy, -/area/station/hallway/secondary/entry) "agI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -390,12 +370,6 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"ahh" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/service/bar) "ahm" = ( /obj/machinery/newscaster/directional/west, /obj/machinery/firealarm/directional/south, @@ -414,6 +388,12 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) +"ahG" = ( +/obj/structure/fence/post{ + dir = 2 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "ahK" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -435,6 +415,10 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/service/chapel) +"aiu" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "aiA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -455,10 +439,14 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"aiT" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/maintenance/port/fore) +"aiQ" = ( +/obj/machinery/modular_computer/preset/id, +/obj/machinery/computer/security/telescreen/vault/directional/north, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "aiX" = ( /turf/open/floor/iron, /area/station/security/courtroom) @@ -520,27 +508,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured, /area/station/security/prison/workout) -"akb" = ( -/obj/structure/closet/crate, -/obj/item/food/canned/beans, -/obj/item/food/canned/beans, -/obj/item/food/canned/beans, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_x = 7; - pixel_y = 6 - }, -/mob/living/basic/mouse/white, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) +"akd" = ( +/obj/structure/rack, +/obj/item/poster/random_contraband, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "akk" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2{ dir = 4 @@ -551,6 +524,10 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) +"akn" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) "ako" = ( /turf/closed/wall/r_wall, /area/station/medical/morgue) @@ -601,6 +578,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/engine_smes) +"akN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "akQ" = ( /obj/effect/turf_decal/weather/snow/corner, /turf/open/floor/glass/reinforced/icemoon, @@ -624,6 +609,22 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/transit_tube) +"ale" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/camera/directional/north{ + network = list("ss13","medbay"); + c_tag = "Morgue North" + }, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/trimline/neutral/filled/end{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "alq" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/iron/grimy, @@ -702,17 +703,14 @@ dir = 8 }, /area/station/engineering/lobby) -"amq" = ( -/turf/open/misc/dirt{ - initial_gas_mix = "ICEMOON_ATMOS" +"amn" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_x = -6 }, -/area/icemoon/underground/explored/graveyard) -"amt" = ( /obj/structure/cable, -/turf/open/floor/iron/chapel{ - dir = 4 - }, -/area/station/service/chapel) +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) "amv" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -724,6 +722,11 @@ /obj/structure/curtain, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) +"amz" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/bush/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "amE" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -733,21 +736,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"amJ" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/medical/treatment_center) -"amK" = ( -/obj/item/cigbutt, -/obj/structure/sign/warning/cold_temp/directional/south, -/obj/structure/sign/warning/gas_mask/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) "amN" = ( /obj/structure/disposalpipe/segment, /obj/item/radio/intercom/directional/west, @@ -756,6 +744,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"amW" = ( +/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/plating, +/area/station/maintenance/starboard/fore) "anb" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -792,22 +787,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"any" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"anI" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle{ - dir = 1 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "botany_chasm_and_wolf_shutters" - }, -/turf/open/floor/plating, -/area/station/service/hydroponics) +"anz" = ( +/obj/machinery/telecomms/server/presets/engineering, +/obj/structure/sign/warning/no_smoking/circle/directional/north, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) "anK" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -831,23 +815,44 @@ dir = 1 }, /area/station/command/heads_quarters/rd) +"anQ" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/latex, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/turf/open/floor/plating, +/area/station/security/prison/safe) "anZ" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 }, /turf/open/floor/plating, /area/station/engineering/lobby) +"aoc" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/item/radio/intercom/directional/west, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "aog" = ( /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/command/bridge) -"aoi" = ( -/obj/structure/closet/emcloset, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) +"aom" = ( +/obj/machinery/pdapainter/engineering, +/obj/effect/turf_decal/tile/neutral/full, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/heads_quarters/ce) +"aon" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "aoo" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -858,24 +863,95 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/ordnance/office) -"aop" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "aos" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/dorms) +"aov" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/structure/closet/secure_closet/medical1, +/obj/machinery/light/small/directional/east, +/obj/machinery/light_switch/directional/north, +/obj/machinery/door_buttons/access_button{ + pixel_y = 37; + idDoor = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + req_access = list("virology") + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"aow" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing/corner/end{ + dir = 2 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"aoM" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) +"aoO" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/spawner/random/trash/crushed_can{ + pixel_y = 10 + }, +/turf/open/floor/iron, +/area/station/service/bar) +"aoP" = ( +/obj/machinery/door/airlock/external{ + name = "Lower Medical External Access"; + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "chem-morgue-airlock" + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/medical/morgue) +"aoW" = ( +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "Bridge Blast Door"; + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) "apb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -909,6 +985,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/service) +"apo" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/command/glass{ + name = "Bridge"; + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron, +/area/station/command/bridge) "apq" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -918,33 +1008,12 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron, /area/station/commons/locker) -"apt" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 4 - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "apB" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"apC" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/light/small/directional/south, -/obj/structure/sign/calendar/directional/south, -/turf/open/floor/iron, -/area/station/commons/dorms) "apD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -959,14 +1028,6 @@ }, /turf/open/floor/iron, /area/station/command/gateway) -"apL" = ( -/obj/machinery/modular_computer/preset/engineering, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/small/directional/north, -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "apS" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -1015,15 +1076,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"aqq" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "botany_chasm_and_wolf_shutters" +"aqr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/plating, +/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/smooth_half, /area/station/service/hydroponics) "aqB" = ( /obj/structure/cable, @@ -1047,6 +1107,16 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"aqV" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Bar Maintenance" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/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/bar/backroom) "arb" = ( /obj/structure/table, /obj/item/folder/red, @@ -1104,33 +1174,19 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/processing) -"arW" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/landmark/start/cook, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/holopad, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "arZ" = ( -/obj/effect/turf_decal/tile/blue, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "asa" = ( /obj/structure/table/wood, /obj/item/storage/crayons, /turf/open/floor/iron, /area/station/commons/dorms) -"asb" = ( -/obj/structure/sink/directional/west, -/obj/structure/cable, -/obj/machinery/button/door/directional/east{ - id = "xenobio10"; - name = "Xenobio Pen 10 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "asg" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance/two, @@ -1146,6 +1202,15 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) +"asv" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/hallway/secondary/exit/departure_lounge) "asy" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -1163,21 +1228,38 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"asG" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/railing/corner/end{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) "asM" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) +"asN" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/sink/kitchen/directional/west, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/service/bar) +"asU" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Escape"; + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) "asZ" = ( /obj/machinery/door/airlock/research{ name = "Robotics Lab" @@ -1205,15 +1287,6 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/storage) -"atc" = ( -/obj/structure/fence{ - dir = 1 - }, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 8 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "ate" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1245,6 +1318,26 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"atB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"atI" = ( +/obj/structure/table/glass, +/obj/item/shovel/spade, +/obj/item/cultivator{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "atN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -1252,6 +1345,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"atS" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "atW" = ( /obj/structure/flora/grass/green/style_random, /turf/open/floor/plating/snowed/smoothed/icemoon, @@ -1273,6 +1378,9 @@ "aud" = ( /obj/structure/closet/secure_closet/miner, /obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/cargo/miningdock) "aui" = ( @@ -1323,47 +1431,37 @@ /area/station/security/prison/work) "auK" = ( /obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/box, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) "avb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"avd" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) -"ave" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 +"avc" = ( +/obj/machinery/firealarm/directional/west, +/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{ + dir = 8 }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 +/obj/machinery/camera/directional/west{ + c_tag = "Departure Lounge West" }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ +/turf/open/floor/iron/white/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/hallway/secondary/exit/departure_lounge) "avh" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/mine/eva) +"avi" = ( +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/smooth, +/area/mine/eva) "avk" = ( /obj/machinery/duct, /obj/effect/turf_decal/tile/yellow{ @@ -1373,13 +1471,15 @@ dir = 1 }, /area/station/engineering/atmos) -"avo" = ( -/obj/structure/stairs/east, +"avs" = ( /obj/structure/railing{ - dir = 1 + dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "avP" = ( /obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -1389,18 +1489,46 @@ /area/mine/laborcamp) "awa" = ( /turf/open/openspace, -/area/station/science/ordnance) +/area/station/science/ordnance/office) "awd" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/ai_monitored/security/armory/upper) +"awe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/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/bar/atrium) "awn" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/closed/wall, /area/station/maintenance/fore/lesser) +"awt" = ( +/obj/structure/table, +/obj/item/kitchen/rollingpin, +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/reagent_containers/condiment/sugar, +/obj/structure/light_construct/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"awu" = ( +/obj/structure/disposalpipe/segment{ + 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/station/service/bar/backroom) "awx" = ( /turf/open/floor/iron, /area/station/commons/locker) @@ -1425,11 +1553,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"awF" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/trash/grille_or_waste, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +"awE" = ( +/obj/structure/closet/crate/freezer/food{ + name = "cooler" + }, +/obj/item/reagent_containers/cup/glass/ice, +/obj/item/reagent_containers/cup/glass/ice, +/obj/item/reagent_containers/cup/glass/ice, +/obj/item/reagent_containers/cup/glass/ice, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "awK" = ( /obj/structure/table, /obj/item/hemostat, @@ -1458,6 +1592,12 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"awO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/trash/raisins, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "awR" = ( /obj/machinery/conveyor{ dir = 1; @@ -1470,24 +1610,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/disposal) -"axb" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/sign/warning/gas_mask/directional/north{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/turf/open/floor/vault, -/area/station/security/prison/rec) -"axc" = ( -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/poddoor/preopen{ - id = "Biohazard"; - name = "Biohazard Containment Door" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/science/research) "axd" = ( /obj/structure/table, /obj/item/mod/module/plasma_stabilizer, @@ -1503,6 +1625,22 @@ /obj/machinery/modular_computer/preset/id, /turf/open/floor/iron, /area/station/command/bridge) +"axj" = ( +/obj/effect/decal/cleanable/blood/tracks{ + 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/neutral/end{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/medical/morgue) "axm" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -1520,11 +1658,12 @@ /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"axy" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/cold_temp, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/aft) +"axw" = ( +/obj/structure/chair/stool/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/commons/lounge) "axz" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -1537,12 +1676,6 @@ }, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain) -"axC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/bookcase/random, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "axD" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -1587,6 +1720,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/lobby) +"axZ" = ( +/obj/structure/table/optable{ + name = "Robotics Operating Table" + }, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) +"ayd" = ( +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "ayq" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "atmos-entrance" @@ -1617,26 +1761,31 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"ayJ" = ( -/obj/effect/spawner/random/lavaland_mob/raptor, -/turf/open/misc/asteroid/snow/icemoon, +"ayL" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"ayR" = ( -/obj/machinery/airalarm/directional/east, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/stamp/head/cmo, -/obj/item/clothing/neck/stethoscope, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) -"ayY" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +"ayS" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Security - Permabrig Lower Hallway Stairwell"; + network = list("ss13","prison") + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"aze" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/stairs/medium{ dir = 1 }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/area/station/security/prison) "azf" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -1651,12 +1800,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"azt" = ( -/obj/machinery/door/airlock{ - name = "Unit B" - }, -/turf/open/floor/iron/textured, -/area/station/commons/toilet) "azw" = ( /turf/closed/wall, /area/station/medical/pharmacy) @@ -1670,24 +1813,6 @@ /obj/effect/turf_decal/bot_red, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"azC" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Maintenance" - }, -/obj/structure/sign/warning/radiation/rad_area/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"azI" = ( -/obj/machinery/vending/autodrobe, -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "azN" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen{ @@ -1705,23 +1830,12 @@ /obj/effect/turf_decal/delivery/red, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) -"azU" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "robotics"; - name = "Robotics Lab Shutters" - }, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/machinery/door/window/left/directional/south{ - name = "Robotics Desk"; - req_access = list("robotics") - }, -/turf/open/floor/plating, -/area/station/science/robotics/lab) +"aAe" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "aAi" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/table/wood/fancy/red, @@ -1738,10 +1852,6 @@ }, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) -"aAk" = ( -/obj/structure/table/wood, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "aAl" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 1 @@ -1756,28 +1866,6 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/command/bridge) -"aAy" = ( -/obj/structure/table/wood/poker, -/obj/effect/spawner/random/entertainment/dice{ - pixel_y = 5; - pixel_x = -4 - }, -/obj/effect/spawner/random/entertainment/money_small, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"aBb" = ( -/obj/structure/closet/emcloset, -/obj/item/pickaxe, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/service/hydroponics) "aBf" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/engine{ @@ -1796,14 +1884,21 @@ name = "Chief Medical Officer's Fax Machine" }, /obj/machinery/light/cold/directional/south, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"aBj" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 +"aBK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"aBP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pharmacy_shutters3"; + name = "Pharmacy Shutters" }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) +/turf/open/floor/plating, +/area/station/service/kitchen) "aBR" = ( /turf/open/genturf/blue, /area/icemoon/surface/outdoors/noruins) @@ -1833,6 +1928,9 @@ pixel_x = -2; pixel_y = -1 }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/cargo/miningdock) "aCj" = ( @@ -1846,19 +1944,27 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/wood, /area/station/command/meeting_room) -"aCl" = ( -/obj/structure/bodycontainer/morgue{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "aCo" = ( /obj/structure/chair/wood{ dir = 8 }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"aCw" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + desc = "An outlet for the pneumatic disposal system. This one seems designed for rapid corpse disposal."; + dir = 1; + name = "rapid corpse mover 9000" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/trimline/neutral/filled/end, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "aCA" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 @@ -1871,6 +1977,19 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"aCJ" = ( +/obj/machinery/newscaster/directional/west, +/obj/effect/spawner/random/structure/twelve_percent_spirit_board, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) +"aCP" = ( +/obj/machinery/modular_computer/preset/engineering, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/incident_display/bridge/directional/north, +/turf/open/floor/iron, +/area/station/command/bridge) "aCU" = ( /obj/effect/spawner/random/maintenance, /obj/structure/disposalpipe/segment{ @@ -1888,10 +2007,23 @@ /obj/item/stock_parts/subspace/filter, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"aDe" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) +"aDc" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Public Mining Storage"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/mine/storage) +"aDl" = ( +/obj/structure/rack, +/obj/item/bouquet, +/obj/item/binoculars, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "aDo" = ( /obj/structure/chair/office{ dir = 4 @@ -1900,13 +2032,18 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/wood, /area/station/service/library) -"aDy" = ( -/obj/machinery/light/directional/south, -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/poster/official/random/directional/south, +"aDr" = ( +/obj/machinery/vending/cigarette, +/obj/machinery/light/small/directional/south, +/obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) +/area/station/science/breakroom) +"aDG" = ( +/obj/structure/fence{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "aDJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1914,25 +2051,18 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron/dark/side, /area/station/security/prison) -"aDZ" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id = "bridge blast"; - name = "Bridge Blast Door" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/command/bridge) -"aEx" = ( -/obj/structure/closet/lasertag/blue, -/obj/effect/landmark/start/hangover/closet, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/iron, -/area/station/commons/fitness) +"aDM" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"aEj" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/fore) +"aEz" = ( +/obj/machinery/newscaster/directional/west, +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "aEA" = ( /obj/structure/rack, /obj/item/clothing/mask/gas, @@ -1952,20 +2082,10 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"aEK" = ( -/obj/machinery/atmospherics/components/binary/pump/off, -/obj/machinery/airlock_sensor/incinerator_ordmix{ - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) "aEM" = ( -/obj/structure/sign/departments/cargo, -/turf/closed/wall/r_wall, -/area/station/cargo/warehouse) +/obj/structure/sign/departments/cargo/directional/west, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "aES" = ( /obj/structure/table/wood/fancy/blue, /obj/effect/spawner/random/aimodule/neutral, @@ -1983,6 +2103,10 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) +"aEY" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) "aFg" = ( /obj/machinery/button/door/directional/east{ id = "lawyer_blast"; @@ -1993,6 +2117,16 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/lawoffice) +"aFh" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/status_display/ai/directional/south, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/chem_master/condimaster, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "aFi" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/machinery/portable_atmospherics/scrubber, @@ -2006,23 +2140,6 @@ /obj/machinery/dna_scannernew, /turf/open/floor/iron/dark, /area/station/science/genetics) -"aFx" = ( -/obj/structure/rack, -/obj/item/clothing/suit/hooded/wintercoat/eva{ - pixel_y = 9 - }, -/obj/item/clothing/shoes/winterboots/ice_boots/eva{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/effect/turf_decal/delivery/red, -/obj/item/clothing/gloves/color/grey/protects_cold, -/obj/item/clothing/mask/gas, -/obj/structure/sign/nanotrasen{ - pixel_x = -32 - }, -/turf/open/floor/iron/textured, -/area/station/ai_monitored/command/storage/eva) "aFz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2052,26 +2169,10 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"aGf" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/stone, -/area/station/service/bar/atrium) -"aGk" = ( -/obj/structure/rack, -/obj/item/wrench, -/obj/item/crowbar, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/engineering/flashlight, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/lesser) +"aGb" = ( +/obj/item/flashlight/lantern/on, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "aGr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/camera/directional/east{ @@ -2097,6 +2198,15 @@ /obj/item/papercutter, /turf/open/floor/iron, /area/station/cargo/office) +"aGR" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 10 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "aGW" = ( /obj/machinery/door/airlock/highsecurity{ name = "Labor Camp Monitoring" @@ -2107,13 +2217,35 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/mine/laborcamp) -"aHh" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 5 +"aHt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/structure/table/reinforced, +/obj/machinery/button/door/incinerator_vent_atmos_aux{ + pixel_x = -6; + pixel_y = -1 }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/obj/machinery/button/door/incinerator_vent_atmos_main{ + pixel_x = 6; + pixel_y = -1 + }, +/obj/machinery/button/ignition/incinerator/atmos{ + pixel_y = 9 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) +"aHw" = ( +/obj/structure/rack, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) "aHz" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -2140,6 +2272,23 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/wood, /area/station/command/meeting_room) +"aHX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/ordnance/office) "aHZ" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/effect/landmark/start/cook, @@ -2152,10 +2301,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/textured, /area/station/service/chapel) -"aIg" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/engineering/main) +"aIn" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "aIr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2167,21 +2320,6 @@ dir = 9 }, /area/station/science/explab) -"aIA" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/green/filled/corner, -/obj/effect/turf_decal/trimline/blue/filled/warning/corner, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/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, -/area/station/service/hydroponics) "aIB" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 4 @@ -2220,6 +2358,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"aJa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"aJi" = ( +/obj/machinery/shower/directional/east, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "aJm" = ( /obj/structure/cable, /obj/machinery/door/window/left/directional/east{ @@ -2252,14 +2403,6 @@ /obj/item/lighter/greyscale, /turf/open/floor/iron/showroomfloor, /area/station/maintenance/department/medical/morgue) -"aJz" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/ordnance/office) "aJA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2299,6 +2442,12 @@ }, /turf/open/floor/plating, /area/station/engineering/transit_tube) +"aKb" = ( +/obj/structure/fence{ + dir = 1 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "aKf" = ( /obj/machinery/light_switch/directional/south, /obj/structure/chair/comfy/brown{ @@ -2338,16 +2487,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"aLh" = ( -/obj/structure/fireplace, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"aLo" = ( -/obj/machinery/airalarm/directional/west, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "aLy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2386,14 +2525,6 @@ /obj/machinery/shower/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) -"aLO" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/sign/clock/directional/east, -/turf/open/floor/wood, -/area/station/commons/vacant_room/office) "aLV" = ( /obj/machinery/bluespace_vendor/directional/south, /turf/open/floor/iron, @@ -2436,6 +2567,13 @@ }, /turf/open/floor/plating, /area/station/cargo/sorting) +"aMh" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) "aMr" = ( /obj/structure/chair/office{ dir = 4 @@ -2456,18 +2594,16 @@ }, /turf/open/floor/iron, /area/station/tcommsat/computer) +"aMA" = ( +/obj/structure/stairs/north, +/turf/open/floor/iron, +/area/station/service/chapel) "aME" = ( /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) -"aMI" = ( -/obj/machinery/oven/range, -/obj/effect/turf_decal/siding/white, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "aML" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -2478,21 +2614,21 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"aNc" = ( -/obj/structure/fence{ - dir = 4 - }, -/obj/structure/sign/nanotrasen, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) -"aNj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 +"aMU" = ( +/obj/structure/chair/office{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/machinery/newscaster/directional/north, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/remains/human, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"aMZ" = ( +/obj/structure/flora/grass/both/style_random, +/obj/item/stack/rods, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "aNq" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/effect/turf_decal/siding/dark_blue, @@ -2522,22 +2658,48 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, /area/mine/eva/lower) -"aOa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt/dust, +"aNE" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"aOb" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_apiary"; + name = "Apiary Shutters" + }, /turf/open/floor/plating, -/area/station/maintenance/disposal) +/area/station/service/hydroponics) "aOd" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/miningdock) +"aOe" = ( +/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/trimline/neutral/line, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "aOf" = ( /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/mine/eva) +"aOx" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/vending/clothing, +/obj/structure/noticeboard/staff{ + pixel_y = 36 + }, +/turf/open/floor/iron, +/area/station/commons/locker) "aOz" = ( /obj/structure/chair{ dir = 4 @@ -2562,11 +2724,32 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"aOG" = ( +/obj/structure/fence/post{ + dir = 2 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "aOS" = ( /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/security/medical) +"aOU" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/trunk/multiz/down, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/aft) +"aOW" = ( +/obj/machinery/duct, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "aOX" = ( /turf/open/floor/engine/co2, /area/station/engineering/atmos) @@ -2599,6 +2782,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos) +"aPl" = ( +/obj/effect/turf_decal/tile/purple, +/obj/machinery/camera/directional/south{ + c_tag = "Starboard Primary Hallway Center East" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "aPD" = ( /turf/closed/wall/r_wall, /area/station/engineering/storage_shared) @@ -2618,11 +2808,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark/textured, /area/station/security/warden) -"aPP" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "aPV" = ( /obj/effect/spawner/random/trash/mess, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2644,30 +2829,24 @@ }, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory/upper) +"aPZ" = ( +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore/lesser) "aQe" = ( /obj/item/clothing/shoes/jackboots, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"aQn" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/effect/turf_decal/box, -/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) -"aQy" = ( -/obj/effect/turf_decal/siding/wood, -/obj/item/kirbyplants/random/fullysynthetic{ - pixel_x = 10; - pixel_y = 19 - }, +"aQj" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/stone, -/area/mine/eva/lower) +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) "aQJ" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -2696,15 +2875,17 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"aRe" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "aRj" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/engine/co2, /area/station/engineering/atmos) -"aRl" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/smartfridge/extract/preloaded, -/turf/open/floor/iron, -/area/station/science/xenobiology) "aRm" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -2749,6 +2930,10 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"aRx" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/cargo/storage) "aRz" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow{ @@ -2772,12 +2957,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"aRQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/dead_body_placer, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "aRR" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -2819,17 +2998,6 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) -"aSw" = ( -/obj/structure/rack, -/obj/item/lighter, -/obj/item/clothing/glasses/meson{ - pixel_y = 4 - }, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/reagent_containers/pill/patch/aiuri, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "aSB" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/turf_decal/box, @@ -2854,6 +3022,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"aSM" = ( +/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/effect/turf_decal/siding/dark{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "aSS" = ( /obj/effect/turf_decal/trimline/dark_red/end, /obj/machinery/meter, @@ -2861,6 +3042,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"aTc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "aTj" = ( /obj/structure/table, /obj/item/storage/belt/utility, @@ -2875,22 +3061,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"aTk" = ( -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Apiary" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/station/service/hydroponics) "aTp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2900,6 +3070,9 @@ /area/station/maintenance/department/medical/central) "aTw" = ( /obj/structure/displaycase/captain, +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "aTE" = ( @@ -2913,12 +3086,6 @@ dir = 4 }, /area/station/medical/chem_storage) -"aTG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/teleporter) "aTH" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -2980,11 +3147,43 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"aUq" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/structure/flora/bush/generic/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) +"aUo" = ( +/obj/structure/table/wood, +/obj/item/trapdoor_remote/preloaded{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/item/gavelblock{ + pixel_x = 5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/courtroom) +"aUt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) +"aUu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "aUA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -2994,12 +3193,11 @@ /area/station/cargo/storage) "aUC" = ( /obj/structure/fence/door, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"aUD" = ( -/obj/structure/sign/departments/maint/alt, -/turf/closed/wall, -/area/station/maintenance/department/medical/morgue) "aUK" = ( /obj/machinery/camera/directional/west{ c_tag = "Engineering Equipment Storage" @@ -3008,20 +3206,18 @@ /obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/iron/dark, /area/station/engineering/storage) +"aUM" = ( +/obj/structure/filingcabinet, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) "aUO" = ( /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) -"aUR" = ( -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) "aUS" = ( /obj/machinery/meter{ name = "Mixed Air Tank In" @@ -3029,6 +3225,12 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"aUT" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "aVb" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -3057,21 +3259,18 @@ }, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) -"aVp" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Mining B-1 Crater Observatory Access" - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/mine/living_quarters) "aVq" = ( /obj/structure/ore_box, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"aVr" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "aVw" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -3079,14 +3278,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"aVF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/textured, -/area/station/security/brig) "aVH" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -3097,35 +3288,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"aVJ" = ( -/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/stone, -/area/station/commons/lounge) -"aVU" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/virology{ - autoclose = 0; - frequency = 1449; - id_tag = "virology_airlock_exterior"; - name = "Virology Exterior Airlock" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "virology_airlock_exterior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Button"; - pixel_y = -24; - req_access = list("virology") - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 +"aVM" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/effect/turf_decal/tile/green/full, -/turf/open/floor/iron/white/smooth_large, +/obj/effect/landmark/start/hangover, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, /area/station/medical/virology) "aWb" = ( /obj/effect/turf_decal/stripes/line{ @@ -3150,14 +3319,47 @@ /obj/structure/chair/office/light, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) +"aWj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "aWk" = ( /obj/machinery/door/poddoor/shutters{ dir = 1; id = "armory"; name = "Armory Shutter" }, +/obj/machinery/button/door/directional/east{ + id = "armory"; + name = "Armory Shutters"; + req_access = list("armory") + }, /turf/open/floor/iron, /area/station/ai_monitored/security/armory/upper) +"aWo" = ( +/obj/machinery/hydroponics/constructable, +/obj/effect/decal/cleanable/dirt, +/obj/item/seeds/redbeet, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/siding/green{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) +"aWu" = ( +/obj/structure/barricade/wooden/snowed, +/obj/machinery/light/small/red/directional/north, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "minecraft_shutter"; + name = "Cart Shutters" + }, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "aWD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -3188,6 +3390,25 @@ /obj/structure/cable, /turf/open/floor/iron, /area/mine/laborcamp/security) +"aXc" = ( +/obj/structure/cable, +/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/plating, +/area/station/maintenance/starboard/fore) +"aXg" = ( +/obj/structure/ladder{ + name = "chemistry lab access" + }, +/obj/machinery/door/window/left/directional/south{ + name = "Morgue Access Hatch"; + req_access = list("medical") + }, +/obj/effect/turf_decal/stripes/end, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/medbay/central) "aXp" = ( /obj/structure/cable, /obj/machinery/button/door/directional/west{ @@ -3203,28 +3424,41 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"aXu" = ( -/obj/structure/chair/sofa/right/brown, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"aXv" = ( -/obj/structure/sign/warning/gas_mask/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"aXx" = ( +"aXq" = ( /obj/item/bedsheet/red, /mob/living/simple_animal/bot/secbot/beepsky, /turf/open/floor/plating, /area/station/maintenance/fore) +"aXP" = ( +/obj/structure/barricade/wooden, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/morgue) "aXY" = ( /obj/structure/rack, /obj/item/circuitboard/machine/monkey_recycler, /obj/structure/sign/poster/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"aYi" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/ecto_sniffer{ + pixel_x = 6; + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"aYk" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/item/seeds/berry, +/obj/machinery/light/small/dim/directional/south, +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) "aYm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3239,6 +3473,15 @@ }, /turf/open/floor/iron, /area/station/commons/storage/mining) +"aYu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/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/freezer, +/area/station/service/kitchen/coldroom) "aYJ" = ( /turf/open/floor/iron/white, /area/station/science/research) @@ -3249,39 +3492,12 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/mine/production) -"aYO" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "aYQ" = ( /obj/machinery/shower/directional/south, /obj/item/soap/nanotrasen, /obj/item/bikehorn/rubberducky/plasticducky, /turf/open/floor/iron/freezer, /area/mine/laborcamp) -"aYS" = ( -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/table, -/obj/item/storage/box/lights/mixed, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/power_store/cell/emproof, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_x = 6; - pixel_y = -2 - }, -/obj/machinery/light_switch/directional/south{ - pixel_x = 10 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "aZd" = ( /turf/open/floor/plating, /area/station/medical/virology) @@ -3340,6 +3556,14 @@ }, /turf/closed/wall/r_wall, /area/station/engineering/supermatter/room) +"aZJ" = ( +/obj/item/toy/snowball{ + pixel_x = 11; + pixel_y = -7 + }, +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "aZK" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/table, @@ -3364,6 +3588,13 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/service/chapel) +"aZU" = ( +/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/stone, +/area/station/commons/lounge) "aZV" = ( /obj/effect/landmark/start/atmospheric_technician, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -3402,13 +3633,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"bao" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +"bap" = ( +/obj/structure/railing{ + dir = 1 }, -/obj/structure/closet/emcloset, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/turf/open/floor/iron/dark, +/area/station/service/chapel) "bar" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -3424,11 +3654,6 @@ }, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"baE" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "baF" = ( /obj/structure/closet/l3closet/scientist, /obj/item/extinguisher, @@ -3440,6 +3665,13 @@ /obj/effect/mapping_helpers/requests_console/supplies, /turf/open/floor/glass/reinforced, /area/station/science/xenobiology) +"baN" = ( +/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, +/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) "baQ" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ dir = 4 @@ -3462,6 +3694,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"baX" = ( +/obj/structure/table, +/obj/item/folder/white, +/obj/item/pen, +/obj/item/stamp/head/rd{ + pixel_x = 3; + pixel_y = -2 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/rd) "bbo" = ( /turf/open/floor/iron, /area/station/construction) @@ -3492,6 +3734,13 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"bbO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/end{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/medical/chem_storage) "bbQ" = ( /obj/structure/chair{ dir = 4 @@ -3502,17 +3751,18 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"bbU" = ( +/obj/structure/closet/toolcloset, +/obj/machinery/status_display/evac/directional/south, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/warning/no_smoking/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "bbY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/red, /turf/open/floor/iron/textured, /area/station/security/brig) -"bcf" = ( -/obj/effect/spawner/random/entertainment/arcade, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/eighties, -/area/station/commons/lounge) "bcm" = ( /obj/machinery/camera/directional/east{ c_tag = "Security - Lower Brig Cells"; @@ -3525,14 +3775,19 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron/textured, /area/station/security/brig) -"bcu" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ +"bcs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, -/obj/item/seeds/watermelon, -/obj/machinery/hydroponics/soil, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/mine/eva/lower) "bcx" = ( /obj/machinery/door/airlock/maintenance{ name = "Quartermaster Office Maintenance" @@ -3581,6 +3836,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/prison/rec) +"bdp" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) "bdr" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/effect/turf_decal/trimline/blue/filled/warning, @@ -3647,14 +3914,28 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/wood, /area/station/service/library) -"bdX" = ( -/obj/item/toy/snowball{ - pixel_y = 3; - pixel_x = 3 +"bdT" = ( +/obj/structure/table/glass, +/obj/effect/spawner/random/entertainment/deck{ + pixel_x = -6 }, -/obj/item/toy/snowball, -/turf/open/misc/asteroid/snow/coldroom, -/area/icemoon/underground/explored) +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay Break Room"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/break_room) "bea" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating/icemoon, @@ -3672,14 +3953,13 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) -"beF" = ( -/obj/machinery/door/airlock{ - name = "Unisex Showers" - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/textured, -/area/station/commons/toilet) +"beu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "beO" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -3708,20 +3988,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/mess) -"bfl" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "bfo" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end, /turf/open/floor/plating, /area/mine/eva/lower) -"bfy" = ( -/obj/effect/spawner/random/trash/bin, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "bfL" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -3761,6 +4031,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"bfV" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/courtroom) +"bge" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "bgs" = ( /obj/structure/sign/poster/random/directional/east, /obj/structure/cable, @@ -3843,12 +4126,11 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"bhk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +"bhm" = ( +/obj/machinery/vending/coffee, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) "bht" = ( /obj/structure/closet/lasertag/red, /obj/effect/spawner/random/contraband/permabrig_gear, @@ -3865,6 +4147,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/white, /area/station/medical/virology) +"bhI" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"bhQ" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "bhV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -3875,37 +4165,21 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"bid" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/effect/landmark/navigate_destination/bar, -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Atrium" - }, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/bar/atrium) "bie" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 }, /turf/open/floor/plating, /area/mine/production) -"bif" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/sign/warning/radiation/rad_area/directional/east, -/obj/machinery/camera/directional/east{ - c_tag = "Atmospherics - HFR Decontamination Chamber" +"bij" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/hfr_room) -"bil" = ( -/obj/structure/railing/wooden_fence, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/treatment_center) "bin" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 @@ -3929,14 +4203,24 @@ /obj/item/clothing/head/beanie/orange, /turf/open/floor/iron, /area/station/cargo/storage) -"biI" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Xenobiology Test Chamber"; - network = list("ss13","test","rd","xeno") +"biu" = ( +/obj/machinery/door/window/right/directional/south{ + req_access = list("kitchen"); + name = "The Ice Box" }, -/obj/machinery/light/directional/west, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"biE" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/lesser) "biR" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -4014,6 +4298,28 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"bjI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/directional/west, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/ordnance/office) +"bjK" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/keycard_auth/wall_mounted/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) +"bjL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/ordnance/office) "bjN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4065,15 +4371,15 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/brig/upper) -"bkF" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/decal/cleanable/dirt, +"bkQ" = ( +/obj/structure/tank_holder/extinguisher, +/obj/structure/sign/warning/biohazard/directional/north, /turf/open/floor/iron, -/area/station/science/explab) -"bkM" = ( -/obj/structure/sign/warning/gas_mask/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/area/station/science/xenobiology) +"bkR" = ( +/obj/machinery/modular_computer/preset/civilian, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "bkS" = ( /obj/machinery/bci_implanter, /turf/open/floor/iron/white/side{ @@ -4153,6 +4459,14 @@ /obj/machinery/light/directional/west, /turf/open/floor/grass, /area/station/service/hydroponics/garden) +"blM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/station/service/bar) "blO" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -4183,10 +4497,17 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/service/library) -"blX" = ( -/obj/effect/decal/cleanable/dirt/dust, +"blY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, -/area/station/maintenance/fore) +/area/station/maintenance/port/greater) +"bmc" = ( +/obj/structure/fence/post, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "bml" = ( /obj/structure/table, /obj/item/storage/medkit/regular, @@ -4205,21 +4526,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/white, /area/station/medical/virology) -"bmT" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 9 +"bng" = ( +/obj/machinery/light/small/dim/directional/west, +/obj/structure/railing{ + dir = 8 }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"bna" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ +/turf/open/floor/iron/stairs/medium{ dir = 1 }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/aft) +/area/station/commons/lounge) "bnh" = ( /obj/machinery/door/window/left/directional/east{ name = "Containment Pen 7"; @@ -4239,6 +4554,27 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"bnm" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Service Hall" + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/obj/effect/landmark/navigate_destination, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/hallway/secondary/service) "bnp" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 @@ -4248,6 +4584,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/storage_shared) +"bnr" = ( +/turf/open/floor/iron/white/side{ + dir = 8 + }, +/area/station/science/xenobiology) "bnt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -4265,11 +4606,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"bnG" = ( -/obj/structure/sign/warning/fire/directional/west, -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/project) "bnL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock/maintenance_hatch, @@ -4292,52 +4628,20 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) -"bod" = ( -/obj/structure/closet/crate/wooden, -/obj/item/camera_film{ - pixel_x = -4; - pixel_y = 4 +"boc" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Exfiltrate to Waste" }, -/obj/item/camera, -/obj/effect/turf_decal/siding/wood{ - dir = 1 +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing/corner/end{ + dir = 4 }, -/obj/structure/sign/poster/contraband/the_griffin/directional/south, -/turf/open/floor/iron/grimy, -/area/station/commons/vacant_room/office) +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) "bol" = ( /turf/open/floor/iron/dark/textured, /area/station/security/prison) -"bon" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/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/station/service/hydroponics) -"bor" = ( -/obj/structure/minecart_rail{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/holosign/barrier/atmos/sturdy, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "minecraft_shutter"; - name = "Cart Shutters" - }, -/turf/open/floor/iron/textured, -/area/station/service/hydroponics) "bos" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 5 @@ -4368,23 +4672,22 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"bpa" = ( -/obj/structure/minecart_rail{ - dir = 4 - }, +"boU" = ( +/obj/structure/rack, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/smooth, +/area/mine/living_quarters) +"boX" = ( +/obj/machinery/duct, /obj/structure/cable, -/obj/effect/turf_decal/weather/snow/corner, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, -/obj/machinery/light/small/red/directional/north, -/turf/open/floor/plating/snowed/coldroom, -/area/icemoon/underground/explored) -"bpc" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/grimy, -/area/station/service/theater) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/yellow/corner, +/turf/open/floor/iron, +/area/station/engineering/lobby) "bpd" = ( /obj/machinery/power/smes/engineering, /obj/effect/turf_decal/delivery, @@ -4393,11 +4696,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark/textured, /area/station/engineering/engine_smes) -"bpf" = ( -/obj/machinery/computer/records/security, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/command/bridge) "bpm" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 4 @@ -4419,33 +4717,29 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"bpv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 +"bpq" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/structure/railing/corner{ + dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/stone, -/area/station/service/bar/atrium) -"bpD" = ( -/obj/machinery/newscaster/directional/south, -/obj/structure/closet/firecloset, -/turf/open/floor/iron/cafeteria{ - dir = 8 +/turf/open/floor/plastic, +/area/station/commons/dorms/laundry) +"bpw" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/event_spawn, +/obj/structure/railing/corner/end/flip{ + dir = 4 }, -/area/station/science/research) +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) "bpK" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"bpL" = ( -/obj/structure/noticeboard/directional/west, -/turf/open/floor/engine/cult, -/area/station/service/library) "bpQ" = ( /obj/machinery/mech_bay_recharge_port, /obj/structure/cable, @@ -4473,16 +4767,37 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) -"bpZ" = ( -/obj/item/radio/intercom/directional/west, -/obj/machinery/chem_dispenser, -/turf/open/floor/glass/reinforced, -/area/station/medical/treatment_center) +"bpY" = ( +/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/structure/cable, +/obj/machinery/door/firedoor/heavy{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "bqe" = ( /obj/structure/grille, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"bqf" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/labor_camp) +"bqq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "bqr" = ( /obj/item/target, /obj/structure/window/reinforced/spawner/directional/north, @@ -4500,6 +4815,19 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/security/processing) +"bqz" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/cultivator, +/obj/item/seeds/potato, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "bqF" = ( /obj/structure/chair{ dir = 4 @@ -4514,10 +4842,13 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/brig/upper) -"bqX" = ( -/obj/machinery/air_sensor/ordnance_burn_chamber, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +"bqS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/security/courtroom) "bqY" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance/two, @@ -4532,6 +4863,15 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"brm" = ( +/obj/machinery/computer/holodeck{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "bro" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4558,15 +4898,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) -"brC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/structure/chair_flipped{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "brJ" = ( /obj/structure/chair/stool/directional/south, /obj/effect/landmark/event_spawn, @@ -4609,23 +4940,14 @@ }, /turf/open/floor/plating, /area/mine/eva/lower) -"bsc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stock_parts/power_store/cell/high, -/turf/open/floor/iron, -/area/station/maintenance/department/electrical) "bsd" = ( /obj/structure/chair/stool/directional/south, -/obj/structure/sign/poster/official/obey/directional/north, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /obj/machinery/light/small/dim/directional/west, +/obj/structure/sign/poster/official/obey/directional/west, /turf/open/floor/iron, /area/mine/laborcamp) "bse" = ( @@ -4647,14 +4969,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/break_room) -"bsn" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" +"bso" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/light_switch/directional/west{ + pixel_x = -39 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/textured, -/area/station/commons/toilet) +/turf/open/floor/iron/checker, +/area/station/commons/storage/emergency/port) "bst" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 @@ -4696,6 +5018,21 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) +"bsW" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/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, +/area/station/service/hydroponics) "bta" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -4724,6 +5061,14 @@ dir = 4 }, /area/station/hallway/secondary/entry) +"btq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "bts" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -4753,6 +5098,20 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"btK" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "btU" = ( /turf/closed/wall, /area/station/medical/morgue) @@ -4797,39 +5156,44 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"buW" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/directional/south, -/turf/open/openspace/icemoon/keep_below, -/area/icemoon/underground/explored) +"buR" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/potato{ + name = "\improper Beepsky's emergency battery" + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"buU" = ( +/obj/structure/closet, +/obj/effect/spawner/random/maintenance, +/obj/item/clothing/shoes/wheelys/skishoes{ + pixel_y = -8 + }, +/obj/item/clothing/suit/hooded/wintercoat{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "buY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"bvc" = ( -/obj/structure/minecart_rail{ - dir = 1 - }, -/obj/item/radio/intercom/directional/west{ - frequency = 1453; - name = "Kitchen Intercom" +"bvb" = ( +/obj/structure/fence/post{ + dir = 4 }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "bvd" = ( /obj/machinery/power/terminal, /obj/machinery/light/small/directional/east, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"bve" = ( -/obj/structure/sign/warning/no_smoking{ - pixel_x = -28 - }, -/turf/open/openspace, -/area/station/medical/treatment_center) "bvg" = ( /obj/structure/railing{ dir = 4 @@ -4863,11 +5227,23 @@ /obj/machinery/autolathe, /turf/open/floor/iron, /area/station/cargo/office) -"bvu" = ( -/obj/machinery/light/directional/north, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +"bvw" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/reagent_containers/syringe{ + pixel_x = -5; + pixel_y = -8 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_y = -6; + pixel_x = 9 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "bvE" = ( /obj/machinery/computer/monitor{ name = "bridge power monitoring console" @@ -4894,43 +5270,30 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, /area/station/maintenance/department/medical/morgue) +"bvX" = ( +/obj/machinery/computer/security/hos, +/obj/machinery/requests_console/directional/north{ + department = "Head of Security's Desk"; + name = "Head of Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/item/radio/intercom/directional/west, +/obj/machinery/button/door/directional/north{ + id = "hosspace"; + name = "Icemoon Shutters Control" + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hos) "bvY" = ( /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/brig/upper) -"bwe" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/virology{ - autoclose = 0; - frequency = 1449; - id_tag = "virology_airlock_interior"; - name = "Virology Interior Airlock" - }, -/obj/structure/cable, -/obj/machinery/door_buttons/access_button{ - idDoor = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Button"; - pixel_x = -24; - pixel_y = 5; - req_access = list("virology") - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/effect/turf_decal/tile/green/full, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/virology) "bwh" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 - }, -/turf/closed/wall, -/area/station/service/hydroponics) +/turf/closed/wall/mineral/iron, +/area/icemoon/underground/explored) "bwi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4955,11 +5318,38 @@ dir = 8 }, /area/station/hallway/secondary/entry) +"bwp" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "bwt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"bwD" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "bwK" = ( /obj/structure/bookcase/random/religion, /turf/open/floor/wood, @@ -5004,6 +5394,10 @@ /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, /area/station/maintenance/fore) +"bxS" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/floor/plating, +/area/station/maintenance/fore) "bxU" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -5022,12 +5416,6 @@ dir = 5 }, /area/station/maintenance/port/aft) -"bxX" = ( -/obj/structure/chair/stool/directional/north, -/obj/structure/sign/poster/official/report_crimes/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/mine/laborcamp) "byd" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /obj/machinery/light_switch/directional/south, @@ -5047,6 +5435,7 @@ /obj/machinery/camera/directional/north{ c_tag = "Cargo Bay Delivery Office" }, +/obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/cargo/sorting) "byn" = ( @@ -5086,11 +5475,6 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) -"byy" = ( -/obj/machinery/newscaster/directional/east, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "byB" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/plating/icemoon, @@ -5099,6 +5483,16 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) +"byJ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/bar) "byK" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5110,18 +5504,16 @@ /obj/effect/mapping_helpers/mail_sorting/science/robotics, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"byO" = ( -/obj/effect/turf_decal/siding/wood/end{ - dir = 1 - }, -/mob/living/carbon/human/species/monkey/punpun, -/obj/item/kirbyplants/organic/plant11, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "byP" = ( /obj/structure/girder, /turf/open/floor/plating, /area/station/maintenance/fore) +"bza" = ( +/obj/structure/fence/end{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "bzc" = ( /obj/machinery/status_display/evac/directional/east, /obj/effect/turf_decal/tile/blue, @@ -5142,14 +5534,6 @@ }, /turf/open/floor/wood, /area/station/service/library) -"bzB" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "bzC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5157,20 +5541,27 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"bzD" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "mining-aux-mechbay-external" + }, +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Mining Mech Bay External Airlock"; + opacity = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/turf/open/floor/iron/large, +/area/mine/mechbay) "bzE" = ( /obj/structure/railing{ dir = 1 }, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"bzF" = ( -/obj/machinery/status_display/ai/directional/north, -/obj/item/aquarium_kit, -/obj/structure/rack, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "bzI" = ( /obj/machinery/bluespace_vendor/directional/west, /obj/effect/turf_decal/tile/blue{ @@ -5178,15 +5569,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"bzJ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/camera/directional/north{ - c_tag = "Mining Mech Bay" - }, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/iron/smooth, -/area/mine/mechbay) "bzQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5199,15 +5581,6 @@ "bzW" = ( /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"bzX" = ( -/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/plating, -/area/station/maintenance/starboard/lesser) "bAa" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -5215,6 +5588,19 @@ /obj/structure/chair/stool/directional/north, /turf/open/floor/carpet, /area/station/command/heads_quarters/qm) +"bAj" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/cryo) "bAk" = ( /obj/machinery/firealarm/directional/west, /turf/open/floor/carpet, @@ -5276,25 +5662,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"bBa" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 9 - }, -/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/service/hydroponics) -"bBb" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "bBd" = ( /obj/effect/turf_decal/siding/yellow{ dir = 6 @@ -5303,24 +5670,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/engineering/lobby) -"bBn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ - color = "#0000ff"; - dir = 8; - name = "Supply multi deck pipe adapter" - }, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ - color = "#ff0000"; - dir = 8; - name = "Scrubbers multi deck pipe adapter" - }, -/obj/structure/cable/multilayer/multiz, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "bBw" = ( /obj/item/trash/sosjerky, /turf/open/floor/plating, @@ -5352,14 +5701,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) +"bBO" = ( +/obj/effect/spawner/random/decoration/flower, +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "bBW" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) -"bCc" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/maintenance/port/aft) "bCd" = ( /obj/machinery/door/airlock/maintenance{ name = "Genetics Lab Maintenance" @@ -5390,24 +5740,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison/work) -"bCq" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) -"bCr" = ( -/obj/machinery/door/window/left/directional/north{ - name = "Pharmacy Desk"; - req_access = list("pharmacy") - }, -/obj/item/folder/white, -/obj/item/pen, -/obj/machinery/door/firedoor, -/obj/structure/sign/warning/fire/directional/west, -/obj/structure/table/reinforced, -/turf/open/floor/plating, -/area/station/medical/treatment_center) "bCs" = ( /obj/machinery/door/airlock/engineering{ name = "Construction Area" @@ -5426,12 +5758,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall/r_wall, /area/station/medical/virology) -"bCL" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/table/glass, -/obj/item/storage/box/monkeycubes, -/turf/open/floor/iron, -/area/station/science/xenobiology) +"bCN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark_blue/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/morgue) "bCQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -5446,32 +5787,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"bCW" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - id = "bridge blast"; - name = "Bridge Blast Door" - }, -/obj/effect/turf_decal/delivery, -/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/command/bridge) -"bDd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison/workout) "bDj" = ( /obj/machinery/light/warm/directional/south, /turf/open/floor/iron/dark/textured, /area/station/security/prison/workout) "bDl" = ( /obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "bDu" = ( @@ -5485,6 +5809,12 @@ dir = 4 }, /area/station/engineering/lobby) +"bDB" = ( +/obj/structure/plaque/static_plaque/golden/commission/icebox{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "bDC" = ( /obj/machinery/door/airlock{ id_tag = "miningdorm_B"; @@ -5561,32 +5891,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured, /area/station/security/interrogation) -"bEh" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/sign/warning/cold_temp/directional/east, -/obj/structure/sign/warning/gas_mask/directional/west{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Xenobiology External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "bEi" = ( /obj/structure/sign/poster/official/work_for_a_future/directional/north, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"bEo" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/white, -/area/station/maintenance/aft/greater) +"bEk" = ( +/obj/structure/railing/wooden_fence{ + dir = 4 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) +"bEn" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "bEz" = ( /obj/machinery/door/airlock/command/glass{ name = "Secure EVA Storage" @@ -5604,20 +5928,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/command/storage/eva) -"bEB" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) -"bEH" = ( -/obj/structure/stairs/north{ - dir = 4 - }, -/turf/open/floor/iron/stairs/old{ - dir = 4 - }, -/area/station/engineering/atmos/storage) "bEJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -5625,6 +5935,9 @@ /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/border_only{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/science/ordnance/office) "bEL" = ( @@ -5652,22 +5965,48 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"bFr" = ( -/obj/structure/tank_holder/extinguisher, -/turf/open/floor/iron, -/area/station/science/xenobiology) "bFs" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"bFS" = ( -/obj/item/crowbar/red, +"bFx" = ( +/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/aft/greater) +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/dark, +/area/mine/storage) +"bFA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) +"bFP" = ( +/obj/structure/fence/corner{ + dir = 6 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"bFW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "bFY" = ( /obj/item/trash/syndi_cakes, /turf/open/floor/plating, @@ -5678,15 +6017,11 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"bGf" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/trash/waffles, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) +"bGc" = ( +/obj/machinery/computer/cargo/request, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron, +/area/station/command/bridge) "bGm" = ( /obj/machinery/firealarm/directional/south, /obj/structure/filingcabinet/filingcabinet, @@ -5695,17 +6030,29 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"bGn" = ( +/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, +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing/corner, +/turf/open/floor/iron, +/area/mine/eva) +"bGq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "bGA" = ( /obj/effect/spawner/structure/window, /obj/structure/sign/departments/xenobio/directional/south, /turf/open/floor/plating, /area/station/science/xenobiology) -"bGD" = ( -/obj/structure/table/reinforced, -/obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/dark/smooth_large, -/area/station/security/checkpoint/medical) "bGP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -5715,6 +6062,15 @@ dir = 1 }, /area/mine/eva) +"bGS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/fore/lesser) "bGT" = ( /obj/machinery/light/directional/south, /obj/structure/closet/firecloset, @@ -5730,6 +6086,14 @@ dir = 4 }, /area/station/command/heads_quarters/rd) +"bHc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/railing{ + dir = 4 + }, +/obj/item/kirbyplants/random/dead, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "bHu" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -5752,6 +6116,10 @@ }, /turf/open/floor/plating, /area/station/hallway/primary/fore) +"bHJ" = ( +/obj/machinery/smartfridge, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "bHO" = ( /obj/machinery/light_switch/directional/south{ pixel_x = 6; @@ -5760,11 +6128,6 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"bHZ" = ( -/obj/effect/spawner/random/trash/mess, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "bIa" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 8; @@ -5788,21 +6151,6 @@ dir = 4 }, /area/station/ai_monitored/command/storage/eva) -"bId" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/firedoor/heavy, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/north{ - areastring = "/area/station/science/ordnance/burnchamber" - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "bIl" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -5823,15 +6171,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/disposal) -"bIq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk/multiz/down{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "bIt" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -5933,37 +6272,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/mine/laborcamp) -"bJy" = ( -/obj/machinery/button/flasher{ - id = "hopflash"; - pixel_x = 8; - pixel_y = -32 - }, -/obj/machinery/button/door/directional/south{ - id = "hopqueue"; - name = "Queue Shutters Control"; - pixel_x = -8; - req_access = list("hop") - }, -/obj/machinery/button/door/directional/south{ - id = "hop"; - name = "Privacy Shutters Control"; - pixel_x = 8; - req_access = list("hop") - }, -/obj/machinery/button/ticket_machine{ - pixel_x = -8; - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/obj/machinery/modular_computer/preset/id{ - dir = 1 - }, -/obj/item/paper/fluff/ids_for_dummies, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "bJD" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ dir = 4 @@ -5973,14 +6281,6 @@ "bJE" = ( /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) -"bJJ" = ( -/obj/machinery/computer/mech_bay_power_console{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/iron, -/area/station/science/robotics/mechbay) "bJQ" = ( /obj/structure/table/wood, /obj/item/stack/package_wrap, @@ -5990,13 +6290,11 @@ }, /turf/open/floor/wood, /area/station/service/library) -"bKm" = ( -/obj/machinery/vending/assist, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/research) +"bJX" = ( +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/robot_debris/down, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) "bKp" = ( /obj/machinery/door/airlock/maintenance{ name = "Firefighting Equipment" @@ -6015,6 +6313,25 @@ }, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) +"bKE" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/brown{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + id = "miningdorm_B"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet/stellar, +/area/mine/production) "bKI" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/disposal/bin, @@ -6047,19 +6364,6 @@ dir = 5 }, /area/station/maintenance/port/aft) -"bLa" = ( -/obj/structure/bed, -/obj/machinery/airalarm/directional/north, -/obj/effect/spawner/random/bedsheet, -/obj/machinery/button/door/directional/east{ - id = "Dorm1"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/item/pillow/random, -/turf/open/floor/carpet, -/area/station/commons/dorms) "bLc" = ( /turf/open/floor/iron/dark/textured_edge{ dir = 1 @@ -6070,12 +6374,6 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/dark/textured, /area/station/security/interrogation) -"bLf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "bLn" = ( /obj/machinery/light/directional/west, /obj/item/radio/intercom/directional/west, @@ -6149,12 +6447,10 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"bMe" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) +"bMk" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood, +/area/station/commons/lounge) "bMz" = ( /obj/docking_port/stationary{ dir = 8; @@ -6186,24 +6482,6 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"bNo" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "QMLoad" - }, -/obj/machinery/door/poddoor{ - id = "QMLoaddoor"; - name = "Supply Dock Loading Door" - }, -/turf/open/floor/plating, -/area/station/cargo/storage) -"bNu" = ( -/obj/item/kirbyplants/random, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/research) "bNy" = ( /obj/item/toy/snowball{ pixel_x = 9; @@ -6211,6 +6489,12 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"bNC" = ( +/obj/structure/fence{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "bNE" = ( /obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Monitoring" @@ -6239,11 +6523,14 @@ /turf/open/floor/iron/showroomfloor, /area/station/security/processing) "bOh" = ( -/obj/machinery/airalarm/directional/north, -/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) +/obj/structure/table/wood, +/obj/item/folder/red, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/security/courtroom) "bOj" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -6257,15 +6544,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/construction) -"bOn" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Service - Gambling Lounge" - }, -/obj/machinery/computer/slot_machine{ - name = "two-armed bandit" - }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) "bOo" = ( /obj/effect/turf_decal/arrows/white{ dir = 4 @@ -6275,15 +6553,18 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"bOy" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/spawner/random/vending/snackvend, -/obj/machinery/camera/directional/east{ - c_tag = "Engineering Lobby" +"bOp" = ( +/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/machinery/newscaster/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Medbay North"; + network = list("ss13","medbay") }, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "bOz" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 1 @@ -6299,12 +6580,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"bOT" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 4 - }, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "bOX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6316,27 +6591,41 @@ /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/fore) "bOZ" = ( -/obj/effect/spawner/random/structure/musician/piano/random_piano, -/obj/machinery/button/curtain{ - id = "cantena_curtains"; - pixel_x = -30 - }, -/turf/open/floor/wood, -/area/station/commons/lounge) +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "bPc" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"bPk" = ( -/obj/structure/reagent_dispensers/plumbed{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) +"bPl" = ( +/obj/structure/table/wood, +/obj/item/folder/blue, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/security/courtroom) "bPn" = ( /obj/structure/girder, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"bPp" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access"; + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "bPr" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -6396,12 +6685,6 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/virology) -"bPR" = ( -/obj/structure/railing/wooden_fence{ - dir = 1 - }, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) "bPV" = ( /obj/item/kirbyplants/random/dead, /turf/open/floor/plating/snowed/icemoon, @@ -6418,20 +6701,19 @@ }, /turf/open/floor/iron/dark/diagonal, /area/station/engineering/atmos/storage) -"bQd" = ( -/obj/structure/fireaxecabinet/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron, -/area/station/command/bridge) "bQh" = ( /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/corner{ dir = 1 }, /area/station/hallway/primary/starboard) +"bQx" = ( +/obj/structure/ladder{ + name = "upper dispenser access" + }, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/iron/dark/textured_large, +/area/station/medical/chemistry) "bQA" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -6448,14 +6730,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"bQV" = ( -/obj/structure/sign/warning/electric_shock/directional/north, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "bRb" = ( /obj/structure/flora/bush/lavendergrass/style_random, /turf/open/floor/grass, @@ -6469,6 +6743,12 @@ /obj/effect/mapping_helpers/airlock/access/all/science/robotics, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"bRj" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/closet/emcloset/anchored, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/engineering/main) "bRl" = ( /obj/effect/turf_decal/trimline/green/filled/corner, /obj/effect/decal/cleanable/dirt, @@ -6490,19 +6770,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"bRx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "bRz" = ( /obj/machinery/hydroponics/soil{ pixel_y = 8 @@ -6535,18 +6802,13 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"bRO" = ( -/obj/item/reagent_containers/cup/soda_cans/beer{ - pixel_x = -7; - pixel_y = 2 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "bSi" = ( -/obj/structure/sign/warning/cold_temp/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "bSk" = ( /obj/machinery/door/poddoor/preopen{ id = "Prison Gate"; @@ -6568,21 +6830,22 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/eighties/red, /area/station/security/prison/safe) +"bSp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "bSz" = ( /obj/structure/railing{ dir = 8 }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"bSC" = ( -/obj/machinery/camera{ - c_tag = "Starboard Primary Hallway Center" - }, -/obj/structure/cable, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "bSG" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 8 @@ -6599,11 +6862,19 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"bSX" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/chair/sofa/right/brown, -/turf/open/floor/carpet/blue, -/area/station/security/prison/work) +"bSW" = ( +/obj/structure/bed, +/obj/machinery/airalarm/directional/north, +/obj/effect/spawner/random/bedsheet, +/obj/machinery/button/door/directional/east{ + id = "Dorm1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "bTl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6624,6 +6895,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) +"bTE" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Service External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "bTF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6632,13 +6916,21 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"bTQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +"bTJ" = ( +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/radio/intercom/directional/north, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) +"bTM" = ( +/obj/structure/closet/crate, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/smooth, +/area/mine/eva/lower) "bUa" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -6647,13 +6939,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/breakroom) -"bUp" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/security/prison/garden) "bUx" = ( /turf/closed/wall/r_wall, /area/station/maintenance/fore) +"bUy" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/bar) "bUH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -6675,6 +6970,15 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"bUS" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "bUW" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -6706,6 +7010,13 @@ /obj/item/clothing/gloves/latex/nitrile, /turf/open/floor/iron/dark, /area/station/medical/storage) +"bVs" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Security - Permabrig Observation Prep"; + network = list("ss13","prison") + }, +/turf/open/floor/vault, +/area/station/security/prison/rec) "bVv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6713,6 +7024,18 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/plating, /area/station/maintenance/central/lesser) +"bVx" = ( +/obj/item/trash/popcorn, +/obj/structure/reagent_dispensers/plumbed{ + name = "dormitory reservoir" + }, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/maintenance/fore) "bVI" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -6746,19 +7069,22 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"bVY" = ( -/obj/machinery/hydroponics/constructable, -/obj/item/seeds/soya, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 +"bVT" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/effect/spawner/random/contraband/prison, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner, +/obj/item/clothing/under/rank/prisoner/skirt, +/obj/item/clothing/under/rank/prisoner/skirt, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) -"bVZ" = ( -/obj/structure/sign/poster/contraband/the_big_gas_giant_truth, -/turf/closed/wall, -/area/station/maintenance/department/medical/central) +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/work) "bWe" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/hollow/reinforced/middle, @@ -6785,14 +7111,37 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/iron/dark, /area/station/service/chapel) +"bWv" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) "bWy" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/engineering/atmos) +"bWH" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/science/ordnance) "bWK" = ( /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) +"bWM" = ( +/obj/structure/stairs/south, +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/station/medical/virology) "bWQ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -6802,6 +7151,14 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"bWU" = ( +/obj/machinery/button/door/directional/west{ + id = "xenobio4"; + name = "Xenobio Pen 4 Blast Door"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "bWV" = ( /obj/structure/closet/crate, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -6814,13 +7171,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/service/chapel) -"bXb" = ( -/obj/effect/decal/cleanable/greenglow, -/obj/effect/decal/cleanable/plastic, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "bXf" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -6864,6 +7214,12 @@ "bXy" = ( /turf/open/openspace, /area/station/ai_monitored/security/armory/upper) +"bXD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "bXF" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/ai_all, @@ -6879,20 +7235,6 @@ dir = 1 }, /area/station/security/prison) -"bXL" = ( -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron/white, -/area/station/science/research) -"bXT" = ( -/obj/machinery/camera{ - c_tag = "Medbay Storage"; - dir = 9; - network = list("ss13","medbay") - }, -/obj/structure/closet/l3closet, -/obj/effect/turf_decal/trimline/blue/filled/line, -/turf/open/floor/iron/dark, -/area/station/medical/storage) "bYd" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/light/small/directional/west, @@ -6915,10 +7257,6 @@ dir = 8 }, /area/station/service/chapel) -"bYr" = ( -/obj/structure/fence, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "bYu" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -6932,12 +7270,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter) -"bYx" = ( -/obj/structure/fence/post{ - dir = 1 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "bYz" = ( /obj/machinery/conveyor{ dir = 8; @@ -6961,6 +7293,14 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/smooth, /area/station/security/execution/transfer) +"bYC" = ( +/obj/machinery/vending/wardrobe/bar_wardrobe, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Backroom" + }, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "bYF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6978,6 +7318,15 @@ }, /turf/open/floor/glass/reinforced, /area/station/medical/treatment_center) +"bYR" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/station/commons/dorms/laundry) "bYS" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7042,26 +7391,37 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/visit) +"bZm" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/light/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Service - Hall" + }, +/obj/machinery/disposal/bin/tagger, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "bZx" = ( /turf/open/openspace, /area/station/hallway/primary/fore) -"bZB" = ( -/obj/structure/rack, -/obj/item/clothing/suit/hooded/wintercoat/eva{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/clothing/shoes/winterboots/ice_boots/eva{ - pixel_x = -1; - pixel_y = 4 +"bZC" = ( +/obj/structure/lattice, +/obj/structure/sign/poster/official/report_crimes/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) +"bZI" = ( +/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/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 }, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/delivery/red, -/obj/item/clothing/gloves/color/grey/protects_cold, -/obj/item/clothing/mask/gas, -/obj/structure/sign/warning/electric_shock/directional/east, -/turf/open/floor/iron/textured, -/area/station/ai_monitored/command/storage/eva) +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/treatment_center) "bZK" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red, @@ -7070,34 +7430,54 @@ "bZQ" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/starboard) -"bZU" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 2 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/mail_sorting/service/dormitories, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/fitness) "bZV" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"cag" = ( -/obj/effect/turf_decal/siding/wood{ +"bZW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"cah" = ( +/obj/machinery/status_display/supply{ + pixel_x = -32 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"cax" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/item/radio/intercom/directional/east, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Atrium" + }, +/obj/effect/turf_decal/bot_white, +/obj/structure/sign/picture_frame/portrait/bar{ + pixel_y = 32 + }, +/turf/open/floor/wood/large, +/area/station/service/bar/atrium) +"caA" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ dir = 1 }, -/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/service/theater) +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/table/glass, +/obj/item/book/manual/hydroponics_pod_people, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/sign/poster/contraband/kudzu/directional/north, +/obj/machinery/light/small/directional/west, +/obj/item/plant_analyzer, +/obj/item/watertank{ + pixel_y = -3; + pixel_x = -5 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "caC" = ( /obj/machinery/door/window/right/directional/west{ name = "Monkey Pen"; @@ -7113,18 +7493,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/large, /area/station/hallway/primary/port) -"caU" = ( -/obj/structure/sign/warning/cold_temp/directional/south, -/obj/structure/sign/warning/gas_mask/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) -"caX" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 9 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "caY" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, @@ -7144,56 +7512,39 @@ "cbk" = ( /turf/open/floor/iron, /area/mine/mechbay) -"cbq" = ( -/obj/structure/plasticflaps/opaque, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "Research Division" - }, -/obj/effect/turf_decal/delivery, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) "cbs" = ( /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, /area/station/hallway/primary/starboard) -"cbu" = ( -/obj/machinery/vatgrower{ - dir = 4 +"cby" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 }, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics) "cbz" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) -"cbF" = ( -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "rnd2"; - name = "Research Lab Shutters" +"cbC" = ( +/obj/machinery/meter, +/obj/effect/turf_decal/trimline/dark_red/arrow_ccw{ + dir = 1 }, -/obj/effect/turf_decal/siding/purple/corner{ +/obj/machinery/atmospherics/pipe/layer_manifold/pink/visible{ dir = 4 }, -/turf/open/floor/iron, -/area/station/science/lab) -"cbP" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio9"; - name = "Xenobio Pen 9 Blast DOors"; - req_access = list("xenobiology") - }, -/obj/machinery/light/floor, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/warning/no_smoking/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/storage) "ccg" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -7226,6 +7577,24 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"cct" = ( +/obj/structure/noticeboard/captain{ + pixel_y = 36 + }, +/turf/open/floor/wood, +/area/station/command/meeting_room) +"ccv" = ( +/obj/structure/table, +/obj/machinery/cell_charger{ + pixel_y = 3 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = 3 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/textured, +/area/mine/mechbay) "ccw" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -7260,6 +7629,18 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/lesser) +"ccF" = ( +/obj/structure/cable, +/mob/living/basic/bear/snow/misha, +/obj/structure/bed/dogbed/misha, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/hos) +"ccL" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "ccQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -7269,6 +7650,11 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"ccR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/structure/sink/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/cryo) "ccS" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 @@ -7297,13 +7683,6 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/rd) -"ccX" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/spawner/random/medical/patient_stretcher, -/obj/effect/decal/cleanable/blood/gibs/torso, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/security/prison/safe) "ccZ" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 6 @@ -7334,28 +7713,12 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"cdO" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/service/theater, +"cdp" = ( +/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, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"cdX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron, +/area/station/security/prison/workout) "cef" = ( /obj/machinery/biogenerator, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -7367,16 +7730,21 @@ /obj/structure/grille, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"cem" = ( -/obj/structure/flora/rock/pile/icy/style_random, -/turf/open/misc/asteroid/snow/coldroom, -/area/icemoon/underground/explored) "ceo" = ( /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/cargo/storage) +"cew" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/cargo/drone_bay) "cex" = ( /obj/machinery/computer/piratepad_control/civilian{ dir = 1 @@ -7400,6 +7768,24 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/virology) +"ceF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/conveyor{ + id = "mining_internal" + }, +/obj/machinery/bouldertech/refinery, +/obj/machinery/camera/directional/east{ + c_tag = "Mining Ore Smeltery"; + network = list("ss13", "mine") + }, +/turf/open/floor/iron, +/area/mine/production) "ceO" = ( /obj/machinery/button/crematorium{ id = "crematoriumChapel"; @@ -7411,6 +7797,14 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel/office) +"ceQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/minecart_rail/railbreak, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "ceS" = ( /obj/machinery/mech_bay_recharge_port{ dir = 1 @@ -7419,21 +7813,6 @@ /obj/effect/turf_decal/siding/white, /turf/open/floor/iron/smooth, /area/mine/mechbay) -"ceU" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Fitness Maintenance" - }, -/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, -/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/fore) "ceY" = ( /obj/machinery/door/poddoor/preopen{ id = "Disposal Exit"; @@ -7495,6 +7874,21 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"cft" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "cfC" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ @@ -7502,6 +7896,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"cfR" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) "cfS" = ( /obj/item/clothing/suit/costume/snowman{ name = "Man of Snow" @@ -7512,22 +7914,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"cfT" = ( -/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ - color = "#0000ff"; - dir = 8; - name = "Supply multi deck pipe adapter" - }, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ - color = "#ff0000"; - dir = 8; - name = "Scrubbers multi deck pipe adapter" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/engineering/lobby) "cga" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -7540,19 +7926,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) -"cgd" = ( -/obj/effect/decal/cleanable/dirt/dust, -/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/freezer, -/area/station/service/kitchen/coldroom) -"cge" = ( -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "cgs" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/dark, @@ -7570,6 +7943,10 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) +"cgB" = ( +/obj/structure/aquarium/lawyer, +/turf/open/floor/wood, +/area/station/service/lawoffice) "cgC" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -7595,10 +7972,27 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"chb" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"chc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "chg" = ( /obj/structure/fence/door, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"chn" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "cht" = ( /obj/machinery/vending/engivend, /obj/machinery/light/small/directional/north, @@ -7655,16 +8049,11 @@ }, /turf/open/floor/iron/white/side, /area/mine/living_quarters) -"chW" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/chem_master, -/obj/structure/sign/warning/no_smoking/circle{ - pixel_x = -27; - pixel_y = -26 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/glass/reinforced, -/area/station/medical/treatment_center) +"cie" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "cih" = ( /obj/machinery/button/door/directional/west{ id = "chemistry_lower_shutters"; @@ -7685,6 +8074,15 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"cip" = ( +/obj/machinery/atmospherics/components/tank/air{ + initialize_directions = 3; + dir = 3 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "ciG" = ( /obj/machinery/door/airlock/external{ name = "Security Yard"; @@ -7697,13 +8095,6 @@ }, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) -"ciH" = ( -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/iron/cafeteria, -/area/station/commons/dorms/laundry) "ciI" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -7727,23 +8118,11 @@ /obj/effect/spawner/random/trash/cigbutt, /turf/open/floor/iron/dark, /area/station/science/breakroom) -"cjh" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"ciU" = ( +/obj/structure/barricade/wooden, +/obj/structure/sign/warning/cold_temp/directional/north, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"cjz" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/rack, -/obj/item/stack/ducts/fifty, -/obj/item/storage/box/swab, -/obj/effect/spawner/random/contraband/permabrig_gear, -/turf/open/floor/iron/grimy, -/area/station/security/prison/work) +/area/station/maintenance/aft/lesser) "cjI" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -7776,13 +8155,6 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"ckc" = ( -/obj/machinery/door/firedoor, -/obj/machinery/camera/directional/south{ - c_tag = "Central Hallway South-West" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "cke" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7792,11 +8164,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"cki" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/cable, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "cks" = ( /obj/item/wrench, /obj/effect/turf_decal/delivery, @@ -7804,6 +8171,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"ckL" = ( +/obj/structure/fence/corner{ + dir = 2; + pixel_y = 0 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "ckN" = ( /obj/structure/cable, /obj/machinery/newscaster/directional/south, @@ -7817,6 +8191,13 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) +"ckX" = ( +/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 + }, +/area/station/engineering/lobby) "cll" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -7831,12 +8212,6 @@ /obj/effect/spawner/random/maintenance/seven, /turf/open/floor/plating, /area/station/construction) -"clo" = ( -/obj/machinery/firealarm/directional/north, -/obj/machinery/light/small/directional/north, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/science/breakroom) "clq" = ( /turf/open/floor/iron/dark, /area/station/security/processing) @@ -7851,30 +8226,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/commons/storage/mining) -"clG" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/turf/open/misc/asteroid/snow/icemoon, -/area/station/engineering/main) "clI" = ( /obj/structure/sign/warning/biohazard/directional/north, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"clK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/blue/full, -/turf/open/floor/iron/large, -/area/station/medical/medbay/lobby) "clP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7920,21 +8275,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"cmd" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/smartfridge/drying, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) -"cmg" = ( -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/structure/sink/kitchen/directional/south, -/turf/open/floor/iron, -/area/station/service/hydroponics) "cmq" = ( /obj/machinery/door/airlock/external{ name = "External Access" @@ -7945,15 +8285,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"cmv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "cmw" = ( /obj/machinery/firealarm/directional/north, /obj/effect/turf_decal/trimline/dark_red/arrow_ccw{ @@ -7992,17 +8323,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"cmK" = ( -/obj/structure/table/wood, -/obj/machinery/newscaster/directional/west, -/obj/item/stack/package_wrap, -/obj/item/stack/package_wrap{ - pixel_y = 3 - }, -/obj/item/storage/photo_album/bar, -/obj/item/toy/figure/bartender, -/turf/open/floor/iron/grimy, -/area/station/service/bar/backroom) "cmL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8021,6 +8341,7 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 4 }, +/obj/structure/closet/crate/trashcart, /turf/open/floor/iron/dark, /area/station/maintenance/disposal) "cmV" = ( @@ -8035,9 +8356,22 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) +"cmY" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_centre, +/obj/machinery/atmospherics/pipe/multiz/pink/visible{ + dir = 4; + name = "Exfiltrate" + }, +/obj/effect/turf_decal/tile/red/diagonal_edge, +/obj/structure/sign/warning/fire/directional/north, +/turf/open/floor/iron/dark/diagonal, +/area/station/engineering/atmos/mix) "cmZ" = ( /obj/item/clothing/suit/hooded/wintercoat/engineering, /obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) "cnb" = ( @@ -8052,10 +8386,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"cnh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) "cnj" = ( /obj/structure/fence/door{ name = "graveyard" @@ -8096,15 +8426,18 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"cnS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 +"cod" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/chair/stool/directional/east, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) +"coe" = ( /obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/obj/structure/closet/crate, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "coT" = ( /obj/structure/table, /obj/item/storage/wallet, @@ -8153,6 +8486,11 @@ /obj/machinery/light/small/directional/east, /turf/open/openspace, /area/station/service/chapel) +"cps" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/wallet/random, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "cpt" = ( /obj/structure/fence/corner{ dir = 9 @@ -8189,10 +8527,6 @@ }, /turf/open/floor/plating, /area/station/engineering/engine_smes) -"cpO" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "cpT" = ( /obj/item/kirbyplants/random, /obj/machinery/status_display/evac/directional/south, @@ -8201,6 +8535,13 @@ "cpY" = ( /turf/closed/wall, /area/station/service/kitchen) +"cqb" = ( +/obj/machinery/food_cart, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/sign/poster/official/cleanliness/directional/north, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "cqh" = ( /obj/machinery/door/airlock/maintenance{ name = "Library Maintenance" @@ -8216,13 +8557,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"cql" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/structure/chair/stool/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "cqo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8233,24 +8567,12 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"cqs" = ( -/obj/item/toy/snowball{ - pixel_y = -7; - pixel_x = 5 - }, -/turf/open/misc/asteroid/snow/coldroom, -/area/station/service/kitchen/coldroom) -"cqv" = ( -/obj/effect/landmark/blobstart, -/obj/machinery/camera{ - c_tag = "Virology Pen"; - dir = 9; - network = list("ss13","medbay") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, -/obj/machinery/light/small/directional/north, -/turf/open/floor/grass, -/area/station/medical/virology) +"cqw" = ( +/obj/structure/table/wood, +/obj/item/c_tube, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "cqx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8266,8 +8588,18 @@ /obj/machinery/camera/directional/west{ c_tag = "Solar Maintenance - South West Access" }, +/obj/structure/sign/warning/electric_shock/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"cqN" = ( +/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/plating, +/area/station/maintenance/starboard/fore) "cqO" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 10 @@ -8283,25 +8615,28 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory/upper) -"crg" = ( -/obj/machinery/door/morgue{ - name = "Confession Booth" +"crf" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red{ + dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) +/obj/structure/sign/departments/security/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "crn" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/white, /area/station/science/genetics) -"crO" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/railing/corner/end/flip{ - dir = 1 +"crv" = ( +/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/stone, -/area/station/service/bar/atrium) +/turf/open/floor/iron, +/area/station/commons/fitness) "crS" = ( /obj/machinery/vending/wardrobe/law_wardrobe, /turf/open/floor/wood, @@ -8312,6 +8647,13 @@ /obj/structure/sign/poster/ripped/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"crW" = ( +/obj/structure/railing, +/obj/structure/stairs/west, +/turf/open/floor/iron/stairs/medium{ + dir = 4 + }, +/area/station/science/cytology) "cse" = ( /obj/machinery/door/airlock/maintenance{ name = "Cargo Bay Maintenance" @@ -8335,13 +8677,15 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"css" = ( -/obj/structure/table/wood, -/obj/structure/reagent_dispensers/beerkeg, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/service/bar/backroom) +"csu" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "csB" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -8352,23 +8696,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"csJ" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/service/chapel) "csT" = ( /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"csV" = ( -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored/graveyard) -"csZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/grimy, -/area/station/service/bar/backroom) "ctk" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -8383,6 +8717,13 @@ /obj/structure/grille, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"ctm" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) "ctr" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/stripes/line{ @@ -8392,6 +8733,12 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) +"ctC" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "ctE" = ( /obj/structure/cable, /obj/machinery/light_switch/directional/south, @@ -8402,10 +8749,6 @@ }, /turf/open/floor/iron/dark/smooth_half, /area/station/security/office) -"ctF" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/science/xenobiology) "ctI" = ( /obj/machinery/telecomms/processor/preset_three, /turf/open/floor/iron/dark/telecomms, @@ -8421,16 +8764,19 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"ctS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "ctY" = ( /obj/structure/tank_holder/anesthetic, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"cua" = ( -/obj/machinery/button/photobooth{ - pixel_y = -26 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "cuc" = ( /obj/effect/turf_decal/siding/thinplating_new, /turf/open/floor/iron, @@ -8472,10 +8818,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"cuB" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) "cuJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -8517,6 +8859,37 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"cvj" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/box, +/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) +"cvn" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/structure/sink/kitchen/directional/south, +/obj/structure/mirror/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Coldroom Access" + }, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/service/kitchen, +/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/service/kitchen/coldroom) "cvq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -8549,6 +8922,19 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"cvH" = ( +/obj/structure/table, +/obj/item/trash/can/food/beans, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) +"cvJ" = ( +/obj/structure/fence/cut/medium{ + dir = 2 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "cvN" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -8566,12 +8952,6 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"cwh" = ( -/obj/structure/plaque/static_plaque/golden/commission/icebox{ - pixel_y = 29 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "cwj" = ( /obj/machinery/requests_console/directional/south{ department = "Atmospherics"; @@ -8590,6 +8970,10 @@ "cwn" = ( /obj/structure/cable, /obj/structure/transit_tube/crossing/horizontal, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "cwr" = ( @@ -8616,10 +9000,20 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/storage) +"cwH" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/fore) "cwO" = ( /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"cwT" = ( +/obj/structure/closet/emcloset, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "cxd" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark/side{ @@ -8644,6 +9038,11 @@ /obj/item/clothing/suit/costume/wellworn_shirt/graphic/ian, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"cxt" = ( +/obj/structure/table, +/obj/item/food/chococoin, +/turf/open/floor/iron/smooth, +/area/mine/eva) "cxz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8661,17 +9060,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"cxD" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 +"cxI" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Drone Bay" }, -/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/structure/cable, +/obj/machinery/door/firedoor{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/stone, -/area/station/service/bar/atrium) +/obj/effect/turf_decal/siding/brown/corner{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) "cxO" = ( /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) @@ -8696,12 +9100,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/white, /area/station/medical/virology) -"cxT" = ( -/obj/structure/table/wood, -/obj/item/plate, -/obj/effect/spawner/random/trash/bacteria, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "cyh" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -8722,20 +9120,6 @@ /obj/effect/spawner/random/structure/barricade, /turf/open/floor/plating, /area/station/commons/vacant_room/office) -"cyG" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/white, -/area/station/science/ordnance/office) "cyH" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -8778,43 +9162,28 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"cyV" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "cyX" = ( /obj/machinery/recharge_station, /obj/item/radio/intercom/directional/west, /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"cyZ" = ( -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/fore) "czi" = ( /obj/item/radio/intercom/directional/south, /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"czj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/medical/morgue) "czl" = ( /obj/effect/turf_decal/tile/brown/fourcorners, /obj/machinery/modular_computer/preset/cargochat/engineering, /turf/open/floor/iron/dark, /area/station/engineering/lobby) -"czo" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 - }, -/obj/structure/sign/poster/official/help_others/directional/south, -/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/fitness) "czq" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -8837,41 +9206,9 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"czz" = ( -/obj/machinery/computer/pod/old/mass_driver_controller/trash{ - pixel_x = -24; - pixel_y = -6 - }, -/obj/machinery/button/door/directional/west{ - id = "Disposal Exit"; - name = "Disposal Vent Control"; - pixel_y = 4; - req_access = list("maint_tunnels") - }, -/obj/structure/chair/stool/directional/south{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal) "czD" = ( /turf/closed/wall, /area/mine/laborcamp/security) -"czF" = ( -/obj/machinery/smartfridge/organ, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white, -/area/station/medical/surgery/aft) -"czO" = ( -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "czR" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/machinery/camera/directional/south{ @@ -8880,31 +9217,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) -"czS" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "czW" = ( /obj/structure/weightmachine, /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/textured, /area/station/security/prison/workout) -"czY" = ( -/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ - dir = 4 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "cAe" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/random/trash/grille_or_waste, @@ -8941,11 +9258,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"cAz" = ( -/obj/structure/table/wood, -/obj/item/book/manual/wiki/security_space_law, -/turf/open/floor/wood, -/area/station/security/courtroom) "cAB" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/airalarm/directional/west, @@ -8973,10 +9285,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/depsec/medical, -/obj/machinery/light_switch/directional/south{ - pixel_x = -21; - pixel_y = -25 - }, /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) @@ -9024,23 +9332,38 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"cBn" = ( -/obj/structure/sign/poster/random/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) -"cBD" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 +"cBk" = ( +/obj/machinery/door/firedoor{ + dir = 8 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ dir = 4 }, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"cBv" = ( +/obj/machinery/button/door/directional/east{ + id = "misclab"; + name = "Test Chamber Blast Doors"; + pixel_y = 6; + req_access = list("xenobiology") + }, +/obj/machinery/button/door/directional/east{ + id = "xenobiomain"; + name = "Xenobiology Containment Blast Door"; + pixel_y = -6; + req_access = list("xenobiology") + }, +/obj/structure/railing/corner/end/flip{ dir = 4 }, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "cBG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9048,10 +9371,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/prison/workout) -"cBJ" = ( -/obj/effect/spawner/random/trash/mess, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "cBP" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp{ @@ -9065,9 +9384,6 @@ /area/station/security/courtroom) "cBU" = ( /obj/structure/table, -/obj/structure/sign/plaques/kiddie{ - pixel_x = 32 - }, /obj/machinery/camera/motion/directional/east{ c_tag = "AI Upload East"; network = list("aiupload") @@ -9077,20 +9393,15 @@ dir = 4 }, /obj/machinery/light/directional/east, +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) "cCb" = ( /obj/structure/flora/tree/pine/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"cCe" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "cCt" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/rnd_all, @@ -9103,41 +9414,14 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/white/smooth_large, /area/station/science/genetics) -"cCD" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) -"cCF" = ( -/obj/machinery/hydroponics/constructable, -/obj/structure/window/reinforced/spawner/directional/west, +"cCG" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/seeds/carrot, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 +/obj/machinery/button/flasher{ + pixel_y = -30; + id = "GulagCell 2" }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/mine/laborcamp) -"cCR" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"cCT" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "cCW" = ( /obj/machinery/conveyor/inverted{ dir = 6; @@ -9172,6 +9456,23 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"cDv" = ( +/obj/item/stack/rods/fifty, +/obj/structure/rack, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil{ + amount = 5 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) "cDw" = ( /obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/door/airlock/glass{ @@ -9214,22 +9515,33 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) -"cEh" = ( -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/xeno_mining{ - pixel_x = 29 - }, -/obj/structure/rack, -/obj/item/pickaxe, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/turf/open/floor/plating, -/area/mine/mechbay) +"cEe" = ( +/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/wood/large, +/area/station/service/bar) "cEi" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/medical_all, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"cEl" = ( +/obj/effect/turf_decal/siding/brown{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt{ + pixel_x = -9 + }, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) "cEo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -9262,6 +9574,10 @@ /obj/structure/grille/broken, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"cEz" = ( +/obj/structure/sign/departments/holy/directional/north, +/turf/open/openspace, +/area/station/service/chapel) "cEG" = ( /obj/effect/spawner/random/trash/cigbutt, /obj/effect/spawner/random/trash/cigbutt, @@ -9296,26 +9612,20 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/smooth_edge, /area/station/security/lockers) -"cFc" = ( -/obj/structure/rack, -/obj/effect/spawner/random/contraband/permabrig_gear, -/obj/structure/sign/warning/cold_temp/directional/west, -/turf/open/floor/vault, -/area/station/security/prison/rec) +"cFr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/fore) "cFJ" = ( /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"cFX" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = -32 - }, -/obj/structure/chair/stool/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/light/small/directional/west, +"cFM" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/secure_area/directional/north, /turf/open/floor/iron/dark, -/area/station/command/gateway) +/area/station/ai_monitored/turret_protected/ai) "cFZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9359,22 +9669,13 @@ "cGA" = ( /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"cGI" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ +"cGB" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/siding/white{ dir = 8 }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/station/service/kitchen) +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "cGQ" = ( /obj/structure/sign/poster/official/random/directional/west, /obj/effect/turf_decal/tile/green/anticorner/contrasted{ @@ -9382,6 +9683,18 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) +"cGS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/disposal) +"cGZ" = ( +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/stairs/medium{ + dir = 4 + }, +/area/station/service/hydroponics) "cHb" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -9415,6 +9728,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"cHA" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate, +/turf/open/floor/iron/smooth, +/area/mine/living_quarters) "cHB" = ( /obj/machinery/vending/autodrobe, /turf/open/floor/plating, @@ -9451,9 +9769,20 @@ /obj/machinery/digital_clock/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"cIb" = ( +/obj/machinery/dna_scannernew, +/obj/structure/sign/warning/test_chamber/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "cIc" = ( /turf/closed/wall, /area/station/security/prison/work) +"cIf" = ( +/obj/structure/fence/corner{ + dir = 9 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "cIq" = ( /obj/machinery/computer/slot_machine{ balance = 15; @@ -9473,6 +9802,7 @@ /area/station/maintenance/fore) "cIP" = ( /obj/machinery/bookbinder, +/obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/wood, /area/station/service/library) "cIU" = ( @@ -9490,20 +9820,36 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/smooth, /area/station/security/brig/upper) -"cJa" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "cJb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/mine/laborcamp) +"cJd" = ( +/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 = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "riot"; + name = "Anti-Riot Shutters"; + req_access = list("security") + }, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "cJi" = ( /obj/structure/sign/warning, /turf/closed/wall/r_wall, /area/station/security/warden) +"cJk" = ( +/obj/machinery/chem_mass_spec, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "cJs" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -9539,6 +9885,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cJX" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "cKe" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9552,14 +9910,6 @@ dir = 6 }, /area/station/science/research) -"cKp" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/bar/atrium) "cKq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9572,6 +9922,16 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/processing) +"cKy" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/work) "cKA" = ( /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 2 @@ -9601,30 +9961,22 @@ /obj/structure/bookcase/random/reference, /turf/open/floor/carpet/blue, /area/station/medical/psychology) -"cKJ" = ( -/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/effect/turf_decal/siding/dark{ - dir = 9 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) -"cLf" = ( -/obj/structure/rack, -/obj/item/shovel, -/obj/item/clothing/mask/gas/plaguedoctor, -/obj/item/tank/internals/emergency_oxygen, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"cKL" = ( +/obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, +/obj/machinery/light/small/directional/north, +/turf/open/floor/grass, +/area/station/medical/virology) "cLo" = ( /obj/machinery/recharge_station, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"cLp" = ( +/obj/structure/table, +/obj/item/razor, +/obj/item/storage/backpack/duffelbag/sec/surgery, +/turf/open/floor/plating/icemoon, +/area/station/security/execution/education) "cLq" = ( /obj/effect/turf_decal/loading_area{ dir = 1 @@ -9692,9 +10044,24 @@ }, /turf/open/floor/wood, /area/station/service/library) +"cLK" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/science/research) "cLN" = ( /turf/open/floor/iron, /area/station/hallway/primary/aft) +"cLR" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/closet/crate/wooden/toy, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "cMd" = ( /obj/machinery/recharge_station, /obj/effect/turf_decal/tile/yellow{ @@ -9711,26 +10078,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"cMj" = ( -/obj/structure/stairs/west, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "cMk" = ( /turf/closed/wall/r_wall, /area/mine/production) -"cMv" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Escape" - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron/white/corner, -/area/station/hallway/secondary/exit/departure_lounge) +"cMr" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/starboard/fore) "cMA" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Control" @@ -9739,6 +10093,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/textured, /area/station/security/warden) +"cMG" = ( +/obj/structure/closet/crate/coffin, +/obj/machinery/light/small/red/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Chapel Coffin Storage" + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/service/chapel) "cMI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -9777,12 +10139,10 @@ /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"cNh" = ( -/obj/structure/fence/corner{ - dir = 10 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +"cNe" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "cNm" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -9811,25 +10171,15 @@ /turf/open/floor/engine, /area/station/science/xenobiology) "cNL" = ( -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ +/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/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, -/area/station/service/hydroponics) +/area/station/command/heads_quarters/cmo) "cNS" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -9847,15 +10197,6 @@ }, /turf/closed/wall, /area/station/tcommsat/computer) -"cOb" = ( -/obj/structure/rack, -/obj/item/storage/box/lights/mixed{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/storage/box/lights/tubes, -/turf/open/floor/iron/checker, -/area/station/commons/storage/emergency/port) "cOi" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ dir = 8 @@ -9867,6 +10208,18 @@ /obj/effect/turf_decal/tile/red/half, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) +"cOy" = ( +/obj/machinery/smartfridge, +/obj/machinery/door/window/right/directional/south{ + name = "Produce Access"; + req_access = list("hydroponics") + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "cOC" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -9881,17 +10234,6 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"cOQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/engineering{ - name = "Utilities Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "cPd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9915,11 +10257,49 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/dark/smooth_half, /area/station/service/chapel) +"cPt" = ( +/obj/structure/railing/corner, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) "cPE" = ( /turf/open/floor/iron/smooth_half{ dir = 1 }, /area/station/security/prison/garden) +"cPK" = ( +/obj/structure/table, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = 2; + pixel_y = -1 + }, +/obj/item/clothing/mask/breath{ + pixel_x = 2; + pixel_y = -1 + }, +/obj/item/clothing/mask/breath{ + pixel_x = 2; + pixel_y = -1 + }, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/iron, +/area/station/commons/storage/mining) "cPQ" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/decal/cleanable/dirt, @@ -9928,17 +10308,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/workout) -"cQa" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/turf/open/floor/iron/white/corner, -/area/station/hallway/secondary/entry) "cQc" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/rag, @@ -9979,13 +10348,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"cQp" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/machinery/rnd/production/techfab/department/service, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "cQs" = ( /obj/structure/table, /obj/item/computer_disk{ @@ -10029,17 +10391,6 @@ dir = 8 }, /area/station/ai_monitored/command/storage/eva) -"cQE" = ( -/obj/structure/fence, -/obj/structure/sign/nanotrasen{ - pixel_y = -32 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"cQH" = ( -/obj/structure/sign/warning/no_smoking/directional/south, -/turf/open/floor/circuit/telecomms/mainframe, -/area/station/tcommsat/server) "cQL" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -10048,19 +10399,34 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/atmos) "cQV" = ( -/obj/structure/barricade/wooden/snowed, -/obj/machinery/light/small/red/directional/north, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "minecraft_shutter"; - name = "Cart Shutters" - }, -/turf/open/floor/plating/snowed/coldroom, -/area/icemoon/underground/explored) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/dark_blue, +/obj/effect/turf_decal/trimline/dark_blue/filled/line, +/obj/effect/turf_decal/trimline/dark_blue/filled/mid_joiner, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/morgue) "cRg" = ( /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/station/security/warden) +"cRq" = ( +/obj/structure/table, +/obj/item/holosign_creator/atmos{ + pixel_x = -5 + }, +/obj/item/holosign_creator/atmos{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) +"cRu" = ( +/obj/structure/disposalpipe/junction, +/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) "cRy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -10068,6 +10434,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) +"cRC" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "cRE" = ( /obj/structure/rack, /obj/item/wirecutters, @@ -10096,20 +10466,14 @@ }, /area/station/command/heads_quarters/rd) "cRN" = ( -/obj/structure/chair/office/tactical{ - dir = 1 - }, -/obj/effect/landmark/start/coroner, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/machinery/hydroponics/soil, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "cRO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/closed/wall, /area/station/engineering/atmos) -"cRX" = ( -/obj/machinery/processor, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "cSe" = ( /obj/structure/table, /obj/item/flashlight{ @@ -10149,22 +10513,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"cSO" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"cSP" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Aft Primary Hallway South"; - pixel_y = -22 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "cTh" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -10203,17 +10551,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/large, /area/station/commons/vacant_room/office) -"cTJ" = ( -/obj/structure/cable, -/obj/machinery/light_switch/directional/south{ - pixel_x = -10 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 +"cTR" = ( +/turf/open/floor/iron/white/side{ + dir = 1 }, -/turf/open/floor/iron/white, -/area/station/medical/cryo) +/area/station/science/research) "cTV" = ( /obj/effect/turf_decal/box/white{ color = "#52B4E9" @@ -10230,6 +10572,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"cUB" = ( +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "cUF" = ( /obj/machinery/camera/directional/west{ c_tag = "Aft Primary Hallway North" @@ -10240,22 +10586,13 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"cUH" = ( -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/dorms) -"cVa" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Fitness Room North" - }, -/obj/structure/closet/masks, -/obj/effect/landmark/start/hangover/closet, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) +"cUS" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/machinery/hydroponics/constructable, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "cVk" = ( /obj/item/storage/box/evidence{ pixel_x = -10; @@ -10285,14 +10622,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"cVW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/south{ - pixel_x = 5 +"cVV" = ( +/obj/machinery/newscaster/directional/north, +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/wood/parquet, -/area/station/service/theater) +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/security/brig) "cWq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/green/half/contrasted{ @@ -10300,15 +10638,10 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) -"cWz" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/siding/white{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +"cWE" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/service/chapel/office) "cWG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10322,22 +10655,17 @@ c_tag = "Labor Camp Cellblock"; network = list("labor") }, +/obj/machinery/button/flasher{ + pixel_y = -30; + id = "GulagCell 1" + }, /turf/open/floor/iron, /area/mine/laborcamp) -"cWJ" = ( -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "cWX" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plating/snowed/icemoon, +/turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) "cXc" = ( /obj/effect/turf_decal/arrows, @@ -10357,24 +10685,33 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/port/fore) -"cXu" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/obj/structure/railing/corner, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "cXy" = ( /obj/structure/cable, /turf/open/floor/iron/smooth_half{ dir = 1 }, /area/station/security/prison/garden) +"cXG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"cXI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light/floor, +/turf/open/floor/wood, +/area/station/commons/lounge) +"cXR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "cXV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/dark_red/filled/line{ @@ -10402,21 +10739,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"cYe" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"cYf" = ( -/obj/machinery/shower/directional/west, -/obj/effect/turf_decal/stripes/red/line{ - dir = 6 - }, -/obj/structure/sign/warning/no_smoking/directional/east, -/turf/open/floor/iron/textured, -/area/station/engineering/atmos) "cYi" = ( /obj/effect/turf_decal/trimline/dark_red/line, /obj/effect/turf_decal/trimline/dark_red/line{ @@ -10431,6 +10753,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"cYj" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "cYo" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/stripes/line{ @@ -10465,13 +10796,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"cYI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "cYK" = ( /obj/machinery/netpod, /obj/machinery/light/small/directional/south, @@ -10507,6 +10831,10 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/cargo/miningdock) +"cZc" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "cZd" = ( /obj/machinery/computer/records/security{ dir = 1 @@ -10515,9 +10843,14 @@ /obj/machinery/button/door/directional/south{ id = "MedbayFoyer"; name = "Medbay Doors Control"; - normaldoorcontrol = 1 + normaldoorcontrol = 1; + pixel_x = 5; + pixel_y = -26 }, /obj/effect/turf_decal/tile/red/full, +/obj/machinery/light_switch/directional/south{ + pixel_x = -6 + }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) "cZe" = ( @@ -10525,6 +10858,16 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"cZf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) +"cZk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "cZm" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -10575,17 +10918,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"dad" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/official/the_owl/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "daf" = ( /obj/structure/table, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"daj" = ( -/obj/machinery/door/morgue{ - name = "Confession Booth (Chaplain)"; - req_access = list("chapel_office") - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "dak" = ( /obj/item/clothing/suit/apron/surgical, /obj/effect/mapping_helpers/broken_floor, @@ -10613,23 +10969,33 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"day" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "daE" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) +"daH" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "daM" = ( /obj/structure/closet/secure_closet/engineering_personal, /obj/machinery/airalarm/directional/north, /obj/item/clothing/suit/hooded/wintercoat/engineering, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) +"daO" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/machinery/button/door/directional/east{ + id = "drone_bay"; + name = "Shutter Control" + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "daR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10651,23 +11017,6 @@ /obj/item/cultivator, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"daX" = ( -/obj/structure/sign/warning/gas_mask, -/turf/closed/wall, -/area/station/service/chapel) -"daZ" = ( -/obj/structure/marker_beacon/jade, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"dbi" = ( -/obj/structure/table, -/obj/item/flashlight, -/obj/item/flashlight{ - pixel_y = 13 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "dbm" = ( /obj/machinery/door/airlock{ name = "Private Restroom" @@ -10675,6 +11024,11 @@ /obj/effect/mapping_helpers/airlock/access/all/command/captain, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain) +"dbn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/carpet/red, +/area/station/security/prison/work) "dbr" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, @@ -10696,6 +11050,9 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"dbB" = ( +/turf/closed/wall/ice, +/area/icemoon/underground/explored/graveyard) "dbH" = ( /turf/closed/wall/r_wall, /area/station/security/prison/mess) @@ -10703,6 +11060,25 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/security/prison/safe) +"dbO" = ( +/obj/machinery/door/airlock/wood{ + name = "Backstage" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + 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/mapping_helpers/airlock/access/all/service/theatre, +/obj/effect/landmark/navigate_destination, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/theater) "dcd" = ( /obj/structure/ladder, /turf/open/floor/plating, @@ -10724,12 +11100,6 @@ /obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) -"dcr" = ( -/obj/machinery/chem_master, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/science/xenobiology) "dcs" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -10787,6 +11157,12 @@ dir = 8 }, /area/station/hallway/secondary/entry) +"dcI" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "dcO" = ( /obj/machinery/camera/directional/east{ c_tag = "Engineering Emitter Room Starboard"; @@ -10794,15 +11170,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"dcQ" = ( -/obj/structure/table, -/obj/item/kitchen/rollingpin, -/obj/item/reagent_containers/condiment/enzyme, -/obj/item/reagent_containers/condiment/sugar, -/obj/structure/light_construct/directional/west, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "dcW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10828,16 +11195,45 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/brig/upper) +"ddd" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/directional/east, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white/corner{ + dir = 4 + }, +/area/station/hallway/secondary/entry) "ddh" = ( /obj/structure/chair/stool/directional/north, /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) +"ddi" = ( +/obj/structure/frame/computer{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) "ddk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/science/robotics/mechbay) +"ddm" = ( +/mob/living/basic/pet/penguin/emperor{ + name = "Club" + }, +/obj/item/toy/snowball{ + pixel_x = -9; + pixel_y = 17 + }, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "ddp" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10861,13 +11257,13 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"ddv" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 10 +"ddw" = ( +/obj/structure/railing{ + dir = 8 }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) +/obj/effect/turf_decal/loading_area/white, +/turf/open/floor/wood/large, +/area/station/service/bar/atrium) "ddz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10880,25 +11276,22 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"ddJ" = ( -/obj/structure/reagent_dispensers/plumbed{ - name = "service reservoir" - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/turf_decal/delivery/white{ - color = "#307db9" - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/textured, -/area/station/maintenance/starboard/fore) -"ddR" = ( -/obj/structure/disposalpipe/segment{ +"ddK" = ( +/obj/machinery/hydroponics/constructable, +/obj/effect/decal/cleanable/dirt, +/obj/item/seeds/onion, +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/obj/effect/turf_decal/siding/green{ 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/starboard/fore) +/turf/open/floor/iron/dark, +/area/mine/laborcamp) +"ddQ" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/kirbyplants/random, +/obj/structure/sign/calendar/directional/north, +/turf/open/floor/iron, +/area/station/commons/locker) "ddZ" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/green{ @@ -10911,6 +11304,12 @@ /obj/structure/cable/layer3, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"dei" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/vending/cigarette, +/obj/structure/sign/poster/official/nanotrasen_logo/directional/north, +/turf/open/floor/iron, +/area/station/commons/locker) "det" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11004,18 +11403,20 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) +"dfR" = ( +/obj/item/toy/snowball{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/toy/snowball, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "dga" = ( /obj/effect/turf_decal/loading_area{ dir = 4 }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) -"dge" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/railing/corner/end/flip, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "dgl" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -11023,6 +11424,48 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"dgp" = ( +/obj/machinery/modular_computer/preset/engineering, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/directional/north, +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) +"dgt" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/virology{ + autoclose = 0; + frequency = 1449; + id_tag = "virology_airlock_exterior"; + name = "Virology Exterior Airlock" + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/effect/turf_decal/tile/green/full, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) +"dgx" = ( +/obj/structure/rack, +/obj/effect/spawner/random/contraband/permabrig_gear, +/turf/open/floor/vault, +/area/station/security/prison/rec) +"dgA" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"dgR" = ( +/obj/machinery/smartfridge, +/turf/open/floor/iron/dark, +/area/station/service/kitchen) "dgZ" = ( /obj/machinery/airalarm/directional/south, /obj/structure/cable, @@ -11042,29 +11485,25 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark/textured, /area/station/security/execution/transfer) +"dhi" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/railing, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/security/brig) "dhj" = ( /obj/machinery/light_switch/directional/north, /turf/open/floor/wood, /area/station/command/meeting_room) -"dhk" = ( -/obj/structure/table/reinforced, -/obj/machinery/camera{ - c_tag = "Security Post - Medbay"; - dir = 9; - network = list("ss13","medbay") - }, -/obj/item/book/manual/wiki/security_space_law{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/machinery/newscaster/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/dark/smooth_large, -/area/station/security/checkpoint/medical) "dhq" = ( /turf/closed/mineral/random/labormineral/ice, /area/icemoon/surface/outdoors/labor_camp) +"dhv" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "dhH" = ( /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/weather/snow/corner{ @@ -11084,6 +11523,11 @@ }, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) +"dhR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bookcase/random, +/turf/open/floor/iron/grimy, +/area/station/maintenance/aft/greater) "dhS" = ( /obj/machinery/door/airlock{ name = "Permabrig Showers" @@ -11101,20 +11545,42 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/processing) -"dhY" = ( -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 +"dhV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair{ + dir = 4 }, +/obj/structure/sign/departments/exodrone/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) +"dhY" = ( /obj/machinery/computer/security/mining{ dir = 1 }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/cargo/miningdock) -"dig" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"dia" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) +"dik" = ( +/obj/machinery/cell_charger{ + pixel_y = 5 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = 6 + }, +/obj/structure/table/glass, +/turf/open/floor/iron/white/side{ + dir = 9 + }, +/area/station/science/lab) "dip" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11160,16 +11626,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/textured, /area/mine/mechbay) -"diK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "diL" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -11189,28 +11645,12 @@ dir = 1 }, /area/mine/living_quarters) -"djl" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) "djr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) -"djB" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/camera{ - c_tag = "Medbay Chemistry Lab - South"; - dir = 5; - network = list("ss13","medbay") - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "djC" = ( /obj/effect/decal/remains/human, /obj/item/reagent_containers/cup/glass/bottle/wine{ @@ -11234,6 +11674,13 @@ /obj/effect/mapping_helpers/airlock/access/all/service/crematorium, /turf/open/floor/iron/dark, /area/station/service/chapel/office) +"djG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/ordnance/office) "djH" = ( /obj/item/stack/sheet/animalhide/lizard{ desc = "Landssslidessss, the landssslidesss..."; @@ -11260,6 +11707,17 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"dka" = ( +/obj/machinery/firealarm/directional/west{ + pixel_y = -4 + }, +/obj/machinery/light_switch/directional/west{ + pixel_y = 5 + }, +/obj/machinery/photocopier, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "dkb" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -11286,15 +11744,15 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/science/robotics/lab) -"dkB" = ( -/obj/structure/rack, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ +"dku" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/chair_flipped{ dir = 4 }, -/obj/effect/spawner/random/armory/shotgun, -/turf/open/floor/iron/dark/textured, -/area/station/ai_monitored/security/armory) +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "dkK" = ( /obj/structure/railing/corner, /obj/effect/turf_decal/stripes/line, @@ -11319,19 +11777,14 @@ dir = 8 }, /area/station/security/brig/entrance) -"dla" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Service External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +"dkZ" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "dlt" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 8 @@ -11339,16 +11792,13 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"dlu" = ( -/turf/closed/wall/mineral/wood/nonmetal, -/area/icemoon/underground/explored) -"dlB" = ( -/obj/structure/table/wood, -/obj/item/storage/photo_album/chapel, -/obj/structure/noticeboard/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/grimy, -/area/station/service/chapel/office) +"dlH" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/smartfridge/drying, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "dlK" = ( /obj/machinery/computer/security{ dir = 8 @@ -11366,16 +11816,14 @@ }, /turf/open/floor/plating, /area/station/construction) -"dmj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/machinery/button/door/directional/east{ - id = "xenobio11"; - name = "Xenobio Pen 11 Blast DOors"; - req_access = list("xenobiology") - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +"dlS" = ( +/obj/item/crowbar/red, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/maintenance, +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "dmk" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing{ @@ -11400,6 +11848,12 @@ /obj/structure/ladder, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"dmw" = ( +/obj/structure/fence/end{ + dir = 2 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "dmG" = ( /obj/structure/table/wood, /obj/item/camera, @@ -11408,6 +11862,7 @@ "dmI" = ( /obj/machinery/chem_master, /obj/effect/turf_decal/tile/yellow/full, +/obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white/smooth_large, /area/station/medical/pharmacy) "dmL" = ( @@ -11415,24 +11870,24 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/department/electrical) -"dmR" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Engineering External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "Engineering-External" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) "dmU" = ( /obj/structure/cable, /obj/structure/table, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"dmV" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio10"; + name = "Xenobio Pen 10 Blast Door" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/xenobiology) "dng" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -11448,9 +11903,47 @@ /obj/structure/dresser, /turf/open/floor/carpet, /area/station/commons/dorms) +"dnn" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "dnq" = ( /turf/open/floor/iron, /area/station/hallway/primary/central) +"dnz" = ( +/obj/effect/turf_decal/siding/wideplating_new/light{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/start/prisoner, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/work) +"dnE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) +"dnI" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "dnL" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -11471,6 +11964,9 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/lockers) +"dom" = ( +/turf/closed/wall/ice, +/area/station/service/kitchen/coldroom) "don" = ( /obj/machinery/portable_atmospherics/canister, /obj/structure/disposalpipe/segment, @@ -11479,6 +11975,12 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/engineering/atmos/storage) +"dop" = ( +/obj/structure/fence/door/opened{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "doq" = ( /obj/machinery/flasher/directional/north{ id = "transferflash" @@ -11496,6 +11998,15 @@ }, /turf/closed/wall, /area/station/maintenance/starboard/upper) +"dow" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/fore) "doG" = ( /obj/structure/rack, /obj/machinery/light/small/directional/north, @@ -11509,14 +12020,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"doK" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio8"; - name = "Xenobio Pen 8 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "doM" = ( /obj/structure/table, /obj/item/paper{ @@ -11537,23 +12040,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"dpa" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/white{ - dir = 5 - }, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = -7; - pixel_y = 6 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +"dpb" = ( +/obj/structure/table/wood, +/obj/item/food/pie/cream, +/obj/item/bikehorn, +/obj/machinery/status_display/evac/directional/west, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "dpc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -11567,23 +12061,21 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/command/storage/eva) -"dpj" = ( -/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/hallway/secondary/service) +"dpl" = ( +/obj/machinery/light/directional/south, +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/bluespace_vendor/directional/south, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) "dpq" = ( /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "dpw" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/food_or_drink/snack, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/dark, +/area/mine/storage) "dpx" = ( /obj/effect/spawner/random/maintenance, /obj/structure/disposalpipe/segment, @@ -11623,43 +12115,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"dpZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/warning/docking/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) -"dqg" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/secure_area/directional/south, -/obj/structure/sign/warning/cold_temp, -/turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat_interior) -"dqs" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"dqt" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder{ - pixel_x = -1; - pixel_y = 8 - }, -/obj/item/reagent_containers/syringe{ - pixel_x = -5; - pixel_y = -8 - }, -/obj/item/reagent_containers/cup/beaker{ - pixel_y = -6; - pixel_x = 9 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "dqw" = ( /obj/machinery/holopad, /turf/open/floor/iron, @@ -11668,12 +12123,21 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"dqA" = ( -/obj/structure/fence/corner{ - dir = 5 +"dqI" = ( +/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/dark/half/contrasted{ + dir = 1 }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "rnd2"; + name = "Research Lab Shutters" + }, +/turf/open/floor/plating, +/area/station/science/ordnance/office) "dqL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -11696,43 +12160,52 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"dqV" = ( -/obj/effect/decal/cleanable/dirt, +"dqW" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) +"drb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/modular_computer/preset/civilian{ +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ dir = 8 }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ +/obj/effect/turf_decal/stripes/white/line{ dir = 4 }, -/obj/structure/sign/poster/official/work_for_a_future/directional/east, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) -"dqW" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) -"dqX" = ( -/obj/machinery/door/firedoor, -/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{ dir = 4 }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) +"drd" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/structure/table, +/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/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/lobby) +/obj/item/mod/module/plasma_stabilizer, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/mod/module/signlang_radio, +/obj/item/mod/module/thermal_regulator, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "drh" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /turf/open/floor/glass/reinforced, /area/station/engineering/atmos/pumproom) -"drm" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/starboard/upper) "drr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, @@ -11748,9 +12221,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) -"drw" = ( -/turf/closed/wall/ice, -/area/station/service/kitchen/coldroom) "dry" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11778,11 +12248,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/commons/storage/mining) -"drG" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/bin/tagger, -/turf/open/floor/iron, -/area/station/cargo/office) "drH" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -11794,6 +12259,18 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"drK" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos{ + dir = 8 + }, +/obj/machinery/airlock_sensor/incinerator_atmos{ + pixel_y = 32 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "drP" = ( /obj/structure/toilet{ dir = 8 @@ -11814,12 +12291,6 @@ /obj/structure/flora/grass/both, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"dsa" = ( -/obj/structure/stairs/west, -/turf/open/floor/iron/stairs/left{ - dir = 4 - }, -/area/station/science/cytology) "dsf" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -11830,17 +12301,11 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, +/obj/machinery/status_display/supply{ + pixel_x = -32 + }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) -"dsg" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 10 - }, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "dsj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/south, @@ -11875,53 +12340,25 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"dsT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Medbay Chemistry Lab - East"; - dir = 6; - network = list("ss13","medbay") - }, -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder{ - pixel_x = -1; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/beaker/large{ - pixel_x = 3; - pixel_y = -8 - }, -/obj/item/reagent_containers/cup/beaker/large{ - pixel_x = -3; - pixel_y = -8 - }, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = -6 - }, -/obj/item/reagent_containers/dropper{ - pixel_y = -7 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/station/medical/chemistry) "dsU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /turf/open/floor/carpet, /area/station/command/heads_quarters/qm) +"dsZ" = ( +/obj/structure/noticeboard/directional/west, +/turf/open/floor/engine/cult, +/area/station/service/library) "dtb" = ( /obj/structure/bookcase/random/reference, /turf/open/floor/wood, /area/station/service/library) "dtc" = ( -/obj/structure/table/wood/poker, -/obj/item/storage/dice, -/turf/open/floor/wood/large, -/area/station/commons/lounge) +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/station/engineering/atmos) "dth" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -11932,16 +12369,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/iron, /area/station/engineering/engine_smes) -"dtq" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/telescreen/prison/directional/north, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/fax{ - fax_name = "Law Office"; - name = "Law Office Fax Machine" - }, -/turf/open/floor/wood, -/area/station/service/lawoffice) "dtr" = ( /obj/machinery/computer/records/medical, /obj/effect/turf_decal/tile/green/anticorner/contrasted, @@ -11964,6 +12391,11 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"dtR" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron/dark/side, +/area/mine/eva/lower) "dtU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11979,19 +12411,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) -"duI" = ( -/obj/structure/rack, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison) "duS" = ( /obj/machinery/door/airlock{ name = "Labor Camp Library" @@ -12001,6 +12420,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) +"duT" = ( +/obj/item/chair/stool/bar{ + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"duY" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "duZ" = ( /obj/machinery/door/airlock/engineering{ name = "Utilities Closet" @@ -12033,6 +12464,7 @@ "dvi" = ( /obj/structure/flora/grass/both/style_random, /obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "dvl" = ( @@ -12056,6 +12488,21 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"dvK" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/clothing/mask/breath/medical, +/obj/item/clothing/mask/breath/medical, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/machinery/camera/directional/east{ + c_tag = "Virology Module South"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "dvO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12064,29 +12511,17 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) -"dvS" = ( -/turf/open/floor/iron/recharge_floor, -/area/station/maintenance/department/electrical) "dvY" = ( /obj/structure/flora/tree/dead/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) "dvZ" = ( -/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/any/service/maintenance, -/obj/machinery/door/airlock/maintenance{ - name = "Bar Maintenance" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/unres{ +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/obj/effect/turf_decal/weather/snow/corner{ dir = 4 }, -/turf/open/floor/plating, -/area/station/commons/lounge) +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "dwb" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -12094,6 +12529,16 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"dwj" = ( +/obj/machinery/atmospherics/components/binary/pump/off, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/obj/machinery/airlock_sensor/incinerator_ordmix{ + pixel_y = 32 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "dwo" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -12102,12 +12547,12 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/openspace/icemoon/keep_below, /area/station/maintenance/port/lesser) -"dwq" = ( -/obj/structure/grille/broken, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/structure/girder, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"dws" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) "dww" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -12130,19 +12575,6 @@ /obj/effect/spawner/random/clothing/kittyears_or_rabbitears, /turf/open/floor/plastic, /area/station/commons/dorms/laundry) -"dwS" = ( -/obj/machinery/status_display/door_timer{ - id = "Cell 3"; - name = "Cell 3"; - pixel_x = -32 - }, -/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 - }, -/turf/open/floor/iron/textured, -/area/station/security/brig) "dwY" = ( /obj/machinery/light_switch/directional/west, /obj/structure/closet/secure_closet/quartermaster, @@ -12151,6 +12583,10 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"dwZ" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) "dxg" = ( /obj/structure/table, /obj/item/stack/sheet/plasteel{ @@ -12189,6 +12625,15 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"dxq" = ( +/obj/structure/closet/secure_closet/chief_medical, +/obj/item/screwdriver, +/obj/machinery/camera/directional/north{ + c_tag = "Chief Medical Officer Bedroom"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "dxs" = ( /obj/structure/closet/secure_closet/personal{ anchored = 1 @@ -12217,9 +12662,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/lesser) +"dxI" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/sign/poster/official/safety_internals/directional/north, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) "dxK" = ( /turf/closed/wall/r_wall, /area/station/command/meeting_room) +"dxO" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/iron/white, +/area/station/medical/cryo) "dxU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12235,9 +12692,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"dym" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt/dust, +"dyg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/weather/snow, +/turf/open/floor/plating/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"dyA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/structure/chair/stool/directional/west, /turf/open/floor/plating, /area/station/maintenance/fore) "dyE" = ( @@ -12256,25 +12720,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"dyW" = ( -/obj/structure/sign/poster/official/random/directional/south, -/obj/structure/table/optable{ - name = "Robotics Operating Table" - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/science/robotics/lab) -"dzg" = ( -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/poddoor/preopen{ - id = "Biohazard"; - name = "Biohazard Containment Door" - }, -/obj/effect/turf_decal/bot, -/obj/structure/noticeboard/directional/north, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/station/science/research) "dzi" = ( /obj/machinery/status_display/ai/directional/south, /obj/effect/turf_decal/tile/green{ @@ -12286,14 +12731,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"dzr" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "graveyard" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, -/turf/open/floor/plating, -/area/station/medical/morgue) "dzt" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -12311,15 +12748,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"dzD" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "dzJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -12333,6 +12761,12 @@ /obj/structure/closet/firecloset, /turf/open/floor/iron/dark, /area/mine/eva/lower) +"dzZ" = ( +/obj/structure/fence/cut/medium{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "dAc" = ( /obj/item/radio/intercom/directional/north, /obj/item/storage/belt/utility{ @@ -12351,36 +12785,27 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"dAk" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 +"dAh" = ( +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/poddoor/preopen{ + id = "Biohazard"; + name = "Biohazard Containment Door" }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/science/research) +"dAl" = ( +/obj/machinery/smartfridge/extract/preloaded, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron, -/area/station/hallway/primary/aft) +/area/station/science/xenobiology) "dAm" = ( /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/engineering/lobby) -"dAq" = ( -/obj/machinery/conveyor{ - id = "mining_internal" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Mining Ore Smeltery"; - dir = 6 - }, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron, -/area/mine/production) "dAx" = ( /obj/machinery/hydroponics/soil{ pixel_y = 8 @@ -12411,9 +12836,34 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"dAQ" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/modular_computer/preset/civilian, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/light_switch/directional/north{ + pixel_x = -6 + }, +/obj/machinery/button/door/directional/north{ + id = "stationawaygate"; + name = "Gateway Access Shutter Control"; + req_access = list("gateway"); + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/station/command/gateway) "dAZ" = ( /turf/closed/wall/r_wall, /area/station/security/prison/visit) +"dBb" = ( +/obj/structure/chair/sofa/right/brown, +/obj/item/toy/plush/moth{ + name = "Dr. Moff" + }, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/carpet/blue, +/area/station/medical/psychology) "dBh" = ( /obj/machinery/telecomms/server/presets/medical, /turf/open/floor/iron/dark/telecomms, @@ -12427,36 +12877,11 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/fore/lesser) -"dBw" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ - dir = 1 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/mine/laborcamp/security) -"dBA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/starboard) "dBB" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/bot_white, /obj/machinery/firealarm/directional/south, +/obj/structure/sign/poster/official/help_others/directional/west, /turf/open/floor/iron/checker, /area/station/commons/storage/emergency/port) "dBJ" = ( @@ -12476,6 +12901,15 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage/gas) +"dBN" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/duct, +/obj/machinery/light/small/directional/north, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron, +/area/station/service/bar) "dBQ" = ( /obj/machinery/camera/directional/north{ c_tag = "MiniSat AI Chamber South"; @@ -12483,6 +12917,10 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"dBX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "dBY" = ( /obj/effect/turf_decal/stripes/end{ dir = 1 @@ -12495,15 +12933,11 @@ "dBZ" = ( /turf/open/floor/iron, /area/station/cargo/sorting) -"dCs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue/full, -/turf/open/floor/iron/large, -/area/station/medical/medbay/lobby) +"dCq" = ( +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "dCy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -12513,25 +12947,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness) -"dCV" = ( -/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/wood/parquet, -/area/station/service/bar/backroom) "dDm" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1 }, /turf/open/floor/engine, /area/station/science/explab) -"dDo" = ( -/obj/item/trash/pistachios, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "dDp" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -12539,14 +12960,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"dDq" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "dDt" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/red{ @@ -12563,6 +12976,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"dDz" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance/two, +/obj/item/sign, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "dDC" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -12573,22 +12992,20 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"dDR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "dDV" = ( /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"dEc" = ( -/obj/structure/table/wood, -/obj/item/soap/nanotrasen, -/obj/item/clothing/head/costume/sombrero/green, -/obj/machinery/camera{ - c_tag = "Service - Theater"; - dir = 9 - }, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron/grimy, -/area/station/commons/lounge) "dEf" = ( /obj/effect/turf_decal/trimline/blue/corner{ dir = 1 @@ -12623,19 +13040,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/security/prison/rec) -"dEC" = ( -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "rnd2"; - name = "Research Lab Shutters" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/status_display/evac/directional/south, -/turf/open/floor/iron, -/area/station/science/lab) "dEI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12646,6 +13050,16 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/command/bridge) +"dEL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ + dir = 8; + name = "Air Out" + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "dEQ" = ( /obj/machinery/camera/directional/east{ c_tag = "Public Mining Ladder" @@ -12676,6 +13090,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"dFi" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "dFj" = ( /turf/open/floor/iron/white/side{ dir = 9 @@ -12714,13 +13141,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"dFD" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "dFF" = ( /obj/structure/chair{ dir = 8 @@ -12734,8 +13154,24 @@ /area/station/maintenance/starboard/aft) "dFO" = ( /obj/machinery/light/directional/north, +/obj/structure/sign/departments/evac/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"dFR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/mine/laborcamp) "dFW" = ( /turf/open/floor/iron/white/side, /area/station/science/research) @@ -12757,6 +13193,17 @@ /obj/effect/decal/cleanable/food/egg_smudge, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"dGq" = ( +/obj/machinery/computer/records/medical, +/obj/structure/cable, +/obj/machinery/button/door/directional/north{ + id = "medsecprivacy"; + name = "Privacy Shutters Control"; + req_access = list("security") + }, +/obj/effect/turf_decal/tile/red/full, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/medical) "dGK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12768,6 +13215,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/commons/fitness) +"dGS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/south, +/obj/structure/rack, +/obj/machinery/camera/directional/south{ + c_tag = "Chapel Electrical Maintenace Lower" + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/department/chapel) "dGU" = ( /obj/machinery/door/airlock/maintenance{ name = "Captain's Office Maintenance" @@ -12779,19 +13235,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/captain, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"dGZ" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Chapel Maintenance External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) "dHa" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -12820,6 +13263,32 @@ initial_gas_mix = "o2=22;n2=82;TEMP=293.15" }, /area/station/security/prison/rec) +"dHf" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Service - Botany Upper Entrance" + }, +/obj/structure/table/glass, +/obj/machinery/fax/auto_name, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"dHg" = ( +/obj/machinery/door/airlock{ + name = "Unit B" + }, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) +"dHi" = ( +/obj/structure/chair/stool/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/commons/lounge) "dHk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12840,16 +13309,17 @@ }, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) +"dHF" = ( +/obj/structure/railing, +/obj/structure/marker_beacon/cerulean, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "dHJ" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"dHM" = ( -/obj/machinery/portable_atmospherics/pipe_scrubber, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/office) "dIl" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -12870,33 +13340,24 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/mining) -"dIA" = ( -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/white/side{ - dir = 9 - }, -/area/station/science/xenobiology) -"dIS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"dIG" = ( +/obj/structure/table/wood, +/obj/machinery/newscaster/directional/south, +/obj/item/book/bible{ + pixel_y = 8 }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio3"; - name = "Xenobio Pen 3 Blast Door" +/obj/item/storage/fancy/candle_box{ + pixel_x = 4 }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) -"dIZ" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ +/obj/item/storage/fancy/candle_box, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"dIL" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, -/turf/open/floor/iron/dark, -/area/station/medical/virology) +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "dJx" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -12913,18 +13374,6 @@ /obj/machinery/air_sensor/ordnance_freezer_chamber, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) -"dJF" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "dJY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12951,16 +13400,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/cargo/sorting) -"dKf" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Starboard Primary Hallway Center West" - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "dKh" = ( /obj/machinery/light_switch/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -12969,22 +13408,13 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/tcommsat/computer) -"dKr" = ( -/obj/structure/table, -/obj/machinery/computer/security/telescreen/isolation/directional/south, -/obj/item/clothing/suit/jacket/straight_jacket, -/obj/item/clothing/suit/jacket/straight_jacket{ - pixel_x = 6 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Security - Permabrig Prep"; - network = list("ss13","prison"); - view_range = 5 - }, -/obj/structure/cable, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/smooth, -/area/station/security/execution/transfer) +"dKk" = ( +/obj/machinery/light/directional/west, +/obj/structure/displaycase, +/obj/effect/turf_decal/tile/dark/fourcorners, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/mine/living_quarters) "dKy" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -13028,15 +13458,6 @@ dir = 1 }, /area/station/security/processing) -"dKS" = ( -/obj/structure/sign/warning/electric_shock/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/red/line, -/obj/effect/turf_decal/trimline/red/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/security/range) "dKW" = ( /obj/structure/sign/directions/security{ dir = 1; @@ -13074,22 +13495,75 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"dLH" = ( -/obj/structure/fence{ - dir = 1 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) +"dLA" = ( +/obj/structure/rack, +/obj/item/pickaxe, +/obj/item/toy/figure/chef, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) +"dLL" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/maint) "dLN" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/mine/laborcamp) +"dLQ" = ( +/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/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "dLR" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/iron, /area/mine/laborcamp) +"dMi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) +"dMl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"dMn" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) +"dMo" = ( +/obj/structure/fence/corner{ + dir = 1 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "dMp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -13103,18 +13577,6 @@ /obj/item/clothing/under/color/rainbow, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"dMB" = ( -/obj/vehicle/ridden/wheelchair{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/end{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/item/radio/intercom/directional/west, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/large, -/area/station/medical/medbay/aft) "dMH" = ( /obj/machinery/light/directional/north, /obj/machinery/status_display/evac/directional/north, @@ -13125,11 +13587,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"dMO" = ( -/obj/structure/closet/secure_closet/freezer/kitchen/maintenance, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "dMX" = ( /obj/structure/chair{ dir = 1; @@ -13137,18 +13594,6 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"dNk" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"dNl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plastic, -/area/station/commons/dorms/laundry) "dNt" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -13172,12 +13617,6 @@ "dNA" = ( /turf/open/floor/iron/smooth, /area/mine/mechbay) -"dNB" = ( -/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/grimy, -/area/station/service/chapel/office) "dNC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/binary/pump{ @@ -13206,6 +13645,16 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"dOp" = ( +/obj/structure/table/wood, +/obj/item/instrument/saxophone, +/obj/item/instrument/piano_synth, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Theater" + }, +/turf/open/floor/iron/grimy, +/area/station/commons/lounge) "dOq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13219,6 +13668,19 @@ /obj/structure/closet/wardrobe/mixed, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"dOF" = ( +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "Bridge Blast Door"; + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) "dOH" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/plating, @@ -13253,10 +13715,16 @@ }, /turf/open/floor/iron/freezer, /area/station/science/xenobiology) -"dPP" = ( -/obj/structure/closet/toolcloset, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) +"dPH" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/camera/directional/north{ + c_tag = "Mining Mech Bay"; + network = list("ss13", "mine") + }, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron/smooth, +/area/mine/mechbay) "dPT" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres{ @@ -13265,16 +13733,6 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"dPX" = ( -/obj/structure/sign/warning/docking/directional/east, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 10 - }, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 4 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "dQd" = ( /obj/machinery/door/airlock/maintenance{ name = "Mining Station Maintenance" @@ -13285,6 +13743,11 @@ dir = 1 }, /area/station/maintenance/department/cargo) +"dQl" = ( +/obj/structure/closet/emcloset, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "dQo" = ( /obj/machinery/button/door/directional/east{ id = "pharmacy_shutters2"; @@ -13296,13 +13759,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"dQp" = ( -/obj/structure/table/wood, -/obj/item/food/pie/cream, -/obj/item/bikehorn, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/iron/grimy, -/area/station/service/theater) +"dQy" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/closet/secure_closet/hydroponics, +/turf/open/floor/iron, +/area/station/service/hydroponics) "dQI" = ( /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -13334,29 +13798,6 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"dRe" = ( -/obj/machinery/camera{ - c_tag = "Medbay Break Room"; - dir = 1; - network = list("ss13","medbay") - }, -/obj/structure/table/glass, -/obj/effect/spawner/random/entertainment/deck{ - pixel_x = -6 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = 7; - pixel_y = 9 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/break_room) "dRk" = ( /obj/effect/turf_decal/bot, /obj/structure/ore_box, @@ -13372,6 +13813,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/white, /area/station/medical/virology) +"dRB" = ( +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/hydroponics) "dRD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/window/reinforced/spawner/directional/south, @@ -13379,6 +13836,18 @@ dir = 1 }, /area/station/command/gateway) +"dRX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Door" + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) "dSj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -13393,14 +13862,6 @@ }, /turf/open/floor/iron/white, /area/station/security/prison/safe) -"dSs" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/stool/bar/directional/east, -/obj/structure/disposalpipe/segment, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "dSJ" = ( /obj/machinery/flasher/directional/north{ id = "visitorflash" @@ -13425,14 +13886,14 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"dSY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"dTa" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/bar) "dTm" = ( /obj/effect/decal/cleanable/blood/splatter, /obj/effect/mob_spawn/corpse/human/skeleton, @@ -13453,13 +13914,18 @@ "dTs" = ( /turf/open/floor/iron/smooth, /area/mine/eva) -"dTx" = ( -/obj/machinery/status_display/ai/directional/south, -/obj/structure/chair/sofa/right/brown{ +"dTC" = ( +/obj/machinery/door/poddoor/preopen{ + id = "xenobio8"; + name = "Xenobio Pen 8 Blast Door" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/xenobiology) "dTD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -13478,6 +13944,14 @@ }, /turf/open/floor/iron, /area/mine/production) +"dTI" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/fake_stairs/wood/directional/north, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "dTW" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -13495,6 +13969,24 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) +"dUh" = ( +/obj/machinery/light/small/directional/north, +/obj/item/kirbyplants/random, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"dUm" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "dUn" = ( /obj/machinery/shieldgen, /turf/open/floor/plating, @@ -13545,6 +14037,11 @@ "dUO" = ( /turf/closed/wall, /area/station/security/brig) +"dUR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/medical/virology) "dUW" = ( /obj/machinery/light_switch/directional/south, /turf/open/floor/wood, @@ -13568,35 +14065,13 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/aft) "dVj" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 - }, -/obj/machinery/hydroponics/constructable, +/obj/effect/spawner/structure/window, /turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"dVq" = ( -/obj/machinery/space_heater, -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/area/station/medical/morgue) "dVt" = ( /obj/structure/chair/stool/directional/west, /turf/open/floor/iron/checker, /area/station/science/lab) -"dVw" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/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, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/aft) "dVF" = ( /obj/structure/sign/warning/secure_area/directional/north, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -13609,16 +14084,24 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/engineering/lobby) -"dVX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"dVN" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) +"dVS" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/white/line{ dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/directional/east, -/turf/open/floor/wood/large, -/area/station/commons/vacant_room/office) +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/cryo) "dWf" = ( /obj/item/trash/pistachios, /turf/open/floor/plating, @@ -13640,11 +14123,25 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron/dark/textured, /area/station/security/prison) +"dWI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/item/kirbyplants/organic/plant2, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "dWK" = ( /obj/machinery/hydroponics/soil, /obj/item/shovel/spade, /turf/open/floor/grass, /area/station/security/prison/garden) +"dWL" = ( +/obj/structure/railing, +/obj/machinery/vending/cytopro, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "dWP" = ( /obj/structure/table/wood, /obj/item/pen/red{ @@ -13660,13 +14157,6 @@ }, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"dWX" = ( -/obj/machinery/modular_computer/preset/engineering, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "dWZ" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -13676,6 +14166,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"dXh" = ( +/obj/item/stamp{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stamp/denied{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/structure/table, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "dXi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -13683,6 +14188,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"dXk" = ( +/obj/structure/railing/wooden_fence{ + dir = 10 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "dXn" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -13691,12 +14202,28 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"dXp" = ( +/turf/open/floor/iron/dark/smooth_half, +/area/station/service/hydroponics) +"dXr" = ( +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "dXv" = ( /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/directional/north, /turf/open/floor/iron/dark, /area/station/command/gateway) +"dXx" = ( +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "dXF" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -13706,6 +14233,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"dXI" = ( +/obj/machinery/chem_master, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) "dXP" = ( /obj/effect/turf_decal/trimline/yellow/filled/shrink_cw{ dir = 4 @@ -13713,13 +14246,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"dXR" = ( -/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/wood, -/area/station/hallway/secondary/service) "dXU" = ( /obj/effect/decal/cleanable/generic, /obj/machinery/light/small/directional/south, @@ -13731,9 +14257,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"dYq" = ( -/turf/open/floor/plating, -/area/station/commons/dorms/laundry) "dYr" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -13750,11 +14273,24 @@ }, /turf/open/floor/iron, /area/mine/production) +"dYA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/directional/east, +/obj/structure/sign/departments/security/directional/east, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/security/brig/entrance) "dYC" = ( /obj/structure/closet/firecloset, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"dYH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "dYI" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 @@ -13775,13 +14311,21 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"dYX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 +"dYS" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"dYU" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "dZc" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/checker, @@ -13798,36 +14342,11 @@ dir = 8 }, /area/mine/eva) -"dZC" = ( -/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/plating, -/area/station/maintenance/starboard/lesser) "dZJ" = ( /obj/machinery/seed_extractor, /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"dZL" = ( -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/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, -/area/station/service/hydroponics) "dZN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -13909,33 +14428,49 @@ /obj/structure/cable, /turf/open/floor/carpet/red, /area/station/security/prison/work) -"eav" = ( -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Hydroponics" +"eat" = ( +/obj/machinery/washing_machine, +/obj/effect/turf_decal/siding/blue{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/hydroponics) -"eaw" = ( -/obj/effect/spawner/random/contraband/prison, -/obj/structure/closet/crate, -/obj/item/stack/license_plates/empty/fifty, -/obj/item/stack/license_plates/empty/fifty, -/obj/item/stack/license_plates/empty/fifty, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/dark/smooth_half, -/area/station/security/prison/work) -"eaM" = ( -/turf/open/misc/asteroid/snow/coldroom, -/area/station/service/kitchen/coldroom) +/obj/structure/sign/poster/official/no_erp/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms/laundry) +"eay" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/structure/cable, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) +"eaE" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/lobby) +"eaG" = ( +/obj/structure/sign/departments/vault/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/surface/outdoors/nospawn) +"eaQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"eaT" = ( +/obj/machinery/bluespace_vendor/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "ebb" = ( /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, @@ -13959,13 +14494,10 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) -"ebK" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/rack, -/obj/item/crowbar/large/old, -/obj/effect/turf_decal/tile/dark/fourcorners, +"ebH" = ( +/obj/structure/sign/departments/medbay/alt/directional/east, /turf/open/floor/iron, -/area/mine/living_quarters) +/area/station/hallway/primary/central) "ebL" = ( /obj/effect/turf_decal/bot_white/right, /obj/structure/closet/crate/goldcrate, @@ -13973,12 +14505,27 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"ebX" = ( -/obj/structure/fence/corner{ +"ebO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/landmark/event_spawn, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ dir = 1 }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) +"ebW" = ( +/obj/structure/fence/cut/medium{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "ecs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14014,6 +14561,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"ecW" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"edc" = ( +/obj/item/flashlight/lantern/on, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "edd" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -14026,66 +14582,64 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"ede" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access"; + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "edn" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/ore_silo, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"edp" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; - pixel_y = 5 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/science/xenobiology) "edq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"edt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 5 +"edw" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 }, -/obj/structure/rack, -/obj/item/tank/internals/oxygen, -/obj/item/extinguisher, -/obj/item/clothing/suit/utility/fire/firefighter, -/obj/item/clothing/head/utility/hardhat/red, -/obj/item/clothing/mask/gas, -/obj/item/clothing/glasses/meson, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"edM" = ( -/obj/item/toy/snowball{ - pixel_x = -6; - pixel_y = -4 +/obj/effect/turf_decal/trimline/dark_green/arrow_ccw, +/obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer1{ + dir = 4 }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "edN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"edO" = ( +"edR" = ( +/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, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/wood/large, -/area/station/service/bar) -"edT" = ( -/obj/structure/grille/broken, +/obj/effect/spawner/random/structure/steam_vent, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/station/maintenance/aft/greater) +/area/station/maintenance/starboard/lesser) +"eea" = ( +/obj/structure/sign/warning/docking/directional/north, +/turf/open/floor/engine, +/area/station/science/xenobiology) "eei" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -14093,24 +14647,11 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"eek" = ( -/obj/structure/rack, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/item/clothing/head/costume/fancy, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison) -"eeq" = ( -/obj/structure/table, -/obj/item/hand_tele{ - pixel_x = 3; - pixel_y = 13 - }, -/turf/open/floor/iron, -/area/station/command/teleporter) -"eet" = ( -/obj/effect/spawner/random/trash/bin, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +"ees" = ( +/obj/structure/kitchenspike, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "eeD" = ( /obj/machinery/light/directional/west, /turf/open/floor/iron/dark/textured, @@ -14130,39 +14671,23 @@ /obj/effect/mapping_helpers/mail_sorting/engineering/atmospherics, /turf/open/floor/iron, /area/station/engineering/lobby) -"eeY" = ( -/obj/structure/railing{ +"eff" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ dir = 4 }, -/obj/effect/turf_decal/siding/white{ - dir = 4 +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/door/firedoor{ dir = 4 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "cantena_curtains" - }, -/turf/open/floor/wood, -/area/station/commons/lounge) -"efi" = ( -/obj/structure/bed/dogbed, -/obj/effect/decal/cleanable/blood/gibs/body, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "efk" = ( /obj/structure/cable, /turf/open/floor/iron/white/side, /area/station/science/explab) -"efo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/iv_drip, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "efv" = ( /obj/item/toy/snowball{ pixel_x = -6; @@ -14179,13 +14704,14 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"efz" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 +"efy" = ( +/obj/structure/railing{ + dir = 1 }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/service/chapel) "efE" = ( /obj/structure/reflector/box/anchored{ dir = 1 @@ -14221,41 +14747,14 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) -"efN" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Chapel External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/service/chapel) -"efS" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/light/warm/directional/east, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"efU" = ( -/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/effect/turf_decal/tile/neutral/half/contrasted{ +"efR" = ( +/obj/structure/ladder, +/obj/structure/railing{ dir = 8 }, -/obj/machinery/duct, -/obj/structure/sign/flag/nanotrasen/directional/west, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/structure/lattice/catwalk, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) "efV" = ( /obj/effect/turf_decal/delivery, /obj/structure/cable, @@ -14268,13 +14767,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"ege" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) "egj" = ( /obj/structure/rack, /obj/machinery/light/small/directional/north, @@ -14314,16 +14806,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/command/storage/eva) -"egR" = ( -/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/structure/cable, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) "egS" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14371,18 +14853,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"ehh" = ( +/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/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "ehp" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) -"ehy" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/command/heads_quarters/hos) +"ehq" = ( +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "ehD" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -14402,6 +14889,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/engine_smes) +"ehL" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/deepfryer, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "ehO" = ( /obj/machinery/door/window/brigdoor/right/directional/west{ name = "Observation Deck"; @@ -14433,6 +14927,12 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) +"ehU" = ( +/obj/machinery/door/firedoor/border_only, +/obj/structure/railing, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "ehZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14469,6 +14969,30 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) +"eik" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/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/service/hydroponics) +"ein" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Gas to Chamber" + }, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/warning/fire/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter) +"eiH" = ( +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "eiI" = ( /obj/effect/turf_decal/siding/yellow{ dir = 1 @@ -14482,12 +15006,14 @@ /obj/item/clothing/suit/hooded/wintercoat/engineering, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) -"eiY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"ejb" = ( /obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Visitation" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/brig, +/turf/open/floor/iron, +/area/station/security/prison/visit) "ejn" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -14517,6 +15043,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"ejN" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Exterior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "ejQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -14528,22 +15062,6 @@ "ejX" = ( /turf/open/floor/plating, /area/station/security/prison/safe) -"ejY" = ( -/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/effect/decal/cleanable/oil, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"ekc" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "ekh" = ( /obj/machinery/camera/directional/west{ c_tag = "Atmospherics - Central" @@ -14553,6 +15071,13 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"ekj" = ( +/obj/structure/closet, +/obj/effect/spawner/random/clothing/costume, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ekm" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 8; @@ -14588,13 +15113,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery/fore) -"ekN" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) "ekW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14602,16 +15120,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/processing) -"elf" = ( -/obj/machinery/rnd/production/circuit_imprinter/department/science, -/obj/machinery/button/door/directional/north{ - id = "rnd"; - name = "Shutters Control Button"; - pixel_x = 7; - req_access = list("research") - }, -/turf/open/floor/iron/checker, -/area/station/science/lab) "elj" = ( /obj/effect/landmark/start/depsec/engineering, /obj/structure/cable, @@ -14633,48 +15141,29 @@ "elw" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/upper) +"elE" = ( +/obj/structure/rack, +/obj/item/clothing/suit/hazardvest, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "elT" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ dir = 8 }, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) -"elU" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/work) "emp" = ( /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/hallway/primary/starboard) -"emw" = ( -/obj/item/radio/intercom/directional/west, -/turf/open/floor/wood, -/area/station/commons/lounge) "emx" = ( -/obj/structure/disposalpipe/segment{ - 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/closet/secure_closet/freezer/kitchen/maintenance, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"emF" = ( -/obj/structure/reagent_dispensers/plumbed{ - name = "service reservoir" - }, -/obj/machinery/light/small/dim/directional/north, -/obj/effect/turf_decal/delivery/white{ - color = "#307db9" - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/textured, -/area/station/maintenance/starboard/fore) +/area/station/maintenance/port/aft) "emK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/side{ @@ -14691,6 +15180,11 @@ dir = 1 }, /area/station/security/brig) +"emT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "ena" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -14698,6 +15192,14 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) +"eni" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/trimline/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/range) "enq" = ( /obj/machinery/doppler_array{ dir = 4 @@ -14709,6 +15211,15 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating, /area/station/engineering/lobby) +"enH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "enI" = ( /obj/machinery/door/airlock/maintenance{ name = "Tool Storage Maintenance" @@ -14730,13 +15241,11 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"eog" = ( -/obj/structure/table/wood, -/obj/machinery/newscaster/directional/north, -/obj/item/flashlight/lantern, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/service/chapel) +"enY" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "eos" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -14790,18 +15299,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"eoV" = ( -/obj/item/trash/popcorn, -/obj/structure/reagent_dispensers/plumbed{ - name = "dormitory reservoir" +"eoS" = ( +/obj/machinery/door/morgue{ + name = "Confession Booth"; + dir = 4 }, -/obj/machinery/light/small/dim/directional/north, -/obj/effect/turf_decal/delivery/white{ - color = "#307db9" +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/textured, -/area/station/maintenance/fore) +/turf/open/floor/wood/large, +/area/station/service/chapel) "eoY" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -14811,28 +15318,41 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"eph" = ( -/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{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"epw" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/landmark/event_spawn, /turf/open/floor/iron, -/area/station/hallway/primary/central) +/area/station/hallway/primary/starboard) "epB" = ( /obj/structure/chair/pew/left{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"epC" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "epH" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/science/explab) +"epN" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood, +/area/station/security/courtroom) "epY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14854,34 +15374,6 @@ dir = 8 }, /area/station/science/ordnance/office) -"eqk" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"eqn" = ( -/obj/structure/sign/warning/docking/directional/east, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"eqp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "eqq" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -14895,6 +15387,26 @@ }, /turf/open/floor/iron/large, /area/station/hallway/primary/starboard) +"eqE" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"eqH" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "eqI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14902,14 +15414,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/brig/upper) -"eqJ" = ( -/obj/machinery/power/solar_control{ - id = "auxsolareast"; - name = "Starboard Bow Solar Control" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "eqN" = ( /obj/structure/fence/door, /obj/effect/turf_decal/weather/snow/corner{ @@ -14917,6 +15421,13 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"eqP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "eqS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/red/warning{ @@ -14944,6 +15455,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"erd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness) "eri" = ( /obj/structure/chair/office/light{ dir = 4 @@ -14978,13 +15497,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) -"erq" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "erw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt/dust, @@ -14997,22 +15509,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron, /area/station/construction) -"erE" = ( -/obj/machinery/requests_console/auto_name/directional/east, -/obj/machinery/duct, -/obj/effect/mapping_helpers/requests_console/supplies, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"erH" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "erI" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen{ @@ -15037,6 +15533,15 @@ }, /turf/open/floor/plating, /area/station/commons/vacant_room/office) +"erM" = ( +/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/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/security/brig) "erN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15044,6 +15549,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/storage) +"erV" = ( +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "erY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15061,10 +15572,6 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"ese" = ( -/obj/structure/fence/cut/medium, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored/graveyard) "eso" = ( /obj/machinery/telecomms/receiver/preset_left, /turf/open/floor/iron/dark/telecomms, @@ -15116,19 +15623,30 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"etr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 +"ete" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/siding/wood{ + dir = 5 }, +/obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/area/station/commons/lounge) +"etv" = ( +/obj/machinery/chem_heater/withbuffer, +/obj/effect/turf_decal/tile/yellow/full, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/pharmacy) "etw" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/station/security/prison/workout) +"etz" = ( +/obj/structure/sign/warning/directional/north, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) "etB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/simple/brown/visible{ @@ -15156,33 +15674,34 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/iron/dark, /area/station/engineering/main) -"etY" = ( -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/station/commons/locker) -"eub" = ( -/obj/machinery/camera{ - c_tag = "Medbay Pharmacy"; - dir = 9; - network = list("ss13","medbay") +"etW" = ( +/obj/structure/railing/corner{ + dir = 8 }, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/machinery/shower/directional/south, -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/fluff/shower_drain, -/obj/effect/turf_decal/stripes/white/end, +/obj/structure/railing, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, -/area/station/medical/pharmacy) +/area/station/medical/medbay/lobby) +"etY" = ( +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/commons/locker) "euc" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"eud" = ( +/obj/item/food/chococoin, +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "euf" = ( /obj/structure/bed{ dir = 4 @@ -15193,13 +15712,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) -"eul" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/trimline/yellow/filled/end{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/station/medical/chem_storage) "euq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15229,22 +15741,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, /area/station/science/xenobiology) -"euR" = ( -/obj/structure/ladder{ - name = "chemistry lab access" - }, -/obj/effect/turf_decal/stripes/end, -/obj/structure/sign/departments/chemistry/directional/north, -/obj/structure/sign/warning/no_smoking{ - pixel_x = -28 - }, -/obj/effect/turf_decal/tile/yellow/full, -/obj/machinery/door/window/left/directional/south{ - name = "Chemistry Lab Access Hatch"; - req_access = list("plumbing") - }, -/turf/open/floor/iron/white/textured_large, -/area/station/medical/treatment_center) "euZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15258,10 +15754,12 @@ "evb" = ( /turf/open/floor/iron, /area/station/service/janitor) -"evc" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +"evh" = ( +/obj/structure/flora/tree/pine/style_random{ + pixel_x = -15 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "evk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15282,6 +15780,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/processing) +"evP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/vault, +/area/station/security/prison/rec) "evT" = ( /turf/open/floor/plating/icemoon, /area/station/science/ordnance/bomb) @@ -15294,6 +15799,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) +"ewo" = ( +/obj/structure/fence/post{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "ewC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, @@ -15315,6 +15829,16 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/security/brig/upper) +"ewT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "exe" = ( /obj/effect/turf_decal/siding/yellow/end{ dir = 8 @@ -15323,29 +15847,43 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/plating, /area/station/medical/treatment_center) -"exq" = ( -/obj/effect/turf_decal/trimline/neutral/warning, -/obj/effect/turf_decal/trimline/neutral/mid_joiner, -/obj/item/flashlight{ - pixel_y = 9 +"exm" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "robotics"; + name = "Robotics Lab Shutters" }, -/obj/item/flashlight{ - pixel_y = 9 +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7 }, -/obj/item/flashlight{ - pixel_x = -3; - pixel_y = 5 +/obj/machinery/door/window/left/directional/south{ + name = "Robotics Desk"; + req_access = list("robotics") }, -/obj/item/flashlight{ +/obj/item/paper_bin{ pixel_x = -3; - pixel_y = 5 + pixel_y = 7 }, -/obj/structure/rack, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ +/obj/item/pen, +/turf/open/floor/plating, +/area/station/science/robotics/lab) +"exn" = ( +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/turf/open/floor/iron/dark/smooth_edge, -/area/station/ai_monitored/command/storage/eva) +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"exu" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "exv" = ( /obj/effect/gibspawner/human/bodypartless, /turf/open/misc/asteroid/snow/icemoon, @@ -15353,13 +15891,6 @@ "exw" = ( /turf/closed/wall, /area/station/service/hydroponics) -"exy" = ( -/obj/structure/sign/warning/no_smoking{ - pixel_x = -28 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "exL" = ( /obj/item/trash/cheesie, /obj/effect/decal/cleanable/dirt, @@ -15374,6 +15905,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/work) +"exQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "eyb" = ( /turf/closed/wall, /area/station/security/processing) @@ -15422,21 +15960,19 @@ /obj/structure/closet/firecloset, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"eyU" = ( -/obj/structure/closet/crate/coffin, -/obj/machinery/light/small/red/directional/south, -/turf/open/floor/iron/dark/smooth_half, -/area/station/service/chapel) -"ezd" = ( -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/storage/wallet{ - pixel_y = 5; - pixel_x = 3 - }, -/obj/item/newspaper, +"eym" = ( +/obj/structure/girder, +/obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/area/station/maintenance/fore) +"eyP" = ( +/turf/open/misc/ice/coldroom, +/area/station/service/kitchen/coldroom) +"eyR" = ( +/obj/machinery/processor/slime, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) "ezf" = ( /obj/machinery/door/airlock{ name = "Private Restroom" @@ -15444,13 +15980,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/freezer, /area/station/medical/break_room) -"ezk" = ( -/obj/effect/turf_decal/siding/wood/end{ - dir = 1 - }, -/obj/item/kirbyplants/organic/plant11, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "ezl" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/decal/cleanable/dirt, @@ -15551,6 +16080,20 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"eAQ" = ( +/obj/structure/rack, +/obj/item/storage/box/lights/mixed{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/storage/box/lights/tubes, +/turf/open/floor/iron/checker, +/area/station/commons/storage/emergency/port) +"eAW" = ( +/obj/structure/lattice/catwalk, +/obj/structure/sign/warning/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) "eBd" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, @@ -15591,20 +16134,16 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"eBU" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Courtroom" - }, -/obj/item/radio/intercom/directional/north, -/obj/structure/chair{ - name = "Defense" - }, -/turf/open/floor/wood, -/area/station/security/courtroom) "eBV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/closed/wall/r_wall, /area/station/security/checkpoint/engineering) +"eCg" = ( +/obj/structure/tank_holder/oxygen, +/obj/effect/decal/cleanable/wrapping, +/obj/structure/sign/poster/official/safety_internals/directional/north, +/turf/open/floor/vault, +/area/station/security/prison/rec) "eCn" = ( /obj/structure/disposalpipe/trunk/multiz{ dir = 1 @@ -15642,11 +16181,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"eCz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/mine/laborcamp) "eCD" = ( /obj/machinery/door/airlock/public/glass{ name = "Prison Common Room" @@ -15667,6 +16201,15 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"eCT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "eDc" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/cable, @@ -15706,15 +16249,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/visit) -"eDy" = ( -/obj/structure/closet/boxinggloves, -/obj/machinery/light/directional/north, -/obj/item/clothing/shoes/jackboots, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) +"eDs" = ( +/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/hallway/secondary/service) "eDC" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ @@ -15722,12 +16263,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"eDD" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/disposalpipe/segment, -/obj/structure/railing/corner/end, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "eDH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15740,6 +16275,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"eDJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Mix to Space" + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "eDM" = ( /obj/machinery/door/airlock/command/glass{ name = "Head of Security" @@ -15752,44 +16297,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/smooth_large, /area/station/command/heads_quarters/hos) -"eEh" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/mechanical, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/analyzer, -/obj/item/pipe_dispenser, -/obj/item/flashlight, -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"eEm" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/turf/open/floor/plating, -/area/station/engineering/engine_smes) -"eEr" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/warning/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"eEC" = ( -/obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Captain's Office"; - name = "Captain's Fax Machine" - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "eEO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15808,14 +16315,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) -"eFf" = ( -/obj/structure/fireplace{ - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/station/commons/lounge) "eFh" = ( /obj/structure/table, /obj/effect/spawner/random/entertainment/cigarette_pack, @@ -15849,9 +16348,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) -"eFw" = ( -/obj/structure/sign/poster/official/report_crimes, -/turf/closed/wall/ice, +"eFG" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/flag/nanotrasen/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) +"eFH" = ( +/obj/structure/flora/rock/icy/style_random, +/turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "eFO" = ( /obj/structure/cable, @@ -15875,19 +16385,24 @@ /turf/open/floor/wood, /area/station/commons/dorms) "eGg" = ( -/obj/machinery/icecream_vat, -/obj/structure/sign/clock/directional/north, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) -"eGl" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/mix) +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/item/seeds/watermelon, +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) "eGr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) +"eGs" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "eGw" = ( /obj/machinery/light/small/directional/north, /obj/machinery/firealarm/directional/north, @@ -15911,27 +16426,55 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"eGB" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/eighties, +/area/station/commons/lounge) "eGK" = ( /obj/structure/closet, /obj/effect/spawner/random/entertainment/drugs, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"eGM" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "eGN" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/open/floor/iron/freezer, /area/station/science/xenobiology) +"eGV" = ( +/obj/effect/spawner/random/lavaland_mob/raptor, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "eGW" = ( /obj/effect/turf_decal/tile/red{ dir = 1 }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"eGX" = ( -/obj/machinery/vending/boozeomat/all_access, -/turf/closed/wall, -/area/station/maintenance/port/aft) +"eHb" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/mail_sorting/service/dormitories, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) "eHe" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -15959,22 +16502,57 @@ /obj/item/clothing/under/costume/jabroni, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"eHo" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/shower/directional/north, +/turf/open/floor/iron/smooth, +/area/mine/eva) +"eHC" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "eHT" = ( /obj/structure/cable, /obj/effect/spawner/random/structure/steam_vent, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"eHX" = ( +"eHV" = ( +/obj/structure/plasticflaps/opaque{ + dir = 4 + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Research Division" + }, +/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment{ - dir = 6 + dir = 4 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, /turf/open/floor/plating, -/area/station/maintenance/fore) +/area/station/maintenance/starboard/upper) +"eHX" = ( +/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, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Arrivals Dock" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) "eHZ" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -15988,6 +16566,13 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"eIg" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/sign/poster/official/here_for_your_safety/directional/north, +/turf/open/floor/iron, +/area/station/security/prison/visit) "eIk" = ( /obj/structure/filingcabinet, /obj/machinery/power/apc/auto_name/directional/north, @@ -15995,6 +16580,12 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/service/library) +"eIv" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "eIC" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -16012,14 +16603,17 @@ /obj/item/reagent_containers/dropper, /turf/open/floor/iron/dark, /area/station/medical/virology) +"eIR" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "eIU" = ( -/obj/machinery/button/door/directional/south{ - id = "Cargo_Store_In"; - name = "Shutter Control"; - pixel_x = 24 - }, +/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/sign/warning/electric_shock/directional/east, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/hallway/primary/central/fore) "eJe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16079,11 +16673,31 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/mine/eva) +"eJX" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/effect/spawner/random/entertainment/lighter, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"eKb" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/aft) "eKl" = ( /obj/effect/turf_decal/stripes/box, /obj/machinery/destructive_scanner, /turf/open/floor/iron/textured_large, /area/station/hallway/primary/starboard) +"eKI" = ( +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/departments/medbay/alt/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "eKJ" = ( /obj/structure/chair/stool/directional/west, /turf/open/floor/iron, @@ -16100,18 +16714,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"eKX" = ( -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/white/side{ - dir = 8 - }, -/area/station/maintenance/port/fore) "eLl" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/chapel) +"eLm" = ( +/obj/structure/table/glass, +/obj/item/storage/box/monkeycubes, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) "eLn" = ( /obj/machinery/computer/crew{ dir = 4 @@ -16124,19 +16738,32 @@ dir = 5 }, /area/station/science/research) -"eLv" = ( -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/siding/white{ - dir = 8 +"eLs" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) +"eLB" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Service - Gambling Lounge" }, -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/item/food/grown/tomato, -/obj/item/food/grown/tomato{ - pixel_y = 2; - pixel_x = 2 +/obj/machinery/computer/slot_machine{ + name = "two-armed bandit" }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"eLM" = ( +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/engineering/lobby) +"eLN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, +/obj/machinery/meter/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "eLS" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, @@ -16150,16 +16777,20 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/mine/mechbay) -"eLU" = ( -/obj/structure/statue/snow/snowman, -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) "eMa" = ( /obj/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/storage) +"eMn" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/secure_area/directional/north{ + desc = "A warning sign which reads 'SERVER ROOM'."; + name = "SERVER ROOM" + }, +/turf/open/floor/iron/white, +/area/station/maintenance/aft/greater) "eMr" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, @@ -16168,6 +16799,15 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) +"eME" = ( +/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/box/red/corners{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "eMG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16195,21 +16835,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/service) -"eML" = ( -/obj/machinery/vending/wardrobe/coroner_wardrobe, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"eMO" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/box, -/obj/structure/ladder, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/mine/eva) "eMT" = ( /obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/door/airlock/maintenance, @@ -16217,15 +16842,6 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"eMU" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_centre, -/obj/machinery/atmospherics/pipe/multiz/pink/visible{ - dir = 4; - name = "Exfiltrate" - }, -/obj/effect/turf_decal/tile/red/diagonal_edge, -/turf/open/floor/iron/dark/diagonal, -/area/station/engineering/atmos/mix) "eNh" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -16279,17 +16895,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"eNQ" = ( -/obj/structure/sign/warning/vacuum/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/smooth, -/area/station/engineering/lobby) -"eNS" = ( -/obj/structure/sign/warning/xeno_mining, -/turf/closed/wall, -/area/mine/storage) "eOl" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron, @@ -16305,36 +16910,31 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"eOz" = ( +"eOx" = ( /obj/structure/table, -/obj/item/razor, -/obj/item/storage/backpack/duffelbag/sec/surgery, -/turf/open/floor/plating/icemoon, -/area/station/security/execution/education) -"eOK" = ( -/obj/effect/turf_decal/trimline/neutral/mid_joiner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/warning{ - dir = 6 +/obj/machinery/fax{ + fax_name = "Research Division"; + name = "Research Division Fax Machine"; + pixel_x = 1 }, -/obj/effect/turf_decal/trimline/neutral/mid_joiner{ - dir = 4 +/obj/structure/sign/departments/science/directional/south, +/turf/open/floor/iron/cafeteria{ + dir = 8 }, -/obj/effect/turf_decal/trimline/neutral/mid_joiner, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/area/station/science/research) +"eOB" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 8 }, -/turf/open/floor/iron/dark/smooth_edge{ +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) +"eOJ" = ( +/obj/structure/railing{ dir = 4 }, -/area/station/ai_monitored/command/storage/eva) -"ePd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/grille/broken, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/turf/open/floor/iron/stairs/medium, +/area/station/cargo/storage) "ePi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -16345,6 +16945,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) +"ePj" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/coin{ + pixel_x = -7 + }, +/obj/effect/spawner/random/clothing/bowler_or_that, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "ePm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16364,6 +16972,10 @@ "ePr" = ( /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/hos) +"ePu" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine, +/area/station/science/explab) "ePB" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -16371,6 +16983,16 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/cargo/miningdock) +"ePP" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Starboard Primary Hallway Center West" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "ePR" = ( /obj/structure/railing{ dir = 6 @@ -16378,16 +17000,27 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"ePZ" = ( -/obj/structure/chair/stool/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, +"ePT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/station/commons/lounge) +/obj/structure/cable, +/obj/structure/sign/warning/chem_diamond/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"ePV" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/structure/sign/warning/pods/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) "eQz" = ( /obj/structure/grille, /turf/open/floor/plating, @@ -16397,34 +17030,46 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/security/prison/mess) +"eQF" = ( +/obj/structure/railing/corner, +/obj/structure/sign/departments/holy/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/station/service/chapel) "eQH" = ( /obj/structure/sign/departments/medbay/alt/directional/west, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"eQQ" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall, -/area/station/command/heads_quarters/rd) "eQT" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/mine/laborcamp/security) -"eQU" = ( -/obj/item/radio/intercom/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "eQX" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"eRf" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "eRh" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) +"eRp" = ( +/obj/structure/bed{ + dir = 1; + pixel_x = -2 + }, +/obj/machinery/flasher/directional/north{ + id = "Cell 1" + }, +/turf/open/floor/iron/smooth, +/area/station/security/brig) "eRw" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -16441,6 +17086,12 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"eRE" = ( +/obj/structure/fence/post{ + dir = 2 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "eRH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -16470,15 +17121,6 @@ dir = 4 }, /area/station/cargo/bitrunning/den) -"eSm" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/structure/sign/warning/electric_shock/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "eSn" = ( /obj/structure/chair/office, /obj/effect/landmark/start/assistant, @@ -16489,23 +17131,31 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/library) +"eSq" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) "eSr" = ( /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/mine/laborcamp/security) -"eSE" = ( -/obj/structure/closet/crate/trashcart/laundry, -/obj/effect/spawner/random/contraband/prison, -/obj/item/clothing/under/rank/prisoner, -/obj/item/clothing/under/rank/prisoner, -/obj/item/clothing/under/rank/prisoner/skirt, -/obj/item/clothing/under/rank/prisoner/skirt, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 +"eSA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark, +/area/mine/eva) +"eSC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/work) +/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, +/area/station/service/hydroponics) "eSJ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -16518,10 +17168,6 @@ }, /turf/open/floor/iron/white, /area/station/science/genetics) -"eSQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "eSY" = ( /obj/structure/closet/emcloset, /turf/open/floor/iron/smooth, @@ -16538,6 +17184,18 @@ }, /turf/open/floor/carpet/black, /area/station/security/prison/safe) +"eTe" = ( +/obj/effect/turf_decal/tile/blue{ + 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/firealarm/directional/east, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/station/hallway/secondary/entry) "eTi" = ( /obj/machinery/telecomms/broadcaster/preset_left, /turf/open/floor/iron/dark/telecomms, @@ -16578,19 +17236,13 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/fore) -"eTT" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/requests_console/auto_name/directional/north, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/duct, -/obj/machinery/light/small/directional/north, -/obj/effect/mapping_helpers/requests_console/supplies, -/turf/open/floor/iron, -/area/station/service/bar) -"eUe" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner, +"eTY" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/stripes/box, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/sign/warning/no_smoking/circle/directional/north, /turf/open/floor/iron/white, -/area/station/medical/chemistry) +/area/station/medical/medbay/aft) "eUf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16609,6 +17261,48 @@ /obj/item/seeds/tower, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) +"eUm" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/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, +/area/station/service/hydroponics) +"eUx" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/table, +/obj/item/paper_bin/construction, +/obj/item/stack/pipe_cleaner_coil/random, +/obj/item/stack/pipe_cleaner_coil/random, +/obj/item/stack/pipe_cleaner_coil/random, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/commons/storage/art) +"eUz" = ( +/obj/machinery/computer/pod/old/mass_driver_controller/chapelgun{ + pixel_x = 32 + }, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/station/service/chapel) "eUA" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/green/corner{ @@ -16641,26 +17335,39 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"eUC" = ( -/obj/machinery/firealarm/directional/west{ - pixel_y = -4 - }, -/obj/machinery/light_switch/directional/west{ - pixel_y = 5 - }, -/obj/machinery/photocopier, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "eUI" = ( /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"eUK" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/stack/sheet/plasteel/twenty{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "eUL" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"eUN" = ( +/obj/structure/closet/secure_closet/medical2, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/machinery/button/door/directional/south{ + id = "surgery"; + name = "Surgery Shutter Control" + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/aft) "eUO" = ( /mob/living/simple_animal/hostile/asteroid/polarbear{ move_force = 999; @@ -16668,39 +17375,11 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"eUR" = ( -/obj/structure/table, -/obj/machinery/button/door/directional/west{ - id = "briggate"; - name = "Brig Shutters"; - pixel_x = -6; - pixel_y = -2 - }, -/obj/machinery/button/flasher{ - id = "brigentry"; - pixel_x = -7; - pixel_y = 9 - }, -/obj/machinery/button/door/directional/west{ - id = "innerbrig"; - name = "Brig Interior Doors Control"; - normaldoorcontrol = 1; - pixel_x = 6; - pixel_y = 9; - req_access = list("security") - }, -/obj/machinery/button/door/directional/west{ - id = "outerbrig"; - name = "Brig Exterior Doors Control"; - normaldoorcontrol = 1; - pixel_x = 6; - pixel_y = -2; - req_access = list("security") - }, -/obj/item/radio/intercom/prison/directional/north, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/dark/textured_large, -/area/station/security/brig/entrance) +"eUU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "eUW" = ( /obj/structure/chair/stool/directional/south, /obj/effect/landmark/start/janitor, @@ -16717,11 +17396,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/eva/lower) -"eVi" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "eVl" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -16742,6 +17416,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"eVw" = ( +/obj/effect/spawner/random/trash, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "eVC" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 9 @@ -16833,11 +17513,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"eWP" = ( -/obj/machinery/computer/security/mining, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/command/bridge) "eWQ" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/engine/n2, @@ -16855,24 +17530,73 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"eXa" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/structure/sign/poster/official/wtf_is_co2/directional/north, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/maintenance/port/fore) +"eXc" = ( +/obj/effect/spawner/random/structure/girder, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"eXf" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Fitness Room North" + }, +/obj/structure/closet/masks, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/flag/ssc/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) +"eXD" = ( +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/holosign/barrier/atmos/sturdy, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "minecraft_shutter"; + name = "Cart Shutters" + }, +/turf/open/floor/iron/textured, +/area/station/service/hydroponics) "eXH" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) -"eXZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "eYe" = ( /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/central/fore) +"eYm" = ( +/obj/structure/table, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) "eYn" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -16880,6 +17604,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"eYx" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "eYz" = ( /obj/machinery/mineral/processing_unit/gulag{ dir = 1 @@ -16890,18 +17618,36 @@ "eYC" = ( /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) +"eYF" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "eYH" = ( /obj/machinery/power/smes/super/full, /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"eYP" = ( -/obj/structure/cable, -/obj/machinery/door/firedoor, -/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) +"eYK" = ( +/obj/structure/rack, +/obj/item/clothing/suit/hooded/wintercoat{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/winterboots, +/obj/item/clothing/shoes/winterboots, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/delivery/red, +/obj/machinery/camera/directional/north{ + c_tag = "Arrivals External Access" + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/textured, +/area/station/hallway/secondary/entry) "eYR" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 10 @@ -16916,6 +17662,11 @@ }, /turf/open/floor/iron/dark, /area/station/medical/virology) +"eYS" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "eYT" = ( /obj/item/paper_bin{ pixel_x = -3; @@ -16938,6 +17689,14 @@ /obj/effect/landmark/start/botanist, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"eYY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "eZc" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/engine/n2o, @@ -16959,6 +17718,12 @@ /obj/item/storage/fancy/cigarettes/cigpack_mindbreaker, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"eZA" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4 + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "eZK" = ( /obj/machinery/recycler{ dir = 8 @@ -16994,6 +17759,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"eZW" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore) "fab" = ( /obj/structure/cable, /turf/open/floor/engine, @@ -17031,26 +17800,17 @@ /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"far" = ( -/obj/structure/railing/corner/end{ +"faq" = ( +/obj/machinery/newscaster/directional/west, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/open/floor/iron/stairs/old{ - dir = 4 +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 }, +/turf/open/floor/iron, /area/station/hallway/primary/starboard) -"fat" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "faG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -17067,30 +17827,32 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) -"fbg" = ( -/obj/machinery/door/airlock/wood{ - name = "Backstage" +"faL" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy{ + name = "landing marker" }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) +"faV" = ( +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 1 }, -/obj/effect/turf_decal/siding/wood{ +/turf/open/floor/plating/snowed/icemoon, +/area/mine/laborcamp/security) +"faW" = ( +/obj/effect/turf_decal/trimline/green/filled/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/mapping_helpers/airlock/access/all/service/theatre, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron/dark/textured_half{ +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/structure/railing{ dir = 1 }, -/area/station/service/theater) -"fbh" = ( -/obj/machinery/power/tracker, -/obj/structure/cable, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/turf/open/floor/iron, +/area/station/service/hydroponics) "fbl" = ( /turf/open/floor/iron/dark, /area/station/science/breakroom) @@ -17098,17 +17860,30 @@ /obj/machinery/camera/directional/north{ c_tag = "Bridge Conference Room" }, -/obj/machinery/newscaster/directional/north, +/obj/structure/noticeboard/directional/north, /turf/open/floor/wood, /area/station/command/meeting_room) -"fbW" = ( -/obj/machinery/newscaster/directional/west, -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/siding/wood{ +"fbA" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/stairs/medium{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/commons/lounge) +/area/station/science/cytology) +"fbF" = ( +/obj/effect/landmark/navigate_destination/dockarrival, +/obj/effect/turf_decal/bot_white, +/obj/structure/plaque/static_plaque/golden/commission/icebox, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/entry) +"fbM" = ( +/obj/structure/chair/stool/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "fbY" = ( /obj/effect/spawner/random/trash/hobo_squat, /turf/open/floor/plating, @@ -17119,14 +17894,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"fce" = ( -/obj/structure/table/glass, -/obj/structure/sign/poster/contraband/little_fruits/directional/east, -/obj/item/storage/bag/plants/portaseeder, -/obj/item/plant_analyzer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "fcg" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -17139,22 +17906,23 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"fcj" = ( -/turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) -"fco" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/bar) "fcu" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/chair, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"fcA" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/hydroponics/constructable, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "fcI" = ( /obj/effect/decal/cleanable/oil, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17183,6 +17951,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/mine/laborcamp/security) +"fdb" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 4 + }, +/obj/structure/fence{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "fde" = ( /obj/structure/table, /obj/item/paper{ @@ -17191,6 +17969,23 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"fdj" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Escape"; + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) "fdm" = ( /obj/structure/falsewall, /turf/open/floor/iron, @@ -17230,12 +18025,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"fdP" = ( -/obj/structure/bonfire, -/obj/item/melee/roastingstick, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) +"fdV" = ( +/obj/effect/landmark/generic_maintenance_landmark, +/obj/item/bikehorn/rubberducky, +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "fdX" = ( /obj/item/toy/cards/deck{ pixel_x = -9; @@ -17249,6 +18046,20 @@ /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, /turf/closed/wall, /area/station/medical/cryo) +"fed" = ( +/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/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"fep" = ( +/obj/structure/no_effect_signpost, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "fez" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -17262,6 +18073,11 @@ /obj/item/seeds/apple, /turf/open/floor/iron, /area/mine/laborcamp) +"feD" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/morgue) "feJ" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory/upper) @@ -17284,11 +18100,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"feV" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "ffe" = ( /turf/closed/wall/r_wall, /area/station/maintenance/aft/lesser) @@ -17299,20 +18110,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel) -"ffr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"ffz" = ( -/obj/machinery/processor/slime, -/turf/open/floor/iron, -/area/station/science/xenobiology) "ffQ" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 10 @@ -17326,11 +18123,14 @@ }, /turf/open/floor/iron, /area/station/commons/fitness) -"fgm" = ( -/obj/machinery/photocopier, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/wood, -/area/station/service/library) +"fgc" = ( +/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 = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "fgo" = ( /obj/effect/spawner/random/trash/mess, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17350,12 +18150,6 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) -"fgz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "fgJ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -17363,6 +18157,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/execution/transfer) +"fgN" = ( +/obj/structure/bonfire/prelit, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "fgQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/engineering/tracking_beacon, @@ -17379,12 +18178,28 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"fgV" = ( +/obj/structure/railing/wooden_fence{ + dir = 8 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "fhb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, /turf/open/floor/iron/white/smooth_large, /area/station/science/genetics) +"fhg" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Dormitory South" + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/commons/dorms) "fhu" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -17401,19 +18216,10 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"fhB" = ( -/obj/structure/chair/sofa/bench/left, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"fhS" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/sink/kitchen/directional/west, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +"fhL" = ( +/obj/structure/sign/warning/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) "fhU" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -17431,6 +18237,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"fhX" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "fij" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -17537,6 +18351,12 @@ /obj/machinery/ntnet_relay, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) +"fja" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "fjg" = ( /obj/machinery/shower/directional/west, /obj/effect/turf_decal/trimline/blue, @@ -17555,16 +18375,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/science/xenobiology) -"fju" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "fjz" = ( /obj/effect/decal/cleanable/generic, /obj/effect/decal/cleanable/dirt, @@ -17591,32 +18401,31 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"fjO" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/binary/valve/digital/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) +"fjN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "fjQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, /area/mine/living_quarters) -"fkc" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/sign/poster/contraband/missing_gloves/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/department/electrical) -"fkd" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/siding/wood{ - dir = 5 +"fki" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/light/directional/east, +/obj/machinery/newscaster/directional/north, +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/white/side{ + dir = 10 }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron/dark, -/area/station/commons/lounge) +/area/station/science/research) "fkj" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -17632,21 +18441,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) -"fkq" = ( -/obj/structure/cable, -/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/plating, -/area/station/maintenance/starboard/fore) "fkt" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/icemoon, /area/station/maintenance/port/lesser) +"fkw" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"fkD" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "fkF" = ( /obj/item/weldingtool, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "fkN" = ( @@ -17719,13 +18533,11 @@ /obj/machinery/vending/wardrobe/jani_wardrobe, /turf/open/floor/iron, /area/station/service/janitor) -"flV" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/siding/wood/corner, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/wood, -/area/station/service/library) +"flK" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/eighties, +/area/station/commons/lounge) "flW" = ( /obj/machinery/atmospherics/components/tank/air, /turf/open/floor/plating, @@ -17807,13 +18619,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"fna" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "fng" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17831,6 +18636,16 @@ }, /turf/open/floor/wood, /area/station/security/prison/rec) +"fnt" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/security/brig) "fnA" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 8 @@ -17868,11 +18683,13 @@ }, /turf/open/floor/iron/dark, /area/station/medical/storage) -"foy" = ( -/obj/item/radio/intercom/directional/south, -/obj/machinery/vending/wardrobe/science_wardrobe, -/turf/open/floor/iron/dark, -/area/station/science/breakroom) +"foI" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/item/storage/box/matches, +/obj/effect/spawner/random/entertainment/cigar, +/turf/open/floor/iron, +/area/station/service/bar) "foO" = ( /turf/open/floor/carpet, /area/station/security/prison/rec) @@ -17890,26 +18707,6 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/iron, /area/station/commons/dorms) -"fpm" = ( -/obj/structure/railing/corner/end{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) -"fpp" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/structure/sign/warning/electric_shock/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/virology) "fps" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -17922,11 +18719,6 @@ dir = 9 }, /area/station/security/prison/safe) -"fpt" = ( -/obj/structure/kitchenspike, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "fpA" = ( /obj/machinery/hydroponics/soil, /obj/effect/turf_decal/siding/wideplating/dark{ @@ -17934,25 +18726,12 @@ }, /turf/open/floor/grass, /area/station/maintenance/starboard/fore) -"fpC" = ( -/obj/structure/rack, -/obj/item/pickaxe, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/obj/structure/sign/warning/cold_temp/directional/east, -/turf/open/floor/plating, -/area/station/commons/dorms/laundry) "fpD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"fpF" = ( -/obj/machinery/space_heater, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plating, -/area/station/maintenance/fore) "fpJ" = ( /obj/structure/fireaxecabinet/directional/west, /obj/machinery/suit_storage_unit/atmos, @@ -17977,6 +18756,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"fqG" = ( +/obj/structure/fluff/fokoff_sign, +/obj/effect/mapping_helpers/no_atoms_ontop, +/obj/structure/sign/departments/security/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "fqH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/red/half, @@ -17986,6 +18771,13 @@ /obj/effect/turf_decal/trimline/white/filled/warning, /turf/open/genturf, /area/icemoon/underground/unexplored/rivers/deep) +"fqM" = ( +/obj/structure/cable, +/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/catwalk_floor/iron_smooth, +/area/station/maintenance/port/lesser) "fqQ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -17996,6 +18788,15 @@ }, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"fqR" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Starboard Primary Hallway West" + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "fqW" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/carbon{ @@ -18014,11 +18815,6 @@ dir = 8 }, /area/station/medical/chem_storage) -"fqX" = ( -/obj/structure/chair/stool/directional/north, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "frd" = ( /obj/structure/railing/corner{ dir = 1 @@ -18057,6 +18853,12 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"frz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/item/chair, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "frD" = ( /obj/machinery/air_sensor/oxygen_tank, /turf/open/floor/engine/o2, @@ -18068,29 +18870,34 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) +"frF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/starboard/lesser) "frN" = ( /obj/machinery/power/shieldwallgen, /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/command/teleporter) -"frP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "frS" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/evidence) +"fsj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "fsm" = ( /obj/structure/flora/rock/pile/icy/style_random, /turf/open/misc/asteroid/snow/icemoon, @@ -18108,11 +18915,39 @@ "fsv" = ( /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"fsx" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lantern/on, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) +"fsz" = ( +/obj/structure/table/glass, +/obj/machinery/vending/wallmed/directional/north, +/obj/item/book/manual/wiki/surgery{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/surgery_tray/full, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Surgery A"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/fore) "fsF" = ( /obj/effect/spawner/structure/window, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"fsJ" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "fsK" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/hollow/reinforced/middle{ @@ -18120,14 +18955,6 @@ }, /turf/open/floor/plating, /area/station/security/execution/education) -"fsO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/commons/fitness) "fsQ" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/effect/turf_decal/tile/blue{ @@ -18154,23 +18981,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"fte" = ( -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/structure/closet/secure_closet/hydroponics, -/obj/structure/sign/clock/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"ftt" = ( -/obj/structure/sign/warning/secure_area/directional/south{ - desc = "A warning sign which reads 'SERVER ROOM'."; - name = "SERVER ROOM" +"ftk" = ( +/obj/item/chair/wood, +/obj/item/toy/plush/moth{ + name = "Ariadne" }, -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/flag/nanotrasen/directional/north, /turf/open/floor/plating, -/area/station/science/server) +/area/station/maintenance/starboard/fore) "ftA" = ( /obj/structure/table, /obj/item/storage/box/prisoner, @@ -18191,7 +19010,6 @@ /turf/open/floor/plating, /area/station/science/genetics) "ftN" = ( -/obj/machinery/light_switch/directional/west, /obj/machinery/rnd/destructive_analyzer, /turf/open/floor/iron/checker, /area/station/science/lab) @@ -18203,6 +19021,23 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"ftY" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/obj/structure/flora/grass/both/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"fuc" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination/hydro, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "fue" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -18214,6 +19049,16 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) +"fuf" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "fum" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/plating, @@ -18236,11 +19081,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"fuS" = ( -/obj/structure/stairs/east, -/obj/structure/railing, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "fuX" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -18258,19 +19098,24 @@ /obj/structure/flora/tree/pine/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"fvj" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = 3 + }, +/obj/item/circuitboard/machine/exoscanner, +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = -3 + }, +/obj/item/radio/intercom/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Cargo Bay Drone Bay" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/drone_bay) "fvk" = ( /turf/open/floor/glass/reinforced, /area/station/science/xenobiology) -"fvm" = ( -/obj/machinery/door/airlock/maintenance, -/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 = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "fvx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18307,12 +19152,8 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, -/turf/open/floor/iron, +/turf/open/floor/iron/dark/textured, /area/station/maintenance/disposal/incinerator) -"fvX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/closed/wall/r_wall, -/area/station/maintenance/aft/greater) "fwh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -18323,13 +19164,6 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) -"fwi" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "fwm" = ( /obj/effect/turf_decal/plaque{ icon_state = "L14" @@ -18346,9 +19180,22 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"fwx" = ( +/obj/structure/flora/tree/pine/style_random, +/obj/structure/marker_beacon/cerulean, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "fwB" = ( /turf/closed/mineral/snowmountain/coldroom, /area/station/service/kitchen/coldroom) +"fwC" = ( +/obj/structure/railing/wooden_fence{ + dir = 6 + }, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "fwD" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -18404,13 +19251,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"fwW" = ( -/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 - }, -/area/station/engineering/lobby) "fxd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -18484,14 +19324,9 @@ /obj/machinery/telecomms/server/presets/service, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"fyL" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) +"fyI" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/icemoon/underground/explored) "fyQ" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/meter, @@ -18505,18 +19340,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"fyT" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 3 - }, -/obj/item/stock_parts/power_store/cell/high{ - pixel_y = 3 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/textured, -/area/mine/mechbay) "fyZ" = ( /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, @@ -18578,6 +19401,19 @@ "fzK" = ( /turf/closed/wall, /area/station/service/bar) +"fzO" = ( +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/door/airlock/maintenance{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "fzQ" = ( /obj/structure/chair/office{ dir = 8 @@ -18609,6 +19445,10 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/security/prison/work) +"fAW" = ( +/obj/structure/fence/door/opened, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "fBc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/yellow/line, @@ -18642,7 +19482,7 @@ network = list("labor") }, /obj/machinery/flasher/directional/west{ - id = "GulagCell 1" + id = "GulagCell 3" }, /turf/open/floor/iron, /area/mine/laborcamp) @@ -18654,6 +19494,22 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"fBy" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/closet/l3closet/virology, +/obj/machinery/camera/directional/north{ + network = list("ss13","medbay"); + c_tag = "Virology Airlock" + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/virology) "fBF" = ( /obj/effect/landmark/start/hangover, /obj/structure/disposalpipe/segment, @@ -18661,14 +19517,15 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "fBJ" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 +/obj/machinery/modular_computer/preset/civilian, +/obj/machinery/requests_console/directional/north{ + department = "Ordnance"; + name = "Ordnance Lab Requests Console" }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/ordnance/office) "fBM" = ( /obj/structure/chair{ dir = 4 @@ -18677,11 +19534,6 @@ dir = 8 }, /area/station/service/chapel) -"fBN" = ( -/obj/structure/marker_beacon/burgundy, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "fBQ" = ( /obj/structure/cable, /turf/open/floor/iron/white/corner{ @@ -18694,52 +19546,28 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"fCd" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "Prison Gate"; - name = "Prison Wing Lockdown"; - pixel_x = 5; - pixel_y = 8; - req_access = list("brig") - }, -/obj/machinery/button/door{ - id = "Trial Transfer"; - name = "Trial Transfer Lockdown"; - pixel_x = -7; - pixel_y = 8; - req_access = list("brig") - }, -/obj/machinery/button/door{ - id = "Secure Gate"; - name = "Cell Shutters"; - pixel_x = -7; - pixel_y = -3; - req_access = list("brig") - }, +"fCm" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/closed/mineral/random/snow, +/area/icemoon/underground/explored) +"fCA" = ( +/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/structure/cable, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/station/security/brig) -"fCw" = ( -/obj/machinery/door/morgue{ - name = "Relic Closet"; - req_access = list("chapel_office") - }, -/turf/open/floor/cult, -/area/station/service/chapel/office) +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "fCM" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/medbay/lobby) -"fCS" = ( -/obj/machinery/door/poddoor/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +"fCR" = ( +/obj/structure/fence/end{ + dir = 1 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "fCW" = ( /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/dark/textured, @@ -18759,6 +19587,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"fDf" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "fDl" = ( /obj/machinery/light/small/built/directional/west, /turf/open/floor/iron, @@ -18767,10 +19602,6 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"fDp" = ( -/obj/machinery/light/small/directional/east, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored/graveyard) "fDI" = ( /obj/structure/table/wood, /obj/machinery/computer/records/medical/laptop{ @@ -18779,6 +19610,7 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 }, +/obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/white, /area/station/medical/psychology) "fDJ" = ( @@ -18788,15 +19620,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/service/janitor) -"fDM" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Security Post - Engineering" - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red, -/obj/machinery/computer/security/telescreen/engine/directional/east, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/engineering) "fDP" = ( /obj/structure/cable, /obj/item/radio/intercom/prison/directional/north, @@ -18816,6 +19639,19 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"fEe" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Dormitory" + }, +/obj/effect/landmark/navigate_destination, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) "fEA" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance{ @@ -18827,6 +19663,17 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/security/processing) +"fEL" = ( +/obj/machinery/holopad, +/obj/machinery/duct, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/engineering/lobby) "fER" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 4 @@ -18855,11 +19702,6 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) -"fEY" = ( -/obj/item/stack/rods/two, -/obj/item/stack/sheet/iron, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "fEZ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -18872,6 +19714,13 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"fFe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "fFi" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -18914,18 +19763,11 @@ /obj/effect/decal/cleanable/greenglow, /turf/open/floor/iron/dark, /area/station/maintenance/disposal) -"fFJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/obj/structure/disposalpipe/junction/flip{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) +"fFQ" = ( +/obj/structure/tank_dispenser, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) "fGn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18944,24 +19786,10 @@ }, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) -"fGr" = ( -/obj/structure/chair/sofa/bench{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "fGI" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison/workout) -"fGJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon/keep_below, -/area/station/maintenance/port/lesser) "fGM" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -18970,11 +19798,21 @@ dir = 8 }, /area/station/security/brig/entrance) -"fHb" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/cold_temp, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) +"fGQ" = ( +/obj/effect/turf_decal/bot, +/obj/effect/landmark/start/hangover, +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"fGY" = ( +/obj/machinery/smartfridge/organ, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "surgery"; + name = "Surgery Shutter" + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/aft) "fHg" = ( /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron/dark/side, @@ -18987,32 +19825,17 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"fHz" = ( -/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/machinery/camera{ - c_tag = "Medbay North"; - network = list("ss13","medbay") - }, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) -"fHC" = ( -/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, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "fHK" = ( /obj/machinery/holopad, /turf/open/floor/carpet, /area/station/command/meeting_room) +"fHO" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "fHQ" = ( /obj/machinery/atmospherics/pipe/smart/simple/violet/visible{ dir = 5 @@ -19039,21 +19862,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"fHY" = ( -/obj/item/kirbyplants/random, -/obj/machinery/button/door/directional/south{ - id = "stationawaygate"; - name = "Gateway Access Shutter Control"; - pixel_x = 6; - req_access = list("gateway") +"fHV" = ( +/obj/machinery/mineral/stacking_unit_console{ + pixel_x = -32 }, -/obj/machinery/vending/wallmed/directional/west, -/obj/machinery/light_switch/directional/south{ - pixel_x = -6 +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Disposals" }, -/obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/dark, -/area/station/command/gateway) +/area/station/maintenance/disposal) "fHZ" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -19062,18 +19883,6 @@ dir = 1 }, /area/mine/eva/lower) -"fIb" = ( -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison/rec) -"fIn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "fIs" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -19100,18 +19909,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"fJd" = ( -/obj/item/kirbyplants/random, -/obj/structure/sign/warning/pods/directional/west, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/station/hallway/secondary/entry) "fJe" = ( /obj/machinery/door/airlock/external{ name = "Atmospherics External Airlock" @@ -19139,6 +19936,20 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/science/ordnance/office) +"fJA" = ( +/obj/structure/bodycontainer/morgue/beeper_off{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/medical/morgue) "fJF" = ( /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/east, @@ -19154,6 +19965,16 @@ }, /turf/open/floor/engine/n2, /area/station/engineering/atmos) +"fJS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"fJZ" = ( +/obj/effect/turf_decal/tile/red, +/obj/structure/railing/corner, +/turf/open/floor/iron/textured, +/area/station/security/brig) "fKe" = ( /obj/machinery/camera/directional/west{ c_tag = "Engineering West" @@ -19180,11 +20001,6 @@ /obj/machinery/iv_drip, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"fKk" = ( -/obj/item/kirbyplants/fern, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "fKr" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -19197,6 +20013,9 @@ /obj/structure/fluff/tram_rail, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) +"fKw" = ( +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/labor_camp) "fKF" = ( /obj/effect/turf_decal/plaque{ icon_state = "L7" @@ -19224,6 +20043,23 @@ /obj/machinery/status_display/ai/directional/east, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"fKR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) +"fKV" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "fKW" = ( /obj/machinery/camera/directional/north{ c_tag = "Security - Upper Permabrig Hallway North"; @@ -19235,10 +20071,22 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) -"fLa" = ( -/obj/effect/turf_decal/weather/snow/corner, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) +"fKZ" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/kitchen) "fLb" = ( /obj/structure/sink/directional/west, /obj/structure/mirror/directional/east, @@ -19270,31 +20118,32 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory/upper) -"fLC" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/wood/large, -/area/mine/eva/lower) -"fLG" = ( -/obj/structure/railing/corner/end/flip{ - dir = 4 +"fLu" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/siding/white/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron, /area/station/service/hydroponics) -"fLH" = ( -/obj/machinery/computer/station_alert{ - dir = 4 +"fLx" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/railing{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/security/telescreen/ce/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/chapel) +"fLC" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/wood/large, +/area/mine/eva/lower) "fLK" = ( /obj/structure/railing/corner{ dir = 8 @@ -19333,11 +20182,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/mine/laborcamp/security) -"fLU" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 4 - }, -/area/station/science/research) "fLY" = ( /obj/structure/table, /obj/item/stock_parts/micro_laser{ @@ -19363,39 +20207,38 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"fMg" = ( -/obj/structure/rack, -/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 +"fMt" = ( +/obj/effect/turf_decal/bot{ + dir = 1 }, -/obj/item/reagent_containers/cup/bottle/formaldehyde{ - pixel_x = 1 +/obj/machinery/suit_storage_unit/engine, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/engine_smes) +"fMC" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/dice{ + pixel_y = 5; + pixel_x = -4 }, -/obj/structure/sign/warning/no_smoking/directional/north, -/turf/open/floor/iron/dark/textured_edge{ +/obj/effect/spawner/random/entertainment/money_small, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"fME" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/blue{ dir = 8 }, -/area/station/medical/chem_storage) -"fMq" = ( -/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/light/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"fMZ" = ( /obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) -"fMu" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/crushed_can, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/item/wrench, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "fNa" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, @@ -19421,34 +20264,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"fNy" = ( -/obj/structure/rack, -/obj/item/clothing/suit/hooded/wintercoat{ - pixel_x = 3; - pixel_y = 3 +"fNB" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 }, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/winterboots, -/obj/structure/sign/warning/gas_mask/directional/west, -/obj/machinery/light/small/directional/west, -/obj/machinery/mining_weather_monitor/directional/north, -/obj/effect/turf_decal/delivery/red, -/obj/machinery/camera/directional/north{ - c_tag = "Arrivals External Access"; - dir = 9 +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/iron/textured, -/area/station/hallway/secondary/entry) -"fNz" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/structure/crate, -/obj/effect/spawner/random/maintenance/two, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"fNA" = ( -/turf/open/openspace, -/area/station/medical/medbay/central) +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "fNK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19464,18 +20288,47 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter) -"fOg" = ( -/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/plating, -/area/station/maintenance/starboard/fore) +"fNZ" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "fOl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/explab) +"fOq" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"fOs" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Quartermaster's Office" + }, +/obj/structure/table, +/obj/item/coin/silver, +/obj/item/computer_disk/quartermaster, +/obj/item/computer_disk/quartermaster, +/obj/item/computer_disk/quartermaster, +/obj/item/clipboard, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) +"fOH" = ( +/obj/structure/fence/post{ + dir = 1 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "fOR" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/airalarm/directional/east, @@ -19484,6 +20337,22 @@ dir = 9 }, /area/station/science/lab) +"fOS" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"fOU" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "fPb" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, @@ -19491,12 +20360,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"fPh" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 4 +"fPc" = ( +/obj/structure/fence{ + dir = 8 }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "fPv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -19514,13 +20383,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"fPO" = ( -/obj/machinery/light/small/directional/north, -/obj/machinery/computer/security/telescreen/test_chamber/directional/north, -/turf/open/floor/iron/white/side{ - dir = 1 +"fPI" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/area/station/command/heads_quarters/rd) +/obj/item/kirbyplants/organic/plant10, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "fPP" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -19556,28 +20430,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"fQa" = ( -/obj/structure/railing/wooden_fence{ - dir = 6 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "fQc" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 1 }, /turf/open/floor/iron, /area/station/engineering/atmos) +"fQe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Service - Electrical Maintenace Lower" + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/starboard/lesser) "fQk" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair/stool/directional/east, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"fQs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "fQu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19600,12 +20472,6 @@ dir = 1 }, /area/station/security/prison) -"fQU" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/engine_smes) "fRb" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -19616,6 +20482,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/pink, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"fRq" = ( +/obj/structure/closet/boxinggloves, +/obj/machinery/light/directional/north, +/obj/item/clothing/shoes/jackboots, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/clock/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) "fRv" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/engine, @@ -19629,13 +20505,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/dark, /area/station/medical/virology) -"fSd" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/structure/railing/corner, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) "fSi" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/line{ @@ -19657,16 +20526,42 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"fSs" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "fSv" = ( /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) -"fSC" = ( -/obj/effect/turf_decal/bot, -/obj/effect/landmark/start/hangover, -/obj/structure/sign/warning/electric_shock/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +"fSB" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) +"fSP" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/table, +/obj/item/clothing/head/utility/welding{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/clothing/head/utility/welding{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/clothing/head/utility/welding, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) "fTb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19676,11 +20571,16 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) -"fTn" = ( -/obj/effect/spawner/random/structure/grille, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"fTi" = ( +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) "fTo" = ( /obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 @@ -19730,6 +20630,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"fTH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "fTR" = ( /obj/machinery/light/directional/north, /obj/structure/sign/warning/electric_shock/directional/north, @@ -19779,17 +20684,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/iron, /area/station/hallway/primary/port) -"fUx" = ( -/obj/effect/landmark/generic_maintenance_landmark, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) -"fUI" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/engineering/storage/tech) "fUL" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -19809,11 +20703,33 @@ "fUR" = ( /turf/closed/wall, /area/station/hallway/secondary/entry) -"fVh" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) +"fUW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"fVf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "fVm" = ( /obj/machinery/door/airlock/maintenance{ name = "Chemical Storage" @@ -19832,16 +20748,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"fVC" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/ecto_sniffer{ - pixel_x = 6; - pixel_y = 6 - }, +"fVy" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/south, /turf/open/floor/iron, -/area/station/science/robotics/lab) +/area/station/command/heads_quarters/ce) "fVD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/engineering{ @@ -19889,6 +20799,13 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/iron, /area/station/service/janitor) +"fVU" = ( +/obj/structure/chair/stool/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/gateway) "fWa" = ( /obj/structure/chair/wood{ dir = 4 @@ -19898,44 +20815,11 @@ }, /turf/open/floor/wood, /area/station/security/prison/rec) -"fWd" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Hydroponics Maintenance" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/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, -/turf/open/floor/plating, -/area/station/service/hydroponics) "fWe" = ( /obj/machinery/hydroponics/soil, /obj/item/plant_analyzer, /turf/open/floor/grass, /area/station/security/prison/garden) -"fWn" = ( -/obj/structure/table/glass, -/obj/machinery/vending/wallmed/directional/north, -/obj/item/book/manual/wiki/surgery{ - pixel_x = -4; - pixel_y = 3 - }, -/obj/machinery/camera{ - c_tag = "Surgery A"; - dir = 1; - network = list("ss13","medbay"); - pixel_x = 22 - }, -/obj/item/surgery_tray/full, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/fore) "fWo" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19948,16 +20832,6 @@ /obj/structure/railing/corner, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"fWE" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/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/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "fWL" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -19979,18 +20853,21 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"fWQ" = ( +/obj/machinery/flasher/directional/north{ + id = "Cell 2" + }, +/obj/structure/bed{ + dir = 1; + pixel_x = -2 + }, +/turf/open/floor/iron/smooth, +/area/station/security/brig) "fWS" = ( /obj/structure/mineral_door/wood, /obj/structure/barricade/wooden/crude/snow, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) -"fWW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/wood{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "fWX" = ( /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating/snowed/icemoon, @@ -20004,16 +20881,6 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) -"fXo" = ( -/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/neutral/anticorner/contrasted{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/commons/dorms) "fXr" = ( /turf/open/floor/iron/white/corner{ dir = 8 @@ -20024,17 +20891,24 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"fXw" = ( +/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/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) "fXy" = ( /obj/structure/cable, /obj/machinery/computer/prisoner/management, /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/mine/laborcamp/security) -"fXF" = ( -/obj/structure/table/wood, -/obj/item/pai_card, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) +"fXL" = ( +/obj/structure/sign/poster/official/here_for_your_safety/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "fXO" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -20042,15 +20916,19 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) -"fXP" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +"fXQ" = ( +/obj/structure/railing{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"fXX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/mine/laborcamp) +/obj/machinery/door/airlock/maintenance_hatch{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "fYi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20059,16 +20937,35 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison/work) -"fYF" = ( -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/openspace, -/area/station/commons/storage/mining) +"fYz" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"fYE" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/obj/item/paper/fluff/ids_for_dummies, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "fYH" = ( /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/mine/eva/lower) +"fYJ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) "fYO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -20082,19 +20979,26 @@ "fYS" = ( /turf/closed/wall, /area/station/commons/storage/primary) +"fYT" = ( +/obj/structure/fence/corner{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "fYW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) -"fYX" = ( -/obj/structure/chair/stool/directional/north, -/obj/structure/disposalpipe/segment{ +"fYY" = ( +/obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/bot, /turf/open/floor/iron, -/area/station/commons/fitness) +/area/station/engineering/atmos/storage) "fZb" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "miner-passthrough" @@ -20118,18 +21022,38 @@ /obj/structure/curtain/cloth, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) -"fZO" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central) -"fZT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"fZy" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ dir = 4 }, -/obj/effect/mapping_helpers/broken_floor, +/turf/open/openspace, +/area/station/science/ordnance/office) +"fZA" = ( +/obj/machinery/button/door/directional/west{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Door"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"fZH" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck{ + pixel_y = 13; + pixel_x = 6 + }, +/obj/effect/spawner/random/entertainment/cigarette, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"fZK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/structure/sign/clock/directional/north, /turf/open/floor/wood, -/area/station/maintenance/aft/greater) +/area/station/commons/vacant_room/office) "fZV" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -20184,10 +21108,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/cargo/storage) -"gar" = ( -/obj/structure/lattice/catwalk, -/turf/open/misc/asteroid/snow/icemoon, -/area/station/maintenance/aft/greater) "gas" = ( /obj/structure/table, /obj/machinery/camera/directional/east{ @@ -20221,6 +21141,25 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) +"gaA" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/graveyard) +"gaC" = ( +/obj/structure/closet/lasertag/red, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) +"gaF" = ( +/obj/item/toy/snowball{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/machinery/light/small/directional/west, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "gaS" = ( /obj/item/hot_potato/harmless/toy, /obj/structure/table/wood, @@ -20276,16 +21215,6 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) -"gbz" = ( -/obj/structure/sign/warning/secure_area/directional/west, -/obj/structure/sign/warning/secure_area/directional/west, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) -"gbC" = ( -/obj/machinery/vending/dinnerware, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "gbJ" = ( /obj/machinery/door/airlock/security/glass{ name = "Armory" @@ -20296,6 +21225,23 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory/upper) +"gbK" = ( +/obj/structure/rack, +/obj/item/clothing/suit/utility/beekeeper_suit, +/obj/item/clothing/head/utility/beekeeper_head, +/obj/item/melee/flyswatter, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Botany Lower Entrance" + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "gbL" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -20310,10 +21256,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"gbM" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle, -/turf/open/floor/plating, -/area/station/maintenance/fore) "gbP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -20321,17 +21263,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/storage) -"gcf" = ( -/obj/structure/table, -/obj/item/storage/bag/tray, -/obj/item/knife/kitchen{ - pixel_y = 2 - }, -/obj/effect/turf_decal/siding/white{ - dir = 10 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "gck" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20348,22 +21279,27 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"gcy" = ( -/obj/effect/turf_decal/stripes/line{ +"gcP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/chair/stool/bar/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"gcT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"gcU" = ( +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, -/obj/machinery/door/firedoor/heavy, -/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/science/ordnance) -"gcB" = ( -/obj/item/pickaxe/improvised{ - pixel_x = 7 - }, -/turf/open/misc/asteroid/snow/coldroom, -/area/icemoon/underground/explored) +/area/station/medical/morgue) "gcV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -20376,14 +21312,11 @@ /obj/item/food/piedough, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"gdg" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 8 - }, -/obj/structure/sign/warning/fire/directional/south, -/turf/open/openspace/icemoon/keep_below, -/area/icemoon/underground/explored) +"gdc" = ( +/obj/effect/turf_decal/tile/blue, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "gdv" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, @@ -20416,13 +21349,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"gdK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gdN" = ( /obj/structure/railing/corner{ dir = 1 @@ -20432,24 +21358,10 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"gdO" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/vending/cigarette, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "gdP" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"gdS" = ( -/obj/machinery/shower/directional/north, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/turf/open/floor/iron/smooth, -/area/mine/eva/lower) "gdY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20463,6 +21375,30 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"gec" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/table_or_rack, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/spawner/random/engineering/toolbox, +/obj/effect/turf_decal/siding/wood, +/obj/effect/spawner/random/trash/janitor_supplies, +/obj/structure/sign/poster/contraband/the_griffin/directional/north, +/turf/open/floor/iron/grimy, +/area/station/commons/vacant_room/office) +"gee" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/mine/eva) "geg" = ( /obj/machinery/light/directional/north, /obj/effect/decal/cleanable/dirt, @@ -20493,6 +21429,16 @@ /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron, /area/station/commons/locker) +"get" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/status_display/supply{ + pixel_y = -32 + }, +/turf/open/floor/iron/dark, +/area/station/cargo/miningdock) "geJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20526,6 +21472,20 @@ "gfb" = ( /turf/closed/wall/r_wall, /area/station/maintenance/central/greater) +"gff" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/duct, +/obj/machinery/camera/directional/north{ + c_tag = "Virology Module North"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "gfo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20540,18 +21500,6 @@ /obj/structure/table, /turf/open/floor/plating, /area/mine/eva/lower) -"gfy" = ( -/obj/machinery/camera{ - c_tag = "Morgue North"; - dir = 9; - network = list("ss13","medbay") - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "gfC" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/light_construct/directional/south, @@ -20565,17 +21513,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/commons/storage/art) -"gfY" = ( -/obj/effect/spawner/random/structure/tank_holder, -/obj/structure/sign/poster/official/wtf_is_co2/directional/east, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "gga" = ( /obj/machinery/light/small/directional/west, /obj/effect/spawner/random/trash/hobo_squat, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"gge" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "ggn" = ( /obj/machinery/door/airlock/atmos{ name = "Atmospherics Maintenance" @@ -20588,15 +21535,23 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"ggv" = ( -/obj/effect/turf_decal/bot, -/obj/structure/sign/warning/xeno_mining{ - pixel_x = 2; - pixel_y = -32 +"ggz" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 }, -/obj/machinery/shower/directional/north, -/turf/open/floor/iron/smooth, -/area/mine/eva) +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south{ + frequency = 1453; + name = "Kitchen Intercom" + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ggG" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -20607,10 +21562,6 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) -"ggS" = ( -/obj/structure/sign/warning/biohazard/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "ggV" = ( /obj/machinery/conveyor{ id = "gulag" @@ -20619,14 +21570,13 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/mine/laborcamp) -"ghj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/binary/pump{ - name = "Gas to Chamber" +"ghb" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/engine, -/area/station/engineering/supermatter) +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "ghl" = ( /obj/machinery/light/directional/north, /turf/open/floor/iron, @@ -20641,12 +21591,16 @@ /obj/structure/closet/crate, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"ghA" = ( -/obj/structure/railing/wooden_fence{ - dir = 5 +"ghD" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 }, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/vending/wardrobe/hydro_wardrobe, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ghE" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/directional/west{ @@ -20668,30 +21622,25 @@ /obj/structure/sink/directional/east, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"ghQ" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/border_only, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron/dark/side, -/area/mine/eva) -"ghT" = ( -/obj/machinery/newscaster/directional/north, -/obj/structure/table/wood, -/obj/machinery/light/small/directional/north, -/obj/item/toy/figure/mime{ - pixel_x = -6 - }, -/obj/item/toy/figure/clown{ - pixel_x = 4 - }, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "ghY" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/atmos) +"gib" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Medbay South"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "gif" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20700,20 +21649,26 @@ /obj/structure/sign/warning/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"giH" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/barsign/all_access/directional/north, -/obj/effect/turf_decal/siding/wood, -/obj/structure/disposalpipe/segment{ +"giv" = ( +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/iron, -/area/station/service/bar) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) "giN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/yellow/line, /turf/open/floor/iron/dark/side, /area/station/security/prison/workout) +"giO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/fore) "giP" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -20734,14 +21689,6 @@ }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"giR" = ( -/obj/structure/table, -/obj/item/relic, -/obj/effect/spawner/random/maintenance, -/obj/item/screwdriver, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron/checker, -/area/station/maintenance/port/fore) "giV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20781,6 +21728,11 @@ "gjq" = ( /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) +"gjI" = ( +/obj/effect/spawner/random/structure/tank_holder, +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) "gjM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -20788,17 +21740,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"gjN" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/entry) "gjP" = ( /obj/structure/table, /obj/item/clothing/gloves/cargo_gauntlet, @@ -20814,13 +21755,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/wood, /area/station/security/courtroom) -"gjT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "gjW" = ( /obj/structure/chair, /turf/open/floor/iron/cafeteria, @@ -20857,12 +21791,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"gkH" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/entertainment/cigarette, -/obj/effect/spawner/random/entertainment/lighter, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "gkK" = ( /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ color = "#0000ff"; @@ -20878,6 +21806,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/lobby) +"gkN" = ( +/obj/machinery/vending/autodrobe, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) "gkP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20894,6 +21826,16 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"gkX" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle/epinephrine, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 6 + }, +/obj/item/reagent_containers/syringe, +/obj/effect/turf_decal/tile/blue/full, +/turf/open/floor/iron/large, +/area/station/medical/treatment_center) "gkY" = ( /obj/machinery/atmospherics/components/binary/pump/off{ dir = 1; @@ -20920,18 +21862,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"gle" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/warning/cold_temp{ - pixel_x = -2; - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron/dark/side, -/area/mine/eva/lower) "glh" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/aft) @@ -20958,6 +21888,19 @@ /obj/machinery/light/floor, /turf/open/floor/iron/white, /area/station/medical/virology) +"glz" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) "glC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -21015,11 +21958,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/white, /area/station/medical/virology) -"gmt" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/food_cart, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "gmJ" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port to Infiltrate/Filter" @@ -21092,9 +22030,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"gnE" = ( -/obj/machinery/hydroponics/constructable, -/turf/open/floor/grass, +"gnJ" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, /area/station/service/hydroponics) "gnL" = ( /obj/structure/closet/bombcloset/security, @@ -21108,32 +22053,52 @@ }, /turf/open/floor/wood, /area/station/command/meeting_room) -"gnR" = ( -/obj/structure/toilet/greyscale{ - cistern_open = 1; - dir = 1 +"gnT" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/security/prison/toilet) -"gnZ" = ( -/obj/structure/marker_beacon/burgundy, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/obj/structure/sign/departments/medbay/alt/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"gnX" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"goa" = ( +/obj/machinery/chem_heater/withbuffer, +/obj/effect/turf_decal/tile/yellow/full, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/pharmacy) "gob" = ( /obj/structure/closet/wardrobe/black, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"goc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/smartfridge/organ, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"goq" = ( -/turf/open/openspace, -/area/station/science/research) +"god" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/door/window/left/directional/west{ + name = "Secure Art Exhibition"; + req_access = list("library") + }, +/obj/effect/spawner/random/structure/table_fancy, +/obj/structure/sign/painting/library_secure{ + pixel_x = 32 + }, +/turf/open/floor/wood, +/area/station/service/library) +"goe" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "gov" = ( /obj/machinery/door/window/left/directional/west{ name = "Janitorial Delivery"; @@ -21143,6 +22108,21 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/iron, /area/station/service/janitor) +"goy" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/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/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) "goB" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -21173,11 +22153,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/office) -"goJ" = ( -/obj/structure/flora/rock/pile/jungle/style_random, -/mob/living/carbon/human/species/monkey, -/turf/open/floor/grass, -/area/station/medical/virology) +"goY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "gpj" = ( /obj/structure/chair/sofa/corp/right{ dir = 8 @@ -21185,9 +22165,34 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"gpo" = ( +/obj/structure/sign/warning/directional/south, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) "gpp" = ( /turf/open/floor/iron, /area/station/hallway/primary/port) +"gpr" = ( +/obj/machinery/restaurant_portal/bar, +/obj/effect/turf_decal/delivery/red, +/obj/machinery/barsign/directional/south, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) +"gps" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/microwave, +/obj/machinery/camera/directional/north{ + c_tag = "Mining B-1 Crater Observatory"; + network = list("ss13", "mine") + }, +/obj/effect/turf_decal/tile/dark/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white/side, +/area/mine/living_quarters) "gpt" = ( /obj/machinery/button/door/directional/east{ id = "kanyewest"; @@ -21199,6 +22204,35 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) +"gpB" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat_interior) +"gpM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"gpR" = ( +/obj/structure/cable, +/obj/machinery/light/dim/directional/south, +/obj/machinery/requests_console/directional/south{ + department = "Medbay"; + name = "Medbay Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/iron/white, +/area/station/medical/cryo) +"gpS" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 8 + }, +/obj/structure/noticeboard/directional/south, +/turf/open/floor/wood/large, +/area/station/service/bar/atrium) "gpU" = ( /obj/structure/frame/computer, /obj/item/stack/cable_coil/five, @@ -21249,10 +22283,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos) -"gqG" = ( -/obj/structure/sign/warning, -/turf/closed/wall/ice, -/area/icemoon/underground/explored) "gqK" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -21271,32 +22301,23 @@ dir = 8 }, /area/station/command/heads_quarters/rd) -"gqZ" = ( -/obj/machinery/status_display/door_timer{ - id = "Cell 2"; - name = "Cell 2"; - pixel_x = -32 - }, +"gra" = ( +/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, +/obj/machinery/door/airlock/medical/glass, /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 - }, -/turf/open/floor/iron/textured, -/area/station/security/brig) -"grg" = ( -/obj/item/toy/snowball{ - pixel_x = 6; - pixel_y = 5 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "grk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, /turf/open/floor/plating, /area/station/commons/dorms/laundry) +"grp" = ( +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "grr" = ( /obj/structure/table, /obj/item/storage/box/shipping, @@ -21311,15 +22332,10 @@ /obj/structure/sign/warning/cold_temp/directional/north, /turf/open/floor/iron, /area/station/cargo/storage) -"grs" = ( -/obj/structure/sign/warning/fire/directional/south, -/turf/open/floor/glass/reinforced, -/area/station/science/ordnance/office) "grA" = ( /obj/structure/table/reinforced, /obj/item/assembly/flash/handheld, /obj/item/assembly/flash/handheld, -/obj/machinery/newscaster/directional/west, /obj/item/wrench{ pixel_y = 17 }, @@ -21345,22 +22361,16 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"grL" = ( +/obj/machinery/light/small/directional/east, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/graveyard) "grN" = ( /obj/structure/chair{ dir = 8 }, /turf/open/floor/iron, /area/station/cargo/lobby) -"grO" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "grT" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -21371,13 +22381,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"grU" = ( -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 +"gsd" = ( +/obj/structure/fence/corner{ + dir = 4 }, -/turf/open/floor/iron, -/area/station/security/prison/visit) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "gsk" = ( /obj/structure/reflector/single/anchored{ dir = 5 @@ -21387,15 +22396,17 @@ "gst" = ( /turf/closed/wall, /area/station/commons/vacant_room/commissary) -"gsF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 +"gsI" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, -/obj/item/radio/intercom/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron/dark/side, -/area/mine/eva) +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "gsK" = ( /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/weather/snow/corner{ @@ -21440,6 +22451,16 @@ /obj/effect/turf_decal/tile/neutral/diagonal_edge, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) +"gtB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) "gtF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -21452,17 +22473,19 @@ /obj/effect/spawner/random/vending/colavend, /turf/open/floor/iron, /area/station/commons/locker) -"gua" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"guA" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/bar) +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) +"guO" = ( +/obj/item/stack/sheet/mineral/wood, +/obj/effect/decal/cleanable/generic, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "guS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21497,13 +22520,14 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"gvi" = ( -/obj/effect/turf_decal/siding/wideplating_new/light{ - dir = 4 +"gvf" = ( +/obj/machinery/button/door/directional/east{ + id = "xenobio8"; + name = "Xenobio Pen 8 Blast DOors"; + req_access = list("xenobiology") }, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/iron/showroomfloor, -/area/station/security/prison/work) +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "gvj" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -21517,28 +22541,36 @@ /obj/machinery/light/small/dim/directional/west, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"gvr" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "gvK" = ( /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/dark, /area/station/service/chapel) -"gvM" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/smartfridge/extract/preloaded, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron, -/area/station/science/xenobiology) -"gwb" = ( -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"gwm" = ( -/obj/structure/railing/corner/end/flip{ +"gwl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/red{ dir = 4 }, -/turf/open/floor/iron/white/side{ - dir = 9 +/obj/machinery/light/directional/north, +/obj/machinery/button/door/directional/north{ + id = "Secure Gate"; + name = "Cell Shutters"; + req_access = list("brig") }, -/area/station/science/research) +/obj/machinery/button/door/directional/north{ + id = "Prison Gate"; + name = "Prison Wing Lockdown"; + req_access = list("brig"); + pixel_y = 35 + }, +/turf/open/floor/iron/textured, +/area/station/security/brig) "gwp" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral/full, @@ -21599,6 +22631,17 @@ dir = 4 }, /area/station/maintenance/port/fore) +"gwW" = ( +/obj/structure/ladder, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"gxg" = ( +/obj/structure/cable, +/turf/open/floor/stone, +/area/station/commons/lounge) "gxh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -21618,10 +22661,6 @@ /obj/item/radio/intercom/prison/directional/south, /turf/open/floor/iron/dark, /area/station/security/prison/rec) -"gxz" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/open/misc/asteroid/snow/coldroom, -/area/station/service/kitchen/coldroom) "gxO" = ( /obj/structure/table/reinforced, /obj/item/hand_labeler{ @@ -21654,22 +22693,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/mine/eva) -"gxT" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Fitness" - }, -/obj/structure/cable, -/obj/machinery/duct, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/station/commons/fitness) "gxU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21682,15 +22705,27 @@ /obj/item/storage/medkit/regular, /turf/open/floor/iron, /area/station/commons/dorms) -"gyf" = ( -/obj/structure/table/wood, -/obj/machinery/newscaster/directional/south, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box{ - pixel_x = 4 +"gyd" = ( +/obj/machinery/space_heater, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"gyg" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 }, +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/cup/watering_can, /turf/open/floor/iron/dark, -/area/station/service/chapel) +/area/station/service/hydroponics) "gyH" = ( /obj/machinery/light/directional/north, /obj/machinery/vending/coffee, @@ -21698,14 +22733,19 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"gyP" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/event_spawn, -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/parquet, -/area/station/service/bar/backroom) +"gyO" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/cytology{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/storage/box/swab{ + pixel_y = 7; + pixel_x = 7 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "gyR" = ( /turf/closed/wall/r_wall, /area/station/engineering/main) @@ -21723,6 +22763,35 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"gzH" = ( +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/research{ + name = "Ordnance Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/ordnance/office) +"gzI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) +"gzJ" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/box, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "gzV" = ( /obj/structure/mineral_door/paperframe{ name = "Meditation Room" @@ -21736,14 +22805,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"gAd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light/small/dim/directional/north, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "gAk" = ( /obj/machinery/airalarm/directional/east, /obj/structure/closet/l3closet/scientist, @@ -21767,25 +22828,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/visit) -"gAw" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 +"gAz" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 4 }, /obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) "gAB" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/decal/cleanable/dirt, @@ -21798,44 +22847,28 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"gAG" = ( -/obj/machinery/modular_computer/preset/civilian, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) +"gAM" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/obj/structure/sign/warning/cold_temp/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "gAR" = ( /obj/structure/falsewall, /turf/open/floor/plating, /area/station/security/prison) -"gAY" = ( -/obj/structure/sign/warning/cold_temp/directional/west, -/turf/open/floor/iron, -/area/station/cargo/miningdock) -"gAZ" = ( -/obj/structure/rack, -/obj/item/clothing/suit/hooded/wintercoat/science{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/clothing/shoes/winterboots{ - pixel_x = -7; - pixel_y = -1 - }, -/obj/item/biopsy_tool{ - pixel_x = 8; - pixel_y = 3 - }, -/obj/item/gps/mining{ - pixel_x = -7; - pixel_y = -3 +"gAV" = ( +/obj/structure/railing{ + dir = 4 }, -/obj/item/knife/combat/survival{ - pixel_x = 4; - pixel_y = -3 +/obj/structure/stairs/south, +/turf/open/floor/iron/stairs/medium{ + dir = 1 }, -/obj/structure/sign/warning/gas_mask/directional/north, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) +/area/station/security/prison) +"gAZ" = ( +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "gBb" = ( /obj/machinery/door/window/right/directional/west{ name = "Containment Pen 3"; @@ -21859,14 +22892,6 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"gBl" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/icemoon/underground/explored) -"gBs" = ( -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gBv" = ( /obj/machinery/door/window/left/directional/south{ name = "Engineering Delivery"; @@ -21884,10 +22909,18 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"gBI" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/hallway/secondary/exit/departure_lounge) +"gBJ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/bar) "gBX" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/hollow/reinforced/middle{ @@ -21937,15 +22970,15 @@ /obj/effect/turf_decal/siding/white, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"gCs" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/sign/poster/contraband/missing_gloves/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) "gCu" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"gCG" = ( -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "gCK" = ( /obj/structure/chair/office{ dir = 8 @@ -21955,6 +22988,12 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"gCV" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "gCY" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -21977,18 +23016,31 @@ /turf/open/floor/wood, /area/station/security/courtroom) "gDh" = ( -/obj/structure/flora/grass/brown/style_random, -/obj/structure/sign/nanotrasen{ - pixel_y = -32 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/obj/structure/rack, +/obj/item/pickaxe, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/turf/open/floor/plating, +/area/station/commons/dorms/laundry) "gDp" = ( /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/department/medical/central) +"gDq" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"gDv" = ( +/obj/structure/table, +/obj/item/clothing/suit/apron/chef, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/processor, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "gDz" = ( /obj/structure/table/glass, /obj/item/reagent_containers/cup/glass/bottle/amaretto{ @@ -22006,22 +23058,20 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"gDB" = ( -/obj/machinery/oven/range, -/obj/effect/turf_decal/siding/white/corner, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) -"gDL" = ( -/obj/structure/chair/wood{ +"gDE" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/item/toy/plush/moth{ - name = "Theseus" +/obj/machinery/door/airlock/maintenance{ + name = "Xenobiology Maintenance" }, -/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/structure/sign/warning/biohazard/directional/north, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/maintenance/aft/greater) "gDN" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -22040,33 +23090,9 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"gDY" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "gDZ" = ( /turf/open/floor/wood, /area/station/maintenance/port/fore) -"gEb" = ( -/obj/machinery/button/door/directional/west{ - id = "riot"; - name = "Anti-Riot Shutters"; - pixel_x = -7; - pixel_y = 32; - req_access = list("security") - }, -/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 = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "gEd" = ( /obj/machinery/camera/directional/east{ c_tag = "MiniSat External SouthWest"; @@ -22075,20 +23101,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"gEe" = ( -/obj/structure/table, -/obj/item/binoculars, -/obj/machinery/computer/security/telescreen/ordnance/directional/north, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) -"gEl" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gEn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22112,11 +23124,22 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/plating, /area/station/engineering/storage_shared) -"gEt" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +"gEy" = ( +/obj/structure/table, +/obj/item/computer_disk/ordnance, +/obj/item/computer_disk/ordnance{ + pixel_y = 4; + pixel_x = -5 + }, +/obj/item/computer_disk{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/item/aicard, +/turf/open/floor/iron/white/side{ + dir = 4 + }, +/area/station/command/heads_quarters/rd) "gEE" = ( /turf/open/openspace, /area/station/service/chapel) @@ -22130,6 +23153,9 @@ /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/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) "gEV" = ( @@ -22138,18 +23164,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/hallway/secondary/exit/departure_lounge) -"gEX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/dim/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"gEZ" = ( -/obj/structure/railing, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gFj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -22157,19 +23171,15 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/security/detectives_office) -"gFt" = ( -/obj/effect/spawner/random/engineering/canister, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"gFx" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/gas_mask, -/turf/open/floor/plating/icemoon, -/area/station/maintenance/solars/port/aft) "gFH" = ( /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gFI" = ( +/obj/machinery/telecomms/server/presets/security, +/obj/structure/sign/warning/no_smoking/circle/directional/north, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) "gFL" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -22178,24 +23188,6 @@ dir = 5 }, /area/station/hallway/secondary/entry) -"gFR" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/suit/utility/radiation, -/obj/item/clothing/head/utility/radiation, -/obj/item/geiger_counter, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/clothing/glasses/meson, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"gFW" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/turf/open/floor/wood/large, -/area/station/service/bar) "gFX" = ( /turf/closed/wall, /area/icemoon/underground/explored) @@ -22221,12 +23213,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"gGo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "gGs" = ( /obj/structure/closet/secure_closet/engineering_welding, /obj/machinery/newscaster/directional/west, @@ -22249,12 +23235,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/science/genetics) -"gGC" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage) "gGE" = ( /obj/structure/rack, /obj/item/clothing/suit/hooded/wintercoat{ @@ -22277,20 +23257,15 @@ /obj/structure/light_construct/directional/west, /turf/open/floor/plating, /area/station/construction) -"gGK" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) -"gGS" = ( -/obj/structure/railing, -/obj/effect/turf_decal/siding/white, -/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "cantena_curtains" +"gGI" = ( +/obj/structure/closet/l3closet, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay Storage"; + network = list("ss13","medbay") }, -/turf/open/floor/wood, -/area/station/commons/lounge) +/turf/open/floor/iron/dark, +/area/station/medical/storage) "gGZ" = ( /obj/machinery/computer/bank_machine, /obj/effect/turf_decal/bot_white, @@ -22306,10 +23281,6 @@ /obj/machinery/mineral/processing_unit_console, /turf/closed/wall, /area/mine/laborcamp) -"gHj" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/commons/dorms) "gHl" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer1{ dir = 8 @@ -22350,9 +23321,6 @@ /obj/effect/turf_decal/trimline/red/line, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"gHL" = ( -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/starboard/fore) "gHN" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 @@ -22377,26 +23345,24 @@ /obj/structure/chair/stool/directional/west, /turf/open/floor/iron/checker, /area/station/science/lab) -"gIf" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 +"gIh" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/starboard) -"gIl" = ( -/obj/structure/fence/corner{ - dir = 6 +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/biohazard/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"gIs" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "gIt" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/east, @@ -22416,6 +23382,10 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) +"gIJ" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/medical/morgue) "gIL" = ( /obj/machinery/door/airlock/security/glass{ name = "Secure Walkway" @@ -22428,37 +23398,18 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"gIN" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + 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/fitness) "gIY" = ( /turf/closed/wall, /area/station/medical/medbay/central) -"gJi" = ( -/obj/structure/table, -/obj/item/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/crowbar, -/obj/item/radio/headset/headset_sci{ - pixel_x = -3 - }, -/obj/machinery/newscaster/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/science/robotics/lab) "gJs" = ( /obj/machinery/portable_atmospherics/canister, /obj/structure/disposalpipe/segment, @@ -22474,12 +23425,31 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/dorms) +"gJD" = ( +/obj/item/reagent_containers/cup/soda_cans/beer{ + pixel_x = -7; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "gJK" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 }, /turf/open/floor/plating, /area/station/commons/dorms/laundry) +"gJN" = ( +/obj/machinery/rnd/production/circuit_imprinter, +/obj/machinery/requests_console/directional/east{ + department = "Engineering"; + name = "Engineering Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "gJT" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/white/side{ @@ -22529,6 +23499,11 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"gKE" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "gKG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/green{ @@ -22539,6 +23514,20 @@ "gKQ" = ( /turf/closed/wall, /area/station/security/courtroom) +"gKU" = ( +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "Bridge Blast Door"; + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) "gLj" = ( /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, @@ -22547,6 +23536,16 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central) +"gLn" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/railing/corner/end{ + dir = 1 + }, +/obj/structure/sign/warning/biohazard/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "gLu" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22571,33 +23570,63 @@ }, /turf/open/floor/plating, /area/station/cargo/sorting) -"gLS" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall/r_wall, -/area/station/science/xenobiology) +"gLU" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Public Mining Storage"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/iron/dark, +/area/mine/storage) +"gLX" = ( +/obj/structure/railing/wooden_fence{ + dir = 9 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "gLY" = ( -/obj/machinery/vatgrower, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/service/theater, /obj/structure/cable, -/turf/open/floor/iron/showroomfloor, -/area/station/security/prison/work) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "gLZ" = ( /obj/structure/table, /obj/item/flashlight/lamp, /turf/open/floor/wood, /area/station/maintenance/port/fore) -"gMi" = ( +"gMd" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/medical/morgue) +"gMl" = ( /obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen{ - pixel_x = -5 +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 }, -/obj/item/hand_labeler{ - pixel_y = -3 +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/plating, +/area/station/engineering/storage/tech) +"gMq" = ( +/obj/machinery/computer/cargo{ + dir = 4 }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +/obj/machinery/keycard_auth/wall_mounted/directional/west, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "gMt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/decal/cleanable/dirt/dust, @@ -22608,25 +23637,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"gMw" = ( -/obj/structure/sign/warning/gas_mask{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals."; - pixel_x = -29 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/smooth, -/area/mine/eva) -"gMx" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) "gMK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22642,25 +23652,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) -"gMN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/warning/secure_area/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner, -/area/station/engineering/atmos) -"gMT" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/maintenance/aft/greater) "gMZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22670,13 +23661,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"gNc" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/bar) "gNg" = ( /obj/machinery/camera/directional/north{ c_tag = "MiniSat External South"; @@ -22685,10 +23669,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"gNh" = ( -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "gNi" = ( /obj/structure/table, /obj/item/reagent_containers/cup/beaker/large{ @@ -22702,21 +23682,13 @@ /obj/item/reagent_containers/dropper, /turf/open/floor/iron/cafeteria, /area/station/science/lab) -"gNu" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle{ +"gNC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/dark/smooth_edge{ dir = 4 }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "botany_chasm_and_wolf_shutters" - }, -/turf/open/floor/plating, -/area/station/service/hydroponics) -"gNw" = ( -/obj/structure/flora/bush/grassy/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) +/area/station/command/gateway) "gNH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -22724,12 +23696,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/workout) -"gNJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/grimy, -/area/station/service/chapel/office) "gNL" = ( /obj/machinery/status_display/evac/directional/south, /obj/machinery/light/directional/south, @@ -22745,6 +23711,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"gOa" = ( +/obj/structure/cable, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "gOb" = ( /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ @@ -22754,15 +23727,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) -"gOd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/starboard/lesser) "gOg" = ( /obj/machinery/light/small/directional/west, /obj/machinery/camera/directional/west{ @@ -22791,11 +23755,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/lawoffice) -"gOq" = ( -/obj/effect/spawner/random/trash, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "gOx" = ( /obj/effect/turf_decal/loading_area, /obj/effect/turf_decal/tile/neutral/half/contrasted, @@ -22807,6 +23766,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) +"gOA" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron/white, +/area/station/science/ordnance) "gOI" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -22836,20 +23799,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"gPj" = ( -/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/machinery/door/airlock/hatch{ - name = "Morgue" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "gPn" = ( /obj/machinery/door/airlock/security/glass{ name = "Armory" @@ -22859,13 +23808,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/ai_monitored/security/armory/upper) -"gPo" = ( -/obj/effect/spawner/random/structure/chair_flipped{ - dir = 8 - }, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gPp" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -22873,18 +23815,13 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) -"gPB" = ( -/obj/structure/table/wood/poker, -/obj/effect/spawner/random/food_or_drink/refreshing_beverage, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"gPE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/cafeteria{ - dir = 8 +"gPC" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner{ + dir = 4 }, -/area/station/science/research) +/turf/open/openspace, +/area/station/science/ordnance/office) "gPR" = ( /obj/effect/turf_decal/trimline/green/filled/warning, /obj/machinery/duct, @@ -22951,6 +23888,18 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/prison/rec) +"gQI" = ( +/obj/machinery/door/airlock{ + id_tag = "Dorm4"; + name = "Dorm 4" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) "gQO" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel Office" @@ -22965,6 +23914,14 @@ /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office, /turf/open/floor/iron/dark, /area/station/service/chapel/office) +"gRg" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/sign/warning/gas_mask/directional/north{ + desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." + }, +/turf/open/floor/plating, +/area/station/cargo/drone_bay) "gRm" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, @@ -22993,30 +23950,26 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"gRE" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "botany_chasm_and_wolf_shutters" +"gRt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, -/turf/open/floor/plating, -/area/station/service/hydroponics) +/turf/open/floor/iron, +/area/station/engineering/engine_smes) +"gRA" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/test_chamber/directional/east{ + name = "Xenobio Monitor" + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "gRI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"gRL" = ( -/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/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gRZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -23025,8 +23978,35 @@ dir = 8 }, /obj/machinery/light/small/directional/south, +/obj/machinery/newscaster/directional/south, /turf/open/floor/iron, /area/station/security/prison/visit) +"gSd" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"gSl" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/structure/closet/secure_closet/medical1, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"gSq" = ( +/obj/machinery/rnd/production/circuit_imprinter/department/science, +/obj/machinery/button/door/directional/north{ + id = "rnd"; + name = "Shutters Control Button"; + req_access = list("research"); + dir = 2 + }, +/obj/machinery/light_switch/directional/north{ + pixel_y = 35 + }, +/turf/open/floor/iron/checker, +/area/station/science/lab) "gSr" = ( /obj/structure/table/reinforced, /obj/item/clothing/suit/utility/radiation, @@ -23051,19 +24031,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"gSK" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/mine/eva/lower) "gSN" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -23077,30 +24044,6 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron/dark/side, /area/mine/eva/lower) -"gSQ" = ( -/obj/structure/table, -/obj/item/crowbar/red, -/obj/item/stock_parts/power_store/cell/high{ - pixel_x = 6; - pixel_y = -3 - }, -/obj/structure/sign/poster/random/directional/west, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) -"gSU" = ( -/obj/item/popsicle_stick{ - pixel_y = 1; - pixel_x = -9 - }, -/obj/item/popsicle_stick{ - pixel_y = 3; - pixel_x = -2 - }, -/turf/open/misc/asteroid/snow/coldroom, -/area/icemoon/underground/explored) "gSV" = ( /obj/machinery/light/directional/south, /obj/structure/bodycontainer/morgue{ @@ -23110,39 +24053,44 @@ dir = 1 }, /area/station/service/chapel/office) -"gTb" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "QMLoad" - }, -/obj/effect/turf_decal/stripes/line{ +"gTa" = ( +/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/sign/warning/cold_temp/directional/west, -/obj/machinery/light/directional/west, -/turf/open/floor/plating, -/area/station/cargo/storage) +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/stool/bar/directional/north, +/obj/structure/cable, +/turf/open/floor/eighties, +/area/station/commons/lounge) "gTi" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay Chemistry Access" - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"gTq" = ( +/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/door/firedoor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"gTr" = ( /obj/structure/cable, +/obj/structure/holosign/barrier/atmos/sturdy, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/effect/turf_decal/tile/yellow/full, -/turf/open/floor/iron/large, -/area/station/medical/treatment_center) -"gTq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +/obj/machinery/door/poddoor/shutters{ + dir = 1; + id = "minecraft_shutter"; + name = "Cart Shutters" + }, +/obj/structure/minecart_rail{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/service/kitchen/coldroom) "gTw" = ( /obj/structure/railing{ dir = 8 @@ -23160,6 +24108,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/workout) +"gUa" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "gUg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -23189,13 +24142,12 @@ dir = 1 }, /area/station/security/processing) -"gUw" = ( -/obj/machinery/light/small/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) +"gUv" = ( +/obj/machinery/holopad, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "gUx" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -23210,19 +24162,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"gUT" = ( -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) -"gUX" = ( -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/test_chamber/directional/east{ - name = "Xenobio Monitor" - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "gUY" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -23234,10 +24173,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark, /area/station/science/breakroom) -"gVh" = ( -/obj/structure/chair/stool/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "gVm" = ( /obj/item/coin/silver{ pixel_x = -5; @@ -23250,12 +24185,6 @@ }, /turf/open/floor/plating, /area/station/commons/dorms/laundry) -"gVs" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/trash/hobo_squat, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "gVt" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/tile/red{ @@ -23271,18 +24200,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"gVC" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos{ - dir = 8 - }, -/obj/machinery/airlock_sensor/incinerator_atmos{ - pixel_y = 24 +"gVB" = ( +/obj/structure/chair/stool/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) +/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/commons/lounge) "gVD" = ( /obj/structure/closet/firecloset, /obj/item/radio/intercom/directional/west, @@ -23291,6 +24218,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"gVN" = ( +/obj/structure/flora/grass/green/style_random, +/obj/structure/sign/warning/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "gVO" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -23316,13 +24249,18 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"gVX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 +"gVV" = ( +/obj/structure/railing{ + dir = 4 }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/stone, -/area/station/service/bar/atrium) +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "gWf" = ( /obj/item/storage/box/lights/mixed, /obj/structure/table, @@ -23331,37 +24269,44 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/maintenance/department/medical/morgue) -"gWl" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 +"gWh" = ( +/obj/structure/rack, +/obj/machinery/light/small/dim/directional/north, +/obj/structure/sign/departments/maint/alt/directional/north, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"gWi" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 +/obj/machinery/door/airlock/freezer{ + desc = "The freezer where the chef keeps all the stuff that needs to be kept cold. Ice cold."; + name = "The Ice Box" }, -/obj/structure/table/glass, -/obj/machinery/reagentgrinder{ - pixel_y = 8; - pixel_x = 6 +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) +"gWn" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped{ + dir = 4; + name = "Exfiltrate Filter" }, -/obj/item/storage/box/syringes{ - pixel_y = 8; - pixel_x = -5 +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 10 }, -/obj/item/storage/box/beakers{ - pixel_y = 5; - pixel_x = -9 +/obj/effect/turf_decal/trimline/dark_red/filled/warning{ + dir = 5 }, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"gWr" = ( -/obj/structure/tank_dispenser, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/warning/directional/north, /turf/open/floor/iron/dark, -/area/station/science/ordnance/office) -"gWy" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/cold_temp, +/area/station/engineering/atmos/mix) +"gWV" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) +/area/station/maintenance/solars/starboard/fore) "gWX" = ( /obj/structure/chair{ dir = 4 @@ -23415,10 +24360,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"gXv" = ( -/obj/machinery/portable_atmospherics/pump/lil_pump, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/office) "gXy" = ( /obj/machinery/door/airlock/public/glass{ id_tag = "gulag2"; @@ -23435,12 +24376,23 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/lab) +"gXN" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "gYa" = ( /obj/structure/railing{ dir = 9 }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"gYd" = ( +/obj/structure/stairs/north, +/turf/open/floor/iron/stairs/medium, +/area/station/cargo/storage) "gYg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -23454,20 +24406,27 @@ /obj/effect/spawner/structure/window/hollow/reinforced, /turf/open/floor/plating, /area/mine/living_quarters) -"gYk" = ( -/obj/machinery/computer/security/telescreen/entertainment/directional/east, -/obj/machinery/status_display/evac/directional/south, -/obj/structure/chair/sofa/left/brown{ - dir = 8 +"gYm" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "riot"; + name = "Security Shutters" }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) +/turf/open/floor/glass/reinforced, +/area/station/hallway/primary/fore) "gYp" = ( /obj/effect/turf_decal/tile/red{ dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"gYq" = ( +/obj/item/toy/snowball{ + pixel_y = -7; + pixel_x = 5 + }, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "gYt" = ( /obj/machinery/door/window/left/directional/west{ name = "Research Division Delivery"; @@ -23483,6 +24442,18 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"gYv" = ( +/obj/machinery/newscaster/directional/north, +/obj/structure/table/wood, +/obj/machinery/light/small/directional/north, +/obj/item/toy/figure/mime{ + pixel_x = -6 + }, +/obj/item/toy/figure/clown{ + pixel_x = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "gYz" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -23502,22 +24473,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"gYN" = ( -/obj/effect/turf_decal/loading_area/white{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/station/service/bar/atrium) -"gYO" = ( -/obj/item/food/grown/carrot, -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) -"gZa" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = -32 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +"gYT" = ( +/obj/machinery/light/cold/directional/east, +/obj/machinery/status_display/ai/directional/east, +/obj/structure/railing, +/obj/structure/lattice/catwalk, +/turf/open/openspace, +/area/station/service/kitchen/coldroom) "gZb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, @@ -23531,13 +24493,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"gZk" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/random/maintenance/four, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/plating, -/area/station/construction) +"gZq" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/turf/open/floor/iron, +/area/station/command/bridge) "gZt" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 6 @@ -23545,11 +24511,6 @@ /obj/effect/gibspawner/human, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"gZx" = ( -/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/ordnance/office) "gZP" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -23565,10 +24526,6 @@ dir = 1 }, /area/station/security/prison) -"gZR" = ( -/obj/machinery/power/smes/engineering, -/turf/open/floor/plating, -/area/station/maintenance/department/electrical) "gZT" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -23580,11 +24537,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"gZV" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/trash/grille_or_waste, -/turf/open/floor/plating, -/area/station/maintenance/fore) "hac" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ dir = 9 @@ -23601,14 +24553,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"hai" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 6 - }, -/turf/open/misc/dirt{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/icemoon/underground/explored/graveyard) "han" = ( /obj/structure/table, /obj/item/plate, @@ -23631,6 +24575,9 @@ /area/station/hallway/primary/central) "haC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "haD" = ( @@ -23649,16 +24596,15 @@ /obj/effect/landmark/start/bitrunner, /turf/open/floor/iron, /area/station/cargo/storage) -"haQ" = ( -/obj/effect/turf_decal/tile/purple/half/contrasted{ +"haJ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ dir = 8 }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"hbp" = ( -/obj/machinery/photocopier, -/turf/open/floor/wood, -/area/station/command/meeting_room) +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "hbt" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/spawner/random/clothing/mafia_outfit, @@ -23680,10 +24626,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"hbL" = ( -/obj/machinery/light/small/directional/east, -/turf/open/openspace, -/area/station/service/hydroponics) "hbR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -23717,15 +24659,17 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"hcj" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 +"hcs" = ( +/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/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) "hcw" = ( /obj/docking_port/stationary/random/icemoon{ dir = 8; @@ -23749,6 +24693,18 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"hcT" = ( +/obj/structure/closet/crate/internals, +/obj/machinery/firealarm/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Cargo Bay B-1" + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hcZ" = ( +/obj/structure/railing/wooden_fence, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "hdb" = ( /obj/machinery/shower/directional/south, /turf/open/floor/iron/smooth, @@ -23783,28 +24739,12 @@ dir = 1 }, /area/mine/living_quarters) -"hds" = ( -/obj/structure/disposalpipe/junction{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) "hdw" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"hdz" = ( -/obj/structure/sign/warning/gas_mask, -/turf/closed/wall, -/area/station/hallway/secondary/exit/departure_lounge) "hdH" = ( /obj/structure/railing{ dir = 1 @@ -23826,30 +24766,6 @@ /obj/effect/spawner/random/engineering/canister, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"hek" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/scanning_module, -/obj/item/stock_parts/scanning_module, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/item/multitool, -/obj/item/flatpack{ - board = /obj/item/circuitboard/machine/flatpacker - }, -/turf/open/floor/iron/white/side{ - dir = 10 - }, -/area/station/science/lab) -"het" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/gas_mask, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) "hex" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -23865,37 +24781,18 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/smooth, /area/mine/mechbay) -"heG" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/computer/gateway_control, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/command/gateway) -"heH" = ( -/obj/structure/sign/poster/random/directional/west, -/turf/closed/wall/r_wall, -/area/station/maintenance/aft/lesser) -"heQ" = ( -/obj/structure/table, -/obj/item/stack/cable_coil, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage) -"heS" = ( -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; - name = "AI Upload Turret Control"; - pixel_y = -25 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Bridge Center" +"heE" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ + dir = 9 }, -/obj/structure/disposalpipe/segment{ +/obj/structure/fence{ dir = 4 }, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron, -/area/station/command/bridge) +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "heX" = ( /obj/structure/cable, /turf/open/floor/wood, @@ -23904,6 +24801,14 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/science/xenobiology) +"hfd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "hff" = ( /obj/structure/chair/office{ dir = 8 @@ -23911,17 +24816,40 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/service/library) -"hfm" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/service/chapel) +"hfg" = ( +/obj/structure/reagent_dispensers/plumbed{ + name = "service reservoir" + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/fore) +"hfs" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood, +/obj/effect/spawner/random/entertainment/musical_instrument, +/obj/item/instrument/harmonica, +/turf/open/floor/iron/grimy, +/area/station/commons/lounge) "hfv" = ( /obj/machinery/processor{ pixel_y = 6 }, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/mess) +"hfy" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/turretid{ + name = "AI Chamber turret control"; + pixel_x = 5; + pixel_y = -24 + }, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai) "hfA" = ( /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 2 @@ -23932,14 +24860,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) -"hfG" = ( -/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/plating, -/area/station/maintenance/starboard/fore) "hfI" = ( /obj/machinery/light/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23950,26 +24870,6 @@ /obj/structure/closet/l3closet/scientist, /turf/open/floor/iron, /area/station/science/xenobiology) -"hfY" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/poster/official/the_owl/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "hgc" = ( /obj/structure/table, /turf/open/floor/plating, @@ -23980,17 +24880,6 @@ "hgr" = ( /turf/open/floor/glass/reinforced, /area/station/hallway/secondary/entry) -"hgx" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 5 - }, -/obj/effect/turf_decal/weather/snow/corner, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"hgH" = ( -/obj/item/radio/intercom/prison/directional/west, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison) "hgK" = ( /obj/structure/ladder, /obj/effect/landmark/blobstart, @@ -24035,6 +24924,7 @@ c_tag = "Ordnance Lower Mix Lab"; network = list("ss13","rd") }, +/obj/structure/sign/warning/directional/south, /turf/open/floor/iron/dark, /area/station/science/ordnance) "hhz" = ( @@ -24045,13 +24935,17 @@ dir = 1 }, /area/station/service/chapel/office) -"hhN" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 4 +"hhO" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" }, -/area/station/command/gateway) +/obj/structure/displaycase/forsale/kitchen, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "hhP" = ( /obj/machinery/newscaster/directional/south, /obj/item/kirbyplants/random, @@ -24074,6 +24968,33 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"hir" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/structure/reagent_dispensers/plumbed{ + name = "dormitory reservoir" + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/maintenance/fore) +"hjc" = ( +/obj/structure/closet/emcloset, +/obj/item/pickaxe, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) "hjh" = ( /obj/machinery/computer/records/security{ dir = 4 @@ -24084,6 +25005,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"hjl" = ( +/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, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/station/service/bar) "hjp" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/camera/directional/south{ @@ -24100,16 +25031,20 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/service/hydroponics/garden) -"hjw" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +"hjz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/structure/cable, -/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, -/area/station/service/hydroponics) +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"hjA" = ( +/obj/effect/turf_decal/tile/blue, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "hjE" = ( /turf/closed/wall/r_wall, /area/station/science/explab) @@ -24129,14 +25064,6 @@ "hjM" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/medical/morgue) -"hjO" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/wood/large, -/area/station/service/bar) "hjQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -24148,15 +25075,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos/project) -"hjU" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 9 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "hjV" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -24201,6 +25119,39 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"hku" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 10 + }, +/obj/machinery/barsign/directional/north, +/turf/open/floor/wood/large, +/area/station/hallway/primary/starboard) +"hkI" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/dorms/laundry) +"hkQ" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/xenoblood, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"hkS" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/structure/closet/secure_closet/cytology, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "hkU" = ( /obj/effect/landmark/start/cargo_technician, /obj/structure/chair/office{ @@ -24228,12 +25179,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"hlt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/south, -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "hlv" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/shower/directional/west, @@ -24247,32 +25192,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/mine/laborcamp) -"hlQ" = ( -/obj/machinery/door/airlock/external, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "graveyard" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, -/turf/open/floor/plating, -/area/station/medical/morgue) -"hlS" = ( -/obj/structure/table, -/obj/item/clothing/under/misc/burial, -/obj/item/clothing/under/misc/burial, -/obj/item/clothing/under/misc/burial, -/obj/item/clothing/under/misc/burial, -/obj/item/clothing/under/misc/burial, -/obj/item/clothing/under/misc/burial, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"hlW" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/vending/clothing, -/turf/open/floor/iron, -/area/station/commons/locker) "hmb" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -24299,6 +25218,32 @@ /obj/item/paper, /turf/open/floor/iron, /area/station/security/checkpoint/customs/auxiliary) +"hmx" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/camera/directional/south{ + c_tag = "Medbay Lobby"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"hmE" = ( +/obj/structure/chair, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/departments/medbay/alt/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"hmF" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/eighties, +/area/station/commons/lounge) "hmX" = ( /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ color = "#0000ff"; @@ -24318,13 +25263,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"hno" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/service/library) "hnt" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -24339,14 +25277,6 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) -"hnK" = ( -/obj/structure/table/wood, -/obj/item/wallframe/camera{ - pixel_y = -2; - pixel_x = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "hnN" = ( /obj/machinery/camera/directional/west{ c_tag = "Xenobiology Pens Observation - Port Aft"; @@ -24375,19 +25305,19 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, -/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"hog" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 +"hoa" = ( +/obj/structure/sink/directional/east, +/obj/machinery/button/door/directional/west{ + id = "xenobio2"; + name = "Xenobio Pen 2 Blast Door"; + req_access = list("xenobiology") }, -/obj/machinery/hydroponics/constructable, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/machinery/light/floor, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "hos" = ( /obj/structure/disposalpipe/trunk/multiz/down{ dir = 1 @@ -24397,6 +25327,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"hoz" = ( +/obj/structure/fence/corner{ + dir = 6 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "hoD" = ( /turf/open/floor/iron, /area/station/cargo/miningdock) @@ -24453,6 +25389,25 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) +"hph" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 1; + name = "hydroponics reservoir" + }, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron/dark/textured, +/area/station/maintenance/starboard/lesser) +"hpl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/iron, +/area/mine/laborcamp) "hpm" = ( /obj/machinery/camera/directional/north{ c_tag = "Starboard Primary Hallway East" @@ -24522,25 +25477,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) -"hpK" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/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, -/area/station/service/hydroponics) "hpM" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -24603,15 +25539,16 @@ }, /area/station/commons/storage/art) "hqv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ - dir = 1; - name = "Can In" +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/cigarette{ + pixel_x = 6; + pixel_y = 12 }, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/turf/open/floor/iron, +/area/mine/eva) "hqx" = ( /obj/effect/landmark/start/assistant, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -24636,18 +25573,17 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"hqV" = ( -/obj/structure/sign/warning/radiation/rad_area, -/turf/closed/wall/r_wall, -/area/station/engineering/main) -"hrd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, -/obj/machinery/meter/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"hqH" = ( +/obj/machinery/door/airlock/research{ + name = "Cytology Lab" }, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/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/science/ordnance, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/iron/smooth_large, +/area/station/science/ordnance) "hrh" = ( /obj/structure/chair/comfy/beige{ dir = 1 @@ -24663,35 +25599,36 @@ /obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) -"hrA" = ( -/obj/machinery/space_heater, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/railing{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "hrJ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/cargo/storage) -"hrK" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 +"hrO" = ( +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Security Checkpoint" }, -/turf/open/floor/iron/dark/side{ - dir = 4 +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brigoutpost" }, -/area/station/service/chapel) +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/security/brig/entrance) "hrS" = ( /obj/item/trash/raisins, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"hrY" = ( +/obj/structure/stairs/west, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "hrZ" = ( /obj/structure/chair/office/light{ dir = 4 @@ -24711,6 +25648,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/break_room) +"hso" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/turf_decal/weather/snow, +/turf/open/floor/plating/icemoon, +/area/icemoon/surface/outdoors/nospawn) "hsr" = ( /obj/structure/table/wood, /obj/item/newspaper, @@ -24719,6 +25664,9 @@ /area/station/security/prison/rec) "hsx" = ( /obj/machinery/vending/cigarette, +/obj/structure/sign/nanotrasen{ + pixel_x = -32 + }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "hsy" = ( @@ -24734,22 +25682,6 @@ "hsB" = ( /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"hsC" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 6 - }, -/obj/machinery/light_switch/directional/south, -/obj/machinery/camera{ - c_tag = "Chief Medical Office South"; - dir = 4; - network = list("ss13","medbay") - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) "hsN" = ( /obj/structure/table, /obj/item/storage/box/firingpins, @@ -24771,6 +25703,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"htg" = ( +/obj/structure/fireplace, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "hth" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/plating, @@ -24795,6 +25732,14 @@ /obj/effect/turf_decal/siding/white, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"hts" = ( +/obj/structure/table/wood, +/obj/item/wallframe/camera{ + pixel_y = -2; + pixel_x = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "hty" = ( /obj/item/stack/rods, /turf/open/misc/asteroid/snow/icemoon, @@ -24802,6 +25747,25 @@ "htB" = ( /turf/open/floor/carpet/red, /area/station/security/prison/work) +"htH" = ( +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Psychology Office"; + name = "Psychology Office Fax Machine" + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/machinery/camera/directional/east{ + c_tag = "Medbay Psychology"; + network = list("ss13","medbay") + }, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/psychology) +"htJ" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "htO" = ( /obj/structure/chair/office{ dir = 4 @@ -24834,16 +25798,16 @@ "hul" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/status_display/evac/directional/north, -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /turf/open/floor/iron, /area/station/commons/locker) -"hut" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/rcl/pre_loaded, +"huq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 1 + }, /turf/open/floor/iron, -/area/station/command/heads_quarters/ce) +/area/station/science/xenobiology) "huB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24883,25 +25847,6 @@ }, /turf/open/floor/iron, /area/station/service/chapel) -"huM" = ( -/obj/structure/table, -/obj/item/crowbar, -/obj/item/wrench, -/obj/item/assembly/infra{ - pixel_x = 3 - }, -/obj/item/assembly/igniter{ - pixel_y = -2 - }, -/obj/effect/turf_decal/trimline/neutral/warning, -/obj/effect/turf_decal/trimline/neutral/mid_joiner, -/obj/item/assembly/signaler, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/iron/dark/smooth_edge, -/area/station/ai_monitored/command/storage/eva) "huN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24931,23 +25876,25 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"hvi" = ( -/obj/structure/closet/crate/freezer/food{ - name = "cooler" - }, -/obj/item/reagent_containers/cup/glass/ice, -/obj/item/reagent_containers/cup/glass/ice, -/obj/item/reagent_containers/cup/glass/ice, -/obj/item/reagent_containers/cup/glass/ice, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/coldroom, -/area/icemoon/underground/explored) "hvm" = ( /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, /area/station/science/xenobiology) +"hvt" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/surgery_tray/full/morgue, +/obj/structure/table/reinforced, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/turf_decal/bot_white, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"hvQ" = ( +/obj/effect/spawner/random/trash/mess, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "hvS" = ( /obj/effect/landmark/start/depsec/engineering, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25026,6 +25973,30 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/brig/upper) +"hxa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/engineering{ + name = "Utilities Room" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"hxe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/atmos) "hxs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25035,30 +26006,30 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) -"hxB" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Unit 2" - }, -/turf/open/floor/iron/textured, -/area/station/commons/toilet) "hxE" = ( /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/cargo/miningdock) -"hxI" = ( -/turf/open/floor/iron/dark/side{ - dir = 5 +"hxJ" = ( +/obj/structure/fence/corner{ + dir = 10 }, -/area/station/service/chapel) -"hxY" = ( -/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/service/kitchen/coldroom) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"hyc" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/aft) "hyd" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -25068,6 +26039,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/break_room) +"hye" = ( +/obj/structure/table/wood, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/box/white/corners, +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) "hyj" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -25079,22 +26060,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/lobby) -"hyL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/maintenance/aft/greater) -"hyQ" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/landmark/navigate_destination/hydro, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "hyV" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/testlab) @@ -25104,16 +26069,10 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"hzd" = ( -/obj/structure/stairs/north, -/turf/open/floor/iron, -/area/station/service/chapel) -"hzw" = ( -/obj/structure/fence/cut/large{ - dir = 1 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +"hzb" = ( +/obj/structure/sign/xenobio_guide/directional/north, +/turf/open/openspace, +/area/station/science/xenobiology) "hzz" = ( /obj/structure/table/glass, /obj/item/clothing/gloves/latex, @@ -25136,6 +26095,41 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"hzG" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_x = -6; + pixel_y = 14 + }, +/obj/machinery/button/door/directional/north{ + id = "Secure Gate"; + name = "Cell Shutters"; + req_access = list("brig"); + pixel_x = 6 + }, +/obj/machinery/button/door/directional/north{ + id = "Prison Gate"; + name = "Prison Wing Lockdown"; + req_access = list("brig"); + pixel_y = 35; + pixel_x = 6 + }, +/obj/machinery/button/door/directional/north{ + id = "briggate"; + name = "Front Gate Shutters"; + req_access = list("brig"); + pixel_y = 12; + pixel_x = 6 + }, +/obj/machinery/button/door/directional/north{ + id = "BrigLock"; + name = "Brig Lockdown"; + req_access = list("brig"); + pixel_y = 0; + pixel_x = 6 + }, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) "hzH" = ( /obj/machinery/camera/motion/directional/west{ c_tag = "MiniSat Core Hallway"; @@ -25165,6 +26159,21 @@ }, /turf/open/openspace, /area/station/ai_monitored/security/armory/upper) +"hzU" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"hzV" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "hzY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -25174,34 +26183,42 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/brig/entrance) +"hAl" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) "hAm" = ( /turf/open/floor/iron/white/side{ dir = 4 }, /area/station/science/research) -"hAo" = ( -/obj/machinery/photocopier, -/obj/effect/turf_decal/siding/wood/corner, -/obj/structure/sign/calendar/directional/west, -/turf/open/floor/wood, -/area/station/commons/vacant_room/office) -"hAq" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white/corner, -/area/station/command/heads_quarters/rd) +"hAE" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "hAG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) -"hAK" = ( -/obj/machinery/holopad, -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark/smooth_half, -/area/station/service/hydroponics) +"hAM" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "hAO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25221,10 +26238,6 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) -"hAS" = ( -/obj/machinery/light/cold/directional/east, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "hAT" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -25236,16 +26249,28 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) -"hAW" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"hAU" = ( +/obj/machinery/light_switch/directional/west, +/obj/structure/closet{ + name = "janitorial supplies" + }, +/obj/item/pushbroom, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "hBd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"hBf" = ( +/obj/structure/fence/door{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "hBg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25366,6 +26391,23 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/port/fore) +"hDe" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/machinery/button/door/directional/north{ + id = "Lakeview_Bathroom"; + req_access = list("robotics") + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/freezer, +/area/mine/eva/lower) +"hDf" = ( +/obj/structure/cable, +/turf/open/floor/iron/chapel{ + dir = 1 + }, +/area/station/service/chapel) "hDh" = ( /obj/machinery/computer/atmos_alert{ dir = 8 @@ -25375,50 +26417,37 @@ "hDp" = ( /turf/open/floor/engine, /area/station/science/genetics) -"hDu" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/item/stack/package_wrap{ - pixel_y = 2 +"hDq" = ( +/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/corner{ + dir = 4 }, -/obj/item/book/manual/chef_recipes, -/obj/item/holosign_creator/robot_seat/restaurant, -/obj/structure/rack, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"hDv" = ( +/obj/machinery/shower/directional/north, +/turf/open/floor/iron/smooth, +/area/mine/eva/lower) "hDA" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/icemoon, /area/station/science/ordnance/bomb) -"hDC" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "hDG" = ( /obj/docking_port/stationary/random/icemoon{ dir = 4; name = "lavaland"; shuttle_id = "pod_4_lavaland" }, -/turf/open/misc/asteroid/snow/icemoon, +/turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "hDK" = ( /turf/open/floor/iron, /area/mine/laborcamp) +"hDL" = ( +/obj/item/kirbyplants/random/dead, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "hDU" = ( /turf/closed/wall/r_wall, /area/station/command/gateway) @@ -25432,6 +26461,14 @@ /obj/structure/closet/emcloset, /turf/open/floor/iron/dark, /area/mine/eva) +"hED" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore) "hEG" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Control" @@ -25447,12 +26484,22 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"hEV" = ( -/obj/structure/table/wood/poker, -/obj/effect/spawner/random/bureaucracy/briefcase, -/obj/item/taperecorder/empty, -/turf/open/floor/wood/large, -/area/station/commons/lounge) +"hEP" = ( +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -4 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/station/science/xenobiology) "hEW" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -25480,18 +26527,22 @@ /obj/structure/frame/machine, /turf/open/floor/plating, /area/station/construction) -"hFj" = ( -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/obj/machinery/status_display/evac/directional/east, -/obj/structure/chair/sofa/right/brown{ - dir = 1 +"hFm" = ( +/obj/effect/spawner/random/structure/chair_flipped{ + dir = 8 }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "hFr" = ( /obj/structure/flora/grass/both/style_2, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"hFw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/station/maintenance/fore) "hFC" = ( /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 2 @@ -25508,46 +26559,33 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison/work) +"hFJ" = ( +/obj/machinery/computer/station_alert, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/engine/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "hFL" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 }, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"hFN" = ( -/obj/machinery/light/small/directional/south, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored/graveyard) -"hFU" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +"hFR" = ( +/obj/structure/railing/corner/end/flip{ + dir = 4 }, -/obj/machinery/door/airlock/external/glass{ - name = "Supply Door Airlock" +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/plating, -/area/station/cargo/storage) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "hFW" = ( /obj/machinery/vending/wardrobe/det_wardrobe, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"hFX" = ( -/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/dark, -/area/station/service/hydroponics) -"hGg" = ( -/obj/structure/sign/warning/directional/west{ - desc = "A sign warning to watch for moving minecarts beyond this point." - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "hGh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25584,6 +26622,22 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"hHl" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/status_display/shuttle{ + pixel_x = -32; + shuttle_id = "arrival" + }, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/hallway/secondary/entry) "hHp" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -25605,8 +26659,25 @@ "hHu" = ( /obj/structure/disposalpipe/segment, /obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"hHz" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) "hHD" = ( /obj/machinery/camera/directional/south{ c_tag = "Construction Area" @@ -25616,13 +26687,6 @@ }, /turf/open/floor/plating, /area/station/construction) -"hHF" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "hHG" = ( /turf/open/cliff/snowrock, /area/icemoon/surface/outdoors/nospawn) @@ -25640,18 +26704,22 @@ }, /turf/open/floor/engine/n2, /area/station/engineering/atmos) -"hIe" = ( -/obj/structure/sign/warning/no_smoking/circle/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/structure/sink/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/cryo) "hIj" = ( /obj/machinery/camera/directional/south{ c_tag = "Port Hallway East" }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"hIv" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "hIA" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ @@ -25659,15 +26727,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) -"hIE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Service - Electrical Maintenace Lower" - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/starboard/lesser) "hIH" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -25681,17 +26740,33 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/service/chapel) -"hIS" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 +"hIO" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "hosspace"; + name = "Privacy Shutters" }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hos) "hIU" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"hIW" = ( +/obj/structure/cable, +/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/turf_decal/siding/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/structure/sign/calendar/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms/laundry) "hJe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25710,6 +26785,17 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/science/xenobiology) +"hJo" = ( +/obj/structure/table, +/obj/item/plate, +/obj/item/food/piedough, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/item/kitchen/rollingpin, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "hJp" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -25720,15 +26806,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"hJC" = ( -/obj/machinery/light_switch/directional/west, -/obj/structure/closet{ - name = "janitorial supplies" - }, -/obj/item/pushbroom, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "hJD" = ( /obj/structure/ladder, /turf/open/floor/wood, @@ -25741,11 +26818,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central) -"hJF" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/warning/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/fore) "hJG" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/decal/cleanable/dirt, @@ -25754,33 +26826,14 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"hJS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/duct, -/obj/effect/turf_decal/siding/dark{ - dir = 10 - }, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) +"hJH" = ( +/turf/open/openspace, +/area/station/science/research) "hJY" = ( /obj/structure/closet/l3closet/janitor, /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/service/janitor) -"hKn" = ( -/obj/machinery/biogenerator, -/obj/machinery/door/window/left/directional/south{ - name = "Biogenerator Access"; - req_access = list("hydroponics") - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "hKr" = ( /obj/structure/table/glass, /obj/item/book/manual/wiki/infections{ @@ -25817,23 +26870,19 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/tcommsat/computer) -"hKL" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"hKT" = ( -/obj/machinery/light/floor, -/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/storage) "hKV" = ( /obj/structure/chair, /turf/open/floor/iron, /area/station/cargo/storage) +"hKY" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Medbay" + }, +/obj/effect/turf_decal/bot, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/medical/central) "hLf" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -25841,12 +26890,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/brig/upper) -"hLh" = ( -/obj/structure/closet/crate/grave/filled, -/turf/open/misc/dirt{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/icemoon/underground/explored/graveyard) "hLk" = ( /obj/structure/table, /obj/item/paper, @@ -25857,35 +26900,15 @@ network = list("labor") }, /obj/machinery/flasher/directional/west{ - id = "GulagCell 1" + id = "GulagCell 2" }, /turf/open/floor/iron, /area/mine/laborcamp) -"hLy" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/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/bar/atrium) -"hLO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/ordnance/office) +"hLw" = ( +/obj/structure/flora/grass/both/style_3, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "hLS" = ( /obj/machinery/computer/atmos_control/nitrous_tank{ dir = 8 @@ -25895,6 +26918,19 @@ }, /turf/open/floor/iron/white/corner, /area/station/engineering/atmos) +"hLW" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) +"hLX" = ( +/obj/structure/girder, +/obj/structure/grille, +/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/greater) "hLY" = ( /obj/structure/cable, /obj/structure/chair, @@ -25922,12 +26958,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) -"hMs" = ( -/obj/effect/landmark/start/hangover, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"hMv" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "hMw" = ( /obj/structure/bookcase/random/fiction, /turf/open/floor/plating, @@ -25938,6 +26974,12 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) +"hMA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/dim/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "hMB" = ( /obj/structure/table, /obj/item/stack/cable_coil, @@ -25972,23 +27014,16 @@ /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) "hMM" = ( -/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/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 }, -/area/station/hallway/secondary/service) +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"hMQ" = ( +/obj/structure/sign/warning/xeno_mining/directional/east, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "hMS" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -25997,6 +27032,13 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron/white, /area/station/security/prison/safe) +"hMZ" = ( +/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/stone, +/area/station/commons/lounge) "hNg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -26011,6 +27053,27 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/wood, /area/station/service/lawoffice) +"hNn" = ( +/obj/effect/turf_decal/weather/snow/corner, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) +"hNp" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/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/plating, +/area/station/maintenance/fore) +"hNq" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/railing, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "hNx" = ( /obj/machinery/camera/directional/south{ c_tag = "Holodeck - South"; @@ -26025,13 +27088,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/large, /area/station/hallway/primary/port) -"hNF" = ( -/obj/structure/fence{ - dir = 4 - }, -/obj/structure/sign/warning, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) "hNI" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/bot, @@ -26040,19 +27096,35 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"hNK" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/trash/mess, +"hNJ" = ( +/obj/machinery/power/solar_control{ + id = "auxsolareast"; + name = "Port Bow Solar Control" + }, +/obj/structure/cable, +/obj/structure/sign/warning/cold_temp/directional/north, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/maintenance/solars/port/fore) "hNM" = ( -/obj/structure/sign/warning/no_smoking/directional/north, /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, +/obj/machinery/light_switch/directional/north, /turf/open/floor/iron, /area/station/engineering/storage) +"hNU" = ( +/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{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "hOc" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -26086,6 +27158,10 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"hOG" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/grass, +/area/station/service/hydroponics) "hOU" = ( /obj/machinery/camera/directional/west{ c_tag = "Xenobiology Pens - Port Fore"; @@ -26139,6 +27215,12 @@ "hPs" = ( /turf/closed/wall/r_wall, /area/station/security/prison/work) +"hPv" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "hPz" = ( /obj/structure/chair{ dir = 8 @@ -26146,6 +27228,23 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) +"hPD" = ( +/obj/structure/bodycontainer/morgue/beeper_off{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/medical/morgue) "hPK" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -26158,19 +27257,6 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"hPS" = ( -/obj/effect/landmark/start/botanist, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/structure/sign/calendar/directional/north, -/obj/machinery/camera{ - c_tag = "Service - Botany Equipment"; - dir = 9 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "hPT" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -26217,19 +27303,21 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"hQO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"hQv" = ( +/obj/item/kirbyplants/random/dead, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"hQK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Escape" +/obj/structure/table, +/obj/item/trash/candle{ + pixel_y = 12 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "hQP" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/east, @@ -26243,26 +27331,10 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"hRe" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/maintenance/aft/greater) -"hRp" = ( -/obj/machinery/button/door/directional/north{ - id = "visitation"; - name = "Visitation Shutters"; - pixel_x = 6; - pixel_y = -24; - req_access = list("brig") - }, -/obj/machinery/button/flasher{ - id = "visitorflash"; - pixel_x = -6; - pixel_y = -24 - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/security/prison/visit) +"hQW" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "hRt" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -26308,11 +27380,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"hRF" = ( -/obj/structure/cable, -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron/dark, -/area/station/science/breakroom) "hRG" = ( /obj/machinery/shower/directional/north, /obj/structure/window/reinforced/spawner/directional/west, @@ -26329,11 +27396,30 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"hRQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Xenobiology Pens Hall - Fore"; + network = list("ss13","rd","xeno") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "hRX" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"hSe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/railing/corner, +/turf/open/floor/iron, +/area/mine/eva) "hSl" = ( /obj/effect/turf_decal/trimline/neutral/mid_joiner{ dir = 8 @@ -26393,6 +27479,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"hTk" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external/glass{ + name = "Supply Door Airlock"; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, +/area/station/cargo/storage) "hTm" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/meter, @@ -26400,6 +27497,28 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"hTq" = ( +/obj/structure/cable, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) +"hTu" = ( +/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/cyclelink_helper_multi{ + cycle_id = "sci-med-passthrough" + }, +/obj/machinery/door/airlock/research{ + name = "Research Access" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/turf_decal/tile/purple/full, +/turf/open/floor/iron/white/smooth_large, +/area/station/maintenance/aft/greater) "hTw" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/half{ @@ -26407,6 +27526,17 @@ }, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) +"hTx" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Medbay Stasis Center South"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "hTB" = ( /obj/structure/table, /obj/item/clothing/suit/jacket/leather{ @@ -26419,6 +27549,11 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"hTI" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/icemoon, +/area/station/maintenance/port/lesser) "hTJ" = ( /obj/machinery/camera/directional/north{ c_tag = "Solar Maintenance - North West Access" @@ -26427,32 +27562,21 @@ /obj/effect/spawner/random/engineering/tank, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"hTY" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/clock/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) "hUe" = ( /obj/effect/landmark/start/hangover, /obj/machinery/status_display/evac/directional/south, /turf/open/floor/wood, /area/station/service/library) -"hUf" = ( -/obj/structure/table/glass, -/obj/item/assembly/signaler{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/reagent_containers/dropper{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stack/cable_coil, -/obj/item/pen{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/research) "hUi" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -26460,19 +27584,6 @@ /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"hUl" = ( -/obj/machinery/door/airlock/command{ - name = "Head of Personnel" - }, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination, -/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/hop, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "hUx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26527,6 +27638,17 @@ /obj/machinery/digital_clock/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central) +"hVf" = ( +/obj/structure/chair{ + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "hVo" = ( /obj/effect/spawner/random/maintenance, /obj/structure/table, @@ -26552,6 +27674,11 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron/smooth, /area/station/maintenance/port/lesser) +"hVz" = ( +/obj/effect/spawner/random/maintenance/two, +/obj/structure/closet/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "hVB" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -26561,6 +27688,15 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark, /area/mine/eva) +"hVR" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "hVX" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ dir = 1 @@ -26583,13 +27719,49 @@ /obj/machinery/teleport/hub, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) -"hWv" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "botany_chasm_and_wolf_shutters" +"hWl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/service/hydroponics) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"hWt" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"hWz" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Ordnance Lower Mix Lab"; + network = list("ss13","rd") + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"hWD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) "hWI" = ( /obj/effect/turf_decal/box, /obj/effect/spawner/random/structure/closet_empty/crate/with_loot, @@ -26597,40 +27769,17 @@ /obj/structure/sign/poster/official/wtf_is_co2/directional/north, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) +"hWR" = ( +/obj/structure/table/wood, +/obj/item/paper/crumpled, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "hWV" = ( /obj/machinery/light/small/directional/north, /obj/machinery/space_heater, /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/plating, /area/station/medical/virology) -"hWW" = ( -/obj/structure/sign/warning/directional/south, -/obj/structure/sign/warning/directional/south, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"hWX" = ( -/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, -/obj/machinery/door/airlock/medical/glass, -/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, -/area/station/medical/morgue) -"hXm" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central) -"hXt" = ( -/obj/machinery/camera{ - c_tag = "Starboard Primary Hallway Center East" - }, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "hXC" = ( /obj/structure/chair{ dir = 8 @@ -26642,15 +27791,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"hXD" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/turf_decal/bot_red, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "hXU" = ( /obj/machinery/newscaster/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -26670,12 +27810,6 @@ /obj/effect/landmark/navigate_destination/disposals, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"hYt" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "hYy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -26684,6 +27818,43 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood, /area/station/security/prison/rec) +"hYD" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hYE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) +"hYG" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "packageSort2" + }, +/obj/structure/plasticflaps{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) +"hYL" = ( +/obj/structure/closet/lasertag/blue, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) +"hYM" = ( +/obj/structure/lattice, +/obj/structure/sign/poster/official/help_others/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) "hYP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26696,6 +27867,23 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"hZb" = ( +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"hZc" = ( +/obj/effect/landmark/start/clown, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "hZe" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 1 @@ -26703,10 +27891,71 @@ /obj/effect/turf_decal/trimline/yellow/warning, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"hZf" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Bridge East Access" + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"hZo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/storage/box, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/departments/maint/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"hZu" = ( +/obj/structure/sign/warning/secure_area{ + pixel_y = 32 + }, +/obj/structure/flora/grass/both/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"hZJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + color = "#ff0000"; + dir = 4; + name = "Scrubbers multi deck pipe adapter" + }, +/obj/structure/sign/poster/official/safety_eye_protection/directional/north, +/turf/open/floor/plating, +/area/station/medical/chemistry) +"hZN" = ( +/obj/structure/sign/warning/secure_area/directional/west, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "hZQ" = ( /obj/item/stack/sheet/iron/five, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"hZT" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"hZW" = ( +/obj/structure/sink/kitchen/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "iag" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -26738,12 +27987,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness) -"iaz" = ( -/obj/structure/girder, -/obj/structure/grille, +"iaB" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/structure/sign/departments/botany/directional/west, +/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/greater) +/area/station/maintenance/starboard/lesser) "iaF" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, @@ -26854,6 +28105,13 @@ }, /turf/open/floor/wood, /area/station/security/prison/rec) +"ibJ" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/computer/slot_machine{ + name = "two-armed bandit" + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "ibM" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -26866,10 +28124,10 @@ }, /turf/open/floor/plating, /area/station/service/chapel) -"ica" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark, -/area/station/medical/cryo) +"ich" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/station/hallway/secondary/entry) "ici" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26895,17 +28153,6 @@ dir = 4 }, /area/mine/living_quarters) -"icv" = ( -/obj/machinery/door/window/left/directional/east{ - name = "Coffin Storage"; - req_access = list("chapel_office") - }, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron/dark/side{ - dir = 6 - }, -/area/station/service/chapel) "icA" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor/left/directional/east{ @@ -26950,6 +28197,13 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"icK" = ( +/obj/machinery/firealarm/directional/east, +/obj/structure/railing, +/turf/open/floor/iron/white/side{ + dir = 9 + }, +/area/station/science/xenobiology) "icQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26992,13 +28246,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/service/hydroponics/garden) -"ida" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/sign/departments/chemistry/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "idi" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ @@ -27014,26 +28261,16 @@ /obj/effect/landmark/start/depsec/science, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"idp" = ( -/obj/machinery/button/door/directional/east{ - id = "cmoprivacy"; - name = "CMO Shutter Control"; - pixel_y = 23; - req_access = list("cmo") - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/cmo/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) -"idr" = ( -/obj/structure/stairs/north, -/obj/structure/railing{ - dir = 8 +"idm" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "idt" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, @@ -27049,12 +28286,9 @@ }, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) -"idH" = ( -/obj/structure/railing/wooden_fence{ - dir = 6 - }, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) +"idI" = ( +/turf/open/floor/stone, +/area/station/commons/lounge) "idN" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/door/window/brigdoor/left/directional/south{ @@ -27072,23 +28306,49 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) -"ieb" = ( -/obj/machinery/door/airlock/research/glass{ - name = "Research Break Room" +"idP" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"idU" = ( +/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/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/door/airlock/hatch{ + name = "Morgue"; + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/morgue, /turf/open/floor/iron/dark, -/area/station/science/research) -"iew" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) +/area/station/medical/morgue) +"iem" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/stairs/north, +/turf/open/floor/iron/stairs/medium, +/area/station/cargo/storage) "ieG" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"ieJ" = ( +/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) "ifa" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -27097,25 +28357,12 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/mine/laborcamp/security) -"ifd" = ( -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "ife" = ( /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/turret_protected/aisat/atmos) -"ifA" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/cold_temp, -/turf/open/floor/plating/icemoon, -/area/station/maintenance/solars/port/aft) "ifX" = ( /obj/machinery/vending/wardrobe/cargo_wardrobe, /turf/open/floor/iron, @@ -27134,6 +28381,11 @@ /obj/item/soap/nanotrasen, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) +"igd" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) "igm" = ( /turf/closed/wall/ice, /area/mine/living_quarters) @@ -27141,15 +28393,24 @@ /obj/structure/railing, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"igq" = ( -/obj/machinery/recharge_station, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/mine/eva/lower) -"igu" = ( -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +"igt" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/plaques/kiddie/library{ + pixel_x = 32 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"igw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/sign/warning/radiation/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "igx" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 5 @@ -27160,20 +28421,23 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/glass, /area/station/security/lockers) -"igH" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"igG" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/structure/closet/emcloset/anchored, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/maintenance/port/aft) "igL" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating, /area/mine/storage) +"igM" = ( +/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, +/turf/open/floor/iron/white, +/area/station/science/ordnance) "igQ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -27227,25 +28491,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/station/security/execution/transfer) -"ihN" = ( -/obj/machinery/button/door/directional/west{ - id = "xenobio4"; - name = "Xenobio Pen 4 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) -"iif" = ( -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/machinery/biogenerator, -/turf/open/floor/iron, -/area/station/service/hydroponics) "iih" = ( /obj/effect/spawner/xmastree, /obj/effect/turf_decal/tile/neutral{ @@ -27261,6 +28506,12 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"iis" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "iiy" = ( /obj/machinery/firealarm/directional/north, /obj/structure/chair{ @@ -27273,16 +28524,17 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "iiB" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) +"iiE" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 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/service/hydroponics) +/area/station/service/bar) "iiH" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "innerbrig"; @@ -27312,6 +28564,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"ijd" = ( +/obj/structure/table/wood/poker, +/obj/item/trash/candle{ + pixel_y = 3 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ijj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27339,14 +28598,21 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"ijw" = ( -/obj/structure/disposalpipe/segment{ +"ijv" = ( +/obj/effect/decal/cleanable/blood/tracks{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/medical/morgue) "ijC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27373,11 +28639,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/brig/upper) -"ijW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/structure/sign/warning/secure_area/directional/north, -/turf/open/floor/iron/dark, -/area/station/science/explab) +"ijV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/mine/eva/lower) "ijY" = ( /obj/structure/flora/rock/icy/style_random, /turf/open/misc/asteroid/snow/icemoon, @@ -27401,10 +28667,6 @@ /obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, /area/station/cargo/storage) -"ike" = ( -/obj/structure/fence/cut/medium, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "ikk" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4 @@ -27431,12 +28693,6 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/north, /turf/open/floor/wood, /area/station/service/library) -"iku" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "ikz" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -27468,6 +28724,13 @@ /obj/structure/reagent_dispensers/wall/peppertank/directional/south, /turf/open/floor/iron/dark/textured, /area/station/security/office) +"ikL" = ( +/obj/machinery/status_display/ai/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "ikO" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -27485,10 +28748,19 @@ dir = 1 }, /area/station/service/chapel) -"ile" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/station/security/courtroom) +"iln" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) +"ilq" = ( +/obj/machinery/vending/games, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/sepia, +/area/station/service/library) "ilv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -27498,6 +28770,13 @@ "ily" = ( /turf/open/openspace, /area/station/science/xenobiology) +"ilz" = ( +/obj/machinery/computer/exoscanner_control{ + dir = 1 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/cargo/drone_bay) "ilD" = ( /obj/structure/lattice/catwalk, /turf/open/openspace/icemoon/keep_below, @@ -27533,18 +28812,6 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"imk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/item/rack_parts, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"imy" = ( -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/office) "imH" = ( /obj/structure/rack, /obj/effect/spawner/random/clothing/gloves, @@ -27552,15 +28819,13 @@ /obj/item/clothing/mask/breath, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"imI" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/item/kirbyplants/random, -/obj/machinery/light/warm/directional/south, -/obj/machinery/digital_clock/directional/south, -/turf/open/floor/wood/large, -/area/station/commons/lounge) +"imJ" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "imO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -27569,35 +28834,21 @@ dir = 4 }, /obj/machinery/light/small/directional/east, +/obj/structure/sign/poster/official/fruit_bowl/directional/east, /turf/open/floor/iron/white/corner{ dir = 1 }, /area/station/commons/storage/art) -"imV" = ( -/obj/structure/stairs/east, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) -"inh" = ( -/obj/structure/stairs/west, -/obj/structure/railing, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/iron/white, -/area/station/science/ordnance) "ini" = ( /obj/structure/falsewall, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"int" = ( -/obj/structure/disposalpipe/segment, +"inn" = ( /obj/structure/cable, -/obj/structure/sign/departments/botany/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/turf/open/floor/iron/stairs/left{ + dir = 4 + }, +/area/station/engineering/lobby) "inE" = ( /turf/open/floor/iron/corner, /area/station/engineering/lobby) @@ -27609,37 +28860,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central) -"inN" = ( -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/button/door/directional/south{ - id = "minecraft_shutter"; - req_one_access = list("hydroponics", "kitchen"); - name = "Cart Access"; - desc = "Opens the railway leading into the Kitchen Coldroom." - }, -/obj/structure/minecart_rail/railbreak{ - dir = 4 - }, -/obj/structure/closet/crate/miningcar{ - name = "delivery cart"; - desc = "Used for quick transit of fresh produce to the kitchen. Just give it a shove." - }, -/obj/item/storage/bag/plants, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"inP" = ( -/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, -/area/station/medical/morgue) "inQ" = ( /obj/structure/table/wood, /obj/item/paper_bin/carbon{ @@ -27668,12 +28888,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"ioi" = ( -/obj/structure/cable, -/mob/living/basic/bear/snow/misha, -/obj/structure/bed/dogbed/misha, -/turf/open/floor/carpet/royalblue, -/area/station/command/heads_quarters/hos) "iol" = ( /obj/machinery/camera/directional/south{ c_tag = "MiniSat Teleporter"; @@ -27688,10 +28902,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"ion" = ( -/obj/effect/spawner/random/trash/mess, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "ior" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -27705,17 +28915,16 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"iot" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" +"iov" = ( +/obj/machinery/door/airlock{ + id_tag = "Dorm6"; + name = "Cabin 2" }, -/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, -/area/station/hallway/primary/aft) +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/commons/dorms) "iox" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -27732,6 +28941,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"ioE" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/lobby) "ioK" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, @@ -27748,6 +28966,15 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"ioQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "ipd" = ( /obj/machinery/light/small/directional/south, /obj/machinery/camera/directional/south{ @@ -27763,31 +28990,16 @@ /turf/open/genturf, /area/icemoon/underground/unexplored/rivers/deep/shoreline) "ipg" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white{ +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 }, -/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "cantena_curtains" - }, -/turf/open/floor/wood, -/area/station/commons/lounge) +/turf/open/floor/plating, +/area/station/service/chapel) "ipw" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"ipx" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm6"; - name = "Cabin 2" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/commons/dorms) "ipA" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -27797,35 +29009,12 @@ "ipE" = ( /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) -"ipF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/pen/red, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/folder/yellow, -/obj/machinery/keycard_auth/wall_mounted/directional/west{ - pixel_x = -25; - pixel_y = -5 - }, -/obj/machinery/button/door/directional/west{ - id = "qmprivacy"; - name = "Privacy Shutters Control"; - pixel_y = 5; - req_access = list("qm") - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "ipM" = ( /obj/structure/transit_tube/curved{ dir = 4 }, /obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "iqn" = ( @@ -27838,35 +29027,29 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) -"iqr" = ( -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "iqu" = ( /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) -"iqx" = ( -/obj/structure/railing, -/obj/structure/lattice/catwalk, -/turf/open/openspace, -/area/station/science/ordnance/office) -"iqA" = ( -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "iqC" = ( /obj/structure/table, /obj/item/flashlight/lamp, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"iqW" = ( +/obj/machinery/door/poddoor/massdriver_chapel{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/service/chapel) +"irn" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/fore) "irp" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27904,32 +29087,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"irM" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/microwave, -/obj/machinery/camera/directional/north{ - c_tag = "Mining B-1 Crater Observatory" - }, -/obj/effect/turf_decal/tile/dark/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white/side, -/area/mine/living_quarters) -"irO" = ( -/obj/structure/ladder{ - name = "chemistry lab access" - }, -/obj/machinery/camera{ - c_tag = "Medbay Chemistry Lab - North"; - dir = 9; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/iron/dark/textured_large, -/area/station/medical/chemistry) "irQ" = ( /obj/structure/chair/pew{ dir = 1 @@ -27939,18 +29096,6 @@ dir = 8 }, /area/station/service/chapel) -"irX" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/sign/warning/pods/directional/west, -/obj/machinery/light/directional/north, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/hallway/secondary/entry) "isb" = ( /obj/machinery/atmospherics/components/binary/pump/off{ dir = 1; @@ -27980,16 +29125,16 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central) -"isj" = ( -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "isl" = ( /obj/structure/fence/door{ name = "graveyard" }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"isq" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "ist" = ( /obj/structure/chair/sofa/left/brown, /obj/effect/landmark/start/psychologist, @@ -28011,6 +29156,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) +"isC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/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/south, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "isP" = ( /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, @@ -28030,6 +29185,14 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"itf" = ( +/obj/effect/turf_decal/stripes/box, +/obj/structure/ladder, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/mine/eva) "itj" = ( /turf/open/floor/iron/white, /area/station/science/genetics) @@ -28061,8 +29224,19 @@ /area/icemoon/surface/outdoors/nospawn) "itY" = ( /obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"iub" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 4 + }, +/area/station/engineering/lobby) "ium" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -28104,19 +29278,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"iuE" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/machinery/chem_master/condimaster{ - desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; - name = "SapMaster XP" - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "iuH" = ( /obj/effect/turf_decal/siding/blue{ dir = 8 @@ -28126,6 +29287,16 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) +"iuL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "iuS" = ( /obj/machinery/airalarm/directional/north, /turf/open/floor/glass/reinforced, @@ -28135,6 +29306,10 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"ivm" = ( +/obj/structure/sign/poster/official/random/directional/north, +/turf/closed/wall, +/area/station/maintenance/port/aft) "ivo" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -28143,11 +29318,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ivp" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/flora/bush/sparsegrass/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) "ivq" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red{ @@ -28155,25 +29325,48 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) +"ivw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/security/prison/visit) "ivB" = ( /obj/structure/closet/emcloset, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"ivC" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 +"ivF" = ( +/turf/closed/wall, +/area/station/maintenance/disposal) +"ivG" = ( +/obj/structure/table, +/obj/item/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 +/obj/item/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 }, -/obj/structure/railing{ - dir = 1 +/obj/item/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/crowbar, +/obj/item/radio/headset/headset_sci{ + pixel_x = -3 }, +/obj/machinery/newscaster/directional/east, +/obj/machinery/light/directional/east, /turf/open/floor/iron, -/area/station/service/hydroponics) -"ivF" = ( -/turf/closed/wall, -/area/station/maintenance/disposal) +/area/station/science/robotics/lab) "ivH" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -28185,34 +29378,9 @@ }, /turf/open/floor/wood, /area/station/service/library) -"ivJ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "iwf" = ( /turf/closed/wall/r_wall, /area/mine/mechbay) -"iwj" = ( -/obj/structure/table, -/obj/structure/frame/machine, -/obj/item/stack/cable_coil/five, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"iwq" = ( -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) -"iwx" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Xenobiology Maintenance" - }, -/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/science/xenobio, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "iwz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -28237,6 +29405,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"iwQ" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "iwS" = ( /turf/closed/wall, /area/station/commons/dorms/laundry) @@ -28244,6 +29419,15 @@ /obj/structure/railing, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"ixa" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/virology) "ixb" = ( /obj/machinery/button/door/directional/south{ id = "vacantofficemaintshutter"; @@ -28253,21 +29437,12 @@ }, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) -"ixp" = ( -/obj/machinery/door/airlock/wood{ - name = "Bar Backroom" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 +"ixl" = ( +/obj/structure/sign/plaques/kiddie/devils_tooth{ + pixel_y = 32 }, -/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/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/bar/backroom) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "ixu" = ( /obj/machinery/camera/directional/north{ c_tag = "Teleporter" @@ -28338,12 +29513,14 @@ }, /turf/open/floor/plating, /area/mine/living_quarters) -"iyF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/blobstart, +"iyJ" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "iyK" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -28357,13 +29534,6 @@ /obj/machinery/photocopier, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"iyP" = ( -/obj/structure/table, -/obj/item/aicard, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/command/heads_quarters/rd) "iyQ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -28410,6 +29580,14 @@ "izC" = ( /turf/closed/wall, /area/station/service/bar/atrium) +"izD" = ( +/obj/machinery/light/directional/west, +/obj/machinery/vending/assist, +/obj/structure/sign/poster/official/science/directional/north, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/ordnance/office) "izI" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -28430,18 +29608,19 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/medical/chemistry) -"izU" = ( -/obj/structure/table/wood, -/obj/item/instrument/saxophone, -/obj/item/instrument/piano_synth, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron/grimy, -/area/station/commons/lounge) "izY" = ( /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/visit) +"iAc" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/sign/departments/telecomms/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "iAf" = ( /turf/closed/wall/mineral/wood, /area/station/maintenance/space_hut/cabin) @@ -28451,41 +29630,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"iAp" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera{ - c_tag = "Mining B-1 Hallway South"; - dir = 10 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/mine/eva) -"iAt" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"iAK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"iAA" = ( -/obj/machinery/hydroponics/constructable, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/cultivator, -/obj/item/seeds/potato, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/south{ + pixel_x = 5 }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) +/turf/open/floor/wood/parquet, +/area/station/service/theater) "iAO" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 @@ -28511,20 +29663,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"iBd" = ( -/obj/structure/fireplace{ - pixel_x = -32 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/camera{ - c_tag = "Mining Break Room"; - dir = 9 - }, -/obj/machinery/light_switch/directional/north{ - pixel_x = 9 - }, -/turf/open/floor/stone, -/area/mine/eva/lower) "iBe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -28539,19 +29677,18 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"iBj" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, +"iBi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/railing/corner{ - dir = 1 +/obj/structure/table, +/obj/item/food/grown/carrot, +/obj/item/food/grown/carrot{ + pixel_y = 4; + pixel_x = -2 }, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "iBl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28560,19 +29697,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_large, /area/station/science/breakroom) -"iBz" = ( -/obj/structure/sign/warning/no_smoking/directional/south, -/turf/open/openspace, -/area/station/engineering/atmos/storage) +"iBo" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/treatment_center) "iBF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/sorting) -"iBM" = ( -/obj/structure/chair/wood, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "iBO" = ( /obj/machinery/modular_computer/preset/civilian{ dir = 4 @@ -28581,10 +29720,6 @@ dir = 4 }, /area/station/science/explab) -"iCe" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) "iCg" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -28592,22 +29727,37 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"iCj" = ( +/obj/machinery/computer/operating{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/aft) +"iCo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"iCp" = ( +/obj/machinery/vatgrower, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/cable, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/work) "iCq" = ( /obj/structure/rack, /obj/item/stack/rods/ten, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"iCw" = ( -/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/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/turf/open/floor/iron/white/corner{ - dir = 4 - }, -/area/station/hallway/secondary/entry) "iCz" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -28624,15 +29774,6 @@ }, /turf/open/floor/plating, /area/station/science/robotics/lab) -"iCD" = ( -/obj/machinery/door/airlock/external{ - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "iCE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28642,16 +29783,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"iCS" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/chair/stool/bar/directional/east, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "iCX" = ( /obj/machinery/power/solar_control{ dir = 4; @@ -28661,6 +29792,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"iDe" = ( +/obj/item/wrench, +/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ + dir = 1; + name = "Air In" + }, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/station/maintenance/fore) "iDp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall, @@ -28680,25 +29821,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood, /area/station/security/prison/rec) -"iDv" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"iDx" = ( -/obj/structure/railing/wooden_fence{ - dir = 4 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"iDB" = ( -/obj/structure/table/wood, -/obj/item/circuitboard/machine/fax, -/obj/structure/frame/machine, -/obj/item/stack/cable_coil/five, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "iDG" = ( /obj/machinery/door/window/left/directional/east{ name = "Containment Pen 3"; @@ -28710,25 +29832,11 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/xenobiology) -"iDK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/commons/lounge) "iDQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"iEd" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall/r_wall, -/area/station/engineering/supermatter) "iEA" = ( /obj/structure/table/glass, /obj/item/storage/box/gloves{ @@ -28770,19 +29878,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"iES" = ( -/obj/effect/turf_decal/tile/blue, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/white/corner{ - dir = 4 - }, -/area/station/hallway/secondary/entry) -"iEY" = ( -/obj/machinery/restaurant_portal/bar, -/obj/effect/turf_decal/delivery/red, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "iFe" = ( /obj/structure/cable, /turf/open/floor/iron/dark/smooth_half, @@ -28794,15 +29889,6 @@ /mob/living/basic/pet/dog/pug/mcgriff, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) -"iFh" = ( -/obj/structure/table, -/obj/item/newspaper, -/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) "iFj" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/tile/blue/opposingcorners, @@ -28815,29 +29901,17 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"iFz" = ( -/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/holopad, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +"iFw" = ( +/obj/structure/closet/bombcloset, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/spawner/random/trash/janitor_supplies, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "iFL" = ( /obj/structure/bed/dogbed/renault, /mob/living/basic/pet/fox/renault, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) -"iFQ" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "iFX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28851,6 +29925,14 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"iGd" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/hallway/secondary/entry) "iGj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28872,25 +29954,30 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"iGQ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "botany_apiary"; + name = "Apiary Shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "iHc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) -"iHm" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/obj/machinery/firealarm/directional/west, -/obj/machinery/camera{ - c_tag = "Atmospherics - South West"; - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/atmos) "iHp" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai) +"iHP" = ( +/obj/machinery/holopad, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/smooth_half, +/area/station/service/hydroponics) "iHV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -28922,23 +30009,29 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"iIk" = ( -/obj/structure/disposalpipe/segment{ +"iIm" = ( +/obj/effect/turf_decal/siding/wood{ dir = 4 }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 +/obj/machinery/duct, +/obj/machinery/door/firedoor{ + dir = 4 }, -/obj/effect/turf_decal/stripes/white/line{ +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/door/airlock{ + name = "Bar"; dir = 4 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/starboard) +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/bar) "iIs" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, @@ -28947,15 +30040,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"iIv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/cup/bucket{ - pixel_y = 10; - pixel_x = -4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "iIA" = ( /obj/effect/turf_decal/bot, /turf/open/floor/iron, @@ -28968,6 +30052,24 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"iIJ" = ( +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) +"iIY" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating, +/area/station/medical/chemistry) +"iJh" = ( +/obj/structure/sign/warning/gas_mask/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "iJl" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/siding/wood{ @@ -28994,6 +30096,15 @@ dir = 8 }, /area/station/command/heads_quarters/rd) +"iJE" = ( +/obj/structure/rack, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/effect/spawner/random/armory/rubbershot, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/security/armory) "iJI" = ( /obj/structure/chair{ dir = 1 @@ -29015,15 +30126,30 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/plastic, /area/station/commons/dorms/laundry) -"iJM" = ( -/obj/structure/stairs/south{ +"iJN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/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, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ dir = 1 }, -/turf/open/floor/iron, -/area/station/commons/dorms/laundry) +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "iJO" = ( /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"iJV" = ( +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/floor/carpet/lone, +/area/station/service/chapel) "iJX" = ( /obj/item/target, /obj/structure/window/reinforced/spawner/directional/south, @@ -29032,6 +30158,42 @@ }, /turf/open/floor/plating/icemoon, /area/station/science/ordnance/bomb) +"iKd" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/closet/chefcloset, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) +"iKh" = ( +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) +"iKj" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access"; + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "iKl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29041,13 +30203,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"iKp" = ( -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "iKw" = ( /obj/item/kitchen/fork/plastic, /obj/structure/table, @@ -29092,6 +30247,11 @@ dir = 4 }, /area/station/command/gateway) +"iLn" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "iLt" = ( /obj/structure/table/wood, /obj/item/flashlight/lantern, @@ -29154,19 +30314,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"iLP" = ( -/obj/structure/ladder, -/obj/structure/railing{ - dir = 9 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) "iLY" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"iMb" = ( +/obj/structure/railing/corner, +/turf/open/floor/stone, +/area/station/commons/lounge) "iMf" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/dark_blue/line{ @@ -29176,6 +30333,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"iMg" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/button/flasher{ + id = "cell4"; + pixel_y = -26 + }, +/turf/open/floor/iron, +/area/station/security/brig/upper) "iMp" = ( /obj/machinery/status_display/ai/directional/east, /turf/open/floor/circuit, @@ -29224,6 +30389,12 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/engine, /area/station/engineering/supermatter) +"iNl" = ( +/obj/structure/fence/cut/large{ + dir = 1 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "iNn" = ( /obj/structure/chair/office{ dir = 1 @@ -29239,6 +30410,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/genetics) +"iNo" = ( +/turf/closed/mineral/random/snow, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "iNy" = ( /obj/structure/chair{ dir = 4 @@ -29266,6 +30440,11 @@ "iNQ" = ( /turf/open/floor/carpet, /area/station/maintenance/space_hut/cabin) +"iNY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/white/corner, +/area/station/command/heads_quarters/rd) "iOc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29281,19 +30460,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"iOu" = ( -/obj/structure/bed, -/obj/item/bedsheet/cmo, -/obj/machinery/light_switch/directional/south, -/obj/effect/landmark/start/chief_medical_officer, -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/obj/machinery/camera{ - c_tag = "Chief Medical Officer Bedroom"; - dir = 4; - network = list("ss13","medbay") - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) "iOv" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -29351,30 +30517,11 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/mining) -"iPK" = ( -/obj/structure/rack, -/obj/item/pickaxe, -/obj/item/flashlight{ - pixel_y = 2 - }, -/obj/structure/lattice/catwalk, -/obj/machinery/camera/directional/south{ - c_tag = "Ordnance Lower Mix Lab"; - network = list("ss13","rd") - }, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) -"iPP" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/landmark/start/bartender, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/event_spawn, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/bar) +"iPz" = ( +/obj/effect/landmark/start/medical_doctor, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/storage) "iPR" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -29385,23 +30532,47 @@ dir = 4 }, /area/station/security/brig/entrance) +"iQa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) +"iQd" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/status_display/shuttle{ + pixel_x = -32; + shuttle_id = "arrival" + }, +/turf/open/floor/iron/white/corner{ + dir = 8 + }, +/area/station/hallway/secondary/entry) "iQj" = ( /obj/item/radio/intercom/directional/north, /obj/structure/table/glass, /obj/machinery/computer/records/medical/laptop, /turf/open/floor/iron/white/textured, /area/station/security/medical) -"iQt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/service/chapel) -"iQw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/maintenance/aft/greater) "iQx" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 @@ -29458,9 +30629,15 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) -"iRa" = ( -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/fore) +"iQY" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/white, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "iRc" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -29518,6 +30695,13 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) +"iRJ" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix to Port" + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "iRM" = ( /obj/structure/rack, /obj/item/stack/sheet/iron/twenty, @@ -29532,28 +30716,6 @@ dir = 6 }, /area/station/science/research) -"iRP" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/atmospherics, -/obj/item/holosign_creator/atmos, -/obj/item/holosign_creator/atmos, -/obj/structure/sign/warning/radiation/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/hfr_room) -"iRS" = ( -/obj/structure/disposalpipe/segment{ - 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/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "iRV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29566,13 +30728,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/mine/laborcamp/security) -"iSk" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ - dir = 6 - }, -/turf/open/openspace, -/area/station/science/ordnance/office) "iSl" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Mix to Port" @@ -29593,19 +30748,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/fore/lesser) -"iSs" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/virology) "iSA" = ( /obj/machinery/conveyor{ dir = 4; id = "packageSort2" }, -/obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/cargo/sorting) "iSE" = ( @@ -29640,6 +30787,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/fore) +"iTr" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/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, +/area/station/service/hydroponics) "iTy" = ( /obj/machinery/space_heater, /obj/machinery/airalarm/directional/south, @@ -29653,21 +30810,11 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"iTE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"iTC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 8 - }, -/obj/machinery/holopad, -/obj/effect/landmark/start/depsec/medical, -/obj/machinery/computer/security/telescreen/med_sec/directional/east, -/turf/open/floor/iron/dark/smooth_large, -/area/station/security/checkpoint/medical) +/obj/structure/sign/warning/docking/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "iTJ" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -29695,13 +30842,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"iUi" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/wood/large, -/area/station/service/bar) "iUm" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -29716,19 +30856,25 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/iron, /area/station/security/warden) +"iUr" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) +"iUs" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/dorms) "iUw" = ( /obj/structure/closet/lasertag/blue, /obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/iron, /area/station/security/prison/workout) -"iUx" = ( -/obj/effect/turf_decal/siding/yellow/corner, -/obj/machinery/duct, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/lobby) "iUz" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -29761,6 +30907,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/supermatter) +"iUM" = ( +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin/tagger, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron, +/area/station/cargo/office) +"iUO" = ( +/obj/machinery/camera/motion/directional/north{ + c_tag = "EVA Storage North" + }, +/obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/bot_white, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/ai_monitored/command/storage/eva) "iUT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -29785,31 +30948,37 @@ }, /turf/open/floor/iron, /area/station/commons/storage/primary) -"iVi" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 +"iVg" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer1{ + dir = 1 }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/cafeteria, -/area/station/hallway/secondary/entry) -"iVm" = ( -/obj/structure/stairs/north, -/obj/structure/railing{ - dir = 8 +/obj/machinery/camera/directional/east{ + c_tag = "Atmospherics - South East" }, /turf/open/floor/iron, -/area/mine/eva/lower) -"iVu" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 +/area/station/engineering/atmos) +"iVv" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/textured, -/area/station/security/brig) +/obj/structure/cable, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/hallway/secondary/entry) "iVA" = ( /obj/effect/landmark/start/shaft_miner, /turf/open/floor/iron, /area/station/cargo/miningdock) +"iVD" = ( +/obj/structure/chair/stool/directional/east, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "iVN" = ( /obj/machinery/vending/sustenance, /turf/open/floor/iron/dark/textured, @@ -29825,16 +30994,11 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"iVY" = ( -/obj/structure/stairs/south, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) -"iWb" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) +"iWj" = ( +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "iWq" = ( /obj/structure/chair{ dir = 4 @@ -29842,30 +31006,17 @@ /obj/machinery/light/small/dim/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"iWs" = ( -/obj/machinery/door/firedoor/border_only, -/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) -"iWI" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/reagent_dispensers/watertank, -/turf/open/openspace, -/area/station/science/xenobiology) +"iWA" = ( +/obj/structure/closet, +/obj/effect/spawner/random/clothing/gloves, +/obj/effect/spawner/random/trash/janitor_supplies, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel) "iWM" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"iWN" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/newscaster/directional/north, -/obj/item/surgery_tray/full/morgue, -/obj/structure/table/reinforced, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "iWP" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -29895,10 +31046,27 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"iXc" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/genturf/orange, +/area/icemoon/underground/unexplored/no_rivers) +"iXg" = ( +/obj/structure/transit_tube, +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "iXh" = ( /obj/machinery/vending/cigarette, -/obj/machinery/firealarm/directional/east, +/obj/machinery/firealarm/directional/east{ + pixel_y = 6 + }, /obj/structure/cable, +/obj/machinery/light_switch/directional/east{ + pixel_y = -5 + }, /turf/open/floor/iron, /area/station/security/prison/visit) "iXk" = ( @@ -29923,13 +31091,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"iXB" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/machinery/hydroponics/soil, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) "iXC" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -29940,6 +31101,34 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"iXK" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/morgue) +"iXM" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/five, +/obj/item/stack/cable_coil/five, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) +"iXO" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/biogenerator, +/turf/open/floor/iron, +/area/station/service/hydroponics) "iXP" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -29950,6 +31139,31 @@ "iYb" = ( /turf/closed/wall, /area/station/maintenance/central/greater) +"iYd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/duct, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/warning/radiation/rad_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) +"iYe" = ( +/obj/item/kirbyplants/random, +/obj/machinery/vending/wallmed/directional/west, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/gateway) +"iYq" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "iYs" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -29973,6 +31187,12 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/mine/mechbay) +"iYD" = ( +/obj/structure/fence{ + dir = 2 + }, +/turf/open/genturf/blue, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "iYG" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -29980,10 +31200,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"iYH" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall/r_wall, -/area/station/medical/virology) "iYU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29992,12 +31208,6 @@ }, /turf/open/floor/iron/textured, /area/station/security/brig) -"iYY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sink/directional/south, -/obj/structure/mirror/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "iZl" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ @@ -30007,11 +31217,6 @@ }, /turf/open/floor/plating, /area/station/science/research) -"iZm" = ( -/obj/structure/chair/wood, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "iZn" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/wood, @@ -30025,6 +31230,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"iZr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/electrolyzer, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "iZs" = ( /obj/structure/table, /obj/item/kitchen/spoon/plastic, @@ -30041,13 +31251,13 @@ "iZz" = ( /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/labor_camp) -"iZD" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 +"iZC" = ( +/obj/machinery/status_display/ai/directional/south, +/obj/structure/chair/sofa/right/brown{ + dir = 4 }, -/obj/machinery/griddle, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +/turf/open/floor/wood/large, +/area/station/commons/lounge) "iZO" = ( /obj/machinery/status_display/ai/directional/west, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -30083,12 +31293,6 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"jae" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "jag" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -30097,6 +31301,12 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"jai" = ( +/obj/structure/fence/post{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "jak" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/disposalpipe/segment{ @@ -30108,10 +31318,6 @@ /obj/effect/landmark/start/head_of_personnel, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"jas" = ( -/obj/structure/fence, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "jaw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30121,6 +31327,15 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"jaE" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "jaO" = ( /obj/machinery/door/airlock/atmos/glass{ name = "Turbine Access" @@ -30137,13 +31352,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"jaS" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/siding/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) "jaW" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -30180,12 +31388,27 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark/textured, /area/station/security/prison/rec) -"jbu" = ( -/obj/structure/railing/corner, -/turf/open/floor/iron/dark/side{ - dir = 9 +"jbe" = ( +/obj/structure/sign/warning/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/surface/outdoors/nospawn) +"jbf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance{ + name = "Medbay Maintenance" }, -/area/station/service/chapel) +/obj/effect/decal/cleanable/dirt, +/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/cmo, +/obj/effect/turf_decal/tile/purple/full, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"jbq" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "jbx" = ( /obj/machinery/door/airlock/medical/glass{ name = "Medbay Storage" @@ -30201,23 +31424,18 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/white/smooth_large, /area/station/medical/storage) -"jbB" = ( -/obj/structure/beebox, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 9 +"jbz" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Library Art Gallery" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/camera{ - c_tag = "Service - Botany Apiary"; - dir = 9 +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/spawner/random/structure/table_fancy, +/obj/machinery/light/blacklight/directional/north, +/obj/structure/sign/painting/library_secure{ + pixel_x = 32 }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/turf/open/floor/wood, +/area/station/service/library) "jbC" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -30273,24 +31491,66 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"jcy" = ( +"jcr" = ( +/obj/structure/bodycontainer/morgue, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) +"jcs" = ( +/obj/machinery/door/morgue{ + req_access = list("bar"); + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) +"jct" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /obj/machinery/camera/directional/north{ - c_tag = "Central Hallway North-East" + c_tag = "Security - Upper Brig South" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/sign/poster/official/random/directional/north, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, +/obj/structure/noticeboard/hos{ + pixel_y = 36 + }, /turf/open/floor/iron, -/area/station/hallway/primary/central) -"jcC" = ( -/obj/machinery/requests_console/directional/north{ - department = "Ordnance"; - name = "Ordnance Lab Requests Console" +/area/station/security/brig/upper) +"jcA" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/sign/departments/cargo/directional/north, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"jcF" = ( +/obj/structure/sink/directional/east, +/obj/structure/mirror/directional/west, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) +"jcJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/floor/iron/white, -/area/station/science/ordnance) +/obj/machinery/status_display/supply{ + pixel_y = -32 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "jcP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -30298,16 +31558,31 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"jdd" = ( -/obj/structure/closet/firecloset, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "jdf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/mess) +"jdm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/cryo) +"jdA" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Medbay East"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "jdJ" = ( /obj/structure/chair/wood, /turf/open/floor/carpet, @@ -30332,6 +31607,14 @@ dir = 9 }, /area/station/science/research) +"jdV" = ( +/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/holopad, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "jdW" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -30346,22 +31629,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"jed" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/starboard) -"jee" = ( -/obj/structure/girder, -/obj/effect/spawner/random/structure/grille, -/turf/open/floor/plating, -/area/station/maintenance/fore) "jeh" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{ dir = 1 @@ -30379,17 +31646,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"jem" = ( -/obj/machinery/chem_master{ - name = "CytoMaster 5000" - }, -/obj/item/swab{ - pixel_y = 10; - pixel_x = -2 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "jer" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -30398,14 +31654,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"jes" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Exfiltrate to Port" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/mix) "jez" = ( /obj/machinery/light/small/directional/north, /obj/effect/decal/cleanable/dirt, @@ -30431,22 +31679,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"jeR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airlock_controller/incinerator_atmos{ + pixel_x = 26 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "jfc" = ( /turf/closed/wall, /area/station/command/heads_quarters/hop) +"jfF" = ( +/obj/structure/rack, +/obj/item/shovel, +/obj/item/clothing/mask/gas/plaguedoctor, +/obj/item/tank/internals/emergency_oxygen, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "jfR" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/command/gateway) -"jgd" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Starboard Primary Hallway West" - }, -/obj/structure/sign/nanotrasen{ - pixel_y = 32 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "jgl" = ( /obj/effect/turf_decal/trimline/dark_blue/corner{ dir = 1 @@ -30474,6 +31729,14 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/disposal) +"jgC" = ( +/obj/structure/minecart_rail{ + dir = 10 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "jgD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/wardrobe/pjs{ @@ -30486,16 +31749,41 @@ /obj/structure/closet/secure_closet/security/sec, /turf/open/floor/iron/smooth_edge, /area/station/security/lockers) +"jgL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"jgV" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"jgW" = ( +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) "jhf" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"jhu" = ( -/obj/effect/spawner/random/maintenance/three, -/obj/structure/closet/crate/wooden, -/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +"jhi" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/hallway/primary/central/fore) +"jhj" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/chair/sofa/right/brown, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/carpet/blue, +/area/station/security/prison/work) "jhy" = ( /obj/effect/turf_decal/tile/brown, /turf/open/floor/iron, @@ -30540,65 +31828,39 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"jih" = ( -/mob/living/basic/pet/penguin/emperor{ - name = "Club" - }, -/obj/machinery/light/small/directional/east, -/obj/item/toy/snowball{ - pixel_x = -9; - pixel_y = 17 - }, -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) -"jik" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 6 - }, -/obj/structure/table/glass, -/obj/machinery/light/small/directional/east, -/obj/machinery/firealarm/directional/east, -/obj/item/food/grown/poppy{ - pixel_y = -1; - pixel_x = 3 - }, -/obj/item/food/grown/poppy/geranium{ - pixel_y = 5; - pixel_x = 2 - }, -/obj/item/food/grown/poppy/lily{ - pixel_x = -2 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"jiD" = ( +"jiw" = ( /obj/effect/turf_decal/tile/green/opposingcorners{ dir = 1 }, /obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/structure/table/glass, -/obj/item/book/manual/hydroponics_pod_people, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/sign/poster/contraband/kudzu/directional/north, -/obj/machinery/light/small/directional/west, -/obj/item/plant_analyzer, -/obj/item/watertank{ - pixel_y = -3; - pixel_x = -5 +/obj/machinery/camera/directional/south{ + c_tag = "Service - Botany Garden Access" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 }, /turf/open/floor/iron, /area/station/service/hydroponics) -"jiU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 +"jiB" = ( +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/structure/table, +/obj/machinery/door_buttons/access_button, +/obj/item/clothing/mask/gas{ + pixel_x = 6; + pixel_y = 2 }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/biohazard/directional/north, /turf/open/floor/iron, -/area/station/commons/fitness) +/area/station/science/xenobiology) "jjk" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -30639,13 +31901,24 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"jjJ" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Labor Camp External West"; - network = list("labor") +"jjI" = ( +/obj/machinery/hydroponics/constructable, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"jjM" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/turf/open/floor/iron/white, +/area/station/medical/virology) "jjO" = ( /obj/structure/sink/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30657,33 +31930,11 @@ /obj/effect/turf_decal/tile/dark/fourcorners, /turf/open/floor/iron, /area/mine/living_quarters) -"jko" = ( -/obj/structure/railing, -/obj/structure/rack, -/obj/structure/cable, -/obj/machinery/door/firedoor/border_only, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/effect/spawner/random/armory/dragnet, -/turf/open/floor/iron/dark/textured, -/area/station/ai_monitored/security/armory/upper) "jkH" = ( /obj/structure/training_machine, /obj/effect/landmark/blobstart, /turf/open/floor/engine, /area/station/science/explab) -"jkK" = ( -/obj/structure/railing/wooden_fence{ - dir = 9 - }, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) -"jkN" = ( -/obj/effect/spawner/random/entertainment/arcade, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/eighties, -/area/station/commons/lounge) "jkS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, @@ -30700,6 +31951,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"jkX" = ( +/obj/structure/fence{ + dir = 2 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "jla" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -30723,17 +31983,26 @@ /obj/machinery/atmospherics/components/tank, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"jlk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"jls" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "jlu" = ( /obj/structure/railing/corner, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"jlv" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood, -/obj/effect/spawner/random/entertainment/musical_instrument, -/obj/item/instrument/harmonica, -/turf/open/floor/iron/grimy, -/area/station/commons/lounge) "jly" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -30765,17 +32034,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"jlT" = ( -/obj/structure/chair{ - desc = "Aw geez, I wonder what the chef's cooking up in there!"; - dir = 1; - name = "The Peanut's Gallery" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "jlV" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 4 @@ -30797,13 +32055,6 @@ }, /turf/open/floor/iron/cafeteria, /area/mine/laborcamp) -"jmo" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 9 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) "jms" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -30823,21 +32074,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood/large, /area/mine/eva/lower) +"jmD" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/machinery/status_display/evac/directional/east, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/sign/warning/radiation/rad_area/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) "jmI" = ( /turf/closed/wall/r_wall, /area/station/security/prison/workout) -"jmJ" = ( -/obj/machinery/door/airlock/external, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "chem-morgue-airlock" - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/medical/morgue) "jmR" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30847,16 +32095,22 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"jnh" = ( -/obj/machinery/door/airlock{ - name = "Unisex Showers" +"jmY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) +"jnp" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Cargo Bay North" }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/textured, -/area/station/commons/toilet) +/obj/machinery/light/directional/north, +/obj/structure/noticeboard/qm{ + pixel_y = 36 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "jnR" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -30876,29 +32130,21 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"jnU" = ( -/obj/structure/sign/departments/botany/directional/east, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "jnV" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"jnW" = ( +/obj/structure/railing/wooden_fence{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "jnX" = ( /obj/machinery/shower/directional/south, /obj/item/bikehorn/rubberducky/plasticducky, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) -"jnY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "joa" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor/right/directional/east{ @@ -30939,17 +32185,6 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"joW" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 - }, -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/reagent_containers/cup/watering_can, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "jpd" = ( /obj/machinery/vending/coffee, /turf/open/floor/iron, @@ -30960,20 +32195,17 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"jpi" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/sign/warning/gas_mask{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals."; - pixel_x = -2; - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ +"jpg" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/landmark/start/bartender, +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/area/mine/eva/lower) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/bar) "jpo" = ( /obj/machinery/door/poddoor/preopen{ id = "maint2" @@ -31007,6 +32239,15 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/smooth, /area/station/security/brig/upper) +"jpN" = ( +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/science/research) "jpS" = ( /turf/closed/wall/r_wall, /area/station/cargo/warehouse) @@ -31038,20 +32279,36 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"jqn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/north, -/obj/structure/sign/poster/official/here_for_your_safety/directional/north, -/turf/open/floor/iron, -/area/station/security/prison/visit) "jqr" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) +"jqw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/white, +/area/station/science/genetics) "jqx" = ( /obj/structure/transit_tube/crossing/horizontal, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "jqE" = ( @@ -31073,46 +32330,19 @@ "jqT" = ( /turf/closed/wall/r_wall, /area/station/engineering/storage/tech) -"jqZ" = ( -/obj/effect/landmark/start/hangover, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"jrc" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio6"; - name = "Xenobio Pen 6 Blast DOors"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "jre" = ( /turf/closed/wall, /area/station/maintenance/starboard/lesser) -"jrk" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "jrv" = ( -/obj/item/book/manual/wiki/barman_recipes{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/rag, -/obj/structure/table/wood, -/obj/item/holosign_creator/robot_seat/bar{ - pixel_y = 6 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/bar) +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "jrI" = ( /obj/structure/transit_tube/curved/flipped, /obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "jrQ" = ( @@ -31122,6 +32352,11 @@ /obj/structure/railing/corner/end/flip, /turf/open/floor/iron, /area/mine/production) +"jrX" = ( +/obj/item/cigbutt, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "jrZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -31138,14 +32373,6 @@ }, /turf/open/floor/iron, /area/station/science/robotics/lab) -"jsh" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_y = 5 - }, -/obj/machinery/mining_weather_monitor/directional/east, -/turf/open/floor/iron/grimy, -/area/station/hallway/secondary/entry) "jsp" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, @@ -31191,23 +32418,12 @@ dir = 1 }, /area/station/hallway/primary/port) -"jsR" = ( -/obj/machinery/door/airlock{ - name = "Bar" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/station/service/bar) +"jsO" = ( +/obj/effect/spawner/random/maintenance/three, +/obj/structure/closet/crate/wooden, +/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jtm" = ( /obj/machinery/porta_turret/ai{ dir = 4; @@ -31327,26 +32543,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/mining) -"jtY" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"jub" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Escape" - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/exit/departure_lounge) "jug" = ( /turf/open/floor/glass/reinforced, /area/station/engineering/atmos/pumproom) @@ -31410,10 +32606,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"jvc" = ( -/obj/machinery/door/firedoor/border_only, -/turf/open/openspace, -/area/station/science/ordnance) "jvj" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/chair, @@ -31459,12 +32651,13 @@ /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"jwf" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 +"jvU" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "jwj" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8 @@ -31496,12 +32689,33 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) +"jwv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/hobo_squat, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"jww" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "jwx" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, /turf/open/floor/iron, /area/station/security/brig/upper) +"jwz" = ( +/obj/structure/flora/rock/icy/style_random, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "jwB" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/tile/brown{ @@ -31550,11 +32764,6 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) -"jxr" = ( -/obj/machinery/restaurant_portal/restaurant, -/obj/effect/turf_decal/delivery/red, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "jxv" = ( /obj/effect/landmark/start/paramedic, /obj/structure/cable, @@ -31579,6 +32788,13 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"jyy" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) "jyz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -31590,14 +32806,15 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/virology) -"jyE" = ( -/obj/structure/disposalpipe/segment, +"jyJ" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/machinery/duct, /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/dust, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, +/turf/open/floor/iron/white, +/area/station/medical/virology) "jyL" = ( /obj/structure/cable, /obj/machinery/power/terminal{ @@ -31608,11 +32825,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) -"jyN" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "jyR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -31645,16 +32857,15 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron, /area/station/security/brig/upper) -"jzR" = ( -/obj/structure/table/glass, -/obj/item/shovel/spade, -/obj/item/cultivator{ - pixel_x = 1; - pixel_y = 6 +"jzH" = ( +/obj/machinery/modular_computer/preset/research{ + dir = 4 }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron/smooth_corner, +/area/station/command/heads_quarters/rd) "jzY" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -31696,6 +32907,13 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) +"jAG" = ( +/obj/structure/bed, +/obj/item/bedsheet/cmo, +/obj/machinery/light_switch/directional/south, +/obj/effect/landmark/start/chief_medical_officer, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "jAI" = ( /obj/machinery/module_duplicator, /obj/machinery/light/directional/south, @@ -31749,20 +32967,18 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"jBr" = ( +/obj/machinery/computer/security{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/security/warden) "jBB" = ( /obj/structure/kitchenspike, /turf/open/floor/plating/snowed/coldroom, /area/station/service/kitchen/coldroom) -"jBK" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/landmark/start/hangover/closet, -/obj/machinery/mining_weather_monitor/directional/south, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "jBR" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 8 @@ -31783,21 +32999,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"jCA" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/camera{ - c_tag = "Virology Module North"; - dir = 9; - network = list("ss13","medbay") - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "jCD" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31813,6 +33014,13 @@ /obj/machinery/smartfridge/petri/preloaded, /turf/open/openspace, /area/station/science/xenobiology) +"jCK" = ( +/obj/machinery/modular_computer/preset/cargochat/service, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "jCL" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -31821,26 +33029,37 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/west, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"jCM" = ( -/obj/structure/rack, -/obj/item/bouquet, -/obj/item/binoculars, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +"jCT" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Bridge West Access" + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"jCV" = ( +/obj/machinery/computer/order_console/mining, +/obj/machinery/light/small/directional/south, +/obj/machinery/light_switch/directional/south, +/obj/machinery/newscaster/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Mining Bunks"; + network = list("ss13", "mine") + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/mine/production) "jDc" = ( /obj/effect/spawner/random/vending/snackvend, /obj/structure/sign/departments/restroom/directional/south, /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron/white, /area/station/medical/break_room) -"jDi" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Exfiltrate to Waste" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/mix) +"jDl" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "jDm" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "robotics2"; @@ -31861,6 +33080,16 @@ /obj/machinery/pdapainter/security, /turf/open/floor/wood/large, /area/station/command/heads_quarters/hos) +"jDz" = ( +/obj/machinery/light/small/directional/east, +/obj/item/pickaxe, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/medical/morgue) +"jDB" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "jDG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31880,33 +33109,10 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"jDQ" = ( -/obj/structure/fence/door, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) -"jDS" = ( -/obj/structure/chair/sofa/bench/left, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/white/corner{ - dir = 4 - }, -/area/station/hallway/secondary/entry) -"jDT" = ( -/obj/structure/table/reinforced, -/obj/item/computer_disk/engineering, -/obj/item/computer_disk/engineering, -/obj/item/computer_disk/engineering, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) +"jDV" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jDW" = ( /obj/effect/turf_decal/bot_white/left, /obj/structure/closet/crate/silvercrate, @@ -31919,20 +33125,28 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"jEf" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 +"jDX" = ( +/obj/structure/training_machine, +/obj/item/target, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 }, -/obj/structure/bed/medical/anchored{ - dir = 8 +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness) +"jEo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/item/bedsheet/medical{ +/obj/effect/turf_decal/siding/yellow/corner{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/virology) +/turf/open/floor/iron, +/area/station/engineering/lobby) "jEs" = ( /obj/machinery/conveyor_switch/oneway{ id = "gulag"; @@ -31940,20 +33154,32 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"jEA" = ( -/obj/machinery/light/small/directional/east, -/obj/item/pickaxe, -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/station/medical/morgue) -"jEB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/newscaster/directional/north, -/obj/machinery/light/small/dim/directional/north{ - pixel_y = 1 +"jED" = ( +/obj/machinery/modular_computer/preset/civilian{ + dir = 4 }, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) +"jEE" = ( +/obj/structure/tank_holder/extinguisher, +/obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, -/area/station/maintenance/port/fore) +/area/station/maintenance/port/greater) +"jEJ" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/sign/poster/official/obey/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"jEK" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "jFf" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 @@ -31966,18 +33192,6 @@ /obj/structure/rack, /turf/open/floor/iron, /area/station/command/gateway) -"jFu" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/service/bar) -"jFA" = ( -/obj/effect/decal/cleanable/blood/bubblegum, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "jFJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -32007,11 +33221,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"jFY" = ( -/obj/effect/spawner/random/entertainment/arcade, -/obj/machinery/digital_clock/directional/north, -/turf/open/floor/eighties, -/area/station/commons/lounge) "jFZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32041,36 +33250,28 @@ }, /turf/open/floor/iron/large, /area/station/engineering/lobby) -"jGN" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "virology_airlock_exterior"; - idInterior = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Console"; - pixel_x = 8; - pixel_y = 25; - req_access = list("virology") - }, -/obj/structure/closet/secure_closet/medical1, -/turf/open/floor/iron/white, -/area/station/medical/virology) -"jGR" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 4 +"jGJ" = ( +/obj/structure/table/reinforced, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/effect/turf_decal/tile/red/full, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/medical) +"jHb" = ( +/obj/structure/sign/warning/secure_area{ + pixel_y = 32 }, -/obj/effect/turf_decal/stripes/line{ +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"jHe" = ( +/obj/structure/table/wood, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) +"jHh" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, -/turf/open/floor/iron, -/area/station/science/ordnance) -"jGY" = ( -/obj/structure/rack, -/obj/item/clothing/suit/hazardvest, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) +/turf/open/floor/iron/cafeteria, +/area/station/commons/dorms/laundry) "jHF" = ( /obj/item/trash/boritos/red, /obj/structure/cable, @@ -32082,13 +33283,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"jHL" = ( -/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/plating, -/area/station/maintenance/starboard/lesser) "jHQ" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ dir = 1 @@ -32098,16 +33292,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"jHV" = ( -/obj/machinery/mineral/stacking_machine{ - output_dir = 2; - stack_amt = 10 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal) "jHX" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -32169,10 +33353,13 @@ }, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"jIE" = ( -/obj/structure/sign/warning/gas_mask, -/turf/closed/wall, -/area/station/cargo/storage) +"jIB" = ( +/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/plating, +/area/station/maintenance/starboard/lesser) "jII" = ( /turf/closed/wall, /area/station/hallway/primary/central) @@ -32199,12 +33386,6 @@ }, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"jIY" = ( -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "jIZ" = ( /obj/machinery/power/terminal{ dir = 1 @@ -32234,46 +33415,41 @@ }, /turf/open/floor/plating, /area/station/cargo/sorting) -"jJr" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/warning/electric_shock/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 +"jJl" = ( +/obj/effect/landmark/start/botanist, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) -"jJF" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/sign/calendar/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Botany Equipment" }, /turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"jJG" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/area/station/service/hydroponics) +"jJA" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood{ + dir = 4 }, -/obj/machinery/door/firedoor/heavy, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +/turf/open/floor/iron, +/area/station/service/bar) "jJM" = ( /turf/open/floor/glass, /area/station/security/lockers) -"jJR" = ( -/obj/machinery/firealarm/directional/south, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 +"jJQ" = ( +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/siding/white{ + dir = 8 }, -/obj/item/pen, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/command/bridge) +/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato{ + pixel_y = 2; + pixel_x = 2 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "jJV" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -32287,6 +33463,17 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"jJZ" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin{ + pixel_y = 6 + }, +/obj/item/taperecorder{ + pixel_x = 9 + }, +/turf/open/floor/iron/dark, +/area/station/science/explab) "jKe" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -32313,6 +33500,18 @@ }, /turf/open/floor/plating/icemoon, /area/station/security/execution/education) +"jKs" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/landmark/navigate_destination/bar, +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Atrium" + }, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/bar/atrium) "jKy" = ( /obj/machinery/holopad, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -32350,25 +33549,9 @@ /obj/effect/landmark/event_spawn, /obj/structure/cable, /obj/effect/turf_decal/tile/green, +/obj/structure/sign/plaques/kiddie, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"jKL" = ( -/obj/structure/cable, -/obj/structure/holosign/barrier/atmos/sturdy, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/poddoor/shutters{ - dir = 1; - id = "minecraft_shutter"; - name = "Cart Shutters" - }, -/obj/structure/minecart_rail{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/station/service/kitchen/coldroom) "jKN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32384,6 +33567,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"jKQ" = ( +/obj/structure/sign/warning/fire{ + pixel_y = 32 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "jKY" = ( /turf/closed/mineral/random/snow/high_chance, /area/icemoon/underground/unexplored/rivers/deep/shoreline) @@ -32391,6 +33580,19 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/openspace, /area/station/commons/storage/mining) +"jLc" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/chem_master/condimaster{ + desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; + name = "SapMaster XP" + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "jLf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -32420,13 +33622,21 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"jLB" = ( -/obj/structure/sign/warning/electric_shock/directional/east, +"jLt" = ( /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, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, /turf/open/floor/iron, -/area/station/hallway/primary/central/fore) +/area/station/hallway/primary/starboard) +"jLK" = ( +/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/hallway/secondary/service) "jLM" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32498,6 +33708,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/atmos) +"jMn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Maintenance" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"jMr" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/trash/botanical_waste, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"jMu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "jMw" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -32508,16 +33742,35 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"jMD" = ( -/obj/effect/turf_decal/siding/white/corner{ +"jMx" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Dormitory North" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"jMJ" = ( -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +/obj/structure/sign/calendar/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms) +"jME" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external/glass{ + name = "Supply Door Airlock"; + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, +/area/station/cargo/storage) +"jMO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jMY" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/dark_blue/line{ @@ -32527,10 +33780,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"jNe" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "jNf" = ( /turf/closed/wall, /area/station/security/prison/garden) @@ -32546,6 +33795,9 @@ /obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) +"jNo" = ( +/turf/open/floor/stone, +/area/station/service/bar/atrium) "jNp" = ( /turf/closed/wall/r_wall, /area/station/security/holding_cell) @@ -32561,18 +33813,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"jOi" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/turf/open/floor/iron, -/area/station/command/bridge) "jOj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32588,6 +33828,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/hallway/primary/port) +"jOy" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Central Hallway West" + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/bluespace_vendor/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "jOz" = ( /obj/effect/turf_decal/trimline/blue/end{ dir = 1 @@ -32601,6 +33849,19 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"jOC" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Bar" + }, +/turf/open/floor/iron, +/area/station/service/bar) "jOD" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -32613,6 +33874,12 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"jOK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore) "jOQ" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -32667,6 +33934,15 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) +"jPq" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "jPs" = ( /obj/effect/spawner/random/engineering/canister, /obj/structure/railing{ @@ -32690,6 +33966,14 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/breakroom) +"jPL" = ( +/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/effect/spawner/random/trash/botanical_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jPV" = ( /obj/structure/sign/poster/random/directional/south, /turf/open/floor/plating, @@ -32701,6 +33985,15 @@ "jQd" = ( /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"jQe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Gas to Filter" + }, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "jQh" = ( /obj/structure/ladder, /obj/machinery/light/small/directional/east, @@ -32713,16 +34006,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"jQt" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; - location = "Medbay" - }, -/obj/effect/turf_decal/bot, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/plasticflaps/opaque, -/turf/open/floor/iron/dark, -/area/station/maintenance/department/medical/central) "jQz" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -32775,12 +34058,6 @@ /obj/item/gps/mining, /turf/open/floor/iron, /area/station/commons/storage/mining) -"jQM" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "jQS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, @@ -32809,16 +34086,27 @@ /obj/item/ai_module/supplied/freeform, /obj/effect/turf_decal/tile/dark_green, /obj/machinery/light/directional/west, +/obj/structure/sign/nanotrasen{ + pixel_x = -32 + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"jRm" = ( -/obj/structure/mannequin/skeleton, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"jRi" = ( +/obj/structure/fence{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "jRt" = ( -/obj/effect/spawner/random/structure/grille, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "jRu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32870,6 +34158,21 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"jRX" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) +"jSa" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/dice, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "jSe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32887,16 +34190,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"jSp" = ( -/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/dust, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "jSt" = ( /obj/machinery/door/airlock/external{ name = "Security Yard"; @@ -32908,25 +34201,23 @@ }, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) -"jSy" = ( -/obj/structure/fence/end{ - dir = 1 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "jSC" = ( /obj/structure/bookcase/random/reference, /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/service/library) -"jSL" = ( -/obj/structure/stairs/east, -/turf/open/floor/plating, -/area/station/hallway/primary/central/fore) -"jSQ" = ( -/obj/structure/sign/poster/official/here_for_your_safety/directional/east, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +"jSN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/station/commons/dorms/laundry) "jST" = ( /obj/machinery/door/window/right/directional/north{ name = "Bridge Delivery"; @@ -32962,6 +34253,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/explab) +"jTw" = ( +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plating, +/area/station/maintenance/fore) "jTG" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -32985,6 +34280,23 @@ /obj/effect/mapping_helpers/airlock/access/all/science/rd, /turf/open/floor/iron/dark, /area/station/science/server) +"jUb" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/item/stack/sheet/mineral/coal{ + pixel_x = 6; + pixel_y = 3 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) +"jUi" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "jUn" = ( /obj/structure/table, /obj/item/folder/red{ @@ -33002,14 +34314,18 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) -"jUv" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 +"jUs" = ( +/obj/machinery/door/airlock/external{ + name = "Graveyard Access"; + dir = 4 }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/morgue) "jUB" = ( /turf/closed/wall, /area/station/medical/virology) @@ -33028,13 +34344,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) -"jUX" = ( -/obj/machinery/light/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/ordnance/office) "jUY" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/secure_closet/personal{ @@ -33052,47 +34361,46 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"jVa" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "jVb" = ( /obj/machinery/space_heater, /obj/machinery/light/small/directional/north, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/fore) -"jVi" = ( -/turf/open/floor/iron/stairs/left{ - dir = 4 - }, -/area/station/science/cytology) -"jVm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/directional/west, +"jVp" = ( +/obj/item/kirbyplants/fern, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"jVx" = ( -/obj/machinery/light/small/directional/south, -/obj/structure/sign/warning/cold_temp/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/area/station/maintenance/starboard/lesser) +"jVs" = ( +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_y = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) +/obj/item/folder/white{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -4 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) "jVE" = ( /obj/effect/turf_decal/box/white, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"jVL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"jWb" = ( /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 6 }, -/obj/structure/sign/departments/rndserver/directional/south, -/turf/open/floor/iron/white, -/area/station/science/research) +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "jWl" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -33104,28 +34412,45 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"jWm" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) +"jWq" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "jWt" = ( /obj/structure/cable, /obj/structure/closet/radiation, /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) -"jWJ" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/closet/emcloset/anchored, -/obj/structure/sign/warning/gas_mask/directional/west, -/turf/open/floor/plating, -/area/station/engineering/main) +"jWO" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/machinery/newscaster/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/full, +/obj/machinery/camera/directional/north{ + c_tag = "Security Post - Medbay"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/medical) "jWP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) -"jXc" = ( -/obj/structure/sign/poster/official/help_others, -/turf/closed/wall/ice, -/area/icemoon/underground/explored) "jXe" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -33150,16 +34475,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"jXC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/item/storage/box, -/obj/effect/spawner/random/bureaucracy/birthday_wrap, -/obj/structure/sign/poster/contraband/random/directional/north, -/obj/effect/spawner/random/bureaucracy/birthday_wrap, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "jXH" = ( /obj/machinery/conveyor{ dir = 8; @@ -33201,14 +34516,6 @@ /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"jYd" = ( -/obj/structure/sign/warning/electric_shock/directional/north, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "jYj" = ( /obj/structure/sign/warning/secure_area/directional/north, /obj/effect/turf_decal/stripes/red/line{ @@ -33223,6 +34530,29 @@ /obj/structure/mirror/directional/south, /turf/open/floor/iron/freezer, /area/station/medical/break_room) +"jYF" = ( +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/poddoor/preopen{ + id = "Biohazard"; + name = "Biohazard Containment Door" + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/noticeboard/rd{ + pixel_y = 36 + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured, +/area/station/science/research) +"jYG" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/filingcabinet/filingcabinet, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "jYH" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 9 @@ -33230,18 +34560,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) -"jYI" = ( -/obj/effect/spawner/random/trash/mess, -/obj/structure/disposalpipe/segment, -/obj/structure/railing/corner/end, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"jYL" = ( -/obj/structure/light_construct/directional/south, -/obj/structure/sign/poster/contraband/random/directional/south, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) "jYS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/plating, @@ -33256,10 +34574,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"jZc" = ( -/obj/machinery/light/small/dim/directional/east, -/turf/open/floor/stone, -/area/station/commons/lounge) "jZe" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -33276,20 +34590,56 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) +"jZj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/item/radio/intercom/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "Service - Atrium Entrance" + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"jZo" = ( +/obj/structure/fence{ + dir = 2 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "jZr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/extinguisher_cabinet/directional/east, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/eva) -"jZB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" +"jZt" = ( +/obj/structure/bodycontainer/morgue{ + dir = 8 }, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) +"jZy" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/cobweb, +/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) "jZD" = ( /obj/structure/chair/office{ dir = 1 @@ -33304,25 +34654,10 @@ dir = 10 }, /area/station/security/prison) -"jZJ" = ( -/obj/machinery/vending/wardrobe/bar_wardrobe, -/obj/machinery/camera/directional/north{ - c_tag = "Service - Backroom" - }, -/obj/machinery/status_display/ai/directional/north, -/turf/open/floor/wood/parquet, -/area/station/service/bar/backroom) "jZM" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) -"jZN" = ( -/obj/structure/marker_beacon/burgundy{ - name = "landing marker" - }, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "jZU" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -33335,35 +34670,11 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"kav" = ( -/obj/effect/spawner/random/trash/moisture_trap, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "kaw" = ( /obj/machinery/photocopier, /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/cargo/office) -"kax" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/machinery/light_switch/directional/north{ - pixel_x = -5 - }, -/obj/structure/closet/secure_closet/medical1, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/virology) -"kaI" = ( -/obj/effect/spawner/random/maintenance/two, -/obj/structure/closet/crate, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "kaK" = ( /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/iron, @@ -33391,12 +34702,6 @@ /obj/effect/decal/cleanable/food/pie_smudge, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"kbp" = ( -/obj/structure/marker_beacon/burgundy, -/obj/structure/fluff/fokoff_sign, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "kbq" = ( /obj/machinery/conveyor{ dir = 1; @@ -33413,12 +34718,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"kbu" = ( -/obj/structure/reagent_dispensers/plumbed{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "kbx" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -33427,10 +34726,28 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) +"kby" = ( +/obj/machinery/hydroponics/soil, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "kbJ" = ( /obj/machinery/field/generator, /turf/open/floor/plating, /area/station/engineering/engine_smes) +"kbL" = ( +/obj/structure/table, +/obj/machinery/light/small/dim/directional/west, +/obj/item/camera{ + pixel_y = 9; + pixel_x = -2 + }, +/obj/item/reagent_containers/cup/glass/waterbottle/empty{ + pixel_y = 5; + pixel_x = 4 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "kbN" = ( /obj/structure/table/wood, /obj/item/storage/box/matches, @@ -33452,6 +34769,15 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/fore) +"kbS" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "kcc" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Infirmary" @@ -33475,29 +34801,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"kcj" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "kcm" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/command_all, /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/engineering/storage/tech) -"kcs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/commons/fitness) -"kcw" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) "kcC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -33528,16 +34837,23 @@ }, /turf/open/floor/plating, /area/station/security/prison/visit) -"kcW" = ( -/obj/structure/sign/warning/directional/south, -/turf/open/genturf/blue, -/area/icemoon/underground/unexplored/rivers/deep/shoreline) -"kda" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/random/maintenance/two, -/obj/item/sign, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"kcT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron, +/area/station/maintenance/department/electrical) +"kcZ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/iron/smooth, +/area/station/maintenance/port/fore) "kdc" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 8 @@ -33547,16 +34863,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"kdo" = ( -/obj/structure/sign/warning/test_chamber/directional/south, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) -"kdw" = ( -/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_smooth, -/area/station/maintenance/starboard/fore) +"kdg" = ( +/obj/structure/railing, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/science/ordnance) "kdy" = ( /obj/machinery/door/poddoor/shutters{ id = "secmechbay"; @@ -33567,18 +34879,37 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark, /area/station/security/mechbay) +"kdA" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/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/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"kdC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "kdF" = ( /obj/effect/spawner/random/vending/snackvend, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"kdJ" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing{ +"kdS" = ( +/obj/structure/fence{ dir = 1 }, -/obj/structure/railing, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "kdT" = ( /obj/machinery/iv_drip, /obj/item/reagent_containers/blood, @@ -33601,26 +34932,10 @@ }, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) -"kea" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/structure/desk_bell{ - pixel_x = -3 - }, -/turf/open/floor/iron, -/area/station/service/bar) "kei" = ( /obj/docking_port/stationary/escape_pod, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"keu" = ( -/obj/structure/lattice/catwalk, -/obj/structure/marker_beacon/burgundy{ - name = "landing marker" - }, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/openspace/icemoon/keep_below, -/area/icemoon/underground/explored) "kex" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -33639,18 +34954,6 @@ /obj/item/canvas/nineteen_nineteen, /turf/open/floor/sepia, /area/station/security/prison/rec) -"keL" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/commons/dorms) -"keM" = ( -/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/stone, -/area/station/commons/lounge) "keP" = ( /turf/closed/wall, /area/station/engineering/atmos/storage/gas) @@ -33666,21 +34969,6 @@ dir = 1 }, /area/station/hallway/primary/central) -"keT" = ( -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/maintenance/port/fore) "keZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33709,13 +34997,6 @@ /obj/item/trash/energybar, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"kfk" = ( -/obj/structure/table/wood, -/obj/item/paper, -/obj/item/pen, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "kfl" = ( /obj/structure/table/wood, /obj/item/radio/intercom/directional/south, @@ -33730,6 +35011,12 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"kfr" = ( +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "kfs" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos) @@ -33765,13 +35052,12 @@ /obj/structure/sign/poster/random/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) -"kfZ" = ( -/obj/machinery/door/firedoor/heavy, -/obj/structure/sign/warning/test_chamber/directional/east, -/turf/open/floor/iron/white/corner{ - dir = 1 +"kfS" = ( +/obj/machinery/atmospherics/components/tank/air/layer4{ + initialize_directions = 2 }, -/area/station/science/research) +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "kgc" = ( /obj/structure/disposalpipe/junction/flip{ dir = 8 @@ -33806,6 +35092,11 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) +"kgw" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "kgy" = ( /obj/structure/cable, /obj/effect/spawner/random/structure/steam_vent, @@ -33868,23 +35159,10 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"kho" = ( -/obj/item/radio/intercom/directional/south, -/obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Psychology Office"; - name = "Psychology Office Fax Machine" - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/psychology) -"kht" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"khs" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "khu" = ( /obj/structure/closet/toolcloset, /obj/effect/decal/cleanable/dirt, @@ -33897,24 +35175,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/atmos) -"khz" = ( -/obj/structure/marker_beacon/cerulean, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/genturf, -/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) -"khF" = ( -/obj/machinery/light/small/directional/north, -/obj/structure/sign/warning/gas_mask/directional/north{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/machinery/button/door/directional/north{ - id = "drone_bay"; - name = "Shutter Control"; - pixel_x = -24 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "khR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, @@ -33974,17 +35234,35 @@ /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, +/turf/open/floor/iron/dark/textured, /area/station/maintenance/disposal/incinerator) -"kiI" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/plating, -/area/station/maintenance/fore) "kiL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/meeting_room) +"kiO" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"kiQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/white/side{ + dir = 9 + }, +/area/station/command/heads_quarters/rd) "kiR" = ( /obj/structure/table, /obj/structure/cable, @@ -33999,6 +35277,24 @@ }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) +"kiX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + color = "#0000ff"; + dir = 8; + name = "Supply multi deck pipe adapter" + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + color = "#ff0000"; + dir = 8; + name = "Scrubbers multi deck pipe adapter" + }, +/obj/structure/cable/multilayer/multiz, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kiY" = ( /obj/structure/rack, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -34006,6 +35302,23 @@ /obj/effect/spawner/random/armory/bulletproof_helmet, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) +"kjd" = ( +/obj/structure/plasticflaps{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) +"kjh" = ( +/obj/structure/closet/secure_closet/personal{ + anchored = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/commons/locker) "kjo" = ( /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /obj/machinery/door/airlock/engineering{ @@ -34019,10 +35332,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"kjr" = ( -/obj/structure/sign/warning/test_chamber/directional/south, -/turf/open/floor/engine, -/area/station/science/genetics) "kjt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34063,16 +35372,37 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"kjY" = ( -/obj/structure/sign/warning/secure_area/directional/west, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id = "bridge blast"; - name = "Bridge Blast Door" +"kjN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/command/bridge) +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) +"kjP" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing/corner/end/flip{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "kka" = ( /obj/machinery/requests_console/auto_name/directional/west, /obj/machinery/camera/directional/west{ @@ -34083,18 +35413,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"kkb" = ( -/obj/machinery/door/window/left/directional/east{ - name = "Fitness Ring" - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "kke" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -34109,29 +35427,6 @@ "kkl" = ( /turf/closed/wall, /area/station/security/interrogation) -"kkp" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/aft) -"kkr" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/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, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) "kkA" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster/directional/west, @@ -34150,6 +35445,15 @@ /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"kkF" = ( +/obj/effect/landmark/start/hangover, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/end, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/virology) "kkK" = ( /obj/structure/table, /obj/machinery/power/apc/auto_name/directional/east, @@ -34184,6 +35488,11 @@ /obj/effect/mapping_helpers/airlock/access/all/command/gateway, /turf/open/floor/iron/dark/textured, /area/station/command/gateway) +"kkX" = ( +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/science/research) "klc" = ( /turf/closed/wall, /area/station/medical/cryo) @@ -34213,23 +35522,10 @@ /obj/effect/spawner/random/contraband/prison, /turf/open/floor/carpet/blue, /area/station/security/prison/work) -"klJ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"klP" = ( -/obj/structure/dresser, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain) -"klS" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"klW" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) "klX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/public/glass{ @@ -34241,23 +35537,28 @@ /obj/structure/cable, /turf/open/floor/iron, /area/mine/laborcamp) -"kmf" = ( -/obj/machinery/status_display/evac/directional/west, -/turf/open/openspace, -/area/station/medical/medbay/aft) -"kmg" = ( -/obj/structure/sign/poster/official/obey, -/turf/closed/wall/r_wall, -/area/station/security/prison/visit) "kmi" = ( /obj/effect/landmark/blobstart, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"kmn" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark/side, -/area/station/service/chapel) +"kmo" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"kmq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) "kmA" = ( /obj/structure/bed/medical/anchored{ dir = 4 @@ -34275,12 +35576,6 @@ }, /turf/open/floor/iron/white, /area/mine/laborcamp) -"kmD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/electrolyzer, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "kmG" = ( /obj/machinery/defibrillator_mount/directional/north, /obj/effect/turf_decal/tile/blue/full, @@ -34346,11 +35641,6 @@ dir = 8 }, /area/station/hallway/secondary/entry) -"koj" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/fore) "koH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -34364,22 +35654,19 @@ }, /turf/closed/wall/r_wall, /area/station/engineering/atmos) -"koQ" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 +"kpg" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Chapel External Airlock"; + opacity = 0 }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/entry) -"koX" = ( -/obj/structure/sign/warning/secure_area/directional/west, -/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, /turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat/maint) +/area/station/service/chapel) "kpj" = ( /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 2 @@ -34388,10 +35675,27 @@ /obj/effect/decal/cleanable/dirt, /obj/item/clothing/mask/muzzle, /obj/machinery/flasher/directional/east{ - id = "cell4" + id = "cell4"; + pixel_y = -7 }, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) +"kpn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sink/kitchen/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"kps" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"kpA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron, +/area/station/command/teleporter) "kpC" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/mix) @@ -34427,6 +35731,11 @@ "kqc" = ( /turf/closed/wall, /area/station/security/medical) +"kqg" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/decoration/ornament, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kqh" = ( /obj/structure/chair/wood{ dir = 8 @@ -34464,16 +35773,6 @@ }, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) -"kqo" = ( -/obj/structure/table/wood, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners, -/obj/item/storage/fancy/cigarettes/cigars{ - pixel_y = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/bar) "kqq" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; @@ -34499,13 +35798,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) -"kqx" = ( -/obj/structure/sign/warning/secure_area/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 4 - }, -/area/station/command/gateway) "kqG" = ( /obj/structure/table/reinforced, /obj/machinery/light/small/directional/east, @@ -34522,24 +35814,16 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"kqN" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk/multiz/down, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "kqP" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 4 +/obj/machinery/door/airlock{ + name = "Unisex Showers" }, -/obj/machinery/light/directional/south, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "kqR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34612,22 +35896,6 @@ }, /turf/open/floor/plating, /area/mine/laborcamp/security) -"krE" = ( -/obj/structure/table, -/obj/item/flashlight/flare/candle{ - pixel_y = 1; - pixel_x = -16 - }, -/obj/item/paper/crumpled{ - pixel_y = 3; - pixel_x = 1; - name = "used napkin" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "krN" = ( /obj/structure/sign/poster/official/random/directional/south, /obj/structure/window/reinforced/spawner/directional/west, @@ -34649,19 +35917,39 @@ /obj/machinery/telecomms/bus/preset_four, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"krV" = ( -/obj/machinery/vending/autodrobe/all_access, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison) -"krW" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/entry) "krY" = ( /turf/closed/wall/r_wall, /area/station/science/breakroom) +"krZ" = ( +/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/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"ksb" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/disposal/bin, +/obj/structure/cable, +/obj/structure/disposalpipe/trunk, +/obj/structure/sign/warning/fire/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) +"ksc" = ( +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "kse" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 @@ -34669,19 +35957,27 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/security/prison/mess) -"ksf" = ( -/obj/structure/plasticflaps, -/obj/machinery/conveyor{ - dir = 8; - id = "QMLoad" - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "ksi" = ( /obj/structure/displaycase, /obj/effect/turf_decal/tile/dark/fourcorners, /turf/open/floor/iron, /area/mine/living_quarters) +"ksl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Fitness" + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) "ksn" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -34691,12 +35987,6 @@ dir = 1 }, /area/mine/eva) -"kso" = ( -/obj/structure/fence/corner{ - dir = 6 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) "ksu" = ( /mob/living/basic/mining/gutlunch/warrior, /turf/open/misc/asteroid/snow/icemoon, @@ -34704,29 +35994,6 @@ "ksC" = ( /turf/open/floor/iron, /area/station/security/brig/upper) -"ksH" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/virology) -"ksR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"ksU" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/modular_computer/preset/civilian, -/obj/effect/turf_decal/bot_white, -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/command/gateway) "kta" = ( /turf/closed/wall, /area/station/commons/storage/mining) @@ -34752,27 +36019,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms/laundry) -"ktq" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/warm/directional/south, -/obj/structure/sign/poster/contraband/lizard/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "ktt" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -34793,12 +36039,6 @@ /obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"ktx" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "ktz" = ( /obj/machinery/newscaster/directional/north, /turf/open/floor/wood, @@ -34807,35 +36047,6 @@ /obj/effect/spawner/random/trash/hobo_squat, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"ktD" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/machinery/firealarm/directional/east, -/obj/structure/chair/sofa/corp/left{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Medbay East"; - dir = 6; - network = list("ss13","medbay") - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) -"ktJ" = ( -/obj/structure/chair/stool/directional/north, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) -"ktK" = ( -/obj/structure/chair/sofa/bench/left{ - dir = 4 - }, -/obj/structure/sign/warning/electric_shock/directional/west, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "ktU" = ( /turf/open/floor/carpet, /area/station/command/meeting_room) @@ -34848,35 +36059,53 @@ /obj/machinery/disposal/bin, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"ktY" = ( -/obj/item/radio/intercom/directional/east, -/obj/structure/table, -/obj/machinery/fax/auto_name, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +"ktX" = ( +/obj/structure/fence/post{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "kub" = ( /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/dark, /area/station/service/chapel) -"kuy" = ( -/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver{ - pixel_x = 28 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 +"kuq" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/white, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" }, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) +/turf/open/floor/wood, +/area/station/commons/lounge) +"kux" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "kuC" = ( /obj/structure/closet/cardboard, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"kuJ" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kuR" = ( /obj/structure/barricade/wooden, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"kuT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "kuV" = ( /obj/effect/turf_decal/arrows/red, /obj/effect/turf_decal/tile/purple/half{ @@ -34886,20 +36115,16 @@ dir = 1 }, /area/station/hallway/primary/starboard) -"kva" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/beaker/large{ - pixel_x = -3; - pixel_y = 3 +"kuZ" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 1 }, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/dropper{ - pixel_x = -4; - pixel_y = 4 +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" }, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron, -/area/station/science/xenobiology) +/turf/open/floor/plating, +/area/station/service/hydroponics) "kvf" = ( /obj/effect/turf_decal/caution{ dir = 4 @@ -34907,10 +36132,6 @@ /obj/structure/sign/warning/cold_temp/directional/north, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) -"kvh" = ( -/obj/structure/sign/warning, -/turf/closed/wall/r_wall, -/area/station/security/brig/upper) "kvj" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, @@ -34928,22 +36149,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/iron/smooth, /area/station/maintenance/port/fore) -"kvG" = ( -/obj/structure/sign/warning/secure_area/directional/south, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"kvH" = ( -/obj/structure/ladder, -/obj/structure/sign/warning/cold_temp/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plating, -/area/station/engineering/lobby) "kvR" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -34955,15 +36160,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/science/ordnance/office) -"kvT" = ( -/obj/structure/disposalpipe/segment{ - 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/plating, -/area/station/maintenance/starboard/lesser) "kvX" = ( /turf/open/floor/iron/dark/smooth_edge{ dir = 4 @@ -34986,6 +36182,16 @@ /obj/item/wrench, /turf/open/floor/iron, /area/station/engineering/atmos) +"kwn" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) +"kww" = ( +/obj/machinery/gibber, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "kwz" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -35002,14 +36208,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"kwT" = ( -/obj/machinery/mass_driver/trash{ - dir = 1 - }, -/obj/structure/sign/warning/cold_temp/directional/east, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "kwU" = ( /obj/machinery/computer/records/security, /obj/structure/cable, @@ -35053,31 +36251,47 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"kxA" = ( +/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, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "kxY" = ( /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron, /area/station/engineering/storage_shared) -"kxZ" = ( -/obj/machinery/space_heater, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"kyc" = ( -/obj/effect/turf_decal/tile/blue, -/obj/item/kirbyplants/random, +"kya" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, /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/east, -/obj/structure/cable, -/obj/machinery/status_display/evac/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"kyf" = ( +/obj/structure/bookcase{ + name = "Holy Bookcase" }, -/turf/open/floor/iron/white/corner{ - dir = 8 +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/area/station/hallway/secondary/entry) +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "kyg" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -35114,6 +36328,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"kyM" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/stairs/medium, +/area/mine/eva/lower) "kyU" = ( /obj/machinery/modular_computer/preset/id, /obj/machinery/light/directional/north, @@ -35123,16 +36343,18 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) -"kyW" = ( -/obj/machinery/computer/records/medical, -/obj/structure/cable, -/obj/machinery/button/door/directional/north{ - id = "medsecprivacy"; - name = "Privacy Shutters Control" +"kyV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/dark/smooth_large, -/area/station/security/checkpoint/medical) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/cigbutt, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kzv" = ( /obj/structure/bed, /obj/effect/spawner/random/bedsheet/any, @@ -35162,16 +36384,6 @@ }, /turf/open/floor/iron/large, /area/station/engineering/engine_smes) -"kzC" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Central Hallway South-West - HoP's Office" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "kzD" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -35181,6 +36393,12 @@ pixel_x = 9; pixel_y = 4 }, +/obj/machinery/button/door{ + pixel_y = -3; + pixel_x = -3; + id = "bridge blast"; + name = "Blast Door Control" + }, /turf/open/floor/iron, /area/station/command/bridge) "kzG" = ( @@ -35197,18 +36415,6 @@ /obj/item/multitool, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"kzU" = ( -/obj/structure/dresser, -/obj/structure/mirror/directional/north, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Service - Backstage"; - dir = 9 - }, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "kzZ" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -35218,10 +36424,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"kAm" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/hallway/secondary/exit/departure_lounge) +"kAk" = ( +/obj/structure/railing/wooden_fence{ + dir = 6 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "kAn" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, @@ -35247,6 +36455,21 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"kAQ" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/bar) +"kAT" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "kAW" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 @@ -35254,10 +36477,22 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) -"kAZ" = ( -/obj/structure/tank_holder/extinguisher, -/turf/open/floor/iron/white, -/area/station/medical/cryo) +"kBc" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Holodeck Door" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "holodeck" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/commons/fitness) "kBi" = ( /obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/door/airlock/atmos{ @@ -35293,14 +36528,6 @@ /obj/structure/sink/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"kBO" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "kBU" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -35322,30 +36549,18 @@ dir = 1 }, /area/mine/eva/lower) -"kCb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) "kCg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wood/corner{ dir = 8 }, /obj/machinery/firealarm/directional/west, -/obj/item/radio/intercom/directional/north, /obj/machinery/light/small/directional/west, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, /turf/open/floor/wood, /area/station/service/library) -"kCh" = ( -/obj/structure/closet, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "kCn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35369,11 +36584,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/commons/dorms) -"kCv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash/cigbutt, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "kCx" = ( /obj/structure/table/wood, /obj/item/book/granter/action/spell/smoke/lesser{ @@ -35397,6 +36607,14 @@ }, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"kCC" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "kCG" = ( /obj/effect/turf_decal/tile/brown/fourcorners, /obj/machinery/photocopier, @@ -35412,44 +36630,9 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/mine/laborcamp/security) -"kCR" = ( -/obj/structure/stairs/west, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "kCV" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/service) -"kCY" = ( -/obj/structure/rack, -/obj/item/clothing/shoes/winterboots/ice_boots/eva{ - pixel_y = 2 - }, -/obj/item/clothing/suit/hooded/wintercoat/eva{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/mining_weather_monitor/directional/north, -/obj/effect/turf_decal/delivery/red, -/obj/machinery/camera/directional/north{ - c_tag = "Arrivals Emergency EVA" - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/entry) -"kDb" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped{ - dir = 4; - name = "Exfiltrate Filter" - }, -/obj/effect/turf_decal/trimline/dark_red/filled/warning{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/warning{ - dir = 5 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/mix) "kDc" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input{ dir = 8 @@ -35460,14 +36643,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/sorting) -"kDm" = ( -/obj/structure/closet/crate/trashcart/laundry, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/commons/dorms/laundry) "kDs" = ( /turf/closed/mineral/snowmountain/cavern/icemoon, /area/icemoon/surface/outdoors/nospawn) @@ -35503,6 +36678,16 @@ dir = 4 }, /area/mine/eva) +"kDO" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kEj" = ( /obj/machinery/computer/libraryconsole/bookmanagement, /obj/structure/table, @@ -35523,26 +36708,11 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"kEr" = ( -/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/dust, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"kEs" = ( -/obj/structure/tank_holder/extinguisher, +"kEC" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/closet/emcloset, /turf/open/floor/plating, -/area/station/maintenance/port/greater) -"kEB" = ( -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/robot_debris/down, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/iron/checker, -/area/station/maintenance/port/fore) +/area/station/maintenance/port/aft) "kEM" = ( /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) @@ -35559,6 +36729,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"kFc" = ( +/obj/structure/table/wood, +/obj/item/circuitboard/machine/fax, +/obj/structure/frame/machine, +/obj/item/stack/cable_coil/five, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kFu" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty, @@ -35577,15 +36754,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"kFF" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cart Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/kitchen, -/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, -/obj/structure/barricade/wooden/snowed, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "kFH" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 10 @@ -35607,6 +36775,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/mine/eva) +"kFW" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "kGc" = ( /obj/structure/table/wood, /obj/structure/cable, @@ -35619,6 +36797,27 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/wood/large, /area/station/command/heads_quarters/hos) +"kGe" = ( +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "Bridge Blast Door"; + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/sign/warning/secure_area/directional/north, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) +"kGm" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/cmo/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "kGx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35629,12 +36828,9 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "kGD" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/obj/structure/secure_safe/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kGF" = ( /obj/structure/table, /obj/item/camera_film, @@ -35649,23 +36845,6 @@ dir = 1 }, /area/station/commons/storage/art) -"kGJ" = ( -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Security Checkpoint" - }, -/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/cyclelink_helper_multi{ - cycle_id = "brigoutpost" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark/textured_edge{ - dir = 4 - }, -/area/station/security/brig/entrance) "kGP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red{ @@ -35709,22 +36888,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) -"kHq" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/status_display/shuttle{ - pixel_x = -32; - shuttle_id = "arrival" - }, -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/hallway/secondary/entry) "kHr" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/project) @@ -35806,6 +36969,12 @@ /obj/item/clothing/suit/hooded/wintercoat, /turf/open/floor/vault, /area/station/security/prison/rec) +"kIr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/library) "kIt" = ( /obj/effect/turf_decal/siding/yellow{ dir = 4 @@ -35826,11 +36995,11 @@ /obj/machinery/space_heater, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"kIK" = ( -/obj/effect/turf_decal/tile/blue, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"kIL" = ( +/obj/structure/flora/grass/green/style_random, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "kIU" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner, @@ -35842,12 +37011,6 @@ dir = 1 }, /area/mine/eva) -"kIX" = ( -/obj/structure/fence/corner{ - dir = 6 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) "kJc" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance/two, @@ -35872,6 +37035,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"kJr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/chair/stool/bar/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "kJw" = ( /obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ dir = 4 @@ -35880,26 +37053,18 @@ /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) -"kJx" = ( -/obj/structure/railing/wooden_fence, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"kJG" = ( -/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "cantena_curtains" - }, -/obj/structure/railing{ +"kJF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 4 }, -/obj/effect/turf_decal/siding/white{ +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor/heavy{ dir = 4 }, -/turf/open/floor/wood, -/area/station/commons/lounge) -"kJI" = ( -/obj/structure/transit_tube/station/reverse, -/turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat_interior) +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "kJK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -35914,12 +37079,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"kJP" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "kJU" = ( /obj/structure/girder, /turf/open/floor/iron/dark, @@ -35935,21 +37094,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"kKa" = ( -/obj/item/clothing/under/costume/skeleton, -/obj/item/clothing/head/helmet/skull, -/turf/open/floor/plating, -/area/station/medical/morgue) -"kKk" = ( -/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/morgue) -"kKn" = ( -/obj/machinery/light/cold/directional/east, -/obj/machinery/status_display/ai/directional/east, -/turf/open/openspace, -/area/station/service/kitchen/coldroom) "kKv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/sorting/mail{ @@ -35975,6 +37119,14 @@ "kKL" = ( /turf/closed/wall, /area/station/maintenance/starboard/fore) +"kKT" = ( +/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, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "kKU" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 8 @@ -36014,6 +37166,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/storage) +"kLd" = ( +/obj/structure/fence/post{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "kLo" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/dark/textured, @@ -36023,11 +37181,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) -"kLs" = ( -/obj/structure/sign/warning/docking, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/hallway/secondary/exit/departure_lounge) "kLy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ @@ -36059,17 +37212,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"kMP" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/rack, -/obj/item/storage/backpack/satchel/leather/withwallet, -/obj/item/toy/figure/assistant, -/obj/structure/sign/calendar/directional/west, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/dorms/laundry) "kMY" = ( /obj/effect/turf_decal/siding/yellow{ dir = 6 @@ -36082,13 +37224,22 @@ }, /turf/open/floor/iron/large, /area/station/engineering/storage) -"kNa" = ( -/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, -/turf/open/floor/iron/dark, -/area/station/medical/cryo) +"kNf" = ( +/obj/structure/table, +/obj/item/flashlight/flare/candle{ + pixel_y = 1; + pixel_x = -16 + }, +/obj/item/paper/crumpled{ + pixel_y = 3; + pixel_x = 1; + name = "used napkin" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "kNi" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -36118,8 +37269,9 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "kNC" = ( -/obj/structure/fence, -/turf/open/misc/asteroid/snow/icemoon, +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "kNQ" = ( /obj/structure/cable, @@ -36138,6 +37290,11 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"kOc" = ( +/obj/structure/chair, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "kOi" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 9 @@ -36155,6 +37312,45 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"kOq" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=EVA2"; + location = "Dorm" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"kOt" = ( +/obj/structure/fence/corner{ + dir = 2; + pixel_y = 0 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"kOx" = ( +/obj/structure/table/wood, +/obj/machinery/duct, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) +"kOM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "kON" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt, @@ -36172,22 +37368,11 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/processing) -"kOO" = ( -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) -"kOS" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Public Mining Storage"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/sign/warning/xeno_mining{ - pixel_x = 29 - }, -/turf/open/floor/iron/dark, -/area/mine/storage) +"kOR" = ( +/obj/structure/railing/wooden_fence, +/obj/item/flashlight/lantern/on, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "kOV" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -36215,11 +37400,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"kPh" = ( -/obj/structure/flora/bush/sunny/style_random, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) "kPo" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -36234,6 +37414,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"kPu" = ( +/obj/structure/table, +/obj/item/crowbar/red, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 6; + pixel_y = -3 + }, +/obj/structure/sign/poster/random/directional/west, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "kPv" = ( /obj/machinery/vending/cigarette, /turf/open/floor/wood, @@ -36251,9 +37444,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) -"kPz" = ( -/turf/closed/mineral/random/snow, -/area/icemoon/underground/unexplored/rivers/deep/shoreline) "kPL" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -36268,25 +37458,6 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"kPS" = ( -/obj/structure/railing, -/obj/structure/marker_beacon/cerulean, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"kPY" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/vending/hydroseeds{ - slogan_delay = 700 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "kQc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36317,14 +37488,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"kQx" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/item/radio/intercom/directional/north, -/obj/machinery/holopad, -/obj/machinery/light/warm/directional/north, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/service/bar) "kQz" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36343,14 +37506,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/fore) -"kQH" = ( -/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, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "kQJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -36373,13 +37528,6 @@ /obj/item/pipe_dispenser, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"kQV" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/random/maintenance/three, -/obj/structure/sign/departments/maint/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "kQY" = ( /obj/effect/turf_decal/arrows/red{ dir = 4; @@ -36401,12 +37549,15 @@ /obj/structure/bookcase, /turf/open/floor/iron, /area/mine/laborcamp) -"kRj" = ( -/obj/structure/table/wood, -/obj/item/c_tube, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +"kRw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/atmos_control/nocontrol/incinerator{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) "kRy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36414,15 +37565,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"kRD" = ( -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Garden" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/iron/textured, -/area/station/service/hydroponics) "kRE" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 8 @@ -36430,13 +37572,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"kRF" = ( -/obj/structure/chair/wood{ - dir = 8 - }, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "kRH" = ( /obj/machinery/door/airlock/highsecurity{ name = "Chemistry Lab Exit" @@ -36447,21 +37582,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, /turf/open/floor/plating, /area/station/medical/chemistry) -"kRI" = ( -/obj/structure/table/glass, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -4 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "kRJ" = ( /obj/machinery/camera/directional/north{ c_tag = "Atmospherics Distribution Loop" @@ -36485,13 +37605,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/office) -"kSj" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/wood/parquet, -/area/station/service/theater) +"kRV" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"kSc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kSn" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/line, @@ -36506,12 +37628,25 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/icemoon/underground/explored) +"kSA" = ( +/obj/machinery/mining_weather_monitor/directional/east, +/turf/open/floor/iron/grimy, +/area/station/hallway/secondary/entry) "kSD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"kSG" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "kSM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -36557,25 +37692,6 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/mine/eva/lower) -"kTQ" = ( -/obj/effect/turf_decal/siding/yellow{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/duct, -/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/iron, -/area/station/engineering/lobby) -"kTX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/plastic, -/area/station/commons/dorms/laundry) "kUb" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 8 @@ -36594,6 +37710,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/pink, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"kUo" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/light/cold/directional/west, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"kUt" = ( +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/security/prison/safe) "kUu" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 @@ -36612,6 +37743,13 @@ "kUD" = ( /turf/open/openspace, /area/mine/eva) +"kUF" = ( +/obj/machinery/light/directional/north, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "kUJ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/built/directional/south, @@ -36620,14 +37758,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"kUP" = ( -/obj/structure/lattice/catwalk, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/railing/corner, -/turf/open/lava/plasma/ice_moon, -/area/icemoon/underground/explored) "kUU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36636,72 +37766,43 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron/smooth, /area/station/maintenance/port/lesser) -"kUW" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Service External Airlock"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"kVj" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, +"kVa" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, -/area/station/hallway/primary/central) +/area/station/commons/fitness) +"kVe" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/plating, +/area/station/maintenance/fore) "kVl" = ( /obj/effect/landmark/event_spawn, /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/cargo/storage) -"kVo" = ( -/obj/structure/table/wood, -/obj/machinery/reagentgrinder{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = -6 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/bar) -"kVq" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/light/warm/directional/north, -/obj/machinery/digital_clock/directional/north, -/turf/open/floor/iron, -/area/station/service/bar) +"kVv" = ( +/obj/structure/frame/machine, +/obj/item/stack/cable_coil/five, +/obj/structure/sign/poster/contraband/little_fruits/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kVx" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"kVE" = ( -/obj/structure/sign/painting/library_secure{ - pixel_x = 32 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/left/directional/west{ - name = "Secure Art Exhibition"; - req_access = list("library") +"kVA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/effect/spawner/random/structure/table_fancy, -/turf/open/floor/wood, -/area/station/service/library) +/obj/machinery/mining_weather_monitor/directional/north, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/entry) "kVF" = ( /obj/structure/closet/secure_closet/courtroom, /obj/item/gavelhammer, @@ -36709,6 +37810,11 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/security/courtroom) +"kVI" = ( +/obj/structure/closet/firecloset, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/morgue) "kVM" = ( /obj/structure/chair/sofa/corp/right{ dir = 1 @@ -36716,6 +37822,20 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/engineering/lobby) +"kVN" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Mining B-1 Hallway South"; + network = list("ss13", "mine") + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/mine/eva) "kVS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36736,6 +37856,16 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"kWk" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) "kWr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -36752,23 +37882,6 @@ }, /turf/open/floor/iron, /area/station/tcommsat/computer) -"kWG" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"kWH" = ( -/obj/structure/rack, -/obj/item/hand_labeler, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/textured, -/area/station/security/brig) "kWL" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/nitrogen{ @@ -36782,6 +37895,7 @@ /obj/item/reagent_containers/cup/bottle/oxygen{ pixel_x = 1 }, +/obj/structure/sign/warning/no_smoking/circle/directional/west, /turf/open/floor/iron/dark/textured_edge{ dir = 8 }, @@ -36794,6 +37908,21 @@ /obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, /turf/open/floor/iron, /area/station/hallway/primary/central) +"kWO" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/wood, +/obj/item/flashlight/lantern, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"kWV" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "kWW" = ( /obj/machinery/door/airlock/atmos, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36818,6 +37947,10 @@ dir = 1 }, /area/station/engineering/atmos/hfr_room) +"kXf" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "kXq" = ( /obj/machinery/air_sensor/plasma_tank, /turf/open/floor/engine/plasma, @@ -36872,10 +38005,10 @@ /area/icemoon/surface/outdoors/nospawn) "kXM" = ( /obj/structure/closet/secure_closet/security/med, -/obj/machinery/firealarm/directional/south, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, /obj/effect/turf_decal/tile/red/full, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) "kXO" = ( @@ -36884,27 +38017,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) -"kXR" = ( -/turf/open/floor/iron/stairs/right{ - dir = 4 - }, -/area/station/science/cytology) -"kXS" = ( -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Hydroponics" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 +"kXQ" = ( +/obj/machinery/power/solar_control{ + id = "auxsolareast"; + name = "Starboard Bow Solar Control" }, -/area/station/service/hydroponics) +/obj/structure/cable, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/fore) +"kXW" = ( +/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_smooth, +/area/station/maintenance/starboard/fore) "kXY" = ( /turf/open/floor/iron/dark, /area/station/security/prison/rec) @@ -36921,9 +38048,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"kYo" = ( -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/unexplored/rivers/deep/shoreline) "kYq" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -36953,11 +38077,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/large, /area/station/engineering/engine_smes) -"kYN" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lantern/on, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) "kZa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36977,6 +38096,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"kZe" = ( +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external/glass{ + name = "Cytology External Airlock" + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "kZh" = ( /obj/structure/cable, /obj/structure/sign/poster/contraband/random/directional/west, @@ -36986,16 +38115,6 @@ /obj/machinery/space_heater, /turf/open/floor/iron/dark/textured, /area/station/security/prison) -"kZm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "kZn" = ( /obj/structure/cable, /obj/machinery/light/floor, @@ -37023,13 +38142,14 @@ /turf/open/floor/vault, /area/station/security/prison/rec) "laa" = ( -/obj/machinery/atmospherics/components/tank, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/newscaster/directional/west, +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/item/radio/intercom/directional/north, +/obj/structure/railing/corner, /turf/open/floor/iron/dark, -/area/station/science/ordnance) +/area/station/commons/lounge) "lab" = ( /obj/machinery/door/window/brigdoor/left/directional/north{ name = "Secure Weapons Storage"; @@ -37048,13 +38168,29 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"lal" = ( -/obj/structure/chair/sofa/right/brown, -/obj/item/toy/plush/moth{ - name = "Dr. Moff" +"lah" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/carpet/blue, -/area/station/medical/psychology) +/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{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Escape"; + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/exit/departure_lounge) "law" = ( /obj/machinery/door/airlock/security/glass{ name = "Security Vestibule" @@ -37131,13 +38267,13 @@ /obj/structure/sign/warning/fire/directional/north, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"lca" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"lby" = ( +/obj/effect/decal/cleanable/greenglow, +/obj/effect/decal/cleanable/plastic, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "lch" = ( /obj/machinery/computer/monitor{ dir = 1; @@ -37150,27 +38286,21 @@ /obj/machinery/gateway/centerstation, /turf/open/floor/iron/dark/smooth_large, /area/station/command/gateway) -"lcm" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/decal/cleanable/ash, -/obj/item/rack_parts, -/obj/effect/mapping_helpers/burnt_floor, +"lcs" = ( +/obj/structure/reagent_dispensers/plumbed{ + dir = 4 + }, /turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/area/station/maintenance/starboard/fore) +"lct" = ( +/obj/structure/railing, +/turf/open/floor/iron/stairs/medium{ + dir = 4 + }, +/area/station/science/cytology) "lcu" = ( /turf/open/floor/iron/white, /area/station/science/explab) -"lcz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/warning/fire/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) -"lcA" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/ice, -/area/icemoon/underground/explored) "lcB" = ( /obj/machinery/light/small/directional/west, /obj/structure/table/wood, @@ -37228,6 +38358,12 @@ "ldH" = ( /turf/closed/wall, /area/station/security/prison/mess) +"ldJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/newscaster/directional/north, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "ldQ" = ( /obj/structure/barricade/wooden, /obj/structure/girder, @@ -37237,17 +38373,6 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"ldT" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/turf/open/floor/iron, -/area/station/command/bridge) "ldV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/line{ @@ -37262,21 +38387,17 @@ /obj/machinery/shower/directional/south, /turf/open/floor/iron, /area/station/science/xenobiology) -"leg" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/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, -/area/station/service/hydroponics) "lei" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/bed/medical/emergency, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"lej" = ( +/obj/structure/fence{ + dir = 2 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "lek" = ( /obj/machinery/conveyor_switch/oneway{ id = "packageSort2" @@ -37291,14 +38412,15 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"leE" = ( -/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/power/apc/auto_name/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) +"leo" = ( +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/science/research) "leM" = ( /obj/structure/railing{ dir = 8 @@ -37308,17 +38430,36 @@ }, /turf/open/floor/glass/reinforced, /area/station/hallway/primary/starboard) -"leP" = ( -/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/starboard/fore) +"leU" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "leW" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) +"lfo" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/command/glass{ + name = "Bridge"; + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron, +/area/station/command/bridge) "lfp" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -37334,11 +38475,26 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"lfF" = ( -/obj/structure/sign/warning/cold_temp/directional/west, -/obj/structure/sign/warning/gas_mask/directional/east, -/turf/open/floor/plating, -/area/station/engineering/atmos) +"lfA" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/light/directional/north, +/obj/machinery/door_buttons/airlock_controller{ + pixel_y = 32; + idExterior = "virology_airlock_exterior"; + idInterior = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + interior_airlock = "virology_airlock_control"; + name = "Virology Access Controller"; + req_access = list("virology") + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "lfG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37363,11 +38519,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/medical/storage) -"lgb" = ( -/obj/effect/landmark/start/botanist, -/obj/structure/chair/office/light, -/turf/open/floor/glass, -/area/station/service/hydroponics) +"lfU" = ( +/obj/effect/spawner/random/structure/grille, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "lgg" = ( /obj/machinery/air_sensor/engine_chamber, /turf/open/floor/engine, @@ -37378,6 +38534,20 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"lgw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"lgx" = ( +/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/wood/parquet, +/area/station/service/bar/backroom) "lgz" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -37393,12 +38563,6 @@ }, /turf/open/floor/iron/textured, /area/station/security/brig) -"lgH" = ( -/obj/structure/flora/tree/pine/style_random, -/obj/structure/marker_beacon/cerulean, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "lgK" = ( /turf/closed/wall, /area/station/security/prison/visit) @@ -37409,15 +38573,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/fore) -"lgP" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) "lgW" = ( /obj/machinery/meter/monitored/distro_loop, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible, @@ -37471,6 +38626,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"lia" = ( +/turf/open/openspace, +/area/station/service/kitchen/coldroom) +"lik" = ( +/obj/effect/landmark/start/bartender, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "lil" = ( /obj/structure/cable, /obj/structure/sign/poster/random/directional/west, @@ -37478,6 +38643,9 @@ /area/station/maintenance/port/fore) "lis" = ( /obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron, /area/station/cargo/miningdock) "lit" = ( @@ -37489,19 +38657,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) -"liv" = ( -/obj/structure/cable, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 8 - }, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 4 - }, -/obj/structure/minecart_rail{ - dir = 1 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "lix" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -37539,12 +38694,11 @@ /obj/item/toy/figure/chaplain, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"ljj" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/structure/sign/warning/cold_temp, -/turf/open/floor/plating, -/area/station/hallway/secondary/exit/departure_lounge) +"liV" = ( +/obj/structure/chair/sofa/bench/left, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "ljl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37567,6 +38721,16 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/central) +"ljq" = ( +/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/dust, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "ljx" = ( /obj/effect/turf_decal/plaque{ icon_state = "L1" @@ -37583,6 +38747,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"ljB" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/aft) "ljD" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, @@ -37630,14 +38804,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/textured, /area/station/commons/storage/primary) -"lka" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark, -/area/station/medical/treatment_center) "lkb" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -37661,6 +38827,15 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/carpet, /area/station/commons/dorms) +"lko" = ( +/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/structure/cable, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "lkr" = ( /obj/structure/closet/firecloset, /turf/open/floor/iron, @@ -37694,42 +38869,18 @@ /obj/effect/decal/cleanable/food/pie_smudge, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"lkY" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/brown{ - dir = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "miningdorm_A"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -24; - specialfunctions = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/donk, -/area/mine/production) "lli" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"llm" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/gun/ballistic/shotgun/doublebarrel, -/obj/structure/rack, -/obj/structure/disposalpipe/segment{ +"lln" = ( +/obj/effect/decal/cleanable/blood/tracks{ dir = 4 }, -/obj/effect/turf_decal/box/red, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/iron/grimy, -/area/station/service/bar/backroom) +/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, +/area/station/medical/morgue) "llw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37742,8 +38893,28 @@ /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, +/obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white, /area/station/medical/psychology) +"llR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/pen/red, +/obj/item/pen{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/folder/yellow, +/obj/machinery/button/door/directional/west{ + id = "qmprivacy"; + name = "Privacy Shutters Control"; + req_access = list("qm") + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "llT" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -37792,6 +38963,14 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/office) +"lmx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "lmy" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 5 @@ -37822,26 +39001,37 @@ /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{ - c_tag = "Research Division Lobby"; - dir = 10; - network = list("ss13","rd") - }, -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/stripes/corner{ +"lmQ" = ( +/obj/effect/turf_decal/tile/bar{ dir = 4 }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, +/obj/structure/chair/stool/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"lmT" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Chapel North" + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "lnc" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/commons/storage/tools) +"lne" = ( +/obj/structure/table/glass, +/obj/item/seeds/glowshroom, +/obj/item/seeds/bamboo{ + pixel_y = 3; + pixel_x = 4 + }, +/obj/machinery/newscaster/directional/east, +/obj/structure/sign/poster/contraband/kudzu/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "lnk" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -37869,12 +39059,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"lnw" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/chapel) "lnx" = ( /obj/structure/closet/crate/preopen, /turf/open/floor/plating/snowed/icemoon, @@ -37884,23 +39068,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"lnE" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/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/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) "lnL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/large, @@ -37931,15 +39098,11 @@ }, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory/upper) -"lop" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage) +"lom" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/commons/lounge) "loq" = ( /obj/structure/light_construct/directional/east, /turf/open/floor/iron, @@ -37955,11 +39118,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig/upper) -"loG" = ( -/obj/structure/closet/secure_closet/chief_medical, -/obj/item/screwdriver, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) +"loF" = ( +/obj/structure/table/wood, +/obj/item/toy/mecha/honk{ + pixel_y = 12 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/grimy, +/area/station/service/theater) +"loO" = ( +/obj/structure/statue/snow/snowman, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "loV" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 @@ -37992,6 +39162,10 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"lpy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "lpC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38046,6 +39220,13 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) +"lqi" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/rcl/pre_loaded, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "lqj" = ( /obj/structure/chair/pew/right{ dir = 1 @@ -38081,6 +39262,36 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"lqL" = ( +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"lqM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"lqN" = ( +/obj/structure/rack, +/obj/item/controller{ + pixel_x = -7 + }, +/obj/item/compact_remote{ + pixel_x = -7 + }, +/obj/item/compact_remote{ + pixel_x = -7 + }, +/obj/item/integrated_circuit/loaded/speech_relay{ + pixel_x = 7 + }, +/obj/item/integrated_circuit/loaded/hello_world{ + pixel_x = 7 + }, +/obj/machinery/airalarm/directional/west, +/obj/structure/sign/warning/firing_range/directional/north, +/turf/open/floor/iron/white/corner, +/area/station/science/explab) "lqU" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -38090,6 +39301,17 @@ }, /turf/open/floor/plating, /area/station/science/xenobiology) +"lqZ" = ( +/obj/machinery/vending/wardrobe/coroner_wardrobe, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "lrc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38100,17 +39322,13 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/cmo_office, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"lry" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Chapel Coffin Storage" - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) +"lrl" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/binary/valve/digital/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) "lrz" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/trash/janitor_supplies, @@ -38123,14 +39341,13 @@ /obj/structure/curtain, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain) -"lrE" = ( -/obj/effect/landmark/generic_maintenance_landmark, -/obj/item/bikehorn/rubberducky, -/obj/structure/cable, -/obj/effect/landmark/start/hangover, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) +"lrM" = ( +/obj/effect/turf_decal/siding/wideplating_new/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/work) "lsa" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 4; @@ -38140,11 +39357,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/robotics/lab) -"lsh" = ( -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/fore) "lsi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38154,26 +39366,34 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"lsn" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/stairs/south, +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/station/security/prison) "lso" = ( /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"lsH" = ( -/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/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ +"lsA" = ( +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/effect/turf_decal/stripes/white/line{ +/obj/effect/turf_decal/siding/wood{ dir = 8 }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) +/obj/machinery/light/floor, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"lsF" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "lsN" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 8 @@ -38206,6 +39426,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"ltH" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"ltP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "ltV" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -38219,10 +39451,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) +"ltY" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Central Hallway North-East" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/sign/poster/official/random/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "lub" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) +"luk" = ( +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Captain's Office"; + name = "Captain's Fax Machine" + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "lup" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 @@ -38235,63 +39486,117 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"luJ" = ( -/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/heavy, -/obj/machinery/door/airlock/research{ - name = "Ordnance Lab" +"luD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/obj/effect/turf_decal/tile/dark/half/contrasted{ - dir = 1 +/obj/structure/table/glass, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma{ + pixel_x = 3; + pixel_y = 3 }, -/turf/open/floor/iron/white/side, -/area/station/science/ordnance/office) -"luR" = ( +/obj/item/stack/sheet/mineral/plasma{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"luG" = ( /obj/item/toy/snowball{ - pixel_x = 9; - pixel_y = 1 + pixel_x = 5; + pixel_y = -1 }, /turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"luI" = ( +/obj/effect/spawner/random/lavaland_mob/raptor, +/turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"luP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"luR" = ( +/obj/structure/chair/office/tactical{ + dir = 1 + }, +/obj/effect/landmark/start/coroner, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "lva" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/xenobiology) -"lvh" = ( -/obj/structure/window/reinforced/spawner/directional/south, +"lvb" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 8; + pixel_x = 6 + }, +/obj/item/storage/box/syringes{ + pixel_y = 8; + pixel_x = -5 + }, +/obj/item/storage/box/beakers{ + pixel_y = 5; + pixel_x = -9 + }, /turf/open/floor/iron, -/area/station/science/xenobiology) +/area/station/service/hydroponics) "lvk" = ( /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) -"lvm" = ( -/obj/machinery/camera/motion/directional/north{ - c_tag = "EVA Storage North" +"lvl" = ( +/obj/structure/chair{ + dir = 1; + name = "Command Station" }, -/obj/structure/sign/warning/secure_area/directional/north, -/obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/dark/smooth_half{ - dir = 1 +/obj/machinery/keycard_auth{ + pixel_x = 29; + pixel_y = 8 }, -/area/station/ai_monitored/command/storage/eva) +/turf/open/floor/iron, +/area/station/command/bridge) "lvt" = ( /turf/open/openspace/icemoon, /area/icemoon/underground/explored) -"lvv" = ( -/obj/machinery/newscaster/directional/east, -/turf/open/floor/stone, -/area/station/commons/lounge) -"lvy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"lvA" = ( +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "Bridge Blast Door"; + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/sign/warning/secure_area/directional/north, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) "lvB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38318,9 +39623,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/mine/eva) +"lvR" = ( +/obj/machinery/vatgrower{ + dir = 4 + }, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "lvS" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/machinery/flasher/directional/east{ + id = "brigentry" + }, /turf/open/floor/iron/dark/textured_edge{ dir = 8 }, @@ -38332,6 +39646,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/eva) +"lvU" = ( +/obj/structure/closet/crate, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/security/prison/work) "lvW" = ( /obj/structure/table, /obj/effect/spawner/random/trash/food_packaging, @@ -38370,6 +39695,15 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) +"lwI" = ( +/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/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "lwO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38411,14 +39745,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/storage/tools) -"lxn" = ( -/obj/machinery/biogenerator, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) +"lxi" = ( +/obj/structure/closet/toolcloset, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron, +/area/station/construction) "lxu" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ dir = 4 @@ -38426,6 +39758,10 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"lxR" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "lxT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/decal/cleanable/dirt, @@ -38443,6 +39779,11 @@ /obj/machinery/meter, /turf/open/floor/iron, /area/station/engineering/atmos) +"lxY" = ( +/obj/structure/closet/crate, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/labor_camp) "lye" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -38452,40 +39793,9 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"lyf" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "lyg" = ( /turf/closed/wall/r_wall, /area/station/security/brig) -"lyh" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=EVA2"; - location = "Dorm" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"lyl" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/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/dark, -/area/station/medical/treatment_center) "lyq" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/bot, @@ -38499,13 +39809,16 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/stone, /area/mine/eva/lower) -"lyv" = ( -/obj/structure/table/wood/poker, -/obj/item/trash/candle{ - pixel_y = 3 +"lyy" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/computer/gateway_control, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/turf/open/floor/iron/dark, +/area/station/command/gateway) "lyG" = ( /turf/open/floor/glass/reinforced, /area/station/ai_monitored/security/armory/upper) @@ -38514,26 +39827,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible/layer2, /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) -"lyP" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/machinery/airalarm/directional/north, -/obj/machinery/camera{ - c_tag = "Service - Botany Lower Entrance"; - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"lyU" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) "lyX" = ( /obj/structure/chair{ dir = 4 @@ -38541,10 +39834,18 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"lzc" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) +"lzb" = ( +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters" + }, +/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/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain) "lzq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38590,6 +39891,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"lzJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/sign/warning/radiation/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "lzM" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -38606,6 +39914,26 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"lzU" = ( +/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, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/sign/warning/pods/directional/north, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) "lzX" = ( /obj/machinery/light/floor, /turf/open/floor/iron/white, @@ -38655,6 +39983,22 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"lAW" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Fitness" + }, +/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 = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/commons/fitness) "lBo" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/carpet, @@ -38666,10 +40010,22 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"lBB" = ( +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "lBD" = ( /obj/structure/flora/grass/green/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"lBN" = ( +/obj/machinery/door/morgue{ + name = "Coffin Storage"; + req_access = list("chapel_office"); + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "lBR" = ( /turf/closed/wall, /area/station/security/prison/toilet) @@ -38696,6 +40052,14 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"lCc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "lCg" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -38706,26 +40070,24 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"lCv" = ( -/obj/machinery/firealarm/directional/west, -/obj/structure/closet/crate/wooden/toy, -/turf/open/floor/wood/parquet, -/area/station/service/theater) +"lCn" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "lCz" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/bot, /obj/effect/landmark/start/roboticist, /turf/open/floor/iron, /area/station/science/robotics/lab) -"lCA" = ( -/obj/machinery/computer/order_console/mining, -/obj/machinery/light/small/directional/south, -/obj/machinery/light_switch/directional/south, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/mine/production) "lCC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38745,16 +40107,6 @@ dir = 1 }, /area/station/engineering/lobby) -"lCM" = ( -/obj/structure/closet/crate, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"lCO" = ( -/obj/machinery/duct, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "lCV" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38827,13 +40179,6 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"lDE" = ( -/obj/structure/sign/poster/official/safety_report/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/prison/visit) "lDF" = ( /obj/structure/table, /obj/item/wrench, @@ -38867,25 +40212,6 @@ /obj/structure/cable, /turf/open/floor/carpet/blue, /area/station/security/prison/work) -"lEb" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Service Hall" - }, -/obj/effect/turf_decal/siding/dark/corner, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/station/hallway/secondary/service) "lEg" = ( /obj/machinery/door/window/left/directional/north{ name = "AI Core Door"; @@ -38897,17 +40223,6 @@ "lEj" = ( /turf/open/floor/iron/dark/textured, /area/station/security/processing) -"lEn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table, -/obj/item/stack/sheet/mineral/coal{ - pixel_x = 6; - pixel_y = 3 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "lEo" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/disposalpipe/segment{ @@ -38915,13 +40230,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"lEt" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron/dark/side, -/area/mine/eva) "lEv" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38954,15 +40262,43 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) -"lEK" = ( -/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/structure/disposalpipe/segment, -/obj/effect/landmark/start/hangover, +"lEJ" = ( +/obj/structure/table, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/structure/sign/warning/directional/north, /turf/open/floor/iron, -/area/station/hallway/primary/aft) +/area/station/commons/storage/mining) +"lEM" = ( +/obj/structure/rack, +/obj/item/hand_labeler, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/obj/machinery/button/door/directional/east{ + id = "Trial Transfer"; + name = "Trial Transfer Lockdown"; + req_access = list("brig") + }, +/turf/open/floor/iron/textured, +/area/station/security/brig) "lEO" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -38982,6 +40318,20 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron, /area/station/command/bridge) +"lFb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) "lFe" = ( /obj/structure/bookcase/random/adult, /turf/open/floor/iron/dark/textured, @@ -39033,13 +40383,31 @@ dir = 8 }, /area/station/command/heads_quarters/rd) +"lGb" = ( +/obj/structure/rack, +/obj/item/pickaxe, +/obj/item/flashlight{ + pixel_y = 2 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/camera/directional/south{ + c_tag = "Ordnance Lower Mix Lab"; + network = list("ss13","rd") + }, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) "lGd" = ( /obj/structure/disposalpipe/segment{ dir = 10 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"lGf" = ( +/obj/structure/sign/warning/directional/north, +/turf/open/genturf/blue, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "lGh" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -39051,11 +40419,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"lGo" = ( -/obj/machinery/hydroponics/soil, -/obj/structure/sign/poster/contraband/kudzu/directional/east, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "lGp" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -39083,6 +40446,12 @@ /obj/item/storage/toolbox/emergency, /turf/open/floor/iron, /area/station/hallway/primary/port) +"lGH" = ( +/obj/structure/closet, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "lGK" = ( /obj/machinery/vending/cigarette, /obj/machinery/button/door{ @@ -39105,29 +40474,11 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"lHi" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"lHm" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/test_chamber/directional/north, -/turf/open/floor/iron, -/area/station/science/explab) -"lHr" = ( -/obj/structure/stairs/north, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) +"lGN" = ( +/obj/effect/landmark/start/botanist, +/obj/structure/chair/office/light, +/turf/open/floor/glass, +/area/station/service/hydroponics) "lHu" = ( /obj/structure/closet/secure_closet/brig, /obj/structure/cable, @@ -39138,16 +40489,6 @@ /obj/effect/landmark/blobstart, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/fore) -"lHB" = ( -/obj/machinery/camera{ - c_tag = "Chapel North"; - dir = 6 - }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "lHC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39167,17 +40508,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) -"lHI" = ( -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/service/hydroponics) "lHL" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/corner{ @@ -39191,6 +40521,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/mechbay) +"lHV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/smartfridge/organ, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "lIk" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -39205,13 +40540,6 @@ }, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain) -"lIs" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "lIt" = ( /obj/machinery/modular_computer/preset/cargochat/security{ dir = 4 @@ -39246,16 +40574,10 @@ /obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/open/floor/iron, /area/station/tcommsat/computer) -"lIK" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/turretid{ - name = "AI Chamber turret control"; - pixel_x = 5; - pixel_y = -24 - }, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/ai) +"lIP" = ( +/obj/effect/mapping_helpers/trapdoor_placer, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/medical/medbay/central) "lIQ" = ( /obj/item/restraints/legcuffs/beartrap, /obj/item/restraints/legcuffs/beartrap, @@ -39268,60 +40590,28 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron/dark/side, /area/mine/eva/lower) -"lIT" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/obj/structure/cable, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/hallway/secondary/entry) -"lIU" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/structure/sign/clock/directional/west, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ +"lIW" = ( +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat_interior) +"lJg" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, -/turf/open/floor/iron, +/obj/structure/sign/clock/directional/north, +/turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) -"lIW" = ( +"lJn" = ( +/obj/effect/decal/cleanable/confetti, +/obj/structure/closet/crate/cardboard, +/obj/item/storage/cans/sixbeer, +/obj/effect/spawner/random/food_or_drink/cups, /turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat_interior) -"lJc" = ( -/obj/item/food/chococoin, -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/effect/turf_decal/weather/snow/corner, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) +/area/station/maintenance/starboard/fore) "lJO" = ( /turf/closed/wall, /area/station/maintenance/port/fore) -"lJS" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Security - Permabrig Lower Hallway Stairwell"; - network = list("ss13","prison") - }, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison) -"lJW" = ( -/obj/machinery/smartfridge, -/obj/machinery/door/window/right/directional/south{ - name = "Produce Access"; - req_access = list("hydroponics") - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "lKc" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -39364,15 +40654,13 @@ /obj/structure/closet/radiation, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"lKZ" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +"lKN" = ( +/obj/machinery/door/window/left/directional/west{ + req_access = list("hydroponics"); + name = "Hydroponics Equipment" }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/turf/open/floor/iron/half, +/area/station/service/hydroponics) "lLf" = ( /obj/structure/table/wood, /obj/item/storage/dice, @@ -39394,6 +40682,17 @@ "lLm" = ( /turf/open/floor/iron/cafeteria, /area/station/maintenance/port/aft) +"lLA" = ( +/obj/structure/sign/warning/fire{ + pixel_y = 32 + }, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) +"lLD" = ( +/obj/structure/closet/firecloset, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/main) "lLE" = ( /obj/machinery/netpod, /obj/machinery/camera/autoname/directional/south, @@ -39404,20 +40703,23 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"lLR" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 9 - }, -/obj/machinery/hydroponics/constructable, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "lLY" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/recharge_floor, /area/mine/mechbay) +"lMa" = ( +/obj/item/trash/pistachios, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "lMd" = ( /obj/structure/table, /obj/effect/turf_decal/tile/brown/half/contrasted, @@ -39426,12 +40728,9 @@ pixel_y = 6 }, /obj/item/food/cheesiehonkers, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/cargo/office) -"lMe" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/station/service/kitchen) "lMg" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39444,19 +40743,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/engine/o2, /area/station/engineering/atmos) -"lMu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio5"; - name = "Xenobio Pen 5 Blast Door" - }, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) "lMC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -39484,15 +40770,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"lNk" = ( -/obj/structure/sign/painting/library{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/wood, -/area/station/service/library) "lNy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -39512,12 +40789,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"lNE" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "lNG" = ( /obj/machinery/door/airlock/security/glass{ name = "Security Office" @@ -39555,22 +40826,39 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) -"lOq" = ( -/obj/effect/turf_decal/stripes/line{ +"lNV" = ( +/obj/structure/closet/wardrobe/grey, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/station/commons/locker) +"lOa" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing{ dir = 1 }, -/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) +"lOr" = ( +/obj/structure/railing, +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/security/brig) +"lOt" = ( +/obj/structure/falsewall, /turf/open/floor/plating, -/area/station/maintenance/starboard/aft) -"lOz" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm2"; - name = "Dorm 2" +/area/station/medical/morgue) +"lOA" = ( +/obj/structure/minecart_rail{ + 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/commons/dorms) +/obj/item/radio/intercom/directional/west{ + frequency = 1453; + name = "Kitchen Intercom" + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "lOI" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer1{ dir = 5 @@ -39578,6 +40866,13 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"lOJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "lOP" = ( /obj/structure/table, /obj/item/paper, @@ -39597,6 +40892,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/department/electrical) +"lOV" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "lPb" = ( /obj/structure/railing/corner, /obj/structure/railing/corner{ @@ -39619,6 +40923,17 @@ }, /turf/open/floor/iron/sepia, /area/station/service/library) +"lPl" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) +"lPq" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "lPr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39626,14 +40941,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"lPz" = ( -/mob/living/basic/pet/penguin/baby/permanent, -/obj/item/toy/snowball{ - pixel_x = -6; - pixel_y = -3 - }, -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) +"lPs" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "lPC" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 @@ -39676,17 +40988,16 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) -"lPQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "lQc" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/office) +"lQe" = ( +/obj/machinery/vending/wardrobe/engi_wardrobe, +/obj/machinery/status_display/ai/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/storage_shared) "lQf" = ( /obj/structure/rack, /obj/item/clothing/mask/gas, @@ -39712,6 +41023,15 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/carpet, /area/station/commons/dorms) +"lQv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external/glass{ + name = "Garden Access" + }, +/turf/open/floor/iron/textured, +/area/station/service/hydroponics) "lQw" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ color = "#ff0000"; @@ -39742,7 +41062,7 @@ /obj/structure/table/glass, /obj/item/flashlight/lamp, /obj/effect/turf_decal/tile/blue/full, -/obj/machinery/firealarm/directional/west, +/obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/cmo) "lQN" = ( @@ -39777,6 +41097,21 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"lRj" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/obj/item/kirbyplants/organic/plant10, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"lRn" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/commons/dorms/laundry) "lRs" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -39830,6 +41165,21 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"lRK" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"lRO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "lRR" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 6 @@ -39869,39 +41219,25 @@ "lSu" = ( /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"lSw" = ( -/obj/structure/tank_dispenser{ - pixel_x = -1 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Atmospherics Monitoring" - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) -"lSF" = ( -/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/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/entry) "lSP" = ( /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/mining) +"lSX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) "lTa" = ( /obj/effect/turf_decal/trimline/red/warning{ dir = 10 @@ -39909,6 +41245,12 @@ /obj/effect/turf_decal/stripes/red/line, /turf/open/floor/iron/dark/textured, /area/station/security/range) +"lTl" = ( +/obj/structure/closet/crate/grave, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "lTs" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -39922,12 +41264,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) -"lUa" = ( -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "lUb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -40005,6 +41341,12 @@ dir = 4 }, /area/station/engineering/storage_shared) +"lVr" = ( +/obj/structure/fence/cut/medium{ + dir = 1 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "lVt" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/light/floor, @@ -40037,15 +41379,15 @@ }, /turf/open/floor/wood, /area/station/service/library) -"lVN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk/multiz/down{ - dir = 1 - }, +"lVS" = ( +/obj/structure/sign/departments/xenobio/directional/east, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/maintenance/aft/greater) +"lVU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "lVY" = ( /obj/effect/turf_decal/siding/thinplating_new/corner{ dir = 4 @@ -40065,6 +41407,25 @@ /obj/effect/landmark/start/roboticist, /turf/open/floor/iron, /area/station/science/robotics/lab) +"lWd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor/preopen{ + id = "bridge blast"; + name = "Bridge Blast Door"; + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/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{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/command/bridge) "lWf" = ( /obj/structure/mop_bucket/janitorialcart, /turf/open/floor/plating, @@ -40077,29 +41438,9 @@ }, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) -"lWj" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/structure/closet/secure_closet/medical3, -/obj/item/defibrillator/loaded{ - pixel_y = 3 - }, -/obj/item/clothing/gloves/latex/nitrile, -/obj/item/clothing/gloves/latex/nitrile, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/storage) -"lWy" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/mine/laborcamp) +"lWG" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/fore) "lWI" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -40122,12 +41463,13 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/port/fore) -"lXC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) +"lXA" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/white, +/obj/machinery/mining_weather_monitor/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) "lXJ" = ( /obj/structure/railing{ dir = 1 @@ -40138,6 +41480,13 @@ dir = 9 }, /area/station/security/prison/workout) +"lYd" = ( +/obj/machinery/computer/order_console/mining, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/mine/production) "lYg" = ( /obj/structure/cable, /obj/item/radio/intercom/directional/east, @@ -40152,12 +41501,10 @@ }, /turf/open/floor/grass, /area/station/medical/virology) -"lYS" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) +"lYT" = ( +/obj/structure/table, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) "lZe" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -40169,11 +41516,6 @@ /obj/structure/railing, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"lZP" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, -/turf/open/floor/plating, -/area/station/maintenance/fore) "lZQ" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/computer/cargo{ @@ -40206,26 +41548,23 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) -"maw" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - 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/starboard/fore) "maB" = ( /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/dorms) "maM" = ( -/obj/item/paper/fluff/jobs/security/beepsky_mom, -/obj/machinery/light/small/dim/directional/east, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/obj/machinery/hydroponics/constructable, +/obj/item/seeds/soya, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/siding/green{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "maO" = ( /obj/machinery/disposal/bin, /obj/structure/window/reinforced/spawner/directional/south, @@ -40254,18 +41593,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/storage) -"maX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) "maY" = ( /obj/item/wrench, /obj/item/weldingtool, @@ -40276,16 +41603,15 @@ /obj/structure/rack, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"mbb" = ( -/obj/structure/cable, -/obj/machinery/button/door/directional/west{ - id = "xenobio1"; - name = "Xenobio Pen 1 Blast Door"; - req_access = list("xenobiology") +"mbe" = ( +/obj/structure/toilet/greyscale{ + cistern_open = 1; + dir = 1 }, -/obj/machinery/light/floor, -/turf/open/floor/iron, -/area/station/science/xenobiology) +/obj/effect/spawner/random/entertainment/cigar, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/toilet) "mbk" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/blue{ @@ -40294,6 +41620,14 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"mbm" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/item/radio/intercom/directional/north, +/obj/machinery/holopad, +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/service/bar) "mbn" = ( /obj/machinery/light/directional/north, /obj/structure/chair, @@ -40313,6 +41647,10 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/wood, /area/station/security/prison/rec) +"mbq" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/labor_camp) "mbt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40320,6 +41658,19 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/tcommsat/computer) +"mbw" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/public/glass{ + name = "Atrium" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/navigate_destination/kitchen, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/bar/atrium) "mbB" = ( /obj/machinery/newscaster/directional/west, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -40345,16 +41696,20 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"mbJ" = ( +/obj/structure/sign/warning/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "mbK" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white/side{ dir = 5 }, /area/station/science/research) -"mbT" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/maintenance/starboard/aft) +"mbM" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "mbZ" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/machinery/door/airlock/security{ @@ -40373,6 +41728,17 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/engineering/storage_shared) +"mch" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + name = "Fitness Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/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) "mco" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -40391,6 +41757,15 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/mine/laborcamp/security) +"mct" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/mine/eva/lower) "mcF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40406,26 +41781,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/station/command/heads_quarters/hos) -"mcQ" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/siding/wood/corner, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/bar) -"mcT" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/fitness) "mcW" = ( /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"mde" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/item/kirbyplants/random/dead/research_director, +/obj/machinery/computer/security/telescreen/rd/directional/west, +/turf/open/floor/iron/smooth_half, +/area/station/command/heads_quarters/rd) "mdl" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 @@ -40439,6 +41806,12 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron, /area/station/security/prison/work) +"mdy" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Morgue Hallway" + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "mdE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40448,6 +41821,14 @@ dir = 1 }, /area/station/science/explab) +"mdI" = ( +/obj/machinery/door/airlock/atmos{ + name = "Turbine"; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/plating, +/area/station/maintenance/disposal/incinerator) "mdM" = ( /obj/structure/rack, /obj/item/clothing/suit/hooded/wintercoat/eva{ @@ -40463,13 +41844,6 @@ /obj/item/clothing/mask/gas, /turf/open/floor/iron/textured, /area/station/ai_monitored/command/storage/eva) -"mdQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/warning/no_smoking{ - pixel_x = -28 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "mdS" = ( /obj/item/paper_bin{ pixel_x = 1; @@ -40482,10 +41856,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"mdV" = ( -/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 @@ -40500,6 +41870,15 @@ /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"met" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "meG" = ( /obj/item/kirbyplants/random, /obj/structure/cable, @@ -40537,12 +41916,20 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"meW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"meX" = ( +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"meZ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/structure/sign/poster/official/random/directional/north, +/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) "mfc" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -40557,6 +41944,16 @@ "mfH" = ( /turf/closed/wall/r_wall, /area/station/security/brig/upper) +"mfP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/decal/cleanable/vomit/old, +/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) "mfV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -40568,6 +41965,18 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"mfX" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "mga" = ( /obj/machinery/camera/directional/west{ c_tag = "Xenobiology Pens - Port Mid"; @@ -40591,25 +42000,48 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/central) -"mgy" = ( -/obj/effect/turf_decal/stripes/line, +"mgo" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/textured, -/area/station/service/hydroponics) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"mgs" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "riot"; + name = "Security Shutters" + }, +/obj/structure/sign/departments/court/directional/west, +/turf/open/floor/glass/reinforced, +/area/station/hallway/primary/fore) +"mgv" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "mgD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"mgS" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "mgU" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/hos) -"mgV" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Central Hallway West" - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "mgZ" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/closet/secure_closet/contraband/armory, @@ -40628,17 +42060,6 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) -"mhj" = ( -/obj/structure/railing/wooden_fence{ - dir = 10 - }, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) -"mhq" = ( -/obj/structure/closet, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/maintenance/starboard/upper) "mhx" = ( /obj/effect/turf_decal/bot, /obj/effect/landmark/secequipment, @@ -40661,6 +42082,24 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"miK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/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/structure/cable, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) "miS" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -40676,22 +42115,17 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"mjf" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "mjg" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) -"mjs" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) -"mjt" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/gas_mask, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/aft) "mjH" = ( /obj/structure/table/optable, /obj/machinery/newscaster/directional/east, @@ -40731,6 +42165,13 @@ /obj/item/flashlight, /turf/open/floor/iron, /area/station/service/chapel) +"mjY" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "mka" = ( /obj/machinery/computer/turbine_computer{ dir = 1; @@ -40740,16 +42181,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) -"mkr" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/newscaster/directional/south, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"mkb" = ( +/obj/structure/rack, +/obj/item/clothing/head/costume/fancy, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) "mku" = ( /obj/effect/spawner/random/structure/grille, /obj/effect/decal/cleanable/glass, @@ -40768,37 +42204,12 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"mkM" = ( -/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/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"mkN" = ( -/obj/machinery/computer/records/medical/laptop{ - pixel_y = 1 - }, -/obj/structure/table/reinforced, -/obj/machinery/camera/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "mld" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"mle" = ( -/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/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "mlo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40816,18 +42227,10 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"mlN" = ( -/obj/structure/railing{ - dir = 6 - }, -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "cantena_curtains" - }, -/turf/open/floor/wood, -/area/station/commons/lounge) +"mly" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/recharge_floor, +/area/station/maintenance/department/electrical) "mlO" = ( /obj/structure/disposalpipe/segment, /obj/machinery/airalarm/directional/east, @@ -40856,15 +42259,16 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"mmf" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +"mlT" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 }, -/obj/structure/railing{ - dir = 10 +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "mmh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -40897,6 +42301,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"mmw" = ( +/obj/machinery/oven/range, +/obj/effect/turf_decal/siding/white, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "mmA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -40918,15 +42328,14 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/aft) -"mmC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"mmG" = ( +/obj/machinery/button/door/directional/east{ + id = "xenobio7"; + name = "Xenobio Pen 7 Blast DOors"; + req_access = list("xenobiology") }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/maintenance/aft/greater) +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "mmR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40936,12 +42345,20 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"mnn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, -/obj/effect/turf_decal/stripes/line, -/obj/structure/chair/stool/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/fore) +"mnm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/mine/eva/lower) +"mns" = ( +/obj/structure/lattice/catwalk, +/obj/structure/reagent_dispensers/watertank, +/turf/open/openspace, +/area/station/science/xenobiology) "mnu" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -40955,13 +42372,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"mnB" = ( -/obj/structure/railing{ - dir = 5 +"mnA" = ( +/obj/item/clothing/accessory/pocketprotector, +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/camera{ + pixel_y = 4; + pixel_x = -3 }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) +/obj/effect/spawner/random/clothing/mafia_outfit, +/obj/effect/spawner/random/clothing/mafia_outfit, +/obj/effect/spawner/random/clothing/backpack, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "mnC" = ( /obj/structure/grille, /obj/structure/disposalpipe/segment{ @@ -40977,27 +42400,17 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"moc" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ +"mnW" = ( +/obj/machinery/power/terminal{ dir = 8 }, -/obj/structure/sign/warning/xeno_mining{ - pixel_x = 29 - }, -/turf/open/floor/iron/smooth, -/area/mine/eva/lower) -"mod" = ( -/obj/structure/closet/crate/internals, -/obj/machinery/camera{ - c_tag = "Cargo Bay B-1"; - dir = 6 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/station/cargo/storage) +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) +"moy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "moB" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -41005,16 +42418,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"moE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark, -/area/station/medical/treatment_center) "moF" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -41037,6 +42440,15 @@ /obj/structure/lattice/catwalk, /turf/open/openspace/icemoon, /area/station/science/server) +"moX" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "mpe" = ( /obj/structure/cable, /obj/machinery/computer/quantum_console, @@ -41081,41 +42493,27 @@ }, /turf/open/floor/plating/icemoon, /area/station/science/ordnance/bomb) -"mpy" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "mpH" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness) -"mpP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id = "bridge blast"; - name = "Bridge Blast Door" - }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/command/bridge) -"mpR" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/disposal/bin{ - desc = "A pneumatic waste disposal unit. This one leads to the morgue."; - name = "corpse disposal" - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "mpU" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/service/hydroponics) +"mqa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/port/greater) +"mqd" = ( +/turf/open/floor/iron/half, +/area/station/service/hydroponics) "mqe" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -41131,18 +42529,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"mqs" = ( -/obj/effect/turf_decal/bot, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/xeno_mining{ - pixel_x = 29 - }, -/turf/open/floor/iron/smooth, -/area/mine/eva) -"mqy" = ( -/obj/machinery/shower/directional/west, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "mqD" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/wood, @@ -41159,10 +42545,19 @@ dir = 4 }, /area/station/security/brig/entrance) -"mqO" = ( -/obj/machinery/power/port_gen/pacman, +"mqI" = ( +/obj/machinery/vending/boozeomat, /turf/open/floor/plating, -/area/station/maintenance/department/electrical) +/area/station/maintenance/port/aft) +"mqL" = ( +/obj/machinery/button/door/directional/east{ + id = "xenobio9"; + name = "Xenobio Pen 9 Blast DOors"; + req_access = list("xenobiology") + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "mqR" = ( /obj/structure/chair{ dir = 8; @@ -41176,25 +42571,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/side, /area/station/science/research) -"mri" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle{ - dir = 4 - }, -/obj/structure/sign/warning/gas_mask/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) +"mrk" = ( +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "mro" = ( /obj/structure/curtain/cloth, /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"mrw" = ( -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "mry" = ( /obj/structure/table, /obj/effect/spawner/random/trash/food_packaging, @@ -41251,10 +42636,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"msd" = ( -/obj/machinery/door/poddoor/incinerator_atmos_main, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "msf" = ( /obj/item/kirbyplants/random, /obj/machinery/computer/security/telescreen/entertainment/directional/north, @@ -41263,13 +42644,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"msg" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison) "msi" = ( /obj/structure/table, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -41304,6 +42678,27 @@ /obj/item/stack/ducts/fifty, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"msu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/spawner/random/trash/caution_sign, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) +"msE" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"msG" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet2"; + name = "Unit 2" + }, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "msN" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/closed/wall/r_wall, @@ -41322,6 +42717,29 @@ /obj/machinery/requests_console/auto_name/directional/south, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"mta" = ( +/obj/structure/rack, +/obj/item/lighter, +/obj/item/clothing/glasses/meson{ + pixel_y = 4 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/computer_disk/engineering{ + pixel_y = 3; + pixel_x = 4 + }, +/obj/item/computer_disk/engineering{ + pixel_y = 3; + pixel_x = 4 + }, +/obj/item/computer_disk/engineering{ + pixel_y = 3; + pixel_x = 4 + }, +/obj/item/reagent_containers/pill/patch/aiuri, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "mtn" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -41332,6 +42750,11 @@ dir = 1 }, /area/mine/eva/lower) +"mtq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/security/courtroom) "mts" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -41339,26 +42762,63 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"mtt" = ( -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored/graveyard) +"mty" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/seeds/tower, +/obj/item/seeds/chanter{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/seeds/watermelon{ + pixel_y = -6; + pixel_x = 3 + }, +/obj/item/seeds/apple{ + pixel_y = 4; + pixel_x = 2 + }, +/obj/item/seeds/banana, +/obj/item/seeds/rose{ + pixel_y = -3; + pixel_x = -4 + }, +/obj/structure/noticeboard/directional/west, +/obj/item/paper/guides/jobs/hydroponics{ + pixel_y = 3; + pixel_x = -27 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "mtI" = ( /turf/closed/wall, /area/station/science/robotics/lab) -"mtN" = ( -/obj/effect/spawner/random/entertainment/arcade{ - dir = 4 +"mtS" = ( +/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 }, -/obj/structure/sign/poster/random/directional/west, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 +/obj/machinery/status_display/door_timer{ + pixel_x = -32; + id = "Cell 2"; + name = "Cell 2" }, -/turf/open/floor/iron/cafeteria, -/area/station/hallway/secondary/exit/departure_lounge) -"mtT" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/turf/open/floor/iron/textured, +/area/station/security/brig) +"mtV" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/dark/side, +/area/mine/eva) "mua" = ( /obj/structure/railing{ dir = 4 @@ -41399,6 +42859,20 @@ /obj/item/stack/cable_coil, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"muP" = ( +/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/structure/sign/departments/rndserver/directional/south, +/turf/open/floor/iron/white, +/area/station/science/research) +"muX" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) "mvc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -41443,6 +42917,9 @@ /obj/machinery/atmospherics/components/unary/passive_vent/layer2{ dir = 8 }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, /turf/open/floor/plating/snowed/icemoon, /area/station/ai_monitored/turret_protected/aisat_interior) "mwp" = ( @@ -41466,31 +42943,16 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) -"mwK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/holopad, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "mwQ" = ( /obj/structure/tank_holder/extinguisher, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"mxc" = ( -/obj/machinery/atmospherics/components/binary/valve/digital{ - 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, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/science/ordnance) -"mxh" = ( +"mxg" = ( /obj/structure/cable, -/turf/open/floor/stone, -/area/station/commons/lounge) +/obj/machinery/light/small/dim/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "mxj" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port Mix to East Ports" @@ -41506,6 +42968,21 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"mxF" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/fore) +"mxK" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "mxM" = ( /obj/machinery/camera/directional/north{ c_tag = "Central Hallway North" @@ -41530,13 +43007,34 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/east, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) -"mxY" = ( -/obj/structure/minecart_rail{ - dir = 9 +"mxR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/structure/cable, -/turf/open/floor/plating/snowed/coldroom, -/area/icemoon/underground/explored) +/turf/open/floor/wood, +/area/station/commons/lounge) +"mxX" = ( +/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/structure/disposalpipe/segment, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/aft) +"mxZ" = ( +/obj/effect/landmark/start/hangover, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "mye" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -41593,22 +43091,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"myS" = ( -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/camera/directional/south{ - c_tag = "Service - Botany Garden Access" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"myW" = ( +/obj/structure/ore_box, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/labor_camp) "myX" = ( /obj/machinery/light/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41630,15 +43116,32 @@ /obj/structure/lattice/catwalk, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) -"mza" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "mzb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/science/ordnance) +"mzf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light_switch/directional/north{ + pixel_y = 37 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/station/service/bar) +"mzg" = ( +/obj/machinery/light/directional/west, +/obj/structure/closet/firecloset, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) +"mzl" = ( +/obj/structure/railing, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/labor_camp) "mzr" = ( /obj/structure/table, /obj/item/exodrone{ @@ -41654,15 +43157,6 @@ dir = 8 }, /area/mine/eva) -"mzy" = ( -/obj/structure/sign/warning/electric_shock/directional/south, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/iron/smooth, -/area/station/maintenance/port/fore) "mzz" = ( /turf/open/floor/plating, /area/station/engineering/storage_shared) @@ -41693,6 +43187,28 @@ /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/textured_large, /area/station/security/brig/entrance) +"mzX" = ( +/obj/structure/disposalpipe/sorting/mail, +/obj/effect/mapping_helpers/mail_sorting/service/bar, +/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/plating, +/area/station/maintenance/starboard/fore) +"mzZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable/layer3, +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat/hallway"; + name = "Chamber Hallway Turret Control"; + pixel_x = 32; + pixel_y = -24; + req_access = list("minisat") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat_interior) "mAc" = ( /obj/machinery/door/airlock/maintenance{ name = "Mining Maintenance" @@ -41706,6 +43222,12 @@ "mAe" = ( /turf/open/floor/glass/reinforced, /area/station/security/lockers) +"mAn" = ( +/obj/effect/spawner/random/trash, +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "mAM" = ( /obj/structure/ladder, /obj/machinery/light/small/red/directional/west, @@ -41746,6 +43268,34 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"mBk" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/engine, +/area/station/science/explab) +"mBm" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet1"; + name = "Unit 1" + }, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) +"mBr" = ( +/obj/item/toy/plush/lizard_plushie{ + name = "Wines-And-Dines"; + pixel_x = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle{ + pixel_x = -9 + }, +/obj/structure/sign/flag/tizira/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"mBs" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/station/science/xenobiology) "mBB" = ( /obj/machinery/door/poddoor/preopen{ id = "ceprivacy"; @@ -41755,6 +43305,18 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/heads_quarters/ce) +"mBL" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/requests_console/auto_name/directional/east, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "mBO" = ( /obj/structure/sign/poster/contraband/random/directional/east, /obj/machinery/light/small/dim/directional/west, @@ -41792,6 +43354,9 @@ }, /turf/open/floor/plating, /area/station/hallway/primary/starboard) +"mBV" = ( +/turf/open/misc/asteroid/snow/ice/icemoon, +/area/icemoon/surface/outdoors/labor_camp) "mBX" = ( /obj/structure/table/wood, /obj/machinery/airalarm/directional/east, @@ -41800,6 +43365,27 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) +"mBY" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) +"mCd" = ( +/obj/machinery/computer/operating{ + dir = 2 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "mCw" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -41813,12 +43399,38 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"mCx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/dead_body_placer, +/obj/effect/turf_decal/trimline/neutral/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) +"mCz" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/obj/machinery/light/small/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "mCK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/construction) +"mCP" = ( +/obj/machinery/light/small/red/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/obj/item/radio/intercom/chapel/directional/east, +/turf/open/floor/wood/large, +/area/station/service/chapel) "mCT" = ( /obj/machinery/hydroponics/soil, /turf/open/floor/grass, @@ -41827,10 +43439,6 @@ /obj/machinery/telecomms/server/presets/common, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"mDg" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/maintenance/aft/lesser) "mDo" = ( /obj/structure/bed/double, /obj/item/bedsheet/black/double, @@ -41847,15 +43455,6 @@ dir = 4 }, /area/mine/eva) -"mDv" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Bridge East Access" - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "mDw" = ( /obj/structure/table/reinforced, /obj/effect/landmark/event_spawn, @@ -41865,9 +43464,23 @@ /obj/item/stamp/head/ce, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) +"mDy" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "mDX" = ( /turf/open/floor/engine/n2, /area/station/engineering/atmos) +"mEb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/flasher{ + pixel_y = -30; + id = "GulagCell 3" + }, +/turf/open/floor/iron, +/area/mine/laborcamp) "mEg" = ( /obj/structure/cable, /obj/machinery/holopad/secure, @@ -41904,11 +43517,22 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"mEz" = ( +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "mEB" = ( /obj/machinery/light/directional/south, /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"mEI" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "mEJ" = ( /turf/closed/wall/r_wall, /area/station/science/genetics) @@ -41924,18 +43548,49 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"mES" = ( -/obj/structure/sign/poster/random/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/iron/smooth, -/area/station/maintenance/fore/lesser) "mEU" = ( /obj/structure/chair/office/light{ dir = 4 }, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"mEW" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/west{ + id = "xenobio1"; + name = "Xenobio Pen 1 Blast Door"; + req_access = list("xenobiology") + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"mFb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/folder/white{ + pixel_x = 2 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/ordnance/office) "mFj" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -41976,14 +43631,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/brig/upper) -"mFR" = ( -/obj/structure/sign/plaques/kiddie/badger{ - pixel_y = 32 - }, -/turf/open/misc/dirt{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/icemoon/underground/explored) "mFU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42031,13 +43678,13 @@ /obj/structure/lattice/catwalk, /turf/open/openspace/icemoon, /area/station/science/server) -"mGF" = ( -/obj/effect/decal/cleanable/confetti, -/obj/structure/closet/crate/cardboard, -/obj/item/storage/cans/sixbeer, -/obj/effect/spawner/random/food_or_drink/cups, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"mGH" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/stairs/north, +/turf/open/floor/iron/stairs/medium, +/area/station/cargo/storage) "mGJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42050,10 +43697,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"mGV" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "mHd" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, @@ -42072,6 +43715,17 @@ /obj/machinery/brm, /turf/open/floor/iron, /area/mine/production) +"mHq" = ( +/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/structure/cable, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "mHu" = ( /obj/machinery/atmospherics/components/tank, /turf/open/floor/iron/dark, @@ -42097,11 +43751,29 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"mIe" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "mIk" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible, /turf/open/floor/plating, /area/station/engineering/atmos) +"mIs" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/stool/bar/directional/north, +/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, +/area/station/commons/lounge) "mIt" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -42129,17 +43801,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"mIT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/cigarette{ - pixel_x = 6; - pixel_y = 12 - }, -/turf/open/floor/iron, -/area/mine/eva) "mJa" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/tile/yellow, @@ -42187,13 +43848,6 @@ /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/station/security/prison/rec) -"mJZ" = ( -/obj/structure/fence{ - dir = 4 - }, -/obj/structure/sign/nanotrasen, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "mKa" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42201,15 +43855,63 @@ dir = 8 }, /area/station/hallway/secondary/entry) +"mKh" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "mKq" = ( /obj/structure/closet/secure_closet/evidence, /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark/textured_edge, /area/station/security/evidence) +"mKA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/structure/tank_holder/oxygen, +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"mKC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/aft) +"mKJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/entry) +"mKO" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) "mLa" = ( /obj/item/kirbyplants/random, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"mLd" = ( +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/kudzu/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "mLm" = ( /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ @@ -42217,12 +43919,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/lesser) -"mLo" = ( -/obj/structure/rack, -/obj/item/crowbar, -/obj/item/picket_sign, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "mLt" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -42260,16 +43956,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"mLX" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 10 + }, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/work) "mMb" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"mMi" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "mMk" = ( /obj/machinery/telecomms/message_server/preset, /turf/open/floor/iron/dark/telecomms, @@ -42289,10 +43990,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/carpet, /area/station/service/library) -"mMI" = ( -/obj/structure/secure_safe/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "mMM" = ( /turf/closed/wall/r_wall, /area/station/security/prison) @@ -42321,19 +44018,42 @@ }, /turf/open/floor/plating/icemoon, /area/station/science/ordnance/bomb) -"mMZ" = ( +"mNi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"mNt" = ( /obj/structure/cable, -/obj/effect/turf_decal/box/red/corners{ +/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/heavy, +/obj/effect/turf_decal/stripes/white/line{ dir = 1 }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/science/research) "mNy" = ( /obj/effect/turf_decal/tile/green{ dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"mNB" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "mNF" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 4 @@ -42352,6 +44072,10 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"mNP" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "mNY" = ( /turf/closed/wall/r_wall, /area/station/maintenance/port/aft) @@ -42388,16 +44112,6 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"mOH" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/commons/fitness) "mOL" = ( /obj/machinery/airalarm/directional/south, /obj/structure/disposalpipe/segment{ @@ -42423,10 +44137,41 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"mPl" = ( +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/hydroponics) +"mPp" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/poster/official/report_crimes/directional/north, +/turf/open/floor/iron, +/area/mine/laborcamp) "mPq" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"mPr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "mPv" = ( /obj/machinery/door/airlock/medical/glass{ name = "Medbay Storage" @@ -42436,13 +44181,6 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/white/smooth_large, /area/station/medical/storage) -"mPG" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "mPH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42461,22 +44199,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel) -"mPO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/sign/warning/radiation/rad_area/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) -"mPQ" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/decoration/ornament, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "mQb" = ( /obj/structure/flora/grass/both/style_random, /turf/open/misc/asteroid/snow/icemoon, @@ -42506,17 +44228,6 @@ }, /turf/open/floor/iron/smooth, /area/mine/laborcamp/security) -"mQr" = ( -/obj/machinery/modular_computer/preset/id, -/obj/item/radio/intercom/directional/east, -/obj/machinery/camera{ - c_tag = "Chief Medical Office North"; - dir = 9; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/tile/blue/full, -/turf/open/floor/iron/dark/smooth_large, -/area/station/command/heads_quarters/cmo) "mQG" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/iron/dark, @@ -42529,27 +44240,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"mRp" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) "mRr" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"mRv" = ( -/obj/structure/chair/stool/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/station/commons/lounge) +"mRy" = ( +/obj/effect/landmark/start/hangover, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "mRG" = ( /obj/structure/table, /obj/item/book/manual/wiki/atmospherics, @@ -42571,15 +44271,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) -"mRN" = ( -/obj/structure/railing, -/obj/structure/closet, -/obj/effect/spawner/random/maintenance/four, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "mRU" = ( /obj/effect/decal/cleanable/insectguts, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -42587,31 +44278,10 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"mSv" = ( -/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/cyclelink_helper_multi{ - cycle_id = "sci-med-passthrough" - }, -/obj/machinery/door/airlock/research{ - name = "Research Access" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/science/general, -/turf/open/floor/iron/white, -/area/station/maintenance/aft/greater) -"mSH" = ( -/obj/structure/fence{ - dir = 1 - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) +"mRY" = ( +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating, +/area/station/maintenance/department/electrical) "mSL" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -42628,10 +44298,35 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"mSP" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plating, +/area/station/cargo/storage) "mSQ" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/ice, /area/icemoon/surface/outdoors/nospawn) +"mSX" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"mSY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/station/command/gateway) "mTc" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, @@ -42647,15 +44342,6 @@ }, /turf/open/floor/engine/air, /area/station/engineering/atmos) -"mTA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/service/kitchen/coldroom) "mTI" = ( /obj/structure/sink/kitchen/directional/south{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -42664,69 +44350,22 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/freezer, /area/mine/laborcamp) -"mTL" = ( -/obj/structure/closet/secure_closet/bar, -/obj/machinery/firealarm/directional/north{ - pixel_x = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/machinery/light_switch/directional/north{ - pixel_x = -5; - pixel_y = 28 - }, -/obj/item/vending_refill/cigarette, -/turf/open/floor/wood/parquet, -/area/station/service/bar/backroom) "mTS" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"mTW" = ( -/obj/structure/fluff/tram_rail{ - pixel_y = 17 - }, -/obj/structure/fluff/tram_rail, -/obj/structure/lattice/catwalk, -/obj/structure/marker_beacon/burgundy{ - name = "landing marker" - }, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/openspace/icemoon/keep_below, -/area/icemoon/underground/explored) -"mTX" = ( -/obj/structure/barricade/wooden, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) -"mUf" = ( -/obj/structure/railing{ - dir = 9 - }, -/obj/machinery/button/door/directional/east{ - id = "drone_bay"; - name = "Shutter Control"; - pixel_y = -8 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) "mUs" = ( /obj/machinery/light/directional/south, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"mUz" = ( -/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/insectguts, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/sign/warning/cold_temp/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) +"mUt" = ( +/obj/structure/fence{ + dir = 2 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored/graveyard) "mUE" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -42734,20 +44373,6 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"mUW" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/spawner/random/trash/botanical_waste, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"mVe" = ( -/obj/machinery/button/ignition/incinerator/atmos, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) -"mVm" = ( -/obj/structure/grille/broken, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "mVp" = ( /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_dark, @@ -42771,15 +44396,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"mVI" = ( -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/work) "mVN" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/broken/directional/north, @@ -42787,20 +44403,20 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"mVW" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Dormitory" +"mVS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 }, /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, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/commons/dorms) +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "mWf" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -42909,6 +44525,9 @@ /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/border_only{ + dir = 8 + }, /turf/open/floor/iron/white, /area/station/science/ordnance/office) "mXi" = ( @@ -42937,19 +44556,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"mXD" = ( -/obj/structure/rack, -/obj/item/mecha_parts/mecha_equipment/drill, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron/smooth, -/area/mine/mechbay) -"mXH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/entry) "mXK" = ( /obj/structure/table, /obj/structure/reagent_dispensers/servingdish, @@ -42968,11 +44574,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"mXW" = ( -/obj/structure/flora/bush/flowers_pp/style_random, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) "mYh" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) @@ -42987,10 +44588,22 @@ }, /turf/open/floor/iron/white, /area/mine/laborcamp) -"mYn" = ( -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +"mYp" = ( +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/poddoor/preopen{ + id = "Biohazard"; + name = "Biohazard Containment Door" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/science/research) "mYq" = ( /obj/machinery/requests_console/directional/north{ department = "Research Director's Desk"; @@ -43019,12 +44632,38 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/supply) +"mYA" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/kirbyplants/random, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/entry) +"mYG" = ( +/obj/effect/turf_decal/bot, +/obj/structure/noticeboard/hop{ + pixel_y = 36 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "mYJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) +"mYR" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen{ + pixel_x = -5 + }, +/obj/item/hand_labeler{ + pixel_y = -3 + }, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "mZf" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 5 @@ -43083,6 +44722,17 @@ }, /turf/open/floor/iron/white, /area/station/maintenance/aft/greater) +"mZI" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Xenobiology Maintenance" + }, +/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/science/xenobio, +/obj/structure/sign/warning/biohazard/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "mZJ" = ( /obj/effect/decal/cleanable/dirt, /obj/item/radio/intercom/directional/north, @@ -43094,11 +44744,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness) -"mZS" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +"mZT" = ( +/obj/structure/table/wood, +/obj/item/cigarette/cigar{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/storage/box/matches, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain) "mZV" = ( /obj/structure/rack, /obj/item/storage/toolbox/electrical{ @@ -43117,12 +44771,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"nah" = ( -/obj/machinery/chem_heater/withbuffer, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/yellow/full, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/pharmacy) "naq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -43143,6 +44791,16 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/engineering/storage) +"naF" = ( +/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/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "naP" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -43178,13 +44836,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"nbl" = ( -/obj/structure/minecart_rail{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating/snowed/coldroom, -/area/icemoon/underground/explored) "nbm" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 6 @@ -43206,23 +44857,16 @@ dir = 1 }, /area/station/command/heads_quarters/rd) -"nbt" = ( -/obj/machinery/computer/security/hos, -/obj/machinery/requests_console/directional/north{ - department = "Head of Security's Desk"; - name = "Head of Security Requests Console" +"nbs" = ( +/obj/structure/fireplace{ + pixel_x = -32 }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/button/door/directional/north{ - id = "hosspace"; - name = "Icemoon Shutters Control"; - pixel_x = -24 +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light_switch/directional/north{ + pixel_x = 9 }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/carpet/royalblue, -/area/station/command/heads_quarters/hos) +/turf/open/floor/stone, +/area/mine/eva/lower) "nbw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43233,18 +44877,27 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/dark/textured, /area/station/security/office) +"nbz" = ( +/obj/structure/chair/wood, +/obj/effect/mapping_helpers/no_atoms_ontop, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"nbB" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "nbC" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/medical/treatment_center) -"nbI" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +"nbG" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron/dark/side, +/area/station/service/chapel) "nbJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -43259,57 +44912,31 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/smooth, /area/mine/eva/lower) -"nbL" = ( -/obj/structure/table/wood, -/obj/item/camera, -/obj/item/taperecorder, -/obj/item/radio/intercom/directional/east, -/obj/structure/sign/painting/library_private{ - pixel_y = 32 +"nbK" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 }, -/obj/item/storage/photo_album/library, -/turf/open/floor/engine/cult, -/area/station/service/library) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Departure Lounge Holding Area" + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "nbM" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ dir = 5 }, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) -"nbO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/kitchen/coldroom) -"nbP" = ( -/obj/structure/bonfire/prelit, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "nbT" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark/textured, /area/station/commons/storage/primary) -"nbU" = ( -/obj/structure/rack, -/obj/item/circuitboard/machine/exoscanner{ - pixel_y = 3 - }, -/obj/item/circuitboard/machine/exoscanner, -/obj/item/circuitboard/machine/exoscanner{ - pixel_y = -3 - }, -/obj/item/radio/intercom/directional/south, -/obj/machinery/camera{ - c_tag = "Cargo Bay Drone Bay"; - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/drone_bay) "nbW" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -43332,33 +44959,30 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ncc" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 +"nce" = ( +/obj/structure/sign/warning/fire/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"nch" = ( +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/item/paper{ - pixel_y = 4 +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 6 }, -/obj/item/pen{ - pixel_x = -5 +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 4 }, -/turf/open/floor/iron, -/area/station/service/kitchen/coldroom) -"ncd" = ( -/obj/effect/turf_decal/siding/white, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/effect/turf_decal/tile/green/opposingcorners{ +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"nce" = ( -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) +/obj/structure/sign/poster/official/safety_internals/directional/north, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 4 + }, +/area/station/ai_monitored/command/storage/eva) "nci" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43378,17 +45002,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/commons/locker) -"ncx" = ( -/obj/structure/table/wood, -/obj/item/soap/deluxe{ - pixel_y = 11 - }, -/obj/item/soap/deluxe{ - pixel_y = 6 - }, -/obj/item/soap/deluxe, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) "ncB" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Walkway" @@ -43402,14 +45015,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron, /area/station/security/brig/upper) -"ncO" = ( -/obj/machinery/shower/directional/east, -/obj/structure/sign/warning/gas_mask{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals."; - pixel_x = -29 - }, -/turf/open/floor/iron/smooth, -/area/mine/living_quarters) "ncR" = ( /turf/closed/wall/r_wall, /area/station/security/courtroom) @@ -43476,32 +45081,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"ndK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/conveyor{ - dir = 8; - id = "QMLoad" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/status_display/supply{ - pixel_y = -32 - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "ndO" = ( -/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/obj/machinery/status_display/ai/directional/west, /turf/open/floor/wood, /area/station/service/library) "nea" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ id = "hosspace"; - name = "Space Shutters" + name = "Privacy Shutters" }, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) @@ -43517,16 +45106,13 @@ dir = 5 }, /area/station/security/prison) -"nek" = ( -/obj/machinery/flasher/directional/north{ - id = "Cell 1" - }, -/obj/structure/bed{ - dir = 1; - pixel_x = -2 - }, -/turf/open/floor/iron/smooth, -/area/station/security/brig) +"nej" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "neq" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -43545,13 +45131,11 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"neC" = ( -/obj/structure/chair{ - dir = 1; - name = "Prosecution" - }, -/turf/open/floor/wood, -/area/station/security/courtroom) +"neE" = ( +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "neF" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -43573,51 +45157,11 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/engine_smes) -"neM" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"neQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - 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/starboard/fore) "neR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /obj/machinery/meter, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"neV" = ( -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/structure/table, -/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/structure/cable, -/obj/item/mod/module/plasma_stabilizer, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_x = -4; - pixel_y = -1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/item/mod/module/signlang_radio, -/obj/item/mod/module/thermal_regulator, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) "nfd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/west, @@ -43662,21 +45206,29 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"nfG" = ( -/obj/structure/marker_beacon/burgundy{ - name = "landing marker" +"nfE" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 }, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) -"nfK" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/hydroponics/soil, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) +"nfF" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"nfS" = ( +/obj/machinery/door/morgue{ + name = "Confession Booth (Chaplain)"; + req_access = list("chapel_office"); dir = 4 }, -/obj/structure/cable, -/obj/machinery/light/floor, -/turf/open/floor/wood, -/area/station/commons/lounge) +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/service/chapel) "nfU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43686,25 +45238,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"nfW" = ( -/obj/machinery/computer/mecha{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/obj/machinery/camera/autoname/directional/south{ - c_tag = "Research Director's Office"; - network = list("ss13","rd") - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/command/heads_quarters/rd) -"ngh" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) +"ngb" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/atmospherics, +/obj/item/holosign_creator/atmos, +/obj/item/holosign_creator/atmos, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "ngj" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 9 @@ -43723,6 +45263,17 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/mine/production) +"ngo" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8; + name = "Exfiltrate Port" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) "ngM" = ( /obj/structure/lattice/catwalk, /obj/structure/fence/door{ @@ -43733,23 +45284,11 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"ngY" = ( -/obj/structure/sign/warning/cold_temp, -/turf/closed/wall, -/area/station/service/chapel) "ngZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"nhb" = ( -/obj/machinery/power/solar_control{ - id = "auxsolareast"; - name = "Port Bow Solar Control" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "nhf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43760,16 +45299,6 @@ /obj/structure/mirror/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) -"nhv" = ( -/obj/effect/spawner/random/structure/closet_maintenance, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/railing{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "nhw" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -43789,13 +45318,11 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/engine, /area/station/science/genetics) -"nhS" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/item/radio/intercom/directional/west, -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) +"nhO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/grimy, +/area/station/maintenance/aft/greater) "nhT" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -43849,13 +45376,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"niC" = ( -/obj/structure/cable, -/obj/structure/sign/warning/secure_area/directional/east, -/turf/open/floor/iron/white/side{ - dir = 9 - }, -/area/station/science/research) +"niE" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "niG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -43865,6 +45390,28 @@ /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/mine/eva/lower) +"niO" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/machinery/reagentgrinder{ + pixel_y = 9; + pixel_x = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) +"niU" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/aft) "niY" = ( /obj/effect/spawner/random/trash/bin, /turf/open/floor/plating, @@ -43880,39 +45427,47 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) -"njf" = ( -/obj/machinery/plate_press, -/turf/open/floor/iron/dark/smooth_half, -/area/station/security/prison/work) "nji" = ( /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"njj" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/service/kitchen) "njm" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/transit_tube) -"njz" = ( -/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/freezer, -/area/station/service/kitchen/coldroom) "njA" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/atmos/storage) +"njD" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Gateway" + }, +/obj/structure/table, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/item/emergency_bed{ + pixel_x = -1 + }, +/obj/item/emergency_bed{ + pixel_x = 4 + }, +/obj/item/storage/medkit/regular{ + pixel_y = 1 + }, +/turf/open/floor/iron, +/area/station/command/gateway) "njJ" = ( /turf/closed/wall, /area/mine/laborcamp) -"njM" = ( -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "njO" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, @@ -43952,14 +45507,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison/workout) -"nkI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/structure/tank_holder/oxygen, +"nkE" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, -/area/station/maintenance/port/aft) +/area/station/maintenance/starboard/fore) +"nkH" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) "nkO" = ( /obj/structure/table, /obj/item/storage/box/matches, @@ -43972,22 +45531,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/vault, /area/station/security/prison/rec) -"nla" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"nll" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/sheet/plasteel/twenty{ - pixel_x = 3; - pixel_y = -2 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage) "nlp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44003,17 +45546,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/construction) -"nlA" = ( -/obj/item/clothing/head/beanie/orange{ - pixel_y = 8 - }, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/shoes/wheelys/skishoes{ - pixel_y = -8 - }, -/obj/effect/decal/remains/human, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "nlJ" = ( /obj/structure/railing{ dir = 5 @@ -44026,14 +45558,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/hallway/primary/starboard) -"nlN" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/medical/chemistry) "nlO" = ( /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 @@ -44071,16 +45595,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"nmi" = ( -/obj/structure/closet/chefcloset, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/tlv_cold_room, -/obj/structure/sign/poster/official/cleanliness/directional/west, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "nmj" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -44128,12 +45642,6 @@ /obj/effect/spawner/random/contraband/cannabis, /turf/open/floor/grass, /area/station/security/prison/garden) -"nmu" = ( -/obj/structure/sign/warning/xeno_mining/directional/east, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/warehouse) "nmx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44141,18 +45649,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) -"nmy" = ( -/obj/structure/fence/door{ - dir = 4 - }, -/obj/structure/railing/corner/end/flip{ - dir = 8 - }, -/obj/structure/railing/corner/end{ - dir = 8 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "nmz" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -44160,23 +45656,6 @@ }, /turf/open/openspace, /area/station/science/ordnance/office) -"nmA" = ( -/obj/machinery/door/firedoor, -/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, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/entry) "nmC" = ( /obj/machinery/iv_drip, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -44184,6 +45663,21 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) +"nmD" = ( +/obj/structure/sign/departments/holy/directional/west, +/turf/open/openspace, +/area/station/service/chapel) +"nmH" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) "nmI" = ( /obj/machinery/light/directional/west, /turf/open/floor/iron/dark/textured, @@ -44202,15 +45696,13 @@ /obj/effect/landmark/navigate_destination/library, /turf/open/floor/wood, /area/station/service/library) -"nmO" = ( -/obj/structure/marker_beacon/burgundy{ - name = "landing marker" - }, -/obj/structure/railing/wooden_fence{ - dir = 8 +"nnj" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/turf/open/floor/wood, +/area/station/security/courtroom) "nnl" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, /obj/effect/spawner/structure/window/reinforced/plasma, @@ -44226,6 +45718,20 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"nnp" = ( +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + color = "#0000ff"; + dir = 8; + name = "Supply multi deck pipe adapter" + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + color = "#ff0000"; + dir = 8; + name = "Scrubbers multi deck pipe adapter" + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/engineering/lobby) "nnw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/closed/wall/r_wall, @@ -44242,20 +45748,14 @@ /obj/machinery/vending/assist, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"nnM" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/power_store/cell/high, -/turf/open/floor/plating, -/area/station/engineering/storage/tech) "nnR" = ( /obj/machinery/holopad, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) +"nof" = ( +/obj/machinery/newscaster/directional/east, +/turf/open/floor/stone, +/area/station/commons/lounge) "noi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/airalarm/directional/east, @@ -44272,11 +45772,6 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted, /turf/open/floor/iron, /area/station/engineering/atmos) -"non" = ( -/obj/structure/stairs/south, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/virology) "nor" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -44288,15 +45783,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"noF" = ( +"noJ" = ( /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{ +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 4 }, -/obj/machinery/light/directional/east, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/poster/official/help_others/directional/north, /turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/commons/dorms) "noM" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -44309,11 +45806,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron, /area/station/engineering/storage_shared) -"noQ" = ( -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/gas_mask/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "noR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44356,11 +45848,11 @@ /turf/open/floor/iron/showroomfloor, /area/station/security/warden) "npo" = ( -/obj/structure/extinguisher_cabinet/directional/north, /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 4 }, +/obj/machinery/light_switch/directional/north, /turf/open/floor/iron/white, /area/station/medical/psychology) "npq" = ( @@ -44440,16 +45932,28 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured, /area/station/security/prison) +"npP" = ( +/obj/machinery/door/airlock{ + id_tag = "commissarydoor"; + name = "Commissary" + }, +/obj/machinery/door/firedoor{ + 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 = 8 + }, +/turf/open/floor/iron/dark, +/area/station/commons/vacant_room/commissary) "npT" = ( /obj/structure/chair/office{ dir = 8 }, /turf/open/floor/iron/white, /area/station/science/explab) -"npZ" = ( -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/fore) "nqb" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/plating/snowed/icemoon, @@ -44467,13 +45971,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"nqv" = ( -/obj/structure/fence{ - dir = 4 - }, -/obj/structure/sign/nanotrasen, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) "nqw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44481,12 +45978,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/commons/storage/mining) -"nqy" = ( -/obj/structure/stairs/east, -/obj/structure/railing, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/iron/white, -/area/station/science/ordnance) "nqD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44495,13 +45986,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"nqI" = ( -/obj/effect/landmark/event_spawn, -/obj/machinery/requests_console/auto_name/directional/south, -/obj/machinery/holopad, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "nqP" = ( /obj/machinery/camera/directional/north{ c_tag = "Research Division West"; @@ -44512,39 +45996,12 @@ dir = 10 }, /area/station/science/research) -"nqU" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "hopqueue"; - name = "HoP Queue Shutters" - }, -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"nqX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/mix) -"nrh" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 10 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) "nrm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"nrq" = ( -/obj/effect/turf_decal/tile/red, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/textured, -/area/station/security/brig) "nrA" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -44594,19 +46051,24 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"nrJ" = ( +/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/dark, +/area/station/service/hydroponics) +"nsj" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "nsp" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"nsq" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/filingcabinet/filingcabinet, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/sorting) "nsr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44617,29 +46079,17 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"nsu" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "nsv" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"nsH" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/deepfryer, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) -"nsK" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/button/door/directional/south{ - id = "engsm"; - name = "Radiation Shutters Control"; - req_access = list("engineering") - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "nsL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44656,6 +46106,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/textured, /area/station/security/interrogation) +"nsQ" = ( +/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/plating, +/area/station/maintenance/starboard/lesser) "nsZ" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/office) @@ -44671,10 +46128,18 @@ "ntl" = ( /turf/closed/wall/r_wall, /area/station/service/lawoffice) -"nto" = ( +"ntm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/cobweb, /obj/structure/cable, -/turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat_interior) +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "ntq" = ( /obj/machinery/door/window/brigdoor/left/directional/north{ req_access = list("brig") @@ -44687,20 +46152,26 @@ }, /turf/open/floor/iron, /area/station/security/processing) -"ntx" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 10 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +"ntE" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/item/aquarium_kit, +/obj/structure/rack, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "ntK" = ( /obj/structure/flora/rock/icy/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"ntO" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/sign/warning/deathsposal/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "ntT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood, @@ -44735,23 +46206,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/visit) -"nuM" = ( -/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/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ +"nuD" = ( +/obj/effect/turf_decal/siding/wood/corner{ dir = 4 }, -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Arrivals Dock" +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/entry) +/turf/open/floor/stone, +/area/station/service/bar/atrium) "nuN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -44772,20 +46235,13 @@ /obj/structure/flora/bush/snow/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"nvc" = ( -/obj/machinery/smartfridge, -/turf/open/floor/iron/dark, -/area/station/service/kitchen) "nvh" = ( -/obj/machinery/vending/wardrobe/chef_wardrobe, -/obj/effect/turf_decal/siding/white/corner{ - dir = 8 +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics" }, -/obj/machinery/light/directional/north, -/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/east, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/plating, +/area/station/engineering/atmos/storage) "nvr" = ( /obj/effect/turf_decal/weather/snow/corner, /obj/machinery/light/small/directional/north, @@ -44797,17 +46253,31 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"nvw" = ( -/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/hallway/secondary/service) "nvx" = ( /obj/machinery/airalarm/directional/east, /obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/structure/table, +/obj/item/folder/yellow, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, /turf/open/floor/iron, /area/station/cargo/miningdock) +"nvy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) +"nvB" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "nvE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/mop_bucket/janitorialcart{ @@ -44857,6 +46327,16 @@ }, /turf/open/floor/iron/white, /area/station/science/genetics) +"nwn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "nwr" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -44866,17 +46346,21 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) -"nwC" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 +"nwA" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/siding/white{ + dir = 8 }, -/obj/machinery/hydroponics/constructable, -/obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"nwD" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "nwF" = ( /obj/structure/chair/sofa/bench{ dir = 4 @@ -44894,37 +46378,15 @@ dir = 9 }, /area/station/science/research) -"nxc" = ( -/turf/open/floor/glass, -/area/station/service/hydroponics) "nxe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/pink, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"nxj" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/loading_area/white, -/turf/open/floor/wood/large, -/area/station/service/bar/atrium) "nxm" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) -"nxw" = ( -/obj/machinery/door/morgue{ - req_access = list("bar") - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/iron/grimy, -/area/station/service/bar/backroom) "nxD" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44943,6 +46405,10 @@ "nxM" = ( /turf/closed/wall, /area/station/maintenance/department/medical/morgue) +"nxP" = ( +/obj/structure/gulag_vent/ice, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/labor_camp) "nxU" = ( /obj/machinery/status_display/evac/directional/east, /obj/structure/reagent_dispensers/fueltank, @@ -44960,25 +46426,34 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"nxY" = ( +/obj/machinery/button/door/directional/west{ + id = "Disposal Exit"; + name = "Disposal Vent Control"; + req_access = list("maint_tunnels") + }, +/obj/structure/chair/stool/directional/south{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/computer/pod/old/mass_driver_controller/trash{ + pixel_x = -36 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) "nyg" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/random/directional/south, /turf/open/floor/plating, /area/station/construction) -"nyj" = ( -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Hydroponics" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/obj/machinery/duct, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/hydroponics) +"nyh" = ( +/obj/structure/sign/departments/maint/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "nyl" = ( /obj/machinery/door/morgue{ name = "Private Study"; @@ -45006,13 +46481,6 @@ "nyC" = ( /turf/open/floor/iron/dark/smooth_half, /area/station/service/chapel) -"nyE" = ( -/obj/structure/sign/nanotrasen{ - pixel_y = -32 - }, -/obj/structure/flora/bush/flowers_br/style_random, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "nyH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45046,6 +46514,20 @@ /obj/structure/sink/directional/east, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"nyR" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark/side, +/area/mine/eva) +"nyT" = ( +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron/grimy, +/area/station/hallway/secondary/entry) "nyX" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -45057,6 +46539,12 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"nyZ" = ( +/obj/structure/fence/corner{ + dir = 2 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "nza" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45070,17 +46558,17 @@ /turf/open/floor/iron/smooth, /area/station/security/execution/transfer) "nzl" = ( -/obj/machinery/button/flasher{ - id = "transferflash"; - pixel_x = 23; - pixel_y = 9 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/item/radio/intercom/directional/east{ pixel_y = -6 }, /turf/open/floor/iron/smooth, /area/station/security/execution/transfer) +"nzn" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "nzp" = ( /obj/effect/landmark/blobstart, /obj/effect/decal/cleanable/dirt, @@ -45103,12 +46591,6 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) -"nzt" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "nzy" = ( /obj/machinery/computer/atmos_control/mix_tank{ dir = 8 @@ -45118,6 +46600,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"nzA" = ( +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) "nzB" = ( /obj/effect/turf_decal/trimline/blue/warning{ dir = 4 @@ -45148,37 +46636,28 @@ dir = 1 }, /area/station/medical/chemistry) -"nzT" = ( -/obj/effect/turf_decal/trimline/white/end{ - dir = 8 +"nzN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/mix) +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"nzU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "nzV" = ( /obj/effect/turf_decal/tile/red{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"nAa" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/sign/warning/cold_temp{ - pixel_x = 3; - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/mine/eva/lower) -"nAf" = ( -/obj/structure/cable, -/obj/item/wrench, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "nAg" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -45196,6 +46675,22 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron/dark/side, /area/station/security/prison) +"nAw" = ( +/obj/structure/closet/radiation, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/structure/noticeboard/ce{ + pixel_y = 36 + }, +/turf/open/floor/iron, +/area/station/engineering/main) +"nAx" = ( +/obj/structure/flora/grass/both/style_random, +/obj/item/stack/cable_coil/five, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "nAD" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -45239,6 +46734,7 @@ /obj/item/clothing/shoes/winterboots, /obj/item/clothing/suit/hooded/wintercoat, /obj/item/crowbar, +/obj/structure/sign/warning/cold_temp/directional/west, /turf/open/floor/iron, /area/station/service/chapel) "nBj" = ( @@ -45269,11 +46765,20 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"nBB" = ( -/obj/machinery/power/smes, +"nBt" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/aft) +/obj/item/stack/package_wrap{ + pixel_y = 2 + }, +/obj/item/book/manual/chef_recipes, +/obj/item/holosign_creator/robot_seat/restaurant, +/obj/structure/rack, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "nBE" = ( /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/weather/snow/corner{ @@ -45293,40 +46798,14 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/maintenance/starboard/aft) -"nBO" = ( -/obj/structure/disposalpipe/sorting/mail, -/obj/effect/mapping_helpers/mail_sorting/service/bar, -/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/plating, -/area/station/maintenance/starboard/fore) -"nBQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/tank/air{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) -"nBZ" = ( -/obj/structure/stairs/south, -/turf/open/floor/stone, -/area/station/commons/lounge) -"nCa" = ( -/obj/structure/rack, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/shovel, -/obj/item/flashlight, -/obj/item/flashlight, -/obj/machinery/camera{ - c_tag = "Departure Lounge Emergency EVA"; - dir = 9 +"nBS" = ( +/obj/structure/table/wood, +/obj/item/storage/crayons, +/obj/item/storage/fancy/candle_box{ + pixel_y = 5 }, -/obj/item/radio/off, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron/white, -/area/station/hallway/secondary/exit/departure_lounge) +/turf/open/floor/iron/dark, +/area/station/service/chapel/office) "nCb" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/lithium{ @@ -45345,6 +46824,19 @@ dir = 8 }, /area/station/medical/chem_storage) +"nCd" = ( +/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/structure/cable, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "nCh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/directional/east, @@ -45366,14 +46858,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness) -"nCz" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "nCD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45406,12 +46890,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"nCW" = ( -/obj/structure/table, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/station/security/brig/entrance) "nDd" = ( /obj/machinery/status_display/evac/directional/west, /obj/effect/turf_decal/stripes/corner, @@ -45420,24 +46898,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"nDi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/obj/structure/closet/radiation, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) -"nDl" = ( -/obj/structure/railing/corner, -/obj/machinery/door/firedoor/border_only, -/obj/effect/turf_decal/tile/dark/half/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) -"nDm" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "nDp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45463,20 +46923,6 @@ dir = 5 }, /area/station/maintenance/port/aft) -"nDz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable/layer3, -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/aisat/hallway"; - name = "Chamber Hallway Turret Control"; - pixel_x = 32; - pixel_y = -24; - req_access = list("minisat") - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "nDA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45484,15 +46930,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"nDB" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/white/side{ - dir = 9 - }, -/area/station/command/heads_quarters/rd) "nDE" = ( /turf/closed/wall/r_wall, /area/station/security/prison/garden) @@ -45522,6 +46959,10 @@ }, /turf/open/floor/iron/white/corner, /area/station/commons/storage/art) +"nEa" = ( +/obj/item/stack/cable_coil/five, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "nEc" = ( /obj/structure/table/glass, /obj/effect/decal/cleanable/dirt, @@ -45561,10 +47002,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"nEI" = ( -/obj/item/flashlight/lantern/on, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) +"nEC" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/security/brig) "nEV" = ( /obj/machinery/vending/wardrobe/sec_wardrobe, /obj/structure/cable, @@ -45605,6 +47054,27 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) +"nFt" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Bar and Kitchen" + }, +/obj/structure/plasticflaps/opaque, +/obj/effect/turf_decal/delivery, +/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/textured, +/area/station/maintenance/starboard/fore) +"nFz" = ( +/obj/structure/window/reinforced/spawner/directional/north{ + pixel_y = 2 + }, +/obj/structure/sign/warning/docking/directional/north, +/turf/open/floor/engine, +/area/station/science/xenobiology) "nFF" = ( /obj/structure/table, /obj/item/assembly/signaler{ @@ -45626,6 +47096,14 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) +"nFG" = ( +/obj/structure/table, +/obj/item/relic, +/obj/effect/spawner/random/maintenance, +/obj/item/screwdriver, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) "nFL" = ( /obj/machinery/door/airlock/external/glass, /obj/effect/mapping_helpers/airlock/access/all/engineering/external, @@ -45638,16 +47116,12 @@ "nFO" = ( /obj/structure/transit_tube/horizontal, /obj/structure/cable, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"nFQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/chair/wood{ +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ dir = 1 }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "nFU" = ( /obj/structure/chair/stool/directional/west, /obj/item/trash/energybar, @@ -45655,10 +47129,29 @@ /obj/structure/sign/poster/official/work_for_a_future/directional/south, /turf/open/floor/iron, /area/station/security/prison/work) -"nGk" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, +"nGd" = ( +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating, +/area/station/security/prison/safe) +"nGo" = ( +/obj/machinery/vending/games, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"nGv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/table, +/obj/item/paper_bin/construction, +/obj/item/storage/crayons{ + pixel_y = -2; + pixel_x = -3 + }, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/greater) "nGA" = ( @@ -45691,16 +47184,6 @@ /obj/effect/spawner/random/armory/barrier_grenades, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory/upper) -"nGQ" = ( -/obj/machinery/flasher/directional/north{ - id = "Cell 3" - }, -/obj/structure/bed{ - dir = 1; - pixel_x = -2 - }, -/turf/open/floor/iron/smooth, -/area/station/security/brig) "nGU" = ( /obj/structure/closet/secure_closet/security/sec, /obj/machinery/airalarm/directional/north, @@ -45708,10 +47191,23 @@ dir = 1 }, /area/station/security/lockers) -"nHc" = ( -/obj/structure/bodycontainer/morgue, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"nGY" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Mining B-2 Hallway"; + network = list("ss13", "mine") + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/mine/eva/lower) "nHe" = ( /obj/structure/closet/radiation, /obj/effect/turf_decal/tile/yellow{ @@ -45719,12 +47215,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"nHf" = ( -/obj/machinery/vending/cigarette, -/obj/machinery/light/small/directional/south, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/dark, -/area/station/science/breakroom) "nHj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45749,18 +47239,12 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"nHX" = ( -/obj/structure/sign/departments/psychology/directional/south, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/machinery/camera{ - c_tag = "Medbay South"; - dir = 5; - network = list("ss13","medbay") +"nIb" = ( +/obj/structure/chair{ + dir = 1 }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "nId" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45768,13 +47252,6 @@ /obj/structure/barricade/wooden, /turf/open/floor/eighties/red, /area/station/security/prison/safe) -"nIe" = ( -/obj/item/stack/cable_coil, -/obj/structure/fence/corner{ - dir = 1 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "nIl" = ( /obj/structure/chair/stool/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -45782,26 +47259,13 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"nIt" = ( -/obj/structure/stairs/west, -/turf/open/floor/iron/white, -/area/station/science/ordnance) "nIx" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/starboard/aft) -"nIY" = ( -/obj/effect/spawner/random/structure/girder, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "nJd" = ( /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"nJm" = ( -/obj/structure/fluff/fokoff_sign, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "nJo" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -45827,15 +47291,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/iron, /area/station/engineering/storage) -"nJq" = ( -/obj/structure/closet/athletic_mixed, -/obj/effect/landmark/start/hangover/closet, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/iron, -/area/station/commons/fitness) "nJy" = ( /obj/structure/chair/pew{ dir = 1 @@ -45844,6 +47299,18 @@ dir = 8 }, /area/station/service/chapel) +"nJH" = ( +/obj/machinery/door/airlock{ + id_tag = "Dorm2"; + name = "Dorm 2" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) "nJI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/effect/turf_decal/siding/wideplating/corner{ @@ -45852,6 +47319,20 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"nJK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"nJL" = ( +/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/border_only, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/mine/eva) "nJT" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -45864,28 +47345,20 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/checkpoint/science) -"nJZ" = ( -/obj/machinery/light/small/red/directional/south, -/obj/structure/chair{ - dir = 1 - }, -/obj/item/radio/intercom/chapel/directional/east, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "nKa" = ( /turf/closed/wall, /area/station/security/checkpoint/medical) -"nKj" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/rnd/production/circuit_imprinter, -/obj/machinery/requests_console/directional/east{ - department = "Engineering"; - name = "Engineering Requests Console" +"nKb" = ( +/obj/machinery/door/window/left/directional/west{ + name = "Secure Art Exhibition"; + req_access = list("library") }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/mapping_helpers/requests_console/assistance, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) +/obj/effect/spawner/random/structure/table_fancy, +/obj/structure/sign/painting/library_secure{ + pixel_x = 32 + }, +/turf/open/floor/wood, +/area/station/service/library) "nKk" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 @@ -45905,6 +47378,12 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/cargo/lobby) +"nKw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "nKK" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 10 @@ -45962,41 +47441,31 @@ /obj/structure/mirror/broken/directional/north, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"nLa" = ( -/obj/structure/flora/bush/lavendergrass/style_random, -/obj/structure/flora/bush/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) +"nKY" = ( +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "nLb" = ( /obj/machinery/blackbox_recorder, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"nLd" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "nLe" = ( /obj/effect/turf_decal/tile/dark/half/contrasted, /obj/machinery/light/floor, /turf/open/floor/iron/white, /area/station/medical/virology) -"nLs" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 +"nLB" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = 32 }, -/obj/structure/sign/poster/official/random/directional/north, -/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) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"nLE" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/sign/warning/no_smoking/circle/directional/north, +/turf/open/floor/iron/white/side{ + dir = 8 + }, +/area/station/maintenance/port/fore) "nLH" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, @@ -46038,6 +47507,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"nMv" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{ + name = "Burn Chamber Interior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "nMw" = ( /obj/structure/chair{ dir = 1 @@ -46056,30 +47533,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) -"nMC" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/item/radio/intercom/directional/north, -/obj/structure/rack, -/obj/item/pickaxe, -/obj/item/toy/figure/chef, -/obj/machinery/camera/directional/north{ - c_tag = "Service - Coldroom" - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) -"nMD" = ( -/obj/structure/fence/door{ - dir = 4 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "nME" = ( /obj/item/clothing/head/utility/hardhat, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "nMH" = ( @@ -46107,6 +47565,13 @@ /obj/effect/gibspawner/human/bodypartless, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"nMT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/station/service/library) "nNe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -46116,6 +47581,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"nNg" = ( +/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); + minimum_survivable_temperature = 150; + name = "Snowy Pete" + }, +/turf/open/misc/ice/coldroom, +/area/station/service/kitchen/coldroom) +"nNi" = ( +/obj/machinery/airalarm/directional/north, +/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) "nNn" = ( /turf/closed/wall, /area/station/security/prison/rec) @@ -46141,17 +47621,13 @@ /obj/item/clothing/glasses/meson/engine, /turf/open/floor/iron/dark, /area/station/engineering/storage) -"nNy" = ( -/obj/structure/sign/warning/xeno_mining{ - pixel_x = 29 +"nNu" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 }, -/obj/structure/rack, -/obj/item/pickaxe, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/mine/mechbay) +/obj/structure/railing/corner, +/turf/open/floor/iron, +/area/station/cargo/storage) "nNB" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 9 @@ -46159,15 +47635,6 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/iron/dark, /area/station/medical/virology) -"nNI" = ( -/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/plating, -/area/station/maintenance/starboard/fore) "nNM" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -46176,21 +47643,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"nNU" = ( -/obj/machinery/chem_dispenser, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/yellow/full, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/pharmacy) -"nNV" = ( -/obj/structure/railing{ - dir = 9 +"nNZ" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2" }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "Supply Dock Loading Door"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) +"nOa" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) "nOb" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock" @@ -46200,11 +47672,25 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) -"nOk" = ( -/obj/item/chair/wood, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) +"nOh" = ( +/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/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/cryo) +"nOj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/noticeboard/staff{ + pixel_y = 36 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "nOl" = ( /obj/structure/bed, /obj/machinery/airalarm/directional/north, @@ -46219,11 +47705,6 @@ /obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) -"nOo" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "nOx" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -46244,17 +47725,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) -"nOI" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/obj/structure/chair/office{ - dir = 8 - }, -/obj/machinery/status_display/ai/directional/east, -/turf/open/floor/iron, -/area/station/commons/fitness) "nOQ" = ( /obj/machinery/suit_storage_unit/security, /obj/machinery/camera/directional/north{ @@ -46269,6 +47739,54 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"nPc" = ( +/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/service/kitchen/coldroom) +"nPo" = ( +/obj/structure/rack, +/obj/item/clothing/suit/hooded/wintercoat/science{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/clothing/shoes/winterboots{ + pixel_x = -7; + pixel_y = -1 + }, +/obj/item/biopsy_tool{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/item/gps/mining{ + pixel_x = -7; + pixel_y = -3 + }, +/obj/item/knife/combat/survival{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/machinery/light/directional/east, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) +"nPs" = ( +/obj/structure/bodycontainer/morgue, +/obj/machinery/camera/directional/south{ + c_tag = "Morgue South"; + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) "nPt" = ( /obj/structure/chair/stool/directional/east, /obj/effect/mapping_helpers/burnt_floor, @@ -46280,12 +47798,17 @@ /turf/open/floor/plating, /area/station/maintenance/aft/lesser) "nPS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/work) "nQd" = ( /obj/effect/turf_decal/trimline/green/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46305,30 +47828,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"nQm" = ( -/obj/machinery/newscaster/directional/east, -/obj/machinery/light/directional/east, -/obj/machinery/camera/directional/east{ - c_tag = "Service - Hall" - }, -/obj/machinery/disposal/bin/tagger, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) -"nQq" = ( -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stock_parts/power_store/cell/high{ - pixel_y = 6 - }, -/obj/structure/table/glass, -/turf/open/floor/iron/white/side{ - dir = 9 - }, -/area/station/science/lab) +"nQj" = ( +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) +"nQr" = ( +/obj/structure/sign/warning/docking/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "nQu" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -46351,6 +47859,13 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) +"nQL" = ( +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "nQO" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=AIW"; @@ -46415,6 +47930,17 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/security/brig/upper) +"nRn" = ( +/obj/machinery/door/window/left/directional/south{ + req_access = list("kitchen"); + name = "The Ice Box" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "nRq" = ( /obj/structure/closet/crate, /obj/effect/spawner/random/bureaucracy/birthday_wrap, @@ -46441,37 +47967,33 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/lesser) -"nRx" = ( -/obj/machinery/washing_machine, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 +"nRE" = ( +/obj/machinery/door/airlock/freezer{ + desc = "The freezer where the chef keeps all the stuff that needs to be kept cold. Ice cold."; + name = "The Ice Box" }, -/obj/structure/sign/poster/official/nanotrasen_logo/directional/east, -/turf/open/floor/iron, -/area/station/commons/dorms/laundry) -"nRy" = ( -/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); - minimum_survivable_temperature = 150; - name = "Snowy Pete" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/misc/ice/coldroom, -/area/station/service/kitchen/coldroom) -"nRO" = ( -/obj/structure/cable/multilayer/multiz, -/obj/structure/sign/poster/contraband/random/directional/north, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/structure/cable, /turf/open/floor/plating, -/area/station/security/prison/safe) +/area/station/service/kitchen/coldroom) "nRV" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/wood, +/area/station/service/library) +"nRW" = ( +/obj/effect/turf_decal/siding/white/end{ + dir = 4 }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_y = 6 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "nRX" = ( /turf/open/floor/iron/white/side{ dir = 10 @@ -46554,14 +48076,11 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"nSX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/small/broken/directional/north, +"nSU" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, -/area/station/maintenance/fore) +/area/station/maintenance/starboard/aft) "nTp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -46569,18 +48088,6 @@ /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/textured_large, /area/station/security/brig/entrance) -"nTA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/cobweb, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "nTK" = ( /obj/structure/table/glass, /obj/machinery/barsign{ @@ -46616,14 +48123,6 @@ "nTO" = ( /turf/closed/wall/r_wall, /area/mine/laborcamp/security) -"nTP" = ( -/obj/item/food/grown/potato{ - pixel_y = 4 - }, -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "nTV" = ( /obj/structure/table/reinforced, /obj/item/screwdriver{ @@ -46635,6 +48134,13 @@ /obj/effect/turf_decal/tile/red/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) +"nTX" = ( +/obj/structure/flora/grass/both/style_random, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "nUg" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 @@ -46659,16 +48165,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_half, /area/station/ai_monitored/command/storage/eva) -"nUI" = ( -/obj/machinery/computer/records/security, -/obj/machinery/light_switch/directional/north{ - pixel_x = -16 - }, -/obj/machinery/computer/security/telescreen/normal/directional/north, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/station/security/brig/entrance) "nUJ" = ( /obj/machinery/flasher/directional/east{ id = "brigentry" @@ -46708,6 +48204,10 @@ }, /turf/open/floor/carpet, /area/station/service/library) +"nVx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured, +/area/station/service/hydroponics) "nVB" = ( /obj/effect/turf_decal/trimline/dark/warning{ dir = 4 @@ -46718,30 +48218,23 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"nVO" = ( -/obj/structure/table, +"nVJ" = ( /obj/structure/disposalpipe/segment{ - dir = 5 + dir = 4 }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) +/obj/structure/cable, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "nVR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria{ dir = 5 }, /area/station/maintenance/port/aft) -"nVZ" = ( -/obj/machinery/door/airlock/command{ - name = "Captain's Office" - }, -/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/effect/mapping_helpers/airlock/access/all/command/captain, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) +"nWe" = ( +/obj/machinery/light/small/directional/north, +/turf/open/openspace, +/area/station/science/research) "nWf" = ( /obj/structure/chair{ dir = 1 @@ -46759,6 +48252,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"nWG" = ( +/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/plating, +/area/station/maintenance/starboard/fore) "nWH" = ( /turf/closed/wall, /area/station/maintenance/department/cargo) @@ -46767,6 +48268,14 @@ /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"nWM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/mining_weather_monitor/directional/north, +/turf/open/floor/iron/dark/smooth_large, +/area/station/hallway/secondary/entry) "nXb" = ( /turf/closed/wall, /area/icemoon/surface/outdoors/nospawn) @@ -46789,20 +48298,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"nXp" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/table/glass, -/obj/item/storage/box/monkeycubes, -/turf/open/floor/iron, -/area/station/science/xenobiology) -"nXs" = ( -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/structure/cable, -/obj/machinery/door/airlock/maintenance{ - name = "Kitchen Maintenance" - }, -/turf/open/floor/plating, -/area/station/service/kitchen) "nXH" = ( /obj/structure/bodycontainer/crematorium{ id = "crematoriumChapel" @@ -46830,6 +48325,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/prison/visit) +"nYm" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "nYn" = ( /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/carpet, @@ -46840,25 +48342,10 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"nYN" = ( -/turf/open/floor/wood, -/area/station/commons/lounge) -"nYR" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 9 - }, -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/reagent_containers/cup/watering_can, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"nYY" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"nYz" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "nYZ" = ( /obj/item/storage/bag/trash, /turf/open/floor/plating, @@ -46893,14 +48380,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/checkpoint/supply) -"nZi" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/work) "nZA" = ( /obj/structure/table, /obj/item/stock_parts/subspace/amplifier, @@ -46908,10 +48387,30 @@ /obj/item/stock_parts/subspace/amplifier, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"nZC" = ( +/obj/effect/turf_decal/stripes/corner{ + 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, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron, +/area/mine/laborcamp) "nZH" = ( /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/engineering/atmos/storage) +"nZN" = ( +/obj/structure/rack, +/obj/item/crowbar/red, +/obj/item/wrench, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/maint) "nZU" = ( /obj/machinery/door/airlock/maintenance{ name = "Firefighting Equipment" @@ -46931,38 +48430,14 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"oac" = ( -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/north{ - id = "botany_apiary"; - name = "Bee Protection Shutters" - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"oas" = ( -/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/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ +"oad" = ( +/obj/structure/railing{ dir = 4 }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 +/turf/open/floor/iron/stairs/medium{ + dir = 1 }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) +/area/station/security/prison) "oaG" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 9 @@ -46981,18 +48456,6 @@ }, /turf/open/floor/iron/white/corner, /area/mine/living_quarters) -"oaJ" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/machinery/requests_console/auto_name/directional/east, -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 5 - }, -/obj/effect/mapping_helpers/requests_console/supplies, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "oaP" = ( /obj/machinery/door/airlock/research{ name = "Crater Observation Room" @@ -47002,6 +48465,12 @@ "oaQ" = ( /obj/structure/transit_tube, /obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "oaR" = ( @@ -47018,6 +48487,25 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"obb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"obe" = ( +/obj/structure/fence/corner{ + dir = 4 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "obj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -47025,15 +48513,35 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"obr" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "surgery"; - name = "Surgery Shutter" +"obl" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Chapel Electrical Maintenace Upper" + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) +"obo" = ( +/obj/machinery/light_switch/directional/north{ + pixel_x = -7 + }, +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/high/empty, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) +"obt" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/structure/sign/warning/no_smoking/circle/directional/east, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/station/medical/surgery/aft) +/area/station/maintenance/starboard/fore) "obu" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -47048,6 +48556,18 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron, /area/station/security/prison/work) +"obF" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio1"; + name = "Xenobio Pen 1 Blast Door" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/science/xenobiology) "obG" = ( /obj/effect/turf_decal/trimline/blue/corner{ dir = 8 @@ -47069,14 +48589,29 @@ dir = 1 }, /area/station/engineering/atmos/storage/gas) -"obT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, +"obQ" = ( +/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, +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) +"obU" = ( +/obj/machinery/light_switch/directional/north{ + pixel_x = 6 + }, +/obj/machinery/button/door/directional/north{ + id = "botany_chasm_and_wolf_shutters"; + name = "Exterior Shutters"; + pixel_x = -4 + }, +/turf/open/floor/iron/dark/smooth_half, /area/station/service/hydroponics) "obZ" = ( /obj/machinery/camera/directional/east{ @@ -47085,16 +48620,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"ocd" = ( -/obj/machinery/igniter/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) -"ocp" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "ocu" = ( /obj/effect/turf_decal/bot_white, /obj/structure/cable, @@ -47107,6 +48632,31 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"ocJ" = ( +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/item/storage/box/syringes{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"ocS" = ( +/obj/structure/fluff/tram_rail{ + pixel_y = 17 + }, +/obj/structure/fluff/tram_rail, +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy{ + name = "landing marker" + }, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) "ocY" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random/engineering/tracking_beacon, @@ -47123,33 +48673,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/xenobiology) -"odf" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/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) -"odi" = ( -/obj/item/toy/snowball{ - pixel_x = 5; - pixel_y = -1 - }, -/obj/structure/sign/nanotrasen{ - pixel_y = -32 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"odm" = ( -/obj/structure/stairs/east, -/turf/open/floor/iron/white, -/area/station/science/ordnance) "odw" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, @@ -47169,21 +48692,25 @@ /obj/item/radio/intercom/prison/directional/east, /turf/open/floor/carpet/red, /area/station/security/prison/work) +"odF" = ( +/obj/structure/railing, +/turf/open/openspace, +/area/station/service/kitchen/coldroom) "odN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"odR" = ( +/turf/open/floor/iron/white/corner{ + dir = 4 + }, +/area/station/science/research) "odW" = ( /obj/structure/railing{ dir = 8 }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"odZ" = ( -/obj/machinery/door/airlock/hatch, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "oed" = ( /obj/machinery/door/window/right/directional/east{ name = "Robotics Surgery"; @@ -47205,25 +48732,10 @@ "oex" = ( /turf/open/openspace/icemoon/keep_below, /area/station/maintenance/department/medical/morgue) -"oeB" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/plastic, -/area/station/commons/dorms/laundry) "oeM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"oeP" = ( -/obj/structure/table, -/obj/item/food/chococoin, -/obj/structure/sign/warning/gas_mask{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals."; - pixel_x = 30 - }, -/turf/open/floor/iron/smooth, -/area/mine/eva) "oeT" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -47241,26 +48753,28 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) -"ofm" = ( -/obj/structure/bodycontainer/morgue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"ofr" = ( -/obj/structure/table/glass, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/paper_bin{ - pixel_y = 4 +"ofc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/visible, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"ofi" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 }, -/obj/item/folder/white{ - pixel_x = -4; - pixel_y = 4 +/obj/machinery/bluespace_vendor/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"ofl" = ( +/obj/structure/chair{ + desc = "Aw geez, I wonder what the chef's cooking up in there!"; + dir = 1; + name = "The Peanut's Gallery" }, -/obj/item/pen{ - pixel_x = -4 +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, /turf/open/floor/iron, -/area/station/science/xenobiology) +/area/station/hallway/primary/starboard) "ofz" = ( /obj/structure/ore_box, /obj/effect/turf_decal/bot, @@ -47290,6 +48804,25 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"ofR" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/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, +/area/station/service/hydroponics) "ogd" = ( /obj/structure/chair/office{ dir = 8 @@ -47304,8 +48837,17 @@ /turf/open/floor/iron, /area/station/science/xenobiology) "ogu" = ( -/turf/open/floor/iron/dark/smooth_half, -/area/station/service/hydroponics) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/corner{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plastic, +/area/station/commons/dorms/laundry) "ogy" = ( /obj/machinery/door/airlock/maintenance{ name = "EVA Maintenance" @@ -47341,11 +48883,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"ohk" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +"ohb" = ( +/obj/machinery/medical_kiosk, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/sign/departments/medbay/alt/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "ohp" = ( /turf/open/floor/glass, /area/station/maintenance/department/medical/central) @@ -47365,15 +48910,23 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"ohP" = ( -/obj/structure/table/wood, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/box/white/corners{ - dir = 4 +"ohI" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 }, -/turf/open/floor/iron/dark, -/area/station/service/bar) +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) +"ohO" = ( +/obj/structure/fluff/tram_rail, +/obj/structure/lattice/catwalk, +/obj/structure/fluff/tram_rail{ + pixel_y = 17 + }, +/obj/structure/marker_beacon/burgundy{ + name = "landing marker" + }, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) "ohS" = ( /obj/structure/railing{ dir = 8 @@ -47387,6 +48940,14 @@ }, /turf/open/openspace, /area/station/security/prison) +"ohU" = ( +/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/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "oic" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47423,19 +48984,6 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) -"oir" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio10"; - name = "Xenobio Pen 10 Blast Door" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) "oiy" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/service) @@ -47443,16 +48991,10 @@ /obj/structure/urinal/directional/north, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"oiB" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Chemistry Lab Utilities" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/turf/open/floor/iron/smooth, -/area/station/maintenance/department/medical/central) +"oiC" = ( +/obj/effect/spawner/random/engineering/canister, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "oiD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47468,20 +49010,31 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"oiK" = ( -/obj/machinery/door/airlock{ - id_tag = "commissarydoor"; - name = "Commissary" +"oiI" = ( +/obj/effect/turf_decal/stripes/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/junction/flip{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/commons/vacant_room/commissary) +/obj/item/kirbyplants/random, +/obj/item/radio/intercom/directional/south, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) +"oiM" = ( +/obj/structure/dresser, +/obj/structure/mirror/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Backstage" + }, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "oiO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47497,22 +49050,27 @@ /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"oiW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"oiU" = ( +/obj/structure/closet/crate, +/obj/item/food/canned/beans, +/obj/item/food/canned/beans, +/obj/item/food/canned/beans, +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 7; + pixel_y = 6 }, -/obj/machinery/camera{ - c_tag = "Medbay Psychology"; - dir = 6; - network = list("ss13","medbay"); - pixel_y = -22 +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 7; + pixel_y = 6 }, -/obj/machinery/newscaster/directional/east, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 +/obj/item/reagent_containers/cup/glass/waterbottle{ + pixel_x = 7; + pixel_y = 6 }, -/turf/open/floor/iron/white, -/area/station/medical/psychology) +/mob/living/basic/mouse/white, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "oiX" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -47522,6 +49080,16 @@ /obj/machinery/pdapainter/medbay, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"oiZ" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/vending/wardrobe/science_wardrobe, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) +"oje" = ( +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "ojf" = ( /obj/structure/lattice/catwalk, /turf/open/lava/plasma/ice_moon, @@ -47548,17 +49116,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"ojy" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ojF" = ( /obj/machinery/rnd/production/protolathe/department/science, /turf/open/floor/iron/checker, /area/station/science/lab) -"ojP" = ( -/obj/machinery/door/firedoor/heavy, -/obj/structure/sign/warning/firing_range/directional/west, -/turf/open/floor/iron/white/corner{ - dir = 4 - }, -/area/station/science/research) "ojW" = ( /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -47571,23 +49141,22 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central) -"okf" = ( -/obj/structure/bodycontainer/morgue, -/obj/machinery/camera{ - c_tag = "Morgue South"; - dir = 5; - network = list("ss13","medbay") +"okc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "mining-aux-mechbay-external" }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"okk" = ( -/obj/structure/cable, -/obj/structure/sign/departments/aisat/directional/east, -/obj/effect/turf_decal/tile/blue, -/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/engineering/storage_shared) +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Mining Mech Bay External Airlock"; + opacity = 0 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/turf/open/floor/iron/large, +/area/mine/mechbay) "okl" = ( /obj/structure/chair{ dir = 8 @@ -47616,6 +49185,11 @@ }, /turf/open/floor/iron, /area/station/security/warden) +"okz" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/hallway/primary/central/fore) "okG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -47640,22 +49214,6 @@ "olf" = ( /turf/open/floor/carpet, /area/station/commons/dorms) -"olt" = ( -/obj/structure/chair/sofa/bench/right{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) -"olH" = ( -/obj/machinery/door/airlock/command{ - name = "Captain's Quarters" - }, -/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/carpet, -/area/station/command/heads_quarters/captain) "olI" = ( /obj/structure/table/glass, /obj/item/book/manual/wiki/medicine{ @@ -47669,10 +49227,14 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) -"olO" = ( -/obj/structure/fence, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored/graveyard) +"olM" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/lamp{ + start_on = 0 + }, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) "olQ" = ( /obj/structure/sign/nanotrasen{ pixel_y = 32 @@ -47680,6 +49242,16 @@ /obj/machinery/light/dim/directional/north, /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) +"olR" = ( +/obj/structure/rack, +/obj/item/wrench, +/obj/item/crowbar, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/lesser) "olV" = ( /obj/machinery/light/small/directional/west, /obj/structure/cable, @@ -47719,6 +49291,11 @@ "omk" = ( /turf/open/floor/glass/reinforced, /area/station/security/office) +"omo" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/cryo) "omG" = ( /obj/structure/table, /obj/item/flashlight/lamp, @@ -47748,15 +49325,12 @@ }, /turf/open/floor/plating, /area/station/security/prison/safe) -"omS" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Kitchen Maintenance" - }, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) +"omT" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high/empty, +/turf/open/floor/iron/dark, +/area/station/engineering/storage) "ond" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47803,21 +49377,38 @@ }, /turf/open/floor/plating, /area/station/security/courtroom) +"onP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "onQ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"onV" = ( -/obj/machinery/door/airlock/research{ - name = "Cytology Lab" +"onT" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/science/general, -/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/smooth_large, -/area/station/science/ordnance) +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ooa" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, @@ -47840,23 +49431,9 @@ "ooo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/processor/slime, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, /area/station/science/xenobiology) -"oor" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Arrivals Dock" - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/entry) "oot" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 4 @@ -47866,6 +49443,26 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"ooy" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) +"ooG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "ooL" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 4 @@ -47889,6 +49486,19 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"ooV" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "ooW" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/hollow/reinforced/middle{ @@ -47916,6 +49526,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/upper) +"opt" = ( +/obj/structure/closet/athletic_mixed, +/obj/effect/landmark/start/hangover/closet, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) "opu" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/structure/disposalpipe/segment{ @@ -47923,14 +49542,20 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"opw" = ( -/obj/machinery/computer/pod/old/mass_driver_controller/chapelgun{ - pixel_x = 24 +"opy" = ( +/obj/effect/turf_decal/siding/wood, +/obj/item/kirbyplants/random/fullysynthetic{ + pixel_x = 10; + pixel_y = 19 }, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Mining Break Room"; + network = list("ss13", "mine") }, -/area/station/service/chapel) +/turf/open/floor/stone, +/area/mine/eva/lower) "opB" = ( /obj/structure/table, /obj/item/raw_anomaly_core/random{ @@ -47945,24 +49570,13 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) -"opD" = ( -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/iron/white, -/area/station/science/ordnance) -"opH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 +"opE" = ( +/obj/structure/railing{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/starboard) +/obj/structure/lattice/catwalk, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) "opI" = ( /obj/machinery/microwave{ pixel_y = 7 @@ -47976,6 +49590,9 @@ }, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"opP" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "opS" = ( /obj/machinery/vending/wardrobe/sec_wardrobe, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -47984,6 +49601,12 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) +"opU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing/corner/end/flip, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "oqb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/power/apc/auto_name/directional/west, @@ -47997,22 +49620,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer1, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) -"oqd" = ( -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/structure/table, -/obj/machinery/door_buttons/access_button, -/obj/item/clothing/mask/gas{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "oqg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -48020,15 +49627,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) -"oqj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/thinplating/corner{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plastic, -/area/station/commons/dorms/laundry) "oqz" = ( /obj/effect/turf_decal/tile/green{ dir = 4 @@ -48036,13 +49634,6 @@ /obj/effect/turf_decal/tile/dark_green, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"oqB" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/box/red/corners{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "oqC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48053,6 +49644,16 @@ /obj/effect/landmark/start/station_engineer, /turf/open/floor/iron, /area/station/engineering/main) +"oqE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock/maintenance{ + name = "Kitchen Maintenance" + }, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) "oqJ" = ( /obj/structure/sign/warning/docking/directional/north, /obj/structure/flora/grass/green/style_random, @@ -48070,6 +49671,9 @@ }, /turf/open/openspace, /area/station/science/xenobiology) +"oqN" = ( +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) "oqT" = ( /obj/machinery/airalarm/directional/south, /obj/effect/decal/cleanable/dirt, @@ -48080,23 +49684,10 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron/white, /area/station/medical/break_room) -"ork" = ( -/obj/structure/fence/door{ - dir = 4 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) -"oro" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/railing/corner, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/ordnance/office) +"oqY" = ( +/obj/effect/spawner/random/structure/closet_private, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "orq" = ( /obj/machinery/light/small/directional/west, /obj/machinery/button/door/directional/south{ @@ -48112,12 +49703,19 @@ /obj/machinery/recharge_station, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"oru" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 +"ort" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/firedoor{ + dir = 8 }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) "orv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -48154,28 +49752,12 @@ dir = 4 }, /area/mine/living_quarters) -"orU" = ( -/obj/machinery/vending/coffee, -/obj/structure/sign/poster/random/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "orV" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/stripes/line, /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"orZ" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/obj/item/radio/intercom/directional/east, -/obj/machinery/camera/directional/north{ - c_tag = "Service - Atrium" - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/wood/large, -/area/station/service/bar/atrium) "osd" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -48220,10 +49802,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"osN" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/maintenance/fore) "osO" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -48238,8 +49816,17 @@ /obj/structure/closet/emcloset{ anchored = 1 }, +/obj/structure/sign/warning/cold_temp/directional/south, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"otf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/stairs/medium, +/area/station/commons/dorms/laundry) "ots" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/hollow/reinforced/middle, @@ -48278,6 +49865,25 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"otM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/cc64k_ad/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/port/fore) +"otW" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sink/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "oua" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48304,6 +49910,18 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/treatment_center) +"ouq" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Mining B-1 Crater Observatory Access"; + network = list("ss13", "mine") + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/mine/living_quarters) "ous" = ( /obj/machinery/door/airlock/security/glass{ name = "N2O Storage" @@ -48316,12 +49934,34 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) +"ouK" = ( +/obj/machinery/space_heater, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore/lesser) "ouP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"ouU" = ( +/obj/machinery/door/airlock/external{ + name = "External Access"; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) +"ouW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/musician/piano/random_piano, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) "ouX" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -48346,11 +49986,35 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"ovx" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/requests_console/directional/west{ + department = "Head of Personnel's Desk"; + name = "Head of Personnel's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "ovy" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"ovz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants/random/dead, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) +"ovB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "ovP" = ( /turf/open/genturf/orange, /area/icemoon/underground/unexplored/no_rivers) @@ -48365,11 +50029,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/lockers) -"ovZ" = ( -/obj/structure/table/wood, -/obj/item/paper/crumpled, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "owf" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/decal/cleanable/dirt, @@ -48406,12 +50065,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"oxe" = ( -/obj/machinery/computer/cargo/request, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/machinery/incident_display/bridge/directional/north, -/turf/open/floor/iron, -/area/station/command/bridge) +"owK" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "oxh" = ( /obj/machinery/light/directional/south, /obj/effect/decal/cleanable/dirt, @@ -48437,22 +50100,16 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"oxN" = ( -/obj/machinery/light_switch/directional/north{ - pixel_x = -7 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "oxO" = ( /turf/open/floor/plating, /area/station/maintenance/aft/lesser) "oxR" = ( /obj/structure/transit_tube/crossing/horizontal, /obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "oxU" = ( @@ -48480,6 +50137,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/meeting_room) +"oyd" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "oyj" = ( /obj/structure/table, /obj/item/storage/box, @@ -48552,6 +50218,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/mechbay) +"oyM" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) "oyW" = ( /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat/hallway) @@ -48562,12 +50235,30 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"oyY" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "ozb" = ( /obj/structure/table/reinforced, /obj/item/folder/white, /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"ozk" = ( +/obj/machinery/door/airlock{ + name = "Unisex Showers" + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/textured, +/area/station/commons/toilet) "ozo" = ( /obj/effect/landmark/carpspawn, /turf/open/misc/asteroid/snow/icemoon, @@ -48578,23 +50269,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"ozx" = ( -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/structure/minecart_rail{ - dir = 4 - }, -/obj/item/radio/intercom/directional/south{ - frequency = 1453; - name = "Kitchen Intercom" - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "ozA" = ( /obj/structure/closet/secure_closet/research_director, /obj/effect/turf_decal/stripes/line{ @@ -48614,23 +50288,13 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/upper) "ozH" = ( -/obj/machinery/button/door/directional/east{ - id = "commissarydoor"; - name = "Commissary Door Lock"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/tile/brown/opposingcorners{ dir = 1 }, +/obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"ozM" = ( -/obj/structure/railing/corner, -/obj/structure/sign/warning/biohazard/directional/west, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "ozN" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 @@ -48638,6 +50302,23 @@ /obj/structure/bed/medical/emergency, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"ozU" = ( +/obj/structure/table/glass, +/obj/machinery/door/window/right/directional/north{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/desk_bell{ + pixel_x = 1; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ozV" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -48646,12 +50327,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"ozW" = ( -/obj/structure/railing/wooden_fence{ - dir = 10 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "ozX" = ( /obj/machinery/hydroponics/soil, /turf/open/floor/grass, @@ -48695,16 +50370,25 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"oAz" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = 32; - pixel_y = 32 +"oAm" = ( +/obj/structure/railing/wooden_fence{ + dir = 10 }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) +"oAs" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/item/analyzer, +/obj/item/pipe_dispenser, +/obj/item/flashlight, +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "oAA" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -48756,6 +50440,13 @@ }, /turf/open/floor/iron/dark, /area/mine/eva/lower) +"oBq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 9 + }, +/obj/machinery/meter, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "oBs" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Security"; @@ -48779,25 +50470,50 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) +"oBD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/cup/bucket{ + pixel_y = 10; + pixel_x = -4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "oBI" = ( /obj/machinery/light/floor, /turf/open/floor/carpet, /area/station/service/library) -"oBJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/railing{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "oBQ" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"oBV" = ( +/obj/item/paper/fluff/jobs/security/beepsky_mom, +/obj/machinery/light/small/dim/directional/east, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"oBZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"oCo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/mine/laborcamp) "oCs" = ( /obj/structure/table, /obj/item/radio/headset/headset_med{ @@ -48826,10 +50542,6 @@ /obj/item/stack/cable_coil/five, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"oCw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/fore) "oCA" = ( /obj/structure/closet/secure_closet/cytology, /obj/machinery/button/door/directional/north{ @@ -48846,6 +50558,11 @@ }, /turf/open/floor/glass/reinforced, /area/station/science/xenobiology) +"oCE" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "oCF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48867,6 +50584,17 @@ dir = 1 }, /area/station/security/prison) +"oDb" = ( +/obj/item/popsicle_stick{ + pixel_y = 1; + pixel_x = -9 + }, +/obj/item/popsicle_stick{ + pixel_y = 3; + pixel_x = -2 + }, +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "oDd" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -48896,14 +50624,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"oDk" = ( -/obj/structure/sign/warning/secure_area/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/grille/broken, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "oDn" = ( /obj/machinery/door/airlock/atmos/glass, /obj/structure/cable, @@ -48930,10 +50650,36 @@ }, /turf/open/floor/iron, /area/station/cargo/office) +"oDw" = ( +/obj/structure/table, +/obj/item/petri_dish{ + pixel_y = 15; + pixel_x = -5 + }, +/obj/item/petri_dish{ + pixel_y = 10; + pixel_x = 6 + }, +/obj/item/petri_dish{ + pixel_y = -6; + pixel_x = -1 + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "oDB" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/mine/laborcamp) +"oDD" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/effect/landmark/start/botanist, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "oDH" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/side{ @@ -48957,12 +50703,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) -"oEe" = ( -/obj/machinery/duct, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "oEj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -48987,20 +50727,71 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/engineering/main) -"oEC" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/starboard/fore) +"oEy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = 3; + pixel_y = -8 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = -3; + pixel_y = -8 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = -6 + }, +/obj/item/reagent_containers/dropper{ + pixel_y = -7 + }, +/obj/structure/sign/warning/no_smoking/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay Chemistry Lab - East"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/medical/chemistry) +"oEB" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"oED" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Xenobiology Test Chamber"; + network = list("ss13","test","rd","xeno") + }, +/obj/machinery/light/directional/west, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"oEE" = ( +/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, +/obj/structure/cable, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) "oEF" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/end, /turf/open/floor/iron/dark/textured, /area/station/medical/medbay/aft) -"oEH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "oEX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49008,6 +50799,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"oFc" = ( +/obj/structure/sign/warning/directional/north, +/turf/open/openspace/icemoon, +/area/icemoon/surface/outdoors/nospawn) "oFd" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 1 @@ -49017,29 +50812,14 @@ /area/station/science/ordnance) "oFl" = ( /obj/machinery/light/small/dim/directional/west, +/obj/structure/sign/warning/cold_temp/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"oFp" = ( -/obj/structure/sign/warning/docking/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/mine/laborcamp) "oFx" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"oFB" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/starboard) "oFI" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 6 @@ -49085,6 +50865,14 @@ }, /turf/open/floor/plating, /area/station/cargo/drone_bay) +"oGj" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/smartfridge/petri/preloaded, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "oGm" = ( /obj/machinery/power/solar_control{ dir = 1; @@ -49094,6 +50882,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"oGr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ + dir = 1; + name = "Can In" + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "oGs" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -49136,6 +50934,18 @@ dir = 8 }, /area/station/security/prison) +"oGC" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/service/hydroponics) "oGF" = ( /obj/structure/closet/crate/bin, /obj/effect/decal/cleanable/dirt, @@ -49147,6 +50957,33 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"oGJ" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Labor Camp External West"; + network = list("labor") + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/labor_camp) +"oGN" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"oGO" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/structure/bed/medical/anchored{ + dir = 8 + }, +/obj/item/bedsheet/medical{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/virology) "oGQ" = ( /obj/machinery/light_switch/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -49154,6 +50991,18 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) +"oHf" = ( +/obj/machinery/vending/autodrobe, +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood/parquet, +/area/station/service/theater) +"oHg" = ( +/obj/structure/fence/cut/large{ + dir = 4 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "oHh" = ( /obj/machinery/shower/directional/north, /obj/structure/window/reinforced/spawner/directional/west, @@ -49182,28 +51031,40 @@ "oHK" = ( /turf/closed/wall/r_wall, /area/station/science/lab) +"oHR" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "oHV" = ( /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/dark, /area/station/service/chapel) -"oHY" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/status_display/shuttle{ - pixel_x = -32; - shuttle_id = "arrival" - }, -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/stripes/corner{ +"oIj" = ( +/obj/effect/turf_decal/siding/wood/end{ dir = 1 }, -/turf/open/floor/iron/white/corner{ - dir = 1 +/mob/living/carbon/human/species/monkey/punpun, +/obj/item/kirbyplants/organic/plant11, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"oIt" = ( +/obj/structure/sign/departments/cargo/directional/west, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"oIv" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Labor Camp External North"; + network = list("labor") }, -/area/station/hallway/secondary/entry) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/labor_camp) "oIB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49246,17 +51107,6 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"oIQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/duct, -/obj/machinery/newscaster/directional/east, -/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/service/hydroponics) "oIR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/maintenance/four, @@ -49272,16 +51122,16 @@ /obj/structure/flora/bush/snow/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"oJD" = ( -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/unexplored/rivers/deep/shoreline) -"oJH" = ( -/obj/structure/marker_beacon/burgundy, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 5 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +"oJo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/start/mime, +/turf/open/floor/wood, +/area/station/commons/lounge) +"oJv" = ( +/obj/item/clothing/under/costume/skeleton, +/obj/item/clothing/head/helmet/skull, +/turf/open/floor/plating, +/area/station/medical/morgue) "oJP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/dark_green, @@ -49297,14 +51147,6 @@ dir = 1 }, /area/station/command/gateway) -"oKu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/warning/docking/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "oKv" = ( /obj/item/trash/popcorn, /turf/open/floor/plating, @@ -49333,6 +51175,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) +"oKX" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/landmark/start/cook, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/holopad, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "oKY" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/plating, @@ -49348,6 +51197,15 @@ "oLg" = ( /turf/open/floor/iron/white/corner, /area/station/science/research) +"oLi" = ( +/obj/effect/landmark/start/botanist, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) "oLj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49355,6 +51213,14 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/mine/laborcamp) +"oLm" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Garden" + }, +/obj/machinery/status_display/ai/directional/east, +/obj/structure/water_source/puddle, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "oLn" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -49428,11 +51294,6 @@ /obj/machinery/air_sensor/mix_tank, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) -"oLO" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/gas_mask, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "oMa" = ( /obj/structure/marker_beacon/burgundy, /obj/effect/turf_decal/weather/snow/corner{ @@ -49440,16 +51301,11 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"oMd" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external/glass{ - name = "Supply Door Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/plating, -/area/station/cargo/storage) +"oMj" = ( +/obj/structure/flora/bush/sunny/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "oMk" = ( /obj/machinery/camera/directional/south{ c_tag = "Cargo Bay South" @@ -49500,14 +51356,6 @@ "oMT" = ( /turf/open/floor/iron, /area/station/command/heads_quarters/rd) -"oNy" = ( -/obj/effect/spawner/random/structure/crate_abandoned, -/obj/machinery/light/small/directional/south, -/obj/machinery/camera/directional/south{ - c_tag = "Chapel Electrical Maintenace Upper" - }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) "oNA" = ( /obj/effect/turf_decal/bot, /turf/open/floor/plating/snowed/smoothed/icemoon, @@ -49527,19 +51375,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron, /area/station/science/explab) -"oNN" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/multi_tile/public/glass{ - name = "Atrium" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/navigate_destination/kitchen, -/turf/open/floor/iron/dark/textured_half, -/area/station/service/bar/atrium) "oNO" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/meter, @@ -49552,10 +51387,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/aft/lesser) -"oNW" = ( -/obj/structure/water_source/puddle, -/turf/open/floor/grass, -/area/station/security/prison/garden) "oNX" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, @@ -49564,6 +51395,30 @@ /obj/structure/sign/warning/fire/directional/north, /turf/open/floor/glass/reinforced, /area/station/science/ordnance/office) +"oOc" = ( +/obj/machinery/vending/wardrobe/gene_wardrobe, +/obj/structure/sign/departments/genetics/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/genetics) +"oOg" = ( +/obj/effect/spawner/random/medical/patient_stretcher, +/obj/effect/decal/cleanable/blood/gibs/torso, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/turf/open/floor/plating, +/area/station/security/prison/safe) +"oOh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast Door" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/xenobiology) "oOo" = ( /obj/structure/closet/firecloset, /obj/machinery/light/directional/west, @@ -49573,36 +51428,26 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/white, /area/station/science/research) -"oOt" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 +"oOw" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/fore) -"oOx" = ( -/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/airlock_controller/incinerator_atmos{ - pixel_x = -24 +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"oOB" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "oOD" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"oOO" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/secure_area/directional/south, -/turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat_interior) "oOP" = ( /obj/effect/turf_decal/siding/thinplating_new/corner, /obj/effect/turf_decal/stripes/line{ @@ -49620,63 +51465,56 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron/dark/side, /area/mine/eva) -"oPa" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/security/prison/work) -"oPd" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/bar) "oPl" = ( /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/courtroom) +"oPm" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "oPn" = ( /obj/structure/closet/secure_closet/injection, /obj/machinery/airalarm/directional/north, /obj/item/soap/nanotrasen, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"oPr" = ( -/obj/effect/landmark/start/bartender, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/iron/grimy, -/area/station/service/bar/backroom) -"oPv" = ( -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/aisat/service"; - name = "Service Bay Turret Control"; - pixel_x = 27; - req_access = list("minisat") +"oPt" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ + dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/area/station/science/ordnance) +"oPu" = ( +/obj/machinery/igniter/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"oPC" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) -"oPw" = ( -/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/plating, -/area/station/maintenance/starboard/fore) +/area/station/maintenance/starboard/lesser) "oPI" = ( /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) +"oPO" = ( +/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/plating, +/area/station/maintenance/starboard/fore) "oPP" = ( /obj/machinery/computer/scan_consolenew{ dir = 4 @@ -49687,6 +51525,9 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/lobby) +"oQc" = ( +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored/graveyard) "oQn" = ( /obj/structure/chair/sofa/corp/left{ dir = 8 @@ -49727,38 +51568,9 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"oQE" = ( -/obj/effect/turf_decal/trimline/neutral/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/warning{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/neutral/mid_joiner, -/obj/machinery/space_heater, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron/dark/smooth_corner{ - dir = 4 - }, -/area/station/ai_monitored/command/storage/eva) -"oQN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/security/courtroom) -"oQV" = ( -/mob/living/basic/pet/penguin/baby/permanent, -/obj/structure/flora/grass/brown/style_random, -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) "oQY" = ( /turf/open/floor/iron/white, /area/station/medical/virology) -"oRf" = ( -/obj/structure/flora/rock/pile/icy/style_random, -/turf/open/misc/asteroid/snow/coldroom, -/area/station/service/kitchen/coldroom) "oRk" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -49774,6 +51586,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/structure/table/glass, /obj/machinery/light/cold/directional/east, +/obj/machinery/firealarm/directional/east, /turf/open/floor/iron/white, /area/station/medical/cryo) "oRy" = ( @@ -49795,12 +51608,25 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) +"oRH" = ( +/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) "oRM" = ( /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) +"oRZ" = ( +/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, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/port) "oSa" = ( /obj/machinery/door/airlock/public/glass{ id_tag = "gulag3"; @@ -49818,10 +51644,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/textured, /area/station/security/office) -"oSw" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) "oSy" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -49833,20 +51655,17 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/lockers) -"oSD" = ( -/obj/structure/stairs/south, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison) -"oSQ" = ( -/obj/machinery/camera{ - c_tag = "Medbay Stasis Center North"; - network = list("ss13","medbay") +"oSK" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 +/obj/machinery/door/airlock/external/glass{ + name = "Supply Door Airlock"; + dir = 4 }, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, +/area/station/cargo/storage) "oSR" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -49904,33 +51723,22 @@ }, /turf/open/floor/engine, /area/station/science/explab) -"oTe" = ( -/obj/structure/table/wood, -/obj/item/trapdoor_remote/preloaded{ - pixel_x = -5; - pixel_y = 2 - }, -/obj/item/gavelblock{ - pixel_x = 5 +"oTi" = ( +/obj/structure/rack, +/obj/item/pickaxe, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/obj/effect/turf_decal/stripes/line, +/obj/structure/sign/warning/cold_temp/directional/east, +/turf/open/floor/plating, +/area/mine/mechbay) +"oTu" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 }, -/turf/open/floor/wood, -/area/station/security/courtroom) -"oTg" = ( -/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/hallway/primary/central) -"oTh" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm1"; - name = "Dorm 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/commons/dorms) "oTx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49960,6 +51768,39 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"oUb" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"oUh" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"oUp" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/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/diagonal, +/area/station/service/kitchen) +"oUw" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/machinery/camera/directional/east{ + c_tag = "Engineering Lobby" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "oUL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49988,20 +51829,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"oVn" = ( -/obj/effect/turf_decal/box/red/corners{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) -"oVr" = ( -/obj/structure/table/wood/poker, -/obj/effect/spawner/random/entertainment/coin{ - pixel_x = -7 - }, -/obj/effect/spawner/random/clothing/bowler_or_that, -/turf/open/floor/wood/large, -/area/station/commons/lounge) "oVt" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -50024,6 +51851,15 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"oVD" = ( +/obj/structure/rack, +/obj/item/storage/box/evidence, +/obj/item/storage/box/evidence, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/textured, +/area/station/security/brig) "oVG" = ( /obj/machinery/door/airlock/public/glass{ name = "Art Storage" @@ -50078,12 +51914,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"oWu" = ( -/obj/structure/closet/wardrobe/grey, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/calendar/directional/west, -/turf/open/floor/iron, -/area/station/commons/locker) "oWN" = ( /obj/machinery/requests_console/auto_name/directional/east, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -50095,17 +51925,19 @@ /obj/item/stack/sheet/iron/fifty, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"oWV" = ( -/obj/structure/sign/warning/cold_temp/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"oXc" = ( +"oXb" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - 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/effect/turf_decal/stripes/white/line{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/lobby) "oXd" = ( /obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt, @@ -50157,19 +51989,14 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/iron/freezer, /area/station/science/xenobiology) -"oXs" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/machinery/camera{ - c_tag = "Virology Hallway"; - dir = 10; - network = list("ss13","medbay") +"oXx" = ( +/obj/machinery/mass_driver/trash{ + dir = 1 }, -/obj/effect/landmark/start/hangover, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/virology) +/obj/effect/turf_decal/stripes/line, +/obj/structure/sign/warning/cold_temp/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "oXB" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -50179,6 +52006,18 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"oXE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"oXF" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/structure/rack, +/obj/item/pickaxe, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/turf/open/floor/plating, +/area/mine/mechbay) "oXJ" = ( /obj/machinery/newscaster/directional/north, /obj/item/kirbyplants/random, @@ -50190,19 +52029,6 @@ dir = 1 }, /area/station/hallway/primary/starboard) -"oXT" = ( -/obj/structure/table/glass, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 8 - }, -/obj/item/storage/box/syringes{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron, -/area/station/science/xenobiology) "oXX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50227,13 +52053,13 @@ /obj/machinery/microwave, /turf/open/floor/iron, /area/station/security/courtroom) -"oYm" = ( -/obj/structure/stairs/north, -/obj/structure/railing{ - dir = 4 +"oYn" = ( +/obj/machinery/newscaster/directional/west, +/obj/structure/table/glass, +/turf/open/floor/iron/cafeteria{ + dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/area/station/science/research) "oYu" = ( /obj/machinery/status_display/evac/directional/south, /obj/effect/turf_decal/tile/green, @@ -50242,44 +52068,35 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"oYw" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 +"oYD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/machinery/button/door/directional/east{ + id = "xenobio11"; + name = "Xenobio Pen 11 Blast DOors"; + req_access = list("xenobiology") }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"oYC" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "oYI" = ( /obj/effect/spawner/random/vending/colavend, /turf/open/floor/wood, /area/station/command/meeting_room) +"oYN" = ( +/obj/structure/table, +/obj/item/hand_tele{ + pixel_x = 3; + pixel_y = 13 + }, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron, +/area/station/command/teleporter) "oZd" = ( /obj/structure/fence/corner{ dir = 9 }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"oZk" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "botany_chasm_and_wolf_shutters" - }, -/turf/open/floor/plating, -/area/station/service/hydroponics) "oZn" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -50298,12 +52115,9 @@ dir = 4 }, /area/station/security/prison) -"oZD" = ( -/obj/machinery/door/window/left/directional/west{ - req_access = list("hydroponics"); - name = "Hydroponics Equipment" - }, -/turf/open/floor/iron/half, +"oZG" = ( +/obj/machinery/duct, +/turf/open/floor/iron/dark, /area/station/service/hydroponics) "oZL" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -50339,6 +52153,15 @@ dir = 1 }, /area/station/security/prison/safe) +"pau" = ( +/obj/structure/table/wood, +/obj/item/pai_card, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) +"paw" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) "paF" = ( /obj/structure/table, /obj/item/clothing/suit/hooded/wintercoat/science, @@ -50368,9 +52191,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) -"pba" = ( -/turf/open/floor/stone, -/area/station/service/bar/atrium) "pbk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50406,18 +52226,12 @@ /turf/open/floor/iron, /area/station/construction) "pbF" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ +/obj/structure/chair/sofa/right/brown, +/obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/obj/item/seeds/berry, -/obj/machinery/light/small/dim/directional/south, -/obj/machinery/hydroponics/soil, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) -"pbH" = ( -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron, -/area/station/science/ordnance/testlab) +/turf/open/floor/wood/large, +/area/station/commons/lounge) "pbI" = ( /obj/machinery/computer/records/security{ dir = 8 @@ -50431,8 +52245,19 @@ /area/station/security/office) "pbQ" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "rd_office_shutters"; + name = "Privacy Shutters" + }, /turf/open/floor/plating, /area/station/command/heads_quarters/rd) +"pbS" = ( +/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/starboard/fore) "pbW" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50440,6 +52265,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"pcb" = ( +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "pcc" = ( /obj/item/stack/spacecash/c10{ pixel_x = 4; @@ -50460,27 +52292,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"pcj" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Drone Bay" - }, -/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/turf_decal/siding/brown/corner{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) -"pco" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/structure/fence/cut/large{ - dir = 8 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "pcr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output{ dir = 8 @@ -50492,6 +52303,20 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos/storage/gas) +"pcx" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Dormitory" + }, +/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, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/commons/dorms) "pcB" = ( /obj/structure/chair/pew{ dir = 1 @@ -50519,6 +52344,22 @@ /obj/item/coin/silver, /turf/open/floor/iron, /area/station/commons/dorms) +"pcM" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance{ + name = "Kitchen Maintenance" + }, +/turf/open/floor/plating, +/area/station/service/kitchen) +"pcT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) "pdc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -50533,6 +52374,21 @@ "pdf" = ( /turf/open/floor/plating, /area/station/maintenance/port/greater) +"pdg" = ( +/obj/structure/table, +/obj/item/electronics/apc, +/obj/item/electronics/airlock, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating, +/area/station/engineering/storage/tech) +"pdm" = ( +/obj/machinery/chem_dispenser, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/yellow/full, +/obj/item/radio/intercom/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/pharmacy) "pdx" = ( /obj/item/kirbyplants/organic/plant10, /turf/open/floor/sepia, @@ -50548,15 +52404,23 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/textured, /area/station/security/execution/transfer) -"pdC" = ( -/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/bar{ +"pdB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"pdD" = ( +/obj/effect/spawner/random/entertainment/arcade{ dir = 4 }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron/cafeteria, +/area/station/hallway/secondary/exit/departure_lounge) "pdK" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron/dark/textured, @@ -50565,30 +52429,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/engine, /area/station/science/explab) -"pdR" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Cargo Bay Receiving Dock" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/computer/cargo{ - dir = 4 - }, -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor"; - name = "Loading Doors"; - pixel_y = -8; - req_access = list("cargo") - }, -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor2"; - name = "Loading Doors"; - pixel_y = 8; - req_access = list("cargo") - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "pdT" = ( /obj/structure/chair/sofa/corp/right{ dir = 8 @@ -50619,6 +52459,7 @@ /area/station/commons/dorms) "pec" = ( /obj/machinery/vending/cart, +/obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) "pee" = ( @@ -50633,6 +52474,12 @@ /obj/effect/mapping_helpers/airlock/access/all/science/research, /turf/open/floor/iron/dark, /area/station/science/explab) +"peq" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/departments/security/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "pez" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark/textured_edge{ @@ -50651,10 +52498,18 @@ dir = 4 }, /area/station/hallway/secondary/entry) +"peP" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "peV" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) +"peX" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "pfe" = ( /turf/closed/wall, /area/station/hallway/primary/fore) @@ -50663,43 +52518,30 @@ /obj/structure/grille/broken, /turf/open/openspace/icemoon/keep_below, /area/icemoon/underground/explored) -"pfn" = ( -/obj/structure/sign/poster/official/work_for_a_future/directional/north, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/prison/visit) "pfw" = ( /obj/structure/flora/grass/green/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"pfy" = ( -/obj/effect/turf_decal/stripes/line{ +"pfz" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/stairs/medium{ dir = 1 }, -/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ - dir = 8; - name = "Air Out" - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/area/station/medical/virology) "pfD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"pfJ" = ( -/obj/structure/sink/directional/east, -/obj/machinery/button/door/directional/west{ - id = "xenobio2"; - name = "Xenobio Pen 2 Blast Door"; - req_access = list("xenobiology") +"pfE" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/machinery/light/floor, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "pfO" = ( /obj/structure/chair/stool/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50711,6 +52553,15 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/maintenance/department/electrical) +"pgc" = ( +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) +"pgg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/iv_drip, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "pgo" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 10 @@ -50727,11 +52578,19 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, /area/station/cargo/bitrunning/den) -"pgv" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/bar) +"pgt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/hallway/secondary/entry) "pgw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/requests_console/directional/south{ @@ -50793,27 +52652,19 @@ }, /turf/open/floor/iron/white, /area/station/medical/break_room) -"phl" = ( -/obj/structure/minecart_rail{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/weather/snow/corner, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/icemoon/underground/explored) "phr" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /obj/machinery/door/airlock/hydroponics/glass{ - name = "Apiary" + name = "Hydroponics" }, -/turf/open/floor/iron/dark/textured_half{ +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ dir = 1 }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/dark/textured_half, /area/station/service/hydroponics) "phu" = ( /obj/structure/chair/sofa/bench/left{ @@ -50829,11 +52680,27 @@ dir = 5 }, /area/station/hallway/secondary/entry) -"phB" = ( -/obj/machinery/vending/coffee, -/obj/structure/sign/poster/official/science/directional/south, +"phw" = ( +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, /turf/open/floor/iron/dark, -/area/station/science/breakroom) +/area/station/engineering/lobby) +"phz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"phA" = ( +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "phK" = ( /obj/effect/spawner/random/contraband/prison, /turf/open/floor/plating, @@ -50863,13 +52730,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"pie" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Engineering Access" - }, -/obj/structure/closet/radiation, -/turf/open/floor/iron/dark, -/area/station/engineering/main) "pig" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50925,17 +52785,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/mine/laborcamp/security) -"piI" = ( -/obj/machinery/airalarm/directional/south, -/obj/machinery/camera{ - c_tag = "Medbay Stasis Center South"; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "piL" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/west{ id = "Cell 2"; @@ -50946,35 +52795,18 @@ dir = 1 }, /area/station/security/brig) -"piM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/railing/corner{ - dir = 1 - }, -/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/structure/cable, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/ordnance/office) "piP" = ( /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/hallway/secondary/entry) +"piT" = ( +/obj/machinery/status_display/ai/directional/east, +/obj/structure/chair/sofa/left/brown, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "piV" = ( -/obj/machinery/button/door/directional/south{ - id = "Cargo_Store_In"; - name = "Shutter Control"; - pixel_x = -23 - }, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) "pja" = ( @@ -51007,16 +52839,6 @@ /obj/structure/chair, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"pjk" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "pjl" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/engineering_all, @@ -51042,16 +52864,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"pjz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/warning/cold_temp/directional/south, -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/fore/lesser) "pjF" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ color = "#ff0000"; @@ -51065,17 +52877,42 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"pjM" = ( -/obj/structure/closet, -/obj/effect/spawner/random/clothing/costume, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/effect/spawner/random/clothing/gloves, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"pjZ" = ( -/obj/structure/closet/crate/freezer/blood, +"pkf" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/bed/medical/emergency, +/obj/machinery/iv_drip, +/obj/machinery/light/small/directional/west, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/white, -/area/station/medical/cryo) +/area/station/medical/medbay/central) +"pkg" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/sign/departments/science/directional/west, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"pkq" = ( +/obj/structure/railing/wooden_fence{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"pkz" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/structure/sink/directional/south, +/obj/machinery/camera/directional/north{ + c_tag = "Virology Break Room"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark, +/area/station/medical/virology) "pkN" = ( /obj/structure/railing, /obj/effect/mapping_helpers/burnt_floor, @@ -51118,11 +52955,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/maintenance/port/greater) -"ply" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/trash/caution_sign, +"plI" = ( +/obj/structure/chair/stool, /turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/area/station/maintenance/starboard/fore) "plN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -51143,16 +52979,19 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"plX" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"pme" = ( +/obj/machinery/hydroponics/constructable, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 }, -/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron/dark, -/area/station/science/ordnance) +/area/station/service/hydroponics) +"pmi" = ( +/obj/structure/cable, +/obj/structure/sign/warning/engine_safety/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) "pmn" = ( /obj/effect/spawner/random/trash/caution_sign, /turf/open/floor/plating, @@ -51165,6 +53004,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) +"pmA" = ( +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/machinery/light/small/red/directional/north, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "pna" = ( /obj/machinery/door/poddoor/preopen{ id = "Engineering"; @@ -51193,21 +53044,23 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/tcommsat/computer) -"pnq" = ( -/obj/machinery/light/small/directional/north, -/obj/structure/sign/departments/science/alt/directional/north, -/turf/open/openspace, -/area/station/science/research) "pns" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/duct, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/item/flashlight{ - pixel_y = 3; - pixel_x = -4 - }, /turf/open/floor/iron, -/area/station/maintenance/starboard/fore) +/area/station/service/kitchen/coldroom) +"pnw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "pnz" = ( /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, @@ -51238,6 +53091,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/mine/laborcamp) +"pnK" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/science/explab) "pnR" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat_interior) @@ -51263,22 +53122,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark/textured, /area/station/security/execution/transfer) -"pog" = ( -/obj/structure/cable, -/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/machinery/light_switch/directional/north{ - pixel_x = 6 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/dorms/laundry) "pou" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, @@ -51293,6 +53136,15 @@ "poy" = ( /turf/open/floor/carpet/green, /area/station/service/library) +"poC" = ( +/obj/structure/marker_beacon/burgundy{ + name = "landing marker" + }, +/obj/structure/railing/wooden_fence{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "poK" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -51302,17 +53154,22 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/commons/locker) -"poV" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, +"poL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, /turf/open/floor/iron, -/area/station/service/bar) -"poY" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/area/station/hallway/primary/central) +"poO" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "ppc" = ( /obj/item/trash/syndi_cakes, /obj/effect/turf_decal/stripes/red/line{ @@ -51357,9 +53214,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"pps" = ( -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"ppz" = ( +/obj/machinery/computer/rdconsole{ + dir = 1 + }, +/turf/open/floor/iron/white/corner{ + dir = 8 + }, +/area/station/command/heads_quarters/rd) "ppD" = ( /obj/structure/chair/office{ dir = 8 @@ -51367,6 +53229,14 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) +"ppH" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/machinery/status_display/evac/directional/east, +/obj/structure/chair/sofa/right/brown{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "ppK" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/yellow{ @@ -51393,6 +53263,13 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"ppY" = ( +/obj/structure/marker_beacon/burgundy{ + name = "landing marker" + }, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "pqc" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 6 @@ -51425,17 +53302,6 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron, /area/mine/living_quarters) -"pqK" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) -"pqZ" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/item/storage/box/matches, -/obj/effect/spawner/random/entertainment/cigar, -/turf/open/floor/iron, -/area/station/service/bar) "pra" = ( /turf/open/floor/iron/dark, /area/station/science/robotics/lab) @@ -51460,10 +53326,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"prF" = ( -/obj/machinery/telecomms/server/presets/security, -/turf/open/floor/iron/dark/telecomms, -/area/station/tcommsat/server) "prH" = ( /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ @@ -51473,6 +53335,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/xenobiology) +"prX" = ( +/obj/machinery/light/cold/directional/east, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "psb" = ( /turf/closed/wall/ice, /area/icemoon/underground/explored) @@ -51497,6 +53363,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/storage_shared) +"psu" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Engineering Access" + }, +/obj/structure/closet/radiation, +/obj/structure/sign/warning/radiation/rad_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/main) "psv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51552,30 +53426,40 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"ptk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/departments/vault/directional/north{ - pixel_x = 32 +"ptp" = ( +/obj/structure/bookcase/random, +/turf/open/floor/iron/grimy, +/area/station/maintenance/aft/greater) +"ptr" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/vodka/badminka{ + pixel_x = 7; + pixel_y = 20 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/port) -"ptv" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/stone, -/area/station/service/bar/atrium) +/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/machinery/firealarm/directional/south, +/obj/structure/secure_safe/hos{ + pixel_x = 28; + pixel_y = 6 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/heads_quarters/hos) "ptB" = ( /obj/machinery/modular_computer/preset/id{ dir = 8 }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) -"ptO" = ( -/obj/machinery/barsign, -/turf/closed/wall, -/area/station/service/bar/atrium) "ptQ" = ( /obj/structure/disposalpipe/trunk/multiz/down, /obj/effect/turf_decal/stripes/line, @@ -51585,6 +53469,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"ptS" = ( +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/station/service/library) "ptY" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/maint) @@ -51627,17 +53517,39 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/plating, /area/station/engineering/atmos) -"puB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Medbay Maintenance" +"puw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio3"; + name = "Xenobio Pen 3 Blast Door" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/science/xenobiology) +"puz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"puF" = ( +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/medical/cmo, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"puL" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/station/maintenance/aft/greater) +/area/station/maintenance/starboard/aft) "puN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51668,6 +53580,18 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark, /area/station/cargo/drone_bay) +"puY" = ( +/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) +"puZ" = ( +/obj/structure/railing/wooden_fence{ + dir = 1 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "pve" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -51679,6 +53603,17 @@ /obj/structure/rack, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"pvi" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "pvm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51725,13 +53660,16 @@ }, /turf/open/floor/eighties/red, /area/station/security/prison/safe) -"pvU" = ( -/obj/machinery/light/small/directional/south, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/cafeteria{ - dir = 8 +"pvP" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/area/station/science/research) +/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/smooth_half, +/area/station/service/hydroponics) "pvY" = ( /obj/machinery/computer/order_console/mining, /obj/machinery/light_switch/directional/north, @@ -51771,6 +53709,12 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) +"pwr" = ( +/obj/structure/sign/warning{ + pixel_y = 48 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "pwv" = ( /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ color = "#0000ff"; @@ -51780,16 +53724,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"pwz" = ( -/obj/machinery/duct, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"pwC" = ( -/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) "pwF" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -51819,14 +53753,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"pxg" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/closet, -/obj/item/bodybag, -/obj/item/clothing/under/misc/burial, -/obj/item/clothing/under/misc/burial, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) "pxi" = ( /obj/machinery/door/window/left/directional/west{ name = "Mass Driver"; @@ -51846,10 +53772,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"pxu" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/turf/open/floor/engine, -/area/station/science/explab) +"pxp" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "pxL" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -51891,6 +53820,24 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/security/checkpoint/supply) +"pyl" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/structure/sign/flag/terragov/directional/north, +/turf/open/floor/iron, +/area/station/commons/fitness) +"pyn" = ( +/obj/item/storage/photo_album/chapel, +/obj/structure/noticeboard/directional/west, +/obj/machinery/light/small/directional/west, +/obj/structure/rack/skeletal, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) "pyr" = ( /obj/machinery/griddle, /turf/open/floor/iron/cafeteria, @@ -51901,6 +53848,17 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"pyA" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/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/station/service/hydroponics) "pyD" = ( /obj/machinery/shower/directional/north, /obj/structure/window/reinforced/spawner/directional/east, @@ -51909,14 +53867,14 @@ }, /turf/open/floor/iron/freezer, /area/station/maintenance/starboard/fore) +"pyE" = ( +/obj/structure/table/wood, +/obj/machinery/airalarm/directional/west, +/obj/machinery/fax/auto_name, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "pyG" = ( -/obj/machinery/button/door/directional/east{ - id = "armory"; - name = "Armory Shutters"; - pixel_x = -9; - pixel_y = 30; - req_access = list("armory") - }, /obj/structure/rack, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 @@ -52006,6 +53964,19 @@ /obj/item/book/manual/wiki/detective, /turf/open/floor/carpet/blue, /area/station/security/prison/work) +"pzx" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/item/seeds/carrot, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "pzC" = ( /obj/machinery/firealarm/directional/north, /obj/effect/turf_decal/siding/yellow{ @@ -52013,18 +53984,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"pzD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/mine/laborcamp) "pzV" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -52052,16 +54011,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/science/ordnance) -"pAn" = ( -/obj/effect/turf_decal/siding/white/corner{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/obj/machinery/status_display/ai/directional/south, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/chem_master/condimaster, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "pAN" = ( /obj/structure/ladder, /obj/effect/decal/cleanable/dirt, @@ -52076,15 +54025,12 @@ dir = 4 }, /area/mine/production) -"pAW" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/railing/corner/end{ - dir = 4 +"pAX" = ( +/obj/structure/chair/plastic{ + dir = 8 }, -/turf/open/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, /area/station/maintenance/starboard/fore) "pAZ" = ( /obj/effect/spawner/structure/window/reinforced, @@ -52099,17 +54045,27 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/port) +"pBs" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) +"pBv" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "pBA" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/treatment_center) -"pBB" = ( -/obj/structure/sign/warning/cold_temp/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "pBE" = ( /turf/closed/wall, /area/station/cargo/bitrunning/den) @@ -52128,6 +54084,16 @@ /obj/structure/flora/tree/jungle/small/style_random, /turf/open/floor/grass, /area/station/security/warden) +"pBR" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "pBV" = ( /obj/structure/chair/office/light, /turf/open/floor/iron/dark, @@ -52150,11 +54116,25 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"pCp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/flasher{ + pixel_y = -26; + id = "visitorflash" + }, +/turf/open/floor/iron, +/area/station/security/prison/visit) "pCE" = ( /obj/machinery/firealarm/directional/east, /obj/structure/filingcabinet, /turf/open/floor/iron/dark/textured, /area/station/security/office) +"pCG" = ( +/obj/structure/fence/corner{ + dir = 2 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "pCI" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -52191,14 +54171,6 @@ dir = 1 }, /area/station/science/lab) -"pDl" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Visitation" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/turf/open/floor/iron, -/area/station/security/prison/visit) "pDt" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -52215,6 +54187,17 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) +"pDA" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/fore) "pDB" = ( /obj/item/radio/intercom/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -52235,6 +54218,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) +"pDL" = ( +/obj/structure/sign/departments/psychology/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "pDQ" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -52251,6 +54241,14 @@ "pDW" = ( /turf/open/floor/plating, /area/mine/laborcamp/security) +"pEc" = ( +/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/plating, +/area/station/maintenance/starboard/fore) "pEg" = ( /obj/machinery/light/small/directional/east, /obj/structure/table, @@ -52332,12 +54330,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) -"pEY" = ( -/obj/structure/table, -/obj/item/plant_analyzer, -/obj/item/stock_parts/power_store/cell/high, -/turf/open/floor/plating, -/area/station/engineering/storage/tech) "pFg" = ( /obj/structure/chair{ dir = 8 @@ -52348,18 +54340,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"pFl" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/ordnance/office) +"pFv" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) "pFV" = ( /obj/structure/railing/corner, /turf/open/floor/iron/smooth, @@ -52389,12 +54374,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"pGg" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "pGo" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -52404,19 +54383,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) -"pGp" = ( -/obj/machinery/door/airlock/research/glass{ - name = "Research Break Room" - }, -/obj/machinery/door/firedoor, -/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/mapping_helpers/airlock/access/all/science/general, -/turf/open/floor/iron/dark, -/area/station/science/breakroom) "pGt" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 5 @@ -52424,14 +54390,20 @@ /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) "pGy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/white{ dir = 1 }, +/obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) +/area/station/hallway/secondary/entry) +"pGG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/random/directional/south, +/obj/structure/closet/toolcloset, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "pGJ" = ( /obj/structure/sign/poster/contraband/random/directional/north, /obj/effect/mapping_helpers/burnt_floor, @@ -52446,6 +54418,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/medical/virology) +"pGT" = ( +/obj/machinery/photocopier, +/turf/open/floor/wood, +/area/station/service/library) "pGW" = ( /obj/machinery/camera/directional/west{ c_tag = "MiniSat External SouthEast"; @@ -52500,30 +54476,24 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"pHS" = ( -/obj/structure/rack, -/obj/item/reagent_containers/cup/bottle/fluorine{ - pixel_x = 7; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/epinephrine{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bottle/iodine{ - pixel_x = 1 - }, -/obj/structure/sign/warning/chem_diamond/directional/west, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 +"pHW" = ( +/obj/machinery/atmospherics/components/tank, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/area/station/medical/chem_storage) +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "pHX" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"pIh" = ( +/obj/structure/bookcase, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "pIj" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -52542,26 +54512,25 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"pIt" = ( -/obj/structure/sign/warning/no_smoking/directional/east, -/turf/open/floor/iron/white/side{ - dir = 10 - }, -/area/station/science/research) +"pIu" = ( +/obj/structure/table, +/obj/item/binoculars, +/obj/machinery/computer/security/telescreen/ordnance/directional/north, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) "pIw" = ( /obj/machinery/vending/wardrobe/curator_wardrobe, -/turf/open/floor/engine/cult, -/area/station/service/library) -"pJb" = ( -/obj/structure/sign/nanotrasen{ +/obj/structure/sign/painting/library_private{ pixel_x = -32 }, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 6 - }, -/obj/structure/marker_beacon/burgundy, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/turf/open/floor/engine/cult, +/area/station/service/library) +"pIy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/maintenance/starboard/upper) "pJc" = ( /obj/machinery/component_printer, /obj/machinery/camera/directional/west{ @@ -52572,11 +54541,21 @@ dir = 4 }, /area/station/science/explab) -"pJq" = ( -/obj/structure/statue/snow/snowman{ - name = "Steve" +"pJi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/misc/asteroid/snow/coldroom, +/obj/item/flashlight{ + pixel_y = 3; + pixel_x = -4 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) +"pJm" = ( +/obj/structure/fence{ + dir = 2 + }, +/turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "pJu" = ( /obj/effect/spawner/structure/window/reinforced, @@ -52646,16 +54625,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"pKo" = ( -/obj/structure/disposalpipe/segment{ +"pKl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, -/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/south, -/turf/open/floor/wood/parquet, -/area/station/service/bar/backroom) +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/plating, +/area/station/medical/morgue) "pKu" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -52696,21 +54673,27 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"pKX" = ( +/obj/structure/railing, +/obj/structure/closet, +/obj/effect/spawner/random/maintenance/four, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "pKY" = ( /obj/machinery/door/poddoor/incinerator_atmos_aux, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"pLa" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"pLe" = ( -/obj/structure/sign/warning/xeno_mining, -/turf/closed/wall/ice, +"pLg" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/openspace/icemoon/keep_below, /area/icemoon/surface/outdoors/nospawn) +"pLh" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/smooth, +/area/mine/eva) "pLn" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52723,17 +54706,6 @@ dir = 8 }, /area/station/hallway/secondary/entry) -"pLo" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "pLr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -52751,18 +54723,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"pLu" = ( -/obj/structure/sink/kitchen/directional/south, -/obj/effect/turf_decal/siding/thinplating/dark/corner, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "pLv" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/iron, @@ -52784,14 +54744,16 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"pLx" = ( -/obj/machinery/computer/security{ - dir = 4 +"pLS" = ( +/obj/machinery/mineral/stacking_machine{ + output_dir = 2; + stack_amt = 10 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/computer/security/telescreen/prison/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/security/warden) +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal) "pLZ" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -52812,11 +54774,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) -"pMh" = ( -/obj/structure/table/wood/poker, -/obj/item/storage/wallet/random, -/turf/open/floor/wood/large, -/area/station/commons/lounge) "pMq" = ( /obj/machinery/camera/directional/south{ c_tag = "Atmospherics Storage Room - South" @@ -52857,16 +54814,21 @@ "pMF" = ( /turf/open/floor/iron/white, /area/station/science/xenobiology) +"pMM" = ( +/obj/structure/fence/door, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"pMN" = ( +/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "pMY" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/xenobiology) -"pNi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "pNm" = ( /turf/closed/wall/r_wall, /area/station/security/execution/education) @@ -52880,22 +54842,6 @@ }, /turf/open/floor/carpet, /area/station/command/meeting_room) -"pNy" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/structure/table/glass, -/obj/machinery/camera{ - c_tag = "Virology Module South"; - dir = 4; - network = list("ss13","medbay") - }, -/obj/item/clothing/mask/breath/medical, -/obj/item/clothing/mask/breath/medical, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/turf/open/floor/iron/white, -/area/station/medical/virology) "pNz" = ( /obj/structure/closet/secure_closet/warden, /obj/machinery/light/small/directional/east, @@ -52923,27 +54869,6 @@ dir = 1 }, /area/station/engineering/lobby) -"pNY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/table/glass, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/stack/sheet/mineral/plasma{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/sheet/mineral/plasma{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/stack/sheet/mineral/plasma{ - pixel_x = -3; - pixel_y = 9 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "pNZ" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -52959,12 +54884,6 @@ /obj/structure/cable, /turf/closed/wall/r_wall, /area/station/security/prison/safe) -"pOl" = ( -/obj/structure/flora/tree/pine/style_random{ - pixel_x = -15 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "pOo" = ( /obj/machinery/airalarm/directional/north, /obj/structure/closet/secure_closet/personal/cabinet, @@ -52981,26 +54900,21 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"pOC" = ( -/obj/machinery/computer/order_console/cook{ - dir = 4 - }, -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/tile/bar{ - dir = 1 +"pOH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Teleport Access" }, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/iron, -/area/station/service/kitchen/coldroom) -"pOK" = ( -/obj/structure/disposalpipe/segment{ +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/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/teleporter, +/obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, -/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/smooth_half, -/area/station/service/hydroponics) +/turf/open/floor/iron, +/area/station/command/teleporter) "pOL" = ( /turf/open/floor/iron/white, /area/station/science/ordnance) @@ -53011,6 +54925,12 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"pPg" = ( +/obj/structure/stairs/west, +/turf/open/floor/iron/stairs/medium{ + dir = 4 + }, +/area/station/service/hydroponics) "pPl" = ( /obj/item/stack/ore/silver, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53033,30 +54953,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"pPD" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/firealarm/directional/east, -/obj/structure/closet/l3closet/virology, -/obj/machinery/camera{ - c_tag = "Virology Airlock"; - dir = 9; - network = list("ss13","medbay") - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) -"pPE" = ( -/obj/machinery/modular_computer/preset/id, -/obj/machinery/computer/security/telescreen/vault/directional/north, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "pPK" = ( /obj/structure/stairs/east, /turf/open/floor/iron/dark/textured, @@ -53108,6 +55004,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"pQl" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Cytology Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "pQo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -53147,11 +55050,13 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"pQG" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) +"pQD" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "pQK" = ( /obj/structure/closet/secure_closet/evidence, /turf/open/floor/iron/dark/textured_edge{ @@ -53176,25 +55081,18 @@ "pRj" = ( /turf/closed/wall, /area/station/maintenance/port/aft) -"pRB" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Security - Lower Brig Hallway" - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/station/security/brig) -"pRG" = ( -/obj/effect/spawner/random/entertainment/arcade{ - dir = 4 +"pRs" = ( +/obj/structure/bodycontainer/morgue, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/tile/red/opposingcorners{ +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ dir = 1 }, -/turf/open/floor/iron/cafeteria, -/area/station/hallway/secondary/exit/departure_lounge) +/turf/open/floor/iron/dark/smooth_half, +/area/station/medical/morgue) "pRL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -53202,7 +55100,6 @@ /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 @@ -53214,10 +55111,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/freezer, /area/mine/laborcamp) -"pSd" = ( -/obj/machinery/digital_clock/directional/east, -/turf/open/floor/iron/grimy, -/area/station/hallway/secondary/entry) "pSk" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53230,16 +55123,12 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"pSn" = ( -/obj/machinery/seed_extractor, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 1 +"pSq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) +/turf/open/floor/wood/large, +/area/station/commons/lounge) "pSu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -53258,48 +55147,35 @@ "pSz" = ( /turf/open/openspace, /area/station/maintenance/starboard/upper) -"pSP" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Chapel External Airlock"; - opacity = 0 +"pSA" = ( +/obj/machinery/seed_extractor, +/obj/machinery/camera/directional/north{ + c_tag = "Security - Permabrig Forestry"; + network = list("ss13","prison") }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/newscaster/directional/north, /turf/open/floor/iron, -/area/station/service/chapel) -"pSX" = ( -/obj/structure/closet/crate{ - name = "Le Caisee D'abeille" - }, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/queen_bee/bought, -/obj/item/clothing/suit/hooded/bee_costume, -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 +/area/station/security/prison/garden) +"pSF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/stool/directional/east, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"pSK" = ( +/obj/effect/turf_decal/weather/snow/corner{ dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/warm/directional/north, -/obj/item/seeds/sunflower, -/obj/effect/spawner/random/food_or_drink/seed, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/effect/turf_decal/weather/snow/corner, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "pTd" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -53321,6 +55197,37 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig/entrance) +"pTi" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/north{ + id = "botany_apiary"; + name = "Bee Protection Shutters" + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"pTy" = ( +/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/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "pTB" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -53341,6 +55248,11 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/textured, /area/station/security/warden) +"pTT" = ( +/obj/machinery/smartfridge/extract/preloaded, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) "pTU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/corner{ @@ -53360,6 +55272,24 @@ "pTY" = ( /turf/open/floor/iron/white/side, /area/station/science/explab) +"pUa" = ( +/obj/structure/marker_beacon/cerulean, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/genturf, +/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) +"pUi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "pUn" = ( /obj/structure/sink/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -53377,6 +55307,21 @@ }, /turf/open/floor/iron/white, /area/station/science/genetics) +"pUX" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"pVg" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/stairs/north, +/turf/open/floor/iron, +/area/mine/eva/lower) +"pVj" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "pVl" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -53400,6 +55345,11 @@ }, /turf/open/floor/iron, /area/station/tcommsat/computer) +"pVD" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/generic/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "pVH" = ( /turf/closed/wall/mineral/wood, /area/station/maintenance/aft/lesser) @@ -53446,36 +55396,41 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"pWi" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk, -/obj/structure/disposaloutlet{ - desc = "An outlet for the pneumatic disposal system. This one seems designed for rapid corpse disposal."; - dir = 1; - name = "rapid corpse mover 9000" - }, -/obj/effect/turf_decal/stripes/line{ +"pWp" = ( +/obj/structure/railing/corner{ dir = 8 }, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/structure/fence{ + dir = 2 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "pWu" = ( /obj/docking_port/stationary/syndicate/northeast{ dir = 8 }, /turf/open/genturf, /area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) -"pWG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +"pWE" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"pWJ" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + 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/morgue) +/area/station/service/hydroponics) "pWY" = ( /obj/structure/table/glass, /obj/structure/extinguisher_cabinet/directional/east, @@ -53518,16 +55473,27 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"pXq" = ( +/obj/machinery/button/door/directional/east{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast DOors"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"pXt" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/camera/directional/north{ + c_tag = "Research Division Server Room"; + network = list("ss13","rd") + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/openspace/icemoon, +/area/station/science/server) "pXv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"pXy" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "pXB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -53575,6 +55541,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos) +"pYn" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/fax{ + fax_name = "Law Office"; + name = "Law Office Fax Machine" + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) "pYz" = ( /obj/structure/railing/corner, /obj/machinery/door/firedoor/border_only, @@ -53592,13 +55568,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"pYD" = ( -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/commons/fitness) "pYF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -53610,6 +55579,9 @@ /area/station/cargo/storage) "pZh" = ( /obj/effect/spawner/random/vending/snackvend, +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, /turf/open/floor/wood, /area/station/command/meeting_room) "pZm" = ( @@ -53625,15 +55597,22 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"pZA" = ( +"pZB" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay Chemistry Access" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 1 }, -/obj/machinery/light/directional/west, -/obj/item/kirbyplants/random/dead/research_director, -/obj/machinery/computer/security/telescreen/rd/directional/west, -/turf/open/floor/iron/smooth_half, -/area/station/command/heads_quarters/rd) +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/turf_decal/tile/yellow/full, +/turf/open/floor/iron/large, +/area/station/medical/treatment_center) "pZD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53648,15 +55627,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/engineering/storage) -"pZO" = ( -/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, -/obj/effect/spawner/random/structure/steam_vent, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "pZY" = ( /mob/living/simple_animal/hostile/asteroid/polarbear{ move_force = 999; @@ -53664,6 +55634,11 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"pZZ" = ( +/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/greater) "qab" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input{ dir = 8 @@ -53671,25 +55646,17 @@ /turf/open/floor/engine/plasma, /area/station/engineering/atmos) "qad" = ( -/obj/machinery/requests_console/auto_name/directional/south, -/obj/structure/bodycontainer/morgue/beeper_off{ - dir = 1 +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/machinery/light/directional/east, +/obj/structure/sign/departments/science/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "qai" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating/snowed/icemoon, /area/station/maintenance/port/aft) -"qal" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/landmark/event_spawn, -/obj/machinery/holopad, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/stone, -/area/station/commons/lounge) "qam" = ( /obj/structure/cable/multilayer/multiz, /obj/effect/turf_decal/stripes/box, @@ -53701,11 +55668,22 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) -"qaD" = ( -/obj/machinery/light_switch/directional/north, -/obj/structure/sign/poster/official/help_others/directional/west, -/turf/open/floor/iron/checker, -/area/station/commons/storage/emergency/port) +"qaz" = ( +/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/heavy{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + name = "Ordnance Launch Room" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) "qaE" = ( /obj/effect/turf_decal/arrows/red{ dir = 8 @@ -53743,6 +55721,26 @@ /obj/structure/closet/wardrobe/mixed, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"qaS" = ( +/obj/machinery/door/airlock/wood{ + name = "Backstage" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/theatre, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/commons/lounge) "qaU" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/firealarm/directional/west, @@ -53761,19 +55759,11 @@ /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/office) -"qbd" = ( -/obj/structure/railing/corner{ +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/machinery/door/firedoor/border_only, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/dark/half/contrasted, /turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/area/station/science/ordnance/office) "qbh" = ( /obj/structure/chair/stool/directional/south, /obj/machinery/camera/directional/west{ @@ -53781,6 +55771,29 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"qbk" = ( +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Security Checkpoint" + }, +/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/cyclelink_helper_multi{ + cycle_id = "brigoutpost" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/station/security/brig/entrance) +"qbp" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "qbq" = ( /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ @@ -53793,14 +55806,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/xenobiology) -"qbz" = ( -/obj/structure/ladder, -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) "qbA" = ( /obj/structure/cable, /obj/machinery/airalarm/directional/east, @@ -53817,71 +55822,36 @@ /turf/open/floor/wood, /area/station/commons/dorms) "qbG" = ( -/obj/machinery/door/airlock/external, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "chem-morgue-airlock" - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/medical/morgue) -"qbM" = ( -/obj/structure/ore_container/food_trough/raptor_trough, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "qbO" = ( /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/aft) -"qbU" = ( -/obj/structure/sign/warning/electric_shock/directional/south, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "qbW" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/three, /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"qbY" = ( -/obj/item/clothing/accessory/pocketprotector, -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/camera{ - pixel_y = 4; - pixel_x = -3 - }, -/obj/effect/spawner/random/clothing/mafia_outfit, -/obj/effect/spawner/random/clothing/mafia_outfit, -/obj/effect/spawner/random/clothing/backpack, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "qca" = ( /obj/structure/chair/office{ dir = 8 }, /turf/open/floor/iron, /area/station/tcommsat/computer) -"qci" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/gas_mask, +"qch" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end/flip, /turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat_interior) +/area/station/maintenance/starboard/fore) "qck" = ( /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"qcl" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/cytology) "qcu" = ( /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, @@ -53891,6 +55861,25 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/iron, /area/station/cargo/miningdock) +"qcI" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table/reinforced, +/obj/item/stack/wrapping_paper{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/stack/package_wrap{ + pixel_x = -1; + pixel_y = -1 + }, +/obj/item/dest_tagger, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "qcL" = ( /obj/effect/turf_decal/siding/yellow/end{ dir = 8 @@ -53909,16 +55898,14 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"qdx" = ( -/obj/structure/stairs/north{ - dir = 4 - }, -/turf/open/floor/iron/stairs/old{ +"qdq" = ( +/obj/structure/railing, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/area/station/engineering/atmos/mix) +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "qdC" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, @@ -53950,6 +55937,22 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/carpet/red, /area/station/security/prison/work) +"qdI" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Central Hallway South-West" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "qdK" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -53986,6 +55989,11 @@ /obj/machinery/microwave, /turf/open/floor/stone, /area/mine/eva/lower) +"qes" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/textured, +/area/station/service/hydroponics) "qeF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54032,17 +56040,6 @@ dir = 8 }, /area/station/service/chapel) -"qeW" = ( -/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, -/obj/structure/chair/stool/bar/directional/north, -/obj/structure/cable, -/turf/open/floor/eighties, -/area/station/commons/lounge) "qfh" = ( /turf/open/floor/iron/recharge_floor, /area/station/science/robotics/mechbay) @@ -54057,23 +56054,56 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/large, /area/station/medical/treatment_center) -"qfj" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"qfr" = ( -/obj/structure/table/wood/poker, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/effect/spawner/random/entertainment/lighter, -/turf/open/floor/wood/large, -/area/station/commons/lounge) "qfs" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/safe) +"qfy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/obj/machinery/door/window/right/directional/west{ + name = "Corpse Arrivals" + }, +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/trimline/neutral/filled/end{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) +"qfz" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/landmark/start/bartender, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/bar) +"qfA" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Research Division Access"; + network = list("ss13","rd") + }, +/obj/structure/sink/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) "qfE" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 4 @@ -54083,30 +56113,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"qfI" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ +"qfG" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/siding/white{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"qfJ" = ( -/obj/machinery/airalarm/directional/west, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron, /area/station/commons/fitness) "qgm" = ( /obj/machinery/meter/monitored/waste_loop, @@ -54116,41 +56128,32 @@ /obj/effect/turf_decal/siding/wideplating/corner, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"qgn" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Departure Lounge Holding Area"; - dir = 9 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "qgu" = ( /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/surgery/fore) +"qgv" = ( +/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) +"qgH" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "qgO" = ( /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/processing) -"qgQ" = ( -/obj/structure/railing/wooden_fence{ - dir = 8 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"qgT" = ( -/obj/effect/spawner/random/structure/closet_private, +"qhb" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/trash/crushed_can, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/maintenance/starboard/lesser) "qhd" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -54161,25 +56164,20 @@ /mob/living/basic/bot/cleanbot, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/service) -"qhp" = ( -/obj/structure/sign/warning/gas_mask/directional/south, -/obj/effect/spawner/random/trash/grille_or_waste, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"qhi" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/trash/mopbucket, /turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) -"qhF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Dormitory" - }, -/obj/effect/landmark/navigate_destination, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 +/area/station/maintenance/starboard/lesser) +"qhI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/directional/west{ + c_tag = "Atmospherics - South West" }, -/turf/open/floor/iron/dark/textured, -/area/station/commons/dorms) +/turf/open/floor/iron, +/area/station/engineering/atmos) "qhL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -54202,11 +56200,12 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark/side, /area/station/security/processing) -"qhQ" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) +"qhR" = ( +/obj/structure/fence/corner{ + dir = 2 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "qhS" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -54214,12 +56213,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_dark, /area/station/security/prison) -"qhV" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "qig" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54228,39 +56221,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"qit" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) -"qiA" = ( -/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" +"qiv" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/thinplating_new/light{ + dir = 6 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/service/bar) +/turf/open/floor/wood/large, +/area/station/hallway/primary/starboard) "qiF" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron/dark/side, /area/mine/eva/lower) -"qiG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "qiJ" = ( /obj/structure/closet/secure_closet/freezer/kitchen/maintenance, /obj/effect/spawner/random/contraband/prison, @@ -54275,10 +56247,19 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/qm) "qiL" = ( -/obj/machinery/door/airlock/hatch, -/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/obj/structure/rack, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/item/shovel, +/obj/item/flashlight, +/obj/item/flashlight, +/obj/item/radio/off, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Departure Lounge Emergency EVA" + }, +/turf/open/floor/iron/white, +/area/station/hallway/secondary/exit/departure_lounge) "qiN" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/iron/dark, @@ -54288,15 +56269,9 @@ /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, +/obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) -"qiT" = ( -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "qjb" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 10 @@ -54308,9 +56283,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"qjd" = ( -/turf/open/misc/ice/coldroom, -/area/station/service/kitchen/coldroom) "qjg" = ( /obj/effect/landmark/observer_start, /obj/effect/turf_decal/plaque{ @@ -54333,18 +56305,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, /area/station/maintenance/starboard/fore) -"qjm" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Bridge West Access" - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"qjn" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/fore) "qjp" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/thinplating_new, @@ -54358,24 +56318,11 @@ /obj/structure/girder, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"qjs" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Ordnance Lower Mix Lab"; - network = list("ss13","rd") - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "qjx" = ( /obj/structure/cable, /obj/machinery/holopad/secure, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) -"qjC" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = -32 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "qjF" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -54383,6 +56330,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"qjJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) "qjO" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -54399,15 +56353,21 @@ }, /turf/open/floor/plating, /area/mine/eva) -"qkc" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"qjW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/trunk/multiz/down, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/aft) +/obj/effect/landmark/event_spawn, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"qkg" = ( +/mob/living/basic/pet/penguin/baby/permanent, +/obj/item/toy/snowball{ + pixel_x = -6; + pixel_y = -3 + }, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "qku" = ( /obj/structure/chair/comfy/beige{ dir = 4 @@ -54450,6 +56410,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/lockers) +"qkR" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/chem_master, +/obj/machinery/light/small/directional/west, +/turf/open/floor/glass/reinforced, +/area/station/medical/treatment_center) "qkT" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -54457,6 +56423,11 @@ /obj/effect/landmark/start/station_engineer, /turf/open/floor/iron, /area/station/engineering/engine_smes) +"qlf" = ( +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/structure/sign/warning/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "qlk" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -54487,6 +56458,33 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"qlD" = ( +/obj/structure/cable, +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) +"qlE" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "qlG" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty{ @@ -54515,18 +56513,17 @@ /obj/structure/cable, /turf/open/floor/iron/textured, /area/station/hallway/secondary/entry) -"qlS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/wood{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "qlU" = ( /obj/structure/closet/crate, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"qmh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "qmi" = ( /turf/open/floor/iron, /area/station/cargo/lobby) @@ -54536,6 +56533,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig/entrance) +"qmq" = ( +/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, +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "qmt" = ( /turf/closed/wall, /area/mine/eva/lower) @@ -54548,36 +56553,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"qmT" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/brown{ - dir = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "miningdorm_B"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_y = 23; - specialfunctions = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/stellar, -/area/mine/production) "qmU" = ( /obj/machinery/duct, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/plating, /area/station/medical/virology) -"qmV" = ( -/obj/structure/sign/warning/gas_mask, -/turf/closed/wall/r_wall, -/area/station/hallway/secondary/exit/departure_lounge) "qna" = ( /obj/machinery/camera/directional/east{ c_tag = "Security - Permabrig Chapel"; @@ -54617,12 +56598,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/dark, /area/station/medical/virology) -"qnv" = ( -/obj/structure/closet/crate/grave, -/turf/open/misc/dirt{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/icemoon/underground/explored/graveyard) "qnC" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/ce) @@ -54658,20 +56633,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"qod" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = -4; - pixel_y = 3 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "qoi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54683,26 +56644,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/wood/parquet, /area/station/service/library) -"qon" = ( -/obj/machinery/door/airlock/wood{ - name = "Backstage" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/theatre, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/station/commons/lounge) "qoK" = ( /obj/structure/flora/rock/style_random, /obj/structure/window/reinforced/spawner/directional/south, @@ -54717,14 +56658,6 @@ /obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating, /area/station/security/prison/safe) -"qoZ" = ( -/obj/effect/turf_decal/trimline/white/arrow_ccw, -/obj/effect/turf_decal/trimline/white/arrow_cw{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/mix) "qpb" = ( /obj/machinery/disposal/bin{ desc = "A pneumatic waste disposal unit. This one leads to the morgue."; @@ -54749,24 +56682,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/fore) -"qpp" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Quartermaster's Office" - }, -/obj/machinery/status_display/supply{ - pixel_x = -32 +"qpm" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/desk_bell{ + pixel_x = -3 }, -/obj/structure/table, -/obj/item/coin/silver, -/obj/item/computer_disk/quartermaster, -/obj/item/computer_disk/quartermaster, -/obj/item/computer_disk/quartermaster, -/obj/item/clipboard, -/obj/effect/turf_decal/tile/brown/half/contrasted{ +/turf/open/floor/iron, +/area/station/service/bar) +"qpo" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ dir = 8 }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/medical/chemistry) "qpr" = ( /obj/effect/turf_decal/trimline/dark_blue/line, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -54790,7 +56719,7 @@ }, /obj/machinery/light_switch/directional/west{ pixel_x = -34; - pixel_y = 7 + pixel_y = 6 }, /obj/machinery/button/door/directional/west{ id = "gene_desk_shutters"; @@ -54834,15 +56763,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/library) -"qpQ" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Service - Electrical Maintenace Upper" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/starboard/fore) "qpR" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, @@ -54852,19 +56772,6 @@ /obj/machinery/recharge_station, /turf/open/floor/wood, /area/station/command/meeting_room) -"qpU" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/structure/reagent_dispensers/plumbed{ - name = "dormitory reservoir" - }, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/turf_decal/delivery/white{ - color = "#307db9" - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/iron/textured, -/area/station/maintenance/fore) "qpZ" = ( /obj/structure/table, /obj/item/folder/blue{ @@ -54885,18 +56792,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"qqh" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8; - name = "Exfiltrate Port" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/mix) -"qqn" = ( -/obj/structure/tank_dispenser/oxygen, -/turf/open/floor/iron/smooth, -/area/mine/eva/lower) "qqv" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, @@ -54927,15 +56822,6 @@ dir = 1 }, /area/station/security/office) -"qre" = ( -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/vending/wardrobe/hydro_wardrobe, -/turf/open/floor/iron, -/area/station/service/hydroponics) "qrg" = ( /obj/item/bodypart/head, /obj/effect/decal/cleanable/blood, @@ -54964,42 +56850,29 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"qrm" = ( -/obj/structure/sign/warning/gas_mask, -/turf/closed/wall/r_wall, -/area/station/engineering/storage_shared) -"qrq" = ( -/obj/structure/toilet/greyscale{ - cistern_open = 1; - dir = 1 - }, -/obj/effect/spawner/random/entertainment/cigar, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/station/security/prison/toilet) -"qrF" = ( -/obj/machinery/duct, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ +"qrr" = ( +/obj/structure/light_construct/directional/south, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) +"qrB" = ( +/obj/effect/turf_decal/siding/wood{ dir = 8 }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/obj/structure/cable, +/obj/effect/landmark/start/mime, +/turf/open/floor/wood/parquet, +/area/station/service/theater) "qrJ" = ( /obj/machinery/ticket_machine/directional/east, /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/central) -"qrM" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +"qrP" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "qrQ" = ( /obj/structure/railing{ dir = 8 @@ -55021,16 +56894,12 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark, /area/station/service/chapel) -"qsh" = ( -/obj/structure/plaque/static_plaque/golden/commission/icebox, -/obj/effect/landmark/navigate_destination/dockarrival, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/entry) -"qsq" = ( -/obj/structure/sign/warning/directional/south, -/turf/open/openspace/icemoon/keep_below, -/area/icemoon/underground/explored) +"qsa" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance) "qsy" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -55038,35 +56907,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) -"qsG" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/sign/warning/secure_area/directional/west, -/obj/structure/closet/emcloset, -/turf/open/floor/iron/white, -/area/station/medical/virology) "qsQ" = ( /obj/machinery/stasis, /obj/machinery/defibrillator_mount/directional/north, /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) -"qsR" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/rack, -/obj/item/clothing/gloves/latex, -/turf/open/floor/plating, -/area/station/security/prison/safe) -"qsY" = ( -/obj/effect/turf_decal/tile/neutral{ +"qtd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "qtj" = ( /turf/closed/wall, /area/station/engineering/storage) @@ -55090,22 +56943,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/prison/garden) -"qtG" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Fitness Room South" - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/light_switch/directional/south{ - pixel_x = -7 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/commons/fitness) +"qtD" = ( +/obj/structure/sign/warning/directional/south, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "qtH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -55122,10 +56963,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"qtS" = ( -/obj/machinery/light/directional/north, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "qud" = ( /obj/machinery/conveyor_switch/oneway{ id = "mining_internal"; @@ -55146,33 +56983,10 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/service/chapel) -"quw" = ( -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/structure/closet/crate/hydroponics, -/obj/item/wrench, -/obj/item/wrench, -/obj/item/grenade/chem_grenade/antiweed{ - pixel_x = 3; - pixel_y = 1 - }, -/obj/item/grenade/chem_grenade/antiweed, -/obj/item/shovel/spade, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_y = 3 - }, -/obj/item/cultivator, -/obj/item/shovel/spade, -/obj/item/reagent_containers/cup/watering_can, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"quy" = ( +/obj/structure/flora/grass/both/style_random, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "quB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ @@ -55183,9 +56997,6 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"quJ" = ( -/turf/open/floor/stone, -/area/station/commons/lounge) "quK" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -55195,6 +57006,23 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) +"quS" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigbutt, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"quW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/warning/docking/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "quY" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -55216,6 +57044,10 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"qvx" = ( +/obj/item/food/grown/carrot, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "qvE" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/light/small/directional/east, @@ -55234,9 +57066,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"qvN" = ( -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "qvQ" = ( /obj/structure/closet/secure_closet/atmospherics, /turf/open/floor/iron/dark, @@ -55305,11 +57134,13 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"qwn" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/vending/cigarette, +"qwo" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, /turf/open/floor/iron, -/area/station/commons/locker) +/area/station/engineering/atmos/storage) "qwB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/wood, @@ -55318,40 +57149,6 @@ /obj/structure/grille, /turf/closed/wall/r_wall, /area/station/engineering/atmos) -"qwJ" = ( -/obj/machinery/computer/rdconsole{ - dir = 1 - }, -/obj/machinery/button/door/directional/south{ - id = "Biohazard"; - name = "Biohazard Shutter Control"; - pixel_x = -6; - req_access = list("research") - }, -/obj/machinery/button/door/directional/south{ - id = "rnd2"; - name = "Research Lab Shutter Control"; - pixel_x = 6; - req_access = list("research") - }, -/obj/machinery/button/door/directional/south{ - id = "xenobiomain"; - name = "Xenobiology Containment Blast Door"; - pixel_x = -6; - pixel_y = -34; - req_access = list("xenobiology") - }, -/obj/machinery/button/door/directional/south{ - id = "misclab"; - name = "Test Chamber Blast Doors"; - pixel_x = 6; - pixel_y = -34; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/command/heads_quarters/rd) "qwN" = ( /obj/machinery/camera/directional/east{ c_tag = "Research Division North"; @@ -55361,10 +57158,6 @@ dir = 9 }, /area/station/science/research) -"qwO" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "qwX" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/decal/cleanable/dirt, @@ -55427,31 +57220,28 @@ /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"qxv" = ( -/obj/machinery/disposal/bin{ - desc = "A pneumatic waste disposal unit. This one leads to the frozen exterior of the moon."; - name = "deathsposal unit" +"qxG" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 1 }, -/obj/structure/disposalpipe/trunk{ - dir = 4 +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/obj/structure/sign/warning/deathsposal/directional/north, -/obj/structure/sign/warning/fire/directional/west, -/obj/effect/turf_decal/tile/green/full, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/virology) -"qxy" = ( -/obj/effect/turf_decal/siding/yellow/corner{ +/obj/structure/disposalpipe/trunk/multiz/down, +/obj/effect/turf_decal/trimline/green/filled/corner{ 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/lobby) +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "qxI" = ( /turf/open/floor/plastic, /area/station/commons/dorms/laundry) +"qxN" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "qxQ" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, @@ -55461,6 +57251,26 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"qya" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/table, +/obj/item/storage/box/lights/mixed, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/emproof, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = 10 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/engine_smes) "qyn" = ( /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -55468,6 +57278,13 @@ }, /turf/open/floor/iron/dark, /area/station/science/server) +"qyH" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/requests_console/auto_name/directional/south, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "qyI" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ @@ -55501,23 +57318,11 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) -"qyZ" = ( -/obj/structure/table, -/obj/machinery/light/small/dim/directional/west, -/obj/item/camera{ - pixel_y = 9; - pixel_x = -2 - }, -/obj/item/reagent_containers/cup/glass/waterbottle/empty{ - pixel_y = 5; - pixel_x = 4 - }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) -"qzq" = ( -/obj/structure/sign/departments/cargo, -/turf/closed/wall/r_wall, -/area/mine/mechbay) +"qzn" = ( +/obj/structure/chair/sofa/bench/right, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "qzs" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55532,6 +57337,20 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"qzy" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "qzF" = ( /obj/item/poster/random_contraband, /obj/effect/spawner/random/maintenance/two, @@ -55554,18 +57373,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"qzU" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) "qzV" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -55581,13 +57388,12 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"qAq" = ( -/obj/structure/closet/toolcloset, -/obj/machinery/status_display/evac/directional/south, -/obj/structure/sign/poster/official/random/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) +"qAh" = ( +/obj/structure/railing/wooden_fence{ + dir = 5 + }, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "qAB" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, @@ -55598,26 +57404,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"qAP" = ( +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/smooth, +/area/mine/living_quarters) "qAQ" = ( /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) -"qAS" = ( -/obj/item/stack/rods/fifty, -/obj/structure/rack, -/obj/item/stack/cable_coil{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil{ - amount = 5 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/iron, -/area/station/maintenance/department/electrical) "qAT" = ( /obj/machinery/light/small/directional/south, /obj/effect/turf_decal/trimline/dark_red/arrow_ccw{ @@ -55633,15 +57426,13 @@ /obj/machinery/telecomms/server/presets/supply, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"qBd" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm3"; - name = "Dorm 3" +"qBi" = ( +/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/wood, -/area/station/commons/dorms) +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "qBj" = ( /obj/structure/cable, /turf/open/floor/iron/white, @@ -55661,6 +57452,9 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/engine/air, /area/station/engineering/atmos) +"qCu" = ( +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "qCA" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -55689,11 +57483,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"qCJ" = ( -/obj/structure/sign/warning/directional/north, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/service/chapel) "qCP" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/porta_turret/ai{ @@ -55708,37 +57497,27 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"qCY" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "mining-aux-mechbay-external" +"qDm" = ( +/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, +/obj/machinery/meter/layer4, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"qDA" = ( +/obj/structure/bed{ + dir = 4 }, -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Mining Mech Bay External Airlock"; - opacity = 0 +/obj/item/bedsheet/brown{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/turf/open/floor/iron/large, -/area/mine/mechbay) -"qDj" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Gas to Filter" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) -"qDk" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/turf/open/floor/carpet/donk, +/area/mine/production) "qDD" = ( /obj/machinery/washing_machine, /obj/effect/decal/cleanable/dirt, @@ -55760,15 +57539,19 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"qDS" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/aft) "qEa" = ( /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"qEh" = ( -/obj/structure/girder, -/obj/structure/grille, -/turf/open/floor/plating/snowed/coldroom, -/area/icemoon/underground/explored) "qEj" = ( /obj/structure/table/glass, /obj/item/assembly/igniter, @@ -55799,6 +57582,11 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"qEn" = ( +/obj/machinery/vending/dinnerware, +/obj/effect/turf_decal/siding/white, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "qEu" = ( /obj/effect/turf_decal/siding/brown{ dir = 4 @@ -55811,14 +57599,6 @@ /obj/structure/tank_holder/oxygen/yellow, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"qEv" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/science/xenobiology) "qEz" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -55901,13 +57681,26 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"qFD" = ( -/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, +"qFA" = ( +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, /turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/area/station/maintenance/fore) +"qFC" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/structure/sign/warning/no_smoking/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"qFE" = ( +/obj/machinery/door/window/left/directional/west{ + name = "Fitness Ring" + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "qFJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/holopad, @@ -55916,6 +57709,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/customs/auxiliary) +"qFO" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "qFW" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -55946,17 +57744,6 @@ /obj/item/gps/mining, /turf/open/floor/iron/smooth, /area/mine/eva) -"qGh" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/light/small/directional/south, -/obj/structure/cable, -/turf/open/floor/iron/grimy, -/area/station/service/bar/backroom) "qGJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -55987,8 +57774,6 @@ "qGW" = ( /obj/machinery/light/small/directional/south, /obj/structure/reagent_dispensers/watertank, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/checker, /area/station/commons/storage/emergency/port) @@ -55997,6 +57782,9 @@ dir = 1 }, /obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) "qHj" = ( @@ -56029,11 +57817,17 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/science/breakroom) -"qHs" = ( -/obj/structure/flora/bush/flowers_yw/style_random, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics) +"qHt" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) "qHz" = ( /obj/machinery/light_switch/directional/west, /obj/machinery/disposal/bin{ @@ -56047,15 +57841,12 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/white, /area/station/medical/surgery/fore) -"qHD" = ( -/obj/machinery/computer/prisoner/management, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 8 +"qHA" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/command/bridge) +/area/station/medical/virology) "qHO" = ( -/obj/machinery/bluespace_vendor/directional/south, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/chair/sofa/bench/right{ dir = 1 @@ -56091,6 +57882,20 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) +"qIx" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Personnel" + }, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/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/hop, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "qIB" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/poddoor/shutters/window{ @@ -56110,15 +57915,14 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) -"qII" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"qIP" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 }, -/obj/machinery/duct, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron/dark, -/area/station/engineering/atmos/hfr_room) +/area/station/cargo/miningdock) "qIU" = ( /turf/open/floor/iron, /area/station/commons/dorms) @@ -56132,20 +57936,58 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"qJi" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/sign/warning/radiation/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "qJv" = ( /obj/effect/turf_decal/siding/wood, /obj/item/cigbutt, /turf/open/floor/wood/large, /area/mine/eva/lower) -"qJy" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/turf_decal/siding/wood{ +"qJB" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/closet/crate/hydroponics, +/obj/item/wrench, +/obj/item/wrench, +/obj/item/grenade/chem_grenade/antiweed{ + pixel_x = 3; + pixel_y = 1 + }, +/obj/item/grenade/chem_grenade/antiweed, +/obj/item/shovel/spade, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_y = 3 + }, +/obj/item/cultivator, +/obj/item/shovel/spade, +/obj/item/reagent_containers/cup/watering_can, +/obj/machinery/airalarm/directional/north, /turf/open/floor/iron, -/area/station/service/bar) +/area/station/service/hydroponics) +"qJC" = ( +/obj/machinery/seed_extractor, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/obj/effect/turf_decal/siding/green{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "qJT" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/plating/snowed/icemoon, @@ -56182,18 +58024,24 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/plating, /area/station/security/prison/safe) -"qKk" = ( -/obj/structure/railing/corner{ +"qKn" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 +/obj/machinery/door/airlock/command/glass{ + name = "Bridge"; + dir = 4 }, -/turf/open/floor/iron/dark/side{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/area/mine/eva/lower) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron, +/area/station/command/bridge) "qKq" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -56211,21 +58059,6 @@ /obj/machinery/atmospherics/components/tank, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"qKw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table, -/obj/item/grown/log/tree, -/obj/item/grown/log/tree{ - pixel_y = 5; - pixel_x = 7 - }, -/obj/item/grown/log/tree{ - pixel_x = 7 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "qKx" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/bot, @@ -56242,18 +58075,6 @@ }, /turf/open/floor/plating/icemoon, /area/station/science/ordnance/bomb) -"qKH" = ( -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/effect/spawner/structure/window/hollow/reinforced/end, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/morgue) -"qKJ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/hallway/secondary/entry) "qKQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -56272,15 +58093,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/brig) -"qLf" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood, -/area/station/service/library) "qLg" = ( /obj/effect/spawner/random/contraband/narcotics, /obj/structure/sign/poster/contraband/syndiemoth/directional/west, @@ -56356,13 +58168,15 @@ "qLY" = ( /turf/closed/wall/r_wall, /area/station/science/xenobiology) -"qMf" = ( -/obj/effect/turf_decal/tile/blue{ +"qMk" = ( +/obj/structure/railing{ dir = 1 }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/structure/stairs/west, +/turf/open/floor/iron/stairs/medium{ + dir = 4 + }, +/area/station/science/cytology) "qMm" = ( /obj/structure/bookcase/random/adult, /turf/open/floor/wood, @@ -56377,26 +58191,16 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"qMD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/maintenance/fore) +"qMF" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/bar) "qMH" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"qMI" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/spawner/random/trash/cigbutt, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "qMN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -56409,26 +58213,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/supermatter) -"qMO" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 8 - }, -/obj/effect/landmark/start/botanist, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"qMS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/chair/wood{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "qMT" = ( /turf/closed/wall, /area/station/commons/lounge) @@ -56473,6 +58257,10 @@ dir = 10 }, /area/station/science/lab) +"qNt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "qNu" = ( /obj/machinery/light/small/directional/north, /turf/open/floor/iron/freezer, @@ -56499,27 +58287,46 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/engineering/atmos) +"qNK" = ( +/obj/item/radio/intercom/prison/directional/west, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) "qNV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/upper) -"qNX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Xenobiology Maintenance" - }, +"qNZ" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/station/maintenance/aft/greater) +/area/station/maintenance/solars/starboard/fore) +"qOj" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/aft) "qOl" = ( /turf/open/floor/wood, /area/station/maintenance/port/aft) +"qOu" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"qOx" = ( +/obj/structure/lattice, +/obj/structure/sign/departments/maint/alt/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) "qOy" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -56527,10 +58334,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/service) -"qOB" = ( -/obj/machinery/status_display/ai/directional/east, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "qOD" = ( /obj/effect/turf_decal/caution/stand_clear, /obj/effect/turf_decal/siding/dark_blue, @@ -56543,6 +58346,12 @@ }, /turf/open/floor/iron/textured_half, /area/station/ai_monitored/command/storage/eva) +"qOG" = ( +/obj/structure/table/wood, +/obj/item/plate, +/obj/effect/spawner/random/trash/bacteria, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "qOH" = ( /obj/effect/landmark/blobstart, /obj/structure/lattice/catwalk, @@ -56563,10 +58372,39 @@ dir = 1 }, /area/station/security/processing) -"qOW" = ( -/obj/structure/sign/warning/biohazard/directional/west, -/turf/open/openspace, -/area/station/medical/medbay/aft) +"qPb" = ( +/obj/structure/cable, +/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/item/kirbyplants/random, +/obj/effect/turf_decal/siding/thinplating{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light_switch/directional/north{ + pixel_y = 38 + }, +/turf/open/floor/plastic, +/area/station/commons/dorms/laundry) +"qPc" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/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, +/area/station/service/hydroponics) "qPm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56607,12 +58445,6 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"qPu" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "qPw" = ( /obj/structure/table, /obj/machinery/chem_dispenser/drinks/beer{ @@ -56620,15 +58452,10 @@ }, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"qPD" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) +"qPE" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "qPI" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -56645,13 +58472,16 @@ "qPL" = ( /turf/closed/wall/r_wall, /area/station/hallway/secondary/exit/departure_lounge) -"qPQ" = ( +"qPV" = ( /obj/structure/disposalpipe/segment{ - dir = 5 + dir = 6 }, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/structure/cable, +/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, +/area/station/service/hydroponics) "qPX" = ( /obj/structure/sink/directional/west, /obj/structure/mirror/directional/east, @@ -56677,6 +58507,12 @@ "qQf" = ( /turf/closed/wall, /area/station/maintenance/fore/lesser) +"qQk" = ( +/obj/structure/fence/cut/large{ + dir = 2 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "qQo" = ( /turf/closed/wall, /area/station/cargo/office) @@ -56712,22 +58548,25 @@ }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) "qQN" = ( /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"qQV" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/fore) "qRk" = ( /obj/item/chair/wood, /turf/open/floor/carpet, /area/station/maintenance/space_hut/cabin) +"qRo" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "qRq" = ( /obj/structure/rack, /obj/item/electronics/apc, @@ -56754,49 +58593,43 @@ /obj/structure/flora/tree/pine/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"qRF" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer, +"qRE" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/service/bar) +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) "qRO" = ( /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) -"qRR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/random/directional/south, -/obj/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "qSb" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/dark/textured, /area/station/security/prison/workout) -"qSe" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "qSh" = ( /obj/structure/sink/directional/east, /obj/structure/mirror/directional/west, /obj/effect/landmark/start/assistant, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"qSi" = ( -/obj/structure/railing/wooden_fence, -/obj/item/flashlight/lantern/on, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "qSj" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -56847,13 +58680,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/sepia, /area/station/security/prison/rec) -"qSC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "qSE" = ( /obj/machinery/door/poddoor/preopen{ id = "misclab"; @@ -56877,11 +58703,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white, /area/station/medical/virology) -"qSP" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/fore) "qST" = ( /obj/structure/table/reinforced, /obj/item/pipe_dispenser, @@ -56889,31 +58710,23 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"qSU" = ( -/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/box/red/corners{ - dir = 4 - }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "qSY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"qTj" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/sign/warning/pods/directional/west, -/obj/structure/cable, -/turf/open/floor/iron/white/corner{ - dir = 1 +"qTa" = ( +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/area/station/hallway/secondary/entry) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) +"qTf" = ( +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "qTm" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 @@ -56926,14 +58739,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) -"qTp" = ( -/obj/structure/table/wood, -/obj/item/clothing/mask/fakemoustache, -/obj/item/cigarette/pipe, -/obj/item/clothing/glasses/monocle, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "qTs" = ( /turf/open/floor/iron/showroomfloor, /area/station/security/prison/mess) @@ -56967,18 +58772,15 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"qUe" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 +"qUf" = ( +/obj/machinery/firealarm/directional/east, +/obj/item/storage/box/bodybags{ + pixel_x = 2; + pixel_y = 2 }, +/obj/structure/rack, /turf/open/floor/iron/dark, -/area/station/engineering/atmos/hfr_room) -"qUo" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/closet, -/obj/effect/spawner/random/maintenance/two, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/service/chapel) "qUr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56995,17 +58797,27 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) +"qUI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "qUL" = ( /obj/structure/closet/emcloset, /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"qUM" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/maintenance/aft/greater) +"qUQ" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) "qUS" = ( /obj/structure/railing/corner{ dir = 8 @@ -57074,13 +58886,6 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/port/lesser) -"qVG" = ( -/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/neutral/half/contrasted, -/turf/open/floor/iron, -/area/station/commons/fitness) "qVJ" = ( /obj/machinery/disposal/bin, /obj/machinery/light_switch/directional/south, @@ -57089,22 +58894,32 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/hos) +"qVK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/stairs/medium, +/area/station/commons/dorms/laundry) "qVN" = ( /obj/structure/table/glass, /obj/item/stock_parts/matter_bin, /obj/effect/spawner/random/food_or_drink/booze, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"qWh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 +"qVZ" = ( +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) +"qWe" = ( +/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/line{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "qWn" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -57184,20 +58999,13 @@ /obj/machinery/light/small/directional/south, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"qXp" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Research Division Access"; - network = list("ss13","rd") - }, -/obj/structure/sink/directional/west, -/obj/effect/turf_decal/stripes/line{ +"qXt" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/siding/yellow{ dir = 5 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/research) +/turf/open/floor/iron, +/area/station/engineering/lobby) "qXF" = ( /obj/machinery/computer/station_alert, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -57207,10 +59015,6 @@ /obj/structure/flora/bush/jungle/c/style_random, /turf/open/floor/grass, /area/station/medical/virology) -"qXY" = ( -/obj/effect/spawner/random/trash, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "qYb" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ @@ -57235,6 +59039,24 @@ }, /turf/open/floor/iron, /area/station/science/robotics/lab) +"qYx" = ( +/obj/item/trapdoor_remote/preloaded{ + pixel_y = 17; + name = "corpse trapdoor remote" + }, +/obj/structure/rack{ + pixel_y = 12; + pixel_x = -1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/caution/red{ + pixel_y = -14 + }, +/obj/structure/noticeboard/cmo{ + pixel_y = 36 + }, +/turf/open/floor/iron/white/textured, +/area/station/medical/medbay/central) "qYz" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -57252,18 +59074,16 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) -"qYC" = ( -/obj/machinery/door/window/right/directional/south{ - req_access = list("kitchen"); - name = "The Ice Box" +"qYF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 }, -/obj/structure/sign/warning/cold_temp/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/obj/structure/sign/departments/chemistry/directional/north, +/obj/structure/railing/corner{ dir = 1 }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "qYP" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -57283,6 +59103,12 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"qYR" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "qYV" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/machinery/door/firedoor, @@ -57293,11 +59119,25 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"qYW" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "qYZ" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/machinery/newscaster/directional/south, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"qZg" = ( +/obj/structure/table/wood, +/obj/structure/reagent_dispensers/beerkeg, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "qZh" = ( /obj/structure/table, /obj/item/folder/white, @@ -57316,11 +59156,10 @@ /turf/open/floor/iron/dark, /area/station/medical/treatment_center) "qZG" = ( -/obj/structure/fence/corner{ - dir = 5 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "qZN" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/freezerchamber) @@ -57339,6 +59178,12 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/textured, /area/mine/mechbay) +"qZZ" = ( +/obj/structure/marker_beacon/yellow, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "rab" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -57373,10 +59218,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) -"raq" = ( -/obj/structure/fence/corner, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "ras" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -57416,6 +59257,11 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/command/teleporter) +"raQ" = ( +/mob/living/basic/pet/penguin/baby/permanent, +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "raT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, @@ -57442,13 +59288,6 @@ /obj/structure/closet, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"rbh" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "rbm" = ( /obj/machinery/camera/directional/east{ c_tag = "MiniSat External NorthWest"; @@ -57457,10 +59296,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"rbp" = ( -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "rbs" = ( /obj/effect/turf_decal/tile/yellow, /obj/machinery/light/directional/east, @@ -57470,23 +59305,19 @@ /turf/closed/wall, /area/station/command/heads_quarters/qm) "rbE" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "rbT" = ( /obj/structure/ore_box, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"rbU" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "botany_apiary"; - name = "Apiary Shutters" - }, -/turf/open/floor/plating, -/area/station/service/hydroponics) "rbY" = ( /obj/structure/table/reinforced, /obj/item/pipe_dispenser, @@ -57523,84 +59354,45 @@ }, /turf/open/floor/iron, /area/station/science/explab) -"rcx" = ( -/obj/machinery/light/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/displaycase, -/obj/effect/turf_decal/tile/dark/fourcorners, -/turf/open/floor/iron, -/area/mine/living_quarters) -"rcD" = ( -/turf/open/floor/carpet/lone, -/area/station/service/chapel) "rcE" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/hallway/primary/central) -"rcN" = ( -/obj/effect/turf_decal/siding/yellow{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) -"rcO" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/ai_monitored/turret_protected/ai) "rcP" = ( /obj/effect/turf_decal/bot_white/right, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/gateway) -"rcU" = ( -/obj/structure/table/optable, -/obj/effect/decal/cleanable/xenoblood, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"rcS" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "rcY" = ( /obj/structure/fence{ dir = 4 }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"rdl" = ( -/obj/machinery/button/door/directional/east{ - id = "misclab"; - name = "Test Chamber Blast Doors"; - pixel_y = 6; - req_access = list("xenobiology") - }, -/obj/machinery/button/door/directional/east{ - id = "xenobiomain"; - name = "Xenobiology Containment Blast Door"; - pixel_y = -6; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "rdn" = ( /obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/port) -"rdq" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/spawner/random/trash/mopbucket, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"rdv" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 +"rds" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 }, +/obj/machinery/duct, +/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/east{ + id = "minecraft_shutter"; + name = "Cart Access" + }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) "rdw" = ( @@ -57614,6 +59406,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) +"rdJ" = ( +/obj/structure/fence/corner{ + dir = 5 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "rea" = ( /obj/structure/table, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -57621,6 +59419,23 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) +"reb" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "ree" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57643,12 +59458,45 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"reu" = ( -/obj/structure/fence/corner{ - dir = 8 +"rep" = ( +/obj/structure/table, +/obj/machinery/button/door{ + pixel_x = -6; + pixel_y = -1; + req_access = list("rd"); + id = "misclab"; + name = "Specimen Chamber Control" }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/obj/machinery/button/door{ + pixel_x = -6; + pixel_y = 9; + req_access = list("rd"); + id = "xenobiomain"; + name = "Xenobiology Control" + }, +/obj/machinery/button/door{ + pixel_x = 6; + pixel_y = -1; + req_access = list("rd"); + id = "rd_office_shutters"; + name = "Privacy Control" + }, +/obj/machinery/button/door{ + pixel_x = 6; + pixel_y = 9; + id = "rnd2"; + name = "Ordnance Control"; + req_access = list("rd") + }, +/turf/open/floor/iron/white/corner{ + dir = 1 + }, +/area/station/command/heads_quarters/rd) +"res" = ( +/obj/structure/ladder, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/engineering/lobby) "rex" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 8 @@ -57687,13 +59535,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/science/xenobiology) -"reX" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "rfh" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -57703,16 +59544,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) -"rfj" = ( -/obj/structure/frame/computer{ - dir = 1 - }, -/obj/item/radio/intercom/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) "rfo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57720,10 +59551,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/psychology) -"rft" = ( -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) "rfu" = ( /turf/closed/wall/r_wall, /area/station/security/prison/rec) @@ -57732,6 +59559,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"rfQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "rfR" = ( /obj/machinery/telecomms/bus/preset_two, /turf/open/floor/circuit/telecomms/mainframe, @@ -57740,16 +59573,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"rfW" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/dorms) -"rgi" = ( -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "rgl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/disposalpipe/segment, @@ -57786,6 +59609,13 @@ /obj/item/stack/package_wrap, /turf/open/floor/wood/large, /area/mine/eva/lower) +"rgq" = ( +/obj/structure/minecart_rail{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "rgs" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -57808,34 +59638,19 @@ "rgE" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/hfr_room) -"rgM" = ( -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/turf/open/floor/iron, -/area/station/commons/dorms) "rhf" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /obj/machinery/door/poddoor/preopen{ id = "hosspace"; - name = "Space Shutters" + name = "Privacy Shutters" }, -/obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) -"rhi" = ( -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/research{ - name = "Ordnance Lab" - }, -/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/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/ordnance/office) +"rhv" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/fore) "rhF" = ( /obj/machinery/camera/directional/north{ c_tag = "Security - Permabrig Observation North"; @@ -57843,24 +59658,20 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"rhP" = ( -/obj/machinery/flasher/directional/north{ - id = "Cell 2" - }, -/obj/structure/bed{ - dir = 1; - pixel_x = -2 - }, -/turf/open/floor/iron/smooth, -/area/station/security/brig) -"rhS" = ( -/obj/structure/disposalpipe/segment, +"rhG" = ( /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/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) +"rhJ" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "rhY" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/turf_decal/box/red, @@ -57900,59 +59711,55 @@ /turf/open/floor/iron, /area/station/security/brig/upper) "riB" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/obj/machinery/door/airlock{ - name = "Bar" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 +/obj/machinery/computer/records/security, +/obj/machinery/computer/security/telescreen/normal/directional/north, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 }, -/area/station/service/bar) +/area/station/security/brig/entrance) "riL" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/mine/living_quarters) -"riM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table, -/obj/item/food/grown/carrot, -/obj/item/food/grown/carrot{ - pixel_y = 4; - pixel_x = -2 +"riW" = ( +/obj/item/toy/snowball{ + pixel_x = 9; + pixel_y = 1 }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) -"riT" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on, -/turf/open/floor/plating/snowed/icemoon, -/area/station/maintenance/port/aft) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "rja" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/paper/carbon, /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron, /area/mine/living_quarters) -"rjh" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/iron/dark, -/area/station/engineering/main) -"rji" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/chair/wood{ +"rjb" = ( +/obj/structure/railing{ dir = 1 }, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/lattice/catwalk, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) +"rjd" = ( +/obj/structure/table, +/obj/machinery/computer/security/telescreen/isolation/directional/south, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/suit/jacket/straight_jacket{ + pixel_x = 6 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Security - Permabrig Prep"; + network = list("ss13","prison"); + view_range = 5 + }, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/smooth, +/area/station/security/execution/transfer) "rjr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/plating, @@ -57965,17 +59772,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"rjC" = ( -/obj/vehicle/ridden/wheelchair{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/end, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/sign/warning/no_smoking/circle/directional/west, -/obj/structure/disposalpipe/segment, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/large, -/area/station/medical/medbay/aft) "rjE" = ( /obj/structure/fluff/tram_rail{ pixel_y = 17 @@ -57983,43 +59779,18 @@ /obj/structure/fluff/tram_rail, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"rjH" = ( -/obj/machinery/camera/directional/west{ - c_tag = "MiniSat Antechamber"; - network = list("minisat"); - start_active = 1 - }, -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/aisat/atmos"; - name = "Atmospherics Turret Control"; - pixel_x = -27; - req_access = list("minisat") - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "rjK" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/effect/turf_decal/bot/right, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) "rjP" = ( /obj/structure/sign/poster/official/random/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"rjT" = ( -/obj/machinery/button/door/directional/west{ - id = "xenobio3"; - name = "Xenobio Pen 3 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "rkc" = ( /obj/effect/turf_decal/siding/yellow, /obj/effect/turf_decal/siding/yellow{ @@ -58027,16 +59798,34 @@ }, /turf/open/floor/iron, /area/station/engineering/storage) -"rkd" = ( -/obj/effect/spawner/random/structure/chair_flipped, -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/plaques/kiddie/perfect_drone{ - pixel_x = 32 +"rkh" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/turf/open/floor/iron/checker, -/area/station/maintenance/port/fore) +/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) +"rkk" = ( +/obj/structure/rack, +/obj/item/clothing/shoes/winterboots/ice_boots/eva{ + pixel_y = 2 + }, +/obj/item/clothing/suit/hooded/wintercoat/eva{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/delivery/red, +/obj/machinery/camera/directional/north{ + c_tag = "Arrivals Emergency EVA" + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) "rkl" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -58046,10 +59835,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"rkm" = ( -/obj/structure/chair/stool, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"rkp" = ( +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "rkt" = ( /obj/structure/cable, /obj/machinery/light/directional/east, @@ -58059,6 +59853,30 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"rkz" = ( +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"rkH" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/solars/starboard/aft) +"rkI" = ( +/obj/machinery/door/airlock/command{ + name = "Captain's Office" + }, +/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/effect/mapping_helpers/airlock/access/all/command/captain, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "rkK" = ( /obj/machinery/suit_storage_unit/cmo, /turf/open/floor/iron/dark, @@ -58077,14 +59895,26 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"rlb" = ( -/obj/structure/sign/warning/secure_area/directional/west, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 +"rkV" = ( +/obj/structure/railing, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 3 }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/item/multitool{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/assembly/signaler{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) "rlf" = ( /obj/effect/spawner/random/structure/steam_vent, /obj/structure/cable, @@ -58095,36 +59925,45 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"rlA" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 +"rlq" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/plating, -/area/station/medical/morgue) -"rlE" = ( -/obj/item/radio/intercom/directional/east, -/obj/machinery/computer/slot_machine{ - name = "two-armed bandit" +/obj/structure/railing, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) +"rlt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/service/chapel) +"rlu" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) +"rlB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"rlH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/engineering/tracking_beacon, /obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"rlL" = ( -/obj/machinery/light_switch/directional/north{ - pixel_x = -7 +/area/station/maintenance/starboard/lesser) +"rlE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/white{ + dir = 8 }, -/obj/structure/table, -/obj/item/stock_parts/power_store/cell/high/empty, -/obj/machinery/cell_charger, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "rlS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58136,18 +59975,6 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/commons/dorms) -"rlX" = ( -/obj/structure/closet/secure_closet/chemical, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/warning/no_smoking/circle/directional/west, -/turf/open/floor/iron/white, -/area/station/maintenance/port/fore) "rmn" = ( /obj/structure/chair/stool/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -58155,21 +59982,6 @@ }, /turf/open/floor/carpet, /area/station/commons/dorms) -"rmp" = ( -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/white, -/area/station/science/ordnance) -"rms" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/paper_bin{ - pixel_y = 6 - }, -/obj/item/taperecorder{ - pixel_x = 9 - }, -/turf/open/floor/iron/dark, -/area/station/science/explab) "rmv" = ( /obj/structure/rack, /obj/item/wrench, @@ -58194,44 +60006,18 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/dark/textured_half, /area/mine/mechbay) -"rmG" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ - name = "Burn Chamber Exterior Airlock" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) -"rmM" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/wood, -/area/station/command/meeting_room) -"rmR" = ( -/obj/effect/spawner/random/trash/mess, +"rmP" = ( /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"rmU" = ( -/obj/effect/spawner/random/trash/graffiti, -/obj/structure/sign/poster/contraband/free_drone/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "rmZ" = ( /obj/machinery/iv_drip, /obj/structure/mirror/broken/directional/north, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"rnb" = ( -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/textured, -/area/station/security/brig) -"rng" = ( -/obj/machinery/light/cold/directional/west, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "rnh" = ( /obj/machinery/door/airlock{ name = "Observatory Access" @@ -58246,6 +60032,12 @@ /obj/structure/railing, /turf/open/floor/iron, /area/mine/production) +"rnp" = ( +/obj/machinery/door/poddoor/incinerator_atmos_main{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "rns" = ( /obj/structure/table/reinforced, /obj/item/aicard{ @@ -58263,11 +60055,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"rnu" = ( -/obj/machinery/light/small/directional/east, -/obj/structure/sign/warning/secure_area/directional/east, -/turf/open/floor/engine, -/area/station/science/explab) "rnx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58284,18 +60071,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"roa" = ( -/obj/structure/toilet{ - pixel_y = 8 - }, -/obj/machinery/button/door/directional/north{ - id = "Lakeview_Bathroom"; - pixel_x = 22; - pixel_y = -10; - req_access = list("robotics") - }, -/turf/open/floor/iron/freezer, -/area/mine/eva/lower) "roj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58309,13 +60084,41 @@ /obj/machinery/telecomms/processor/preset_one, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"roq" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/closet, -/obj/effect/spawner/random/clothing/gloves, -/obj/effect/spawner/random/trash/janitor_supplies, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) +"ros" = ( +/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{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/hallway/secondary/service) +"rou" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Research Break 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/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/science/breakroom) "rox" = ( /obj/structure/table, /obj/effect/spawner/round_default_module, @@ -58354,10 +60157,6 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron, /area/station/science/explab) -"roW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) "roX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -58367,16 +60166,6 @@ /obj/structure/closet/athletic_mixed, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"rpi" = ( -/turf/closed/wall/ice, -/area/icemoon/underground/explored/graveyard) -"rpu" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "rpC" = ( /obj/structure/railing{ dir = 1 @@ -58400,22 +60189,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark/textured, /area/station/engineering/engine_smes) -"rpG" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"rpJ" = ( -/obj/structure/minecart_rail{ - dir = 10 - }, -/obj/structure/cable, -/obj/structure/sign/warning/directional/south, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/snowed/coldroom, -/area/icemoon/underground/explored) "rpK" = ( /obj/structure/chair/pew/left{ dir = 1 @@ -58484,15 +60257,11 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) -"rqn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/obj/structure/rack, -/obj/machinery/camera/directional/south{ - c_tag = "Chapel Electrical Maintenace Lower" - }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/department/chapel) +"rqk" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/structure/sign/poster/contraband/free_drone/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "rqD" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -58506,13 +60275,6 @@ }, /turf/open/floor/plating, /area/station/engineering/engine_smes) -"rqG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/commons/lounge) "rqH" = ( /obj/structure/closet/crate, /obj/item/stack/sheet/leather, @@ -58532,20 +60294,24 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/lobby) -"rqQ" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Service - Kitchen" - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 +"rqN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) +"rqR" = ( +/obj/machinery/biogenerator, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 }, -/obj/machinery/airalarm/directional/east, -/obj/structure/table, -/obj/machinery/processor{ - pixel_y = 6 +/obj/effect/turf_decal/siding/green{ + dir = 5 }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "rqY" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 9 @@ -58553,26 +60319,22 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark, /area/station/medical/virology) -"rra" = ( -/obj/machinery/modular_computer/preset/cargochat/service, -/obj/machinery/requests_console/auto_name/directional/north, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/siding/dark, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) -"rrf" = ( -/obj/structure/table/wood, -/obj/item/storage/crayons, -/obj/item/storage/fancy/candle_box{ - pixel_y = 5 +"rrg" = ( +/obj/structure/table/glass, +/obj/item/storage/bag/plants/portaseeder, +/obj/item/plant_analyzer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"rrh" = ( +/obj/structure/fence/post{ + dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/service/chapel/office) -"rrl" = ( -/obj/item/stack/sheet/mineral/wood, -/obj/effect/decal/cleanable/generic, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "rrn" = ( /obj/structure/closet/emcloset, /obj/structure/sign/poster/contraband/random/directional/north, @@ -58587,19 +60349,39 @@ }, /turf/open/floor/glass/reinforced, /area/station/hallway/primary/starboard) -"rrL" = ( -/obj/effect/turf_decal/siding/wood{ +"rrB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) +"rrR" = ( +/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/duct, -/turf/open/floor/wood/large, -/area/station/service/bar) +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/machinery/holopad, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "rrV" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end, /turf/open/floor/plating, /area/mine/eva) +"rsf" = ( +/obj/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"rsh" = ( +/obj/structure/sign/poster/contraband/the_big_gas_giant_truth/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "rsw" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -58611,6 +60393,34 @@ dir = 1 }, /area/station/hallway/secondary/entry) +"rsy" = ( +/obj/item/training_toolbox{ + pixel_y = 5 + }, +/obj/structure/table, +/obj/item/training_toolbox{ + pixel_y = -2 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Holodeck Control" + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness) +"rsG" = ( +/obj/item/toy/snowball{ + pixel_x = -11; + pixel_y = -2 + }, +/obj/structure/sign/warning/secure_area{ + pixel_y = 32 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "rsL" = ( /obj/structure/cable, /turf/open/floor/circuit, @@ -58636,6 +60446,18 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) +"rsV" = ( +/obj/machinery/door/airlock{ + id_tag = "Dorm1"; + name = "Dorm 1" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) "rsW" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/green/visible, @@ -58644,6 +60466,19 @@ "rsY" = ( /turf/closed/wall/r_wall, /area/mine/eva) +"rtf" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"rth" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/security/courtroom) "rtn" = ( /obj/structure/chair/comfy/black, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58666,6 +60501,7 @@ "rtq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil, +/obj/item/radio/intercom/directional/south, /turf/open/floor/iron/checker, /area/station/maintenance/port/fore) "rtt" = ( @@ -58679,6 +60515,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"rtw" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "rty" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58744,23 +60584,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"ruQ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"ruX" = ( -/obj/structure/closet/lasertag/red, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/iron, -/area/station/commons/fitness) "ruZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer3, @@ -58785,13 +60608,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"rvO" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/item/kirbyplants/organic/plant2, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "rvS" = ( /obj/structure/rack, /obj/item/poster/random_contraband, @@ -58799,12 +60615,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"rvW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/port/greater) "rvZ" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron, @@ -58817,33 +60627,24 @@ }, /turf/open/openspace, /area/station/engineering/atmos/storage) -"rwk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ - color = "#ff0000"; - dir = 4; - name = "Scrubbers multi deck pipe adapter" +"rwn" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Personnel" }, -/turf/open/floor/plating, -/area/station/medical/chemistry) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/command/hop, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "rwt" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 6 }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"rwu" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/sign/poster/official/random/directional/south, -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron/dark/textured_edge{ - dir = 1 - }, -/area/station/security/prison) "rwB" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible, /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ @@ -58868,11 +60669,14 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron, /area/mine/laborcamp) -"rwW" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/gas_mask, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) +"rwZ" = ( +/obj/structure/sign/departments/botany/directional/east, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "rxa" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible{ dir = 1 @@ -58895,6 +60699,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"rxx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/camera/directional/east{ + c_tag = "Atmospherics - HFR Decontamination Chamber" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/hfr_room) "rxz" = ( /obj/structure/girder, /turf/open/floor/plating/snowed/icemoon, @@ -58906,23 +60718,8 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"rxM" = ( -/obj/machinery/door/poddoor/preopen{ - id = "xenobio8"; - name = "Xenobio Pen 8 Blast Door" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) -"rxV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, +"rxJ" = ( +/turf/open/floor/glass, /area/station/service/hydroponics) "rxW" = ( /turf/closed/mineral/random/snow, @@ -58930,17 +60727,6 @@ "rxY" = ( /turf/closed/wall, /area/station/service/bar/backroom) -"rya" = ( -/obj/machinery/door/airlock/command{ - name = "Head of Personnel" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/command/hop, -/obj/machinery/door/firedoor, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "ryf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58948,6 +60734,31 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"ryl" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "Cargo_Store_In"; + name = "Cargo Warehouse Shutters" + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"ryn" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/rnd/production/techfab/department/service, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "ryu" = ( /turf/open/floor/iron/dark/textured, /area/station/security/execution/transfer) @@ -58966,6 +60777,10 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) +"ryJ" = ( +/obj/machinery/light/small/directional/east, +/turf/open/openspace, +/area/station/service/hydroponics) "ryM" = ( /obj/structure/rack, /obj/item/pickaxe, @@ -58979,12 +60794,6 @@ /obj/effect/turf_decal/delivery/red, /turf/open/floor/iron/textured, /area/station/hallway/secondary/entry) -"ryX" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) "rzj" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty{ @@ -58994,25 +60803,6 @@ /obj/item/stack/sheet/iron/fifty, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"rzm" = ( -/obj/structure/sign/departments/cargo, -/turf/closed/wall, -/area/station/cargo/lobby) -"rzq" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "rzz" = ( /obj/machinery/door/airlock/command{ name = "Server Room" @@ -59059,17 +60849,14 @@ /obj/machinery/digital_clock/directional/south, /turf/open/openspace, /area/station/medical/medbay/lobby) -"rzY" = ( -/obj/structure/table/wood, -/obj/item/raptor_dex{ - pixel_y = 13 - }, -/obj/item/raptor_dex{ - pixel_y = 7 - }, -/obj/item/raptor_dex, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) +"rzV" = ( +/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/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "rAr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59083,23 +60870,6 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) -"rAx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/machinery/duct, -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/service/kitchen/coldroom) "rAA" = ( /obj/machinery/pdapainter, /turf/open/floor/iron, @@ -59116,15 +60886,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"rAL" = ( -/obj/structure/rack, -/obj/item/crowbar/red, -/obj/item/wrench, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat/maint) "rAO" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -59144,6 +60905,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) +"rAY" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/service/bar) "rAZ" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark/smooth_large, @@ -59159,12 +60928,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) -"rBp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall, -/area/station/service/library) "rBv" = ( /obj/structure/chair/stool/directional/north, /obj/item/storage/toolbox/artistic{ @@ -59172,14 +60935,27 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"rBy" = ( -/obj/structure/closet/crate, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/item/stack/license_plates/empty/fifty, -/obj/item/stack/license_plates/empty/fifty, -/obj/item/stack/license_plates/empty/fifty, -/turf/open/floor/iron/dark/smooth_half, -/area/station/security/prison/work) +"rBz" = ( +/obj/machinery/computer/order_console/cook{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) +"rBJ" = ( +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/structure/rack, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "rBL" = ( /obj/machinery/light/directional/west, /turf/open/openspace, @@ -59217,6 +60993,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) +"rCs" = ( +/obj/structure/table, +/obj/item/food/deadmouse{ + pixel_y = 18; + pixel_x = 13 + }, +/obj/structure/microscope, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "rCu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/landmark/start/hangover, @@ -59355,42 +61140,6 @@ dir = 10 }, /area/mine/eva) -"rDq" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/table, -/obj/item/clothing/head/utility/welding{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/clothing/head/utility/welding{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/clothing/head/utility/welding, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/poster/official/safety_internals/directional/east, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) -"rDH" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/research) -"rDI" = ( -/obj/item/toy/plush/lizard_plushie{ - name = "Wines-And-Dines"; - pixel_x = 4 - }, -/obj/item/reagent_containers/cup/glass/bottle{ - pixel_x = -9 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "rDJ" = ( /obj/structure/ladder{ name = "upper dispenser access" @@ -59399,9 +61148,12 @@ /turf/open/floor/iron/dark/textured_large, /area/station/medical/treatment_center) "rDN" = ( -/obj/structure/no_effect_signpost, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/bar{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "rDO" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed, @@ -59417,18 +61169,6 @@ "rDZ" = ( /turf/open/floor/engine, /area/station/science/explab) -"rEd" = ( -/obj/machinery/modular_computer/preset/research{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/sign/plaques/kiddie/gameoflife{ - pixel_x = -32 - }, -/turf/open/floor/iron/smooth_corner, -/area/station/command/heads_quarters/rd) "rEe" = ( /obj/structure/closet{ name = "evidence closet 4" @@ -59449,18 +61189,11 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"rEj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/science/ordnance) -"rEn" = ( -/obj/structure/railing/wooden_fence{ - dir = 4 - }, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) +"rEo" = ( +/obj/structure/dresser, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain) "rEp" = ( /obj/structure/table, /obj/item/hand_labeler, @@ -59470,17 +61203,31 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"rEt" = ( -/obj/machinery/seed_extractor, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 +"rEq" = ( +/obj/structure/beebox, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 }, -/obj/effect/turf_decal/siding/white{ - dir = 8 +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 }, -/turf/open/floor/iron, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, /area/station/service/hydroponics) +"rEr" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "Supply Dock Loading Door"; + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "rEx" = ( /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark, @@ -59492,12 +61239,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"rEH" = ( -/obj/item/chair/stool/bar{ - pixel_y = -2 +"rEM" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, +/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/starboard/fore) "rEP" = ( @@ -59507,21 +61256,21 @@ }, /turf/open/floor/iron/dark/side, /area/station/security/processing) +"rES" = ( +/obj/effect/turf_decal/siding/brown/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) "rEU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"rEY" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/structure/displaycase/forsale/kitchen, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "rFb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -59534,6 +61283,12 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/mining) +"rFh" = ( +/obj/structure/girder, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/mine/eva/lower) "rFD" = ( /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, @@ -59552,6 +61307,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/fore) +"rFU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "rGd" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -59562,6 +61323,15 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/engine/cult, /area/station/service/library) +"rGf" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "rGh" = ( /obj/machinery/recharge_station, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -59600,6 +61370,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"rGY" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/office) "rHc" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red{ @@ -59607,6 +61382,9 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"rHi" = ( +/turf/open/openspace/xenobio, +/area/station/science/xenobiology) "rHk" = ( /obj/machinery/exodrone_launcher, /obj/item/exodrone{ @@ -59622,21 +61400,17 @@ /obj/effect/turf_decal/trimline/yellow/mid_joiner, /turf/open/floor/iron/smooth_large, /area/station/cargo/drone_bay) -"rHo" = ( +"rHx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) -"rHr" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/machinery/duct, +/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, -/obj/structure/sign/warning/electric_shock/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/virology) +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "rHz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/blue/filled/line, @@ -59659,11 +61433,6 @@ /obj/effect/spawner/random/food_or_drink/snack/lizard, /turf/open/floor/iron, /area/station/security/prison/mess) -"rHI" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/virology) "rHQ" = ( /obj/machinery/computer/message_monitor{ dir = 4 @@ -59673,23 +61442,6 @@ }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"rHR" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Chapel Maintenance External Airlock"; - opacity = 0 - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/department/chapel) "rHZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -59704,14 +61456,12 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/cryo) -"rIr" = ( -/obj/machinery/vending/cigarette, -/obj/structure/sign/departments/telecomms/directional/west, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) +"rIz" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/smooth, +/area/station/maintenance/fore/lesser) "rIF" = ( /obj/effect/turf_decal/trimline/dark_blue/line, /obj/machinery/camera/directional/south{ @@ -59720,16 +61470,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"rII" = ( -/obj/machinery/vending/wardrobe/atmos_wardrobe, -/obj/effect/turf_decal/stripes/end, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) -"rIS" = ( -/obj/structure/flora/rock/icy/style_random, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/unexplored/rivers/deep/shoreline) +"rIH" = ( +/obj/structure/chair/stool/directional/south, +/obj/structure/sign/poster/official/work_for_a_future/directional/west, +/turf/open/floor/iron, +/area/station/security/prison/visit) "rIU" = ( /turf/open/floor/iron/white, /area/station/science/robotics/lab) @@ -59743,6 +61488,19 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/engineering/main) +"rJc" = ( +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/machinery/light/small/red/directional/north, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "rJe" = ( /obj/machinery/door/window/left/directional/east{ name = "Containment Pen 1"; @@ -59775,18 +61533,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/maintenance/fore/lesser) -"rJX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/textured, -/area/station/service/hydroponics) "rKs" = ( /obj/structure/chair/stool/directional/south, -/obj/structure/sign/poster/official/work_for_a_future/directional/north, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /obj/machinery/light/small/dim/directional/west, +/obj/structure/sign/poster/official/work_for_a_future/directional/west, /turf/open/floor/iron, /area/mine/laborcamp) "rKv" = ( @@ -59797,35 +61551,21 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"rKQ" = ( -/obj/structure/mineral_door/wood{ - name = "Maintenance Bar" - }, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) -"rKX" = ( -/obj/machinery/camera{ - c_tag = "Surgery B"; - network = list("ss13","medbay"); - pixel_x = 22 - }, -/obj/machinery/vending/wallmed/directional/south, -/obj/structure/cable, -/obj/structure/table/glass, -/obj/item/stack/sticky_tape/surgical, -/obj/item/stack/medical/bone_gel, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/surgery/aft) -"rKZ" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +"rKZ" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, /obj/structure/cable, /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron, /area/station/science/xenobiology) +"rLl" = ( +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "rLo" = ( /turf/open/floor/plating, /area/station/cargo/miningdock) @@ -59841,6 +61581,21 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/cargo/office) +"rLL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/machinery/holopad, +/obj/effect/landmark/start/depsec/medical, +/obj/machinery/computer/security/telescreen/med_sec/directional/east, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/checkpoint/medical) "rLX" = ( /obj/item/target, /obj/item/target/syndicate, @@ -59854,10 +61609,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"rMm" = ( -/obj/machinery/airalarm/directional/west, -/turf/open/openspace, -/area/station/service/bar/atrium) "rMr" = ( /obj/structure/chair{ dir = 8 @@ -59908,6 +61659,7 @@ /obj/item/pen, /obj/effect/turf_decal/tile/blue/full, /obj/machinery/light/small/directional/north, +/obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/cmo) "rMY" = ( @@ -59941,6 +61693,13 @@ dir = 4 }, /area/mine/living_quarters) +"rNn" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "rNz" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59957,6 +61716,15 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"rNK" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/science/ordnance) "rNQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -59967,12 +61735,13 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"rNV" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/disposalpipe/segment, -/obj/structure/railing/corner/end/flip, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"rNZ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "rOb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59986,10 +61755,25 @@ /obj/structure/closet/toolcloset, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"rOz" = ( -/obj/structure/flora/grass/brown/style_random, -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) +"rOv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"rOw" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Kitchen Maintenance" + }, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) +"rOx" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/coldroom, +/area/station/service/kitchen/coldroom) "rOA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -60022,18 +61806,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/mine/eva) -"rOH" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/structure/sink/directional/south, -/obj/machinery/camera{ - c_tag = "Virology Break Room"; - dir = 1; - network = list("ss13","medbay") +"rOL" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/floor/iron/dark, -/area/station/medical/virology) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "rOU" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, @@ -60043,25 +61824,6 @@ /obj/structure/closet/toolcloset, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"rPn" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, -/obj/machinery/camera{ - c_tag = "Atmospherics - South East"; - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer1{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"rPp" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/fake_stairs/wood/directional/north, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "rPL" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -60074,6 +61836,19 @@ "rQf" = ( /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"rQh" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Chapel Maintenance External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel) "rQl" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner, @@ -60086,12 +61861,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) -"rQs" = ( -/obj/structure/fence/corner{ - dir = 8 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "rQw" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -60153,6 +61922,30 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"rRd" = ( +/obj/item/storage/toolbox/electrical{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/machinery/button/door/directional/east{ + id = "eva_shutters"; + req_access = list("command") + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/light_switch/directional/east{ + pixel_y = -6 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/storage/toolbox/emergency, +/obj/structure/rack, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) "rRk" = ( /obj/structure/table, /obj/item/storage/belt/utility, @@ -60172,29 +61965,30 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) -"rRs" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ +"rRn" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/warehouse) +"rRt" = ( +/obj/effect/turf_decal/tile/bar{ dir = 4 }, -/obj/machinery/camera/directional/east{ - c_tag = "Service - Botany Upper Entrance" - }, -/obj/structure/table/glass, -/obj/machinery/fax/auto_name, /turf/open/floor/iron, -/area/station/service/hydroponics) -"rRu" = ( -/obj/structure/table/wood, -/obj/item/toy/mecha/honk{ - pixel_y = 12 +/area/station/hallway/primary/starboard) +"rRA" = ( +/obj/structure/ladder{ + name = "chemistry lab access" }, -/obj/structure/sign/poster/contraband/random/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/grimy, -/area/station/service/theater) +/obj/effect/turf_decal/stripes/end, +/obj/structure/sign/departments/chemistry/directional/north, +/obj/effect/turf_decal/tile/yellow/full, +/obj/machinery/door/window/left/directional/south{ + name = "Chemistry Lab Access Hatch"; + req_access = list("plumbing") + }, +/turf/open/floor/iron/white/textured_large, +/area/station/medical/treatment_center) "rRM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60202,6 +61996,17 @@ /obj/machinery/light/floor, /turf/open/floor/iron/smooth, /area/station/security/brig/upper) +"rRN" = ( +/obj/structure/railing, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"rRT" = ( +/obj/structure/cable, +/obj/structure/minecart_rail{ + dir = 1 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "rSe" = ( /obj/structure/rack, /obj/effect/spawner/random/clothing/costume, @@ -60220,11 +62025,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"rSu" = ( -/turf/open/floor/iron/white/side{ - dir = 8 - }, -/area/station/science/xenobiology) "rSx" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -60261,36 +62061,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"rSQ" = ( -/obj/item/toy/snowball{ - pixel_x = -11; - pixel_y = -2 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"rST" = ( -/obj/structure/marker_beacon/cerulean, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "rSW" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"rSZ" = ( -/obj/effect/mapping_helpers/airlock/access/all/science/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external/glass{ - name = "Cytology External Airlock" - }, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) -"rTs" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "rTt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -60322,16 +62096,16 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/security/processing) -"rUa" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/line{ +"rTZ" = ( +/obj/machinery/light/floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/railing/corner/end/flip{ dir = 1 }, -/obj/structure/sign/nanotrasen{ - pixel_y = -32 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) +/turf/open/floor/iron, +/area/station/cargo/storage) "rUb" = ( /obj/structure/railing, /obj/machinery/flasher/portable, @@ -60349,15 +62123,6 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"rUv" = ( -/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/machinery/firealarm/directional/east, -/turf/open/floor/iron/white/corner{ - dir = 4 - }, -/area/station/hallway/secondary/entry) "rUy" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -60366,6 +62131,9 @@ /obj/effect/turf_decal/bot, /obj/machinery/light/small/directional/east, /mob/living/simple_animal/bot/mulebot, +/obj/machinery/status_display/supply{ + pixel_x = 32 + }, /turf/open/floor/iron, /area/station/cargo/storage) "rUz" = ( @@ -60379,6 +62147,18 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"rUQ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/beakers{ + pixel_y = 7 + }, +/obj/item/assembly/igniter{ + pixel_y = -3 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/station/medical/chem_storage) "rUR" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -60441,16 +62221,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"rVt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/table_or_rack, -/obj/effect/spawner/random/engineering/toolbox, -/obj/effect/spawner/random/engineering/toolbox, -/obj/effect/turf_decal/siding/wood, -/obj/effect/spawner/random/trash/janitor_supplies, -/turf/open/floor/iron/grimy, -/area/station/commons/vacant_room/office) "rVA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60476,6 +62246,13 @@ /obj/item/storage/backpack, /turf/open/floor/plastic, /area/station/commons/dorms/laundry) +"rVE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "rVV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -60490,14 +62267,23 @@ /obj/structure/cable, /turf/open/floor/iron, /area/mine/laborcamp) -"rWh" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 10 - }, -/turf/open/misc/dirt{ - initial_gas_mix = "ICEMOON_ATMOS" +"rWg" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/table/glass, +/obj/item/folder/white, +/obj/item/stamp/head/cmo, +/obj/item/clothing/neck/stethoscope, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/camera/directional/north{ + c_tag = "Chief Medical Office South"; + network = list("ss13","medbay") }, -/area/icemoon/underground/explored/graveyard) +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) +"rWm" = ( +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "rWn" = ( /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, @@ -60508,15 +62294,39 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"rWA" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 +"rWH" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Chemistry Lab Utilities" }, -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/turf/open/floor/iron/smooth, +/area/station/maintenance/department/medical/central) +"rWI" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/obj/structure/table/glass, +/obj/machinery/light/small/directional/east, +/obj/machinery/firealarm/directional/east, +/obj/item/food/grown/poppy{ + pixel_y = -1; + pixel_x = 3 + }, +/obj/item/food/grown/poppy/geranium{ + pixel_y = 5; + pixel_x = 2 + }, +/obj/item/food/grown/poppy/lily{ + pixel_x = -2 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "rWO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -60611,34 +62421,28 @@ }, /turf/open/floor/iron/large, /area/station/commons/storage/primary) -"rXB" = ( +"rXw" = ( +/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/any/service/maintenance, +/obj/machinery/door/airlock/maintenance{ + name = "Bar Maintenance" + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/cable, -/obj/structure/minecart_rail/railbreak, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) -"rXD" = ( -/obj/machinery/button/door/directional/east{ - id = "xenobio7"; - name = "Xenobio Pen 7 Blast DOors"; - req_access = list("xenobiology") +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) -"rXN" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - name = "Teleport Access" +/turf/open/floor/plating, +/area/station/commons/lounge) +"rXP" = ( +/obj/item/pickaxe/improvised{ + pixel_x = 7 }, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination, -/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/teleporter, -/turf/open/floor/iron, -/area/station/command/teleporter) +/turf/open/misc/asteroid/snow/coldroom, +/area/icemoon/underground/explored) "rXX" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock"; @@ -60649,11 +62453,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/processing) -"rXY" = ( -/obj/item/kirbyplants/random/dead, -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "rYq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60683,6 +62482,11 @@ dir = 8 }, /area/mine/living_quarters) +"rYA" = ( +/obj/structure/flora/grass/green/style_random, +/obj/structure/sign/warning/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "rYB" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -60690,6 +62494,18 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"rYE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "rYG" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -60704,10 +62520,6 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"rYZ" = ( -/obj/machinery/modular_computer/preset/civilian, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/office) "rZa" = ( /obj/structure/table, /turf/open/floor/plating, @@ -60727,16 +62539,16 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"rZP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/station/commons/lounge) "rZR" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/landmark/start/chief_medical_officer, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"rZY" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "rZZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -60749,6 +62561,57 @@ dir = 4 }, /area/station/service/chapel) +"sav" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/service/bar) +"saC" = ( +/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_smooth, +/area/station/maintenance/starboard/fore) +"saF" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"saO" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/storage) +"saR" = ( +/obj/structure/closet, +/obj/item/bodybag, +/obj/item/clothing/under/misc/burial, +/obj/item/clothing/under/misc/burial, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel) +"saX" = ( +/obj/machinery/button/door/directional/west{ + id = "executionfireblast"; + name = "Transfer Area Lockdown"; + pixel_y = -6; + req_access = list("brig") + }, +/obj/structure/railing, +/obj/machinery/door/window/left/directional/south, +/obj/machinery/button/flasher{ + pixel_x = -24; + pixel_y = 5; + id = "executionflash" + }, +/turf/open/floor/plating/icemoon, +/area/station/security/execution/education) "sbc" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -60777,26 +62640,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"sbf" = ( -/obj/structure/sign/plaques/kiddie/devils_tooth{ - pixel_y = 32 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "sbi" = ( /obj/machinery/newscaster/directional/north, /obj/machinery/photocopier, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"sbv" = ( -/obj/structure/closet/secure_closet/personal{ - anchored = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/directional/south, -/obj/structure/sign/clock/directional/south, -/turf/open/floor/iron, -/area/station/commons/locker) "sby" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -60830,26 +62678,24 @@ }, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) -"sbO" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/decal/cleanable/dirt, -/obj/item/seeds/onion, -/obj/effect/turf_decal/tile/green/anticorner/contrasted, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) +"sbP" = ( +/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "sbU" = ( /obj/machinery/vending/cigarette, /turf/open/floor/iron/dark, /area/mine/eva) -"sbZ" = ( -/obj/machinery/door/airlock/external{ - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 +"sbY" = ( +/obj/structure/table, +/obj/item/newspaper, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 }, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) +/obj/structure/secure_safe/directional/east, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "sca" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -60858,6 +62704,14 @@ }, /turf/open/floor/plating, /area/station/science/genetics) +"scb" = ( +/obj/structure/toilet/greyscale{ + cistern_open = 1; + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/toilet) "scl" = ( /obj/structure/bookcase/random, /turf/open/floor/carpet/red, @@ -60879,14 +62733,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"scr" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/structure/sign/warning/gas_mask/directional/south, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "scu" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -60907,19 +62753,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/tcommsat/computer) -"scG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sink/directional/south, -/obj/structure/mirror/directional/north, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) -"scQ" = ( -/obj/structure/tank_holder/oxygen, -/obj/effect/decal/cleanable/wrapping, -/turf/open/floor/vault, -/area/station/security/prison/rec) "scV" = ( /obj/machinery/camera/directional/north{ c_tag = "Security - Detective's Office" @@ -60928,15 +62761,12 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"sdc" = ( -/obj/structure/sign/departments/cargo, -/turf/closed/wall/r_wall, -/area/mine/eva) -"sdk" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/turf/open/floor/iron/dark/side, -/area/station/service/chapel) +"sdf" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance/two, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) "sdl" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 5 @@ -60947,13 +62777,38 @@ /area/station/science/ordnance) "sdr" = ( /obj/structure/transit_tube/horizontal, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/snow/corner, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"sds" = ( +/obj/structure/fence/corner{ + dir = 6 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "sdE" = ( /obj/structure/chair/pew/left, /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/security/prison/rec) +"sdF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/item/grown/log/tree, +/obj/item/grown/log/tree{ + pixel_y = 5; + pixel_x = 7 + }, +/obj/item/grown/log/tree{ + pixel_x = 7 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "sdW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -60984,10 +62839,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"sed" = ( -/obj/structure/flora/rock/icy/style_random, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) "sen" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -60997,17 +62848,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/courtroom) -"seB" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/fitness) "seH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61017,13 +62857,27 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"seN" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark/side{ +"seL" = ( +/obj/structure/table, +/obj/item/crowbar, +/obj/item/wrench, +/obj/item/assembly/infra{ + pixel_x = 3 + }, +/obj/item/assembly/igniter{ + pixel_y = -2 + }, +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/item/assembly/signaler, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 }, -/area/station/service/chapel) +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron/dark/smooth_edge, +/area/station/ai_monitored/command/storage/eva) "seR" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -61047,17 +62901,29 @@ /obj/structure/cable, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"sfd" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/bottle/fluorine{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bottle/iodine{ + pixel_x = 1 + }, +/obj/structure/sign/warning/chem_diamond/directional/west, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/medical/chem_storage) "sfr" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) -"sft" = ( -/obj/machinery/holopad, -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "sfv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, @@ -61075,31 +62941,18 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"sfz" = ( -/obj/structure/railing, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 3 - }, -/obj/item/multitool{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/assembly/signaler{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 +"sfF" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Security - Lower Hallway North"; + network = list("ss13","prison") }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) -"sfD" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) +/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/machinery/light/directional/east, +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "sfY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61111,12 +62964,6 @@ dir = 5 }, /area/station/science/research) -"sgz" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) "sgA" = ( /obj/effect/turf_decal/box, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61135,6 +62982,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"sgL" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/computer/security/telescreen/test_chamber/directional/north, +/turf/open/floor/iron/white/side{ + dir = 1 + }, +/area/station/command/heads_quarters/rd) "sgT" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue{ @@ -61194,6 +63048,7 @@ /obj/effect/turf_decal/trimline/brown/filled/end{ dir = 1 }, +/obj/structure/sign/warning/no_smoking/circle/directional/south, /turf/open/floor/iron, /area/station/medical/medbay/aft) "shB" = ( @@ -61204,6 +63059,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"shF" = ( +/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/hydroponics) "shG" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -61214,17 +63074,21 @@ /obj/structure/transit_tube/curved{ dir = 8 }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"shT" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/weather/snow/corner{ dir = 1 }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/cafeteria{ +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"shR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/area/station/hallway/secondary/entry) +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "sil" = ( /obj/machinery/door/airlock/public/glass{ name = "Art Gallery" @@ -61237,18 +63101,6 @@ /obj/item/storage/toolbox/emergency, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"siv" = ( -/obj/structure/sign/warning/electric_shock/directional/east, -/obj/machinery/camera/directional/east{ - c_tag = "Security - Lower Hallway North"; - network = list("ss13","prison") - }, -/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/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/central/fore) "six" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -61264,14 +63116,6 @@ }, /turf/open/floor/wood, /area/station/service/library) -"siz" = ( -/obj/machinery/holopad, -/obj/machinery/duct, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/large, -/area/station/engineering/lobby) "siI" = ( /obj/machinery/space_heater, /obj/effect/decal/cleanable/dirt, @@ -61280,53 +63124,67 @@ "sjb" = ( /turf/closed/wall/r_wall, /area/station/cargo/drone_bay) +"sjd" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Service External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"sjh" = ( +/obj/structure/fence/door/opened, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "sjk" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 6 }, /turf/open/floor/glass/reinforced, /area/station/engineering/atmos/pumproom) -"sjx" = ( -/obj/effect/turf_decal/trimline/yellow/end{ - dir = 1 - }, -/obj/machinery/exodrone_launcher, -/obj/item/fuel_pellet, -/obj/effect/turf_decal/trimline/yellow/mid_joiner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/mid_joiner{ +"sjl" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/railing/corner, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/iron/cafeteria{ dir = 8 }, -/obj/effect/turf_decal/trimline/yellow/mid_joiner{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/drone_bay) -"sjD" = ( -/obj/structure/stairs/west, -/turf/open/floor/iron/stairs/right{ - dir = 4 +/area/station/science/ordnance/office) +"sjp" = ( +/obj/effect/spawner/random/structure/chair_flipped, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/plaques/kiddie/perfect_drone{ + pixel_x = 32 }, -/area/station/science/cytology) -"sjU" = ( -/obj/structure/sign/warning/docking/directional/east, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"sjX" = ( +/turf/open/floor/iron/checker, +/area/station/maintenance/port/fore) +"sjz" = ( +/obj/structure/chair/sofa/bench/left, /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 5 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/white/corner{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/medical/treatment_center) +/area/station/hallway/secondary/entry) "skc" = ( /obj/machinery/door/airlock/external{ name = "Port Docking Bay 1"; @@ -61358,20 +63216,10 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) -"skw" = ( -/obj/machinery/computer/security/qm, -/obj/machinery/requests_console/directional/west{ - department = "Quartermaster's Desk"; - name = "Quartermaster's Desk Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +"skr" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "skx" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ dir = 4 @@ -61379,42 +63227,19 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"skH" = ( -/obj/structure/disposalpipe/segment, +"skI" = ( +/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/white/corner{ - dir = 4 - }, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white/textured_half, -/area/station/service/kitchen) +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "skJ" = ( /obj/structure/grille/broken, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"skQ" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) -"skU" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/holopad, -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "skW" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/abandoned, @@ -61453,6 +63278,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"slh" = ( +/obj/structure/table, +/obj/item/flashlight, +/obj/item/flashlight{ + pixel_y = 13 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "sll" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -61467,6 +63300,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) +"sln" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "slp" = ( /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ @@ -61476,19 +63318,19 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/xenobiology) -"slx" = ( -/obj/structure/sign/warning/fire/directional/west, -/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ - dir = 8 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/station/medical/virology) "slD" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) +"slP" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "slX" = ( /obj/structure/fans/tiny, /obj/effect/turf_decal/stripes/red/box, @@ -61517,6 +63359,17 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/commons/locker) +"smp" = ( +/obj/machinery/washing_machine, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/structure/sign/clock/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms/laundry) "smr" = ( /obj/machinery/door/airlock/engineering{ name = "Port Bow Solar Access" @@ -61545,24 +63398,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel) -"smI" = ( -/obj/structure/chair{ - dir = 1; - name = "Command Station" - }, -/obj/machinery/button/door{ - id = "bridge blast"; - name = "Bridge Blast Door Control"; - pixel_x = 28; - pixel_y = -2; - req_access = list("command") - }, -/obj/machinery/keycard_auth{ - pixel_x = 29; - pixel_y = 8 - }, -/turf/open/floor/iron, -/area/station/command/bridge) +"sna" = ( +/obj/item/kirbyplants/fern, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "snd" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 1 @@ -61601,14 +63441,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"snv" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "riot"; - name = "Security Shutters" - }, -/turf/open/floor/glass/reinforced, -/area/station/hallway/primary/fore) "snw" = ( /obj/structure/table, /obj/machinery/microwave, @@ -61644,15 +63476,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"snR" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "snW" = ( /obj/machinery/computer/atmos_control/oxygen_tank{ dir = 1 @@ -61670,6 +63493,21 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) +"sop" = ( +/obj/structure/table, +/obj/structure/frame/machine, +/obj/item/stack/cable_coil/five, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"soq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/turf/open/floor/iron/dark/side, +/area/mine/eva/lower) "sou" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61679,6 +63517,20 @@ }, /turf/open/floor/iron/white, /area/station/maintenance/aft/greater) +"soz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/directional/west{ + c_tag = "Research Division Lobby"; + network = list("ss13","rd") + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "soA" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -61693,6 +63545,17 @@ /obj/effect/turf_decal/trimline/green/filled/corner, /turf/open/floor/iron/white, /area/station/medical/virology) +"soE" = ( +/obj/structure/reagent_dispensers/plumbed{ + name = "service reservoir" + }, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/turf_decal/delivery/white{ + color = "#307db9" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/textured, +/area/station/maintenance/starboard/fore) "soF" = ( /obj/effect/turf_decal/trimline/dark_red/corner{ dir = 8 @@ -61709,6 +63572,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) +"soI" = ( +/obj/machinery/door/window/left/directional/east{ + name = "Fitness Ring" + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "soK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 9 @@ -61726,6 +63601,12 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) +"soR" = ( +/obj/machinery/icecream_vat, +/obj/structure/sign/clock/directional/north, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "spg" = ( /obj/structure/table, /obj/item/storage/box/monkeycubes{ @@ -61752,14 +63633,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/genetics) -"spj" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/landmark/start/cook, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "spv" = ( /obj/structure/window/reinforced/plasma/spawner/directional/east, /obj/structure/cable, @@ -61767,26 +63640,16 @@ /obj/machinery/power/energy_accumulator/tesla_coil/anchored, /turf/open/floor/engine, /area/station/engineering/supermatter) -"spV" = ( -/obj/machinery/recharger, -/obj/structure/sign/warning/biohazard/directional/east, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, +"spy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, -/area/station/command/gateway) -"spW" = ( -/obj/structure/sign/painting/library_secure{ - pixel_x = 32 - }, -/obj/machinery/door/window/left/directional/west{ - name = "Secure Art Exhibition"; - req_access = list("library") - }, -/obj/effect/spawner/random/structure/table_fancy, -/turf/open/floor/wood, -/area/station/service/library) +/area/station/commons/fitness) +"spz" = ( +/obj/structure/chair/wood, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "sqb" = ( /obj/item/coin/iron{ pixel_y = -5 @@ -61816,12 +63679,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"sqq" = ( -/obj/structure/table, -/obj/item/electronics/apc, -/obj/item/electronics/airlock, -/turf/open/floor/plating, -/area/station/engineering/storage/tech) "sqt" = ( /turf/open/floor/iron/dark, /area/station/science/ordnance/office) @@ -61837,21 +63694,6 @@ dir = 8 }, /area/station/service/chapel) -"sqB" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) -"sqH" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{ - name = "Burn Chamber Interior Airlock" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/airlock_controller/incinerator_ordmix{ - pixel_x = 24 - }, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) "sqN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61859,11 +63701,6 @@ /obj/structure/grille/broken, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"sqU" = ( -/obj/machinery/newscaster/directional/west, -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "sqW" = ( /obj/structure/marker_beacon/burgundy{ name = "landing marker" @@ -61921,6 +63758,21 @@ /obj/structure/cable, /turf/closed/wall/r_wall, /area/station/maintenance/port/aft) +"srw" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"sry" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/medical/morgue) "srB" = ( /obj/machinery/airalarm/directional/west, /obj/effect/landmark/start/bitrunner, @@ -61928,35 +63780,9 @@ /obj/effect/decal/cleanable/robot_debris, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) -"srG" = ( -/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/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"srM" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/virology) "srP" = ( /turf/closed/wall, /area/station/science/breakroom) -"srU" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/junction{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "srW" = ( /obj/structure/table, /obj/item/assembly/prox_sensor{ @@ -61989,13 +63815,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/office) -"ssg" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Cargo Bay North" - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/cargo/storage) "ssh" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ dir = 4 @@ -62006,27 +63825,23 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"ssm" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/closet/firecloset, -/obj/structure/sign/warning/gas_mask/directional/west, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) +"ssj" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace/icemoon, +/area/icemoon/underground/explored) "ssq" = ( /obj/structure/table/wood, /obj/item/camera_film, /obj/item/camera_film, /turf/open/floor/wood, /area/station/service/library) -"ssr" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/engineering/storage/tech) -"ssu" = ( -/obj/structure/gulag_vent/ice, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +"sst" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "ssv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/thinplating_new/corner, @@ -62040,6 +63855,13 @@ dir = 1 }, /area/station/ai_monitored/command/storage/eva) +"ssH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white, +/area/station/science/ordnance) "ssM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62054,12 +63876,6 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) -"stb" = ( -/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) "sth" = ( /obj/item/radio/intercom/directional/east, /obj/structure/disposalpipe/trunk{ @@ -62102,16 +63918,6 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"stB" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/fore) "stD" = ( /obj/machinery/door/poddoor/preopen{ id = "atmos"; @@ -62125,13 +63931,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"stI" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/obj/structure/sign/warning/electric_shock/directional/north, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "stJ" = ( /obj/structure/flora/grass/brown/style_random, /turf/open/misc/asteroid/snow/icemoon, @@ -62180,17 +63979,26 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"sup" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/gas_mask, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"sus" = ( -/obj/structure/table, -/obj/effect/spawner/random/maintenance/two, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) +"sul" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) +"suo" = ( +/obj/structure/table/wood, +/obj/machinery/newscaster/directional/west, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap{ + pixel_y = 3 + }, +/obj/item/storage/photo_album/bar, +/obj/item/toy/figure/bartender, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "suA" = ( /obj/structure/closet/crate/coffin, /obj/effect/decal/cleanable/dirt, @@ -62198,6 +64006,15 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"suF" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/stairs/south, +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/station/commons/lounge) "suL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62246,6 +64063,13 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) +"svx" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "svy" = ( /obj/effect/decal/cleanable/oil, /obj/item/stack/ore/glass, @@ -62254,13 +64078,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"svz" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 9 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) "svF" = ( /turf/open/floor/iron/smooth, /area/station/security/execution/transfer) @@ -62274,6 +64091,17 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"svR" = ( +/obj/machinery/computer/records/security, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/structure/fireaxecabinet/directional/north, +/turf/open/floor/iron, +/area/station/command/bridge) +"svV" = ( +/obj/machinery/space_heater, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/central) "swa" = ( /obj/machinery/light/directional/east, /turf/open/floor/engine, @@ -62290,12 +64118,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"swe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "swf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62347,6 +64169,7 @@ /obj/machinery/power/terminal, /obj/machinery/light/small/directional/east, /obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/east, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) "swu" = ( @@ -62364,13 +64187,6 @@ "swF" = ( /turf/closed/wall, /area/station/ai_monitored/turret_protected/aisat_interior) -"swI" = ( -/obj/machinery/medical_kiosk, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "swK" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -62396,12 +64212,18 @@ }, /turf/open/floor/plating, /area/station/cargo/warehouse) -"sxe" = ( -/obj/structure/fence{ - dir = 4 +"sxs" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/iron/white, +/area/station/medical/cryo) +"sxt" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "sxu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62418,6 +64240,7 @@ /area/station/medical/medbay/aft) "sxF" = ( /obj/structure/chair/stool/directional/north, +/obj/structure/sign/warning/electric_shock/directional/west, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) "sxO" = ( @@ -62427,15 +64250,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"sxQ" = ( -/obj/structure/sign/warning/electric_shock/directional/east, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"sxT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/security/prison/rec) "sxY" = ( /obj/structure/cable/multilayer/multiz, /obj/structure/window/reinforced/spawner/directional/south, @@ -62449,28 +64263,12 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/white, /area/station/science/research) -"syd" = ( -/obj/machinery/duct, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/kitchen/coldroom) "syh" = ( /obj/structure/chair/pew/right{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"sym" = ( -/obj/structure/plasticflaps, -/obj/machinery/conveyor{ - dir = 4; - id = "QMLoad2" - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "syn" = ( /obj/effect/turf_decal/tile/neutral/diagonal_centre, /obj/machinery/atmospherics/pipe/multiz/violet/visible{ @@ -62479,6 +64277,26 @@ /obj/effect/turf_decal/tile/dark_green/diagonal_edge, /turf/open/floor/iron/dark/diagonal, /area/station/engineering/atmos/mix) +"sys" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) +"syv" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/treatment_center) "syw" = ( /obj/structure/fence/corner{ dir = 4 @@ -62493,11 +64311,49 @@ dir = 8 }, /area/station/security/prison) +"syC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/commons/fitness) "syE" = ( /obj/effect/turf_decal/trimline/green/filled/corner, /obj/effect/turf_decal/trimline/blue/corner, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"syG" = ( +/obj/structure/fence{ + dir = 2; + pixel_y = 0 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"syI" = ( +/obj/effect/turf_decal/siding/white/end{ + dir = 8 + }, +/obj/structure/table, +/obj/item/reagent_containers/cup/bowl{ + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/bowl{ + pixel_y = 8; + pixel_x = 3 + }, +/obj/item/food/grown/eggplant{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/item/food/grown/mushroom/chanterelle{ + pixel_y = 3 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "syL" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -62523,14 +64379,6 @@ /obj/effect/spawner/structure/window/hollow/reinforced/end, /turf/open/floor/plating, /area/station/medical/morgue) -"szj" = ( -/obj/structure/railing/corner/end/flip{ - dir = 8 - }, -/turf/open/floor/iron/stairs/old{ - dir = 8 - }, -/area/station/hallway/primary/starboard) "szo" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -62540,25 +64388,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"szt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/structure/sign/clock/directional/south, -/turf/open/floor/iron, -/area/station/commons/fitness) "szu" = ( /obj/structure/sign/poster/official/obey/directional/north, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"szz" = ( -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/station/security/brig) "szD" = ( /obj/effect/turf_decal/trimline/green/filled/end, /obj/effect/decal/cleanable/dirt, @@ -62571,14 +64405,6 @@ /obj/structure/sign/warning/cold_temp/directional/north, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) -"szK" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "szR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62596,13 +64422,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/commons/dorms/laundry) -"sAa" = ( -/obj/structure/stairs/north, -/obj/structure/railing{ - dir = 4 +"sAd" = ( +/obj/structure/fence/post{ + dir = 8; + pixel_y = 0 }, -/turf/open/floor/iron, -/area/mine/eva/lower) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "sAj" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -62611,6 +64437,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured, /area/station/security/office) +"sAt" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/effect/spawner/random/trash/food_packaging, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "sAu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62623,14 +64455,6 @@ /obj/machinery/vending/cigarette, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) -"sAI" = ( -/obj/machinery/camera{ - c_tag = "Morgue Hallway" - }, -/obj/effect/landmark/start/hangover, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "sAR" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -62643,6 +64467,11 @@ "sAS" = ( /turf/closed/wall, /area/station/commons/storage/art) +"sBd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "sBi" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -62671,14 +64500,18 @@ /obj/machinery/light/warm/directional/east, /turf/open/floor/iron, /area/station/security/prison/workout) -"sBx" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/lattice/catwalk, -/turf/open/openspace, -/area/station/science/xenobiology) "sBy" = ( /turf/closed/wall, /area/station/service/theater) +"sBH" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Security - Lower Brig Hallway" + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/security/brig) "sBJ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/showroomfloor, @@ -62697,14 +64530,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) -"sBY" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/spawner/random/trash/crushed_can{ - pixel_y = 10 - }, -/turf/open/floor/iron, -/area/station/service/bar) "sCa" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 5 @@ -62712,6 +64537,16 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron/dark/textured, /area/station/security/prison/rec) +"sCb" = ( +/obj/structure/minecart_rail{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) "sCm" = ( /obj/machinery/power/terminal{ dir = 1 @@ -62738,6 +64573,21 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) +"sCz" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "chem-morgue-airlock" + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/obj/machinery/door/airlock/external{ + name = "Lower Medical External Access"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/medical/morgue) "sCA" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -62754,6 +64604,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"sCK" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/surface/outdoors/nospawn) "sCQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -62763,14 +64617,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"sCX" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "sCZ" = ( /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"sDd" = ( +/obj/effect/landmark/start/hangover, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "sDg" = ( /obj/effect/turf_decal/siding/purple/corner{ dir = 1 @@ -62792,14 +64647,10 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"sDM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/trash/grille_or_waste, +"sDB" = ( +/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/science/cytology) "sDQ" = ( /obj/item/radio/intercom/prison/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -62818,13 +64669,21 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"sEg" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"sDV" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; + name = "AI Upload Turret Control"; + pixel_y = -25 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Bridge Center" + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/entry) +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron, +/area/station/command/bridge) "sEi" = ( /turf/open/floor/carpet, /area/station/service/library) @@ -62845,10 +64704,6 @@ }, /turf/open/floor/plating, /area/mine/living_quarters) -"sEv" = ( -/obj/item/flashlight/lantern/on, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "sEz" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -62890,11 +64745,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"sEI" = ( -/obj/machinery/light/small/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/medical/morgue) "sEK" = ( /obj/structure/table/glass, /obj/item/stack/medical/gauze{ @@ -62913,6 +64763,13 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) +"sEN" = ( +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 8 + }, +/obj/structure/sign/warning/biohazard/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/station/medical/virology) "sEO" = ( /obj/machinery/light/floor, /turf/open/floor/iron/smooth, @@ -62969,14 +64826,12 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"sFN" = ( -/obj/structure/sign/warning/electric_shock/directional/south, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"sFJ" = ( +/obj/structure/fence/post{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "sFS" = ( /obj/structure/railing/corner{ dir = 8 @@ -62992,37 +64847,11 @@ dir = 1 }, /area/station/ai_monitored/command/storage/eva) -"sGf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/door/window/brigdoor/right/directional/west{ - name = "Medbay Access"; - req_access = list("medical") - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "sGk" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/structure/sign/poster/random/directional/south, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"sGn" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - 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/hydroponics) "sGp" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -63048,6 +64877,10 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/mining) +"sGw" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/genturf/blue, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "sGE" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 @@ -63057,6 +64890,15 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/mine/living_quarters) +"sGG" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Cart Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/kitchen, +/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics, +/obj/structure/barricade/wooden/snowed, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "sGH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63082,19 +64924,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"sGM" = ( -/obj/structure/cable, -/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/warning/directional/east, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/port/lesser) +"sGL" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) +"sGT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "sGZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"sHa" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/bureaucracy/briefcase, +/obj/item/taperecorder/empty, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "sHc" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/medical/glass{ @@ -63108,38 +64956,36 @@ /obj/effect/turf_decal/tile/yellow/full, /turf/open/floor/iron/large, /area/station/medical/pharmacy) +"sHe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Utilities Room" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "sHh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) -"sHi" = ( -/obj/effect/turf_decal/siding/dark{ - dir = 6 - }, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) "sHl" = ( /obj/machinery/vending/coffee, /obj/item/radio/intercom/directional/south, /turf/open/floor/stone, /area/mine/eva/lower) "sHs" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/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/diagonal, -/area/station/service/kitchen) -"sHy" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/requests_console/auto_name/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/primary) +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) +"sHt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/caution_sign, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "sHC" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63174,32 +65020,22 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"sHV" = ( -/obj/machinery/atmospherics/components/tank/air{ - initialize_directions = 2 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "sHX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/mine/mechbay) -"sIg" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"sIp" = ( -/obj/structure/closet/radiation, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/directional/north, +"sIb" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/light/warm/directional/north, +/obj/machinery/digital_clock/directional/north, /turf/open/floor/iron, -/area/station/engineering/main) +/area/station/service/bar) +"sIl" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics) "sIt" = ( /turf/closed/wall, /area/station/maintenance/central/lesser) @@ -63241,39 +65077,23 @@ /obj/structure/cable, /turf/open/floor/plating, /area/mine/storage) -"sIX" = ( -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Garden" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 +"sIZ" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 }, -/turf/open/floor/iron/textured, -/area/station/service/hydroponics) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "sJe" = ( /obj/machinery/deepfryer, /obj/machinery/light/warm/directional/north, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) -"sJg" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "sJi" = ( /obj/machinery/vending/donksofttoyvendor, /turf/open/floor/iron/dark/textured, /area/station/security/prison/safe) -"sJn" = ( -/obj/structure/closet/emcloset, -/obj/structure/sign/warning/gas_mask/directional/west, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/miningdock) "sJq" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/effect/turf_decal/tile/yellow{ @@ -63299,21 +65119,6 @@ }, /turf/open/floor/plating/icemoon, /area/station/security/execution/education) -"sJu" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/spawner/random/trash/graffiti{ - pixel_y = 32 - }, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "sJA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63322,29 +65127,29 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"sJC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "sJH" = ( /turf/closed/wall, /area/mine/living_quarters) -"sJP" = ( -/obj/machinery/airalarm/directional/north, -/obj/structure/rack, -/obj/item/controller{ - pixel_x = -7 - }, -/obj/item/compact_remote{ - pixel_x = -7 - }, -/obj/item/compact_remote{ - pixel_x = -7 - }, -/obj/item/integrated_circuit/loaded/speech_relay{ - pixel_x = 7 +"sJI" = ( +/obj/structure/closet/crate/wooden, +/obj/item/camera_film{ + pixel_x = -4; + pixel_y = 4 }, -/obj/item/integrated_circuit/loaded/hello_world{ - pixel_x = 7 +/obj/item/camera, +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/turf/open/floor/iron/white/corner, -/area/station/science/explab) +/turf/open/floor/iron/grimy, +/area/station/commons/vacant_room/office) "sJR" = ( /obj/machinery/door/airlock/security/glass{ name = "Labor Camp Airlock" @@ -63383,6 +65188,11 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/wood, /area/station/command/meeting_room) +"sKT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron, +/area/station/security/prison/workout) "sKW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -63409,25 +65219,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/security/processing) -"sLm" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"sLy" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/bowl{ - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "sLD" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/iron/fifty, @@ -63476,6 +65267,11 @@ dir = 1 }, /area/station/security/prison) +"sMy" = ( +/obj/structure/flora/tree/pine/style_random, +/obj/structure/flora/grass/both/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "sML" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63491,6 +65287,12 @@ dir = 1 }, /area/station/security/office) +"sNj" = ( +/obj/machinery/light_switch/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "sNr" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "permainner"; @@ -63543,6 +65345,13 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"sNF" = ( +/obj/item/toy/snowball{ + pixel_x = -6; + pixel_y = -4 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "sNI" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63550,22 +65359,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"sNQ" = ( +"sNL" = ( +/obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/any/security/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"sOd" = ( +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/effect/turf_decal/bot, /turf/open/floor/iron, -/area/station/command/bridge) +/area/station/engineering/atmos/storage) "sOm" = ( /obj/structure/railing{ dir = 4 @@ -63606,11 +65414,6 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"sON" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "sOO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -63621,12 +65424,6 @@ /obj/item/kitchen/fork/plastic, /turf/open/floor/iron, /area/station/security/prison/mess) -"sOX" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/power/port_gen/pacman, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/lesser) "sOY" = ( /obj/structure/table/glass, /obj/item/hemostat, @@ -63634,6 +65431,15 @@ /obj/item/storage/bag/trash, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"sPq" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "rnd2"; + name = "Research Lab Shutters" + }, +/turf/open/floor/plating, +/area/station/science/ordnance/office) "sPA" = ( /obj/structure/rack, /obj/item/storage/bag/ore, @@ -63645,6 +65451,18 @@ /obj/item/clothing/suit/hooded/wintercoat, /turf/open/floor/iron, /area/mine/laborcamp) +"sPE" = ( +/obj/machinery/conveyor{ + id = "mining_internal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/mine/production) "sPG" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -63652,26 +65470,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"sPK" = ( -/obj/structure/table, -/obj/machinery/recharger{ - pixel_x = -6 - }, -/obj/machinery/button/door{ - id = "BrigLock"; - name = "Cell Shutters"; - pixel_x = 7; - pixel_y = 9 - }, -/turf/open/floor/iron/showroomfloor, -/area/station/security/warden) -"sPS" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 +"sPJ" = ( +/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/white/line{ + dir = 1 }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/stone, -/area/station/service/bar/atrium) +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/medbay/aft) "sPV" = ( /obj/machinery/door/airlock/atmos/glass, /obj/machinery/door/firedoor/heavy, @@ -63720,32 +65530,56 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"sRc" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 +"sQI" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 }, -/obj/effect/turf_decal/siding/white{ +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) +"sQS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"sRu" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ dir = 10 }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, -/area/station/commons/fitness) -"sRf" = ( -/obj/effect/turf_decal/siding/wood{ +/area/station/service/hydroponics) +"sRw" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, /obj/structure/cable, -/turf/open/floor/wood/parquet, -/area/station/service/theater) -"sRp" = ( -/obj/structure/fence, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 4 +/turf/open/floor/iron, +/area/station/service/bar) +"sRz" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Service - Coldroom" }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/service/kitchen/coldroom) "sRI" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -63785,20 +65619,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison/workout) -"sSz" = ( -/obj/machinery/door/firedoor/heavy, -/turf/open/floor/iron/white, -/area/station/science/research) -"sSA" = ( -/obj/structure/sign/warning/secure_area/directional/south, -/turf/open/openspace/icemoon/keep_below, -/area/icemoon/surface/outdoors/nospawn) -"sSE" = ( -/obj/machinery/door/firedoor/heavy, -/turf/open/floor/iron/white/side{ - dir = 1 - }, -/area/station/science/research) "sSF" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -63807,6 +65627,19 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) +"sSN" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Engineering External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "Engineering-External" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/smooth, +/area/station/engineering/lobby) "sSO" = ( /obj/machinery/light/small/directional/south, /obj/structure/closet/secure_closet/brig{ @@ -63827,10 +65660,25 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"sSS" = ( -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) +"sSX" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/paper{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -5 + }, +/turf/open/floor/iron, +/area/station/service/kitchen/coldroom) +"sTb" = ( +/obj/structure/railing/wooden_fence, +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "sTe" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible{ @@ -63859,6 +65707,19 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/fore) +"sTl" = ( +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/structure/minecart_rail{ + dir = 1 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "sTn" = ( /obj/structure/table, /obj/machinery/newscaster/directional/north, @@ -63882,6 +65743,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) +"sTA" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/sepia, +/area/station/service/library) +"sTH" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"sTL" = ( +/obj/structure/fireplace{ + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/stone, +/area/station/commons/lounge) "sTO" = ( /obj/machinery/door/airlock{ name = "Unisex Restroom" @@ -63895,20 +65780,6 @@ /obj/structure/microscope, /turf/open/floor/iron/grimy, /area/station/security/prison/work) -"sTV" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Teleporter Maintenance" - }, -/obj/structure/sign/warning/secure_area/directional/west, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/command/teleporter, -/turf/open/floor/plating, -/area/station/maintenance/central/lesser) "sUb" = ( /obj/machinery/door/airlock/security/glass{ name = "Permabrig Visitation" @@ -63918,15 +65789,6 @@ /obj/effect/mapping_helpers/airlock/access/any/security/brig, /turf/open/floor/iron, /area/station/security/prison/visit) -"sUi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "sUv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -63943,6 +65805,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, +/obj/structure/sign/warning/cold_temp/directional/east, /turf/open/floor/iron/smooth, /area/mine/eva) "sUN" = ( @@ -63965,24 +65828,16 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"sVf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 +"sVi" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Research Break Room" }, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/machinery/door/firedoor{ dir = 8 }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/genetics) +/turf/open/floor/iron/dark, +/area/station/science/breakroom) "sVm" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 1 @@ -63993,6 +65848,11 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) +"sVA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "sVL" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -64000,8 +65860,26 @@ /area/station/engineering/atmos) "sVN" = ( /obj/item/screwdriver, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"sVW" = ( +/obj/effect/decal/cleanable/garbage, +/obj/item/reagent_containers/spray/chemsprayer/party{ + pixel_x = 1 + }, +/obj/item/clothing/head/costume/festive{ + pixel_y = -3; + pixel_x = -5 + }, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "sWl" = ( /obj/machinery/door/airlock/command{ name = "Chief Medical Officer" @@ -64041,19 +65919,40 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /turf/open/floor/iron/textured_half, /area/mine/production) -"sWS" = ( -/obj/structure/railing, -/obj/effect/turf_decal/siding/white, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "cantena_curtains" +"sWN" = ( +/obj/structure/chair{ + dir = 1; + name = "Prosecution" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, /turf/open/floor/wood, -/area/station/commons/lounge) +/area/station/security/courtroom) +"sWO" = ( +/obj/structure/railing{ + dir = 5 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "sWU" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/iron, /area/mine/production) +"sXa" = ( +/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, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "sXb" = ( /obj/machinery/status_display/ai/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -64075,48 +65974,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) -"sXf" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/table/reinforced, -/obj/item/stack/wrapping_paper{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/stack/package_wrap{ - pixel_x = -1; - pixel_y = -1 - }, -/obj/item/dest_tagger, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sXk" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/maintenance/fore/lesser) -"sXC" = ( -/obj/structure/table, -/obj/machinery/button/ignition{ - id = "testigniter"; - pixel_x = -6; - pixel_y = 2 - }, -/obj/machinery/button/door{ - id = "testlab"; - name = "Test Chamber Blast Doors"; - pixel_x = 4; - pixel_y = 2; - req_access = list("xenobiology") - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/science/explab) "sXK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64140,15 +66003,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"sXU" = ( -/obj/structure/table/wood/poker, -/obj/item/toy/cards/deck{ - pixel_y = 13; - pixel_x = 6 - }, -/obj/effect/spawner/random/entertainment/cigarette, -/turf/open/floor/wood/large, -/area/station/commons/lounge) "sYe" = ( /obj/structure/table/wood, /obj/item/clothing/under/suit/red, @@ -64161,19 +66015,24 @@ pixel_y = 4 }, /obj/machinery/light/small/directional/north, +/obj/structure/sign/painting/large/library_private{ + dir = 1 + }, /turf/open/floor/engine/cult, /area/station/service/library) -"sYu" = ( -/obj/machinery/door/firedoor, -/obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"sYz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/camera/directional/south{ + c_tag = "Mining B-1 Hallway North"; + network = list("ss13", "mine") + }, +/turf/open/floor/iron/dark/side, +/area/mine/eva) "sYA" = ( /obj/structure/fluff/tram_rail{ pixel_y = 17 @@ -64205,6 +66064,10 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) +"sZB" = ( +/obj/structure/noticeboard/directional/north, +/turf/open/openspace, +/area/station/service/bar/atrium) "sZD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -64270,6 +66133,23 @@ /obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron, /area/station/security/prison/garden) +"tav" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/service/library) +"tay" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/bar/atrium) +"taC" = ( +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "taN" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/tile/yellow/opposingcorners, @@ -64297,35 +66177,33 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"tbd" = ( -/obj/item/radio/intercom/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/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/smooth_half, -/area/station/service/hydroponics) "tbh" = ( /turf/open/floor/iron/half{ dir = 1 }, /area/station/engineering/atmos) -"tbE" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/landmark/start/bartender, -/obj/effect/turf_decal/siding/wood{ +"tbl" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, +/obj/structure/sign/departments/lawyer/directional/west, /turf/open/floor/iron, +/area/station/hallway/primary/central/fore) +"tbH" = ( +/obj/structure/table/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) +"tbL" = ( +/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, +/turf/open/floor/wood/large, /area/station/service/bar) -"tbK" = ( -/obj/effect/spawner/random/trash/grille_or_waste, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "tbN" = ( /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /obj/machinery/door/airlock/engineering{ @@ -64342,18 +66220,6 @@ "tbQ" = ( /turf/open/floor/iron/grimy, /area/station/maintenance/aft/greater) -"tbR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/hallway/secondary/entry) "tbX" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -64378,6 +66244,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/dark, /area/station/medical/virology) +"tcL" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/rack, +/obj/item/stack/ducts/fifty, +/obj/item/storage/box/swab, +/obj/effect/spawner/random/contraband/permabrig_gear, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/grimy, +/area/station/security/prison/work) "tcQ" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Permabrig Recreation"; @@ -64396,13 +66271,13 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"tda" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 +"tcX" = ( +/obj/structure/railing, +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) +/area/station/science/ordnance) "tdb" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -64411,6 +66286,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"tdc" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "tdp" = ( /obj/machinery/vending/cigarette, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -64425,13 +66305,20 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) -"tdL" = ( -/obj/structure/stairs/south, -/obj/structure/railing{ +"tdI" = ( +/obj/structure/lattice/catwalk, +/obj/structure/railing/corner{ dir = 8 }, -/turf/open/floor/iron/white, -/area/station/medical/virology) +/obj/structure/railing/corner, +/obj/structure/sign/warning/directional/north, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"tdK" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/structure/sign/departments/engineering/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "tdR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -64440,39 +66327,47 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/service/chapel) -"tec" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "botany_apiary"; - name = "Apiary Shutters" +"tdU" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/plating, -/area/station/service/hydroponics) -"ted" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" +/obj/machinery/barsign/directional/north, +/turf/open/floor/iron, +/area/station/service/bar) +"tdY" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) +/turf/open/floor/iron/dark, +/area/station/commons/storage/primary) +"tec" = ( +/obj/structure/cable, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "tei" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/carpet/red, /area/station/security/prison/work) -"tej" = ( -/obj/structure/fence, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) -"tes" = ( -/obj/effect/spawner/random/trash/graffiti{ - pixel_y = -30 +"teq" = ( +/obj/structure/railing, +/obj/structure/rack, +/obj/structure/cable, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/effect/spawner/random/armory/dragnet, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/security/armory/upper) "teE" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters{ @@ -64493,6 +66388,17 @@ dir = 4 }, /area/station/security/brig/entrance) +"teQ" = ( +/obj/machinery/chem_master{ + name = "CytoMaster 5000" + }, +/obj/item/swab{ + pixel_y = 10; + pixel_x = -2 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "teZ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64501,23 +66407,24 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"tfm" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/aft) -"tfu" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/station/maintenance/starboard/fore) +"tfk" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"tfl" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + desc = "Used to grind things up into raw materials and liquids."; + pixel_y = 5 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) "tfx" = ( /obj/machinery/portable_atmospherics/canister/water_vapor, /turf/open/floor/iron, /area/station/service/janitor) -"tfG" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "tfM" = ( /obj/structure/chair/office/light{ dir = 1 @@ -64556,8 +66463,20 @@ /obj/effect/turf_decal/tile/brown/opposingcorners{ dir = 1 }, +/obj/machinery/button/door/directional/east{ + id = "commissarydoor"; + name = "Commissary Door Lock"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_x = 35 + }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"tgj" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/trash/janitor_supplies, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "tgn" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -64567,6 +66486,13 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"tgv" = ( +/obj/machinery/skill_station, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/requests_console/auto_name/directional/north, +/turf/open/floor/iron/sepia, +/area/station/service/library) "tgx" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -64592,6 +66518,19 @@ "thA" = ( /turf/open/genturf/blue, /area/icemoon/underground/unexplored/rivers/deep/shoreline) +"thC" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, +/turf/open/floor/plating, +/area/station/engineering/engine_smes) "thD" = ( /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, @@ -64628,6 +66567,15 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"thP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/decal/cleanable/ash, +/obj/item/rack_parts, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "thW" = ( /obj/effect/spawner/random/trash/mess, /turf/open/floor/wood, @@ -64663,46 +66611,13 @@ dir = 10 }, /area/station/science/lab) -"tie" = ( -/obj/structure/rack, -/obj/item/clothing/suit/utility/beekeeper_suit, -/obj/item/clothing/head/utility/beekeeper_head, -/obj/item/melee/flyswatter, -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ - dir = 4 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"til" = ( -/obj/item/radio/intercom/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/mine/eva) -"tip" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Fitness" - }, -/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 = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ +"tii" = ( +/obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/station/commons/fitness) +/obj/item/kirbyplants/organic/plant2, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "tis" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/transit_tube/horizontal, @@ -64712,12 +66627,39 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"tiI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/fitness) +"tiT" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "tiV" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/iron, /area/station/service/chapel) +"tiX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/thinplating{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/station/commons/dorms/laundry) "tiY" = ( /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/weather/snow/corner{ @@ -64736,6 +66678,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/engineering/atmos/storage) +"tjf" = ( +/obj/structure/fence/door, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "tjk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -64757,10 +66703,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"tjA" = ( -/obj/machinery/smartfridge, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +"tjv" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "tjC" = ( /obj/machinery/airalarm/directional/south, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -64768,13 +66719,38 @@ dir = 1 }, /area/station/security/prison) +"tjG" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/gun/ballistic/shotgun/doublebarrel, +/obj/structure/rack, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/box/red, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "tjH" = ( /obj/effect/turf_decal/loading_area, /obj/effect/turf_decal/siding/yellow, +/obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron/half{ dir = 1 }, /area/station/engineering/storage) +"tjM" = ( +/obj/structure/table/wood, +/obj/item/soap/deluxe{ + pixel_y = 11 + }, +/obj/item/soap/deluxe{ + pixel_y = 6 + }, +/obj/item/soap/deluxe, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "tjN" = ( /obj/structure/closet/secure_closet/personal{ anchored = 1 @@ -64804,47 +66780,46 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"tku" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ +"tkp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 4; - name = "Auxiliary Dock" +/turf/open/floor/iron/cafeteria{ + dir = 8 }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/secondary/entry) +/area/station/science/ordnance/office) "tkP" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/floor/iron/freezer, /area/station/science/xenobiology) -"tkS" = ( -/obj/item/radio/intercom/directional/east, -/obj/machinery/door/firedoor/heavy, -/turf/open/floor/iron/white/side{ - dir = 9 - }, -/area/station/science/research) +"tkT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/sign/warning/no_smoking/circle/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "tkU" = ( /turf/open/lava/plasma/ice_moon, /area/icemoon/surface/outdoors/nospawn) -"tkY" = ( -/obj/structure/cable, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 4 - }, -/obj/structure/minecart_rail{ - dir = 1 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) +"tkX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) +"tla" = ( +/obj/structure/marker_beacon/jade, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"tlf" = ( +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/starboard/upper) "tlh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64867,6 +66842,19 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/command/storage/eva) +"tlt" = ( +/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 + }, +/obj/machinery/status_display/door_timer{ + pixel_x = -32; + id = "Cell 3"; + name = "Cell 3" + }, +/turf/open/floor/iron/textured, +/area/station/security/brig) "tlA" = ( /obj/machinery/light/small/directional/south, /obj/item/radio/intercom/directional/south, @@ -64919,10 +66907,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) -"tmb" = ( -/obj/structure/stairs/west, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "tml" = ( /obj/structure/grille, /turf/open/floor/plating, @@ -64931,6 +66915,13 @@ /obj/structure/closet/firecloset, /turf/open/floor/iron, /area/station/hallway/primary/port) +"tmy" = ( +/obj/machinery/plate_press, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/security/prison/work) "tmA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64994,6 +66985,14 @@ /obj/item/folder/yellow, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) +"tnu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/item/rack_parts, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "tny" = ( /obj/structure/disposalpipe/segment, /obj/item/radio/intercom/directional/east, @@ -65003,17 +67002,20 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"tnz" = ( -/obj/structure/table, -/obj/item/plate, -/obj/item/food/piedough, -/obj/effect/spawner/random/food_or_drink/cake_ingredients, -/obj/effect/turf_decal/siding/white{ +"tnD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 }, -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) +/obj/structure/bed{ + dir = 1 + }, +/obj/effect/spawner/random/bedsheet{ + dir = 1 + }, +/obj/effect/spawner/random/contraband/permabrig_gear, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/white, +/area/station/security/prison/safe) "tnI" = ( /obj/effect/turf_decal/trimline/dark_blue/line{ dir = 10 @@ -65021,14 +67023,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"tnJ" = ( -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 4 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "tnO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -65039,6 +67033,14 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/fore) +"toi" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/obj/machinery/status_display/evac/directional/south, +/obj/structure/chair/sofa/left/brown{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "too" = ( /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/floor/grass, @@ -65064,25 +67066,13 @@ /obj/machinery/shower/directional/west, /turf/open/floor/iron/white, /area/station/medical/virology) -"toP" = ( -/obj/item/toy/snowball{ - pixel_x = 11; - pixel_y = -7 - }, -/obj/structure/flora/grass/brown/style_random, -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) "toT" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/machinery/status_display/evac/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 +/obj/effect/turf_decal/siding/wood, +/obj/structure/railing/corner{ + dir = 4 }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) +/turf/open/floor/stone, +/area/station/service/bar/atrium) "toV" = ( /obj/structure/table, /obj/item/stock_parts/subspace/ansible, @@ -65102,6 +67092,13 @@ /obj/machinery/holopad, /turf/open/floor/iron/large, /area/station/command/gateway) +"tpc" = ( +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = -30 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "tpd" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -65132,11 +67129,12 @@ "tpH" = ( /turf/closed/wall, /area/station/security/execution/education) -"tpK" = ( -/obj/structure/table/wood, -/obj/item/folder/blue, -/turf/open/floor/wood, -/area/station/security/courtroom) +"tpO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "tpX" = ( /obj/item/storage/box/bodybags, /obj/structure/extinguisher_cabinet/directional/west, @@ -65149,14 +67147,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/white/textured, /area/station/security/medical) -"tpZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "tqk" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -65167,17 +67157,40 @@ /obj/item/key/janitor, /turf/open/floor/iron, /area/station/service/janitor) -"tqr" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/machinery/hydroponics/constructable, -/obj/machinery/status_display/ai/directional/south, +"tqs" = ( +/obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/area/station/science/ordnance/office) +"tqy" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/space_heater, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/medical/morgue) +"tqJ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor/heavy{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/north{ + areastring = "/area/station/science/ordnance/burnchamber" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "tqQ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) "tqR" = ( @@ -65197,16 +67210,16 @@ "trm" = ( /turf/open/floor/plating, /area/station/science/ordnance/testlab) -"trn" = ( -/obj/structure/table, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/turf/open/floor/iron/white/corner{ - dir = 4 +"tro" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Aft Primary Hallway South"; + pixel_y = -22 }, -/area/station/science/explab) +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/departments/engineering/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "tru" = ( /obj/structure/chair/pew/left{ dir = 1 @@ -65235,6 +67248,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/iron/freezer, /area/station/science/xenobiology) +"tsc" = ( +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/directional/north, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "tsh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65258,15 +67276,28 @@ /turf/open/openspace/icemoon, /area/station/science/server) "tsu" = ( -/obj/effect/turf_decal/siding/wood{ +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/cigarette, +/obj/effect/spawner/random/entertainment/lighter, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) +"tsz" = ( +/obj/effect/turf_decal/trimline/neutral/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/warning{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/machinery/space_heater, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/structure/sign/poster/official/get_your_legs/directional/north, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 }, -/obj/machinery/light/floor, -/turf/open/floor/stone, -/area/station/service/bar/atrium) +/area/station/ai_monitored/command/storage/eva) "tsH" = ( /obj/machinery/door/airlock/security/glass{ name = "Interrogation" @@ -65278,19 +67309,11 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark/textured, /area/station/security/interrogation) -"tsK" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 9 - }, -/obj/structure/bed{ - dir = 1 - }, -/obj/effect/spawner/random/bedsheet{ - dir = 1 - }, -/obj/effect/spawner/random/contraband/permabrig_gear, -/turf/open/floor/iron/white, -/area/station/security/prison/safe) +"tsP" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) "tsQ" = ( /obj/machinery/door/airlock/public/glass{ name = "Public Mining Storage" @@ -65318,20 +67341,6 @@ /obj/machinery/door/airlock/freezer, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/mess) -"tts" = ( -/obj/item/chair/wood, -/obj/item/toy/plush/moth{ - name = "Ariadne" - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"ttv" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/wood, -/area/station/service/library) "ttw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white/smooth_large, @@ -65344,17 +67353,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/security/prison/rec) -"ttO" = ( -/obj/structure/closet/secure_closet/medical2, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/button/door/directional/south{ - id = "surgery"; - name = "Surgery Shutter Control" +"ttI" = ( +/obj/machinery/door/airlock{ + id_tag = "Dorm5"; + name = "Cabin 1" }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/surgery/aft) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/station/commons/dorms) "ttT" = ( /obj/machinery/door/airlock/mining/glass{ id_tag = "innercargo"; @@ -65404,6 +67412,16 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"tuy" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/ignition{ + id = "testigniter"; + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/station/science/explab) "tuz" = ( /obj/structure/cable, /obj/structure/table, @@ -65421,12 +67439,36 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) +"tuD" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Auxiliary Dock" + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) "tuH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/prisoner, /turf/open/floor/iron, /area/station/security/prison/mess) +"tuQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/service/chapel) "tva" = ( /obj/machinery/light/small/directional/south, /turf/open/openspace, @@ -65441,6 +67483,10 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos) +"tvk" = ( +/obj/structure/sign/warning/docking/directional/north, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) "tvm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65453,6 +67499,13 @@ dir = 4 }, /area/station/hallway/secondary/entry) +"tvt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "tvv" = ( /obj/machinery/door/airlock/command/glass{ name = "Research Director" @@ -65467,10 +67520,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/rd, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) -"tvx" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall/r_wall, -/area/station/maintenance/aft/greater) "tvF" = ( /obj/effect/turf_decal/delivery, /obj/structure/cable, @@ -65505,17 +67554,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"twb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +"twn" = ( +/obj/machinery/vending/wardrobe/chef_wardrobe, +/obj/effect/turf_decal/siding/white/corner{ dir = 8 }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/mine/laborcamp) +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/contraband/moffuchis_pizza/directional/east, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "twt" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -65527,17 +67575,6 @@ /obj/machinery/holopad, /turf/open/floor/carpet/red, /area/station/security/prison/work) -"twx" = ( -/obj/effect/turf_decal/siding/wideplating_new/light, -/obj/item/trash/bee, -/obj/machinery/light/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/sign/poster/official/moth_piping/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/security/prison/work) "twK" = ( /obj/machinery/porta_turret/ai{ dir = 8 @@ -65547,37 +67584,6 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) -"twP" = ( -/obj/structure/table, -/obj/machinery/recharger{ - pixel_x = -6 - }, -/obj/machinery/button/door{ - id = "Secure Gate"; - name = "Cell Shutters"; - pixel_x = 7; - pixel_y = 9 - }, -/obj/machinery/button/door{ - id = "Prison Gate"; - name = "Prison Wing Lockdown"; - pixel_x = 7; - req_access = list("brig") - }, -/obj/structure/cable, -/turf/open/floor/iron/showroomfloor, -/area/station/security/warden) -"twS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/freezer{ - desc = "The freezer where the chef keeps all the stuff that needs to be kept cold. Ice cold."; - name = "The Ice Box" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "twU" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron/freezer, @@ -65608,15 +67614,14 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"txd" = ( +"txf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/warning/cold_temp/directional/west, -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) +/turf/open/floor/iron/dark, +/area/station/service/chapel) "txj" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -65628,6 +67633,12 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"txm" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "txo" = ( /obj/effect/turf_decal/siding/yellow/end{ dir = 4 @@ -65636,17 +67647,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/plating, /area/station/medical/treatment_center) -"txv" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/machinery/vending/hydronutrients, -/turf/open/floor/iron, -/area/station/service/hydroponics) "txE" = ( /obj/item/cigbutt, /obj/effect/decal/cleanable/dirt, @@ -65654,6 +67654,19 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"txH" = ( +/obj/machinery/vending/wallmed/directional/south, +/obj/structure/cable, +/obj/structure/table/glass, +/obj/item/stack/sticky_tape/surgical, +/obj/item/stack/medical/bone_gel, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/camera/directional/south{ + c_tag = "Surgery B"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/surgery/aft) "txI" = ( /obj/structure/closet/wardrobe/black, /turf/open/floor/plating, @@ -65666,6 +67679,10 @@ }, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) +"txX" = ( +/obj/structure/water_source/puddle, +/turf/open/floor/grass, +/area/station/security/prison/garden) "tyb" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, @@ -65739,6 +67756,28 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"tzP" = ( +/obj/structure/table, +/obj/item/hand_labeler, +/obj/item/storage/box/shipping, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/commons/storage/art) +"tzR" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/filled/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "tAg" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 @@ -65755,11 +67794,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/commons/storage/mining) -"tAt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/fore) "tAx" = ( /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/structure/disposalpipe/segment, @@ -65772,15 +67806,6 @@ dir = 4 }, /area/station/service/chapel) -"tAK" = ( -/obj/machinery/computer/security/telescreen/interrogation/directional/north, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner{ - dir = 8 - }, -/area/station/security/processing) "tAL" = ( /obj/structure/table, /obj/machinery/light/small/directional/south, @@ -65789,6 +67814,10 @@ }, /turf/open/floor/iron/white, /area/mine/laborcamp) +"tAN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "tAO" = ( /obj/machinery/space_heater, /obj/effect/mapping_helpers/burnt_floor, @@ -65804,9 +67833,32 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron, /area/station/cargo/miningdock) +"tAT" = ( +/obj/structure/stairs/east, +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/service/kitchen/coldroom) +"tBq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance_hatch, +/obj/machinery/door/firedoor/heavy, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/obj/structure/sign/warning/radiation/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "tBs" = ( /turf/closed/wall, /area/station/maintenance/department/chapel) +"tBw" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/commons/fitness) "tBL" = ( /obj/machinery/computer/atmos_control/nitrogen_tank{ dir = 1 @@ -65814,11 +67866,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/engineering/atmos) -"tBP" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/sign/warning/secure_area/directional/west, -/turf/open/floor/engine, -/area/station/science/explab) "tBR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -65831,18 +67878,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"tBW" = ( -/obj/structure/railing{ - dir = 5 - }, -/obj/structure/sign/warning/biohazard/directional/west, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"tBY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "tCe" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -65855,10 +67890,12 @@ /obj/structure/sign/warning, /turf/closed/wall/r_wall, /area/icemoon/surface/outdoors/nospawn) -"tCr" = ( -/obj/structure/grille, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) +"tCk" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "tCu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -65887,24 +67924,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"tCG" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "tCL" = ( /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/security/prison/work) -"tCO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/mine/eva) "tCR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -65914,14 +67939,6 @@ }, /turf/open/floor/plating, /area/station/security/interrogation) -"tCV" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Security - Permabrig Observation Prep"; - network = list("ss13","prison") - }, -/obj/structure/sign/poster/official/safety_internals/directional/west, -/turf/open/floor/vault, -/area/station/security/prison/rec) "tCW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /obj/machinery/meter, @@ -65970,16 +67987,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"tDA" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/tank_holder/extinguisher, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "tDL" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -65994,6 +68001,10 @@ /obj/effect/landmark/start/lawyer, /turf/open/floor/wood, /area/station/security/courtroom) +"tDS" = ( +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "tDU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -66012,12 +68023,10 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"tEd" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +"tEe" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "tEi" = ( /obj/structure/sink/directional/south, /turf/open/floor/iron, @@ -66032,42 +68041,11 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) -"tEn" = ( -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/radio/intercom/directional/north, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) "tEs" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Holodeck Door" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "holodeck" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/station/commons/fitness) -"tEu" = ( -/obj/structure/table, -/obj/item/hand_labeler, -/obj/item/storage/box/shipping, -/obj/structure/sign/poster/official/fruit_bowl/directional/south, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/commons/storage/art) +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "tEw" = ( /turf/open/genturf/blue, /area/icemoon/underground/unexplored/rivers) @@ -66075,39 +68053,6 @@ /obj/structure/ore_box, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) -"tEE" = ( -/obj/structure/table, -/obj/item/food/deadmouse{ - pixel_y = 18; - pixel_x = 13 - }, -/obj/structure/microscope, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) -"tEK" = ( -/obj/structure/table, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = -1; - pixel_y = 1 - }, -/turf/open/floor/iron, -/area/station/commons/storage/mining) "tEL" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/stripes/line{ @@ -66115,6 +68060,17 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"tEO" = ( +/obj/structure/closet, +/obj/machinery/light/small/directional/north, +/obj/machinery/button/door/directional/north{ + id = "miningdorm_A"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/carpet/donk, +/area/mine/production) "tEZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, @@ -66128,17 +68084,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"tFe" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/effect/landmark/start/cook, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "tFs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"tFt" = ( -/obj/effect/spawner/random/trash/mess, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/maintenance/aft/greater) "tFw" = ( /obj/machinery/camera/directional/north{ c_tag = "Central Hallway North-West" @@ -66155,13 +68114,47 @@ dir = 8 }, /area/station/science/lab) +"tFI" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fitness Maintenance" + }, +/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, +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/fore) "tFV" = ( /obj/structure/cable, /obj/machinery/light/directional/south, /obj/structure/closet/secure_closet/psychology, /obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron/white, /area/station/medical/psychology) +"tFY" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/virology{ + autoclose = 0; + frequency = 1449; + id_tag = "virology_airlock_interior"; + name = "Virology Interior Airlock" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/effect/turf_decal/tile/green/full, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) "tGi" = ( /obj/effect/turf_decal/stripes/end, /obj/machinery/door/airlock/external, @@ -66190,6 +68183,30 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"tGz" = ( +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Apiary" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/hydroponics) +"tGA" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/station/security/prison) "tGB" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -66201,6 +68218,15 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"tGE" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/stairs/south, +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/station/commons/lounge) "tGF" = ( /obj/machinery/camera/directional/east{ c_tag = "Bridge East" @@ -66216,6 +68242,15 @@ dir = 1 }, /area/station/engineering/lobby) +"tGJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron/dark/textured_edge{ + dir = 1 + }, +/area/station/security/prison) "tGP" = ( /obj/machinery/conveyor{ id = "gulag" @@ -66223,12 +68258,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/laborcamp) -"tHe" = ( -/obj/structure/bodycontainer/morgue{ - dir = 8 +"tHb" = ( +/obj/effect/spawner/random/structure/musician/piano/random_piano, +/obj/machinery/button/curtain{ + pixel_x = -32; + id = "cantena_curtains" }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/turf/open/floor/wood, +/area/station/commons/lounge) "tHi" = ( /obj/structure/filingcabinet, /obj/machinery/requests_console/directional/west{ @@ -66251,23 +68288,16 @@ /obj/effect/turf_decal/trimline/blue/filled/warning, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"tHB" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/sign/warning/pods/directional/west, -/obj/structure/cable, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/hallway/secondary/entry) -"tHF" = ( -/obj/structure/sign/nanotrasen, -/obj/structure/fence/post{ - dir = 8 +"tHw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) +"tHJ" = ( +/obj/structure/mannequin/skeleton, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "tHK" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/railing{ @@ -66312,13 +68342,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/disposal) -"tIc" = ( -/obj/structure/sign/warning/electric_shock/directional/south, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 1 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "tIf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66332,6 +68355,7 @@ /area/station/maintenance/port/fore) "tIq" = ( /obj/machinery/portable_atmospherics/canister, +/obj/effect/turf_decal/box, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) "tIu" = ( @@ -66342,6 +68366,7 @@ dir = 4 }, /obj/structure/sink/directional/west, +/obj/structure/sign/warning/biohazard/directional/east, /turf/open/floor/iron/white, /area/station/medical/virology) "tIw" = ( @@ -66358,13 +68383,21 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/dark, /area/station/service/chapel) -"tIL" = ( -/obj/structure/table, -/obj/machinery/light/small/directional/west, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/engineering/material_cheap, -/turf/open/floor/iron/smooth, -/area/station/maintenance/starboard/fore) +"tIC" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"tIM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/mine/eva/lower) "tIS" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 6 @@ -66382,28 +68415,29 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"tJi" = ( -/obj/structure/bookcase{ - name = "Holy Bookcase" +"tJh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/item/kirbyplants/random, +/obj/machinery/light/warm/directional/south, +/obj/machinery/digital_clock/directional/south, +/obj/structure/railing/corner{ + dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) +/turf/open/floor/wood/large, +/area/station/commons/lounge) +"tJl" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/fence/cut/large{ + dir = 1 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "tJu" = ( /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) -"tJv" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) "tJD" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 5 @@ -66443,6 +68477,13 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"tJK" = ( +/obj/structure/transit_tube/horizontal, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "tJN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66455,42 +68496,22 @@ /obj/item/clothing/mask/gas, /turf/open/floor/plating, /area/station/command/teleporter) -"tJV" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/beakers{ - pixel_y = 7 - }, -/obj/item/assembly/igniter{ - pixel_y = -3 - }, -/turf/open/floor/iron/dark/textured_edge{ - dir = 4 - }, -/area/station/medical/chem_storage) -"tJZ" = ( +"tJY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/fore) -"tKf" = ( -/obj/structure/closet, -/obj/machinery/light/small/directional/north, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/carpet/donk, -/area/mine/production) +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "tKi" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/lobby) +"tKm" = ( +/obj/structure/ore_container/food_trough/raptor_trough, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "tKq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -66508,13 +68529,47 @@ /obj/structure/chair/pew/left, /turf/open/floor/wood, /area/station/security/prison/rec) +"tKD" = ( +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/poddoor/preopen{ + id = "Biohazard"; + name = "Biohazard Containment Door" + }, +/obj/structure/sign/warning/secure_area/directional/north, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured, +/area/station/science/research) +"tKH" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "tKI" = ( /turf/closed/wall, /area/station/maintenance/port/greater) +"tKJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = 32 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "tKN" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"tKO" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/science/ordnance/testlab) "tKV" = ( /obj/structure/table_frame, /obj/effect/decal/cleanable/glass, @@ -66529,6 +68584,19 @@ /obj/effect/turf_decal/tile/green/anticorner/contrasted, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"tKY" = ( +/obj/structure/rack, +/obj/item/soap{ + pixel_y = -2 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Ordnance Lower Mix Lab"; + network = list("ss13","rd") + }, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "tKZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66538,21 +68606,6 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) -"tLc" = ( -/obj/machinery/door/airlock/external{ - glass = 1; - name = "Public Mining Storage"; - opacity = 0 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/turf/open/floor/iron/dark, -/area/mine/storage) "tLe" = ( /obj/machinery/cryo_cell, /obj/effect/turf_decal/stripes/line{ @@ -66568,6 +68621,17 @@ /obj/structure/flora/rock/pile/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"tLm" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/station/hallway/secondary/entry) "tLp" = ( /obj/machinery/computer/records/medical{ dir = 4 @@ -66575,12 +68639,6 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/cmo) -"tLy" = ( -/obj/machinery/vatgrower{ - dir = 4 - }, -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) "tLB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/pink/visible, /obj/effect/turf_decal/tile/yellow{ @@ -66591,6 +68649,22 @@ "tLF" = ( /turf/closed/wall, /area/station/hallway/primary/starboard) +"tLI" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) +"tLL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "tLM" = ( /obj/machinery/camera/directional/south{ c_tag = "Robotics Lab - South"; @@ -66625,6 +68699,10 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"tMc" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "tMe" = ( /obj/machinery/computer/mechpad{ dir = 1 @@ -66661,21 +68739,16 @@ "tMO" = ( /turf/closed/wall, /area/station/medical/break_room) +"tMS" = ( +/obj/structure/sign/warning/fire/directional/north, +/turf/open/openspace, +/area/station/engineering/atmos/storage) "tMY" = ( /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka, /obj/structure/closet, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"tNb" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/railing/corner/end/flip{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "tNd" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/effect/turf_decal/siding/green{ @@ -66703,11 +68776,24 @@ /obj/effect/turf_decal/tile/dark/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/virology) +"tNw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "tNx" = ( /obj/structure/cable, /obj/machinery/light/floor, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"tNz" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "tND" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 4 @@ -66719,45 +68805,20 @@ dir = 10 }, /area/mine/living_quarters) -"tNH" = ( -/obj/structure/railing, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 6 - }, -/turf/open/floor/wood/large, -/area/station/hallway/primary/starboard) "tNJ" = ( /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/lesser) -"tNN" = ( -/obj/structure/flora/tree/pine/style_random, -/obj/structure/marker_beacon/cerulean, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) -"tNY" = ( -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/lobby) -"tOe" = ( -/obj/effect/spawner/random/structure/closet_maintenance, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"tOf" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio1"; - name = "Xenobio Pen 1 Blast Door" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +"tOb" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/light/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Medbay Chemistry Lab - South"; + network = list("ss13","medbay") }, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "tOi" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66767,6 +68828,14 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"tOk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/iron, +/area/station/engineering/storage_shared) "tOq" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -66783,63 +68852,22 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"tOC" = ( -/obj/effect/spawner/random/trash/hobo_squat, -/obj/effect/decal/cleanable/dirt/dust, +"tOE" = ( +/obj/structure/cable/multilayer/multiz, +/obj/structure/sign/warning/electric_shock/directional/north, /turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/area/station/security/prison/safe) "tOF" = ( /obj/structure/chair/comfy/black{ dir = 8 }, /turf/open/floor/carpet, /area/station/command/meeting_room) -"tOO" = ( -/obj/structure/sign/warning/no_smoking/circle/directional/west, -/obj/machinery/light/directional/west, -/obj/machinery/camera{ - c_tag = "Medbay Mid-South"; - dir = 5; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/table/glass, -/obj/machinery/fax{ - fax_name = "Medical"; - name = "Medical Fax Machine" - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "tOX" = ( /obj/machinery/light/small/broken/directional/south, /obj/item/trash/energybar, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"tPx" = ( -/obj/structure/table, -/obj/item/multitool/circuit{ - pixel_x = -8 - }, -/obj/item/multitool/circuit{ - pixel_x = -4 - }, -/obj/item/multitool/circuit, -/obj/item/stock_parts/power_store/cell/high{ - pixel_x = 8; - pixel_y = 9 - }, -/obj/item/stock_parts/power_store/cell/high{ - pixel_x = 8; - pixel_y = -2 - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/explab) "tPz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/side{ @@ -66865,6 +68893,27 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central) +"tPL" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) +"tPT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "tPV" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -66891,16 +68940,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/medical/storage) -"tQE" = ( -/obj/effect/turf_decal/siding/brown/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "tQM" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -66928,6 +68967,44 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"tRo" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/starboard) +"tRq" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/item/toy/plush/moth{ + name = "Theseus" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/flag/mothic/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"tRP" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Hydroponics Maintenance" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/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, +/turf/open/floor/plating, +/area/station/service/hydroponics) "tRX" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -66941,54 +69018,50 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) -"tSd" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/security/general, -/obj/effect/mapping_helpers/airlock/access/any/engineering/external, -/turf/open/floor/plating, -/area/station/maintenance/fore) +"tSb" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/bluespace_vendor/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) "tSi" = ( /obj/machinery/suit_storage_unit/security, /turf/open/floor/iron/smooth, /area/station/security/brig/upper) +"tSj" = ( +/obj/structure/fence/corner{ + dir = 1 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "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, -/area/station/service/library) "tSx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/workout) -"tSy" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +"tSF" = ( +/obj/machinery/door/window/left/directional/west{ + req_one_access = list("bar", "kitchen"); + name = "Deliveries" }, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"tSK" = ( -/obj/machinery/chem_mass_spec, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ dir = 8 }, -/obj/structure/sign/warning/no_smoking/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) -"tSO" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/textured, +/area/station/service/kitchen/coldroom) "tTc" = ( /obj/item/storage/bag/plants/portaseeder, /obj/structure/table/glass, @@ -66999,22 +69072,25 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) -"tTw" = ( -/obj/structure/stairs/east, -/obj/structure/railing, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "tTK" = ( -/obj/structure/railing/corner{ - dir = 4 +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/icemoon/underground/explored) +/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) "tTL" = ( /obj/structure/chair, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"tTO" = ( +/obj/structure/fence/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "tTV" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -67037,24 +69113,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) -"tUm" = ( -/obj/machinery/door/window/left/directional/west{ - req_one_access = list("bar", "kitchen"); - name = "Deliveries" - }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/textured, -/area/station/service/kitchen/coldroom) "tUn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -67091,6 +69149,10 @@ specialfunctions = 4 }, /obj/machinery/photobooth/security, +/obj/machinery/button/flasher{ + id = "transferflash"; + pixel_y = 34 + }, /turf/open/floor/iron/smooth, /area/station/security/execution/transfer) "tUC" = ( @@ -67098,6 +69160,13 @@ /obj/machinery/light/floor, /turf/open/floor/iron/white, /area/mine/living_quarters) +"tUG" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance/four, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating, +/area/station/construction) "tUK" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -67110,21 +69179,12 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "tUO" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/turf/open/floor/iron, -/area/station/command/bridge) +/obj/structure/sign/painting/large/library{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/service/library) "tUV" = ( /obj/structure/railing{ dir = 8 @@ -67137,6 +69197,12 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"tVd" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "tVf" = ( /turf/closed/wall, /area/station/security/prison) @@ -67147,6 +69213,15 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/dark, /area/station/science/server) +"tVx" = ( +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "tVA" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/radiation, @@ -67154,17 +69229,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"tVB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light/dim/directional/south, -/obj/machinery/requests_console/directional/south{ - department = "Medbay"; - name = "Medbay Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/assistance, -/turf/open/floor/iron/white, -/area/station/medical/cryo) +"tVF" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/tlv_cold_room, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "tWc" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/spawner/random/trash/soap, @@ -67179,6 +69248,17 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/xenobiology) +"tWj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/grimy, +/area/station/service/bar/backroom) "tWp" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -67211,6 +69291,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/mine/mechbay) +"tWJ" = ( +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/carpet/lone, +/area/station/service/chapel) "tWK" = ( /obj/structure/cable, /turf/open/floor/plating/snowed/icemoon, @@ -67226,44 +69312,18 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/security/prison/work) -"tWY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/machinery/door/airlock/maintenance{ - name = "Kitchen Maintenance" - }, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) -"tWZ" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "tXb" = ( /obj/structure/table, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"tXd" = ( -/obj/machinery/seed_extractor, -/obj/machinery/camera/directional/north{ - c_tag = "Security - Permabrig Forestry"; - network = list("ss13","prison") - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/prison/garden) -"tXg" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"tXc" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/landmark/start/paramedic, +/obj/structure/cable, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "tXh" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -67272,6 +69332,11 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"tXk" = ( +/obj/machinery/shower/directional/west, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "tXs" = ( /obj/structure/ladder, /obj/machinery/light/small/red/directional/west, @@ -67288,6 +69353,19 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"tXM" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/item/plant_analyzer, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "tXV" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/camera/directional/north{ @@ -67312,6 +69390,17 @@ }, /turf/open/floor/iron/dark, /area/station/science/server) +"tYt" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) +"tYu" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "tYz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67334,6 +69423,28 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/security/prison/garden) +"tYF" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"tYS" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/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 = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"tYW" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) "tYZ" = ( /obj/machinery/door/airlock/external{ name = "External Airlock" @@ -67356,61 +69467,26 @@ /obj/item/shovel/spade, /turf/open/floor/grass, /area/station/maintenance/starboard/aft) -"tZe" = ( -/obj/machinery/vending/wardrobe/gene_wardrobe, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron/dark, -/area/station/science/genetics) -"tZf" = ( -/obj/structure/cable, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "tZm" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"tZo" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "tZp" = ( /obj/structure/ladder, +/obj/effect/turf_decal/weather/snow/corner, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) -"tZG" = ( -/obj/machinery/meter, -/obj/effect/turf_decal/trimline/dark_red/arrow_ccw{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/pink/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/storage) -"tZO" = ( -/obj/machinery/modular_computer/preset/civilian{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) -"tZR" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "packageSort2" - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/station/cargo/sorting) +"tZv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "tZZ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) "uab" = ( @@ -67424,6 +69500,18 @@ /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, /turf/open/floor/iron/dark/textured_large, /area/station/ai_monitored/turret_protected/ai_upload) +"uag" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/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, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "uah" = ( /obj/machinery/light_switch/directional/west, /obj/structure/cable, @@ -67449,6 +69537,12 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"uap" = ( +/obj/structure/fence/cut/large{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "uar" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67487,38 +69581,10 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"ubh" = ( -/turf/open/openspace/xenobio, -/area/station/science/xenobiology) -"ubi" = ( -/turf/open/misc/asteroid/snow/coldroom, -/area/icemoon/underground/explored) "ubk" = ( /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"ubo" = ( -/obj/machinery/status_display/door_timer{ - id = "Cell 1"; - name = "Cell 1"; - pixel_x = -32 - }, -/obj/machinery/door/poddoor/preopen{ - id = "Prison Gate"; - name = "Prison Blast Door" - }, -/obj/machinery/door/firedoor, -/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 = 8 - }, -/turf/open/floor/iron/textured, -/area/station/security/brig) -"ubp" = ( -/obj/effect/spawner/random/structure/grille, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "ubq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, @@ -67546,28 +69612,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"ubG" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/stairs/medium, +/area/mine/eva/lower) "ubH" = ( /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/locker) -"ubI" = ( -/obj/structure/ladder{ - name = "upper dispenser access" - }, -/obj/structure/sign/warning/no_smoking/directional/east, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/iron/dark/textured_large, -/area/station/medical/chemistry) -"ubK" = ( -/obj/machinery/computer/holodeck{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/commons/fitness) "ubY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67600,11 +69655,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"ucD" = ( -/obj/machinery/plate_press, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark/smooth_half, -/area/station/security/prison/work) +"ucu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "ucN" = ( /turf/closed/wall/r_wall, /area/station/security/detectives_office) @@ -67612,20 +69672,6 @@ /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, /area/station/engineering/supermatter) -"udf" = ( -/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, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "udj" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/cable, @@ -67643,15 +69689,19 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "udA" = ( -/obj/structure/training_machine, -/obj/item/target, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 +/obj/effect/turf_decal/tile/blue, +/obj/item/kirbyplants/random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/status_display/evac/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/commons/fitness) +/turf/open/floor/iron/white/corner{ + dir = 8 + }, +/area/station/hallway/secondary/entry) "udK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -67672,22 +69722,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"udQ" = ( -/obj/structure/table, -/obj/item/computer_disk/ordnance, -/obj/item/computer_disk/ordnance, -/obj/item/computer_disk/ordnance, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/command/heads_quarters/rd) -"udR" = ( -/obj/structure/cable, -/obj/structure/minecart_rail{ - dir = 1 - }, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) "uee" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -67700,14 +69734,12 @@ /obj/structure/cable, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"uek" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/potato{ - name = "\improper Beepsky's emergency battery" +"uen" = ( +/obj/structure/fence/door{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/fore) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "uep" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67718,6 +69750,13 @@ /obj/structure/flora/tree/pine/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"uet" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/heads_quarters/hos) "uey" = ( /obj/machinery/power/supermatter_crystal/engine, /turf/open/floor/engine, @@ -67735,6 +69774,10 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"ueF" = ( +/obj/structure/sign/departments/holy/directional/east, +/turf/open/openspace, +/area/station/service/chapel) "ueP" = ( /obj/structure/table, /obj/structure/reagent_dispensers/servingdish, @@ -67761,6 +69804,11 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) +"ufb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/engine, +/area/station/science/explab) "uff" = ( /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, @@ -67771,11 +69819,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/processing) -"ufw" = ( -/obj/machinery/door/firedoor, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "ufF" = ( /obj/structure/table, /obj/item/storage/box/prisoner{ @@ -67797,14 +69840,6 @@ }, /turf/open/floor/sepia, /area/station/security/prison/rec) -"uge" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "ugi" = ( /obj/machinery/light/small/directional/east, /obj/machinery/computer/order_console/bitrunning{ @@ -67829,6 +69864,10 @@ /obj/machinery/requests_console/auto_name/directional/north, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"ugA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/fore) "ugG" = ( /obj/structure/table, /obj/item/clothing/gloves/color/fyellow, @@ -67841,19 +69880,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron, /area/station/maintenance/department/electrical) -"ugI" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "ugP" = ( /obj/effect/turf_decal/siding/red{ dir = 4 @@ -67868,6 +69894,24 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/engineering/atmos) +"ugX" = ( +/obj/machinery/door/airlock{ + id_tag = "Dorm3"; + name = "Dorm 3" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) +"ugZ" = ( +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/iron, +/area/station/commons/dorms) "uhb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/brown{ @@ -67876,14 +69920,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/maintenance/disposal) -"uhs" = ( -/obj/structure/railing/corner, -/obj/machinery/camera/directional/south{ - c_tag = "Mining B-1 Hallway North" - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron/dark/side, -/area/mine/eva) "uht" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -67915,6 +69951,16 @@ }, /turf/open/floor/iron/white/side, /area/mine/living_quarters) +"uhF" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "uhH" = ( /obj/machinery/door/airlock/engineering{ name = "Chemistry Lab Utilities" @@ -67926,15 +69972,6 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"uhX" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/sign/warning/deathsposal/directional/north, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "uif" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67954,44 +69991,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"uil" = ( -/obj/effect/landmark/event_spawn, -/obj/machinery/duct, -/obj/effect/turf_decal/siding/dark{ - dir = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/checker, -/area/station/hallway/secondary/service) -"uin" = ( -/obj/structure/sign/warning/fire/directional/south, -/obj/effect/turf_decal/stripes/corner{ +"uii" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 }, -/obj/effect/turf_decal/trimline/dark_green/arrow_ccw, -/obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer1{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage) -"uiq" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks, -/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/small/dim/directional/east, /turf/open/floor/iron/dark, -/area/station/service/bar) -"uiv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/area/station/medical/morgue) "uiF" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -68009,19 +70016,6 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"uiM" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/ai_monitored/command/nuke_storage) -"uiV" = ( -/obj/structure/disposalpipe/segment{ - 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/station/service/bar/backroom) "uja" = ( /turf/closed/wall, /area/station/commons/toilet) @@ -68031,10 +70025,6 @@ }, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"ujp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "ujs" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -68047,6 +70037,12 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/smooth, /area/station/engineering/lobby) +"ujK" = ( +/obj/structure/fence{ + dir = 2 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "ujP" = ( /obj/structure/table, /obj/machinery/computer/security/telescreen/research, @@ -68071,34 +70067,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/service/chapel) -"uks" = ( -/obj/machinery/door/airlock/command{ - name = "Conference Room" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/command/general, -/obj/machinery/door/firedoor, -/turf/open/floor/wood, -/area/station/command/meeting_room) -"ukt" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"ukv" = ( -/obj/machinery/computer/exoscanner_control{ - dir = 1 - }, -/obj/machinery/light_switch/directional/east{ - pixel_x = 22; - pixel_y = 8 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/drone_bay) "ukz" = ( /obj/machinery/duct, /obj/structure/disposalpipe/segment{ @@ -68121,6 +70089,32 @@ }, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) +"ukJ" = ( +/obj/effect/turf_decal/trimline/neutral/warning, +/obj/effect/turf_decal/trimline/neutral/mid_joiner, +/obj/item/flashlight{ + pixel_y = 9 + }, +/obj/item/flashlight{ + pixel_y = 9 + }, +/obj/item/flashlight{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/structure/rack, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron/dark/smooth_edge, +/area/station/ai_monitored/command/storage/eva) "ukN" = ( /obj/structure/table, /obj/machinery/door/poddoor/shutters{ @@ -68132,6 +70126,19 @@ /obj/machinery/door/window/left/directional/south, /turf/open/floor/iron, /area/station/security/prison/visit) +"ukR" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Teleporter Maintenance" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/command/teleporter, +/turf/open/floor/plating, +/area/station/maintenance/central/lesser) "ukV" = ( /obj/structure/closet/crate/freezer, /obj/item/reagent_containers/blood/random, @@ -68168,6 +70175,13 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/dorms) +"ulm" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) "ult" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/lab) @@ -68177,12 +70191,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/prison/safe) -"ulE" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ - dir = 1 +"ulL" = ( +/obj/machinery/modular_computer/preset/id, +/obj/effect/turf_decal/tile/blue/full, +/obj/machinery/camera/directional/north{ + c_tag = "Chief Medical Office North"; + network = list("ss13","medbay") }, -/turf/open/floor/iron, -/area/station/science/ordnance) +/obj/machinery/button/door/directional/east{ + id = "cmoprivacy"; + name = "CMO Shutter Control"; + req_access = list("cmo") + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east{ + pixel_x = 37 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/command/heads_quarters/cmo) +"ulR" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "uma" = ( /obj/item/chisel, /obj/item/storage/toolbox/artistic, @@ -68190,17 +70221,16 @@ /obj/item/storage/crayons, /turf/open/floor/sepia, /area/station/security/prison/rec) -"umb" = ( -/obj/structure/sign/warning/docking/directional/south, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"umc" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 +"umg" = ( +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/stone, -/area/station/service/bar/atrium) +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"umh" = ( +/turf/closed/wall/ice, +/area/icemoon/surface/outdoors/nospawn) "uml" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68214,6 +70244,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"umv" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/research) "umz" = ( /obj/effect/turf_decal/siding/yellow{ dir = 1 @@ -68234,13 +70275,15 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"umF" = ( -/obj/structure/stairs/north, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/chapel) +"umD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) +"umM" = ( +/obj/effect/landmark/start/clown, +/turf/open/floor/wood, +/area/station/commons/lounge) "umR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -68288,14 +70331,14 @@ /obj/machinery/gulag_teleporter, /turf/open/floor/iron/showroomfloor, /area/station/security/processing) -"unM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair{ +"unG" = ( +/obj/machinery/computer/station_alert{ dir = 4 }, -/obj/structure/sign/departments/exodrone/directional/west, -/turf/open/floor/iron, -/area/station/cargo/storage) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/ce/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "unO" = ( /obj/item/paper_bin{ pixel_x = -3; @@ -68306,16 +70349,6 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/cargo/office) -"unT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/official/random/directional/west, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/mine/eva) "uog" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -68369,36 +70402,9 @@ 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/atmos) -"uoF" = ( -/obj/machinery/pdapainter/engineering, -/obj/machinery/button/door/directional/west{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_y = 10; - req_access = list("engineering") - }, -/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 = -10; - req_access = list("engineering") - }, -/obj/effect/turf_decal/tile/neutral/full, -/turf/open/floor/iron/dark/smooth_large, -/area/station/command/heads_quarters/ce) -"uoS" = ( -/obj/machinery/vending/games, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/engineering/atmos) "uoT" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/structure/table, @@ -68412,6 +70418,22 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"uoY" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "upa" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -68439,12 +70461,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) -"upx" = ( -/obj/machinery/light_switch/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) +"upB" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron, +/area/station/security/prison/visit) "upH" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -68464,6 +70484,17 @@ /obj/structure/tank_holder/extinguisher, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"upU" = ( +/obj/structure/table/wood, +/obj/item/raptor_dex{ + pixel_y = 13 + }, +/obj/item/raptor_dex{ + pixel_y = 7 + }, +/obj/item/raptor_dex, +/turf/open/misc/hay/icemoon, +/area/icemoon/underground/explored) "upV" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, @@ -68507,13 +70538,11 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"uqV" = ( -/obj/structure/sign/warning/directional/east{ - desc = "A sign warning of a sudden drop below."; - name = "SUDDEN DROP sign" - }, -/turf/open/openspace/icemoon/keep_below, -/area/icemoon/surface/outdoors/nospawn) +"uqX" = ( +/obj/effect/decal/remains/human, +/obj/item/pickaxe/improvised, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/labor_camp) "urd" = ( /obj/structure/chair/stool/directional/north, /turf/open/floor/iron, @@ -68528,6 +70557,22 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"urk" = ( +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/poddoor/preopen{ + id = "Biohazard"; + name = "Biohazard Containment Door" + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/dark/textured, +/area/station/science/research) +"urm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/wood, +/area/station/security/prison/rec) "uro" = ( /obj/machinery/requests_console/directional/east{ department = "Telecomms Admin"; @@ -68538,6 +70583,13 @@ /obj/effect/mapping_helpers/requests_console/assistance, /turf/open/floor/iron, /area/station/tcommsat/computer) +"urp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "urw" = ( /obj/structure/railing/corner{ dir = 4 @@ -68565,6 +70617,24 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/research) +"urQ" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/machinery/light/small/directional/west, +/obj/item/stack/package_wrap{ + pixel_y = 3 + }, +/obj/item/hand_labeler, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"usm" = ( +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "uso" = ( /obj/structure/closet/crate/trashcart, /obj/effect/spawner/random/contraband/prison, @@ -68577,22 +70647,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) -"usz" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = -32; - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"usP" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/research) "usS" = ( /obj/structure/bed{ dir = 1 @@ -68607,37 +70661,12 @@ dir = 10 }, /area/station/security/prison/safe) -"utn" = ( -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/structure/table/glass, -/obj/item/seeds/tower, -/obj/item/seeds/chanter{ - pixel_y = 3; - pixel_x = 3 - }, -/obj/item/seeds/watermelon{ - pixel_y = -6; - pixel_x = 3 - }, -/obj/item/seeds/apple{ - pixel_y = 4; - pixel_x = 2 - }, -/obj/item/seeds/banana, -/obj/item/seeds/rose{ - pixel_y = -3; - pixel_x = -4 - }, -/obj/structure/noticeboard/directional/west, -/obj/item/paper/guides/jobs/hydroponics{ - pixel_y = 3; - pixel_x = -27 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"usU" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/iron/grimy, +/area/station/commons/vacant_room/office) "utr" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical{ @@ -68661,27 +70690,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"utG" = ( -/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/structure/cable, -/turf/open/floor/wood/parquet, -/area/station/service/bar/backroom) "utR" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"utW" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/plating, -/area/station/maintenance/fore) "uub" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port to Fuel Pipe" @@ -68693,10 +70707,6 @@ /obj/effect/spawner/random/techstorage/tcomms_all, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"uuh" = ( -/obj/structure/noticeboard/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "uum" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel" @@ -68740,17 +70750,16 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage) +"uuO" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "uuP" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/office) -"uvi" = ( -/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/dark, -/area/station/medical/cryo) "uvk" = ( /obj/structure/window/reinforced/plasma/spawner/directional/west, /obj/structure/cable, @@ -68761,6 +70770,14 @@ "uvt" = ( /turf/closed/wall, /area/station/science/robotics/mechbay) +"uvu" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating, +/area/station/ai_monitored/turret_protected/aisat/maint) "uvv" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/corner{ @@ -68768,6 +70785,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"uvA" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "botany_chasm_and_wolf_shutters" + }, +/turf/open/floor/plating, +/area/station/service/hydroponics) "uvM" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, @@ -68784,13 +70811,9 @@ /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat/hallway) "uwd" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 8 - }, -/turf/open/misc/dirt{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/icemoon/underground/explored/graveyard) +/obj/item/chair/wood, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "uwj" = ( /obj/machinery/duct, /obj/structure/disposalpipe/segment, @@ -68814,6 +70837,17 @@ dir = 8 }, /area/station/security/brig/entrance) +"uwE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, +/obj/effect/mapping_helpers/mail_sorting/service/theater, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "uwH" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -68844,6 +70878,21 @@ /obj/effect/mapping_helpers/airlock/access/all/service/janitor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"uwR" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Xenobiology External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) +"uwT" = ( +/turf/closed/wall/r_wall, +/area/station/science/cytology) "uxd" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 4 @@ -68869,11 +70918,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/office) -"uxp" = ( -/turf/open/floor/iron/stairs/medium{ - dir = 4 +"uxm" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/area/station/engineering/lobby) +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "uxx" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output{ dir = 1 @@ -68887,26 +70939,35 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"uxG" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat/service"; + name = "Service Bay Turret Control"; + pixel_x = 27; + req_access = list("minisat") + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat_interior) "uxK" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) -"uxU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"uxZ" = ( -/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +"uyo" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Courtroom" }, -/turf/open/floor/plating, -/area/station/maintenance/fore/lesser) -"uye" = ( -/obj/item/kirbyplants/random/dead, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/item/radio/intercom/directional/north, +/obj/structure/chair{ + name = "Defense" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/security/courtroom) "uyq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68933,13 +70994,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark/textured, /area/station/medical/treatment_center) -"uyU" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage) "uyV" = ( /obj/item/target/alien/anchored, /obj/effect/turf_decal/stripes/line{ @@ -68957,6 +71011,24 @@ }, /turf/open/floor/iron, /area/station/commons/dorms/laundry) +"uza" = ( +/obj/machinery/camera/directional/west{ + c_tag = "MiniSat Antechamber"; + network = list("minisat"); + start_active = 1 + }, +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat/atmos"; + name = "Atmospherics Turret Control"; + pixel_x = -27; + req_access = list("minisat") + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat_interior) "uzd" = ( /obj/structure/rack, /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp{ @@ -68964,6 +71036,16 @@ }, /turf/open/floor/iron/smooth, /area/mine/mechbay) +"uze" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "uzf" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/effect/turf_decal/bot, @@ -68974,12 +71056,44 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"uzr" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/table/glass, +/obj/machinery/fax{ + fax_name = "Medical"; + name = "Medical Fax Machine" + }, +/obj/machinery/camera/directional/west{ + c_tag = "Medbay Mid-South"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "uzs" = ( /obj/structure/rack, /obj/item/pickaxe, /obj/effect/turf_decal/tile/dark/fourcorners, /turf/open/floor/iron, /area/mine/living_quarters) +"uzu" = ( +/obj/machinery/door/airlock/wood{ + name = "Bar Backroom" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/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/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/turf/open/floor/iron/dark/textured_half, +/area/station/service/bar/backroom) "uzB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -69014,21 +71128,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/storage/primary) -"uAx" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/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/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/ordnance/office) "uAE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -69050,6 +71149,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos) +"uAL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"uAP" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 4 + }, +/area/station/service/hydroponics) "uBi" = ( /turf/closed/wall, /area/station/ai_monitored/turret_protected/ai) @@ -69064,34 +71175,14 @@ /obj/structure/railing{ dir = 9 }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 9 + }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) "uBA" = ( /turf/closed/wall, /area/station/engineering/atmos/project) -"uBD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/spawner/random/trash/cigbutt, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"uBL" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/official/random/directional/east, -/obj/structure/cable, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/station/hallway/secondary/entry) "uBP" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/plating, @@ -69174,26 +71265,19 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/lobby) +"uCM" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/mob/living/carbon/human/species/monkey, +/obj/machinery/camera/directional/north{ + c_tag = "Virology Pen"; + network = list("ss13","medbay") + }, +/turf/open/floor/grass, +/area/station/medical/virology) "uCN" = ( /obj/structure/grille/broken, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"uCU" = ( -/obj/machinery/button/flasher{ - id = "executionflash"; - pixel_x = -24; - pixel_y = 5 - }, -/obj/machinery/button/door/directional/west{ - id = "executionfireblast"; - name = "Transfer Area Lockdown"; - pixel_y = -6; - req_access = list("brig") - }, -/obj/structure/railing, -/obj/machinery/door/window/left/directional/south, -/turf/open/floor/plating/icemoon, -/area/station/security/execution/education) "uDc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69240,18 +71324,14 @@ /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"uDr" = ( -/obj/item/stamp{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stamp/denied{ - pixel_x = 4; - pixel_y = -2 +"uDv" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 }, -/obj/structure/table, -/turf/open/floor/iron, -/area/station/cargo/office) +/obj/structure/sink/kitchen/directional/west, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "uDy" = ( /obj/item/book/bible, /obj/structure/cable, @@ -69260,13 +71340,6 @@ /obj/structure/table/wood, /turf/open/floor/iron/dark, /area/station/security/prison/rec) -"uDC" = ( -/obj/structure/table/wood, -/obj/machinery/airalarm/directional/north, -/obj/item/book/bible, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "uDE" = ( /obj/structure/table, /obj/item/folder/yellow, @@ -69291,6 +71364,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"uEf" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "uEk" = ( /obj/structure/closet/wardrobe/miner, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -69309,10 +71389,6 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) -"uEA" = ( -/obj/structure/closet/crate, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "uEI" = ( /obj/structure/railing/corner{ dir = 4 @@ -69341,11 +71417,30 @@ /turf/open/floor/plating, /area/station/security/processing) "uFg" = ( -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) +/obj/machinery/door/poddoor/preopen{ + id = "Prison Gate"; + name = "Prison Blast Door" + }, +/obj/machinery/door/firedoor, +/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 = 8 + }, +/obj/machinery/status_display/door_timer{ + pixel_x = -32; + id = "Cell 1"; + name = "Cell 1" + }, +/turf/open/floor/iron/textured, +/area/station/security/brig) "uFh" = ( /turf/open/floor/plating, /area/station/construction) +"uFt" = ( +/obj/structure/railing/corner, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "uFz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/holopad, @@ -69354,6 +71449,22 @@ }, /turf/open/floor/iron/white, /area/station/medical/psychology) +"uFE" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/iron, +/area/station/service/bar) +"uFF" = ( +/obj/machinery/disposal/bin{ + desc = "A pneumatic waste disposal unit. This one leads to the frozen exterior of the moon."; + name = "deathsposal unit" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/warning/deathsposal/directional/north, +/obj/effect/turf_decal/tile/green/full, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) "uFH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69367,17 +71478,35 @@ /obj/machinery/holopad, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage) -"uGe" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/structure/sign/picture_frame/portrait/bar{ - pixel_x = 32 +"uFS" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/fore) +"uFV" = ( +/obj/structure/tank_dispenser{ + pixel_x = -1 }, -/obj/structure/displaycase/forsale/kitchen{ - pixel_y = 8 +/obj/machinery/camera/directional/north{ + c_tag = "Atmospherics Monitoring" + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, +/obj/item/radio/intercom/directional/north, /turf/open/floor/iron, -/area/station/service/bar) +/area/station/engineering/atmos/storage/gas) +"uGe" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "uGl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -69394,7 +71523,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/turf/open/floor/plating/snowed/icemoon, +/turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) "uGq" = ( /obj/structure/cable, @@ -69422,10 +71551,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/engineering/main) -"uGY" = ( -/obj/structure/bookcase, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "uHc" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -69444,16 +71569,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore) -"uHS" = ( -/obj/structure/disposaloutlet{ - dir = 8 - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 +"uHN" = ( +/obj/machinery/newscaster/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 }, -/obj/structure/sign/warning/gas_mask/directional/north, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) +/turf/open/floor/iron, +/area/station/hallway/primary/central) "uHV" = ( /obj/structure/disposalpipe/trunk/multiz{ dir = 1 @@ -69466,6 +71588,13 @@ "uIg" = ( /turf/open/floor/engine/n2o, /area/station/engineering/atmos) +"uIh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "uIj" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -69478,13 +71607,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"uIz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable/multilayer/multiz, -/turf/open/floor/plating, -/area/station/engineering/lobby) "uIC" = ( /obj/machinery/door/airlock/security{ aiControlDisabled = 1; @@ -69516,20 +71638,63 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel/office) +"uIJ" = ( +/obj/structure/ladder{ + name = "chemistry lab access" + }, +/obj/effect/turf_decal/stripes/end, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay Chemistry Lab - North"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/medical/chemistry) "uIM" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"uIS" = ( -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"uIQ" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/scanning_module, +/obj/item/stock_parts/scanning_module, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/item/multitool, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker + }, +/turf/open/floor/iron/white/side{ + dir = 10 + }, +/area/station/science/lab) "uIV" = ( /obj/machinery/meter, /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"uJd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/mine/eva/lower) +"uJi" = ( +/obj/structure/rack, +/obj/item/crowbar/large/old, +/obj/effect/turf_decal/tile/dark/fourcorners, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/mine/living_quarters) "uJn" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -69554,19 +71719,32 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"uJI" = ( -/obj/structure/table/wood, -/obj/structure/noticeboard/directional/north, -/obj/item/flashlight/lantern, +"uJN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/service/chapel) +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) +"uJR" = ( +/turf/open/floor/plating, +/area/station/engineering/main) "uJX" = ( /obj/structure/closet/firecloset, /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/tile/red/half, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) +"uKc" = ( +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "uKj" = ( /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -69575,31 +71753,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/white, /area/station/medical/cryo) -"uKx" = ( -/obj/structure/closet, -/obj/item/clothing/suit/hooded/wintercoat{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/shoes/wheelys/skishoes{ - pixel_y = -8 - }, -/obj/effect/spawner/random/maintenance, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) -"uKJ" = ( -/obj/machinery/newscaster/directional/east, -/obj/structure/sink/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/security/prison/work) "uKM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -69626,28 +71779,28 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"uKR" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/commons/dorms) "uKW" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/execution/education) +"uKY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "uLe" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter) -"uLp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id = "bridge blast"; - name = "Bridge Blast Door" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/command/bridge) -"uLr" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/engineering/storage_shared) "uLC" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 @@ -69663,24 +71816,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"uLJ" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/item/kirbyplants/organic/plant10, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"uLR" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "uLX" = ( /obj/machinery/door/airlock{ name = "Port Emergency Storage" @@ -69691,36 +71826,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured, /area/station/commons/storage/emergency/port) -"uLZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/small/dim/directional/north, -/obj/effect/decal/cleanable/vomit/old, -/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) -"uMj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants/random/dead, -/turf/open/floor/iron, -/area/station/maintenance/starboard/fore) "uMm" = ( /turf/open/floor/iron/white/corner{ dir = 4 }, /area/station/hallway/secondary/entry) -"uMq" = ( -/obj/structure/sign/warning/cold_temp{ - pixel_x = -29 +"uMp" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 }, -/obj/structure/sign/warning/gas_mask{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals."; - pixel_x = 30 +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 }, -/turf/open/floor/iron/dark, -/area/mine/storage) +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/vending/hydronutrients, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"uMs" = ( +/obj/structure/sign/warning/fire/directional/north, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "uMx" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -69766,19 +71891,10 @@ "uMN" = ( /turf/open/openspace, /area/station/commons/storage/mining) -"uMU" = ( -/obj/structure/fence/corner, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"uNp" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) +"uMW" = ( +/obj/structure/sign/warning/directional/west, +/turf/open/openspace/icemoon, +/area/icemoon/surface/outdoors/nospawn) "uNq" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -69788,37 +71904,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"uNu" = ( -/obj/effect/turf_decal/siding/yellow/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/yellow/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/large, -/area/station/engineering/storage) -"uNw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/trash/raisins, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "uNE" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat/hallway) -"uNG" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 5 - }, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) -"uNH" = ( -/obj/structure/railing, -/obj/structure/closet/secure_closet/cytology, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) +"uNN" = ( +/obj/effect/spawner/random/trash/bin, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "uNV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/siding/wideplating/dark{ @@ -69840,16 +71935,6 @@ "uOb" = ( /turf/closed/wall/r_wall, /area/station/security/prison/toilet) -"uOe" = ( -/obj/machinery/door/window/left/directional/west{ - name = "Fitness Ring" - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/siding/white{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) "uOf" = ( /obj/machinery/door/airlock{ id_tag = "miningdorm_A"; @@ -69877,48 +71962,24 @@ "uOj" = ( /turf/open/floor/iron, /area/station/command/gateway) -"uOk" = ( -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; - name = "Antechamber Turret Control"; - pixel_y = -24; - req_access = list("minisat") - }, -/obj/machinery/light/small/directional/south, -/obj/machinery/camera/motion/directional/south{ - c_tag = "MiniSat Foyer"; - network = list("minisat") - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) +"uOm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/south, +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/iron, +/area/station/maintenance/starboard/fore) "uOn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"uOq" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/structure/railing/corner, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/white, -/area/station/medical/virology) -"uOy" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) -"uOz" = ( -/obj/structure/marker_beacon/yellow, -/turf/open/misc/dirt{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/icemoon/underground/explored/graveyard) +"uOs" = ( +/obj/structure/bed/dogbed, +/obj/effect/decal/cleanable/blood/gibs/body, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "uOE" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 5 @@ -69936,28 +71997,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"uOW" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/landmark/start/paramedic, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) -"uPa" = ( -/obj/machinery/disposal/bin, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron, -/area/station/science/xenobiology) "uPh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/south{ +/obj/machinery/light_switch/directional/north, +/obj/machinery/button/door/directional/north{ + pixel_y = 37; id = "Mining_launch"; - name = "Mech Bay Door Control"; - pixel_x = 8; - pixel_y = 23 + name = "Mech Bay Door Control" }, -/obj/machinery/light_switch/directional/north, /turf/open/floor/iron/textured, /area/mine/mechbay) "uPk" = ( @@ -69977,11 +72025,6 @@ /obj/structure/closet/crate/bin, /turf/open/floor/iron/dark, /area/mine/eva/lower) -"uPx" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron/smooth, -/area/station/maintenance/fore/lesser) "uPB" = ( /obj/structure/table/wood, /obj/machinery/recharger, @@ -70006,24 +72049,36 @@ dir = 8 }, /area/station/ai_monitored/command/storage/eva) -"uPQ" = ( -/obj/effect/mapping_helpers/airlock/access/all/science/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/door/airlock/external/glass{ - name = "Cytology External Airlock" - }, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "uPS" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"uPT" = ( +/obj/machinery/light/directional/north, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "uPY" = ( -/obj/structure/noticeboard/directional/east, +/obj/item/stack/sheet/mineral/wood, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"uQc" = ( +/obj/structure/table, +/obj/machinery/fax/auto_name, +/obj/item/radio/intercom/directional/east, /turf/open/floor/wood, -/area/station/command/meeting_room) +/area/station/hallway/secondary/service) +"uQj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/newscaster/directional/east, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/psychology) "uQl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -70033,6 +72088,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/locker) +"uQv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/chair, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "uQx" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -70046,6 +72112,13 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron/textured, /area/station/security/brig) +"uQR" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/sign/warning/biohazard/directional/north, +/turf/open/floor/iron/white/side{ + dir = 4 + }, +/area/station/science/xenobiology) "uQV" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -70142,45 +72215,9 @@ dir = 4 }, /obj/machinery/meter, +/obj/machinery/newscaster/directional/east, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"uSE" = ( -/obj/structure/table/glass, -/obj/machinery/door/window/right/directional/north{ - name = "Hydroponics Desk"; - req_access = list("hydroponics") - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/desk_bell{ - pixel_x = 1; - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"uSS" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/stripes/box, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) -"uTc" = ( -/obj/machinery/chem_heater/withbuffer, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/yellow/full, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/pharmacy) -"uTf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "uTk" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70203,11 +72240,34 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) +"uTq" = ( +/obj/machinery/restaurant_portal/restaurant, +/obj/effect/turf_decal/delivery/red, +/turf/open/floor/wood/parquet, +/area/station/service/bar/atrium) "uTr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"uTu" = ( +/obj/structure/disposalpipe/segment{ + 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/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"uTx" = ( +/obj/machinery/air_sensor/ordnance_burn_chamber, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "uTI" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -70228,12 +72288,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"uTL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/iron/white, -/area/station/science/robotics/lab) +"uTV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/toolcloset, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "uTX" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/item/kirbyplants/random, @@ -70241,40 +72300,65 @@ dir = 4 }, /area/station/service/chapel) -"uUn" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) -"uUq" = ( -/obj/effect/spawner/structure/window/hollow/reinforced/middle, +"uUp" = ( +/obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"uUu" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = -32 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 +"uUs" = ( +/obj/machinery/computer/records/medical/laptop{ + pixel_y = 1 }, -/area/station/hallway/secondary/entry) -"uUw" = ( -/obj/structure/table/wood, -/obj/machinery/airalarm/directional/west, -/obj/machinery/fax/auto_name, -/turf/open/floor/iron/grimy, -/area/station/service/bar/backroom) +/obj/structure/table/reinforced, +/obj/machinery/camera/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "uUH" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer1{ dir = 10 }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"uUM" = ( +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/bluespace_vendor/directional/south, +/turf/open/floor/iron, +/area/station/commons/dorms) "uUT" = ( /turf/closed/wall, /area/mine/mechbay) +"uVb" = ( +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/closed/wall, +/area/station/service/hydroponics) +"uVf" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/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, +/obj/machinery/airlock_controller/incinerator_ordmix{ + pixel_y = 27 + }, +/obj/machinery/button/ignition/incinerator/ordmix{ + pixel_y = 39; + pixel_x = -6 + }, +/obj/machinery/button/door/incinerator_vent_ordmix{ + pixel_y = 39; + pixel_x = 5 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "uVj" = ( /obj/effect/turf_decal/arrows/white, /obj/effect/turf_decal/stripes/line{ @@ -70290,6 +72374,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/atmos) +"uVr" = ( +/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/plating, +/area/station/maintenance/starboard/lesser) "uVu" = ( /obj/machinery/space_heater, /obj/structure/window/reinforced/spawner/directional/east, @@ -70310,20 +72403,11 @@ dir = 1 }, /area/station/security/lockers) -"uWf" = ( -/obj/structure/railing/corner/end{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"uWp" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall, -/area/station/maintenance/aft/greater) +"uWo" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/dorms) "uWw" = ( /obj/structure/railing/corner{ dir = 1 @@ -70333,22 +72417,43 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) +"uWy" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -6 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/bar) "uWE" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"uWS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/turf/open/floor/wood/large, +/area/station/service/bar) "uWW" = ( /obj/structure/closet/cardboard, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"uXh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/cafeteria{ - dir = 8 - }, -/area/station/science/ordnance/office) +"uXd" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/duct, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/bar) "uXk" = ( /turf/open/misc/dirt/dark{ initial_gas_mix = "ICEMOON_ATMOS" @@ -70360,20 +72465,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"uXy" = ( -/obj/machinery/light_switch/directional/east, -/obj/structure/table, -/obj/item/paper_bin/construction, -/obj/item/stack/pipe_cleaner_coil/random, -/obj/item/stack/pipe_cleaner_coil/random, -/obj/item/stack/pipe_cleaner_coil/random, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/commons/storage/art) "uXC" = ( /obj/structure/table/reinforced, /obj/item/tank/internals/emergency_oxygen/engi{ @@ -70401,15 +72492,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/mine/laborcamp) -"uYm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/red/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "uYq" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=2"; @@ -70426,6 +72508,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"uYE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "uYF" = ( /obj/structure/railing{ dir = 6 @@ -70459,6 +72551,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"uZu" = ( +/obj/structure/table/wood, +/obj/item/camera, +/obj/item/taperecorder, +/obj/item/radio/intercom/directional/east, +/obj/item/storage/photo_album/library, +/turf/open/floor/engine/cult, +/area/station/service/library) "uZB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/extinguisher_cabinet/directional/east, @@ -70466,6 +72566,12 @@ dir = 9 }, /area/station/science/research) +"uZC" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance/three, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "uZD" = ( /obj/machinery/recharge_station, /obj/machinery/airalarm/directional/north, @@ -70521,22 +72627,20 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"vao" = ( -/obj/structure/rack, -/obj/item/storage/box/evidence, -/obj/item/storage/box/evidence, -/obj/machinery/button/door{ - id = "Trial Transfer"; - name = "Trial Transfer Lockdown"; - pixel_x = -7; - pixel_y = -23; - req_access = list("brig") +"vap" = ( +/obj/structure/fence{ + dir = 8 }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/textured, -/area/station/security/brig) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"var" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/structure/sign/departments/holy/directional/east, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "vav" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -70555,13 +72659,30 @@ dir = 1 }, /obj/machinery/light/small/directional/west, +/obj/item/radio/intercom/directional/south, /turf/open/floor/wood, /area/station/service/library) +"vaL" = ( +/obj/structure/table, +/obj/item/storage/bag/tray, +/obj/item/knife/kitchen{ + pixel_y = 2 + }, +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "vaM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron/dark/side, /area/mine/eva) +"vaW" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plating, +/area/station/maintenance/fore) "vaZ" = ( /obj/item/book/manual/wiki/plumbing{ pixel_x = 4; @@ -70634,13 +72755,6 @@ /obj/structure/railing, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"vbI" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/structure/chair/stool/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "vbO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /obj/item/kirbyplants/random, @@ -70670,24 +72784,52 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"vcf" = ( +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Chapel Maintenance External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/plating, +/area/station/maintenance/department/chapel) +"vch" = ( +/obj/machinery/door/morgue{ + name = "Relic Closet"; + req_access = list("chapel_office"); + dir = 4 + }, +/turf/open/floor/cult, +/area/station/service/chapel/office) "vcj" = ( /turf/closed/wall/r_wall, /area/mine/storage) -"vcH" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 9 +"vcx" = ( +/obj/machinery/newscaster/directional/east, +/obj/structure/sink/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 }, -/obj/machinery/meter, -/obj/machinery/button/ignition/incinerator/ordmix{ - pixel_x = 8; - pixel_y = 32 +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 }, -/obj/machinery/button/door/incinerator_vent_ordmix{ - pixel_x = -8; - pixel_y = 32 +/obj/effect/turf_decal/siding/blue, +/turf/open/floor/iron/cafeteria, +/area/station/security/prison/work) +"vcD" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/siding/white{ + dir = 5 }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +/obj/effect/turf_decal/siding/white, +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/station/service/kitchen/coldroom) "vcO" = ( /obj/machinery/vending/wardrobe/chap_wardrobe, /turf/open/floor/iron/dark, @@ -70748,27 +72890,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/service) -"vdM" = ( -/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/heavy, -/obj/machinery/door/airlock/research{ - name = "Ordnance Launch Room" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/iron/white, -/area/station/science/ordnance/office) -"vdO" = ( -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "vdW" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/decal/cleanable/dirt, @@ -70777,12 +72898,15 @@ }, /turf/open/floor/iron/grimy, /area/station/security/prison/work) -"vek" = ( -/obj/effect/turf_decal/weather/snow/corner, -/obj/machinery/light/small/directional/north, -/obj/structure/sign/departments/maint/directional/north, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) +"vei" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "ven" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -70793,11 +72917,6 @@ "vep" = ( /turf/closed/wall, /area/station/maintenance/disposal/incinerator) -"veq" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "ver" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/burgundy{ @@ -70805,14 +72924,16 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"ves" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/grimy, -/area/station/maintenance/aft/greater) "vey" = ( /turf/closed/wall, /area/station/command/heads_quarters/captain) +"veH" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/wood, +/area/station/command/meeting_room) "veK" = ( /turf/open/floor/iron/white, /area/mine/living_quarters) @@ -70832,16 +72953,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"veX" = ( -/obj/machinery/camera{ - c_tag = "Research Division Server Room"; - dir = 5; - name = "science camera"; - network = list("ss13","rd") - }, -/obj/structure/lattice/catwalk, -/turf/open/openspace/icemoon, -/area/station/science/server) "vfe" = ( /obj/machinery/atmospherics/components/unary/passive_vent, /obj/effect/turf_decal/stripes/line{ @@ -70850,10 +72961,15 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/freezer, /area/station/science/xenobiology) -"vfg" = ( -/obj/structure/stairs/north, -/turf/open/floor/iron, -/area/station/cargo/storage) +"vfj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/firedoor/heavy{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "vfm" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron/smooth, @@ -70878,27 +72994,34 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"vfw" = ( -/obj/structure/railing/corner/end/flip, -/obj/effect/turf_decal/siding/white{ - dir = 4 +"vfH" = ( +/obj/structure/closet/crate{ + name = "Le Caisee D'abeille" }, -/obj/structure/sink/kitchen/directional/south, -/obj/structure/mirror/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Service - Coldroom Access" +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/queen_bee/bought, +/obj/item/clothing/suit/hooded/bee_costume, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 }, -/obj/effect/turf_decal/tile/bar{ - dir = 4 +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 }, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 5 }, -/obj/effect/mapping_helpers/mail_sorting/service/kitchen, /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/kitchen/coldroom) +/obj/machinery/light/warm/directional/north, +/obj/item/seeds/sunflower, +/obj/effect/spawner/random/food_or_drink/seed, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Botany Apiary" + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "vfI" = ( /obj/machinery/door/window/right/directional/south{ name = "Ordnance Freezer Chamber Access"; @@ -70920,18 +73043,24 @@ "vfW" = ( /turf/open/floor/iron, /area/station/commons/fitness) +"vfZ" = ( +/obj/structure/ladder{ + name = "chemistry lab access" + }, +/obj/machinery/door/window/right/directional/east{ + req_access = list("medical"); + name = "Morgue Access Hatch" + }, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/station/medical/morgue) "vgf" = ( /obj/structure/grille, /turf/open/floor/plating, /area/station/science/xenobiology) -"vgj" = ( -/obj/structure/filingcabinet, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/wood, -/area/station/commons/vacant_room/office) "vgu" = ( /obj/structure/table, /obj/item/toy/plush/beeplushie{ @@ -70957,6 +73086,10 @@ /obj/item/stack/cable_coil, /turf/open/floor/iron/smooth, /area/mine/eva) +"vgK" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "vgM" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -70975,31 +73108,22 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"vgU" = ( -/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_smooth, -/area/station/maintenance/starboard/fore) -"vhm" = ( -/obj/structure/sign/poster/random/directional/west, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/chapel) -"vhA" = ( -/obj/effect/turf_decal/trimline/green/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ - dir = 8 +"vgW" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/turf/open/floor/iron/white, +/area/station/medical/virology) "vhB" = ( /obj/structure/chair/plastic, /obj/effect/turf_decal/bot_red, /turf/open/floor/plating, /area/station/maintenance/fore/lesser) +"vhF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) "vhL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71026,13 +73150,16 @@ dir = 6 }, /area/station/science/research) -"viE" = ( -/obj/structure/cable, -/obj/structure/sign/warning/gas_mask/directional/south, -/obj/machinery/light/small/dim/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) +"vij" = ( +/obj/machinery/computer/prisoner/management, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "viH" = ( /obj/machinery/power/emitter/welded{ dir = 4 @@ -71046,10 +73173,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) -"viR" = ( -/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "viV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/window/reinforced/spawner/directional/south, @@ -71062,24 +73185,40 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/construction) +"vjg" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) "vjh" = ( /turf/closed/wall/r_wall, /area/mine/laborcamp) -"vjj" = ( -/turf/open/floor/iron/stairs/right{ - dir = 4 - }, -/area/station/science/research) "vjk" = ( /obj/machinery/atmospherics/components/binary/crystallizer{ dir = 4 }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) -"vjx" = ( -/obj/machinery/telecomms/server/presets/engineering, -/turf/open/floor/iron/dark/telecomms, -/area/station/tcommsat/server) +"vjq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) +"vjA" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Service - Kitchen" + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/table, +/obj/machinery/processor{ + pixel_y = 6 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "vjJ" = ( /obj/structure/table, /obj/machinery/light/directional/north, @@ -71087,10 +73226,32 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/virology) -"vjM" = ( -/obj/machinery/light/floor, +"vjN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/sign/warning/cold_temp/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay Cryogenics"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/dark/textured, +/area/station/medical/cryo) +"vjQ" = ( +/obj/structure/cable, +/obj/machinery/duct, +/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/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 6 + }, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/engineering/lobby) "vjS" = ( /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/white, @@ -71106,6 +73267,11 @@ }, /turf/open/floor/iron/white/textured, /area/station/command/heads_quarters/ce) +"vkC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/generic_maintenance_landmark, +/turf/open/floor/iron/smooth, +/area/station/maintenance/fore/lesser) "vkD" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -71142,49 +73308,31 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/construction) -"vkO" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "vkW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"vlb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/siding/yellow/corner{ - dir = 4 - }, -/obj/machinery/light_switch/directional/north{ - pixel_x = 12 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) -"vle" = ( -/obj/item/radio/intercom/chapel/directional/east, -/obj/structure/chair, -/obj/machinery/light/small/red/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "vlf" = ( /obj/structure/disposalpipe/junction/yjunction{ dir = 8 }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"vlz" = ( -/turf/open/openspace, -/area/station/service/kitchen/coldroom) +"vlF" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/stairs/north, +/turf/open/floor/iron, +/area/mine/eva/lower) +"vlH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron, +/area/station/security/prison/visit) "vlL" = ( /obj/machinery/computer/cargo/request, /turf/open/floor/iron, @@ -71209,17 +73357,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron/smooth, /area/mine/mechbay) -"vlU" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/white{ - dir = 6 - }, -/obj/machinery/reagentgrinder{ - pixel_y = 9; - pixel_x = 4 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "vlZ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -71228,11 +73365,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/mine/storage) -"vme" = ( -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "vmj" = ( /obj/structure/chair{ dir = 1; @@ -71254,10 +73386,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"vmp" = ( -/obj/machinery/shower/directional/east, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "vmr" = ( /obj/structure/musician/piano, /turf/open/floor/wood, @@ -71276,6 +73404,23 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) +"vmw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Law Office" + }, +/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/effect/mapping_helpers/airlock/access/all/service/lawyer, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) "vmx" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71304,6 +73449,23 @@ /obj/structure/cable, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) +"vmK" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/test_chamber/directional/north, +/turf/open/floor/iron, +/area/station/science/explab) +"vmO" = ( +/obj/structure/table, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/engineering/material_cheap, +/turf/open/floor/iron/smooth, +/area/station/maintenance/starboard/fore) "vmP" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end, /turf/open/floor/plating, @@ -71327,6 +73489,21 @@ }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) +"vmW" = ( +/obj/structure/table/wood, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"vne" = ( +/obj/item/clothing/head/beanie/orange{ + pixel_y = 8 + }, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/wheelys/skishoes{ + pixel_y = -8 + }, +/obj/effect/decal/remains/human, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "vng" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71340,22 +73517,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"vns" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/camera{ - c_tag = "Departure Lounge West"; - dir = 10 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/iron/white/corner{ - dir = 1 - }, -/area/station/hallway/secondary/exit/departure_lounge) "vnt" = ( /obj/machinery/computer/station_alert{ dir = 8 @@ -71368,20 +73529,37 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage/gas) -"vnK" = ( -/obj/effect/turf_decal/siding/white, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 +"vnw" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Fitness Room South" }, -/obj/structure/table/glass, -/obj/machinery/light/small/directional/west, -/obj/item/stack/package_wrap{ - pixel_y = 3 +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 }, -/obj/item/hand_labeler, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = -7 + }, +/obj/item/kirbyplants/random, /turf/open/floor/iron, -/area/station/service/hydroponics) +/area/station/commons/fitness) +"vnA" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/machinery/door/airlock{ + name = "Kitchen" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white/textured_half, +/area/station/service/kitchen) "vnN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -71392,12 +73570,14 @@ }, /turf/open/floor/iron/textured, /area/station/medical/chem_storage) -"vnS" = ( -/obj/structure/fence/cut/large{ - dir = 8 +"vnW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "vnY" = ( /obj/structure/closet/crate/critter, /turf/open/floor/plating, @@ -71429,14 +73609,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/tools) -"voA" = ( -/obj/machinery/button/flasher{ - id = "cell4"; - pixel_y = -22 - }, -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron, -/area/station/security/brig/upper) "voH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71480,39 +73652,24 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/smooth, /area/station/security/execution/transfer) -"vpl" = ( -/obj/effect/turf_decal/siding/brown{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt{ - pixel_x = -9 - }, -/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) +"vpx" = ( +/obj/structure/sign/departments/evac/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "vpJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/airlock/engineering{ - name = "Utilities Room" +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "vpR" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -71581,7 +73738,6 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "vra" = ( -/obj/machinery/firealarm/directional/west, /obj/machinery/modular_computer/preset/cargochat/cargo{ dir = 4 }, @@ -71595,21 +73751,14 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/security/courtroom) -"vrr" = ( -/obj/machinery/computer/operating{ - dir = 8 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "vrw" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "pharmacy_shutters3"; - name = "Pharmacy Shutters" +/obj/machinery/button/door/directional/west{ + id = "xenobio3"; + name = "Xenobio Pen 3 Blast Door"; + req_access = list("xenobiology") }, -/turf/open/floor/plating, -/area/station/service/kitchen) +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "vrC" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71618,6 +73767,15 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"vrD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron, +/area/station/commons/dorms) "vrG" = ( /turf/open/floor/iron, /area/station/security/prison/mess) @@ -71651,6 +73809,11 @@ /obj/effect/turf_decal/trimline/red/line, /turf/open/floor/iron/dark/textured, /area/station/security/range) +"vsx" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, +/turf/open/floor/plating, +/area/station/maintenance/fore) "vsz" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -71658,6 +73821,10 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"vsF" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/surface/outdoors/nospawn) "vsI" = ( /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating/snowed/icemoon, @@ -71696,28 +73863,40 @@ /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"vtg" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "hopqueue"; + name = "HoP Queue Shutters" + }, +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "vtj" = ( /obj/machinery/air_sensor/carbon_tank, /turf/open/floor/engine/co2, /area/station/engineering/atmos) -"vto" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/newscaster/directional/north, -/obj/effect/turf_decal/siding/wood, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Service - Bar" - }, -/turf/open/floor/iron, -/area/station/service/bar) "vtr" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/kirbyplants/random, /turf/open/floor/wood, /area/station/maintenance/aft/greater) +"vtu" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/coroner, +/obj/machinery/door/airlock/external{ + name = "Graveyard Access"; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/medical/morgue) "vtv" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -71731,6 +73910,9 @@ }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/mining_weather_monitor/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) "vtA" = ( @@ -71739,34 +73921,33 @@ dir = 10 }, /area/station/science/research) -"vtW" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/space_heater, +"vtO" = ( +/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/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, -/area/station/medical/morgue) -"vtZ" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/bottle/vodka/badminka{ - pixel_x = 7; - pixel_y = 20 - }, +/area/station/maintenance/aft/greater) +"vtR" = ( +/obj/item/storage/briefcase, +/obj/structure/rack, +/obj/item/camera/detective, /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 + pixel_x = -5 }, -/obj/structure/secure_safe/hos{ - pixel_x = 35 +/obj/structure/cable, +/obj/structure/detectiveboard/directional/west, +/turf/open/floor/carpet, +/area/station/security/detectives_office) +"vuf" = ( +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark/smooth_large, -/area/station/command/heads_quarters/hos) +/turf/open/floor/iron/textured, +/area/station/engineering/atmos) "vuh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71820,18 +74001,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) -"vvf" = ( -/obj/structure/chair{ - pixel_y = -2 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash/food_packaging, -/obj/structure/sign/poster/official/random/directional/west, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) "vvh" = ( /turf/open/floor/iron, /area/station/hallway/primary/fore) @@ -71843,17 +74012,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"vvn" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/item/radio/intercom/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Service - Atrium Entrance" - }, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "vvu" = ( /obj/structure/railing, /obj/effect/turf_decal/trimline/neutral/warning{ @@ -71908,6 +74066,48 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/science/robotics/mechbay) +"vvT" = ( +/obj/structure/table, +/obj/machinery/button/ticket_machine{ + pixel_x = -6; + pixel_y = -1; + req_access = list("hop") + }, +/obj/machinery/button/photobooth{ + pixel_y = -1; + pixel_x = 6; + req_access = list("hop") + }, +/obj/machinery/button/door/directional/south{ + id = "hop"; + name = "Privacy Shutters"; + pixel_x = -6; + req_access = list("hop") + }, +/obj/machinery/button/door/directional/south{ + id = "hopqueue"; + name = "Queue Shutters"; + pixel_x = 6; + req_access = list("hop") + }, +/obj/machinery/button/flasher{ + pixel_y = 9; + id = "hopflash"; + req_access = list("hop") + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) +"vvU" = ( +/obj/item/beacon, +/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, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/mine/eva) "vvX" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -71917,6 +74117,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"vwi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood/large, +/area/station/commons/vacant_room/office) "vwj" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Port Mix to West Ports" @@ -71934,11 +74143,13 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/lawoffice) -"vwr" = ( -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) +"vws" = ( +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "vwt" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -71946,16 +74157,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) -"vww" = ( -/obj/structure/sign/warning/directional/west, -/turf/open/openspace/icemoon, -/area/icemoon/surface/outdoors/nospawn) "vwC" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 9 }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"vwD" = ( +/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/dust, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "vwE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -71971,7 +74188,7 @@ /area/station/security/prison/rec) "vwG" = ( /obj/machinery/vending/security{ - onstation_override = 1 + all_products_free = 0 }, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -72040,6 +74257,11 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) +"vxx" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/iron/smooth, +/area/mine/eva/lower) "vxO" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/siding/wood, @@ -72056,14 +74278,17 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/iron/large, /area/station/engineering/atmos) -"vxY" = ( -/obj/effect/turf_decal/siding/wood{ +"vxW" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/obj/structure/chair/office{ dir = 8 }, -/obj/structure/cable, -/obj/effect/landmark/start/mime, -/turf/open/floor/wood/parquet, -/area/station/service/theater) +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/iron, +/area/station/commons/fitness) "vyb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -72090,6 +74315,29 @@ "vym" = ( /turf/closed/wall, /area/station/construction) +"vyp" = ( +/obj/structure/bonfire, +/obj/item/melee/roastingstick, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) +"vyq" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Virology Hallway"; + network = list("ss13","medbay") + }, +/obj/machinery/door_buttons/access_button{ + pixel_x = 35; + idDoor = "virology_airlock_exterior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + req_access = list("virology") + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "vyt" = ( /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) @@ -72104,10 +74352,10 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/engine, /area/station/science/explab) -"vyy" = ( -/obj/structure/reagent_dispensers/cooking_oil, -/turf/open/misc/asteroid/snow/coldroom, -/area/station/service/kitchen/coldroom) +"vyz" = ( +/obj/structure/sign/warning/test_chamber/directional/north, +/turf/open/floor/glass/reinforced, +/area/station/science/ordnance/office) "vyI" = ( /obj/structure/railing{ dir = 1 @@ -72116,12 +74364,6 @@ /obj/machinery/light/small/dim/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"vyN" = ( -/obj/structure/closet/crate/miningcar, -/obj/effect/spawner/random/exotic/snow_gear, -/obj/effect/spawner/random/exotic/snow_gear, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "vyO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72133,6 +74375,16 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"vyW" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/machinery/camera/directional/south{ + network = list("ss13","medbay"); + c_tag = "Medbay Stasis Center North" + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "vzb" = ( /obj/structure/rack, /obj/effect/spawner/random/clothing/costume, @@ -72156,10 +74408,16 @@ dir = 1 }, /area/station/science/research) +"vzp" = ( +/obj/machinery/light/warm/directional/north, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/rec) "vzs" = ( /obj/structure/filingcabinet, /obj/structure/cable, /obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/item/radio/intercom/directional/south, /turf/open/floor/iron/white, /area/station/medical/psychology) "vzw" = ( @@ -72170,21 +74428,29 @@ "vzD" = ( /turf/closed/wall, /area/station/maintenance/starboard/aft) -"vzI" = ( -/obj/structure/sign/directions/engineering{ - desc = "A sign that shows there are doors here. There are doors everywhere!"; - icon_state = "doors"; - name = "WARNING: EXTERNAL AIRLOCK"; - pixel_x = 32 +"vzG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 }, -/turf/closed/wall/r_wall, -/area/mine/production) -"vzN" = ( -/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/white, -/area/station/medical/cryo) +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/mine/eva/lower) +"vzH" = ( +/obj/machinery/oven/range, +/obj/effect/turf_decal/siding/white/corner, +/obj/machinery/light/directional/north, +/obj/machinery/button/door/directional/north{ + id = "kitchencounter"; + name = "Counter Shutters Control"; + req_access = list("kitchen") + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "vzS" = ( /obj/effect/mapping_helpers/mail_sorting/science/experimentor_lab, /obj/structure/disposalpipe/sorting/mail{ @@ -72207,18 +74473,6 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/recharge_floor, /area/station/science/robotics/mechbay) -"vAj" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/crate, -/obj/structure/sign/warning/cold_temp{ - pixel_x = -29 - }, -/obj/structure/sign/warning/xeno_mining{ - pixel_x = 2; - pixel_y = -32 - }, -/turf/open/floor/iron/smooth, -/area/mine/living_quarters) "vAm" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -72232,19 +74486,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"vAo" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm5"; - name = "Cabin 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/commons/dorms) "vAq" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/maintenance/department/medical/morgue) +"vAr" = ( +/obj/machinery/light/floor, +/obj/structure/railing/corner/end{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "vAt" = ( /obj/structure/table, /obj/item/book/manual/wiki/security_space_law{ @@ -72269,17 +74521,18 @@ /obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"vAO" = ( -/obj/structure/bodycontainer/morgue/beeper_off{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "vAP" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/science/genetics) +"vAS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/status_display/ai/directional/west, +/turf/open/floor/iron/white, +/area/station/science/ordnance) "vAU" = ( /obj/machinery/light/small/directional/east, /obj/machinery/camera/directional/east{ @@ -72299,15 +74552,6 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/service) -"vAW" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/effect/landmark/start/cook, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "vAY" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -72320,24 +74564,6 @@ dir = 1 }, /area/station/hallway/primary/port) -"vBa" = ( -/obj/structure/table, -/obj/item/storage/crayons, -/obj/item/trash/candle{ - pixel_y = 12 - }, -/turf/open/floor/wood, -/area/station/maintenance/aft/greater) -"vBg" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/sign/warning/gas_mask{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals."; - pixel_x = 3; - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron/dark/side, -/area/mine/eva/lower) "vBh" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron, @@ -72355,18 +74581,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"vBt" = ( -/obj/machinery/door/airlock/freezer{ - desc = "The freezer where the chef keeps all the stuff that needs to be kept cold. Ice cold."; - name = "The Ice Box" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/service/kitchen/coldroom) "vBu" = ( /obj/machinery/space_heater, /obj/machinery/camera/directional/south{ @@ -72393,23 +74607,17 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"vBD" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/obj/machinery/light/directional/south, -/obj/machinery/camera{ - c_tag = "Medbay Lobby"; - dir = 5; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "vBG" = ( /turf/closed/wall, /area/station/command/heads_quarters/cmo) +"vCm" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "vCn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -72478,6 +74686,7 @@ pixel_y = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, /area/station/science/xenobiology) "vDx" = ( @@ -72495,16 +74704,10 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"vDQ" = ( -/obj/effect/spawner/random/decoration/flower, -/obj/structure/flora/rock/pile/icy/style_random, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"vEh" = ( -/obj/structure/frame/machine, -/obj/item/stack/cable_coil/five, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +"vEc" = ( +/obj/machinery/door/poddoor/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "vEw" = ( /obj/machinery/camera/directional/west{ c_tag = "Atmospherics Access" @@ -72521,17 +74724,18 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"vEC" = ( -/obj/structure/disposalpipe/segment{ +"vEG" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, -/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, -/obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/eighties, -/area/station/commons/lounge) +/obj/machinery/door/airlock/external/glass{ + name = "Supply Door Airlock"; + pixel_y = 0; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, +/area/station/cargo/storage) "vEJ" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -72545,19 +74749,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_half, /area/station/maintenance/department/medical/central) -"vEQ" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/structure/sign/warning/chem_diamond/directional/west, -/obj/structure/bed/medical/emergency, -/obj/machinery/iv_drip, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) -"vES" = ( -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "vEU" = ( /obj/machinery/door/airlock/external{ glass = 1; @@ -72573,15 +74764,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) -"vFb" = ( -/obj/structure/table/wood, -/obj/item/cigarette/cigar{ - pixel_x = 7; - pixel_y = 10 - }, -/obj/item/storage/box/matches, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain) "vFg" = ( /obj/structure/falsewall, /turf/open/floor/plating, @@ -72612,6 +74794,16 @@ /obj/structure/cable, /turf/open/floor/iron/textured, /area/station/security/brig) +"vFT" = ( +/obj/machinery/door/airlock/maintenance, +/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 = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "vFW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -72626,11 +74818,11 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/virology, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"vGi" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/cold_temp, +"vGw" = ( +/obj/structure/transit_tube/station/reverse, +/obj/structure/sign/warning/secure_area/directional/north, /turf/open/floor/plating, -/area/station/maintenance/port/aft) +/area/station/ai_monitored/turret_protected/aisat_interior) "vGy" = ( /obj/machinery/camera/directional/east{ c_tag = "Xenobiology Pens Observation - Starboard Aft"; @@ -72667,14 +74859,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/tcommsat/computer) -"vHe" = ( -/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/effect/spawner/random/trash/botanical_waste, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "vHf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -72689,6 +74873,15 @@ /obj/structure/rack, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"vHo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "vHq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -72709,34 +74902,25 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/exit/departure_lounge) +"vHJ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "vHK" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, /turf/open/floor/iron, /area/station/cargo/sorting) -"vHM" = ( -/obj/structure/rack, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/obj/effect/spawner/random/armory/rubbershot, -/turf/open/floor/iron/dark/textured, -/area/station/ai_monitored/security/armory) "vHR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/chemistry) -"vHT" = ( -/obj/structure/fence/post{ - dir = 8 - }, -/obj/structure/sign/nanotrasen, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "vHU" = ( /obj/item/radio/intercom/prison/directional/south, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -72772,6 +74956,24 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) +"vIm" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + glass = 1; + name = "Chapel External Airlock"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/chapel_office, +/obj/effect/mapping_helpers/airlock/access/any/engineering/external, +/turf/open/floor/iron, +/area/station/service/chapel) +"vIu" = ( +/turf/open/floor/iron/stairs/medium{ + dir = 8 + }, +/area/station/medical/chemistry) "vIH" = ( /obj/structure/closet{ name = "evidence closet 1" @@ -72779,13 +74981,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/textured_edge, /area/station/security/evidence) -"vIL" = ( -/obj/structure/cable, -/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/plating, -/area/station/maintenance/starboard/fore) "vIZ" = ( /obj/machinery/duct, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -72798,6 +74993,23 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/upper) +"vJl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/mob/living/carbon/human/species/monkey, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/grass, +/area/station/medical/virology) +"vJv" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "vJB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -72815,6 +75027,13 @@ }, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"vJJ" = ( +/obj/structure/closet/secure_closet/bar, +/obj/machinery/light/small/directional/north, +/obj/item/vending_refill/cigarette, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "vJS" = ( /obj/structure/chair/sofa/corp/right{ dir = 4; @@ -72825,9 +75044,6 @@ /turf/open/floor/iron/dark, /area/station/science/breakroom) "vJY" = ( -/obj/structure/railing/corner{ - dir = 8 - }, /obj/machinery/door/window/brigdoor/left/directional/west{ name = "Research Director Observation"; req_access = list("rd") @@ -72849,13 +75065,56 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/locker) -"vKT" = ( +"vKy" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/suit/utility/radiation, +/obj/item/clothing/head/utility/radiation, +/obj/item/geiger_counter, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/clothing/glasses/meson, +/obj/machinery/button/door/directional/north{ + id = "engsm"; + name = "Radiation Shutters Control"; + req_access = list("engineering") + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"vKD" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/hallway/secondary/entry) +"vKR" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/cable, -/turf/open/floor/plating/snowed/coldroom, -/area/station/service/kitchen/coldroom) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + id = "cantena_curtains" + }, +/turf/open/floor/wood, +/area/station/commons/lounge) +"vKZ" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "vLj" = ( /obj/machinery/suit_storage_unit/rd, /obj/effect/turf_decal/stripes/line{ @@ -72864,48 +75123,19 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/smooth_half, /area/station/command/heads_quarters/rd) -"vLo" = ( -/obj/effect/landmark/generic_maintenance_landmark, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) +"vLY" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/closet/l3closet/virology, +/obj/effect/turf_decal/tile/green/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/virology) "vMa" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"vMc" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Gateway" - }, -/obj/structure/table, -/obj/structure/sign/warning/biohazard/directional/west, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark/corner{ - dir = 8 - }, -/obj/item/emergency_bed{ - pixel_x = -1 - }, -/obj/item/emergency_bed{ - pixel_x = 4 - }, -/obj/item/storage/medkit/regular{ - pixel_y = 1 - }, -/turf/open/floor/iron, -/area/station/command/gateway) -"vMf" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/structure/railing/corner{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "vMl" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -72924,14 +75154,6 @@ /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) "vMY" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -72970,29 +75192,11 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos/mix) -"vNK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/maintenance/port/fore) -"vNM" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 1 - }, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) -"vOd" = ( -/obj/item/wrench, -/obj/machinery/atmospherics/components/binary/pump/off/supply/visible/layer4{ - dir = 1; - name = "Air In" - }, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/station/maintenance/fore) +"vNU" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "vOw" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/red{ @@ -73000,6 +75204,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"vOy" = ( +/obj/structure/fake_stairs/wood/directional/north, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "vOD" = ( /obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/tile/dark_green{ @@ -73017,6 +75226,15 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"vPc" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Security Post - Engineering" + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/obj/machinery/computer/security/telescreen/engine/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/engineering) "vPh" = ( /obj/machinery/light/directional/north, /obj/machinery/digital_clock/directional/north, @@ -73085,12 +75303,19 @@ /turf/open/floor/iron, /area/mine/production) "vQz" = ( -/obj/effect/turf_decal/weather/snow/corner{ - dir = 10 +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; + name = "Antechamber Turret Control"; + pixel_y = -24; + req_access = list("minisat") }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) +/obj/machinery/light/small/directional/south, +/obj/machinery/camera/motion/directional/south{ + c_tag = "MiniSat Foyer"; + network = list("minisat") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat_interior) "vQG" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 10 @@ -73115,6 +75340,9 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/cargo/lobby) +"vRn" = ( +/turf/open/floor/iron/stairs/medium, +/area/station/cargo/storage) "vRo" = ( /obj/machinery/shower/directional/north, /obj/effect/turf_decal/trimline/blue/line{ @@ -73190,36 +75418,6 @@ "vSi" = ( /turf/closed/wall, /area/mine/eva) -"vSu" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/firealarm/directional/north{ - pixel_x = -4 - }, -/obj/machinery/light_switch/directional/north{ - pixel_x = 5; - pixel_y = 28 - }, -/turf/open/floor/wood/large, -/area/station/service/bar) -"vSw" = ( -/obj/structure/table, -/obj/machinery/firealarm/directional/north, -/obj/item/stack/sheet/iron/five, -/obj/item/stack/cable_coil/five, -/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) -"vSx" = ( -/obj/structure/sign/warning/chem_diamond/directional/south, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "vSE" = ( /obj/machinery/door/window/right/directional/east{ name = "Bar Access" @@ -73287,6 +75485,26 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"vTh" = ( +/obj/structure/fence/post{ + dir = 1 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"vTm" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/checker, +/area/station/hallway/secondary/service) "vTo" = ( /obj/structure/disposalpipe/sorting/mail{ dir = 1 @@ -73301,6 +75519,19 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"vTq" = ( +/obj/effect/spawner/random/contraband/prison, +/obj/structure/closet/crate, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/item/stack/license_plates/empty/fifty, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/security/prison/work) "vTJ" = ( /obj/structure/table, /obj/item/toy/plush/slimeplushie{ @@ -73328,24 +75559,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"vUn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ - color = "#0000ff"; - dir = 8; - name = "Supply multi deck pipe adapter" - }, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ - color = "#ff0000"; - dir = 8; - name = "Scrubbers multi deck pipe adapter" - }, -/obj/structure/cable/multilayer/multiz, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "vUr" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -73358,12 +75571,13 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/sepia, /area/station/security/prison/rec) -"vUz" = ( -/obj/structure/table, -/obj/item/clothing/suit/apron/chef, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) +"vUI" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_y = 5 + }, +/turf/open/floor/iron/grimy, +/area/station/hallway/secondary/entry) "vUW" = ( /obj/item/stack/cable_coil{ amount = 7; @@ -73383,18 +75597,20 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/gateway) +"vVl" = ( +/obj/structure/table/wood, +/obj/item/soap/nanotrasen, +/obj/item/clothing/head/costume/sombrero/green, +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/grimy, +/area/station/commons/lounge) "vVw" = ( /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/freezer, /area/station/commons/toilet) -"vVA" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "vVH" = ( /turf/closed/wall, /area/station/security/prison/safe) @@ -73451,14 +75667,18 @@ /obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"vWo" = ( -/obj/machinery/light_switch/directional/north, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/science/explab) "vWr" = ( /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"vWy" = ( +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/yellow/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/large, +/area/station/engineering/storage) "vWz" = ( /turf/closed/wall, /area/mine/storage) @@ -73504,21 +75724,12 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"vXe" = ( -/obj/structure/aquarium/lawyer, -/turf/open/floor/wood, -/area/station/service/lawoffice) "vXh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"vXm" = ( -/obj/structure/grille/broken, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "vXn" = ( /obj/structure/table, /obj/item/food/pie/cream, @@ -73548,70 +75759,20 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/mine/living_quarters) -"vXD" = ( -/obj/structure/stairs/south, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "vXH" = ( /obj/structure/cable, /turf/open/floor/iron/white, /area/mine/living_quarters) -"vXM" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"vXO" = ( -/obj/structure/fluff/tram_rail, -/obj/structure/lattice/catwalk, -/obj/structure/fluff/tram_rail{ - pixel_y = 17 - }, -/obj/structure/marker_beacon/burgundy{ - name = "landing marker" - }, -/turf/open/lava/plasma/ice_moon, -/area/icemoon/underground/explored) "vXU" = ( /obj/item/toy/snowball, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"vXV" = ( -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/requests_console/directional/west{ - department = "Head of Personnel's Desk"; - name = "Head of Personnel's Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "vYa" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark/textured, /area/station/commons/storage/primary) -"vYc" = ( -/obj/machinery/light_switch/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/prison/visit) -"vYd" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "vYg" = ( /obj/machinery/camera/directional/west{ c_tag = "Chapel West" @@ -73633,10 +75794,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"vYp" = ( -/obj/structure/table/wood, -/turf/open/floor/wood/parquet, -/area/station/service/bar/atrium) "vYq" = ( /obj/structure/barricade/wooden/snowed, /turf/open/misc/asteroid/snow/icemoon, @@ -73658,6 +75815,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"vYw" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit/departure_lounge) "vYz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/stool/directional/south, @@ -73665,6 +75827,17 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"vYA" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Central Hallway South-West - HoP's Office" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/sign/departments/cargo/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "vYH" = ( /turf/open/floor/iron/white, /area/station/medical/pharmacy) @@ -73680,22 +75853,6 @@ }, /turf/open/floor/iron/large, /area/station/engineering/lobby) -"vYN" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"vYY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/service/hydroponics, -/obj/effect/mapping_helpers/mail_sorting/service/theater, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "vZa" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -73707,14 +75864,12 @@ /obj/effect/spawner/random/entertainment/dice, /turf/open/floor/iron, /area/station/commons/locker) -"vZp" = ( -/obj/effect/decal/cleanable/dirt, -/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/plating, -/area/station/maintenance/port/aft) +"vZo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) "vZt" = ( /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ dir = 8 @@ -73736,60 +75891,30 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"vZH" = ( -/obj/item/storage/briefcase, -/obj/structure/rack, -/obj/item/camera/detective, -/obj/item/taperecorder{ - pixel_x = -5 - }, -/obj/structure/cable, -/turf/open/floor/carpet, -/area/station/security/detectives_office) -"vZS" = ( -/obj/structure/rack, -/turf/open/floor/iron/smooth, -/area/mine/living_quarters) -"vZW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 8; - name = "Mix to Space" - }, -/turf/open/floor/plating/snowed/icemoon, -/area/station/maintenance/port/aft) +"vZM" = ( +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "wab" = ( /obj/structure/cable, /obj/machinery/holopad, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"wal" = ( -/obj/structure/sign/warning, -/turf/closed/wall, -/area/station/commons/storage/mining) "wam" = ( /turf/open/openspace, /area/station/cargo/storage) -"wav" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/neutral/filled/warning{ - dir = 4 - }, -/obj/effect/turf_decal/caution/stand_clear{ - dir = 8 - }, -/obj/machinery/door/window/right/directional/west{ - name = "Corpse Arrivals" - }, -/obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +"waz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) +"waF" = ( +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/mapping_helpers/broken_floor, +/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/greater) "waH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -73812,10 +75937,12 @@ /obj/item/reagent_containers/blood/random, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"waT" = ( -/obj/structure/sign/warning/docking/directional/south, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) +"waU" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "waZ" = ( /obj/structure/table, /obj/item/assembly/igniter{ @@ -73870,15 +75997,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/mine/eva/lower) -"wbN" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/aft) "wbR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria{ @@ -73898,34 +76016,17 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"wck" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 +"wcn" = ( +/obj/effect/turf_decal/weather/snow/corner, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" }, -/obj/machinery/bluespace_vendor/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) -"wco" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/icemoon/underground/explored/graveyard) "wcx" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, /turf/open/floor/iron/large, /area/station/command/heads_quarters/ce) -"wcz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/prison/garden) "wcD" = ( /obj/structure/chair/plastic{ dir = 4 @@ -73999,16 +76100,47 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"weg" = ( -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." +"wdX" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/mine/laborcamp) +"wee" = ( +/obj/item/radio/intercom/chapel/directional/east, +/obj/structure/chair, +/obj/machinery/light/small/red/directional/north, +/turf/open/floor/wood/large, +/area/station/service/chapel) +"wes" = ( +/obj/effect/turf_decal/siding/wideplating_new/light, +/obj/item/trash/bee, +/obj/machinery/light/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, -/turf/open/floor/iron/smooth, -/area/mine/mechbay) +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/work) "weF" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"weI" = ( +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/medical/treatment_center) "weL" = ( /obj/structure/chair/stool/directional/north, /obj/effect/decal/cleanable/dirt, @@ -74020,6 +76152,10 @@ "weR" = ( /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) +"weT" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "weW" = ( /obj/docking_port/stationary/random/icemoon{ dir = 8; @@ -74060,10 +76196,15 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) -"wfu" = ( -/obj/structure/sign/poster/official/wtf_is_co2, -/turf/closed/wall/r_wall, -/area/station/maintenance/aft/greater) +"wfE" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wfF" = ( /obj/effect/turf_decal/tile/blue, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74078,12 +76219,27 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/command/meeting_room) +"wfP" = ( +/obj/structure/table/wood, +/obj/item/paper, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "wfR" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/iron/smooth_edge, /area/station/command/heads_quarters/rd) +"wgo" = ( +/obj/item/food/grown/potato{ + pixel_y = 4 + }, +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wgr" = ( /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ @@ -74096,11 +76252,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/xenobiology) -"wgu" = ( -/obj/machinery/newscaster/directional/west, -/obj/effect/spawner/random/structure/twelve_percent_spirit_board, -/turf/open/floor/iron/grimy, -/area/station/service/chapel/office) "wgG" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /obj/effect/turf_decal/trimline/dark_red/arrow_ccw{ @@ -74112,16 +76263,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"wgH" = ( -/obj/structure/table, -/obj/item/folder/white, -/obj/item/pen, -/obj/item/stamp/head/rd{ - pixel_x = 3; - pixel_y = -2 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/rd) "wgI" = ( /obj/effect/turf_decal/trimline/green/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -74133,6 +76274,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/white, /area/station/medical/virology) +"wgK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/commons/lounge) "wgL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -74146,22 +76293,7 @@ name = "Research Lab Shutters" }, /turf/open/floor/plating, -/area/station/science/breakroom) -"wgR" = ( -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/poddoor/preopen{ - id = "Biohazard"; - name = "Biohazard Containment Door" - }, -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/science/research) +/area/station/science/lab) "wgU" = ( /obj/machinery/modular_computer/preset/cargochat/science{ dir = 1 @@ -74178,12 +76310,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"whc" = ( -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/science/xenobiology) "whd" = ( /obj/item/storage/medkit/regular{ pixel_x = 3; @@ -74195,16 +76321,22 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/white/textured, /area/station/security/medical) +"whe" = ( +/obj/item/stack/rods/two, +/obj/item/stack/sheet/iron, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "whf" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, /turf/open/floor/glass/reinforced, /area/station/engineering/atmos/pumproom) "whg" = ( -/obj/effect/turf_decal/tile/blue, -/obj/machinery/light/directional/south, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) "whh" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/effect/turf_decal/trimline/yellow/filled/warning{ @@ -74221,20 +76353,16 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"whk" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/commons/dorms) "whr" = ( /obj/machinery/hydroponics/soil, /obj/item/cultivator, /turf/open/floor/grass, /area/station/security/prison/garden) -"whz" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/decal/cleanable/dirt, -/obj/item/seeds/redbeet, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) "whC" = ( /obj/structure/destructible/cult/item_dispenser/archives/library, /obj/item/book/codex_gigas, @@ -74262,6 +76390,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"whU" = ( +/obj/machinery/door/window/left/directional/north{ + name = "Pharmacy Desk"; + req_access = list("pharmacy") + }, +/obj/item/folder/white, +/obj/item/pen, +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/turf/open/floor/plating, +/area/station/medical/treatment_center) "whW" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -74270,13 +76409,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/engine_smes) -"wij" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/engineering/storage_shared) +"wib" = ( +/obj/structure/sign/departments/xenobio/directional/west, +/turf/open/floor/iron/white, +/area/station/science/research) +"wik" = ( +/obj/structure/table, +/obj/item/plant_analyzer, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/plating, +/area/station/engineering/storage/tech) "wiv" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -74293,35 +76436,19 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"wiM" = ( -/obj/machinery/computer/station_alert, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/security/telescreen/engine/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/engine_smes) -"wiO" = ( -/obj/structure/chair, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) -"wjv" = ( -/obj/machinery/computer/cargo{ - dir = 4 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/west, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) -"wjy" = ( +"wiX" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) +"wjj" = ( +/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/structure/sign/warning/radiation/directional/west, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/station/maintenance/aft/lesser) +/area/station/maintenance/fore) "wjz" = ( /obj/machinery/airalarm/directional/north, /obj/structure/disposalpipe/segment{ @@ -74333,6 +76460,23 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"wjA" = ( +/obj/structure/sign/warning/directional/north, +/turf/closed/mineral/random/snow/high_chance, +/area/icemoon/underground/explored) +"wjD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/closet/secure_closet/medical3, +/obj/item/defibrillator/loaded{ + pixel_y = 3 + }, +/obj/item/clothing/gloves/latex/nitrile, +/obj/item/clothing/gloves/latex/nitrile, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/storage) "wjL" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -74341,17 +76485,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"wjR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"wjP" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/rack, +/obj/item/storage/backpack/satchel/leather/withwallet, +/obj/item/toy/figure/assistant, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/chair, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/turf/open/floor/iron, +/area/station/commons/dorms/laundry) "wjS" = ( /obj/effect/landmark/start/assistant, /obj/structure/chair/pew{ @@ -74366,6 +76509,15 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) +"wkd" = ( +/obj/structure/rack, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/effect/spawner/random/armory/shotgun, +/turf/open/floor/iron/dark/textured, +/area/station/ai_monitored/security/armory) "wkl" = ( /obj/machinery/camera/directional/west{ c_tag = "Telecomms Server Room"; @@ -74386,20 +76538,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"wkC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured, -/area/station/hallway/primary/central) "wkH" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table, @@ -74408,6 +76546,25 @@ /obj/item/clothing/mask/breath/medical, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"wkN" = ( +/obj/machinery/door/firedoor{ + 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/structure/cable, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/lobby) "wkO" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -74418,12 +76575,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"wkV" = ( -/obj/structure/fence/corner{ - dir = 1 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) "wkW" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -74440,18 +76591,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"wla" = ( -/obj/effect/decal/cleanable/garbage, -/obj/item/reagent_containers/spray/chemsprayer/party{ - pixel_x = 1 - }, -/obj/item/clothing/head/costume/festive{ - pixel_y = -3; - pixel_x = -5 - }, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "wlr" = ( /obj/structure/table, /obj/item/stack/spacecash/c10, @@ -74480,10 +76619,6 @@ /obj/structure/filingcabinet, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"wlF" = ( -/mob/living/carbon/human/species/monkey, -/turf/open/floor/grass, -/area/station/medical/virology) "wlR" = ( /obj/structure/closet/boxinggloves, /turf/open/floor/iron, @@ -74507,14 +76642,11 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) -"wmb" = ( -/obj/item/beacon, -/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, -/turf/open/floor/iron, -/area/mine/eva) +"wme" = ( +/obj/effect/turf_decal/weather/snow, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating/icemoon, +/area/icemoon/underground/explored) "wml" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue, @@ -74547,6 +76679,14 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) +"wmP" = ( +/obj/machinery/plate_press, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/security/prison/work) "wmR" = ( /obj/structure/cable, /obj/machinery/door/airlock/glass{ @@ -74560,14 +76700,6 @@ "wmT" = ( /turf/open/floor/iron/dark, /area/mine/eva) -"wmX" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "wna" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -74579,9 +76711,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/dark/textured, /area/station/security/range) -"wnp" = ( -/turf/closed/wall/r_wall, -/area/station/science/cytology) "wnv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -74640,20 +76769,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/brig) -"wol" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/light/directional/east, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Research Division"; - name = "Research Division Fax Machine"; - pixel_x = 1 - }, -/turf/open/floor/iron/white/side{ - dir = 10 - }, -/area/station/science/research) +"woc" = ( +/obj/machinery/vending/wardrobe/atmos_wardrobe, +/obj/effect/turf_decal/stripes/end, +/obj/machinery/light/directional/north, +/obj/structure/sign/warning/no_smoking/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/engineering/atmos) "wor" = ( /turf/open/openspace, /area/station/medical/medbay/aft) @@ -74664,11 +76786,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"woC" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/structure/sign/poster/official/safety_eye_protection/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "woH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -74696,31 +76813,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) -"woV" = ( -/obj/structure/table, -/obj/item/petri_dish{ - pixel_y = 15; - pixel_x = -5 - }, -/obj/item/petri_dish{ - pixel_y = 10; - pixel_x = 6 - }, -/obj/item/petri_dish{ - pixel_y = -6; - pixel_x = -1 - }, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) -"woX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "wpc" = ( /obj/machinery/door/airlock{ name = "Unisex Restrooms" @@ -74730,34 +76822,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/commons/toilet/locker) -"wph" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/landmark/generic_maintenance_landmark, -/turf/open/floor/plating, -/area/station/maintenance/fore) -"wpi" = ( -/obj/structure/table, -/obj/item/holosign_creator/atmos{ - pixel_x = -5 - }, -/obj/item/holosign_creator/atmos{ - pixel_x = 4; - pixel_y = 4 +"wpn" = ( +/obj/machinery/light/small/dim/directional/east, +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/office) -"wpm" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - name = "Fitness Maintenance" +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres, -/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) +/area/station/maintenance/starboard/aft) "wpp" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/pipedispenser/disposal, @@ -74777,12 +76851,6 @@ /obj/item/stock_parts/micro_laser/high, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"wpv" = ( -/obj/structure/sign/warning/cold_temp, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/science/xenobiology) "wpx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster/directional/west, @@ -74836,21 +76904,6 @@ dir = 9 }, /area/station/science/research) -"wqc" = ( -/obj/machinery/vending/wardrobe/engi_wardrobe, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/storage_shared) -"wqi" = ( -/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/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "wqj" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -74858,17 +76911,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/storage/mining) -"wqt" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ +"wqo" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/railing/corner{ dir = 1 }, -/obj/machinery/airalarm/directional/west, -/obj/item/kirbyplants/organic/plant10, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +/turf/open/floor/stone, +/area/station/service/bar/atrium) "wqx" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/fore) @@ -74911,25 +76960,27 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"wrc" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/light_switch/directional/north{ - pixel_x = -11 +"wrk" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 +/obj/machinery/door/airlock/command/glass{ + name = "Bridge"; + dir = 8 }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, /turf/open/floor/iron, -/area/station/engineering/storage) -"wrl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half/contrasted{ +/area/station/command/bridge) +"wrw" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal) +/obj/structure/sign/poster/official/safety_report/directional/east, +/obj/item/radio/intercom/prison/directional/north, +/turf/open/floor/iron, +/area/station/security/prison/visit) "wrA" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -74952,15 +77003,14 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"wrN" = ( -/obj/structure/sign/departments/court/directional/north, -/turf/open/openspace, -/area/station/hallway/primary/fore) -"wrU" = ( -/obj/structure/rack, -/obj/item/screwdriver, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) +"wrP" = ( +/obj/machinery/computer/cargo, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/north, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "wrV" = ( /obj/structure/cable, /turf/open/floor/plating/snowed/smoothed/icemoon, @@ -74973,12 +77023,23 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"wsk" = ( +/obj/effect/spawner/random/trash/mess, +/obj/structure/disposalpipe/segment, +/obj/structure/railing/corner/end, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wsp" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ dir = 1 }, /turf/open/floor/iron, /area/station/science/ordnance) +"wsr" = ( +/obj/machinery/door/airlock/hatch, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "wsu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, @@ -75059,6 +77120,16 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"wtM" = ( +/obj/machinery/door/airlock/external{ + name = "External Access"; + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "wtP" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -75073,33 +77144,18 @@ dir = 5 }, /area/station/science/research) -"wtX" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/cold_temp, -/turf/open/floor/plating, -/area/station/maintenance/solars/starboard/fore) -"wuc" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "wug" = ( /obj/machinery/gulag_item_reclaimer{ pixel_y = 24 }, /turf/open/floor/carpet, /area/station/security/processing) +"wuh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/ordnance) "wuo" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter) @@ -75140,19 +77196,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/prison) -"wuV" = ( -/obj/effect/turf_decal/siding/yellow/corner, -/obj/machinery/status_display/evac/directional/south, -/obj/structure/table, -/obj/item/flatpack{ - board = /obj/item/circuitboard/machine/flatpacker; - pixel_x = -5 - }, -/obj/item/multitool{ - pixel_x = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/lobby) "wve" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/white, @@ -75161,9 +77204,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/chapel) -"wvu" = ( -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) "wvv" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75180,12 +77220,11 @@ /turf/open/floor/plating, /area/station/science/ordnance/testlab) "wvw" = ( -/obj/machinery/button/door/directional/north{ - id = "heads_meeting"; - name = "Security Shutters" +/obj/structure/fence/cut/medium{ + dir = 2 }, -/turf/open/floor/wood, -/area/station/command/meeting_room) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "wvz" = ( /obj/structure/table, /obj/item/assembly/timer{ @@ -75203,13 +77242,22 @@ /obj/item/assembly/timer, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) +"wvF" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 8 + }, +/turf/open/openspace/icemoon/keep_below, +/area/icemoon/underground/explored) "wvI" = ( /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) "wvJ" = ( -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/obj/machinery/photocopier, +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/sign/calendar/directional/north, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) "wvK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75219,12 +77267,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/tools) -"wvL" = ( -/obj/effect/turf_decal/weather/snow/corner, -/turf/open/misc/dirt{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/icemoon/underground/explored/graveyard) "wvV" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/pumproom) @@ -75235,22 +77277,23 @@ /mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"wwg" = ( -/obj/machinery/camera{ - c_tag = "Service - Botany"; - dir = 9 +"wwi" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 }, -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 4; + name = "Arrivals Dock" }, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/warm/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/secondary/entry) "wwn" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/left/directional/west{ @@ -75300,39 +77343,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/iron/dark, /area/station/medical/virology) -"wwL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Law Office" +"wwO" = ( +/obj/machinery/recharger, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 }, -/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/effect/mapping_helpers/airlock/access/all/service/lawyer, -/turf/open/floor/wood, -/area/station/service/lawoffice) +/turf/open/floor/iron, +/area/station/command/gateway) "wxg" = ( /turf/open/floor/iron/freezer, /area/mine/laborcamp) -"wxp" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id = "Cargo_Store_In"; - name = "Cargo Warehouse Shutters" +"wxl" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/warehouse) +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) "wxw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -75366,6 +77395,11 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"wxY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/construction) "wyj" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/trimline/blue/filled/line, @@ -75408,6 +77442,14 @@ }, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) +"wyL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "wyO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -75419,6 +77461,13 @@ }, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) +"wyX" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/stairs/south, +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/station/medical/virology) "wzc" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -75430,6 +77479,11 @@ /obj/effect/spawner/random/clothing/bowler_or_that, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"wzi" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "wzk" = ( /turf/open/floor/wood, /area/station/command/meeting_room) @@ -75451,6 +77505,36 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) +"wzv" = ( +/obj/machinery/atmospherics/components/tank/air{ + initialize_directions = 3; + dir = 3 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"wzH" = ( +/obj/structure/minecart_rail{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/icemoon/underground/explored) +"wzU" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + 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, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science/ordnance) "wAf" = ( /obj/machinery/requests_console/directional/north{ department = "Cargo Bay"; @@ -75462,25 +77546,6 @@ /obj/item/folder/yellow, /turf/open/floor/iron, /area/station/cargo/storage) -"wAk" = ( -/obj/item/toy/snowball{ - pixel_x = -6; - pixel_y = 3 - }, -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) -"wAq" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Security - Upper Brig South" - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig/upper) "wAv" = ( /obj/structure/chair/comfy/brown{ dir = 1 @@ -75490,14 +77555,6 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"wAx" = ( -/obj/structure/sign/warning/secure_area/directional/north{ - desc = "A warning sign which reads 'SERVER ROOM'."; - name = "SERVER ROOM" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/science/server) "wAB" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -75505,6 +77562,13 @@ /obj/machinery/meter, /turf/open/floor/iron, /area/station/engineering/atmos) +"wAJ" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/griddle, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "wAQ" = ( /obj/machinery/computer/shuttle/labor/one_way{ dir = 4 @@ -75539,12 +77603,21 @@ /turf/open/floor/plating, /area/station/maintenance/fore) "wBa" = ( -/obj/structure/railing, -/obj/effect/turf_decal/siding/thinplating_new/light{ - dir = 10 +/obj/structure/rack, +/obj/item/clothing/suit/hooded/wintercoat/eva{ + pixel_x = 1; + pixel_y = 9 }, -/turf/open/floor/wood/large, -/area/station/hallway/primary/starboard) +/obj/item/clothing/shoes/winterboots/ice_boots/eva{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/delivery/red, +/obj/item/clothing/gloves/color/grey/protects_cold, +/obj/item/clothing/mask/gas, +/turf/open/floor/iron/textured, +/area/station/ai_monitored/command/storage/eva) "wBb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -75582,15 +77655,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/workout) -"wBr" = ( -/obj/effect/turf_decal/siding/wood{ +"wBs" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/kirbyplants/random, +/obj/structure/railing/corner{ dir = 4 }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/item/kirbyplants/organic/plant2, -/turf/open/floor/stone, -/area/station/service/bar/atrium) +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/chapel) "wBy" = ( /obj/machinery/netpod, /obj/item/radio/intercom/directional/south, @@ -75602,12 +77676,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"wBF" = ( -/obj/machinery/status_display/supply{ - pixel_y = 2 - }, -/turf/closed/wall, -/area/station/cargo/sorting) "wBT" = ( /obj/machinery/camera/directional/south{ c_tag = "Port Hallway Center" @@ -75617,6 +77685,9 @@ /area/station/hallway/primary/port) "wBV" = ( /obj/structure/closet/crate, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/cargo/miningdock) "wCo" = ( @@ -75625,6 +77696,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"wCI" = ( +/obj/structure/sign/warning/no_smoking/circle/directional/north, +/turf/open/openspace, +/area/station/medical/treatment_center) "wCK" = ( /obj/effect/turf_decal/trimline/dark_blue/corner{ dir = 8 @@ -75650,6 +77725,16 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) +"wCN" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/bot, +/obj/structure/sign/poster/official/wtf_is_co2/directional/north, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage) "wCV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75657,6 +77742,12 @@ dir = 8 }, /area/station/science/explab) +"wDb" = ( +/obj/machinery/requests_console/auto_name/directional/east, +/obj/machinery/duct, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "wDc" = ( /obj/structure/cable, /obj/machinery/door/airlock/engineering{ @@ -75693,34 +77784,6 @@ "wDg" = ( /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"wDi" = ( -/obj/structure/table, -/obj/item/clothing/mask/breath{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/breath{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/breath{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/breath{ - pixel_x = 2; - pixel_y = -1 - }, -/obj/item/clothing/mask/breath{ - pixel_x = 2; - pixel_y = -1 - }, -/obj/item/clothing/mask/breath{ - pixel_x = 2; - pixel_y = -1 - }, -/turf/open/floor/iron, -/area/station/commons/storage/mining) "wDk" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -75735,16 +77798,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"wDs" = ( -/obj/machinery/hydroponics/constructable, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/item/plant_analyzer, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) "wDG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75765,6 +77818,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"wDS" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/fake_stairs/wood/directional/north, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "wDU" = ( /turf/closed/wall/r_wall, /area/mine/eva/lower) @@ -75775,26 +77836,32 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) +"wEb" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/fore) "wEh" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/sorting) -"wEq" = ( -/obj/structure/chair/office{ - dir = 8 +"wEp" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 }, -/obj/machinery/newscaster/directional/north, -/obj/machinery/light/small/directional/north, -/obj/effect/decal/remains/human, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/dark/textured_edge, +/area/station/security/prison) +"wEu" = ( +/obj/structure/sign/warning/directional/south, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "wEG" = ( /obj/structure/extinguisher_cabinet/directional/south{ pixel_x = 4 }, /obj/machinery/light_switch/directional/south{ - pixel_x = -6 + pixel_x = -8 }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -75853,6 +77920,27 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"wFt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4{ + color = "#0000ff"; + dir = 8; + name = "Supply multi deck pipe adapter" + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ + color = "#ff0000"; + dir = 8; + name = "Scrubbers multi deck pipe adapter" + }, +/obj/structure/cable/multilayer/multiz, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) +"wFJ" = ( +/turf/open/floor/wood, +/area/station/commons/lounge) "wFN" = ( /mob/living/basic/slime, /turf/open/floor/engine, @@ -75884,15 +77972,14 @@ name = "Test Chamber Blast Door" }, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/engine, +/turf/open/floor/plating, /area/station/science/explab) -"wGm" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/chair/stool/bar/directional/north, -/turf/open/floor/stone, -/area/station/service/bar/atrium) +"wGt" = ( +/obj/structure/table/glass, +/obj/item/storage/box/monkeycubes, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/station/science/xenobiology) "wGv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -75917,19 +78004,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"wGN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio6"; - name = "Xenobio Pen 6 Blast Door" - }, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/electric_shock, -/turf/open/floor/plating, -/area/station/science/xenobiology) "wGO" = ( /obj/machinery/light/directional/south, /obj/machinery/atmospherics/pipe/multiz/violet/visible{ @@ -75943,10 +78017,6 @@ }, /turf/open/floor/iron/dark/diagonal, /area/station/engineering/atmos/storage) -"wGQ" = ( -/obj/machinery/light/small/dim/directional/west, -/turf/open/floor/stone, -/area/station/commons/lounge) "wGW" = ( /obj/structure/table, /obj/item/book/manual/wiki/security_space_law, @@ -75964,6 +78034,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"wGZ" = ( +/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/insectguts, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "wHb" = ( /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 1 @@ -75997,12 +78075,6 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"wHr" = ( -/obj/structure/fence/post{ - dir = 8 - }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/surface/outdoors/nospawn) "wHH" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red{ @@ -76010,17 +78082,6 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) -"wHK" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/fore) "wIg" = ( /obj/machinery/mech_bay_recharge_port{ dir = 2 @@ -76033,28 +78094,19 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/central) -"wIx" = ( -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/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, -/area/station/service/hydroponics) "wIz" = ( /obj/machinery/light/small/directional/west, /obj/structure/table/wood, /obj/effect/landmark/start/hangover, /turf/open/floor/carpet, /area/station/commons/dorms) +"wIC" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/flashlight/lantern, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/chapel) "wIR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -76084,10 +78136,13 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) -"wJD" = ( -/obj/structure/sign/departments/maint/alt, -/turf/closed/wall, -/area/station/maintenance/aft/lesser) +"wJy" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "wJG" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -76120,10 +78175,33 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) -"wKh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) +"wKi" = ( +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "rnd2"; + name = "Research Lab Shutters" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/status_display/evac/directional/south, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/science/lab) +"wKu" = ( +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/port/greater) "wKv" = ( /obj/structure/table, /obj/item/radio/off, @@ -76150,11 +78228,40 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"wKY" = ( -/obj/machinery/vending/games, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/wood, -/area/station/service/library) +"wLc" = ( +/obj/structure/table, +/obj/machinery/button/flasher{ + pixel_x = -6; + pixel_y = -1; + id = "brigentry" + }, +/obj/machinery/button/door{ + pixel_y = 9; + pixel_x = 6; + req_access = list("secuirty"); + id = "innerbrig"; + name = "Brig Interior Doors Control"; + normaldoorcontrol = 1 + }, +/obj/machinery/button/door{ + pixel_y = -1; + pixel_x = 6; + req_access = list("secuirty"); + id = "outerbrig"; + name = "Brig Exterior Doors Control"; + normaldoorcontrol = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "briggate"; + name = "Front Gate Shutters"; + req_access = list("brig"); + pixel_y = 9; + pixel_x = -6 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/security/brig/entrance) "wLk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, @@ -76170,10 +78277,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/command/bridge) -"wLK" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai) "wLO" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76193,14 +78296,6 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) -"wLU" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "wLW" = ( /obj/effect/landmark/atmospheric_sanity/mark_all_station_areas_as_goal, /turf/open/misc/asteroid/snow/icemoon, @@ -76284,19 +78379,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/commons/storage/mining) -"wME" = ( -/obj/machinery/light_switch/directional/north{ - pixel_x = 6; - pixel_y = 28 - }, -/obj/machinery/button/door/directional/north{ - id = "botany_chasm_and_wolf_shutters"; - name = "Exterior Shutters"; - pixel_y = 28; - pixel_x = -4 - }, -/turf/open/floor/iron/dark/smooth_half, -/area/station/service/hydroponics) "wMT" = ( /obj/structure/sign/poster/random/directional/south, /turf/open/floor/iron, @@ -76314,6 +78396,29 @@ dir = 1 }, /area/station/security/office) +"wMY" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/fore) +"wNj" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "wNp" = ( /obj/machinery/door/airlock/maintenance{ name = "Medbay Maintenance" @@ -76362,6 +78467,23 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos/storage) +"wOq" = ( +/obj/structure/fence/door/opened, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"wOt" = ( +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/vending/hydroseeds{ + slogan_delay = 700 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "wOy" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -76372,12 +78494,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"wOC" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "wOF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/random/directional/north, @@ -76414,26 +78530,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"wPe" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/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/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/obj/machinery/door/airlock{ - name = "Bar" - }, -/turf/open/floor/iron/dark/textured_half{ - dir = 1 - }, -/area/station/service/bar) "wPf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -76464,6 +78560,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"wPx" = ( +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "wPD" = ( /obj/machinery/door/airlock/security/glass{ name = "Evidence Storage" @@ -76479,6 +78587,19 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/openspace, /area/station/engineering/atmos/storage) +"wPG" = ( +/obj/structure/fence{ + dir = 1 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) +"wPJ" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/stairs/north, +/turf/open/floor/iron/stairs/medium, +/area/station/commons/dorms/laundry) "wPN" = ( /obj/structure/railing{ dir = 4 @@ -76488,16 +78609,6 @@ }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"wPR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/obj/structure/sign/warning/cold_temp/directional/south, -/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/hydroponics) "wPX" = ( /obj/structure/table, /obj/item/storage/belt/medical{ @@ -76513,6 +78624,7 @@ /obj/item/reagent_containers/spray/cleaner, /obj/item/blood_filter, /obj/item/radio/intercom/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/white, /area/station/medical/storage) "wQh" = ( @@ -76544,13 +78656,9 @@ /turf/open/floor/plating/icemoon, /area/station/security/execution/education) "wQx" = ( -/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/effect/spawner/random/structure/steam_vent, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/standard_air, +/area/station/science/cytology) "wQC" = ( /obj/item/flashlight/lantern, /obj/structure/table/wood, @@ -76564,12 +78672,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"wQN" = ( -/obj/structure/fence/cut/large{ - dir = 1 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "wQR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -76588,15 +78690,16 @@ "wRa" = ( /turf/open/openspace, /area/station/security/prison) -"wRc" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high/empty, -/turf/open/floor/iron/dark, -/area/station/engineering/storage) "wRd" = ( /turf/open/floor/iron, /area/station/engineering/main) +"wRk" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "wRr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76610,6 +78713,14 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/glass/reinforced, /area/station/security/lockers) +"wRu" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "wRx" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -76650,14 +78761,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/freezer, /area/mine/eva/lower) -"wRO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/maintenance_hatch, -/obj/machinery/door/firedoor/heavy, -/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "wRR" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; @@ -76668,10 +78771,6 @@ /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/station/medical/chemistry) -"wSc" = ( -/obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating, -/area/station/maintenance/fore) "wSd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76701,6 +78800,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/atmos) +"wSp" = ( +/obj/structure/fence/corner{ + dir = 10 + }, +/obj/item/stack/cable_coil/five, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "wSs" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) @@ -76718,38 +78824,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/work) -"wSL" = ( -/obj/effect/landmark/start/botanist, -/obj/effect/turf_decal/tile/green/opposingcorners{ +"wSC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/green/half/contrasted{ dir = 1 }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/item/radio/intercom/directional/south, /turf/open/floor/iron, -/area/station/service/hydroponics) -"wSM" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "QMLoad2" - }, -/obj/machinery/door/poddoor{ - id = "QMLoaddoor2"; - name = "Supply Dock Loading Door" - }, -/turf/open/floor/plating, -/area/station/cargo/storage) +/area/station/security/prison/garden) "wSU" = ( /obj/structure/chair{ dir = 1 }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"wSX" = ( -/obj/structure/railing/corner, -/obj/machinery/door/firedoor/border_only, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron/dark/side, -/area/mine/eva) "wSZ" = ( /obj/machinery/camera/directional/east{ c_tag = "Security - Permabrig Upper Hallway East"; @@ -76760,11 +78847,6 @@ "wTg" = ( /turf/closed/wall, /area/station/engineering/main) -"wTl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/landmark/start/mime, -/turf/open/floor/wood, -/area/station/commons/lounge) "wTw" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 10 @@ -76785,6 +78867,14 @@ /obj/machinery/telecomms/bus/preset_one, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"wTB" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/structure/closet/radiation, +/obj/structure/sign/warning/no_smoking/circle/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/disposal/incinerator) "wTC" = ( /obj/structure/closet/secure_closet/security/engine, /obj/machinery/requests_console/directional/north{ @@ -76798,6 +78888,25 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) +"wTL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "wTX" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -76805,11 +78914,16 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"wUb" = ( -/obj/structure/rack, -/obj/item/poster/random_contraband, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) +"wUf" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/hallway/secondary/entry) "wUi" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Stbd"; @@ -76823,6 +78937,13 @@ "wUj" = ( /turf/closed/wall, /area/station/service/lawoffice) +"wUm" = ( +/obj/machinery/vatgrower{ + dir = 4 + }, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "wUt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -76854,11 +78975,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"wUD" = ( -/obj/structure/fake_stairs/wood/directional/north, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) +"wUB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/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, +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/eighties, +/area/station/commons/lounge) "wUJ" = ( /obj/machinery/computer/atmos_alert, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ @@ -76917,6 +79044,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/central/greater) +"wVd" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/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, +/area/station/service/hydroponics) "wVe" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -76926,15 +79069,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/service/library) -"wVq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/random/trash/caution_sign, -/obj/effect/decal/cleanable/glass, -/obj/structure/sign/warning/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) +"wVr" = ( +/obj/structure/mineral_door/wood{ + name = "Maintenance Bar"; + dir = 4 + }, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "wVu" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -76968,23 +79109,6 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) -"wVI" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/siding/wood, -/obj/structure/chair/stool/bar/directional/north, -/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, -/area/station/commons/lounge) -"wVR" = ( -/obj/structure/disposalpipe/junction, -/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) "wWa" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -76998,13 +79122,19 @@ /obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"wWB" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, +"wWo" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"wWw" = ( +/obj/structure/fence{ + dir = 2 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "wWM" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 @@ -77034,6 +79164,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/laborcamp) +"wXb" = ( +/obj/machinery/firealarm/directional/west, +/turf/open/openspace, +/area/station/service/bar/atrium) "wXh" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2{ dir = 8 @@ -77041,10 +79175,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/cryo) -"wXn" = ( -/obj/structure/flora/grass/both/style_3, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "wXR" = ( /obj/structure/table, /obj/item/storage/medkit/regular{ @@ -77082,10 +79212,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"wYp" = ( -/obj/structure/sign/nanotrasen, -/turf/closed/wall/ice, -/area/icemoon/underground/explored) "wYq" = ( /obj/machinery/door/airlock{ name = "Perma Overlook Closet" @@ -77116,6 +79242,16 @@ /obj/machinery/requests_console/auto_name/directional/north, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) +"wYH" = ( +/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/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "wYJ" = ( /turf/closed/wall, /area/station/engineering/storage_shared) @@ -77125,6 +79261,12 @@ }, /turf/open/floor/plating, /area/station/security/courtroom) +"wYS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/fore) "wYZ" = ( /obj/structure/disposalpipe/junction/flip{ dir = 1 @@ -77136,32 +79278,6 @@ "wZj" = ( /turf/open/floor/iron/dark/textured, /area/station/security/warden) -"wZp" = ( -/obj/item/storage/toolbox/electrical{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/machinery/button/door/directional/east{ - id = "eva_shutters"; - pixel_x = 26; - pixel_y = 6; - req_access = list("command") - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/light_switch/directional/east{ - pixel_y = -6 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/storage/toolbox/emergency, -/obj/structure/rack, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) "wZr" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -77172,19 +79288,18 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"wZv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"wZu" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/machinery/camera{ - c_tag = "Xenobiology Pens Hall - Fore"; - dir = 9; - network = list("ss13","rd","xeno") +/obj/effect/turf_decal/trimline/blue/filled/end{ + dir = 1 }, -/obj/structure/sign/xenobio_guide/directional/north, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/segment, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron, +/area/station/medical/medbay/aft) "wZD" = ( /obj/machinery/computer/records/security{ dir = 1 @@ -77198,11 +79313,37 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"wZW" = ( +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/rack, +/obj/item/clothing/accessory/armband/hydro{ + pixel_y = 4; + pixel_x = 2 + }, +/obj/item/clothing/accessory/armband/hydro, +/obj/item/toy/figure/botanist, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "xad" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/range) +"xaf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "xal" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -77245,6 +79386,22 @@ /obj/machinery/door/airlock/external/glass, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"xax" = ( +/obj/machinery/photocopier, +/obj/machinery/button/door/directional/north{ + id = "heads_meeting"; + name = "Security Shutters" + }, +/turf/open/floor/wood, +/area/station/command/meeting_room) +"xay" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/station/service/bar/backroom) "xaA" = ( /obj/structure/closet/secure_closet/hop, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ @@ -77302,6 +79459,11 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) +"xbq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "xbr" = ( /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, @@ -77326,9 +79488,21 @@ /turf/open/floor/iron/freezer, /area/mine/eva/lower) "xbB" = ( -/obj/machinery/gibber, -/turf/open/misc/asteroid/snow/coldroom, -/area/station/service/kitchen/coldroom) +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/obj/machinery/shower/directional/south, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/fluff/shower_drain, +/obj/effect/turf_decal/stripes/white/end, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay Pharmacy"; + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "xbC" = ( /obj/effect/turf_decal/trimline/dark_green/arrow_ccw, /obj/machinery/meter, @@ -77348,6 +79522,12 @@ /obj/effect/turf_decal/siding/white, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"xcf" = ( +/obj/structure/closet/crate/grave/filled, +/turf/open/misc/dirt{ + initial_gas_mix = "ICEMOON_ATMOS" + }, +/area/icemoon/underground/explored/graveyard) "xcp" = ( /obj/item/trash/pistachios, /turf/open/floor/plating, @@ -77378,16 +79558,6 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"xcO" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/sink/kitchen/directional/west, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron, -/area/station/service/bar) "xcW" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2{ dir = 1 @@ -77411,16 +79581,26 @@ /obj/effect/mapping_helpers/airlock/access/any/command/ai_upload, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) -"xdk" = ( -/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/smooth_large, -/area/station/science/cytology) +"xdh" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/stairs/north, +/turf/open/floor/iron/stairs/medium, +/area/station/commons/dorms/laundry) "xdl" = ( /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/storage) +"xds" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "xdH" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/chair{ @@ -77431,10 +79611,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) -"xdM" = ( -/obj/structure/sign/warning/cold_temp, -/turf/closed/wall, -/area/station/hallway/secondary/exit/departure_lounge) "xdU" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1 @@ -77448,21 +79624,12 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central) -"xdY" = ( -/obj/structure/sign/warning/directional/west, -/turf/open/genturf/blue, -/area/icemoon/underground/unexplored/rivers/deep/shoreline) "xdZ" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 6 }, /turf/open/floor/iron/dark/textured, /area/station/security/prison/rec) -"xea" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "xeg" = ( /obj/effect/turf_decal/weather/snow/corner, /turf/open/misc/asteroid/snow/icemoon, @@ -77481,10 +79648,41 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"xer" = ( +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "rnd2"; + name = "Research Lab Shutters" + }, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/science/lab) "xex" = ( /obj/machinery/teleport/hub, /turf/open/floor/plating, /area/station/command/teleporter) +"xeF" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/ordnance) "xeH" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/wood, @@ -77550,10 +79748,40 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"xfp" = ( +/obj/structure/table, +/obj/item/multitool/circuit{ + pixel_x = -8 + }, +/obj/item/multitool/circuit{ + pixel_x = -4 + }, +/obj/item/multitool/circuit, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 8; + pixel_y = 9 + }, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron/white/side{ + dir = 4 + }, +/area/station/science/explab) "xft" = ( /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"xfv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "xfB" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/iron, @@ -77626,25 +79854,35 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"xgr" = ( -/obj/effect/decal/cleanable/dirt, +"xgy" = ( +/turf/open/openspace, +/area/station/service/hydroponics) +"xgF" = ( /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - pixel_x = -8; - pixel_y = -24 +/obj/structure/railing{ + dir = 6 }, -/obj/machinery/button/door/incinerator_vent_atmos_main{ - pixel_x = -8; - pixel_y = -36 +/obj/structure/table, +/obj/item/assembly/signaler{ + pixel_x = 6; + pixel_y = 5 }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"xgy" = ( -/turf/open/openspace, -/area/station/service/hydroponics) +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/cable_coil, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria{ + dir = 8 + }, +/area/station/science/ordnance/office) "xgI" = ( /obj/structure/sign/warning/secure_area{ desc = "A warning sign which reads 'BOMB RANGE"; @@ -77705,14 +79943,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/blue, /area/station/hallway/secondary/entry) -"xhg" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Garden" - }, -/obj/machinery/status_display/ai/directional/east, -/obj/structure/water_source/puddle, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "xhk" = ( /turf/open/floor/iron/dark, /area/station/commons/storage/primary) @@ -77752,6 +79982,16 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) +"xhA" = ( +/obj/structure/fence/door/opened, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "xhD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -77764,6 +80004,10 @@ "xhK" = ( /turf/closed/wall/r_wall, /area/station/security/prison/safe) +"xhV" = ( +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/hallway/secondary/service) "xie" = ( /obj/machinery/camera/directional/west{ c_tag = "Engineering MiniSat Access" @@ -77775,14 +80019,23 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) -"xij" = ( -/obj/structure/railing{ - dir = 1 +"xiq" = ( +/obj/machinery/computer/security/telescreen/interrogation/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 }, -/obj/machinery/smartfridge/petri/preloaded, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) +/turf/open/floor/iron/dark/corner{ + dir = 8 + }, +/area/station/security/processing) +"xir" = ( +/obj/item/radio/intercom/prison/directional/north, +/obj/effect/turf_decal/tile/red/full, +/obj/machinery/light_switch/directional/north{ + pixel_x = 16 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/brig/entrance) "xit" = ( /obj/item/book/manual/wiki/security_space_law, /obj/structure/table/wood, @@ -77804,6 +80057,14 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"xiL" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/sink/kitchen/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) "xiO" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -77829,10 +80090,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/large, /area/station/medical/medbay/lobby) -"xjg" = ( -/obj/structure/sign/departments/medbay/alt, -/turf/closed/wall, -/area/station/medical/medbay/lobby) "xjm" = ( /obj/machinery/light_switch/directional/north, /obj/machinery/camera/directional/north{ @@ -77841,12 +80098,6 @@ /obj/vehicle/ridden/janicart, /turf/open/floor/iron, /area/station/service/janitor) -"xjs" = ( -/obj/structure/railing/corner/end{ - dir = 8 - }, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "xjC" = ( /turf/open/floor/plating, /area/station/maintenance/department/cargo) @@ -77876,14 +80127,14 @@ }, /turf/open/floor/plating, /area/station/cargo/sorting) -"xjU" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor/heavy, -/turf/open/floor/iron/white, -/area/station/science/research) +"xjT" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/commons/fitness) "xjZ" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/iron/dark, @@ -77894,32 +80145,34 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"xkp" = ( -/obj/machinery/door/airlock{ - id_tag = "Dorm4"; - name = "Dorm 4" +"xkr" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/wtf_is_co2/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"xkI" = ( +/obj/machinery/door/airlock/command{ + name = "Conference Room" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/commons/dorms) -"xkH" = ( /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/corner{ - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/item/kirbyplants/random, -/turf/open/floor/plastic, -/area/station/commons/dorms/laundry) -"xkT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/turf/open/floor/wood, +/area/station/command/meeting_room) +"xkW" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "xkZ" = ( /obj/machinery/teleport/station, /obj/machinery/light/small/directional/east, @@ -77930,17 +80183,19 @@ name = "Medbay Delivery"; req_access = list("medical") }, -/obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/tile/yellow/full, /turf/open/floor/iron/large, /area/station/medical/storage) -"xlp" = ( -/obj/structure/sign/nanotrasen, -/obj/structure/fence/post{ +"xlm" = ( +/obj/machinery/duct, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) +/turf/open/floor/iron, +/area/station/service/hydroponics) "xlq" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -77995,17 +80250,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"xlQ" = ( -/obj/machinery/computer/order_console/mining, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera{ - c_tag = "Mining Bunks"; - dir = 6 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/mine/production) "xmf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -78017,6 +80261,16 @@ dir = 9 }, /area/station/science/research) +"xmk" = ( +/obj/structure/plasticflaps{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "xmo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78028,6 +80282,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"xmD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/stone, +/area/station/service/bar/atrium) "xmK" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty, @@ -78038,17 +80302,14 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/storage) -"xmL" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 +"xmM" = ( +/obj/structure/railing{ + dir = 1 }, -/obj/structure/sign/warning/no_smoking{ - pixel_x = -28 +/turf/open/floor/iron/stairs/medium{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/engineering/atmos) +/area/station/science/ordnance) "xmN" = ( /obj/structure/table/reinforced, /obj/item/radio/intercom/directional/south, @@ -78082,40 +80343,12 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"xnc" = ( -/obj/effect/turf_decal/siding/white/end{ - dir = 4 - }, -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_y = 6 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) -"xnf" = ( -/obj/item/kirbyplants/fern, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "xni" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"xnt" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) -"xnC" = ( -/obj/structure/sign/warning/fire/directional/east, -/obj/structure/fence{ - dir = 4 - }, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "xnE" = ( /obj/machinery/duct, /obj/effect/turf_decal/tile/yellow{ @@ -78123,6 +80356,16 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos) +"xnK" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/medical/morgue) "xnM" = ( /obj/structure/cable, /turf/open/floor/iron/white/side{ @@ -78150,18 +80393,25 @@ }, /turf/open/lava/plasma/ice_moon, /area/icemoon/underground/explored) -"xog" = ( -/obj/structure/fence{ - dir = 1 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "xow" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/firealarm/directional/west, /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/atmos) +"xpc" = ( +/obj/effect/turf_decal/siding/yellow/corner, +/obj/machinery/status_display/evac/directional/south, +/obj/structure/table, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/lobby) "xpw" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -78198,16 +80448,6 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) -"xpO" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "botany_chasm_and_wolf_shutters" - }, -/turf/open/floor/plating, -/area/station/service/hydroponics) "xpP" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, @@ -78216,26 +80456,41 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"xqa" = ( -/obj/structure/railing{ +"xqj" = ( +/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_smooth, +/area/station/maintenance/port/greater) +"xqk" = ( +/obj/machinery/door/airlock{ + name = "Bar"; dir = 4 }, -/obj/effect/turf_decal/siding/white{ +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ dir = 4 }, /obj/machinery/duct, -/obj/effect/turf_decal/tile/bar{ +/obj/machinery/door/firedoor{ dir = 4 }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/service/kitchen/coldroom) -"xqj" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/bar) +"xqt" = ( /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_smooth, -/area/station/maintenance/port/greater) +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/landmark/event_spawn, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/stone, +/area/station/commons/lounge) "xqu" = ( /obj/machinery/door/window/left/directional/east{ name = "Containment Pen 10"; @@ -78248,19 +80503,35 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/science/xenobiology) +"xqw" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Exfiltrate to Port" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/railing, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) "xqy" = ( /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/cargo/office) -"xqP" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/siding/white{ - dir = 1 +"xqU" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchencounter"; + name = "Kitchen Counter Shutters" }, -/turf/open/floor/iron/dark, -/area/station/commons/fitness) +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = -4; + pixel_y = 3 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/service/kitchen) "xqX" = ( /obj/structure/sign/poster/contraband/random/directional/north, /obj/structure/cable, @@ -78278,25 +80549,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"xre" = ( -/obj/structure/table/glass, -/obj/machinery/door/window/left/directional/north{ - name = "Hydroponics Desk"; - req_access = list("hydroponics") - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/green/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -5 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "xrf" = ( /obj/structure/railing, /obj/structure/cable, @@ -78340,17 +80592,6 @@ }, /turf/open/floor/iron/dark, /area/mine/storage) -"xrL" = ( -/obj/machinery/washing_machine, -/obj/structure/sign/poster/official/no_erp/directional/west, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/dorms/laundry) "xrS" = ( /obj/structure/ladder, /obj/effect/turf_decal/stripes/box, @@ -78361,12 +80602,6 @@ /obj/machinery/light/blacklight/directional/east, /turf/open/floor/wood, /area/station/service/library) -"xsm" = ( -/obj/structure/cable, -/obj/machinery/duct, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/fore) "xss" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -78383,28 +80618,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/tech_storage, /turf/open/floor/plating, /area/station/engineering/storage/tech) -"xsy" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/station/service/bar/atrium) -"xsA" = ( -/obj/structure/rack, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) -"xsP" = ( -/obj/structure/table, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/item/pen, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/explab) "xtc" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -78412,15 +80625,12 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"xte" = ( -/obj/structure/railing/corner/end/flip{ - dir = 4 - }, -/obj/structure/railing/corner/end{ - dir = 4 - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) +"xth" = ( +/obj/structure/closet/crate/miningcar, +/obj/effect/spawner/random/exotic/snow_gear, +/obj/effect/spawner/random/exotic/snow_gear, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "xtn" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -78446,12 +80656,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison/workout) -"xtH" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/turf/open/floor/stone, -/area/station/service/bar/atrium) "xtQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78459,33 +80663,47 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"xtR" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ +"xua" = ( +/obj/machinery/computer/security/qm, +/obj/machinery/requests_console/directional/west{ + department = "Quartermaster's Desk"; + name = "Quartermaster's Desk Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ +/obj/structure/sign/poster/official/work_for_a_future/directional/north, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) +"xug" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/stairs/medium, +/area/station/cargo/storage) +"xul" = ( +/obj/structure/table/glass, +/obj/machinery/door/window/left/directional/north{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/green/opposingcorners{ dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/structure/closet/l3closet/virology, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/virology) -"xtX" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/item/paper_bin{ + pixel_y = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"xun" = ( -/obj/machinery/door/poddoor/massdriver_chapel, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/station/service/chapel) +/obj/item/pen{ + pixel_x = -5 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "xuo" = ( /turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/explored) @@ -78518,29 +80736,19 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"xuM" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/camera{ - c_tag = "Medbay Cryogenics"; - dir = 9; - network = list("ss13","medbay") - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/turf/open/floor/iron/dark/textured, -/area/station/medical/cryo) -"xuQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/mob/living/carbon/human/species/monkey, -/turf/open/floor/grass, -/area/station/medical/virology) +"xuL" = ( +/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/effect/spawner/random/structure/steam_vent, +/turf/open/floor/plating, +/area/station/maintenance/fore) "xuR" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/manifold{ dir = 4 }, -/turf/open/misc/asteroid/snow/icemoon, +/turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) "xuW" = ( /obj/effect/turf_decal/tile/blue{ @@ -78551,6 +80759,14 @@ dir = 5 }, /area/station/hallway/secondary/entry) +"xvd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/lattice/catwalk, +/obj/structure/sign/warning/cold_temp/directional/north, +/turf/open/openspace/icemoon/keep_below, +/area/station/maintenance/port/lesser) "xvj" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 5 @@ -78586,9 +80802,12 @@ /obj/effect/landmark/start/chemist, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"xvx" = ( -/turf/open/misc/asteroid/snow/standard_air, -/area/station/science/cytology) +"xvp" = ( +/obj/structure/fence/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/underground/explored) "xvy" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/stripes/line{ @@ -78596,10 +80815,32 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"xvO" = ( -/obj/structure/girder, +"xvE" = ( +/obj/item/toy/snowball{ + pixel_x = 6; + pixel_y = 5 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"xvI" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) +"xvN" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 6 + }, +/obj/structure/sign/departments/botany/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) +"xvU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/warning/electric_shock/directional/north, /turf/open/floor/plating, -/area/mine/eva/lower) +/area/station/maintenance/aft/lesser) "xvZ" = ( /obj/machinery/space_heater, /turf/open/floor/plating, @@ -78609,10 +80850,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"xwd" = ( -/obj/structure/stairs/east, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "xwf" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -78620,6 +80857,18 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"xwi" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "xwm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/green{ @@ -78633,6 +80882,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/storage) +"xwq" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "xwr" = ( /obj/structure/rack, /obj/item/clothing/suit/hooded/wintercoat/eva{ @@ -78698,12 +80953,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"xwL" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/fitness) "xwM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78714,10 +80963,24 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"xxo" = ( -/obj/effect/turf_decal/weather/snow/corner, -/turf/open/floor/plating/snowed/coldroom, -/area/icemoon/underground/explored) +"xxi" = ( +/obj/structure/rack, +/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/structure/sign/warning/no_smoking/circle/directional/west, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/medical/chem_storage) "xxs" = ( /obj/effect/turf_decal/bot_white, /obj/structure/reagent_dispensers/plumbed, @@ -78753,12 +81016,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"xxH" = ( -/obj/structure/railing/wooden_fence{ - dir = 8 - }, -/turf/open/misc/hay/icemoon, -/area/icemoon/underground/explored) "xxI" = ( /obj/machinery/airalarm/directional/north, /obj/item/kirbyplants/random, @@ -78777,19 +81034,6 @@ /obj/structure/flora/grass/brown/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"xxZ" = ( -/obj/structure/table, -/obj/item/book/manual/wiki/cytology{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/item/storage/box/swab{ - pixel_y = 7; - pixel_x = 7 - }, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) "xyc" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -78804,7 +81048,7 @@ /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ dir = 4; - id = "kanyewest"; + id = "rd_office_shutters"; name = "Privacy Shutters" }, /obj/structure/cable, @@ -78830,6 +81074,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/xenobiology) +"xyr" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "xyx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78871,11 +81121,13 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/engine, /area/station/science/genetics) -"xyG" = ( +"xyI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron/white, +/area/station/science/ordnance) "xyN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -78909,6 +81161,17 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/mess) +"xza" = ( +/obj/vehicle/ridden/wheelchair{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/end, +/obj/structure/sign/warning/no_smoking/circle/directional/west, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/directional/west, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron, +/area/station/medical/medbay/aft) "xzd" = ( /obj/machinery/camera/directional/east{ c_tag = "Library South" @@ -78923,6 +81186,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"xzk" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/storage/wallet{ + pixel_y = 5; + pixel_x = 3 + }, +/obj/item/newspaper, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "xzo" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -78961,14 +81234,6 @@ }, /turf/open/floor/iron/large, /area/station/hallway/secondary/entry) -"xAm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/atmos_control/nocontrol/incinerator{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) "xAn" = ( /turf/open/floor/iron/dark, /area/station/engineering/lobby) @@ -79001,6 +81266,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/textured, /area/station/security/prison/mess) +"xAY" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/sign/departments/court/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central/fore) "xBa" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical{ @@ -79011,15 +81283,36 @@ dir = 1 }, /area/station/science/explab) -"xBh" = ( -/obj/machinery/light/directional/north, -/obj/machinery/button/door/directional/north{ - id = "ceprivacy"; - name = "Privacy Shutters Control" +"xBf" = ( +/obj/item/book/manual/wiki/barman_recipes{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/rag, +/obj/structure/table/wood, +/obj/item/holosign_creator/robot_seat/bar{ + pixel_y = 6 }, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, /turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) +/area/station/service/bar) +"xBj" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/bar, +/obj/machinery/door/airlock{ + name = "Bar" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/bar) "xBn" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -79032,13 +81325,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/closed/wall/r_wall, /area/station/engineering/supermatter) -"xBs" = ( -/obj/machinery/status_display/ai/directional/west, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood/parquet, -/area/station/service/theater) "xBt" = ( /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 4 @@ -79066,24 +81352,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos/storage/gas) -"xBS" = ( -/obj/item/training_toolbox{ - pixel_y = 5 - }, -/obj/structure/table, -/obj/item/training_toolbox{ - pixel_y = -2 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Holodeck Control" - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/obj/machinery/status_display/evac/directional/east, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/iron, -/area/station/commons/fitness) "xBU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -79092,42 +81360,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"xBX" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Mix to Port" - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"xCa" = ( -/obj/effect/turf_decal/siding/wideplating_new/light{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/start/prisoner, -/turf/open/floor/iron/showroomfloor, -/area/station/security/prison/work) -"xCb" = ( -/obj/structure/table/wood, -/obj/item/folder/red, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/security/courtroom) -"xCh" = ( -/obj/machinery/button/door/directional/west{ - id = "xenobio5"; - name = "Xenobio Pen 5 Blast Door"; - req_access = list("xenobiology") - }, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) -"xCj" = ( -/obj/structure/sign/departments/holy, -/turf/closed/wall, -/area/station/service/chapel) "xCl" = ( /turf/open/floor/iron, /area/station/science/robotics/lab) @@ -79145,6 +81377,14 @@ }, /turf/open/floor/iron, /area/station/commons/dorms/laundry) +"xCs" = ( +/obj/structure/cable, +/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/structure/sign/departments/aisat/directional/east, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/storage_shared) "xCv" = ( /obj/machinery/computer/security, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -79183,6 +81423,11 @@ /obj/item/storage/pill_bottle/mannitol, /turf/open/floor/iron/white, /area/station/medical/cryo) +"xDa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/explab) "xDb" = ( /turf/closed/wall/r_wall, /area/station/medical/virology) @@ -79202,6 +81447,51 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/locker) +"xDj" = ( +/obj/effect/turf_decal/trimline/yellow/end{ + dir = 1 + }, +/obj/machinery/exodrone_launcher, +/obj/item/fuel_pellet, +/obj/effect/turf_decal/trimline/yellow/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/mid_joiner{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "drone_bay"; + name = "Shutter Control" + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/drone_bay) +"xDu" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Cargo Bay Receiving Dock" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/computer/cargo{ + dir = 4 + }, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor"; + name = "Loading Doors"; + pixel_y = -8; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor2"; + name = "Loading Doors"; + pixel_y = 8; + req_access = list("cargo") + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "xDw" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, @@ -79220,14 +81510,6 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron, /area/station/security/prison/workout) -"xDQ" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/fake_stairs/wood/directional/north, -/obj/effect/mapping_helpers/no_atoms_ontop, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) "xDU" = ( /obj/structure/table, /obj/effect/spawner/random/entertainment/drugs, @@ -79235,6 +81517,12 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/showroomfloor, /area/station/maintenance/department/medical/morgue) +"xDX" = ( +/obj/item/radio/intercom/directional/west, +/obj/machinery/chem_dispenser, +/obj/structure/sign/warning/chem_diamond/directional/north, +/turf/open/floor/glass/reinforced, +/area/station/medical/treatment_center) "xEb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/green/filled/warning{ @@ -79264,10 +81552,10 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/virology) -"xEt" = ( -/obj/structure/closet/bombcloset, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +"xEn" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "xEE" = ( /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, @@ -79289,53 +81577,36 @@ /obj/machinery/door/firedoor, /turf/open/floor/carpet/black, /area/station/security/prison/safe) -"xEJ" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Dormitory North" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/bluespace_vendor/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/dorms) -"xEL" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/disposal/bin, -/obj/structure/cable, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal/incinerator) -"xEP" = ( -/obj/structure/reagent_dispensers/plumbed{ - dir = 1; - name = "hydroponics reservoir" - }, -/obj/effect/turf_decal/delivery/white{ - color = "#307db9" +"xEV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/iron/dark/textured, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"xEQ" = ( -/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, -/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) "xEW" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/tile/purple/fourcorners, /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/mine/living_quarters) +"xEX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Apiary" + }, +/turf/open/floor/iron/dark/textured_half{ + dir = 1 + }, +/area/station/service/hydroponics) +"xFf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "xFm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -79343,6 +81614,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/brig/upper) +"xFn" = ( +/obj/structure/fence/cut/large{ + dir = 2 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "xFo" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -79357,14 +81634,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"xFz" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/turf_decal/siding/wood, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/service/bar) "xFB" = ( /obj/structure/table, /obj/item/tank/internals/emergency_oxygen/engi, @@ -79380,72 +81649,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage) -"xFG" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"xFM" = ( -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/machinery/suit_storage_unit/engine, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/engine_smes) -"xFT" = ( -/obj/effect/turf_decal/trimline/green/filled/corner, -/obj/effect/turf_decal/trimline/blue/filled/warning/corner, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/duct, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/rack, -/obj/item/clothing/accessory/armband/hydro{ - pixel_y = 4; - pixel_x = 2 - }, -/obj/item/clothing/accessory/armband/hydro, -/obj/item/toy/figure/botanist, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) -"xFU" = ( -/obj/structure/barricade/wooden, -/obj/structure/sign/warning/gas_mask/directional/south{ - desc = "A sign that warns of dangerous gasses in the air, instructing you to wear internals." - }, -/obj/structure/sign/warning/cold_temp/directional/north, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) -"xGh" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south{ - pixel_x = -28 - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) -"xGi" = ( -/obj/structure/table/glass, -/obj/item/seeds/glowshroom, -/obj/item/seeds/bamboo{ - pixel_y = 3; - pixel_x = 4 - }, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "xGp" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/left/directional/east{ @@ -79479,6 +81682,19 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining_station, /turf/open/floor/iron/smooth, /area/mine/eva) +"xGx" = ( +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/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/upper) +"xGA" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/science/server) "xGI" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{ dir = 4 @@ -79492,6 +81708,24 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/commons/storage/mining) +"xGK" = ( +/obj/machinery/computer/mecha{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south{ + c_tag = "Research Director's Office"; + network = list("ss13","rd") + }, +/obj/machinery/light/directional/south, +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/command/heads_quarters/rd) +"xGL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "xGM" = ( /obj/machinery/computer/atmos_control/carbon_tank{ dir = 8 @@ -79536,26 +81770,32 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron, /area/station/security/brig/upper) -"xHv" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/janitor_supplies, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) -"xHE" = ( -/obj/structure/stairs/east, -/turf/open/floor/plating, -/area/station/security/brig) -"xHY" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"xHr" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"xHx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/recharge_station, /turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat/maint) -"xIh" = ( -/obj/effect/spawner/random/structure/tank_holder, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/mine/eva/lower) +"xId" = ( +/obj/structure/rack, +/obj/item/clothing/suit/hooded/wintercoat/eva{ + pixel_y = 9 + }, +/obj/item/clothing/shoes/winterboots/ice_boots/eva{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/effect/turf_decal/delivery/red, +/obj/item/clothing/gloves/color/grey/protects_cold, +/obj/item/clothing/mask/gas, +/turf/open/floor/iron/textured, +/area/station/ai_monitored/command/storage/eva) "xIk" = ( /obj/structure/chair/comfy{ dir = 4 @@ -79598,6 +81838,15 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/science/server) +"xIO" = ( +/obj/machinery/light/small/dim/directional/east, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/stairs/medium{ + dir = 1 + }, +/area/station/commons/lounge) "xIS" = ( /obj/item/radio/intercom/directional/east, /obj/effect/turf_decal/tile/blue, @@ -79611,17 +81860,24 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"xJi" = ( -/obj/machinery/portable_atmospherics/pipe_scrubber, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, -/turf/open/floor/iron/showroomfloor, -/area/station/engineering/atmos) "xJj" = ( /turf/open/floor/iron, /area/station/science/xenobiology) +"xJn" = ( +/obj/structure/disposaloutlet{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) +"xJv" = ( +/obj/structure/rack, +/obj/item/screwdriver, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "xJw" = ( /obj/machinery/camera/directional/south{ c_tag = "Atmospherics Project Room" @@ -79664,9 +81920,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"xJW" = ( -/turf/open/floor/iron/half, -/area/station/service/hydroponics) "xKb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/window/reinforced/spawner/directional/south, @@ -79693,6 +81946,12 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) +"xKk" = ( +/obj/structure/sign/plaques/kiddie/gameoflife{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/rd) "xKo" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -79702,25 +81961,27 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/upper) "xKq" = ( -/obj/effect/turf_decal/siding/wood{ +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ dir = 8 }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/stone, -/area/station/service/bar/atrium) +/turf/open/floor/iron, +/area/station/service/hydroponics) +"xKx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/corner/end/flip, +/obj/structure/railing/corner/end{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "xKJ" = ( /turf/closed/wall, /area/station/command/meeting_room) -"xKT" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Dormitory South" - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/commons/dorms) "xKX" = ( /obj/effect/turf_decal/trimline/dark_green/arrow_ccw{ dir = 6 @@ -79742,6 +82003,10 @@ "xLq" = ( /turf/open/floor/glass/reinforced, /area/station/science/ordnance/office) +"xLv" = ( +/obj/structure/stairs/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "xLF" = ( /obj/machinery/door/window/right/directional/east{ name = "Captain's Desk Door"; @@ -79751,6 +82016,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) +"xLJ" = ( +/obj/structure/rack, +/obj/item/mecha_parts/mecha_equipment/drill, +/turf/open/floor/iron/smooth, +/area/mine/mechbay) "xLK" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -79760,23 +82030,21 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"xLO" = ( -/obj/machinery/flasher/directional/east{ - id = "brigentry" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/station/security/brig/entrance) "xLS" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 9 }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"xLT" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "xLV" = ( /obj/machinery/washing_machine, /obj/effect/decal/cleanable/dirt, @@ -79801,28 +82069,6 @@ "xMq" = ( /turf/closed/mineral/random/snow, /area/icemoon/underground/explored) -"xMv" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) -"xMx" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Labor Camp External North"; - network = list("labor") - }, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) -"xMM" = ( -/obj/machinery/computer/operating{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/surgery/aft) "xMQ" = ( /obj/effect/mapping_helpers/ianbirthday, /turf/open/floor/carpet, @@ -79854,16 +82100,36 @@ /obj/structure/cable, /turf/open/floor/iron/dark/smooth_half, /area/station/ai_monitored/command/storage/eva) -"xNa" = ( -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) -"xNn" = ( +"xNh" = ( +/obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ - dir = 5 + dir = 4 }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id = "Cargo_Store_In"; + name = "Cargo Warehouse Shutters" + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + id = "Cargo_Store_In"; + name = "Warehouse Access" + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"xNs" = ( +/obj/structure/table/wood, +/obj/item/clothing/mask/fakemoustache, +/obj/item/cigarette/pipe, +/obj/item/clothing/glasses/monocle, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron/grimy, +/area/station/service/theater) "xNC" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -79871,11 +82137,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"xNE" = ( -/obj/structure/stairs/west, -/obj/structure/railing, -/turf/open/floor/iron/dark, -/area/station/service/chapel) "xNF" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Dorm"; @@ -79886,6 +82147,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) +"xNR" = ( +/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/smooth_large, +/area/station/science/cytology) "xOb" = ( /obj/effect/turf_decal/siding/white{ dir = 4 @@ -79895,65 +82162,33 @@ }, /turf/open/floor/iron/dark, /area/mine/mechbay) -"xOd" = ( -/obj/structure/minecart_rail{ - dir = 6 - }, -/obj/structure/cable, -/obj/effect/turf_decal/weather/snow/corner{ - dir = 10 - }, -/obj/structure/sign/warning/directional/west, +"xOc" = ( +/obj/machinery/light/cold/directional/west, /turf/open/floor/plating/snowed/coldroom, -/area/icemoon/underground/explored) -"xOi" = ( -/obj/machinery/door/window/left/directional/south{ - req_access = list("kitchen"); - name = "The Ice Box" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/siding/white, -/turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) -"xOl" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"xOE" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "Bar and Kitchen" - }, -/obj/structure/plasticflaps/opaque, -/obj/effect/turf_decal/delivery, -/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/textured, -/area/station/maintenance/starboard/fore) -"xOV" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ +"xOk" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"xOQ" = ( +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 +/obj/machinery/door/airlock/external/glass{ + name = "Garden Access" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/textured, /area/station/service/hydroponics) -"xPf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"xPs" = ( +/obj/effect/mapping_helpers/airlock/access/all/science/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external/glass{ + name = "Cytology External Airlock" }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/turf/open/floor/iron/smooth_large, +/area/station/science/cytology) "xPu" = ( /obj/machinery/light/directional/east, /turf/open/misc/asteroid/snow/icemoon, @@ -80027,8 +82262,38 @@ }, /obj/machinery/light/small/directional/east, /obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/east, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"xQi" = ( +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/minecart_rail/railbreak{ + dir = 4 + }, +/obj/structure/closet/crate/miningcar{ + name = "delivery cart"; + desc = "Used for quick transit of fresh produce to the kitchen. Just give it a shove." + }, +/obj/item/storage/bag/plants, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"xQj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/commons/lounge) "xQm" = ( /obj/machinery/airalarm/directional/west, /obj/structure/closet/secure_closet/freezer/fridge/all_access, @@ -80042,10 +82307,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs/auxiliary) -"xQu" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) "xQB" = ( /obj/effect/spawner/random/clothing/costume, /obj/structure/rack, @@ -80072,27 +82333,6 @@ /obj/structure/railing, /turf/open/floor/iron, /area/mine/production) -"xQS" = ( -/obj/effect/turf_decal/siding/white/end{ - dir = 8 - }, -/obj/structure/table, -/obj/item/reagent_containers/cup/bowl{ - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/bowl{ - pixel_y = 8; - pixel_x = 3 - }, -/obj/item/food/grown/eggplant{ - pixel_y = 5; - pixel_x = 5 - }, -/obj/item/food/grown/mushroom/chanterelle{ - pixel_y = 3 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "xQT" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, @@ -80102,6 +82342,20 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"xRv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) "xRw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -80110,13 +82364,6 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"xRF" = ( -/obj/structure/bodycontainer/morgue{ - dir = 8 - }, -/obj/machinery/light/dim/directional/south, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "xRI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -80134,6 +82381,11 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"xSg" = ( +/obj/structure/cable, +/obj/structure/sign/warning/test_chamber/directional/north, +/turf/open/floor/iron, +/area/station/science/explab) "xSl" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -80151,40 +82403,36 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/security/brig) -"xSu" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "xSv" = ( /obj/structure/closet/firecloset, /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron/dark, /area/station/engineering/lobby) -"xSw" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/sign/warning/secure_area/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/upper) +"xSx" = ( +/obj/structure/closet/secure_closet/chemical, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white, +/area/station/maintenance/port/fore) "xSA" = ( /turf/open/floor/wood, /area/station/service/lawoffice) +"xSE" = ( +/obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "xSL" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, /turf/open/floor/iron/large, /area/station/hallway/primary/port) -"xTi" = ( -/obj/effect/landmark/start/clown, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/grimy, -/area/station/service/theater) "xTp" = ( /obj/machinery/camera/directional/south{ c_tag = "Solar Maintenance - North East" @@ -80206,16 +82454,27 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"xTI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ +"xTN" = ( +/obj/effect/turf_decal/siding/thinplating/dark/corner{ dir = 4 }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/commons/fitness) +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/warm/directional/south, +/obj/structure/sign/poster/contraband/lizard/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "xTQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -80249,6 +82508,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"xUd" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/fluff/fokoff_sign, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) "xUe" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -80259,6 +82524,14 @@ }, /turf/open/floor/plating, /area/station/medical/morgue) +"xUg" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "xUk" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -80266,14 +82539,6 @@ }, /turf/open/openspace, /area/station/science/ordnance/office) -"xUt" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) -"xUw" = ( -/obj/structure/sign/departments/maint/directional/west, -/turf/open/floor/plating/snowed/smoothed/icemoon, -/area/icemoon/underground/explored) "xUF" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -80304,10 +82569,6 @@ }, /turf/open/floor/iron, /area/station/engineering/engine_smes) -"xUR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood, -/area/station/security/courtroom) "xUS" = ( /obj/structure/rack, /obj/item/pickaxe{ @@ -80316,12 +82577,11 @@ /obj/item/shovel{ pixel_x = -5 }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, /turf/open/floor/iron, /area/station/cargo/miningdock) -"xUT" = ( -/obj/structure/chair/stool/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "xUU" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue, @@ -80336,21 +82596,57 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) +"xUW" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/maintenance/aft/greater) "xVc" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Unit 1" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/textured, -/area/station/commons/toilet) +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron, +/area/station/command/bridge) "xVf" = ( /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"xVo" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bowl{ + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "xVq" = ( /obj/machinery/light/directional/north, +/obj/machinery/newscaster/directional/north, /turf/open/floor/wood, /area/station/command/meeting_room) +"xVv" = ( +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/purple, +/obj/machinery/camera/directional/south{ + c_tag = "Starboard Primary Hallway Center" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) +"xVB" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "xVG" = ( /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) @@ -80379,15 +82675,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"xVX" = ( -/obj/structure/closet/crate, -/obj/machinery/light/small/directional/south, -/obj/structure/sign/warning/cold_temp/directional/south, -/obj/structure/sign/warning/xeno_mining{ - pixel_x = 29 - }, -/turf/open/floor/iron/smooth, -/area/mine/eva/lower) "xVZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -80399,11 +82686,32 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/station/security/warden) +"xWk" = ( +/obj/machinery/biogenerator, +/obj/machinery/door/window/left/directional/south{ + name = "Biogenerator Access"; + req_access = list("hydroponics") + }, +/obj/effect/turf_decal/tile/green/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "xWo" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"xWr" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Service - Electrical Maintenace Upper" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/starboard/fore) "xWA" = ( /obj/structure/table, /obj/item/plate, @@ -80413,16 +82721,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"xWI" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchencounter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white/smooth_large, -/area/station/service/kitchen) "xWM" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -80435,8 +82733,8 @@ /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) "xWT" = ( -/obj/machinery/firealarm/directional/south, /obj/structure/closet/crate/freezer/surplus_limbs, +/obj/machinery/light_switch/directional/south, /turf/open/floor/iron/white, /area/station/medical/cryo) "xWU" = ( @@ -80496,13 +82794,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"xXE" = ( -/obj/structure/chair/pew{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/chapel, -/area/station/service/chapel) "xXQ" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -80512,28 +82803,11 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) -"xXU" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Library Art Gallery" - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/spawner/random/structure/table_fancy, -/obj/machinery/light/blacklight/directional/north, -/obj/structure/sign/painting/large/library{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/service/library) -"xXV" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) +"xYg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "xYj" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -80544,19 +82818,13 @@ dir = 10 }, /area/station/science/research) -"xYr" = ( -/obj/machinery/mineral/stacking_unit_console{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/machinery/camera/directional/west{ - c_tag = "Disposals" +"xYt" = ( +/obj/machinery/atmospherics/components/unary/passive_vent, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 9 }, -/turf/open/floor/iron/dark, -/area/station/maintenance/disposal) +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "xYw" = ( /obj/structure/flora/bush/leavy/style_random, /turf/open/floor/grass, @@ -80575,6 +82843,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"xYQ" = ( +/obj/structure/marker_beacon/burgundy{ + name = "landing marker" + }, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"xYS" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south{ + pixel_x = -28 + }, +/obj/effect/turf_decal/tile/dark/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "xYT" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -80584,19 +82872,37 @@ /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, /turf/open/floor/iron/smooth, /area/mine/eva) -"xZg" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/security/prison/safe) "xZl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /turf/open/floor/iron/dark/smooth_large, /area/station/engineering/main) +"xZq" = ( +/obj/structure/marker_beacon/cerulean, +/obj/effect/mapping_helpers/no_atoms_ontop, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/nospawn) +"xZv" = ( +/obj/machinery/status_display/ai/directional/east, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) +"xZy" = ( +/obj/structure/stairs/east, +/obj/effect/turf_decal/trimline/neutral/line, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/mix) "xZA" = ( /turf/open/floor/iron/checker, /area/station/science/lab) +"xZS" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/obj/item/reagent_containers/cup/bucket, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "xZW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -80609,13 +82915,6 @@ /area/station/medical/psychology) "xZX" = ( /obj/machinery/firealarm/directional/east, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/folder/yellow, -/obj/item/pen, /turf/open/floor/iron, /area/station/cargo/miningdock) "yab" = ( @@ -80644,10 +82943,20 @@ }, /turf/open/floor/plating/elevatorshaft, /area/mine/storage) -"yap" = ( -/obj/structure/stairs/north, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) +"yan" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/fourcorners, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "yar" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; @@ -80690,21 +82999,24 @@ /obj/structure/cable, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/command/storage/eva) +"yaF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/station/hallway/primary/central) "yaG" = ( /obj/effect/landmark/navigate_destination/chapel, /turf/open/floor/iron/dark/side{ dir = 1 }, /area/station/hallway/primary/starboard) -"yaJ" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "yaL" = ( /turf/closed/wall/r_wall, /area/station/engineering/engine_smes) @@ -80719,21 +83031,19 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/mess) -"ybe" = ( -/obj/structure/rack, -/obj/item/soap{ - pixel_y = -2 +"ybb" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/camera/directional/south{ - c_tag = "Ordnance Lower Mix Lab"; - network = list("ss13","rd") +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 }, -/turf/open/floor/iron/smooth_large, -/area/station/science/cytology) +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "ybf" = ( /obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/box, /turf/open/floor/iron/dark, /area/station/science/ordnance/office) "ybq" = ( @@ -80746,15 +83056,6 @@ dir = 4 }, /area/station/engineering/transit_tube) -"ybr" = ( -/obj/structure/bookcase{ - name = "Forbidden Knowledge" - }, -/obj/structure/sign/painting/large/library_private{ - dir = 1 - }, -/turf/open/floor/engine/cult, -/area/station/service/library) "ybu" = ( /obj/structure/chair/stool/directional/north, /turf/open/floor/wood, @@ -80770,6 +83071,17 @@ /obj/effect/decal/cleanable/insectguts, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"ybC" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/closet/emcloset, +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/virology) "ybE" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -80781,11 +83093,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"ybF" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/plating, -/area/station/maintenance/disposal/incinerator) "ybI" = ( /obj/structure/bed/dogbed/ian, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -80815,6 +83122,12 @@ "ybQ" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/command/nuke_storage) +"ybY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "yca" = ( /obj/machinery/door/airlock/maintenance{ name = "Mining Station Maintenance" @@ -80850,18 +83163,14 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/engineering/storage) -"ycE" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 +"ycO" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sink/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ycQ" = ( /obj/structure/closet/crate, /obj/effect/spawner/random/maintenance, @@ -80907,6 +83216,14 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ydk" = ( +/obj/machinery/computer/security/mining, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/structure/sign/nanotrasen{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "ydt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -80921,12 +83238,6 @@ dir = 1 }, /area/mine/eva/lower) -"ydv" = ( -/obj/structure/chair/stool/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/stone, -/area/station/commons/lounge) "ydA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, @@ -80936,17 +83247,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/chapel) -"ydG" = ( -/obj/machinery/status_display/ai/directional/east, -/obj/structure/chair/sofa/left/brown, -/turf/open/floor/wood/large, -/area/station/commons/lounge) -"ydH" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/glass, -/obj/structure/sign/warning/no_smoking/circle/directional/west, -/turf/open/floor/plating/icemoon, -/area/station/maintenance/port/lesser) "ydI" = ( /turf/closed/wall/r_wall, /area/station/hallway/secondary/entry) @@ -80957,11 +83257,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"ydT" = ( -/obj/machinery/bluespace_vendor/directional/north, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "yef" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/suit_storage_unit/industrial/loader, @@ -81018,6 +83313,35 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/service/library) +"yfa" = ( +/obj/structure/sink/directional/west, +/obj/structure/cable, +/obj/machinery/button/door/directional/east{ + id = "xenobio10"; + name = "Xenobio Pen 10 Blast DOors"; + req_access = list("xenobiology") + }, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) +"yfg" = ( +/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/railing, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) +"yfs" = ( +/obj/structure/cable, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/structure/minecart_rail{ + dir = 1 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "yfz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -81029,26 +83353,27 @@ /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"yfS" = ( -/obj/structure/table, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) -"yfT" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/turf/open/floor/plating, -/area/station/ai_monitored/turret_protected/aisat/maint) -"yfY" = ( -/obj/machinery/skill_station, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/station/service/library) +"yfW" = ( +/obj/structure/fence/post{ + dir = 8 + }, +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "ygd" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"ygf" = ( +/obj/structure/bookcase{ + name = "Forbidden Knowledge" + }, +/obj/structure/sign/painting/library_private{ + pixel_x = -32 + }, +/turf/open/floor/engine/cult, +/area/station/service/library) "ygk" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -81056,6 +83381,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"ygl" = ( +/turf/open/floor/plating, +/area/station/engineering/atmos) +"ygm" = ( +/obj/structure/closet/emcloset, +/obj/structure/sign/warning/electric_shock/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "ygv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -81063,10 +83396,10 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/command/gateway) -"ygy" = ( -/obj/effect/landmark/start/clown, -/turf/open/floor/wood, -/area/station/commons/lounge) +"ygA" = ( +/obj/machinery/light/small/directional/south, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored/graveyard) "ygB" = ( /turf/closed/wall, /area/station/commons/dorms) @@ -81078,6 +83411,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"ygL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/fore) "ygM" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -81086,50 +83425,49 @@ }, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) -"ygP" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/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 = 1 +"ygS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, +/obj/structure/rack, +/obj/item/tank/internals/oxygen, +/obj/item/extinguisher, +/obj/item/clothing/suit/utility/fire/firefighter, +/obj/item/clothing/head/utility/hardhat/red, +/obj/item/clothing/mask/gas, +/obj/item/clothing/glasses/meson, +/obj/machinery/light/small/directional/north, /turf/open/floor/plating, -/area/station/maintenance/starboard/fore) +/area/station/maintenance/fore) "yhe" = ( /obj/structure/cable, /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/cargo/sorting) +"yhn" = ( +/obj/structure/rack, +/obj/item/crowbar, +/obj/item/picket_sign, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "yhw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer3, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat_interior) -"yhC" = ( -/obj/structure/sign/warning/cold_temp/directional/east, -/turf/open/floor/plating, -/area/station/engineering/main) -"yhL" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/portable_atmospherics/canister, -/turf/open/floor/plating, -/area/station/maintenance/fore) "yhU" = ( /obj/structure/chair/stool/directional/north, /turf/open/floor/iron, /area/station/security/prison/work) -"yhV" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Bar Maintenance" +"yhY" = ( +/obj/structure/fence/end{ + dir = 2 }, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/service/bar, -/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/bar/backroom) +/turf/open/floor/plating/snowed/smoothed/icemoon, +/area/icemoon/surface/outdoors/nospawn) "yia" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -81137,6 +83475,10 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/showroomfloor, /area/station/security/prison/toilet) +"yib" = ( +/obj/structure/flora/rock/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored/rivers/deep/shoreline) "yiv" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron, @@ -81167,6 +83509,10 @@ "yiL" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory) +"yiR" = ( +/obj/structure/sign/warning/cold_temp/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "yjh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -81178,19 +83524,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"yjo" = ( -/obj/structure/sign/warning/directional/south, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/surface/outdoors/nospawn) -"yjr" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/hallway/secondary/service) "yju" = ( /obj/structure/table, /obj/effect/spawner/random/maintenance/two, @@ -81205,11 +83538,6 @@ }, /turf/open/floor/plating, /area/station/science/xenobiology) -"yjF" = ( -/obj/structure/sink/directional/east, -/obj/structure/mirror/directional/west, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "yjV" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -81225,6 +83553,16 @@ dir = 4 }, /area/station/hallway/secondary/entry) +"ykd" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ykw" = ( /turf/closed/wall/r_wall, /area/station/security/processing) @@ -81233,10 +83571,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/fore) -"ykE" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/office) "ykG" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, @@ -81255,12 +83589,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"ylt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/pink/visible, -/obj/structure/sign/poster/official/safety_internals/directional/east, -/obj/structure/sign/poster/official/safety_internals/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +"yld" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/sign/departments/cargo/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "ylz" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/trimline/neutral/warning, @@ -81275,16 +83610,16 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/dark/textured, /area/station/security/prison/workout) -"ylF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Central Access" +"ylL" = ( +/obj/machinery/flasher/directional/north{ + id = "Cell 3" }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/obj/structure/bed{ + dir = 1; + pixel_x = -2 }, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) +/turf/open/floor/iron/smooth, +/area/station/security/brig) "ylM" = ( /obj/machinery/light/directional/south, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ @@ -81299,13 +83634,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"ylQ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cytology Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/science/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "ylU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -81322,23 +83650,23 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"ymb" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/north, -/obj/machinery/camera{ - c_tag = "Mining B-2 Hallway"; - dir = 9 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ +"ymf" = ( +/obj/effect/turf_decal/siding/wood/end{ dir = 1 }, -/turf/open/floor/iron/dark/side{ - dir = 1 +/obj/item/kirbyplants/organic/plant11, +/turf/open/floor/stone, +/area/station/service/bar/atrium) +"ymj" = ( +/obj/structure/chair{ + dir = 8 }, -/area/mine/eva/lower) +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/structure/sign/departments/evac/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) (1,1,1) = {" oSU @@ -97685,14 +100013,14 @@ sYA ghx ghx ghx -vXO +ohO hMz ghx -hMz +ghx psb +dmw scw -scw -jSy +iDt xMq xMq xMq @@ -97945,13 +100273,13 @@ ghx isU ghx ghx -hMz +ghx hUy dZS xuo scw iDt -qau +bNC thA thA thA @@ -98208,8 +100536,8 @@ stA xuo xuo xuo -nqv -thA +qau +dMn thA thA thA @@ -98963,7 +101291,7 @@ ghx ghx ghx ndA -mSH +pWp ngM kgN wDU @@ -98971,7 +101299,7 @@ sKo sKo sKo wDU -kUP +tdI okH qSq ghx @@ -99218,13 +101546,13 @@ ghx ghx ghx cpt -dLH -kIX +wPG +ckL xuo xuo qlU wDU -roa +hDe wRN qPX wDU @@ -99474,8 +101802,8 @@ ghx ghx ghx iDt -aNc -xuo +ewo +eIv xuo xuo xuo @@ -99731,16 +102059,16 @@ thA thA thA iDt -sxe +jRi xuo xuo qJT wDU tbX qmt -nAa +mct qLQ -vBg +dtR qmt tbX wDU @@ -99993,13 +102321,13 @@ xuo xuo xuo dBY -moc +mnm tGi kBX fdp qiF dBY -moc +mnm tGi xuo xuo @@ -100245,16 +102573,16 @@ thA thA thA iDt -sxe +jRi xuo -qJT +coe wDU qmt qmt qmt -jpi +uJd tYz -gle +soq qmt qmt qmt @@ -100263,7 +102591,7 @@ tbX tbX wDU wDU -ghx +etz ghx ghx ghx @@ -100504,7 +102832,7 @@ thA iDt psb rxz -qlU +gFX wDU aNw qmt @@ -100759,10 +103087,10 @@ thA thA thA iDt -xuo +txm wDU wDU -qmt +ijV nfr kLa giV @@ -100771,7 +103099,7 @@ eVa gSO tmE qmt -iBd +nbs chO doM ezl @@ -101016,14 +103344,14 @@ thA thA thA iDt -xuo +txm wDU krn -xvO -nfr +rFh qmt qmt -ymb +qmt +nGY eVa rnx fYH @@ -101273,19 +103601,19 @@ thA thA thA iDt -xuo +txm wDU uqz kTF -nfr qmt -iVm +pVg +ubG xlA eVa gSO uPt qmt -aQy +opy fLC dLe wzl @@ -101535,9 +103863,9 @@ qmt qmt kLa qmt -qmt -sAa -qKk +vlF +kyM +vzG wbH lIR uUT @@ -101548,7 +103876,7 @@ uUT uUT uUT wDU -scw +mrk ghx ghx thA @@ -101791,10 +104119,10 @@ wDU btB gfw nfr -igq qmt qmt -gSK +qmt +bcs tYz vTb rmB @@ -102013,10 +104341,10 @@ ghx ghx ghx psb -fSd +iYq hUK -gqG -thA +psb +lGf thA thA thA @@ -102047,7 +104375,7 @@ iDt wDU uqz bRC -nfr +tIM jAu qmt ofz @@ -102303,7 +104631,7 @@ thA iDt wDU ljP -uqz +xHx bQN tnb qmt @@ -102824,13 +105152,13 @@ vfp niN eSY uyq -gdS +hDv uUT -bzJ +dPH srZ jla ebv -mXD +xLJ nUi scw iDt @@ -103004,7 +105332,7 @@ thA thA thA rfu -ghx +etz ghx ghx ghx @@ -103079,9 +105407,9 @@ dga scw dga niN -qqn +vxx uyq -xVX +bTM uUT uUT vlS @@ -103089,7 +105417,7 @@ hex uUT iwf iwf -wkV +xvp iDt iDt ghx @@ -103330,8 +105658,8 @@ thA ipf cCb iDt -mJZ -iDt +jai +wkB scw scw scw @@ -103340,14 +105668,14 @@ bfo sZO wDU iwf -cEh +oXF +dNA dNA -weg iwf lQw fWX -nqv -iDt +kLd +wkB iDt ghx thA @@ -103553,11 +105881,11 @@ thA thA thA xuo -wYp -odW +psb +mIe uWw psb -ghx +etz ghx ghx ghx @@ -103587,7 +105915,7 @@ thA thA thA iDt -rcY +aDG iDt scw scw @@ -103603,7 +105931,7 @@ gvc iwf unv wrV -qau +bNC iDt cCb ghx @@ -103844,7 +106172,7 @@ thA thA thA iDt -rcY +aDG iDt iDt iDt @@ -103859,8 +106187,8 @@ cPd hYP aro agI -scw -qau +iDt +bNC iDt iDt thA @@ -104101,7 +106429,7 @@ thA thA thA iDt -rcY +bNC iDt iDt iDt @@ -104110,13 +106438,13 @@ scw scw scw scw -mJZ -iDt +jai +wkB scw scw -rcY +jai +iDt iDt -scw qau iDt iDt @@ -104358,23 +106686,23 @@ thA thA thA iDt -syw -kNC -kNC -kNC -kNC -kNC -kNC -ork -tej -gIl +gsd +jTf +aKb +aKb +aKb +aKb +aKb +nvB +jTf +kOt scw iDt iDt -syw -tej -tej -gIl +gsd +jTf +syG +pCG iDt thA thA @@ -104806,7 +107134,7 @@ uOb rfu omJ rfu -pjj +kOc daf kmH oBz @@ -104981,146 +107309,119 @@ oSU oSU oSU oSU -oSU -oSU -"} -(93,1,1) = {" -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -dhq -ghx -ghx -ghx -ghx -ghx -dhq -dhq -dhq -dhq -iZz -iZz -iZz -iZz -ghx -ghx -ghx -ghx -ghx -ghx -ghx -ghx -iDt -iDt -xMq -xMq -thA -thA -thA -thA -thA -thA -uOb -nDV -amx -fXO -lBR -nhg -gnR -lBR -nhg -qrq -lBR -kIo -hap -rfu -pjj -daf -daf -xuo -oBz -ena -ghx -ghx -ghx -ghx -ghx -ghx -ghx -ghx -ghx -ghx -ghx -thA -thA -thA -thA -thA -ghx -ghx -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU -oSU +oSU +oSU +"} +(93,1,1) = {" +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +dhq +ghx +ghx +ghx +ghx +ghx +dhq +dhq +dhq +dhq +iZz +iZz +iZz +iZz +ghx +ghx +ghx +ghx +ghx +ghx +ghx +ghx +iDt +iDt +xMq +xMq +thA +thA +thA +thA +thA +thA +uOb +nDV +amx +fXO +lBR +nhg +scb +lBR +nhg +mbe +lBR +kIo +hap +rfu +pjj +daf +daf +xuo +oBz +ena +ghx +ghx +ghx +ghx +ghx +ghx +ghx +ghx +ghx +ghx +ghx +thA +thA +thA +thA +thA +ghx +ghx +thA +thA +thA +thA +thA +thA +thA thA thA thA @@ -105128,6 +107429,32 @@ thA thA thA thA +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +oSU +thA +thA +thA +thA +thA +thA thA thA thA @@ -105137,6 +107464,7 @@ thA thA thA thA +iYD thA thA iDt @@ -105580,7 +107908,7 @@ rfu ooW ooW rfu -xuo +jrv xuo xlq ghx @@ -106082,7 +108410,7 @@ ifZ amx ddz lBR -fIb +vzp fnj egz hsr @@ -106602,7 +108930,7 @@ kqh kqh ttD nNn -sxT +urm tKB foO bdo @@ -106843,11 +109171,11 @@ ghx ghx ghx ghx -gBl +fIt uSb uSb uSb -gBl +fIt uOb uOb lBR @@ -106869,7 +109197,7 @@ kIi rfu rfu rfu -ghx +akn ghx ghx ghx @@ -107107,13 +109435,13 @@ tWK tWK tWK xhK -tsK +tnD jGg vVH -krV +gkN ogL jZI -duI +aHw vVH vVH vVH @@ -107122,9 +109450,9 @@ nNn gzV nNn nNn -axb -tCV -cFc +evP +bVs +dgx mJX ghx ghx @@ -107138,8 +109466,8 @@ ghx ghx ghx ghx -lcA -ghx +psb +etz thA thA thA @@ -107367,10 +109695,10 @@ xby dSm hMS vVH -uoS +nGo wPg fHg -eek +mkb vVH fps usS @@ -107636,7 +109964,7 @@ vUs kqR hjQ nNn -scQ +eCg aJu ong mJX @@ -108156,17 +110484,17 @@ puc kGP sEC dbH +akn ghx ghx ghx ghx ghx ghx -ghx -lcA psb psb -lcA +psb +psb thA thA thA @@ -108390,9 +110718,9 @@ ghx ghx ghx eZz -efi +uOs xhK -nCQ +nGd swf vVH jli @@ -108420,7 +110748,7 @@ ghx ghx ghx ghx -rcY +pJm iDt thA thA @@ -108647,7 +110975,7 @@ ghx ghx ghx iDt -nbP +fgN xhK ikb swf @@ -108677,7 +111005,7 @@ ghx ghx ghx ghx -rcY +pJm iDt thA thA @@ -108912,9 +111240,9 @@ vVH vVH dZW fHg -lJS -bol -oSD +ayS +aze +lsn ldH xQm yaZ @@ -108934,8 +111262,8 @@ ghx ghx ghx ghx -lcA -iDt +psb +mbJ thA thA thA @@ -109169,9 +111497,9 @@ nId myQ sby fHg -bol -bol -oSD +aEY +oad +gAV ldH qiJ qTs @@ -110191,7 +112519,7 @@ ghx ghx axF dcw -fGI +sKT sSl etw lXJ @@ -110212,7 +112540,7 @@ iJr vSK kse dbH -ghx +akn ghx ghx ghx @@ -110477,7 +112805,7 @@ ghx ghx ghx psb -iDt +mbJ thA thA thA @@ -110985,7 +113313,7 @@ psb psb psb fIt -ghx +etz ghx ghx ghx @@ -111192,10 +113520,10 @@ dhq dhq dhq dhq -dhq -dhq -dhq -dhq +iZz +iZz +iZz +iZz dhq dhq dhq @@ -111447,8 +113775,8 @@ dhq dhq dhq dhq -iDt -iDt +iZz +iZz iDt iDt scw @@ -111463,8 +113791,8 @@ iDt scw scw iDt -iDt -ghx +fIt +tvk ghx ghx ghx @@ -111476,7 +113804,7 @@ ghx ghx ghx dcw -bDd +cdp hBF owf bkX @@ -111703,9 +114031,9 @@ dhq dhq dhq dhq -iDt -iDt -iDt +iZz +iZz +iZz scw scw scw @@ -111720,7 +114048,7 @@ scw scw scw scw -iDt +iwV ghx ghx ghx @@ -111960,9 +114288,9 @@ dhq dhq dhq dhq -iDt -iDt -iDt +iZz +iZz +iZz scw scw scw @@ -111977,7 +114305,7 @@ iDt iDt iDt iDt -scw +gem ghx ghx ghx @@ -112001,7 +114329,7 @@ thA uPk jYj uAE -dKS +eni dbH dbH dbH @@ -112013,7 +114341,7 @@ psb psb psb fIt -ghx +etz ghx ghx ghx @@ -112215,11 +114543,11 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz scw iDt scw @@ -112234,7 +114562,7 @@ scw scw scw scw -iDt +iwV ghx ghx ghx @@ -112471,12 +114799,12 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz +iZz iDt iDt scw @@ -112491,7 +114819,7 @@ scw scw scw iDt -iDt +iwV ghx ghx ghx @@ -112728,12 +115056,12 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz +iZz scw iDt scw @@ -112748,7 +115076,7 @@ scw scw scw scw -iDt +iwV ghx ghx ghx @@ -112985,12 +115313,12 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +fKw +iZz iDt iDt scw @@ -113005,7 +115333,7 @@ scw scw iDt scw -iDt +iwV ghx ghx ghx @@ -113242,12 +115570,12 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz +iZz scw iDt scw @@ -113262,7 +115590,7 @@ scw iDt scw iDt -iDt +iwV ghx ghx ghx @@ -113499,12 +115827,12 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +fKw +iZz scw scw iDt @@ -113519,7 +115847,7 @@ scw scw iDt scw -scw +gem ghx ghx ghx @@ -113545,7 +115873,7 @@ oXd bJp qdl uPk -scw +ltH ghx ghx ghx @@ -113756,12 +116084,12 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +fKw +iZz iDt scw iDt @@ -113776,7 +116104,7 @@ scw scw iDt iDt -iDt +iwV ghx ghx ghx @@ -113802,7 +116130,7 @@ uPk uPk uPk uPk -ghx +etz ghx ghx ghx @@ -114013,12 +116341,12 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz +iZz vjh dLN dLN @@ -114031,10 +116359,10 @@ vjh vjh uPl vjh -ghx -ghx -ghx -ghx +hMv +qxN +fIt +tvk ghx ghx ghx @@ -114270,12 +116598,12 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +fKw +fKw +iZz vjh dqx oDg @@ -114288,7 +116616,7 @@ wAQ njJ kcf vjh -ghx +scw ghx ghx ghx @@ -114301,7 +116629,7 @@ iDt iDt iDt iDt -xMq +iDt xMq thA thA @@ -114527,12 +116855,12 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz +iZz vjh szu hdV @@ -114558,7 +116886,7 @@ iDt iDt iDt iDt -xMq +iDt xMq xMq thA @@ -114784,9 +117112,9 @@ dhq dhq dhq dhq -iDt -iDt -iDt +iZz +iZz +iZz dLN dLN dLN @@ -114798,8 +117126,8 @@ dqx njJ cVD njJ -eCz -oFp +hpl +dqx dqx vjh nTO @@ -114811,12 +117139,12 @@ eQT eQT eQT nTO +kXf +iDt iDt iDt iDt iDt -xMq -xMq xMq xMq thA @@ -115040,10 +117368,10 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt +iZz +iZz +iZz +fKw dLN wxg ipd @@ -115068,14 +117396,14 @@ kAG pdc xzp iSf -dBw +faV +iDt +iDt +iDt +iDt iDt iDt iDt -xMq -xMq -xMq -xMq xMq thA thA @@ -115296,11 +117624,11 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -xMx +iZz +iZz +iZz +fKw +oIv vjh pRZ uYj @@ -115327,11 +117655,11 @@ jvM nTO nTO nTO -nJm +fqG +iDt +iDt +iDt iDt -xMq -xMq -xMq xMq xMq xMq @@ -115551,13 +117879,13 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt -lCM +iZz +iZz +iZz +iZz +iZz +fKw +lxY vjh aYQ bLL @@ -115586,8 +117914,8 @@ tmB kCH iDt iDt -xMq -xMq +iDt +iDt xMq xMq thA @@ -115807,11 +118135,11 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz dLN dLN dLN @@ -115823,10 +118151,10 @@ njJ bEi rVX dqx -pSn -cCF -iAA -wDs +qJC +pzx +bqz +tXM vjh vjh vjh @@ -115841,10 +118169,10 @@ aWV nTO nTO nTO +kXf iDt iDt xMq -xMq thA thA thA @@ -116064,17 +118392,17 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +fKw dLN bml msi njJ pDI -bxX +wdX wzn njJ mZJ @@ -116100,7 +118428,7 @@ cRE eQT iDt iDt -xMq +iDt xMq thA thA @@ -116321,26 +118649,26 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +fKw dLN uCk tAL njJ -lWy +mPp jlG rQx duS lmK rVX fez -lxn -bVY -whz -sbO +rqR +maM +aWo +ddK vjh drP czD @@ -116357,7 +118685,7 @@ rmv eQT iDt iDt -xMq +iDt xMq thA thA @@ -116578,11 +118906,11 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +fKw dLN sWo kmA @@ -116613,7 +118941,7 @@ iGj nTO nTO nTO -iDt +mbJ xMq xMq thA @@ -116835,11 +119163,11 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +fKw +iZz vjh sWo njJ @@ -117091,12 +119419,12 @@ dhq dhq dhq dhq -dhq -iDt -iDt -iDt -iDt -aVq +iZz +iZz +iZz +iZz +fKw +myW vjh sWo njJ @@ -117120,7 +119448,7 @@ eQT eQT eQT nTO -ghx +akn iDt nTO kJw @@ -117348,12 +119676,12 @@ dhq dhq dhq dhq -dhq -iDt -iDt -iDt -iDt -aVq +iZz +iZz +iZz +iZz +iZz +myW vjh mYi njJ @@ -117605,14 +119933,14 @@ dhq dhq dhq dhq -dhq -iDt -iDt -qXg +iZz +iZz +iZz +bqf vjh vjh vjh -fXP +nZC eQH hDK dqx @@ -117621,7 +119949,7 @@ dqx rXg njJ uTo -dqx +cCG njJ rKs hLk @@ -117641,7 +119969,7 @@ cpe cpe nTO nTO -iDt +mbJ xMq xMq thA @@ -117862,10 +120190,10 @@ dhq dhq dhq dhq -dhq -iDt -iDt -iDt +iZz +iZz +fKw +fKw aqa oDB nhT @@ -118119,10 +120447,10 @@ dhq dhq dhq dhq -dhq -iDt -iDt -qXg +iZz +iZz +iZz +bqf vjh vjh vjh @@ -118154,7 +120482,7 @@ nTO nTO nTO nTO -iDt +mbJ iDt xMq xMq @@ -118376,11 +120704,11 @@ dhq dhq dhq dhq -dhq -iDt -iDt -iDt -uEA +iZz +iZz +iZz +iZz +mbq dLN hlE dqx @@ -118392,7 +120720,7 @@ kpH dqx njJ isc -dqx +mEb njJ bsd fBs @@ -118634,10 +120962,10 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt +iZz +mBV +iZz +fKw dLN dqx dqx @@ -118670,7 +120998,7 @@ iDt iDt iDt iDt -xMq +iDt xMq thA thA @@ -118891,10 +121219,10 @@ dhq dhq dhq dhq -iDt -iDt -ssu -iDt +iZz +iZz +nxP +iZz dLN rbT mts @@ -118905,13 +121233,13 @@ njJ njJ wRK vjh -twb -pzD +oCo +dFR vjh vjh vjh vjh -ghx +etz ghx ghx ghx @@ -118927,7 +121255,7 @@ iDt iDt iDt iDt -xMq +iDt xMq thA thA @@ -119148,10 +121476,10 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt +iZz +iZz +mBV +iZz dLN rbT lLN @@ -119165,9 +121493,9 @@ vjh jmc qDD dLN -iDt -iDt -ghx +uqX +adA +etz ghx ghx ghx @@ -119184,7 +121512,7 @@ iDt iDt iDt iDt -xMq +iDt xMq xMq thA @@ -119405,10 +121733,10 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz dLN dLN dLN @@ -119422,8 +121750,8 @@ vjh dLN dLN dLN -iDt -iDt +fKw +mzl ghx ghx ghx @@ -119662,25 +121990,25 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -jjJ -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +fKw +iZz +iZz +iZz +iZz +oGJ +iZz +iZz +iZz +iZz +iZz +fKw +fKw +iZz +mzl ghx ghx ghx @@ -119692,9 +122020,9 @@ ghx ghx ghx iDt -xMq -xMq -xMq +iDt +iDt +iDt xMq xMq xMq @@ -119919,25 +122247,25 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +mzl ghx ghx ghx @@ -119949,7 +122277,7 @@ ghx ghx ghx iDt -xMq +iDt xMq xMq xMq @@ -120176,25 +122504,25 @@ dhq dhq dhq dhq -iDt -iDt +iZz +iZz dhq -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +mzl ghx ghx ghx @@ -120437,21 +122765,21 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +mzl ghx ghx ghx @@ -120694,21 +123022,21 @@ dhq dhq dhq dhq -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt -iDt +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +iZz +mzl ghx ghx ghx @@ -120828,7 +123156,7 @@ oSU szG szG iDt -daZ +tla iDt szG oSU @@ -120957,16 +123285,16 @@ dhq dhq dhq dhq +iZz +iZz +iZz +iZz +iZz dhq dhq dhq -dhq -dhq -dhq -dhq -dhq -dhq -ghx +adA +etz ghx ghx ghx @@ -128256,7 +130584,7 @@ iDt iDt iDt iDt -fIt +bwh oSU oSU oSU @@ -128507,13 +130835,13 @@ oSU oSU oSU xMq -cbu +wUm iDt iDt iDt iDt -iLP -fIt +gwW +bwh oSU oSU oSU @@ -128764,13 +131092,13 @@ oSU iDt iDt xMq -cbu +wUm iDt iDt iDt iDt mrI -fIt +bwh oSU oSU oSU @@ -129019,15 +131347,15 @@ oSU oSU iDt iDt -jZN -rcY +xYQ +aKb iDt iDt iDt iDt iDt scw -fIt +bwh oSU oSU oSU @@ -129282,9 +131610,9 @@ iDt iDt iDt iDt -qjs -fIt -fIt +hWz +bwh +bwh oSU oSU oSU @@ -129533,16 +131861,16 @@ oSU iDt iDt iDt -jZN -rcY +xYQ +pJm iDt iDt iDt iDt iDt iDt -fIt -fIt +bwh +bwh oSU oSU oSU @@ -129688,10 +132016,10 @@ dhq dhq dhq dhq -iZz -iZz -iZz -iZz +iDt +iDt +iDt +iDt ghx ghx ghx @@ -129799,8 +132127,8 @@ iDt iDt iDt iDt -fIt -fIt +bwh +bwh oSU oSU oSU @@ -129946,8 +132274,8 @@ dhq dhq dhq dhq -iZz -iZz +iDt +iDt ghx ghx ghx @@ -130057,7 +132385,7 @@ iDt iDt iDt iDt -fIt +bwh oSU oSU oSU @@ -130203,7 +132531,7 @@ dhq dhq dhq dhq -iZz +iDt ghx ghx ghx @@ -130313,6 +132641,8 @@ xMq xMq xMq xMq +iDt +iDt xMq xMq oSU @@ -130424,8 +132754,6 @@ oSU oSU oSU oSU -oSU -oSU "} (192,1,1) = {" dhq @@ -130571,11 +132899,11 @@ oSU oSU oSU oSU -oSU -oSU -oSU -oSU -oSU +iDt +scw +scw +scw +xMq oSU oSU oSU @@ -130829,11 +133157,11 @@ oSU oSU oSU oSU -oSU -oSU -oSU -oSU -oSU +iDt +scw +wme +scw +xMq oSU oSU oSU @@ -131086,11 +133414,11 @@ oSU oSU oSU oSU -oSU -oSU -oSU -oSU -oSU +xMq +iDt +scw +scw +xMq oSU oSU oSU @@ -131344,8 +133672,8 @@ oSU oSU oSU oSU -oSU -oSU +xMq +xMq oSU oSU oSU @@ -132764,8 +135092,8 @@ dhq dhq dhq dhq -iZz -iZz +iDt +iDt ghx ghx ghx @@ -133021,7 +135349,7 @@ dhq dhq dhq dhq -iZz +iDt ghx ghx ghx @@ -133278,7 +135606,7 @@ dhq dhq dhq dhq -iZz +iDt ghx ghx ghx @@ -133535,7 +135863,7 @@ dhq dhq dhq dhq -iZz +iDt ghx ghx ghx @@ -159372,7 +161700,7 @@ rex rNc icu rOB -rcx +dKk ksi sJH lwR @@ -159613,17 +161941,17 @@ thA thA thA thA -oif -eJf +gFX +pFv eJf eJf -keu +faL eJf eJf eJf lwR sJH -irM +gps veK tUC fjQ @@ -159632,10 +161960,10 @@ xuB jkn jkn iyE -ncO -vAj +qAP +cHA lwR -iDt +mbJ scw iDt iDt @@ -160146,7 +162474,7 @@ drD jkn jkn sEq -vZS +boU aez sEq scw @@ -160400,7 +162728,7 @@ sJH oLs xaV diV -ebK +uJi uzs sJH tUK @@ -161657,7 +163985,7 @@ thA thA thA thA -thA +lGf thA thA gjq @@ -161938,7 +164266,7 @@ gjq gjq gjq bOz -aVp +ouq icB sGE diV @@ -162170,8 +164498,8 @@ thA thA szG szG -oif -thA +gFX +lGf gjq gjq gjq @@ -163198,13 +165526,13 @@ szG szG myZ eJf -keu +faL eJf eJf eJf eJf -oif -szG +gFX +wjA gjq gjq gjq @@ -163460,14 +165788,14 @@ gjq gjq gjq gFX -szG +wjA szG gjq gjq gjq -mTW +ocS gjq -mTW +ocS gjq gjq gjq @@ -163697,14 +166025,14 @@ thA iLh jqj aiA -wVq +msu dcW kjt -mUz +wGZ kUU hSt tKq -sGM +fqM haD lrz iLh @@ -163736,24 +166064,24 @@ gjq gjq gjq gjq -keu +faL eJf cMk yep cMk eJf -keu +faL eJf eJf eJf eJf -keu +faL eJf eJf eJf eJf -oif -iDt +gFX +mbJ pfw thA thA @@ -163952,7 +166280,7 @@ thA thA thA iLh -gAd +tkT ukd iLh aBX @@ -163967,7 +166295,7 @@ iLh iLh iwS iwS -sbf +mbJ scw iDt scw @@ -164215,16 +166543,16 @@ ini dwo eKN oQt -ydH +hTI wUu xrs iLh vad -kMP +wjP wMw hoZ iwS -iDt +ixl iDt iDt iDt @@ -164235,7 +166563,7 @@ gjq gjq gjq gjq -mUf +daO aFG hZe xuo @@ -164469,14 +166797,14 @@ iLh hYb iLh iLh -fGJ +xvd nAg fkt oQt xrs ilD iLh -pog +hIW qPs xCr wds @@ -164499,14 +166827,14 @@ nia sjb hpM sjb -eJf +pFv eJf eJf uBy -gQe -gQe -gQe -nzG +avs +avs +avs +aGR eJf gjq gOU @@ -164718,7 +167046,7 @@ thA thA thA iDt -kcW +thA ivF ivF xUF @@ -164733,8 +167061,8 @@ iLh iLh iLh iLh -xkH -oeB +qPb +jSN qxI sTh qMo @@ -164743,27 +167071,27 @@ cCb iDt iDt scw -oif -eJf +gFX +pFv eJf -keu +faL eJf pfg sjb -khF +gRg oFZ -jVx +cew wQr kvf sjb gjq gjq gjq -mrI +bUS scw jAv scw -gem +kNC eJf gjq gOU @@ -164979,8 +167307,8 @@ iDt snd kkA erw -wrl -aOa +abQ +cGS uhb aSC cQi @@ -164989,13 +167317,13 @@ ivF sqb gVm iwS -iJM -dNl -qxI +wPJ +qVK +bpq qxI rVC qMo -iDt +scw iDt ijY iDt @@ -165007,7 +167335,7 @@ gjq gjq gjq sjb -sjx +xDj xgO rHk wQr @@ -165246,13 +167574,13 @@ ivF pcc fdX iwS -iJM -dNl -qxI +xdh +otf +bYR qxI coT qMo -iDt +scw iDt iDt iDt @@ -165267,8 +167595,8 @@ sjb qEu jIX sgV -vpl -tQE +cEl +rES vSi qLm qLm @@ -165276,7 +167604,7 @@ qLm vSi bie bie -vzI +cMk bie bie cMk @@ -165287,11 +167615,11 @@ cMk eJf eJf eJf -keu +faL eJf eJf -oif -pfw +gFX +rYA ebd iDt iDt @@ -165493,8 +167821,8 @@ scw snd hJp hby -czz -xYr +nxY +fHV jwB bIo nit @@ -165504,13 +167832,13 @@ iwS iwS iwS iwS -oqj -kTX +tiX +ogu iJL dwI qMo iDt -iDt +scw iDt iDt ebd @@ -165524,17 +167852,17 @@ cum mzr bgU quY -nbU +fvj vSi vSi vdb mzu rDn vSi -tKf -lkY +tEO +qDA kZu -qmT +bKE vpc kZu aYM @@ -165757,9 +168085,9 @@ tHX nit eZK ivF +smp +hkI ktp -lIU -xrL iwS sFd iuH @@ -165771,7 +168099,7 @@ gJK iwS wkB iDt -jZN +xYQ gjq gjq gjq @@ -165785,8 +168113,8 @@ jzy pve xjZ bGP -mIT -gsF +hqv +sYz vSi kZu uOf @@ -166002,13 +168330,13 @@ gjq gjq gjq gjq -nfG -qbU +ppY +wEu ivF jwH jwH jwH -jHV +pLS aLz jul oRE @@ -166038,7 +168366,7 @@ sjb puX uig hPK -ukv +ilz pve hEm ksn @@ -166263,7 +168591,7 @@ gjq scw hyj slX -kwT +oXx ceY kbq sLR @@ -166278,9 +168606,9 @@ nlO nlO gwz nMH -ciH +jHh iwS -fpC +gDh szX qMo iDt @@ -166293,7 +168621,7 @@ gjq sjb wQr wQr -pcj +cxI wVe wQr vSi @@ -166517,7 +168845,7 @@ gjq gjq gjq gjq -qsq +gpo ivF ivF ivF @@ -166528,11 +168856,11 @@ jnR jnR ivF ivF -nRx +eat pEg uyW iwS -kDm +lJg ePn oDV iqn @@ -166548,22 +168876,22 @@ gjq gjq gjq iYt -dbi -unM +slh +dhV lNH bit iQK kXr hVI gDN -pZD -uhs +hSe +nyR pve vSi kZu pAT -xlQ -lCA +lYd +jCV kZu jrQ qud @@ -166574,7 +168902,7 @@ hFL hFL nWH gnh -iDt +mbJ iDt iDt iDt @@ -166779,11 +169107,11 @@ gjq iDt iDt iDt -mdV +iDt scw scw iDt -xdY +thA iwS iwS iwS @@ -166795,7 +169123,7 @@ iwS iwS iwS iwS -dYq +lRn qMo iDt scw @@ -166805,16 +169133,16 @@ gjq gjq gjq dLf -vfg -bQA -hKT +iem +xug +rTZ cHZ gaq kXr oGF ksn -pZD -ghQ +nJL +kUD kUD kUD nWH @@ -166823,8 +169151,8 @@ nWH nWH nWH mHe -dAq -adm +sPE +ceF dTF nWH qeP @@ -166986,21 +169314,21 @@ thA thA thA thA -kSw +fIt xMq xMq xMq xMq xMq -kSw +fIt cek cek uCN cek cek cek -kSw -thA +fIt +sGw thA thA thA @@ -167054,7 +169382,7 @@ thA iwS rBM iwS -iDt +nyh scw gjq gjq @@ -167062,16 +169390,16 @@ gjq gjq gjq dLf -vfg -ajw +gYd +vRn rty lNH eMa hrJ wmT gDN -lvT -wSX +bGn +kUD kUD kUD nWH @@ -167310,7 +169638,7 @@ thA thA scw scw -xUw +scw iDt gjq gjq @@ -167319,17 +169647,17 @@ gjq gjq gjq dLf -vfg -ajw -vjM +mGH +eOJ +vAr bff lNH kix aOf yaD -wmb -lEt -eMO +vvU +mtV +itf nWH nWH oha @@ -167506,15 +169834,15 @@ hPs gBX gBX gBX -ktt +hPs hPs nDE nDE nDE nDE nDE -bUp -gjq +nDE +paw gjq gjq gjq @@ -167561,15 +169889,15 @@ gjq gjq thA thA -gqG -thA +psb +lGf thA -gqG -myZ +psb +eAW myZ myZ -gqG -gjq +psb +fhL gjq gjq gjq @@ -167577,9 +169905,9 @@ gjq gjq iYt tDU -mod +hcT bQA -eIU +ajw wUP hrJ siI @@ -167602,7 +169930,7 @@ whb xjC nWH gnh -iDt +mbJ iDt ulj iDt @@ -167768,7 +170096,7 @@ jlF jNf dpC cGQ -oNW +txX nmr hVY gjq @@ -167835,8 +170163,8 @@ gjq jpS kNW kNW -wxp -wxp +ryl +xNh kNW kNW kNW @@ -167848,7 +170176,7 @@ nWH nWH nWH nWH -tCO +eSA jRd sbU nWH @@ -168017,8 +170345,8 @@ thA xMq iDt oqL -ucD -eaw +wmP +vTq jsp wSz nFU @@ -168102,18 +170430,18 @@ pZD cQw gLF wpx -unT -iAp -til +gLF +gee +kVN naq mzu gLF -unT +gLF dZq cvB tzE -gMw -ggv +pLh +eHo rsY urG iDt @@ -168309,7 +170637,7 @@ rVB rVB rVB qQf -gjq +fhL gjq gjq gjq @@ -168528,11 +170856,11 @@ thA thA thA thA -kSw -iDt +fIt +nbB ktt -njf -rBy +tmy +lvU fAV tGs obv @@ -168589,8 +170917,8 @@ gjq gjq gjq gjq -jXc -eJf +psb +hYM eJf psb myZ @@ -168788,13 +171116,13 @@ thA xMq iDt hPs -eSE -mVI -elU -nZi +bVT +nPS +cKy +mLX tWO jNf -tXd +pSA qSo cPE cPE @@ -168864,7 +171192,7 @@ gjq jpS kuC kII -nmu +rRn clz mml kNW @@ -168886,7 +171214,7 @@ rsY qjV qjV rsY -vek +hNn iDt iDt iDt @@ -169051,7 +171379,7 @@ bCp fYi tCL jNf -wcz +wSC hKI fWe ozX @@ -169076,8 +171404,8 @@ ucN iDt iDt qQf -kxZ -mES +ouK +vkC sXk rJz pFV @@ -169103,8 +171431,8 @@ gjq gjq gjq gjq -eFw -eJf +psb +bZC eJf psb myZ @@ -169145,7 +171473,7 @@ aIB aIB dNN psb -iDt +fXL sVN iDt psb @@ -169305,7 +171633,7 @@ hPs xLV xLV nvE -uKJ +vcx tCL jNf fDP @@ -169320,7 +171648,7 @@ gjq wUj qLB jpy -vXe +cgB ssY wUj gjq @@ -169328,7 +171656,7 @@ ucN cXZ cVk gFj -vZH +vtR kgz iDt iDt @@ -169380,7 +171708,7 @@ jpS jlK jpS szJ -iKp +nvy kNW rrV xGt @@ -169393,17 +171721,17 @@ uUT vgD lvQ sUE -sdc -mPq +rsY +jcA scw -qau +jai iDt iDt iDt iDt iDt wOR -xuo +txm itY iDt thA @@ -169592,7 +171920,7 @@ iDt qQf sEk qQf -uxZ +aPZ dBp jZe qYb @@ -169633,9 +171961,9 @@ iDt iDt ijY iDt -iDt -iDt aEM +iDt +jpS gKd gKd rsY @@ -169643,7 +171971,7 @@ hdb avh qGg uUT -fyT +ccv lQh diI uUT @@ -169659,7 +171987,7 @@ iDt cCb scw iDt -xuo +ohI tZp iDt iDt @@ -169814,8 +172142,8 @@ iDt iDt iDt oqL -gLY -twx +iCp +wes ldz fvK cIc @@ -169827,8 +172155,8 @@ jNf jNf jNf jNf -xZg -iDt +xhK +kXf iDt iDt wUj @@ -169849,13 +172177,13 @@ ijY qQf qQf qQf -uPx +rIz cfi -pjz +bGS qQf qQf qQf -pfw +gVN scw iDt iDt @@ -169867,7 +172195,7 @@ iDt iDt iDt iDt -nfG +ppY iDt iDt iDt @@ -169896,9 +172224,9 @@ rcY iDt iDt rsY -mqs +avi dTs -oeP +cxt uUT kmO rtR @@ -169910,16 +172238,16 @@ qQt scw scw iDt -nqv +qau +iDt iDt iDt iDt iDt -jSQ cmZ -xuo +dNN iDt -jZN +xYQ thA thA thA @@ -170071,8 +172399,8 @@ iDt iDt iDt oqL -gvi -xCa +lrM +dnz axX auJ oVy @@ -170112,7 +172440,7 @@ rGq gQp iUG sXe -xuo +vpJ iDt iDt iDt @@ -170131,15 +172459,15 @@ iDt iDt iDt iDt -gqG -scw +psb +mrk iDt -gqG -aIB +psb +leU aIB aIB -gqG -iDt +psb +mbJ iDt iDt iDt @@ -170149,10 +172477,10 @@ iDt iDt iDt cCb -qau -scw +jai +nLB qXg -sdc +rsY rsY czq rsY @@ -170167,8 +172495,8 @@ scw scw iDt scw -qau -ijY +jai +jwz iDt iDt iDt @@ -170327,8 +172655,8 @@ iDt ijY hPs gBX -oPa -cjz +hPs +tcL vdW sTP jhH @@ -170346,7 +172674,7 @@ iDt ijY pfw wUj -dtq +pYn jeJ aFg vwl @@ -170367,11 +172695,11 @@ qQf ofE awn qQf -mri +rVB qQf -ebd +mCz iDt -nfG +ppY pfw thA thA @@ -170387,7 +172715,7 @@ thA thA thA thA -nfG +ppY iDt iDt iDt @@ -170395,7 +172723,7 @@ iDt scw iDt iDt -iDt +scw iDt iDt iDt @@ -170406,25 +172734,25 @@ iDt iDt iDt iDt -mJZ +qau iDt scw qQt -scw +oIt scw scw iwf uUT -afs -qCY +okc +bzD iwf -tej -tej -tej -tej -tej -tej -kso +wWw +aOG +wWw +wWw +wWw +aOG +qhR iDt iDt iDt @@ -170588,12 +172916,12 @@ dck tei fTF fTF -fTF +dbn cIc uTp oVY pez -ccX +oOg qLg vVH vVH @@ -170606,15 +172934,15 @@ ntl hwu hwu wUj -wwL +vmw wUj vOw -eGW +jEJ dZN eGW uRk dDt -dDt +crf wYh dvw dDt @@ -170643,19 +172971,19 @@ thA thA thA thA -dlu -dlu -dlu -dlu -dlu -dlu -dlu -dlu -qgQ -qgQ -rrl -nmO -ozW +fyI +fyI +fyI +fyI +fyI +fyI +fyI +fyI +pkq +pkq +guO +poC +dXk iDt iDt iDt @@ -170663,7 +172991,7 @@ iDt iDt scw iDt -rcY +qau scw iDt snL @@ -170671,14 +172999,14 @@ scw scw scw nUi -nNy +oTi cbk lNa nUi iDt iDt iDt -jZN +xYQ iDt iDt iDt @@ -170850,21 +173178,21 @@ cIc kqn oVY pez -qsR +anQ aQQ fdm -grU -nKL +eIg +rIH ukN nCs bZk gRZ -kmg +dAZ vOw eGW eGW uRk -dDt +tbl dDt stG ykM @@ -170900,22 +173228,22 @@ thA thA thA thA -dlu -qbM -wvu -wvu -bPR -qbM -wvu -bil +fyI +tKm +eiH +eiH +puZ +tKm +eiH +sTb ijY iDt iDt iDt -kJx +hcZ iDt iDt -jZN +xYQ iDt iDt iDt @@ -170927,11 +173255,12 @@ rxG iDt scw uWE -qzq +iwf iwf qlk qlk iwf +mbJ iDt iDt iDt @@ -170940,8 +173269,7 @@ iDt iDt iDt iDt -iDt -jZN +xYQ iDt thA thA @@ -171110,7 +173438,7 @@ oCU vVH vVH vVH -lDE +ivw nKL hpF pXZ @@ -171157,19 +173485,19 @@ thA thA thA thA -dlu -nEI -wvu -wvu -bPR -nEI -wvu -bil -iDt +fyI +aGb +eiH +eiH +puZ +aGb +eiH +sTb +scw iDt iDt iDt -kJx +hcZ iDt iDt iDt @@ -171367,7 +173695,7 @@ bLc diN diN lgK -jqn +vlH lWb eDq tDY @@ -171376,10 +173704,10 @@ izY eND qpB qpB -jLB +eIU qpB qpB -siv +sfF kRy qpB iwC @@ -171414,19 +173742,19 @@ thA thA thA thA -dlu -wvu -wvu -wvu -bPR -wvu -wvu -bil +fyI +eiH +eiH +eiH +puZ +eiH +eiH +sTb iDt iDt -ayJ +luI iDt -kJx +hcZ iDt iDt iDt @@ -171434,15 +173762,15 @@ iDt iDt iDt iDt -rcY +jai iDt iDt iDt iDt iDt iDt -mJZ -iDt +jai +wkB iDt iDt iDt @@ -171649,7 +173977,7 @@ cBT dyf iOs gKQ -eGW +xAY qQN wMt thA @@ -171671,19 +173999,19 @@ tjo thA thA thA -dlu -rEn -rEn -wvu -ghA -rEn -wvu -idH +fyI +bEk +bEk +eiH +qAh +bEk +eiH +fwC iDt iDt iDt iDt -kJx +hcZ iDt iDt iDt @@ -171692,13 +174020,13 @@ ijY iDt iDt syw -kNC -kNC -kNC -tej +aOG +pJm +pJm +wWw fSm -kNC -gIl +aOG +pCG iDt iDt cCb @@ -171870,7 +174198,7 @@ iDt hPs gBX hPs -bSX +jhj pzu sRQ una @@ -171886,15 +174214,15 @@ nKL hpF uHv nup -vYc +pCp dAZ -nek +eRp qKS dUO -rhP +fWQ kkB dUO -nGQ +ylL sSO lyg gjq @@ -171906,8 +174234,8 @@ bqF dyf iNy gKQ -eGW -qQN +okz +okz wMt thA thA @@ -171928,19 +174256,19 @@ tjo thA thA thA -dlu -wvu -wvu -wvu -wvu -wvu -wvu -wvu +fyI +eiH +eiH +eiH +eiH +eiH +eiH +skr iDt iDt iDt iDt -qSi +kOR scw iDt scw @@ -171950,8 +174278,8 @@ iDt scw scw iDt -rDN -sEv +fep +edc scw scw iDt @@ -171959,7 +174287,7 @@ iDt iDt iDt iDt -jZN +xYQ xMq thA thA @@ -172138,12 +174466,12 @@ pez tVf izn lgK -pfn +wrw lWb eDq iXh lWb -hRp +upB dAZ wqI xSn @@ -172163,8 +174491,8 @@ seA ybN seA gKQ -jSL -jSL +jhi +jhi wMt thA thA @@ -172185,17 +174513,17 @@ tjo thA thA thA -dlu -ncx -kYN -wvu -wvu -rzY -kYN -wvu -ayJ -iDt -iDt +fyI +tjM +fsx +eiH +eiH +upU +fsx +skr +eGV +scw +scw iDt iDt scw @@ -172205,11 +174533,11 @@ scw scw scw scw -oJD -oJD +nKY +nKY scw -sed -nfG +eFH +ppY scw iDt iDt @@ -172400,7 +174728,7 @@ yiL yiL yiL eDq -pDl +ejb dAZ emM wob @@ -172442,19 +174770,19 @@ tjo thA thA thA -dlu -wvu -wvu -wvu -wvu -wvu -wvu -wvu +fyI +eiH +eiH +eiH +eiH +eiH +eiH +skr iDt iDt iDt iDt -qSi +kOR scw scw scw @@ -172462,9 +174790,9 @@ iDt scw scw scw -kYo -oJD -oJD +dVN +nKY +nKY scw scw aRt @@ -172640,7 +174968,7 @@ xMq iDt iDt ebd -ktt +hPs gBX hPs cIc @@ -172656,15 +174984,15 @@ uBs uBs uBs xaH -fCd +erM nDp -ubo +uFg lgD nDp -gqZ +mtS vms nDp -dwS +tlt vms iYU nZd @@ -172699,19 +175027,19 @@ tjo thA thA thA -dlu -xxH -xxH -wvu -jkK -xxH -wvu -mhj +fyI +fgV +fgV +eiH +gLX +fgV +eiH +oAm iDt iDt iDt iDt -kJx +hcZ iDt iDt iDt @@ -172719,11 +175047,11 @@ iDt iDt iDt iDt -kYo -rIS -kYo -kYo -kYo +dVN +yib +dVN +dVN +dVN iDt scw thA @@ -172913,7 +175241,7 @@ xuA tuc pPK yiL -aVF +gwl rQZ bSk uQC @@ -172922,18 +175250,18 @@ bcm uQC nSk wQR -kWH -vao +lEM +oVD lyg gjq gjq gjq ncR -eBU -ile +uyo +epN dyf -ile -neC +nnj +sWN gKQ thA thA @@ -172956,30 +175284,30 @@ tjo thA thA thA -dlu -wvu -wvu -wvu -bPR -wvu -wvu -bil -iDt +fyI +eiH +eiH +eiH +puZ +eiH +eiH +sTb iDt -ayJ +scw +luI iDt -kJx +hcZ iDt iDt iDt -daZ +tla iDt iDt -kPz -kYo -kYo -kYo -kYo +iNo +dVN +dVN +dVN +dVN iDt iDt iDt @@ -173170,7 +175498,7 @@ xuA tuc tuc yiL -pRB +sBH cGl hgM pJu @@ -173182,14 +175510,14 @@ frS fiL hQt lyg -gjq +fhL gjq gjq wYP tDN -tpK +bPl dyf -xCb +bOh gDe gKQ thA @@ -173213,25 +175541,25 @@ tjo thA thA thA -dlu -nEI -wvu -wvu -bPR -nEI -wvu -bil -iDt +fyI +aGb +eiH +eiH +puZ +aGb +eiH +sTb iDt iDt +scw iDt -kJx +hcZ iDt iDt iDt iDt iDt -kPz +iNo thA thA thA @@ -173411,8 +175739,8 @@ xMq xMq xMq xMq -kSw -iDt +fIt +nbB xhK vVH vVH @@ -173424,7 +175752,7 @@ yiL vDx cxO xuA -dkB +wkd bYg yiL qLD @@ -173444,9 +175772,9 @@ gjq gjq idN ntT -xUR +mtq jbI -oQN +bqS xtn gKQ thA @@ -173470,19 +175798,19 @@ tjo thA thA thA -dlu -qbM -wvu -wvu -bPR -qbM -wvu -bil +fyI +tKm +eiH +eiH +puZ +tKm +eiH +sTb iDt iDt iDt iDt -kJx +hcZ iDt iDt iDt @@ -173684,8 +176012,8 @@ pgL lab cbz yiL -iVu -rnb +fnt +fJZ hgM kyu hBg @@ -173701,9 +176029,9 @@ gjq gjq onJ mvv -ile -oTe -cAz +bfV +aUo +rth dEv gKQ thA @@ -173727,21 +176055,21 @@ tjo thA thA thA -dlu -dlu -dlu -dlu -dlu -dlu -dlu -dlu -iDx -rrl -iDx -iDx -fQa +fyI +fyI +fyI +fyI +fyI +fyI +fyI +fyI +jnW +uPY +jnW +jnW +kAk iDt -daZ +tla iDt iDt thA @@ -173938,11 +176266,11 @@ yiL agF tgP rGh -vHM +iJE wyF yiL -szz -nrq +cVV +dhi hgM kyu nrF @@ -174007,7 +176335,7 @@ thA thA thA xMq -nfG +ppY iDt iDt iDt @@ -174182,8 +176510,8 @@ gjq gjq gjq gjq -kSw -iDt +fIt +nbB xhK oAP oua @@ -174198,8 +176526,8 @@ yiL yiL yiL yiL -xHE -xHE +nEC +lOr hgM fvO mBa @@ -174251,10 +176579,10 @@ iDt iDt iDt iDt -aaD +vcj wqT -aaD -iDt +vcj +mbJ iDt iDt iDt @@ -174447,11 +176775,11 @@ swf vVH uVC oVY -rwu +tGJ tVf wRa gAn -hgH +qNK nmI kZi uME @@ -174465,7 +176793,7 @@ xhK xhK xhK xhK -gjq +paw gjq gjq gjq @@ -174509,7 +176837,7 @@ iDt iDt iDt alW -wVz +dpw alW iDt iDt @@ -174702,13 +177030,13 @@ xhK vVH fkV vVH -kqn +wEp oVY sMs tVf wJi rME -bol +xvI mMy uME uME @@ -174766,11 +177094,11 @@ iDt iDt vcj vcj -tLc +aDc vcj vcj aVq -daZ +tla iDt xMq thA @@ -174965,7 +177293,7 @@ bWh pac hUz hUz -bjp +tGA bjp poe ryu @@ -175030,7 +177358,7 @@ aVq iDt iDt iDt -nfG +ppY iDt iDt ebd @@ -175213,7 +177541,7 @@ gjq gjq gjq upw -msg +pcT jDG iRV fiD @@ -175231,7 +177559,7 @@ ihB ddp hBg nzj -dKr +rjd pOk par rsM @@ -175538,10 +177866,10 @@ ijn vWz vWz swq -eNS +vWz vcj -aaD -qtS +vcj +dCq iDt iDt iDt @@ -175795,8 +178123,8 @@ sIO wDG vyg dOq -kOS -uMq +gLU +wVz nul scw scw @@ -176051,11 +178379,11 @@ vcj igL vWz vWz -dOq +bFx vWz vcj -aaD -xQu +vcj +tsc iDt xMq thA @@ -176064,7 +178392,7 @@ xMq xMq thA xMq -nfG +ppY iDt iDt iDt @@ -176311,7 +178639,7 @@ iyd vlZ gCh alW -nfG +ppY iDt xMq xMq @@ -176329,11 +178657,11 @@ iDt iDt iDt iDt -nfG +ppY iDt iDt iDt -nfG +ppY xMq thA thA @@ -176766,14 +179094,14 @@ wRa wRa wRa vVH -nRO +tOE ulz ulz ulz pNm -eOz +cLp fdG -uCU +saX gjq gjq gjq @@ -177023,7 +179351,7 @@ wRa wRa wRa vVH -nCQ +kUt pKR ejX fjG @@ -177337,7 +179665,7 @@ scw scw scw scw -nfG +ppY iDt iDt thA @@ -177355,8 +179683,8 @@ nxM vmP maQ oAe -aUD -xMq +nxM +fCm thA thA thA @@ -177609,7 +179937,7 @@ thA thA thA mep -upa +kVI qck lkz mep @@ -177848,14 +180176,14 @@ scw scw iDt thA -gqG -thA +psb +lGf thA thA -gqG -scw -gqG -iDt +psb +mrk +psb +mbJ thA gjq gjq @@ -177866,9 +180194,9 @@ thA thA nxM nxM -qKH +vmP eVO -aUR +oAe nxM nxM nxM @@ -178087,7 +180415,7 @@ thA thA thA thA -rcY +aKb iDt iDt xMq @@ -178100,7 +180428,7 @@ gjq gjq gjq gjq -nfG +ppY scw thA thA @@ -178344,8 +180672,8 @@ thA thA thA thA -mJZ -iDt +bmc +wkB iDt scw scw @@ -178391,7 +180719,7 @@ thA thA thA thA -nfG +ppY iDt iDt scw @@ -178566,7 +180894,7 @@ ovP ovP ovP gFX -ovP +iXc ovP ovP ovP @@ -178605,12 +180933,12 @@ chg iDt scw scw -xpO -gNu -gNu -gNu -gNu -oZk +bqq +mgS +mgS +mgS +mgS +jRX gjq gjq gjq @@ -178822,7 +181150,7 @@ ovP ovP iDt scw -gbz +scw ovP ovP ovP @@ -178858,17 +181186,17 @@ thA thA thA iDt -rcY +bmc +pwr scw -scw -xpO -gRE -nYR -hog -hog -joW -aqq -oZk +bqq +uvA +pvi +uhF +uhF +gyg +kOM +jRX gjq gjq gjq @@ -178913,7 +181241,7 @@ iDt bID vxf noX -eNQ +nKw bID iDt thA @@ -179115,17 +181443,17 @@ thA thA thA iDt -rcY +aKb scw xMq -anI -lLR +kuZ +pBR eYX sCZ sCZ -qMO -dVj -anI +oDD +oUh +kuZ gjq gjq gjq @@ -179137,10 +181465,10 @@ bDO xMq xMq iDt -gqG -scw -gqG -thA +psb +mrk +psb +lGf thA thA thA @@ -179163,13 +181491,13 @@ xMq iDt iDt iDt -nfG +ppY iDt iDt -nfG +ppY bID bID -dmR +sSN bID bID thA @@ -179376,22 +181704,22 @@ xMq xMq xMq exw -nwC +fcA syE -hcj -hcj -fat -tqr +jaE +jaE +wPx +cUS exw -vDQ +bBO gjq gjq -wkV -kNC -jTf -jTf -gqG -szG +mxK +pJm +aOG +wWw +psb +wjA xMq xMq iDt @@ -179633,20 +181961,20 @@ exw exw exw exw -wwg +abJ bdr -jUv -jUv -xOV -scr +pme +pme +aon +jjI exw exw -gNu -gNu +mgS +mgS exw mPq iDt -neM +cRN qau xMq xMq @@ -179680,7 +182008,7 @@ iDt cCb iDt iDt -nfG +ppY bID anZ anZ @@ -179887,24 +182215,24 @@ iDt iDt xMq exw -jiD -utn -vnK -cCT +caA +mty +urQ +sQI bdr -jUv -jUv -xOV -vhA -oYw -kRD -rJX -mgy -sIX -nrh -iDt -neM -qau +pme +pme +aon +ojy +oGC +lQv +nVx +qes +xOQ +xyr +iDt +cRN +jai xMq xMq iDt @@ -180144,27 +182472,27 @@ xMq xMq xMq exw -cmg -qrF -ncd -dNk -grO -iFQ -iFQ -bon -hFX -ave +xiL +xlm +xLT +jgV +qlE +mNB +mNB +pyA +nrJ +onT exw -aBb -myS +hjc +jiw exw -dNN +xvN iDt iDt qau iDt iDt -nfG +ppY iDt scw iDt @@ -180400,16 +182728,16 @@ xMq xMq xMq xMq -exw -quw -xJW -ncd -erE -mYn -mYn -byy -mYn -wPR +uVb +qJB +mqd +xLT +wDb +oZG +oZG +rZY +oZG +eSC exw exw exw @@ -180418,15 +182746,15 @@ exw mPq iDt iDt -xlp +qau scw -fna +wJy iDt iDt iDt iDt eXH -gGK +jvU bjU aJr vHZ @@ -180658,32 +182986,32 @@ sBy sBy sBy exw -qre -oZD -lHI +ghD +lKN +fLu exw -rEt -iif +xKq +iXO exw -ogu -pOK -kPY -hWv +dXp +aqr +wOt +fHO urG -neM +cRN iDt scw iDt -neM -qau -iZm -fdP +cRN +jai +nbz +vyp iDt iDt scw iDt eXH -rwk +hZJ izJ gVO vjS @@ -180910,31 +183238,31 @@ thA xMq sBy sBy -dQp -rRu -xBs -lCv +dpb +loF +ikL +cLR exw -hPS -cYe -wSL +jJl +daH +oLi exw mpU mpU -tjA -hAK -pOK -txv -hWv +bHJ +iHP +aqr +uMp +fHO urG -neM +cRN iDt iDt scw -neM +cRN qau iDt -kRF +tiT iDt scw iDt @@ -180953,7 +183281,7 @@ nRc nRc bCt pHD -djB +tOb hjM oex oex @@ -181166,21 +183494,21 @@ thA xMq xMq sBy -qTp -xTi -bpc -cag -cVW +xNs +hZc +tZv +kKT +iAK exw -fBJ -fte -mkr +hTY +dQy +oPm exw -tmb -tmb +pPg +pPg exw -wME -tbd +obU +pvP exw exw gFX @@ -181189,7 +183517,7 @@ iDt scw scw oZd -kso +qhR scw iDt iDt @@ -181423,29 +183751,29 @@ thA xMq xMq sBy -ghT -pXy -nqI +gYv +rFU +qyH sBy -fbg +dbO sBy sBy exw exw -bwh -lyP -iDv -jMD +exw +cGZ +uAP +fNB sCZ -obT -ozx +eSC +ggz exw xMq psb jTf -jTf -ork -gIl +wWw +uen +hoz iDt iDt cCb @@ -181454,7 +183782,7 @@ scw iDt iDt eXH -nlN +iIY nlS yco rVd @@ -181680,22 +184008,22 @@ thA xMq xMq sBy -kzU -vxY -sRf +oiM +qrB +lRO sBy -rZP -fkd -fbW +lom +ete +laa exw exw exw -jQM -etr -ekc -leg -oIQ -inN +nwA +tPT +kiO +iTr +rds +xQi exw xMq psb @@ -181730,7 +184058,7 @@ xmx wEU rwD nxM -dXF +xnK pNZ rQG jJV @@ -181937,22 +184265,22 @@ xMq xMq xMq sBy -azI -kSj -lyf +oHf +lOJ +eqE sBy -eFf -quJ -quJ -wGQ -nBZ +sTL +idI +afb +bng +suF exw -tie -rxV -hjw -xFT +gbK +shF +qPV +wZW exw -bor +eXD exw psb psb @@ -181964,11 +184292,11 @@ scw btU xUf syW -jmJ +sCz hVX xUf eXH -irO +uIJ wiv fBw mLt @@ -181976,10 +184304,10 @@ mLt eKW wsu wsu -wsu -wsu -wsu -wsu +xfv +urp +urp +bFW pHD sGk hjM @@ -181987,7 +184315,7 @@ aJw sBJ qpD nxM -qhp +feD nxM nxM pBW @@ -182195,23 +184523,23 @@ xMq qMT qMT qMT -qon +qaS qMT qMT -rZP -quJ -quJ -jZc -nBZ +lom +idI +iMb +xIO +tGE exw -tec -phr -aTk -tec +aOb +xEX +tGz +aOb exw -mxY -xOd -ubi +rgq +sCb +grp psb xMq iDt @@ -182219,7 +184547,7 @@ iDt iDt iDt ioK -vtW +tqy bja jvw jvw @@ -182233,10 +184561,10 @@ qcL plS pHD pHD -eUe -bCq -bCq -fPh +hNq +vIu +vIu +kSG pHD jKG hjM @@ -182450,24 +184778,24 @@ thA xMq xMq qMT -jlv -emw -rqG -bOZ -gGS -rZP -quJ -imI +hfs +bMk +mxR +tHb +kuq +lom +idI +tJh qMT exw exw -pLu -tnJ -dJF -rzq +hZW +aIn +xwi +cft exw exw -bpa +rJc psb psb iDt @@ -182476,11 +184804,11 @@ iDt scw iDt ioK -jEA +jDz bja -rlA +czj jvw -bja +gIJ kRH xqY nzK @@ -182490,10 +184818,10 @@ fmr plS pHD pHD -qMz -imV -fuS -plS +hNq +qpo +qpo +kSG pHD qMz hjM @@ -182504,7 +184832,7 @@ nxM nxM nxM nxM -mPO +aRn hjM rgE rgE @@ -182707,25 +185035,25 @@ xMq xMq xMq qMT -dEc -ygy -nfK -wTl -sWS -ydv -aBj -sLm -dTx +vVl +umM +cXI +oJo +iQY +dHi +pSq +oHR +iZC exw -jbB -qfI -kcw -mXW -gAw -ktq +rEq +dFi +cRC +jbq +wNj +xTN exw -phl -ubi +wzH +grp psb iDt iDt @@ -182735,7 +185063,7 @@ scw btU btU btU -qbG +aoP ako hjM hjM @@ -182747,10 +185075,10 @@ hjM hCC iXP pHD -woC +bSi eXH eXH -ida +qYF pHD qMz hjM @@ -182951,7 +185279,7 @@ tjo tjo tjo tjo -luR +riW iDt tjo thA @@ -182964,35 +185292,35 @@ xMq xMq xMq qMT -izU -nYN -iDK -nYN -gGS -ydv -oru -dtc -sXU -rbU -nLd -nLa -gnE -gnE -qHs -wIx +dOp +wFJ +xQj +wFJ +kuq +dHi +wgK +jSa +fZH +iGQ +gnJ +amz +hOG +hOG +sIl +qPc exw -phl -cem +wzH +nYz psb iDt iDt -nfG +ppY iDt -scw +gFX btU -kCR +vfZ btU -ocp +mSX dYr nxM dTm @@ -183020,7 +185348,7 @@ nxM nxM nJd hjM -qII +iYd tVA oiO rgE @@ -183208,7 +185536,7 @@ tjo tjo tjo tjo -nlA +vne iDt tjo thA @@ -183222,23 +185550,23 @@ qMT qMT qMT qMT -kJG -eeY -ipg -mlN -rZP -lyU -pMh -aAy -rbU -nLd -ivp -gnE -gnE -kPh -dZL +hZb +vKR +gVV +dnn +lom +phz +cps +fMC +iGQ +gnJ +qFO +hOG +hOG +oMj +wVd exw -phl +wzH fuH psb iDt @@ -183246,11 +185574,11 @@ iDt iDt iDt btU -btU -sGf -lca -uTf -dYr +gCV +gcU +svx +tNw +mdy nxM nxM nxM @@ -183258,9 +185586,9 @@ hjM hjM hjM hjM -dsT +oEy vaZ -ubI +bQx hOk hjM hjM @@ -183278,7 +185606,7 @@ mco upa hjM fjg -bif +rxx nCD rgE rgE @@ -183476,35 +185804,35 @@ thA thA xMq qMT -jFY -wVI -aVJ -keM -ePZ -mRv -rZP -qal -oru -vXM -gYk +hmF +mIs +aZU +hMZ +gVB +axw +lom +xqt +wgK +fkD +toi exw -pSX -rdv -gNw -aUq -aIA -hfY +vfH +sRu +iWj +pVD +bsW +dad exw -phl +wzH fuH psb iDt iDt iDt -jCM +aDl btU -idr -qSe +gMd +mxZ aIU umC kJm @@ -183543,7 +185871,7 @@ phS kpG uAi qST -iRP +ngb wrE lKt rgE @@ -183733,39 +186061,39 @@ thA thA xMq qMT -jkN -qeW -quJ -mxh -aBj -klJ -ruQ -klJ -sgz -rlE +flK +gTa +idI +gxg +pSq +kmo +hWl +kmo +jUi +ibJ jre jre jre -oac -sGn -hpK -cNL +pTi +pWJ +ofR +eUm exw exw -bpa +pmA psb psb -olO -olO -olO -rpi +mUt +mUt +mUt +dbB btU -oYm -kht -wqi -tBY -efz -sAI +sry +dMl +pTy +bwp +shR +eGs hjM hjM hjM @@ -183788,7 +186116,7 @@ scw ilN vIZ nxM -bPk +iXK kmM sYU iio @@ -183979,7 +186307,7 @@ iDt iDt iDt iDt -pOl +evh tjo tjo tjo @@ -183990,36 +186318,36 @@ thA thA xMq qMT -bcf -vEC -lvv -efS -aXu -gPB -hEV -djl -bOn +eGB +wUB +nof +gIs +pbF +tdc +sHa +ccL +eLB jre jre -igu +jDV jre jre jre -fWd +tRP jre jre fuH -phl -ubi +wzH +grp psb -csV -mtt -mtt -mtt +oQc +gaA +gaA +gaA btU btU btU -gPj +idU btU btU ako @@ -184234,9 +186562,9 @@ iDt tjo iDt iDt -pOl +evh iDt -edM +sNF tjo tjo tjo @@ -184248,37 +186576,37 @@ thA xMq jre jre -dvZ +rXw jre jre -ydG -qfr -oVr -hFj +piT +eJX +ePj +ppH jre jre -nla -qhV -rhS -rhS -int -kWG -xEP +oXE +jWb +fCA +fCA +iaB +owK +hph jre -pJq -phl -bdX +adS +wzH +dfR psb -uwd -rWh -mtt -hFN +iUr +exu +gaA +ygA btU -nTA +ntm nyQ meL -efo -hJC +pgg +hAU ako hWV iiR @@ -184485,7 +186813,7 @@ tjo tjo tjo tjo -pOl +evh iDt tjo tjo @@ -184505,47 +186833,47 @@ thA xMq xMq jre -uBD -lcm +kyV +thP jre jre -jNe -jNe +weT +weT jre jre -nla -vkO -pjk -eqk -nla -ukt -acG +oXE +pfE +pBv +moX +oXE +xEV +xZS jre jre -gSU -phl -hvi +oDb +wzH +awE psb -hLh -amq -rWh -mtt +xcf +uKc +exu +gaA ioK waH -cWJ -dYX -pps -aRQ +kmq +ebO +jgW +mCx ako rjr xQT xQT qmU xDb -jEf +oGO qnt pGS -dIZ +ixa aRr xDb xMq @@ -184762,37 +187090,37 @@ thA xMq xMq jre -sJu -fWE +tKJ +kya tjs -qFD -qFD -rhS -rhS -wQx -vHe -dZC +jIB +jIB +fCA +fCA +ehh +jPL +oPC jre -vBt +nRE jre jre jre jre -drw -drw -bpa +dom +dom +rJc psb psb -uOz -amq -hai -mtt +qZZ +uKc +jww +gaA ioK -srG -aCl -tHe -tHe -xRF +wYH +jZt +hHz +hHz +hHz ako hSF hSF @@ -184832,7 +187160,7 @@ foW ljL ljL agY -bnG +lub lub wbk ccg @@ -185007,7 +187335,7 @@ iDt iDt iDt iDt -pOl +evh tjo tjo tjo @@ -185019,48 +187347,48 @@ xMq xMq xMq jre -nIY -jwf -cdO -ply -gEt -gwb -tOC -ubp -mUW +eXc +rfQ +gLY +sHt +hzU +usm +tYu +isq +jMr jre jre -vKT -rng -qjd -vyy -oRf +nVJ +xOc +eyP +rtw +rOx fwB -drw -nbl +dom +dXr psb -qnv -amq -wvL -mtt -mtt +lTl +uKc +wcn +gaA +gaA ioK -waH -nHc -nHc -ofm -okf +aOe +pRs +pRs +jcr +nPs ako xDb xDb xDb -rHr +jyJ mrU rQw xEb eVZ jTg -fpp +csu xDb xDb iDt @@ -185077,9 +187405,9 @@ lyX iTB imH nxM -mTX +aXP hjM -qUe +qJi ljL fFn vmu @@ -185278,7 +187606,7 @@ jre jre jre jre -iRS +uTu jre jre jre @@ -185286,29 +187614,29 @@ jre jre jre jre -bvc -rXB -udR -tkY -liv -liv -tkY -jKL -rpJ +lOA +ceQ +rRT +yfs +sTl +sTl +yfs +gTr +jgC psb -uOz -amq -wvL -fDp -csV +qZZ +uKc +wcn +grL +oQc ioK waH -iyF -xyG -jnY -eQU +lSX +bFA +fTi +bWv ako -xuQ +vJl qXO pGS bhw @@ -185322,7 +187650,7 @@ ffQ xDb clI iDt -pco +tJl iDt xMq xMq @@ -185532,40 +187860,40 @@ xMq xMq jre jre -uye -ohk -aAk +hDL +qZG +vmW nNe -xHv -qbY +tgj +mnA jre -nmi -aoi -ssm -fpt +tVF +kUo +iKd +ees mQk -qKw +sdF mQk fwB fwB fwB fwB -drw -qEh +dom +lPs psb -qnv -amq -wvL +lTl +uKc +wcn btU -hlQ +vtu btU -gfy -inP -xMv -wav -pWi +ale +rrR +tzR +qfy +aCw uHV -cqv +cKL gZb xwu cAr @@ -185579,8 +187907,8 @@ hoM xDb xMq iDt -mJZ -frt +aKb +gnX iDt iDt xMq @@ -185788,41 +188116,41 @@ thA xMq xMq jre -iDB -mPQ +kFc +kqg wSs -kfk -wjR -fMu -nla +wfP +uQv +qhb +oXE jre -nMC -fpm -kBO +sRz +tec +vcD jBB mQk -lEn +jUb mQk mQk fwB -nRy +nNg fwB -drw -cQV +dom +aWu psb psb -uOz -wvL -btU -sEI +qZZ +wcn +ioK +pKl btU -poY -hWX -goc +dVj +gra +lHV btU btU ako -goJ +uCM jeI pGS cDb @@ -185831,7 +188159,7 @@ drR oQY oQY soA -pNy +dvK nid xDb xMq @@ -185849,8 +188177,8 @@ sqW gjq nxM ueD -aUD -eJf +nxM +qOx upH fTG hkp @@ -185868,7 +188196,7 @@ bWK bWK neu hjR -vNM +uEf iDt iDt iDt @@ -186045,41 +188373,41 @@ thA xMq xMq jre -wEq -ezd -nla -uxU -bRx -ayY -nla +aMU +xzk +oXE +dYH +rlB +jMO +oXE jre -lHr -fQs -xOi +tAT +btq +nRn mQk mQk -riM +iBi mQk -fLa -eaM -cqs +mbM +oje +gYq fwB -drw -xxo -gcB +dom +fSB +rXP psb -hLh -hai +xcf +jww btU -dzr +jUs btU -xkT -kKk -pWG -btU -kKa +ewT +akN +uii +lOt +oJv ako -wlF +acl lYR pGS cDb @@ -186098,8 +188426,8 @@ iDt iDt scw iDt -gqG -eJf +psb +pFv eJf eJf eJf @@ -186293,7 +188621,7 @@ tjo tjo tjo iDt -pOl +evh iDt iDt thA @@ -186302,36 +188630,36 @@ thA xMq xMq jre -mMI -cBJ -nla -kRj +kGD +eIR +oXE +cqw nNe -ovZ -pGg +hWR +iis jre -lHr -njz -qYC -qOB +dLA +pnw +biu +xZv mQk -bLf -hAS -lJc -xbB -gxz +fja +prX +eud +kww +qPE fwB -drw -xxo -cem +dom +gKE +nYz psb -hai -csV +jww +oQc btU -gCG -cge -dDq -cLf +qYW +dBX +lln +jfF jUB jUB jUB @@ -186339,7 +188667,7 @@ xDb xDb xDb xDb -jCA +gff nLe nQd oeT @@ -186364,9 +188692,9 @@ myZ myZ myZ myZ -gdg +wvF kpC -eMU +cmY vgM syn fDe @@ -186560,47 +188888,47 @@ xMq xMq jre jre -xnf -rdq -aAk +jVp +qhi +vmW nNe -hnK -rXY +hts +hQv jre jre -tWY +oqE jre jre jre -twS +gWi jre jre jre jre -drw -drw -xxo +dom +dom +fSB fuH psb -olO -ese +mUt +mUt btU -cJa -oEH -klS -vAO +eqH +bCN +axj +fJA jUB -oXs -iSs -vMf -tdL +aVM +vgW +qHA +bWM xDb -qxv +uFF osr wiD dRz pwn -pwn +dUR pwn jUB cuJ @@ -186624,9 +188952,9 @@ eJf eJf upH uuw -jDi -nzT -eGl +boc +eOB +bpw lVw dDy nOS @@ -186641,7 +188969,7 @@ rbY ffe alM alM -sbZ +wtM alM iDt thA @@ -186820,37 +189148,37 @@ jre jre jre jre -udf +sXa jre jre jre -wOC -oYC +nzU +aWj wSs -nla -cSO -hYt -nla +oXE +fOS +pWE +oXE wSs -tes +tpc jre jre jre -kFF +sGG jre jre fuH fuH btU -mkN -meW -xFG -qad +uUs +cQV +ijv +hPD jUB -srM -skU -rHI -non +gIh +jjM +pfz +wyX nMc sfy uCe @@ -186869,8 +189197,8 @@ thA thA thA thA -gqG -eJf +psb +pFv eJf eJf eJf @@ -186878,12 +189206,12 @@ eJf myZ eJf eJf -buW +eJf kpC -kDb -nqX -qoZ -sIA +gWn +vZo +wxl +lOa lVw jPu ffe @@ -186895,10 +189223,10 @@ ffe ffe ffe ffe -heH -gNh +ffe +oxO alM -noQ +vZM alM iDt thA @@ -187076,38 +189404,38 @@ xMq xMq xMq jre -igu -kvT -pZO -jHL -jHL -jSp +gAM +rOL +edR +nsQ +nsQ +ljq jre -jNe +weT jre -tSO +exQ jre dQN jre -cpO +meX jre -gVs -hGg +jwv +sBd wSs vTp jre fuH fuH btU -iWN -cRN -jFA -jRm +hvt +luR +mlT +lqZ jUB -ksH -yaJ -uOq -vXD +vyq +aow +kkF +vLY xDb qSN atl @@ -187128,19 +189456,19 @@ thA thA thA thA -nfG +ppY gjq gjq alM gbL -wJD -eJf +alM +qOx eJf kpC awL -jes -qdx -sIA +xqw +xZy +lOa rtt dgZ ffe @@ -187152,10 +189480,10 @@ oxO alM fWO alM -jrk +aUT oxO alM -iCD +ouU alM alM alM @@ -187334,20 +189662,20 @@ xMq xMq jre jre -kUW +bTE jre -eet +tDS dQN -kEr +vwD jre rYT -sOX -aGk +biE +olR jre -jhu +jsO jre -mza -awF +xGL +lVU wSs wSs wSs @@ -187356,13 +189684,13 @@ jre fuH fuH btU -vrr -rcU -gEX -eML +mCd +hkQ +cZk +tHJ xDb jUB -aVU +dgt jUB xDb xDb @@ -187371,7 +189699,7 @@ qWD oQY nvX jUB -rOH +pkz lPC vpX xDb @@ -187392,12 +189720,12 @@ wCo oxO wCo eJf -nfG +ppY upH cYi -qqh +ngo naX -sIA +ulm rtt rgB ffe @@ -187591,38 +189919,38 @@ xMq xMq xMq jre -uiv +uIh jre jre jre -bzX -vpJ -gOd +uVr +sHe +frF oTx -hIE +fQe jre vFg jre jre jre -vyN +xth jre -kUW +bTE jre jre fuH fuH btU btU +xUf +xUf btU -btU -btU -iYH -qsG +xDb +ybC aqp wbe jUB -jGN +gSl gHN qWD uDF @@ -187848,23 +190176,23 @@ thA xMq xMq jre -dla +sjd jre xMq jre -gFt +oiC jre lvF -vUn +wFt lvF jre -aLh +htg djH -uGY +pIh jre jre jre -uiv +cXG jre xMq xMq @@ -187875,10 +190203,10 @@ thA thA thA xDb -xtR +lfA ukz gPR -bwe +tFY cxQ vJB wgI @@ -187903,7 +190231,7 @@ xMq xMq xMq alM -xFU +ciU alM apB ffe @@ -188104,7 +190432,7 @@ thA iDt rcY scw -uNG +ayL aIB tiY xMq @@ -188121,7 +190449,7 @@ hMw jre xMq jre -dla +sjd jre iDt thA @@ -188132,11 +190460,11 @@ thA thA thA xDb -pPD +fBy tIu toG jUB -kax +aov anK nrC xDb @@ -188146,7 +190474,7 @@ ffe ffe ffe dOC -dFD +nIb alM alM alM @@ -188360,7 +190688,7 @@ iDt iDt iDt rcY -luR +riW scw scw iDt @@ -188380,7 +190708,7 @@ xMq tiY aIB dhH -grg +xvE iDt thA thA @@ -188397,7 +190725,7 @@ xDb hjV ezu xDb -slx +sEN ffe oxO dcd @@ -188416,12 +190744,12 @@ alM alM alM alM -mLo +yhn eEY oxO dcd ffe -wRO +tBq ffe ffe ffe @@ -188616,8 +190944,8 @@ iDt iDt iDt iDt -tHF -scw +kLd +nLB iDt scw iDt @@ -188650,10 +190978,10 @@ xMq xMq xMq xMq -ozM +fWw nKl cgR -tBW +sWO vRY ffe oxO @@ -188669,7 +190997,7 @@ oxO oxO iry jQi -oxO +jVa oxO oxO oxO @@ -188679,7 +191007,7 @@ rUS tRd tRd nPI -wjy +nPI nPI nPI nPI @@ -188881,9 +191209,9 @@ scw iDt cCb syw -kNC -kNC -gIl +pJm +pJm +pCG iDt thA thA @@ -188927,7 +191255,7 @@ nsp oxO oxO oxO -kOO +oxO oxO oxO oxO @@ -189396,7 +191724,7 @@ iDt iDt iDt iDt -pOl +evh iDt iDt iDt @@ -189431,12 +191759,12 @@ xMq alM oxO ffe -qvN -qvN -qvN -biI -qvN -qvN +qCu +qCu +qCu +oED +qCu +qCu qLY eGN lZX @@ -189688,34 +192016,34 @@ xMq alM oxO ffe -qvN -qvN -qvN -uUn -qvN -qvN +qCu +qCu +qCu +pUX +qCu +qCu qLY vfe tsa wHb qLY -abe +eea wFN abe -cKA +nFz wFN abe -cKA +nFz abe abe -cKA +nFz abe abe -cKA +nFz abe abe rnQ -nPI +quW alM alM thA @@ -189905,9 +192233,9 @@ rcY iDt scw iDt -jmo +xkW keA -vQz +lPl iDt iDt scw @@ -189921,9 +192249,9 @@ thA thA thA psb -sRp +jkX gUQ -sRp +jkX psb thA thA @@ -189940,17 +192268,17 @@ xMq xMq xMq psb -iDt +clI xMq alM oxO ffe -viR -qvN -qvN -bOT -qvN -qvN +sbP +qCu +qCu +eZA +qCu +qCu qLY tkP fPv @@ -190163,7 +192491,7 @@ iDt iDt iDt tBs -dGZ +vcf tBs iDt iDt @@ -190204,32 +192532,32 @@ nsp ffe qLY qLY -uHS -ujp -qvN -ctF +xJn +kuT +qCu +qLY qLY qLY oXr -wpv +fma qLY -lMu +dRX bUK oQo nmj ucl aHz -dIS +puw gBb dJx htp eWh yjA -tOf +obF vPD lqU -mDg -nPI +ffe +xvU alM alM thA @@ -190423,15 +192751,15 @@ vRz wMj vRz iDt -wkV -tej -kNC -tej -tej -tej -kNC -tej -cNh +mxK +jTf +fOH +pJm +pJm +pJm +fOH +pJm +xvp iDt iDt iDt @@ -190467,7 +192795,7 @@ cZT cZT pXj qLY -wZv +hRQ axD qLY hEW @@ -190677,7 +193005,7 @@ tBs tBs tBs tBs -rHR +rQh tBs tBs tBs @@ -190688,7 +193016,7 @@ rbZ rbZ pgo iDt -hNF +aDG iDt iDt iDt @@ -190716,7 +193044,7 @@ iDt alM jCr ffe -nAf +fMZ pMF mqe hRC @@ -190724,24 +193052,24 @@ euM pMF sfv xyn -dmj +oYD wPd lVt -asb +yfa pMF -xCh -cbP +fZA +mqL pMF -ihN -doK +bWU +gvf mBP -rjT -rXD +vrw +mmG pMF -pfJ -jrc +hoa +pXq pMF -mbb +mEW rkl nPI oxO @@ -190929,7 +193257,7 @@ xMq tBs pwv sAu -rqn +dGS tBs nHQ oik @@ -190945,8 +193273,8 @@ tuk ebB efM pgo -rcY -rSQ +jai +rsG scw iDt iDt @@ -190980,7 +193308,7 @@ dtU niy gtF ouP -gLS +qLY cyh cXX bKI @@ -191195,7 +193523,7 @@ baR kAn kMN tBs -mFR +ebB ebB ebB uXk @@ -191243,21 +193571,21 @@ bjn qbq iar xqu -oir +dmV slp fjt wgr xur reT -rxM +dTC aLA bnh cNI tWd hJi -wGN -mDg -pQG +oOh +ffe +gzJ tRd alM thA @@ -191459,12 +193787,12 @@ efM uXk efM awy -rcY -iDt +jai +wkB iDt -svz +var keA -ddv +sys iDt iDt iDt @@ -191487,12 +193815,12 @@ iDt alM oxO ffe -oqd +jiB vHq aZk -xNa +iwQ pMF -rdl +cBv iQM qLY abe @@ -191716,19 +194044,19 @@ yav ebB awy iDt -qau +rcY iDt xMq wrX -efN -xCj +kpg +wrX xMq thA thA iDt scw iDt -vYN +wzi xMq iDt iDt @@ -191747,31 +194075,31 @@ ffe hfL vHq obZ -dIA -rSu +icK +bnr qLY qLY qLY -abe +eea abe gLj -abe +eea wFN gLj -abe +eea abe gLj -abe +eea abe gLj -abe +eea abe gLj -abe +eea abe abe pjr -tRd +iTC iWM alM thA @@ -191977,7 +194305,7 @@ wrX xMq xMq wrX -qCJ +csJ wrX xMq xMq @@ -192002,10 +194330,10 @@ alM oxO ffe ffe -iwx +mZI ffe ffe -xwd +pVj qLY vgf qLY @@ -192234,7 +194562,7 @@ wrX wrX wrX wrX -pSP +vIm wrX wrX xMq @@ -192258,7 +194586,7 @@ alM wOH oxO oxO -ggS +oxO nyJ nSK ffe @@ -192471,8 +194799,8 @@ thA tBs tix tBs -wgu -dlB +aCJ +pyn jCL qEJ qEJ @@ -192480,16 +194808,16 @@ djD qEJ qEJ qEJ -tJi +kyf wBA oTA rpK oTA epB -oTA +uFt wrX wrX -seN +wBs nBe tiV mjQ @@ -192734,20 +195062,20 @@ quB jmR vrC hbR -gNJ -qEJ -eog -lUa -dtC -bAF +whg +gQO +mPJ +puF +exn +hDf qeR bAF nJy -oTA -cMj -xNE -lnw -pwC +rkz +hrY +hrY +fLx +qgv wGv huJ wrX @@ -192762,17 +195090,17 @@ thA thA xMq xMq -kNC -kNC -ebX +pJm +pJm +tSj iDt iDt -nfG +ppY alM alM alM alM -aDe +moy tNJ tNJ nyJ @@ -192982,7 +195310,7 @@ thA thA tBs liS -pxg +saR fdN tBs deP @@ -192991,19 +195319,19 @@ pQw cBP wAv fjH -dNB -gQO -mPJ -mle -bWZ -amt -xXE +oqN +cWE +kWO +txf +oTA +sab +qYh sab pcB -tSy +qtd uJt uJt -hxI +efy iAQ bkq uTX @@ -193021,16 +195349,16 @@ xMq iDt iDt iDt -qZG -ebX +gsd +xvp scw iDt lRI eNh oxO -bEh +uwR vAx -jXl +oxO oxO pvh oLa @@ -193239,28 +195567,28 @@ thA xMq tBs suA -roq +iWA rHZ tBs dit bDH rYt -rrf +nBS wAv jvs qEJ qEJ -oxN +vnW mHJ oTA oTA syh oTA lqj -oTA +erV uJt uJt -rcD +iJV smC oTM wrX @@ -193276,28 +195604,28 @@ xMq xMq iDt iDt -xte +rkp iDt iDt -chg +qpH iDt -nfG +ppY alM -bXf +dQl ffe ffe ffe ffe -ylQ +pQl ffe iry -oxO +jXl oxO iKG -cma -qUL -oxO iry +qUL +cma +sGL alM alM alM @@ -193519,7 +195847,7 @@ uJt uJt uJt smC -gyf +dIG wrX xMq xMq @@ -193533,19 +195861,19 @@ xMq lvt lvt lvt -kdJ -iDt -iDt -wnp -wnp -wnp -wnp -wnp -wnp -eLU -wAk -lPz -rOz +rlq +iDt +iDt +uwT +uwT +uwT +uwT +uwT +uwT +loO +gaF +qkg +wQx ffe ffe ffe @@ -193758,10 +196086,10 @@ mku tBs tBs tBs -fCw +vch wrX -hzd -sdk +aMA +nbG aIe wBA uJq @@ -193790,19 +196118,19 @@ xMq lvt lvt lvt -kdJ +rlq lvt -wnp -wnp -sjD -dsa -wnp -aLo -jDQ -oQV -xvx -rOz -xvx +uwT +uwT +qMk +crW +uwT +kgw +tjf +raQ +qTf +wQx +qTf kAH mHu kwM @@ -193811,7 +196139,7 @@ qRO fgx cAB wQi -wQi +qlf uIf thA thA @@ -194017,10 +196345,10 @@ tWc tBs kCx wrX -umF -kmn +aMA +nbG aIe -lHB +lmT dzy ewC iLt @@ -194047,28 +196375,28 @@ lvt lvt lvt lvt -mRp -qbz -wnp -uNH -kXR -jVi -xij -vES -xnC -tLy -jih -gYO -toP +rjb +efR +uwT +dWL +fbA +lct +oGj +rWm +jWq +lvR +ddm +qvx +aZJ kAH mHu jlj tUo -aQn +cvj hFb vqv wQi -wQi +tEs uIf thA thA @@ -194274,21 +196602,21 @@ pmn tBs tBs tBs -hrK -icv wrX wrX -fIn +wrX +wrX +wyL jcP oTA oTA epB oTA uko -oTA +mEI uJt uJt -rcD +tWJ oTA wQC wrX @@ -194303,25 +196631,25 @@ rcY lvt lvt lvt -nNV -ege -iPK -wnp -afy -sqB -eSQ -xjs -vES -uIf -uIf -uIf -uIf -uIf +jyy +oyM +lGb +uwT +hkS +waz +jRt +rWm +rWm +uwT +qTf +wiX +qTf +qTf uIf -laa +pHW qKt tUo -aQn +cvj hFb vqv qiN @@ -194531,21 +196859,21 @@ wMj lpL wMj tBs -lry -oTA -hlS +etH +etH +rBJ wrX -uDC +wIC wBA oTA bAF irQ bAF bYm -bMe +rlt uJt uJt -oTA +bap oTA tIw wrX @@ -194560,25 +196888,25 @@ rcY lvt lvt lvt -ekN -nce -qcl -qcl -qcl -vES -mwK -vES -ybe +opE +ssj +sDB +sDB +sDB +rWm +cZf +rWm +tKY +uIf +uIf +uIf +uIf +uIf uIf -nIt -nIt -nIt -nIt -inh mWj aNu tPG -xEQ +baN qaL vqv brt @@ -194788,21 +197116,21 @@ tBs aVi vGJ tBs +cMG etH -etH -eyU -wrX -uJI +oTA +lBN +qOu xBt iih sab nMP sab qYh -oTA -avo -tTw -qfj +rkz +peX +peX +bEn vnj wrX wrX @@ -194817,29 +197145,29 @@ rcY lvt lvt lvt -mnB -tTK -rSZ -vES -uPQ -vES -eSQ -nOo -xdk -onV -stb -stb -stb -stb -iWs -mxc +ctm +iln +xPs +rWm +kZe +rWm +tkX +eLs +xNR +hqH +vAS +igM +ssH +xyI +oRH +wzU qRO -rEj +wuh qRO mEL vqv fkN -fkN +gge uIf thA thA @@ -195047,7 +197375,7 @@ aOz tBs cPq etH -etH +qUf wrX wrX ffp @@ -195056,11 +197384,11 @@ oTA syh oTA syh -oTA +hAE wrX wrX -hfm -orU +dgA +mKh wrX xMq xMq @@ -195075,24 +197403,24 @@ lvt lvt lvt lvt -asG -qcl -qcl -wnp -gAZ -tEE -lYS -jem +kWk +sDB +sDB +sDB +nPo +rCs +kwn +teQ uIf -rmp +qsa pOL pOL pOL -opD -jGR +gOA +mBY hFb mzb -rEj +wuh rRl vqv wZV @@ -195303,7 +197631,7 @@ goB goB tBs wrX -wrX +ipg wrX wrX wrX @@ -195327,26 +197655,26 @@ thA thA tjo tjo -qZG -ebX +gsd +hxJ lvt lvt lvt -kdJ +rlq lvt lvt -wnp -wnp -dqt -woV -xxZ +uwT +uwT +bvw +oDw +gyO uIf -jcC -pOL -pOL -pOL -opD -jGR +xmM +bWH +bWH +bWH +kdg +xeF hFb hFb qRO @@ -195560,15 +197888,15 @@ lvt lvt lvt lvt -lvt +scw lvt wrX wrX wrX wrX -daj +nfS wrX -crg +eoS wrX wrX wrX @@ -195585,32 +197913,32 @@ thA tjo tjo tjo -qZG -kNC -ebX +syw +wWw +hxJ lvt -kdJ +rlq lvt lvt lvt -wnp -qcl -qcl -wnp +uwT +sDB +sDB +uwT uIf -odm -odm -odm -odm -nqy -jGR +rNK +oPt +oPt +oPt +tcX +xeF qRO qRO qRO rRl ndb bnZ -ulE +eSq uIf thA thA @@ -195823,9 +198151,9 @@ lvt xMq xMq wrX -vle +wee bWp -nJZ +mCP wrX xMq xMq @@ -195844,27 +198172,27 @@ tjo tjo tjo tjo -qZG -kNC -nmy -kNC -kNC -kNC -uMU +gsd +pJm +dUm +pJm +wWw +pJm +gsd iDt -rQs -kNC -fcj -fcj -fcj -fcj -roW -roW -bId -gcy -jJG -jJG -plX +ctC +pJm +opP +opP +opP +opP +lpy +lpy +tqJ +bpY +vfj +vfj +kJF qZN akk qZN @@ -196110,14 +198438,14 @@ thA thA thA rcY -iDt -fCS -iwq -cuB -iCe -lgP -iCe -vcH +lvt +vEc +taC +duY +vgK +rGf +vgK +oBq gnq xEF qSk @@ -196366,14 +198694,14 @@ thA thA thA thA -rcY -iDt -fCS -ocd -bqX -rmG -ryX -sqH +kLd +lLA +vEc +oPu +uTx +ejN +xVB +nMv qSk sbd rEh @@ -196623,15 +198951,15 @@ thA thA thA thA -rcY -iDt -fCS -iwq -evc -wKh -aEK -wKh -odf +aDG +lvt +vEc +taC +sGT +qNt +dwj +qNt +uVf sbd jaY rhY @@ -196881,7 +199209,7 @@ thA thA thA syw -kNC +pJm bgx bgx bgx @@ -197137,16 +199465,16 @@ thA thA thA thA +iDt +iDt vzD +uAJ vzD -vzD -jdd -sHV -rTs -rEU +eYY +aUu oHo -gOq -bBb +eVw +rEU vzD thA thA @@ -197395,15 +199723,15 @@ thA thA thA vzD -yap -qXY -jCl -jCl -jCl -jCl -jCl +vzD +vzD jCl -iVY +mAn +beu +uZc +vzD +vzD +vzD vzD thA thA @@ -197652,15 +199980,15 @@ thA thA thA vzD -yap -jCl -bFq +xLv +gvr +uZc +vzD +rEU +uZc axu -dVq -xEt -jCl -jCl -iVY +rRN +xLv vzD thA thA @@ -197909,15 +200237,15 @@ thA thA thA vzD +jCl +fXQ vzD vzD +fXX vzD vzD -vzD -vzD -vzD -vzD -vzD +rRN +jCl vzD thA thA @@ -198165,17 +200493,17 @@ thA thA thA thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA +vzD +puL +phA +vzD +kfS +xYg +ibj +vzD +nQL +eYx +vzD thA thA thA @@ -198422,17 +200750,17 @@ thA thA thA thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA +vzD +nSU +ovB +vzD +kfS +hMA +iFw +vzD +bhI +uZc +vzD thA thA thA @@ -198679,17 +201007,17 @@ thA thA thA thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA -thA +vzD +vzD +vzD +vzD +vzD +vzD +vzD +vzD +vzD +vzD +vzD thA thA thA @@ -218597,7 +220925,7 @@ wNO wNO wNO wNO -aaX +qzn vbG hHG hHG @@ -218854,7 +221182,7 @@ wNO wNO wNO wNO -fhB +liV vbG hHG hHG @@ -219113,8 +221441,8 @@ wNO bln bln bln -xDQ -xDQ +wDS +wDS bln wNO wNO @@ -219199,11 +221527,11 @@ wNO wNO wNO bln -gnZ +oEB bln hcw lSu -gnZ +oEB bln wNO wNO @@ -219215,11 +221543,11 @@ wNO wNO wNO bln -gnZ +oEB lSu weW bln -gnZ +oEB bln bln bln @@ -219370,8 +221698,8 @@ wNO bln bln bln -rPp -rPp +dTI +dTI bln wNO wNO @@ -219713,11 +222041,11 @@ wNO bln bln lSu -eqn +bln sEB sEB sEB -sjU +lSu bln lSu bln @@ -219729,11 +222057,11 @@ lSu bln lSu bln -eqn +bln sEB sEB sEB -sjU +lSu bln mQb bln @@ -220233,7 +222561,7 @@ tqR sEB fUR lSu -gnZ +oEB jNZ sEB sEB @@ -220241,7 +222569,7 @@ sEB sEB sEB rzO -gnZ +oEB lSu fUR sEB @@ -220740,7 +223068,7 @@ bln uer bln bln -umb +bln fUR mXT cJt @@ -220756,14 +223084,14 @@ sEB sEB qVo lSu -umb +bln fUR mXT cJt iMu fUR oqJ -iWb +bln lSu lSu bln @@ -220771,7 +223099,7 @@ bln bln bln bln -gnZ +oEB bln bln bln @@ -220783,7 +223111,7 @@ aBR aBR aBR aBR -gnZ +oEB aBR aBR aBR @@ -221012,7 +223340,7 @@ sEB sEB sEB sEB -ntx +rhJ lSu fUR fUR @@ -221034,7 +223362,7 @@ bln bln bln lSu -gnZ +oEB aBR aBR aBR @@ -221252,13 +223580,13 @@ bln bln bln bln -gnZ +oEB lSu -fBN +xOk fUR -irX +kod kyg -rwW +uhx uhx uhx uhx @@ -221272,15 +223600,15 @@ sEB uhx uhx uhx -rwW +uhx jHX -fJd +tLm fUR lSu fUR kod gFL -rwW +uhx uhx uhx uhx @@ -221508,7 +223836,7 @@ bln lBD bln lSu -hjU +jNZ kKU kKU rzO @@ -221772,7 +224100,7 @@ fUR fUR ykb wOy -fHb +uhx uhx uhx uhx @@ -221786,7 +224114,7 @@ sEB uhx uhx uhx -fHb +uhx bzg otG uhx @@ -221794,7 +224122,7 @@ lSu uhx ykb wOy -fHb +uhx uhx uhx uhx @@ -222023,16 +224351,16 @@ bln bln miY fUR -fNy +eYK xAk -txd +xaf fUR uRx jdY rsw rin uhx -caX +rcS sEB sEB sEB @@ -222042,7 +224370,7 @@ sEB sEB oMa uhx -tbR +pgt dcG jXm otG @@ -222054,7 +224382,7 @@ jdY rsw phu uhx -dsg +jls bln lSu bln @@ -222535,10 +224863,10 @@ bln bln fsm bln -tIc +miY fUR fUR -mXH +kVA wWS mVE nDJ @@ -222582,7 +224910,7 @@ bln bln bln bln -gnZ +oEB aBR aBR aBR @@ -222803,7 +225131,7 @@ fld ycA lpH uhx -oJH +vCm sEB sEB sEB @@ -222813,7 +225141,7 @@ sEB sEB fiv uhx -jDS +sjz lKc uMm dvO @@ -222825,7 +225153,7 @@ fld ycA lpH uhx -hgx +pSK bln lSu bln @@ -223049,15 +225377,15 @@ bln bln bln bln -hWW +miY ydI ydI -qKJ +nWM kHl mVE nDJ wOy -rwW +uhx uhx uhx uhx @@ -223071,7 +225399,7 @@ sEB uhx uhx uhx -fHb +uhx bzg dvO uhx @@ -223079,7 +225407,7 @@ lSu uhx ovm wOy -fHb +uhx uhx uhx uhx @@ -223301,9 +225629,9 @@ bln bln lBD bln +lSu bln -bln -hjU +jNZ kKU kKU sEB @@ -223565,13 +225893,13 @@ hEI hEI biY biY -kCY +rkk bLs xRI ydI ior wOy -fHb +uhx uhx uhx uhx @@ -223585,7 +225913,7 @@ sEB uhx uhx uhx -rwW +uhx bzg oVX fUR @@ -223593,7 +225921,7 @@ lSu fUR tvm wOy -rwW +uhx uhx uhx uhx @@ -223814,11 +226142,11 @@ bln bln bln bln -bln +lSu stJ bln lJO -cyV +dxI muv qVN biY @@ -223839,8 +226167,8 @@ prs sEB sEB sEB -pJb -waT +fiv +lSu fUR fUR bAo @@ -224075,17 +226403,17 @@ bln bln lJO lJO -jEB +ldJ nOx cwe dIx laB laB lJO -iku +lXA nDJ wOy -jBK +pGy fUR rzO lSu @@ -224112,19 +226440,19 @@ fUR bln uer bln -gnZ +oEB lSu bln bln bln lSu -gnZ +oEB bln bln bln bln bln -gnZ +oEB aBR aBR aBR @@ -224367,7 +226695,7 @@ wOy eyk fUR bln -iWb +bln bln bln bln @@ -224589,43 +226917,43 @@ uer bln lJO kQg -ylt +ofc ylV -gfY +gjI lJO lJO lJO lJO fUR -nmA -oor +lzU +wwi fUR fUR fUR -shT -kHq +wUf +iQd oOP ccS ccS ccS lVY -oHY +hHl xuW fUR fUR fUR -gjN -nuM +ePV +eHX fUR fUR fUR -lSF -tku +drb +tuD fUR fUR fUR fUR -stJ +rNn bln bln bln @@ -224841,7 +227169,7 @@ bln bln bln bln -bln +lSu bln bln lJO @@ -224853,24 +227181,24 @@ lJO fjF qhO lJO -lIT +iVv qpt fBQ -tHB +syL vmC syL dwb fsv cuc hgr -qsh +fbF hgr xFs fsv cmV bXx aui -qTj +bXx btW jJd eyj @@ -224878,9 +227206,9 @@ lGL bXx oMq tEc -uUu -sEg -iVi +iGd +mKJ +vKD tKI tKI tKI @@ -225110,11 +227438,11 @@ ndz hjI xmo vmx -uBL +eTe nvI nvI oTc -cQa +nvI nvI fwM fsv @@ -225126,17 +227454,17 @@ xFs fsv dpU swK -iCw +swK ubx swK swK swK wfF -rUv +swK nqD thX peM -iES +ddd mKa ldw bCQ @@ -225385,12 +227713,12 @@ jLM fUR fUR fUR -koQ -koQ +ort +ort fUR fUR fUR -krW +mYA nEA nwT nwT @@ -225399,7 +227727,7 @@ nwT tKI pgE tKI -iWb +bln lBD bln mQb @@ -225443,11 +227771,11 @@ bln bln bln bln -bln -bln -bln -bln -bln +wNO +wNO +wNO +wNO +wNO wNO wNO wNO @@ -225612,8 +227940,8 @@ bln bln stJ bln -bln -bln +lSu +lSu cyH hjI nbj @@ -225650,14 +227978,14 @@ fUR teE bKA nwT -hAo +wvJ tzM -vgj +aUM tKI bCQ tKI tKI -bln +tMa mQb bln bln @@ -225704,7 +228032,7 @@ bln bln bln bln -bln +wNO wNO wNO wNO @@ -225869,7 +228197,7 @@ lBD bln bln uer -bln +lSu bln lJO lJO @@ -225947,12 +228275,12 @@ aBR bln bln bln +mQb bln bln bln -bln -bln -bln +lSu +lSu bln bln bln @@ -226147,7 +228475,7 @@ rMu kHP cuc mVE -nAH +ich nAH nAH mVE @@ -226155,13 +228483,13 @@ xFs jLM qHO fUR -juu +nyT kBU xgX juu gNL fUR -qAB +usU cTh iJl ooa @@ -226202,17 +228530,17 @@ aBR bln bln bln +mQb bln +mQb bln +hAM +lej +eRE +qQk +tTO bln -bln -tCr -tCr -tCr -tCr -tCr -bln -bln +mQb bln bln bln @@ -226367,6 +228695,9 @@ bln bln bln bln +lSu +mQb +mQb bln bln bln @@ -226374,15 +228705,12 @@ bln bln bln bln +mQb +mQb bln bln bln -bln -bln -bln -bln -bln -bln +lSu bln lJO cKB @@ -226460,18 +228788,18 @@ bln bln bln bln +mQb +uer bln +bvb +tMa bln bln -tCr -bln -bln -bln -tCr -bln -bln -bln -bln +bvb +tMa +uer +mQb +mQb bln bln bln @@ -226620,27 +228948,27 @@ ozo bln bln bln -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -mVm -tCr -tCr -bln -bln -uer -bln -bln -bln +hPv +kdS +kdS +eRE +wvw +kdS +kdS +eRE +kdS +kdS +kdS +eRE +qQk +kdS +kdS +kdS +kdS +kdS +eRE +gSd +kdS lJO gwM xdU @@ -226669,11 +228997,11 @@ xFs jLM iYy tma -agG +juu mxQ pXU -pSd -jsh +kSA +vUI fUR tkc nsr @@ -226715,21 +229043,21 @@ bln bln bln bln +mQb +mQb bln bln -bln -bln -bln -tCr +lSu +chn bln cnx bln -tCr -bln -bln +chn bln bln +lSu bln +mQb bln bln bln @@ -226876,8 +229204,8 @@ bln bln bln bln -bln -tCr +mQb +fPc bln bln bln @@ -226886,20 +229214,20 @@ bln bln bln muK -bln +mQb bln bln hty bln -tCr -bln +mQb bln +uer mQb bln bln bln lJO -keT +eXa sHO hjI lJO @@ -226918,7 +229246,7 @@ lvW uTI cuc mVE -nAH +ich nAH nAH mVE @@ -226935,14 +229263,14 @@ nwT goI nwT nwT -aLO +fZK wRM iox tKI bCQ tKI tKI -bln +tMa stJ fsm bln @@ -226970,24 +229298,24 @@ aBR aBR bln bln -bln -tCr -tCr -tCr -tCr -tCr -bln -bln +mQb +hAM +lej +ujK +vTh +ujK +ujK +obe bln tmR -bln -bln -bln -tCr -tCr -mVm -tCr -tCr +mQb +obe +ujK +lej +vTh +qQk +ujK +hAM bln bln wNO @@ -227133,8 +229461,8 @@ bln bln bln bln -bln -tCr +mQb +fPc bln uei tmR @@ -227143,16 +229471,16 @@ bln uei tmR uei -bln +mQb uei tmR uei bln -tCr -bln +mQb bln bln bln +lSu mQb bln lJO @@ -227181,12 +229509,12 @@ mVE mVE xFs pLn -aDy +dpl tKI -ljK +wKu tXs ljK -rUa +aRe tKI hbt cTD @@ -227198,7 +229526,7 @@ tKI tKI kPq tKI -qjC +bln bln bln bln @@ -227228,23 +229556,23 @@ aBR bln bln bln -tCr -bln +vap bln +ntK bln bln bln bln bln tmR +mQb bln bln bln bln bln -bln -bln -tCr +lSu +fPc bln bln wNO @@ -227389,14 +229717,14 @@ wNO bln bln bln +uer bln -bln -tCr -bln +bvb +tMa uei tmR uei -bln +mQb uei tmR uei @@ -227406,7 +229734,7 @@ tmR uei bln bln -bln +lSu bln bln bln @@ -227440,14 +229768,14 @@ aWN pLn qFs tKI -rvW +mqa xqj vsT gXr tKI -rVt +gec ihc -bod +sJI tKI hsQ bCQ @@ -227485,8 +229813,8 @@ aBR bln bln bln -tCr -bln +fPc +mQb xxB xxB xxB @@ -227500,9 +229828,9 @@ xxB xxB xxB xxB -bln -tCr -bln +lSu +fPc +mQb bln wNO wNO @@ -227645,11 +229973,11 @@ wNO wNO bln bln +mQb bln bln -bln -tCr -bln +ebW +mQb uei tmR uei @@ -227662,10 +229990,10 @@ uei tmR uei bln -bln -bln +lSu +lSu mQb -bln +ntK bln uer bln @@ -227694,7 +230022,7 @@ npq ecU gkZ tlO -kyc +udA tKI tKI kJO @@ -227703,7 +230031,7 @@ kJO tKI tKI stP -dVX +vwi oLo tKI iUW @@ -227742,8 +230070,8 @@ aBR bln bln bln -tCr -bln +bvb +uer tmR tmR tmR @@ -227758,7 +230086,7 @@ tmR tmR tmR bln -tCr +bvb bln bln wNO @@ -227905,7 +230233,7 @@ bln bln bln bln -bln +fPc bln uei tmR @@ -227919,11 +230247,11 @@ uei tmR uei bln +lSu bln bln bln bln -sxQ bln bln miY @@ -227941,7 +230269,7 @@ esv lCb ddZ eUA -nhS +aoc oCO oCO oCO @@ -227953,11 +230281,11 @@ tKI tKI tKI tKI -jXC +hZo wBb xvk wBb -kQV +uZC tKI tKI tKI @@ -227969,15 +230297,15 @@ tKI lSu bln bln -gnZ +oEB bln bln bln -gnZ +oEB bln bln bln -gnZ +oEB bln bln bln @@ -227997,9 +230325,9 @@ aBR aBR aBR bln +mQb bln -bln -tCr +fPc bln xxB xxB @@ -228015,7 +230343,7 @@ xxB xxB xxB bln -tCr +fPc bln bln wNO @@ -228159,10 +230487,10 @@ wNO wNO bln bln -tCr -tCr -tCr -bln +hAM +kdS +kdS +obe bln uei tmR @@ -228199,7 +230527,7 @@ eUi eBB tNd nor -qiT +sst cgw mZu hjv @@ -228210,13 +230538,13 @@ tKI dat kDv tKI -kEs +jEE wBb fgo aSI nEq tKI -kCv +ybY gvp nSr tKI @@ -228256,13 +230584,13 @@ aBR bln bln bln -tCr -bln -bln +uap bln bln bln bln +mQb +mQb bln sEB bln @@ -228272,8 +230600,8 @@ bln bln bln bln -mVm -bln +fPc +mQb bln wNO wNO @@ -228416,14 +230744,14 @@ wNO wNO bln bln -tCr +fPc bln bln bln bln bln tmR -bln +mQb bln bln tmR @@ -228435,8 +230763,8 @@ bln vsI eGr eGr -oLO -nhb +eGr +hNJ sxF kjw biY @@ -228451,7 +230779,7 @@ bln efI efI lJO -jaS +mLd hBG pEs aFH @@ -228478,7 +230806,7 @@ edN jLf tlm jLf -dpZ +fsj tKI htd bln @@ -228512,8 +230840,8 @@ bln bln bln bln -bln -tCr +lSu +dzZ bln xxB xxB @@ -228529,7 +230857,7 @@ xxB xxB xxB bln -tCr +fPc bln bln wNO @@ -228672,11 +231000,11 @@ wNO wNO wNO bln -bln -tCr -bln -fbh -tZf +mQb +yfW +tMa +cnx +tmR tmR sEB sEB @@ -228711,7 +231039,7 @@ lJO wDf sAR sAR -cBD +lCn kPy dQI pPT @@ -228770,8 +231098,8 @@ bln ozo bln bln -tCr -bln +bvb +tMa tmR tmR tmR @@ -228786,8 +231114,8 @@ tmR tmR tmR bln -tCr -bln +bvb +tMa bln wNO wNO @@ -228929,10 +231257,10 @@ wNO wNO wNO bln +mQb +vap bln -tCr -bln -bln +mQb bln bln bln @@ -228943,18 +231271,18 @@ bln tmR bln bln -bln +mQb tmR -bln +mQb sEB eGr eGr -gWy +eGr pVN bvd eAh -aiT -hjI +biY +bhQ hjI hjI eUf @@ -228967,9 +231295,9 @@ lJO lJO mCT mut -lGo -xhg -pGy +kby +oLm +rbE wCL tTc wtr @@ -229005,7 +231333,7 @@ lSu lSu lSu bln -gnZ +oEB bln bln bln @@ -229026,9 +231354,9 @@ bln bln bln bln +mQb +fPc bln -tCr -muK xxB xxB xxB @@ -229043,7 +231371,7 @@ xxB xxB xxB bln -tCr +fPc bln bln wNO @@ -229187,10 +231515,10 @@ wNO wNO bln bln -tCr -mVm -tCr -bln +fYT +kdS +kdS +hPv bln uei tmR @@ -229238,7 +231566,7 @@ qnj omg hzL kRc -oWu +lNV paZ tOw iKX @@ -229282,9 +231610,9 @@ bln bln bln bln -bln -bln -mVm +mQb +mQb +fPc bln bln bln @@ -229293,15 +231621,15 @@ bln bln bln sEB +mQb bln bln bln +mQb bln bln -bln -bln -tCr -bln +ebW +mQb bln wNO wNO @@ -229447,12 +231775,12 @@ bln bln bln bln -bln -bln +fPc +mQb uei tmR uei -bln +mQb uei tmR uei @@ -229461,7 +231789,7 @@ uei tmR uei bln -bln +lSu bln bln miY @@ -229492,7 +231820,7 @@ gpp lsi xhx qnj -nct +ddQ gAB ykG ykG @@ -229506,7 +231834,7 @@ kEM vkW gak tKI -oKu +dBJ tKI nMj bln @@ -229539,9 +231867,9 @@ bln bln bln bln +mQb bln -bln -tCr +fPc bln xxB xxB @@ -229557,8 +231885,8 @@ xxB xxB xxB bln -tCr -bln +chn +mQb bln wNO wNO @@ -229701,11 +232029,11 @@ wNO wNO bln bln +mQb +uer bln -bln -bln -tCr -bln +oHg +mQb uei tmR uei @@ -229718,7 +232046,7 @@ uei tmR uei bln -bln +lSu bln bln miY @@ -229795,10 +232123,10 @@ bln bln uGo bln +mQb +mQb bln -bln -bln -tCr +bvb bln tmR tmR @@ -229814,7 +232142,7 @@ tmR tmR tmR bln -tCr +bvb bln bln wNO @@ -229958,11 +232286,11 @@ wNO wNO bln bln +mQb +mQb bln -bln -bln -tCr -bln +yfW +tMa uei tmR uei @@ -229975,7 +232303,7 @@ uei tmR uei bln -bln +lSu lJO hEI lJO @@ -230006,7 +232334,7 @@ gpp bAB xEE qnj -hlW +aOx ykG ykG rCj @@ -230025,15 +232353,15 @@ tKI mZf ooL maT -wSM -oMd +nNZ +oSK maT -oMd -bNo +vEG +rEr maT sEB bln -gnZ +oEB bln bln bln @@ -230052,10 +232380,10 @@ bln bln cWX bln +mQb +lSu bln -bln -bln -tCr +fPc bln xxB xxB @@ -230071,7 +232399,7 @@ xxB xxB xxB bln -tCr +fPc bln bln wNO @@ -230215,10 +232543,10 @@ wNO wNO bln bln -bln -bln -bln -tCr +uer +mQb +lSu +wOq bln uei tmR @@ -230232,7 +232560,7 @@ uei tmR uei bln -tCr +bln lJO khW iSn @@ -230282,11 +232610,11 @@ tKI maT maT maT -sym +xmk bde -jIE -bde -ksf +kXr +aRx +kjd maT miY xeg @@ -230311,12 +232639,12 @@ cWX bln bln bln -bln -tCr -bln -bln +lSu +pMM bln bln +mQb +mQb bln bln bln @@ -230328,7 +232656,7 @@ bln bln bln bln -tCr +fPc bln bln wNO @@ -230472,10 +232800,11 @@ wNO wNO bln bln +lSu bln bln +vap bln -tCr bln bln bln @@ -230489,7 +232818,6 @@ bln bln bln bln -tCr lJO gDZ gDZ @@ -230528,7 +232856,7 @@ neq muy muy gRp -sbv +kjh tKI plg jdW @@ -230539,16 +232867,16 @@ tKI cYo tEL maT -wSM -hFU +nNZ +jME kXr -hFU -bNo +hTk +rEr maT mZf kKU kKU -dPX +vJv bln bln bln @@ -230566,26 +232894,26 @@ bln bln cWX bln +lSu bln -bln -bln -tCr -tCr -tCr -bln -bln -bln +mQb +fPc +mQb +lSu +lSu +uer +nAx bln sEB tmR sEB -bln -bln -bln -bln -tCr -tCr -tCr +mQb +cIf +gSd +ahG +ujK +ujK +obe bln bln wNO @@ -230732,21 +233060,21 @@ bln bln bln bln -tCr -tCr -tCr -tCr -tCj -mVm -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr +obe +kdS +kdS +eRE +xAs +kdS +kdS +eRE +wvw +kdS +qQk +eRE +kdS +hBf +kdS lJO gLZ cXp @@ -230798,7 +233126,7 @@ kLZ jPc xKj hyY -pdR +xDu huI gbv maT @@ -230806,7 +233134,7 @@ kXr maT maT kXr -bln +htd bln bln bln @@ -230823,21 +233151,21 @@ bln bln cWX bln +lSu bln +mQb +fPc bln +mQb bln -bln -bln -bln -bln -bln +lSu bln bln jlJ jWl jlJ -bln -bln +aMZ +vap bln bln bln @@ -230987,18 +233315,18 @@ wNO bln bln bln +lSu bln bln bln bln -bln -bln -vbG -bln +mQb +fPc bln bln bln bln +lSu bln bln bln @@ -231023,7 +233351,7 @@ lJO qzs jnV lJO -sHy +tdY gHS iMT hqx @@ -231059,7 +233387,7 @@ kVl czv cCW wyB -gTb +mSP wyB tEj maT @@ -231077,27 +233405,27 @@ bln bln bln bln -riT -uqG -bln +xYt +atB bln bln bln +mQb pRj pRj pRj pRj pRj -pRj +mNY bln jlJ -smj +hTq jlJ bln +chn bln -bln -bln -bln +uer +mQb bln bln bln @@ -231246,20 +233574,20 @@ bln bln bln bln +lSu +lSu bln bln -bln -bln -vbG +fPc bln bln uer bln mQb bln -bln +ntK stJ -bln +lSu bln bln bln @@ -231318,8 +233646,8 @@ huI huI huI uqg -ndK -kXr +pUi +maT bln bln bln @@ -231336,24 +233664,24 @@ ptf pRj pRj uqG -sEB -sEB -sEB +kKU +kKU +rzO bln pRj -dMO -vZp -dcQ +emx +kpn +awt wAW -pRj +mNY nxm -ifA +jlJ rbb -gFx jlJ +jlJ +obe bln -bln -bln +mQb bln bln bln @@ -231499,15 +233827,15 @@ wNO wNO wNO bln -bln +mQb bln ozo bln bln +lSu +mQb bln -bln -bln -vbG +uap bln fsm lBD @@ -231517,7 +233845,7 @@ bln bln bln bln -bln +lSu bln bln lJO @@ -231564,7 +233892,7 @@ hbY tKI tKI tKI -ghl +kUF ajw ajw otd @@ -231575,8 +233903,8 @@ otd otd uqn kLZ -huI -maT +jcJ +kXr bln bln bln @@ -231602,15 +233930,15 @@ rej iaT daS swS -cRX +mNY mNY smj smj iCX glh bln -bln -bln +mQb +mQb bln bln bln @@ -231756,16 +234084,16 @@ wNO wNO wNO bln +mQb bln +ntK bln +lSu +lSu +mQb bln -bln -bln -bln -bln -bln -vbG -bln +ebW +lSu bln bln bln @@ -231805,7 +234133,7 @@ hMg cke kTC qnj -qwn +dei wpC vZg gta @@ -231839,7 +234167,7 @@ qjQ qjQ qjQ qjQ -rLo +jDl qjQ bln bln @@ -231849,7 +234177,7 @@ qPw csE hRw pRj -vZW +eDJ ptf daS ptf @@ -231861,12 +234189,12 @@ mRU qAI snw mNY -kkp +qDS ooU ipE glh -bln -bln +mQb +uer bln bln bln @@ -232013,20 +234341,20 @@ wNO wNO wNO bln +uer bln bln +lSu +lSu bln +uer bln +fPc bln +lSu bln bln -bln -vbG -bln -bln -bln -bln -bln +mQb stJ bln bln @@ -232047,7 +234375,7 @@ hEI lJO lJO dDV -sFN +oaR lJO lJO lJO @@ -232104,26 +234432,26 @@ ptf hZQ cZN ybu -jYL +qrr pRj ycS -vGi +pRj lDr -sup +pRj ptf pRj kqK dnM swS mXN -vUz +gDv mNY qIf fFx czR glh -bln -bln +mQb +mQb bln bln bln @@ -232271,19 +234599,19 @@ wNO wNO bln bln +hMQ +mQb bln bln bln +hMQ bln -bln -bln -bln -vbG +fPc bln bln stJ bln -bln +uer bln bln bln @@ -232340,7 +234668,7 @@ ajw mmi wiz mmi -vmn +sln wam wam wam @@ -232352,9 +234680,9 @@ ajw tAS hoD hoD -gAY +hoD wjZ -sJn +get qjQ bln ptf @@ -232363,24 +234691,24 @@ sUS ybu vUW pRj -nkI -daS -daS +mKA +yiR daS -vYd +iJh +wRu pRj pRj kuR -bGf +kCC lDh pRj mNY -bCc +mNY pyI mNY glh -bln -bln +mQb +uer bln bln bln @@ -232528,15 +234856,15 @@ aBR tGr tGr tGr -mSQ -atc -atc -atc -atc -pLe +umh +jZo +jZo +jZo +jZo +umh tGr -tCj -sDl +xAs +jbe bln bln bln @@ -232563,14 +234891,14 @@ hEI hjI wPr oSy -sDl +pLg ybQ ybQ ybQ ybQ ybQ ybQ -sDl +vsF jOt ozw eRw @@ -232578,7 +234906,7 @@ gpp gJz nQv nDY -tEu +tzP tKI wuA nAr @@ -232590,7 +234918,7 @@ nAr nAr wNR tKI -ssg +jnp ajw ajw ajw @@ -232820,14 +235148,14 @@ hEI hjI wPr oSy -sSA +sDl ybQ gGZ lye ebL edn ybQ -sDl +sCK jOt ozw aJA @@ -232854,7 +235182,7 @@ vlN ajw wiz ajw -vmn +nNu wam wam wam @@ -232877,7 +235205,7 @@ ace ybu thW pRj -uhX +ntO dnM nzp wEW @@ -233083,22 +235411,22 @@ oPI khR khR eRh -uiM +ybQ jOt jOt ozw aJA xSL gJz -uXy +eUx imO kGF tKI wBb tKI -skw -ipF -qpp +xua +llR +fOs dsf xjF xem @@ -233125,12 +235453,12 @@ jAq qxb nrm hoD -rea +qIP qjQ bln pRj vSE -eGX +mqI qOl ujj pRj @@ -233138,7 +235466,7 @@ dOH hjH qTS dNC -xBX +iRJ pRj wls qxY @@ -233147,11 +235475,11 @@ cjL gfC pRj daS -viE +mxg pRj pRj pRj -vsI +oMa bln bln bln @@ -233341,7 +235669,7 @@ bnz jxq sOz vGI -ptk +oRZ lEE idO aJA @@ -233351,9 +235679,9 @@ tKI tKI tKI tKI -qRR +blY tKI -aes +wrP alT taf kGQ @@ -233391,11 +235719,11 @@ kYF jOJ qzM pRj -dOH +qFC uIx osI osI -hjH +xbq pRj nDy hUI @@ -233404,11 +235732,11 @@ nVR iWZ bse xHe -pBB +oBZ lPE daS nNr -sEB +qVo bln bln bln @@ -233558,7 +235886,7 @@ tGr bln bln bln -gnZ +oEB bln tGr tGr @@ -233610,7 +235938,7 @@ pdf pdf wBb tKI -pPE +aiQ alT dcs kin @@ -233646,13 +235974,13 @@ pRj csE kSD csE -nOk +uwd pRj -xOl +poO hjH daS pXv -kNZ +kEC pRj bxV uKP @@ -233661,11 +235989,11 @@ hUI lLm mLa qSY +daS pRj +igG pRj -pRj -pRj -vsI +qVo bln bln bln @@ -233848,14 +236176,14 @@ hEI hjI xJJ oSy -sSA +sDl ybQ egF jYV jDW hPf ybQ -sDl +eaG jOt ozw ons @@ -233868,11 +236196,11 @@ tKI wBb bcx qiK -tda +rrB lit qiP -noF -dqV +fgc +obQ nxD rbC kXr @@ -233900,7 +236228,7 @@ qjQ bln bln pRj -rKQ +wVr drs pRj pRj @@ -233919,10 +236247,10 @@ pRj pRj wFg pRj -bln -bln -bln -bln +pRj +pRj +pRj +eHC bln bln bln @@ -234105,21 +236433,21 @@ hEI hjI wPr oSy -sDl +pLg ybQ ybQ ybQ ybQ ybQ ybQ -sDl +vsF jOt ozw ons gpp lGz pMv -qaD +bso dBB tKI wBb @@ -234154,15 +236482,15 @@ qdC jBf dhY qjQ -sEB -sEB +oot +oot pRj daS tut qai qoK pXv -exy +pXv pXv pXv pXv @@ -234177,9 +236505,9 @@ ptf xHe ptf bln -bln -bln -bln +uer +uer +mQb bln bln bln @@ -234389,7 +236717,7 @@ tKI dMv pdf tKI -drG +iUM ssc cXl wRx @@ -234435,8 +236763,8 @@ xHe ptf bln bln -bln -bln +mQb +mQb bln bln bln @@ -234583,7 +236911,7 @@ tGr miY bln bln -gnZ +oEB mZf bln lSu @@ -234617,7 +236945,7 @@ lJO lJO lJO lJO -mzy +kcZ biY biY sDl @@ -234878,19 +237206,19 @@ sTj hos biY sDl -uqV +sDl sDl hDU -ksU -cFX -fHY +dAQ +fVU +iYe hDU gpp aJA gpp fUr pMv -cOb +eAQ pHy tKI tKI @@ -234905,8 +237233,8 @@ rCC gLN rCC eVl -wBF -uDr +rCC +dXh cHb cHb mOA @@ -234939,7 +237267,7 @@ bln bln bln bln -sEB +jNZ nME bln bln @@ -235138,7 +237466,7 @@ hDU hDU hDU hDU -heG +lyy aJm iFj hDU @@ -235182,8 +237510,8 @@ hoD abz qjQ qjQ -sEB -sEB +oot +oot pRj uWW daS @@ -235195,9 +237523,9 @@ bln bln bln bln -sEB +jNZ xbV -sEB +qVo bln bln bln @@ -235207,7 +237535,7 @@ ptf bln bln bln -bln +mQb bln bln bln @@ -235391,10 +237719,10 @@ hEI qGU biY biY -kqx +mSY mQh xKb -vMc +njD xMW apI tOi @@ -235432,7 +237760,7 @@ nZh lNG tue qjQ -hxE +jBf nvx lis aud @@ -235454,7 +237782,7 @@ bln bln fkF cPp -sEB +rwt bln bln bln @@ -235462,11 +237790,11 @@ ptf xHe ptf bln +ntK bln -bln -bln -bln -bln +mQb +uer +mQb bln bln bln @@ -235681,7 +238009,7 @@ vlL qxQ eBe hnC -qmi +cah aSh ycQ nZh @@ -235710,7 +238038,7 @@ bln bln bln bln -sEB +lbc bln bln bln @@ -235721,7 +238049,7 @@ ptf bln bln bln -sEB +mQb bln bln bln @@ -235743,8 +238071,8 @@ bln bln bln bln -tCr -tCr +bln +bln bln bln bln @@ -235921,7 +238249,7 @@ wvK aKs tgH gst -vSw +iXM vWW vWW vWW @@ -235967,7 +238295,7 @@ bln bln bln bln -sEB +tIC bln bln bln @@ -235989,20 +238317,20 @@ eoL ptf bln bln -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr +mQb +bln +bln +bln +bln +bln +mQb +bln +bln +bln +bln bln bln bln -tCr -tCr bln bln bln @@ -236155,7 +238483,7 @@ bln bln lJO oXf -rlX +xSx fdF lJO vqS @@ -236178,15 +238506,15 @@ kFu sJr vBu gst -iFh +sbY xAy xAy tge ozH bZg gst -tZR -nsq +hYG +jYG dOw dOw yhe @@ -236246,20 +238574,20 @@ nkO ptf bln bln -tCr -bln -bln +uer +mQb +mQb bln bln bln bln +uer bln -tCr bln +mQb bln bln bln -tCr bln bln bln @@ -236381,7 +238709,7 @@ tGr tGr bln jNZ -gnZ +oEB jNZ bln ntK @@ -236411,7 +238739,7 @@ bln bln dvY lJO -eKX +nLE erl oDH fVm @@ -236419,10 +238747,10 @@ ndz oIB biY biY -hhN +gNC iLi oJT -spV +wwO gad gAk tMI @@ -236440,10 +238768,10 @@ sto lpj gst gst -oiK +npP bLW xjP -sXf +qcI gxO dKK xmN @@ -236460,7 +238788,7 @@ iOS mYs fxn pRj -kCn +mgo daS pRj iaT @@ -236497,24 +238825,24 @@ lDF wSU ovy pRj -bHZ +qYR qvk tXb ptf bln bln -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr bln bln +mQb bln +lSu +bln +mQb +mQb +bln +bln +mQb +mQb bln bln bln @@ -236684,9 +239012,9 @@ biY biY biY biY -wkC -lnE -wkC +ede +iKj +bPp bXm lnc lnc @@ -236707,11 +239035,11 @@ wEh rCC sOn aBh -tNY -dqX +eaE +wkN aBh sOn -rzm +sOn tue tue tue @@ -236748,7 +239076,7 @@ suR pRj pRj ick -pRj +ivm pRj pRj mNY @@ -236758,21 +239086,21 @@ mNY mNY mNY mNY +hPv +lej +hBf +eRE +ujK +ujK +eRE +ujK +ujK +eRE +ujK +hPv bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln +uer +mQb bln bln bln @@ -236918,14 +239246,14 @@ xAs xAs xAs xAs -tCj -wPN +xAs +hIv wPN wPN -aeV lJO lJO -vNK +lJO +otM hDc wGG psR @@ -236956,8 +239284,8 @@ bep dnq gOy dnq -sIg -pTB +srw +yld pTB pTB pTB @@ -236968,8 +239296,8 @@ dnq dyN rGl hJE -kzC -wLU +vYA +hzV rGl vTo oMO @@ -236979,7 +239307,7 @@ ptd obj obj obj -iAt +obj obj obj obj @@ -237013,24 +239341,24 @@ gBv tjH aUK gGs -qAq +bbU aUj aUj +nce +mQb +mQb bln +lSu bln +mQb +mQb bln bln -bln -bln -bln -bln -bln -bln -bln -tCr -tCr -tCr -bln +yfW +fCR +ujK +ujK +dMo bln bln bln @@ -237180,15 +239508,15 @@ sDl sDl sDl hEI -iwj -kEB +sop +bJX fFb rtq lJO lJO lJO lJO -baE +htJ apX hjI hdh @@ -237213,7 +239541,7 @@ cKq cKq qsy iwz -oTg +dLQ iwz xwC jwt @@ -237226,7 +239554,7 @@ rQn iwz iwz iwz -eYP +uag iwz nQO bmv @@ -237267,7 +239595,7 @@ mXa qCl mNY aUj -uNu +vWy kLc oFY sIN @@ -237283,11 +239611,11 @@ pXY vyU uOE bln +chb bln -tCr -bln -tCr +ntK bln +chb bln bln bln @@ -237437,9 +239765,9 @@ sDl sDl sDl hEI -giR -rkd -rmU +nFG +sjp +rqk ure lJO bZx @@ -237470,8 +239798,8 @@ xIS mgj mgj mgj -mZS -mgV +srw +jOy ljp gHe sni @@ -237479,11 +239807,11 @@ bep qrJ uLC xzh -dnq +aNE qcu bDR wXW -mpy +cYj bep ylU dnq @@ -237504,7 +239832,7 @@ pRj rAO fhW mNY -vjx +anz mDf nLb kNp @@ -237521,8 +239849,8 @@ kCn kCn kCn kCn -xtX -azC +ioQ +jMn pZG toq uDE @@ -237530,7 +239858,7 @@ xFB rkc gxR uaG -kAK +iLY iLY iLY bxa @@ -237540,12 +239868,12 @@ pXY pXY fcP bln +chb bln -tCr -bln -tCr -bln +mQb bln +bvb +jHb ozo bln bln @@ -237680,7 +240008,7 @@ ooL tDg tDg oFI -gnZ +oEB sgW akQ lSu @@ -237699,15 +240027,15 @@ lJO lJO lJO lJO -wrN +bZx bZx bWn -huM +seL nUr ibk xwr xgg -aFx +xId whQ kka fmm @@ -237734,14 +240062,14 @@ gfb pYB gfb gfb -nqU +vtg rcE rcE rcE hVc jII jII -dnq +rLl ylU dnq jII @@ -237752,7 +240080,7 @@ jqT hcL hcL bln -bln +mQb bln bln bln @@ -237793,15 +240121,15 @@ iLY lqE pXY pXY -vyU -vyU +pXY +pXY uOE bln +chb bln -tCr -bln -tCr +uer bln +chb bln bln bln @@ -237940,10 +240268,10 @@ kyy cJi abb oFI -gnZ +oEB abb oFI -gnZ +oEB abb oFI rzG @@ -237955,7 +240283,7 @@ bZx bZx bZx bZx -snv +mgs kQi oWk bWn @@ -237976,11 +240304,11 @@ pAZ ucn tLi pAZ -xyl -dnq -qjm +tVd +uLC +jCT dxK -hbp +xax oyp phf sEl @@ -237991,9 +240319,9 @@ odN iZq dpH gfb -ydT +mYG iIA -fSC +fGQ iIA cvg qQb @@ -238002,15 +240330,15 @@ okb ylU jwl jII -bln +kps hcL bXF kcm mGm hcL bln -bln -bln +uer +mQb bln ptf ptf @@ -238026,12 +240354,12 @@ fxR aQR csT csT -cQH +csT mNY kCn mNY dUn -eEm +thC cpH kbJ kbJ @@ -238042,23 +240370,23 @@ epY vWe kIt kMY -wRc +omT lha -kAK +iLY iLY iLY bxa pXY pXY -vyU -vyU +pXY +pXY xLS bln +chb bln -tCr -bln -tCr +lSu bln +chb bln bln bln @@ -238212,11 +240540,11 @@ bZx bZx bZx bZx -snv +gYm krQ skZ bWn -eOK +nch xMX xIz bIc @@ -238233,11 +240561,11 @@ pAZ wtj lBD bcN -bQV -hIS -bfl +qzy +adP +adP dxK -wvw +wzk wzk wzk wzk @@ -238294,14 +240622,14 @@ kbJ kbJ wkw yaL -wrc +saO eVV rat dNG sth aUj aUj -stI +rNZ iLY iLY lqE @@ -238311,13 +240639,13 @@ pXY vyU uOE bln +chb bln -tCr -bln -tCr -bln +mQb bln +chb bln +mQb bln bln wNO @@ -238446,15 +240774,15 @@ aWk diC bJj lyG -jko +teq bXy feJ xWb jDM brx rai -twP -sPK +amn +hzG wZD iDq bln @@ -238469,11 +240797,11 @@ bZx bZx bZx bZx -snv +gYm krQ gYp bWn -lvm +iUO egL ssF pSu @@ -238491,7 +240819,7 @@ mQb bNy qWZ oVR -jOi +apo oVR dxK xVq @@ -238505,12 +240833,12 @@ dkb kmi iYb xaA -vXV -wjv +ovx +gMq pec fJl xMR -bJy +fYE cpm dnq ylU @@ -238518,9 +240846,9 @@ dnq paM paM hcL -fUI +jqT hdj -ssr +jqT hcL paM paM @@ -238532,7 +240860,7 @@ pRj pRj daS mNY -prF +gFI bdR xaI xaI @@ -238558,7 +240886,7 @@ ycB qtj qtj aUj -kAK +iLY iLY iLY bxa @@ -238567,14 +240895,14 @@ pXY pXY pXY fcP +lSu +chb bln -bln -tCr -bln -tCr -bln -bln -bln +uer +mQb +bvb +tMa +mQb bln bln wNO @@ -238715,10 +241043,10 @@ fDc eGA iDq jSt -kvh +mfH wPN -tCj -sDl +xAs +jbe sDl sDl bHI @@ -238726,11 +241054,11 @@ bZx bZx bZx bZx -snv +gYm krQ thI bWn -oQE +tsz xMX hSl ueS @@ -238747,9 +241075,9 @@ pAZ stJ fsm qWZ -aDZ -mpP -uLp +lvA +gKU +aoW dxK fbw hue @@ -238767,7 +241095,7 @@ ool jRC cgC jaq -cua +vvT cpm dnq ylU @@ -238808,14 +241136,14 @@ yaL yaL yaL yaL -sSJ +pmi bTF nHe jDP wTg -jWJ +bRj gyR -clG +fhX kAK iLY lqE @@ -238825,11 +241153,11 @@ pXY pXY uOE bln +yfW +jKQ bln -tCr -bln -tCr -bln +mQb +ebW bln bln bln @@ -238983,7 +241311,7 @@ bZx bZx bZx bZx -snv +gYm krQ gYp bWn @@ -239001,14 +241329,14 @@ xhw eJe pXn pAZ -nyE +jDB qWZ qWZ qWZ -ldT +wrk qWZ dxK -wzk +cct hue xit wfK @@ -239018,7 +241346,7 @@ iYb iYb iYb iYb -rpu +kFW ybI nnR tuz @@ -239026,11 +241354,11 @@ eRZ qpZ rAA cpm -mpy -sYu -ckc +ooV +bwD +qdI paM -sqq +pdg nBk nBk oSY @@ -239038,7 +241366,7 @@ nBk nBk aCX paM -gZk +tUG jZU uFh hwx @@ -239061,7 +241389,7 @@ mNY akL tvF tvF -aYS +qya gTK ruO fKe @@ -239070,10 +241398,10 @@ aQW pVK wRd gGt -yhC +uJR rIX -kAK -nRV +iLY +lqE fcP cSx vyU @@ -239082,14 +241410,14 @@ vyU vyU fcP bln +pMM +mQb +lSu bln -tCr -tCr -tCr -bln -bln -bln -bln +fYT +tTO +mQb +mQb bln wNO wNO @@ -239240,27 +241568,27 @@ bZx bZx bZx bZx -snv +gYm gMK huT bWn -exq +ukJ xMX vvu joh mdM -bZB -rDq +wBa +fSP iMw -wZp +rRd bWn piB eJe utR pAZ -lBD +kIL qWZ -qHD +vij bMZ paK aVH @@ -239288,7 +241616,7 @@ ylU bep paM xxQ -nnM +gMl kzO gdP ykL @@ -239336,17 +241664,17 @@ aZH fDn fDn gka +uMs +mQb bln +fPc +mQb bln bln bln +chb bln -bln -bln -bln -bln -bln -bln +mQb bln wNO wNO @@ -239487,7 +241815,7 @@ iDq iDq ciG mfH -sDl +jbe sDl sDl sDl @@ -239497,7 +241825,7 @@ bZx bZx bZx bZx -snv +gYm lwO vTg bWn @@ -239521,7 +241849,7 @@ xCv vWL nci tPC -uks +xkI gnM aHW clP @@ -239531,7 +241859,7 @@ clP clP clP clP -rya +rwn eWc nDA vvi @@ -239539,7 +241867,7 @@ xpJ vYs suL gCn -hUl +qIx dZQ aNs dnq @@ -239552,7 +241880,7 @@ nBk nBk iiT paM -jZU +wxY hFi bts nlr @@ -239600,10 +241928,10 @@ gka gka gka gka +aao +bvb +tMa bln -tCr -tCr -tCr bln wNO wNO @@ -239737,7 +242065,7 @@ feJ uGr uGr iDq -pLx +jBr lAL gPp iDq @@ -239755,10 +242083,10 @@ psN psN psN wqx -gEb +cJd gYp bWn -tEn +bTJ cGt wRI qdE @@ -239768,22 +242096,22 @@ ntK mQb bln jII -gMx -lsH -jJr +ooV +wTL +eff qWZ qWZ qWZ -bpf +svR xRw nYv qVp xKJ -rmM +veH pZh oYI aCk -uPY +wzk knU kPv dxK @@ -239837,7 +242165,7 @@ dth bTF wRd gka -swe +igw lAu vWr vWr @@ -239858,9 +242186,9 @@ lhC maY gka bln -tCr +chb +bln bln -tCr bln wNO wNO @@ -240034,7 +242362,7 @@ grA fwQ nOH gxU -jJR +gZq ybv ybv ybv @@ -240114,10 +242442,10 @@ brY lhC lhC gka -bln -tCr -bln -tCr +lSu +chb +uer +mQb bln wNO wNO @@ -240264,7 +242592,7 @@ sDl sDl sDl psN -eUR +xir nTp nTp kxp @@ -240272,7 +242600,7 @@ kQc cxz nnx bWn -sfz +rkV npu oMS npu @@ -240282,7 +242610,7 @@ nSo jII pAZ pAZ -dnq +rLl eJe utR tmQ @@ -240315,7 +242643,7 @@ dnq vrX pua paM -pEY +wik vJI uud gdP @@ -240323,7 +242651,7 @@ pjl uOn msU paM -khu +lxi bbo pbE vja @@ -240346,7 +242674,7 @@ mNY ixG aPf dzJ -neV +drd twt mEw sSJ @@ -240372,9 +242700,9 @@ rQf mUs gka bln -tCr +chb bln -tCr +mQb bln wNO wNO @@ -240521,9 +242849,9 @@ sDl sDl sDl psN -nUI +riB dkY -nCW +wLc hzY bRn fng @@ -240537,7 +242865,7 @@ bWn bWn mae pAZ -usz +mDy eZL ljx nxW @@ -240547,7 +242875,7 @@ qXF dMX gER nOH -bQd +xVc ybv xzT cHO @@ -240560,7 +242888,7 @@ bln kta jLa rBL -fYF +uMN clE jQI qnr @@ -240590,13 +242918,13 @@ dPT pRj pMu gVD -gSQ +kPu ajF qwe uJH -hHF +iAc roj -rIr +gXN pRj kCn mNY @@ -240608,7 +242936,7 @@ gTK myX sSJ gka -eEh +oAs fab eDC uIV @@ -240628,10 +242956,10 @@ viH viH rQf gka +mQb +bvb +jHb bln -tCr -bln -tCr bln wNO wNO @@ -240786,11 +243114,11 @@ pfe aeQ mdX pfe -ktK -fGr -olt -qSP -eSm +oyd +vws +mjf +wEb +sIZ pfe pfe jII @@ -240857,10 +243185,10 @@ xtQ hIH kCn mNY -wiM +hFJ tMD ehJ -xFM +fMt twt tXB sSJ @@ -240868,7 +243196,7 @@ gka uXC fab fNv -iEd +wuo wuo nnw spv @@ -240885,10 +243213,10 @@ lhC lhC lhC gka +mQb +chb bln -tCr bln -tCr bln wNO wNO @@ -241013,8 +243341,8 @@ lQc lQc nbp mgU -nbt -ioi +bvX +ccF fad azx tDw @@ -241038,11 +243366,11 @@ iiH teP teP teP -kGJ +qbk gMK fng rHc -oOt +mxF uog vVY uog @@ -241050,7 +243378,7 @@ uog nfU bzI uog -qzU +yaF mny dnq wmK @@ -241075,8 +243403,8 @@ kta kta dHa kta -wal -wDi +kta +cPK qQC jtN aYq @@ -241085,7 +243413,7 @@ kta qQG nlT krv -ylF +hyc fdy fdy fdy @@ -241105,7 +243433,7 @@ cLN cLN cLN fdy -oXc +eKb nzq cLN cLN @@ -241114,7 +243442,7 @@ kKH pRj eAj sro -apL +dgp qkT kzA whW @@ -241126,7 +243454,7 @@ glc fab ktw bny -qDj +jQe xBp bYw bYw @@ -241143,9 +243471,9 @@ phL lhC gka bln -tCr +chb +bln bln -tCr bln wNO wNO @@ -241269,7 +243597,7 @@ bln npb bln lSu -rhf +hIO rPP eNl vbF @@ -241299,7 +243627,7 @@ vDb vvh vPC pvm -tJZ +dMi cvC kQc iYG @@ -241307,7 +243635,7 @@ kQc kOV kQc kQc -kkr +iJN gOy gOy fKF @@ -241315,7 +243643,7 @@ qjg utR tmQ lkI -smI +lvl aog ktl dEI @@ -241342,7 +243670,7 @@ xXt gET gMM jba -iot +mKC oQp oQp lCY @@ -241362,7 +243690,7 @@ oQp oQp oQp oQp -lEK +mxX oQp oQp kPg @@ -241373,7 +243701,7 @@ fFy mNY bTq xUP -fQU +gRt rpF twt fcg @@ -241399,10 +243727,10 @@ efE kJU lhC gka +tMc +chb bln -tCr bln -tCr bln wNO wNO @@ -241526,7 +243854,7 @@ bln npb bln bln -rhf +hIO vyd ePr kGc @@ -241536,7 +243864,7 @@ mgU kqc kqc kqc -wAq +jct jaw xwf aPd @@ -241550,21 +243878,21 @@ bgN bgN uwB lvS -xLO +dYA fGM -aac +hrO nUJ qbA csB -stB +gtB tny dLo fBF xUU wYZ aKI -xUU -avd +peq +obb qJV vBh fiE @@ -241573,9 +243901,9 @@ utR tmQ axf kzD -kJP +nsj lhv -heS +sDV ybv xwm vzT @@ -241589,8 +243917,8 @@ kta kta eoJ kta -wal -tEK +kta +lEJ qQC hNg rFD @@ -241599,8 +243927,8 @@ kta vtz fuM vXh -jZB -rWn +hyc +tdK mJa gDV fxl @@ -241618,8 +243946,8 @@ eQX rWn rWn gDV -cSP -dAk +tro +eKb jRV uOL gQq @@ -241638,9 +243966,9 @@ wfn ras fkj fab -nsK +iag dfq -ghj +ein xBp imd imd @@ -241656,10 +243984,10 @@ lhC gsk lhC gka +lSu +chb bln -tCr bln -tCr bln wNO wNO @@ -241783,12 +244111,12 @@ bln miY oot oot -rhf +hIO jDt wtg diq -ehy -vtZ +uet +ptr mgU fUj kcc @@ -241884,20 +244212,20 @@ hOc bID qnC vkz -uoF +aom pcg deD -fLH +unG qnC isX eBI oEt gka -gFR +vKy fab fyQ wuo -vuK +wuo nnw cDK uvk @@ -241914,9 +244242,9 @@ lhC lhC gka bln -tCr +chb +bln bln -tCr bln wNO wNO @@ -242040,9 +244368,9 @@ bln npb bln bln -rhf -rhf -rhf +hIO +hIO +hIO bUx bUx bUx @@ -242070,7 +244398,7 @@ jOQ jOQ jOQ jOQ -cyZ +deY deY fhz deY @@ -242079,7 +244407,7 @@ deY deY deY wAZ -oAz +tVd uLC xQg fwm @@ -242132,7 +244460,7 @@ vvv tTV jtA bID -rlL +obo miw gCK cMd @@ -242140,13 +244468,13 @@ lHC vzU ahm qnC -xBh +bjK qGQ sOE wcx -mGV +fVy qnC -sIp +nAw uif wRd gka @@ -242171,9 +244499,9 @@ vBm lfp gka bln -tCr +bvb +hZu bln -tCr bln wNO wNO @@ -242338,7 +244666,7 @@ skl skl pAZ pAZ -dnq +rLl gOy utR tmQ @@ -242397,7 +244725,7 @@ dcC jGB akz sCA -aSw +mta ojv bAT eri @@ -242427,10 +244755,10 @@ rQf rQf mUs gka -bln -tCr -bln -tCr +mQb +chb +mQb +mQb bln wNO wNO @@ -242642,7 +244970,7 @@ oyj gwK nEV bry -fDM +vPc fLq hro tKi @@ -242656,9 +244984,9 @@ wHj mBB juH ojv -hut +lqi mDw -jDT +tbH qKQ aTj uif @@ -242684,10 +245012,10 @@ fyR lhC lhC gka -bln -tCr -bln -tCr +mQb +chb +uer +mQb bln wNO wNO @@ -242828,7 +245156,7 @@ kpj fGq eig jNp -sDl +jbe sDl sDl sDl @@ -242852,18 +245180,18 @@ vXU drZ yfF jII -gMx -oas -jJr +eff +kxA +eff qWZ qWZ qWZ -dWX +aCP wKI iFs qVp lpM -mjs +slP hsx hpR pIk @@ -242921,7 +245249,7 @@ rGu eZO wRd gka -xNn +lzJ snO pIm vWr @@ -242942,9 +245270,9 @@ pMC qWJ gka bln -tCr +chb +bln bln -tCr bln wNO wNO @@ -243080,7 +245408,7 @@ kzw kzw cAC xAQ -voA +iMg jNp jNp jNp @@ -243091,7 +245419,7 @@ sDl sDl sDl skl -jOQ +uFS skl nOl oCF @@ -243102,24 +245430,24 @@ ygB mJO oCF ygB -bLa +bSW oCF ygB lBD jII jII jII -ifd +aVr xwC utR pAZ bln qWZ -oxe +bGc vmj aqB pVq -nVZ +rkI oRk mvc mvc @@ -243127,9 +245455,9 @@ rAW kwz ghJ uEm -sqU +aEz lpM -klP +rEo euf jzn mhQ @@ -243166,7 +245494,7 @@ bDz rSC inE oPU -wuV +xpc qnC qnC sCA @@ -243198,10 +245526,10 @@ gka gka gka gka +aao +bvb +tMa bln -tCr -tCr -tCr bln wNO wNO @@ -243351,28 +245679,28 @@ skl jOQ skl ygB -xkp +gQI ygB ygB -qBd +ugX ygB ygB -lOz +nJH ygB ygB -oTh +rsV ygB fEZ ygB -hXm -fZO -uLR +tSb +aab +dcI sNI bUH pAZ -wXn +hLw qWZ -eWP +ydk tGF iUT aVH @@ -243385,12 +245713,12 @@ hCV nkb ptB mvc -olH +lzb anu jly fXb mhQ -eeq +oYN jUD nZb lRf @@ -243406,13 +245734,13 @@ uwO rSx kRP kRP -lSw +uFV cAR kNk tmA bNE hht -gMN +hxe xnE tvd egV @@ -243425,13 +245753,13 @@ vzU pZn bBd xSv -aIg -rjh +gyR +lLD xZl qaF pna -aIg -ktx +gyR +cod uif jKe wRd @@ -243454,9 +245782,9 @@ haC haC haC haC -qCB -bln -bln +hso +lSu +chb bln bln bln @@ -243618,20 +245946,20 @@ rMN alO alO qCI -xKT +fhg alO -qhF -kVj -kVj -qsY +fEe +hYD +hYD +waU xwC kKX pAZ -odi +luG qWZ qWZ qWZ -tUO +qKn qWZ lpM xxx @@ -243645,16 +245973,16 @@ xLF lpM oGQ wKw -vFb +mZT mhQ hUV aks nLH xex mhQ -ufw -rpG -jtY +cBk +kdA +reb xVK tfx tyK @@ -243673,13 +246001,13 @@ guU ayq hpI bID -sSS +iKh rOU -rcN -qxy -siz -iUx -kTQ +qXt +jEo +fEL +boX +vjQ lCD pNO nFc @@ -243705,16 +246033,16 @@ bEa dCy dMK gka +nce bln bln bln bln bln -bln -bln -bln -bln -bln +lSu +hAM +sds +ntK bln bln wNO @@ -243877,7 +246205,7 @@ iPm iPm iPm iPm -mVW +pcx hay cfr dct @@ -243887,9 +246215,9 @@ pAZ wtj eJK qWZ -kjY -bCW -uLp +kGe +lWd +dOF lpM byx aJN @@ -243925,32 +246253,32 @@ kQf hDh vnt keP -xJi +qTa ctr avk gxP bID -tZO +phw uCK -nKj -fwW -uxp -afK -bOy +gJN +ckX +iub +inn +oUw vfU pdV -hqV -pie +gyR +psu uGT qWy pna -hqV -uge +gyR +jmD xrg dxn aPD aPD -vlb +rHx fKf pst bWQ @@ -243963,13 +246291,13 @@ uYO rOe gka bln +mQb +mQb +lSu +lSu +mQb bln -bln -bln -bln -bln -tCr -bln +chb bln bln bln @@ -244114,7 +246442,7 @@ nmq kqG pVL pVL -sDl +jbe sDl sDl skl @@ -244132,12 +246460,12 @@ wVD uja uja uja -bsn +iyJ uja uja uja uja -vdO +uHN vrX utR pAZ @@ -244145,7 +246473,7 @@ eAu hFr qWZ oVR -sNQ +lfo oVR lpM dbs @@ -244172,7 +246500,7 @@ vXh cvS ewi cvS -eUI +svV kwX gDp egp @@ -244182,7 +246510,7 @@ pJQ pJQ pJQ keP -tJv +vei bTx nvW xxs @@ -244190,9 +246518,9 @@ bID bID bID bID -cfT -kvH -uIz +nnp +res +eLM bID bID bID @@ -244206,10 +246534,10 @@ gyR gyR gyR aPD -wqc +lQe umz sbK -wij +tOk gka gka gka @@ -244219,15 +246547,15 @@ fDn fDn fDn gka -bln -bln -bln -bln -bln -bln -tCr -bln -bln +ujK +gSd +lej +ujK +ujK +ujK +yhY +bvb +ftY bln bln bln @@ -244381,29 +246709,29 @@ skl eFW rlV ygB -xEJ +jMx gJC akD qIU -keL +uUM uja jHG -yjF +jcF vVw -yjF +jcF qSh hsB uja -jcy +ltY iuv utR pAZ fsm efv bcN -jYd -ugI -lIs +yan +fVf +epC lpM vPF uEm @@ -244418,7 +246746,7 @@ sIt sIt sIt log -aTG +kpA hGh raf raf @@ -244428,7 +246756,7 @@ iuv pDi cvS cGA -rgi +cGA pNq lBS aTp @@ -244467,23 +246795,23 @@ cht eiI bum wWM -vvf +hVf pcI ehP uDi -uLr -bDl -sEB +aPD +tfk sEB +qVo +chb bln +lSu bln bln bln bln bln -bln -tCr -bln +chb bln bln bln @@ -244637,18 +246965,18 @@ jOQ skl dxh xri -vAo +ttI cmL lLf asa kCu -gHj +uKR uja -sfD -gjT -szK -upx -uOy +lsF +pBs +eYF +sNj +fKR hsB uja ise @@ -244658,11 +246986,11 @@ pAZ bln lBD pAZ -mDv -sUi -tEd +hZf +rYE +xUg lpM -eEC +luk aTw iFL hpe @@ -244674,7 +247002,7 @@ dGU wdg bVv wdg -sTV +ukR pwf oUL qKz @@ -244707,7 +247035,7 @@ uAK wSo wSo vZt -iHm +qhI rXe hHN bJD @@ -244732,16 +247060,16 @@ lzy sEB sEB sEB +xhA bln bln +uer bln bln -tCr -tCr -tCr -tCr bln bln +chb +uer bln bln bln @@ -244895,14 +247223,14 @@ skl ddr ccp ygB -kCb +vrD gya tfO urd xTU uja aty -gjT +pBs uja uja uja @@ -244933,11 +247261,11 @@ sIt sIt log mhQ -rXN +pOH mhQ mhQ mhQ -dnq +rLl jtE vXh cvS @@ -244946,7 +247274,7 @@ bRH caZ hgK caZ -gDp +rqN btg pGo uoE @@ -244958,7 +247286,7 @@ jlV hHN hHN iRw -cYf +vuf bSG uop tHj @@ -244981,26 +247309,26 @@ daM pyM kxY ccz -okk +xCs lVm -qrm +aPD mzz aPD bDl -sEB -sEB -bln -bln -bln -bln +ooL +qVo +chb bln +lSu bln +mQb bln -tCr bln bln +chb bln bln +mQb bln wNO wNO @@ -245141,13 +247469,13 @@ lbk sDl sDl skl -yhL +vaW deY skl gDz xlH kbN -dym +nzn skl ygB ygB @@ -245159,25 +247487,25 @@ maB fpa uja oiz -gjT +pBs uja kDz -xVc +mBm twU uja -bvu -eXZ +uPT +poL vBh -qMf -qMf -qMf -qMf -qMf -wVR +wRk +wRk +wRk +wRk +wRk +cRu mfW -toT +vKZ mfW -aeF +uxm eta brp mfW @@ -245186,12 +247514,12 @@ ccs amN hHu tZZ -vBh -vBh -dqs +mfW +mfW +oyY aVw gxq -rlb +aVw vBh vBh vBh @@ -245203,7 +247531,7 @@ iGa caZ vpR caZ -oDk +sqN kRP fwO fwO @@ -245219,7 +247547,7 @@ cEw cEw cEw cEw -rII +woc fwq hHN lRR @@ -245243,21 +247571,21 @@ iaY duh duh duh +mQb bln -bln -sEB -bln -bln -bln -bln -bln +lbc +bvb +jHb bln bln -tCr +mQb bln bln bln +chb +mQb bln +mQb bln wNO wNO @@ -245388,7 +247716,7 @@ ihb bnM iRM kkl -tAK +xiq gUs ykw lbk @@ -245412,18 +247740,18 @@ ygB ybE eKJ ulk -rgM +ugZ uja uja uja -jnh +kqP uja uja uja hsB uja -uuh -lyh +ehq +kOq iuv vrX iuv @@ -245432,7 +247760,7 @@ iuv iuv iuv vrX -maX +uJN iuv xNF ylU @@ -245445,7 +247773,7 @@ iuv iuv iuv iuv -rpG +uJN iuv iuv iuv @@ -245474,7 +247802,7 @@ dUv cEw rLs xUV -xmL +rLs cEw cmJ rwC @@ -245500,21 +247828,21 @@ dFo kKy duh bln +ntK bln +lbc +chb bln -sEB -bln -bln -bln -bln -bln +lSu bln +mQb bln -mVm bln bln +chb bln bln +mQb bln wNO wNO @@ -245665,44 +247993,44 @@ ykA skl lQr lkj -ipx +iov seH lvY mmA -apC +whk uja -vmp -vmp -uNp +aJi +aJi +eCT uja oUO -hxB +msG xWG uja kyL -eph +hNU kyL kyL -jnU -rbh -kZm -njM -rbh -rbh -qPD -jIY +rwZ +oTu +ucu +adv +oTu +oTu +srw +kfr dKW ylU lDo dnq iuu dnq -dnq +ebH dnq apb dnq bep -mpy +srw dnq dnq ivo @@ -245757,19 +248085,19 @@ lhO fFi duh bln +mQb bln +lbc +chb bln -sEB -bln -bln -bln -bln -bln +lSu bln bln -tCr +uer bln bln +bvb +tMa bln bln bln @@ -245912,33 +248240,33 @@ bln bln fsm bUx -uek -wph +buR +kVe fnS skl -qpU -xsm +hir +kAT jOQ skl pOo piC ygB -fXo +noJ aos -cUH -rfW -beF -vme -lrE -gUw +uWo +iUs +ozk +nsu +fdV +kux uja uja uja hsB uja mdZ -hMM -lEb +ros +bnm mdZ exw hmb @@ -245948,9 +248276,9 @@ hmb hmb exw tLF -gIf -dBA -gIf +lFb +qRE +lFb azw azw mao @@ -246014,20 +248342,20 @@ alb nTL cHf qHg -tmR -bln -sEB -bln -bln -bln -bln +umg +mQb +lbc +chb +mQb bln bln bln -mVm bln +mQb bln +chn bln +uer bln bln wNO @@ -246169,60 +248497,60 @@ bUx bUx bUx bUx -maM -aXx +oBV +aXq fnS skl -eoV -npZ -qQV +bVx +idP +irn skl gmW gmW gmW ltV -tip -gxT +lAW +ksl ltV uja -mqy -mqy +tXk +tXk tUn uja jlP -azt +dHg twU uja -eUC -yjr -nvw -nPS -eav -bBa -iiB -ycE -iuE -gWl -hKn -lHi +dka +fKV +jLK +tJY +phr +eik +cby +otW +jLc +lvb +xWk +sTH lso dEV bai azw jqE kZb -tSK +cJk azw -fMg +xxi fqW -pHS +sfd nCb kWL cvS pjF nhw cvS -bEB +aMh kNA mOo jPh @@ -246270,20 +248598,20 @@ njm njm njm duh -sEB +mZf ipM bln -sEB -bln -bln -bln -bln -bln -bln +lbc +chb +mQb bln bln +lSu bln +mQb bln +chb +mQb ozo bln bln @@ -246348,7 +248676,7 @@ wNO wNO wNO bln -aaX +qzn vbG tkU tkU @@ -246420,7 +248748,7 @@ fhu bLI ykw skl -blX +ugA deY skl kQE @@ -246431,15 +248759,15 @@ skl hDV skl byP -blX -eHX -ceU -bZU -efU -qfJ -seB -mcT -xwL +ugA +hNp +tFI +eHb +hcs +bdp +nmH +tiI +hLW bVI uja uja @@ -246450,18 +248778,18 @@ uja uja uja uja -scG -cKJ -hJS -jMJ -nyj -fju -lvy -fLG -nxc -lgb -xre -lHi +sJC +aSM +fjN +xhV +mPl +ybb +fJS +hFR +rxJ +lGN +xul +sTH lso dEV bai @@ -246470,7 +248798,7 @@ rEp fTC blU azw -eul +bbO hhT vnN pQp @@ -246519,9 +248847,9 @@ qwF qwF qwF wYJ -bln -bln -bln +sEB +sEB +sEB kUu bln bln @@ -246530,19 +248858,19 @@ bln bln oxR bln -sEB -bln -bln -bln -bln -bln +lbc +chb +mQb bln +lSu bln -mVm bln bln bln +chb bln +uer +mQb bln wNO wNO @@ -246605,7 +248933,7 @@ wNO wNO wNO bln -fhB +liV vbG tkU tkU @@ -246677,48 +249005,48 @@ ekW vRN fEA uHF -jyE -jyE +wjj +wjj qdK eqq -ejY +krZ eqq eqq eqq eqq -mkM +xuL eqq -fjO +lrl qvh skl -erH +eFG ffZ vfW vfW mZK lvk -qiG -czo +gzI +gIN kKL -rDI +mBr kKL -uUw -cmK -css +pyE +suo +qZg rxY -cQp -dpj -uil -sHi +ryn +eDs +vTm +sxt shh -tjA +bHJ xgy xgy -ffr -nxc -lgb -uSE -hyQ +uYE +rxJ +lGN +ozU +fuc lso dEV kHI @@ -246727,7 +249055,7 @@ feU fTC qEj azw -tJV +rUQ orE aTE hMH @@ -246776,27 +249104,27 @@ sMg sMg qwF aPD -bln -bln -bln +nQr +sEB +sEB nyA +htd +uer bln -bln -bln -bln +mQb bln nFO -bln -sEB -bln -bln +mQb +lbc +chb bln bln +lSu bln bln bln -tCr bln +chb bln bln bln @@ -246933,56 +249261,56 @@ aML iLv hSJ ykw -fNz -wSc -blX -jee -blX -oCw +ygL +jTw +ugA +eym +ugA +aBK fhz -blX +ugA fhz -acg +vjg byP mOf -aYO +vHJ mOf skl -nJq +opt eOl -uOe -day -day -sRc -lPQ -szt +qFE +cGB +cGB +gsI +tLL +spy kKL kKL kKL -csZ -oPr -qGh +qUI +lik +tWj rxY -rra -iFz -nQm -ktY -gMi +jCK +jdV +bZm +uQc +mYR mpU -hbL +ryJ xgy -ivC -rRs -jik -lJW -lHi +faW +dHf +rWI +cOy +sTH lso dEV bai azw hnV fTC -xSu +nej azw azw azw @@ -247032,30 +249360,30 @@ kfa qCn tCB qwF +sEB +sEB +sEB +sEB +fdb bln bln -bln -bln -czY -bln -bln -bln +mQb bln bln nFO bln -sEB -bln -bln -bln -bln +lbc +chb bln +mQb bln bln -tCr bln bln bln +bvb +jHb +mQb bln bln wNO @@ -247195,60 +249523,60 @@ rFP rFP skl skl -utW -kiI +wYS +tYF skl -blX -tAt +ugA +goY skl -qMD +cFr cQx -qMD +cFr skl -eDy +fRq vfW -qrM +tBw nUj mpH -skQ -fyL -kcs +aAe +xjT +spy kKL -igH -yhV -dCV -gyP -utG +jZy +aqV +lgx +xay +lko rxY -bzF -dXR +ntE +rhG mdZ mdZ mdZ exw exw exw -kXS +dRB exw exw exw tLF -cwh +bDB dEV -whg +dYU azw -eub +xbB eyc qPt -uTc +goa biR dmI tdE veU -vEQ +pkf kRP kRP -oiB +rWH kRP pao cGA @@ -247280,7 +249608,7 @@ xGM gHl flH afR -rPn +iVg kqq cnq nqb @@ -247289,29 +249617,29 @@ uxx sMg sMg qwF -bln -bln +sEB +sEB hDG -bln -czY -bln -bln -bln -bln -bln -oxR -bln sEB +fdb +mQb bln +mQb bln bln +oxR bln +lbc +chb bln +mQb +uer bln -bln -tCr +lSu bln bln +ebW +mQb bln bln bln @@ -247452,44 +249780,44 @@ bln lBD bln skl -rWA +dow skl skl -gZV -ePd +giO +hFw skl -nSX -fgz -cnS +hED +jlk +pSF skl -cVa +eXf vfW -xqP +qfG iay dCF -skQ -fYX -pYD +aAe +fbM +kVa kKL -ddR +nWG kKL kKL -jZJ -pKo +bYC +isC rxY fzK -wPe +iIm fzK jRA -rMm -sCX -sPS -vvn -xsy -wBr +wXb +bOZ +gpM +jZj +luP +dWI lEO -wqt -jae +lRj +msE lso kjK bai @@ -247504,7 +249832,7 @@ tdE fBR fKi tHr -euR +rRA soK kRP nMN @@ -247546,11 +249874,11 @@ qwF qwF qwF qwF -bln -bln -bln -bln -czY +sEB +sEB +sEB +sEB +fdb bln bln bln @@ -247558,18 +249886,18 @@ bln bln nFO bln -sEB -bln -bln -bln -bln -bln +lbc +bvb +jHb bln bln -tCr bln +lSu +lSu bln +uap bln +mQb bln bln wNO @@ -247709,43 +250037,43 @@ ntK mQb bln skl -bkM -oWV +eZW +deY skl -lzc +vhF jPv -osN -pfy -lzc -lZP +rhv +dEL +vhF +vsx skl -aEx +hYL vfW -cWz -cCe -cCe -kkb -lPQ -fsO +sul +eGM +eGM +soI +tLL +erd kKL -uLZ -jyN +mfP +qgH kKL -mTL -uiV -ixp -edO -hjO +vJJ +awu +uzu +tbL +cEe fzK +sZB jRA -jRA -ptv -iBM -vYp -fWW -mMZ -bid -nzt +toT +spz +jHe +mPr +gOa +jKs +gDq lso lCi dEV @@ -247758,7 +250086,7 @@ azw fVK rGw azw -eiY +ePT tZm pBA aQZ @@ -247771,7 +250099,7 @@ esC eUI kRP qyR -bve +qyR kRP gDp cvS @@ -247800,32 +250128,32 @@ uQy swu swu swu -swu -swu -swu -swu -swu -swu -swu -bmT -bln -bln +dvZ +dvZ +dvZ +dvZ +dvZ +dvZ +dvZ +heE bln +mQb bln +mQb bln nFO -bln -sEB -bln -bln -bln +mQb +lbc +chb bln bln +mQb bln bln -mVm bln bln +chn +uer bln bln bln @@ -247964,46 +250292,46 @@ bln bln bln bln -gDh +stJ skl -tSd +sNL skl skl -koj +jOK deY -osN -hrd -vOd -mnn +rhv +eLN +iDe +dyA skl -ruX +gaC vfW eOl vfW vfW lvk -jiU -qVG -wpm -nBO -qPQ +crv +acN +mch +mzX +qBi kKL kKL -llm +tjG rxY -gFW -rrL -riB -nxj -gDY -crO -iBM -fVh -qlS -qSU +uWS +hjl +xBj +ddw +hjz +wqo +spz +eYS +arZ +eME hSq -pdC -pdC +jLt +ieJ vwO hHg jyp @@ -248017,7 +250345,7 @@ sEz jFZ uoV gnb -gTi +pZB whh pQL nCV @@ -248027,7 +250355,7 @@ kRP kRP kRP kRP -qyR +wCI qyR kRP gDp @@ -248054,34 +250382,34 @@ gtg cEw bCT kfs -sEB -bln -bln -bln -bln -bln -bln -bln -bln +kfs +kfs +qVo bln bln +mQb bln +mQb bln bln +yfW +jHb +mQb bln +uer bln cwn bln -sEB -bln -bln -bln -bln +lbc +chb bln +uer +mQb bln +mQb bln -tCr bln +chb bln bln bln @@ -248222,55 +250550,55 @@ bln bln bln bln -aHh +oUb ooL skl -lsh +cwT deY deY skl -edt -hqv -wHK +ygS +oGr +pDA skl -mOH +pyl uRo uRo uRo nCu cZt cZt -qtG +vnw kKL lli uar gAt kKL -nxw +jcs fzK -kQx -poV -ahh -ezk -dzD -fwi -tsu -bpv -hLy -tsu +mbm +dTa +sav +ymf +nuD +pQD +lsA +xmD +awe +lsA lEO -far -cql -gVh +atS +lmQ +lBB dEV bai azw -nNU +pdm vYH -nah +etv azw -cXu -frP +dnI +vHo oIJ nRd lwQ @@ -248281,8 +250609,8 @@ art tHr tHr tHr -bpZ -chW +xDX +qkR pBA xfb dpB @@ -248311,36 +250639,36 @@ gtg hpI qAT kfs +dtc kfs -kfs -sEB -bln -bln -bln +qVo +mQb bln bln bln bln +mQb bln +chb bln bln bln bln bln shH -vsI -sEB -bln -bln -bln +mjY +qVo +bza bln bln bln bln -mVm bln bln bln +chb +mQb +mQb bln bln wNO @@ -248482,9 +250810,9 @@ bln bln bln skl -fpF +cwH deY -hJF +ugA skl skl skl @@ -248492,44 +250820,44 @@ gmW gmW dGO dGO -tEs +kBc dGO dGO -tEs +kBc dGO dGO gmW gmW -tpZ -mGF +lgw +lJn kKL -mcQ -gNc -gNc -oPd -qhQ -qhQ -wGm -ptv -iBM -cxT -nFQ -iEY -ptO -wBa -cql -fqX +kAQ +jJA +jJA +sRw +vNU +vNU +tvt +peP +spz +qOG +dnE +gpr +izC +hku +lmQ +epw dEV -kIK +hjA azw pxV oQD vDh azw -fNA -eqp +aXg +bGq cTV -fHz +bOp lwQ qfi sEK @@ -248537,12 +250865,12 @@ eHg ahL wVw xyy -bCr +whU bYK srn pBA drH -vSx +tNz kRP gDp cvS @@ -248568,37 +250896,37 @@ uUH vuu xvj rCW -lfF +ygl fJe sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -tmR +oot +oot +oot +oot +oot +oot +oot +sjh +oot +oot +oot +oot +oot +pcb jrI -oaQ +iXg oaQ oaQ oaQ qHg -tmR -tmR -tmR -mVm -bln -bln -bln -bln +uAL +uAL +uAL +rzO +bvb +tMa +sMy +mQb bln wNO wNO @@ -248737,11 +251065,11 @@ bln fsm bln uer -yjo +bln skl skl -qiL -qiL +qFA +qFA skl fsm tlH @@ -248757,34 +251085,34 @@ knl knl knl gmW -ijw -bRO +aJa +gJD kKL -vto -kVo -jrv -qJy -iew -pqZ -wGm -ptv -iBM -fXF -nFQ -jxr +jOC +uWy +xBf +byJ +mNP +foI +tvt +peP +spz +pau +dnE +uTq izC -tNH -vbI -gVh +qiv +saF +lBB kjK -arZ +gdc azw mwF sbc qYV azw gIY -iBj +dDR mcW sFG lwQ @@ -248827,32 +251155,32 @@ loV kfs kfs kfs -sEB -bln -bln -bln -bln -bln -bln +qVo bln bln +mQb +mQb bln bln bln +chb bln +mQb bln bln bln bln +mQb +mQb bln bln bln -vsI +hMM mHR sEB tmR -tCr -bln +sEB +rrh bln bln bln @@ -248995,12 +251323,12 @@ bln bln stJ bln -bln +qtD skl -qjn -iRa +wMY +lWG skl -tlH +oFc tlH dGO knl @@ -249014,31 +251342,31 @@ knl knl knl dGO -ksR -rEH +jMu +duT kKL -giH -qiA -uiq -iPP -iew -qhQ -wGm -fwi -tsu -tZo -cxD -tsu +tdU +fXw +abZ +qfz +mNP +vNU +tvt +pQD +lsA +nwn +fSs +lsA lEO -szj -vbI -gVh +ksc +saF +lBB dEV bai hgh -czS +qlD fVo -qbd +etW rzS hgh pLt @@ -249050,7 +251378,7 @@ juw nji tkf ikz -oSQ +vyW tHr pBA pBA @@ -249060,7 +251388,7 @@ jbC kRP gDp cvS -sEB +rsh qwF qwF qwF @@ -249082,39 +251410,39 @@ sEB hpI loV kfs -bln -sEB sEB sEB -sEB -bln -bln -bln -bln -bln -bln -bln +qVo bln +mQb +mQb bln bln +mQb bln +yfW +jHb bln +mQb bln +mQb +mQb bln bln bln +mQb bln bln -sdr +tJK sEB tmR sEB -sEB -sEB -sEB -sEB -sEB -sEB +fAW +ajx +ajx +ajx +kKU +kKU mfD mfD mfD @@ -249178,7 +251506,7 @@ bln bln lBD bln -rST +xZq bln bln qRv @@ -249188,7 +251516,7 @@ hHG wNO wNO wNO -khz +pUa wNO wNO wNO @@ -249253,10 +251581,10 @@ bln bln bln bln -gbM -iRa -iRa -gbM +bxS +lWG +lWG +bxS tlH tlH dGO @@ -249272,36 +251600,36 @@ knl knl dGO uar -bXb +lby kKL -xFz -jFu -qRF -tbE -iew -kea -wGm -ptv -iBM -gkH -rji -oqB -oNN -kGD -kGD -rbE -woX +rAY +fYJ +qMF +jpg +mNP +qpm +tvt +peP +spz +tsu +uGe +fDf +mbw +rDN +qbG +qbG +onP jyp hgh -qit +kbS xxg -nDl +ehU uau hgh kBL xPT cxA -lka +bij vkD cey lux @@ -249349,28 +251677,28 @@ wvI wvI pwF wvI -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -bln -bln +nyZ +kKU +kKU +kKU +kKU +ajx +ajx +mgv bln bln +mQb +mQb bln jqx -vsI +jEK tmR -vsI -bln -bln -bln +jEK +ktX +mQb +uer bln -sEB +mZf mfD mfD xow @@ -249439,10 +251767,10 @@ lBD bln bln bln -xDQ -xDQ +wDS +wDS bln -khz +pUa wNO wNO wNO @@ -249510,10 +251838,10 @@ bln bln tlH tlH -gbM -iRa -iRa -gbM +bxS +lWG +lWG +bxS tlH tlH dGO @@ -249529,36 +251857,36 @@ knl knl dGO uar -wla +sVW kKL -eTT -ohP -kqo -qJy -iew -sBY -wGm -ptv -iBM -dpw -qMS -oVn -cKp -hKL +dBN +kOx +hye +byJ +mNP +aoO +tvt +peP +spz +sAt +bSp +jWm +tay +rRt lso -jqZ +mRy dEV -bai -xjg -wiO +eKI +hgh +hmE mnF -lKZ -xGh +tjv +xYS fCM qQx mcW cxA -lyl +bZI nMu wDe hxs @@ -249582,7 +251910,7 @@ lvG cvS cvS lvG -bVZ +cvS tYZ kRP wOn @@ -249598,35 +251926,35 @@ pzn wvI bBM mIE -mdQ +ldr hBE kJK -kmD -nDq +iZr +sHs jXr aLJ puf +dyg haC haC haC -haC -qCB -bln -bln +fOU bln bln bln bln bln +uer +mQb bln sdr dZX xcZ dZX swF -bln -bln -bln +xEn +mQb +mQb bln mfD khy @@ -249635,7 +251963,7 @@ ghY ccw cQL pbs -xHY +uvu bPc ptY ptY @@ -249643,7 +251971,7 @@ ptY ptY ptY ptY -vyt +dLL vyt vyt vyt @@ -249696,8 +252024,8 @@ lBD bln lBD bln -wUD -wUD +vOy +vOy bln wNO wNO @@ -249767,10 +252095,10 @@ bln tlH tlH tlH -uUq -gHL -iRa -gbM +aDM +aEj +lWG +bxS tlH tlH gmW @@ -249785,28 +252113,28 @@ knl knl hNx gmW -sDM +uKY gAt kKL -xcO -fco -fco -gua -qhQ -qhQ -wGm -xtH -xKq -umc -aGf -rvO +asN +bUy +bUy +gBJ +vNU +vNU +tvt +ulR +qjW +qmh +iuL +tii lEO -uLJ -reX +fPI +ghb mqq vSa fuY -clK +oXb pKb eTM vkG @@ -249815,7 +252143,7 @@ lUb vWm pbW sco -amJ +iBo lzM wbw ddu @@ -249840,20 +252168,20 @@ gDp gDp gDp cvS -cGA +muX kRP -uyU -gGC -heQ -nll +fYY +qwo +sOd +eUK ign ebr iJK ebr bzE dYI -vep -nDi +wvI +wTB xke ldr vhT @@ -249863,7 +252191,7 @@ gRI lwd mka wvI -msd +rnp wvI bln bln @@ -249874,11 +252202,11 @@ bln bln bln bln -bln +lSu bln sdr dZX -nto +gpB ote swF swF @@ -249895,7 +252223,7 @@ uVp sTx vyt vyt -yfT +vyt vyt vyt vyt @@ -249953,8 +252281,8 @@ bln bln lBD lBD -wUD -wUD +vOy +vOy bln wNO wNO @@ -250024,10 +252352,10 @@ bln tlH tlH tlH -uUq -gHL -gHL -uUq +aDM +aEj +aEj +aDM tlH tlH dGO @@ -250042,32 +252370,32 @@ aBf knl knl dGO -gdK -qgT +rVE +oqY kKL kKL kKL -kVq -pgv -uGe -byO -qMI -pba -ion -sft -pNi -eVi +sIb +uXd +iiE +oIj +quS +jNo +hvQ +gUv +tCk +fYz izC izC tLF -jgd +fqR qEM lso -dCs +ioE mJM jOz dEg -vBD +hmx hgh eei niu @@ -250084,7 +252412,7 @@ hRH dXi mmh ikz -piI +hTx cvS kRP kRP @@ -250109,7 +252437,7 @@ vXv hGs gOY ylM -vep +wvI jWt cXV nDq @@ -250118,25 +252446,25 @@ swx ldr ldr rSW -xgr -mVe +aHt +wvI fVE wvI +mQb bln +uer bln bln +mQb bln bln bln -bln -bln -bln -bln +lSu dZX tis -qci +dZX tWy -dqg +dZX swF swF qFu @@ -250210,8 +252538,8 @@ lBD lBD bln bln -wUD -wUD +vOy +vOy bln wNO wNO @@ -250281,10 +252609,10 @@ bln bln tlH bln -uUq -gHL -gHL -uUq +aDM +aEj +aEj +aDM tlH tlH dGO @@ -250301,26 +252629,26 @@ knl dGO uar lli -dwq -any +nkE +xwq kKL -vSu -iUi +mzf +blM fzK -orZ -gVX -dSs -dSs -dSs -iCS -vVA -gYN +cax +fFe +gcP +gcP +gcP +kJr +tpO +gpS izC -gdO +xHr lso vwO lso -dCs +ioE mJM obG dEf @@ -250356,7 +252684,7 @@ uep vsZ hnd kRP -lop +wCN don gJs gJs @@ -250366,7 +252694,7 @@ iJK ebr bzE pMq -vep +wvI bHu cAu xwc @@ -250374,17 +252702,17 @@ raA vRC nSw qUu -qUu +imJ fvR kiE fTB pwF +mQb +mQb bln bln bln -bln -bln -bln +uer bln bln bln @@ -250467,8 +252795,8 @@ bln lBD bln bln -rPp -rPp +dTI +dTI bln wNO wNO @@ -250537,12 +252865,12 @@ bln bln bln bln -bln +qtD kKL -oEC -gHL +cMr +aEj kKL -tlH +oFc tlH dGO knl @@ -250556,38 +252884,38 @@ knl knl knl dGO -xPf +bZW lRs tml kKL kKL -aft -jsR +uFE +xqk cpY cpY -rEY -xWI -wuc -qod -xWI -pLo -cGI +hhO +tLI +uoY +xqU +tLI +fNZ +fKZ cpY tLF -ivJ +nOj vwO -pxn -xjg -swI +gnT +hgh +ohb mTS obu mjI fCM -qPu -niu -uOW +dIL +hDq +tXc lwQ -ade +gkX oeW aTZ fle @@ -250604,7 +252932,7 @@ vSY ubq lfL gdz -isP +iPz cwu kRP kRP @@ -250614,7 +252942,7 @@ hlp cGA kRP npD -wfu +npD npD npD gGj @@ -250643,11 +252971,11 @@ bln bln bln bln -bln -bln -bln +ntK +mQb +mQb dZX -kJI +vGw fgU hPe vMA @@ -250659,7 +252987,7 @@ fQu aiY pnR xfg -rjH +uza iAk aRD hHb @@ -250678,7 +253006,7 @@ euc ujs mYh ogF -lIK +hfy uBi uBi lqz @@ -250723,14 +253051,14 @@ lBD bln bln bln -kPS +dHF hHG hHG hHG -khz +pUa wNO wNO -khz +pUa wNO wNO wNO @@ -250793,11 +253121,11 @@ wNO bln bln fsm -yjo +bln kKL kKL -odZ -odZ +wsr +wsr kKL tlH tlH @@ -250814,40 +253142,40 @@ knl knl gmW uar -hNK -bfy +gUa +uNN kKL -pOC -ncc -syd +rBz +sSX +pns cpY -gDB -sJg -sJg -sJg -sJg -sJg -sJg -kqP +vzH +uuO +uuO +uuO +uuO +uuO +uuO +guA cpY lkr lso vwO -nCz +fME nKa dqO icA joa dqO nKa -tWZ -niu +qYx +qWe agK lwQ lwQ bEL -sjX -moE +weI +syv bEL lwQ lwQ @@ -250857,7 +253185,7 @@ lwQ bEL lwQ qQp -bXT +gGI isP ePi rdG @@ -250865,7 +253193,7 @@ vQP rdG jzY xlh -jQt +hKY uep uep uep @@ -250879,9 +253207,9 @@ noR wDg rqD wDg -uin -vep -xEL +edw +wvI +ksb xyT jvR fFC @@ -250889,7 +253217,7 @@ nnn iIs iDQ msN -gVC +drK lyH isu lmy @@ -250901,8 +253229,8 @@ bln bln bln bln -bln -bln +uer +mQb dZX lIW fgU @@ -250918,7 +253246,7 @@ frq rlS cfe mXi -nDz +mzZ mRI bLz bLz @@ -251052,9 +253380,9 @@ bln efv bln kKL -xIh +uUp lli -eEr +sQS kKL kKL kKL @@ -251062,60 +253390,60 @@ gmW gmW gmW gmW -tEs +kBc dGO dGO -tEs +kBc gmW gmW gmW gmW -kav -lCO -oEe -omS -mTA -nbO -hxY +oOw +aOW +dXx +rOw +ctS +qjJ +nPc cpY -aMI -arW +mmw +oKX fkk fkk fkk fkk -spj -cmd -vrw -jlT +dkZ +dlH +aBP +ofl lso vwO -dKf +ePP nKa -kyW +dGq wKe vHf cZd nKa -mPG -ted +lIP +cJX krS -qkc +aOU mbB rDa mrB jQD slc -dMB -rjC +wZu +xza qjF pPO -wbN +qOj iyK -tOO +uzr qQp qQp -lWj +wjD rZm sOO lRD @@ -251137,15 +253465,15 @@ lmA oqc oAD xKX -vep +wvI pBI sCm -gGo -bTQ -xAm -qSC -ldr -oOx +xFf +kdC +kRw +fUW +jeR +pMN mgD oKL elT @@ -251159,21 +253487,21 @@ bln bln bln bln -bln +lSu +dZX dZX dZX dZX dZX -oOO iDp swF osm iqu fcu -uOk +vQz pnR oTS -oPv +uxG iAk mWw hHb @@ -251186,8 +253514,8 @@ pza pza pza pza -rcO -wLK +iHp +cFM mEx ujs mYh @@ -251310,54 +253638,54 @@ gsK kKU kKL cvF -xUt +sQS lli kKL -gDL +tRq iyY tlH -vww +uMW tlH dGO iyg hHq -aNj -xTI +hfd +syC gmW -abm -qyZ +cvH +kbL kKL -emF -pwz +soE +neE kKL kKL -vfw -xqa -rAx -skH -cdX -sHs -xQS +cvn +btK +aUt +vnA +ooG +oUp +syI xbn -tnz -gcf +hJo +vaL gtw -iZD -vrw -sLy +wAJ +aBP +xVo lso qEM pJC nKa -dhk +jWO cDT -iTE +rLL cAI cMN -uYm -kcj +met +idm krS -bna +ljB xtc wxH voj @@ -251367,7 +253695,7 @@ laD xPv mGO tAx -wbN +qOj grT lEo shy @@ -251388,7 +253716,7 @@ sZF sZF wDK npD -tZG +cbC nZH xbC dPj @@ -251398,30 +253726,30 @@ npD npD npD npD -fvX -fvX -cnh -cnh -oSw -ybF +mdI +npD +npD +npD +wvI +fTH wvI wvI wvI wvI vep wvI +mQb bln bln bln bln bln +lSu bln bln bln -bln -bln -bln -bln +mQb +mQb mwo swF eDh @@ -251548,73 +253876,73 @@ wNO wNO wNO wNO -reu -jas -jas -bYx -hzw -ike -jas -bYx -jas -jas -jas -bYx -jas -jas -cQE +hAM +kdS +kdS +eRE +qQk +cvJ +kdS +eRE +kdS +kdS +kdS +dop +kdS +kdS +kdS kKL -aPP +enY kKL kKL -xea -isj -gBs -lyv +eaQ +lqL +aiu +ijd iyY tlH tlH tlH dGO -ubK +brm uRo -aNj -udA +hfd +jDX gmW -gAG -wWB +bkR +pAX kKL -ddJ -rbp +hfg +hQW kKL -eGg -dSY -vlz -vlz -nvc -hXD -mMi -xnc +soR +yfg +odF +lia +dgR +haJ +tYt +nRW gtw -dpa -vlU +aoM +niO gtw -iZD -vrw -krE +wAJ +aBP +kNf lso cbs nGA nKa nTV jPl -bGD +jGJ kXM nKa -xXV +uze eYn wjL -wbN +niU iWP xIW lrc @@ -251624,10 +253952,10 @@ lCC iKl iKl xyc -dVw +sPJ bkV ree -mpR +lOV qQp tQc jbx @@ -251637,12 +253965,12 @@ tQc tQc qQp hRA -lal +dBb rkL cga api sZF -sKf +tKH wRr npD cmw @@ -251650,29 +253978,27 @@ nZH msT npD npD -hRe -hRe +ouW +aQj alq dFA sZF -nBQ -sZF -bln -bln -bln -bln -bln -bln -bln -bln +gTi +emT +wzv +oCE +gcT +gcT +lSu bln bln bln bln +mQb +mQb bln bln bln -uer bln bln bln @@ -251680,6 +254006,8 @@ bln bln bln bln +mQb +mQb swF jsq ben @@ -251805,8 +254133,7 @@ wNO wNO wNO wNO -ngh -bln +chb bln bln bln @@ -251815,50 +254142,51 @@ bln bln bln bln +mQb bln bln bln bln bln kKL -aXv -bSi +fOq +lli kKL -acm +tAN tDy kKL -tts +ftk iyY tlH tlH tlH dGO -nOI +vxW uRo -aNj -xBS +hfd +rsy gmW -akb +oiU xQU kKL kKL -qDk +kuJ kKL -gmt -cgd -kKn -vlz -lMe -gbC -vAW -cki -cki +cqb +aYu +gYT +lia +njj +qEn +tFe +eay +eay gtw gtw aHZ -nsH -vrw -jlT +ehL +aBP +ofl lso qEM xwz @@ -251873,13 +254201,13 @@ gOb gOb aSo aSo -cCD +gLn sZD lnC klc lDM -kNa -ica +dVS +bAj lDM klc rWR @@ -251892,40 +254220,34 @@ laD laD laD xLK -nHX +pDL hRA ist rkL uFz tFV sZF -edT -wRr +ecW +fed npD bPY rwe wGO npD -vMN -hRe -ves -dFA +umD +pgc +dws +dhR iye sZF -lNE -sZF -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln +xkr +gTi +cip +oCE +lSu +mQb +mQb +lSu bln bln bln @@ -251933,7 +254255,13 @@ bln bln bln bln +uer +mQb +mQb bln +mQb +uer +mQb bln bln bln @@ -251951,7 +254279,7 @@ wSw fPZ itl tQM -koX +itl itl qCU vyt @@ -252062,8 +254390,8 @@ wNO wNO wNO wNO -ngh -bln +chb +mQb uei tmR uei @@ -252078,11 +254406,11 @@ uei bln bln kKL -aPP +enY kKL kKL -jRt -fTn +eRf +lfU kKL kKL kKL @@ -252092,30 +254420,30 @@ mMb kKL kKL iyY -fvm +vFT kKL kKL kKL rCf -hlt +uOm kKL -iqA +rsf kKL kKL -tUm +tSF kKL kKL cpY -nvh -hDu -eLv -nbI -oaJ -rqQ -fhS -pAn +twn +nBt +jJQ +rlE +mBL +vjA +uDv +aFh cpY -bao +pxp lso brj mbk @@ -252128,15 +254456,15 @@ lQG oxU pxX bCf -kmf -qOW -hDC +wor +wor +mfX sZD vgx lDM -pjZ -vzN -oXq +dxO +omo +jdm xWT klc uiF @@ -252156,44 +254484,44 @@ lGs rfo vzs sZF -wUb -mlo +sKf +naF npD ebr iJK -iBz +ebr npD -gMT -tFt -hRe +olM +xUW +sKf tbQ -iye +sKf sZF ddA -vjZ -bln -bln -bln +sZF +sZF +sZF bln +quy uer bln +mQb +mQb bln bln bln bln bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln +hPv +ujK +ujK +hBf +eRE +ujK +ujK +ujK +iNl +ujK swF swF swF @@ -252205,7 +254533,7 @@ kCV bkr qOy pbs -rAL +nZN qMH ptY ptY @@ -252213,7 +254541,7 @@ ptY ptY ptY ptY -vyt +dLL vyt vyt vyt @@ -252319,8 +254647,8 @@ wNO wNO wNO wNO -vHT -bln +sAd +tMa uei tmR uei @@ -252335,47 +254663,47 @@ uei bln bln mMb -hAW -jVm -sON -sON +nJK +puz +kSc +kSc lRZ lRZ -ygP +tYS lRZ -wco +vjq lRZ lRZ -wco -leP +vjq +pbS lRZ lRZ -rmR -vXm +iLn +niE bMF -pns -uMj +pJi +ovz kKL -xUt -fKk +sQS +sna kKL -xOE +nFt kKL kKL kKL kKL kKL kKL -nXs +pcM kKL kKL kKL kKL kKL kKL -oFB -opH -oFB +glz +kjN +hAl vBG rMS pKw @@ -252387,16 +254715,16 @@ rZR bCf wor wor -kqN +qxG vFW noW -uvi +nOh bNH bNH rIc -tVB +gpR klc -tDA +ooy gsT eDH iYs @@ -252406,54 +254734,54 @@ dVc nfD sUT bIQ -fFJ +gib hRA npo woa -oiW -kho +uQj +htH sZF -sKf +akd mlo npD -ebr +tMS iJK cpl npD fWL -qUM -fZT +qHt +iiB dFA -axC +nhO sZF -uNw +awO vjZ +mQb bln bln bln bln bln bln +mQb +mQb +mQb bln bln bln +yfW +nTX bln +lSu bln bln bln +uer +mQb bln bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln +mQb +mQb bln oiy oiy @@ -252576,7 +254904,7 @@ wNO wNO wNO wNO -ngh +chb bln uei tmR @@ -252585,7 +254913,7 @@ bln uei tmR uei -bln +mQb uei tmR uei @@ -252593,49 +254921,49 @@ bln bln kKL kKL -tOe -rkm -fEY -nDm -kda +aeS +plI +whe +chc +dDz kKL -xUt -xUt +sQS +sQS lli -xUt +sQS lli kKL -tbK +kRV ssM lli -jRt +eRf kKL kKL kKL kKL lli -xUt +sQS lli -vYY -imk -feV -sus -tIL -nVO +uwE +tnu +eUU +sdf +vmO +eYm kKL tvZ kKL -vEh -nTP -kbu -bcu +kVv +wgo +lcs +eGg kKL -lso +rjP vwO pxn vBG -mQr -idp +ulL +kGm rZZ opc qPI @@ -252644,14 +254972,14 @@ cgs bCf wor wor -apt +kjP amE vgx lDM -kAZ +oXq gUg amv -cTJ +sxs klc aSo aSo @@ -252670,24 +254998,24 @@ tMO tMO tMO sZF -hil +nfF mlo npD wPE iJK pyY npD -vBa -vLo -hyL -tbQ +lYT +waF +jmY +ptp iye sZF -cBn +eZu vjZ +mQb bln -bln -bln +mQb bln bln bln @@ -252698,7 +255026,7 @@ iAf iAf iAf bln -bln +fPc bln bln bln @@ -252833,7 +255161,7 @@ wNO wNO wNO wNO -ngh +chb bln uei tmR @@ -252842,7 +255170,7 @@ bln uei tmR uei -bln +mQb uei tmR uei @@ -252856,8 +255184,8 @@ mMb kKL kKL kKL -qUo -pjM +fsJ +ekj nLY lli gAt @@ -252865,29 +255193,29 @@ kKL lIC lRZ pQa -eDD -nhv +rOv +fuf lli -pAW -jYI -mmf +kDO +wsk +hVR lli -uWf +obt xWM -brC +dku kKL nqn lHA -rfj +ddi kKL tvZ kKL -iYY -iIv -dig -pbF +pdB +oBD +lqM +aYk kKL -rjP +vpx qEM bbM vBG @@ -252914,7 +255242,7 @@ dDw qHz ekE fzo -czF +fGY qaU jtH qpb @@ -252927,16 +255255,16 @@ jDc tMO nMb sZF -qwO +oGN wRr npD ebr hcG -bEH +nZH npD vtr -mmC -iQw +giv +aQj dFA oMs sZF @@ -252944,8 +255272,8 @@ eZu vjZ bln bln -bln -bln +mQb +mQb bln bln bln @@ -253087,10 +255415,10 @@ wNO wNO wNO wNO -reu -xog -xog -raq +hAM +kdS +kdS +nyZ bln uei tmR @@ -253116,33 +255444,33 @@ bxe bxe mHB kKL -gEl +ycO kKL kKL aIE lRZ -cCR +rmP lli -mRN -xUt -gEZ -xUt -gEZ +pKX +sQS +qdq +sQS +qdq lli -gEZ -xUt +qdq +sQS unu -cOQ -vgU -kdw -qpQ +hxa +kXW +saC +xWr kKL tvZ cDw lli lli lli -iXB +nfE kKL cwO vwO @@ -253162,7 +255490,7 @@ ubk ndJ rHz fdY -xuM +vjN wXh xCQ ufN @@ -253176,7 +255504,7 @@ nmC cEo kQJ mFE -dRe +bdT bsi cmy nAN @@ -253184,21 +255512,21 @@ kCo ezf cnb sZF -sKf -wRr +uTV +fed npD npD -czO +nvh npD npD sZF -iqr +fzO sZF sZF sZF sZF eZu -sZF +vjZ bln bln bln @@ -253213,7 +255541,7 @@ weR lQO hJD iAf -bln +mQb bln wNO wNO @@ -253344,7 +255672,7 @@ wNO wNO wNO wNO -ngh +chb bln bln bln @@ -253352,7 +255680,7 @@ bln bln tmR bln -bln +mQb bln tmR bln @@ -253367,41 +255695,41 @@ bln vsI acE acE -wtX -eqJ -ktJ +acE +kXQ +gWV oBQ mHB gUY -rmR +iLn lli kKL kKL lRZ -hfG -xUt -tNb -dge -oBJ -xUt -tNb -rNV -hrA -fkq -vIL -feV -lVN -bBn -bIq +pEc +sQS +wfE +opU +ykd +sQS +wfE +qch +gyd +tTK +aXc +eUU +iCo +kiX +enH kKL tvZ kKL -xGi -fce -jzR +lne +rrg +atI fpA kKL -tXg +rtf qEM lso bGT @@ -253409,11 +255737,11 @@ vBG wvW moG vBG -ayR +rWg oMR -hsC +cNL vBG -uSS +eTY xrb qhN amE @@ -253422,16 +255750,16 @@ klc pgY hXU oRu -hIe +ccR uKj dDw -fWn +fsz qgu tYA vds mrD liz -rKX +txH mFE nEc klk @@ -253441,27 +255769,27 @@ sSj tMO jYy sZF -vwr -wRr -eZu -lcz +jPi +fed +nGv +hQK eZu -rHo +pGG sZF -bFS -eZu +dlS +pZZ xpT hEZ sZF -kCh +lGH eZu sZF sZF vjZ sZF -gar +lSu bln -fBN +xOk vYq iAf tUh @@ -253601,8 +255929,8 @@ wNO wNO wNO wNO -wHr -bln +sAd +ftY cnx tmR tmR @@ -253627,24 +255955,24 @@ kxv fIs kxv jju -lXC +qNZ lFG -rlH +qRo gxh gxh gxh kKL gAt -hfG +pEc gAt -xUt -gPo +sQS +hFm kKL kKL mMb mMb kKL -cjh +xds kKL kKL kKL @@ -253663,16 +255991,16 @@ vwO mqq ivB vBG -loG -iOu +dxq +jAG sZF sZF -puB +jbf sZF sZF sxw ayI -ktD +jdA mSM ozN sZF @@ -253685,10 +256013,10 @@ sZF fLQ mjH qLy -obr -xMM +vds +iCj nqd -ttO +eUN mFE fil pWY @@ -253698,34 +256026,34 @@ oqT tMO vIe sZF -xsA +gWh wRr -dDo +lMa +frz +dhv +pZZ +hLX +pZZ +pZZ sKf -tfG -eZu -iaz -eZu -sZF -nGk eGK sZF -eZu -eZu +cXR +aTc xpT bdx sKf cmq -gar -bln +lSu bln +lSu vYq fWS weR jdJ xVO jAQ -bln +mQb bln bln bln @@ -253858,8 +256186,8 @@ wNO wNO wNO wNO -ngh -bln +chb +mQb bln bln bln @@ -253881,7 +256209,7 @@ bln sEB acE acE -het +acE lQf swt xTp @@ -253889,41 +256217,41 @@ pDQ xBL wJM wJM -rlH +qRo kKL dnL -hfG +pEc kKL pVl kKL kKL -kbp +xUd tlH tlH kKL -diK +rEM kKL tlH tlH bln kKL -emx -vIL -fOg -kQH -snR +dYS +aXc +amW +qmq +kWV asg kKL kdF qGV hUx -bSC +xVv sZF sZF sZF sZF sZF -sKf +ayd wEV sKf sZF @@ -253931,7 +256259,7 @@ sZF sZF sZF lpC -uWp +sZF sZF pwV pwV @@ -253957,32 +256285,32 @@ sZF sZF hEZ mlo -fUx -sKf -sZF +lCc +lRK +xKx +bHc sZF sZF sZF sZF sZF sZF -sZF -eZu +sVA sZF sZF sZF vjZ sZF -gar +lSu bln -fBN +xOk vYq iAf qPY tUh xVO jAQ -bln +mQb bln bln bln @@ -254115,15 +256443,15 @@ wNO wNO wNO wNO -dqA -jas -jas -nIe +fYT +kdS +kdS +wSp bln uei tmR uei -bln +mQb uei tmR uei @@ -254149,7 +256477,7 @@ bqe gxh kKL hOu -hfG +pEc hJx lli fAF @@ -254158,7 +256486,7 @@ kKL mMb mMb kKL -cjh +xds kKL mMb mMb @@ -254174,7 +256502,7 @@ kKL xcy rvZ hUx -veq +cie aLX vng gNT @@ -254190,7 +256518,7 @@ xwM daR mQg lRW -hkt +qDm hkt hkt hkt @@ -254209,28 +256537,28 @@ sWs sXK xTQ sWs +rzV sWs sWs -sWs -sWs +rzV xTQ vwN +rzV +rzV +rzV +vtO sWs sWs sWs sWs -leE -sWs -sWs -sWs +skI osn -osn -cmv +nzN ktf sZF bln -bln -bln +mQb +mQb bln bln bln @@ -254240,7 +256568,7 @@ jAQ iAf iAf bln -bln +mQb bln bln wNO @@ -254375,7 +256703,7 @@ wNO wNO wNO wNO -ngh +chb bln uei tmR @@ -254403,47 +256731,47 @@ cvF lli kKL mwu -rlH +qRo kKL kKL -gRL +lwI kKL jhS tOX kKL -kaI -xIh -wvJ +hVz +uUp +khs kKL -cjh -emx -fOg -fOg -fOg -fOg -maw +xds +dYS +amW +amW +amW +amW +rkh igX igX kKL -neQ +mVS kKL kKL kKL fyZ hUx -veq +cie sZF eFS sZF sZF sZF sZF -npD +sZF eZi sKf mFj npD -bEo +eMn sou mZH sZF @@ -254459,32 +256787,33 @@ sKf sKf sKf ktf -dPP -sKf +tEe sKf sKf +lVS oLn -pqK +jgL gCu -jGY -wrU -sKf +elE +xJv +bge sKf +jgL sKf -yfS -mFj +jgL xpT -jPi -hil -ktf -sKf sKf +ktf +mFj sKf +jgL sKf sKf +jgL wRr wEV sZF +mQb bln bln bln @@ -254493,11 +256822,10 @@ bln bln bln bln +fPc +mQb bln -bln -bln -bln -bln +mQb bln bln wNO @@ -254632,12 +256960,12 @@ wNO wNO wNO wNO -ngh -bln +chb +mQb uei tmR uei -bln +mQb uei tmR uei @@ -254663,16 +256991,16 @@ qqB gxh kKL weF -hfG +pEc kKL moF cjI kKL pQa -erq -erq -oPw -srU +wWo +wWo +oPO +jPq xWM kKL kKL @@ -254682,18 +257010,18 @@ kKL kKL kKL kKL -nLs +meZ aJG sQE hwE hwE cMe -veq +cie uvt tlP wIg vzX -bJJ +gAz cyX sZF npD @@ -254701,7 +257029,7 @@ npD npD npD npD -mSv +hTu npD npD npD @@ -254719,8 +257047,8 @@ npD npD npD npD -tvx -qNX +npD +gDE npD npD npD @@ -254746,14 +257074,14 @@ bln bln uer bln +mQb bln bln bln bln -bln -bln -bln -bln +yfW +mQb +uer bln bln bln @@ -254889,8 +257217,8 @@ wNO wNO wNO bln -vHT -bln +sAd +tMa uei tmR uei @@ -254920,12 +257248,12 @@ hJx qFW kKL hOu -hfG +pEc hJx mzM hUi kKL -uar +eqP unu kKL kKL @@ -254939,13 +257267,13 @@ jSC bdS dtb hUD -bOh +nNi rvZ lso lso rCu cYE -tCG +hZT idi cZU kBl @@ -254957,8 +257285,8 @@ awK ppQ mrA mtI -axc -wgR +dAh +mYp owC tsr moL @@ -254967,12 +257295,12 @@ wHc aEA dng dAB -ubh -ubh -ubh -ubh -ubh -ubh +rHi +rHi +rHi +rHi +rHi +rHi qLY pnA qFp @@ -255000,15 +257328,15 @@ pHR wEV vjZ bln +mQb bln bln +mQb +mQb bln -bln -bln -bln -bln -bln +mQb uer +fPc bln bln bln @@ -255146,7 +257474,7 @@ wNO wNO wNO bln -vnS +uap bln uei tmR @@ -255177,13 +257505,13 @@ lli gxh kKL kKL -hfG +pEc kKL kKL kKL kKL kIl -nNI +cqN kKL eIk xry @@ -255198,11 +257526,11 @@ qMm hUD sOH hUx -rek +igt rek hUx rNQ -tCG +hZT idi aID gky @@ -255212,24 +257540,24 @@ cgZ uvt iBa pra -dyW +axZ mtI lUf keZ owC -jIP +pXt qOH -veX +jIP wHc -fPO +sgL pTU itt -ubh -ubh -ubh -ubh -ubh -ubh +rHi +rHi +rHi +rHi +rHi +rHi qLY baF fvk @@ -255258,16 +257586,16 @@ wEV vjZ bln bln +mQb bln bln +mQb bln +mQb bln -bln -bln -bln -bln -bln -bln +fPc +mQb +mQb bln bln bln @@ -255403,7 +257731,7 @@ wNO wNO wNO bln -ngh +chb bln bln bln @@ -255455,11 +257783,11 @@ qMm hUD pyJ lPh -rBp +hUD hUD ebb cYE -tCG +hZT idi aID ddk @@ -255474,19 +257802,19 @@ mtI uxj eNK owC -wAx +xGA jTZ -ftt +xGA wHc -oMT +xKk emK uvU -ubh -ubh -ubh -ubh -ubh -ubh +rHi +rHi +rHi +rHi +rHi +rHi qLY oCA fvk @@ -255507,22 +257835,22 @@ tgx tgx tgx tgx -ctF -tmR +qLY +xSE sZF rzL gea sZF +mQb bln +mQb bln bln bln bln +mQb bln -bln -bln -bln -bln +pMM bln bln bln @@ -255660,28 +257988,28 @@ wNO wNO wNO wNO -dqA -jas -jas -bYx -jas -jas -jas -bYx -jas -jas -wQN -bYx -jas -jas -jas -bYx -jas -nMD -bYr -bYx -jas -ike +fYT +kdS +kdS +eRE +kdS +kdS +kdS +eRE +kdS +kdS +xFn +eRE +kdS +kdS +kdS +eRE +kdS +gSd +lej +eRE +kdS +lVr kKL hTB sRI @@ -255714,9 +258042,9 @@ nVr wFO bzA hUD -lso +eaT byK -hMs +sDd bRd fqQ wIg @@ -255755,13 +258083,13 @@ hfc ocD diL qVz -pNY -edp -dcr -aRl -bCL -ofr -sBx +luD +tfl +dXI +pTT +eLm +jVs +hfc hfc jCE adY @@ -255770,19 +258098,19 @@ sZF pHR wEV sZF +mQb +uer +mQb +mQb +ntK bln bln +mQb bln +yfW +nwD bln -bln -bln -bln -bln -bln -bln -bln -bln -bln +mQb bln bln wNO @@ -255955,7 +258283,7 @@ kKL kKL gkP kKL -wKY +ilq eSn bJQ qCA @@ -255973,7 +258301,7 @@ vfo hUD lso cYE -nYY +fkw ult bsG wGF @@ -255998,7 +258326,7 @@ mfV xpA uHc cpg -gUX +gRA cpg cdl pMF @@ -256014,11 +258342,11 @@ dbr aFJ xJj xJj -lvh +klW iVT ogl -ffz -bzB +eyR +goe diL vTJ apT @@ -256027,20 +258355,20 @@ vjZ laf wEV vjZ +mQb bln bln +mQb +uer bln bln +mQb +mQb +fPc bln bln -bln -bln -bln -bln -bln -bln -bln -bln +mQb +uer bln wNO wNO @@ -256212,7 +258540,7 @@ nqn kKL gkP kKL -yfY +tgv huB ogd hff @@ -256230,7 +258558,7 @@ cLJ iQQ lso cYE -uIS +gAZ ult wjz tXh @@ -256242,7 +258570,7 @@ pKJ rIU tLM mtI -vtA +nRX sfY owC bYS @@ -256256,7 +258584,7 @@ jbU jbU jbU jbU -bFr +bkQ drr qhL qhL @@ -256286,18 +258614,18 @@ wEV vjZ bln bln +uer +mQb bln +mQb bln bln +mQb +fPc bln bln -bln -bln -bln -bln -bln -bln -bln +mQb +mQb bln wNO wNO @@ -256465,11 +258793,11 @@ tml kKL kLb qpd -oNy +obl kKL gkP kKL -flV +sTA ivH lVF pup @@ -256487,7 +258815,7 @@ bwl hUD uff cYE -hXt +gAZ ult hpC rIU @@ -256497,10 +258825,10 @@ irA uzi pdy fiS -uTL +agJ mtI -nRX -jVL +vtA +muP owC owC owC @@ -256509,8 +258837,8 @@ wHc mYq nyH lFW -rEd -pZA +jzH +mde gSN jbU wnX @@ -256520,10 +258848,10 @@ pvB ehd ehd ehd -wmX +ehd ooo rtn -qEv +huq vDu lva lva @@ -256542,15 +258870,15 @@ pHR wEV vjZ bln +uer bln +mQb +mQb +mQb bln bln bln -bln -bln -bln -bln -bln +yfW bln bln bln @@ -256731,7 +259059,7 @@ bla sil hUD hUD -fgm +pGT qok iZn xzd @@ -256744,7 +259072,7 @@ wND iQQ rvZ cYE -uIS +aPl ult vuq tfM @@ -256777,13 +259105,13 @@ wve hfc hfc hfc -iWI -kRI -nXp -gvM -kva -oXT -uPa +mns +hEP +wGt +dAl +hWt +ocJ +mBs ccQ aCb wAY @@ -256799,6 +259127,7 @@ pHR wEV sZF bln +mQb bln bln bln @@ -256806,9 +259135,8 @@ bln bln bln bln -bln -bln -bln +fPc +mQb bln bln bln @@ -256987,7 +259315,7 @@ kCg gjc bLQ vaE -tSt +hUD hUD hUD hUD @@ -256999,9 +259327,9 @@ sEi sEi naP hUD -jed -iIk -jed +tRo +iQa +tRo ult ult wBk @@ -257027,7 +259355,7 @@ gaT bZc qlO jbU -ily +hzb hdH qhL dkK @@ -257049,25 +259377,25 @@ vVP vVP vVP vVP -ctF -tmR +qLY +xSE sZF pHR wEV sZF +mQb +mQb bln -bln -bln -bln +uer bln vzD vzD vzD gQw gQw -vsI -bln +oMa bln +uer bln bln wNO @@ -257240,13 +259568,13 @@ lIC lli unu kKL -hno +nMT poy poy -vvJ +nRV hUD -ybr -bpL +ygf +dsZ pIw hUD ktz @@ -257259,7 +259587,7 @@ iQQ lso rNQ lso -aop +pkg yar mdl rIU @@ -257280,9 +259608,9 @@ jbU pEE cAG nbq -hAq -nDB -nfW +iNY +kiQ +xGK jbU lhu hdH @@ -257313,8 +259641,8 @@ wRr wEV vjZ bln -bln -bln +uer +mQb bln bln vzD @@ -257322,8 +259650,8 @@ oIR vzD jCl kir -sEB -bln +qVo +lSu bln bln bln @@ -257497,7 +259825,7 @@ bcC eFO unu kKL -hno +tUO poy poy vvJ @@ -257517,7 +259845,7 @@ dFO cYE lso hDb -azU +exm nIl nVC abM @@ -257534,10 +259862,10 @@ ujP htO sqn jbU -iyP +gEy dUe ank -wgH +baX fUM wlW jbU @@ -257570,17 +259898,17 @@ wRr sKf vjZ bln -bln -bln -bln +mQb +mQb +mQb bln vzD vzD vzD kir vzD -sEB -bln +rwt +mQb bln bln bln @@ -257754,12 +260082,12 @@ weF fMc aME kKL -qLf +kIr poy poy -lNk +tav hUD -nbL +uZu rGd whC hUD @@ -257779,8 +260107,8 @@ gqK nxU gjg dxg -gJi -fVC +ivG +aYi dkr cHQ jDm @@ -257794,11 +260122,11 @@ jbU anP cRK uMK -udQ +rep oMT -qwJ +ppz jbU -whc +uQR iZQ llw aus @@ -257836,9 +260164,9 @@ ydh dFG uZc gQw +mQb bln -bln -bln +lSu bln bln wNO @@ -258011,7 +260339,7 @@ nLY lli aME kKL -ttv +ptS poy poy hUe @@ -258054,23 +260382,23 @@ pbQ pbQ pbQ pbQ -eQQ +jbU lKq pMY kLy bGA lKq -bNu -hUf -bKm +tYW +oYn +cfR xMT hjE -sJP +lqN bkS pJc iBO -tPx -trn +xfp +agd bgx buv jhC @@ -258093,9 +260421,9 @@ uZc cDk sGZ gQw -bln -bln -bln +mQb +mQb +lSu bln bln wNO @@ -258260,15 +260588,15 @@ iwO uYR kKL kKL -tfu +kKL aMa -tfu kKL kKL -xUT +kKL +iVD uZn kKL -ttv +ptS prg prg caY @@ -258279,7 +260607,7 @@ gEE gEE gEE oNC -gEE +nmD gEE gEE tva @@ -258293,7 +260621,7 @@ sxZ oOo xvy wLl -axc +tKD oLg eLr wtT @@ -258301,10 +260629,10 @@ mbK jQS eNK aYJ -sSz +jpN aYJ aYJ -bXL +dwZ eLr eaa via @@ -258312,15 +260640,15 @@ aYJ lAw aYJ aYJ -aYJ +wib eLr hAm via via tPz iRN -via -ojP +odR +leo qFt pTY lcu @@ -258351,7 +260679,7 @@ gTq fNa gQw bln -bln +mQb bln bln bln @@ -258525,9 +260853,9 @@ kKL pzV uZn kKL -xXU -spW -kVE +jbz +nKb +god xse iQQ gEE @@ -258550,7 +260878,7 @@ pJV mZG mZG qEZ -axc +urk dFW aYJ aYJ @@ -258558,7 +260886,7 @@ aYJ aYJ wUt urK -xjU +mNt nJT urK urK @@ -258576,8 +260904,8 @@ pJV pJV pJV aYJ -aYJ -sSE +cTR +leo wOX efk jTr @@ -258608,6 +260936,7 @@ gQw gQw vzD bln +lSu bln bln bln @@ -258670,7 +260999,6 @@ wNO wNO wNO wNO -wNO "} (181,1,3) = {" wNO @@ -258773,11 +261101,11 @@ kKL kKL kKL kKL -qAS +cDv fUc jaX glI -gZR +mRY kKL kKL mbG @@ -258787,7 +261115,7 @@ hUD hUD hUD hUD -gEE +cEz gEE gEE gEE @@ -258801,13 +261129,13 @@ gqj emp cYE lso -kvG +qbp wLl -qXp +qfA uxA pUn wLl -dzg +jYF fXr dFj dFj @@ -258815,26 +261143,26 @@ uZB oni nxa qwN -tkS +cLK +dFj dFj dFj -gwm dFj -niC +xnM xnM xnM fLl wMm +xnM wqb -niC xnM xnM xnM xnM lYg xYj -pIt -kfZ +kkX +leo qFt bYu qkH @@ -258865,13 +261193,13 @@ bln bln bln bln +lSu +bln +lSu bln bln bln bln -wNO -wNO -wNO wNO wNO wNO @@ -259030,15 +261358,15 @@ iSQ qji pyD kKL -mqO +gCs fUc sBi xYA ldi lUC -vhm +cZc oLG -jbu +eQF oxV oxV jbG @@ -259069,31 +261397,31 @@ wnT wnT oHK oHK -cbF -dEC +xer +wKi oHK oHK -vjj -fLU -rDH -usP -wLl -wol +umv +cPt +nOa hnP -gPE -bpD -wLl -wLl -wLl -wLl -wLl -wLl -wLl -wLl -wLl -wLl +nsZ +fki +iIJ +hYE +iIJ +dia +nsZ +nsZ +uoC +nsZ +uoC +nsZ +nsZ +nsZ +nsZ hjE -vWo +xSg fOl cyL jAI @@ -259119,14 +261447,12 @@ bRz vzD bln bln +mQb bln bln -bln -bln -bln -bln -bln -bln +mQb +uer +lSu bln bln bln @@ -259185,6 +261511,8 @@ wNO wNO wNO wNO +wNO +wNO "} (183,1,3) = {" wNO @@ -259317,12 +261645,12 @@ cYE lso pHX nDd -qWh -lmY -haQ +soz +faq +ofi snI bZQ -elf +gSq ojF rQW ftN @@ -259330,26 +261658,26 @@ bxP vvE tJG oHK -goq -goq -rDH -usP -wLl +hJH +hJH +tPL +eOx +nsZ nsZ uoC -rhi +gzH uoC nsZ -iqx -awa -awa -awa -awa -xUk +nsZ +fFQ +igd +mzg +tIq +tIq cQs bdQ nsZ -bkF +pnK cSw cmx yeC @@ -259374,6 +261702,10 @@ lEz kPw dAx gQw +mQb +mQb +uer +mQb bln bln bln @@ -259386,11 +261718,7 @@ bln bln bln bln -bln -bln -bln -bln -bln +wNO wNO wNO wNO @@ -259545,7 +261873,7 @@ fLb oHh kKL bpQ -bsc +kcT oih dmL lUC @@ -259587,22 +261915,22 @@ vaA gXJ wgU oHK -pnq -goq -rDH -pvU -wLl -jUX +nWe +hJH +tPL +oiZ +nsZ +izD wbR -uXh -tur -aJz -iqx -awa -awa -awa -awa -xUk +djG +eqj +bjI +tqs +sqt +sqt +sqt +sqt +sqt aWg xgK nsZ @@ -259631,14 +261959,13 @@ lbf esF bRz gQw +mQb bln bln bln bln -bln -bln -bln -bln +lSu +mQb bln bln bln @@ -259699,6 +262026,7 @@ wNO wNO wNO wNO +wNO "} (185,1,3) = {" wNO @@ -259801,11 +262129,11 @@ eOm kKL kKL kKL -dvS +mly pwd glI tsR -gZR +mRY lUC tXV kvX @@ -259815,7 +262143,7 @@ qrQ wrX wrX wrX -gEE +cEz gEE gEE gEE @@ -259829,9 +262157,9 @@ urw emp bvI lso -mtT -pLa -jJF +cUB +nYm +mNi yeB uuC hDb @@ -259846,20 +262174,20 @@ hhP oHK iZl iZl -ieb +sVi iZl -wLl -tur +nsZ +fBJ +tkp tur -eqj -eqj -oro -iSk -awa -awa -awa -awa -xUk +bjL +sjl +fZy +fZy +fZy +fZy +fZy +gPC wvz srW nsZ @@ -259889,14 +262217,13 @@ bRz bVL vzD bln +fsm bln bln +uer bln bln -bln -bln -bln -bln +lSu bln bln bln @@ -259956,6 +262283,7 @@ wNO wNO wNO wNO +wNO "} (186,1,3) = {" wNO @@ -260062,11 +262390,11 @@ pfP apD ugG gIt -fkc +mnW lUC ccT nyC -opw +eUz oTA oTA hIN @@ -260104,13 +262432,13 @@ aju gPY qWu fbl -foy -krY -awa -awa -awa -awa -jvc +rlu +nsZ +mFb +aHX +aHX +aHX +xgF awa awa awa @@ -260126,7 +262454,7 @@ ihu epH rDZ rDZ -tBP +ePu rDZ rDZ bgx @@ -260145,17 +262473,17 @@ gQw gQw vzD vzD +lSu bln bln bln +lSu bln bln bln bln -bln -bln -bln -bln +lSu +lSu bln bln bln @@ -260321,7 +262649,7 @@ lUC lUC lUC lUC -daX +wrX pxi wrX tLQ @@ -260335,7 +262663,7 @@ gEE gEE iKQ cpq -gEE +ueF gEE gEE tva @@ -260361,13 +262689,13 @@ wgO fTT bUa wgL -phB -krY +bhm +nsZ +awa awa awa awa awa -jvc awa awa awa @@ -260377,7 +262705,7 @@ xUk aSB tHT nsZ -lHm +vmK oZn sFj rck @@ -260398,22 +262726,22 @@ vzD vzD bln bln +mQb bln bln -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -mVm -tCr -tCr -tCr -tCr -tCr +fYT +eRE +ujK +ujK +eRE +wOq +eRE +ujK +ujK +eRE +lej +lej +hAM bln bln bln @@ -260578,8 +262906,8 @@ tlH tlH tlH nXb -ngY -iQt +wrX +tuQ oHH tAA efH @@ -260600,31 +262928,31 @@ jbG nzV cYE dfB -wck +ymj pFg hXC -mrw +qad kuV cAi qWn -nQq +dik fOR tFF tia qNn -hek +uIQ gNi -krY -clo +oHK +dUh bUa fbl -nHf -krY +aDr +nsZ +awa awa awa awa awa -jvc awa awa awa @@ -260634,13 +262962,13 @@ xUk sqt duE nsZ -ijW -xsP -rms -sXC +xDa +abT +jJZ +tuy rDZ rDZ -rnu +mBk rDZ rDZ bgx @@ -260654,8 +262982,8 @@ vzD bln bln bln -bln -bln +mQb +uer bln bln bln @@ -260670,8 +262998,8 @@ bln bln bln bln -tCr -bln +chn +lSu bln bln bln @@ -260836,27 +263164,27 @@ tlH tlH nXb wrX -xun +iqW wrX oHH oHH oHH oHH qPL -nCa +qiL erI gGE qPL -pRG -mtN +pdD +asv dFt vHI vHI dFt dFt -jub -hQO -cMv +fdj +lah +asU qPL elw elw @@ -260873,15 +263201,15 @@ mEJ mEJ krY srP -pGp +rou lIk srP -krY +nsZ +awa awa awa awa awa -jvc awa awa awa @@ -260909,10 +263237,10 @@ vzD vrO vzD bln +mQb bln -bln -bln -bln +mQb +mQb bln bln sUN @@ -260927,8 +263255,8 @@ sUN tmR sUN bln -tCr -bln +sFJ +nwD bln bln bln @@ -261110,7 +263438,7 @@ gVt pCI pCI vsM -vns +avc nfB cMJ eBg @@ -261118,7 +263446,7 @@ kCs omh peV elw -tZe +oOc nvY qpu oPP @@ -261133,12 +263461,12 @@ vJS bUa ubY qHn -krY +nsZ +awa awa awa awa awa -jvc wQY nmz nmz @@ -261166,11 +263494,11 @@ jCl vpg gQw bln +uer bln bln -bln -bln -bln +mQb +ntK bln sUN tmR @@ -261183,8 +263511,8 @@ bln sUN tmR sUN -bln -tCr +hty +uap bln bln bln @@ -261390,20 +263718,20 @@ ciS bUa jPx jxb -luJ -bEJ +dqI +oEE bEJ mXe bEJ qbb -piM -hLO -hLO -hLO -hLO -uAx -pFl -cyG +miK +xRv +xRv +xRv +xRv +goy +hWD +oiI nsZ uCJ hjE @@ -261422,17 +263750,17 @@ vrO vrO vrO gQw +mQb +ntK +mQb bln bln -bln -bln -bln -bln +mQb bln sUN tmR sUN -bln +mQb sUN tmR sUN @@ -261441,7 +263769,7 @@ sUN tmR sUN bln -tCr +dzZ bln bln bln @@ -261606,7 +263934,7 @@ tlH tlH tlH nXb -tlH +oFc tlH tlH tlH @@ -261646,18 +263974,18 @@ gpj oQn iBl pLr -hRF -krY +mKO +sPq xLq xLq aoo vIg -ykE +jED qEV -wpi -gZx -tIq -tIq +cRq +qVZ +ybf +ybf vaa xLq xLq @@ -261681,15 +264009,15 @@ pxQ vzD bln bln +mQb bln bln -bln -bln +uer bln sUN tmR sUN -bln +mQb sUN tmR sUN @@ -261698,7 +264026,7 @@ sUN tmR sUN bln -bln +chb bln bln bln @@ -261772,7 +264100,7 @@ wNO wNO wNO wNO -khz +pUa wNO vbG hHG @@ -261904,22 +264232,22 @@ fbl eIC trK qEz -krY -xLq +nsZ +vyz xLq kvR -rYZ +qVZ kgo sCx -gWr iHc -ybf -gXv +qVZ +nQj +auK vaa xLq -grs +xLq nsZ -pdO +ufb dDm rDZ rDZ @@ -261955,10 +264283,10 @@ sUN tmR sUN bln -bln -tCr -tCr -tCr +rdJ +ujK +lej +hAM bln bln wNO @@ -262031,14 +264359,14 @@ wNO wNO wNO wNO -kPS +dHF hHG hHG hHG -khz +pUa wNO wNO -khz +pUa wNO wNO wNO @@ -262128,7 +264456,7 @@ tlH tlH sEB qPL -qgn +nbK vXy ixv qPL @@ -262161,7 +264489,7 @@ gVe whP mOc gYt -krY +nsZ oOb ezJ iba @@ -262169,18 +264497,18 @@ gas rjK nlP xTV -imy -dHM +rGY +nzA auK vaa xLq xLq nsZ rDZ -pxu +rDZ rDZ swa -pxu +rDZ rDZ bgx vzD @@ -262190,10 +264518,10 @@ vzD geJ sMo bgx -tfm +rkH qbh oGm -axy +mJq mJq mJq sEB @@ -262207,15 +264535,15 @@ bln bln tmR bln -bln +mQb bln tmR bln bln +fsm +mQb bln -bln -bln -tCr +vap bln bln wNO @@ -262289,8 +264617,8 @@ wNO wNO bln bln -xDQ -xDQ +wDS +wDS bln bln bln @@ -262407,21 +264735,21 @@ fTW dxm sHM elw -aFt +cIb hAT xyE hDp -kjr +hDp elw omh omh omh omh -cbq +eHV elw nsZ nsZ -vdM +qaz nsZ nsZ bgx @@ -262472,8 +264800,8 @@ tmR tmR cnx bln -tCr -bln +sFJ +tMa bln wNO wNO @@ -262546,8 +264874,8 @@ wNO wNO bln bln -wUD -wUD +vOy +vOy bln bln bln @@ -262664,17 +264992,17 @@ dbw omh sHM elw -sVf +jqw axN qvE nhI hDp elw -uKx +qrP rpV fTW bwM -hds +xGx lEv clV wmG @@ -262682,12 +265010,12 @@ jLW nkh tLT wvv -fHC +lEP lEP oEj xmR oEj -oEj +ohU oEj myO oEj @@ -262702,12 +265030,12 @@ oEj xmR oEj dww -dFZ -mbT -nBB +ygm +bgx +qUQ xQh xCz -mjt +mJq mJq mJq vsI @@ -262726,10 +265054,10 @@ bln tmR bln bln +mQb bln bln -bln -tCr +vap bln bln wNO @@ -262803,8 +265131,8 @@ wNO wNO bln bln -rPp -rPp +dTI +dTI bln bln bln @@ -262897,7 +265225,7 @@ bln bln bln bln -sEB +miY tpd wwI tPY @@ -262927,23 +265255,23 @@ elw elw elw elw -rft +lxR icE idt -fMq -pSz +nCd +bXD elw -pbH +puY opN faG -kdo +tKO hyV bgx -gti -bhk -cYI -jCl +tHw +tVx +ltP jCl +uZc jCl jCl vzD @@ -262969,7 +265297,7 @@ bln bln bln bln -bln +mQb bln sUN tmR @@ -262983,10 +265311,10 @@ sUN tmR sUN bln -bln -tCr -tCr -tCr +cIf +lej +ujK +fYT bln bln wNO @@ -263154,7 +265482,7 @@ bln bln bln bln -sEB +miY tpd hOt ejn @@ -263174,10 +265502,10 @@ udw jZM sEB omh -amK +jrX omh sED -xSw +gjM upv gjM gjM @@ -263186,24 +265514,24 @@ gjM tIW gjM aUl -xnt -egR +lmx +mHq pSz elw -gEe +pIu mEU enq -kuy +nkH qQa bgx gti -lOq +wpn jCl xWo axu bFq jCl -jCl +uZc jCl jtn jCl @@ -263221,13 +265549,13 @@ bln bln bln bln +chb +mQb +uer +mQb bln -bln -bln -bln -bln -bln -bln +nEa +mQb sUN tmR sUN @@ -263240,8 +265568,8 @@ sUN tmR sUN bln -bln -bln +chn +lSu bln bln bln @@ -263313,17 +265641,17 @@ wNO wNO wNO wNO -khz +pUa wNO -aaX +qzn vbG hHG hHG hHG -khz +pUa wNO wNO -khz +pUa wNO wNO wNO @@ -263411,22 +265739,22 @@ bln lSu lSu bln -sEB +miY +tpd tpd tpd -ljj qKq -qmV +qPL fPX -xdM +dFt jZM dFt jZM -xdM +dFt nJo -hdz +dFt quK -xdM +dFt jZM jZM sEB @@ -263437,15 +265765,15 @@ omh omh omh omh -omh -fTW +cNe +dbw rpV jYc fTW cJs fTW -fTW -omh +tlf +pSz elw mWf mWf @@ -263453,7 +265781,7 @@ mWf hyV trm bgx -vzD +gti vzD vzD vzD @@ -263471,24 +265799,24 @@ twZ bMb rEU vXd -jCl +uZc mwQ vzD bln bln bln bln +pMM bln +mQb bln bln -bln -bln -bln -bln +uer +mQb sUN tmR sUN -bln +mQb sUN tmR sUN @@ -263497,10 +265825,10 @@ sUN tmR sUN bln -tCr -bln +ebW bln bln +lSu bln bln wNO @@ -263572,7 +265900,7 @@ wNO wNO wNO wNO -fhB +liV vbG hHG hHG @@ -263668,50 +265996,50 @@ bln bln bln bln -vsI -sEB -sEB +hMM +ooL +ooL jZM xVG jZM xVG jZM -sEB -gZa -sEB +ooL +ooL +ooL jZM xVG jZM xVG jZM -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB -sEB +ooL +ooL +ooL +ooL +ooL +ooL +ooL +ooL +ooL +nXb +buU omh skW omh omh omh -omh skW omh +pSz omh -bln -bln -bln -bln +ooL +ooL +ooL hyV trm bgx -bln -bln +gti +vzD bln bln bln @@ -263723,9 +266051,9 @@ bFq jCl nuj jCl -gUT -jCl -jCl +mEz +uZc +uZc syT vzD jCl @@ -263735,12 +266063,12 @@ bln bln bln bln +chb bln bln bln bln -bln -bln +mQb bln sUN tmR @@ -263749,15 +266077,15 @@ bln sUN tmR sUN -bln +mQb sUN tmR sUN bln -tCr -bln +chb bln bln +lSu bln bln wNO @@ -263950,25 +266278,25 @@ bln bln lSu lSu -bln +nXb +omh omh -fTW xTy qNV rCT xTy qNV -mhq omh -bln +omh +omh bln bln bln hyV fiU bgx -bln -bln +vzD +vzD bln bln bln @@ -263992,12 +266320,12 @@ bln bln bln bln -bln -bln -bln -bln -bln -mVm +obe +ujK +eRE +ujK +ujK +dMo bln sUN tmR @@ -264011,8 +266339,8 @@ sUN tmR sUN bln -tCr -bln +sFJ +tMa bln bln bln @@ -264186,19 +266514,19 @@ bln lSu bln dFt -kAm +tsP jZM -gBI +vYw dFt -bln +tMa bln bln dFt -kAm +tsP jZM -gBI +vYw dFt -bln +tMa bln bln bln @@ -264217,13 +266545,13 @@ vJk vJk qbW omh +hZN bln bln bln bln bln -bln -bln +hZN bln bln bln @@ -264240,7 +266568,7 @@ bln bln bln vzD -caU +lPq vzD bln bln @@ -264254,9 +266582,7 @@ bln bln bln bln -tCr -bln -bln +chb bln bln bln @@ -264268,9 +266594,11 @@ bln bln bln bln -mVm bln bln +vap +lSu +lSu bln bln bln @@ -264429,137 +266757,137 @@ wNO wNO wNO wNO -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -jZM -xVG -jZM -xVG -jZM -bln -bln -bln -jZM -xVG -jZM -xVG -jZM -bln -bln -bln -bln -bln -bln -bln -bln -bln -lSu -mLJ -bqY -qXf -tQX -wLk -nXg -tRX -drm -omh -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -vzD -ltk -vzD -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -bln -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -tCr -bln -bln -bln -bln -bln -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO -wNO +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +jZM +xVG +jZM +xVG +jZM +bln +bln +bln +jZM +xVG +jZM +xVG +jZM +bln +bln +bln +bln +bln +bln +bln +bln +bln +lSu +mLJ +bqY +qXf +tQX +wLk +nXg +tRX +pIy +omh +bln +bln +bln +bln +bln +lSu +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +vzD +ltk +vzD +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +bln +obe +lej +iNl +ahG +ujK +ujK +lej +eRE +lej +ujK +ujK +eRE +wvw +ujK +bFP +lSu +bln +bln +bln +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO +wNO wNO wNO wNO @@ -264701,18 +267029,18 @@ bln bln jZM oeh -kLs +jZM vmR jZM -bln +htd bln bln jZM vmR -kLs +jZM woU jZM -bln +htd bln bln bln @@ -264736,6 +267064,7 @@ bln bln bln bln +lSu bln bln bln @@ -264752,10 +267081,9 @@ bln bln bln bln -bln -vsI -sEB -sEB +hMM +ooL +rwt bln bln bln @@ -264787,7 +267115,7 @@ bln bln ozo bln -bln +wNO wNO wNO wNO @@ -264946,7 +267274,7 @@ wNO wNO wNO bln -fBN +xOk bln bln bln @@ -264977,23 +267305,23 @@ bln bln bln bln -fBN -bln -bln +xOk +lSu +lSu cSx -vyU -vyU +pXY +pXY xuR vyU -vyU -uOE -bln -bln +pXY +oOB bln +lSu bln bln bln bln +lSu bln bln bln @@ -265044,7 +267372,7 @@ bln bln bln bln -bln +wNO wNO wNO wNO @@ -265237,12 +267565,12 @@ bln bln bln bln -nRV -vyU -vyU -vyU -vyU +lqE vyU +pXY +pXY +pXY +pXY fcP bln bln @@ -265250,6 +267578,7 @@ bln bln bln bln +lSu bln bln bln @@ -265299,9 +267628,8 @@ bln bln bln bln -bln -bln -bln +wNO +wNO wNO wNO wNO @@ -265554,11 +267882,11 @@ bln bln bln bln -bln -bln -bln -bln -bln +wNO +wNO +wNO +wNO +wNO wNO wNO wNO @@ -266021,7 +268349,7 @@ bln bln bln bln -bln +lSu bln wNO wNO @@ -266231,8 +268559,7 @@ wNO wNO wNO bln -fBN -bln +xOk bln bln bln @@ -266262,8 +268589,8 @@ bln bln bln bln -fBN bln +xOk bln bln bln @@ -266279,6 +268606,7 @@ bln bln bln bln +lSu bln wNO wNO @@ -266535,7 +268863,7 @@ bln bln bln bln -bln +lSu bln wNO wNO @@ -267306,7 +269634,7 @@ bln bln bln bln -bln +lSu bln wNO wNO @@ -267413,9 +269741,9 @@ wNO (215,1,3) = {" wNO wNO -wNO -wNO -tNN +bln +bln +fwx kDs kDs kDs @@ -267516,8 +269844,7 @@ wNO wNO wNO bln -fBN -bln +xOk bln bln bln @@ -267547,8 +269874,8 @@ bln bln bln bln -fBN bln +xOk bln bln bln @@ -267564,6 +269891,7 @@ bln bln bln bln +lSu bln wNO wNO @@ -267670,9 +269998,9 @@ wNO (216,1,3) = {" wNO wNO -wNO -wNO -wNO +bln +bln +bln kDs kDs kDs @@ -267820,7 +270148,7 @@ bln bln bln bln -bln +lSu bln wNO wNO @@ -267927,9 +270255,9 @@ wNO (217,1,3) = {" wNO wNO -wNO -wNO -wNO +bln +bln +bln bln hHG hHG @@ -268077,7 +270405,7 @@ bln bln bln bln -bln +lSu bln wNO wNO @@ -268184,10 +270512,10 @@ wNO (218,1,3) = {" wNO wNO -wNO +bln tkU tkU -lgH +fwx hHG hHG hHG @@ -268591,7 +270919,7 @@ bln bln bln bln -bln +lSu bln wNO wNO @@ -268801,7 +271129,7 @@ wNO wNO wNO bln -fBN +xOk bln bln bln @@ -268832,8 +271160,7 @@ bln bln bln bln -fBN -bln +xOk bln bln bln @@ -268849,6 +271176,7 @@ bln bln bln bln +lSu bln wNO wNO @@ -268958,7 +271286,7 @@ wNO tkU tkU tkU -uFg +bln hHG hHG hHG @@ -269105,7 +271433,7 @@ bln bln bln bln -bln +lSu bln wNO wNO @@ -269215,7 +271543,7 @@ wNO tkU tkU tkU -lgH +fwx hHG hHG hHG @@ -269362,7 +271690,7 @@ bln bln bln bln -bln +lSu bln wNO wNO @@ -269618,8 +271946,8 @@ bln bln bln bln -bln -bln +lSu +lSu bln wNO wNO @@ -269875,9 +272203,9 @@ bln bln bln bln +lSu bln -bln -bln +lSu wNO wNO wNO @@ -270086,7 +272414,7 @@ wNO wNO wNO bln -fBN +xOk bln bln bln @@ -270117,7 +272445,7 @@ bln bln bln bln -fBN +xOk bln bln bln @@ -270132,10 +272460,10 @@ bln bln bln bln -fBN -bln -fBN +xOk bln +xOk +lSu wNO wNO wNO @@ -270757,7 +273085,7 @@ wNO wNO tkU tkU -lgH +fwx hHG hHG hHG @@ -271269,7 +273597,7 @@ wNO wNO wNO wNO -wNO +bln tkU bln hHG @@ -271371,7 +273699,7 @@ wNO wNO bln bln -fBN +xOk bln bln bln @@ -271402,7 +273730,7 @@ bln bln bln bln -fBN +xOk bln bln wNO @@ -271526,7 +273854,7 @@ wNO wNO wNO wNO -wNO +bln tkU bln hHG @@ -271783,7 +274111,7 @@ wNO wNO wNO wNO -wNO +bln tkU bln hHG @@ -272040,7 +274368,7 @@ wNO wNO wNO wNO -wNO +bln tkU bln hHG @@ -272296,10 +274624,10 @@ wNO (234,1,3) = {" wNO wNO -wNO -wNO -wNO -lgH +bln +bln +bln +fwx hHG hHG hHG @@ -272553,9 +274881,9 @@ wNO (235,1,3) = {" wNO wNO -lgH -wNO -wNO +fwx +bln +bln bln hHG hHG @@ -272810,9 +275138,9 @@ wNO (236,1,3) = {" wNO wNO -aaX -wNO -wNO +qzn +bln +bln bln hHG hHG @@ -273067,9 +275395,9 @@ wNO (237,1,3) = {" wNO wNO -fhB -wNO -wNO +liV +bln +bln bln hHG hHG @@ -273324,10 +275652,10 @@ wNO (238,1,3) = {" wNO wNO -wNO -wNO -wNO -lgH +bln +bln +bln +fwx hHG hHG hHG @@ -273583,7 +275911,7 @@ wNO wNO wNO wNO -wNO +bln bln hHG hHG @@ -274612,7 +276940,7 @@ wNO wNO wNO wNO -lgH +fwx hHG hHG hHG @@ -274628,7 +276956,7 @@ vbG hHG hHG hHG -aaX +qzn wNO wNO wNO @@ -274885,7 +277213,7 @@ vbG hHG hHG hHG -fhB +liV wNO wNO wNO @@ -275383,7 +277711,7 @@ wNO wNO wNO wNO -lgH +fwx hHG hHG hHG @@ -275396,8 +277724,8 @@ wNO wNO bln bln -xDQ -xDQ +wDS +wDS bln bln wNO @@ -275653,8 +277981,8 @@ wNO wNO bln bln -wUD -wUD +vOy +vOy bln bln bln @@ -275910,8 +278238,8 @@ wNO wNO bln bln -rPp -rPp +dTI +dTI bln bln bln @@ -276411,7 +278739,7 @@ wNO wNO wNO wNO -lgH +fwx hHG hHG hHG @@ -277182,7 +279510,7 @@ wNO wNO wNO wNO -lgH +fwx hHG hHG hHG diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 6d16e9a1f20f9..2bfbb6c697c71 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -16495,7 +16495,7 @@ /turf/closed/wall, /area/station/maintenance/solars/port/fore) "fzk" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, @@ -59265,7 +59265,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/electrical) "tpY" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /obj/structure/noticeboard/directional/west, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/half/contrasted{ diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 484f0b6e21c6b..64fe3288fba40 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -13,22 +13,6 @@ "aag" = ( /turf/closed/wall, /area/station/commons/fitness) -"aaj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Science Research"; - network = list("ss13","rd") - }, -/obj/machinery/light/small/directional/south, -/obj/structure/noticeboard/rd{ - pixel_y = -32 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/science/lab) "aal" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78,16 +62,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"aaL" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/white/corner, -/obj/machinery/firealarm/directional/north, -/obj/item/clipboard, -/obj/item/paper, -/obj/item/pen, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/medical/office) "abI" = ( /obj/structure/chair/stool/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -186,15 +160,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"adC" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "adD" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, @@ -258,14 +223,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron/dark/textured, /area/station/medical/cryo) -"afe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/wrapping, -/turf/open/floor/iron, -/area/station/cargo/sorting) "afj" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -304,6 +261,17 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/carpet, /area/station/commons/dorms) +"afM" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/station/engineering/main) +"afW" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "afZ" = ( /obj/machinery/vending/coffee, /obj/structure/disposalpipe/segment, @@ -314,43 +282,20 @@ /mob/living/simple_animal/bot/secbot/beepsky/armsky, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"agf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/lights/mixed{ - pixel_x = -4; - pixel_y = 18 - }, -/obj/item/storage/box/lights/mixed{ - pixel_x = 6; - pixel_y = 12 - }, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/grenade/chem_grenade/cleaner{ - pixel_x = -7; - pixel_y = 12 - }, -/obj/structure/table, -/turf/open/floor/iron, -/area/station/service/janitor) -"agk" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/landmark/start/bitrunner, -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"agd" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/closet/secure_closet/security/cargo, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"agi" = ( +/obj/effect/spawner/random/maintenance, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/turf/open/floor/iron/dark/textured_half, -/area/station/cargo/bitrunning/den) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "ago" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/open/floor/iron, @@ -362,14 +307,6 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"agB" = ( -/obj/machinery/firealarm/directional/north, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "agN" = ( /obj/structure/table/glass, /obj/item/radio/intercom/directional/west, @@ -399,21 +336,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"agP" = ( -/obj/item/storage/box/syringes, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "agR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -427,11 +349,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"ahb" = ( -/obj/structure/lattice/catwalk, -/obj/item/banner/cargo, -/turf/open/space/basic, -/area/space/nearstation) "ahe" = ( /obj/machinery/airalarm/directional/east, /obj/structure/cable, @@ -480,26 +397,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"ahu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Service Hallway"; - name = "Service Fax Machine" - }, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "ahD" = ( /obj/structure/displaycase/trophy, /turf/open/floor/wood, @@ -549,41 +446,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) -"aie" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"aif" = ( -/obj/structure/table/wood, -/obj/item/book/manual/wiki/security_space_law{ - pixel_y = 3 - }, -/obj/item/radio/intercom/command/directional/north, -/obj/item/paper/fluff/jobs/engineering/frequencies, -/turf/open/floor/iron/dark, -/area/station/command/bridge) -"aig" = ( -/obj/machinery/door/poddoor/preopen{ - id = "medsecprivacy"; - name = "Privacy Shutter" - }, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/right/directional/north{ - req_access = list("brig_entrance") - }, -/obj/item/folder/red{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/paper, -/obj/item/pen, -/turf/open/floor/plating, -/area/station/security/checkpoint/medical) "aij" = ( /obj/structure/chair, /obj/structure/cable, @@ -595,12 +457,36 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) +"aiy" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/computer/records/security{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "aja" = ( /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/security/office) +"ajq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown, +/turf/open/floor/iron, +/area/station/cargo/lobby) "ajI" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -678,22 +564,19 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"akQ" = ( -/obj/structure/table/wood, -/obj/structure/sign/picture_frame/showroom/three{ - pixel_x = -8; - pixel_y = 32 - }, -/obj/structure/sign/picture_frame/showroom/four{ - pixel_x = 8; - pixel_y = 32 +"akF" = ( +/obj/machinery/flasher/directional/north{ + id = "AI" }, -/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" +/obj/structure/table/wood/fancy/blue, +/obj/effect/spawner/random/aimodule/neutral, +/obj/machinery/door/window/right/directional/east{ + name = "Core Modules"; + req_access = list("captain") }, -/turf/open/floor/wood, -/area/station/command/corporate_showroom) +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) "akZ" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 @@ -707,6 +590,35 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"alu" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/arrows{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"alw" = ( +/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/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"alA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4; + name = "Quartermaster Junction" + }, +/obj/effect/mapping_helpers/mail_sorting/supply/qm_office, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "alE" = ( /turf/open/floor/iron, /area/station/security/courtroom) @@ -716,10 +628,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/mechbay) -"alG" = ( -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "alI" = ( /obj/machinery/door/window/left/directional/east{ name = "Bridge Deliveries"; @@ -762,15 +670,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"aml" = ( -/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) "amo" = ( /obj/structure/chair{ dir = 8; @@ -864,26 +763,20 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"aoc" = ( -/obj/structure/table/reinforced, +"anX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, -/obj/item/food/pie/cream, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" +/obj/machinery/status_display/evac/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown{ + dir = 8 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/kitchen) -"aoh" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "qmroom" +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/qm) +/turf/open/floor/iron, +/area/station/hallway/primary/central) "aok" = ( /turf/open/floor/iron, /area/station/cargo/storage) @@ -915,6 +808,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"apC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "apJ" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -924,6 +821,24 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"apO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) +"apS" = ( +/obj/structure/sink/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) "apT" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -950,33 +865,25 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"aqq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/mousetraps{ - pixel_x = -5; - pixel_y = 14 - }, -/obj/structure/table, -/obj/item/storage/box/mousetraps{ - pixel_x = 12; - pixel_y = 15 - }, -/obj/item/radio/intercom/directional/north, -/obj/item/grenade/chem_grenade/cleaner{ - pixel_x = -7; - pixel_y = 6 - }, -/obj/item/grenade/chem_grenade/cleaner{ - pixel_x = -1; - pixel_y = 3 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "aqs" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating/airless, /area/space/nearstation) +"aqt" = ( +/obj/structure/table, +/obj/item/folder/yellow, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/structure/cable, +/obj/item/paper/pamphlet/gateway, +/turf/open/floor/iron, +/area/station/command/gateway) "aqu" = ( /obj/structure/closet/wardrobe/green, /obj/effect/landmark/start/hangover/closet, @@ -996,13 +903,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"aqW" = ( -/obj/structure/cable, -/obj/machinery/power/terminal, -/obj/machinery/light/small/directional/east, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "ara" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/plating, @@ -1032,6 +932,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"asi" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/lights/mixed, +/obj/item/stack/sheet/iron{ + amount = 30 + }, +/obj/item/radio{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/stack/cable_coil, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "asm" = ( /obj/effect/turf_decal/siding/white, /obj/effect/turf_decal/trimline/brown/warning, @@ -1073,6 +987,13 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) +"asT" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "atf" = ( /obj/structure/table/glass, /obj/machinery/power/apc/auto_name/directional/north, @@ -1080,15 +1001,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"ati" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/security/telescreen/ordnance/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "atk" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -1119,6 +1031,13 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/engine, /area/station/engineering/supermatter) +"auh" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "aum" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -1149,11 +1068,6 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"auQ" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/construction/storage_wing) "ava" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/storage/box/lights/mixed, @@ -1304,13 +1218,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison) -"axS" = ( -/obj/structure/sign/warning/secure_area{ - desc = "A warning sign which reads 'BOMB RANGE"; - name = "BOMB RANGE" - }, -/turf/closed/wall, -/area/station/science/ordnance/bomb) "axW" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -1332,18 +1239,6 @@ "ayr" = ( /turf/open/floor/iron, /area/station/engineering/break_room) -"ayG" = ( -/obj/structure/table/reinforced, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/machinery/light/small/directional/north, -/obj/item/surgery_tray/full/morgue, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 8 - }, -/area/station/medical/morgue) "ayH" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, @@ -1378,21 +1273,24 @@ /obj/item/stack/cable_coil, /turf/open/floor/plating/airless, /area/space/nearstation) -"azo" = ( -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/pai_card, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted, -/turf/open/floor/iron/white, -/area/station/science/lobby) "azv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"azz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/newscaster/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "azE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -1436,6 +1334,15 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/white, /area/station/security/prison/mess) +"aAb" = ( +/obj/structure/bodycontainer/morgue{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/dark/smooth_half{ + dir = 8 + }, +/area/station/medical/morgue) "aAg" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral, @@ -1525,16 +1432,19 @@ /obj/effect/spawner/random/trash/garbage, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"aBV" = ( -/obj/structure/sign/directions/evac, -/obj/structure/sign/directions/medical{ - pixel_y = 8 - }, -/obj/structure/sign/directions/science{ - pixel_y = -8 +"aBQ" = ( +/obj/structure/cable, +/obj/structure/sign/warning/secure_area/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 }, -/turf/closed/wall, -/area/station/commons/lounge) +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"aBW" = ( +/obj/machinery/button/ignition/incinerator/atmos, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) "aBX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -1564,13 +1474,6 @@ /obj/item/wallframe/digital_clock, /turf/open/floor/iron, /area/station/commons/storage/tools) -"aCz" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "aCE" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=10.1-Central-from-Aft"; @@ -1591,6 +1494,14 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"aCO" = ( +/obj/machinery/computer/exodrone_control_console{ + dir = 8 + }, +/obj/structure/railing, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "aCQ" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -1682,10 +1593,6 @@ /obj/item/poster/random_official, /turf/open/floor/iron/dark, /area/station/security/office) -"aEp" = ( -/obj/structure/sign/departments/cargo, -/turf/closed/wall, -/area/station/cargo/lobby) "aEr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1698,16 +1605,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"aEy" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 +"aEA" = ( +/obj/structure/table/wood, +/obj/item/staff/broom, +/obj/item/wrench, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/sorting) +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/wood/large, +/area/station/service/theater) "aEH" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -1722,10 +1630,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/checkpoint/science) -"aFb" = ( -/obj/structure/sign/warning/electric_shock/directional/south, -/turf/open/space/basic, -/area/space/nearstation) "aFd" = ( /obj/effect/landmark/start/shaft_miner, /turf/open/floor/iron, @@ -1740,6 +1644,15 @@ /obj/effect/spawner/random/bureaucracy/paper, /turf/open/floor/wood, /area/station/commons/dorms) +"aFz" = ( +/obj/machinery/vending/autodrobe, +/turf/open/floor/plating, +/area/station/maintenance/port) +"aFW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/mirror/directional/west, +/turf/open/floor/wood, +/area/station/service/theater) "aFZ" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -1782,6 +1695,17 @@ "aGM" = ( /turf/open/floor/iron, /area/station/security/range) +"aGQ" = ( +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "aGS" = ( /obj/structure/sign/warning/no_smoking, /turf/closed/wall, @@ -1794,23 +1718,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"aGW" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "rdgene2"; - name = "Genetics Lab Shutters" - }, -/obj/machinery/door/window/left/directional/east{ - name = "Genetics Desk"; - req_access = list("genetics") - }, -/obj/item/folder, -/obj/item/pen, -/obj/effect/turf_decal/tile/purple/fourcorners, -/turf/open/floor/iron, -/area/station/science/genetics) "aHh" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -1851,6 +1758,20 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"aHH" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/east{ + areastring = "/area/station/science/ordnance/burnchamber" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "aHM" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -1861,17 +1782,18 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/science/research) -"aHW" = ( -/obj/machinery/door/airlock/mining{ - name = "Drone Bay" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/effect/landmark/navigate_destination, -/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/cargo/drone_bay) +"aHN" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/bot, +/obj/effect/landmark/event_spawn, +/obj/effect/landmark/start/hangover, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) +"aHR" = ( +/obj/structure/sign/warning/biohazard, +/turf/closed/wall/r_wall, +/area/station/science/research) "aIl" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -1948,10 +1870,6 @@ }, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) -"aJh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) "aJj" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -1974,32 +1892,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"aJt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "aJv" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, /area/station/engineering/supermatter) -"aJw" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio4"; - name = "Xenobio Pen 4 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology"); - sync_doors = 4 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "aJI" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -2151,6 +2047,44 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/white, /area/station/science/lobby) +"aLW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/stamp/head/qm{ + pixel_x = 1; + pixel_y = 12 + }, +/obj/item/stamp/granted{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/item/stamp/denied{ + pixel_x = -7; + pixel_y = 5 + }, +/obj/item/stamp/void{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/effect/spawner/random/entertainment/money_medium{ + pixel_y = -6; + pixel_x = -3 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/clipboard{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/coin/gold{ + pixel_y = -5; + pixel_x = 10 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "aMb" = ( /obj/structure/table, /obj/item/cultivator, @@ -2253,6 +2187,18 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"aNQ" = ( +/obj/structure/table, +/obj/item/stack/medical/gauze, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "aNZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -2280,12 +2226,14 @@ /obj/effect/turf_decal/trimline/brown/warning, /turf/open/floor/iron/white, /area/station/science/lobby) -"aOt" = ( -/obj/effect/turf_decal/siding/white{ - dir = 9 +"aOA" = ( +/obj/effect/landmark/blobstart, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/turf/open/water, -/area/station/service/hydroponics/garden) +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "aOC" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2309,14 +2257,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"aOV" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Lab - Test Chamber"; - network = list("ss13","rd","xeno") - }, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "aPk" = ( /obj/structure/closet/crate/preopen, /turf/open/floor/plating, @@ -2383,6 +2323,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/server) +"aQb" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "aQe" = ( /obj/machinery/light/small/directional/west, /obj/machinery/camera/directional/west{ @@ -2392,38 +2341,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"aQr" = ( -/obj/machinery/portable_atmospherics/pipe_scrubber, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos) -"aQw" = ( -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; - name = "Antechamber Turret Control"; - pixel_x = 30; - req_access = list("minisat") - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/foyer) -"aQP" = ( -/obj/structure/table/wood, -/obj/machinery/microwave{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/service/cafeteria) "aQR" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -2459,17 +2376,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"aRx" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/normal/directional/north, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "aRz" = ( /obj/structure/table, /obj/item/paper_bin, @@ -2492,24 +2398,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/cryo) -"aSf" = ( -/obj/structure/table, -/obj/structure/cable, -/obj/item/disk/tech_disk{ - pixel_x = -6 - }, -/obj/item/disk/tech_disk{ - pixel_x = 6 - }, -/obj/item/disk/tech_disk{ - pixel_y = 6 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/science/lab) "aSk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2527,17 +2415,20 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"aSB" = ( -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/green/half/contrasted{ +"aSv" = ( +/obj/effect/turf_decal/siding/wood{ dir = 8 }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/reagent_dispensers/beerkeg, +/obj/item/toy/figure/qm{ + pixel_x = 3; + pixel_y = 12 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "aSQ" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law{ @@ -2610,6 +2501,21 @@ "aUx" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai_upload_foyer) +"aUC" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/item/reagent_containers/cup/rag, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = -3; + pixel_y = 9 + }, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) "aUK" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -2622,6 +2528,14 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"aUU" = ( +/obj/machinery/light/directional/east, +/obj/machinery/light_switch/directional/east, +/obj/structure/rack, +/obj/effect/decal/cleanable/greenglow/filled, +/obj/effect/spawner/random/maintenance/no_decals/eight, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "aVd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2746,23 +2660,6 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"aWS" = ( -/obj/machinery/button/door/directional/south{ - id = "warehouse"; - name = "Warehouse Shutters Control" - }, -/obj/effect/turf_decal/trimline/red/filled/warning/corner{ - dir = 8 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Cargo Bay - Aft"; - pixel_x = 14 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "aXa" = ( /turf/closed/wall, /area/station/security/prison/mess) @@ -2849,6 +2746,14 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) +"aYl" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Xenobiology Lab - Test Chamber"; + network = list("ss13","rd","xeno") + }, +/obj/machinery/light/cold/directional/east, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "aYw" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod Three"; @@ -2866,19 +2771,6 @@ }, /turf/open/space, /area/space/nearstation) -"aYy" = ( -/obj/machinery/light/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "aYz" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -2923,6 +2815,39 @@ /obj/machinery/computer/order_console/mining, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"aZr" = ( +/obj/structure/table, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/button/door{ + desc = "A door remote control switch for the exterior brig doors."; + id = "outerbrig"; + name = "Brig Exterior Door Control"; + normaldoorcontrol = 1; + pixel_x = 6; + pixel_y = 7; + req_access = list("security") + }, +/obj/machinery/button/flasher{ + id = "secentranceflasher"; + name = "Brig Entrance Flasher"; + pixel_y = -3; + req_access = list("security") + }, +/obj/machinery/button/door{ + desc = "A door remote control switch for the interior brig doors."; + id = "innerbrig"; + name = "Brig Interior Door Control"; + normaldoorcontrol = 1; + pixel_x = -6; + pixel_y = 7; + req_access = list("security") + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/security/warden) "aZv" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; @@ -2938,6 +2863,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"aZz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/item/stock_parts/power_store/cell/lead{ + pixel_y = 1; + pixel_x = -3 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "aZA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2965,19 +2901,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"bah" = ( -/obj/structure/disposalpipe/segment, -/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/neutral{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "bar" = ( /obj/structure/table, /obj/item/reagent_containers/cup/beaker{ @@ -3018,24 +2941,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/office) -"baB" = ( -/obj/structure/table/glass, -/obj/structure/cable, -/obj/machinery/fax{ - fax_name = "Chief Medical Officer's Office"; - name = "Chief Medical Officer's Fax Machine" - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "baE" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance/two, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"baG" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "baM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3085,6 +3002,22 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"bbT" = ( +/obj/structure/closet/crate, +/obj/item/stack/cable_coil, +/obj/item/crowbar, +/obj/item/screwdriver{ + pixel_y = 16 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) +"bcb" = ( +/obj/structure/sign/warning/secure_area, +/turf/closed/wall/r_wall, +/area/station/science/research) "bcf" = ( /obj/machinery/portable_atmospherics/canister, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -3099,6 +3032,26 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"bcw" = ( +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/west, +/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/recreation) +"bcx" = ( +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/spawner/directional/south, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) "bcT" = ( /obj/machinery/door/poddoor/preopen{ id = "bridge blast"; @@ -3118,6 +3071,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/bridge) +"bdb" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/random/directional/east, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "bdv" = ( /obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/trunk, @@ -3138,16 +3102,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/smooth_large, /area/station/medical/surgery/theatre) -"bdE" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/structure/sign/poster/contraband/random/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "bdP" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -3253,15 +3207,30 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"bfy" = ( -/obj/item/retractor, -/obj/item/hemostat{ - pixel_x = -10 +"bfw" = ( +/obj/machinery/light_switch/directional/south, +/obj/machinery/conveyor_switch/oneway{ + id = "packageSort2"; + name = "Sort and Deliver"; + pixel_x = -2; + pixel_y = 12 }, -/obj/structure/table, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted, -/turf/open/floor/iron/white, -/area/station/science/robotics/lab) +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "packageExternal"; + name = "Crate Returns"; + pixel_x = -5; + pixel_y = -3 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/white/corner, +/obj/structure/disposalpipe/segment, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/cargo/sorting) "bfM" = ( /obj/machinery/door/airlock/public/glass{ name = "Art Storage" @@ -3297,11 +3266,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white/smooth_large, /area/station/medical/chemistry) -"bgx" = ( -/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/storage) "bgS" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/camera/directional/west{ @@ -3416,16 +3380,6 @@ /obj/machinery/component_printer, /turf/open/floor/iron/white, /area/station/science/explab) -"biz" = ( -/obj/structure/table, -/obj/item/analyzer, -/obj/effect/turf_decal/siding/purple{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/iron/white, -/area/station/science/ordnance/office) "biA" = ( /obj/machinery/holopad, /obj/effect/turf_decal/delivery, @@ -3447,19 +3401,6 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"bjf" = ( -/obj/structure/table, -/obj/machinery/status_display/ai/directional/west, -/obj/machinery/flasher/directional/south{ - id = "AI" - }, -/obj/item/ai_module/reset{ - pixel_x = 2; - pixel_y = 8 - }, -/obj/item/ai_module/supplied/freeform, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) "bjl" = ( /obj/machinery/rnd/production/techfab/department/service, /obj/effect/turf_decal/trimline/brown/warning{ @@ -3536,6 +3477,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/research) +"bjK" = ( +/obj/structure/tank_holder/extinguisher, +/obj/machinery/camera/directional/east{ + c_tag = "Medbay Cryogenics"; + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/cryo) "bjP" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/foyer) @@ -3557,6 +3508,12 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"bkJ" = ( +/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/plating, +/area/station/maintenance/port/fore) "bkM" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/engine, @@ -3585,24 +3542,6 @@ /obj/effect/spawner/random/vending/snackvend, /turf/open/floor/wood, /area/station/service/library) -"blg" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"blt" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Cargo Bay - Mailroom" - }, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/white/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "blu" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/west, @@ -3646,17 +3585,6 @@ }, /turf/open/floor/iron, /area/station/command/gateway) -"bmn" = ( -/obj/structure/cable, -/obj/machinery/camera/motion/directional/south{ - c_tag = "Vault"; - network = list("vault") - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "bmB" = ( /obj/machinery/light_switch/directional/south, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -3722,6 +3650,21 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"bny" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; + name = "Antechamber Turret Control"; + pixel_x = 30; + req_access = list("minisat") + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) "bnA" = ( /obj/structure/plasticflaps, /obj/machinery/conveyor{ @@ -3832,6 +3775,26 @@ dir = 4 }, /area/station/service/chapel) +"bpq" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/kitchen) "bpu" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -3859,6 +3822,24 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) +"bpY" = ( +/obj/machinery/light/small/directional/west, +/obj/item/clothing/mask/animal/horsehead, +/obj/structure/table/wood, +/obj/machinery/airalarm/directional/south, +/obj/item/cigarette/pipe, +/obj/item/clothing/mask/fakemoustache, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/wood, +/area/station/service/theater) +"bqg" = ( +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/east, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/white/corner, +/area/station/hallway/secondary/entry) "bqk" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -3867,6 +3848,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"bqC" = ( +/obj/structure/table/wood, +/obj/item/cigarette/pipe, +/turf/open/floor/wood, +/area/station/commons/lounge) "bqJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3879,12 +3865,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"bqP" = ( -/obj/effect/landmark/start/depsec/supply, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "bqX" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) @@ -3917,18 +3897,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) -"brN" = ( -/obj/structure/table, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/mask/surgical, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = -10; - pixel_y = -1 - }, -/turf/open/floor/iron/white, -/area/station/science/robotics/lab) "brO" = ( /obj/structure/transit_tube/diagonal/topleft, /turf/open/space, @@ -3995,13 +3963,6 @@ }, /turf/open/floor/wood, /area/station/service/library) -"bsv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "bsz" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -4061,15 +4022,19 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"btD" = ( +"btC" = ( /obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 + dir = 9 }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/turf/open/floor/iron/dark/textured_large, +/area/station/science/cytology) +"btG" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/table, +/obj/item/storage/belt/utility/full, +/obj/item/borg/upgrade/rename, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) "btL" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 10 @@ -4117,6 +4082,14 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron, /area/station/science/xenobiology) +"buv" = ( +/obj/structure/sign/warning/secure_area/directional/west, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/closet/bombcloset, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "buE" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/window/spawner/directional/west, @@ -4152,6 +4125,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"buL" = ( +/obj/structure/closet/secure_closet/exile, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/gateway) "buN" = ( /obj/structure/flora/bush/large/style_random, /obj/structure/disposalpipe/segment, @@ -4187,16 +4168,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/lab) -"bvU" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "bvY" = ( /obj/machinery/power/tracker, /obj/structure/cable, @@ -4245,15 +4216,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) -"bxc" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = 14 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "bxf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4288,6 +4250,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"bxr" = ( +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "bxE" = ( /obj/machinery/camera/directional/south{ c_tag = "Chemistry South"; @@ -4351,6 +4317,41 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"byE" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "rdrnd"; + name = "Research and Development Containment Control"; + pixel_x = -6; + req_access = list("rd") + }, +/obj/machinery/button/door/directional/north{ + id = "rdordnance"; + name = "Ordnance Containment Control"; + pixel_x = 6; + req_access = list("rd") + }, +/obj/machinery/button/door/directional/north{ + id = "rdoffice"; + name = "Privacy Control"; + pixel_y = 34; + req_access = list("rd") + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/rd) +"byQ" = ( +/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/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "byR" = ( /obj/structure/sign/warning/secure_area/directional/north, /obj/structure/cable, @@ -4387,6 +4388,22 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"bzV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "innerbrig"; + name = "Brig" + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/turf/open/floor/iron, +/area/station/security/brig) "bAA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4423,18 +4440,23 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"bBA" = ( -/obj/structure/disposalpipe/segment, +"bBy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/newscaster/directional/west, /obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/sorting/mail{ dir = 8 }, +/obj/effect/mapping_helpers/mail_sorting/supply/cargo_bay, /turf/open/floor/iron, -/area/station/hallway/primary/central) -"bBC" = ( -/obj/structure/sign/poster/random/directional/west, +/area/station/hallway/primary/port) +"bBA" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/newscaster/directional/west, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -4518,6 +4540,15 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"bDn" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "bDp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4561,6 +4592,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/office) +"bEv" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Exterior Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "bEA" = ( /obj/structure/cable, /obj/machinery/camera/directional/south{ @@ -4588,6 +4627,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) +"bEK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "bER" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -4635,6 +4684,17 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron, /area/station/science/robotics/lab) +"bFN" = ( +/obj/machinery/chem_dispenser, +/obj/machinery/button/door/directional/north{ + id = "pharmacy_shutters"; + name = "pharmacy shutters control"; + pixel_x = 24; + req_access = list("medical") + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "bGo" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -4642,6 +4702,11 @@ /obj/effect/spawner/random/structure/crate_loot, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"bGu" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "bGC" = ( /turf/closed/wall, /area/station/hallway/primary/central) @@ -4680,6 +4745,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) +"bHv" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/closed/wall, +/area/station/cargo/warehouse) "bHD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -4691,12 +4762,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"bHI" = ( -/obj/machinery/hydroponics/soil, -/obj/item/cultivator, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/station/security/prison/garden) "bHN" = ( /obj/item/radio/intercom/directional/south, /obj/structure/cable, @@ -4715,15 +4780,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"bHT" = ( -/obj/machinery/requests_console/directional/north{ - department = "Law Office"; - name = "Lawyer Requests Console" - }, -/obj/machinery/newscaster/directional/west, -/obj/structure/aquarium/lawyer, -/turf/open/floor/wood, -/area/station/service/lawoffice) +"bIa" = ( +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "bIi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4733,6 +4793,45 @@ }, /turf/open/floor/wood/large, /area/station/commons/lounge) +"bIq" = ( +/obj/structure/table/wood, +/obj/machinery/button/ticket_machine{ + pixel_x = 38 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = 6; + pixel_y = -34 + }, +/obj/machinery/button/door/directional/south{ + id = "hop"; + name = "Privacy Shutters Control"; + pixel_x = -6; + req_access = list("hop") + }, +/obj/item/paper_bin/carbon{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/stamp/head/hop{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/machinery/button/door/directional/south{ + id = "hopqueue"; + name = "Queue Shutters Control"; + pixel_x = -6; + pixel_y = -34; + req_access = list("hop") + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/machinery/button/photobooth{ + pixel_x = 26 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "bIv" = ( /obj/machinery/smartfridge/organ, /obj/machinery/door/firedoor, @@ -4745,17 +4844,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/customs) -"bIE" = ( -/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/trimline/brown/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "bIH" = ( /obj/structure/chair/comfy/beige, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4809,6 +4897,16 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"bJQ" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/sign/poster/official/random/directional/east, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/break_room) "bJW" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=12-Central-Starboard"; @@ -4817,21 +4915,47 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"bKe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/airalarm/directional/south, +"bJX" = ( /obj/structure/cable, -/obj/structure/table/glass, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) +/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/station/cargo/storage) +"bKv" = ( +/obj/item/pen, +/obj/structure/table/reinforced, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/item/folder/red, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/machinery/newscaster/directional/north, +/obj/item/screwdriver{ + pixel_y = 10 + }, +/obj/item/radio/off, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) "bKz" = ( /turf/closed/wall/mineral/plastitanium, /area/station/security/execution/transfer) +"bKB" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "bKT" = ( /obj/machinery/door/airlock/grunge{ name = "Prison Forestry" @@ -4844,11 +4968,30 @@ "bLd" = ( /turf/closed/wall, /area/station/maintenance/starboard/aft) -"bLj" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/trimline/brown/filled/warning, -/turf/open/floor/iron, -/area/station/cargo/sorting) +"bLh" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/bottle/syrup_bottle/korta_nectar{ + pixel_x = 5; + pixel_y = 16 + }, +/obj/item/reagent_containers/cup/bottle/syrup_bottle/liqueur{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/item/reagent_containers/cup/bottle/syrup_bottle/caramel{ + pixel_x = 15; + pixel_y = 16 + }, +/obj/item/storage/fancy/coffee_condi_display{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) "bLm" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/green, @@ -4905,11 +5048,6 @@ }, /turf/open/floor/iron/checker, /area/station/engineering/atmos/pumproom) -"bME" = ( -/obj/structure/table, -/obj/item/cigarette/pipe, -/turf/open/floor/plating, -/area/station/maintenance/port) "bMM" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -4929,17 +5067,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"bMW" = ( -/obj/structure/sign/warning/vacuum/external/directional/south, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "bMY" = ( /turf/closed/wall, /area/station/medical/office) @@ -4984,16 +5111,26 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"bNv" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) +"bNw" = ( +/obj/structure/railing/corner, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "bNE" = ( /obj/machinery/light/directional/east, /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"bNN" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/cargo/lobby) "bNP" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -5032,10 +5169,10 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"bOP" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/light/directional/south, -/obj/structure/disposalpipe/segment, +"bPc" = ( +/obj/effect/turf_decal/trimline/brown/filled/shrink_ccw{ + dir = 8 + }, /turf/open/floor/iron, /area/station/cargo/storage) "bPi" = ( @@ -5104,6 +5241,15 @@ /obj/effect/landmark/start/scientist, /turf/open/floor/engine, /area/station/science/explab) +"bRp" = ( +/obj/effect/spawner/random/decoration/microwave{ + dir = 1; + pixel_y = 2 + }, +/obj/structure/table/wood, +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "bRq" = ( /obj/structure/table/wood, /obj/item/food/grown/harebell{ @@ -5182,19 +5328,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"bSp" = ( -/obj/machinery/door/airlock/mining{ - name = "Quartermaster's Office" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/qm, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/diagonal_edge, -/obj/effect/turf_decal/tile/brown/diagonal_centre, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/diagonal, -/area/station/command/heads_quarters/qm) "bSr" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/airalarm/directional/west, @@ -5202,6 +5335,30 @@ dir = 8 }, /area/station/commons/fitness) +"bSs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/table/glass, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/screwdriver{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/requests_console/directional/west{ + department = "Pharmacy"; + name = "Pharmacy Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/mapping_helpers/requests_console/ore_update, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "bSY" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance, @@ -5224,6 +5381,20 @@ }, /turf/open/floor/iron, /area/station/commons/lounge) +"bTm" = ( +/obj/structure/table/reinforced, +/obj/item/wheelchair{ + pixel_y = -3 + }, +/obj/item/wheelchair, +/obj/item/wheelchair{ + pixel_y = 3 + }, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/west, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/medical/office) "bTq" = ( /obj/machinery/camera/motion/directional/south{ c_tag = "AI Upload Chamber - Port"; @@ -5234,27 +5405,49 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"bUb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/obj/effect/decal/cleanable/wrapping, -/turf/open/floor/iron, -/area/station/cargo/sorting) "bUc" = ( /obj/machinery/shower/directional/west, /obj/effect/landmark/start/assistant, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"bUg" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/opposingcorners, +"bUk" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/service/kitchen) +"bUo" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/plasteel{ + amount = 15 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/structure/fireaxecabinet/mechremoval/directional/east, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/science/robotics/lab) +"bUt" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/item/radio/intercom/directional/west, +/obj/item/pinpointer/nuke, +/obj/item/disk/nuclear, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain/private) "bUC" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -5325,6 +5518,35 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"bVK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/virology{ + autoclose = 0; + frequency = 1449; + id_tag = "virology_airlock_interior"; + name = "Virology Interior Airlock" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_x = 8; + pixel_y = -24; + req_access = list("virology") + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + 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/medical/virology, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/white, +/area/station/medical/virology) "bWe" = ( /obj/structure/table/glass, /obj/structure/reagent_dispensers/wall/virusfood/directional/west, @@ -5350,17 +5572,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"bWs" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "bWw" = ( /obj/structure/chair/stool/directional/south, /obj/machinery/computer/pod/old/mass_driver_controller/trash{ @@ -5368,19 +5579,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"bWA" = ( -/obj/machinery/light/directional/west, -/obj/machinery/piratepad/civilian, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "bWM" = ( /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/tile/blue, @@ -5420,6 +5618,34 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"bXc" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/machinery/requests_console/directional/east{ + department = "Research Lab"; + name = "Research Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/ore_update, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/trimline/purple/filled/warning/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/lab) +"bXg" = ( +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/science/explab) "bXk" = ( /obj/machinery/telecomms/server/presets/command, /turf/open/floor/circuit/telecomms/mainframe, @@ -5497,23 +5723,27 @@ "bYz" = ( /turf/open/floor/circuit, /area/station/maintenance/port/aft) -"bYF" = ( -/obj/structure/sign/chalkboard_menu, -/turf/closed/wall, -/area/station/commons/storage/primary) -"bYU" = ( -/obj/item/folder/red{ - pixel_y = 3 - }, -/obj/structure/table/glass, -/obj/item/folder/red{ - pixel_y = 3 +"bYN" = ( +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 }, -/obj/effect/turf_decal/tile/red/half/contrasted{ +/obj/effect/turf_decal/tile/green/half/contrasted{ dir = 4 }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) +"bZb" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast Doors"; + pixel_y = 1; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "bZq" = ( /obj/machinery/seed_extractor, /obj/effect/turf_decal/stripes/line{ @@ -5566,10 +5796,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"car" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, +"cap" = ( +/obj/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/sorting) "caO" = ( /obj/effect/decal/cleanable/dirt, @@ -5579,6 +5810,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"caV" = ( +/obj/vehicle/sealed/mecha/ripley/cargo, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/iron/recharge_floor, +/area/station/cargo/warehouse) "cbg" = ( /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -5595,21 +5831,20 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"cbp" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/normal/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "cbz" = ( /turf/closed/wall, /area/station/cargo/storage) -"cbK" = ( -/obj/structure/table/reinforced, -/obj/item/emergency_bed, -/obj/item/emergency_bed{ - pixel_y = 3 - }, -/obj/item/emergency_bed{ - pixel_y = 6 - }, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/station/medical/office) "ccc" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -5618,23 +5853,6 @@ /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"cci" = ( -/obj/machinery/computer/mecha{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 5 - }, -/obj/machinery/requests_console/directional/east{ - department = "Research Director's Desk"; - name = "Research Director's Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/computer/security/telescreen/rd/directional/north, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/rd) "ccD" = ( /mob/living/carbon/human/species/monkey, /turf/open/floor/grass, @@ -5671,6 +5889,19 @@ }, /turf/open/floor/iron, /area/station/commons/toilet/auxiliary) +"cdC" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"cdS" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "cdX" = ( /turf/closed/wall, /area/station/engineering/storage/tech) @@ -5728,16 +5959,6 @@ }, /turf/open/space, /area/space/nearstation) -"ceY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/structure/crate, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "ceZ" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 4 @@ -5781,48 +6002,13 @@ /obj/machinery/oven/range, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"cfJ" = ( -/obj/structure/cable, -/obj/structure/table/wood/fancy/black, -/obj/item/storage/fancy/cigarettes/cigars/cohiba{ - pixel_x = 3; - pixel_y = 14 - }, -/obj/item/reagent_containers/cup/glass/bottle/champagne{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/item/cigarette/cigar{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/item/cigarette/cigar{ - pixel_x = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/north{ - pixel_x = -5 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) -"cfX" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/delivery_chute{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/window/spawner/directional/south, -/obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/west, -/obj/machinery/door/window/right/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/disposal) +"cfH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) "cgi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/side{ @@ -5855,6 +6041,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"cgP" = ( +/obj/machinery/air_sensor/ordnance_burn_chamber, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"cgZ" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "cha" = ( /obj/machinery/door/airlock/research/glass{ name = "Ordnance Lab" @@ -5865,6 +6060,16 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) +"chn" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/break_room) "chH" = ( /obj/structure/chair/stool/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5892,14 +6097,6 @@ }, /turf/closed/wall, /area/station/maintenance/central) -"cia" = ( -/obj/structure/sign/poster/random/directional/south, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "cii" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -5907,6 +6104,15 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space/nearstation) +"ciE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "ciG" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5971,6 +6177,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"ckB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) "ckE" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -5986,16 +6200,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"clf" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "clj" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, @@ -6013,14 +6217,6 @@ "clq" = ( /turf/open/floor/carpet, /area/station/security/detectives_office) -"clD" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ - name = "Burn Chamber Exterior Airlock" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) "clE" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -6053,11 +6249,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) -"cmA" = ( -/obj/structure/table/wood, -/obj/item/folder/red, -/turf/open/floor/carpet, -/area/station/command/bridge) "cmB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -6076,6 +6267,31 @@ /obj/item/bodypart/leg/left, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"cmX" = ( +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "QMLoad"; + name = "Loading Conveyor"; + pixel_x = -13; + pixel_y = -5 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"cna" = ( +/obj/structure/table, +/obj/item/storage/box/lights/mixed{ + pixel_y = 9; + pixel_x = 8 + }, +/obj/item/storage/box/lights/mixed{ + pixel_y = 5; + pixel_x = -6 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "cnc" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -6158,12 +6374,16 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) -"coE" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 4 +"com" = ( +/obj/structure/cable, +/obj/machinery/netpod, +/obj/machinery/light/directional/west, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) +"coz" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 }, /turf/open/floor/iron, /area/station/cargo/storage) @@ -6189,31 +6409,26 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"cpn" = ( +/obj/structure/table, +/obj/machinery/newscaster/directional/north, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "cpp" = ( /obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"cpw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/science/cytology) -"cpF" = ( -/obj/structure/table/glass, -/obj/item/folder/blue{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/folder/white, -/obj/item/pen{ - pixel_x = -7; - pixel_y = 8 - }, -/obj/item/computer_disk/medical, -/obj/item/computer_disk/medical, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "cpH" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/yellow, @@ -6268,6 +6483,26 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/port/aft) +"cqm" = ( +/obj/item/disk/data{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/item/disk/tech_disk{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/disk/design_disk{ + name = "component design disk"; + pixel_y = 6 + }, +/obj/structure/table/wood, +/obj/item/toy/talking/ai{ + name = "\improper Nanotrasen-brand toy AI"; + pixel_y = 6 + }, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "cqp" = ( /obj/machinery/airalarm/directional/north, /obj/effect/spawner/random/structure/closet_private, @@ -6378,10 +6613,21 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/engineering/break_room) -"csy" = ( -/obj/structure/dresser, -/turf/open/floor/wood, -/area/station/service/theater) +"csz" = ( +/obj/structure/table, +/obj/item/raw_anomaly_core/random{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/raw_anomaly_core/random{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/raw_anomaly_core/random, +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "csQ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ @@ -6404,15 +6650,6 @@ /obj/machinery/disposal/bin, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"ctu" = ( -/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{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "ctL" = ( /obj/machinery/computer/records/security{ dir = 4 @@ -6433,15 +6670,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) -"cua" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "cuc" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -6453,16 +6681,9 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) "cuh" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/machinery/camera/directional/north{ - c_tag = "Science Research Office"; - network = list("ss13","rd") - }, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/turf/open/floor/iron, -/area/station/science/lab) +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/maintenance/port/fore) "cuk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -6484,6 +6705,32 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"cuM" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/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/cup/rag{ + pixel_x = -4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) +"cuO" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/closet/firecloset, +/obj/structure/sign/warning/secure_area/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "cuZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -6516,6 +6763,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"cvv" = ( +/obj/machinery/conveyor/inverted{ + dir = 10; + id = "QMLoad2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/railing, +/turf/open/floor/plating, +/area/station/cargo/storage) "cvw" = ( /obj/machinery/recharge_station, /turf/open/floor/iron/dark, @@ -6555,24 +6813,6 @@ /obj/machinery/shower/directional/south, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) -"cvU" = ( -/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) -"cvX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/cargo_technician, -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "cvY" = ( /turf/open/floor/plating/airless, /area/station/solars/port/aft) @@ -6658,16 +6898,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/robotics/lab) -"cwE" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/computer/cargo{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "cwF" = ( /obj/structure/sink/directional/west, /obj/structure/mirror/directional/east, @@ -6691,6 +6921,13 @@ }, /turf/open/floor/iron, /area/station/security/prison/visit) +"cwP" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "cwX" = ( /obj/machinery/door/window/brigdoor/left/directional/south{ name = "Command Desk"; @@ -6701,13 +6938,18 @@ /turf/open/floor/iron/dark, /area/station/command/bridge) "cwY" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/storage) +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/hangover, +/turf/open/floor/plating, +/area/station/cargo/sorting) "cxi" = ( /obj/item/solar_assembly, /obj/item/solar_assembly, @@ -6783,10 +7025,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood, /area/station/service/library) -"cxT" = ( -/obj/machinery/door/poddoor/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) "cxU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -6806,6 +7044,14 @@ }, /turf/open/floor/wood, /area/station/service/library) +"cyE" = ( +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos) "cyG" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -6823,6 +7069,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"cyU" = ( +/obj/structure/table/wood, +/obj/item/toy/plush/carpplushie{ + greyscale_colors = "#ff5050#000000"; + name = "\improper Nanotrasen wildlife department space carp plushie" + }, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "cyW" = ( /turf/open/floor/iron, /area/station/engineering/atmos) @@ -6835,26 +7089,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/white, /area/station/medical/abandoned) -"cza" = ( -/obj/effect/turf_decal/trimline/blue/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/corner, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/sign/departments/rndserver/directional/north, -/turf/open/floor/iron/white, -/area/station/science/research) "czs" = ( /obj/structure/easel, /obj/effect/mapping_helpers/broken_floor, @@ -6868,6 +7102,13 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/security/lockers) +"czD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "czG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6884,10 +7125,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/space/nearstation) -"czN" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/science/research) "czP" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/poster/random_contraband, @@ -6899,6 +7136,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"cAf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/crate, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "cAm" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, @@ -6938,19 +7185,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"cBv" = ( -/obj/structure/table/glass, -/obj/machinery/cell_charger, -/obj/item/stack/cable_coil, -/obj/item/assembly/igniter, -/obj/item/stock_parts/power_store/cell, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/science/lobby) "cBy" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -6967,19 +7201,6 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/medical/storage) -"cBO" = ( -/obj/structure/fireaxecabinet/directional/south, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_y = 3 - }, -/obj/machinery/light_switch/directional/east, -/obj/structure/table/glass, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "cBV" = ( /obj/machinery/mech_bay_recharge_port{ dir = 8 @@ -6990,20 +7211,44 @@ /obj/structure/railing, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"cCe" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 +"cCM" = ( +/obj/structure/lattice/catwalk, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + pixel_x = -7; + pixel_y = 2 }, -/obj/machinery/rnd/production/techfab/department/cargo, -/turf/open/floor/iron, -/area/station/cargo/storage) -"cCi" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 +/obj/item/reagent_containers/cup/glass/colocup{ + pixel_x = 3; + pixel_y = 3 }, -/turf/open/floor/iron, -/area/station/cargo/storage) +/obj/item/reagent_containers/cup/glass/colocup{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/cigarette/rollie/cannabis{ + pixel_y = -3 + }, +/turf/open/space/basic, +/area/space/nearstation) +"cCN" = ( +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/structure/table, +/obj/item/stack/sheet/plasteel{ + amount = 10 + }, +/obj/machinery/airalarm/directional/west, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/crowbar, +/obj/item/wrench, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) "cCR" = ( /obj/item/radio/intercom/directional/east, /obj/structure/kitchenspike, @@ -7023,6 +7268,34 @@ /obj/item/instrument/guitar, /turf/open/space/basic, /area/space/nearstation) +"cDM" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/genetics) +"cDO" = ( +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "cDP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7040,6 +7313,11 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"cDV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "cDX" = ( /obj/structure/chair/stool/bar/directional/south, /obj/effect/turf_decal/tile/bar/opposingcorners, @@ -7048,25 +7326,27 @@ }, /turf/open/floor/iron, /area/station/commons/lounge) -"cEe" = ( -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Security Post - Medbay"; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/machinery/light/small/directional/north, -/obj/structure/table/reinforced, -/obj/machinery/requests_console/directional/north{ - department = "Security"; - name = "Security Requests Console" +"cEv" = ( +/obj/item/food/grown/wheat, +/obj/item/food/grown/watermelon, +/obj/item/food/grown/citrus/orange, +/obj/item/food/grown/grapes, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/table/glass, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 }, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/supplies, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/medical) +/turf/open/floor/iron, +/area/station/hallway/primary/central) +"cEx" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/station/service/theater) +"cEY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) "cFa" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 @@ -7077,10 +7357,25 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"cFl" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/item/kitchen/rollingpin, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "cFp" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/storage/primary) +"cFr" = ( +/obj/structure/table, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/flasher/directional/south{ + id = "AI" + }, +/obj/effect/spawner/round_default_module, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "cFu" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, @@ -7091,6 +7386,14 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"cGq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "cGu" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -7127,56 +7430,24 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"cHp" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/structure/table, -/obj/item/stack/package_wrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/package_wrap{ - pixel_x = 1; - pixel_y = 6 - }, -/obj/item/stack/package_wrap{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/dest_tagger{ - pixel_x = -9; - pixel_y = 12 - }, -/obj/item/hand_labeler_refill{ - pixel_x = -11; - pixel_y = -3 - }, -/obj/item/stack/wrapping_paper, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"cHr" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "cHE" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"cHN" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/camera/directional/east{ - c_tag = "Science Maintenance Corridor"; - network = list("ss13","rd") +"cHG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/iron/white, -/area/station/science/research) +/obj/structure/disposalpipe/segment, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "cHQ" = ( /obj/machinery/computer/security/mining{ dir = 1 @@ -7186,12 +7457,11 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"cIa" = ( +"cHR" = ( +/obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, -/obj/machinery/status_display/evac/directional/west, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/construction/storage_wing) +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "cId" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -7201,19 +7471,15 @@ }, /turf/open/floor/plating, /area/station/science/genetics) -"cIg" = ( -/obj/structure/secure_safe/caps_spare, -/obj/structure/table/glass, -/turf/open/floor/iron/dark, -/area/station/command/bridge) -"cIH" = ( -/obj/structure/table, -/obj/item/hand_tele, -/obj/machinery/airalarm/directional/west, -/obj/effect/spawner/random/engineering/tracking_beacon, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/teleporter) +"cIl" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "cIK" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/effect/turf_decal/tile/yellow/fourcorners, @@ -7261,20 +7527,16 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"cJp" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall, -/area/station/cargo/storage) -"cJs" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 8 +"cJt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/effect/turf_decal/siding/wood, +/obj/machinery/computer/cargo{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/cargo/storage) +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "cJv" = ( /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/chem_heater/withbuffer, @@ -7287,6 +7549,17 @@ /obj/structure/table/wood, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"cJL" = ( +/obj/structure/sign/directions/evac, +/turf/closed/wall/r_wall, +/area/station/medical/chemistry) +"cJT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "cKd" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -7319,6 +7592,31 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/carpet, /area/station/commons/dorms) +"cKD" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = 3 + }, +/obj/item/circuitboard/machine/exoscanner, +/obj/item/exodrone{ + pixel_y = 11 + }, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) +"cKN" = ( +/obj/structure/table/wood, +/obj/structure/cable, +/obj/item/storage/backpack/satchel/leather/withwallet{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/stack/package_wrap, +/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{ @@ -7369,6 +7667,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) +"cLN" = ( +/obj/structure/sign/departments/exodrone/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "cMb" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -7392,13 +7694,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness) -"cMJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "cML" = ( /obj/structure/cable, /turf/closed/wall/r_wall, @@ -7424,6 +7719,23 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/white, /area/station/medical/psychology) +"cNb" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/computer/security/qm{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) +"cNg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "cNk" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 @@ -7443,30 +7755,14 @@ "cNS" = ( /turf/open/floor/iron, /area/station/maintenance/port/aft) -"cNX" = ( -/obj/item/stack/rods, -/turf/open/space/basic, -/area/space/nearstation) "cOa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/hydroponics) -"cOk" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/requests_console/directional/east{ - department = "Research Lab"; - name = "Research Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/ore_update, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/turf_decal/trimline/purple/filled/warning/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/science/lab) +"cOj" = ( +/obj/structure/sign/chalkboard_menu, +/turf/closed/wall, +/area/station/commons/storage/primary) "cOl" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -7486,11 +7782,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"cOt" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron, -/area/station/cargo/storage) "cON" = ( /obj/structure/table, /obj/item/pai_card, @@ -7508,6 +7799,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/heads_quarters/cmo) +"cOT" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "cOX" = ( /obj/structure/sign/warning/radiation/rad_area/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -7517,23 +7814,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"cPa" = ( -/obj/structure/sign/warning/secure_area/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) -"cPb" = ( -/obj/effect/landmark/start/cargo_technician, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron, -/area/station/cargo/storage) -"cPP" = ( -/obj/item/clothing/head/hats/tophat, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "cPQ" = ( /obj/structure/rack, /obj/item/clothing/gloves/color/fyellow, @@ -7573,6 +7853,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{ @@ -7621,11 +7917,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"cRZ" = ( -/obj/structure/sink/directional/east, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "cSg" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -7651,6 +7942,9 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"cSu" = ( +/turf/open/floor/iron, +/area/station/hallway/primary/central) "cSv" = ( /obj/effect/turf_decal/delivery, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -7690,6 +7984,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"cTk" = ( +/obj/machinery/camera/motion/directional/south{ + active_power_usage = 0; + c_tag = "Armory - External"; + use_power = 0 + }, +/turf/open/space/basic, +/area/space/nearstation) "cTl" = ( /obj/structure/table/glass, /obj/item/reagent_containers/syringe, @@ -7732,19 +8034,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"cTR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/poster/random/directional/south, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "cUd" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -7765,13 +8054,11 @@ }, /turf/open/floor/wood, /area/station/security/office) -"cUm" = ( -/obj/machinery/chem_dispenser, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) +"cUt" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "cUw" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -7786,20 +8073,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/wood, /area/station/commons/dorms) -"cUy" = ( -/obj/effect/landmark/navigate_destination/bar, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/reagent_containers/cup/rag, -/obj/structure/table, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) -"cUF" = ( -/obj/machinery/vending/cigarette, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) "cUH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -7814,19 +8087,22 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"cUL" = ( -/obj/structure/cable, -/obj/structure/sign/poster/official/random/directional/east, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white/corner, -/area/station/hallway/secondary/entry) "cUP" = ( /obj/effect/spawner/random/structure/closet_private, /obj/item/clothing/under/misc/assistantformal, /turf/open/floor/wood, /area/station/commons/dorms) +"cUX" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/obj/machinery/light/small/directional/west, +/obj/item/paper/fluff/gateway, +/obj/item/coin/plasma, +/obj/item/melee/chainofcommand, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "cVj" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -7843,6 +8119,17 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"cVC" = ( +/obj/structure/cable, +/obj/machinery/mineral/stacking_unit_console{ + pixel_x = 32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "cVJ" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -7912,6 +8199,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"cXc" = ( +/obj/structure/table, +/obj/item/food/grown/poppy/lily, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) "cXg" = ( /obj/machinery/recharge_station, /obj/machinery/light/small/directional/west, @@ -7929,17 +8225,13 @@ }, /turf/open/floor/iron/white, /area/station/medical/office) -"cXD" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ +"cXH" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/disposal) +/obj/structure/sign/poster/official/safety_eye_protection/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "cXP" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, @@ -7975,6 +8267,32 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"cYJ" = ( +/obj/structure/table/reinforced, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/machinery/door/firedoor, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "pharmacy_shutters"; + name = "Pharmacy Shutters" + }, +/obj/structure/desk_bell{ + pixel_x = -8 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Pharmacy Desk"; + req_access = list("pharmacy") + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "cYL" = ( /obj/machinery/door/poddoor/shutters{ id = "aux_base_shutters"; @@ -7990,6 +8308,12 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) +"cYY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/port) "cZi" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -8035,6 +8359,11 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) +"daa" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/records/medical/laptop, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "dac" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -8149,19 +8478,6 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/white, /area/station/security/prison/safe) -"dcO" = ( -/obj/effect/turf_decal/trimline/brown/filled/shrink_ccw{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) -"dcS" = ( -/obj/effect/turf_decal/trimline/red/filled/warning, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "ddc" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, @@ -8218,22 +8534,6 @@ /obj/item/wrench, /turf/open/floor/iron, /area/station/commons/storage/primary) -"ddR" = ( -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 8 - }, -/obj/machinery/door/airlock/mining{ - name = "Bitrunning Den" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/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_half, -/area/station/cargo/bitrunning/den) "deb" = ( /obj/effect/turf_decal/bot, /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden, @@ -8316,6 +8616,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/theater) +"dfa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/item/storage/test_tube_rack/full, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "dfh" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -8360,11 +8668,6 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/iron, /area/station/engineering/atmos) -"dfU" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "dgc" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction{ @@ -8447,30 +8750,6 @@ }, /turf/open/space, /area/space/nearstation) -"dgy" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty, -/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/item/stack/sheet/glass/fifty, -/obj/item/crowbar, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_x = -6; - pixel_y = 2 - }, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_x = 4; - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "dgz" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -8539,20 +8818,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"dhB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"dhz" = ( +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_y = 48; - pixel_x = 9 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 + dir = 8 }, -/turf/open/floor/iron, -/area/station/cargo/sorting) +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "dhN" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -8619,6 +8892,18 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) +"dit" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "diC" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Maintenance" @@ -8651,6 +8936,19 @@ /obj/structure/sign/warning/electric_shock/directional/south, /turf/open/space/basic, /area/space/nearstation) +"djn" = ( +/obj/structure/disposalpipe/segment{ + 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/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "dkx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, @@ -8680,6 +8978,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"dkX" = ( +/obj/structure/cable, +/obj/machinery/light/cold/directional/north, +/obj/machinery/computer/security/telescreen/isolation/directional/north, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "dla" = ( /obj/structure/chair/stool/directional/west, /obj/effect/turf_decal/trimline/red/warning{ @@ -8722,18 +9026,19 @@ /obj/structure/closet/emcloset/anchored, /turf/open/floor/plating, /area/station/maintenance/port) -"dmn" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Bar - Backroom" +"dme" = ( +/obj/effect/turf_decal/arrows{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/mirror/directional/north, -/obj/structure/sink/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposaloutlet{ + dir = 1 }, -/turf/open/floor/wood, -/area/station/service/bar/backroom) +/obj/structure/disposalpipe/trunk, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/plating, +/area/station/cargo/storage) "dmJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -8816,13 +9121,35 @@ /obj/item/storage/toolbox/electrical, /turf/open/floor/iron/white, /area/station/science/explab) -"doN" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/maintenance, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron, -/area/station/cargo/warehouse) +"dpg" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "roboticsprivacy2"; + name = "Robotics Shutters" + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/window/left/directional/north{ + name = "Robotics Desk"; + req_access = list("robotics") + }, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"dpl" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = 2; + pixel_y = 9 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 3 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "dpn" = ( /obj/effect/spawner/random/food_or_drink/donkpockets, /obj/structure/table/glass, @@ -8897,10 +9224,46 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) +"dqu" = ( +/obj/item/book/manual/wiki/security_space_law{ + name = "space law"; + pixel_y = 2 + }, +/obj/item/toy/gun, +/obj/item/restraints/handcuffs, +/obj/structure/table/wood, +/obj/item/clothing/head/collectable/hos{ + name = "novelty HoS hat" + }, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "dqx" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"dqy" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/porta_turret/ai, +/obj/machinery/computer/security/telescreen/minisat/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat_interior) +"dqE" = ( +/obj/structure/closet/toolcloset, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/light/small/directional/north, +/obj/item/lightreplacer{ + pixel_y = 7 + }, +/turf/open/floor/iron/dark/corner{ + dir = 1 + }, +/area/station/engineering/storage_shared) "dqI" = ( /obj/effect/turf_decal/bot, /obj/machinery/vending/cigarette, @@ -8915,28 +9278,14 @@ "dqN" = ( /turf/open/floor/plating, /area/station/maintenance/port/aft) -"dqR" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/power_store/cell/high, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) +"dqX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/wood, +/area/station/service/theater) "drm" = ( /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"dro" = ( -/obj/structure/filingcabinet, -/obj/item/folder/documents, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/item/poster/traitor, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "drq" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -8968,15 +9317,6 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"dsa" = ( -/obj/effect/turf_decal/siding/white{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/water, -/area/station/service/hydroponics/garden) "dsb" = ( /obj/effect/turf_decal/plaque{ icon_state = "L13" @@ -9034,6 +9374,16 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) +"dsJ" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) "dsQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -9061,24 +9411,24 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"dtt" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 1 +"dtw" = ( +/obj/machinery/door/airlock/mining{ + name = "Deliveries" }, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, -/area/station/cargo/warehouse) +/area/station/cargo/sorting) "dtB" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 8 }, /turf/open/floor/iron, /area/station/engineering/atmos) -"dtD" = ( -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "dtY" = ( /obj/machinery/meter/monitored/waste_loop, /obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{ @@ -9093,17 +9443,27 @@ dir = 1 }, /area/station/engineering/atmos/pumproom) +"duc" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/bitrunning/den) "duk" = ( /obj/machinery/light/small/dim/directional/west, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"duo" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/storage) "duu" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -9122,9 +9482,34 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/security/brig) +"duG" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "duI" = ( /turf/closed/wall, /area/station/command/bridge) +"duW" = ( +/obj/machinery/computer/security, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/requests_console/directional/north{ + department = "Quartermaster's Desk"; + name = "Security Requests Console" + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/customs) +"dve" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/obj/machinery/recharge_station, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "dvn" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -9206,6 +9591,28 @@ }, /turf/open/floor/iron/cafeteria, /area/station/engineering/atmos) +"dwH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"dwI" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/west, +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "dwJ" = ( /obj/structure/lattice, /obj/effect/spawner/random/structure/grille, @@ -9250,27 +9657,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"dxr" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/structure/table, -/obj/item/stack/package_wrap{ - pixel_x = -2; - pixel_y = 1 - }, -/obj/effect/spawner/random/bureaucracy/birthday_wrap{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/item/dest_tagger{ - pixel_x = 7; - pixel_y = 1 - }, -/obj/item/stack/wrapping_paper{ - pixel_x = -4; - pixel_y = -7 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "dxK" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/purple, @@ -9322,20 +9708,19 @@ }, /turf/open/floor/plating, /area/station/science/lab) -"dyz" = ( -/obj/structure/table, -/obj/item/integrated_circuit/loaded/speech_relay, -/obj/item/integrated_circuit/loaded/hello_world{ - pixel_y = 2; - pixel_x = 3 - }, -/turf/open/floor/iron, -/area/station/science/explab) "dzw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"dzX" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) "dzY" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/engine/n2o, @@ -9356,50 +9741,18 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/cafeteria, /area/station/security/prison) -"dAf" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/security_space_law{ - pixel_x = 9; - pixel_y = 4 - }, -/obj/structure/cable, -/obj/item/radio{ - pixel_x = -6; - pixel_y = -3 - }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/science) -"dAk" = ( -/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/cargo/storage) "dBb" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, /area/station/science/research) -"dBv" = ( -/obj/structure/sign/poster/official/anniversary_vintage_reprint/directional/north, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) -"dBS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"dBE" = ( /obj/machinery/door/airlock/maintenance{ - name = "Storage Room" - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 + name = "Cargo Bay Maintenance" }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/plating, -/area/station/maintenance/port/fore) +/area/station/cargo/storage) "dBV" = ( /obj/docking_port/stationary/escape_pod{ dir = 4 @@ -9541,6 +9894,14 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) +"dEF" = ( +/obj/machinery/atmospherics/components/binary/pump/on, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "dEH" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -9565,6 +9926,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/library) +"dFg" = ( +/obj/structure/cable, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "dFi" = ( /obj/structure/closet/l3closet/virology, /obj/effect/turf_decal/tile/green/half/contrasted{ @@ -9640,21 +10005,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"dGx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"dGC" = ( -/obj/structure/cable, -/obj/structure/railing/corner/end, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "dGD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9671,16 +10021,6 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron, /area/station/security/brig) -"dHa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/caution{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "dHc" = ( /turf/closed/wall, /area/station/hallway/primary/port) @@ -9689,6 +10029,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/main) +"dHi" = ( +/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/mining{ + name = "Cargo Bay" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/effect/landmark/navigate_destination, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron, +/area/station/cargo/lobby) "dHG" = ( /obj/machinery/atmospherics/components/binary/crystallizer{ dir = 4 @@ -9828,19 +10181,14 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) +"dKl" = ( +/obj/structure/sign/warning/pods, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/engine) "dKm" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/storage) -"dKt" = ( -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "dKC" = ( /turf/closed/wall, /area/station/maintenance/aft/lesser) @@ -9882,6 +10230,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) +"dLh" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/dresser, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "dLl" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -9892,6 +10250,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"dLm" = ( +/obj/machinery/sparker/directional/north{ + id = "Xenobio" + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "dLn" = ( /obj/structure/rack, /obj/item/wrench/medical, @@ -9899,6 +10263,7 @@ /obj/item/food/popsicle/creamsicle_orange, /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/effect/mapping_helpers/airalarm/tlv_cold_room, /turf/open/floor/iron/kitchen_coldroom, /area/station/medical/coldroom) "dLq" = ( @@ -9932,11 +10297,6 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) -"dLM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "dLN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10060,43 +10420,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"dOj" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/bot, -/obj/item/bodypart/arm/right/robot{ - pixel_x = 3 - }, -/obj/item/bodypart/arm/left/robot{ - pixel_x = -3 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/firealarm/directional/west, -/obj/item/assembly/flash/handheld{ - pixel_x = 6; - pixel_y = 13 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = 6; - pixel_y = 13 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = 6; - pixel_y = 13 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = 6; - pixel_y = 13 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = 6; - pixel_y = 13 - }, -/obj/machinery/ecto_sniffer{ - pixel_x = -6; - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/station/science/robotics/lab) "dOs" = ( /obj/structure/sign/warning/no_smoking, /turf/closed/wall/r_wall, @@ -10212,6 +10535,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/central) +"dQy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/light/cold/directional/east, +/obj/machinery/modular_computer/preset/cargochat/service{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "dQA" = ( /obj/machinery/computer/rdservercontrol{ dir = 4 @@ -10247,6 +10579,18 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"dQL" = ( +/obj/machinery/light_switch/directional/west{ + pixel_x = -20 + }, +/obj/machinery/computer/records/medical{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/light/small/directional/west, +/obj/machinery/computer/security/telescreen/med_sec/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) "dQO" = ( /obj/effect/landmark/start/atmospheric_technician, /obj/effect/decal/cleanable/dirt, @@ -10331,6 +10675,12 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"dRX" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/effect/spawner/random/armory/riot_shield, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "dRY" = ( /obj/structure/chair/office, /obj/effect/landmark/start/hangover, @@ -10343,23 +10693,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"dSd" = ( -/obj/effect/turf_decal/siding/purple{ - dir = 9 - }, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/genetics) "dSB" = ( /obj/machinery/door/airlock/grunge{ name = "Cell 3" @@ -10389,21 +10722,6 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/wood/large, /area/station/service/theater) -"dTe" = ( -/obj/item/emptysandbag, -/obj/item/emptysandbag, -/obj/item/emptysandbag, -/obj/item/emptysandbag{ - pixel_x = 8 - }, -/obj/item/emptysandbag{ - pixel_x = -9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/south, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "dTi" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -10455,6 +10773,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/burnchamber) "dTQ" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -10469,10 +10791,28 @@ /obj/structure/reagent_dispensers/wall/peppertank/directional/east, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) +"dTV" = ( +/obj/item/folder/red{ + pixel_y = 3 + }, +/obj/structure/table/glass, +/obj/item/folder/red{ + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "dTX" = ( /obj/effect/landmark/start/chemist, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"dUd" = ( +/obj/structure/noticeboard/qm, +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/command/heads_quarters/qm) "dUj" = ( /obj/structure/chair/office{ dir = 1 @@ -10568,6 +10908,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"dWf" = ( +/obj/structure/sign/plaques/kiddie{ + pixel_y = 32 + }, +/obj/machinery/camera/directional/north{ + c_tag = "AI Upload Chamber - Fore"; + network = list("aiupload") + }, +/obj/structure/table/wood/fancy/green, +/obj/effect/spawner/random/aimodule/harmless, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai_upload) +"dWg" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/food/pie/cream, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/kitchen) "dWA" = ( /obj/machinery/light/small/directional/south, /obj/machinery/power/terminal{ @@ -10672,6 +11036,9 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"dXU" = ( +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "dYa" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, @@ -10698,29 +11065,18 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/security/courtroom) -"dYi" = ( -/obj/structure/table, -/obj/item/stock_parts/micro_laser{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/stock_parts/micro_laser{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stock_parts/micro_laser{ - pixel_x = 2 - }, -/obj/item/stock_parts/micro_laser{ - pixel_x = 6; - pixel_y = -2 - }, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "dYl" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) +"dYG" = ( +/obj/structure/sign/poster/official/anniversary_vintage_reprint/directional/north, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "dYK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wood{ @@ -10735,11 +11091,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/lab) -"dYW" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/records/medical/laptop, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "dZb" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -10808,6 +11159,16 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"eaA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "eaF" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10838,6 +11199,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) +"eaQ" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/construction/storage_wing) +"ebd" = ( +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/sorting) "ebr" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=0-SecurityDesk"; @@ -10911,6 +11284,24 @@ /obj/structure/cable, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"ecm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "Disposals" + }, +/obj/structure/plasticflaps, +/obj/machinery/door/window/right/directional/south{ + name = "Delivery Door"; + req_access = list("cargo") + }, +/obj/machinery/conveyor{ + dir = 1; + id = "garbage" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "ecp" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/bot, @@ -11061,26 +11452,6 @@ }, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"eeD" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 1 - }, -/obj/item/storage/box/bodybags{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/storage/box/disks{ - pixel_x = 6; - pixel_y = 3 - }, -/obj/item/clothing/gloves/latex{ - pixel_x = 4; - pixel_y = 9 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/genetics) "eeT" = ( /obj/machinery/vending/hydroseeds{ slogan_delay = 700 @@ -11132,14 +11503,6 @@ /obj/machinery/light/no_nightlight/directional/east, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) -"efX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "efY" = ( /obj/structure/chair/office{ dir = 1 @@ -11201,6 +11564,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, @@ -11256,14 +11627,6 @@ /obj/structure/chair/stool/directional/west, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"ehy" = ( -/obj/structure/window/spawner/directional/south, -/mob/living/basic/cow{ - name = "Betsy"; - real_name = "Betsy" - }, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "ehB" = ( /obj/machinery/door/poddoor{ id = "SecJusticeChamber"; @@ -11360,17 +11723,32 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"ejx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/wood, -/area/station/service/theater) -"ejz" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 +"ejD" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/table, +/obj/item/stack/wrapping_paper, +/obj/item/paper_bin/carbon{ + pixel_y = 8; + pixel_x = 6 + }, +/obj/item/pen/fourcolor{ + pixel_y = 8; + pixel_x = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/wrapping, +/obj/item/sales_tagger{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/dest_tagger{ + pixel_x = -2; + pixel_y = 4 }, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/cargo/sorting) "ejF" = ( /obj/effect/turf_decal/trimline/brown/warning{ dir = 5 @@ -11515,19 +11893,6 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/north, /turf/open/floor/iron, /area/station/commons/lounge) -"ekU" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/oil/slippery, -/obj/effect/decal/cleanable/blood/gibs/down, -/mob/living/simple_animal/bot/mulebot{ - name = "Leaping Rabbit" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "ekV" = ( /obj/machinery/mass_driver/ordnance, /turf/open/floor/plating, @@ -11543,16 +11908,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"elg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/poddoor/shutters{ - name = "Warehouse Shutters"; - id = "warehouse" - }, -/turf/open/floor/catwalk_floor, -/area/station/cargo/warehouse) "eli" = ( /obj/item/radio/intercom/directional/south, /obj/structure/disposaloutlet{ @@ -11655,6 +12010,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/port) +"emU" = ( +/obj/structure/cable, +/obj/machinery/netpod, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "emY" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -11672,27 +12032,23 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"enm" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 +"enF" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/structure/cable, +/obj/machinery/camera/directional/east{ + c_tag = "Security Post - Research Division"; + network = list("ss13","rd") }, -/obj/structure/reagent_dispensers/beerkeg, -/obj/item/toy/figure/qm{ - pixel_x = 3; - pixel_y = 12 +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"enG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) -"enJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/iron, -/area/station/construction/storage_wing) +/turf/open/floor/iron/dark/textured_large, +/area/station/science/cytology) "enK" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -11708,6 +12064,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"enS" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/item/controller, +/obj/item/compact_remote, +/obj/item/compact_remote, +/turf/open/floor/iron/white, +/area/station/science/explab) "eoj" = ( /obj/machinery/meter{ name = "Mixed Air Tank Out" @@ -11768,18 +12132,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"epk" = ( -/obj/structure/sign/poster/official/cleanliness/directional/east, -/obj/machinery/door/window/right/directional/north{ - name = "Hydroponics Delivery"; - req_access = list("hydroponics") - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/service/hydroponics) "epF" = ( /obj/machinery/chem_master/condimaster{ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; @@ -11827,34 +12179,18 @@ /obj/structure/cable, /turf/open/space/basic, /area/station/solars/port/fore) -"eqi" = ( -/obj/structure/cable, -/obj/machinery/mineral/stacking_unit_console{ - pixel_x = 32 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "eqn" = ( /obj/machinery/duct, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"eqo" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio3"; - name = "Xenobio Pen 3 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron, -/area/station/science/xenobiology) +"eqt" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "eqS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -11884,22 +12220,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"erw" = ( -/obj/structure/table, -/obj/machinery/newscaster/directional/north, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/commons/vacant_room/commissary) "erx" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -11947,6 +12267,16 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/wood, /area/station/service/library) +"erU" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/computer/cargo/request{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "esd" = ( /obj/item/reagent_containers/cup/glass/drinkingglass{ pixel_x = 4; @@ -11981,16 +12311,6 @@ "esk" = ( /turf/closed/wall/r_wall, /area/station/engineering/storage/tcomms) -"est" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "esH" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -12074,18 +12394,6 @@ /obj/structure/light_construct/small/directional/east, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"etx" = ( -/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 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "etA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -12148,21 +12456,28 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"eus" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/north{ - id = "warehouse"; - name = "Warehouse Shutters Control" - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, -/obj/structure/table, -/obj/machinery/microwave, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "eut" = ( /turf/closed/wall, /area/station/science/robotics/lab) +"euw" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/firealarm/directional/west, +/obj/machinery/camera/directional/north{ + c_tag = "Science Mechbay"; + network = list("ss13","rd") + }, +/obj/machinery/button/door/directional/north{ + id = "mechbay"; + name = "Mech Bay Shutters Control"; + req_access = list("robotics") + }, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) "euQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12223,10 +12538,35 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) +"ewc" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/bin{ + name = "Jim Norton's Quebecois Coffee disposal unit" + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "ewf" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"ewh" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/item/wrench, +/obj/machinery/light_switch/directional/south, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/server) "ewj" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/structure/disposalpipe/segment{ @@ -12248,10 +12588,45 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"ewD" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall/r_wall, -/area/station/science/xenobiology/hallway) +"ewC" = ( +/obj/machinery/camera{ + c_tag = "Warden's Office"; + dir = 10 + }, +/obj/structure/table, +/obj/machinery/button/door{ + desc = "Controls the shutters over the cell windows."; + id = "Secure Gate"; + name = "Cell Window Control"; + pixel_x = -6; + pixel_y = 7; + req_access = list("security"); + specialfunctions = 4 + }, +/obj/machinery/button/door{ + desc = "Controls the shutters over the brig windows."; + id = "briglockdown"; + name = "Brig Lockdown Control"; + pixel_x = 6; + pixel_y = 7; + req_access = list("security") + }, +/obj/machinery/button/door{ + desc = "Controls the blast doors in front of the prison wing."; + id = "Prison Gate"; + name = "Prison Wing Lockdown"; + pixel_y = -3; + req_access = list("brig") + }, +/obj/item/key/security, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/security/warden) "ewR" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering{ @@ -12275,35 +12650,13 @@ /obj/structure/cable, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) -"exw" = ( -/obj/machinery/firealarm/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal/bin/tagger, -/obj/structure/sign/poster/official/random/directional/south, -/obj/effect/turf_decal/trimline/brown/filled/corner, +"exB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/sorting) -"exz" = ( -/obj/item/poster/random_contraband, -/obj/item/poster/random_contraband, -/obj/item/poster/random_contraband, -/obj/item/poster/random_contraband, -/obj/item/poster/random_contraband, -/obj/structure/table/wood, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/spawner/random/food_or_drink/booze{ - spawn_loot_count = 2; - spawn_random_offset = 1 - }, -/obj/effect/spawner/random/entertainment/musical_instrument, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "exC" = ( /obj/effect/turf_decal/plaque{ icon_state = "L3" @@ -12318,6 +12671,16 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) +"exQ" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "eyd" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -12354,11 +12717,23 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"ezu" = ( -/obj/machinery/light/small/directional/south, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) +"ezw" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/kirbyplants/random{ + pixel_x = -7 + }, +/obj/machinery/camera/directional/north, +/obj/machinery/digital_clock/directional/east, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/item/poster/traitor, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "ezT" = ( /obj/machinery/door/airlock/research{ name = "Research Division Access" @@ -12408,17 +12783,6 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"eBp" = ( -/obj/structure/table/wood, -/obj/item/staff/broom, -/obj/item/wrench, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/wood/large, -/area/station/service/theater) "eBw" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -12502,15 +12866,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/space_hut) -"eDb" = ( -/obj/structure/mirror/directional/north, -/obj/structure/sink/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/soap{ - spawn_scatter_radius = 1 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/captain/private) "eDc" = ( /obj/machinery/door/airlock/atmos{ name = "Hypertorus Fusion Reactor" @@ -12532,6 +12887,12 @@ }, /turf/closed/wall/r_wall, /area/station/command/heads_quarters/captain/private) +"eDO" = ( +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "eDX" = ( /obj/structure/sign/departments/science/directional/east, /obj/effect/turf_decal/tile/purple{ @@ -12539,6 +12900,32 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"eEa" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/smartfridge/drying, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 9 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) +"eEf" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Bar - Backroom" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/station/service/bar/backroom) "eEn" = ( /obj/structure/closet/crate/coffin, /obj/effect/decal/cleanable/cobweb, @@ -12550,6 +12937,12 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"eED" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "eEG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -12681,15 +13074,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"eGO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/arrows/red{ - dir = 1 - }, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "eGV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -12718,10 +13102,14 @@ }, /turf/open/floor/iron, /area/station/commons/lounge) -"eIv" = ( -/obj/machinery/air_sensor/ordnance_burn_chamber, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +"eIc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/directional/south, +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "eIy" = ( /obj/structure/cable, /obj/machinery/photocopier, @@ -12741,6 +13129,16 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/white, /area/station/science/research) +"eJd" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/wood, +/area/station/service/lawoffice) "eJh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -12801,22 +13199,22 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"eKl" = ( -/obj/machinery/computer/upload/ai, -/obj/machinery/door/window/right/directional/south{ - name = "Upload Console Window"; - req_access = list("ai_upload") - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) "eKv" = ( /obj/machinery/portable_atmospherics/canister, /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"eKw" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/modular_computer/preset/civilian{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/east, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/iron/dark/corner, +/area/station/engineering/storage_shared) "eKA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12832,9 +13230,27 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/hydroponics) +"eKG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "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) "eLh" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -12887,13 +13303,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"eLU" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "eLX" = ( /obj/structure/chair, /obj/structure/sign/warning/vacuum/external/directional/north, @@ -12938,10 +13347,17 @@ }, /turf/closed/wall/r_wall, /area/station/hallway/secondary/command) -"eMC" = ( -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +"eMf" = ( +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/obj/structure/window/spawner/directional/west, +/obj/machinery/light/small/directional/south, +/obj/structure/window/spawner/directional/east, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/sorting) "eMG" = ( /obj/structure/closet/lasertag/blue, /obj/effect/landmark/start/hangover/closet, @@ -12964,6 +13380,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"eMK" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "eMW" = ( /obj/structure/flora/bush/pale/style_random, /obj/structure/flora/bush/ferny/style_random, @@ -12973,6 +13396,11 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/grass, /area/station/science/research) +"eMY" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "eNb" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -12999,14 +13427,6 @@ /obj/machinery/vending/wardrobe/coroner_wardrobe, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"eNQ" = ( -/obj/structure/table/wood, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/turf/open/floor/carpet, -/area/station/command/bridge) "eNR" = ( /turf/closed/wall, /area/station/ai_monitored/aisat/exterior) @@ -13015,6 +13435,24 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"eOb" = ( +/obj/machinery/vending/wardrobe/cargo_wardrobe, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) +"eOl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/obj/machinery/door/airlock/maintenance{ + name = "Quartermaster Maintenance" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "eOm" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -13055,17 +13493,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, /area/station/security/brig) -"eOu" = ( -/obj/machinery/computer/upload/borg, -/obj/machinery/door/window/left/directional/south{ - name = "Cyborg Upload Console Window"; - req_access = list("ai_upload") - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) "eOJ" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -13084,16 +13511,6 @@ }, /turf/open/floor/engine/co2, /area/station/engineering/atmos) -"ePd" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "ePg" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13101,6 +13518,11 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"ePj" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/suit_storage_unit/industrial/loader, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "ePu" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -13117,13 +13539,6 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/fitness/recreation) -"ePE" = ( -/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/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/storage) "ePN" = ( /obj/structure/chair{ dir = 8 @@ -13134,6 +13549,16 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"ePT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Cytology Pen"; + req_access = list("research") + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/cytology) "ePX" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -13225,10 +13650,24 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/cryo) -"eRC" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hop) +"eRd" = ( +/obj/machinery/light/directional/north, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/delivery_chute{ + dir = 4; + name = "Crate Returns" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"eRn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) "eRR" = ( /obj/structure/table, /obj/item/screwdriver{ @@ -13275,6 +13714,19 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) +"eSC" = ( +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/structure/table/wood, +/obj/effect/spawner/random/entertainment/musical_instrument, +/obj/item/clothing/glasses/regular/hipster{ + name = "Hipster Glasses" + }, +/turf/open/floor/wood/large, +/area/station/service/theater) "eSR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -13293,6 +13745,32 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"eTt" = ( +/obj/structure/cable, +/obj/structure/table/wood/fancy/black, +/obj/item/storage/fancy/cigarettes/cigars/cohiba{ + pixel_x = 3; + pixel_y = 14 + }, +/obj/item/reagent_containers/cup/glass/bottle/champagne{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/cigarette/cigar{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/cigarette/cigar{ + pixel_x = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/north{ + pixel_x = -5 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "eTI" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -13318,20 +13796,6 @@ /obj/structure/lattice, /turf/open/space, /area/space/nearstation) -"eUz" = ( -/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/locked, -/obj/machinery/door/airlock/vault{ - name = "Vault" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/landmark/navigate_destination, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "eUA" = ( /obj/structure/table/glass, /obj/machinery/light/small/directional/north, @@ -13387,6 +13851,11 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"eVy" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "eVz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13396,6 +13865,10 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"eVG" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "eVX" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -13569,20 +14042,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"eYC" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/spawner/random/engineering/flashlight, -/obj/effect/spawner/random/engineering/flashlight, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "eYE" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -13590,25 +14049,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) -"eYM" = ( -/obj/machinery/computer/crew{ - dir = 4 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/south{ - pixel_x = 6 - }, -/obj/machinery/button/door/directional/south{ - id = "cmoprivacy"; - name = "CMO Privacy Shutters"; - pixel_x = -8; - req_access = list("cmo") - }, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/obj/machinery/computer/security/telescreen/cmo/directional/west, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "eYT" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -13634,6 +14074,14 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/wood, /area/station/service/library) +"eZo" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "eZz" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13694,22 +14142,6 @@ dir = 1 }, /area/station/science/lobby) -"faA" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "faD" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -13763,6 +14195,26 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) +"fbE" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/structure/table{ + name = "Jim Norton's Quebecois Coffee table" + }, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_x = 5; + pixel_y = 12 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/modular_computer/laptop/preset/civilian, +/turf/open/floor/wood, +/area/station/service/cafeteria) "fbI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/holopad, @@ -13796,6 +14248,23 @@ "fcq" = ( /turf/closed/wall, /area/station/maintenance/port/greater) +"fcA" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/structure/sign/warning/secure_area/directional/west{ + pixel_y = -32 + }, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "fcJ" = ( /obj/structure/lattice, /obj/item/shard, @@ -13805,15 +14274,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"fcS" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall, -/area/station/maintenance/port/fore) -"fdj" = ( -/obj/structure/table/wood/poker, -/obj/effect/spawner/random/entertainment/gambling, -/turf/open/floor/wood, -/area/station/commons/lounge) "fdl" = ( /obj/effect/decal/cleanable/food/flour, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -13889,45 +14349,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/execution/transfer) -"feZ" = ( -/obj/machinery/camera{ - c_tag = "Warden's Office"; - dir = 10 - }, -/obj/structure/table, -/obj/machinery/button/door{ - desc = "Controls the shutters over the cell windows."; - id = "Secure Gate"; - name = "Cell Window Control"; - pixel_x = -6; - pixel_y = 7; - req_access = list("security"); - specialfunctions = 4 - }, -/obj/machinery/button/door{ - desc = "Controls the shutters over the brig windows."; - id = "briglockdown"; - name = "Brig Lockdown Control"; - pixel_x = 6; - pixel_y = 7; - req_access = list("security") - }, -/obj/machinery/button/door{ - desc = "Controls the blast doors in front of the prison wing."; - id = "Prison Gate"; - name = "Prison Wing Lockdown"; - pixel_y = -3; - req_access = list("brig") - }, -/obj/item/key/security, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/security/warden) "ffd" = ( /obj/machinery/firealarm/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13948,11 +14369,20 @@ "ffH" = ( /turf/closed/wall, /area/station/hallway/primary/fore) -"ffJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"ffL" = ( +/obj/structure/table, +/obj/item/kitchen/rollingpin, +/obj/effect/turf_decal/trimline/brown/warning, +/obj/item/reagent_containers/cup/rag, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/aquarium_kit, /turf/open/floor/iron, -/area/station/hallway/primary/port) +/area/station/hallway/secondary/service) "ffP" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating/foam{ @@ -14053,6 +14483,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"fhn" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/oil/slippery, +/obj/effect/decal/cleanable/blood/gibs/down, +/mob/living/simple_animal/bot/mulebot{ + name = "Leaping Rabbit" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fhp" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -14115,6 +14558,15 @@ }, /turf/open/floor/wood/large, /area/station/commons/lounge) +"fhU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/ordnance/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "fia" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -14136,12 +14588,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/office) -"fik" = ( -/obj/structure/window/spawner/directional/south, -/obj/structure/window/spawner/directional/west, -/obj/structure/water_source/puddle, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "fip" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -14152,28 +14598,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"fiq" = ( -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"fit" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/structure/table, -/obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = 4 - }, -/obj/effect/spawner/random/entertainment/cigarette_pack{ - pixel_x = -6; - pixel_y = 8 - }, -/obj/effect/spawner/random/entertainment/deck, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "fix" = ( /obj/structure/chair{ dir = 1 @@ -14210,6 +14634,14 @@ /obj/effect/turf_decal/siding/purple, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"fiX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fjb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14226,14 +14658,6 @@ /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"fjm" = ( -/obj/machinery/light/small/directional/east, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/wood, -/area/station/service/theater) "fjn" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -14256,6 +14680,22 @@ /obj/machinery/light/directional/east, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"fjw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/poster/official/random/directional/west, +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/machinery/door/window/left/directional/north{ + req_access = list("shipping") + }, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/plating, +/area/station/cargo/sorting) "fjD" = ( /turf/closed/wall, /area/station/commons/toilet/auxiliary) @@ -14319,26 +14759,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"fkH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/warning/directional/south, -/obj/machinery/computer/mech_bay_power_console{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"fkM" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "fkP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/airalarm/directional/west, @@ -14426,6 +14846,18 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"flG" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/sorting) "flN" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, @@ -14458,11 +14890,6 @@ dir = 4 }, /area/station/medical/morgue) -"flY" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "fma" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/lab) @@ -14506,6 +14933,17 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/service/chapel/funeral) +"fmG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance{ + name = "Mining Dock Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fmJ" = ( /obj/structure/rack, /obj/item/circuitboard/machine/telecomms/bus, @@ -14558,10 +14996,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"fnj" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/command/teleporter) "fnE" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -14660,6 +15094,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/safe) +"fpn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fpy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -14675,6 +15117,10 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"fpD" = ( +/obj/machinery/vatgrower, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/cytology) "fpE" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, @@ -14683,31 +15129,25 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/safe) -"fpG" = ( -/obj/effect/turf_decal/siding/white{ - dir = 10 +"fpV" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 }, -/obj/structure/railing{ +/obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/structure/sign/clock/directional/south, -/turf/open/water, -/area/station/service/hydroponics/garden) -"fpR" = ( -/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) -"fqh" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/structure/cable, -/obj/machinery/camera/directional/east{ - c_tag = "Security Post - Research Division"; - network = list("ss13","rd") +/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/command/heads_quarters/qm) +"fqe" = ( +/obj/machinery/door/poddoor/shutters{ + name = "Warehouse Shutters"; + id = "warehouse" }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/science) +/turf/open/floor/catwalk_floor, +/area/station/cargo/warehouse) "fqB" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/cable, @@ -14719,13 +15159,6 @@ /obj/structure/chair/stool/directional/south, /turf/open/floor/wood, /area/station/commons/lounge) -"fqF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half/contrasted, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "fqR" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -14769,9 +15202,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) -"fru" = ( -/turf/closed/wall, -/area/station/cargo/drone_bay) "frw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -14825,11 +15255,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"fsS" = ( -/obj/effect/turf_decal/bot_white, -/obj/effect/spawner/random/structure/crate_loot, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "ftb" = ( /obj/structure/lattice, /obj/structure/window/reinforced/spawner/directional/west, @@ -14861,6 +15286,15 @@ /obj/structure/sign/warning/pods, /turf/closed/wall, /area/station/commons/locker) +"ftQ" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/water, +/area/station/service/hydroponics/garden) "fuc" = ( /obj/structure/frame/machine{ anchored = 1 @@ -14868,6 +15302,9 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/circuit/green/off, /area/station/science/research) +"fur" = ( +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "fuu" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -14884,6 +15321,27 @@ "fvE" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/medical/central) +"fvK" = ( +/obj/structure/table, +/obj/item/transfer_valve{ + pixel_x = 5 + }, +/obj/item/transfer_valve, +/obj/item/transfer_valve{ + pixel_x = -5 + }, +/obj/item/transfer_valve{ + pixel_x = 5 + }, +/obj/item/transfer_valve, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) +"fwb" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) "fwz" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/iron/dark, @@ -14959,23 +15417,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"fyi" = ( -/obj/structure/closet/crate, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/light_switch/directional/north, -/obj/effect/spawner/random/engineering/flashlight, -/obj/effect/spawner/random/engineering/flashlight, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "fym" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -15041,6 +15482,22 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/station/solars/port/fore) +"fzo" = ( +/obj/effect/turf_decal/stripes/line, +/obj/item/stock_parts/micro_laser{ + pixel_x = 6; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/caution, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"fzr" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/west, +/obj/structure/water_source/puddle, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "fzE" = ( /obj/structure/sign/warning/vacuum/external/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -15075,6 +15532,13 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"fAA" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/machinery/airalarm/directional/east, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "fAE" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -15157,12 +15621,6 @@ /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) -"fCP" = ( -/obj/structure/sign/warning/secure_area/directional/west, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/central) "fDc" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -15178,12 +15636,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"fDl" = ( -/obj/structure/table/reinforced, -/obj/item/holosign_creator/robot_seat/bar, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "fDC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -15218,16 +15670,20 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"fEy" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, +"fEC" = ( /obj/structure/table/wood, -/obj/effect/spawner/random/trash/soap, -/obj/structure/sign/poster/random/directional/east, -/obj/machinery/light/small/directional/east, -/turf/open/floor/wood/large, -/area/station/service/theater) +/obj/item/cigbutt/cigarbutt{ + pixel_x = 5; + pixel_y = -1 + }, +/obj/item/radio/intercom/directional/north, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood, +/area/station/command/corporate_showroom) "fEK" = ( /turf/closed/wall, /area/station/medical/medbay/central) @@ -15243,10 +15699,13 @@ /obj/structure/cable, /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) -"fET" = ( -/obj/effect/decal/cleanable/oil/slippery, -/turf/open/floor/iron, -/area/station/cargo/warehouse) +"fEV" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Cargo" + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "fEW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15344,6 +15803,20 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"fGs" = ( +/obj/machinery/pdapainter{ + pixel_y = 2 + }, +/obj/machinery/requests_console/directional/north{ + department = "Head of Personnel's Desk"; + name = "Head of Personnel's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "fGv" = ( /obj/structure/cable, /obj/effect/landmark/start/scientist, @@ -15359,15 +15832,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"fGB" = ( -/obj/machinery/camera/directional/west{ - active_power_usage = 0; - c_tag = "Turbine Vent"; - network = list("turbine"); - use_power = 0 - }, -/turf/open/space/basic, -/area/space/nearstation) "fGC" = ( /obj/machinery/door/airlock/maintenance{ name = "Detective Maintenance" @@ -15475,24 +15939,6 @@ }, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"fHZ" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/effect/turf_decal/box, -/obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/box, -/obj/item/radio/intercom/directional/north, -/obj/structure/sign/warning/gas_mask/directional/east, -/turf/open/floor/iron, -/area/station/science/xenobiology) -"fIe" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "fIo" = ( /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -15502,6 +15948,10 @@ /obj/machinery/telecomms/server/presets/supply, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) +"fIR" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/turf/open/space/basic, +/area/space/nearstation) "fIS" = ( /obj/machinery/airalarm/directional/south, /obj/structure/disposalpipe/segment{ @@ -15538,11 +15988,6 @@ "fJy" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/engine) -"fJA" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron, -/area/station/cargo/storage) "fJC" = ( /obj/machinery/door/airlock/engineering/glass/critical{ heat_proof = 1; @@ -15629,15 +16074,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"fLp" = ( -/obj/structure/disposalpipe/junction{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "fLq" = ( /obj/machinery/door/window/left/directional/north{ name = "Inner Pipe Access"; @@ -15660,20 +16096,6 @@ /obj/machinery/destructive_scanner, /turf/open/floor/iron/white, /area/station/science/lobby) -"fLu" = ( -/obj/structure/table, -/obj/item/kitchen/rollingpin, -/obj/effect/turf_decal/trimline/brown/warning, -/obj/item/reagent_containers/cup/rag, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/item/aquarium_kit, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "fLz" = ( /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) @@ -15689,12 +16111,13 @@ /turf/open/floor/plating/airless, /area/station/solars/starboard/fore) "fMa" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/machinery/porta_turret/ai, -/obj/machinery/computer/security/telescreen/minisat/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) +/obj/structure/rack, +/obj/effect/spawner/random/trash/ghetto_containers, +/obj/effect/spawner/random/trash/ghetto_containers, +/obj/effect/spawner/random/trash/ghetto_containers, +/obj/effect/spawner/random/trash/ghetto_containers, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fMf" = ( /obj/structure/chair/office{ dir = 1 @@ -15731,16 +16154,16 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"fMA" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/loading_area{ - dir = 8 +"fMC" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ +/obj/structure/chair/office/light{ dir = 1 }, -/turf/open/floor/iron, -/area/station/cargo/lobby) +/obj/effect/landmark/start/depsec/supply, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "fMN" = ( /obj/machinery/firealarm/directional/west, /obj/structure/disposalpipe/segment{ @@ -15763,14 +16186,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) -"fMU" = ( -/obj/structure/cable, -/obj/structure/sign/poster/official/random/directional/west, -/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/recreation) "fNa" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -15786,6 +16201,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) +"fNz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/item/reagent_containers/cup/soda_cans/pwr_game, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"fNI" = ( +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "fNR" = ( /obj/structure/chair, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -15801,24 +16230,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"fOc" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/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/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "fOf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -15847,6 +16258,21 @@ }, /turf/open/floor/iron/dark, /area/station/security/range) +"fOB" = ( +/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, +/obj/machinery/door/airlock/maintenance{ + name = "Brig Maintenance" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fOS" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/structure/flora/bush/flowers_yw/style_random, @@ -15856,15 +16282,6 @@ }, /turf/open/floor/grass, /area/station/medical/virology) -"fOT" = ( -/obj/effect/spawner/random/decoration/microwave{ - dir = 1; - pixel_y = 2 - }, -/obj/structure/table/wood, -/obj/machinery/light/small/directional/south, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "fPh" = ( /obj/machinery/gateway/centerstation, /turf/open/floor/iron/dark, @@ -15876,16 +16293,6 @@ "fPD" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"fQh" = ( -/obj/machinery/chem_dispenser/drinks/beer{ - dir = 1 - }, -/obj/structure/table, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/light/small/directional/south, -/obj/machinery/digital_clock/directional/south, -/turf/open/floor/iron, -/area/station/service/bar) "fQj" = ( /obj/docking_port/stationary{ dir = 2; @@ -15933,15 +16340,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"fRd" = ( -/obj/structure/window/spawner/directional/south, -/obj/machinery/computer/cargo/request{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/machinery/door/firedoor, -/turf/open/floor/iron, -/area/station/cargo/sorting) "fRe" = ( /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, @@ -16011,15 +16409,6 @@ /obj/effect/turf_decal/tile/blue/opposingcorners, /turf/open/floor/iron, /area/station/service/hydroponics) -"fSM" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/landmark/start/cargo_technician, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/sorting) "fSY" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -16260,6 +16649,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/prison) +"fXZ" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/turf_decal/trimline/brown/filled/arrow_cw, +/turf/open/floor/iron, +/area/station/cargo/storage) "fYb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -16328,19 +16723,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"fYU" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/window/spawner/directional/west, -/obj/structure/disposalpipe/segment, -/obj/structure/sign/warning/directional/west, -/turf/open/floor/plating, -/area/station/cargo/sorting) "fYX" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -16352,6 +16734,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/library) +"fZw" = ( +/obj/structure/table, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/mask/surgical, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -10; + pixel_y = -1 + }, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) "fZL" = ( /obj/machinery/door/airlock/highsecurity{ name = "Gravity Generator Room" @@ -16395,6 +16789,25 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"gav" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table, +/obj/machinery/photocopier{ + pixel_y = 9 + }, +/obj/item/paper/fluff{ + pixel_y = 8; + pixel_x = 4; + default_raw_text = "Next CT to photocopy their ass is getting thrown under the shuttle. I'm serious here.
- QM"; + name = "note" + }, +/obj/machinery/newscaster/directional/east, +/obj/item/pen/screwdriver{ + pixel_x = 1; + pixel_y = 11 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "gaG" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, @@ -16435,6 +16848,25 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) +"gbn" = ( +/obj/machinery/computer/crew{ + dir = 4 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/south{ + pixel_x = 6 + }, +/obj/machinery/button/door/directional/south{ + id = "cmoprivacy"; + name = "CMO Privacy Shutters"; + pixel_x = -8; + req_access = list("cmo") + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/computer/security/telescreen/cmo/directional/west, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "gbG" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/storage/box/lights/mixed, @@ -16487,33 +16919,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"gcN" = ( -/obj/machinery/status_display/ai/directional/north, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -1; - pixel_y = 4 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/bridge) -"gcR" = ( -/obj/structure/table/reinforced, -/obj/item/wheelchair{ - pixel_y = -3 - }, -/obj/item/wheelchair, -/obj/item/wheelchair{ - pixel_y = 3 - }, -/obj/structure/window/spawner/directional/north, -/obj/structure/window/spawner/directional/west, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/medical/office) "gcU" = ( /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/all/science/robotics, @@ -16531,6 +16936,12 @@ }, /turf/open/floor/grass, /area/station/science/research) +"gda" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = 32 + }, +/turf/open/space/basic, +/area/space/nearstation) "gdb" = ( /turf/closed/wall/r_wall, /area/station/security/range) @@ -16546,17 +16957,6 @@ }, /turf/open/floor/iron/white/smooth_half, /area/station/medical/cryo) -"gdy" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/modular_computer/preset/civilian{ - dir = 8 - }, -/obj/structure/sign/poster/official/random/directional/east, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/iron/dark/corner, -/area/station/engineering/storage_shared) "gdF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/stripes/line, @@ -16584,17 +16984,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/white, /area/station/security/prison/visit) -"geh" = ( -/obj/structure/table/wood, -/obj/structure/cable, -/obj/item/storage/backpack/satchel/leather/withwallet{ - pixel_x = -1; - pixel_y = 4 - }, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "gem" = ( /obj/structure/table, /obj/item/storage/briefcase/secure{ @@ -16636,6 +17025,15 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"gfa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "gfe" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/table, @@ -16695,25 +17093,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ggs" = ( -/obj/machinery/cell_charger{ - pixel_y = 4 - }, -/obj/structure/table/glass, -/obj/item/stock_parts/power_store/cell/high, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/bridge) -"ggG" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/sign/poster/official/random/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/engineering/break_room) "ggH" = ( /obj/effect/spawner/random/structure/chair_maintenance, /turf/open/floor/iron/checker, @@ -16738,6 +17117,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"ggW" = ( +/obj/machinery/space_heater/improvised_chem_heater, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"ggZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "ghc" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -16776,42 +17166,18 @@ "ghL" = ( /turf/closed/wall/r_wall, /area/space/nearstation) -"ghR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/structure/table, -/obj/item/hand_labeler_refill{ - pixel_x = 12; - pixel_y = -3 - }, -/obj/effect/spawner/random/bureaucracy/birthday_wrap{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/item/stack/package_wrap{ - pixel_x = -6; - pixel_y = 18 +"gil" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 }, -/obj/item/hand_labeler, -/obj/item/stack/package_wrap, -/turf/open/floor/iron, -/area/station/cargo/sorting) -"ghS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) -"gif" = ( -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/siding/white{ - dir = 5 +/obj/machinery/airlock_sensor/incinerator_ordmix{ + pixel_x = -24 }, -/obj/structure/railing{ +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ dir = 4 }, -/turf/open/water, -/area/station/service/hydroponics/garden) +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "giA" = ( /turf/closed/wall/r_wall, /area/station/tcommsat/computer) @@ -16884,6 +17250,31 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/service/hydroponics) +"gkC" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio7"; + name = "Xenobio Pen 7 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"gkD" = ( +/obj/machinery/recharger{ + pixel_y = 3 + }, +/obj/item/restraints/handcuffs{ + pixel_y = 3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "gkM" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/structure/cable, @@ -16926,18 +17317,14 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/engineering/break_room) -"glW" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio2"; - name = "Xenobio Pen 2 Blast Doors"; - pixel_y = 1; - req_access = list("xenobiology") +"glP" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/science/xenobiology) +/turf/open/floor/wood, +/area/station/service/theater) "gma" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -16974,6 +17361,10 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"gmH" = ( +/obj/structure/sign/warning/secure_area, +/turf/closed/wall/r_wall, +/area/station/command/bridge) "gmI" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/structure/disposalpipe/segment{ @@ -17048,19 +17439,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"gnJ" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/storage/bag/plants/portaseeder, -/obj/item/crowbar, -/obj/item/reagent_containers/cup/watering_can, -/obj/item/cultivator, -/obj/item/hatchet, -/obj/item/plant_analyzer, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) "gnL" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -17110,25 +17488,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"gpb" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/item/aicard, -/obj/item/pai_card, -/obj/item/circuitboard/aicore, -/obj/machinery/keycard_auth/wall_mounted/directional/north{ - pixel_x = -5 - }, -/obj/machinery/button/door/directional/north{ - id = "xeno_blastdoor"; - name = "Xenobiology Containment Control"; - pixel_x = 8; - req_access = list("rd") - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/rd) "gpc" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=1-BrigCells"; @@ -17141,20 +17500,19 @@ /obj/structure/chair/wood/wings, /turf/open/floor/carpet, /area/station/service/theater) -"gpq" = ( -/obj/machinery/light/directional/north, -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal/delivery_chute{ - dir = 4; - name = "Crate Returns" - }, -/obj/effect/turf_decal/delivery, -/obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ +"gpk" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/item/storage/bag/plants/portaseeder, +/obj/item/crowbar, +/obj/item/reagent_containers/cup/watering_can, +/obj/item/cultivator, +/obj/item/hatchet, +/obj/item/plant_analyzer, /turf/open/floor/iron, -/area/station/cargo/lobby) +/area/station/service/hydroponics/garden) "gpv" = ( /obj/structure/cable, /obj/machinery/door/airlock{ @@ -17203,20 +17561,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/circuit/green/off, /area/station/science/research) -"gqd" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/east{ - areastring = "/area/station/science/ordnance/burnchamber" - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "gqj" = ( /obj/structure/sink/directional/west, /obj/machinery/light_switch/directional/east, @@ -17316,15 +17660,6 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"grU" = ( -/obj/structure/table, -/obj/item/circular_saw, -/obj/item/scalpel{ - pixel_y = 16 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted, -/turf/open/floor/iron/white, -/area/station/science/robotics/lab) "grZ" = ( /obj/structure/chair, /obj/machinery/camera/directional/north{ @@ -17335,21 +17670,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"gsl" = ( -/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 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "gsn" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -17390,6 +17710,19 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"gsV" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/structure/railing/corner/end{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "gsW" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -17485,6 +17818,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, @@ -17541,19 +17885,22 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gvl" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/structure/bed/dogbed/ian, +/mob/living/basic/pet/dog/corgi/ian, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "gvm" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/commons/lounge) -"gvy" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Disposal Conveyor Access" +"gvA" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal) +/turf/open/floor/iron, +/area/station/cargo/storage) "gvC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17609,14 +17956,6 @@ "gwf" = ( /turf/open/floor/glass/reinforced, /area/station/science/research) -"gwA" = ( -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/delivery, -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/security/telescreen/ordnance/directional/south, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "gwK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17636,51 +17975,29 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"gxa" = ( -/obj/machinery/airalarm/directional/south, -/obj/item/stack/package_wrap{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/stack/package_wrap, -/obj/structure/table/wood, -/obj/item/gun/ballistic/shotgun/doublebarrel, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/wood, -/area/station/service/bar/backroom) "gxb" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /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) -"gxj" = ( -/obj/structure/bodycontainer/morgue{ - dir = 1 +"gxu" = ( +/obj/machinery/button/door/directional/south{ + id = "warehouse"; + name = "Warehouse Shutters Control" }, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/iron/dark/smooth_half{ +/obj/effect/turf_decal/trimline/red/filled/warning/corner{ dir = 8 }, -/area/station/medical/morgue) -"gxk" = ( -/obj/machinery/vending/cigarette, -/turf/open/floor/iron, -/area/station/hallway/primary/port) -"gxo" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/item/stack/medical/mesh, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/suture, -/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 = 8 +/obj/machinery/camera/directional/south{ + c_tag = "Cargo Bay - Aft"; + pixel_x = 14 }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "gxx" = ( /obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Monitoring" @@ -17693,14 +18010,6 @@ }, /turf/open/floor/iron/checker, /area/station/engineering/atmos/storage/gas) -"gxU" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "gya" = ( /obj/structure/table, /obj/item/storage/box/hug{ @@ -17760,6 +18069,10 @@ /obj/machinery/light/no_nightlight/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) +"gyK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "gyO" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -17787,6 +18100,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gzO" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "gzW" = ( /obj/structure/chair/office{ dir = 8 @@ -17797,25 +18116,6 @@ /obj/effect/landmark/start/depsec/medical, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) -"gzZ" = ( -/obj/structure/table, -/obj/item/computer_disk{ - pixel_x = -8; - pixel_y = -3 - }, -/obj/item/computer_disk{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 9 - }, -/obj/machinery/airalarm/directional/west, -/obj/item/computer_disk/ordnance{ - pixel_x = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/ordnance/office) "gAd" = ( /obj/machinery/portable_atmospherics/canister/plasma, /obj/effect/turf_decal/siding/purple, @@ -17829,6 +18129,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, @@ -17845,6 +18158,11 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"gAx" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/service/hydroponics) "gAB" = ( /obj/structure/table/glass, /obj/item/hand_labeler, @@ -17946,16 +18264,6 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"gDb" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/structure/dresser, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "gDh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18034,6 +18342,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) +"gEx" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "gEF" = ( /obj/structure/rack, /obj/item/clothing/gloves/color/fyellow, @@ -18083,17 +18396,6 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/service/chapel/funeral) -"gEZ" = ( -/obj/structure/cable, -/obj/effect/landmark/start/hangover, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "gFd" = ( /obj/machinery/power/terminal, /obj/machinery/light/small/directional/east, @@ -18148,6 +18450,11 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) +"gGf" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "gGh" = ( /obj/structure/closet/crate/coffin, /turf/open/floor/plating, @@ -18172,12 +18479,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"gHa" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "gHo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -18248,12 +18549,6 @@ dir = 8 }, /area/station/science/lab) -"gIj" = ( -/obj/structure/cable, -/obj/machinery/light/cold/directional/north, -/obj/machinery/computer/security/telescreen/isolation/directional/north, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "gIm" = ( /obj/structure/table, /obj/structure/extinguisher_cabinet/directional/east, @@ -18305,15 +18600,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"gJb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "gJi" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 4; @@ -18352,18 +18638,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"gJx" = ( -/obj/machinery/light_switch/directional/north, -/obj/machinery/light/small/directional/north, -/obj/structure/table/wood, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/under/suit/black_really, -/obj/item/clothing/glasses/sunglasses, -/obj/machinery/camera/directional/north{ - c_tag = "Corporate Showroom" - }, -/turf/open/floor/wood, -/area/station/command/corporate_showroom) "gJD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -18377,6 +18651,11 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"gJM" = ( +/obj/structure/cable, +/obj/machinery/power/smes, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "gJV" = ( /obj/machinery/light/small/directional/south, /obj/effect/turf_decal/tile/purple, @@ -18398,17 +18677,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/maintenance/fore) -"gKi" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted, -/obj/effect/turf_decal/bot, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin{ - name = "Jim Norton's Quebecois Coffee disposal unit" - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "gKw" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18521,6 +18789,23 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"gLU" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding{ + dir = 9 + }, +/obj/item/stock_parts/matter_bin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/micro_laser, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker + }, +/obj/item/multitool, +/turf/open/floor/iron, +/area/station/science/lab) "gLY" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -18594,31 +18879,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/storage) -"gNn" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Cargo Bay Bridge Access" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"gNv" = ( -/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, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "gNy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -18661,6 +18921,15 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"gOa" = ( +/obj/structure/table, +/obj/item/book/manual/hydroponics_pod_people, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "gOp" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -18694,17 +18963,10 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/engine, /area/station/science/xenobiology) -"gOC" = ( -/obj/effect/turf_decal/siding/thinplating_new/corner, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) +"gOO" = ( +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "gOS" = ( /obj/structure/cable, /obj/structure/table/glass, @@ -18731,6 +18993,11 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"gPh" = ( +/obj/item/clothing/head/fedora, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/station/commons/lounge) "gPl" = ( /obj/structure/table/optable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -18742,6 +19009,9 @@ /obj/effect/mapping_helpers/requests_console/assistance, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"gPw" = ( +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "gPA" = ( /obj/structure/table/wood, /obj/structure/cable, @@ -18759,6 +19029,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gQa" = ( +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "gQf" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -18769,17 +19050,6 @@ /obj/effect/spawner/random/trash/janitor_supplies, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"gQl" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/storage/toolbox/emergency, -/obj/effect/spawner/random/maintenance, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "gQw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line, @@ -18811,60 +19081,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"gRS" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = -7; - pixel_y = 13 - }, -/obj/item/reagent_containers/condiment/flour{ - pixel_x = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) -"gRV" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_x = 3; - pixel_y = 2 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) -"gSk" = ( -/obj/machinery/light/small/directional/north, -/obj/structure/table, -/obj/item/reagent_containers/cup/bottle/epinephrine{ - pixel_x = 7; - pixel_y = -3 - }, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = -4; - pixel_y = -3 - }, -/obj/item/reagent_containers/syringe/epinephrine{ - pixel_x = 3; - pixel_y = -2 - }, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 8; - pixel_y = 2 - }, -/obj/structure/sign/warning/no_smoking{ - pixel_y = 28 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "gSn" = ( /obj/item/wrench, /turf/open/floor/iron, @@ -18873,29 +19089,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"gSz" = ( -/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/red/filled/warning, -/obj/effect/turf_decal/caution/stand_clear/red, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "gSH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /obj/machinery/rnd/server/master, /turf/open/floor/circuit/telecomms/server, /area/station/science/server) -"gSV" = ( -/obj/machinery/chem_master, -/obj/structure/noticeboard/directional/east, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "gSW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18944,30 +19142,6 @@ /obj/item/crowbar, /turf/open/floor/iron, /area/station/engineering/atmos) -"gTO" = ( -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; - icon_state = "control_stun"; - name = "AI Upload Turret Control"; - pixel_y = 28 - }, -/obj/item/radio/intercom/directional/north{ - broadcasting = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = -26 - }, -/obj/effect/landmark/start/cyborg, -/obj/machinery/light/small/directional/west, -/obj/machinery/computer/security/telescreen/aiupload/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) "gTP" = ( /obj/machinery/light/directional/south, /obj/structure/cable, @@ -19018,6 +19192,13 @@ /obj/structure/sign/warning/electric_shock/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"gUH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/fake_stairs/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) "gUP" = ( /obj/structure/chair{ dir = 1 @@ -19038,15 +19219,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"gVa" = ( -/obj/machinery/chem_dispenser/drinks{ - dir = 1 - }, -/obj/machinery/newscaster/directional/south, -/obj/structure/table, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "gVj" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/blue, @@ -19076,6 +19248,19 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"gVE" = ( +/obj/structure/table/glass, +/obj/machinery/cell_charger, +/obj/item/stack/cable_coil, +/obj/item/assembly/igniter, +/obj/item/stock_parts/power_store/cell, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/science/lobby) "gVO" = ( /obj/effect/turf_decal/trimline/purple/corner{ dir = 1 @@ -19117,6 +19302,15 @@ /obj/machinery/atmospherics/components/trinary/filter/flipped/critical, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"gWz" = ( +/mob/living/simple_animal/bot/mulebot, +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=1"; + location = "QM #2" + }, +/turf/open/floor/catwalk_floor, +/area/station/cargo/storage) "gWH" = ( /obj/effect/spawner/random/maintenance, /obj/structure/disposalpipe/segment, @@ -19251,12 +19445,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"gYG" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ - dir = 8 - }, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) "gYO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19286,18 +19474,16 @@ /obj/effect/mapping_helpers/mail_sorting/service/kitchen, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) -"gYY" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 4 - }, -/obj/structure/railing/corner/end/flip{ - dir = 4 +"gZq" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/cargo/storage) +/obj/structure/chair/office/light, +/obj/effect/landmark/start/depsec/supply, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "gZu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -19333,31 +19519,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/main) -"ham" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"hab" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 }, -/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, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, +/obj/structure/cable, /turf/open/floor/iron, -/area/station/hallway/primary/central) -"hap" = ( -/obj/structure/tank_holder/extinguisher, -/obj/machinery/camera/directional/east{ - c_tag = "Medbay Cryogenics"; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/cryo) +/area/station/cargo/sorting) "hav" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -19380,23 +19551,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/commons/toilet/auxiliary) -"haJ" = ( -/obj/effect/spawner/random/bureaucracy/birthday_wrap, -/obj/item/stack/package_wrap{ - pixel_y = 5 - }, -/obj/item/stack/package_wrap{ - pixel_y = 2 - }, -/obj/item/stack/package_wrap, -/obj/machinery/light/directional/south, -/obj/machinery/firealarm/directional/south, -/obj/structure/table, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "haP" = ( /obj/structure/chair{ dir = 1 @@ -19411,15 +19565,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/main) -"haS" = ( -/obj/structure/table, -/obj/item/book/manual/hydroponics_pod_people, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) +"haZ" = ( +/obj/item/reagent_containers/cup/glass/mug/britcup, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "hbv" = ( /turf/closed/wall/r_wall, /area/station/medical/coldroom) @@ -19464,22 +19615,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) -"hbW" = ( -/obj/machinery/vending/wardrobe/cargo_wardrobe, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron, -/area/station/cargo/storage) -"hca" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/mmi, -/obj/item/mmi, -/obj/item/mmi, -/obj/structure/table, -/turf/open/floor/iron/white, -/area/station/science/robotics/lab) "hcc" = ( /obj/structure/sign/warning/secure_area/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -19496,6 +19631,27 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"hcm" = ( +/obj/structure/plasticflaps/opaque{ + name = "Service Deliveries" + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "Service" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "hcv" = ( /obj/effect/landmark/observer_start, /obj/effect/turf_decal/plaque{ @@ -19554,11 +19710,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/closed/wall, /area/station/engineering/atmos/pumproom) -"hdx" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "hdy" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -19626,39 +19777,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) -"heM" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +"heR" = ( /obj/structure/cable, -/obj/machinery/button/door{ - desc = "A door remote control switch for the exterior brig doors."; - id = "outerbrig"; - name = "Brig Exterior Door Control"; - normaldoorcontrol = 1; - pixel_x = 6; - pixel_y = 7; - req_access = list("security") - }, -/obj/machinery/button/flasher{ - id = "secentranceflasher"; - name = "Brig Entrance Flasher"; - pixel_y = -3; - req_access = list("security") - }, -/obj/machinery/button/door{ - desc = "A door remote control switch for the interior brig doors."; - id = "innerbrig"; - name = "Brig Interior Door Control"; - normaldoorcontrol = 1; - pixel_x = -6; - pixel_y = 7; - req_access = list("security") - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/security/warden) +/turf/closed/wall, +/area/station/command/heads_quarters/qm) "heS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/mop_bucket/janitorialcart, @@ -19706,16 +19828,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/prison/safe) -"hfB" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "hfH" = ( /obj/structure/table/reinforced, /obj/machinery/microwave/engineering/cell_included, @@ -19789,6 +19901,17 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"hhN" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/lounge) +"hhR" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "hif" = ( /obj/structure/mannequin/skeleton, /obj/machinery/status_display/evac/directional/north, @@ -19836,12 +19959,30 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"hiZ" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/structure/disposalpipe/segment, +/obj/item/bikehorn/rubberducky, +/obj/machinery/light_switch/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "hjp" = ( /obj/item/clothing/mask/gas, /obj/effect/spawner/random/structure/table_or_rack, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"hjt" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "hjw" = ( /obj/structure/table/glass, /obj/item/book/manual/wiki/cytology{ @@ -19862,14 +20003,6 @@ /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"hjA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/bot_white, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/storage) "hjG" = ( /obj/machinery/door/airlock/maintenance{ name = "Morgue Maintenance" @@ -19896,9 +20029,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"hkj" = ( -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "hko" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -19923,14 +20053,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/checkpoint/science) -"hkF" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/computer/security/telescreen/engine/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "hkG" = ( /turf/open/floor/wood, /area/station/commons/lounge) @@ -19979,7 +20101,6 @@ /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 @@ -19989,6 +20110,7 @@ name = "detective's office shutters control"; req_access = list("detective") }, +/obj/structure/detectiveboard/directional/east, /turf/open/floor/carpet, /area/station/security/detectives_office) "hlq" = ( @@ -20017,6 +20139,22 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"hlB" = ( +/obj/machinery/flasher/directional/north{ + id = "AI" + }, +/obj/effect/spawner/random/aimodule/harmful, +/obj/structure/table/wood/fancy/red, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "High-Risk Modules"; + req_access = list("captain") + }, +/obj/item/ai_module/reset/purge{ + pixel_y = 11 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/circuit/red, +/area/station/ai_monitored/turret_protected/ai_upload) "hlD" = ( /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) @@ -20042,32 +20180,10 @@ }, /turf/open/floor/engine/vacuum, /area/space/nearstation) -"hlW" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ - dir = 8 - }, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_half, -/area/station/cargo/bitrunning/den) -"hme" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) +"hlT" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "hmf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -20098,44 +20214,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"hmx" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/table/wood, -/obj/item/stamp/head/qm{ - pixel_x = 1; - pixel_y = 12 - }, -/obj/item/stamp/granted{ - pixel_x = -7; - pixel_y = 12 - }, -/obj/item/stamp/denied{ - pixel_x = -7; - pixel_y = 5 - }, -/obj/item/stamp/void{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/effect/spawner/random/entertainment/money_medium{ - pixel_y = -6; - pixel_x = -3 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/clipboard{ - pixel_x = 10; - pixel_y = 8 - }, -/obj/item/coin/gold{ - pixel_y = -5; - pixel_x = 10 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "hmy" = ( /obj/machinery/door/window/left/directional/south{ name = "Permabrig Kitchen" @@ -20178,26 +20256,6 @@ /obj/structure/mecha_wreckage/ripley, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"hnx" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Bridge - Command Chair" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door/directional/south{ - id = "bridge blast"; - name = "Bridge Access Blast Door Control"; - req_access = list("command") - }, -/obj/machinery/button/door/directional/south{ - id = "council blast"; - name = "Council Chamber Blast Door Control"; - pixel_y = -34; - req_access = list("command") - }, -/turf/open/floor/carpet, -/area/station/command/bridge) "hnG" = ( /obj/machinery/door/poddoor{ id = "Secure Storage"; @@ -20205,11 +20263,22 @@ }, /turf/open/floor/plating, /area/station/engineering/main) -"hod" = ( -/obj/structure/cable, +"hnV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/cargo/miningoffice) +"hor" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Warehouse Maintenance" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/plating, +/area/station/cargo/warehouse) "hoE" = ( /obj/structure/sign/map/left{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -20260,6 +20329,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) +"hpj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "hpv" = ( /obj/item/storage/bag/plants/portaseeder, /obj/item/plant_analyzer, @@ -20286,6 +20364,19 @@ }, /turf/closed/wall/r_wall, /area/station/engineering/atmos/pumproom) +"hqD" = ( +/obj/machinery/door/airlock/mining{ + name = "Quartermaster's Office" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/diagonal_edge, +/obj/effect/turf_decal/tile/brown/diagonal_centre, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/diagonal, +/area/station/command/heads_quarters/qm) "hqE" = ( /obj/machinery/telecomms/bus/preset_four, /turf/open/floor/circuit/telecomms/mainframe, @@ -20329,6 +20420,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"hrM" = ( +/obj/machinery/vending/boozeomat, +/obj/structure/sign/picture_frame/portrait/bar{ + pixel_y = -28 + }, +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "hse" = ( /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/trimline/dark_red/end{ @@ -20345,15 +20445,6 @@ dir = 8 }, /area/station/service/chapel/office) -"hsu" = ( -/obj/structure/table, -/obj/machinery/status_display/evac/directional/east, -/obj/machinery/flasher/directional/south{ - id = "AI" - }, -/obj/effect/spawner/round_default_module, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) "hsF" = ( /obj/machinery/door/airlock{ id_tag = "AuxToilet3"; @@ -20361,27 +20452,6 @@ }, /turf/open/floor/plating, /area/station/commons/toilet/auxiliary) -"hsG" = ( -/obj/structure/showcase/machinery/tv{ - dir = 1; - pixel_x = 2; - pixel_y = 3 - }, -/obj/structure/table/wood, -/obj/machinery/light/small/directional/south, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) -"hsL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "hsN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20441,22 +20511,6 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"hts" = ( -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/machinery/status_display/evac/directional/east, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/item/flatpack{ - board = /obj/item/circuitboard/machine/flatpacker; - pixel_x = -5 - }, -/obj/item/multitool{ - pixel_x = 8 - }, -/turf/open/floor/iron/checker, -/area/station/engineering/storage_shared) "htD" = ( /obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ dir = 1 @@ -20496,13 +20550,6 @@ /obj/structure/fluff/iced_abductor, /turf/open/misc/asteroid/basalt/airless, /area/space/nearstation) -"htX" = ( -/obj/structure/closet/wardrobe/pjs, -/obj/effect/landmark/start/hangover/closet, -/obj/structure/sign/poster/official/random/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/commons/dorms) "htY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20534,6 +20581,10 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"hux" = ( +/obj/structure/sign/warning/secure_area, +/turf/closed/wall/r_wall, +/area/station/command/teleporter) "huy" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -20558,15 +20609,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"hva" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "hve" = ( /obj/structure/cable, /obj/machinery/computer/shuttle/mining/common, @@ -20574,19 +20616,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/security/checkpoint/customs) -"hvf" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/ai_monitored/command/nuke_storage) -"hvo" = ( -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 8 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "hvr" = ( /obj/machinery/camera/directional/south{ c_tag = "Central Primary Hallway - Fore - Courtroom" @@ -20611,6 +20640,7 @@ "hvB" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/sorting) "hvI" = ( @@ -20680,15 +20710,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"hwD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "hwF" = ( /obj/item/radio/intercom/directional/west, /obj/structure/disposalpipe/segment, @@ -20704,6 +20725,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) +"hxd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/end{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "hxe" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -20716,21 +20749,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"hxg" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/suit_storage_unit/industrial/loader, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"hxk" = ( -/obj/structure/sign/warning/electric_shock/directional/east, -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/item/clothing/head/utility/welding, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "hxo" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -20774,6 +20792,30 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/station/service/hydroponics) +"hxz" = ( +/obj/item/reagent_containers/spray/plantbgone{ + pixel_y = 3 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 13; + pixel_y = 5 + }, +/obj/item/watertank, +/obj/item/grenade/chem_grenade/antiweed, +/obj/structure/table/glass, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) "hxB" = ( /obj/item/kirbyplants/organic/plant21, /turf/open/floor/iron/grimy, @@ -20890,21 +20932,6 @@ /obj/effect/landmark/start/shaft_miner, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"hzn" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageSort2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/obj/machinery/door/window/right/directional/east{ - name = "Crate Security Door"; - req_access = list("shipping") - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "hzt" = ( /obj/structure/transit_tube/curved/flipped, /obj/effect/turf_decal/tile/blue{ @@ -20948,18 +20975,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/locker) -"hAv" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 - }, -/obj/machinery/airlock_sensor/incinerator_ordmix{ - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) "hAF" = ( /obj/machinery/camera/directional/south{ c_tag = "MiniSat Exterior Access"; @@ -21001,6 +21016,15 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"hBo" = ( +/mob/living/simple_animal/bot/mulebot, +/obj/structure/cable, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=2"; + location = "QM #1" + }, +/turf/open/floor/catwalk_floor, +/area/station/cargo/storage) "hBr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21034,12 +21058,52 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/space/basic, /area/space/nearstation) +"hBI" = ( +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/machinery/camera/directional/west{ + c_tag = "Science Ordnance Test Lab" + }, +/obj/item/assembly/prox_sensor{ + pixel_y = 2 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = 9; + pixel_y = -2 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/assembly/prox_sensor{ + pixel_x = 8; + pixel_y = 9 + }, +/obj/machinery/requests_console/directional/west{ + department = "Ordnance Test Range"; + name = "Test Range Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "hBY" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"hCh" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) "hCl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -21119,11 +21183,6 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron/white, /area/station/security/prison) -"hDX" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/security/checkpoint/supply) "hEc" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ @@ -21166,12 +21225,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/cryo) -"hEQ" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/decal/cleanable/oil/streak, -/obj/effect/turf_decal/trimline/brown/filled/arrow_cw, -/turf/open/floor/iron, -/area/station/cargo/storage) "hET" = ( /obj/structure/sign/map/right{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -21197,23 +21250,6 @@ /obj/structure/closet/secure_closet/atmospherics, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"hFq" = ( -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/table, -/obj/machinery/reagentgrinder{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = -6; - pixel_y = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "hFz" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -21258,15 +21294,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"hGm" = ( -/obj/structure/sign/plaques/kiddie/perfect_drone{ - pixel_y = 32 - }, -/obj/structure/table/wood, -/obj/item/storage/backpack/duffelbag/drone, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "hGF" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -21315,22 +21342,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/locker) -"hIh" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/machinery/door/window/right/directional/south{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/obj/item/newspaper{ - pixel_x = -5 - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "hIm" = ( /obj/machinery/door/airlock/research{ name = "Ordnance Lab" @@ -21343,6 +21354,20 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"hIp" = ( +/obj/structure/fake_stairs/directional/south, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hIu" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "hIx" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -21362,18 +21387,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"hIL" = ( -/obj/effect/turf_decal/trimline/purple/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/siding/purple/corner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/white, -/area/station/science/research) "hIQ" = ( /obj/structure/cable, /obj/effect/landmark/start/security_officer, @@ -21388,17 +21401,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"hJe" = ( -/obj/machinery/light/directional/south, -/obj/structure/rack, -/obj/item/clothing/under/color/blue, -/obj/item/clothing/ears/earmuffs, -/obj/item/clothing/neck/tie/blue, -/obj/structure/sign/poster/official/random/directional/south, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/commons/fitness/recreation) "hJi" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/light/directional/south, @@ -21446,6 +21448,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/tcommsat/server) +"hJO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "hKg" = ( /turf/closed/wall, /area/station/cargo/miningoffice) @@ -21484,6 +21494,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"hKQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/cargo/storage) "hKV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21532,18 +21552,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"hLL" = ( -/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/cargo/storage) -"hLV" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) "hLZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction{ @@ -21617,24 +21625,11 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/security/office) -"hNh" = ( -/obj/machinery/vending/boozeomat, -/obj/structure/sign/picture_frame/portrait/bar{ - pixel_y = -28 - }, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "hNn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/floor, /turf/open/floor/wood, /area/station/commons/lounge) -"hNu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) "hNz" = ( /obj/structure/chair, /obj/effect/landmark/start/depsec/science, @@ -21660,16 +21655,11 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"hNT" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "hOh" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/brown/filled/warning, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/sorting) "hOp" = ( @@ -21685,23 +21675,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"hOs" = ( -/obj/structure/table, -/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/plunger, -/obj/item/plunger, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "hOR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/spawner/random/trash/soap{ @@ -21718,16 +21691,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"hPm" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/item/pen/red, -/turf/open/floor/wood, -/area/station/service/lawoffice) "hPu" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ dir = 5 @@ -21755,6 +21718,29 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) +"hQc" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Quartermaster"; + name = "Quartermaster's Fax Machine" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/requests_console/directional/north{ + department = "Quartermaster's Desk"; + name = "Quartermaster's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/ore_update, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "hQu" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, @@ -21773,6 +21759,15 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"hQy" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/engineering{ + name = "Port Bow Solar Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "hQB" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -21833,6 +21828,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/brig) +"hRJ" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/obj/item/paper_bin/carbon, +/obj/item/pen/red/security, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "hRQ" = ( /obj/machinery/disposal/bin{ pixel_x = -2; @@ -21861,20 +21863,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) -"hSb" = ( -/obj/machinery/pdapainter{ - pixel_y = 2 - }, -/obj/machinery/requests_console/directional/north{ - department = "Head of Personnel's Desk"; - name = "Head of Personnel's Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "hSe" = ( /obj/machinery/light/small/directional/east, /obj/item/radio/intercom/directional/north, @@ -21902,11 +21890,41 @@ }, /turf/open/floor/wood, /area/station/service/cafeteria) +"hSi" = ( +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/sheet/mineral/plasma{ + amount = 30 + }, +/obj/item/gps, +/obj/structure/closet/crate/engineering, +/turf/open/floor/plating, +/area/station/engineering/main) +"hSl" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ + dir = 4 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/structure/sign/poster/official/moth_piping/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "hSr" = ( /obj/machinery/holopad/secure, /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"hSt" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "hSG" = ( /obj/structure/closet/lasertag/red, /obj/effect/landmark/start/hangover/closet, @@ -21958,6 +21976,20 @@ /obj/machinery/bluespace_vendor/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"hTG" = ( +/obj/structure/cable, +/obj/machinery/power/terminal, +/obj/machinery/light/small/directional/east, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) +"hTM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "hTV" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/highsecurity{ @@ -22016,19 +22048,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"hUV" = ( -/obj/structure/disposalpipe/segment{ - 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/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "hVn" = ( /obj/machinery/door/window/right/directional/east{ name = "Containment Pen #8"; @@ -22119,6 +22138,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/teleporter) +"hWC" = ( +/obj/structure/cable, +/obj/structure/fake_stairs/directional/north, +/turf/open/floor/iron, +/area/station/cargo/storage) +"hWD" = ( +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "hWF" = ( /obj/machinery/firealarm/directional/east, /obj/effect/turf_decal/tile/neutral, @@ -22141,23 +22170,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) -"hXg" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding{ - dir = 4 - }, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/taperecorder{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) "hXh" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22205,6 +22217,15 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/security/office) +"hYl" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = 14 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "hYr" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -22231,6 +22252,47 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/plating, /area/station/cargo/sorting) +"hYA" = ( +/obj/item/assembly/timer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/assembly/timer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/assembly/igniter{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/assembly/igniter{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/assembly/igniter{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/assembly/igniter{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/assembly/timer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/assembly/timer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/structure/table/glass, +/obj/item/storage/pill_bottle/epinephrine{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "hYE" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -22243,6 +22305,34 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) +"hYG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"hZg" = ( +/obj/structure/closet/crate, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/light_switch/directional/north, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "hZn" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/wood{ @@ -22306,15 +22396,6 @@ /obj/machinery/seed_extractor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"iaF" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/portable_atmospherics/pipe_scrubber, -/obj/effect/turf_decal/siding/purple{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/storage) "iaK" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/machinery/light/directional/south, @@ -22473,14 +22554,11 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"idT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +"idR" = ( +/obj/structure/table, +/obj/item/food/dough, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "ied" = ( /obj/structure/table, /obj/item/paper/fluff/holodeck/disclaimer, @@ -22509,15 +22587,24 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/station/cargo/sorting) -"iez" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 +"ieD" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/hypospray/medipen/pumpup, +/obj/item/reagent_containers/hypospray/medipen/pumpup{ + pixel_y = 3 + }, +/obj/item/reagent_containers/cup/mortar{ + pixel_x = 3 + }, +/obj/item/extinguisher/crafted{ + pixel_y = 9; + pixel_x = 3 + }, +/obj/item/pestle{ + pixel_x = 4 }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/plating, -/area/station/maintenance/port/greater) +/area/station/maintenance/port/fore) "ieH" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -22534,12 +22621,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/pumproom) -"ieS" = ( -/obj/structure/sign/nanotrasen{ - pixel_x = 32 - }, -/turf/open/space/basic, -/area/space/nearstation) "ieV" = ( /turf/closed/wall/r_wall, /area/station/security/holding_cell) @@ -22683,33 +22764,6 @@ "ihb" = ( /turf/closed/wall, /area/station/security/prison/shower) -"ihh" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 8; - pixel_y = 1 - }, -/obj/item/paper_bin{ - pixel_x = 8; - pixel_y = 6 - }, -/obj/item/paper_bin{ - pixel_x = 8; - pixel_y = 11 - }, -/obj/item/folder/yellow{ - pixel_x = -6; - pixel_y = 8 - }, -/obj/item/folder/yellow{ - pixel_x = -9; - pixel_y = 1 - }, -/obj/item/paper{ - pixel_x = -5 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "ihq" = ( /turf/closed/wall/r_wall, /area/station/hallway/primary/central) @@ -22725,15 +22779,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"ihJ" = ( -/obj/machinery/biogenerator, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, +"ihN" = ( +/obj/machinery/computer/security/telescreen/prison/directional/south, /obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/landmark/event_spawn, /turf/open/floor/iron, -/area/station/security/prison/garden) +/area/station/security/office) "ihW" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/trunk{ @@ -22763,21 +22817,37 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) +"iit" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Central Primary Hallway - Fore - Port Corner" + }, +/obj/machinery/computer/piratepad_control/civilian{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "iix" = ( /obj/item/flashlight/lamp, /obj/machinery/newscaster/directional/west, /obj/structure/table/wood, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"iiC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/random/directional/east, -/obj/machinery/light/cold/directional/east, -/obj/machinery/modular_computer/preset/cargochat/service{ - dir = 8 +"iiE" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Head of Personnel's Office"; + name = "Head of Personnel's Fax Machine" }, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hop) "iiL" = ( /obj/machinery/air_sensor/mix_tank, /turf/open/floor/engine/vacuum, @@ -22803,22 +22873,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"ijf" = ( -/obj/machinery/door/poddoor/preopen{ - id = "medsecprivacy"; - name = "Privacy Shutter" - }, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/left/directional/north{ - req_access = list("security") - }, -/obj/structure/desk_bell{ - pixel_x = -3; - pixel_y = 2 - }, -/turf/open/floor/plating, -/area/station/security/checkpoint/medical) "iji" = ( /obj/machinery/vending/hydronutrients, /obj/effect/turf_decal/stripes/line, @@ -22831,11 +22885,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/service/hydroponics) -"ijL" = ( -/obj/structure/cable, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "ijZ" = ( /obj/structure/cable, /turf/open/floor/iron/white, @@ -22896,10 +22945,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/minisat, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) -"ikL" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "ikO" = ( /obj/machinery/newscaster/directional/north, /obj/structure/table/glass, @@ -22947,6 +22992,10 @@ }, /turf/open/floor/carpet, /area/station/medical/psychology) +"ikY" = ( +/obj/structure/sign/warning/secure_area/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "ikZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -22983,22 +23032,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/command/teleporter) -"ilw" = ( -/obj/structure/sign/poster/random/directional/east, -/obj/machinery/requests_console/directional/south{ - department = "Kitchen"; - name = "Kitchen Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo" - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "ilx" = ( /obj/structure/closet/emcloset, /obj/effect/landmark/start/hangover/closet, @@ -23065,27 +23098,15 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"imF" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Space Bridge Access" - }, -/obj/machinery/button/door/directional/north{ - id = "supplybridge"; - name = "Shuttle Bay Space Bridge Control" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ +"imT" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/unres{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "imU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23103,15 +23124,6 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"inp" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "inw" = ( /obj/machinery/disposal/bin{ desc = "A pneumatic waste disposal unit. This one leads into space!"; @@ -23154,28 +23166,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"inT" = ( -/obj/structure/table, -/obj/item/folder/white{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/beaker/large{ - pixel_x = -4; - pixel_y = 7 - }, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 7 - }, -/obj/item/reagent_containers/dropper{ - pixel_x = -3; - pixel_y = -6 - }, -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/turf/open/floor/iron, -/area/station/science/lab) "inX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -23202,10 +23192,6 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) -"iou" = ( -/obj/structure/sign/directions/evac, -/turf/closed/wall/r_wall, -/area/station/maintenance/department/medical/central) "iov" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -23231,17 +23217,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/lockers) -"ipl" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/explab) "ipy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -23267,30 +23242,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/fore) -"ipL" = ( -/obj/effect/turf_decal/trimline/green/line{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/bottle/syrup_bottle/korta_nectar{ - pixel_x = 5; - pixel_y = 16 - }, -/obj/item/reagent_containers/cup/bottle/syrup_bottle/liqueur{ - pixel_x = -5; - pixel_y = 16 - }, -/obj/item/reagent_containers/cup/bottle/syrup_bottle/caramel{ - pixel_x = 15; - pixel_y = 16 - }, -/obj/item/storage/fancy/coffee_condi_display{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/cafeteria) "ipM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23322,6 +23273,10 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"iqo" = ( +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "iqq" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -23477,6 +23432,12 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"isA" = ( +/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/construction/storage_wing) "isI" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -23600,14 +23561,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"iuX" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "iva" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance" @@ -23616,6 +23569,22 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"ivb" = ( +/obj/machinery/disposal/bin, +/obj/machinery/camera/directional/east{ + c_tag = "Garden" + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/wideplating_new, +/obj/structure/railing, +/obj/effect/turf_decal/tile/green/half/contrasted, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "ivc" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -23700,14 +23669,6 @@ /obj/item/clothing/glasses/welding, /turf/open/floor/iron, /area/station/science/robotics/lab) -"iwD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "iwL" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /obj/structure/disposalpipe/segment{ @@ -23748,14 +23709,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) -"ixt" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "qmroom" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/qm) "ixv" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 @@ -23835,6 +23788,24 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"iyC" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "virology_airlock_exterior"; + idInterior = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Console"; + pixel_x = 24; + pixel_y = -24; + req_access = list("virology") + }, +/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) "iyV" = ( /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ @@ -23918,6 +23889,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"izI" = ( +/obj/machinery/newscaster/directional/south, +/obj/structure/closet/secure_closet/quartermaster, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/camera/directional/south, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "izZ" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 @@ -23931,6 +23912,17 @@ }, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"iAj" = ( +/obj/structure/rack, +/obj/item/assembly/signaler, +/obj/item/assembly/signaler, +/obj/item/assembly/timer, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "iAk" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -23969,30 +23961,13 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) -"iAy" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/purple{ - dir = 4 - }, -/obj/item/radio/headset/headset_medsci{ - pixel_x = -7; - pixel_y = 4 - }, -/obj/item/storage/box/monkeycubes{ - pixel_x = 6; - pixel_y = 9 - }, -/obj/item/storage/box/gloves{ - pixel_x = 5; - pixel_y = 1 - }, -/obj/item/storage/box/monkeycubes{ - pixel_x = 4 +"iAA" = ( +/obj/item/toy/beach_ball/branded{ + pixel_y = 7 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/science/genetics) +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "iAN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -24010,25 +23985,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"iAV" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/landmark/start/bitrunner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_half, -/area/station/cargo/bitrunning/den) "iBf" = ( /obj/structure/closet, /obj/item/stack/sheet/iron{ @@ -24064,6 +24020,18 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"iCj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/airlock_controller/incinerator_atmos{ + pixel_x = 40; + pixel_y = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "iCr" = ( /obj/structure/rack, /obj/structure/cable, @@ -24072,16 +24040,6 @@ /obj/effect/spawner/random/armory/bulletproof_helmet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"iCD" = ( -/obj/structure/rack, -/obj/item/stack/sheet/glass/fifty{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/sheet/iron/twenty, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "iCJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -24089,18 +24047,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) -"iCM" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/east, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/station/cargo/sorting) "iCN" = ( /obj/effect/turf_decal/arrows/white, /obj/effect/turf_decal/stripes/line{ @@ -24108,12 +24054,6 @@ }, /turf/open/floor/engine, /area/station/engineering/atmospherics_engine) -"iCP" = ( -/obj/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) "iCV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, @@ -24125,6 +24065,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"iDh" = ( +/obj/machinery/computer/communications{ + dir = 8 + }, +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "iDq" = ( /obj/effect/turf_decal/box, /obj/structure/cable, @@ -24133,24 +24081,6 @@ /obj/effect/landmark/start/security_officer, /turf/open/floor/iron/dark, /area/station/security/range) -"iDG" = ( -/obj/structure/table, -/obj/item/stock_parts/scanning_module{ - pixel_x = -5; - pixel_y = 7 - }, -/obj/item/stock_parts/scanning_module{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/stock_parts/scanning_module{ - pixel_x = -5 - }, -/obj/item/stock_parts/scanning_module{ - pixel_x = 5 - }, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "iDN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24210,14 +24140,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"iFl" = ( -/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) "iFz" = ( /turf/open/floor/iron, /area/station/security/prison) @@ -24262,26 +24184,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"iGl" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/structure/cable, -/obj/structure/table, -/obj/item/clothing/gloves/cargo_gauntlet{ - pixel_y = 8 - }, -/obj/item/clothing/gloves/cargo_gauntlet{ - pixel_y = 5 - }, -/obj/item/clothing/gloves/cargo_gauntlet{ - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/soda_cans/random{ - pixel_x = -9 - }, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "iGq" = ( /obj/structure/lattice, /obj/item/broken_bottle, @@ -24323,19 +24225,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"iHs" = ( -/obj/effect/turf_decal/arrows{ - dir = 1 - }, -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/south, -/obj/structure/window/spawner/directional/east, -/turf/open/floor/plating, -/area/station/cargo/storage) "iHu" = ( /obj/machinery/firealarm/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -24365,20 +24254,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) -"iHZ" = ( -/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/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "iId" = ( /obj/machinery/conveyor{ id = "mining" @@ -24406,6 +24281,14 @@ dir = 8 }, /area/station/service/chapel) +"iIE" = ( +/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 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "iIP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24455,33 +24338,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"iJT" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "virology_airlock_exterior"; - idInterior = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Console"; - pixel_x = 24; - pixel_y = -24; - req_access = list("virology") - }, -/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) -"iKe" = ( -/mob/living/simple_animal/bot/mulebot, -/obj/structure/cable, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; - location = "QM #2" - }, -/turf/open/floor/catwalk_floor, -/area/station/cargo/storage) "iKj" = ( /obj/machinery/photocopier{ pixel_y = 3 @@ -24578,20 +24434,32 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"iLU" = ( -/obj/effect/turf_decal/stripes/corner{ +"iLT" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ dir = 1 }, -/obj/structure/closet/firecloset, -/obj/structure/sign/warning/secure_area/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/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_half, +/area/station/cargo/bitrunning/den) "iMd" = ( /obj/structure/bed/medical/emergency{ dir = 4 }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"iMi" = ( +/obj/structure/table/wood, +/obj/item/folder/red, +/turf/open/floor/carpet, +/area/station/command/bridge) "iMk" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -24665,17 +24533,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"iMK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "iMQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -24720,12 +24577,35 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/parquet, /area/station/medical/psychology) +"iNB" = ( +/obj/machinery/firealarm/directional/east, +/obj/structure/table/glass, +/obj/item/papercutter, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "iNC" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, /turf/open/floor/iron/white, /area/station/medical/storage) +"iNH" = ( +/obj/structure/lattice/catwalk, +/obj/item/banner/cargo, +/turf/open/space/basic, +/area/space/nearstation) +"iNK" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio2"; + name = "Xenobio Pen 2 Blast Doors"; + pixel_y = 1; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/science/xenobiology) "iNQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -24739,18 +24619,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"iNX" = ( -/obj/structure/table/reinforced, -/obj/item/folder/red, -/obj/structure/cable, -/obj/machinery/requests_console/directional/south{ - department = "Security"; - name = "Security Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/science) "iOc" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24799,22 +24667,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"iOQ" = ( -/obj/machinery/flasher/directional/north{ - id = "AI" - }, -/obj/effect/spawner/random/aimodule/harmful, -/obj/structure/table/wood/fancy/red, -/obj/machinery/door/window/brigdoor/left/directional/west{ - name = "High-Risk Modules"; - req_access = list("captain") - }, -/obj/item/ai_module/reset/purge{ - pixel_y = 11 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/circuit/red, -/area/station/ai_monitored/turret_protected/ai_upload) "iOS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24894,6 +24746,24 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/brig) +"iQb" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 9 + }, +/obj/item/pen/red{ + pixel_y = 7; + pixel_x = 9 + }, +/obj/machinery/recharger, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/machinery/requests_console/auto_name/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "iQd" = ( /obj/machinery/door/poddoor/shutters{ id = "supplybridge" @@ -25024,17 +24894,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark, /area/station/medical/storage) -"iRR" = ( -/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/cargo/lobby) -"iRU" = ( -/obj/structure/sign/directions/evac, -/turf/closed/wall/r_wall, -/area/station/medical/chemistry) "iRW" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -25105,6 +24964,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"iSU" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/rcl/pre_loaded, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "iTc" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 4 @@ -25138,6 +25007,18 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/checkpoint/science) +"iTQ" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio1"; + name = "Xenobio Pen 1 Blast Doors"; + pixel_y = 1; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "iTX" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ @@ -25148,6 +25029,18 @@ "iTZ" = ( /turf/closed/wall/r_wall, /area/station/security/lockers) +"iUe" = ( +/obj/structure/table/wood, +/obj/item/lipstick{ + pixel_y = 5 + }, +/obj/effect/spawner/random/entertainment/musical_instrument, +/obj/structure/sign/poster/random/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/service/theater) "iUf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25175,10 +25068,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"iUI" = ( -/obj/effect/landmark/start/quartermaster, -/turf/open/floor/carpet/orange, -/area/station/command/heads_quarters/qm) "iUJ" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -25240,17 +25129,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"iVQ" = ( -/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/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "iWc" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/white, @@ -25307,9 +25185,24 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"iWT" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/obj/structure/table, +/obj/item/clipboard, +/obj/item/holosign_creator/atmos, +/obj/item/holosign_creator/atmos, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) "iWU" = ( /turf/closed/wall/r_wall, /area/station/engineering/break_room) +"iWZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "iXb" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -25319,46 +25212,21 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"iXp" = ( +/obj/structure/table, +/obj/item/analyzer, +/obj/effect/turf_decal/siding/purple{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) "iXt" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) -"iXu" = ( -/obj/structure/chair/office, -/obj/effect/landmark/start/head_of_personnel, -/obj/machinery/light_switch{ - pixel_x = 38; - pixel_y = -35 - }, -/obj/machinery/button/flasher{ - id = "hopflash"; - pixel_x = 38; - pixel_y = -25 - }, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) -"iXv" = ( -/obj/effect/turf_decal/trimline/green/line{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/item/food/cherrycupcake{ - pixel_y = 10 - }, -/obj/item/food/muffin/berry{ - pixel_x = 18; - pixel_y = 9 - }, -/obj/item/food/cakeslice/pound_cake_slice{ - pixel_x = 4; - pixel_y = -5 - }, -/obj/structure/window/spawner/directional/south, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/cafeteria) "iXC" = ( /obj/item/tank/internals/oxygen, /obj/item/tank/internals/oxygen, @@ -25411,6 +25279,19 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"iYE" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/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) "iYG" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/neutral{ @@ -25418,6 +25299,15 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"iYO" = ( +/obj/structure/table, +/obj/item/circular_saw, +/obj/item/scalpel{ + pixel_y = 16 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) "iYP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25523,6 +25413,26 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"jau" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" + }, +/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, +/obj/machinery/flasher/directional/east{ + id = "secentranceflasher" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron, +/area/station/security/brig) "jay" = ( /obj/structure/chair{ dir = 4 @@ -25533,17 +25443,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"jaD" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mining{ - name = "Mining Office" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "jaO" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 6 @@ -25598,17 +25497,6 @@ /obj/item/shard, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"jbU" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "QMLoad" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/cargo/storage) "jcc" = ( /obj/structure/rack, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -25678,11 +25566,6 @@ /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /turf/open/floor/iron/kitchen_coldroom, /area/station/medical/coldroom) -"jdQ" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jdR" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -25741,20 +25624,17 @@ /obj/effect/turf_decal/siding/purple, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) -"jeV" = ( -/obj/item/bodypart/chest/robot{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/bodypart/head/robot{ - pixel_x = 3; - pixel_y = 2 +"jeL" = ( +/obj/structure/table/glass, +/obj/item/book/manual/wiki/medicine, +/obj/item/clothing/neck/stethoscope, +/obj/item/wrench/medical, +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, -/obj/structure/table/wood, -/obj/structure/cable, -/obj/machinery/light/small/directional/west, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/iron/dark, +/area/station/medical/cryo) "jfa" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/vending/games, @@ -25767,6 +25647,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/brig) +"jfg" = ( +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "jfn" = ( /obj/machinery/door/airlock/medical/glass{ name = "Primary Treatment Centre" @@ -25846,9 +25734,6 @@ /obj/effect/turf_decal/trimline/green/line, /turf/open/floor/iron/dark, /area/station/service/cafeteria) -"jgi" = ( -/turf/open/floor/carpet/orange, -/area/station/command/heads_quarters/qm) "jgk" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -25865,11 +25750,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"jgw" = ( -/obj/structure/table/wood/poker, -/obj/effect/spawner/random/entertainment/deck, -/turf/open/floor/wood, -/area/station/commons/lounge) "jgy" = ( /obj/item/phone{ desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; @@ -25892,6 +25772,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"jgK" = ( +/obj/structure/sign/poster/random/directional/south, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "jgT" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box/white{ @@ -25940,21 +25828,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/abandoned) -"jhx" = ( -/obj/item/radio/intercom/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Cargo Bay - Fore" - }, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/box/red, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "jhD" = ( /obj/structure/closet/radiation, /obj/structure/sign/warning/radiation/rad_area/directional/north, @@ -25963,10 +25836,6 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"jhN" = ( -/obj/structure/sign/warning/electric_shock/directional/east, -/turf/open/space/basic, -/area/space/nearstation) "jhS" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -25983,32 +25852,6 @@ /obj/machinery/meter, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"jih" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/machinery/door/firedoor, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "pharmacy_shutters"; - name = "Pharmacy Shutters" - }, -/obj/structure/desk_bell{ - pixel_x = -8 - }, -/obj/machinery/door/window/left/directional/north{ - name = "Pharmacy Desk"; - req_access = list("pharmacy") - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "jis" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -26053,6 +25896,11 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) +"jjn" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "jjs" = ( /obj/effect/spawner/random/engineering/tank, /obj/effect/mapping_helpers/broken_floor, @@ -26074,10 +25922,12 @@ /obj/item/food/grown/banana, /turf/open/floor/grass, /area/station/medical/virology) -"jjD" = ( -/obj/machinery/vatgrower, -/turf/open/floor/iron/dark/textured_large, -/area/station/science/cytology) +"jjF" = ( +/obj/structure/table/reinforced, +/obj/item/holosign_creator/robot_seat/bar, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "jjG" = ( /obj/machinery/camera/directional/north{ c_tag = "Recreation Area - Fore" @@ -26115,12 +25965,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"jkr" = ( -/obj/machinery/pdapainter/engineering, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/security/telescreen/ce/directional/south, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "jku" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -26129,12 +25973,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) -"jkA" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) "jkG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26151,11 +25989,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron/dark/textured, /area/station/medical/cryo) -"jkV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "jkX" = ( /obj/machinery/door_buttons/access_button{ idDoor = "xeno_airlock_interior"; @@ -26173,6 +26006,34 @@ /obj/item/soap, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) +"jle" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/folder/yellow{ + pixel_x = 8; + pixel_y = -1 + }, +/obj/item/ammo_casing/rocket{ + pixel_x = -2; + pixel_y = 19; + name = "Dud Rocket"; + desc = "An 84mm High Explosive rocket. This one's a dud. Pretty sure." + }, +/obj/item/computer_disk/quartermaster{ + pixel_x = 9; + pixel_y = 13 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = -7; + pixel_y = -4 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "jln" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit/red, @@ -26264,12 +26125,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) -"jmR" = ( -/obj/structure/closet/secure_closet/security/cargo, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "jmT" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/neutral{ @@ -26278,6 +26133,15 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central) +"jmU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jmY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -26340,24 +26204,6 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) -"jnR" = ( -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chem_lockdown"; - name = "Chemistry Shutters" - }, -/obj/machinery/door/window/left/directional/north{ - name = "Chemistry Desk"; - req_access = list("plumbing") - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "joj" = ( /obj/item/radio/intercom/directional/east, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -26382,6 +26228,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"jox" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "joP" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/wood{ @@ -26464,16 +26321,6 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/port) -"jqr" = ( -/obj/machinery/computer/security/mining{ - dir = 4 - }, -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "jqQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -26509,6 +26356,11 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"jrQ" = ( +/obj/effect/turf_decal/loading_area, +/obj/effect/landmark/navigate_destination, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "jrY" = ( /obj/machinery/door/airlock/external{ name = "Transport Airlock" @@ -26518,6 +26370,24 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"jsh" = ( +/obj/structure/table/glass, +/obj/item/folder/white{ + pixel_y = 2 + }, +/obj/item/screwdriver{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/radio/headset/headset_med, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/firealarm/directional/south, +/obj/item/hand_labeler, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "jsi" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -26588,19 +26458,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"jtg" = ( -/obj/structure/table/glass, -/obj/item/experi_scanner{ - pixel_y = -3 - }, -/obj/item/experi_scanner{ - pixel_y = 1 - }, -/obj/item/experi_scanner{ - pixel_y = 6 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "jtl" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, @@ -26610,23 +26467,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"jts" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/button/door/directional/south{ - id = "gateshutter"; - name = "Gateway Shutter Control"; - pixel_y = -34; - req_access = list("command") - }, -/obj/machinery/button/door/directional/south{ - id = "evashutter"; - name = "E.V.A. Storage Shutter Control"; - req_access = list("command") - }, -/turf/open/floor/carpet, -/area/station/command/bridge) "jtA" = ( /obj/structure/table/glass, /obj/effect/turf_decal/siding/white{ @@ -26647,32 +26487,23 @@ dir = 8 }, /area/station/medical/treatment_center) -"jtB" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/machinery/autolathe, -/turf/open/floor/iron, -/area/station/cargo/storage) -"jtF" = ( -/obj/machinery/reagentgrinder, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/machinery/light/directional/west, -/obj/structure/table/glass, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "jtI" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/lab) +"jtS" = ( +/obj/structure/table/reinforced, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/circuitboard/mecha/ripley/main, +/obj/item/circuitboard/mecha/ripley/peripherals, +/turf/open/floor/iron, +/area/station/science/robotics/lab) "juf" = ( /obj/machinery/telecomms/bus/preset_two, /turf/open/floor/circuit/telecomms/mainframe, @@ -26681,10 +26512,6 @@ /obj/structure/closet/secure_closet/brig, /turf/open/floor/iron/dark, /area/station/security/holding_cell) -"juq" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall, -/area/station/cargo/warehouse) "juC" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; @@ -26693,13 +26520,13 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos) "juH" = ( -/obj/item/kirbyplants/random, /obj/machinery/firealarm/directional/west{ pixel_y = -9 }, /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 8 }, +/obj/machinery/vending/cytopro, /turf/open/floor/iron/white, /area/station/science/cytology) "juJ" = ( @@ -26711,16 +26538,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"juL" = ( -/obj/machinery/newscaster/directional/south, -/obj/structure/closet/secure_closet/quartermaster, -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/machinery/camera/directional/south, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "juV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26729,20 +26546,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"juY" = ( -/obj/machinery/light_switch/directional/east, -/obj/machinery/camera/directional/east{ - c_tag = "Virology Lab"; - network = list("ss13","medbay") - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "jvf" = ( /obj/machinery/computer/mech_bay_power_console, /obj/structure/cable, @@ -26760,6 +26563,26 @@ }, /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) +"jvo" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"jvr" = ( +/obj/structure/table/glass, +/obj/item/folder/blue, +/obj/item/clothing/neck/stethoscope, +/obj/item/clothing/glasses/hud/health, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "jvu" = ( /obj/machinery/newscaster/directional/west, /obj/structure/filingcabinet, @@ -26784,32 +26607,6 @@ dir = 1 }, /area/station/service/chapel) -"jvE" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/stack/cable_coil, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/item/clothing/ears/earmuffs{ - pixel_x = -5; - pixel_y = 6 - }, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_x = -4; - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "jvL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -26844,6 +26641,56 @@ /obj/machinery/shower/directional/north, /turf/open/floor/iron, /area/station/science/xenobiology) +"jwj" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"jwp" = ( +/obj/structure/table/glass, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/pill_bottle/mannitol, +/obj/item/reagent_containers/dropper{ + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/cryo) +"jws" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "jwv" = ( /obj/structure/toilet{ pixel_y = 8 @@ -26878,6 +26725,17 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/wood, /area/station/service/library) +"jwP" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) "jwW" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -26899,12 +26757,26 @@ /obj/machinery/air_sensor/ordnance_freezer_chamber, /turf/open/floor/iron/dark/airless, /area/station/science/ordnance/freezerchamber) -"jxo" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 +"jxm" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/construction/plumbing, +/obj/item/construction/plumbing, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 }, -/turf/open/floor/iron, -/area/station/cargo/storage) +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"jxv" = ( +/obj/structure/table/wood, +/obj/machinery/fax{ + fax_name = "Captain's Office"; + name = "Captain's Fax Machine" + }, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "jxH" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -27022,6 +26894,17 @@ "jzp" = ( /turf/closed/wall, /area/station/commons/vacant_room/office) +"jzq" = ( +/obj/structure/table/wood, +/obj/structure/chem_separator{ + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/glass/trophy{ + pixel_y = 15; + pixel_x = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "jzw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -27037,6 +26920,12 @@ /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/security/office) +"jzE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "jzN" = ( /turf/closed/wall/r_wall, /area/station/command/corporate_showroom) @@ -27077,17 +26966,6 @@ /obj/machinery/holopad, /turf/open/floor/iron, /area/station/science/robotics/lab) -"jAJ" = ( -/obj/machinery/light/directional/south, -/obj/machinery/firealarm/directional/south, -/obj/structure/rack, -/obj/item/storage/briefcase/secure, -/obj/item/cigarette/cigar, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "jAN" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -27130,6 +27008,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"jBp" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin{ + name = "Jim Norton's Quebecois Coffee disposal unit" + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"jBu" = ( +/obj/effect/landmark/start/cargo_technician, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) "jBC" = ( /obj/structure/table, /obj/item/clothing/head/soft/grey{ @@ -27146,6 +27040,19 @@ /obj/structure/cable, /turf/open/floor/grass, /area/station/medical/virology) +"jBO" = ( +/obj/item/dice/d20, +/obj/item/dice, +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/dice, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/light_construct/small/directional/south, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "jBU" = ( /obj/structure/chair/office/tactical{ dir = 1 @@ -27158,17 +27065,6 @@ dir = 8 }, /area/station/medical/morgue) -"jBX" = ( -/obj/structure/table/glass, -/obj/item/paper_bin, -/obj/item/clipboard, -/obj/item/toy/figure/cmo, -/obj/structure/cable, -/obj/item/stamp/head/cmo{ - pixel_x = -9 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "jBY" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/bot, @@ -27194,17 +27090,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) -"jCv" = ( -/obj/machinery/light_switch/directional/south, -/obj/structure/table/wood, -/obj/item/razor{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/item/cigarette/cigar, -/obj/item/reagent_containers/cup/glass/flask/gold, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain/private) +"jCs" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/vending/boozeomat, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "jCw" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -27228,13 +27118,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"jDa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/tank_holder/extinguisher, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "jDf" = ( /obj/structure/table, /obj/structure/extinguisher_cabinet/directional/west, @@ -27256,9 +27139,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison/work) -"jDN" = ( -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) +"jEa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "jEc" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -27270,15 +27159,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore) -"jEf" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Virology Airlock"; - network = list("ss13","medbay") - }, -/obj/structure/closet/l3closet, -/obj/effect/turf_decal/tile/green/anticorner/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/virology) "jEr" = ( /obj/machinery/holopad/secure, /obj/machinery/flasher/directional/west{ @@ -27293,16 +27173,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"jEC" = ( -/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/tile/neutral{ - dir = 1 - }, -/obj/machinery/digital_clock/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "jEI" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -27369,6 +27239,15 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"jGb" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/event_spawn, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jGl" = ( /obj/effect/landmark/secequipment, /obj/effect/turf_decal/bot, @@ -27380,21 +27259,6 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"jGp" = ( -/obj/item/book/manual/wiki/security_space_law{ - name = "space law"; - pixel_y = 2 - }, -/obj/item/toy/gun, -/obj/item/restraints/handcuffs, -/obj/structure/table/wood, -/obj/item/clothing/head/collectable/hos{ - name = "novelty HoS hat" - }, -/obj/machinery/firealarm/directional/east, -/obj/structure/cable, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "jGr" = ( /turf/closed/wall/r_wall, /area/station/tcommsat/server) @@ -27415,6 +27279,14 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"jGw" = ( +/obj/structure/table/glass, +/obj/machinery/computer/records/medical/laptop, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "jGA" = ( /obj/structure/table/wood/poker, /turf/open/floor/wood, @@ -27426,6 +27298,16 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/treatment_center) +"jGN" = ( +/obj/machinery/computer/station_alert{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/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/satellite) "jGO" = ( /obj/machinery/hydroponics/soil, /obj/item/cultivator, @@ -27433,20 +27315,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/grass, /area/station/security/prison/garden) -"jGS" = ( -/obj/structure/closet/toolcloset, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/machinery/light/small/directional/north, -/obj/item/lightreplacer{ - pixel_y = 7 - }, -/turf/open/floor/iron/dark/corner{ - dir = 1 - }, -/area/station/engineering/storage_shared) "jHg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27462,15 +27330,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/dorms) -"jHp" = ( -/obj/structure/rack, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/obj/effect/spawner/random/armory/dragnet, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "jHw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/chapel, @@ -27489,6 +27348,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) +"jHM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/cargo_technician, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/sorting) "jHQ" = ( /obj/structure/chair/sofa/corp/left{ dir = 1 @@ -27499,24 +27367,40 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron/dark, /area/station/medical/break_room) -"jHW" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/brown/filled/warning, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/sorting) "jHX" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/floor/iron/dark/textured_large, /area/station/science/cytology) +"jIg" = ( +/obj/structure/table, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/item/radio/off, +/obj/item/radio/off, +/obj/item/radio/off, +/obj/item/radio/off, +/obj/item/multitool, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) "jIk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /turf/open/floor/wood, /area/station/commons/lounge) +"jIl" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/mining{ + name = "Mining Office" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jIz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -27630,6 +27514,12 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron/white, /area/station/science/lab) +"jKc" = ( +/obj/effect/turf_decal/trimline/brown/filled/shrink_cw{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "jKi" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -27693,14 +27583,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/engineering/main) -"jLp" = ( -/obj/effect/spawner/random/structure/grille, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jLw" = ( /obj/structure/marker_beacon/burgundy, /obj/structure/lattice/catwalk, @@ -27745,6 +27627,22 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) +"jMb" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/machinery/light/directional/north, +/obj/structure/statue/gold/qm, +/obj/machinery/status_display/supply{ + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/brown/diagonal_centre, +/obj/effect/turf_decal/tile/yellow/diagonal_edge, +/obj/effect/turf_decal/siding/yellow{ + dir = 10 + }, +/turf/open/floor/iron/diagonal, +/area/station/cargo/storage) "jMo" = ( /obj/structure/chair/stool/directional/north, /turf/open/floor/iron, @@ -27801,38 +27699,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) -"jMT" = ( -/obj/structure/table/wood, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/item/folder/blue, -/obj/item/clothing/head/collectable/hop{ - name = "novelty HoP hat" - }, -/obj/structure/cable, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) -"jMW" = ( -/obj/structure/table, -/obj/item/raw_anomaly_core/random{ - pixel_x = -5; - pixel_y = 7 - }, -/obj/item/raw_anomaly_core/random{ - pixel_x = 7; - pixel_y = 9 - }, -/obj/item/raw_anomaly_core/random, -/obj/effect/turf_decal/stripes/white/line, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) -"jMX" = ( -/obj/effect/turf_decal/arrows/red{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "jMY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -27857,6 +27723,18 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"jNl" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/medkit/regular, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/light/cold/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "jNo" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -27884,10 +27762,14 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"jNX" = ( -/obj/structure/flora/rock/pile, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) +"jNR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/cargo_technician, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) "jNZ" = ( /obj/machinery/camera/directional/west{ c_tag = "Telecomms - Server Room - Aft-Port"; @@ -27942,15 +27824,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood, /area/station/command/corporate_showroom) -"jOS" = ( -/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/iron, -/area/station/cargo/storage) "jPe" = ( /obj/structure/table, /obj/item/airlock_painter, @@ -27978,20 +27851,19 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/white, /area/station/medical/virology) -"jPA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"jPE" = ( +/obj/structure/sign/map/left{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-left-MS"; + pixel_y = 32 }, -/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/siding/wideplating_new/corner, -/obj/effect/turf_decal/tile/green, /obj/effect/turf_decal/tile/neutral{ - dir = 4 + dir = 1 }, /turf/open/floor/iron, -/area/station/service/hydroponics/garden) +/area/station/hallway/primary/port) "jPH" = ( /obj/machinery/door/airlock/atmos{ name = "Atmospherics" @@ -28027,6 +27899,21 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"jQr" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) +"jQz" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 8 + }, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "jQM" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -28053,31 +27940,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"jRd" = ( -/obj/machinery/light/directional/east, -/obj/structure/table, -/obj/machinery/recharger{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/item/paper_bin{ - pixel_x = -11; - pixel_y = 7 - }, -/obj/item/pen{ - pixel_x = -11; - pixel_y = 7 - }, -/obj/item/hand_labeler{ - pixel_x = -10; - pixel_y = -6 - }, -/obj/effect/turf_decal/trimline/dark_red/filled/line{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/prison/directional/east, -/turf/open/floor/iron, -/area/station/security/warden) "jRg" = ( /turf/open/floor/engine/co2, /area/station/engineering/atmos) @@ -28093,6 +27955,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"jRO" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/camera/directional/north{ + c_tag = "Science Research Office"; + network = list("ss13","rd") + }, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/turf/open/floor/iron, +/area/station/science/lab) "jRZ" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -28119,13 +27992,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/lounge) -"jSh" = ( -/obj/structure/sign/poster/official/random/directional/south, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "jSj" = ( /obj/machinery/door/airlock/research{ glass = 1; @@ -28138,23 +28004,6 @@ "jSk" = ( /turf/open/floor/engine, /area/station/science/explab) -"jSp" = ( -/obj/structure/table/wood, -/obj/structure/sign/picture_frame/showroom/one{ - pixel_x = -8; - pixel_y = 32 - }, -/obj/structure/sign/picture_frame/showroom/two{ - pixel_x = 8; - pixel_y = 32 - }, -/obj/item/phone{ - desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; - pixel_x = -3; - pixel_y = 3 - }, -/turf/open/floor/wood, -/area/station/command/corporate_showroom) "jSq" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -28173,31 +28022,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"jTe" = ( -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/item/assembly/signaler{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/assembly/signaler{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/assembly/signaler{ - pixel_x = -8; - pixel_y = 5 - }, -/obj/item/assembly/signaler{ - pixel_y = 8 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "jTi" = ( /obj/machinery/hydroponics/soil, /obj/machinery/camera/directional/west{ @@ -28208,6 +28032,19 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/grass, /area/station/security/prison/garden) +"jTl" = ( +/obj/structure/disposaloutlet{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "jTs" = ( /obj/item/kirbyplants/potty, /turf/open/floor/wood/large, @@ -28233,12 +28070,6 @@ /obj/machinery/pdapainter/security, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) -"jTL" = ( -/obj/structure/cable, -/obj/effect/spawner/random/maintenance, -/obj/machinery/recharge_station, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jTM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -28321,6 +28152,22 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"jUs" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "jUu" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -28397,12 +28244,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/teleporter) -"jVu" = ( -/obj/structure/bed/dogbed/renault, -/mob/living/basic/pet/fox/renault, -/obj/machinery/computer/security/telescreen/minisat/directional/south, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain/private) "jVv" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28465,19 +28306,6 @@ /obj/structure/window/reinforced/plasma/spawner/directional/north, /turf/open/floor/engine, /area/station/engineering/supermatter) -"jWM" = ( -/obj/structure/table/wood, -/obj/item/storage/box/coffeepack{ - pixel_x = 15; - pixel_y = 10 - }, -/obj/item/reagent_containers/cup/glass/bottle/juice/cream{ - pixel_x = 15; - pixel_y = 2 - }, -/obj/machinery/coffeemaker/impressa, -/turf/open/floor/iron/dark, -/area/station/service/cafeteria) "jWR" = ( /obj/item/radio/intercom/directional/east, /obj/effect/turf_decal/siding/wood{ @@ -28566,6 +28394,12 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron/dark, /area/station/command/gateway) +"jYu" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/turf/open/water, +/area/station/service/hydroponics/garden) "jYv" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/smart/simple/green/visible, @@ -28593,6 +28427,13 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) +"jYL" = ( +/obj/machinery/recharger, +/obj/item/restraints/handcuffs, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "jZz" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible, /turf/open/floor/iron, @@ -28641,13 +28482,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) -"kas" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/sorting) "kat" = ( /obj/structure/sign/warning/vacuum/external, /turf/closed/wall, @@ -28659,6 +28493,17 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"kaF" = ( +/obj/effect/turf_decal/trimline/purple/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/siding/purple/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/science/research) "kaS" = ( /obj/item/radio/intercom/directional/east, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, @@ -28667,6 +28512,17 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos) +"kaU" = ( +/obj/structure/closet{ + name = "evidence closet 3" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/item/poster/traitor, +/turf/open/floor/iron/dark, +/area/station/security/evidence) "kbo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28686,6 +28542,40 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron/dark, /area/station/medical/break_room) +"kbN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/mousetraps{ + pixel_x = -5; + pixel_y = 14 + }, +/obj/structure/table, +/obj/item/storage/box/mousetraps{ + pixel_x = 12; + pixel_y = 15 + }, +/obj/item/radio/intercom/directional/north, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -1; + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/station/service/janitor) +"kbR" = ( +/obj/structure/sign/poster/official/cleanliness/directional/east, +/obj/machinery/door/window/right/directional/north{ + name = "Hydroponics Delivery"; + req_access = list("hydroponics") + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron, +/area/station/service/hydroponics) "kbU" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -28693,16 +28583,6 @@ /obj/structure/closet/crate/solarpanel_small, /turf/open/floor/iron, /area/station/engineering/main) -"kbW" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/telescreen/prison/directional/north, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/book/manual/wiki/security_space_law, -/turf/open/floor/wood, -/area/station/service/lawoffice) "kcg" = ( /obj/structure/chair/wood{ dir = 8 @@ -28731,13 +28611,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/bridge) -"kcD" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/storage) +"kcu" = ( +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "kcF" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28774,17 +28650,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/storage) -"kdl" = ( -/obj/structure/table/glass, -/obj/item/book/manual/wiki/medicine, -/obj/item/clothing/neck/stethoscope, -/obj/item/wrench/medical, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/turf/open/floor/iron/dark, -/area/station/medical/cryo) "kdx" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=8.1-Aft-to-Escape"; @@ -28829,24 +28694,17 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"ked" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/storage) -"kep" = ( -/obj/machinery/reagentgrinder{ - pixel_y = 4 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +"ken" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "keK" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 4 @@ -28878,10 +28736,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) -"kfh" = ( -/obj/structure/fake_stairs/directional/south, -/turf/open/floor/iron, -/area/station/cargo/storage) "kfp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -28908,11 +28762,6 @@ "kfL" = ( /turf/closed/wall/mineral/plastitanium, /area/station/commons/fitness/recreation) -"kfR" = ( -/obj/machinery/light_switch/directional/east, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "kfT" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -28953,6 +28802,10 @@ /obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/virology) +"kgC" = ( +/obj/machinery/door/poddoor/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "kgV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -28973,6 +28826,20 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron, /area/station/science/xenobiology) +"kgZ" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/item/wallframe/camera{ + pixel_y = 9; + pixel_x = -3 + }, +/obj/structure/fermenting_barrel, +/obj/item/clothing/head/fedora{ + pixel_y = 13; + name = "porkpie hat"; + desc = "This hat reeks of bad decisions and chemical compounds. There's some odd white dust covering it." + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "kha" = ( /obj/structure/disposalpipe/segment, /obj/machinery/airalarm/directional/east, @@ -29014,6 +28881,21 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/hallway/primary/central) +"kif" = ( +/obj/item/emptysandbag, +/obj/item/emptysandbag, +/obj/item/emptysandbag, +/obj/item/emptysandbag{ + pixel_x = 8 + }, +/obj/item/emptysandbag{ + pixel_x = -9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/south, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "kir" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4 @@ -29055,31 +28937,11 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/white, /area/station/science/research) -"kiK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/wood/poker, -/obj/effect/spawner/random/entertainment/gambling, -/obj/effect/spawner/random/entertainment/gambling, -/obj/effect/spawner/random/entertainment/gambling, -/turf/open/floor/wood, -/area/station/commons/lounge) "kiW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/lockers) -"kjF" = ( -/obj/structure/chair/office, -/obj/machinery/requests_console/directional/north{ - department = "Quartermaster's Desk"; - name = "Security Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/landmark/start/depsec/supply, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "kjG" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -29109,6 +28971,25 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, /area/station/service/theater) +"kkk" = ( +/obj/machinery/computer/cargo{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor"; + name = "Loading Doors"; + pixel_y = -8; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/west{ + id = "QMLoaddoor2"; + name = "Loading Doors"; + pixel_y = 8; + req_access = list("cargo") + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "kkr" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/door/poddoor/preopen{ @@ -29122,6 +29003,31 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden, /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage/gas) +"kkA" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/computer/security, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"kkB" = ( +/obj/machinery/mineral/ore_redemption{ + dir = 4; + input_dir = 8; + output_dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/east{ + name = "Ore Redemption Window" + }, +/obj/machinery/door/window/left/directional/west{ + req_access = list("cargo"); + name = "Cargo Security Window" + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron, +/area/station/cargo/lobby) "kkU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/directional/west{ @@ -29152,17 +29058,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/commons/storage/primary) -"kld" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/wideplating_new, -/obj/structure/railing, -/obj/effect/turf_decal/tile/green/half/contrasted, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) "klf" = ( /obj/item/folder, /obj/item/folder, @@ -29172,6 +29067,37 @@ /obj/item/tape, /turf/open/floor/wood, /area/station/service/library) +"klj" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/table, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = -4; + pixel_y = -3 + }, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/structure/sign/warning/no_smoking{ + pixel_y = 28 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "klp" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -29207,6 +29133,14 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"klI" = ( +/obj/structure/table/wood, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/turf/open/floor/carpet, +/area/station/command/bridge) "klK" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -29242,14 +29176,6 @@ /obj/machinery/status_display/evac, /turf/closed/wall, /area/station/commons/lounge) -"kmn" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/ai_monitored/command/storage/eva) "kmN" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) @@ -29350,16 +29276,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/work) -"kod" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"koi" = ( -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/crap, -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "kop" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29382,11 +29298,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"koU" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable, -/turf/open/floor/wood, -/area/station/service/cafeteria) "koW" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=10.2-Aft-Port-Corner"; @@ -29405,14 +29316,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"kpu" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/bot_white, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/storage) "kpB" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -29447,13 +29350,25 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"kqj" = ( -/obj/structure/table/wood, -/obj/machinery/recharger{ - pixel_y = 4 +"kqh" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/bitrunning/den) "kqm" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -29470,6 +29385,21 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/mechbay) +"kqZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/random/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "krc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -29480,9 +29410,46 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison) +"krt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wideplating_new{ + dir = 4 + }, +/obj/item/storage/toolbox/fishing, +/obj/item/storage/toolbox/fishing, +/obj/item/fishing_rod, +/obj/item/fishing_rod, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "krL" = ( /turf/open/floor/wood, /area/station/command/corporate_showroom) +"krN" = ( +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/item/assembly/timer{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/assembly/timer{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/assembly/timer{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/assembly/timer, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "ksg" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -29499,6 +29466,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/gateway) +"ksM" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "ksT" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -29516,6 +29492,10 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"ktw" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/space/basic, +/area/space/nearstation) "ktz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -29578,10 +29558,6 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/port/fore) -"kuW" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "kvd" = ( /obj/machinery/light/directional/west, /obj/structure/cable, @@ -29590,6 +29566,13 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"kvr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "kvv" = ( /obj/structure/chair, /turf/open/floor/iron/grimy, @@ -29653,17 +29636,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/white, /area/station/science/research) -"kwB" = ( -/obj/structure/table, -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, -/obj/item/radio/off, -/obj/item/radio/off, -/obj/item/radio/off, -/obj/item/radio/off, -/obj/item/multitool, -/turf/open/floor/iron, -/area/station/ai_monitored/command/storage/eva) "kwC" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/camera/directional/south{ @@ -29694,6 +29666,12 @@ "kwZ" = ( /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) +"kxa" = ( +/obj/machinery/chem_master, +/obj/structure/noticeboard/directional/south, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "kxw" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -29717,6 +29695,32 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/office) +"kxC" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -1; + pixel_y = 5 + }, +/obj/item/pen, +/obj/machinery/button/door/directional/east{ + id = "Engineering"; + name = "Engineering Lockdown"; + pixel_y = 16; + req_access = list("engineering") + }, +/obj/machinery/button/door/directional/east{ + id = "atmos"; + name = "Atmospherics Lockdown"; + pixel_y = 24; + req_access = list("atmospherics") + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/computer/security/telescreen/engine/directional/east, +/turf/open/floor/iron, +/area/station/security/checkpoint/engineering) "kxH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29726,11 +29730,16 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"kxZ" = ( -/obj/structure/sign/poster/official/random/directional/south, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) +"kxW" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "kyc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29738,6 +29747,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"kyf" = ( +/obj/machinery/computer/exoscanner_control, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_y = 19; + pixel_x = -6 + }, +/obj/structure/sign/departments/exodrone/directional/north, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "kyh" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -29758,16 +29777,11 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"kyG" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/rcl/pre_loaded, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) +"kyu" = ( +/obj/structure/lattice/catwalk, +/obj/item/toy/figure/cargotech, +/turf/open/space/basic, +/area/space/nearstation) "kyQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29815,27 +29829,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"kzw" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "xeno_airlock_exterior"; - idInterior = "xeno_airlock_interior"; - idSelf = "xeno_airlock_control"; - name = "Access Console"; - pixel_x = -25; - pixel_y = -25; - req_access = list("xenobiology") - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/science/cytology) "kzD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -29859,6 +29852,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) +"kzZ" = ( +/obj/structure/bed/dogbed, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "kAc" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 4 @@ -29866,15 +29866,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"kAg" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "kAp" = ( /obj/machinery/door/window/left/directional/west{ name = "Disposals Chute" @@ -29893,17 +29884,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/teleporter) -"kAv" = ( -/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) "kAF" = ( /obj/machinery/duct, /turf/open/floor/iron/freezer, @@ -29966,6 +29946,26 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/commons/storage/tools) +"kBu" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 + }, +/obj/item/storage/box/bodybags{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/storage/box/disks{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/item/clothing/gloves/latex{ + pixel_x = 4; + pixel_y = 9 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "kBQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc/auto_name/directional/north, @@ -29986,10 +29986,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/command/teleporter) -"kCm" = ( -/obj/structure/sign/poster/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "kCq" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/modular_computer/preset/engineering, @@ -30006,14 +30002,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"kCA" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/teleporter) "kCC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, @@ -30031,16 +30019,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"kCU" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/telescreen/prison/directional/north, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/restraints/handcuffs, -/turf/open/floor/carpet, -/area/station/security/detectives_office) "kCZ" = ( /turf/closed/wall, /area/station/service/hydroponics) @@ -30055,6 +30033,13 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"kDb" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/depsec/supply, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "kDk" = ( /obj/machinery/door/airlock/security/glass{ name = "Permabrig Visitation" @@ -30077,21 +30062,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/engineering/break_room) -"kDv" = ( -/obj/structure/table/glass, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = -8 - }, -/obj/item/clothing/mask/breath{ - pixel_x = 4 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "kDG" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -30160,19 +30130,16 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"kEB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, +"kFb" = ( /obj/structure/disposalpipe/segment{ - dir = 9 + dir = 4 }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"kED" = ( -/obj/structure/sign/directions/evac, -/turf/closed/wall, -/area/station/maintenance/department/science/central) +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "kFg" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -30184,14 +30151,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"kFy" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/brown/arrow_cw{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/arrow_ccw, -/turf/open/floor/iron, -/area/station/cargo/lobby) "kFC" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 8; @@ -30209,6 +30168,16 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/service/library) +"kFQ" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "kFS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -30242,11 +30211,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"kGr" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/effect/turf_decal/siding/thinplating_new, -/turf/open/floor/iron, -/area/station/cargo/storage) "kGs" = ( /obj/machinery/door/airlock/maintenance{ name = "Storage Room" @@ -30273,6 +30237,24 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/white, /area/station/science/lab) +"kGR" = ( +/obj/machinery/button/ignition{ + id = "Xenobio"; + pixel_x = -4; + pixel_y = -3 + }, +/obj/machinery/button/door/directional/north{ + id = "Xenolab"; + name = "Test Chamber Blast Doors"; + pixel_x = 6; + pixel_y = -2; + req_access = list("xenobiology") + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/security/telescreen/test_chamber/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "kHg" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -30310,30 +30292,31 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/engine, /area/station/science/explab) -"kIb" = ( -/obj/item/clothing/head/fedora, -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/station/commons/lounge) -"kIw" = ( -/obj/structure/window/spawner/directional/west, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/obj/structure/table/wood, -/obj/effect/spawner/random/entertainment/musical_instrument, -/obj/item/clothing/glasses/regular/hipster{ - name = "Hipster Glasses" +"kHO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/floor/wood/large, -/area/station/service/theater) +/obj/machinery/light/floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"kHV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/closed/wall, +/area/station/maintenance/port/fore) "kIG" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/port) +"kIJ" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "kIR" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -30348,28 +30331,34 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) -"kJc" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "kJi" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"kJk" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/directional/west, +/obj/item/dest_tagger{ + pixel_x = -9; + pixel_y = 12 + }, +/obj/item/hand_labeler_refill{ + pixel_x = -11; + pixel_y = -3 + }, +/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/checkpoint/supply) "kJx" = ( /obj/structure/chair/office, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/service/library) -"kJG" = ( -/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, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "kJO" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -30379,6 +30368,15 @@ /obj/machinery/light/no_nightlight/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos) +"kKd" = ( +/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{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "kKh" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 @@ -30453,6 +30451,32 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/white, /area/station/security/prison) +"kKO" = ( +/obj/structure/fake_stairs/directional/east, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) +"kKT" = ( +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 7; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = -4; + pixel_y = 12 + }, +/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/structure/table, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "kKZ" = ( /obj/effect/spawner/structure/window, /obj/structure/cable, @@ -30510,17 +30534,6 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) -"kLT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "kMd" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -30535,6 +30548,28 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"kMk" = ( +/obj/item/book/manual/wiki/chemistry{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/book/manual/wiki/grenades, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/item/book/manual/wiki/plumbing{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/reagent_containers/dropper, +/obj/structure/table, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/obj/structure/sign/poster/official/periodic_table/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "kMl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30564,16 +30599,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms) -"kNa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown, -/turf/open/floor/iron, -/area/station/cargo/lobby) "kNx" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -30586,33 +30611,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/station/medical/psychology) -"kNJ" = ( -/obj/structure/table/glass, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/item/reagent_containers/cup/beaker/cryoxadone{ - pixel_x = -6; - pixel_y = 10 - }, -/obj/item/reagent_containers/cup/beaker/cryoxadone{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/item/reagent_containers/cup/beaker/cryoxadone{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/beaker/cryoxadone{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/storage/pill_bottle/mannitol, -/obj/item/reagent_containers/dropper{ - pixel_y = 6 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/cryo) "kNO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/trimline/yellow/filled/corner{ @@ -30690,25 +30688,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"kPk" = ( -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/structure/table, -/obj/item/stack/sheet/plasteel{ - amount = 10 - }, -/obj/machinery/airalarm/directional/west, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/crowbar, -/obj/item/wrench, -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) "kPw" = ( /obj/structure/table, /obj/item/screwdriver{ @@ -30727,6 +30706,17 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) +"kPy" = ( +/obj/structure/table, +/obj/item/surgical_drapes, +/obj/item/cautery, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) "kPQ" = ( /obj/machinery/door/airlock/external{ name = "Space Shack" @@ -30765,6 +30755,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"kQv" = ( +/obj/machinery/light/directional/east, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) +"kQO" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/mob/living/basic/sloth/citrus, +/turf/open/floor/iron, +/area/station/cargo/storage) "kQP" = ( /turf/closed/wall, /area/station/command/heads_quarters/qm) @@ -30782,15 +30782,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/locker) -"kRa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "kRe" = ( /turf/open/floor/iron, /area/station/cargo/miningoffice) @@ -30828,19 +30819,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port) -"kRE" = ( -/obj/machinery/flasher/directional/north{ - id = "AI" - }, -/obj/structure/table/wood/fancy/blue, -/obj/effect/spawner/random/aimodule/neutral, -/obj/machinery/door/window/right/directional/east{ - name = "Core Modules"; - req_access = list("captain") - }, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/ai_upload) "kRF" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 4; @@ -30862,10 +30840,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"kRW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/closed/wall, -/area/station/maintenance/port/fore) "kSo" = ( /obj/structure/chair{ dir = 1 @@ -30930,27 +30904,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"kSH" = ( -/obj/structure/sign/poster/official/cleanliness/directional/east, -/obj/effect/turf_decal/bot, -/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, -/turf/open/floor/iron/dark, -/area/station/service/cafeteria) "kSN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -30967,32 +30920,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"kSR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/wood/poker, -/obj/effect/spawner/random/entertainment/cigarette, -/turf/open/floor/wood, -/area/station/commons/lounge) "kST" = ( /obj/machinery/shieldgen, /turf/open/floor/plating, /area/station/engineering/main) -"kTa" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Central Primary Hallway - Fore - Port Corner" - }, -/obj/machinery/computer/piratepad_control/civilian{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "kTn" = ( /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/tile/neutral, @@ -31008,16 +30939,6 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"kTQ" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/railing/corner/end{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "kTZ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -31042,6 +30963,16 @@ /obj/structure/cable/layer3, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"kUG" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "kUJ" = ( /obj/effect/turf_decal/box/white{ color = "#52B4E9" @@ -31071,6 +31002,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"kVq" = ( +/obj/structure/sign/warning/secure_area/directional/east, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "kVs" = ( /obj/machinery/door/airlock/maintenance{ name = "Storage Room" @@ -31145,6 +31081,12 @@ }, /turf/closed/wall, /area/station/hallway/secondary/command) +"kWO" = ( +/obj/structure/sign/directions/medical{ + pixel_y = -7 + }, +/turf/closed/wall, +/area/station/medical/pharmacy) "kWP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31330,23 +31272,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/ordnance/office) -"kYX" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/kitchen) "kZk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31386,6 +31311,15 @@ }, /turf/open/floor/iron, /area/station/security/office) +"kZI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white, +/obj/structure/closet/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "laa" = ( /obj/machinery/light/directional/east, /turf/open/floor/iron/chapel{ @@ -31420,6 +31354,17 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"lay" = ( +/obj/structure/cable, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "laE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, /turf/closed/wall/r_wall, @@ -31457,13 +31402,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/kitchen, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen/coldroom) -"lbb" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/wrapping, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/sorting) "lbh" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -31473,6 +31411,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/prison/visit) +"lbH" = ( +/mob/living/basic/chicken{ + name = "Featherbottom"; + real_name = "Featherbottom" + }, +/obj/structure/flora/bush/fullgrass, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "lbL" = ( /obj/effect/decal/cleanable/insectguts, /obj/effect/turf_decal/siding/purple{ @@ -31499,6 +31445,22 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/gateway) +"lcI" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "lcJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31512,6 +31474,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"ldg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/siding/wideplating_new/corner, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "lds" = ( /obj/structure/table, /obj/item/storage/fancy/egg_box, @@ -31552,14 +31528,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) -"lei" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/bot_white, -/obj/effect/spawner/random/engineering/tracking_beacon, -/turf/open/floor/iron, -/area/station/cargo/storage) "lek" = ( /obj/machinery/power/smes, /obj/structure/cable, @@ -31617,15 +31585,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"lfV" = ( -/obj/structure/cable, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) "lge" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -31704,18 +31663,6 @@ /obj/item/storage/medkit/brute, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"lhu" = ( -/obj/structure/sign/poster/random/directional/east, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 10 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "lhD" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/spawner/random/trash/janitor_supplies, @@ -31748,14 +31695,6 @@ }, /turf/open/floor/wood, /area/station/service/theater) -"lip" = ( -/obj/structure/table, -/obj/machinery/recharger, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "liz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, @@ -31775,19 +31714,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) -"liA" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Outer Vault"; - name = "storage wing camera"; - network = list("ss13","vault") - }, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/structure/window/spawner/directional/south, -/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/storage_wing) "liC" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -31818,19 +31744,30 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"liS" = ( -/obj/machinery/recharger{ - pixel_x = 2; - pixel_y = 3 +"liU" = ( +/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, +/obj/structure/railing{ + dir = 9 }, -/obj/structure/secure_safe/directional/east, -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = -12; - pixel_y = 5 +/obj/machinery/disposal/bin/tagger, +/obj/structure/disposalpipe/trunk{ + dir = 4 }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"liX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "lje" = ( /obj/machinery/camera/directional/south{ c_tag = "Starboard Primary Hallway - Auxiliary Tool Storage" @@ -31880,24 +31817,38 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) +"ljH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution{ + dir = 8 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "ljL" = ( /obj/structure/chair/comfy/black, /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/bridge) -"lkv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/disposalpipe/sorting/mail{ - dir = 8 - }, -/obj/effect/mapping_helpers/mail_sorting/supply/cargo_bay, -/turf/open/floor/iron, -/area/station/hallway/primary/port) +"ljT" = ( +/obj/machinery/exodrone_launcher, +/obj/item/exodrone, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) +"lkc" = ( +/obj/machinery/barsign, +/turf/closed/wall, +/area/station/commons/lounge) +"lku" = ( +/obj/structure/cable, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/greater) "lkW" = ( /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -31946,10 +31897,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/break_room) -"lme" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/dark/textured_large, -/area/station/science/cytology) "lmk" = ( /obj/item/radio/intercom/directional/south, /obj/structure/bodycontainer/morgue{ @@ -31965,13 +31912,6 @@ dir = 8 }, /area/station/medical/morgue) -"lml" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "lmn" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -32023,9 +31963,16 @@ "lnc" = ( /turf/closed/wall, /area/station/commons/dorms) -"lnf" = ( +"lnu" = ( +/obj/structure/table, +/obj/item/clipboard, +/obj/item/toy/figure/scientist, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 8 + }, /turf/open/floor/iron, -/area/station/hallway/primary/central) +/area/station/science/lab) "lnH" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -32037,13 +31984,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/safe) -"lnO" = ( -/obj/machinery/recharger, -/obj/item/restraints/handcuffs, -/obj/structure/table/glass, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "lnP" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -32060,14 +32000,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) -"lnV" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/sink/directional/east, -/obj/structure/sign/poster/official/cleanliness/directional/south, -/obj/machinery/light/small/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/service/hydroponics) "lnX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32090,6 +32022,12 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"loR" = ( +/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/construction/storage_wing) "loW" = ( /obj/machinery/door/airlock/maintenance{ name = "Storage Room" @@ -32102,6 +32040,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) +"loY" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/armory/dragnet, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "lpo" = ( /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 4 @@ -32113,10 +32060,6 @@ /obj/machinery/meter, /turf/closed/wall/r_wall, /area/station/engineering/atmos) -"lpt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "lpA" = ( /obj/machinery/air_sensor/nitrogen_tank, /turf/open/floor/engine/n2, @@ -32139,6 +32082,20 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/medical/medbay/central) +"lpR" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/item/computer_disk/ordnance, +/obj/item/computer_disk/ordnance, +/obj/item/computer_disk/ordnance, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "lpS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32255,33 +32212,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"lsg" = ( -/obj/structure/table/glass, -/obj/item/folder/white{ - pixel_y = 2 - }, -/obj/item/screwdriver{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/radio/headset/headset_med, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/machinery/firealarm/directional/south, -/obj/item/hand_labeler, -/obj/item/stack/package_wrap, -/obj/item/stack/package_wrap, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) -"lsG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/engineering{ - name = "Port Bow Solar Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "lsJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -32297,19 +32227,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) -"lsS" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/effect/turf_decal/siding/purple{ - dir = 6 - }, -/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) "lsV" = ( /obj/effect/turf_decal/siding/purple{ dir = 10 @@ -32368,13 +32285,23 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"ltV" = ( -/obj/structure/table, -/obj/machinery/microwave, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/machinery/firealarm/directional/south, +"ltW" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/paper, +/obj/machinery/door/window/left/directional/south{ + name = "Hydroponics Window"; + req_access = list("hydroponics") + }, +/obj/effect/turf_decal/delivery, +/obj/item/pen, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "hydro_service"; + name = "Service Shutter" + }, /turf/open/floor/iron, -/area/station/science/research) +/area/station/hallway/secondary/service) "ltX" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -32384,6 +32311,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/hydroponics) +"lug" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "lup" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -32427,20 +32363,17 @@ }, /turf/open/floor/iron, /area/station/security/range) -"lvn" = ( -/obj/structure/table/wood, -/obj/item/cigbutt/cigarbutt{ - pixel_x = 5; - pixel_y = -1 - }, -/obj/item/radio/intercom/directional/north, -/obj/item/reagent_containers/cup/glass/mug{ - pixel_x = -4; - pixel_y = 4 +"lvh" = ( +/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/red/filled/warning, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/station/command/corporate_showroom) +/turf/open/floor/iron, +/area/station/cargo/storage) "lvs" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, @@ -32466,11 +32399,6 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"lvY" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/vending/boozeomat/all_access, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) "lvZ" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -32496,6 +32424,15 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/break_room) +"lwt" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law{ + pixel_y = 3 + }, +/obj/item/radio/intercom/command/directional/north, +/obj/item/paper/fluff/jobs/engineering/frequencies, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "lwx" = ( /obj/structure/flora/bush/sunny/style_random, /obj/machinery/camera/directional/north{ @@ -32504,12 +32441,6 @@ }, /turf/open/floor/grass, /area/station/medical/virology) -"lwL" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/structure/bed/dogbed/ian, -/mob/living/basic/pet/dog/corgi/ian, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "lxf" = ( /obj/structure/bed, /obj/effect/spawner/random/bedsheet, @@ -32548,12 +32479,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"lxB" = ( -/obj/structure/table/wood, -/obj/item/folder/yellow, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "lxM" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -32562,14 +32487,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port) -"lxV" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Warehouse Maintenance" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/plating, -/area/station/cargo/warehouse) "lyu" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -32609,6 +32526,15 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"lzD" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/sorting) "lzJ" = ( /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, @@ -32635,6 +32561,11 @@ /obj/item/pen/red, /turf/open/floor/iron/white, /area/station/medical/virology) +"lAa" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/caution, +/turf/open/floor/plating, +/area/station/cargo/storage) "lAe" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/engine, @@ -32684,14 +32615,20 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark, /area/station/security/evidence) -"lBj" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, +"lBg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/vault{ + name = "Vault" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/landmark/navigate_destination, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "lBm" = ( /obj/machinery/conveyor{ dir = 4; @@ -32705,6 +32642,14 @@ "lBA" = ( /turf/open/floor/wood/large, /area/station/commons/lounge) +"lBN" = ( +/obj/machinery/computer/security/telescreen/tcomms/directional/east, +/obj/machinery/computer/telecomms/monitor{ + dir = 8; + network = "tcommsat" + }, +/turf/open/floor/iron/grimy, +/area/station/tcommsat/computer) "lCb" = ( /obj/structure/cable, /obj/structure/sign/poster/ripped/directional/south, @@ -32809,13 +32754,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"lFD" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/circuit/green{ - luminosity = 2 +"lFF" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/area/station/ai_monitored/command/nuke_storage) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "lFZ" = ( /obj/structure/chair/pew/right, /turf/open/floor/iron/chapel{ @@ -32831,21 +32777,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"lGQ" = ( -/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, -/obj/machinery/door/airlock/public/glass{ - name = "Vault Storage" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/construction/storage_wing) "lGR" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -32868,6 +32799,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"lHe" = ( +/obj/machinery/reagentgrinder{ + pixel_y = 4 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "lHh" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/south, @@ -32884,12 +32825,6 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) -"lHy" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/dirt, -/obj/item/plant_analyzer, -/turf/open/floor/grass, -/area/station/security/prison/garden) "lHK" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -32906,19 +32841,17 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"lIk" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ +"lIB" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/siding/wood/corner{ dir = 4 }, -/obj/machinery/conveyor_switch/oneway{ - id = "mining"; - dir = 1 - }, /turf/open/floor/iron, -/area/station/cargo/miningoffice) +/area/station/service/bar) "lIX" = ( /obj/structure/chair/comfy/brown, /turf/open/floor/engine/cult, @@ -32972,32 +32905,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"lJz" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/item/kirbyplants/random{ - pixel_x = -7 - }, -/obj/machinery/camera/directional/north, -/obj/machinery/digital_clock/directional/east, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/item/poster/traitor, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) -"lJQ" = ( -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/machinery/door/airlock/maintenance{ - name = "Mining Dock Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/cargo/miningoffice) "lKu" = ( /obj/effect/landmark/carpspawn, /turf/open/space/basic, @@ -33089,12 +32996,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"lLV" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 8 - }, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "lMh" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/trimline/neutral/end, @@ -33111,13 +33012,6 @@ "lMq" = ( /turf/open/misc/asteroid/basalt/airless, /area/space/nearstation) -"lMA" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/table, -/obj/item/storage/belt/utility/full, -/obj/item/borg/upgrade/rename, -/turf/open/floor/iron/white, -/area/station/science/robotics/lab) "lMC" = ( /obj/machinery/computer/atmos_control/oxygen_tank{ dir = 1 @@ -33129,27 +33023,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) -"lMD" = ( -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/obj/effect/landmark/start/quartermaster, -/obj/item/binoculars, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) -"lMH" = ( -/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, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "lMI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -33212,16 +33085,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/station/security/execution/transfer) -"lND" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/modular_computer/preset/id{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "lNF" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/landmark/event_spawn, @@ -33339,6 +33202,15 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/office) +"lPn" = ( +/obj/machinery/light/small/dim/directional/north, +/obj/structure/rack, +/obj/item/pushbroom, +/obj/effect/decal/cleanable/dirt, +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "lPt" = ( /obj/machinery/door/window/left/directional/west{ name = "Jetpack Storage"; @@ -33359,12 +33231,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"lPw" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "lPy" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -33388,6 +33254,15 @@ /obj/effect/mapping_helpers/mail_sorting/science/experimentor_lab, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"lPB" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/spawner/random/structure/twelve_percent_spirit_board, +/turf/open/floor/iron/grimy, +/area/station/service/chapel/office) "lPC" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -33405,6 +33280,22 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/security/prison) +"lPS" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio8"; + name = "Xenobio Pen 8 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology") + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 10; + pixel_y = -1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "lPZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -33414,6 +33305,15 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/bridge) +"lQf" = ( +/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/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "lQm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -33429,9 +33329,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison/visit) -"lQw" = ( -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "lQC" = ( /obj/structure/closet/l3closet/security, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -33459,21 +33356,23 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"lRv" = ( -/obj/structure/table, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/item/reagent_containers/cup/glass/mug/britcup{ - pixel_y = 2 +"lRA" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/science/research) +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "lRS" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) +"lRT" = ( +/obj/structure/sign/directions/evac, +/turf/closed/wall/r_wall, +/area/station/maintenance/department/medical/central) "lSw" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -33496,14 +33395,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"lSV" = ( -/obj/structure/closet/secure_closet/exile, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/gateway) "lTi" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/camera/directional/south{ @@ -33523,15 +33414,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) -"lTn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "lTq" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -33596,26 +33478,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"lUl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 6 - }, -/obj/structure/sign/warning/secure_area/directional/east{ - pixel_y = 32 - }, -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 6 - }, -/obj/effect/turf_decal/siding/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "lUp" = ( /obj/structure/sink/kitchen/directional/south{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -33624,6 +33486,13 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/iron/showroomfloor, /area/station/maintenance/starboard/lesser) +"lUx" = ( +/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_white, +/turf/open/floor/iron, +/area/station/cargo/storage) "lUz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/yellow{ @@ -33638,20 +33507,6 @@ /obj/effect/spawner/random/structure/chair_flipped, /turf/open/floor/iron/checker, /area/station/maintenance/aft/lesser) -"lUJ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/firealarm/directional/east, -/obj/machinery/light/small/directional/east, -/obj/structure/bed, -/obj/item/bedsheet/qm, -/obj/effect/landmark/start/quartermaster, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "lUK" = ( /obj/machinery/camera/directional/west{ c_tag = "Dormitories - Aft" @@ -33692,27 +33547,9 @@ }, /turf/open/floor/iron, /area/station/command/gateway) -"lVn" = ( -/obj/structure/plasticflaps/opaque{ - name = "Service Deliveries" - }, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=4"; - location = "Service" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +"lVp" = ( +/turf/closed/wall, +/area/station/cargo/lobby) "lVB" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -33743,18 +33580,6 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"lVT" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio1"; - name = "Xenobio Pen 1 Blast Doors"; - pixel_y = 1; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "lWa" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -33789,15 +33614,6 @@ }, /turf/open/floor/wood, /area/station/commons/lounge) -"lWp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/arrows/red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "lWq" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -33809,6 +33625,14 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"lWL" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "lWM" = ( /obj/machinery/camera/directional/east{ c_tag = "Xenobiology Lab - Pen #6"; @@ -33822,19 +33646,6 @@ /obj/structure/sign/warning/vacuum/directional/east, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"lXd" = ( -/obj/structure/rack, -/obj/item/circuitboard/machine/exoscanner{ - pixel_y = 3 - }, -/obj/item/circuitboard/machine/exoscanner, -/obj/item/circuitboard/machine/exoscanner{ - pixel_y = -3 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "lXl" = ( /obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/bot, @@ -33853,14 +33664,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron, /area/station/service/hydroponics) -"lXs" = ( -/obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "lXu" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ @@ -33920,23 +33723,6 @@ /obj/effect/mapping_helpers/mail_sorting/science/ordnance, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"lYm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/structure/crate, -/obj/effect/turf_decal/bot_white, -/obj/structure/closet/crate, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"lYw" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/landmark/start/depsec/supply, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "lYx" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -33986,6 +33772,12 @@ }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"lZM" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/shaker, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain/private) "lZV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -34140,6 +33932,20 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark, /area/station/security/mechbay) +"mcF" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio4"; + name = "Xenobio Pen 4 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology"); + sync_doors = 4 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron, +/area/station/science/xenobiology) "mcP" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -34185,14 +33991,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"mdv" = ( -/obj/effect/landmark/blobstart, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "mdy" = ( /obj/effect/landmark/blobstart, /obj/structure/cable, @@ -34208,11 +34006,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"mdW" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "mei" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron, @@ -34286,6 +34079,15 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"mgo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/gambling, +/obj/effect/spawner/random/entertainment/gambling, +/obj/effect/spawner/random/entertainment/gambling, +/turf/open/floor/wood, +/area/station/commons/lounge) "mgv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34327,14 +34129,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"mhu" = ( -/obj/structure/cable, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "mhA" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -34352,6 +34146,22 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"mhM" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/door/window/right/directional/south{ + name = "Cargo Desk"; + req_access = list("shipping") + }, +/obj/item/newspaper{ + pixel_x = -5 + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "mhR" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -34370,6 +34180,10 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"mie" = ( +/obj/structure/flora/bush/flowers_yw, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "mig" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -34405,19 +34219,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"miq" = ( -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) -"mit" = ( -/obj/machinery/button/ignition/incinerator/atmos, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) "mix" = ( /obj/structure/frame/machine, /obj/item/circuitboard/machine/chem_master, @@ -34452,22 +34253,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) -"miY" = ( -/obj/structure/table, -/obj/item/papercutter{ - pixel_x = 9; - pixel_y = 4 - }, -/obj/item/stamp/denied{ - pixel_x = -7; - pixel_y = 7 - }, -/obj/item/stamp/granted{ - pixel_x = -7 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/sorting) "mjd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34518,14 +34303,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"mkB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "mkO" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34536,14 +34313,6 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron/textured, /area/station/medical/chem_storage) -"mkU" = ( -/obj/machinery/atmospherics/components/binary/pump/on, -/obj/machinery/light/small/directional/east, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) "mlu" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -34570,6 +34339,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"mlH" = ( +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "mlK" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/tile/red{ @@ -34577,18 +34350,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"mlY" = ( -/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/plating, -/area/station/maintenance/port/fore) "mma" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair/stool/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/janitor) +"mml" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/storage) "mmm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34597,22 +34369,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"mmt" = ( -/obj/effect/spawner/random/structure/crate, -/obj/effect/turf_decal/bot_white, -/obj/structure/cable, -/obj/effect/turf_decal/arrows/red{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"mmw" = ( -/obj/structure/bed/dogbed, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/sign/poster/contraband/random/directional/west, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) "mmA" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/machinery/camera/directional/south{ @@ -34655,12 +34411,6 @@ }, /turf/open/floor/iron/checker, /area/station/science/research) -"mmN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/port) "mmR" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -34762,25 +34512,27 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"mnU" = ( -/obj/machinery/firealarm/directional/north, +"mnP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/security/brig) -"mor" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/sign/poster/official/random/directional/north, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"mnU" = ( +/obj/machinery/firealarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/security/brig) "mos" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 @@ -34861,6 +34613,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/chapel, /area/station/service/chapel) +"mqn" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/button/door/directional/west{ + id = "Disposal Exit"; + name = "Disposal Vent Control"; + req_access = list("maint_tunnels") + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "mqu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, @@ -34892,10 +34656,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"mrj" = ( -/obj/item/toy/beach_ball/branded, -/turf/open/space/basic, -/area/space/nearstation) "mru" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -34911,6 +34671,12 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"mrG" = ( +/obj/structure/table/wood, +/obj/item/folder/blue, +/obj/item/lighter, +/turf/open/floor/carpet, +/area/station/command/bridge) "mrJ" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -34931,26 +34697,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port) -"mrU" = ( -/obj/effect/landmark/generic_maintenance_landmark, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"mrZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/supply/disposals, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "msd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -34960,11 +34706,6 @@ /obj/structure/altar_of_gods, /turf/open/floor/iron/dark, /area/station/service/chapel) -"msn" = ( -/obj/structure/lattice/catwalk, -/obj/item/toy/figure/cargotech, -/turf/open/space/basic, -/area/space/nearstation) "msu" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -34984,23 +34725,34 @@ /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) +"msJ" = ( +/obj/structure/table/reinforced, +/obj/item/folder/red, +/obj/structure/cable, +/obj/machinery/requests_console/directional/south{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) "msN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"msQ" = ( -/obj/effect/spawner/random/maintenance, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "msR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/xenobiology) +"msT" = ( +/obj/structure/table, +/obj/item/food/mint, +/obj/item/reagent_containers/cup/beaker/large, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "mta" = ( /obj/machinery/camera/directional/north{ c_tag = "Starboard Primary Hallway - tech_storage" @@ -35016,6 +34768,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"mtb" = ( +/obj/structure/table/wood, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/folder/blue, +/obj/item/clothing/head/collectable/hop{ + name = "novelty HoP hat" + }, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "mtj" = ( /obj/machinery/medical_kiosk, /obj/effect/turf_decal/siding/white, @@ -35050,14 +34812,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/commons/dorms) -"mtV" = ( -/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 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "mtZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35085,6 +34839,16 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"mun" = ( +/obj/structure/showcase/machinery/tv{ + dir = 1; + pixel_x = 2; + pixel_y = 3 + }, +/obj/structure/table/wood, +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "mup" = ( /obj/machinery/door/airlock/maintenance{ name = "Storage Room" @@ -35129,6 +34893,17 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) +"muZ" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Departure Lounge - Port Fore" + }, +/obj/item/kirbyplants/organic/plant24, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "mvg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35137,46 +34912,11 @@ }, /turf/open/floor/carpet, /area/station/service/library) -"mvm" = ( -/obj/structure/table, -/obj/item/stack/package_wrap, -/obj/item/stack/package_wrap, -/obj/item/stack/package_wrap, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/window/spawner/directional/south, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/teleporter) "mvo" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/engineering/atmos) -"mvr" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/plasteel{ - amount = 15 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/structure/fireaxecabinet/mechremoval/directional/east, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/science/robotics/lab) -"mvG" = ( -/obj/machinery/light/small/directional/west, -/obj/item/clothing/mask/animal/horsehead, -/obj/structure/table/wood, -/obj/machinery/airalarm/directional/south, -/obj/item/cigarette/pipe, -/obj/item/clothing/mask/fakemoustache, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/wood, -/area/station/service/theater) "mvN" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line, @@ -35196,26 +34936,41 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/office) -"mwi" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Disposal Access" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 +"mvZ" = ( +/obj/machinery/light/directional/south, +/obj/structure/rack, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency{ + pixel_x = -2; + pixel_y = -3 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 +/obj/item/wrench, +/obj/item/multitool, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ +/obj/machinery/incident_display/bridge/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) +"mwj" = ( +/obj/machinery/computer/records/security{ dir = 4 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/disposal) +/obj/machinery/keycard_auth/wall_mounted/directional/west, +/obj/machinery/requests_console/directional/north{ + department = "Head of Security's Desk"; + name = "Head of Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/machinery/button/door/directional/north{ + id = "hosspace"; + name = "Space Shutters Control"; + pixel_x = -24 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) "mwm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ @@ -35223,6 +34978,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"mwo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "mww" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -35245,20 +35008,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) -"mxk" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/storage/medkit/regular{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/structure/cable, -/obj/item/paper/pamphlet/gateway, -/turf/open/floor/iron, -/area/station/command/gateway) "mxn" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/hos) @@ -35321,6 +35070,16 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/checkpoint/science) +"myG" = ( +/obj/structure/sign/directions/evac, +/obj/structure/sign/directions/medical{ + pixel_y = 8 + }, +/obj/structure/sign/directions/science{ + pixel_y = -8 + }, +/turf/closed/wall, +/area/station/commons/lounge) "myH" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -35328,11 +35087,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison) -"myS" = ( -/obj/structure/sign/warning/vacuum/external/directional/north, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "myY" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -35341,16 +35095,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"myZ" = ( -/obj/machinery/vending/autodrobe/all_access, -/turf/open/floor/plating, -/area/station/maintenance/port) -"mzc" = ( -/obj/structure/table/reinforced, -/obj/effect/spawner/random/entertainment/lighter, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/bar) "mzg" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/red, @@ -35358,6 +35102,26 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/checkpoint/science) +"mzm" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; + pixel_x = -8; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/book/manual/chef_recipes, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "mzu" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -35387,12 +35151,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/visit) -"mzY" = ( -/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/warehouse) "mAb" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, @@ -35584,25 +35342,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) -"mDi" = ( -/obj/structure/lattice/catwalk, -/obj/item/reagent_containers/cup/glass/bottle/rum{ - pixel_x = -7; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/glass/colocup{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/reagent_containers/cup/glass/colocup{ - pixel_x = 6; - pixel_y = -4 - }, -/obj/item/cigarette/rollie/cannabis{ - pixel_y = -3 - }, -/turf/open/space/basic, -/area/space/nearstation) "mDu" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -35621,6 +35360,19 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"mDC" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) "mDL" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/delivery, @@ -35672,18 +35424,6 @@ /obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) -"mEI" = ( -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/cake_ingredients, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) -"mEJ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "mEL" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -35752,19 +35492,6 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/engineering/main) -"mFq" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Theater - Stage" - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/item/radio/intercom/directional/east, -/obj/structure/table/wood, -/obj/item/clothing/glasses/monocle, -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/wood/large, -/area/station/service/theater) "mFr" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, @@ -35880,30 +35607,6 @@ /obj/machinery/vending/modularpc, /turf/open/floor/iron/white, /area/station/science/lobby) -"mHH" = ( -/obj/structure/table, -/obj/item/multitool{ - pixel_x = 4; - pixel_y = 12 - }, -/obj/item/multitool{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/stock_parts/power_store/cell/high{ - pixel_y = -4 - }, -/obj/item/stock_parts/power_store/cell/high{ - pixel_x = -4; - pixel_y = -6 - }, -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/obj/item/multitool{ - pixel_y = 10 - }, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/atmos) "mHK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35967,14 +35670,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) -"mJf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "mJk" = ( /obj/structure/cable, /obj/machinery/holopad, @@ -36053,25 +35748,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"mKh" = ( -/obj/structure/sign/poster/contraband/random/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"mKj" = ( -/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 = "Security Post - Cargo" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "mKu" = ( /obj/machinery/light_switch/directional/west, /obj/structure/cable, @@ -36100,6 +35776,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"mLp" = ( +/obj/effect/landmark/start/quartermaster, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/diagonal_centre, +/obj/effect/turf_decal/tile/yellow/diagonal_edge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/yellow{ + dir = 8 + }, +/turf/open/floor/iron/diagonal, +/area/station/cargo/storage) "mLu" = ( /obj/machinery/camera/directional/south{ c_tag = "Science Hallway - RD Office"; @@ -36215,18 +35903,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"mMI" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/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/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "mMK" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -36265,20 +35941,6 @@ /obj/machinery/camera/directional/north, /turf/open/floor/iron, /area/station/commons/storage/tools) -"mNw" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/service/kitchen) "mNO" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/light_construct/directional/west, @@ -36302,12 +35964,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"mOX" = ( -/obj/structure/table, -/obj/item/food/mint, -/obj/item/reagent_containers/cup/beaker/large, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "mPh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36373,17 +36029,18 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/security/range) -"mPX" = ( -/obj/machinery/chem_dispenser, -/obj/machinery/button/door/directional/north{ - id = "pharmacy_shutters"; - name = "pharmacy shutters control"; - pixel_x = 24; - req_access = list("medical") +"mQa" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Port Primary Hallway - Middle" }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "mQe" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -36533,6 +36190,30 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"mSI" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; + icon_state = "control_stun"; + name = "AI Upload Turret Control"; + pixel_y = 28 + }, +/obj/item/radio/intercom/directional/north{ + broadcasting = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = -26 + }, +/obj/effect/landmark/start/cyborg, +/obj/machinery/light/small/directional/west, +/obj/machinery/computer/security/telescreen/aiupload/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) "mSM" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -36626,12 +36307,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"mUF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "mUL" = ( /obj/machinery/door/airlock/atmos{ name = "Hypertorus Fusion Reactor" @@ -36640,35 +36315,28 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"mUM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - pixel_x = -8; - pixel_y = -24 - }, -/obj/machinery/button/door/incinerator_vent_atmos_main{ - pixel_x = -8; - pixel_y = -36 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "mUQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"mVo" = ( -/obj/item/cultivator, -/obj/item/crowbar, -/obj/item/plant_analyzer, -/obj/item/reagent_containers/cup/watering_can, +"mVf" = ( /obj/structure/table/glass, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 7; + pixel_y = 12 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "mVp" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /obj/effect/mapping_helpers/broken_floor, @@ -36714,13 +36382,12 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/bar/backroom) -"mWe" = ( -/obj/structure/cable, -/obj/machinery/netpod, -/obj/machinery/light/directional/west, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) +"mWd" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/space/basic, +/area/space/nearstation) "mWA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36756,16 +36423,6 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/medical/storage) -"mWD" = ( -/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/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/fake_stairs/directional/north, -/turf/open/floor/iron, -/area/station/cargo/storage) "mWU" = ( /turf/open/floor/iron, /area/station/maintenance/space_hut) @@ -36777,6 +36434,20 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"mWY" = ( +/obj/item/bodypart/chest/robot{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/bodypart/head/robot{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/structure/table/wood, +/obj/structure/cable, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "mWZ" = ( /obj/item/folder/red, /obj/item/pen, @@ -36838,21 +36509,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"mXK" = ( -/obj/item/food/grown/wheat, -/obj/item/food/grown/watermelon, -/obj/item/food/grown/citrus/orange, -/obj/item/food/grown/grapes, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/table/glass, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 +"mXO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "qmroom" }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) -"mYa" = ( -/turf/open/floor/iron/dark/textured_large, -/area/station/science/cytology) +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) +"mYb" = ( +/obj/structure/chair, +/obj/machinery/computer/security/telescreen/interrogation/directional/west, +/turf/open/floor/iron/grimy, +/area/station/security/interrogation) "mYq" = ( /obj/effect/turf_decal/plaque{ icon_state = "L8" @@ -36914,6 +36583,38 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) +"mZc" = ( +/obj/structure/table/wood, +/obj/item/clothing/head/costume/sombrero/green, +/obj/structure/sign/poster/random/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/landmark/start/hangover, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood/large, +/area/station/service/theater) +"mZz" = ( +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 8 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) "mZC" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -36988,16 +36689,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/central) -"naI" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Head of Personnel's Office"; - name = "Head of Personnel's Fax Machine" - }, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hop) "naN" = ( /obj/machinery/button/door/directional/west{ id = "transitlockdown"; @@ -37014,6 +36705,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"nbd" = ( +/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/warehouse) "nbJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37021,17 +36718,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/service/hydroponics) -"nbM" = ( -/obj/machinery/conveyor/inverted{ - dir = 10; - id = "QMLoad2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/railing, -/turf/open/floor/plating, -/area/station/cargo/storage) "nbS" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -37101,15 +36787,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"nco" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/cargo/sorting) "ncq" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37190,18 +36867,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) -"ndv" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/button/door/directional/west{ - id = "Disposal Exit"; - name = "Disposal Vent Control"; - req_access = list("maint_tunnels") - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "ndI" = ( /obj/item/kirbyplants/organic/plant20, /obj/effect/turf_decal/stripes/line{ @@ -37287,19 +36952,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/tools) -"nfC" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio5"; - name = "Xenobio Pen 5 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron, -/area/station/science/xenobiology) "nfK" = ( /obj/structure/toilet{ pixel_y = 8 @@ -37355,12 +37007,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison) -"nhe" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "nhh" = ( /obj/structure/table/wood, /obj/item/gavelblock, @@ -37370,21 +37016,30 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"nhr" = ( +/obj/structure/table, +/obj/item/folder/white, +/obj/item/stamp/head/rd, +/obj/item/toy/figure/rd{ + pixel_y = 10 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/rd) "nhP" = ( /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) -"nhQ" = ( -/obj/structure/table/reinforced, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/circuitboard/mecha/ripley/main, -/obj/item/circuitboard/mecha/ripley/peripherals, -/turf/open/floor/iron, -/area/station/science/robotics/lab) +"nhS" = ( +/obj/machinery/vending/cigarette, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) +"nhU" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/porta_turret/ai, +/obj/machinery/computer/security/telescreen/research/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat_interior) "nib" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -37452,21 +37107,6 @@ }, /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) -"njh" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/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_half, -/area/station/cargo/bitrunning/den) "njr" = ( /obj/structure/sign/poster/contraband/random/directional/north, /obj/effect/spawner/random/engineering/tank, @@ -37543,6 +37183,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"nkq" = ( +/obj/effect/turf_decal/loading_area, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "nkG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/machinery/meter, @@ -37564,19 +37208,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/office) -"nlK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/newscaster/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "nlP" = ( /obj/structure/table, /obj/item/stock_parts/subspace/treatment, @@ -37584,11 +37215,6 @@ /obj/item/stock_parts/subspace/treatment, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) -"nlS" = ( -/obj/structure/table/wood/poker, -/obj/item/storage/dice, -/turf/open/floor/wood, -/area/station/commons/lounge) "nlT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37600,14 +37226,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) -"nlY" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/structure/closet/crate, -/turf/open/floor/iron, -/area/station/cargo/sorting) "nmf" = ( /obj/machinery/smartfridge, /obj/machinery/door/poddoor/shutters/preopen{ @@ -37634,17 +37252,21 @@ /obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/open/floor/wood, /area/station/command/corporate_showroom) -"nms" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/photocopier, -/turf/open/floor/iron, -/area/station/cargo/sorting) "nmF" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"nmI" = ( +/obj/machinery/light/directional/south, +/obj/structure/rack, +/obj/item/clothing/under/color/blue, +/obj/item/clothing/ears/earmuffs, +/obj/item/clothing/neck/tie/blue, +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/commons/fitness/recreation) "nmN" = ( /obj/structure/table, /obj/item/hand_labeler, @@ -37691,6 +37313,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) +"nnh" = ( +/obj/machinery/light_switch/directional/south, +/obj/structure/table/wood, +/obj/item/razor{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/cigarette/cigar, +/obj/item/reagent_containers/cup/glass/flask/gold, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain/private) "nnl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/disposalpipe/segment{ @@ -37708,6 +37341,21 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"nnq" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/table, +/obj/machinery/firealarm/directional/north, +/obj/item/stack/sheet/iron/five, +/obj/item/radio/intercom/directional/east{ + pixel_y = 8 + }, +/obj/item/stack/cable_coil/five, +/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) "nnt" = ( /obj/effect/turf_decal/bot, /obj/structure/cable, @@ -37719,29 +37367,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"nnL" = ( -/obj/machinery/light_switch/directional/south, -/obj/machinery/conveyor_switch/oneway{ - id = "packageSort2"; - name = "Sort and Deliver"; - pixel_x = -2; - pixel_y = 12 - }, -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "packageExternal"; - name = "Crate Returns"; - pixel_x = -5; - pixel_y = -3 - }, -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/effect/turf_decal/trimline/white/corner, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/sorting) "nnR" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -37832,34 +37457,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) -"noX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/folder/yellow{ - pixel_x = 8; - pixel_y = -1 - }, -/obj/item/ammo_casing/rocket{ - pixel_x = -2; - pixel_y = 19; - name = "Dud Rocket"; - desc = "An 84mm High Explosive rocket. This one's a dud. Pretty sure." - }, -/obj/item/computer_disk/quartermaster{ - pixel_x = 9; - pixel_y = 13 - }, -/obj/effect/spawner/random/entertainment/lighter{ - pixel_x = -7; - pixel_y = -4 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "npv" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -37872,17 +37469,16 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"npy" = ( +"npX" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/maintenance{ - name = "Mining Dock Maintenance" +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 }, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) "npY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -37920,13 +37516,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"nqC" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/railing, -/turf/open/floor/iron, -/area/station/cargo/lobby) "nqD" = ( /obj/structure/closet{ name = "evidence closet 2" @@ -37999,6 +37588,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"nrB" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/structure/railing{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"nrM" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/service/cafeteria) "nrV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /turf/open/floor/iron/dark, @@ -38033,28 +37639,11 @@ }, /turf/open/floor/iron, /area/station/command/gateway) -"nsg" = ( -/obj/item/radio/intercom/directional/west, -/obj/machinery/computer/records/security{ - dir = 4 - }, -/obj/machinery/button/door/directional/west{ - id = "MedbayFoyer"; - name = "Medbay Doors Control"; - normaldoorcontrol = 1; - pixel_y = -9 - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/medical) -"nsj" = ( -/obj/item/radio/intercom/directional/south, -/obj/structure/table/reinforced, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/obj/item/clothing/head/utility/welding, -/turf/open/floor/iron, -/area/station/science/robotics/mechbay) +"nsh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "nsk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38125,6 +37714,16 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"nsT" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "nsZ" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -38168,6 +37767,26 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/storage) +"ntm" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Disposal Access" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "ntA" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -38244,28 +37863,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/office) -"nut" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"nuw" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "nuB" = ( /obj/structure/secure_safe/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -38328,6 +37925,13 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/central) +"nwa" = ( +/obj/structure/closet/wardrobe/pjs, +/obj/effect/landmark/start/hangover/closet, +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/commons/dorms) "nwl" = ( /obj/machinery/door/window/right/directional/north{ name = "Medical Deliveries"; @@ -38339,6 +37943,17 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/medical/storage) +"nwm" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/effect/landmark/start/quartermaster, +/obj/item/binoculars, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "nwq" = ( /obj/structure/table, /obj/machinery/firealarm/directional/south, @@ -38347,30 +37962,6 @@ }, /turf/open/floor/iron, /area/station/command/gateway) -"nwx" = ( -/obj/item/storage/box/matches{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/cigarette/cigar{ - pixel_x = 4; - pixel_y = 1 - }, -/obj/item/cigarette/cigar{ - pixel_x = -4; - pixel_y = 1 - }, -/obj/item/cigarette/cigar/cohiba, -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) -"nwA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/landmark/start/depsec/supply, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "nwC" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -38381,6 +37972,17 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, /turf/closed/wall, /area/station/engineering/atmos/pumproom) +"nwL" = ( +/obj/machinery/computer/upload/ai, +/obj/machinery/door/window/right/directional/south{ + name = "Upload Console Window"; + req_access = list("ai_upload") + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "nwT" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 8 @@ -38408,15 +38010,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"nwZ" = ( -/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/brown/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "nxi" = ( /obj/machinery/conveyor_switch/oneway{ dir = 8; @@ -38436,6 +38029,15 @@ /obj/structure/bookcase/random/reference, /turf/open/floor/wood, /area/station/service/library) +"nxA" = ( +/obj/effect/landmark/navigate_destination/bar, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/reagent_containers/cup/rag, +/obj/structure/table, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "nxF" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -38445,6 +38047,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"nxG" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "nxH" = ( /obj/machinery/door/airlock{ name = "Bar" @@ -38458,6 +38066,15 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/bar/backroom) +"nxI" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/stairs, +/area/station/cargo/storage) "nxO" = ( /obj/structure/chair/office{ dir = 8 @@ -38465,15 +38082,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) -"nxQ" = ( -/obj/structure/table/glass, -/obj/machinery/fax{ - fax_name = "Research Division"; - name = "Research Division Fax Machine"; - pixel_x = 1 - }, -/turf/open/floor/iron/white, -/area/station/science/research) "nxU" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -38481,6 +38089,18 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/safe) +"nyb" = ( +/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/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "nyf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38524,16 +38144,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"nzg" = ( -/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/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "nzo" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -38586,14 +38196,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/engineering/atmos) -"nAc" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "nAC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -38779,12 +38381,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"nCO" = ( -/obj/structure/table, -/obj/structure/cable, -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "nCQ" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ dir = 4 @@ -38815,6 +38411,10 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) +"nDG" = ( +/obj/item/radio/intercom/directional/south, +/turf/closed/wall, +/area/station/cargo/lobby) "nDO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38861,14 +38461,22 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"nEt" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/effect/turf_decal/trimline/brown/filled/end{ +"nEB" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/requests_console/directional/south{ + department = "Kitchen"; + name = "Kitchen Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 }, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron, -/area/station/cargo/sorting) +/obj/machinery/chem_master/condimaster{ + name = "CondiMaster Neo" + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "nEC" = ( /turf/open/floor/carpet, /area/station/command/bridge) @@ -38883,11 +38491,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"nEH" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "nET" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -38924,26 +38527,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"nFM" = ( -/obj/machinery/light_switch/directional/west, -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 8; - pixel_y = 2 - }, -/obj/item/reagent_containers/dropper, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = 10 - }, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "nGd" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39009,27 +38592,23 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"nGK" = ( -/obj/structure/chair/stool/directional/east, -/turf/open/floor/wood, -/area/station/commons/lounge) -"nGZ" = ( +"nGE" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/item/stock_parts/power_store/cell/high, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) -"nHl" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/window/left/directional/south{ - name = "Cytology Pen"; - req_access = list("research") +/obj/structure/sign/poster/random/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/turf/open/floor/iron/dark/textured_large, -/area/station/science/cytology) +/turf/open/floor/iron, +/area/station/hallway/secondary/service) +"nGK" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/wood, +/area/station/commons/lounge) "nHB" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -39037,19 +38616,6 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron, /area/station/security/prison/garden) -"nHE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/railing{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "nHG" = ( /obj/structure/chair/office/light{ dir = 8 @@ -39061,6 +38627,16 @@ /obj/structure/easel, /turf/open/floor/plating, /area/station/maintenance/disposal) +"nIP" = ( +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/pai_card, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/turf/open/floor/iron/white, +/area/station/science/lobby) "nIR" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -39071,18 +38647,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"nJb" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "QMLoad2"; - name = "Unloading Conveyor"; - pixel_x = -13; - pixel_y = -4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 +"nJn" = ( +/obj/machinery/chem_dispenser, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 }, -/turf/open/floor/iron, -/area/station/cargo/storage) +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "nJo" = ( /obj/machinery/smartfridge/organ, /obj/machinery/door/poddoor/shutters/preopen{ @@ -39093,6 +38664,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/medical/treatment_center) +"nJr" = ( +/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner, +/turf/open/floor/engine/xenobio, +/area/station/science/xenobiology) "nJu" = ( /obj/structure/closet/secure_closet/security/sec, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -39100,6 +38675,23 @@ }, /turf/open/floor/iron/dark, /area/station/security/lockers) +"nJA" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/airlock_controller/incinerator_ordmix{ + pixel_x = -24 + }, +/obj/machinery/button/ignition/incinerator/ordmix{ + pixel_x = 24; + pixel_y = -6 + }, +/obj/machinery/button/door/incinerator_vent_ordmix{ + pixel_x = 24; + pixel_y = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "nJG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -39111,6 +38703,19 @@ /obj/effect/turf_decal/loading_area/white, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"nJJ" = ( +/obj/structure/disposalpipe/segment, +/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/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "nJL" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/machinery/atmospherics/components/tank/air, @@ -39140,10 +38745,6 @@ /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/iron, /area/station/security/brig) -"nKn" = ( -/obj/item/radio/intercom/directional/south, -/turf/closed/wall, -/area/station/cargo/lobby) "nKr" = ( /obj/docking_port/stationary{ dir = 8; @@ -39213,12 +38814,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"nLA" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/closed/wall, -/area/station/cargo/warehouse) "nLG" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral{ @@ -39226,11 +38821,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"nLV" = ( -/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/sorting) +"nLZ" = ( +/obj/item/toy/beach_ball/branded, +/turf/open/space/basic, +/area/space/nearstation) "nMf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39243,6 +38837,21 @@ /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, /area/station/maintenance/starboard/aft) +"nMz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/machinery/button/door/directional/west{ + id = "commissaryshutter"; + name = "Commissary Shutter Control" + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron, +/area/station/commons/vacant_room/commissary) "nMK" = ( /obj/machinery/biogenerator, /obj/machinery/firealarm/directional/north, @@ -39263,12 +38872,13 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron, /area/station/security/range) -"nNb" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ +"nMY" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/hallway/primary/port) "nNe" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -39276,6 +38886,15 @@ /obj/structure/flora/bush/stalky/style_random, /turf/open/floor/grass, /area/station/science/research) +"nNo" = ( +/obj/machinery/biogenerator, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/prison/garden) "nNw" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -39285,6 +38904,13 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"nNB" = ( +/obj/effect/turf_decal/arrows/red{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "nNH" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -39326,26 +38952,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"nOg" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/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, -/obj/machinery/flasher/directional/east{ - id = "secentranceflasher" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron, -/area/station/security/brig) "nOi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39392,21 +38998,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"nOx" = ( -/obj/machinery/light_switch/directional/east, -/obj/structure/table, -/obj/machinery/firealarm/directional/north, -/obj/item/stack/sheet/iron/five, -/obj/item/radio/intercom/directional/east{ - pixel_y = 8 - }, -/obj/item/stack/cable_coil/five, -/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) "nOK" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ @@ -39441,17 +39032,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"nPo" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/poster/random/directional/east, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "nPt" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39471,6 +39051,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/garden) +"nPN" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "nQz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/trash/janitor_supplies, @@ -39508,6 +39095,21 @@ /obj/machinery/light/no_nightlight/directional/east, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/pumproom) +"nQR" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageSort2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/obj/machinery/door/window/right/directional/east{ + name = "Crate Security Door"; + req_access = list("shipping") + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "nQX" = ( /turf/open/floor/iron/white, /area/station/science/robotics/lab) @@ -39517,16 +39119,6 @@ }, /turf/closed/wall/r_wall, /area/station/engineering/atmos/pumproom) -"nRq" = ( -/obj/structure/sink/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/iron/white, -/area/station/science/xenobiology/hallway) "nRr" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -39565,6 +39157,14 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"nRQ" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/delivery, +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/ordnance/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "nRU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -39579,25 +39179,14 @@ "nRZ" = ( /turf/closed/wall/r_wall, /area/station/security/medical) -"nSa" = ( -/obj/item/radio/intercom/directional/north, -/obj/effect/turf_decal/bot, -/obj/effect/landmark/event_spawn, -/obj/effect/landmark/start/hangover, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "nSe" = ( /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"nSj" = ( -/obj/structure/table/wood, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/obj/item/radio/intercom/directional/west, -/obj/item/pinpointer/nuke, -/obj/item/disk/nuclear, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain/private) +"nSn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "nSs" = ( /obj/structure/showcase/cyborg/old{ pixel_y = 20 @@ -39654,11 +39243,6 @@ /obj/effect/turf_decal/trimline/dark_red/filled/line, /turf/open/floor/iron, /area/station/security/warden) -"nUl" = ( -/obj/vehicle/sealed/mecha/ripley/cargo, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron/recharge_floor, -/area/station/cargo/warehouse) "nUp" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, @@ -39764,11 +39348,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/space, /area/space/nearstation) -"nXf" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/caution, -/turf/open/floor/plating, -/area/station/cargo/storage) "nXm" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -39776,12 +39355,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"nXB" = ( -/obj/effect/turf_decal/trimline/red/filled/corner, -/obj/machinery/light/directional/east, -/obj/machinery/computer/security/telescreen/interrogation/directional/east, -/turf/open/floor/iron, -/area/station/security/brig) "nXG" = ( /obj/machinery/newscaster/directional/north, /obj/machinery/computer/slot_machine{ @@ -39844,6 +39417,26 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) +"nYO" = ( +/obj/item/reagent_containers/spray/plantbgone, +/obj/item/reagent_containers/spray/pestspray{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/bottle/nutrient/ez, +/obj/item/reagent_containers/cup/bottle/nutrient/rh{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/structure/table, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/stripes/line, +/obj/effect/spawner/random/food_or_drink/seed{ + spawn_all_loot = 1; + spawn_random_offset = 1 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "nYU" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -39880,14 +39473,6 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/service/library) -"nZs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/floor, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "nZt" = ( /obj/structure/closet/secure_closet/engineering_personal, /obj/item/clothing/suit/hooded/wintercoat/engineering, @@ -39916,6 +39501,16 @@ /obj/machinery/bookbinder, /turf/open/floor/wood, /area/station/service/library) +"nZL" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix{ + dir = 8 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) +"oac" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/lobby) "oae" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, @@ -40041,6 +39636,17 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/commons/dorms) +"oby" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/security/mining, +/obj/structure/reagent_dispensers/wall/peppertank/directional/north, +/obj/machinery/light/small/directional/north{ + pixel_x = -11 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "obG" = ( /turf/closed/wall, /area/station/service/theater) @@ -40054,6 +39660,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) +"obQ" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/taperecorder{ + pixel_x = 6; + pixel_y = 10 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "ocg" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/structure/cable, @@ -40072,6 +39695,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/office) +"ocB" = ( +/obj/structure/table/wood, +/obj/machinery/microwave{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) "ocC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40128,31 +39760,17 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"odd" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Head of Personnel's Office" - }, -/obj/structure/table/wood, -/obj/machinery/light/directional/south, -/obj/item/papercutter{ - pixel_x = -4 - }, -/obj/item/paper/fluff/ids_for_dummies, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) -"odg" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/purple{ - dir = 9 +"ocS" = ( +/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/item/toy/figure/geneticist, -/obj/item/radio/intercom/directional/west, -/obj/item/storage/pill_bottle/mutadone{ - pixel_x = -9 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/genetics) +/turf/open/floor/iron, +/area/station/cargo/storage) "odh" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -40190,23 +39808,15 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/iron, /area/station/service/hydroponics) +"oet" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "oew" = ( /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"oeF" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/structure/disposalpipe/segment, -/obj/item/bikehorn/rubberducky, -/obj/machinery/light_switch/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "oeR" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/security_space_law, @@ -40261,6 +39871,15 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"ogL" = ( +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/soap{ + spawn_scatter_radius = 1 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/captain/private) "oha" = ( /obj/structure/rack, /obj/item/storage/briefcase{ @@ -40325,9 +39944,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark/telecomms, /area/station/science/server) -"ohO" = ( -/turf/closed/wall, -/area/station/cargo/lobby) "ohW" = ( /obj/structure/rack, /obj/item/tank/internals/anesthetic, @@ -40357,11 +39973,6 @@ /obj/item/toy/cattoy, /turf/open/floor/plating, /area/station/medical/abandoned) -"oii" = ( -/obj/effect/turf_decal/siding/thinplating_new/corner, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/turf/open/floor/iron, -/area/station/cargo/storage) "oip" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -40387,19 +39998,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"ojd" = ( -/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/mining{ - name = "Mining Office" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "ojo" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -40418,30 +40016,47 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"okn" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "roboticsprivacy2"; - name = "Robotics Shutters" +"ojz" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Space Bridge Access" }, -/obj/item/paper_bin, -/obj/item/pen, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/window/left/directional/north{ - name = "Robotics Desk"; - req_access = list("robotics") +/obj/machinery/button/door/directional/north{ + id = "supplybridge"; + name = "Shuttle Bay Space Bridge Control" }, -/turf/open/floor/iron/white, -/area/station/science/robotics/lab) -"okp" = ( -/obj/machinery/computer/security/telescreen/tcomms/directional/east, -/obj/machinery/computer/telecomms/monitor{ - dir = 8; - network = "tcommsat" +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/floor/iron/grimy, -/area/station/tcommsat/computer) +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"ojW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/arrows/red{ + dir = 1 + }, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"okj" = ( +/obj/structure/cable, +/obj/machinery/camera/motion/directional/south{ + c_tag = "Vault"; + network = list("vault") + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "okP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40462,26 +40077,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"okS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/book/manual/wiki/security_space_law, -/obj/machinery/camera/directional/south{ - c_tag = "Security Post - Cargo" - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "okV" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/effect/spawner/structure/window/reinforced, @@ -40543,6 +40138,32 @@ }, /turf/open/space/basic, /area/space) +"olP" = ( +/obj/structure/cable, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/plating, +/area/station/hallway/secondary/service) +"omc" = ( +/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/white{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"omd" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) "ome" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40558,13 +40179,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"omp" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/engineering/main) "omA" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -40577,6 +40191,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"omV" = ( +/obj/effect/spawner/random/structure/grille, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "onf" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -40629,6 +40251,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"onN" = ( +/obj/structure/table/wood, +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/spawner/random/bureaucracy/paper, +/turf/open/floor/wood, +/area/station/commons/vacant_room/office) "oog" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -40693,14 +40321,12 @@ /obj/effect/landmark/start/mime, /turf/open/floor/carpet, /area/station/service/theater) -"ops" = ( -/obj/structure/filingcabinet, -/obj/machinery/computer/security/telescreen/minisat/directional/east, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/engineering) +"opF" = ( +/obj/machinery/hydroponics/soil, +/obj/item/cultivator, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/grass, +/area/station/security/prison/garden) "opG" = ( /obj/structure/cable, /obj/machinery/firealarm/directional/north, @@ -40761,26 +40387,11 @@ /obj/item/clothing/mask/gas, /turf/open/floor/iron, /area/station/engineering/atmos) -"oqN" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/sign/poster/random/directional/east, -/obj/structure/table/wood, -/obj/item/food/pie/cream, -/turf/open/floor/wood/large, -/area/station/service/theater) "oqT" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/plating, /area/station/engineering/atmos) -"orl" = ( -/obj/machinery/sparker/directional/north{ - id = "Xenobio" - }, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "orp" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/light/small/directional/east, @@ -40842,6 +40453,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, @@ -40868,6 +40488,25 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"ote" = ( +/obj/structure/table, +/obj/item/computer_disk{ + pixel_x = -8; + pixel_y = -3 + }, +/obj/item/computer_disk{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/obj/machinery/airalarm/directional/west, +/obj/item/computer_disk/ordnance{ + pixel_x = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/ordnance/office) "otj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -40908,12 +40547,16 @@ }, /turf/open/floor/iron, /area/station/science/lab) -"otF" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) +"otG" = ( +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/water, +/area/station/service/hydroponics/garden) "otI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40931,6 +40574,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/security/prison/work) +"otQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "ouj" = ( /obj/structure/bed/medical/emergency, /obj/structure/bed/medical/emergency, @@ -40964,6 +40618,21 @@ /obj/item/reagent_containers/cup/glass/bottle/goldschlager, /turf/open/space/basic, /area/space/nearstation) +"ouu" = ( +/obj/item/radio/intercom/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Cargo Bay - Fore" + }, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/box/red, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "ouM" = ( /obj/structure/sign/painting/library{ pixel_y = -32 @@ -41020,19 +40689,6 @@ }, /turf/closed/wall/r_wall, /area/station/engineering/atmos/storage/gas) -"ovq" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison/garden) -"ovE" = ( -/obj/structure/table/wood, -/obj/item/folder/blue, -/obj/item/lighter, -/turf/open/floor/carpet, -/area/station/command/bridge) "ovK" = ( /obj/structure/closet/secure_closet/hop, /turf/open/floor/wood, @@ -41126,10 +40782,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"oxy" = ( -/obj/structure/sign/departments/chemistry/pharmacy, -/turf/closed/wall, -/area/station/medical/pharmacy) +"oxR" = ( +/obj/structure/table, +/obj/item/pipe_dispenser{ + pixel_x = 3; + pixel_y = 7 + }, +/obj/item/pipe_dispenser, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "oxT" = ( /obj/structure/table/wood, /obj/structure/cable, @@ -41152,23 +40814,20 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"oxX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "oyj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"oyu" = ( -/obj/structure/sign/map/left{ - desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; - icon_state = "map-left-MS"; - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "oyx" = ( /obj/structure/toilet{ pixel_y = 8 @@ -41185,13 +40844,6 @@ }, /turf/open/floor/plating, /area/station/commons/toilet/auxiliary) -"oyC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "oyO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -41210,14 +40862,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/service/bar) -"ozg" = ( -/mob/living/basic/chicken{ - name = "Featherbottom"; - real_name = "Featherbottom" - }, -/obj/structure/flora/bush/fullgrass, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "ozm" = ( /obj/effect/turf_decal/siding/purple{ dir = 1 @@ -41248,12 +40892,6 @@ /obj/item/kirbyplants/organic/plant14, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"oAt" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/closed/wall, -/area/station/command/heads_quarters/qm) "oAu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41313,6 +40951,24 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"oBM" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/east{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/green/fourcorners, +/turf/open/floor/iron, +/area/station/service/hydroponics) "oBO" = ( /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, @@ -41323,28 +40979,12 @@ /obj/item/radio/intercom/chapel/directional/west, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"oCj" = ( -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate, -/obj/effect/turf_decal/arrows{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "oCn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/bar/opposingcorners, /mob/living/carbon/human/species/monkey/punpun, /turf/open/floor/iron, /area/station/service/bar) -"oCq" = ( -/obj/structure/table/wood, -/obj/item/cigarette/pipe, -/turf/open/floor/wood, -/area/station/commons/lounge) "oCE" = ( /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/grass, @@ -41357,12 +40997,26 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"oCO" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/south, +/mob/living/basic/chicken{ + name = "Kentucky"; + real_name = "Kentucky" + }, +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "oCR" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/machinery/suit_storage_unit/security, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/brig) +"oCX" = ( +/obj/structure/sign/warning/biohazard, +/turf/closed/wall/r_wall, +/area/station/science/xenobiology/hallway) "oDc" = ( /obj/structure/showcase/cyborg/old{ dir = 8; @@ -41372,13 +41026,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"oDd" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/light_switch/directional/south, -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "oDl" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -41388,65 +41035,34 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"oDB" = ( -/obj/structure/sign/plaques/kiddie{ - pixel_y = 32 - }, -/obj/machinery/camera/directional/north{ - c_tag = "AI Upload Chamber - Fore"; - network = list("aiupload") - }, -/obj/structure/table/wood/fancy/green, -/obj/effect/spawner/random/aimodule/harmless, -/turf/open/floor/circuit/green, -/area/station/ai_monitored/turret_protected/ai_upload) -"oDC" = ( -/obj/structure/table/wood, -/obj/machinery/button/ticket_machine{ - pixel_x = 38 - }, -/obj/machinery/light_switch/directional/south{ - pixel_x = 6; - pixel_y = -34 - }, -/obj/machinery/button/door/directional/south{ - id = "hop"; - name = "Privacy Shutters Control"; - pixel_x = -6; - req_access = list("hop") - }, -/obj/item/paper_bin/carbon{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/stamp/head/hop{ - pixel_x = -4; - pixel_y = 4 +"oDH" = ( +/obj/structure/table, +/obj/item/stack/sheet/iron/fifty, +/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/item/stack/sheet/glass/fifty, +/obj/item/crowbar, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/item/grenade/chem_grenade/smart_metal_foam, +/obj/effect/turf_decal/bot{ + dir = 1 }, -/obj/machinery/button/door/directional/south{ - id = "hopqueue"; - name = "Queue Shutters Control"; +/obj/item/stock_parts/power_store/cell/emproof{ pixel_x = -6; - pixel_y = -34; - req_access = list("hop") - }, -/obj/item/pen{ - pixel_x = -4; - pixel_y = 3 + pixel_y = 2 }, -/obj/machinery/button/photobooth{ - pixel_x = 26 +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = 4; + pixel_y = 6 }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) +/turf/open/floor/iron, +/area/station/engineering/main) "oDJ" = ( /obj/structure/sign/warning/vacuum/external, /turf/closed/wall, /area/station/cargo/storage) -"oDV" = ( -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) "oDW" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /obj/machinery/firealarm/directional/south, @@ -41478,13 +41094,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"oEn" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "oEq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/cable, @@ -41568,6 +41177,24 @@ dir = 8 }, /area/station/engineering/atmos) +"oFG" = ( +/obj/machinery/door/poddoor/preopen{ + id = "medsecprivacy"; + name = "Privacy Shutter" + }, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("brig_entrance") + }, +/obj/item/folder/red{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/item/paper, +/obj/item/pen, +/turf/open/floor/plating, +/area/station/security/checkpoint/medical) "oFH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -41611,6 +41238,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"oFT" = ( +/obj/structure/table, +/obj/item/integrated_circuit/loaded/speech_relay, +/obj/item/integrated_circuit/loaded/hello_world{ + pixel_y = 2; + pixel_x = 3 + }, +/turf/open/floor/iron, +/area/station/science/explab) "oFX" = ( /obj/machinery/door/airlock/maintenance{ name = "Ordnance Lab Maintenance" @@ -41633,6 +41269,14 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/medical/medbay/central) +"oGj" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/effect/turf_decal/box, +/obj/machinery/portable_atmospherics/canister, +/obj/item/radio/intercom/directional/north, +/obj/structure/sign/warning/gas_mask/directional/east, +/turf/open/floor/iron, +/area/station/science/xenobiology) "oGn" = ( /obj/machinery/door/airlock/maintenance{ name = "Fuel Closet" @@ -41648,6 +41292,31 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/open/space/basic, /area/space/nearstation) +"oGH" = ( +/obj/machinery/light/directional/east, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/paper_bin{ + pixel_x = -11; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = -11; + pixel_y = 7 + }, +/obj/item/hand_labeler{ + pixel_x = -10; + pixel_y = -6 + }, +/obj/effect/turf_decal/trimline/dark_red/filled/line{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/prison/directional/east, +/turf/open/floor/iron, +/area/station/security/warden) "oGK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -41695,15 +41364,12 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"oHn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/half/contrasted{ +"oHm" = ( +/obj/structure/railing{ dir = 8 }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) +/turf/open/floor/iron/stairs, +/area/station/cargo/storage) "oHw" = ( /obj/structure/cable, /turf/open/floor/iron/white/corner, @@ -41721,12 +41387,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"oHD" = ( -/obj/machinery/firealarm/directional/east, -/obj/structure/table/glass, -/obj/item/papercutter, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "oHE" = ( /obj/machinery/camera/directional/north{ c_tag = "Atmospherics - Distro Loop" @@ -41790,14 +41450,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"oJi" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/floor, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "oJj" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -41957,35 +41609,26 @@ }, /turf/open/floor/plating, /area/station/command/heads_quarters/hos) -"oMa" = ( -/obj/machinery/computer/security/telescreen/prison/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 8 +"oMh" = ( +/obj/structure/filingcabinet, +/obj/machinery/computer/security/telescreen/minisat/directional/east, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 }, -/obj/effect/landmark/event_spawn, /turf/open/floor/iron, -/area/station/security/office) +/area/station/security/checkpoint/engineering) +"oMx" = ( +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/door/airlock/maintenance{ + name = "Mining Dock Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "oMA" = ( /turf/closed/wall/r_wall, /area/station/science/cytology) -"oMC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/structure/table/reinforced, -/obj/structure/displaycase/forsale/kitchen{ - pixel_y = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/kitchen) "oMR" = ( /obj/structure/table/wood, /obj/machinery/computer/libraryconsole/bookmanagement{ @@ -42003,19 +41646,6 @@ }, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"oMX" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/window/spawner/directional/west, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/hangover, -/turf/open/floor/plating, -/area/station/cargo/sorting) "oMY" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -42025,14 +41655,6 @@ /obj/machinery/holopad, /turf/open/floor/iron, /area/station/commons/locker) -"oNm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/cargo_technician, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron, -/area/station/cargo/storage) "oNs" = ( /turf/open/floor/engine, /area/station/engineering/supermatter) @@ -42047,16 +41669,15 @@ /obj/effect/turf_decal/tile/yellow/full, /turf/open/floor/iron/white/smooth_large, /area/station/medical/chemistry) -"oNG" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/spawner/random/structure/crate, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "oNP" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/medical/office) +"oNR" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) "oOl" = ( /obj/machinery/flasher/directional/north{ id = "AI" @@ -42102,6 +41723,12 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/space, /area/space/nearstation) +"oOY" = ( +/obj/structure/rack, +/obj/item/fuel_pellet, +/obj/item/fuel_pellet, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "oOZ" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, @@ -42170,13 +41797,6 @@ /obj/structure/marker_beacon/olive, /turf/open/space/basic, /area/space/nearstation) -"oPW" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "oPY" = ( /obj/structure/chair/office/light{ dir = 8 @@ -42214,10 +41834,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron, /area/station/science/xenobiology) -"oQV" = ( -/obj/effect/decal/cleanable/wrapping, -/turf/open/floor/iron, -/area/station/cargo/sorting) "oQZ" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=1.5-Fore-Central"; @@ -42225,15 +41841,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"oRk" = ( -/obj/structure/closet/secure_closet/hos, -/obj/item/clothing/shoes/cowboy/black, -/obj/machinery/camera/directional/north{ - c_tag = "Head of Security's Office" +"oRn" = ( +/obj/structure/table/wood, +/obj/machinery/recharger{ + pixel_y = 4 }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hos) +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "oRs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/cook, @@ -42243,6 +41857,15 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"oRx" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "oRM" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -42256,6 +41879,26 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"oRO" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) +"oRR" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Outer Vault"; + name = "storage wing camera"; + network = list("ss13","vault") + }, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/structure/window/spawner/directional/south, +/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/storage_wing) "oRV" = ( /obj/structure/table, /obj/machinery/newscaster/directional/east, @@ -42341,15 +41984,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"oTW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4; - name = "Quartermaster Junction" - }, -/obj/effect/mapping_helpers/mail_sorting/supply/qm_office, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "oUh" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/stripes/corner{ @@ -42383,6 +42017,12 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"oUB" = ( +/obj/effect/turf_decal/bot, +/obj/effect/landmark/start/hangover, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) "oUE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42416,24 +42056,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"oVs" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/west{ - name = "First Aid Supplies"; - req_access = list("medical") - }, -/obj/item/clothing/glasses/blindfold{ - pixel_y = 3 - }, -/obj/item/clothing/glasses/blindfold, -/obj/item/clothing/ears/earmuffs{ - pixel_y = 3 - }, -/obj/item/clothing/ears/earmuffs, -/obj/item/clothing/glasses/eyepatch, -/obj/item/clothing/suit/jacket/straight_jacket, -/turf/open/floor/iron/dark, -/area/station/medical/office) "oVL" = ( /obj/structure/table, /obj/item/folder, @@ -42471,28 +42093,18 @@ "oWk" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/aft) -"oWD" = ( -/obj/structure/table/wood, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) +"oWm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/computer/security/telescreen/engine/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "oWF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"oWG" = ( -/obj/structure/sign/warning/secure_area/directional/west, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/closet/bombcloset, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) "oWH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -42502,6 +42114,16 @@ }, /turf/open/floor/wood, /area/station/service/bar/backroom) +"oWQ" = ( +/obj/structure/rack, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/sheet/iron/twenty, +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "oWT" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -42525,13 +42147,6 @@ /obj/machinery/telecomms/server/presets/science, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"oXv" = ( -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/obj/effect/turf_decal/tile/purple/opposingcorners, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/science/research) "oXJ" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -42613,6 +42228,11 @@ /obj/machinery/light/small/red/directional/west, /turf/open/floor/plating/airless, /area/space/nearstation) +"oYs" = ( +/obj/machinery/vending/autodrobe, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "oYv" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/bed, @@ -42637,12 +42257,6 @@ "oYZ" = ( /turf/closed/wall, /area/station/command/heads_quarters/rd) -"oZa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "oZj" = ( /obj/structure/table/wood, /obj/item/storage/photo_album/library, @@ -42719,6 +42333,26 @@ "paD" = ( /turf/closed/wall, /area/station/cargo/bitrunning/den) +"paU" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"pbb" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/science/research) "pbf" = ( /obj/effect/turf_decal/siding/blue/corner{ dir = 1 @@ -42750,17 +42384,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/side, /area/station/medical/medbay/lobby) -"pbR" = ( -/obj/structure/rack, -/obj/item/assembly/signaler, -/obj/item/assembly/signaler, -/obj/item/assembly/timer, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/obj/machinery/digital_clock/directional/south, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "pbS" = ( /obj/structure/rack, /obj/item/clothing/suit/hazardvest, @@ -42794,12 +42417,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"pce" = ( -/obj/structure/rack, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/obj/effect/spawner/random/armory/riot_shield, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "pck" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -42859,25 +42476,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/hydroponics) -"pds" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/firealarm/directional/west, -/obj/machinery/camera/directional/north{ - c_tag = "Science Mechbay"; - network = list("ss13","rd") - }, -/obj/machinery/button/door/directional/north{ - id = "mechbay"; - name = "Mech Bay Shutters Control"; - req_access = list("robotics") - }, -/turf/open/floor/iron, -/area/station/science/robotics/mechbay) "pdx" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -42887,6 +42485,21 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/maintenance/starboard/greater) +"pdI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron, +/area/station/security/brig) "pdT" = ( /obj/effect/spawner/random/vending/colavend, /obj/effect/turf_decal/delivery, @@ -42937,17 +42550,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"peu" = ( -/obj/machinery/computer/exoscanner_control{ - dir = 1 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Cargo Bay - Drone Launch Room"; - pixel_x = 14 - }, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "peF" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -43015,28 +42617,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"pgd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/stack/package_wrap, -/obj/item/hand_labeler, -/obj/machinery/button/door/directional/west{ - id = "commissaryshutter"; - name = "Commissary Shutter Control" - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/commons/vacant_room/commissary) -"pge" = ( -/obj/structure/cable, -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "pgD" = ( /obj/machinery/door/airlock/maintenance{ name = "Chapel Maintenance" @@ -43090,21 +42670,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/command/gateway) -"phd" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - id_tag = "innerbrig"; - name = "Brig" - }, -/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/cyclelink_helper_multi{ - cycle_id = "brig-entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/turf/open/floor/iron, -/area/station/security/brig) "phn" = ( /obj/structure/reflector/single/anchored{ dir = 10 @@ -43145,14 +42710,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"phP" = ( -/obj/structure/table, -/obj/item/exodrone{ - pixel_y = 8 - }, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "phR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43163,6 +42720,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"pic" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/gateway) "piv" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -43212,16 +42777,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"piR" = ( -/obj/machinery/vending/wardrobe/hydro_wardrobe, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/light/small/directional/north, -/obj/structure/sign/poster/official/random/directional/east, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) "piT" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/epinephrine{ @@ -43264,6 +42819,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) +"pjX" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/disposalpipe/segment, +/obj/structure/tank_holder/extinguisher, +/obj/structure/sign/clock/directional/north, +/turf/open/floor/iron, +/area/station/cargo/sorting) "pke" = ( /obj/effect/turf_decal/siding/red{ dir = 6 @@ -43281,19 +42849,6 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) -"pkz" = ( -/obj/structure/table, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/item/multitool/circuit{ - pixel_x = 7 - }, -/obj/item/multitool/circuit, -/obj/item/multitool/circuit{ - pixel_x = -8 - }, -/turf/open/floor/iron/white, -/area/station/science/explab) "pkH" = ( /obj/structure/rack, /obj/item/restraints/handcuffs, @@ -43318,6 +42873,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"pkM" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "pkQ" = ( /obj/machinery/door/airlock/external{ name = "Security External Airlock" @@ -43328,6 +42891,13 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/security/execution/transfer) +"pkT" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "plp" = ( /obj/machinery/camera/directional/west{ c_tag = "Xenobiology Lab - Pen #1"; @@ -43335,29 +42905,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"plu" = ( -/obj/structure/table/reinforced, -/obj/item/stamp/denied{ - pixel_x = 4; - pixel_y = -2 - }, -/obj/item/stamp{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/pen/red{ - pixel_y = 10 - }, -/obj/item/dest_tagger{ - pixel_x = 9; - pixel_y = 10 - }, -/obj/item/pen/screwdriver{ - pixel_x = -7; - pixel_y = 7 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "plD" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -43408,21 +42955,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"pmw" = ( -/obj/structure/table, -/obj/machinery/camera/directional/north{ - c_tag = "Medbay Paramedic Dispatch"; - name = "medical camera"; - network = list("ss13","medical") - }, -/obj/machinery/fax{ - fax_name = "Medical"; - name = "Medical Fax Machine" - }, -/obj/structure/noticeboard/directional/north, -/obj/structure/sign/clock/directional/west, -/turf/open/floor/iron/dark, -/area/station/medical/office) "pmA" = ( /obj/machinery/door/firedoor, /obj/machinery/smartfridge/food, @@ -43467,16 +42999,6 @@ /obj/item/holosign_creator/robot_seat/restaurant, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"pna" = ( -/obj/structure/cable, -/obj/structure/closet/crate, -/obj/effect/turf_decal/bot/left, -/obj/structure/window/spawner/directional/east, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "pnk" = ( /obj/structure/chair{ dir = 4 @@ -43486,6 +43008,15 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"pnl" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/wallframe/apc, +/obj/item/phone, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/caution, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "pnx" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -43533,6 +43064,18 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"pof" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/entertainment/lighter, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) +"pog" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/station/security/checkpoint/supply) "poj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43625,6 +43168,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"pqc" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "pqi" = ( /obj/structure/chair, /obj/machinery/light/directional/north, @@ -43696,6 +43244,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/brig) +"prx" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Virology Airlock"; + network = list("ss13","medbay") + }, +/obj/structure/closet/l3closet, +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/turf/open/floor/iron/white, +/area/station/medical/virology) "pry" = ( /obj/effect/turf_decal/stripes/line, /obj/item/radio/intercom/directional/south, @@ -43767,15 +43324,29 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"psu" = ( +"psv" = ( +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/rods/fifty, +/obj/item/stack/rods/fifty, /obj/structure/table, -/obj/item/folder/white, -/obj/item/stamp/head/rd, -/obj/item/toy/figure/rd{ - pixel_y = 10 +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/rd) +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) "psw" = ( /obj/machinery/computer/security/hos{ dir = 4 @@ -43783,6 +43354,10 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) +"psy" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hop) "psz" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -43791,16 +43366,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"psM" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/obj/machinery/computer/security/qm{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "psT" = ( /turf/open/floor/iron/dark, /area/station/science/lab) @@ -43868,6 +43433,11 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"pur" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/gambling, +/turf/open/floor/wood, +/area/station/commons/lounge) "puG" = ( /obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -43911,6 +43481,10 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/security/brig) +"puW" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "puZ" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -43918,22 +43492,6 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"pvl" = ( -/obj/machinery/light/directional/south, -/obj/structure/rack, -/obj/item/storage/toolbox/emergency, -/obj/item/storage/toolbox/emergency{ - pixel_x = -2; - pixel_y = -3 - }, -/obj/item/wrench, -/obj/item/multitool, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/obj/machinery/incident_display/bridge/directional/south, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "pvm" = ( /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark, @@ -43957,13 +43515,6 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) -"pvZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/effect/landmark/start/depsec/supply, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "pwm" = ( /obj/machinery/telecomms/processor/preset_four, /turf/open/floor/circuit/telecomms/mainframe, @@ -43980,11 +43531,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"pwL" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/turf_decal/caution, -/turf/open/floor/plating, -/area/station/cargo/storage) "pwM" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -44027,12 +43573,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"pxM" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/item/storage/bag/tray, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "pxN" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -44096,6 +43636,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"pyR" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light_switch/directional/south, +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "pyU" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -44115,22 +43662,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"pzn" = ( -/obj/structure/cable, -/obj/structure/table/reinforced, -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/item/radio/off{ - pixel_x = -11; - pixel_y = -3 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/obj/item/binoculars, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) "pzu" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -44228,6 +43759,14 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/commons/lounge) +"pBs" = ( +/obj/structure/sign/warning/cold_temp/directional/north{ + name = "\improper CRYOGENICS" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/machinery/light/cold/directional/north, +/turf/open/floor/iron/dark/textured, +/area/station/medical/cryo) "pBG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44304,30 +43843,20 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"pCI" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 8; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/cup/bottle/epinephrine{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = 7; - pixel_y = 12 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "pCJ" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 }, /turf/open/floor/wood, /area/station/commons/lounge) +"pCL" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/sink/directional/east, +/obj/structure/sign/poster/official/cleanliness/directional/south, +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/service/hydroponics) "pCO" = ( /obj/machinery/holopad, /obj/machinery/status_display/evac/directional/north, @@ -44343,6 +43872,13 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) +"pDf" = ( +/obj/machinery/requests_console/directional/south{ + department = "Mining"; + name = "Mining Requests Console" + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "pDl" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/window/left/directional/north{ @@ -44361,12 +43897,6 @@ }, /turf/open/floor/iron/white/side, /area/station/science/lobby) -"pDw" = ( -/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/drone_bay) "pDx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ @@ -44475,14 +44005,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) -"pFF" = ( -/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/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "pFG" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -44549,6 +44071,11 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"pGJ" = ( +/obj/item/chair/wood/wings, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "pGZ" = ( /obj/machinery/shower/directional/east, /obj/structure/cable, @@ -44625,6 +44152,11 @@ }, /turf/open/floor/wood/large, /area/station/commons/lounge) +"pHK" = ( +/obj/structure/sign/warning/vacuum/external/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "pHS" = ( /obj/structure/light_construct/directional/east, /turf/open/floor/wood, @@ -44742,24 +44274,6 @@ }, /turf/open/floor/iron/white, /area/station/science/cytology) -"pJB" = ( -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/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/cup/rag{ - pixel_x = -4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "pJE" = ( /turf/open/floor/iron, /area/station/commons/locker) @@ -44781,6 +44295,26 @@ }, /turf/open/floor/plating, /area/station/medical/chemistry) +"pJY" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Bridge - Command Chair" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/button/door/directional/south{ + id = "bridge blast"; + name = "Bridge Access Blast Door Control"; + req_access = list("command") + }, +/obj/machinery/button/door/directional/south{ + id = "council blast"; + name = "Council Chamber Blast Door Control"; + pixel_y = -34; + req_access = list("command") + }, +/turf/open/floor/carpet, +/area/station/command/bridge) "pKa" = ( /obj/structure/cable, /obj/structure/bed/medical/emergency, @@ -44789,27 +44323,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"pKr" = ( -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = 7; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/bottle/epinephrine{ - pixel_x = -4; - pixel_y = 12 - }, -/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/structure/table, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "pKs" = ( /obj/structure/table/wood, /obj/item/paper_bin/carbon{ @@ -44917,11 +44430,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"pNa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "pNb" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, @@ -44941,6 +44449,18 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"pNk" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/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/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "pNp" = ( /obj/machinery/light/small/broken/directional/west, /obj/structure/table, @@ -44948,6 +44468,11 @@ /obj/item/clothing/mask/gas/cyborg, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"pNC" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/construction/storage_wing) "pNR" = ( /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, @@ -44975,6 +44500,31 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"pOk" = ( +/obj/structure/table, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/item/assembly/signaler{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/assembly/signaler{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/assembly/signaler{ + pixel_x = -8; + pixel_y = 5 + }, +/obj/item/assembly/signaler{ + pixel_y = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "pOv" = ( /obj/effect/turf_decal/siding/purple{ dir = 1 @@ -44997,6 +44547,16 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"pOK" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "pON" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45014,6 +44574,16 @@ /obj/structure/cable, /turf/open/floor/iron/grimy, /area/station/security/interrogation) +"pPm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/wrapping, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "pPp" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/chair/comfy/black{ @@ -45053,6 +44623,15 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/station/security/prison/safe) +"pQh" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/solars/port/fore) "pQj" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -45083,19 +44662,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"pQw" = ( -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "pQy" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, @@ -45103,6 +44669,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"pQC" = ( +/obj/structure/table/wood, +/obj/machinery/firealarm/directional/south, +/obj/item/storage/photo_album/bar, +/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, +/area/station/service/bar/backroom) "pQG" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -45120,18 +44695,17 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/storage/gas) +"pQO" = ( +/obj/structure/sign/warning/secure_area/directional/west, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/central) "pQW" = ( /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) -"pQX" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "pRb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45159,10 +44733,6 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"pRr" = ( -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "pRu" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, @@ -45178,6 +44748,14 @@ /obj/item/reagent_containers/spray/pepper, /turf/open/floor/iron, /area/station/security/execution/transfer) +"pRM" = ( +/obj/structure/window/spawner/directional/south, +/mob/living/basic/cow{ + name = "Betsy"; + real_name = "Betsy" + }, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "pSa" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -45192,24 +44770,6 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"pSq" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; - location = "Disposals" - }, -/obj/structure/plasticflaps, -/obj/machinery/door/window/right/directional/south{ - name = "Delivery Door"; - req_access = list("cargo") - }, -/obj/machinery/conveyor{ - dir = 1; - id = "garbage" - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "pSw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45220,14 +44780,6 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"pSB" = ( -/obj/structure/table/glass, -/obj/machinery/computer/records/medical/laptop, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "pSS" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/junction/flipped{ @@ -45237,6 +44789,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/space, /area/space/nearstation) +"pSY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/tank_holder/extinguisher, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"pTf" = ( +/obj/structure/cable, +/turf/open/floor/iron/goonplaque, +/area/station/hallway/primary/port) "pTm" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -45294,6 +44857,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/central) +"pUk" = ( +/obj/machinery/camera/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "pUl" = ( /obj/machinery/shower/directional/east, /obj/effect/decal/cleanable/dirt, @@ -45324,6 +44896,16 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"pUM" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/white/corner, +/obj/machinery/firealarm/directional/north, +/obj/item/clipboard, +/obj/item/paper, +/obj/item/pen, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/medical/office) "pUS" = ( /obj/item/paper_bin{ pixel_x = -3; @@ -45337,6 +44919,20 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/grimy, /area/station/security/interrogation) +"pVK" = ( +/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{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "pVM" = ( /obj/machinery/light/small/directional/south, /obj/machinery/camera/directional/south{ @@ -45346,36 +44942,39 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/brig) -"pVR" = ( -/obj/structure/table/wood, -/obj/item/radio/intercom/directional/east, -/obj/item/folder/blue, -/obj/item/hand_tele, -/obj/item/stamp/head/captain, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) +"pVV" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/structure/table, +/obj/item/storage/box/bandages{ + pixel_y = 6; + pixel_x = 4 + }, +/obj/effect/spawner/random/entertainment/cigarette_pack{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/effect/spawner/random/entertainment/deck, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "pVZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"pWp" = ( -/obj/structure/table, -/obj/item/storage/bag/plants, -/obj/item/reagent_containers/cup/watering_can, -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 10 +"pWb" = ( +/obj/machinery/light/directional/west, +/obj/machinery/piratepad/civilian, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/brown{ + dir = 8 }, /obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, -/area/station/hallway/secondary/service) +/area/station/hallway/primary/central) "pWA" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=2.1-Leaving-Storage"; @@ -45435,14 +45034,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"pWW" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/fake_stairs/directional/north, -/turf/open/floor/iron, -/area/station/cargo/storage) "pWX" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -45475,23 +45066,6 @@ /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron, /area/station/service/hydroponics) -"pXy" = ( -/obj/structure/table, -/obj/item/transfer_valve{ - pixel_x = 5 - }, -/obj/item/transfer_valve, -/obj/item/transfer_valve{ - pixel_x = -5 - }, -/obj/item/transfer_valve{ - pixel_x = 5 - }, -/obj/item/transfer_valve, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "pXA" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -45549,6 +45123,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"pYM" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall, +/area/station/cargo/storage) "pZc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45581,38 +45159,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"pZK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/sign/poster/official/random/directional/west, -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" - }, -/obj/machinery/door/window/left/directional/north{ - req_access = list("shipping") - }, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/plating, -/area/station/cargo/sorting) -"pZU" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/iron, -/area/station/cargo/storage) -"pZV" = ( -/obj/machinery/door/airlock/mining{ - name = "Deliveries" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/sorting) "pZW" = ( /obj/structure/lattice, /obj/structure/sign/nanotrasen{ @@ -45635,14 +45181,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"qat" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/iron, -/area/station/cargo/sorting) "qaw" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -45743,24 +45281,15 @@ /turf/open/floor/iron/dark, /area/station/security/courtroom) "qcD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/effect/spawner/random/maintenance, -/obj/effect/spawner/random/maintenance, -/obj/effect/spawner/random/maintenance, -/obj/item/reagent_containers/cup/soda_cans/pwr_game, -/obj/structure/sign/poster/contraband/random/directional/south, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"qcH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/electrolyzer, -/obj/machinery/atmospherics/components/binary/pump/on/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/obj/structure/rack, +/obj/item/aicard, +/obj/item/radio/off, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "qcP" = ( /obj/effect/landmark/blobstart, /obj/effect/mapping_helpers/burnt_floor, @@ -45822,30 +45351,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/plating, /area/station/maintenance/central) -"qek" = ( -/obj/item/reagent_containers/spray/plantbgone{ - pixel_y = 3 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 13; - pixel_y = 5 - }, -/obj/item/watertank, -/obj/item/grenade/chem_grenade/antiweed, -/obj/structure/table/glass, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/south, -/turf/open/floor/iron, -/area/station/service/hydroponics) "qeo" = ( /obj/machinery/newscaster/directional/north, /obj/structure/dresser, @@ -45874,13 +45379,22 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"qeS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot_white, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/storage) +"qeQ" = ( +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = 3; + pixel_y = -23 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Primary AI Core Access"; + req_access = list("ai_upload") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai) "qeZ" = ( /obj/effect/decal/cleanable/oil, /obj/structure/cable, @@ -45984,6 +45498,15 @@ /obj/machinery/power/supermatter_crystal/engine, /turf/open/floor/engine, /area/station/engineering/supermatter) +"qgl" = ( +/obj/structure/cable, +/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, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "qgn" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -46160,6 +45683,15 @@ /mob/living/simple_animal/bot/floorbot, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"qiY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/sign/poster/random/directional/east, +/obj/structure/table/wood, +/obj/item/food/pie/cream, +/turf/open/floor/wood/large, +/area/station/service/theater) "qjf" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46197,21 +45729,18 @@ /obj/effect/mapping_helpers/airlock/access/any/command/minisat, /turf/open/floor/plating, /area/station/ai_monitored/aisat/exterior) -"qjM" = ( +"qjH" = ( +/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/spawner/structure/window, -/turf/open/floor/plating, -/area/station/cargo/sorting) -"qjN" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/structure/filingcabinet/filingcabinet, /turf/open/floor/iron, -/area/station/cargo/sorting) +/area/station/hallway/primary/central) "qkl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -46234,15 +45763,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) -"qks" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "qkA" = ( /obj/machinery/computer/security, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -46270,6 +45790,17 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"qlh" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) +"qlz" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "qlG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -46289,6 +45820,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"qlW" = ( +/obj/structure/cable, +/obj/machinery/status_display/evac/directional/west, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/construction/storage_wing) +"qme" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/item/storage/test_tube_rack/full, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "qmf" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/table/wood, @@ -46299,6 +45841,9 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) +"qmi" = ( +/turf/open/floor/iron/dark/textured_large, +/area/station/science/cytology) "qmu" = ( /obj/machinery/modular_computer/preset/id{ dir = 8 @@ -46321,6 +45866,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"qmE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "qmO" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/iron/dark, @@ -46333,6 +45886,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"qnj" = ( +/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/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/storage) "qno" = ( /obj/structure/table, /obj/machinery/microwave{ @@ -46347,6 +45907,13 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) +"qnr" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "qnt" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/half/contrasted, @@ -46411,6 +45978,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"qoY" = ( +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "qph" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/spawner/random/medical/patient_stretcher, @@ -46428,26 +46003,10 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"qps" = ( -/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, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "qpD" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/ai_monitored/command/nuke_storage) -"qpK" = ( -/obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Captain's Office"; - name = "Captain's Fax Machine" - }, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "qpM" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/wood, @@ -46458,33 +46017,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/library) -"qqp" = ( +"qqs" = ( /obj/structure/table, -/obj/item/clipboard, -/obj/item/toy/figure/scientist, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 8 +/obj/item/multitool{ + pixel_x = 4; + pixel_y = 12 }, -/turf/open/floor/iron, -/area/station/science/lab) -"qqT" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/paper, -/obj/machinery/door/window/left/directional/south{ - name = "Hydroponics Window"; - req_access = list("hydroponics") +/obj/item/multitool{ + pixel_x = -4; + pixel_y = 8 }, -/obj/effect/turf_decal/delivery, -/obj/item/pen, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "hydro_service"; - name = "Service Shutter" +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = -4 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/item/multitool{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos) "qrg" = ( /obj/machinery/light_switch/directional/north, /turf/open/floor/circuit/green{ @@ -46515,19 +46071,27 @@ }, /turf/open/floor/engine/co2, /area/station/engineering/atmos) -"qrF" = ( -/obj/machinery/computer/exodrone_control_console{ - dir = 1 - }, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) +"qrw" = ( +/obj/structure/bed/dogbed/renault, +/mob/living/basic/pet/fox/renault, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain/private) "qrL" = ( /obj/effect/decal/cleanable/oil/streak, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/cargo/bitrunning/den) +"qrO" = ( +/obj/machinery/chem_dispenser/drinks{ + dir = 1 + }, +/obj/machinery/newscaster/directional/south, +/obj/structure/table, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "qrQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/camera/directional/north{ @@ -46642,63 +46206,23 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"qtu" = ( -/obj/structure/railing/corner/end/flip{ - dir = 8 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/turf_decal/tile/brown/diagonal_centre, -/obj/effect/turf_decal/tile/yellow/diagonal_edge, -/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/yellow/corner{ - dir = 8 - }, -/turf/open/floor/iron/diagonal, -/area/station/cargo/storage) +"qtq" = ( +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/crap, +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "qua" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 1 }, /turf/open/floor/iron, /area/station/engineering/atmos) -"qub" = ( -/obj/machinery/newscaster/directional/east, -/obj/structure/table, -/obj/item/stack/package_wrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/package_wrap{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -7; - pixel_y = 10 - }, -/obj/item/reagent_containers/cup/glass/waterbottle{ - pixel_y = 16 - }, -/obj/machinery/digital_clock/directional/north, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/sorting) "quc" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/burgundy, /turf/open/space/basic, /area/space/nearstation) -"quh" = ( -/obj/structure/railing/corner/end/flip{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "qul" = ( /obj/machinery/power/terminal, /obj/effect/turf_decal/stripes/line, @@ -46721,12 +46245,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/holding_cell) -"qvi" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +"quT" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/light/directional/south, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/storage) "qvJ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -46747,6 +46271,11 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"qvV" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/floor/iron, +/area/station/cargo/storage) "qvY" = ( /obj/structure/closet/secure_closet/miner, /obj/effect/turf_decal/tile/brown/half/contrasted, @@ -46775,6 +46304,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) +"qwI" = ( +/obj/structure/sign/departments/chemistry/pharmacy, +/turf/closed/wall, +/area/station/medical/pharmacy) "qwK" = ( /obj/structure/chair/stool/directional/west, /turf/open/floor/iron, @@ -46917,6 +46450,11 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"qzC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "qzE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -46963,20 +46501,6 @@ dir = 8 }, /area/station/medical/medbay/lobby) -"qAi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/machinery/status_display/evac/directional/west, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "qAA" = ( /obj/machinery/newscaster/directional/east, /obj/machinery/computer/security/mining{ @@ -47053,20 +46577,6 @@ }, /turf/open/floor/engine, /area/station/science/explab) -"qBL" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding{ - dir = 4 - }, -/obj/item/computer_disk/ordnance, -/obj/item/computer_disk/ordnance, -/obj/item/computer_disk/ordnance, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) "qCh" = ( /obj/effect/turf_decal/plaque{ icon_state = "L10" @@ -47086,10 +46596,21 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron, /area/station/science/xenobiology) +"qCm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "qCv" = ( /obj/machinery/telecomms/processor/preset_two, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) +"qCx" = ( +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/iron, +/area/station/cargo/sorting) "qCC" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -47113,6 +46634,17 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/cryo) +"qCM" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "Solar Maintenance" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "qCP" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -47121,6 +46653,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/locker) +"qCS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"qCY" = ( +/obj/structure/sign/directions/evac, +/turf/closed/wall, +/area/station/maintenance/department/science/central) "qDa" = ( /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron, @@ -47179,6 +46724,15 @@ }, /turf/open/floor/iron, /area/station/security/prison/garden) +"qDW" = ( +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "qEb" = ( /obj/structure/chair/pew/right, /turf/open/floor/iron/chapel, @@ -47323,14 +46877,37 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"qHm" = ( +/obj/machinery/pdapainter/engineering, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/security/telescreen/ce/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "qHs" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, /area/station/hallway/secondary/entry) +"qHt" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/conveyor_switch/oneway{ + id = "mining"; + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "qHK" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"qHW" = ( +/obj/item/storage/test_tube_rack/full, +/turf/closed/wall/r_wall, +/area/station/security/prison/safe) "qHY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -47341,6 +46918,27 @@ "qIl" = ( /turf/closed/wall, /area/station/hallway/secondary/command) +"qIp" = ( +/obj/structure/sign/poster/official/cleanliness/directional/east, +/obj/effect/turf_decal/bot, +/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, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) "qIq" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, @@ -47417,18 +47015,13 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/security/prison/visit) -"qJt" = ( -/obj/machinery/chem_dispenser, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, +"qJn" = ( +/obj/machinery/chem_master, +/obj/structure/noticeboard/directional/east, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/light/small/directional/east, /turf/open/floor/iron/white, -/area/station/medical/chemistry) -"qJH" = ( -/obj/machinery/vending/autodrobe/all_access, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/commons/locker) +/area/station/medical/pharmacy) "qJU" = ( /obj/structure/sign/map/right{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -47459,6 +47052,18 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"qKD" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 10 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "qKR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -47476,6 +47081,36 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/research) +"qLk" = ( +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/item/clipboard, +/obj/item/toy/figure/cmo, +/obj/structure/cable, +/obj/item/stamp/head/cmo{ + pixel_x = -9 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"qLp" = ( +/obj/structure/table/wood, +/obj/item/toy/mecha/honk{ + pixel_y = 12 + }, +/obj/item/toy/dummy, +/obj/item/lipstick/purple{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/lipstick/jade{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/lipstick/black, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/station/service/theater) "qLu" = ( /obj/effect/turf_decal/siding/purple{ dir = 1 @@ -47492,11 +47127,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"qLI" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/machinery/holopad, -/turf/open/floor/iron, -/area/station/cargo/sorting) "qLJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -47564,6 +47194,23 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/commons/fitness) +"qMf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + id = "gateshutter"; + name = "Gateway Shutter Control"; + pixel_y = -34; + req_access = list("command") + }, +/obj/machinery/button/door/directional/south{ + id = "evashutter"; + name = "E.V.A. Storage Shutter Control"; + req_access = list("command") + }, +/turf/open/floor/carpet, +/area/station/command/bridge) "qMm" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -47571,25 +47218,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/engineering/atmos) -"qMp" = ( -/obj/machinery/light/small/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/iron, -/area/station/cargo/warehouse) -"qMB" = ( -/obj/machinery/disposal/delivery_chute, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/east, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/station/cargo/sorting) "qMP" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -47644,14 +47272,6 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/psychology) -"qNn" = ( -/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/cargo/sorting) "qNw" = ( /obj/machinery/atmospherics/components/binary/valve/digital, /turf/open/floor/iron/white, @@ -47689,6 +47309,24 @@ }, /turf/open/floor/iron, /area/station/security/prison) +"qNL" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) +"qNO" = ( +/obj/structure/table/glass, +/obj/item/folder/blue{ + pixel_y = 3 + }, +/obj/item/pen, +/obj/machinery/computer/security/telescreen/minisat/directional/south, +/obj/effect/turf_decal/tile/blue, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "qNV" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47918,6 +47556,21 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"qRq" = ( +/obj/structure/table/glass, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = -8 + }, +/obj/item/clothing/mask/breath{ + pixel_x = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "qRz" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/spawner/random/trash/janitor_supplies, @@ -48020,17 +47673,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/commons/storage/primary) -"qSs" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/disposal/delivery_chute, -/obj/structure/window/spawner/directional/east, -/obj/structure/window/spawner/directional/west, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/station/cargo/sorting) "qSP" = ( /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{ dir = 1 @@ -48041,9 +47683,6 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"qST" = ( -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "qTf" = ( /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 @@ -48075,6 +47714,26 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"qTF" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/food/cherrycupcake{ + pixel_y = 10 + }, +/obj/item/food/muffin/berry{ + pixel_x = 18; + pixel_y = 9 + }, +/obj/item/food/cakeslice/pound_cake_slice{ + pixel_x = 4; + pixel_y = -5 + }, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) "qTH" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -48096,6 +47755,21 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"qTL" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Cargo Bay Bridge Access" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "qTR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ @@ -48109,6 +47783,15 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"qTU" = ( +/obj/item/retractor, +/obj/item/hemostat{ + pixel_x = -10 + }, +/obj/structure/table, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) "qTX" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/firealarm/directional/south, @@ -48119,10 +47802,6 @@ /obj/effect/turf_decal/tile/purple/half/contrasted, /turf/open/floor/iron/white, /area/station/science/lobby) -"qUN" = ( -/obj/structure/cable, -/turf/open/floor/iron/goonplaque, -/area/station/hallway/primary/port) "qUQ" = ( /obj/structure/chair{ dir = 8 @@ -48163,6 +47842,11 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"qWg" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/secure_area/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "qWm" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -48315,17 +47999,6 @@ /obj/structure/closet, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"qYb" = ( -/obj/structure/closet{ - name = "evidence closet 3" - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/item/poster/traitor, -/turf/open/floor/iron/dark, -/area/station/security/evidence) "qYd" = ( /obj/structure/cable, /turf/open/floor/iron/white, @@ -48341,12 +48014,26 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, /turf/open/floor/iron/dark, /area/station/tcommsat/server) +"qYt" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "qYw" = ( /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/research) +"qYC" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/ai_monitored/command/nuke_storage) "qZa" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48392,6 +48079,11 @@ "qZI" = ( /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"qZO" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "qZV" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -48456,30 +48148,80 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/port/fore) +"raJ" = ( +/obj/structure/secure_safe/caps_spare, +/obj/structure/table/glass, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "raK" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) -"raN" = ( -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "raT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/stool/directional/west, /turf/open/floor/wood, /area/station/commons/lounge) +"rbd" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/portable_atmospherics/pipe_scrubber, +/obj/effect/turf_decal/siding/purple{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/storage) "rbi" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"rbs" = ( +/obj/structure/cable, +/obj/structure/table, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/gauze, +/obj/item/stack/medical/suture, +/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 = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/lobby) "rbw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/warden) +"rbD" = ( +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 10 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 5 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/sign/poster/official/wtf_is_co2/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) +"rbF" = ( +/obj/machinery/mass_driver/chapelgun, +/obj/structure/sign/warning/vacuum/external/directional/north, +/obj/machinery/light/small/directional/north, +/obj/item/gps, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/service/chapel/funeral) "rbG" = ( /obj/structure/rack, /obj/effect/spawner/random/clothing/costume, @@ -48514,6 +48256,10 @@ }, /turf/open/floor/wood, /area/station/service/library) +"rcR" = ( +/obj/structure/sign/departments/cargo, +/turf/closed/wall, +/area/station/cargo/lobby) "rcW" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -48542,11 +48288,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) -"rdq" = ( -/obj/structure/noticeboard/qm, -/obj/structure/disposalpipe/segment, -/turf/closed/wall, -/area/station/command/heads_quarters/qm) "rdt" = ( /obj/structure/sign/warning/vacuum/external/directional/north, /turf/open/floor/plating, @@ -48584,6 +48325,26 @@ }, /turf/open/floor/engine, /area/station/science/cytology) +"rem" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Service Hallway"; + name = "Service Fax Machine" + }, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "ret" = ( /obj/effect/spawner/random/trash/garbage{ spawn_scatter_radius = 1 @@ -48657,18 +48418,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"rgL" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/mug/britcup{ - pixel_x = -6; - pixel_y = 11 - }, -/obj/item/phone{ - pixel_x = 6; - pixel_y = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "rgS" = ( /obj/machinery/modular_computer/preset/civilian{ dir = 1 @@ -48678,39 +48427,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/lab) -"rgV" = ( -/obj/structure/rack, -/obj/item/aicard, -/obj/item/radio/off, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/minisat/directional/south, -/turf/open/floor/iron/dark, -/area/station/command/bridge) +"rgW" = ( +/obj/machinery/exodrone_launcher, +/obj/effect/turf_decal/box, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "rgZ" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, /turf/open/floor/iron/white, /area/station/science/lobby) -"rha" = ( -/obj/item/pen, -/obj/structure/table/reinforced, -/obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/item/folder/red, -/obj/item/book/manual/wiki/security_space_law{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/machinery/newscaster/directional/north, -/obj/item/screwdriver{ - pixel_y = 10 - }, -/obj/item/radio/off, -/obj/effect/turf_decal/tile/red/fourcorners, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/medical) "rhe" = ( /obj/structure/flora/bush/flowers_pp/style_random, /obj/structure/flora/bush/stalky/style_random, @@ -48726,12 +48453,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"rhs" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "rhx" = ( /obj/machinery/door/window/left/directional/north{ name = "Inner Pipe Access"; @@ -48748,6 +48469,17 @@ /obj/machinery/teleport/hub, /turf/open/floor/plating, /area/station/command/teleporter) +"rhL" = ( +/obj/machinery/computer/security/mining, +/obj/machinery/keycard_auth/wall_mounted/directional/north, +/obj/item/radio/intercom/directional/north{ + pixel_y = 34 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "rhU" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random/structure/crate, @@ -48780,6 +48512,11 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/station/solars/port/fore) +"riU" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/caution, +/turf/open/floor/plating, +/area/station/cargo/storage) "riW" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/door/window/left/directional/north{ @@ -48844,12 +48581,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"rka" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "rke" = ( /obj/machinery/recharge_station, /turf/open/floor/plating, @@ -48862,6 +48593,32 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"rkx" = ( +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/item/stack/cable_coil, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_x = -4; + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "rkA" = ( /obj/structure/table, /obj/item/cultivator, @@ -48893,6 +48650,26 @@ /obj/item/target/syndicate, /turf/open/floor/engine, /area/station/science/explab) +"rkX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"rla" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/obj/structure/cable, +/obj/structure/table/glass, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "rlg" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -48914,6 +48691,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"rlr" = ( +/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_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) "rlu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -48957,6 +48742,17 @@ dir = 4 }, /area/station/service/chapel) +"rmS" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) "rnb" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/effect/spawner/random/trash/garbage{ @@ -48992,6 +48788,17 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/office) +"rnf" = ( +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "rng" = ( /obj/structure/cable, /obj/effect/landmark/start/hangover, @@ -49025,26 +48832,20 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/science/research) -"rnD" = ( -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/obj/item/gps, -/obj/structure/closet/crate/engineering, -/turf/open/floor/plating, -/area/station/engineering/main) "rnX" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/firealarm/directional/east, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"rod" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/brown/arrow_cw{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/arrow_ccw, +/turf/open/floor/iron, +/area/station/cargo/lobby) "roe" = ( /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ dir = 10 @@ -49071,10 +48872,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"rpr" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/science/xenobiology/hallway) "rps" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -49164,15 +48961,16 @@ /obj/effect/spawner/random/structure/grille, /turf/open/space/basic, /area/space/nearstation) -"rrw" = ( -/obj/machinery/computer/records/security{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 +"rrz" = ( +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 1 }, +/obj/structure/table, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/light/small/directional/south, +/obj/machinery/digital_clock/directional/south, /turf/open/floor/iron, -/area/station/security/checkpoint/supply) +/area/station/service/bar) "rrL" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -49185,22 +48983,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"rrP" = ( -/obj/structure/table/wood, -/obj/machinery/door/window/right/directional/south{ - name = "Captain's Desk"; - req_access = list("captain") - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "rrT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/red{ @@ -49222,11 +49004,6 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"rsa" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "rsc" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -49298,46 +49075,43 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) -"rtp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/table/glass, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/screwdriver{ - pixel_x = -2; - pixel_y = 6 +"rtj" = ( +/obj/machinery/igniter/incinerator_ordmix, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) +"rtz" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/requests_console/directional/west{ - department = "Pharmacy"; - name = "Pharmacy Requests Console" +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/mapping_helpers/requests_console/ore_update, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/pdapainter/supply, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "rtD" = ( /obj/effect/turf_decal/tile/purple, /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/aft) "rtG" = ( -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/entertainment/lighter, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 1 }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 6 + }, +/obj/effect/landmark/start/assistant, +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron, -/area/station/service/bar) +/area/station/cargo/lobby) "rtI" = ( /obj/effect/landmark/secequipment, /obj/effect/turf_decal/bot, @@ -49379,6 +49153,22 @@ /obj/structure/bed/medical/emergency, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"rud" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_half, +/area/station/cargo/bitrunning/den) "rul" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49504,6 +49294,21 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"rwa" = ( +/obj/structure/table, +/obj/item/storage/bag/plants, +/obj/item/reagent_containers/cup/watering_can, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 10 + }, +/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) "rwd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/green{ @@ -49568,6 +49373,22 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/white, /area/station/medical/abandoned) +"rxa" = ( +/obj/machinery/door/poddoor/preopen{ + id = "medsecprivacy"; + name = "Privacy Shutter" + }, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/left/directional/north{ + req_access = list("security") + }, +/obj/structure/desk_bell{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/medical) "rxc" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -49630,12 +49451,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ryn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/water_source/puddle, -/obj/item/reagent_containers/cup/watering_can, -/turf/open/floor/grass, -/area/station/security/prison/garden) "ryo" = ( /obj/effect/turf_decal/siding/white, /obj/effect/turf_decal/trimline/brown/warning, @@ -49674,6 +49489,15 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/security/prison/visit) +"ryV" = ( +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "rza" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49692,6 +49516,12 @@ /mob/living/basic/goat/pete, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"rzo" = ( +/obj/structure/cable, +/obj/effect/landmark/start/cargo_technician, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/storage) "rzq" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/corner, @@ -49723,6 +49553,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, /area/station/science/xenobiology) +"rzB" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "rzJ" = ( /obj/effect/landmark/start/lawyer, /turf/open/floor/iron, @@ -49766,25 +49603,6 @@ /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /turf/open/floor/plating, /area/station/maintenance/port) -"rAi" = ( -/obj/machinery/computer/cargo{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor"; - name = "Loading Doors"; - pixel_y = -8; - req_access = list("cargo") - }, -/obj/machinery/button/door/directional/west{ - id = "QMLoaddoor2"; - name = "Loading Doors"; - pixel_y = 8; - req_access = list("cargo") - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "rAo" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/watertank, @@ -49799,13 +49617,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"rAt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "rAG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49827,13 +49638,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"rBP" = ( -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/arrows/red{ - dir = 4 +"rBB" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/cargo/storage) +/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/checkpoint/supply) "rBU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49842,15 +49655,9 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) -"rCa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, +"rBY" = ( +/obj/effect/mapping_helpers/burnt_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/open/floor/plating, /area/station/maintenance/port/fore) "rCn" = ( @@ -50069,6 +49876,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) +"rGk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/modular_computer/preset/cargochat/cargo, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "rGm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ @@ -50088,9 +49907,57 @@ "rGC" = ( /turf/open/floor/iron/dark, /area/station/security/courtroom) +"rHh" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 9; + pixel_y = 4 + }, +/obj/structure/cable, +/obj/item/radio{ + pixel_x = -6; + pixel_y = -3 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science) +"rHk" = ( +/obj/structure/table/glass, +/obj/item/folder/blue{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/folder/white, +/obj/item/pen{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/computer_disk/medical, +/obj/item/computer_disk/medical, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "rHn" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter) +"rHq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 6 + }, +/obj/structure/sign/warning/secure_area/directional/east{ + pixel_y = 32 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 6 + }, +/obj/effect/turf_decal/siding/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "rHz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50127,15 +49994,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"rIm" = ( -/obj/structure/sign/poster/official/cleanliness/directional/west, -/obj/structure/sink/directional/south, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 1 - }, -/obj/structure/mirror/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/virology) "rIG" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -50160,15 +50018,6 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/engineering/break_room) -"rIR" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/external{ - name = "Solar Maintenance" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/plating, -/area/station/solars/port/fore) "rIZ" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ dir = 1 @@ -50182,6 +50031,11 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) +"rJh" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/secure_safe/directional/west, +/turf/open/floor/iron/grimy, +/area/station/security/detectives_office) "rJk" = ( /obj/machinery/door/airlock{ name = "Theater Backstage" @@ -50190,6 +50044,18 @@ /obj/effect/mapping_helpers/airlock/access/all/service/theatre, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) +"rJr" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Head of Personnel's Office" + }, +/obj/structure/table/wood, +/obj/machinery/light/directional/south, +/obj/item/papercutter{ + pixel_x = -4 + }, +/obj/item/paper/fluff/ids_for_dummies, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "rJA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -50268,11 +50134,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/engine, /area/station/science/explab) -"rKF" = ( -/obj/structure/table, -/obj/item/food/dough, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "rKG" = ( /obj/structure/cable, /obj/machinery/door/airlock/virology/glass{ @@ -50323,13 +50184,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"rKX" = ( -/obj/effect/spawner/random/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "rKZ" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -50359,25 +50213,39 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"rLL" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "rLZ" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"rMp" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, +"rMd" = ( +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"rMe" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "xenobio3"; + name = "Xenobio Pen 3 Blast Doors"; + pixel_y = 4; + req_access = list("xenobiology") + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/station/science/xenobiology) +"rMr" = ( +/obj/structure/table/glass, +/obj/item/experi_scanner{ + pixel_y = -3 + }, +/obj/item/experi_scanner{ + pixel_y = 1 + }, +/obj/item/experi_scanner{ + pixel_y = 6 + }, +/turf/open/floor/iron/white, +/area/station/science/research) "rMu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/space_heater, @@ -50398,25 +50266,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"rMH" = ( -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/item/assembly/timer{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/item/assembly/timer{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/assembly/timer{ - pixel_x = 6; - pixel_y = -4 - }, -/obj/item/assembly/timer, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "rMI" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/carpet, @@ -50461,6 +50310,10 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"rNA" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/sorting) "rNI" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -50517,18 +50370,6 @@ /obj/machinery/shower/directional/west, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"rOZ" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio6"; - name = "Xenobio Pen 6 Blast Doors"; - pixel_y = 1; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) "rPe" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50550,6 +50391,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload_foyer) +"rPp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "rPA" = ( /obj/structure/flora/bush/flowers_pp/style_random, /obj/structure/flora/bush/flowers_yw/style_random, @@ -50574,13 +50425,6 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/wood, /area/station/commons/lounge) -"rPO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "rQd" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -50591,15 +50435,51 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"rQe" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +"rQk" = ( +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Security Post - Medbay"; + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/machinery/light/small/directional/north, +/obj/structure/table/reinforced, +/obj/machinery/requests_console/directional/north{ + department = "Security"; + name = "Security Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"rQl" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "rdgene2"; + name = "Genetics Lab Shutters" + }, +/obj/machinery/door/window/left/directional/east{ + name = "Genetics Desk"; + req_access = list("genetics") + }, +/obj/item/folder, +/obj/item/pen, +/obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron, -/area/station/construction/storage_wing) +/area/station/science/genetics) "rQw" = ( /turf/open/floor/plating/airless, /area/station/solars/starboard/fore) +"rQD" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding/thinplating_new, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron, +/area/station/cargo/storage) "rQS" = ( /obj/structure/table, /obj/item/storage/box/evidence{ @@ -50633,31 +50513,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) -"rRd" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Departure Lounge - Port Fore" - }, -/obj/item/kirbyplants/organic/plant24, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"rRz" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/lights/mixed, -/obj/item/stack/sheet/iron{ - amount = 30 - }, -/obj/item/radio{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/stack/cable_coil, -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/iron, -/area/station/commons/storage/primary) +"rRm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/cigarette, +/turf/open/floor/wood, +/area/station/commons/lounge) "rRB" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -50678,6 +50540,17 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark, /area/station/science/genetics) +"rRR" = ( +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/engineering/transit_tube) "rRZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -50773,6 +50646,11 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"rUd" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "rUo" = ( /obj/structure/bed, /obj/effect/spawner/random/bedsheet, @@ -50853,6 +50731,13 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/white, /area/station/medical/virology) +"rVb" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron, +/area/station/security/prison/garden) "rVn" = ( /turf/open/floor/iron, /area/station/cargo/lobby) @@ -50873,6 +50758,28 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"rVT" = ( +/obj/structure/table, +/obj/item/folder/white{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/beaker/large{ + pixel_x = -4; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 7 + }, +/obj/item/reagent_containers/dropper{ + pixel_x = -3; + pixel_y = -6 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/turf/open/floor/iron, +/area/station/science/lab) "rVY" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50893,36 +50800,6 @@ /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/engine/n2, /area/station/engineering/atmos) -"rWp" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio8"; - name = "Xenobio Pen 8 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology") - }, -/obj/item/reagent_containers/spray/cleaner{ - pixel_x = 10; - pixel_y = -1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron, -/area/station/science/xenobiology) -"rWF" = ( -/obj/structure/extinguisher_cabinet/directional/south, -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/smartfridge/drying, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 9 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "rWH" = ( /obj/machinery/door/window/left/directional/south{ name = "HoP's Desk"; @@ -50972,6 +50849,26 @@ }, /turf/open/floor/iron, /area/station/security/prison/visit) +"rXT" = ( +/turf/closed/wall/r_wall, +/area/station/science/ordnance/burnchamber) +"rXW" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/table/glass, +/obj/machinery/camera/directional/west{ + c_tag = "Medbay Pharmacy"; + network = list("ss13","medbay") + }, +/obj/item/book/manual/wiki/chemistry{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/book/manual/wiki/grenades, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "rXX" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, @@ -51155,6 +51052,32 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"saD" = ( +/obj/machinery/light_switch/directional/north, +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/mug{ + pixel_x = 13; + pixel_y = 7 + }, +/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 = -1 + }, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -2; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/glass/ice{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) "saN" = ( /obj/structure/bookcase/random/religion, /turf/open/floor/wood, @@ -51169,16 +51092,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"sbo" = ( -/obj/machinery/requests_console/directional/south{ - department = "Mining"; - name = "Mining Requests Console" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "sbp" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 8 @@ -51204,12 +51117,19 @@ /mob/living/basic/parrot/poly, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"sbD" = ( -/obj/structure/sign/directions/medical{ - pixel_y = -7 +"sbF" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" }, -/turf/closed/wall, -/area/station/medical/pharmacy) +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/disposalpipe/segment, +/obj/structure/sign/warning/directional/west, +/turf/open/floor/plating, +/area/station/cargo/sorting) "sbG" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, @@ -51233,6 +51153,12 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"sbX" = ( +/obj/machinery/hydroponics/soil, +/obj/effect/decal/cleanable/dirt, +/obj/item/plant_analyzer, +/turf/open/floor/grass, +/area/station/security/prison/garden) "sch" = ( /turf/closed/wall, /area/station/security/medical) @@ -51309,26 +51235,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/white, /area/station/science/research) -"sdt" = ( -/obj/item/reagent_containers/spray/plantbgone, -/obj/item/reagent_containers/spray/pestspray{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/bottle/nutrient/ez, -/obj/item/reagent_containers/cup/bottle/nutrient/rh{ - pixel_x = 2; - pixel_y = 1 - }, -/obj/structure/table, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/stripes/line, -/obj/effect/spawner/random/food_or_drink/seed{ - spawn_all_loot = 1; - spawn_random_offset = 1 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) "sdu" = ( /obj/structure/cable, /turf/open/floor/carpet, @@ -51372,30 +51278,10 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"seE" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall/r_wall, -/area/station/science/research) -"seJ" = ( -/obj/machinery/light/directional/south, -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/cargo/lobby) "seN" = ( /obj/structure/sign/directions/evac, /turf/closed/wall/r_wall, /area/station/hallway/primary/aft) -"seO" = ( -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/sorting) "sfg" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -51444,28 +51330,15 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/security/evidence) -"sfW" = ( -/obj/machinery/conveyor/inverted{ - dir = 6; - id = "QMLoad" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/cargo/storage) -"sga" = ( -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"sgc" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 6 }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "sgh" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 5 @@ -51494,29 +51367,6 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/science/research) -"sgU" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Quartermaster"; - name = "Quartermaster's Fax Machine" - }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/machinery/requests_console/directional/north{ - department = "Quartermaster's Desk"; - name = "Quartermaster's Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/ore_update, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "sgX" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -51529,6 +51379,12 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"sgZ" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/cargo/sorting) "shl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -51538,21 +51394,6 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/port) -"shp" = ( -/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 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "shq" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/shower/directional/south, @@ -51589,6 +51430,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"sik" = ( +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/end{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "sip" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -51688,18 +51538,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"skj" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/storage/medkit/regular, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/machinery/light/cold/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "skx" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -51714,14 +51552,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/science/lab) -"skD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron, -/area/station/cargo/storage) "skW" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -51738,32 +51568,20 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) -"sln" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/kitchen) "sls" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/light/floor, /turf/open/floor/iron/white, /area/station/science/xenobiology/hallway) +"sly" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "slC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -51783,6 +51601,12 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/white, /area/station/security/prison/safe) +"slZ" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "smg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, /obj/effect/mapping_helpers/airlock/locked, @@ -51800,15 +51624,17 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"smy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +"smB" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/railing{ + dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/autolathe, +/turf/open/floor/iron, +/area/station/cargo/storage) "smG" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51827,10 +51653,22 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"snj" = ( -/obj/machinery/igniter/incinerator_ordmix, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) +"snu" = ( +/obj/structure/table/wood, +/obj/machinery/door/window/right/directional/south{ + name = "Captain's Desk"; + req_access = list("captain") + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "snB" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -51847,6 +51685,23 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/testlab) +"snZ" = ( +/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 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) +"soa" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) "soi" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -51858,17 +51713,6 @@ /obj/item/storage/box, /turf/open/floor/plating, /area/station/maintenance/port) -"sol" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ - dir = 4 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/obj/structure/sign/poster/official/moth_piping/directional/north, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "sou" = ( /obj/effect/turf_decal/delivery, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -51912,25 +51756,18 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"spe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, +"spf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/ai_monitored/command/nuke_storage) "sph" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/color_adapter, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"spy" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "spH" = ( /obj/item/radio/intercom/directional/south, /obj/structure/disposalpipe/segment{ @@ -51941,15 +51778,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"spP" = ( -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "sqt" = ( /obj/machinery/disposal/delivery_chute{ dir = 1; @@ -51990,13 +51818,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"sqN" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "src" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, @@ -52012,14 +51833,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) -"srr" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "srP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52065,6 +51878,30 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/grimy, /area/station/security/office) +"ssu" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/spray/syndicate{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/reagent_containers/pill/maintenance{ + pixel_x = -4; + pixel_y = -1 + }, +/obj/item/reagent_containers/pill/maintenance{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/reagent_containers/pill/maintenance{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/reagent_containers/pill/happy{ + pixel_y = 6; + pixel_x = -4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "ssI" = ( /obj/machinery/power/emitter, /turf/open/floor/plating, @@ -52080,13 +51917,6 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"stq" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "stC" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, @@ -52106,6 +51936,13 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"stI" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/table, +/obj/item/binoculars, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "stL" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52132,23 +51969,23 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"sus" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "suD" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) -"suK" = ( -/obj/structure/table/wood, -/obj/item/lipstick{ - pixel_y = 5 - }, -/obj/effect/spawner/random/entertainment/musical_instrument, -/obj/structure/sign/poster/random/directional/east, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/station/service/theater) "suP" = ( /obj/structure/lattice, /obj/machinery/atmospherics/components/unary/passive_vent/layer2{ @@ -52208,6 +52045,18 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) +"svK" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ + dir = 6 + }, +/obj/structure/sign/warning/fire/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "svQ" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/unres{ @@ -52295,6 +52144,11 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/side, /area/station/science/lobby) +"sxk" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/cargo/sorting) "sxn" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, @@ -52303,12 +52157,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"sxt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/science/cytology) "sxA" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/cable, @@ -52322,27 +52170,23 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/science/lab) -"sxN" = ( -/obj/structure/railing{ - dir = 10 - }, -/obj/machinery/light/directional/north, -/obj/structure/statue/gold/qm, -/obj/machinery/status_display/supply{ - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/brown/diagonal_centre, -/obj/effect/turf_decal/tile/yellow/diagonal_edge, -/obj/effect/turf_decal/siding/yellow{ - dir = 10 - }, -/turf/open/floor/iron/diagonal, -/area/station/cargo/storage) "sxR" = ( /obj/structure/table/wood, /obj/machinery/computer/security/wooden_tv, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"sxX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/table/wood, +/obj/item/stack/sheet/cloth/ten, +/obj/item/toy/crayon/spraycan, +/obj/item/stack/rods/ten, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood/large, +/area/station/service/theater) "syc" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -52449,17 +52293,6 @@ "szp" = ( /turf/closed/wall, /area/station/commons/fitness/recreation) -"szD" = ( -/obj/machinery/computer/security/mining, -/obj/machinery/keycard_auth/wall_mounted/directional/north, -/obj/item/radio/intercom/directional/north{ - pixel_y = 34 - }, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "szJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/janitor, @@ -52473,6 +52306,13 @@ /obj/machinery/telecomms/server/presets/engineering, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) +"sAt" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "sAv" = ( /obj/machinery/stasis, /obj/machinery/defibrillator_mount/directional/north, @@ -52519,31 +52359,6 @@ /obj/item/stack/cable_coil, /turf/open/space/basic, /area/space/nearstation) -"sBq" = ( -/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, -/obj/structure/railing{ - dir = 9 - }, -/obj/machinery/disposal/bin/tagger, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) -"sBz" = ( -/obj/structure/table, -/obj/structure/cable, -/obj/item/controller, -/obj/item/compact_remote, -/obj/item/compact_remote, -/turf/open/floor/iron/white, -/area/station/science/explab) "sBL" = ( /obj/structure/chair/stool/directional/west, /obj/effect/mapping_helpers/broken_floor, @@ -52573,6 +52388,36 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"sCc" = ( +/obj/structure/table, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = 10 + }, +/obj/item/pen/blue{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/pen/fountain{ + pixel_x = 10 + }, +/obj/item/pen/red{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/stamp/denied{ + pixel_y = -1 + }, +/obj/item/stamp{ + pixel_x = -9; + pixel_y = -1 + }, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "sCh" = ( /obj/structure/table/glass, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52601,27 +52446,18 @@ /obj/structure/sign/warning/radiation, /turf/closed/wall/r_wall, /area/station/engineering/atmospherics_engine) -"sCt" = ( -/obj/machinery/light/directional/west, -/obj/structure/table, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_x = 8 +"sCs" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "QMLoad2"; + name = "Unloading Conveyor"; + pixel_x = -13; + pixel_y = -4 }, -/obj/item/grenade/chem_grenade/smart_metal_foam{ - pixel_y = 4 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) +/turf/open/floor/iron, +/area/station/cargo/storage) "sCv" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -52686,18 +52522,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"sDB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/airlock_controller/incinerator_atmos{ - pixel_x = 40; - pixel_y = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "sDC" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52782,22 +52606,6 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/wood, /area/station/service/library) -"sDY" = ( -/obj/structure/table/wood, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/item/poster/random_official, -/obj/structure/cable, -/obj/machinery/button/door/directional/east{ - id = "corporate_privacy"; - name = "corporate showroom shutters control"; - req_access = list("command") - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "sEk" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/structure/cable, @@ -52854,34 +52662,39 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"sEO" = ( -/obj/machinery/mass_driver/chapelgun, -/obj/structure/sign/warning/vacuum/external/directional/north, -/obj/machinery/light/small/directional/north, -/obj/item/gps, -/obj/effect/turf_decal/stripes/line{ +"sEM" = ( +/obj/machinery/airalarm/directional/east, +/obj/item/food/poppypretzel{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/food/hotcrossbun{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/effect/turf_decal/trimline/green/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table/wood, +/obj/structure/window/spawner/directional/south, /turf/open/floor/iron/dark, -/area/station/service/chapel/funeral) +/area/station/service/cafeteria) "sEZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"sFe" = ( -/obj/structure/cable, -/turf/open/floor/carpet/orange, -/area/station/command/heads_quarters/qm) -"sFk" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 +"sFi" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/fake_stairs/directional/south, +/obj/structure/railing{ + dir = 8 }, -/obj/machinery/airalarm/directional/east, /turf/open/floor/iron, -/area/station/security/prison/garden) +/area/station/cargo/storage) "sFo" = ( /obj/machinery/button/crematorium{ id = "crematoriumChapel"; @@ -52932,11 +52745,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"sGs" = ( -/obj/machinery/light/directional/east, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "sGw" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5{ dir = 9 @@ -52978,14 +52786,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"sGV" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/command/bridge) -"sGX" = ( -/obj/machinery/barsign, -/turf/closed/wall, -/area/station/commons/lounge) "sHg" = ( /obj/item/radio/intercom/directional/south, /obj/machinery/camera/directional/south{ @@ -53015,6 +52815,12 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/engineering/main) +"sHX" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/decal/cleanable/oil/slippery, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "sIe" = ( /turf/closed/wall/r_wall, /area/station/security/execution/transfer) @@ -53058,6 +52864,11 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"sJq" = ( +/obj/machinery/exoscanner, +/obj/effect/turf_decal/delivery/white, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "sJL" = ( /obj/item/crowbar, /obj/structure/cable, @@ -53068,15 +52879,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/engineering/supermatter) -"sKj" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/wrench, -/obj/machinery/light_switch/directional/south, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/server) "sKs" = ( /obj/structure/closet/bombcloset/security, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -53116,6 +52918,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/bridge) +"sLf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/maintenance{ + name = "Storage Room" + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "sLp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -53134,15 +52948,22 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/hallway/primary/central) -"sLJ" = ( -/obj/effect/turf_decal/siding/white{ - dir = 6 +"sLF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/structure/railing{ +/obj/machinery/camera/directional/south{ + c_tag = "Science Research"; + network = list("ss13","rd") + }, +/obj/machinery/light/small/directional/south, +/obj/structure/noticeboard/rd{ + pixel_y = -32 + }, +/turf/open/floor/iron/dark/side{ dir = 4 }, -/turf/open/water, -/area/station/service/hydroponics/garden) +/area/station/science/lab) "sLN" = ( /obj/effect/landmark/start/ai/secondary, /obj/item/radio/intercom/directional/north{ @@ -53200,6 +53021,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"sMo" = ( +/obj/structure/sign/poster/official/cleanliness/directional/west, +/obj/structure/sink/directional/south, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/mirror/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/virology) "sMB" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ id = "Cell 1"; @@ -53294,13 +53124,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) -"sOe" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "sOi" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -53319,6 +53142,19 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"sOE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "sOF" = ( /obj/structure/light_construct/directional/east, /turf/open/floor/wood, @@ -53358,13 +53194,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/brig) -"sPh" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/structure/sign/poster/official/safety_eye_protection/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "sPj" = ( /obj/machinery/door/airlock/command{ name = "Head of Security's Office" @@ -53381,6 +53210,15 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) +"sPq" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "sPy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -53401,6 +53239,15 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/white, /area/station/science/explab) +"sPO" = ( +/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/plating, +/area/station/maintenance/port/fore) "sPV" = ( /obj/structure/closet/secure_closet/captains, /obj/structure/window/reinforced/spawner/directional/north, @@ -53411,17 +53258,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) -"sQh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/ai_monitored/command/storage/eva) -"sQp" = ( -/obj/machinery/exodrone_launcher, -/obj/item/exodrone, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "sQq" = ( /obj/structure/closet/crate/hydroponics, /obj/item/paper/guides/jobs/hydroponics, @@ -53674,6 +53510,13 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"sTU" = ( +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "sTW" = ( /obj/effect/turf_decal/tile/yellow, /obj/structure/disposalpipe/segment{ @@ -53690,6 +53533,19 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"sUc" = ( +/obj/machinery/conveyor/inverted{ + dir = 6; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "sUo" = ( /turf/open/floor/engine/air, /area/station/engineering/atmos) @@ -53701,6 +53557,23 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central) +"sUy" = ( +/obj/structure/table/wood, +/obj/structure/sign/picture_frame/showroom/one{ + pixel_x = -8; + pixel_y = 32 + }, +/obj/structure/sign/picture_frame/showroom/two{ + pixel_x = 8; + pixel_y = 32 + }, +/obj/item/phone{ + desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/command/corporate_showroom) "sUC" = ( /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -53715,6 +53588,12 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"sUD" = ( +/obj/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) "sUJ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance/two, @@ -53828,20 +53707,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"sWq" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/east{ - name = "Hydroponics Desk"; - req_access = list("hydroponics") - }, -/obj/structure/desk_bell{ - pixel_x = 6; - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/green/fourcorners, -/turf/open/floor/iron, -/area/station/service/hydroponics) "sWs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -53881,6 +53746,11 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"sWU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "sWV" = ( /turf/closed/wall/r_wall, /area/station/security/detectives_office) @@ -53953,15 +53823,20 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"sYh" = ( +/obj/structure/sign/plaques/kiddie/perfect_drone{ + pixel_y = 32 + }, +/obj/structure/table/wood, +/obj/item/storage/backpack/duffelbag/drone, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "sYp" = ( /obj/machinery/vending/boozeomat, /obj/machinery/light/small/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"sYw" = ( -/obj/structure/sign/warning/electric_shock/directional/north, -/turf/open/space/basic, -/area/space/nearstation) "sZa" = ( /obj/machinery/light_switch/directional/north, /obj/effect/turf_decal/siding/wood, @@ -53997,20 +53872,6 @@ /obj/item/hfr_box/core, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"sZJ" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 3; - pixel_y = -2 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "sZK" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/beaker{ @@ -54022,13 +53883,6 @@ /obj/item/reagent_containers/cup/glass/shaker, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"sZL" = ( -/obj/item/toy/beach_ball/branded{ - pixel_y = 7 - }, -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "sZN" = ( /obj/machinery/atmospherics/components/binary/pump, /obj/effect/turf_decal/delivery, @@ -54157,10 +54011,42 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"tcr" = ( +/obj/structure/table/wood, +/obj/item/storage/box/coffeepack{ + pixel_x = 15; + pixel_y = 10 + }, +/obj/item/reagent_containers/cup/glass/bottle/juice/cream{ + pixel_x = 15; + pixel_y = 2 + }, +/obj/machinery/coffeemaker/impressa, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) "tcu" = ( /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/security/courtroom) +"tcx" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/item/aicard, +/obj/item/pai_card, +/obj/item/circuitboard/aicore, +/obj/machinery/keycard_auth/wall_mounted/directional/north{ + pixel_x = -5 + }, +/obj/machinery/button/door/directional/north{ + id = "xeno_blastdoor"; + name = "Xenobiology Containment Control"; + pixel_x = 8; + req_access = list("rd") + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/rd) "tcC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -54188,18 +54074,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison) -"tcY" = ( -/obj/effect/landmark/start/quartermaster, -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/diagonal_centre, -/obj/effect/turf_decal/tile/yellow/diagonal_edge, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/yellow{ - dir = 8 - }, -/turf/open/floor/iron/diagonal, -/area/station/cargo/storage) "tdf" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -54208,10 +54082,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"tdg" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "tds" = ( /obj/effect/turf_decal/box/corners{ dir = 8 @@ -54226,23 +54096,6 @@ "tdW" = ( /turf/closed/wall/r_wall, /area/station/security/execution/education) -"ted" = ( -/obj/item/radio/intercom/directional/west, -/obj/structure/table/glass, -/obj/machinery/camera/directional/west{ - c_tag = "Medbay Pharmacy"; - network = list("ss13","medbay") - }, -/obj/item/book/manual/wiki/chemistry{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/book/manual/wiki/grenades, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "tep" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -54252,6 +54105,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"teq" = ( +/obj/item/cultivator, +/obj/item/crowbar, +/obj/item/plant_analyzer, +/obj/item/reagent_containers/cup/watering_can, +/obj/structure/table/glass, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "tew" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -54341,19 +54205,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"tgz" = ( -/obj/item/dice/d20, -/obj/item/dice, -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/dice, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/light_construct/small/directional/south, -/obj/structure/sign/poster/contraband/random/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "tgC" = ( /obj/structure/noticeboard/directional/south, /obj/structure/table/wood, @@ -54375,41 +54226,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"tgE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) -"tgG" = ( -/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) -"tgH" = ( -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/trimline/red/filled/warning/corner, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "tgI" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -54480,6 +54296,19 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"tik" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/rnd/production/techfab/department/cargo, +/turf/open/floor/iron, +/area/station/cargo/storage) +"tit" = ( +/obj/structure/sink/directional/east, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "tiA" = ( /obj/machinery/door/airlock{ id_tag = "Cabin2"; @@ -54493,16 +54322,20 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/hallway/primary/port) -"tiV" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 4 +"tjc" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = 4; + pixel_y = 5 }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -8; + pixel_y = 9 }, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/cell_charger, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/science/robotics/lab) "tjf" = ( /obj/machinery/hydroponics/soil{ pixel_y = 8 @@ -54527,6 +54360,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"tjt" = ( +/obj/item/sticker/syndicate/apc{ + pixel_x = 25 + }, +/obj/effect/spawner/random/engineering/tank, +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/fuel_pool, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "tju" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -54544,20 +54390,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"tjz" = ( -/obj/structure/table/reinforced, -/obj/item/stock_parts/power_store/cell/high{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/stock_parts/power_store/cell/high{ - pixel_x = -8; - pixel_y = 9 - }, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/cell_charger, -/turf/open/floor/iron, -/area/station/science/robotics/lab) "tjE" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random/structure/closet_maintenance, @@ -54579,18 +54411,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"tjR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/mirror/directional/west, -/turf/open/floor/wood, -/area/station/service/theater) -"tjV" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/airalarm/directional/east, -/obj/item/stock_parts/power_store/cell/high, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "tkf" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/machinery/conveyor{ @@ -54692,74 +54512,15 @@ /obj/machinery/atmospherics/components/binary/pump{ dir = 4 }, +/obj/item/kirbyplants/random, /turf/open/floor/iron/white, /area/station/science/cytology) -"tmn" = ( -/obj/structure/sign/poster/random/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/effect/spawner/random/food_or_drink/donkpockets{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "tmq" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 1 }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"tms" = ( -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = 3; - pixel_y = -23 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/door/window/brigdoor/left/directional/west{ - name = "Primary AI Core Access"; - req_access = list("ai_upload") - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai) -"tmx" = ( -/obj/structure/table/wood, -/obj/machinery/firealarm/directional/south, -/obj/item/storage/photo_album/bar, -/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, -/area/station/service/bar/backroom) -"tmy" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; - pixel_x = -8; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = 9; - pixel_y = 3 - }, -/obj/item/book/manual/chef_recipes, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "tmz" = ( /obj/machinery/door/poddoor/shutters{ dir = 1; @@ -54833,6 +54594,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"tnk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate_abandoned, +/obj/effect/turf_decal/bot_white, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "tnm" = ( /obj/structure/chair{ dir = 1 @@ -54848,6 +54615,12 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"tnF" = ( +/obj/machinery/light/small/dim/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/random/directional/west, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "tnG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/showcase/machinery/oldpod{ @@ -54876,32 +54649,6 @@ }, /turf/open/floor/wood, /area/station/service/library) -"tou" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/poster/random/directional/south, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) -"toH" = ( -/obj/structure/table, -/obj/item/surgical_drapes, -/obj/item/cautery, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/iron/white, -/area/station/science/robotics/lab) "toK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, @@ -54949,6 +54696,15 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"tpA" = ( +/obj/machinery/cell_charger{ + pixel_y = 4 + }, +/obj/structure/table/glass, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "tpD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -54964,37 +54720,6 @@ /obj/machinery/griddle, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"tpY" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 8; - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/cup/bottle/epinephrine{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = 7; - pixel_y = 12 - }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/obj/machinery/light/small/directional/south, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) -"tqb" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "tqd" = ( /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/white, @@ -55024,6 +54749,12 @@ /obj/effect/spawner/random/clothing/costume, /turf/open/floor/plating, /area/station/maintenance/port) +"tqo" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/iron, +/area/station/cargo/storage) "tqx" = ( /obj/machinery/door/window/left/directional/north{ name = "Mass Driver Control Door"; @@ -55063,13 +54794,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) -"tro" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "trx" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/light/directional/north, @@ -55100,6 +54824,12 @@ "tsd" = ( /turf/closed/wall, /area/station/maintenance/space_hut) +"tsi" = ( +/obj/structure/sign/warning/vacuum/external/directional/east, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "tst" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55195,17 +54925,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"ttT" = ( -/obj/structure/table/wood, -/obj/item/book/manual/wiki/security_space_law, -/obj/machinery/light/small/directional/west, -/obj/item/paper/fluff/gateway, -/obj/item/coin/plasma, -/obj/item/melee/chainofcommand, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "ttW" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, @@ -55301,24 +55020,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/space, /area/space/nearstation) -"twg" = ( -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "QMLoad"; - name = "Loading Conveyor"; - pixel_x = -13; - pixel_y = -5 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "twj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port) +"twl" = ( +/obj/structure/table, +/obj/item/hand_tele, +/obj/machinery/airalarm/directional/west, +/obj/effect/spawner/random/engineering/tracking_beacon, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/teleporter) "twr" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, @@ -55487,6 +55201,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"tzI" = ( +/obj/structure/table/reinforced, +/obj/item/emergency_bed, +/obj/item/emergency_bed{ + pixel_y = 3 + }, +/obj/item/emergency_bed{ + pixel_y = 6 + }, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/station/medical/office) "tzJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55624,6 +55350,21 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) +"tCC" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/security/prison/garden) +"tCF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "tCG" = ( /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, @@ -55643,10 +55384,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"tCN" = ( -/obj/structure/cable, -/turf/closed/wall, -/area/station/command/heads_quarters/qm) "tCS" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/fore) @@ -55736,23 +55473,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"tEA" = ( -/obj/machinery/airalarm/directional/east, -/obj/item/food/poppypretzel{ - pixel_x = -5; - pixel_y = -2 - }, -/obj/item/food/hotcrossbun{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/effect/turf_decal/trimline/green/line{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/cafeteria) "tEP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -55766,22 +55486,10 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"tFm" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "tFr" = ( /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"tFv" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/shaker, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain/private) "tGI" = ( /obj/machinery/light_switch/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -55799,10 +55507,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"tGQ" = ( -/obj/structure/sign/warning/secure_area, -/turf/closed/wall/r_wall, -/area/station/command/corporate_showroom) "tGS" = ( /obj/structure/cable, /obj/machinery/door/window/left/directional/south{ @@ -55811,6 +55515,21 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"tGU" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "tGX" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -55827,15 +55546,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) -"tHH" = ( -/obj/machinery/light/small/dim/directional/north, -/obj/structure/rack, -/obj/item/pushbroom, -/obj/effect/decal/cleanable/dirt, -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "tHR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55877,6 +55587,14 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"tId" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/camera/directional/east{ + c_tag = "Science Maintenance Corridor"; + network = list("ss13","rd") + }, +/turf/open/floor/iron/white, +/area/station/science/research) "tIe" = ( /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white, @@ -55930,6 +55648,29 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron, /area/station/science/xenobiology) +"tIR" = ( +/obj/structure/table/wood, +/obj/item/storage/photo_album{ + pixel_y = -4 + }, +/obj/item/camera{ + pixel_y = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain/private) +"tIU" = ( +/obj/machinery/door/airlock/maintenance/glass, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/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/abandoned, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "tJb" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -55952,6 +55693,17 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) +"tJB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "tJE" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/iron/dark, @@ -55987,14 +55739,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"tJQ" = ( -/obj/machinery/computer/cargo{ - dir = 4 - }, -/obj/structure/window/spawner/directional/west, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/sorting) "tKa" = ( /obj/machinery/newscaster/directional/west, /obj/structure/cable, @@ -56037,6 +55781,40 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/primary/central) +"tKR" = ( +/obj/structure/table/glass, +/obj/machinery/fax{ + fax_name = "Research Division"; + name = "Research Division Fax Machine"; + pixel_x = 1 + }, +/turf/open/floor/iron/white, +/area/station/science/research) +"tLb" = ( +/obj/structure/sign/warning/electric_shock/directional/south, +/turf/open/space/basic, +/area/space/nearstation) +"tLc" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "xeno_airlock_exterior"; + idInterior = "xeno_airlock_interior"; + idSelf = "xeno_airlock_control"; + name = "Access Console"; + pixel_x = -25; + pixel_y = -25; + req_access = list("xenobiology") + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/science/cytology) "tLd" = ( /obj/structure/chair/office{ dir = 8 @@ -56046,6 +55824,20 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"tLg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/incinerator_vent_atmos_aux{ + pixel_x = -8; + pixel_y = -24 + }, +/obj/machinery/button/door/incinerator_vent_atmos_main{ + pixel_x = -8; + pixel_y = -36 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "tLi" = ( /obj/effect/landmark/start/captain, /obj/structure/chair/comfy/brown{ @@ -56071,6 +55863,24 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"tLH" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/item/disk/tech_disk{ + pixel_x = -6 + }, +/obj/item/disk/tech_disk{ + pixel_x = 6 + }, +/obj/item/disk/tech_disk{ + pixel_y = 6 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/science/lab) "tLN" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -56091,6 +55901,11 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/plating, /area/station/maintenance/fore) +"tMn" = ( +/obj/structure/cable, +/obj/structure/railing/corner/end, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "tMA" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=10-Aft-To-Central"; @@ -56135,12 +55950,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"tMX" = ( -/obj/effect/turf_decal/trimline/brown/filled/shrink_cw{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) +"tMS" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "tNg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56165,12 +55981,22 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/engine, /area/station/science/xenobiology) -"tND" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/circuit/green{ - luminosity = 2 +"tNC" = ( +/obj/structure/table/wood, +/obj/structure/sign/picture_frame/showroom/three{ + pixel_x = -8; + pixel_y = 32 }, -/area/station/ai_monitored/command/nuke_storage) +/obj/structure/sign/picture_frame/showroom/four{ + pixel_x = 8; + pixel_y = 32 + }, +/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" + }, +/turf/open/floor/wood, +/area/station/command/corporate_showroom) "tNH" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -56314,6 +56140,19 @@ /obj/machinery/digital_clock/directional/south, /turf/open/floor/wood, /area/station/service/library) +"tPt" = ( +/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/mining{ + name = "Mining Office" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "tPw" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -56349,11 +56188,32 @@ /obj/item/clothing/mask/surgical, /turf/open/floor/iron/showroomfloor, /area/station/maintenance/starboard/lesser) -"tQo" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/mob/living/basic/sloth/citrus, -/turf/open/floor/iron, -/area/station/cargo/storage) +"tQp" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/machinery/button/door/directional/west{ + id = "qmroom"; + name = "Privacy Blast Doors Control"; + pixel_y = -7 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/light_switch/directional/west{ + pixel_x = -22; + pixel_y = 5 + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "tQC" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom, /obj/effect/turf_decal/delivery, @@ -56410,18 +56270,6 @@ "tSw" = ( /turf/closed/wall, /area/station/maintenance/aft/greater) -"tSy" = ( -/obj/machinery/vending/autodrobe, -/obj/structure/sign/poster/contraband/clown/directional/east, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/wood, -/area/station/service/theater) -"tSD" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/siding/thinplating_new, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron, -/area/station/cargo/storage) "tSP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56439,13 +56287,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"tTd" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "tTB" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2, /obj/structure/window/reinforced/spawner/directional/south, @@ -56493,19 +56334,21 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/commons/locker) -"tTZ" = ( -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +"tUc" = ( +/obj/item/radio/intercom/directional/east, /obj/structure/table, -/obj/machinery/reagentgrinder{ - pixel_x = 2; - pixel_y = 9 +/obj/effect/turf_decal/bot, +/obj/item/computer_disk{ + pixel_x = 7; + pixel_y = 2 }, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = 3 +/obj/item/computer_disk{ + pixel_x = -5; + pixel_y = 8 }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "tUl" = ( /obj/structure/table, /obj/item/stock_parts/micro_laser, @@ -56524,6 +56367,17 @@ "tUn" = ( /turf/closed/wall, /area/station/maintenance/starboard/lesser) +"tUt" = ( +/obj/structure/table/glass, +/obj/item/clothing/accessory/armband/hydro, +/obj/item/clothing/suit/apron, +/obj/item/wrench, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "tUu" = ( /obj/structure/disposalpipe/junction{ dir = 4 @@ -56583,6 +56437,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/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{ @@ -56687,6 +56552,16 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"tWU" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/departments/vault/directional/north{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "tWV" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -56727,6 +56602,15 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"tXO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "tXU" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable, @@ -56859,16 +56743,6 @@ /obj/item/canvas/twentythree_twentythree, /turf/open/floor/iron, /area/station/commons/storage/tools) -"tZV" = ( -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/south, -/mob/living/basic/chicken{ - name = "Kentucky"; - real_name = "Kentucky" - }, -/obj/structure/flora/grass/jungle/b/style_random, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "tZX" = ( /obj/structure/window/spawner/directional/west, /obj/machinery/light/floor, @@ -56901,21 +56775,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/wood/parquet, /area/station/medical/psychology) -"uak" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/item/folder/yellow{ - pixel_y = 4 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Bridge - Central" - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "uam" = ( /obj/effect/turf_decal/plaque{ icon_state = "L6" @@ -56957,6 +56816,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"uaN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/ai_monitored/command/storage/eva) "uaR" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, @@ -56996,15 +56861,20 @@ /obj/structure/sign/directions/evac, /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/eva) +"ubj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters{ + name = "Warehouse Shutters"; + id = "warehouse" + }, +/turf/open/floor/catwalk_floor, +/area/station/cargo/warehouse) "ubl" = ( /obj/machinery/telecomms/broadcaster/preset_left, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) -"ubn" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/effect/turf_decal/trimline/brown/filled/warning, -/turf/open/floor/iron, -/area/station/cargo/sorting) "ubp" = ( /obj/structure/girder, /obj/effect/spawner/random/structure/grille, @@ -57043,6 +56913,27 @@ }, /turf/open/floor/iron, /area/station/commons/storage/tools) +"ubF" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 7; + pixel_y = 12 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/light/small/directional/south, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "ubQ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -57141,6 +57032,13 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) +"udU" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/construction/storage_wing) "ued" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -57206,33 +57104,6 @@ /obj/effect/mapping_helpers/requests_console/assistance, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"ueI" = ( -/obj/machinery/light_switch/directional/west{ - pixel_x = -20 - }, -/obj/machinery/computer/records/medical{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/machinery/light/small/directional/west, -/obj/machinery/computer/security/telescreen/med_sec/directional/west, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/medical) -"ueS" = ( -/obj/structure/cable, -/obj/machinery/power/smes, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) -"ufm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/machinery/door/airlock/maintenance{ - name = "Quartermaster Maintenance" - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "uga" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -57273,25 +57144,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"ugZ" = ( -/obj/structure/lattice/catwalk, -/obj/structure/closet/crate, -/obj/item/toy/plush/lizard_plushie/green{ - name = "Loads-The-Crates" - }, -/turf/open/space/basic, -/area/space/nearstation) -"uhd" = ( -/obj/effect/turf_decal/siding/purple{ - dir = 6 - }, -/obj/structure/table, -/obj/item/clipboard, -/obj/item/holosign_creator/atmos, -/obj/item/holosign_creator/atmos, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/white, -/area/station/science/ordnance/office) "uhq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -57429,25 +57281,6 @@ /obj/structure/mirror/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"ujN" = ( -/obj/structure/cable, -/obj/effect/turf_decal/bot_white, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/storage) -"ujS" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/disposal) -"ujT" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/spawner/random/structure/tank_holder, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "uke" = ( /obj/structure/rack, /obj/effect/spawner/random/food_or_drink/booze{ @@ -57461,6 +57294,20 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"ukm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/obj/machinery/light/small/directional/east, +/obj/structure/bed, +/obj/item/bedsheet/qm, +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "ukq" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1 @@ -57494,45 +57341,6 @@ }, /turf/open/floor/iron, /area/station/service/bar) -"ukP" = ( -/obj/item/disk/data{ - pixel_x = 9; - pixel_y = -1 - }, -/obj/item/disk/tech_disk{ - pixel_x = -2; - pixel_y = -3 - }, -/obj/item/disk/design_disk{ - name = "component design disk"; - pixel_y = 6 - }, -/obj/structure/table/wood, -/obj/item/toy/talking/ai{ - name = "\improper Nanotrasen-brand toy AI"; - pixel_y = 6 - }, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) -"ulk" = ( -/obj/machinery/computer/records/security{ - dir = 4 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/west, -/obj/machinery/requests_console/directional/north{ - department = "Head of Security's Desk"; - name = "Head of Security Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/button/door/directional/north{ - id = "hosspace"; - name = "Space Shutters Control"; - pixel_x = -24 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hos) "ulv" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ @@ -57561,25 +57369,30 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"umw" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable, +"umS" = ( +/obj/item/radio/intercom/directional/west, +/obj/machinery/computer/records/security{ + dir = 4 + }, +/obj/machinery/button/door/directional/west{ + id = "MedbayFoyer"; + name = "Medbay Doors Control"; + normaldoorcontrol = 1; + pixel_y = -9 + }, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/medical) +"unc" = ( +/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, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/brown{ dir = 1 }, /turf/open/floor/iron, -/area/station/hallway/primary/port) -"unb" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/maintenance/disposal) +/area/station/cargo/miningoffice) "unk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -57608,6 +57421,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"unK" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/telescreen/prison/directional/north, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/restraints/handcuffs, +/turf/open/floor/carpet, +/area/station/security/detectives_office) "unL" = ( /turf/closed/wall, /area/station/maintenance/starboard/greater) @@ -57692,11 +57515,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/brig) -"uoS" = ( -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/station/commons/lounge) "upe" = ( /obj/machinery/camera/directional/east{ c_tag = "Interrogation room"; @@ -57705,6 +57523,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"upM" = ( +/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/machinery/power/apc/auto_name/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) +"upN" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "upR" = ( /obj/structure/table, /obj/machinery/recharger{ @@ -57766,6 +57601,19 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/chemistry) +"uqO" = ( +/obj/structure/table, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/item/multitool/circuit{ + pixel_x = 7 + }, +/obj/item/multitool/circuit, +/obj/item/multitool/circuit{ + pixel_x = -8 + }, +/turf/open/floor/iron/white, +/area/station/science/explab) "uqX" = ( /obj/structure/cable, /obj/item/kirbyplants/random, @@ -57818,16 +57666,6 @@ /obj/structure/chair/stool/directional/east, /turf/open/floor/iron, /area/station/commons/dorms) -"urO" = ( -/obj/structure/table/glass, -/obj/item/folder/blue, -/obj/item/clothing/neck/stethoscope, -/obj/item/clothing/glasses/hud/health, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "urQ" = ( /obj/structure/lattice/catwalk, /obj/item/stack/cable_coil, @@ -57847,6 +57685,14 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) +"usg" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/table/reinforced, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/item/clothing/head/utility/welding, +/turf/open/floor/iron, +/area/station/science/robotics/mechbay) "ush" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57882,28 +57728,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/engineering/atmos) -"usr" = ( -/obj/item/book/manual/wiki/chemistry{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/book/manual/wiki/grenades, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/book/manual/wiki/plumbing{ - pixel_x = 4; - pixel_y = -4 - }, -/obj/item/reagent_containers/dropper, -/obj/structure/table, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/obj/structure/sign/poster/official/periodic_table/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "usA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57950,11 +57774,14 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"usV" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 +"usQ" = ( +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 }, /turf/open/floor/iron/dark, /area/station/command/bridge) @@ -57998,26 +57825,23 @@ }, /turf/open/floor/wood, /area/station/service/library) -"utz" = ( -/obj/structure/cable, -/obj/effect/landmark/start/cargo_technician, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/storage) "utD" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"utG" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/departments/vault/directional/north{ - pixel_x = 32 +"utE" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Theater - Stage" }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/item/radio/intercom/directional/east, +/obj/structure/table/wood, +/obj/item/clothing/glasses/monocle, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/wood/large, +/area/station/service/theater) "utM" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=13.3-Engineering-Central"; @@ -58061,6 +57885,18 @@ }, /turf/open/floor/iron, /area/station/security/mechbay) +"uuW" = ( +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Cargo Office"; + name = "Cargo Office Fax Machine" + }, +/obj/item/papercutter{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "uvw" = ( /obj/machinery/status_display/supply{ pixel_y = 32 @@ -58124,12 +57960,6 @@ /obj/item/clothing/head/fedora, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"uwx" = ( -/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/construction/storage_wing) "uwy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -58191,12 +58021,36 @@ "uxS" = ( /turf/open/floor/wood, /area/station/maintenance/port/aft) +"uya" = ( +/obj/machinery/disposal/delivery_chute, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/sorting) "uyd" = ( /obj/structure/sign/warning/pods/directional/east, /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) +"uyf" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/iron, +/area/station/cargo/storage) +"uyh" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/sorting) "uyi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58224,6 +58078,35 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"uyP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/table, +/obj/machinery/light/directional/east, +/obj/item/radio/intercom/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/item/stamp/granted{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/stamp/denied{ + pixel_x = -7; + pixel_y = 15 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = 5; + pixel_y = 12 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = 5; + pixel_y = 24 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "uyY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58233,13 +58116,6 @@ "uza" = ( /turf/closed/wall/r_wall, /area/station/security/prison/visit) -"uzb" = ( -/obj/structure/rack, -/obj/machinery/light/directional/east, -/obj/item/fuel_pellet, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "uzc" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -58265,6 +58141,15 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"uzl" = ( +/obj/machinery/camera/directional/west{ + active_power_usage = 0; + c_tag = "Turbine Vent"; + network = list("turbine"); + use_power = 0 + }, +/turf/open/space/basic, +/area/space/nearstation) "uzJ" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -58282,10 +58167,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"uAo" = ( -/obj/structure/sign/warning/pods, -/turf/closed/wall/r_wall, -/area/station/maintenance/department/engine) "uAu" = ( /obj/machinery/conveyor{ dir = 1; @@ -58296,14 +58177,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"uAw" = ( -/obj/structure/sign/warning/cold_temp/directional/north{ - name = "\improper CRYOGENICS" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/machinery/light/cold/directional/north, -/turf/open/floor/iron/dark/textured, -/area/station/medical/cryo) "uAC" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -58328,6 +58201,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port) +"uBj" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "uBp" = ( /obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{ dir = 8 @@ -58370,6 +58252,15 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"uBG" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "uBI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -58397,16 +58288,19 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/wood, /area/station/command/corporate_showroom) +"uCR" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "uCS" = ( /obj/structure/chair/stool/directional/south, /turf/open/floor/iron, /area/station/security/prison) -"uDf" = ( -/obj/effect/turf_decal/bot, -/obj/effect/landmark/start/hangover, -/obj/machinery/digital_clock/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "uDn" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/yellow{ @@ -58465,6 +58359,13 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"uEs" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/solars/port/fore) "uEw" = ( /obj/structure/cable, /obj/effect/mapping_helpers/burnt_floor, @@ -58485,6 +58386,17 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"uEA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "uEC" = ( /obj/machinery/conveyor{ dir = 4; @@ -58495,18 +58407,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"uEM" = ( -/obj/item/radio/intercom/directional/north, -/obj/structure/sign/poster/official/random/directional/east, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/hallway/secondary/entry) "uEO" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/port) +"uEP" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron, +/area/station/cargo/storage) "uET" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -58633,6 +58545,20 @@ }, /turf/open/floor/iron/white, /area/station/security/prison/visit) +"uGq" = ( +/obj/machinery/light_switch/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Virology Lab"; + network = list("ss13","medbay") + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "uGr" = ( /obj/machinery/door/airlock/maintenance{ name = "Crematorium" @@ -58665,6 +58591,24 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"uGU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Port Primary Hallway" + }, +/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/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "uGX" = ( /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, @@ -58685,12 +58629,6 @@ /obj/effect/spawner/random/engineering/flashlight, /turf/open/floor/iron, /area/station/command/gateway) -"uHh" = ( -/obj/machinery/chem_master, -/obj/structure/noticeboard/directional/south, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "uHo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58708,12 +58646,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"uHw" = ( -/obj/effect/turf_decal/siding/white{ - dir = 8 - }, -/turf/open/water, -/area/station/service/hydroponics/garden) "uHA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -58802,6 +58734,22 @@ /obj/machinery/computer/accounting, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) +"uJz" = ( +/obj/effect/turf_decal/bot, +/obj/structure/rack, +/obj/machinery/status_display/evac/directional/east, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, +/turf/open/floor/iron/checker, +/area/station/engineering/storage_shared) "uJB" = ( /obj/structure/chair/stool/directional/east, /turf/open/floor/iron, @@ -58919,36 +58867,17 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"uLA" = ( -/obj/structure/table, +"uLE" = ( /obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable, -/obj/item/storage/medkit/regular{ - pixel_x = -3; - pixel_y = 10 - }, -/obj/item/pen/blue{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/pen/fountain{ - pixel_x = 10 - }, -/obj/item/pen/red{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/stamp/denied{ - pixel_y = -1 + dir = 4 }, -/obj/item/stamp{ - pixel_x = -9; - pixel_y = -1 +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) +/turf/open/floor/iron, +/area/station/construction/storage_wing) "uLK" = ( /obj/structure/flora/bush/pale/style_random, /obj/structure/flora/bush/ferny/style_random, @@ -58958,10 +58887,6 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/grass, /area/station/science/research) -"uLP" = ( -/obj/structure/sign/departments/exodrone/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "uMb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58987,6 +58912,13 @@ dir = 4 }, /area/station/medical/chem_storage) +"uMj" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "uMR" = ( /obj/machinery/holopad, /turf/open/floor/iron/white/side{ @@ -59072,6 +59004,14 @@ /obj/effect/spawner/random/trash/box, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"uNZ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/closet/crate, +/obj/item/toy/plush/lizard_plushie/green{ + name = "Loads-The-Crates" + }, +/turf/open/space/basic, +/area/space/nearstation) "uOd" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, @@ -59182,6 +59122,20 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"uQm" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/table/wood, +/obj/item/ph_booklet{ + pixel_y = 6; + pixel_x = 5 + }, +/obj/item/burner/oil{ + pixel_y = 6; + pixel_x = -5 + }, +/obj/item/storage/test_tube_rack/full, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "uQF" = ( /obj/structure/lattice, /obj/item/stack/rods, @@ -59217,6 +59171,17 @@ }, /turf/open/floor/iron/dark, /area/station/security/evidence) +"uQL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "uRa" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -59226,30 +59191,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"uRd" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/machinery/door/firedoor, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/pen, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "pharmacy_shutters_2"; - name = "Pharmacy Shutters" - }, -/obj/machinery/door/window/right/directional/east{ - name = "Pharmacy Desk"; - req_access = list("pharmacy") - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "uRl" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -59298,13 +59239,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/security/prison) -"uSb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/construction/storage_wing) +"uSh" = ( +/obj/item/stack/sheet/iron/five, +/obj/item/stack/cable_coil/five, +/obj/effect/decal/cleanable/robot_debris/down, +/obj/effect/turf_decal/box, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "uSz" = ( /obj/structure/table, /obj/item/phone{ @@ -59314,22 +59255,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"uSF" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/light/small/directional/north, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/bin{ - name = "Jim Norton's Quebecois Coffee disposal unit" - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "uSM" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ dir = 1 @@ -59337,6 +59262,15 @@ /obj/machinery/light/small/dim/directional/west, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"uSO" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/bot_white, +/obj/structure/cable, +/obj/effect/turf_decal/arrows/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "uTj" = ( /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/dark, @@ -59397,6 +59331,16 @@ /obj/effect/mapping_helpers/airlock/access/any/command/minisat, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) +"uUb" = ( +/obj/machinery/reagentgrinder, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/structure/table/glass, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "uUg" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, @@ -59409,30 +59353,6 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"uUB" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/structure/table{ - name = "Jim Norton's Quebecois Coffee table" - }, -/obj/item/reagent_containers/cup/glass/coffee{ - pixel_x = -3; - pixel_y = 9 - }, -/obj/item/reagent_containers/cup/glass/coffee{ - pixel_x = 5; - pixel_y = 12 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/modular_computer/laptop/preset/civilian, -/turf/open/floor/wood, -/area/station/service/cafeteria) -"uUK" = ( -/obj/structure/sign/warning/secure_area/directional/north, -/turf/open/space/basic, -/area/space/nearstation) "uUL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -59485,28 +59405,21 @@ /obj/structure/sign/poster/official/nanotrasen_logo/directional/east, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) -"uVj" = ( -/obj/machinery/button/ignition{ - id = "Xenobio"; - pixel_x = -4; - pixel_y = -3 +"uVm" = ( +/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 }, -/obj/machinery/button/door/directional/north{ - id = "Xenolab"; - name = "Test Chamber Blast Doors"; - pixel_x = 6; - pixel_y = -2; - req_access = list("xenobiology") +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/computer/security/telescreen/test_chamber/directional/north, /turf/open/floor/iron, -/area/station/science/xenobiology) -"uVs" = ( -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/aft/lesser) +/area/station/hallway/primary/central) "uVv" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -59542,6 +59455,10 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"uWk" = ( +/obj/structure/sign/warning/secure_area, +/turf/closed/wall/r_wall, +/area/station/science/xenobiology/hallway) "uWn" = ( /obj/machinery/nuclearbomb/selfdestruct, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -59678,6 +59595,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port) +"uYE" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/binoculars, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/small/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "uYH" = ( /obj/structure/reflector/double/anchored{ dir = 5 @@ -59718,12 +59648,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"uYU" = ( -/obj/structure/table/wood, -/obj/structure/sign/poster/official/random/directional/south, -/obj/effect/spawner/random/bureaucracy/paper, -/turf/open/floor/wood, -/area/station/commons/vacant_room/office) "uZa" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -59733,15 +59657,6 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron, /area/station/security/prison/work) -"uZh" = ( -/obj/structure/table, -/obj/item/food/grown/poppy/lily, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/service/hydroponics) "uZj" = ( /obj/structure/sign/directions/security{ dir = 1; @@ -59765,6 +59680,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) +"uZu" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/kitchen) "uZD" = ( /obj/structure/cable, /turf/open/floor/carpet, @@ -59776,6 +59705,15 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"uZL" = ( +/obj/machinery/requests_console/directional/north{ + department = "Law Office"; + name = "Lawyer Requests Console" + }, +/obj/machinery/newscaster/directional/west, +/obj/structure/aquarium/lawyer, +/turf/open/floor/wood, +/area/station/service/lawoffice) "uZP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59785,18 +59723,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"vab" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/firealarm/directional/south, -/obj/structure/table/wood, -/obj/item/stack/sheet/cloth/ten, -/obj/item/toy/crayon/spraycan, -/obj/item/stack/rods/ten, -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood/large, -/area/station/service/theater) "vae" = ( /obj/machinery/camera/directional/east{ c_tag = "Prison Isolation Cell"; @@ -59807,6 +59733,13 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/white, /area/station/security/prison/safe) +"vag" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "vaB" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -59875,6 +59808,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"vbF" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/circuit/green{ + luminosity = 2 + }, +/area/station/ai_monitored/command/nuke_storage) "vbL" = ( /obj/machinery/door/airlock/research{ name = "Ordnance Lab" @@ -59922,6 +59862,25 @@ }, /turf/open/floor/plating, /area/station/service/chapel/funeral) +"vde" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/directional/north{ + id = "warehouse"; + name = "Warehouse Shutters Control" + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/iron, +/area/station/cargo/warehouse) +"vdg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/netpod, +/obj/effect/decal/cleanable/robot_debris, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "vdi" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Office - Port" @@ -59943,6 +59902,16 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"vdW" = ( +/obj/structure/cable, +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot/left, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "veo" = ( /obj/structure/weightmachine/weightlifter{ color = "#f5a183"; @@ -60060,6 +60029,25 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"vgZ" = ( +/obj/structure/table/glass, +/obj/structure/cable, +/obj/machinery/fax{ + fax_name = "Chief Medical Officer's Office"; + name = "Chief Medical Officer's Fax Machine" + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) +"vhb" = ( +/obj/machinery/chem_dispenser, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "vhj" = ( /obj/structure/chair{ name = "Judge" @@ -60124,18 +60112,25 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/grass, /area/station/medical/virology) -"viy" = ( -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 1 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/effect/turf_decal/siding/purple{ - dir = 1 +"vis" = ( +/obj/structure/filingcabinet, +/obj/item/folder/documents, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/poster/traitor, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) +"viF" = ( +/obj/machinery/computer/upload/borg, +/obj/machinery/door/window/left/directional/south{ + name = "Cyborg Upload Console Window"; + req_access = list("ai_upload") }, -/turf/open/floor/iron, -/area/station/science/explab) +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "viH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/structure/window/reinforced, @@ -60144,19 +60139,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) -"viN" = ( -/obj/machinery/recharger{ - pixel_y = 3 - }, -/obj/item/restraints/handcuffs{ - pixel_y = 3 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "viQ" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -60175,6 +60157,21 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"vjg" = ( +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/tile/brown/diagonal_centre, +/obj/effect/turf_decal/tile/yellow/diagonal_edge, +/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/yellow/corner{ + dir = 8 + }, +/turf/open/floor/iron/diagonal, +/area/station/cargo/storage) "vjk" = ( /obj/effect/turf_decal/siding/purple{ dir = 10 @@ -60246,6 +60243,30 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"vjX" = ( +/obj/structure/table/reinforced, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/machinery/door/firedoor, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/item/pen, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "pharmacy_shutters_2"; + name = "Pharmacy Shutters" + }, +/obj/machinery/door/window/right/directional/east{ + name = "Pharmacy Desk"; + req_access = list("pharmacy") + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "vjZ" = ( /obj/structure/table, /turf/open/floor/iron/dark/side, @@ -60321,6 +60342,13 @@ /obj/effect/spawner/random/techstorage/rnd_secure_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"vlk" = ( +/obj/effect/turf_decal/trimline/red/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "vlq" = ( /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, @@ -60339,6 +60367,31 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"vlY" = ( +/obj/structure/table/reinforced, +/obj/machinery/camera/directional/north{ + c_tag = "Science Robotics Office"; + network = list("ss13","rd") + }, +/obj/item/radio/intercom/directional/north, +/obj/item/storage/medkit{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/item/storage/medkit{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/healthanalyzer{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/healthanalyzer{ + pixel_x = -3; + pixel_y = -4 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) "vlZ" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -60359,15 +60412,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"vms" = ( -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "vmx" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 6 @@ -60384,15 +60428,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"vmS" = ( -/obj/machinery/camera/directional/north, -/obj/machinery/airalarm/directional/north, -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 4 +"vmU" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/cargo/lobby) +/turf/open/water, +/area/station/service/hydroponics/garden) "vmX" = ( /obj/machinery/light/directional/west, /obj/structure/disposalpipe/segment, @@ -60446,11 +60487,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"vnP" = ( -/obj/structure/lattice, -/obj/structure/sign/warning/secure_area/directional/east, -/turf/open/space/basic, -/area/space/nearstation) "vnV" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/siding/wood{ @@ -60617,15 +60653,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"vqN" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "vqU" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -60633,22 +60660,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"vre" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - id_tag = "innerbrig"; - name = "Brig" - }, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/turf/open/floor/iron, -/area/station/security/brig) "vrn" = ( /obj/item/seeds/wheat, /obj/item/seeds/sugarcane, @@ -60708,19 +60719,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/toilet/auxiliary) -"vsz" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/fake_stairs/directional/south, -/obj/structure/railing{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) -"vsD" = ( -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) "vsG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ @@ -60731,6 +60729,23 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"vsI" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/item/stack/sheet/glass, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/signaler, +/obj/item/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white, +/area/station/science/lobby) "vsO" = ( /obj/machinery/conveyor{ dir = 1; @@ -60741,6 +60756,16 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) +"vsU" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "vth" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -60809,10 +60834,47 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"vtT" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, +"vtI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/lights/mixed{ + pixel_x = -4; + pixel_y = 18 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = 6; + pixel_y = 12 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/structure/table, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/service/janitor) +"vtK" = ( +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = -6 + }, +/obj/machinery/camera/directional/south{ + c_tag = "Bar - Counter" + }, +/obj/structure/table, +/obj/machinery/requests_console/directional/south{ + department = "Bar"; + name = "Bar Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "vtX" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -60826,47 +60888,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"vuf" = ( -/obj/item/assembly/timer{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/assembly/timer{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/assembly/igniter{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/assembly/igniter{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/assembly/igniter{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/assembly/igniter{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/item/assembly/timer{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/assembly/timer{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/structure/table/glass, -/obj/item/storage/pill_bottle/epinephrine{ - pixel_x = 8; - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/pharmacy) "vun" = ( /turf/closed/wall, /area/station/medical/storage) @@ -60877,6 +60898,20 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"vuz" = ( +/obj/structure/closet/crate, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "vuJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -60958,6 +60993,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"vwg" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/structure/table, +/obj/effect/spawner/random/bureaucracy/birthday_wrap, +/turf/open/floor/iron, +/area/station/cargo/lobby) +"vwi" = ( +/obj/structure/table, +/obj/item/cigarette/pipe, +/turf/open/floor/plating, +/area/station/maintenance/port) "vwn" = ( /obj/item/kirbyplants/organic/plant10, /turf/open/floor/wood/large, @@ -60970,21 +61017,6 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/commons/fitness/recreation) -"vwL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-entrance" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron, -/area/station/security/brig) "vwP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61034,6 +61066,16 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/dorms) +"vxE" = ( +/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/tile/neutral{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "vxJ" = ( /obj/machinery/power/emitter/welded{ dir = 1 @@ -61041,6 +61083,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"vxO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "vxT" = ( /obj/structure/chair/comfy{ dir = 4 @@ -61058,6 +61111,23 @@ /obj/item/storage/fancy/candle_box, /turf/open/floor/iron/white, /area/station/medical/abandoned) +"vyi" = ( +/obj/structure/sign/warning/secure_area, +/turf/closed/wall/r_wall, +/area/station/command/corporate_showroom) +"vyv" = ( +/obj/structure/table, +/obj/machinery/status_display/ai/directional/west, +/obj/machinery/flasher/directional/south{ + id = "AI" + }, +/obj/item/ai_module/reset{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/item/ai_module/supplied/freeform, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "vyy" = ( /obj/machinery/washing_machine, /obj/effect/decal/cleanable/dirt, @@ -61087,6 +61157,18 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"vzt" = ( +/obj/structure/table/reinforced, +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/obj/item/surgery_tray/full/morgue, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 8 + }, +/area/station/medical/morgue) "vzx" = ( /obj/machinery/portable_atmospherics/canister/plasma, /obj/effect/turf_decal/siding/purple{ @@ -61094,6 +61176,14 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) +"vzG" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/sign/poster/official/random/directional/east, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/hallway/secondary/entry) "vzI" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/line, @@ -61117,18 +61207,6 @@ }, /turf/open/floor/iron/checker, /area/station/engineering/atmos/storage/gas) -"vzJ" = ( -/obj/structure/table, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/mesh, -/obj/item/stack/medical/suture, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/lobby) "vzL" = ( /obj/structure/cable, /mob/living/carbon/human/species/monkey, @@ -61165,16 +61243,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"vAm" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "vAH" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -61191,6 +61259,19 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"vAT" = ( +/obj/machinery/light/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "vAX" = ( /obj/structure/chair/sofa/left/brown, /obj/structure/sign/poster/official/get_your_legs/directional/north, @@ -61262,16 +61343,22 @@ /turf/open/floor/iron, /area/station/engineering/gravity_generator) "vCu" = ( -/obj/structure/table/wood, -/obj/item/clothing/head/costume/sombrero/green, -/obj/structure/sign/poster/random/directional/east, -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) +"vCC" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/landmark/start/hangover, -/obj/machinery/light/small/directional/east, -/turf/open/floor/wood/large, -/area/station/service/theater) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/structure/sign/poster/contraband/random/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "vCN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -61316,17 +61403,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/office) -"vDO" = ( -/obj/structure/table/glass, -/obj/item/clothing/accessory/armband/hydro, -/obj/item/clothing/suit/apron, -/obj/item/wrench, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) "vDV" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -61392,12 +61468,53 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port) +"vEv" = ( +/obj/machinery/computer/mecha{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/obj/machinery/requests_console/directional/east{ + department = "Research Director's Desk"; + name = "Research Director's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/machinery/computer/security/telescreen/rd/directional/north, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/rd) "vEw" = ( /obj/structure/chair/stool/directional/south, /obj/item/radio/intercom/prison/directional/north, /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/security/prison) +"vEC" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/purple{ + dir = 4 + }, +/obj/item/radio/headset/headset_medsci{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/storage/box/monkeycubes{ + pixel_x = 6; + pixel_y = 9 + }, +/obj/item/storage/box/gloves{ + pixel_x = 5; + pixel_y = 1 + }, +/obj/item/storage/box/monkeycubes{ + pixel_x = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "vEH" = ( /obj/machinery/door/window/right/directional/east{ name = "Danger: Conveyor Access"; @@ -61551,6 +61668,10 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"vHa" = ( +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "vHs" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -61671,39 +61792,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"vJo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/structure/cable, -/obj/machinery/computer/security/telescreen/turbine/directional/east, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"vJs" = ( -/obj/item/stack/sheet/rglass{ - amount = 50 - }, -/obj/item/stack/sheet/rglass{ - amount = 50 - }, -/obj/item/stack/rods/fifty, -/obj/item/stack/rods/fifty, -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) "vJy" = ( /obj/structure/rack, /obj/item/stack/sheet/cardboard, @@ -61747,23 +61835,16 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"vKi" = ( -/obj/structure/table, -/obj/item/storage/box/lights/mixed{ - pixel_y = 9; - pixel_x = 8 - }, -/obj/item/storage/box/lights/mixed{ - pixel_y = 5; - pixel_x = -6 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "vKm" = ( /obj/structure/rack, /obj/item/clothing/suit/hazardvest, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"vKn" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "vKt" = ( /obj/structure/table/wood/fancy/royalblue, /obj/structure/sign/painting/library_secure{ @@ -61832,6 +61913,11 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"vLM" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/dice, +/turf/open/floor/wood, +/area/station/commons/lounge) "vLX" = ( /obj/item/wrench, /turf/open/floor/iron/dark, @@ -61849,15 +61935,6 @@ /obj/machinery/portable_atmospherics/canister/water_vapor, /turf/open/floor/iron, /area/station/service/janitor) -"vMt" = ( -/mob/living/simple_animal/bot/mulebot, -/obj/structure/cable, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=2"; - location = "QM #1" - }, -/turf/open/floor/catwalk_floor, -/area/station/cargo/storage) "vMw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61872,13 +61949,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/locker) -"vMI" = ( -/obj/machinery/status_display/ai/directional/north, -/obj/machinery/porta_turret/ai, -/obj/machinery/computer/security/telescreen/research/directional/west, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "vML" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61915,6 +61985,12 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"vNp" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "vNv" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61960,6 +62036,10 @@ /obj/effect/mapping_helpers/airlock/access/any/command/maintenance, /turf/open/floor/plating, /area/station/maintenance/central) +"vOz" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/station/science/cytology) "vOK" = ( /obj/structure/plasticflaps/opaque, /obj/effect/turf_decal/bot, @@ -62003,6 +62083,15 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"vPu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/electrolyzer, +/obj/machinery/atmospherics/components/binary/pump/on/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "vPy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62099,6 +62188,14 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"vQT" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/airalarm/directional/east, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "vQV" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -62160,18 +62257,22 @@ /obj/structure/disposalpipe/junction/flip, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"vRu" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/lobby) -"vRJ" = ( -/obj/machinery/camera/motion/directional/south{ - active_power_usage = 0; - c_tag = "Armory - External"; - use_power = 0 +"vRr" = ( +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 1 }, -/turf/open/space/basic, -/area/space/nearstation) +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 8 + }, +/obj/machinery/door/airlock/mining{ + name = "Bitrunning Den" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/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_half, +/area/station/cargo/bitrunning/den) "vRN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -62211,6 +62312,19 @@ "vRU" = ( /turf/open/floor/carpet, /area/station/service/theater) +"vSh" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "vSo" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -62292,18 +62406,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"vTL" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/sign/poster/official/random/directional/west, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) -"vTO" = ( -/obj/structure/cable, -/obj/structure/sign/poster/contraband/random/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "vTV" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 10 @@ -62356,6 +62458,20 @@ /obj/effect/turf_decal/tile/green/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/virology) +"vUL" = ( +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = -3 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/stock_parts/scanning_module{ + pixel_x = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "vUM" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -62371,47 +62487,6 @@ /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /turf/open/floor/iron/kitchen_coldroom, /area/station/medical/coldroom) -"vVg" = ( -/obj/machinery/light_switch/directional/north, -/obj/structure/table/wood, -/obj/item/reagent_containers/cup/glass/mug{ - pixel_x = 13; - pixel_y = 7 - }, -/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 = -1 - }, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = -2; - pixel_y = 12 - }, -/obj/item/reagent_containers/cup/glass/ice{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/structure/window/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/cafeteria) -"vVm" = ( -/obj/effect/mapping_helpers/airlock/access/any/security/maintenance, -/obj/machinery/door/airlock/maintenance{ - name = "Brig Maintenance" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "vVp" = ( /obj/structure/reagent_dispensers/fueltank, /obj/structure/sign/poster/contraband/random/directional/north, @@ -62524,11 +62599,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron, /area/station/security/checkpoint/science) -"vWA" = ( -/obj/structure/fake_stairs/directional/east, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "vWB" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/atmospherics/components/binary/pump/on{ @@ -62542,6 +62612,26 @@ dir = 1 }, /area/station/engineering/atmos) +"vWD" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/structure/table, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = 8 + }, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = 5 + }, +/obj/item/clothing/gloves/cargo_gauntlet{ + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/soda_cans/random{ + pixel_x = -9 + }, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "vWF" = ( /obj/structure/cable, /obj/machinery/holopad, @@ -62606,6 +62696,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/command/gateway) +"vYl" = ( +/obj/structure/sign/poster/random/directional/west, +/turf/open/floor/plating, +/area/station/maintenance/aft/lesser) "vYD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -62619,6 +62713,21 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) +"vYF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "innerbrig"; + name = "Brig" + }, +/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/cyclelink_helper_multi{ + cycle_id = "brig-entrance" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/turf/open/floor/iron, +/area/station/security/brig) "vYI" = ( /obj/structure/sign/warning/secure_area/directional/north, /obj/structure/closet/radiation, @@ -62692,27 +62801,24 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"vZM" = ( +/obj/machinery/airalarm/directional/south, +/obj/item/stack/package_wrap{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/stack/package_wrap, +/obj/structure/table/wood, +/obj/item/gun/ballistic/shotgun/doublebarrel, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/wood, +/area/station/service/bar/backroom) "vZQ" = ( /obj/effect/spawner/random/vending/colavend, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/secondary/command) -"vZR" = ( -/obj/machinery/disposal/bin, -/obj/machinery/camera/directional/east{ - c_tag = "Garden" - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/siding/wideplating_new, -/obj/structure/railing, -/obj/effect/turf_decal/tile/green/half/contrasted, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) "vZX" = ( /obj/machinery/door/airlock{ name = "Theater Stage" @@ -62725,23 +62831,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"vZY" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Bay Maintenance" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/plating, -/area/station/cargo/storage) -"wab" = ( -/obj/structure/sign/warning/secure_area/directional/south, -/obj/structure/table/reinforced, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/medical/break_room) "wac" = ( /obj/item/stack/sheet/glass/fifty{ pixel_x = 3; @@ -62749,6 +62838,16 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"waf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/structure/cable, +/obj/machinery/computer/security/telescreen/turbine/directional/east, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "wag" = ( /obj/machinery/computer/records/medical, /obj/structure/cable, @@ -62832,6 +62931,14 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/storage) +"wbp" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/trimline/red/filled/warning/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "wbv" = ( /obj/structure/sign/warning/vacuum/external/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -62851,15 +62958,12 @@ /obj/effect/spawner/random/trash/bin, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"wbT" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 6 +"wbW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/open/floor/iron, -/area/station/cargo/storage) +/area/station/cargo/sorting) "wcf" = ( /obj/structure/closet/crate/coffin, /obj/structure/window/spawner/directional/east, @@ -62888,6 +62992,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"wcy" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/brown/filled/arrow_cw{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "wcL" = ( /obj/machinery/door/window/left/directional/west{ name = "Library Desk Door"; @@ -62904,36 +63015,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"wcO" = ( -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/machinery/camera/directional/west{ - c_tag = "Science Ordnance Test Lab" - }, -/obj/item/assembly/prox_sensor{ - pixel_y = 2 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = 9; - pixel_y = -2 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -4; - pixel_y = 1 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = 8; - pixel_y = 9 - }, -/obj/machinery/requests_console/directional/west{ - department = "Ordnance Test Range"; - name = "Test Range Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "wde" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -62943,11 +63024,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) -"wdp" = ( -/obj/structure/chair, -/obj/machinery/computer/security/telescreen/interrogation/directional/west, -/turf/open/floor/iron/grimy, -/area/station/security/interrogation) "wdr" = ( /turf/closed/wall, /area/station/hallway/secondary/entry) @@ -62991,15 +63067,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/cargo/lobby) -"wdP" = ( -/obj/structure/railing/corner/end{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/end{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "wem" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -63028,6 +63095,13 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"weq" = ( +/obj/structure/sign/warning/secure_area{ + desc = "A warning sign which reads 'BOMB RANGE"; + name = "BOMB RANGE" + }, +/turf/closed/wall, +/area/station/science/ordnance/bomb) "wev" = ( /obj/structure/rack, /obj/item/storage/box, @@ -63042,13 +63116,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/locker) -"weI" = ( -/obj/machinery/door/poddoor/shutters{ - name = "Warehouse Shutters"; - id = "warehouse" - }, -/turf/open/floor/catwalk_floor, -/area/station/cargo/warehouse) "weJ" = ( /obj/machinery/door/airlock{ name = "Central Emergency Storage" @@ -63078,6 +63145,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"wfp" = ( +/obj/effect/turf_decal/siding/white{ + dir = 5 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/cargo/storage) "wfu" = ( /obj/structure/chair/office{ dir = 8 @@ -63108,12 +63182,19 @@ dir = 1 }, /area/station/engineering/atmos/storage/gas) -"wfY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/turf/open/floor/iron, -/area/station/cargo/storage) +"wfD" = ( +/obj/structure/fireaxecabinet/directional/south, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_y = 3 + }, +/obj/machinery/light_switch/directional/east, +/obj/structure/table/glass, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "wfZ" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63136,6 +63217,34 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"wgl" = ( +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/item/poster/random_contraband, +/obj/structure/table/wood, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/random/food_or_drink/booze{ + spawn_loot_count = 2; + spawn_random_offset = 1 + }, +/obj/effect/spawner/random/entertainment/musical_instrument, +/obj/structure/sign/poster/contraband/random/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"wgm" = ( +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "wgs" = ( /obj/machinery/door/airlock{ id_tag = "Cabin4"; @@ -63155,19 +63264,20 @@ /obj/structure/sign/map/right, /turf/closed/wall, /area/station/commons/storage/tools) +"wgQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/supply/disposals, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "wha" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/stock_parts/matter_bin, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"whc" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "whr" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -63178,6 +63288,17 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"whs" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/storage/toolbox/emergency, +/obj/effect/spawner/random/maintenance, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "whx" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63267,11 +63388,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"wjm" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, -/area/station/service/hydroponics) "wjn" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63281,6 +63397,14 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"wjK" = ( +/obj/item/clothing/head/hats/tophat, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/table, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/station/service/bar) "wjQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -63312,21 +63436,6 @@ /obj/item/laser_pointer/red, /turf/open/space/basic, /area/space/nearstation) -"wkA" = ( -/obj/machinery/computer/station_alert{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/obj/machinery/computer/security/telescreen/minisat/directional/south, -/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/satellite) -"wkG" = ( -/obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "wkL" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -63362,6 +63471,15 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/cult, /area/station/service/chapel/funeral) +"wll" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom/directional/east, +/obj/item/folder/blue, +/obj/item/hand_tele, +/obj/item/stamp/head/captain, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain/private) "wlx" = ( /obj/machinery/camera/directional/west{ c_tag = "Engineering - Foyer - Shared Storage" @@ -63377,15 +63495,6 @@ "wlz" = ( /turf/closed/wall/r_wall, /area/station/security/mechbay) -"wlG" = ( -/obj/structure/cable, -/obj/effect/turf_decal/bot_white, -/obj/effect/spawner/random/maintenance, -/obj/effect/turf_decal/arrows/red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "wlL" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -63402,6 +63511,15 @@ }, /turf/open/floor/iron/dark, /area/station/security/evidence) +"wme" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Cargo" + }, +/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/security/checkpoint/supply) "wmf" = ( /obj/effect/spawner/random/trash/garbage{ spawn_scatter_radius = 1 @@ -63420,13 +63538,6 @@ /obj/vehicle/ridden/secway, /turf/open/floor/iron, /area/station/security/office) -"wmv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/netpod, -/obj/effect/decal/cleanable/robot_debris, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "wmz" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/iron, @@ -63502,21 +63613,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"wor" = ( -/obj/item/radio/intercom/directional/east, -/obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/item/computer_disk{ - pixel_x = 7; - pixel_y = 2 - }, -/obj/item/computer_disk{ - pixel_x = -5; - pixel_y = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "wov" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/generic_maintenance_landmark, @@ -63573,6 +63669,23 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"wpo" = ( +/obj/item/storage/box/matches{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/cigarette/cigar{ + pixel_x = 4; + pixel_y = 1 + }, +/obj/item/cigarette/cigar{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/cigarette/cigar/cohiba, +/obj/structure/table/wood, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "wpr" = ( /obj/machinery/firealarm/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -63601,17 +63714,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"wpN" = ( -/obj/structure/table, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/construction/plumbing, -/obj/item/construction/plumbing, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/chemistry) "wqh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -63621,16 +63723,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"wqr" = ( -/obj/structure/table, -/obj/item/pipe_dispenser{ - pixel_x = 3; - pixel_y = 7 - }, -/obj/item/pipe_dispenser, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "wqA" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -63648,6 +63740,16 @@ /obj/machinery/photobooth/security, /turf/open/floor/iron, /area/station/security/execution/transfer) +"wqJ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "wrc" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -63664,13 +63766,6 @@ "wrn" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"wrI" = ( -/obj/effect/spawner/structure/window, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/cargo/lobby) "wrJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -63699,6 +63794,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"wss" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/item/folder/yellow{ + pixel_y = 4 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Bridge - Central" + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "wst" = ( /obj/machinery/door/airlock{ name = "Unisex Showers" @@ -63723,10 +63833,24 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"wsx" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) "wsD" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"wsG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/water_source/puddle, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/grass, +/area/station/security/prison/garden) "wsI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -63846,23 +63970,12 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"wtY" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/airlock_controller/incinerator_ordmix{ - pixel_x = -24 - }, -/obj/machinery/button/ignition/incinerator/ordmix{ - pixel_x = 24; - pixel_y = -6 - }, -/obj/machinery/button/door/incinerator_vent_ordmix{ - pixel_x = 24; - pixel_y = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) +"wtX" = ( +/obj/structure/table/wood, +/obj/item/folder/yellow, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "wtZ" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/red{ @@ -63870,12 +63983,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"wub" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/crate_abandoned, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "wuj" = ( /obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt, @@ -63959,11 +64066,6 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"wwf" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/oil/slippery, -/turf/open/floor/iron, -/area/station/cargo/sorting) "wwj" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -63988,15 +64090,13 @@ /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"wwv" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, +"wwN" = ( +/obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron, -/area/station/cargo/sorting) +/obj/item/chair/wood, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "wwW" = ( /obj/effect/turf_decal/trimline/purple/line{ dir = 1 @@ -64036,18 +64136,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"wxE" = ( -/obj/structure/closet/crate, -/obj/item/stack/cable_coil, -/obj/item/crowbar, -/obj/item/screwdriver{ - pixel_y = 16 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/teleporter) "wxF" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -64067,14 +64155,6 @@ /obj/machinery/light/floor, /turf/open/floor/wood/large, /area/station/commons/lounge) -"wxK" = ( -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/construction/storage_wing) "wxM" = ( /obj/machinery/status_display/door_timer{ id = "Cell 1"; @@ -64095,6 +64175,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) +"wyp" = ( +/obj/machinery/light_switch/directional/north, +/obj/machinery/light/small/directional/north, +/obj/structure/table/wood, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/under/suit/black_really, +/obj/item/clothing/glasses/sunglasses, +/obj/machinery/camera/directional/north{ + c_tag = "Corporate Showroom" + }, +/turf/open/floor/wood, +/area/station/command/corporate_showroom) "wyu" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -64119,18 +64211,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"wyO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/railing/corner/end/flip{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/end{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "wyP" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -64142,6 +64222,9 @@ /obj/machinery/bouldertech/refinery/smelter, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"wyV" = ( +/turf/open/floor/carpet/orange, +/area/station/command/heads_quarters/qm) "wzd" = ( /obj/item/radio/intercom/directional/west, /obj/structure/table, @@ -64183,10 +64266,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"wzY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "wAk" = ( /obj/machinery/status_display/evac/directional/south, /obj/structure/disposalpipe/segment{ @@ -64198,18 +64277,16 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) -"wAm" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Deliveries" +"wAt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/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/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown/fourcorners, -/turf/open/floor/iron, -/area/station/cargo/sorting) +/obj/structure/table/wood, +/obj/effect/spawner/random/trash/soap, +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood/large, +/area/station/service/theater) "wAA" = ( /obj/machinery/firealarm/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64237,19 +64314,38 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison) +"wBq" = ( +/obj/structure/table, +/obj/effect/turf_decal/siding/purple{ + dir = 9 + }, +/obj/item/toy/figure/geneticist, +/obj/item/radio/intercom/directional/west, +/obj/item/storage/pill_bottle/mutadone{ + pixel_x = -9 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "wBs" = ( /obj/machinery/vending/cigarette, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"wBx" = ( -/obj/machinery/computer/security/telescreen/auxbase/directional/south, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 +"wBu" = ( +/obj/structure/chair/office, +/obj/effect/landmark/start/head_of_personnel, +/obj/machinery/light_switch{ + pixel_x = 38; + pixel_y = -35 }, -/obj/effect/turf_decal/tile/yellow/half/contrasted, -/turf/open/floor/iron, -/area/station/construction/mining/aux_base) +/obj/machinery/button/flasher{ + id = "hopflash"; + pixel_x = 38; + pixel_y = -25 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "wBE" = ( /obj/machinery/door/poddoor/shutters/radiation/preopen{ id = "engsm"; @@ -64262,6 +64358,15 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) +"wBK" = ( +/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/white/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "wBM" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -64288,6 +64393,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"wCb" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/science/research) "wCe" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -64379,38 +64491,22 @@ dir = 1 }, /area/station/engineering/atmos/pumproom) +"wDH" = ( +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/wood, +/area/station/service/library) "wEf" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output{ dir = 1 }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"wEm" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Port Primary Hallway - Middle" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "wEn" = ( /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/grimy, /area/station/service/chapel/office) -"wEr" = ( -/obj/effect/turf_decal/bot_white, -/obj/effect/spawner/random/maintenance, -/obj/effect/turf_decal/arrows/red{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "wEz" = ( /obj/item/stack/sheet/cardboard, /obj/effect/spawner/random/trash/janitor_supplies, @@ -64479,11 +64575,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"wFI" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "wFM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/delivery, @@ -64525,18 +64616,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) -"wGP" = ( -/obj/machinery/computer/security, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/half/contrasted{ +"wGH" = ( +/obj/effect/turf_decal/trimline/blue/corner{ dir = 1 }, -/obj/machinery/requests_console/directional/north{ - department = "Quartermaster's Desk"; - name = "Security Requests Console" +/obj/effect/turf_decal/trimline/purple/corner, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 8 }, -/turf/open/floor/iron, -/area/station/security/checkpoint/customs) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/sign/departments/rndserver/directional/north, +/turf/open/floor/iron/white, +/area/station/science/research) "wGR" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron, @@ -64551,24 +64650,6 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"wHq" = ( -/obj/machinery/mineral/ore_redemption{ - dir = 4; - input_dir = 8; - output_dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/east{ - name = "Ore Redemption Window" - }, -/obj/machinery/door/window/left/directional/west{ - req_access = list("cargo"); - name = "Cargo Security Window" - }, -/obj/effect/turf_decal/tile/brown/fourcorners, -/turf/open/floor/iron, -/area/station/cargo/lobby) "wHu" = ( /turf/closed/wall, /area/station/science/lobby) @@ -64603,10 +64684,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, /area/station/engineering/atmos) -"wIE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/turf/open/floor/engine/xenobio, -/area/station/science/xenobiology) "wIF" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -64720,18 +64797,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"wMD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Cargo Office"; - name = "Cargo Office Fax Machine" - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "wMT" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -64854,14 +64919,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"wOO" = ( -/obj/structure/table/wood, -/obj/item/toy/plush/carpplushie{ - greyscale_colors = "#ff5050#000000"; - name = "\improper Nanotrasen wildlife department space carp plushie" - }, -/turf/open/floor/carpet, -/area/station/command/corporate_showroom) "wOR" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64913,18 +64970,6 @@ }, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) -"wPw" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/warning{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/light/small/directional/north, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/sorting) "wPB" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/engine/air, @@ -64950,6 +64995,16 @@ }, /turf/open/floor/iron/dark, /area/station/security/lockers) +"wPH" = ( +/obj/structure/sign/warning/electric_shock/directional/east, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/clothing/head/utility/welding, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "wPM" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -65025,32 +65080,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"wQS" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "xenobio7"; - name = "Xenobio Pen 7 Blast Doors"; - pixel_y = 4; - req_access = list("xenobiology") - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron, -/area/station/science/xenobiology) "wQU" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/burgundy, /turf/open/space, /area/space/nearstation) -"wRb" = ( -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "wRg" = ( /obj/machinery/door/poddoor/incinerator_atmos_aux, /turf/open/floor/engine, @@ -65076,6 +65110,18 @@ /obj/item/clothing/under/misc/burial, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"wRD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/mmi, +/obj/item/mmi, +/obj/item/mmi, +/obj/structure/table, +/turf/open/floor/iron/white, +/area/station/science/robotics/lab) +"wRF" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "wRL" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -65086,10 +65132,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/science/cytology) -"wRM" = ( -/obj/machinery/digital_clock/directional/north, -/turf/open/floor/wood, -/area/station/service/library) "wRT" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -65102,11 +65144,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"wSb" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/greater) "wSe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65125,6 +65162,11 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) +"wSs" = ( +/obj/structure/table/wood/poker, +/obj/effect/spawner/random/entertainment/deck, +/turf/open/floor/wood, +/area/station/commons/lounge) "wSv" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65132,55 +65174,20 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"wSU" = ( -/obj/machinery/reagentgrinder{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = -6 - }, -/obj/machinery/camera/directional/south{ - c_tag = "Bar - Counter" +"wSI" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/east{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") }, -/obj/structure/table, -/obj/machinery/requests_console/directional/south{ - department = "Bar"; - name = "Bar Requests Console" +/obj/structure/desk_bell{ + pixel_x = 6; + pixel_y = 10 }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron, -/area/station/service/bar) -"wTc" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/virology{ - autoclose = 0; - frequency = 1449; - id_tag = "virology_airlock_interior"; - name = "Virology Interior Airlock" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Button"; - pixel_x = 8; - pixel_y = -24; - req_access = list("virology") - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - 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/medical/virology, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/white, -/area/station/medical/virology) +/area/station/service/hydroponics) "wTp" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor/left/directional/north{ @@ -65344,11 +65351,21 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"wWg" = ( +"wWe" = ( /obj/structure/cable, -/obj/machinery/netpod, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Vault Storage" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/construction/storage_wing) "wWk" = ( /obj/machinery/light/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65407,14 +65424,15 @@ /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"wXs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 +"wXv" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Disposal Conveyor Access" }, -/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, -/area/station/maintenance/port/fore) +/area/station/maintenance/disposal) "wXF" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/lesser) @@ -65478,14 +65496,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"wYw" = ( -/obj/machinery/computer/communications{ - dir = 8 - }, -/obj/machinery/status_display/ai/directional/north, -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain/private) "wYx" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -65584,17 +65594,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"xau" = ( -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/obj/structure/window/spawner/directional/west, -/obj/machinery/light/small/directional/south, -/obj/structure/window/spawner/directional/east, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/station/cargo/sorting) "xaL" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/item/kirbyplants/random, @@ -65636,6 +65635,22 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"xbg" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/gateway) +"xbu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "xbT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65654,6 +65669,13 @@ /obj/structure/cable, /turf/open/floor/iron/white/smooth_large, /area/station/command/heads_quarters/cmo) +"xbZ" = ( +/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, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "xcv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65843,6 +65865,51 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/cmo, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"xgb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/storage) +"xgi" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/bot, +/obj/item/bodypart/arm/right/robot{ + pixel_x = 3 + }, +/obj/item/bodypart/arm/left/robot{ + pixel_x = -3 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/firealarm/directional/west, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 6; + pixel_y = 13 + }, +/obj/machinery/ecto_sniffer{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/science/robotics/lab) "xgn" = ( /obj/structure/table/glass, /obj/effect/turf_decal/siding/white{ @@ -65863,6 +65930,11 @@ dir = 4 }, /area/station/medical/treatment_center) +"xgx" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/cargo/storage) "xgB" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -65886,13 +65958,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) -"xgF" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/holopad, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "xgG" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/rack, @@ -65970,15 +66035,6 @@ "xiL" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/science/xenobiology) -"xiS" = ( -/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/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "xiW" = ( /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -66055,6 +66111,15 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/psychology) +"xkj" = ( +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "xko" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -66114,19 +66179,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) -"xlc" = ( -/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/mining{ - name = "Cargo Bay" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/obj/effect/landmark/navigate_destination, -/obj/effect/turf_decal/tile/brown/fourcorners, -/turf/open/floor/iron, -/area/station/cargo/lobby) "xld" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -66142,6 +66194,16 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) +"xlf" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/item/pen/red, +/turf/open/floor/wood, +/area/station/service/lawoffice) "xlv" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/computer/mech_bay_power_console{ @@ -66156,12 +66218,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) -"xlA" = ( -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "xlF" = ( /turf/open/floor/iron, /area/station/service/hydroponics) @@ -66197,15 +66253,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) -"xmh" = ( -/obj/structure/cable, -/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, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "xml" = ( /obj/machinery/computer/message_monitor{ dir = 4 @@ -66219,19 +66266,6 @@ /obj/structure/closet/crate/freezer, /turf/open/floor/iron/white, /area/station/medical/abandoned) -"xmG" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/structure/table, -/obj/machinery/fax{ - fax_name = "Research Director's Office"; - name = "Research Director's Fax Machine" - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) "xmT" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ @@ -66300,6 +66334,23 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) +"xoj" = ( +/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/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) +"xop" = ( +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "xor" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -66332,17 +66383,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"xpj" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/modular_computer/preset/cargochat/cargo{ - dir = 8 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "xpo" = ( /turf/open/floor/carpet, /area/station/commons/dorms) @@ -66411,6 +66451,12 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"xqv" = ( +/obj/structure/cable, +/obj/structure/table, +/obj/item/storage/bag/tray, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "xqI" = ( /obj/machinery/computer/security/labor{ dir = 8 @@ -66450,6 +66496,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"xrv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron, +/area/station/cargo/storage) "xrG" = ( /obj/structure/fireaxecabinet/directional/west, /obj/machinery/camera/directional/west{ @@ -66519,6 +66573,23 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"xsV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/structure/table/reinforced, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/kitchen) "xtp" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -66556,6 +66627,10 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"xtw" = ( +/obj/item/stack/rods, +/turf/open/space/basic, +/area/space/nearstation) "xtz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -66564,18 +66639,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"xtX" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, +"xtH" = ( +/obj/effect/turf_decal/siding/thinplating_new/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner, +/turf/open/floor/iron, +/area/station/cargo/storage) +"xtY" = ( +/obj/machinery/computer/security/telescreen/auxbase/directional/south, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 6 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 }, -/obj/structure/sign/warning/fire/directional/east, +/obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) +/area/station/construction/mining/aux_base) "xtZ" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/green/visible, @@ -66586,17 +66663,6 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/port) -"xuu" = ( -/obj/structure/table/glass, -/obj/item/folder/blue{ - pixel_y = 3 - }, -/obj/item/pen, -/obj/machinery/computer/security/telescreen/minisat/directional/south, -/obj/effect/turf_decal/tile/blue, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/iron/dark, -/area/station/engineering/transit_tube) "xuA" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -66692,6 +66758,17 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"xwa" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/disposal/delivery_chute, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/sorting) "xwf" = ( /obj/structure/weightmachine/weightlifter, /turf/open/floor/iron/dark/side{ @@ -66706,46 +66783,18 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/science/robotics/lab) -"xwv" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/shipping{ - pixel_x = -6; - pixel_y = 15 - }, -/obj/item/multitool{ - pixel_x = -3; - pixel_y = -4 - }, -/obj/item/storage/box/lights/mixed{ - pixel_x = 8; - pixel_y = 11 - }, -/obj/item/flashlight/lamp{ - pixel_x = -7; - pixel_y = 5 - }, -/obj/item/storage/box/shipping{ - pixel_x = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "xww" = ( /turf/closed/wall/r_wall, /area/station/engineering/storage/tech) "xwB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/turf_decal/siding/white{ + dir = 6 }, -/obj/effect/turf_decal/caution{ - dir = 8 +/obj/structure/railing{ + dir = 4 }, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/iron, -/area/station/cargo/warehouse) +/turf/open/water, +/area/station/service/hydroponics/garden) "xwD" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/iron/white, @@ -66795,19 +66844,6 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) -"xxs" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/table, -/obj/item/binoculars, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) -"xxE" = ( -/obj/structure/sign/warning/vacuum/external/directional/east, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/solars/port/fore) "xxF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -66827,6 +66863,16 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"xxQ" = ( +/obj/structure/table, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/item/reagent_containers/cup/glass/mug/britcup{ + pixel_y = 2 + }, +/obj/effect/turf_decal/tile/purple/opposingcorners, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/science/research) "xxU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66841,19 +66887,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/evidence) -"xyd" = ( -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/siding/thinplating_new{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "xyp" = ( /obj/machinery/status_display/evac/directional/north, /obj/structure/cable, @@ -66884,6 +66917,40 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/main) +"xyz" = ( +/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, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) +"xyA" = ( +/obj/structure/table, +/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/plunger, +/obj/item/plunger, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) +"xyI" = ( +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/sign/clock/directional/south, +/turf/open/water, +/area/station/service/hydroponics/garden) "xyM" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -66940,23 +67007,10 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"xzB" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding{ - dir = 9 - }, -/obj/item/stock_parts/matter_bin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/micro_laser, -/obj/item/flatpack{ - board = /obj/item/circuitboard/machine/flatpacker - }, -/obj/item/multitool, -/turf/open/floor/iron, -/area/station/science/lab) +"xzx" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "xAb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -66982,6 +67036,12 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) +"xAi" = ( +/obj/machinery/vending/autodrobe, +/obj/structure/sign/poster/contraband/clown/directional/east, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/wood, +/area/station/service/theater) "xAl" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -67027,29 +67087,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"xBj" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/pdapainter/supply, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) -"xBl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/spawner/random/structure/twelve_percent_spirit_board, -/turf/open/floor/iron/grimy, -/area/station/service/chapel/office) "xBw" = ( /obj/machinery/door/airlock/engineering{ name = "Starboard Quarter Solar Access" @@ -67171,6 +67208,24 @@ }, /turf/open/floor/engine, /area/station/science/cytology) +"xCR" = ( +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chem_lockdown"; + name = "Chemistry Shutters" + }, +/obj/machinery/door/window/left/directional/north{ + name = "Chemistry Desk"; + req_access = list("plumbing") + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/chemistry) "xCS" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/tcomms, @@ -67215,18 +67270,21 @@ }, /turf/open/floor/engine, /area/station/science/cytology) -"xDL" = ( -/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/neutral{ - dir = 1 +"xEe" = ( +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 }, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/table/glass, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/iron, -/area/station/hallway/primary/central) +/area/station/service/hydroponics) "xEf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -67365,6 +67423,10 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) +"xGT" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/cargo/warehouse) "xGX" = ( /obj/effect/spawner/random/maintenance, /obj/structure/cable, @@ -67377,16 +67439,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"xIc" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/railing{ - dir = 8 - }, -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 +"xHC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 }, +/obj/effect/turf_decal/bot_white, +/obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/cargo/storage) "xIp" = ( @@ -67421,24 +67479,27 @@ /obj/structure/sign/departments/medbay/alt, /turf/closed/wall, /area/station/medical/medbay/lobby) -"xIH" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/east{ - name = "Hydroponics Desk"; - req_access = list("hydroponics") - }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 +"xII" = ( +/obj/machinery/vending/wardrobe/hydro_wardrobe, +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, -/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/poster/official/random/directional/east, +/obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/service/hydroponics) +"xIK" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -7; + pixel_y = 13 + }, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "xIM" = ( /obj/machinery/computer/operating{ dir = 8 @@ -67456,15 +67517,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"xJg" = ( -/obj/structure/cable, -/obj/structure/sign/warning/secure_area/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/junction/flip{ +"xJj" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) +/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/structure/cable, +/obj/structure/tank_holder/extinguisher{ + pixel_x = -9 + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "xJv" = ( /obj/machinery/light/directional/north, /turf/open/floor/iron/recharge_floor, @@ -67473,6 +67540,26 @@ /obj/structure/sign/warning/docking, /turf/closed/wall, /area/station/hallway/primary/port) +"xJI" = ( +/obj/machinery/light_switch/directional/west, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/reagent_containers/dropper, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 10 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 10 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/pharmacy) "xJK" = ( /obj/structure/table, /obj/item/stack/sheet/plasteel/fifty, @@ -67495,6 +67582,12 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/testlab) +"xKh" = ( +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/plating/reinforced, +/area/station/cargo/storage) "xKk" = ( /obj/machinery/photocopier, /turf/open/floor/iron/white, @@ -67534,17 +67627,6 @@ }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"xLV" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "xMl" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=15-Court"; @@ -67553,10 +67635,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"xMx" = ( -/obj/structure/chair/office, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "xMz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67603,11 +67681,6 @@ /obj/structure/cable, /turf/open/floor/grass, /area/station/medical/virology) -"xNl" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/security/checkpoint/supply) "xNo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67726,10 +67799,19 @@ /obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"xPe" = ( -/obj/structure/flora/bush/flowers_yw, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) +"xPm" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Research Director's Office"; + name = "Research Director's Fax Machine" + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "xPy" = ( /obj/machinery/camera/directional/north{ c_tag = "Atmospherics - Hypertorus Fusion Reactor Chamber Fore" @@ -67780,10 +67862,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"xQO" = ( -/obj/machinery/exodrone_launcher, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "xQT" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/effect/turf_decal/siding/wood{ @@ -67821,6 +67899,15 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/plating, /area/station/engineering/atmos) +"xRO" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "xRR" = ( /obj/structure/bodycontainer/morgue/beeper_off, /obj/structure/bodycontainer/morgue/beeper_off{ @@ -67847,33 +67934,12 @@ "xRZ" = ( /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"xSo" = ( -/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 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) -"xSI" = ( -/obj/structure/table/wood, -/obj/item/toy/mecha/honk{ - pixel_y = 12 - }, -/obj/item/toy/dummy, -/obj/item/lipstick/purple{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/lipstick/jade{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/lipstick/black, -/obj/structure/sign/poster/contraband/random/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood, -/area/station/service/theater) +"xSc" = ( +/obj/structure/frame/machine/secured, +/obj/effect/decal/cleanable/robot_debris, +/obj/effect/turf_decal/box, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "xSO" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -67894,6 +67960,14 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"xTe" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "qmroom" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "xTg" = ( /obj/structure/chair/comfy{ dir = 4 @@ -67918,21 +67992,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/break_room) -"xTS" = ( -/obj/effect/turf_decal/trimline/green/line{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/item/reagent_containers/cup/rag, -/obj/item/reagent_containers/cup/glass/coffee{ - pixel_x = -3; - pixel_y = 9 - }, -/turf/open/floor/iron/dark, -/area/station/service/cafeteria) "xTT" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -67955,6 +68014,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/dorms) +"xUm" = ( +/obj/machinery/computer/operating{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/clock/directional/west, +/obj/item/radio/intercom/directional/north, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "xUu" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -67980,6 +68049,17 @@ }, /turf/closed/wall/r_wall, /area/station/hallway/primary/fore) +"xUE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/wideplating_new, +/obj/structure/railing, +/obj/effect/turf_decal/tile/green/half/contrasted, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "xUH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -68043,40 +68123,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) -"xVE" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -1; - pixel_y = 5 - }, -/obj/item/pen, -/obj/machinery/button/door/directional/east{ - id = "Engineering"; - name = "Engineering Lockdown"; - pixel_y = 16; - req_access = list("engineering") - }, -/obj/machinery/button/door/directional/east{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_y = 24; - req_access = list("atmospherics") - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/computer/security/telescreen/engine/directional/east, -/turf/open/floor/iron, -/area/station/security/checkpoint/engineering) -"xVP" = ( -/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_white, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/storage) "xWm" = ( /obj/structure/rack, /obj/item/restraints/handcuffs{ @@ -68100,6 +68146,12 @@ }, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) +"xWr" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/machinery/light/directional/east, +/obj/machinery/computer/security/telescreen/interrogation/directional/east, +/turf/open/floor/iron, +/area/station/security/brig) "xWE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -68116,22 +68168,27 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"xWI" = ( -/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/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "xWJ" = ( /obj/machinery/drone_dispenser, /turf/open/floor/plating, /area/station/maintenance/department/science/central) +"xWY" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -6; + pixel_y = 5 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "xXh" = ( /obj/machinery/photocopier{ pixel_y = 3 @@ -68214,6 +68271,16 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain/private) +"xXR" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "xXW" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -68255,32 +68322,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/space/nearstation) -"xYL" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/obj/machinery/button/door/directional/west{ - id = "qmroom"; - name = "Privacy Blast Doors Control"; - pixel_y = -7 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/light_switch/directional/west{ - pixel_x = -22; - pixel_y = 5 - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "xYM" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -68293,6 +68334,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"xYT" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "xYV" = ( /obj/structure/table/glass, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -68309,6 +68365,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/burnchamber) "xZb" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, @@ -68364,24 +68424,6 @@ /obj/machinery/monkey_recycler, /turf/open/floor/iron, /area/station/science/xenobiology) -"yaC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wideplating_new{ - dir = 4 - }, -/obj/item/storage/toolbox/fishing, -/obj/item/storage/toolbox/fishing, -/obj/item/fishing_rod, -/obj/item/fishing_rod, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) "yaD" = ( /obj/structure/table, /obj/item/stack/rods/fifty, @@ -68426,23 +68468,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/theater) -"yaU" = ( -/turf/closed/wall/r_wall, -/area/station/science/ordnance/burnchamber) "ybl" = ( /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/turf_decal/delivery, /obj/machinery/incident_display/delam/directional/north, /turf/open/floor/iron, /area/station/engineering/main) -"ybn" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "ybu" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -68455,17 +68486,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/chapel, /area/station/service/chapel) -"ybC" = ( -/obj/structure/table/wood, -/obj/item/storage/photo_album{ - pixel_y = -4 - }, -/obj/item/camera{ - pixel_y = 4 - }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain/private) "ybN" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ @@ -68481,6 +68501,16 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"ycf" = ( +/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, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "ych" = ( /obj/machinery/camera/directional/east{ c_tag = "Xenobiology Lab - Pen #5"; @@ -68530,6 +68560,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"ycv" = ( +/obj/effect/spawner/random/engineering/tracking_beacon, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "ycw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -68556,23 +68590,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/locker) -"ycQ" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south, -/obj/item/stack/sheet/glass, -/obj/item/assembly/flash/handheld, -/obj/item/assembly/signaler, -/obj/item/assembly/timer{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white, -/area/station/science/lobby) "ydb" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -68583,6 +68600,11 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"ydi" = ( +/obj/structure/railing/corner/end/flip, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "ydj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, @@ -68591,6 +68613,13 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"ydp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "ydq" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -68631,16 +68660,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"yem" = ( -/obj/machinery/computer/operating{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/sign/clock/directional/west, -/obj/item/radio/intercom/directional/north, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "yeq" = ( /obj/machinery/conveyor{ dir = 1; @@ -68651,23 +68670,6 @@ }, /turf/open/floor/plating, /area/station/cargo/storage) -"yer" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/structure/sign/warning/secure_area/directional/west{ - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/red/opposingcorners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/tile/yellow/opposingcorners, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "yeu" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -68696,6 +68698,15 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"yeV" = ( +/obj/structure/closet/secure_closet/hos, +/obj/item/clothing/shoes/cowboy/black, +/obj/machinery/camera/directional/north{ + c_tag = "Head of Security's Office" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) "yfg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -68705,22 +68716,6 @@ }, /turf/open/floor/plating, /area/station/medical/chemistry) -"yfh" = ( -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ - dir = 10 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 5 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/sign/poster/official/wtf_is_co2/directional/north, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "yfm" = ( /obj/effect/turf_decal/trimline/dark_red/mid_joiner, /obj/effect/turf_decal/trimline/dark_red/line, @@ -68733,12 +68728,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"yft" = ( -/obj/structure/railing/corner/end/flip, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "yfw" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68768,6 +68757,10 @@ }, /turf/open/floor/wood, /area/station/service/library) +"yfX" = ( +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "ygb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68780,31 +68773,12 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"ygj" = ( -/obj/structure/table/reinforced, -/obj/machinery/camera/directional/north{ - c_tag = "Science Robotics Office"; - network = list("ss13","rd") - }, -/obj/item/radio/intercom/directional/north, -/obj/item/storage/medkit{ - pixel_x = 7; - pixel_y = -3 - }, -/obj/item/storage/medkit{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/healthanalyzer{ - pixel_x = 4; - pixel_y = 6 - }, -/obj/item/healthanalyzer{ - pixel_x = -3; - pixel_y = -4 - }, +"ygk" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/structure/cable, /turf/open/floor/iron, -/area/station/science/robotics/lab) +/area/station/cargo/sorting) "ygp" = ( /obj/machinery/status_display/ai/directional/north, /obj/structure/cable, @@ -68816,13 +68790,22 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) -"ygB" = ( +"ygt" = ( +/obj/structure/table/wood, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, /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_white, -/turf/open/floor/iron, -/area/station/cargo/storage) +/obj/machinery/button/door/directional/east{ + id = "corporate_privacy"; + name = "corporate showroom shutters control"; + req_access = list("command") + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet, +/area/station/command/corporate_showroom) "ygR" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 4 @@ -68863,17 +68846,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/science/research) -"yhz" = ( -/obj/item/storage/medkit/regular{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "yhK" = ( /obj/structure/chair, /obj/effect/turf_decal/stripes/line{ @@ -68925,6 +68897,21 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/chemistry) +"yim" = ( +/obj/structure/table, +/obj/machinery/camera/directional/north{ + c_tag = "Medbay Paramedic Dispatch"; + name = "medical camera"; + network = list("ss13","medical") + }, +/obj/machinery/fax{ + fax_name = "Medical"; + name = "Medical Fax Machine" + }, +/obj/structure/noticeboard/directional/north, +/obj/structure/sign/clock/directional/west, +/turf/open/floor/iron/dark, +/area/station/medical/office) "yiJ" = ( /obj/structure/chair/sofa/right/brown, /obj/item/toy/plush/moth{ @@ -68993,13 +68980,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"ykO" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/trimline/brown/filled/arrow_cw{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "ykR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/window/right/directional/west{ @@ -69023,31 +69003,24 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"yle" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/machinery/button/door/directional/north{ - id = "rdrnd"; - name = "Research and Development Containment Control"; - pixel_x = -6; - req_access = list("rd") +"ylf" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/right/directional/west{ + name = "First Aid Supplies"; + req_access = list("medical") }, -/obj/machinery/button/door/directional/north{ - id = "rdordnance"; - name = "Ordnance Containment Control"; - pixel_x = 6; - req_access = list("rd") +/obj/item/clothing/glasses/blindfold{ + pixel_y = 3 }, -/obj/machinery/button/door/directional/north{ - id = "rdoffice"; - name = "Privacy Control"; - pixel_y = 34; - req_access = list("rd") +/obj/item/clothing/glasses/blindfold, +/obj/item/clothing/ears/earmuffs{ + pixel_y = 3 }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/rd) +/obj/item/clothing/ears/earmuffs, +/obj/item/clothing/glasses/eyepatch, +/obj/item/clothing/suit/jacket/straight_jacket, +/turf/open/floor/iron/dark, +/area/station/medical/office) "ylt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -79474,10 +79447,10 @@ lMJ aaa aaa aaa -jkA +mWd aaa aaa -jkA +mWd aaa aaa aaa @@ -81284,7 +81257,7 @@ aDa aDa iYU oSc -wBx +xtY aDb rew lGL @@ -81351,7 +81324,7 @@ aaa aaa aaa aaa -mrj +nLZ aaa aaa aaa @@ -81839,7 +81812,7 @@ aaa aaa aaa aaa -jkA +mWd aaa aaa aaa @@ -82335,7 +82308,7 @@ cUd sCz oHw xOO -cUL +bqg ahe slD nyF @@ -82349,10 +82322,10 @@ pOa rJS pOa jUb -lvY +jCs sZK heE -mmw +kzZ xZu dMk nBy @@ -82547,7 +82520,7 @@ lMJ lMJ lMJ jXu -myS +pHK mXz oFR ycr @@ -82627,19 +82600,19 @@ aox lMJ aaa aaa -vnP +qWg aaa aaa aaa aaa aaa -jhN +bxr aaa aaa lZV aaa aaa -vnP +qWg aaa aaa aaa @@ -82804,8 +82777,8 @@ aaa lMJ aaa nmg -wFI -btD +cHR +jEa jXu jXu jXu @@ -82817,7 +82790,7 @@ nmg jXu kBS rOz -alG +mlH sHu cVL jZW @@ -82828,7 +82801,7 @@ twr sHu aPk jXu -uEM +vzG qDD crk slD @@ -83318,7 +83291,7 @@ aaa aaa lMJ qGV -nZs +kHO tvR aaa aaa @@ -83669,7 +83642,7 @@ qPC rKQ xjH xjH -uUK +fIR aaa aaa lMJ @@ -83861,7 +83834,7 @@ aaa fcq uEw fcq -wGP +duW uhI vrP hve @@ -83902,7 +83875,7 @@ uxS uxS uxS uxS -tgz +jBO jUb jUb jUb @@ -84132,26 +84105,26 @@ kOK kOK htE xxg -jSh +nMY jzp dGQ kEm ifF olq njE -uYU +onN pOa lEu uOH pOa sXI -mmN +cYY tYZ jUb hWj coJ uxS -oDV +fNI uxS bCE wGz @@ -84406,7 +84379,7 @@ pOa pOa jUb aaD -dtD +hWD etv jUb fYq @@ -84415,7 +84388,7 @@ jUb dyd jXO jUb -exz +wgl jUb kXU jUb @@ -84429,7 +84402,7 @@ aaa xjH ocN ark -juY +uGq iam kHk gqI @@ -84697,7 +84670,7 @@ rKQ rKQ xjH xjH -sYw +ktw aaa aaa lMJ @@ -84839,7 +84812,7 @@ aaa aaa aaa aaa -cNX +xtw aaa fcJ aaa @@ -84860,7 +84833,7 @@ aaa aaa lMJ rqa -oJi +fiX iQd aaa aaa @@ -84921,9 +84894,9 @@ pSw pAe aZL jgk -pge +qnr pAe -oPW +rzB pAe jUb cBc @@ -85117,13 +85090,13 @@ aox aox jXu jXu -imF +ojz jXu lMJ lMJ lMJ pnI -eYC +vuz xDu pcS pnI @@ -85145,12 +85118,12 @@ aaa fcq fcq pck -vTO +lku uEw nJG -wSb -iez -ctu +jjn +jQr +kKd mjg dHc dHc @@ -85367,14 +85340,14 @@ aaa aaa aaa aaa -jkA +mWd aaa aaa lMJ lMJ nmg vEV -mrU +rnf jXu paD paD @@ -85388,7 +85361,7 @@ lMJ lMJ lMJ aox -ugZ +uNZ hxo aSZ lXG @@ -85396,19 +85369,19 @@ hxo lXG deU hxo -ahb -msn +iNH +kyu lMJ fcq -lQw -lQw +fur +fur wEz aaq -mdv +aOA wUt fcq -oyu -pQX +jPE +auh crr crr crr @@ -85429,7 +85402,7 @@ pOa pOa uOH jUb -gRS +xIK bar nBp dqN @@ -85456,7 +85429,7 @@ jUb aaa aaa rKQ -iJT +iyC rKQ aaa aaa @@ -85631,11 +85604,11 @@ jfG jfG jXu kXA -spe +mwo jXu qRU -iAV -mWe +kqh +com hKg hKg fQW @@ -85648,20 +85621,20 @@ aaa aaa hxo bnA -pwL +riU oDJ -nXf +lAa fyz hxo aaa aaa cbz cbz -vZY +dBE vQs vQs vQs -lxV +hor vQs vQs iSk @@ -85681,7 +85654,7 @@ lMY pOa mrN gXe -bME +vwi tql pOa aDl @@ -85713,7 +85686,7 @@ jUb jUb xjH xjH -wTc +bVK xjH xjH lMJ @@ -85725,7 +85698,7 @@ rKQ rKQ xjH xjH -uUK +fIR aaa aaa aaa @@ -85885,14 +85858,14 @@ dqo eXy wCf wVa -pQw +jTl jXu jXu -gNn +qTL jXu pJp -agk -wWg +rud +emU bZz qvY kRe @@ -85912,14 +85885,14 @@ dZB hxo hxo hxo -cJp -hbW -nhe +pYM +eOb +gvA vQs -hxg -qMp +ePj +tnF dKY -dTe +kif vQs dHc dHc @@ -85969,7 +85942,7 @@ shK jUb tzt xjH -rIm +sMo sOM lDj xjH @@ -86143,13 +86116,13 @@ jfG jfG gYE lBm -pSq +ecm ybN -hsL +tJB jXu qrL -njh -wmv +iLT +vdg bZz pPh aFd @@ -86161,32 +86134,32 @@ uvw yeq yeq yeq -nbM -ykO -rAi -hEQ -sfW +cvv +wcy +kkk +fXZ +sUc vsO vsO uAu -jbU -iHs -cJs +rmS +dme +exQ vQs -vKi -pRr -nEH -blg -xlA +cna +hjt +gEx +bGu +slZ vQs -gxk +puW hyW -qUN +pTf iOc qwG fjD rEj -vTL +vCu cwc kXa fjD @@ -86234,7 +86207,7 @@ aaa aaa lMJ lMJ -mDi +cCM cDD lMJ lMJ @@ -86396,47 +86369,47 @@ aaa qvJ nxi bWw -ndv -cfX +mqn +dwI iPE vfv -gvy -rAt -smy +wXv +qCm +tXO jXu iGB -hlW +duc paD paD jpG kRe nVG -sbo +pDf hKg hKg -jhx -tMX -nJb -nNb -quh -ejz +ouu +jKc +sCs +nxG +xop +hhR aok -jxo -kTQ -twg -nNb -nNb -dcO +coz +xXR +cmX +nxG +nxG +bPc aok -tgH +wbp vQs -tHH -wub -oNG -doN -oyC +lPn +tnk +eED +sTU +cJT vQs -spy +qlz hyW rEO iOc @@ -86448,9 +86421,9 @@ vsr fRG vsr wfZ -ezu +soa pOa -myZ +aFz sXI sNM tYi @@ -86470,7 +86443,7 @@ liC jUb aRz uSz -iCD +oWQ vJy njc ctq @@ -86484,8 +86457,8 @@ jUb fRg xjH tAc -vAm -jEf +wqJ +prx xjH aaa aaa @@ -86653,45 +86626,45 @@ aaa qvJ nIj gYC -tro +ggZ isO gYE uEC wgw twr -idT +fpn jXu bZz -ddR +vRr paD -fyi +hZg dSG -wzY -iCP -jkV +apC +sUD +sWU mUz -jaD -pWW -bUg -pZU -bUg -bUg +jIl +hWC +cEY +tqo +cEY +cEY aok -lei +xrv aok -kpu +xHC aok -hjA +xgb aok -kpu +xHC aok -dcS -weI -kod -eGO -cua -mmt -jDa +vlk +fqe +iWZ +ojW +hpj +uSO +pSY vQs tiD hyW @@ -86699,7 +86672,7 @@ rEO iOc rcW fjD -cUF +nhS fjD cdv fjD @@ -86754,7 +86727,7 @@ gAf tSw tSw aaa -ieS +gda aaa aaa sGL @@ -86910,45 +86883,45 @@ aaa qvJ kVR jCM -unb +lWL wvR pQu vEH jXu vVp -mrZ -npy -oHn +wgQ +fmG +jmU jBl -lMH -gNv -kJG -fIe -tTd +ycf +unc +xyz +jGb +uMj poj -aJt -ojd -mWD -dAk -dAk +hnV +tPt +gUH +omc +wBK rhn -ePE +qnj iqt -ygB +lUx iqt -oNm +jNR iqt -xVP +rlr iqt -skD +ckB iqt -gSz -elg -qps -lYm -mzY -fsS -qcD +lvh +ubj +xbZ +kZI +nbd +vKn +fNz vQs vQs hyW @@ -86987,7 +86960,7 @@ xUu mue xUu kIR -stq +tMS xUu gjk kIR @@ -86997,7 +86970,7 @@ xUu nCL iCX oGf -kRa +sPq rab iTH bhS @@ -87167,13 +87140,13 @@ aaa qvJ adD eks -cXD -eqi -whc -ujS +jox +cVC +eZo +qmE jXu -gQl -vms +whs +xkj jXu beo sLU @@ -87181,34 +87154,34 @@ aZj cSP cLj kRe +kRe tid qTf -oor -oor -hDX -xNl -sqN -hNT -kcD -bgx -wlG +hKg +cbz +cKD +wfp +aQb +oRO +aok +pkM aok -cOt +mml aok -rBP +uEP aok -qeS +cfH mmR -dcS -weI -fET -jMX -fiq -dHa -dHa -xwB +vlk +fqe +vHa +nNB +qoY +rPp +rPp +ljH vQs -wEm +mQa rEO mux pOa @@ -87264,7 +87237,7 @@ rKf tSw laL tSw -xJg +aBQ qEf qEf aIl @@ -87424,13 +87397,13 @@ pma pma pma hZQ -mwi -kRW +ntm +kHV jXu jXu jXu jXu -wXs +tCF jXu jXu jXu @@ -87438,35 +87411,35 @@ jXu hzb cLj kRe +kRe cBZ wyP -oor -jqr -rrw -xNl -xNl -mmR -cwY -iqt -ujN +hKg +kyf +kFQ +xKh +eDO +kFb aok -wEr +oNR aok -cPb +pkM aok -lWp +jBu +aok +hKQ mmR -aWS +gxu vQs -eus -tmn -bxc -nUl -dtt -fkH +vde +tGU +hYl +caV +eMK +eIc vQs hyW -ffJ +qzC kOQ lxM kDS @@ -87532,7 +87505,7 @@ gnL ckz dWA ecz -uUK +fIR aaa lMJ aaa @@ -87665,9 +87638,9 @@ lMJ aaa aaa cmB -ryn -bHI -lHy +wsG +opF +sbX jTi wyn iOr @@ -87679,51 +87652,51 @@ tOm tOm ntM pgJ -oDd +pyR hZQ -iMK +uQL twr gQg pCk twr xgB -mkB -lml -jLp -ekU -fcS -gKi -yft -lIk +hJO +duG +omV +fhn +cuh +jBp +cLj +ydi +qHt dxo hlE -oor -kjF -lYw -pzn -hDX +hKg +ljT +jrQ +qlh +oHm +sOE aok -ked -bgx aok aok -oii -dKt -dKt -dKt -bIE -tiV -aYy -juq -juq -nLA +xtH +qDW +qDW +qDW +ocS +eaA +vAT +xGT +xGT +bHv vQs vQs vQs vQs vQs -umw -rsa +upM +pqc rkM pOa hKp @@ -87922,8 +87895,8 @@ lMJ aaa aaa cmB -ihJ -ovq +nNo +tCC qDS tVo ese @@ -87931,53 +87904,53 @@ iOr aaa raz raz -rIR -mEJ -bWs -mEJ +pQh +uEs +qCM +uEs aFZ ktG -lsG -kLT -oZa +hQy +hYG +dwH fUr fUr fUr fUr -mlY -mtV -ceY -jTL +bkJ +iIE +cAf +dve jXu -fit -otF +pVV +cLj +cUt iId tkf wZo -oor -hvo -bqP -okS -oor -agB -duo -hLL +hKg +rgW +nkq +bNw +nxI +gsV +dfk dfk dfk -tSD -mdW -iGl -uLA -sBq -xIc -jtB -cCe -car -qSs -pZK -oMX -fYU -iCM +rQD +nsh +vWD +sCc +liU +nrB +smB +tik +sxk +xwa +fjw +cwY +sbF +flG bzH hyW rEO @@ -88006,7 +87979,7 @@ kRA jUb xYq dqN -rhs +baG jUb rvI jUb @@ -88019,7 +87992,7 @@ oZO bMS jUb dqN -bdE +vCC jUb jdH oBv @@ -88191,53 +88164,53 @@ aaa tOm tOm tOm -xxE -aqW -ueS +tsi +hTG +gJM srk qGP -uLP -aCz +cLN +pkT sHu -rMp +eMY cVL jXu -msQ -kEB +kIJ +sPO twr jXu hKg -lJQ +oMx hKg hKg hKg -oor -jmR -nwA -pvZ -mKj -xSo -wfY -wfY -vtT -tQo -kGr -dGC -vsz -nHE -etx -hod +hKg +hKg +sJq +oOY +aCO +oRx +sAt +fwb +fwb +kQO +qvV +tMn +sFi +cHG +snZ +xgx dfk -fJA +uyf edN -qMB +uya yhL -hzn +nQR hYx -xau +eMf iev -mor -mJf +sus +sly nxF sVY cyk @@ -88437,7 +88410,7 @@ aaa aaa iOr sQq -sFk +rVb viQ dTQ rOP @@ -88452,49 +88425,49 @@ pma pma pma hZQ +hlT jXu +tIU jXu -aHW jXu jXu jXu -jXu -oTW +alA lpS lpS lpS ykL lpS lpS -pFF +xoj lls jXu jXu jXu jXu cbz -xyd -gOC -gYY -coE -coE -wbT -raN -kfh -lTn -jOS -hod -utz -bOP +lcI +gQa +dit +uBj +uBj +bDn +xzx +hIp +qCS +bJX +xgx +rzo +quT iev -wPw -seO -seO -nnL +pjX +ebd +ebd +bfw iev iev -lkv -flY +bBy +qZO pYn sVY psr @@ -88557,7 +88530,7 @@ tSw gOp bCM vKd -cPa +ikY tSw lMJ aaa @@ -88707,16 +88680,16 @@ aaa aaa aaa aaa -tdg -hkj -sQp -kuW -pDw -ujT -dYi -iDG +nmg +haZ +uSh +fzo +rNP +ieD +ssu +ggW jXu -idT +fpn knQ bPM sHu @@ -88725,32 +88698,32 @@ jXu bPM rNP mgv -xmh +qgl lpS lpS bkF cbz -sxN -vWA -srr -vMt -iKe -sGs -kfR -kfh -hva -nwZ -cCi -nAc -mhu -pZV -eLU -wwf -qLI +jMb +kKO +vQT +hBo +gWz +kQv +cgZ +hIp +ksM +lQf +wsx +dsJ +npX +dtw +lzD +sHX +uyh hvB sqt iev -hUV +djn iVs fLd fpy @@ -88964,16 +88937,16 @@ aaa aaa aaa aaa -tdg -hkj -hkj -kuW -lBj -wkG -mUF -peu +nmg +gOO +rMd +eVG +rkX +wwN +aZz +kgZ jXu -idT +fpn jXu jXu jXu @@ -88985,29 +88958,29 @@ jXu jXu jXu kAI -hwD -ufm -qtu -tcY -oAt -ixt -ixt -oAt +gfa +eOl +vjg +mLp +kQP +xTe +xTe +kQP kQP wdM -wrI -xlc -wHq -ohO +asT +dHi +kkB +lVp bzH bzH -dGx -aEy -lbb +rGk +xRO +rNA hOh lAi bzH -nlK +azz uxa mmm vjv @@ -89221,16 +89194,16 @@ sjP sjP lMJ lMJ -tdg -hkj -xQO -dfU -ikL -qST -xMx -qrF +nmg +vUL +xSc +pnl +xgB +yfX +pGJ +fMa jXu -tgE +vxO jXu aaa aaa @@ -89242,26 +89215,26 @@ aaa aaa jXu twr -hfB -tCN +nsT +heR kQP -bSp +hqD kQP -cfJ -lMD -juL +eTt +nwm +izI kQP -gpq -nuw +eRd +cIl qxJ -lPw -haJ -bzH -nEt -bUb -kas -nlY -jHW +vNp +erU +aqG +uuW +pPm +jHM +hCh +exB vjU bzH buH @@ -89460,7 +89433,7 @@ tGX aXa aKl lds -tmy +mzm hXQ bVF fGP @@ -89478,16 +89451,16 @@ dMH sjP aaa aaa -tdg -tdg -tdg -fru -lXd -uzb -phP -rgL +nmg +nmg +nmg +jXu +tjt +aUU +uQm +jzq jXu -nut +paU jXu aaf rlU @@ -89499,26 +89472,26 @@ rlU aaf jXu sxn -qks -rdq -xBj -fkM -xYL -rLL -xgF -psM -aoh -fMA +ciE +dUd +rtz +fpV +tQp +bEK +ydp +cNb +mXO +kUG rVn qxJ -wdP -spP -fRd -tJQ -bsv -qat -kas -ubn +sik +ryV +mhM +qCx +cap +wbW +wbW +ygk hld iev rKI @@ -89537,7 +89510,7 @@ mjr nxz ueD sVY -wRM +wDH rSx pEH pEH @@ -89545,7 +89518,7 @@ pOa shl cIW pOa -kNJ +jwp qCL uIM ahg @@ -89744,7 +89717,7 @@ jXu jXu jXu jXu -cHr +otQ jXu aaa rlU @@ -89756,29 +89729,29 @@ rlU aaa jXu jXu -xLV +ken kQP -sgU -sFe -jgi -iUI -jgi -cwE -aoh -oCj +hQc +dFg +wyV +iqo +wyV +cJt +mXO +alu aUm jvv -nqC -kFy -hIh -fSM -aie -qjN -afe -bLj +bNN +rod +sgZ +gav +hab +uyP +ejD +rUd rnh iev -bah +nJJ nqo qsX sVY @@ -89806,7 +89779,7 @@ xYM aez ajK aSe -kdl +jeL jxc tuC iMv @@ -89832,7 +89805,7 @@ abX xTO lEP lEP -wab +chn tBJ tBJ tBJ @@ -90001,41 +89974,41 @@ sOP twr fnJ jXu -mKh +wgm fsQ aaa rlU qrg cpi cpi -pNa +nSn qpD -hvf -auQ +qYC +pNC uqX -rQe +loR kQP -uSF -sFe -jgi -jgi -jgi -lND -aoh -pna -vRu +ewc +dFg +wyV +wyV +wyV +oxX +mXO +vdW +oac fhB -wyO -wRb -aqG -miY -bsv -dxr -wMD -blt -bzH -bzH -mMI +hxd +rtG +oor +oor +wme +oor +xbu +oor +oor +oor +pNk ivB qaw sVY @@ -90059,7 +90032,7 @@ pOa sQY nPt qSk -uAw +pBs lgC avb uPi @@ -90258,41 +90231,41 @@ dEH pOi bMu jXu -sga +agi fsQ aaa rlU trx uWn -tND -fqF -eUz -utG -lGQ +spf +czD +lBg +tWU +wWe aTU -rka +jzE kQP -lJz -enm -hmx -noX -lUJ -gDb +ezw +aSv +aLW +jle +ukm +dLh kQP -vmS -gHa +pUk +upN qxJ -kNa -seJ -bzH -qub -dhB -cHp -ghR -oQV -exw -bzH -iHZ +ajq +vwg +afW +agd +rBB +kJk +xJj +gZq +aiy +oor +mnP tEr iOc sVY @@ -90511,47 +90484,47 @@ sjP aaa nmg hwo -jdQ +rBY knQ -dLM -dBS -rCa +cDV +sLf +uEA fsQ aaa rlU -lFD +vbF wHW wHW -bmn +okj rlU -hvf -auQ -lpt -enJ +qYC +pNC +qme +cNg kQP kQP -aoh -aoh +mXO +mXO kQP kQP kQP kQP -aEp -clf -iRR -faA -nKn -bzH -bzH -nco -cvX -qNn -nLV -wwv -wAm -gsl -ybn -fLp +rcR +hIu +liX +jUs +nDG +oor +oor +oby +kDb +imT +gPw +qNL +fEV +pVK +xOw +uCR sVY sDT mjr @@ -90573,7 +90546,7 @@ clp etn ayH pOa -hap +bjK jqQ mbV hEA @@ -90617,7 +90590,7 @@ gwS oxT sEE hrG -xBl +lPB vQg gYU pIs @@ -90772,41 +90745,41 @@ wQj jXu jXu jXu -vVm +fOB jXu aaa rlU -dro -lXs +vis +dhz ixT oXK rlU aaa aEH aHt -rQe -uSb +loR +hTM aHt aHt aHt -ijL +eaQ aHt -cIa -wxK -gEZ -sOe -uwx -ePd -kTa -bWA -bzH -xpj -ihh -nms -plu -xwv -aqG -iHZ +qlW +jfg +lay +udU +isA +eKG +iit +pWb +afW +kkA +fMC +uYE +iQb +hRJ +afW +mnP xOw iOc sVY @@ -90879,7 +90852,7 @@ wZe jsr wyC gYU -sEO +rbF rxY ulE aaa @@ -91028,8 +91001,8 @@ jXu jXu jXu sHu -iuX -gxU +lRA +lFF jXu aaf rlU @@ -91041,9 +91014,9 @@ rlU lMJ aEH rhW -liA -gJb -iwD +oRR +lug +cGq wcs hMn ygR @@ -91053,17 +91026,17 @@ mPK lgg kWP lgg -iVQ -lnf -oEn -bzH -aqG -aqG -qjM -aqG -aqG -aqG -fOc +uLE +cSu +nPN +oor +afW +afW +pog +oor +afW +afW +uGU mFo npY qwR @@ -91086,7 +91059,7 @@ sVY xxk ahr bMY -pmw +yim rvq fFi iWD @@ -91304,23 +91277,23 @@ cFp vvH cFp guX -vVg +saD ykR -ipL +bLh pPH hSg uTN -shp +uVm sSV -xiS -qAi -xDL -xDL -ham -xDL -xDL -xDL -xWI +alw +anX +nyb +nyb +xYT +nyb +nyb +nyb +qjH vhB guR lsf @@ -91343,7 +91316,7 @@ bBA txz wYe bMY -aaL +pUM mna gVn cXz @@ -91538,7 +91511,7 @@ eWA sjP aaa aaa -jhN +bxr jXu rOz sHu @@ -91560,13 +91533,13 @@ nZh hSf pID qSp -bYF -jWM +cOj +tcr jfX -xTS +aUC iFC iBt -koU +nrM yaE tmK htd @@ -91792,7 +91765,7 @@ hDE wZz wZz wZz -sjP +qHW iPb iPb uza @@ -91818,9 +91791,9 @@ xnt ifn uOi guX -aQP +ocB kSN -iXv +qTF euo xML gWL @@ -92073,13 +92046,13 @@ kkX ddP bVk bNP -rRz +asi guX -kSH +qIp mLD -tEA +sEM jWR -uUB +fbE pAk ykS hPM @@ -92349,7 +92322,7 @@ oIa pJR uJx sRT -oWD +vsU gaU flu jbd @@ -92361,9 +92334,9 @@ nIR tOh lTM dYb -vJs -sCt -kPk +psv +mZz +cCN dYb dYb tOh @@ -92374,9 +92347,9 @@ nvI oNP ehE rlw -gcR -oVs -cbK +bTm +ylf +tzI bMY uET iZF @@ -92602,14 +92575,14 @@ oIa gja wvo xCl -pgd +nMz pJR -iFl +egp kfA rWH oOE aVd -geh +cKN mig wMx cMQ @@ -92639,12 +92612,12 @@ ePX svQ duu pKP -tgG +cQz rQd cJm -pSB +jGw bJG -eYM +gbn bqX ulR qXL @@ -92657,7 +92630,7 @@ qXL oqk xZB hIJ -qJt +vhb lrZ kiz nmQ @@ -92852,16 +92825,16 @@ iBq mFi iBq iBq -jEC +vxE kON fDc oIa -erw +cpn koa srP nuB pJR -liS +gAk qAA uFQ eIy @@ -92873,12 +92846,12 @@ qRI urA nIR hyN -sQh -kwB +uaN +jIg dTr rIL bwN -kmn +omd ukk rGm gqX @@ -92888,18 +92861,18 @@ qPJ luN wde jJd -ueI -nsg +dQL +umS qPJ bgS taO dlH jsP cOR -urO +jvr xbY scB -cpF +rHk sXT sTK bqX @@ -92915,7 +92888,7 @@ dVN iqz iqz vZF -jnR +xCR kiz svp fxW @@ -93113,7 +93086,7 @@ hZZ htd uoe oIa -nOx +nnq vnE pzT jOv @@ -93121,11 +93094,11 @@ pJR pJR pJR pJR -naI +iiE rGj -odd +rJr pJR -uDf +oUB qRI urA nIR @@ -93142,21 +93115,21 @@ gqX htd oGK qPJ -cEe +rQk waH vbV ixr gzW -ijf +rxa eqc kyQ kHg jhk cOR -baB +vgZ ijZ tYt -jBX +qLk pXM iNc bqX @@ -93382,7 +93355,7 @@ kEp aVd kfC pJR -nSa +aHN qRI urA tYW @@ -93399,12 +93372,12 @@ rym htd oGK qPJ -rha +bKv nsb izD evY sli -aig +oFG lsJ gQG tFr @@ -93428,7 +93401,7 @@ dVN iqz iqz iqz -tpY +ubF hZV skW mXn @@ -93615,16 +93588,16 @@ qWF aaa aJS aJS -kRE +akF pQG wtB -bjf +vyv aJS aaa ihq ooP hZZ -rPO +dfa gmI aKb xel @@ -93634,7 +93607,7 @@ siL grl noA pJR -hSb +fGs mIl fJp bSj @@ -93662,10 +93635,10 @@ qbE qbE qbE qPJ -gSk +klj gQG oBO -skj +jNl pKP xpL eWp @@ -93685,7 +93658,7 @@ bjy iqz tqd pbz -tTZ +dpl hZV bAI idL @@ -93834,7 +93807,7 @@ sjP sjP sjP sjP -gIj +dkX yey jTZ aBL @@ -93891,18 +93864,18 @@ tUH vPW lDo pJR -lwL +gvl hip fJp -iXu +wBu jLQ fgS jrk dhX nIR gBD -cIH -mvm +twl +bcx rhK rKJ wFe @@ -93915,7 +93888,7 @@ ebM uRA mTk yhm -gxo +rbs jHA lln nBB @@ -94130,12 +94103,12 @@ aaa aJS oOl rxx -eOu +viF aPv oWF eQg aJS -gTO +mSI aUx qhF htd @@ -94149,16 +94122,16 @@ aKb pUd pJR lJn -eRC +psy htG -oDC +bIq pJR mQq ndS urA pFG gBD -kCA +dzX fRu hVE xXw @@ -94199,7 +94172,7 @@ uYI iqz bxE hZV -yem +xUm gPl nZm wvB @@ -94211,7 +94184,7 @@ isk iUm bVx fWc -rRd +muZ jay mRy wBW @@ -94385,7 +94358,7 @@ ixP qWF aaa aJS -oDB +dWf nhP aOc aPw @@ -94432,7 +94405,7 @@ asm kqm vLf kXD -sbD +kWO rvE whx cIK @@ -94456,7 +94429,7 @@ uYI iqz iaK hZV -ayG +vzt jBU kgx kgx @@ -94644,7 +94617,7 @@ aaa aJS bpu wzH -eKl +nwL aPv iIQ aRV @@ -94662,7 +94635,7 @@ dsQ sVz aNe jiI -cMJ +kvr jnl dNz dNz @@ -94671,8 +94644,8 @@ tNg vpg ebx aks -fnj -wxE +hux +bbT ilq kAp jnI @@ -94689,19 +94662,19 @@ xEX hYr qAf lrR -oxy -nFM +qwI +xJI tIx wmT hCt -jtF -ted -rtp -bKe +uUb +rXW +bSs +rla eIO sGn fvE -dBv +dYG iqz iqz iqz @@ -94713,7 +94686,7 @@ hbO iqz ogk hZV -dYW +daa uiw kys kWE @@ -94876,7 +94849,7 @@ lAM aaa aaa rJB -qYb +kaU nqD sfK rTw @@ -95157,10 +95130,10 @@ qWF aaa aJS aJS -iOQ +hlB vrJ fEO -hsu +cFr aJS aaa ihq @@ -95172,8 +95145,8 @@ tKN aaf dsQ mZL -aSB -yhz +usQ +aGQ acf hmq dJX @@ -95191,8 +95164,8 @@ aaf inX pRh uCH -jeV -jMT +mWY +mtb oSo nNY htd @@ -95209,7 +95182,7 @@ oHG slC dHN fVY -pCI +mVf fhe ocQ eIO @@ -95233,7 +95206,7 @@ jLy kgx hKB vLo -gxj +aAb tSw dbX iUm @@ -95433,10 +95406,10 @@ nxO qXF qXF aMB -jAJ +tVk duI jnt -usV +cdC kcn qsL dho @@ -95446,29 +95419,29 @@ ndS qRI qRI jzN -hGm +sYh qeZ nBs -cvU -tGQ +eLa +vyi nNY htd tHR sTz xIG -gRV +bKB eAL xQY kcF -jih +cYJ oar keK lXA mVE hxq -cUm +nJn nqB -uHh +kxa eIO hKG fvE @@ -95480,7 +95453,7 @@ iqz iqz sTW cYx -sPh +cXH joj dWI hZV @@ -95652,7 +95625,7 @@ aeq aeq aeq aeq -pce +dRX riY aeq vDh @@ -95690,13 +95663,13 @@ dUj gGy hmq fUj -rgV +qcD duI duI -aif +lwt ddm vKL -sGV +gmH lSz aks qzz @@ -95713,28 +95686,28 @@ sNl aZR lYL pBa -vzJ +aNQ nxy nxy aYJ hEc -mPX -gSV -vuf -lsg +bFN +qJn +hYA +jsh rvE tZJ -uRd +vjX tZJ eIO wKC fvE -pKr -usr -hxk -hOs +kKT +kMk +wPH +xyA hgB -wpN +jxm unt bqX bqX @@ -95905,7 +95878,7 @@ aaa aaa aeq xCo -jHp +loY tTP fdQ uou @@ -95917,7 +95890,7 @@ fYJ ycM tYQ dsk -feZ +ewC iAN xnT ycM @@ -95942,12 +95915,12 @@ uoe tKN aaf dho -uak +wss gGy qVc dMY -lnO -ggs +jYL +tpA aAt duI pCO @@ -95960,10 +95933,10 @@ fix yeA tnm jzN -jSp +sUy dkL uOd -fOT +bRp jzN qyI qaP @@ -95980,12 +95953,12 @@ rvE sIG rvE rvE -vqN +sgc lLq lLq eIO qbZ -iou +lRT bqX bqX bqX @@ -95993,7 +95966,7 @@ pJV bqX bqX bqX -iRU +cJL fjq wvh iEv @@ -96159,7 +96132,7 @@ aaa jLw aaa aaa -vRJ +cTk aeq dXs tJE @@ -96205,11 +96178,11 @@ gGy cwX gGy nEC -hnx +pJY duI gGy oLD -eNQ +klI lPZ lyN piz @@ -96217,10 +96190,10 @@ lLk fix haP jzN -lvn +fEC eQe -koi -sZL +qtq +iAA oSo cgF koW @@ -96431,7 +96404,7 @@ mbk ntP bfj hMy -heM +aZr rbw gnm eVa @@ -96466,7 +96439,7 @@ qNV iOp wOR ljL -ovE +mrG lPZ mJE tWV @@ -96688,7 +96661,7 @@ ewj bkl wZU pMy -jRd +oGH orx eeq sDS @@ -96717,13 +96690,13 @@ owv dUj gGy dMY -cIg +raJ nEC -jts +qMf duI gGy bIH -cmA +iMi lPZ lyN wXP @@ -96731,10 +96704,10 @@ eGV fix rwi jzN -gJx +wyp gzi -wOO -nwx +cyU +wpo oSo iXb kdx @@ -96926,7 +96899,7 @@ aaa aaa aaa aaa -aFb +tLb iTZ ahj ahj @@ -96970,7 +96943,7 @@ tGL tKN aaf dho -gcN +vSh gGy gGy dMY @@ -96988,10 +96961,10 @@ fix mIu haP jzN -akQ +tNC nvc nBs -hsG +mun jzN bcq sRf @@ -97021,9 +96994,9 @@ fma fma kor aQS -kED +qCY kQe -adC +qYt qDa oIg oIg @@ -97202,10 +97175,10 @@ ayV gFR khm uok -vre +bzV ezg uVv -vwL +pdI pjh gpc gGo @@ -97232,13 +97205,13 @@ dUj qVc wNh veO -pbR +iAj duI duI -lxB +wtX ppB nEC -sGV +gmH ebx vQe kHn @@ -97260,17 +97233,17 @@ rgZ suW hJF cZK -pds +euw cXg nyy gVl -nsj +usg fma ebV dZb ebV fma -dOj +xgi sck iwA puP @@ -97281,9 +97254,9 @@ dPY xWJ oIg cId -aGW +rQl oIg -odg +wBq bEC lsV aXW @@ -97296,7 +97269,7 @@ jjs dKC xLu dKC -aRx +cbp ctL oPD iUm @@ -97489,10 +97462,10 @@ lNH qXF qXF aMB -pvl +mvZ duI jnt -tqb +pOK sLd mRn dho @@ -97505,8 +97478,8 @@ jzN aAI gzi krL -ukP -tGQ +cqm +vyi wpx htd tHR @@ -97537,10 +97510,10 @@ ujJ ujJ ujJ oIg -dSd +cDM poS byf -eeD +kBu oir wal tzg @@ -97716,10 +97689,10 @@ duF cJj erx lsP -phd +vYF eaP lTj -nOg +jau afj qGs gCD @@ -97742,8 +97715,8 @@ tKN aaf dsQ kGc -bYU -viN +dTV +gkD nXm wNh veO @@ -97761,8 +97734,8 @@ aaf inX sxA cPU -sDY -jGp +ygt +dqu oSo wpx htd @@ -98000,7 +97973,7 @@ aaf dsQ dsQ dho -szD +rhL sLd qXF aMB @@ -98037,7 +98010,7 @@ iug nZf uTP eut -ygj +vlY uwK wmg jAt @@ -98270,7 +98243,7 @@ bcT xPN vQe kmZ -lSV +buL pha sdp vxB @@ -98286,7 +98259,7 @@ xdX pZc fak jUh -ycQ +vsI cZK wfA cBV @@ -98294,16 +98267,16 @@ wsD cBV xlv eut -mvr -tjz -nhQ +bUo +tjc +jtS bFH mMl lhT cqT lhT iMG -okn +dpg bBo gwf gfZ @@ -98311,7 +98284,7 @@ gqm jZP aIO jrb -iAy +vEC eOo rRJ edH @@ -98516,8 +98489,8 @@ aaf dho dho dho -oHD -cBO +iNB +wfD dho syo syo @@ -98533,7 +98506,7 @@ qKg qKg qKg lVl -lip +pic tvE psp wBF @@ -98790,7 +98763,7 @@ nse bmb lwg aAK -kAg +xbg tvE qJU hPM @@ -98808,7 +98781,7 @@ eKA azF eKA uqp -hIL +kaF bse eIV gcU @@ -98816,7 +98789,7 @@ noN bCc bCc eER -toH +kPy eut dEV gwf @@ -98832,7 +98805,7 @@ aHi hrh txG eKP -inp +uBG kXG svS ove @@ -99024,15 +98997,15 @@ sey hPM hvr syo -nSj +bUt vNG -ybC +tIR tyY -eDb +ogL tyY aPs -ttT -kAv +cUX +guO nOq xDa vwP @@ -99042,7 +99015,7 @@ lSz wxk tvE uHa -mxk +aqt yeu vNf cGj @@ -99069,11 +99042,11 @@ obN gwf dMz tga -lMA +btG nJH gso nQX -grU +iYO tga kzQ gwf @@ -99283,7 +99256,7 @@ kGq syo oOz tLi -jCv +nnh tyY vFx tyY @@ -99311,10 +99284,10 @@ kON ylQ bGC wHu -cBv +gVE ibw ibw -azo +nIP gFQ aDm non @@ -99326,11 +99299,11 @@ gVO gwf hCK eut -brN -hca +fZw +wRD lqW xIM -bfy +qTU eut beZ gwf @@ -99509,7 +99482,7 @@ wVt jzD wxj kZG -oMa +ihN kYg kYg ylZ @@ -99520,7 +99493,7 @@ sWV sWV sWV qJb -fEn +rJh hME olw olw @@ -99546,11 +99519,11 @@ eCB tyY xFx sxR -qpK +jxv sqJ gPA -tFv -jVu +lZM +qrw syo lSz vQe @@ -99604,7 +99577,7 @@ dIW iTc qfQ cLk -wqr +oxR svS dKC qkX @@ -99780,7 +99753,7 @@ xNo woV bkZ xNU -bHT +uZL nVy tGI daC @@ -99798,12 +99771,12 @@ syo mIH iFX ifM -oeF +hiZ rDT syL rDT tZD -rrP +snu ifM pdY pXA @@ -99825,7 +99798,7 @@ htd saU tgI mvR -cuh +jRO bPi gpB sky @@ -99861,7 +99834,7 @@ fhi fhi fhi bft -sZJ +jws gyQ iVt iNi @@ -100037,8 +100010,8 @@ jAP fEn xXC xNU -kbW -hPm +eJd +xlf lWg byw glv @@ -100058,9 +100031,9 @@ alg rEg uGj tyY -wYw +iDh nCB -pVR +wll gpS xuH jdv @@ -100082,7 +100055,7 @@ htd saU ooP mvR -inT +rVT iQi fGv knY @@ -100113,7 +100086,7 @@ fMn gal fgH gyQ -sol +hSl fhi fhi fhi @@ -100262,7 +100235,7 @@ aaa aaa aaa aaa -aFb +tLb gdb ikZ gdb @@ -100339,14 +100312,14 @@ htd dhU dkW mvR -cOk -aSf -qqp +bXc +tLH +lnu otB bdv jXK sQB -xzB +gLU buT oOB kZx @@ -100376,12 +100349,12 @@ fhi fhi uEo fiS -yaU -hNu -yaU -yaU -yaU -yaU +rXT +eRn +rXT +rXT +rXT +rXT lMJ uGg nFa @@ -100540,11 +100513,11 @@ pyY sNB xWm mLL -nXB +xWr vkb cLl sWV -kCU +unK mOt clq aKa @@ -100568,7 +100541,7 @@ qBC syo xUx cRU -kqj +oRn sjS xNd tyY @@ -100587,7 +100560,7 @@ icj hda mdy naw -fCP +pQO bwr srp eEH @@ -100605,7 +100578,7 @@ dlG ipM rsD qos -aaj +sLF kZx oBz gTo @@ -100633,12 +100606,12 @@ huj fhi xEU iqx -aJh -hAv -aJh -qvi -vsD -cxT +xYZ +gil +xYZ +oet +dXU +kgC lMJ uGg nFa @@ -100853,7 +100826,7 @@ htd mrJ lvs xJa -est +kxW gWH ivR mxI @@ -100890,12 +100863,12 @@ fhi fhi fhi twy -wtY -gYG -clD -eIv -snj -cxT +nJA +nZL +bEv +cgP +rtj +kgC lMJ uGg nFa @@ -101040,7 +101013,7 @@ aaa rrt lMJ mxn -ulk +mwj psw asM mxn @@ -101092,7 +101065,7 @@ vLb jmT jZR mJN -bBC +cwP sqM hBr jef @@ -101125,9 +101098,9 @@ hNz iTO aEW mzg -dAf +rHh tEt -nxQ +tKR fjb prU aJd @@ -101139,20 +101112,20 @@ jVy jTN vAH kIY -iaF +rbd gyQ -yfh -hme +rbD +jwj ujk -bvU -gqd -lsS -ghS -mkU -ghS -hLV -vsD -cxT +jvo +aHH +iYE +dTN +dEF +dTN +cOT +dXU +kgC lMJ uGg wpn @@ -101309,7 +101282,7 @@ gMZ cju gMZ mFf -wdp +mYb sHt qrn qRg @@ -101366,7 +101339,7 @@ htd cfe ddO sLE -mXK +cEv iQO eeT tUn @@ -101382,7 +101355,7 @@ myB vWz hkE pke -iNX +msJ xKK xKK rJA @@ -101608,12 +101581,12 @@ xCD xCD xCD xCD -nzg +byQ hio vtu cWT xBx -nPo +bdb smG smG gtU @@ -101639,24 +101612,24 @@ olG ohH dTS gtV -fqh +enF tEt -jtg +rMr xff eSl gTU kYU -gzZ +ote vEo -biz +iXp svS kMd hxe -iLU +cuO ove iHv gIK -oWG +buv xLu ktz svS @@ -101856,7 +101829,7 @@ uZj ghl xZW uOX -aBV +myG rac bvJ bvJ @@ -101880,7 +101853,7 @@ fCt uDr uDr sLE -mVo +teq vIB qOM tUn @@ -101888,8 +101861,8 @@ ftj wXF doM tZo -viy -dyz +bXg +oFT gvS oYZ oYZ @@ -101921,8 +101894,8 @@ dpN dpN egk mwY -uVs -kCm +bIa +vYl nFa nFa rDB @@ -102068,7 +102041,7 @@ aaa rrt lMJ mxn -aml +osH gTt sdu fad @@ -102113,8 +102086,8 @@ dZm vFB fRS twN -sGX -uoS +lkc +hhN pBi hkG xEJ @@ -102125,17 +102098,17 @@ uWU oyY dfp tRL -hNh +hrM eQE bNf -gxa +vZM eQE -lVn +hcm fEg wYB kMG -sWq -xIH +wSI +oBM kCZ kMG tlK @@ -102150,7 +102123,7 @@ nBj gYe vQb mdu -xmG +xPm ohZ sac huq @@ -102170,7 +102143,7 @@ nFa svS mHy mHy -kJc +kVq pdi kRV svS @@ -102325,7 +102298,7 @@ aaa aaa aaa mxn -oRk +yeV hUB qmf jTH @@ -102347,7 +102320,7 @@ fRW qnS uxb hAk -tFm +gzO eqn jSb kAF @@ -102385,7 +102358,7 @@ lYR loh nxH mVY -tmx +pQC eQE reJ pcc @@ -102419,7 +102392,7 @@ fnh mMX moF klT -uhd +iWT svS dKC lMW @@ -102630,22 +102603,22 @@ twN rac ekR wCL -kIb +gPh hkG wPE fGH gwc aLk pAr -cPP +wjK cqI -wSU +vtK eQE oWH nBf eQE rVG -tou +kqZ wYB iji cAG @@ -102686,9 +102659,9 @@ ouX bHt snE fFo -jTe -wcO -rMH +pOk +hBI +krN kYD lMJ lMJ @@ -102892,13 +102865,13 @@ gvm uhP cXQ gwc -mzc +pof owi -cUy +nxA hyX -fQh +rrz eQE -dmn +eEf rOM eQE qrQ @@ -102914,9 +102887,9 @@ bWM tUn jGv wXF -pkz -sBz -ipl +uqO +enS +jwP cbg bix vQb @@ -102924,8 +102897,8 @@ ekQ uhT wtP bDm -qBL -hXg +lpR +obQ vQb jbg gwf @@ -102945,7 +102918,7 @@ guG unP gKK otj -pXy +fvK kYD lMJ aaa @@ -103149,11 +103122,11 @@ uFf qVt wxG gwc -fDl +jjF oCn gWl epO -gVa +qrO eQE nnl qfB @@ -103161,7 +103134,7 @@ dDH pkK ocC nmf -kep +lHe gFL xlF xlF @@ -103177,8 +103150,8 @@ jvL vfh kHN tAg -gpb -psu +tcx +nhr vYE wnY nfs @@ -103202,7 +103175,7 @@ guG iAs coe tfV -gwA +nRQ oLS lMJ aaa @@ -103376,7 +103349,7 @@ eek wst mPE knf -kxZ +gGf dIO dIO dIO @@ -103406,7 +103379,7 @@ nGK rPN bIi bTl -rtG +lIB dDq dUo utS @@ -103415,9 +103388,9 @@ eQE mFC wHL eQE -ahu +rem eLI -qqT +ltW jyF gFL byW @@ -103434,7 +103407,7 @@ sIW bRb cKm tAg -yle +byE poq vYE lAH @@ -103459,7 +103432,7 @@ guG gYl nrm egF -xxs +stI kYD lMJ aaa @@ -103658,9 +103631,9 @@ twN qFo lWm gvm -nlS -jgw -kSR +vLM +wSs +rRm fGH lBA uky @@ -103675,13 +103648,13 @@ eQE tIb ndk cve -agP +xEe xoK oxd xlF xlF aWg -cia +jgK tUn dQT wXF @@ -103691,7 +103664,7 @@ sIW jSk rkT tAg -cci +vEv pkx hBB wnY @@ -103715,7 +103688,7 @@ sEZ evE xsn ucm -wor +tUc gkc kYD lMJ @@ -103763,13 +103736,13 @@ lMJ dxK aaf aaf -axS +weq kJi pgU qRS pnk kJi -axS +weq aaa aaa aaa @@ -103915,9 +103888,9 @@ aeb bvJ lWm kdN -jgw +wSs jGA -kiK +mgo fGH fhQ sFB @@ -104129,7 +104102,7 @@ peF liO sSs gkM -fMU +bcw uKL uKL mKu @@ -104210,7 +104183,7 @@ gSH tBp wCq dQA -sKj +ewh elJ qNA gwf @@ -104415,7 +104388,7 @@ pJE pJE nFn uUl -qJH +oYs qXB wzK tcC @@ -104434,11 +104407,11 @@ qpM qVt fGH eHS -sln +bpq mal gMy hPK -pxM +xqv rmj fWW rTQ @@ -104482,7 +104455,7 @@ jJm bLd bLd oWk -jMW +csz guG fJc dVX @@ -104648,7 +104621,7 @@ rwE tgo tgo lOU -hJe +nmI lnc sBa obw @@ -104691,16 +104664,16 @@ qcQ nsk fVC fZV -aoc +dWg mal cfA hPK pgK -rKF +idR dVm -hFq +xWY uIs -pWp +rwa aJI iJK wYB @@ -104726,7 +104699,7 @@ sbK ejL aPX elJ -cza +wGH emh fQo oWk @@ -104744,8 +104717,8 @@ qBF nCG tqx bOm -ati -bNv +fhU +cdS kYD aaa aaa @@ -104791,13 +104764,13 @@ lMJ dxK aaf aaf -axS +weq kJi vpl cDb xOI kJi -axS +weq aaa aaa aaa @@ -104948,25 +104921,25 @@ qcQ kZn fGH gwc -kYX +bUk mal -mEI +eVy hPK -nCO -mOX +cFl +msT lPi -pJB +cuM uIs -fLu +ffL oLF -cTR +nGE wYB kCZ soU gkx gkx nbJ -cia +jgK tUn eLh lQI @@ -105176,9 +105149,9 @@ hJv iEE ejl pFd -htX +nwa lqQ -sdt +nYO geV hvO ued @@ -105205,14 +105178,14 @@ wKu jIk hZn cgl -mNw +uZu mal cfA mqu mJk itg tEy -ilw +nEB uIs bjl vqp @@ -105441,7 +105414,7 @@ jBY aKk lXl nzS -gnJ +gpk qXB kbo tbd @@ -105467,7 +105440,7 @@ mal bDK oRs pem -rWF +eEa huG huG huG @@ -105480,7 +105453,7 @@ uHo beO lXr cZm -uZh +cXc tUn kmN bGL @@ -105497,7 +105470,7 @@ wXF mOD fAI tUn -cHN +tId okQ hEV bLd @@ -105510,7 +105483,7 @@ eWy bLd lpD wYl -cRZ +tit fPD eQY hpv @@ -105712,14 +105685,14 @@ aSk tlZ lje klZ -oCq +bqC fqD -jgw -fdj +wSs +pur oEu gZV jTs -oMC +xsV jXE klS tpF @@ -105736,8 +105709,8 @@ kCZ nKI bZq vrn -vDO -haS +tUt +gOa unL unL ouR @@ -105754,9 +105727,9 @@ wXF wXF wXF wXF -czN +bcb gMQ -czN +bcb oWk clj fwP @@ -105975,7 +105948,7 @@ okX tZX ogb uhW -kIw +eSC obG jqd jzT @@ -106206,13 +106179,13 @@ lnc obw rUo lqQ -fik +fzr iCJ qgy -jPA -miq -miq -yaC +ldg +bYN +bYN +krt qXB psZ qXB @@ -106232,12 +106205,12 @@ gpf ouk jTM wBT -vab +sxX obG sEx gIm sbM -lhu +qKD aNN huG rzk @@ -106248,7 +106221,7 @@ bJp wYB foB siz -lnV +pCL unL laf aJn @@ -106270,7 +106243,7 @@ gcV nNe dBb aHM -lRv +xxQ oWk ddu fwP @@ -106463,13 +106436,13 @@ lnc fDC qdy lqQ -jNX +wRF jzC -tZV -kld -aOt -uHw -fpG +oCO +xUE +jYu +vmU +xyI qXB kbo qXB @@ -106501,11 +106474,11 @@ obG wPU gKS huG -lfV +olP wYB -wjm +gAx siz -qek +hxz unL uNd unL @@ -106720,13 +106693,13 @@ lnc cUP mil lqQ -ozg -xPe -ehy -vZR -gif -dsa -sLJ +lbH +mie +pRM +ivb +otG +ftQ +xwB qXB psZ qXB @@ -106750,10 +106723,10 @@ iEZ uWK gFO rHz -tjR -ejx -xSI -mvG +aFW +dqX +qLp +bpY obG izZ tNQ @@ -106997,13 +106970,13 @@ vFB fRS sGH obG -eBp -vCu -suK +aEA +mZc +iUe dLT -oqN -fEy -mFq +qiY +wAt +utE xXW nst lih @@ -107017,13 +106990,13 @@ cCR unL aLu unL -piR +xII ltX -epk +kbR vOK pnx unL -aqq +kbN gXd szJ heS @@ -107041,7 +107014,7 @@ wZg ojo xfV sBS -oXv +wCb oWk bLd bLd @@ -107264,7 +107237,7 @@ unL unL unL unL -csy +cEx vRU iks cwb @@ -107280,7 +107253,7 @@ unL unL fGW unL -agf +vtI mma iMQ rAo @@ -107298,7 +107271,7 @@ pOw gqa cln sgB -ltV +pbb gFQ aaa aaa @@ -107490,7 +107463,7 @@ psZ bSY kbo kbo -rKX +eqt psZ psZ psZ @@ -107502,10 +107475,10 @@ psZ psZ qXB gAU -dqR +cDO oUK eRR -tjV +fAA cdX sDE hjS @@ -107516,14 +107489,14 @@ ggM ggM dLq lzL -nGZ +vag lzL lzL scG unL -tSy +xAi vQA -fjm +glP deX rJk ofe @@ -107553,9 +107526,9 @@ tUn gFQ gFQ gFQ -seE +aHR ejH -seE +aHR gFQ aaa aaa @@ -107806,7 +107779,7 @@ lMJ lMJ lMJ lMJ -fGB +uzl aaa aaa aaa @@ -108015,7 +107988,7 @@ gLo ofk uXd fDL -hdx +hSt qhw naN fMN @@ -108042,7 +108015,7 @@ gIS xNG gYV lFo -iiC +dQy pDR unL hLs @@ -108053,7 +108026,7 @@ hum jCx cZF uaG -qcH +vPu pQy ovX xYQ @@ -108259,7 +108232,7 @@ rpx dPy loA poc -dgy +oDH uXd tfg tfg @@ -108312,7 +108285,7 @@ lWq lWq lWq qIq -sDB +iCj rDm smg crg @@ -108516,12 +108489,12 @@ oKx gLK joo sHT -jvE +rkx uXd dVc bYp gXu -rnD +hSi uXd gMG dWG @@ -108533,7 +108506,7 @@ nLz fEL rSi pCt -jkr +qHm sqE mEO gnS @@ -108568,7 +108541,7 @@ dRj lWq lWq lWq -mUM +tLg pnH jUi pnH @@ -108800,7 +108773,7 @@ mbJ ncd gYO flE -yer +fcA cVj uKz fnT @@ -108826,7 +108799,7 @@ nmR dQO fIZ ydj -mit +aBW vQh pnH lZk @@ -109044,7 +109017,7 @@ woL jLo nwC nLz -kyG +iSU hYE rEd sby @@ -109292,7 +109265,7 @@ cnK jPe dPy poc -omp +afM cnK giH aJj @@ -109302,11 +109275,11 @@ fbf nie qtm fyJ -hkF +oWm cuc adz tUw -lUl +rHq peX kRi klw @@ -109335,11 +109308,11 @@ sfz wao hum rMT -xtX +svK yec xhb uQk -vJo +waf vzc gUY pnH @@ -109871,7 +109844,7 @@ aaa aaa aaa aaa -ewD +oCX wmL kLC wmL @@ -110129,7 +110102,7 @@ lKu aaa aaa wmL -nRq +apS qkq ooz wmL @@ -110354,7 +110327,7 @@ dkC dwz dwz frE -aQr +cyE uwQ siy lgL @@ -110389,7 +110362,7 @@ wmL cvO uNO hUd -rpr +uWk aaa aaa aaa @@ -111098,7 +111071,7 @@ qLw tdf mdk kYG -jGS +dqE oFH oFH sSz @@ -111158,7 +111131,7 @@ oMA eYu agN bXs -kzw +tLc juH pJA hLJ @@ -111408,7 +111381,7 @@ lMJ aaa aaa uaR -sxt +btC wRL tyj myr @@ -111612,10 +111585,10 @@ hko uLp qTX kYG -hts +uJz iHy vSC -gdy +eKw vPV qsv aYk @@ -111665,10 +111638,10 @@ dxK aaa aaa oMA -cpw -jjD -mYa -lme +enG +fpD +qmi +vOz tsy sRa ppC @@ -111881,8 +111854,8 @@ dRA wCe khu hUu -xVE -ops +kxC +oMh mEG nRp dtY @@ -111925,7 +111898,7 @@ uaR jHX oQk toR -nHl +ePT syV jsi eoZ @@ -112395,9 +112368,9 @@ wsI fia sRW hKi -efX +apO lLB -kDv +qRq rzT cWy xRZ @@ -112646,7 +112619,7 @@ gHI svo jXz fJy -ggG +bJQ mRv kyZ bDq @@ -112905,7 +112878,7 @@ fJy fJy fJy pnJ -uAo +dKl fJy byR iFh @@ -113166,9 +113139,9 @@ rLZ fJy ygp tyE -xuu +qNO bDq -bMW +rRR laE eQJ uBp @@ -113210,7 +113183,7 @@ kWc xiL bus hMv -lVT +iTQ vGq avx vBf @@ -113220,7 +113193,7 @@ qQJ vGq bjs gyI -rWp +lPS xiL kvO bPB @@ -113435,7 +113408,7 @@ efd nwK fFC uVf -mHH +qqs gDq ich jnQ @@ -114751,7 +114724,7 @@ oyj xiL mtu lHh -glW +iNK faD iWc cXP @@ -114761,7 +114734,7 @@ vvD cXP lVB iWc -wQS +gkC xlH mtu xiL @@ -115521,19 +115494,19 @@ hbK hbK oyj xiL -eqo +rMe rwx vFh dac evD pJf -eMC +ycv tIe min min wFy ohD -rOZ +bZb xiL lmn hbK @@ -115781,13 +115754,13 @@ xiL hWa imw iHH -aJw +mcF rrL rSW min ckI sCv -nfC +mDC toM eOP hWa @@ -116810,7 +116783,7 @@ goW msN xiL jlU -uVj +kGR lyL mao mCu @@ -117067,7 +117040,7 @@ rDf uhs fjd jlU -fHZ +oGj sZN msR xkv @@ -117581,11 +117554,11 @@ hbK mgS hbK jlU -jDN -jDN -wIE -jDN -jDN +kcu +kcu +gyK +kcu +kcu jlU hbK mTg @@ -117838,11 +117811,11 @@ tmU fGy wyo jlU -orl -jDN -wIE -jDN -jDN +dLm +kcu +gyK +kcu +kcu jlU qgn mCV @@ -118095,11 +118068,11 @@ pWT rDf uLa jlU -jDN -jDN -lLV -fpR -jDN +kcu +kcu +jQz +nJr +kcu jlU lUS pHt @@ -118352,11 +118325,11 @@ hbK wrc wrc jlU -jDN -jDN -jDN -jDN -jDN +kcu +kcu +kcu +kcu +kcu jlU wrc wrc @@ -118610,9 +118583,9 @@ aaa lMJ jlU jlU -jDN -aOV -jDN +kcu +aYl +kcu jlU jlU lMJ @@ -122929,7 +122902,7 @@ aTV aTV bjP tri -aQw +bny pfe brY giA @@ -123442,7 +123415,7 @@ uUX azv dKG bjQ -vMI +nhU pQv tSP qiH @@ -123692,7 +123665,7 @@ aVn tIa aWN aTV -tms +qeQ aTV aTV aWN @@ -124470,7 +124443,7 @@ iCV mCL pIE bjQ -fMa +dqy rNs tSP mZW @@ -124733,7 +124706,7 @@ txh bjQ giA hSe -okp +lBN pDe ueE jGr @@ -125244,7 +125217,7 @@ ldP xgE uFw tXz -wkA +jGN gfU gfU gfU diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index e761aa5f42d50..caa7913d2fc20 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -3894,6 +3894,13 @@ dir = 4 }, /area/mine/lounge) +"uT" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/components/unary/outlet_injector/layer2{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/mine/maintenance/service) "uU" = ( /turf/closed/mineral/random/labormineral/volcanic, /area/lavaland/surface/outdoors) @@ -6737,13 +6744,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_edge, /area/mine/laborcamp) -"LZ" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/outlet_injector/layer2{ - dir = 1 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/mine/maintenance/service) "Ma" = ( /obj/structure/stone_tile/block/cracked, /obj/structure/stone_tile{ @@ -8836,7 +8836,7 @@ /area/mine/laborcamp/security) "Ya" = ( /obj/machinery/vending/security{ - onstation_override = 1 + all_products_free = 0 }, /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -41493,7 +41493,7 @@ pU pU pU uj -LZ +uT pU pU pU diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 78da307059af2..d5456d9b82e25 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -833,6 +833,17 @@ /obj/structure/disposalpipe/trunk, /turf/open/space/basic, /area/space/nearstation) +"akr" = ( +/obj/machinery/button/door/directional/south{ + id = "captain_privacy"; + name = "Privacy Shutters" + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/hand_tele, +/turf/open/floor/wood/tile, +/area/station/command/heads_quarters/captain/private) "akt" = ( /obj/effect/turf_decal/tile/red/diagonal_edge, /obj/structure/closet/secure_closet/brig{ @@ -1553,6 +1564,26 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/wood/large, /area/station/service/library/artgallery) +"atP" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance-aft" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig Aft Entrance" + }, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Lockdown" + }, +/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/entrance, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark, +/area/station/security/brig) "atT" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/flora/bush/flowers_br/style_random, @@ -4600,6 +4631,10 @@ }, /turf/open/floor/iron, /area/station/hallway/floor3/fore) +"bhS" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/wood/tile, +/area/station/command/heads_quarters/captain/private) "bhW" = ( /obj/machinery/conveyor{ dir = 4; @@ -6535,15 +6570,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) -"bDi" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/item/reagent_containers/cup/watering_can, -/turf/open/floor/iron/dark/corner{ - dir = 4 - }, -/area/station/security/prison/garden) "bDm" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -7940,18 +7966,6 @@ dir = 1 }, /area/station/hallway/floor2/aft) -"bYk" = ( -/obj/structure/closet/secure_closet/hos, -/obj/machinery/button/door/directional/west{ - id = "hosprivacy"; - name = "Privacy Shutters Control"; - pixel_y = 6 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/west{ - pixel_y = -8 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hos) "bYp" = ( /obj/structure/rack, /obj/effect/spawner/random/engineering/material, @@ -10211,18 +10225,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side, /area/station/hallway/floor1/fore) -"cBl" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Brig Fore Entrance" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint) "cBq" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck, @@ -11007,19 +11009,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white, /area/station/science/cytology) -"cLJ" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/north{ - pixel_x = 9 - }, -/obj/machinery/button/door/directional/north{ - name = "CMO Privacy Shutters"; - id = "cmoshutter"; - req_access = list("cmo"); - pixel_y = 25; - pixel_x = -5 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) "cLQ" = ( /obj/machinery/door/airlock{ name = "Locker Room" @@ -13533,6 +13522,11 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"dvB" = ( +/obj/machinery/light/directional/east, +/obj/machinery/smartfridge/drying, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "dvC" = ( /obj/machinery/door/airlock/public/glass{ name = "Garden" @@ -15002,6 +14996,18 @@ "dPH" = ( /turf/closed/wall/r_wall, /area/station/security/brig) +"dPS" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Brig Fore Entrance" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint) "dPT" = ( /obj/machinery/light/small/red/directional/east, /obj/effect/spawner/random/trash/mess, @@ -17489,18 +17495,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) -"exG" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/security/prison/garden) "exL" = ( /obj/structure/railing{ dir = 4 @@ -18366,6 +18360,18 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/hallway/floor3/fore) +"eJy" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/security/prison/garden) "eJF" = ( /obj/machinery/airalarm/directional/south, /obj/item/kirbyplants/random, @@ -20407,13 +20413,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/floor2/fore) -"foi" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/north, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/captain) "fok" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -20913,6 +20912,24 @@ name = "boxing ring" }, /area/station/commons/fitness) +"fvA" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance-aft" + }, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig Aft Entrance" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Lockdown" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark, +/area/station/security/brig) "fvD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23514,15 +23531,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/plating/airless, /area/space/nearstation) -"geI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/weather/dirt{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 5 - }, -/area/station/security/prison/garden) "geL" = ( /obj/structure/railing/corner{ dir = 1 @@ -24861,12 +24869,6 @@ dir = 1 }, /area/station/hallway/floor4/fore) -"gxo" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "gxr" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24991,10 +24993,6 @@ /obj/machinery/light/red/dim/directional/west, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port/aft) -"gyU" = ( -/obj/effect/turf_decal/weather/sand/light, -/turf/closed/wall/r_wall, -/area/station/security/execution/education) "gyW" = ( /obj/structure/weightmachine/weightlifter, /obj/machinery/light/directional/east, @@ -26921,6 +26919,18 @@ dir = 4 }, /area/station/cargo/miningdock) +"hai" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/rack, +/obj/item/stack/sheet/iron/ten, +/obj/item/circuitboard/machine/exoscanner, +/obj/item/circuitboard/machine/exoscanner, +/obj/item/circuitboard/machine/exoscanner, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/corner, +/area/station/cargo/drone_bay) "haj" = ( /obj/effect/landmark/start/psychologist, /turf/open/floor/iron/white/small{ @@ -29628,6 +29638,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, /area/station/maintenance/floor4/starboard/aft) +"hJJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/hop) "hJK" = ( /obj/structure/chair{ dir = 8 @@ -29817,24 +29838,6 @@ dir = 1 }, /area/station/hallway/floor4/fore) -"hLN" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-entrance-aft" - }, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig Aft Entrance" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id = "briglockdown"; - name = "Brig Lockdown" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark, -/area/station/security/brig) "hLP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30249,6 +30252,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"hSD" = ( +/obj/structure/closet/secure_closet/hos, +/obj/machinery/button/door/directional/west{ + id = "hosprivacy"; + name = "Privacy Shutters Control"; + pixel_y = 6 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/west{ + pixel_y = -8 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hos) "hSH" = ( /obj/machinery/door/airlock{ id_tag = "CabinS"; @@ -30671,13 +30686,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port/aft) -"hXH" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater/layer2{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/engineering/atmos) "hXI" = ( /obj/structure/chair/wood{ dir = 1 @@ -30921,6 +30929,17 @@ /obj/machinery/light/cold/no_nightlight/directional/north, /turf/open/floor/iron, /area/station/hallway/floor2/aft) +"ibK" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 2; + height = 13; + name = "port bay 2"; + shuttle_id = "ferry_home"; + width = 5 + }, +/turf/open/space/openspace, +/area/space) "ibL" = ( /obj/structure/cable, /obj/machinery/power/smes/engineering, @@ -34429,6 +34448,7 @@ dir = 8 }, /obj/item/radio/intercom/directional/north, +/obj/structure/detectiveboard/directional/east, /turf/open/floor/carpet, /area/station/security/detectives_office) "iWW" = ( @@ -35070,26 +35090,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) -"jfr" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-entrance-aft" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig Aft Entrance" - }, -/obj/machinery/door/poddoor/preopen{ - id = "briglockdown"; - name = "Brig Lockdown" - }, -/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/entrance, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark, -/area/station/security/brig) "jfs" = ( /obj/docking_port/stationary/laborcamp_home/kilo{ dir = 2 @@ -37847,14 +37847,6 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor3/port) -"jQN" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/north{ - pixel_x = -22 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/incident_display/bridge/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "jQS" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/yellow, @@ -38780,6 +38772,20 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark, /area/station/hallway/floor2/fore) +"kcT" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/sign/departments/exodrone/directional/west, +/turf/open/floor/iron, +/area/station/cargo/storage) "kcZ" = ( /obj/effect/turf_decal/delivery, /obj/structure/table/reinforced, @@ -39027,6 +39033,13 @@ dir = 1 }, /area/station/hallway/floor1/aft) +"kfg" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater/layer2{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/engineering/atmos) "kfm" = ( /obj/effect/turf_decal/trimline/purple, /obj/machinery/airalarm/directional/south, @@ -39412,10 +39425,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/smooth_large, /area/station/medical/psychology) -"kkT" = ( -/obj/effect/spawner/random/structure/twelve_percent_spirit_board, -/turf/open/floor/iron/white/textured_large, -/area/station/service/chapel/office) "klc" = ( /obj/structure/railing{ dir = 4 @@ -42284,6 +42293,14 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) +"kWD" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/north{ + pixel_x = -22 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/incident_display/bridge/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "kWJ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -45073,6 +45090,26 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/starboard/fore) +"lIh" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners{ + dir = 8 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east{ + pixel_x = 25; + pixel_y = 16 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Command - Research Director's Office" + }, +/obj/machinery/requests_console/directional/east{ + department = "Research Director's Desk"; + name = "Research Director's Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/rd) "lIm" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/white/corner, @@ -46517,13 +46554,6 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/maintenance/floor1/port/aft) -"lZz" = ( -/obj/machinery/computer/security/qm{ - dir = 8 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/north, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "lZA" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/experi_scanner, @@ -50945,16 +50975,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"nfi" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Medbay - Treatment Center"; - name = "medbay camera"; - network = list("ss13","medbay") - }, -/obj/machinery/shower/directional/south, -/obj/structure/fluff/shower_drain, -/turf/open/floor/catwalk_floor/iron_white, -/area/station/medical/treatment_center) "nfm" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -51132,17 +51152,6 @@ /obj/structure/dresser, /turf/open/floor/wood/tile, /area/station/service/chapel/office) -"ngU" = ( -/obj/machinery/button/door/directional/south{ - id = "captain_privacy"; - name = "Privacy Shutters" - }, -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/obj/structure/table/wood, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/hand_tele, -/turf/open/floor/wood/tile, -/area/station/command/heads_quarters/captain/private) "ngX" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/machinery/button/door/directional/south{ @@ -52443,6 +52452,7 @@ }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/vending/cytopro, /turf/open/floor/iron, /area/station/science/cytology) "nxm" = ( @@ -52880,11 +52890,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) -"nDj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/vending/boozeomat/all_access, -/turf/open/floor/plating, -/area/station/medical/abandoned) "nDk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53390,6 +53395,12 @@ dir = 4 }, /area/station/hallway/floor3/aft) +"nJb" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "nJk" = ( /obj/effect/turf_decal/trimline/purple/line{ dir = 1 @@ -53946,6 +53957,21 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/hallway/floor4/aft) +"nQY" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Brig Fore Entrance" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/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/effect/turf_decal/tile/red/fourcorners, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/structure/disposalpipe/segment, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint) "nQZ" = ( /obj/effect/turf_decal/trimline/yellow/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54092,6 +54118,15 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard) +"nSz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/station/security/prison/garden) "nSC" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, @@ -55313,21 +55348,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/library/lounge) -"ojB" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Brig Fore Entrance" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/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/effect/turf_decal/tile/red/fourcorners, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/obj/structure/disposalpipe/segment, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint) "ojM" = ( /obj/structure/chair/comfy{ dir = 4 @@ -55500,10 +55520,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, /area/station/maintenance/floor2/port/fore) -"omh" = ( -/obj/machinery/vending/boozeomat/all_access, -/turf/open/floor/wood/tile, -/area/station/command/heads_quarters/captain/private) "omj" = ( /obj/effect/turf_decal/tile/green/half{ dir = 8 @@ -57489,13 +57505,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/pod/light, /area/station/maintenance/floor2/port/aft) -"oNi" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer4{ - dir = 1 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "oNn" = ( /obj/structure/bed/double, /obj/item/bedsheet/cosmos/double, @@ -59393,6 +59402,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard/aft) +"ppf" = ( +/obj/effect/turf_decal/weather/sand/light, +/turf/closed/wall/r_wall, +/area/station/security/execution/education) "ppi" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -60717,17 +60730,6 @@ /obj/structure/closet/crate/trashcart, /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard/aft) -"pFM" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/obj/item/kirbyplants/random, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/hop) "pFT" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/quantumpad, @@ -62335,17 +62337,6 @@ dir = 1 }, /area/station/science/auxlab) -"qaX" = ( -/obj/docking_port/stationary{ - dir = 8; - dwidth = 2; - height = 13; - name = "port bay 2"; - shuttle_id = "ferry_home"; - width = 5 - }, -/turf/open/space/openspace, -/area/space/nearstation) "qaY" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /obj/structure/cable, @@ -63338,6 +63329,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/textured_large, /area/station/engineering/lobby) +"qoI" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/north, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/captain) "qoJ" = ( /obj/machinery/telecomms/processor/preset_two, /turf/open/floor/circuit/telecomms, @@ -64279,6 +64277,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"qzQ" = ( +/obj/machinery/newscaster/directional/north, +/obj/structure/water_source/puddle, +/turf/open/misc/dirt/jungle, +/area/station/security/prison/garden) "qzX" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/effect/turf_decal/stripes/line{ @@ -64976,6 +64979,24 @@ "qHW" = ( /turf/closed/wall/r_wall, /area/station/medical/pharmacy) +"qIf" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/keycard_auth/wall_mounted/directional/south{ + pixel_x = 6 + }, +/obj/effect/landmark/start/chief_engineer, +/obj/machinery/button/door/directional/south{ + id = "ceprivacy"; + name = "Privacy Shutters Control"; + pixel_x = -6 + }, +/turf/open/floor/iron/dark/textured, +/area/station/command/heads_quarters/ce) "qIv" = ( /obj/effect/turf_decal/trimline/purple/warning, /turf/open/floor/pod/dark, @@ -65167,11 +65188,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, /turf/open/floor/plating, /area/station/hallway/floor1/aft) -"qMO" = ( -/obj/machinery/light/directional/east, -/obj/machinery/smartfridge/drying, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "qMV" = ( /obj/machinery/atmospherics/components/unary/portables_connector, /obj/effect/turf_decal/bot, @@ -66648,26 +66664,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/hallway/floor4/aft) -"rez" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/camera/autoname/directional/south, -/obj/item/fuel_pellet{ - pixel_x = -4; - pixel_y = -2 - }, -/obj/item/fuel_pellet, -/obj/item/fuel_pellet{ - pixel_x = 4; - pixel_y = 2 - }, -/obj/structure/rack, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/corner{ - dir = 1 - }, -/area/station/cargo/drone_bay) "reD" = ( /obj/effect/spawner/random/structure/chair_maintenance{ dir = 8 @@ -67457,20 +67453,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"rqd" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/sign/departments/exodrone/directional/west, -/turf/open/floor/iron, -/area/station/cargo/storage) "rqf" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 @@ -67731,11 +67713,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard/fore) -"rtH" = ( -/obj/machinery/vending/boozeomat/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/station/service/abandoned_gambling_den) "rtL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68287,6 +68264,15 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/maintenance/floor2/port) +"rCF" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/tile/dark_blue/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/item/reagent_containers/cup/watering_can, +/turf/open/floor/iron/dark/corner{ + dir = 4 + }, +/area/station/security/prison/garden) "rCK" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -69928,6 +69914,26 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron, /area/station/service/hydroponics) +"sbB" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/south, +/obj/item/fuel_pellet{ + pixel_x = -4; + pixel_y = -2 + }, +/obj/item/fuel_pellet, +/obj/item/fuel_pellet{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/structure/rack, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/corner{ + dir = 1 + }, +/area/station/cargo/drone_bay) "sbI" = ( /obj/structure/flora/bush/snow/style_random, /turf/open/misc/snow/actually_safe{ @@ -71005,12 +71011,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/textured_large, /area/station/cargo/storage) -"ssc" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/engineering/atmos) "ssi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -72005,11 +72005,6 @@ }, /turf/open/floor/wood, /area/station/service/theater) -"sFk" = ( -/obj/machinery/newscaster/directional/north, -/obj/structure/water_source/puddle, -/turf/open/misc/dirt/jungle, -/area/station/security/prison/garden) "sFt" = ( /turf/open/floor/iron/kitchen, /area/station/service/kitchen) @@ -75272,6 +75267,13 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/gateway) +"tud" = ( +/obj/machinery/computer/security/qm{ + dir = 8 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/north, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "tun" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -76985,6 +76987,11 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"tRb" = ( +/obj/machinery/door/firedoor, +/obj/machinery/vending/boozeomat, +/turf/open/floor/plating, +/area/station/medical/abandoned) "tRh" = ( /obj/structure/railing{ dir = 1 @@ -78120,6 +78127,13 @@ }, /turf/open/floor/iron/checker, /area/station/commons/vacant_room/commissary) +"uhC" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) "uhF" = ( /obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -78256,6 +78270,13 @@ }, /turf/open/floor/iron/dark/textured, /area/station/medical/surgery/fore) +"ujl" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer4{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/pumproom) "ujr" = ( /obj/effect/turf_decal/trimline/green/warning{ dir = 8 @@ -78575,6 +78596,12 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"unQ" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "unV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/siding/wideplating, @@ -79042,24 +79069,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/floor4/starboard/aft) -"uvN" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/keycard_auth/wall_mounted/directional/south{ - pixel_x = 6 - }, -/obj/effect/landmark/start/chief_engineer, -/obj/machinery/button/door/directional/south{ - id = "ceprivacy"; - name = "Privacy Shutters Control"; - pixel_x = -6 - }, -/turf/open/floor/iron/dark/textured, -/area/station/command/heads_quarters/ce) "uvQ" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor/heavy, @@ -79687,18 +79696,6 @@ }, /turf/open/floor/engine/airless, /area/station/engineering/supermatter/waste) -"uEv" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/rack, -/obj/item/stack/sheet/iron/ten, -/obj/item/circuitboard/machine/exoscanner, -/obj/item/circuitboard/machine/exoscanner, -/obj/item/circuitboard/machine/exoscanner, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/corner, -/area/station/cargo/drone_bay) "uED" = ( /obj/effect/turf_decal/tile/yellow/half, /obj/machinery/light/small/directional/east, @@ -85488,13 +85485,6 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/plating, /area/station/maintenance/floor4/port/fore) -"vZY" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/pumproom) "wat" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ dir = 8 @@ -87563,6 +87553,10 @@ }, /turf/open/floor/iron/dark, /area/station/security/holding_cell) +"wzt" = ( +/obj/effect/spawner/random/structure/twelve_percent_spirit_board, +/turf/open/floor/iron/white/textured_large, +/area/station/service/chapel/office) "wzB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/red/dim/directional/south, @@ -90407,6 +90401,11 @@ /obj/machinery/light/directional/north, /turf/open/floor/carpet/red, /area/station/service/theater) +"xkD" = ( +/obj/machinery/vending/boozeomat, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/station/service/abandoned_gambling_den) "xkN" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/item/hatchet, @@ -90800,6 +90799,16 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/security/lockers) +"xqZ" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Medbay - Treatment Center"; + name = "medbay camera"; + network = list("ss13","medbay") + }, +/obj/machinery/shower/directional/south, +/obj/structure/fluff/shower_drain, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/medical/treatment_center) "xrh" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -91563,26 +91572,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/dorms/apartment1) -"xBq" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners{ - dir = 8 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/east{ - pixel_x = 25; - pixel_y = 16 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Command - Research Director's Office" - }, -/obj/machinery/requests_console/directional/east{ - department = "Research Director's Desk"; - name = "Research Director's Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/announcement, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/rd) "xBt" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/trimline/neutral/warning{ @@ -91873,6 +91862,19 @@ /obj/effect/turf_decal/siding/thinplating_new/corner, /turf/open/floor/iron/smooth, /area/station/cargo/sorting) +"xEv" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/north{ + pixel_x = 9 + }, +/obj/machinery/button/door/directional/north{ + name = "CMO Privacy Shutters"; + id = "cmoshutter"; + req_access = list("cmo"); + pixel_y = 25; + pixel_x = -5 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "xEw" = ( /obj/machinery/computer/camera_advanced/base_construction/aux{ dir = 4 @@ -118564,7 +118566,7 @@ lyB yef wZu vTt -uEv +hai aQK uhw rhs @@ -118821,7 +118823,7 @@ gHw hDa fyg xxQ -rez +sbB aQK jUP prt @@ -119335,7 +119337,7 @@ oKT xsL vDw dty -rqd +kcT eOz eOz onX @@ -124217,7 +124219,7 @@ lWH aaI fFI lWH -lZz +tud kHP skM jdT @@ -137101,7 +137103,7 @@ wSm kSF cpE lTo -uvN +qIf xGI kzE kzE @@ -138104,7 +138106,7 @@ kIe fxo uvD ocv -hXH +kfg rBP iTu iko @@ -138361,7 +138363,7 @@ blI gkx xeO vsL -ssc +nJb rBP fxd haK @@ -142736,7 +142738,7 @@ vxz csf buQ nPZ -vZY +uhC oIy tyQ iPN @@ -142993,7 +142995,7 @@ eNk qNf jaK aLh -oNi +ujl oIy yli jCD @@ -188731,7 +188733,7 @@ rhC hge oiO afz -xBq +lIh mis txR dDk @@ -191588,7 +191590,7 @@ tam oKR xKq nCG -cLJ +xEv rBt aDp xug @@ -197493,7 +197495,7 @@ voB pZZ gBz sRR -nfi +xqZ jTK dzM dzM @@ -241432,10 +241434,10 @@ ucA ucA ucA ucA -xIV -xIV -xIV -xIV +ucA +ucA +ucA +ucA ucA ucA ucA @@ -241689,10 +241691,10 @@ ucA ucA ucA ucA -xIV -xIV -qaX -xIV +ucA +ucA +ibK +ucA ucA ucA ucA @@ -241946,7 +241948,7 @@ ucA ucA ucA ucA -xIV +ucA atB tgX rIc @@ -251987,7 +251989,7 @@ vhd fAz gyr gyr -qMO +dvB sFt sxt sal @@ -257380,7 +257382,7 @@ iuo fhl ebG iuo -nDj +tRb nfw uZc vMh @@ -269986,7 +269988,7 @@ tgA cFK gaT vuI -rtH +xkD pen pen ucA @@ -309278,7 +309280,7 @@ xJp uxw xjX aNs -jQN +kWD sZO rlJ nKL @@ -311586,7 +311588,7 @@ aNs aNs rNN vLW -foi +qoI rbK wnO keg @@ -312353,7 +312355,7 @@ lJp aNs glw aNs -omh +bhS per uTG oKq @@ -313647,7 +313649,7 @@ dOa qLW nEa gaB -ngU +akr oKq cWf vlD @@ -315685,7 +315687,7 @@ crp crp dWz lYx -gxo +unQ wMU aaN pGz @@ -317010,7 +317012,7 @@ xqY mau mau mau -bYk +hSD raE pke fmG @@ -318023,7 +318025,7 @@ gYS gir tnj tEv -cBl +dPS xFp dGF kHR @@ -318280,7 +318282,7 @@ aBV kyj dfm xnY -ojB +nQY xyw xyw tnR @@ -319816,7 +319818,7 @@ ipn oJR gjq gYO -pFM +hJJ liQ liQ xUQ @@ -322392,7 +322394,7 @@ txa mlH vOE nYZ -jfr +atP hxz vES uyX @@ -322906,7 +322908,7 @@ cmM bVy tnV daD -hLN +fvA kkK fDA emk @@ -327766,7 +327768,7 @@ kTV wlX sxo vyW -kkT +wzt mcD rNo tKY @@ -329850,7 +329852,7 @@ oyh oyh oyh fkA -gyU +ppf wmD fkA kUZ @@ -331393,8 +331395,8 @@ rCR oyh wMF wMF -sFk -exG +qzQ +eJy pfL pfL yfr @@ -331650,8 +331652,8 @@ kgW oyh wMF wMF -geI -bDi +nSz +rCF qXw fNV vNS diff --git a/_maps/map_files/VoidRaptor/VoidRaptor.dmm b/_maps/map_files/VoidRaptor/VoidRaptor.dmm index 0819063f6afd6..38c732c66999b 100644 --- a/_maps/map_files/VoidRaptor/VoidRaptor.dmm +++ b/_maps/map_files/VoidRaptor/VoidRaptor.dmm @@ -292,6 +292,9 @@ dir = 1 }, /area/station/medical/medbay/central) +"aei" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/eva_shed/starboard) "aez" = ( /obj/structure/chair/stool/directional/west, /obj/effect/decal/cleanable/dirt, @@ -3485,6 +3488,15 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/lobby) +"aXW" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/vending/autodrobe, +/turf/open/floor/wood/large, +/area/station/commons/fitness/recreation/entertainment) "aYo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3806,6 +3818,27 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/aft/greater) +"bcL" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance-aft" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/navigate_destination/sec, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/brig) "bcP" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 8 @@ -7110,6 +7143,11 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/science/xenobiology) +"cfg" = ( +/obj/structure/table, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "cfm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -17605,23 +17643,6 @@ }, /turf/open/floor/iron/small, /area/station/hallway/secondary/exit/departure_lounge) -"ffc" = ( -/obj/structure/table, -/obj/item/plate/large, -/obj/item/plate, -/obj/item/plate/small{ - pixel_y = 1 - }, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = 10; - pixel_y = 18 - }, -/obj/item/knife/butcher{ - pixel_x = 5 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "ffe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18733,11 +18754,6 @@ }, /turf/open/floor/wood/large, /area/station/security/courtroom) -"fwU" = ( -/obj/structure/table, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "fwV" = ( /obj/structure/reagent_dispensers/wall/peppertank/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -40018,6 +40034,23 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/freezer, /area/station/medical/treatment_center) +"lpu" = ( +/obj/structure/table, +/obj/item/plate/large, +/obj/item/plate, +/obj/item/plate/small{ + pixel_y = 1 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 10; + pixel_y = 18 + }, +/obj/item/knife/butcher{ + pixel_x = 5 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "lpz" = ( /obj/effect/turf_decal/delivery, /obj/machinery/space_heater, @@ -44956,17 +44989,6 @@ }, /turf/open/floor/iron/smooth_large, /area/station/maintenance/port/greater) -"mIt" = ( -/obj/machinery/door/airlock/hatch{ - name = "Starboard EVA Shed" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/eva_shed/starboard) "mIw" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -45043,17 +45065,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/office) -"mJp" = ( -/obj/machinery/door/airlock/hatch{ - name = "Port EVA Shed" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/iron_smooth, -/area/station/maintenance/eva_shed/port) "mJs" = ( /obj/structure/cable, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -46259,6 +46270,17 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"mXy" = ( +/obj/machinery/door/airlock/hatch{ + name = "Port EVA Shed" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/eva_shed/port) "mXO" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -50111,27 +50133,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood/large, /area/station/hallway/secondary/entry) -"obs" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-entrance-aft" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/landmark/navigate_destination/sec, -/turf/open/floor/iron/dark/smooth_large, -/area/station/security/brig) "ocb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -52695,9 +52696,6 @@ /obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/open/floor/engine, /area/station/tcommsat/computer) -"oMV" = ( -/turf/closed/wall/r_wall, -/area/station/maintenance/eva_shed/starboard) "oMY" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/sign/departments/medbay/alt/directional/south, @@ -64005,15 +64003,6 @@ }, /turf/open/floor/iron/smooth_edge, /area/station/cargo/office) -"rRU" = ( -/obj/structure/window/spawner/directional/east, -/obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/siding/wood{ - dir = 5 - }, -/obj/machinery/vending/autodrobe/all_access, -/turf/open/floor/wood/large, -/area/station/commons/fitness/recreation/entertainment) "rSu" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -65100,6 +65089,23 @@ dir = 8 }, /area/station/science/ordnance/storage) +"siV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-entrance-aft" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/brig) "sje" = ( /obj/structure/railing{ pixel_y = -5 @@ -68801,9 +68807,6 @@ }, /turf/open/floor/iron/kitchen, /area/station/service/kitchen) -"tgI" = ( -/turf/closed/wall/r_wall, -/area/station/maintenance/port/upper) "tgQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -70528,47 +70531,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"tDF" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight/seclite, -/obj/item/flashlight/seclite, -/obj/item/flashlight/seclite, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/lockbox/loyalty{ - pixel_y = -11 - }, -/obj/structure/window/reinforced/spawner/directional/north{ - pixel_y = 1 - }, -/obj/structure/window/reinforced/spawner/directional/east{ - pixel_x = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/obj/item/storage/box/flashbangs{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/storage/box/teargas{ - pixel_x = 6; - pixel_y = -6 - }, -/obj/item/storage/box/firingpins, -/turf/open/floor/engine, -/area/station/ai_monitored/security/armory) "tDI" = ( /obj/machinery/portable_atmospherics/canister, /obj/effect/turf_decal/box, @@ -73711,9 +73673,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/white, /area/station/medical/storage) -"uwx" = ( -/turf/closed/wall/r_wall, -/area/station/maintenance/starboard/upper) "uwV" = ( /obj/effect/mapping_helpers/airlock/access/all/supply/general, /obj/structure/disposalpipe/segment{ @@ -74544,6 +74503,17 @@ }, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) +"uHz" = ( +/obj/machinery/door/airlock/hatch{ + name = "Starboard EVA Shed" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/maintenance/eva_shed/starboard) "uHB" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/siding/wood/corner{ @@ -83084,6 +83054,9 @@ }, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) +"xbS" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/port/upper) "xcf" = ( /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/grassy, @@ -83306,23 +83279,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"xgN" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-entrance-aft" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/security/brig) "xgQ" = ( /obj/structure/table/reinforced/plastitaniumglass, /obj/item/toy/captainsaid/collector, @@ -84568,6 +84524,9 @@ }, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) +"xxv" = ( +/turf/closed/wall/r_wall, +/area/station/maintenance/starboard/upper) "xxJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -86413,6 +86372,47 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/grimy, /area/station/service/library) +"ybu" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/lockbox/loyalty{ + pixel_y = -11 + }, +/obj/structure/window/reinforced/spawner/directional/north{ + pixel_y = 1 + }, +/obj/structure/window/reinforced/spawner/directional/east{ + pixel_x = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/obj/item/storage/box/flashbangs{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/box/teargas{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/storage/box/firingpins, +/turf/open/floor/engine, +/area/station/ai_monitored/security/armory) "ybE" = ( /obj/effect/turf_decal/trimline/green/filled/warning{ dir = 1 @@ -118526,10 +118526,10 @@ iLQ iLQ odJ odJ -tgI -tgI -mJp -tgI +xbS +xbS +mXy +xbS iqF iqF iqF @@ -121610,9 +121610,9 @@ ttw ttw ttw ttw -oMV +aei bZk -oMV +aei lwq iqF iqF @@ -121867,10 +121867,10 @@ ttw ttw ttw ttw -oMV +aei cAd -oMV -oMV +aei +aei qVs qVs qVs @@ -122124,7 +122124,7 @@ ttw ttw ttw ttw -oMV +aei cRr rbc bZk @@ -122381,7 +122381,7 @@ ttw ttw ttw ttw -oMV +aei gbQ cHj bZk @@ -122637,11 +122637,11 @@ ttw ttw ttw ttw -uwx -uwx -uwx -mIt -uwx +xxv +xxv +xxv +uHz +xxv iqF iqF iqF @@ -122752,7 +122752,7 @@ hqp cFx uAx jfo -rRU +aXW dGB smp xMo @@ -123468,7 +123468,7 @@ hRr fba cUM lQG -fwU +cfg orv xFd nRS @@ -123983,7 +123983,7 @@ hUS eGd bnA xYN -ffc +lpu bLx ehn hIw @@ -125262,7 +125262,7 @@ uuD rOa ddj ful -xgN +siV lzd uKh njl @@ -125519,7 +125519,7 @@ utC qyg mzk uDY -obs +bcL isB eGb yfl @@ -127043,7 +127043,7 @@ frc vnb lQM ewC -tDF +ybu cDc qBO pKY diff --git a/_maps/map_files/biodome/biodome.dmm b/_maps/map_files/biodome/biodome.dmm index 15974e725497c..af482870377b7 100644 --- a/_maps/map_files/biodome/biodome.dmm +++ b/_maps/map_files/biodome/biodome.dmm @@ -188,6 +188,14 @@ /mob/living/basic/cockroach, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) +"adG" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/iron, +/area/station/engineering/lobby) "adI" = ( /obj/effect/turf_decal/siding/green{ dir = 10 @@ -1340,6 +1348,27 @@ }, /turf/open/floor/iron, /area/station/service/chapel) +"awm" = ( +/obj/machinery/computer/communications{ + dir = 4 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/west{ + pixel_x = -32; + pixel_y = 6 + }, +/obj/machinery/button/door{ + id = "bridge blast"; + name = "Bridge Blast Door Control"; + pixel_x = -32; + pixel_y = -6; + req_access = list("command") + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/bridge) "awT" = ( /obj/effect/turf_decal/tile/blue, /obj/structure/cable, @@ -1361,6 +1390,20 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/main) +"axt" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom/directional/west, +/obj/item/book/manual/wiki/security_space_law, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/obj/machinery/keycard_auth/wall_mounted/directional/west{ + pixel_y = -9 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "axw" = ( /obj/structure/table/wood/poker, /obj/effect/spawner/random/entertainment/money_large, @@ -1805,15 +1848,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"aFH" = ( -/obj/structure/table/reinforced, -/obj/item/computer_disk/engineering, -/obj/item/computer_disk/engineering, -/obj/item/computer_disk/engineering, -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/obj/effect/turf_decal/tile/neutral/full, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "aFI" = ( /obj/effect/landmark/start/assistant, /obj/structure/chair/sofa/bench/solo, @@ -4583,10 +4617,6 @@ /obj/machinery/light/small/blacklight/directional/east, /turf/closed/wall, /area/station/command/heads_quarters/qm) -"bEJ" = ( -/obj/machinery/vending/boozeomat/all_access, -/turf/closed/wall, -/area/station/command/heads_quarters/nt_rep) "bES" = ( /obj/item/plate, /obj/item/food/meat/slab, @@ -5192,6 +5222,13 @@ }, /turf/open/floor/iron/white, /area/station/security/medical) +"bPZ" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Gas to Chamber" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter) "bQd" = ( /obj/structure/sign/warning/radiation/rad_area/directional/north, /obj/effect/turf_decal/bot_white, @@ -6754,20 +6791,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) -"ctl" = ( -/obj/structure/table/wood, -/obj/item/radio/intercom/directional/west, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/machinery/keycard_auth/wall_mounted/directional/west{ - pixel_y = -9 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "ctr" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -7171,6 +7194,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/central) +"cyC" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/north, +/obj/machinery/newscaster/directional/west, +/obj/machinery/computer/security/qm{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/qm) "cyL" = ( /obj/structure/disposalpipe/segment, /obj/item/kirbyplants/random, @@ -7969,6 +8000,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/atmos/mix) +"cMl" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "cMp" = ( /obj/structure/table/wood, /obj/effect/spawner/random/food_or_drink/refreshing_beverage, @@ -9028,27 +9065,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"dhj" = ( -/obj/machinery/computer/communications{ - dir = 4 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/west{ - pixel_x = -32; - pixel_y = 6 - }, -/obj/machinery/button/door{ - id = "bridge blast"; - name = "Bridge Blast Door Control"; - pixel_x = -32; - pixel_y = -6; - req_access = list("command") - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/command/bridge) "dhk" = ( /obj/structure/railing{ dir = 1 @@ -9337,6 +9353,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/grass, /area/station/security/courtroom) +"dmv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/iron, +/area/station/engineering/atmos/storage/gas) "dmA" = ( /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) @@ -12512,6 +12533,13 @@ dir = 8 }, /area/station/service/bar) +"etX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/auxiliary) "etY" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/computer/security/telescreen/entertainment/directional/south, @@ -13014,10 +13042,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/large, /area/station/biodome/fore) -"eDG" = ( -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/engineering/lobby) "eDH" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 8 @@ -13762,10 +13786,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos/mix) -"eOA" = ( -/obj/machinery/vending/autodrobe/all_access, -/turf/open/floor/plating, -/area/station/maintenance/aft/upper) "eOC" = ( /obj/item/soulstone/anybody/chaplain, /obj/item/book/granter/action/spell/smoke/lesser{ @@ -14876,6 +14896,11 @@ /obj/item/kirbyplants/random, /turf/open/floor/carpet/purple, /area/station/security/prison/work) +"fhN" = ( +/obj/machinery/vending/autodrobe, +/obj/effect/turf_decal/tile/neutral/half, +/turf/open/floor/iron, +/area/station/commons/locker) "fhR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15207,6 +15232,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/greater) +"foC" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/structure/sign/clock/directional/south, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos/storage/gas) "foJ" = ( /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, /obj/machinery/atmospherics/pipe/multiz/supply/visible/layer4, @@ -15233,6 +15263,12 @@ /obj/structure/cable, /turf/open/floor/iron/herringbone, /area/station/hallway/primary/central) +"fpk" = ( +/obj/machinery/duct, +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "fpw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -19114,13 +19150,6 @@ dir = 1 }, /area/station/service/chapel) -"gFx" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Gas to Chamber" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter) "gFC" = ( /obj/structure/railing{ dir = 1 @@ -19390,6 +19419,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"gKH" = ( +/obj/machinery/vending/boozeomat, +/turf/open/floor/wood, +/area/station/maintenance/fore/greater) "gKL" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 4; @@ -20397,10 +20430,6 @@ /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/plating, /area/station/maintenance/port/central) -"heh" = ( -/obj/machinery/vending/boozeomat/all_access, -/turf/open/floor/wood, -/area/station/maintenance/fore/greater) "hei" = ( /obj/machinery/duct, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23212,13 +23241,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/wood/large, /area/station/service/theater) -"ihD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/auxiliary) "ihE" = ( /obj/machinery/light/small/directional/north, /obj/machinery/duct, @@ -23352,23 +23374,6 @@ "ikk" = ( /turf/closed/wall, /area/station/maintenance/port/greater) -"ikn" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/effect/landmark/start/chief_medical_officer, -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 4 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/east{ - pixel_x = 37; - pixel_y = -8 - }, -/turf/open/floor/iron/white/side{ - dir = 8 - }, -/area/station/command/heads_quarters/cmo) "ikw" = ( /obj/machinery/power/smes, /obj/structure/cable, @@ -27859,11 +27864,6 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/service/hydroponics) -"jRd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/blue/opposingcorners, -/turf/open/floor/iron, -/area/station/engineering/atmos/storage/gas) "jRX" = ( /turf/open/floor/iron/terracotta, /area/station/hallway/primary/aft) @@ -28700,11 +28700,6 @@ }, /turf/open/floor/iron, /area/station/science/research) -"kfo" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "kfw" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -28770,10 +28765,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"kgr" = ( -/obj/machinery/incident_display/bridge/directional/north, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "kgx" = ( /obj/machinery/rnd/experimentor, /turf/open/floor/engine, @@ -28879,12 +28870,6 @@ /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/station/maintenance/starboard/central) -"khN" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "khP" = ( /obj/structure/table, /obj/item/folder/red, @@ -29569,12 +29554,6 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"ksB" = ( -/obj/machinery/duct, -/obj/machinery/light/small/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "ksO" = ( /obj/structure/barricade/wooden, /turf/open/misc/asteroid, @@ -38012,6 +37991,10 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"ngQ" = ( +/obj/machinery/vending/boozeomat, +/turf/closed/wall, +/area/station/command/heads_quarters/nt_rep) "nha" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 @@ -40969,11 +40952,6 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"ofc" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/obj/structure/sign/clock/directional/south, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/atmos/storage/gas) "ofe" = ( /turf/closed/wall/r_wall/fakewood, /area/station/command/bridge) @@ -42183,6 +42161,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/maintenance/port/greater) +"oBb" = ( +/obj/structure/table/reinforced, +/obj/item/computer_disk/engineering, +/obj/item/computer_disk/engineering, +/obj/item/computer_disk/engineering, +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/obj/effect/turf_decal/tile/neutral/full, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "oBd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -42773,6 +42760,12 @@ "oLQ" = ( /turf/closed/wall/mineral/wood, /area/station/service/theater) +"oMa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "oMf" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -43572,6 +43565,10 @@ /obj/effect/decal/cleanable/blood/gibs/limb, /turf/open/misc/dirt/jungle/wasteland, /area/station/maintenance/central/greater) +"pbY" = ( +/obj/machinery/incident_display/bridge/directional/north, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "pcf" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -43994,6 +43991,15 @@ /obj/structure/railing/corner, /turf/open/floor/plating, /area/station/maintenance/department/science) +"phY" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "External Gas to Loop" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/incident_display/delam/directional/south, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "pil" = ( /obj/machinery/newscaster/directional/south, /obj/structure/hedge, @@ -48499,14 +48505,6 @@ }, /turf/open/floor/carpet/orange, /area/station/security/prison) -"qON" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/keycard_auth/wall_mounted/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hos) "qOT" = ( /obj/structure/chair/plastic{ dir = 8 @@ -49875,6 +49873,14 @@ /obj/structure/ladder, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"rkx" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/iron, +/area/station/engineering/main) "rkF" = ( /obj/structure/railing{ dir = 4 @@ -50572,6 +50578,13 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/smooth_half, /area/station/security/warden) +"rvU" = ( +/obj/structure/chair/stool{ + dir = 4 + }, +/obj/machinery/incident_display/delam/directional/north, +/turf/open/floor/iron/terracotta, +/area/station/hallway/secondary/construction/engineering) "rwa" = ( /obj/machinery/door/airlock/public/glass, /obj/machinery/door/firedoor, @@ -52270,14 +52283,6 @@ }, /turf/open/floor/wood/large, /area/station/service/theater) -"sap" = ( -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/iron, -/area/station/engineering/main) "saK" = ( /obj/effect/spawner/random/entertainment/arcade{ dir = 8 @@ -52370,6 +52375,11 @@ /obj/item/fishing_hook, /turf/open/water/jungle/biodome, /area/station/maintenance/central/greater) +"scm" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "scp" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, @@ -54227,6 +54237,42 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/command/bridge) +"sLX" = ( +/obj/structure/table/wood, +/obj/item/folder/blue, +/obj/item/stamp/head/hop{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/trapdoor_remote/preloaded{ + pixel_x = -8 + }, +/obj/machinery/button/door/directional/south{ + id = "hopqueue"; + name = "Queue Shutters Control"; + pixel_x = -8; + req_access = list("hop") + }, +/obj/machinery/button/door/directional/south{ + id = "hop"; + name = "Privacy Shutters Control"; + pixel_x = 8; + req_access = list("hop") + }, +/obj/machinery/button/flasher{ + id = "hopflash"; + pixel_y = -32 + }, +/obj/machinery/button/ticket_machine{ + pixel_x = 32; + pixel_y = 4 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east{ + pixel_x = 33; + pixel_y = -6 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "sMu" = ( /obj/structure/holosign/barrier/atmos/sturdy, /turf/open/floor/engine/hull, @@ -57136,6 +57182,10 @@ /obj/effect/mapping_helpers/airlock/access/all/science/general, /turf/open/floor/iron/dark, /area/station/science/circuits) +"tKQ" = ( +/obj/machinery/vending/autodrobe, +/turf/open/floor/plating, +/area/station/maintenance/aft/upper) "tLb" = ( /obj/structure/flora/rock/style_random, /turf/open/floor/grass, @@ -59620,14 +59670,6 @@ /obj/structure/railing, /turf/open/openspace, /area/station/hallway/primary/starboard) -"uJj" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/iron, -/area/station/engineering/lobby) "uJp" = ( /turf/closed/wall/mineral/wood, /area/station/maintenance/radshelter/civil) @@ -59839,12 +59881,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"uNl" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "uNx" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/dark/corner{ @@ -60162,11 +60198,6 @@ /obj/effect/spawner/random/trash/moisture, /turf/open/misc/asteroid, /area/station/maintenance/central/greater) -"uUp" = ( -/obj/machinery/vending/autodrobe/all_access, -/obj/effect/turf_decal/tile/neutral/half, -/turf/open/floor/iron, -/area/station/commons/locker) "uUw" = ( /obj/structure/disposalpipe/segment, /obj/structure/filingcabinet/security, @@ -60642,14 +60673,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/cytology) -"vcY" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/north, -/obj/machinery/newscaster/directional/west, -/obj/machinery/computer/security/qm{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/qm) "vda" = ( /obj/structure/chair/sofa/corp{ dir = 8 @@ -61332,15 +61355,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) -"vpf" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "External Gas to Loop" - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/incident_display/delam/directional/south, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "vpl" = ( /obj/machinery/vending/modularpc, /obj/effect/turf_decal/tile/purple/anticorner{ @@ -61553,6 +61567,10 @@ }, /turf/open/floor/iron/white/diagonal, /area/station/science/robotics/lab) +"vtC" = ( +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron, +/area/station/engineering/lobby) "vtH" = ( /obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/iron/checker, @@ -62820,42 +62838,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/stone, /area/station/security/courtroom) -"vRy" = ( -/obj/structure/table/wood, -/obj/item/folder/blue, -/obj/item/stamp/head/hop{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/trapdoor_remote/preloaded{ - pixel_x = -8 - }, -/obj/machinery/button/door/directional/south{ - id = "hopqueue"; - name = "Queue Shutters Control"; - pixel_x = -8; - req_access = list("hop") - }, -/obj/machinery/button/door/directional/south{ - id = "hop"; - name = "Privacy Shutters Control"; - pixel_x = 8; - req_access = list("hop") - }, -/obj/machinery/button/flasher{ - id = "hopflash"; - pixel_y = -32 - }, -/obj/machinery/button/ticket_machine{ - pixel_x = 32; - pixel_y = 4 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/east{ - pixel_x = 33; - pixel_y = -6 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "vRM" = ( /obj/machinery/camera/directional/east{ c_tag = "Biodome - Crab Hole" @@ -65887,13 +65869,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"wOp" = ( -/obj/structure/chair/stool{ - dir = 4 - }, -/obj/machinery/incident_display/delam/directional/north, -/turf/open/floor/iron/terracotta, -/area/station/hallway/secondary/construction/engineering) "wOy" = ( /obj/effect/spawner/random/maintenance, /turf/open/floor/fake_snow/safe, @@ -66059,6 +66034,23 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating/airless, /area/space/nearstation) +"wRg" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/chief_medical_officer, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east{ + pixel_x = 37; + pixel_y = -8 + }, +/turf/open/floor/iron/white/side{ + dir = 8 + }, +/area/station/command/heads_quarters/cmo) "wRn" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt, @@ -67521,6 +67513,14 @@ }, /turf/open/floor/iron/white/smooth_edge, /area/station/science/robotics/lab) +"xsl" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/keycard_auth/wall_mounted/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hos) "xsA" = ( /turf/open/floor/engine/o2, /area/station/engineering/atmos) @@ -101422,7 +101422,7 @@ jrD upK dKi xbL -uJj +adG tKr cqH aRm @@ -101677,9 +101677,9 @@ jpy cnF nDo xwI -jRd +dmv xbL -eDG +vtC oMf fiN fcI @@ -102448,7 +102448,7 @@ nYM pxn dZG vek -ofc +foC xbL jAt etf @@ -103740,7 +103740,7 @@ jZC sUg jZC jZC -wOp +rvU nTx eIk geu @@ -104783,7 +104783,7 @@ uax bKT asX gMZ -sap +rkx rKd sDJ gvg @@ -105481,7 +105481,7 @@ niK cYR wXD dTs -ihD +etX nve cYR hjh @@ -105550,7 +105550,7 @@ fhc gMZ jbQ mZo -aFH +oBb gJD fdy aQb @@ -106237,7 +106237,7 @@ knC hNy hNy sBz -heh +gKH tFu fUv ogX @@ -106584,13 +106584,13 @@ mDF bGq fjh lBW -vpf +phY uXD uve tkq wAi uXD -uNl +cMl tnA vUr nlO @@ -106843,7 +106843,7 @@ fjh cix cix uXD -gFx +bPZ hiO rYR uXD @@ -109088,7 +109088,7 @@ sCP qZV fPj gOM -ctl +axt hoK kgA rWX @@ -119690,7 +119690,7 @@ hNy hNy hNy kVg -ksB +fpk cBv lsj qPp @@ -120463,7 +120463,7 @@ hNy kVg xhj xhj -kfo +scm jjc lIL nEZ @@ -157915,7 +157915,7 @@ oup dWa dWa dWa -khN +oMa lRJ lRJ bqd @@ -158417,7 +158417,7 @@ pAP ocv irB irB -uUp +fhN jvz txv fmZ @@ -160796,7 +160796,7 @@ qLe qLe fJC pkh -eOA +tKQ fJC vxC qHj @@ -161549,7 +161549,7 @@ ahq tDi iXv ifq -ikn +wRg xEr aVG pLT @@ -174634,7 +174634,7 @@ vxe bcq mvU luq -dhj +awm clm dnp bKh @@ -176426,7 +176426,7 @@ cFv cFv cFv ofe -kgr +pbY gRD ofe rAq @@ -176439,7 +176439,7 @@ fQs fQs fQs ofe -kgr +pbY uVv nOL lcS @@ -176454,7 +176454,7 @@ nBI hjY bTg gaX -vRy +sLX fAY jnx jaN @@ -178552,7 +178552,7 @@ vTi fby cMB qNT -qON +xsl asv mAL rRv @@ -179264,7 +179264,7 @@ fTd ybl ojO nMA -bEJ +ngQ ilA ybl myK @@ -180290,7 +180290,7 @@ nes lqK sQn lqK -vcY +cyC vfv kUh ulB diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 2c544716475a4..280fcdfc858e7 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -9,11 +9,23 @@ "ac" = ( /turf/open/space, /area/space/nearstation) +"ad" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/transit_tube/horizontal, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "ae" = ( /obj/structure/lattice, /obj/structure/grille, /turf/open/space, /area/space/nearstation) +"af" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/transit_tube/crossing/horizontal, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "ag" = ( /turf/closed/wall/r_wall, /area/station/security/brig) @@ -55,17 +67,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"ar" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"at" = ( -/obj/structure/table, -/obj/item/storage/box/prisoner, -/obj/item/paper/guides/jobs/security/labor_camp, -/turf/open/floor/iron, -/area/station/security/brig) "av" = ( /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) @@ -92,13 +93,6 @@ "aD" = ( /turf/open/floor/iron, /area/station/security/brig) -"aG" = ( -/obj/machinery/gulag_item_reclaimer{ - dir = 8; - pixel_x = 32 - }, -/turf/open/floor/iron, -/area/station/security/brig) "aH" = ( /obj/machinery/light/directional/east, /obj/machinery/recharge_station, @@ -108,6 +102,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/gravity_generator) +"aK" = ( +/obj/structure/table, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/obj/item/construction/rcd/combat, +/obj/item/construction/plumbing, +/turf/open/floor/iron, +/area/station/command/bridge) "aN" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -122,6 +125,18 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"aS" = ( +/obj/structure/table, +/obj/item/flashlight{ + pixel_y = 5 + }, +/obj/item/storage/toolbox/syndicate, +/obj/item/stock_parts/power_store/cell/infinite, +/turf/open/floor/iron, +/area/station/engineering/main) +"aX" = ( +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "aY" = ( /obj/machinery/light/directional/east, /turf/open/floor/iron/dark, @@ -140,6 +155,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"bd" = ( +/obj/structure/table, +/obj/item/weldingtool/experimental, +/obj/item/inducer, +/obj/item/storage/belt/utility/chief/full, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/main) "bf" = ( /obj/machinery/suit_storage_unit/captain, /turf/open/floor/iron, @@ -164,6 +188,12 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos) +"bo" = ( +/obj/structure/table, +/obj/item/screwdriver/power, +/obj/item/crowbar/power, +/turf/open/floor/iron, +/area/station/engineering/main) "bp" = ( /obj/machinery/light/directional/south, /obj/structure/tank_dispenser, @@ -219,9 +249,48 @@ "bE" = ( /turf/open/floor/iron, /area/station/hallway/primary/central) +"bF" = ( +/obj/machinery/computer/rdconsole, +/turf/open/floor/iron, +/area/station/science) +"bI" = ( +/obj/structure/table, +/obj/item/card/emag, +/obj/item/flashlight/emp/debug, +/turf/open/floor/iron, +/area/station/command/bridge) +"bJ" = ( +/obj/structure/table, +/obj/item/card/id/advanced/centcom/ert{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/card/id/advanced/chameleon, +/obj/item/card/id/advanced/gold/captains_spare{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/iron, +/area/station/command/bridge) +"bK" = ( +/obj/structure/table, +/obj/item/storage/backpack/holding, +/obj/item/storage/part_replacer/bluespace/tier4, +/turf/open/floor/iron, +/area/station/command/bridge) "bL" = ( /turf/closed/wall/r_wall, /area/station/maintenance/aft) +"bM" = ( +/obj/machinery/camera/directional/north, +/obj/structure/table, +/obj/item/construction/rld, +/obj/item/construction/rcd/arcd, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "bO" = ( /obj/machinery/door/poddoor, /turf/open/floor/engine, @@ -241,6 +310,17 @@ /obj/machinery/chem_dispenser/fullupgrade, /turf/open/floor/iron/dark, /area/station/medical/chemistry) +"bT" = ( +/obj/machinery/gulag_item_reclaimer{ + dir = 8; + pixel_x = 32 + }, +/turf/open/floor/iron, +/area/station/security/brig) +"bY" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "bZ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -272,13 +352,6 @@ }, /turf/open/floor/iron, /area/station/command/bridge) -"ci" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=4-Southeast"; - location = "3-Northeast" - }, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "cj" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -326,10 +399,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/medical/chemistry) -"cy" = ( -/obj/machinery/door/airlock, -/turf/open/floor/iron, -/area/station/construction) "cI" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -354,12 +423,6 @@ /obj/machinery/door/airlock/public/glass, /turf/open/floor/iron, /area/station/commons/storage/primary) -"cX" = ( -/obj/machinery/door/airlock/external/glass/ruin, -/obj/effect/turf_decal/stripes/full, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/storage) "cY" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, @@ -373,6 +436,13 @@ "db" = ( /turf/closed/wall/mineral/plastitanium, /area/station/hallway/secondary/entry) +"dc" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "de" = ( /obj/machinery/gulag_teleporter, /turf/open/floor/iron, @@ -416,12 +486,11 @@ /turf/open/floor/plating, /area/station/commons/storage/primary) "dq" = ( -/obj/machinery/light/directional/north, -/obj/machinery/rnd/production/circuit_imprinter/department, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, +/obj/effect/turf_decal/plaque{ + icon_state = "L2" + }, /turf/open/floor/iron, -/area/station/science) +/area/station/commons/storage/primary) "dr" = ( /obj/effect/turf_decal/plaque{ icon_state = "L4" @@ -524,12 +593,25 @@ }, /turf/open/floor/iron, /area/station/construction) +"dN" = ( +/obj/machinery/navbeacon{ + location = "1-Southwest"; + codes_txt = "patrol;next_patrol=2-Northwest" + }, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "dP" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /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, @@ -546,6 +628,11 @@ "dV" = ( /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"dW" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/camera/directional/north, +/turf/open/floor/iron, +/area/station/construction) "dX" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -564,6 +651,12 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/construction) +"ea" = ( +/obj/structure/table, +/obj/machinery/camera/autoname/directional/south, +/obj/item/gun/magic/wand/resurrection/debug, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "ec" = ( /obj/docking_port/stationary{ dir = 8; @@ -576,6 +669,14 @@ }, /turf/open/floor/engine, /area/station/hallway/secondary/entry) +"ed" = ( +/obj/structure/sign/warning/pods, +/turf/closed/wall/r_wall, +/area/station/hallway/secondary/entry) +"ef" = ( +/obj/machinery/door/airlock, +/turf/open/floor/iron, +/area/station/construction) "eh" = ( /turf/open/floor/iron, /area/station/hallway/secondary/entry) @@ -645,6 +746,14 @@ /obj/effect/turf_decal/stripes/full, /turf/open/floor/iron, /area/station/engineering/main) +"eC" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "cargounload" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/storage) "eE" = ( /obj/docking_port/stationary{ dir = 8; @@ -656,6 +765,11 @@ }, /turf/open/space/basic, /area/space) +"eF" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "eJ" = ( /obj/docking_port/stationary{ dir = 4; @@ -703,6 +817,17 @@ }, /turf/open/floor/iron, /area/station/commons/storage/primary) +"eY" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "cargounload" + }, +/obj/machinery/door/poddoor{ + id = "cargounload"; + name = "Supply Dock Unloading Door" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "fb" = ( /obj/machinery/door/airlock/external/ruin{ name = "Departure Lounge Airlock" @@ -711,6 +836,17 @@ /obj/structure/fans/tiny, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"fc" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "cargoload" + }, +/obj/machinery/door/poddoor{ + id = "cargoload"; + name = "Supply Dock Loading Door" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "ff" = ( /obj/docking_port/stationary{ dir = 2; @@ -733,6 +869,18 @@ /obj/docking_port/stationary/escape_pod, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"fj" = ( +/obj/structure/sign/warning/docking, +/turf/closed/wall/r_wall, +/area/station/hallway/secondary/entry) +"fl" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "cargoload" + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating, +/area/station/cargo/storage) "fm" = ( /obj/machinery/conveyor{ dir = 1; @@ -740,6 +888,11 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"fn" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/vacuum/external, +/turf/open/floor/plating, +/area/station/hallway/secondary/entry) "fo" = ( /obj/machinery/conveyor_switch/oneway{ id = "cargoload" @@ -775,6 +928,10 @@ /obj/structure/fans/tiny, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"fB" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall/r_wall, +/area/station/cargo/storage) "fI" = ( /obj/machinery/door/airlock, /turf/open/floor/plating, @@ -810,6 +967,13 @@ /obj/machinery/keycard_auth/wall_mounted/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"fQ" = ( +/obj/machinery/computer/communications, +/obj/machinery/status_display/evac{ + pixel_y = 32 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "fS" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -870,15 +1034,20 @@ }, /turf/open/floor/plating, /area/station/commons/storage/primary) +"gi" = ( +/obj/structure/table, +/obj/item/storage/toolbox/syndicate, +/obj/item/debug/omnitool, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"gk" = ( +/obj/structure/sign/departments/evac, +/turf/closed/wall/r_wall, +/area/station/hallway/secondary/exit/departure_lounge) "gn" = ( /obj/machinery/camera/directional/north, /turf/open/floor/iron, /area/station/security/brig) -"gt" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/atmos) "gv" = ( /obj/machinery/light/directional/south, /turf/open/floor/iron, @@ -890,6 +1059,12 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/construction) +"gz" = ( +/obj/structure/table, +/obj/item/card/id/advanced/gold/captains_spare, +/obj/machinery/keycard_auth/wall_mounted/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "gE" = ( /obj/machinery/camera/directional/north, /turf/open/floor/iron, @@ -914,12 +1089,16 @@ /obj/machinery/camera/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"gP" = ( +"gJ" = ( /obj/structure/table, -/obj/item/ammo_box/c10mm, -/obj/item/gun/ballistic/automatic/pistol, +/obj/item/storage/box/prisoner, +/obj/item/paper/guides/jobs/security/labor_camp, /turf/open/floor/iron, -/area/station/command/bridge) +/area/station/security/brig) +"gW" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/closed/wall/r_wall, +/area/station/engineering/gravity_generator) "hm" = ( /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/unlocked, @@ -943,13 +1122,13 @@ }, /turf/open/floor/iron, /area/station/medical/chemistry) -"ia" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=3-Northeast"; - location = "2-Northwest" +"hS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, +/obj/structure/transit_tube/station, /turf/open/floor/iron, -/area/station/commons/storage/primary) +/area/station/engineering/gravity_generator) "ii" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -962,10 +1141,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/command/bridge) -"iS" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall, -/area/station/hallway/secondary/entry) "jg" = ( /obj/effect/turf_decal/plaque{ icon_state = "L1" @@ -979,20 +1154,38 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/storage/primary) -"jL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) -"jV" = ( -/obj/machinery/computer/communications, -/obj/machinery/status_display/evac{ - pixel_y = 32 +"jz" = ( +/obj/structure/table/glass, +/obj/item/disk/surgery/debug, +/obj/item/storage/box/monkeycubes{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/item/storage/box/monkeycubes{ + pixel_x = -6; + pixel_y = 2 }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) -"jZ" = ( -/obj/machinery/sleeper/syndie/fullupgrade, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/item/disk/data/debug{ + pixel_y = 9; + pixel_x = 7 + }, +/turf/open/floor/iron/white/corner, +/area/station/medical/medbay) +"jL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) +"jU" = ( +/obj/structure/table, +/obj/item/melee/energy/axe, +/turf/open/floor/iron, +/area/station/commons/storage/primary) +"jZ" = ( +/obj/machinery/sleeper/syndie/fullupgrade, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -1014,26 +1207,6 @@ /obj/structure/server, /turf/open/floor/iron/dark, /area/station/science/explab) -"kF" = ( -/obj/structure/table/glass, -/obj/item/disk/surgery/debug, -/obj/item/storage/box/monkeycubes{ - pixel_x = 6; - pixel_y = 1 - }, -/obj/item/storage/box/monkeycubes{ - pixel_x = -6; - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/item/disk/data/debug{ - pixel_y = 9; - pixel_x = 7 - }, -/turf/open/floor/iron/white/corner, -/area/station/medical/medbay) "kS" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) @@ -1047,24 +1220,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) -"lA" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=2-Northwest"; - location = "1-Southwest" - }, -/turf/open/floor/iron, -/area/station/commons/storage/primary) -"lK" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Gravity Generator" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/gravity_generator) "mb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -1100,10 +1255,12 @@ }, /turf/open/floor/iron, /area/station/commons/storage/primary) -"nP" = ( +"nT" = ( /obj/structure/table, /obj/machinery/light/directional/south, -/obj/item/debug/human_spawner, +/obj/item/storage/medkit/regular, +/obj/item/healthanalyzer/advanced, +/obj/item/debug/omnitool/item_spawner, /turf/open/floor/iron, /area/station/commons/storage/primary) "od" = ( @@ -1132,6 +1289,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"pe" = ( +/obj/machinery/door/airlock, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/commons/storage/primary) "pr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -1150,12 +1313,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/storage/primary) -"pA" = ( -/obj/machinery/door/airlock/external/glass/ruin, -/obj/effect/turf_decal/stripes/full, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/cargo/storage) "pL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/caution/stand_clear{ @@ -1163,6 +1320,13 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"pY" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=1-Southwest"; + location = "4-Southeast" + }, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "pZ" = ( /obj/machinery/light/directional/north, /obj/machinery/camera/directional/north, @@ -1178,14 +1342,18 @@ /obj/machinery/door/airlock, /turf/open/floor/plating, /area/station/engineering/atmos) -"qe" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "cargounload" - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, +"qg" = ( +/obj/machinery/door/airlock/external/glass/ruin, +/obj/effect/turf_decal/stripes/full, +/turf/open/floor/iron/dark, /area/station/cargo/storage) +"qq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/transit_tube/station/reverse, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "qv" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -1210,6 +1378,14 @@ "qQ" = ( /turf/open/floor/engine, /area/station/cargo/miningoffice) +"qR" = ( +/obj/effect/landmark/start, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=4"; + location = "Center" + }, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "rh" = ( /obj/machinery/door/airlock, /obj/structure/cable, @@ -1238,25 +1414,9 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"rQ" = ( -/obj/machinery/door/airlock/external/glass/ruin, -/obj/effect/turf_decal/stripes/full, -/turf/open/floor/iron/dark, -/area/station/cargo/storage) "rT" = ( /turf/open/floor/circuit/green, /area/station/cargo/bitrunning/den) -"rZ" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "cargounload" - }, -/obj/machinery/door/poddoor{ - id = "cargounload"; - name = "Supply Dock Unloading Door" - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "sr" = ( /obj/machinery/door/airlock/shell, /turf/open/floor/iron/dark, @@ -1267,12 +1427,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"sO" = ( -/obj/effect/turf_decal/plaque{ - icon_state = "L2" - }, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "sT" = ( /obj/machinery/door/airlock, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1280,16 +1434,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/main) -"sU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/maintenance/department/bridge) "tn" = ( /obj/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/medical/chemistry) +"tz" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall/r_wall, +/area/station/commons/storage/primary) "tE" = ( /obj/machinery/door/airlock/research, /turf/open/floor/iron/dark, @@ -1301,14 +1455,6 @@ }, /turf/open/space/basic, /area/space) -"tI" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "cargoload" - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/station/cargo/storage) "tQ" = ( /obj/machinery/door/airlock/public/glass, /obj/structure/cable, @@ -1320,13 +1466,6 @@ /obj/structure/bot, /turf/open/floor/iron/dark, /area/station/science/explab) -"ub" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=1-Southwest"; - location = "4-Southeast" - }, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "uf" = ( /obj/structure/fans/tiny/invisible, /obj/effect/turf_decal/stripes/line{ @@ -1382,6 +1521,12 @@ /obj/machinery/door/airlock, /turf/open/floor/plating, /area/station/commons/storage/primary) +"vw" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Gravity Generator" + }, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "vy" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -1408,17 +1553,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"vV" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/vacuum/external, -/turf/open/floor/plating, -/area/station/hallway/secondary/entry) -"vX" = ( -/obj/structure/table, -/obj/item/card/emag, -/obj/item/flashlight/emp/debug, -/turf/open/floor/iron, -/area/station/command/bridge) "wa" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -1469,28 +1603,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"wT" = ( -/obj/structure/table, -/obj/item/card/id/advanced/centcom/ert{ - pixel_x = 6; - pixel_y = -6 - }, -/obj/item/card/id/advanced/chameleon, -/obj/item/card/id/advanced/gold/captains_spare{ - pixel_x = -6; - pixel_y = 6 +"wR" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=3-Northeast"; + location = "2-Northwest" }, /turf/open/floor/iron, -/area/station/command/bridge) +/area/station/commons/storage/primary) "wU" = ( /turf/closed/wall/r_wall, /area/station/science/explab) -"wV" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/directional/south, -/obj/item/bitrunning_debug, +"xq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/transit_tube/station/dispenser/reverse/flipped, /turf/open/floor/iron, -/area/station/cargo/bitrunning/den) +/area/station/engineering/gravity_generator) "xD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -1557,6 +1686,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/storage/primary) +"zo" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/atmos) "zS" = ( /obj/machinery/rnd/destructive_analyzer, /obj/machinery/airalarm/directional/north, @@ -1588,9 +1722,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"AM" = ( -/turf/open/floor/plating, -/area/station/maintenance/department/bridge) "Bp" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/stripes/line{ @@ -1623,21 +1754,16 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/command/bridge) +"BG" = ( +/obj/structure/table, +/obj/item/ammo_box/c10mm, +/obj/item/gun/ballistic/automatic/pistol, +/turf/open/floor/iron, +/area/station/command/bridge) "BM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"Cb" = ( -/obj/structure/table, -/obj/item/storage/toolbox/electrical, -/obj/item/multitool/circuit{ - pixel_x = -4 - }, -/obj/item/multitool{ - pixel_x = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/explab) "Ce" = ( /turf/open/floor/iron, /area/station/medical/chemistry) @@ -1672,12 +1798,6 @@ /obj/effect/turf_decal/stripes/full, /turf/open/floor/iron/dark, /area/station/medical/medbay) -"CO" = ( -/obj/machinery/door/airlock, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/construction) "CQ" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/stripes/line{ @@ -1685,15 +1805,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"CS" = ( -/obj/structure/table, -/obj/item/rcd_ammo/large, -/obj/item/rcd_ammo/large, -/obj/item/rcd_ammo/large, -/obj/item/construction/rcd/combat, -/obj/item/construction/plumbing, -/turf/open/floor/iron, -/area/station/command/bridge) "CT" = ( /obj/machinery/component_printer, /turf/open/floor/iron/dark, @@ -1705,12 +1816,6 @@ /obj/structure/rack, /turf/open/floor/iron/dark, /area/station/science/explab) -"Dk" = ( -/obj/structure/table, -/obj/item/card/id/advanced/gold/captains_spare, -/obj/machinery/keycard_auth/wall_mounted/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "DC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/corner, @@ -1734,6 +1839,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"DT" = ( +/obj/machinery/door/airlock/external/glass/ruin, +/obj/effect/turf_decal/stripes/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/storage) "DW" = ( /obj/machinery/computer/scan_consolenew{ dir = 1 @@ -1743,10 +1854,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/medical/medbay) -"DX" = ( -/obj/structure/sign/departments/evac, -/turf/closed/wall/r_wall, -/area/station/hallway/secondary/exit/departure_lounge) "Ef" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/tile/blue{ @@ -1754,10 +1861,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"Er" = ( -/obj/machinery/computer/rdconsole, -/turf/open/floor/iron, -/area/station/science) "Es" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -1791,14 +1894,6 @@ /obj/machinery/meter/layer4, /turf/open/floor/plating, /area/station/engineering/atmos) -"EQ" = ( -/obj/structure/table, -/obj/machinery/light/directional/south, -/obj/item/storage/medkit/regular, -/obj/item/healthanalyzer/advanced, -/obj/item/debug/omnitool/item_spawner, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "ER" = ( /mob/living/carbon/human, /obj/effect/turf_decal/tile/blue{ @@ -1816,23 +1911,22 @@ }, /turf/open/floor/iron, /area/station/medical/chemistry) -"Fm" = ( +"Fd" = ( +/obj/machinery/power/apc/auto_name/directional/west, /obj/structure/table, -/obj/item/gun/magic/wand/resurrection/debug, -/obj/item/gun/magic/wand/death/debug{ - pixel_y = 10 +/obj/item/uplink/debug{ + pixel_x = -4; + pixel_y = 4 }, -/obj/effect/turf_decal/tile/blue{ +/obj/item/uplink/nuclear/debug, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ 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) +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/unlocked, +/turf/open/floor/iron, +/area/station/command/bridge) "Fy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -1850,25 +1944,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/plating, /area/station/engineering/atmos) -"Ge" = ( -/obj/structure/table, -/obj/item/weldingtool/experimental, -/obj/item/inducer, -/obj/item/storage/belt/utility/chief/full, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/engineering/main) -"Gp" = ( -/obj/machinery/camera/directional/north, -/obj/structure/table, -/obj/item/construction/rld, -/obj/item/construction/rcd/arcd, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "GC" = ( /obj/machinery/atmospherics/pipe/layer_manifold{ dir = 4 @@ -1896,6 +1971,12 @@ /obj/machinery/chem_mass_spec, /turf/open/floor/iron, /area/station/medical/chemistry) +"Hb" = ( +/obj/machinery/door/airlock, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/construction) "Hc" = ( /obj/machinery/camera/directional/north, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -1923,12 +2004,6 @@ /obj/machinery/camera/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"In" = ( -/obj/structure/table, -/obj/item/storage/backpack/holding, -/obj/item/storage/part_replacer/bluespace/tier4, -/turf/open/floor/iron, -/area/station/command/bridge) "Ir" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -1938,19 +2013,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/commons/storage/primary) -"Iv" = ( -/obj/structure/table, -/obj/item/organ/internal/cyberimp/bci{ - pixel_y = 5 - }, -/obj/item/organ/internal/cyberimp/bci{ - pixel_y = 5 - }, -/obj/item/organ/internal/cyberimp/bci{ - pixel_y = 5 - }, -/turf/open/floor/iron/dark, -/area/station/science/explab) "Iy" = ( /obj/structure/closet/secure_closet/research_director{ locked = 0 @@ -1965,11 +2027,6 @@ /obj/machinery/computer/quantum_console, /turf/open/floor/iron, /area/station/cargo/bitrunning/den) -"IG" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/camera/directional/north, -/turf/open/floor/iron, -/area/station/construction) "IH" = ( /obj/structure/closet/secure_closet/engineering_welding{ locked = 0 @@ -1990,42 +2047,32 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/medical/chemistry) +"IX" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "cargounload" + }, +/obj/structure/sign/warning/vacuum/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) "Jd" = ( /obj/machinery/door/airlock, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/commons/storage/primary) -"Jk" = ( -/obj/structure/table, -/obj/item/screwdriver/power, -/obj/item/crowbar/power, -/turf/open/floor/iron, -/area/station/engineering/main) "Jp" = ( /obj/machinery/gravity_generator/main, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"JK" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "cargounload" +"JJ" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=4-Southeast"; + location = "3-Northeast" }, -/obj/structure/sign/warning/vacuum/directional/east, /turf/open/floor/iron, -/area/station/cargo/storage) -"JL" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "cargoload" - }, -/obj/machinery/door/poddoor{ - id = "cargoload"; - name = "Supply Dock Loading Door" - }, -/turf/open/floor/plating, -/area/station/cargo/storage) +/area/station/commons/storage/primary) "JV" = ( /obj/machinery/camera/autoname/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -2040,13 +2087,6 @@ /obj/effect/turf_decal/stripes/full, /turf/open/floor/iron, /area/station/engineering/main) -"Kp" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/unlocked, -/turf/open/floor/iron/dark, -/area/station/medical/chemistry) "Ks" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/airlock, @@ -2054,18 +2094,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/atmos) -"Kw" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=4"; - location = "Center" +"Kx" = ( +/obj/structure/table, +/obj/item/analyzer, +/obj/item/wrench, +/obj/machinery/light/directional/south, +/turf/open/floor/plating, +/area/station/engineering/atmos) +"Lb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/transit_tube/station/reverse/flipped{ + dir = 1 + }, +/obj/structure/transit_tube_pod{ + dir = 4 }, /turf/open/floor/iron, -/area/station/commons/storage/primary) -"KF" = ( -/obj/structure/table, -/obj/item/melee/energy/axe, -/turf/open/floor/iron, -/area/station/commons/storage/primary) +/area/station/engineering/gravity_generator) "Lq" = ( /obj/effect/turf_decal/stripes/full, /obj/machinery/door/airlock/external/glass/ruin{ @@ -2077,10 +2124,15 @@ /obj/machinery/chem_dispenser/chem_synthesizer, /turf/open/floor/iron/dark, /area/station/medical/chemistry) -"LP" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall/r_wall, -/area/station/cargo/storage) +"LD" = ( +/obj/item/surgery_tray/full/advanced, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/white/corner, +/area/station/medical/medbay) "LS" = ( /obj/machinery/quantum_server, /turf/open/floor/iron, @@ -2138,15 +2190,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) -"MQ" = ( -/obj/structure/table, -/obj/item/flashlight{ - pixel_y = 5 - }, -/obj/item/storage/toolbox/syndicate, -/obj/item/stock_parts/power_store/cell/infinite, -/turf/open/floor/iron, -/area/station/engineering/main) "Nb" = ( /obj/machinery/bci_implanter, /turf/open/floor/iron/dark, @@ -2155,12 +2198,6 @@ /obj/machinery/chem_recipe_debug, /turf/open/floor/iron, /area/station/medical/chemistry) -"Nf" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/commons/storage/primary) "Ni" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -2181,10 +2218,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) -"NW" = ( -/obj/structure/sign/warning/pods, -/turf/closed/wall/r_wall, -/area/station/hallway/secondary/entry) "NZ" = ( /obj/machinery/rnd/production/protolathe/department, /turf/open/floor/iron, @@ -2202,22 +2235,14 @@ dir = 1 }, /area/station/medical/medbay) -"OC" = ( -/obj/machinery/power/apc/auto_name/directional/west, +"Ov" = ( /obj/structure/table, -/obj/item/uplink/debug{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/uplink/nuclear/debug, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/unlocked, -/turf/open/floor/iron, -/area/station/command/bridge) +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/bluespace, +/obj/item/stock_parts/power_store/cell/bluespace, +/obj/item/stock_parts/power_store/cell/bluespace, +/turf/open/floor/iron/dark, +/area/station/science/explab) "OF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2229,15 +2254,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"OJ" = ( -/obj/machinery/door/airlock, -/turf/open/floor/plating, -/area/station/medical/medbay) -"OL" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/radiation/rad_area/directional/north, -/turf/open/floor/plating, -/area/station/engineering/gravity_generator) "OO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -2253,15 +2269,6 @@ /obj/item/disk/tech_disk/debug, /turf/open/floor/iron, /area/station/science) -"OY" = ( -/turf/closed/wall/r_wall, -/area/station/maintenance/department/bridge) -"OZ" = ( -/obj/structure/table, -/obj/item/storage/box/shipping, -/obj/item/boulder_beacon, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "Pc" = ( /obj/effect/turf_decal/plaque{ icon_state = "L13" @@ -2271,12 +2278,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/storage/primary) -"Pi" = ( -/obj/structure/table, -/obj/item/storage/toolbox/syndicate, -/obj/item/debug/omnitool, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "Pk" = ( /obj/machinery/airalarm/directional/north, /obj/effect/mapping_helpers/airalarm/unlocked, @@ -2294,6 +2295,13 @@ /obj/machinery/meter/layer2, /turf/open/floor/plating, /area/station/engineering/atmos) +"Px" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/unlocked, +/turf/open/floor/iron/dark, +/area/station/medical/chemistry) "PJ" = ( /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/unlocked, @@ -2305,14 +2313,13 @@ }, /turf/open/floor/iron/white/corner, /area/station/medical/medbay) -"Qa" = ( -/obj/machinery/power/apc/auto_name/directional/west, +"Qi" = ( /obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/unlocked, +/obj/structure/transit_tube/station/dispenser/reverse{ + dir = 1 + }, /turf/open/floor/iron, -/area/station/commons/storage/primary) +/area/station/engineering/gravity_generator) "Qu" = ( /obj/docking_port/stationary/mining_home{ dir = 8 @@ -2370,6 +2377,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/atmos) +"Rx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/closet/radiation, +/obj/structure/sign/warning/radiation/rad_area/directional/north, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "RD" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue{ @@ -2388,6 +2403,12 @@ dir = 1 }, /area/station/medical/medbay) +"RE" = ( +/obj/machinery/door/airlock/external/glass/ruin, +/obj/effect/turf_decal/stripes/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/storage) "RM" = ( /obj/structure/closet/secure_closet/hop{ locked = 0 @@ -2410,6 +2431,12 @@ }, /turf/open/floor/iron/white/corner, /area/station/medical/medbay) +"SC" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/directional/south, +/obj/item/bitrunning_debug, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "SU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, @@ -2429,6 +2456,14 @@ /obj/machinery/door/poddoor, /turf/open/floor/engine, /area/station/hallway/secondary/entry) +"Ts" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Gravity Generator" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/gravity_generator) "Tt" = ( /turf/open/floor/plating, /area/station/maintenance/aft) @@ -2437,13 +2472,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/atmos) -"TK" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "TR" = ( /obj/machinery/netpod, /turf/open/floor/iron, @@ -2469,21 +2497,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"UO" = ( -/obj/structure/table, -/obj/machinery/camera/autoname/directional/south, -/obj/item/gun/magic/wand/resurrection/debug, -/turf/open/floor/iron, -/area/station/commons/storage/primary) -"US" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Gravity Generator" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/gravity_generator) "Va" = ( /obj/machinery/power/smes/full, /obj/effect/turf_decal/stripes/line{ @@ -2503,14 +2516,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"VE" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/bluespace, -/obj/item/stock_parts/power_store/cell/bluespace, -/obj/item/stock_parts/power_store/cell/bluespace, -/turf/open/floor/iron/dark, -/area/station/science/explab) "We" = ( /obj/machinery/newscaster/directional/west, /turf/open/floor/iron, @@ -2519,19 +2524,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) -"Ws" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall/r_wall, -/area/station/commons/storage/primary) -"Wu" = ( -/obj/item/surgery_tray/full/advanced, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/white/corner, -/area/station/medical/medbay) "WK" = ( /obj/structure/money_bot, /turf/open/floor/iron/dark, @@ -2549,8 +2541,7 @@ "Xg" = ( /obj/machinery/light/directional/east, /obj/machinery/vending/syndichem{ - onstation = 0; - req_access = null + onstation = 0 }, /turf/open/floor/iron, /area/station/medical/chemistry) @@ -2561,14 +2552,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"Xs" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "cargoload" - }, -/obj/structure/sign/warning/vacuum/directional/east, -/turf/open/floor/iron, -/area/station/cargo/storage) "Xy" = ( /obj/machinery/door/airlock, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2588,6 +2571,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science) +"XF" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "cargoload" + }, +/obj/structure/sign/warning/vacuum/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) "XG" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -2599,6 +2590,19 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) +"XN" = ( +/obj/structure/table, +/obj/item/organ/internal/cyberimp/bci{ + pixel_y = 5 + }, +/obj/item/organ/internal/cyberimp/bci{ + pixel_y = 5 + }, +/obj/item/organ/internal/cyberimp/bci{ + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/station/science/explab) "XU" = ( /obj/machinery/atmospherics/components/tank/air, /obj/machinery/light/directional/north, @@ -2611,18 +2615,29 @@ "Yd" = ( /turf/open/floor/iron, /area/station/cargo/bitrunning/den) -"Yo" = ( +"Ym" = ( /obj/structure/table, -/obj/item/analyzer, -/obj/item/wrench, -/obj/machinery/light/directional/south, -/turf/open/floor/plating, -/area/station/engineering/atmos) +/obj/item/storage/toolbox/electrical, +/obj/item/multitool/circuit{ + pixel_x = -4 + }, +/obj/item/multitool{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark, +/area/station/science/explab) "Yt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/machinery/meter, /turf/open/floor/plating, /area/station/engineering/atmos) +"Yy" = ( +/obj/machinery/light/directional/north, +/obj/machinery/rnd/production/circuit_imprinter/department, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/science) "Yz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -2635,13 +2650,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"YQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/closet/radiation, -/turf/open/floor/iron, -/area/station/engineering/gravity_generator) "Zd" = ( /obj/machinery/airalarm/directional/north, /obj/effect/mapping_helpers/airalarm/unlocked, @@ -2652,6 +2660,31 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/engineering/main) +"Zo" = ( +/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) +"Zz" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/unlocked, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "ZB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -2662,6 +2695,12 @@ /obj/machinery/suit_storage_unit/ce, /turf/open/floor/iron, /area/station/engineering/atmos) +"ZK" = ( +/obj/structure/table, +/obj/item/storage/box/shipping, +/obj/item/boulder_beacon, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "ZP" = ( /turf/open/floor/iron/dark, /area/station/science/explab) @@ -3519,7 +3558,7 @@ Ue IF Aj uL -wV +SC Ue aa aa @@ -4529,7 +4568,7 @@ od od od dj -NW +ed eh ax LW @@ -4819,13 +4858,13 @@ lc wB eh gF -iS +fj aa aa aa aa aa -iS +fj eh eh en @@ -5557,7 +5596,7 @@ eh BM dY dY -vV +fn fs en dY @@ -5629,7 +5668,7 @@ aD aD bC de -at +gJ aD aD dR @@ -5811,7 +5850,7 @@ ag aD aD aD -aG +bT cI PJ aD @@ -5826,7 +5865,7 @@ eh eh eh eh -ar +eF HW fM eh @@ -5921,8 +5960,8 @@ cN cN cN cN -cy -cy +ef +ef cN cN cN @@ -5997,7 +6036,7 @@ aw hm aw hr -Yo +Kx ah zS bB @@ -6024,7 +6063,7 @@ cN Ni vm uQ -VE +Ov Ir aa aa @@ -6181,9 +6220,9 @@ GC aN bb Ru -gt +zo ah -dq +Yy bD QM QM @@ -6191,7 +6230,7 @@ rh ZB QV FA -CO +Hb Es dn dn @@ -6207,8 +6246,8 @@ dL cN Pk kp -Iv -Cb +XN +Ym Ir aa aa @@ -6275,7 +6314,7 @@ bc Ru ZD ah -Er +bF OU wc Ct @@ -6283,7 +6322,7 @@ gd bE QV bE -cy +ef cY dn dn @@ -6376,7 +6415,7 @@ OS QV bE cN -IG +dW dn dn dn @@ -6552,7 +6591,7 @@ TT ab ab bu -OC +Fd ce cp bu @@ -6644,7 +6683,7 @@ yN yN ab bv -vX +bI cf EI bv @@ -6736,7 +6775,7 @@ an yN ab bv -gP +BG cf BD bu @@ -6828,14 +6867,14 @@ an yN ab bv -wT +bJ cf xD io lu QV bE -cy +ef cY dn dn @@ -6920,14 +6959,14 @@ ab ab ac bv -In +bK cf Iy bu XG QV bE -cy +ef cY dn dn @@ -7012,7 +7051,7 @@ aj ac ac bv -CS +aK cf RM bv @@ -7104,7 +7143,7 @@ aj ac ac bu -Gp +bM cg cr bu @@ -7204,7 +7243,7 @@ kS QV bE cS -Qa +Zz dp dl dl @@ -7284,9 +7323,9 @@ ap aA We Ma -MQ -Ge -Jk +aS +bd +bo aj hD cj @@ -7296,7 +7335,7 @@ qH QV bE cS -TK +dc dC dC dC @@ -7390,14 +7429,14 @@ bE cS qv dJ -ia +wR +dJ dJ dJ -Kw dJ dJ dJ -lA +dN dJ dJ cS @@ -7472,7 +7511,7 @@ mk bf bp aj -Kp +Px tn Ce GZ @@ -7481,7 +7520,7 @@ QV bE cS jg -sO +dq dJ dJ dJ @@ -7491,7 +7530,7 @@ dJ dJ dJ dJ -Pi +gi cS fI ga @@ -7555,12 +7594,12 @@ aa aa aa aa -OY -OY ak ak ak -lK +ak +ak +Ts ak ak ak @@ -7583,7 +7622,7 @@ dJ dJ dJ dJ -EQ +nT cS fO fO @@ -7647,8 +7686,8 @@ aa aa aa aa -OY -AM +aa +aa ak Va Bp @@ -7675,7 +7714,7 @@ dJ dJ dJ dJ -KF +jU cS fO fO @@ -7739,13 +7778,13 @@ aa aa aa aa -sU -AM +aa +aa ak -YQ -bh -bh -bh +Rx +aX +aX +aX br ak bS @@ -7761,13 +7800,13 @@ dt dJ dD dJ -dI +qR dJ XZ dJ dJ dJ -UO +ea cS fO fO @@ -7831,14 +7870,14 @@ aa aa aa aa -OY -AM +aa +aa +ak +gW +Lb +aX +Qi ak -OL -aI -US -aI -aI ak Ly EX @@ -7859,7 +7898,7 @@ dJ dJ dJ dJ -OZ +ZK cS fP fO @@ -7923,14 +7962,14 @@ aa aa aa aa -OY -AM -ak -av -av -av -av -av +aa +aa +aa +aI +af +aX +ad +aI by by ck @@ -7951,9 +7990,9 @@ dJ dJ dJ dJ -nP +dQ cS -Dk +gz fO fO fO @@ -8015,37 +8054,37 @@ aa aa aa aa -OY -AM -ak -av -MN -MN -MN -av +aa +aa +aa +aI +af +aX +ad +aI by Ot cl RD cl -Fm +Zo wa cJ by Pc dw -ci +dJ dJ dJ dI dJ dJ dJ -ub +dJ dJ kf cS -jV +fQ fO fO fO @@ -8107,14 +8146,14 @@ aa aa aa aa -OY -AM -ak -dT -MN -av -Jp -av +aa +aa +aa +aI +af +aX +ad +aI by DD cm @@ -8126,14 +8165,14 @@ Sj by jk dJ -dJ +JJ dJ dJ yl dJ dJ dJ -dJ +pY dJ dJ cS @@ -8141,7 +8180,7 @@ fS fO AD fO -DX +gk aa aa aa @@ -8199,14 +8238,14 @@ aa aa aa aa -OY -AM -ak -av -MN -MN -MN -av +aa +aa +aa +aI +af +aX +ad +aI by ER cm @@ -8214,7 +8253,7 @@ cm cm Un WL -Wu +LD by DC Bz @@ -8228,7 +8267,7 @@ MM MM MM qw -Nf +pe pr Fy Fy @@ -8291,14 +8330,14 @@ aa aa aa aa -OY -AM -ak -av -av -aY -av -av +aa +aa +aa +aI +af +bY +ad +aI by jZ cm @@ -8306,7 +8345,7 @@ cm cm cm WL -kF +jz by dB dx @@ -8383,14 +8422,14 @@ aa aa aa aa -OY -AM -ak -ak -ak -ak -ak -ak +aa +aa +aa +aI +af +aX +ad +aI by er cm @@ -8407,7 +8446,7 @@ cS cS Is Jd -Ws +tz cS cS cS @@ -8475,15 +8514,15 @@ aa aa aa aa -OY -AM -AM -AM -AM -AM -AM -AM -OJ +aa +aa +aa +aI +af +aX +ad +aI +by wk PK PK @@ -8567,14 +8606,14 @@ aa aa aa aa -OY -OY -OY -OY -OY -OY -OY -OY +aa +aa +aa +aI +af +aX +ad +aI by by by @@ -8662,11 +8701,11 @@ aa fg fg fg -fg -fg -fg -fg -fg +aI +af +aX +ad +aI aa aa ck @@ -8679,13 +8718,13 @@ by ev eA eA -JK +IX eN Ao QP pL eT -Xs +XF fm ev et @@ -8754,11 +8793,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +hS +bY +ad +aI aa aa ck @@ -8772,11 +8811,11 @@ et fh fh et -rZ -cX +eY +DT et -pA -JL +RE +fc et fh fh @@ -8846,11 +8885,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +af +aX +ad +aI aa aa by @@ -8864,11 +8903,11 @@ aa aa aa fh -qe +eC gH ng GV -tI +fl fh aa aa @@ -8938,11 +8977,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +af +aX +ad +aI aa aa aa @@ -8956,11 +8995,11 @@ aa aa aa fh -qe +eC An ya An -tI +fl fh aa aa @@ -9030,11 +9069,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +af +aX +ad +aI aa aa aa @@ -9048,11 +9087,11 @@ aa aa aa et -rZ -rQ -LP -rQ -JL +eY +qg +fB +qg +fc et aa aa @@ -9122,11 +9161,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +af +aX +ad +aI aa aa aa @@ -9214,11 +9253,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +af +bY +ad +aI aa aa aa @@ -9306,11 +9345,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +af +aX +ad +aI aa aa aa @@ -9398,11 +9437,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +af +aX +ad +aI aa aa aa @@ -9490,11 +9529,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +af +aX +ad +aI aa aa aa @@ -9582,11 +9621,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +aI +af +aX +ad +aI aa aa aa @@ -9674,11 +9713,11 @@ aa aa aa aa -aa -aa -aa -aa -aa +ak +qq +bh +xq +ak aa aa aa @@ -9765,13 +9804,13 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa +ak +ak +aI +vw +aI +ak +ak aa aa aa @@ -9857,13 +9896,13 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa +ak +av +av +av +av +av +ak aa aa aa @@ -9949,13 +9988,13 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa +ak +av +MN +MN +MN +av +ak aa aa aa @@ -10041,13 +10080,13 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa +ak +dT +MN +av +Jp +av +ak aa aa aa @@ -10133,13 +10172,13 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa +ak +av +MN +MN +MN +av +ak aa aa aa @@ -10225,13 +10264,13 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa +ak +av +av +aY +av +av +ak aa aa aa @@ -10317,13 +10356,13 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa +ak +ak +ak +ak +ak +ak +ak aa aa aa diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 9f5cd41becb6c..e730dea04bc99 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -196,13 +196,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) -"aV" = ( -/obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/radio/headset/headset_cent, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/briefing) "aW" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -712,10 +705,21 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/admin) -"de" = ( -/obj/effect/landmark/start/new_player, -/turf/cordon, -/area/misc/start) +"df" = ( +/obj/structure/table/wood, +/obj/item/clipboard, +/obj/item/folder/red, +/obj/item/stamp/denied{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/stamp{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stamp/centcom, +/turf/open/floor/iron/grimy, +/area/centcom/central_command_areas/admin) "dh" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 4 @@ -785,6 +789,20 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) +"ds" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/centcom{ + name = "CentCom Security" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "dv" = ( /obj/structure/railing/corner{ dir = 8 @@ -1111,6 +1129,13 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) +"fb" = ( +/obj/machinery/flasher{ + id = "tdomeflash"; + name = "Thunderdome Flash" + }, +/turf/open/floor/circuit/green, +/area/centcom/tdome/arena) "fc" = ( /obj/effect/turf_decal/delivery, /obj/effect/light_emitter/thunderdome, @@ -1175,17 +1200,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) -"fy" = ( -/obj/structure/signpost/salvation{ - icon = 'icons/obj/structures.dmi'; - icon_state = "ladder10"; - invisibility = 100 - }, -/turf/open/misc/ashplanet/wateryrock{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15"; - planetary_atmos = 0 - }, -/area/awaymission/errorroom) "fA" = ( /obj/machinery/vending/cola, /obj/effect/turf_decal/delivery, @@ -1283,9 +1297,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/evacuation/ship) -"fX" = ( -/turf/cordon, -/area/misc/start) "fZ" = ( /obj/effect/landmark/ctf, /turf/open/space/basic, @@ -1322,11 +1333,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/centcom/central_command_areas/prison) -"gh" = ( -/turf/closed/indestructible/fakedoor{ - name = "Thunderdome Admin" - }, -/area/centcom/tdome/administration) "gi" = ( /obj/docking_port/stationary{ dir = 4; @@ -1480,6 +1486,19 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/armory) +"gY" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/centcom{ + name = "CentCom" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/control) "gZ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -1663,6 +1682,13 @@ /obj/item/soap/nanotrasen, /turf/open/floor/iron/white, /area/centcom/tdome/observation) +"ig" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/taperecorder, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/ferry) "ih" = ( /obj/structure/bookcase/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -1778,11 +1804,6 @@ /obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron, /area/centcom/central_command_areas/prison) -"iB" = ( -/turf/closed/indestructible/fakedoor{ - name = "CentCom Cell" - }, -/area/centcom/central_command_areas/prison/cells) "iC" = ( /obj/structure/table/wood, /obj/machinery/chem_dispenser/drinks/beer{ @@ -2412,10 +2433,7 @@ "lb" = ( /obj/structure/table/wood, /obj/machinery/door/window/left/directional/south, -/obj/item/radio/intercom{ - desc = "Talk smack through this."; - syndie = 1 - }, +/obj/item/radio/intercom/syndicate, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/courtroom) "lc" = ( @@ -2428,10 +2446,7 @@ /area/centcom/central_command_areas/courtroom) "ld" = ( /obj/structure/table/wood, -/obj/item/radio/intercom{ - desc = "Talk smack through this."; - syndie = 1 - }, +/obj/item/radio/intercom/syndicate, /obj/machinery/door/window/brigdoor/right/directional/south{ name = "CentCom Stand"; req_access = list("cent_captain") @@ -2600,10 +2615,8 @@ /obj/structure/chair{ dir = 8 }, -/obj/item/radio/intercom{ - desc = "Talk smack through this."; - pixel_x = -32; - syndie = 1 +/obj/item/radio/intercom/syndicate{ + pixel_x = -32 }, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/courtroom) @@ -2669,10 +2682,7 @@ /area/centcom/central_command_areas/courtroom) "mn" = ( /obj/structure/table/wood, -/obj/item/radio/intercom{ - desc = "Talk smack through this."; - syndie = 1 - }, +/obj/item/radio/intercom/syndicate, /turf/open/floor/iron/grimy, /area/centcom/central_command_areas/courtroom) "mo" = ( @@ -2905,6 +2915,11 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/fore) +"nz" = ( +/obj/structure/table/reinforced, +/obj/machinery/fax/admin, +/turf/open/floor/iron/grimy, +/area/centcom/central_command_areas/briefing) "nA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -3675,18 +3690,6 @@ /obj/effect/mapping_helpers/airlock/access/all/admin/captain, /turf/open/floor/iron, /area/centcom/central_command_areas/prison) -"qM" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/machinery/button/door/indestructible{ - id = "XCCFerry"; - name = "Hanger Bay Shutters"; - pixel_y = -38 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/ferry) "qO" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -3755,27 +3758,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/prison) -"rh" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/obj/structure/table/reinforced, -/obj/item/stack/package_wrap{ - pixel_y = 11; - pixel_x = -16 - }, -/obj/item/stack/cable_coil{ - pixel_y = 4; - pixel_x = -10 - }, -/obj/item/hand_labeler{ - pixel_y = 1 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/item/hand_labeler_refill{ - pixel_x = 8; - pixel_y = 12 - }, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/supply) "rk" = ( /turf/open/floor/wood, /area/centcom/central_command_areas/courtroom) @@ -3799,6 +3781,13 @@ /obj/effect/turf_decal/tile/dark_blue/fourcorners, /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) +"rr" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/clipboard, +/obj/item/radio/headset/headset_cent, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/briefing) "rs" = ( /obj/effect/landmark/prisonwarp, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -3844,6 +3833,10 @@ /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood/tile, /area/centcom/central_command_areas/evacuation/ship) +"rA" = ( +/obj/effect/landmark/start/new_player, +/turf/cordon, +/area/misc/start) "rB" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -4403,20 +4396,6 @@ /obj/structure/sign/poster/contraband/syndicate_recruitment/directional/north, /turf/open/indestructible/dark, /area/centcom/central_command_areas/admin) -"ub" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "CentCom" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/admin/general, -/turf/open/floor/iron, -/area/centcom/central_command_areas/control) "uc" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, @@ -4450,6 +4429,20 @@ /obj/structure/flora/bush/generic/style_random, /turf/open/floor/grass, /area/centcom/central_command_areas/prison) +"uk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/centcom{ + name = "CentCom" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/turf/open/floor/iron, +/area/centcom/central_command_areas/control) "ul" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/yellow/corner{ @@ -4981,20 +4974,6 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/ferry) -"wu" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "CentCom Security" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/admin/general, -/turf/open/floor/iron, -/area/centcom/central_command_areas/ferry) "wv" = ( /obj/machinery/door/poddoor/shutters{ id = "XCCFerry"; @@ -5071,19 +5050,6 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/control) -"wJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "CentCom" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/evacuation) "wK" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -5506,6 +5472,21 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/supply) +"yR" = ( +/obj/item/clipboard, +/obj/item/folder/red, +/obj/item/stamp/denied{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/stamp{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/table/reinforced, +/obj/item/stamp/centcom, +/turf/open/floor/iron/grimy, +/area/centcom/central_command_areas/briefing) "yS" = ( /obj/structure/table/reinforced, /obj/item/storage/box/emps, @@ -5516,19 +5497,6 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/armory) -"yU" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "CentCom" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/control) "yV" = ( /obj/docking_port/stationary{ dir = 8; @@ -5788,6 +5756,19 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/two) +"zO" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Red Team"; + network = list("thunder"); + pixel_x = 11; + pixel_y = -9; + resistance_flags = 64 + }, +/obj/effect/landmark/thunderdome/two, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/light_emitter/thunderdome, +/turf/open/floor/iron, +/area/centcom/tdome/arena) "zR" = ( /obj/structure/closet/secure_closet/personal, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -6674,19 +6655,6 @@ /obj/effect/light_emitter/thunderdome, /turf/open/floor/iron, /area/centcom/tdome/arena) -"DT" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Green Team"; - network = list("thunder"); - pixel_x = 12; - pixel_y = -10; - resistance_flags = 64 - }, -/obj/effect/landmark/thunderdome/one, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/light_emitter/thunderdome, -/turf/open/floor/iron, -/area/centcom/tdome/arena) "DU" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/turf_decal/stripes/line, @@ -6784,6 +6752,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) +"EA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/centcom{ + name = "CentCom" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/evacuation) "EB" = ( /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 8 @@ -6980,6 +6961,17 @@ /obj/effect/light_emitter/thunderdome, /turf/open/floor/iron, /area/centcom/tdome/arena) +"FM" = ( +/obj/structure/signpost/salvation{ + icon = 'icons/obj/structures.dmi'; + icon_state = "ladder10"; + invisibility = 100 + }, +/turf/open/misc/ashplanet/wateryrock{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15"; + planetary_atmos = 0 + }, +/area/awaymission/errorroom) "FO" = ( /obj/structure/table/reinforced, /obj/item/computer_disk/quartermaster, @@ -6995,6 +6987,11 @@ /obj/effect/light_emitter/podbay, /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/pod_storage) +"FU" = ( +/turf/closed/indestructible/fakedoor{ + name = "Thunderdome Admin" + }, +/area/centcom/tdome/administration) "FX" = ( /obj/machinery/computer/auxiliary_base/directional/north, /obj/structure/table/reinforced, @@ -7009,12 +7006,6 @@ }, /turf/open/floor/iron, /area/centcom/tdome/observation) -"Ga" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/fax, -/turf/open/floor/iron/dark, -/area/centcom/central_command_areas/ferry) "Gb" = ( /obj/effect/light_emitter/thunderdome, /turf/closed/indestructible/fakeglass, @@ -7392,6 +7383,19 @@ }, /turf/open/floor/iron, /area/centcom/central_command_areas/prison) +"Im" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/centcom{ + name = "CentCom" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/control) "Io" = ( /obj/docking_port/stationary{ dir = 8; @@ -7435,6 +7439,11 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) +"IF" = ( +/turf/closed/indestructible/fakedoor{ + name = "CentCom Cell" + }, +/area/centcom/central_command_areas/prison/cells) "IK" = ( /obj/structure/closet/secure_closet/ert_sec, /obj/effect/turf_decal/stripes/line{ @@ -7473,13 +7482,6 @@ "Ji" = ( /turf/open/floor/circuit/green, /area/centcom/tdome/arena) -"Jj" = ( -/obj/machinery/flasher{ - id = "tdomeflash"; - name = "Thunderdome Flash" - }, -/turf/open/floor/circuit/green, -/area/centcom/tdome/arena) "Jl" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/turf_decal/tile/green/anticorner/contrasted, @@ -7556,17 +7558,6 @@ }, /turf/open/floor/iron, /area/centcom/tdome/observation) -"Ke" = ( -/obj/item/clipboard, -/obj/item/folder/red, -/obj/item/stamp/denied{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stamp, -/obj/structure/table/reinforced, -/turf/open/floor/iron/grimy, -/area/centcom/central_command_areas/briefing) "Kf" = ( /obj/machinery/door/airlock/centcom{ name = "Administrative Storage" @@ -7589,6 +7580,20 @@ }, /turf/open/floor/iron/white, /area/centcom/tdome/observation) +"Kv" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/centcom{ + name = "CentCom Security" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/turf/open/floor/iron, +/area/centcom/central_command_areas/ferry) "KA" = ( /obj/effect/landmark/thunderdome/two, /obj/effect/turf_decal/stripes/line{ @@ -7687,6 +7692,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/textured_large, /area/centcom/central_command_areas/evacuation/ship) +"KW" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/machinery/button/door/indestructible{ + id = "XCCFerry"; + name = "Hanger Bay Shutters"; + pixel_y = -38 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/ferry) "KZ" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ @@ -8266,6 +8283,27 @@ /obj/machinery/light/directional/south, /turf/open/floor/wood, /area/centcom/central_command_areas/admin) +"NN" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/obj/structure/table/reinforced, +/obj/item/stack/package_wrap{ + pixel_y = 11; + pixel_x = -16 + }, +/obj/item/stack/cable_coil{ + pixel_y = 4; + pixel_x = -10 + }, +/obj/item/hand_labeler{ + pixel_y = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/hand_labeler_refill{ + pixel_x = 8; + pixel_y = 12 + }, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/supply) "NO" = ( /turf/open/floor/iron/dark, /area/centcom/central_command_areas/supplypod) @@ -8352,19 +8390,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/centcom/central_command_areas/evacuation) -"Oj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "CentCom" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/iron, -/area/centcom/central_command_areas/control) "Om" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -8821,19 +8846,6 @@ "PW" = ( /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/three) -"PX" = ( -/obj/structure/table/reinforced, -/obj/item/folder/red{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/folder/blue{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/lighter, -/turf/open/floor/iron/grimy, -/area/centcom/central_command_areas/briefing) "PY" = ( /obj/structure/closet/crate/bin, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -9249,6 +9261,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/courtroom) +"RQ" = ( +/obj/machinery/camera/directional/north{ + c_tag = "Green Team"; + network = list("thunder"); + pixel_x = 12; + pixel_y = -10; + resistance_flags = 64 + }, +/obj/effect/landmark/thunderdome/one, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/light_emitter/thunderdome, +/turf/open/floor/iron, +/area/centcom/tdome/arena) "RR" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -9613,6 +9638,9 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) +"TJ" = ( +/turf/cordon, +/area/misc/start) "TK" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -9796,19 +9824,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/centcom/tdome/observation) -"UE" = ( -/obj/machinery/camera/directional/north{ - c_tag = "Red Team"; - network = list("thunder"); - pixel_x = 11; - pixel_y = -9; - resistance_flags = 64 - }, -/obj/effect/landmark/thunderdome/two, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/light_emitter/thunderdome, -/turf/open/floor/iron, -/area/centcom/tdome/arena) "UH" = ( /obj/machinery/light/directional/west, /obj/structure/closet/secure_closet/personal, @@ -10258,27 +10273,11 @@ /obj/machinery/computer/station_alert{ dir = 8 }, -/obj/item/radio/intercom{ - desc = "Talk smack through this."; - pixel_x = 28; - syndie = 1 +/obj/item/radio/intercom/syndicate{ + pixel_x = 28 }, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/control) -"WQ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "CentCom Security" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/admin/general, -/turf/open/floor/iron, -/area/centcom/central_command_areas/ferry) "WR" = ( /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) @@ -10503,17 +10502,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/centcom/central_command_areas/supplypod) -"XV" = ( -/obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/folder/red, -/obj/item/stamp/denied{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stamp, -/turf/open/floor/iron/grimy, -/area/centcom/central_command_areas/admin) "Ya" = ( /turf/closed/indestructible/riveted, /area/centcom/central_command_areas/armory) @@ -10925,20 +10913,20 @@ /area/centcom/central_command_areas/supply) (1,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ gu aa aa @@ -11182,21 +11170,21 @@ aa aa "} (2,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -11439,21 +11427,21 @@ LV aa "} (3,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -11696,21 +11684,21 @@ LV aa "} (4,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -11953,21 +11941,21 @@ LV aa "} (5,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -12210,21 +12198,21 @@ LV aa "} (6,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -12467,21 +12455,21 @@ LV aa "} (7,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -12724,21 +12712,21 @@ LV aa "} (8,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -de -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +rA +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -12981,21 +12969,21 @@ LV aa "} (9,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -13232,27 +13220,27 @@ zi ik ik ZE -fy +FM LW LV aa "} (10,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -13495,21 +13483,21 @@ LV aa "} (11,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -13752,21 +13740,21 @@ LV aa "} (12,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -14009,21 +13997,21 @@ LV aa "} (13,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -14266,21 +14254,21 @@ LV aa "} (14,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -14523,21 +14511,21 @@ LV aa "} (15,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -14780,21 +14768,21 @@ LV aa "} (16,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -15037,21 +15025,21 @@ LV aa "} (17,1,1) = {" -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX -fX +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ +TJ aa aa aa @@ -45272,7 +45260,7 @@ aa aa aa oe -Ga +ig sq to ZN @@ -45532,7 +45520,7 @@ mD FX sr tp -qM +KW mD aa oe @@ -47077,9 +47065,9 @@ tu mD mD mD -wu +ds xh -wu +ds mD gO cn @@ -47343,7 +47331,7 @@ WN cb Bu tb -aV +rr ho gO aa @@ -47591,9 +47579,9 @@ dx Hz dd mD -WQ +Kv xh -WQ +Kv mD WO eF @@ -48111,8 +48099,8 @@ fa mD PU eF -PX -Ke +nz +yR eV eF xU @@ -49122,7 +49110,7 @@ vo fP On Zw -XV +df hd To BT @@ -49945,7 +49933,7 @@ Bp Sz Sz uf -gh +FU uf aa aa @@ -50661,7 +50649,7 @@ iF Pg mH nm -rh +NN On Ui JC @@ -51479,7 +51467,7 @@ BY QC bR HK -UE +zO HK HK pb @@ -51960,9 +51948,9 @@ YU YU mD mD -wu +ds xh -wu +ds mD Ya rY @@ -52474,9 +52462,9 @@ iu iu io io -ub +uk mk -ub +uk io io iu @@ -54306,7 +54294,7 @@ Gb Ef NY NY -Jj +fb Jq NY NY @@ -55782,22 +55770,22 @@ aa aa Jb ir -iB +IF YX ir -iB +IF Jb ir -iB +IF Jb ir -iB +IF Jb ir -iB +IF YX ir -iB +IF Jb iH il @@ -56072,9 +56060,9 @@ Fq UO io io -yU +gY mk -yU +gY io io iu @@ -56586,9 +56574,9 @@ io yj io io -Oj +Im mk -Oj +Im io io iu @@ -57133,7 +57121,7 @@ Tf QC dj Mf -DT +RQ Mf Mf Zi @@ -58352,22 +58340,22 @@ aa aa Jb ir -iB +IF YX ir -iB +IF Jb ir -iB +IF Jb ir -iB +IF Jb ir -iB +IF YX ir -iB +IF Jb pc Hv @@ -58642,9 +58630,9 @@ cg cg cg cg -yU +gY GJ -yU +gY cg cg cg @@ -58683,7 +58671,7 @@ Bp Sz Sz uf -gh +FU uf aa aa @@ -59156,9 +59144,9 @@ cg cg cg cg -wJ +EA GJ -wJ +EA cg cg cg diff --git a/_maps/map_files/generic/CentCom_skyrat_z2.dmm b/_maps/map_files/generic/CentCom_skyrat_z2.dmm index 80300a0c849e4..b9099ef5dd5b8 100644 --- a/_maps/map_files/generic/CentCom_skyrat_z2.dmm +++ b/_maps/map_files/generic/CentCom_skyrat_z2.dmm @@ -16221,7 +16221,7 @@ /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe/park) "tYf" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/centcom/interlink) diff --git a/_maps/map_files/moonstation/moonstation.dmm b/_maps/map_files/moonstation/moonstation.dmm index 9d6c25e435a7d..2f6024f410e73 100644 --- a/_maps/map_files/moonstation/moonstation.dmm +++ b/_maps/map_files/moonstation/moonstation.dmm @@ -1,18 +1,18 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aah" = ( /obj/item/clothing/head/soft/green{ - color = "#00a62e"; + name = "Jim Norton's Quebecois Coffee cap"; desc = "It's a baseball hat in a tastefull green colour."; - name = "Jim Norton's Quebecois Coffee cap" + color = "#00a62e" }, /obj/item/clothing/suit/apron/chef{ name = "Jim Norton's Quebecois Coffee apron" }, /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 + pixel_y = 6; + 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." }, /obj/structure/sink/directional/west{ name = "Jim Norton's Quebecois Coffee sink" @@ -114,8 +114,8 @@ "acc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Cold Loop to Gas" + name = "Cold Loop to Gas"; + dir = 1 }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) @@ -145,9 +145,9 @@ /obj/structure/table/wood/fancy/blue, /obj/effect/spawner/random/aimodule/harmless, /obj/machinery/door/window/left/directional/east{ - base_state = "right"; name = "Core Modules"; - req_access = list("captain") + req_access = list("captain"); + base_state = "right" }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) @@ -221,9 +221,9 @@ "aea" = ( /obj/machinery/light/floor, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall23"; + name = "Pathing Navigation Beacon"; location = "hall22"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall23" }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/aft) @@ -382,8 +382,8 @@ /area/moonstation/surface) "afW" = ( /obj/machinery/button/door/directional/south{ - id = "evashutters2"; name = "E.V.A. Shutters"; + id = "evashutters2"; req_access = list("command") }, /obj/effect/spawner/random/trash/mess, @@ -483,10 +483,8 @@ /area/station/cargo/sorting) "ahy" = ( /obj/effect/decal/cleanable/dirt/dust, -/mob/living/basic/statue/mannequin/suspicious{ - dir = 1; - name = "mannequin"; - desc = "Who left this here?" +/obj/structure/mannequin/wood{ + dir = 1 }, /turf/open/floor/plating, /area/station/construction) @@ -958,9 +956,9 @@ /area/station/command/heads_quarters/rd) "anG" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "pharm_desk_shutters"; name = "Desk Shutters"; - dir = 8 + dir = 8; + id = "pharm_desk_shutters" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -989,9 +987,9 @@ }, /obj/machinery/keycard_auth/wall_mounted/directional/west, /obj/machinery/button/door/directional/west{ - id = "captain_privacy"; name = "Captain's Privacy Shutters"; pixel_y = 9; + id = "captain_privacy"; req_access = list("captain") }, /obj/effect/turf_decal/siding/wood{ @@ -1016,8 +1014,8 @@ "aoF" = ( /obj/effect/turf_decal/tile/blue/opposingcorners, /obj/machinery/button/door/directional/south{ - id = "abandoned_medbay_shutters"; - name = "Abandoned Medbay Shutters Control" + name = "Abandoned Medbay Shutters Control"; + id = "abandoned_medbay_shutters" }, /obj/machinery/chem_master, /obj/effect/mapping_helpers/broken_machine, @@ -1192,8 +1190,8 @@ "are" = ( /obj/machinery/door/window/brigdoor/right/directional/south{ name = "Ye Ol' Faithful Storage"; - req_access = list("command"); - desc = "Yes, that's a functional cannon. Yes, it requires command access to open. No, you can't have it." + desc = "Yes, that's a functional cannon. Yes, it requires command access to open. No, you can't have it."; + req_access = list("command") }, /obj/structure/cannon{ name = "Ye Ol' Faithful"; @@ -1249,9 +1247,9 @@ /area/station/hallway/primary/central/fore) "arL" = ( /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall9"; + name = "Pathing Navigation Beacon"; location = "hall8"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall9" }, /turf/open/floor/iron/checker, /area/station/hallway/secondary/exit) @@ -1323,7 +1321,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance, +/obj/structure/sign/poster/random/directional/east, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "asM" = ( @@ -1361,6 +1359,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/evac_maintenance) "atd" = ( @@ -1451,8 +1450,8 @@ "atY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "ce_officer_shutters"; - name = "Privacy Shutters" + name = "Privacy Shutters"; + id = "ce_officer_shutters" }, /turf/open/floor/plating, /area/station/command/heads_quarters/ce) @@ -1563,9 +1562,9 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; name = "Supermatter Chamber"; - id_tag = "sm_west" + id_tag = "sm_west"; + heat_proof = 1 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, /obj/machinery/meter, @@ -1582,9 +1581,9 @@ /area/moonstation/surface) "avS" = ( /obj/machinery/button/door/directional/north{ - id = "qm_warehouse"; name = "Warehouse Shutters Control"; pixel_x = 24; + id = "qm_warehouse"; req_access = list("shipping") }, /obj/structure/disposalpipe/segment{ @@ -1699,8 +1698,8 @@ /area/moonstation/surface) "axz" = ( /obj/machinery/door/airlock/mining/glass{ - id_tag = "innercargo"; - name = "Cargo Bay" + name = "Cargo Bay"; + id_tag = "innercargo" }, /obj/effect/turf_decal/tile/brown/fourcorners, /obj/effect/mapping_helpers/airlock/access/all/supply/general, @@ -1861,15 +1860,15 @@ "aAu" = ( /obj/structure/table/reinforced/rglass, /obj/machinery/button/door{ - id = "commandblast"; name = "Command Lockdown Control"; pixel_y = -2; + id = "commandblast"; req_access = list("command") }, /obj/machinery/button/door{ - id = "bridgewindows"; name = "Bridge View Shutters Control"; pixel_y = 8; + id = "bridgewindows"; req_access = list("command") }, /turf/open/floor/iron/dark, @@ -1896,8 +1895,8 @@ /area/station/service/lawoffice) "aAW" = ( /obj/structure/fluff/beach_umbrella/security{ - pixel_y = 19; - pixel_x = -7 + pixel_x = -7; + pixel_y = 19 }, /obj/effect/landmark/start/hangover, /turf/open/floor/carpet/red, @@ -1994,9 +1993,9 @@ dir = 1 }, /obj/machinery/status_display/door_timer{ - id = "Cell 1"; name = "Cell 1"; - pixel_y = 32 + pixel_y = 32; + id = "Cell 1" }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -2342,13 +2341,13 @@ req_access = list("chapel_office") }, /obj/item/gun/ballistic/revolver/chaplain{ + name = "holy revolver"; + pixel_y = 4; + spawnwithmagazine = 0; can_misfire = 1; misfire_probability = 99; misfire_probability_cap = 99; - name = "holy revolver"; - pixel_y = 4; - actions_types = null; - spawnwithmagazine = 0 + actions_types = null }, /obj/effect/turf_decal/tile/bar/half/contrasted{ dir = 1 @@ -2385,8 +2384,8 @@ "aGu" = ( /obj/structure/railing, /obj/structure/showcase/machinery/cloning_pod{ - desc = "An old prototype cloning pod, permanently decommissioned following the incident."; - name = "decommissioned cloner" + name = "decommissioned cloner"; + desc = "An old prototype cloning pod, permanently decommissioned following the incident." }, /obj/machinery/light/small/red/directional/north, /turf/open/floor/plating, @@ -2704,9 +2703,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall15"; + name = "Pathing Navigation Beacon"; location = "hall14"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall15" }, /turf/open/floor/catwalk_floor/iron, /area/station/hallway/primary/aft) @@ -2828,6 +2827,7 @@ }, /obj/structure/rack, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/holosign_creator/atmos, /turf/open/floor/iron/dark, /area/station/science/ordnance) "aLZ" = ( @@ -3120,6 +3120,10 @@ /obj/effect/turf_decal/siding/dark_green, /turf/open/floor/wood/tile, /area/station/service/cafeteria) +"aPK" = ( +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) "aPT" = ( /obj/effect/turf_decal/tile/green/half/contrasted{ dir = 8 @@ -3212,7 +3216,7 @@ }, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, -/obj/machinery/portable_atmospherics/canister/water_vapor, +/obj/machinery/portable_atmospherics/pipe_scrubber, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) "aQZ" = ( @@ -3381,8 +3385,8 @@ /area/station/commons/public_xenoarch) "aSZ" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Core shutters"; - name = "AI Core Shutters" + name = "AI Core Shutters"; + id = "AI Core shutters" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -3495,21 +3499,21 @@ /area/moonstation/surface) "aUR" = ( /obj/machinery/door/airlock/research{ - autoclose = 0; + name = "Xenobiology Lab External Airlock"; frequency = 1449; id_tag = "xeno_airlock_exterior"; - name = "Xenobiology Lab External Airlock" + autoclose = 0 }, /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/purple/fourcorners, /obj/effect/landmark/navigate_destination/autoname, /obj/machinery/door_buttons/access_button{ - idDoor = "xeno_airlock_exterior"; - idSelf = "xeno_airlock_control"; name = "Access Button"; + pixel_x = -24; req_access = list("xenobiology"); - pixel_x = -24 + idSelf = "xeno_airlock_control"; + idDoor = "xeno_airlock_exterior" }, /turf/open/floor/iron/white, /area/station/science/xenobiology) @@ -3913,8 +3917,8 @@ /obj/item/storage/lockbox/medal/sec, /obj/item/camera, /obj/machinery/button/door/directional/east{ - id = "hos_office_external_shutters"; name = "External Privacy Shutters Control"; + id = "hos_office_external_shutters"; req_access = list("hos") }, /obj/structure/cable, @@ -3922,8 +3926,8 @@ /area/station/command/heads_quarters/hos) "bbh" = ( /obj/machinery/door/poddoor{ - id = "enginewasteblast"; - name = "Engine Waste Management Vent" + name = "Engine Waste Management Vent"; + id = "enginewasteblast" }, /turf/open/floor/engine/vacuum, /area/station/engineering/supermatter/waste) @@ -4014,8 +4018,8 @@ }, /obj/effect/decal/cleanable/crayon{ icon_state = "e"; - pixel_y = 8; - pixel_x = 8 + pixel_x = 8; + pixel_y = 8 }, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -4046,8 +4050,8 @@ /obj/item/hourglass, /obj/machinery/firealarm/directional/south, /obj/machinery/button/door/directional/east{ - id = "ntrep_privacy_shutters_external_erp"; - name = "External Privacy Shutters Control" + name = "External Privacy Shutters Control"; + id = "ntrep_privacy_shutters_external_erp" }, /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4189,8 +4193,8 @@ pixel_y = 32 }, /obj/structure/sign/directions/evac/directional/south{ - pixel_y = 24; - pixel_x = 32 + pixel_x = 32; + pixel_y = 24 }, /turf/open/floor/iron/dark, /area/station/hallway/primary/starboard) @@ -4316,10 +4320,10 @@ "bhR" = ( /obj/structure/toilet, /obj/machinery/button/door/directional/east{ - id = "AuxToilet2"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "AuxToilet2"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/machinery/light/small/directional/north, /obj/structure/sign/poster/random/directional/north, @@ -4329,9 +4333,9 @@ "bhV" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "pharm_desk_shutters"; name = "Desk Shutters"; - dir = 8 + dir = 8; + id = "pharm_desk_shutters" }, /turf/open/floor/plating, /area/station/medical/pharmacy) @@ -4502,10 +4506,10 @@ /area/station/hallway/secondary/recreation) "bkz" = ( /obj/machinery/button/door/directional/south{ - id = "securebunkeremergency"; name = "Secure Bunker Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "securebunkeremergency"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/effect/turf_decal/stripes/line, /obj/machinery/light/small/dim/directional/west, @@ -4536,8 +4540,8 @@ /obj/structure/hedge, /obj/machinery/status_display/evac/directional/east, /obj/structure/sign/directions/science/directional/south{ - pixel_y = -24; - pixel_x = 32 + pixel_x = 32; + pixel_y = -24 }, /obj/structure/sign/directions/medical/directional/south{ pixel_x = 32 @@ -4608,11 +4612,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/button/flasher{ - id = "holding_flasher"; name = "Holding Cell Flasher"; pixel_x = -24; - req_access = list("security"); - pixel_y = -8 + pixel_y = -8; + id = "holding_flasher"; + req_access = list("security") }, /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, @@ -4739,9 +4743,9 @@ /area/station/security/office) "boa" = ( /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall10"; + name = "Pathing Navigation Beacon"; location = "hall9"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall10" }, /turf/open/floor/iron/checker, /area/station/hallway/primary/starboard) @@ -4852,9 +4856,9 @@ "bpC" = ( /obj/structure/table, /obj/item/paper{ - default_raw_text = "As part of a social experiment (and as part as my hatred for Burgerstation), I decided to use the nearby Asteroid to prove that a bunch of bored assistants could build a better station than this nonsense. Go wild."; name = "BYOS (Build your own station!)"; - pixel_y = 2 + pixel_y = 2; + default_raw_text = "As part of a social experiment (and as part as my hatred for Burgerstation), I decided to use the nearby Asteroid to prove that a bunch of bored assistants could build a better station than this nonsense. Go wild." }, /turf/open/floor/iron/dark, /area/station/engineering/asteroid_lobby) @@ -5253,8 +5257,8 @@ dir = 4 }, /obj/machinery/conveyor_switch/oneway{ - id = "robotics_conveyor"; - pixel_y = 8 + pixel_y = 8; + id = "robotics_conveyor" }, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) @@ -5267,8 +5271,8 @@ }, /obj/effect/turf_decal/board_number/three{ dir = 8; - color = "#EFB341"; - alpha = 150 + alpha = 150; + color = "#EFB341" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -5335,8 +5339,8 @@ /area/station/engineering/supermatter/room) "bys" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 101.325; - pressure_checks = 1 + pressure_checks = 1; + external_pressure_bound = 101.325 }, /turf/open/floor/catwalk_floor{ initial_gas_mix = "n2=100;TEMP=80" @@ -5504,13 +5508,13 @@ /obj/effect/spawner/random/bureaucracy/birthday_wrap, /obj/item/folder/yellow, /obj/machinery/door/poddoor/shutters/preopen{ - id = "cargo_shutters"; name = "Cargo Shutters"; - dir = 4 + dir = 4; + id = "cargo_shutters" }, /obj/machinery/door/window/brigdoor/left/directional/west{ - req_access = list("cargo"); - name = "Cargo Desk" + name = "Cargo Desk"; + req_access = list("cargo") }, /obj/machinery/door/firedoor, /turf/open/floor/iron, @@ -5669,8 +5673,8 @@ "bDo" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/poddoor{ - id = "cargounload"; - name = "Supply Dock Unloading Door" + name = "Supply Dock Unloading Door"; + id = "cargounload" }, /obj/machinery/conveyor{ dir = 8; @@ -5723,8 +5727,8 @@ "bEh" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "rbmk2_shutters_south"; - name = "RB-MK2 Chamber Shutters" + name = "RB-MK2 Chamber Shutters"; + id = "rbmk2_shutters_south" }, /obj/machinery/atmospherics/pipe/layer_manifold/general/visible, /turf/open/floor/plating, @@ -5877,9 +5881,9 @@ "bGH" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; + name = "Kitchen"; location = "Kitchen"; - name = "Kitchen" + codes_txt = "delivery;dir=8" }, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) @@ -6415,8 +6419,8 @@ /area/station/medical/virology) "bPD" = ( /obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" + name = "Brig"; + id_tag = "outerbrig" }, /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /obj/machinery/door/firedoor, @@ -6436,8 +6440,8 @@ /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, /obj/structure/cable, /obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Core shutters"; - name = "AI Core Shutters" + name = "AI Core Shutters"; + id = "AI Core shutters" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /obj/effect/mapping_helpers/airlock/locked, @@ -6755,9 +6759,9 @@ /area/station/security/corrections_officer) "bUl" = ( /obj/machinery/microwave{ + name = "Jim Norton's Quebecois Coffee microwave oven"; pixel_x = 1; - pixel_y = 6; - name = "Jim Norton's Quebecois Coffee microwave oven" + pixel_y = 6 }, /obj/effect/turf_decal/trimline/green/filled/line, /obj/structure/table/wood{ @@ -6826,8 +6830,8 @@ /area/station/hallway/primary/aft) "bVu" = ( /obj/machinery/button/door/directional/north{ - id = "Secure Storage"; name = "Engineering Secure Storage"; + id = "Secure Storage"; req_access = list("engine_equip") }, /obj/effect/turf_decal/stripes/corner{ @@ -7059,14 +7063,14 @@ /turf/open/floor/iron, /area/station/cargo/sorting) "bYP" = ( +/mob/living/basic/pet/cat/runtime{ + name = "Compile" + }, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 }, /obj/machinery/light_switch/directional/west, /obj/structure/bed/dogbed/runtime, -/mob/living/basic/pet/cat/runtime{ - name = "Compile" - }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) "bYQ" = ( @@ -7119,8 +7123,8 @@ /area/station/engineering/rbmk2) "bZO" = ( /obj/machinery/button/curtain{ - id = "nightclub_curtains"; - pixel_y = -24 + pixel_y = -24; + id = "nightclub_curtains" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -7348,8 +7352,8 @@ /area/station/command/heads_quarters/qm) "cdq" = ( /obj/machinery/door/poddoor/preopen{ - id = "bridgewindows"; - name = "Bridge View Blast Door" + name = "Bridge View Blast Door"; + id = "bridgewindows" }, /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -7398,18 +7402,18 @@ /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/red/fourcorners, /obj/machinery/door/poddoor/shutters{ - id = "sec_check_shutters"; name = "Security Checkpoint Shutters"; - dir = 8 + dir = 8; + id = "sec_check_shutters" }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/security/checkpoint) "ced" = ( /obj/machinery/status_display/door_timer{ - id = "Cell ???"; name = "Cell ???"; pixel_x = -32; + id = "Cell ???"; req_access = null }, /obj/effect/spawner/random/maintenance, @@ -7615,8 +7619,8 @@ dir = 8 }, /obj/structure/closet/secure_closet/brig{ - id = "Cell 2"; - name = "Cell 2 locker" + name = "Cell 2 locker"; + id = "Cell 2" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -7761,10 +7765,10 @@ /area/station/medical/medbay/central) "ciP" = ( /obj/machinery/button/door/directional/south{ - id = "vaccant_room_backdoor"; name = "Back Door Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "vaccant_room_backdoor"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /turf/open/floor/plating, /area/station/commons/vacant_room) @@ -7873,8 +7877,8 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /obj/structure/cable, /obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "rbmk2_shutters_north"; - name = "RB-MK2 Chamber Shutters" + name = "RB-MK2 Chamber Shutters"; + id = "rbmk2_shutters_north" }, /turf/open/floor/plating, /area/station/engineering/rbmk2/chamber) @@ -7964,10 +7968,10 @@ /obj/effect/turf_decal/stripes/red/line, /obj/effect/turf_decal/caution/stand_clear/red, /obj/item/radio/intercom/directional/north{ - broadcasting = 1; - frequency = 1447; name = "Private Channel"; - pixel_x = -26 + pixel_x = -26; + frequency = 1447; + broadcasting = 1 }, /obj/item/kirbyplants/random/fullysynthetic, /turf/open/floor/iron/dark/small, @@ -8041,8 +8045,8 @@ /area/station/security/corrections_officer) "clF" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ - external_pressure_bound = 121.325; - dir = 1 + dir = 1; + external_pressure_bound = 121.325 }, /turf/open/floor/catwalk_floor{ initial_gas_mix = "n2=100;TEMP=80" @@ -8090,9 +8094,9 @@ /area/station/cargo/miningfoundry/event_protected) "cmW" = ( /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall28"; + name = "Pathing Navigation Beacon"; location = "hall27"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall28" }, /turf/open/floor/iron/checker, /area/station/hallway/secondary/recreation) @@ -8116,24 +8120,24 @@ /area/station/engineering/atmos/control_center) "cnt" = ( /obj/machinery/door/poddoor/preopen{ - id = "ntrep_privacy_shutters_external"; - name = "External Privacy Shutters" + name = "External Privacy Shutters"; + id = "ntrep_privacy_shutters_external" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/heads_quarters/nt_rep) "cnK" = ( /obj/machinery/atmospherics/components/binary/pump/off/general/visible/layer5{ - dir = 1; - name = "Engine Waste to Pure" + name = "Engine Waste to Pure"; + dir = 1 }, /obj/machinery/atmospherics/components/binary/pump/off/general/visible/layer2{ - dir = 1; - name = "Engine Waste to Waste" + name = "Engine Waste to Waste"; + dir = 1 }, /obj/machinery/atmospherics/components/binary/pump/off/general/visible/layer1{ - dir = 1; - name = "Engine Waste to Supermatter" + name = "Engine Waste to Supermatter"; + dir = 1 }, /turf/open/floor/plating, /area/station/engineering/supermatter/waste) @@ -8220,6 +8224,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/security/interrogation) +"coN" = ( +/obj/item/assembly/mousetrap/armed, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) "coP" = ( /obj/machinery/shower/directional/south, /obj/effect/turf_decal/trimline/blue/end, @@ -8360,8 +8368,8 @@ /area/station/terminal/lobby) "crV" = ( /obj/machinery/door/window/right/directional/east{ - req_access = list("genetics"); - name = "Ethical Monkey Pen" + name = "Ethical Monkey Pen"; + req_access = list("genetics") }, /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, @@ -8493,10 +8501,10 @@ "cuf" = ( /obj/machinery/light/small/directional/west, /obj/machinery/button/door/directional/west{ - id = "Toilet1"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "Toilet1"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/machinery/recharge_station, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -8570,8 +8578,8 @@ /area/station/commons/toilet) "cvW" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/east{ - id = "Cell ???"; name = "Cell ???"; + id = "Cell ???"; req_access = null }, /obj/effect/spawner/random/structure/chair_maintenance{ @@ -8803,9 +8811,9 @@ "czP" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Kitchen Counter Shutters"; dir = 8; - id = "cafe_counter"; - name = "Kitchen Counter Shutters" + id = "cafe_counter" }, /obj/effect/turf_decal/tile/dark_red/opposingcorners{ dir = 8 @@ -9107,11 +9115,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/button/door/directional/north{ + name = "Door Bolt Control"; id = "ai_sat_maint_right"; - normaldoorcontrol = 1; + req_access = list("minisat"); specialfunctions = 4; - name = "Door Bolt Control"; - req_access = list("minisat") + normaldoorcontrol = 1 }, /obj/machinery/camera/autoname/minisat/directional/east, /turf/open/floor/catwalk_floor/iron_dark, @@ -9123,10 +9131,10 @@ /area/station/terminal/interlink) "cFe" = ( /obj/machinery/button/door/directional/east{ - id = "AuxToilet1"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "AuxToilet1"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/machinery/light/small/directional/north, /turf/open/floor/iron/showroomfloor, @@ -9271,8 +9279,8 @@ "cId" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "brigprison"; - name = "Prison Lockdown Blast Door" + name = "Prison Lockdown Blast Door"; + id = "brigprison" }, /obj/structure/cable, /turf/open/floor/plating, @@ -9576,8 +9584,8 @@ "cMm" = ( /obj/item/book/granter/crafting_recipe/donk_secret_recipe, /obj/structure/closet/crate/secure/loot{ - base_icon_state = "syndicrate"; - icon_state = "syndicrate" + icon_state = "syndicrate"; + base_icon_state = "syndicrate" }, /turf/open/floor/carpet/donk, /area/station/maintenance/thruster_room) @@ -9590,9 +9598,9 @@ /area/station/construction) "cMs" = ( /obj/machinery/door/poddoor/shutters{ + name = "Mech Bay Shutters"; dir = 1; - id = "mechbay2"; - name = "Mech Bay Shutters" + id = "mechbay2" }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/purple/half/contrasted, @@ -9709,7 +9717,7 @@ /obj/structure/table/wood/fancy/royalblack, /obj/structure/window/reinforced/spawner/directional/south, /obj/item/reagent_containers/cup/glass/bottle/holywater/hell{ - list_reagents = list(/datum/reagent/lube/superlube = 50) + list_reagents = list(/datum/reagent/lube/superlube=50) }, /turf/open/floor/plating, /area/station/maintenance/cult_chapel) @@ -9822,8 +9830,8 @@ /area/station/tcommsat/computer) "cQs" = ( /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 1 + dir = 1; + id = "cargodisposals" }, /obj/structure/drain, /obj/structure/disposalpipe/segment{ @@ -9932,9 +9940,9 @@ dir = 1 }, /obj/item/paper{ - default_raw_text = "An air cooled setup on a desert moon sounds fucking awful, but hey it works (as long as you only use one emitter)."; name = "Oh god where is the cooling?"; - pixel_y = 2 + pixel_y = 2; + default_raw_text = "An air cooled setup on a desert moon sounds fucking awful, but hey it works (as long as you only use one emitter)." }, /obj/structure/cable, /turf/open/floor/plating, @@ -9947,8 +9955,8 @@ /area/station/security/prison/upper) "cRz" = ( /obj/machinery/door/poddoor{ - id = "justiceblast"; - name = "Justice Blast Door" + name = "Justice Blast Door"; + id = "justiceblast" }, /turf/open/floor/plating, /area/station/security/execution/education) @@ -10434,9 +10442,9 @@ /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=hall19"; + name = "Pathing Navigation Beacon"; location = "hall18"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall19" }, /obj/structure/disposalpipe/junction{ dir = 1 @@ -10692,8 +10700,8 @@ dir = 4 }, /obj/item/toy/plush/beeplushie{ - desc = "Maybe hugging this will make you feel better about yourself."; - name = "Therabee" + name = "Therabee"; + desc = "Maybe hugging this will make you feel better about yourself." }, /turf/open/floor/carpet, /area/station/medical/psychology) @@ -10991,9 +10999,9 @@ "dfE" = ( /mob/living/basic/bot/dedbot, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=donkse"; + name = "Donk Navigation Beacon"; location = "donkne"; - name = "Donk Navigation Beacon" + codes_txt = "patrol;next_patrol=donkse" }, /turf/open/floor/carpet/donk, /area/station/maintenance/thruster_room) @@ -11062,9 +11070,9 @@ /obj/item/storage/fancy/donut_box, /obj/structure/sign/flag/nanotrasen/directional/north, /obj/item/paper{ - default_raw_text = "One of the smartest things I've ever done is expand this overlook a little. Now I can watch the armory and byond for possible syndicate activity. They won't be able to get through us now!"; name = "Excerpt from a Security Officer"; - pixel_y = 2 + pixel_y = 2; + default_raw_text = "One of the smartest things I've ever done is expand this overlook a little. Now I can watch the armory and byond for possible syndicate activity. They won't be able to get through us now!" }, /turf/open/floor/plating, /area/station/maintenance/department/prison) @@ -11141,8 +11149,8 @@ /area/station/medical/treatment_center) "dgX" = ( /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 1 + dir = 1; + id = "cargodisposals" }, /obj/structure/drain, /obj/machinery/light/moonstation/directional/west, @@ -11172,9 +11180,9 @@ /obj/machinery/light/floor, /obj/structure/cable, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall22"; + name = "Pathing Navigation Beacon"; location = "hall21"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall22" }, /obj/structure/disposalpipe/segment{ dir = 10 @@ -11234,8 +11242,8 @@ /area/station/service/library/abandoned) "dig" = ( /obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "engsm"; - name = "Radiation Chamber Shutters" + name = "Radiation Chamber Shutters"; + id = "engsm" }, /turf/open/floor/plating, /area/station/engineering/supermatter) @@ -11277,8 +11285,8 @@ "diz" = ( /obj/structure/wall_torch/spawns_lit/directional/west, /obj/item/skub{ - color = "#882222"; - name = "waiting skub" + name = "waiting skub"; + color = "#882222" }, /turf/open/misc/moonstation_rock, /area/moonstation/underground) @@ -11290,9 +11298,9 @@ /area/station/cargo/storage) "diL" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "hos_office_shutters"; name = "Head of Security's Office Privacy Shutters"; - dir = 8 + dir = 8; + id = "hos_office_shutters" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -11638,8 +11646,8 @@ }, /obj/machinery/conveyor_switch/oneway{ dir = 8; - id = "QMLoad"; - pixel_y = 8 + pixel_y = 8; + id = "QMLoad" }, /turf/open/floor/iron, /area/station/cargo/storage) @@ -11965,8 +11973,8 @@ /area/station/service/hydroponics) "dsx" = ( /obj/machinery/door/poddoor/preopen{ - id = "commandblast"; - name = "Command Lockdown Blast Door" + name = "Command Lockdown Blast Door"; + id = "commandblast" }, /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -11988,9 +11996,9 @@ /obj/item/gps/mining, /obj/item/perfume/iron, /obj/machinery/button/door/directional/east{ - id = "mining_shutters"; name = "Mining Shutters Control"; pixel_y = -8; + id = "mining_shutters"; req_access = list("mining") }, /turf/open/floor/iron, @@ -12351,12 +12359,12 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) "dxV" = ( +/mob/living/simple_animal/bot/secbot/pingsky, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /obj/effect/turf_decal/caution/stand_clear/red, -/mob/living/simple_animal/bot/secbot/pingsky, /turf/open/floor/catwalk_floor/iron_dark, /area/station/ai_monitored/turret_protected/aisat_interior) "dyf" = ( @@ -12934,9 +12942,9 @@ /area/station/security/lockers) "dFt" = ( /obj/machinery/door/poddoor/shutters{ + name = "E.V.A. Storage Shutters"; dir = 1; - id = "evashutters2"; - name = "E.V.A. Storage Shutters" + id = "evashutters2" }, /obj/machinery/door/firedoor, /turf/open/floor/plating, @@ -13044,8 +13052,8 @@ "dHj" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, /obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 4; - name = "Plasma to Pure" + name = "Plasma to Pure"; + dir = 4 }, /obj/effect/turf_decal/tile/purple/fourcorners, /turf/open/floor/iron, @@ -13156,8 +13164,8 @@ dir = 8 }, /obj/structure/closet/secure_closet/brig{ - id = "Cell 3"; - name = "Cell 3 locker" + name = "Cell 3 locker"; + id = "Cell 3" }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -13353,9 +13361,9 @@ dir = 1 }, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall21"; + name = "Pathing Navigation Beacon"; location = "hall20"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall21" }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/aft) @@ -13371,10 +13379,10 @@ /area/station/construction) "dMn" = ( /obj/machinery/button/door/directional/south{ - id = "dorms4"; name = "Dorms Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "dorms4"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/item/kirbyplants/random, /turf/open/floor/carpet/donk, @@ -13463,8 +13471,8 @@ dir = 4 }, /obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 1; - name = "Air to Pure" + name = "Air to Pure"; + dir = 1 }, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, @@ -13536,7 +13544,7 @@ /obj/effect/turf_decal/siding/dark{ dir = 4 }, -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/iron/dark{ initial_gas_mix = "n2=100;TEMP=293.15" }, @@ -13755,8 +13763,8 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ - id = "commandblast"; - name = "Command Lockdown Blast Door" + name = "Command Lockdown Blast Door"; + id = "commandblast" }, /obj/structure/cable, /obj/effect/landmark/navigate_destination/autoname, @@ -14235,8 +14243,8 @@ "dZT" = ( /obj/effect/decal/cleanable/crayon{ icon_state = "n"; - color = "FF0000"; - pixel_x = -16 + pixel_x = -16; + color = "FF0000" }, /turf/open/misc/moonstation_rock, /area/moonstation/underground) @@ -14302,9 +14310,9 @@ "eba" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "engineering_desk_shutters"; name = "Engineering Desk Shutters"; - dir = 1 + dir = 1; + id = "engineering_desk_shutters" }, /turf/open/floor/plating, /area/station/engineering/storage_shared) @@ -14676,9 +14684,9 @@ /area/station/common/wrestling/arena) "egv" = ( /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall26"; + name = "Pathing Navigation Beacon"; location = "hall25"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall26" }, /turf/open/floor/iron/checker, /area/station/hallway/primary/central/fore) @@ -14741,9 +14749,9 @@ "eht" = ( /obj/structure/table/wood, /obj/item/radio{ + name = "old radio"; desc = "An old handheld radio. You could use it, if you really wanted to."; icon_state = "radio"; - name = "old radio"; pixel_y = 12 }, /obj/item/clothing/head/syndicatefake, @@ -14884,8 +14892,8 @@ pixel_y = 12 }, /obj/item/reagent_containers/cup/beaker/large{ - pixel_y = 3; - pixel_x = -5 + pixel_x = -5; + pixel_y = 3 }, /obj/item/reagent_containers/cup/beaker{ pixel_x = 5; @@ -15025,7 +15033,7 @@ /obj/item/reagent_containers/cup/glass/bottle/holywater{ name = "flask of regular water"; desc = "This used to be holy water, but an engineer sealed it."; - list_reagents = list(/datum/reagent/water = 100) + list_reagents = list(/datum/reagent/water=100) }, /turf/open/floor/iron/dark, /area/station/hallway/primary/starboard) @@ -15125,9 +15133,9 @@ dir = 1 }, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall18"; + name = "Pathing Navigation Beacon"; location = "hall17"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall18" }, /turf/open/floor/catwalk_floor/iron, /area/station/hallway/primary/aft) @@ -15160,12 +15168,12 @@ dir = 8 }, /obj/machinery/door/window/brigdoor/right/directional/east{ - req_access = list("armory"); - name = "Warden's Desk" + name = "Warden's Desk"; + req_access = list("armory") }, /obj/machinery/door/window/left/directional/west{ - base_state = "right"; - name = "Warden's Desk" + name = "Warden's Desk"; + base_state = "right" }, /obj/item/papercutter{ pixel_x = 3; @@ -15359,8 +15367,8 @@ "enS" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "rbmk2_shutters_south"; - name = "RB-MK2 Chamber Shutters" + name = "RB-MK2 Chamber Shutters"; + id = "rbmk2_shutters_south" }, /turf/open/floor/plating, /area/station/engineering/rbmk2/chamber) @@ -15478,10 +15486,10 @@ "epC" = ( /obj/item/radio/intercom/directional/west, /obj/machinery/button/door/directional/south{ - id = "securebunkerlock"; name = "Secure Bunker Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "securebunkerlock"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/structure/toilet{ dir = 4 @@ -15711,8 +15719,8 @@ /area/station/science/ordnance) "esm" = ( /obj/machinery/door/poddoor/preopen{ - id = "xenobio5"; - name = "Xenobio Pen 5 Blast Door" + name = "Xenobio Pen 5 Blast Door"; + id = "xenobio5" }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -15745,14 +15753,14 @@ "etb" = ( /obj/structure/table/wood, /obj/machinery/button/door/directional/west{ - id = "lawyer_shutters_a"; name = "Privacy Shutters Control"; + id = "lawyer_shutters_a"; req_access = list("lawyer") }, /obj/item/radio/intercom/directional/north, /obj/machinery/fax{ - fax_name = "Law Office A"; - name = "Law Office A Fax Machine" + name = "Law Office A Fax Machine"; + fax_name = "Law Office A" }, /turf/open/floor/wood, /area/station/service/lawoffice) @@ -15771,6 +15779,7 @@ /obj/effect/turf_decal/tile/brown{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/aft) "ett" = ( @@ -15942,8 +15951,8 @@ /area/station/security/checkpoint/customs) "evW" = ( /obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "RB-MK2 Reactor Chamber" + name = "RB-MK2 Reactor Chamber"; + heat_proof = 1 }, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 4 @@ -16170,8 +16179,8 @@ /area/station/maintenance/department/engine) "exO" = ( /obj/machinery/atmospherics/components/binary/pump/on/general/visible{ - dir = 8; - name = "Primary Cooling to Main" + name = "Primary Cooling to Main"; + dir = 8 }, /turf/open/floor/iron/dark, /area/station/engineering/rbmk2) @@ -16381,8 +16390,8 @@ /area/station/security/execution/education) "eBm" = ( /obj/machinery/door/poddoor/preopen{ - id = "xenobio2"; - name = "Xenobio Pen 2 Blast Door" + name = "Xenobio Pen 2 Blast Door"; + id = "xenobio2" }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -16556,6 +16565,16 @@ /obj/machinery/portable_atmospherics/canister/plasma, /turf/open/floor/engine, /area/station/engineering/main) +"eDz" = ( +/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/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "eDN" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -16828,9 +16847,9 @@ /obj/effect/turf_decal/tile/red/fourcorners, /obj/item/storage/fancy/donut_box, /obj/machinery/door/poddoor/shutters{ - id = "sec_check_shutters"; name = "Security Checkpoint Shutters"; - dir = 8 + dir = 8; + id = "sec_check_shutters" }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, @@ -16875,8 +16894,8 @@ dir = 4 }, /obj/machinery/door/window/brigdoor/left/directional/east{ - req_access = list("xenobiology"); - name = "Xenobiology Testing Chambers" + name = "Xenobiology Testing Chambers"; + req_access = list("xenobiology") }, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -17160,9 +17179,9 @@ /area/station/medical/pharmacy) "eMH" = ( /obj/machinery/door/poddoor/shutters{ + name = "Custodial Closet Shutters"; dir = 1; - id = "custodialshutters"; - name = "Custodial Closet Shutters" + id = "custodialshutters" }, /obj/effect/turf_decal/tile/purple/half/contrasted, /obj/effect/turf_decal/tile/green/half/contrasted{ @@ -17211,9 +17230,9 @@ dir = 4 }, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall17"; + name = "Pathing Navigation Beacon"; location = "hall16"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall17" }, /turf/open/floor/iron, /area/station/engineering/atmos/hallway) @@ -17542,8 +17561,8 @@ "eSx" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "hos_office_external_shutters"; - name = "Head of Security's Office External Privacy Shutters" + name = "Head of Security's Office External Privacy Shutters"; + id = "hos_office_external_shutters" }, /obj/structure/cable, /turf/open/floor/plating, @@ -17611,11 +17630,11 @@ /obj/machinery/airalarm/directional/north, /obj/effect/mapping_helpers/airalarm/engine_access, /obj/machinery/button/door/directional/west{ - id = "sm_east"; name = "Supermatter Chamber Bolt Control"; - normaldoorcontrol = 1; + id = "sm_east"; + req_access = list("engineering"); specialfunctions = 4; - req_access = list("engineering") + normaldoorcontrol = 1 }, /obj/effect/turf_decal/stripes/end{ dir = 1 @@ -17641,8 +17660,8 @@ "eTH" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Xenobiology Test Chamber Pump" + name = "Xenobiology Test Chamber Pump"; + dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_dark, @@ -17769,8 +17788,8 @@ /area/station/service/hydroponics) "eVl" = ( /obj/machinery/button/door/directional/east{ - id = "engsm"; name = "Radiation Shutters Control"; + id = "engsm"; req_access = list("engineering") }, /obj/effect/turf_decal/bot{ @@ -17816,8 +17835,8 @@ }, /obj/structure/hedge, /obj/structure/sign/directions/science/directional/south{ - pixel_y = -24; - pixel_x = 32 + pixel_x = 32; + pixel_y = -24 }, /obj/structure/sign/directions/medical/directional/south{ pixel_x = 32 @@ -17866,12 +17885,12 @@ "eWk" = ( /obj/effect/turf_decal/tile/purple/fourcorners, /obj/machinery/door_buttons/access_button{ - idDoor = "xeno_airlock_interior"; - idSelf = "xeno_airlock_control"; name = "Access Button"; - req_access = list("xenobiology"); pixel_x = -24; - pixel_y = -24 + pixel_y = -24; + req_access = list("xenobiology"); + idSelf = "xeno_airlock_control"; + idDoor = "xeno_airlock_interior" }, /obj/machinery/duct, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17903,12 +17922,12 @@ /area/station/engineering/atmos/hfr_room) "eWC" = ( /obj/docking_port/stationary{ + name = "Moon Station Cargo Bay"; dir = 8; - dwidth = 9; + width = 16; height = 16; - name = "Moon Station Cargo Bay"; shuttle_id = "cargo_home"; - width = 16 + dwidth = 9 }, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 @@ -18068,8 +18087,8 @@ "eZW" = ( /obj/structure/railing, /obj/structure/showcase/machinery/cloning_pod{ - desc = "An old prototype cloning pod, permanently decommissioned following the incident."; - name = "decommissioned cloner" + name = "decommissioned cloner"; + desc = "An old prototype cloning pod, permanently decommissioned following the incident." }, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, @@ -18106,9 +18125,9 @@ "fae" = ( /obj/structure/plasticflaps, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=2"; + name = "Atmospherics"; location = "Atmospherics"; - name = "Atmospherics" + codes_txt = "delivery;dir=2" }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/control_center) @@ -18161,8 +18180,8 @@ "faB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "commandblast"; - name = "Command Lockdown Blast Door" + name = "Command Lockdown Blast Door"; + id = "commandblast" }, /obj/structure/cable, /turf/open/floor/plating, @@ -18254,6 +18273,14 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/engineering/hallway) +"fbZ" = ( +/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/structure/sign/poster/random/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) "fcb" = ( /obj/machinery/shower/directional/west, /obj/effect/turf_decal/trimline/blue/end{ @@ -18359,6 +18386,12 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/terminal/maintenance/aft) +"fdf" = ( +/obj/item/assembly/mousetrap/armed{ + dir = 8 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "fdi" = ( /obj/structure/extinguisher_cabinet/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -18416,9 +18449,9 @@ /area/lavaland/underground) "feg" = ( /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall5"; + name = "Pathing Navigation Beacon"; location = "hall4"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall5" }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/aft) @@ -18458,8 +18491,8 @@ }, /obj/effect/turf_decal/tile/red/fourcorners, /obj/machinery/door/window/brigdoor/right/directional/east{ - req_access = list("brig"); - name = "Security Checkpoint Desk" + name = "Security Checkpoint Desk"; + req_access = list("brig") }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, @@ -18794,8 +18827,8 @@ /area/station/command/meeting_room) "fkl" = ( /obj/machinery/door/poddoor/preopen{ - id = "meetingblast"; - name = "Meeting Room Blast Door" + name = "Meeting Room Blast Door"; + id = "meetingblast" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -18882,9 +18915,9 @@ /area/station/service/janitor) "flh" = ( /obj/machinery/door/poddoor/shutters{ - id = "mining_shutters"; name = "Mining Shutters"; - dir = 4 + dir = 4; + id = "mining_shutters" }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock) @@ -19031,6 +19064,7 @@ /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) "fnD" = ( +/mob/living/basic/pet/dog/markus, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, @@ -19038,7 +19072,6 @@ name = "Markus's Bed"; desc = "Markus's bed! Looks comfy." }, -/mob/living/basic/pet/dog/markus, /obj/item/food/burger/cheese, /turf/open/floor/iron, /area/station/cargo/office) @@ -19196,8 +19229,8 @@ /area/station/maintenance/abandon_psych) "fpQ" = ( /obj/machinery/button/door/directional/south{ - id = "armory"; name = "Armory Shutters Control"; + id = "armory"; req_access = list("armory") }, /obj/effect/turf_decal/bot, @@ -19226,9 +19259,9 @@ /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/door{ - id = "xenobio3"; name = "Xenobio Pen 3 Blast Doors"; pixel_y = 1; + id = "xenobio3"; req_access = list("xenobiology") }, /obj/effect/turf_decal/siding/dark, @@ -19270,9 +19303,9 @@ "fqI" = ( /mob/living/basic/bot/dedbot, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=donkne"; + name = "Donk Navigation Beacon"; location = "donknw"; - name = "Donk Navigation Beacon" + codes_txt = "patrol;next_patrol=donkne" }, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/carpet/donk, @@ -19342,15 +19375,15 @@ /area/station/science/research/abandoned) "frp" = ( /obj/machinery/door/poddoor/preopen{ - id = "Xenolab"; - name = "Test Chamber Blast Door" + name = "Test Chamber Blast Door"; + id = "Xenolab" }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/door/window/brigdoor/right/directional/east{ - req_access = list("xenobiology"); - name = "Xenobiology Testing Chambers" + name = "Xenobiology Testing Chambers"; + req_access = list("xenobiology") }, /obj/machinery/door/window/brigdoor/left/directional/west{ name = "Xenobiology Testing Chambers"; @@ -19446,9 +19479,9 @@ /area/station/security/prison/upper) "fsE" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "cmo_officer_shutters"; name = "Privacy Shutters"; - dir = 8 + dir = 8; + id = "cmo_officer_shutters" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -19608,9 +19641,9 @@ /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/door{ - id = "xenobio5"; name = "Xenobio Pen 5 Blast Doors"; pixel_y = 4; + id = "xenobio5"; req_access = list("xenobiology") }, /obj/effect/turf_decal/siding/dark{ @@ -19677,8 +19710,8 @@ "fvF" = ( /obj/effect/spawner/random/burgerstation/liquid, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plating, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "fvJ" = ( /obj/machinery/firealarm/directional/north, @@ -19812,8 +19845,8 @@ /area/ruin/unpowered/ash_walkers) "fxo" = ( /obj/docking_port/stationary/random{ - dir = 4; name = "lavaland"; + dir = 4; shuttle_id = "pod_4_lavaland"; target_area = /area/moonstation/surface/unexplored }, @@ -20074,8 +20107,8 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ - id = "commandblast"; - name = "Command Lockdown Blast Door" + name = "Command Lockdown Blast Door"; + id = "commandblast" }, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 @@ -20141,8 +20174,8 @@ "fAK" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, /obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 8; - name = "N2O to Pure" + name = "N2O to Pure"; + dir = 8 }, /obj/effect/turf_decal/tile/bar/fourcorners, /turf/open/floor/iron, @@ -20247,8 +20280,8 @@ "fCd" = ( /obj/effect/spawner/random/entertainment/money_small, /obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "nightclub_curtains"; - name = "Show Curtains" + name = "Show Curtains"; + id = "nightclub_curtains" }, /turf/open/floor/glass/reinforced/plasma, /area/station/common/night_club) @@ -20357,8 +20390,8 @@ /area/station/maintenance/space_hut) "fEk" = ( /obj/machinery/atmospherics/components/binary/valve/digital/on{ - dir = 4; - name = "Cooling Loop Bypass" + name = "Cooling Loop Bypass"; + dir = 4 }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) @@ -20423,9 +20456,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=hall29"; + name = "Pathing Navigation Beacon"; location = "hall28"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall29" }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/aft) @@ -20480,8 +20513,8 @@ /area/station/medical/chemistry) "fGr" = ( /obj/machinery/button/door/directional/east{ - id = "rbmk2_shutters_west"; name = "RB-MK2 Radiation Shutters Control"; + id = "rbmk2_shutters_west"; req_access = list("engineering") }, /obj/item/radio/intercom/directional/south, @@ -20674,8 +20707,8 @@ }, /obj/effect/turf_decal/trimline/yellow/warning, /obj/machinery/door/poddoor/shutters/preopen{ - id = "bridge_public_lockdown"; - name = "Bridge Public Lockdown Shutters" + name = "Bridge Public Lockdown Shutters"; + id = "bridge_public_lockdown" }, /obj/effect/landmark/navigate_destination/autoname, /turf/open/floor/iron/large, @@ -20799,8 +20832,8 @@ "fKT" = ( /obj/structure/wall_torch/spawns_lit/directional/east, /obj/item/skub{ - color = "#882222"; - name = "waiting skub" + name = "waiting skub"; + color = "#882222" }, /turf/open/misc/moonstation_rock, /area/moonstation/underground) @@ -20811,16 +20844,16 @@ /area/station/cargo/miningdock) "fLe" = ( /obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; name = "AI Upload Turret Control"; - pixel_x = 28 + pixel_x = 28; + control_area = "/area/station/ai_monitored/turret_protected/ai_upload" }, /obj/structure/sign/departments/aiupload/directional/north, /obj/item/radio/intercom/directional/north{ - broadcasting = 1; - frequency = 1447; name = "Private Channel"; - pixel_x = 26 + pixel_x = 26; + frequency = 1447; + broadcasting = 1 }, /turf/open/floor/catwalk_floor/iron_dark, /area/station/ai_monitored/turret_protected/aisat/service) @@ -20880,9 +20913,9 @@ /obj/machinery/door/airlock/hatch{ name = "Public Mining Elevator"; req_access = list("tcomms"); + autoclose = 0; elevator_mode = 1; - transport_linked_id = "tram_public_mining_lift"; - autoclose = 0 + transport_linked_id = "tram_public_mining_lift" }, /turf/open/floor/plating, /area/station/commons/public_mining) @@ -20988,8 +21021,8 @@ /obj/structure/table/reinforced, /obj/machinery/fax/auto_name, /obj/machinery/button/door/directional/west{ - id = "ce_officer_shutters"; name = "Privacy Shutters Control"; + id = "ce_officer_shutters"; req_access = list("ce") }, /obj/machinery/requests_console/auto_name/directional/north, @@ -21058,8 +21091,8 @@ /area/station/security/office) "fNJ" = ( /obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "RB-MK2 Reactor Chamber" + name = "RB-MK2 Reactor Chamber"; + heat_proof = 1 }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -21126,6 +21159,16 @@ /obj/structure/sign/warning/docking/directional/north, /turf/open/floor/iron/dark, /area/station/command/cc_dock) +"fOu" = ( +/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/sign/poster/random/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "fOv" = ( /obj/structure/toilet/greyscale, /obj/structure/sign/warning/no_smoking/circle/directional/north, @@ -21352,8 +21395,8 @@ /area/station/maintenance/department/engine) "fRk" = ( /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 1 + dir = 1; + id = "cargodisposals" }, /turf/open/floor/plating, /area/station/cargo/sorting) @@ -21429,8 +21472,8 @@ "fSb" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "hop"; - name = "Privacy Shutters" + name = "Privacy Shutters"; + id = "hop" }, /obj/structure/cable, /turf/open/floor/plating, @@ -21756,8 +21799,8 @@ /obj/structure/table/glass, /obj/effect/turf_decal/siding/wood/corner, /obj/item/storage/box/gloves{ - pixel_y = 11; - pixel_x = -4 + pixel_x = -4; + pixel_y = 11 }, /obj/item/storage/box/masks{ pixel_y = 1 @@ -21857,8 +21900,8 @@ dir = 8 }, /obj/machinery/conveyor_switch/oneway{ - id = "QMLoad2"; - pixel_y = 8 + pixel_y = 8; + id = "QMLoad2" }, /turf/open/floor/iron, /area/station/cargo/storage) @@ -22315,8 +22358,8 @@ /area/station/engineering/rbmk2) "gfS" = ( /obj/machinery/door/poddoor/preopen{ - id = "xenobio6"; - name = "Xenobio Pen 6 Blast Door" + name = "Xenobio Pen 6 Blast Door"; + id = "xenobio6" }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -22463,8 +22506,8 @@ /area/station/medical/psychology) "gjb" = ( /obj/machinery/door/poddoor/shutters/window{ - id = "gateshutter"; - name = "Gateway Access Shutter" + name = "Gateway Access Shutter"; + id = "gateshutter" }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, @@ -22486,8 +22529,8 @@ }, /obj/effect/turf_decal/board_number/one{ dir = 4; - color = "#EFB341"; - alpha = 150 + alpha = 150; + color = "#EFB341" }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -22548,8 +22591,8 @@ }, /obj/effect/turf_decal/board_number/three{ dir = 4; - color = "#EFB341"; - alpha = 150 + alpha = 150; + color = "#EFB341" }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -22663,8 +22706,8 @@ "glp" = ( /obj/machinery/light/small/directional/west, /obj/machinery/button/crematorium{ - id = "crematoriumChapel"; - pixel_x = -26 + pixel_x = -26; + id = "crematoriumChapel" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -22972,6 +23015,7 @@ "gpY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible/layer1, /obj/effect/spawner/random/maintenance, +/obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/engine) "gqa" = ( @@ -23455,9 +23499,9 @@ "gyd" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; + name = "Science"; location = "Science"; - name = "Science" + codes_txt = "delivery;dir=1" }, /turf/open/floor/plating, /area/station/maintenance/starboard) @@ -23717,10 +23761,10 @@ "gCC" = ( /obj/machinery/light/small/directional/west, /obj/machinery/button/door/directional/west{ - id = "Toilet4"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "Toilet4"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/showroomfloor, @@ -23890,6 +23934,12 @@ dir = 8 }, /area/station/commons/fitness/locker_room) +"gEG" = ( +/obj/item/assembly/mousetrap/armed{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) "gEL" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/structure/closet/secure_closet/atmospherics, @@ -23952,9 +24002,9 @@ "gGc" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Kitchen Counter Shutters"; dir = 8; - id = "cafe_counter"; - name = "Kitchen Counter Shutters" + id = "cafe_counter" }, /obj/effect/turf_decal/tile/dark_red/opposingcorners{ dir = 8 @@ -24035,8 +24085,8 @@ dir = 4 }, /obj/machinery/airlock_sensor/incinerator_ordmix{ - pixel_y = -22; - pixel_x = -9 + pixel_x = -9; + pixel_y = -22 }, /obj/machinery/atmospherics/components/binary/pump/off/general/visible, /turf/open/floor/catwalk_floor/iron_dark, @@ -24113,8 +24163,8 @@ dir = 4 }, /obj/machinery/button/crematorium{ - id = "crematoriumCold"; - pixel_x = -26 + pixel_x = -26; + id = "crematoriumCold" }, /turf/open/floor/fake_snow/safe{ initial_gas_mix = "o2=26;n2=97;TEMP=259.15" @@ -24363,9 +24413,9 @@ "gMu" = ( /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall4"; + name = "Pathing Navigation Beacon"; location = "hall3"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall4" }, /turf/open/floor/iron/checker, /area/station/hallway/primary/central/fore) @@ -24416,13 +24466,13 @@ dir = 1 }, /obj/structure/closet/secure_closet/brig{ - id = "Cell 1"; - name = "Cell 1 locker" + name = "Cell 1 locker"; + id = "Cell 1" }, /obj/machinery/flasher/directional/north{ - id = "Cell 1"; pixel_x = 23; - pixel_y = 23 + pixel_y = 23; + id = "Cell 1" }, /obj/machinery/camera/autoname/prison/directional/north, /turf/open/floor/iron/dark, @@ -24616,9 +24666,9 @@ /area/station/maintenance/disposal) "gQZ" = ( /obj/machinery/conveyor_switch/oneway{ - id = "cargodisposals"; name = "disposals conveyor switch"; - pixel_x = -10 + pixel_x = -10; + id = "cargodisposals" }, /obj/effect/turf_decal/siding/dark, /turf/open/floor/iron/dark, @@ -24642,9 +24692,9 @@ pixel_y = 4 }, /obj/machinery/button/door{ - id = "meetingblast"; name = "Meeting Room Lockdown Control"; pixel_y = -3; + id = "meetingblast"; req_access = list("command") }, /turf/open/floor/carpet/executive, @@ -24657,9 +24707,9 @@ "gRO" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Kitchen Counter Shutters"; dir = 8; - id = "cafe_counter"; - name = "Kitchen Counter Shutters" + id = "cafe_counter" }, /obj/effect/turf_decal/tile/dark_red/opposingcorners{ dir = 8 @@ -24671,8 +24721,8 @@ "gSh" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "captain_privacy"; - name = "Privacy Shutters" + name = "Privacy Shutters"; + id = "captain_privacy" }, /turf/open/floor/plating, /area/station/command/heads_quarters/captain) @@ -24846,8 +24896,8 @@ "gUr" = ( /obj/machinery/status_display/ai/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 101.325; - pressure_checks = 1 + pressure_checks = 1; + external_pressure_bound = 101.325 }, /obj/effect/turf_decal/box/red, /turf/open/floor/iron/dark/telecomms, @@ -24866,8 +24916,8 @@ "gUB" = ( /obj/structure/cable, /obj/machinery/door/airlock/wood{ - id_tag = "dorms3"; - name = "Dorms 3" + name = "Dorms 3"; + id_tag = "dorms3" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24876,9 +24926,9 @@ "gUD" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/machinery/button/door/directional/south{ - id = "qm_warehouse"; name = "Warehouse Shutters Control"; pixel_x = 24; + id = "qm_warehouse"; req_access = list("shipping") }, /obj/effect/decal/cleanable/dirt/dust, @@ -24996,8 +25046,8 @@ dir = 10 }, /obj/structure/statue/sandstone/venus{ - dir = 1; - name = "Honor" + name = "Honor"; + dir = 1 }, /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -25050,11 +25100,12 @@ }, /area/station/hallway/primary/port) "gXi" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/engine) "gXj" = ( @@ -25065,6 +25116,12 @@ /obj/effect/turf_decal/trimline/blue/filled/warning, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"gXq" = ( +/obj/item/assembly/mousetrap/armed{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "gXr" = ( /obj/effect/turf_decal/tile/dark_green/half/contrasted{ dir = 4 @@ -25144,9 +25201,9 @@ /obj/structure/flora/bush/fullgrass/style_random, /obj/structure/flora/bush/flowers_br/style_random, /obj/structure/displaycase{ - start_showpiece_type = /obj/item/statuebust/hippocratic; + pixel_y = 6; req_access = list("cmo"); - pixel_y = 6 + start_showpiece_type = /obj/item/statuebust/hippocratic }, /turf/open/floor/grass, /area/station/medical/treatment_center) @@ -25175,7 +25232,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "gYK" = ( /obj/machinery/dna_scannernew, @@ -25251,9 +25308,9 @@ dir = 1 }, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall13"; + name = "Pathing Navigation Beacon"; location = "hall12"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall13" }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/aft) @@ -25824,12 +25881,12 @@ dir = 8 }, /obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "rbmk2_shutters_east"; - name = "RB-MK2 Chamber Shutters" + name = "RB-MK2 Chamber Shutters"; + id = "rbmk2_shutters_east" }, /obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "RB-MK2 Reactor Chamber" + name = "RB-MK2 Reactor Chamber"; + heat_proof = 1 }, /turf/open/floor/plating, /area/station/engineering/rbmk2/chamber) @@ -26175,8 +26232,8 @@ dir = 8 }, /obj/machinery/disposal/bin{ - desc = "A pneumatic waste disposal unit. This one leads into a pit of acid!"; - name = "deathsposal unit" + name = "deathsposal unit"; + desc = "A pneumatic waste disposal unit. This one leads into a pit of acid!" }, /obj/effect/turf_decal/stripes/box, /obj/structure/sign/warning/directional/north, @@ -26240,8 +26297,8 @@ pixel_x = 8 }, /obj/item/camera{ - pixel_y = -2; - pixel_x = -6 + pixel_x = -6; + pixel_y = -2 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/blue, @@ -26490,8 +26547,8 @@ /area/station/engineering/supermatter/waste) "hrz" = ( /obj/machinery/door/poddoor/shutters{ - id = "visitation"; - name = "Visitation Shutters" + name = "Visitation Shutters"; + id = "visitation" }, /obj/machinery/door/window/left/directional/south, /obj/machinery/door/window/right/directional/north{ @@ -26503,9 +26560,9 @@ "hrR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Detective's Office Shutters"; dir = 1; - id = "detective_shutters"; - name = "Detective's Office Shutters" + id = "detective_shutters" }, /turf/open/floor/plating, /area/station/security/detectives_office) @@ -26617,9 +26674,9 @@ dir = 1 }, /obj/machinery/button/door/directional/west{ - id = "mining_shutters"; name = "Mining Shutters Control"; pixel_y = -8; + id = "mining_shutters"; req_access = list("mining") }, /obj/effect/turf_decal/caution{ @@ -26711,8 +26768,8 @@ dir = 4 }, /obj/machinery/sparker/directional/west{ - id = "atmos_incinerator_igniter"; - pixel_x = -16 + pixel_x = -16; + id = "atmos_incinerator_igniter" }, /turf/open/floor/engine/airless, /area/station/maintenance/disposal/incinerator) @@ -26740,8 +26797,8 @@ "hvm" = ( /obj/structure/railing, /obj/structure/showcase/machinery/cloning_pod{ - desc = "An old prototype cloning pod, permanently decommissioned following the incident."; - name = "decommissioned cloner" + name = "decommissioned cloner"; + desc = "An old prototype cloning pod, permanently decommissioned following the incident." }, /turf/open/floor/plating, /area/station/science/research/abandoned) @@ -26924,12 +26981,12 @@ "hxw" = ( /obj/structure/table/wood, /obj/structure/closet/generic/wall{ - pixel_x = -28; - name = "Medication Closet" + name = "Medication Closet"; + pixel_x = -28 }, /obj/item/reagent_containers/cup/glass/bottle/whiskey{ - pixel_y = 16; - pixel_x = -5 + pixel_x = -5; + pixel_y = 16 }, /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ pixel_x = 1 @@ -27004,8 +27061,8 @@ pixel_y = 24 }, /obj/structure/sign/directions/dorms/directional/south{ - pixel_y = 32; - pixel_x = -32 + pixel_x = -32; + pixel_y = 32 }, /turf/open/floor/iron/checker, /area/station/hallway/primary/central/fore) @@ -27103,9 +27160,9 @@ /area/station/command/cc_dock) "hzW" = ( /obj/machinery/button/door/directional/north{ - req_access = list("armory"); + name = "Armory Shutters Control"; id = "armory"; - name = "Armory Shutters Control" + req_access = list("armory") }, /obj/effect/turf_decal/stripes/red/line{ dir = 1 @@ -27208,8 +27265,8 @@ /area/station/maintenance/department/engine) "hBt" = ( /obj/machinery/button/door/directional/east{ - id = "engsm"; name = "Radiation Shutters Control"; + id = "engsm"; req_access = list("engineering") }, /obj/effect/turf_decal/bot{ @@ -27224,8 +27281,8 @@ "hBv" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "rdoffice"; - name = "Research Director's Shutters" + name = "Research Director's Shutters"; + id = "rdoffice" }, /turf/open/floor/plating, /area/station/command/heads_quarters/rd) @@ -27279,9 +27336,9 @@ /area/station/biodome) "hCI" = ( /obj/machinery/button/door/directional/east{ - id = "qm_warehouse_left"; name = "Warehouse Shutters Control"; pixel_y = -8; + id = "qm_warehouse_left"; req_access = list("shipping") }, /obj/effect/turf_decal/caution{ @@ -27307,16 +27364,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/public_mining) -"hDe" = ( -/obj/effect/landmark/start/shaft_miner, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "hDf" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -27467,8 +27514,8 @@ }, /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ - id = "commandblast"; - name = "Command Lockdown Blast Door" + name = "Command Lockdown Blast Door"; + id = "commandblast" }, /turf/open/floor/iron/dark, /area/station/command/bridge) @@ -27558,10 +27605,10 @@ /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/turf_decal/sand/plating, /obj/machinery/door/airlock/multi_tile/metal{ - transport_linked_id = "tram_mining_lift"; - elevator_mode = 1; name = "Mining Elevator Door"; - req_access = list("tcomms") + req_access = list("tcomms"); + elevator_mode = 1; + transport_linked_id = "tram_mining_lift" }, /turf/open/floor/plating/rust/moonstation, /area/station/cargo/miningelevators) @@ -27645,9 +27692,9 @@ "hFP" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; + name = "Bar"; location = "Bar"; - name = "Bar" + codes_txt = "delivery;dir=8" }, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) @@ -27927,6 +27974,12 @@ /obj/effect/landmark/start/chief_medical_officer, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"hJD" = ( +/obj/item/assembly/mousetrap/armed{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "hJF" = ( /turf/closed/wall/mineral/wood, /area/station/service/hydroponics) @@ -27947,8 +28000,8 @@ "hJV" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, /obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 4; - name = "Mix to Pure" + name = "Mix to Pure"; + dir = 4 }, /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron, @@ -28144,9 +28197,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/cable, /obj/structure/sink/directional/west{ - dispensedreagent = /datum/reagent/lube; name = "lube sink"; - desc = "A sink used for lubing one's hands and face. Passively reclaims lube over time." + desc = "A sink used for lubing one's hands and face. Passively reclaims lube over time."; + dispensedreagent = /datum/reagent/lube }, /turf/open/floor/wood/parquet, /area/station/service/theater) @@ -28479,8 +28532,8 @@ pixel_x = -32 }, /obj/structure/sign/directions/engineering/directional/south{ - pixel_y = -40; - pixel_x = -32 + pixel_x = -32; + pixel_y = -40 }, /turf/open/floor/wood/tile, /area/station/hallway/primary/central/aft) @@ -28644,8 +28697,8 @@ /area/station/commons/public_mining) "hWh" = ( /obj/machinery/door/poddoor/preopen{ - id = "ntrep_privacy_shutters_external_erp"; - name = "External Privacy Shutters" + name = "External Privacy Shutters"; + id = "ntrep_privacy_shutters_external_erp" }, /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -28753,21 +28806,21 @@ /area/station/medical/storage) "hXZ" = ( /obj/machinery/door/airlock/virology{ - autoclose = 0; + name = "Virology Exterior Airlock"; frequency = 1449; id_tag = "virology_airlock_exterior"; - name = "Virology Exterior Airlock" + autoclose = 0 }, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/effect/turf_decal/tile/dark_green/fourcorners, /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door_buttons/access_button{ - dir = 1; - idDoor = "virology_airlock_exterior"; - idSelf = "virology_airlock_control"; name = "Virology Access Button"; + dir = 1; + pixel_x = 24; req_access = list("virology"); - pixel_x = 24 + idSelf = "virology_airlock_control"; + idDoor = "virology_airlock_exterior" }, /obj/machinery/door/firedoor, /obj/effect/landmark/navigate_destination/autoname, @@ -28828,8 +28881,8 @@ pixel_y = 8 }, /obj/item/reagent_containers/spray/plantbgone{ - pixel_y = 8; - pixel_x = -8 + pixel_x = -8; + pixel_y = 8 }, /obj/item/watertank, /turf/open/floor/iron, @@ -28876,8 +28929,8 @@ /area/station/hallway/primary/tram/left) "hZw" = ( /obj/machinery/button/curtain{ - id = "theatre_curtains"; - pixel_x = 23 + pixel_x = 23; + id = "theatre_curtains" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/chair/stool/directional/west, @@ -29363,19 +29416,19 @@ /area/station/common/cryopods) "ihQ" = ( /obj/machinery/door/poddoor/preopen{ - id = "xenobio1"; - name = "Xenobio Pen 1 Blast Door" + name = "Xenobio Pen 1 Blast Door"; + id = "xenobio1" }, /turf/open/floor/engine, /area/station/science/xenobiology) "ihX" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/machinery/door/airlock/multi_tile/metal{ - transport_linked_id = "tram_mining_lift"; - elevator_mode = 1; name = "Mining Elevator Door"; req_access = list("tcomms"); - autoclose = 0 + autoclose = 0; + elevator_mode = 1; + transport_linked_id = "tram_mining_lift" }, /turf/open/floor/plating/rust/moonstation, /area/station/cargo/miningelevators) @@ -29393,10 +29446,10 @@ dir = 4 }, /obj/machinery/button/door/directional/east{ - id = "genetics_shutters"; name = "Desk Shutters Control"; - normaldoorcontrol = 1; - req_access = list("genetics") + id = "genetics_shutters"; + req_access = list("genetics"); + normaldoorcontrol = 1 }, /obj/machinery/requests_console/auto_name/directional/north, /obj/effect/mapping_helpers/requests_console/assistance, @@ -29601,9 +29654,9 @@ name = "Security Intelligence" }, /obj/item/paper{ - default_raw_text = "One of the smartest things I ever done in my Syndicate Career was construct a syndicate listening post directly next the most active and secure department: Security. So far no one has noticed yet and I can't wait to collect a ton of valuable intel from the Security channel."; name = "Suspicious Ramblings"; - pixel_y = 2 + pixel_y = 2; + default_raw_text = "One of the smartest things I ever done in my Syndicate Career was construct a syndicate listening post directly next the most active and secure department: Security. So far no one has noticed yet and I can't wait to collect a ton of valuable intel from the Security channel." }, /obj/item/pen, /obj/item/coin/antagtoken, @@ -29658,8 +29711,8 @@ /area/station/ai_monitored/turret_protected/ai) "ilz" = ( /obj/structure/sign/barber{ - pixel_y = -2; - pixel_x = -17 + pixel_x = -17; + pixel_y = -2 }, /turf/open/floor/wood/parquet, /area/station/commons/lounge) @@ -29855,9 +29908,9 @@ /area/station/service/barber) "ioY" = ( /obj/machinery/door/airlock/research{ - glass = 1; name = "Slime Euthanization Chamber"; - opacity = 0 + opacity = 0; + glass = 1 }, /obj/effect/mapping_helpers/airlock/access/any/science/xenobio, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29935,8 +29988,8 @@ "iqD" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters{ - id = "abandoned_medbay_shutters"; - name = "Abandoned Medbay Shutters" + name = "Abandoned Medbay Shutters"; + id = "abandoned_medbay_shutters" }, /turf/open/floor/iron, /area/station/medical/abandoned) @@ -29987,10 +30040,10 @@ "irs" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /obj/machinery/button/door/directional/south{ - id = "cmoprivacy"; name = "Bridge Public Access Control"; - req_access = list("command"); - pixel_x = 8 + pixel_x = 8; + id = "cmoprivacy"; + req_access = list("command") }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30258,8 +30311,8 @@ /area/station/maintenance/disposal/incinerator) "ivu" = ( /obj/machinery/processor{ - pixel_y = 7; - pixel_x = 1 + pixel_x = 1; + pixel_y = 7 }, /obj/structure/table, /obj/effect/turf_decal/siding/dark{ @@ -30272,8 +30325,8 @@ /area/station/service/kitchen) "ivw" = ( /obj/machinery/door/poddoor/preopen{ - id = "xenobio4"; - name = "Xenobio Pen 4 Blast Door" + name = "Xenobio Pen 4 Blast Door"; + id = "xenobio4" }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -30570,8 +30623,8 @@ /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ - id = "Xenolab"; - name = "Test Chamber Blast Door" + name = "Test Chamber Blast Door"; + id = "Xenolab" }, /turf/open/floor/plating, /area/station/science/xenobiology) @@ -30670,8 +30723,8 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible, /obj/effect/turf_decal/tile/dark/fourcorners, /obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 8; - name = "CO2 to Pure" + name = "CO2 to Pure"; + dir = 8 }, /turf/open/floor/iron, /area/station/engineering/atmos) @@ -30724,8 +30777,8 @@ }, /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ - dir = 4; name = "Prisoner Delivery"; + dir = 4; pixel_y = -3 }, /turf/open/floor/iron/dark, @@ -30789,8 +30842,8 @@ "iDB" = ( /obj/machinery/light/moonstation/directional/south, /obj/machinery/button/door/directional/south{ - id = "bar_kitchen_counter"; name = "Bar-Kitchen Counter Shutters"; + id = "bar_kitchen_counter"; req_access = list("kitchen") }, /obj/machinery/vending/wardrobe/chef_wardrobe, @@ -30916,8 +30969,8 @@ "iEV" = ( /obj/machinery/brm, /obj/machinery/conveyor{ - id = "mining"; - dir = 4 + dir = 4; + id = "mining" }, /obj/structure/railing/corner/end{ dir = 4 @@ -31010,8 +31063,8 @@ /obj/structure/hedge, /obj/machinery/status_display/ai/directional/west, /obj/structure/sign/directions/engineering/directional/south{ - pixel_y = -40; - pixel_x = -32 + pixel_x = -32; + pixel_y = -40 }, /obj/structure/sign/directions/vault/directional/south{ pixel_x = -32 @@ -31142,8 +31195,8 @@ dir = 4 }, /obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "O2 to Airmix" + name = "O2 to Airmix"; + dir = 1 }, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, @@ -31221,6 +31274,13 @@ /obj/machinery/vending/cigarette, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) +"iJd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "iJq" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /turf/open/floor/iron/dark, @@ -31235,9 +31295,9 @@ /area/station/science/ordnance/storage) "iJI" = ( /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall27"; + name = "Pathing Navigation Beacon"; location = "hall26"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall27" }, /obj/machinery/light/floor, /turf/open/floor/iron/checker, @@ -31329,9 +31389,9 @@ "iKI" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; + name = "Command"; location = "Command"; - name = "Command" + codes_txt = "delivery;dir=8" }, /turf/open/floor/plating, /area/station/maintenance/fore) @@ -31357,8 +31417,8 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "iLy" = ( -/obj/structure/table/wood, /mob/living/carbon/human/species/monkey/punpun, +/obj/structure/table/wood, /obj/effect/turf_decal/siding/dark, /turf/open/floor/iron/grimy, /area/station/commons/lounge) @@ -31451,10 +31511,10 @@ "iNq" = ( /obj/structure/table, /obj/machinery/button/door{ - id = "cargo_shutters"; name = "Cargo Shutters Control"; - pixel_y = 2; pixel_x = 8; + pixel_y = 2; + id = "cargo_shutters"; req_access = list("cargo") }, /obj/item/paper_bin{ @@ -31661,8 +31721,8 @@ /obj/effect/turf_decal/tile/green/half/contrasted, /obj/structure/table/glass, /obj/machinery/reagentgrinder{ - pixel_y = 13; - pixel_x = -6 + pixel_x = -6; + pixel_y = 13 }, /obj/item/storage/box/syringes{ pixel_x = 6 @@ -31734,6 +31794,7 @@ /area/station/cargo/miningelevators) "iRj" = ( /obj/effect/spawner/random/burgerstation/loot, +/obj/structure/sign/poster/random/directional/east, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "iRk" = ( @@ -31920,19 +31981,19 @@ /area/station/terminal/maintenance/fore) "iTF" = ( /obj/machinery/door/poddoor/preopen{ - id = "Xenolab"; - name = "Test Chamber Blast Door" + name = "Test Chamber Blast Door"; + id = "Xenolab" }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/door/window/brigdoor/left/directional/east{ - req_access = list("xenobiology"); - name = "Xenobiology Testing Chambers" + name = "Xenobiology Testing Chambers"; + req_access = list("xenobiology") }, /obj/machinery/door/window/brigdoor/right/directional/west{ - req_access = list("xenobiology"); - name = "Xenobiology Testing Chambers" + name = "Xenobiology Testing Chambers"; + req_access = list("xenobiology") }, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/engine, @@ -32236,14 +32297,13 @@ /turf/open/floor/wood, /area/station/service/barber) "iXp" = ( -/obj/structure/sign/poster/random/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/junction/flip{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "iXt" = ( /obj/structure/cable, @@ -32551,10 +32611,10 @@ /area/station/medical/morgue/office) "jaV" = ( /obj/machinery/button/door/directional/north{ + name = "Dorms Bolt Control"; id = "dorms2"; - normaldoorcontrol = 1; specialfunctions = 4; - name = "Dorms Bolt Control" + normaldoorcontrol = 1 }, /obj/item/kirbyplants/random, /turf/open/floor/carpet/red, @@ -32757,10 +32817,10 @@ /obj/structure/rack, /obj/effect/spawner/random/engineering/toolbox, /obj/machinery/button/door/directional/west{ - id = "vaccant_office_frontdoor"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "vaccant_office_frontdoor"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /turf/open/floor/wood, /area/station/commons/vacant_room/office) @@ -32899,8 +32959,8 @@ /area/station/commons/vacant_room/office) "jfJ" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "ce_officer_shutters"; - name = "Privacy Shutters" + name = "Privacy Shutters"; + id = "ce_officer_shutters" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -32979,8 +33039,8 @@ /area/station/security/courtroom) "jgF" = ( /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 1 + dir = 1; + id = "cargodisposals" }, /obj/machinery/computer/security/telescreen/disposals/directional/west, /obj/structure/drain, @@ -33024,10 +33084,10 @@ /area/station/security/medical) "jhi" = ( /obj/machinery/button/door/directional/east{ - id = "AuxToilet3"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "AuxToilet3"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/machinery/light/small/directional/north, /obj/machinery/recharge_station, @@ -33070,8 +33130,8 @@ dir = 6 }, /obj/structure/showcase/machinery/cloning_pod{ - desc = "An old prototype cloning pod, permanently decommissioned following the incident."; - name = "decommissioned cloner" + name = "decommissioned cloner"; + desc = "An old prototype cloning pod, permanently decommissioned following the incident." }, /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, @@ -33115,8 +33175,8 @@ "jim" = ( /obj/structure/window/spawner/directional/west, /obj/structure/statue/gold/rd{ - pixel_y = 4; - pixel_x = 3 + pixel_x = 3; + pixel_y = 4 }, /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -33199,9 +33259,9 @@ dir = 8 }, /obj/machinery/flasher/directional/north{ - id = "Cell 3"; pixel_x = 23; - pixel_y = 23 + pixel_y = 23; + id = "Cell 3" }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -33408,8 +33468,8 @@ /area/station/security/office) "jmk" = ( /obj/structure/closet/secure_closet/freezer{ - req_access = list("kitchen"); - name = "kitchen refrigerator" + name = "kitchen refrigerator"; + req_access = list("kitchen") }, /obj/item/reagent_containers/condiment/milk, /obj/item/reagent_containers/condiment/milk, @@ -33618,12 +33678,12 @@ "joo" = ( /obj/structure/dresser, /obj/item/pillow/clown{ - pixel_y = 10; - pixel_x = 3 + pixel_x = 3; + pixel_y = 10 }, /obj/item/pillow/mime{ - pixel_y = 14; - pixel_x = 3 + pixel_x = 3; + pixel_y = 14 }, /obj/structure/extinguisher_cabinet/directional/south, /obj/machinery/camera/autoname/directional/east, @@ -33846,9 +33906,9 @@ "jrX" = ( /obj/structure/table, /obj/machinery/button/door{ - id = "rdoffice"; name = "privacy shutters"; pixel_y = 5; + id = "rdoffice"; req_access = list("rd") }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33936,8 +33996,8 @@ /area/station/medical/treatment_center) "jts" = ( /obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Unit 2" + name = "Unit 2"; + id_tag = "Toilet2" }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -34084,12 +34144,12 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "rbmk2_shutters_west"; - name = "RB-MK2 Chamber Shutters" + name = "RB-MK2 Chamber Shutters"; + id = "rbmk2_shutters_west" }, /obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "RB-MK2 Reactor Chamber" + name = "RB-MK2 Reactor Chamber"; + heat_proof = 1 }, /turf/open/floor/plating, /area/station/engineering/rbmk2/chamber) @@ -34289,6 +34349,9 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, /turf/open/floor/plating, /area/station/commons/lounge) "jzl" = ( @@ -34348,9 +34411,9 @@ }, /obj/machinery/vending/wardrobe/jani_wardrobe, /obj/machinery/button/door/directional/north{ - id = "custodialshutters"; name = "Parking Garage Shutters Control"; pixel_x = -8; + id = "custodialshutters"; req_access = list("janitor") }, /turf/open/floor/iron/checker, @@ -34419,10 +34482,10 @@ /area/station/commons/lounge) "jCy" = ( /obj/machinery/button/door/directional/north{ - id = "mechbay2"; name = "Mech Bay Shutters Control"; - req_access = list("robotics"); - pixel_x = -8 + pixel_x = -8; + id = "mechbay2"; + req_access = list("robotics") }, /obj/machinery/camera/autoname/science/directional/north{ dir = 9 @@ -34534,10 +34597,10 @@ /obj/structure/cable, /obj/effect/spawner/random/trash/mopbucket, /obj/machinery/button/door/directional/east{ - id = "vaccant_office_backdoor"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "vaccant_office_backdoor"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/machinery/firealarm/directional/north, /turf/open/floor/wood, @@ -34676,8 +34739,8 @@ /area/station/maintenance/port) "jHc" = ( /obj/machinery/door/poddoor/preopen{ - id = "xenobio3"; - name = "Xenobio Pen 3 Blast Door" + name = "Xenobio Pen 3 Blast Door"; + id = "xenobio3" }, /turf/open/floor/engine, /area/station/science/xenobiology) @@ -34852,8 +34915,8 @@ /area/station/commons/vacant_room/office) "jJg" = ( /obj/machinery/atmospherics/components/binary/valve/digital{ - dir = 4; - name = "Emergency Cooling Bypass" + name = "Emergency Cooling Bypass"; + dir = 4 }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark, @@ -34899,6 +34962,7 @@ "jKi" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) "jKl" = ( @@ -34932,8 +34996,8 @@ /area/station/security/courtroom) "jLf" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos/layer2{ - dir = 1; - icon_state = "dpvent_map-2" + icon_state = "dpvent_map-2"; + dir = 1 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/machinery/atmospherics/pipe/bridge_pipe/dark/visible{ @@ -34975,11 +35039,11 @@ dir = 4 }, /obj/machinery/button/door/directional/north{ - id = "justiceblast"; name = "I Fucked Up Blastdoor Button of Justice"; pixel_x = 24; - req_access = list("armory"); - pixel_y = 22 + pixel_y = 22; + id = "justiceblast"; + req_access = list("armory") }, /obj/machinery/atmospherics/pipe/bridge_pipe/pink/visible, /turf/open/floor/iron/dark, @@ -35033,9 +35097,9 @@ "jMm" = ( /obj/structure/plasticflaps, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=2"; + name = "Engineering"; location = "Engineering"; - name = "Engineering" + codes_txt = "delivery;dir=2" }, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) @@ -35119,7 +35183,7 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "jNo" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ @@ -35151,13 +35215,13 @@ /area/station/common/locker_room_shower) "jNA" = ( /obj/docking_port/stationary{ - dheight = 3; + name = "Moon Station Command Dock"; dir = 2; - dwidth = 8; + width = 20; height = 11; shuttle_id = "ferry_home"; - name = "Moon Station Command Dock"; - width = 20 + dwidth = 8; + dheight = 3 }, /turf/open/misc/moonstation_sand, /area/moonstation/surface) @@ -35341,8 +35405,8 @@ "jQi" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "bridgewindows"; - name = "Bridge View Blast Door" + name = "Bridge View Blast Door"; + id = "bridgewindows" }, /obj/structure/cable, /turf/open/floor/plating, @@ -35431,9 +35495,9 @@ "jRd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, /obj/structure/cable, /obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/maintenance/department/engine) "jRe" = ( @@ -35733,7 +35797,10 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2{ dir = 1 }, -/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/door/airlock/research{ + name = "Ordnance Lab" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/plating, /area/station/science/ordnance/freezerchamber) "jVf" = ( @@ -35767,8 +35834,8 @@ }, /obj/effect/turf_decal/board_number/two{ dir = 4; - color = "#EFB341"; - alpha = 150 + alpha = 150; + color = "#EFB341" }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -35896,8 +35963,8 @@ "jXE" = ( /obj/effect/decal/cleanable/crayon{ icon_state = "o"; - color = "FF0000"; - pixel_x = -16 + pixel_x = -16; + color = "FF0000" }, /obj/effect/decal/cleanable/crayon{ icon_state = "o"; @@ -35996,9 +36063,9 @@ "jZx" = ( /mob/living/simple_animal/bot/mulebot, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; + name = "QM #2"; location = "QM #2"; - name = "QM #2" + codes_txt = "delivery;dir=8" }, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -36172,6 +36239,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/iron/grimy, /area/station/service/library) "kct" = ( @@ -36334,8 +36404,8 @@ /area/station/construction) "kdS" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "bar_kitchen_counter"; - name = "Bar-Kitchen Counter Shutters" + name = "Bar-Kitchen Counter Shutters"; + id = "bar_kitchen_counter" }, /obj/structure/table, /obj/effect/turf_decal/tile/dark_red/opposingcorners{ @@ -36594,8 +36664,8 @@ "kiN" = ( /obj/machinery/conveyor_switch/oneway{ dir = 8; - id = "cratedelivery"; - pixel_y = 8 + pixel_y = 8; + id = "cratedelivery" }, /obj/effect/turf_decal/siding/dark{ dir = 4 @@ -36644,8 +36714,8 @@ "kjo" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "rbmk2_shutters_north"; - name = "RB-MK2 Chamber Shutters" + name = "RB-MK2 Chamber Shutters"; + id = "rbmk2_shutters_north" }, /turf/open/floor/plating, /area/station/engineering/rbmk2/chamber) @@ -36991,8 +37061,8 @@ /area/station/hallway/primary/starboard) "koc" = ( /obj/structure/sign/warning/secure_area{ - desc = "A warning sign which reads 'BOMB RANGE"; - name = "BOMB RANGE" + name = "BOMB RANGE"; + desc = "A warning sign which reads 'BOMB RANGE" }, /turf/closed/wall/r_wall/rust, /area/station/science/ordnance/bomb) @@ -37406,7 +37476,7 @@ "ktO" = ( /obj/effect/spawner/random/burgerstation/power, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "ktV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -37530,13 +37600,13 @@ }, /obj/item/kirbyplants/random/fullysynthetic, /obj/machinery/door_buttons/airlock_controller{ - idExterior = "xeno_airlock_exterior"; - idInterior = "xeno_airlock_interior"; - idSelf = "xeno_airlock_control"; name = "Access Console"; pixel_x = 7; pixel_y = 24; - req_access = list("xenobiology") + req_access = list("xenobiology"); + idSelf = "xeno_airlock_control"; + idInterior = "xeno_airlock_interior"; + idExterior = "xeno_airlock_exterior" }, /turf/open/floor/iron/white, /area/station/science/xenobiology) @@ -37590,7 +37660,7 @@ "kwC" = ( /obj/machinery/computer/atmos_control/mix_tank{ dir = 1; - atmos_chambers = list("mix_sm_waste" = "Engine Waste Chamber") + atmos_chambers = list(mix_sm_waste="Engine Waste Chamber") }, /turf/open/floor/plating, /area/station/engineering/supermatter/waste) @@ -37734,9 +37804,9 @@ "kyT" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "cargo_shutters"; name = "Cargo Shutters"; - dir = 4 + dir = 4; + id = "cargo_shutters" }, /turf/open/floor/plating, /area/station/cargo/office) @@ -37758,8 +37828,8 @@ /area/station/security/holding_cell) "kza" = ( /obj/machinery/button/door/directional/north{ - id = "detective_shutters"; name = "detective's office shutters control"; + id = "detective_shutters"; req_access = list("detective") }, /obj/machinery/computer/records/security, @@ -37916,9 +37986,9 @@ "kBe" = ( /obj/machinery/light/floor, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall12"; + name = "Pathing Navigation Beacon"; location = "hall11"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall12" }, /turf/open/floor/iron/checker, /area/station/hallway/primary/central/aft) @@ -38035,8 +38105,8 @@ /area/station/engineering/supermatter) "kCz" = ( /obj/machinery/door/poddoor/shutters/window{ - id = "armory"; - name = "Armory Shutters" + name = "Armory Shutters"; + id = "armory" }, /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, @@ -38143,8 +38213,8 @@ /area/station/security/checkpoint/arrivals) "kDJ" = ( /obj/docking_port/stationary/syndicate/northwest{ - dir = 4; - name = "North West of Moon Station" + name = "North West of Moon Station"; + dir = 4 }, /turf/open/genturf, /area/moonstation/surface/unexplored) @@ -38169,8 +38239,8 @@ /area/station/service/abandoned_gambling_den) "kEo" = ( /obj/machinery/button/door/directional/north{ - id = "cafe_counter"; name = "Kitchen Counter Shutters"; + id = "cafe_counter"; req_access = list("kitchen") }, /obj/effect/turf_decal/tile/dark_red/opposingcorners{ @@ -38374,10 +38444,10 @@ "kIi" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /obj/machinery/button/flasher{ - id = "brig_entrance_flasher"; name = "Brig Entrance Flasher"; pixel_x = -24; pixel_y = -24; + id = "brig_entrance_flasher"; req_access = list("security") }, /obj/effect/decal/cleanable/dirt, @@ -38434,9 +38504,9 @@ dir = 1 }, /obj/machinery/disposal/delivery_chute{ - pixel_y = 4; name = "Prisoner Deliveries"; - dir = 4 + dir = 4; + pixel_y = 4 }, /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark, @@ -38476,9 +38546,9 @@ req_access = list("pharmacy") }, /obj/machinery/door/poddoor/shutters/preopen{ - id = "pharm_desk_shutters"; name = "Desk Shutters"; - dir = 8 + dir = 8; + id = "pharm_desk_shutters" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -38569,9 +38639,9 @@ /area/station/cargo/miningelevators) "kLH" = ( /obj/structure/chair{ - dir = 1; name = "security time-out chair"; - desc = "A chair meant for misbehaving security officers. Was designated as the time-out chair after the Head of Security realized that it doesn't look good to put security officers in public-facing cells." + desc = "A chair meant for misbehaving security officers. Was designated as the time-out chair after the Head of Security realized that it doesn't look good to put security officers in public-facing cells."; + dir = 1 }, /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/cobweb, @@ -38691,20 +38761,20 @@ "kNv" = ( /obj/effect/landmark/start/ai, /obj/item/radio/intercom/directional/east{ - freerange = 1; name = "Custom Channel"; - pixel_y = -8 + pixel_y = -8; + freerange = 1 }, /obj/item/radio/intercom/directional/north{ - frequency = 1447; name = "Private Channel"; - freerange = 1; - pixel_y = 20 + pixel_y = 20; + frequency = 1447; + freerange = 1 }, /obj/item/radio/intercom/directional/west{ - freerange = 1; name = "Common Channel"; - pixel_y = -8 + pixel_y = -8; + freerange = 1 }, /obj/machinery/turretid{ name = "AI Chamber turret control"; @@ -38713,16 +38783,16 @@ control_area = "/area/station/ai_monitored/turret_protected/ai" }, /obj/machinery/button/door/directional/north{ - id = "AI Chamber entrance shutters"; name = "AI Chamber Entrance Shutters Control"; pixel_x = 22; - pixel_y = 8 + pixel_y = 8; + id = "AI Chamber entrance shutters" }, /obj/machinery/button/door/directional/north{ - id = "AI Core shutters"; name = "AI Core Shutters Control"; pixel_x = 22; - pixel_y = 16 + pixel_y = 16; + id = "AI Core shutters" }, /turf/open/floor/circuit/green/telecomms, /area/station/ai_monitored/turret_protected/ai) @@ -38812,9 +38882,9 @@ /area/station/science/ordnance) "kOz" = ( /obj/machinery/door/poddoor/shutters{ - id = "qm_warehouse_left"; name = "Warehouse Shutters"; - dir = 8 + dir = 8; + id = "qm_warehouse_left" }, /turf/open/floor/iron/dark, /area/station/cargo/warehouse) @@ -38925,8 +38995,8 @@ dir = 4 }, /obj/machinery/door/window/brigdoor/right/directional/east{ - req_access = list("xenobiology"); - name = "Xenobiology Testing Chambers" + name = "Xenobiology Testing Chambers"; + req_access = list("xenobiology") }, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -38962,9 +39032,9 @@ dir = 4 }, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall25"; + name = "Pathing Navigation Beacon"; location = "hall24"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall25" }, /turf/open/floor/iron, /area/station/command/cc_dock) @@ -39046,9 +39116,9 @@ /area/station/security/prison/upper) "kRL" = ( /obj/machinery/door/poddoor/shutters/preopen{ + name = "Kitchen Counter Shutters"; dir = 8; - id = "cafe_counter"; - name = "Kitchen Counter Shutters" + id = "cafe_counter" }, /obj/effect/turf_decal/tile/dark_red/opposingcorners{ dir = 8 @@ -39129,6 +39199,7 @@ /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/effect/mapping_helpers/airlock/access/any/supply/maintenance, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) "kSL" = ( @@ -39374,8 +39445,8 @@ /obj/effect/spawner/random/burgerstation/atmos, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/button/door/directional/south{ - id = "enginewasteblast"; name = "Engine Waste Storage Vent Control"; + id = "enginewasteblast"; req_access = list("engineering") }, /turf/open/floor/plating, @@ -39635,8 +39706,8 @@ "kZr" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /obj/machinery/door/poddoor{ - id = "engine_viewing"; - name = "Engine Viewing Blast Door" + name = "Engine Viewing Blast Door"; + id = "engine_viewing" }, /turf/open/floor/plating, /area/station/engineering/supermatter/room) @@ -39710,8 +39781,8 @@ dir = 10 }, /obj/structure/sign/directions/dorms/directional/south{ - pixel_y = 32; - pixel_x = -32 + pixel_x = -32; + pixel_y = 32 }, /obj/machinery/status_display/evac/directional/west, /turf/open/floor/wood/tile, @@ -39830,9 +39901,9 @@ }, /obj/machinery/keycard_auth/wall_mounted/directional/north, /obj/machinery/button/door/directional/north{ - id = "cmo_officer_shutters"; name = "Privacy Shutters Control"; pixel_y = 34; + id = "cmo_officer_shutters"; req_access = list("cmo") }, /turf/open/floor/iron/white, @@ -39852,9 +39923,9 @@ /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/door{ - id = "xenobio2"; name = "Xenobio Pen 2 Blast Doors"; pixel_y = 1; + id = "xenobio2"; req_access = list("xenobiology") }, /obj/effect/turf_decal/siding/dark, @@ -40155,9 +40226,9 @@ /area/station/maintenance/aux_eva) "lgw" = ( /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; + name = "Hydroponics"; location = "Hydroponics"; - name = "Hydroponics" + codes_txt = "delivery;dir=1" }, /obj/structure/plasticflaps/opaque, /turf/open/floor/plating, @@ -40495,8 +40566,8 @@ /turf/open/floor/iron/showroomfloor, /area/station/common/cryopods/aux) "lkU" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, /mob/living/basic/bot/firebot, +/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos/control_center) "llq" = ( @@ -40538,8 +40609,8 @@ /area/station/maintenance/port/aft) "lml" = ( /obj/machinery/atmospherics/components/binary/valve/digital{ - dir = 8; - name = "Emergency Waste Release" + name = "Emergency Waste Release"; + dir = 8 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, @@ -40794,9 +40865,9 @@ /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=hall20"; + name = "Pathing Navigation Beacon"; location = "hall19"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall20" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -41119,10 +41190,10 @@ /area/station/science/xenobiology) "luj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ - chamber_id = "mix_security"; dir = 1; - internal_pressure_bound = 200; - on = 0 + on = 0; + chamber_id = "mix_security"; + internal_pressure_bound = 200 }, /turf/open/floor/engine/air{ initial_gas_mix = "o2=264;n2o=1058;TEMP=293.15" @@ -41148,8 +41219,8 @@ /turf/open/floor/plating, /area/station/security/eva) "luA" = ( -/obj/structure/bed/dogbed/ian, /mob/living/basic/pet/dog/corgi/ian, +/obj/structure/bed/dogbed/ian, /obj/machinery/firealarm/directional/east, /obj/item/dog_bone, /turf/open/floor/carpet/purple, @@ -41178,10 +41249,10 @@ /area/station/service/barber) "luN" = ( /obj/machinery/door/airlock/research{ - autoclose = 0; + name = "Xenobiology Lab Internal Airlock"; frequency = 1449; id_tag = "xeno_airlock_interior"; - name = "Xenobiology Lab Internal Airlock" + autoclose = 0 }, /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /obj/machinery/door/firedoor, @@ -41261,28 +41332,28 @@ }, /obj/structure/table, /obj/item/grenade/chem_grenade{ - pixel_y = 7; - pixel_x = -4 + pixel_x = -4; + pixel_y = 7 }, /obj/item/grenade/chem_grenade{ - pixel_y = 7; - pixel_x = -4 + pixel_x = -4; + pixel_y = 7 }, /obj/item/grenade/chem_grenade{ - pixel_y = 7; - pixel_x = 4 + pixel_x = 4; + pixel_y = 7 }, /obj/item/grenade/chem_grenade{ - pixel_y = 7; - pixel_x = 4 + pixel_x = 4; + pixel_y = 7 }, /obj/item/assembly/igniter{ pixel_x = -2; pixel_y = -4 }, /obj/item/assembly/timer{ - pixel_y = -5; - pixel_x = 4 + pixel_x = 4; + pixel_y = -5 }, /obj/machinery/requests_console/auto_name/directional/west, /obj/effect/mapping_helpers/requests_console/assistance, @@ -41452,8 +41523,8 @@ /area/station/science/ordnance/storage) "lyl" = ( /obj/machinery/door/airlock{ - id_tag = "Toilet3"; - name = "Unit 3" + name = "Unit 3"; + id_tag = "Toilet3" }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -41703,8 +41774,8 @@ /area/station/engineering/main) "lCj" = ( /obj/machinery/door/poddoor/shutters{ - id = "teleportershutters"; - name = "Teleporter Shutters" + name = "Teleporter Shutters"; + id = "teleportershutters" }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, @@ -41751,8 +41822,8 @@ /area/station/maintenance/starboard) "lCP" = ( /obj/machinery/button/transport/tram/directional/south{ - id = 2; - specific_transport_id = "moon_1" + specific_transport_id = "moon_1"; + id = 2 }, /obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -41888,10 +41959,10 @@ }, /obj/machinery/light/small/directional/west, /obj/machinery/button/door/directional/west{ - id = "Toilet3"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "Toilet3"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -41996,9 +42067,9 @@ /area/station/service/chapel) "lGB" = ( /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall6"; + name = "Pathing Navigation Beacon"; location = "hall5"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall6" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42275,8 +42346,8 @@ "lJx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/arrows/white{ - color = "#00AAFF"; - pixel_y = 15 + pixel_y = 15; + color = "#00AAFF" }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) @@ -42566,9 +42637,9 @@ /area/station/security/lockers) "lNr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ - chamber_id = "mix_sm_waste"; dir = 1; - on = 0 + on = 0; + chamber_id = "mix_sm_waste" }, /turf/open/floor/engine/vacuum, /area/station/engineering/supermatter/waste) @@ -42690,9 +42761,9 @@ /obj/effect/turf_decal/siding/dark, /obj/effect/turf_decal/trimline/yellow/warning, /obj/effect/turf_decal/board_letter/a{ - color = "#EFB341"; + dir = 1; alpha = 150; - dir = 1 + color = "#EFB341" }, /turf/open/floor/engine/hull/reinforced{ initial_gas_mix = "o2=22;n2=82;TEMP=293.15" @@ -42706,12 +42777,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/sign/directions/supply/directional/north{ - pixel_y = -24; - pixel_x = -32 + pixel_x = -32; + pixel_y = -24 }, /obj/structure/sign/directions/vault/directional/north{ - pixel_y = -32; - pixel_x = -32 + pixel_x = -32; + pixel_y = -32 }, /obj/structure/sign/directions/engineering/directional/north{ pixel_x = -32; @@ -42864,8 +42935,8 @@ /area/station/maintenance/evac_maintenance) "lRX" = ( /obj/machinery/door/poddoor/shutters{ - id = "qm_warehouse"; - name = "Warehouse Shutters" + name = "Warehouse Shutters"; + id = "qm_warehouse" }, /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron, @@ -42873,8 +42944,8 @@ "lRY" = ( /obj/effect/turf_decal/loading_area, /obj/machinery/door/poddoor/shutters/preopen{ - id = "hopqueue"; - name = "Queue Shutters" + name = "Queue Shutters"; + id = "hopqueue" }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, @@ -43134,21 +43205,21 @@ /obj/effect/turf_decal/stripes/line, /obj/machinery/light/moonstation/directional/north, /obj/machinery/button/door/directional/north{ - id = "rbmk2_shutters_south"; name = "Radiation Shutters Control"; + id = "rbmk2_shutters_south"; req_access = list("engineering") }, /obj/machinery/atmospherics/components/binary/valve/digital{ - dir = 4; - name = "Secondary Cooling" + name = "Secondary Cooling"; + dir = 4 }, /turf/open/floor/engine, /area/station/engineering/rbmk2) "lWC" = ( +/mob/living/basic/pet/dog/pug/mcgriff, /obj/item/radio/intercom/directional/south, /obj/structure/bed/dogbed/mcgriff, /obj/item/dog_bone, -/mob/living/basic/pet/dog/pug/mcgriff, /turf/open/floor/iron/dark/small, /area/station/security/warden) "lWF" = ( @@ -43284,8 +43355,8 @@ /area/station/terminal/maintenance/aft) "lXW" = ( /obj/machinery/atmospherics/components/binary/pump/on/cyan/visible{ - dir = 1; - name = "Air to External Ports" + name = "Air to External Ports"; + dir = 1 }, /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/structure/cable, @@ -43536,10 +43607,10 @@ /obj/structure/toilet, /obj/machinery/light/small/directional/north, /obj/machinery/button/door/directional/east{ - id = "captain_bathroom"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "captain_bathroom"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/captain/private) @@ -43589,8 +43660,8 @@ /area/station/maintenance/starboard) "mbI" = ( /obj/machinery/door/window/brigdoor/right/directional/west{ - req_access = list("medical"); - name = "Secure Medical Supplies" + name = "Secure Medical Supplies"; + req_access = list("medical") }, /obj/effect/turf_decal/stripes/red/line{ dir = 8 @@ -43607,7 +43678,7 @@ dir = 4; pixel_x = -32 }, -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "mbQ" = ( @@ -44019,8 +44090,8 @@ /obj/structure/reagent_dispensers/beerkeg{ name = "55 gallon drum of lube"; desc = "God is dead, and you killed them."; - reagent_id = /datum/reagent/lube; - icon_state = "water_fools" + icon_state = "water_fools"; + reagent_id = /datum/reagent/lube }, /turf/open/floor/plating, /area/station/common/night_club) @@ -44061,10 +44132,6 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/white, /area/station/science/cytology) -"mjw" = ( -/obj/structure/cable, -/turf/open/floor/glass/reinforced/scrape_below, -/area/station/service/library/artgallery) "mjz" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /obj/effect/decal/cleanable/dirt, @@ -44228,7 +44295,7 @@ "mlb" = ( /obj/machinery/computer/atmos_control/mix_tank{ dir = 1; - atmos_chambers = list("mix_security" = "Mix Chamber") + atmos_chambers = list(mix_security="Mix Chamber") }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark, @@ -44240,8 +44307,8 @@ /area/station/security/corrections_officer) "mlh" = ( /obj/machinery/disposal/delivery_chute{ - dir = 4; - name = "THE FUNHOUSE" + name = "THE FUNHOUSE"; + dir = 4 }, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -44261,8 +44328,8 @@ /area/station/command/cc_dock) "mlU" = ( /obj/machinery/door/window/brigdoor/left/directional/south{ - req_access = list("library"); - name = "Librarian's Desk" + name = "Librarian's Desk"; + req_access = list("library") }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -44623,8 +44690,8 @@ "msb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ dir = 1; - external_pressure_bound = 101.325; - pressure_checks = 1 + pressure_checks = 1; + external_pressure_bound = 101.325 }, /turf/open/floor/catwalk_floor{ initial_gas_mix = "n2=100;TEMP=80" @@ -44682,8 +44749,8 @@ /obj/item/paper/monitorkey, /obj/item/stamp/head/ce, /obj/item/spess_knife{ - pixel_y = 3; - pixel_x = -10 + pixel_x = -10; + pixel_y = 3 }, /turf/open/floor/glass/reinforced/plasma, /area/station/command/heads_quarters/ce) @@ -44848,6 +44915,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) "mvh" = ( @@ -44942,9 +45010,9 @@ /area/station/science/research) "mwF" = ( /obj/machinery/door/poddoor/shutters/preopen{ + name = "Detective's Office Shutters"; dir = 8; - id = "detective_shutters"; - name = "Detective's Office Shutters" + id = "detective_shutters" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -45106,8 +45174,8 @@ /area/station/security/prison) "myL" = ( /turf/closed/indestructible/riveted{ - desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; - name = "hyper-reinforced wall" + name = "hyper-reinforced wall"; + desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease" }, /area/station/science/ordnance/bomb) "myZ" = ( @@ -45128,9 +45196,9 @@ }, /obj/machinery/restaurant_portal/restaurant, /obj/structure/sign/plaques/kiddie{ - pixel_y = -32; name = "Nanotrasen Food Safety Inspection Certificate"; - desc = "Allegedly, a food and safety inspection certificate certifying that the food served here is okay." + desc = "Allegedly, a food and safety inspection certificate certifying that the food served here is okay."; + pixel_y = -32 }, /obj/effect/turf_decal/siding/white{ dir = 8 @@ -45240,9 +45308,9 @@ /obj/effect/landmark/start/ai/secondary, /obj/item/toy/talking/ai, /obj/item/radio/intercom/directional/west{ - freerange = 1; name = "Common Channel"; - pixel_y = -8 + pixel_y = -8; + freerange = 1 }, /obj/item/radio/intercom/directional/south{ name = "Custom Channel" @@ -45251,10 +45319,10 @@ dir = 4 }, /obj/item/radio/intercom/directional/north{ - frequency = 1447; name = "Private Channel"; - freerange = 1; - pixel_y = 20 + pixel_y = 20; + frequency = 1447; + freerange = 1 }, /turf/open/floor/circuit/green/telecomms, /area/station/ai_monitored/turret_protected/ai) @@ -45388,8 +45456,8 @@ /area/station/commons/lounge) "mDa" = ( /obj/machinery/door/poddoor{ - id = "atmosmixblast"; - name = "Atmospherics Mix Vent" + name = "Atmospherics Mix Vent"; + id = "atmosmixblast" }, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) @@ -45933,8 +46001,8 @@ /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ - id = "commandblast"; - name = "Command Lockdown Blast Door" + name = "Command Lockdown Blast Door"; + id = "commandblast" }, /turf/open/floor/iron/dark, /area/station/command/bridge) @@ -46014,8 +46082,8 @@ "mMG" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "chem_shutters"; - name = "Privacy Shutters" + name = "Privacy Shutters"; + id = "chem_shutters" }, /turf/open/floor/plating, /area/station/medical/chemistry) @@ -46023,7 +46091,7 @@ /turf/closed/wall/r_wall/rust, /area/station/ai_monitored/turret_protected/aisat/service) "mMN" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 1 }, @@ -46168,9 +46236,9 @@ "mPB" = ( /obj/effect/landmark/start/ai/secondary, /obj/item/radio/intercom/directional/east{ - freerange = 1; + name = "Common Channel"; listening = 0; - name = "Common Channel" + freerange = 1 }, /obj/item/radio/intercom/directional/south{ name = "Custom Channel" @@ -46179,10 +46247,10 @@ dir = 8 }, /obj/item/radio/intercom/directional/north{ - frequency = 1447; name = "Private Channel"; - freerange = 1; - pixel_y = 20 + pixel_y = 20; + frequency = 1447; + freerange = 1 }, /turf/open/floor/circuit/green/telecomms, /area/station/ai_monitored/turret_protected/ai) @@ -46224,8 +46292,8 @@ "mPV" = ( /obj/structure/table/wood, /obj/item/clothing/under/misc/burial{ - pixel_y = 7; - pixel_x = -5 + pixel_x = -5; + pixel_y = 7 }, /obj/item/clothing/under/misc/burial{ pixel_y = 1 @@ -46517,8 +46585,8 @@ /area/station/medical/chemistry) "mSV" = ( /obj/machinery/door/poddoor/preopen{ - id = "ntrep_privacy_shutters_external"; - name = "External Privacy Shutters" + name = "External Privacy Shutters"; + id = "ntrep_privacy_shutters_external" }, /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -46596,8 +46664,8 @@ }, /obj/effect/turf_decal/board_number/two{ dir = 8; - color = "#EFB341"; - alpha = 150 + alpha = 150; + color = "#EFB341" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -46627,8 +46695,8 @@ /turf/open/floor/iron/grimy, /area/station/service/bar/backroom) "mUk" = ( -/obj/effect/turf_decal/tile/blue/fourcorners, /mob/living/basic/bot/medbot/stationary, +/obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) @@ -46845,6 +46913,10 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"mXo" = ( +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "mXp" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2, /turf/open/floor/catwalk_floor/iron_dark, @@ -46902,9 +46974,9 @@ "mYt" = ( /obj/structure/cable, /obj/machinery/door/airlock/wood{ - id_tag = "dorms4"; name = "Dorms 4"; - desc = "The legendary Dorms 4." + desc = "The legendary Dorms 4."; + id_tag = "dorms4" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46967,8 +47039,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/door/poddoor/preopen{ - id = "meetingblast"; - name = "Meeting Room Blast Door" + name = "Meeting Room Blast Door"; + id = "meetingblast" }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 8 @@ -47109,9 +47181,9 @@ /area/station/security/execution/education) "ncb" = ( /obj/machinery/door/poddoor/shutters{ + name = "Mech Bay Shutters"; dir = 1; - id = "mechbay2"; - name = "Mech Bay Shutters" + id = "mechbay2" }, /obj/machinery/door/firedoor, /obj/effect/landmark/navigate_destination/autoname, @@ -47280,9 +47352,9 @@ /obj/effect/turf_decal/siding/dark, /obj/effect/turf_decal/trimline/yellow/warning, /obj/effect/turf_decal/board_letter/b{ - color = "#EFB341"; + dir = 1; alpha = 150; - dir = 1 + color = "#EFB341" }, /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ dir = 1 @@ -47300,6 +47372,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /obj/effect/spawner/random/maintenance, +/obj/structure/cable, /turf/open/floor/plating/foam, /area/station/maintenance/evac_maintenance) "ney" = ( @@ -47367,7 +47440,7 @@ }, /obj/machinery/computer/atmos_control/plasma_tank{ dir = 8; - atmos_chambers = list("security_plasma" = "Educational Plasma Supply") + atmos_chambers = list(security_plasma="Educational Plasma Supply") }, /turf/open/floor/iron/dark, /area/station/security/execution/education) @@ -47611,6 +47684,12 @@ /obj/effect/turf_decal/tile/dark/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos) +"njN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible/layer1, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "njS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47685,8 +47764,8 @@ /area/station/command/meeting_room) "nkI" = ( /obj/machinery/button/door/directional/west{ - id = "engsm"; name = "Radiation Shutters Control"; + id = "engsm"; req_access = list("engineering") }, /obj/effect/turf_decal/bot{ @@ -47921,8 +48000,8 @@ dir = 4 }, /obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 1; - name = "N2 to Pure" + name = "N2 to Pure"; + dir = 1 }, /obj/effect/turf_decal/tile/red/real_red/fourcorners, /turf/open/floor/iron, @@ -47938,9 +48017,9 @@ "noz" = ( /mob/living/basic/bot/dedbot, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=donknw"; + name = "Donk Navigation Beacon"; location = "donksw"; - name = "Donk Navigation Beacon" + codes_txt = "patrol;next_patrol=donknw" }, /turf/open/floor/carpet/donk, /area/station/maintenance/thruster_room) @@ -48245,8 +48324,8 @@ }, /obj/machinery/modular_computer/preset/cargochat/science, /obj/machinery/button/door/directional/north{ - id = "research_shutters"; name = "Desk Shutters Control"; + id = "research_shutters"; req_access = list("research") }, /turf/open/floor/iron/white, @@ -48465,8 +48544,8 @@ pixel_x = -32 }, /obj/structure/sign/directions/engineering/directional/south{ - pixel_y = -40; - pixel_x = -32 + pixel_x = -32; + pixel_y = -40 }, /turf/open/floor/wood/tile, /area/station/hallway/primary/central/fore) @@ -49261,9 +49340,9 @@ /obj/machinery/computer/security, /obj/structure/cable, /obj/machinery/button/door/directional/west{ - id = "sec_check_shutters"; name = "Security Checkpoint Shutters"; pixel_y = -10; + id = "sec_check_shutters"; req_access = list("brig_entrance") }, /obj/machinery/light_switch/directional/west, @@ -49416,9 +49495,9 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/effect/spawner/random/structure/crate_loot, /obj/machinery/button/door/directional/west{ - id = "qm_warehouse_left"; name = "Warehouse Shutters Control"; pixel_y = -8; + id = "qm_warehouse_left"; req_access = list("shipping") }, /turf/open/floor/iron, @@ -49451,8 +49530,8 @@ /area/station/cargo/blacksmith) "nKY" = ( /obj/machinery/door/airlock{ - id_tag = "Toilet4"; - name = "Unit 4" + name = "Unit 4"; + id_tag = "Toilet4" }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -49468,8 +49547,8 @@ "nLj" = ( /obj/structure/wall_torch/spawns_lit/directional/north, /obj/item/skub{ - color = "#882222"; - name = "waiting skub" + name = "waiting skub"; + color = "#882222" }, /turf/open/misc/moonstation_rock, /area/moonstation/underground) @@ -49656,8 +49735,8 @@ "nNB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "brigwindows"; - name = "Brig Lockdown Blast Door" + name = "Brig Lockdown Blast Door"; + id = "brigwindows" }, /obj/structure/cable, /turf/open/floor/plating, @@ -50025,8 +50104,8 @@ /obj/effect/spawner/random/bureaucracy/briefcase, /obj/effect/turf_decal/tile/brown/fourcorners, /obj/machinery/door/window/left/directional/south{ - req_access = list("blacksmith"); - name = "Blacksmith's Desk" + name = "Blacksmith's Desk"; + req_access = list("blacksmith") }, /obj/machinery/door/firedoor, /turf/open/floor/iron, @@ -50092,9 +50171,9 @@ dir = 4 }, /obj/machinery/button/door/directional/east{ - id = "robotics_science_privacy"; name = "Privacy Shutters Control"; pixel_y = -8; + id = "robotics_science_privacy"; req_access = list("robotics") }, /obj/machinery/vending/wardrobe/robo_wardrobe, @@ -50104,8 +50183,8 @@ /area/station/science/robotics/lab) "nUk" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Core shutters"; - name = "AI Core Shutters" + name = "AI Core Shutters"; + id = "AI Core shutters" }, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, @@ -50237,8 +50316,8 @@ /area/station/science/lab) "nWY" = ( /obj/machinery/door/poddoor{ - id = "cargoload"; - name = "Supply Dock Loading Door" + name = "Supply Dock Loading Door"; + id = "cargoload" }, /obj/machinery/conveyor{ dir = 4; @@ -50256,8 +50335,8 @@ /area/station/engineering/supermatter/room) "nXm" = ( /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 1 + dir = 1; + id = "cargodisposals" }, /obj/structure/plasticflaps, /turf/open/floor/plating, @@ -50275,9 +50354,9 @@ /obj/machinery/door/airlock/hatch{ name = "Public Mining Elevator"; req_access = list("tcomms"); + autoclose = 0; elevator_mode = 1; - transport_linked_id = "tram_public_mining_lift"; - autoclose = 0 + transport_linked_id = "tram_public_mining_lift" }, /turf/open/floor/plating/rust/moonstation, /area/station/commons/public_mining) @@ -50728,6 +50807,14 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/engineering/hallway) +"ocG" = ( +/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/structure/sign/poster/random/directional/east, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "ocI" = ( /obj/effect/spawner/random/decoration/glowstick, /obj/structure/cable, @@ -50892,9 +50979,9 @@ "oeL" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Desk Shutters"; dir = 1; - id = "robotics_shutters"; - name = "Desk Shutters" + id = "robotics_shutters" }, /turf/open/floor/plating, /area/station/science/robotics/mechbay) @@ -50927,8 +51014,8 @@ dir = 1 }, /obj/structure/showcase/machinery/cloning_pod{ - desc = "An old prototype cloning pod, permanently decommissioned following the incident."; - name = "decommissioned cloner" + name = "decommissioned cloner"; + desc = "An old prototype cloning pod, permanently decommissioned following the incident." }, /obj/machinery/light/small/red/directional/south, /turf/open/floor/plating, @@ -51093,11 +51180,11 @@ "ogT" = ( /obj/structure/cable, /obj/machinery/button/door/directional/north{ + name = "Door Bolt Control"; id = "ai_sat_maint_left"; - normaldoorcontrol = 1; + req_access = list("minisat"); specialfunctions = 4; - name = "Door Bolt Control"; - req_access = list("minisat") + normaldoorcontrol = 1 }, /obj/machinery/firealarm/directional/south, /turf/open/floor/catwalk_floor/iron_dark, @@ -51296,8 +51383,8 @@ /area/station/hallway/secondary/exit/departure_lounge) "ojO" = ( /obj/structure/chair{ - dir = 1; - name = "Defense" + name = "Defense"; + dir = 1 }, /turf/open/floor/carpet/blue, /area/station/security/courtroom) @@ -51317,6 +51404,7 @@ /obj/effect/mapping_helpers/airlock/autoname, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/evac_maintenance) "okb" = ( @@ -51647,8 +51735,8 @@ /area/station/medical/morgue/office) "opr" = ( /obj/machinery/conveyor{ - id = "cargodisposals"; - dir = 1 + dir = 1; + id = "cargodisposals" }, /obj/structure/disposalpipe/segment, /obj/structure/drain, @@ -51657,9 +51745,9 @@ /area/station/cargo/sorting) "opu" = ( /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=4"; + name = "Genetics"; location = "Genetics"; - name = "Genetics" + codes_txt = "delivery;dir=4" }, /obj/structure/plasticflaps/opaque, /obj/structure/disposalpipe/segment{ @@ -51706,9 +51794,9 @@ "opP" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; + name = "Cargo"; location = "Cargo"; - name = "Cargo" + codes_txt = "delivery;dir=1" }, /turf/open/floor/plating, /area/station/maintenance/port/aft) @@ -51771,10 +51859,10 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "oqw" = ( /obj/machinery/button/door/directional/north{ + name = "Front Door Bolt Control"; id = "vaccant_room_frontdoor"; - normaldoorcontrol = 1; specialfunctions = 4; - name = "Front Door Bolt Control" + normaldoorcontrol = 1 }, /turf/open/floor/plating, /area/station/commons/vacant_room) @@ -51790,16 +51878,16 @@ dir = 8 }, /obj/machinery/button/door/directional/west{ - id = "cargoload"; name = "Cargo Loading Door Control"; - req_access = list("cargo"); - pixel_y = 8 + pixel_y = 8; + id = "cargoload"; + req_access = list("cargo") }, /obj/machinery/button/door/directional/west{ - id = "cargounload"; name = "Cargo Unloading Door Control"; - req_access = list("cargo"); - pixel_y = -8 + pixel_y = -8; + id = "cargounload"; + req_access = list("cargo") }, /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, @@ -52127,9 +52215,9 @@ /obj/machinery/light/moonstation/directional/west, /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/button/door/directional/west{ - id = "atmosmixblast"; name = "Atmospherics Mix Vent Control"; pixel_y = 6; + id = "atmosmixblast"; req_access = list("atmospherics") }, /turf/open/floor/iron, @@ -52340,8 +52428,8 @@ /area/station/maintenance/port) "ozp" = ( /obj/machinery/door/airlock{ - id_tag = "AuxToilet3"; - name = "Unit 3" + name = "Unit 3"; + id_tag = "AuxToilet3" }, /obj/machinery/door/firedoor, /turf/open/floor/iron/showroomfloor, @@ -52444,12 +52532,12 @@ dir = 8 }, /obj/machinery/recharger{ - pixel_y = 4; - pixel_x = 6 + pixel_x = 6; + pixel_y = 4 }, /obj/machinery/recharger{ - pixel_y = 4; - pixel_x = -6 + pixel_x = -6; + pixel_y = 4 }, /obj/structure/reagent_dispensers/wall/peppertank/directional/west, /obj/machinery/power/apc/auto_name/directional/south, @@ -52459,8 +52547,8 @@ /area/station/security/office) "oCn" = ( /obj/machinery/button/door/directional/north{ - id = "vaccant_room_shutters"; - name = "Shutters Control" + name = "Shutters Control"; + id = "vaccant_room_shutters" }, /obj/effect/spawner/random/burgerstation/loot/with_maintenance_loot, /turf/open/floor/plating, @@ -52652,6 +52740,7 @@ /obj/structure/sign/warning/radiation/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible/layer1, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/engine) "oFf" = ( @@ -52764,9 +52853,9 @@ }, /obj/structure/desk_bell, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Robotics Shutters"; dir = 4; - id = "robotics_science_privacy"; - name = "Robotics Shutters" + id = "robotics_science_privacy" }, /obj/machinery/door/firedoor, /obj/item/hand_labeler, @@ -52817,9 +52906,9 @@ /obj/machinery/door/airlock/hatch{ name = "Public Mining Elevator"; req_access = list("tcomms"); + autoclose = 0; elevator_mode = 1; - transport_linked_id = "tram_public_mining_lift"; - autoclose = 0 + transport_linked_id = "tram_public_mining_lift" }, /turf/open/floor/plating, /area/station/commons/public_mining) @@ -53246,6 +53335,7 @@ /obj/effect/spawner/random/trash/graffiti, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) "oNi" = ( @@ -53272,9 +53362,9 @@ /area/station/science/lab) "oNE" = ( /obj/structure/reagent_dispensers/plumbed{ - dir = 1; name = "stationary lube tank"; desc = "A stationary, plumbed, lube tank. Piped directly into the clown's room."; + dir = 1; reagent_id = /datum/reagent/lube }, /turf/open/floor/plating, @@ -53654,12 +53744,12 @@ pixel_y = 40 }, /obj/structure/sign/directions/arrival/directional/south{ - pixel_y = 32; - pixel_x = 32 + pixel_x = 32; + pixel_y = 32 }, /obj/structure/sign/directions/evac/directional/south{ - pixel_y = 24; - pixel_x = 32 + pixel_x = 32; + pixel_y = 24 }, /turf/open/floor/iron/checker, /area/station/hallway/primary/central/fore) @@ -53667,8 +53757,8 @@ /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ - id = "brigprison"; - name = "Prison Lockdown Blast Door" + name = "Prison Lockdown Blast Door"; + id = "brigprison" }, /turf/open/floor/plating, /area/station/security/prison/upper) @@ -53679,8 +53769,8 @@ /area/station/common/night_club) "oTh" = ( /obj/machinery/door/airlock/tram{ - transport_linked_id = "moon_1"; - name = "Moon Rover" + name = "Moon Rover"; + transport_linked_id = "moon_1" }, /obj/structure/transport/linear/tram, /obj/structure/thermoplastic/light, @@ -53688,9 +53778,9 @@ /area/station/terminal/lobby) "oTu" = ( /obj/machinery/door/airlock/security{ - aiControlDisabled = 1; + name = "Prisoner Education Chamber"; id_tag = "prisonereducation"; - name = "Prisoner Education Chamber" + aiControlDisabled = 1 }, /obj/effect/mapping_helpers/airlock/access/all/security/armory, /obj/effect/mapping_helpers/airlock/cutaiwire, @@ -53717,7 +53807,7 @@ "oTD" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "oTE" = ( /obj/machinery/xenoarch/researcher, @@ -53830,8 +53920,8 @@ "oVp" = ( /obj/machinery/airalarm/directional/south, /obj/item/toy/katana{ - desc = "As seen in your favourite Japanese cartoon."; - name = "anime katana" + name = "anime katana"; + desc = "As seen in your favourite Japanese cartoon." }, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -53848,9 +53938,9 @@ }, /obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall16"; + name = "Pathing Navigation Beacon"; location = "hall15"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall16" }, /turf/open/floor/catwalk_floor/iron, /area/station/hallway/primary/aft) @@ -53925,9 +54015,9 @@ "oWx" = ( /obj/structure/table, /obj/item/radio{ + name = "old radio"; desc = "An old handheld radio. You could use it, if you really wanted to."; icon_state = "radio"; - name = "old radio"; pixel_y = 15 }, /obj/item/plate, @@ -54022,8 +54112,8 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ - id = "commandblast"; - name = "Command Lockdown Blast Door" + name = "Command Lockdown Blast Door"; + id = "commandblast" }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54193,8 +54283,8 @@ /obj/machinery/suit_storage_unit, /obj/effect/turf_decal/delivery, /obj/machinery/button/door/directional/north{ - id = "evashutters2"; name = "E.V.A. Shutters"; + id = "evashutters2"; req_access = list("command") }, /obj/effect/decal/cleanable/dirt/dust, @@ -54312,8 +54402,8 @@ dir = 1 }, /obj/effect/turf_decal/board_letter/a{ - color = "#EFB341"; - alpha = 150 + alpha = 150; + color = "#EFB341" }, /obj/item/paper/crumpled/rbmk2, /turf/open/floor/engine/hull/reinforced{ @@ -54507,9 +54597,9 @@ /area/station/science/ordnance) "peA" = ( /obj/machinery/button/door/directional/west{ - id = "ntrep_privacy_shutters"; name = "Privacy Shutters Control"; - pixel_y = -11 + pixel_y = -11; + id = "ntrep_privacy_shutters" }, /obj/machinery/light_switch/directional/west, /obj/machinery/camera/autoname/directional/west, @@ -54545,9 +54635,9 @@ /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/purple/fourcorners, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Desk Shutters"; dir = 1; - id = "genetics_shutters"; - name = "Desk Shutters" + id = "genetics_shutters" }, /obj/machinery/door/window/right/directional/south{ name = "Genetics Desk"; @@ -54924,9 +55014,9 @@ "pkT" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Privacy Shutters"; dir = 1; - id = "qm_privacy_shutters"; - name = "Privacy Shutters" + id = "qm_privacy_shutters" }, /turf/open/floor/plating, /area/station/command/heads_quarters/qm) @@ -55064,8 +55154,8 @@ dir = 4 }, /obj/machinery/button/door/directional/east{ - id = "engineering_desk_shutters"; name = "Engineering Desk Shutters Control"; + id = "engineering_desk_shutters"; req_access = list("engineering") }, /turf/open/floor/iron, @@ -55101,9 +55191,9 @@ /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/door{ - id = "xenobio6"; name = "Xenobio Pen 6 Blast Doors"; pixel_y = 1; + id = "xenobio6"; req_access = list("xenobiology") }, /obj/effect/turf_decal/siding/dark{ @@ -55508,8 +55598,8 @@ /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ - id = "brigprison"; - name = "Prison Lockdown Blast Door" + name = "Prison Lockdown Blast Door"; + id = "brigprison" }, /turf/open/floor/plating, /area/station/security/prison/workout) @@ -55598,8 +55688,8 @@ /area/station/science/xenobiology) "puH" = ( /obj/machinery/door/poddoor/shutters{ - id = "qm_warehouse"; - name = "Warehouse Shutters" + name = "Warehouse Shutters"; + id = "qm_warehouse" }, /obj/effect/turf_decal/tile/brown/fourcorners, /obj/structure/disposalpipe/segment, @@ -55783,8 +55873,8 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) "pwX" = ( -/obj/structure/window/reinforced/spawner/directional/east, /mob/living/carbon/human/species/monkey, +/obj/structure/window/reinforced/spawner/directional/east, /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, /area/station/science/genetics) @@ -55796,8 +55886,8 @@ dir = 4 }, /obj/structure/disposaloutlet{ - dir = 8; - name = "Crate Deliveries" + name = "Crate Deliveries"; + dir = 8 }, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, @@ -55957,9 +56047,9 @@ "pzA" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Kitchen Counter Shutters"; dir = 8; - id = "cafe_counter"; - name = "Kitchen Counter Shutters" + id = "cafe_counter" }, /obj/effect/turf_decal/tile/dark_red/opposingcorners{ dir = 8 @@ -56205,8 +56295,8 @@ pixel_x = -32 }, /obj/structure/sign/directions/engineering/directional/south{ - pixel_y = -40; - pixel_x = -32 + pixel_x = -32; + pixel_y = -40 }, /turf/open/floor/iron/checker, /area/station/hallway/primary/central/fore) @@ -56314,15 +56404,15 @@ /obj/effect/turf_decal/siding/dark, /obj/item/banner/command/mundane, /obj/machinery/button/door/directional/north{ - id = "teleportershutters"; name = "Teleporter Shutters Control"; pixel_x = 8; + id = "teleportershutters"; req_access = list("command") }, /obj/machinery/button/door/directional/north{ - id = "gateshutter"; name = "Gateway Shutters Control"; pixel_x = -8; + id = "gateshutter"; req_access = list("command") }, /turf/open/floor/iron/dark, @@ -56381,8 +56471,8 @@ dir = 4 }, /obj/machinery/button/door/directional/north{ - id = "robotics_shutters"; name = "Desk Shutters Control"; + id = "robotics_shutters"; req_access = list("robotics") }, /obj/machinery/modular_computer/preset/civilian{ @@ -56411,9 +56501,9 @@ /area/station/security/brig) "pGl" = ( /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall7"; + name = "Pathing Navigation Beacon"; location = "hall6"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall7" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56648,9 +56738,9 @@ "pJW" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=1"; + name = "Medical"; location = "Medical"; - name = "Medical" + codes_txt = "delivery;dir=1" }, /turf/open/floor/plating, /area/station/maintenance/central) @@ -56715,9 +56805,9 @@ /obj/effect/turf_decal/tile/dark_green/half/contrasted, /obj/structure/disposalpipe/segment, /obj/machinery/conveyor_switch/oneway{ + name = "disposal conveyor"; dir = 8; - id = "garbage_viro"; - name = "disposal conveyor" + id = "garbage_viro" }, /turf/open/floor/iron/white, /area/station/medical/virology) @@ -56744,9 +56834,9 @@ /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/door{ - id = "xenobio4"; name = "Xenobio Pen 4 Blast Doors"; pixel_y = 4; + id = "xenobio4"; req_access = list("xenobiology"); sync_doors = 4 }, @@ -56965,9 +57055,9 @@ /area/station/hallway/primary/central/fore) "pOj" = ( /obj/structure/chair/sofa/corp/left{ + name = "couch"; desc = "Looks like someone threw it out. Covered in donut crumbs."; - dir = 4; - name = "couch" + dir = 4 }, /turf/open/floor/iron/dark, /area/station/common/night_club) @@ -57084,10 +57174,10 @@ /area/station/command/heads_quarters/rd) "pPY" = ( /obj/machinery/button/door/directional/north{ + name = "Dorms Bolt Control"; id = "dorms1"; - normaldoorcontrol = 1; specialfunctions = 4; - name = "Dorms Bolt Control" + normaldoorcontrol = 1 }, /obj/item/kirbyplants/random, /turf/open/floor/carpet/blue, @@ -57288,8 +57378,8 @@ "pTv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Waste to Filter" + name = "Waste to Filter"; + dir = 4 }, /turf/open/floor/iron, /area/station/engineering/atmos/control_center) @@ -57317,8 +57407,8 @@ /area/station/maintenance/port/aft) "pTM" = ( /obj/machinery/door/poddoor/preopen{ - id = "rdoffice"; - name = "Research Director's Shutters" + name = "Research Director's Shutters"; + id = "rdoffice" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -57344,7 +57434,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "pUi" = ( /obj/structure/fluff/tram_rail/electric, @@ -57777,8 +57867,8 @@ /obj/structure/table/wood, /obj/machinery/fax/auto_name, /obj/machinery/button/door/directional/north{ - id = "qm_privacy_shutters"; name = "Privacy Shutters Control"; + id = "qm_privacy_shutters"; req_access = list("qm") }, /turf/open/floor/mineral/gold, @@ -57873,8 +57963,8 @@ "qbk" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Xenobiology Test Chamber Pump" + name = "Xenobiology Test Chamber Pump"; + dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_dark, @@ -58029,15 +58119,15 @@ /turf/open/floor/iron/edge, /area/station/terminal/lobby) "qcQ" = ( +/mob/living/basic/ant{ + name = "Gravity" + }, /obj/effect/turf_decal/siding/wood{ dir = 8 }, /obj/structure/bed/dogbed{ name = "Gravity's Bed" }, -/mob/living/basic/ant{ - name = "Gravity" - }, /obj/effect/mapping_helpers/mob_buckler, /turf/open/floor/wood, /area/station/engineering/break_room) @@ -58058,17 +58148,17 @@ /area/station/maintenance/department/crew_quarters/bar) "qdj" = ( /obj/machinery/button/door/directional/north{ - id = "visitation"; name = "Visitation Shutters"; + id = "visitation"; req_access = list("brig") }, /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/button/flasher{ - id = "visitation_flash"; - pixel_y = 38; name = "Visitation Flasher"; + pixel_y = 38; + id = "visitation_flash"; req_access = list("security") }, /turf/open/floor/iron/dark, @@ -58372,9 +58462,9 @@ dir = 4 }, /obj/machinery/door/poddoor/shutters/preopen{ - id = "pharm_desk_shutters"; name = "Desk Shutters"; - dir = 8 + dir = 8; + id = "pharm_desk_shutters" }, /obj/structure/sign/warning/no_smoking/directional/north, /obj/machinery/door/firedoor, @@ -58725,8 +58815,8 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ - id = "commandblast"; - name = "Command Lockdown Blast Door" + name = "Command Lockdown Blast Door"; + id = "commandblast" }, /obj/structure/cable, /obj/effect/mapping_helpers/airlock/unres{ @@ -58886,8 +58976,8 @@ dir = 4 }, /obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "N2 to Airmix" + name = "N2 to Airmix"; + dir = 1 }, /obj/effect/turf_decal/tile/red/real_red/fourcorners, /turf/open/floor/iron, @@ -59213,14 +59303,9 @@ /turf/open/floor/plating, /area/station/maintenance/abandon_cafeteria) "quK" = ( -/obj/machinery/door/airlock/maintenance/glass, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible/layer1, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, +/obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/engine) "quP" = ( @@ -59229,9 +59314,9 @@ "qvc" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Privacy Shutters"; dir = 8; - id = "chem_shutters"; - name = "Privacy Shutters" + id = "chem_shutters" }, /turf/open/floor/plating, /area/station/medical/pharmacy) @@ -59299,9 +59384,9 @@ dir = 5 }, /obj/machinery/conveyor_switch/oneway{ + name = "disposal conveyor"; dir = 8; - id = "garbage"; - name = "disposal conveyor" + id = "garbage" }, /turf/open/floor/plating, /area/station/maintenance/disposal) @@ -59368,8 +59453,8 @@ /obj/machinery/airalarm/directional/west, /obj/machinery/light/dim/directional/west, /obj/machinery/atmospherics/components/binary/pump{ - dir = 1; name = "justice gas pump"; + dir = 1; target_pressure = 150 }, /obj/effect/turf_decal/stripes/line{ @@ -59487,8 +59572,8 @@ /obj/effect/mapping_helpers/airlock/locked, /obj/structure/cable, /obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Chamber entrance shutters"; - name = "AI Chamber Entrance Shutters" + name = "AI Chamber Entrance Shutters"; + id = "AI Chamber entrance shutters" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59566,8 +59651,8 @@ /obj/effect/turf_decal/tile/red/fourcorners, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ - id = "brigprison"; - name = "Prison Lockdown Blast Door" + name = "Prison Lockdown Blast Door"; + id = "brigprison" }, /turf/open/floor/iron/dark, /area/station/security/corrections_officer) @@ -59846,8 +59931,8 @@ dir = 4 }, /obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Gas to Mix" + name = "Gas to Mix"; + dir = 4 }, /obj/structure/cable, /turf/open/floor/engine, @@ -60069,9 +60154,9 @@ dir = 8 }, /obj/machinery/status_display/door_timer{ - id = "Cell 3"; name = "Cell 3"; - pixel_x = -32 + pixel_x = -32; + id = "Cell 3" }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -60120,6 +60205,7 @@ /turf/open/floor/stone, /area/station/common/pool) "qGQ" = ( +/mob/living/basic/pet/cat/jerry, /obj/effect/turf_decal/tile/red/half/contrasted, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -60127,7 +60213,6 @@ /obj/structure/bed/dogbed{ name = "Jerry's bed" }, -/mob/living/basic/pet/cat/jerry, /obj/structure/reagent_dispensers/wall/peppertank/directional/south{ reagent_id = /datum/reagent/consumable/blackpepper }, @@ -60316,11 +60401,11 @@ "qJR" = ( /obj/structure/cable, /obj/machinery/button/door/directional/north{ + name = "Door Bolt Control"; id = "ai_sat_maint_left"; - normaldoorcontrol = 1; + req_access = list("minisat"); specialfunctions = 4; - name = "Door Bolt Control"; - req_access = list("minisat") + normaldoorcontrol = 1 }, /obj/machinery/camera/autoname/minisat/directional/west, /turf/open/floor/catwalk_floor/iron_dark, @@ -60398,8 +60483,8 @@ /area/station/medical/chemistry) "qKQ" = ( /obj/structure/sink/kitchen/directional/south{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "old sink" + name = "old sink"; + desc = "A sink used for washing one's hands and face. It looks rusty and home-made" }, /obj/effect/turf_decal/tile/red/half/contrasted, /obj/effect/mapping_helpers/broken_floor, @@ -60480,8 +60565,8 @@ name = "Pure to Supermatter" }, /obj/machinery/atmospherics/components/binary/pump/off/general/visible/layer5{ - dir = 1; - name = "Engine Waste to Pure" + name = "Engine Waste to Pure"; + dir = 1 }, /turf/open/floor/iron, /area/station/engineering/atmos) @@ -60863,12 +60948,11 @@ /turf/open/floor/iron/dark, /area/station/terminal/lobby) "qSc" = ( -/obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, -/obj/machinery/door/firedoor, +/obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/engine) "qSp" = ( @@ -61042,12 +61126,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/crew_quarters/bar) -"qUQ" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "qUY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61605,11 +61683,11 @@ "rdi" = ( /obj/structure/table/reinforced, /obj/machinery/button/door/directional/east{ - id = "medbay_access"; name = "Medbay Access Door Control"; - normaldoorcontrol = 1; pixel_y = -8; - req_access = list("medical") + id = "medbay_access"; + req_access = list("medical"); + normaldoorcontrol = 1 }, /obj/effect/spawner/random/medical/injector, /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ @@ -61691,9 +61769,9 @@ /obj/effect/turf_decal/siding/dark, /obj/effect/turf_decal/trimline/yellow/warning, /obj/effect/turf_decal/board_letter/c{ - color = "#EFB341"; + dir = 1; alpha = 150; - dir = 1 + color = "#EFB341" }, /turf/open/floor/engine/hull/reinforced{ initial_gas_mix = "o2=22;n2=82;TEMP=293.15" @@ -61710,8 +61788,8 @@ pixel_y = 40 }, /obj/structure/sign/directions/evac/directional/south{ - pixel_y = 24; - pixel_x = 32 + pixel_x = 32; + pixel_y = 24 }, /obj/machinery/firealarm/directional/north, /obj/structure/sign/directions/arrival/directional/north{ @@ -61810,8 +61888,8 @@ dir = 8 }, /obj/structure/sign/directions/engineering/directional/south{ - pixel_y = -40; - pixel_x = -32 + pixel_x = -32; + pixel_y = -40 }, /obj/structure/sign/directions/vault/directional/south{ pixel_x = -32 @@ -62024,8 +62102,8 @@ dir = 8 }, /obj/machinery/elevator_control_panel/directional/west{ - preset_destination_names = list("2" = "Lavaland", "3" = "Rock Caves", "4" = "Surface"); - linked_elevator_id = "tram_mining_lift" + linked_elevator_id = "tram_mining_lift"; + preset_destination_names = list("2"="Lavaland", "3"="Rock Caves", "4"="Surface") }, /turf/open/floor/plating/elevatorshaft, /area/station/cargo/miningelevators) @@ -62289,9 +62367,9 @@ dir = 1 }, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall3"; + name = "Pathing Navigation Beacon"; location = "hall2"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall3" }, /turf/open/floor/iron/large, /area/station/security/brig/entrance) @@ -62744,8 +62822,8 @@ /area/station/service/chapel) "rsT" = ( /obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" + name = "Brig"; + id_tag = "outerbrig" }, /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /obj/machinery/door/firedoor, @@ -62889,9 +62967,9 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; name = "Supermatter Chamber"; - id_tag = "sm_east" + id_tag = "sm_east"; + heat_proof = 1 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, @@ -63321,8 +63399,8 @@ /obj/structure/table/wood/fancy/royalblack, /obj/structure/window/reinforced/spawner/directional/south, /obj/item/shard{ - color = "#FF0000"; - desc = "A nasty looking shard of glass. It is spraypainted red." + desc = "A nasty looking shard of glass. It is spraypainted red."; + color = "#FF0000" }, /turf/open/floor/plating, /area/station/maintenance/cult_chapel) @@ -63345,8 +63423,8 @@ /area/station/engineering/atmos/control_center) "rBD" = ( /obj/structure/curtain/cloth/fancy/mechanical/start_closed{ - id = "nightclub_curtains"; - name = "Show Curtains" + name = "Show Curtains"; + id = "nightclub_curtains" }, /turf/open/floor/glass/reinforced/plasma, /area/station/common/night_club) @@ -63376,8 +63454,8 @@ /area/station/engineering/supermatter/room) "rBN" = ( /obj/machinery/conveyor{ - id = "mining"; - dir = 4 + dir = 4; + id = "mining" }, /obj/structure/railing, /turf/open/floor/pod, @@ -63543,10 +63621,10 @@ /area/moonstation/surface) "rEd" = ( /obj/machinery/button/door/directional/south{ - id = "dorms3"; name = "Dorms Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "dorms3"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/item/kirbyplants/random, /turf/open/floor/carpet/purple, @@ -63593,8 +63671,8 @@ /area/station/command/gateway) "rFk" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "hopqueue"; - name = "Queue Shutters" + name = "Queue Shutters"; + id = "hopqueue" }, /obj/machinery/door/firedoor, /obj/machinery/ticket_machine/directional/east, @@ -63745,9 +63823,9 @@ "rIo" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "ce_officer_shutters"; name = "Privacy Shutters"; - dir = 4 + dir = 4; + id = "ce_officer_shutters" }, /turf/open/floor/plating, /area/station/command/heads_quarters/ce) @@ -63946,13 +64024,18 @@ "rKu" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "brigprison"; - name = "Prison Lockdown Blast Door" + name = "Prison Lockdown Blast Door"; + id = "brigprison" }, /obj/structure/cable, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/security/prison) +"rKx" = ( +/obj/effect/spawner/random/burgerstation/power, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) "rKB" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, @@ -63964,9 +64047,9 @@ "rKD" = ( /obj/structure/transport/linear/public, /obj/machinery/elevator_control_panel/directional/north{ + pixel_y = 36; linked_elevator_id = "tram_public_mining_lift"; - preset_destination_names = list("2" = "Lavaland (NOT IN SERVICE)", "3" = "Rock Caves", "4" = "Surface"); - pixel_y = 36 + preset_destination_names = list("2"="Lavaland (NOT IN SERVICE)", "3"="Rock Caves", "4"="Surface") }, /obj/structure/railing{ dir = 1 @@ -64214,10 +64297,10 @@ /area/station/command/heads_quarters/captain) "rOb" = ( /obj/machinery/button/door/directional/south{ - id = "mechbay2"; name = "Mech Bay Shutters Control"; - req_access = list("robotics"); - pixel_x = -8 + pixel_x = -8; + id = "mechbay2"; + req_access = list("robotics") }, /obj/effect/turf_decal/siding/dark{ dir = 1 @@ -64285,8 +64368,8 @@ dir = 4 }, /obj/machinery/atmospherics/components/binary/pump/off/yellow/visible{ - dir = 1; - name = "O2 To Pure" + name = "O2 To Pure"; + dir = 1 }, /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, @@ -64538,14 +64621,14 @@ /area/station/security/brig/entrance) "rTb" = ( /obj/effect/turf_decal/siding/dark, -/obj/machinery/materials_market, +/obj/structure/statue/goliath, /turf/open/floor/iron/dark, /area/station/cargo/storage) "rTn" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "meetingblast"; - name = "Meeting Room Blast Door" + name = "Meeting Room Blast Door"; + id = "meetingblast" }, /turf/open/floor/plating, /area/station/command/meeting_room) @@ -64592,8 +64675,8 @@ /obj/item/storage/box/bodybags, /obj/item/pen, /obj/machinery/door/poddoor/shutters{ - id = "abandoned_medbay_shutters"; - name = "Abandoned Medbay Shutters" + name = "Abandoned Medbay Shutters"; + id = "abandoned_medbay_shutters" }, /turf/open/floor/iron, /area/station/medical/abandoned) @@ -64616,10 +64699,10 @@ /turf/open/floor/plating, /area/station/maintenance/department/public_mining) "rUJ" = ( -/obj/item/kirbyplants/random, /mob/living/basic/parrot/poly{ name = "Mono" }, +/obj/item/kirbyplants/random, /obj/item/radio/intercom/command/directional/north, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -64635,9 +64718,9 @@ "rVn" = ( /obj/effect/turf_decal/sand/plating, /obj/machinery/nuclearbomb/beer{ - flood_reagent = /datum/reagent/lube; name = "\improper Bubberstation-brand nuclear fission explosive"; - desc = "Mom found the lube nuke." + desc = "Mom found the lube nuke."; + flood_reagent = /datum/reagent/lube }, /turf/open/floor/plating/rust/moonstation, /area/moonstation/surface) @@ -64812,9 +64895,9 @@ "rXI" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=4"; + name = "Robotics"; location = "Robotics"; - name = "Robotics" + codes_txt = "delivery;dir=4" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -64907,10 +64990,10 @@ /area/station/hallway/primary/central/fore) "rZa" = ( /obj/machinery/door/airlock/virology{ - autoclose = 0; + name = "Virology Interior Airlock"; frequency = 1449; id_tag = "virology_airlock_interior"; - name = "Virology Interior Airlock" + autoclose = 0 }, /obj/effect/mapping_helpers/airlock/access/all/medical/virology, /obj/effect/turf_decal/tile/dark_green/fourcorners, @@ -64919,12 +65002,12 @@ /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door_buttons/access_button{ - idDoor = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = 24; pixel_y = 8; - req_access = list("virology") + req_access = list("virology"); + idSelf = "virology_airlock_control"; + idDoor = "virology_airlock_interior" }, /turf/open/floor/iron/white, /area/station/medical/virology) @@ -65169,9 +65252,9 @@ /area/station/command/bridge) "sdj" = ( /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall1"; + name = "Pathing Navigation Beacon"; location = "hall29"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall1" }, /obj/structure/disposalpipe/segment{ dir = 9 @@ -65422,8 +65505,8 @@ /area/station/engineering/asteroid_lobby) "shf" = ( /obj/item/reagent_containers/cup/glass/trophy/silver_cup{ - pixel_y = 7; - pixel_x = 6 + pixel_x = 6; + pixel_y = 7 }, /obj/machinery/door/window/brigdoor/right/directional/south{ name = "Trophy Display Case"; @@ -65527,6 +65610,7 @@ /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) "siX" = ( @@ -65696,11 +65780,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/closet/secure_closet/warden, /obj/item/gun/energy/laser/scatter/shotty{ - projectile_damage_multiplier = 0.75; name = "warden's disabler shotgun"; - ammo_type = list(/obj/item/ammo_casing/energy/laser/scatter/disabler); + desc = "A combat shotgun gutted and refitted with an internal disabler system. The power supply unit seems to have suffered during The Great Burgerstation Riots of '69"; + projectile_damage_multiplier = 0.75; pin = /obj/item/firing_pin; - desc = "A combat shotgun gutted and refitted with an internal disabler system. The power supply unit seems to have suffered during The Great Burgerstation Riots of '69" + ammo_type = list(/obj/item/ammo_casing/energy/laser/scatter/disabler) }, /turf/open/floor/iron/dark, /area/station/security/warden) @@ -65714,8 +65798,8 @@ dir = 1 }, /obj/machinery/button/door/directional/north{ - id = "chem_shutters"; name = "Privacy Shutters Control"; + id = "chem_shutters"; req_access = list("plumbing") }, /turf/open/floor/iron/showroomfloor, @@ -65879,8 +65963,8 @@ dir = 8 }, /obj/item/radio/intercom/directional/south{ - frequency = 1423; - name = "Interrogation Intercom" + name = "Interrogation Intercom"; + frequency = 1423 }, /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -66049,14 +66133,14 @@ "spC" = ( /obj/structure/table, /obj/machinery/button/door/directional/north{ - id = "Xenolab"; name = "Test Chamber Blast Doors"; pixel_y = -2; + id = "Xenolab"; req_access = list("xenobiology") }, /obj/machinery/button/ignition{ - id = "Xenobio"; - pixel_y = 7 + pixel_y = 7; + id = "Xenobio" }, /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -66132,6 +66216,10 @@ /obj/structure/tank_dispenser, /turf/open/floor/engine, /area/station/engineering/atmos/project) +"sqw" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/station/maintenance/department/engine) "sqG" = ( /obj/structure/transport/linear/tram, /obj/structure/thermoplastic/light, @@ -66472,8 +66560,8 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/item/reagent_containers/cup/bucket/wooden{ - pixel_y = -4; - pixel_x = -10 + pixel_x = -10; + pixel_y = -4 }, /obj/item/clothing/head/costume/pirate{ pixel_y = -8 @@ -66495,8 +66583,8 @@ /area/moonstation/underground) "suP" = ( /obj/machinery/door/window/brigdoor/left/directional/west{ - req_access = list("medical"); - name = "Secure Medical Supplies" + name = "Secure Medical Supplies"; + req_access = list("medical") }, /obj/effect/turf_decal/stripes/red/line{ dir = 8 @@ -66542,8 +66630,8 @@ dir = 5 }, /obj/structure/showcase/machinery/cloning_pod{ - desc = "An old prototype cloning pod, permanently decommissioned following the incident."; - name = "decommissioned cloner" + name = "decommissioned cloner"; + desc = "An old prototype cloning pod, permanently decommissioned following the incident." }, /turf/open/floor/plating, /area/station/science/research/abandoned) @@ -66777,10 +66865,10 @@ /obj/machinery/light/small/directional/west, /obj/effect/landmark/start/assistant, /obj/machinery/button/door/directional/west{ - id = "Toilet2"; name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 + id = "Toilet2"; + specialfunctions = 4; + normaldoorcontrol = 1 }, /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/showroomfloor, @@ -66890,8 +66978,8 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible, /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/atmospherics/components/binary/pump/on{ - dir = 8; - name = "Air to Distro" + name = "Air to Distro"; + dir = 8 }, /obj/machinery/door/window/left/directional/south{ name = "Atmospherics Control Room"; @@ -67107,9 +67195,9 @@ /obj/machinery/door/airlock/hatch{ name = "Public Mining Elevator"; req_access = list("tcomms"); + autoclose = 0; elevator_mode = 1; - transport_linked_id = "tram_public_mining_lift"; - autoclose = 0 + transport_linked_id = "tram_public_mining_lift" }, /turf/open/floor/plating/rust/moonstation, /area/station/commons/public_mining) @@ -67214,13 +67302,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door_buttons/airlock_controller{ - idExterior = "virology_airlock_exterior"; - idInterior = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; name = "Virology Access Console"; pixel_x = 24; pixel_y = 24; - req_access = list("virology") + req_access = list("virology"); + idSelf = "virology_airlock_control"; + idInterior = "virology_airlock_interior"; + idExterior = "virology_airlock_exterior" }, /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 1 @@ -67345,9 +67433,9 @@ "sHK" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Robotics Shutters"; dir = 4; - id = "robotics_science_privacy"; - name = "Robotics Shutters" + id = "robotics_science_privacy" }, /turf/open/floor/plating, /area/station/science/robotics/lab) @@ -67491,7 +67579,7 @@ /turf/open/floor/plating/rust/moonstation, /area/moonstation/underground) "sJO" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, @@ -67544,8 +67632,8 @@ /area/station/terminal/interlink) "sLb" = ( /obj/machinery/conveyor{ - id = "mining"; - dir = 6 + dir = 6; + id = "mining" }, /obj/structure/railing/corner{ dir = 8 @@ -67572,8 +67660,8 @@ pixel_x = 32 }, /obj/structure/sign/directions/evac/directional/north{ - pixel_y = 24; - pixel_x = 32 + pixel_x = 32; + pixel_y = 24 }, /turf/open/floor/iron/checker, /area/station/hallway/primary/aft) @@ -67608,8 +67696,8 @@ dir = 1 }, /obj/effect/turf_decal/board_letter/b{ - color = "#EFB341"; - alpha = 150 + alpha = 150; + color = "#EFB341" }, /obj/structure/cable, /obj/machinery/air_sensor{ @@ -67786,8 +67874,8 @@ /area/station/terminal/lobby) "sOS" = ( /obj/machinery/door/window/brigdoor/right/directional/east{ - req_access = list("brig"); - name = "Brig Deliveries" + name = "Brig Deliveries"; + req_access = list("brig") }, /obj/effect/turf_decal/delivery, /turf/open/floor/engine, @@ -68131,8 +68219,8 @@ dir = 4 }, /obj/structure/sign/directions/science/directional/south{ - pixel_y = -24; - pixel_x = 32 + pixel_x = 32; + pixel_y = -24 }, /obj/structure/sign/directions/medical/directional/west{ pixel_x = 32; @@ -68173,8 +68261,8 @@ "sTY" = ( /obj/structure/cable, /obj/machinery/door/airlock/wood{ - id_tag = "dorms2"; - name = "Dorms 2" + name = "Dorms 2"; + id_tag = "dorms2" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68209,11 +68297,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/button/door/directional/north{ + name = "Door Bolt Control"; id = "ai_sat_maint_right"; - normaldoorcontrol = 1; + req_access = list("minisat"); specialfunctions = 4; - name = "Door Bolt Control"; - req_access = list("minisat") + normaldoorcontrol = 1 }, /obj/machinery/firealarm/directional/south, /turf/open/floor/catwalk_floor/iron_dark, @@ -68272,8 +68360,8 @@ /area/station/ai_monitored/command/nuke_storage) "sVJ" = ( /obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Unit 1" + name = "Unit 1"; + id_tag = "Toilet1" }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -68304,8 +68392,8 @@ "sVZ" = ( /obj/structure/cable, /obj/machinery/door/airlock/wood{ - id_tag = "dorms1"; - name = "Dorms 1" + name = "Dorms 1"; + id_tag = "dorms1" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68825,8 +68913,8 @@ }, /obj/structure/table, /obj/item/reagent_containers/cup/beaker/large{ - pixel_y = 3; - pixel_x = -5 + pixel_x = -5; + pixel_y = 3 }, /obj/item/reagent_containers/cup/beaker{ pixel_x = 5; @@ -68920,9 +69008,9 @@ /obj/machinery/door/airlock/hatch{ name = "Public Mining Elevator"; req_access = list("tcomms"); + autoclose = 0; elevator_mode = 1; - transport_linked_id = "tram_public_mining_lift"; - autoclose = 0 + transport_linked_id = "tram_public_mining_lift" }, /turf/open/floor/plating/rust/moonstation, /area/station/commons/public_mining) @@ -69199,12 +69287,12 @@ "tiE" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/structure/sign/directions/science/directional/north{ - pixel_y = -24; - pixel_x = 32 + pixel_x = 32; + pixel_y = -24 }, /obj/structure/sign/directions/medical/directional/north{ - pixel_y = -32; - pixel_x = 32 + pixel_x = 32; + pixel_y = -32 }, /obj/structure/sign/directions/lavaland/directional/north{ pixel_x = 32; @@ -69393,8 +69481,8 @@ dir = 8 }, /obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "Supermatter Chamber" + name = "Supermatter Chamber"; + heat_proof = 1 }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -69471,9 +69559,9 @@ "tmw" = ( /mob/living/basic/bot/dedbot, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=donksw"; + name = "Donk Navigation Beacon"; location = "donkse"; - name = "Donk Navigation Beacon" + codes_txt = "patrol;next_patrol=donksw" }, /turf/open/floor/carpet/donk, /area/station/maintenance/thruster_room) @@ -69775,8 +69863,8 @@ "trj" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ - id = "lawyer_shutters_a"; - name = "Law Office Shutters A" + name = "Law Office Shutters A"; + id = "lawyer_shutters_a" }, /turf/open/floor/plating, /area/station/service/lawoffice) @@ -70113,8 +70201,8 @@ /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ - id = "brigprison"; - name = "Prison Lockdown Blast Door" + name = "Prison Lockdown Blast Door"; + id = "brigprison" }, /turf/open/floor/plating, /area/station/security/prison/garden) @@ -70232,13 +70320,13 @@ "txZ" = ( /obj/structure/table/wood, /obj/machinery/button/door/directional/east{ - id = "lawyer_shutters_b"; name = "Privacy Shutters Control"; + id = "lawyer_shutters_b"; req_access = list("lawyer") }, /obj/machinery/fax{ - fax_name = "Law Office B"; - name = "Law Office B Fax Machine" + name = "Law Office B Fax Machine"; + fax_name = "Law Office B" }, /turf/open/floor/carpet/blue, /area/station/service/lawoffice) @@ -70279,8 +70367,8 @@ }, /obj/effect/turf_decal/trimline/yellow/warning, /obj/machinery/door/poddoor/shutters/preopen{ - id = "bridge_public_lockdown"; - name = "Bridge Public Lockdown Shutters" + name = "Bridge Public Lockdown Shutters"; + id = "bridge_public_lockdown" }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -70648,8 +70736,8 @@ /area/station/maintenance/gag_room) "tDJ" = ( /obj/machinery/door/poddoor/shutters{ - id = "visitation"; - name = "Visitation Shutters" + name = "Visitation Shutters"; + id = "visitation" }, /obj/machinery/door/window/left/directional/north, /obj/machinery/door/window/right/directional/south, @@ -70694,12 +70782,12 @@ /area/station/security/execution/education) "tEi" = ( /obj/docking_port/stationary{ + name = "Moon Station Evacuation Dock"; dir = 4; - dwidth = 11; + width = 29; height = 25; - name = "Moon Station Evacuation Dock"; shuttle_id = "emergency_home"; - width = 29 + dwidth = 11 }, /turf/open/misc/moonstation_sand, /area/moonstation/surface) @@ -70975,9 +71063,9 @@ }, /obj/structure/cable, /obj/item/paper{ - default_raw_text = "Please note that the Gag Room is not the sex room. It is called the Gag Room because it contains no oxygen. Please stop walking into the Gagroom with horny intent. Thank you."; name = "Notice from Vox to Crew"; - pixel_y = 2 + pixel_y = 2; + default_raw_text = "Please note that the Gag Room is not the sex room. It is called the Gag Room because it contains no oxygen. Please stop walking into the Gagroom with horny intent. Thank you." }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -70995,8 +71083,8 @@ }, /obj/effect/turf_decal/trimline/yellow/warning, /obj/machinery/door/poddoor/shutters/preopen{ - id = "bridge_public_lockdown"; - name = "Bridge Public Lockdown Shutters" + name = "Bridge Public Lockdown Shutters"; + id = "bridge_public_lockdown" }, /turf/open/floor/iron/dark/corner{ dir = 1 @@ -71049,9 +71137,9 @@ /area/station/engineering/atmos/hfr_room) "tIw" = ( /obj/structure/chair/sofa/corp/corner{ + name = "couch"; desc = "Looks like someone threw it out. Covered in donut crumbs."; - dir = 1; - name = "couch" + dir = 1 }, /obj/effect/landmark/start/hangover, /turf/open/floor/mineral/plasma, @@ -71093,7 +71181,7 @@ "tJs" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /obj/machinery/computer/atmos_control/mix_tank{ - atmos_chambers = list("mix_security_execution" = "Educational Mix Chamber") + atmos_chambers = list(mix_security_execution="Educational Mix Chamber") }, /turf/open/floor/iron/dark, /area/station/security/execution/education) @@ -71494,6 +71582,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) +"tPf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/showroomfloor, +/area/station/commons/dorms/laundry) "tPl" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -71539,8 +71632,8 @@ /area/station/hallway/primary/aft) "tPY" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "bar_kitchen_counter"; - name = "Bar-Kitchen Counter Shutters" + name = "Bar-Kitchen Counter Shutters"; + id = "bar_kitchen_counter" }, /obj/structure/table, /obj/item/reagent_containers/cup/rag{ @@ -71740,9 +71833,9 @@ dir = 8 }, /obj/machinery/flasher/directional/east{ - id = "brig_entrance_flasher"; + pixel_x = 24; pixel_y = -24; - pixel_x = 24 + id = "brig_entrance_flasher" }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, @@ -71770,9 +71863,9 @@ "tSK" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Desk Shutters"; dir = 1; - id = "research_shutters"; - name = "Desk Shutters" + id = "research_shutters" }, /turf/open/floor/plating, /area/station/science/lab) @@ -71784,9 +71877,9 @@ dir = 4 }, /obj/machinery/flasher/directional/north{ - id = "Cell 2"; pixel_x = 23; - pixel_y = 23 + pixel_y = 23; + id = "Cell 2" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -71813,8 +71906,8 @@ /area/station/maintenance/aux_eva) "tTM" = ( /obj/machinery/atmospherics/components/binary/valve/digital{ - dir = 1; - name = "Cooling Bypass" + name = "Cooling Bypass"; + dir = 1 }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) @@ -71824,9 +71917,9 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "tTV" = ( +/mob/living/basic/sloth/paperwork, /obj/machinery/holopad, /obj/effect/landmark/event_spawn, -/mob/living/basic/sloth/paperwork, /turf/open/floor/iron/half, /area/station/cargo/storage) "tTX" = ( @@ -72254,8 +72347,8 @@ /area/station/maintenance/port/aft) "uaw" = ( /obj/machinery/door/airlock{ - id_tag = "AuxToilet2"; - name = "Unit 2" + name = "Unit 2"; + id_tag = "AuxToilet2" }, /obj/machinery/door/firedoor, /turf/open/floor/iron/showroomfloor, @@ -72533,8 +72626,8 @@ /area/station/cargo/office) "ueA" = ( /obj/item/reagent_containers/cup/glass/trophy/bronze_cup{ - pixel_y = 9; - pixel_x = -6 + pixel_x = -6; + pixel_y = 9 }, /obj/machinery/door/window/brigdoor/left/directional/south{ name = "Trophy Display Case"; @@ -72756,9 +72849,9 @@ icon_state = "L8" }, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall2"; + name = "Pathing Navigation Beacon"; location = "hall1"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall2" }, /obj/effect/landmark/observer_start, /turf/open/floor/iron, @@ -72775,8 +72868,8 @@ /area/station/security/medical) "uif" = ( /obj/machinery/door/airlock/security/glass{ - id_tag = "innerbrig"; - name = "Brig" + name = "Brig"; + id_tag = "innerbrig" }, /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /obj/effect/turf_decal/tile/red/half/contrasted, @@ -73096,8 +73189,8 @@ dir = 1 }, /obj/effect/turf_decal/board_letter/c{ - color = "#EFB341"; - alpha = 150 + alpha = 150; + color = "#EFB341" }, /obj/item/analyzer, /turf/open/floor/engine/hull/reinforced{ @@ -73144,8 +73237,8 @@ pixel_y = -24 }, /obj/structure/sign/directions/medical/directional/north{ - pixel_y = -32; - pixel_x = 32 + pixel_x = 32; + pixel_y = -32 }, /obj/structure/sign/directions/lavaland/directional/north{ pixel_x = 32; @@ -73198,9 +73291,9 @@ "unG" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Kitchen Counter Shutters"; dir = 8; - id = "cafe_counter"; - name = "Kitchen Counter Shutters" + id = "cafe_counter" }, /obj/effect/turf_decal/tile/dark_red/opposingcorners{ dir = 8 @@ -73364,8 +73457,8 @@ /area/station/maintenance/evac_maintenance) "upU" = ( /obj/machinery/button/door/directional/north{ - id = "pharm_desk_shutters"; name = "Desk Shutters Control"; + id = "pharm_desk_shutters"; req_access = list("pharmacy") }, /obj/machinery/chem_heater/withbuffer, @@ -73462,8 +73555,8 @@ /turf/open/floor/iron/checker, /area/station/service/janitor) "uro" = ( -/obj/effect/spawner/random/trash/moisture_trap, /obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/burgerstation/liquid, /turf/open/floor/plating, /area/station/maintenance/department/engine) "urs" = ( @@ -73678,9 +73771,9 @@ dir = 4 }, /obj/machinery/status_display/door_timer{ - id = "Cell 2"; name = "Cell 2"; - pixel_x = 32 + pixel_x = 32; + id = "Cell 2" }, /turf/open/floor/iron/dark, /area/station/security/brig) @@ -73689,9 +73782,9 @@ /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=hall14"; + name = "Pathing Navigation Beacon"; location = "hall13"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall14" }, /turf/open/floor/iron/checker, /area/station/hallway/primary/aft) @@ -73946,9 +74039,9 @@ /obj/structure/desk_bell, /obj/effect/turf_decal/tile/purple/fourcorners, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Desk Shutters"; dir = 1; - id = "research_shutters"; - name = "Desk Shutters" + id = "research_shutters" }, /obj/effect/landmark/navigate_destination/autoname, /obj/machinery/door/firedoor, @@ -74203,8 +74296,8 @@ /obj/structure/sink/directional/east, /obj/structure/mirror/directional/west, /obj/structure/reagent_dispensers/beerkeg{ - reagent_id = /datum/reagent/consumable/ethanol/bilk; - name = "bilk keg" + name = "bilk keg"; + reagent_id = /datum/reagent/consumable/ethanol/bilk }, /obj/structure/cable, /turf/open/floor/iron/grimy, @@ -74378,14 +74471,14 @@ /turf/open/floor/glass/reinforced/scrape_below, /area/station/common/pool) "uFd" = ( -/obj/machinery/light/moonstation/directional/north, -/obj/structure/bed/dogbed/renault{ - name = "Alpine's Bed" - }, /mob/living/basic/pet/fox/renault{ name = "Alpine"; real_name = "Alpine" }, +/obj/machinery/light/moonstation/directional/north, +/obj/structure/bed/dogbed/renault{ + name = "Alpine's Bed" + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) "uFl" = ( @@ -74502,16 +74595,16 @@ /turf/open/misc/moonstation_rock, /area/moonstation/underground) "uGU" = ( +/mob/living/basic/pet/dog/corgi/lisa, /obj/machinery/button/door/directional/north{ - id = "ntrep_privacy_shutters_external"; - name = "External Privacy Shutters Control" + name = "External Privacy Shutters Control"; + id = "ntrep_privacy_shutters_external" }, /obj/structure/bed/dogbed/ian{ name = "Lisa's bed"; desc = "Lisa's bed! Looks comfy." }, /obj/machinery/newscaster/directional/west, -/mob/living/basic/pet/dog/corgi/lisa, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) "uHa" = ( @@ -74582,7 +74675,7 @@ /turf/open/lava/smooth/lava_land_surface, /area/ruin/unpowered/ash_walkers) "uHW" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /obj/structure/sign/poster/contraband/syndicate_pistol/directional/north, /obj/effect/turf_decal/tile/purple/opposingcorners, /obj/item/radio/intercom/directional/west, @@ -74597,9 +74690,9 @@ /area/station/maintenance/department/electrical) "uIe" = ( /obj/structure/chair/sofa/corp/left{ + name = "couch"; desc = "Looks like someone threw it out. Covered in donut crumbs."; - dir = 4; - name = "couch" + dir = 4 }, /turf/open/floor/iron/grimy, /area/station/terminal/lobby) @@ -74694,11 +74787,11 @@ /obj/machinery/airalarm/directional/north, /obj/effect/mapping_helpers/airalarm/engine_access, /obj/machinery/button/door/directional/east{ - id = "sm_west"; name = "Supermatter Chamber Bolt Control"; - normaldoorcontrol = 1; + id = "sm_west"; + req_access = list("engineering"); specialfunctions = 4; - req_access = list("engineering") + normaldoorcontrol = 1 }, /obj/effect/turf_decal/stripes/end{ dir = 1 @@ -74729,8 +74822,8 @@ /area/station/common/night_club) "uJX" = ( /obj/machinery/atmospherics/components/binary/pump/on/general/visible{ - dir = 4; - name = "Output to Primary Cooling" + name = "Output to Primary Cooling"; + dir = 4 }, /turf/open/floor/iron/dark, /area/station/engineering/rbmk2) @@ -74782,10 +74875,10 @@ /turf/open/floor/iron/grimy, /area/station/service/library/abandoned) "uLf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /mob/living/basic/bot/cleanbot{ name = "Steals-Your-Job" }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/service/janitor) "uLo" = ( @@ -75077,6 +75170,7 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance) "uQf" = ( +/mob/living/basic/goat/pete, /obj/effect/turf_decal/weather/snow, /obj/structure/cable, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -75085,7 +75179,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, -/mob/living/basic/goat/pete, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) "uQk" = ( @@ -75130,8 +75223,8 @@ /area/station/commons/storage/tools) "uQF" = ( /obj/machinery/door/poddoor/shutters/preopen{ - id = "cmo_officer_shutters"; - name = "Privacy Shutters" + name = "Privacy Shutters"; + id = "cmo_officer_shutters" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -75156,9 +75249,9 @@ "uRb" = ( /obj/structure/plasticflaps/opaque, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; + name = "Custodial Closet"; location = "Custodial Closet"; - name = "Custodial Closet" + codes_txt = "delivery;dir=8" }, /turf/open/floor/plating, /area/station/maintenance/central) @@ -75201,8 +75294,8 @@ /area/station/engineering/atmos/hallway) "uSf" = ( /obj/machinery/conveyor{ - id = "mining"; - dir = 4 + dir = 4; + id = "mining" }, /obj/machinery/bouldertech/refinery, /obj/structure/railing, @@ -75632,8 +75725,8 @@ }, /obj/effect/turf_decal/board_number/one{ dir = 8; - color = "#EFB341"; - alpha = 150 + alpha = 150; + color = "#EFB341" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -75766,8 +75859,8 @@ }, /obj/machinery/light/moonstation/directional/south, /obj/machinery/button/door/directional/south{ - id = "rbmk2_shutters_north"; name = "Radiation Shutters Control"; + id = "rbmk2_shutters_north"; req_access = list("engineering") }, /turf/open/floor/engine, @@ -75907,8 +76000,8 @@ "vdo" = ( /obj/structure/wall_torch/spawns_lit/directional/south, /obj/item/skub{ - color = "#882222"; - name = "waiting skub" + name = "waiting skub"; + color = "#882222" }, /turf/open/misc/moonstation_rock, /area/moonstation/underground) @@ -75927,8 +76020,8 @@ dir = 1 }, /obj/machinery/conveyor_switch/oneway{ - id = "mining"; - dir = 4 + dir = 4; + id = "mining" }, /turf/open/floor/pod, /area/station/cargo/miningfoundry/event_protected) @@ -76166,8 +76259,8 @@ /area/station/commons/dorms) "vgo" = ( /obj/machinery/door/window/right/directional/south{ - req_access = list("hydroponics"); - name = "Hydroponics Desk" + name = "Hydroponics Desk"; + req_access = list("hydroponics") }, /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/green/fourcorners, @@ -76335,17 +76428,17 @@ dir = 8 }, /obj/machinery/button/door/directional/south{ - id = "engine_viewing"; name = "Engine Viewing Shutters Control"; + id = "engine_viewing"; req_access = list("engineering") }, /obj/structure/table, /obj/item/geiger_counter, /obj/machinery/button/door/directional/south{ - id = "engsm"; name = "Engine Radiation Shutters Control"; - req_access = list("engineering"); - pixel_y = -32 + pixel_y = -32; + id = "engsm"; + req_access = list("engineering") }, /turf/open/floor/engine, /area/station/engineering/main) @@ -76571,6 +76664,7 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, +/obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/primary/aft) "vmS" = ( @@ -76600,8 +76694,8 @@ /area/station/command/cc_dock) "vnb" = ( /obj/machinery/button/door/directional/west{ - id = "engsm"; name = "Radiation Shutters Control"; + id = "engsm"; req_access = list("engineering") }, /obj/effect/turf_decal/bot{ @@ -76916,8 +77010,8 @@ dir = 1 }, /obj/structure/showcase/machinery/cloning_pod{ - desc = "An old prototype cloning pod, permanently decommissioned following the incident."; - name = "decommissioned cloner" + name = "decommissioned cloner"; + desc = "An old prototype cloning pod, permanently decommissioned following the incident." }, /turf/open/floor/plating, /area/station/science/research/abandoned) @@ -76974,11 +77068,11 @@ /obj/item/binoculars, /obj/item/book/manual/wiki/security_space_law, /obj/machinery/button/flasher{ - id = "isolation_flasher"; - pixel_y = 23; + name = "Isolation Flasher"; pixel_x = 5; - req_access = list("security"); - name = "Isolation Flasher" + pixel_y = 23; + id = "isolation_flasher"; + req_access = list("security") }, /obj/structure/disposalpipe/segment{ dir = 6 @@ -77008,8 +77102,8 @@ /area/station/engineering/atmos/hfr_room) "vrY" = ( /obj/machinery/door/airlock/security/glass{ - id_tag = "innerbrig"; - name = "Brig" + name = "Brig"; + id_tag = "innerbrig" }, /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -77031,12 +77125,14 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/miningdock) "vsm" = ( /obj/machinery/button/door/directional/west{ - id = "rbmk2_shutters_east"; name = "RB-MK2 Radiation Shutters Control"; + id = "rbmk2_shutters_east"; req_access = list("engineering") }, /obj/item/radio/intercom/directional/south, @@ -77106,8 +77202,8 @@ /area/station/security/prison/upper) "vuw" = ( /obj/machinery/door/poddoor/shutters/radiation/preopen{ - id = "engsm"; - name = "Radiation Chamber Shutters" + name = "Radiation Chamber Shutters"; + id = "engsm" }, /obj/structure/cable, /turf/open/floor/plating, @@ -77271,22 +77367,22 @@ /area/station/hallway/primary/starboard) "vwO" = ( /obj/machinery/button/door/directional/west{ - id = "hop"; name = "Privacy Shutters Control"; - req_access = list("hop"); - pixel_y = -1 + pixel_y = -1; + id = "hop"; + req_access = list("hop") }, /obj/machinery/button/door/directional/west{ - id = "hopqueue"; name = "Line Shutters Control"; pixel_y = -10; + id = "hopqueue"; req_access = list("hop") }, /obj/machinery/button/flasher{ - id = "hopflash"; - req_access = list("hop"); name = "Line Flasher"; - pixel_y = -22 + pixel_y = -22; + id = "hopflash"; + req_access = list("hop") }, /obj/machinery/button/ticket_machine{ pixel_x = -24; @@ -77297,8 +77393,8 @@ dir = 4 }, /obj/machinery/button/photobooth{ - pixel_y = -26; - pixel_x = -11 + pixel_x = -11; + pixel_y = -26 }, /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/hop) @@ -77398,8 +77494,8 @@ }, /obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/door/poddoor/preopen{ - id = "meetingblast"; - name = "Meeting Room Blast Door" + name = "Meeting Room Blast Door"; + id = "meetingblast" }, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 4 @@ -77710,8 +77806,8 @@ "vCL" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ dir = 4; - external_pressure_bound = 101.325; - pressure_checks = 1 + pressure_checks = 1; + external_pressure_bound = 101.325 }, /obj/effect/turf_decal/box/red, /turf/open/floor/iron/dark/telecomms, @@ -78132,9 +78228,9 @@ "vKd" = ( /obj/effect/turf_decal/tile/holiday/rainbow/fourcorners, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall8"; + name = "Pathing Navigation Beacon"; location = "hall7"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall8" }, /turf/open/floor/iron/checker, /area/station/hallway/secondary/exit/departure_lounge) @@ -78492,9 +78588,9 @@ /turf/open/floor/iron, /area/station/maintenance/abandon_cafeteria) "vQb" = ( +/mob/living/carbon/human/species/monkey, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/flora/bush/flowers_yw/style_random, -/mob/living/carbon/human/species/monkey, /turf/open/floor/grass, /area/station/science/genetics) "vQh" = ( @@ -78757,12 +78853,12 @@ /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) "vUM" = ( +/mob/living/simple_animal/bot/mulebot, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; + name = "QM #1"; location = "QM #1"; - name = "QM #1" + codes_txt = "delivery;dir=8" }, -/mob/living/simple_animal/bot/mulebot, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/brown/anticorner/contrasted, /turf/open/floor/iron, @@ -78872,10 +78968,10 @@ }, /area/station/hallway/secondary/recreation) "vVS" = ( +/mob/living/basic/pet/bumbles, /obj/effect/turf_decal/siding/wood{ dir = 9 }, -/mob/living/basic/pet/bumbles, /turf/open/floor/grass, /area/station/service/hydroponics) "vVW" = ( @@ -78977,8 +79073,8 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/preopen{ - id = "commandblast"; - name = "Command Lockdown Blast Door" + name = "Command Lockdown Blast Door"; + id = "commandblast" }, /obj/effect/mapping_helpers/airlock/unres{ dir = 1 @@ -79116,8 +79212,8 @@ /area/station/security/brig) "vYZ" = ( /obj/item/toy/katana{ - desc = "As seen in your favourite Japanese cartoon."; - name = "anime katana" + name = "anime katana"; + desc = "As seen in your favourite Japanese cartoon." }, /turf/open/floor/bamboo/tatami, /area/station/maintenance/abandon_wrestle) @@ -79209,8 +79305,8 @@ /area/station/engineering/storage/tech) "wat" = ( /obj/machinery/door/poddoor{ - id = "Secure Storage"; - name = "Secure Storage" + name = "Secure Storage"; + id = "Secure Storage" }, /turf/open/floor/engine, /area/station/engineering/main) @@ -79285,8 +79381,8 @@ /obj/machinery/door/firedoor, /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ - id = "brigprison"; - name = "Prison Lockdown Blast Door" + name = "Prison Lockdown Blast Door"; + id = "brigprison" }, /turf/open/floor/iron/dark, /area/station/security/prison) @@ -79377,6 +79473,7 @@ /area/station/maintenance/evac_maintenance) "wcX" = ( /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/department/engine) "wcZ" = ( @@ -79461,10 +79558,10 @@ }, /obj/machinery/light/moonstation/directional/south, /obj/item/gun/ballistic/automatic/pistol/deagle/gold{ - can_misfire = 1; - misfire_probability = 99; name = "desert-worn Golden Desert Eagle"; - desc = "The Quartermaster's very own gold plated Desert Eagle folded over a million times by superior martian gunsmiths. Excessive use against trespassers has rendered this gun unreliable, at best. Uses .50 AE ammo." + desc = "The Quartermaster's very own gold plated Desert Eagle folded over a million times by superior martian gunsmiths. Excessive use against trespassers has rendered this gun unreliable, at best. Uses .50 AE ammo."; + can_misfire = 1; + misfire_probability = 99 }, /turf/open/floor/mineral/gold, /area/station/command/heads_quarters/qm) @@ -79793,9 +79890,9 @@ "wiL" = ( /obj/structure/chair, /obj/machinery/flasher/directional/east{ - id = "holding_flasher"; + pixel_x = 24; pixel_y = 24; - pixel_x = 24 + id = "holding_flasher" }, /turf/open/floor/iron, /area/station/security/holding_cell) @@ -79980,8 +80077,8 @@ /area/station/cargo/sorting) "wkQ" = ( /obj/docking_port/stationary/syndicate/northeast{ - dir = 8; - name = "North East of Moon Station" + name = "North East of Moon Station"; + dir = 8 }, /turf/open/genturf, /area/moonstation/surface/unexplored) @@ -80217,8 +80314,8 @@ dir = 4 }, /obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "Supermatter Chamber" + name = "Supermatter Chamber"; + heat_proof = 1 }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible, @@ -80431,9 +80528,9 @@ /obj/structure/desk_bell, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Desk Shutters"; dir = 1; - id = "robotics_shutters"; - name = "Desk Shutters" + id = "robotics_shutters" }, /obj/effect/turf_decal/tile/purple/half/contrasted, /obj/machinery/door/window/brigdoor/left/directional/south{ @@ -80775,9 +80872,9 @@ "wyj" = ( /obj/machinery/light/floor, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall24"; + name = "Pathing Navigation Beacon"; location = "hall23"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall24" }, /obj/structure/disposalpipe/segment{ dir = 6 @@ -81036,8 +81133,8 @@ /area/moonstation/surface) "wCB" = ( /obj/machinery/door/airlock{ - id_tag = "AuxToilet1"; - name = "Unit 1" + name = "Unit 1"; + id_tag = "AuxToilet1" }, /obj/machinery/door/firedoor, /turf/open/floor/iron/showroomfloor, @@ -81078,12 +81175,12 @@ /turf/open/floor/iron/dark, /area/station/maintenance/radshelter) "wDe" = ( +/mob/living/simple_animal/bot/mulebot, /obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; + name = "QM #3"; location = "QM #3"; - name = "QM #3" + codes_txt = "delivery;dir=8" }, -/mob/living/simple_animal/bot/mulebot, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 4 @@ -81359,8 +81456,8 @@ "wGH" = ( /obj/machinery/light/moonstation/directional/west, /obj/machinery/button/door/directional/west{ - id = "hos_office_shutters"; name = "Internal Privacy Shutters Control"; + id = "hos_office_shutters"; req_access = list("hos") }, /turf/open/floor/wood, @@ -81591,8 +81688,8 @@ "wJg" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/preopen{ - id = "hop"; - name = "Privacy Shutters" + name = "Privacy Shutters"; + id = "hop" }, /obj/machinery/door/window/brigdoor/left/directional/north{ req_access = list("hop") @@ -81603,9 +81700,9 @@ }, /obj/machinery/door/firedoor, /obj/machinery/flasher/directional/west{ - id = "hopflash"; pixel_x = -22; - pixel_y = 6 + pixel_y = 6; + id = "hopflash" }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) @@ -81661,9 +81758,9 @@ "wKR" = ( /obj/machinery/firealarm/directional/south, /obj/item/knife/bowie{ - force = 12; name = "David's 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. Seems a little dull due to excessive use against space bears." + 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. Seems a little dull due to excessive use against space bears."; + force = 12 }, /obj/effect/turf_decal/tile/purple/half/contrasted, /obj/machinery/light/moonstation/directional/south, @@ -81992,10 +82089,10 @@ /obj/machinery/newscaster/directional/north, /obj/item/folder/yellow, /obj/machinery/button/door/directional/east{ - id = "cargo_shutters"; name = "Desk Shutters Control"; - req_access = list("cargo"); - pixel_y = -8 + pixel_y = -8; + id = "cargo_shutters"; + req_access = list("cargo") }, /turf/open/floor/iron, /area/station/cargo/office) @@ -82173,8 +82270,8 @@ /area/station/medical/morgue/office) "wSp" = ( /obj/machinery/button/door/directional/south{ - id = "enginewasteblast"; name = "Engine Waste Storage Vent Control"; + id = "enginewasteblast"; req_access = list("engineering") }, /obj/effect/spawner/random/burgerstation/liquid, @@ -82247,8 +82344,8 @@ /area/station/engineering/break_room) "wTa" = ( /obj/machinery/button/transport/tram/directional/south{ - id = 1; - specific_transport_id = "moon_1" + specific_transport_id = "moon_1"; + id = 1 }, /obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/machinery/camera/autoname/directional/south{ @@ -82323,9 +82420,9 @@ /obj/structure/table, /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/button/door{ - id = "xenobio1"; name = "Xenobio Pen 1 Blast Doors"; pixel_y = 1; + id = "xenobio1"; req_access = list("xenobiology") }, /obj/effect/turf_decal/siding/dark, @@ -82343,6 +82440,12 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) +"wUc" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/maintenance/department/engine) "wUf" = ( /turf/closed/wall, /area/station/command/meeting_room) @@ -82402,8 +82505,8 @@ "wUZ" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ - id = "lawyer_shutters_b"; - name = "Law Office Shutters B" + name = "Law Office Shutters B"; + id = "lawyer_shutters_b" }, /turf/open/floor/plating, /area/station/service/lawoffice) @@ -82524,8 +82627,8 @@ }, /obj/effect/turf_decal/tile/red/fourcorners, /obj/machinery/door/window/brigdoor/right/directional/east{ - req_access = list("brig"); - name = "Security Checkpoint Desk" + name = "Security Checkpoint Desk"; + req_access = list("brig") }, /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, @@ -82712,8 +82815,8 @@ pixel_y = 16 }, /obj/machinery/button/door/directional/north{ - id = "bar_kitchen_counter"; name = "Bar-Kitchen Access"; + id = "bar_kitchen_counter"; req_access = list("bar") }, /turf/open/floor/wood, @@ -83263,8 +83366,8 @@ /obj/effect/turf_decal/tile/green/fourcorners, /obj/structure/table/reinforced, /obj/machinery/door/window/left/directional/south{ - req_access = list("hydroponics"); - name = "Hydroponics Desk" + name = "Hydroponics Desk"; + req_access = list("hydroponics") }, /obj/machinery/door/firedoor, /turf/open/floor/iron, @@ -84055,8 +84158,8 @@ /area/station/security/lockers) "xvB" = ( /obj/machinery/atmospherics/components/binary/pump/on/general/visible{ - dir = 1; - name = "Emergency Cooling to Main" + name = "Emergency Cooling to Main"; + dir = 1 }, /turf/open/floor/catwalk_floor/iron_dark, /area/station/engineering/rbmk2) @@ -84223,9 +84326,9 @@ /area/station/security/prison/mess) "xxW" = ( /obj/machinery/door/poddoor/shutters/preopen{ + name = "Privacy Shutters"; dir = 1; - id = "chem_shutters"; - name = "Privacy Shutters" + id = "chem_shutters" }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -84372,8 +84475,8 @@ /obj/structure/table/reinforced, /obj/item/storage/barricade, /obj/machinery/door/window/brigdoor/right/directional/north{ - req_access = list("armory"); - name = "Warden's Desk" + name = "Warden's Desk"; + req_access = list("armory") }, /obj/machinery/door/window/right/directional/south{ name = "Warden's Desk" @@ -84458,8 +84561,8 @@ "xzS" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "ntrep_privacy_shutters"; - name = "Nanotrasen Represenative's Office Privacy Shutters" + name = "Nanotrasen Represenative's Office Privacy Shutters"; + id = "ntrep_privacy_shutters" }, /obj/structure/cable, /turf/open/floor/plating, @@ -84488,7 +84591,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ - dir = 10 + dir = 4 }, /turf/open/floor/iron/grimy, /area/station/service/library) @@ -84676,9 +84779,9 @@ "xCO" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Detective's Office Shutters"; dir = 8; - id = "detective_shutters"; - name = "Detective's Office Shutters" + id = "detective_shutters" }, /turf/open/floor/plating, /area/station/security/detectives_office) @@ -84707,6 +84810,9 @@ /obj/effect/turf_decal/tile/purple{ dir = 1 }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, /turf/open/floor/iron, /area/station/cargo/miningdock) "xDc" = ( @@ -84997,13 +85103,13 @@ /obj/structure/desk_bell, /obj/effect/turf_decal/tile/yellow/fourcorners, /obj/machinery/door/poddoor/shutters/preopen{ - id = "engineering_desk_shutters"; name = "Engineering Desk Shutters"; - dir = 1 + dir = 1; + id = "engineering_desk_shutters" }, /obj/machinery/door/window/brigdoor/left/directional/south{ - req_access = list("engineering"); - name = "Engineering Desk" + name = "Engineering Desk"; + req_access = list("engineering") }, /obj/machinery/door/firedoor, /obj/item/hand_labeler, @@ -85049,9 +85155,9 @@ /turf/open/floor/iron/checker, /area/station/hallway/primary/port) "xHc" = ( +/mob/living/simple_animal/hostile/megafauna/legion, /obj/structure/stone_tile/surrounding, /obj/structure/stone_tile/center/cracked, -/mob/living/simple_animal/hostile/megafauna/legion, /turf/open/indestructible/boss, /area/lavaland/underground) "xHe" = ( @@ -85069,8 +85175,8 @@ dir = 4 }, /obj/machinery/button/door/directional/west{ - id = "commissary_shutters"; - name = "Commissary Shutter Control" + name = "Commissary Shutter Control"; + id = "commissary_shutters" }, /turf/open/floor/wood, /area/station/commons/vacant_room/commissary) @@ -85113,6 +85219,7 @@ /area/station/maintenance/department/crew_quarters/dorms) "xIl" = ( /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) "xIq" = ( @@ -85176,11 +85283,11 @@ /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/turf_decal/sand/plating/volcanic, /obj/machinery/door/airlock/multi_tile/metal{ - transport_linked_id = "tram_mining_lift"; - elevator_mode = 1; name = "Mining Elevator Door"; req_access = list("tcomms"); - autoclose = 0 + autoclose = 0; + elevator_mode = 1; + transport_linked_id = "tram_mining_lift" }, /turf/open/floor/plating/lavaland_atmos, /area/station/cargo/miningelevators) @@ -85208,8 +85315,8 @@ /obj/item/radio/intercom/directional/east, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/button/door/directional/north{ - id = "abandoned_kitchen"; - name = "Shutters Control" + name = "Shutters Control"; + id = "abandoned_kitchen" }, /turf/open/floor/iron, /area/station/maintenance/abandon_cafeteria) @@ -85305,9 +85412,9 @@ /obj/machinery/door/airlock/hatch{ name = "Public Mining Elevator"; req_access = list("tcomms"); + autoclose = 0; elevator_mode = 1; - transport_linked_id = "tram_public_mining_lift"; - autoclose = 0 + transport_linked_id = "tram_public_mining_lift" }, /turf/open/floor/plating, /area/station/commons/public_mining) @@ -85503,9 +85610,9 @@ "xPc" = ( /obj/machinery/light/floor, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall11"; + name = "Pathing Navigation Beacon"; location = "hall10"; - name = "Pathing Navigation Beacon" + codes_txt = "patrol;next_patrol=hall11" }, /turf/open/floor/iron/dark, /area/station/hallway/primary/central/aft) @@ -85644,8 +85751,8 @@ /turf/open/floor/iron/dark, /area/station/maintenance/gamer_lair) "xQI" = ( -/obj/effect/decal/cleanable/dirt/dust, /mob/living/simple_animal/hostile/retaliate/goose/vomit, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) "xQU" = ( @@ -85712,12 +85819,12 @@ /area/station/command/heads_quarters/ce) "xRU" = ( /obj/docking_port/stationary{ + name = "arrivals"; dir = 2; - dwidth = 1; + width = 5; height = 13; - name = "arrivals"; shuttle_id = "arrivals_stationary"; - width = 5 + dwidth = 1 }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/terminal/interlink) @@ -86057,8 +86164,8 @@ "xWa" = ( /obj/structure/table/wood, /obj/machinery/reagentgrinder{ - pixel_y = 10; - pixel_x = 5 + pixel_x = 5; + pixel_y = 10 }, /obj/item/reagent_containers/cup/glass/shaker{ pixel_x = -9; @@ -86396,8 +86503,8 @@ pixel_x = -32 }, /obj/structure/sign/directions/engineering/directional/south{ - pixel_y = -40; - pixel_x = -32 + pixel_x = -32; + pixel_y = -40 }, /turf/open/floor/wood/tile, /area/station/hallway/primary/central/aft) @@ -86453,17 +86560,17 @@ /area/station/engineering/supermatter/room) "yaS" = ( /obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; name = "AI Upload Turret Control"; - pixel_x = -28 + pixel_x = -28; + control_area = "/area/station/ai_monitored/turret_protected/ai_upload" }, /obj/structure/sign/departments/aiupload/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/item/radio/intercom/directional/north{ - broadcasting = 1; - frequency = 1447; name = "Private Channel"; - pixel_x = -26 + pixel_x = -26; + frequency = 1447; + broadcasting = 1 }, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/turret_protected/aisat/teleporter) @@ -86664,8 +86771,8 @@ "ydK" = ( /obj/effect/turf_decal/tile/holiday/rainbow/half/contrasted, /obj/structure/sign/directions/science/directional/south{ - pixel_y = -24; - pixel_x = 32 + pixel_x = 32; + pixel_y = -24 }, /obj/structure/sign/directions/medical/directional/west{ pixel_x = 32; @@ -86710,16 +86817,16 @@ "ydZ" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ + name = "Kitchen Counter Shutters"; dir = 8; - id = "cafe_counter"; - name = "Kitchen Counter Shutters" + id = "cafe_counter" }, /obj/effect/turf_decal/tile/dark_red/opposingcorners{ dir = 8 }, /obj/item/reagent_containers/condiment/ketchup{ - pixel_y = 14; - pixel_x = 6 + pixel_x = 6; + pixel_y = 14 }, /obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 @@ -86926,8 +87033,8 @@ "yhB" = ( /obj/docking_port/stationary/random{ name = "lavaland"; - shuttle_id = "pod_3_lavaland"; dir = 8; + shuttle_id = "pod_3_lavaland"; target_area = /area/moonstation/surface/unexplored }, /turf/open/misc/moonstation_sand, @@ -87182,10 +87289,10 @@ /obj/structure/cable, /obj/machinery/meter, /obj/item/radio/intercom/directional/south{ - broadcasting = 1; + name = "Private Channel"; frequency = 1447; listening = 0; - name = "Private Channel" + broadcasting = 1 }, /turf/open/floor/catwalk_floor/iron_dark, /area/station/ai_monitored/turret_protected/aisat_interior) @@ -239822,7 +239929,7 @@ akP vsf jno byL -hDe +byL xCV sPk wLw @@ -240084,7 +240191,7 @@ oyB fKU aIy rTb -qUQ +bjf jAO ith hwz @@ -244706,7 +244813,7 @@ wQJ oyW xAp swX -mjw +vrq pHZ rvx bBo @@ -250380,7 +250487,7 @@ bvw xxj wpZ xCq -aoY +sqw bPr xCq hJT @@ -250399,8 +250506,8 @@ cgg lmC tVi vih -tAr -eIR +rKx +aPK vih mAy vKC @@ -250895,7 +251002,7 @@ xCq xCq xCq xCq -hVi +eDz xCq wbS hQL @@ -250903,7 +251010,7 @@ iAe bBj sJe xCq -oTD +wUc pUe ktO vih @@ -251151,8 +251258,8 @@ xCq mQe aOS uro -xCq -hVi +gXq +fOu xCq xCq xCq @@ -251407,19 +251514,19 @@ kJQ gqa kzZ ldU -gXi +kzZ qSc agP xCq dQu lsK -bxT +fdf lsK lsK xCq -xCq -quK -xCq +coN +aQr +gEG vih vih vih @@ -251665,22 +251772,22 @@ xCq tcU aHP rqx -xCq +bxT hXe jRd wSb -aBA +ocG ryt aBA aBA -aBA -aBA +gXi +jeX iXp jNn -aBA -aBA asH -jeX +asH +asH +fbZ caS gQF gQF @@ -251692,7 +251799,7 @@ vih vih vih vih -sCK +quK vih jRI jgV @@ -251927,13 +252034,13 @@ iHK eMz eMz eMz -eMz -eMz pFT pFT pFT eMz -eMz +pFT +pFT +pFT eMz eMz eMz @@ -251949,7 +252056,7 @@ cKq add pFT lsK -sCK +njN vih ayn ilP @@ -252180,7 +252287,7 @@ xXf iVk iTS xCq -iHK +iJd eMz dKZ wlm @@ -252720,7 +252827,7 @@ gTz eny xCq xaq -sCK +njN vih cWe nIN @@ -252965,7 +253072,7 @@ omo hCj dKZ pFT -xaq +hJD lQt xCq iCj @@ -253234,7 +253341,7 @@ aRl aRl aRl aXn -sCK +njN vih nsv aOy @@ -257347,7 +257454,7 @@ hXj nyZ pcw hVi -bAK +mXo cHr xYJ ikn @@ -273715,7 +273822,7 @@ stM stM fYz hlA -lhC +tPf kOC tqb uge diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index eb3032f5f4475..9480252ff1386 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -5309,6 +5309,16 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"aML" = ( +/obj/machinery/camera/directional/north{ + network = list("ss13","rd"); + c_tag = "Science - Monkey Pit" + }, +/obj/machinery/light/warm/directional/north, +/turf/open/misc/dirt/jungle{ + baseturfs = /turf/open/misc/dirt/station + }, +/area/station/science/explab) "aMM" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/scrubber, @@ -6777,6 +6787,10 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/dark, /area/station/command/bridge) +"bpn" = ( +/mob/living/carbon/human/species/monkey, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "bpu" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -7160,6 +7174,11 @@ }, /turf/open/space/openspace, /area/station/solars/starboard/fore) +"bwU" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "bxd" = ( /obj/structure/table, /obj/item/radio/intercom/directional/east{ @@ -8195,6 +8214,15 @@ /obj/machinery/door/firedoor, /turf/open/floor/wood, /area/station/command/meeting_room) +"bNG" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/vending/modularpc, +/obj/structure/table, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "bNI" = ( /obj/machinery/airalarm/directional/north, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -8584,6 +8612,11 @@ "bVW" = ( /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) +"bWb" = ( +/obj/machinery/suit_storage_unit/hos, +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/turf/open/floor/carpet, +/area/station/command/heads_quarters/hos) "bWi" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -8716,6 +8749,20 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor, /area/station/maintenance/tram/mid) +"bXv" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/door/directional/east{ + name = "Privacy Shutters Toggle"; + pixel_y = -11; + id = "greedygrinnersden" + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "bXG" = ( /obj/effect/turf_decal/sand/plating, /obj/machinery/door/airlock/external{ @@ -9697,6 +9744,18 @@ }, /turf/open/floor/wood, /area/station/service/library) +"coV" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/screwdriver{ + pixel_x = 2; + pixel_y = 11 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "cpl" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, @@ -10019,10 +10078,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/miningdock) -"cuj" = ( -/obj/structure/flora/bush/sunny/style_random, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "cuM" = ( /obj/structure/table, /obj/item/radio/intercom/prison/directional/north, @@ -10138,6 +10193,13 @@ "cwG" = ( /turf/open/floor/iron, /area/station/cargo/office) +"cwU" = ( +/obj/machinery/door/window/right/directional/north{ + name = "The Monkey Pit"; + req_access = list("science") + }, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "cxc" = ( /obj/structure/chair, /turf/open/floor/iron/checker, @@ -12876,6 +12938,20 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"dsw" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 8 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/north, +/obj/machinery/button/door/directional/north{ + name = "CMO Privacy Shutters"; + pixel_y = 38; + id = "cmoshutter"; + req_access = list("cmo") + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "dsF" = ( /turf/open/floor/iron/smooth, /area/station/command/gateway) @@ -13958,17 +14034,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"dNy" = ( -/obj/machinery/computer/communications{ - dir = 8 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/north{ - pixel_x = 26 - }, -/obj/machinery/status_display/ai/directional/north, -/obj/item/radio/intercom/command/directional/east, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "dNB" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 4 @@ -16353,6 +16418,15 @@ }, /turf/open/openspace, /area/station/asteroid) +"eHj" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/structure/sign/clock/directional/east, +/obj/effect/landmark/event_spawn, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/smooth, +/area/station/commons/storage/primary) "eHr" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -18777,6 +18851,10 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"fEM" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "fEQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, @@ -18904,6 +18982,11 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron, /area/station/commons/dorms) +"fGK" = ( +/mob/living/carbon/human/species/monkey, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "fHg" = ( /obj/structure/chair{ name = "Prosecution"; @@ -19837,13 +19920,6 @@ /obj/machinery/status_display/ai/directional/east, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) -"fYF" = ( -/obj/machinery/door/window/left/directional/north{ - name = "The Monkey Pit"; - req_access = list("science") - }, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "fYW" = ( /obj/structure/grille, /obj/structure/lattice, @@ -20463,6 +20539,13 @@ "gkD" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) +"gkF" = ( +/obj/machinery/door/window/left/directional/north{ + name = "The Monkey Pit"; + req_access = list("science") + }, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "gkQ" = ( /obj/machinery/computer/atmos_control/mix_tank{ dir = 8 @@ -22063,13 +22146,6 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/command/nuke_storage) -"gOr" = ( -/obj/machinery/door/window/right/directional/north{ - name = "The Monkey Pit"; - req_access = list("science") - }, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "gOA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -22494,6 +22570,10 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/supply) +"gXo" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "gXA" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -22980,12 +23060,6 @@ /obj/machinery/coffeemaker, /turf/open/floor/iron, /area/station/security/brig) -"hhP" = ( -/obj/structure/flora/bush/jungle/c/style_random, -/turf/open/misc/dirt/jungle{ - baseturfs = /turf/open/misc/dirt/station - }, -/area/station/science/explab) "hic" = ( /obj/structure/railing{ dir = 4 @@ -23253,10 +23327,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"hlu" = ( -/obj/structure/flora/bush/jungle/c/style_random, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "hlB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line, @@ -23382,10 +23452,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"hoj" = ( -/obj/structure/flora/tree/palm/style_random, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "hou" = ( /obj/machinery/duct, /obj/structure/cable, @@ -25112,6 +25178,25 @@ /obj/machinery/light/directional/north, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"hZq" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Brig"; + id_tag = "outerbrigleft" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig_left" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron, +/area/station/security/brig) "hZr" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos) @@ -25355,12 +25440,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/noslip/tram, /area/station/hallway/primary/tram/right) -"idP" = ( -/mob/living/carbon/human/species/monkey, -/turf/open/misc/dirt/jungle{ - baseturfs = /turf/open/misc/dirt/station - }, -/area/station/science/explab) "idW" = ( /obj/structure/railing/corner, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -25924,11 +26003,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/misc/asteroid/airless, /area/station/asteroid) -"ipa" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/flora/bush/jungle/c/style_random, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "ipe" = ( /obj/machinery/atmospherics/pipe/smart/manifold/green/visible{ dir = 8 @@ -25944,11 +26018,6 @@ /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron, /area/station/cargo/sorting) -"ipu" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "ipC" = ( /obj/effect/turf_decal/stripes/white/line, /obj/machinery/transport/crossing_signal/northwest, @@ -27539,12 +27608,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) -"iTW" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/misc/dirt/jungle{ - baseturfs = /turf/open/misc/dirt/station - }, -/area/station/science/explab) "iUf" = ( /obj/machinery/door/airlock/grunge{ name = "Morgue" @@ -31843,11 +31906,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"knU" = ( -/turf/open/misc/dirt/jungle{ - baseturfs = /turf/open/misc/dirt/station - }, -/area/station/science/explab) "koo" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor, @@ -32223,25 +32281,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"ktX" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/machinery/door/airlock/security/glass{ - name = "Brig"; - id_tag = "outerbrigleft" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig_left" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron, -/area/station/security/brig) "kul" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/south, @@ -32310,18 +32349,6 @@ "kvt" = ( /turf/closed/wall, /area/station/science/genetics) -"kvD" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/screwdriver{ - pixel_x = 2; - pixel_y = 11 - }, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "kvO" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -33000,11 +33027,6 @@ "kHB" = ( /turf/open/floor/grass, /area/station/medical/virology) -"kHQ" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "kHR" = ( /mob/living/basic/parrot/poly, /obj/structure/filingcabinet/chestdrawer, @@ -33407,9 +33429,6 @@ "kNT" = ( /turf/open/floor/glass/reinforced/tram, /area/station/hallway/primary/tram/center) -"kOc" = ( -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "kOf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -33547,6 +33566,14 @@ /obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"kQR" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/item/food/grown/banana/bunch{ + pixel_x = 5; + pixel_y = 16 + }, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "kQX" = ( /obj/machinery/computer/security{ dir = 1 @@ -33593,6 +33620,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/bar/backroom) +"kRR" = ( +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "kRW" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/yellow/warning{ @@ -35592,6 +35622,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) +"lAx" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Brig"; + id_tag = "outerbrigright" + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/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/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron, +/area/station/security/brig) "lAA" = ( /obj/structure/chair/stool/bar/directional/west, /turf/open/floor/iron, @@ -36158,20 +36207,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"lJV" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/button/door/directional/east{ - name = "Privacy Shutters Toggle"; - pixel_y = -11; - id = "greedygrinnersden" - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "lKc" = ( /obj/structure/table/wood, /obj/machinery/light/small/dim/directional/west, @@ -37618,15 +37653,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"mhD" = ( -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 4 - }, -/obj/structure/sign/clock/directional/east, -/obj/effect/landmark/event_spawn, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/smooth, -/area/station/commons/storage/primary) "mhE" = ( /obj/effect/turf_decal/sand/plating, /obj/machinery/door/airlock/external{ @@ -37874,6 +37900,10 @@ }, /turf/open/floor/glass, /area/station/command/meeting_room) +"mmy" = ( +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "mmH" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, @@ -38294,18 +38324,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"mwa" = ( -/obj/structure/table/reinforced, -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/obj/item/rcl/pre_loaded, -/obj/machinery/computer/security/telescreen/ce/directional/west, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/item/clipboard, -/obj/item/paper/monitorkey, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/ce) "mwd" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -40556,11 +40574,6 @@ /obj/machinery/barsign/directional/south, /turf/open/floor/iron/checker, /area/station/commons/lounge) -"nmj" = ( -/mob/living/carbon/human/species/monkey, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "nmk" = ( /obj/structure/toilet{ pixel_y = 8 @@ -41333,6 +41346,12 @@ /obj/structure/cable/layer1, /turf/open/floor/plating/airless, /area/station/solars/port) +"nzO" = ( +/mob/living/carbon/human/species/monkey, +/turf/open/misc/dirt/jungle{ + baseturfs = /turf/open/misc/dirt/station + }, +/area/station/science/explab) "nzR" = ( /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) @@ -41993,6 +42012,10 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"nNh" = ( +/obj/structure/flora/bush/sunny/style_random, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "nNi" = ( /obj/structure/table/wood, /obj/structure/window/reinforced/spawner/directional/north{ @@ -42218,6 +42241,11 @@ }, /turf/open/floor/tram, /area/station/hallway/primary/tram/right) +"nRd" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "nRw" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 10 @@ -42995,6 +43023,53 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/maintenance/radshelter/civil) +"ofA" = ( +/obj/structure/chair/office, +/obj/machinery/button/door/directional/south{ + name = "Privacy Shutters Control"; + pixel_x = 24; + pixel_y = -1; + id = "hop"; + req_access = list("kitchen") + }, +/obj/machinery/button/door/directional/south{ + name = "Arrival Checkpoint Enforcement Procedure"; + pixel_x = 35; + pixel_y = -10; + id = "papersplease"; + req_access = list("kitchen") + }, +/obj/machinery/button/ticket_machine{ + pixel_x = 24; + pixel_y = -10 + }, +/obj/machinery/button/door/directional/south{ + name = "Queue Shutters Entry Control"; + pixel_x = 24; + pixel_y = 8; + id = "hopqueuestart"; + req_access = list("kitchen") + }, +/obj/machinery/keycard_auth/wall_mounted/directional/south{ + pixel_x = 26 + }, +/obj/machinery/button/door/directional/south{ + name = "Queue Shutters Upper Exit Control"; + pixel_x = 35; + pixel_y = 8; + id = "hopqueueend"; + req_access = list("kitchen") + }, +/obj/machinery/button/door/directional/south{ + name = "Queue Shutters Lower Exit Control"; + pixel_x = 35; + pixel_y = -1; + id = "hopqueueendbottom"; + req_access = list("kitchen") + }, +/obj/effect/landmark/start/head_of_personnel, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "ofT" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -43015,24 +43090,6 @@ }, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"ogb" = ( -/obj/machinery/modular_computer/preset/id{ - dir = 8 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/north, -/obj/machinery/button/door/directional/north{ - name = "CMO Privacy Shutters"; - pixel_y = 38; - id = "cmoshutter"; - req_access = list("cmo") - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) -"ogn" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "ogt" = ( /obj/structure/table/reinforced, /obj/item/clothing/ears/earmuffs{ @@ -43367,10 +43424,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit) -"omj" = ( -/obj/machinery/light/warm/directional/south, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "omm" = ( /turf/closed/wall, /area/station/maintenance/department/security) @@ -44421,8 +44474,8 @@ /turf/closed/wall/r_wall, /area/station/engineering/supermatter) "oMh" = ( -/obj/structure/secure_safe/directional/east, /obj/machinery/airalarm/directional/north, +/obj/structure/detectiveboard/directional/east, /turf/open/floor/carpet, /area/station/security/detectives_office) "oMz" = ( @@ -44667,6 +44720,10 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) +"oQU" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "oQW" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 8 @@ -45463,53 +45520,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/cargo/drone_bay) -"pge" = ( -/obj/structure/chair/office, -/obj/machinery/button/door/directional/south{ - name = "Privacy Shutters Control"; - pixel_x = 24; - pixel_y = -1; - id = "hop"; - req_access = list("kitchen") - }, -/obj/machinery/button/door/directional/south{ - name = "Arrival Checkpoint Enforcement Procedure"; - pixel_x = 35; - pixel_y = -10; - id = "papersplease"; - req_access = list("kitchen") - }, -/obj/machinery/button/ticket_machine{ - pixel_x = 24; - pixel_y = -10 - }, -/obj/machinery/button/door/directional/south{ - name = "Queue Shutters Entry Control"; - pixel_x = 24; - pixel_y = 8; - id = "hopqueuestart"; - req_access = list("kitchen") - }, -/obj/machinery/keycard_auth/wall_mounted/directional/south{ - pixel_x = 26 - }, -/obj/machinery/button/door/directional/south{ - name = "Queue Shutters Upper Exit Control"; - pixel_x = 35; - pixel_y = 8; - id = "hopqueueend"; - req_access = list("kitchen") - }, -/obj/machinery/button/door/directional/south{ - name = "Queue Shutters Lower Exit Control"; - pixel_x = 35; - pixel_y = -1; - id = "hopqueueendbottom"; - req_access = list("kitchen") - }, -/obj/effect/landmark/start/head_of_personnel, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "pgm" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 8 @@ -46638,12 +46648,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"pyI" = ( -/obj/machinery/smartfridge/drying, -/turf/open/floor/iron/white/side{ - dir = 8 - }, -/area/station/service/kitchen) "pyQ" = ( /obj/machinery/vending/wardrobe/hydro_wardrobe, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -47379,29 +47383,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{ - name = "Brig"; - id_tag = "outerbrigright" - }, -/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, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron, -/area/station/security/brig) "pLs" = ( /obj/structure/transport/linear/tram, /obj/structure/tram/split, @@ -47811,6 +47792,12 @@ "pSV" = ( /turf/closed/wall, /area/station/security/checkpoint/escape) +"pTj" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/misc/dirt/jungle{ + baseturfs = /turf/open/misc/dirt/station + }, +/area/station/science/explab) "pTl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ @@ -47970,6 +47957,7 @@ /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 }, +/obj/machinery/vending/cytopro, /turf/open/floor/iron/white, /area/station/science/xenobiology) "pWC" = ( @@ -48381,14 +48369,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"qdq" = ( -/obj/structure/flora/bush/lavendergrass/style_random, -/obj/item/food/grown/banana/bunch{ - pixel_x = 5; - pixel_y = 16 - }, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "qdy" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -50274,6 +50254,18 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/server) +"qKW" = ( +/obj/structure/table/reinforced, +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/obj/item/rcl/pre_loaded, +/obj/machinery/computer/security/telescreen/ce/directional/west, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/item/clipboard, +/obj/item/paper/monitorkey, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/ce) "qLD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -50553,10 +50545,6 @@ /obj/item/paper_bin, /turf/open/floor/iron/white, /area/station/science/lobby) -"qQi" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "qQq" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -52245,11 +52233,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/station/command/bridge) -"rus" = ( -/obj/machinery/suit_storage_unit/hos, -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/turf/open/floor/carpet, -/area/station/command/heads_quarters/hos) "ruy" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -53601,25 +53584,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"rUd" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Brig"; - id_tag = "outerbrigright" - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/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/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron, -/area/station/security/brig) "rUe" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -53648,13 +53612,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/science/explab) -"rUE" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/obj/effect/landmark/event_spawn, -/turf/open/misc/dirt/jungle{ - baseturfs = /turf/open/misc/dirt/station - }, -/area/station/science/explab) "rUQ" = ( /obj/structure/window/reinforced/fulltile, /turf/open/floor/grass, @@ -54238,15 +54195,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"sgP" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/vending/modularpc, -/obj/structure/table, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "sgT" = ( /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -55695,6 +55643,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/cargo/miningdock) +"sGF" = ( +/turf/open/misc/dirt/jungle{ + baseturfs = /turf/open/misc/dirt/station + }, +/area/station/science/explab) "sGG" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -55921,6 +55874,12 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/command/bridge) +"sKD" = ( +/obj/machinery/smartfridge/drying, +/turf/open/floor/iron/white/side{ + dir = 8 + }, +/area/station/service/kitchen) "sKN" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -56262,16 +56221,6 @@ /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"sQD" = ( -/obj/machinery/camera/directional/north{ - network = list("ss13","rd"); - c_tag = "Science - Monkey Pit" - }, -/obj/machinery/light/warm/directional/north, -/turf/open/misc/dirt/jungle{ - baseturfs = /turf/open/misc/dirt/station - }, -/area/station/science/explab) "sQJ" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -56613,6 +56562,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/command/bridge) +"sWY" = ( +/obj/machinery/computer/communications{ + dir = 8 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/north{ + pixel_x = 26 + }, +/obj/machinery/status_display/ai/directional/north, +/obj/item/radio/intercom/command/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "sXa" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -56817,6 +56777,29 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/cargo/miningdock/cafeteria) +"taL" = ( +/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{ + name = "Brig"; + id_tag = "outerbrigright" + }, +/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, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron, +/area/station/security/brig) "taP" = ( /obj/structure/lattice, /turf/open/openspace, @@ -56968,12 +56951,18 @@ /turf/closed/wall, /area/station/maintenance/port/aft) "tdR" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) +"tdY" = ( +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/misc/dirt/jungle{ + baseturfs = /turf/open/misc/dirt/station + }, +/area/station/science/explab) "tdZ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -59849,6 +59838,7 @@ pixel_x = -23; pixel_y = 8 }, +/obj/structure/secure_safe/directional/south, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) "udZ" = ( @@ -62549,6 +62539,11 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/station/engineering/supermatter/room) +"uVa" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "uVb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -63019,12 +63014,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) -"vcV" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/flora/tree/palm/style_random, -/obj/structure/flora/coconuts, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "vde" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64505,6 +64494,10 @@ "vCS" = ( /turf/closed/mineral/random/stationside/asteroid/porus, /area/station/engineering/atmos) +"vCY" = ( +/obj/structure/flora/tree/palm/style_random, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "vCZ" = ( /turf/closed/wall, /area/station/service/chapel/monastery) @@ -64539,6 +64532,13 @@ /obj/machinery/light/small/dim/directional/south, /turf/open/floor/catwalk_floor, /area/station/maintenance/tram/mid) +"vDg" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/landmark/event_spawn, +/turf/open/misc/dirt/jungle{ + baseturfs = /turf/open/misc/dirt/station + }, +/area/station/science/explab) "vDu" = ( /obj/machinery/computer/robotics{ dir = 1 @@ -64584,6 +64584,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/central/greater) +"vEl" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "vEq" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 8 @@ -64813,6 +64817,26 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"vHT" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Brig"; + id_tag = "outerbrigleft" + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig_left" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/disposalpipe/segment, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron, +/area/station/security/brig) "vIa" = ( /obj/machinery/vending/cigarette, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -66144,26 +66168,6 @@ /obj/effect/turf_decal/trimline/white/warning, /turf/open/floor/iron, /area/station/maintenance/tram/right) -"wiI" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Brig"; - id_tag = "outerbrigleft" - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig_left" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/structure/disposalpipe/segment, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron, -/area/station/security/brig) "wiU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66690,6 +66694,12 @@ }, /turf/open/floor/iron, /area/station/security/processing) +"wtR" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/flora/tree/palm/style_random, +/obj/structure/flora/coconuts, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "wtS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -67900,10 +67910,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) -"wQf" = ( -/obj/structure/flora/bush/jungle/b/style_random, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "wQm" = ( /turf/open/floor/iron, /area/station/engineering/atmos) @@ -67995,6 +68001,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/carpet, /area/station/commons/dorms) +"wSp" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/misc/grass/jungle/station, +/area/station/science/explab) "wSx" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -68650,10 +68660,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"xgT" = ( -/obj/structure/flora/bush/fullgrass/style_random, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "xgZ" = ( /obj/structure/table/reinforced, /obj/machinery/light/cold/directional/west, @@ -68681,10 +68687,6 @@ "xhX" = ( /turf/open/misc/asteroid, /area/station/maintenance/starboard/lesser) -"xic" = ( -/mob/living/carbon/human/species/monkey, -/turf/open/misc/grass/jungle/station, -/area/station/science/explab) "xir" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -103117,7 +103119,7 @@ kHR tga rnf xBD -mwa +qKW sHH sHH sHH @@ -106133,7 +106135,7 @@ aaa aaa aaa sNs -sgP +bNG eJZ bNm ruo @@ -106141,7 +106143,7 @@ pCM kzx oSl ive -kvD +coV alg aes khE @@ -106908,7 +106910,7 @@ sNs sNs eaZ pFw -mhD +eHj wXB gms sNs @@ -119805,12 +119807,12 @@ aaa aaa sQZ mtI -nmj -kHQ -qQi -vcV -ipa -ogn +fGK +bwU +vEl +wtR +uVa +oQU ojU gzw gzw @@ -120061,15 +120063,15 @@ aaa aaa aaa sQZ -wQf -cuj -xgT -knU -xgT -knU -fYF -kOc -cuj +wSp +nNh +gXo +sGF +gXo +sGF +gkF +kRR +nNh gzw gGi xBC @@ -120318,15 +120320,15 @@ aaa aaa aaa sQZ -kOc -hoj -qdq -xic -kOc -wQf -gOr -kOc -xgT +kRR +vCY +kQR +bpn +kRR +wSp +cwU +kRR +gXo gzw dNH lrt @@ -120576,12 +120578,12 @@ aaa oyR sQZ sQZ -sQD -kOc -hlu -cuj -hoj -ipu +aML +kRR +mmy +nNh +vCY +nRd ojU gzw gzw @@ -120832,12 +120834,12 @@ aaa aaa oyR vUz -hhP -iTW -kOc -rUE +tdY +pTj +kRR +vDg pQx -omj +fEM sQZ sQZ gzw @@ -121090,9 +121092,9 @@ aaa oyR pQx vUz -idP -iTW -iTW +nzO +pTj +pTj hgN mRD asu @@ -152940,7 +152942,7 @@ vBn tRV sik iOm -pge +ofA lcS vhG jSd @@ -153432,7 +153434,7 @@ jGL jed oIz gnW -wiI +vHT mcD pDy tWn @@ -153946,7 +153948,7 @@ iUE rxE jyR lMR -ktX +hZq pqd kdV acr @@ -157030,7 +157032,7 @@ fph sHw kil axp -rUd +lAx njR joB lTV @@ -157544,7 +157546,7 @@ aBN sDO jFh msW -pLg +taL nSV aPk sGG @@ -158033,7 +158035,7 @@ aaa aaa rmB pxf -rus +bWb toY wpM auP @@ -159352,7 +159354,7 @@ ltw tKH tgh ltw -dNy +sWY hhJ wKk phl @@ -166851,7 +166853,7 @@ lBQ apC kZC mBq -ogb +dsw aOJ aPm wWa @@ -170395,7 +170397,7 @@ eSx llj whs fEG -pyI +sKD mkl fxS eSx @@ -181455,7 +181457,7 @@ ufh tEF qza aIU -lJV +bXv kOl jAU psU diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index afb613a9e9135..096cf003ac4eb 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -130,25 +130,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"abH" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/obj/structure/sign/directions/security/directional/north{ - pixel_y = 40 - }, -/obj/structure/sign/directions/medical/directional/north{ - dir = 2 - }, -/obj/structure/sign/directions/evac/directional/north{ - pixel_y = 24; - dir = 2 - }, -/turf/open/floor/wood, -/area/station/service/cafeteria) "abK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -359,6 +340,15 @@ }, /turf/open/floor/iron/white, /area/station/security/checkpoint/medical) +"aeJ" = ( +/obj/structure/table/reinforced, +/obj/item/phone, +/obj/structure/cable, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "afe" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -615,17 +605,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/catwalk_floor/iron_white, /area/station/medical/treatment_center) -"ajy" = ( -/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, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, -/turf/open/floor/catwalk_floor/iron_white, -/area/station/medical/treatment_center) "ajK" = ( /obj/machinery/door/firedoor, /obj/effect/landmark/navigate_destination/bar, @@ -892,6 +871,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"anX" = ( +/mob/living/basic/parrot/poly, +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/item/paper/monitorkey, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "anZ" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/siding/wood{ @@ -1250,6 +1239,39 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison) +"ava" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/button/door{ + normaldoorcontrol = 1; + specialfunctions = 4; + id = "secentrylock2"; + req_access = list("security"); + name = "Security Exit Lock"; + pixel_x = -7 + }, +/obj/machinery/button/door{ + normaldoorcontrol = 1; + specialfunctions = 4; + id = "secentrylock"; + pixel_y = 7; + req_access = list("security"); + name = "Security Entrance Lock"; + pixel_x = -7 + }, +/obj/machinery/button/flasher{ + pixel_x = 2; + id = "secentry" + }, +/obj/machinery/button/door{ + pixel_x = 2; + pixel_y = 7; + name = "Security Entrance Doors"; + id = "secentrylock"; + normaldoorcontrol = 1 + }, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "avu" = ( /obj/effect/turf_decal/siding/white/corner{ dir = 8 @@ -1445,15 +1467,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central) -"axP" = ( -/obj/structure/sign/warning/vacuum/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "axQ" = ( /obj/effect/turf_decal/stripes, /obj/machinery/atmospherics/components/binary/valve/digital/on{ @@ -1467,14 +1480,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/science) -"ayb" = ( -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "ayf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/iron, @@ -1626,7 +1631,7 @@ /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "aAk" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box, @@ -1657,13 +1662,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"aAK" = ( -/obj/effect/landmark/start/cyborg, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/recharge_floor, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) "aBb" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -2032,24 +2030,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"aHq" = ( -/obj/machinery/modular_computer/preset/id{ - dir = 1 - }, -/obj/machinery/button/flasher{ - id = "hopflash"; - pixel_x = 24; - pixel_y = 8 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/requests_console/auto_name/directional/south, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/effect/mapping_helpers/requests_console/announcement, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "aHs" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/effect/spawner/random/vending/snackvend, @@ -2155,7 +2135,7 @@ /obj/structure/reagent_dispensers/cooking_oil, /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "aJz" = ( /obj/structure/railing, /obj/structure/table, @@ -2258,6 +2238,22 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"aKJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/directions/engineering/directional/east{ + pixel_y = -8 + }, +/obj/structure/sign/directions/security/directional/east{ + pixel_y = 8; + dir = 1 + }, +/obj/structure/sign/directions/supply/directional/east{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "aKP" = ( /obj/structure/cable, /turf/open/floor/iron/half, @@ -2750,19 +2746,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/textured, /area/station/science/lobby) -"aTW" = ( -/obj/machinery/fax{ - fax_name = "Chief Engineer's Office"; - name = "Chief Engineer's Fax Machine" - }, -/obj/structure/table/reinforced, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "aUf" = ( /turf/closed/wall/r_wall/rust, /area/station/medical/chemistry/minisat) @@ -2771,11 +2754,6 @@ /obj/effect/spawner/random/decoration/paint, /turf/open/floor/wood/parquet, /area/station/cargo/boutique) -"aUm" = ( -/obj/effect/spawner/random/maintenance, -/obj/structure/closet, -/turf/open/floor/iron/dark, -/area/station/maintenance/department/engine) "aUo" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -3020,17 +2998,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"bao" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/item/stamp/head/captain{ - pixel_x = -12 - }, -/obj/item/hand_tele{ - pixel_x = 8 - }, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/captain/private) "bay" = ( /obj/effect/spawner/random/vending/colavend, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -3081,6 +3048,26 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/engine, /area/station/science/auxlab/firing_range) +"bbf" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "hopdesk" + }, +/obj/effect/landmark/navigate_destination/hop, +/obj/machinery/door/firedoor, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/left/directional/west{ + req_access = list("hop") + }, +/obj/machinery/door/window/left/directional/east, +/turf/open/floor/iron, +/area/station/command/heads_quarters/hop) "bbh" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/disposal/bin, @@ -3215,11 +3202,6 @@ /obj/effect/spawner/random/techstorage/rnd_secure_all, /turf/open/floor/circuit, /area/station/engineering/storage/tech) -"bdY" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/bridge) "bef" = ( /obj/structure/railing/corner{ dir = 8 @@ -3278,6 +3260,19 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"beS" = ( +/obj/machinery/button/elevator/directional/east{ + id = "cargo" + }, +/obj/machinery/lift_indicator/directional/east{ + linked_elevator_id = "cargo" + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/machinery/rnd/production/techfab/department/cargo, +/turf/open/floor/iron, +/area/station/cargo/storage) "beW" = ( /turf/open/floor/engine/o2, /area/station/engineering/atmos) @@ -3461,6 +3456,13 @@ /obj/machinery/telecomms/broadcaster/preset_left, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) +"biG" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "biS" = ( /turf/closed/wall/r_wall/rust, /area/station/ai_monitored/turret_protected/ai_upload) @@ -4198,7 +4200,7 @@ "byb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "byf" = ( /obj/structure/closet/emcloset/anchored, /turf/open/floor/plating, @@ -5116,15 +5118,12 @@ }, /turf/open/floor/plating, /area/station/medical/pharmacy) -"bPo" = ( -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ +"bPc" = ( +/obj/effect/turf_decal/box/corners{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "bPu" = ( /obj/effect/decal/cleanable/rubble, /obj/effect/turf_decal/stripes/line{ @@ -5178,6 +5177,13 @@ /obj/item/cigbutt/cigarbutt, /turf/open/floor/iron, /area/station/hallway/primary/fore) +"bQc" = ( +/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 = 1 + }, +/area/station/command/bridge) "bQf" = ( /obj/machinery/door/poddoor/shutters{ id = "aux_base_shutters"; @@ -5444,6 +5450,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"bVA" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/directions/evac/directional/east{ + dir = 8 + }, +/obj/structure/sign/directions/science/directional/east{ + pixel_y = -8; + dir = 1 + }, +/obj/structure/sign/directions/medical/directional/east{ + pixel_y = 8; + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "bVY" = ( /obj/machinery/holopad{ pixel_x = 1 @@ -5832,6 +5855,21 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/science/cytology) +"cdo" = ( +/obj/machinery/elevator_control_panel/directional/south{ + linked_elevator_id = "aisat"; + pixel_x = 8; + pixel_y = -34 + }, +/obj/machinery/lift_indicator/directional/south{ + pixel_x = -6; + pixel_y = -40; + linked_elevator_id = "aisat" + }, +/obj/machinery/light/small/dim/directional/north, +/obj/structure/cable/layer3, +/turf/open/floor/iron/dark/telecomms, +/area/station/tcommsat/server) "cdI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6103,17 +6141,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron, /area/station/security) -"ciC" = ( -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; - name = "AI Antechamber turret control"; - pixel_y = -27 - }, -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/uppernorth) "ciE" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/structure/cable, @@ -6160,13 +6187,6 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"cjG" = ( -/obj/machinery/atmospherics/components/tank/air/layer4, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "cjV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/effect/turf_decal/delivery, @@ -6322,14 +6342,6 @@ /obj/effect/mapping_helpers/requests_console/ore_update, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"cnA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable/layer1, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "cnS" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 8 @@ -6372,12 +6384,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/engine, /area/station/medical/chemistry) -"coD" = ( -/obj/structure/chair/stool/directional/east{ - name = "Quartermaster" - }, -/turf/open/floor/carpet/executive, -/area/station/command/meeting_room) "coQ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -6411,12 +6417,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/office) -"cpR" = ( -/obj/structure/table/reinforced, -/obj/item/modular_computer/laptop/preset/civilian, -/obj/structure/cable, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/captain/private) "cpZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -6485,22 +6485,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"crm" = ( -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; - icon_state = "control_stun"; - name = "AI Upload Turret Control"; - pixel_x = -28 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/door/window/brigdoor/left/directional/south, -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/white, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) "cro" = ( /obj/structure/girder/reinforced, /obj/structure/grille, @@ -6762,14 +6746,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"cwi" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/item/radio/intercom/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/holofloor/dark, -/area/station/command/heads_quarters/cmo) "cwk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6986,6 +6962,18 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"cAG" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd") + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "cAQ" = ( /obj/vehicle/sealed/mecha/ripley/cargo, /obj/effect/decal/cleanable/dirt, @@ -7339,6 +7327,11 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/hallway/primary/central) +"cIa" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) "cIh" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -7378,25 +7371,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/textured, /area/station/security/processing) -"cJb" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "virology_airlock_exterior"; - idInterior = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Console"; - pixel_x = -26; - pixel_y = 28; - req_access = list("virology") - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/virology) "cJh" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, @@ -7471,12 +7445,6 @@ /mob/living/basic/mining/basilisk, /turf/open/misc/asteroid/airless, /area/space/nearstation) -"cKS" = ( -/obj/structure/table, -/obj/item/ai_module/core/full/dungeon_master, -/obj/structure/cable, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/ai_upload) "cLd" = ( /obj/machinery/oven/range, /obj/machinery/light/directional/north, @@ -7607,6 +7575,25 @@ dir = 4 }, /area/station/science/xenobiology) +"cNk" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "virology_airlock_exterior"; + idInterior = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Console"; + pixel_x = -26; + pixel_y = 28; + req_access = list("virology") + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/virology) "cNr" = ( /obj/structure/sink/directional/south, /obj/structure/mirror/directional/north{ @@ -7636,22 +7623,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/dark, /area/station/command/bridge) -"cNW" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/sign/directions/engineering/directional/east{ - pixel_y = -8 - }, -/obj/structure/sign/directions/security/directional/east{ - pixel_y = 8; - dir = 1 - }, -/obj/structure/sign/directions/supply/directional/east{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "cNX" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/siding/wood{ @@ -7907,6 +7878,12 @@ }, /turf/open/floor/iron/white, /area/station/science/lobby) +"cSa" = ( +/obj/machinery/power/smes/full, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/station/tcommsat/server) "cSb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7933,6 +7910,13 @@ }, /turf/open/floor/wood, /area/station/service/theater) +"cSC" = ( +/obj/machinery/pdapainter/engineering, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "cSJ" = ( /obj/structure/table, /obj/effect/spawner/random/food_or_drink/snack, @@ -7951,23 +7935,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen, /area/station/service/kitchen) +"cTc" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "hopdesk" + }, +/obj/machinery/door/firedoor, +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hop) "cTm" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, /area/station/maintenance/department/medical/central) -"cTu" = ( -/obj/machinery/button/elevator/directional/east{ - id = "cargo" - }, -/obj/machinery/lift_indicator/directional/east{ - linked_elevator_id = "cargo" - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/machinery/rnd/production/techfab/department/cargo, -/turf/open/floor/iron, -/area/station/cargo/storage) "cTH" = ( /obj/structure/table/wood, /obj/item/storage/box/evidence, @@ -8017,6 +8000,13 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) +"cUD" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/sign/warning/engine_safety/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "cUN" = ( /obj/machinery/computer/libraryconsole/bookmanagement{ dir = 1 @@ -8056,6 +8046,15 @@ /obj/effect/spawner/random/structure/chair_flipped, /turf/open/floor/iron, /area/station/maintenance/department/cargo) +"cVn" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/engineering/main) "cVs" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Xenobiology Maintenance" @@ -8140,14 +8139,6 @@ dir = 1 }, /area/station/science/xenobiology) -"cWW" = ( -/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/engineering/main) "cWX" = ( /obj/effect/turf_decal/arrows, /obj/machinery/firealarm/directional/west, @@ -8204,6 +8195,17 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) +"cXy" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/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/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "cXL" = ( /obj/machinery/duct, /obj/structure/cable, @@ -8235,6 +8237,14 @@ /obj/machinery/light/directional/south, /turf/open/openspace, /area/station/engineering/main) +"cYB" = ( +/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/iron, +/area/station/engineering/main) "cYC" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 1 @@ -8257,7 +8267,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /mob/living/basic/goat/pete, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "cYP" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -8316,6 +8326,13 @@ /obj/machinery/power/port_gen/pacman, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"daz" = ( +/obj/structure/table, +/obj/item/ai_module/core/full/paladin_devotion, +/obj/structure/cable, +/obj/machinery/flasher/directional/south, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) "daK" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -8655,14 +8672,6 @@ }, /turf/open/floor/plating, /area/station/medical/storage) -"dgP" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/chair/stool/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/uppernorth) "dgS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8823,6 +8832,7 @@ "diI" = ( /obj/machinery/light/small/directional/north, /obj/machinery/computer/security, +/obj/structure/detectiveboard/directional/north, /turf/open/floor/carpet, /area/station/security/detectives_office) "diM" = ( @@ -8894,6 +8904,44 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lobby) +"dkq" = ( +/obj/structure/table/reinforced/rglass, +/obj/machinery/button/door{ + normaldoorcontrol = 1; + specialfunctions = 4; + id = "secentrylock2"; + req_access = list("security"); + name = "Security Exit Lock"; + pixel_x = -4; + pixel_y = -1 + }, +/obj/machinery/button/door{ + normaldoorcontrol = 1; + specialfunctions = 4; + id = "secentrylock"; + pixel_y = 6; + req_access = list("security"); + name = "Security Entrance Lock"; + pixel_x = -4 + }, +/obj/machinery/button/flasher{ + pixel_x = 5; + id = "secentry"; + pixel_y = -1; + name = "entrance flasher button" + }, +/obj/machinery/button/door{ + pixel_x = 5; + pixel_y = 6; + name = "Security Entrance Doors"; + id = "secentrylock"; + normaldoorcontrol = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/textured, +/area/station/security/warden) "dkr" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/machinery/light/directional/north, @@ -9291,6 +9339,18 @@ "drj" = ( /turf/closed/wall/rock, /area/station/engineering/supermatter/room) +"drl" = ( +/obj/structure/chair/sofa/corp/right{ + desc = "Looks like someone threw it out. Covered in donut crumbs."; + name = "couch"; + dir = 1 + }, +/obj/structure/sign/poster/contraband/blood_geometer/directional/east, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron/half, +/area/station/security/breakroom) "dro" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -9461,6 +9521,11 @@ /obj/structure/cable, /turf/open/misc/asteroid, /area/station/asteroid) +"dtY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "dum" = ( /obj/structure/table/wood, /obj/item/clothing/head/helmet/toggleable/justice/escape{ @@ -9508,6 +9573,20 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/station/asteroid) +"dvz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sign/directions/medical/directional/east{ + pixel_y = 8; + dir = 8 + }, +/obj/structure/sign/directions/evac/directional/east{ + pixel_y = -8 + }, +/obj/structure/sign/directions/engineering/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "dvC" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/grille, @@ -9522,15 +9601,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"dwt" = ( -/obj/effect/turf_decal/stripes{ - 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/engine, -/area/station/engineering/supermatter/room) "dwv" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/siding/dark_blue{ @@ -9628,6 +9698,29 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"dyS" = ( +/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ + name = "Burn Chamber Interior Airlock"; + id_tag = "ordmix_airlock_interior" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/obj/machinery/airlock_controller/incinerator_ordmix{ + pixel_y = -26 + }, +/obj/machinery/button/ignition/incinerator/ordmix{ + pixel_x = -6; + pixel_y = 24 + }, +/obj/machinery/button/door/incinerator_vent_ordmix{ + pixel_x = 8; + pixel_y = 24 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine/vacuum, +/area/station/science/ordnance/burnchamber) "dyV" = ( /obj/structure/railing{ dir = 1 @@ -9963,7 +10056,7 @@ "dCh" = ( /obj/machinery/gibber, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "dCi" = ( /obj/structure/table/reinforced/rglass, /obj/item/storage/backpack/duffelbag/sec, @@ -10133,6 +10226,10 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/engineering/main) +"dFM" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/maintenance/department/bridge) "dFY" = ( /obj/machinery/duct, /turf/open/floor/plating, @@ -10420,23 +10517,6 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/engine/xenobio, /area/station/science/xenobiology) -"dJY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/sign/directions/science/directional/north{ - dir = 4 - }, -/obj/structure/sign/directions/command/directional/north{ - pixel_y = 40; - dir = 8 - }, -/obj/structure/sign/directions/evac/directional/north{ - pixel_y = 24; - dir = 2 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "dKp" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10463,25 +10543,6 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/textured, /area/station/engineering/atmos/upper) -"dKM" = ( -/obj/structure/sign/poster/official/cleanliness/directional/north, -/obj/effect/turf_decal/bot, -/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/decal/cleanable/dirt/dust, -/obj/machinery/light/small/dim/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/cafeteria) "dLf" = ( /obj/machinery/camera/directional/west{ c_tag = "Atmospherics Tank - Plasma" @@ -10492,12 +10553,6 @@ /obj/machinery/telecomms/server/presets/common, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"dLp" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table/reinforced, -/obj/item/circuitboard/machine/cyborgrecharger, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/foyer) "dLx" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -10692,6 +10747,20 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) +"dPk" = ( +/obj/machinery/button/elevator/directional/east{ + id = "cargo" + }, +/obj/machinery/lift_indicator/directional/east{ + linked_elevator_id = "cargo" + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + 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/storage) "dPq" = ( /obj/machinery/camera/autoname/directional/east, /turf/open/floor/grass, @@ -10750,14 +10819,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/catwalk_floor/iron_dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"dQa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "dQr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/textured, @@ -10836,11 +10897,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"dRF" = ( -/obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "dRM" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 @@ -11304,13 +11360,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/science/robotics/lab) -"dZr" = ( -/obj/machinery/vending/wardrobe/viro_wardrobe, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "dZy" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/command/storage/satellite) @@ -11362,6 +11411,17 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/hallway/primary/central) +"eaW" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; + name = "AI Antechamber turret control"; + pixel_y = -27 + }, +/obj/effect/decal/cleanable/oil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) "eaX" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -11597,12 +11657,6 @@ /obj/item/storage/dice, /turf/open/floor/wood, /area/station/commons/lounge) -"efj" = ( -/obj/machinery/power/smes/full, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/station/tcommsat/server) "efm" = ( /obj/machinery/conveyor{ dir = 4; @@ -11679,6 +11733,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"egN" = ( +/obj/structure/table, +/obj/effect/spawner/random/engineering/flashlight, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron, +/area/station/command/gateway) "egV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -12088,6 +12148,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"eoO" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/vending/wardrobe/engi_wardrobe, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron, +/area/station/engineering/main) "eoQ" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Air to Distro Staging"; @@ -12427,13 +12495,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) -"euC" = ( -/obj/machinery/pdapainter/medbay, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 5 - }, -/turf/open/floor/holofloor/dark, -/area/station/command/heads_quarters/cmo) "euF" = ( /obj/structure/closet/wardrobe/white, /obj/effect/landmark/start/hangover/closet, @@ -12460,6 +12521,21 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"evg" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 6 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/obj/machinery/button/door/directional/east{ + pixel_y = 12; + name = "privacy shutter control"; + id = "cmoprivacy" + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) "evr" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ @@ -12475,6 +12551,12 @@ }, /turf/open/floor/circuit/telecomms/server, /area/station/science/server) +"evO" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/atmospherics, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "evQ" = ( /turf/open/openspace, /area/station/medical/medbay/central) @@ -12485,6 +12567,18 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) +"ewa" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/table, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_y = 6 + }, +/obj/item/stock_parts/power_store/cell/emproof{ + pixel_y = 3 + }, +/obj/item/stock_parts/power_store/cell/emproof, +/turf/open/floor/iron, +/area/station/engineering/main) "ewr" = ( /obj/effect/spawner/random/trash/botanical_waste, /obj/effect/mapping_helpers/burnt_floor, @@ -13131,6 +13225,25 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"eGz" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/structure/sign/directions/security/directional/north{ + pixel_y = 40 + }, +/obj/structure/sign/directions/medical/directional/north{ + dir = 2 + }, +/obj/structure/sign/directions/evac/directional/north{ + pixel_y = 24; + dir = 2 + }, +/turf/open/floor/wood, +/area/station/service/cafeteria) "eGJ" = ( /obj/effect/turf_decal/siding/green, /obj/structure/cable, @@ -13148,6 +13261,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"eHa" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron, +/area/station/command/bridge) "eHc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -13300,6 +13420,10 @@ /obj/effect/turf_decal/tile/red/diagonal_edge, /turf/open/floor/iron/dark, /area/station/security/warden) +"eLk" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) "eLm" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -13332,23 +13456,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) -"eMi" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/sign/directions/science/directional/north{ - dir = 4 - }, -/obj/structure/sign/directions/engineering/directional/north{ - pixel_y = 40; - dir = 4 - }, -/obj/structure/sign/directions/command/directional/north{ - pixel_y = 24; - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "eMj" = ( /obj/machinery/door/airlock/hatch{ name = "MiniSat Access" @@ -13443,6 +13550,10 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) +"eOI" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) "eOY" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -13639,15 +13750,6 @@ }, /turf/open/openspace, /area/station/security/prison/garden) -"eTf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer5{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "eTg" = ( /obj/effect/turf_decal/stripes{ dir = 9 @@ -13665,7 +13767,6 @@ "eTu" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/table, -/obj/item/trash/waffles, /turf/open/floor/iron, /area/station/hallway/primary/central) "eTZ" = ( @@ -13765,20 +13866,6 @@ /obj/structure/cable/layer3, /turf/open/floor/catwalk_floor/iron_dark/telecomms, /area/station/ai_monitored/turret_protected/ai) -"eWE" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table/reinforced, -/obj/machinery/light/small/dim/directional/east, -/obj/item/assembly/timer{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/assembly/igniter/condenser, -/obj/machinery/camera/autoname/directional/east{ - network = list("minisat") - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/foyer) "eWJ" = ( /obj/item/radio/intercom/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -13884,6 +13971,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"eYO" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/structure/secure_safe/caps_spare, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "eYP" = ( /turf/closed/wall/rust, /area/station/medical/chemistry/minisat) @@ -14129,36 +14225,12 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/iron/grimy, /area/station/maintenance/central/greater) -"fdZ" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "fee" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, /turf/open/floor/iron/textured, /area/station/security/processing) -"fer" = ( -/obj/machinery/modular_computer/preset/id{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 6 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/obj/machinery/button/door/directional/east{ - pixel_y = 12; - name = "privacy shutter control"; - id = "cmoprivacy" - }, -/turf/open/floor/holofloor/dark, -/area/station/command/heads_quarters/cmo) "feu" = ( /obj/effect/landmark/start/janitor, /obj/effect/decal/cleanable/dirt, @@ -14293,17 +14365,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"fgY" = ( -/obj/machinery/light/warm/dim/directional/north, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ - dir = 1 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/chemistry/minisat) "fhs" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -14424,20 +14485,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"fjo" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/emergency, -/obj/item/storage/toolbox/emergency{ - pixel_x = -2; - pixel_y = -3 - }, -/obj/item/multitool, -/obj/item/wrench, -/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "fjp" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 1 @@ -14487,15 +14534,6 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/service/theater) -"fks" = ( -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 8 - }, -/obj/machinery/camera/autoname/directional/west, -/obj/structure/secure_safe/caps_spare, -/obj/structure/table/reinforced, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "fkF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/north, @@ -14529,10 +14567,6 @@ dir = 8 }, /area/station/command/corporate_dock) -"fln" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/command/heads_quarters/cmo) "fls" = ( /obj/structure/broken_flooring/pile{ dir = 1 @@ -14566,13 +14600,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"flW" = ( -/obj/machinery/computer/crew{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/turf/open/floor/iron/textured, -/area/station/security/warden) "flZ" = ( /obj/structure/cable, /obj/structure/disposalpipe/sorting/mail/flip{ @@ -14775,22 +14802,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"fpT" = ( -/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/structure/sign/directions/security/directional/south{ - pixel_y = -24; - dir = 8 - }, -/obj/structure/sign/directions/supply/directional/south{ - dir = 8 - }, -/obj/structure/sign/directions/engineering/directional/south{ - pixel_y = -40 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "fpY" = ( /turf/open/openspace, /area/station/science/ordnance) @@ -14811,21 +14822,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/minisat, /turf/open/floor/catwalk_floor/iron_dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"fqq" = ( -/obj/structure/table/reinforced, -/obj/item/stamp/head/ce, -/obj/item/folder/yellow, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/structure/cable, -/obj/machinery/keycard_auth/wall_mounted/directional/west{ - pixel_y = -10 - }, -/obj/item/pen/screwdriver, -/obj/item/stamp/head/ce, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "fqs" = ( /obj/structure/cable, /obj/structure/railing{ @@ -15081,7 +15077,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "ftK" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /obj/effect/turf_decal/tile/red/half/contrasted, /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, @@ -15186,6 +15182,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/checkpoint/medical) +"fvq" = ( +/obj/machinery/airlock_controller/incinerator_atmos{ + pixel_x = 32 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "fvF" = ( /obj/effect/spawner/random/structure/grille, /obj/structure/cable, @@ -15406,6 +15409,17 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/service/cafeteria) +"fzx" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/item/stamp/head/captain{ + pixel_x = -12 + }, +/obj/item/hand_tele{ + pixel_x = 8 + }, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) "fzK" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -15569,15 +15583,6 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/wood/tile, /area/station/service/bar) -"fCo" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ - dir = 1 - }, -/obj/structure/window/spawner/directional/east, -/obj/effect/turf_decal/box/red, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "fCy" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -15697,6 +15702,14 @@ /obj/structure/sign/poster/random/directional/east, /turf/open/floor/iron, /area/station/cargo/storage) +"fEm" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Cooling Loop to Gas" + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "fEu" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -15745,6 +15758,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/command/corporate_showroom) +"fFb" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron, +/area/station/engineering/main) "fFg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16116,12 +16139,6 @@ }, /turf/open/floor/iron/half, /area/station/security/breakroom) -"fLF" = ( -/obj/structure/table, -/obj/effect/spawner/random/engineering/flashlight, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron, -/area/station/command/gateway) "fLM" = ( /obj/structure/transport/linear/public, /obj/machinery/light/floor/transport, @@ -16239,7 +16256,7 @@ "fNy" = ( /obj/structure/closet/secure_closet/freezer/meat, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "fNB" = ( /obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 1 @@ -16445,6 +16462,27 @@ /obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"fQG" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Virology Lab"; + id_tag = "virology_airlock_exterior" + }, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/door_buttons/access_button{ + dir = 1; + idDoor = "virology_airlock_exterior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_y = -24; + req_access = list("virology") + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "fQO" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -16455,13 +16493,6 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"fQS" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "fRv" = ( /obj/machinery/door/window/right/directional/east, /turf/open/floor/grass, @@ -16500,20 +16531,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"fRP" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/landmark/start/head_of_personnel, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "fSb" = ( /obj/structure/tank_dispenser/oxygen, /obj/machinery/light/directional/north, @@ -16939,17 +16956,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/solars/port) -"fZA" = ( -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; - name = "AI Antechamber turret control"; - pixel_x = 27 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/foyer) "fZF" = ( /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) @@ -17016,16 +17022,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating/reinforced/airless, /area/station/asteroid) -"gbw" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, -/obj/machinery/airlock_sensor/incinerator_ordmix{ - pixel_y = -24 - }, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) "gbF" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -17269,6 +17265,16 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"gft" = ( +/obj/structure/transport/linear/public, +/obj/effect/landmark/transport/transport_id{ + specific_transport_id = "medbay1" + }, +/obj/machinery/elevator_control_panel/directional/south{ + linked_elevator_id = "medbay1" + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/medical/treatment_center) "gfF" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17368,23 +17374,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/carpet, /area/station/commons/dorms) -"ghN" = ( -/obj/machinery/computer/pod/old/mass_driver_controller/trash{ - pixel_x = -24; - id = "captaindriver" - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/command/heads_quarters/captain/private) "ghQ" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/chem_master/condimaster{ @@ -17468,6 +17457,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"gjt" = ( +/obj/machinery/pdapainter/medbay, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) "gjw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17601,10 +17597,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"glu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "glA" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /turf/open/floor/iron, @@ -17615,6 +17607,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/upper) +"glH" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/directions/dorms/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "glL" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -18059,14 +18060,6 @@ /obj/structure/broken_flooring/side/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"guS" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/station/hallway/secondary/command) "guV" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron/freezer, @@ -18213,13 +18206,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"gxd" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/sign/warning/engine_safety/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "gxt" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/siding/wood{ @@ -18681,22 +18667,6 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) -"gEL" = ( -/obj/structure/filingcabinet, -/obj/machinery/button/ticket_machine{ - pixel_x = 24; - pixel_y = 6 - }, -/obj/machinery/button/door/directional/east{ - id = "hopdesk"; - name = "desk shutter control"; - pixel_y = -6 - }, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "gEP" = ( /obj/effect/turf_decal/tile/blue/opposingcorners, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -18759,6 +18729,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/space/nearstation) +"gGh" = ( +/obj/effect/landmark/start/cyborg, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/recharge_floor, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) "gGm" = ( /obj/effect/spawner/random/engineering/tank, /turf/open/floor/plating, @@ -18813,18 +18790,6 @@ /obj/effect/mapping_helpers/trapdoor_placer, /turf/open/floor/glass/reinforced/plasma, /area/station/engineering/supermatter/room) -"gHh" = ( -/obj/machinery/lift_indicator/directional/west{ - linked_elevator_id = "medbay1" - }, -/obj/machinery/button/elevator/directional/west{ - id = "medbay1" - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "gHk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19277,6 +19242,14 @@ "gQq" = ( /turf/open/openspace, /area/station/science/xenobiology) +"gQs" = ( +/obj/structure/transport/linear/public, +/obj/effect/landmark/transport/transport_id{ + specific_transport_id = "aisat" + }, +/obj/machinery/holopad, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) "gQt" = ( /obj/machinery/door/airlock{ id_tag = "Cabin6"; @@ -19367,6 +19340,16 @@ /obj/item/target/syndicate, /turf/open/floor/engine, /area/station/science/explab) +"gTe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "gTf" = ( /obj/structure/table, /obj/machinery/reagentgrinder{ @@ -20305,14 +20288,6 @@ dir = 5 }, /area/station/command/meeting_room) -"hhG" = ( -/obj/structure/table/reinforced, -/obj/item/storage/medkit/regular, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "hhH" = ( /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -20598,13 +20573,6 @@ /obj/machinery/research/anomaly_refinery, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"hmJ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/structure/sign/directions/supply/directional/east{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "hna" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -20736,6 +20704,25 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/tile, /area/station/service/bar) +"hpB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/directions/security/directional/west{ + dir = 1 + }, +/obj/structure/sign/directions/supply/directional/west{ + pixel_y = 8; + dir = 1 + }, +/obj/structure/sign/directions/science/directional/west{ + pixel_y = -8; + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "hpT" = ( /obj/machinery/door/airlock/command{ name = "Quartermaster's Office" @@ -20868,6 +20855,18 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"hro" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/firealarm/directional/south, +/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/minisat) "hrp" = ( /obj/structure/closet/crate{ name = "Surplus Communications Parts" @@ -20953,11 +20952,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/executive, /area/station/command/corporate_showroom) -"hsm" = ( -/obj/structure/chair/sofa/right/maroon, -/obj/effect/landmark/start/psychologist, -/turf/open/floor/carpet, -/area/station/medical/psychology) "hso" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/structure/cable, @@ -20994,12 +20988,6 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/virology) -"hsI" = ( -/obj/effect/landmark/start/cyborg, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/recharge_floor, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) "hsW" = ( /turf/open/floor/iron/dark, /area/station/cargo/drone_bay) @@ -21091,6 +21079,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"hux" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/engineering/main) "huK" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood/parquet, @@ -21132,6 +21127,15 @@ /obj/structure/railing/corner, /turf/open/openspace, /area/station/engineering/supermatter/room) +"hvt" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) "hvw" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/disposalpipe/trunk/multiz/down, @@ -21146,12 +21150,6 @@ /obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating/elevatorshaft, /area/station/cargo/storage) -"hvB" = ( -/obj/structure/table/reinforced, -/obj/item/pinpointer/nuke, -/obj/item/disk/nuclear, -/turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/captain/private) "hvD" = ( /obj/structure/broken_flooring/pile{ dir = 8 @@ -21385,6 +21383,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/science/xenobiology) +"hAS" = ( +/obj/machinery/hydroponics/soil, +/obj/effect/decal/cleanable/dirt, +/obj/item/cultivator/rake, +/turf/open/floor/grass, +/area/station/security/prison/garden) "hAV" = ( /obj/structure/table/wood, /obj/item/flashlight/flare/candle{ @@ -21454,13 +21458,6 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/hallway/primary/central) -"hCC" = ( -/obj/machinery/pdapainter/engineering, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "hCJ" = ( /obj/structure/railing{ dir = 8 @@ -21704,16 +21701,6 @@ /obj/structure/railing, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"hGX" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "hopdesk" - }, -/obj/machinery/door/firedoor, -/obj/effect/spawner/structure/window/hollow/reinforced/end, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/command/heads_quarters/hop) "hGZ" = ( /obj/structure/cable/multilayer/multiz, /obj/machinery/light/small/dim/directional/west, @@ -21884,6 +21871,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"hLq" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/engineering/supermatter/room) "hLw" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22110,16 +22105,6 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_dark, /area/station/security/prison/safe) -"hPG" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/sign/warning/vacuum/external/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "hPH" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white, @@ -22577,10 +22562,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/tile, /area/station/service/bar) -"hWR" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/station/maintenance/department/bridge) "hWW" = ( /obj/structure/cable, /obj/effect/landmark/start/atmospheric_technician, @@ -22694,18 +22675,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) -"hYT" = ( -/obj/structure/cable, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/machinery/camera/autoname/directional/north{ - network = list("ss13","medbay") - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "hYU" = ( /obj/structure/lattice, /obj/structure/cable, @@ -22765,12 +22734,6 @@ "iaN" = ( /turf/closed/wall, /area/station/cargo/miningoffice) -"ibe" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/engineering/main) "ibi" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue{ @@ -22998,21 +22961,6 @@ /obj/structure/flora/rock/style_random, /turf/open/misc/asteroid, /area/station/maintenance/department/science) -"ieG" = ( -/obj/machinery/elevator_control_panel/directional/south{ - linked_elevator_id = "aisat"; - pixel_x = 8; - pixel_y = -34 - }, -/obj/machinery/lift_indicator/directional/south{ - pixel_x = -6; - pixel_y = -40; - linked_elevator_id = "aisat" - }, -/obj/machinery/light/small/dim/directional/north, -/obj/structure/cable/layer3, -/turf/open/floor/iron/dark/telecomms, -/area/station/tcommsat/server) "ieI" = ( /obj/structure/cable/layer3, /turf/open/floor/circuit/telecomms/mainframe, @@ -23161,24 +23109,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"ihJ" = ( -/obj/machinery/light/small/directional/south, -/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/structure/sign/directions/supply/directional/south{ - dir = 8 - }, -/obj/structure/sign/directions/engineering/directional/south{ - pixel_y = -40; - dir = 4 - }, -/obj/structure/sign/directions/security/directional/south{ - pixel_y = -24; - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "ihK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -23322,17 +23252,6 @@ /obj/effect/spawner/random/structure/closet_empty/crate/with_loot, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"ill" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger{ - pixel_y = 3 - }, -/obj/item/restraints/handcuffs, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "ilp" = ( /turf/closed/mineral/random/stationside/asteroid/porus{ mineralChance = 20 @@ -23367,20 +23286,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/glass/reinforced, /area/station/service/bar) -"imh" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/machinery/lift_indicator/directional/south{ - linked_elevator_id = "medbay1"; - pixel_x = -32 - }, -/obj/machinery/button/elevator/directional/south{ - id = "medbay1"; - pixel_x = -32 - }, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "iml" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/mapping_helpers/broken_floor, @@ -23937,6 +23842,19 @@ /obj/effect/mapping_helpers/mail_sorting/engineering/ce_office, /turf/open/floor/iron, /area/station/engineering/main) +"iwm" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) "iwu" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -23944,12 +23862,6 @@ /obj/effect/spawner/random/bureaucracy/pen, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/aft/upper) -"iwA" = ( -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "iwQ" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -24315,6 +24227,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/kitchen, /area/station/service/kitchen) +"iDJ" = ( +/obj/structure/table/reinforced, +/obj/item/modular_computer/laptop/preset/civilian, +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) "iEj" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -24586,6 +24504,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"iIT" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/left/directional/north, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) "iIY" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -24814,6 +24742,7 @@ /obj/machinery/hydroponics/soil, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, +/obj/item/plant_analyzer, /turf/open/floor/grass, /area/station/security/prison/garden) "iNv" = ( @@ -24850,6 +24779,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/tile, /area/station/service/chapel) +"iOc" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "iOE" = ( /obj/item/pickaxe/mini, /turf/open/misc/asteroid, @@ -25322,6 +25256,21 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/iron/white/smooth_large, /area/station/science/research) +"jaa" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/directions/command/directional/north, +/obj/structure/sign/directions/engineering/directional/north{ + pixel_y = 40; + dir = 4 + }, +/obj/structure/sign/directions/security/directional/north{ + pixel_y = 24; + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "jac" = ( /obj/structure/cable, /obj/effect/spawner/random/trash/garbage{ @@ -25397,19 +25346,24 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"jbI" = ( -/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/iron, -/area/station/engineering/main) "jbL" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/purple/anticorner/contrasted, /turf/open/floor/iron/white, /area/station/science/lobby) +"jbM" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/ai_module/toy_ai{ + pixel_x = 16; + pixel_y = 8 + }, +/obj/item/paper_bin/construction{ + pixel_y = 6 + }, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) "jbP" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/small/directional/west, @@ -25691,18 +25645,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/patients_rooms/room_a) -"jgO" = ( -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/structure/table, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_y = 6 - }, -/obj/item/stock_parts/power_store/cell/emproof{ - pixel_y = 3 - }, -/obj/item/stock_parts/power_store/cell/emproof, -/turf/open/floor/iron, -/area/station/engineering/main) "jgZ" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 @@ -26061,6 +26003,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) +"jmP" = ( +/obj/machinery/computer/pod/old/mass_driver_controller/trash{ + pixel_x = -24; + id = "captaindriver" + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/command/heads_quarters/captain/private) "jmU" = ( /obj/effect/landmark/start/head_of_security, /obj/machinery/light/small/directional/east, @@ -26133,13 +26092,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"jop" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table/reinforced, -/obj/machinery/light/small/dim/directional/east, -/obj/item/coin/titanium, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/foyer) "joB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26291,6 +26243,12 @@ /obj/effect/turf_decal/trimline/yellow/filled/warning, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"jqu" = ( +/obj/structure/table/reinforced, +/obj/item/pinpointer/nuke, +/obj/item/disk/nuclear, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/captain/private) "jqz" = ( /obj/machinery/vending/cigarette, /obj/effect/turf_decal/tile/neutral/opposingcorners, @@ -26308,6 +26266,20 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/teleporter) +"jqT" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/start/head_of_personnel, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "jqY" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/iron/white/smooth_large, @@ -26407,6 +26379,14 @@ /obj/structure/flora/bush/sunny/style_random, /turf/open/floor/grass, /area/station/hallway/primary/central) +"jtS" = ( +/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/engineering/main) "juf" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/spawner/random/structure/table, @@ -26449,6 +26429,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/corporate_showroom) +"juV" = ( +/obj/structure/railing, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/engineering/main) "juZ" = ( /obj/structure/table/wood, /obj/structure/disposalpipe/segment{ @@ -26533,6 +26521,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/engineering/atmos/upper) +"jww" = ( +/obj/effect/turf_decal/tile/dark_blue, +/obj/effect/mapping_helpers/mail_sorting/service/hop_office, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) "jwI" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/dark_red/opposingcorners, @@ -26686,6 +26682,14 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/storage/tcomms) +"jzC" = ( +/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/light_switch/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "jzI" = ( /obj/structure/railing{ dir = 1 @@ -26800,6 +26804,20 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/science/xenobiology) +"jBg" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/machinery/light/small/dim/directional/east, +/obj/item/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/assembly/igniter/condenser, +/obj/machinery/camera/autoname/directional/east{ + network = list("minisat") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) "jBh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26929,6 +26947,43 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/textured, /area/station/science/genetics) +"jCU" = ( +/obj/structure/closet/crate/freezer, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/blood/o_plus{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/reagent_containers/blood/o_minus, +/obj/item/reagent_containers/blood/b_plus, +/obj/item/reagent_containers/blood/b_minus, +/obj/item/reagent_containers/blood/a_plus, +/obj/item/reagent_containers/blood/a_minus, +/obj/item/reagent_containers/blood/lizard, +/obj/item/reagent_containers/blood/ethereal, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/reagent_containers/blood{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east{ + network = list("ss13","medbay") + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "jCX" = ( /obj/structure/transport/linear/public, /turf/open/floor/plating/elevatorshaft, @@ -27000,6 +27055,14 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/chemistry/minisat) +"jEf" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) "jEr" = ( /obj/structure/chair/stool/directional/west, /obj/effect/landmark/start/assistant, @@ -27171,6 +27234,13 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/patients_rooms/room_a) +"jHz" = ( +/obj/effect/turf_decal/stripes, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "jHD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm/directional/west, @@ -27184,16 +27254,6 @@ }, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"jHO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/cell_10k, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "jHQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27431,13 +27491,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos) -"jLd" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/sign/poster/official/report_crimes/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "jLp" = ( /obj/machinery/photocopier, /turf/open/floor/carpet/purple, @@ -27725,6 +27778,14 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central) +"jQs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "jQt" = ( /obj/structure/cable, /obj/effect/spawner/random/maintenance, @@ -27922,26 +27983,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"jVn" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/button/door/directional/south{ - id = "capshut"; - pixel_x = -8; - name = "shutter control" - }, -/obj/machinery/fax{ - fax_name = "Captain's Office"; - name = "Captain's Fax Machine" - }, -/obj/structure/table/reinforced, -/obj/machinery/keycard_auth/wall_mounted/directional/south{ - pixel_y = -24; - pixel_x = 8 - }, -/turf/open/floor/carpet/royalblue, -/area/station/command/heads_quarters/captain/private) "jVq" = ( /obj/effect/spawner/random/structure/billboard/nanotrasen, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -27988,16 +28029,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"jVT" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable/layer1, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "jVV" = ( /obj/structure/lattice, /turf/open/space/openspace, @@ -28050,13 +28081,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/openspace, /area/station/security/prison/shower) -"jWv" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "jWE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/watertank, @@ -28147,16 +28171,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"jYw" = ( -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/cmo/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/holofloor/dark, -/area/station/command/heads_quarters/cmo) "jYy" = ( /obj/effect/turf_decal/tile/neutral/diagonal_centre, /turf/open/floor/iron/dark, @@ -28292,18 +28306,6 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"kat" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "hopdesk" - }, -/obj/machinery/door/firedoor, -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/command/heads_quarters/hop) "kaz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -28326,6 +28328,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"kbv" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; + name = "AI Antechamber turret control"; + pixel_x = 27 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) "kbD" = ( /obj/machinery/newscaster/directional/south, /obj/effect/turf_decal/siding/purple, @@ -28375,6 +28388,17 @@ }, /turf/open/misc/asteroid, /area/station/maintenance/port/lesser) +"kcr" = ( +/obj/structure/table/optable, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/digital_clock/directional/south, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","medbay") + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) "kcz" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 6 @@ -28556,6 +28580,18 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"keg" = ( +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","medbay") + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "keo" = ( /obj/machinery/conveyor_switch/oneway{ id = "QMLoad2"; @@ -28578,17 +28614,6 @@ }, /turf/open/floor/carpet/red, /area/station/security/warden) -"keE" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/digital_clock/directional/south, -/obj/structure/cable, -/obj/machinery/camera/autoname/directional/west{ - network = list("ss13","medbay") - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "keJ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, @@ -28833,6 +28858,20 @@ /obj/structure/broken_flooring/singular, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"kjR" = ( +/obj/item/radio/intercom/directional/north, +/obj/structure/rack, +/obj/item/clothing/glasses/meson/engine, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/cable, +/obj/item/trapdoor_remote/preloaded, +/obj/machinery/light_switch/directional/north{ + pixel_x = 26 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "kjU" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 @@ -28917,29 +28956,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/cargo/storage) -"kkW" = ( -/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{ - name = "Burn Chamber Interior Airlock"; - id_tag = "ordmix_airlock_interior" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/obj/machinery/airlock_controller/incinerator_ordmix{ - pixel_y = -26 - }, -/obj/machinery/button/ignition/incinerator/ordmix{ - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/button/door/incinerator_vent_ordmix{ - pixel_x = 8; - pixel_y = 24 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine/vacuum, -/area/station/science/ordnance/burnchamber) "kld" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -29149,17 +29165,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"kot" = ( -/obj/machinery/door/airlock/research/glass{ - name = "Ordnance Lab" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "koz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29534,20 +29539,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"ktk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/sign/directions/medical/directional/east{ - pixel_y = 8; - dir = 8 - }, -/obj/structure/sign/directions/evac/directional/east{ - pixel_y = -8 - }, -/obj/structure/sign/directions/engineering/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "ktr" = ( /obj/machinery/door/airlock/grunge{ name = "Radiation Shelter" @@ -29603,6 +29594,11 @@ /obj/structure/cable, /turf/open/floor/wood/parquet, /area/station/medical/psychology) +"kuI" = ( +/obj/structure/chair/sofa/right/maroon, +/obj/effect/landmark/start/psychologist, +/turf/open/floor/carpet, +/area/station/medical/psychology) "kuP" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -29623,17 +29619,6 @@ /obj/structure/lattice/catwalk, /turf/open/openspace/xenobio, /area/station/science/xenobiology) -"kvf" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -1; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/bridge) "kvj" = ( /obj/machinery/light/directional/north, /obj/structure/table, @@ -29657,18 +29642,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/medical/chemistry/minisat) -"kvA" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 1 - }, -/obj/machinery/camera/autoname/directional/west{ - network = list("ss13","rd") - }, -/turf/open/floor/engine, -/area/station/science/ordnance/burnchamber) "kvU" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/rack, @@ -29700,19 +29673,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"kwi" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table/reinforced, -/obj/item/ai_module/toy_ai{ - pixel_x = 16; - pixel_y = 8 - }, -/obj/item/paper_bin/construction{ - pixel_y = 6 - }, -/obj/item/pen, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat/foyer) "kwp" = ( /obj/item/storage/box/bodybags, /obj/item/healthanalyzer, @@ -29759,18 +29719,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"kxh" = ( -/obj/structure/chair/sofa/corp/right{ - desc = "Looks like someone threw it out. Covered in donut crumbs."; - name = "couch"; - dir = 1 - }, -/obj/structure/sign/poster/contraband/blood_geometer/directional/east, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/turf/open/floor/iron/half, -/area/station/security/breakroom) "kxk" = ( /obj/effect/turf_decal/tile/neutral/diagonal_centre, /obj/machinery/camera/autoname/directional/north, @@ -29938,6 +29886,28 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"kzI" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Virology Lab"; + id_tag = "virology_airlock_interior" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/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/green/fourcorners, +/obj/machinery/door_buttons/access_button{ + idDoor = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_x = -24; + pixel_y = 8; + req_access = list("virology") + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/virology) "kzK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29962,6 +29932,14 @@ "kAg" = ( /turf/closed/wall, /area/station/service/hydroponics/garden) +"kAh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kAw" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction/flip{ @@ -30087,6 +30065,11 @@ dir = 1 }, /area/station/medical/pharmacy) +"kCr" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) "kCs" = ( /obj/structure/railing{ dir = 9 @@ -30258,6 +30241,14 @@ }, /turf/open/floor/wood/tile, /area/station/security/courtroom) +"kFO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kFP" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 @@ -30799,6 +30790,16 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/iron, /area/station/cargo/storage) +"kQV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/cmo/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/holofloor/dark, +/area/station/command/heads_quarters/cmo) "kRl" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31137,6 +31138,16 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron, /area/station/science/robotics/lab) +"kWI" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "kWK" = ( /obj/effect/spawner/random/structure/grille, /obj/structure/cable, @@ -31458,14 +31469,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"lct" = ( -/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/light_switch/directional/west, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "lcv" = ( /obj/machinery/camera/autoname/directional/south, /turf/open/floor/glass/reinforced, @@ -31990,14 +31993,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/patients_rooms/room_b) -"lnQ" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/machinery/vending/wallmed/directional/south, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "lnZ" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/table, @@ -32025,6 +32020,18 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"lop" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/paper/pamphlet/gateway, +/obj/structure/table, +/obj/item/flashlight/flare{ + pixel_x = 12 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/station/command/gateway) "loq" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -32262,6 +32269,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"luq" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "lut" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -32378,6 +32392,17 @@ "lwu" = ( /turf/open/floor/carpet/red, /area/station/command/heads_quarters/qm) +"lwv" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/structure/rack, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "lww" = ( /obj/machinery/light/directional/north, /obj/effect/decal/cleanable/dirt/dust, @@ -32406,6 +32431,18 @@ /obj/item/kirbyplants/organic/plant11, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"lwW" = ( +/obj/machinery/lift_indicator/directional/north{ + linked_elevator_id = "cargo" + }, +/obj/machinery/button/elevator/directional/north{ + id = "cargo" + }, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/storage) "lwZ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/computer/atmos_control/nocontrol/incinerator{ @@ -32457,14 +32494,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/textured, /area/station/construction/mining/aux_base) -"lym" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/engineering/supermatter/room) "lyr" = ( /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -32500,6 +32529,13 @@ dir = 4 }, /area/station/medical/exam_room) +"lyJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/poster/official/report_crimes/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "lyN" = ( /turf/open/openspace, /area/station/engineering/lobby) @@ -32588,25 +32624,6 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"lzX" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/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/layer1, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) -"lAb" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/hollow/reinforced/end{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/station/hallway/secondary/command) "lAc" = ( /turf/closed/wall/r_wall, /area/station/science/genetics) @@ -32835,6 +32852,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/disposal) +"lEa" = ( +/obj/machinery/button/elevator/directional/east{ + id = "aisat" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/aisat_interior) "lED" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32993,13 +33019,6 @@ /obj/effect/turf_decal/trimline/green/filled/line, /turf/open/floor/iron/white, /area/station/hallway/secondary/entry) -"lGQ" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "lGR" = ( /obj/effect/spawner/structure/window/hollow/end{ dir = 8 @@ -33105,9 +33124,20 @@ /area/station/hallway/secondary/exit/departure_lounge) "lIZ" = ( /obj/effect/turf_decal/sand/plating, -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"lJo" = ( +/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, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/turf/open/floor/catwalk_floor/iron_white, +/area/station/medical/treatment_center) "lJq" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -33214,6 +33244,12 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/cargo/storage) +"lLC" = ( +/obj/structure/chair/stool/directional/east{ + name = "Quartermaster" + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) "lLF" = ( /obj/structure/broken_flooring/side/directional/north, /obj/effect/decal/cleanable/dirt/dust, @@ -33245,10 +33281,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"lMd" = ( -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "lMj" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 9 @@ -33440,35 +33472,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/chemistry/minisat) -"lPL" = ( -/obj/effect/landmark/start/ai, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/item/radio/intercom/directional/west{ - freerange = 1; - listening = 0; - name = "Common Channel"; - pixel_y = -8 - }, -/obj/item/radio/intercom/directional/west{ - listening = 0; - frequency = 1447; - freerange = 1; - pixel_y = 6 - }, -/obj/machinery/button/door/directional/south{ - id = "AI Core shutters"; - name = "AI Core Shutters Control"; - pixel_x = -24; - req_access = list("ai_upload") - }, -/obj/machinery/camera/directional/north{ - c_tag = "AI Chamber - Core"; - network = list("aicore") - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/apc/cell_5k, -/turf/open/floor/circuit/green, -/area/station/ai_monitored/turret_protected/ai) "lPV" = ( /obj/effect/spawner/random/trash/garbage{ spawn_scatter_radius = 1 @@ -33484,16 +33487,19 @@ /obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) +"lQl" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/hallway/secondary/command) "lQD" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted, /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/command/bridge) -"lQJ" = ( -/obj/structure/rack, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron/dark, -/area/station/maintenance/department/engine) "lQL" = ( /turf/open/openspace, /area/station/hallway/primary/starboard) @@ -33702,6 +33708,15 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/bridge) +"lUF" = ( +/obj/structure/transport/linear/public, +/obj/machinery/elevator_control_panel{ + preset_destination_names = list(2 = "Telecomms", 3 = "AI Core"); + linked_elevator_id = "aisat"; + pixel_x = 32 + }, +/turf/open/openspace, +/area/station/ai_monitored/turret_protected/aisat_interior) "lUM" = ( /obj/structure/toilet/greyscale{ dir = 4 @@ -33753,39 +33768,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"lVE" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/button/door{ - normaldoorcontrol = 1; - specialfunctions = 4; - id = "secentrylock2"; - req_access = list("security"); - name = "Security Exit Lock"; - pixel_x = -7 - }, -/obj/machinery/button/door{ - normaldoorcontrol = 1; - specialfunctions = 4; - id = "secentrylock"; - pixel_y = 7; - req_access = list("security"); - name = "Security Entrance Lock"; - pixel_x = -7 - }, -/obj/machinery/button/flasher{ - pixel_x = 2; - id = "secentry" - }, -/obj/machinery/button/door{ - pixel_x = 2; - pixel_y = 7; - name = "Security Entrance Doors"; - id = "secentrylock"; - normaldoorcontrol = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "lVF" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/structure/disposalpipe/segment{ @@ -34142,6 +34124,11 @@ }, /turf/open/floor/catwalk_floor/iron_white, /area/station/science/ordnance/testlab) +"mcw" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "mcA" = ( /obj/structure/closet/secure_closet/personal, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -34160,7 +34147,7 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "mds" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/delivery, /obj/machinery/camera/autoname/directional/west, @@ -34276,6 +34263,13 @@ /obj/effect/baseturf_helper/reinforced_plating/ceiling, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"mfP" = ( +/obj/machinery/atmospherics/components/tank/air/layer4, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "mgn" = ( /obj/docking_port/stationary{ dir = 8; @@ -34337,13 +34331,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"mhx" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/engineering/main) "mhz" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 @@ -34672,6 +34659,17 @@ }, /turf/open/floor/carpet/black, /area/station/command/heads_quarters/hos) +"mlG" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_y = 3 + }, +/obj/item/restraints/handcuffs, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "mlK" = ( /turf/open/floor/fakepit, /area/station/maintenance/department/medical) @@ -34700,14 +34698,6 @@ /obj/machinery/photobooth/security, /turf/open/floor/iron/dark/textured, /area/station/security/execution/transfer) -"mmG" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Cooling Loop to Gas" - }, -/obj/effect/turf_decal/stripes, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "mmU" = ( /obj/machinery/computer/mecha{ dir = 8 @@ -34805,6 +34795,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/storage) +"mnI" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "mnP" = ( /turf/open/floor/iron, /area/station/service/hydroponics) @@ -34944,27 +34943,19 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"mqI" = ( -/obj/structure/table/wood, -/obj/item/paper_bin/carbon{ - pixel_x = 6 - }, -/obj/item/folder/white{ - pixel_x = -7; - pixel_y = -3 - }, -/obj/item/pen{ - pixel_x = 6 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 +"mra" = ( +/obj/machinery/button/door/incinerator_vent_atmos_aux{ + pixel_y = 24 }, -/obj/machinery/button/door/directional/east{ - id = "psychshutter"; - name = "privacy shutter control" +/obj/machinery/button/door/incinerator_vent_atmos_main{ + pixel_y = 40 }, -/turf/open/floor/wood/parquet, -/area/station/medical/psychology) +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "mrq" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 8 @@ -35096,14 +35087,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/engine, /area/station/command/corporate_dock) -"mte" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "mtB" = ( /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 4 @@ -35154,13 +35137,6 @@ /obj/structure/cable, /turf/open/floor/iron/chapel, /area/station/service/chapel) -"muq" = ( -/obj/structure/table, -/obj/item/ai_module/core/full/paladin_devotion, -/obj/structure/cable, -/obj/machinery/flasher/directional/south, -/turf/open/floor/circuit, -/area/station/ai_monitored/turret_protected/ai_upload) "mut" = ( /obj/machinery/shower/directional/south, /obj/structure/cable, @@ -35193,23 +35169,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/tile, /area/station/service/chapel) -"muW" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/sign/directions/evac/directional/east{ - dir = 8 - }, -/obj/structure/sign/directions/science/directional/east{ - pixel_y = -8; - dir = 1 - }, -/obj/structure/sign/directions/medical/directional/east{ - pixel_y = 8; - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "mvb" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/landmark/start/assistant, @@ -35292,19 +35251,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/service/cafeteria) -"mvT" = ( -/obj/machinery/pdapainter{ - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/obj/item/storage/box/stickers{ - pixel_y = 16 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "mvU" = ( /obj/item/radio/intercom/prison/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35629,6 +35575,14 @@ }, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/qm) +"mCb" = ( +/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/main) "mCm" = ( /obj/effect/turf_decal/stripes, /obj/item/radio/intercom/directional/south, @@ -35730,6 +35684,22 @@ dir = 8 }, /area/station/science/lab) +"mDP" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "antesat" + }, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Antechamber" + }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, +/obj/structure/cable/layer3, +/obj/machinery/elevator_control_panel/directional/south{ + linked_elevator_id = "aisat"; + pixel_x = 8; + pixel_y = -29 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat_interior) "mDT" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -36237,43 +36207,9 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/station/maintenance/department/cargo) -"mNa" = ( -/obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/blood/random, -/obj/item/reagent_containers/blood/random, -/obj/item/reagent_containers/blood/random, -/obj/item/reagent_containers/blood/random, -/obj/item/reagent_containers/blood/o_plus{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/reagent_containers/blood/o_minus, -/obj/item/reagent_containers/blood/b_plus, -/obj/item/reagent_containers/blood/b_minus, -/obj/item/reagent_containers/blood/a_plus, -/obj/item/reagent_containers/blood/a_minus, -/obj/item/reagent_containers/blood/lizard, -/obj/item/reagent_containers/blood/ethereal, -/obj/item/reagent_containers/blood{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/reagent_containers/blood{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/reagent_containers/blood{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 4 - }, -/obj/machinery/camera/autoname/directional/east{ - network = list("ss13","medbay") - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) +"mMT" = ( +/turf/closed/wall, +/area/station/service/kitchen/coldroom) "mNl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, @@ -36513,15 +36449,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"mST" = ( -/obj/structure/closet/l3closet/virology, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/obj/machinery/requests_console/auto_name/directional/north, -/obj/effect/mapping_helpers/requests_console/supplies, -/turf/open/floor/iron/white, -/area/station/medical/virology) "mSY" = ( /obj/machinery/camera/autoname/directional/east{ network = list("ss13","rd") @@ -36691,6 +36618,14 @@ }, /turf/open/floor/plating, /area/station/service/hydroponics/garden) +"mWh" = ( +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "mWB" = ( /obj/machinery/requests_console/auto_name/directional/south, /obj/effect/mapping_helpers/requests_console/supplies, @@ -36721,14 +36656,6 @@ /obj/structure/flora/rock/pile/style_random, /turf/open/misc/asteroid, /area/station/asteroid) -"mWV" = ( -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/cold/dim/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "mWX" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -36871,6 +36798,27 @@ }, /turf/open/floor/iron/dark/telecomms, /area/station/science/server) +"mZr" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_x = 6 + }, +/obj/item/folder/white{ + pixel_x = -7; + pixel_y = -3 + }, +/obj/item/pen{ + pixel_x = 6 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/button/door/directional/east{ + id = "psychshutter"; + name = "privacy shutter control" + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) "mZs" = ( /obj/effect/spawner/random/structure/crate, /turf/open/misc/asteroid, @@ -37214,21 +37162,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/glass/reinforced, /area/station/engineering/atmos/upper) -"ner" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/sign/directions/command/directional/north, -/obj/structure/sign/directions/engineering/directional/north{ - pixel_y = 40; - dir = 4 - }, -/obj/structure/sign/directions/security/directional/north{ - pixel_y = 24; - dir = 8 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "nes" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -37393,15 +37326,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, /area/station/engineering/main) -"nfR" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/ladder{ - icon_state = "ladder10" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "nfS" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/small/broken/directional/west, @@ -37653,6 +37577,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"nlz" = ( +/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/west, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "nlI" = ( /obj/effect/landmark/start/depsec/engineering, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -37758,16 +37689,6 @@ /obj/item/clothing/glasses/hud/health, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"nnw" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "nny" = ( /obj/effect/turf_decal/tile/red/half/contrasted, /obj/structure/disposalpipe/segment{ @@ -37889,16 +37810,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"npq" = ( -/mob/living/basic/parrot/poly, -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 9 - }, -/obj/item/paper/monitorkey, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "npw" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -38018,15 +37929,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/engine, /area/station/science/xenobiology) -"nrU" = ( -/obj/machinery/button/elevator/directional/east{ - id = "aisat" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/ai_monitored/turret_protected/aisat_interior) "nrW" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/machinery/camera/autoname/directional/south{ @@ -38363,6 +38265,35 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"nzT" = ( +/obj/effect/landmark/start/ai, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/item/radio/intercom/directional/west{ + freerange = 1; + listening = 0; + name = "Common Channel"; + pixel_y = -8 + }, +/obj/item/radio/intercom/directional/west{ + listening = 0; + frequency = 1447; + freerange = 1; + pixel_y = 6 + }, +/obj/machinery/button/door/directional/south{ + id = "AI Core shutters"; + name = "AI Core Shutters Control"; + pixel_x = -24; + req_access = list("ai_upload") + }, +/obj/machinery/camera/directional/north{ + c_tag = "AI Chamber - Core"; + network = list("aicore") + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cell_5k, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai) "nAa" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -38414,17 +38345,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"nAD" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/directional/north, -/obj/structure/rack, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/glasses/meson/engine, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "nAG" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 @@ -38449,6 +38369,25 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron/textured, /area/station/security/processing) +"nBA" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/neutral, +/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/structure/sign/directions/evac/directional/south, +/obj/structure/sign/directions/medical/directional/south{ + pixel_y = -24; + dir = 8 + }, +/obj/structure/sign/directions/science/directional/south{ + pixel_y = -40; + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "nBV" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -38634,12 +38573,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/chemistry/minisat) -"nFk" = ( -/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/maintenance/central/lesser) "nFl" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 @@ -38653,14 +38586,6 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) -"nFO" = ( -/obj/structure/transport/linear/public, -/obj/effect/landmark/transport/transport_id{ - specific_transport_id = "aisat" - }, -/obj/machinery/holopad, -/turf/open/openspace, -/area/station/ai_monitored/turret_protected/aisat_interior) "nFS" = ( /obj/structure/closet/wardrobe/white, /obj/item/restraints/handcuffs/cable/zipties, @@ -39106,6 +39031,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"nNN" = ( +/obj/effect/turf_decal/stripes, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "nNP" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, @@ -39149,6 +39079,7 @@ /area/station/command/bridge) "nPw" = ( /obj/structure/water_source/puddle, +/obj/item/reagent_containers/cup/watering_can, /turf/open/floor/grass, /area/station/security/prison/garden) "nPM" = ( @@ -39413,15 +39344,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/station/cargo/warehouse/upper) -"nXf" = ( -/obj/structure/table/reinforced, -/obj/item/phone, -/obj/structure/cable, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "nXw" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/green/fourcorners, @@ -39494,6 +39416,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"nZb" = ( +/obj/structure/closet/l3closet/virology, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/mapping_helpers/requests_console/supplies, +/turf/open/floor/iron/white, +/area/station/medical/virology) "nZo" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -39805,6 +39736,23 @@ }, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"oez" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/directions/science/directional/north{ + dir = 4 + }, +/obj/structure/sign/directions/engineering/directional/north{ + pixel_y = 40; + dir = 4 + }, +/obj/structure/sign/directions/command/directional/north{ + pixel_y = 24; + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "oeL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39843,6 +39791,17 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/glass, /area/station/command/meeting_room) +"ofG" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/box/red, +/obj/machinery/light/directional/south, +/obj/machinery/camera/autoname/directional/west{ + network = list("ss13","rd") + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "ofL" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/turf_decal/stripes/line, @@ -40529,25 +40488,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/commons/storage/tools) -"ous" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/sign/directions/security/directional/west{ - dir = 1 - }, -/obj/structure/sign/directions/supply/directional/west{ - pixel_y = 8; - dir = 1 - }, -/obj/structure/sign/directions/science/directional/west{ - pixel_y = -8; - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "ouA" = ( /obj/effect/landmark/blobstart, /turf/open/misc/asteroid, @@ -40933,15 +40873,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"oBv" = ( -/obj/structure/transport/linear/public, -/obj/machinery/elevator_control_panel{ - preset_destination_names = list(2 = "Telecomms", 3 = "AI Core"); - linked_elevator_id = "aisat"; - pixel_x = 32 - }, -/turf/open/openspace, -/area/station/ai_monitored/turret_protected/aisat_interior) "oBE" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/disposalpipe/segment{ @@ -40967,8 +40898,10 @@ /area/station/maintenance/department/science) "oBU" = ( /obj/machinery/food_cart, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/tlv_cold_room, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "oCb" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 1 @@ -41317,6 +41250,14 @@ /obj/effect/spawner/random/structure/grille, /turf/open/space/openspace, /area/space/nearstation) +"oIV" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/cold/dim/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "oJt" = ( /obj/structure/lattice, /obj/structure/disposaloutlet{ @@ -41540,13 +41481,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white/smooth_large, /area/station/science/explab) -"oMQ" = ( -/obj/structure/chair/comfy/brown{ - dir = 4; - name = "Captain" - }, -/turf/open/floor/carpet/executive, -/area/station/command/meeting_room) "oNo" = ( /obj/machinery/camera/autoname/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -41565,6 +41499,28 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /turf/open/floor/iron/dark/telecomms, /area/station/science/server) +"oNM" = ( +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Primary AI Core Access"; + req_access = list("ai_upload") + }, +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = 3; + pixel_y = -23 + }, +/obj/machinery/flasher/directional/north{ + id = "AI" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "AI Core shutters"; + name = "AI Core Shutters" + }, +/obj/structure/cable, +/turf/open/floor/circuit/green, +/area/station/ai_monitored/turret_protected/ai) "oOb" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -41803,6 +41759,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"oRR" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "oSa" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/bluespace_beacon, @@ -41888,6 +41853,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/lobby) +"oUb" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "oUd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42381,6 +42355,15 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) +"pbD" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/ladder{ + icon_state = "ladder10" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "pbO" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -42880,6 +42863,12 @@ }, /turf/open/floor/iron, /area/station/security/warden) +"pla" = ( +/obj/effect/landmark/start/cyborg, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/recharge_floor, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) "pld" = ( /obj/effect/turf_decal/siding/purple{ dir = 10 @@ -42975,16 +42964,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"pnw" = ( -/obj/structure/cable, -/obj/machinery/turretid{ - control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; - name = "AI Antechamber turret control"; - pixel_y = 27 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/ai_monitored/turret_protected/aisat/uppersouth) "pny" = ( /obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, @@ -43226,7 +43205,7 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"prL" = ( +"prS" = ( /obj/structure/sign/departments/psychology/directional/north, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -43574,21 +43553,14 @@ }, /turf/open/floor/engine/n2, /area/station/engineering/atmos) +"pxu" = ( +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "pxM" = ( /obj/machinery/shower/directional/south, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"pxO" = ( -/obj/structure/cable, -/obj/machinery/light/warm/dim/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/medical/chemistry/minisat) "pxR" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -43610,27 +43582,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"pyn" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Virology Lab"; - id_tag = "virology_airlock_exterior" - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/structure/cable, -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/machinery/door_buttons/access_button{ - dir = 1; - idDoor = "virology_airlock_exterior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Button"; - pixel_y = -24; - req_access = list("virology") - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) "pyo" = ( /obj/structure/cable, /obj/structure/disposalpipe/junction{ @@ -43689,19 +43640,17 @@ }, /turf/open/floor/iron, /area/station/security/interrogation) +"pyH" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/item/circuitboard/machine/cyborgrecharger, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) "pyK" = ( /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/engine) -"pyN" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/vending/wardrobe/engi_wardrobe, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron, -/area/station/engineering/main) "pyO" = ( /turf/open/openspace, /area/station/maintenance/port/greater) @@ -43799,22 +43748,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"pBh" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "antesat" - }, -/obj/machinery/door/airlock/hatch{ - name = "MiniSat Antechamber" - }, -/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, -/obj/structure/cable/layer3, -/obj/machinery/elevator_control_panel/directional/south{ - linked_elevator_id = "aisat"; - pixel_x = 8; - pixel_y = -29 - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "pBk" = ( /obj/machinery/power/tracker, /obj/structure/cable, @@ -44171,18 +44104,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/security/detectives_office) -"pGE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/paper/pamphlet/gateway, -/obj/structure/table, -/obj/item/flashlight/flare{ - pixel_x = 12 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron, -/area/station/command/gateway) "pGH" = ( /obj/machinery/door/airlock/external{ name = "Server Room" @@ -44583,10 +44504,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/textured, /area/station/security/interrogation) -"pOj" = ( -/obj/effect/spawner/random/trash/hobo_squat, -/turf/open/floor/iron/dark, -/area/station/maintenance/department/engine) "pOv" = ( /obj/structure/chair/pew{ dir = 4 @@ -44653,16 +44570,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/textured_large, /area/station/engineering/storage/tech) -"pQd" = ( -/obj/structure/transport/linear/public, -/obj/effect/landmark/transport/transport_id{ - specific_transport_id = "medbay1" - }, -/obj/machinery/elevator_control_panel/directional/south{ - linked_elevator_id = "medbay1" - }, -/turf/open/floor/plating/elevatorshaft, -/area/station/medical/treatment_center) "pQl" = ( /obj/effect/spawner/random/structure/closet_private, /obj/machinery/airalarm/directional/west, @@ -44741,6 +44648,23 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/warden) +"pRm" = ( +/obj/structure/cable/layer3, +/obj/machinery/button/elevator/directional/south{ + pixel_y = -25; + id = "aisat"; + pixel_x = 8 + }, +/obj/machinery/lift_indicator/directional/south{ + pixel_x = -6; + pixel_y = -40; + linked_elevator_id = "aisat" + }, +/obj/machinery/camera/autoname/directional/south{ + network = list("aicore") + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/ai) "pRq" = ( /obj/effect/turf_decal/trimline/yellow/arrow_cw{ dir = 9 @@ -44863,7 +44787,7 @@ /obj/structure/kitchenspike, /obj/machinery/light/directional/west, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "pTt" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -45106,6 +45030,16 @@ /obj/structure/cable, /turf/open/floor/iron/textured, /area/station/engineering/storage/tech) +"pWG" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "pWL" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/blood/tracks{ @@ -45211,6 +45145,14 @@ }, /turf/open/floor/wood, /area/station/commons/lounge) +"pYw" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/stool/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/uppernorth) "pYE" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -45275,6 +45217,23 @@ /obj/structure/railing, /turf/open/openspace, /area/station/science/xenobiology) +"qaz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/sign/directions/science/directional/north{ + dir = 4 + }, +/obj/structure/sign/directions/command/directional/north{ + pixel_y = 40; + dir = 8 + }, +/obj/structure/sign/directions/evac/directional/north{ + pixel_y = 24; + dir = 2 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "qaE" = ( /obj/effect/landmark/start/janitor, /obj/effect/decal/cleanable/dirt, @@ -45413,13 +45372,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/locker) -"qdu" = ( -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 4 - }, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron, -/area/station/command/bridge) "qdA" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -45448,12 +45400,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/textured, /area/station/cargo/miningoffice) -"qea" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, -/area/station/maintenance/port/lesser) "qeg" = ( /obj/machinery/pdapainter/security, /obj/machinery/camera/autoname/directional/north, @@ -45555,6 +45501,15 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"qgn" = ( +/obj/effect/turf_decal/tile/neutral{ + 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/station/command/heads_quarters/hop) "qgy" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/structure/railing/corner, @@ -45583,6 +45538,13 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/textured_large, /area/station/cargo/sorting) +"qgD" = ( +/obj/structure/closet/radiation, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "qgE" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -45909,6 +45871,14 @@ /obj/item/stamp/granted, /turf/open/floor/carpet/executive, /area/station/command/meeting_room) +"qms" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/station/hallway/secondary/command) "qmD" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage" @@ -45964,15 +45934,6 @@ }, /turf/open/floor/iron/white/smooth_half, /area/station/science/robotics/lab) -"qnU" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/firealarm/directional/west, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/engineering/main) "qob" = ( /obj/structure/table, /obj/item/stock_parts/micro_laser{ @@ -46105,6 +46066,19 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) +"qqq" = ( +/obj/structure/table/reinforced, +/obj/machinery/coffeemaker{ + pixel_y = 5 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/half, +/area/station/security/breakroom) "qqy" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/tcomms_all, @@ -46134,6 +46108,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/brig/entrance) +"qqL" = ( +/obj/item/kirbyplants/random, +/obj/structure/sign/directions/vault/directional/west, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/qm) "qqQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -46391,6 +46370,15 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/white, /area/station/science/genetics) +"qvV" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/item/radio/intercom/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "qvX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -46407,11 +46395,6 @@ }, /turf/open/floor/carpet/executive, /area/station/command/meeting_room) -"qwf" = ( -/obj/item/kirbyplants/random, -/obj/structure/sign/directions/vault/directional/west, -/turf/open/floor/carpet/red, -/area/station/command/heads_quarters/qm) "qwu" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -46419,6 +46402,10 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"qwB" = ( +/obj/item/shovel/spade, +/turf/open/floor/grass, +/area/station/security/prison/garden) "qwG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -46561,6 +46548,22 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/maintenance/radshelter/civil) +"qAo" = ( +/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/structure/sign/directions/security/directional/south{ + pixel_y = -24; + dir = 8 + }, +/obj/structure/sign/directions/supply/directional/south{ + dir = 8 + }, +/obj/structure/sign/directions/engineering/directional/south{ + pixel_y = -40 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "qAp" = ( /mob/living/basic/mining/goliath/ancient, /turf/open/misc/asteroid/airless, @@ -46648,15 +46651,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"qCp" = ( -/obj/machinery/button/elevator/directional/east{ - id = "aisat" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/ai_monitored/turret_protected/aisat_interior) "qCy" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -46914,6 +46908,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/upper) +"qHp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "qHs" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -46967,26 +46967,6 @@ /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, /area/station/maintenance/department/science) -"qIp" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "hopdesk" - }, -/obj/effect/landmark/navigate_destination/hop, -/obj/machinery/door/firedoor, -/obj/item/paper_bin, -/obj/item/pen, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/door/window/brigdoor/left/directional/west{ - req_access = list("hop") - }, -/obj/machinery/door/window/left/directional/east, -/turf/open/floor/iron, -/area/station/command/heads_quarters/hop) "qIr" = ( /obj/structure/railing/corner, /obj/effect/decal/cleanable/dirt/dust, @@ -47013,20 +46993,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"qJn" = ( -/obj/machinery/button/elevator/directional/east{ - id = "cargo" - }, -/obj/machinery/lift_indicator/directional/east{ - linked_elevator_id = "cargo" - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - 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/storage) "qJo" = ( /obj/structure/table/glass, /obj/effect/spawner/random/medical/medkit, @@ -47344,20 +47310,6 @@ /obj/machinery/coffeemaker, /turf/open/floor/iron/white/herringbone, /area/station/science/breakroom) -"qPJ" = ( -/obj/item/radio/intercom/directional/north, -/obj/structure/rack, -/obj/item/clothing/glasses/meson/engine, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/structure/cable, -/obj/item/trapdoor_remote/preloaded, -/obj/machinery/light_switch/directional/north{ - pixel_x = 26 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "qPN" = ( /obj/structure/disposalpipe/junction{ dir = 4 @@ -47682,6 +47634,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"qWs" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "qWt" = ( /obj/machinery/smartfridge/extract/preloaded, /obj/structure/sign/poster/random/directional/north, @@ -47959,6 +47918,16 @@ /obj/structure/sign/poster/random/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central) +"raX" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "hopdesk" + }, +/obj/machinery/door/firedoor, +/obj/effect/spawner/structure/window/hollow/reinforced/end, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/hop) "raZ" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -47982,6 +47951,32 @@ dir = 1 }, /area/station/command/bridge) +"rbs" = ( +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/ai_upload"; + icon_state = "control_stun"; + name = "AI Upload Turret Control"; + pixel_x = -28 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/left/directional/south, +/obj/effect/turf_decal/siding/purple{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/white, +/area/station/ai_monitored/turret_protected/ai_upload_foyer) +"rbt" = ( +/obj/machinery/door/airlock{ + name = "Kitchen Cold Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/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/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "rbw" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, @@ -48056,6 +48051,16 @@ }, /turf/open/floor/iron/checker, /area/station/maintenance/department/medical) +"rcz" = ( +/obj/machinery/computer/security{ + dir = 4 + }, +/obj/structure/sign/poster/official/random/directional/west, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "rcG" = ( /obj/machinery/mech_bay_recharge_port{ dir = 1 @@ -48434,6 +48439,14 @@ /obj/structure/sign/warning/vacuum/directional/east, /turf/open/floor/plating, /area/station/maintenance/department/science) +"rix" = ( +/obj/structure/closet/secure_closet/medical1, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/virology) "riE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -48658,6 +48671,12 @@ /obj/item/pen/red, /turf/open/floor/carpet, /area/station/service/lawoffice) +"rkI" = ( +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "rkL" = ( /obj/structure/table, /obj/structure/window/spawner/directional/east, @@ -49631,6 +49650,16 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark/small, /area/station/engineering/transit_tube) +"rBZ" = ( +/obj/structure/cable, +/obj/machinery/turretid{ + control_area = "/area/station/ai_monitored/turret_protected/aisat_interior"; + name = "AI Antechamber turret control"; + pixel_y = 27 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/ai_monitored/turret_protected/aisat/uppersouth) "rCd" = ( /obj/machinery/door/window/brigdoor/left/directional/east{ name = "Command Desk"; @@ -49758,6 +49787,13 @@ /obj/machinery/holopad, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"rDx" = ( +/obj/machinery/vending/wardrobe/viro_wardrobe, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/virology) "rDD" = ( /obj/structure/stairs/west, /turf/open/floor/iron/stairs/left{ @@ -49886,44 +49922,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/command/corporate_showroom) -"rFY" = ( -/obj/structure/table/reinforced/rglass, -/obj/machinery/button/door{ - normaldoorcontrol = 1; - specialfunctions = 4; - id = "secentrylock2"; - req_access = list("security"); - name = "Security Exit Lock"; - pixel_x = -4; - pixel_y = -1 - }, -/obj/machinery/button/door{ - normaldoorcontrol = 1; - specialfunctions = 4; - id = "secentrylock"; - pixel_y = 6; - req_access = list("security"); - name = "Security Entrance Lock"; - pixel_x = -4 - }, -/obj/machinery/button/flasher{ - pixel_x = 5; - id = "secentry"; - pixel_y = -1; - name = "entrance flasher button" - }, -/obj/machinery/button/door{ - pixel_x = 5; - pixel_y = 6; - name = "Security Entrance Doors"; - id = "secentrylock"; - normaldoorcontrol = 1 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/textured, -/area/station/security/warden) "rFZ" = ( /obj/machinery/atmospherics/components/trinary/mixer{ dir = 8; @@ -50049,6 +50047,16 @@ }, /turf/open/floor/iron/white, /area/station/science/lobby) +"rIf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/storage/medkit, +/obj/structure/table, +/obj/machinery/light/directional/south, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/command/gateway) "rIw" = ( /obj/machinery/light_switch/directional/north, /turf/open/floor/catwalk_floor/iron_dark, @@ -50153,6 +50161,15 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark/textured, /area/station/security/interrogation) +"rKq" = ( +/obj/structure/sign/warning/vacuum/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "rKW" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/bot_red, @@ -50179,6 +50196,17 @@ /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, /area/station/maintenance/department/medical) +"rLz" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable/layer1, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "rLJ" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/spawner/random/structure/girder, @@ -50239,7 +50267,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "rNJ" = ( /turf/closed/wall, /area/station/maintenance/solars/port/fore) @@ -50449,25 +50477,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/service/hydroponics) -"rRe" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/atmospherics, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) -"rRj" = ( -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - pixel_y = 24 - }, -/obj/machinery/button/door/incinerator_vent_atmos_main{ - pixel_y = 40 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "rRs" = ( /obj/structure/broken_flooring/corner/directional/north, /obj/effect/landmark/generic_maintenance_landmark, @@ -50726,16 +50735,45 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"rVD" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/sign/directions/supply/directional/east{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "rVL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/medical/chemistry) -"rVR" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) +"rVT" = ( +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) +"rWf" = ( +/obj/structure/sign/poster/official/cleanliness/directional/north, +/obj/effect/turf_decal/bot, +/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/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/cafeteria) "rWh" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -50960,6 +50998,15 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/prison/garden) +"rYe" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ + dir = 1 + }, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/box/red, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "rYg" = ( /obj/effect/landmark/event_spawn, /obj/machinery/holopad, @@ -51572,16 +51619,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"siO" = ( -/obj/structure/stairs/north, -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/sign/directions/arrival/directional/west{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "siR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -51875,28 +51912,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/interrogation) -"snc" = ( -/obj/machinery/door/window/brigdoor/right/directional/east{ - name = "Primary AI Core Access"; - req_access = list("ai_upload") - }, -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = 3; - pixel_y = -23 - }, -/obj/machinery/flasher/directional/north{ - id = "AI" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "AI Core shutters"; - name = "AI Core Shutters" - }, -/obj/structure/cable, -/turf/open/floor/circuit/green, -/area/station/ai_monitored/turret_protected/ai) "snj" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 @@ -51935,13 +51950,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"soc" = ( -/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 = 1 - }, -/area/station/command/bridge) "sok" = ( /obj/machinery/newscaster/directional/west, /obj/machinery/computer/records/medical/laptop, @@ -52334,6 +52342,24 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"sut" = ( +/obj/machinery/light/small/directional/south, +/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/structure/sign/directions/supply/directional/south{ + dir = 8 + }, +/obj/structure/sign/directions/engineering/directional/south{ + pixel_y = -40; + dir = 4 + }, +/obj/structure/sign/directions/security/directional/south{ + pixel_y = -24; + dir = 8 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "suw" = ( /obj/machinery/chem_master, /turf/open/floor/iron/dark/small, @@ -52528,6 +52554,7 @@ /area/station/engineering/atmos) "syF" = ( /obj/effect/landmark/start/prisoner, +/obj/item/plant_analyzer, /turf/open/floor/grass, /area/station/security/prison/garden) "syL" = ( @@ -52843,10 +52870,6 @@ }, /turf/open/misc/asteroid, /area/station/asteroid) -"sDQ" = ( -/obj/structure/sign/poster/contraband/communist_state/directional/east, -/turf/open/space/basic, -/area/space/nearstation) "sEe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53258,6 +53281,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/bar/backroom) +"sLr" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden, +/obj/machinery/airlock_sensor/incinerator_ordmix{ + pixel_y = -24 + }, +/turf/open/floor/engine, +/area/station/science/ordnance/burnchamber) "sLt" = ( /obj/machinery/camera/autoname/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -53589,6 +53622,14 @@ dir = 1 }, /area/station/command/bridge) +"sRP" = ( +/obj/machinery/photocopier, +/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, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "sRU" = ( /obj/machinery/light/small/dim/directional/south, /obj/item/paper_bin, @@ -53703,6 +53744,12 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"sUD" = ( +/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/maintenance/central/lesser) "sUI" = ( /obj/machinery/door/airlock{ name = "Kitchen Cold Room" @@ -53711,7 +53758,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "sUM" = ( /obj/item/radio/intercom/directional/west, /turf/open/openspace, @@ -53732,15 +53779,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"sVG" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "sVM" = ( /obj/machinery/door/airlock/public/glass{ name = "Garden" @@ -53827,6 +53865,20 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"sXf" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/multitool, +/obj/item/wrench, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "sXG" = ( /obj/effect/turf_decal/tile/purple/opposingcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54276,6 +54328,13 @@ }, /turf/open/space/basic, /area/space/nearstation) +"tgv" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron/textured, +/area/station/security/warden) "tgw" = ( /obj/machinery/power/smes/full, /obj/structure/cable, @@ -55047,18 +55106,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"tsV" = ( -/obj/machinery/lift_indicator/directional/north{ - linked_elevator_id = "cargo" - }, -/obj/machinery/button/elevator/directional/north{ - id = "cargo" - }, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "tsX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/biohazard, @@ -55194,16 +55241,6 @@ }, /turf/open/floor/wood/parquet, /area/station/service/theater) -"tvr" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/iron, -/area/station/engineering/main) "tvB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -55240,20 +55277,17 @@ /obj/structure/kitchenspike, /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "txo" = ( /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/engine, /area/station/command/corporate_dock) -"txp" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/item/radio/intercom/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/virology) +"txw" = ( +/obj/structure/table, +/obj/effect/spawner/round_default_module, +/obj/machinery/flasher/directional/north, +/turf/open/floor/circuit/red, +/area/station/ai_monitored/turret_protected/ai_upload) "txx" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -55328,19 +55362,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/security/office) -"tzq" = ( -/obj/structure/table/reinforced, -/obj/machinery/coffeemaker{ - pixel_y = 5 - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron/half, -/area/station/security/breakroom) "tzs" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron, @@ -55543,15 +55564,6 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron, /area/station/engineering/lobby) -"tCl" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/east{ - name = "Security Desk"; - req_access = list("security") - }, -/obj/item/hand_labeler, -/turf/open/floor/iron, -/area/station/security/brig/entrance) "tCm" = ( /obj/effect/landmark/event_spawn, /obj/structure/chair/wood{ @@ -55753,14 +55765,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"tFq" = ( -/obj/structure/closet/secure_closet/medical1, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/white, -/area/station/medical/virology) "tFD" = ( /obj/structure/sink/directional/west, /obj/structure/mirror/directional/east, @@ -56030,6 +56034,17 @@ }, /turf/open/floor/iron, /area/station/maintenance/solars/starboard/fore) +"tKX" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/bridge) "tLa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56237,6 +56252,16 @@ "tNE" = ( /turf/open/floor/plating, /area/station/maintenance/aft/upper) +"tNK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos, +/obj/machinery/airlock_sensor/incinerator_atmos{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/south, +/turf/open/floor/engine, +/area/station/maintenance/disposal/incinerator) "tNN" = ( /obj/effect/decal/cleanable/blood/old{ icon_state = "floor6-old" @@ -57068,6 +57093,13 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/textured, /area/station/security/processing) +"uca" = ( +/obj/machinery/modular_computer/preset/engineering, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "ucb" = ( /obj/effect/spawner/random/structure/closet_empty/crate/with_loot, /turf/open/floor/plating, @@ -57154,6 +57186,14 @@ /obj/effect/spawner/random/bureaucracy/pen, /turf/open/floor/iron, /area/station/engineering/main) +"uei" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/valve/digital/on{ + dir = 4; + name = "Cooling Loop Bypass" + }, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "uep" = ( /obj/item/cardboard_cutout/nuclear_operative, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57293,6 +57333,11 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/qm) +"ugJ" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/closet, +/turf/open/floor/iron/dark, +/area/station/maintenance/department/engine) "ugN" = ( /obj/machinery/door/airlock/highsecurity{ name = "Secure Tech Storage" @@ -57468,6 +57513,16 @@ /obj/structure/closet/crate/bin, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"ujv" = ( +/obj/structure/stairs/north, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/sign/directions/arrival/directional/west{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "ujx" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/chair/plastic{ @@ -57507,6 +57562,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/port) +"ukv" = ( +/obj/machinery/lift_indicator/directional/west{ + linked_elevator_id = "medbay1" + }, +/obj/machinery/button/elevator/directional/west{ + id = "medbay1" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "ukw" = ( /obj/effect/turf_decal/siding/purple{ dir = 6 @@ -57697,6 +57764,15 @@ /obj/structure/chair/office, /turf/open/floor/iron, /area/station/cargo/storage) +"unH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer5{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/maintenance/disposal/incinerator) "unL" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/random/directional/south, @@ -57832,6 +57908,21 @@ /obj/effect/spawner/random/trash/food_packaging, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"uqM" = ( +/obj/structure/table/reinforced, +/obj/item/stamp/head/ce, +/obj/item/folder/yellow, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/cable, +/obj/machinery/keycard_auth/wall_mounted/directional/west{ + pixel_y = -10 + }, +/obj/item/pen/screwdriver, +/obj/item/stamp/head/ce, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "ura" = ( /obj/structure/closet/crate/science{ opened = 1; @@ -57961,6 +58052,14 @@ }, /turf/open/floor/grass, /area/station/service/hydroponics/garden) +"usL" = ( +/obj/machinery/lift_indicator{ + pixel_y = -3; + pixel_x = -6; + linked_elevator_id = "aisat" + }, +/turf/closed/wall/r_wall, +/area/station/ai_monitored/turret_protected/aisat_interior) "usQ" = ( /obj/effect/turf_decal/tile/yellow, /obj/item/kirbyplants/random, @@ -58428,14 +58527,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"uCd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "uCj" = ( /obj/effect/turf_decal/tile/blue/opposingcorners, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -58681,13 +58772,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"uGg" = ( -/obj/machinery/modular_computer/preset/engineering, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/command/heads_quarters/ce) "uGv" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -59061,13 +59145,6 @@ /obj/effect/turf_decal/siding/white, /turf/open/floor/iron/herringbone, /area/station/commons/fitness/recreation) -"uNx" = ( -/obj/machinery/airlock_controller/incinerator_atmos{ - pixel_x = 32 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "uNy" = ( /obj/structure/table, /obj/item/assembly/igniter, @@ -59205,6 +59282,20 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/large, /area/station/service/hydroponics/garden) +"uPg" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/lift_indicator/directional/south{ + linked_elevator_id = "medbay1"; + pixel_x = -32 + }, +/obj/machinery/button/elevator/directional/south{ + id = "medbay1"; + pixel_x = -32 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "uPi" = ( /obj/effect/turf_decal/tile/brown/half/contrasted, /obj/effect/decal/cleanable/dirt, @@ -59295,17 +59386,6 @@ }, /turf/open/floor/wood, /area/station/service/theater) -"uRn" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/box/red, -/obj/machinery/light/directional/south, -/obj/machinery/camera/autoname/directional/west{ - network = list("ss13","rd") - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "uRG" = ( /turf/open/openspace, /area/station/security/prison/shower) @@ -59364,6 +59444,17 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, /area/station/science/server) +"uTk" = ( +/obj/machinery/light/warm/dim/directional/north, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/chemistry/minisat) "uTy" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -59722,7 +59813,7 @@ "uZg" = ( /obj/machinery/icecream_vat, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen) +/area/station/service/kitchen/coldroom) "uZx" = ( /turf/closed/wall, /area/station/hallway/primary/central) @@ -59746,6 +59837,13 @@ }, /turf/open/floor/iron, /area/station/security) +"vas" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/engineering/main) "vau" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -59758,6 +59856,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"vay" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/regular, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "vaC" = ( /turf/open/floor/catwalk_floor/iron_dark, /area/station/command/corporate_dock) @@ -59959,9 +60065,28 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"vfG" = ( +/obj/structure/sign/warning/vacuum/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "vfJ" = ( /turf/closed/wall, /area/station/maintenance/department/science) +"vfL" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/sign/warning/vacuum/external/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "vfM" = ( /obj/effect/landmark/start/depsec/science, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -60041,14 +60166,6 @@ /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/medical/central) -"vhq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/binary/valve/digital/on{ - dir = 4; - name = "Cooling Loop Bypass" - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "vhz" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -60066,15 +60183,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/service/bar/backroom) -"vhR" = ( -/obj/effect/turf_decal/tile/neutral{ - 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/station/command/heads_quarters/hop) "vhT" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -60130,12 +60238,6 @@ /obj/structure/flora/bush/grassy/style_random, /turf/open/floor/grass, /area/station/science/research) -"vje" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "vji" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow{ @@ -60215,14 +60317,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/disposal) -"vke" = ( -/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/main) "vkn" = ( /obj/machinery/firealarm/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -60394,6 +60488,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"vno" = ( +/obj/machinery/fax{ + fax_name = "Chief Engineer's Office"; + name = "Chief Engineer's Fax Machine" + }, +/obj/structure/table/reinforced, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/command/heads_quarters/ce) "vnr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ @@ -60598,15 +60705,9 @@ /turf/open/floor/iron, /area/station/engineering/lobby) "vqN" = ( +/obj/machinery/vending/cytopro, /turf/open/floor/iron/dark/small, /area/station/science/cytology) -"vqW" = ( -/obj/structure/closet/radiation, -/obj/effect/turf_decal/delivery, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, -/turf/open/floor/iron, -/area/station/maintenance/disposal/incinerator) "vqY" = ( /obj/structure/table, /obj/item/clipboard, @@ -60697,15 +60798,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"vug" = ( -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "vuh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -60740,6 +60832,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/service/theater) +"vvE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "vvG" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -60922,16 +61018,6 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron/white, /area/station/science/auxlab/firing_range) -"vzl" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/door/window/brigdoor/left/directional/north, -/obj/effect/turf_decal/siding/purple{ - dir = 8 - }, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/white, -/area/station/ai_monitored/turret_protected/ai_upload_foyer) "vzu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -60952,23 +61038,6 @@ }, /turf/open/floor/grass, /area/station/medical/chemistry) -"vzJ" = ( -/obj/structure/cable/layer3, -/obj/machinery/button/elevator/directional/south{ - pixel_y = -25; - id = "aisat"; - pixel_x = 8 - }, -/obj/machinery/lift_indicator/directional/south{ - pixel_x = -6; - pixel_y = -40; - linked_elevator_id = "aisat" - }, -/obj/machinery/camera/autoname/directional/south{ - network = list("aicore") - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/ai_monitored/turret_protected/ai) "vzP" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -61066,15 +61135,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, /area/station/commons/locker) -"vAX" = ( -/obj/structure/sign/warning/vacuum/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "vAY" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/tile/neutral, @@ -61306,6 +61366,13 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/station/maintenance/central/lesser) +"vFz" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table/reinforced, +/obj/machinery/light/small/dim/directional/east, +/obj/item/coin/titanium, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat/foyer) "vFD" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/west{ id = "Cell 4"; @@ -61460,28 +61527,6 @@ }, /turf/open/floor/wood/tile, /area/station/security/courtroom) -"vHm" = ( -/obj/machinery/door/airlock/virology/glass{ - name = "Virology Lab"; - id_tag = "virology_airlock_interior" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/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/green/fourcorners, -/obj/machinery/door_buttons/access_button{ - idDoor = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Button"; - pixel_x = -24; - pixel_y = 8; - req_access = list("virology") - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/virology) "vHA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61727,6 +61772,24 @@ /obj/machinery/door/poddoor/incinerator_ordmix, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) +"vNc" = ( +/obj/machinery/modular_computer/preset/id{ + dir = 1 + }, +/obj/machinery/button/flasher{ + id = "hopflash"; + pixel_x = 24; + pixel_y = 8 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/obj/machinery/requests_console/auto_name/directional/south, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/announcement, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "vNd" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -62430,6 +62493,15 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/surgery/theatre) +"vZP" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Security Desk"; + req_access = list("security") + }, +/obj/item/hand_labeler, +/turf/open/floor/iron, +/area/station/security/brig/entrance) "vZX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62603,14 +62675,6 @@ }, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"wde" = ( -/obj/structure/railing, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 6 - }, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/engineering/main) "wdm" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -62728,6 +62792,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/warden) +"wfi" = ( +/obj/effect/turf_decal/stripes{ + 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/engine, +/area/station/engineering/supermatter/room) "wfl" = ( /obj/effect/landmark/atmospheric_sanity/ignore_area, /turf/closed/wall/r_wall, @@ -62871,16 +62944,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/white/smooth_large, /area/station/science/ordnance/storage) -"wiX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/item/storage/medkit, -/obj/structure/table, -/obj/machinery/light/directional/south, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron, -/area/station/command/gateway) "wje" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /obj/machinery/door/poddoor/preopen{ @@ -62994,14 +63057,6 @@ /obj/item/storage/crayons, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"wkV" = ( -/obj/effect/turf_decal/tile/dark_blue, -/obj/effect/mapping_helpers/mail_sorting/service/hop_office, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "wkX" = ( /mob/living/basic/mining/hivelord, /turf/open/misc/asteroid/airless, @@ -63150,17 +63205,6 @@ dir = 8 }, /area/station/science/xenobiology) -"wnH" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable/layer1, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "wnL" = ( /turf/open/floor/plating, /area/station/medical/medbay/central) @@ -63676,6 +63720,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"wxH" = ( +/obj/structure/chair/comfy/brown{ + dir = 4; + name = "Captain" + }, +/turf/open/floor/carpet/executive, +/area/station/command/meeting_room) "wxQ" = ( /obj/machinery/computer/operating{ dir = 8 @@ -64410,6 +64461,10 @@ "wJy" = ( /turf/closed/wall, /area/station/medical/storage) +"wJC" = ( +/obj/structure/sign/poster/contraband/communist_state/directional/east, +/turf/open/space/basic, +/area/space/nearstation) "wJN" = ( /obj/machinery/space_heater/improvised_chem_heater, /turf/open/floor/plating, @@ -64666,6 +64721,17 @@ }, /turf/open/floor/iron/textured_large, /area/station/service/hydroponics/garden) +"wOn" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Ordnance Lab" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/science/ordnance, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "wOo" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/ai_upload) @@ -64816,14 +64882,6 @@ "wSf" = ( /turf/open/floor/iron/white, /area/station/medical/exam_room) -"wSh" = ( -/obj/machinery/photocopier, -/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, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "wSi" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -65265,6 +65323,14 @@ }, /turf/open/floor/catwalk_floor/iron_white, /area/station/science/lobby) +"xas" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/machinery/vending/wallmed/directional/south, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "xay" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65287,6 +65353,22 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"xaH" = ( +/obj/structure/filingcabinet, +/obj/machinery/button/ticket_machine{ + pixel_x = 24; + pixel_y = 6 + }, +/obj/machinery/button/door/directional/east{ + id = "hopdesk"; + name = "desk shutter control"; + pixel_y = -6 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "xaI" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/dark_blue{ @@ -65502,19 +65584,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/hallway/secondary/command) -"xet" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/bot_red, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "xey" = ( /obj/machinery/camera/autoname/directional/west, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -65535,11 +65604,6 @@ dir = 9 }, /area/station/command/corporate_dock) -"xeI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "xeJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -65631,18 +65695,6 @@ }, /turf/open/openspace, /area/station/science/xenobiology) -"xgw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/machinery/firealarm/directional/south, -/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/minisat) "xgG" = ( /turf/closed/wall/rust, /area/station/maintenance/department/medical/central) @@ -65730,13 +65782,6 @@ }, /turf/open/floor/iron/herringbone, /area/station/commons/fitness/recreation) -"xiz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "xiC" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/light/small/dim/directional/east, @@ -65883,6 +65928,12 @@ }, /turf/open/floor/engine, /area/station/hallway/secondary/entry) +"xla" = ( +/obj/structure/table, +/obj/item/ai_module/core/full/dungeon_master, +/obj/structure/cable, +/turf/open/floor/circuit, +/area/station/ai_monitored/turret_protected/ai_upload) "xlm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/frame/machine, @@ -65936,11 +65987,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/exit/departure_lounge) -"xlO" = ( -/obj/effect/turf_decal/stripes, -/obj/structure/cable, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "xlX" = ( /obj/machinery/duct, /obj/structure/cable, @@ -66178,16 +66224,6 @@ /obj/item/stack/rods/ten, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"xqZ" = ( -/obj/machinery/computer/security{ - dir = 4 - }, -/obj/structure/sign/poster/official/random/directional/west, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "xrb" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -66469,10 +66505,6 @@ /obj/structure/cable, /turf/open/floor/carpet/black, /area/station/command/heads_quarters/hos) -"xvz" = ( -/obj/machinery/button/ignition/incinerator/atmos, -/turf/closed/wall/r_wall, -/area/station/maintenance/disposal/incinerator) "xvH" = ( /obj/machinery/door/airlock/grunge{ name = "Quiet Room" @@ -66701,25 +66733,6 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"xzO" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/turf_decal/tile/neutral, -/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/structure/sign/directions/evac/directional/south, -/obj/structure/sign/directions/medical/directional/south{ - pixel_y = -24; - dir = 8 - }, -/obj/structure/sign/directions/science/directional/south{ - pixel_y = -40; - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "xzP" = ( /mob/living/carbon/human/species/monkey, /obj/structure/flora/bush/sparsegrass/style_random, @@ -66793,6 +66806,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"xAR" = ( +/obj/machinery/button/elevator/directional/east{ + id = "aisat" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/ai_monitored/turret_protected/aisat_interior) "xAV" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -66900,13 +66922,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/parquet, /area/station/cargo/boutique) -"xCH" = ( -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "xCI" = ( /obj/structure/broken_flooring/side/directional/east, /obj/effect/decal/cleanable/dirt/dust, @@ -67051,6 +67066,12 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"xFh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/port/lesser) "xFt" = ( /obj/structure/railing/corner{ dir = 4 @@ -67117,6 +67138,19 @@ /obj/item/storage/box/monkeycubes, /turf/open/floor/iron/white/textured_large, /area/station/science/xenobiology) +"xGX" = ( +/obj/machinery/pdapainter{ + pixel_y = 2 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/item/storage/box/stickers{ + pixel_y = 16 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "xGY" = ( /obj/item/radio/intercom/directional/south, /turf/open/floor/engine, @@ -67140,6 +67174,17 @@ /obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2, /turf/open/floor/plating, /area/station/command/corporate_showroom) +"xHT" = ( +/obj/structure/cable, +/obj/machinery/light/warm/dim/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/white, +/area/station/medical/chemistry/minisat) "xHY" = ( /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) @@ -67252,16 +67297,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"xKd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_atmos, -/obj/machinery/airlock_sensor/incinerator_atmos{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/directional/south, -/turf/open/floor/engine, -/area/station/maintenance/disposal/incinerator) "xKh" = ( /obj/structure/closet/wardrobe/miner, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ @@ -67370,6 +67405,26 @@ }, /turf/open/floor/iron/dark/textured, /area/station/medical/morgue) +"xNb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + id = "capshut"; + pixel_x = -8; + name = "shutter control" + }, +/obj/machinery/fax{ + fax_name = "Captain's Office"; + name = "Captain's Fax Machine" + }, +/obj/structure/table/reinforced, +/obj/machinery/keycard_auth/wall_mounted/directional/south{ + pixel_y = -24; + pixel_x = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/captain/private) "xNh" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -67753,12 +67808,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/smooth_large, /area/station/science/research) -"xVi" = ( -/obj/structure/table, -/obj/effect/spawner/round_default_module, -/obj/machinery/flasher/directional/north, -/turf/open/floor/circuit/red, -/area/station/ai_monitored/turret_protected/ai_upload) "xVk" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -68351,14 +68400,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"yfp" = ( -/obj/machinery/lift_indicator{ - pixel_y = -3; - pixel_x = -6; - linked_elevator_id = "aisat" - }, -/turf/closed/wall/r_wall, -/area/station/ai_monitored/turret_protected/aisat_interior) "yfw" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/spawner/random/entertainment/lighter, @@ -68645,15 +68686,6 @@ "ylj" = ( /turf/open/floor/circuit, /area/station/science/robotics/lab) -"ylk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sign/directions/dorms/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "ylm" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -68713,6 +68745,10 @@ /obj/item/stamp/head/rd, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) +"ylS" = ( +/obj/machinery/button/ignition/incinerator/atmos, +/turf/closed/wall/r_wall, +/area/station/maintenance/disposal/incinerator) "ylV" = ( /turf/closed/wall, /area/station/security/checkpoint/supply) @@ -80497,7 +80533,7 @@ nvp tZO lGJ dGG -keE +kcr tUo sye hgN @@ -82473,7 +82509,7 @@ dUc xrb xrb nPw -dEG +qwB iqf cKn pjt @@ -82810,7 +82846,7 @@ pwn isy hSB cnd -imh +uPg bui yit dpf @@ -82985,7 +83021,7 @@ cLf dUc cLf xrb -nEx +hAS syF ckc sqk @@ -83066,12 +83102,12 @@ fvo lcM isy isy -ajy +lJo crz bui yit yit -pQd +gft cBb cBb cBb @@ -83288,7 +83324,7 @@ tnO gtj gli gli -cTu +beS bGq ehP uyL @@ -83756,7 +83792,7 @@ cLf iUF cLf sNu -nEx +hAS rXZ vjm hbw @@ -84061,7 +84097,7 @@ rzg xrH jCX sdc -tsV +lwW uyL esN fXZ @@ -86600,7 +86636,7 @@ fAR keQ ftK jza -tzq +qqq pWB jiy mJx @@ -87117,7 +87153,7 @@ jza vEX hEI gHS -kxh +drl mGG gkt kcA @@ -87134,7 +87170,7 @@ xNq tqN bPZ aSZ -dKM +rWf lsJ nVT koA @@ -87942,7 +87978,7 @@ bGD nxG nxG nxG -ous +hpB nxG nxG tuA @@ -88409,8 +88445,8 @@ uJO azb rRK rRK -lVE -tCl +ava +vZP qvK rRK rRK @@ -88430,7 +88466,7 @@ kmu dxT tCE xMk -hmJ +rVD deY aQS vTx @@ -88459,7 +88495,7 @@ prW prW prW prW -ktk +dvz prW tOm hDK @@ -88681,7 +88717,7 @@ aSZ rjs fNp aSZ -abH +eGz qRr kmu dxT @@ -89207,7 +89243,7 @@ bSC pSk hUI noF -pGE +lop bAw xEW hDV @@ -89239,7 +89275,7 @@ jNJ pUY kJT hgV -sDQ +wJC dUc uuN gJE @@ -89464,7 +89500,7 @@ cOR ufV jVI noF -wiX +rIf bAw ign iIB @@ -89711,7 +89747,7 @@ rjX rjX iXj rjX -eMi +oez tHF hqz bAw @@ -89968,7 +90004,7 @@ oGB qyz ahI rjX -jLd +lyJ tHF tCE bAw @@ -90486,7 +90522,7 @@ kmu qbA mMC bAw -fLF +egN joL ttT koG @@ -91282,7 +91318,7 @@ isH agu lpE kAg -siO +ujv kmu hGE nxG @@ -92765,7 +92801,7 @@ cLf fZF mGX clb -ghN +jmP mSf axD fYe @@ -93319,10 +93355,10 @@ bIi acc jrX gGm -enu -enu -enu -enu +mMT +mMT +mMT +mMT edv eBb hRB @@ -93538,7 +93574,7 @@ csW wMy toJ dGh -hvB +jqu hrM cLf dUc @@ -93572,15 +93608,15 @@ dTU pMD acc kYl -nFk +sUD dGc fDN -enu -enu +mMT +mMT twW pTn -enu -enu +mMT +mMT hwk hRB jkF @@ -93610,7 +93646,7 @@ hUS hUS hUS qtP -vAX +vfG vew buI pSK @@ -93795,7 +93831,7 @@ uMA pGf qtg nbm -cpR +iDJ hrM cLf dUc @@ -93832,12 +93868,12 @@ heh jUd acc fDN -enu +mMT uZg byb rNs -rNs -sUI +nlz +rbt cXL enu tGt @@ -94052,7 +94088,7 @@ sqo gHX hAg csW -bao +fzx hrM cLf sgz @@ -94089,12 +94125,12 @@ acc acc acc fDN -enu +mMT oBU aAg cYH aJv -enu +mMT drJ shG vMb @@ -94309,7 +94345,7 @@ jpd jRc ruc jcW -jVn +xNb axD eKR sgz @@ -94324,7 +94360,7 @@ sSX agw bUj sgz -bdY +cIa lDn uZx aFJ @@ -94346,12 +94382,12 @@ acB jmn atX mUW -enu +mMT fNy rNs rNs dCh -enu +mMT alP enu nii @@ -94369,7 +94405,7 @@ rjn kmu rFV tOm -ihJ +sut hzF hzF hjo @@ -94575,8 +94611,8 @@ puT tsP wNa jSs -lct -dRF +jzC +mcw aKg pmC qka @@ -94603,12 +94639,12 @@ gGS bcu bcu pPy -enu -enu +mMT +mMT sUI -enu -enu -enu +mMT +mMT +mMT duS pQM pYu @@ -94818,11 +94854,11 @@ cLf bqX bqX bhY -xqZ -fks +rcz +eYO mrq eBK -soc +bQc neH nZB fCY @@ -94832,13 +94868,13 @@ fZr bUM vGz sgz -wSh -vhR +sRP +qgn wsS eXM -mvT +xGX sgz -hWR +dFM lUp uZx rqj @@ -95074,7 +95110,7 @@ cLf cLf bqX ogH -nXf +aeJ xcs tYQ tYQ @@ -95089,11 +95125,11 @@ cdX pLO sFB sgz -gEL -vug -fRP +xaH +mnI +jqT sKF -aHq +vNc sgz mKD xeo @@ -95347,9 +95383,9 @@ vVr sgz sgz sgz -hGX -qIp -kat +raX +bbf +cTc sgz sgz kJp @@ -95397,7 +95433,7 @@ oGX kmu aly dxT -xzO +nBA hzF hzF eGn @@ -95594,18 +95630,18 @@ kXN klL raA eKR -ill +mlG gkQ bRN -fjo +sXf eKR lkQ dhl fbC -lAb +qms auM -bPo -xet +hvt +iwm aBy mhG jDT @@ -95862,7 +95898,7 @@ kaz dbJ mMH sPS -wkV +jww btw btw btw @@ -96180,7 +96216,7 @@ cSb cSb cSb qtP -axP +rKq vew uIW hSg @@ -96365,7 +96401,7 @@ efb rCd kNX eKR -kvf +tKX kZg nPm yjH @@ -96373,7 +96409,7 @@ eKR lkQ qrh kPv -guS +lQl vFf ylz iFv @@ -96873,7 +96909,7 @@ cLf cLf bqX cQP -hhG +vay eon sZK sZK @@ -97136,7 +97172,7 @@ kYU jTd rkz lrc -qdu +eHa ktI ita hOb @@ -97154,7 +97190,7 @@ juw pSO xYn pSO -ner +jaa qbA tCE mJR @@ -97649,7 +97685,7 @@ cLf eKR iSE viK -mWV +oIV peL bkb juw @@ -100793,8 +100829,8 @@ prW anT prW sOA -muW -cNW +bVA +aKJ jqj dxT aQS @@ -101523,9 +101559,9 @@ bDy irx gyl gvF -dJY +qaz tHF -fpT +qAo uZx fDa eMG @@ -101797,7 +101833,7 @@ nxG nxG hjJ nxG -ylk +glH iAE xAm nMR @@ -101827,7 +101863,7 @@ dct hqk jFc jFc -rVR +iOc adV usQ ltS @@ -102010,11 +102046,11 @@ lPj cqm srs oyO -dLp +pyH gHQ iJP kee -kwi +jbM ncc srs sYI @@ -102267,11 +102303,11 @@ fxo vDK srs eJQ -jop -fZA +vFz +kbv xkc kee -eWE +jBg qjp srs iVK @@ -102526,8 +102562,8 @@ dZy wHJ wHJ wHJ -pBh -yfp +mDP +usL wHJ kTx kYu @@ -104325,7 +104361,7 @@ wze aby hGZ wZz -ieG +cdo wZz ipR kYu @@ -106124,7 +106160,7 @@ fOM jTg ajU wZz -efj +cSa wZz odg hwP @@ -106421,7 +106457,7 @@ rXT kNk bwQ mEs -qea +xFh lPe lPe lPe @@ -108002,7 +108038,7 @@ apK bTt svK ulc -lQJ +kCr uFb gLq lrk @@ -108257,9 +108293,9 @@ aWD aWD aWD aWD -aUm +ugJ mIY -pOj +eLk aWD aWD aWD @@ -109497,7 +109533,7 @@ jLY rSh xJR gOY -kot +wOn gOY gOY cxg @@ -109537,7 +109573,7 @@ oAn aWD aWD cNM -vke +mCb xCf urc xCf @@ -109753,9 +109789,9 @@ lCw fDz fDz fDz -vje +bPc efJ -uRn +ofG gOY cxg cxg @@ -109794,7 +109830,7 @@ cXn vNk oHA xfi -cWW +jtS rhS rhS equ @@ -110011,8 +110047,8 @@ fDz xTs fDz fDz -iwA -fCo +rkI +rYe gOY gOY cxg @@ -110051,7 +110087,7 @@ eFM xCf xCf xCf -jbI +cYB rhS rhS rhS @@ -110305,7 +110341,7 @@ vUr eus aWD qWG -fQS +vas fMW cfJ ybD @@ -110562,7 +110598,7 @@ vUb uMq aWD mkL -ibe +qHp uFC uFC jnY @@ -110782,7 +110818,7 @@ tGW tGW nli pLk -glu +vvE aWM vzP gOY @@ -110819,7 +110855,7 @@ vUb nZH uFC jnY -fdZ +oUb uFC lNk sJG @@ -111039,7 +111075,7 @@ tvB tRZ nkM vxZ -kkW +dyS lfq mDx gOY @@ -111295,9 +111331,9 @@ tTK oEP vBN xfQ -kvA +cAG xXF -gbw +sLr mDx cxg cxg @@ -111591,9 +111627,9 @@ xxi uFC eBZ kpn -lMd -lMd -lMd +pxu +pxu +pxu oyV axQ yho @@ -111847,9 +111883,9 @@ tbk rkp uFC boT -dQa +kAh wCm -xiz +qWs utV gea xaP @@ -112106,7 +112142,7 @@ uFC uFC uFC uFC -nAD +lwv nPW oyV xaP @@ -112363,7 +112399,7 @@ kUX vxX vxX uFC -gxd +cUD nPW oyV xaP @@ -112620,7 +112656,7 @@ kUX vxX vxX uFC -nfR +pbD nPW oyV kiT @@ -112877,7 +112913,7 @@ kUX vxX vxX uFC -jWv +biG nPW oyV xaP @@ -113135,7 +113171,7 @@ vxX vxX uFC lCu -lMd +pxu oyV xaP xIV @@ -113147,9 +113183,9 @@ xIV xIV xIV xIV -wnH -vhq -xlO +rLz +uei +nNN jnY fnI mlk @@ -113396,7 +113432,7 @@ kQF bHH sBe ceu -jHO +gTe wFG sji cjV @@ -113404,9 +113440,9 @@ sGE wFG wFG nxc -jVT +pWG icr -xCH +jHz jnY xzT dqK @@ -113653,7 +113689,7 @@ nPW oVs oVs oVs -xeI +dtY oVs mYD fXc @@ -113661,9 +113697,9 @@ gas oVs pUa acG -cnA +kFO acG -mmG +fEm anu auD dqK @@ -113907,20 +113943,20 @@ vxX uFC spr xcm -uCd -lGQ +jQs +luq ddO xcm xcm -ayb -lym -nnw +rVT +hLq +kWI xcm sWN -dwt -lzX -hPG -mte +wfi +cXy +vfL +mWh jnY tgr mlk @@ -142420,8 +142456,8 @@ guN vYz vYz gHN -fgY -xgw +uTk +hro eYP eYP rup @@ -143192,7 +143228,7 @@ vYz aUf eYP fkF -pxO +xHT gHN hhX hhX @@ -147803,7 +147839,7 @@ oZQ oZQ oZQ rXd -qwf +qqL mUi fpx rDE @@ -148338,7 +148374,7 @@ sZH pWr pNW ahq -hsm +kuI sKt kSU uXQ @@ -148346,7 +148382,7 @@ bHc tBo jCN gbF -gHh +ukv uOJ evQ evQ @@ -148597,12 +148633,12 @@ qml ahq qDH dzA -mqI +mZr wWu jaf gey cDD -prL +prS asz uOJ evQ @@ -148824,7 +148860,7 @@ pic gli gBq gBq -qJn +dPk gBq oAH uaN @@ -149597,7 +149633,7 @@ oZQ oZQ oZQ sdc -tsV +lwW uyL uSA wDv @@ -149823,8 +149859,8 @@ tIr idB mQo kUG -rFY -flW +dkq +tgv peD vjA pIF @@ -151430,7 +151466,7 @@ eCR xck ljZ xhJ -txp +qvV aOm aOm aOm @@ -151687,7 +151723,7 @@ ezF xnq qJo xhJ -hYT +keg unE oZt vZj @@ -151945,7 +151981,7 @@ xnq pTw xhJ oZt -pyn +fQG oZt oZt oZt @@ -152205,7 +152241,7 @@ tHA hsE etg oZt -dZr +rDx hPb fnU xzP @@ -152452,17 +152488,17 @@ xhJ kpP gvw gvw -sVG +oRR nAs wYY tSn -lnQ +xas xhJ -cjG +mfP xOF dgS -vHm -cJb +kzI +cNk gtO gcy aRN @@ -152709,7 +152745,7 @@ xhJ iDw plH gvw -fln +eOI xYZ jlb whG @@ -152719,7 +152755,7 @@ cgB kHw teV oZt -tFq +rix ixR qro hOh @@ -152976,7 +153012,7 @@ oZt oZt oZt oZt -mST +nZb fPi iHL rwq @@ -153223,17 +153259,17 @@ vxX vxX vxX gvw -euC -cwi -jYw +gjt +jEf +kQV uKv -fer +evg gvw vxX vxX vxX oZt -mNa +jCU tkh cgw fMY @@ -161126,9 +161162,9 @@ uRI kCs rxW lFG -oMQ +wxH tbZ -coD +lLC sBl eYF lYL @@ -165747,11 +165783,11 @@ pHA pHA pHA wOo -xVi +txw erY qHx eWO -muq +daz wOo pHA pHA @@ -166008,7 +166044,7 @@ iJg ebs cWr oVG -cKS +xla wOo bFS bFS @@ -166775,11 +166811,11 @@ bFS bFS bFS mbL -hsI -vzl +pla +iIT vJG -crm -aAK +rbs +gGh mbL bFS bFS @@ -168571,12 +168607,12 @@ jVV mQE hPx fNk -dgP +pYw wHJ hfH sIW hNC -nFO +gQs hNC sIW gBx @@ -169085,7 +169121,7 @@ cxg mQE mQE gwF -ciC +eaW wHJ dqA sIW @@ -169095,7 +169131,7 @@ ciR sIW dfd wHJ -pnw +rBZ lPi meH sJT @@ -169344,13 +169380,13 @@ imZ mQE fTj wHJ -qCp +lEa lmo sIW sIW -oBv +lUF lmo -nrU +xAR wHJ tww ffT @@ -169861,7 +169897,7 @@ kWb lWW kBh upw -vzJ +pRm kWb lWW lWW @@ -171403,7 +171439,7 @@ qDl qDl kdR kWb -lPL +nzT kWb mjq qDl @@ -171660,7 +171696,7 @@ vAB vAB qHi kWb -snc +oNM kWb lwr vAB @@ -173021,7 +173057,7 @@ vHa aWD aWD aWD -jgO +ewa gCT kgb gaI @@ -173276,8 +173312,8 @@ msm aWD aWD aWD -mhx -pyN +hux +eoO ugV ugV lke @@ -173532,7 +173568,7 @@ fqs tCb fjt gij -qnU +cVn thI pFF pFF @@ -174049,11 +174085,11 @@ vzC aWD mog mog -tvr +fFb ybD cSd ybD -wde +juV mog mog aWD @@ -174820,11 +174856,11 @@ sCp sCp sCp wje -npq +anX mGP jjI mee -fqq +uqM wje sCp sCp @@ -175077,7 +175113,7 @@ mog mog sCp wje -uGg +uca eVA mYb oZC @@ -175334,7 +175370,7 @@ mog mog sCp wje -hCC +cSC jPb iBH eVA @@ -175591,7 +175627,7 @@ mog mog sCp wje -aTW +vno lAE afp wsW @@ -175849,7 +175885,7 @@ mog sCp wje wtH -qPJ +kjR buk ygJ wtH @@ -176339,7 +176375,7 @@ awM eqX efQ drK -eTf +unH sKn ovD btZ @@ -177108,7 +177144,7 @@ jMN qhG lwZ diZ -uNx +fvq psi smn nUS @@ -177366,7 +177402,7 @@ qhG stP ipu qhG -rRe +evO sIQ usm qhG @@ -177621,9 +177657,9 @@ dsP vPt vPt stP -xKd +tNK vkp -vqW +qgD smn rbw btj @@ -178651,8 +178687,8 @@ fYe qhG bjc qhG -xvz -rRj +ylS +mra rhi bDk eju diff --git a/_maps/modular_generic/station_m_evidence.dmm b/_maps/modular_generic/station_m_evidence.dmm index 816bc42f052c8..0324a6f3d7d88 100644 --- a/_maps/modular_generic/station_m_evidence.dmm +++ b/_maps/modular_generic/station_m_evidence.dmm @@ -2,6 +2,15 @@ "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/item/storage/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{ @@ -26,15 +35,6 @@ /obj/effect/turf_decal/tile/dark/opposingcorners, /turf/open/floor/iron/dark, /area/template_noop) -"p" = ( -/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) "q" = ( /obj/structure/closet/secure_closet/evidence, /obj/effect/spawner/random/sakhno/ammo, @@ -76,6 +76,15 @@ }, /turf/open/floor/iron/dark/textured_large, /area/template_noop) +"z" = ( +/obj/machinery/door/window/brigdoor/left/directional/south{ + 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" @@ -153,15 +162,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/template_noop) -"W" = ( -/obj/machinery/door/window/brigdoor/left/directional/south{ - 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) "X" = ( /obj/effect/turf_decal/tile/dark/opposingcorners, /obj/effect/turf_decal/siding/red{ @@ -205,9 +205,9 @@ a (3,1,1) = {" a G -p +d s -W +z h K m diff --git a/_maps/shuttles/emergency_birdshot.dmm b/_maps/shuttles/emergency_birdshot.dmm index 2f89b8345306e..bbcad398257f1 100644 --- a/_maps/shuttles/emergency_birdshot.dmm +++ b/_maps/shuttles/emergency_birdshot.dmm @@ -226,6 +226,17 @@ /obj/item/trash/cheesie, /turf/open/floor/mineral/titanium/tiled, /area/shuttle/escape) +"ll" = ( +/obj/machinery/door/airlock/titanium{ + name = "Emergency Shuttle Airlock" + }, +/obj/docking_port/mobile/emergency{ + dir = 8; + name = "birdshot emergency shuttle"; + port_direction = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) "lp" = ( /obj/machinery/door/airlock/titanium{ name = "Emergency Shuttle Airlock" @@ -528,17 +539,6 @@ /obj/machinery/power/shuttle_engine/heater, /turf/open/floor/plating/airless, /area/shuttle/escape) -"zL" = ( -/obj/machinery/door/airlock/titanium{ - name = "Emergency Shuttle Airlock" - }, -/obj/docking_port/mobile/emergency{ - dir = 8; - name = "birdshot emergency shuttle"; - port_direction = 4 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) "zV" = ( /obj/structure/toilet{ dir = 4 @@ -1504,7 +1504,7 @@ nQ nQ nQ LX -zL +ll LX lp rZ diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm index c111505c14789..13b160b653190 100644 --- a/_maps/shuttles/emergency_cruise.dmm +++ b/_maps/shuttles/emergency_cruise.dmm @@ -220,7 +220,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "fL" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/carpet/executive, /area/shuttle/escape) "fY" = ( @@ -2262,7 +2262,7 @@ /turf/template_noop, /area/shuttle/escape) "Xu" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /obj/effect/turf_decal/siding/wood{ dir = 1 }, diff --git a/_maps/shuttles/emergency_humpback.dmm b/_maps/shuttles/emergency_humpback.dmm index f76d06925a343..195f342cd3caa 100644 --- a/_maps/shuttles/emergency_humpback.dmm +++ b/_maps/shuttles/emergency_humpback.dmm @@ -115,7 +115,7 @@ /area/shuttle/escape/brig) "gW" = ( /obj/structure/window/reinforced/plasma/spawner/directional/east, -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "hd" = ( diff --git a/_maps/shuttles/emergency_imfedupwiththisworld.dmm b/_maps/shuttles/emergency_imfedupwiththisworld.dmm index 6513f090c53c8..cf53733c42351 100644 --- a/_maps/shuttles/emergency_imfedupwiththisworld.dmm +++ b/_maps/shuttles/emergency_imfedupwiththisworld.dmm @@ -30,9 +30,7 @@ /area/shuttle/escape) "k" = ( /obj/machinery/light/directional/east, -/obj/machinery/vending/boozeomat{ - req_access = null - }, +/obj/machinery/vending/boozeomat, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/shuttle/escape) diff --git a/_maps/shuttles/emergency_luxury.dmm b/_maps/shuttles/emergency_luxury.dmm index 74b18ef61b4de..1e1ae99d2ea5b 100644 --- a/_maps/shuttles/emergency_luxury.dmm +++ b/_maps/shuttles/emergency_luxury.dmm @@ -589,7 +589,7 @@ /turf/open/floor/carpet/green, /area/shuttle/escape/luxury) "zq" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/closed/indestructible/riveted/plastinum/nodiagonal, /area/shuttle/escape/brig) "zt" = ( diff --git a/_maps/shuttles/emergency_monastery.dmm b/_maps/shuttles/emergency_monastery.dmm index 2f6b923cd43af..da8641ee0b1d6 100644 --- a/_maps/shuttles/emergency_monastery.dmm +++ b/_maps/shuttles/emergency_monastery.dmm @@ -8,10 +8,6 @@ }, /turf/open/floor/iron/dark, /area/shuttle/escape) -"af" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/space, -/area/shuttle/escape) "ap" = ( /obj/structure/chair/wood/wings{ dir = 1 @@ -25,10 +21,6 @@ }, /turf/open/floor/carpet, /area/shuttle/escape) -"as" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/space, -/area/shuttle/escape) "aF" = ( /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -40,15 +32,6 @@ /obj/structure/grille/broken, /turf/open/space/basic, /area/shuttle/escape) -"aJ" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen, -/turf/open/floor/carpet/black, -/area/shuttle/escape) "aO" = ( /obj/structure/sign/plaques/kiddie{ desc = "It reads: PRIVATE EXHIBIT - Please inquire with library staff for guided tours."; @@ -90,6 +73,11 @@ }, /turf/open/floor/iron/dark, /area/shuttle/escape) +"bl" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/space/basic, +/area/shuttle/escape) "bn" = ( /obj/machinery/light/small/directional/east, /obj/machinery/power/apc/auto_name/directional/east, @@ -135,6 +123,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/shuttle/escape) +"bC" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/plating, +/area/shuttle/escape) "bI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -153,29 +148,6 @@ /obj/structure/lattice, /turf/open/space, /area/shuttle/escape) -"cb" = ( -/obj/machinery/power/smes/full, -/obj/structure/cable, -/turf/open/floor/plating, -/area/shuttle/escape) -"cc" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/open/floor/iron/dark, -/area/shuttle/escape) -"cr" = ( -/obj/structure/table, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/reagent_containers/condiment/peppermill, -/obj/item/storage/box/ingredients/wildcard, -/turf/open/floor/iron, -/area/shuttle/escape) "cu" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -191,6 +163,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/shuttle/escape) +"cH" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/space, +/area/shuttle/escape) "cT" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -232,10 +208,6 @@ /obj/structure/lattice, /turf/open/space, /area/shuttle/escape) -"ds" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/escape/brig) "du" = ( /obj/machinery/door/airlock/external/ruin, /turf/open/floor/plating, @@ -369,24 +341,12 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/dark, /area/shuttle/escape) -"fA" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/space, -/area/shuttle/escape) "fL" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/lattice, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/space, /area/shuttle/escape) -"fP" = ( -/obj/docking_port/mobile/emergency{ - movement_force = list("KNOCKDOWN"=3,"THROW"=6); - name = "\proper a monastery with engines strapped to it" - }, -/turf/closed/mineral, -/area/shuttle/escape) "fT" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, @@ -418,12 +378,6 @@ /obj/structure/flora/bush/leavy/style_random, /turf/open/misc/asteroid, /area/shuttle/escape) -"gU" = ( -/obj/machinery/mass_driver/chapelgun, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/shuttle/escape) "gW" = ( /obj/structure/closet/crate/bin, /turf/open/floor/iron, @@ -439,12 +393,6 @@ }, /turf/open/floor/plating, /area/shuttle/escape) -"hJ" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/plating, -/area/shuttle/escape) "hN" = ( /obj/machinery/door/airlock/external/ruin, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -466,6 +414,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/shuttle/escape) +"hV" = ( +/obj/structure/window/reinforced/spawner/directional/north{ + pixel_y = 1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/space/basic, +/area/shuttle/escape) "hW" = ( /obj/structure/flora/bush/leavy/style_random, /obj/structure/flora/bush/reed/style_random, @@ -486,6 +441,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/shuttle/escape) +"hZ" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) "ib" = ( /obj/effect/spawner/structure/window/reinforced, /turf/closed/mineral, @@ -615,6 +578,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/shuttle/escape) +"jt" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/plating, +/area/shuttle/escape) "jx" = ( /turf/open/floor/iron/dark, /area/shuttle/escape) @@ -624,13 +593,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/shuttle/escape) -"jM" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - pixel_y = 1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/space/basic, -/area/shuttle/escape) "jR" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, @@ -739,14 +701,15 @@ /obj/machinery/door/airlock/external/ruin, /turf/open/floor/plating, /area/shuttle/escape) -"lj" = ( -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/shuttle/escape) "lm" = ( /obj/machinery/meter, /turf/open/floor/plating, /area/shuttle/escape) +"ln" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/space, +/area/shuttle/escape) "lB" = ( /turf/open/floor/iron/chapel{ dir = 8 @@ -774,6 +737,10 @@ }, /turf/open/floor/iron, /area/shuttle/escape) +"ml" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/space, +/area/shuttle/escape) "mm" = ( /obj/structure/lattice/catwalk, /turf/open/space, @@ -1047,13 +1014,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/shuttle/escape) -"pW" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ - name = "Outlet Injector" +"qi" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 }, -/turf/open/floor/plating/airless, +/obj/item/pen, +/turf/open/floor/carpet/black, /area/shuttle/escape) "qj" = ( /obj/effect/turf_decal/sand, @@ -1183,6 +1151,11 @@ }, /turf/open/floor/iron/dark, /area/shuttle/escape) +"rZ" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/lattice, +/turf/open/space/basic, +/area/shuttle/escape) "sa" = ( /obj/structure/chair/wood{ dir = 4 @@ -1281,6 +1254,10 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark, /area/shuttle/escape) +"ti" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/shuttle/escape) "tm" = ( /obj/structure/table/wood/fancy, /obj/item/storage/box/matches{ @@ -1346,6 +1323,10 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) +"uP" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/space, +/area/shuttle/escape) "uX" = ( /obj/machinery/power/smes, /turf/open/floor/plating, @@ -1470,17 +1451,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/iron/dark, /area/shuttle/escape) -"wB" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron{ - amount = 20 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plating, -/area/shuttle/escape) "wS" = ( /obj/machinery/camera/directional/east{ c_tag = "Monastery Secondary Dock"; @@ -1508,11 +1478,6 @@ /obj/item/bikehorn/rubberducky, /turf/open/floor/iron/showroomfloor, /area/shuttle/escape) -"xs" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/space/basic, -/area/shuttle/escape) "xt" = ( /obj/item/kirbyplants/organic/plant22, /turf/open/floor/iron/dark, @@ -1615,6 +1580,18 @@ /obj/item/melee/flyswatter, /turf/open/floor/iron, /area/shuttle/escape) +"yP" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 5; + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) "yR" = ( /obj/machinery/door/airlock/grunge{ name = "Chapel" @@ -1633,6 +1610,17 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron/dark, /area/shuttle/escape) +"zh" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/iron{ + amount = 20 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plating, +/area/shuttle/escape) "zp" = ( /obj/item/storage/bag/plants, /obj/structure/extinguisher_cabinet/directional/east, @@ -1763,26 +1751,10 @@ }, /turf/open/misc/asteroid, /area/shuttle/escape) -"AL" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/plating, -/area/shuttle/escape) "AM" = ( /obj/structure/flora/tree/jungle/small/style_random, /turf/open/floor/grass, /area/shuttle/escape) -"AU" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen, -/turf/open/floor/iron/dark, -/area/shuttle/escape) "AW" = ( /obj/item/clothing/under/misc/burial, /obj/item/clothing/under/misc/burial, @@ -1875,12 +1847,6 @@ }, /turf/open/floor/iron/dark, /area/shuttle/escape) -"BW" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/plating, -/area/shuttle/escape) "BX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 @@ -1895,12 +1861,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/shuttle/escape) -"Cl" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/plating, -/area/shuttle/escape) "Cn" = ( /obj/item/reagent_containers/cup/bucket, /obj/item/reagent_containers/cup/bucket, @@ -2142,6 +2102,16 @@ /obj/machinery/reagentgrinder, /turf/open/floor/iron, /area/shuttle/escape) +"Fx" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/reagent_containers/condiment/peppermill, +/obj/item/storage/box/ingredients/wildcard, +/turf/open/floor/iron, +/area/shuttle/escape) "FA" = ( /obj/machinery/button/crematorium{ id = "foo"; @@ -2280,18 +2250,6 @@ "HD" = ( /turf/open/floor/iron/chapel, /area/shuttle/escape) -"HE" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 5; - pixel_y = 6 - }, -/turf/open/floor/iron/dark, -/area/shuttle/escape) "HL" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/poppy, @@ -2388,16 +2346,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/shuttle/escape) +"Jf" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape) "Jg" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/iron/dark, /area/shuttle/escape) -"Jl" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/space, -/area/shuttle/escape) "Jp" = ( /obj/structure/table, /obj/item/crowbar, @@ -2412,6 +2371,15 @@ }, /turf/open/floor/carpet, /area/shuttle/escape) +"Ju" = ( +/obj/item/book/codex_gigas, +/obj/machinery/camera/directional/south{ + c_tag = "Monastery Archives Aft"; + network = list("ss13","monastery") + }, +/obj/structure/rack/skeletal, +/turf/open/floor/iron/dark, +/area/shuttle/escape) "Jv" = ( /obj/structure/flora/bush/flowers_yw/style_random, /obj/structure/flora/bush/sparsegrass/style_random, @@ -2476,6 +2444,13 @@ /obj/structure/sink/directional/west, /turf/open/floor/iron, /area/shuttle/escape) +"JZ" = ( +/obj/docking_port/mobile/emergency{ + movement_force = list("KNOCKDOWN"=3,"THROW"=6); + name = "\proper a monastery with engines strapped to it" + }, +/turf/closed/mineral, +/area/shuttle/escape) "Kd" = ( /obj/machinery/light/small/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -2520,11 +2495,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/shuttle/escape) -"KL" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/escape/brig) "KV" = ( /obj/structure/toilet{ pixel_y = 8 @@ -2539,13 +2509,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/shuttle/escape) -"Le" = ( -/obj/structure/window/reinforced/spawner/directional/north{ - pixel_y = 1 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/space/basic, -/area/shuttle/escape) "Lg" = ( /obj/machinery/camera/directional/west{ c_tag = "Monastery Asteroid Dock Port"; @@ -2641,10 +2604,6 @@ }, /turf/open/floor/iron/dark, /area/shuttle/escape) -"Mt" = ( -/obj/structure/lattice, -/turf/open/space, -/area/shuttle/escape) "MC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -2681,6 +2640,12 @@ }, /turf/open/floor/carpet, /area/shuttle/escape) +"Nb" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/plating, +/area/shuttle/escape) "Nf" = ( /obj/structure/table, /obj/item/reagent_containers/condiment/flour, @@ -2830,6 +2795,10 @@ /obj/effect/station_crash/devastating, /turf/open/floor/iron/dark, /area/shuttle/escape) +"OL" = ( +/obj/structure/lattice, +/turf/open/space, +/area/shuttle/escape) "OM" = ( /obj/item/cultivator, /turf/open/floor/grass, @@ -2844,6 +2813,12 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) +"Pb" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/plating, +/area/shuttle/escape) "Pe" = ( /obj/structure/flora/bush/ferny/style_random, /turf/open/misc/asteroid, @@ -2924,6 +2899,15 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/shuttle/escape) +"Qj" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/shuttle/escape) "Qq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 @@ -3196,6 +3180,10 @@ }, /turf/open/floor/iron/dark, /area/shuttle/escape) +"SU" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) "SV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 @@ -3205,11 +3193,6 @@ }, /turf/open/floor/carpet, /area/shuttle/escape) -"SW" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/lattice, -/turf/open/space/basic, -/area/shuttle/escape) "SX" = ( /obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ @@ -3438,6 +3421,20 @@ /obj/machinery/power/shuttle_engine/propulsion, /turf/open/floor/plating, /area/shuttle/escape) +"VF" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ + name = "Outlet Injector" + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"VM" = ( +/obj/machinery/mass_driver/chapelgun, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/shuttle/escape) "VN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 6 @@ -3453,15 +3450,6 @@ }, /turf/open/floor/iron, /area/shuttle/escape) -"Wd" = ( -/obj/item/book/codex_gigas, -/obj/machinery/camera/directional/south{ - c_tag = "Monastery Archives Aft"; - network = list("ss13","monastery") - }, -/obj/structure/rack/skeletal, -/turf/open/floor/iron/dark, -/area/shuttle/escape) "We" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, @@ -3532,13 +3520,6 @@ /obj/machinery/biogenerator, /turf/open/floor/iron, /area/shuttle/escape) -"WT" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/shuttle/escape) "Xb" = ( /obj/structure/table/wood, /obj/item/kirbyplants/organic/plant22{ @@ -3571,6 +3552,13 @@ }, /turf/open/floor/iron/dark, /area/shuttle/escape) +"Xx" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) "XF" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -3677,6 +3665,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/shuttle/escape) +"YU" = ( +/obj/structure/window/reinforced/spawner/directional/north{ + pixel_y = 1 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/space/basic, +/area/shuttle/escape) "YZ" = ( /obj/structure/table/wood, /obj/item/storage/bag/books, @@ -3717,6 +3712,11 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron/dark, /area/shuttle/escape) +"Zn" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/escape/brig) "Zr" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -3796,7 +3796,7 @@ JG JG JG Ho -fP +JZ zE lc zE @@ -4030,7 +4030,7 @@ nr pv Kf Fm -aJ +qi ux nr nr @@ -4295,7 +4295,7 @@ nr nr nr nr -af +uP hq JG JG @@ -4368,7 +4368,7 @@ Ac CA Dr Ex -cr +Fx nr nr nr @@ -4461,7 +4461,7 @@ jx YC Km zE -Le +YU JG JG JG @@ -4705,8 +4705,8 @@ oa QY Sq Tp -gU -WT +VM +Xx jn JG JG @@ -4832,18 +4832,18 @@ JG JG JG PB -lj +ti iw iw iw iw gl zE -ds +SU Zh -ds -ds -KL +SU +SU +Zn jc jc Pe @@ -4871,7 +4871,7 @@ jx nl Km zE -jM +hV JG JG JG @@ -4914,7 +4914,7 @@ JG JG JG PB -lj +ti iw JG JG @@ -4942,7 +4942,7 @@ zP CM BX Gv -HE +yP nr nr nr @@ -4996,10 +4996,10 @@ JG JG JG PB -lj -Mt -af -fA +ti +OL +uP +ln zE zE AJ @@ -5073,7 +5073,7 @@ JG JG JG iw -Mt +OL iw iw iw @@ -5112,7 +5112,7 @@ JA yc yc yc -cb +Jf sf nr VN @@ -5158,7 +5158,7 @@ iw JG JG dp -af +uP zE Zf zE @@ -5194,7 +5194,7 @@ Tk bI vj yc -cb +Jf sf Tt dn @@ -5224,8 +5224,8 @@ Ho Ho Ho Ho -AL -Cl +bC +Nb JG JG JG @@ -5237,7 +5237,7 @@ JG JG JG bd -Mt +OL bT zE zE @@ -5319,7 +5319,7 @@ aH iw iw iw -as +cH zE zE jc @@ -5396,12 +5396,12 @@ JG JG "} (21,1,1) = {" -af -af +uP +uP hq -SW +rZ hq -xs +bl zE jc jc @@ -5686,7 +5686,7 @@ Kg oc ZM yc -wB +zh SQ yh Wo @@ -5724,7 +5724,7 @@ JG JG "} (25,1,1) = {" -pW +VF Sg ow WG @@ -5806,7 +5806,7 @@ JG JG "} (26,1,1) = {" -as +cH zE ox bb @@ -6041,7 +6041,7 @@ ID fY pD Iw -Wd +Ju zE JG JG @@ -6130,7 +6130,7 @@ JG Ho Ho Ho -hJ +jt bv "} (30,1,1) = {" @@ -6197,7 +6197,7 @@ Am WM jx cZ -cc +hZ Vt YZ Xu @@ -6225,7 +6225,7 @@ LK zE LK dX -Jl +ml fm zE zE @@ -6294,7 +6294,7 @@ PB Ho Ho Ho -BW +Pb Ye "} (32,1,1) = {" @@ -6302,9 +6302,9 @@ JG JG IM IM -Jl -Jl -Jl +ml +ml +ml IM JG JG @@ -6356,7 +6356,7 @@ JG JG JG nr -AU +Qj Am WM jx @@ -6392,7 +6392,7 @@ JG JG JG JG -Jl +ml fm zE zE @@ -6643,8 +6643,8 @@ JG JG JG JG -Jl -Jl +ml +ml jS zE ko @@ -6892,7 +6892,7 @@ JG JG JG JG -Mt +OL mm kJ IM diff --git a/_maps/shuttles/emergency_shadow.dmm b/_maps/shuttles/emergency_shadow.dmm index 69c2e6bcb6d6c..5afa72919cb28 100644 --- a/_maps/shuttles/emergency_shadow.dmm +++ b/_maps/shuttles/emergency_shadow.dmm @@ -63,6 +63,19 @@ /obj/effect/mob_spawn/corpse/human/clown, /turf/open/floor/engine/plasma, /area/shuttle/escape/engine) +"cv" = ( +/obj/structure/table, +/obj/machinery/cell_charger{ + pixel_y = 9 + }, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high{ + pixel_y = 9 + }, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) "cF" = ( /obj/structure/table, /obj/item/storage/fancy/coffee_cart_rack{ @@ -214,18 +227,6 @@ }, /turf/open/floor/eighties, /area/shuttle/escape) -"kv" = ( -/obj/effect/turf_decal/trimline/yellow/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/line{ - dir = 4 - }, -/obj/item/kirbyplants/organic/plant21, -/obj/structure/sign/warning/hot_temp/directional/west, -/obj/item/cigarette/rollie/cannabis, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/escape) "kx" = ( /obj/structure/chair/comfy/shuttle, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -274,19 +275,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark/smooth_large, /area/shuttle/escape) -"lF" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 9 - }, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high{ - pixel_y = 9 - }, -/obj/item/stock_parts/power_store/cell/high, -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron/dark/smooth_large, -/area/shuttle/escape) "lS" = ( /obj/structure/chair/comfy/shuttle, /obj/structure/reagent_dispensers/wall/peppertank/directional/north, @@ -471,6 +459,18 @@ }, /turf/open/floor/iron/dark/small, /area/shuttle/escape/engine) +"xy" = ( +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/line{ + dir = 4 + }, +/obj/item/kirbyplants/organic/plant21, +/obj/structure/sign/warning/hot_temp/directional/west, +/obj/item/cigarette/rollie/cannabis, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) "yg" = ( /obj/effect/turf_decal/trimline/red/corner{ dir = 1 @@ -1337,7 +1337,7 @@ cH "} (12,1,1) = {" US -kv +xy Dq cV ZM @@ -1512,7 +1512,7 @@ yQ yQ YL AS -lF +cv US "} (24,1,1) = {" diff --git a/_maps/shuttles/emergency_tranquility.dmm b/_maps/shuttles/emergency_tranquility.dmm index 4563d89631cd6..ae3924becbc02 100644 --- a/_maps/shuttles/emergency_tranquility.dmm +++ b/_maps/shuttles/emergency_tranquility.dmm @@ -453,7 +453,7 @@ /area/shuttle/escape) "jb" = ( /obj/machinery/barsign/all_access/directional/north, -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/open/floor/stone, /area/shuttle/escape) "jl" = ( diff --git a/_maps/shuttles/emergency_wawa.dmm b/_maps/shuttles/emergency_wawa.dmm index c4e1efa51466a..458ffa8a17902 100644 --- a/_maps/shuttles/emergency_wawa.dmm +++ b/_maps/shuttles/emergency_wawa.dmm @@ -107,6 +107,11 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/shuttle/escape) +"at" = ( +/obj/structure/lattice, +/obj/structure/marker_beacon/burgundy, +/turf/template_noop, +/area/shuttle/escape) "au" = ( /obj/structure/chair/comfy/shuttle{ dir = 1 @@ -196,6 +201,19 @@ }, /turf/open/floor/plating, /area/shuttle/escape) +"aV" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dont close or i will kill you" + }, +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/structure/fans/tiny/shield{ + max_integrity = 400; + name = "recycling shield" + }, +/turf/open/floor/plating, +/area/shuttle/escape) "aW" = ( /obj/machinery/recycler{ dir = 8 @@ -334,19 +352,6 @@ /obj/structure/chair/comfy/shuttle, /turf/open/floor/engine, /area/shuttle/escape) -"ee" = ( -/obj/machinery/conveyor/auto{ - dir = 8 - }, -/obj/machinery/door/poddoor/preopen{ - id = "dont close or i will kill you" - }, -/obj/structure/fans/tiny/shield{ - max_integrity = 400; - name = "recycling shield" - }, -/turf/open/floor/plating, -/area/shuttle/escape) "ga" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners{ dir = 8 @@ -421,19 +426,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/mineral/titanium/white, /area/shuttle/escape) -"lE" = ( -/obj/machinery/door/poddoor/preopen{ - id = "dont close or i will kill you" - }, -/obj/machinery/conveyor/auto{ - dir = 4 - }, -/obj/structure/fans/tiny/shield{ - max_integrity = 400; - name = "recycling shield" - }, -/turf/open/floor/plating, -/area/shuttle/escape) "lI" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners{ dir = 8 @@ -571,6 +563,19 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/shuttle/escape) +"za" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/machinery/door/poddoor/preopen{ + id = "dont close or i will kill you" + }, +/obj/structure/fans/tiny/shield{ + max_integrity = 400; + name = "recycling shield" + }, +/turf/open/floor/plating, +/area/shuttle/escape) "zT" = ( /obj/effect/turf_decal/siding/dark_blue{ dir = 1 @@ -718,6 +723,10 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/mineral/titanium/white, /area/shuttle/escape) +"Pw" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/shuttle/escape) "QP" = ( /obj/machinery/conveyor/auto/inverted{ dir = 1 @@ -758,19 +767,10 @@ "XE" = ( /turf/open/floor/iron/grimy, /area/shuttle/escape) -"XI" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/shuttle/escape) "Yk" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/shuttle/escape) -"Zg" = ( -/obj/structure/lattice, -/obj/structure/marker_beacon/burgundy, -/turf/template_noop, -/area/shuttle/escape) (1,1,1) = {" aa @@ -789,9 +789,9 @@ aa aa aa bq -lE +aV bq -lE +aV bq aa aa @@ -799,8 +799,8 @@ aa "} (2,1,1) = {" aa -Zg -XI +at +Pw al al al @@ -924,7 +924,7 @@ bk "} (7,1,1) = {" aa -Zg +at al al ay @@ -1048,9 +1048,9 @@ bq bq "} (12,1,1) = {" -Zg -XI -XI +at +Pw +Pw bq bq bq @@ -1089,9 +1089,9 @@ aa aa aa bq -ee +za bq -ee +za bq aa aa diff --git a/_maps/shuttles/hunter_mi13_foodtruck.dmm b/_maps/shuttles/hunter_mi13_foodtruck.dmm index 5fe7324e8e83b..6ece8822d802a 100644 --- a/_maps/shuttles/hunter_mi13_foodtruck.dmm +++ b/_maps/shuttles/hunter_mi13_foodtruck.dmm @@ -123,7 +123,7 @@ /turf/open/floor/circuit/red/off, /area/shuttle/hunter/mi13_foodtruck) "eA" = ( -/obj/machinery/vending/medical/syndicate_access/cybersun, +/obj/machinery/vending/medical/syndicate/cybersun, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/syndicate_access, /turf/open/floor/circuit/red/off, diff --git a/_maps/shuttles/infiltrator_advanced.dmm b/_maps/shuttles/infiltrator_advanced.dmm index 9f93df25b0479..1800d638fc540 100644 --- a/_maps/shuttles/infiltrator_advanced.dmm +++ b/_maps/shuttles/infiltrator_advanced.dmm @@ -710,7 +710,7 @@ /area/shuttle/syndicate/eva) "bP" = ( /obj/effect/turf_decal/bot, -/obj/machinery/vending/medical/syndicate_access, +/obj/machinery/vending/medical/syndicate, /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate/medical) "bQ" = ( diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm index 503f0bc3bf7e1..182f51ad3b6a2 100644 --- a/_maps/shuttles/pirate_default.dmm +++ b/_maps/shuttles/pirate_default.dmm @@ -463,6 +463,23 @@ /obj/structure/sign/warning/vacuum/external/directional/east, /turf/open/floor/plating, /area/shuttle/pirate) +"br" = ( +/obj/structure/table/wood, +/obj/item/storage/box/matches, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + name = "Captain Pete's Private Reserve Cuban Spaced Rum"; + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = 6; + pixel_y = 12 + }, +/obj/item/cigarette/cigar, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/wood, +/area/shuttle/pirate) "bt" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -550,9 +567,7 @@ /turf/open/floor/iron, /area/shuttle/pirate) "bH" = ( -/obj/machinery/vending/boozeomat/all_access{ - onstation = 0 - }, +/obj/machinery/vending/boozeomat, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/shuttle/pirate) @@ -814,6 +829,21 @@ }, /turf/open/floor/iron/dark, /area/shuttle/pirate) +"vB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/box/lethalshot, +/obj/item/gun/ballistic/shotgun/automatic/combat{ + pixel_x = -2; + pixel_y = 2 + }, +/turf/open/floor/pod/light, +/area/shuttle/pirate) "wf" = ( /obj/machinery/door/airlock{ name = "Unisex Restrooms" @@ -843,21 +873,6 @@ /obj/effect/mapping_helpers/airlock/cutaiwire, /turf/open/floor/pod/dark, /area/shuttle/pirate) -"yq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack{ - dir = 8 - }, -/obj/item/storage/box/lethalshot, -/obj/item/gun/ballistic/shotgun/automatic/combat{ - pixel_x = -2; - pixel_y = 2 - }, -/turf/open/floor/pod/light, -/area/shuttle/pirate) "zw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/machinery/door/airlock{ @@ -970,23 +985,6 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/shuttle/pirate) -"UI" = ( -/obj/structure/table/wood, -/obj/item/storage/box/matches, -/obj/item/reagent_containers/cup/glass/bottle/rum{ - name = "Captain Pete's Private Reserve Cuban Spaced Rum"; - pixel_x = -6; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = 6; - pixel_y = 12 - }, -/obj/item/cigarette/cigar, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/wood, -/area/shuttle/pirate) (1,1,1) = {" af @@ -1055,7 +1053,7 @@ Oe OL zw dy -UI +br ep er af @@ -1178,7 +1176,7 @@ sP aj ek bA -yq +vB aj np aO diff --git a/_maps/shuttles/pirate_dutchman.dmm b/_maps/shuttles/pirate_dutchman.dmm index b599698bc6f5c..a00fff6e7e9fb 100644 --- a/_maps/shuttles/pirate_dutchman.dmm +++ b/_maps/shuttles/pirate_dutchman.dmm @@ -359,10 +359,33 @@ }, /turf/open/floor/carpet/blue/airless, /area/shuttle/pirate/flying_dutchman) +"nb" = ( +/obj/structure/mounted_gun/canister_gatling, +/turf/open/floor/wood/airless, +/area/shuttle/pirate/flying_dutchman) "pG" = ( /obj/structure/window/reinforced/shuttle/survival_pod, /turf/open/floor/wood/airless, /area/shuttle/pirate/flying_dutchman) +"qG" = ( +/obj/item/ammo_casing/canister_shot{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/ammo_casing/canister_shot{ + pixel_y = -8; + pixel_x = -8 + }, +/obj/item/ammo_casing/canister_shot{ + pixel_x = 6; + pixel_y = -8 + }, +/obj/item/ammo_casing/canister_shot{ + pixel_y = 8; + pixel_x = 6 + }, +/turf/open/floor/wood/airless, +/area/shuttle/pirate/flying_dutchman) "rd" = ( /obj/effect/turf_decal/siding/wood/corner, /obj/effect/turf_decal/siding/wood/corner{ @@ -487,8 +510,9 @@ "xA" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 1; - x_offset = -4; - y_offset = -8 + x_offset = 7; + y_offset = -3; + view_range = 10 }, /turf/open/floor/carpet/royalblack/airless, /area/shuttle/pirate/flying_dutchman) @@ -1233,7 +1257,7 @@ fW St QM da -WB +nb WB RQ eG @@ -1260,7 +1284,7 @@ km sC mG bn -WB +qG WB xY WR diff --git a/_maps/shuttles/pirate_ex_interdyne.dmm b/_maps/shuttles/pirate_ex_interdyne.dmm index 9ef895f7af632..3896e755f85d9 100644 --- a/_maps/shuttles/pirate_ex_interdyne.dmm +++ b/_maps/shuttles/pirate_ex_interdyne.dmm @@ -62,6 +62,14 @@ "aj" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/pirate) +"ak" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/reagentgrinder, +/turf/open/floor/iron/dark, +/area/shuttle/pirate) "al" = ( /obj/machinery/loot_locator{ dir = 8 @@ -144,10 +152,24 @@ }, /turf/open/floor/iron/dark, /area/shuttle/pirate) +"aD" = ( +/obj/machinery/power/apc/auto_name/directional/north{ + cell_type = /obj/item/stock_parts/power_store/battery/bluespace; + start_charge = 100 + }, +/obj/effect/mapping_helpers/apc/cut_AI_wire, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/machinery/power/smes/magical, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/shuttle/pirate) "aF" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 4; - x_offset = -3; + x_offset = 0; y_offset = 7 }, /turf/open/floor/iron/dark, @@ -269,7 +291,7 @@ /area/shuttle/pirate) "aS" = ( /obj/effect/turf_decal/tile/dark_blue/opposingcorners, -/obj/structure/closet/crate/freezer/blood, +/obj/structure/closet/crate/freezer/blood/interdyne, /obj/machinery/light/small/blacklight/directional/south, /obj/machinery/iv_drip, /turf/open/floor/iron/dark, @@ -558,20 +580,6 @@ }, /turf/open/floor/plating/airless, /area/shuttle/pirate) -"rV" = ( -/obj/machinery/power/apc/auto_name/directional/north{ - cell_type = /obj/item/stock_parts/power_store/battery/bluespace - }, -/obj/effect/mapping_helpers/apc/full_charge, -/obj/effect/mapping_helpers/apc/cut_AI_wire, -/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/obj/machinery/power/smes/magical, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/shuttle/pirate) "sP" = ( /obj/effect/turf_decal/tile/dark_blue/opposingcorners, /obj/structure/table/optable, @@ -609,6 +617,63 @@ /obj/item/surgical_drapes, /turf/open/floor/iron/dark, /area/shuttle/pirate) +"wf" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma, +/obj/machinery/reagentgrinder, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/item/reagent_containers/cup/bottle, +/obj/item/reagent_containers/cup/bottle, +/obj/item/reagent_containers/cup/bottle, +/obj/item/reagent_containers/cup/beaker/meta, +/obj/item/stack/sheet/mineral/plasma/thirty, +/obj/item/stack/sheet/mineral/uranium/five, +/obj/item/stack/sheet/mineral/uranium/five, +/obj/item/stack/sheet/mineral/uranium/five, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/stack/sheet/mineral/gold, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/turf/open/floor/iron/dark, +/area/shuttle/pirate) "yi" = ( /obj/machinery/door/airlock/hatch{ id_tag = "piratebridgebolt"; @@ -701,71 +766,6 @@ }, /turf/open/floor/plating, /area/shuttle/pirate) -"Lv" = ( -/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ - dir = 8 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/reagentgrinder, -/turf/open/floor/iron/dark, -/area/shuttle/pirate) -"MH" = ( -/obj/effect/turf_decal/tile/dark_blue/half/contrasted, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/stack/sheet/mineral/plasma, -/obj/machinery/reagentgrinder, -/obj/item/storage/box/monkeycubes/syndicate, -/obj/item/storage/box/monkeycubes/syndicate, -/obj/item/reagent_containers/cup/bottle, -/obj/item/reagent_containers/cup/bottle, -/obj/item/reagent_containers/cup/bottle, -/obj/item/reagent_containers/cup/beaker/meta, -/obj/item/stack/sheet/mineral/plasma/thirty, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/silver, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/stack/sheet/mineral/gold, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/turf/open/floor/iron/dark, -/area/shuttle/pirate) "Oe" = ( /obj/effect/turf_decal/tile/dark_blue{ dir = 4 @@ -775,7 +775,7 @@ /area/shuttle/pirate) "OL" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted, -/obj/machinery/vending/medical/syndicate_access, +/obj/machinery/vending/medical/syndicate, /turf/open/floor/iron/dark, /area/shuttle/pirate) "Po" = ( @@ -871,7 +871,7 @@ af aj ap aw -Lv +ak bF aj af @@ -983,7 +983,7 @@ fY bX iD aj -rV +aD aG ep aj @@ -1106,7 +1106,7 @@ aj Rq bu VF -MH +wf aj af af diff --git a/_maps/shuttles/pirate_geode.dmm b/_maps/shuttles/pirate_geode.dmm index afb582e432203..2f6a573aae050 100644 --- a/_maps/shuttles/pirate_geode.dmm +++ b/_maps/shuttles/pirate_geode.dmm @@ -430,8 +430,7 @@ "vY" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 8; - x_offset = 10; - y_offset = 5 + x_offset = -8 }, /obj/effect/turf_decal/weather/dirt{ dir = 3 @@ -487,7 +486,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/pirate) "yz" = ( /obj/structure/flora/lunar_plant/style_3, @@ -838,7 +837,7 @@ /obj/machinery/power/shuttle_engine/propulsion{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/shuttle/pirate) "Pr" = ( /obj/structure/table/wood, diff --git a/_maps/shuttles/pirate_grey.dmm b/_maps/shuttles/pirate_grey.dmm index edceba2054504..50594b83d9b59 100644 --- a/_maps/shuttles/pirate_grey.dmm +++ b/_maps/shuttles/pirate_grey.dmm @@ -183,7 +183,7 @@ /turf/open/floor/plating, /area/shuttle/pirate) "gQ" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/closed/wall, /area/shuttle/pirate) "hk" = ( @@ -353,8 +353,9 @@ /obj/machinery/light/small/directional/west, /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 4; - x_offset = -3; - y_offset = 7 + x_offset = -5; + y_offset = 12; + view_range = 10 }, /obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm/directional/south, @@ -734,13 +735,6 @@ /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/iron/dark, /area/shuttle/pirate) -"yA" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating, -/area/shuttle/pirate) "yI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -861,11 +855,22 @@ }, /obj/effect/mapping_helpers/airlock/cutaiwire, /obj/docking_port/mobile/pirate{ - dir = 4 + dir = 8 }, /obj/structure/fans/tiny, /turf/open/floor/pod/light, /area/shuttle/pirate) +"Bu" = ( +/obj/machinery/power/apc/auto_name/directional/north{ + cell_type = /obj/item/stock_parts/power_store/battery/bluespace + }, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/cut_AI_wire, +/turf/open/floor/plating, +/area/shuttle/pirate) "BL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/portables_connector/visible, @@ -920,6 +925,13 @@ /obj/item/flashlight, /turf/open/floor/plating, /area/shuttle/pirate) +"De" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating, +/area/shuttle/pirate) "Dn" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/half/contrasted, @@ -1218,6 +1230,9 @@ }, /turf/open/floor/plating, /area/shuttle/pirate) +"Pn" = ( +/turf/closed/wall, +/area/shuttle/pirate) "PM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash/grille_or_waste, @@ -1279,17 +1294,6 @@ }, /turf/open/floor/plating, /area/shuttle/pirate) -"RY" = ( -/obj/machinery/power/apc/auto_name/directional/north{ - cell_type = /obj/item/stock_parts/power_store/battery/bluespace - }, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/apc/cut_AI_wire, -/turf/open/floor/plating, -/area/shuttle/pirate) "Sb" = ( /obj/structure/reagent_dispensers/plumbed, /turf/open/floor/plating, @@ -1491,9 +1495,6 @@ /obj/effect/spawner/random/trash/garbage, /turf/open/floor/plating, /area/shuttle/pirate) -"ZU" = ( -/turf/closed/wall, -/area/shuttle/pirate) (1,1,1) = {" je @@ -1667,7 +1668,7 @@ qm Ti "} (10,1,1) = {" -ZU +Pn Ut kw CH @@ -1682,7 +1683,7 @@ Yj rV Tq uE -ZU +Pn HD "} (11,1,1) = {" @@ -1701,7 +1702,7 @@ wX Oa Tq Lo -ZU +Pn ei "} (12,1,1) = {" @@ -1710,7 +1711,7 @@ sB GE Yj Nu -ZU +Pn am Eq yN @@ -1727,7 +1728,7 @@ HD HD XX vJ -ZU +Pn SB Nm Vw @@ -1739,14 +1740,14 @@ Sh gQ dd xy -ZU +Pn HD "} (14,1,1) = {" pk pS pU -ZU +Pn QO Ac Wc @@ -1762,11 +1763,11 @@ Sh zB "} (15,1,1) = {" -ZU +Pn dI Sv -ZU -RY +Pn +Bu xO yf Lk @@ -1784,7 +1785,7 @@ zB zB vM lO -ZU +Pn tJ xO ax @@ -1835,7 +1836,7 @@ Bh Uf DP zB -ZU +Pn "} (19,1,1) = {" je @@ -1848,17 +1849,17 @@ sm CY fj DG -ZU +Pn Ci Sh Gb xm -ZU +Pn je "} (20,1,1) = {" je -ZU +Pn ia NI yU @@ -1867,49 +1868,49 @@ bv aD cJ tU -ZU +Pn xl Sh AR lO -ZU +Pn je "} (21,1,1) = {" je -ZU -ZU +Pn +Pn xm yU OG qo pT -yA +De sh -ZU +Pn Zc -ZU +Pn pB -ZU -ZU +Pn +Pn je "} (22,1,1) = {" je je -ZU +Pn EA ll FI Hh -ZU -ZU +Pn +Pn Hh -ZU +Pn gz -ZU +Pn RX -ZU +Pn je je "} @@ -1926,8 +1927,8 @@ ti Yf FI aV -ZU -ZU +Pn +Pn je je je @@ -1945,7 +1946,7 @@ Am FT pk pk -ZU +Pn je je je @@ -1958,8 +1959,8 @@ je je pk zB -ZU -ZU +Pn +Pn zB pk pk diff --git a/_maps/shuttles/pirate_irs.dmm b/_maps/shuttles/pirate_irs.dmm index c315f70d3b0d2..c78c73a75380e 100644 --- a/_maps/shuttles/pirate_irs.dmm +++ b/_maps/shuttles/pirate_irs.dmm @@ -380,13 +380,6 @@ /obj/machinery/loot_locator, /turf/open/floor/pod/dark, /area/shuttle/pirate) -"nj" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/shuttle/pirate) "nk" = ( /obj/effect/turf_decal/tile/dark_blue/half{ dir = 8 @@ -953,9 +946,7 @@ }, /area/shuttle/pirate) "Cf" = ( -/obj/machinery/vending/autodrobe{ - onstation = 0 - }, +/obj/machinery/vending/autodrobe, /obj/effect/turf_decal/siding/dark_green{ dir = 6 }, @@ -1026,6 +1017,19 @@ /obj/structure/curtain, /turf/open/floor/iron/dark, /area/shuttle/pirate) +"Dr" = ( +/obj/structure/sign/departments/vault/directional/north, +/obj/effect/turf_decal/trimline/dark_blue/filled/end{ + dir = 8 + }, +/obj/structure/railing{ + dir = 10 + }, +/obj/machinery/shower/directional/south, +/obj/effect/turf_decal/box, +/obj/structure/fluff/shower_drain, +/turf/open/floor/iron/dark, +/area/shuttle/pirate) "Dy" = ( /obj/machinery/light/directional/south, /turf/open/floor/iron/white, @@ -1052,19 +1056,6 @@ }, /turf/open/floor/pod/dark, /area/shuttle/pirate) -"Ek" = ( -/obj/structure/sign/departments/vault/directional/north, -/obj/effect/turf_decal/trimline/dark_blue/filled/end{ - dir = 8 - }, -/obj/structure/railing{ - dir = 10 - }, -/obj/machinery/shower/directional/south, -/obj/effect/turf_decal/box, -/obj/structure/fluff/shower_drain, -/turf/open/floor/iron/dark, -/area/shuttle/pirate) "Eq" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/effect/turf_decal/bot, @@ -1424,6 +1415,17 @@ dir = 4 }, /area/shuttle/pirate) +"LV" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ + y_offset = 11; + x_offset = -4; + view_range = 10 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/shuttle/pirate) "LX" = ( /turf/open/floor/plating/airless, /area/shuttle/pirate) @@ -1638,9 +1640,7 @@ /turf/open/floor/wood, /area/shuttle/pirate) "QT" = ( -/obj/machinery/vending/boozeomat/all_access{ - onstation = 0 - }, +/obj/machinery/vending/boozeomat, /turf/closed/wall/mineral/titanium, /area/shuttle/pirate) "QV" = ( @@ -2262,7 +2262,7 @@ WR "} (13,1,1) = {" Rh -nj +LV ev mA pO @@ -2422,7 +2422,7 @@ OC Mu OC hK -Ek +Dr BG XX wM diff --git a/_maps/shuttles/pirate_silverscale.dmm b/_maps/shuttles/pirate_silverscale.dmm index f5a63f28e49b1..b95c32be7d1e7 100644 --- a/_maps/shuttles/pirate_silverscale.dmm +++ b/_maps/shuttles/pirate_silverscale.dmm @@ -80,10 +80,6 @@ /obj/effect/turf_decal/trimline/yellow/warning, /turf/open/floor/plating/airless, /area/shuttle/pirate) -"eK" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/turf/open/floor/plating/airless, -/area/shuttle/pirate) "eU" = ( /obj/structure/chair/comfy/shuttle, /turf/open/floor/carpet/royalblack, @@ -105,31 +101,6 @@ dir = 8 }, /area/shuttle/pirate) -"fk" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/item/ammo_box/strilka310/phasic{ - pixel_y = -5; - pixel_x = 5 - }, -/obj/item/ammo_box/strilka310/phasic{ - pixel_x = 5 - }, -/obj/item/ammo_box/strilka310/phasic{ - pixel_x = -5; - pixel_y = -5 - }, -/obj/item/ammo_box/strilka310/phasic{ - pixel_x = -5 - }, -/obj/item/gun/ballistic/rifle/boltaction/prime{ - pixel_y = 4 - }, -/obj/item/gun/ballistic/rifle/boltaction/prime, -/turf/open/floor/pod/dark, -/area/shuttle/pirate) "fN" = ( /obj/structure/dresser, /obj/machinery/light/small/directional/north, @@ -149,6 +120,14 @@ }, /turf/open/floor/iron/dark, /area/shuttle/pirate) +"gw" = ( +/mob/living/basic/bot/medbot/nukie{ + name = "Mortimer"; + faction = list("pirate"); + desc = "A lowly medibot serving as the Silverscales' live-in manservant/butler/coat rack. They recently discovered it can heal people as well." + }, +/turf/open/floor/carpet/royalblack, +/area/shuttle/pirate) "ht" = ( /obj/machinery/door/airlock/silver, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, @@ -177,34 +156,6 @@ /obj/effect/turf_decal/trimline/blue, /turf/open/floor/pod/light, /area/shuttle/pirate) -"iD" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/glass/bottle/tequila{ - pixel_x = 10; - pixel_y = 10 - }, -/obj/item/reagent_containers/cup/glass/bottle/hcider{ - pixel_x = -6; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/glass/bottle/rum{ - pixel_x = -15; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 1; - pixel_y = 13 - }, -/obj/item/reagent_containers/cup/glass/bottle/gin{ - pixel_x = -10; - pixel_y = 15 - }, -/obj/item/reagent_containers/cup/glass/bottle/wine{ - pixel_x = 3; - pixel_y = 5 - }, -/turf/open/floor/iron/dark/textured, -/area/shuttle/pirate) "je" = ( /turf/template_noop, /area/template_noop) @@ -224,16 +175,6 @@ }, /turf/open/floor/pod/dark, /area/shuttle/pirate) -"kq" = ( -/obj/machinery/porta_turret/syndicate/energy{ - dir = 8; - faction = list("pirate") - }, -/obj/effect/turf_decal/trimline/yellow/warning{ - dir = 6 - }, -/turf/open/floor/plating/airless, -/area/shuttle/pirate) "ky" = ( /obj/structure/toilet{ dir = 8 @@ -341,14 +282,6 @@ "rB" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/pirate) -"st" = ( -/mob/living/basic/bot/medbot/nukie{ - name = "Mortimer"; - faction = list("pirate"); - desc = "A lowly medibot serving as the Silverscales' live-in manservant/butler/coat rack. They recently discovered it can heal people as well." - }, -/turf/open/floor/carpet/royalblack, -/area/shuttle/pirate) "sB" = ( /turf/open/floor/iron/dark/textured, /area/shuttle/pirate) @@ -400,6 +333,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/pod/dark, /area/shuttle/pirate) +"wE" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 8; + faction = list("pirate") + }, +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/shuttle/pirate) "xj" = ( /obj/structure/table/glass, /obj/item/storage/medkit/brute, @@ -418,6 +361,23 @@ }, /turf/open/floor/plating/airless, /area/shuttle/pirate) +"xR" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/melee/energy/sword/saber/purple{ + pixel_y = 12 + }, +/obj/item/melee/energy/sword/saber/purple{ + pixel_x = 8; + pixel_y = 7 + }, +/obj/item/melee/energy/sword/saber/purple{ + pixel_x = 17 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/pod/dark, +/area/shuttle/pirate) "yv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /obj/machinery/meter, @@ -497,9 +457,6 @@ /turf/open/floor/pod/dark, /area/shuttle/pirate) "Bl" = ( -/obj/machinery/door/airlock/external/glass/ruin{ - id_tag = "piratestarboardexternal" - }, /obj/docking_port/stationary{ dir = 4; dwidth = 13; @@ -509,7 +466,7 @@ width = 26 }, /obj/docking_port/mobile/pirate{ - dir = 4; + dir = 8; launch_status = 0; movement_force = list("KNOCKDOWN"=0,"THROW"=0); name = "Silverscale Cruiser"; @@ -519,6 +476,9 @@ dir = 4 }, /obj/effect/mapping_helpers/airlock/cutaiwire, +/obj/machinery/door/airlock/external/glass/ruin{ + id_tag = "piratestarboardexternal" + }, /turf/open/floor/pod/light, /area/shuttle/pirate) "Ch" = ( @@ -532,9 +492,7 @@ /turf/open/floor/iron/dark, /area/shuttle/pirate) "CW" = ( -/obj/machinery/vending/boozeomat/all_access{ - onstation = 0 - }, +/obj/machinery/vending/boozeomat, /turf/open/floor/iron/dark/textured, /area/shuttle/pirate) "DX" = ( @@ -595,6 +553,14 @@ }, /turf/open/floor/plating, /area/shuttle/pirate) +"Id" = ( +/obj/structure/guncase, +/obj/item/gun/energy/laser/luxurypaywall{ + projectile_damage_multiplier = 1.30; + desc = "A laser gun modified to cost 20 credits to fire. Someone on the station should have an ID that works with this thing." + }, +/turf/open/floor/pod/dark, +/area/shuttle/pirate) "Ig" = ( /obj/structure/table/glass, /obj/machinery/chem_dispenser/drinks{ @@ -648,28 +614,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/carpet/royalblack, /area/shuttle/pirate) -"KB" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/storage/box/lethalshot, -/obj/item/storage/box/lethalshot, -/obj/effect/turf_decal/bot, -/obj/item/gun/ballistic/shotgun/doublebarrel/slugs, -/turf/open/floor/pod/dark, -/area/shuttle/pirate) -"Lf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 - }, -/obj/machinery/button/door/directional/south{ - id = "pirateportexternal"; - name = "External Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/pod/dark, -/area/shuttle/pirate) "Lk" = ( /obj/machinery/power/terminal{ dir = 1 @@ -725,8 +669,9 @@ "Mo" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{ dir = 8; - x_offset = 10; - y_offset = 5 + x_offset = 12; + y_offset = 5; + view_range = 10 }, /turf/open/floor/iron/dark/side{ dir = 8 @@ -761,13 +706,33 @@ /obj/effect/mapping_helpers/airlock/cutaiwire, /turf/open/floor/pod/light, /area/shuttle/pirate) -"NL" = ( -/obj/structure/guncase, -/obj/item/gun/energy/laser/luxurypaywall{ - projectile_damage_multiplier = 1.30; - desc = "A laser gun modified to cost 20 credits to fire. Someone on the station should have an ID that works with this thing." +"Oo" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/glass/bottle/tequila{ + pixel_x = 10; + pixel_y = 10 }, -/turf/open/floor/pod/dark, +/obj/item/reagent_containers/cup/glass/bottle/hcider{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/glass/bottle/rum{ + pixel_x = -15; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 1; + pixel_y = 13 + }, +/obj/item/reagent_containers/cup/glass/bottle/gin{ + pixel_x = -10; + pixel_y = 15 + }, +/obj/item/reagent_containers/cup/glass/bottle/wine{ + pixel_x = 3; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured, /area/shuttle/pirate) "Ox" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -832,6 +797,31 @@ /obj/structure/fireplace, /turf/open/floor/iron/dark/textured, /area/shuttle/pirate) +"RO" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/item/ammo_box/strilka310/phasic{ + pixel_y = -5; + pixel_x = 5 + }, +/obj/item/ammo_box/strilka310/phasic{ + pixel_x = 5 + }, +/obj/item/ammo_box/strilka310/phasic{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/item/ammo_box/strilka310/phasic{ + pixel_x = -5 + }, +/obj/item/gun/ballistic/rifle/boltaction/prime{ + pixel_y = 4 + }, +/obj/item/gun/ballistic/rifle/boltaction/prime, +/turf/open/floor/pod/dark, +/area/shuttle/pirate) "RU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 @@ -930,6 +920,18 @@ /obj/machinery/recharger, /turf/open/floor/iron/dark, /area/shuttle/pirate) +"Wd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/obj/machinery/button/door/directional/south{ + id = "pirateportexternal"; + name = "External Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/pod/dark, +/area/shuttle/pirate) "Ww" = ( /obj/machinery/power/shuttle_engine/heater{ dir = 8 @@ -963,9 +965,7 @@ /turf/open/floor/carpet/royalblack, /area/shuttle/pirate) "XB" = ( -/obj/machinery/vending/boozeomat/all_access{ - onstation = 0 - }, +/obj/machinery/vending/boozeomat, /obj/machinery/light/small/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 10 @@ -976,21 +976,14 @@ /obj/structure/bookcase/random/fiction, /turf/open/floor/iron/dark/textured, /area/shuttle/pirate) -"Yb" = ( +"Yj" = ( /obj/structure/rack{ dir = 8 }, -/obj/item/melee/energy/sword/saber/purple{ - pixel_y = 12 - }, -/obj/item/melee/energy/sword/saber/purple{ - pixel_x = 8; - pixel_y = 7 - }, -/obj/item/melee/energy/sword/saber/purple{ - pixel_x = 17 - }, +/obj/item/storage/box/lethalshot, +/obj/item/storage/box/lethalshot, /obj/effect/turf_decal/bot, +/obj/item/gun/ballistic/shotgun/doublebarrel/slugs, /turf/open/floor/pod/dark, /area/shuttle/pirate) "YD" = ( @@ -1064,7 +1057,7 @@ rB Ww Ww Ww -eK +Ww Ww Ww Ww @@ -1097,15 +1090,15 @@ TV rB rB dQ -Lf +Wd rB aZ aZ aZ Is -KB -fk -Yb +Yj +RO +xR rB Fk QI @@ -1143,7 +1136,7 @@ fR Ox Qm wa -NL +Id rB UV wa @@ -1204,7 +1197,7 @@ dT xs Ai fT -iD +Oo HD "} (11,1,1) = {" @@ -1235,7 +1228,7 @@ xs Ai am am -st +gw am am Ai @@ -1341,7 +1334,7 @@ rB rB "} (18,1,1) = {" -kq +wE rB zm RU @@ -1357,7 +1350,7 @@ rB Uf ZY rB -kq +wE "} (19,1,1) = {" je diff --git a/_maps/shuttles/ruin_cyborg_mothership.dmm b/_maps/shuttles/ruin_cyborg_mothership.dmm index 5172fad5942b4..4e0fff656e83d 100644 --- a/_maps/shuttles/ruin_cyborg_mothership.dmm +++ b/_maps/shuttles/ruin_cyborg_mothership.dmm @@ -1,10 +1,4 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ad" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/template_noop, -/area/shuttle/ruin/cyborg_mothership) "aB" = ( /obj/machinery/conveyor{ dir = 8; @@ -47,6 +41,11 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/shuttle/ruin/cyborg_mothership) +"dI" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/template_noop, +/area/shuttle/ruin/cyborg_mothership) "dO" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/circuit/airless, @@ -143,12 +142,6 @@ }, /turf/open/floor/circuit/airless, /area/shuttle/ruin/cyborg_mothership) -"jm" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/template_noop, -/area/shuttle/ruin/cyborg_mothership) "jx" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -160,15 +153,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/shuttle/ruin/cyborg_mothership) -"kn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 - }, -/obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating/airless, -/area/shuttle/ruin/cyborg_mothership) "ks" = ( /obj/machinery/holopad/secure, /obj/structure/cable, @@ -190,18 +174,6 @@ /obj/item/stack/rods, /turf/template_noop, /area/shuttle/ruin/cyborg_mothership) -"lo" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/closet/crate/preopen, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/rods/fifty, -/turf/open/floor/plating/airless, -/area/shuttle/ruin/cyborg_mothership) "lv" = ( /obj/structure/cable, /obj/machinery/conveyor{ @@ -257,6 +229,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/shuttle/ruin/cyborg_mothership) +"nM" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/closet/crate/preopen, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/turf/open/floor/plating/airless, +/area/shuttle/ruin/cyborg_mothership) "oe" = ( /obj/structure/spacevine, /obj/structure/cable, @@ -532,11 +516,6 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/shuttle/ruin/cyborg_mothership) -"Bp" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/template_noop, -/area/shuttle/ruin/cyborg_mothership) "BD" = ( /obj/structure/cable, /obj/machinery/power/solar, @@ -748,6 +727,12 @@ }, /turf/open/floor/plating/airless, /area/shuttle/ruin/cyborg_mothership) +"OY" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/template_noop, +/area/shuttle/ruin/cyborg_mothership) "Pf" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/closet/crate/solarpanel_small, @@ -803,11 +788,26 @@ /obj/machinery/light/floor, /turf/open/floor/iron/showroomfloor, /area/shuttle/ruin/cyborg_mothership) +"SV" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/template_noop, +/area/shuttle/ruin/cyborg_mothership) "Ty" = ( /obj/structure/lattice, /obj/item/stack/sheet/mineral/titanium, /turf/template_noop, /area/shuttle/ruin/cyborg_mothership) +"TH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plating/airless, +/area/shuttle/ruin/cyborg_mothership) "TZ" = ( /obj/item/radio/intercom/directional/south, /obj/structure/ai_core, @@ -933,7 +933,7 @@ hR hR kz kz -jm +SV zn hR hR @@ -959,7 +959,7 @@ kz zZ gG zZ -jm +SV zn hR hR @@ -980,12 +980,12 @@ hR hR hR hR -kn +TH RD wA jx Pf -jm +SV zn hR hR @@ -1141,7 +1141,7 @@ hR zF Ge dC -Bp +dI Vb hR "} @@ -1166,7 +1166,7 @@ hR hR qc of -jm +SV Vb hR "} @@ -1192,7 +1192,7 @@ so ss of dC -jm +SV Vb "} (12,1,1) = {" @@ -1242,7 +1242,7 @@ so KN Hg qn -ad +OY Vb "} (14,1,1) = {" @@ -1266,7 +1266,7 @@ hR hR mC of -ad +OY Vb hR "} @@ -1291,7 +1291,7 @@ hR Yl Jj Ai -Bp +dI Vb hR "} @@ -1430,12 +1430,12 @@ hR hR hR hR -lo +nM YC yd KR Rv -ad +OY Vb hR hR @@ -1459,7 +1459,7 @@ kz zZ WO zZ -ad +OY Vb hR hR @@ -1483,7 +1483,7 @@ hR hR kz kz -ad +OY Vb hR hR diff --git a/_maps/shuttles/ruin_pirate_cutter.dmm b/_maps/shuttles/ruin_pirate_cutter.dmm index c6e878b0f1020..422d5bfb2cdd5 100644 --- a/_maps/shuttles/ruin_pirate_cutter.dmm +++ b/_maps/shuttles/ruin_pirate_cutter.dmm @@ -262,6 +262,14 @@ dir = 1 }, /area/shuttle/ruin/caravan/pirate) +"ti" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stack/cable_coil, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/shuttle/ruin/caravan/pirate) "ua" = ( /obj/structure/table, /obj/item/storage/box/lethalshot, @@ -444,14 +452,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron/white, /area/shuttle/ruin/caravan/pirate) -"DO" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/power_store/cell/high, -/obj/effect/turf_decal/bot, -/turf/open/floor/plating, -/area/shuttle/ruin/caravan/pirate) "DQ" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/stripes/line{ @@ -907,7 +907,7 @@ xq iM se ZU -DO +ti Kc Jv "} diff --git a/_maps/shuttles/skyrat/cargo_skyrat.dmm b/_maps/shuttles/skyrat/cargo_skyrat.dmm index 1d49e06971108..f906a0248425d 100644 --- a/_maps/shuttles/skyrat/cargo_skyrat.dmm +++ b/_maps/shuttles/skyrat/cargo_skyrat.dmm @@ -111,7 +111,7 @@ "uk" = ( /obj/machinery/conveyor{ dir = 8; - id = "QMLoad" + id = "cargoload" }, /obj/machinery/door/poddoor{ id = "QMLoaddoor"; @@ -194,7 +194,7 @@ "Xz" = ( /obj/machinery/conveyor{ dir = 4; - id = "QMLoad2" + id = "cargounload" }, /obj/machinery/door/poddoor{ id = "QMLoaddoor2"; diff --git a/_maps/shuttles/skyrat/goldeneye_cruiser.dmm b/_maps/shuttles/skyrat/goldeneye_cruiser.dmm index 4bcb2d3e845ea..68d437b0d26b4 100644 --- a/_maps/shuttles/skyrat/goldeneye_cruiser.dmm +++ b/_maps/shuttles/skyrat/goldeneye_cruiser.dmm @@ -641,7 +641,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/syndicate/cruiser/brig) "GN" = ( -/obj/machinery/vending/medical/syndicate_access, +/obj/machinery/vending/medical/syndicate, /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/dark/textured_large, /area/shuttle/syndicate/cruiser/medical) diff --git a/_maps/shuttles/skyrat/slaver_syndie.dmm b/_maps/shuttles/skyrat/slaver_syndie.dmm index e9eac52860e26..11373e07b10ef 100644 --- a/_maps/shuttles/skyrat/slaver_syndie.dmm +++ b/_maps/shuttles/skyrat/slaver_syndie.dmm @@ -637,7 +637,6 @@ /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood, /obj/machinery/microwave{ - icon = 'icons/obj/kitchen.dmi'; pixel_x = -1; pixel_y = 8 }, diff --git a/_maps/shuttles/skyrat/whiteship_blueshift.dmm b/_maps/shuttles/skyrat/whiteship_blueshift.dmm index 45cb344e46aac..114e689a14ade 100644 --- a/_maps/shuttles/skyrat/whiteship_blueshift.dmm +++ b/_maps/shuttles/skyrat/whiteship_blueshift.dmm @@ -277,6 +277,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/shuttle/abandoned/crew) +"dm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/machinery/iv_drip, +/obj/structure/curtain, +/obj/structure/alien/weeds/node, +/turf/open/floor/iron/white, +/area/shuttle/abandoned/medbay) "dp" = ( /obj/structure/railing{ dir = 4 @@ -455,25 +464,6 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/shuttle/abandoned/crew) -"eP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/computer/records/security, -/turf/open/floor/iron/dark, -/area/shuttle/abandoned) "eX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on, @@ -921,15 +911,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/shuttle/abandoned/cargo) -"jC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed, -/obj/item/bedsheet/medical, -/obj/machinery/iv_drip, -/obj/structure/curtain, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron/white, -/area/shuttle/abandoned/medbay) "jJ" = ( /obj/structure/lattice, /obj/structure/fluff/tram_rail, @@ -1261,17 +1242,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/shuttle/abandoned/cargo) -"mh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/structure/barricade/security, -/obj/machinery/door/airlock/highsecurity{ - name = "Armory" - }, -/turf/open/floor/iron/dark, -/area/shuttle/abandoned) "mm" = ( /obj/effect/turf_decal/box/white/corners{ dir = 8 @@ -1885,7 +1855,7 @@ /area/shuttle/abandoned/crew) "qM" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /obj/structure/alien/weeds, /turf/open/floor/iron/dark, /area/shuttle/abandoned/bar) @@ -2034,6 +2004,17 @@ dir = 1 }, /area/shuttle/abandoned/crew) +"rJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/structure/barricade/security, +/obj/machinery/door/airlock/highsecurity{ + name = "Armory" + }, +/turf/open/floor/iron/dark, +/area/shuttle/abandoned) "rO" = ( /obj/effect/turf_decal/box/white/corners{ dir = 4 @@ -4068,6 +4049,22 @@ "Ne" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/abandoned/medbay) +"Ng" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/structure/table/glass, +/obj/structure/curtain, +/obj/item/reagent_containers/syringe, +/obj/structure/alien/weeds, +/obj/item/clothing/gloves/latex/nitrile, +/obj/item/clothing/mask/surgical, +/obj/item/storage/organbox{ + pixel_y = 7 + }, +/turf/open/floor/iron/white, +/area/shuttle/abandoned/medbay) "Nh" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes/line{ @@ -4272,6 +4269,25 @@ /obj/item/t_scanner, /turf/open/floor/iron/dark, /area/shuttle/abandoned/cargo) +"Pk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/computer/secure_data, +/turf/open/floor/iron/dark, +/area/shuttle/abandoned) "Pm" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/blue{ @@ -4612,22 +4628,6 @@ dir = 8 }, /area/shuttle/abandoned/crew) -"SA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/table/glass, -/obj/structure/curtain, -/obj/item/reagent_containers/syringe, -/obj/structure/alien/weeds, -/obj/item/clothing/gloves/latex/nitrile, -/obj/item/clothing/mask/surgical, -/obj/item/storage/organbox{ - pixel_y = 7 - }, -/turf/open/floor/iron/white, -/area/shuttle/abandoned/medbay) "SK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -6327,7 +6327,7 @@ OF Ne yM Cv -SA +Ng Ne GH "} @@ -6348,7 +6348,7 @@ Pm Vj YO YG -jC +dm St GH "} @@ -6533,7 +6533,7 @@ GH Uq GH AR -eP +Pk aU Xu PN @@ -6597,7 +6597,7 @@ Tw GH Vh Vh -mh +rJ Vh oT tc diff --git a/_maps/shuttles/starfury_corvette.dmm b/_maps/shuttles/starfury_corvette.dmm index b9e8ce992f68d..877375fa4e785 100644 --- a/_maps/shuttles/starfury_corvette.dmm +++ b/_maps/shuttles/starfury_corvette.dmm @@ -56,6 +56,33 @@ }, /turf/open/floor/mineral/plastitanium, /area/shuttle/sbc_corvette) +"ai" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/corvette{ + dir = 8; + y_offset = 0; + x_offset = -3 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/sbc_corvette) +"aj" = ( +/obj/machinery/door/airlock/external{ + id_tag = "SBC_corvette_bolt"; + name = "Syndicate Corvette Airlock" + }, +/obj/docking_port/mobile/syndicate_corvette{ + preferred_direction = 1; + port_direction = 4 + }, +/obj/structure/fans/tiny, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/sbc_corvette) "ak" = ( /obj/structure/chair/comfy/shuttle{ name = "tactical chair" @@ -266,6 +293,13 @@ }, /turf/open/floor/iron/dark, /area/shuttle/sbc_corvette) +"aO" = ( +/obj/machinery/door/poddoor/preopen{ + id = "SBC_corvette_blast" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/shuttle/sbc_corvette) "aP" = ( /obj/machinery/door/airlock/hatch{ name = "Syndicate Corvette Cockpit" @@ -347,19 +381,6 @@ "aZ" = ( /turf/open/floor/catwalk_floor/iron_dark, /area/shuttle/sbc_corvette) -"eV" = ( -/obj/machinery/door/airlock/external{ - id_tag = "SBC_corvette_bolt"; - name = "Syndicate Corvette Airlock" - }, -/obj/docking_port/mobile/syndicate_corvette, -/obj/structure/fans/tiny, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/turf/open/floor/plating, -/area/shuttle/sbc_corvette) "qH" = ( /obj/structure/table, /obj/item/wrench, @@ -369,15 +390,6 @@ }, /turf/open/floor/iron/dark, /area/shuttle/sbc_corvette) -"rQ" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/corvette{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/shuttle/sbc_corvette) "uo" = ( /turf/open/floor/iron/dark/small, /area/shuttle/sbc_corvette) @@ -426,13 +438,6 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/sbc_corvette) -"Zi" = ( -/obj/machinery/door/poddoor/preopen{ - id = "SBC_corvette_blast" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/shuttle/sbc_corvette) (1,1,1) = {" aa @@ -504,7 +509,7 @@ aT aZ aU as -eV +aj "} (9,1,1) = {" aM @@ -534,29 +539,29 @@ ay aM "} (12,1,1) = {" -Zi +aO qH ac aW ae aQ -Zi +aO "} (13,1,1) = {" -Zi -Zi -rQ +aO +aO +ai ag ap -Zi -Zi +aO +aO "} (14,1,1) = {" aa -Zi -Zi -Zi -Zi -Zi +aO +aO +aO +aO +aO aa "} diff --git a/_maps/shuttles/whiteship_birdshot.dmm b/_maps/shuttles/whiteship_birdshot.dmm index a8d1a879aca7c..ed1936e3a1cf8 100644 --- a/_maps/shuttles/whiteship_birdshot.dmm +++ b/_maps/shuttles/whiteship_birdshot.dmm @@ -63,33 +63,6 @@ }, /turf/open/floor/iron/small, /area/shuttle/abandoned/crew) -"cj" = ( -/obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/condiment/enzyme, -/obj/item/food/meat/slab/synthmeat{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/food/meat/slab/synthmeat{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/food/meat/slab/synthmeat{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/reagent_containers/condiment/flour{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/reagent_containers/condiment/flour{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/reagent_containers/condiment/milk, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/shuttle/abandoned/bar) "cB" = ( /obj/structure/chair/stool/directional/west, /obj/effect/decal/cleanable/dirt, @@ -386,6 +359,33 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/shuttle/abandoned/crew) +"nz" = ( +/obj/structure/closet/secure_closet/freezer/fridge/open, +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/food/meat/slab/synthmeat{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/food/meat/slab/synthmeat{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/food/meat/slab/synthmeat{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/condiment/milk, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria, +/area/shuttle/abandoned/bar) "nL" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -1950,7 +1950,7 @@ fU Gg GS wY -cj +nz JP Kf jv diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index 8aa60f4e93bd2..ed2e2a17b9077 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -1272,9 +1272,7 @@ /area/shuttle/abandoned/medbay) "cL" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/medical{ - req_access = null - }, +/obj/machinery/vending/medical, /obj/machinery/airalarm/directional/north, /obj/effect/mapping_helpers/airalarm/all_access, /turf/open/floor/iron/white, diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm index 578f3dba14dc1..fbcca99889a4e 100644 --- a/_maps/shuttles/whiteship_cere.dmm +++ b/_maps/shuttles/whiteship_cere.dmm @@ -495,6 +495,16 @@ }, /turf/open/floor/wood, /area/shuttle/abandoned/bridge) +"wM" = ( +/obj/structure/cable, +/obj/structure/cable/layer1, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced/titaniumglass, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/abandoned/cargo) "wN" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, @@ -571,7 +581,7 @@ /turf/open/floor/pod/dark, /area/shuttle/abandoned/cargo) "CC" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/unlocked, @@ -665,16 +675,6 @@ /obj/effect/spawner/random/maintenance/six, /turf/open/floor/pod/dark, /area/shuttle/abandoned/cargo) -"Gu" = ( -/obj/structure/cable, -/obj/structure/cable/layer1, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced/titaniumglass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/turf/open/floor/catwalk_floor/iron_dark, -/area/shuttle/abandoned/cargo) "Ha" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 4 @@ -682,6 +682,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/dark, /area/shuttle/abandoned/cargo) +"Hw" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ + dir = 1; + x_offset = 0; + y_offset = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/shuttle/abandoned/bridge) "HI" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /obj/structure/cable, @@ -965,16 +975,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/dark, /area/shuttle/abandoned/cargo) -"Xq" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ - dir = 1; - x_offset = 0; - y_offset = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/shuttle/abandoned/bridge) "XT" = ( /obj/machinery/door/airlock/external/glass/ruin, /obj/effect/decal/cleanable/dirt, @@ -1145,7 +1145,7 @@ WF gK US gK -Gu +wM aG oB DC @@ -1247,7 +1247,7 @@ kP EQ aQ Fj -Xq +Hw su "} (12,1,1) = {" diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm index efc2302379730..f75f87001b517 100644 --- a/_maps/shuttles/whiteship_delta.dmm +++ b/_maps/shuttles/whiteship_delta.dmm @@ -101,7 +101,7 @@ /turf/open/floor/plating, /area/shuttle/abandoned/crew) "ap" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/whiteship_donut.dmm b/_maps/shuttles/whiteship_donut.dmm index 4ce4153077da8..1c28cd3481875 100644 --- a/_maps/shuttles/whiteship_donut.dmm +++ b/_maps/shuttles/whiteship_donut.dmm @@ -34,6 +34,11 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating/airless, /area/shuttle/abandoned) +"aX" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) "be" = ( /obj/machinery/power/shuttle_engine/propulsion/left, /turf/open/floor/plating/airless, @@ -202,11 +207,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/shuttle/abandoned) -"uj" = ( -/obj/machinery/power/shuttle_engine/heater, -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/plating/airless, -/area/shuttle/abandoned) "vu" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -543,7 +543,7 @@ pM nu YO ab -uj +aX be aa aa @@ -563,7 +563,7 @@ ac KL Te ab -uj +aX bf aa aa @@ -763,7 +763,7 @@ MT hP eu ab -uj +aX be aa aa @@ -783,7 +783,7 @@ qy BM kI ab -uj +aX bf aa aa diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm index 7e8095d573dca..0192f6aa1188a 100644 --- a/_maps/shuttles/whiteship_kilo.dmm +++ b/_maps/shuttles/whiteship_kilo.dmm @@ -192,16 +192,6 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/mineral/plastitanium, /area/shuttle/abandoned/bar) -"io" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/shuttle/abandoned/bar) "iI" = ( /obj/effect/spawner/structure/window/reinforced/shuttle, /obj/machinery/door/poddoor{ @@ -210,6 +200,15 @@ }, /turf/open/floor/plating, /area/shuttle/abandoned/bridge) +"jr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/shuttle_engine/propulsion/left{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned/engine) "jM" = ( /obj/structure/table, /obj/machinery/microwave{ @@ -225,15 +224,6 @@ dir = 1 }, /area/shuttle/abandoned/bar) -"kl" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/shuttle_engine/propulsion/left{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/shuttle/abandoned/bar) "kq" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -241,6 +231,29 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/shuttle/abandoned/cargo) +"ku" = ( +/obj/machinery/door/airlock/external/ruin{ + name = "External Freight Airlock" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/docking_port/mobile{ + callTime = 250; + can_move_docking_ports = 1; + dir = 2; + shuttle_id = "whiteship"; + launch_status = 0; + movement_force = list("KNOCKDOWN"=0,"THROW"=0); + name = "Mining Shuttle"; + port_direction = 8; + preferred_direction = 4 + }, +/turf/open/floor/plating, +/area/shuttle/abandoned/cargo) "kG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -307,6 +320,15 @@ /obj/structure/cable, /turf/open/floor/mineral/plastitanium, /area/shuttle/abandoned/bridge) +"mX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned/engine) "nt" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -326,6 +348,15 @@ /obj/structure/cable, /turf/open/floor/mineral/titanium/tiled/white, /area/shuttle/abandoned/bridge) +"oQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/shuttle_engine/propulsion/right{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned/bar) "pI" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, @@ -359,15 +390,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/pod/light, /area/shuttle/abandoned/bridge) -"qD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/shuttle_engine/propulsion{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/shuttle/abandoned/engine) "qL" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -377,16 +399,18 @@ /turf/open/floor/plating, /area/shuttle/abandoned/cargo) "ry" = ( -/obj/machinery/porta_turret/centcom_shuttle/weak{ - dir = 4; - name = "Old Mining Turret"; - lethal_projectile = /obj/projectile/kinetic/miner; - lethal_projectile_sound = 'sound/weapons/kinetic_accel.ogg'; - stun_projectile = /obj/projectile/kinetic/miner; - stun_projectile_sound = 'sound/weapons/kinetic_accel.ogg' - }, +/obj/machinery/porta_turret/centcom_shuttle/weak/mining, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned/bar) +"rC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/shuttle_engine/propulsion/right{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned/engine) "rX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, @@ -483,29 +507,6 @@ /obj/item/shovel, /turf/open/floor/plating, /area/shuttle/abandoned/cargo) -"wK" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "External Freight Airlock" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/docking_port/mobile{ - callTime = 250; - can_move_docking_ports = 1; - dir = 2; - shuttle_id = "whiteship"; - launch_status = 0; - movement_force = list("KNOCKDOWN"=0,"THROW"=0); - name = "Mining Shuttle"; - port_direction = 8; - preferred_direction = 4 - }, -/turf/open/floor/plating, -/area/shuttle/abandoned/cargo) "xh" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/abandoned/cargo) @@ -558,6 +559,19 @@ /obj/effect/mapping_helpers/airalarm/all_access, /turf/open/floor/pod/light, /area/shuttle/abandoned/bridge) +"zu" = ( +/obj/machinery/cell_charger, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/item/stock_parts/power_store/cell/emproof/empty{ + pixel_y = 7; + pixel_x = 5 + }, +/obj/effect/turf_decal/tile/brown, +/turf/open/floor/iron/white/corner{ + dir = 8 + }, +/area/shuttle/abandoned/cargo) "zJ" = ( /obj/effect/decal/cleanable/dirt, /obj/item/cigbutt, @@ -583,15 +597,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/plating, /area/shuttle/abandoned/cargo) -"Bo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/shuttle_engine/propulsion/left{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/shuttle/abandoned/engine) "BL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ @@ -707,35 +712,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/titanium/tiled/yellow, /area/shuttle/abandoned/engine) -"Iw" = ( -/obj/effect/turf_decal/trimline/white/line, -/obj/effect/turf_decal/trimline/white/filled/warning{ - dir = 1 - }, -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ - dir = 4; - view_range = 14; - y_offset = 5; - x_offset = 0 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "whiteship_windows"; - name = "NTMS-037 Windows Blast Door Control"; - pixel_x = -24; - pixel_y = 6 - }, -/obj/machinery/button/door{ - id = "whiteship_bridge"; - name = "NTMS-037 Bridge Blast Door Control"; - pixel_x = -24; - pixel_y = -6 - }, -/turf/open/floor/pod/light, -/area/shuttle/abandoned/bridge) "IX" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -877,6 +853,16 @@ /obj/structure/cable, /turf/open/floor/mineral/titanium/tiled/yellow, /area/shuttle/abandoned/engine) +"MI" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned/engine) "Nh" = ( /turf/closed/wall/mineral/plastitanium, /area/shuttle/abandoned/engine) @@ -908,6 +894,16 @@ /obj/item/storage/box/donkpockets, /turf/open/floor/bamboo, /area/shuttle/abandoned/bar) +"OZ" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned/bar) "Pe" = ( /obj/machinery/button/door/directional/north{ id = "whiteship_port"; @@ -921,29 +917,15 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/plating, /area/shuttle/abandoned/cargo) -"Pv" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 8 - }, -/obj/structure/window/reinforced/spawner/directional/east, +"Pz" = ( /obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/shuttle/abandoned/engine) -"PF" = ( -/obj/machinery/cell_charger, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/power_store/cell/emproof/empty{ - pixel_y = 7; - pixel_x = 5 + dir = 8 }, -/obj/effect/turf_decal/tile/brown, -/turf/open/floor/iron/white/corner{ +/obj/machinery/power/shuttle_engine/propulsion/left{ dir = 8 }, -/area/shuttle/abandoned/cargo) +/turf/open/floor/plating/airless, +/area/shuttle/abandoned/bar) "PR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 @@ -956,15 +938,6 @@ /obj/structure/cable, /turf/open/floor/mineral/titanium/tiled/yellow, /area/shuttle/abandoned/engine) -"PX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/shuttle_engine/propulsion/right{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/shuttle/abandoned/bar) "Qm" = ( /obj/effect/turf_decal/stripes{ dir = 10 @@ -986,15 +959,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/shuttle/abandoned/bar) -"Rq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/shuttle_engine/propulsion/right{ - dir = 8 - }, -/turf/open/floor/plating/airless, -/area/shuttle/abandoned/engine) "Rr" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot_white, @@ -1053,6 +1017,35 @@ }, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned/cargo) +"Ta" = ( +/obj/effect/turf_decal/trimline/white/line, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 1 + }, +/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ + dir = 4; + view_range = 14; + y_offset = 5; + x_offset = 0 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door{ + id = "whiteship_windows"; + name = "NTMS-037 Windows Blast Door Control"; + pixel_x = -24; + pixel_y = 6 + }, +/obj/machinery/button/door{ + id = "whiteship_bridge"; + name = "NTMS-037 Bridge Blast Door Control"; + pixel_x = -24; + pixel_y = -6 + }, +/turf/open/floor/pod/light, +/area/shuttle/abandoned/bridge) "Tf" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/brown/filled/shrink_ccw{ @@ -1207,9 +1200,9 @@ (1,1,1) = {" Nh -Bo -qD -Rq +jr +mX +rC Nh Gu Gu @@ -1222,13 +1215,13 @@ Gu "} (2,1,1) = {" Nh -Pv -Pv -Pv +MI +MI +MI CG -Bo -qD -Rq +jr +mX +rC gL Gu Gu @@ -1241,9 +1234,9 @@ Ss bl eT CG -Pv -Pv -Pv +MI +MI +MI CG Gu Gu @@ -1320,8 +1313,8 @@ NV NV nN NV -kl -PX +Pz +oQ BS Gu "} @@ -1332,20 +1325,20 @@ bF eD Nt iI -Iw +Ta mH NV -io -io +OZ +OZ Of Gu "} (10,1,1) = {" -wK +ku Bk vM Wj -PF +zu iI qu YV diff --git a/_maps/shuttles/whiteship_obelisk.dmm b/_maps/shuttles/whiteship_obelisk.dmm index 0f1e07b1a213e..9a680e80e2b08 100644 --- a/_maps/shuttles/whiteship_obelisk.dmm +++ b/_maps/shuttles/whiteship_obelisk.dmm @@ -732,9 +732,7 @@ /turf/open/floor/mineral/titanium/white, /area/shuttle/abandoned/medbay) "Qp" = ( -/obj/machinery/vending/medical{ - req_access = null - }, +/obj/machinery/vending/medical, /turf/open/floor/mineral/titanium/white, /area/shuttle/abandoned/medbay) "RG" = ( diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 985a7133a9414..491aac07280c5 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -80,6 +80,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/shuttle/abandoned) +"cE" = ( +/obj/effect/turf_decal/bot_white, +/obj/machinery/atmospherics/components/tank/air/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/shuttle/abandoned) "cS" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 @@ -452,14 +460,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/purple, /area/shuttle/abandoned) -"rY" = ( -/obj/effect/turf_decal/bot_white, -/obj/machinery/atmospherics/components/tank/air/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/shuttle/abandoned) "sl" = ( /obj/machinery/door/poddoor{ id = "whiteship_bridge" @@ -1359,7 +1359,7 @@ CG Il pV Bu -rY +cE Sc ot cx diff --git a/_maps/shuttles/whiteship_tram.dmm b/_maps/shuttles/whiteship_tram.dmm index 82f32e910afb7..7666e2c70ac85 100644 --- a/_maps/shuttles/whiteship_tram.dmm +++ b/_maps/shuttles/whiteship_tram.dmm @@ -496,6 +496,25 @@ }, /turf/open/floor/iron/smooth_large, /area/shuttle/abandoned/engine) +"ca" = ( +/obj/structure/cable, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/multitool{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/item/stack/cable_coil{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 9 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/iron/smooth_large, +/area/shuttle/abandoned/engine) "cg" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/mineral/plastitanium/nodiagonal, @@ -1143,6 +1162,18 @@ /obj/structure/lattice, /turf/template_noop, /area/shuttle/abandoned/cargo) +"Ft" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ + dir = 8; + x_offset = 0; + y_offset = 13 + }, +/obj/effect/turf_decal/stripes/white/corner{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/abandoned/bridge) "FQ" = ( /obj/item/shard/titanium, /obj/structure/grille/broken, @@ -1236,18 +1267,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/smooth_large, /area/shuttle/abandoned/engine) -"NZ" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ - dir = 8; - x_offset = 0; - y_offset = 13 - }, -/obj/effect/turf_decal/stripes/white/corner{ - dir = 1 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark/textured_large, -/area/shuttle/abandoned/bridge) "OL" = ( /obj/machinery/computer/shuttle/white_ship/bridge{ dir = 8 @@ -1257,25 +1276,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/shuttle/abandoned/bridge) -"OV" = ( -/obj/structure/cable, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/multitool{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/item/stack/cable_coil{ - pixel_x = -5; - pixel_y = 6 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 9 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/iron/smooth_large, -/area/shuttle/abandoned/engine) "PI" = ( /obj/machinery/door/window/survival_pod/left/directional/east, /obj/effect/turf_decal/delivery/red, @@ -1569,7 +1569,7 @@ RK dn yd OL -NZ +Ft dx "} (5,1,1) = {" @@ -1605,7 +1605,7 @@ da cl Rs ad -OV +ca NU bx ad diff --git a/_maps/shuttles/zubbers/emergency_vortex.dmm b/_maps/shuttles/zubbers/emergency_vortex.dmm new file mode 100644 index 0000000000000..576300c811dda --- /dev/null +++ b/_maps/shuttles/zubbers/emergency_vortex.dmm @@ -0,0 +1,5222 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ai" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 5 + }, +/obj/machinery/suit_storage_unit/nuke_med{ + name = "Spare Command suit storage unit"; + suit_type = /obj/item/clothing/suit/space/syndicate/blue; + helmet_type = /obj/item/clothing/head/helmet/space/syndicate/black/blue + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ak" = ( +/obj/structure/toilet{ + pixel_y = 10 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"az" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6; + color = "#469085" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin{ + name = "External disposal unit"; + desc = "A pneumatic waste disposal unit. This one leads to space, do NOT joy ride in this one." + }, +/obj/structure/sign/warning/deathsposal/directional/west, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"aU" = ( +/obj/machinery/light/cold/dim/directional/south, +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"bj" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"bq" = ( +/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/line{ + color = "#469085" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"br" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/pale/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/shuttle/escape) +"bu" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/item/paper/crumpled/bloody{ + name = "written concerns"; + default_raw_text = "Man, who's great idea was it to shove shipping containers in the back of this emergency shuttle? There isn't even a big enough bay to get them out either! I better get to work before this shuttle is sent out to a station, who knows what they might think." + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"bw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/end{ + dir = 4; + color = "#469085" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"bx" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/machinery/computer/emergency_shuttle/advanced, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"bF" = ( +/obj/machinery/newscaster/directional/north, +/obj/structure/table/wood/fancy/red, +/obj/item/storage/box/coffeepack/robusta{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/item/storage/box/coffeepack/robusta{ + pixel_y = 2; + pixel_x = -1 + }, +/obj/item/storage/box/coffeepack{ + pixel_x = 2; + pixel_y = -2 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"bG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/closet/firecloset/wall{ + pixel_y = 28 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"bI" = ( +/obj/machinery/power/shuttle_engine/propulsion/left, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/floor, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"bV" = ( +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/mob/living/simple_animal/bot/secbot/beepsky/officer{ + name = "Officer Olesky"; + desc = "It's Officer Olesky! Powered by a potato and a shot of whiskey, and with a sturdier reinforced chassis, too."; + bot_mode_flags = 1.67772e+007 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape/brig) +"ce" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"ci" = ( +/obj/effect/turf_decal/trimline/red/real_red/filled/corner, +/obj/effect/turf_decal/trimline/red/real_red/corner{ + color = "#350E0E" + }, +/obj/effect/turf_decal/trimline/red/real_red/filled/warning{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"cl" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/light/cold/dim/directional/west, +/obj/machinery/button/door{ + id = "vortexevacbrig"; + name = "Window Shutters Control"; + pixel_x = -25; + req_access = list("security"); + pixel_y = 5 + }, +/obj/machinery/button/flasher{ + pixel_x = -25; + pixel_y = -5; + name = "Entrance Flasher Control"; + id = "vortexevacflash1" + }, +/obj/machinery/button/flasher{ + pixel_x = -36; + name = "Brig Flasher Control"; + id = "vortexevacflash2" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"cz" = ( +/obj/effect/turf_decal/skyrat_decals/misc/handicapped, +/obj/machinery/light/cold/dim/directional/south, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"cJ" = ( +/obj/machinery/disposal/bin{ + name = "External disposal unit"; + desc = "A pneumatic waste disposal unit. This one leads to space, do NOT joy ride in this one." + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"cK" = ( +/obj/machinery/door/airlock/silver/glass{ + name = "Evacuation Shuttle Common Seating Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"cU" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + color = "#469085" + }, +/obj/machinery/newscaster/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"dc" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"dh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/vending/wallmed/directional/north{ + onstation = 0 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"dI" = ( +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"dK" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"dS" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevaceng"; + name = "Evacuation Shuttle Engineering Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape/engine) +"eb" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/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/navbeacon{ + codes_txt = "patrol;next_patrol=evac-3"; + location = "evac-2" + }, +/mob/living/basic/bot/firebot{ + bot_mode_flags = 31; + name = "Firefighter Frank" + }, +/obj/structure/disposalpipe/junction, +/turf/open/floor/wood, +/area/shuttle/escape) +"eo" = ( +/obj/machinery/disposal/bin{ + name = "External disposal unit"; + desc = "A pneumatic waste disposal unit. This one leads to space, do NOT joy ride in this one." + }, +/obj/structure/sign/warning/deathsposal/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"eC" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Evacuation Shuttle External Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"eT" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + 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/junction/flip{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"fk" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacatmos"; + name = "Evacuation Shuttle Atmospherics Shutters"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plating, +/area/shuttle/escape/engine) +"fn" = ( +/obj/effect/turf_decal/siding/wood, +/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, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"fv" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/medkit/tactical, +/obj/machinery/light/cold/dim/directional/east, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"fS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/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, +/turf/open/floor/wood, +/area/shuttle/escape) +"ge" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/machinery/light/floor, +/turf/open/floor/grass, +/area/shuttle/escape) +"gt" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"gw" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"gy" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"gD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"gF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/recharge_station, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"hb" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacbrig"; + name = "Evacuation Shuttle Brig Shutters"; + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape) +"hp" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/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/navbeacon{ + codes_txt = "patrol;next_patrol=evac-2"; + location = "evac-1" + }, +/mob/living/basic/bot/cleanbot/autopatrol{ + name = "Janitor Jim" + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"hR" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/light/cold/dim/directional/west, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/turf/open/floor/wood, +/area/shuttle/escape) +"in" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/structure/reagent_dispensers/wall/peppertank/directional/south, +/obj/item/storage/lockbox/loyalty, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"iu" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/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 = 4 + }, +/obj/machinery/space_heater/wall_mounted/directional/north, +/turf/open/floor/wood, +/area/shuttle/escape) +"iv" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/sign/warning/engine_safety/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/ore_silo, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"iw" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"iy" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/corner, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"iH" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 4 + }, +/obj/machinery/computer/records/security/laptop{ + dir = 4 + }, +/obj/structure/table/reinforced/titaniumglass, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"iQ" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/holopad/secure, +/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/wood/parquet, +/area/shuttle/escape) +"jb" = ( +/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/small, +/area/shuttle/escape) +"jo" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"jq" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 2 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"jw" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/machinery/portable_atmospherics/pump, +/obj/structure/sign/warning/vacuum/external/directional/east, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"jD" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"jP" = ( +/obj/machinery/door/airlock/engineering{ + name = "Evacuation Shuttle Engineering" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/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/textured_large, +/area/shuttle/escape/engine) +"jW" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/shuttle/escape) +"kh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/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/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"km" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"kr" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape/engine) +"kw" = ( +/obj/machinery/light/cold/dim/directional/west, +/obj/machinery/button/door{ + id = "vortexevac"; + name = "Window Shutters Control"; + pixel_x = -25 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"kz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"kB" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"kG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"kN" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"kV" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/machinery/button/door{ + id = "vortexevaceng"; + name = "Window Shutters Control"; + pixel_x = 25; + req_access = list("engineering") + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"la" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/item/holosign_creator/engineering, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape/engine) +"lh" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 4; + color = "#1A2335" + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"lk" = ( +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/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/iron/dark/small, +/area/shuttle/escape) +"ll" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/holosign/barrier/engineering, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape/engine) +"lm" = ( +/obj/machinery/newscaster/directional/north, +/obj/machinery/ammo_workbench, +/obj/item/stack/sheet/iron/fifty, +/obj/item/disk/ammo_workbench/advanced, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"lo" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/disposal/bin{ + name = "External disposal unit"; + desc = "A pneumatic waste disposal unit. This one leads to space, do NOT joy ride in this one." + }, +/obj/structure/sign/warning/deathsposal/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"lv" = ( +/obj/machinery/suit_storage_unit/captain{ + name = "Captain's suit storage unit" + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/status_display/evac/directional/east, +/turf/open/floor/mineral/gold, +/area/shuttle/escape) +"ly" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape/engine) +"lE" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1; + color = "#469085" + }, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/belt/utility/full/powertools, +/obj/item/storage/belt/utility/full/powertools, +/obj/item/pipe_dispenser, +/obj/item/pipe_dispenser, +/obj/item/pipe_dispenser, +/obj/structure/plaque/static_plaque/atmos{ + pixel_y = -32 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"lT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/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, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/shuttle/escape) +"mg" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape/engine) +"my" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/silver/glass{ + name = "Evacuation Shuttle Common Seating Airlock" + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"mH" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + color = "#469085" + }, +/obj/effect/turf_decal/trimline/blue/corner{ + color = "#122623" + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9; + color = "#469085" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"mI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/shuttle/escape) +"mM" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevaccom"; + name = "Evacuation Shuttle Bridge Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape) +"mO" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/item/stock_parts/power_store/cell/super, +/obj/item/stock_parts/power_store/cell/super, +/obj/item/stock_parts/power_store/cell/super, +/obj/item/stock_parts/power_store/cell/super, +/obj/item/stock_parts/power_store/cell/super, +/obj/item/stock_parts/power_store/cell/super, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 1 + }, +/obj/machinery/cell_charger_multi, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"mR" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/turf/open/floor/iron/dark/textured_large/airless, +/area/shuttle/escape/engine) +"nn" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacatmos"; + name = "Evacuation Shuttle Atmospherics Shutters" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/shuttle/escape/engine) +"ns" = ( +/obj/machinery/light/floor, +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/effect/turf_decal/trimline/white/filled, +/obj/effect/turf_decal/trimline/white{ + color = "#232323" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"nA" = ( +/obj/effect/turf_decal/trimline/red/real_red/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/red/real_red/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/shuttle/escape/brig) +"nE" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + color = "#0D1D26"; + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/machinery/self_actualization_device, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"nH" = ( +/obj/effect/turf_decal/siding/wood, +/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, +/obj/machinery/airalarm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"nS" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"nX" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/power/shuttle_engine/heater, +/obj/machinery/door/window/survival_pod/left/directional/north{ + name = "Engine Maintenance Access" + }, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacengine"; + name = "Evacuation Shuttle Engine Shutters"; + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/escape/engine) +"nZ" = ( +/obj/effect/turf_decal/siding/wood{ + 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/table/reinforced/titaniumglass, +/obj/item/reagent_containers/cup/glass/trophy/gold_cup{ + pixel_y = 13; + name = "#1 Nanotrasen Employees award"; + desc = "Awarded to the best employees that survived yet another shift of Bubberstation 13." + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"oe" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"oh" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/closet/emcloset/wall{ + pixel_y = -29 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"om" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/disposaloutlet{ + dir = 4; + name = "Shuttle Garbage Dispenser" + }, +/turf/open/floor/iron/dark/textured_large/airless, +/area/shuttle/escape/engine) +"oo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/stasis{ + dir = 1 + }, +/obj/machinery/iv_drip, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"op" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"oq" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"or" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"ow" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/shuttle/escape) +"ox" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled, +/obj/effect/turf_decal/trimline/dark_blue{ + color = "#1A2335" + }, +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 8 + }, +/obj/machinery/newscaster/directional/east, +/obj/machinery/light/cold/dim/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"oA" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + 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/small, +/area/shuttle/escape) +"oK" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/door/window/survival_pod/left/directional/west{ + name = "Prisoner Storage"; + req_access = list("security") + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/shuttle/escape/brig) +"oW" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/cable, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"oY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/yellow/corner{ + color = "#33260E"; + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"pu" = ( +/obj/effect/turf_decal/siding/wood/corner{ + 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/wood/parquet, +/area/shuttle/escape) +"px" = ( +/obj/machinery/power/shuttle_engine/large, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"pB" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/machinery/rnd/production/protolathe/department/engineering, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"pE" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/shuttle/escape) +"pF" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/navbeacon{ + location = "evac-0"; + codes_txt = "patrol;next_patrol=evac-1" + }, +/mob/living/basic/bot/hygienebot{ + name = "Decontaiminator Dan"; + bot_mode_flags = 31 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/shuttle/escape) +"pQ" = ( +/obj/effect/turf_decal/trimline/red/real_red/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/real_red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/shuttle/escape/brig) +"pZ" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/effect/mob_spawn/corpse/human/engineer, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"qb" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/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 = 10 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"qi" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"qs" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/machinery/light/cold/dim/directional/west, +/obj/machinery/airalarm/directional/west, +/obj/machinery/vending/tool{ + onstation = 0 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"qI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/flasher{ + id = "vortexevacflash2" + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape/brig) +"qM" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/vending/drugs{ + onstation = 0 + }, +/obj/structure/sign/clock/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"qN" = ( +/obj/item/stack/sheet/titaniumglass/fifty, +/obj/item/stack/sheet/glass{ + amount = 20; + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/stack/sheet/mineral/titanium/fifty, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/structure/closet/crate/engineering, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency, +/obj/item/radio, +/obj/item/radio, +/obj/item/wrench/bolter, +/obj/item/wrench/bolter, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"qQ" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"qT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/vending/wallmed/directional/north{ + pixel_x = 32; + onstation = 0 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"qW" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + color = "#1A2335"; + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"rf" = ( +/obj/machinery/vending/wallmed/directional/south{ + onstation = 0 + }, +/obj/machinery/computer/records/security{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"rs" = ( +/obj/effect/turf_decal/trimline/red/real_red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/real_red/filled/line, +/obj/effect/turf_decal/trimline/red/real_red/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark/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 = 9 + }, +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/shuttle/escape/brig) +"rt" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood/corner{ + 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{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"ru" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"rv" = ( +/obj/machinery/cell_charger_multi, +/obj/effect/turf_decal/siding/thinplating_new/dark/end, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/stock_parts/power_store/cell/super, +/obj/item/stock_parts/power_store/cell/super, +/obj/item/stock_parts/power_store/cell/super, +/obj/item/stock_parts/power_store/cell/super, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"rw" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"ry" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Evacuation Shuttle External Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/docking_port/mobile/emergency{ + name = "Vortex Emergency Shuttle" + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"rD" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/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/junction/flip, +/turf/open/floor/wood, +/area/shuttle/escape) +"rF" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + color = "#1A2335"; + dir = 1 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"rZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"si" = ( +/obj/effect/turf_decal/trimline/red/real_red/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/red/real_red/filled/line{ + dir = 6 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/shuttle/escape/brig) +"sn" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"sp" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/shuttle/escape) +"sr" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/shuttle/escape) +"ss" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/machinery/door/window/survival_pod/left/directional/west{ + name = "Prisoner Storage"; + req_access = list("security") + }, +/turf/open/floor/carpet/orange, +/area/shuttle/escape/brig) +"sM" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/sleeper, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"sR" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/corner, +/obj/structure/holosign/barrier/engineering, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"sW" = ( +/turf/open/floor/glass/reinforced, +/area/shuttle/escape) +"sX" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevac"; + name = "Evacuation Shuttle Common Seating Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"tf" = ( +/obj/machinery/suit_storage_unit/rd{ + name = "Research Director's suit storage unit" + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/machinery/light/cold/dim/directional/north, +/obj/effect/turf_decal/trimline/white/filled/warning, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"tg" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"tk" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape/engine) +"tv" = ( +/obj/machinery/suit_storage_unit/hos{ + mod_type = /obj/item/mod/control/pre_equipped/asset_protection; + name = "Blueshield's suit storage unit" + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/mineral/silver, +/area/shuttle/escape) +"tE" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 4 + }, +/obj/machinery/light/cold/dim/directional/south, +/obj/machinery/status_display/evac/directional/west, +/obj/structure/sign/clock/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"tF" = ( +/obj/machinery/button/door/directional/south{ + name = "Restroom Lock Control"; + id = "vortexevacrest" + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"tH" = ( +/turf/template_noop, +/area/template_noop) +"tT" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/structure/shipping_container/nanotrasen, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape/engine) +"tV" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled, +/obj/effect/turf_decal/trimline/dark_blue{ + color = "#1A2335" + }, +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"up" = ( +/obj/machinery/light/floor, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"uy" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/computer/message_monitor{ + dir = 1 + }, +/obj/item/paper/monitorkey, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"uA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/end{ + dir = 8; + color = "#469085" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/binary/pump/on/supply/visible/layer4{ + dir = 8; + name = "Air to Vents pump" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"uB" = ( +/obj/machinery/door/airlock/atmos{ + name = "Evacuation Shuttle Atmospherics" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/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/textured_large, +/area/shuttle/escape/engine) +"uD" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/table/optable, +/obj/machinery/light/cold/dim/directional/east, +/obj/machinery/defibrillator_mount/charging{ + pixel_x = 28 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"uL" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/machinery/rnd/production/protolathe/department/medical, +/obj/machinery/light/cold/dim/directional/south, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"vd" = ( +/obj/effect/turf_decal/trimline/red/real_red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/real_red/filled/line, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/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, +/area/shuttle/escape/brig) +"vf" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"vg" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085" + }, +/obj/effect/turf_decal/trimline/blue/line{ + color = "#122623" + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1; + color = "#469085" + }, +/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/dark, +/area/shuttle/escape) +"vq" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/machinery/door/window/survival_pod/left/directional/west{ + name = "Prisoner Storage"; + req_access = list("security") + }, +/obj/machinery/light/cold/dim/directional/east, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/carpet/orange, +/area/shuttle/escape/brig) +"vr" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/suit_storage_unit/engine, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"vC" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/shuttle/escape) +"vH" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled, +/obj/effect/turf_decal/trimline/dark_blue{ + color = "#1A2335" + }, +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"vI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/reinforced/titaniumglass, +/obj/machinery/keycard_auth{ + pixel_y = 11; + pixel_x = -6 + }, +/obj/machinery/keycard_auth{ + pixel_y = 11; + pixel_x = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/recharger, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"vL" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + color = "#1A2335" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"vQ" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/space_heater/wall_mounted/directional/south, +/turf/open/floor/wood, +/area/shuttle/escape) +"vR" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/corner{ + color = "#33260E"; + dir = 8 + }, +/obj/machinery/button/door{ + id = "vortexevacengine"; + name = "Engine Shutters Control"; + req_access = list("engineering"); + pixel_y = -25 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"vU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/stasis{ + dir = 1 + }, +/obj/machinery/iv_drip, +/obj/machinery/vending/wallmed/directional/north{ + onstation = 0 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"vV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"wd" = ( +/obj/structure/reagent_dispensers/wall/peppertank/directional/south, +/obj/structure/hedge, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"wj" = ( +/obj/effect/turf_decal/trimline/red/real_red/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/real_red/corner{ + color = "#350E0E"; + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/real_red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/sign/departments/security/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"wD" = ( +/obj/structure/sign/clock/directional/north, +/obj/structure/table/reinforced/titaniumglass, +/obj/machinery/recharger, +/obj/item/melee/baton/security, +/obj/item/melee/baton/security, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"wF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/cable, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"wO" = ( +/obj/effect/turf_decal/loading_area/white{ + dir = 1; + color = "#52B4E9" + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"wS" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"xe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/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, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/shuttle/escape) +"xf" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Evacuation Shuttle Infirmary" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/medical/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 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"xq" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark/textured_large/airless, +/area/shuttle/escape/engine) +"xs" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacatmos"; + name = "Evacuation Shuttle Atmospherics Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape/engine) +"xy" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacmed"; + name = "Evacuation Shuttle Infirmary Shutters"; + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape) +"xD" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/recharger, +/obj/item/gun/energy/e_gun, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"yb" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"yg" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/machinery/power/smes/super/full{ + name = "shuttle power storage unit" + }, +/obj/structure/cable, +/obj/machinery/light/cold/dim/directional/north, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape/engine) +"yk" = ( +/obj/machinery/vending/cola/red{ + onstation = 0 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"yo" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacbrig"; + name = "Evacuation Shuttle Brig Shutters"; + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape) +"ys" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"yu" = ( +/obj/effect/turf_decal/trimline/red/real_red/corner, +/obj/effect/turf_decal/trimline/red/real_red/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark/side{ + dir = 9 + }, +/area/shuttle/escape/brig) +"yA" = ( +/obj/machinery/light/cold/dim/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085" + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + color = "#469085"; + dir = 1 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"yE" = ( +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"yJ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085"; + dir = 1 + }, +/obj/machinery/atmospherics/components/binary/pump/on/scrubbers/visible/layer2{ + dir = 4; + name = "Scrubbers to Vent pump" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"yL" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"yN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"yO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"zg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/item/radio/intercom/command/directional/north, +/obj/structure/sign/flag/nanotrasen/directional/north, +/obj/structure/closet/secure_closet/freezer/empty{ + name = "baked goods fridge" + }, +/obj/effect/spawner/random/food_or_drink/donuts, +/obj/effect/spawner/random/food_or_drink/donuts, +/obj/effect/spawner/random/food_or_drink/donuts, +/obj/effect/spawner/random/food_or_drink/jelly_donuts, +/obj/effect/spawner/random/food_or_drink/jelly_donuts, +/obj/effect/spawner/random/food_or_drink/jelly_donuts, +/obj/item/food/cake/apple, +/obj/item/food/cake/carrot, +/obj/item/food/cake/cheese, +/obj/item/food/cake/chocolate, +/obj/item/food/cake/lemon, +/obj/item/food/cake/fruit, +/obj/item/food/cake/berry_chocolate_cake, +/obj/item/food/croissant, +/obj/item/food/bread/banana, +/obj/item/food/bread/creamcheese, +/obj/item/food/cookie, +/obj/item/food/cookie/shortbread, +/obj/item/food/cookie/sugar, +/obj/item/food/cookie/oatmeal, +/obj/item/food/cookie/peanut_butter, +/obj/item/food/cookie/raisin, +/obj/item/coffee_cartridge, +/obj/item/coffee_cartridge, +/obj/item/coffee_cartridge/bootleg, +/obj/item/coffee_cartridge/bootleg, +/obj/item/coffee_cartridge/decaf, +/obj/item/coffee_cartridge/decaf, +/obj/item/coffee_cartridge/fancy, +/obj/item/coffee_cartridge/fancy, +/turf/open/floor/wood, +/area/shuttle/escape) +"zi" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevaceva"; + name = "Evacuation Shuttle E.V.A. Shutters"; + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape) +"zk" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape/engine) +"zs" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/machinery/light/floor, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/structure/shipping_container/nakamura, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"zE" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/suit_storage_unit/centcom{ + name = "Representative's suit storage unit" + }, +/turf/open/floor/mineral/silver, +/area/shuttle/escape) +"zM" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevaceng"; + name = "Evacuation Shuttle Engineering Shutters"; + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape/engine) +"zX" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/closet/secure_closet/engineering_welding, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"zZ" = ( +/obj/machinery/suit_storage_unit/cmo{ + name = "Chief Medical Officer's suit storage unit" + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/white/filled/warning, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ab" = ( +/obj/machinery/recharge_station, +/obj/machinery/door/window/survival_pod/left/directional/west{ + name = "Cyborg Recharger Access" + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/escape) +"Ay" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"AE" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/machinery/requests_console/directional/south{ + name = "Evacuation Shuttle Bridge Request Console"; + department = "Evacuation Shuttle Bridge" + }, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/obj/machinery/rnd/production/protolathe/tarkon{ + stripe_color = "#486091"; + desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type."; + name = "advanced department protolathe (Command)" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"AM" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 9 + }, +/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/shuttle/escape/engine) +"AP" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/shuttle/escape) +"AU" = ( +/obj/machinery/door/airlock/corporate{ + name = "Evacuation Shuttle E.V.A." + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/command/eva, +/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/shuttle/escape) +"AX" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/escape) +"Bh" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/light/cold/dim/directional/west, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"Bm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/light/cold/dim/directional/north, +/obj/machinery/newscaster/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"By" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + color = "#1A2335" + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"Bz" = ( +/obj/machinery/newscaster/directional/north, +/obj/structure/table/wood/fancy/red, +/obj/item/storage/fancy/cigarettes/cigars/havana{ + pixel_y = 13 + }, +/obj/item/storage/fancy/cigarettes/cigars/havana{ + pixel_y = 18 + }, +/obj/item/storage/fancy/cigarettes/cigars/cohiba{ + pixel_y = 5 + }, +/obj/item/storage/fancy/cigarettes/cigars/cohiba{ + pixel_y = 10 + }, +/obj/item/storage/fancy/cigarettes/cigars{ + pixel_y = 16 + }, +/obj/item/lighter/royal{ + pixel_x = -6 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"BC" = ( +/obj/machinery/vending/snack{ + onstation = 0 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"BG" = ( +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"Cf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"Ch" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevaceva"; + name = "Evacuation Shuttle E.V.A. Shutters"; + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape) +"CS" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"CU" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"CV" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/machinery/suit_storage_unit/engine, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Dc" = ( +/obj/machinery/power/shuttle_engine/large, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/floor, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"Df" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/corner{ + color = "#33260E" + }, +/obj/structure/sign/departments/engineering/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Dp" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + color = "#1A2335"; + dir = 5 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"Ds" = ( +/obj/machinery/atmospherics/components/tank/air/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + color = "#469085" + }, +/obj/machinery/status_display/evac/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Dy" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/structure/hedge, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"DM" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/machinery/light/floor, +/turf/open/floor/grass, +/area/shuttle/escape) +"DN" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085"; + dir = 6 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"DR" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/trimline/blue/corner{ + color = "#0D1D26" + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/desk_bell, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/food/lollipop{ + pixel_y = 8; + pixel_x = -6 + }, +/obj/item/food/lollipop{ + pixel_y = 7; + pixel_x = -1 + }, +/obj/structure/sign/departments/med/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ea" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + 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/wood, +/area/shuttle/escape) +"Ed" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/surgery_tray/full/advanced, +/obj/item/storage/toolbox/syndicate{ + name = "synthetic surgery toolbox"; + pixel_y = 6 + }, +/obj/item/defibrillator/loaded{ + pixel_y = 12 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ek" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table/wood/fancy/red, +/obj/machinery/coffeemaker/impressa{ + pixel_y = 10; + pixel_x = 2 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"Er" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + color = "#1A2335"; + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"Eu" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "vortexevaccom"; + name = "Window Shutters Control"; + req_access = list("command"); + pixel_y = -25 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ez" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/trimline/yellow/filled, +/obj/effect/turf_decal/trimline/yellow{ + color = "#33260E" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"EC" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevaccom"; + name = "Evacuation Shuttle Bridge Shutters"; + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape) +"EG" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"EM" = ( +/obj/machinery/light/cold/dim/directional/south, +/obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "vortexevaceva"; + name = "Window Shutters Control"; + req_access = list("eva"); + pixel_y = -25 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ET" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 9 + }, +/obj/item/storage/toolbox/electrical{ + pixel_y = 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, +/area/shuttle/escape) +"EX" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/medkit/robotic_repair/preemo/stocked{ + pixel_y = 16 + }, +/obj/item/storage/backpack/duffelbag/deforest_medkit/stocked{ + pixel_y = 9 + }, +/obj/item/storage/medkit/combat_surgeon/stocked{ + pixel_y = 2 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Fg" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/cable, +/turf/open/floor/wood, +/area/shuttle/escape) +"Fk" = ( +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/corner, +/obj/effect/turf_decal/trimline/blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"Fq" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/corner{ + dir = 1; + color = "#1A2335" + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ft" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/machinery/recharge_station, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"FC" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"FH" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/line, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"FN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"FO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + color = "#469085"; + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/corner{ + color = "#122623"; + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1; + color = "#469085" + }, +/obj/structure/sign/warning/gas_mask/directional/south{ + desc = "A sign labelling an area where atmospheric technicians work."; + name = "\improper Atmospherics sign" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"FP" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/line{ + dir = 1; + color = "#1A2335" + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/effect/turf_decal/siding/thinplating_new/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, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"FZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085" + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"Gd" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/structure/fireaxecabinet/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Gm" = ( +/obj/effect/turf_decal/trimline/yellow/filled/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, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"Gp" = ( +/obj/effect/turf_decal/trimline/red/real_red/filled/line, +/obj/effect/turf_decal/trimline/red/real_red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + 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 = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"Gw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner, +/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/wood, +/area/shuttle/escape) +"Gx" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"GC" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"GH" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/machinery/power/smes/super/full{ + name = "shuttle power storage unit" + }, +/obj/structure/cable, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape/engine) +"GT" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/shuttle/escape) +"GZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/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 = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"He" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"Hn" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable, +/turf/open/floor/wood, +/area/shuttle/escape) +"Hy" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/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, +/turf/open/floor/wood, +/area/shuttle/escape) +"HE" = ( +/obj/effect/turf_decal/skyrat_decals/misc/handicapped, +/obj/machinery/light/cold/dim/directional/south, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"HF" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 4 + }, +/obj/machinery/vending/cigarette{ + onstation = 0 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"HK" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/structure/table/reinforced/titaniumglass, +/obj/machinery/light/cold/dim/directional/west, +/obj/item/megaphone/command, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"HQ" = ( +/obj/machinery/door/airlock/atmos{ + name = "Evacuation Shuttle Atmospherics" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/engine) +"HU" = ( +/obj/effect/turf_decal/trimline/red/real_red/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/real_red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/shuttle/escape/brig) +"Iu" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled, +/obj/effect/turf_decal/trimline/dark_blue{ + color = "#1A2335" + }, +/obj/structure/sign/departments/restroom/directional/east, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Iw" = ( +/obj/machinery/sleeper, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"IH" = ( +/obj/effect/turf_decal/siding/wood/corner{ + 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/navbeacon{ + codes_txt = "patrol;next_patrol=evac-0"; + location = "evac-3" + }, +/mob/living/basic/bot/medbot/autopatrol{ + name = "Dr. Real Doctor" + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"II" = ( +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/engineering/glass{ + name = "Evacuation Shuttle Engineering Airlock" + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/engine) +"IK" = ( +/obj/machinery/light/cold/dim/directional/south, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"IL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large/airless, +/area/shuttle/escape/engine) +"IS" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1; + color = "#469085" + }, +/obj/machinery/space_heater, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Jf" = ( +/obj/structure/reagent_dispensers/foamtank, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + color = "#469085"; + dir = 10 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Jk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/flasher{ + id = "vortexevacflash2" + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape/brig) +"JA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"JL" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark_blue/warning{ + color = "#1A2335"; + dir = 6 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"JO" = ( +/turf/open/floor/wood, +/area/shuttle/escape) +"JX" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/vending/medical{ + onstation = 0 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Kd" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Kk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/reinforced/titaniumglass, +/obj/machinery/button/door{ + id = "vortexevacbrig"; + name = "Brig Window Shutters Control"; + pixel_x = -5; + pixel_y = 6; + req_access = list("command") + }, +/obj/machinery/button/door{ + id = "vortexevacmed"; + name = "Infirmary Window Shutters Control"; + pixel_x = 5; + pixel_y = 6; + req_access = list("command") + }, +/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{ + id = "vortexevaceng"; + name = "Engineering Window Shutters Control"; + pixel_x = -5; + pixel_y = -2; + req_access = list("command") + }, +/obj/machinery/button/door{ + id = "vortexevacatmos"; + name = "Atmospherics Window Shutters Control"; + pixel_x = 5; + pixel_y = -2; + req_access = list("command") + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"Ku" = ( +/obj/effect/turf_decal/skyrat_decals/misc/handicapped, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"KI" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/machinery/light/cold/dim/directional/east, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + color = "#469085" + }, +/obj/effect/turf_decal/trimline/blue/corner{ + color = "#122623" + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + color = "#469085"; + dir = 8 + }, +/obj/structure/sign/warning/gas_mask/directional/east{ + name = "\improper Atmospherics sign"; + desc = "A sign labelling an area where atmospheric technicians work." + }, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/box/smart_metal_foam, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"KM" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/structure/reagent_dispensers/watertank, +/obj/structure/sign/warning/no_smoking/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"KN" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/floor, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"KT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/computer/communications, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"Lh" = ( +/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/line{ + color = "#469085"; + dir = 8 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"Ll" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/light/cold/dim/directional/west, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/turf/open/floor/wood, +/area/shuttle/escape) +"LM" = ( +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/medkit/regular{ + pixel_y = 3 + }, +/obj/item/clothing/suit/armor/vest/alt/sec/redsec, +/obj/item/clothing/head/helmet/sec/redsec, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"LR" = ( +/obj/machinery/door/airlock/silver{ + name = "Restroom"; + id_tag = "vortexevacrest" + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"LV" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"Me" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1; + color = "#469085" + }, +/obj/structure/fireaxecabinet/empty/directional/south, +/obj/machinery/atmospherics/components/unary/portables_connector/layer2{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Mt" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/machinery/light/floor, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"MN" = ( +/obj/structure/table/wood/fancy/red, +/obj/item/storage/fancy/coffee_condi_display{ + pixel_x = -14; + pixel_y = 13 + }, +/obj/item/storage/fancy/coffee_condi_display{ + pixel_x = -14; + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/glass/coffee_cup{ + pixel_y = 16; + pixel_x = 2 + }, +/obj/item/reagent_containers/cup/glass/coffee_cup{ + pixel_y = 10; + pixel_x = 8 + }, +/obj/item/reagent_containers/cup/glass/coffee_cup{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/structure/sign/clock/directional/north, +/turf/open/floor/wood, +/area/shuttle/escape) +"MZ" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/light/cold/dim/directional/north, +/obj/machinery/rnd/production/protolathe/department/security{ + stripe_color = "#DE3A3A" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"Nc" = ( +/obj/effect/turf_decal/siding/wood/end, +/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/wood/parquet, +/area/shuttle/escape) +"Nd" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/line{ + color = "#33260E" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Np" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 9 + }, +/obj/machinery/vending/boozeomat{ + onstation = 0 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ND" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/machinery/computer/crew/shuttle, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"NF" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacatmos"; + name = "Evacuation Shuttle Atmospherics Shutters"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape/engine) +"Ou" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/sign/flag/nanotrasen/directional/north, +/obj/structure/table/wood/fancy/red, +/obj/item/storage/fancy/cigarettes/cigpack_robustgold{ + pixel_y = 11; + pixel_x = 5 + }, +/obj/item/storage/fancy/cigarettes/cigpack_robust{ + pixel_y = 5; + pixel_x = 8 + }, +/obj/item/storage/fancy/cigarettes/cigpack_xeno{ + pixel_y = 13; + pixel_x = -5 + }, +/obj/item/lighter/skull{ + pixel_y = -2; + pixel_x = 1 + }, +/obj/item/lighter/mime{ + pixel_x = -5 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"Ov" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/folder/blue{ + pixel_x = -7 + }, +/obj/item/folder/blue{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/paper_bin{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/pen/fountain/captain{ + pixel_y = 6; + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Oy" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/light/cold/dim/directional/west, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"OM" = ( +/obj/structure/cable, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/door/window/survival_pod/left/directional/west{ + name = "Prisoner Storage"; + req_access = list("security") + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/carpet/orange, +/area/shuttle/escape/brig) +"OX" = ( +/obj/machinery/suit_storage_unit/atmos, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + color = "#469085" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"OY" = ( +/obj/structure/sign/warning/deathsposal/directional/north, +/obj/structure/hedge, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"Pf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/shuttle/escape) +"Pm" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled, +/obj/effect/turf_decal/trimline/dark_blue{ + color = "#1A2335" + }, +/obj/structure/hedge, +/obj/effect/turf_decal/siding/thinplating_new/dark/end, +/obj/machinery/light/cold/dim/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Pn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/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/junction/flip, +/turf/open/floor/wood, +/area/shuttle/escape) +"Po" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085"; + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"Ps" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"Pt" = ( +/obj/machinery/door/airlock/security/old{ + name = "Evacuation Shuttle Brig" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/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/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/brig) +"PM" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"PY" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/machinery/power/smes/super/full{ + name = "shuttle power storage unit" + }, +/obj/structure/cable, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape/engine) +"PZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/medical_kiosk, +/obj/machinery/iv_drip/health_station/directional/north, +/obj/machinery/light/cold/dim/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Qc" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/cable, +/turf/open/floor/wood, +/area/shuttle/escape) +"Qj" = ( +/obj/item/storage/toolbox/mechanical{ + pixel_y = 9 + }, +/obj/item/storage/toolbox/electrical{ + pixel_y = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/storage/belt/utility/full/powertools, +/obj/item/storage/belt/utility/full/powertools, +/obj/item/storage/box/material, +/obj/item/storage/part_replacer/bluespace/tier4, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Qs" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/machinery/light/floor, +/turf/open/floor/grass, +/area/shuttle/escape) +"QA" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"QD" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/hedge, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"QN" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"QR" = ( +/obj/effect/turf_decal/siding/wood{ + 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, +/turf/open/floor/wood, +/area/shuttle/escape) +"Rc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet/directional/north{ + pixel_x = -29 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"Rd" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 4 + }, +/obj/machinery/computer/records/medical/laptop{ + dir = 4 + }, +/obj/structure/table/reinforced/titaniumglass, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Rh" = ( +/obj/machinery/light/cold/dim/directional/south, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1; + color = "#469085" + }, +/obj/machinery/space_heater, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Rp" = ( +/obj/structure/rack/shelf, +/obj/item/wheelchair/gold, +/obj/item/wheelchair, +/obj/item/wheelchair, +/obj/item/wheelchair, +/obj/effect/turf_decal/siding/thinplating_new/dark/end{ + dir = 1 + }, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/shuttle/escape) +"RG" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"RK" = ( +/obj/effect/turf_decal/trimline/red/real_red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/real_red/line{ + dir = 4; + color = "#350E0E" + }, +/obj/effect/turf_decal/trimline/red/real_red/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + 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 + }, +/obj/machinery/flasher{ + id = "vortexevacflash1" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"RW" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 10 + }, +/obj/structure/table/reinforced/titaniumglass, +/obj/item/gun/energy/e_gun/mini{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/gun/energy/e_gun/mini, +/obj/item/gun/energy/e_gun/mini{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/melee/baton/telescopic, +/obj/item/melee/baton/telescopic, +/obj/item/melee/baton/telescopic, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"RX" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + color = "#469085"; + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + color = "#122623"; + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + color = "#469085"; + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"RY" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"Sa" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"Sx" = ( +/obj/machinery/light/floor, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 4 + }, +/obj/machinery/jukebox/public, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Sz" = ( +/obj/effect/turf_decal/siding/wood/end{ + 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/shuttle/escape) +"SL" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/line{ + dir = 4; + color = "#0D1D26" + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + 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 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"SQ" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/machinery/light/floor, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"SU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"Tc" = ( +/obj/effect/turf_decal/siding/wood{ + 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/wood, +/area/shuttle/escape) +"Th" = ( +/obj/structure/disposaloutlet{ + name = "Emergency Entrance Dispenser" + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/wood, +/area/shuttle/escape) +"Tj" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/line{ + color = "#33260E" + }, +/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/dark, +/area/shuttle/escape) +"TB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shuttle/escape) +"TC" = ( +/obj/machinery/power/shuttle_engine/huge, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"TL" = ( +/obj/effect/turf_decal/trimline/blue/filled/end{ + dir = 8; + color = "#469085" + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"TT" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacatmos"; + name = "Evacuation Shuttle Atmospherics Shutters"; + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/shuttle/escape/engine) +"Ui" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/warning, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Uk" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/limbgrower/fullupgrade, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ux" = ( +/obj/machinery/suit_storage_unit/ce{ + name = "Chief Engineer's suit storage unit" + }, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/white/filled/warning, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Uy" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark/corner{ + dir = 1 + }, +/obj/machinery/light/cold/dim/directional/south, +/obj/structure/sign/warning/secure_area/directional/east, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"UA" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/machinery/light/cold/dim/directional/east, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 9 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"UB" = ( +/obj/machinery/light/cold/dim/directional/east, +/obj/effect/turf_decal/siding/wood, +/obj/structure/disposalpipe/segment, +/obj/structure/bed/medical/emergency{ + dir = 4 + }, +/obj/machinery/iv_drip, +/turf/open/floor/wood, +/area/shuttle/escape) +"UO" = ( +/obj/effect/turf_decal/trimline/yellow/warning{ + dir = 8 + }, +/obj/structure/sign/warning/vacuum/external/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/effect/turf_decal/trimline/yellow/corner{ + color = "#33260E" + }, +/obj/machinery/vending/sovietsoda{ + tilted = 1 + }, +/obj/item/shard{ + icon_state = "medium" + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"UW" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/shuttle/escape) +"Vc" = ( +/obj/machinery/power/shuttle_engine/propulsion/right, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/floor, +/turf/open/floor/plating/airless, +/area/shuttle/escape/engine) +"Ve" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/sign/departments/engineering/directional/north, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark/textured_large/airless, +/area/shuttle/escape/engine) +"Vk" = ( +/obj/effect/turf_decal/trimline/red/real_red/line, +/obj/effect/turf_decal/trimline/red/real_red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/shuttle/escape/brig) +"Vo" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/white/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/white/line{ + dir = 4; + color = "#232323" + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"VD" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/shutters{ + id = "vortexevacmed"; + name = "Evacuation Shuttle Infirmary Shutters"; + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/escape) +"VK" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"VO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 6 + }, +/obj/machinery/vending/engivend{ + onstation = 0 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"VU" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/light/cold/dim/directional/west, +/obj/machinery/button/door{ + id = "vortexevacmed"; + name = "Window Shutters Control"; + pixel_x = -25; + req_access = list("medical") + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Wh" = ( +/obj/machinery/light/cold/dim/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/shuttle/escape) +"Wl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4; + name = "Emergency Entrance Chute" + }, +/obj/structure/railing, +/turf/open/floor/iron/dark/textured_large/airless, +/area/shuttle/escape/engine) +"Ws" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + 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/shuttle/escape) +"Ww" = ( +/obj/machinery/light/floor, +/obj/structure/sign/warning/vacuum/external/directional/north, +/obj/effect/turf_decal/trimline/white/filled, +/obj/effect/turf_decal/trimline/white{ + color = "#232323" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"WH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"WJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/shuttle/escape) +"WV" = ( +/obj/machinery/door/airlock/corporate/glass{ + name = "Evacuation Shuttle Bridge" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape) +"Xj" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9; + color = "#469085" + }, +/obj/structure/table/reinforced/titaniumglass, +/obj/structure/sign/warning/fire/directional/south, +/obj/item/storage/box/smart_metal_foam, +/obj/item/holosign_creator/atmos, +/obj/item/holosign_creator/atmos, +/obj/item/holosign_creator/atmos, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"Xl" = ( +/obj/structure/window/reinforced/shuttle, +/obj/structure/flora/bush/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/shuttle/escape) +"Xq" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/machinery/disposal/bin{ + name = "External disposal unit"; + desc = "A pneumatic waste disposal unit. This one leads to space, do NOT joy ride in this one." + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/sign/warning/deathsposal/directional/west, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Xs" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning, +/obj/machinery/computer/security/shuttle, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Xw" = ( +/obj/machinery/light/cold/dim/directional/north, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/machinery/power/port_gen/pacman/pre_loaded, +/obj/structure/cable, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape/engine) +"XL" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/escape) +"XP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"XQ" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4; + color = "#469085" + }, +/obj/machinery/button/door{ + id = "vortexevacatmos"; + name = "Window Shutters Control"; + pixel_x = -25; + req_access = list("atmospherics") + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/engine) +"XY" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 6 + }, +/obj/machinery/suit_storage_unit/hos{ + name = "Head of Security's suit storage unit" + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Ym" = ( +/obj/machinery/light/cold/dim/directional/south, +/obj/machinery/vending/security{ + onstation = 0; + name = "\improper SecTech"; + desc = "An old security equipment vendor. Used back before Security were ever introduced to Armadyne."; + icon = 'icons/obj/machines/vending.dmi'; + product_ads = "Crack communist 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?"; + premium = list(/obj/item/storage/belt/security/webbing = 5,/obj/item/coin/antagtoken = 1,/obj/item/clothing/head/helmet/blueshirt = 1,/obj/item/clothing/suit/armor/vest/blueshirt = 1,/obj/item/grenade/stingbang = 1,/obj/item/watertank/pepperspray = 2,/obj/item/storage/belt/holster/energy = 4); + products = list(/obj/item/restraints/handcuffs = 8,/obj/item/restraints/handcuffs/cable/zipties = 10,/obj/item/grenade/flashbang = 4,/obj/item/assembly/flash/handheld = 5,/obj/item/food/donut/plain = 12,/obj/item/storage/box/evidence = 6,/obj/item/flashlight/seclite = 4,/obj/item/restraints/legcuffs/bola/energy = 7,/obj/item/clothing/gloves/tackler = 5); + skyrat_products = null; + zubbers_contraband = null; + contraband = list(/obj/item/clothing/glasses/sunglasses = 2, /obj/item/storage/fancy/donut_box = 2) + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape/brig) +"Yw" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/shipping_container/deforest, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape/engine) +"YA" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/machinery/light/cold/dim/directional/east, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 10 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/iron/dark/small, +/area/shuttle/escape) +"YJ" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/shipping_container/conarex, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape/engine) +"YO" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 5 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shuttle/escape/engine) +"Zg" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"Zi" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/machinery/disposal/bin{ + name = "External disposal unit"; + desc = "A pneumatic waste disposal unit. This one leads to space, do NOT joy ride in this one." + }, +/obj/structure/sign/warning/deathsposal/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"Zk" = ( +/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/line{ + color = "#469085"; + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/shuttle/escape/engine) +"Zp" = ( +/obj/structure/cable, +/obj/structure/chair/bronze{ + dir = 1; + desc = "A comfortable, secure luxury seat. It has a more sturdy looking buckling system, for smoother flights."; + name = "Captain's luxury shuttle seat"; + anchored = 1 + }, +/turf/open/floor/carpet/executive, +/area/shuttle/escape) +"Zy" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Evacuation Shuttle External Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/external, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/shuttle/escape/engine) +"ZA" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/white/filled/warning{ + dir = 4 + }, +/obj/machinery/vending/coffee{ + onstation = 0 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ZB" = ( +/obj/structure/table/reinforced/titaniumglass, +/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/lizard, +/obj/item/reagent_containers/blood/podperson, +/obj/item/reagent_containers/blood/oil, +/obj/item/reagent_containers/blood/toxin, +/obj/item/reagent_containers/cup/beaker/synthflesh{ + pixel_x = 10; + pixel_y = 13 + }, +/obj/item/reagent_containers/cup/beaker/synthflesh{ + pixel_x = 12; + pixel_y = 7 + }, +/turf/open/floor/iron/dark, +/area/shuttle/escape) +"ZX" = ( +/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/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4; + color = "#469085" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/shuttle/escape/engine) + +(1,1,1) = {" +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +AX +eC +vf +ry +AX +tH +tH +tH +AX +eC +vf +eC +AX +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +"} +(2,1,1) = {" +tH +tH +tH +tH +tH +tH +tH +tH +tH +AX +sX +vf +Ww +vf +ns +vf +sX +sX +sX +vf +Ww +vf +ns +vf +sX +AX +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +tH +"} +(3,1,1) = {" +tH +tH +tH +tH +tH +tH +tH +tH +AX +vf +HF +vf +my +vf +my +vf +yk +Sx +BC +vf +my +vf +cK +vf +ZA +vf +ly +ly +ly +ly +ly +zM +zM +ly +ly +kr +tH +tH +tH +"} +(4,1,1) = {" +tH +AX +vf +EC +EC +EC +vf +vf +vf +eo +AP +kw +JO +JO +JO +Ll +Sa +Pf +Sa +hR +JO +JO +JO +kw +Hn +Df +dS +Qj +pB +qs +VO +gF +Ft +Kd +IK +ly +kr +tH +tH +"} +(5,1,1) = {" +AX +vf +dc +Rd +Ov +iH +tE +vf +Bz +pF +mI +TB +TB +TB +TB +TB +wS +Qc +TB +TB +TB +TB +TB +TB +hp +Tj +jP +AM +Gm +gy +He +qi +yL +ce +tT +nX +bI +tH +tH +"} +(6,1,1) = {" +vf +HK +Rc +KT +gD +uy +Zi +vf +Ou +jW +UA +QN +QN +QN +QN +YA +rZ +Hn +UA +sn +sn +sn +sn +YA +GZ +oY +dS +kV +dK +VK +nS +XP +yL +rw +mg +nX +CU +px +tH +"} +(7,1,1) = {" +mM +Dy +FN +kz +oq +LV +Eu +vf +Pm +vQ +AX +Qs +br +Xl +DM +AX +bG +Fg +AX +Qs +br +Xl +DM +AX +kh +cz +ly +ly +vr +vr +ly +Bm +yL +rw +mg +nX +BG +KN +tH +"} +(8,1,1) = {" +mM +ND +km +yE +vI +LV +ru +mM +lh +Ps +Oy +CS +CS +CS +CS +Bh +ow +Hn +Oy +CS +CS +CS +CS +Bh +GZ +Ku +ly +CV +tg +JA +WH +or +yL +zs +Yw +nX +BG +CU +TC +"} +(9,1,1) = {" +mM +bx +Zp +dI +nZ +iQ +Nc +WV +FP +eT +sW +sW +sW +sW +sW +sW +ow +sr +sW +sW +sW +sW +sW +sW +GZ +Rp +ly +CV +Zg +jD +kB +or +yL +Ui +mg +nX +up +BG +KN +"} +(10,1,1) = {" +mM +Xs +km +yE +Kk +FC +oe +mM +Fq +fn +UA +QN +QN +QN +QN +YA +ow +UW +UA +QN +QN +QN +QN +YA +GZ +Ku +ly +ly +KI +RX +ly +iv +yL +Ui +tk +nX +BG +RG +Cf +"} +(11,1,1) = {" +mM +Dy +vV +kG +pu +FC +Gd +vf +Pm +nH +AX +ge +vC +pE +ge +AX +dh +oh +AX +ge +vC +pE +ge +AX +iu +HE +ly +ly +ly +HQ +ly +lo +yL +yO +UO +ly +ly +ly +xq +"} +(12,1,1) = {" +vf +fv +qT +WJ +Ws +SU +AE +vf +zg +rt +Oy +CS +CS +CS +CS +Bh +Tc +UW +Oy +PM +PM +PM +PM +Bh +GZ +mH +xs +XQ +az +TL +ly +yg +RY +Mt +Nd +II +Ez +Zy +mR +"} +(13,1,1) = {" +AX +vf +qQ +RW +Sz +Np +Uy +vf +bF +IH +QR +QR +QR +Gw +lT +lT +rD +Hy +fS +fS +Pn +xe +xe +Ea +eb +vg +uB +Zk +Lh +yA +ly +GH +RY +sR +vR +ly +ly +ly +Ve +"} +(14,1,1) = {" +tH +vf +vf +Ch +AU +Ch +vf +vf +MN +JO +tV +Th +sp +UB +vH +ci +RK +wj +ox +DR +SL +nE +vH +Wh +GT +FO +nn +Po +ZX +DN +ly +PY +RY +bu +la +nX +BG +CU +TC +"} +(15,1,1) = {" +tH +vf +vf +XY +jb +ai +vf +vf +Ek +TB +vf +vf +vf +vf +vf +hb +Pt +hb +vf +VD +xf +VD +vf +vf +vf +vf +ly +Jf +uA +Xj +ly +rv +oW +pZ +ll +nX +up +BG +KN +"} +(16,1,1) = {" +tH +vf +zZ +rF +oA +By +mO +vf +Iu +Vo +vf +LM +cJ +EG +cl +QA +Gp +in +vf +oo +lk +ys +VU +GC +Xq +QD +ly +Ds +bq +Me +ly +zk +wF +SQ +YJ +nX +BG +RG +Cf +"} +(17,1,1) = {" +tH +vf +tf +Er +ET +vL +EM +vf +vf +LR +vf +wD +yu +HU +HU +HU +rs +xD +vf +vU +qb +jq +jq +bj +yN +JX +ly +cU +yJ +lE +ly +Xw +wF +rw +mg +nX +BG +Dc +tH +"} +(18,1,1) = {" +tH +vf +Ux +Dp +qW +JL +gt +vf +XL +tF +vf +MZ +Vk +qI +bV +Jk +vd +Ym +vf +PZ +jo +ZB +EX +Fk +wO +uL +ly +OX +FZ +Rh +ly +qN +yL +rw +mg +nX +RG +Cf +tH +"} +(19,1,1) = {" +tH +AX +vf +zE +lv +tv +vf +vf +ak +gw +vf +lm +nA +pQ +pQ +pQ +si +rf +vf +sM +iy +Ay +Ay +op +yb +qM +ly +OX +bw +IS +ly +KM +yL +zX +YO +nX +Vc +tH +tH +"} +(20,1,1) = {" +tH +tH +AX +zi +vf +zi +vf +vf +vf +Ab +vf +OY +OM +ss +vq +ss +oK +wd +vf +Iw +FH +Ed +uD +Gx +Uk +QD +ly +NF +fk +TT +ly +kN +iw +jw +aU +ly +kr +tH +tH +"} +(21,1,1) = {" +tH +tH +tH +tH +tH +tH +tH +tH +AX +vf +vf +vf +yo +yo +vf +yo +yo +vf +vf +vf +xy +vf +vf +vf +xy +vf +ly +Wl +IL +om +ly +ly +ly +ly +ly +kr +tH +tH +tH +"} diff --git a/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm b/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm index 4b3b6c09e2715..e488cbeb68477 100644 --- a/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm +++ b/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm @@ -1193,7 +1193,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "RV" = ( -/obj/machinery/smartfridge/drying/rack, +/obj/machinery/smartfridge/drying_rack, /obj/structure/stone_tile/slab, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) diff --git a/_maps/skyrat/automapper/templates/tramstation/tramstation_cryo.dmm b/_maps/skyrat/automapper/templates/tramstation/tramstation_cryo.dmm index 46050813a92a2..94883b8e91e09 100644 --- a/_maps/skyrat/automapper/templates/tramstation/tramstation_cryo.dmm +++ b/_maps/skyrat/automapper/templates/tramstation/tramstation_cryo.dmm @@ -144,7 +144,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms/laundry) "v" = ( diff --git a/_maps/skyrat/automapper/templates/wawastation/wawastation_lockers.dmm b/_maps/skyrat/automapper/templates/wawastation/wawastation_lockers.dmm index e2d17dfd67a9a..8c9162de30749 100644 --- a/_maps/skyrat/automapper/templates/wawastation/wawastation_lockers.dmm +++ b/_maps/skyrat/automapper/templates/wawastation/wawastation_lockers.dmm @@ -28,7 +28,7 @@ /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) "f" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /obj/effect/turf_decal/delivery, /obj/structure/window/spawner/directional/east, /turf/open/floor/iron, diff --git a/_maps/skyrat/automapper/templates/wawastation/wawastation_ntrep_office.dmm b/_maps/skyrat/automapper/templates/wawastation/wawastation_ntrep_office.dmm index 2243005193598..a4b52af49f436 100644 --- a/_maps/skyrat/automapper/templates/wawastation/wawastation_ntrep_office.dmm +++ b/_maps/skyrat/automapper/templates/wawastation/wawastation_ntrep_office.dmm @@ -48,7 +48,7 @@ /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) "f" = ( -/obj/machinery/vending/boozeomat/all_access, +/obj/machinery/vending/boozeomat, /turf/closed/wall/r_wall, /area/station/command/heads_quarters/nt_rep) "g" = ( diff --git a/_maps/skyrat/lazy_templates/reebe.dmm b/_maps/skyrat/lazy_templates/reebe.dmm index e79eefb3cd6fb..852d14d41c5a7 100644 --- a/_maps/skyrat/lazy_templates/reebe.dmm +++ b/_maps/skyrat/lazy_templates/reebe.dmm @@ -18,10 +18,6 @@ /obj/item/paper/crumpled/bloody/reebe2, /turf/open/floor/bronze, /area/ruin/powered/reebe) -"cN" = ( -/obj/machinery/door/airlock/bronze, -/turf/open/floor/bronze/flat, -/area/ruin/powered/reebe) "en" = ( /obj/structure/deployable_barricade/wooden, /turf/open/floor/bronze/flat, @@ -124,28 +120,6 @@ "mL" = ( /turf/open/indestructible/reebe_void, /area/ruin/powered/reebe/space) -"nx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/bronze, -/obj/item/stack/sheet/bronze/thirty{ - pixel_y = 10; - pixel_x = 10 - }, -/obj/item/stack/sheet/bronze/thirty{ - pixel_y = 5; - pixel_x = 5 - }, -/obj/item/stack/sheet/bronze/thirty, -/obj/item/clockwork/replica_fabricator{ - pixel_x = -10; - pixel_y = 10 - }, -/turf/open/floor/bronze, -/area/ruin/powered/reebe) -"ny" = ( -/obj/structure/destructible/clockwork/gear_base/powered/tinkerers_cache, -/turf/open/floor/bronze/flat, -/area/ruin/powered/reebe) "oh" = ( /obj/effect/mob_spawn/corpse/human/clock_cultist, /turf/open/floor/bronze, @@ -190,10 +164,6 @@ /obj/effect/rune/blood_boil, /turf/open/floor/bronze/flat, /area/ruin/powered/reebe) -"sw" = ( -/obj/effect/decal/cleanable/blood/splatter/over_window, -/turf/closed/wall/mineral/bronze, -/area/ruin/powered/reebe) "tr" = ( /obj/structure/table/bronze, /obj/item/clothing/suit/clockwork/speed{ @@ -285,10 +255,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/bronze/filled, /area/ruin/powered/reebe) -"BP" = ( -/obj/structure/table/bronze, -/turf/open/floor/bronze, -/area/ruin/powered/reebe) "BT" = ( /obj/structure/fluff/clockwork/alloy_shards/medium{ pixel_x = 6; @@ -308,6 +274,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/bronze/flat, /area/ruin/powered/reebe) +"Go" = ( +/obj/structure/table/bronze, +/turf/open/floor/bronze, +/area/ruin/powered/reebe) "HU" = ( /obj/effect/decal/cleanable/blood/footprints{ dir = 4 @@ -338,10 +308,6 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/bronze/flat, /area/ruin/powered/reebe) -"Mh" = ( -/obj/item/ectoplasm, -/turf/open/floor/bronze/flat, -/area/ruin/powered/reebe) "Mu" = ( /obj/item/stack/sheet/mineral/wood, /turf/open/floor/bronze/flat, @@ -393,10 +359,18 @@ /obj/machinery/door/airlock/bronze, /turf/open/floor/bronze, /area/ruin/powered/reebe) +"PD" = ( +/obj/structure/destructible/clockwork/gear_base/powered/tinkerers_cache, +/turf/open/floor/bronze/flat, +/area/ruin/powered/reebe) "PZ" = ( /obj/structure/destructible/clockwork/gear_base/technologists_lectern, /turf/open/floor/bronze/flat, /area/ruin/powered/reebe) +"QR" = ( +/obj/machinery/door/airlock/bronze, +/turf/open/floor/bronze/flat, +/area/ruin/powered/reebe) "QX" = ( /turf/open/indestructible/reebe_void/spawning/lattices, /area/ruin/powered/reebe/space) @@ -437,6 +411,24 @@ /obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/bronze, /area/ruin/powered/reebe) +"UF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/bronze, +/obj/item/stack/sheet/bronze/thirty{ + pixel_y = 10; + pixel_x = 10 + }, +/obj/item/stack/sheet/bronze/thirty{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/item/stack/sheet/bronze/thirty, +/obj/item/clockwork/replica_fabricator{ + pixel_x = -10; + pixel_y = 10 + }, +/turf/open/floor/bronze, +/area/ruin/powered/reebe) "UI" = ( /obj/structure/table/bronze, /obj/item/clockwork/weapon/brass_spear{ @@ -450,6 +442,10 @@ /obj/item/clockwork/weapon/brass_spear, /turf/open/floor/bronze/filled, /area/ruin/powered/reebe) +"UJ" = ( +/obj/item/ectoplasm, +/turf/open/floor/bronze/flat, +/area/ruin/powered/reebe) "Vv" = ( /obj/structure/fluff/clockwork/clockgolem_remains, /turf/open/floor/bronze/flat, @@ -466,6 +462,10 @@ /obj/structure/fluff/clockwork/blind_eye, /turf/open/floor/bronze/flat, /area/ruin/powered/reebe) +"Ym" = ( +/obj/effect/decal/cleanable/blood/splatter/over_window, +/turf/closed/wall/mineral/bronze, +/area/ruin/powered/reebe) (1,1,1) = {" ok @@ -1279,7 +1279,7 @@ qS iJ xd pM -Mh +UJ Pi ve ve @@ -1522,7 +1522,7 @@ QX QX ve Pi -Mh +UJ iJ ve ve @@ -1634,7 +1634,7 @@ ve ve qS qS -ny +PD Bm Pi Pi @@ -1795,7 +1795,7 @@ xd iJ hU Pi -sw +Ym oh Pi Pi @@ -1846,7 +1846,7 @@ mj Pi Pi Pi -ny +PD qS qS ve @@ -2257,13 +2257,13 @@ iJ Pi FM xd -cN +QR xd xd Pd xd xd -cN +QR xd xd Pi @@ -2467,9 +2467,9 @@ QX QX QX qS -nx +UF Pi -BP +Go qS QX QX diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index d6c0d2fec798e..15d7485c99bf3 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -19,6 +19,14 @@ "ac" = ( /turf/closed/wall/mineral/plastitanium, /area/shuttle/sbc_starfury) +"ad" = ( +/obj/machinery/door/poddoor/preopen{ + id = "syndie_battlecruier_bridge_blast" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating, +/area/shuttle/sbc_starfury) "ae" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/sbc_starfury) @@ -398,6 +406,14 @@ }, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) +"bx" = ( +/obj/machinery/door/poddoor/preopen{ + id = "syndie_battlecruier_bridge_blast" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/sbc_starfury) "by" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/mineral/plastitanium/nodiagonal, @@ -627,14 +643,6 @@ }, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) -"cy" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/sbc_starfury) "cz" = ( /obj/machinery/newscaster/directional/south, /obj/structure/table/reinforced/plastitaniumglass, @@ -975,6 +983,24 @@ /obj/effect/turf_decal/stripes/red/line, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) +"dO" = ( +/obj/structure/sign/warning/secure_area/directional/east{ + desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; + icon_state = "space"; + name = "KEEP CLEAR: SHUTTLE BAY" + }, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/iron/dark, +/area/shuttle/sbc_starfury) +"dS" = ( +/obj/structure/sign/warning/secure_area/directional/west{ + desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; + icon_state = "space"; + name = "KEEP CLEAR: SHUTTLE BAY" + }, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/iron/dark, +/area/shuttle/sbc_starfury) "dT" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -1035,7 +1061,7 @@ }, /area/shuttle/sbc_starfury) "ea" = ( -/obj/machinery/vending/medical/syndicate_access/cybersun, +/obj/machinery/vending/medical/syndicate/cybersun, /turf/open/floor/iron, /area/shuttle/sbc_starfury) "ec" = ( @@ -1554,6 +1580,15 @@ /obj/machinery/door/airlock/multi_tile/public/glass, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) +"fE" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron, +/area/shuttle/sbc_starfury) "fF" = ( /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/machinery/door/firedoor/heavy, @@ -1576,6 +1611,14 @@ /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/iron/showroomfloor, /area/shuttle/sbc_starfury) +"fR" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/sbc_starfury) "fS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1599,6 +1642,17 @@ }, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) +"gp" = ( +/obj/structure/sign/warning/secure_area/directional/east{ + desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; + icon_state = "space"; + name = "KEEP CLEAR: SHUTTLE BAY" + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/shuttle/sbc_starfury) "gx" = ( /obj/effect/mob_spawn/ghost_role/human/syndicate/battlecruiser{ dir = 8 @@ -1628,6 +1682,20 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/sbc_starfury) +"gC" = ( +/obj/structure/sign/warning/secure_area/directional/west{ + desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; + icon_state = "space"; + name = "KEEP CLEAR: SHUTTLE BAY" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shuttle/sbc_starfury) "gD" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -1655,7 +1723,7 @@ /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) "gH" = ( -/obj/machinery/vending/boozeomat/syndicate_access, +/obj/machinery/vending/boozeomat/syndicate, /obj/effect/turf_decal/siding/wood{ dir = 8 }, @@ -1667,19 +1735,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/shuttle/sbc_starfury) -"gN" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/structure/cable, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/shuttle/sbc_starfury) "gO" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 @@ -2129,6 +2184,36 @@ /obj/effect/mapping_helpers/airlock/cutaiwire, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) +"hZ" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/gun/ballistic/automatic/m90{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/gun/ballistic/automatic/m90, +/obj/item/gun/ballistic/automatic/m90{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/pod/light, +/area/shuttle/sbc_starfury) +"ia" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/gun/ballistic/shotgun/bulldog{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/gun/ballistic/shotgun/bulldog, +/obj/item/gun/ballistic/shotgun/bulldog{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/pod/light, +/area/shuttle/sbc_starfury) "ib" = ( /obj/structure/closet/secure_closet{ anchored = 1; @@ -2275,6 +2360,20 @@ /obj/effect/turf_decal/tile/red/anticorner/contrasted, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) +"io" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/gun/ballistic/revolver/syndicate{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/gun/ballistic/revolver/syndicate{ + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/pod/light, +/area/shuttle/sbc_starfury) "iq" = ( /obj/machinery/microwave, /obj/structure/table/wood, @@ -2341,6 +2440,15 @@ /obj/effect/mapping_helpers/airalarm/syndicate_access, /turf/open/floor/iron, /area/shuttle/sbc_starfury) +"ix" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/belt/military, +/obj/item/ammo_box/magazine/m7mm, +/obj/item/gun/ballistic/automatic/l6_saw, +/turf/open/floor/pod/light, +/area/shuttle/sbc_starfury) "iy" = ( /obj/item/storage/box/donkpockets{ pixel_x = 2 @@ -2394,6 +2502,24 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/red, /area/shuttle/sbc_starfury) +"iG" = ( +/obj/structure/table/wood, +/obj/item/folder/syndicate/red{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/item/cigarette/cigar{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/storage/box/matches, +/obj/item/pen{ + pixel_x = -5 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/carpet/red, +/area/shuttle/sbc_starfury) "iI" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -2421,6 +2547,25 @@ }, /turf/open/floor/plating, /area/shuttle/sbc_starfury) +"iN" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/mod/control/pre_equipped/elite{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/clothing/mask/gas/syndicate{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/mod/control/pre_equipped/elite{ + pixel_x = -4 + }, +/obj/item/clothing/mask/gas/syndicate, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/pod/light, +/area/shuttle/sbc_starfury) "iO" = ( /obj/structure/table, /obj/item/shield/energy{ @@ -3016,6 +3161,18 @@ /obj/effect/mapping_helpers/airlock/cutaiwire, /turf/open/floor/plating, /area/shuttle/sbc_starfury) +"kN" = ( +/obj/structure/sign/warning/secure_area/directional/north{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + name = "EXTERNAL AIRLOCK" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/small/red/directional/north, +/turf/open/floor/plating, +/area/shuttle/sbc_starfury) "kO" = ( /obj/structure/table/reinforced, /obj/item/clothing/gloves/color/yellow{ @@ -3075,14 +3232,17 @@ }, /turf/open/floor/mineral/plastitanium, /area/shuttle/sbc_starfury) -"lg" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ - dir = 8 +"lf" = ( +/obj/structure/sign/warning/secure_area/directional/north{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + name = "EXTERNAL AIRLOCK" }, -/turf/open/floor/iron, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/red/directional/north, +/turf/open/floor/plating, /area/shuttle/sbc_starfury) "lh" = ( /obj/effect/turf_decal/tile/yellow{ @@ -3494,14 +3654,6 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/engine, /area/shuttle/sbc_starfury) -"nu" = ( -/obj/machinery/door/poddoor/preopen{ - id = "syndie_battlecruier_bridge_blast" - }, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/obj/structure/cable, -/turf/open/floor/plating, -/area/shuttle/sbc_starfury) "nz" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, @@ -3698,15 +3850,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/plating, /area/shuttle/sbc_starfury) -"qT" = ( -/obj/structure/sign/warning/secure_area/directional/east{ - desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; - icon_state = "space"; - name = "KEEP CLEAR: SHUTTLE BAY" - }, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/iron/dark, -/area/shuttle/sbc_starfury) "rf" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -3765,17 +3908,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/pod/dark, /area/shuttle/sbc_starfury) -"rF" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/machinery/airalarm/directional/east, -/obj/item/storage/belt/military, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/item/gun/ballistic/rifle/sniper_rifle/syndicate, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/pod/light, -/area/shuttle/sbc_starfury) "sh" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/dark_green/opposingcorners{ @@ -4044,30 +4176,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) -"xo" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/card/emag{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/card/emag, -/obj/item/card/emag{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/clothing/glasses/thermal{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/glasses/thermal, -/obj/item/clothing/glasses/thermal{ - pixel_x = 3; - pixel_y = -3 - }, -/turf/open/floor/pod/light, -/area/shuttle/sbc_starfury) "xp" = ( /obj/structure/dresser, /turf/open/floor/carpet, @@ -4337,15 +4445,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/sbc_starfury) -"BG" = ( -/obj/structure/sign/warning/secure_area/directional/west{ - desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; - icon_state = "space"; - name = "KEEP CLEAR: SHUTTLE BAY" - }, -/obj/effect/turf_decal/stripes/red/line, -/turf/open/floor/iron/dark, -/area/shuttle/sbc_starfury) "BI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -4357,20 +4456,6 @@ /obj/effect/turf_decal/tile/dark_red, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) -"BK" = ( -/obj/structure/sign/warning/secure_area/directional/west{ - desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; - icon_state = "space"; - name = "KEEP CLEAR: SHUTTLE BAY" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/shuttle/sbc_starfury) "BN" = ( /obj/effect/turf_decal/siding/thinplating_new/dark, /obj/structure/window/reinforced/survival_pod/spawner/directional/south, @@ -4451,6 +4536,19 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured, /area/shuttle/sbc_starfury) +"Dy" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, +/obj/structure/cable, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/sbc_starfury) "Dz" = ( /obj/item/crowbar/red, /obj/structure/cable, @@ -4458,21 +4556,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/textured_large, /area/shuttle/sbc_starfury) -"DM" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/gun/ballistic/automatic/m90{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/gun/ballistic/automatic/m90, -/obj/item/gun/ballistic/automatic/m90{ - pixel_x = 3; - pixel_y = -3 - }, -/turf/open/floor/pod/light, -/area/shuttle/sbc_starfury) "DS" = ( /obj/structure/rack, /obj/item/stack/sheet/mineral/uranium{ @@ -4489,24 +4572,6 @@ /obj/structure/cable, /turf/open/floor/pod/dark, /area/shuttle/sbc_starfury) -"Es" = ( -/obj/structure/table/wood, -/obj/item/folder/syndicate/red{ - pixel_x = -5; - pixel_y = 2 - }, -/obj/item/cigarette/cigar{ - pixel_x = 5; - pixel_y = 7 - }, -/obj/item/storage/box/matches, -/obj/item/pen{ - pixel_x = -5 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/carpet/red, -/area/shuttle/sbc_starfury) "Ex" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -4726,15 +4791,6 @@ temperature = 80 }, /area/shuttle/sbc_starfury) -"Hr" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/storage/belt/military, -/obj/item/ammo_box/magazine/m7mm, -/obj/item/gun/ballistic/automatic/l6_saw, -/turf/open/floor/pod/light, -/area/shuttle/sbc_starfury) "HF" = ( /obj/machinery/suit_storage_unit/syndicate, /obj/machinery/light/small/directional/west, @@ -4816,6 +4872,17 @@ /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /turf/open/floor/plating, /area/shuttle/sbc_starfury) +"Jl" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/machinery/airalarm/directional/east, +/obj/item/storage/belt/military, +/obj/item/ammo_box/magazine/sniper_rounds, +/obj/item/gun/ballistic/rifle/sniper_rifle/syndicate, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/pod/light, +/area/shuttle/sbc_starfury) "Jm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4845,6 +4912,30 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/plating, /area/shuttle/sbc_starfury) +"JL" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/card/emag{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/card/emag, +/obj/item/card/emag{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/clothing/glasses/thermal{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/clothing/glasses/thermal, +/obj/item/clothing/glasses/thermal{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/pod/light, +/area/shuttle/sbc_starfury) "JP" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -4866,14 +4957,6 @@ }, /turf/open/floor/plating, /area/shuttle/sbc_starfury) -"KH" = ( -/obj/machinery/door/poddoor/preopen{ - id = "syndie_battlecruier_bridge_blast" - }, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, -/turf/open/floor/plating, -/area/shuttle/sbc_starfury) "KK" = ( /obj/structure/filingcabinet, /turf/open/floor/carpet/red, @@ -4902,25 +4985,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/shuttle/sbc_starfury) -"KZ" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/mod/control/pre_equipped/elite{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/clothing/mask/gas/syndicate{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/mod/control/pre_equipped/elite{ - pixel_x = -4 - }, -/obj/item/clothing/mask/gas/syndicate, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/pod/light, -/area/shuttle/sbc_starfury) "Lb" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -4932,18 +4996,6 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/plating, /area/shuttle/sbc_starfury) -"Ly" = ( -/obj/structure/sign/warning/secure_area/directional/north{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - name = "EXTERNAL AIRLOCK" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/small/red/directional/north, -/turf/open/floor/plating, -/area/shuttle/sbc_starfury) "LH" = ( /obj/structure/table, /obj/item/storage/medkit/regular{ @@ -4966,18 +5018,6 @@ }, /turf/open/floor/pod/dark, /area/shuttle/sbc_starfury) -"Mq" = ( -/obj/structure/sign/warning/secure_area/directional/north{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - name = "EXTERNAL AIRLOCK" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/light/small/red/directional/north, -/turf/open/floor/plating, -/area/shuttle/sbc_starfury) "Mt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5018,17 +5058,6 @@ /obj/machinery/light/small/red/directional/north, /turf/open/floor/plating, /area/shuttle/sbc_starfury) -"MQ" = ( -/obj/structure/closet/crate, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/stock_parts/power_store/cell/high{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/inducer/syndicate, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/shuttle/sbc_starfury) "MR" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -5134,19 +5163,6 @@ }, /turf/open/floor/iron, /area/shuttle/sbc_starfury) -"OZ" = ( -/obj/item/book/manual/wiki/barman_recipes, -/obj/item/reagent_containers/cup/glass/shaker{ - pixel_x = 10 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/effect/turf_decal/siding/dark{ - dir = 1 - }, -/obj/effect/turf_decal/tile/bar, -/obj/machinery/computer/security/telescreen/entertainment/directional/west, -/turf/open/floor/iron/dark, -/area/shuttle/sbc_starfury) "Pa" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -5314,6 +5330,19 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/engine, /area/shuttle/sbc_starfury) +"RX" = ( +/obj/item/book/manual/wiki/barman_recipes, +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 10 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/bar, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/turf/open/floor/iron/dark, +/area/shuttle/sbc_starfury) "Sb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ @@ -5384,17 +5413,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/mineral/plastitanium, /area/shuttle/sbc_starfury) -"Tl" = ( -/obj/structure/sign/warning/secure_area/directional/east{ - desc = "A warning sign which reads 'KEEP CLEAR: SHUTTLE BAY'"; - icon_state = "space"; - name = "KEEP CLEAR: SHUTTLE BAY" - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/shuttle/sbc_starfury) "Tn" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/portable_atmospherics/canister/plasma, @@ -5585,6 +5603,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/side, /area/shuttle/sbc_starfury) +"WI" = ( +/obj/structure/closet/crate, +/obj/item/stock_parts/power_store/cell/high, +/obj/item/stock_parts/power_store/cell/high{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/inducer/syndicate, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/shuttle/sbc_starfury) "WV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -5704,20 +5733,6 @@ }, /turf/open/floor/pod/dark, /area/shuttle/sbc_starfury) -"Ys" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/gun/ballistic/revolver/syndicate{ - pixel_x = 2; - pixel_y = 5 - }, -/obj/item/gun/ballistic/revolver/syndicate{ - pixel_x = -1; - pixel_y = 2 - }, -/turf/open/floor/pod/light, -/area/shuttle/sbc_starfury) "Yt" = ( /obj/machinery/space_heater, /obj/effect/turf_decal/bot_red, @@ -5738,21 +5753,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/pod/dark, /area/shuttle/sbc_starfury) -"Zh" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/gun/ballistic/shotgun/bulldog{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/gun/ballistic/shotgun/bulldog, -/obj/item/gun/ballistic/shotgun/bulldog{ - pixel_x = 3; - pixel_y = -3 - }, -/turf/open/floor/pod/light, -/area/shuttle/sbc_starfury) "Zl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -6049,7 +6049,7 @@ ce ae hd hD -OZ +RX iq iy ae @@ -6078,7 +6078,7 @@ aa aa aa ac -nu +bx ae ah cH @@ -6264,7 +6264,7 @@ aa aa aa ae -Mq +kN ae MP aH @@ -6350,7 +6350,7 @@ aa aa aa ae -nu +bx ae xr aH @@ -6430,7 +6430,7 @@ ri ay ay XI -qT +dO dV eR cO @@ -6469,7 +6469,7 @@ Jf ae kz kO -lg +fE ae ae Fc @@ -6490,7 +6490,7 @@ Ou Ou Ou vT -nu +bx dq vk ay @@ -6558,7 +6558,7 @@ aa aa Ou vT -nu +bx ne IM ae @@ -6621,10 +6621,10 @@ aa aa aa aa -KH -KH -KH -KH +ad +ad +ad +ad ae by Sb @@ -6688,8 +6688,8 @@ aa (14,1,1) = {" aa aa -KH -KH +ad +ad aU bj eJ @@ -6703,7 +6703,7 @@ ay ag dY UB -cy +fR ec eB aH @@ -6724,7 +6724,7 @@ hB ST ec dV -Tl +gp oA ay hm @@ -6756,7 +6756,7 @@ aa (15,1,1) = {" aa aa -KH +ad ct aV aJ @@ -6824,7 +6824,7 @@ ac (16,1,1) = {" aa aa -KH +ad al Dd xi @@ -6891,8 +6891,8 @@ mO "} (17,1,1) = {" aa -KH -KH +ad +ad UU az aK @@ -6959,7 +6959,7 @@ ir "} (18,1,1) = {" aa -KH +ad pm an aA @@ -7003,7 +7003,7 @@ hq hP ae iu -Es +iG nz ae Qf @@ -7027,7 +7027,7 @@ ir "} (19,1,1) = {" aa -KH +ad wo ao aB @@ -7095,7 +7095,7 @@ ae "} (20,1,1) = {" aa -KH +ad bo ap aC @@ -7163,8 +7163,8 @@ mO "} (21,1,1) = {" aa -KH -KH +ad +ad aq aD aO @@ -7232,7 +7232,7 @@ ir (22,1,1) = {" aa aa -KH +ad ar vr xO @@ -7269,7 +7269,7 @@ ST ae ae gB -gN +Dy gY Fl hS @@ -7300,7 +7300,7 @@ ir (23,1,1) = {" aa aa -KH +ad bC aE aP @@ -7368,8 +7368,8 @@ ac (24,1,1) = {" aa aa -KH -KH +ad +ad be bt FC @@ -7404,7 +7404,7 @@ hB ST ec fF -BK +gC hs gO hv @@ -7437,10 +7437,10 @@ aa aa aa aa -KH -KH -KH -KH +ad +ad +ad +ad ae by po @@ -7510,7 +7510,7 @@ aa aa aa vT -nu +bx ck Zm ae @@ -7578,7 +7578,7 @@ Ou Ou Ou vT -nu +bx bV Wv ay @@ -7654,7 +7654,7 @@ xD ay ay PF -BG +dS AJ dd ik @@ -7710,7 +7710,7 @@ aa aa aa ae -nu +bx ae xr aH @@ -7748,14 +7748,14 @@ ae ae ae Yi -DM -DM +hZ +hZ ec mQ ae nR Xr -MQ +WI ae ko ae @@ -7819,7 +7819,7 @@ sB ec ec ec -xo +JL ae XN qf @@ -7884,10 +7884,10 @@ gF gR Ay sB -Zh -Ys +ia +io ec -KZ +iN ae nR jB @@ -7896,7 +7896,7 @@ aa aa aa ae -Ly +lf ae fB aH @@ -7923,7 +7923,7 @@ ae ae Jm da -nu +bx aa aa aa @@ -7982,7 +7982,7 @@ aa aa aa ac -nu +bx ae BN vk @@ -8021,8 +8021,8 @@ UH ae hC ib -rF -Hr +Jl +ix fj ae ae diff --git a/_maps/templates/hilbertshotellore.dmm b/_maps/templates/hilbertshotellore.dmm index 716fa330de530..fe77ef9cc3d54 100644 --- a/_maps/templates/hilbertshotellore.dmm +++ b/_maps/templates/hilbertshotellore.dmm @@ -5,11 +5,6 @@ "ab" = ( /turf/closed/indestructible/hotelwall, /area/misc/hilbertshotel) -"ac" = ( -/obj/structure/table/wood/fancy, -/obj/structure/mirror/broken/directional/north, -/turf/open/indestructible/hotelwood, -/area/misc/hilbertshotel) "ad" = ( /turf/open/indestructible/hotelwood, /area/misc/hilbertshotel) @@ -147,11 +142,6 @@ /obj/structure/sink/directional/east, /turf/open/indestructible/hoteltile, /area/misc/hilbertshotel) -"aJ" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/turf/open/indestructible/hoteltile, -/area/misc/hilbertshotel) "aK" = ( /obj/machinery/shower/directional/west, /turf/open/indestructible/hoteltile, @@ -165,18 +155,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/indestructible/hotelwood, /area/misc/hilbertshotel) -"aN" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/indestructible/hoteltile, -/area/misc/hilbertshotel) -"aO" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/indestructible/hoteltile, -/area/misc/hilbertshotel) "aP" = ( /obj/item/bikehorn/rubberducky, /obj/machinery/light/small/directional/east, @@ -191,11 +169,6 @@ /obj/machinery/smartfridge/food, /turf/open/indestructible/hotelwood, /area/misc/hilbertshotel) -"aS" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/indestructible/hoteltile, -/area/misc/hilbertshotel) "aT" = ( /obj/structure/table/reinforced, /obj/structure/sink/kitchen/directional/north, @@ -293,11 +266,38 @@ /obj/item/paper/crumpled/ruins/hotel_note, /turf/open/indestructible/hotelwood, /area/misc/hilbertshotel) +"ej" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/turf/open/indestructible/hoteltile, +/area/misc/hilbertshotel) +"tf" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/indestructible/hoteltile, +/area/misc/hilbertshotel) +"Gk" = ( +/obj/structure/table/wood/fancy, +/obj/structure/mirror/broken/directional/north, +/turf/open/indestructible/hotelwood, +/area/misc/hilbertshotel) "Mn" = ( /obj/structure/table/wood/fancy, /obj/machinery/light/small/directional/north, /turf/open/indestructible/hotelwood, /area/misc/hilbertshotel) +"XX" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/turf/open/indestructible/hoteltile, +/area/misc/hilbertshotel) +"Yw" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/turf/open/indestructible/hoteltile, +/area/misc/hilbertshotel) (1,1,1) = {" aa @@ -472,7 +472,7 @@ aa (11,1,1) = {" aa ab -ac +Gk ad ad aL @@ -480,7 +480,7 @@ av ap aD aC -aN +Yw bi aV ab @@ -496,9 +496,9 @@ ad aw ab aE -aJ -aO -aS +XX +ej +tf aE ab aa diff --git a/_maps/templates/holodeck_beach.dmm b/_maps/templates/holodeck_beach.dmm index d485a495db315..96df917760d17 100644 --- a/_maps/templates/holodeck_beach.dmm +++ b/_maps/templates/holodeck_beach.dmm @@ -22,6 +22,9 @@ "t" = ( /turf/open/floor/holofloor/carpet, /area/template_noop) +"B" = ( +/turf/open/floor/holofloor/beach/water, +/area/template_noop) "H" = ( /obj/effect/holodeck_effect/mobspawner/monkey, /turf/open/floor/holofloor/beach, @@ -30,9 +33,6 @@ /obj/item/toy/seashell, /turf/open/floor/holofloor/beach, /area/template_noop) -"N" = ( -/turf/open/floor/holofloor/beach/water, -/area/template_noop) "Q" = ( /obj/effect/holodeck_effect/mobspawner/crab/jon, /turf/open/floor/holofloor/beach, @@ -68,7 +68,7 @@ R R R a -N +B "} (2,1,1) = {" R @@ -80,7 +80,7 @@ S R Q a -N +B "} (3,1,1) = {" X @@ -92,7 +92,7 @@ t t R a -N +B "} (4,1,1) = {" R @@ -104,7 +104,7 @@ R R R a -N +B "} (5,1,1) = {" R @@ -116,7 +116,7 @@ t t R a -N +B "} (6,1,1) = {" R @@ -128,7 +128,7 @@ g R q a -N +B "} (7,1,1) = {" R @@ -140,7 +140,7 @@ R R f a -N +B "} (8,1,1) = {" W @@ -152,7 +152,7 @@ R M R a -N +B "} (9,1,1) = {" R @@ -164,5 +164,5 @@ R R R a -N +B "} diff --git a/_maps/templates/holodeck_chapelcourt.dmm b/_maps/templates/holodeck_chapelcourt.dmm index b3141fd42f506..6f87e03bc162a 100644 --- a/_maps/templates/holodeck_chapelcourt.dmm +++ b/_maps/templates/holodeck_chapelcourt.dmm @@ -1,10 +1,52 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/closet/secure_closet/courtroom, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"ab" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/turf/open/floor/holofloor/dark, +/area/template_noop) "ac" = ( /obj/structure/chair{ dir = 1 }, /turf/open/floor/holofloor/chapel/bottom_left, /area/template_noop) +"ad" = ( +/obj/structure/table/wood/fancy, +/obj/item/clothing/suit/chaplainsuit/nun, +/obj/item/clothing/head/chaplain/nun_hood, +/obj/item/clothing/suit/chaplainsuit/holidaypriest, +/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 + }, +/turf/open/floor/holofloor/dark, +/area/template_noop) "ae" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -20,6 +62,21 @@ "ag" = ( /turf/open/floor/holofloor/chapel/top_left, /area/template_noop) +"ah" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy, +/obj/item/food/grown/poppy, +/turf/open/floor/holofloor/dark, +/area/template_noop) "ai" = ( /turf/open/floor/holofloor/chapel/bottom_right, /area/template_noop) @@ -37,11 +94,88 @@ }, /turf/open/floor/holofloor/chapel/top_right, /area/template_noop) +"al" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/folder/blue, +/obj/item/pen/red, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"am" = ( +/obj/item/clothing/head/helmet/chaplain/witchunter_hat, +/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/table/wood/fancy, +/turf/open/floor/holofloor/dark, +/area/template_noop) "an" = ( /obj/structure/table/wood, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/holofloor/dark, /area/template_noop) +"ao" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/storage/fancy/candle_box, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"ap" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"aq" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/folder/red, +/obj/item/pen/red, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"ar" = ( +/obj/item/gavelblock, +/obj/item/gavelhammer, +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"as" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/holofloor/dark, +/area/template_noop) "at" = ( /obj/structure/table/wood, /obj/item/food/grown/harebell, @@ -54,6 +188,21 @@ }, /turf/open/floor/holofloor/dark, /area/template_noop) +"au" = ( +/obj/structure/table/wood/fancy, +/obj/item/book/bible, +/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 + }, +/turf/open/floor/holofloor/dark, +/area/template_noop) "av" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -63,6 +212,41 @@ }, /turf/open/floor/holofloor/dark, /area/template_noop) +"aw" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"ax" = ( +/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 + }, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"ay" = ( +/obj/item/toy/figure/chaplain, +/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/table/wood/fancy, +/turf/open/floor/holofloor/dark, +/area/template_noop) "az" = ( /obj/structure/closet/secure_closet/courtroom, /obj/effect/turf_decal/tile/neutral/opposingcorners{ @@ -101,6 +285,22 @@ }, /turf/open/floor/holofloor/chapel/bottom_right, /area/template_noop) +"aF" = ( +/obj/item/clothing/suit/costume/judgerobe, +/obj/item/clothing/head/costume/powdered_wig, +/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/table/wood/fancy, +/turf/open/floor/holofloor/dark, +/area/template_noop) "aG" = ( /obj/structure/table/wood, /obj/item/food/grown/poppy, @@ -113,6 +313,30 @@ }, /turf/open/floor/holofloor/dark, /area/template_noop) +"aH" = ( +/obj/structure/table/wood/fancy, +/obj/item/book/manual/wiki/security_space_law, +/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 + }, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"aI" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/holofloor/dark, +/area/template_noop) "aJ" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 @@ -122,12 +346,45 @@ "aK" = ( /turf/open/floor/holofloor/chapel/top_right, /area/template_noop) +"aL" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/holofloor/dark, +/area/template_noop) "aM" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 }, /turf/open/floor/holofloor/dark, /area/template_noop) +"aN" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"aO" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/paper_bin, +/turf/open/floor/holofloor/dark, +/area/template_noop) "aP" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/holofloor/dark, @@ -140,12 +397,36 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, /turf/open/floor/holofloor/dark, /area/template_noop) +"aS" = ( +/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/effect/turf_decal/tile/neutral, +/turf/open/floor/holofloor/dark, +/area/template_noop) "aT" = ( /obj/structure/chair{ dir = 1 }, /turf/open/floor/holofloor/chapel/top_left, /area/template_noop) +"aU" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/hand_labeler, +/turf/open/floor/holofloor/dark, +/area/template_noop) "aV" = ( /obj/structure/chair{ dir = 1 @@ -155,6 +436,31 @@ }, /turf/open/floor/holofloor/dark, /area/template_noop) +"aW" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/holofloor/dark, +/area/template_noop) +"aX" = ( +/obj/item/clothing/suit/chaplainsuit/bishoprobe, +/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/table/wood/fancy, +/turf/open/floor/holofloor/dark, +/area/template_noop) "aY" = ( /obj/item/gavelblock, /obj/item/gavelhammer, diff --git a/_maps/templates/holodeck_holdoutbunker.dmm b/_maps/templates/holodeck_holdoutbunker.dmm index 782cbd919aa89..fccad07bfed85 100644 --- a/_maps/templates/holodeck_holdoutbunker.dmm +++ b/_maps/templates/holodeck_holdoutbunker.dmm @@ -28,12 +28,6 @@ }, /turf/open/floor/holofloor/asteroid, /area/template_noop) -"x" = ( -/obj/structure/foamedmetal, -/obj/structure/window/spawner/directional/east, -/obj/structure/bookcase/random/fiction, -/turf/open/floor/holofloor/asteroid, -/area/template_noop) "I" = ( /obj/structure/table, /obj/item/gun/energy/laser, @@ -62,7 +56,7 @@ a "} (2,1,1) = {" b -x +b b b b diff --git a/_maps/templates/holodeck_lounge.dmm b/_maps/templates/holodeck_lounge.dmm index 508c9a0de852f..1bcec197d7b66 100644 --- a/_maps/templates/holodeck_lounge.dmm +++ b/_maps/templates/holodeck_lounge.dmm @@ -31,13 +31,7 @@ icon_state = "wood" }, /area/template_noop) -"e" = ( -/obj/structure/table/wood, -/obj/item/cigarette/pipe, -/obj/effect/holodeck_effect/random_book, -/turf/open/floor/holofloor/carpet, -/area/template_noop) -"g" = ( +"f" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, /turf/open/floor/holofloor{ @@ -45,6 +39,12 @@ icon_state = "wood" }, /area/template_noop) +"h" = ( +/obj/structure/table/wood, +/obj/item/cigarette/pipe, +/obj/effect/holodeck_effect/random_book, +/turf/open/floor/holofloor/carpet, +/area/template_noop) "i" = ( /obj/structure/table/wood/shuttle_bar, /obj/item/reagent_containers/cup/glass/shaker, @@ -53,6 +53,13 @@ icon_state = "wood" }, /area/template_noop) +"j" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/holofloor{ + dir = 9; + icon_state = "wood" + }, +/area/template_noop) "k" = ( /obj/structure/table/wood/poker, /obj/item/storage/box/matches, @@ -61,6 +68,14 @@ icon_state = "wood" }, /area/template_noop) +"l" = ( +/obj/structure/chair/stool/bar/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/holofloor{ + dir = 9; + icon_state = "wood" + }, +/area/template_noop) "m" = ( /obj/structure/chair/wood, /turf/open/floor/holofloor{ @@ -85,21 +100,6 @@ "q" = ( /turf/open/floor/holofloor/carpet, /area/template_noop) -"r" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/holofloor{ - dir = 9; - icon_state = "wood" - }, -/area/template_noop) -"s" = ( -/obj/structure/chair/stool/bar/directional/south, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/holofloor{ - dir = 9; - icon_state = "wood" - }, -/area/template_noop) "t" = ( /obj/structure/table/wood/shuttle_bar, /obj/item/book/manual/wiki/barman_recipes, @@ -117,14 +117,6 @@ icon_state = "wood" }, /area/template_noop) -"v" = ( -/obj/structure/table/wood/shuttle_bar, -/obj/structure/window/reinforced/spawner/directional/east, -/turf/open/floor/holofloor{ - dir = 9; - icon_state = "wood" - }, -/area/template_noop) "w" = ( /obj/structure/table/wood, /obj/item/instrument/saxophone, @@ -256,6 +248,14 @@ icon_state = "wood" }, /area/template_noop) +"T" = ( +/obj/structure/table/wood/poker, +/obj/item/cigarette/pipe, +/turf/open/floor/holofloor{ + dir = 9; + icon_state = "wood" + }, +/area/template_noop) "U" = ( /obj/structure/table/wood/poker, /obj/item/storage/dice, @@ -271,9 +271,9 @@ icon_state = "wood" }, /area/template_noop) -"X" = ( -/obj/structure/table/wood/poker, -/obj/item/cigarette/pipe, +"Y" = ( +/obj/structure/table/wood/shuttle_bar, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/holofloor{ dir = 9; icon_state = "wood" @@ -297,7 +297,7 @@ H a "} (2,1,1) = {" -g +f z z z @@ -314,9 +314,9 @@ u u z z -r -s -v +j +l +Y c G "} @@ -347,7 +347,7 @@ p (6,1,1) = {" m P -X +T o z F @@ -390,5 +390,5 @@ O q E E -e +h "} diff --git a/_maps/templates/lazy_templates/ninja_den.dmm b/_maps/templates/lazy_templates/ninja_den.dmm index b992aad5116c8..f538a4e509673 100644 --- a/_maps/templates/lazy_templates/ninja_den.dmm +++ b/_maps/templates/lazy_templates/ninja_den.dmm @@ -66,11 +66,6 @@ }, /turf/open/floor/vault/rock, /area/centcom/central_command_areas/holding) -"aW" = ( -/obj/machinery/griddle, -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/cafeteria, -/area/centcom/central_command_areas/holding) "be" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -80,16 +75,6 @@ "bl" = ( /turf/open/floor/bamboo/tatami/purple, /area/centcom/central_command_areas/holding) -"bm" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/storage/basket, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/sepia, -/area/centcom/central_command_areas/holding) "bH" = ( /obj/machinery/photocopier, /turf/open/floor/catwalk_floor, @@ -143,6 +128,11 @@ }, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) +"cK" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/turf/open/floor/carpet/black, +/area/centcom/central_command_areas/holding) "cQ" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/siding/wood{ @@ -228,15 +218,6 @@ /obj/machinery/duct, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) -"er" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/carpet/black, -/area/centcom/central_command_areas/holding) "fu" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -246,12 +227,37 @@ }, /turf/open/floor/eighties/red, /area/centcom/central_command_areas/holding) +"ga" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/toy/mecha/phazon, +/turf/open/floor/bamboo/tatami/purple{ + dir = 8 + }, +/area/centcom/central_command_areas/holding) +"gd" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/toy/katana{ + desc = "As seen in your favourite Japanese cartoon."; + name = "anime katana" + }, +/turf/open/floor/bamboo/tatami, +/area/centcom/central_command_areas/holding) "gp" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 }, /turf/open/misc/sandy_dirt, /area/centcom/central_command_areas/holding) +"gy" = ( +/obj/machinery/griddle, +/obj/item/kitchen/rollingpin, +/turf/open/floor/iron/cafeteria, +/area/centcom/central_command_areas/holding) +"gK" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/rcl/pre_loaded, +/turf/open/floor/catwalk_floor, +/area/centcom/central_command_areas/holding) "gX" = ( /obj/structure/window/paperframe{ can_atmos_pass = 0 @@ -306,11 +312,17 @@ }, /turf/open/floor/wood/tile, /area/centcom/central_command_areas/holding) -"hD" = ( -/obj/structure/sink/directional/east, -/obj/structure/mirror/directional/west, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, +"hv" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement, +/turf/open/floor/carpet/black, +/area/centcom/central_command_areas/holding) +"hw" = ( +/obj/item/kirbyplants/organic/plant10, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) "hH" = ( /obj/item/flashlight/lantern, @@ -335,16 +347,16 @@ }, /turf/open/floor/wood/large, /area/centcom/central_command_areas/holding) -"iD" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/book/manual/hydroponics_pod_people, -/obj/item/paper/guides/jobs/hydroponics, -/turf/open/floor/wood/tile, -/area/centcom/central_command_areas/holding) "iF" = ( /obj/structure/table/wood, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) +"iH" = ( +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/wood/large, +/area/centcom/central_command_areas/holding) "iQ" = ( /obj/machinery/gibber, /turf/open/floor/catwalk_floor, @@ -360,18 +372,15 @@ /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood/tile, /area/centcom/central_command_areas/holding) -"jm" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer{ - dir = 4; - pixel_x = -8; - pixel_y = 1 - }, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 7; - pixel_y = -4 - }, -/obj/machinery/light/small/directional/west, +"jc" = ( +/obj/structure/table/wood/fancy/royalblue, +/obj/item/toy/toy_xeno, +/turf/open/floor/wood/parquet, +/area/centcom/central_command_areas/holding) +"jf" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/table/wood/fancy/green, +/obj/effect/spawner/random/entertainment/gambling, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) "jq" = ( @@ -418,10 +427,14 @@ /obj/item/food/meat/slab/synthmeat, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/holding) -"kc" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/storage/crayons, -/turf/open/floor/catwalk_floor, +"jR" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) "kl" = ( /obj/effect/turf_decal/siding/wood, @@ -432,11 +445,6 @@ name = "Guest House Entrance" }, /area/centcom/central_command_areas/holding) -"kM" = ( -/obj/structure/table/wood/fancy/royalblue, -/obj/item/toy/toy_xeno, -/turf/open/floor/wood/parquet, -/area/centcom/central_command_areas/holding) "kO" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -459,29 +467,20 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/holding) -"kY" = ( -/obj/structure/table/wood/fancy/royalblue, -/obj/item/clothing/mask/animal/pig, -/obj/item/clothing/mask/animal/horsehead, -/obj/item/clothing/mask/animal/small/rat, -/obj/item/clothing/mask/fakemoustache{ - pixel_y = 9 - }, -/turf/open/floor/wood/parquet, +"lh" = ( +/obj/structure/toilet, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/machinery/door/window/survival_pod/left/directional/south, +/turf/open/floor/iron/showroomfloor, /area/centcom/central_command_areas/holding) -"lb" = ( +"ln" = ( /obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/item/wallframe/newscaster{ - pixel_x = -6 + dir = 4 }, -/obj/item/flashlight/lamp/bananalamp{ - pixel_x = 9; - pixel_y = 9 +/obj/structure/sign/painting/library{ + pixel_y = 32 }, -/turf/open/floor/wood/tile, +/turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) "lx" = ( /obj/machinery/light/small/directional/north, @@ -545,12 +544,6 @@ }, /turf/open/floor/wood/parquet, /area/centcom/central_command_areas/holding) -"nq" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/iron/sepia, -/area/centcom/central_command_areas/holding) "nt" = ( /obj/structure/flora/rock/pile/style_random, /turf/open/misc/ironsand{ @@ -566,9 +559,21 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/stairs/medium, /area/centcom/central_command_areas/holding) -"of" = ( -/obj/machinery/vending/boozeomat, -/turf/closed/wall/mineral/wood, +"nW" = ( +/obj/machinery/light/warm/directional/west, +/turf/open/water{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/centcom/central_command_areas/holding) +"od" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/basket, +/obj/effect/turf_decal/tile/dark/fourcorners, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) "oh" = ( /obj/machinery/light/directional/south, @@ -585,10 +590,12 @@ }, /turf/open/floor/wood/parquet, /area/centcom/central_command_areas/holding) -"op" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/turf/open/floor/carpet/black, +"os" = ( +/obj/machinery/shower/directional/south, +/obj/item/soap/syndie, +/obj/structure/curtain, +/obj/machinery/door/window/survival_pod/left/directional/south, +/turf/open/floor/iron/showroomfloor, /area/centcom/central_command_areas/holding) "ov" = ( /obj/structure/flora/rock/pile/style_random, @@ -600,6 +607,11 @@ initial_gas_mix = "TEMP=2.7" }, /area/centcom/central_command_areas/holding) +"oG" = ( +/turf/open/water{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/centcom/central_command_areas/holding) "oH" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -638,6 +650,20 @@ }, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) +"pu" = ( +/obj/structure/closet/crate, +/obj/item/vending_refill/autodrobe, +/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/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/catwalk_floor, +/area/centcom/central_command_areas/holding) "pB" = ( /obj/structure/rack, /obj/item/nullrod/claymore{ @@ -711,6 +737,17 @@ /obj/machinery/autolathe, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/holding) +"qx" = ( +/obj/structure/sink/directional/east, +/obj/structure/mirror/directional/west, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, +/area/centcom/central_command_areas/holding) +"qE" = ( +/turf/closed/indestructible/fakedoor{ + name = "Guest House Back Entrance" + }, +/area/centcom/central_command_areas/holding) "qF" = ( /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/floor/grass, @@ -719,6 +756,20 @@ /obj/machinery/light/directional/east, /turf/open/floor/wood/large, /area/centcom/central_command_areas/holding) +"qI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/wallframe/newscaster{ + pixel_x = -6 + }, +/obj/item/flashlight/lamp/bananalamp{ + pixel_x = 9; + pixel_y = 9 + }, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/holding) "qT" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -741,23 +792,25 @@ }, /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) +"rn" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 4; + pixel_x = -8; + pixel_y = 1 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = 7; + pixel_y = -4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/black, +/area/centcom/central_command_areas/holding) "rz" = ( /obj/structure/flora/bush/flowers_yw/style_random, /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, /area/centcom/central_command_areas/holding) -"rE" = ( -/turf/closed/indestructible/fakedoor{ - name = "Guest House Back Entrance" - }, -/area/centcom/central_command_areas/holding) -"rF" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/obj/effect/landmark/holding_facility, -/turf/open/floor/wood/large, -/area/centcom/central_command_areas/holding) "rQ" = ( /obj/machinery/duct, /turf/open/floor/iron/cafeteria, @@ -775,32 +828,11 @@ dir = 8 }, /area/centcom/central_command_areas/holding) -"so" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/carpet/black, -/area/centcom/central_command_areas/holding) -"sF" = ( -/obj/structure/closet/crate/bin, -/obj/item/clothing/suit/costume/xenos, -/obj/item/clothing/head/costume/xenos, -/obj/item/xenos_claw, -/obj/item/grown/log/bamboo, -/obj/item/grown/log/bamboo, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/wood/tile, -/area/centcom/central_command_areas/holding) -"sH" = ( -/obj/machinery/light/warm/directional/west, -/turf/open/water{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, +"sc" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/showroomfloor, /area/centcom/central_command_areas/holding) "ts" = ( /obj/item/food/meat/slab/chicken, @@ -821,6 +853,15 @@ /obj/structure/closet/secure_closet/freezer/meat/open, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/holding) +"uv" = ( +/obj/structure/toilet/greyscale{ + dir = 4 + }, +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/centcom/central_command_areas/holding) "uw" = ( /mob/living/basic/bot/medbot/stationary{ desc = "A little medical robot. You can make out the word \"sincerity\" on its chassis."; @@ -835,27 +876,25 @@ initial_gas_mix = "TEMP=2.7" }, /area/centcom/central_command_areas/holding) -"uQ" = ( -/obj/structure/chair/wood{ - dir = 8 - }, -/turf/open/floor/bamboo/tatami/purple{ - dir = 4 - }, -/area/centcom/central_command_areas/holding) -"uZ" = ( -/obj/structure/closet/crate, -/obj/item/vending_refill/autodrobe, -/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, +"uL" = ( +/obj/structure/closet/crate/bin, +/obj/item/clothing/suit/costume/xenos, +/obj/item/clothing/head/costume/xenos, +/obj/item/xenos_claw, +/obj/item/grown/log/bamboo, +/obj/item/grown/log/bamboo, /obj/structure/sign/painting/library{ pixel_y = 32 }, -/turf/open/floor/catwalk_floor, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/holding) +"uQ" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/bamboo/tatami/purple{ + dir = 4 + }, /area/centcom/central_command_areas/holding) "vr" = ( /obj/structure/rack, @@ -875,9 +914,10 @@ /obj/machinery/seed_extractor, /turf/open/floor/wood/tile, /area/centcom/central_command_areas/holding) -"vW" = ( +"vS" = ( /obj/structure/table/wood, -/obj/machinery/computer/libraryconsole/bookmanagement, +/obj/item/paper_bin, +/obj/item/pen/fountain, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) "wc" = ( @@ -893,10 +933,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) -"wz" = ( -/obj/structure/sign/poster/contraband/syndicate_recruitment/directional/south, -/turf/open/floor/wood/large, -/area/centcom/central_command_areas/holding) "wU" = ( /turf/open/floor/wood/parquet, /area/centcom/central_command_areas/holding) @@ -945,15 +981,6 @@ dir = 1 }, /area/centcom/central_command_areas/holding) -"xR" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/carpet/black, -/area/centcom/central_command_areas/holding) "xU" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/siding/wood{ @@ -984,13 +1011,12 @@ /obj/structure/chair/stool/directional/west, /turf/open/misc/beach/sand, /area/centcom/central_command_areas/holding) -"zg" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/shovel/spade{ - pixel_y = -14 +"zc" = ( +/obj/structure/table/wood, +/obj/machinery/microwave{ + pixel_y = 6 }, -/obj/item/cultivator, -/turf/open/floor/wood/tile, +/turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) "zh" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, @@ -1037,22 +1063,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) -"Ac" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/clothing/suit/costume/hawaiian{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/clothing/suit/costume/hawaiian, -/obj/item/clothing/suit/costume/hawaiian{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/suit/costume/hawaiian, -/obj/effect/turf_decal/tile/dark/fourcorners, -/turf/open/floor/iron/sepia, -/area/centcom/central_command_areas/holding) "Af" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -1073,6 +1083,12 @@ "Am" = ( /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) +"An" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/chef_recipes, +/obj/item/knife/kitchen, +/turf/open/floor/iron/cafeteria, +/area/centcom/central_command_areas/holding) "Ar" = ( /obj/structure/sink/kitchen/directional/west, /obj/item/reagent_containers/cup/bucket, @@ -1136,11 +1152,14 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/wood/tile, /area/centcom/central_command_areas/holding) -"Co" = ( -/obj/structure/toilet, -/obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/door/window/survival_pod/left/directional/south, -/turf/open/floor/iron/showroomfloor, +"CD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) "CG" = ( /turf/closed/indestructible/wood, @@ -1150,27 +1169,12 @@ dir = 8 }, /area/centcom/central_command_areas/holding) -"CP" = ( -/obj/structure/sink/directional/west, -/obj/structure/mirror/directional/east, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/centcom/central_command_areas/holding) "CT" = ( /obj/structure/table/reinforced/plastitaniumglass, /turf/open/floor/bamboo/tatami{ dir = 4 }, /area/centcom/central_command_areas/holding) -"Dd" = ( -/obj/structure/toilet/greyscale{ - dir = 4 - }, -/obj/structure/sink/directional/west, -/obj/structure/mirror/directional/east, -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/centcom/central_command_areas/holding) "Dh" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/tile/dark/fourcorners, @@ -1210,24 +1214,12 @@ "DI" = ( /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) -"DJ" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/toy/mecha/phazon, -/turf/open/floor/bamboo/tatami/purple{ - dir = 8 - }, -/area/centcom/central_command_areas/holding) "DL" = ( /obj/structure/chair/wood{ dir = 4 }, /turf/open/floor/wood/large, /area/centcom/central_command_areas/holding) -"DW" = ( -/turf/open/water{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/centcom/central_command_areas/holding) "DZ" = ( /obj/structure/kitchenspike, /obj/item/gun/magic/hook, @@ -1292,12 +1284,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/holding) -"FD" = ( -/obj/structure/table/wood, -/obj/item/food/grown/tea/astra, -/obj/item/food/grown/soybeans, -/turf/open/floor/carpet/black, -/area/centcom/central_command_areas/holding) "FE" = ( /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/holding) @@ -1341,6 +1327,22 @@ }, /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) +"Gw" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/clothing/suit/costume/hawaiian{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/suit/costume/hawaiian, +/obj/item/clothing/suit/costume/hawaiian{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/suit/costume/hawaiian, +/obj/effect/turf_decal/tile/dark/fourcorners, +/turf/open/floor/iron/sepia, +/area/centcom/central_command_areas/holding) "Gy" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/glass/bottle/sake{ @@ -1348,20 +1350,6 @@ }, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) -"GC" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/chef_recipes, -/obj/item/knife/kitchen, -/turf/open/floor/iron/cafeteria, -/area/centcom/central_command_areas/holding) -"GJ" = ( -/obj/item/kirbyplants/organic/plant10, -/obj/machinery/light/small/directional/north, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/iron/sepia, -/area/centcom/central_command_areas/holding) "GN" = ( /obj/structure/bed/dogbed/cayenne{ name = "Paprika's bed" @@ -1435,12 +1423,33 @@ initial_gas_mix = "TEMP=2.7" }, /area/centcom/central_command_areas/holding) +"HV" = ( +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/obj/effect/landmark/holding_facility, +/turf/open/floor/wood/large, +/area/centcom/central_command_areas/holding) "HW" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, /turf/open/floor/wood/tile, /area/centcom/central_command_areas/holding) +"Ia" = ( +/obj/structure/table/reinforced, +/obj/item/food/grown/tea/astra{ + pixel_y = 13 + }, +/obj/item/food/grown/soybeans{ + pixel_y = 13 + }, +/obj/machinery/reagentgrinder{ + desc = "Used to grind things up into raw materials and liquids."; + pixel_y = 5 + }, +/turf/open/floor/iron/cafeteria, +/area/centcom/central_command_areas/holding) "Ig" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -1452,13 +1461,6 @@ /obj/machinery/deepfryer, /turf/open/floor/iron/cafeteria, /area/centcom/central_command_areas/holding) -"Iz" = ( -/obj/machinery/shower/directional/south, -/obj/item/soap/syndie, -/obj/structure/curtain, -/obj/machinery/door/window/survival_pod/left/directional/south, -/turf/open/floor/iron/showroomfloor, -/area/centcom/central_command_areas/holding) "II" = ( /mob/living/basic/bot/medbot/stationary{ desc = "When engaged in combat, the vanquishing of thine enemy can be the warrior's only concern."; @@ -1467,6 +1469,22 @@ }, /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) +"IM" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/book/manual/hydroponics_pod_people, +/obj/item/paper/guides/jobs/hydroponics, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/holding) +"Jf" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/wrench{ + pixel_y = -16 + }, +/obj/item/wirecutters{ + pixel_y = 3 + }, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/holding) "Jg" = ( /obj/item/clothing/shoes/galoshes{ pixel_y = -8 @@ -1499,26 +1517,14 @@ }, /turf/open/floor/catwalk_floor, /area/centcom/central_command_areas/holding) -"Jw" = ( -/obj/item/food/grown/rice, -/obj/item/food/grown/rice, -/obj/item/food/grown/rice, -/obj/item/food/grown/rice, -/obj/item/food/grown/rice, -/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/onion, -/obj/item/food/grown/onion, -/obj/item/food/grown/onion/red, -/obj/item/food/grown/onion/red, -/obj/item/food/grown/coffee, -/obj/structure/closet/secure_closet/freezer/fridge/open{ - name = "kitchen cabinet" +"Jz" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + pixel_x = -5; + pixel_y = 11 }, -/turf/open/floor/carpet/black, +/obj/item/camera_film, +/turf/open/floor/wood/large, /area/centcom/central_command_areas/holding) "JC" = ( /obj/structure/closet{ @@ -1560,6 +1566,27 @@ }, /turf/open/floor/wood/tile, /area/centcom/central_command_areas/holding) +"JV" = ( +/obj/item/food/grown/rice, +/obj/item/food/grown/rice, +/obj/item/food/grown/rice, +/obj/item/food/grown/rice, +/obj/item/food/grown/rice, +/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/onion, +/obj/item/food/grown/onion, +/obj/item/food/grown/onion/red, +/obj/item/food/grown/onion/red, +/obj/item/food/grown/coffee, +/obj/structure/closet/secure_closet/freezer/fridge/open{ + name = "kitchen cabinet" + }, +/turf/open/floor/carpet/black, +/area/centcom/central_command_areas/holding) "Kb" = ( /obj/structure/musician/piano, /turf/open/misc/beach/sand, @@ -1573,20 +1600,6 @@ }, /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) -"Ks" = ( -/obj/structure/table/reinforced, -/obj/item/food/grown/tea/astra{ - pixel_y = 13 - }, -/obj/item/food/grown/soybeans{ - pixel_y = 13 - }, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; - pixel_y = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/centcom/central_command_areas/holding) "Kt" = ( /obj/structure/dresser, /obj/machinery/light/small/directional/west, @@ -1594,12 +1607,6 @@ dir = 8 }, /area/centcom/central_command_areas/holding) -"KW" = ( -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/wood/large, -/area/centcom/central_command_areas/holding) "Lw" = ( /obj/item/bedsheet/syndie{ dir = 4 @@ -1636,14 +1643,12 @@ }, /turf/open/floor/iron/cafeteria, /area/centcom/central_command_areas/holding) -"Mm" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp{ - pixel_x = -5; - pixel_y = 11 +"My" = ( +/obj/item/kirbyplants/organic/plant10, +/obj/structure/sign/painting/library{ + pixel_y = 32 }, -/obj/item/camera_film, -/turf/open/floor/wood/large, +/turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) "Mz" = ( /obj/structure/closet, @@ -1659,14 +1664,6 @@ /obj/item/defibrillator, /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) -"MA" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/toy/katana{ - desc = "As seen in your favourite Japanese cartoon."; - name = "anime katana" - }, -/turf/open/floor/bamboo/tatami, -/area/centcom/central_command_areas/holding) "ML" = ( /obj/structure/window/paperframe{ can_atmos_pass = 0 @@ -1677,6 +1674,30 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) +"MM" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/toy/figure/syndie, +/turf/open/floor/bamboo/tatami/purple, +/area/centcom/central_command_areas/holding) +"MR" = ( +/obj/structure/table/wood, +/obj/item/food/grown/tea/astra, +/obj/item/food/grown/soybeans, +/turf/open/floor/carpet/black, +/area/centcom/central_command_areas/holding) +"Nt" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks{ + dir = 4; + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 10; + pixel_y = 2 + }, +/turf/open/floor/carpet/black, +/area/centcom/central_command_areas/holding) "Nz" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -1713,12 +1734,13 @@ dir = 1 }, /area/centcom/central_command_areas/holding) -"Oj" = ( -/obj/structure/table/wood, -/obj/machinery/microwave{ - pixel_y = 6 +"Od" = ( +/obj/item/kirbyplants/organic/plant10, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/painting/library{ + pixel_y = 32 }, -/turf/open/floor/carpet/black, +/turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) "Ok" = ( /obj/effect/turf_decal/siding/wood{ @@ -1739,13 +1761,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) -"Os" = ( -/obj/item/kirbyplants/organic/plant10, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/carpet/black, -/area/centcom/central_command_areas/holding) "OC" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -1762,10 +1777,9 @@ /obj/structure/flora/tree/jungle/small/style_random, /turf/open/floor/grass, /area/centcom/central_command_areas/holding) -"Pz" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/rcl/pre_loaded, -/turf/open/floor/catwalk_floor, +"PB" = ( +/obj/structure/sign/poster/contraband/syndicate_recruitment/directional/south, +/turf/open/floor/wood/large, /area/centcom/central_command_areas/holding) "PH" = ( /obj/structure/chair/comfy/black{ @@ -1773,33 +1787,19 @@ }, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) -"Qa" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/wood/fancy/green, -/obj/item/flashlight/flare/candle/infinite{ - pixel_y = 6 - }, -/turf/open/floor/carpet/black, -/area/centcom/central_command_areas/holding) -"Qh" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/toy/figure/ninja, -/turf/open/floor/bamboo/tatami{ - dir = 4 +"PK" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/shovel/spade{ + pixel_y = -14 }, +/obj/item/cultivator, +/turf/open/floor/wood/tile, /area/centcom/central_command_areas/holding) -"Qj" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/toy/figure/syndie, -/turf/open/floor/bamboo/tatami/purple, -/area/centcom/central_command_areas/holding) -"Qm" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/table/wood/fancy/green, -/obj/effect/spawner/random/entertainment/gambling, -/turf/open/floor/carpet/black, +"PV" = ( +/obj/structure/table/wood/fancy/royalblue, +/obj/item/instrument/piano_synth, +/obj/item/instrument/saxophone, +/turf/open/floor/wood/parquet, /area/centcom/central_command_areas/holding) "Qt" = ( /obj/machinery/light/small/directional/north, @@ -1842,16 +1842,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/cafeteria, /area/centcom/central_command_areas/holding) -"Rj" = ( -/obj/structure/table/reinforced/rglass, -/obj/item/wrench{ - pixel_y = -16 - }, -/obj/item/wirecutters{ - pixel_y = 3 - }, -/turf/open/floor/wood/tile, -/area/centcom/central_command_areas/holding) "Ry" = ( /obj/structure/dresser, /obj/machinery/light/small/directional/east, @@ -1896,13 +1886,6 @@ "Sc" = ( /turf/open/floor/stone, /area/centcom/central_command_areas/holding) -"Si" = ( -/obj/item/kirbyplants/organic/plant10, -/obj/structure/sign/painting/library{ - pixel_y = 32 - }, -/turf/open/floor/iron/sepia, -/area/centcom/central_command_areas/holding) "Tc" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/chair/sofa/corp/right{ @@ -1932,6 +1915,12 @@ }, /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) +"TO" = ( +/obj/structure/sign/painting/library{ + pixel_y = 32 + }, +/turf/open/floor/iron/sepia, +/area/centcom/central_command_areas/holding) "TP" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -1956,10 +1945,31 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) +"UB" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/toy/figure/ninja, +/turf/open/floor/bamboo/tatami{ + dir = 4 + }, +/area/centcom/central_command_areas/holding) "UO" = ( /obj/structure/chair/stool/bar/directional/west, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) +"UW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood/fancy/green, +/obj/item/flashlight/flare/candle/infinite{ + pixel_y = 6 + }, +/turf/open/floor/carpet/black, +/area/centcom/central_command_areas/holding) +"UY" = ( +/obj/machinery/vending/boozeomat, +/turf/closed/wall/mineral/wood, +/area/centcom/central_command_areas/holding) "Vd" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -1983,6 +1993,17 @@ /obj/machinery/stasis, /turf/open/floor/iron/sepia, /area/centcom/central_command_areas/holding) +"Vj" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood, +/obj/item/paper_bin, +/obj/item/pen/fountain, +/obj/item/camera/detective{ + desc = "A polaroid camera with extra capacity for social media marketing."; + name = "Professional camera" + }, +/turf/open/floor/wood/tile, +/area/centcom/central_command_areas/holding) "VC" = ( /obj/structure/closet/crate/bin, /obj/item/soap/syndie, @@ -2043,17 +2064,6 @@ dir = 4 }, /area/centcom/central_command_areas/holding) -"WJ" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/siding/wood, -/obj/item/paper_bin, -/obj/item/pen/fountain, -/obj/item/camera/detective{ - desc = "A polaroid camera with extra capacity for social media marketing."; - name = "Professional camera" - }, -/turf/open/floor/wood/tile, -/area/centcom/central_command_areas/holding) "WS" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -2092,6 +2102,11 @@ }, /turf/open/floor/carpet/black, /area/centcom/central_command_areas/holding) +"Xd" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/crayons, +/turf/open/floor/catwalk_floor, +/area/centcom/central_command_areas/holding) "Xi" = ( /obj/structure/flora/rock/pile/jungle/large/style_random{ pixel_y = -3 @@ -2124,36 +2139,21 @@ }, /turf/open/floor/wood/tile, /area/centcom/central_command_areas/holding) -"XS" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks{ - dir = 4; - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = 10; - pixel_y = 2 +"Yd" = ( +/obj/structure/table/wood/fancy/royalblue, +/obj/item/clothing/mask/animal/pig, +/obj/item/clothing/mask/animal/horsehead, +/obj/item/clothing/mask/animal/small/rat, +/obj/item/clothing/mask/fakemoustache{ + pixel_y = 9 }, -/turf/open/floor/carpet/black, +/turf/open/floor/wood/parquet, /area/centcom/central_command_areas/holding) "Ye" = ( /obj/structure/table/wood/fancy/red, /obj/item/toy/spinningtoy, /turf/open/floor/wood/parquet, /area/centcom/central_command_areas/holding) -"YF" = ( -/obj/structure/table/wood/fancy/royalblue, -/obj/item/instrument/piano_synth, -/obj/item/instrument/saxophone, -/turf/open/floor/wood/parquet, -/area/centcom/central_command_areas/holding) -"YI" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen/fountain, -/turf/open/floor/carpet/black, -/area/centcom/central_command_areas/holding) "YQ" = ( /turf/open/floor/bamboo/tatami{ dir = 4 @@ -2388,7 +2388,7 @@ Zj LK Mh BB -Ks +Ia CG CG LK @@ -2423,14 +2423,14 @@ Zj Zj Zj LK -aW +gy wV Ea dg -Oj -jm -XS -Jw +zc +rn +Nt +JV zh Xn dg @@ -2534,20 +2534,20 @@ ox Zj Zj LK -GC +An nA wV dg -of -YI +UY +vS Am Am -FD +MR dg dg -DW -sH -DW +oG +nW +oG LK Ed xB @@ -2580,11 +2580,11 @@ AE Gy Bo iF -op +cK dg -DW -DW -DW +oG +oG +oG LK Ed xB @@ -2610,7 +2610,7 @@ Zj Zj HU CG -nq +TO zN Jj Xb @@ -2762,8 +2762,8 @@ XP dg hO hO -Qa -Qm +UW +jf hO hO Ig @@ -2862,13 +2862,13 @@ Zj HU aB CT -Qh +UB gX mw mw WW XP -WJ +Vj mw DL ht @@ -2901,18 +2901,18 @@ CG dg dg dg -KW +iH GU dg dg Zs mw -Mm +Jz ht kl dg dg -KW +iH mw CG Zj @@ -2936,14 +2936,14 @@ Zj Zj aB AO -Qj +MM ML mw mw hs dg dg -KW +iH iB ht kl @@ -3023,7 +3023,7 @@ jb NN dg dg -KW +iH GU CG Zj @@ -3049,16 +3049,16 @@ CG dg dg dg -KW +iH mw dg dg dg dg -er +CD al Am -vW +hv XP mw mw @@ -3082,14 +3082,14 @@ Zj Zj Zj LK -Co -hD +lh +qx dg QJ mw mw -bm -Ac +od +Gw XP xw Am @@ -3119,7 +3119,7 @@ HU Zj HU LK -Co +lh jv Tv Xt @@ -3134,7 +3134,7 @@ dg Qt GN dg -KW +iH mw CG HU @@ -3156,8 +3156,8 @@ Zj ov HU LK -Iz -CP +os +sc dg QJ mw @@ -3197,16 +3197,16 @@ CG dg dg dg -KW -wz +iH +PB dg dg dg dg -so +ln xe Am -vW +hv XP mw mw @@ -3245,7 +3245,7 @@ JR RY dg dg -KW +iH mw eg Sc @@ -3306,16 +3306,16 @@ Zj HU aB Dr -MA +gd ML pp jA dg dg dg -KW +iH mw -lb +qI kl Zq XP @@ -3345,7 +3345,7 @@ CG dg dg dg -rF +HV pp JC XP @@ -3380,7 +3380,7 @@ ov Zj aB xF -DJ +ga ML pp pp @@ -3459,7 +3459,7 @@ ML ND ND dg -Dd +uv Zk mw mw @@ -3514,7 +3514,7 @@ bH qr FB bP -kc +Xd CG Ed Ed @@ -3547,11 +3547,11 @@ CG Zj HU CG -uZ +pu FE FE Ju -Pz +gK CG Ed Ed @@ -3597,7 +3597,7 @@ Ed Ed CG LK -rE +qE LK CG LK @@ -3609,13 +3609,13 @@ LK LK LK CG -KW +iH mw dg XP XP dg -KW +iH GU dg af @@ -3757,17 +3757,17 @@ Mz DI dv dg -Os +hw NU Vf NU EC dg -GJ +Od Wm Mz dg -sF +uL hO hO hO @@ -3831,13 +3831,13 @@ wq DI Uj dg -xR +jR NU NU NU NU dg -Si +My DI DG dg @@ -3971,8 +3971,8 @@ xB Ed CG hm -kY -YF +Yd +PV Tj dg ni @@ -4024,7 +4024,7 @@ Rf RC wU wU -kM +jc CG CG CG @@ -4068,9 +4068,9 @@ HU Zj CG Ar -Rj -zg -iD +Jf +PK +IM CG Ed "} diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index cf6aacd092eb6..60c5b1dcb5825 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -1124,32 +1124,6 @@ /obj/machinery/chem_dispenser/mutagensaltpeter, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bioterrorism) -"mj" = ( -/obj/structure/table/wood/poker, -/obj/machinery/light/warm/directional/north, -/obj/item/reagent_containers/cup/glass/bottle/whiskey{ - pixel_x = -4; - pixel_y = 14 - }, -/obj/item/toy/cards/deck{ - pixel_x = 3; - pixel_y = 6 - }, -/obj/item/cigarette/robust{ - pixel_x = -4; - pixel_y = 1 - }, -/obj/effect/decal/cleanable/ash{ - pixel_x = 12; - pixel_y = -6 - }, -/obj/effect/spawner/random/entertainment/lighter{ - pixel_x = 9; - pixel_y = -3 - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron, -/area/centcom/syndicate_mothership/control) "my" = ( /obj/effect/landmark/start/nukeop_leader, /obj/effect/turf_decal/tile/bar/opposingcorners, @@ -1501,6 +1475,33 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer5, /turf/closed/indestructible/syndicate, /area/centcom/syndicate_mothership/control) +"qs" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/closet/secure_closet/freezer/fridge/open, +/obj/item/food/meat/slab/rawcrab, +/obj/item/food/meat/slab/rawcrab, +/obj/item/food/meat/slab/rawcrab, +/obj/item/food/fishmeat, +/obj/item/food/fishmeat, +/obj/item/food/fishmeat, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/storage/fancy/egg_box, +/obj/item/storage/fancy/egg_box, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/reagent_containers/condiment/flour{ + pixel_x = -5; + pixel_y = 9 + }, +/turf/open/floor/plastic, +/area/centcom/syndicate_mothership/expansion_fridgerummage) "qv" = ( /obj/item/kirbyplants/random, /turf/open/floor/mineral/titanium, @@ -1962,33 +1963,6 @@ }, /turf/open/floor/carpet, /area/centcom/syndicate_mothership/control) -"wr" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/food/meat/slab/rawcrab, -/obj/item/food/meat/slab/rawcrab, -/obj/item/food/meat/slab/rawcrab, -/obj/item/food/fishmeat, -/obj/item/food/fishmeat, -/obj/item/food/fishmeat, -/obj/item/food/grown/tomato, -/obj/item/food/grown/tomato, -/obj/item/food/grown/tomato, -/obj/item/reagent_containers/condiment/enzyme, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/flour{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/item/reagent_containers/condiment/flour{ - pixel_x = -5; - pixel_y = 9 - }, -/turf/open/floor/plastic, -/area/centcom/syndicate_mothership/expansion_fridgerummage) "ws" = ( /obj/effect/turf_decal/siding/wideplating/dark, /obj/effect/turf_decal/siding/wideplating/dark{ @@ -2603,6 +2577,32 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bombthreat) +"DY" = ( +/obj/structure/table/wood/poker, +/obj/machinery/light/warm/directional/north, +/obj/item/reagent_containers/cup/glass/bottle/whiskey{ + pixel_x = -4; + pixel_y = 14 + }, +/obj/item/toy/cards/deck{ + pixel_x = 3; + pixel_y = 6 + }, +/obj/item/cigarette/robust{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/ash{ + pixel_x = 12; + pixel_y = -6 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 9; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron, +/area/centcom/syndicate_mothership/control) "DZ" = ( /turf/closed/indestructible/syndicate, /area/centcom/syndicate_mothership/control) @@ -6419,7 +6419,7 @@ rJ Cf nU ek -wr +qs ek DZ eK @@ -7041,7 +7041,7 @@ DZ Gr tc mJ -mj +DY lQ Nb VK diff --git a/_maps/templates/lazy_templates/wizard_den.dmm b/_maps/templates/lazy_templates/wizard_den.dmm index 15af9f324ab9c..a909cc94c23b2 100644 --- a/_maps/templates/lazy_templates/wizard_den.dmm +++ b/_maps/templates/lazy_templates/wizard_den.dmm @@ -44,6 +44,18 @@ /obj/structure/showcase/machinery/rng, /turf/open/floor/engine/cult, /area/centcom/wizard_station) +"dr" = ( +/obj/structure/table/wood, +/obj/item/cigarette/cigar{ + pixel_y = -9; + pixel_x = -5 + }, +/obj/item/camera/spooky{ + pixel_y = 7; + pixel_x = 2 + }, +/turf/open/floor/engine/cult, +/area/centcom/wizard_station) "dB" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/engine/cult, @@ -315,6 +327,13 @@ /obj/machinery/griddle, /turf/open/floor/iron, /area/centcom/wizard_station) +"qg" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/engine/cult, +/area/centcom/wizard_station) "ql" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -360,18 +379,6 @@ }, /turf/open/floor/engine/cult, /area/centcom/wizard_station) -"sw" = ( -/obj/structure/table/wood, -/obj/item/cigarette/cigar{ - pixel_y = -9; - pixel_x = -5 - }, -/obj/item/camera/spooky{ - pixel_y = 7; - pixel_x = 2 - }, -/turf/open/floor/engine/cult, -/area/centcom/wizard_station) "sx" = ( /obj/structure/flora/bush/flowers_pp/style_random, /turf/open/floor/grass, @@ -500,6 +507,13 @@ }, /turf/open/floor/plastic, /area/centcom/wizard_station) +"yX" = ( +/obj/structure/railing, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/engine/cult, +/area/centcom/wizard_station) "zB" = ( /turf/open/floor/iron, /area/centcom/wizard_station) @@ -600,13 +614,6 @@ }, /turf/open/floor/engine/cult, /area/centcom/wizard_station) -"Ii" = ( -/obj/structure/railing, -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/engine/cult, -/area/centcom/wizard_station) "II" = ( /obj/structure/table/wood, /obj/item/modular_computer/laptop/preset/civilian{ @@ -658,9 +665,6 @@ /turf/open/floor/engine/cult, /area/centcom/wizard_station) "KL" = ( -/obj/structure/railing{ - dir = 8 - }, /obj/structure/railing{ dir = 8 }, @@ -846,13 +850,6 @@ /obj/machinery/vending/magivend, /turf/open/floor/engine/cult, /area/centcom/wizard_station) -"Va" = ( -/obj/structure/railing, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/engine/cult, -/area/centcom/wizard_station) "VB" = ( /turf/closed/indestructible/wood, /area/centcom/wizard_station) @@ -1551,7 +1548,7 @@ kZ uy VB TX -Ii +yX VB VB op @@ -1597,7 +1594,7 @@ kZ uy VB fX -Va +qg fX VB VB @@ -1643,7 +1640,7 @@ LU cy VB eI -Va +qg fX fX dk @@ -1735,7 +1732,7 @@ LU cy VB fX -Va +qg fX fX dk @@ -1781,7 +1778,7 @@ kZ uy VB fX -Va +qg fX VB VB @@ -1827,7 +1824,7 @@ kZ uy VB fX -Va +qg VB VB op @@ -1852,7 +1849,7 @@ op op TG TG -sw +dr HD VB Dq diff --git a/_maps/templates/shelter_3.dmm b/_maps/templates/shelter_3.dmm index d4681507a37e4..2bae50e8ba790 100644 --- a/_maps/templates/shelter_3.dmm +++ b/_maps/templates/shelter_3.dmm @@ -35,9 +35,7 @@ /turf/open/floor/pod/dark, /area/misc/survivalpod) "h" = ( -/obj/machinery/vending/boozeomat/all_access{ - onstation = 0 - }, +/obj/machinery/vending/boozeomat, /turf/open/floor/pod/dark, /area/misc/survivalpod) "i" = ( @@ -146,9 +144,7 @@ /turf/open/floor/carpet/black, /area/misc/survivalpod) "z" = ( -/obj/machinery/vending/cigarette{ - onstation = 0 - }, +/obj/machinery/vending/cigarette, /turf/open/floor/carpet/black, /area/misc/survivalpod) "A" = ( @@ -226,10 +222,7 @@ /turf/open/floor/carpet/black, /area/misc/survivalpod) "L" = ( -/obj/machinery/vending/snack/blue{ - req_access = null; - onstation = 0 - }, +/obj/machinery/vending/snack/blue, /turf/open/floor/carpet/black, /area/misc/survivalpod) "M" = ( diff --git a/_maps/virtual_domains/breeze_bay.dmm b/_maps/virtual_domains/breeze_bay.dmm index 6035cfd2000ea..5fa537bccdecb 100644 --- a/_maps/virtual_domains/breeze_bay.dmm +++ b/_maps/virtual_domains/breeze_bay.dmm @@ -13,6 +13,10 @@ "e" = ( /turf/open/floor/carpet/red, /area/virtual_domain/fullbright) +"f" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/open/water/beach, +/area/virtual_domain/fullbright) "g" = ( /obj/item/toy/beach_ball/branded, /turf/open/misc/beach/sand, @@ -41,10 +45,6 @@ /obj/structure/table/wood, /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) -"n" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/open/water/beach, -/area/virtual_domain/fullbright) "o" = ( /obj/structure/flora/tree/jungle/style_5, /turf/open/misc/beach/sand, @@ -230,7 +230,7 @@ i Q i i -n +f a "} (3,1,1) = {" diff --git a/_maps/virtual_domains/grasslands_hunt.dmm b/_maps/virtual_domains/grasslands_hunt.dmm new file mode 100644 index 0000000000000..c77bdae196f42 --- /dev/null +++ b/_maps/virtual_domains/grasslands_hunt.dmm @@ -0,0 +1,6650 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aj" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/water, +/area/virtual_domain/fullbright) +"av" = ( +/obj/structure/flora/bush/pointy/style_random, +/obj/structure/flora/bush/ferny/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"aD" = ( +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"aZ" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"bd" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"br" = ( +/obj/structure/flora/bush/reed/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"bG" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"bI" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"bU" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/holofloor/basalt, +/area/virtual_domain/fullbright) +"ce" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"cL" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"cS" = ( +/obj/structure/flora/rock/pile, +/turf/open/floor/holofloor/basalt, +/area/virtual_domain/fullbright) +"cZ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/reed/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"dk" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"ec" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"ep" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"eE" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"fa" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"fm" = ( +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"fK" = ( +/turf/closed/indestructible/rock, +/area/virtual_domain/fullbright) +"fZ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"gT" = ( +/obj/structure/table/wood, +/obj/item/gun/ballistic/rifle/boltaction{ + pixel_y = 8 + }, +/obj/item/gun/ballistic/rifle/boltaction{ + pixel_y = 4 + }, +/obj/item/gun/ballistic/rifle/boltaction, +/turf/template_noop, +/area/virtual_domain/safehouse) +"hH" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"ic" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"iy" = ( +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"iT" = ( +/obj/structure/flora/bush/pointy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"jc" = ( +/obj/structure/flora/bush/stalky/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"jo" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"jq" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"kd" = ( +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"kj" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"kq" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"kG" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"kM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"kX" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"lf" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"lh" = ( +/obj/structure/flora/bush/pointy/style_random, +/turf/closed/indestructible/rock, +/area/virtual_domain/fullbright) +"lF" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"lK" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"lN" = ( +/obj/structure/flora/bush/reed/style_random, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"lQ" = ( +/obj/structure/table/wood, +/obj/item/storage/cans/sixbeer, +/turf/template_noop, +/area/virtual_domain/safehouse) +"nn" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"nE" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"nK" = ( +/obj/structure/flora/bush/pointy/style_random, +/obj/structure/flora/bush/grassy/style_random, +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"od" = ( +/obj/item/knife/hunting, +/obj/structure/table/wood, +/turf/template_noop, +/area/virtual_domain/safehouse) +"or" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/reed/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"oy" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/pointy/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"oJ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"oT" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/ferny/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"ph" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"pn" = ( +/obj/structure/flora/bush/ferny/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"pJ" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"rj" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"rx" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"rO" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"rW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"sq" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"st" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/misc/dirt/station, +/area/virtual_domain/fullbright) +"sx" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"sZ" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/reed/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"tw" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/misc/dirt/station, +/area/virtual_domain/fullbright) +"tM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"tZ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"uh" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"uk" = ( +/turf/open/water, +/area/virtual_domain/fullbright) +"uA" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"uN" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water, +/area/virtual_domain/fullbright) +"vF" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/reed/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"vN" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/reed/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"vS" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"we" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"wq" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"wT" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"xj" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/ferny/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"xw" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"xE" = ( +/obj/structure/flora/bush/ferny/style_random, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"yr" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"yC" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"zb" = ( +/obj/structure/flora/bush/stalky/style_random, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water, +/area/virtual_domain/fullbright) +"zd" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"zr" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/rock/pile/jungle/large/style_3, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"zX" = ( +/obj/modular_map_root/safehouse{ + key = "wood" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"An" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"Az" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"AM" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/template_noop, +/area/virtual_domain/safehouse) +"AP" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Be" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Bl" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Bn" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"BR" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"BS" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/holofloor/basalt, +/area/virtual_domain/fullbright) +"Co" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Cw" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"CH" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Dk" = ( +/obj/effect/landmark/bitrunning/loot_signal, +/turf/template_noop, +/area/virtual_domain/safehouse) +"DM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"DT" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Es" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"EW" = ( +/obj/structure/flora/rock/pile/style_2, +/turf/open/floor/holofloor/basalt, +/area/virtual_domain/fullbright) +"Fm" = ( +/obj/structure/flora/tree/jungle/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"FC" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/structure/flora/bush/leavy, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Gt" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/ferny/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"HT" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Ib" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/tree/jungle/small/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Ik" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"IC" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"IQ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"Jr" = ( +/obj/structure/flora/tree/jungle/small/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Js" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/rock/pile/jungle/style_2, +/turf/open/water, +/area/virtual_domain/fullbright) +"Jv" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"Jw" = ( +/obj/structure/flora/bush/reed/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"JD" = ( +/obj/structure/flora/bush/pointy/style_random, +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"JF" = ( +/turf/open/floor/holofloor/basalt, +/area/virtual_domain/fullbright) +"KE" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"KR" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/structure/flora/bush/reed/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"Lx" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"LN" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Mh" = ( +/obj/structure/flora/bush/pale/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"No" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"NG" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"NY" = ( +/obj/structure/flora/tree/stump, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/misc/dirt/station, +/area/virtual_domain/fullbright) +"PA" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"PM" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/dirt/station, +/area/virtual_domain/fullbright) +"PX" = ( +/turf/open/misc/dirt/station, +/area/virtual_domain/fullbright) +"Qh" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"QA" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"QM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Rl" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/grassy/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Rs" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"RL" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"RY" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/bush/ferny/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Se" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Sm" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"SK" = ( +/obj/structure/flora/rock/pile/jungle/style_random, +/turf/open/misc/dirt/station, +/area/virtual_domain/fullbright) +"SP" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/flora/bush/lavendergrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"SW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Tx" = ( +/obj/structure/flora/bush/ferny/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"TF" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/reed/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"Vi" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/holofloor/basalt, +/area/virtual_domain/fullbright) +"Vt" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"VN" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"XP" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/water, +/area/virtual_domain/fullbright) +"Yw" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/rock/pile/jungle/style_3, +/turf/open/water, +/area/virtual_domain/fullbright) +"YF" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"YH" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/water, +/area/virtual_domain/fullbright) +"YY" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) +"Zk" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/virtual_domain/fullbright) + +(1,1,1) = {" +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +ec +"} +(2,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(3,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(4,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +JF +JF +JF +JF +JF +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +No +No +yC +LN +LN +yC +yC +aD +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(5,1,1) = {" +VN +fK +fK +fK +fK +fK +cS +JF +JF +JF +JF +cS +JF +JF +JF +fK +fK +SK +SK +PX +PX +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +No +nn +yC +yC +AP +LN +yC +aD +CH +CH +CH +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(6,1,1) = {" +VN +fK +fK +fK +fK +uk +YH +uk +uk +uk +JF +JF +JF +YH +YH +uk +uk +An +An +ep +PM +PM +PM +SK +PX +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +CH +fm +fm +fm +CH +yC +yC +LN +yC +yC +iT +aD +nn +CH +No +nn +yC +yC +yC +yC +Fm +fm +aD +CH +CH +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(7,1,1) = {" +VN +fK +uk +uk +uk +uk +uk +uk +uk +uk +uk +uk +uk +uk +uk +uk +Jv +uk +uk +uk +An +An +ep +PM +PM +PM +tw +PX +PX +SK +fK +fK +LN +yC +yC +CH +CH +aD +Fm +iT +aD +aD +yC +yC +yC +aD +iy +iT +aD +aD +yC +aD +yC +yC +yC +yC +fm +fm +CH +CH +CH +CH +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(8,1,1) = {" +VN +fK +fK +uk +uk +uk +uk +Jv +uk +YH +uk +uk +uk +uk +uk +YH +tZ +jq +jq +tZ +YH +uk +uk +An +An +zd +oJ +vF +PM +SK +SK +SK +Rl +LN +yC +yC +yC +aD +iT +aD +yC +aD +Fm +nn +aD +aD +aD +aD +aD +aD +aD +kd +nn +nn +nn +nn +aD +aD +aD +nn +wT +fm +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(9,1,1) = {" +VN +fK +uk +uk +uk +uk +JF +JF +EW +JF +JF +JF +uk +JF +JF +fK +SK +PX +PX +PM +vN +YH +uk +uk +aj +st +bI +Jw +TF +vF +PM +PX +QM +yC +yC +yC +yC +nn +pn +aD +aD +aD +aD +aD +pn +pn +nn +nn +aD +nn +iT +pn +aD +aD +aD +RL +fm +aD +yC +yC +AP +wT +nn +aD +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(10,1,1) = {" +VN +fK +fK +fK +fK +JF +JF +cS +JF +JF +JF +JF +JF +fK +fK +fK +fK +fK +PX +PM +cZ +or +tZ +jq +uk +An +uk +uk +YH +kj +PM +NY +PM +lf +yC +KE +aD +aD +Jr +iT +aD +aD +pn +aD +aD +iy +nn +nn +aD +aD +kd +iT +nn +aD +aD +fm +aD +yC +yC +yC +yC +yC +yC +nn +nn +aD +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(11,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +JF +fK +fK +JF +JF +fK +fK +fK +fK +fK +fK +SK +PX +tw +PM +PM +BR +jq +uk +uk +uk +aj +PM +tw +PX +Cw +KE +aD +yC +aD +aD +aD +aD +nn +Fm +Tx +yC +yC +yC +yC +yC +LN +fm +pn +aD +aD +nn +aD +aD +yC +yC +yC +yC +yC +AP +aD +aD +aD +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(12,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +aD +yC +pJ +PM +PM +PX +PX +PX +PX +tw +BR +uk +uk +aj +PX +tw +tw +Bl +yC +aD +aD +aD +aD +nn +aD +aD +nn +aD +yC +yC +yC +AP +yC +yC +nn +aD +CH +nn +nn +aD +aD +nn +nn +aD +nn +nn +nn +nn +aD +aD +iT +aD +aD +fK +fK +fK +fK +fK +VN +"} +(13,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +aD +aD +pn +Mh +LN +lK +lK +rj +PX +PX +PX +PM +PM +bI +uk +aj +PM +tw +PX +Zk +Mh +yC +yC +aD +aD +nn +aD +aD +RL +yC +yC +yC +yC +yC +yC +yC +nn +iy +yC +yC +yC +aD +Fm +iT +aD +nn +aD +aD +aD +aD +aD +aD +Fm +iT +nn +fK +fK +fK +fK +fK +VN +"} +(14,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +nn +nn +nn +aD +pn +jo +fm +yC +LN +LN +yC +kX +xj +PX +PX +PM +bI +YH +aj +PX +PX +PM +QM +fm +yC +yC +yC +aD +aD +CH +aD +nn +yC +yC +yC +AP +yC +yC +yC +nn +iT +yC +yC +yC +aD +iT +aD +aD +aD +aD +iy +fm +aD +nn +nn +nn +aD +aD +fK +fK +fK +fK +fK +VN +"} +(15,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +nn +nn +nn +nn +nn +nn +aD +pn +yC +pn +KE +KE +aD +yC +oT +aZ +tw +PX +PX +bI +uk +uk +IQ +tw +PM +PX +Rl +LN +yC +yC +aD +aD +iy +yC +yC +yC +yC +yC +yC +yC +yC +aD +pn +aD +aD +aD +aD +aD +aD +aD +aD +wT +aD +nn +aD +aD +yC +aD +aD +aD +nn +nn +fK +fK +fK +fK +VN +"} +(16,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +nn +nn +wT +wT +nn +pn +fm +fm +aD +aD +aD +yC +aD +aD +aD +aZ +tw +PM +Ik +uk +uk +uk +aj +tw +PM +PX +Rl +yC +yC +yC +aD +aD +pn +aD +aD +yC +yC +yC +aD +yC +aD +aD +Fm +fm +aD +yC +CH +aD +aD +aD +aD +Fm +iT +aD +aD +aD +aD +nn +nn +aD +nn +nn +fK +fK +fK +fK +VN +"} +(17,1,1) = {" +VN +fK +fK +fK +fK +LN +LN +yC +nn +nn +RL +oy +nn +aD +Fm +nK +CH +fm +yC +yC +aD +aD +aD +aZ +tw +PM +Sm +uk +uk +uk +aj +tw +PM +PX +rW +yC +yC +aD +aD +aD +Fm +pn +aD +aD +yC +aD +aD +aD +aD +aD +fm +fm +aD +nn +aD +aD +aD +nn +aD +fm +fm +aD +aD +Lx +Lx +Lx +Lx +Lx +zX +aD +fK +fK +fK +fK +VN +"} +(18,1,1) = {" +VN +fK +fK +fK +yC +yC +AP +iT +aD +aD +iT +aD +aD +pn +JD +aD +pn +Fm +iT +aD +yC +yC +aD +kG +PX +PX +Sm +uk +Jv +YH +aj +PM +tw +wq +aD +yC +aD +aD +aD +nn +CH +CH +aD +aD +aD +aD +aD +Fm +aD +nn +nn +aD +aD +aD +aD +nn +nn +aD +aD +aD +aD +aD +fm +Lx +gT +lQ +Lx +Lx +Lx +aD +fK +fK +fK +fK +VN +"} +(19,1,1) = {" +VN +fK +fK +fK +yC +yC +yC +aD +nn +nn +CH +aD +fm +aD +aD +aD +xE +iT +pn +aD +yC +yC +KE +KE +SP +PX +BR +uk +uk +uk +aj +PM +tw +Zk +Mh +aD +aD +aD +aD +aD +CH +nn +aD +aD +Fm +pn +aD +aD +aD +aD +aD +aD +iy +wT +aD +nn +kq +sx +kq +aD +sx +Az +sx +Lx +Lx +Lx +Lx +Lx +Lx +aD +fK +fK +fK +fK +VN +"} +(20,1,1) = {" +VN +fK +fK +fK +yC +yC +yC +aD +nn +nn +aD +fm +fm +fm +aD +nn +nn +aD +aD +aD +iy +iT +aD +KE +kG +PX +PM +bI +uk +uk +aj +PM +tw +lf +yC +yC +yC +CH +nn +aD +aD +bG +aD +nn +pn +aD +aD +yC +yC +yC +aD +aD +fm +Az +sx +Vt +PX +PX +PX +ic +PX +PM +PX +Lx +Lx +Lx +Lx +Lx +Lx +aD +fK +fK +fK +fK +VN +"} +(21,1,1) = {" +VN +fK +fK +fK +yr +fm +aD +aD +nn +nn +kd +yC +Jr +fm +fm +nn +nn +aD +fm +fm +iT +aD +aD +yC +aZ +PX +PM +vN +YH +uk +aj +PM +PX +Rl +LN +yC +aD +aD +aD +aD +yC +aD +aD +yC +aD +yC +yC +yC +yC +yC +yC +aD +fa +PX +PX +rW +YF +NG +PX +PX +PX +PX +wq +Lx +Lx +Lx +Lx +Lx +Lx +nn +fK +fK +fK +fK +VN +"} +(22,1,1) = {" +VN +fK +fK +fK +yC +aD +nn +aD +aD +aD +yC +yC +yC +aD +Jr +aD +aD +pn +Fm +fm +pn +aD +nn +yC +aZ +PM +PM +vN +Jw +uk +aj +PX +PX +lF +LN +LN +nn +nn +aD +aD +aD +aD +aD +aD +nn +nn +nn +AP +yC +yC +yC +PA +PM +PX +wq +yC +aD +aD +cL +YF +YF +bd +fm +Lx +Dk +Lx +od +Lx +Lx +nn +fK +fK +fK +fK +VN +"} +(23,1,1) = {" +VN +fK +fK +fK +fm +fm +nn +Fm +yC +yC +yC +yC +yC +nn +nn +aD +aD +pn +fm +nn +nn +nn +aD +fm +fm +ce +PM +cZ +Jw +YH +aj +tw +PX +PX +Zk +aD +nn +nn +nn +aD +aD +Jr +nn +aD +nn +nn +nn +aD +yC +sx +Vt +PX +PX +Be +aD +yC +aD +aD +aD +aD +aD +aD +aD +Lx +Lx +Lx +Lx +Lx +AM +nn +fK +fK +fK +fK +VN +"} +(24,1,1) = {" +VN +fK +fK +fK +Fm +fm +aD +aD +yC +yC +yC +yC +yC +nn +nn +nn +nn +aD +aD +yC +yC +yC +aD +Mh +fm +hH +PX +PM +cZ +uk +uk +ep +PM +PX +Bn +aD +nn +nn +nn +nn +aD +aD +aD +yC +aD +aD +aD +aD +Vt +PX +rW +bd +bd +aD +yC +yC +yC +aD +aD +aD +fm +pn +aD +aD +aD +nn +nn +nn +aD +nn +fK +fK +fK +fK +VN +"} +(25,1,1) = {" +VN +fK +fK +fK +iT +aD +RL +pn +nn +yC +yC +AP +nn +nn +aD +aD +aD +Fm +yC +yC +oT +yC +yC +aD +yC +aZ +PX +PM +PX +nE +uk +uk +ep +PX +PX +Ib +yC +yC +nn +nn +aD +aD +aD +aD +pn +pn +nn +aD +aD +YF +aD +yC +yC +yC +yC +yC +yC +yC +nn +aD +Fm +iT +aD +yC +aD +pn +fm +fm +aD +aD +fK +fK +fK +fK +VN +"} +(26,1,1) = {" +VN +fK +fK +aD +aD +aD +iT +aD +nn +yC +yC +yC +nn +aD +aD +iy +aD +aD +aD +yC +oT +yC +aD +aD +yC +yC +SP +PX +tw +PM +BR +uk +ph +tw +PX +rW +yC +yC +yC +nn +aD +nn +aD +aD +aD +Fm +pn +aD +aD +yC +aD +yC +yC +yC +yC +yC +yC +yC +nn +aD +iT +nn +aD +aD +aD +nn +iy +fm +aD +fK +fK +fK +fK +fK +VN +"} +(27,1,1) = {" +VN +fK +fK +aD +nn +nn +pn +aD +nn +nn +nn +yC +nn +aD +aD +aD +aD +aD +aD +aD +AP +fm +yC +aD +CH +KE +KE +SP +PX +PM +PX +sq +PX +PX +Es +aD +yC +yC +yC +aD +aD +aD +aD +aD +aD +pn +aD +aD +yC +aD +aD +nn +nn +nn +yC +yC +yC +rx +wT +pn +aD +aD +aD +aD +pn +iT +iT +nn +nn +fK +fK +fK +fK +fK +VN +"} +(28,1,1) = {" +VN +fK +fK +CH +nn +nn +Fm +fm +aD +nn +rx +aD +aD +nn +aD +nn +nn +nn +aD +fm +fm +yC +yC +yC +aD +aD +yC +kG +PX +tw +PX +sq +tw +PX +Zk +aD +yC +yC +aD +aD +aD +Fm +aD +aD +nn +nn +aD +aD +aD +aD +nn +iy +aD +aD +nn +yC +nn +wT +nn +aD +aD +aD +aD +aD +pn +Fm +iT +aD +aD +fK +fK +fK +fK +fK +VN +"} +(29,1,1) = {" +VN +fK +fK +CH +nn +nn +fm +pn +fm +fm +aD +aD +aD +aD +Fm +nn +nn +nn +nn +aD +aD +aD +yC +yC +aD +yC +yC +yC +rj +PX +tw +uN +PM +Co +KE +aD +aD +yC +aD +aD +aD +aD +aD +aD +yC +yC +yC +aD +aD +aD +iT +aD +aD +Fm +aD +aD +nn +aD +aD +aD +Fm +aD +aD +yC +aD +fm +fm +aD +fK +fK +fK +fK +fK +fK +VN +"} +(30,1,1) = {" +VN +fK +fK +CH +CH +aD +aD +nn +iT +Fm +fm +aD +aD +aD +iT +nn +nn +nn +fm +pn +nn +aD +aD +yC +aD +aD +yC +aD +Vt +PX +PX +uN +PM +Se +yC +yC +aD +aD +aD +nn +nn +aD +yC +yC +yr +yC +yC +aD +aD +aD +kd +iT +aD +aD +aD +fm +fm +aD +nn +aD +aD +aD +yC +yC +aD +aD +aD +aD +aD +aD +fK +fK +fK +fK +VN +"} +(31,1,1) = {" +VN +fK +fK +CH +aD +aD +aD +aD +aD +iT +aD +nn +nn +nn +aD +aD +aD +aD +kd +fm +nn +aD +aD +iT +yC +aD +aD +yC +aZ +tw +PM +uN +PM +PX +Zk +yC +aD +aD +aD +nn +nn +aD +aD +yC +yC +yC +yC +yC +aD +nn +nn +nn +nn +aD +aD +aD +Fm +iT +aD +aD +yC +yC +yC +yC +yC +yC +aD +pn +pn +nn +fK +fK +fK +fK +VN +"} +(32,1,1) = {" +VN +fK +fK +fK +aD +fm +nn +nn +nn +aD +aD +nn +RL +nn +CH +aD +aD +aD +fm +fm +aD +aD +iT +Fm +pn +aD +yC +yC +aZ +PX +PM +Js +tw +PX +Bn +aD +aD +aD +aD +nn +nn +aD +nn +nn +Fm +yC +yC +aD +aD +nn +nn +nn +nn +aD +aD +nn +fm +aD +yC +AP +yC +yC +yC +yC +yC +yC +Gt +nn +Jr +fm +fK +fK +fK +fK +VN +"} +(33,1,1) = {" +VN +fK +fK +fK +aD +iy +wT +nn +nn +pn +aD +aD +iT +aD +aD +yC +nn +nn +nn +aD +aD +aD +nn +iT +aD +aD +aD +yC +aZ +PX +PX +Yw +PX +tw +PX +Zk +yC +aD +aD +RL +yC +aD +aD +aD +nn +nn +nn +kd +aD +aD +No +nn +aD +aD +aD +aD +aD +aD +yC +yC +yC +yC +yC +yC +yC +AP +wT +nn +fm +aD +fK +fK +fK +fK +VN +"} +(34,1,1) = {" +VN +fK +fK +fK +aD +nn +fm +aD +aD +Fm +bG +aD +nn +nn +nn +rx +yC +yC +yC +nn +aD +aD +aD +aD +nn +nn +nn +Mh +hH +PX +PX +bI +ep +tw +PM +Zk +yC +yC +aD +yC +aD +aD +aD +aD +aD +aD +aD +aD +aD +aD +iy +dk +nn +aD +kd +nn +aD +aD +yC +LN +yC +dk +yC +yC +yC +oT +nn +nn +aD +nn +fK +fK +fK +fK +VN +"} +(35,1,1) = {" +VN +fK +fK +fK +aD +aD +aD +aD +aD +pn +pn +yC +yC +yC +yC +nn +yC +yC +yC +nn +RL +aD +aD +aD +yC +yC +yC +fm +hH +PX +tw +bI +ph +PX +PM +Zk +yC +aD +aD +aD +aD +yC +aD +aD +nn +aD +aD +aD +aD +aD +yC +yC +nn +aD +aD +aD +aD +Gt +nn +rx +LN +yC +yC +yC +yC +yC +nn +nn +aD +fK +fK +fK +fK +fK +VN +"} +(36,1,1) = {" +VN +fK +fK +aD +yC +aD +kd +aD +aD +aD +pn +yC +yC +yC +yC +nn +yC +yC +yC +aD +iT +aD +Fm +yC +yC +yC +LN +fm +we +PM +tw +uN +PM +PX +PM +rW +aD +aD +nn +nn +nn +aD +aD +kd +aD +aD +aD +rx +nn +nn +yC +yC +nn +aD +iT +iT +aD +pn +nn +nn +yC +nn +yC +yC +AP +nn +nn +aD +aD +fK +fK +fK +fK +fK +VN +"} +(37,1,1) = {" +VN +fK +fK +yC +yC +yC +yC +aD +yC +aD +Fm +pn +aD +aD +aD +yC +aD +nn +nn +nn +aD +aD +aD +aD +yC +yC +yC +hH +PX +PM +PX +uN +PM +PX +Es +aD +Mh +fm +yC +yC +nn +nn +nn +aD +aD +aD +aD +nn +nn +yC +yC +yC +yC +yC +rx +iT +aD +aD +pn +iT +aD +RL +yC +yC +yC +nn +aD +pn +fm +fK +fK +fK +fK +fK +VN +"} +(38,1,1) = {" +VN +fK +fK +yC +LN +LN +yC +aD +yC +aD +pn +pn +aD +aD +aD +aD +Fm +fm +aD +aD +iy +fm +aD +aD +aD +yC +aD +Vt +PX +PX +XP +aj +PM +PX +QM +rO +Mh +aD +yC +yC +yC +aD +aD +aD +aD +aD +yC +yC +yC +yC +yC +yC +yC +yC +iT +aD +aD +iy +aD +aD +aD +iT +aD +nn +nn +nn +aD +pn +kd +fK +fK +fK +fK +fK +VN +"} +(39,1,1) = {" +VN +fK +fK +yC +AP +LN +LN +aD +yC +yC +RL +pn +nn +aD +aD +nn +fm +fm +aD +aD +fm +fm +aD +aD +Jr +fm +aD +yC +IC +PX +SK +bI +ep +PX +PX +PX +Zk +yC +yC +yC +yC +yC +aD +nn +kd +aD +yC +yC +AP +yC +yC +yC +yC +yC +aD +aD +aD +iT +iT +aD +aD +aD +aD +iT +iT +aD +aD +aD +iT +fK +fK +fK +fK +fK +VN +"} +(40,1,1) = {" +VN +fK +fK +yC +yC +yC +kd +nn +yC +yC +nn +aD +nn +aD +fm +fm +aD +aD +nn +nn +aD +aD +nn +aD +fm +aD +yC +yC +aZ +PX +PX +bI +zb +PM +PX +PX +Zk +fm +yC +yC +yC +aD +iT +aD +aD +aD +aD +yC +iT +yC +yC +yC +AP +yC +aD +aD +aD +rx +nn +nn +aD +nn +pn +kd +iT +aD +aD +aD +aD +fK +fK +fK +fK +fK +VN +"} +(41,1,1) = {" +VN +fK +aD +yC +yC +yC +aD +nn +yC +yC +nn +aD +aD +aD +Fm +yC +yC +aD +nn +nn +Fm +fm +aD +aD +KE +aD +aD +yC +aZ +PX +PM +BR +YH +vF +PM +PX +Bn +aD +aD +yC +nn +nn +Fm +iT +CH +aD +aD +aD +aD +iT +yC +yC +yC +aD +aD +nn +nn +nn +nn +nn +aD +aD +pn +pn +aD +nn +aD +aD +fK +fK +fK +fK +fK +fK +VN +"} +(42,1,1) = {" +VN +fK +yC +yC +RL +aD +aD +nn +yC +oT +nn +aD +aD +aD +yC +yC +yr +aD +aD +aD +aD +aD +aD +fm +fm +aD +aD +RY +kG +PX +PM +PX +bI +Jw +vF +PM +PX +Zk +yC +aD +nn +nn +iT +iy +iT +nn +aD +nn +pn +Fm +yC +yC +yC +aD +aD +aD +aD +nn +nn +iT +aD +aD +aD +yC +yC +aD +aD +fK +fK +fK +fK +fK +fK +fK +VN +"} +(43,1,1) = {" +VN +fK +yC +yC +Gt +aD +aD +nn +nn +AP +nn +aD +Jr +aD +aD +aD +aD +aD +nn +nn +nn +aD +aD +Jr +oT +aD +KE +RY +eE +PX +PM +PM +bI +YH +sZ +PM +PX +Zk +yC +aD +nn +aD +aD +iT +aD +aD +aD +nn +pn +iT +iT +yC +aD +aD +aD +rx +iT +aD +iy +iT +aD +pn +yC +dk +yC +yC +CH +fK +fK +fK +fK +fK +fK +fK +VN +"} +(44,1,1) = {" +VN +fK +fK +aD +nn +aD +nn +nn +yC +oT +yC +nn +aD +aD +aD +fm +fm +aD +nn +nn +nn +nn +aD +oT +yC +nn +aD +KE +Qh +PX +PX +PX +Sm +uk +DM +PX +tw +Zk +yC +aD +nn +aD +nn +nn +nn +aD +yC +aD +aD +pn +pn +aD +aD +aD +aD +iT +aD +aD +aD +aD +aD +kd +yC +yC +yC +yC +CH +fK +fK +fK +fK +fK +fK +fK +VN +"} +(45,1,1) = {" +VN +fK +fK +aD +aD +Jr +Gt +nn +yC +yC +yC +nn +aD +aD +fm +Fm +fm +yC +yC +yC +rx +wT +yC +yC +yC +nn +aD +aZ +PM +PX +KR +TF +YH +aj +tw +PX +PM +rW +CH +aD +yC +yC +yC +aD +aD +aD +aD +pn +aD +aD +Jr +iT +nn +nn +aD +yC +aD +yC +yC +aD +yC +yC +yC +AP +dk +yC +CH +fK +fK +fK +fK +fK +fK +fK +VN +"} +(46,1,1) = {" +VN +fK +fK +fK +nn +aD +aD +nn +yC +AP +yC +aD +aD +wT +fm +oT +oT +yC +yC +yC +nn +nn +aD +yC +yC +nn +KE +aZ +PX +PX +tw +Sm +uk +aj +tw +PX +wq +aD +aD +aD +yC +yC +yC +yC +aD +nn +aD +kd +nn +aD +pn +aD +aD +pn +aD +aD +yC +yC +yC +yC +yC +yC +yC +yC +yC +yC +aD +fK +fK +fK +fK +fK +fK +fK +VN +"} +(47,1,1) = {" +VN +fK +fK +fK +nn +aD +nn +aD +nn +aD +aD +aD +aD +yC +yC +yC +yC +yC +yC +yC +aD +aD +Fm +aD +aD +bG +aD +Vt +PX +PM +Ik +uk +uk +ph +PX +Es +yC +iT +iy +yC +aD +yC +aD +Fm +av +aD +pn +pn +pn +nn +aD +aD +iT +iT +pn +nn +nn +nn +rx +nn +yC +yC +yC +yC +yC +yC +iT +fK +fK +fK +fK +fK +fK +fK +VN +"} +(48,1,1) = {" +VN +fK +fK +fK +nn +aD +aD +kd +pn +aD +aD +aD +rx +nn +nn +AP +yC +yC +yC +oT +yC +aD +aD +nn +nn +aD +yC +PA +PX +Ik +uk +uk +aj +PX +PX +Zk +yC +aD +iT +yC +yC +yC +aD +iT +pn +nn +aD +aD +nn +aD +aD +nn +aD +Fm +iT +aD +aD +aD +fm +fm +nn +nn +yC +yC +yC +AP +iT +fK +fK +fK +fK +fK +fK +fK +VN +"} +(49,1,1) = {" +VN +fK +fK +CH +nn +aD +pn +pn +aD +aD +nn +aD +pn +aD +nn +nn +yC +yC +yC +Fm +fm +fm +aD +aD +aD +yC +aZ +PX +PX +bI +uk +YH +aj +PM +FC +aD +aD +aD +aD +yC +aD +yC +yC +yC +aD +aD +aD +nn +aD +aD +aD +aD +pn +iT +aD +aD +aD +yC +CH +aD +aD +nn +nn +yC +aD +iT +pn +fK +fK +fK +fK +fK +fK +fK +VN +"} +(50,1,1) = {" +VN +fK +fK +nn +aD +aD +aD +yC +yC +CH +aD +nn +aD +aD +aD +pn +nn +nn +nn +fm +fm +aD +aD +aD +Fm +yC +aZ +PX +PM +bI +uk +uk +ph +PM +Zk +yC +Mh +fm +aD +yC +aD +yC +yC +yC +aD +yC +aD +aD +yC +aD +Mh +fm +aD +pn +aD +aD +yr +yC +aD +pn +pn +aD +nn +nn +nn +aD +aD +aD +fK +fK +fK +fK +fK +fK +VN +"} +(51,1,1) = {" +VN +fK +fK +No +aD +aD +nn +yC +AP +aD +aD +aD +iT +aD +aD +iy +pn +aD +aD +aD +aD +nn +aD +aD +yC +yC +aZ +PX +PM +bI +uk +aj +PX +PX +Zk +yC +fm +fm +fm +aD +KE +yC +yC +yC +aD +nn +Jr +yC +yC +yC +fm +fm +Mh +Jr +yC +aD +yC +yC +LN +fm +kd +fm +aD +kd +aD +aD +aD +aD +fK +fK +fK +fK +fK +fK +VN +"} +(52,1,1) = {" +VN +fK +fK +nn +aD +aD +nn +nn +nn +aD +aD +aD +Fm +Gt +nn +nn +aD +aD +nn +aD +HT +aD +aD +iT +aD +yC +aZ +PX +PM +bI +uk +aj +tw +PX +DT +vS +rO +rO +rO +sx +aD +KE +KE +aD +KE +sx +sx +vS +vS +vS +rO +uA +fm +aD +yC +aD +yC +yC +nn +fm +fm +aD +aD +aD +nn +pn +nn +fm +nn +fK +fK +fK +fK +fK +VN +"} +(53,1,1) = {" +VN +fK +fK +nn +nn +RL +aD +aD +aD +aD +aD +aD +aD +yC +nn +nn +nn +aD +Jr +HT +yC +yC +aD +Fm +iT +yC +aZ +PX +PX +bI +uk +aj +PX +PM +PM +PM +tw +tw +tw +PX +Se +kM +kM +aD +PA +PX +tw +PX +PM +tw +PX +PX +lF +vS +yC +yC +KE +aD +bG +aD +aD +nn +aD +aD +aD +aD +RL +fm +nn +fK +fK +fK +fK +fK +VN +"} +(54,1,1) = {" +VN +fK +fK +fK +nn +nn +aD +Fm +CH +bG +aD +HT +HT +HT +aD +HT +aD +HT +aD +aD +yC +yC +fm +fm +fm +aD +Vt +PM +tw +BR +uk +uk +An +An +ep +PX +PX +PM +PM +PX +PX +PX +PX +fZ +PM +PX +PX +PM +PM +PM +PX +PX +PX +PX +QM +vS +sx +KE +yC +KE +aD +nn +aD +nn +fm +aD +fm +nn +nn +nn +fK +fK +fK +fK +VN +"} +(55,1,1) = {" +VN +fK +fK +fK +nn +nn +aD +aD +iT +aD +HT +HT +HT +HT +HT +aD +yC +aD +aD +nn +aD +aD +yC +aD +aD +fm +hH +PX +PX +PM +jc +uk +uk +uk +uk +An +oJ +TF +TF +vF +PM +PM +tw +PX +tw +PX +Ik +An +An +ep +PM +PX +tw +tw +PM +PM +PX +xw +aD +KE +yC +nn +aD +aD +kd +fm +CH +No +nn +nn +fK +fK +fK +fK +VN +"} +(56,1,1) = {" +VN +fK +fK +fK +fK +aD +aD +aD +Fm +iT +HT +HT +HT +HT +HT +HT +aD +aD +Fm +fm +aD +nn +aD +nn +aD +fm +fm +tM +PX +PX +br +YH +uk +uk +Jv +uk +uk +YH +YH +sZ +PM +PM +PX +SK +Ik +An +uk +uk +uk +uk +oJ +ep +tw +tw +tw +PX +PM +Zk +yC +yC +aD +KE +aD +aD +fm +No +CH +CH +fK +fK +fK +fK +fK +fK +VN +"} +(57,1,1) = {" +VN +fK +fK +fK +fK +yC +yC +yC +aD +HT +HT +HT +zr +HT +HT +HT +aD +aD +fm +fm +fm +aD +aD +iT +fm +aD +fm +Mh +rj +PX +cZ +lN +YH +uk +uk +uk +uk +uk +uk +YH +oJ +oJ +An +An +uk +uk +uk +uk +uk +uk +uk +uk +An +ep +PM +PX +PM +QM +yC +yC +aD +nn +nn +nn +aD +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(58,1,1) = {" +VN +fK +fK +fK +fK +yC +yC +yr +aD +aD +HT +HT +HT +HT +HT +HT +aD +aD +nn +nn +aD +nn +iT +iy +fm +aD +yC +yC +Vt +PX +PX +PM +nE +jq +jq +jq +jq +jq +uk +uk +uk +jq +uk +uk +uk +uk +jq +tZ +tZ +jq +uk +uk +uk +uk +ep +PX +NY +tw +rW +aD +aD +nn +nn +nn +aD +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(59,1,1) = {" +VN +fK +fK +fK +fK +yC +yC +yC +yC +yC +aD +HT +HT +HT +HT +aD +aD +aD +yC +AP +yC +nn +aD +iT +aD +nn +yC +yC +aD +rj +PX +PM +PM +PX +PM +PM +PM +tw +BR +uk +aj +st +bI +uk +jq +ph +PX +tw +PM +PM +BR +uk +uk +uk +aj +PM +PX +PM +Bn +yC +CH +CH +CH +aD +nn +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(60,1,1) = {" +VN +fK +fK +fK +fK +AP +LN +yC +yC +oT +HT +HT +aD +pn +pn +HT +aD +yC +yC +yC +yC +nn +Fm +aD +nn +nn +yC +yC +nn +aD +rj +PX +PX +SW +PM +PM +PM +PM +PX +BR +jq +Rs +tZ +ph +PX +PX +PX +PM +tw +PX +PM +vN +YH +uk +uk +IQ +PM +PX +PM +Zk +dk +dk +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(61,1,1) = {" +VN +fK +fK +fK +fK +fm +aD +yC +oT +Fm +iT +aD +nn +pn +aD +aD +aD +yr +yC +yC +yC +nn +fm +aD +nn +nn +nn +AP +yC +yC +aD +QA +QA +kG +PX +PM +tw +PX +NY +PX +PM +PM +PM +PX +PX +PX +PX +PX +wq +IC +PM +vN +Jw +uk +uk +kj +PM +PX +PX +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(62,1,1) = {" +VN +fK +fK +fK +fK +CH +aD +aD +aD +aD +aD +iy +iT +aD +HT +yC +fm +fm +fm +aD +aD +pn +fm +aD +aD +nn +nn +yC +yC +yC +iT +aD +KE +KE +bd +bd +YY +IC +PM +PM +PX +PX +PX +Es +YY +YY +bd +bd +aD +aZ +PM +cZ +or +YH +uk +uk +An +vF +PX +SK +SK +bU +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(63,1,1) = {" +VN +fK +fK +fK +fK +fK +nn +aD +aD +yC +yC +yC +yC +Fm +aD +aD +aD +nn +AP +aD +aD +pn +Fm +iT +CH +aD +nn +nn +nn +RL +nn +aD +yC +yC +yC +nn +yC +yC +bd +YY +YY +YY +cL +yC +yC +yC +yC +aD +KE +kG +PX +PM +PM +Sm +uk +uk +uk +kj +PM +PX +BS +JF +cS +JF +JF +JF +JF +JF +fK +fK +fK +fK +fK +fK +VN +"} +(64,1,1) = {" +VN +fK +fK +fK +fK +fK +nn +aD +aD +yC +yC +yC +aD +nn +nn +nn +fm +aD +nn +aD +yC +aD +iT +fm +nn +aD +aD +aD +aD +yC +aD +aD +yC +yC +aD +nn +yC +yC +aD +yC +yC +yC +fm +fm +Mh +fm +aD +KE +KE +KE +rj +PX +PX +BR +jq +jq +jq +uk +An +An +uk +uk +uk +uk +JF +JF +JF +JF +fK +fK +fK +fK +fK +fK +VN +"} +(65,1,1) = {" +VN +fK +fK +fK +fK +fK +nn +aD +aD +aD +AP +iT +aD +nn +nn +nn +Fm +iT +nn +yC +yC +yC +yC +aD +aD +fm +fm +fm +aD +aD +aD +fm +nn +nn +aD +aD +aD +aD +Fm +fm +fm +fm +yC +yC +aD +Jr +fm +aD +aD +yC +aZ +PM +PX +PM +PM +PX +PX +bI +uk +uk +uk +uk +uk +YH +JF +JF +EW +JF +JF +JF +JF +fK +fK +fK +VN +"} +(66,1,1) = {" +VN +fK +fK +fK +fK +fK +RL +Gt +aD +aD +iT +aD +pn +nn +nn +nn +iT +fm +nn +yC +yC +yC +yC +aD +aD +aD +Fm +nn +nn +nn +aD +aD +Fm +fm +aD +nn +nn +fm +fm +fm +aD +fm +yC +yC +aD +aD +uh +yC +CH +yC +yC +fK +PX +PX +PX +PX +tw +BR +uk +YH +YH +uk +uk +uk +uk +uk +JF +JF +JF +EW +JF +fK +fK +fK +VN +"} +(67,1,1) = {" +VN +fK +fK +fK +fK +fK +wT +nn +aD +CH +aD +aD +iy +fm +aD +nn +yC +nn +yC +yC +yC +AP +yC +yC +nn +aD +fm +nn +nn +nn +aD +aD +fm +fm +aD +Fm +aD +aD +aD +nn +nn +aD +aD +aD +Fm +fm +yC +yC +fK +fK +fK +fK +fK +fK +fK +SK +PX +PX +Vi +JF +JF +JF +Jv +uk +uk +uk +YH +YH +uk +uk +uk +JF +fK +fK +VN +"} +(68,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +CH +aD +aD +iT +aD +aD +kd +yC +yC +AP +yC +yC +yC +yC +uh +yC +nn +aD +aD +nn +nn +nn +nn +aD +nn +CH +CH +nn +nn +nn +CH +nn +nn +aD +aD +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +SK +PX +SK +bU +JF +JF +JF +JF +YH +uk +uk +uk +uk +uk +uk +uk +fK +fK +VN +"} +(69,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +nn +aD +nn +rx +iT +aD +aD +yC +yC +LN +yC +yC +dk +yC +yC +yC +nn +aD +aD +nn +RL +nn +nn +aD +aD +No +No +nn +nn +No +CH +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +JF +EW +JF +JF +JF +JF +uk +uk +uk +uk +uk +Jv +uk +uk +fK +VN +"} +(70,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +lh +iT +iT +iT +CH +aD +aD +nn +rx +LN +yC +yC +yC +yC +yC +aD +Fm +aD +aD +CH +CH +aD +aD +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +JF +JF +JF +JF +JF +JF +JF +JF +JF +fK +uk +uk +uk +uk +fK +VN +"} +(71,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +aD +nn +wT +fm +CH +nn +wT +nn +nn +aD +aD +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +cS +JF +JF +JF +JF +fK +fK +fK +fK +fK +fK +VN +"} +(72,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(73,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(74,1,1) = {" +VN +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +VN +"} +(75,1,1) = {" +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +VN +"} diff --git a/_maps/virtual_domains/island_brawl.dmm b/_maps/virtual_domains/island_brawl.dmm index c9010062f54b1..62a63f81bab2e 100644 --- a/_maps/virtual_domains/island_brawl.dmm +++ b/_maps/virtual_domains/island_brawl.dmm @@ -3416,7 +3416,7 @@ /turf/open/floor/wood/parquet, /area/virtual_domain) "QX" = ( -/obj/machinery/vending/boozeomat/all_access{ +/obj/machinery/vending/boozeomat{ 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." }, /turf/open/floor/wood/large, @@ -3808,7 +3808,7 @@ /turf/open/floor/iron/dark/diagonal, /area/virtual_domain) "Uk" = ( -/obj/machinery/vending/autodrobe/all_access, +/obj/machinery/vending/autodrobe, /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) "Um" = ( diff --git a/_maps/virtual_domains/meta_central.dmm b/_maps/virtual_domains/meta_central.dmm new file mode 100644 index 0000000000000..2fc87ae17c818 --- /dev/null +++ b/_maps/virtual_domains/meta_central.dmm @@ -0,0 +1,8434 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ab" = ( +/obj/machinery/newscaster/directional/west, +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = -4 + }, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/carpet, +/area/virtual_domain) +"ac" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Command Hallway" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ai" = ( +/obj/structure/broken_flooring/corner/always_floorplane/directional/south, +/turf/open/floor/plating, +/area/virtual_domain) +"an" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Showroom Shutters" + }, +/turf/open/floor/plating, +/area/virtual_domain) +"as" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Showroom Shutters" + }, +/turf/open/floor/plating, +/area/virtual_domain) +"at" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/item/storage/box/mothic_rations{ + pixel_y = -9; + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"au" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/toy/figure/detective{ + pixel_y = 13 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"av" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"aw" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Head of Personnel's Desk"; + req_access = list("hop") + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "hop"; + name = "Privacy Shutters" + }, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ay" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/item/surgicaldrill, +/turf/open/indestructible/meat, +/area/virtual_domain) +"aA" = ( +/obj/item/restraints/legcuffs/beartrap/prearmed, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"aC" = ( +/obj/structure/fluff/paper/stack, +/turf/open/floor/iron, +/area/virtual_domain) +"aO" = ( +/obj/structure/toilet{ + pixel_y = 13 + }, +/obj/machinery/light/directional/south, +/obj/machinery/light_switch/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/virtual_domain) +"aQ" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/decal/cleanable/food/egg_smudge, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"aT" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate, +/turf/open/floor/plating, +/area/virtual_domain) +"aV" = ( +/obj/structure/flora/bush/large/style_random, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"aZ" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/decal/cleanable/robot_debris/limb, +/obj/machinery/exoscanner, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron, +/area/virtual_domain) +"ba" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"bb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random/trash, +/turf/open/floor/iron, +/area/virtual_domain) +"bd" = ( +/obj/effect/decal/cleanable/blood{ + icon_state = "floor4" + }, +/turf/open/floor/plating, +/area/virtual_domain) +"bf" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood{ + icon_state = "floor7" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"bg" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/shard{ + icon_state = "medium"; + pixel_x = 9; + pixel_y = 2 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"bl" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"bm" = ( +/obj/item/clothing/mask/surgical, +/obj/effect/mob_spawn/corpse/human/doctor, +/turf/open/indestructible/meat, +/area/virtual_domain) +"br" = ( +/obj/effect/spawner/random/decoration/showcase, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/carpet, +/area/virtual_domain) +"bs" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/item/assembly/flash, +/turf/open/floor/iron, +/area/virtual_domain) +"bu" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/bonfire/prelit, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"bw" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"bO" = ( +/obj/structure/bed/maint, +/obj/item/bedsheet/pirate, +/turf/open/floor/carpet, +/area/virtual_domain) +"bP" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L6" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"bQ" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/ai_module/malf, +/turf/open/floor/iron, +/area/virtual_domain) +"bR" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"bS" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron, +/area/virtual_domain) +"bT" = ( +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/stock_parts/subspace/filter{ + pixel_x = 15 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"bU" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"bW" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"bZ" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/effect/turf_decal/caution/red, +/turf/open/floor/iron, +/area/virtual_domain) +"cj" = ( +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/spider/stickyweb, +/turf/open/floor/iron, +/area/virtual_domain) +"ck" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L3" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "w"; + pixel_y = -15; + pixel_x = -17 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "e"; + pixel_y = -16; + pixel_x = -2 + }, +/obj/effect/decal/cleanable/blood{ + pixel_y = -13 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"cp" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/holosign/barrier, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron, +/area/virtual_domain) +"cr" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/virtual_domain) +"cw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/tank/jetpack/carbondioxide{ + pixel_x = -4; + pixel_y = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"cx" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/kirbyplants/organic/plant16, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"cz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"cB" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/iron, +/area/virtual_domain) +"cC" = ( +/obj/structure/sign/map/left{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-left-MS"; + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"cD" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/wood, +/area/virtual_domain) +"cF" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"cH" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/obj/structure/flora/bush/large/style_random, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"cI" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/shard{ + icon_state = "medium"; + pixel_x = 5; + pixel_y = 7 + }, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron, +/area/virtual_domain) +"cK" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/barricade/sandbags, +/obj/structure/railing, +/turf/open/floor/iron, +/area/virtual_domain) +"cN" = ( +/obj/structure/sign/departments/court/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/barricade/security, +/turf/open/floor/iron, +/area/virtual_domain) +"cO" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/item/trash/fleet_ration, +/obj/effect/decal/cleanable/food/egg_smudge, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"cW" = ( +/obj/structure/alien/weeds, +/turf/open/floor/plating, +/area/virtual_domain) +"cZ" = ( +/obj/machinery/button/door/directional/west{ + name = "Privacy Shutters Control" + }, +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"db" = ( +/turf/open/floor/carpet, +/area/virtual_domain) +"dc" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/virtual_domain) +"dd" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"di" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"dk" = ( +/obj/machinery/button/door/directional/south{ + name = "E.V.A. Storage Shutter Control" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/suit_storage_unit/void_old, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"dl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash, +/turf/open/floor/iron, +/area/virtual_domain) +"dz" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/structure/bed/dogbed/ian, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/wood, +/area/virtual_domain) +"dA" = ( +/obj/structure/holosign/barrier/medical, +/turf/closed/indestructible/fakedoor, +/area/virtual_domain) +"dC" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"dD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/virtual_domain) +"dE" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/virtual_domain) +"dP" = ( +/obj/structure/sign/directions/security{ + dir = 1; + pixel_y = 8 + }, +/obj/structure/sign/directions/engineering{ + dir = 4 + }, +/obj/structure/sign/directions/command{ + pixel_y = -8 + }, +/turf/closed/wall/r_wall, +/area/virtual_domain) +"dU" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/iron, +/area/virtual_domain) +"dX" = ( +/obj/structure/sign/warning/electric_shock/directional/north, +/obj/effect/turf_decal/bot, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/virtual_domain) +"dY" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/banner/medical, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"dZ" = ( +/obj/item/storage/belt/utility, +/obj/item/radio/off, +/obj/item/radio/off, +/obj/item/radio/off, +/obj/structure/rack, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/button/door/directional/south{ + name = "Gateway Shutter Control" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ej" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"ek" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"ep" = ( +/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/virtual_domain) +"er" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"eu" = ( +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"ey" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"ez" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/wrench, +/obj/item/multitool, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/incident_display/delam/directional/south, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"eA" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/bookcase/random, +/obj/machinery/light/broken/directional/west, +/turf/open/floor/iron, +/area/virtual_domain) +"eB" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"eD" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L3" + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron, +/area/virtual_domain) +"eG" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"eN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"eR" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"eV" = ( +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/grenade/chem_grenade/smart_metal_foam{ + pixel_x = 4; + pixel_y = 2 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"eX" = ( +/obj/structure/meateor_fluff/abandoned_headcrab_egg, +/turf/open/indestructible/meat, +/area/virtual_domain) +"eZ" = ( +/obj/structure/meateor_fluff/eyeball, +/obj/effect/mob_spawn/corpse/human/doctor, +/turf/open/indestructible/meat, +/area/virtual_domain) +"fc" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/barricade/sandbags, +/obj/structure/railing, +/turf/open/floor/iron, +/area/virtual_domain) +"fh" = ( +/turf/open/floor/plating, +/area/virtual_domain) +"fj" = ( +/obj/structure/closet/crate/cargo, +/obj/effect/spawner/random/maintenance/no_decals/seven, +/turf/open/floor/iron, +/area/virtual_domain) +"fn" = ( +/obj/item/camera/detective{ + pixel_y = 4; + pixel_x = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"fr" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"fz" = ( +/obj/machinery/pdapainter{ + pixel_y = 2 + }, +/obj/machinery/requests_console/directional/north{ + department = "Head of Personnel's Desk"; + name = "Head of Personnel's Requests Console" + }, +/turf/open/floor/wood, +/area/virtual_domain) +"fB" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/virtual_domain) +"fC" = ( +/obj/structure/rack, +/obj/item/wrench, +/obj/item/screwdriver, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/item/flashlight/flare/candle/infinite{ + pixel_y = 16; + icon_state = "candle2_lit"; + pixel_x = 17 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"fD" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/armory/laser_gun, +/turf/template_noop, +/area/virtual_domain/safehouse) +"fF" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"fG" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar, +/obj/effect/decal/cleanable/glass, +/obj/item/clothing/head/costume/party, +/turf/open/floor/iron, +/area/virtual_domain) +"fK" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/virtual_domain) +"fN" = ( +/obj/structure/sign/directions/science{ + pixel_y = -8 + }, +/obj/structure/sign/directions/medical{ + pixel_y = 8 + }, +/obj/structure/sign/directions/evac, +/turf/closed/wall/r_wall, +/area/virtual_domain) +"fP" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"fQ" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/virtual_domain) +"gb" = ( +/obj/structure/flora/rock/pile/jungle, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"ge" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/obj/structure/flora/tree/jungle/small/style_4, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"gg" = ( +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"gj" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/west, +/turf/open/floor/iron, +/area/virtual_domain) +"gk" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/fluff/paper/stack, +/obj/item/flashlight/lamp/green, +/turf/open/floor/iron, +/area/virtual_domain) +"gt" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"gC" = ( +/obj/item/kirbyplants/synthetic, +/turf/open/floor/plating, +/area/virtual_domain) +"gE" = ( +/turf/open/floor/wood, +/area/virtual_domain) +"gM" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/bodypart/head/robot, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/digital_clock/directional/north, +/obj/item/knife/combat/cyborg{ + pixel_x = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"gU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/carpet, +/area/virtual_domain) +"hb" = ( +/obj/structure/table/wood, +/obj/item/camera{ + pixel_y = 4 + }, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/carpet, +/area/virtual_domain) +"hc" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron, +/area/virtual_domain) +"hd" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"hg" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/holosign/barrier, +/turf/open/floor/iron, +/area/virtual_domain) +"hh" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/carpet, +/area/virtual_domain) +"hi" = ( +/obj/structure/broken_flooring/pile/directional/west, +/obj/structure/holosign/barrier, +/turf/open/floor/plating, +/area/virtual_domain) +"hj" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Command Hallway" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"hp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ht" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L13" + }, +/obj/effect/spawner/random/trash, +/turf/open/floor/iron, +/area/virtual_domain) +"hv" = ( +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/vending/wallmed/directional/west, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/iron, +/area/virtual_domain) +"hw" = ( +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron, +/area/virtual_domain) +"hz" = ( +/obj/structure/reagent_dispensers/wall/virusfood/directional/south, +/obj/structure/meateor_fluff/eyeball, +/turf/open/indestructible/meat, +/area/virtual_domain) +"hF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/iron, +/area/virtual_domain) +"hG" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Gateway Chamber" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"hR" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"hU" = ( +/obj/structure/frame/computer, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"hV" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/closet/crate/secure/syndicrate, +/turf/open/floor/iron, +/area/virtual_domain) +"hX" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"hZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/virtual_domain) +"id" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"ie" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/virtual_domain) +"ii" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/holosign/barrier/atmos, +/turf/open/floor/plating, +/area/virtual_domain) +"il" = ( +/obj/structure/table, +/obj/machinery/newscaster/directional/north, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"im" = ( +/obj/effect/decal/cleanable/blood/gibs/up, +/turf/open/indestructible/meat, +/area/virtual_domain) +"iv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/plating, +/area/virtual_domain) +"ix" = ( +/obj/item/trash/fleet_ration, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"iy" = ( +/obj/machinery/holopad, +/turf/open/floor/iron, +/area/virtual_domain) +"iA" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/bush/large/style_random, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"iH" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/item/trash/can, +/turf/open/floor/carpet, +/area/virtual_domain) +"iI" = ( +/obj/structure/closet/crate, +/obj/item/stack/cable_coil, +/obj/item/crowbar, +/obj/item/screwdriver{ + pixel_y = 16 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"iK" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"iP" = ( +/obj/effect/decal/cleanable/food/flour, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"iQ" = ( +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/structure/table, +/obj/item/stack/sheet/plasteel{ + amount = 10 + }, +/obj/machinery/airalarm/directional/west, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/crowbar, +/obj/item/wrench, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"iY" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/status_display/evac/directional/east, +/obj/item/stock_parts/subspace/crystal{ + pixel_y = -12; + pixel_x = 6 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"iZ" = ( +/obj/item/storage/box/mothic_rations{ + pixel_y = -7 + }, +/obj/effect/decal/cleanable/food/tomato_smudge, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"ja" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"jc" = ( +/obj/item/shard, +/turf/open/floor/carpet, +/area/virtual_domain) +"jd" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/tile/neutral, +/obj/item/chair{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"jh" = ( +/obj/effect/decal/cleanable/oil, +/turf/open/floor/wood, +/area/virtual_domain) +"jk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "E.V.A. Storage" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/virtual_domain) +"jm" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/clothing/mask/facehugger/dead, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"jt" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"jx" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "med" + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"jy" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/computer/old{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/wood, +/area/virtual_domain) +"jz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"jC" = ( +/obj/item/ammo_box/magazine/wt550m9, +/turf/open/floor/plating, +/area/virtual_domain) +"jD" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg/burst, +/turf/open/floor/plating, +/area/virtual_domain) +"jF" = ( +/obj/machinery/holopad/secure, +/obj/item/storage/box/lethalshot{ + pixel_y = 7 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"jG" = ( +/obj/machinery/light_switch/directional/east, +/obj/structure/table/glass, +/obj/item/clothing/head/utility/chefhat{ + pixel_x = 6; + pixel_y = 11 + }, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"jR" = ( +/obj/structure/fluff/paper/stack{ + dir = 8 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/iron, +/area/virtual_domain) +"kc" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/mine/gas/plasma, +/turf/open/floor/wood, +/area/virtual_domain) +"kd" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron, +/area/virtual_domain) +"kg" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/trash/boritos/red, +/turf/open/floor/carpet, +/area/virtual_domain) +"ki" = ( +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = 2 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"km" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"kn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + name = "Vacant Commissary Shutter" + }, +/obj/structure/noticeboard/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"kp" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + name = "Bridge Blast Door" + }, +/turf/open/floor/plating, +/area/virtual_domain) +"kt" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/chair/stool/directional/north, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"kv" = ( +/obj/effect/decal/cleanable/blood{ + icon_state = "floor4-old" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"kx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/alien/weeds, +/turf/open/floor/plating, +/area/virtual_domain) +"kI" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron, +/area/virtual_domain) +"kK" = ( +/obj/structure/sign/directions/command{ + dir = 4; + pixel_y = -8 + }, +/obj/structure/sign/directions/security{ + dir = 1; + pixel_y = 8 + }, +/obj/structure/sign/directions/engineering{ + dir = 4 + }, +/turf/closed/wall, +/area/virtual_domain) +"kM" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood{ + icon_state = "floor4" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"kN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + name = "E.V.A. Storage Shutter" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/virtual_domain) +"kW" = ( +/obj/structure/table, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"lb" = ( +/obj/item/stack/sheet/iron, +/turf/open/floor/iron, +/area/virtual_domain) +"ld" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + name = "Vacant Commissary Shutter" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"lk" = ( +/obj/item/grenade/c4/x4, +/turf/open/floor/plating, +/area/virtual_domain) +"lt" = ( +/obj/machinery/camera/motion/directional/east{ + c_tag = "E.V.A. Storage" + }, +/obj/machinery/requests_console/directional/east{ + department = "EVA"; + name = "EVA Requests Console" + }, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"lu" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"lv" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/pickaxe/rusted, +/turf/open/floor/iron, +/area/virtual_domain) +"lx" = ( +/obj/structure/barricade/sandbags, +/obj/machinery/deployable_turret{ + dir = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"lC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Command Hallway" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"lD" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "E.V.A. Storage" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/iron, +/area/virtual_domain) +"lE" = ( +/obj/structure/sign/departments/science, +/turf/closed/wall, +/area/virtual_domain) +"lG" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"lJ" = ( +/obj/item/tank/internals/oxygen, +/obj/effect/decal/cleanable/glass, +/obj/effect/gibspawner/human, +/turf/open/floor/plating, +/area/virtual_domain) +"lK" = ( +/obj/structure/table/wood, +/obj/structure/sign/picture_frame/showroom/one{ + pixel_x = -8; + pixel_y = 32 + }, +/obj/structure/sign/picture_frame/showroom/two{ + pixel_x = 8; + pixel_y = 32 + }, +/obj/item/ammo_casing/shotgun/buckshot/spent, +/turf/open/floor/wood, +/area/virtual_domain) +"lL" = ( +/obj/structure/table, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/stack/package_wrap, +/obj/item/hand_labeler, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/spawner/directional/south, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"lM" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L6" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "c"; + pixel_x = -11; + pixel_y = 16 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "o"; + pixel_y = 16; + pixel_x = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"lN" = ( +/obj/item/bodybag{ + pixel_y = 5; + pixel_x = -6 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = 9; + pixel_y = -5 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"lQ" = ( +/obj/structure/spacevine{ + can_spread = 0 + }, +/turf/closed/wall, +/area/virtual_domain) +"lT" = ( +/obj/effect/mapping_helpers/broken_floor, +/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/virtual_domain) +"lU" = ( +/obj/structure/fluff/paper/stack, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/plating, +/area/virtual_domain) +"lY" = ( +/obj/machinery/light/directional/east, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"mb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/button/door/directional/south{ + name = "Gateway Shutter Control"; + pixel_y = -34 + }, +/obj/machinery/button/door/directional/south{ + name = "E.V.A. Storage Shutter Control" + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/carpet, +/area/virtual_domain) +"mc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"mf" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L4" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"mi" = ( +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/rack, +/obj/item/storage/briefcase/secure, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"mj" = ( +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = -13; + pixel_y = 8; + icon_state = "candle3_lit" + }, +/turf/open/floor/plating, +/area/virtual_domain) +"mo" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Showroom Shutters" + }, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/virtual_domain) +"mq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"mt" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/virtual_domain) +"mw" = ( +/obj/effect/decal/cleanable/blood/gibs/down, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 6 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"my" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/computer/records/security/laptop/syndie, +/obj/structure/sign/poster/official/state_laws/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"mI" = ( +/obj/structure/bookcase/random, +/turf/open/floor/iron, +/area/virtual_domain) +"mK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"mO" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/obj/structure/flora/bush/large/style_random, +/obj/structure/spacevine{ + can_spread = 0 + }, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"mP" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/ammo_casing/shotgun/buckshot/spent, +/turf/open/floor/carpet, +/area/virtual_domain) +"mQ" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"mR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"mW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"nq" = ( +/obj/effect/mob_spawn/corpse/human/scientist, +/turf/open/misc/dirt/dark/jungle, +/area/virtual_domain) +"nw" = ( +/obj/structure/punji_sticks/spikes, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"ny" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/light/broken/directional/west, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"nz" = ( +/obj/effect/decal/cleanable/glass, +/obj/item/clothing/head/costume/party, +/turf/open/floor/iron, +/area/virtual_domain) +"nO" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/decal/cleanable/glass, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"nP" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/barricade/sandbags, +/obj/structure/railing, +/turf/open/floor/iron, +/area/virtual_domain) +"nS" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"nU" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/sign/departments/aiupload/directional/north, +/obj/effect/decal/cleanable/shreds, +/obj/item/card/emag, +/turf/open/floor/iron, +/area/virtual_domain) +"nW" = ( +/obj/machinery/light_switch{ + pixel_x = 38; + pixel_y = -35 + }, +/obj/machinery/button/flasher{ + pixel_x = 38; + pixel_y = -25 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/bed/maint, +/obj/item/bedsheet/pirate{ + dir = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"nY" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"nZ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/fluff/paper/stack{ + dir = 1 + }, +/obj/item/book, +/turf/open/floor/iron, +/area/virtual_domain) +"od" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/bush/leafy, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"ok" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/item/borg/upgrade/pinpointer, +/turf/open/floor/iron, +/area/virtual_domain) +"ol" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/decal/cleanable/oil{ + icon_state = "floor6" + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/item/modular_computer/laptop{ + icon_state = "laptop"; + pixel_y = 12; + pixel_x = 2 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"on" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/paper/stack, +/turf/open/floor/iron, +/area/virtual_domain) +"oo" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Gateway Maintenance" + }, +/turf/open/floor/plating, +/area/virtual_domain) +"op" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/obj/structure/closet/body_bag, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"oy" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"oA" = ( +/obj/structure/table, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/turf/open/floor/iron, +/area/virtual_domain) +"oD" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"oH" = ( +/obj/structure/sign/plaques/kiddie/perfect_man{ + pixel_y = 32 + }, +/obj/effect/spawner/random/decoration/showcase, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/carpet, +/area/virtual_domain) +"oI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Corporate Showroom" + }, +/turf/open/floor/wood, +/area/virtual_domain) +"oM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet, +/area/virtual_domain) +"oO" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/fullupgrade{ + dir = 8 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"oQ" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"oS" = ( +/obj/structure/barricade/sandbags, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"pb" = ( +/obj/item/radio/intercom/directional/north{ + pixel_y = 34 + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/old, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"pc" = ( +/obj/structure/fluff/paper/stack{ + dir = 9 + }, +/obj/item/book, +/turf/open/floor/iron, +/area/virtual_domain) +"pd" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating, +/area/virtual_domain) +"pr" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/structure/closet/crate/cargo, +/obj/effect/spawner/random/maintenance/no_decals/seven, +/turf/open/floor/iron, +/area/virtual_domain) +"ps" = ( +/turf/closed/wall, +/area/virtual_domain) +"pv" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/item/trash/fleet_ration, +/turf/open/floor/iron, +/area/virtual_domain) +"pA" = ( +/obj/structure/broken_flooring/side/directional/west, +/turf/open/floor/plating, +/area/virtual_domain) +"pB" = ( +/obj/structure/sign/directions/security{ + dir = 1; + pixel_y = 8 + }, +/obj/structure/sign/directions/engineering{ + dir = 4 + }, +/obj/structure/sign/directions/command{ + dir = 1; + pixel_y = -8 + }, +/turf/closed/wall, +/area/virtual_domain) +"pD" = ( +/turf/closed/indestructible/fakedoor/maintenance, +/area/virtual_domain) +"pE" = ( +/obj/structure/fluff/paper/stack{ + dir = 10 + }, +/obj/item/flashlight/lamp/green, +/turf/open/floor/iron, +/area/virtual_domain) +"pI" = ( +/obj/effect/decal/cleanable/xenoblood/xgibs/up, +/obj/structure/alien/weeds, +/turf/open/floor/plating, +/area/virtual_domain) +"pJ" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"pK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/shotgun/buckshot/spent, +/turf/open/floor/wood, +/area/virtual_domain) +"pL" = ( +/obj/item/extinguisher, +/turf/open/floor/plating, +/area/virtual_domain) +"pN" = ( +/obj/structure/meateor_fluff/eyeball, +/turf/open/indestructible/meat, +/area/virtual_domain) +"pO" = ( +/obj/effect/decal/cleanable/robot_debris/old, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/paper/stack{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"pP" = ( +/obj/machinery/button/door/directional/north{ + name = "Privacy Shutters Control" + }, +/obj/machinery/computer/old, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/wood, +/area/virtual_domain) +"pQ" = ( +/obj/machinery/ticket_machine/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"pR" = ( +/obj/structure/broken_flooring/pile/directional/north, +/turf/open/floor/plating, +/area/virtual_domain) +"pT" = ( +/obj/structure/barricade/sandbags, +/obj/machinery/deployable_turret/hmg, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"pV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"pW" = ( +/obj/structure/alien/weeds, +/obj/item/flamethrower/full/tank, +/turf/open/floor/plating, +/area/virtual_domain) +"pX" = ( +/obj/item/photo/old{ + pixel_y = 14 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"qa" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/oil{ + icon_state = "floor5" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"qk" = ( +/obj/structure/chair/comfy/beige, +/turf/open/floor/carpet, +/area/virtual_domain) +"qq" = ( +/obj/structure/broken_flooring/side/directional/west, +/obj/structure/sign/warning/gas_mask/directional/north, +/turf/open/floor/plating, +/area/virtual_domain) +"qr" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/virtual_domain) +"qu" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/chair{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"qv" = ( +/obj/item/kirbyplants/organic/plant21, +/obj/structure/sign/departments/botany/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"qz" = ( +/obj/structure/table/wood, +/obj/machinery/light_switch/directional/west, +/obj/item/storage/briefcase/secure{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/wood, +/area/virtual_domain) +"qI" = ( +/obj/machinery/light/directional/east, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"qJ" = ( +/obj/machinery/light/floor, +/obj/item/stack/sheet/iron, +/turf/open/floor/iron, +/area/virtual_domain) +"qL" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/item/trash/semki/healthy, +/turf/open/floor/iron, +/area/virtual_domain) +"qM" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/obj/item/mop, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"qP" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/turf/open/floor/iron, +/area/virtual_domain) +"qS" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/requests_console/directional/east{ + department = "Captain's Desk"; + name = "Captain's Requests Console" + }, +/obj/structure/frame/computer{ + dir = 8 + }, +/obj/item/shard{ + icon_state = "medium"; + pixel_x = 5 + }, +/obj/item/stack/cable_coil/cut, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/wood, +/area/virtual_domain) +"qY" = ( +/obj/item/reagent_containers/cup/bottle/random_virus, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ra" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L13" + }, +/obj/effect/decal/cleanable/crayon/x{ + pixel_x = -6; + pixel_y = -15 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"rb" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/virtual_domain) +"re" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron, +/area/virtual_domain) +"rf" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/ammo_casing/spent{ + dir = 9 + }, +/obj/item/ammo_casing/spent{ + dir = 10; + pixel_x = -13; + pixel_y = -8 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating, +/area/virtual_domain) +"rh" = ( +/obj/machinery/light/directional/north, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"rj" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"rm" = ( +/obj/structure/lattice, +/obj/effect/decal/cleanable/blood/gibs/torso, +/turf/open/space/basic, +/area/virtual_domain) +"ro" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/virtual_domain) +"rq" = ( +/obj/machinery/vending/cigarette, +/obj/item/gun/ballistic/shotgun/lethal{ + pixel_y = 13 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"rr" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/iron, +/area/virtual_domain) +"rs" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/template_noop, +/area/virtual_domain/safehouse) +"rt" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"rv" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/virtual_domain) +"ry" = ( +/obj/structure/sign/map/left{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-left-MS"; + pixel_y = 32 + }, +/obj/structure/showcase/machinery/tv/broken, +/turf/open/floor/wood, +/area/virtual_domain) +"rz" = ( +/obj/machinery/computer/old{ + dir = 4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"rC" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"rJ" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/carpet, +/area/virtual_domain) +"rO" = ( +/obj/item/disk/nuclear/fake/obvious, +/turf/open/floor/carpet, +/area/virtual_domain) +"rP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/iron, +/area/virtual_domain) +"rQ" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen, +/turf/open/floor/wood, +/area/virtual_domain) +"rW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/wood, +/area/virtual_domain) +"rX" = ( +/obj/machinery/photocopier, +/turf/open/floor/carpet, +/area/virtual_domain) +"sa" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"sc" = ( +/obj/machinery/cell_charger{ + pixel_y = 4 + }, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"se" = ( +/obj/effect/mine/explosive/flame, +/turf/open/floor/carpet, +/area/virtual_domain) +"sf" = ( +/obj/effect/turf_decal/tile/blue, +/obj/structure/flora/rock/icy, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"si" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"sm" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/suit_storage_unit/void_old, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"sr" = ( +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/plating, +/area/virtual_domain) +"ss" = ( +/obj/item/stock_parts/micro_laser/high, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"st" = ( +/obj/item/seeds/coffee, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"sz" = ( +/obj/effect/decal/cleanable/glass, +/obj/structure/safe/floor, +/obj/item/stack/spacecash/c10000, +/obj/item/stack/spacecash/c10000, +/obj/item/stack/spacecash/c10000, +/obj/item/stack/sheet/mineral/gold, +/turf/open/floor/wood, +/area/virtual_domain) +"sA" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/carpet, +/area/virtual_domain) +"sB" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/virtual_domain) +"sF" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/storage/briefcase/lawyer, +/obj/structure/noticeboard/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"sI" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/frame/computer, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"sS" = ( +/obj/structure/lattice, +/obj/structure/marker_beacon/bronze, +/turf/open/space/basic, +/area/virtual_domain) +"sX" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/effect/turf_decal/caution/red, +/obj/item/clothing/suit/caution{ + pixel_y = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"sZ" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/item/banner/science, +/turf/open/floor/iron, +/area/virtual_domain) +"te" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Head of Personnel" + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"tf" = ( +/obj/effect/rune, +/obj/item/knife/envy, +/turf/open/floor/plating, +/area/virtual_domain) +"th" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"tj" = ( +/obj/structure/bed/dogbed/renault, +/mob/living/basic/pet/fox, +/obj/item/stack/spacecash/c1000{ + pixel_y = 15; + pixel_x = 5 + }, +/obj/item/storage/briefcase/secure/syndie{ + pixel_y = 13; + pixel_x = -6 + }, +/obj/item/stack/sheet/mineral/diamond{ + pixel_x = 9; + pixel_y = 9 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"tk" = ( +/obj/machinery/button/door/directional/west{ + id = "bridge blast"; + name = "Bridge Access Blast Door Control" + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"tl" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/resin, +/turf/open/floor/plating, +/area/virtual_domain) +"tn" = ( +/obj/effect/decal/cleanable/xenoblood/xgibs/core, +/obj/structure/alien/weeds, +/turf/open/floor/plating, +/area/virtual_domain) +"to" = ( +/obj/item/boulder{ + pixel_x = 7; + pixel_y = 9 + }, +/obj/item/boulder{ + icon_state = "rock_medium"; + pixel_x = -12; + pixel_y = 8 + }, +/obj/item/boulder{ + icon_state = "boulder_medium"; + pixel_x = -4; + pixel_y = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"tq" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"tu" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"tw" = ( +/obj/structure/flora/rock/pile/jungle, +/obj/effect/mob_spawn/corpse/human/scientist, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"ty" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"tF" = ( +/obj/structure/fluff/paper/stack{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain) +"tI" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/trash/can/food/pine_nuts, +/turf/open/floor/iron, +/area/virtual_domain) +"tM" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/item/crowbar, +/turf/open/floor/iron, +/area/virtual_domain) +"tO" = ( +/obj/structure/sign/directions/evac, +/obj/structure/sign/directions/medical{ + pixel_y = 8 + }, +/obj/structure/sign/directions/science{ + pixel_y = -8 + }, +/turf/closed/wall, +/area/virtual_domain) +"tR" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron, +/area/virtual_domain) +"tS" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron, +/area/virtual_domain) +"tV" = ( +/obj/structure/table/wood, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/folder/blue, +/obj/item/clothing/head/collectable/hop{ + name = "novelty HoP hat" + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"tW" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/mob_spawn/corpse/human/scientist, +/turf/open/misc/dirt/dark/jungle, +/area/virtual_domain) +"ub" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/obj/effect/mine/explosive/flame, +/turf/open/floor/plating, +/area/virtual_domain) +"ud" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/trash/cheesie, +/turf/open/floor/iron, +/area/virtual_domain) +"uf" = ( +/obj/structure/plasticflaps/opaque, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/virtual_domain) +"ug" = ( +/obj/structure/holosign/barrier/wetsign, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"uk" = ( +/obj/structure/marker_beacon/bronze, +/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/virtual_domain) +"ul" = ( +/obj/machinery/door/poddoor/preopen{ + name = "Bridge Blast Door" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Bridge Access" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"up" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"uq" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/tree/jungle/small/style_4, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"ut" = ( +/obj/structure/sign/directions/engineering{ + dir = 4 + }, +/obj/structure/sign/directions/security{ + dir = 1; + pixel_y = 8 + }, +/obj/structure/sign/directions/command{ + dir = 8; + pixel_y = -8 + }, +/turf/closed/wall, +/area/virtual_domain) +"uw" = ( +/obj/item/clothing/shoes/magboots{ + pixel_x = -4; + pixel_y = 3 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ux" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/iron, +/area/virtual_domain) +"uz" = ( +/turf/template_noop, +/area/template_noop) +"uA" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/iron, +/area/virtual_domain) +"uB" = ( +/turf/closed/indestructible/meat, +/area/virtual_domain) +"uD" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/iron, +/area/virtual_domain) +"uH" = ( +/obj/structure/bookcase, +/turf/open/floor/wood, +/area/virtual_domain) +"uP" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/item/radio/intercom/directional/west, +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = 2 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/carpet, +/area/virtual_domain) +"uS" = ( +/turf/closed/wall/r_wall, +/area/virtual_domain) +"uT" = ( +/obj/structure/mop_bucket/janitorialcart{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"uX" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/old, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"uY" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/decal/cleanable/blood, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/exoscanner, +/obj/effect/turf_decal/bot_red, +/turf/open/floor/iron, +/area/virtual_domain) +"vf" = ( +/obj/structure/broken_flooring/corner/directional/east, +/turf/open/floor/plating, +/area/virtual_domain) +"vg" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/chair/pew/right, +/obj/item/reagent_containers/cup/glass/coffee, +/turf/open/floor/iron, +/area/virtual_domain) +"vi" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/book/manual/wiki/detective, +/turf/open/floor/iron, +/area/virtual_domain) +"vn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"vo" = ( +/obj/effect/turf_decal/tile/bar, +/obj/structure/holosign/barrier/engineering, +/turf/open/floor/iron, +/area/virtual_domain) +"vt" = ( +/obj/machinery/bluespace_beacon, +/obj/structure/alien/weeds, +/turf/open/floor/plating, +/area/virtual_domain) +"vw" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"vy" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L12" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"vA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/trash/candle, +/turf/open/floor/plating, +/area/virtual_domain) +"vI" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/button/door/directional/east{ + name = "Teleporter Shutter Control"; + pixel_y = 5 + }, +/obj/structure/alien/weeds, +/turf/open/floor/iron, +/area/virtual_domain) +"vK" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"vM" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"vN" = ( +/obj/structure/broken_flooring/pile/directional/west, +/turf/open/floor/plating, +/area/virtual_domain) +"vO" = ( +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/iron, +/area/virtual_domain) +"vU" = ( +/obj/machinery/recharger, +/turf/open/floor/plating, +/area/virtual_domain) +"vV" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"vW" = ( +/obj/machinery/light/directional/north, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron, +/area/virtual_domain) +"wa" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/trash/popcorn/caramel, +/turf/open/floor/iron, +/area/virtual_domain) +"wi" = ( +/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"wj" = ( +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/iron, +/area/virtual_domain) +"wl" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/rock/pile/jungle, +/obj/structure/flora/bush/leavy/style_3, +/obj/structure/flora/tree/jungle/small/style_2, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"wn" = ( +/obj/machinery/light_switch/directional/south, +/obj/structure/table/wood, +/obj/item/razor{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/glass/flask/gold, +/turf/open/floor/carpet, +/area/virtual_domain) +"wo" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/small/directional/north, +/obj/machinery/coffeemaker/impressa, +/turf/open/floor/wood, +/area/virtual_domain) +"wq" = ( +/obj/structure/reagent_dispensers/wall/virusfood/directional/south, +/obj/item/clothing/mask/surgical, +/obj/structure/meateor_fluff/abandoned_headcrab_egg, +/turf/open/indestructible/meat, +/area/virtual_domain) +"wu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ww" = ( +/obj/item/knife/shiv/plastitanium, +/turf/open/floor/carpet, +/area/virtual_domain) +"wA" = ( +/obj/structure/table/glass, +/obj/structure/safe, +/obj/item/storage/toolbox/guncase/cqc, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"wB" = ( +/obj/structure/sign/directions/command{ + dir = 1; + pixel_y = -8 + }, +/turf/closed/wall/r_wall, +/area/virtual_domain) +"wD" = ( +/obj/machinery/airalarm/directional/north, +/obj/structure/closet/secure_closet/personal, +/obj/effect/spawner/random/bureaucracy/briefcase, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"wH" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron, +/area/virtual_domain) +"wL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/button/door/directional/south{ + name = "Bridge Access Blast Door Control" + }, +/obj/machinery/button/door/directional/south{ + name = "Council Chamber Blast Door Control"; + pixel_y = -34 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"wN" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/plating, +/area/virtual_domain) +"wP" = ( +/obj/structure/sign/directions/medical{ + dir = 8; + pixel_y = 8 + }, +/obj/structure/sign/directions/evac, +/obj/structure/sign/directions/science{ + dir = 4; + pixel_y = -8 + }, +/turf/closed/wall, +/area/virtual_domain) +"wV" = ( +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"wY" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/landmark/bitrunning/cache_spawn, +/obj/machinery/light/broken/directional/north, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"xb" = ( +/obj/structure/sign/map/right{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-right-MS"; + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"xd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"xe" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/dim/directional/east, +/turf/open/floor/plating, +/area/virtual_domain) +"xj" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron, +/area/virtual_domain) +"xu" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"xI" = ( +/obj/item/disk/data{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/item/disk/tech_disk{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/disk/design_disk{ + name = "component design disk"; + pixel_y = 6 + }, +/obj/structure/table/wood, +/obj/item/toy/talking/ai{ + name = "\improper Nanotrasen-brand toy AI"; + pixel_y = 6 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"xK" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron, +/area/virtual_domain) +"xV" = ( +/obj/machinery/button/door/directional/west{ + name = "Council Chamber Blast Door Control" + }, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"xW" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/obj/item/stack/rods, +/turf/open/floor/plating, +/area/virtual_domain) +"yc" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"yh" = ( +/obj/structure/chair/office{ + dir = 1; + pixel_x = -11 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"yn" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "E.V.A. Storage Shutter" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"yq" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_y = 2; + pixel_x = 7 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"yt" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/grille/broken, +/obj/structure/cable, +/turf/open/floor/plating, +/area/virtual_domain) +"yw" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/item/trash/popcorn, +/turf/open/floor/iron, +/area/virtual_domain) +"yx" = ( +/obj/structure/grille/broken, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/obj/effect/mine/explosive/flame, +/turf/open/floor/plating, +/area/virtual_domain) +"yy" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"yz" = ( +/turf/closed/indestructible/fakedoor, +/area/virtual_domain) +"yC" = ( +/obj/structure/showcase/machinery/tv/broken, +/turf/open/floor/carpet, +/area/virtual_domain) +"yD" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"yE" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"yH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"yI" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/bikehorn/rubberducky, +/obj/machinery/light_switch/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/wood, +/area/virtual_domain) +"yK" = ( +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/virtual_domain) +"yM" = ( +/obj/structure/chair/comfy/brown, +/turf/open/floor/wood, +/area/virtual_domain) +"yN" = ( +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/structure/bed/medical/emergency, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/iron, +/area/virtual_domain) +"yO" = ( +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/spacevine{ + can_spread = 0 + }, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"yP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "hop"; + name = "Privacy Shutters" + }, +/turf/open/floor/plating, +/area/virtual_domain) +"yT" = ( +/obj/item/seeds/cucumber, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"zb" = ( +/obj/item/clothing/head/costume/party, +/turf/open/floor/plating, +/area/virtual_domain) +"ze" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"zg" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/table/glass, +/obj/item/stack/medical/gauze, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/suture, +/turf/open/floor/plating, +/area/virtual_domain) +"zj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"zo" = ( +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = -4 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"zq" = ( +/obj/structure/mop_bucket, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"zw" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/trash/ready_donk{ + pixel_y = 10 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"zx" = ( +/obj/structure/grille/broken, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/obj/item/stack/rods, +/turf/open/floor/plating, +/area/virtual_domain) +"zA" = ( +/obj/machinery/firealarm/directional/east, +/obj/structure/table/glass, +/obj/item/papercutter, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"zB" = ( +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/crayon{ + icon_state = "m"; + pixel_y = 17; + pixel_x = -13 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"zE" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"zL" = ( +/obj/item/reagent_containers/cup/bottle/random_virus, +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/indestructible/meat, +/area/virtual_domain) +"zO" = ( +/obj/item/stack/rods/ten, +/turf/open/floor/plating, +/area/virtual_domain) +"zP" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/old, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"zQ" = ( +/obj/item/storage/belt/security/full{ + pixel_x = 8; + pixel_y = -6 + }, +/obj/item/storage/belt/security/full, +/obj/item/storage/belt/security/full{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/structure/table/reinforced, +/turf/template_noop, +/area/virtual_domain/safehouse) +"zR" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"zT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/closet/body_bag, +/turf/open/floor/iron, +/area/virtual_domain) +"Ad" = ( +/obj/item/clothing/head/cone{ + pixel_y = -5; + pixel_x = 7 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Ah" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron, +/area/virtual_domain) +"Ao" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Ar" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent, +/turf/open/floor/plating, +/area/virtual_domain) +"Ax" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/item/radio/off, +/turf/open/floor/iron, +/area/virtual_domain) +"Ay" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/virtual_domain) +"AA" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + dir = 4 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"AC" = ( +/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/virtual_domain) +"AD" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/clothing/head/cone{ + pixel_y = 3; + pixel_x = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"AM" = ( +/obj/structure/fluff/paper/stack{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain) +"AN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/clothing/suit/caution{ + pixel_y = -9 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"AP" = ( +/obj/structure/grille, +/obj/item/shard{ + icon_state = "medium"; + pixel_y = -6 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/virtual_domain) +"AQ" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/ammo_casing/spent{ + dir = 10 + }, +/obj/item/ammo_casing/spent{ + dir = 9; + pixel_x = -19; + pixel_y = -5 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"AR" = ( +/obj/structure/table, +/obj/item/folder/yellow, +/obj/item/storage/medkit/regular{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/iron, +/area/virtual_domain) +"AV" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"AX" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/virtual_domain) +"Bd" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar, +/turf/open/floor/iron, +/area/virtual_domain) +"Bg" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/item/chair, +/turf/open/floor/iron, +/area/virtual_domain) +"Bh" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Bj" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light/broken/directional/south, +/obj/item/stack/rods, +/turf/open/floor/iron, +/area/virtual_domain) +"Bn" = ( +/obj/item/ammo_casing/spent, +/turf/open/floor/plating, +/area/virtual_domain) +"Bp" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/virtual_domain) +"Bt" = ( +/obj/machinery/status_display/ai/directional/north, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Bv" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Bw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"BF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner, +/turf/open/floor/iron, +/area/virtual_domain) +"BJ" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L1" + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"BK" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/machinery/computer/old, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"BM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"BN" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L14" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"BP" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters" + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"BZ" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/meat, +/area/virtual_domain) +"Ca" = ( +/obj/item/gun/ballistic/shotgun/riot{ + pixel_y = 6 + }, +/obj/item/gun/ballistic/shotgun/riot, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Cb" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/virtual_domain) +"Cc" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/leavy/style_2, +/obj/structure/spacevine{ + can_spread = 0 + }, +/obj/structure/flora/bush/large/style_random, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"Cd" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/weeds/node, +/turf/open/floor/plating, +/area/virtual_domain) +"Cg" = ( +/obj/effect/turf_decal/tile/purple, +/obj/item/restraints/legcuffs/beartrap/prearmed, +/turf/open/floor/iron, +/area/virtual_domain) +"Cn" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/closet/crate/cargo, +/obj/effect/spawner/random/maintenance/no_decals/seven, +/turf/open/floor/iron, +/area/virtual_domain) +"Cr" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L10" + }, +/obj/effect/spawner/random/trash/graffiti, +/turf/open/floor/iron, +/area/virtual_domain) +"Cw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/stool/directional/west, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Cx" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = -6 + }, +/obj/machinery/recharger{ + pixel_x = 6 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Cy" = ( +/obj/machinery/light_switch/directional/south, +/obj/effect/spawner/random/vending/colavend, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Cz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/iron, +/area/virtual_domain) +"CA" = ( +/obj/structure/flora/rock/pile/jungle, +/obj/structure/barricade/sandbags, +/turf/open/misc/dirt/dark/jungle, +/area/virtual_domain) +"CC" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating, +/area/virtual_domain) +"CJ" = ( +/obj/structure/holosign/barrier, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron, +/area/virtual_domain) +"CK" = ( +/obj/structure/sign/map/left{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-left-MS"; + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/item/banner/security, +/turf/open/floor/iron, +/area/virtual_domain) +"CL" = ( +/obj/effect/decal/cleanable/blood{ + icon_state = "floor3-old" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"CM" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/iron, +/area/virtual_domain) +"CQ" = ( +/obj/effect/decal/cleanable/xenoblood, +/obj/structure/alien/weeds, +/turf/open/floor/plating, +/area/virtual_domain) +"Dc" = ( +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/clothing/head/cone{ + pixel_y = 3; + pixel_x = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Dk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Dl" = ( +/obj/structure/water_source/puddle, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"Dp" = ( +/obj/structure/chair/sofa/bench/solo, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Dx" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron, +/area/virtual_domain) +"DA" = ( +/obj/item/seeds/cocoapod, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"DC" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/spacevine{ + can_spread = 0 + }, +/obj/structure/flora/bush/large/style_random, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"DF" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/detective_scanner{ + pixel_x = -7; + pixel_y = -6 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"DL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Showroom Shutters" + }, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/virtual_domain) +"DM" = ( +/turf/closed/indestructible/fakedoor/engineering, +/area/virtual_domain) +"DO" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating, +/area/virtual_domain) +"DP" = ( +/obj/machinery/holopad, +/turf/open/floor/carpet, +/area/virtual_domain) +"DQ" = ( +/obj/machinery/power/shieldwallgen, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"DU" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/item/knife/butcher, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"DV" = ( +/turf/open/misc/dirt/dark/jungle, +/area/virtual_domain) +"DW" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 + }, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/iron, +/area/virtual_domain) +"Ec" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/tree/jungle/small/style_5, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"Ed" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/glass, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron, +/area/virtual_domain) +"El" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/obj/structure/meateor_fluff/flesh_pod_open, +/turf/open/indestructible/meat, +/area/virtual_domain) +"En" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"Er" = ( +/obj/structure/rack, +/obj/item/tank/jetpack/carbondioxide{ + pixel_x = 4; + pixel_y = -1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Es" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/mecha_wreckage/ripley/paddy, +/turf/open/floor/iron, +/area/virtual_domain) +"Eu" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"EC" = ( +/obj/item/flashlight/lamp/green{ + pixel_x = -6; + pixel_y = -5 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"ED" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/effect/decal/cleanable/vomit, +/turf/open/floor/iron, +/area/virtual_domain) +"EF" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/blue, +/obj/structure/closet/crate/cardboard, +/obj/effect/spawner/random/maintenance/no_decals/seven, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"EH" = ( +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"EK" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/reagent_containers/spray/chemsprayer/party, +/turf/open/floor/iron, +/area/virtual_domain) +"EQ" = ( +/obj/machinery/door/poddoor/preopen{ + name = "Bridge Blast Door" + }, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/virtual_domain) +"ET" = ( +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/computer/security/wooden_tv{ + pixel_x = 1; + pixel_y = 6 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"EV" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L7" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "e"; + pixel_y = -16; + pixel_x = 1 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "guy"; + pixel_y = -5 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Fc" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/clothing/suit/bio_suit/virology, +/obj/item/clothing/head/bio_hood/virology{ + pixel_y = 10; + pixel_x = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/obj/structure/sign/warning/biohazard/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"Fd" = ( +/turf/open/space/basic, +/area/space) +"Ff" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/structure/bodycontainer/morgue, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Fg" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/banner/medical, +/turf/open/indestructible/meat, +/area/virtual_domain) +"Fh" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Fj" = ( +/obj/structure/table/optable, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/plating, +/area/virtual_domain) +"Fl" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/decal/cleanable/vomit/toxic, +/turf/open/floor/iron, +/area/virtual_domain) +"Fp" = ( +/obj/structure/showcase/machinery/tv{ + dir = 1; + pixel_x = 2; + pixel_y = 3 + }, +/obj/structure/table/wood, +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet, +/area/virtual_domain) +"Fr" = ( +/obj/effect/decal/cleanable/xenoblood/xgibs/down, +/obj/structure/alien/weeds, +/turf/open/floor/plating, +/area/virtual_domain) +"Fw" = ( +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/rods/fifty, +/obj/item/stack/rods/fifty, +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"FA" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet, +/area/virtual_domain) +"FC" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters/window{ + name = "Gateway Access Shutter" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"FF" = ( +/obj/structure/sign/warning/secure_area, +/turf/closed/wall/r_wall, +/area/virtual_domain) +"FG" = ( +/obj/effect/turf_decal/trimline/green/filled/corner, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"FI" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"FK" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/stack/sheet/iron, +/turf/open/floor/iron, +/area/virtual_domain) +"FN" = ( +/obj/structure/closet/crate/preopen, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/rods/fifty, +/obj/item/storage/toolbox/emergency, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron, +/area/virtual_domain) +"FO" = ( +/obj/structure/flora/rock/pile/jungle, +/obj/structure/flora/tree/jungle/small/style_6, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"FR" = ( +/obj/item/storage/toolbox/drone, +/turf/open/floor/iron, +/area/virtual_domain) +"FS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/gibspawner/human, +/turf/open/floor/plating, +/area/virtual_domain) +"FT" = ( +/obj/item/clothing/mask/surgical, +/obj/structure/meateor_fluff/eyeball, +/obj/effect/decal/cleanable/vomit/toxic, +/turf/open/indestructible/meat, +/area/virtual_domain) +"FV" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"FZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/plating, +/area/virtual_domain) +"Gi" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/fluff/paper/stack{ + dir = 6 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Gk" = ( +/obj/machinery/door/window/left/directional/south{ + name = "HoP's Desk" + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/virtual_domain) +"Gm" = ( +/obj/structure/meateor_fluff/flesh_pod_open, +/turf/open/indestructible/meat, +/area/virtual_domain) +"Gn" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Gq" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Gr" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"Gs" = ( +/obj/item/clothing/mask/gas, +/turf/open/floor/plating, +/area/virtual_domain) +"Gx" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Head of Personnel" + }, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/wood, +/area/virtual_domain) +"Gy" = ( +/obj/structure/flora/rock/pile/jungle/large/style_random, +/turf/open/misc/dirt/dark/jungle, +/area/virtual_domain) +"GA" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"GD" = ( +/obj/structure/lattice, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/space/basic, +/area/virtual_domain) +"GG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/sandbags, +/turf/open/floor/wood, +/area/virtual_domain) +"GJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/cardboard/mothic{ + pixel_y = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"GQ" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"GS" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"GT" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/virtual_domain) +"Hb" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/iron, +/area/virtual_domain) +"Hc" = ( +/obj/structure/rack, +/obj/item/gun/ballistic/revolver/golden, +/turf/open/floor/plating, +/area/virtual_domain) +"Hd" = ( +/turf/open/floor/iron, +/area/virtual_domain) +"Hg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/flare/candle/infinite{ + pixel_y = -9; + icon_state = "candle2_lit" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Hh" = ( +/obj/machinery/shower/directional/south, +/obj/structure/curtain, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/iron/white, +/area/virtual_domain) +"Hl" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/virtual_domain) +"Hs" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron, +/area/virtual_domain) +"Ht" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Hv" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Bridge" + }, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Hw" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/chair/office{ + dir = 4; + pixel_x = -10 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"HC" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 + }, +/obj/item/trash/fleet_ration, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"HG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/virtual_domain) +"HH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + name = "Secure Network Access" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/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/command/ai_upload, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"HM" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain) +"HP" = ( +/obj/structure/holosign/barrier/engineering, +/turf/open/floor/plating, +/area/virtual_domain) +"HS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/item/flashlight/flare/candle/infinite{ + pixel_x = 13; + pixel_y = 8; + icon_state = "candle3_lit" + }, +/obj/item/trash/candle, +/turf/open/floor/plating, +/area/virtual_domain) +"HX" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/banner/command, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Ie" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/ammo_casing/spent{ + dir = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Ii" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Ij" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = -1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Il" = ( +/obj/structure/lattice, +/obj/item/ammo_box/strilka310/surplus, +/turf/open/space/basic, +/area/virtual_domain) +"Io" = ( +/obj/structure/fluff/paper/stack{ + dir = 10 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Iq" = ( +/obj/structure/table/wood, +/obj/machinery/recharger, +/turf/open/floor/wood, +/area/virtual_domain) +"Ir" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/carpet, +/area/virtual_domain) +"Iw" = ( +/obj/structure/closet/crate/cardboard{ + pixel_y = 8 + }, +/obj/item/spear/explosive, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"IC" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"IH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"IJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron, +/area/virtual_domain) +"IL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/barricade/sandbags, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"IM" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent{ + dir = 10; + pixel_x = -13; + pixel_y = -8 + }, +/obj/item/ammo_casing/spent{ + dir = 9; + pixel_x = -13; + pixel_y = 9 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"IS" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Teleport Access" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/iron, +/area/virtual_domain) +"IU" = ( +/obj/item/radio/off, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Jh" = ( +/obj/machinery/door/window/left/directional/north{ + name = "Captain's Bedroom" + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/wood, +/area/virtual_domain) +"Ji" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/plating, +/area/virtual_domain) +"Jm" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/spider/stickyweb, +/turf/open/floor/iron, +/area/virtual_domain) +"JD" = ( +/obj/structure/spider/stickyweb, +/turf/open/floor/iron, +/area/virtual_domain) +"JG" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"JK" = ( +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/structure/table/glass, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"JL" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/structure/barricade/sandbags, +/obj/structure/railing, +/turf/open/floor/iron, +/area/virtual_domain) +"JM" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/decal/cleanable/robot_debris, +/turf/open/floor/iron, +/area/virtual_domain) +"JP" = ( +/turf/open/floor/iron/dark, +/area/virtual_domain) +"JR" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/caution/red{ + dir = 8 + }, +/obj/item/clothing/suit/caution{ + pixel_y = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"JY" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/item/banner/engineering, +/turf/open/floor/iron, +/area/virtual_domain) +"Ka" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/fluff/paper/stack{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Ke" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"Kf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Kh" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"Kl" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Km" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash, +/turf/open/floor/plating, +/area/virtual_domain) +"Kn" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/item/storage/cans/sixbeer, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Kq" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/holosign/barrier/engineering, +/turf/open/floor/plating, +/area/virtual_domain) +"Kr" = ( +/obj/item/clothing/head/utility/hardhat, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Kv" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L9" + }, +/obj/effect/decal/cleanable/blood{ + icon_state = "floor4"; + pixel_y = -15 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Kw" = ( +/obj/structure/plaque/static_plaque/golden/commission/meta, +/turf/open/floor/iron, +/area/virtual_domain) +"KA" = ( +/obj/item/chair, +/turf/open/floor/iron, +/area/virtual_domain) +"KF" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"KM" = ( +/obj/structure/sign/warning/pods, +/turf/closed/wall, +/area/virtual_domain) +"KN" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"KP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/closet/body_bag, +/turf/open/floor/iron, +/area/virtual_domain) +"KQ" = ( +/obj/structure/rack, +/obj/item/assembly/signaler, +/obj/item/assembly/signaler, +/obj/item/assembly/timer, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/obj/machinery/digital_clock/directional/south, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"KR" = ( +/obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"KT" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/virtual_domain) +"KW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron, +/area/virtual_domain) +"Lg" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Lh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron, +/area/virtual_domain) +"Ll" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"Lm" = ( +/obj/structure/alien/weeds, +/obj/item/clothing/mask/facehugger/dead, +/turf/open/floor/plating, +/area/virtual_domain) +"Lq" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/night/colorless{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/clothing/glasses/night/colorless, +/obj/item/clothing/glasses/night/colorless{ + pixel_x = -5; + pixel_y = -3 + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Ls" = ( +/obj/modular_map_root/safehouse{ + key = "shuttle_space" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Lu" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/virtual_domain) +"Lz" = ( +/obj/effect/decal/cleanable/confetti, +/obj/machinery/jukebox/disco{ + anchored = 1; + req_access = null + }, +/turf/open/floor/iron, +/area/virtual_domain) +"LB" = ( +/obj/structure/lattice, +/obj/item/gun/ballistic/rifle/boltaction/surplus, +/turf/open/space/basic, +/area/virtual_domain) +"LD" = ( +/obj/item/kirbyplants/random/dead/research_director, +/turf/open/floor/plating, +/area/virtual_domain) +"LG" = ( +/obj/machinery/firealarm/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/carpet, +/area/virtual_domain) +"LJ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + name = "E.V.A. Storage Shutter Control" + }, +/obj/effect/decal/cleanable/blood/old, +/obj/item/clothing/suit/bio_suit/virology{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/turf/open/floor/iron, +/area/virtual_domain) +"LK" = ( +/obj/machinery/button/door/directional/east{ + name = "Bridge Access Blast Door Control" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/flora/rock/icy/style_2, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"LL" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/holosign/barrier, +/turf/open/floor/iron, +/area/virtual_domain) +"LN" = ( +/obj/item/kirbyplants, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/iron, +/area/virtual_domain) +"LP" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"LS" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/virtual_domain) +"LV" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/holosign/barrier, +/turf/open/floor/iron, +/area/virtual_domain) +"Mb" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Mj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/virtual_domain) +"Mk" = ( +/obj/structure/table/wood, +/obj/machinery/light/directional/south, +/obj/item/papercutter{ + pixel_x = -4 + }, +/obj/item/paper/fluff/ids_for_dummies, +/turf/open/floor/wood, +/area/virtual_domain) +"Ml" = ( +/obj/effect/decal/cleanable/crayon/x, +/turf/closed/wall/rust, +/area/virtual_domain) +"Mm" = ( +/obj/structure/lattice, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/space/basic, +/area/virtual_domain) +"Mn" = ( +/obj/machinery/holopad, +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Mo" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/computer/old, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Mq" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"Mr" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/virtual_domain) +"Ms" = ( +/obj/item/storage/fancy/cigarettes/cigpack_mindbreaker{ + pixel_x = 3; + pixel_y = -5 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Mt" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + name = "Council Chamber" + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Mu" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/item/clothing/head/bio_hood/virology{ + pixel_y = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Mz" = ( +/obj/effect/decal/cleanable/shreds, +/turf/open/floor/iron, +/area/virtual_domain) +"MC" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"MF" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"MG" = ( +/turf/open/indestructible/meat, +/area/virtual_domain) +"MJ" = ( +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood, +/obj/effect/spawner/random/trash, +/turf/open/floor/carpet, +/area/virtual_domain) +"ML" = ( +/obj/structure/bed/maint, +/obj/item/bedsheet/pirate, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet, +/area/virtual_domain) +"MM" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/sheet/iron/fifty, +/obj/item/storage/toolbox/emergency, +/obj/effect/spawner/random/engineering/flashlight, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"MN" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"MP" = ( +/obj/structure/sign/picture_frame/showroom/three{ + pixel_x = -8; + pixel_y = 32 + }, +/obj/structure/sign/picture_frame/showroom/four{ + pixel_x = 8; + pixel_y = 32 + }, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/wood, +/area/virtual_domain) +"MS" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/screwdriver, +/turf/open/floor/plating, +/area/virtual_domain) +"MZ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/bookcase/random, +/turf/open/floor/iron, +/area/virtual_domain) +"Ne" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/flasher/directional/east{ + pixel_y = -26 + }, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron, +/area/virtual_domain) +"Nh" = ( +/obj/structure/barricade/sandbags, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"Nl" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law{ + pixel_y = 3 + }, +/obj/item/radio/intercom/command/directional/north, +/obj/item/paper/fluff/jobs/engineering/frequencies, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Nm" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"No" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + name = "HoP Queue Shutters" + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/virtual_domain) +"Nq" = ( +/obj/item/stock_parts/scanning_module/triphasic{ + pixel_x = 4 + }, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"Nr" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/status_display/ai/directional/north, +/obj/item/stock_parts/subspace/amplifier{ + pixel_y = -6 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Nu" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Ny" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/barricade/security, +/turf/open/floor/iron, +/area/virtual_domain) +"Nz" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "council blast"; + name = "Council Blast Doors" + }, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating, +/area/virtual_domain) +"ND" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/digital_clock/directional/north, +/obj/item/light/bulb/broken{ + pixel_x = 15 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"NG" = ( +/obj/structure/chair/office{ + 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/virtual_domain) +"NN" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"NO" = ( +/obj/machinery/airalarm/directional/west, +/obj/structure/broken_flooring/singular/always_floorplane/directional/east, +/obj/item/surgery_tray/full/deployed, +/turf/open/floor/plating, +/area/virtual_domain) +"NR" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"NZ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar, +/obj/structure/barricade/sandbags, +/obj/structure/railing, +/turf/open/floor/iron, +/area/virtual_domain) +"Oc" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/clothing/mask/party_horn, +/turf/open/floor/iron, +/area/virtual_domain) +"Od" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"Oe" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron, +/area/virtual_domain) +"Of" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"Oh" = ( +/obj/effect/spawner/random/decoration/microwave{ + dir = 1; + pixel_y = 2 + }, +/obj/structure/table/wood, +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet, +/area/virtual_domain) +"Oi" = ( +/obj/structure/holosign/barrier/atmos, +/turf/open/floor/plating, +/area/virtual_domain) +"Oj" = ( +/obj/item/ammo_box/magazine/wt550m9, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"Ol" = ( +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"Om" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L8" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Oq" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Or" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/item/evidencebag, +/turf/open/floor/iron, +/area/virtual_domain) +"Os" = ( +/obj/structure/rack, +/obj/item/aicard, +/obj/item/radio/off, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Ou" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/iron, +/area/virtual_domain) +"Ov" = ( +/obj/machinery/vending/boozeomat, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/virtual_domain) +"Ox" = ( +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"OC" = ( +/obj/structure/tank_dispenser/oxygen{ + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"OD" = ( +/obj/structure/rack, +/obj/item/clothing/shoes/magboots, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"OE" = ( +/obj/machinery/door/airlock/silver{ + name = "Bathroom" + }, +/turf/open/floor/iron/white, +/area/virtual_domain) +"OS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/virtual_domain) +"OU" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/trash/popcorn/caramel, +/turf/open/floor/iron, +/area/virtual_domain) +"OV" = ( +/obj/item/flashlight/flare{ + icon_state = "flare-on"; + light_on = 1 + }, +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/virtual_domain) +"OX" = ( +/obj/machinery/fax{ + pixel_y = 9 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Pa" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L4" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "l"; + pixel_x = 10; + pixel_y = 16 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Pd" = ( +/obj/item/cigbutt, +/turf/open/floor/wood, +/area/virtual_domain) +"Pg" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/alien/weeds, +/turf/open/floor/iron, +/area/virtual_domain) +"Pk" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/alien/weeds, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Pq" = ( +/obj/item/ammo_casing/spent{ + dir = 1 + }, +/obj/item/ammo_casing/spent{ + dir = 10; + pixel_x = -13; + pixel_y = -8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Py" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/item/radio/intercom/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/clothing/mask/facehugger/dead, +/obj/structure/displaycase, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/wood, +/area/virtual_domain) +"PC" = ( +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/iron, +/area/virtual_domain) +"PG" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L10" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"PP" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/obj/machinery/light/small/directional/west, +/obj/item/paper/fluff/gateway, +/obj/item/coin/plasma, +/obj/item/melee/chainofcommand, +/turf/open/floor/wood, +/area/virtual_domain) +"PQ" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"PR" = ( +/obj/machinery/vending/boozeomat/syndicate, +/obj/effect/turf_decal/tile/bar, +/turf/open/floor/iron, +/area/virtual_domain) +"PT" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/turf/open/floor/plating, +/area/virtual_domain) +"PU" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"PY" = ( +/obj/item/restraints/legcuffs/beartrap/prearmed, +/turf/open/floor/iron, +/area/virtual_domain) +"Qc" = ( +/obj/machinery/firealarm/directional/west, +/obj/structure/alien/weeds, +/obj/structure/alien/weeds/node, +/obj/effect/mob_spawn/corpse/human/assistant/brainrot_infection, +/turf/open/floor/plating, +/area/virtual_domain) +"Qg" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/item/folder/yellow{ + pixel_y = 4 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Qh" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/barricade/sandbags, +/obj/structure/railing, +/turf/open/floor/iron, +/area/virtual_domain) +"Qm" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Qp" = ( +/obj/structure/noticeboard/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/structure/fluff/paper/stack{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Qq" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/virtual_domain) +"Qw" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L5" + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/iron, +/area/virtual_domain) +"QA" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + name = "Bridge Blast Door" + }, +/obj/structure/barricade/wooden/crude, +/obj/structure/cable, +/turf/open/floor/plating, +/area/virtual_domain) +"QM" = ( +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/suit_storage_unit/void_old, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"QN" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/item/restraints/handcuffs/cable/white, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/carpet, +/area/virtual_domain) +"QQ" = ( +/obj/item/ammo_casing/shotgun/buckshot/spent, +/turf/open/floor/carpet, +/area/virtual_domain) +"Ra" = ( +/obj/structure/sign/map/right{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-right-MS"; + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/virtual_domain) +"Rg" = ( +/obj/machinery/light/cold/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/window/spawner/directional/north, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Rj" = ( +/obj/structure/broken_flooring/side/directional/north, +/turf/open/floor/plating, +/area/virtual_domain) +"Rl" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/sign/warning/secure_area/directional/north, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Rn" = ( +/obj/item/clothing/head/cone{ + pixel_y = 3; + pixel_x = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/storage/toolbox/electrical{ + pixel_y = -5; + pixel_x = -2 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Rx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Rz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/trash/energybar, +/turf/open/floor/iron, +/area/virtual_domain) +"RB" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/holosign/barrier, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron, +/area/virtual_domain) +"RD" = ( +/obj/structure/lattice, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/space/basic, +/area/virtual_domain) +"RE" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/structure/frame/machine/secured, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"RI" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/spawner/random/decoration/showcase, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/carpet, +/area/virtual_domain) +"RJ" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"RL" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/item/ammo_casing/spent{ + dir = 4 + }, +/obj/item/ammo_casing/spent{ + dir = 9; + pixel_x = -13; + pixel_y = 9 + }, +/obj/item/ammo_casing/spent{ + dir = 8; + pixel_x = -19; + pixel_y = -5 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"RR" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/item/ammo_casing/spent, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"RT" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + name = "HoP Queue Shutters" + }, +/obj/effect/turf_decal/loading_area, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/virtual_domain) +"RV" = ( +/obj/machinery/light/directional/north, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/item/banner/security, +/turf/open/floor/iron, +/area/virtual_domain) +"RX" = ( +/obj/effect/spawner/random/decoration/showcase, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/carpet, +/area/virtual_domain) +"RZ" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Sa" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/suit_storage_unit{ + state_open = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Sj" = ( +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Sl" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Sm" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar, +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron, +/area/virtual_domain) +"Sq" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/obj/structure/frame/computer, +/obj/item/shard{ + icon_state = "medium"; + pixel_x = 5 + }, +/obj/item/stack/cable_coil/cut, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Sr" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/wood, +/area/virtual_domain) +"Ss" = ( +/obj/machinery/recharger{ + pixel_y = 3 + }, +/obj/item/restraints/handcuffs{ + pixel_y = 3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Sx" = ( +/obj/machinery/status_display/evac/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron, +/area/virtual_domain) +"Sz" = ( +/obj/item/seeds/eggplant, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"SC" = ( +/obj/structure/marker_beacon/bronze, +/obj/structure/broken_flooring/side/directional/north, +/turf/open/floor/plating, +/area/virtual_domain) +"SF" = ( +/obj/structure/flora/bush/jungle/b/style_random, +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/item/flashlight/flare{ + icon_state = "flare-on"; + light_on = 1 + }, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"SG" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/structure/frame/computer, +/obj/item/shard, +/obj/item/stack/cable_coil/cut, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"SH" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"SJ" = ( +/obj/machinery/airalarm/directional/north, +/obj/item/kirbyplants/organic/applebush, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"SK" = ( +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"SN" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/virtual_domain) +"SP" = ( +/obj/effect/turf_decal/tile/neutral, +/mob/living/basic/bot/cleanbot/autopatrol, +/turf/open/floor/iron, +/area/virtual_domain) +"SR" = ( +/obj/structure/fluff/paper/stack{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ST" = ( +/obj/structure/alien/weeds, +/obj/structure/barricade/wooden, +/turf/open/floor/plating, +/area/virtual_domain) +"SY" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/syringe/lethal/execution, +/obj/item/reagent_containers/syringe/lethal/execution{ + pixel_y = 7; + pixel_x = -4 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"Te" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/obj/effect/mob_spawn/corpse/human/doctor, +/turf/open/indestructible/meat, +/area/virtual_domain) +"Tm" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/virtual_domain) +"To" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/glass, +/obj/item/stack/rods, +/obj/effect/mine/explosive/flame, +/turf/open/floor/plating, +/area/virtual_domain) +"Ty" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L14" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"TC" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"TH" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/chair/pew/left, +/obj/item/newspaper, +/turf/open/floor/iron, +/area/virtual_domain) +"TJ" = ( +/obj/structure/grille, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/virtual_domain) +"TL" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"TN" = ( +/obj/structure/table/wood, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/item/poster/random_official, +/obj/machinery/button/door/directional/east{ + name = "corporate showroom shutters control" + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/carpet, +/area/virtual_domain) +"TP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/virtual_domain) +"TT" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + name = "Gateway Shutter Control" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"TW" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Ua" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/chair/sofa/corp/right{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Ue" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/floor/carpet, +/area/virtual_domain) +"Ui" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/banner/engineering, +/turf/open/floor/iron, +/area/virtual_domain) +"Uj" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Un" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Uo" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/virtual_domain) +"Uq" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle/epinephrine, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = 6 + }, +/obj/item/reagent_containers/syringe, +/turf/open/floor/plating, +/area/virtual_domain) +"Ur" = ( +/obj/machinery/vending/cart{ + req_access = list("hop") + }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/wood, +/area/virtual_domain) +"Uv" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Ux" = ( +/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/virtual_domain) +"Uz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain) +"UF" = ( +/obj/structure/flora/bush/jungle/a/style_random, +/obj/item/banner/science, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"UJ" = ( +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = 2 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"UP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/carpet, +/area/virtual_domain) +"UT" = ( +/obj/structure/flora/bush/leavy/style_3, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/spacevine{ + can_spread = 0 + }, +/obj/effect/mob_spawn/corpse/human/scientist, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"Ve" = ( +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Vk" = ( +/obj/effect/turf_decal/stripes/line, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = -9 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Vr" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/gelpod, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/plating, +/area/virtual_domain) +"Vs" = ( +/turf/closed/indestructible/rock, +/area/virtual_domain) +"Vw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Vz" = ( +/obj/structure/barricade/security, +/turf/open/floor/plating, +/area/virtual_domain) +"VD" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash, +/turf/open/floor/carpet, +/area/virtual_domain) +"VG" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/trash/flare, +/turf/open/floor/carpet, +/area/virtual_domain) +"VH" = ( +/obj/item/storage/box/lights/mixed, +/obj/item/flashlight/flare/candle/infinite{ + pixel_y = 16; + icon_state = "candle2_lit"; + pixel_x = -17 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"VO" = ( +/obj/machinery/door/airlock{ + name = "Central Emergency Storage" + }, +/obj/effect/mapping_helpers/airlock/unres, +/turf/open/floor/plating, +/area/virtual_domain) +"VP" = ( +/obj/structure/rack, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/radio/off, +/obj/item/radio/off, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"VT" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/chair, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"VZ" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/iron, +/area/virtual_domain) +"Wf" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/crowbar, +/turf/open/floor/iron, +/area/virtual_domain) +"Wh" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/virtual_domain) +"Wl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Wm" = ( +/obj/machinery/light_switch/directional/north, +/obj/machinery/light/small/directional/north, +/obj/structure/table/wood, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/under/suit/black_really, +/obj/item/clothing/glasses/sunglasses, +/turf/open/floor/wood, +/area/virtual_domain) +"Wt" = ( +/obj/structure/flora/grass/jungle/b/style_random, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/misc/dirt/jungle, +/area/virtual_domain) +"Wv" = ( +/obj/machinery/door/firedoor, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"WF" = ( +/obj/structure/table/wood, +/obj/machinery/button/ticket_machine{ + pixel_x = 38 + }, +/obj/machinery/light_switch/directional/south{ + pixel_x = 6; + pixel_y = -34 + }, +/obj/machinery/button/door/directional/south{ + pixel_x = -6 + }, +/obj/item/paper_bin/carbon{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/stamp/head/hop{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/machinery/button/door/directional/south{ + pixel_x = -6; + pixel_y = -34 + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/machinery/button/photobooth{ + pixel_x = 26 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"WH" = ( +/obj/item/clothing/head/cone{ + pixel_x = 5; + pixel_y = -4 + }, +/obj/item/crowbar/hammer{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain) +"WL" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/assembly/flash, +/turf/open/floor/iron, +/area/virtual_domain) +"WM" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/item/trash/chips, +/turf/open/floor/iron, +/area/virtual_domain) +"Xa" = ( +/obj/machinery/requests_console/directional/east{ + department = "Bridge"; + name = "Bridge Requests Console" + }, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/computer/old, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Xj" = ( +/obj/machinery/light/directional/north, +/obj/structure/sign/map/right{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-right-MS"; + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/effect/spawner/random/trash/bin, +/turf/open/floor/iron, +/area/virtual_domain) +"Xn" = ( +/obj/structure/bed/maint, +/obj/item/bedsheet/pirate{ + dir = 4 + }, +/obj/item/knife/hunting{ + pixel_y = -4 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"Xp" = ( +/obj/effect/turf_decal/plaque{ + icon_state = "L2" + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Xs" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/mine/explosive, +/turf/open/floor/plating, +/area/virtual_domain) +"Xw" = ( +/obj/effect/turf_decal/tile/blue, +/obj/item/boulder{ + icon_state = "boulder_large"; + pixel_y = 7 + }, +/obj/item/boulder{ + icon_state = "boulder_small"; + pixel_x = 9; + pixel_y = -1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Xx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/lantern{ + light_on = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"XD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain) +"XI" = ( +/obj/structure/frame/computer{ + dir = 1 + }, +/obj/item/shard{ + icon_state = "medium"; + pixel_x = 5 + }, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/wood, +/area/virtual_domain) +"XJ" = ( +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood{ + pixel_x = -4 + }, +/turf/open/floor/wood, +/area/virtual_domain) +"XK" = ( +/obj/structure/grille, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/virtual_domain) +"XL" = ( +/obj/structure/barricade/sandbags, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/iron, +/area/virtual_domain) +"XM" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/photo/old{ + pixel_x = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"XN" = ( +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/bot, +/obj/item/wallframe/light_fixture/small, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/iron, +/area/virtual_domain) +"XW" = ( +/obj/structure/frame/machine/secured, +/obj/structure/marker_beacon/teal, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Yc" = ( +/obj/structure/bed/medical/emergency, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/iron, +/area/virtual_domain) +"Yd" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Yf" = ( +/obj/machinery/recharger{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/structure/secure_safe/directional/east, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/virtual_domain) +"Yg" = ( +/obj/structure/broken_flooring/singular/directional/east, +/turf/open/floor/plating, +/area/virtual_domain) +"Yi" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/virtual_domain) +"Yl" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain) +"Yn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Yo" = ( +/obj/structure/sign/plaques/kiddie/perfect_drone{ + pixel_y = 32 + }, +/obj/structure/table/wood, +/obj/item/storage/backpack/duffelbag/drone, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/carpet, +/area/virtual_domain) +"Yr" = ( +/obj/machinery/door/firedoor, +/obj/machinery/newscaster/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar, +/turf/open/floor/iron, +/area/virtual_domain) +"Ys" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plating, +/area/virtual_domain) +"Yt" = ( +/obj/effect/decal/cleanable/blood{ + icon_state = "floor1-old" + }, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/iron, +/area/virtual_domain) +"Yv" = ( +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/light/directional/west, +/obj/item/clothing/head/cone{ + pixel_x = 5; + pixel_y = -4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"YA" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/chair/sofa/corp/left{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"YB" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/bluespace_vendor/directional/east, +/obj/structure/frame/machine/secured, +/turf/open/floor/iron, +/area/virtual_domain) +"YD" = ( +/obj/item/clothing/head/cone{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"YG" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/carpet, +/area/virtual_domain) +"YN" = ( +/obj/effect/decal/cleanable/blood{ + icon_state = "floor7" + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating, +/area/virtual_domain) +"YQ" = ( +/obj/structure/mirror/directional/north, +/obj/structure/sink/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/weather/dirt, +/obj/structure/fluff/paper/stack{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/virtual_domain) +"YR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Command Hallway" + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/virtual_domain) +"YU" = ( +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Za" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/virtual_domain) +"Zb" = ( +/obj/structure/rack, +/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/machinery/light/directional/east, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/virtual_domain) +"Zc" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Zh" = ( +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/carpet, +/area/virtual_domain) +"Zi" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"Zl" = ( +/obj/machinery/airalarm/directional/south, +/obj/structure/rack, +/obj/item/wrench, +/obj/item/crowbar, +/turf/open/floor/wood, +/area/virtual_domain) +"Zm" = ( +/obj/structure/spacevine{ + can_spread = 0 + }, +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/virtual_domain) +"Zp" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/virtual_domain) +"Zq" = ( +/obj/structure/sign/poster/random/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/iron, +/area/virtual_domain) +"Zu" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Zx" = ( +/obj/machinery/disposal/bin, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"ZC" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/misc/grass/jungle, +/area/virtual_domain) +"ZD" = ( +/obj/item/trash/candy, +/turf/open/floor/iron, +/area/virtual_domain) +"ZF" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/virtual_domain) +"ZG" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ZH" = ( +/obj/item/clothing/head/cone{ + pixel_y = 3; + pixel_x = 7 + }, +/obj/structure/grille/broken, +/obj/structure/cable, +/turf/open/floor/plating, +/area/virtual_domain) +"ZK" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"ZM" = ( +/obj/item/book/manual/wiki/security_space_law{ + name = "space law"; + pixel_y = 2 + }, +/obj/item/toy/gun, +/obj/item/restraints/handcuffs, +/obj/structure/table/wood, +/obj/item/clothing/head/collectable/hos{ + name = "novelty HoS hat" + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/carpet, +/area/virtual_domain) +"ZP" = ( +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"ZR" = ( +/obj/machinery/door/airlock/command{ + name = "Command Desk" + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"ZS" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"ZT" = ( +/obj/machinery/door/airlock/command{ + name = "Captain's Quarters" + }, +/turf/open/floor/carpet, +/area/virtual_domain) +"ZV" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/mob_spawn/corpse/human/assistant, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/iron, +/area/virtual_domain) +"ZY" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron, +/area/virtual_domain) + +(1,1,1) = {" +uz +uz +uz +uz +uz +uz +uz +uz +uz +uz +uz +uz +uz +uz +uz +uz +uz +uz +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +uz +HM +HM +HM +HM +HM +HM +uz +uz +uz +uz +uz +uz +uz +uz +uz +"} +(2,1,1) = {" +uz +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +Vs +Vs +Vs +Vs +Vs +ps +ps +ps +ps +ps +HM +HM +HM +ps +ps +pD +ps +HM +uz +uz +uz +uz +uz +uz +uz +uz +uz +"} +(3,1,1) = {" +uz +HM +Vs +Vs +Vs +Vs +Hl +Hl +Hl +Vs +Vs +Vs +ps +ps +ps +ps +tO +ps +ps +ps +Hl +Vs +Vs +Hl +ps +Ao +vM +eB +ps +ps +ps +ps +ps +Zx +Ii +ps +HM +uz +uz +uz +uz +uz +uz +uz +uz +uz +"} +(4,1,1) = {" +uz +HM +Vs +Vs +Vs +DW +bl +pr +Vs +Vs +Vs +Cn +cK +Uj +vN +Ah +nP +nS +gk +eA +Vs +Vs +MZ +nZ +Lg +nS +nS +Jm +dU +xK +ux +CM +KR +nS +ro +ps +HM +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(5,1,1) = {" +uz +HM +ps +Vs +yH +Hd +KT +mc +Hd +fj +dD +Hd +oS +hw +IL +Pq +pT +dD +KT +pc +mI +pE +SR +dD +mK +tR +Hd +JD +Zp +jR +Hd +hw +Hd +MG +kd +ps +ps +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(6,1,1) = {" +HM +HM +pD +yD +mc +Lu +PU +Ol +Ol +Ol +FV +Nm +lY +Lu +JL +RL +RR +Ol +Wv +Ol +on +dd +Ol +dd +ZV +AX +Cz +jt +rP +km +cj +dd +dd +Hd +pN +LN +Hl +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(7,1,1) = {" +HM +uS +uS +er +Hb +Ol +ps +Cb +xj +xj +GT +uS +uS +yP +uS +uS +Gx +uS +uS +ps +kK +lC +ac +fN +uS +uS +uS +uS +uS +uS +uS +uS +qq +kI +eZ +eX +uB +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(8,1,1) = {" +HM +uS +yc +th +Hd +LS +ps +ps +kn +ld +ps +uS +pP +EC +rQ +cZ +db +dc +uS +Zu +ps +pQ +nS +uS +rt +Sa +Fw +eV +iQ +Ij +sm +uS +hR +pN +Fl +Yc +Hl +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(9,1,1) = {" +HM +Hl +eB +Uz +kv +SP +ps +wD +FS +Cw +dD +Wh +dc +ZF +Gk +gU +YG +fh +To +GT +No +cI +ZY +lD +cz +Bw +cw +zj +zE +hF +mW +kN +mq +MG +NN +ps +uB +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(10,1,1) = {" +HM +uS +eB +WL +KT +KP +ps +il +TP +KW +fh +uS +Yf +nY +GS +rX +Ue +ZF +uS +dX +XK +tq +tI +FF +mq +oA +wj +OC +uw +qP +fK +yn +BF +mw +BZ +uB +HM +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(11,1,1) = {" +HM +uS +uS +ol +Mz +uY +ps +iv +dl +HS +fC +uS +uS +uS +uS +ML +DP +Mk +uS +ND +AP +rb +nS +jk +Ax +Wl +Wl +lt +bb +si +IH +kN +ED +El +wq +ps +HM +uz +uz +uz +uz +uz +uz +uz +uz +uz +"} +(12,1,1) = {" +HM +HM +uS +gM +CL +aZ +ps +ps +Hg +tf +fh +ps +rv +uS +Ur +VD +Xn +XI +uS +XN +OV +vN +Bj +uS +QM +GA +OD +ps +Er +Sa +dk +uS +LJ +bm +zL +uB +HM +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(13,1,1) = {" +uz +HM +HH +JM +Kl +VZ +ps +Yi +vA +mj +VH +lJ +Oq +uS +fz +oM +db +rz +To +fQ +TJ +OU +Qm +uS +ps +ps +ps +ps +ps +ps +ps +uS +Fc +BZ +hz +ps +uB +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(14,1,1) = {" +uz +HM +uS +nU +pO +bs +VO +ey +sr +fh +Gs +pL +IU +uS +dz +bO +ww +nW +aw +Ne +RT +bg +Ed +uS +kW +lL +pI +Qc +Fr +DQ +Pk +uS +Mu +qY +ay +im +Hl +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(15,1,1) = {" +uz +HM +uS +qa +Yt +uD +ps +uS +hZ +uS +uS +ps +uf +uS +cD +Kh +yq +WF +uS +YB +uS +TH +nS +uS +ZS +jD +kx +vt +PT +pV +mW +Pg +AN +bZ +Te +Gm +dA +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(16,1,1) = {" +uz +HM +ps +my +iy +Hs +dE +SN +SN +SN +uS +uS +EQ +uS +ps +ps +te +ps +uS +uS +wB +vg +pA +IS +jm +cW +Cd +CQ +Lm +jD +IH +vI +mq +vn +Sj +FT +dA +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(17,1,1) = {" +HM +HM +ps +hV +Hd +bQ +hZ +ii +SN +SN +kp +sI +Un +pJ +oQ +Hv +Xw +sf +ny +JP +ul +tq +Rz +FF +iI +MM +Vr +PT +VP +Rg +Gq +uS +AV +Ll +sX +Fg +Hl +HM +HM +HM +HM +HM +HM +HM +HM +Yl +"} +(18,1,1) = {" +HM +ps +ps +Rl +Hd +cr +FZ +fh +QA +kp +uS +uX +xu +JP +oy +Hv +to +ze +Bv +LK +ul +pR +tu +uS +uS +dE +tn +cW +cW +ps +ps +uS +vW +wH +Zc +JR +ps +ps +ps +ps +ps +ps +ps +ps +ps +HM +"} +(19,1,1) = {" +HM +uS +SJ +bS +pA +lT +fh +fh +yt +fh +Ox +gg +Yn +SK +ZP +ps +ps +ps +Mt +ps +uS +PQ +nS +dE +SN +SN +as +tl +pW +ST +tV +DL +rr +Hd +dD +ZG +Za +sS +SN +sS +SN +sS +SN +sS +ps +HM +"} +(20,1,1) = {" +HM +Hl +Es +mc +Hd +Ux +Ux +lT +AC +lT +vw +fh +ug +ba +mi +ps +uH +ZK +JP +xV +uS +WM +Kf +uS +hZ +hZ +uS +Yo +jh +pK +ep +FF +GJ +FR +Hd +Ka +ps +Fd +Fd +Fd +Fd +Fd +Fd +Fd +ps +HM +"} +(21,1,1) = {" +HM +uS +RV +BJ +Xp +Ol +Ad +vw +ZH +uk +NG +aA +SK +up +Os +ps +ps +Nl +YG +iH +FF +dd +FK +Of +qu +nS +as +RX +Bn +OS +ZF +oI +MF +vf +Xp +ZG +ps +hX +hX +hX +hX +hX +Ls +Fd +ps +HM +"} +(22,1,1) = {" +HM +dP +tS +eD +mf +Ke +dE +ii +uS +Qg +ug +uT +qM +zq +sc +Cy +ps +Mn +db +id +Nz +MF +Hd +bU +Mr +VT +uS +lK +rf +Ie +Oh +uS +Qp +ck +Pa +oD +pB +hX +zQ +Lq +hX +hX +hX +Fd +ps +HM +"} +(23,1,1) = {" +HM +yz +Vz +Qw +bP +Ol +hZ +SN +kp +zP +xu +Mb +RJ +JP +YG +wL +ps +Dp +qk +UJ +Nz +cp +ub +ZD +lb +LP +uS +wo +Ar +jC +Zh +an +PC +pA +lM +Bp +LD +hX +hX +hX +hX +hX +hX +Fd +ps +HM +"} +(24,1,1) = {" +HM +yz +Vz +wN +Om +wi +dE +SN +kp +SG +Vw +bW +MC +hU +TL +DP +ZR +JP +kg +zo +zx +AD +iy +Kw +yH +Dx +oI +ZF +vw +Km +fh +MS +mt +EV +zB +Io +vw +hX +hX +fD +Cx +hX +hX +Fd +ps +HM +"} +(25,1,1) = {" +HM +yz +Vz +wN +Cr +nS +hZ +SN +kp +zP +JP +yh +Hw +wA +hh +mb +ps +nw +se +xW +lk +Ad +CJ +Hd +KA +lG +uS +Wm +Mj +fh +Oj +vw +fh +Kv +PG +KF +gC +hX +hX +hX +hX +hX +hX +Fd +ps +HM +"} +(26,1,1) = {" +HM +tO +Oe +wN +vy +Wf +dE +LB +uS +Bt +gt +Xx +HX +ET +JK +Sl +ps +wY +YG +Gr +yx +Or +ie +bU +qJ +bR +uS +MP +fh +GG +Fp +uS +wN +wN +Rj +fB +wP +hX +hX +hX +Ca +hX +hX +Fd +ps +HM +"} +(27,1,1) = {" +HM +ps +CK +ht +Ty +YA +hZ +Il +kp +BK +di +Mb +Yd +cO +KQ +ps +ps +Ht +rJ +VG +FF +RB +qL +jd +LP +Bg +mo +br +ZF +rW +Mj +oI +MF +ra +BN +yK +ps +hX +hX +hX +hX +hX +rs +Fd +ps +HM +"} +(28,1,1) = {" +HM +ps +Xj +Hd +Hd +Ua +hZ +SN +kp +Sq +Eu +ix +iP +aQ +ez +ps +uH +FI +Ms +KN +uS +Bh +re +uS +dE +dE +uS +oH +Mj +gE +xI +FF +Gi +Hd +aC +Uo +lE +Fd +Fd +Fd +Fd +Fd +Fd +Fd +ps +HM +"} +(29,1,1) = {" +HM +ps +cx +rj +kI +ZY +dE +SN +kp +Mo +Kn +Ss +at +yy +HC +ps +ps +ps +Mt +ps +uS +zw +Ol +hZ +SN +SN +as +RI +Pd +TN +ZM +an +sB +kI +Hd +Cg +Za +sS +SN +sS +SN +sS +SN +sS +ps +HM +"} +(30,1,1) = {" +HM +ps +ps +hi +Hd +hg +dE +SN +kp +kp +uS +pb +iZ +bu +kt +Hv +EF +SK +SK +tk +ul +dd +yw +uS +uS +dE +uS +ps +ps +ps +ps +uS +rh +PY +Ou +CA +lQ +ps +ps +ps +ps +ps +ps +ps +ps +HM +"} +(31,1,1) = {" +HM +HM +ps +sF +pX +vi +hZ +SN +SN +Mm +kp +Xa +fF +DU +RZ +Hv +Iw +qI +Bv +Bv +ul +wa +tM +Nh +zg +Fj +NO +hv +uA +yN +Ff +uS +tq +Hd +DV +UF +Zm +Vs +HM +HM +HM +HM +HM +HM +HM +HM +"} +(32,1,1) = {" +uz +HM +Hl +Ny +yH +DF +dE +SN +GD +RD +uS +uS +uS +zA +jG +uS +uS +uS +BP +uS +wB +dd +pA +Nh +Uq +Rj +wu +XD +wu +Rx +jx +uS +cC +HG +Gy +mO +wl +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(33,1,1) = {" +uz +HM +yz +Ny +fn +Mq +uS +uS +uS +uS +uS +Hh +uS +uS +uS +uS +Ov +rq +db +LG +uS +hd +Ol +lx +vU +hp +lu +ok +hc +fK +op +uS +Ra +nq +Cc +zR +ge +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(34,1,1) = {" +uz +HM +ps +cN +vO +XM +uS +uP +ab +hb +ps +YQ +ps +Py +PP +qz +jF +QQ +YG +YG +BP +Yg +pv +uS +FN +AR +eR +Zb +zT +IH +dZ +uS +PQ +DV +ej +tw +Zm +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(35,1,1) = {" +uz +HM +ps +au +Ay +TW +uS +Zi +vK +wn +ps +aO +ps +ry +ZF +gE +mP +vV +vV +FA +uS +TC +mQ +uS +uS +AA +AA +uS +hZ +hG +hZ +uS +TT +Gy +aV +yO +lQ +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(36,1,1) = {" +uz +HM +ps +LL +KT +LV +uS +yC +jc +UP +ps +OE +ps +xb +XJ +Iq +sA +MJ +SY +tj +uS +dd +ai +ty +uS +bT +ss +Yv +dY +Dk +Vk +FC +mq +UT +SF +MN +lQ +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(37,1,1) = {" +uz +HM +Hl +dd +Hd +nS +pd +YN +dc +rO +yI +gE +ZT +kc +yM +ki +vw +vK +QN +Ir +uS +ud +xd +sa +uS +Nr +XW +Kq +Ii +Hd +fK +FC +mq +cH +gb +ZC +Ec +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(38,1,1) = {" +uz +HM +yz +dd +Hd +FZ +WH +Oi +tF +YU +Jh +gE +ps +jy +qS +Sr +fh +fh +aT +SH +uS +Fh +Ol +Gn +uS +Nq +iY +Dc +dC +jz +qr +FC +mq +Gy +DC +od +FO +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(39,1,1) = {" +uz +HM +yz +fh +mc +yE +Oi +SN +Oi +YD +zO +sz +ps +ps +uS +uS +OX +Xs +fh +uS +uS +dd +iK +uS +uS +uS +uS +uS +uS +oo +uS +FF +fr +DV +MN +EH +iA +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(40,1,1) = {" +uz +HM +Hl +pA +Hd +Kr +Oi +GD +rm +Oi +bd +Zl +ps +Hc +uS +ek +vw +eG +xe +Ji +DO +dd +Ol +DO +ey +eu +fh +wV +vw +ja +Tm +DO +tq +Hd +tW +lQ +uq +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(41,1,1) = {" +uz +HM +KM +dd +Hd +lU +Rn +Oi +Oi +AM +CC +uS +uS +Ml +uS +DO +ps +ps +ps +ps +ut +hj +YR +tO +ps +ps +ps +ps +ps +ps +ps +ps +JG +Hd +sZ +ps +lQ +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(42,1,1) = {" +uz +HM +ps +nO +kI +nS +FZ +bw +lN +IC +SC +gj +Qq +lv +Lg +Oc +IJ +Ys +EK +Zq +En +tq +bf +tq +av +Qh +Sx +Ve +tq +Uv +BM +DA +fP +NR +eN +FG +Vs +Vs +HM +uz +uz +uz +uz +uz +uz +uz +"} +(43,1,1) = {" +uz +HM +ps +dd +mR +mc +Hd +KT +Ay +fh +Hd +vw +mc +KT +Lh +nz +oO +Lz +zb +vw +Hd +Hd +kI +XL +KT +oS +mR +XL +GQ +fP +fP +Sz +fP +Dl +Wt +yT +Vs +HM +HM +uz +uz +uz +uz +uz +uz +uz +"} +(44,1,1) = {" +uz +HM +ps +dd +jt +km +dd +Nu +JY +HP +HP +vo +Ui +Yr +Bd +PR +Vs +Vs +Sm +fG +Bd +Od +rC +NZ +kM +IM +AQ +fc +cB +Vs +Vs +cF +qv +fP +st +RE +Vs +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(45,1,1) = {" +uz +HM +ps +ps +ps +ps +ps +ps +ps +DM +DM +DM +ps +ps +Hl +Hl +Vs +Vs +Vs +Hl +ps +ps +ps +ps +ps +ps +ps +ps +ps +ps +Vs +Vs +ps +Hl +Vs +Vs +Vs +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} +(46,1,1) = {" +uz +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +HM +uz +uz +uz +uz +uz +uz +uz +uz +"} diff --git a/_maps/virtual_domains/pipedream.dmm b/_maps/virtual_domains/pipedream.dmm index dd7fdd90f8bc0..a455ee49aa534 100644 --- a/_maps/virtual_domains/pipedream.dmm +++ b/_maps/virtual_domains/pipedream.dmm @@ -22,6 +22,9 @@ }, /turf/open/floor/iron, /area/virtual_domain) +"aK" = ( +/turf/open/space/basic, +/area/space/virtual_domain) "aL" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, @@ -103,9 +106,6 @@ }, /turf/open/floor/iron, /area/virtual_domain) -"dr" = ( -/turf/open/space/basic, -/area/space/virtual_domain) "dx" = ( /obj/effect/turf_decal/trimline/yellow/line, /obj/item/shard, @@ -741,6 +741,10 @@ icon_state = "carpet_royalblue-207" }, /area/virtual_domain) +"wl" = ( +/obj/item/shard, +/turf/open/space/basic, +/area/space/virtual_domain) "wm" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -792,10 +796,6 @@ }, /turf/open/floor/plating, /area/virtual_domain) -"xc" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/closed/indestructible/binary, -/area/virtual_domain/fullbright) "xj" = ( /obj/structure/railing/corner/end{ dir = 4 @@ -828,6 +828,10 @@ /obj/machinery/light/broken, /turf/open/floor/iron, /area/virtual_domain) +"xF" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) "xM" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 4 @@ -859,10 +863,6 @@ /obj/structure/fans/tiny, /turf/open/floor/plating, /area/virtual_domain) -"zn" = ( -/obj/item/stack/rods/two, -/turf/open/space/basic, -/area/space/virtual_domain) "zp" = ( /obj/structure/chair/sofa/corp/right{ dir = 1 @@ -894,6 +894,10 @@ /obj/machinery/light/broken, /turf/open/floor/iron, /area/virtual_domain) +"Av" = ( +/obj/item/stack/rods/two, +/turf/open/space/basic, +/area/space/virtual_domain) "Aw" = ( /obj/structure/lattice/catwalk{ name = "industrial lift" @@ -1107,9 +1111,6 @@ icon_state = "carpet_royalblue-21" }, /area/virtual_domain) -"Gf" = ( -/turf/closed/indestructible/binary, -/area/virtual_domain/fullbright) "Gh" = ( /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, @@ -1145,10 +1146,6 @@ /obj/effect/turf_decal/trimline/yellow/arrow_ccw, /turf/open/floor/iron, /area/virtual_domain) -"GQ" = ( -/obj/item/shard, -/turf/open/space/basic, -/area/space/virtual_domain) "GV" = ( /obj/machinery/light/small/red/dim{ dir = 8 @@ -1220,10 +1217,6 @@ /obj/structure/sign/warning/doors/directional/east, /turf/open/floor/iron, /area/virtual_domain) -"Jo" = ( -/obj/effect/smooths_with_walls, -/turf/closed/indestructible/binary, -/area/virtual_domain/fullbright) "Jq" = ( /obj/structure/broken_flooring/pile{ dir = 1 @@ -1535,6 +1528,13 @@ /obj/machinery/disposal/bin, /turf/open/floor/iron, /area/virtual_domain) +"RI" = ( +/obj/effect/smooths_with_walls, +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"RJ" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) "RK" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, @@ -1919,19 +1919,19 @@ yQ yQ yQ yQ -Gf -Gf -Gf -Gf -Gf -Gf -Jo -Gf -Gf -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ +RJ +RJ +RI +RJ +RJ +RJ +RJ +RJ +RJ yQ yQ yQ @@ -1969,7 +1969,7 @@ yQ yQ yQ yQ -Gf +RJ rO rO eg @@ -1981,7 +1981,7 @@ eg Xb rO rO -Gf +RJ yQ yQ yQ @@ -2019,7 +2019,7 @@ yQ yQ yQ yQ -Gf +RJ rO Bx SZ @@ -2031,14 +2031,14 @@ OQ bs Ib rO -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ yQ yQ "} @@ -2061,15 +2061,15 @@ yQ yQ yQ yQ -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ eg ho ho @@ -2081,16 +2081,16 @@ pa bs zp eY -Gf -Gf +RJ +RJ rO -Gf -Gf +RJ +RJ rO rO -Gf -Gf -xc +RJ +RJ +xF "} (5,1,1) = {" yQ @@ -2111,7 +2111,7 @@ yQ yQ yQ yQ -Jo +RI eg eg eg @@ -2119,7 +2119,7 @@ eg eg eg eg -Gf +RJ eg um DP @@ -2140,7 +2140,7 @@ AU rO rO rO -Gf +RJ "} (6,1,1) = {" yQ @@ -2161,7 +2161,7 @@ yQ yQ yQ yQ -Gf +RJ eg vA Dr @@ -2169,7 +2169,7 @@ bw Jq gc eg -Gf +RJ eg Hn fK @@ -2184,13 +2184,13 @@ eY rO Ez AU -dr -dr +aK +aK AU AU BN rO -Gf +RJ "} (7,1,1) = {" yQ @@ -2211,7 +2211,7 @@ yQ yQ yQ yQ -Gf +RJ eg jQ lW @@ -2219,7 +2219,7 @@ kU vU lN eg -Gf +RJ eg QI Fo @@ -2235,12 +2235,12 @@ rO AU AU BN -dr -dr -dr +aK +aK +aK AU rO -Gf +RJ "} (8,1,1) = {" yQ @@ -2261,7 +2261,7 @@ yQ yQ yQ yQ -Gf +RJ eg uU gj @@ -2269,7 +2269,7 @@ lt pb OR eg -Gf +RJ eg eg uk @@ -2280,17 +2280,17 @@ eg qV Vb eY -dr -dr -dr -dr -dr -dr -dr -dr -dr -dr -Gf +aK +aK +aK +aK +aK +aK +aK +aK +aK +aK +RJ "} (9,1,1) = {" yQ @@ -2311,7 +2311,7 @@ yQ yQ yQ yQ -Gf +RJ eg ki gj @@ -2319,7 +2319,7 @@ kU kU kU eg -Gf +RJ eg kU kU @@ -2330,17 +2330,17 @@ Qj FK nc eY -dr -dr -dr -dr -dr -dr +aK +aK +aK +aK +aK +aK AU -dr -dr -dr -Gf +aK +aK +aK +RJ "} (10,1,1) = {" yQ @@ -2356,12 +2356,12 @@ yQ yQ yQ yQ -Gf -Jo -Gf -Gf -Gf -Gf +RJ +RI +RJ +RJ +RJ +RJ eg eg kJ @@ -2369,7 +2369,7 @@ lx lx lp eg -Gf +RJ eg mu AJ @@ -2380,17 +2380,17 @@ BW hi Sg eY -dr -dr -dr -dr -dr -dr -dr -dr -dr -dr -Gf +aK +aK +aK +aK +aK +aK +aK +aK +aK +aK +RJ "} (11,1,1) = {" yQ @@ -2399,14 +2399,14 @@ yQ yQ yQ yQ -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ eg eg eg @@ -2430,17 +2430,17 @@ XR vQ Vg eY -dr -dr -dr +aK +aK +aK JR JR JR JR JR Qo -dr -Gf +aK +RJ "} (12,1,1) = {" yQ @@ -2449,7 +2449,7 @@ yQ yQ yQ yQ -Gf +RJ eg eg eg @@ -2481,16 +2481,16 @@ hi CX eY eY -dr -dr +aK +aK JR JR JR JR JR JR -dr -Gf +aK +RJ "} (13,1,1) = {" yQ @@ -2498,8 +2498,8 @@ yQ yQ yQ yQ -Gf -Gf +RJ +RJ eg VA bA @@ -2539,8 +2539,8 @@ JR JR JR JR -dr -Gf +aK +RJ "} (14,1,1) = {" yQ @@ -2548,7 +2548,7 @@ yQ yQ yQ yQ -Gf +RJ kU kU Zy @@ -2589,17 +2589,17 @@ JR JR JR JR -dr -Gf +aK +RJ "} (15,1,1) = {" yQ -Gf -Gf -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ +RJ +RJ kU QP kU @@ -2639,17 +2639,17 @@ JR JR JR JR -dr -Gf +aK +RJ "} (16,1,1) = {" yQ -Gf +RJ rO rO rO rO -Gf +RJ eg eg eg @@ -2681,20 +2681,20 @@ FK CX eY eY -dr -dr +aK +aK JR JR JR JR JR JR -dr -Gf +aK +RJ "} (17,1,1) = {" yQ -Gf +RJ rO BN AU @@ -2730,27 +2730,27 @@ kU FK rz eY -dr -dr -dr +aK +aK +aK JR JR JR JR JR ev -dr -Gf +aK +RJ "} (18,1,1) = {" yQ -Gf -dr +RJ +aK AU AU AU -dr -dr +aK +aK eg Ct oN @@ -2780,27 +2780,27 @@ UO hi CX eY -dr -dr -dr -dr -dr -dr -dr -dr -dr -dr -Gf +aK +aK +aK +aK +aK +aK +aK +aK +aK +aK +RJ "} (19,1,1) = {" -Gf -Gf -dr -dr -dr -dr -GQ -dr +RJ +RJ +aK +aK +aK +aK +wl +aK yX ve Tt @@ -2830,27 +2830,27 @@ kU hi Ok eY -dr -dr -dr -dr -dr -dr -dr -dr -dr -dr -Gf +aK +aK +aK +aK +aK +aK +aK +aK +aK +aK +RJ "} (20,1,1) = {" -Gf -dr -dr -dr -dr -dr -dr -dr +RJ +aK +aK +aK +aK +aK +aK +aK tr uz Mh @@ -2881,25 +2881,25 @@ Ci YP eY eY -dr -dr -dr -dr -dr -dr -dr -dr -dr -Gf +aK +aK +aK +aK +aK +aK +aK +aK +aK +RJ "} (21,1,1) = {" -Gf -dr -dr -dr -dr -dr -zn +RJ +aK +aK +aK +aK +aK +Av BN tr kU @@ -2931,25 +2931,25 @@ hi hi af eY -dr -dr -dr -dr -dr -dr -dr -dr -dr -Gf +aK +aK +aK +aK +aK +aK +aK +aK +aK +RJ "} (22,1,1) = {" -Gf -dr -dr -dr -dr -dr -dr +RJ +aK +aK +aK +aK +aK +aK AU eg eg @@ -2981,24 +2981,24 @@ hi lN QK eY -dr -dr -dr -dr +aK +aK +aK +aK BN -dr -dr -dr -dr -Gf +aK +aK +aK +aK +RJ "} (23,1,1) = {" -Gf -dr -dr -dr -dr -dr +RJ +aK +aK +aK +aK +aK AU AU rO @@ -3031,28 +3031,28 @@ hi hi Nc eY -dr +aK BN AU -dr -dr -dr -dr -dr -dr -Gf +aK +aK +aK +aK +aK +aK +RJ "} (24,1,1) = {" -Gf -Gf -dr -dr -dr +RJ +RJ +aK +aK +aK AU Ez rO rO -Gf +RJ rO rO Vy @@ -3068,8 +3068,8 @@ jv fR cB rO -Gf -Gf +RJ +RJ eg Ry hk @@ -3085,24 +3085,24 @@ rO rO AU AU -dr -dr -dr -dr +aK +aK +aK +aK rO -Gf +RJ "} (25,1,1) = {" yQ -Gf -dr +RJ +aK AU BN AU rO rO -Gf -Gf +RJ +RJ eY Xm TH @@ -3118,8 +3118,8 @@ uP Ge vb eg -Gf -Gf +RJ +RJ eg rO rO @@ -3130,29 +3130,29 @@ eg eg rO rO -Jo -Gf +RI +RJ rO rO rO -Gf -Gf +RJ +RJ rO rO rO -Gf +RJ "} (26,1,1) = {" yQ -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ rO rO -Gf -Gf -Gf +RJ +RJ +RJ eY Bd vL @@ -3168,41 +3168,41 @@ wh Zg Nu eg -Gf -Gf -Gf -Gf -Gf -Gf -Jo -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ +RJ +RJ +RI +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ +RJ "} (27,1,1) = {" yQ yQ yQ yQ -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ yQ -Gf +RJ eY Jl RK @@ -3218,7 +3218,7 @@ bx Cv Nu eg -Gf +RJ yQ yQ yQ @@ -3252,7 +3252,7 @@ yQ yQ yQ yQ -Gf +RJ eY NW UY @@ -3268,7 +3268,7 @@ wq Zg Nu eg -Gf +RJ yQ yQ yQ @@ -3302,7 +3302,7 @@ yQ yQ yQ yQ -Gf +RJ eY xk Te @@ -3318,7 +3318,7 @@ ZI Ex xE eg -Gf +RJ yQ yQ yQ @@ -3352,7 +3352,7 @@ yQ yQ yQ yQ -Gf +RJ eY eY eY @@ -3368,7 +3368,7 @@ xM Qv LU rO -Gf +RJ yQ yQ yQ @@ -3402,11 +3402,11 @@ yQ yQ yQ yQ -Gf -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ +RJ eg Gs jH @@ -3418,7 +3418,7 @@ eg rO rO rO -Gf +RJ yQ yQ yQ @@ -3456,19 +3456,19 @@ yQ yQ yQ yQ -Gf +RJ eg Ok nz IK eg -Gf -Gf -Gf -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ +RJ +RJ +RJ yQ yQ yQ @@ -3506,13 +3506,13 @@ yQ yQ yQ yQ -Gf +RJ rO CX hi Nu -Gf -Gf +RJ +RJ yQ yQ yQ @@ -3556,13 +3556,13 @@ yQ yQ yQ yQ -Gf +RJ rO CX -Gf +RJ Lp eg -Gf +RJ yQ yQ yQ @@ -3606,13 +3606,13 @@ yQ yQ yQ yQ -Gf -Gf +RJ +RJ fl -Gf -Gf -Gf -Gf +RJ +RJ +RJ +RJ yQ yQ yQ @@ -3657,9 +3657,9 @@ yQ yQ yQ yQ -Gf -Gf -Gf +RJ +RJ +RJ yQ yQ yQ diff --git a/_maps/virtual_domains/pirates.dmm b/_maps/virtual_domains/pirates.dmm index 3f6b66d6d4480..31b4c359ba6ae 100644 --- a/_maps/virtual_domains/pirates.dmm +++ b/_maps/virtual_domains/pirates.dmm @@ -1,8 +1,15 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"af" = ( +/obj/structure/flora/rock/pile/style_2, +/turf/open/water/beach, +/area/virtual_domain/protected_space/fullbright) "al" = ( /obj/structure/flora/bush/sunny, /turf/open/misc/grass, /area/virtual_domain/fullbright) +"au" = ( +/turf/open/water/beach, +/area/virtual_domain/protected_space/fullbright) "bb" = ( /obj/effect/turf_decal/weather/sand, /turf/open/floor/wood, @@ -12,20 +19,39 @@ dir = 10 }, /area/virtual_domain/fullbright) -"br" = ( -/obj/structure/flora/grass/jungle/b, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) -"ce" = ( -/obj/structure/flora/rock/pile/style_2, +"be" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/rock/pile, /turf/open/water/beach, +/area/virtual_domain/protected_space) +"bI" = ( +/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/gun/energy/laser/musket{ + pixel_y = -3 + }, +/turf/open/floor/wood, /area/virtual_domain/protected_space/fullbright) -"cT" = ( -/obj/item/gun/energy/laser/hellgun{ - pixel_y = 10 +"cr" = ( +/obj/item/stack/cannonball/shellball{ + pixel_x = 13; + pixel_y = 11 }, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) +/obj/item/stack/cannonball{ + pixel_x = 9; + pixel_y = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/virtual_domain/protected_space/fullbright) "cX" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/item/claymore/cutlass, @@ -41,38 +67,16 @@ 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/protected_space) "dc" = ( /turf/open/misc/beach/coast/corner, /area/virtual_domain/fullbright) -"dp" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) -"dz" = ( -/obj/structure/flora/rock/pile/jungle/large, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) -"dL" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/item/flashlight/flare/torch{ - pixel_y = 10; - pixel_x = 7 - }, -/obj/item/reagent_containers/cup/bucket/wooden{ - pixel_y = -16; - pixel_x = 12 - }, -/obj/machinery/recharger{ - pixel_y = 6; - pixel_x = -5 - }, -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) "dN" = ( /obj/machinery/door/airlock/vault{ color = "#825427"; @@ -80,9 +84,25 @@ }, /turf/open/floor/wood/parquet, /area/virtual_domain) +"eO" = ( +/obj/structure/flora/rock/pile, +/turf/open/water/beach, +/area/virtual_domain/protected_space/fullbright) +"eP" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/misc/beach/coast{ + dir = 6 + }, +/area/virtual_domain/protected_space) "eS" = ( /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) +"fd" = ( +/obj/structure/flora/grass/jungle/b, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "fh" = ( /obj/structure/flora/bush/sparsegrass, /obj/structure/flora/bush/lavendergrass, @@ -92,10 +112,20 @@ /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/protected_space/fullbright) "fR" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, /area/virtual_domain/fullbright) +"gc" = ( +/obj/structure/flora/rock/pile/jungle/style_2, +/obj/effect/baseturf_helper/virtual_domain, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "gf" = ( /obj/effect/turf_decal/weather/sand{ dir = 5 @@ -121,36 +151,29 @@ icon_state = "wood_large" }, /area/virtual_domain/fullbright) +"gD" = ( +/obj/item/flashlight/flare/torch, +/turf/open/misc/beach/sand, +/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) -"gN" = ( -/obj/structure/fermenting_barrel/gunpowder{ - pixel_x = -4; - pixel_y = 17 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) -"ha" = ( -/turf/closed/mineral/random/jungle, -/area/virtual_domain/protected_space) "hb" = ( /turf/closed/indestructible/binary, /area/virtual_domain/fullbright) -"hp" = ( -/obj/effect/turf_decal/weather/dirt, -/turf/open/water/beach, -/area/virtual_domain/protected_space) -"hx" = ( +"hn" = ( /obj/effect/turf_decal/weather/dirt{ - dir = 1 + dir = 4 }, -/obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, /area/virtual_domain/protected_space) +"hq" = ( +/obj/structure/closet/crate/grave, +/obj/structure/flora/grass/jungle/b, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "jp" = ( /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/misc/beach/sand, @@ -167,25 +190,6 @@ /obj/structure/flora/bush/fullgrass/style_random, /turf/open/misc/grass, /area/virtual_domain/fullbright) -"ki" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/turf/open/water/beach, -/area/virtual_domain/protected_space) -"kl" = ( -/obj/structure/flora/bush/sunny/style_3{ - pixel_y = 22 - }, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) -"kE" = ( -/obj/structure/flora/grass/jungle/b/style_random{ - pixel_x = -13; - pixel_y = 18 - }, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) "lF" = ( /obj/structure/table/wood, /obj/item/melee/energy/sword/pirate{ @@ -216,29 +220,50 @@ /obj/effect/decal/cleanable/oil/streak, /turf/open/floor/wood, /area/virtual_domain/fullbright) -"lM" = ( -/obj/structure/flora/rock/pile/style_3, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) "mp" = ( /turf/open/misc/beach/coast{ dir = 4 }, /area/virtual_domain/fullbright) -"na" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/structure/flora/rock/pile, -/turf/open/water/beach, -/area/virtual_domain/protected_space) +"nb" = ( +/obj/structure/fermenting_barrel{ + pixel_x = 6; + pixel_y = 11 + }, +/obj/effect/turf_decal/weather/sand{ + dir = 9 + }, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate, +/turf/open/floor/wood{ + icon_state = "wood_large" + }, +/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/protected_space/fullbright) +"nQ" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/virtual_domain/protected_space/fullbright) +"oB" = ( +/obj/structure/flora/grass/jungle, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "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 + }, +/turf/open/floor/wood, +/area/virtual_domain/protected_space/fullbright) "pi" = ( /obj/structure/flora/rock/style_3, /turf/open/water/beach, @@ -247,28 +272,25 @@ /obj/structure/flora/bush/flowers_br/style_random, /turf/open/misc/grass, /area/virtual_domain/fullbright) +"ps" = ( +/obj/machinery/smartfridge/drying/rack, +/turf/open/misc/beach/sand, +/area/virtual_domain/fullbright) +"py" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/protected_space/fullbright) +"qk" = ( +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "qE" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/ordnance, /turf/open/floor/carpet/blue, /area/virtual_domain) -"qR" = ( -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) "qS" = ( /obj/effect/decal/cleanable/ants, /turf/open/misc/grass, /area/virtual_domain/fullbright) -"qT" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 1 - }, -/turf/open/water/beach, -/area/virtual_domain/protected_space) -"qV" = ( -/obj/machinery/smartfridge/drying/rack, -/turf/open/misc/beach/sand, -/area/virtual_domain/fullbright) "ri" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -277,6 +299,29 @@ /mob/living/basic/trooper/pirate/ranged/space, /turf/open/floor/carpet/blue, /area/virtual_domain) +"rm" = ( +/obj/structure/closet/crate/goldcrate, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) +"rn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/flashlight/flare/torch{ + pixel_y = 10; + pixel_x = 7 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_y = -16; + pixel_x = 12 + }, +/obj/machinery/recharger{ + pixel_y = 6; + pixel_x = -5 + }, +/turf/open/floor/wood, +/area/virtual_domain/protected_space/fullbright) "ru" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt/dust, @@ -288,16 +333,13 @@ /obj/item/toy/plush/beeplushie, /turf/open/floor/wood, /area/virtual_domain/fullbright) +"sb" = ( +/turf/open/water/beach, +/area/virtual_domain/protected_space) "sj" = ( /obj/effect/mine/explosive/light, /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) -"sH" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) "td" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/landmark/bitrunning/cache_spawn, @@ -308,6 +350,9 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood/parquet, /area/virtual_domain) +"tA" = ( +/turf/closed/mineral/random/jungle, +/area/virtual_domain/protected_space) "tH" = ( /obj/structure/closet/cabinet, /obj/item/clothing/head/costume/pirate/armored, @@ -324,10 +369,6 @@ icon_state = "wood_large" }, /area/virtual_domain/fullbright) -"tR" = ( -/obj/effect/landmark/bitrunning/cache_spawn, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) "ub" = ( /turf/template_noop, /area/virtual_domain/safehouse) @@ -360,33 +401,12 @@ icon_state = "wood_large" }, /area/virtual_domain/fullbright) -"uS" = ( -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) -"vo" = ( -/obj/structure/closet/crate/grave, -/obj/structure/flora/grass/jungle/b, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) -"vX" = ( -/obj/item/stack/cannonball/shellball{ - pixel_x = 13; - pixel_y = 11 - }, -/obj/item/stack/cannonball{ - pixel_x = 9; - pixel_y = 9 +"vR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 }, -/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/virtual_domain/protected_space/fullbright) -"wf" = ( -/obj/structure/flora/rock/pile/jungle/style_3{ - pixel_x = -15; - pixel_y = -4 - }, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) "wj" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -395,22 +415,17 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/wood, /area/virtual_domain/fullbright) -"wn" = ( -/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 +"wu" = ( +/obj/structure/flora/grass/jungle/b{ + pixel_x = -15; + pixel_y = 9 }, -/obj/item/gun/energy/laser/musket{ - pixel_y = -3 +/obj/structure/flora/rock/pile/jungle/large/style_2{ + pixel_x = -3; + pixel_y = -1 }, -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "wH" = ( /obj/structure/fluff/beach_umbrella{ pixel_x = -7; @@ -434,14 +449,32 @@ "xp" = ( /turf/open/water/beach, /area/virtual_domain/fullbright) +"yF" = ( +/obj/effect/light_emitter{ + set_cap = 3; + set_luminosity = 5 + }, +/turf/open/misc/beach/coast, +/area/virtual_domain/fullbright) +"zc" = ( +/obj/item/gun/energy/laser/hellgun{ + pixel_y = 10 + }, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "zj" = ( /obj/effect/mapping_helpers/burnt_floor, /obj/effect/decal/cleanable/garbage, /turf/open/floor/wood, /area/virtual_domain/fullbright) -"zA" = ( +"zk" = ( /obj/effect/turf_decal/siding/wood, -/obj/effect/mapping_helpers/broken_floor, +/obj/item/melee/sabre{ + pixel_y = 12; + pixel_x = -10 + }, +/obj/item/gun/energy/laser/retro, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/virtual_domain/protected_space/fullbright) "zR" = ( @@ -501,26 +534,15 @@ /obj/structure/bonfire/prelit, /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) -"Ca" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/closed/indestructible/binary, -/area/virtual_domain/protected_space/fullbright) +"BX" = ( +/obj/structure/flora/bush/sunny/style_3{ + pixel_y = 22 + }, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "Ci" = ( /turf/closed/wall/mineral/wood/nonmetal, /area/virtual_domain/fullbright) -"Cq" = ( -/obj/structure/fermenting_barrel{ - pixel_x = 6; - pixel_y = 11 - }, -/obj/effect/turf_decal/weather/sand{ - dir = 9 - }, -/obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate, -/turf/open/floor/wood{ - icon_state = "wood_large" - }, -/area/virtual_domain/fullbright) "Cu" = ( /obj/item/kirbyplants/organic/plant21{ pixel_x = -8 @@ -530,40 +552,18 @@ }, /turf/open/floor/wood/parquet, /area/virtual_domain) +"CL" = ( +/obj/structure/flora/rock/pile/jungle/large, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) +"Dd" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, +/area/virtual_domain/protected_space/fullbright) "DM" = ( /turf/closed/mineral/random/jungle, /area/virtual_domain/fullbright) -"DT" = ( -/obj/item/clothing/suit/armor/militia{ - pixel_x = -5; - pixel_y = 12 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/item/clothing/suit/armor/militia{ - pixel_x = -5; - pixel_y = 6 - }, -/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/protected_space/fullbright) "Eb" = ( /obj/structure/flora/tree/palm, /turf/open/misc/beach/sand, @@ -595,6 +595,10 @@ icon_state = "wood_large" }, /area/virtual_domain/fullbright) +"Gl" = ( +/obj/structure/flora/rock/pile/style_3, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "Gy" = ( /obj/structure/flora/rock/style_2, /turf/open/water/beach, @@ -610,24 +614,20 @@ }, /turf/open/floor/carpet/blue, /area/virtual_domain) -"Ic" = ( +"Iv" = ( +/obj/structure/flora/rock/style_3, +/turf/open/water/beach, +/area/virtual_domain/protected_space/fullbright) +"ID" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) +"IW" = ( /obj/effect/turf_decal/weather/dirt{ dir = 5 }, /turf/open/water/beach, /area/virtual_domain/protected_space) -"In" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) -"Io" = ( -/obj/effect/light_emitter{ - set_cap = 3; - set_luminosity = 5 - }, -/turf/open/misc/beach/coast, -/area/virtual_domain/fullbright) "Jf" = ( /obj/structure/flora/bush/sparsegrass, /turf/open/misc/grass, @@ -646,10 +646,6 @@ /obj/structure/bed/double, /turf/open/floor/carpet/blue, /area/virtual_domain) -"JF" = ( -/obj/structure/flora/rock, -/turf/open/water/beach, -/area/virtual_domain/protected_space/fullbright) "JK" = ( /obj/structure/flora/bush/stalky{ pixel_y = 13; @@ -662,9 +658,9 @@ dir = 1 }, /area/virtual_domain/fullbright) -"Ka" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/wood, +"KP" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, /area/virtual_domain/protected_space/fullbright) "KS" = ( /obj/effect/turf_decal/siding/wood{ @@ -674,33 +670,41 @@ /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/floor/carpet/blue, /area/virtual_domain) -"KW" = ( -/obj/structure/flora/grass/jungle, +"KU" = ( +/obj/effect/light_emitter{ + set_cap = 3; + set_luminosity = 5 + }, +/turf/open/water/beach, +/area/virtual_domain/fullbright) +"KV" = ( +/obj/structure/flora/rock/pile/jungle/style_3{ + pixel_x = -15; + pixel_y = -4 + }, /turf/open/misc/dirt/jungle, /area/virtual_domain/protected_space) +"Li" = ( +/turf/closed/mineral/random/jungle, +/area/virtual_domain/protected_space/fullbright) "LC" = ( /mob/living/basic/trooper/pirate/melee, /turf/open/misc/grass, /area/virtual_domain/fullbright) -"LO" = ( -/obj/effect/light_emitter{ - set_cap = 3; - set_luminosity = 5 +"LK" = ( +/obj/structure/fermenting_barrel/gunpowder{ + pixel_x = -4; + pixel_y = 17 }, -/turf/open/water/beach, -/area/virtual_domain/fullbright) +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/virtual_domain/protected_space/fullbright) "LP" = ( /obj/effect/turf_decal/weather/sand{ dir = 5 }, /turf/open/floor/wood, /area/virtual_domain/fullbright) -"LX" = ( -/turf/closed/wall/mineral/wood/nonmetal, -/area/virtual_domain/protected_space/fullbright) -"Mc" = ( -/turf/closed/indestructible/binary, -/area/virtual_domain/protected_space/fullbright) "Mf" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood{ @@ -711,24 +715,12 @@ /obj/structure/barricade/sandbags, /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) -"MJ" = ( -/obj/structure/closet/crate/goldcrate, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) -"MO" = ( -/obj/effect/turf_decal/weather/dirt, -/obj/effect/turf_decal/weather/dirt, -/turf/open/water/beach, -/area/virtual_domain/protected_space) "MP" = ( /obj/effect/turf_decal/weather/sand{ dir = 4 }, /turf/open/floor/wood, /area/virtual_domain/fullbright) -"Nx" = ( -/turf/open/water/beach, -/area/virtual_domain/protected_space) "NE" = ( /obj/effect/mob_spawn/corpse/human/damaged, /turf/open/water/beach, @@ -745,6 +737,17 @@ icon_state = "wood_large" }, /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/protected_space) +"Oi" = ( +/obj/effect/mob_spawn/corpse/human/pirate, +/turf/open/misc/dirt/jungle, +/area/virtual_domain/protected_space) "Ov" = ( /turf/open/misc/beach/coast{ dir = 6 @@ -757,31 +760,17 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/blue, /area/virtual_domain) -"OB" = ( -/obj/structure/flora/grass/jungle/b{ - pixel_x = -15; - pixel_y = 9 - }, -/obj/structure/flora/rock/pile/jungle/large/style_2{ - pixel_x = -3; - pixel_y = -1 - }, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) "OD" = ( /obj/effect/turf_decal/weather/sand{ dir = 6 }, /turf/open/floor/wood, /area/virtual_domain/fullbright) -"OE" = ( -/obj/effect/mob_spawn/corpse/human/pirate, -/turf/open/misc/dirt/jungle, -/area/virtual_domain/protected_space) -"OS" = ( -/obj/structure/flora/rock/pile/jungle/style_2, -/obj/effect/baseturf_helper/virtual_domain, -/turf/open/misc/dirt/jungle, +"OW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/water/beach, /area/virtual_domain/protected_space) "Qc" = ( /obj/effect/mapping_helpers/broken_floor, @@ -789,10 +778,15 @@ icon_state = "wood_large" }, /area/virtual_domain/fullbright) -"QJ" = ( -/obj/structure/flora/rock/pile, +"QF" = ( +/obj/effect/turf_decal/weather/dirt, /turf/open/water/beach, -/area/virtual_domain/protected_space/fullbright) +/area/virtual_domain/protected_space) +"QG" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt, +/turf/open/water/beach, +/area/virtual_domain/protected_space) "QN" = ( /obj/structure/barricade/sandbags, /obj/effect/turf_decal/weather/sand{ @@ -810,14 +804,37 @@ /obj/effect/mob_spawn/corpse/human/pirate/melee, /turf/open/water/beach, /area/virtual_domain/fullbright) -"RC" = ( -/obj/effect/turf_decal/weather/dirt{ - dir = 4 +"QX" = ( +/obj/item/clothing/suit/armor/militia{ + pixel_x = -5; + pixel_y = 12 }, -/turf/open/misc/beach/coast{ - dir = 6 +/obj/effect/turf_decal/siding/wood{ + dir = 1 }, -/area/virtual_domain/protected_space) +/obj/item/clothing/suit/armor/militia{ + pixel_x = -5; + pixel_y = 6 + }, +/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/protected_space/fullbright) "RJ" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -849,9 +866,6 @@ }, /turf/open/floor/wood, /area/virtual_domain/fullbright) -"SE" = ( -/turf/open/water/beach, -/area/virtual_domain/protected_space/fullbright) "SK" = ( /turf/open/misc/beach/coast, /area/virtual_domain/fullbright) @@ -865,16 +879,6 @@ }, /turf/open/floor/wood, /area/virtual_domain/fullbright) -"SZ" = ( -/obj/effect/turf_decal/siding/wood, -/obj/item/melee/sabre{ - pixel_y = 12; - pixel_x = -10 - }, -/obj/item/gun/energy/laser/retro, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) "Ta" = ( /obj/structure/flora/bush/flowers_pp, /turf/open/misc/grass, @@ -891,17 +895,26 @@ /obj/structure/bookcase/random/fiction, /turf/open/floor/wood/parquet, /area/virtual_domain) -"TT" = ( -/obj/structure/flora/rock/style_3, -/turf/open/water/beach, -/area/virtual_domain/protected_space/fullbright) "Ul" = ( /turf/closed/wall/mineral/wood/nonmetal, /area/virtual_domain) +"Uw" = ( +/obj/structure/cannon{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/virtual_domain/protected_space/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/protected_space/fullbright) "VG" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -909,13 +922,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/blue, /area/virtual_domain) -"VI" = ( -/obj/item/flashlight/flare/torch, -/turf/open/misc/beach/sand, -/area/virtual_domain/fullbright) -"VP" = ( -/turf/closed/mineral/random/jungle, -/area/virtual_domain/protected_space/fullbright) "Wu" = ( /obj/structure/fermenting_barrel/gunpowder{ pixel_x = -4; @@ -937,6 +943,10 @@ }, /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) +"Wx" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/virtual_domain/protected_space/fullbright) "Xn" = ( /obj/modular_map_root/safehouse{ key = "wood" @@ -947,15 +957,6 @@ /obj/structure/barricade/wooden/crude, /turf/closed/wall/mineral/wood/nonmetal, /area/virtual_domain/fullbright) -"XR" = ( -/obj/structure/cannon{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) "XW" = ( /obj/effect/mob_spawn/corpse/human/pirate, /turf/open/misc/beach/coast{ @@ -971,6 +972,9 @@ /obj/effect/decal/cleanable/blood/gibs/old, /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) +"Yy" = ( +/turf/open/floor/wood, +/area/virtual_domain/protected_space/fullbright) "YJ" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -1016,10 +1020,6 @@ }, /turf/open/floor/wood, /area/virtual_domain/fullbright) -"ZR" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/virtual_domain/protected_space/fullbright) (1,1,1) = {" xg @@ -1268,10 +1268,10 @@ DM hb hb fR -Mc -Mc -Mc -Mc +py +py +py +py xg xg xg @@ -1312,10 +1312,10 @@ DM hb hb DM -VP -VP -VP -Mc +Li +Li +Li +py xg xg xg @@ -1356,10 +1356,10 @@ sj hb hb DM -VP -VP -VP -Mc +Li +Li +Li +py xg xg xg @@ -1400,13 +1400,13 @@ mp Ov xp xp -SE -SE -SE -Mc -Mc -Mc -Mc +au +au +au +py +py +py +py xg xg xg @@ -1444,15 +1444,15 @@ xp xp xp NE -SE -SE -SE -SE -SE -LX -Mc -Mc -Mc +au +au +au +au +au +nQ +py +py +py xg xg xg @@ -1488,22 +1488,22 @@ xp xp xp Gy -SE -SE -SE -SE -SE -LX -wn -Ka -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Ca +au +au +au +au +au +nQ +bI +VE +py +py +py +py +py +py +py +KP "} (12,1,1) = {" xg @@ -1532,22 +1532,22 @@ xp xp xp xp -SE -SE -SE -SE -JF -LX -dL -Ka -In +au +au +au +au +nN +nQ +rn +VE +fw ub ub ub ub ub Xn -Mc +py "} (13,1,1) = {" hb @@ -1576,22 +1576,22 @@ xp xp xp xp -SE -SE -SE -SE -TT -LX -DT -uS -SZ +au +au +au +au +Iv +nQ +QX +Yy +zk ub ub ub ub ub ub -Mc +py "} (14,1,1) = {" hb @@ -1601,7 +1601,7 @@ Ul Ul Ul Hn -qV +ps eS eS eS @@ -1620,22 +1620,22 @@ xp xp xp xp -SE -SE -SE -SE -SE -LX -LX -uS -zA +au +au +au +au +au +nQ +nQ +Yy +Dd ub ub ub ub ub ub -Mc +py "} (15,1,1) = {" hb @@ -1664,22 +1664,22 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -SE -SE -ZR +au +au +au +au +au +au +au +au +Wx ub ub ub ub ub ub -Mc +py "} (16,1,1) = {" hb @@ -1708,22 +1708,22 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -SE -SE -SE +au +au +au +au +au +au +au +au +au ub ub ub ub ub ub -Mc +py "} (17,1,1) = {" hb @@ -1752,22 +1752,22 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -SE -SE -SE +au +au +au +au +au +au +au +au +au ub ub ub ub ub ub -Mc +py "} (18,1,1) = {" hb @@ -1778,7 +1778,7 @@ BU td Ul Ci -Cq +nb Mf gx tQ @@ -1796,22 +1796,22 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -SE -ZR -SE +au +au +au +au +au +au +au +Wx +au ub ub ub ub ub zR -Mc +py "} (19,1,1) = {" hb @@ -1840,22 +1840,22 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -LX -In -SE -SE -SE -SE -SE -SE -Mc -Mc +au +au +au +au +au +au +nQ +fw +au +au +au +au +au +au +py +py "} (20,1,1) = {" hb @@ -1884,21 +1884,21 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -XR -vX -dp -SE -SE -SE -SE -SE -Mc +au +au +au +au +au +au +Uw +cr +vR +au +au +au +au +au +py xg "} (21,1,1) = {" @@ -1928,21 +1928,21 @@ xp xp xp xp -SE -SE -SE -SE -SE -ce -LX -gN -In -SE -SE -SE -SE -SE -Mc +au +au +au +au +au +af +nQ +LK +fw +au +au +au +au +au +py xg "} (22,1,1) = {" @@ -1972,21 +1972,21 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -sH -Ka -QJ -SE -SE -SE -SE -SE -Mc +au +au +au +au +au +au +oM +VE +eO +au +au +au +au +au +py xg "} (23,1,1) = {" @@ -2016,21 +2016,21 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -SE -SE -SE -SE -SE -SE -VP -VP -Mc +au +au +au +au +au +au +au +au +au +au +au +au +Li +Li +py xg "} (24,1,1) = {" @@ -2060,21 +2060,21 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -SE -SE -SE -SE -SE -SE -VP -VP -Mc +au +au +au +au +au +au +au +au +au +au +au +au +Li +Li +py xg "} (25,1,1) = {" @@ -2094,9 +2094,9 @@ eS eS nr eS -VI -Io -LO +gD +yF +KU xp xp xp @@ -2104,21 +2104,21 @@ xp xp xp xp -SE -SE -SE -SE -SE -SE -SE -SE -SE -SE -SE -VP -VP -VP -Mc +au +au +au +au +au +au +au +au +au +au +au +Li +Li +Li +py xg "} (26,1,1) = {" @@ -2137,32 +2137,32 @@ DM DM DM DM -ha -ha -RC -Nx -ha -ha +tA +tA +eP +sb +tA +tA hb hb xp xp xp -SE -SE -SE -SE -SE -SE -SE -SE -SE -Mc -VP -VP -VP -VP -Mc +au +au +au +au +au +au +au +au +au +py +Li +Li +Li +Li +py xg "} (27,1,1) = {" @@ -2182,31 +2182,31 @@ DM DM DM DM -ha -br -qT -ha +tA +fd +OW +tA DM DM hb hb xp xp -SE -SE -SE -SE -SE -SE -SE -SE -Mc -Mc -VP -VP -VP -Mc -Mc +au +au +au +au +au +au +au +au +py +py +Li +Li +Li +py +py xg "} (28,1,1) = {" @@ -2226,30 +2226,30 @@ DM DM DM DM -ha -wf -qT -ha -ha +tA +KV +OW +tA +tA DM DM hb hb hb -Mc -SE -SE -SE -SE -SE -SE -Mc -Mc -Mc -Mc -Mc -Mc -Mc +py +au +au +au +au +au +au +py +py +py +py +py +py +py xg xg "} @@ -2270,24 +2270,24 @@ DM DM DM DM -ha -qR -Ic -Nx -ha -ha -ha +tA +qk +IW +sb +tA +tA +tA DM DM DM -Mc -Mc -Mc -Mc -Mc -Mc -Mc -Mc +py +py +py +py +py +py +py +py xg xg xg @@ -2314,16 +2314,16 @@ DM DM DM DM -ha -lM -qR -Ic -ki -Nx -ha -ha -ha -ha +tA +Gl +qk +IW +hn +sb +tA +tA +tA +tA DM hb hb @@ -2358,17 +2358,17 @@ hb DM DM DM -ha -ha -qR -qR -OE -qT -Nx -na -OS -ha -ha +tA +tA +qk +qk +Oi +OW +sb +be +gc +tA +tA DM hb hb @@ -2403,17 +2403,17 @@ hb DM DM DM -ha -ha -qR -dz -Ic -Nx -MO -qR -MJ -ha -ha +tA +tA +qk +CL +IW +sb +QG +qk +rm +tA +tA DM hb xg @@ -2448,16 +2448,16 @@ hb DM DM DM -ha -KW -qR -OB -Ic -hp -kl -qR -MJ -ha +tA +oB +qk +wu +IW +QF +BX +qk +rm +tA DM hb xg @@ -2492,16 +2492,16 @@ hb hb DM DM -ha -ha -qR -qR -kE -hx -vo -cT -tR -ha +tA +tA +qk +qk +NU +db +hq +zc +ID +tA DM hb xg @@ -2537,15 +2537,15 @@ hb hb hb DM -ha -ha -ha -ha -ha -ha -ha -ha -ha +tA +tA +tA +tA +tA +tA +tA +tA +tA DM hb xg diff --git a/_maps/virtual_domains/syndicate_assault.dmm b/_maps/virtual_domains/syndicate_assault.dmm index 003a4aee7fb24..d8c63675d77b2 100644 --- a/_maps/virtual_domains/syndicate_assault.dmm +++ b/_maps/virtual_domains/syndicate_assault.dmm @@ -1,4 +1,17 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aq" = ( +/obj/item/storage/backpack/duffelbag/syndie/surgery, +/obj/structure/table/reinforced, +/turf/open/floor/plastic, +/area/virtual_domain) +"aw" = ( +/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/virtual_domain) "aN" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") @@ -14,67 +27,131 @@ /obj/item/stack/rods/fifty, /turf/open/floor/pod/dark, /area/virtual_domain/protected_space) -"aV" = ( -/obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +"aO" = ( +/obj/machinery/recharge_station, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"bc" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/closed/wall/r_wall/syndicate, +"bh" = ( +/turf/open/floor/carpet/royalblack, /area/virtual_domain) -"bl" = ( -/obj/machinery/computer/operating, -/turf/open/floor/plastic, +"bD" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) "bG" = ( /turf/open/floor/pod/dark, /area/virtual_domain/protected_space) -"bN" = ( +"cc" = ( +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate") + }, +/obj/effect/spawner/random/clothing/costume, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) "cj" = ( /obj/structure/transit_tube/crossing, /turf/closed/wall/r_wall/syndicate, /area/virtual_domain/protected_space) -"cr" = ( -/obj/machinery/power/shuttle_engine/propulsion{ - dir = 8 +"ct" = ( +/obj/structure/closet/syndicate{ + anchored = 1; + desc = "A basic closet for all your villainous needs."; + locked = 1; + name = "Closet"; + req_access = list("syndicate"); + secure = 1 }, -/turf/open/space/basic, +/obj/item/gun/ballistic/automatic/pistol, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"cA" = ( -/obj/structure/table/reinforced, -/obj/item/paper/fluff/ruins/forgottenship/missionobj, +"cw" = ( +/obj/structure/closet/syndicate{ + anchored = 1; + desc = "A basic closet for all your villainous needs."; + locked = 1; + name = "Closet"; + req_access = list("syndicate"); + secure = 1 + }, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/under/syndicate/skirt, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) +"cy" = ( +/obj/machinery/door/airlock/grunge{ + name = "Syndicate Ship Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) +"cB" = ( +/obj/machinery/camera/xray{ + c_tag = "Medbay"; + dir = 6; + network = list("fsci"); + screen_loc = "" + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"cR" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet/royalblack, +/area/virtual_domain) "cZ" = ( /obj/structure/table/reinforced, /obj/item/gun/ballistic/automatic/l6_saw/unrestricted, /obj/item/ammo_box/magazine/m7mm, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) +"da" = ( +/obj/machinery/stasis, +/turf/open/floor/plastic, +/area/virtual_domain) +"dd" = ( +/obj/structure/sign/warning/vacuum/external, +/turf/closed/wall/r_wall/syndicate, +/area/virtual_domain) +"di" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/obj/item/paper/fluff/ruins/forgottenship/powerissues, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) "dp" = ( /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"dq" = ( -/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie, +"dw" = ( +/obj/machinery/light/small/directional/south, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"dx" = ( -/obj/structure/sign/poster/contraband/syndicate_pistol, -/turf/closed/wall/r_wall/syndicate, -/area/virtual_domain) -"dD" = ( -/turf/open/floor/carpet/royalblack, +"dz" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"dQ" = ( -/turf/closed/mineral, -/area/ruin/space/virtual_domain) -"eu" = ( -/turf/open/space/basic, +"dU" = ( +/obj/structure/cable, +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external/ruin{ + name = "Syndicate Ship Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) "eB" = ( /obj/machinery/camera/xray{ @@ -92,91 +169,63 @@ /obj/item/card/id/advanced/black/syndicate_command/crew_id, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"eH" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/carpet/royalblack, -/area/virtual_domain) -"eQ" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) "fd" = ( /obj/structure/transit_tube/crossing, /turf/open/space/basic, /area/virtual_domain/protected_space) -"fs" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/mineral/plastitanium/red, +"fG" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, /area/virtual_domain) -"fR" = ( -/obj/structure/chair/comfy/shuttle, +"fJ" = ( +/obj/machinery/light/small/directional/north, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"fW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump{ - dir = 4 - }, +"fV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"gW" = ( -/obj/structure/sign/poster/contraband/syndicate_recruitment, -/turf/closed/wall/r_wall/syndicate, +"gD" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"hb" = ( -/obj/structure/table/reinforced, +"hg" = ( +/obj/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "fslockdown"; + name = "Ship Blast Door"; + state_open = 1 + }, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"hi" = ( +"hy" = ( /obj/structure/table/reinforced, -/turf/open/floor/mineral/plastitanium/red, -/area/virtual_domain) -"hm" = ( -/obj/machinery/light/directional/north, +/obj/item/paper/fluff/ruins/forgottenship/missionobj, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"hn" = ( -/obj/structure/closet/syndicate{ - anchored = 1; - desc = "A basic closet for all your villainous needs."; - locked = 1; - name = "Closet"; - req_access = list("syndicate"); - secure = 1 - }, -/obj/item/ammo_box/c9mm, -/obj/item/gun/ballistic/automatic/pistol, -/turf/open/floor/mineral/plastitanium/red, +"hA" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/wall/r_wall/syndicate, /area/virtual_domain) -"hr" = ( -/turf/open/floor/plastic, +"hD" = ( +/obj/structure/table/reinforced, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"hw" = ( -/obj/machinery/stasis, +"ip" = ( +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/plastic, /area/virtual_domain) -"hM" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/virtual_domain) -"hY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 10 - }, -/obj/item/wrench, +"iB" = ( +/obj/machinery/light/directional/north, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) "iL" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall/r_wall/syndicate, /area/virtual_domain/protected_space) -"iT" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/syndicate_access, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) "iU" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") @@ -185,46 +234,72 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/pod/dark, /area/virtual_domain/protected_space) -"jt" = ( +"iW" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "fslockdown"; + name = "Window shutters"; + req_access = list("syndicate") + }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"jv" = ( -/obj/structure/cable, +"iX" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/turf/open/floor/mineral/plastitanium/red, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"jw" = ( -/obj/item/ai_module/core/full/cybersun, -/obj/structure/table/reinforced, +"ja" = ( +/obj/machinery/door/window/left/directional/north{ + name = "Spare Equipment"; + req_access = list("syndicate") + }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"jW" = ( -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +"jl" = ( +/obj/structure/bodycontainer/crematorium{ + id = "fscremate" + }, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"kx" = ( -/obj/structure/closet/syndicate{ - anchored = 1; - desc = "A basic closet for all your villainous needs."; - locked = 1; - name = "Closet"; - req_access = list("syndicate"); - secure = 1 - }, -/obj/item/crowbar/red, -/obj/item/ammo_box/magazine/m9mm, -/obj/item/ammo_box/magazine/m9mm, -/obj/item/gun/ballistic/automatic/pistol, +"jA" = ( +/obj/structure/cable, +/mob/living/basic/trooper/syndicate/melee/space/stormtrooper, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"kA" = ( -/obj/machinery/power/port_gen/pacman/super{ - anchored = 1 +"jJ" = ( +/obj/machinery/door/airlock/grunge{ + name = "Syndicate Ship Airlock" }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/virtual_domain) +"kh" = ( +/obj/machinery/door/airlock/grunge{ + name = "Syndicate Ship Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"kI" = ( +/obj/machinery/computer/atmos_alert{ + dir = 8 + }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) "kJ" = ( @@ -233,135 +308,93 @@ }, /turf/template_noop, /area/virtual_domain/safehouse) -"kK" = ( -/obj/structure/window/reinforced/plasma/plastitanium, -/obj/machinery/door/poddoor{ - id = "fslockdown"; - name = "Ship Blast Door"; - state_open = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"lh" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) "li" = ( /obj/structure/transit_tube/station/dispenser/reverse{ dir = 4 }, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"lB" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 +"ln" = ( +/obj/machinery/turretid{ + control_area = "/area/ruin/space/has_grav/syndicate_forgotten_ship"; + enabled = 0; + icon_state = "control_kill"; + lethal = 1; + name = "Ship turret control panel"; + pixel_y = 32; + req_access = list("syndicate") }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"lI" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 +"lo" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external/ruin{ + name = "Syndicate Ship Airlock" }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) +"lN" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"mo" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) "mA" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"mG" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "fslockdown"; - name = "Window shutters"; - req_access = list("syndicate") +"mD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 10 }, +/obj/item/wrench, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) "mL" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"mR" = ( -/turf/closed/indestructible/binary, -/area/virtual_domain/fullbright) -"nd" = ( -/obj/structure/table/reinforced, -/obj/item/toy/plush/nukeplushie, -/turf/open/floor/mineral/plastitanium/red, +"nk" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) "nn" = ( /turf/closed/mineral/random, /area/virtual_domain/protected_space) -"nz" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/virtual_domain) -"nC" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"nV" = ( -/obj/machinery/power/shuttle_engine/huge{ - dir = 8 - }, -/turf/open/space/basic, -/area/virtual_domain) -"od" = ( -/obj/structure/table/reinforced, -/obj/item/paper, -/obj/item/pen, -/obj/machinery/computer/security/telescreen/forgotten_ship/sci/directional/south, -/turf/open/floor/carpet/royalblack, -/area/virtual_domain) -"oo" = ( -/obj/effect/landmark/bitrunning/mob_segment, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"or" = ( -/obj/machinery/power/smes, -/obj/structure/cable, +"nB" = ( +/turf/closed/mineral/random, +/area/ruin/space/virtual_domain) +"nG" = ( +/obj/machinery/light/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"os" = ( -/obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/plating, +"nU" = ( +/obj/structure/sign/poster/contraband/syndicate_pistol, +/turf/closed/wall/r_wall/syndicate, /area/virtual_domain) -"pD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ - dir = 8 - }, +"og" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/glass/trophy/silver_cup, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"pI" = ( -/obj/effect/landmark/bitrunning/mob_segment, -/turf/open/floor/plastic, -/area/virtual_domain) -"qd" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/syndicate_access, +"oM" = ( /obj/structure/cable, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"qh" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ - dir = 4 +"pl" = ( +/obj/machinery/atmospherics/components/tank/air{ + dir = 8 }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"qr" = ( +"pz" = ( /obj/machinery/computer/security{ desc = "Used to access interrogation room camera."; dir = 8; @@ -371,16 +404,62 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"qR" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie, -/turf/open/floor/mineral/plastitanium, +"pH" = ( +/obj/structure/table/reinforced, +/obj/item/toy/plush/nukeplushie, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) +"pM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) +"pS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 6 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) +"pU" = ( +/obj/machinery/shower/directional/north, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/virtual_domain) +"qf" = ( +/obj/structure/table/optable, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plastic, /area/virtual_domain) +"qx" = ( +/turf/open/space/basic, +/area/space/virtual_domain) "qU" = ( /obj/structure/sign/poster/contraband/c20r, /turf/closed/wall/r_wall/syndicate, /area/virtual_domain/protected_space) -"rh" = ( +"qY" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"rm" = ( +/obj/machinery/button/crematorium{ + id = "fscremate"; + pixel_x = -32 + }, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"ru" = ( +/turf/closed/wall/r_wall/syndicate, +/area/virtual_domain) +"rH" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/syndicate_access, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"rM" = ( /obj/structure/closet/syndicate{ anchored = 1; desc = "A basic closet for all your villainous needs."; @@ -389,57 +468,42 @@ req_access = list("syndicate"); secure = 1 }, -/obj/item/gun/ballistic/automatic/pistol, +/obj/effect/spawner/random/contraband/armory, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"rq" = ( -/obj/structure/sink/directional/south, -/obj/structure/mirror/directional/west, -/turf/open/floor/iron/dark, -/area/virtual_domain) -"rG" = ( -/obj/machinery/porta_turret/syndicate/energy{ - dir = 4; - name = "Syndicate Ship Turret"; - on = 0; - shot_delay = 10 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/virtual_domain) -"rI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 9 - }, -/obj/effect/landmark/bitrunning/mob_segment, -/turf/open/floor/mineral/plastitanium/red, +"rP" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) "sg" = ( /obj/machinery/ore_silo, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"sk" = ( -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 +"sq" = ( +/obj/machinery/door/window/left/directional/south{ + name = "Control Room"; + req_access = list("syndicate") }, -/turf/open/floor/mineral/plastitanium, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"sm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ +"sz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4 }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"ss" = ( -/obj/machinery/power/terminal{ - dir = 1 +"sH" = ( +/obj/structure/closet/syndicate{ + anchored = 1; + desc = "A basic closet for all your villainous needs."; + locked = 1; + name = "Closet"; + req_access = list("syndicate"); + secure = 1 }, -/obj/structure/cable, -/obj/item/paper/fluff/ruins/forgottenship/powerissues, +/obj/item/ammo_box/c9mm, +/obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) "sK" = ( @@ -454,117 +518,79 @@ }, /turf/open/floor/pod/dark, /area/virtual_domain/protected_space) +"sL" = ( +/obj/structure/chair/comfy, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) "sM" = ( /turf/template_noop, /area/virtual_domain/safehouse) -"sS" = ( -/obj/structure/table/optable, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plastic, -/area/virtual_domain) -"tE" = ( -/turf/open/space/basic, -/area/space/virtual_domain) -"vY" = ( -/turf/closed/mineral/random/high_chance, -/area/ruin/space/virtual_domain) -"wl" = ( -/obj/item/storage/backpack/duffelbag/syndie/surgery, -/obj/structure/table/reinforced, -/turf/open/floor/plastic, -/area/virtual_domain) -"wn" = ( -/obj/machinery/button/crematorium{ - id = "fscremate"; - pixel_x = -32 - }, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"wL" = ( +"tv" = ( /obj/structure/table/reinforced, -/obj/item/storage/medkit/regular, -/obj/machinery/light/small/directional/north, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain/protected_space) -"wR" = ( -/obj/machinery/turretid{ - control_area = "/area/ruin/space/has_grav/syndicate_forgotten_ship"; - enabled = 0; - icon_state = "control_kill"; - lethal = 1; - name = "Ship turret control panel"; - pixel_y = 32; +/obj/machinery/button/door{ + id = "fscaproom"; + name = "Room shutters control"; req_access = list("syndicate") }, -/turf/open/floor/mineral/plastitanium/red, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"wU" = ( -/obj/structure/cable, +"tI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"wX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, -/obj/machinery/light/small/directional/north, -/turf/open/floor/mineral/plastitanium, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"wY" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/obj/structure/cable, +"uP" = ( /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"xd" = ( +"vp" = ( /obj/structure/table/reinforced, -/obj/item/ammo_box/c9mm, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"xg" = ( -/obj/machinery/light/small/directional/east, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"xm" = ( -/obj/structure/chair/comfy/black, -/turf/open/floor/carpet/royalblack, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"yA" = ( -/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, +"vD" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"yG" = ( -/obj/structure/closet/crate/secure/gear{ - req_access = list("syndicate") +"vK" = ( +/obj/machinery/door/airlock/grunge{ + name = "Syndicate Ship Airlock" }, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"zN" = ( -/turf/closed/wall/r_wall/syndicate, -/area/virtual_domain/protected_space) -"zT" = ( -/obj/machinery/light/directional/south, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"Ab" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ +"vU" = ( +/obj/structure/chair/comfy/shuttle{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) +"wb" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2, +/obj/machinery/portable_atmospherics/scrubber{ + anchored = 1 }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"An" = ( +"we" = ( +/turf/closed/mineral/random/high_chance, +/area/ruin/space/virtual_domain) +"wK" = ( +/obj/machinery/door/airlock/grunge{ + name = "Syndicate Ship Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"wL" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/regular, +/obj/machinery/light/small/directional/north, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain/protected_space) +"xJ" = ( /obj/structure/closet/syndicate{ anchored = 1; desc = "A basic closet for all your villainous needs."; @@ -573,90 +599,138 @@ req_access = list("syndicate"); secure = 1 }, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/under/syndicate/skirt, +/obj/item/ammo_box/c9mm, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"AD" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/cup/glass/trophy/silver_cup, -/turf/open/floor/mineral/plastitanium/red, +"xS" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, /area/virtual_domain) -"AM" = ( -/obj/structure/closet/crate/secure/gear{ - req_access = list("syndicate") +"yl" = ( +/obj/machinery/door/airlock/grunge{ + name = "Captain's Room" }, -/obj/item/stack/ore/diamond{ - amount = 3 +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/poddoor{ + id = "fscaproom"; + name = "Captain's Blast Door"; + state_open = 1 }, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) +"yJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"AU" = ( -/obj/machinery/camera/xray{ - c_tag = "Medbay"; - dir = 6; - network = list("fsci"); - screen_loc = "" +"yR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 4 }, -/turf/open/floor/plastic, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"yT" = ( +/obj/item/ai_module/core/full/cybersun, +/obj/structure/table/reinforced, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"Bh" = ( +"yV" = ( +/obj/structure/table/reinforced, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"yZ" = ( +/turf/closed/mineral, +/area/ruin/space/virtual_domain) +"zi" = ( +/obj/machinery/vending/cigarette/syndicate, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"zt" = ( /obj/structure/cable, -/obj/machinery/door/airlock/external/ruin{ - name = "Syndicate Ship Airlock" +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) +"zN" = ( +/turf/closed/wall/r_wall/syndicate, +/area/virtual_domain/protected_space) +"Aa" = ( +/obj/structure/chair/comfy/shuttle, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) "Bm" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/syndicate, /area/virtual_domain/protected_space) +"BK" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/space/virtual_domain) "BN" = ( /obj/structure/transit_tube/crossing, /turf/template_noop, -/area/virtual_domain/safehouse) -"BQ" = ( -/obj/machinery/shower/directional/north, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/virtual_domain) -"CS" = ( -/obj/structure/filingcabinet, -/obj/machinery/door/window/left/directional/west{ - name = "Syndicate Interior Door"; - req_access = list("syndicate") - }, -/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain/safehouse) +"Cf" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"CW" = ( -/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie, +"Ci" = ( +/obj/structure/closet/syndicate{ + anchored = 1; + desc = "A basic closet for all your villainous needs."; + locked = 1; + name = "Closet"; + req_access = list("syndicate"); + secure = 1 + }, +/obj/item/crowbar/red, +/obj/item/ammo_box/magazine/m9mm_aps, +/obj/item/ammo_box/magazine/m9mm_aps, +/obj/item/gun/ballistic/automatic/pistol/aps, /turf/open/floor/carpet/royalblack, /area/virtual_domain) -"CY" = ( -/obj/structure/closet/crate/secure/gear{ - req_access = list("syndicate") +"Cn" = ( +/obj/machinery/camera/xray/directional/east{ + c_tag = "Conference room"; + network = list("fsc"); + screen_loc = "" }, -/obj/effect/spawner/random/maintenance, -/obj/effect/spawner/random/maintenance, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"Dc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ +"CK" = ( +/obj/structure/chair/comfy/shuttle{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/mineral/plastitanium, +/mob/living/basic/trooper/syndicate/ranged/smg/pilot, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"Dd" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2, -/obj/machinery/portable_atmospherics/scrubber{ - anchored = 1 +"CR" = ( +/obj/structure/closet/syndicate{ + anchored = 1; + desc = "A basic closet for all your villainous needs."; + locked = 1; + name = "Closet"; + req_access = list("syndicate"); + secure = 1 + }, +/obj/item/coin/antagtoken, +/obj/item/dnainjector/thermal, +/obj/item/storage/box/firingpins/syndicate, +/obj/item/storage/box/firingpins/syndicate, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) +"De" = ( +/obj/machinery/door/airlock/grunge{ + name = "Syndicate Ship Airlock" }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) "Dj" = ( @@ -667,102 +741,121 @@ /obj/item/gun/ballistic/automatic/c20r/unrestricted, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"Dn" = ( +"DA" = ( +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate") + }, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"EB" = ( /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 6 + dir = 4 }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"DQ" = ( -/obj/structure/chair/comfy{ - dir = 1 - }, +"Fp" = ( +/obj/structure/tank_dispenser/oxygen, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"DU" = ( -/obj/machinery/door/airlock/grunge{ - name = "Captain's Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/poddoor{ - id = "fscaproom"; - name = "Captain's Blast Door"; - state_open = 1 +"FN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 4 }, -/turf/open/floor/carpet/royalblack, -/area/virtual_domain) -"Eb" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, -/turf/open/floor/mineral/plastitanium/red, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"EJ" = ( -/obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" +"Gn" = ( +/obj/structure/chair/comfy{ + dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"Gs" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"EP" = ( -/obj/structure/lattice/catwalk, +"GB" = ( /obj/structure/cable, -/turf/open/space/basic, -/area/space/virtual_domain) -"Fj" = ( -/turf/open/floor/iron/dark, +/obj/machinery/door/airlock/external/ruin{ + name = "Syndicate Ship Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"Fn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ +"GZ" = ( +/obj/machinery/door/airlock/external/ruin{ + name = "Syndicate Ship Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"Hq" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain/fullbright) +"HU" = ( +/obj/machinery/door/airlock/grunge{ + name = "Bridge" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 }, -/obj/machinery/light/small/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"FE" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/r_wall/syndicate, +"Ia" = ( +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie, +/turf/open/floor/carpet/royalblack, /area/virtual_domain) -"Gh" = ( -/obj/structure/cable, +"Id" = ( +/obj/machinery/power/shuttle_engine/huge{ + dir = 8 + }, +/turf/open/space/basic, +/area/virtual_domain) +"If" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 5 + dir = 9 }, +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"Gv" = ( -/obj/structure/tank_dispenser/oxygen, -/turf/closed/mineral/random, -/area/ruin/space/virtual_domain) -"GE" = ( -/obj/structure/chair/comfy, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"Is" = ( +"Ig" = ( /obj/machinery/porta_turret/syndicate/energy{ dir = 4; name = "Syndicate Ship Turret"; on = 0; shot_delay = 10 }, -/turf/closed/wall/r_wall/syndicate, +/turf/closed/wall/r_wall/syndicate/nodiagonal, /area/virtual_domain) -"IA" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/mineral/plastitanium/red, +"Im" = ( +/obj/structure/table/reinforced, +/obj/item/ammo_box/c9mm, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"Io" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) +"IC" = ( +/obj/structure/table/reinforced, +/obj/item/paper, +/obj/item/pen, +/obj/machinery/computer/security/telescreen/forgotten_ship/sci/directional/south, +/turf/open/floor/carpet/royalblack, /area/virtual_domain) "IH" = ( /obj/machinery/door/airlock/external/ruin{ @@ -773,101 +866,63 @@ /obj/structure/fans/tiny, /turf/open/floor/plating, /area/virtual_domain/protected_space) -"Ji" = ( -/obj/structure/closet/syndicate{ - anchored = 1; - desc = "A basic closet for all your villainous needs."; - locked = 1; - name = "Closet"; - req_access = list("syndicate"); - secure = 1 +"IV" = ( +/obj/machinery/door/airlock/grunge{ + name = "Syndicate Ship Airlock" }, -/obj/item/clothing/head/hats/hos/beret/syndicate, -/obj/item/clothing/suit/armor/vest/capcarapace/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/under/syndicate, -/obj/item/clothing/under/syndicate/skirt, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/shoes/combat, -/turf/open/floor/mineral/plastitanium/red, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/turf/open/floor/plating, /area/virtual_domain) -"JJ" = ( -/obj/structure/closet/syndicate{ - anchored = 1; - desc = "A basic closet for all your villainous needs."; - locked = 1; - name = "Closet"; - req_access = list("syndicate"); - secure = 1 - }, -/obj/effect/spawner/random/contraband/armory, +"Jg" = ( +/obj/machinery/light/small/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"Kb" = ( -/obj/machinery/door/airlock/grunge{ - name = "Captain's Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/door/poddoor{ - id = "fscaproom"; - name = "Captain's Blast Door"; - state_open = 1 +"Jz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 5 }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"Lk" = ( -/obj/structure/transit_tube/crossing, -/turf/closed/mineral/random, -/area/virtual_domain/protected_space) -"Lv" = ( -/turf/closed/mineral/random, -/area/ruin/space/virtual_domain) -"LB" = ( -/obj/structure/cable, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain/protected_space) -"Mf" = ( -/obj/structure/table/reinforced, -/obj/item/assembly/prox_sensor, -/obj/item/assembly/prox_sensor, +"JA" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"Mp" = ( -/obj/item/stack/sheet/mineral/uranium{ - amount = 15 - }, +"JN" = ( /obj/structure/cable, -/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 5 + }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"Mr" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/landmark/bitrunning/cache_spawn, +"JP" = ( +/obj/structure/sink/directional/south, /turf/open/floor/iron/dark, /area/virtual_domain) -"Mv" = ( -/obj/machinery/light/directional/south, +"Kz" = ( /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"MB" = ( -/obj/machinery/suit_storage_unit/syndicate{ - helmet_type = /obj/item/clothing/head/helmet/space/syndicate/black; - suit_type = /obj/item/clothing/suit/space/syndicate/black - }, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"MK" = ( -/obj/machinery/door/window/left/directional/south{ - name = "Control Room"; +"Lk" = ( +/obj/structure/transit_tube/crossing, +/turf/closed/mineral/random, +/area/virtual_domain/protected_space) +"Lo" = ( +/obj/structure/filingcabinet, +/obj/machinery/door/window/left/directional/west{ + name = "Syndicate Interior Door"; req_access = list("syndicate") }, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"MM" = ( -/obj/machinery/atmospherics/components/unary/vent_pump, +"LB" = ( +/obj/structure/cable, /turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"MV" = ( +/area/virtual_domain/protected_space) +"Mc" = ( /obj/structure/closet/syndicate{ anchored = 1; desc = "A basic closet for all your villainous needs."; @@ -879,11 +934,10 @@ /obj/item/crowbar/red, /obj/item/ammo_box/magazine/m9mm, /obj/item/ammo_box/magazine/m9mm, -/obj/machinery/light/small/directional/north, /obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"MY" = ( +"Mm" = ( /obj/structure/closet/syndicate{ anchored = 1; desc = "A basic closet for all your villainous needs."; @@ -892,15 +946,21 @@ req_access = list("syndicate"); secure = 1 }, -/obj/item/crowbar/red, -/obj/item/ammo_box/magazine/m9mm_aps, -/obj/item/ammo_box/magazine/m9mm_aps, -/obj/item/gun/ballistic/automatic/pistol, -/turf/open/floor/carpet/royalblack, -/area/virtual_domain) -"MZ" = ( -/obj/effect/landmark/bitrunning/cache_spawn, -/turf/open/floor/plastic, +/obj/item/clothing/head/hats/hos/beret/syndicate, +/obj/item/clothing/suit/armor/vest/capcarapace/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/under/syndicate, +/obj/item/clothing/under/syndicate/skirt, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/shoes/combat, +/turf/open/floor/mineral/plastitanium/red, +/area/virtual_domain) +"MR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) "Nm" = ( /obj/structure/closet/crate/secure/gear{ @@ -921,20 +981,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/pod/dark, /area/virtual_domain/protected_space) -"Ns" = ( -/obj/machinery/light/small/directional/south, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"Nx" = ( -/obj/machinery/atmospherics/components/tank/air{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/virtual_domain) -"NT" = ( -/obj/effect/landmark/bitrunning/cache_spawn, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) "Of" = ( /obj/structure/closet/crate/secure/gear{ req_access = list("syndicate") @@ -942,6 +988,10 @@ /obj/item/disk/surgery/forgottenship, /turf/open/floor/pod/dark, /area/virtual_domain/protected_space) +"Ox" = ( +/obj/machinery/atmospherics/components/unary/vent_pump, +/turf/open/floor/mineral/plastitanium, +/area/virtual_domain) "OH" = ( /obj/structure/cable, /obj/structure/table/reinforced, @@ -949,23 +999,12 @@ /obj/item/storage/toolbox/syndicate, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"Pe" = ( -/obj/structure/closet/crate/secure/gear{ - req_access = list("syndicate") - }, -/obj/item/stack/ore/plasma{ - amount = 19 - }, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"PA" = ( -/obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/turf/open/floor/iron/dark/side{ +"OI" = ( +/obj/structure/chair/comfy/shuttle{ dir = 1 }, +/obj/structure/cable, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) "PR" = ( /obj/machinery/door/password/voice/sfc{ @@ -979,27 +1018,20 @@ /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/pod/dark, /area/virtual_domain/protected_space) -"PW" = ( -/obj/machinery/door/airlock/grunge{ - name = "Bridge" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/virtual_domain) -"PX" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external/ruin{ - name = "Syndicate Ship Airlock" +"Qg" = ( +/obj/machinery/suit_storage_unit/syndicate{ + helmet_type = /obj/item/clothing/head/helmet/space/syndicate/black; + suit_type = /obj/item/clothing/suit/space/syndicate/black }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"QA" = ( -/obj/machinery/vending/medical/syndicate_access/cybersun, -/turf/open/floor/plastic, +"Qi" = ( +/obj/item/stack/sheet/mineral/uranium{ + amount = 15 + }, +/obj/structure/cable, +/obj/machinery/light/small/directional/north, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) "QF" = ( /obj/structure/table/reinforced, @@ -1007,67 +1039,39 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"QY" = ( -/obj/machinery/door/window/left/directional/north{ - name = "Spare Equipment"; - req_access = list("syndicate") - }, -/turf/open/floor/mineral/plastitanium/red, -/area/virtual_domain) -"Rq" = ( -/obj/structure/cable, -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external/ruin{ - name = "Syndicate Ship Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +"QG" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/closed/mineral/random, +/area/ruin/space/virtual_domain) +"QX" = ( +/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"Ru" = ( -/obj/machinery/camera/xray/directional/east{ - c_tag = "Conference room"; - network = list("fsc"); - screen_loc = "" - }, +"Ra" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2, +/obj/machinery/light/small/directional/north, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"RG" = ( -/obj/structure/sink/directional/south, -/turf/open/floor/iron/dark, -/area/virtual_domain) -"RI" = ( +"RQ" = ( /obj/structure/cable, -/turf/open/floor/mineral/plastitanium, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) "RU" = ( /obj/machinery/suit_storage_unit/syndicate, /turf/open/floor/mineral/plastitanium, /area/virtual_domain/protected_space) -"RY" = ( -/obj/structure/closet/syndicate{ - anchored = 1; - desc = "A basic closet for all your villainous needs."; - locked = 1; - name = "Closet"; - req_access = list("syndicate"); - secure = 1 - }, -/obj/item/coin/antagtoken, -/obj/item/dnainjector/thermal, -/obj/item/storage/box/firingpins/syndicate, -/obj/item/storage/box/firingpins/syndicate, -/turf/open/floor/mineral/plastitanium/red, -/area/virtual_domain) -"Sh" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "fscaproom"; - name = "Room shutters control"; - req_access = list("syndicate") +"Sc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ + dir = 4 }, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"SW" = ( +"Sd" = ( /obj/structure/closet/syndicate{ anchored = 1; desc = "A basic closet for all your villainous needs."; @@ -1076,109 +1080,83 @@ req_access = list("syndicate"); secure = 1 }, -/obj/item/ammo_box/c9mm, -/turf/open/floor/mineral/plastitanium/red, -/area/virtual_domain) -"Tm" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, +/obj/item/crowbar/red, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/machinery/light/small/directional/north, +/obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"To" = ( +"Sq" = ( +/obj/machinery/power/smes, /obj/structure/cable, -/mob/living/basic/trooper/syndicate/melee/space/stormtrooper, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"Tr" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/mob/living/basic/trooper/syndicate/ranged/smg/pilot, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"Ts" = ( -/obj/effect/landmark/bitrunning/cache_spawn, -/turf/open/floor/mineral/plastitanium/red, -/area/virtual_domain) -"TB" = ( -/turf/closed/indestructible/syndicate, -/area/virtual_domain/protected_space) -"TU" = ( -/obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 +"Sv" = ( +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate") }, +/obj/effect/spawner/random/food_or_drink/donkpockets, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"UE" = ( -/obj/machinery/computer/atmos_alert{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/red, +"Sz" = ( +/turf/open/floor/iron/dark, /area/virtual_domain) -"Va" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium/red, +"SX" = ( +/obj/machinery/vending/medical/syndicate/cybersun, +/turf/open/floor/plastic, /area/virtual_domain) -"Vd" = ( -/obj/structure/bodycontainer/crematorium{ - id = "fscremate" - }, -/turf/open/floor/mineral/plastitanium, +"TB" = ( +/turf/closed/indestructible/syndicate, +/area/virtual_domain/protected_space) +"UQ" = ( +/obj/structure/sign/poster/contraband/syndicate_recruitment, +/turf/closed/wall/r_wall/syndicate, /area/virtual_domain) "Vg" = ( /turf/open/space/basic, /area/virtual_domain/protected_space) +"Vk" = ( +/obj/machinery/porta_turret/syndicate/energy{ + dir = 4; + name = "Syndicate Ship Turret"; + on = 0; + shot_delay = 10 + }, +/turf/closed/wall/r_wall/syndicate, +/area/virtual_domain) "Vq" = ( /obj/structure/transit_tube/station/dispenser/reverse{ dir = 8 }, /turf/template_noop, /area/virtual_domain/safehouse) -"Vs" = ( -/obj/machinery/vending/cigarette/syndicate, -/turf/open/floor/mineral/plastitanium, -/area/virtual_domain) -"Vz" = ( +"Wd" = ( +/obj/structure/sign/poster/contraband/tools, /turf/closed/wall/r_wall/syndicate, -/area/virtual_domain) -"VR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 4 +/area/virtual_domain/protected_space) +"Wy" = ( +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate") }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ - dir = 4 +/obj/item/stack/ore/plasma{ + amount = 19 }, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"Wd" = ( -/obj/structure/sign/poster/contraband/tools, -/turf/closed/wall/r_wall/syndicate, -/area/virtual_domain/protected_space) -"We" = ( -/obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" +"WR" = ( +/obj/machinery/power/port_gen/pacman/super{ + anchored = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/cable, /turf/open/floor/mineral/plastitanium/red, /area/virtual_domain) -"WB" = ( -/obj/structure/tank_dispenser/oxygen, -/turf/open/floor/mineral/plastitanium, +"Xp" = ( +/turf/open/space/basic, /area/virtual_domain) -"XB" = ( -/obj/machinery/atmospherics/components/unary/vent_pump, -/turf/open/floor/mineral/plastitanium/red, +"XS" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/plastitanium, /area/virtual_domain) "Yb" = ( /obj/structure/closet/crate/secure/gear{ @@ -1188,1462 +1166,1484 @@ /obj/item/clothing/suit/space/syndicate/black/engie, /turf/open/floor/pod/dark, /area/virtual_domain/protected_space) -"Yr" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/template_noop, -/area/virtual_domain/safehouse) -"YA" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Syndicate Ship Airlock" +"Yi" = ( +/obj/effect/landmark/bitrunning/cache_spawn, +/turf/open/floor/plastic, +/area/virtual_domain) +"Yj" = ( +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate") + }, +/obj/item/stack/ore/diamond{ + amount = 3 }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/mineral/plastitanium, /area/virtual_domain) -"YC" = ( +"Yk" = ( /obj/machinery/door/airlock/grunge{ - name = "Syndicate Ship Airlock" + name = "Captain's Room" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/poddoor{ + id = "fscaproom"; + name = "Captain's Blast Door"; + state_open = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/virtual_domain) +"Yr" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Yu" = ( +/obj/structure/chair/comfy/black, +/turf/open/floor/carpet/royalblack, +/area/virtual_domain) +"YV" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/west, /turf/open/floor/iron/dark, /area/virtual_domain) -"YY" = ( -/obj/machinery/recharge_station, -/turf/open/floor/mineral/plastitanium, +"Za" = ( +/obj/machinery/computer/operating, +/turf/open/floor/plastic, /area/virtual_domain) -"Zz" = ( -/obj/structure/closet/crate/secure/gear{ - req_access = list("syndicate") +"Zb" = ( +/turf/open/floor/plastic, +/area/virtual_domain) +"ZA" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 8 }, -/obj/effect/spawner/random/clothing/costume, -/turf/open/floor/mineral/plastitanium, +/turf/open/space/basic, /area/virtual_domain) (1,1,1) = {" -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq "} (2,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (3,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (4,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (5,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (6,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (7,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (8,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -vY -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +we +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (9,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (10,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -eu -eu -nV -tE -tE -eu -eu -nV -tE -tE -eu -eu -nV -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Xp +Xp +Id +qx +qx +Xp +Xp +Id +qx +qx +Xp +Xp +Id +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (11,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -eu -eu -eu -tE -tE -eu -eu -eu -tE -tE -eu -eu -eu -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Xp +Xp +Xp +qx +qx +Xp +Xp +Xp +qx +qx +Xp +Xp +Xp +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (12,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -cr -eu -eu -eu -cr -cr -eu -eu -eu -cr -cr -eu -eu -eu -cr -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -vY -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +ZA +Xp +Xp +Xp +ZA +ZA +Xp +Xp +Xp +ZA +ZA +Xp +Xp +Xp +ZA +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +we +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (13,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -vY -vY -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +ru +ru +ru +ru +ru +ru +ru +ru +ru +ru +ru +ru +ru +ru +ru +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +we +we +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (14,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Is -Vz -yG -eQ -bN -NT -AM -eQ -bN -Pe -CY -NT -bN -eQ -Zz -Vz -Is -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +Vk +ru +Sv +vD +uP +Io +Yj +vD +uP +Wy +DA +Io +uP +vD +cc +ru +Vk +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (15,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -NT -bN -bN -oo -xg -bN -bN -bN -bN -bN -xg -bN -oo -bN -NT -bc -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +Io +uP +uP +QX +lN +uP +uP +uP +uP +uP +lN +uP +QX +uP +Io +hA +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (16,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -os -Vz -Vz -Vz -os -Vz -Vz -Vz -Vz -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +ru +ru +ru +ru +ru +ru +ru +IV +ru +ru +ru +IV +ru +ru +ru +ru +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (17,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -Vz -hi -Vz -CW -MY -Vz -or -ss -kA -Vz -Mf -DQ -bN -kx -bN -Vz -tE -tE -tE -tE -tE -tE -tE -tE -tE -Lv -vY -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +ru +vp +ru +Ia +Ci +ru +Sq +di +WR +ru +yV +Gn +uP +Mc +uP +ru +qx +qx +qx +qx +qx +qx +qx +qx +qx +nB +we +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (18,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -AD -IA -Vz -dD -eH -Vz -Mp -fW -jt -Vz -kx -bN -bN -bN -qR -Vz -tE -tE -tE -tE -tE -tE -tE -Lv -Lv -Lv -Lv -Lv -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +og +Jg +ru +bh +cR +ru +Qi +sz +Kz +ru +Mc +uP +uP +uP +rP +ru +qx +qx +qx +qx +qx +qx +qx +nB +nB +nB +nB +nB +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (19,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -jt -jt -Kb -dD -dD -DU -Dn -jv -Va -aV -bN -bN -NT -GE -cA -Vz -tE -tE -tE -tE -tE -tE -Lv -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +Kz +Kz +yl +bh +bh +Yk +pS +RQ +Jz +vK +uP +uP +Io +sL +hy +ru +qx +qx +qx +qx +qx +qx +nB +nB TB TB TB TB -Lv -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +nB +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (20,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -RY -jt -Vz -dD -dD -DU -sm -qh -sm -aV -bN -bN -oo -GE -xd -Vz -tE -tE -tE -tE -tE -Lv -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +CR +Kz +ru +bh +bh +Yk +pM +zt +pM +vK +uP +uP +QX +sL +Im +ru +qx +qx +qx +qx +qx +nB +nB TB TB Yb Yb TB Bm -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (21,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -jw -jt -Vz -xm -od -Vz -hY -Gh -Fn -Vz -MV -bN -bN -bN -dq -Vz -tE -tE -tE -tE -Lv -Gv -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +yT +Kz +ru +Yu +IC +ru +mD +JN +MR +ru +Sd +uP +uP +uP +gD +ru +qx +qx +qx +qx +nB +QG +nB TB aN bG bG sK TB -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (22,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -rG -Vz -CS -Vz -Sh -hb -dx -Dd -Eb -Nx -Vz -hb -DQ -bN -kx -Vz -rG -tE -tE -tE -tE -Lv -vY -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +Ig +ru +Lo +ru +tv +hD +nU +wb +EB +pl +ru +hD +Gn +uP +Mc +ru +Ig +qx +qx +qx +qx +nB +we +nB TB iU bG bG Nr TB -Lv -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +nB +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (23,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -Vz -Vz -Vz -Vz -Vz -Vz -Vz -TU -Vz -Vz -Vz -Vz -Vz -Vz -Vz -tE -tE -tE -tE -tE -tE -Lv -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +ru +ru +ru +ru +ru +ru +ru +cy +ru +ru +ru +ru +ru +ru +ru +qx +qx +qx +qx +qx +qx +nB +nB TB Nm bG bG Of TB -Lv -Lv -tE -tE -tE -tE -tE -tE -tE +nB +nB +qx +qx +qx +qx +qx +qx +qx sM sM sM sM sM kJ -tE -mR +qx +Hq "} (24,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -Vz -bl -MZ -hr -QA -Vz -bN -wU -bN -Vz -rq -Fj -PA -hM -Vz -tE -tE -tE -tE -tE -Lv -Lv -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +ru +Za +Yi +Zb +SX +ru +uP +yR +uP +ru +YV +Sz +jJ +fG +ru +qx +qx +qx +qx +qx +nB +nB +nB TB TB PR TB TB TB -Lv -Lv -Lv -tE -tE -tE -tE -tE -tE +nB +nB +nB +qx +qx +qx +qx +qx +qx sM sM sM sM sM sM -tE -mR +qx +Hq "} (25,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -Vz -sS -hr -pI -hw -Vz -wX -lI -bN -Vz -RG -Mr -Vz -Vz -Vz -tE -tE -tE -tE -tE -Lv -Lv -vY +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +ru +qf +Zb +ip +da +ru +Ra +Sc +uP +ru +JP +qY +ru +ru +ru +qx +qx +qx +qx +qx +nB +nB +we zN zN dp @@ -2665,43 +2665,43 @@ sM sM sM sM -tE -mR +qx +Hq "} (26,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -Vz -wl -AU -hr -hr -We -MM -Dc -bN -YC -Fj -Fj -PA -BQ -Vz -tE -tE -tE -tE -tE -tE -Lv -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +ru +aq +cB +Zb +Zb +De +Ox +Gs +uP +wK +Sz +Sz +jJ +pU +ru +qx +qx +qx +qx +qx +qx +nB +nB qU mL dp @@ -2723,43 +2723,43 @@ sM sM sM sM -tE -mR +qx +Hq "} (27,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Is -Vz -Vz -Vz -Vz -Vz -Vz -Vz -EJ -Vz -Vz -Vz -Vz -Vz -Vz -Vz -Vz -tE -tE -tE -tE -tE -Lv -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +Vk +ru +ru +ru +ru +ru +ru +ru +kh +ru +ru +ru +ru +ru +ru +ru +ru +qx +qx +qx +qx +qx +nB +nB zN eB dp @@ -2781,1456 +2781,1456 @@ sM sM sM sM -tE -mR +qx +Hq "} (28,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -Vd -wn -Vz -qd -RI -RI -RI -wU -RI -RI -RI -bN -Vz -bN -MB -Vz -tE -tE -tE -tE -tE -tE -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +jl +rm +ru +nk +oM +oM +oM +yR +oM +oM +oM +uP +ru +uP +Qg +ru +qx +qx +qx +qx +qx +qx +nB zN wL LB dp mA zN -dQ -Lv -Lv -Lv -tE -tE -tE -tE -tE +yZ +nB +nB +nB +qx +qx +qx +qx +qx sM sM sM sM sM sM -tE -mR +qx +Hq "} (29,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -bN -Ns -Vz -iT -bN -Tm -Tm -nC -Tm -Tm -RI -bN -Vz -lh -MB -Vz -tE -tE -tE -tE -tE -tE -tE +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +uP +dw +ru +rH +uP +JA +JA +iX +JA +JA +oM +uP +ru +fJ +Qg +ru +qx +qx +qx +qx +qx +qx +qx Wd OH LB dp RU zN -vY -Lv -Lv -tE -tE -tE -tE -tE -tE +we +nB +nB +qx +qx +qx +qx +qx +qx sM sM sM sM sM Yr -tE -mR +qx +Hq "} (30,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -PX -bN -bN -YA -bN -fR -hb -jW -sk -hb -hb -wY -RI -Bh -To -RI -Rq -EP -EP -EP -EP -EP -EP -EP +Hq +qx +qx +qx +qx +qx +qx +qx +qx +lo +uP +uP +GZ +uP +Aa +hD +yJ +bD +hD +hD +OI +oM +GB +jA +oM +dU +BK +BK +BK +BK +BK +BK +BK IH LB LB dp RU zN -Lv -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +nB +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (31,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -bN -bN -FE -bN -bN -bN -MM -yA -bN -bN -bN -bN -FE -bN -MB -Vz -tE -tE -tE -tE -tE -tE -tE +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +uP +uP +dd +uP +uP +uP +Ox +aw +uP +uP +uP +uP +dd +uP +Qg +ru +qx +qx +qx +qx +qx +qx +qx iL cZ dp dp RU zN -Lv -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +nB +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (32,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -YY -bN -Vz -hm -bN -bN -bN -VR -bN -bN -bN -zT -Vz -bN -WB -Vz -tE -tE -tE -tE -tE -tE -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +aO +uP +ru +XS +uP +uP +uP +FN +uP +uP +uP +Cf +ru +uP +Fp +ru +qx +qx +qx +qx +qx +qx +nB zN zN Dj QF zN zN -Lv -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +nB +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (33,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -rG -Vz -hb -Vz -Vs -bN -bN -bN -VR -Ru -bN -bN -bN -Vz -hb -Vz -nz -tE -tE -tE -tE -tE -Lv -Lv -Lv +Hq +qx +qx +qx +qx +qx +qx +qx +qx +Ig +ru +hD +ru +zi +uP +uP +uP +FN +Cn +uP +uP +uP +ru +hD +ru +xS +qx +qx +qx +qx +qx +nB +nB +nB zN zN zN zN -Lv -Lv -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +nB +nB +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (34,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -Vz -Vz -Vz -Vz -Vz -Vz -Vz -PW -Vz -Vz -Vz -Vz -Vz -Vz -Vz -tE -tE -tE -tE -tE -tE -tE -Lv -Lv -Lv -Lv -vY -Lv -Lv -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +ru +ru +ru +ru +ru +ru +ru +HU +ru +ru +ru +ru +ru +ru +ru +qx +qx +qx +qx +qx +qx +qx +nB +nB +nB +nB +we +nB +nB +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (35,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -gW -JJ -SW -jt -jt -Ab -jt -jt -rh -hn -Vz -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -Lv -Lv -Lv -Lv -Lv -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +UQ +rM +xJ +Kz +Kz +tI +Kz +Kz +ct +sH +ru +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +nB +nB +nB +nB +nB +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (36,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -Vz -Vz -Vz -jt -jt -jt -jt -Ab -jt -jt -jt -jt -Vz -Vz -Vz -Vz -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +ru +ru +ru +Kz +Kz +Kz +Kz +tI +Kz +Kz +Kz +Kz +ru +ru +ru +ru +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (37,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -wR -jt -Vz -fs -jt -jt -XB -rI -jt -jt -jt -Mv -Vz -An -An -Vz -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +ln +Kz +ru +iB +Kz +Kz +fV +If +Kz +Kz +Kz +nG +ru +cw +cw +ru +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (38,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -Vz -jt -Ts -MK -jt -Tr -jt -lB -pD -lB -jt -Tr -jt -QY -jt -IA -Vz -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +ru +Kz +dz +sq +Kz +CK +Kz +vU +mo +vU +Kz +CK +Kz +ja +Kz +Jg +ru +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (39,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -rG -Vz -jt -Vz -jt -jt -jt -qr -jt -UE -jt -jt -jt -Vz -Ji -Vz -rG -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +Ig +ru +Kz +ru +Kz +Kz +Kz +pz +Kz +kI +Kz +Kz +Kz +ru +Mm +ru +Ig +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (40,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -Vz -Vz -Vz -jt -jt -jt -jt -jt -jt -jt -jt -Ts -Vz -Vz -Vz -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +ru +ru +ru +Kz +Kz +Kz +Kz +Kz +Kz +Kz +Kz +dz +ru +ru +ru +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (41,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -Vz -Vz -hi -hi -nd -hi -mG -hi -hi -hi -hi -Vz -Vz -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +ru +ru +vp +vp +pH +vp +iW +vp +vp +vp +vp +ru +ru +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (42,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -rG -kK -kK -kK -kK -kK -kK -kK -kK -kK -rG -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -vY -vY -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Ig +hg +hg +hg +hg +hg +hg +hg +hg +hg +Ig +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +we +we +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (43,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -vY -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +we +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (44,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (45,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -vY -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +we +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (46,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -vY -vY -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +we +we +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (47,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -vY -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +we +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (48,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (49,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (50,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (51,1,1) = {" -mR -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -tE -mR +Hq +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +qx +Hq "} (52,1,1) = {" -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR -mR +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq +Hq "} diff --git a/_maps/virtual_domains/xeno_nest.dmm b/_maps/virtual_domains/xeno_nest.dmm index 96c98d6e903e1..895ba5e84c37c 100644 --- a/_maps/virtual_domains/xeno_nest.dmm +++ b/_maps/virtual_domains/xeno_nest.dmm @@ -1,41 +1,34 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( +"a" = ( /turf/template_noop, /area/template_noop) -"ab" = ( -/obj/structure/alien/weeds, +"b" = ( /obj/structure/alien/weeds, +/obj/structure/alien/resin/wall, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/virtual_domain) -"ac" = ( +"c" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, /obj/structure/alien/resin/wall, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"ad" = ( -/obj/structure/alien/resin/wall, -/turf/closed/indestructible/binary, -/area/ruin/space/has_grav/powered/virtual_domain) -"ae" = ( +/area/virtual_domain) +"e" = ( /obj/structure/alien/weeds, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"af" = ( +/area/virtual_domain) +"f" = ( /obj/structure/alien/weeds, /obj/structure/alien/egg/burst, /obj/effect/decal/cleanable/blood, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"ag" = ( -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/virtual_domain) -"ah" = ( +"h" = ( /obj/structure/alien/weeds, /obj/effect/landmark/bitrunning/mob_segment, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"ai" = ( +/area/virtual_domain) +"i" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /obj/effect/decal/cleanable/blood/gibs, @@ -43,113 +36,110 @@ /obj/item/clothing/under/syndicate, /obj/item/clothing/glasses/night, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aj" = ( +/area/virtual_domain) +"j" = ( /obj/machinery/suit_storage_unit/spaceruin, /turf/template_noop, /area/virtual_domain/safehouse) -"ak" = ( +"k" = ( /obj/structure/alien/weeds/node, /obj/structure/alien/resin/wall, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"al" = ( +/area/virtual_domain) +"l" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, /turf/closed/indestructible/binary, -/area/ruin/space/has_grav/powered/virtual_domain) -"am" = ( +/area/virtual_domain/fullbright) +"m" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /obj/structure/alien/resin/wall, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"an" = ( +/area/virtual_domain) +"n" = ( /turf/template_noop, /area/virtual_domain/safehouse) -"ao" = ( +"o" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/gibs, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"ap" = ( +/area/virtual_domain) +"p" = ( /obj/structure/alien/weeds, /mob/living/basic/alien/drone{ can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aq" = ( +/area/virtual_domain) +"q" = ( /obj/structure/alien/resin/wall, -/turf/open/space/basic, -/area/ruin/space/has_grav/powered/virtual_domain) -"ar" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, +/area/virtual_domain) +"r" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/template_noop, /area/virtual_domain/safehouse) -"as" = ( +"s" = ( /obj/structure/alien/weeds/node, /mob/living/basic/alien/drone{ can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"at" = ( +/area/virtual_domain) +"t" = ( /obj/structure/alien/weeds, /obj/structure/alien/weeds, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"au" = ( +/area/virtual_domain) +"u" = ( /obj/structure/alien/weeds/node, /obj/effect/decal/cleanable/blood, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"av" = ( +/area/virtual_domain) +"v" = ( /obj/modular_map_root/safehouse{ key = "shuttle" }, /turf/template_noop, /area/virtual_domain/safehouse) -"aw" = ( -/turf/closed/indestructible/binary, -/area/virtual_domain/fullbright) -"ax" = ( +"x" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"ay" = ( +/area/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) -"az" = ( +/area/virtual_domain) +"z" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aA" = ( +/area/virtual_domain) +"A" = ( /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/ruin/space/has_grav/powered/virtual_domain) -"aB" = ( +/area/virtual_domain) +"B" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aC" = ( +/area/virtual_domain) +"C" = ( /obj/structure/alien/weeds, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/ruin/space/has_grav/powered/virtual_domain) -"aD" = ( +/area/virtual_domain) +"D" = ( /obj/structure/alien/weeds, /obj/structure/alien/weeds, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/ruin/space/has_grav/powered/virtual_domain) -"aE" = ( +/area/virtual_domain) +"E" = ( /turf/closed/indestructible/binary, -/area/ruin/space/has_grav/powered/virtual_domain) -"aF" = ( +/area/virtual_domain/fullbright) +"F" = ( /obj/structure/table/greyscale, /obj/item/gun/energy/xray, /obj/item/gun/energy/laser{ @@ -162,12 +152,12 @@ }, /turf/template_noop, /area/virtual_domain/safehouse) -"aG" = ( +"G" = ( /obj/structure/alien/resin/wall, /obj/structure/alien/weeds, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aH" = ( +/area/virtual_domain) +"H" = ( /obj/structure/table/greyscale, /obj/machinery/recharger{ pixel_x = 8; @@ -179,12 +169,12 @@ }, /turf/template_noop, /area/virtual_domain/safehouse) -"aI" = ( +"I" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aJ" = ( +/area/virtual_domain) +"J" = ( /obj/structure/alien/weeds, /mob/living/basic/alien/queen/large{ desc = "A gigantic alien who is in charge of the hive and all of its loyal servants."; @@ -193,27 +183,25 @@ can_plant_weeds = 0 }, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aK" = ( +/area/virtual_domain) +"K" = ( /obj/structure/alien/weeds, /obj/effect/landmark/bitrunning/cache_spawn, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aL" = ( +/area/virtual_domain) +"L" = ( /obj/item/storage/medkit/regular, /obj/item/storage/medkit/regular, /turf/template_noop, /area/virtual_domain/safehouse) -"aM" = ( +"M" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall{ - move_force = 1000; - move_resist = 3000; - pull_force = 1000 + move_resist = 3000 }, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aN" = ( +/area/virtual_domain) +"N" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /obj/effect/decal/cleanable/blood/gibs, @@ -222,152 +210,49 @@ /obj/item/melee/baton/security/loaded, /obj/item/clothing/head/helmet, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aO" = ( +/area/virtual_domain) +"O" = ( /obj/effect/baseturf_helper/virtual_domain, /turf/closed/indestructible/binary, -/area/ruin/space/has_grav/powered/virtual_domain) -"aP" = ( +/area/virtual_domain/fullbright) +"P" = ( /obj/structure/alien/weeds/node, /mob/living/basic/alien, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aQ" = ( -/obj/structure/alien/resin/wall, -/obj/structure/alien/resin/wall, -/turf/closed/indestructible/binary, -/area/ruin/space/has_grav/powered/virtual_domain) -"aR" = ( -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/virtual_domain) -"aS" = ( -/obj/structure/alien/weeds, -/mob/living/basic/alien, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aT" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aU" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/gun/ballistic/automatic/pistol, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aV" = ( -/obj/structure/alien/weeds/node, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aW" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"aX" = ( -/obj/effect/baseturf_helper/virtual_domain, -/turf/closed/indestructible/binary, -/area/virtual_domain/fullbright) -"aY" = ( -/obj/structure/alien/weeds, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain) -"aZ" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/suit/space/syndicate/orange, -/obj/item/clothing/mask/gas, -/obj/item/clothing/head/helmet/space/syndicate/orange, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/ruin/space/has_grav/powered/virtual_domain) -"bt" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, +"Q" = ( /obj/structure/alien/resin/wall, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"bR" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/landmark/bitrunning/cache_spawn, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"bU" = ( -/obj/structure/alien/weeds, /obj/structure/alien/resin/wall, /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, /area/virtual_domain) -"bV" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/weeds, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"cw" = ( +"S" = ( /obj/structure/alien/weeds, +/mob/living/basic/alien, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/virtual_domain) -"dl" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/closed/indestructible/binary, -/area/virtual_domain/fullbright) -"ds" = ( +"T" = ( /obj/structure/alien/weeds, /obj/structure/alien/egg/burst, -/obj/effect/decal/cleanable/blood, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"eD" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, /obj/effect/decal/cleanable/blood/gibs, -/obj/effect/decal/cleanable/blood, -/obj/item/clothing/under/syndicate, -/obj/item/clothing/glasses/night, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/virtual_domain) -"go" = ( +"U" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /obj/effect/decal/cleanable/blood/gibs, /obj/item/gun/ballistic/automatic/pistol, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/virtual_domain) -"ie" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"jG" = ( +"V" = ( /obj/structure/alien/weeds/node, -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"my" = ( -/obj/structure/alien/weeds/node, -/obj/effect/decal/cleanable/blood, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"mT" = ( -/obj/structure/alien/weeds/node, -/obj/effect/landmark/bitrunning/mob_segment, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/virtual_domain) -"nq" = ( -/obj/structure/alien/weeds/node, -/mob/living/basic/alien/drone{ - can_plant_weeds = 0 - }, +"W" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg/burst, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/virtual_domain) -"oD" = ( +"Z" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /obj/effect/decal/cleanable/blood/gibs, @@ -377,1907 +262,1808 @@ /obj/item/clothing/head/helmet/space/syndicate/orange, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/virtual_domain) -"rY" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"sO" = ( -/obj/structure/alien/weeds/node, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"tG" = ( -/obj/structure/alien/weeds, -/mob/living/basic/alien/drone{ - can_plant_weeds = 0 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"vP" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"BB" = ( -/obj/structure/alien/weeds, -/mob/living/basic/alien/queen/large{ - desc = "A gigantic alien who is in charge of the hive and all of its loyal servants."; - name = "alien queen"; - pixel_x = -16; - can_plant_weeds = 0 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"FI" = ( -/obj/structure/alien/weeds, -/mob/living/basic/alien, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"Hu" = ( -/obj/structure/alien/weeds, -/obj/effect/landmark/bitrunning/mob_segment, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"JT" = ( -/obj/structure/alien/weeds, -/obj/effect/landmark/bitrunning/cache_spawn, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"JZ" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"Lb" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"RZ" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"SC" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall{ - move_resist = 3000 - }, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"SD" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"TA" = ( -/obj/structure/alien/resin/wall, -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins, -/area/virtual_domain) -"Wp" = ( -/obj/structure/alien/weeds/node, -/mob/living/basic/alien, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"WD" = ( -/obj/structure/alien/resin/wall, -/obj/structure/alien/weeds, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) -"XX" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/clothing/under/rank/security/officer, -/obj/item/clothing/suit/armor/vest, -/obj/item/melee/baton/security/loaded, -/obj/item/clothing/head/helmet, -/turf/open/misc/asteroid/basalt/lava_land_surface, -/area/virtual_domain) (1,1,1) = {" -aa -aa -aa -aa -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -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 +a +a +a +a +E +E +E +E +E +E +E +E +E +E +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 "} (2,1,1) = {" -aa -aa -aa -aa -aw -vP -vP -vP -vP -vP -vP -vP -vP -aw -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +a +E +z +z +z +z +z +z +z +z +E +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (3,1,1) = {" -aa -aa -aa -aw -aw -vP -cw -JZ -JZ -vP -cw -cw -vP -SC -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +E +z +e +W +W +z +e +e +z +M +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (4,1,1) = {" -aa -aa -aa -aw -vP -vP -cw -cw -cw -cw -tG -cw -JZ -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +z +z +e +e +e +e +p +e +W +z +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (5,1,1) = {" -aa -aa -aa -aw -vP -cw -cw -jG -vP -vP -vP -jG -vP -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +z +e +e +k +z +z +z +k +z +z +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (6,1,1) = {" -aa -aa -aa -aw -vP -cw -Hu -bt -JT -BB -Lb -eD -vP -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +z +e +h +m +K +J +o +i +z +z +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (7,1,1) = {" -aa -aa -aa -aw -vP -JZ -cw -cw -cw -cw -SD -Lb -JT -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +z +W +e +e +e +e +B +o +K +z +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (8,1,1) = {" -aa -aa -aa -aw -vP -rY -Lb -vP -cw -sO -cw -cw -JZ -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +z +I +o +z +e +V +e +e +W +z +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (9,1,1) = {" -aa -aa -aa -aw -vP -go -my -cw -vP -cw -cw -JZ -vP -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +z +U +u +e +z +e +e +W +z +z +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (10,1,1) = {" -aa -aa -aa -aw -vP -cw -Lb -vP -cw -cw -cw -jG -JZ -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aw -aw -aw -aw -aw -aw -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +z +e +o +z +e +e +e +k +W +z +E +a +a +a +a +a +a +a +a +a +a +E +E +E +E +E +E +a +a +a +a +a +a +a +a "} (11,1,1) = {" -aa -aa -aa -aw -vP -vP -cw -cw -cw -cw -cw -Hu -cw -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aw -aw -vP -vP -vP -vP -aw -aw -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +z +z +e +e +e +e +e +h +e +z +E +a +a +a +a +a +a +a +a +a +E +E +z +z +z +z +E +E +a +a +a +a +a +a +a "} (12,1,1) = {" -aa -aa -aa -aw -aw -vP -JZ -cw -cw -cw -cw -cw -cw -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aw -aw -vP -vP -oD -rY -vP -vP -aw -aa -aa -aa -aa -aa -aa -aa +a +a +a +E +E +z +W +e +e +e +e +e +e +z +E +a +a +a +a +a +a +a +a +E +E +z +z +Z +I +z +z +E +a +a +a +a +a +a +a "} (13,1,1) = {" -aa -aa -aa -aa -aw -vP -vP -cw -cw -sO -cw -cw -vP -vP -aw -aa -aa -aa -aa -aa -aa -aa -aa -aw -vP -vP -JZ -Lb -SD -JT -vP -aw -aa -aa -aa -aa -aa -aa -aa +a +a +a +a +E +z +z +e +e +V +e +e +z +z +E +a +a +a +a +a +a +a +a +E +z +z +W +o +B +K +z +E +a +a +a +a +a +a +a "} (14,1,1) = {" -aa -aa -aa -aa -aw -aw -vP -vP -cw -cw -cw -vP -vP -aw -aw -aa -aa -aa -aa -aa -aa -aw -aw -aw -vP -rY -cw -mT -cw -JZ -vP -aw -aa -aa -aa -aa -aa -aa -aa +a +a +a +a +E +E +z +z +e +e +e +z +z +E +E +a +a +a +a +a +a +E +E +E +z +I +e +y +e +W +z +E +a +a +a +a +a +a +a "} (15,1,1) = {" -aa -aa -aa -aa -aa -aw -aw -vP -vP -vP -vP -vP -aw -aw -aa -aa -aa -aa -aa -aa -aw -aw -vP -vP -vP -cw -cw -cw -rY -vP -vP -aw -aa -aa -aa -aa -aa -aa -aa +a +a +a +a +a +E +E +z +z +z +z +z +E +E +a +a +a +a +a +a +E +E +z +z +z +e +e +e +I +z +z +E +a +a +a +a +a +a +a "} (16,1,1) = {" -aa -aa -aa -aa -aa -aa -aw -vP -sO -sO -vP -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -vP -vP -cw -FI -cw -JZ -vP -vP -vP -aw -aw -aa -aa -aa -aa -aa -aa -aa +a +a +a +a +a +a +E +z +V +V +z +E +E +E +E +E +E +E +E +E +E +z +z +e +S +e +W +z +z +z +E +E +a +a +a +a +a +a +a "} (17,1,1) = {" -aa -aa -aa -aa -aa -aa -aw -vP -tG -cw -vP -vP -aw -vP -vP -vP -vP -vP -vP -vP -vP -vP -cw -cw -vP -vP -vP -vP -aw -aw -aw -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +a +a +a +E +z +p +e +z +z +E +z +z +z +z +z +z +z +z +z +e +e +z +z +z +z +E +E +E +a +a +a +a +a +a +a +a "} (18,1,1) = {" -aa -aa -aa -aa -aa -aa -aw -vP -cw -cw -cw -vP -vP -vP -cw -cw -cw -cw -cw -cw -vP -vP -cw -vP -vP -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aX +a +a +a +a +a +a +E +z +e +e +e +z +z +z +e +e +e +e +e +e +z +z +e +z +z +E +E +E +E +E +E +E +E +E +E +E +E +E +O "} (19,1,1) = {" -aw -aw -aw -aw -aw -aw -aw -vP -vP -cw -cw -cw -vP -cw -cw -cw -cw -cw -cw -sO -cw -cw -cw -vP -aw -aw -aa -aa -aa -aw -TA -aR -aR -aR -aR -aR -aR -aR -aw +E +E +E +E +E +E +E +z +z +e +e +e +z +e +e +e +e +e +e +V +e +e +e +z +E +E +a +a +a +E +Q +q +q +q +q +q +q +q +E "} (20,1,1) = {" -aw -vP -vP -vP -vP -aw -aw -aw -vP -vP -cw -sO -cw -cw -cw -vP -vP -vP -vP -cw -cw -bV -vP -vP -aw -aa -aa -aa -aa -aw -aR -ag -ag -ag -ag -ag -ag -ag -aw +E +z +z +z +z +E +E +E +z +z +e +V +e +e +e +z +z +z +z +e +e +t +z +z +E +a +a +a +a +E +q +A +A +A +A +A +A +A +E "} (21,1,1) = {" -aw -vP -JZ -rY -vP -vP -vP -vP -vP -vP -cw -cw -cw -cw -vP -vP -aw -aw -vP -vP -cw -cw -vP -aw -aw -aa -aa -aa -aa -aw -aR -ag -ag -ag -ag -ag -ag -ag -aw +E +z +W +I +z +z +z +z +z +z +e +e +e +e +z +z +E +E +z +z +e +e +z +E +E +a +a +a +a +E +q +A +A +A +A +A +A +A +E "} (22,1,1) = {" -aw -WD -bV -Hu -cw -vP -vP -cw -cw -cw -cw -cw -cw -vP -vP -aw -aw -aw -vP -cw -cw -cw -vP -aw -aa -aa -aa -aa -aa -aw -aR -ag -aY -ag -ag -ag -ag -ag -aw +E +G +t +h +e +z +z +e +e +e +e +e +e +z +z +E +E +E +z +e +e +e +z +E +a +a +a +a +a +E +q +A +C +A +A +A +A +A +E "} (23,1,1) = {" -aw -WD -JT -JZ -sO -cw -cw -cw -vP -vP -cw -vP -vP -vP -aw -aw -aw -aw -vP -cw -cw -vP -vP -aw -aa -aa -aa -aa -aa -aw -aR -aY -aY -aY -ag -ag -ag -ag -aw +E +G +K +W +V +e +e +e +z +z +e +z +z +z +E +E +E +E +z +e +e +z +z +E +a +a +a +a +a +E +q +C +C +C +A +A +A +A +E "} (24,1,1) = {" -aw -vP -vP -rY -rY -vP -vP -vP -vP -vP -cw -vP -aw -aw -aw -aw -aw -aw -vP -cw -cw -vP -aw -aw -aw -aa -aa -aa -aa -aw -aR -aY -aY -ag -ag -aY -ag -ag -aw +E +z +z +I +I +z +z +z +z +z +e +z +E +E +E +E +E +E +z +e +e +z +E +E +E +a +a +a +a +E +q +C +C +A +A +C +A +A +E "} (25,1,1) = {" -aw -aw -vP -vP -vP -vP -aw -aw -aw -vP -cw -vP -vP -aw -aw -aw -aw -aw -vP -cw -nq -vP -vP -vP -aw -aw -aw -aw -aw -aw -bU -aY -aY -aY -ag -aY -aY -ag -aw +E +E +z +z +z +z +E +E +E +z +e +z +z +E +E +E +E +E +z +e +s +z +z +z +E +E +E +E +E +E +b +C +C +C +A +C +C +A +E "} (26,1,1) = {" -aa -aw -aw -aw -aw -aw -aw -aw -aw -vP -cw -cw -vP -aw -aw -aw -aw -aw -vP -cw -cw -cw -cw -vP -vP -vP -aw -aw -aw -vP -vP -an -an -an -an -an -av -ag -aw +a +E +E +E +E +E +E +E +E +z +e +e +z +E +E +E +E +E +z +e +e +e +e +z +z +z +E +E +E +z +z +n +n +n +n +n +v +A +E "} (27,1,1) = {" -aa -aa -aa -aa -aa -aw -aw -vP -vP -vP -cw -cw -vP -vP -aw -aw -aw -aw -vP -vP -cw -cw -cw -cw -cw -vP -vP -vP -vP -jG -cw -an -aj -aj -aj -an -an -ag -aw +a +a +a +a +a +E +E +z +z +z +e +e +z +z +E +E +E +E +z +z +e +e +e +e +e +z +z +z +z +k +e +n +j +j +j +n +n +A +E "} (28,1,1) = {" -aa -aa -aa -aa -aa -aw -vP -vP -RZ -cw -Hu -sO -JZ -vP -aw -aw -aw -vP -vP -cw -cw -vP -vP -cw -cw -cw -vP -sO -cw -cw -cw -an -an -an -an -an -an -ag -aw +a +a +a +a +a +E +z +z +T +e +h +V +W +z +E +E +E +z +z +e +e +z +z +e +e +e +z +V +e +e +e +n +n +n +n +n +n +A +E "} (29,1,1) = {" -aa -aa -aa -aa -aa -aw -vP -XX -ds -cw -cw -JZ -rY -vP -aw -aw -aw -vP -cw -cw -vP -vP -vP -vP -cw -sO -vP -sO -bV -cw -cw -an -an -aF -aH -an -an -ag -aw +a +a +a +a +a +E +z +N +f +e +e +W +I +z +E +E +E +z +e +e +z +z +z +z +e +V +z +V +t +e +e +n +n +F +H +n +n +A +E "} (30,1,1) = {" -aa -aa -aa -aa -aa -aw -vP -bR -Lb -cw -rY -rY -vP -vP -aw -aw -aw -vP -cw -vP -vP -aw -aw -vP -vP -vP -vP -vP -jG -cw -cw -an -an -an -an -an -an -ag -aw +a +a +a +a +a +E +z +x +o +e +I +I +z +z +E +E +E +z +e +z +z +E +E +z +z +z +z +z +k +e +e +n +n +n +n +n +n +A +E "} (31,1,1) = {" -aa -aa -aa -aa -aa -aw -vP -vP -vP -cw -vP -vP -vP -aw -aw -aw -aw -vP -cw -vP -vP -aw -aw -aw -aw -aw -aw -aw -vP -cw -cw -an -aL -an -an -an -an -ag -aw +a +a +a +a +a +E +z +z +z +e +z +z +z +E +E +E +E +z +e +z +z +E +E +E +E +E +E +E +z +e +e +n +L +n +n +n +n +A +E "} (32,1,1) = {" -aa -aa -aa -aa -aa -aw -aw -aw -vP -cw -vP -aw -aw -aw -aw -aw -aw -vP -cw -cw -vP -aw -aa -aa -aa -aa -aw -aw -vP -cw -cw -an -an -an -an -an -ar -ag -aw +a +a +a +a +a +E +E +E +z +e +z +E +E +E +E +E +E +z +e +e +z +E +a +a +a +a +E +E +z +e +e +n +n +n +n +n +r +A +E "} (33,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aw -vP -cw -vP -aw -aw -aa -aa -aa -aw -dl -vP -sO -vP -aw -aa -aa -aa -aa -aw -vP -vP -vP -aR -aY -ag -ag -aY -ag -ag -ag -aw +a +a +a +a +a +a +a +E +z +e +z +E +E +a +a +a +E +l +z +V +z +E +a +a +a +a +E +z +z +z +q +C +A +A +C +A +A +A +E "} (34,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aw -vP -sO -vP -aw -aw -aa -aa -aa -aw -aw -vP -cw -vP -aw -aa -aa -aa -aa -aw -vP -aw -aR -aR -aY -aY -aY -ag -ag -ag -ag -aw +a +a +a +a +a +a +a +E +z +V +z +E +E +a +a +a +E +E +z +e +z +E +a +a +a +a +E +z +E +q +q +C +C +C +A +A +A +A +E "} (35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aw -vP -cw -vP -aw -aw -aa -aa -aa -aw -aw -vP -cw -vP -aw -aa -aa -aa -aa -aw -aw -aw -aR -aR -ag -ag -ag -ag -ag -ag -ag -aw +a +a +a +a +a +a +a +E +z +e +z +E +E +a +a +a +E +E +z +e +z +E +a +a +a +a +E +E +E +q +q +A +A +A +A +A +A +A +E "} (36,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aw -vP -cw -vP -aw -aw -aw -aw -aw -aw -vP -vP -cw -vP -aw -aa -aa -aa -aa -aa -aa -aw -aR -aR -ag -aY -ab -ag -ag -ag -ag -aw +a +a +a +a +a +a +a +E +z +e +z +E +E +E +E +E +E +z +z +e +z +E +a +a +a +a +a +a +E +q +q +A +C +D +A +A +A +A +E "} (37,1,1) = {" -aa -aa -aa -aa -aa -aa -aw -aw -vP -cw -vP -aw -aw -aw -aw -aw -vP -vP -cw -cw -vP -aw -aa -aa -aa -aa -aa -aa -aw -aR -aR -ag -ag -ag -ag -ag -ag -ag -aw +a +a +a +a +a +a +E +E +z +e +z +E +E +E +E +E +z +z +e +e +z +E +a +a +a +a +a +a +E +q +q +A +A +A +A +A +A +A +E "} (38,1,1) = {" -aa -aa -aa -aa -aa -aw -aw -vP -vP -cw -vP -vP -vP -vP -vP -vP -vP -cw -cw -vP -vP -aw -aa -aa -aa -aa -aa -aa -aw -aR -aR -ag -ag -ag -ag -ag -ag -ag -aw +a +a +a +a +a +E +E +z +z +e +z +z +z +z +z +z +z +e +e +z +z +E +a +a +a +a +a +a +E +q +q +A +A +A +A +A +A +A +E "} (39,1,1) = {" -aa -aa -aa -aa -aa -aw -vP -vP -cw -cw -JZ -vP -vP -cw -cw -Wp -cw -cw -vP -vP -aw -aw -aa -aa -aa -aa -aa -aa -aw -TA -aR -aR -aR -aR -aR -aR -aR -aR -aw +a +a +a +a +a +E +z +z +e +e +W +z +z +e +e +P +e +e +z +z +E +E +a +a +a +a +a +a +E +Q +q +q +q +q +q +q +q +q +E "} (40,1,1) = {" -aa -aa -aa -aa -aw -aw -vP -rY -cw -Hu -cw -cw -cw -cw -vP -vP -vP -vP -vP -aw -aw -aa -aa -aa -aa -aa -aa -aa -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw +a +a +a +a +E +E +z +I +e +h +e +e +e +e +z +z +z +z +z +E +E +a +a +a +a +a +a +a +E +E +E +E +E +E +E +E +E +E +E "} (41,1,1) = {" -aa -aa -aa -aa -aw -vP -vP -JZ -cw -sO -cw -JZ -vP -vP -vP -aw -aw -aw -aw -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +a +E +z +z +W +e +V +e +W +z +z +z +E +E +E +E +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (42,1,1) = {" -aa -aa -aa -aa -aw -vP -JZ -JT -cw -rY -rY -vP -vP -aw -aw -aw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +a +a +a +a +E +z +W +K +e +I +I +z +z +E +E +E +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a "} (43,1,1) = {" -aa -aa -aa -aa -aw -ie -vP -vP -vP -vP -vP -vP -aw -aw -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 +a +a +a +a +E +c +z +z +z +z +z +z +E +E +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 "} (44,1,1) = {" -aa -aa -aa -aa -aw -aw -aw -aw -aw -aw -aw -aw -aw -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 +a +a +a +a +E +E +E +E +E +E +E +E +E +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 "} diff --git a/_maps/map_files/LimaStation/LimaStation.dmm b/bubber_archive/Limastation/LimaStation.dmm similarity index 99% rename from _maps/map_files/LimaStation/LimaStation.dmm rename to bubber_archive/Limastation/LimaStation.dmm index 272e5cd3a2f5d..eae2ee64ae6c6 100644 --- a/_maps/map_files/LimaStation/LimaStation.dmm +++ b/bubber_archive/Limastation/LimaStation.dmm @@ -5315,6 +5315,16 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) +"chZ" = ( +/obj/machinery/pdapainter, +/obj/structure/cable, +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/obj/item/stamp/head/hop{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/hop) "cia" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/machinery/vending/coffee, @@ -7059,11 +7069,6 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"cUn" = ( -/obj/item/trash/waffles, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/port/lower) "cUp" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -9850,32 +9855,6 @@ /obj/structure/closet/bombcloset, /turf/open/floor/iron, /area/station/science/ordnance/storage) -"dWf" = ( -/obj/machinery/camera{ - c_tag = "Command - Head of Security's Office"; - dir = 9; - network = list("ss13","prison") - }, -/obj/machinery/button/door{ - id = "hosspace"; - name = "Space Shutters Control"; - pixel_x = -8; - pixel_y = 24; - req_access = list("hos") - }, -/obj/machinery/button/door{ - id = "rabbitcontainment"; - name = "Privacy Shutters Control"; - pixel_x = -8; - pixel_y = 35; - req_access = list("hos") - }, -/obj/machinery/keycard_auth/wall_mounted/directional/north{ - pixel_x = 6; - pixel_y = 24 - }, -/turf/open/floor/carpet/red, -/area/station/command/heads_quarters/hos) "dWi" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/cafeteria, @@ -10239,6 +10218,21 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/construction/mining/aux_base) +"egA" = ( +/obj/structure/table/wood, +/obj/item/pinpointer/nuke, +/obj/item/disk/nuclear, +/obj/item/radio/intercom/directional/south{ + pixel_y = -40 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/south{ + pixel_y = -24 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "egF" = ( /obj/machinery/door/airlock/security/glass{ name = "Cell 6" @@ -11788,6 +11782,13 @@ /obj/item/stack/spacecash/c100, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"eKg" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/sink/directional/north, +/obj/structure/mirror/directional/south, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "eKq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -11994,16 +11995,6 @@ /obj/structure/window/spawner/directional/east, /turf/open/floor/plating, /area/station/maintenance/fore) -"eNA" = ( -/obj/machinery/pdapainter, -/obj/structure/cable, -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/obj/item/stamp/head/hop{ - pixel_x = 7; - pixel_y = 10 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/hop) "eNB" = ( /obj/structure/cable, /turf/open/floor/wood/large, @@ -13637,6 +13628,32 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/carpet/black, /area/station/security/prison/workout) +"fsf" = ( +/obj/machinery/camera{ + c_tag = "Command - Head of Security's Office"; + dir = 9; + network = list("ss13","prison") + }, +/obj/machinery/button/door{ + id = "hosspace"; + name = "Space Shutters Control"; + pixel_x = -8; + pixel_y = 24; + req_access = list("hos") + }, +/obj/machinery/button/door{ + id = "rabbitcontainment"; + name = "Privacy Shutters Control"; + pixel_x = -8; + pixel_y = 35; + req_access = list("hos") + }, +/obj/machinery/keycard_auth/wall_mounted/directional/north{ + pixel_x = 6; + pixel_y = 24 + }, +/turf/open/floor/carpet/red, +/area/station/command/heads_quarters/hos) "fsh" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18045,14 +18062,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/sepia, /area/station/service/chapel/funeral) -"gWO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet) "gWU" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/wood, @@ -18228,11 +18237,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/smooth, /area/station/engineering/storage) -"hav" = ( -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/obj/machinery/light/directional/south, -/turf/open/floor/carpet/royalblue, -/area/station/command/heads_quarters/qm) "haw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19477,13 +19481,6 @@ dir = 8 }, /area/station/engineering/gravity_generator) -"hyI" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/structure/sink/directional/north, -/obj/structure/mirror/directional/south, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "hyM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -19705,21 +19702,6 @@ /obj/machinery/vending/games, /turf/open/floor/iron/dark, /area/station/service/library) -"hCW" = ( -/obj/structure/table/wood, -/obj/item/pinpointer/nuke, -/obj/item/disk/nuclear, -/obj/item/radio/intercom/directional/south{ - pixel_y = -40 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/south{ - pixel_y = -24 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "hDd" = ( /obj/structure/closet/secure_closet/captains, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20653,6 +20635,14 @@ /obj/machinery/griddle, /turf/open/floor/iron/showroomfloor, /area/station/cargo/miningdock) +"hWU" = ( +/obj/machinery/modular_computer/preset/research{ + dir = 8 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/east, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/station/command/heads_quarters/rd) "hXf" = ( /obj/docking_port/stationary{ dheight = 4; @@ -38836,14 +38826,6 @@ /obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"oDE" = ( -/obj/machinery/modular_computer/preset/engineering{ - dir = 1 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/south, -/obj/effect/turf_decal/trimline/yellow/filled/end, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "oDJ" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, @@ -41259,6 +41241,14 @@ /obj/effect/spawner/random/structure/girder, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"pza" = ( +/obj/machinery/modular_computer/preset/engineering{ + dir = 1 + }, +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/obj/effect/turf_decal/trimline/yellow/filled/end, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "pzc" = ( /turf/open/floor/carpet, /area/station/hallway/primary/central) @@ -52782,20 +52772,17 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/port) +"tEk" = ( +/obj/machinery/keycard_auth/wall_mounted/directional/south, +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/royalblue, +/area/station/command/heads_quarters/qm) "tEp" = ( /obj/structure/closet/crate, /obj/effect/spawner/random/maintenance, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"tEL" = ( -/obj/machinery/modular_computer/preset/research{ - dir = 8 - }, -/obj/machinery/keycard_auth/wall_mounted/directional/east, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron/showroomfloor, -/area/station/command/heads_quarters/rd) "tES" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/yellow{ @@ -56490,6 +56477,14 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/science) +"vaX" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet) "vbA" = ( /turf/open/floor/plating, /area/station/security/brig) @@ -86450,7 +86445,7 @@ fDp vCU iIH nkM -cUn +tGt hzu bep daQ @@ -98038,7 +98033,7 @@ ivn gDp snq bAs -hyI +eKg fZZ jRZ pSr @@ -145007,7 +145002,7 @@ xCW tJH tLO tPT -dWf +fsf rHX pAs xNv @@ -159725,7 +159720,7 @@ sdD nTe aSP rkH -hav +tEk sdD aaU ivG @@ -165056,7 +165051,7 @@ tzQ uJk vOi gXg -gWO +vaX xxF dKP ojD @@ -166153,7 +166148,7 @@ dqa dqa awG dqa -hCW +egA bXb bXb rqp @@ -168704,7 +168699,7 @@ glx nfN ocW gmV -eNA +chZ xAF sgG aYA @@ -170005,7 +170000,7 @@ uqB noJ kqi bWW -oDE +pza kJs eIw csC @@ -175092,7 +175087,7 @@ dcT fkq ycQ fVo -tEL +hWU mRr nJo ntU diff --git a/bubber_archive/Limastation/README.txt b/bubber_archive/Limastation/README.txt new file mode 100644 index 0000000000000..f6707a55e0ef4 --- /dev/null +++ b/bubber_archive/Limastation/README.txt @@ -0,0 +1,12 @@ +## General Information + +Limastation is a medium sized map ported from Talestation in the early days of Bubberstation. + +## ARCHIVAL REASON + +Unmaintained, and it has not been running on the server's map rotation for multiple months. There's a lot of missing features and overall good mapping sense that makes this station not really popular among the playerbase. + +## Removal Timeframe +- **Orginal PR Number:** #305 +- **Last Upstream PR Number:** #2220 +- **Last Commit SHA:** 618d2244021c037c7280438e9dd17671f3f116c3 diff --git a/_maps/limastation.json b/bubber_archive/Limastation/limastation.json similarity index 100% rename from _maps/limastation.json rename to bubber_archive/Limastation/limastation.json diff --git a/bubber_archive/README b/bubber_archive/README new file mode 100644 index 0000000000000..2a1819b6036dd --- /dev/null +++ b/bubber_archive/README @@ -0,0 +1,21 @@ +## This folder is an archive folder for abandoned maps, project, and code. + +**Mandatory Archive Guidelines** +- Must not be upstream code or maps (Modular Skyrat and TG) +- Every archival .dm folder must be unticked. +- A new folder must be created with an accompanied README. +- Project information +- The justification for its archival +- Its original PR in README +- Last Upstream Merge PR Number in README +- Last Commit SHA in README +- Must follow the bellow format + +## General Information + +## ARCHIVAL REASON + +## Removal Timeframe +- **Orginal PR Number:** +- **Last Upstream PR Number:** +- **Last Commit SHA:** diff --git a/_maps/map_files/NSVBlueshift/Blueshift.dmm b/bubber_archive/blueshift/Blueshift.dmm similarity index 99% rename from _maps/map_files/NSVBlueshift/Blueshift.dmm rename to bubber_archive/blueshift/Blueshift.dmm index 011ae01bd4a22..1f424afd87208 100644 --- a/_maps/map_files/NSVBlueshift/Blueshift.dmm +++ b/bubber_archive/blueshift/Blueshift.dmm @@ -73,10 +73,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"aba" = ( -/obj/machinery/smartfridge/drying, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "abj" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -2267,17 +2263,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/common/tailoring) -"axj" = ( -/obj/machinery/conveyor{ - id = "cargounload" - }, -/obj/machinery/camera/directional/east{ - c_tag = "Cargo Bay - Starboard"; - name = "cargo camera" - }, -/obj/machinery/light/directional/east, -/turf/open/floor/plating, -/area/station/cargo/storage) "axk" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -3346,11 +3331,6 @@ /obj/machinery/duct, /turf/open/floor/wood, /area/station/common/pool) -"aIg" = ( -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/machinery/incident_display/bridge/directional/south, -/turf/open/floor/iron/dark/side, -/area/station/hallway/secondary/command) "aIi" = ( /obj/structure/grille, /obj/structure/window/reinforced/spawner/directional/south, @@ -4838,13 +4818,6 @@ }, /turf/open/floor/wood, /area/station/security/courtroom) -"aYi" = ( -/obj/machinery/door/airlock/external{ - name = "Supply Dock Airlock" - }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, -/turf/open/floor/iron, -/area/station/cargo/storage) "aYj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19439,17 +19412,6 @@ dir = 1 }, /area/station/security/checkpoint/science/research) -"dIj" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/cable, -/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, -/area/station/maintenance/department/medical) "dIn" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -22791,14 +22753,6 @@ /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/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, @@ -23569,20 +23523,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"eym" = ( -/obj/structure/disposaloutlet{ - dir = 1; - name = "Cargo Deliveries" - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/conveyor{ - dir = 1; - id = "cargoload" - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "eyt" = ( /obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt{ @@ -28471,6 +28411,12 @@ /obj/structure/closet, /turf/open/floor/plating, /area/station/maintenance/fore/upper) +"frV" = ( +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/storage) "fsa" = ( /obj/structure/table, /obj/machinery/reagentgrinder{ @@ -31884,16 +31830,6 @@ }, /turf/open/floor/iron/dark/smooth_large/airless, /area/space/nearstation) -"gbm" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/smartfridge/drying/rack, -/turf/open/floor/wood, -/area/station/service/chapel) "gbv" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -37562,6 +37498,33 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central) +"hhx" = ( +/obj/machinery/door/firedoor, +/obj/machinery/flasher{ + id = "secentranceflasher"; + pixel_x = 25 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-enterance" + }, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" + }, +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/obj/effect/turf_decal/delivery/blue, +/obj/machinery/door/poddoor/preopen{ + id = "brigfront"; + name = "Brig Blast Door" + }, +/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, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark, +/area/station/security/brig) "hhy" = ( /obj/machinery/door/poddoor/preopen{ id = "ceblast"; @@ -38926,12 +38889,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/science/research) -"hvU" = ( -/obj/effect/turf_decal/caution/stand_clear{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/storage) "hvV" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger_multi, @@ -59131,13 +59088,6 @@ }, /turf/open/floor/carpet/royalblack, /area/station/command/heads_quarters/qm) -"lov" = ( -/obj/machinery/conveyor{ - id = "cargoload" - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plating, -/area/station/cargo/storage) "lox" = ( /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -62715,29 +62665,6 @@ dir = 4 }, /area/station/hallway/primary/central/aft) -"lXP" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-enterance" - }, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/turf_decal/delivery/blue, -/obj/machinery/door/poddoor/preopen{ - id = "brigfront"; - name = "Brig Blast Door" - }, -/obj/effect/landmark/navigate_destination, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark, -/area/station/security/brig) "lXQ" = ( /obj/structure/table/wood, /obj/machinery/computer/records/medical/laptop, @@ -70108,33 +70035,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/port/central) -"nxd" = ( -/obj/machinery/door/firedoor, -/obj/machinery/flasher{ - id = "secentranceflasher"; - pixel_x = 25 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig-enterance" - }, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrig"; - name = "Brig" - }, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/turf_decal/delivery/blue, -/obj/machinery/door/poddoor/preopen{ - id = "brigfront"; - name = "Brig Blast Door" - }, -/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, -/obj/machinery/scanner_gate/preset_guns, -/turf/open/floor/iron/dark, -/area/station/security/brig) "nxf" = ( /obj/structure/railing, /obj/item/cigbutt, @@ -82691,6 +82591,13 @@ /obj/item/bikehorn/rubberducky, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) +"pQR" = ( +/obj/machinery/door/airlock/external/glass{ + name = "Supply Dock Airlock" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/iron/smooth, +/area/station/cargo/storage) "pQT" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -84826,6 +84733,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical) +"qlB" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/incident_display/bridge/directional/south, +/turf/open/floor/iron/dark/side, +/area/station/hallway/secondary/command) "qlC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -86101,13 +86013,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/glass/reinforced, /area/station/security/prison/safe) -"qvW" = ( -/obj/machinery/conveyor/inverted{ - dir = 6; - id = "cargoload" - }, -/turf/open/floor/plating, -/area/station/cargo/storage) "qvX" = ( /turf/closed/wall/r_wall, /area/station/science/server) @@ -92037,6 +91942,29 @@ /obj/structure/closet/secure_closet/engineering_personal, /turf/open/floor/iron/dark, /area/station/engineering/break_room) +"rCE" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig-enterance" + }, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrig"; + name = "Brig" + }, +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/obj/effect/turf_decal/delivery/blue, +/obj/machinery/door/poddoor/preopen{ + id = "brigfront"; + name = "Brig Blast Door" + }, +/obj/effect/landmark/navigate_destination, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/machinery/scanner_gate/preset_guns, +/turf/open/floor/iron/dark, +/area/station/security/brig) "rCH" = ( /obj/structure/rack/wooden, /obj/item/clothing/under/color/yellow{ @@ -95111,6 +95039,16 @@ /obj/structure/flora/bush/flowers_pp, /turf/open/floor/grass, /area/station/medical/patients_rooms) +"siz" = ( +/obj/structure/disposaloutlet{ + dir = 1; + name = "Cargo Deliveries" + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/cargo/storage) "siA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -95196,6 +95134,13 @@ /obj/item/mod/module/thermal_regulator, /turf/open/floor/iron/dark, /area/station/engineering/storage_shared) +"sjg" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "cargoload" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "sjh" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, @@ -98559,6 +98504,15 @@ /obj/structure/grandfatherclock, /turf/open/floor/carpet, /area/station/service/chapel/office) +"sPZ" = ( +/obj/machinery/conveyor{ + dir = 10; + id = "cargounload" + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/light/directional/east, +/turf/open/floor/plating, +/area/station/cargo/storage) "sQa" = ( /obj/structure/sign/poster/contraband/lusty_xenomorph/directional/east, /obj/structure/table, @@ -101992,14 +101946,6 @@ }, /turf/open/openspace, /area/station/maintenance/aft/upper) -"txz" = ( -/obj/machinery/conveyor{ - dir = 10; - id = "cargounload" - }, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/plating, -/area/station/cargo/storage) "txP" = ( /obj/machinery/duct, /turf/open/floor/carpet/purple, @@ -110533,6 +110479,16 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/aisat_interior) +"vfU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/smartfridge/drying/rack, +/turf/open/floor/wood, +/area/station/service/chapel) "vfY" = ( /obj/structure/table, /obj/machinery/chem_dispenser/drinks{ @@ -112608,6 +112564,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) +"vyB" = ( +/obj/machinery/smartfridge/drying, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "vyF" = ( /obj/structure/bed/medical/anchored{ dir = 1 @@ -112729,16 +112689,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"vyU" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/item/trash/waffles, -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/turf/open/floor/plating/airless, -/area/station/maintenance/fore/upper) "vyY" = ( /obj/item/kirbyplants/organic/plant21, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -112774,6 +112724,14 @@ "vzh" = ( /turf/closed/wall, /area/station/maintenance/department/medical/central) +"vzi" = ( +/obj/machinery/conveyor/inverted{ + dir = 5; + id = "cargoload" + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/cargo/storage) "vzq" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -125099,6 +125057,16 @@ dir = 4 }, /area/station/command/secure_bunker) +"xSA" = ( +/obj/machinery/conveyor{ + id = "cargounload" + }, +/obj/machinery/camera/directional/east{ + c_tag = "Cargo Bay - Starboard"; + name = "cargo camera" + }, +/turf/open/floor/plating, +/area/station/cargo/storage) "xSD" = ( /obj/structure/table, /obj/item/paper/pamphlet/gateway, @@ -151057,7 +151025,7 @@ vHZ hyA hyF rlC -gbm +vfU hyA hyA hyA @@ -157415,7 +157383,7 @@ msQ hlp vxA sqV -lXP +rCE sjH tOv weu @@ -157929,7 +157897,7 @@ qhq rsX lze jPv -nxd +hhx tUK ush cbm @@ -162334,7 +162302,7 @@ vsd kcP tWO gWE -aba +vyB vpa mNS qkB @@ -168261,7 +168229,7 @@ vaL xdU kMF eFn -lov +vzi pMw bJC bQX @@ -168269,8 +168237,8 @@ qfc pEu uXP eJa -axj -txz +xSA +sPZ oTl tpI kGC @@ -168518,16 +168486,16 @@ qyM xdU aTo eFn -qvW -eym +sjg +siz kGC gaG -aYi -kGC -aYi +pQR +ilS +pQR bka kGC -kGC +pWU sej kGC ilS @@ -168779,9 +168747,9 @@ kGC kGC kGC mAN -hvU -pWU -hvU +frV +kGC +frV sEm kGC mpJ @@ -169036,9 +169004,9 @@ yfv eeU kGC gaG -aYi -kGC -aYi +pQR +pWU +pQR bka kGC jbh @@ -222957,7 +222925,7 @@ duP gRC wZW gwW -aIg +qlB xai wEl vre @@ -233706,7 +233674,7 @@ hJH hJH hJH hJH -vyU +hxE jfV dgl ofy @@ -234075,7 +234043,7 @@ jhU aDi lUf uBf -dIj +uBf mlH aYj cob @@ -235013,7 +234981,7 @@ bPe hJH eKf rHT -esg +rUd ugo mww mww diff --git a/bubber_archive/blueshift/README.txt b/bubber_archive/blueshift/README.txt new file mode 100644 index 0000000000000..e930140149c7e --- /dev/null +++ b/bubber_archive/blueshift/README.txt @@ -0,0 +1,12 @@ +## General Information + +Blueshift is a map made by Skyrat which was a giant three Z level ship that dwarves most stations + +## ARCHIVAL REASON + +It is unmaintained, it has major performance impacts on the server, and it was way too big for any feasable sanity to be running inside rotation. It was already pulled from rotation at the time of this commit. + +## Removal Timeframe +- **Orginal PR Number:** Skyrat Map +- **Last Upstream PR Number:** #2220 +- **Last Commit SHA:** 90a2185b1b0496d0f4481916da168a4894d475dc diff --git a/_maps/blueshift.json b/bubber_archive/blueshift/blueshift.json similarity index 100% rename from _maps/blueshift.json rename to bubber_archive/blueshift/blueshift.json diff --git a/bubber_archive/ss13_construct/README.txt b/bubber_archive/ss13_construct/README.txt new file mode 100644 index 0000000000000..e2883798da58b --- /dev/null +++ b/bubber_archive/ss13_construct/README.txt @@ -0,0 +1,12 @@ +## General Information + +SS13_Construct is a developer map created as an optional alternative to Runtime Station as a spin off of GMOD Construct, and accompanied with various gmod related tools, such as the physics gun, which is still used in the codebase. + +## ARCHIVAL REASON + +It is unmaintained, abandoned, and unused. It also was a waste of time due to Unit Tests still running on it until its .json was converted into a .txt in PR #1811 + +## Removal Timeframe +- **Orginal PR Number:** #593 +- **Last Upstream PR Number:** #2032 +- **Last Commit SHA:** 209faf2 diff --git a/_maps/map_files/ss13construct/ss13_construct.dmm b/bubber_archive/ss13_construct/ss13_construct.dmm similarity index 100% rename from _maps/map_files/ss13construct/ss13_construct.dmm rename to bubber_archive/ss13_construct/ss13_construct.dmm diff --git a/_maps/ss13_construct.txt b/bubber_archive/ss13_construct/ss13_construct.json similarity index 97% rename from _maps/ss13_construct.txt rename to bubber_archive/ss13_construct/ss13_construct.json index 625916affc2fb..e1ead45cdc13b 100644 --- a/_maps/ss13_construct.txt +++ b/bubber_archive/ss13_construct/ss13_construct.json @@ -1,4 +1,3 @@ -CONVERTED TO .txt { "version": 1, "map_name": "SS13 Construct", diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 9f0d708273dde..11cf261276d72 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -16,8 +16,8 @@ #define MINOR_NEGATIVE 4 -//Mutation classes. Normal being on them, extra being additional mutations with instability and other being stuff you dont want people to fuck with like wizard mutate -/// A mutation that can be activated and deactived by completing a sequence +//Mutation classes. Normal being on them, extra being additional mutations with instability and other being stuff you don't want people to fuck with like wizard mutate +/// A mutation that can be activated and deactivated by completing a sequence #define MUT_NORMAL 1 /// A mutation that is in the mutations tab, and can be given and taken away through though the DNA console. Has a 0 before its name in the mutation section of the dna console #define MUT_EXTRA 2 diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm index 4836625d9197f..115748a9a82d9 100644 --- a/code/__DEFINES/MC.dm +++ b/code/__DEFINES/MC.dm @@ -19,7 +19,7 @@ ///creates a running average of "things elapsed" per time period when you need to count via a smaller time period. ///eg you want an average number of things happening per second but you measure the event every tick (50 milliseconds). -///make sure both time intervals are in the same units. doesnt work if current_duration > total_duration or if total_duration == 0 +///make sure both time intervals are in the same units. doesn't work if current_duration > total_duration or if total_duration == 0 #define MC_AVG_OVER_TIME(average, current, total_duration, current_duration) ((((total_duration) - (current_duration)) / (total_duration)) * (average) + (current)) #define MC_AVG_MINUTES(average, current, current_duration) (MC_AVG_OVER_TIME(average, current, 1 MINUTES, current_duration)) @@ -32,7 +32,7 @@ #define STOP_PROCESSING(Processor, Datum) Datum.datum_flags &= ~DF_ISPROCESSING;Processor.processing -= Datum;Processor.currentrun -= Datum /// Returns true if the MC is initialized and running. -/// Optional argument init_stage controls what stage the mc must have initializted to count as initialized. Defaults to INITSTAGE_MAX if not specified. +/// Optional argument init_stage controls what stage the mc must have initialized to count as initialized. Defaults to INITSTAGE_MAX if not specified. #define MC_RUNNING(INIT_STAGE...) (Master && Master.processing > 0 && Master.current_runlevel && Master.init_stage_completed == (max(min(INITSTAGE_MAX, ##INIT_STAGE), 1))) #define MC_LOOP_RTN_NEWSTAGES 1 @@ -141,3 +141,11 @@ }\ /datum/controller/subsystem/ai_controllers/##X/fire() {..() /*just so it shows up on the profiler*/} \ /datum/controller/subsystem/ai_controllers/##X + +#define UNPLANNED_CONTROLLER_SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/unplanned_controllers/##X);\ +/datum/controller/subsystem/unplanned_controllers/##X/New(){\ + NEW_SS_GLOBAL(SS##X);\ + PreInit();\ +}\ +/datum/controller/subsystem/unplanned_controllers/##X/fire() {..() /*just so it shows up on the profiler*/} \ +/datum/controller/subsystem/unplanned_controllers/##X diff --git a/code/__DEFINES/_flags.dm b/code/__DEFINES/_flags.dm index 0ce4e75b78c4d..775e3970104f0 100644 --- a/code/__DEFINES/_flags.dm +++ b/code/__DEFINES/_flags.dm @@ -11,6 +11,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define DF_USE_TAG (1<<0) #define DF_VAR_EDITED (1<<1) #define DF_ISPROCESSING (1<<2) +/// Placed on datums that have a static, constant reference. Primarily only used for turfs. +#define DF_STATIC_OBJECT (1<<3) //FLAGS BITMASK // scroll down before changing the numbers on these @@ -23,7 +25,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #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<<3) -///specifies that this atom is a hologram that isnt real +///specifies that this atom is a hologram that isn't real #define HOLOGRAM_1 (1<<4) ///Whether /atom/Initialize() has already run for the object #define INITIALIZED_1 (1<<5) @@ -50,7 +52,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 /// Whether or not this atom is storing contents for a disassociated storage object #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 +/// We use this to ensure stacked decals don't double up appearance updates for no reason /// 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<<17) @@ -84,9 +86,9 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define RICOCHET_HARD (1<<1) //TURF FLAGS -/// If a turf cant be jaunted through. +/// If a turf can't be jaunted through. #define NOJAUNT (1<<0) -/// If a turf is an usused reservation turf awaiting assignment +/// If a turf is an unused reservation turf awaiting assignment #define UNUSED_RESERVATION_TURF (1<<1) /// If a turf is a reserved turf #define RESERVATION_TURF (1<<2) @@ -143,6 +145,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define BINARY_JAMMING (1<<17) /// This area prevents Bag of Holding rifts from being opened. #define NO_BOH (1<<18) +/// This area prevents fishing from removing unique/limited loot from sources that're also used outside of it. +#define UNLIMITED_FISHING (1<<19) /* These defines are used specifically with the atom/pass_flags bitmask @@ -284,8 +288,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define RELIGION_TOOL_SACRIFICE (1<<1) #define RELIGION_TOOL_SECTSELECT (1<<2) -// ---- Skillchip incompatability flags ---- // -// These flags control which skill chips are compatible with eachother. +// ---- Skillchip incompatibility flags ---- // +// These flags control which skill chips are compatible with each other. // By default, skillchips are incompatible with themselves and multiple of the same istype() cannot be implanted together. Set this flag to disable that check. #define SKILLCHIP_ALLOWS_MULTIPLE (1<<0) // This skillchip is incompatible with other skillchips from the incompatible_category list. diff --git a/code/__DEFINES/_helpers.dm b/code/__DEFINES/_helpers.dm index f1b1b21df3308..4560dac0d8e32 100644 --- a/code/__DEFINES/_helpers.dm +++ b/code/__DEFINES/_helpers.dm @@ -1,5 +1,18 @@ // Stuff that is relatively "core" and is used in other defines/helpers +/** + * The game's world.icon_size. \ + * Ideally divisible by 16. \ + * Ideally a number, but it + * can be a string ("32x32"), so more exotic coders + * will be sad if you use this in math. + */ +#define ICON_SIZE_ALL 32 +/// The X/Width dimension of ICON_SIZE. This will more than likely be the bigger axis. +#define ICON_SIZE_X 32 +/// The Y/Height dimension of ICON_SIZE. This will more than likely be the smaller axis. +#define ICON_SIZE_Y 32 + //Returns the hex value of a decimal number //len == length of returned string #define num2hex(X, len) num2text(X, len, 16) @@ -32,3 +45,7 @@ // Custom types that we define don't get a unique id, but this is useful for identifying // types that don't normally have a way to run istype() on them. #define TYPEID(thing) copytext(REF(thing), 4, 6) + +/// A null statement to guard against EmptyBlock lint without necessitating the use of pass() +/// Used to avoid proc-call overhead. But use sparingly. Probably pointless in most places. +#define EMPTY_BLOCK_GUARD ; diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index 1fd2a7fc662df..1aa8a7f1e8c26 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -326,7 +326,6 @@ ACCESS_PHARMACY, \ ACCESS_PLUMBING, \ ACCESS_PSYCHOLOGY, \ - ACCESS_QM, \ ACCESS_RESEARCH, \ ACCESS_ROBOTICS, \ ACCESS_SCIENCE, \ diff --git a/code/__DEFINES/actions.dm b/code/__DEFINES/actions.dm index 99f9c1aca551d..a99baa7cd65dd 100644 --- a/code/__DEFINES/actions.dm +++ b/code/__DEFINES/actions.dm @@ -10,6 +10,8 @@ #define AB_CHECK_INCAPACITATED (1<<4) ///Action button checks if user is jaunting #define AB_CHECK_PHASED (1<<5) +///Action button checks if user is not on an open turf +#define AB_CHECK_OPEN_TURF (1<<6) DEFINE_BITFIELD(check_flags, list( "CHECK IF HANDS BLOCKED" = AB_CHECK_HANDS_BLOCKED, @@ -18,6 +20,7 @@ DEFINE_BITFIELD(check_flags, list( "CHECK IF CONSCIOUS" = AB_CHECK_CONSCIOUS, "CHECK IF INCAPACITATED" = AB_CHECK_INCAPACITATED, "CHECK IF TEMPORARILY INCORPOREAL" = AB_CHECK_PHASED, + "CHECK IF NOT ON AN OPEN TURF" = AB_CHECK_OPEN_TURF, )) ///Action button triggered with right click diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index e566f62dc53dd..76b159be262de 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -76,8 +76,8 @@ #define ADMIN_LUAVIEW_CHUNK(state, log_index) "(VIEW CODE)" /// Displays "(SHOW)" in the chat, when clicked it tries to show atom(paper). First you need to set the request_state variable to TRUE for the paper. #define ADMIN_SHOW_PAPER(atom) "(SHOW)" -/// Displays "(PRINT)" in the chat, when clicked it will try to print the atom(paper) on the CentCom fax machine. -#define ADMIN_PRINT_FAX(atom, fax_name) "(PRINT)" +/// Displays "(PRINT)" in the chat, when clicked it will try to print the atom(paper) on the CentCom/Syndicate fax machine. +#define ADMIN_PRINT_FAX(atom, sender, destination) "(PRINT)" /// Displays "(PLAY)" in the chat, when clicked it tries to play internet sounds from the request. #define ADMIN_PLAY_INTERNET(text, credit) "(PLAY)" /// Displays "(SEE Z-LEVEL LAYOUT)" in the chat, when clicked it shows the z-level layouts for the current world state. diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index 94780b7d5f3e7..73a8f2d1900bd 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -2,7 +2,6 @@ #define GET_TARGETING_STRATEGY(targeting_type) SSai_behaviors.targeting_strategies[targeting_type] #define HAS_AI_CONTROLLER_TYPE(thing, type) istype(thing?.ai_controller, type) - //AI controller flags //If you add a new status, be sure to add it to the ai_controllers subsystem's ai_controllers_by_status list. ///The AI is currently active. @@ -69,7 +68,7 @@ ///macro for whether it's appropriate to resist right now, used by resist subtree #define SHOULD_RESIST(source) (source.on_fire || source.buckled || HAS_TRAIT(source, TRAIT_RESTRAINED) || (source.pulledby && source.pulledby.grab_state > GRAB_PASSIVE)) ///macro for whether the pawn can act, used generally to prevent some horrifying ai disasters -#define IS_DEAD_OR_INCAP(source) (source.incapacitated() || source.stat) +#define IS_DEAD_OR_INCAP(source) (source.incapacitated || source.stat) GLOBAL_LIST_INIT(all_radial_directions, list( "NORTH" = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = NORTH), diff --git a/code/__DEFINES/ai/monsters.dm b/code/__DEFINES/ai/monsters.dm index fb6952eb08491..330e2d48eb226 100644 --- a/code/__DEFINES/ai/monsters.dm +++ b/code/__DEFINES/ai/monsters.dm @@ -288,3 +288,19 @@ //netguardians /// rocket launcher #define BB_NETGUARDIAN_ROCKET_ABILITY "netguardian_rocket" + +//deer +///our water target +#define BB_DEER_WATER_TARGET "deer_water_target" +///our grass target +#define BB_DEER_GRASS_TARGET "deer_grass_target" +///our tree target +#define BB_DEER_TREE_TARGET "deer_tree_target" +///our temporary playmate +#define BB_DEER_PLAYFRIEND "deer_playfriend" +///our home target +#define BB_DEER_TREEHOME "deer_home" +///our resting duration +#define BB_DEER_RESTING "deer_resting" +///time till our next rest duration +#define BB_DEER_NEXT_REST_TIMER "deer_next_rest_timer" diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index eb1196e6f2aeb..3622a37b59e40 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -165,7 +165,7 @@ GLOBAL_LIST_INIT(syndicate_employers, list( "Waffle Corporation Terrorist", "Waffle Corporation", )) -///employers that are from nanotrasen +///employers that are from Nanotrasen GLOBAL_LIST_INIT(nanotrasen_employers, list( "Champions of Evil", "Corporate Climber", @@ -217,22 +217,28 @@ GLOBAL_LIST_INIT(ai_employers, list( /// Checks if the given mob is a traitor #define IS_TRAITOR(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/traitor)) +/** + * Cult checks + */ + /// Checks if the given mob is a blood cultist -#define IS_CULTIST(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/cult)) +#define IS_CULTIST(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/cult) || HAS_TRAIT(mob, TRAIT_ACT_AS_CULTIST)) + +/// Checks if the given mob is a blood cultist and is guaranteed to return the datum if possible - will cause issues with above trait +#define GET_CULTIST(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/cult)) /// Checks if the mob is a sentient or non-sentient cultist #define IS_CULTIST_OR_CULTIST_MOB(mob) ((IS_CULTIST(mob)) || (mob.faction.Find(FACTION_CULT))) -/// Checks if the given mob is a changeling -#define IS_CHANGELING(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/changeling)) - -/// Checks if the given mob is a nuclear operative -#define IS_NUKE_OP(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/nukeop)) -//Tells whether or not someone is a space ninja -#define IS_SPACE_NINJA(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ninja)) +/** + * Heretic checks + */ /// Checks if the given mob is a heretic. -#define IS_HERETIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic)) +#define IS_HERETIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic) || HAS_TRAIT(mob, TRAIT_ACT_AS_HERETIC)) +/// Checks if the given mob is a heretic and is guaranteed to return the datum if possible - will cause issues with above trait +#define GET_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)) /// Check if the given mob is a lunatic @@ -242,6 +248,19 @@ GLOBAL_LIST_INIT(ai_employers, list( /// CHecks if the given mob is in the mansus realm #define IS_IN_MANSUS(mob) (istype(get_area(mob), /area/centcom/heretic_sacrifice)) +/** + * Etc. + */ + +/// Checks if the given mob is a changeling +#define IS_CHANGELING(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/changeling)) + +/// Checks if the given mob is a nuclear operative +#define IS_NUKE_OP(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/nukeop)) + +//Tells whether or not someone is a space ninja +#define IS_SPACE_NINJA(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ninja)) + /// Checks if the given mob is a wizard #define IS_WIZARD(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/wizard)) diff --git a/code/__DEFINES/apc_defines.dm b/code/__DEFINES/apc_defines.dm index ee6c2bb67d636..efcfdd864f2ec 100644 --- a/code/__DEFINES/apc_defines.dm +++ b/code/__DEFINES/apc_defines.dm @@ -54,12 +54,6 @@ /// The APCs external powernet has enough power to charge the APC. #define APC_HAS_POWER 2 -// Ethereals: -/// How long it takes an ethereal to drain or charge APCs. Also used as a spam limiter. -#define APC_DRAIN_TIME (7.5 SECONDS) -/// How much power ethereals gain/drain from APCs. -#define APC_POWER_GAIN (0.2 * STANDARD_CELL_CHARGE) - // Wires & EMPs: /// The wire value used to reset the APCs wires after one's EMPed. #define APC_RESET_EMP "emp" diff --git a/code/__DEFINES/atmospherics/atmos_helpers.dm b/code/__DEFINES/atmospherics/atmos_helpers.dm index ca32e4859809b..d5bcbf51471c4 100644 --- a/code/__DEFINES/atmospherics/atmos_helpers.dm +++ b/code/__DEFINES/atmospherics/atmos_helpers.dm @@ -82,7 +82,7 @@ GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0)) turf.archived_cycle = SSair.times_fired;\ turf.temperature_archived = turf.temperature; -/* Fetch the energy transferred when two gas mixtures's temperature equalize. +/* Fetch the energy transferred when two gas mixtures' temperature equalize. * * To equalize two gas mixtures, we simply pool the energy and divide it by the pooled heat capacity. * T' = (W1+W2) / (C1+C2) @@ -107,7 +107,7 @@ GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0)) * Not immediately obvious, but saves us operation time. * * We put a lot of parentheses here because the numbers get really really big. - * By prioritizing the division we try to tone the number down so we dont get overflows. + * By prioritizing the division we try to tone the number down so we don't get overflows. * * Arguments: * * temperature_delta: T2 - T1. [/datum/gas_mixture/var/temperature] diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index 10bfb50aa9a3b..bcfde5e66c1bc 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -92,6 +92,7 @@ #define SECHUD_ASSISTANT "hudassistant" #define SECHUD_ATMOSPHERIC_TECHNICIAN "hudatmospherictechnician" #define SECHUD_BARTENDER "hudbartender" +#define SECHUD_BUSSER "hudbusser" #define SECHUD_BITAVATAR "hudbitavatar" #define SECHUD_BITRUNNER "hudbitrunner" #define SECHUD_BOTANIST "hudbotanist" diff --git a/code/__DEFINES/cameranets.dm b/code/__DEFINES/cameranets.dm index 935e015e0cda0..3cd0d30660d3b 100644 --- a/code/__DEFINES/cameranets.dm +++ b/code/__DEFINES/cameranets.dm @@ -30,6 +30,7 @@ #define CAMERA_NETWORK_CARGO "cargo" #define CAMERANET_NETWORK_ABDUCTOR "abductor" #define OPERATIVE_CAMERA_NET "operative" +#define CAMERANET_NETWORK_CURATOR "curator" // Ruins/Away missiosn/Misc camera nets #define CAMERANET_NETWORK_MOON19_XENO "mo19x" diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index c3fe46b0cd496..516fe8c4e193a 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -45,5 +45,11 @@ #define debug_world_log(msg) if (GLOB.Debug2) log_world("DEBUG: [msg]") /// Adds a generic box around whatever message you're sending in chat. Really makes things stand out. #define examine_block(str) ("
" + str + "
") +/// Makes a fieldset with a name in the middle top part. Can apply additional classes +#define fieldset_block(title, content, classes) ("
" + title + "
" + content + "
") +/// Makes a horizontal line with text in the middle +#define separator_hr(str) ("
" + str + "
") /// Emboldens runechat messages #define RUNECHAT_BOLD(str) "+[str]+" +/// Helper which creates a chat message which may have a tooltip in some contexts, but not others. +#define conditional_tooltip(normal_text, tooltip_text, condition) ((condition) ? (span_tooltip(tooltip_text, normal_text)) : (normal_text)) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 2841c8aaabd4b..7861cd5335343 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -13,14 +13,14 @@ #define OXY "oxygen" /// Exhaustion and nonlethal damage. #define STAMINA "stamina" -/// Brain damage. Should probably be decomissioned and replaced with proper organ damage. +/// Brain damage. Should probably be decommissioned and replaced with proper organ damage. #define BRAIN "brain" //Damage flag defines // /// Involves corrosive substances. #define ACID "acid" -/// Involved in checking wheter a disease can infect or spread. Also involved in xeno neurotoxin. +/// Involved in checking whether a disease can infect or spread. Also involved in xeno neurotoxin. #define BIO "bio" /// Involves a shockwave, usually from an explosion. #define BOMB "bomb" @@ -36,7 +36,7 @@ #define LASER "laser" /// Involves a melee attack or a thrown object. #define MELEE "melee" -/// Involved in checking the likelyhood of applying a wound to a mob. +/// Involved in checking the likelihood of applying a wound to a mob. #define WOUND "wound" #define ARMOR_ALL "all_damage_types" @@ -76,15 +76,12 @@ #define CANUNCONSCIOUS (1<<2) /// If set, this mob can be grabbed or pushed when bumped into #define CANPUSH (1<<3) -/// Mob godmode. Prevents most statuses and damage from being taken, but is more often than not a crapshoot. Use with caution. -#define GODMODE (1<<4) DEFINE_BITFIELD(status_flags, list( "CAN STUN" = CANSTUN, "CAN KNOCKDOWN" = CANKNOCKDOWN, "CAN UNCONSCIOUS" = CANUNCONSCIOUS, "CAN PUSH" = CANPUSH, - "GOD MODE" = GODMODE, )) //Health Defines diff --git a/code/__DEFINES/construction/material.dm b/code/__DEFINES/construction/material.dm index 445b4e0dc88e4..57d55ab804281 100644 --- a/code/__DEFINES/construction/material.dm +++ b/code/__DEFINES/construction/material.dm @@ -1,4 +1,4 @@ -//Defines for amount of material retrived from sheets & other items +//Defines for amount of material retrieved from sheets & other items /// The amount of materials you get from a sheet of mineral like iron/diamond/glass etc. 100 Units. #define SHEET_MATERIAL_AMOUNT 100 /// The amount of materials you get from half a sheet. Used in standard object quantities. 50 units. diff --git a/code/__DEFINES/construction/rcd.dm b/code/__DEFINES/construction/rcd.dm index 95c5ab8005323..a8d98215af1dc 100644 --- a/code/__DEFINES/construction/rcd.dm +++ b/code/__DEFINES/construction/rcd.dm @@ -7,7 +7,7 @@ #define RCD_WINDOWGRILLE (1 << 1) /// Windoors & Airlocks #define RCD_AIRLOCK (1 << 2) - /// Literarly anything that is spawned on top of a turf such as tables, machines etc + /// Literally anything that is spawned on top of a turf such as tables, machines etc #define RCD_STRUCTURE (1 << 3) /// For wallmounts like air alarms, fire alarms & apc #define RCD_WALLFRAME (1 << 4) diff --git a/code/__DEFINES/crafting.dm b/code/__DEFINES/crafting.dm index 54dc479aa7306..cb7930e9d1fb6 100644 --- a/code/__DEFINES/crafting.dm +++ b/code/__DEFINES/crafting.dm @@ -28,6 +28,10 @@ #define CRAFT_CHECK_DENSITY (1<<5) /// If the created atom will gain custom mat datums #define CRAFT_APPLIES_MATS (1<<6) +/// Crafting passes reagents of components to the finished product +#define CRAFT_TRANSFERS_REAGENTS (1<<7) +/// Crafting clears all reagents present in the finished product +#define CRAFT_CLEARS_REAGENTS (1<<8) //food/drink crafting defines //When adding new defines, please make sure to also add them to the encompassing list diff --git a/code/__DEFINES/crushing.dm b/code/__DEFINES/crushing.dm index 1261b98e730e8..62705e0e3b871 100644 --- a/code/__DEFINES/crushing.dm +++ b/code/__DEFINES/crushing.dm @@ -8,7 +8,7 @@ #define SUCCESSFULLY_FELL_OVER (1<<2) #define CRUSH_CRIT_SHATTER_LEGS "crush_crit_shatter_legs" -#define CRUSH_CRIT_PARAPALEGIC "crush_crit_parapalegic" +#define CRUSH_CRIT_PARAPLEGIC "crush_crit_paraplegic" #define CRUSH_CRIT_SQUISH_LIMB "crush_crit_pin" #define CRUSH_CRIT_HEADGIB "crush_crit_headgib" #define VENDOR_CRUSH_CRIT_PIN "vendor_crush_crit_pin" diff --git a/code/__DEFINES/database.dm b/code/__DEFINES/database.dm index 3d20b3b9a3cdc..22351b5052d74 100644 --- a/code/__DEFINES/database.dm +++ b/code/__DEFINES/database.dm @@ -4,3 +4,6 @@ #define DB_QUERY_FINISHED 1 /// When there was a problem with the execution of a query. #define DB_QUERY_BROKEN 2 + +///The probability of non-maploaded photos and papers being saved as bottle messages at the end of the round. +#define MESSAGE_BOTTLE_CHANCE 0.2 diff --git a/code/__DEFINES/dcs/signals/signals_action.dm b/code/__DEFINES/dcs/signals/signals_action.dm index 2226e34bcccbd..c6e042a0581d5 100644 --- a/code/__DEFINES/dcs/signals/signals_action.dm +++ b/code/__DEFINES/dcs/signals/signals_action.dm @@ -2,7 +2,7 @@ ///from base of datum/action/proc/Trigger(): (datum/action) #define COMSIG_ACTION_TRIGGER "action_trigger" - // Return to block the trigger from occuring + // Return to block the trigger from occurring #define COMPONENT_ACTION_BLOCK_TRIGGER (1<<0) /// From /datum/action/Grant(): (mob/grant_to) #define COMSIG_ACTION_GRANTED "action_grant" diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index 3282c9387a1e5..2e42957aa3a08 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -9,6 +9,8 @@ #define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON "atom_init_success_on" ///from base of atom/examine(): (/mob, list/examine_text) #define COMSIG_ATOM_EXAMINE "atom_examine" +///from base of atom/examine_tags(): (/mob, list/examine_tags) +#define COMSIG_ATOM_EXAMINE_TAGS "atom_examine_tags" ///from base of atom/get_examine_name(): (/mob, list/overrides) #define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //Positions for overrides list 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 d75d8bacec73a..36a2ca2c80584 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm @@ -15,9 +15,6 @@ ///from base of atom/movable/Bump(): (/atom) #define COMSIG_MOVABLE_BUMP "movable_bump" #define COMPONENT_INTERCEPT_BUMPED (1<<0) -///from base of atom/movable/newtonian_move(): (inertia_direction, start_delay) -#define COMSIG_MOVABLE_NEWTONIAN_MOVE "movable_newtonian_move" - #define COMPONENT_MOVABLE_NEWTONIAN_BLOCK (1<<0) ///from datum/component/drift/apply_initial_visuals(): () #define COMSIG_MOVABLE_DRIFT_VISUAL_ATTEMPT "movable_drift_visual_attempt" #define DRIFT_VISUAL_FAILED (1<<0) @@ -74,7 +71,7 @@ #define COMSIG_MOVABLE_DISPOSING "movable_disposing" // called when movable is expelled from a disposal pipe, bin or outlet on obj/pipe_eject: (direction) #define COMSIG_MOVABLE_PIPE_EJECTING "movable_pipe_ejecting" -///called when the movable sucessfully has its anchored var changed, from base atom/movable/set_anchored(): (value) +///called when the movable successfully has its anchored var changed, from base atom/movable/set_anchored(): (value) #define COMSIG_MOVABLE_SET_ANCHORED "movable_set_anchored" ///from base of atom/movable/setGrabState(): (newstate) #define COMSIG_MOVABLE_SET_GRAB_STATE "living_set_grab_state" @@ -119,6 +116,12 @@ /// From base of area/Exited(): (area/left, direction) #define COMSIG_MOVABLE_EXITED_AREA "movable_exited_area" +///from base of /datum/component/splat/splat: (hit_atom) +#define COMSIG_MOVABLE_SPLAT "movable_splat" + +///from base of /atom/movable/point_at: (atom/A, obj/effect/temp_visual/point/point) +#define COMSIG_MOVABLE_POINTED "movable_pointed" + /// Sent to movables when they are being stolen by a spy: (mob/living/spy, datum/spy_bounty/bounty) #define COMSIG_MOVABLE_SPY_STEALING "movable_spy_stealing" /// Called when something is pushed by a living mob bumping it: (mob/living/pusher, push force) 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 6448be3fecb74..46e179ee567ba 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 @@ -89,7 +89,6 @@ /// Sent from [atom/proc/item_interaction], when this atom is used as a tool and an event occurs #define COMSIG_ITEM_TOOL_ACTED "tool_item_acted" -/// This is sent via item interaction (IE, item clicking on atom) right before the item's inserted into the atom's storage -/// Args: (obj/item/inserting, mob/living/user) -#define COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT "atom_storage_item_interact_insert" - #define BLOCK_STORAGE_INSERT (1<<0) +/// from /obj/projectile/energy/fisher/on_hit() or /obj/item/gun/energy/recharge/fisher when striking a target +#define COMSIG_ATOM_SABOTEUR_ACT "hit_by_saboteur" + #define COMSIG_SABOTEUR_SUCCESS 1 diff --git a/code/__DEFINES/dcs/signals/signals_bitrunning.dm b/code/__DEFINES/dcs/signals/signals_bitrunning.dm index 23461a90a1108..ac3095d6f5af8 100644 --- a/code/__DEFINES/dcs/signals/signals_bitrunning.dm +++ b/code/__DEFINES/dcs/signals/signals_bitrunning.dm @@ -53,3 +53,6 @@ /// from /obj/effect/mob_spawn/ghost_role/human/virtual_domain/proc/artificial_spawn() : (mob/living/runner) #define COMSIG_BITRUNNER_SPAWNED "bitrunner_spawned" + +/// from /obj/effect/landmark/bitrunning/mob_segment/proc/spawn_mobs() : (list/mob/living) +#define COMSIG_BITRUNNING_MOB_SEGMENT_SPAWNED "bitrunner_mob_segment_spawned" diff --git a/code/__DEFINES/dcs/signals/signals_fish.dm b/code/__DEFINES/dcs/signals/signals_fish.dm index 2fbf99446ab94..9b614f924549f 100644 --- a/code/__DEFINES/dcs/signals/signals_fish.dm +++ b/code/__DEFINES/dcs/signals/signals_fish.dm @@ -8,6 +8,13 @@ ///The item won't be inserted into the aquarium, but will early return attackby anyway. #define COMSIG_CANNOT_INSERT_IN_AQUARIUM (1<<1) +///Updates the appearance of a newly generated aquarium content visual:(visual) +#define COMSIG_AQUARIUM_CONTENT_GENERATE_APPEARANCE "aquarium_content_apply_appearance" +///Updates the base position of an aquarium content visual:(aquarium, visual) +#define AQUARIUM_CONTENT_RANDOMIZE_POSITION "aquarium_content_randomize_position" +///Updates the animation of an aquarium content visual:(aquarium, visual) +#define COMSIG_AQUARIUM_CONTENT_DO_ANIMATION "aquarium_content_do_animation" + // Fish signals #define COMSIG_FISH_STATUS_CHANGED "fish_status_changed" #define COMSIG_FISH_STIRRED "fish_stirred" @@ -15,13 +22,32 @@ #define COMSIG_FISH_LIFE "fish_life" ///From /datum/fish_trait/eat_fish: (predator) #define COMSIG_FISH_EATEN_BY_OTHER_FISH "fish_eaten_by_other_fish" +///From /obj/item/fish/generate_reagents_to_add, which returns a holder when the fish is eaten or composted for example: (list/reagents) +#define COMSIG_GENERATE_REAGENTS_TO_ADD "generate_reagents_to_add" ///From /obj/item/fish/feed: (fed_reagents, fed_reagent_type) #define COMSIG_FISH_FED "fish_on_fed" +///From /obj/item/fish/update_size_and_weight: (new_size, new_weight) +#define COMSIG_FISH_UPDATE_SIZE_AND_WEIGHT "fish_update_size_and_weight" +///From /obj/item/fish/update_fish_force: (weight_rank, bonus_malus) +#define COMSIG_FISH_FORCE_UPDATED "fish_force_updated" + +///From /obj/item/fish/interact_with_atom_secondary, sent to the target: (fish) +#define COMSIG_FISH_RELEASED_INTO "fish_released_into" + +///From /datum/fishing_challenge/New: (datum/fishing_challenge/challenge) +#define COMSIG_MOB_BEGIN_FISHING "mob_begin_fishing" +///From /datum/fishing_challenge/start_minigame_phase: (datum/fishing_challenge/challenge) +#define COMSIG_MOB_BEGIN_FISHING_MINIGAME "mob_begin_fishing_minigame" +///From /datum/fishing_challenge/completed: (datum/fishing_challenge/challenge, win) +#define COMSIG_MOB_COMPLETE_FISHING "mob_complete_fishing" +/// Rolling a reward path for a fishing challenge +#define COMSIG_FISHING_CHALLENGE_ROLL_REWARD "fishing_roll_reward" +/// Adjusting the difficulty of a rishing challenge, often based on the reward path +#define COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY "fishing_get_difficulty" /// Fishing challenge completed -#define COMSIG_FISHING_CHALLENGE_COMPLETED "fishing_completed" /// Sent to the fisherman when the reward is dispensed: (reward) -#define COMSIG_FISH_SOURCE_REWARD_DISPENSED "mob_fish_source_reward_dispensed" +#define COMSIG_FISH_SOURCE_REWARD_DISPENSED "fish_source_reward_dispensed" /// Called when you try to use fishing rod on anything #define COMSIG_PRE_FISHING "pre_fishing" diff --git a/code/__DEFINES/dcs/signals/signals_food.dm b/code/__DEFINES/dcs/signals/signals_food.dm index 36a8b7b3392cf..113826a448630 100644 --- a/code/__DEFINES/dcs/signals/signals_food.dm +++ b/code/__DEFINES/dcs/signals/signals_food.dm @@ -16,6 +16,9 @@ /// called when an edible ingredient is added: (datum/component/edible/ingredient) #define COMSIG_FOOD_INGREDIENT_ADDED "edible_ingredient_added" +/// from base of /datum/component/edible/get_recipe_complexity(): (list/extra_complexity) +#define COMSIG_FOOD_GET_EXTRA_COMPLEXITY "food_get_extra_complexity" + // Deep frying foods /// An item becomes fried - From /datum/element/fried_item/Attach: (fry_time) #define COMSIG_ITEM_FRIED "item_fried" @@ -31,6 +34,8 @@ #define COMPONENT_MICROWAVE_BAD_RECIPE (1<<1) ///called on item when created through microwaving (): (obj/machinery/microwave/M, cooking_efficiency) #define COMSIG_ITEM_MICROWAVE_COOKED "microwave_cooked" +///called on the ingredient through microwawing: (result) +#define COMSIG_ITEM_MICROWAVE_COOKED_FROM "item_microwave_cooked_from" // Grilling foods (griddle, grill, and bonfire) ///Called when an object is placed onto a griddle @@ -46,6 +51,9 @@ ///Called when an object is turned into another item through grilling ontop of a griddle #define COMSIG_ITEM_GRILLED "item_grill_completed" +///Called when the object is grilled by the grill (not to be confused by the griddle, but oh gee the two should be merged in one) +#define COMSIG_ITEM_BARBEQUE_GRILLED "item_barbeque_grilled" + // Baking foods (oven) //Called when an object is inserted into an oven (atom/oven, mob/baker) #define COMSIG_ITEM_OVEN_PLACED_IN "item_placed_in_oven" diff --git a/code/__DEFINES/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm index 5e9011f5f4075..bda49bb4b4ae6 100644 --- a/code/__DEFINES/dcs/signals/signals_global.dm +++ b/code/__DEFINES/dcs/signals/signals_global.dm @@ -57,7 +57,7 @@ #define COMSIG_GLOB_NEW_MACHINE "!new_machine" /// a client (re)connected, after all /client/New() checks have passed : (client/connected_client) #define COMSIG_GLOB_CLIENT_CONNECT "!client_connect" -/// a weather event of some kind occured +/// a weather event of some kind occurred #define COMSIG_WEATHER_TELEGRAPH(event_type) "!weather_telegraph [event_type]" #define COMSIG_WEATHER_START(event_type) "!weather_start [event_type]" #define COMSIG_WEATHER_WINDDOWN(event_type) "!weather_winddown [event_type]" diff --git a/code/__DEFINES/dcs/signals/signals_global_object.dm b/code/__DEFINES/dcs/signals/signals_global_object.dm index bed06ff176c1f..d100f47a3c97c 100644 --- a/code/__DEFINES/dcs/signals/signals_global_object.dm +++ b/code/__DEFINES/dcs/signals/signals_global_object.dm @@ -1,9 +1,9 @@ /// signals from globally accessible objects -///from SSJob whenever SetupOccupations() is called, all occupations are set +///from SSJob whenever setup_occupations() is called, all occupations are set #define COMSIG_OCCUPATIONS_SETUP "occupations_setup" -///from SSJob when DivideOccupations is called +///from SSJob when divide_occupations() is called #define COMSIG_OCCUPATIONS_DIVIDED "occupations_divided" ///from SSsun when the sun changes position : (azimuth) diff --git a/code/__DEFINES/dcs/signals/signals_mind.dm b/code/__DEFINES/dcs/signals/signals_mind.dm index 72f43f518ebcd..e9a62a26102cf 100644 --- a/code/__DEFINES/dcs/signals/signals_mind.dm +++ b/code/__DEFINES/dcs/signals/signals_mind.dm @@ -6,3 +6,6 @@ /// Called on the mind when an antagonist is being removed, after the antagonist list has updated (datum/antagonist/antagonist) #define COMSIG_ANTAGONIST_REMOVED "antagonist_removed" + +/// Called on the mob when losing an antagonist datum (datum/antagonist/antagonist) +#define COMSIG_MOB_ANTAGONIST_REMOVED "mob_antagonist_removed" 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 026247acf57ab..1c6fcbffbda3d 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_ai.dm @@ -9,3 +9,8 @@ ///Signal sent when a bot is reset #define COMSIG_BOT_RESET "bot_reset" +///Sent off /mob/living/basic/bot/proc/set_mode_flags() : (new_flags) +#define COMSIG_BOT_MODE_FLAGS_SET "bot_mode_flags_set" + +///Signal sent off of ai/movement/proc/start_moving_towards +#define COMSIG_MOB_AI_MOVEMENT_STARTED "mob_ai_movement_started" 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 2a936bbbbd94a..b95ffba607fd3 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -3,14 +3,14 @@ /// Stops the rest of the help #define COMPONENT_BLOCK_HELP_ACT (1<<0) -///Called from /mob/living/carbon/help_shake_act, before any hugs have ocurred. (mob/living/helper) +///Called from /mob/living/carbon/help_shake_act, before any hugs have occurred. (mob/living/helper) #define COMSIG_CARBON_PRE_MISC_HELP "carbon_pre_misc_help" - /// Stops the rest of help act (hugging, etc) from occuring + /// Stops the rest of help act (hugging, etc) from occurring #define COMPONENT_BLOCK_MISC_HELP (1<<0) -///Called from /mob/living/carbon/help_shake_act on the person being helped, after any hugs have ocurred. (mob/living/helper) +///Called from /mob/living/carbon/help_shake_act on the person being helped, after any hugs have occurred. (mob/living/helper) #define COMSIG_CARBON_HELP_ACT "carbon_help" -///Called from /mob/living/carbon/help_shake_act on the helper, after any hugs have ocurred. (mob/living/helped) +///Called from /mob/living/carbon/help_shake_act on the helper, after any hugs have occurred. (mob/living/helped) #define COMSIG_CARBON_HELPED "carbon_helped_someone" ///When a carbon slips. Called on /turf/open/handle_slip() @@ -95,11 +95,11 @@ #define COMPONENT_OVERRIDE_HEALTH_HUD (1<<0) ///Called when a carbon updates their sanity (source = carbon) #define COMSIG_CARBON_SANITY_UPDATE "carbon_sanity_update" -///Called when a carbon attempts to breath, before the breath has actually occured +///Called when a carbon attempts to breath, before the breath has actually occurred #define COMSIG_CARBON_ATTEMPT_BREATHE "carbon_attempt_breathe" // Prevents the breath #define COMSIG_CARBON_BLOCK_BREATH (1 << 0) -///Called when a carbon breathes, before the breath has actually occured +///Called when a carbon breathes, before the breath has actually occurred #define COMSIG_CARBON_PRE_BREATHE "carbon_pre_breathe" ///Called when a carbon updates their mood #define COMSIG_CARBON_MOOD_UPDATE "carbon_mood_update" @@ -118,7 +118,7 @@ ///Applied preferences to a human #define COMSIG_HUMAN_PREFS_APPLIED "human_prefs_applied" -///Whenever EquipRanked is called, called after job is set +///Whenever equip_rank is called, called after job is set #define COMSIG_JOB_RECEIVED "job_received" ///from /mob/living/carbon/human/proc/set_coretemperature(): (oldvalue, newvalue) #define COMSIG_HUMAN_CORETEMP_CHANGE "human_coretemp_change" @@ -133,9 +133,9 @@ #define VISIBLE_NAME_FACE 1 //Index for the name of the id #define VISIBLE_NAME_ID 2 - //Index for whether their name is being overriden instead of obsfuscated + //Index for whether their name is being overridden instead of obfuscated #define VISIBLE_NAME_FORCED 3 -///from /mob/living/carbon/human/get_id_name; only returns if the mob has TRAIT_UNKNOWN and it's being overriden: (identity) +///from /mob/living/carbon/human/get_id_name; only returns if the mob has TRAIT_UNKNOWN and it's being overridden: (identity) #define COMSIG_HUMAN_GET_FORCED_NAME "human_get_forced_name" // Mob transformation signals @@ -159,10 +159,10 @@ #define HANDLE_BLOOD_HANDLED (1<<0) /// Return to skip default nutrition -> blood conversion #define HANDLE_BLOOD_NO_NUTRITION_DRAIN (1<<1) - /// Return to skip oxyloss and similar effecst from blood level + /// Return to skip oxyloss and similar effects from blood level #define HANDLE_BLOOD_NO_OXYLOSS (1<<2) -/// from /datum/status_effect/limp/proc/check_step(mob/whocares, OldLoc, Dir, forced) iodk where it shuld go +/// from /datum/status_effect/limp/proc/check_step(mob/whocares, OldLoc, Dir, forced) iodk where it should go #define COMSIG_CARBON_LIMPING "mob_limp_check" #define COMPONENT_CANCEL_LIMP (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 4f625ee7b74f4..4a558c5fa7e03 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -50,8 +50,10 @@ #define COMSIG_MOB_CLIENT_BLOCK_PRE_MOVE COMPONENT_MOVABLE_BLOCK_PRE_MOVE /// The argument of move_args which corresponds to the loc we're moving to #define MOVE_ARG_NEW_LOC 1 - /// The arugment of move_args which dictates our movement direction + /// The argument of move_args which dictates our movement direction #define MOVE_ARG_DIRECTION 2 +/// From base of /client/Move(): (new_loc, direction) +#define COMSIG_MOB_CLIENT_MOVE_NOGRAV "mob_client_move_nograv" /// From base of /client/Move(): (direction, old_dir) #define COMSIG_MOB_CLIENT_MOVED "mob_client_moved" /// From base of /client/proc/change_view() (mob/source, new_size) @@ -72,7 +74,7 @@ #define COMSIG_MOB_MIND_TRANSFERRED_INTO "mob_mind_transferred_into" ///from mind/transfer_from. Sent to the mob the mind is being transferred out of. #define COMSIG_MOB_MIND_TRANSFERRED_OUT_OF "mob_mind_transferred_out_of" -/// From /mob/proc/ghostize() Called when a mob sucessfully ghosts +/// From /mob/proc/ghostize() Called when a mob successfully ghosts #define COMSIG_MOB_GHOSTIZED "mob_ghostized" ///from base of obj/allowed(mob/M): (/obj) returns ACCESS_ALLOWED if mob has id access to the obj @@ -140,6 +142,11 @@ #define SPEECH_SAYMODE 10 #define SPEECH_MODS 11 +///from /datum/component/speechmod/handle_speech(): () +#define COMSIG_TRY_MODIFY_SPEECH "try_modify_speech" + ///Return value if we prevent speech from being modified + #define PREVENT_MODIFY_SPEECH 1 + ///from /mob/say_dead(): (mob/speaker, message) #define COMSIG_MOB_DEADSAY "mob_deadsay" #define MOB_DEADSAY_SIGNAL_INTERCEPT (1<<0) @@ -151,8 +158,6 @@ /// from base of mob/swap_hand(): () /// Performed after the hands are swapped. #define COMSIG_MOB_SWAP_HANDS "mob_swap_hands" -///from base of /mob/verb/pointed: (atom/A) -#define COMSIG_MOB_POINTED "mob_pointed" ///Mob is trying to open the wires of a target [/atom], from /datum/wires/interactable(): (atom/target) #define COMSIG_TRY_WIRES_INTERACT "try_wires_interact" #define COMPONENT_CANT_INTERACT_WIRES (1<<0) @@ -172,8 +177,8 @@ ///Called on user, from base of /datum/strippable_item/try_(un)equip() (atom/target, obj/item/equipping?) #define COMSIG_TRY_STRIP "try_strip" #define COMPONENT_CANT_STRIP (1<<0) -///From /datum/component/creamed/Initialize() -#define COMSIG_MOB_CREAMED "mob_creamed" +///From /datum/component/face_decal/splat/Initialize() +#define COMSIG_MOB_HIT_BY_SPLAT "hit_by_splat" ///From /obj/item/gun/proc/check_botched() #define COMSIG_MOB_CLUMSY_SHOOT_FOOT "mob_clumsy_shoot_foot" ///from /obj/item/hand_item/slapper/attack_atom(): (source=obj/structure/table/slammed_table, mob/living/slammer) @@ -249,3 +254,10 @@ /// from /mob/proc/key_down(): (key, client/client, full_key) #define COMSIG_MOB_KEYDOWN "mob_key_down" + +/// from /mob/Process_Spacemove(movement_dir, continuous_move): (movement_dir, continuous_move, atom/backup) +#define COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE "mob_attempt_halt_spacemove" + #define COMPONENT_PREVENT_SPACEMOVE_HALT (1<<0) + +/// from /mob/update_incapacitated(): (old_incap, new_incap) +#define COMSIG_MOB_INCAPACITATE_CHANGED "mob_incapacitated" 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 47f5b7485991b..aee6f2df79bb7 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm @@ -8,3 +8,12 @@ #define COMSIG_BORG_HUG_HANDLED 1 ///called from /mob/living/silicon/attack_hand proc #define COMSIG_MOB_PAT_BORG "mob_pat_borg" +///called when someone is inquiring about an AI's linked core +#define COMSIG_SILICON_AI_CORE_STATUS "AI_core_status" + #define COMPONENT_CORE_ALL_GOOD (1<<0) + #define COMPONENT_CORE_DISCONNECTED (1<<1) +///called when an AI (malf or perhaps combat upgraded or some other circumstance that has them inhabit +///an APC) enters an APC +#define COMSIG_SILICON_AI_OCCUPY_APC "AI_occupy_apc" +///called when an AI vacates an APC +#define COMSIG_SILICON_AI_VACATE_APC "AI_vacate_apc" diff --git a/code/__DEFINES/dcs/signals/signals_movetype.dm b/code/__DEFINES/dcs/signals/signals_movetype.dm index bc8b296b47531..da584ba022f4a 100644 --- a/code/__DEFINES/dcs/signals/signals_movetype.dm +++ b/code/__DEFINES/dcs/signals/signals_movetype.dm @@ -1,6 +1,3 @@ -// /datum/element/movetype_handler signals -/// Called when the floating anim has to be temporarily stopped and restarted later: (timer) -#define COMSIG_PAUSE_FLOATING_ANIM "pause_floating_anim" /// From base of datum/element/movetype_handler/on_movement_type_trait_gain: (flag, old_movement_type) #define COMSIG_MOVETYPE_FLAG_ENABLED "movetype_flag_enabled" /// From base of datum/element/movetype_handler/on_movement_type_trait_loss: (flag, old_movement_type) diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index 72828cc891699..a9cc41b7d8d8d 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -153,12 +153,12 @@ /// Sebt from obj/item/ui_action_click(): (mob/user, datum/action) #define COMSIG_ITEM_UI_ACTION_CLICK "item_action_click" - /// Return to prevent the default behavior (attack_selfing) from ocurring. + /// Return to prevent the default behavior (attack_selfing) from occurring. #define COMPONENT_ACTION_HANDLED (1<<0) /// Sent from obj/item/item_action_slot_check(): (mob/user, datum/action, slot) #define COMSIG_ITEM_UI_ACTION_SLOT_CHECKED "item_action_slot_checked" - /// Return to prevent the default behavior (attack_selfing) from ocurring. + /// Return to prevent the default behavior (attack_selfing) from occurring. #define COMPONENT_ITEM_ACTION_SLOT_INVALID (1<<0) ///from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) @@ -194,6 +194,8 @@ #define COMSIG_TOOL_IN_USE "tool_in_use" ///from base of [/obj/item/proc/tool_start_check]: (mob/living/user) #define COMSIG_TOOL_START_USE "tool_start_use" +/// From /obj/item/multitool/remove_buffer(): (buffer) +#define COMSIG_MULTITOOL_REMOVE_BUFFER "multitool_remove_buffer" ///from [/obj/item/proc/disableEmbedding]: #define COMSIG_ITEM_DISABLE_EMBED "item_disable_embed" ///from [/obj/effect/mine/proc/triggermine]: @@ -415,10 +417,8 @@ #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) #define COMSIG_PROJECTILE_ON_SPAWN_EMBEDDED "projectile_on_spawn_embedded" - -/// from /obj/projectile/energy/fisher/on_hit() or /obj/item/gun/energy/recharge/fisher when striking a target -#define COMSIG_HIT_BY_SABOTEUR "hit_by_saboteur" - #define COMSIG_SABOTEUR_SUCCESS (1<<0) +///sent to the projectile when successfully embedding into something +#define COMSIG_PROJECTILE_ON_EMBEDDED "projectile_on_embedded" // /obj/vehicle/sealed/car/vim signals diff --git a/code/__DEFINES/dcs/signals/signals_reagent.dm b/code/__DEFINES/dcs/signals/signals_reagent.dm index 5bb2c89d4ef33..367ec946361d0 100644 --- a/code/__DEFINES/dcs/signals/signals_reagent.dm +++ b/code/__DEFINES/dcs/signals/signals_reagent.dm @@ -53,8 +53,6 @@ #define COMSIG_REAGENTS_EXPOSE_MOB "reagents_expose_mob" ///from base of [/turf/proc/expose_reagents]: (/turf, /list, methods, volume_modifier, show_message) #define COMSIG_REAGENTS_EXPOSE_TURF "reagents_expose_turf" -///from base of [/datum/component/personal_crafting/proc/del_reqs]: () -#define COMSIG_REAGENTS_CRAFTING_PING "reagents_crafting_ping" /// sent when reagents are transfered from a cup, to something refillable (atom/transfer_to) #define COMSIG_REAGENTS_CUP_TRANSFER_TO "reagents_cup_transfer_to" /// sent when reagents are transfered from some reagent container, to a cup (atom/transfer_from) diff --git a/code/__DEFINES/dcs/signals/signals_spell.dm b/code/__DEFINES/dcs/signals/signals_spell.dm index d9ef98527e25c..08074116be2c3 100644 --- a/code/__DEFINES/dcs/signals/signals_spell.dm +++ b/code/__DEFINES/dcs/signals/signals_spell.dm @@ -68,6 +68,9 @@ #define COMSIG_SPELL_TOUCH_HAND_HIT "spell_touch_hand_cast" // Jaunt Spells +/// Sent from datum/action/cooldown/spell/jaunt/before_cast, before the mob enters jaunting as a pre-check: (datum/action/cooldown/spell/spell) +#define COMSIG_MOB_PRE_JAUNT "spell_mob_pre_jaunt" + #define COMPONENT_BLOCK_JAUNT (1<<0) /// Sent from datum/action/cooldown/spell/jaunt/enter_jaunt, to the mob jaunting: (obj/effect/dummy/phased_mob/jaunt, datum/action/cooldown/spell/spell) #define COMSIG_MOB_ENTER_JAUNT "spell_mob_enter_jaunt" /// Set from /obj/effect/dummy/phased_mob after the mob is ejected from its contents: (obj/effect/dummy/phased_mob/jaunt, mob/living/unjaunter) @@ -113,7 +116,7 @@ // Charge /// Sent from /datum/action/cooldown/spell/charge/cast(), to the item in hand being charged: (datum/action/cooldown/spell/spell, mob/user) #define COMSIG_ITEM_MAGICALLY_CHARGED "item_magic_charged" - /// Return if an item was successfuly recharged + /// Return if an item was successful recharged #define COMPONENT_ITEM_CHARGED (1 << 0) /// Return if the item had a negative side effect occur while recharging #define COMPONENT_ITEM_BURNT_OUT (1 << 1) diff --git a/code/__DEFINES/dcs/signals/signals_tools.dm b/code/__DEFINES/dcs/signals/signals_tools.dm index 562aa29d595c0..110db1ed89c16 100644 --- a/code/__DEFINES/dcs/signals/signals_tools.dm +++ b/code/__DEFINES/dcs/signals/signals_tools.dm @@ -1,6 +1,6 @@ // Notifies tools that something is happening. -// Sucessful actions against an atom. +// Successful actions against an atom. ///Called from /atom/proc/tool_act (atom) #define COMSIG_TOOL_ATOM_ACTED_PRIMARY(tooltype) "tool_atom_acted_[tooltype]" ///Called from /atom/proc/tool_act (atom) diff --git a/code/__DEFINES/events.dm b/code/__DEFINES/events.dm index 2b1755b22c4b4..7045d8f0c65f7 100644 --- a/code/__DEFINES/events.dm +++ b/code/__DEFINES/events.dm @@ -22,7 +22,7 @@ #define EVENT_CATEGORY_FRIENDLY "Friendly" ///Events that affect the body and mind #define EVENT_CATEGORY_HEALTH "Health" -///Events reserved for special occassions +///Events reserved for special occasions #define EVENT_CATEGORY_HOLIDAY "Holiday" ///Events with enemy groups with a more complex plan #define EVENT_CATEGORY_INVASION "Invasion" diff --git a/code/__DEFINES/fish.dm b/code/__DEFINES/fish.dm index 2ee8f55e55794..ebd0d1755606f 100644 --- a/code/__DEFINES/fish.dm +++ b/code/__DEFINES/fish.dm @@ -1,9 +1,16 @@ /// Use in fish tables to denote miss chance. #define FISHING_DUD "dud" +///Used in the the hydro tray fishing spot to define a random seed reward +#define FISHING_RANDOM_SEED "Random seed" // Baseline fishing difficulty levels -#define FISHING_DEFAULT_DIFFICULTY 10 // BUBBER EDIT 15 -> 10 -#define FISHING_EASY_DIFFICULTY 6 // BUBBER EDIT 10 -> 6 +#define FISHING_DEFAULT_DIFFICULTY 15 +#define FISHING_EASY_DIFFICULTY 10 +/** + * The minimum value of the difficulty of the minigame (unless it reaches 0 than it's auto-win) + * Any lower than this and the fish will be way too lethargic for the minigame to be engaging in the slightest. + */ +#define FISHING_MINIMUM_DIFFICULTY 6 /// Difficulty modifier when bait is fish's favorite #define FAV_BAIT_DIFFICULTY_MOD -10 //Bubberstation change: -5 to -10 @@ -14,11 +21,6 @@ #define FISH_TRAIT_MINOR_DIFFICULTY_BOOST 5 -// These define how the fish will behave in the minigame -#define FISH_AI_DUMB "dumb" -#define FISH_AI_ZIPPY "zippy" -#define FISH_AI_SLOW "slow" - ///Slot defines for the fishing rod and its equipment #define ROD_SLOT_BAIT "bait" #define ROD_SLOT_LINE "line" @@ -70,9 +72,11 @@ #define FISHING_MINIGAME_RULE_FLIP (1 << 5) ///Skip the biting phase and go straight to the minigame, avoiding the penalty for having slow reflexes. #define FISHING_MINIGAME_AUTOREEL (1 << 6) +///The fish will fade in and out at intervals +#define FISHING_MINIGAME_RULE_CAMO (1 << 7) ///all the effects that are active and will last for a few seconds before triggering a cooldown -#define FISHING_MINIGAME_ACTIVE_EFFECTS (FISHING_MINIGAME_RULE_ANTIGRAV|FISHING_MINIGAME_RULE_FLIP) +#define FISHING_MINIGAME_ACTIVE_EFFECTS (FISHING_MINIGAME_RULE_ANTIGRAV|FISHING_MINIGAME_RULE_FLIP|FISHING_MINIGAME_RULE_CAMO) /// The default additive value for fishing hook catch weight modifiers. #define FISHING_DEFAULT_HOOK_BONUS_ADDITIVE 0 @@ -89,7 +93,12 @@ #define FISH_ICON_GEM "gem" #define FISH_ICON_CRAB "crab" #define FISH_ICON_JELLYFISH "jellyfish" +#define FISH_ICON_BOTTLE "bottle" #define FISH_ICON_BONE "bone" +#define FISH_ICON_ELECTRIC "electric" +#define FISH_ICON_WEAPON "weapon" +#define FISH_ICON_CRITTER "critter" +#define FISH_ICON_SEED "seed" #define AQUARIUM_ANIMATION_FISH_SWIM "fish" #define AQUARIUM_ANIMATION_FISH_DEAD "dead" @@ -110,8 +119,11 @@ ///Fish size thresholds for w_class. #define FISH_SIZE_TINY_MAX 30 #define FISH_SIZE_SMALL_MAX 50 -#define FISH_SIZE_NORMAL_MAX 90 -#define FISH_SIZE_BULKY_MAX 130 +#define FISH_SIZE_NORMAL_MAX 80 +#define FISH_SIZE_BULKY_MAX 120 +///size threshold for requiring two-handed carry +#define FISH_SIZE_TWO_HANDS_REQUIRED 135 +#define FISH_SIZE_HUGE_MAX 165 ///The coefficient for maximum weight/size divergence relative to the averages. #define MAX_FISH_DEVIATION_COEFF 2.5 @@ -121,11 +133,35 @@ ///The number of fillets is multiplied by the fish' size and divided by this. #define FISH_FILLET_NUMBER_SIZE_DIVISOR 30 +///The slowdown of the fish when carried begins at this value +#define FISH_WEIGHT_SLOWDOWN 2100 +///The value of the slowdown equals to the weight divided by this (and then at the power of a sub-1 exponent) +#define FISH_WEIGHT_SLOWDOWN_DIVISOR 500 +///The sub-one exponent that results in the final slowdown of the fish item +#define FISH_WEIGHT_SLOWDOWN_EXPONENT 0.54 +///Used to calculate the force of the fish by comparing (1 + log(weight/this_define)) and the w_class of the item. +#define FISH_WEIGHT_FORCE_DIVISOR 250 +///The multiplier used in the FISH_WEIGHT_BITE_DIVISOR define +#define FISH_WEIGHT_GRIND_TO_BITE_MULT 0.4 +///Used to calculate how many bites a fish can take and therefore the amount of reagents it has. +#define FISH_WEIGHT_BITE_DIVISOR (FISH_GRIND_RESULTS_WEIGHT_DIVISOR * FISH_WEIGHT_GRIND_TO_BITE_MULT) + ///The breeding timeout for newly instantiated fish is multiplied by this. #define NEW_FISH_BREEDING_TIMEOUT_MULT 2 ///The last feeding timestamp of newly instantiated fish is multiplied by this: ergo, they spawn 50% hungry. #define NEW_FISH_LAST_FEEDING_MULT 0.5 +//IF YOU ADD ANY NEW FLAG, ADD IT TO THE RESPECTIVE BITFIELD in _globalvars/bitfields.dm TOO! + +///This fish is shown in the catalog and on the wiki (this only matters as an initial, compile-time value) +#define FISH_FLAG_SHOW_IN_CATALOG (1<<0) +///This fish has a flopping animation done through matrices +#define FISH_DO_FLOP_ANIM (1<<1) +///This fish has been petted in the last 30 seconds +#define FISH_FLAG_PETTED (1<<2) +///This fish can be scanned to complete fish scanning experiments +#define FISH_FLAG_EXPERIMENT_SCANNABLE (1<<3) + #define MIN_AQUARIUM_TEMP T0C #define MAX_AQUARIUM_TEMP (T0C + 100) #define DEFAULT_AQUARIUM_TEMP (T0C + 24) @@ -142,8 +178,8 @@ #define AQUARIUM_FLUID_SALTWATER "Saltwater" #define AQUARIUM_FLUID_SULPHWATEVER "Sulfuric Water" #define AQUARIUM_FLUID_AIR "Air" -#define AQUARIUM_FLUID_ANADROMOUS "Adaptive to both Freshwater and Saltwater" -#define AQUARIUM_FLUID_ANY_WATER "Adaptive to all kind of water" +#define AQUARIUM_FLUID_ANADROMOUS "Anadromous" +#define AQUARIUM_FLUID_ANY_WATER "Any Fluid" ///Fluff. The name of the aquarium company shown in the fish catalog #define AQUARIUM_COMPANY "Aquatech Ltd." @@ -164,3 +200,48 @@ //Fish breeding stops if fish count exceeds this. #define AQUARIUM_MAX_BREEDING_POPULATION 20 + +//Minigame defines +/// The height of the minigame slider. Not in pixels, but minigame units. +#define FISHING_MINIGAME_AREA 1000 + +///The fish needs to be cooked for at least this long so that it can be safely eaten +#define FISH_SAFE_COOKING_DURATION 30 SECONDS + +///Defines for fish properties from the collect_fish_properties proc +#define FISH_PROPERTIES_FAV_BAIT "fav_bait" +#define FISH_PROPERTIES_BAD_BAIT "bad_bait" +#define FISH_PROPERTIES_TRAITS "fish_traits" +#define FISH_PROPERTIES_BEAUTY_SCORE "beauty_score" +#define FISH_PROPERTIES_EVOLUTIONS "evolutions" + +///Define for favorite and disliked baits that aren't just item typepaths. +#define FISH_BAIT_TYPE "Type" +#define FISH_BAIT_FOODTYPE "Foodtype" +#define FISH_BAIT_REAGENT "Reagent" +#define FISH_BAIT_VALUE "Value" +#define FISH_BAIT_AMOUNT "Amount" + + +///We multiply the weight of fish inside the loot table by this value if we are goofy enough to fish without a bait. +#define FISH_WEIGHT_MULT_WITHOUT_BAIT 0.15 + +/** + * A macro to ensure the wikimedia filenames of fish icons are unique, especially since there're a couple fish that have + * quite ambiguous names/icon_states like "checkered" or "pike" + */ +#define FISH_AUTOWIKI_FILENAME(fish) SANITIZE_FILENAME("[initial(fish.icon_state)]_wiki_fish") + +///The list keys for the autowiki for fish sources +#define FISH_SOURCE_AUTOWIKI_NAME "name" +#define FISH_SOURCE_AUTOWIKI_ICON "icon" +#define FISH_SOURCE_AUTOWIKI_WEIGHT "weight" +#define FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX "weight_suffix" +#define FISH_SOURCE_AUTOWIKI_NOTES "notes" + +///Special value for the name key that always comes first when the data is sorted, regardless of weight. +#define FISH_SOURCE_AUTOWIKI_DUD "Nothing" +///Special value for the name key that always comes last +#define FISH_SOURCE_AUTOWIKI_OTHER "Other Stuff" +///The filename for the icon for "other stuff" which we don't articulate about on the autowiki +#define FISH_SOURCE_AUTOWIKI_QUESTIONMARK "questionmark" diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index 1304bd53cd318..68dbb368afc97 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -175,12 +175,21 @@ GLOBAL_LIST_INIT(food_buffs, list( #define FOOD_IN_CONTAINER (1<<0) /// Finger food can be eaten while walking / running around #define FOOD_FINGER_FOOD (1<<1) +/// Examining this edible won't show infos on food types, bites and remote tasting etc. +#define FOOD_NO_EXAMINE (1<<2) +/// This food item doesn't track bitecounts, use responsibly. +#define FOOD_NO_BITECOUNT (1<<3) DEFINE_BITFIELD(food_flags, list( "FOOD_FINGER_FOOD" = FOOD_FINGER_FOOD, "FOOD_IN_CONTAINER" = FOOD_IN_CONTAINER, + "FOOD_NO_EXAMINE" = FOOD_NO_EXAMINE, + "FOOD_NO_BITECOUNT" = FOOD_NO_BITECOUNT, )) +///Define for return value of the after_eat callback that will call OnConsume if it hasn't already. +#define FOOD_AFTER_EAT_CONSUME_ANYWAY 2 + #define STOP_SERVING_BREAKFAST (35 MINUTES) // SKYRAT EDIT - ORIGINAL: 15 MINUTES #define FOOD_MEAT_HUMAN 50 diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm index a8a7ad975af2e..cffe920215335 100644 --- a/code/__DEFINES/footsteps.dm +++ b/code/__DEFINES/footsteps.dm @@ -84,10 +84,10 @@ GLOBAL_LIST_INIT(footstep, list( 'sound/effects/footstep/grass3.ogg', 'sound/effects/footstep/grass4.ogg'), 75, 0), FOOTSTEP_WATER = list(list( - 'sound/effects/footstep/water1.ogg', - 'sound/effects/footstep/water2.ogg', - 'sound/effects/footstep/water3.ogg', - 'sound/effects/footstep/water4.ogg'), 100, 1), + 'sound/effects/footstep/water/water1.ogg', + 'sound/effects/footstep/water/water2.ogg', + 'sound/effects/footstep/water/water3.ogg', + 'sound/effects/footstep/water/water4.ogg'), 100, 1), FOOTSTEP_LAVA = list(list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', @@ -134,10 +134,10 @@ GLOBAL_LIST_INIT(barefootstep, list( 'sound/effects/footstep/grass3.ogg', 'sound/effects/footstep/grass4.ogg'), 75, 0), FOOTSTEP_WATER = list(list( - 'sound/effects/footstep/water1.ogg', - 'sound/effects/footstep/water2.ogg', - 'sound/effects/footstep/water3.ogg', - 'sound/effects/footstep/water4.ogg'), 100, 1), + 'sound/effects/footstep/water/water1.ogg', + 'sound/effects/footstep/water/water2.ogg', + 'sound/effects/footstep/water/water3.ogg', + 'sound/effects/footstep/water/water4.ogg'), 100, 1), FOOTSTEP_LAVA = list(list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', @@ -178,10 +178,10 @@ GLOBAL_LIST_INIT(clawfootstep, list( 'sound/effects/footstep/grass3.ogg', 'sound/effects/footstep/grass4.ogg'), 75, 0), FOOTSTEP_WATER = list(list( - 'sound/effects/footstep/water1.ogg', - 'sound/effects/footstep/water2.ogg', - 'sound/effects/footstep/water3.ogg', - 'sound/effects/footstep/water4.ogg'), 100, 1), + 'sound/effects/footstep/water/water1.ogg', + 'sound/effects/footstep/water/water2.ogg', + 'sound/effects/footstep/water/water3.ogg', + 'sound/effects/footstep/water/water4.ogg'), 100, 1), FOOTSTEP_LAVA = list(list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', @@ -196,10 +196,10 @@ GLOBAL_LIST_INIT(heavyfootstep, list( 'sound/effects/footstep/heavy1.ogg', 'sound/effects/footstep/heavy2.ogg'), 100, 2), FOOTSTEP_WATER = list(list( - 'sound/effects/footstep/water1.ogg', - 'sound/effects/footstep/water2.ogg', - 'sound/effects/footstep/water3.ogg', - 'sound/effects/footstep/water4.ogg'), 100, 2), + 'sound/effects/footstep/water/water1.ogg', + 'sound/effects/footstep/water/water2.ogg', + 'sound/effects/footstep/water/water3.ogg', + 'sound/effects/footstep/water/water4.ogg'), 100, 2), FOOTSTEP_LAVA = list(list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 3a5c91ea22a90..8ae832ab01282 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -77,7 +77,7 @@ #define ui_building "EAST-4:22,SOUTH:21" #define ui_language_menu "EAST-4:6,SOUTH:21" #define ui_navigate_menu "EAST-4:22,SOUTH:5" -#define ui_floor_menu "EAST-4:22,SOUTH:37" // BUBBER EDIT: Shift over a bit for the vore button to sit nicely +#define ui_floor_changer "EAST-4:22,SOUTH:37" // BUBBER EDIT: Shift over a bit for the vore button to sit nicely //Upper left (action buttons) #define ui_action_palette "WEST+0:23,NORTH-1:5" @@ -110,6 +110,9 @@ #define ui_living_pull "EAST-1:28,CENTER-3:15" #define ui_living_healthdoll "EAST-1:28,CENTER-1:15" +//Humans +#define ui_human_floor_changer "EAST-4:22, SOUTH+1:7" + //Drones #define ui_drone_drop "CENTER+1:18,SOUTH:5" #define ui_drone_pull "CENTER+1.5:2,SOUTH:5" @@ -132,7 +135,7 @@ #define ui_borg_alerts "CENTER+4:21,SOUTH:5" #define ui_borg_language_menu "CENTER+4:19,SOUTH+1:6" #define ui_borg_navigate_menu "CENTER+4:19,SOUTH+1:6" -#define ui_borg_floor_menu "CENTER+4:-13,SOUTH+1:6" +#define ui_borg_floor_changer "EAST-1:28,SOUTH+1:39" //Aliens #define ui_alien_health "EAST,CENTER-1:15" @@ -141,7 +144,6 @@ #define ui_alien_storage_r "CENTER+1:18,SOUTH:5" #define ui_alien_language_menu "EAST-4:20,SOUTH:5" #define ui_alien_navigate_menu "EAST-4:20,SOUTH:5" -#define ui_alien_floor_menu "EAST-4:-12,SOUTH:5" //AI #define ui_ai_core "BOTTOM:6,RIGHT-4" @@ -150,7 +152,6 @@ #define ui_ai_state_laws "BOTTOM:6,RIGHT-1" #define ui_ai_mod_int "BOTTOM:6,RIGHT" #define ui_ai_language_menu "BOTTOM+1:8,RIGHT-1:30" -#define ui_ai_floor_menu "BOTTOM+1:8,RIGHT-1:14" #define ui_ai_crew_monitor "BOTTOM:6,CENTER-1" #define ui_ai_crew_manifest "BOTTOM:6,CENTER" @@ -192,8 +193,8 @@ #define ui_ghost_teleport "SOUTH:6,CENTER:24" #define ui_ghost_pai "SOUTH: 6, CENTER+1:24" #define ui_ghost_minigames "SOUTH: 6, CENTER+2:24" -#define ui_ghost_language_menu "SOUTH: 22, CENTER+3:8" -#define ui_ghost_floor_menu "SOUTH: 6, CENTER+3:8" +#define ui_ghost_language_menu "SOUTH: 22, CENTER+3:22" +#define ui_ghost_floor_changer "SOUTH: 6, CENTER+3:23" //Blobbernauts #define ui_blobbernaut_overmind_health "EAST-1:28,CENTER+0:19" diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 21a5ad3950bbd..9a5684c4fa8a6 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -63,6 +63,8 @@ #define ITEM_SLOT_HANDCUFFED (1<<18) /// Legcuff slot (bolas, beartraps) #define ITEM_SLOT_LEGCUFFED (1<<19) +/// Inside of a character's BELT......... +#define ITEM_SLOT_BELTPACK (1<<20) /// Total amount of slots #define SLOTS_AMT 26 // Keep this up to date! @@ -112,6 +114,8 @@ DEFINE_BITFIELD(no_equip_flags, list( #define HIDEMUTWINGS (1<<13) ///hides belts and riggings #define HIDEBELT (1<<14) +///hides antennae +#define HIDEANTENNAE (1<<15) //SKYRAT EDIT ADDITION: CUSTOM EAR TOGGLE FOR ANTHRO/ETC EAR SHOWING - /// Manually set this on items you want anthro ears to show on! @@ -176,14 +180,15 @@ DEFINE_BITFIELD(no_equip_flags, list( #define DIGITIGRADE_STYLE 2 //Flags (actual flags, fucker ^) for /obj/item/var/supports_variations_flags -///No alternative sprites based on bodytype +/// No alternative sprites or handling based on bodytype #define CLOTHING_NO_VARIATION (1<<0) -///Has a sprite for digitigrade legs specifically. +/// Has a sprite for digitigrade legs specifically. #define CLOTHING_DIGITIGRADE_VARIATION (1<<1) -///The sprite works fine for digitigrade legs as-is. +/// The sprite works fine for digitigrade legs as-is. #define CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON (1<<2) -///has a sprite for monkeys -#define CLOTHING_MONKEY_VARIATION (1<<3) +/// Auto-generates the leg portion of the sprite with GAGS +/// Suggested that you set [/obj/item/var/digitigrade_greyscale_config_worn] when using this flag +#define CLOTHING_DIGITIGRADE_MASK (1<<3) // SKYRAT EDIT ADDITION START /// The sprite works fine for snouts. #define CLOTHING_SNOUTED_VARIATION (1<<4) @@ -198,6 +203,8 @@ DEFINE_BITFIELD(no_equip_flags, list( /// The sprite works fine for vox snouts as is. #define CLOTHING_SNOUTED_BETTER_VOX_VARIATION_NO_NEW_ICON (1<<9) // SKYRAT EDIT ADDITION END +/// All variation flags which render "correctly" on a digitigrade leg setup +#define DIGITIGRADE_VARIATIONS (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON|CLOTHING_DIGITIGRADE_MASK) //flags for covering body parts #define GLASSESCOVERSEYES (1<<0) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index b7e61a577c084..af0e9821eee3f 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -139,19 +139,15 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( //Silicon mobs #define issilicon(A) (istype(A, /mob/living/silicon)) -///Define on whether A has access to Silicon stuff either through being a silicon, admin ghost or is a non-silicon holding the Silicon remote. -///This can only be used for instances where you are not specifically looking for silicon, but access. -#define HAS_SILICON_ACCESS(A) (istype(A, /mob/living/silicon) || isAdminGhostAI(A) || A.has_unlimited_silicon_privilege || istype(A.get_active_held_item(), /obj/item/machine_remote)) - #define isAI(A) (istype(A, /mob/living/silicon/ai)) -///Define on whether A has access to AI stuff either through being a AI, admin ghost, or is a non-silicon holding the Silicon remote -///This can only be used for instances where you are not specifically looking for silicon, but access. -#define HAS_AI_ACCESS(A) (istype(A, /mob/living/silicon/ai) || isAdminGhostAI(A) || istype(A.get_active_held_item(), /obj/item/machine_remote)) - #define iscyborg(A) (istype(A, /mob/living/silicon/robot)) - #define ispAI(A) (istype(A, /mob/living/silicon/pai)) +///This is used to see if you have Silicon access. This includes things like Admins, Drones, Bots, and Human wands. +#define HAS_SILICON_ACCESS(possible_silicon) (HAS_TRAIT(possible_silicon, TRAIT_SILICON_ACCESS) || isAdminGhostAI(possible_silicon)) +///This is used to see if you have the access of an AI. This doesn't mean you are an AI, just have the same access as one. +#define HAS_AI_ACCESS(possible_ai) (HAS_TRAIT(possible_ai, TRAIT_AI_ACCESS) || isAdminGhostAI(possible_ai)) + // basic mobs #define isbasicmob(A) (istype(A, /mob/living/basic)) @@ -283,6 +279,8 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define is_reagent_container(O) (istype(O, /obj/item/reagent_containers)) +#define isapc(A) (istype(A, /obj/machinery/power/apc)) + //Assemblies #define isassembly(O) (istype(O, /obj/item/assembly)) @@ -332,4 +330,4 @@ GLOBAL_LIST_INIT(book_types, typecacheof(list( #define is_unassigned_job(job_type) (istype(job_type, /datum/job/unassigned)) #define isprojectilespell(thing) (istype(thing, /datum/action/cooldown/spell/pointed/projectile)) -#define is_multi_tile_object(atom) (atom.bound_width > world.icon_size || atom.bound_height > world.icon_size) +#define is_multi_tile_object(atom) (atom.bound_width > ICON_SIZE_X || atom.bound_height > ICON_SIZE_Y) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index c96746b47c1f7..7b991fcf8f9d2 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -101,6 +101,7 @@ #define JOB_PSYCHOLOGIST "Psychologist" #define JOB_BARBER "Barber" // SKYRAT EDIT ADDITION #define JOB_BOUNCER "Bouncer" // SKYRAT EDIT ADDITION +#define JOB_PUN_PUN "Pun Pun" //ERTs #define JOB_ERT_DEATHSQUAD "Death Commando" #define JOB_ERT_COMMANDER "Emergency Response Team Commander" @@ -161,42 +162,43 @@ #define JOB_DISPLAY_ORDER_LAWYER 12 #define JOB_DISPLAY_ORDER_CHAPLAIN 13 #define JOB_DISPLAY_ORDER_PSYCHOLOGIST 14 -#define JOB_DISPLAY_ORDER_AI 15 -#define JOB_DISPLAY_ORDER_CYBORG 16 -#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 17 -#define JOB_DISPLAY_ORDER_STATION_ENGINEER 18 -#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 19 -#define JOB_DISPLAY_ORDER_QUARTERMASTER 20 -#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 21 -#define JOB_DISPLAY_ORDER_SHAFT_MINER 22 -#define JOB_DISPLAY_ORDER_BITRUNNER 23 -#define JOB_DISPLAY_ORDER_CARGO_GORILLA 24 -#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 25 -#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 26 -#define JOB_DISPLAY_ORDER_PARAMEDIC 27 -#define JOB_DISPLAY_ORDER_CHEMIST 28 -#define JOB_DISPLAY_ORDER_CORONER 29 -#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 30 -#define JOB_DISPLAY_ORDER_SCIENTIST 31 -#define JOB_DISPLAY_ORDER_ROBOTICIST 32 -#define JOB_DISPLAY_ORDER_GENETICIST 33 -#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 34 -#define JOB_DISPLAY_ORDER_VETERAN_ADVISOR 35 -#define JOB_DISPLAY_ORDER_WARDEN 36 -#define JOB_DISPLAY_ORDER_DETECTIVE 37 -#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 38 -#define JOB_DISPLAY_ORDER_PRISONER 39 -#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 41 //SKYRAT EDIT ADDITON -#define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 42 //SKYRAT EDIT ADDITON -#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 43 //SKYRAT EDIT ADDITON -#define JOB_DISPLAY_ORDER_BLUESHIELD 44 //SKYRAT EDIT ADDITON -#define JOB_DISPLAY_ORDER_ORDERLY 45 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_SCIENCE_GUARD 46 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_BOUNCER 47 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_ENGINEER_GUARD 48 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_CUSTOMS_AGENT 49 //SKYRAT EDIT ADDITION -#define JOB_DISPLAY_ORDER_EXP_CORPS 50 //SKYRAT EDIT ADDITON -#define JOB_DISPLAY_ORDER_TELECOMMS_SPECIALIST 51 //SKYRAT EDIT ADDITION +#define JOB_DISPLAY_ORDER_PUN_PUN 15 +#define JOB_DISPLAY_ORDER_AI 16 +#define JOB_DISPLAY_ORDER_CYBORG 17 +#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 18 +#define JOB_DISPLAY_ORDER_STATION_ENGINEER 19 +#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 20 +#define JOB_DISPLAY_ORDER_QUARTERMASTER 21 +#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 22 +#define JOB_DISPLAY_ORDER_SHAFT_MINER 23 +#define JOB_DISPLAY_ORDER_BITRUNNER 24 +#define JOB_DISPLAY_ORDER_CARGO_GORILLA 25 +#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 26 +#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 27 +#define JOB_DISPLAY_ORDER_PARAMEDIC 28 +#define JOB_DISPLAY_ORDER_CHEMIST 29 +#define JOB_DISPLAY_ORDER_CORONER 30 +#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 31 +#define JOB_DISPLAY_ORDER_SCIENTIST 32 +#define JOB_DISPLAY_ORDER_ROBOTICIST 33 +#define JOB_DISPLAY_ORDER_GENETICIST 34 +#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 35 +#define JOB_DISPLAY_ORDER_VETERAN_ADVISOR 36 +#define JOB_DISPLAY_ORDER_WARDEN 37 +#define JOB_DISPLAY_ORDER_DETECTIVE 38 +#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 39 +#define JOB_DISPLAY_ORDER_PRISONER 40 +#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 45 //SKYRAT EDIT ADDITON +#define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 46 //SKYRAT EDIT ADDITON +#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 47 //SKYRAT EDIT ADDITON +#define JOB_DISPLAY_ORDER_BLUESHIELD 48 //SKYRAT EDIT ADDITON +#define JOB_DISPLAY_ORDER_ORDERLY 49 //SKYRAT EDIT ADDITION +#define JOB_DISPLAY_ORDER_SCIENCE_GUARD 50 //SKYRAT EDIT ADDITION +#define JOB_DISPLAY_ORDER_BOUNCER 51 //SKYRAT EDIT ADDITION +#define JOB_DISPLAY_ORDER_ENGINEER_GUARD 52 //SKYRAT EDIT ADDITION +#define JOB_DISPLAY_ORDER_CUSTOMS_AGENT 53 //SKYRAT EDIT ADDITION +#define JOB_DISPLAY_ORDER_EXP_CORPS 60 //SKYRAT EDIT ADDITON +#define JOB_DISPLAY_ORDER_TELECOMMS_SPECIALIST 61 //SKYRAT EDIT ADDITION #define DEPARTMENT_UNASSIGNED "No Department" @@ -241,7 +243,7 @@ DEFINE_BITFIELD(departments_bitflags, list( #define JOB_ANNOUNCE_ARRIVAL (1<<0) /// Whether the mob is added to the crew manifest. #define JOB_CREW_MANIFEST (1<<1) -/// Whether the mob is equipped through SSjob.EquipRank() on spawn. +/// Whether the mob is equipped through SSjob.equip_rank() on spawn. #define JOB_EQUIP_RANK (1<<2) /// Whether the job is considered a regular crew member of the station. Equipment such as AI and cyborgs not included. #define JOB_CREW_MEMBER (1<<3) diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 044cd4d30362c..0d93a33c1fb0c 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -132,7 +132,6 @@ // this allows larger then bound floors to layer as we'd expect // ANYTHING on the floor plane needs TOPDOWN_LAYER, and nothing that isn't on the floor plane can have it -//FLOOR_PLANE layers // NOTICE: we break from the pattern of increasing in steps of like 0.01 here // Because TOPDOWN_LAYER is 10000 and that's enough to floating point our modifications away #define LOW_FLOOR_LAYER (1 + TOPDOWN_LAYER) diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index a2d66b9d4fcb9..f161eb6a0fd3e 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -139,6 +139,15 @@ /// Max length of a status line in the status display #define MAX_STATUS_LINE_LENGTH 40 +///Define for automated system arrival announcement +#define AUTO_ANNOUNCE_ARRIVAL "ARRIVAL" +///Define for automated system announcement when a head of staff arrives +#define AUTO_ANNOUNCE_NEWHEAD "NEWHEAD" +///Define for automated system announcement for when the arrival shuttle is broken +#define AUTO_ANNOUNCE_ARRIVALS_BROKEN "ARRIVALS_BROKEN" +///Define for automated system announcement for researched nodes +#define AUTO_ANNOUNCE_NODE "NODE" + /// Blank Status Display #define SD_BLANK 0 /// Shows the emergency shuttle timer diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 3c87195e99076..33147916f4e38 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -221,7 +221,7 @@ Always compile, always use that verb, and always make sure that it works for wha #define CLUSTER_CHECK_ALL 30 //!Don't let anything cluster, like, at all /// Checks the job changes in the map config for the passed change key. -#define CHECK_MAP_JOB_CHANGE(job, change) SSmapping.config.job_changes?[job]?[change] +#define CHECK_MAP_JOB_CHANGE(job, change) SSmapping.current_map.job_changes?[job]?[change] ///Identifiers for away mission spawnpoints #define AWAYSTART_BEACH "AWAYSTART_BEACH" diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index 1939ca94ec455..a7a95817b4405 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -188,21 +188,21 @@ var/pixel_x = 0 var/pixel_y = 0 for(var/i in 1 to increments) - pixel_x += sin(angle)+16*sin(angle)*2 - pixel_y += cos(angle)+16*cos(angle)*2 + pixel_x += sin(angle)+(ICON_SIZE_X/2)*sin(angle)*2 + pixel_y += cos(angle)+(ICON_SIZE_Y/2)*cos(angle)*2 var/new_x = starting.x var/new_y = starting.y - while(pixel_x > 16) - pixel_x -= 32 + while(pixel_x > (ICON_SIZE_X/2)) + pixel_x -= ICON_SIZE_X new_x++ - while(pixel_x < -16) - pixel_x += 32 + while(pixel_x < -(ICON_SIZE_X/2)) + pixel_x += ICON_SIZE_X new_x-- - while(pixel_y > 16) - pixel_y -= 32 + while(pixel_y > (ICON_SIZE_Y/2)) + pixel_y -= ICON_SIZE_Y new_y++ - while(pixel_y < -16) - pixel_y += 32 + while(pixel_y < -(ICON_SIZE_Y/2)) + pixel_y += ICON_SIZE_Y new_y-- new_x = clamp(new_x, 1, world.maxx) new_y = clamp(new_y, 1, world.maxy) diff --git a/code/__DEFINES/memory_defines.dm b/code/__DEFINES/memory_defines.dm index 2b07ab6270d57..f6c537f9e8187 100644 --- a/code/__DEFINES/memory_defines.dm +++ b/code/__DEFINES/memory_defines.dm @@ -1,7 +1,7 @@ ///name of the file that has all the memory strings #define MEMORY_FILE "memories.json" ///name of the file that has all the saved engravings -#define ENGRAVING_SAVE_FILE "data/engravings/[SSmapping.config.map_name]_engravings.json" +#define ENGRAVING_SAVE_FILE "data/engravings/[SSmapping.current_map.map_name]_engravings.json" ///name of the file that has all the prisoner tattoos #define PRISONER_TATTOO_SAVE_FILE "data/engravings/prisoner_tattoos.json" ///Current version of the engraving persistence json diff --git a/code/__DEFINES/mobfactions.dm b/code/__DEFINES/mobfactions.dm index aea143dad253c..cb934a28f5c5a 100644 --- a/code/__DEFINES/mobfactions.dm +++ b/code/__DEFINES/mobfactions.dm @@ -33,13 +33,13 @@ #define FACTION_HELL "hell" /// Hivebots #define FACTION_HIVEBOT "hivebot" -/// Illusionary creaturs +/// Illusionary creatures #define FACTION_ILLUSION "illusion" /// Creatures of the never finished jungle planet, and gorillas #define FACTION_JUNGLE "jungle" /// Small lizards #define FACTION_LIZARD "lizard" -/// Maint creatures have mutual respect for eachother. +/// Maint creatures have mutual respect for each other. #define FACTION_MAINT_CREATURES "maint_creatures" /// Animated objects and statues #define FACTION_MIMIC "mimic" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 114084e33c8b3..16bb591ec505a 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -15,7 +15,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 2000 #define BLOOD_VOLUME_SLIME_SPLIT 1120 #define BLOOD_VOLUME_NORMAL 560 #define BLOOD_VOLUME_SAFE (BLOOD_VOLUME_NORMAL * (1 - 0.15)) // Latter number is percentage of blood lost, for readability! @@ -318,7 +318,7 @@ #define BRUTE_DAMAGE_REQUIRED_TO_STOP_CRYSTALIZATION 30 -#define CRYSTALIZE_STAGE_ENGULFING 100 //Cant use second defines +#define CRYSTALIZE_STAGE_ENGULFING 100 //Can't use second defines #define CRYSTALIZE_STAGE_ENCROACHING 300 //In switches #define CRYSTALIZE_STAGE_SMALL 600 //Because they're not static @@ -526,7 +526,7 @@ #define WABBAJACK_HUMAN "humanoid" #define WABBAJACK_ANIMAL "animal" -// Reasons a defibrilation might fail +// Reasons a defibrillation might fail #define DEFIB_POSSIBLE (1<<0) #define DEFIB_FAIL_SUICIDE (1<<1) #define DEFIB_FAIL_HUSK (1<<2) @@ -752,7 +752,7 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( /// Glasses layer #define GLASSES_LAYER 17 /// Belt layer -#define BELT_LAYER 16 //Possible make this an overlay of somethign required to wear a belt? +#define BELT_LAYER 16 //Possible make this an overlay of something required to wear a belt? /// Suit storage layer (tucking a gun or baton underneath your armor) #define SUIT_STORE_LAYER 15 /// Neck layer (for wearing capes and bedsheets) @@ -891,7 +891,7 @@ GLOBAL_LIST_INIT(layers_to_offset, list( #define NEED_VENTCRAWL (1<<8) /// Skips adjacency checks #define BYPASS_ADJACENCY (1<<9) -/// Skips reccursive loc checks +/// Skips recursive loc checks #define NOT_INSIDE_TARGET (1<<10) /// Checks for base adjacency, but silences the error #define SILENT_ADJACENCY (1<<11) @@ -925,6 +925,8 @@ GLOBAL_LIST_INIT(layers_to_offset, list( /// Possible value of [/atom/movable/buckle_lying]. If set to a different (positive-or-zero) value than this, the buckling thing will force a lying angle on the buckled. #define NO_BUCKLE_LYING -1 +/// Possible value of [/atom/movable/buckle_dir]. If set to a different (positive-or-zero) value than this, the buckling thing will force a dir on the buckled. +#define BUCKLE_MATCH_DIR -1 // Flags for fully_heal(). @@ -1021,6 +1023,8 @@ GLOBAL_LIST_INIT(layers_to_offset, list( /// The duration of the flip emote animation #define FLIP_EMOTE_DURATION 0.7 SECONDS +///The duration of a taunt emote, so how long they can deflect projectiles +#define TAUNT_EMOTE_DURATION 0.9 SECONDS // Sprites for photocopying butts #define BUTT_SPRITE_HUMAN_MALE "human_male" @@ -1035,3 +1039,7 @@ GLOBAL_LIST_INIT(layers_to_offset, list( #define BUTT_SPRITE_PLASMA "plasma" #define BUTT_SPRITE_FUZZY "fuzzy" #define BUTT_SPRITE_SLIME "slime" + +/// Distance which you can see someone's ID card +/// Short enough that you can inspect over tables (bartender checking age) +#define ID_EXAMINE_DISTANCE 3 diff --git a/code/__DEFINES/movement.dm b/code/__DEFINES/movement.dm index be3546ea102d1..9706819610f5e 100644 --- a/code/__DEFINES/movement.dm +++ b/code/__DEFINES/movement.dm @@ -2,21 +2,21 @@ #define MIN_GLIDE_SIZE 1 /// The maximum for glide_size to be clamped to. /// This shouldn't be higher than the icon size, and generally you shouldn't be changing this, but it's here just in case. -#define MAX_GLIDE_SIZE 32 +#define MAX_GLIDE_SIZE ICON_SIZE_ALL /// Compensating for time dilation GLOBAL_VAR_INIT(glide_size_multiplier, 1.0) ///Broken down, here's what this does: -/// divides the world icon_size (32) by delay divided by ticklag to get the number of pixels something should be moving each tick. +/// divides the world icon_size by delay divided by ticklag to get the number of pixels something should be moving each tick. /// The division result is given a min value of 1 to prevent obscenely slow glide sizes from being set /// Then that's multiplied by the global glide size multiplier. 1.25 by default feels pretty close to spot on. This is just to try to get byond to behave. /// The whole result is then clamped to within the range above. /// Not very readable but it works -#define DELAY_TO_GLIDE_SIZE(delay) (clamp(((world.icon_size / max((delay) / world.tick_lag, 1)) * GLOB.glide_size_multiplier), MIN_GLIDE_SIZE, MAX_GLIDE_SIZE)) +#define DELAY_TO_GLIDE_SIZE(delay) (clamp(((ICON_SIZE_ALL / max((delay) / world.tick_lag, 1)) * GLOB.glide_size_multiplier), MIN_GLIDE_SIZE, MAX_GLIDE_SIZE)) ///Similar to DELAY_TO_GLIDE_SIZE, except without the clamping, and it supports piping in an unrelated scalar -#define MOVEMENT_ADJUSTED_GLIDE_SIZE(delay, movement_disparity) (world.icon_size / ((delay) / world.tick_lag) * movement_disparity * GLOB.glide_size_multiplier) +#define MOVEMENT_ADJUSTED_GLIDE_SIZE(delay, movement_disparity) (ICON_SIZE_ALL / ((delay) / world.tick_lag) * movement_disparity * GLOB.glide_size_multiplier) //Movement loop priority. Only one loop can run at a time, this dictates that // Higher numbers beat lower numbers @@ -134,3 +134,19 @@ GLOBAL_VAR_INIT(glide_size_multiplier, 1.0) #define MOVELOOP_FAILURE 0 #define MOVELOOP_SUCCESS 1 #define MOVELOOP_NOT_READY 2 + +#define NEWTONS *1 + +#define DEFAULT_INERTIA_SPEED 5 +/// Maximum inertia that an object can hold. Used to prevent objects from getting to stupid speeds. +#define INERTIA_FORCE_CAP 25 NEWTONS +/// How much inertia is deducted when a mob has newtonian spacemove capabilities and is not moving in the same direction +#define INERTIA_FORCE_SPACEMOVE_REDUCTION 0.75 NEWTONS +/// How much inertia we must have to not be able to instantly stop after having something to grab +#define INERTIA_FORCE_SPACEMOVE_GRAB 1.5 NEWTONS +/// How much inertia is required for the impacted object to be thrown at the wall +#define INERTIA_FORCE_THROW_FLOOR 10 NEWTONS +/// How much inertia is required past the floor to add 1 strength +#define INERTIA_FORCE_PER_THROW_FORCE 5 NEWTONS +// Results in maximum speed of 1 tile per tick, capped at about 2/3rds of maximum force +#define INERTIA_SPEED_COEF 0.375 diff --git a/code/__DEFINES/paper.dm b/code/__DEFINES/paper.dm index 0d70a2f3ca40d..9cede4214bd93 100644 --- a/code/__DEFINES/paper.dm +++ b/code/__DEFINES/paper.dm @@ -18,3 +18,29 @@ #define BARCODE_SCANNER_INVENTORY "inventory" #define IS_WRITING_UTENSIL(thing) (thing?.get_writing_implement_details()?["interaction_mode"] == MODE_WRITING) + +/** + * key defines used when converting a paper to and fro' a data/json list. It's really important that they stay the same + * lest we break persistence. + */ +#define LIST_PAPER_COLOR "paper_color" +#define LIST_PAPER_NAME "paper_name" + +#define LIST_PAPER_RAW_TEXT_INPUT "raw_text_input" +#define LIST_PAPER_RAW_FIELD_INPUT "raw_field_input" +#define LIST_PAPER_RAW_STAMP_INPUT "raw_stamp_input" + +#define LIST_PAPER_RAW_TEXT "raw_text" +#define LIST_PAPER_FONT "font" +#define LIST_PAPER_FIELD_COLOR "color" +#define LIST_PAPER_BOLD "bold" +#define LIST_PAPER_ADVANCED_HTML "advanced_html" + +#define LIST_PAPER_FIELD_INDEX "field_index" +#define LIST_PAPER_FIELD_DATA "field_data" +#define LIST_PAPER_IS_SIGNATURE "is_signature" + +#define LIST_PAPER_CLASS "class" +#define LIST_PAPER_STAMP_X "x" +#define LIST_PAPER_STAMP_Y "y" +#define LIST_PAPER_ROTATION "rotation" diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index c85b2519869be..e40821c4f8d97 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -81,6 +81,7 @@ //Job preferences levels +#define JP_ANY 0 #define JP_LOW 1 #define JP_MEDIUM 2 #define JP_HIGH 3 diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm index 686c42e07d075..44e4417a20996 100644 --- a/code/__DEFINES/radio.dm +++ b/code/__DEFINES/radio.dm @@ -37,6 +37,10 @@ #define RADIO_KEY_AI_PRIVATE "o" #define RADIO_TOKEN_AI_PRIVATE ":o" +#define RADIO_CHANNEL_ENTERTAINMENT "Entertainment" +#define RADIO_KEY_ENTERTAINMENT "p" +#define RADIO_TOKEN_ENTERTAINMENT ":p" + #define RADIO_CHANNEL_SYNDICATE "Syndicate" #define RADIO_KEY_SYNDICATE "t" @@ -73,6 +77,7 @@ #define FREQ_MEDICAL 1355 // Medical comms frequency, soft blue #define FREQ_ENGINEERING 1357 // Engineering comms frequency, orange #define FREQ_SECURITY 1359 // Security comms frequency, red +#define FREQ_ENTERTAINMENT 1415 // Used by entertainment monitors, cyan #define FREQ_HOLOGRID_SOLUTION 1433 #define FREQ_STATUS_DISPLAYS 1435 @@ -130,3 +135,10 @@ #define RADIO_FREQENCY_LOCKED 1 /// Radio frequency is locked and unchangeable, but can be unlocked by an emag #define RADIO_FREQENCY_EMAGGABLE_LOCK 2 + +///Bitflag for if a headset can use the syndicate radio channel +#define RADIO_SPECIAL_SYNDIE (1<<0) +///Bitflag for if a headset can use the centcom radio channel +#define RADIO_SPECIAL_CENTCOM (1<<1) +///Bitflag for if a headset can use the binary radio channel +#define RADIO_SPECIAL_BINARY (1<<2) diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 1e26f2b778dd0..5da1cf449f791 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -142,7 +142,7 @@ #define ROLE_VAMPIRICACCIDENT "Bloodsucker (Midround)" #define ROLE_BLOODSUCKERBREAKOUT "Bloodsucker (Latejoin)" #define ROLE_MONSTERHUNTER "Monster Hunter" -#define ROLE_VASSAL "Vassal" +#define ROLE_VASSAL "Ghoul" #define ROLE_CHANGELING_ZOMBIE "Changeling Zombie" //BUBBER EDIT END diff --git a/code/__DEFINES/sight.dm b/code/__DEFINES/sight.dm index 0e616b090dc7d..5a3e0d17ef348 100644 --- a/code/__DEFINES/sight.dm +++ b/code/__DEFINES/sight.dm @@ -56,16 +56,6 @@ /// NOTE: this does not function with the SIDE_MAP map format. So we can't. :( //#define SEE_BLACKNESS (1<<10) -/// Bitfield of sight flags that show things "inside" the blackness plane -/// We've gotta alpha it down if we get this, cause otherwise the sight flag won't work -#define BLACKNESS_CUTTING (SEE_MOBS|SEE_OBJS|SEE_TURFS|SEE_TURFS|SEE_TURFS) - -/// Range at which blindness effects treat nearsightedness as blind and play -#define NEARSIGHTNESS_BLINDNESS 2 - -/// Range in tiles that a mob can see in the dark (used to determine if a mob has night_vision) -#define NIGHTVISION_RANGE 8 - /// Bitfield of sight flags that show THINGS but no lighting /// Since lighting is an underlay on turfs, this is everything but that #define SEE_AVOID_TURF_BLACKNESS (SEE_MOBS|SEE_OBJS) diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 4094eb93f2f57..e3fb415318e86 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -152,6 +152,11 @@ #define ANNOUNCER_SHUTTLE "announcer_shuttle" //SKYRAT EDIT END +// BUBBER EDIT ADDITION BEGIN +#define ANNOUNCER_GRAVGENBLACKOUT "announcer_gravgenblackout" +#define ANNOUNCER_METEORWARNING "announcer_meteorwarning" +// BUBBER EDIT ADDITION END + /// Global list of all of our announcer keys. GLOBAL_LIST_INIT(announcer_keys, list( @@ -197,6 +202,10 @@ GLOBAL_LIST_INIT(announcer_keys, list( ANNOUNCER_NRI_RAIDERS, ANNOUNCER_OUTBREAK6, //SKYRAT EDIT END + // BUBBER EDIT ADDITION BEGIN + ANNOUNCER_GRAVGENBLACKOUT, + ANNOUNCER_METEORWARNING, + // BUBBER EDIT ADDITION END )) /// List of all of our sound keys. @@ -242,3 +251,10 @@ GLOBAL_LIST_INIT(announcer_keys, list( #define SFX_KEYBOARD_CLICKS "keyboard_clicks" #define SFX_STONE_DROP "stone_drop" #define SFX_STONE_PICKUP "stone_pickup" +#define SFX_MUFFLED_SPEECH "muffspeech" +#define SFX_DEFAULT_FISH_SLAP "default_fish_slap" +#define SFX_ALT_FISH_SLAP "alt_fish_slap" +#define SFX_FISH_PICKUP "fish_pickup" +#define SFX_CAT_MEOW "cat_meow" +#define SFX_CAT_PURR "cat_purr" +#define SFX_LIQUID_POUR "liquid_pour" diff --git a/code/__DEFINES/spacevines.dm b/code/__DEFINES/spacevines.dm index 84739f344b504..eca0975c2626f 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.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.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 fadd00053156d..9b3c2612afa34 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -14,8 +14,8 @@ #define span_alien(str) ("" + str + "") #define span_announce(str) ("" + str + "") #define span_announcement_header(str) ("" + str + "") -#define span_average(str) ("" + str + "") +#define span_bad(str) ("" + str + "") #define span_big(str) ("" + str + "") #define span_bigicon(str) ("" + str + "") #define span_binarysay(str) ("" + str + "") @@ -48,8 +48,12 @@ #define span_drone(str) ("" + str + "") #define span_engradio(str) ("" + str + "") #define span_extremelybig(str) ("" + str + "") +#define span_emote(str) ("" + str + "") +#define span_enteradio(str) ("" + str + "") +#define span_game(str) ("" + str + "") #define span_game_say(str) ("" + str + "") #define span_ghostalert(str) ("" + str + "") +#define span_good(str) ("" + str + "") #define span_green(str) ("" + str + "") #define span_greenannounce(str) ("" + str + "") #define span_greenteamradio(str) ("" + str + "") @@ -69,6 +73,7 @@ #define span_info(str) ("" + str + "") #define span_infoplain(str) ("" + str + "") #define span_interface(str) ("" + str + "") +#define span_italics(str) ("" + str + "") #define span_linkify(str) ("" + str + "") #define span_looc(str) ("" + str + "") #define span_major_announcement_text(str) ("" + str + "") @@ -116,19 +121,22 @@ #define span_secradio(str) ("" + str + "") #define span_servradio(str) ("" + str + "") #define span_singing(str) ("" + str + "") +#define span_slightly_larger(str) ("" + str + "") #define span_slime(str) ("" + str + "") #define span_small(str) ("" + str + "") +#define span_smalldanger(str) ("" + str + "") #define span_smallnotice(str) ("" + str + "") #define span_smallnoticeital(str) ("" + str + "") #define span_soapbox(str) ("" + str + "") +#define span_spiderbreacher(str) ("" + str + "") #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 + "") #define span_tape_recorder(str) ("" + str + "") +#define span_tinydanger(str) ("" + str + "") #define span_tinynotice(str) ("" + str + "") #define span_tinynoticeital(str) ("" + str + "") #define span_unconscious(str) ("" + str + "") diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 8ada83a2109cb..121cf5a072d17 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -24,14 +24,20 @@ #define CURSE_GRASPING (1<<3) //Incapacitated status effect flags -/// If the incapacitated status effect will ignore a mob in restraints (handcuffs) -#define IGNORE_RESTRAINTS (1<<0) -/// If the incapacitated status effect will ignore a mob in stasis (stasis beds) -#define IGNORE_STASIS (1<<1) -/// If the incapacitated status effect will ignore a mob being agressively grabbed -#define IGNORE_GRAB (1<<2) - -/// Maxamounts of fire stacks a mob can get +/// If the mob is normal incapacitated. Should never need this, just avoids issues if we ever overexpand this +#define TRADITIONAL_INCAPACITATED (1<<0) +/// If the incapacitated status effect is being caused by restraints (handcuffs) +#define INCAPABLE_RESTRAINTS (1<<1) +/// If the incapacitated status effect is being caused by stasis (stasis beds) +#define INCAPABLE_STASIS (1<<2) +/// If the incapacitated status effect is being caused by being agressively grabbed +#define INCAPABLE_GRAB (1<<3) + +/// Checks to see if a mob would be incapacitated even while ignoring some types +/// Does this by inverting the passed in flags and seeing if we're still incapacitated +#define INCAPACITATED_IGNORING(mob, flags) (mob.incapacitated & ~(flags)) + +/// Max amounts of fire stacks a mob can get #define MAX_FIRE_STACKS 20 /// If a mob has a higher threshold than this, the icon shown will be increased to the big fire icon. #define MOB_BIG_FIRE_STACK_THRESHOLD 3 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 73241b9d34bfb..cee0e59ea7b10 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 30 +#define DB_MINOR_VERSION 31 // BUBBER EDIT //! ## Timing subsystem @@ -39,7 +39,7 @@ * Timing should be based on how timing progresses on clients, not the server. * * Tracking this is more expensive, - * should only be used in conjuction with things that have to progress client side, such as + * should only be used in conjunction with things that have to progress client side, such as * animate() or sound() */ #define TIMER_CLIENT_TIME (1<<2) @@ -81,15 +81,15 @@ ///Nothing happens #define INITIALIZE_HINT_NORMAL 0 /** - * call LateInitialize at the end of all atom Initalization + * call LateInitialize at the end of all atom Initialization * * The item will be added to the late_loaders list, this is iterated over after - * initalization of subsystems is complete and calls LateInitalize on the atom + * initialization of subsystems is complete and calls LateInitalize on the atom * see [this file for the LateIntialize proc](atom.html#proc/LateInitialize) */ #define INITIALIZE_HINT_LATELOAD 1 -///Call qdel on the atom after intialization +///Call qdel on the atom after initialization #define INITIALIZE_HINT_QDEL 2 ///type and all subtypes should always immediately call Initialize in New() @@ -106,23 +106,23 @@ //! ### SS initialization hints /** - * Negative values incidate a failure or warning of some kind, positive are good. - * 0 and 1 are unused so that TRUE and FALSE are guarenteed to be invalid values. + * Negative values indicate a failure or warning of some kind, positive are good. + * 0 and 1 are unused so that TRUE and FALSE are guaranteed to be invalid values. */ /// Subsystem failed to initialize entirely. Print a warning, log, and disable firing. #define SS_INIT_FAILURE -2 -/// The default return value which must be overriden. Will succeed with a warning. +/// The default return value which must be overridden. Will succeed with a warning. #define SS_INIT_NONE -1 -/// Subsystem initialized sucessfully. +/// Subsystem initialized successfully. #define SS_INIT_SUCCESS 2 /// If your system doesn't need to be initialized (by being disabled or something) #define SS_INIT_NO_NEED 3 -/// Succesfully initialized, BUT do not announce it to players (generally to hide game mechanics it would otherwise spoil) +/// Successfully initialized, BUT do not announce it to players (generally to hide game mechanics it would otherwise spoil) #define SS_INIT_NO_MESSAGE 4 //! ### SS initialization load orders @@ -200,6 +200,7 @@ // Subsystem fire priority, from lowest to highest priority // If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) +#define FIRE_PRIORITY_UNPLANNED_NPC 3 #define FIRE_PRIORITY_IDLE_NPC 5 #define FIRE_PRIORITY_PING 10 #define FIRE_PRIORITY_SERVER_MAINT 10 diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm index 2fb6ab615570c..237e956ca7fae 100644 --- a/code/__DEFINES/surgery.dm +++ b/code/__DEFINES/surgery.dm @@ -28,6 +28,9 @@ #define ORGAN_VIRGIN (1<<10) /// ALWAYS show this when scanned by advanced scanners, even if it is totally healthy #define ORGAN_PROMINENT (1<<11) +/// An organ that is ostensibly dangerous when inside a body +#define ORGAN_HAZARDOUS (1<<12) + /// Helper to figure out if a limb is organic #define IS_ORGANIC_LIMB(limb) (limb.bodytype & BODYTYPE_ORGANIC) /// Helper to figure out if a limb is robotic @@ -67,7 +70,7 @@ /// All head flags, default for most heads #define HEAD_ALL_FEATURES (HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN) -/// When the surgery step fails :( +/// Return value when the surgery step fails :( #define SURGERY_STEP_FAIL -1 // Flags for surgery_flags on surgery datums diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index 06d2a93889883..1240996237939 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -96,7 +96,7 @@ #define BONE_SCAR_FILE "wounds/bone_scar_desc.json" // SKYRAT EDIT ADDITION BEGIN - SYNTH WOUNDS /// File location for metalic wound descriptions -#define METAL_SCAR_FILE "wounds/metal_scar_desc.json" +#define METAL_SCAR_FILE "wounds/metal_scar_desc.json" // SKYRAT EDIT ADDITION END /// File location for scar wound descriptions #define SCAR_LOC_FILE "wounds/scar_loc.json" diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 4766b3dfe661e..42f2d5fc31fee 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,7 +1,7 @@ // tgstation-server DMAPI // The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119. -#define TGS_DMAPI_VERSION "7.2.1" +#define TGS_DMAPI_VERSION "7.3.0" // All functions and datums outside this document are subject to change with any version and should not be relied on. diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm index 2348bd49f194b..794c56691a6da 100644 --- a/code/__DEFINES/tools.dm +++ b/code/__DEFINES/tools.dm @@ -39,3 +39,16 @@ /// 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) + +/// How many seconds between each fuel depletion tick ("use" proc) +#define TOOL_FUEL_BURN_INTERVAL 5 + +///This is a number I got by quickly searching up the temperature to melt iron/glass, though not really realistic. +///This is used for places where lighters should not be hot enough to be used as a welding tool on. +#define HIGH_TEMPERATURE_REQUIRED 1500 + +/** + * A helper for checking if an item interaction should be skipped. + * This is only used explicitly because some interactions may not want to ever be skipped. + */ +#define SHOULD_SKIP_INTERACTION(target, item, user) (HAS_TRAIT(target, TRAIT_COMBAT_MODE_SKIP_INTERACTION) && user.combat_mode) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index b064e1b22566a..774b89cdb0e7e 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -24,8 +24,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #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! +/// Apply this to make a mob not dense, and remove it when you want it to no longer make them undense, other sources of undesity will still apply. Always define a unique source when adding a new instance of this! #define TRAIT_UNDENSE "undense" +/// Makes the mob immune to damage and several other ailments. +#define TRAIT_GODMODE "godmode" /// Expands our FOV by 30 degrees if restricted #define TRAIT_EXPANDED_FOV "expanded_fov" /// Doesn't miss attacks @@ -50,7 +52,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_DEAF "deaf" #define TRAIT_FAT "fat" #define TRAIT_HUSK "husk" -///Blacklisted from being revived via defibrilator +///Blacklisted from being revived via defibrillator #define TRAIT_DEFIB_BLACKLISTED "defib_blacklisted" #define TRAIT_BADDNA "baddna" #define TRAIT_CLUMSY "clumsy" @@ -112,6 +114,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_STABLELIVER "stable_liver" #define TRAIT_VATGROWN "vatgrown" #define TRAIT_RESISTHEAT "resist_heat" +/// Trait for when you can no longer gain body heat +#define TRAIT_HYPOTHERMIC "body_hypothermic" ///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. @@ -169,7 +173,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #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. +/// Carbons with this trait can't 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" @@ -219,20 +223,30 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NO_STAGGER "no_stagger" /// Getting hit by thrown movables won't push you away #define TRAIT_NO_THROW_HITPUSH "no_throw_hitpush" +/// This mob likes to eat fish. Raw, uncut fish. +#define TRAIT_FISH_EATER "fish_eater" ///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" ///This trait gets you a list of fishes that can be caught when examining a fishing spot. #define TRAIT_EXAMINE_FISHING_SPOT "examine_fishing_spot" ///lobstrosities and carps will prioritize/flee from those that have this trait (given by the skill-locked hat) #define TRAIT_SCARY_FISHERMAN "scary_fisherman" +/// Atoms with this trait can be right-clicked with a fish to release them, presumably back in the fishing spot they were caught from. +#define TRAIT_CATCH_AND_RELEASE "catch_and_release" ///This trait lets you get the size and weight of the fish by examining them #define TRAIT_EXAMINE_FISH "examine_fish" ///This trait lets you roughly know if the fish is dead, starving, drowning or sick by examining them #define TRAIT_EXAMINE_DEEPER_FISH "examine_deeper_fish" ///Trait given to turfs or objects that can be fished from #define TRAIT_FISHING_SPOT "fishing_spot" +///This trait prevents the fishing spot from being linked to the fish-porter when a multitool is being used. +#define TRAIT_UNLINKABLE_FISHING_SPOT "unlinkable_fishing_spot" ///Trait given to mobs that can fish without a rod #define TRAIT_PROFOUND_FISHER "profound_fisher" +/// If an atom has this trait, then you can toss a bottle with a message in it. +#define TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION "message_in_a_bottle_location" +/// Stops other objects of the same type from being inserted inside the same aquarium it's in. +#define TRAIT_UNIQUE_AQUARIUM_CONTENT "unique_aquarium_content" /// This trait lets you evaluate someone's fitness level against your own #define TRAIT_EXAMINE_FITNESS "reveal_power_level" /// These mobs have particularly hygienic tongues @@ -253,7 +267,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// 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 +/// Stops all slipping and sliding from occurring #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 @@ -362,16 +376,14 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_GUNFLIP "gunflip" /// Increases chance of getting special traumas, makes them harder to cure #define TRAIT_SPECIAL_TRAUMA_BOOST "special_trauma_boost" -/// Doubles the duration and cooldown of a flip -#define TRAIT_SLOW_FLIP "slow_flip" #define TRAIT_SPACEWALK "spacewalk" -/// Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we werent +/// Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we weren't #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 +///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 don't 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" @@ -440,7 +452,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #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 +/// This mob overrides certain 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" @@ -536,9 +548,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Mobs with this trait cannot be hit by projectiles, meaning the projectiles will just go through. #define TRAIT_UNHITTABLE_BY_PROJECTILES "unhittable_by_projectiles" -/// 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" @@ -661,7 +670,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #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 @@ -679,6 +687,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// This movable atom has the explosive block element #define TRAIT_BLOCKING_EXPLOSIVES "blocking_explosives" +///This mob is currently blocking a projectile. +#define TRAIT_BLOCKING_PROJECTILES "blocking_projectiles" ///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. @@ -741,18 +751,26 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_T_RAY_VISIBLE "t-ray-visible" /// If this item's been fried #define TRAIT_FOOD_FRIED "food_fried" +/// If this item's been bbq grilled +#define TRAIT_FOOD_BBQ_GRILLED "food_bbq_grilled" /// 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" +/// This atom has a quality_food_ingredient element attached +#define TRAIT_QUALITY_FOOD_INGREDIENT "quality_food_ingredient" /// The items needs two hands to be carried #define TRAIT_NEEDS_TWO_HANDS "needstwohands" /// Can't be catched when thrown #define TRAIT_UNCATCHABLE "uncatchable" +/// You won't catch duds while fishing with this rod. +#define TRAIT_ROD_REMOVE_FISHING_DUD "rod_remove_fishing_dud" /// 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" +/// This bait will kill any fish that doesn't have it on its favorite_bait list +#define TRAIT_POISONOUS_BAIT "poisonous_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" @@ -760,7 +778,14 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Baits with this trait will ignore bait preferences and related fish traits. #define TRAIT_OMNI_BAIT "omni_bait" /// The bait won't be consumed when used -#define TRAIT_BAIT_UNCONSUMABLE "bait_unconsumabe" +#define TRAIT_BAIT_UNCONSUMABLE "bait_unconsumable" +/// This bait ignores environmental conditions for fishing (like low light for nocturnal fish) +#define TRAIT_BAIT_IGNORE_ENVIRONMENT "bait_ignore_environment" +/** + * This bait won't apply TRAIT_ROD_REMOVE_FISHING_DUD to the rod it's attached on, + * instead, it'll allow the fishing dud to be there unless there's at least one fish that likes the bait + */ +#define TRAIT_BAIT_ALLOW_FISHING_DUD "bait_dont_affect_fishing_dud" /// 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 @@ -789,6 +814,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_HAUNTED "haunted" /// An item that, if it has contents, will ignore its contents when scanning for contraband. #define TRAIT_CONTRABAND_BLOCKER "contraband_blocker" +/// For edible items that cannot be composted inside hydro trays +#define TRAIT_UNCOMPOSTABLE "uncompostable" //quirk traits #define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" @@ -825,6 +852,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_THROWINGARM "throwing_arm" #define TRAIT_SETTLER "settler" #define TRAIT_STRONG_STOMACH "strong_stomach" +#define TRAIT_VEGETARIAN "trait_vegetarian" /// This mob always lands on their feet when they fall, for better or for worse. #define TRAIT_CATLIKE_GRACE "catlike_grace" @@ -949,11 +977,22 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_FISH_AMPHIBIOUS "fish_amphibious" ///Trait needed for the lubefish evolution #define TRAIT_FISH_FED_LUBE "fish_fed_lube" +#define TRAIT_FISH_WELL_COOKED "fish_well_cooked" #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" ///Fish will also occasionally fire weak tesla zaps #define TRAIT_FISH_ELECTROGENESIS "fish_electrogenesis" +///Offsprings from this fish will never be of its same type (unless it's self-reproducing). +#define TRAIT_FISH_RECESSIVE "fish_recessive" +///This fish comes equipped with a stinger (increased damage and potentially venomous if also toxic) +#define TRAIT_FISH_STINGER "fish_stinger" +///This fish is currently on cooldown and cannot splash ink unto people's faces +#define TRAIT_FISH_INK_ON_COOLDOWN "fish_ink_on_cooldown" +///This fish requires two hands to carry even if smaller than FISH_SIZE_TWO_HANDS_REQUIRED, as long as it's bulky-sized. +#define TRAIT_FISH_SHOULD_TWOHANDED "fish_should_twohanded" +///This fish won't be killed when cooked. +#define TRAIT_FISH_SURVIVE_COOKING "fish_survive_cooking" /// Trait given to angelic constructs to let them purge cult runes #define TRAIT_ANGELIC "angelic" @@ -1051,6 +1090,13 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// things with this trait are treated as having no access in /atom/movable/proc/check_access(obj/item) #define TRAIT_ALWAYS_NO_ACCESS "alwaysnoaccess" +///The entity has Silicon 'access', so is either a silicon, has an access wand, or is an admin ghost AI. +///This is put on the mob, it is used on the client for Admins but they are the exception as they use `isAdminGhostAI`. +#define TRAIT_SILICON_ACCESS "silicon_access_trait" +///The entity has AI 'access', so is either an AI, has an access wand, or is an admin ghost AI. Used to block off regular Silicons from things. +///This is put on the mob, it is used on the client for Admins but they are the exception as they use `isAdminGhostAI`. +#define TRAIT_AI_ACCESS "ai_access_trait" + ///Used by wearable_client_colour to determine whether the mob wants to have the colours of the screen affected by worn items (some still do regardless). #define TRAIT_SEE_WORN_COLOURS "see_worn_colour" @@ -1094,9 +1140,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// this object has been frozen #define TRAIT_FROZEN "frozen" -/// Currently fishing -#define TRAIT_GONE_FISHING "fishing" - /// Makes a character be better/worse at tackling depending on their wing's status #define TRAIT_TACKLING_WINGED_ATTACKER "tacking_winged_attacker" @@ -1201,6 +1244,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait given to anything linked to, not necessarily allied to, the mansus #define TRAIT_MANSUS_TOUCHED "mansus_touched" + +// These traits are used in IS_X() as an OR, and is utilized for pseudoantags (such as deathmatch or domains) so they don't need to actually get antag status. +// To specifically and only get the antag datum, GET_X() exists now. +#define TRAIT_ACT_AS_CULTIST "act_as_cultist" +#define TRAIT_ACT_AS_HERETIC "act_as_heretic" + /// Appiled when wizard buy (/datum/spellbook_entry/perks/spalls_lottery) perk. /// Give 50/25% chance not spend a spellbook charge on 1/2 cost spell. /// Appiled it wizard can't refund any spells. @@ -1233,6 +1282,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Trait given to a turf that should not be allowed to be terraformed, such as turfs holding ore vents. #define TRAIT_NO_TERRAFORM "no_terraform" +///Trait that prevents mobs from stopping by grabbing objects +#define TRAIT_NOGRAV_ALWAYS_DRIFT "nograv_always_drift" + ///Mobs with these trait do not get italicized/quiet speech when speaking in low pressure #define TRAIT_SPEECH_BOOSTER "speech_booster" @@ -1242,4 +1294,20 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Trait which allows mobs to parry mining mob projectiles #define TRAIT_MINING_PARRYING "mining_parrying" +/** + * + * This trait is used in some interactions very high in the interaction chain to allow + * certain atoms to be skipped by said interactions if the user is in combat mode. + * + * Its primarily use case is for stuff like storage and tables, to allow things like emags to be bagged + * (because in some contexts you might want to be emagging a bag, and in others you might want to be storing it.) + * + * This is only checked by certain items explicitly so you can't just add the trait and expect it to work. + * (This may be changed later but I chose to do it this way to avoid messing up interactions which require combat mode) + */ +#define TRAIT_COMBAT_MODE_SKIP_INTERACTION "combat_mode_skip_interaction" + +///A "fake" effect that should not be subject to normal effect removal methods (like the effect remover component) +#define TRAIT_ILLUSORY_EFFECT "illusory_effect" + // END TRAIT DEFINES diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index f11cc50dbbd58..beb2b98944bc0 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -36,6 +36,8 @@ #define VENDING_MACHINE_TRAIT "vending_machine" +///A trait given by a held item +#define HELD_ITEM_TRAIT "held-item-trait" #define ABSTRACT_ITEM_TRAIT "abstract-item" /// A trait given by any status effect #define STATUS_EFFECT_TRAIT "status-effect" @@ -45,7 +47,8 @@ /// Trait given by an Action datum #define ACTION_TRAIT "action" - +///A trait given by someone blocking. +#define BLOCKING_TRAIT "blocking" #define CLOTHING_TRAIT "clothing" #define HELMET_TRAIT "helmet" /// inherited from the mask @@ -193,6 +196,9 @@ /// Trait given by a fulton extraction pack #define FULTON_PACK_TRAIT "fulton-pack" +/// Trait from mob/living/update_transform() +#define UPDATE_TRANSFORM_TRAIT "update_transform" + /// Trait granted by the berserker hood. #define BERSERK_TRAIT "berserk_trait" /// Trait granted by [/obj/item/rod_of_asclepius] @@ -293,5 +299,11 @@ /// Trait when a drink was renamed by a shaker #define SHAKER_LABEL_TRAIT "shaker_trait" +/// Trait given by a jetpack +#define JETPACK_TRAIT "jetpack_trait" + /// Trait added by style component #define STYLE_TRAIT "style" + +/// Trait from an engraving +#define ENGRAVED_TRAIT "engraved" diff --git a/code/__DEFINES/~skyrat_defines/DNA.dm b/code/__DEFINES/~skyrat_defines/DNA.dm index d8c48d4506642..bec7a87da318c 100644 --- a/code/__DEFINES/~skyrat_defines/DNA.dm +++ b/code/__DEFINES/~skyrat_defines/DNA.dm @@ -70,19 +70,13 @@ //In inches #define PENIS_MIN_GIRTH PENIS_MIN_LENGTH #define PENIS_MAX_GIRTH 20 -/// for non oversized mobs with a 'normal' body size -#define PENIS_MAX_GIRTH_NORMAL_SIZED 15 #define PENIS_DEFAULT_GIRTH 5 // a lil big but not by much #define PENIS_MIN_LENGTH 1 #define PENIS_MAX_LENGTH 36 -/// for non oversized mobs with a 'normal' body size -#define PENIS_MAX_LENGTH_NORMAL_SIZED 20 #define PENIS_DEFAULT_LENGTH 6 //still a lil long but not insane #define TESTICLES_MIN_SIZE 0 #define TESTICLES_MAX_SIZE 6 -/// for non oversized mobs with a 'normal' body size -#define TESTICLES_MAX_NORMAL_SIZED 3 #define SHEATH_NONE "None" #define SHEATH_NORMAL "Sheath" diff --git a/code/__DEFINES/~skyrat_defines/span.dm b/code/__DEFINES/~skyrat_defines/span.dm index 260f1913905ce..42eea1aaf0b43 100644 --- a/code/__DEFINES/~skyrat_defines/span.dm +++ b/code/__DEFINES/~skyrat_defines/span.dm @@ -1,12 +1,9 @@ -#define span_emote(str) ("" + str + "") -#define span_italics(str) ("" + str + "") #define span_maptext(str) ("" + str + "") #define span_mentor(str) ("" + str + "") #define span_mentornotice(str) ("" + str + "") #define span_oocplain(str) ("" + str + "") #define span_pink(str) ("" + str + "") #define span_rlooc(str) ("" + str + "") -#define span_smalldanger(str) ("" + str + "") #define span_userlove(str) ("" + str + "") #define span_warningplain(str) ("" + str + "") #define span_crossooc(str) ("" + str + "") diff --git a/code/__DEFINES/~~bubber_defines/economy.dm b/code/__DEFINES/~~bubber_defines/economy.dm index b61448ade6a4f..36e732f887cad 100644 --- a/code/__DEFINES/~~bubber_defines/economy.dm +++ b/code/__DEFINES/~~bubber_defines/economy.dm @@ -2,6 +2,10 @@ #define CIV_JOB_SMITH 21 //By making this higher we avoid having to maintain this value if more bounties are added upstream #define CIV_JOB_PRISONER 22 //Basically restricted assistant bounties -//This is needed for dauntless to have their own cargo express console/powerator +//This is needed for Dauntless to have their own cargo express console/powerator #define ACCOUNT_INT "INT" #define ACCOUNT_INT_NAME "Interdyne Budget" + +//This is needed for Tarkon to have their own cargo express console/powerator +#define ACCOUNT_TAR "TAR" +#define ACCOUNT_TAR_NAME "Tarkon Budget" diff --git a/code/__DEFINES/~~bubber_defines/signals.dm b/code/__DEFINES/~~bubber_defines/signals.dm index d0edef9aec6c8..ba019ecb94248 100644 --- a/code/__DEFINES/~~bubber_defines/signals.dm +++ b/code/__DEFINES/~~bubber_defines/signals.dm @@ -4,3 +4,5 @@ #define COMSIG_NAME_CHANGED "name_changed" ///from [/mob/living/carbon/human/Move]: () #define COMSIG_NECK_STEP_ACTION "neck_step_action" +/// from /obj/item/organ/proc/on_bodypart_remove(obj/item/bodypart/limb, movement_flags) +#define COMSIG_ORGAN_BODYPART_REMOVED "organ_bodypart_removed" diff --git a/code/__DEFINES/~~bubber_defines/span.dm b/code/__DEFINES/~~bubber_defines/span.dm new file mode 100644 index 0000000000000..7ab28a8a935a0 --- /dev/null +++ b/code/__DEFINES/~~bubber_defines/span.dm @@ -0,0 +1 @@ +#define span_subtlepda(str) ("" + str + "") diff --git a/code/__DEFINES/~~bubber_defines/storyteller_defines.dm b/code/__DEFINES/~~bubber_defines/storyteller_defines.dm index e567fb40a0495..6ea31c3bace3d 100644 --- a/code/__DEFINES/~~bubber_defines/storyteller_defines.dm +++ b/code/__DEFINES/~~bubber_defines/storyteller_defines.dm @@ -30,8 +30,8 @@ #define EVENT_TRACK_MUNDANE "Mundane" #define EVENT_TRACK_MODERATE "Moderate" #define EVENT_TRACK_MAJOR "Major" -#define EVENT_TRACK_ROLESET "Roleset" -#define EVENT_TRACK_OBJECTIVES "Objectives" +#define EVENT_TRACK_CREWSET "Crewset" +#define EVENT_TRACK_GHOSTSET "Ghostset" #define ALL_EVENTS "All" #define UNCATEGORIZED_EVENTS "Uncategorized" @@ -45,53 +45,54 @@ #define GAMEMODE_PANEL_MAIN "Main" #define GAMEMODE_PANEL_VARIABLES "Variables" -#define MUNDANE_POINT_THRESHOLD 40 -#define MODERATE_POINT_THRESHOLD 70 -#define MAJOR_POINT_THRESHOLD 130 -#define ROLESET_POINT_THRESHOLD 150 -#define OBJECTIVES_POINT_THRESHOLD 170 +/// Reused for multipliers of the thresholds +#define MUNDANE_POINT_THRESHOLD 1 +#define MODERATE_POINT_THRESHOLD 1 +#define MAJOR_POINT_THRESHOLD 1 +#define CREWSET_POINT_THRESHOLD 1 +#define GHOSTSET_POINT_THRESHOLD 1 -#define MUNDANE_MIN_POP 4 -#define MODERATE_MIN_POP 6 +#define MUNDANE_MIN_POP 0 +#define MODERATE_MIN_POP 0 #define MAJOR_MIN_POP 20 -#define ROLESET_MIN_POP 20 -#define OBJECTIVES_MIN_POP 20 +#define CREWSET_MIN_POP 0 +#define GHOSTSET_MIN_POP 0 /// Defines for how much pop do we need to stop applying a pop scalling penalty to event frequency. #define MUNDANE_POP_SCALE_THRESHOLD 25 #define MODERATE_POP_SCALE_THRESHOLD 32 #define MAJOR_POP_SCALE_THRESHOLD 45 -#define ROLESET_POP_SCALE_THRESHOLD 45 -#define OBJECTIVES_POP_SCALE_THRESHOLD 45 +#define CREWSET_POP_SCALE_THRESHOLD 45 +#define GHOSTSET_POP_SCALE_THRESHOLD 45 /// The maximum penalty coming from pop scalling, when we're at the most minimum point, easing into 0 as we reach the SCALE_THRESHOLD. This is treated as a percentage. #define MUNDANE_POP_SCALE_PENALTY 35 #define MODERATE_POP_SCALE_PENALTY 35 #define MAJOR_POP_SCALE_PENALTY 35 -#define ROLESET_POP_SCALE_PENALTY 35 -#define OBJECTIVES_POP_SCALE_PENALTY 35 +#define CREWSET_POP_SCALE_PENALTY 35 +#define GHOSTSET_POP_SCALE_PENALTY 35 #define STORYTELLER_VOTE "storyteller" -#define EVENT_TRACKS list(EVENT_TRACK_MUNDANE, EVENT_TRACK_MODERATE, EVENT_TRACK_MAJOR, EVENT_TRACK_ROLESET, EVENT_TRACK_OBJECTIVES) -#define EVENT_PANEL_TRACKS list(EVENT_TRACK_MUNDANE, EVENT_TRACK_MODERATE, EVENT_TRACK_MAJOR, EVENT_TRACK_ROLESET, EVENT_TRACK_OBJECTIVES, UNCATEGORIZED_EVENTS, ALL_EVENTS) +#define EVENT_TRACKS list(EVENT_TRACK_MUNDANE, EVENT_TRACK_MODERATE, EVENT_TRACK_MAJOR, EVENT_TRACK_CREWSET, EVENT_TRACK_GHOSTSET) +#define EVENT_PANEL_TRACKS list(EVENT_TRACK_MUNDANE, EVENT_TRACK_MODERATE, EVENT_TRACK_MAJOR, EVENT_TRACK_CREWSET, EVENT_TRACK_GHOSTSET, UNCATEGORIZED_EVENTS, ALL_EVENTS) /// Defines for the antag cap to prevent midround injections. #define ANTAG_CAP_FLAT 1 #define ANTAG_CAP_DENOMINATOR 9 -///Below are defines for roundstart point pool. The GAIN ones are multiplied by ready population +///Below are defines for the percentage fill that the tracks should start on. +- 50% of the value will be added #define ROUNDSTART_MUNDANE_BASE 20 -#define ROUNDSTART_MUNDANE_GAIN 0.5 #define ROUNDSTART_MODERATE_BASE 35 -#define ROUNDSTART_MODERATE_GAIN 1.2 #define ROUNDSTART_MAJOR_BASE 40 -#define ROUNDSTART_MAJOR_GAIN 2 -#define ROUNDSTART_ROLESET_BASE 60 -#define ROUNDSTART_ROLESET_GAIN 4 +#define ROUNDSTART_CREWSET_BASE 60 -#define ROUNDSTART_OBJECTIVES_BASE 40 -#define ROUNDSTART_OBJECTIVES_GAIN 2 +#define ROUNDSTART_GHOSTSET_BASE 40 + +/// Storyteller types below, basically prevents several intense teller rounds in a row +#define STORYTELLER_TYPE_ALWAYS_AVAILABLE 0 +#define STORYTELLER_TYPE_CALM 1 +#define STORYTELLER_TYPE_INTENSE 2 diff --git a/code/__DEFINES/~~bubber_defines/traits/declarations.dm b/code/__DEFINES/~~bubber_defines/traits/declarations.dm index 6d61715d22026..7c7891b7177f9 100644 --- a/code/__DEFINES/~~bubber_defines/traits/declarations.dm +++ b/code/__DEFINES/~~bubber_defines/traits/declarations.dm @@ -16,3 +16,9 @@ //basic security hud #define TRAIT_BASIC_SECURITY_HUD "basic_security_hud" + +#define TRAIT_TORPOR "torpor" + +//lipstick trait +#define TRAIT_HYPNO_KISS "hypno kiss" + diff --git a/code/__HELPERS/_auxtools_api.dm b/code/__HELPERS/_auxtools_api.dm index 0117ded4c5195..a907be8ecf8fb 100644 --- a/code/__HELPERS/_auxtools_api.dm +++ b/code/__HELPERS/_auxtools_api.dm @@ -1,38 +1,3 @@ -#define AUXTOOLS_FULL_INIT 2 -#define AUXTOOLS_PARTIAL_INIT 1 - -GLOBAL_LIST_EMPTY(auxtools_initialized) -GLOBAL_PROTECT(auxtools_initialized) - -#define AUXTOOLS_CHECK(LIB)\ - if (!CONFIG_GET(flag/auxtools_enabled)) {\ - CRASH("Auxtools is not enabled in config!");\ - }\ - if (GLOB.auxtools_initialized[LIB] != AUXTOOLS_FULL_INIT) {\ - if (fexists(LIB)) {\ - var/string = call_ext(LIB,"auxtools_init")();\ - if(findtext(string, "SUCCESS")) {\ - GLOB.auxtools_initialized[LIB] = AUXTOOLS_FULL_INIT;\ - } else {\ - CRASH(string);\ - }\ - } else {\ - CRASH("No file named [LIB] found!")\ - }\ - }\ - -#define AUXTOOLS_SHUTDOWN(LIB)\ - if (GLOB.auxtools_initialized[LIB] == AUXTOOLS_FULL_INIT && fexists(LIB)){\ - call_ext(LIB,"auxtools_shutdown")();\ - GLOB.auxtools_initialized[LIB] = AUXTOOLS_PARTIAL_INIT;\ - }\ - -#define AUXTOOLS_FULL_SHUTDOWN(LIB)\ - if (GLOB.auxtools_initialized[LIB] && fexists(LIB)){\ - call_ext(LIB,"auxtools_full_shutdown")();\ - GLOB.auxtools_initialized[LIB] = FALSE;\ - } - /proc/auxtools_stack_trace(msg) CRASH(msg) diff --git a/code/__HELPERS/_dreamluau.dm b/code/__HELPERS/_dreamluau.dm index 196774d6a88e8..1e1e315a2aebd 100644 --- a/code/__HELPERS/_dreamluau.dm +++ b/code/__HELPERS/_dreamluau.dm @@ -1,8 +1,12 @@ /* This comment bypasses grep checks */ /var/__dreamluau -#define DREAMLUAU (world.system_type == MS_WINDOWS ? "dreamluau.dll" : (__dreamluau || (__dreamluau = __detect_auxtools("dreamluau")))) +/* This comment also bypasses grep checks */ /var/__dreamluau_exists -#define DREAMLUAU_CALL(func) call_ext(DREAMLUAU, "byond:[#func]") +#define DREAMLUAU_EXISTS (__dreamluau_exists ||= fexists(DREAMLUAU)) + +#define DREAMLUAU (world.system_type == MS_WINDOWS ? "dreamluau.dll" : (__dreamluau ||= __detect_auxtools("dreamluau"))) + +#define DREAMLUAU_CALL(func) (!DREAMLUAU_EXISTS) ? null : call_ext(DREAMLUAU, "byond:[#func]") /** * All of the following functions will return a string if the underlying rust code returns an error or a wrapped panic. diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 157a17012a883..f8a0dc6d7d551 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -978,53 +978,57 @@ else return element -/// Returns a copy of the list where any element that is a datum or the world is converted into a ref -/proc/refify_list(list/target_list, list/visited, path_accumulator = "list") +/** + * Intermediate step for preparing lists to be passed into the lua editor tgui. + * Resolves weakrefs, converts some values without a standard textual representation to text, + * and can handle self-referential lists and potential duplicate output keys. + */ +/proc/prepare_lua_editor_list(list/target_list, list/visited) if(!visited) visited = list() var/list/ret = list() - visited[target_list] = path_accumulator + visited[target_list] = ret + var/list/duplicate_keys = list() for(var/i in 1 to target_list.len) var/key = target_list[i] var/new_key = key if(isweakref(key)) var/datum/weakref/ref = key - var/resolved = ref.resolve() - if(resolved) - new_key = "[resolved] [REF(resolved)]" - else - new_key = "null weakref [REF(key)]" - else if(isdatum(key)) - new_key = "[key] [REF(key)]" + new_key = ref.resolve() || "null weakref" else if(key == world) - new_key = "world [REF(world)]" + new_key = world.name + else if(ref(key) == "\[0xe000001\]") + new_key = "global" else if(islist(key)) - if(visited.Find(key)) + if(visited[key]) new_key = visited[key] else - new_key = refify_list(key, visited, path_accumulator + "\[[i]\]") + new_key = prepare_lua_editor_list(key, visited) var/value - if(istext(key) || islist(key) || ispath(key) || isdatum(key) || key == world) + if(!isnull(key) && !isnum(key)) value = target_list[key] if(isweakref(value)) var/datum/weakref/ref = value - var/resolved = ref.resolve() - if(resolved) - value = "[resolved] [REF(resolved)]" - else - value = "null weakref [REF(key)]" - else if(isdatum(value)) - value = "[value] [REF(value)]" - else if(value == world) - value = "world [REF(world)]" + value = ref.resolve() || "null weakref" + if(value == world) + value = "world" + else if(ref(value) == "\[0xe000001\]") + value = "global" else if(islist(value)) - if(visited.Find(value)) + if(visited[value]) value = visited[value] else - value = refify_list(value, visited, path_accumulator + "\[[key]\]") - var/list/to_add = list(new_key) - if(value) - to_add[new_key] = value + value = prepare_lua_editor_list(value, visited) + var/list/to_add = list() + if(!isnull(value)) + var/final_key = new_key + while(duplicate_keys[final_key]) + duplicate_keys[new_key]++ + final_key = "[new_key] ([duplicate_keys[new_key]])" + duplicate_keys[final_key] = 1 + to_add[final_key] = value + else + to_add += list(new_key) ret += to_add if(i < target_list.len) CHECK_TICK @@ -1033,29 +1037,31 @@ /** * Converts a list into a list of assoc lists of the form ("key" = key, "value" = value) * so that list keys that are themselves lists can be fully json-encoded + * and that unique objects with the same string representation do not + * produce duplicate keys that are clobbered by the standard JavaScript JSON.parse function */ -/proc/kvpify_list(list/target_list, depth = INFINITY, list/visited, path_accumulator = "list") +/proc/kvpify_list(list/target_list, depth = INFINITY, list/visited) if(!visited) visited = list() var/list/ret = list() - visited[target_list] = path_accumulator + visited[target_list] = ret for(var/i in 1 to target_list.len) var/key = target_list[i] var/new_key = key if(islist(key) && depth) - if(visited.Find(key)) + if(visited[key]) new_key = visited[key] else - new_key = kvpify_list(key, depth-1, visited, path_accumulator + "\[[i]\]") + new_key = kvpify_list(key, depth-1, visited) var/value - if(istext(key) || islist(key) || ispath(key) || isdatum(key) || key == world) + if(!isnull(key) && !isnum(key)) value = target_list[key] if(islist(value) && depth) - if(visited.Find(value)) + if(visited[value]) value = visited[value] else - value = kvpify_list(value, depth-1, visited, path_accumulator + "\[[key]\]") - if(value) + value = kvpify_list(value, depth-1, visited) + if(!isnull(value)) ret += list(list("key" = new_key, "value" = value)) else ret += list(list("key" = i, "value" = new_key)) @@ -1065,12 +1071,12 @@ /// Compares 2 lists, returns TRUE if they are the same /proc/deep_compare_list(list/list_1, list/list_2) - if(!islist(list_1) || !islist(list_2)) - return FALSE - if(list_1 == list_2) return TRUE + if(!islist(list_1) || !islist(list_2)) + return FALSE + if(list_1.len != list_2.len) return FALSE @@ -1093,11 +1099,11 @@ return TRUE /// Returns a copy of the list where any element that is a datum is converted into a weakref -/proc/weakrefify_list(list/target_list, list/visited, path_accumulator = "list") +/proc/weakrefify_list(list/target_list, list/visited) if(!visited) visited = list() var/list/ret = list() - visited[target_list] = path_accumulator + visited[target_list] = ret for(var/i in 1 to target_list.len) var/key = target_list[i] var/new_key = key @@ -1107,62 +1113,19 @@ if(visited.Find(key)) new_key = visited[key] else - new_key = weakrefify_list(key, visited, path_accumulator + "\[[i]\]") + new_key = weakrefify_list(key, visited) var/value - if(istext(key) || islist(key) || ispath(key) || isdatum(key) || key == world) + if(!isnull(key) && !isnum(key)) value = target_list[key] if(isdatum(value)) value = WEAKREF(value) else if(islist(value)) - if(visited.Find(value)) + if(visited[value]) value = visited[value] else - value = weakrefify_list(value, visited, path_accumulator + "\[[key]\]") - var/list/to_add = list(new_key) - if(value) - to_add[new_key] = value - ret += to_add - if(i < target_list.len) - CHECK_TICK - return ret - -/// Returns a copy of a list where text values (except assoc-keys and string representations of lua-only values) are -/// wrapped in quotes and existing quote marks are escaped, -/// and nulls are replaced with the string "null" -/proc/encode_text_and_nulls(list/target_list, list/visited) - var/static/regex/lua_reference_regex - if(!lua_reference_regex) - lua_reference_regex = regex(@"^((function)|(table)|(thread)|(userdata)): 0x[0-9a-fA-F]+$") - if(!visited) - visited = list() - var/list/ret = list() - visited[target_list] = TRUE - for(var/i in 1 to target_list.len) - var/key = target_list[i] - var/new_key = key - if(istext(key) && !target_list[key] && !lua_reference_regex.Find(key)) - new_key = "\"[replacetext(key, "\"", "\\\"")]\"" - else if(islist(key)) - var/found_index = visited.Find(key) - if(found_index) - new_key = visited[found_index] - else - new_key = encode_text_and_nulls(key, visited) - else if(isnull(key)) - new_key = "null" - var/value - if(istext(key) || islist(key) || ispath(key) || isdatum(key) || key == world) - value = target_list[key] - if(istext(value) && !lua_reference_regex.Find(value)) - value = "\"[replacetext(value, "\"", "\\\"")]\"" - else if(islist(value)) - var/found_index = visited.Find(value) - if(found_index) - value = visited[found_index] - else - value = encode_text_and_nulls(value, visited) + value = weakrefify_list(value, visited) var/list/to_add = list(new_key) - if(value) + if(!isnull(value)) to_add[new_key] = value ret += to_add if(i < target_list.len) @@ -1188,3 +1151,155 @@ if("x" in coords) return locate(coords["x"], coords["y"], coords["z"]) return locate(coords[1], coords[2], coords[3]) + +/** + * Given a list and a list of its variant hints, appends variants that aren't explicitly required by dreamluau, + * but are required by the lua editor tgui. + */ +/proc/add_lua_editor_variants(list/values, list/variants, list/visited, path = "") + if(!islist(visited)) + visited = list() + visited[values] = "\[\]" + if(!islist(values) || !islist(variants)) + return + if(values.len != variants.len) + CRASH("values and variants must be the same length") + for(var/i in 1 to variants.len) + var/pair = variants[i] + var/pair_modified = FALSE + if(isnull(pair)) + pair = list("key", "value") + var/key = values[i] + if(islist(key)) + if(visited[key]) + pair["key"] = list("cycle", visited[key]) + else + var/list/key_variants = pair["key"] + var/new_path = path + "\[[i], \"key\"\]," + visited[key] = new_path + add_lua_editor_variants(key, key_variants, visited, new_path) + visited -= key + pair["key"] = list("list", key_variants) + pair_modified = TRUE + else if(isdatum(key) || key == world || ref(key) == "\[0xe000001\]") + pair["key"] = list("ref", ref(key)) + pair_modified = TRUE + var/value + if(!isnull(key) && !isnum(key)) + value = values[key] + if(islist(value)) + if(visited[value]) + pair["value"] = list("cycle", visited[value]) + else + var/list/value_variants = pair["value"] + var/new_path = path + "\[[i], \"value\"\]," + visited[value] = new_path + add_lua_editor_variants(value, value_variants, visited, new_path) + visited -= value + pair["value"] = list("list", value_variants) + pair_modified = TRUE + else if(isdatum(value) || value == world || ref(value) == "\[0xe000001\]") + pair["value"] = list("ref", ref(value)) + pair_modified = TRUE + if(pair_modified && pair != variants[i]) + variants[i] = pair + if(i < variants.len) + CHECK_TICK + +/proc/add_lua_return_value_variants(list/values, list/variants) + if(!islist(values) || !islist(variants)) + return + if(values.len != variants.len) + CRASH("values and variants must be the same length") + for(var/i in 1 to values.len) + var/value = values[i] + if(islist(value)) + add_lua_editor_variants(value, variants[i]) + else if(isdatum(value) || value == world || ref(value) == "\[0xe000001\]") + variants[i] = list("ref", ref(value)) + +/proc/deep_copy_without_cycles(list/values, list/visited) + if(!islist(visited)) + visited = list() + if(!islist(values)) + return values + var/list/ret = list() + var/cycle_count = 0 + visited[values] = TRUE + for(var/i in 1 to values.len) + var/key = values[i] + var/out_key = key + if(islist(key)) + if(visited[key]) + do + out_key = "\[cyclical reference[cycle_count ? " (i)" : ""]\]" + cycle_count++ + while(values.Find(out_key)) + else + visited[key] = TRUE + out_key = deep_copy_without_cycles(key, visited) + visited -= key + var/value + if(!isnull(key) && !isnum(key)) + value = values[key] + var/out_value = value + if(islist(value)) + if(visited[value]) + out_value = "\[cyclical reference\]" + else + visited[value] = TRUE + out_value = deep_copy_without_cycles(value, visited) + visited -= value + var/list/to_add = list(out_key) + if(!isnull(out_value)) + to_add[out_key] = out_value + ret += to_add + if(i < values.len) + CHECK_TICK + return ret + +/** + * Given a list and a list of its variant hints, removes any list key/values that are represent lua values that could not be directly converted to DM. + */ +/proc/remove_non_dm_variants(list/return_values, list/variants, list/visited) + if(!islist(visited)) + visited = list() + if(!islist(return_values) || !islist(variants) || visited[return_values]) + return + visited[return_values] = TRUE + if(return_values.len != variants.len) + CRASH("return_values and variants must be the same length") + for(var/i in 1 to variants.len) + var/pair = variants[i] + if(!islist(variants)) + continue + var/key = return_values[i] + if(pair["key"]) + if(!islist(pair["key"])) + return_values[i] = null + continue + remove_non_dm_variants(key, pair["key"], visited) + if(pair["value"]) + if(!islist(pair["value"])) + return_values[key] = null + continue + remove_non_dm_variants(return_values[key], pair["value"], visited) + +/proc/compare_lua_logs(list/log_1, list/log_2) + if(log_1 == log_2) + return TRUE + for(var/field in list("status", "name", "message", "chunk")) + if(log_1[field] != log_2[field]) + return FALSE + switch(log_1["status"]) + if("finished", "yield") + return deep_compare_list( + recursive_list_resolve(log_1["return_values"]), + recursive_list_resolve(log_2["return_values"]) + ) && deep_compare_list(log_1["variants"], log_2["variants"]) + if("runtime") + return log_1["file"] == log_2["file"]\ + && log_1["line"] == log_2["line"]\ + && deep_compare_list(log_1["stack"], log_2["stack"]) + else + return TRUE diff --git a/code/__HELPERS/atmospherics.dm b/code/__HELPERS/atmospherics.dm index 2a59cf60b403f..9ebafd5fbb528 100644 --- a/code/__HELPERS/atmospherics.dm +++ b/code/__HELPERS/atmospherics.dm @@ -105,13 +105,13 @@ GLOBAL_LIST_EMPTY(gas_handbook) factor_info["factor_name"] = factor factor_info["factor_type"] = "misc" if(factor == "Temperature" || factor == "Pressure") - factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occuring." + factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occurring." else if(factor == "Energy") factor_info["tooltip"] = "Energy released by the reaction, may or may not result in linear temperature change depending on a slew of other factors." else if(factor == "Radiation") factor_info["tooltip"] = "This reaction emits dangerous radiation! Take precautions." else if (factor == "Location") - factor_info["tooltip"] = "This reaction has special behaviour when occuring in specific locations." + factor_info["tooltip"] = "This reaction has special behaviour when occurring in specific locations." else if(factor == "Hot Ice") factor_info["tooltip"] = "Hot ice are solidified stacks of plasma. Ignition of one will result in a raging fire." reaction_info["factors"] += list(factor_info) @@ -138,13 +138,13 @@ GLOBAL_LIST_EMPTY(gas_handbook) factor_info["factor_name"] = factor factor_info["factor_type"] = "misc" if(factor == "Temperature" || factor == "Pressure") - factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occuring." + factor_info["tooltip"] = "Reaction is influenced by the [LOWER_TEXT(factor)] of the place where the reaction is occurring." else if(factor == "Energy") factor_info["tooltip"] = "Energy released by the reaction, may or may not result in linear temperature change depending on a slew of other factors." else if(factor == "Radiation") factor_info["tooltip"] = "This reaction emits dangerous radiation! Take precautions." else if (factor == "Location") - factor_info["tooltip"] = "This reaction has special behaviour when occuring in specific locations." + factor_info["tooltip"] = "This reaction has special behaviour when occurring in specific locations." reaction_info["factors"] += list(factor_info) GLOB.reaction_handbook += list(reaction_info) qdel(reaction) diff --git a/code/__HELPERS/atoms.dm b/code/__HELPERS/atoms.dm index 7106ec81be1ba..d54b29b3f4ac9 100644 --- a/code/__HELPERS/atoms.dm +++ b/code/__HELPERS/atoms.dm @@ -63,6 +63,8 @@ var/turf/target_turf = get_turf(target) if(get_dist(source, target) > length) return FALSE + if(current == target_turf) + return TRUE var/steps = 1 if(current == target_turf)//they are on the same turf, source can see the target return TRUE @@ -83,9 +85,9 @@ return get_dir(start, end) & (rand() * (dx+dy) < dy ? 3 : 12) /** - * Finds the distance between two atoms, in pixels - * centered = FALSE counts from turf edge to edge - * centered = TRUE counts from turf center to turf center + * Finds the distance between two atoms, in pixels \ + * centered = FALSE counts from turf edge to edge \ + * centered = TRUE counts from turf center to turf center \ * of course mathematically this is just adding world.icon_size on again **/ /proc/get_pixel_distance(atom/start, atom/end, centered = TRUE) @@ -93,7 +95,7 @@ return 0 . = bounds_dist(start, end) + sqrt((((start.pixel_x + end.pixel_x) ** 2) + ((start.pixel_y + end.pixel_y) ** 2))) if(centered) - . += world.icon_size + . += ICON_SIZE_ALL /** * Check if there is already a wall item on the turf loc @@ -334,6 +336,6 @@ rough example of the "cone" made by the 3 dirs checked var/icon_width = icon_dimensions["width"] var/icon_height = icon_dimensions["height"] return list( - "x" = icon_width > world.icon_size && pixel_x != 0 ? (icon_width - world.icon_size) * 0.5 : 0, - "y" = icon_height > world.icon_size && pixel_y != 0 ? (icon_height - world.icon_size) * 0.5 : 0, + "x" = icon_width > ICON_SIZE_X && pixel_x != 0 ? (icon_width - ICON_SIZE_X) * 0.5 : 0, + "y" = icon_height > ICON_SIZE_Y && pixel_y != 0 ? (icon_height - ICON_SIZE_Y) * 0.5 : 0, ) diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index f9957f4c7393e..76651964e24e0 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -195,3 +195,20 @@ /proc/cmp_deathmatch_mods(datum/deathmatch_modifier/a, datum/deathmatch_modifier/b) return sorttext(b.name, a.name) + +/** + * Orders fish types following this order (freshwater -> saltwater -> anadromous -> sulphuric water -> any water -> air) + * If both share the same required fluid type, they'll be ordered by name instead. + */ +/proc/cmp_fish_fluid(obj/item/fish/a, obj/item/fish/b) + var/static/list/fluids_priority = list( + AQUARIUM_FLUID_FRESHWATER, + AQUARIUM_FLUID_SALTWATER, + AQUARIUM_FLUID_ANADROMOUS, + AQUARIUM_FLUID_SULPHWATEVER, + AQUARIUM_FLUID_ANY_WATER, + AQUARIUM_FLUID_AIR, + ) + var/position_a = fluids_priority.Find(initial(a.required_fluid_type)) + var/position_b = fluids_priority.Find(initial(b.required_fluid_type)) + return cmp_numeric_asc(position_a, position_b) || cmp_text_asc(initial(b.name), initial(a.name)) diff --git a/code/__HELPERS/construction.dm b/code/__HELPERS/construction.dm index f7b0ece13f894..166a009f06661 100644 --- a/code/__HELPERS/construction.dm +++ b/code/__HELPERS/construction.dm @@ -61,7 +61,7 @@ . = new target.type(target.drop_location(), amount, FALSE, target.mats_per_unit) /** - * divides a list of materials uniformly among all contents of the target_object reccursively + * divides a list of materials uniformly among all contents of the target_object recursively * Used to set materials of printed items with their design cost by taking into consideration their already existing materials * e.g. if 12 iron is to be divided uniformly among 2 objects A, B who's current iron contents are 3 & 7 * Then first we normalize those values i.e. find their weights to decide who gets an higher share of iron @@ -81,7 +81,7 @@ target_object.set_custom_materials(custom_materials, multiplier) return - //Step 1: Get reccursive contents of all objects, only filter obj cause that what's material container accepts + //Step 1: Get recursive contents of all objects, only filter obj cause that what's material container accepts var/list/reccursive_contents = target_object.get_all_contents_type(/obj/item) //Step 2: find the sum of each material type per object and record their amounts into an 2D list diff --git a/code/__HELPERS/dynamic_human_icon_gen.dm b/code/__HELPERS/dynamic_human_icon_gen.dm index eb6d53517df00..48e34c481ca26 100644 --- a/code/__HELPERS/dynamic_human_icon_gen.dm +++ b/code/__HELPERS/dynamic_human_icon_gen.dm @@ -58,6 +58,7 @@ GLOBAL_LIST_EMPTY(dynamic_human_appearances) /proc/set_dynamic_human_appearance(list/arguments) var/atom/target = arguments[1] //1st argument is the target var/dynamic_appearance = get_dynamic_human_appearance(arglist(arguments.Copy(2))) //the rest of the arguments starting from 2 matter to the proc - target.icon = 'icons/blanks/32x32.dmi' - target.icon_state = "nothing" + target.icon = 'icons/mob/human/human.dmi' + target.icon_state = "" + target.appearance_flags |= KEEP_TOGETHER target.copy_overlays(dynamic_appearance, cut_old = TRUE) diff --git a/code/__HELPERS/filters.dm b/code/__HELPERS/filters.dm index cd44409ddb239..14233a2807636 100644 --- a/code/__HELPERS/filters.dm +++ b/code/__HELPERS/filters.dm @@ -23,7 +23,7 @@ GLOBAL_LIST_INIT(master_filter_info, list( ) ), // Not implemented, but if this isn't uncommented some windows will just error - // Needs either a proper matrix editor, or just a hook to our existing one + // Needs either a proper matrix editor, or just a hook to our existing one // Issue is filterrific assumes variables will have the same value type if they share the same name, which this violates // Gotta refactor this sometime "color" = list( @@ -169,7 +169,7 @@ GLOBAL_LIST_INIT(master_filter_info, list( if(!isnull(space)) .["space"] = space -/proc/displacement_map_filter(icon, render_source, x, y, size = 32) +/proc/displacement_map_filter(icon, render_source, x, y, size = ICON_SIZE_ALL) . = list("type" = "displace") if(!isnull(icon)) .["icon"] = icon diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index ce48e593980b5..3eb89831957b8 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -181,7 +181,7 @@ //First we spawn a dude. var/mob/living/carbon/human/new_character = new//The mob being spawned. - SSjob.SendToLateJoin(new_character) + SSjob.send_to_late_join(new_character) ghost_player.client.prefs.safe_transfer_prefs_to(new_character) new_character.dna.update_dna_identity() @@ -235,7 +235,7 @@ if(!SSticker.IsRoundInProgress() || QDELETED(character)) return var/area/player_area = get_area(character) - deadchat_broadcast(" has arrived at the station at [player_area.name].", "[character.real_name] ([rank])", follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE) + deadchat_broadcast(span_game(" has arrived at the station at [span_name(player_area.name)]."), span_game("[span_name(character.real_name)] ([rank])"), follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE) if(!character.mind) return if(!GLOB.announcement_systems.len) @@ -243,8 +243,16 @@ if(!(character.mind.assigned_role.job_flags & JOB_ANNOUNCE_ARRIVAL)) return - var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) - announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common + var/obj/machinery/announcement_system/announcer + var/list/available_machines = list() + for(var/obj/machinery/announcement_system/announce as anything in GLOB.announcement_systems) + if(announce.arrival_toggle) + available_machines += announce + break + if(!length(available_machines)) + return + announcer = pick(available_machines) + announcer.announce(AUTO_ANNOUNCE_ARRIVAL, character.real_name, rank, list()) //make the list empty to make it announce it in common ///Check if the turf pressure allows specialized equipment to work /proc/lavaland_equipment_pressure_check(turf/turf_to_check) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 461adc9bc0a71..e9973e6f67171 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -1,3 +1,7 @@ +////////////////////////// +/////Initial Building///// +////////////////////////// + /// Inits GLOB.surgeries /proc/init_surgeries() var/surgeries = list() diff --git a/code/__HELPERS/hallucinations.dm b/code/__HELPERS/hallucinations.dm index edd65ee926abf..d3d4a2630ed05 100644 --- a/code/__HELPERS/hallucinations.dm +++ b/code/__HELPERS/hallucinations.dm @@ -86,6 +86,30 @@ GLOBAL_LIST_EMPTY(all_ongoing_hallucinations) if(length(optional_messages)) to_chat(nearby_living, pick(optional_messages)) +/** + * Emits a hallucinating pulse around the passed atom. + * Affects everyone in the passed radius except for those with TRAIT_MADNESS_IMMUNE. This affects blind players. + * + * center - required, the center of the pulse + * radius - the radius around that the pulse reaches + * hallucination_duration - how much hallucination is added by the pulse. reduced based on distance to the center. + * hallucination_max_duration - a cap on how much hallucination can be added + * optional_messages - optional list of messages passed. Those affected by pulses will be given one of the messages in said list. + */ +/proc/hallucination_pulse(atom/center, radius = 7, hallucination_duration = 50 SECONDS, hallucination_max_duration, list/optional_messages) + for(var/mob/living/nearby_living in range(center, radius)) + if(HAS_MIND_TRAIT(nearby_living, TRAIT_MADNESS_IMMUNE)) + continue + + if(nearby_living.mob_biotypes & NO_HALLUCINATION_BIOTYPES) + continue + + // Everyone else gets hallucinations. + var/dist = sqrt(1 / max(1, get_dist(nearby_living, center))) + nearby_living.adjust_hallucinations_up_to(hallucination_duration * dist, hallucination_max_duration) + if(length(optional_messages)) + to_chat(nearby_living, pick(optional_messages)) + /// Global weighted list of all hallucinations that can show up randomly. GLOBAL_LIST_INIT(random_hallucination_weighted_list, generate_hallucination_weighted_list()) @@ -226,7 +250,7 @@ ADMIN_VERB(debug_hallucination_weighted_list_per_type, R_DEBUG, "Show Hallucinat if(!custom_icon_state) return - var/custom_name = tgui_input_text(user, "What name should it show up as? (Can be empty)", "Custom Delusion: Name") + var/custom_name = tgui_input_text(user, "What name should it show up as? (Can be empty)", "Custom Delusion: Name", max_length = MAX_NAME_LEN) delusion_args += list( custom_icon_file = custom_icon_file, diff --git a/code/__HELPERS/heap.dm b/code/__HELPERS/heap.dm index eeabfa6a20b4e..ede4c39f95040 100644 --- a/code/__HELPERS/heap.dm +++ b/code/__HELPERS/heap.dm @@ -26,7 +26,7 @@ swim(length(L)) //removes and returns the first element of the heap -//(i.e the max or the min dependant on the comparison function) +//(i.e the max or the min dependent on the comparison function) /datum/heap/proc/pop() if(!length(L)) return 0 diff --git a/code/__HELPERS/hearted.dm b/code/__HELPERS/hearted.dm index adae298516ec6..d8f7832cbc06b 100644 --- a/code/__HELPERS/hearted.dm +++ b/code/__HELPERS/hearted.dm @@ -45,11 +45,11 @@ var/heart_nominee switch(attempt) if(1) - heart_nominee = tgui_input_text(src, "What was their name? Just a first or last name may be enough.", "<3?") + heart_nominee = tgui_input_text(src, "What was their name? Just a first or last name may be enough.", "<3?", max_length = MAX_NAME_LEN) if(2) - heart_nominee = tgui_input_text(src, "Try again, what was their name? Just a first or last name may be enough.", "<3?") + heart_nominee = tgui_input_text(src, "Try again, what was their name? Just a first or last name may be enough.", "<3?", max_length = MAX_NAME_LEN) if(3) - heart_nominee = tgui_input_text(src, "One more try, what was their name? Just a first or last name may be enough.", "<3?") + heart_nominee = tgui_input_text(src, "One more try, what was their name? Just a first or last name may be enough.", "<3?", max_length = MAX_NAME_LEN) if(!heart_nominee) return diff --git a/code/__HELPERS/honkerblast.dm b/code/__HELPERS/honkerblast.dm index c0712f420f2d7..f49a5ca4aca29 100644 --- a/code/__HELPERS/honkerblast.dm +++ b/code/__HELPERS/honkerblast.dm @@ -5,7 +5,7 @@ var/list/properly_honked = list() var/list/severely_honked = list() - playsound(origin_turf, 'sound/items/airhorn.ogg', 100, TRUE) + playsound(origin_turf, 'sound/items/airhorn/airhorn.ogg', 100, TRUE) for(var/mob/living/carbon/victim as anything in hearers(max(light_range, medium_range, heavy_range), origin_turf)) if(!victim.can_hear()) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 132a6b26eb541..d28f964df8019 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -272,7 +272,7 @@ world Blend(mask_icon, ICON_ADD) /// Converts an rgb color into a list storing hsva -/// Exists because it's useful to have a guarenteed alpha value +/// Exists because it's useful to have a guaranteed alpha value /proc/rgb2hsv(rgb) var/list/hsv = rgb2num(rgb, COLORSPACE_HSV) if(length(hsv) < 4) @@ -402,7 +402,7 @@ world /// appearance system (overlays/underlays, etc.) is not available. /// /// Only the first argument is required. -/proc/getFlatIcon(image/appearance, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE) +/proc/getFlatIcon(image/appearance, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE, parentcolor) // Loop through the underlays, then overlays, sorting them into the layers list #define PROCESS_OVERLAYS_OR_UNDERLAYS(flat, process, base_layer) \ for (var/i in 1 to process.len) { \ @@ -466,25 +466,24 @@ world var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have - //Try to remove/optimize this section ASAP, CPU hog. - //Determines if there's directionals. - if(render_icon && curdir != SOUTH) - if ( - !length(icon_states(icon(curicon, curstate, NORTH))) \ - && !length(icon_states(icon(curicon, curstate, EAST))) \ - && !length(icon_states(icon(curicon, curstate, WEST))) \ - ) - base_icon_dir = SOUTH + if(render_icon) + //Try to remove/optimize this section if you can, it's a CPU hog. + //Determines if there're directionals. + if (curdir != SOUTH) + // icon states either have 1, 4 or 8 dirs. We only have to check + // one of NORTH, EAST or WEST to know that this isn't a 1-dir icon_state since they just have SOUTH. + if(!length(icon_states(icon(curicon, curstate, NORTH)))) + base_icon_dir = SOUTH + + var/list/icon_dimensions = get_icon_dimensions(curicon) + var/icon_width = icon_dimensions["width"] + var/icon_height = icon_dimensions["height"] + if(icon_width != 32 || icon_height != 32) + flat.Scale(icon_width, icon_height) if(!base_icon_dir) base_icon_dir = curdir - // Expand our canvas to fit if we're too big - if(render_icon) - var/icon/active_icon = icon(curicon) - if(active_icon.Width() != 32 || active_icon.Height() != 32) - flat.Scale(active_icon.Width(), active_icon.Height()) - var/curblend = appearance.blend_mode || defblend if(appearance.overlays.len || appearance.underlays.len) @@ -514,6 +513,20 @@ world var/addY1 = 0 var/addY2 = 0 + if(appearance.color) + if(islist(appearance.color)) + flat.MapColors(arglist(appearance.color)) + else + flat.Blend(appearance.color, ICON_MULTIPLY) + + if(parentcolor && !(appearance.appearance_flags & RESET_COLOR)) + if(islist(parentcolor)) + flat.MapColors(arglist(parentcolor)) + else + flat.Blend(parentcolor, ICON_MULTIPLY) + + var/next_parentcolor = appearance.color || parentcolor + for(var/image/layer_image as anything in layers) if(layer_image.alpha == 0) continue @@ -521,8 +534,14 @@ world if(layer_image == copy) // 'layer_image' is an /image based on the object being flattened. curblend = BLEND_OVERLAY add = icon(layer_image.icon, layer_image.icon_state, base_icon_dir) + if(appearance.color) + if(islist(appearance.color)) + add.MapColors(arglist(appearance.color)) + else + add.Blend(appearance.color, ICON_MULTIPLY) else // 'I' is an appearance object. - add = getFlatIcon(image(layer_image), curdir, curicon, curstate, curblend, FALSE, no_anim) + add = getFlatIcon(image(layer_image), curdir, curicon, curstate, curblend, FALSE, no_anim, next_parentcolor) + if(!add) continue @@ -554,11 +573,6 @@ world // Blend the overlay into the flattened icon flat.Blend(add, blendMode2iconMode(curblend), layer_image.pixel_x + 2 - flatX1, layer_image.pixel_y + 2 - flatY1) - if(appearance.color) - if(islist(appearance.color)) - flat.MapColors(arglist(appearance.color)) - else - flat.Blend(appearance.color, ICON_MULTIPLY) if(appearance.alpha < 255) flat.Blend(rgb(255, 255, 255, appearance.alpha), ICON_MULTIPLY) @@ -815,11 +829,11 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) /// generates a filename for a given asset. /// like generate_asset_name(), except returns the rsc reference and the rsc file hash as well as the asset name (sans extension) -/// used so that certain asset files dont have to be hashed twice +/// used so that certain asset files don't have to be hashed twice /proc/generate_and_hash_rsc_file(file, dmi_file_path) var/rsc_ref = fcopy_rsc(file) var/hash - //if we have a valid dmi file path we can trust md5'ing the rsc file because we know it doesnt have the bug described in http://www.byond.com/forum/post/2611357 + //if we have a valid dmi file path we can trust md5'ing the rsc file because we know it doesn't have the bug described in http://www.byond.com/forum/post/2611357 if(dmi_file_path) hash = md5(rsc_ref) else //otherwise, we need to do the expensive fcopy() workaround @@ -845,7 +859,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) fdel(savefile_path) return new /savefile(savefile_path) catch(var/exception/error) - // if we failed to create a dummy once, try again; maybe someone slept somewhere they shouldnt have + // if we failed to create a dummy once, try again; maybe someone slept somewhere they shouldn't have if(from_failure) // this *is* the retry, something fucked up CRASH("get_dummy_savefile failed to create a dummy savefile: '[error]'") return get_dummy_savefile(from_failure = TRUE) @@ -890,18 +904,18 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) var/atom/atom_icon = icon icon = atom_icon.icon //atom icons compiled in from 'icons/path/to/dmi_file.dmi' are weird and not really icon objects that you generate with icon(). - //if theyre unchanged dmi's then they're stringifiable to "icons/path/to/dmi_file.dmi" + //if they're unchanged dmi's then they're stringifiable to "icons/path/to/dmi_file.dmi" if(isicon(icon) && isfile(icon)) - //icons compiled in from 'icons/path/to/dmi_file.dmi' at compile time are weird and arent really /icon objects, - ///but they pass both isicon() and isfile() checks. theyre the easiest case since stringifying them gives us the path we want + //icons compiled in from 'icons/path/to/dmi_file.dmi' at compile time are weird and aren't really /icon objects, + ///but they pass both isicon() and isfile() checks. they're the easiest case since stringifying them gives us the path we want var/icon_ref = text_ref(icon) var/locate_icon_string = "[locate(icon_ref)]" icon_path = locate_icon_string else if(isicon(icon) && "[icon]" == "/icon") - // icon objects generated from icon() at runtime are icons, but they ARENT files themselves, they represent icon files. + // icon objects generated from icon() at runtime are icons, but they AREN'T files themselves, they represent icon files. // if the files they represent are compile time dmi files in the rsc, then // the rsc reference returned by fcopy_rsc() will be stringifiable to "icons/path/to/dmi_file.dmi" var/rsc_ref = fcopy_rsc(icon) @@ -960,7 +974,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) if(!length(targets)) return - //check if the given object is associated with a dmi file in the icons folder. if it is then we dont need to do a lot of work + //check if the given object is associated with a dmi file in the icons folder. if it is then we don't need to do a lot of work //for asset generation to get around byond limitations var/icon_path = get_icon_dmi_path(thing) @@ -1004,7 +1018,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) var/list/name_and_ref = generate_and_hash_rsc_file(icon2collapse, icon_path)//pretend that tuples exist - var/rsc_ref = name_and_ref[1] //weird object thats not even readable to the debugger, represents a reference to the icons rsc entry + var/rsc_ref = name_and_ref[1] //weird object that's not even readable to the debugger, represents a reference to the icons rsc entry var/file_hash = name_and_ref[2] key = "[name_and_ref[3]].png" @@ -1024,7 +1038,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) var/icon/target_icon = target var/icon_base64 = icon2base64(target_icon) - if (target_icon.Height() > world.icon_size || target_icon.Width() > world.icon_size) + if (target_icon.Height() > ICON_SIZE_Y || target_icon.Width() > ICON_SIZE_X) var/icon_md5 = md5(icon_base64) icon_base64 = bicon_cache[icon_md5] if (!icon_base64) // Doesn't exist yet, make it. @@ -1078,14 +1092,14 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) var/top_part_filter = filter(type="alpha",icon=icon('icons/effects/alphacolors.dmi',"white"),y=0) filters += top_part_filter var/filter_index = length(filters) - animate(filters[filter_index],y=-32,time=time) + animate(filters[filter_index],y=-ICON_SIZE_Y,time=time) //Appearing part var/obj/effect/overlay/appearing_part = new appearing_part.appearance = result_appearance appearing_part.appearance_flags |= KEEP_TOGETHER | KEEP_APART appearing_part.vis_flags = VIS_INHERIT_ID appearing_part.filters = filter(type="alpha",icon=icon('icons/effects/alphacolors.dmi',"white"),y=0,flags=MASK_INVERSE) - animate(appearing_part.filters[1],y=-32,time=time) + animate(appearing_part.filters[1],y=-ICON_SIZE_Y,time=time) transformation_objects += appearing_part //Transform effect thing if(transform_appearance) @@ -1132,19 +1146,19 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) if(!x_dimension || !y_dimension) return - if((x_dimension == world.icon_size) && (y_dimension == world.icon_size)) + if((x_dimension == ICON_SIZE_X) && (y_dimension == ICON_SIZE_Y)) return image_to_center //Offset the image so that its bottom left corner is shifted this many pixels //This makes it infinitely easier to draw larger inhands/images larger than world.iconsize //but still use them in game - var/x_offset = -((x_dimension / world.icon_size) - 1) * (world.icon_size * 0.5) - var/y_offset = -((y_dimension / world.icon_size) - 1) * (world.icon_size * 0.5) + var/x_offset = -((x_dimension / ICON_SIZE_X) - 1) * (ICON_SIZE_X * 0.5) + var/y_offset = -((y_dimension / ICON_SIZE_Y) - 1) * (ICON_SIZE_Y * 0.5) - //Correct values under world.icon_size - if(x_dimension < world.icon_size) + //Correct values under icon_size + if(x_dimension < ICON_SIZE_X) x_offset *= -1 - if(y_dimension < world.icon_size) + if(y_dimension < ICON_SIZE_Y) y_offset *= -1 image_to_center.pixel_x = x_offset @@ -1202,7 +1216,7 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) */ /proc/get_size_in_tiles(obj/target) var/icon/size_check = icon(target.icon, target.icon_state) - var/size = size_check.Width() / world.icon_size + var/size = size_check.Width() / ICON_SIZE_X return size @@ -1215,11 +1229,11 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) var/size = get_size_in_tiles(src) if(dir in list(NORTH, SOUTH)) - bound_width = size * world.icon_size - bound_height = world.icon_size + bound_width = size * ICON_SIZE_X + bound_height = ICON_SIZE_Y else - bound_width = world.icon_size - bound_height = size * world.icon_size + bound_width = ICON_SIZE_X + bound_height = size * ICON_SIZE_Y /// Returns a list containing the width and height of an icon file /proc/get_icon_dimensions(icon_path) @@ -1247,15 +1261,15 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) 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 > ICON_SIZE_X) + alert_overlay.pixel_x = -(ICON_SIZE_X / 2) * ((width - ICON_SIZE_X) / ICON_SIZE_X) + if(height > ICON_SIZE_Y) + alert_overlay.pixel_y = -(ICON_SIZE_Y / 2) * ((height - ICON_SIZE_Y) / ICON_SIZE_Y) + if(width > ICON_SIZE_X || height > ICON_SIZE_Y) if(width >= height) - scale = world.icon_size / width + scale = ICON_SIZE_X / width else - scale = world.icon_size / height + scale = ICON_SIZE_Y / 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 096655ad748bd..ca2cd3c5db3a3 100644 --- a/code/__HELPERS/levels.dm +++ b/code/__HELPERS/levels.dm @@ -56,5 +56,5 @@ // Syndicate 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. + // Finally, more specific checks are ran for edge cases, such as lazily loaded map templates or away missions. Not perfect. return istype(what_turf) && what_turf.planetary_atmos && what_turf.has_gravity() diff --git a/code/__HELPERS/logging/mob.dm b/code/__HELPERS/logging/mob.dm index 6acdeab3ea95d..403fa3434233b 100644 --- a/code/__HELPERS/logging/mob.dm +++ b/code/__HELPERS/logging/mob.dm @@ -1,5 +1,5 @@ /** - * Logs a mesage to the mob_tags log, including the mobs tag + * Logs a message to the mob_tags log, including the mobs tag * Arguments: * * text - text to log. */ diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index 5a55fd46fd296..7e6db6fb0209b 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -2,8 +2,8 @@ /proc/get_angle(atom/movable/start, atom/movable/end)//For beams. if(!start || !end) return 0 - var/dy =(32 * end.y + end.pixel_y) - (32 * start.y + start.pixel_y) - var/dx =(32 * end.x + end.pixel_x) - (32 * start.x + start.pixel_x) + var/dy =(ICON_SIZE_Y * end.y + end.pixel_y) - (ICON_SIZE_Y * start.y + start.pixel_y) + var/dx =(ICON_SIZE_X * end.x + end.pixel_x) - (ICON_SIZE_X * start.x + start.pixel_x) return delta_to_angle(dx, dy) /// Calculate the angle produced by a pair of x and y deltas @@ -18,8 +18,8 @@ /// Angle between two arbitrary points and horizontal line same as [/proc/get_angle] /proc/get_angle_raw(start_x, start_y, start_pixel_x, start_pixel_y, end_x, end_y, end_pixel_x, end_pixel_y) - var/dy = (32 * end_y + end_pixel_y) - (32 * start_y + start_pixel_y) - var/dx = (32 * end_x + end_pixel_x) - (32 * start_x + start_pixel_x) + var/dy = (ICON_SIZE_Y * end_y + end_pixel_y) - (ICON_SIZE_Y * start_y + start_pixel_y) + var/dx = (ICON_SIZE_X * end_x + end_pixel_x) - (ICON_SIZE_X * start_x + start_pixel_x) if(!dy) return (dx >= 0) ? 90 : 270 . = arctan(dx/dy) @@ -241,3 +241,7 @@ /// 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) + +/// 180s an angle +/proc/reverse_angle(angle) + return (angle + 180) % 360 diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 95af398d4162d..88c89f39210b0 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -258,7 +258,7 @@ GLOBAL_LIST_INIT(skin_tone_names, list( var/atom/target_loc = target?.loc var/drifting = FALSE - if(GLOB.move_manager.processing_on(user, SSspacedrift)) + if(GLOB.move_manager.processing_on(user, SSnewtonian_movement)) drifting = TRUE var/holding = user.get_active_held_item() @@ -287,7 +287,7 @@ GLOBAL_LIST_INIT(skin_tone_names, list( if(!QDELETED(progbar)) progbar.update(world.time - starttime) - if(drifting && !GLOB.move_manager.processing_on(user, SSspacedrift)) + if(drifting && !GLOB.move_manager.processing_on(user, SSnewtonian_movement)) drifting = FALSE user_loc = user.loc @@ -592,8 +592,8 @@ GLOBAL_LIST_INIT(skin_tone_names, list( * When passed the difference between two temperatures returns the amount of change to temperature to apply. * The change rate should be kept at a low value tween 0.16 and 0.02 for optimal results. * vars: - * * temp_diff (required) The differance between two temperatures - * * change_rate (optional)(Default: 0.06) The rate of range multiplyer + * * temp_diff (required) The difference between two temperatures + * * change_rate (optional)(Default: 0.06) The rate of range multiplier */ /proc/get_temp_change_amount(temp_diff, change_rate = 0.06) if(temp_diff < 0) @@ -746,6 +746,8 @@ GLOBAL_LIST_INIT(skin_tone_names, list( slot_strings += "dextrous storage" if(slot_flags & ITEM_SLOT_BACKPACK) slot_strings += "backpack" + if(slot_flags & ITEM_SLOT_BELTPACK) + slot_strings += "belt" // ? return slot_strings ///Returns the direction that the initiator and the target are facing diff --git a/code/__HELPERS/mouse_control.dm b/code/__HELPERS/mouse_control.dm index 0c99e53e7a0cd..14588b41cb701 100644 --- a/code/__HELPERS/mouse_control.dm +++ b/code/__HELPERS/mouse_control.dm @@ -11,8 +11,8 @@ var/x = (text2num(screen_loc_X[1]) * 32 + text2num(screen_loc_X[2]) - 32) var/y = (text2num(screen_loc_Y[1]) * 32 + text2num(screen_loc_Y[2]) - 32) var/list/screenview = getviewsize(client.view) - var/screenviewX = screenview[1] * world.icon_size - var/screenviewY = screenview[2] * world.icon_size + var/screenviewX = screenview[1] * ICON_SIZE_X + var/screenviewY = screenview[2] * ICON_SIZE_Y var/ox = round(screenviewX/2) - client.pixel_x //"origin" x var/oy = round(screenviewY/2) - client.pixel_y //"origin" y var/angle = SIMPLIFY_DEGREES(ATAN2(y - oy, x - ox)) diff --git a/code/__HELPERS/movement.dm b/code/__HELPERS/movement.dm new file mode 100644 index 0000000000000..e820b3dfff125 --- /dev/null +++ b/code/__HELPERS/movement.dm @@ -0,0 +1,2 @@ +/// Converts w_class into newtons from throwing it, in (0.6 ~ 2.2) range +#define WEIGHT_TO_NEWTONS(w_class, arguments...) 0.2 NEWTONS + w_class * 0.4 NEWTONS diff --git a/code/__HELPERS/paths/path.dm b/code/__HELPERS/paths/path.dm index 189120b76c3bc..9530a5452351a 100644 --- a/code/__HELPERS/paths/path.dm +++ b/code/__HELPERS/paths/path.dm @@ -16,7 +16,7 @@ */ /proc/get_path_to(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, access=list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE, diagonal_handling=DIAGONAL_REMOVE_CLUNKY) var/list/hand_around = list() - // We're guarenteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list + // We're guaranteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around)) if(!SSpathfinder.pathfind(caller, end, max_distance, mintargetdist, access, simulated_only, exclude, skip_first, diagonal_handling, await)) return list() @@ -49,7 +49,7 @@ */ /proc/get_swarm_path_to(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE) var/list/hand_around = list() - // We're guarenteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list + // We're guaranteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around)) if(!SSpathfinder.swarmed_pathfind(caller, end, max_distance, mintargetdist, age, access, simulated_only, exclude, skip_first, await)) return list() @@ -62,7 +62,7 @@ /proc/get_sssp(atom/movable/caller, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude) var/list/hand_around = list() - // We're guarenteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list + // We're guaranteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around)) if(!SSpathfinder.build_map(caller, get_turf(caller), max_distance, access, simulated_only, exclude, await)) return null @@ -335,7 +335,7 @@ src.has_gravity = construct_from.has_gravity() if(ismob(construct_from)) var/mob/living/mob_construct = construct_from - src.incapacitated = mob_construct.incapacitated() + src.incapacitated = mob_construct.incapacitated if(mob_construct.buckled) src.buckled_info = new(mob_construct.buckled, access, no_id, call_depth + 1) if(isobserver(construct_from)) diff --git a/code/__HELPERS/paths/sssp.dm b/code/__HELPERS/paths/sssp.dm index f735c66469487..21e520ea0164c 100644 --- a/code/__HELPERS/paths/sssp.dm +++ b/code/__HELPERS/paths/sssp.dm @@ -130,7 +130,7 @@ /// Returns a new /datum/pathfind/sssp based off our settings /// Will have an invalid source mob, no max distance, and no ending callback /datum/path_map/proc/settings_to_path() - // Default creation to not set any vars incidentially + // Default creation to not set any vars incidentally var/static/mob/jeremy = new() var/datum/pathfind/sssp/based_on_what = new() based_on_what.setup(pass_info, null, INFINITY, pass_space, avoid) @@ -155,7 +155,7 @@ working_index -= 1 var/list/hand_around = list() - // We're guarenteed that hand_around will be the first list in pathfinding_finished's argset because of how callback handles the arguments list + // We're guaranteed that hand_around will be the first list in pathfinding_finished's argset because of how callback handles the arguments list var/datum/callback/await = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around) // We're gonna build a pathfind datum from our settings and set it running diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index b9964b9be9340..7375509a3631c 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -142,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_skyrat/modules/alerts/sound/alerts/alert1.ogg' : 'sound/announcer/notice/notice2.ogg') // SKYRAT EDIT CHANGE - CUSTOM ANNOUNCEMENTS - Original: 'sound/announcer/notice/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. @@ -189,7 +189,7 @@ // SKYRAT EDIT CHANGE BEGIN - CUSTOM ANNOUNCEMENTS /* Original: - var/sound_to_play = !isnull(sound_override) ? sound_override : 'sound/misc/notice2.ogg' + var/sound_to_play = !isnull(sound_override) ? sound_override : 'sound/announcer/notice/notice2.ogg' for(var/mob/target in players) if(isnewplayer(target) || !target.can_hear()) @@ -211,7 +211,7 @@ if(!isnull(sound_override)) sound_override = sound(sound_override) - var/sound_to_play = !isnull(sound_override) ? sound_override : 'sound/misc/notice2.ogg' + var/sound_to_play = !isnull(sound_override) ? sound_override : 'sound/announcer/notice/notice2.ogg' alert_sound_to_playing(sound_to_play, players = players) for(var/mob/target in players) diff --git a/code/__HELPERS/reagents.dm b/code/__HELPERS/reagents.dm index cb87e21cefa54..51ff7df475ee1 100644 --- a/code/__HELPERS/reagents.dm +++ b/code/__HELPERS/reagents.dm @@ -180,14 +180,23 @@ else return null -///Returns a random reagent object minus blacklisted reagents -/proc/get_random_reagent_id() - var/static/list/random_reagents = list() - if(!random_reagents.len) +///Returns a random reagent object, with the option to blacklist reagents. +/proc/get_random_reagent_id(list/blacklist) + var/static/list/reagent_static_list = list() //This is static, and will be used by default if a blacklist is not passed. + var/list/reagent_list_to_process + if(blacklist) //If we do have a blacklist, we recompile a new list with the excluded reagents not present and pick from there. + reagent_list_to_process = list() + else + reagent_list_to_process = reagent_static_list + + if(!reagent_list_to_process.len) for(var/datum/reagent/reagent_path as anything in subtypesof(/datum/reagent)) + if(is_path_in_list(reagent_path, blacklist)) + continue if(initial(reagent_path.chemical_flags) & REAGENT_CAN_BE_SYNTHESIZED) - random_reagents += reagent_path - var/picked_reagent = pick(random_reagents) + reagent_list_to_process += reagent_path + + var/picked_reagent = pick(reagent_list_to_process) return picked_reagent ///Returns a random reagent consumable ethanol object minus blacklisted reagents diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 1d607e7d7a3c2..b2b511586f04c 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -192,7 +192,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) if(human_mob.mind && (length(human_mob.mind.antag_datums) > 0)) for(var/datum/antagonist/antag_datums as anything in human_mob.mind.antag_datums) - if(!antag_datums.hardcore_random_bonus) //dont give bonusses to dumb stuff like revs or hypnos + if(!antag_datums.hardcore_random_bonus) //don't give bonuses to dumb stuff like revs or hypnos continue if(initial(antag_datums.can_assign_self_objectives) && !antag_datums.can_assign_self_objectives) continue // You don't get a prize if you picked your own objective, you can't fail those @@ -588,7 +588,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) /datum/controller/subsystem/ticker/proc/medal_report() if(GLOB.commendations.len) var/list/parts = list() - parts += "Medal Commendations:" + parts += span_header("Medal Commendations:") for (var/com in GLOB.commendations) parts += com return "
[parts.Join("
")]
" @@ -677,7 +677,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) var/datum/action/report/R = new C.player_details.player_actions += R R.Grant(C.mob) - to_chat(C,"Show roundend report again") + to_chat(C,span_infoplain("Show roundend report again")) /datum/action/report name = "Show roundend report" @@ -703,7 +703,7 @@ 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 + //SKYRAT EDIT CHANGE BEGIN - ROUNDEND //var/text = "[ply.key] was [ply.name][jobtext] and" - SKYRAT EDIT - ORIGINAL var/text = "[ply.name][jobtext]" //SKYRAT EDIT CHANGE END diff --git a/code/__HELPERS/screen_objs.dm b/code/__HELPERS/screen_objs.dm index cb8520225ab8c..00f6bd415704f 100644 --- a/code/__HELPERS/screen_objs.dm +++ b/code/__HELPERS/screen_objs.dm @@ -13,11 +13,11 @@ if(findtext(screen_loc, "EAST")) // If you're starting from the east, we start from the east too x += view_size[1] if(findtext(screen_loc, "WEST")) // HHHHHHHHHHHHHHHHHHHHHH WEST is technically a 1 tile offset from the start. Shoot me please - x += world.icon_size + x += ICON_SIZE_X if(findtext(screen_loc, "NORTH")) y += view_size[2] if(findtext(screen_loc, "SOUTH")) - y += world.icon_size + y += ICON_SIZE_Y var/list/x_and_y = splittext(screen_loc, ",") @@ -36,8 +36,8 @@ x_coord = text2num(cut_relative_direction(x_coord)) y_coord = text2num(cut_relative_direction(y_coord)) - x += x_coord * world.icon_size - y += y_coord * world.icon_size + x += x_coord * ICON_SIZE_X + y += y_coord * ICON_SIZE_Y if(length(x_pack) > 1) x += text2num(x_pack[2]) @@ -51,14 +51,14 @@ /proc/offset_to_screen_loc(x_offset, y_offset, view = null) if(view) var/list/view_bounds = view_to_pixels(view) - x_offset = clamp(x_offset, world.icon_size, view_bounds[1]) - y_offset = clamp(y_offset, world.icon_size, view_bounds[2]) + x_offset = clamp(x_offset, ICON_SIZE_X, view_bounds[1]) + y_offset = clamp(y_offset, ICON_SIZE_Y, view_bounds[2]) // Round with no argument is floor, so we get the non pixel offset here - var/x = round(x_offset / world.icon_size) - var/pixel_x = x_offset % world.icon_size - var/y = round(y_offset / world.icon_size) - var/pixel_y = y_offset % world.icon_size + var/x = round(x_offset / ICON_SIZE_X) + var/pixel_x = x_offset % ICON_SIZE_X + var/y = round(y_offset / ICON_SIZE_Y) + var/pixel_y = y_offset % ICON_SIZE_Y var/list/generated_loc = list() generated_loc += "[x]" @@ -88,9 +88,9 @@ // Bias to the right, down, left, and then finally up if(base_x + target_offset < view_size[1]) return offset_to_screen_loc(base_x + target_offset, base_y, view) - if(base_y - target_offset > world.icon_size) + if(base_y - target_offset > ICON_SIZE_Y) return offset_to_screen_loc(base_x, base_y - target_offset, view) - if(base_x - target_offset > world.icon_size) + if(base_x - target_offset > ICON_SIZE_X) return offset_to_screen_loc(base_x - target_offset, base_y, view) if(base_y + target_offset < view_size[2]) return offset_to_screen_loc(base_x, base_y + target_offset, view) @@ -104,12 +104,12 @@ /// Returns a screen_loc format for a tiling screen objects from start and end positions. Start should be bottom left corner, and end top right corner. /proc/spanning_screen_loc(start_px, start_py, end_px, end_py) - var/starting_tile_x = round(start_px / 32) - start_px -= starting_tile_x * 32 - var/starting_tile_y = round(start_py/ 32) - start_py -= starting_tile_y * 32 - var/ending_tile_x = round(end_px / 32) - end_px -= ending_tile_x * 32 - var/ending_tile_y = round(end_py / 32) - end_py -= ending_tile_y * 32 + var/starting_tile_x = round(start_px / ICON_SIZE_X) + start_px -= starting_tile_x * ICON_SIZE_X + var/starting_tile_y = round(start_py/ ICON_SIZE_Y) + start_py -= starting_tile_y * ICON_SIZE_Y + var/ending_tile_x = round(end_px / ICON_SIZE_X) + end_px -= ending_tile_x * ICON_SIZE_X + var/ending_tile_y = round(end_py / ICON_SIZE_Y) + end_py -= ending_tile_y * ICON_SIZE_Y return "[starting_tile_x]:[start_px],[starting_tile_y]:[start_py] to [ending_tile_x]:[end_px],[ending_tile_y]:[end_py]" diff --git a/code/__HELPERS/sorts/sort_instance.dm b/code/__HELPERS/sorts/sort_instance.dm index bd1bbe0582a28..eaae55c18d399 100644 --- a/code/__HELPERS/sorts/sort_instance.dm +++ b/code/__HELPERS/sorts/sort_instance.dm @@ -392,7 +392,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sort_instance, new()) var/count1 = 0 //# of times in a row that first run won var/count2 = 0 // " " " " " " second run won - //do the straightfoward thin until one run starts winning consistently + //do the straightforward thin until one run starts winning consistently do //ASSERT(len1 > 1 && len2 > 0) @@ -417,7 +417,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sort_instance, new()) while((count1 | count2) < minGallop) - //one run is winning consistently so galloping may provide huge benifits + //one run is winning consistently so galloping may provide huge benefits //so try galloping, until such time as the run is no longer consistently winning do //ASSERT(len1 > 1 && len2 > 0) @@ -493,7 +493,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sort_instance, new()) var/count1 = 0 //# of times in a row that first run won var/count2 = 0 // " " " " " " second run won - //do the straightfoward thing until one run starts winning consistently + //do the straightforward thing until one run starts winning consistently do //ASSERT(len1 > 0 && len2 > 1) if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) @@ -516,7 +516,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sort_instance, new()) break outer while((count1 | count2) < minGallop) - //one run is winning consistently so galloping may provide huge benifits + //one run is winning consistently so galloping may provide huge benefits //so try galloping, until such time as the run is no longer consistently winning do //ASSERT(len1 > 0 && len2 > 1) diff --git a/code/__HELPERS/spatial_info.dm b/code/__HELPERS/spatial_info.dm index 529532f50cf4d..a2c47e87c0a10 100644 --- a/code/__HELPERS/spatial_info.dm +++ b/code/__HELPERS/spatial_info.dm @@ -211,37 +211,49 @@ for(var/obj/item/radio/radio as anything in radios) . |= get_hearers_in_LOS(radio.canhear_range, radio, FALSE) +//Used when converting pixels to tiles to make them accurate +#define OFFSET_X (0.5 / ICON_SIZE_X) +#define OFFSET_Y (0.5 / ICON_SIZE_Y) + ///Calculate if two atoms are in sight, returns TRUE or FALSE /proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) - var/turf/T + var/turf/current_turf if(X1 == X2) if(Y1 == Y2) return TRUE //Light cannot be blocked on same tile else - var/s = SIGN(Y2-Y1) - Y1+=s + var/sign = SIGN(Y2-Y1) + Y1 += sign while(Y1 != Y2) - T=locate(X1,Y1,Z) - if(IS_OPAQUE_TURF(T)) + current_turf = locate(X1, Y1, Z) + if(IS_OPAQUE_TURF(current_turf)) return FALSE - Y1+=s + Y1 += sign else - var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) - var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles + //This looks scary but we're just calculating a linear function (y = mx + b) + + //m = y/x + var/m = (ICON_SIZE_Y*(Y2-Y1) + (PY2-PY1)) / (ICON_SIZE_X*(X2-X1) + (PX2-PX1))//In pixels + + //b = y - mx + var/b = (Y1 + PY1/ICON_SIZE_Y - OFFSET_Y) - m*(X1 + PX1/ICON_SIZE_X - OFFSET_X)//In tiles + var/signX = SIGN(X2-X1) var/signY = SIGN(Y2-Y1) - if(X1= mx+b + Y1 += signY //Line exits tile vertically else - X1+=signX //Line exits tile horizontally - T=locate(X1,Y1,Z) - if(IS_OPAQUE_TURF(T)) + X1 += signX //Line exits tile horizontally + current_turf = locate(X1, Y1, Z) + if(IS_OPAQUE_TURF(current_turf)) return FALSE return TRUE +#undef OFFSET_X +#undef OFFSET_Y /proc/is_in_sight(atom/first_atom, atom/second_atom) var/turf/first_turf = get_turf(first_atom) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 460dd99a894ea..3d61534638e3b 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -1228,6 +1228,13 @@ GLOBAL_LIST_INIT(binary, list("0","1")) var/input_length = LAZYLEN(ending) return !!findtext(input_text, ending, -input_length) +/// Returns TRUE if the input_text starts with any of the beginnings +/proc/starts_with_any(input_text, list/beginnings) + for(var/beginning in beginnings) + if(!!findtext(input_text, beginning, 1, LAZYLEN(beginning)+1)) + return TRUE + return FALSE + /// Generate a grawlix string of length of the text argument. /proc/grawlix(text) var/grawlix = "" diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm index 93da26ef292f8..c779c4b681b0f 100644 --- a/code/__HELPERS/turfs.dm +++ b/code/__HELPERS/turfs.dm @@ -76,7 +76,7 @@ Turf and target are separate in case you want to teleport some distance from a t //destination_list = new() /*This will draw a block around the target turf, given what the error is. Specifying the values above will basically draw a different sort of block. - If the values are the same, it will be a square. If they are different, it will be a rectengle. + If the values are the same, it will be a square. If they are different, it will be a rectangle. In either case, it will center based on offset. Offset is position from center. Offset always calculates in relation to direction faced. In other words, depending on the direction of the teleport, the offset should remain positioned in relation to destination.*/ @@ -206,7 +206,7 @@ Turf and target are separate in case you want to teleport some distance from a t * NOTE: if your atom has non-standard bounds then this proc * will handle it, but: * if the bounds are even, then there are an even amount of "middle" turfs, the one to the EAST, NORTH, or BOTH is picked - * this may seem bad, but you're atleast as close to the center of the atom as possible, better than byond's default loc being all the way off) + * this may seem bad, but you're at least as close to the center of the atom as possible, better than byond's default loc being all the way off) * if the bounds are odd, the true middle turf of the atom is returned **/ /proc/get_turf_pixel(atom/checked_atom) @@ -237,9 +237,9 @@ Turf and target are separate in case you want to teleport some distance from a t var/list/icon_dimensions = get_icon_dimensions(checked_atom.icon) var/checked_atom_icon_height = icon_dimensions["height"] var/checked_atom_icon_width = icon_dimensions["width"] - if(checked_atom_icon_height != world.icon_size || checked_atom_icon_width != world.icon_size) - pixel_x_offset += ((checked_atom_icon_width / world.icon_size) - 1) * (world.icon_size * 0.5) - pixel_y_offset += ((checked_atom_icon_height / world.icon_size) - 1) * (world.icon_size * 0.5) + if(checked_atom_icon_height != ICON_SIZE_Y || checked_atom_icon_width != ICON_SIZE_X) + pixel_x_offset += ((checked_atom_icon_width / ICON_SIZE_X) - 1) * (ICON_SIZE_X * 0.5) + pixel_y_offset += ((checked_atom_icon_height / ICON_SIZE_Y) - 1) * (ICON_SIZE_Y * 0.5) return list(pixel_x_offset, pixel_y_offset) @@ -248,8 +248,8 @@ Turf and target are separate in case you want to teleport some distance from a t **/ /proc/pixel_offset_turf(turf/offset_from, list/offsets) //DY and DX - var/rough_x = round(round(offsets[1], world.icon_size) / world.icon_size) - var/rough_y = round(round(offsets[2], world.icon_size) / world.icon_size) + var/rough_x = round(round(offsets[1], ICON_SIZE_X) / ICON_SIZE_X) + var/rough_y = round(round(offsets[2], ICON_SIZE_Y) / ICON_SIZE_Y) var/final_x = clamp(offset_from.x + rough_x, 1, world.maxx) var/final_y = clamp(offset_from.y + rough_y, 1, world.maxy) @@ -275,8 +275,8 @@ Turf and target are separate in case you want to teleport some distance from a t click_turf_y = origin.y + text2num(click_turf_y[1]) - round(actual_view[2] / 2) - 1 var/turf/click_turf = locate(clamp(click_turf_x, 1, world.maxx), clamp(click_turf_y, 1, world.maxy), click_turf_z) - LAZYSET(modifiers, ICON_X, "[(click_turf_px - click_turf.pixel_x) + ((click_turf_x - click_turf.x) * world.icon_size)]") - LAZYSET(modifiers, ICON_Y, "[(click_turf_py - click_turf.pixel_y) + ((click_turf_y - click_turf.y) * world.icon_size)]") + LAZYSET(modifiers, ICON_X, "[(click_turf_px - click_turf.pixel_x) + ((click_turf_x - click_turf.x) * ICON_SIZE_X)]") + LAZYSET(modifiers, ICON_Y, "[(click_turf_py - click_turf.pixel_y) + ((click_turf_y - click_turf.y) * ICON_SIZE_Y)]") return click_turf ///Almost identical to the params_to_turf(), but unused (remove?) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index da3ed518aca11..1c8256d998989 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -36,8 +36,8 @@ return "northwest" if(SOUTHWEST) return "southwest" - else - return + + return NONE //Turns text into proper directions /proc/text2dir(direction) @@ -58,8 +58,8 @@ return SOUTHEAST if("SOUTHWEST") return SOUTHWEST - else - return + + return NONE //Converts an angle (degrees) into a ss13 direction GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST)) diff --git a/code/__HELPERS/view.dm b/code/__HELPERS/view.dm index 30e8bc8f9f973..139bdedc425ff 100644 --- a/code/__HELPERS/view.dm +++ b/code/__HELPERS/view.dm @@ -16,8 +16,8 @@ if(!view) return list(0, 0) var/list/view_info = getviewsize(view) - view_info[1] *= world.icon_size - view_info[2] *= world.icon_size + view_info[1] *= ICON_SIZE_X + view_info[2] *= ICON_SIZE_Y return view_info /** diff --git a/code/__byond_version_compat.dm b/code/__byond_version_compat.dm index 0f19332934d09..6680e655551f5 100644 --- a/code/__byond_version_compat.dm +++ b/code/__byond_version_compat.dm @@ -9,6 +9,11 @@ #error You need version 515.1627 or higher #endif +// Unable to compile this version thanks to mutable appearance changes +#if (DM_VERSION == 515 && DM_BUILD == 1643) +#error This version of BYOND cannot compile this project. Visit www.byond.com/download/build to download an older version or update (if possible). +#endif + // Keep savefile compatibilty at minimum supported level /savefile/byond_version = MIN_COMPILER_VERSION diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 5ab05258b995d..3fe456e488ecb 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -19,7 +19,7 @@ /// We'll use another define to convert uses of the proc over. That'll be all // #define APPEARANCE_SUCCESS_TRACKING -///Used to find the sources of harddels, quite laggy, don't be surpised if it freezes your client for a good while +///Used to find the sources of harddels, quite laggy, don't be surprised if it freezes your client for a good while //#define REFERENCE_TRACKING #ifdef REFERENCE_TRACKING @@ -131,7 +131,7 @@ #warn compiling in TESTING mode. testing() debug messages will be visible. #endif -#ifdef CIBUILDING +#if defined(CIBUILDING) && !defined(OPENDREAM) #define UNIT_TESTS #endif @@ -156,10 +156,17 @@ #define CBT #endif -#if !defined(CBT) && !defined(SPACEMAN_DMM) -#warn Building with Dream Maker is no longer supported and will result in errors. -#warn In order to build, run BUILD.bat in the root directory. -#warn Consider switching to VSCode editor instead, where you can press Ctrl+Shift+B to build. +#if defined(OPENDREAM) + #if !defined(CIBUILDING) + #warn You are building with OpenDream. Remember to build TGUI manually. + #warn You can do this by running tgui-build.cmd from the bin directory. + #endif +#else + #if !defined(CBT) && !defined(SPACEMAN_DMM) + #warn Building with Dream Maker is no longer supported and will result in errors. + #warn In order to build, run BUILD.cmd in the root directory. + #warn Consider switching to VSCode editor instead, where you can press Ctrl+Shift+B to build. + #endif #endif /// Runs the game in "map test mode" diff --git a/code/_globalvars/admin.dm b/code/_globalvars/admin.dm index 96f07e3cca870..e14a56c16814c 100644 --- a/code/_globalvars/admin.dm +++ b/code/_globalvars/admin.dm @@ -76,6 +76,7 @@ GLOBAL_LIST_INIT(spanname_to_formatting, list( "Drone Radio" = "drone", "Engineering Radio" = "engradio", "Extremely Big" = "extremelybig", + "Entertainment Radio" = "enteradio", "Game Say" = "game say", "Ghost Alert" = "ghostalert", "Green" = "green", diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index fa3cd456fc7da..7f6735cb5d7c5 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -65,6 +65,7 @@ DEFINE_BITFIELD(area_flags, list( "VALID_TERRITORY" = VALID_TERRITORY, "XENOBIOLOGY_COMPATIBLE" = XENOBIOLOGY_COMPATIBLE, "NO_BOH" = NO_BOH, + "UNLIMITED_FISHING" = UNLIMITED_FISHING, )) DEFINE_BITFIELD(turf_flags, list( @@ -459,10 +460,13 @@ 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_DIGITIGRADE_MASK" = CLOTHING_DIGITIGRADE_MASK, + // SKYRAT EDIT START "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, + // SKYRAT EDIT END )) DEFINE_BITFIELD(flora_flags, list( @@ -583,6 +587,13 @@ DEFINE_BITFIELD(gun_flags, list( "TURRET_INCOMPATIBLE" = TURRET_INCOMPATIBLE, )) +DEFINE_BITFIELD(fish_flags, list( + "FISH_FLAG_SHOW_IN_CATALOG" = FISH_FLAG_SHOW_IN_CATALOG, + "FISH_DO_FLOP_ANIM" = FISH_DO_FLOP_ANIM, + "FISH_FLAG_PETTED" = FISH_FLAG_PETTED, + "FISH_FLAG_EXPERIMENT_SCANNABLE" = FISH_FLAG_EXPERIMENT_SCANNABLE, +)) + DEFINE_BITFIELD(bot_mode_flags, list( "POWER_ON" = BOT_MODE_ON, "AUTO_PATROL" = BOT_MODE_AUTOPATROL, diff --git a/code/_globalvars/lists/achievements.dm b/code/_globalvars/lists/achievements.dm old mode 100755 new mode 100644 index 283931f99847c..c788f070ad3b7 --- a/code/_globalvars/lists/achievements.dm +++ b/code/_globalvars/lists/achievements.dm @@ -3,7 +3,7 @@ GLOBAL_LIST_EMPTY(commendations) GLOBAL_LIST_INIT(achievement_categories, list("Bosses", "Jobs", "Skills", "Misc", "Mafia", "Scores")) ///A list of sounds that can be played when unlocking an achievement, set in the preferences. GLOBAL_LIST_INIT(achievement_sounds, list( - CHEEVO_SOUND_PING = sound('sound/effects/glockenspiel_ping.ogg', volume = 70), - CHEEVO_SOUND_JINGLE = sound('sound/effects/beeps_jingle.ogg', volume = 70), - CHEEVO_SOUND_TADA = sound('sound/effects/tada_fanfare.ogg', volume = 30), + CHEEVO_SOUND_PING = sound('sound/effects/achievement/glockenspiel_ping.ogg', volume = 70), + CHEEVO_SOUND_JINGLE = sound('sound/effects/achievement/beeps_jingle.ogg', volume = 70), + CHEEVO_SOUND_TADA = sound('sound/effects/achievement/tada_fanfare.ogg', volume = 30), )) diff --git a/code/_globalvars/lists/ambience.dm b/code/_globalvars/lists/ambience.dm index 3a9ab81dde437..6cc984adf1c22 100644 --- a/code/_globalvars/lists/ambience.dm +++ b/code/_globalvars/lists/ambience.dm @@ -1,170 +1,170 @@ /* SKYRAT EDIT REMOVAL BEGIN GLOBAL_LIST_INIT(generic_ambience,list( - 'sound/ambience/ambigen1.ogg', - 'sound/ambience/ambigen2.ogg', - 'sound/ambience/ambigen3.ogg', - 'sound/ambience/ambigen4.ogg', - 'sound/ambience/ambigen5.ogg', - 'sound/ambience/ambigen6.ogg', - 'sound/ambience/ambigen7.ogg', - 'sound/ambience/ambigen8.ogg', - 'sound/ambience/ambigen9.ogg', - 'sound/ambience/ambigen10.ogg', - 'sound/ambience/ambigen11.ogg', - 'sound/ambience/ambigen13.ogg', - 'sound/ambience/ambigen14.ogg', + 'sound/ambience/general/ambigen1.ogg', + 'sound/ambience/general/ambigen2.ogg', + 'sound/ambience/general/ambigen3.ogg', + 'sound/ambience/general/ambigen4.ogg', + 'sound/ambience/general/ambigen5.ogg', + 'sound/ambience/general/ambigen6.ogg', + 'sound/ambience/general/ambigen7.ogg', + 'sound/ambience/general/ambigen8.ogg', + 'sound/ambience/general/ambigen9.ogg', + 'sound/ambience/general/ambigen10.ogg', + 'sound/ambience/general/ambigen11.ogg', + 'sound/ambience/general/ambigen13.ogg', + 'sound/ambience/general/ambigen14.ogg', )) */ //SKYRAT EDIT REMOVAL END GLOBAL_LIST_INIT(holy_ambience,list( - 'sound/ambience/ambicha1.ogg', - 'sound/ambience/ambicha2.ogg', - 'sound/ambience/ambicha3.ogg', - 'sound/ambience/ambicha4.ogg', - 'sound/ambience/ambiholy.ogg', - 'sound/ambience/ambiholy2.ogg', - 'sound/ambience/ambiholy3.ogg', + 'sound/ambience/holy/ambicha1.ogg', + 'sound/ambience/holy/ambicha2.ogg', + 'sound/ambience/holy/ambicha3.ogg', + 'sound/ambience/holy/ambicha4.ogg', + 'sound/ambience/holy/ambiholy.ogg', + 'sound/ambience/holy/ambiholy2.ogg', + 'sound/ambience/holy/ambiholy3.ogg', )) GLOBAL_LIST_INIT(danger_ambience,list( - 'sound/ambience/ambidanger.ogg', - 'sound/ambience/ambidanger2.ogg', + 'sound/ambience/misc/ambidanger.ogg', + 'sound/ambience/misc/ambidanger2.ogg', )) GLOBAL_LIST_INIT(ruins_ambience,list( - 'sound/ambience/ambicave.ogg', - 'sound/ambience/ambidanger.ogg', - 'sound/ambience/ambidanger2.ogg', - 'sound/ambience/ambimaint1.ogg', - 'sound/ambience/ambimine.ogg', - 'sound/ambience/ambimystery.ogg', - 'sound/ambience/ambiruin.ogg', - 'sound/ambience/ambiruin2.ogg', - 'sound/ambience/ambiruin3.ogg', - 'sound/ambience/ambiruin4.ogg', - 'sound/ambience/ambiruin5.ogg', - 'sound/ambience/ambiruin6.ogg', - 'sound/ambience/ambiruin7.ogg', - 'sound/ambience/ambitech3.ogg', + 'sound/ambience/lavaland/ambicave.ogg', + 'sound/ambience/misc/ambidanger.ogg', + 'sound/ambience/misc/ambidanger2.ogg', + 'sound/ambience/maintenance/ambimaint1.ogg', + 'sound/ambience/ruin/ambimine.ogg', + 'sound/ambience/misc/ambimystery.ogg', + 'sound/ambience/ruin/ambiruin.ogg', + 'sound/ambience/ruin/ambiruin2.ogg', + 'sound/ambience/ruin/ambiruin3.ogg', + 'sound/ambience/ruin/ambiruin4.ogg', + 'sound/ambience/ruin/ambiruin5.ogg', + 'sound/ambience/ruin/ambiruin6.ogg', + 'sound/ambience/ruin/ambiruin7.ogg', + 'sound/ambience/engineering/ambitech3.ogg', )) GLOBAL_LIST_INIT(engi_ambience,list( - 'sound/ambience/ambiatmos.ogg', - 'sound/ambience/ambiatmos2.ogg', - 'sound/ambience/ambisin1.ogg', - 'sound/ambience/ambisin2.ogg', - 'sound/ambience/ambisin3.ogg', - 'sound/ambience/ambisin4.ogg', - 'sound/ambience/ambitech.ogg', - 'sound/ambience/ambitech2.ogg', - 'sound/ambience/ambitech3.ogg', + 'sound/ambience/engineering/ambiatmos.ogg', + 'sound/ambience/engineering/ambiatmos2.ogg', + 'sound/ambience/engineering/ambisin1.ogg', + 'sound/ambience/engineering/ambisin2.ogg', + 'sound/ambience/engineering/ambisin3.ogg', + 'sound/ambience/engineering/ambisin4.ogg', + 'sound/ambience/engineering/ambitech.ogg', + 'sound/ambience/engineering/ambitech2.ogg', + 'sound/ambience/engineering/ambitech3.ogg', )) GLOBAL_LIST_INIT(mining_ambience, list( - 'sound/ambience/ambicave.ogg', - 'sound/ambience/ambidanger.ogg', - 'sound/ambience/ambidanger2.ogg', - 'sound/ambience/ambilava1.ogg', - 'sound/ambience/ambilava2.ogg', - 'sound/ambience/ambilava3.ogg', - 'sound/ambience/ambimaint1.ogg', - 'sound/ambience/ambimine.ogg', - 'sound/ambience/ambiruin.ogg', - 'sound/ambience/ambiruin2.ogg', - 'sound/ambience/ambiruin3.ogg', - 'sound/ambience/ambiruin4.ogg', - 'sound/ambience/ambiruin5.ogg', - 'sound/ambience/ambiruin6.ogg', - 'sound/ambience/ambiruin7.ogg', + 'sound/ambience/lavaland/ambicave.ogg', + 'sound/ambience/misc/ambidanger.ogg', + 'sound/ambience/misc/ambidanger2.ogg', + 'sound/ambience/lavaland/ambilava1.ogg', + 'sound/ambience/lavaland/ambilava2.ogg', + 'sound/ambience/lavaland/ambilava3.ogg', + 'sound/ambience/maintenance/ambimaint1.ogg', + 'sound/ambience/ruin/ambimine.ogg', + 'sound/ambience/ruin/ambiruin.ogg', + 'sound/ambience/ruin/ambiruin2.ogg', + 'sound/ambience/ruin/ambiruin3.ogg', + 'sound/ambience/ruin/ambiruin4.ogg', + 'sound/ambience/ruin/ambiruin5.ogg', + 'sound/ambience/ruin/ambiruin6.ogg', + 'sound/ambience/ruin/ambiruin7.ogg', )) GLOBAL_LIST_INIT(icemoon_ambience,list( - 'sound/ambience/ambiicetheme.ogg', - 'sound/ambience/ambiicemelody1.ogg', - 'sound/ambience/ambiicemelody2.ogg', - 'sound/ambience/ambiicemelody3.ogg', - 'sound/ambience/ambiicemelody4.ogg', - 'sound/ambience/ambiicesting1.ogg', - 'sound/ambience/ambiicesting2.ogg', - 'sound/ambience/ambiicesting3.ogg', - 'sound/ambience/ambiicesting4.ogg', - 'sound/ambience/ambiicesting5.ogg', + 'sound/ambience/icemoon/ambiicetheme.ogg', + 'sound/ambience/icemoon/ambiicemelody1.ogg', + 'sound/ambience/icemoon/ambiicemelody2.ogg', + 'sound/ambience/icemoon/ambiicemelody3.ogg', + 'sound/ambience/icemoon/ambiicemelody4.ogg', + 'sound/ambience/icemoon/ambiicesting1.ogg', + 'sound/ambience/icemoon/ambiicesting2.ogg', + 'sound/ambience/icemoon/ambiicesting3.ogg', + 'sound/ambience/icemoon/ambiicesting4.ogg', + 'sound/ambience/icemoon/ambiicesting5.ogg', )) GLOBAL_LIST_INIT(medical_ambience,list( - 'sound/ambience/ambinice.ogg', + 'sound/ambience/medical/ambinice.ogg', )) GLOBAL_LIST_INIT(virology_ambience,list( - 'sound/ambience/ambiviro.ogg', - 'sound/ambience/ambiviro1.ogg', - 'sound/ambience/ambiviro2.ogg', + 'sound/ambience/medical/ambiviro.ogg', + 'sound/ambience/medical/ambiviro1.ogg', + 'sound/ambience/medical/ambiviro2.ogg', )) GLOBAL_LIST_INIT(spooky_ambience,list( - 'sound/ambience/ambimo1.ogg', - 'sound/ambience/ambimo2.ogg', - 'sound/ambience/ambimystery.ogg', - 'sound/ambience/ambiodd.ogg', - 'sound/ambience/ambiruin6.ogg', - 'sound/ambience/ambiruin7.ogg', + 'sound/ambience/medical/ambimo1.ogg', + 'sound/ambience/medical/ambimo2.ogg', + 'sound/ambience/misc/ambimystery.ogg', + 'sound/ambience/misc/ambiodd.ogg', + 'sound/ambience/ruin/ambiruin6.ogg', + 'sound/ambience/ruin/ambiruin7.ogg', )) GLOBAL_LIST_INIT(space_ambience,list( 'modular_skyrat/master_files/sound/ambience/starlight.ogg', //SKYRAT EDIT ADDITION - 'sound/ambience/ambiatmos.ogg', - 'sound/ambience/ambispace.ogg', - 'sound/ambience/ambispace2.ogg', - 'sound/ambience/ambispace3.ogg', - 'sound/ambience/ambispace4.ogg', - 'sound/ambience/ambispace5.ogg', - 'sound/ambience/ambispace6.ogg', - 'sound/ambience/title2.ogg', + 'sound/ambience/engineering/ambiatmos.ogg', + 'sound/ambience/space/ambispace.ogg', + 'sound/ambience/space/ambispace2.ogg', + 'sound/ambience/space/ambispace3.ogg', + 'sound/ambience/space/ambispace4.ogg', + 'sound/ambience/space/ambispace5.ogg', + 'sound/ambience/space/ambispace6.ogg', + 'sound/music/lobby_music/title2.ogg', )) GLOBAL_LIST_INIT(maint_ambience,list( - 'sound/ambience/ambimaint1.ogg', - 'sound/ambience/ambimaint2.ogg', - 'sound/ambience/ambimaint3.ogg', - 'sound/ambience/ambimaint4.ogg', - 'sound/ambience/ambimaint5.ogg', - 'sound/ambience/ambimaint6.ogg', - 'sound/ambience/ambimaint7.ogg', - 'sound/ambience/ambimaint8.ogg', - 'sound/ambience/ambimaint9.ogg', - 'sound/ambience/ambimaint10.ogg', - 'sound/ambience/ambimaint11.ogg', - 'sound/ambience/ambimaint12.ogg', - 'sound/ambience/ambitech2.ogg', - 'sound/voice/lowHiss1.ogg', - 'sound/voice/lowHiss2.ogg', - 'sound/voice/lowHiss3.ogg', - 'sound/voice/lowHiss4.ogg', - 'sound/ambience/maintambience.ogg', + 'sound/ambience/maintenance/ambimaint1.ogg', + 'sound/ambience/maintenance/ambimaint2.ogg', + 'sound/ambience/maintenance/ambimaint3.ogg', + 'sound/ambience/maintenance/ambimaint4.ogg', + 'sound/ambience/maintenance/ambimaint5.ogg', + 'sound/ambience/maintenance/ambimaint6.ogg', + 'sound/ambience/maintenance/ambimaint7.ogg', + 'sound/ambience/maintenance/ambimaint8.ogg', + 'sound/ambience/maintenance/ambimaint9.ogg', + 'sound/ambience/maintenance/ambimaint10.ogg', + 'sound/ambience/maintenance/ambimaint11.ogg', + 'sound/ambience/maintenance/ambimaint12.ogg', + 'sound/ambience/engineering/ambitech2.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss1.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss2.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss3.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss4.ogg', + 'sound/ambience/maintenance/maintambience.ogg', )) GLOBAL_LIST_INIT(away_ambience,list( - 'sound/ambience/ambiatmos.ogg', - 'sound/ambience/ambiatmos2.ogg', - 'sound/ambience/ambidanger.ogg', - 'sound/ambience/ambidanger2.ogg', - 'sound/ambience/ambimaint.ogg', - 'sound/ambience/ambiodd.ogg', - 'sound/ambience/ambiruin.ogg', - 'sound/ambience/ambiruin2.ogg', - 'sound/ambience/ambiruin3.ogg', - 'sound/ambience/ambiruin4.ogg', - 'sound/ambience/ambiruin5.ogg', - 'sound/ambience/ambiruin6.ogg', - 'sound/ambience/ambiruin7.ogg', - 'sound/ambience/ambitech.ogg', - 'sound/ambience/ambitech2.ogg', + 'sound/ambience/engineering/ambiatmos.ogg', + 'sound/ambience/engineering/ambiatmos2.ogg', + 'sound/ambience/misc/ambidanger.ogg', + 'sound/ambience/misc/ambidanger2.ogg', + 'sound/ambience/maintenance/ambimaint.ogg', + 'sound/ambience/misc/ambiodd.ogg', + 'sound/ambience/ruin/ambiruin.ogg', + 'sound/ambience/ruin/ambiruin2.ogg', + 'sound/ambience/ruin/ambiruin3.ogg', + 'sound/ambience/ruin/ambiruin4.ogg', + 'sound/ambience/ruin/ambiruin5.ogg', + 'sound/ambience/ruin/ambiruin6.ogg', + 'sound/ambience/ruin/ambiruin7.ogg', + 'sound/ambience/engineering/ambitech.ogg', + 'sound/ambience/engineering/ambitech2.ogg', )) GLOBAL_LIST_INIT(reebe_ambience,list( - 'sound/ambience/ambireebe1.ogg', - 'sound/ambience/ambireebe2.ogg', - 'sound/ambience/ambireebe3.ogg', + 'sound/ambience/misc/ambireebe1.ogg', + 'sound/ambience/misc/ambireebe2.ogg', + 'sound/ambience/misc/ambireebe3.ogg', )) GLOBAL_LIST_INIT(creepy_ambience,list( @@ -172,25 +172,25 @@ GLOBAL_LIST_INIT(creepy_ambience,list( 'sound/effects/ghost2.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/screech.ogg', - 'sound/hallucinations/behind_you1.ogg', - 'sound/hallucinations/behind_you2.ogg', - 'sound/hallucinations/far_noise.ogg', - 'sound/hallucinations/growl1.ogg', - 'sound/hallucinations/growl2.ogg', - 'sound/hallucinations/growl3.ogg', - 'sound/hallucinations/i_see_you1.ogg', - 'sound/hallucinations/i_see_you2.ogg', - 'sound/hallucinations/im_here1.ogg', - 'sound/hallucinations/im_here2.ogg', - 'sound/hallucinations/look_up1.ogg', - 'sound/hallucinations/look_up2.ogg', - 'sound/hallucinations/over_here1.ogg', - 'sound/hallucinations/over_here2.ogg', - 'sound/hallucinations/over_here3.ogg', - 'sound/hallucinations/turn_around1.ogg', - 'sound/hallucinations/turn_around2.ogg', - 'sound/hallucinations/veryfar_noise.ogg', - 'sound/hallucinations/wail.ogg', + 'sound/effects/hallucinations/behind_you1.ogg', + 'sound/effects/hallucinations/behind_you2.ogg', + 'sound/effects/hallucinations/far_noise.ogg', + 'sound/effects/hallucinations/growl1.ogg', + 'sound/effects/hallucinations/growl2.ogg', + 'sound/effects/hallucinations/growl3.ogg', + 'sound/effects/hallucinations/i_see_you1.ogg', + 'sound/effects/hallucinations/i_see_you2.ogg', + 'sound/effects/hallucinations/im_here1.ogg', + 'sound/effects/hallucinations/im_here2.ogg', + 'sound/effects/hallucinations/look_up1.ogg', + 'sound/effects/hallucinations/look_up2.ogg', + 'sound/effects/hallucinations/over_here1.ogg', + 'sound/effects/hallucinations/over_here2.ogg', + 'sound/effects/hallucinations/over_here3.ogg', + 'sound/effects/hallucinations/turn_around1.ogg', + 'sound/effects/hallucinations/turn_around2.ogg', + 'sound/effects/hallucinations/veryfar_noise.ogg', + 'sound/effects/hallucinations/wail.ogg', )) GLOBAL_LIST_INIT(ambience_assoc,list( diff --git a/code/_globalvars/lists/basic_ai.dm b/code/_globalvars/lists/basic_ai.dm index 8d79c9bfafeaf..a8646bb8d7f92 100644 --- a/code/_globalvars/lists/basic_ai.dm +++ b/code/_globalvars/lists/basic_ai.dm @@ -10,3 +10,10 @@ GLOBAL_LIST_INIT(ai_controllers_by_status, list( ///basic ai controllers based on their z level GLOBAL_LIST_EMPTY(ai_controllers_by_zlevel) + +///basic ai controllers that are currently performing idled behaviors +GLOBAL_LIST_INIT(unplanned_controllers, list( + AI_STATUS_ON = list(), + AI_STATUS_IDLE = list(), +)) + diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 03dd87ad45656..eca55a94b4117 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -134,22 +134,22 @@ GLOBAL_LIST_EMPTY(female_clothing_icons) GLOBAL_LIST_INIT(scarySounds, list( 'sound/effects/footstep/clownstep1.ogg', 'sound/effects/footstep/clownstep2.ogg', - 'sound/effects/glassbr1.ogg', - 'sound/effects/glassbr2.ogg', - 'sound/effects/glassbr3.ogg', - 'sound/items/welder.ogg', - 'sound/items/welder2.ogg', - 'sound/machines/airlock.ogg', - 'sound/voice/hiss1.ogg', - 'sound/voice/hiss2.ogg', - 'sound/voice/hiss3.ogg', - 'sound/voice/hiss4.ogg', - 'sound/voice/hiss5.ogg', - 'sound/voice/hiss6.ogg', - 'sound/weapons/armbomb.ogg', - 'sound/weapons/taser.ogg', - 'sound/weapons/thudswoosh.ogg', - 'sound/weapons/shove.ogg', + 'sound/effects/glass/glassbr1.ogg', + 'sound/effects/glass/glassbr2.ogg', + 'sound/effects/glass/glassbr3.ogg', + 'sound/items/tools/welder.ogg', + 'sound/items/tools/welder2.ogg', + 'sound/machines/airlock/airlock.ogg', + 'sound/mobs/non-humanoids/hiss/hiss1.ogg', + 'sound/mobs/non-humanoids/hiss/hiss2.ogg', + 'sound/mobs/non-humanoids/hiss/hiss3.ogg', + 'sound/mobs/non-humanoids/hiss/hiss4.ogg', + 'sound/mobs/non-humanoids/hiss/hiss5.ogg', + 'sound/mobs/non-humanoids/hiss/hiss6.ogg', + 'sound/items/weapons/armbomb.ogg', + 'sound/items/weapons/taser.ogg', + 'sound/items/weapons/thudswoosh.ogg', + 'sound/items/weapons/shove.ogg', )) diff --git a/code/_globalvars/lists/reagents.dm b/code/_globalvars/lists/reagents.dm index 44ac6d574cd3a..6cd4cf62e0767 100644 --- a/code/_globalvars/lists/reagents.dm +++ b/code/_globalvars/lists/reagents.dm @@ -58,7 +58,7 @@ GLOBAL_LIST_INIT(chemical_reagents_list, init_chemical_reagent_list()) GLOBAL_LIST(chemical_reactions_results_lookup_list) /// list of all reagents that are parent types used to define a bunch of children - but aren't used themselves as anything. GLOBAL_LIST(fake_reagent_blacklist) -/// Turfs metalgen cant touch +/// Turfs metalgen can't touch 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 @@ -185,7 +185,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagentlist()) /proc/build_name2reagentlist() . = list() - //build map with keys stored seperatly + //build map with keys stored separately var/list/name_to_reagent = list() var/list/only_names = list() for (var/datum/reagent/reagent as anything in GLOB.chemical_reagents_list) diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm index 805cea677a092..b1460165564e6 100644 --- a/code/_globalvars/lists/typecache.dm +++ b/code/_globalvars/lists/typecache.dm @@ -1,5 +1,5 @@ //please store common type caches here. -//type caches should only be stored here if used in mutiple places or likely to be used in mutiple places. +//type caches should only be stored here if used in multiple places or likely to be used in multiple places. //Note: typecache can only replace istype if you know for sure the thing is at least a datum. diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 12e62bdc30be5..4b7dbf769be2a 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -10,6 +10,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_AI_PAUSED" = TRAIT_AI_PAUSED, "TRAIT_BANNED_FROM_CARGO_SHUTTLE" = TRAIT_BANNED_FROM_CARGO_SHUTTLE, "TRAIT_BEING_SHOCKED" = TRAIT_BEING_SHOCKED, + "TRAIT_CATCH_AND_RELEASE" = TRAIT_CATCH_AND_RELEASE, "TRAIT_COMMISSIONED" = TRAIT_COMMISSIONED, "TRAIT_CLIMBABLE" = TRAIT_CLIMBABLE, "TRAIT_CURRENTLY_CLEANING" = TRAIT_CURRENTLY_CLEANING, @@ -17,17 +18,20 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_DO_NOT_SPLASH" = TRAIT_DO_NOT_SPLASH, "TRAIT_DRIED" = TRAIT_DRIED, "TRAIT_DRYABLE" = TRAIT_DRYABLE, + "TRAIT_FISHING_SPOT" = TRAIT_FISHING_SPOT, "TRAIT_FOOD_CHEF_MADE" = TRAIT_FOOD_CHEF_MADE, "TRAIT_FOOD_FRIED" = TRAIT_FOOD_FRIED, + "TRAIT_QUALITY_FOOD_INGREDIENT" = TRAIT_QUALITY_FOOD_INGREDIENT, "TRAIT_FOOD_SILVER" = TRAIT_FOOD_SILVER, "TRAIT_KEEP_TOGETHER" = TRAIT_KEEP_TOGETHER, "TRAIT_LIGHTING_DEBUGGED" = TRAIT_LIGHTING_DEBUGGED, + "TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION" = TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION, "TRAIT_RECENTLY_COINED" = TRAIT_RECENTLY_COINED, "TRAIT_RUSTY" = TRAIT_RUSTY, "TRAIT_SPINNING" = TRAIT_SPINNING, "TRAIT_STICKERED" = TRAIT_STICKERED, "TRAIT_UNHITTABLE_BY_PROJECTILES" = TRAIT_UNHITTABLE_BY_PROJECTILES, - "TRAIT_COMMISSIONED" = TRAIT_COMMISSIONED, + "TRAIT_UNLINKABLE_FISHING_SPOT" = TRAIT_UNLINKABLE_FISHING_SPOT, ), /atom/movable = list( "TRAIT_ACTIVE_STORAGE" = TRAIT_ACTIVE_STORAGE, @@ -36,6 +40,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BLOCKING_EXPLOSIVES" = TRAIT_BLOCKING_EXPLOSIVES, "TRAIT_BOULDER_BREAKER" = TRAIT_BOULDER_BREAKER, "TRAIT_CASTABLE_LOC" = TRAIT_CASTABLE_LOC, + "TRAIT_CHASM_STOPPER" = TRAIT_CHASM_STOPPER, + "TRAIT_COMBAT_MODE_SKIP_INTERACTION" = TRAIT_COMBAT_MODE_SKIP_INTERACTION, "TRAIT_DEL_ON_SPACE_DUMP" = TRAIT_DEL_ON_SPACE_DUMP, "TRAIT_FISH_CASE_COMPATIBILE" = TRAIT_FISH_CASE_COMPATIBILE, "TRAIT_FROZEN" = TRAIT_FROZEN, @@ -49,28 +55,26 @@ GLOBAL_LIST_INIT(traits_by_type, list( "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_MOVE_VENTCRAWLING" = TRAIT_MOVE_VENTCRAWLING, + "TRAIT_NOT_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE, "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_NO_THROW_HITPUSH" = TRAIT_NO_THROW_HITPUSH, - "TRAIT_NOT_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE, - "TRAIT_SPELLS_TRANSFER_TO_LOC" = TRAIT_SPELLS_TRANSFER_TO_LOC, "TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT" = TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT, "TRAIT_ON_HIT_EFFECT" = TRAIT_ON_HIT_EFFECT, "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, "TRAIT_SCARY_FISHERMAN" = TRAIT_SCARY_FISHERMAN, "TRAIT_SECLUDED_LOCATION" = TRAIT_SECLUDED_LOCATION, "TRAIT_SNOWSTORM_IMMUNE" = TRAIT_SNOWSTORM_IMMUNE, + "TRAIT_SPELLS_TRANSFER_TO_LOC" = TRAIT_SPELLS_TRANSFER_TO_LOC, "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_WADDLING" = TRAIT_WADDLING, + "TRAIT_WAS_RENAMED" = TRAIT_WAS_RENAMED, "TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE, - "TRAIT_CHASM_STOPPER" = TRAIT_CHASM_STOPPER, ), /datum/controller/subsystem/economy = list( "TRAIT_MARKET_CRASHING" = TRAIT_MARKET_CRASHING, @@ -122,8 +126,11 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CONTRABAND" = TRAIT_CONTRABAND, ), /mob = list( + "TRAIT_AI_ACCESS" = TRAIT_AI_ACCESS, "TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING, "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING, + "TRAIT_ACT_AS_CULTIST" = TRAIT_ACT_AS_CULTIST, + "TRAIT_ACT_AS_HERETIC" = TRAIT_ACT_AS_HERETIC, "TRAIT_ADAMANTINE_EXTRACT_ARMOR" = TRAIT_ADAMANTINE_EXTRACT_ARMOR, "TRAIT_ADVANCEDTOOLUSER" = TRAIT_ADVANCEDTOOLUSER, "TRAIT_AGENDER" = TRAIT_AGENDER, @@ -153,6 +160,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BIRTHDAY_BOY" = TRAIT_BIRTHDAY_BOY, "TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY, "TRAIT_BLOCK_SHUTTLE_MOVEMENT" = TRAIT_BLOCK_SHUTTLE_MOVEMENT, + "TRAIT_BLOCKING_PROJECTILES" = TRAIT_BLOCKING_PROJECTILES, "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, "TRAIT_BLOODY_MESS" = TRAIT_BLOODY_MESS, @@ -237,6 +245,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FEARLESS" = TRAIT_FEARLESS, "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, "TRAIT_FINGERPRINT_PASSTHROUGH" = TRAIT_FINGERPRINT_PASSTHROUGH, + "TRAIT_FISH_EATER" = TRAIT_FISH_EATER, "TRAIT_FIST_MINING" = TRAIT_FIST_MINING, "TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS, "TRAIT_FLESH_DESIRE" = TRAIT_FLESH_DESIRE, @@ -257,7 +266,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_GARLIC_REAGENT" = TRAIT_GARLIC_REAGENT, "TRAIT_GENELESS" = TRAIT_GENELESS, "TRAIT_GIANT" = TRAIT_GIANT, - "TRAIT_GONE_FISHING" = TRAIT_GONE_FISHING, + "TRAIT_GODMODE" = TRAIT_GODMODE, "TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING, "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, "TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED, @@ -282,6 +291,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_HOT_SPRING_CURSED" = TRAIT_HOT_SPRING_CURSED, "TRAIT_HULK" = TRAIT_HULK, "TRAIT_HUSK" = TRAIT_HUSK, + "TRAIT_HYPOTHERMIC" = TRAIT_HYPOTHERMIC, "TRAIT_ID_APPRAISER" = TRAIT_ID_APPRAISER, "TRAIT_IGNORE_ELEVATION" = TRAIT_IGNORE_ELEVATION, "TRAIT_IGNORESLOWDOWN" = TRAIT_IGNORESLOWDOWN, @@ -452,11 +462,11 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, + "TRAIT_SILICON_ACCESS" = TRAIT_SILICON_ACCESS, "TRAIT_SILICON_EMOTES_ALLOWED" = TRAIT_SILICON_EMOTES_ALLOWED, "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, "TRAIT_SKITTISH" = TRAIT_SKITTISH, "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE, - "TRAIT_SLOW_FLIP" = TRAIT_SLOW_FLIP, "TRAIT_SMOKER" = TRAIT_SMOKER, "TRAIT_SNEAK" = TRAIT_SNEAK, "TRAIT_SNOB" = TRAIT_SNOB, @@ -523,6 +533,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_USER_SCOPED" = TRAIT_USER_SCOPED, "TRAIT_USES_SKINTONES" = TRAIT_USES_SKINTONES, "TRAIT_VATGROWN" = TRAIT_VATGROWN, + "TRAIT_VEGETARIAN" = TRAIT_VEGETARIAN, "TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS, "TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE, "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, @@ -540,11 +551,15 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE, "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION, + "TRAIT_NOGRAV_ALWAYS_DRIFT" = TRAIT_NOGRAV_ALWAYS_DRIFT, "TRAIT_SPEECH_BOOSTER" = TRAIT_SPEECH_BOOSTER, "TRAIT_MINING_PARRYING" = TRAIT_MINING_PARRYING, + "TRAIT_ILLUSORY_EFFECT" = TRAIT_ILLUSORY_EFFECT, ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, + "TRAIT_BAIT_ALLOW_FISHING_DUD" = TRAIT_BAIT_ALLOW_FISHING_DUD, + "TRAIT_BAIT_IGNORE_ENVIRONMENT" = TRAIT_BAIT_IGNORE_ENVIRONMENT, "TRAIT_BAIT_UNCONSUMABLE" = TRAIT_BAIT_UNCONSUMABLE, "TRAIT_BAKEABLE" = TRAIT_BAKEABLE, "TRAIT_BASIC_QUALITY_BAIT" = TRAIT_BASIC_QUALITY_BAIT, @@ -554,6 +569,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CUSTOM_TAP_SOUND" = TRAIT_CUSTOM_TAP_SOUND, "TRAIT_DANGEROUS_OBJECT" = TRAIT_DANGEROUS_OBJECT, "TRAIT_FISHING_BAIT" = TRAIT_FISHING_BAIT, + "TRAIT_FOOD_BBQ_GRILLED" = TRAIT_FOOD_BBQ_GRILLED, "TRAIT_GERM_SENSITIVE" = TRAIT_GERM_SENSITIVE, "TRAIT_GOOD_QUALITY_BAIT" = TRAIT_GOOD_QUALITY_BAIT, "TRAIT_GREAT_QUALITY_BAIT" = TRAIT_GREAT_QUALITY_BAIT, @@ -570,10 +586,14 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NODROP" = TRAIT_NODROP, "TRAIT_OMNI_BAIT" = TRAIT_OMNI_BAIT, "TRAIT_PLANT_WILDMUTATE" = TRAIT_PLANT_WILDMUTATE, + "TRAIT_POISONOUS_BAIT" = TRAIT_POISONOUS_BAIT, "TRAIT_T_RAY_VISIBLE" = TRAIT_T_RAY_VISIBLE, "TRAIT_TRANSFORM_ACTIVE" = TRAIT_TRANSFORM_ACTIVE, "TRAIT_UNCATCHABLE" = TRAIT_UNCATCHABLE, + "TRAIT_UNCOMPOSTABLE" = TRAIT_UNCOMPOSTABLE, + "TRAIT_UNIQUE_AQUARIUM_CONTENT" = TRAIT_UNIQUE_AQUARIUM_CONTENT, "TRAIT_WIELDED" = TRAIT_WIELDED, + "TRAIT_TORPOR" = TRAIT_TORPOR, // BUBBER EDIT ), /obj/item/ammo_casing = list( "TRAIT_DART_HAS_INSERT" = TRAIT_DART_HAS_INSERT, @@ -603,18 +623,27 @@ GLOBAL_LIST_INIT(traits_by_type, list( /obj/item/fish = list( "TRAIT_FISH_AMPHIBIOUS" = TRAIT_FISH_AMPHIBIOUS, "TRAIT_FISH_CROSSBREEDER" = TRAIT_FISH_CROSSBREEDER, + "TRAIT_FISH_ELECTROGENESIS" = TRAIT_FISH_ELECTROGENESIS, "TRAIT_FISH_FED_LUBE" = TRAIT_FISH_FED_LUBE, "TRAIT_FISH_FLOPPING" = TRAIT_FISH_FLOPPING, "TRAIT_FISH_FROM_CASE" = TRAIT_FISH_FROM_CASE, + "TRAIT_FISH_INK_ON_COOLDOWN" = TRAIT_FISH_INK_ON_COOLDOWN, "TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER, "TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING, + "TRAIT_FISH_RECESSIVE" = TRAIT_FISH_RECESSIVE, "TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE, + "TRAIT_FISH_SHOULD_TWOHANDED" = TRAIT_FISH_SHOULD_TWOHANDED, "TRAIT_FISH_STASIS" = TRAIT_FISH_STASIS, + "TRAIT_FISH_STINGER" = TRAIT_FISH_STINGER, + "TRAIT_FISH_SURVIVE_COOKING" = TRAIT_FISH_SURVIVE_COOKING, "TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE, - "TRAIT_FISH_ELECTROGENESIS" = TRAIT_FISH_ELECTROGENESIS, "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, + "TRAIT_FISH_WELL_COOKED" = TRAIT_FISH_WELL_COOKED, "TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH, ), + /obj/item/fishing_rod = list( + "TRAIT_ROD_REMOVE_FISHING_DUD" = TRAIT_ROD_REMOVE_FISHING_DUD, + ), /obj/item/integrated_circuit = list( "TRAIT_CIRCUIT_UI_OPEN" = TRAIT_CIRCUIT_UI_OPEN, "TRAIT_CIRCUIT_UNDUPABLE" = TRAIT_CIRCUIT_UNDUPABLE, @@ -648,9 +677,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( /obj/machinery/modular_computer = list( "TRAIT_MODPC_INTERACTING_WITH_FRAME" = TRAIT_MODPC_INTERACTING_WITH_FRAME, ), - /obj/projectile = list( - "TRAIT_ALWAYS_HIT_ZONE" = TRAIT_ALWAYS_HIT_ZONE, - ), /obj/structure = list( "TRAIT_RADSTORM_IMMUNE" = TRAIT_RADSTORM_IMMUNE, ), @@ -665,7 +691,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CONTAINMENT_FIELD" = TRAIT_CONTAINMENT_FIELD, "TRAIT_ELEVATED_TURF" = TRAIT_ELEVATED_TURF, "TRAIT_FIREDOOR_STOP" = TRAIT_FIREDOOR_STOP, - "TRAIT_FISHING_SPOT" = TRAIT_FISHING_SPOT, "TRAIT_HYPERSPACE_STOPPED" = TRAIT_HYPERSPACE_STOPPED, "TRAIT_IMMERSE_STOPPED" = TRAIT_IMMERSE_STOPPED, "TRAIT_LAVA_STOPPED" = TRAIT_LAVA_STOPPED, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 2781f96c46e41..7e6e0dbf7e643 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -4,8 +4,9 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( /atom = list( - "TRAIT_UNHITTABLE_BY_PROJECTILES" = TRAIT_UNHITTABLE_BY_PROJECTILES, + "TRAIT_CATCH_AND_RELEASE" = TRAIT_CATCH_AND_RELEASE, "TRAIT_KEEP_TOGETHER" = TRAIT_KEEP_TOGETHER, + "TRAIT_UNHITTABLE_BY_PROJECTILES" = TRAIT_UNHITTABLE_BY_PROJECTILES, ), /atom/movable = list( "TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE, @@ -20,12 +21,13 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, "TRAIT_SCARY_FISHERMAN" = TRAIT_SCARY_FISHERMAN, "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_ACT_AS_CULTIST" = TRAIT_ACT_AS_CULTIST, + "TRAIT_ACT_AS_HERETIC" = TRAIT_ACT_AS_HERETIC, "TRAIT_ADVANCEDTOOLUSER" = TRAIT_ADVANCEDTOOLUSER, "TRAIT_AGENDER" = TRAIT_AGENDER, "TRAIT_AGEUSIA" = TRAIT_AGEUSIA, @@ -100,6 +102,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_FAT" = TRAIT_FAT, "TRAIT_FEARLESS" = TRAIT_FEARLESS, "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, + "TRAIT_FISH_EATER" = TRAIT_FISH_EATER, "TRAIT_FIST_MINING" = TRAIT_FIST_MINING, "TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS, "TRAIT_FLESH_DESIRE" = TRAIT_FLESH_DESIRE, @@ -116,6 +119,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_GARLIC_BREATH" = TRAIT_GARLIC_BREATH, "TRAIT_GENELESS" = TRAIT_GENELESS, "TRAIT_GIANT" = TRAIT_GIANT, + "TRAIT_GODMODE" = TRAIT_GODMODE, "TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING, "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, "TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED, @@ -259,7 +263,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, "TRAIT_SKITTISH" = TRAIT_SKITTISH, "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE, - "TRAIT_SLOW_FLIP" = TRAIT_SLOW_FLIP, "TRAIT_SMOKER" = TRAIT_SMOKER, "TRAIT_SNOB" = TRAIT_SNOB, "TRAIT_SOFTSPOKEN" = TRAIT_SOFTSPOKEN, @@ -300,6 +303,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_UNSTABLE" = TRAIT_UNSTABLE, "TRAIT_USED_DNA_VAULT" = TRAIT_USED_DNA_VAULT, "TRAIT_USES_SKINTONES" = TRAIT_USES_SKINTONES, + "TRAIT_VEGETARIAN" = TRAIT_VEGETARIAN, "TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS, "TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE, "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, @@ -334,16 +338,27 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_MAGNETIC_ID_CARD" = TRAIT_MAGNETIC_ID_CARD, ), /obj/item/fish = list( + "TRAIT_FISH_AMPHIBIOUS" = TRAIT_FISH_AMPHIBIOUS, "TRAIT_FISH_CROSSBREEDER" = TRAIT_FISH_CROSSBREEDER, + "TRAIT_FISH_ELECTROGENESIS" = TRAIT_FISH_ELECTROGENESIS, "TRAIT_FISH_FED_LUBE" = TRAIT_FISH_FED_LUBE, + "TRAIT_FISH_FROM_CASE" = TRAIT_FISH_FROM_CASE, + "TRAIT_FISH_INK_ON_COOLDOWN" = TRAIT_FISH_INK_ON_COOLDOWN, "TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER, "TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING, + "TRAIT_FISH_RECESSIVE" = TRAIT_FISH_RECESSIVE, "TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE, + "TRAIT_FISH_SHOULD_TWOHANDED" = TRAIT_FISH_SHOULD_TWOHANDED, "TRAIT_FISH_STASIS" = TRAIT_FISH_STASIS, + "TRAIT_FISH_STINGER" = TRAIT_FISH_STINGER, + "TRAIT_FISH_SURVIVE_COOKING" = TRAIT_FISH_SURVIVE_COOKING, "TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE, - "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, + "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, "TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH, ), + /obj/item/fishing_rod = list( + "TRAIT_ROD_REMOVE_FISHING_DUD" = TRAIT_ROD_REMOVE_FISHING_DUD, + ), /obj/item/organ/internal/liver = list( "TRAIT_BALLMER_SCIENTIST" = TRAIT_BALLMER_SCIENTIST, "TRAIT_COMEDY_METABOLISM" = TRAIT_COMEDY_METABOLISM, diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index e8399b2a8f21c..a06e6f562937b 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -7,7 +7,7 @@ Note that AI have no need for the adjacency proc, and so this proc is a lot cleaner. */ /mob/living/silicon/ai/DblClickOn(atom/A, params) - if(control_disabled || incapacitated()) + if(control_disabled || incapacitated) return if(ismob(A)) @@ -39,7 +39,7 @@ if(check_click_intercept(params,A)) return - if(control_disabled || incapacitated()) + if(control_disabled || incapacitated) return var/turf/pixel_turf = get_turf_pixel(A) @@ -158,6 +158,7 @@ /atom/proc/AICtrlShiftClick(mob/living/silicon/ai/user) return + /* Airlocks */ /obj/machinery/door/airlock/AICtrlClick(mob/living/silicon/ai/user) // Bolts doors if(obj_flags & EMAGGED) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 1d7e07f7b9912..ff9a1fc54eb1b 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -101,7 +101,7 @@ CtrlClickOn(A) return - if(incapacitated(IGNORE_RESTRAINTS|IGNORE_STASIS)) + if(INCAPACITATED_IGNORING(src, INCAPABLE_RESTRAINTS|INCAPABLE_STASIS)) return face_atom(A) @@ -400,15 +400,15 @@ mouse_opacity = MOUSE_OPACITY_OPAQUE screen_loc = "CENTER" -#define MAX_SAFE_BYOND_ICON_SCALE_TILES (MAX_SAFE_BYOND_ICON_SCALE_PX / world.icon_size) -#define MAX_SAFE_BYOND_ICON_SCALE_PX (33 * 32) //Not using world.icon_size on purpose. +#define MAX_SAFE_BYOND_ICON_SCALE_TILES (MAX_SAFE_BYOND_ICON_SCALE_PX / ICON_SIZE_ALL) +#define MAX_SAFE_BYOND_ICON_SCALE_PX (33 * 32) //Not using world.icon_size on purpose. //Ok well I trust you /atom/movable/screen/click_catcher/proc/UpdateGreed(view_size_x = 15, view_size_y = 15) var/icon/newicon = icon('icons/hud/screen_gen.dmi', "catcher") var/ox = min(MAX_SAFE_BYOND_ICON_SCALE_TILES, view_size_x) var/oy = min(MAX_SAFE_BYOND_ICON_SCALE_TILES, view_size_y) - var/px = view_size_x * world.icon_size - var/py = view_size_y * world.icon_size + var/px = view_size_x * ICON_SIZE_X + var/py = view_size_y * ICON_SIZE_Y var/sx = min(MAX_SAFE_BYOND_ICON_SCALE_PX, px) var/sy = min(MAX_SAFE_BYOND_ICON_SCALE_PX, py) newicon.Scale(sx, sy) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 0e45825b6529f..ab5c29aa9d3c8 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -58,7 +58,7 @@ return if(W) - if(incapacitated()) + if(incapacitated) return //while buckled, you can still connect to and control things like doors, but you can't use your modules diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 84efaf77c5dc9..aaad7457f6d3c 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -2,7 +2,7 @@ icon = 'icons/hud/screen_ai.dmi' /atom/movable/screen/ai/Click() - if(isobserver(usr) || usr.incapacitated()) + if(isobserver(usr) || usr.incapacitated) return TRUE /atom/movable/screen/ai/aicore diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index d477195a603ab..5e4ee1e849dbb 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -435,7 +435,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." if(!QDELETED(rube) && !QDELETED(offerer)) offerer.visible_message(span_danger("[offerer] pulls away from [rube]'s slap at the last second, dodging the high-five entirely!"), span_nicegreen("[rube] fails to make contact with your hand, making an utter fool of [rube.p_them()]self!"), span_hear("You hear a disappointing sound of flesh not hitting flesh!"), ignored_mobs=rube) to_chat(rube, span_userdanger("[uppertext("NO! [offerer] PULLS [offerer.p_their()] HAND AWAY FROM YOURS! YOU'RE TOO SLOW!")]")) - playsound(offerer, 'sound/weapons/thudswoosh.ogg', 100, TRUE, 1) + playsound(offerer, 'sound/items/weapons/thudswoosh.ogg', 100, TRUE, 1) rube.Knockdown(1 SECONDS) offerer.add_mood_event("high_five", /datum/mood_event/down_low) rube.add_mood_event("high_five", /datum/mood_event/too_slow) diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 476140acb1edd..b9a0e3bf655f4 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -59,14 +59,15 @@ H.leap_icon.screen_loc = ui_alien_storage_r static_inventory += H.leap_icon + floor_change = new /atom/movable/screen/floor_changer(null, src) + floor_change.icon = ui_style + floor_change.screen_loc = ui_above_intent + static_inventory += floor_change + using = new/atom/movable/screen/language_menu(null, src) using.screen_loc = ui_alien_language_menu static_inventory += using - using = new /atom/movable/screen/floor_menu(null, src) - using.screen_loc = ui_alien_floor_menu - static_inventory += using - using = new /atom/movable/screen/navigate(null, src) using.screen_loc = ui_alien_navigate_menu static_inventory += using diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 77d135ce2c663..bb2b9fcb14aee 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -10,6 +10,11 @@ action_intent.screen_loc = ui_combat_toggle static_inventory += action_intent + floor_change = new /atom/movable/screen/floor_changer(null, src) + floor_change.icon = ui_style + floor_change.screen_loc = ui_above_intent + static_inventory += floor_change + healths = new /atom/movable/screen/healths/alien(null, src) infodisplay += healths @@ -32,10 +37,6 @@ using.screen_loc = ui_alien_language_menu static_inventory += using - using = new /atom/movable/screen/floor_menu(null, src) - using.screen_loc = ui_alien_floor_menu - static_inventory += using - using = new /atom/movable/screen/navigate(null, src) using.screen_loc = ui_alien_navigate_menu static_inventory += using diff --git a/code/_onclick/hud/credits.dm b/code/_onclick/hud/credits.dm index 8cce372ce8397..24104bace2826 100644 --- a/code/_onclick/hud/credits.dm +++ b/code/_onclick/hud/credits.dm @@ -1,6 +1,6 @@ /* #define CREDIT_ROLL_SPEED 125 // BUBBER EDIT #define CREDIT_SPAWN_SPEED 10 -#define CREDIT_ANIMATE_HEIGHT (14 * world.icon_size) +#define CREDIT_ANIMATE_HEIGHT (14 * ICON_SIZE_Y) #define CREDIT_EASE_DURATION 22 #define CREDITS_PATH "[global.config.directory]/contributors.dmi" @@ -45,9 +45,9 @@ parent = P icon_state = credited maptext = MAPTEXT_PIXELLARI(credited) - maptext_x = world.icon_size + 8 - maptext_y = (world.icon_size / 2) - 4 - maptext_width = world.icon_size * 3 + maptext_x = ICON_SIZE_X + 8 + maptext_y = (ICON_SIZE_Y / 2) - 4 + maptext_width = ICON_SIZE_X * 3 var/matrix/M = matrix(transform) M.Translate(0, CREDIT_ANIMATE_HEIGHT) animate(src, transform = M, time = CREDIT_ROLL_SPEED) diff --git a/code/_onclick/hud/generic_dextrous.dm b/code/_onclick/hud/generic_dextrous.dm index aac5a2b75ccaa..4048fd91b16f6 100644 --- a/code/_onclick/hud/generic_dextrous.dm +++ b/code/_onclick/hud/generic_dextrous.dm @@ -33,6 +33,10 @@ action_intent.screen_loc = ui_combat_toggle static_inventory += action_intent + floor_change = new /atom/movable/screen/floor_changer(null, src) + floor_change.icon = 'icons/hud/screen_midnight.dmi' + static_inventory += floor_change + zone_select = new /atom/movable/screen/zone_sel(null, src) zone_select.icon = ui_style diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index e20c1ede2f663..9f90076a3ac71 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -91,10 +91,10 @@ using.icon = ui_style static_inventory += using - using = new /atom/movable/screen/floor_menu(null, src) - using.screen_loc = ui_ghost_floor_menu - using.icon = ui_style - static_inventory += using + floor_change = new /atom/movable/screen/floor_changer/vertical(null, src) + floor_change.icon = ui_style + floor_change.screen_loc = ui_ghost_floor_changer + static_inventory += floor_change /datum/hud/ghost/show_hud(version = 0, mob/viewmob) // don't show this HUD if observing; show the HUD of the observee diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 089d152aa6054..570540e6182ca 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -65,6 +65,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( var/atom/movable/screen/rest_icon var/atom/movable/screen/throw_icon var/atom/movable/screen/module_store_icon + var/atom/movable/screen/floor_change var/list/static_inventory = list() //the screen objects which are static var/list/toggleable_inventory = list() //the screen objects which can be hidden @@ -254,6 +255,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( zone_select = null pull_icon = null rest_icon = null + floor_change = null hand_slots.Cut() QDEL_LIST(toggleable_inventory) @@ -464,6 +466,13 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( return update_robot_modules_display() +/* BUBBER EDIT REMOVAL - We use a different lobby hud +/datum/hud/new_player/show_hud(version = 0, mob/viewmob) + . = ..() + if(.) + show_station_trait_buttons() +*/ + /datum/hud/proc/hidden_inventory_update() return @@ -587,7 +596,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( if(!our_client) position_action(button, button.linked_action.default_button_position) return - button.screen_loc = get_valid_screen_location(relative_to.screen_loc, world.icon_size, our_client.view_size.getView()) // Asks for a location adjacent to our button that won't overflow the map + button.screen_loc = get_valid_screen_location(relative_to.screen_loc, ICON_SIZE_ALL, our_client.view_size.getView()) // Asks for a location adjacent to our button that won't overflow the map button.location = relative_to.location @@ -751,14 +760,14 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( // We're primarially concerned about width here, if someone makes us 1x2000 I wish them a swift and watery death var/furthest_screen_loc = ButtonNumberToScreenCoords(column_max - 1) var/list/offsets = screen_loc_to_offset(furthest_screen_loc, owner_view) - if(offsets[1] > world.icon_size && offsets[1] < view_size[1] && offsets[2] > world.icon_size && offsets[2] < view_size[2]) // We're all good + if(offsets[1] > ICON_SIZE_X && offsets[1] < view_size[1] && offsets[2] > ICON_SIZE_Y && offsets[2] < view_size[2]) // We're all good return for(column_max in column_max - 1 to 1 step -1) // Yes I could do this by unwrapping ButtonNumberToScreenCoords, but I don't feel like it var/tested_screen_loc = ButtonNumberToScreenCoords(column_max) offsets = screen_loc_to_offset(tested_screen_loc, owner_view) // We've found a valid max length, pack it in - if(offsets[1] > world.icon_size && offsets[1] < view_size[1] && offsets[2] > world.icon_size && offsets[2] < view_size[2]) + if(offsets[1] > ICON_SIZE_X && offsets[1] < view_size[1] && offsets[2] > ICON_SIZE_Y && offsets[2] < view_size[2]) break // Use our newly resized column max refresh_actions() diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 73685812c868d..52e8c545d295b 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -80,15 +80,16 @@ using.icon = ui_style static_inventory += using - using = new /atom/movable/screen/floor_menu(null, src) - using.icon = ui_style - static_inventory += using - action_intent = new /atom/movable/screen/combattoggle/flashy(null, src) action_intent.icon = ui_style action_intent.screen_loc = ui_combat_toggle static_inventory += action_intent + floor_change = new /atom/movable/screen/floor_changer(null, src) + floor_change.icon = ui_style + floor_change.screen_loc = ui_human_floor_changer + static_inventory += floor_change + using = new /atom/movable/screen/mov_intent(null, src) using.icon = ui_style @@ -385,6 +386,8 @@ if(H.head) screenmob.client.screen -= H.head + + /datum/hud/human/persistent_inventory_update(mob/viewer) if(!mymob) return diff --git a/code/_onclick/hud/living.dm b/code/_onclick/hud/living.dm index 70084b1ecd9c6..d70d2f7d55d39 100644 --- a/code/_onclick/hud/living.dm +++ b/code/_onclick/hud/living.dm @@ -15,6 +15,10 @@ action_intent.screen_loc = ui_combat_toggle static_inventory += action_intent + floor_change = new /atom/movable/screen/floor_changer(null, src) + floor_change.icon = 'icons/hud/screen_midnight.dmi' + static_inventory += floor_change + combo_display = new /atom/movable/screen/combo(null, src) infodisplay += combo_display diff --git a/code/_onclick/hud/map_popups.dm b/code/_onclick/hud/map_popups.dm index f0277d187ff4d..bf524b6c8d906 100644 --- a/code/_onclick/hud/map_popups.dm +++ b/code/_onclick/hud/map_popups.dm @@ -105,8 +105,8 @@ if(!popup_name) return clear_map("[popup_name]_map") - var/x_value = world.icon_size * tilesize * width - var/y_value = world.icon_size * tilesize * height + var/x_value = ICON_SIZE_X * tilesize * width + var/y_value = ICON_SIZE_Y * tilesize * height var/map_name = create_popup(popup_name, title, x_value, y_value) var/atom/movable/screen/background/background = new diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index 2910a9f0cc829..cac1be97ae688 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -37,8 +37,8 @@ var/client/our_client = usr.client var/list/offset = screen_loc_to_offset(LAZYACCESS(modifiers, SCREEN_LOC)) if(snap2grid) //Discard Pixel Values - offset[1] = FLOOR(offset[1], world.icon_size) // drops any pixel offset - offset[2] = FLOOR(offset[2], world.icon_size) // drops any pixel offset + offset[1] = FLOOR(offset[1], ICON_SIZE_X) // drops any pixel offset + offset[2] = FLOOR(offset[2], ICON_SIZE_Y) // drops any pixel offset else //Normalise Pixel Values (So the object drops at the center of the mouse, not 16 pixels off) offset[1] += x_off offset[2] += y_off diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index 3f6a94bb40a8d..e4569881fe40c 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -7,6 +7,7 @@ /datum/hud/new_player ///Whether the menu is currently on the client's screen or not var/menu_hud_status = TRUE + var/list/shown_station_trait_buttons /datum/hud/new_player/New(mob/owner) . = ..() @@ -27,31 +28,58 @@ if (!lobbyscreen.always_shown) lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_COLLAPSED, TYPE_PROC_REF(/atom/movable/screen/lobby, collapse_button)) lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_EXPANDED, TYPE_PROC_REF(/atom/movable/screen/lobby, expand_button)) - if (istype(lobbyscreen, /atom/movable/screen/lobby/button)) - var/atom/movable/screen/lobby/button/lobby_button = lobbyscreen - lobby_button.owner = REF(owner) - add_station_trait_buttons() -/// Display buttons for relevant station traits -/datum/hud/new_player/proc/add_station_trait_buttons() +/// Load and then display the buttons for relevant station traits +/datum/hud/new_player/proc/show_station_trait_buttons() if (!mymob?.client || mymob.client.interviewee || !length(GLOB.lobby_station_traits)) return - var/buttons_created = 0 - var/y_offset = 397 - var/y_button_offset = 27 for (var/datum/station_trait/trait as anything in GLOB.lobby_station_traits) - if (!trait.can_display_lobby_button(mymob.client)) + if (QDELETED(trait) || !trait.can_display_lobby_button(mymob.client)) + remove_station_trait_button(trait) + continue + if(LAZYACCESS(shown_station_trait_buttons, trait)) continue var/atom/movable/screen/lobby/button/sign_up/sign_up_button = new(our_hud = src) - sign_up_button.SlowInit() - sign_up_button.owner = REF(mymob) - sign_up_button.screen_loc = offset_to_screen_loc(233, y_offset, mymob.client.view) - y_offset += y_button_offset - static_inventory += sign_up_button trait.setup_lobby_button(sign_up_button) - buttons_created++ - if (buttons_created >= MAX_STATION_TRAIT_BUTTONS_VERTICAL) - return + static_inventory |= sign_up_button + LAZYSET(shown_station_trait_buttons, trait, sign_up_button) + RegisterSignal(trait, COMSIG_QDELETING, PROC_REF(remove_station_trait_button)) + + place_station_trait_buttons() + +/// Display the buttosn for relevant station traits. +/datum/hud/new_player/proc/place_station_trait_buttons() + if(hud_version != HUD_STYLE_STANDARD || !mymob?.client) + return + + var/y_offset = 397 + var/x_offset = 233 + var/y_button_offset = 27 + var/x_button_offset = -27 + var/iteration = 0 + for(var/trait in shown_station_trait_buttons) + var/atom/movable/screen/lobby/button/sign_up/sign_up_button = shown_station_trait_buttons[trait] + iteration++ + sign_up_button.screen_loc = offset_to_screen_loc(x_offset, y_offset, mymob.client.view) + mymob.client.screen |= sign_up_button + if (iteration >= MAX_STATION_TRAIT_BUTTONS_VERTICAL) + iteration = 0 + y_offset = 397 + x_offset += x_button_offset + else + y_offset += y_button_offset + +/// Remove a station trait button, then re-order the rest. +/datum/hud/new_player/proc/remove_station_trait_button(datum/station_trait/trait) + SIGNAL_HANDLER + var/atom/movable/screen/lobby/button/sign_up/button = LAZYACCESS(shown_station_trait_buttons, trait) + if(!button) + return + LAZYREMOVE(shown_station_trait_buttons, trait) + UnregisterSignal(trait, COMSIG_QDELETING) + static_inventory -= button + qdel(button) + place_station_trait_buttons() /atom/movable/screen/lobby plane = SPLASHSCREEN_PLANE @@ -95,11 +123,9 @@ var/enabled = TRUE ///Is the button currently being hovered over with the mouse? var/highlighted = FALSE - /// The ref of the mob that owns this button. Only the owner can click on it. - var/owner /atom/movable/screen/lobby/button/Click(location, control, params) - if(owner != REF(usr)) + if(usr != get_mob()) return if(!usr.client || usr.client.interviewee) @@ -111,11 +137,10 @@ 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 return TRUE /atom/movable/screen/lobby/button/MouseEntered(location,control,params) - if(owner != REF(usr)) + if(usr != get_mob()) return if(!usr.client || usr.client.interviewee) @@ -126,7 +151,7 @@ update_appearance(UPDATE_ICON) /atom/movable/screen/lobby/button/MouseExited() - if(owner != REF(usr)) + if(usr != get_mob()) return if(!usr.client || usr.client.interviewee) @@ -210,13 +235,6 @@ if(!.) return var/mob/dead/new_player/new_player = hud.mymob - - // SKYRAT 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 - ready = !ready if(ready) new_player.ready = PLAYER_READY_TO_PLAY @@ -280,12 +298,6 @@ 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 - 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 - if(!LAZYACCESS(params2list(params), CTRL_CLICK)) GLOB.latejoin_menu.ui_interact(new_player) else diff --git a/code/_onclick/hud/parallax/parallax.dm b/code/_onclick/hud/parallax/parallax.dm index 0a3732e134fc4..ee266cd21e314 100755 --- a/code/_onclick/hud/parallax/parallax.dm +++ b/code/_onclick/hud/parallax/parallax.dm @@ -191,7 +191,7 @@ if(!offset_x && !offset_y && !force) return - var/glide_rate = round(world.icon_size / screenmob.glide_size * world.tick_lag, world.tick_lag) + var/glide_rate = round(ICON_SIZE_ALL / screenmob.glide_size * world.tick_lag, world.tick_lag) C.previous_turf = posobj var/largest_change = max(abs(offset_x), abs(offset_y)) @@ -273,7 +273,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) /atom/movable/screen/parallax_layer/Initialize(mapload, datum/hud/hud_owner, template = FALSE) . = ..() - // Parallax layers are independant of hud, they care about client + // Parallax layers are independent of hud, they care about client // Not doing this will just create a bunch of hard deletes set_new_hud(hud_owner = null) @@ -297,8 +297,8 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) /atom/movable/screen/parallax_layer/proc/update_o(view) if (!view) view = world.view - - var/static/parallax_scaler = world.icon_size / 480 + var/static/pixel_grid_size = ICON_SIZE_ALL * 15 + var/static/parallax_scaler = ICON_SIZE_ALL / pixel_grid_size // Turn the view size into a grid of correctly scaled overlays var/list/viewscales = getviewsize(view) @@ -311,8 +311,8 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) if(x == 0 && y == 0) continue var/mutable_appearance/texture_overlay = mutable_appearance(icon, icon_state) - texture_overlay.pixel_w += 480 * x - texture_overlay.pixel_z += 480 * y + texture_overlay.pixel_w += pixel_grid_size * x + texture_overlay.pixel_z += pixel_grid_size * y new_overlays += texture_overlay cut_overlays() add_overlay(new_overlays) @@ -335,7 +335,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/parallax_layer) /atom/movable/screen/parallax_layer/planet icon_state = "planet" blend_mode = BLEND_OVERLAY - absolute = TRUE //Status of seperation + absolute = TRUE //Status of separation speed = 3 layer = 30 diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm index b6ac49446fc80..f2cf8f4b21081 100644 --- a/code/_onclick/hud/picture_in_picture.dm +++ b/code/_onclick/hud/picture_in_picture.dm @@ -56,7 +56,7 @@ move_tab.icon_state = "move" move_tab.plane = HUD_PLANE var/matrix/M = matrix() - M.Translate(0, (height + 0.25) * world.icon_size) + M.Translate(0, (height + 0.25) * ICON_SIZE_Y) move_tab.transform = M add_overlay(move_tab) @@ -69,7 +69,7 @@ MA.plane = HUD_PLANE button_x.appearance = MA M = matrix() - M.Translate((max(4, width) - 0.75) * world.icon_size, (height + 0.25) * world.icon_size) + M.Translate((max(4, width) - 0.75) * ICON_SIZE_X, (height + 0.25) * ICON_SIZE_Y) button_x.transform = M vis_contents += button_x @@ -82,7 +82,7 @@ MA.plane = HUD_PLANE button_expand.appearance = MA M = matrix() - M.Translate(world.icon_size, (height + 0.25) * world.icon_size) + M.Translate(ICON_SIZE_X, (height + 0.25) * ICON_SIZE_Y) button_expand.transform = M vis_contents += button_expand @@ -95,7 +95,7 @@ MA.plane = HUD_PLANE button_shrink.appearance = MA M = matrix() - M.Translate(2 * world.icon_size, (height + 0.25) * world.icon_size) + M.Translate(2 * ICON_SIZE_X, (height + 0.25) * ICON_SIZE_Y) button_shrink.transform = M vis_contents += button_shrink @@ -103,7 +103,7 @@ if((width > 0) && (height > 0)) var/matrix/M = matrix() M.Scale(width + 0.5, height + 0.5) - M.Translate((width-1)/2 * world.icon_size, (height-1)/2 * world.icon_size) + M.Translate((width-1)/2 * ICON_SIZE_X, (height-1)/2 * ICON_SIZE_Y) standard_background.transform = M add_overlay(standard_background) @@ -115,7 +115,7 @@ src.width = width src.height = height - y_off = -height * world.icon_size - 16 + y_off = (-height * ICON_SIZE_Y) - (ICON_SIZE_Y / 2) cut_overlays() add_background() diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 6ee994cf79c89..24d31e2b96725 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -390,8 +390,8 @@ GLOBAL_LIST_EMPTY(radial_menus) if (user_space) var/turf/user_turf = get_turf(user) var/turf/anchor_turf = get_turf(anchor) - offset_x = (anchor_turf.x - user_turf.x) * world.icon_size + anchor.pixel_x - user.pixel_x - offset_y = (anchor_turf.y - user_turf.y) * world.icon_size + anchor.pixel_y - user.pixel_y + offset_x = (anchor_turf.x - user_turf.x) * ICON_SIZE_X + anchor.pixel_x - user.pixel_x + offset_y = (anchor_turf.y - user_turf.y) * ICON_SIZE_Y + anchor.pixel_y - user.pixel_y menu.show_to(user, offset_x, offset_y) menu.wait(user, anchor, require_near) var/answer = menu.selected_choice diff --git a/code/_onclick/hud/rendering/_render_readme.md b/code/_onclick/hud/rendering/_render_readme.md index 2c5e9875801b6..493b9c68491ee 100644 --- a/code/_onclick/hud/rendering/_render_readme.md +++ b/code/_onclick/hud/rendering/_render_readme.md @@ -8,11 +8,11 @@ ## Byond internal functionality This part of the guide will assume that you have read the byond reference entry for rendering at www.byond.com/docs/ref//#/{notes}/renderer -When you create an atom, this will always create an internal byond structure called an "appearance". This appearance you will likely be familiar with, as it is exposed through the /atom/var/appearance var. This appearance var holds data on how to render the object, ie what icon/icon_state/color etc it is using. Note that appearance vars will always copy, and do not hold a reference. When you update a var, for example lets pretend we add a filter, the appearance will be updated to include the filter. Note that, however, vis_contents objets are uniquely excluded from appearances. Then, when the filter is updated, the appearance will be recreated, and the atom marked as "dirty". After it has been updated, the SendMaps() function (sometimes also called maptick), which is a internal byond function that iterates over all objects in a clients view and in the clients.mob.contents, checks for "dirty" atoms, then resends any "dirty" appearances to clients as needed and unmarks them as dirty. This function is notoriosly slow, but we can see its tick usage through the world.map_cpu var. We can also avoid more complex checks checking whether an object is visible on a clients screen by using the TILE_BOUND appearance flag. +When you create an atom, this will always create an internal byond structure called an "appearance". This appearance you will likely be familiar with, as it is exposed through the /atom/var/appearance var. This appearance var holds data on how to render the object, ie what icon/icon_state/color etc it is using. Note that appearance vars will always copy, and do not hold a reference. When you update a var, for example lets pretend we add a filter, the appearance will be updated to include the filter. Note that, however, vis_contents objets are uniquely excluded from appearances. Then, when the filter is updated, the appearance will be recreated, and the atom marked as "dirty". After it has been updated, the SendMaps() function (sometimes also called maptick), which is a internal byond function that iterates over all objects in a clients view and in the clients.mob.contents, checks for "dirty" atoms, then resends any "dirty" appearances to clients as needed and unmarks them as dirty. This function is notoriously slow, but we can see its tick usage through the world.map_cpu var. We can also avoid more complex checks checking whether an object is visible on a clients screen by using the TILE_BOUND appearance flag. -Finally, we arrive at clientside behavior, where we have two main clientside functions: GetMapIcons, and Render. GetMapIcons is repsonsible for actual rendering calculations on the clientside, such as "Group Icons and Set bounds", which performs clientside calculations for transform matrixes. Note that particles here are handled in a separate thread and are not diplayed in the clientside profiler. Render handles the actual drawing of the screen. +Finally, we arrive at clientside behavior, where we have two main clientside functions: GetMapIcons, and Render. GetMapIcons is responsible for actual rendering calculations on the clientside, such as "Group Icons and Set bounds", which performs clientside calculations for transform matrixes. Note that particles here are handled in a separate thread and are not displayed in the clientside profiler. Render handles the actual drawing of the screen. -For debugging rendering issues its reccomended you do two things: +For debugging rendering issues its recommended you do two things: A) Talk to someone who has inside knowledge(like lummox) about it, most of this is undocumented and bugs often B) Use the undocumented debug printer which reads of data on icons rendering, this is very dense but can be useful in some cases. To use: Right click top tab -> Options & Messages -> Client -> Command -> Enter ".debug profile mapicons" and press Enter -> go to your Byond directory and find BYOND/cfg/mapicons.json . Yes this is one giant one-line json. @@ -22,9 +22,9 @@ The following is an incomplete list of pitfalls that come from byond snowflake t 1. Transforms are very slow on clientside. This is not usually noticable, but if you start using large amounts of them it will grind you to a halt quickly, regardless of whether its on overlays or objs 2. The darkness plane. This is unused, as it doesn't work with our rendering format, so this section is purely academic. The darkness plane has specific variables it needs to render correctly, and these can be found in the plane masters file. it is composed internally of two parts, a black mask over the clients screen, and a non rendering mask that blocks all luminosity=0 turfs and their contents from rendering if the SEE_BLACKNESS flag is set properly. The blocker will always block rendering but the mask can be layered under other objects. 3. render_target/source. Render_target/source will only copy certain rendering instructions, and these are only defined as "etc." in the byond reference. Known non copied appearance vars include: blend_mode, plane, layer, vis_contents, mouse_opacity... -4. Large icons on the screen that peek over the edge will instead of only rendering partly like you would expect will instead stretch the screen while not adgusting the render buffer, which means that you can actively see as tiles and map objects are rendered. You can use this for an easy "offscreen" UI. +4. Large icons on the screen that peek over the edge will instead of only rendering partly like you would expect will instead stretch the screen while not adjusting the render buffer, which means that you can actively see as tiles and map objects are rendered. You can use this for an easy "offscreen" UI. 5. Numerically large filters on objects of any size will torpedo performance, even though large objects with small filters will perform massively better. (ie blur(size=20) BAD) -6. Texture Atlas: the texture atlas byond uses to render icons is very susceptible to corruption and can regularily replace icons with other icons or just not render at all. This can be exasperated by alt tabbing or pausing the dreamseeker process. +6. Texture Atlas: the texture atlas byond uses to render icons is very susceptible to corruption and can regularly replace icons with other icons or just not render at all. This can be exasperated by alt tabbing or pausing the dreamseeker process. 7. The renderer is awful code and lummox said he will try changing a large part of it for 515 so keep an eye on that 8. Byond uses DirectX 9 (Lummox said he wants to update to DirectX 11) 9. Particles are just fancy overlays and are not independent of their owner @@ -32,7 +32,7 @@ The following is an incomplete list of pitfalls that come from byond snowflake t 11. Displacement filter: The byond "displacement filter" does not, as the name would make you expect, use displacement maps, but instead uses normal maps. ## The rendering solution -One of the main issues with making pretty effects is how objects can only render to one plane, and how filters can only be applied to single objects. Quite simply it means we cant apply effects to multiple planes at once, and an effect to one plane only by treating it as a single unit: +One of the main issues with making pretty effects is how objects can only render to one plane, and how filters can only be applied to single objects. Quite simply it means we can't apply effects to multiple planes at once, and an effect to one plane only by treating it as a single unit: ![](https://raw.githubusercontent.com/tgstation/documentation-assets/main/rendering/renderpipe_old.png) @@ -50,8 +50,8 @@ Through these this allows us to treat planes as single objects, and lets us dist ## Render plates -The rendering system uses two objects to unify planes: render_relay and render_plates. Render relays use render_target/source and the relay_render_to_plane proc to replicate the plane master on the render relay. This render relay is then rendered onto a render_plate, which is a plane master that renders the render_relays onto itself. This plate can then be hierachically rendered with the same process until it reaches the master render_plate, which is the plate that will actually render to the player. These plates naturally in the byond style have quirks. For example, rendering to two plates will double any effects such as color or filters, and as such you need to carefully manage how you render them. Keep in mind as well that when sorting the layers for rendering on a plane that they should not be negative, this is handled automatically in relay_render_to_plane. When debugging note that mouse_opacity can act bizzarly with this method, such as only allowing you to click things that are layered over objects on a certain plane but auomatically setting the mouse_opacity should be handling this. Note that if you decide to manipulate a plane with internal byond objects that you will have to manually extrapolate the vars that are set if you want to render them to another plane (See blackness plane for example), and that this is not documented anywhere. +The rendering system uses two objects to unify planes: render_relay and render_plates. Render relays use render_target/source and the relay_render_to_plane proc to replicate the plane master on the render relay. This render relay is then rendered onto a render_plate, which is a plane master that renders the render_relays onto itself. This plate can then be hierarchically rendered with the same process until it reaches the master render_plate, which is the plate that will actually render to the player. These plates naturally in the byond style have quirks. For example, rendering to two plates will double any effects such as color or filters, and as such you need to carefully manage how you render them. Keep in mind as well that when sorting the layers for rendering on a plane that they should not be negative, this is handled automatically in relay_render_to_plane. When debugging note that mouse_opacity can act bizarrely with this method, such as only allowing you to click things that are layered over objects on a certain plane but automatically setting the mouse_opacity should be handling this. Note that if you decide to manipulate a plane with internal byond objects that you will have to manually extrapolate the vars that are set if you want to render them to another plane (See blackness plane for example), and that this is not documented anywhere. -Goodluck and godspeed with coding +Good luck and godspeed with coding - Just another contributor diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index b6ca3a1889fc6..5e165f1cc70ee 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -87,11 +87,6 @@ using.screen_loc = ui_borg_navigate_menu static_inventory += using -// Z-level floor change - using = new /atom/movable/screen/floor_menu(null, src) - using.screen_loc = ui_borg_floor_menu - static_inventory += using - //Radio using = new /atom/movable/screen/robot/radio(null, src) using.screen_loc = ui_borg_radio @@ -149,6 +144,11 @@ action_intent.screen_loc = ui_combat_toggle static_inventory += action_intent + floor_change = new /atom/movable/screen/floor_changer(null, src) + floor_change.icon = ui_style + floor_change.screen_loc = ui_borg_floor_changer + static_inventory += floor_change + //Health healths = new /atom/movable/screen/healths/robot(null, src) infodisplay += healths diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 9b8c56de83831..df330c0070b38 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -110,7 +110,7 @@ if(world.time <= usr.next_move) return 1 - if(usr.incapacitated()) + if(usr.incapacitated) return 1 if(ismob(usr)) @@ -143,7 +143,7 @@ screen_loc = ui_building /atom/movable/screen/area_creator/Click() - if(usr.incapacitated() || (isobserver(usr) && !isAdminGhostAI(usr))) + if(usr.incapacitated || (isobserver(usr) && !isAdminGhostAI(usr))) return TRUE var/area/A = get_area(usr) if(!A.outdoors) @@ -160,33 +160,6 @@ /atom/movable/screen/language_menu/Click() usr.get_language_holder().open_language_menu(usr) -/atom/movable/screen/floor_menu - name = "change floor" - icon = 'icons/hud/screen_midnight.dmi' - icon_state = "floor_change" - screen_loc = ui_floor_menu - -/atom/movable/screen/floor_menu/Initialize(mapload) - . = ..() - register_context() - -/atom/movable/screen/floor_menu/add_context(atom/source, list/context, obj/item/held_item, mob/user) - . = ..() - - context[SCREENTIP_CONTEXT_LMB] = "Go up a floor" - context[SCREENTIP_CONTEXT_RMB] = "Go down a floor" - return CONTEXTUAL_SCREENTIP_SET - -/atom/movable/screen/floor_menu/Click(location,control,params) - var/list/modifiers = params2list(params) - - if(LAZYACCESS(modifiers, RIGHT_CLICK) || LAZYACCESS(modifiers, ALT_CLICK)) - usr.down() - return - - usr.up() - return - /atom/movable/screen/inventory /// The identifier for the slot. It has nothing to do with ID cards. var/slot_id @@ -204,7 +177,7 @@ if(world.time <= usr.next_move) return TRUE - if(usr.incapacitated(IGNORE_STASIS)) + if(INCAPACITATED_IGNORING(usr, INCAPABLE_STASIS)) return TRUE if(ismecha(usr.loc)) // stops inventory actions in a mech return TRUE @@ -294,7 +267,7 @@ return TRUE if(world.time <= user.next_move) return TRUE - if(user.incapacitated()) + if(user.incapacitated) return TRUE if (ismecha(user.loc)) // stops inventory actions in a mech return TRUE @@ -380,6 +353,34 @@ icon = 'icons/hud/screen_cyborg.dmi' screen_loc = ui_borg_intents +/atom/movable/screen/floor_changer + name = "change floor" + icon = 'icons/hud/screen_midnight.dmi' + icon_state = "floor_change" + screen_loc = ui_floor_changer + var/vertical = FALSE + +/atom/movable/screen/floor_changer/Click(location,control,params) + var/list/modifiers = params2list(params) + + var/mouse_position + + if(vertical) + mouse_position = text2num(LAZYACCESS(modifiers, ICON_Y)) + else + mouse_position = text2num(LAZYACCESS(modifiers, ICON_X)) + + if(mouse_position > 16) + usr.up() + return + + usr.down() + return + +/atom/movable/screen/floor_changer/vertical + icon_state = "floor_change_v" + vertical = TRUE + /atom/movable/screen/spacesuit name = "Space suit cell status" icon_state = "spacesuit_0" @@ -471,7 +472,7 @@ if(world.time <= usr.next_move) return TRUE - if(usr.incapacitated()) + if(usr.incapacitated) return TRUE if(ismecha(usr.loc)) // stops inventory actions in a mech return TRUE diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 33de24c33614b..d0c6af5bba501 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -32,7 +32,7 @@ if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return TRUE if (SECONDARY_ATTACK_CONTINUE_CHAIN) - // Normal behavior + EMPTY_BLOCK_GUARD // Normal behavior else CRASH("pre_attack_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm") else @@ -51,7 +51,7 @@ if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return TRUE if (SECONDARY_ATTACK_CONTINUE_CHAIN) - // Normal behavior + EMPTY_BLOCK_GUARD // Normal behavior else CRASH("attackby_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm") else @@ -214,7 +214,7 @@ return FALSE if(!force && !HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND)) - playsound(src, 'sound/weapons/tap.ogg', get_clamped_volume(), TRUE, -1) + playsound(src, 'sound/items/weapons/tap.ogg', get_clamped_volume(), TRUE, -1) else if(hitsound) playsound(src, hitsound, get_clamped_volume(), TRUE, extrarange = stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 2f1465ac4ffe2..eab5f0a7cd9c9 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -109,11 +109,11 @@ if(!(interaction_flags_atom & INTERACT_ATOM_IGNORE_INCAPACITATED)) var/ignore_flags = NONE if(interaction_flags_atom & INTERACT_ATOM_IGNORE_RESTRAINED) - ignore_flags |= IGNORE_RESTRAINTS + ignore_flags |= INCAPABLE_RESTRAINTS if(!(interaction_flags_atom & INTERACT_ATOM_CHECK_GRAB)) - ignore_flags |= IGNORE_GRAB + ignore_flags |= INCAPABLE_GRAB - if(user.incapacitated(ignore_flags)) + if(INCAPACITATED_IGNORING(user, ignore_flags)) return FALSE return TRUE diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 22b22c54417c5..7a373cbdb60dc 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -115,9 +115,8 @@ /// 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_econ // log economy actions +// log subtler emotes +/datum/config_entry/flag/log_subtler //SKYRAT EDIT ADDITION /// log emotes /datum/config_entry/flag/log_emote @@ -317,13 +316,13 @@ /datum/config_entry/string/banappeals /datum/config_entry/string/wikiurl - default = "https://wiki.skyrat13.space/index.php" //SKYRAT EDIT - Original: "http://www.tgstation13.org/wiki" + default = "http://tgstation13.org/wiki" /datum/config_entry/string/forumurl default = "http://tgstation13.org/phpBB/index.php" /datum/config_entry/string/rulesurl - default = "http://www.tgstation13.org/wiki/Rules" + default = "http://tgstation13.org/wiki/Rules" /datum/config_entry/string/githuburl default = "https://www.github.com/tgstation/tgstation" @@ -742,3 +741,27 @@ /datum/config_entry/number/upload_limit_admin default = 5242880 min_val = 0 + +/// The minimum number of tallies a map vote entry can have. +/datum/config_entry/number/map_vote_minimum_tallies + default = 1 + min_val = 0 + max_val = 50 + +/// The flat amount all maps get by default +/datum/config_entry/number/map_vote_flat_bonus + default = 5 + min_val = 0 + max_val = INFINITY + +/// The maximum number of tallies a map vote entry can have. +/datum/config_entry/number/map_vote_maximum_tallies + default = 200 + min_val = 0 + max_val = INFINITY + +/// The number of tallies that are carried over between rounds. +/datum/config_entry/number/map_vote_tally_carryover_percentage + default = 100 + min_val = 0 + max_val = 100 diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 337bb5d3f8597..08ab4ae61cfa2 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -579,7 +579,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie //Anti-tick-contention heuristics: if (init_stage == INITSTAGE_MAX) - //if there are mutiple sleeping procs running before us hogging the cpu, we have to run later. + //if there are multiple sleeping procs running before us hogging the cpu, we have to run later. // (because sleeps are processed in the order received, longer sleeps are more likely to run first) if (starting_tick_usage > TICK_LIMIT_MC) //if there isn't enough time to bother doing anything this tick, sleep a bit. sleep_delta *= 2 diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 63bee7bb22ea9..4bde26e3c9d10 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -19,7 +19,7 @@ /// Time to wait (in deciseconds) between each call to fire(). Must be a positive integer. var/wait = 20 - /// Priority Weight: When mutiple subsystems need to run in the same tick, higher priority subsystems will be given a higher share of the tick before MC_TICK_CHECK triggers a sleep, higher priority subsystems also run before lower priority subsystems + /// Priority Weight: When multiple subsystems need to run in the same tick, higher priority subsystems will be given a higher share of the tick before MC_TICK_CHECK triggers a sleep, higher priority subsystems also run before lower priority subsystems var/priority = FIRE_PRIORITY_DEFAULT /// [Subsystem Flags][SS_NO_INIT] to control binary behavior. Flags must be set at compile time or before preinit finishes to take full effect. (You can also restart the mc to force them to process again) @@ -272,7 +272,7 @@ /datum/controller/subsystem/proc/OnConfigLoad() /** - * Used to initialize the subsystem. This is expected to be overriden by subtypes. + * Used to initialize the subsystem. This is expected to be overridden by subtypes. */ /datum/controller/subsystem/Initialize() return SS_INIT_NONE diff --git a/code/controllers/subsystem/ai_controllers.dm b/code/controllers/subsystem/ai_controllers.dm index 087aa828165b2..8a5eb43bfc9dd 100644 --- a/code/controllers/subsystem/ai_controllers.dm +++ b/code/controllers/subsystem/ai_controllers.dm @@ -8,13 +8,10 @@ SUBSYSTEM_DEF(ai_controllers) runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME ///type of status we are interested in running var/planning_status = AI_STATUS_ON - /// The tick cost of all active AI, calculated on fire. - - var/cost_on - /// The tick cost of all idle AI, calculated on fire. - var/cost_idle - + /// The average tick cost of all active AI, calculated on fire. var/our_cost + /// The tick cost of all currently processed AI, being summed together + var/summing_cost /datum/controller/subsystem/ai_controllers/Initialize() setup_subtrees() @@ -26,18 +23,25 @@ SUBSYSTEM_DEF(ai_controllers) return ..() /datum/controller/subsystem/ai_controllers/fire(resumed) + if(!resumed) + summing_cost = 0 var/timer = TICK_USAGE_REAL for(var/datum/ai_controller/ai_controller as anything in GLOB.ai_controllers_by_status[planning_status]) - if(!COOLDOWN_FINISHED(ai_controller, failed_planning_cooldown)) - continue - - if(!ai_controller.able_to_plan()) + if(!ai_controller.able_to_plan) continue ai_controller.SelectBehaviors(wait * 0.1) - if(!LAZYLEN(ai_controller.current_behaviors)) //Still no plan - COOLDOWN_START(ai_controller, failed_planning_cooldown, AI_FAILED_PLANNING_COOLDOWN) - our_cost = MC_AVERAGE(our_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(!length(ai_controller.current_behaviors)) //Still no plan + ai_controller.planning_failed() + + if(MC_TICK_CHECK) + break + + summing_cost += TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer) + if(MC_TICK_CHECK) + return + + our_cost = MC_AVERAGE(our_cost, summing_cost) ///Creates all instances of ai_subtrees and assigns them to the ai_subtrees list. /datum/controller/subsystem/ai_controllers/proc/setup_subtrees() diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 4557e153db190..bbc21becc0f3b 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -488,29 +488,26 @@ SUBSYSTEM_DEF(air) T.excited = FALSE ///Adds a turf to active processing, handles duplicates. Call this with blockchanges == TRUE if you want to nuke the assoc excited group -/datum/controller/subsystem/air/proc/add_to_active(turf/open/T, blockchanges = FALSE) - if(istype(T) && T.air) - T.significant_share_ticker = 0 - if(blockchanges && T.excited_group) //This is used almost exclusivly for shuttles, so the excited group doesn't stay behind - T.excited_group.garbage_collect() //Nuke it - if(T.excited) //Don't keep doing it if there's no point +/datum/controller/subsystem/air/proc/add_to_active(turf/open/activate, blockchanges = FALSE) + if(istype(activate) && activate.air) + activate.significant_share_ticker = 0 + if(blockchanges && activate.excited_group) //This is used almost exclusivly for shuttles, so the excited group doesn't stay behind + activate.excited_group.garbage_collect() //Nuke it + if(activate.excited) //Don't keep doing it if there's no point return #ifdef VISUALIZE_ACTIVE_TURFS - T.add_atom_colour(COLOR_VIBRANT_LIME, TEMPORARY_COLOUR_PRIORITY) + activate.add_atom_colour(COLOR_VIBRANT_LIME, TEMPORARY_COLOUR_PRIORITY) #endif - T.excited = TRUE - active_turfs += T - if(currentpart == SSAIR_ACTIVETURFS) - currentrun += T - else if(T.flags_1 & INITIALIZED_1) - for(var/turf/S in T.atmos_adjacent_turfs) - add_to_active(S, TRUE) + activate.excited = TRUE + active_turfs += activate + else if(activate.flags_1 & INITIALIZED_1) + for(var/turf/neighbor as anything in activate.atmos_adjacent_turfs) + add_to_active(neighbor, TRUE) else if(map_loading) if(queued_for_activation) - queued_for_activation[T] = T - return + queued_for_activation[activate] = activate else - T.requires_activation = TRUE + activate.requires_activation = TRUE /datum/controller/subsystem/air/StartLoadingMap() LAZYINITLIST(queued_for_activation) @@ -560,8 +557,8 @@ SUBSYSTEM_DEF(air) if(enemy_tile.current_cycle == -INFINITE) continue // .air instead of .return_air() because we can guarantee that the proc won't do anything - if(potential_diff.air.compare(enemy_tile.air)) - //testing("Active turf found. Return value of compare(): [T.air.compare(enemy_tile.air)]") + if(potential_diff.air.compare(enemy_tile.air, MOLES)) + //testing("Active turf found. Return value of compare(): [T.air.compare(enemy_tile.air, MOLES)]") if(!potential_diff.excited) potential_diff.excited = TRUE SSair.active_turfs += potential_diff diff --git a/code/controllers/subsystem/ambience.dm b/code/controllers/subsystem/ambience.dm index 7258b0b16e948..87f088a41ea13 100644 --- a/code/controllers/subsystem/ambience.dm +++ b/code/controllers/subsystem/ambience.dm @@ -70,16 +70,16 @@ SUBSYSTEM_DEF(ambience) ///A list of rare sound effects to fuck with players. No, it does not contain actual minecraft sounds anymore. var/static/list/minecraft_cave_noises = list( - 'sound/machines/airlock.ogg', + 'sound/machines/airlock/airlock.ogg', 'sound/effects/snap.ogg', 'sound/effects/footstep/clownstep1.ogg', 'sound/effects/footstep/clownstep2.ogg', - 'sound/items/welder.ogg', - 'sound/items/welder2.ogg', - 'sound/items/crowbar.ogg', + 'sound/items/tools/welder.ogg', + 'sound/items/tools/welder2.ogg', + 'sound/items/tools/crowbar.ogg', 'sound/items/deconstruct.ogg', - 'sound/ambience/source_holehit3.ogg', - 'sound/ambience/cavesound3.ogg', + 'sound/ambience/misc/source_holehit3.ogg', + 'sound/ambience//misc/cavesound3.ogg', ) /area/station/maintenance/play_ambience(mob/M, sound/override_sound, volume) diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 71eaed14ea23f..20d5a093be6da 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -75,7 +75,7 @@ SUBSYSTEM_DEF(atoms) rustg_file_write(json_encode(mapload_init_times), "[GLOB.log_directory]/init_times.json") #endif -/// Actually creates the list of atoms. Exists soley so a runtime in the creation logic doesn't cause initalized to totally break +/// Actually creates the list of atoms. Exists solely so a runtime in the creation logic doesn't cause initialized to totally break /datum/controller/subsystem/atoms/proc/CreateAtoms(list/atoms, list/atoms_to_return = null, mapload_source = null) if (atoms_to_return) LAZYINITLIST(created_atoms) @@ -137,8 +137,8 @@ SUBSYSTEM_DEF(atoms) return null return initialized_state[state_length][1] -/// Use this to set initialized to prevent error states where the old initialized is overriden, and we end up losing all context -/// Accepts a state and a source, the most recent state is used, sources exist to prevent overriding old values accidentially +/// Use this to set initialized to prevent error states where the old initialized is overridden, and we end up losing all context +/// Accepts a state and a source, the most recent state is used, sources exist to prevent overriding old values accidentally /datum/controller/subsystem/atoms/proc/set_tracked_initalized(state, source) if(!length(initialized_state)) base_initialized = initialized diff --git a/code/controllers/subsystem/bitrunning.dm b/code/controllers/subsystem/bitrunning.dm index 78afb101945b0..63c2561f0f496 100644 --- a/code/controllers/subsystem/bitrunning.dm +++ b/code/controllers/subsystem/bitrunning.dm @@ -25,7 +25,7 @@ SUBSYSTEM_DEF(bitrunning) var/can_view_reward = domain.difficulty < (scanner_tier + 1) && domain.cost <= points + 3 UNTYPED_LIST_ADD(levels, list( - "announce_ghosts"= domain.announce_to_ghosts, + "announce_ghosts" = domain.announce_to_ghosts, "cost" = domain.cost, "desc" = can_view ? domain.desc : "Limited scanning capabilities. Cannot infer domain details.", "difficulty" = domain.difficulty, diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index afc9bff6aef1b..bdd6ae72c4748 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -158,6 +158,8 @@ SUBSYSTEM_DEF(blackbox) record_feedback("tally", "radio_usage", 1, "centcom") if(FREQ_AI_PRIVATE) record_feedback("tally", "radio_usage", 1, "ai private") + if(FREQ_ENTERTAINMENT) + record_feedback("tally", "radio_usage", 1, "entertainment") if(FREQ_CTF_RED) record_feedback("tally", "radio_usage", 1, "CTF red team") if(FREQ_CTF_BLUE) @@ -366,7 +368,7 @@ Versioning "z_coord" = L.z, "last_words" = L.last_words, "suicide" = did_they_suicide, - "map" = SSmapping.config.map_name, + "map" = SSmapping.current_map.map_name, "server_name" = CONFIG_GET(string/serversqlname), // SKYRAT EDIT ADDITION - MULTISERVER "internet_address" = world.internet_address || "0", "port" = "[world.port]", diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm index 38fc792bf382f..feafd6e43ecb2 100644 --- a/code/controllers/subsystem/dynamic/dynamic.dm +++ b/code/controllers/subsystem/dynamic/dynamic.dm @@ -140,10 +140,10 @@ SUBSYSTEM_DEF(dynamic) /// 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? + /// What is the lower bound of when the roundstart announcement is sent out? var/waittime_l = 600 - /// What is the higher bound of when the roundstart annoucement is sent out? + /// What is the higher bound of when the roundstart announcement is sent out? var/waittime_h = 1800 /// A number between 0 and 100. The maximum amount of threat allowed to generate. @@ -526,7 +526,7 @@ SUBSYSTEM_DEF(dynamic) //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) + SSjob.divide_occupations(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()) @@ -541,7 +541,7 @@ SUBSYSTEM_DEF(dynamic) else roundstart_pop_ready++ candidates.Add(player) - SSjob.ResetOccupations() + SSjob.reset_occupations() log_dynamic("Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.") if (candidates.len <= 0) log_dynamic("[candidates.len] candidates.") @@ -1033,7 +1033,7 @@ SUBSYSTEM_DEF(dynamic) var/list/reopened_jobs = list() for(var/mob/living/quitter in GLOB.suicided_mob_list) - var/datum/job/job = SSjob.GetJob(quitter.job) + var/datum/job/job = SSjob.get_job(quitter.job) if(!job || !(job.job_flags & JOB_REOPEN_ON_ROUNDSTART_LOSS)) continue if(!include_command && job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm index 8460307009ec3..17939cf426a8c 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm @@ -293,7 +293,7 @@ if(length(exclusive_roles)) var/exclusive_candidate = FALSE for(var/role in exclusive_roles) - var/datum/job/job = SSjob.GetJob(role) + var/datum/job/job = SSjob.get_job(role) if((role in candidate_client.prefs.job_preferences) && SSjob.check_job_eligibility(candidate_player, job, "Dynamic Roundstart TC", add_job_to_log = TRUE) == JOB_AVAILABLE) exclusive_candidate = TRUE diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm index fb7b7db9bb907..69154815ebcc2 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm @@ -421,7 +421,7 @@ 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.set_assigned_role(SSjob.get_job_type(/datum/job/nuclear_operative)) new_character.mind.special_role = ROLE_NUCLEAR_OPERATIVE if(index == 1) var/datum/antagonist/nukeop/leader/leader_antag_datum = new() @@ -580,12 +580,12 @@ 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.set_assigned_role(SSjob.get_job_type(/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) + playsound(new_nightmare, 'sound/effects/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 @@ -626,7 +626,7 @@ player_mind.transfer_to(S) player_mind.add_antag_datum(/datum/antagonist/space_dragon) - playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) + playsound(S, 'sound/effects/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") @@ -938,7 +938,7 @@ new_datum.original_ref = WEAKREF(clone_victim.mind) new_datum.setup_clone() - playsound(clone, 'sound/weapons/zapbang.ogg', 30, TRUE) + playsound(clone, 'sound/items/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.") @@ -999,11 +999,11 @@ var/mob/living/carbon/human/voidwalker = new (space_turf) player_mind.transfer_to(voidwalker) - player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/voidwalker)) + player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/voidwalker)) player_mind.special_role = antag_flag player_mind.add_antag_datum(antag_datum) - playsound(voidwalker, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) + playsound(voidwalker, 'sound/effects/magic/ethereal_exit.ogg', 50, TRUE, -1) message_admins("[ADMIN_LOOKUPFLW(voidwalker)] has been made into a Voidwalker by the midround ruleset.") log_dynamic("[key_name(voidwalker)] was spawned as a Voidwalker by the midround ruleset.") return voidwalker diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm index 561719ed70e47..1e54033357385 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm @@ -63,7 +63,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) flags = HIGH_IMPACT_RULESET /datum/dynamic_ruleset/roundstart/malf_ai/ready(forced) - var/datum/job/ai_job = SSjob.GetJobType(/datum/job/ai) + var/datum/job/ai_job = SSjob.get_job_type(/datum/job/ai) // If we're not forced, we're going to make sure we can actually have an AI in this shift, if(!forced && min(ai_job.total_positions - ai_job.current_positions, ai_job.spawn_positions) <= 0) @@ -75,7 +75,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) /datum/dynamic_ruleset/roundstart/malf_ai/pre_execute(population) . = ..() - var/datum/job/ai_job = SSjob.GetJobType(/datum/job/ai) + var/datum/job/ai_job = SSjob.get_job_type(/datum/job/ai) // Maybe a bit too pedantic, but there should never be more malf AIs than there are available positions, spawn positions or antag cap allocations. var/num_malf = min(get_antag_cap(population), min(ai_job.total_positions - ai_job.current_positions, ai_job.spawn_positions)) for (var/i in 1 to num_malf) @@ -297,7 +297,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) var/mob/M = pick_n_take(candidates) if (M) assigned += M.mind - M.mind.set_assigned_role(SSjob.GetJobType(/datum/job/space_wizard)) + M.mind.set_assigned_role(SSjob.get_job_type(/datum/job/space_wizard)) M.mind.special_role = ROLE_WIZARD return TRUE @@ -430,7 +430,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) break var/mob/M = pick_n_take(candidates) assigned += M.mind - M.mind.set_assigned_role(SSjob.GetJobType(job_type)) + M.mind.set_assigned_role(SSjob.get_job_type(job_type)) M.mind.special_role = required_role return TRUE diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index d21286d93bf71..801bc69761ee7 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -15,6 +15,7 @@ SUBSYSTEM_DEF(economy) ACCOUNT_CAR = ACCOUNT_CAR_NAME, ACCOUNT_CMD = ACCOUNT_CMD_NAME, // SKYRAT EDIT ACCOUNT_INT = ACCOUNT_INT_NAME, // BUBBER EDIT + ACCOUNT_TAR = ACCOUNT_TAR_NAME, // END BUBBER EDIT ACCOUNT_SEC = ACCOUNT_SEC_NAME) var/list/departmental_accounts = list() /** diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index 31de67361bf20..8809e3772afac 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -352,7 +352,7 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec who_did_it = "\[Projectile firer: [ADMIN_LOOKUPFLW(fired_projectile.firer)]\]" who_did_it_game_log = "\[Projectile firer: [key_name(fired_projectile.firer)]\]" else - who_did_it = "\[Projectile firer: [ADMIN_LOOKUPFLW(fired_projectile.firer.fingerprintslast)]\]" + who_did_it = "\[Projectile firer: [ADMIN_LOOKUPFLW(fired_projectile.firer?.fingerprintslast)]\]" who_did_it_game_log = "\[Projectile firer: [key_name(fired_projectile.firer.fingerprintslast)]\]" // Otherwise if the explosion cause is an atom, try get the fingerprints. else if(istype(explosion_cause)) @@ -526,7 +526,7 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec * - [creaking_sound][/sound]: The sound that plays when the station creaks during the explosion. * - [hull_creaking_sound][/sound]: The sound that plays when the station creaks after the explosion. */ -/datum/controller/subsystem/explosions/proc/shake_the_room(turf/epicenter, near_distance, far_distance, quake_factor, echo_factor, creaking, sound/near_sound = sound(get_sfx(SFX_EXPLOSION)), sound/far_sound = sound('sound/effects/explosionfar.ogg'), sound/echo_sound = sound('sound/effects/explosion_distant.ogg'), sound/creaking_sound = sound(get_sfx(SFX_EXPLOSION_CREAKING)), hull_creaking_sound = sound(get_sfx(SFX_HULL_CREAKING))) +/datum/controller/subsystem/explosions/proc/shake_the_room(turf/epicenter, near_distance, far_distance, quake_factor, echo_factor, creaking, sound/near_sound = sound(get_sfx(SFX_EXPLOSION)), sound/far_sound = sound('sound/effects/explosion/explosionfar.ogg'), sound/echo_sound = sound('sound/effects/explosion/explosion_distant.ogg'), sound/creaking_sound = sound(get_sfx(SFX_EXPLOSION_CREAKING)), hull_creaking_sound = sound(get_sfx(SFX_HULL_CREAKING))) var/frequency = get_rand_frequency() var/blast_z = epicenter.z if(isnull(creaking)) // Autoset creaking. diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 706b4e51d690f..ad1b9e4132fed 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -346,6 +346,7 @@ SUBSYSTEM_DEF(garbage) /// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. /proc/qdel(datum/to_delete, force = FALSE) if(!istype(to_delete)) + DREAMLUAU_CLEAR_REF_USERDATA(to_delete) del(to_delete) return diff --git a/code/controllers/subsystem/id_access.dm b/code/controllers/subsystem/id_access.dm index 86f2e124a8f42..fdd0d3b68df56 100644 --- a/code/controllers/subsystem/id_access.dm +++ b/code/controllers/subsystem/id_access.dm @@ -291,7 +291,7 @@ SUBSYSTEM_DEF(id_access) desc_by_access["[ACCESS_VIROLOGY]"] = "Virology" desc_by_access["[ACCESS_PSYCHOLOGY]"] = "Psychology" desc_by_access["[ACCESS_CMO]"] = "CMO Office" - desc_by_access["[ACCESS_QM]"] = "Quartermaster" + desc_by_access["[ACCESS_QM]"] = "QM Office" desc_by_access["[ACCESS_SURGERY]"] = "Surgery" desc_by_access["[ACCESS_THEATRE]"] = "Theatre" desc_by_access["[ACCESS_RESEARCH]"] = "Science" @@ -399,6 +399,8 @@ SUBSYSTEM_DEF(id_access) id_card.clear_access() id_card.trim = trim + id_card.big_pointer = trim.big_pointer + id_card.pointer_color = trim.pointer_color if(copy_access) id_card.access = trim.access.Copy() @@ -408,6 +410,12 @@ SUBSYSTEM_DEF(id_access) if(trim.assignment) id_card.assignment = trim.assignment + var/datum/job/trim_job = trim.find_job() + if (!isnull(id_card.registered_account)) + var/datum/job/old_job = id_card.registered_account.account_job + id_card.registered_account.account_job = trim_job + id_card.registered_account.update_account_job_lists(trim_job, old_job) + id_card.update_label() id_card.update_icon() @@ -442,6 +450,8 @@ SUBSYSTEM_DEF(id_access) id_card.department_color_override = trim.department_color id_card.department_state_override = trim.department_state id_card.subdepartment_color_override = trim.subdepartment_color + id_card.big_pointer = trim.big_pointer + id_card.pointer_color = trim.pointer_color if(!check_forged || !id_card.forged) id_card.assignment = trim.assignment @@ -462,6 +472,8 @@ SUBSYSTEM_DEF(id_access) id_card.department_color_override = null id_card.department_state_override = null id_card.subdepartment_color_override = null + id_card.big_pointer = id_card.trim.big_pointer + id_card.pointer_color = id_card.trim.pointer_color /** * Adds the accesses associated with a trim to an ID card. diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 427a9614c44bb..3eed78a892ac1 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -22,7 +22,7 @@ SUBSYSTEM_DEF(job) var/list/unassigned = list() //Players who need jobs var/initial_players_to_assign = 0 //used for checking against population caps - // Whether to run DivideOccupations pure so that there are no side-effects from calling it other than + // Whether to run divide_occupations pure so that there are no side-effects from calling it other than // a player's assigned_role being set to some value. var/run_divide_occupation_pure = FALSE @@ -31,7 +31,7 @@ SUBSYSTEM_DEF(job) var/overflow_role = /datum/job/assistant - var/list/level_order = list(JP_HIGH,JP_MEDIUM,JP_LOW) + var/list/level_order = list(JP_HIGH, JP_MEDIUM, JP_LOW) /// Lazylist of mob:occupation_string pairs. var/list/dynamic_forced_occupations @@ -88,7 +88,7 @@ SUBSYSTEM_DEF(job) setup_job_lists() job_config_datum_singletons = generate_config_singletons() // we set this up here regardless in case someone wants to use the verb to generate the config file. if(!length(all_occupations)) - SetupOccupations() + setup_occupations() if(CONFIG_GET(flag/load_jobs_from_txt)) load_jobs_from_config() set_overflow_role(CONFIG_GET(string/overflow_job)) // this must always go after load_jobs_from_config() due to how the legacy systems operate, this always takes precedent. @@ -108,9 +108,9 @@ SUBSYSTEM_DEF(job) return overflow_jobs /datum/controller/subsystem/job/proc/set_overflow_role(new_overflow_role) - var/datum/job/new_overflow = ispath(new_overflow_role) ? GetJobType(new_overflow_role) : GetJob(new_overflow_role) + var/datum/job/new_overflow = ispath(new_overflow_role) ? get_job_type(new_overflow_role) : get_job(new_overflow_role) if(!new_overflow) - JobDebug("Failed to set new overflow role: [new_overflow_role]") + job_debug("SET_OVRFLW: Failed to set new overflow role: [new_overflow_role]") CRASH("set_overflow_role failed | new_overflow_role: [isnull(new_overflow_role) ? "null" : new_overflow_role]") var/cap = CONFIG_GET(number/overflow_cap) @@ -121,17 +121,16 @@ SUBSYSTEM_DEF(job) if(new_overflow.type == overflow_role) return - var/datum/job/old_overflow = GetJobType(overflow_role) + var/datum/job/old_overflow = get_job_type(overflow_role) old_overflow.allow_bureaucratic_error = initial(old_overflow.allow_bureaucratic_error) old_overflow.spawn_positions = initial(old_overflow.spawn_positions) old_overflow.total_positions = initial(old_overflow.total_positions) if(!(initial(old_overflow.job_flags) & JOB_CANNOT_OPEN_SLOTS)) old_overflow.job_flags &= ~JOB_CANNOT_OPEN_SLOTS overflow_role = new_overflow.type - JobDebug("Overflow role set to : [new_overflow.type]") + job_debug("SET_OVRFLW: Overflow role set to: [new_overflow.type]") - -/datum/controller/subsystem/job/proc/SetupOccupations() +/datum/controller/subsystem/job/proc/setup_occupations() name_occupations = list() type_occupations = list() @@ -205,20 +204,20 @@ SUBSYSTEM_DEF(job) return TRUE -/datum/controller/subsystem/job/proc/GetJob(rank) +/datum/controller/subsystem/job/proc/get_job(rank) if(!length(all_occupations)) - SetupOccupations() + setup_occupations() return name_occupations[rank] -/datum/controller/subsystem/job/proc/GetJobType(jobtype) +/datum/controller/subsystem/job/proc/get_job_type(jobtype) RETURN_TYPE(/datum/job) if(!length(all_occupations)) - SetupOccupations() + setup_occupations() return type_occupations[jobtype] /datum/controller/subsystem/job/proc/get_department_type(department_type) if(!length(all_occupations)) - SetupOccupations() + setup_occupations() return joinable_departments_by_type[department_type] /** @@ -230,95 +229,98 @@ SUBSYSTEM_DEF(job) * * latejoin - Set to TRUE if this is a latejoin role assignment. * * do_eligibility_checks - Set to TRUE to conduct all job eligibility tests and reject on failure. Set to FALSE if job eligibility has been tested elsewhere and they can be safely skipped. */ -/datum/controller/subsystem/job/proc/AssignRole(mob/dead/new_player/player, datum/job/job, latejoin = FALSE, do_eligibility_checks = TRUE) - JobDebug("Running AR, Player: [player], Job: [isnull(job) ? "null" : job], LateJoin: [latejoin]") +/datum/controller/subsystem/job/proc/assign_role(mob/dead/new_player/player, datum/job/job, latejoin = FALSE, do_eligibility_checks = TRUE) + job_debug("AR: Running, Player: [player], Job: [isnull(job) ? "null" : job], LateJoin: [latejoin]") if(!player?.mind || !job) - JobDebug("AR has failed, player has no mind or job is null, Player: [player], Rank: [isnull(job) ? "null" : job.type]") + job_debug("AR: Failed, player has no mind or job is null. Player: [player], Rank: [isnull(job) ? "null" : job.type]") return FALSE if(do_eligibility_checks && (check_job_eligibility(player, job, "AR", add_job_to_log = TRUE) != JOB_AVAILABLE)) return FALSE - JobDebug("Player: [player] is now Rank: [job.title], JCP:[job.current_positions], JPL:[latejoin ? job.total_positions : job.spawn_positions]") + job_debug("AR: Role now set and assigned - [player] is [job.title], JCP:[job.current_positions], JPL:[latejoin ? job.total_positions : job.spawn_positions]") player.mind.set_assigned_role(job) unassigned -= player job.current_positions++ return TRUE -/datum/controller/subsystem/job/proc/FindOccupationCandidates(datum/job/job, level) - JobDebug("Running FOC, Job: [job], Level: [job_priority_level_to_string(level)]") +/datum/controller/subsystem/job/proc/find_occupation_candidates(datum/job/job, level = 0) + job_debug("FOC: Now running, Job: [job], Level: [job_priority_level_to_string(level)]") var/list/candidates = list() for(var/mob/dead/new_player/player in unassigned) if(!player) - JobDebug("FOC player no longer exists.") + job_debug("FOC: Player no longer exists.") continue + if(!player.client) - JobDebug("FOC player client no longer exists, Player: [player]") + job_debug("FOC: Player client no longer exists, Player: [player]") continue + // Initial screening check. Does the player even have the job enabled, if they do - Is it at the correct priority level? var/player_job_level = player.client?.prefs.job_preferences[job.title] if(isnull(player_job_level)) - JobDebug("FOC player job not enabled, Player: [player]") + job_debug("FOC: Player job not enabled, Player: [player]") continue - else if(player_job_level != level) - JobDebug("FOC player job enabled at wrong level, Player: [player], TheirLevel: [job_priority_level_to_string(player_job_level)], ReqLevel: [job_priority_level_to_string(level)]") + + if(level && (player_job_level != level)) + job_debug("FOC: Player job enabled at wrong level, Player: [player], TheirLevel: [job_priority_level_to_string(player_job_level)], ReqLevel: [job_priority_level_to_string(level)]") continue - // This check handles its own output to JobDebug. + // This check handles its own output to job_debug. if(check_job_eligibility(player, job, "FOC", add_job_to_log = FALSE) != JOB_AVAILABLE) continue // They have the job enabled, at this priority level, with no restrictions applying to them. - JobDebug("FOC pass, Player: [player], Level: [job_priority_level_to_string(level)]") + job_debug("FOC: Player eligible, Player: [player], Level: [job_priority_level_to_string(level)]") candidates += player return candidates -/datum/controller/subsystem/job/proc/GiveRandomJob(mob/dead/new_player/player) - JobDebug("GRJ Giving random job, Player: [player]") +/datum/controller/subsystem/job/proc/give_random_job(mob/dead/new_player/player) + job_debug("GRJ: Giving random job, Player: [player]") . = FALSE for(var/datum/job/job as anything in shuffle(joinable_occupations)) if(QDELETED(player)) - JobDebug("GRJ player is deleted, aborting") + job_debug("GRJ: Player is deleted, aborting") break if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1) - JobDebug("GRJ job lacks spawn positions to be eligible, Player: [player], Job: [job]") + job_debug("GRJ: Job lacks spawn positions to be eligible, Player: [player], Job: [job]") continue - if(istype(job, GetJobType(overflow_role))) // We don't want to give him assistant, that's boring! - JobDebug("GRJ skipping overflow role, Player: [player], Job: [job]") + if(istype(job, get_job_type(overflow_role))) // We don't want to give him assistant, that's boring! + job_debug("GRJ: Skipping overflow role, Player: [player], Job: [job]") continue if(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) //If you want a command position, select it! - JobDebug("GRJ skipping command role, Player: [player], Job: [job]") + job_debug("GRJ: Skipping command role, Player: [player], Job: [job]") continue //SKYRAT 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]") + job_debug("GRJ skipping Central Command role, Player: [player], Job: [job]") continue //SKYRAT EDIT END - // This check handles its own output to JobDebug. + // This check handles its own output to job_debug. if(check_job_eligibility(player, job, "GRJ", add_job_to_log = TRUE) != JOB_AVAILABLE) continue - if(AssignRole(player, job, do_eligibility_checks = FALSE)) - JobDebug("GRJ Random job given, Player: [player], Job: [job]") + if(assign_role(player, job, do_eligibility_checks = FALSE)) + job_debug("GRJ: Random job given, Player: [player], Job: [job]") return TRUE - JobDebug("GRJ Player eligible but AssignRole failed, Player: [player], Job: [job]") + job_debug("GRJ: Player eligible but assign_role failed, Player: [player], Job: [job]") -/datum/controller/subsystem/job/proc/ResetOccupations() - JobDebug("Occupations reset.") +/datum/controller/subsystem/job/proc/reset_occupations() + job_debug("RO: Occupations reset.") for(var/mob/dead/new_player/player as anything in GLOB.new_player_list) if(!player?.mind) continue - player.mind.set_assigned_role(GetJobType(/datum/job/unassigned)) + player.mind.set_assigned_role(get_job_type(/datum/job/unassigned)) player.mind.special_role = null - SetupOccupations() + setup_occupations() unassigned = list() if(CONFIG_GET(flag/load_jobs_from_txt)) // Any errors with the configs has already been said, we don't need to repeat them here. @@ -327,12 +329,11 @@ SUBSYSTEM_DEF(job) return -/** - * Will try to select a head, ignoring ALL non-head preferences for every level until. - * - * Basically tries to ensure there is at least one head in every shift if anyone has that job preference enabled at all. +/* + * Forces a random Head of Staff role to be assigned to a random eligible player. + * Returns TRUE if a player was selected and assigned the role. FALSE otherwise. */ -/datum/controller/subsystem/job/proc/FillHeadPosition() +/datum/controller/subsystem/job/proc/force_one_head_assignment() var/datum/job_department/command_department = get_department_type(/datum/job_department/command) if(!command_department) return FALSE @@ -340,60 +341,65 @@ SUBSYSTEM_DEF(job) for(var/datum/job/job as anything in command_department.department_jobs) if((job.current_positions >= job.total_positions) && job.total_positions != -1) continue - var/list/candidates = FindOccupationCandidates(job, level) + var/list/candidates = find_occupation_candidates(job, level) if(!candidates.len) continue var/mob/dead/new_player/candidate = pick(candidates) - // Eligibility checks done as part of FindOccupationCandidates. - if(AssignRole(candidate, job, do_eligibility_checks = FALSE)) + // Eligibility checks done as part of find_occupation_candidates. + if(assign_role(candidate, job, do_eligibility_checks = FALSE)) return TRUE return FALSE /** * Attempts to fill out all possible head positions for players with that job at a a given job priority level. + * Returns the number of Head positions assigned. * * Arguments: - * * level - One of the JP_LOW, JP_MEDIUM or JP_HIGH defines. Attempts to find candidates with head jobs at this priority only. + * * level - One of the JP_LOW, JP_MEDIUM, JP_HIGH or JP_ANY defines. Attempts to find candidates with head jobs at that priority only. */ -/datum/controller/subsystem/job/proc/CheckHeadPositions(level) +/datum/controller/subsystem/job/proc/fill_all_head_positions_at_priority(level) + . = 0 var/datum/job_department/command_department = get_department_type(/datum/job_department/command) + if(!command_department) - return + return . + for(var/datum/job/job as anything in command_department.department_jobs) if((job.current_positions >= job.total_positions) && job.total_positions != -1) continue - var/list/candidates = FindOccupationCandidates(job, level) + var/list/candidates = find_occupation_candidates(job, level) if(!candidates.len) continue var/mob/dead/new_player/candidate = pick(candidates) - // Eligibility checks done as part of FindOccupationCandidates - AssignRole(candidate, job, do_eligibility_checks = FALSE) + // Eligibility checks done as part of find_occupation_candidates + if(assign_role(candidate, job, do_eligibility_checks = FALSE)) + .++ /// Attempts to fill out all available AI positions. /datum/controller/subsystem/job/proc/fill_ai_positions() - var/datum/job/ai_job = GetJob(JOB_AI) + var/datum/job/ai_job = get_job(JOB_AI) if(!ai_job) return // In byond for(in to) loops, the iteration is inclusive so we need to stop at ai_job.total_positions - 1 for(var/i in ai_job.current_positions to ai_job.total_positions - 1) for(var/level in level_order) var/list/candidates = list() - candidates = FindOccupationCandidates(ai_job, level) + candidates = find_occupation_candidates(ai_job, level) if(candidates.len) var/mob/dead/new_player/candidate = pick(candidates) - // Eligibility checks done as part of FindOccupationCandidates - if(AssignRole(candidate, GetJobType(/datum/job/ai), do_eligibility_checks = FALSE)) + // Eligibility checks done as part of find_occupation_candidates + if(assign_role(candidate, get_job_type(/datum/job/ai), do_eligibility_checks = FALSE)) break -/** Proc DivideOccupations +/** Proc divide_occupations * fills var "assigned_role" for all ready players. * This proc must not have any side effect besides of modifying "assigned_role". **/ -/datum/controller/subsystem/job/proc/DivideOccupations(pure = FALSE, allow_all = FALSE) +/datum/controller/subsystem/job/proc/divide_occupations(pure = FALSE, allow_all = FALSE) //Setup new player list and get the jobs list - JobDebug("Running DO, allow_all = [allow_all], pure = [pure]") + job_debug("DO: Running, allow_all = [allow_all], pure = [pure]") run_divide_occupation_pure = pure SEND_SIGNAL(src, COMSIG_OCCUPATIONS_DIVIDED, pure, allow_all) @@ -403,173 +409,176 @@ SUBSYSTEM_DEF(job) if(player.ready == PLAYER_READY_TO_PLAY && player.check_preferences() && player.mind && is_unassigned_job(player.mind.assigned_role)) unassigned += player - initial_players_to_assign = unassigned.len + initial_players_to_assign = length(unassigned) - JobDebug("DO, Len: [unassigned.len]") + job_debug("DO: Player count to assign roles to: [initial_players_to_assign]") //Scale number of open security officer slots to population setup_officer_positions() //Jobs will have fewer access permissions if the number of players exceeds the threshold defined in game_options.txt - var/mat = CONFIG_GET(number/minimal_access_threshold) - if(mat) - if(mat > unassigned.len) + var/min_access_threshold = CONFIG_GET(number/minimal_access_threshold) + if(min_access_threshold) + if(min_access_threshold > initial_players_to_assign) CONFIG_SET(flag/jobs_have_minimal_access, FALSE) else CONFIG_SET(flag/jobs_have_minimal_access, TRUE) - //Shuffle players and jobs - unassigned = shuffle(unassigned) + //Shuffle player list. + shuffle_inplace(unassigned) - HandleFeedbackGathering() + handle_feedback_gathering() - // Dynamic has picked a ruleset that requires enforcing some jobs before others. - JobDebug("DO, Assigning Priority Positions: [length(dynamic_forced_occupations)]") + // Assign any priority positions before all other standard job selections. + job_debug("DO: Assigning priority positions") assign_priority_positions() + job_debug("DO: Priority assignment complete") + + // The overflow role has limitless slots, plus having the Overflow box ticked in prefs should (with one exception) set the priority to JP_HIGH. + // So everyone with overflow enabled will get that job. Thus we can assign it immediately to all players that have it enabled. + job_debug("DO: Assigning early overflow roles") + assign_all_overflow_positions() + job_debug("DO: Early overflow roles assigned.") + + // At this point we can assume the following: + // From assign_priority_positions() + // 1. If possible, any necessary job roles to allow Dynamic rulesets to execute (such as an AI for malf AI) are satisfied. + // 2. All Head of Staff roles with any player pref set to JP_HIGH are filled out. + // 3. If any player not selected by the above has any Head of Staff preference enabled at any JP_ level, there is at least one Head of Staff. + // + // From assign_all_overflow_positions() + // 4. Anyone with the overflow role enabled has been given the overflow role. + + // Shuffle the joinable occupation list and filter out ineligible occupations due to above job assignments. + var/list/available_occupations = joinable_occupations.Copy() + for(var/datum/job/job in available_occupations) + // Make sure the job isn't filled. If it is, remove it from the list so it doesn't get checked. + if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1) + job_debug("DO: Job is now filled, Job: [job], Current: [job.current_positions], Limit: [job.spawn_positions]") + available_occupations -= job - //People who wants to be the overflow role, sure, go on. - JobDebug("DO, Running Overflow Check 1") - var/datum/job/overflow_datum = GetJobType(overflow_role) - var/list/overflow_candidates = FindOccupationCandidates(overflow_datum, JP_LOW) - JobDebug("AC1, Candidates: [overflow_candidates.len]") - for(var/mob/dead/new_player/player in overflow_candidates) - JobDebug("AC1 pass, Player: [player]") - // Eligibility checks done as part of FindOccupationCandidates - AssignRole(player, GetJobType(overflow_role), do_eligibility_checks = FALSE) - overflow_candidates -= player - JobDebug("DO, AC1 end") - - //Select one head - JobDebug("DO, Running Head Check") - FillHeadPosition() - JobDebug("DO, Head Check end") - - // Fill out any remaining AI positions. - JobDebug("DO, Running AI Check") - fill_ai_positions() - JobDebug("DO, AI Check end") - - //Other jobs are now checked - JobDebug("DO, Running standard job assignment") - // New job giving system by Donkie - // This will cause lots of more loops, but since it's only done once it shouldn't really matter much at all. - // Hopefully this will add more randomness and fairness to job giving. + job_debug("DO: Running standard job assignment") - // Loop through all levels from high to low - var/list/shuffledoccupations = shuffle(joinable_occupations) for(var/level in level_order) - //Check the head jobs first each level - CheckHeadPositions(level) + job_debug("JOBS: Filling in head roles, Level: [job_priority_level_to_string(level)]") + // Fill the head jobs first each level + fill_all_head_positions_at_priority(level) // Loop through all unassigned players for(var/mob/dead/new_player/player in unassigned) if(!allow_all) - if(PopcapReached()) - RejectPlayer(player) - - // Loop through all jobs - for(var/datum/job/job in shuffledoccupations) // SHUFFLE ME BABY - if(!job) - JobDebug("FOC invalid/null job in occupations, Player: [player], Job: [job]") - shuffledoccupations -= job - continue + if(popcap_reached()) + job_debug("JOBS: Popcap reached, trying to reject player: [player]") + try_reject_player(player) - // Make sure the job isn't filled. If it is, remove it from the list so it doesn't get checked again. - if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1) - JobDebug("FOC job filled and not overflow, Player: [player], Job: [job], Current: [job.current_positions], Limit: [job.spawn_positions]") - shuffledoccupations -= job - continue + job_debug("JOBS: Finding a job for player: [player], at job priority pref: [job_priority_level_to_string(level)]") + // Loop through all jobs and build a list of jobs this player could be eligible for. + var/list/possible_jobs = list() + for(var/datum/job/job in available_occupations) // Filter any job that doesn't fit the current level. var/player_job_level = player.client?.prefs.job_preferences[job.title] if(isnull(player_job_level)) - JobDebug("FOC player job not enabled, Player: [player]") + job_debug("JOBS: Job not enabled, Job: [job]") continue - else if(player_job_level != level) - JobDebug("FOC player job enabled but at different level, Player: [player], TheirLevel: [job_priority_level_to_string(player_job_level)], ReqLevel: [job_priority_level_to_string(level)]") + if(player_job_level != level) + job_debug("JOBS: Job enabled at different priority pref, Job: [job], TheirLevel: [job_priority_level_to_string(player_job_level)], ReqLevel: [job_priority_level_to_string(level)]") continue - if(check_job_eligibility(player, job, "DO", add_job_to_log = TRUE) != JOB_AVAILABLE) + if(check_job_eligibility(player, job, "JOBS", add_job_to_log = TRUE) != JOB_AVAILABLE) continue - JobDebug("DO pass, Player: [player], Level:[level], Job:[job.title]") - AssignRole(player, job, do_eligibility_checks = FALSE) - unassigned -= player - break + possible_jobs += job + + // If there are no possible jobs for them at this priority, skip them. + if(!length(possible_jobs)) + job_debug("JOBS: Player not eligible for any available jobs at this priority level: [player]") + continue + + // Otherwise, pick one of those jobs at random. + var/datum/job/picked_job = pick(possible_jobs) + + job_debug("JOBS: Now assigning role to player: [player], Job:[picked_job.title]") + assign_role(player, picked_job, do_eligibility_checks = FALSE) + if((picked_job.current_positions >= picked_job.spawn_positions) && picked_job.spawn_positions != -1) + job_debug("JOBS: Job is now full, Job: [picked_job], Positions: [picked_job.current_positions], Limit: [picked_job.spawn_positions]") + available_occupations -= picked_job - JobDebug("DO, Ending standard job assignment") + job_debug("DO: Ending standard job assignment") - JobDebug("DO, Handle unassigned.") - // Hand out random jobs to the people who didn't get any in the last check - // Also makes sure that they got their preference correct + job_debug("DO: Handle unassigned") + // For any players that didn't get a job, fall back on their pref setting for what to do. for(var/mob/dead/new_player/player in unassigned) - HandleUnassigned(player, allow_all) - JobDebug("DO, Ending handle unassigned.") + handle_unassigned(player, allow_all) + job_debug("DO: Ending handle unassigned") - JobDebug("DO, Handle unrejectable unassigned") + job_debug("DO: Handle unrejectable unassigned") //Mop up people who can't leave. for(var/mob/dead/new_player/player in unassigned) //Players that wanted to back out but couldn't because they're antags (can you feel the edge case?) - if(!GiveRandomJob(player)) - if(!AssignRole(player, GetJobType(overflow_role))) //If everything is already filled, make them an assistant - JobDebug("DO, Forced antagonist could not be assigned any random job or the overflow role. DivideOccupations failed.") - JobDebug("---------------------------------------------------") + if(!give_random_job(player)) + if(!assign_role(player, get_job_type(overflow_role))) //If everything is already filled, make them an assistant + job_debug("DO: Forced antagonist could not be assigned any random job or the overflow role. divide_occupations failed.") + job_debug("---------------------------------------------------") run_divide_occupation_pure = FALSE return FALSE //Living on the edge, the forced antagonist couldn't be assigned to overflow role (bans, client age) - just reroll - JobDebug("DO, Ending handle unrejectable unassigned") + job_debug("DO: Ending handle unrejectable unassigned") - JobDebug("All divide occupations tasks completed.") - JobDebug("---------------------------------------------------") + job_debug("All divide occupations tasks completed.") + job_debug("---------------------------------------------------") run_divide_occupation_pure = FALSE return TRUE //We couldn't find a job from prefs for this guy. -/datum/controller/subsystem/job/proc/HandleUnassigned(mob/dead/new_player/player, allow_all = FALSE) +/datum/controller/subsystem/job/proc/handle_unassigned(mob/dead/new_player/player, allow_all = FALSE) var/jobless_role = player.client.prefs.read_preference(/datum/preference/choiced/jobless_role) if(!allow_all) - if(PopcapReached()) - RejectPlayer(player) + if(popcap_reached()) + job_debug("HU: Popcap reached, trying to reject player: [player]") + try_reject_player(player) return switch (jobless_role) if (BEOVERFLOW) - var/datum/job/overflow_role_datum = GetJobType(overflow_role) + var/datum/job/overflow_role_datum = get_job_type(overflow_role) if(check_job_eligibility(player, overflow_role_datum, debug_prefix = "HU", add_job_to_log = TRUE) != JOB_AVAILABLE) - RejectPlayer(player) + job_debug("HU: Player cannot be overflow, trying to reject: [player]") + try_reject_player(player) return - if(!AssignRole(player, overflow_role_datum, do_eligibility_checks = FALSE)) - RejectPlayer(player) + if(!assign_role(player, overflow_role_datum, do_eligibility_checks = FALSE)) + job_debug("HU: Player could not be assigned overflow role, trying to reject: [player]") + try_reject_player(player) return if (BERANDOMJOB) - if(!GiveRandomJob(player)) - RejectPlayer(player) + if(!give_random_job(player)) + job_debug("HU: Player cannot be given a random job, trying to reject: [player]") + try_reject_player(player) return if (RETURNTOLOBBY) - RejectPlayer(player) + job_debug("HU: Player unable to be assigned job, return to lobby enabled: [player]") + try_reject_player(player) return else //Something gone wrong if we got here. - var/message = "HU: [player] fell through handling unassigned" - JobDebug(message) - log_game(message) - message_admins(message) - RejectPlayer(player) + job_debug("HU: [player] has an invalid jobless_role var: [jobless_role]") + log_game("[player] has an invalid jobless_role var: [jobless_role]") + message_admins("[player] has an invalid jobless_role, this shouldn't happen.") + try_reject_player(player) //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) +/datum/controller/subsystem/job/proc/equip_rank(mob/living/equipping, datum/job/job, client/player_client) // SKYRAT 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] + var/alt_title = player_client?.prefs.alt_job_titles[job.title] || job.title // SKYRAT 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) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: equipping.on_job_equipping(job) + equipping.on_job_equipping(job, player_client) job.announce_job(equipping, alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: job.announce_job(equipping) if(player_client?.holder) @@ -584,7 +593,7 @@ SUBSYSTEM_DEF(job) /datum/controller/subsystem/job/proc/handle_auto_deadmin_roles(client/C, rank) if(!C?.holder) return TRUE - var/datum/job/job = GetJob(rank) + var/datum/job/job = get_job(rank) var/timegate_expired = FALSE // allow only forcing deadminning in the first X seconds of the round if auto_deadmin_timegate is set in config @@ -602,16 +611,16 @@ SUBSYSTEM_DEF(job) return C.holder.auto_deadmin() /datum/controller/subsystem/job/proc/setup_officer_positions() - var/datum/job/J = SSjob.GetJob(JOB_SECURITY_OFFICER) + var/datum/job/J = SSjob.get_job(JOB_SECURITY_OFFICER) if(!J) CRASH("setup_officer_positions(): Security officer job is missing") 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. //BUBBER EDIT REMOVAL: Raised to 10 max sec. - var/officer_positions = min(10, max(J.spawn_positions, round(unassigned.len / ssc))) //Scale between configured minimum and 12 officers - JobDebug("Setting open security officer positions to [officer_positions]") + // BUBBER EDIT - Reduced from 10 max sec to 7 max sec due to departmental security being deactivated and replaced. + var/officer_positions = min(10, max(J.spawn_positions, round(unassigned.len / ssc))) //Scale between configured minimum and 10 officers + job_debug("SOP: Setting open security officer positions to [officer_positions]") J.total_positions = officer_positions J.spawn_positions = officer_positions @@ -627,7 +636,7 @@ SUBSYSTEM_DEF(job) else //We ran out of spare locker spawns! break -/datum/controller/subsystem/job/proc/HandleFeedbackGathering() +/datum/controller/subsystem/job/proc/handle_feedback_gathering() for(var/datum/job/job as anything in joinable_occupations) var/high = 0 //high var/medium = 0 //medium @@ -666,7 +675,7 @@ SUBSYSTEM_DEF(job) SSblackbox.record_feedback("nested tally", "job_preferences", young, list("[job.title]", "young")) SSblackbox.record_feedback("nested tally", "job_preferences", newbie, list("[job.title]", "newbie")) -/datum/controller/subsystem/job/proc/PopcapReached() +/datum/controller/subsystem/job/proc/popcap_reached() var/hpc = CONFIG_GET(number/hard_popcap) var/epc = CONFIG_GET(number/extreme_popcap) if(hpc || epc) @@ -675,15 +684,15 @@ SUBSYSTEM_DEF(job) return 1 return 0 -/datum/controller/subsystem/job/proc/RejectPlayer(mob/dead/new_player/player) +/datum/controller/subsystem/job/proc/try_reject_player(mob/dead/new_player/player) if(player.mind && player.mind.special_role) - return - if(PopcapReached()) - JobDebug("Popcap overflow Check observer located, Player: [player]") - JobDebug("Player rejected :[player]") + job_debug("RJCT: Player unable to be rejected due to special_role, Player: [player], SpecialRole: [player.mind.special_role]") + return FALSE + + job_debug("RJCT: Player rejected, Player: [player]") unassigned -= player if(!run_divide_occupation_pure) - to_chat(player, "You have failed to qualify for any job you desired.") + to_chat(player, span_infoplain("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 @@ -693,10 +702,10 @@ SUBSYSTEM_DEF(job) var/oldjobs = SSjob.all_occupations sleep(2 SECONDS) for (var/datum/job/job as anything in oldjobs) - INVOKE_ASYNC(src, PROC_REF(RecoverJob), job) + INVOKE_ASYNC(src, PROC_REF(recover_job), job) -/datum/controller/subsystem/job/proc/RecoverJob(datum/job/J) - var/datum/job/newjob = GetJob(J.title) +/datum/controller/subsystem/job/proc/recover_job(datum/job/J) + var/datum/job/newjob = get_job(J.title) if (!istype(newjob)) return newjob.total_positions = J.total_positions @@ -713,7 +722,7 @@ SUBSYSTEM_DEF(job) if(buckle && isliving(joining_mob)) buckle_mob(joining_mob, FALSE, FALSE) -/datum/controller/subsystem/job/proc/SendToLateJoin(mob/M, buckle = TRUE) +/datum/controller/subsystem/job/proc/send_to_late_join(mob/M, buckle = TRUE) var/atom/destination if(M.mind && !is_unassigned_job(M.mind.assigned_role) && length(GLOB.jobspawn_overrides[M.mind.assigned_role.title])) //We're doing something special today. destination = pick(GLOB.jobspawn_overrides[M.mind.assigned_role.title]) @@ -748,19 +757,6 @@ SUBSYSTEM_DEF(job) 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)) - - if(!spawn_turf) - SendToLateJoin(living_mob) - else - podspawn(list( - "target" = spawn_turf, - "path" = /obj/structure/closet/supplypod/centcompod, - "spawn" = living_mob - )) - /// Returns a list of minds of all heads of staff who are alive /datum/controller/subsystem/job/proc/get_living_heads() . = list() @@ -795,7 +791,7 @@ SUBSYSTEM_DEF(job) if(sec.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY) . += sec -/datum/controller/subsystem/job/proc/JobDebug(message) +/datum/controller/subsystem/job/proc/job_debug(message) log_job_debug(message) /// Builds various lists of jobs based on station, centcom and additional jobs with icons associated with them. @@ -860,12 +856,47 @@ SUBSYSTEM_DEF(job) safe_code_timer_id = null safe_code_request_loc = null -/// Blindly assigns the required roles to every player in the dynamic_forced_occupations list. +/// Assigns roles that are considered high priority, either due to dynamic needing to force a specific role for a specific ruleset +/// or making sure roles critical to round progression exist where possible every shift. /datum/controller/subsystem/job/proc/assign_priority_positions() + job_debug("APP: Assigning Dynamic ruleset forced occupations: [length(dynamic_forced_occupations)]") for(var/mob/new_player in dynamic_forced_occupations) - // Eligibility checks already carried out as part of the dynamic ruleset trim_candidates proc.area - // However no guarantee of game state between then and now, so don't skip eligibility checks on AssignRole. - AssignRole(new_player, GetJob(dynamic_forced_occupations[new_player])) + // Eligibility checks already carried out as part of the dynamic ruleset trim_candidates proc. + // However no guarantee of game state between then and now, so don't skip eligibility checks on assign_role. + assign_role(new_player, get_job(dynamic_forced_occupations[new_player])) + + // Get JP_HIGH department Heads of Staff in place. Indirectly useful for the Revolution ruleset to have as many Heads as possible. + job_debug("APP: Assigning all JP_HIGH head of staff roles.") + var/head_count = fill_all_head_positions_at_priority(JP_HIGH) + + // If nobody has JP_HIGH on a Head role, try to force at least one Head of Staff so every shift has the best chance + // of having at least one leadership role. + if(head_count == 0) + force_one_head_assignment() + + // Fill out all AI positions. + job_debug("APP: Filling all AI positions") + fill_ai_positions() + +/datum/controller/subsystem/job/proc/assign_all_overflow_positions() + job_debug("OVRFLW: Assigning all overflow roles.") + job_debug("OVRFLW: This shift's overflow role: [overflow_role]") + var/datum/job/overflow_datum = get_job_type(overflow_role) + + // When the Overflow role changes for any reason, this allows players to set otherwise invalid job priority pref states. + // So if Assistant is the "usual" Overflow but it gets changed to Clown for a shift, players can set the Assistant role's priorities + // to JP_MEDIUM and JP_LOW. When the "usual" Overflow role comes back, it returns to an On option in the prefs menu but still + // keeps its old JP_MEDIUM or JP_LOW value in the background. + + // Due to this prefs quirk, we actually don't want to find JP_HIGH candidates as it may exclude people with abnormal pref states that + // appear normal from the UI. By passing in JP_ANY, it will return all players that have the overflow job pref (which should be a toggle) + // set to any level. + var/list/overflow_candidates = find_occupation_candidates(overflow_datum, JP_ANY) + for(var/mob/dead/new_player/player in overflow_candidates) + // Eligibility checks done as part of find_occupation_candidates, so skip them. + assign_role(player, get_job_type(overflow_role), do_eligibility_checks = FALSE) + job_debug("OVRFLW: Assigned overflow to player: [player]") + job_debug("OVRFLW: All overflow roles assigned.") /// Takes a job priority #define such as JP_LOW and gets its string representation for logging. /datum/controller/subsystem/job/proc/job_priority_level_to_string(priority) @@ -883,52 +914,52 @@ SUBSYSTEM_DEF(job) * Arguments: * * player - The player to check for job eligibility. * * possible_job - The job to check for eligibility against. - * * debug_prefix - Logging prefix for the JobDebug log entries. For example, GRJ during GiveRandomJob or DO during DivideOccupations. + * * debug_prefix - Logging prefix for the job_debug log entries. For example, GRJ during give_random_job or DO during divide_occupations. * * add_job_to_log - If TRUE, appends the job type to the log entry. If FALSE, does not. Set to FALSE when check is part of iterating over players for a specific job, set to TRUE when check is part of iterating over jobs for a specific player and you don't want extra log entry spam. */ /datum/controller/subsystem/job/proc/check_job_eligibility(mob/dead/new_player/player, datum/job/possible_job, debug_prefix = "", add_job_to_log = FALSE) if(!player.mind) - JobDebug("[debug_prefix] player has no mind, Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix]: Player has no mind, Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_GENERIC if(possible_job.title in player.mind.restricted_roles) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_ANTAG_INCOMPAT, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_ANTAG_INCOMPAT, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_ANTAG_INCOMPAT if(!possible_job.player_old_enough(player.client)) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_ACCOUNTAGE, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_ACCOUNTAGE, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_ACCOUNTAGE var/required_playtime_remaining = possible_job.required_playtime_remaining(player.client) if(required_playtime_remaining) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_PLAYTIME, possible_job.title)], Player: [player], MissingTime: [required_playtime_remaining][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_PLAYTIME, possible_job.title)], Player: [player], MissingTime: [required_playtime_remaining][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_PLAYTIME // Run the banned check last since it should be the rarest check to fail and can access the database. if(is_banned_from(player.ckey, possible_job.title)) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_BANNED, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_BANNED, possible_job.title)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_BANNED // Check for character age if(possible_job.required_character_age > player.client.prefs.read_preference(/datum/preference/numeric/age) && possible_job.required_character_age != null) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_AGE)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[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 if(!CONFIG_GET(flag/bypass_veteran_system) && 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]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_NOT_VETERAN)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_NOT_VETERAN if(possible_job.has_banned_quirk(player.client.prefs)) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_QUIRK)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_QUIRK)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_QUIRK if(!possible_job.has_required_languages(player.client.prefs)) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_LANGUAGE)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_LANGUAGE)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_LANGUAGE if(possible_job.has_banned_species(player.client.prefs)) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_SPECIES)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_SPECIES)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_SPECIES if(CONFIG_GET(flag/min_flavor_text)) @@ -936,15 +967,15 @@ SUBSYSTEM_DEF(job) var/uses_silicon_flavortext = (is_silicon_job(possible_job) && length_char(player.client?.prefs.read_preference(/datum/preference/text/silicon_flavor_text)) <= CONFIG_GET(number/silicon_flavor_text_character_requirement)) var/uses_normal_flavortext = (!is_silicon_job(possible_job) && length_char(player.client?.prefs.read_preference(/datum/preference/text/flavor_text)) <= CONFIG_GET(number/flavor_text_character_requirement)) if(uses_silicon_flavortext) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_FLAVOUR)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_FLAVOUR)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_FLAVOUR_SILICON if(uses_normal_flavortext) //BUBBER EDIT END: SILICON FLAVOR TEXT CHECK - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_FLAVOUR)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_FLAVOUR)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_FLAVOUR if(possible_job.has_banned_augment(player.client.prefs)) - JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_AUGMENT)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_AUGMENT)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_AUGMENT @@ -954,7 +985,7 @@ SUBSYSTEM_DEF(job) // Run this check after is_banned_from since it can query the DB which may sleep. // Need to recheck the player exists after is_banned_from since it can query the DB which may sleep. if(QDELETED(player)) - JobDebug("[debug_prefix] player is qdeleted, Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") + job_debug("[debug_prefix]: Player is qdeleted, Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]") return JOB_UNAVAILABLE_GENERIC return JOB_AVAILABLE diff --git a/code/controllers/subsystem/library.dm b/code/controllers/subsystem/library.dm index a657e442748a4..bfe77f70f02dd 100644 --- a/code/controllers/subsystem/library.dm +++ b/code/controllers/subsystem/library.dm @@ -26,14 +26,14 @@ SUBSYSTEM_DEF(library) /datum/controller/subsystem/library/proc/load_shelves() var/list/datum/callback/load_callbacks = list() - + for(var/obj/structure/bookcase/case_to_load as anything in shelves_to_load) if(!case_to_load) stack_trace("A null bookcase somehow ended up in SSlibrary's shelves_to_load list. Did something harddel?") continue load_callbacks += CALLBACK(case_to_load, TYPE_PROC_REF(/obj/structure/bookcase, load_shelf)) shelves_to_load = null - + //Load all of the shelves asyncronously at the same time, blocking until the last one is finished. callback_select(load_callbacks, savereturns = FALSE) @@ -59,6 +59,6 @@ SUBSYSTEM_DEF(library) /datum/controller/subsystem/library/proc/prepare_library_areas() library_areas = typesof(/area/station/service/library) - /area/station/service/library/abandoned - var/list/additional_areas = SSmapping.config.library_areas + var/list/additional_areas = SSmapping.current_map.library_areas if(additional_areas) library_areas += additional_areas diff --git a/code/controllers/subsystem/lua.dm b/code/controllers/subsystem/lua.dm index 1ab88a01746b7..99df8cf335490 100644 --- a/code/controllers/subsystem/lua.dm +++ b/code/controllers/subsystem/lua.dm @@ -2,7 +2,6 @@ SUBSYSTEM_DEF(lua) name = "Lua Scripting" runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT wait = 0.1 SECONDS - flags = SS_OK_TO_FAIL_INIT /// A list of all lua states var/list/datum/lua_state/states = list() @@ -18,31 +17,19 @@ SUBSYSTEM_DEF(lua) var/list/current_run = list() var/list/current_states_run = list() - /// Protects return values from getting GCed before getting converted to lua values - /// Gets cleared every tick. - var/list/gc_guard = list() + var/list/needs_gc_cycle = list() /datum/controller/subsystem/lua/Initialize() - if(!CONFIG_GET(flag/auxtools_enabled)) - warning("SSlua requires auxtools to be enabled to run.") - return SS_INIT_NO_NEED - - try - // Initialize the auxtools library - AUXTOOLS_CHECK(AUXLUA) - - // Set the wrappers for setting vars and calling procs - __lua_set_set_var_wrapper("/proc/wrap_lua_set_var") - __lua_set_datum_proc_call_wrapper("/proc/wrap_lua_datum_proc_call") - __lua_set_global_proc_call_wrapper("/proc/wrap_lua_global_proc_call") - __lua_set_print_wrapper("/proc/wrap_lua_print") - return SS_INIT_SUCCESS - catch(var/exception/e) - // Something went wrong, best not allow the subsystem to run - var/crash_message = "Error initializing SSlua: [e.name]" - initialization_failure_message = crash_message - warning(crash_message) - return SS_INIT_FAILURE + DREAMLUAU_SET_EXECUTION_LIMIT_SECS(5) + // Set wrappers to ensure that lua scripts are subject to the same safety restrictions as other admin tooling + DREAMLUAU_SET_NEW_WRAPPER("/proc/_new") + DREAMLUAU_SET_VAR_GET_WRAPPER("/proc/wrap_lua_get_var") + DREAMLUAU_SET_VAR_SET_WRAPPER("/proc/wrap_lua_set_var") + DREAMLUAU_SET_OBJECT_CALL_WRAPPER("/proc/wrap_lua_datum_proc_call") + DREAMLUAU_SET_GLOBAL_CALL_WRAPPER("/proc/wrap_lua_global_proc_call") + // Set the print wrapper, as otherwise, the print function is meaningless + DREAMLUAU_SET_PRINT_WRAPPER("/proc/wrap_lua_print") + return SS_INIT_SUCCESS /datum/controller/subsystem/lua/OnConfigLoad() // Read the paths from the config file @@ -52,9 +39,6 @@ SUBSYSTEM_DEF(lua) lua_path += path world.SetConfig("env", "LUAU_PATH", jointext(lua_path, ";")) -/datum/controller/subsystem/lua/Shutdown() - AUXTOOLS_FULL_SHUTDOWN(AUXLUA) - /datum/controller/subsystem/lua/proc/queue_resume(datum/lua_state/state, index, arguments) if(!initialized) return @@ -64,36 +48,33 @@ SUBSYSTEM_DEF(lua) arguments = list() else if(!islist(arguments)) arguments = list(arguments) + else + var/list/args_list = arguments + arguments = args_list.Copy() resumes += list(list("state" = state, "index" = index, "arguments" = arguments)) -/datum/controller/subsystem/lua/proc/kill_task(datum/lua_state/state, list/task_info) +/datum/controller/subsystem/lua/proc/kill_task(datum/lua_state/state, is_sleep, index) if(!istype(state)) return - if(!islist(task_info)) - return - if(!(istext(task_info["name"]) && istext(task_info["status"]) && isnum(task_info["index"]))) - return - switch(task_info["status"]) - if("sleep") - var/task_index = task_info["index"] - var/state_index = 1 - - // Get the nth sleep in the sleep list corresponding to the target state - for(var/i in 1 to length(sleeps)) - var/datum/lua_state/sleeping_state = sleeps[i] - if(sleeping_state == state) - if(state_index == task_index) - sleeps.Cut(i, i+1) - break - state_index++ - if("yield") - // Remove the resumt from the resumt list - for(var/i in 1 to length(resumes)) - var/resume = resumes[i] - if(resume["state"] == state && resume["index"] == task_info["index"]) - resumes.Cut(i, i+1) + if(is_sleep) + var/state_index = 1 + + // Get the nth sleep in the sleep list corresponding to the target state + for(var/i in 1 to length(sleeps)) + var/datum/lua_state/sleeping_state = sleeps[i] + if(sleeping_state == state) + if(state_index == index) + sleeps.Cut(i, i+1) break - state.kill_task(task_info) + state_index++ + else + // Remove the resumt from the resumt list + for(var/i in 1 to length(resumes)) + var/resume = resumes[i] + if(resume["state"] == state && resume["index"] == index) + resumes.Cut(i, i+1) + break + state.kill_task(is_sleep, index) /datum/controller/subsystem/lua/fire(resumed) // Each fire of SSlua awakens every sleeping task in the order they slept, @@ -104,7 +85,6 @@ SUBSYSTEM_DEF(lua) sleeps.Cut() resumes.Cut() - gc_guard.Cut() var/list/current_sleeps = current_run["sleeps"] var/list/affected_states = list() while(length(current_sleeps)) @@ -147,6 +127,32 @@ SUBSYSTEM_DEF(lua) if(MC_TICK_CHECK) break + while(length(needs_gc_cycle)) + var/datum/lua_state/state = needs_gc_cycle[needs_gc_cycle.len] + needs_gc_cycle.len-- + state.collect_garbage() + // Update every lua editor TGUI open for each state that had a task awakened or resumed for(var/datum/lua_state/state in affected_states) INVOKE_ASYNC(state, TYPE_PROC_REF(/datum/lua_state, update_editors)) + +/datum/controller/subsystem/lua/proc/log_involved_runtime(exception/runtime, list/desclines, list/lua_stacks) + var/list/json_data = list("status" = "runtime", "file" = runtime.file, "line" = runtime.line, "message" = runtime.name, "stack" = list()) + var/level = 1 + for(var/line in desclines) + line = copytext(line, 3) + if(starts_with_any(line, list( + "/datum/lua_state (/datum/lua_state): load script", + "/datum/lua_state (/datum/lua_state): call function", + "/datum/lua_state (/datum/lua_state): awaken", + "/datum/lua_state (/datum/lua_state): resume" + ))) + json_data["stack"] += lua_stacks[level] + level++ + json_data["stack"] += line + for(var/datum/weakref/state_ref as anything in GLOB.lua_state_stack) + var/datum/lua_state/state = state_ref.resolve() + if(!state) + continue + state.log_result(json_data) + return diff --git a/code/controllers/subsystem/map_vote.dm b/code/controllers/subsystem/map_vote.dm new file mode 100644 index 0000000000000..7d0be38f92072 --- /dev/null +++ b/code/controllers/subsystem/map_vote.dm @@ -0,0 +1,160 @@ +#define MAP_VOTE_CACHE_LOCATION "data/map_vote_cache.json" + +SUBSYSTEM_DEF(map_vote) + name = "Map Vote" + flags = SS_NO_FIRE + + /// Has an admin specifically set a map. + var/admin_override = FALSE + + /// Have we already done a vote. + var/already_voted = FALSE + + /// The map that has been chosen for next round. + var/datum/map_config/next_map_config + + /// Stores the current map vote cache, so that players can look at the current tally. + var/list/map_vote_cache + + /// Stores the previous map vote cache, used when a map vote is reverted. + var/list/previous_cache + + /// Stores a formatted html string of the tally counts + var/tally_printout = span_red("Loading...") + +/datum/controller/subsystem/map_vote/Initialize() + if(rustg_file_exists(MAP_VOTE_CACHE_LOCATION)) + map_vote_cache = json_decode(file2text(MAP_VOTE_CACHE_LOCATION)) + var/carryover = CONFIG_GET(number/map_vote_tally_carryover_percentage) + for(var/map_id in map_vote_cache) + map_vote_cache[map_id] = round(map_vote_cache[map_id] * (carryover / 100)) + sanitize_cache() + else + map_vote_cache = list() + update_tally_printout() + return SS_INIT_SUCCESS + +/datum/controller/subsystem/map_vote/proc/write_cache() + rustg_file_write(json_encode(map_vote_cache), MAP_VOTE_CACHE_LOCATION) + +/datum/controller/subsystem/map_vote/proc/sanitize_cache() + var/max = CONFIG_GET(number/map_vote_maximum_tallies) + for(var/map_id in map_vote_cache) + if(!(map_id in config.maplist)) + map_vote_cache -= map_id + var/count = map_vote_cache[map_id] + if(count > max) + map_vote_cache[map_id] = max + +/datum/controller/subsystem/map_vote/proc/send_map_vote_notice(...) + var/static/last_message_at + if(last_message_at == world.time) + message_admins("Call to send_map_vote_notice twice in one game tick. Yell at someone to condense messages.") + last_message_at = world.time + + var/list/messages = args.Copy() + to_chat(world, span_purple(examine_block("Map Vote\n
\n[messages.Join("\n")]"))) + +/datum/controller/subsystem/map_vote/proc/finalize_map_vote(datum/vote/map_vote/map_vote) + if(already_voted) + message_admins("Attempted to finalize a map vote after a map vote has already been finalized.") + return + already_voted = TRUE + + var/flat = CONFIG_GET(number/map_vote_flat_bonus) + previous_cache = map_vote_cache.Copy() + for(var/map_id in map_vote.choices) + var/datum/map_config/map = config.maplist[map_id] + map_vote_cache[map_id] += (map_vote.choices[map_id] * map.voteweight) + flat + sanitize_cache() + write_cache() + update_tally_printout() + + if(admin_override) + send_map_vote_notice("Admin Override is in effect. Map will not be changed.", "Tallies are recorded and saved.") + return + + var/list/valid_maps = filter_cache_to_valid_maps() + if(!length(valid_maps)) + send_map_vote_notice("No valid maps.") + return + + var/winner = pick_weight(filter_cache_to_valid_maps()) + set_next_map(config.maplist[winner]) + send_map_vote_notice("Map Selected - [span_bold(next_map_config.map_name)]") + + // do not reset tallies if only one map is even possible + if(length(valid_maps) > 1) + map_vote_cache[winner] = CONFIG_GET(number/map_vote_minimum_tallies) + write_cache() + update_tally_printout() + +/// Returns a list of all map options that are invalid for the current population. +/datum/controller/subsystem/map_vote/proc/get_valid_map_vote_choices() + var/list/valid_maps = list() + + // Fill in our default choices with all of the maps in our map config, if they are votable and not blocked. + 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)) + continue + valid_maps += possible_config.map_name + + var/filter_threshold = 0 + if(SSticker.HasRoundStarted()) + filter_threshold = get_active_player_count(alive_check = FALSE, afk_check = TRUE, human_check = FALSE) + else + filter_threshold = length(GLOB.clients) + + for(var/map in valid_maps) + var/datum/map_config/possible_config = config.maplist[map] + if(possible_config.config_min_users > 0 && filter_threshold < possible_config.config_min_users) + valid_maps -= map + + else if(possible_config.config_max_users > 0 && filter_threshold > possible_config.config_max_users) + valid_maps -= map + + return valid_maps + +/datum/controller/subsystem/map_vote/proc/filter_cache_to_valid_maps() + var/connected_players = length(GLOB.player_list) + var/list/valid_maps = list() + for(var/map_id in map_vote_cache) + var/datum/map_config/map = config.maplist[map_id] + if(!map.votable) + continue + if(map.config_min_users > 0 && (connected_players < map.config_min_users)) + continue + if(map.config_max_users > 0 && (connected_players > map.config_max_users)) + continue + valid_maps[map_id] = map_vote_cache[map_id] + return valid_maps + +/datum/controller/subsystem/map_vote/proc/set_next_map(datum/map_config/change_to) + if(!change_to.MakeNextMap()) + message_admins("Failed to set new map with next_map.json for [change_to.map_name]!") + return FALSE + + next_map_config = change_to + return TRUE + +/datum/controller/subsystem/map_vote/proc/revert_next_map() + if(!next_map_config) + return + if(previous_cache) + map_vote_cache = previous_cache + previous_cache = null + + already_voted = FALSE + admin_override = FALSE + send_map_vote_notice("Next map reverted. Voting re-enabled.") + +#undef MAP_VOTE_CACHE_LOCATION + +/datum/controller/subsystem/map_vote/proc/update_tally_printout() + var/list/data = list() + for(var/map_id in map_vote_cache) + var/datum/map_config/map = config.maplist[map_id] + data += "[map.map_name] - [map_vote_cache[map_id]]" + tally_printout = examine_block("Current Tallies\n
\n[data.Join("\n")]") diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index a723015b80f64..b017a6aaaa4a7 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -6,15 +6,8 @@ SUBSYSTEM_DEF(mapping) var/list/nuke_tiles = list() var/list/nuke_threats = list() - var/datum/map_config/config - var/datum/map_config/next_map_config - - /// Has the map for the next round been voted for already? - var/map_voted = FALSE - /// Has the map for the next round been deliberately chosen by an admin? - var/map_force_chosen = FALSE - /// Has the map vote been rocked? - var/map_vote_rocked = FALSE + /// The current map config the server loaded at round start. + var/datum/map_config/current_map var/list/map_templates = list() @@ -95,20 +88,20 @@ SUBSYSTEM_DEF(mapping) /datum/controller/subsystem/mapping/PreInit() ..() #ifdef FORCE_MAP - config = load_map_config(FORCE_MAP, FORCE_MAP_DIRECTORY) + current_map = load_map_config(FORCE_MAP, FORCE_MAP_DIRECTORY) #else - config = load_map_config(error_if_missing = FALSE) + current_map = load_map_config(error_if_missing = FALSE) #endif /datum/controller/subsystem/mapping/Initialize() if(initialized) return SS_INIT_SUCCESS - if(config.defaulted) - var/old_config = config - config = global.config.defaultmap - if(!config || config.defaulted) - to_chat(world, span_boldannounce("Unable to load next or default map config, defaulting to MetaStation.")) - config = old_config + if(current_map.defaulted) + var/datum/map_config/old_config = current_map + current_map = config.defaultmap + if(!current_map || current_map.defaulted) + to_chat(world, span_boldannounce("Unable to load next or default map config, defaulting to [old_config.map_name].")) + current_map = old_config plane_offset_to_true = list() true_to_offset_planes = list() plane_to_offset = list() @@ -132,11 +125,11 @@ SUBSYSTEM_DEF(mapping) #ifndef LOWMEMORYMODE // Create space ruin levels - while (space_levels_so_far < config.space_ruin_levels) + while (space_levels_so_far < current_map.space_ruin_levels) add_new_zlevel("Ruin Area [space_levels_so_far+1]", ZTRAITS_SPACE) ++space_levels_so_far // Create empty space levels - while (space_levels_so_far < config.space_empty_levels + config.space_ruin_levels) + while (space_levels_so_far < current_map.space_empty_levels + current_map.space_ruin_levels) empty_space = add_new_zlevel("Empty Area [space_levels_so_far+1]", list(ZTRAIT_LINKAGE = CROSSLINKED)) ++space_levels_so_far @@ -144,7 +137,7 @@ SUBSYSTEM_DEF(mapping) if(CONFIG_GET(flag/roundstart_away)) createRandomZlevel(prob(CONFIG_GET(number/config_gateway_chance))) - else if (SSmapping.config.load_all_away_missions) // we're likely in a local testing environment, so punch it. + else if (SSmapping.current_map.load_all_away_missions) // we're likely in a local testing environment, so punch it. load_all_away_missions() loading_ruins = TRUE @@ -363,9 +356,7 @@ Used by the AI doomsday and the self-destruct nuke. holodeck_templates = SSmapping.holodeck_templates areas_in_z = SSmapping.areas_in_z - config = SSmapping.config - next_map_config = SSmapping.next_map_config - + current_map = SSmapping.current_map clearing_reserved_turfs = SSmapping.clearing_reserved_turfs z_list = SSmapping.z_list @@ -439,22 +430,22 @@ 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 - LoadGroup(FailedZs, "Station", config.map_path, config.map_file, config.traits, ZTRAITS_STATION) + add_startup_message("Loading [current_map.map_name]...") // SKYRAT EDIT CHANGE + LoadGroup(FailedZs, "Station", current_map.map_path, current_map.map_file, current_map.traits, ZTRAITS_STATION) if(SSdbcore.Connect()) var/datum/db_query/query_round_map_name = SSdbcore.NewQuery({" UPDATE [format_table_name("round")] SET map_name = :map_name WHERE id = :round_id - "}, list("map_name" = config.map_name, "round_id" = GLOB.round_id)) + "}, list("map_name" = current_map.map_name, "round_id" = GLOB.round_id)) query_round_map_name.Execute() qdel(query_round_map_name) #ifndef LOWMEMORYMODE - if(config.minetype == "lavaland") + if(current_map.minetype == "lavaland") LoadGroup(FailedZs, "Lavaland", "map_files/Mining", "Lavaland.dmm", default_traits = ZTRAITS_LAVALAND) - else if (!isnull(config.minetype) && config.minetype != "none") - INIT_ANNOUNCE("WARNING: An unknown minetype '[config.minetype]' was set! This is being ignored! Update the maploader code!") + else if (!isnull(current_map.minetype) && current_map.minetype != "none") + INIT_ANNOUNCE("WARNING: An unknown minetype '[current_map.minetype]' was set! This is being ignored! Update the maploader code!") #endif if(LAZYLEN(FailedZs)) //but seriously, unless the server's filesystem is messed up this will never happen @@ -467,10 +458,8 @@ Used by the AI doomsday and the self-destruct nuke. #undef INIT_ANNOUNCE // Custom maps are removed after station loading so the map files does not persist for no reason. - if(config.map_path == CUSTOM_MAP_PATH) - fdel("_maps/custom/[config.map_file]") - // And as the file is now removed set the next map to default. - next_map_config = load_default_map_config() + if(current_map.map_path == CUSTOM_MAP_PATH) + fdel("_maps/custom/[current_map.map_file]") /** * Global list of AREA TYPES that are associated with the station. @@ -502,88 +491,6 @@ GLOBAL_LIST_EMPTY(the_station_areas) for(var/area/A as anything in GLOB.areas) A.RunTerrainPopulation() -/datum/controller/subsystem/mapping/proc/maprotate() - if(map_voted || SSmapping.next_map_config) //If voted or set by other means. - return - - var/players = GLOB.clients.len - var/list/mapvotes = list() - //count votes - var/pmv = CONFIG_GET(flag/preference_map_voting) - if(pmv) - for (var/client/c in GLOB.clients) - var/vote = c.prefs.read_preference(/datum/preference/choiced/preferred_map) - if (!vote) - if (global.config.defaultmap) - mapvotes[global.config.defaultmap.map_name] += 1 - continue - mapvotes[vote] += 1 - else - for(var/M in global.config.maplist) - mapvotes[M] = 1 - - //filter votes - for (var/map in mapvotes) - if (!map) - mapvotes.Remove(map) - continue - if (!(map in global.config.maplist)) - mapvotes.Remove(map) - continue - if(map in SSpersistence.blocked_maps) - mapvotes.Remove(map) - continue - var/datum/map_config/VM = global.config.maplist[map] - if (!VM) - mapvotes.Remove(map) - continue - if (VM.voteweight <= 0) - mapvotes.Remove(map) - continue - if (VM.config_min_users > 0 && players < VM.config_min_users) - mapvotes.Remove(map) - continue - if (VM.config_max_users > 0 && players > VM.config_max_users) - mapvotes.Remove(map) - continue - - if(pmv) - mapvotes[map] = mapvotes[map]*VM.voteweight - - var/pickedmap = pick_weight(mapvotes) - if (!pickedmap) - return - var/datum/map_config/VM = global.config.maplist[pickedmap] - message_admins("Randomly rotating map to [VM.map_name]") - . = changemap(VM) - if (. && VM.map_name != config.map_name) - to_chat(world, span_boldannounce("Map rotation has chosen [VM.map_name] for next round!")) - -/datum/controller/subsystem/mapping/proc/mapvote() - if(map_voted || SSmapping.next_map_config) //If voted or set by other means. - return - if(SSvote.current_vote) //Theres already a vote running, default to rotation. - maprotate() - return - SSvote.initiate_vote(/datum/vote/map_vote, "automatic map rotation", forced = TRUE) - -/datum/controller/subsystem/mapping/proc/changemap(datum/map_config/change_to) - if(!change_to.MakeNextMap()) - next_map_config = load_default_map_config() - message_admins("Failed to set new map with next_map.json for [change_to.map_name]! Using default as backup!") - return - - var/filter_threshold = get_active_player_count(alive_check = FALSE, afk_check = TRUE, human_check = FALSE) - if (change_to.config_min_users > 0 && filter_threshold != 0 && filter_threshold < change_to.config_min_users) - message_admins("[change_to.map_name] was chosen for the next map, despite there being less current players than its set minimum population range!") - log_game("[change_to.map_name] was chosen for the next map, despite there being less current players than its set minimum population range!") - if (change_to.config_max_users > 0 && filter_threshold > change_to.config_max_users) - message_admins("[change_to.map_name] was chosen for the next map, despite there being more current players than its set maximum population range!") - log_game("[change_to.map_name] was chosen for the next map, despite there being more current players than its set maximum population range!") - - next_map_config = change_to - return TRUE - /datum/controller/subsystem/mapping/proc/preloadTemplates(path = "_maps/templates/") //see master controller setup var/list/filelist = flist(path) for(var/map in filelist) @@ -598,10 +505,10 @@ GLOBAL_LIST_EMPTY(the_station_areas) /datum/controller/subsystem/mapping/proc/preloadRuinTemplates() // Still supporting bans by filename var/list/banned = generateMapList("spaceruinblacklist.txt") - if(config.minetype == "lavaland") + if(current_map.minetype == "lavaland") banned += generateMapList("lavaruinblacklist.txt") - else if(config.blacklist_file) - banned += generateMapList(config.blacklist_file) + else if(current_map.blacklist_file) + banned += generateMapList(current_map.blacklist_file) for(var/item in sort_list(subtypesof(/datum/map_template/ruin), GLOBAL_PROC_REF(cmp_ruincost_priority))) var/datum/map_template/ruin/ruin_type = item @@ -931,6 +838,8 @@ ADMIN_VERB(load_away_mission, R_FUN, "Load Away Mission", "Load a specific away /datum/controller/subsystem/mapping/proc/lazy_load_template(template_key, force = FALSE) RETURN_TYPE(/datum/turf_reservation) + + UNTIL(initialized) var/static/lazy_loading = FALSE UNTIL(!lazy_loading) @@ -959,7 +868,7 @@ ADMIN_VERB(load_away_mission, R_FUN, "Load Away Mission", "Load a specific away /// Returns true if the map we're playing on is on a planet /datum/controller/subsystem/mapping/proc/is_planetary() - return config.planetary + return current_map.planetary /// For debug purposes, will add every single away mission present in a given directory. /// You can optionally pass in a string directory to load from instead of the default. diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index 3a704d01a82fd..673414ea3c25b 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -31,11 +31,10 @@ SUBSYSTEM_DEF(materials) var/list/rigid_stack_recipes = list( new /datum/stack_recipe("Carving block", /obj/structure/carving_block, 5, time = 3 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND | CRAFT_APPLIES_MATS, category = CAT_STRUCTURE), ) - ///A list of dimensional themes used by the dimensional anomaly and other things, most of which require materials to function. var/list/datum/dimension_theme/dimensional_themes -///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info) +///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropriate vars (See these variables for more info) /datum/controller/subsystem/materials/proc/InitializeMaterials() materials = list() materials_by_type = list() @@ -53,7 +52,7 @@ SUBSYSTEM_DEF(materials) /** Creates and caches a material datum. * - * Arugments: + * Arguments: * - [arguments][/list]: The arguments to use to create the material datum * - The first element is the type of material to initialize. */ @@ -134,7 +133,7 @@ SUBSYSTEM_DEF(materials) value = arguments[key] if(!(istext(key) || isnum(key))) key = REF(key) - key = "[key]" // Key is stringified so numbers dont break things + key = "[key]" // Key is stringified so numbers don't break things if(!isnull(value)) if(!(istext(value) || isnum(value))) value = REF(value) diff --git a/code/controllers/subsystem/movement/movement.dm b/code/controllers/subsystem/movement/movement.dm index 425c67a0c474f..d6043d596bb0e 100644 --- a/code/controllers/subsystem/movement/movement.dm +++ b/code/controllers/subsystem/movement/movement.dm @@ -66,7 +66,7 @@ SUBSYSTEM_DEF(movement) return // Still work to be done var/bucket_time = bucket_info[MOVEMENT_BUCKET_TIME] smash_bucket(1, bucket_time) // We assume we're the first bucket in the queue right now - visual_delay = MC_AVERAGE_FAST(visual_delay, max((world.time - canonical_time) / wait, 1)) + visual_delay = MC_AVERAGE_FAST(visual_delay, max((world.time - canonical_time) / TICKS2DS(wait), 1)) /// Removes a bucket from our system. You only need to pass in the time, but if you pass in the index of the list you save us some work /datum/controller/subsystem/movement/proc/smash_bucket(index, bucket_time) diff --git a/code/controllers/subsystem/movement/movement_types.dm b/code/controllers/subsystem/movement/movement_types.dm index ec0136bc8c178..58b1c58b0bca1 100644 --- a/code/controllers/subsystem/movement/movement_types.dm +++ b/code/controllers/subsystem/movement/movement_types.dm @@ -869,3 +869,95 @@ var/atom/old_loc = moving.loc holder.current_pipe = holder.current_pipe.transfer(holder) return old_loc != moving?.loc ? MOVELOOP_SUCCESS : MOVELOOP_FAILURE + + +/** + * Helper proc for the smooth_move datum + * + * Returns TRUE if the loop sucessfully started, or FALSE if it failed + * + * Arguments: + * moving - The atom we want to move + * angle - Angle at which we want to move + * delay - How many deci-seconds to wait between fires. Defaults to the lowest value, 0.1 + * timeout - Time in deci-seconds until the moveloop self expires. Defaults to INFINITY + * subsystem - The movement subsystem to use. Defaults to SSmovement. Only one loop can exist for any one subsystem + * priority - Defines how different move loops override each other. Lower numbers beat higher numbers, equal defaults to what currently exists. Defaults to MOVEMENT_DEFAULT_PRIORITY + * flags - Set of bitflags that effect move loop behavior in some way. Check _DEFINES/movement.dm + * +**/ + +/datum/move_manager/proc/smooth_move(moving, angle, delay, timeout, subsystem, priority, flags, datum/extra_info) + return add_to_loop(moving, subsystem, /datum/move_loop/smooth_move, priority, flags, extra_info, delay, timeout, angle) + +/datum/move_loop/smooth_move + /// Angle at which we move. 0 is north because byond. + var/angle = 0 + /// When this gets bigger than 1, we move a turf + var/x_ticker = 0 + var/y_ticker = 0 + /// The rate at which we move, between 0 and 1. Cached to cut down on trig + var/x_rate = 0 + var/y_rate = 1 + /// Sign for our movement + var/x_sign = 1 + var/y_sign = 1 + /// Actual move delay, as delay will be modified by move() depending on what direction we move in + var/saved_delay + +/datum/move_loop/smooth_move/setup(delay, timeout, angle) + . = ..() + if(!.) + return FALSE + set_angle(angle) + saved_delay = delay + +/datum/move_loop/smooth_move/set_delay(new_delay) + new_delay = round(new_delay, world.tick_lag) + . = ..() + saved_delay = delay + +/datum/move_loop/smooth_move/compare_loops(datum/move_loop/loop_type, priority, flags, extra_info, delay, timeout, atom/chasing, home = FALSE) + if(..() && angle == src.angle) + return TRUE + return FALSE + +/datum/move_loop/smooth_move/move() + var/atom/old_loc = moving.loc + // Defaulting to 2 because if one rate is 0 the other is guaranteed to be 1, so maxing out at 1 to_move + var/x_to_move = x_rate > 0 ? (1 - x_ticker) / x_rate : 2 + var/y_to_move = y_rate > 0 ? (1 - y_ticker) / y_rate : 2 + var/move_dist = min(x_to_move, y_to_move) + x_ticker += x_rate * move_dist + y_ticker += y_rate * move_dist + + // Per Bresenham's, if we are closer to the next tile's center move diagonally. Checked by seeing if we pass into the next tile after moving another half a tile + var/move_x = (x_ticker + x_rate * 0.5) > 1 + var/move_y = (y_ticker + y_rate * 0.5) > 1 + if (move_x) + x_ticker = 0 + if (move_y) + y_ticker = 0 + + var/turf/next_turf = locate(moving.x + (move_x ? x_sign : 0), moving.y + (move_y ? y_sign : 0), moving.z) + moving.Move(next_turf, get_dir(moving, next_turf), FALSE, !(flags & MOVEMENT_LOOP_NO_DIR_UPDATE)) + + if (old_loc == moving?.loc) + return MOVELOOP_FAILURE + + delay = saved_delay + if (move_x && move_y) + delay *= 1.4 + + return MOVELOOP_SUCCESS + +/datum/move_loop/smooth_move/proc/set_angle(new_angle) + angle = new_angle + x_rate = sin(angle) + y_rate = cos(angle) + x_sign = SIGN(x_rate) + y_sign = SIGN(y_rate) + x_rate = abs(x_rate) + y_rate = abs(y_rate) + x_ticker = 0 + y_ticker = 0 diff --git a/code/controllers/subsystem/movement/newtonian_movement.dm b/code/controllers/subsystem/movement/newtonian_movement.dm new file mode 100644 index 0000000000000..aeb03a576dae0 --- /dev/null +++ b/code/controllers/subsystem/movement/newtonian_movement.dm @@ -0,0 +1,31 @@ +/// The subsystem is intended to tick things related to space/newtonian movement, such as constant sources of inertia +MOVEMENT_SUBSYSTEM_DEF(newtonian_movement) + name = "Newtonian Movement" + flags = SS_NO_INIT|SS_TICKER + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + + var/stat_tag = "P" //Used for logging + var/list/processing = list() + var/list/currentrun = list() + +/datum/controller/subsystem/movement/newtonian_movement/stat_entry(msg) + msg = "[stat_tag]:[length(processing)]" + return ..() + +/datum/controller/subsystem/movement/newtonian_movement/fire(resumed = FALSE) + . = ..() + if (!resumed) + currentrun = processing.Copy() + //cache for sanic speed (lists are references anyways) + var/list/current_run = currentrun + + while(current_run.len) + var/datum/thing = current_run[current_run.len] + current_run.len-- + if(QDELETED(thing)) + processing -= thing + else if(thing.process(TICKS2DS(wait) * 0.1) == PROCESS_KILL) + // fully stop so that a future START_PROCESSING will work + STOP_PROCESSING(src, thing) + if (MC_TICK_CHECK) + return diff --git a/code/controllers/subsystem/movement/spacedrift.dm b/code/controllers/subsystem/movement/spacedrift.dm deleted file mode 100644 index 4002b5eb555f2..0000000000000 --- a/code/controllers/subsystem/movement/spacedrift.dm +++ /dev/null @@ -1,5 +0,0 @@ -MOVEMENT_SUBSYSTEM_DEF(spacedrift) - name = "Space Drift" - priority = FIRE_PRIORITY_SPACEDRIFT - flags = SS_NO_INIT|SS_TICKER - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/nightshift.dm b/code/controllers/subsystem/nightshift.dm index b8df42742e43c..170f12696147f 100644 --- a/code/controllers/subsystem/nightshift.dm +++ b/code/controllers/subsystem/nightshift.dm @@ -26,7 +26,7 @@ SUBSYSTEM_DEF(nightshift) /datum/controller/subsystem/nightshift/proc/announce(message) priority_announce( text = message, - sound = 'sound/misc/notice2.ogg', + sound = 'sound/announcer/notice/notice2.ogg', sender_override = "Automated Lighting System Announcement", color_override = "grey", ) diff --git a/code/controllers/subsystem/overlays.dm b/code/controllers/subsystem/overlays.dm index db94c291a18bd..fda892be7a432 100644 --- a/code/controllers/subsystem/overlays.dm +++ b/code/controllers/subsystem/overlays.dm @@ -17,7 +17,7 @@ SUBSYSTEM_DEF(overlays) /// Don't have access to that type tho, so this is the best you're gonna get /proc/overlays2text(list/overlays) var/list/unique_overlays = list() - // As anything because we're basically doing type coerrsion, rather then actually filtering for mutable apperances + // As anything because we're basically doing type coercion, rather then actually filtering for mutable appearances for(var/mutable_appearance/overlay as anything in overlays) var/key = "[overlay.icon]-[overlay.icon_state]-[overlay.dir]" unique_overlays[key] += 1 diff --git a/code/controllers/subsystem/pathfinder.dm b/code/controllers/subsystem/pathfinder.dm index fa1a7af5c8598..70dc152b06df2 100644 --- a/code/controllers/subsystem/pathfinder.dm +++ b/code/controllers/subsystem/pathfinder.dm @@ -158,7 +158,7 @@ SUBSYSTEM_DEF(pathfinder) /// Takes a set of pathfind info, returns the first valid pathmap that would work if one exists /// Optionally takes a max age to accept (defaults to 0 seconds) and a minimum acceptable range -/// If include_building is true and we can only find a building path, ew'll use that instead. tho we will wait for it to finish first +/// If include_building is true and we can only find a building path, we'll use that instead. tho we will wait for it to finish first /datum/controller/subsystem/pathfinder/proc/get_valid_map(datum/can_pass_info/pass_info, turf/target, simulated_only = TRUE, turf/exclude, age = MAP_REUSE_INSTANT, min_range = -INFINITY, include_building = FALSE) // Walk all the maps that match our caller's turf OR our target's // Then hold onto em. If their cache time is short we can reuse/expand them, if not we'll have to make a new one diff --git a/code/controllers/subsystem/persistence/_persistence.dm b/code/controllers/subsystem/persistence/_persistence.dm index 5c51ed9fb05e7..df225210f02e3 100644 --- a/code/controllers/subsystem/persistence/_persistence.dm +++ b/code/controllers/subsystem/persistence/_persistence.dm @@ -48,7 +48,17 @@ SUBSYSTEM_DEF(persistence) var/tram_hits_this_round = 0 var/tram_hits_last_round = 0 - var/last_storyteller = "" // BUBBER EDIT ADD: Storyteller votes + var/last_storyteller_type = "" // BUBBER EDIT ADD: Storyteller votes + /// A json database to data/message_bottles.json + var/datum/json_database/message_bottles_database + /// An index used to create unique ids for the message bottles database + var/message_bottles_index = 0 + /** + * A list of non-maploaded photos or papers that met the 0.2% chance to be saved in the message bottles database + * because I don't want the database to feel empty unless there's someone constantly throwing bottles in the + * sea or beach/ocean fishing portals. + */ + var/list/queued_message_bottles /datum/controller/subsystem/persistence/Initialize() load_poly() @@ -63,7 +73,7 @@ SUBSYSTEM_DEF(persistence) load_panic_bunker() //SKYRAT EDIT ADDITION - PANICBUNKER load_tram_counter() load_adventures() - load_storyteller() //BUBBER EDIT ADD - Storyteller + load_storyteller_type() //BUBBER EDIT ADD - Storyteller return SS_INIT_SUCCESS ///Collects all data to persist. @@ -77,6 +87,7 @@ SUBSYSTEM_DEF(persistence) save_custom_outfits() save_modular_persistence() // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE save_delamination_counter() + save_queued_message_bottles() 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) @@ -104,7 +115,7 @@ SUBSYSTEM_DEF(persistence) 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) + if(VM.map_name == SSmapping.current_map.map_name) run++ for(var/name in SSpersistence.saved_maps) if(VM.map_name == name) @@ -121,7 +132,7 @@ SUBSYSTEM_DEF(persistence) saved_maps += mapstosave for(var/i = mapstosave; i > 1; i--) saved_maps[i] = saved_maps[i-1] - saved_maps[1] = SSmapping.config.map_name + saved_maps[1] = SSmapping.current_map.map_name var/json_file = file(FILE_RECENT_MAPS) var/list/file_data = list() file_data["data"] = saved_maps diff --git a/code/controllers/subsystem/persistence/engravings.dm b/code/controllers/subsystem/persistence/engravings.dm index f47fc7fbba124..ad00c7909d723 100644 --- a/code/controllers/subsystem/persistence/engravings.dm +++ b/code/controllers/subsystem/persistence/engravings.dm @@ -14,7 +14,7 @@ saved_engravings = json["entries"] if(!saved_engravings.len) - log_world("Failed to load engraved messages on map [SSmapping.config.map_name]") + log_world("Failed to load engraved messages on map [SSmapping.current_map.map_name]") return var/list/viable_turfs = get_area_turfs(/area/station/maintenance, subtypes = TRUE) + get_area_turfs(/area/station/security/prison, subtypes = TRUE) @@ -27,7 +27,7 @@ var/successfully_loaded_engravings = 0 - for(var/iteration in 1 to rand(MIN_PERSISTENT_ENGRAVINGS, MAX_PERSISTENT_ENGRAVINGS)) + for(var/iteration in 1 to min(rand(MIN_PERSISTENT_ENGRAVINGS, MAX_PERSISTENT_ENGRAVINGS), saved_engravings.len)) 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!") @@ -42,7 +42,7 @@ successfully_loaded_engravings++ turfs_to_pick_from -= engraved_wall - log_world("Loaded [successfully_loaded_engravings] engraved messages on map [SSmapping.config.map_name]") + log_world("Loaded [successfully_loaded_engravings] engraved messages on map [SSmapping.current_map.map_name]") ///Saves all new engravings in the world. /datum/controller/subsystem/persistence/proc/save_wall_engravings() diff --git a/code/controllers/subsystem/persistence/message_bottles.dm b/code/controllers/subsystem/persistence/message_bottles.dm new file mode 100644 index 0000000000000..ce1efe5e59c5e --- /dev/null +++ b/code/controllers/subsystem/persistence/message_bottles.dm @@ -0,0 +1,54 @@ +///This proc is used to save photos, papers and cash stored inside a bottle when tossed into the ocean. +/datum/controller/subsystem/persistence/proc/save_message_bottle(obj/item/message, bottle_type = /obj/item/reagent_containers/cup/glass/bottle) + if(isnull(message_bottles_database)) + message_bottles_database = new("data/message_bottles.json") + + var/list/data = list() + data["bottle_type"] = text2path(bottle_type) + if(istype(message, /obj/item/paper)) + var/obj/item/paper/paper = message + if(!length(paper.raw_text_inputs) && !length(paper.raw_stamp_data) && !length(paper.raw_field_input_data)) + return + data["paper"] = paper.convert_to_data() + else if(istype(message, /obj/item/photo)) + var/obj/item/photo/photo = message + if(!photo.picture?.id) + return + data["photo_id"] = photo.picture.id + else if(istype(message, /obj/item/stack/spacecash)) + var/obj/item/stack/spacecash/cash = message + data["cash"] = text2path(cash.type) + data["amount"] = cash.amount + message_bottles_index++ + message_bottles_database.set_key("message-[GLOB.round_id]-[message_bottles_index]", data) + +/datum/controller/subsystem/persistence/proc/load_message_bottle(atom/loc) + if(isnull(message_bottles_database)) + message_bottles_database = new("data/message_bottles.json") + + var/list/data = message_bottles_database.pick_and_take_key() + if(!data) + var/obj/item/reagent_containers/cup/glass/bottle/bottle = new(loc) + return bottle + + var/bottle_type = text2path(data["bottle_type"]) || /obj/item/reagent_containers/cup/glass/bottle + var/obj/item/reagent_containers/cup/glass/bottle/bottle = new bottle_type(loc) + bottle.reagents.remove_all(bottle.reagents.maximum_volume) + if(data["photo_id"]) + var/obj/item/photo/old/photo = load_photo_from_disk(data["photo_id"], bottle) + bottle.message_in_a_bottle = photo + else if(data["cash"]) + var/cash_type = text2path(data["cash"]) || /obj/item/stack/spacecash/c10 + var/obj/item/stack/spacecash/cash = new cash_type(bottle, data["amount"]) + bottle.message_in_a_bottle = cash + else if(data["paper"]) + var/obj/item/paper/paper = new(bottle) + paper.write_from_data(data["paper"]) + bottle.message_in_a_bottle = paper + + bottle.update_icon(UPDATE_OVERLAYS) + +/datum/controller/subsystem/persistence/proc/save_queued_message_bottles() + for(var/item in queued_message_bottles) + save_message_bottle(item) + queued_message_bottles = null diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm index f9891183feec6..bfe5d33dff061 100644 --- a/code/controllers/subsystem/polling.dm +++ b/code/controllers/subsystem/polling.dm @@ -36,7 +36,7 @@ SUBSYSTEM_DEF(polling) * * chat_text_border_icon: Object or path to make an icon of to decorate the chat announcement. * * announce_chosen: Whether we should announce the chosen candidates in chat. This is ignored unless amount_to_pick is greater than 0. * - * Returns a list of all mobs who signed up for the poll. + * Returns a list of all mobs who signed up for the poll, OR, in the case that amount_to_pick is equal to 1 the singular mob/null if no available candidates. */ /datum/controller/subsystem/polling/proc/poll_candidates( question, @@ -155,7 +155,7 @@ SUBSYSTEM_DEF(polling) act_never = "[custom_link_style_start]\[Never For This Round\]" if(!duplicate_message_check(alert_poll)) //Only notify people once. They'll notice if there are multiple and we don't want to spam people. - SEND_SOUND(candidate_mob, 'sound/misc/notice2.ogg') + SEND_SOUND(candidate_mob, 'sound/announcer/notice/notice2.ogg') var/surrounding_icon if(chat_text_border_icon) var/image/surrounding_image @@ -173,27 +173,16 @@ SUBSYSTEM_DEF(polling) // Sleep until the time is up UNTIL(new_poll.finished) - if(!(amount_to_pick > 0)) + if(!amount_to_pick) return new_poll.signed_up - if(length(new_poll.signed_up) < amount_to_pick) - return new_poll.signed_up - if(length(new_poll.signed_up) < amount_to_pick) - return new_poll.signed_up - - //BUBBERSTATION CHANGE START: ANTAG TICKETS INTEGRATION - var/list/candidate_tickets = candidates_to_tickets(new_poll.signed_up) - for(var/pick in 1 to amount_to_pick) - if(!length(candidate_tickets)) - continue - var/mob/chosen_mob = pick_weight(candidate_tickets) - candidate_tickets -= chosen_mob - new_poll.chosen_candidates += chosen_mob - /* + if (!length(new_poll.signed_up)) + return null for(var/pick in 1 to amount_to_pick) + // There may be less people signed up than amount_to_pick + // pick_n_take returns the default return value of null if passed an empty list, so just break in that case rather than adding null to the list. + if(!length(new_poll.signed_up)) + break new_poll.chosen_candidates += pick_n_take(new_poll.signed_up) - */ - //BUBBERSTATION CHANGE END: ANTAG TICKETS INTEGRATION - if(announce_chosen) new_poll.announce_chosen(group) if(new_poll.chosen_candidates.len == 1) diff --git a/code/controllers/subsystem/processing/ai_idle_behaviors.dm b/code/controllers/subsystem/processing/ai_idle_behaviors.dm index cda3d354882f4..8875d971ad87c 100644 --- a/code/controllers/subsystem/processing/ai_idle_behaviors.dm +++ b/code/controllers/subsystem/processing/ai_idle_behaviors.dm @@ -1,6 +1,17 @@ PROCESSING_SUBSYSTEM_DEF(idle_ai_behaviors) - name = "idle_ai_behaviors" - flags = SS_NO_INIT | SS_BACKGROUND + name = "AI Idle Behaviors" + flags = SS_BACKGROUND wait = 1.5 SECONDS priority = FIRE_PRIORITY_IDLE_NPC init_order = INIT_ORDER_AI_IDLE_CONTROLLERS //must execute only after ai behaviors are initialized + ///List of all the idle ai behaviors + var/list/idle_behaviors = list() + +/datum/controller/subsystem/processing/idle_ai_behaviors/Initialize() + setup_idle_behaviors() + return SS_INIT_SUCCESS + +/datum/controller/subsystem/processing/idle_ai_behaviors/proc/setup_idle_behaviors() + for(var/behavior_type in subtypesof(/datum/idle_behavior)) + var/datum/idle_behavior/behavior = new behavior_type + idle_behaviors[behavior_type] = behavior diff --git a/code/controllers/subsystem/processing/fishing.dm b/code/controllers/subsystem/processing/fishing.dm index da10d3d631aef..0e8c126fe9330 100644 --- a/code/controllers/subsystem/processing/fishing.dm +++ b/code/controllers/subsystem/processing/fishing.dm @@ -1,7 +1,61 @@ -/** - * So far, only used by the fishing minigame. Feel free to rename it to something like veryfastprocess - * if you need one that fires 10 times a second - */ +/// subsystem for the fishing minigame processing. PROCESSING_SUBSYSTEM_DEF(fishing) name = "Fishing" - wait = 0.1 SECONDS + flags = SS_BACKGROUND|SS_POST_FIRE_TIMING + wait = 0.05 SECONDS // If you raise it to 0.1 SECONDS, you better also modify [datum/fish_movement/move_fish()] + ///Cached fish properties so we don't have to initalize fish every time + var/list/fish_properties + ///A cache of fish that can be caught by each type of fishing lure + var/list/lure_catchables + +/datum/controller/subsystem/processing/fishing/Initialize() + ///init the properties + fish_properties = list() + for(var/fish_type in subtypesof(/obj/item/fish)) + var/obj/item/fish/fish = new fish_type(null, FALSE) + var/list/properties = list() + fish_properties[fish_type] = properties + properties[FISH_PROPERTIES_FAV_BAIT] = fish.favorite_bait.Copy() + properties[FISH_PROPERTIES_BAD_BAIT] = fish.disliked_bait.Copy() + properties[FISH_PROPERTIES_TRAITS] = fish.fish_traits.Copy() + + var/list/evo_types = fish.evolution_types?.Copy() + properties[FISH_PROPERTIES_EVOLUTIONS] = evo_types + for(var/type in evo_types) + LAZYADD(GLOB.fishes_by_fish_evolution[type], fish_type) + + var/beauty_score = "???" + switch(fish.beauty) + if(-INFINITY to FISH_BEAUTY_DISGUSTING) + beauty_score = "OH HELL NAW!" + if(FISH_BEAUTY_DISGUSTING to FISH_BEAUTY_UGLY) + beauty_score = "☆☆☆☆☆" + if(FISH_BEAUTY_UGLY to FISH_BEAUTY_BAD) + beauty_score = "★☆☆☆☆" + if(FISH_BEAUTY_BAD to FISH_BEAUTY_NULL) + beauty_score = "★★☆☆☆" + if(FISH_BEAUTY_NULL to FISH_BEAUTY_GENERIC) + beauty_score = "★★★☆☆" + if(FISH_BEAUTY_GENERIC to FISH_BEAUTY_GOOD) + beauty_score = "★★★★☆" + if(FISH_BEAUTY_GOOD to FISH_BEAUTY_GREAT) + beauty_score = "★★★★★" + if(FISH_BEAUTY_GREAT to INFINITY) + beauty_score = "★★★★★★" + + properties[FISH_PROPERTIES_BEAUTY_SCORE] = beauty_score + + qdel(fish) + + ///init the list of things lures can catch + lure_catchables = list() + var/list/fish_types = subtypesof(/obj/item/fish) + for(var/lure_type in typesof(/obj/item/fishing_lure)) + var/obj/item/fishing_lure/lure = new lure_type + lure_catchables[lure_type] = list() + for(var/obj/item/fish/fish_type as anything in fish_types) + if(lure.is_catchable_fish(fish_type, fish_properties[fish_type])) + lure_catchables[lure_type] += fish_type + qdel(lure) + + return SS_INIT_SUCCESS diff --git a/code/controllers/subsystem/processing/manufacturing.dm b/code/controllers/subsystem/processing/manufacturing.dm new file mode 100644 index 0000000000000..8bc9c6af5d57b --- /dev/null +++ b/code/controllers/subsystem/processing/manufacturing.dm @@ -0,0 +1,4 @@ +PROCESSING_SUBSYSTEM_DEF(manufacturing) + name = "Manufacturing Processing" + wait = 1 SECONDS + stat_tag = "MN" diff --git a/code/controllers/subsystem/processing/station.dm b/code/controllers/subsystem/processing/station.dm index 064f1446bf965..38f807852b078 100644 --- a/code/controllers/subsystem/processing/station.dm +++ b/code/controllers/subsystem/processing/station.dm @@ -164,6 +164,8 @@ PROCESSING_SUBSYSTEM_DEF(station) ///Creates a given trait of a specific type, while also removing any blacklisted ones from the future pool. /datum/controller/subsystem/processing/station/proc/setup_trait(datum/station_trait/trait_type) + if(locate(trait_type) in station_traits) + return var/datum/station_trait/trait_instance = new trait_type() station_traits += trait_instance log_game("Station Trait: [trait_instance.name] chosen for this round.") @@ -180,6 +182,5 @@ PROCESSING_SUBSYSTEM_DEF(station) var/datum/hud/new_player/observer_hud = player.hud_used if (!istype(observer_hud)) continue - observer_hud.add_station_trait_buttons() - observer_hud.show_hud(observer_hud.hud_version) + observer_hud.show_station_trait_buttons() */ diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index de9de30a87bd4..f2bb23ed6714b 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -140,6 +140,9 @@ SUBSYSTEM_DEF(shuttle) /// Did the supermatter start a cascade event? var/supermatter_cascade = FALSE + /// List of express consoles that are waiting for pack initialization + var/list/obj/machinery/computer/cargo/express/express_consoles = list() + /datum/controller/subsystem/shuttle/Initialize() order_number = rand(1, 9000) @@ -151,6 +154,7 @@ SUBSYSTEM_DEF(shuttle) if(pack == /datum/supply_pack/armament) continue //SKYRAT EDIT END + if(ispath(pack, /datum/supply_pack)) pack = new pack @@ -176,6 +180,9 @@ SUBSYSTEM_DEF(shuttle) supply_packs[pack.id] = pack + for (var/obj/machinery/computer/cargo/express/console as anything in express_consoles) + console.packin_up(TRUE) + setup_shuttles(stationary_docking_ports) has_purchase_shuttle_access = init_has_purchase_shuttle_access() @@ -279,7 +286,7 @@ SUBSYSTEM_DEF(shuttle) 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, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "grey", ) @@ -293,7 +300,7 @@ SUBSYSTEM_DEF(shuttle) priority_announce( text= "Emergency shuttle uplink services are now back online.", title = "Uplink Restored", - sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "green", ) @@ -539,7 +546,7 @@ SUBSYSTEM_DEF(shuttle) priority_announce( text = "Departure has been postponed indefinitely pending conflict resolution.", title = "Hostile Environment Detected", - sound = 'sound/misc/notice1.ogg', + sound = 'sound/announcer/notice/notice1.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "grey", ) @@ -549,7 +556,7 @@ SUBSYSTEM_DEF(shuttle) priority_announce( text = "You have [DisplayTimeText(emergency_dock_time)] to board the emergency shuttle.", title = "Hostile Environment Resolved", - sound = 'sound/misc/announce_dig.ogg', + sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "green", ) @@ -1052,7 +1059,7 @@ SUBSYSTEM_DEF(shuttle) return data -/datum/controller/subsystem/shuttle/ui_act(action, params) +/datum/controller/subsystem/shuttle/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm index 9bb0e286ca5d5..8d7017648e92c 100644 --- a/code/controllers/subsystem/sprite_accessories.dm +++ b/code/controllers/subsystem/sprite_accessories.dm @@ -121,6 +121,8 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity socks_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/socks)[DEFAULT_SPRITE_LIST] /* // SKYRAT EDIT REMOVAL START - Customization + socks_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/socks)[DEFAULT_SPRITE_LIST] + lizard_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/lizard_markings, add_blank = TRUE)[DEFAULT_SPRITE_LIST] tails_list_human = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, add_blank = TRUE)[DEFAULT_SPRITE_LIST] tails_list_lizard = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard)[DEFAULT_SPRITE_LIST] diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 4daf107083f90..535cbd33503ae 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -22,10 +22,10 @@ SUBSYSTEM_DEF(statpanels) /datum/controller/subsystem/statpanels/fire(resumed = FALSE) if (!resumed) num_fires++ - var/datum/map_config/cached = SSmapping.next_map_config + var/datum/map_config/cached = SSmap_vote.next_map_config /* SKYRAT EDIT CHANGE global_data = list( - "Map: [SSmapping.config?.map_name || "Loading..."]", + "Map: [SSmapping.current_map?.map_name || "Loading..."]", cached ? "Next Map: [cached.map_name]" : null, "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]", "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]", @@ -43,7 +43,7 @@ SUBSYSTEM_DEF(statpanels) var/timeinworld = "[time2text(world.realtime, "DD of Month,")] [CURRENT_STATION_YEAR]" global_data = list( "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)", - "Map: [SSmapping.config?.map_name || "Loading..."]", + "Map: [SSmapping.current_map?.map_name || "Loading..."]", cached ? "Next Map: [cached.map_name]" : null, "Storyteller: [SSgamemode.storyteller ? SSgamemode.storyteller.name : "N/A"]", // BUBBER EDIT ADDITION "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]", diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index fc0375f4f0b6a..da403db9e4559 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -202,6 +202,11 @@ SUBSYSTEM_DEF(throwing) if(!thrownthing) return thrownthing.throwing = null + var/drift_force = speed + if (isitem(thrownthing)) + var/obj/item/thrownitem = thrownthing + drift_force *= WEIGHT_TO_NEWTONS(thrownitem.w_class) + if (!hit) for (var/atom/movable/obstacle as anything in get_turf(thrownthing)) //looking for our target on the turf we land on. if (obstacle == target) @@ -214,9 +219,9 @@ SUBSYSTEM_DEF(throwing) thrownthing.throw_impact(get_turf(thrownthing), src) // we haven't hit something yet and we still must, let's hit the ground. if(QDELETED(thrownthing)) //throw_impact can delete things, such as glasses smashing return //deletion should already be handled by on_thrownthing_qdel() - thrownthing.newtonian_move(init_dir) + thrownthing.newtonian_move(delta_to_angle(dist_x, dist_y), drift_force = drift_force) else - thrownthing.newtonian_move(init_dir) + thrownthing.newtonian_move(delta_to_angle(dist_x, dist_y), drift_force = drift_force) if(target) thrownthing.throw_impact(target, src) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 3b6db8fc83bd2..6929ed0f289ec 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -97,12 +97,12 @@ SUBSYSTEM_DEF(ticker) switch(L.len) if(3) //rare+MAP+sound.ogg or MAP+rare.sound.ogg -- Rare Map-specific sounds if(use_rare_music) - if(L[1] == "rare" && L[2] == SSmapping.config.map_name) + if(L[1] == "rare" && L[2] == SSmapping.current_map.map_name) music += S - else if(L[2] == "rare" && L[1] == SSmapping.config.map_name) + else if(L[2] == "rare" && L[1] == SSmapping.current_map.map_name) music += S if(2) //rare+sound.ogg or MAP+sound.ogg -- Rare sounds or Map-specific sounds - if((use_rare_music && L[1] == "rare") || (L[1] == SSmapping.config.map_name)) + if((use_rare_music && L[1] == "rare") || (L[1] == SSmapping.current_map.map_name)) music += S if(1) //sound.ogg -- common sound if(L[1] == "exclude") @@ -162,11 +162,11 @@ SUBSYSTEM_DEF(ticker) window_flash(C, ignorepref = TRUE) //let them know lobby has opened up. 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)) + send2chat("New round starting on [SSmapping.current_map.map_name]!", CONFIG_GET(string/channel_announce_new_game)) */ // SKYRAT 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 + send2chat(new /datum/tgs_message_content("<@&[CONFIG_GET(string/game_alert_role_id)]> Round **[GLOB.round_id]** starting on [SSmapping.current_map.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 current_state = GAME_STATE_PREGAME SSvote.initiate_vote(/datum/vote/storyteller, "Storyteller Vote", forced = TRUE) // BUBBER EDIT ADDITION @@ -174,6 +174,7 @@ SUBSYSTEM_DEF(ticker) addtimer(CALLBACK(SStitle, TYPE_PROC_REF(/datum/controller/subsystem/title, change_title_screen)), 1 SECONDS) //SKYRAT EDIT ADDITION - Title screen //Everyone who wants to be an observer is now spawned SEND_SIGNAL(src, COMSIG_TICKER_ENTER_PREGAME) + fire() if(GAME_STATE_PREGAME) //lobby stats for statpanels @@ -225,7 +226,6 @@ SUBSYSTEM_DEF(ticker) toggle_ooc(TRUE) // Turn it on toggle_dooc(TRUE) declare_completion(force_ending) - check_maprotate() Master.SetRunLevel(RUNLEVEL_POSTGAME) /// Checks if the round should be ending, called every ticker tick @@ -255,14 +255,14 @@ SUBSYSTEM_DEF(ticker) CHECK_TICK SEND_GLOBAL_SIGNAL(COMSIG_GLOB_PRE_JOBS_ASSIGNED, src) - can_continue = can_continue && SSjob.DivideOccupations() //Distribute jobs + can_continue = can_continue && SSjob.divide_occupations() //Distribute jobs CHECK_TICK if(!GLOB.Debug2) if(!can_continue) log_game("Game failed pre_setup") to_chat(world, "Error setting up game. Reverting to pre-game lobby.") - SSjob.ResetOccupations() + SSjob.reset_occupations() return FALSE else message_admins(span_notice("DEBUG: Bypassing prestart checks...")) @@ -445,7 +445,7 @@ SUBSYSTEM_DEF(ticker) continue var/datum/job/player_assigned_role = new_player_living.mind.assigned_role if(player_assigned_role.job_flags & JOB_EQUIP_RANK) - SSjob.EquipRank(new_player_living, player_assigned_role, new_player_mob.client) + SSjob.equip_rank(new_player_living, player_assigned_role, new_player_mob.client) player_assigned_role.after_roundstart_spawn(new_player_living, new_player_mob.client) if(picked_spare_id_candidate == new_player_mob) captainless = FALSE @@ -456,7 +456,6 @@ SUBSYSTEM_DEF(ticker) if(new_player_mob.client?.prefs?.should_be_random_hardcore(player_assigned_role, new_player_living.mind)) new_player_mob.client.prefs.hardcore_random_setup(new_player_living) SSquirks.AssignQuirks(new_player_living, new_player_mob.client) - CHECK_TICK if(captainless) @@ -519,7 +518,7 @@ SUBSYSTEM_DEF(ticker) list_clear_nulls(queued_players) for (var/mob/dead/new_player/new_player in queued_players) to_chat(new_player, span_userdanger("The alive players limit has been released!
[html_encode(">>Join Game<<")]")) - SEND_SOUND(new_player, sound('sound/misc/notice1.ogg')) + SEND_SOUND(new_player, sound('sound/announcer/notice/notice1.ogg')) GLOB.latejoin_menu.ui_interact(new_player) queued_players.len = 0 queue_delay = 0 @@ -534,7 +533,7 @@ SUBSYSTEM_DEF(ticker) if(living_player_count() < hard_popcap) if(next_in_line?.client) to_chat(next_in_line, span_userdanger("A slot has opened! You have approximately 20 seconds to join. \>\>Join Game\<\<")) - SEND_SOUND(next_in_line, sound('sound/misc/notice1.ogg')) + SEND_SOUND(next_in_line, sound('sound/announcer/notice/notice1.ogg')) next_in_line.ui_interact(next_in_line) return queued_players -= next_in_line //Client disconnected, remove he @@ -544,13 +543,6 @@ SUBSYSTEM_DEF(ticker) queued_players -= next_in_line queue_delay = 0 -/datum/controller/subsystem/ticker/proc/check_maprotate() - if(!CONFIG_GET(flag/maprotation)) - return - if(world.time - SSticker.round_start_time < 10 MINUTES) //Not forcing map rotation for very short rounds. - return - INVOKE_ASYNC(SSmapping, TYPE_PROC_REF(/datum/controller/subsystem/mapping/, maprotate)) - /datum/controller/subsystem/ticker/proc/HasRoundStarted() return current_state >= GAME_STATE_PLAYING diff --git a/code/controllers/subsystem/time_track.dm b/code/controllers/subsystem/time_track.dm index b3a4fe7e8698f..4c706fdaf6db3 100644 --- a/code/controllers/subsystem/time_track.dm +++ b/code/controllers/subsystem/time_track.dm @@ -42,7 +42,7 @@ SUBSYSTEM_DEF(time_track) ) /datum/controller/subsystem/time_track/Initialize() - GLOB.perf_log = "[GLOB.log_directory]/perf-[GLOB.round_id ? GLOB.round_id : "NULL"]-[SSmapping.config?.map_name].csv" + GLOB.perf_log = "[GLOB.log_directory]/perf-[GLOB.round_id ? GLOB.round_id : "NULL"]-[SSmapping.current_map.map_name].csv" world.Profile(PROFILE_RESTART, type = "sendmaps") //Need to do the sendmaps stuff in its own file, since it works different then everything else var/list/sendmaps_headers = list() diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 8ecb0c9dc6a56..c314fa7d38ba7 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -524,7 +524,7 @@ SUBSYSTEM_DEF(timer) 2 = timeToRun, 3 = wait, 4 = flags, - 5 = callBack, /* Safe to hold this directly becasue it's never del'd */ + 5 = callBack, /* Safe to hold this directly because it's never del'd */ 6 = "[callBack.object]", 7 = text_ref(callBack.object), 8 = getcallingtype(), @@ -539,7 +539,7 @@ SUBSYSTEM_DEF(timer) 2 = timeToRun, 3 = wait, 4 = flags, - 5 = callBack, /* Safe to hold this directly becasue it's never del'd */ + 5 = callBack, /* Safe to hold this directly because it's never del'd */ 6 = "[callBack.object]", 7 = getcallingtype(), 8 = callBack.delegate, diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm index d3d2bef8c9733..9f468c6a1d031 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -26,7 +26,7 @@ SUBSYSTEM_DEF(title) for(var/S in provisional_title_screens) var/list/L = splittext(S,"+") - if((L.len == 1 && (L[1] != "exclude" && L[1] != "blank.png")) || (L.len > 1 && ((use_rare_screens && LOWER_TEXT(L[1]) == "rare") || (LOWER_TEXT(L[1]) == LOWER_TEXT(SSmapping.config.map_name))))) + if((L.len == 1 && (L[1] != "exclude" && L[1] != "blank.png")) || (L.len > 1 && ((use_rare_screens && LOWER_TEXT(L[1]) == "rare") || (LOWER_TEXT(L[1]) == LOWER_TEXT(SSmapping.current_map.map_name))))) title_screens += S if(length(title_screens)) diff --git a/code/controllers/subsystem/unplanned_ai_idle_controllers.dm b/code/controllers/subsystem/unplanned_ai_idle_controllers.dm new file mode 100644 index 0000000000000..6385239e18c70 --- /dev/null +++ b/code/controllers/subsystem/unplanned_ai_idle_controllers.dm @@ -0,0 +1,4 @@ +UNPLANNED_CONTROLLER_SUBSYSTEM_DEF(idle_unplanned_controllers) + name = "Unplanned AI Idle Controllers" + wait = 2.5 SECONDS + target_status = AI_STATUS_IDLE diff --git a/code/controllers/subsystem/unplanned_controllers.dm b/code/controllers/subsystem/unplanned_controllers.dm new file mode 100644 index 0000000000000..3fb5f46dd069d --- /dev/null +++ b/code/controllers/subsystem/unplanned_controllers.dm @@ -0,0 +1,18 @@ +/// Handles making mobs perform lightweight "idle" behaviors such as wandering around when they have nothing planned +SUBSYSTEM_DEF(unplanned_controllers) + name = "Unplanned AI Controllers" + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT + priority = FIRE_PRIORITY_UNPLANNED_NPC + init_order = INIT_ORDER_AI_CONTROLLERS + wait = 0.25 SECONDS + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + ///what ai status are we interested in + var/target_status = AI_STATUS_ON + +/datum/controller/subsystem/unplanned_controllers/stat_entry(msg) + msg = "Planning AIs:[length(GLOB.unplanned_controllers[target_status])]" + return ..() + +/datum/controller/subsystem/unplanned_controllers/fire(resumed) + for(var/datum/ai_controller/ai_controller as anything in GLOB.unplanned_controllers[target_status]) + ai_controller.idle_behavior.perform_idle_behavior(wait * 0.1, ai_controller) diff --git a/code/controllers/subsystem/verb_manager.dm b/code/controllers/subsystem/verb_manager.dm index 337386cff8e0b..f09c050964154 100644 --- a/code/controllers/subsystem/verb_manager.dm +++ b/code/controllers/subsystem/verb_manager.dm @@ -8,15 +8,15 @@ * plus TICK_BYOND_RESERVE from the tick and uses up to that amount of time (minus the percentage of the tick used by the time it executes subsystems) * on subsystems running cool things like atmospherics or Life or SSInput or whatever. * - * Without this subsystem, verbs are likely to cause overtime if the MC uses all of the time it has alloted for itself in the tick, and SendMaps + * Without this subsystem, verbs are likely to cause overtime if the MC uses all of the time it has allotted for itself in the tick, and SendMaps * uses as much as its expected to, and an expensive verb ends up executing that tick. This is because the MC is completely blind to the cost of * verbs, it can't account for it at all. The only chance for verbs to not cause overtime in a tick where the MC used as much of the tick - * as it alloted itself and where SendMaps costed as much as it was expected to is if the verb(s) take less than TICK_BYOND_RESERVE percent of - * the tick, which isnt much. Not to mention if SendMaps takes more than 30% of the tick and the MC forces itself to take at least 70% of the + * as it allotted itself and where SendMaps costed as much as it was expected to is if the verb(s) take less than TICK_BYOND_RESERVE percent of + * the tick, which isn't much. Not to mention if SendMaps takes more than 30% of the tick and the MC forces itself to take at least 70% of the * normal tick duration which causes ticks to naturally overrun even in the absence of verbs. * * With this subsystem, the MC can account for the cost of verbs and thus stop major overruns of ticks. This means that the most important subsystems - * like SSinput can start at the same time they were supposed to, leading to a smoother experience for the player since ticks arent riddled with + * like SSinput can start at the same time they were supposed to, leading to a smoother experience for the player since ticks aren't riddled with * minor hangs over and over again. */ SUBSYSTEM_DEF(verb_manager) @@ -36,17 +36,17 @@ SUBSYSTEM_DEF(verb_manager) ///if TRUE we treat usr's with holders just like usr's without holders. otherwise they always execute immediately var/can_queue_admin_verbs = FALSE - ///if this is true all verbs immediately execute and dont queue. in case the mc is fucked or something + ///if this is true all verbs immediately execute and don't queue. in case the mc is fucked or something var/FOR_ADMINS_IF_VERBS_FUCKED_immediately_execute_all_verbs = FALSE ///used for subtypes to determine if they use their own stats for the stat entry var/use_default_stats = TRUE ///if TRUE this will... message admins every time a verb is queued to this subsystem for the next tick with stats. - ///for obvious reasons dont make this be TRUE on the code level this is for admins to turn on + ///for obvious reasons don't make this be TRUE on the code level this is for admins to turn on var/message_admins_on_queue = FALSE - ///always queue if possible. overides can_queue_admin_verbs but not FOR_ADMINS_IF_VERBS_FUCKED_immediately_execute_all_verbs + ///always queue if possible. overrides can_queue_admin_verbs but not FOR_ADMINS_IF_VERBS_FUCKED_immediately_execute_all_verbs var/always_queue = FALSE /** @@ -87,7 +87,7 @@ SUBSYSTEM_DEF(verb_manager) #else if(QDELETED(usr) || isnull(usr.client)) - stack_trace("_queue_verb() returned false because it wasnt called from player input!") + stack_trace("_queue_verb() returned false because it wasn't called from player input!") return FALSE #endif diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index ca3f5a6788005..6516f5705a103 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -101,24 +101,28 @@ SUBSYSTEM_DEF(vote) // 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/final_winner_string = (final_winner && "[final_winner]") || "NO WINNER" var/list/winners_string = list() - for(var/winner in winners) - winners_string += "[winner]" + + if(length(winners)) + for(var/winner in winners) + winners_string += "[winner]" + else + winners_string = list("NO WINNER") var/list/vote_log_data = list( + "type" = "[current_vote.type]", "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]"))) + log_vote("vote finalized", vote_log_data) + if(to_display) + to_chat(world, span_infoplain(vote_font("\n[to_display]"))) // Finally, doing any effects on vote completion - if (final_winner) // if no one voted, or the vote cannot be won, final_winner will be null - current_vote.finalize_vote(final_winner) + current_vote.finalize_vote(final_winner) /** * One selection per person, and the selection with the most votes wins. @@ -363,7 +367,7 @@ SUBSYSTEM_DEF(vote) data["VoteCD"] = CONFIG_GET(number/vote_delay) return data -/datum/controller/subsystem/vote/ui_act(action, params) +/datum/controller/subsystem/vote/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/datums/actions/action.dm b/code/datums/actions/action.dm index 39e69ba9fa8fd..2f297f480ae66 100644 --- a/code/datums/actions/action.dm +++ b/code/datums/actions/action.dm @@ -52,6 +52,8 @@ /// Toggles whether this action is usable or not var/action_disabled = FALSE + /// Can this action be shared with our rider? + var/can_be_shared = TRUE /datum/action/New(Target) link_to(Target) @@ -112,7 +114,8 @@ RegisterSignal(owner, COMSIG_LIVING_SET_BODY_POSITION, PROC_REF(update_status_on_signal)) if(check_flags & AB_CHECK_PHASED) RegisterSignals(owner, list(SIGNAL_ADDTRAIT(TRAIT_MAGICALLY_PHASED), SIGNAL_REMOVETRAIT(TRAIT_MAGICALLY_PHASED)), PROC_REF(update_status_on_signal)) - + if(check_flags & AB_CHECK_OPEN_TURF) + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(update_status_on_signal)) if(owner_has_control) RegisterSignal(grant_to, COMSIG_MOB_KEYDOWN, PROC_REF(keydown), override = TRUE) GiveAction(grant_to) @@ -139,6 +142,7 @@ UnregisterSignal(owner, list( COMSIG_LIVING_SET_BODY_POSITION, COMSIG_MOB_STATCHANGE, + COMSIG_MOVABLE_MOVED, SIGNAL_ADDTRAIT(TRAIT_HANDS_BLOCKED), SIGNAL_ADDTRAIT(TRAIT_IMMOBILIZED), SIGNAL_ADDTRAIT(TRAIT_INCAPACITATED), @@ -198,6 +202,10 @@ if (feedback) owner.balloon_alert(owner, "incorporeal!") return FALSE + if((check_flags & AB_CHECK_OPEN_TURF) && !isopenturf(owner.loc)) + if (feedback) + owner.balloon_alert(owner, "not enough space!") + return FALSE return TRUE /// Builds / updates all buttons we have shared or given out diff --git a/code/datums/actions/items/reload_rebar.dm b/code/datums/actions/items/reload_rebar.dm new file mode 100644 index 0000000000000..a29b02f6b227e --- /dev/null +++ b/code/datums/actions/items/reload_rebar.dm @@ -0,0 +1,5 @@ +/datum/action/item_action/reload_rebar + name = "Reload Rebar" + desc = "Reloads a held crossbow" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "bolts" diff --git a/code/datums/actions/mobs/blood_warp.dm b/code/datums/actions/mobs/blood_warp.dm index 1e48c6e5aa419..d65c941f5df4a 100644 --- a/code/datums/actions/mobs/blood_warp.dm +++ b/code/datums/actions/mobs/blood_warp.dm @@ -57,11 +57,11 @@ shuffle_inplace(pools) found_bloodpool = pick(pools) if(found_bloodpool) - owner.visible_message("[owner] sinks into the blood...") - playsound(owner_turf, 'sound/magic/enter_blood.ogg', 100, TRUE, -1) + owner.visible_message(span_danger("[owner] sinks into the blood...")) + playsound(owner_turf, 'sound/effects/magic/enter_blood.ogg', 100, TRUE, -1) owner.forceMove(get_turf(found_bloodpool)) - playsound(get_turf(owner), 'sound/magic/exit_blood.ogg', 100, TRUE, -1) - owner.visible_message("And springs back out!") + playsound(get_turf(owner), 'sound/effects/magic/exit_blood.ogg', 100, TRUE, -1) + owner.visible_message(span_danger("And springs back out!")) SEND_SIGNAL(owner, COMSIG_BLOOD_WARP) return TRUE return FALSE diff --git a/code/datums/actions/mobs/chase_target.dm b/code/datums/actions/mobs/chase_target.dm index c88285dd636be..c64293a863b3e 100644 --- a/code/datums/actions/mobs/chase_target.dm +++ b/code/datums/actions/mobs/chase_target.dm @@ -31,7 +31,7 @@ /// This is the proc that actually does the throwing. Charge only adds a timer for this. /datum/action/cooldown/mob_cooldown/chase_target/proc/throw_thyself() - playsound(owner, 'sound/weapons/sonic_jackhammer.ogg', 50, TRUE) + playsound(owner, 'sound/items/weapons/sonic_jackhammer.ogg', 50, TRUE) owner.throw_at(target, 7, 1.1, owner, FALSE, FALSE, CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), owner, 'sound/effects/meteorimpact.ogg', 50 * size, TRUE, 2), INFINITY) /// Resets the charge buffs. diff --git a/code/datums/actions/mobs/create_legion_turrets.dm b/code/datums/actions/mobs/create_legion_turrets.dm index 5fb668ebc36d1..71427893f43da 100644 --- a/code/datums/actions/mobs/create_legion_turrets.dm +++ b/code/datums/actions/mobs/create_legion_turrets.dm @@ -18,7 +18,7 @@ /// Creates new legion turrets around the owner between the minimum and maximum /datum/action/cooldown/mob_cooldown/create_legion_turrets/proc/create(atom/target) - playsound(owner, 'sound/magic/RATTLEMEBONES.ogg', 100, TRUE) + playsound(owner, 'sound/effects/magic/RATTLEMEBONES.ogg', 100, TRUE) var/list/possible_locations = list() for(var/turf/checked_turf in oview(owner, 4)) //Only place the turrets on open turfs if(checked_turf.is_blocked_turf()) @@ -80,7 +80,7 @@ var/angle = get_angle(our_turf, target_turf) var/datum/point/vector/V = new(our_turf.x, our_turf.y, our_turf.z, 0, 0, angle) generate_tracer_between_points(V, V.return_vector_after_increments(6), /obj/effect/projectile/tracer/legion/tracer, 0, shot_delay, 0, 0, 0, null) - playsound(src, 'sound/machines/airlockopen.ogg', 100, TRUE) + playsound(src, 'sound/machines/airlock/airlockopen.ogg', 100, TRUE) addtimer(CALLBACK(src, PROC_REF(fire_beam), angle), shot_delay) /// Called shot_delay after the turret shot the tracer. Shoots a projectile into the same direction. @@ -88,13 +88,13 @@ var/obj/projectile/ouchie = new projectile_type(loc) ouchie.firer = src ouchie.fire(angle) - playsound(src, 'sound/effects/bin_close.ogg', 100, TRUE) + playsound(src, 'sound/effects/bin/bin_close.ogg', 100, TRUE) QDEL_IN(src, 0.5 SECONDS) /// Used for the legion turret. /obj/projectile/beam/legion name = "blood pulse" - hitsound = 'sound/magic/magic_missile.ogg' + hitsound = 'sound/effects/magic/magic_missile.ogg' damage = 19 range = 6 light_color = COLOR_SOFT_RED diff --git a/code/datums/actions/mobs/dash.dm b/code/datums/actions/mobs/dash.dm index 81d6f8165d92c..ad87ab93f9a79 100644 --- a/code/datums/actions/mobs/dash.dm +++ b/code/datums/actions/mobs/dash.dm @@ -52,11 +52,11 @@ new /obj/effect/temp_visual/small_smoke/halfsecond(step_forward_turf) var/obj/effect/temp_visual/decoy/fading/halfsecond/D = new (own_turf, owner) owner.forceMove(step_back_turf) - playsound(own_turf, 'sound/weapons/punchmiss.ogg', 40, TRUE, -1) + playsound(own_turf, 'sound/items/weapons/punchmiss.ogg', 40, TRUE, -1) owner.alpha = 0 animate(owner, alpha = 255, time = 5) SLEEP_CHECK_DEATH(0.2 SECONDS, owner) D.forceMove(step_forward_turf) owner.forceMove(target_turf) - playsound(target_turf, 'sound/weapons/punchmiss.ogg', 40, TRUE, -1) + playsound(target_turf, 'sound/items/weapons/punchmiss.ogg', 40, TRUE, -1) SLEEP_CHECK_DEATH(0.1 SECONDS, owner) diff --git a/code/datums/actions/mobs/fire_breath.dm b/code/datums/actions/mobs/fire_breath.dm index e52fa14d0d905..11ad04fa0df20 100644 --- a/code/datums/actions/mobs/fire_breath.dm +++ b/code/datums/actions/mobs/fire_breath.dm @@ -7,7 +7,7 @@ /// The range of the fire var/fire_range = 15 /// The sound played when you use this ability - var/fire_sound = 'sound/magic/fireball.ogg' + var/fire_sound = 'sound/effects/magic/fireball.ogg' /// Time to wait between spawning each fire turf var/fire_delay = 1.5 DECISECONDS /// How hot is our fire diff --git a/code/datums/actions/mobs/lava_swoop.dm b/code/datums/actions/mobs/lava_swoop.dm index aa512b2d28e8d..2b07734b4a852 100644 --- a/code/datums/actions/mobs/lava_swoop.dm +++ b/code/datums/actions/mobs/lava_swoop.dm @@ -39,7 +39,7 @@ return // stop swooped target movement swooping = TRUE - ADD_TRAIT(owner, TRAIT_UNDENSE, SWOOPING_TRAIT) + owner.add_traits(list(TRAIT_GODMODE, TRAIT_UNDENSE), SWOOPING_TRAIT) owner.visible_message(span_boldwarning("[owner] swoops up high!")) var/negative @@ -66,7 +66,6 @@ animate(owner, alpha = 255, transform = oldtransform, time = 0, flags = ANIMATION_END_NOW) //reset immediately return animate(owner, alpha = 100, transform = matrix()*0.7, time = 7) - owner.status_flags |= GODMODE SEND_SIGNAL(owner, COMSIG_SWOOP_INVULNERABILITY_STARTED) owner.mouse_opacity = MOUSE_OPACITY_TRANSPARENT @@ -112,12 +111,11 @@ for(var/mob/observer in range(7, owner)) shake_camera(observer, 15, 1) - REMOVE_TRAIT(owner, TRAIT_UNDENSE, SWOOPING_TRAIT) + owner.remove_traits(list(TRAIT_GODMODE, TRAIT_UNDENSE), SWOOPING_TRAIT) SLEEP_CHECK_DEATH(1, owner) swooping = FALSE if(!lava_success) SEND_SIGNAL(owner, COMSIG_LAVA_ARENA_FAILED) - owner.status_flags &= ~GODMODE /datum/action/cooldown/mob_cooldown/lava_swoop/proc/lava_pools(atom/target, amount = 30, delay = 0.8) if(!target) diff --git a/code/datums/actions/mobs/personality_commune.dm b/code/datums/actions/mobs/personality_commune.dm index 26cf483449204..8481d451fb1dd 100644 --- a/code/datums/actions/mobs/personality_commune.dm +++ b/code/datums/actions/mobs/personality_commune.dm @@ -31,7 +31,7 @@ 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") + var/to_send = tgui_input_text(non_controller, "What would you like to tell your other self?", "Commune", max_length = MAX_MESSAGE_LEN) if(QDELETED(src) || QDELETED(trauma) || !to_send) return FALSE diff --git a/code/datums/actions/mobs/projectileattack.dm b/code/datums/actions/mobs/projectileattack.dm index d8f8e6bdf6427..933f94d0025f3 100644 --- a/code/datums/actions/mobs/projectileattack.dm +++ b/code/datums/actions/mobs/projectileattack.dm @@ -126,7 +126,7 @@ desc = "Fires projectiles in a spiral pattern." cooldown_time = 3 SECONDS projectile_type = /obj/projectile/colossus - projectile_sound = 'sound/magic/clockwork/invoke_general.ogg' + projectile_sound = 'sound/effects/magic/clockwork/invoke_general.ogg' /// Whether or not the attack is the enraged form var/enraged = FALSE @@ -186,7 +186,7 @@ desc = "Fires projectiles in all directions." cooldown_time = 3 SECONDS projectile_type = /obj/projectile/colossus - projectile_sound = 'sound/magic/clockwork/invoke_general.ogg' + projectile_sound = 'sound/effects/magic/clockwork/invoke_general.ogg' /datum/action/cooldown/mob_cooldown/projectile_attack/random_aoe/attack_sequence(mob/living/firer, atom/target) var/turf/U = get_turf(firer) @@ -208,7 +208,7 @@ desc = "Fires projectiles in a shotgun pattern." cooldown_time = 2 SECONDS projectile_type = /obj/projectile/colossus - projectile_sound = 'sound/magic/clockwork/invoke_general.ogg' + projectile_sound = 'sound/effects/magic/clockwork/invoke_general.ogg' var/list/shot_angles = list(12.5, 7.5, 2.5, -2.5, -7.5, -12.5) /datum/action/cooldown/mob_cooldown/projectile_attack/shotgun_blast/attack_sequence(mob/living/firer, atom/target) @@ -263,7 +263,7 @@ desc = "Fires projectiles in specific directions." cooldown_time = 4 SECONDS projectile_type = /obj/projectile/colossus - projectile_sound = 'sound/magic/clockwork/invoke_general.ogg' + projectile_sound = 'sound/effects/magic/clockwork/invoke_general.ogg' var/list/firing_directions /datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/New(Target) @@ -308,7 +308,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/kinetic_accel.ogg' + projectile_sound = 'sound/items/weapons/kinetic_accel.ogg' /datum/action/cooldown/mob_cooldown/projectile_attack/kinetic_accelerator/Activate(atom/target_atom) . = ..() diff --git a/code/datums/ai/_ai_behavior.dm b/code/datums/ai/_ai_behavior.dm index eb8f7370dc298..4a277c0e86119 100644 --- a/code/datums/ai/_ai_behavior.dm +++ b/code/datums/ai/_ai_behavior.dm @@ -25,7 +25,7 @@ ///Called when the action is finished. This needs the same args as perform besides the default ones /datum/ai_behavior/proc/finish_action(datum/ai_controller/controller, succeeded, ...) - LAZYREMOVE(controller.current_behaviors, src) + controller.dequeue_behavior(src) controller.behavior_args -= type if(!(behavior_flags & AI_BEHAVIOR_REQUIRE_MOVEMENT)) //If this was a movement task, reset our movement target if necessary return diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index 797deb134f21f..d6230ec8d3534 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -20,9 +20,9 @@ multiple modular subtrees with behaviors ///Bitfield of traits for this AI to handle extra behavior var/ai_traits = NONE ///Current actions planned to be performed by the AI in the upcoming plan - var/list/planned_behaviors + var/list/planned_behaviors = list() ///Current actions being performed by the AI. - var/list/current_behaviors + var/list/current_behaviors = list() ///Current actions and their respective last time ran as an assoc list. var/list/behavior_cooldowns = list() ///Current status of AI (OFF/ON) @@ -39,8 +39,6 @@ multiple modular subtrees with behaviors var/continue_processing_when_client = FALSE ///distance to give up on target var/max_target_distance = 14 - ///Cooldown for new plans, to prevent AI from going nuts if it can't think of new plans and looping on end - COOLDOWN_DECLARE(failed_planning_cooldown) ///All subtrees this AI has available, will run them in order, so make sure they're in the order you want them to run. On initialization of this type, it will start as a typepath(s) and get converted to references of ai_subtrees found in SSai_controllers when init_subtrees() is called var/list/planning_subtrees @@ -62,13 +60,22 @@ multiple modular subtrees with behaviors var/can_idle = TRUE ///What distance should we be checking for interesting things when considering idling/deidling? Defaults to AI_DEFAULT_INTERESTING_DIST var/interesting_dist = AI_DEFAULT_INTERESTING_DIST + /// TRUE if we're able to run, FALSE if we aren't + /// Should not be set manually, override get_able_to_run() instead + /// Make sure you hook update_able_to_run() in setup_able_to_run() to whatever parameters changing that you added + /// Otherwise we will not pay attention to them changing + var/able_to_run = FALSE + /// are we even able to plan? + var/able_to_plan = TRUE + /// are we currently on failed planning timeout? + var/on_failed_planning_timeout = FALSE /datum/ai_controller/New(atom/new_pawn) change_ai_movement_type(ai_movement) init_subtrees() if(idle_behavior) - idle_behavior = new idle_behavior() + idle_behavior = SSidle_ai_behaviors.idle_behaviors[idle_behavior] 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) @@ -83,8 +90,17 @@ multiple modular subtrees with behaviors ///Sets the current movement target, with an optional param to override the movement behavior /datum/ai_controller/proc/set_movement_target(source, atom/target, datum/ai_movement/new_movement) + if(current_movement_target) + UnregisterSignal(current_movement_target, list(COMSIG_MOVABLE_MOVED, COMSIG_PREQDELETED)) + if(!isnull(target) && !isatom(target)) + stack_trace("[pawn]'s current movement target is not an atom, rather a [target.type]! Did you accidentally set it to a weakref?") + CancelActions() + return movement_target_source = source current_movement_target = target + if(!isnull(current_movement_target)) + RegisterSignal(current_movement_target, COMSIG_MOVABLE_MOVED, PROC_REF(on_movement_target_move)) + RegisterSignal(current_movement_target, COMSIG_PREQDELETED, PROC_REF(on_movement_target_delete)) if(new_movement) change_ai_movement_type(new_movement) @@ -109,6 +125,7 @@ multiple modular subtrees with behaviors ///Proc to move from one pawn to another, this will destroy the target's existing controller. /datum/ai_controller/proc/PossessPawn(atom/new_pawn) + SHOULD_CALL_PARENT(TRUE) if(pawn) //Reset any old signals UnpossessPawn(FALSE) @@ -133,6 +150,8 @@ multiple modular subtrees with behaviors 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)) + update_able_to_run() + setup_able_to_run() our_cells = new(interesting_dist, interesting_dist, 1) set_new_cells() @@ -143,6 +162,20 @@ multiple modular subtrees with behaviors SIGNAL_HANDLER set_new_cells() + if(current_movement_target) + check_target_max_distance() + +/datum/ai_controller/proc/on_movement_target_move(atom/source) + SIGNAL_HANDLER + check_target_max_distance() + +/datum/ai_controller/proc/on_movement_target_delete(atom/source) + SIGNAL_HANDLER + set_movement_target(source = type, target = null) + +/datum/ai_controller/proc/check_target_max_distance() + if(get_dist(current_movement_target, pawn) > max_target_distance) + CancelActions() /datum/ai_controller/proc/set_new_cells() if(isnull(our_cells)) @@ -229,7 +262,7 @@ multiple modular subtrees with behaviors if(!pawn_turf) CRASH("AI controller [src] controlling pawn ([pawn]) is not on a turf.") #endif - if(!length(SSmobs.clients_by_zlevel[pawn_turf.z])) + if(!length(SSmobs.clients_by_zlevel[pawn_turf.z]) || on_failed_planning_timeout || !able_to_run) return AI_STATUS_OFF if(should_idle()) return AI_STATUS_IDLE @@ -260,11 +293,13 @@ multiple modular subtrees with behaviors ///Proc for deinitializing the pawn to the old controller /datum/ai_controller/proc/UnpossessPawn(destroy) + SHOULD_CALL_PARENT(TRUE) if(isnull(pawn)) return // instantiated without an applicable pawn, fine set_ai_status(AI_STATUS_OFF) UnregisterSignal(pawn, list(COMSIG_MOVABLE_Z_CHANGED, COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT, COMSIG_MOB_STATCHANGE, COMSIG_QDELETING)) + clear_able_to_run() if(ai_movement.moving_controllers[src]) ai_movement.stop_moving_towards(src) var/turf/pawn_turf = get_turf(pawn) @@ -272,40 +307,62 @@ multiple modular subtrees with behaviors GLOB.ai_controllers_by_zlevel[pawn_turf.z] -= src if(ai_status) GLOB.ai_controllers_by_status[ai_status] -= src + remove_from_unplanned_controllers() pawn.ai_controller = null pawn = null if(destroy) qdel(src) -///Returns TRUE if the ai controller can actually run at the moment. -/datum/ai_controller/proc/able_to_run() +/datum/ai_controller/proc/setup_able_to_run() + // paused_until is handled by PauseAi() manually + RegisterSignals(pawn, list(SIGNAL_ADDTRAIT(TRAIT_AI_PAUSED), SIGNAL_REMOVETRAIT(TRAIT_AI_PAUSED)), PROC_REF(update_able_to_run)) + +/datum/ai_controller/proc/clear_able_to_run() + UnregisterSignal(pawn, list(SIGNAL_ADDTRAIT(TRAIT_AI_PAUSED), SIGNAL_REMOVETRAIT(TRAIT_AI_PAUSED))) + +/datum/ai_controller/proc/update_able_to_run() + SIGNAL_HANDLER + able_to_run = get_able_to_run() + if(!able_to_run) + GLOB.move_manager.stop_looping(pawn) //stop moving + set_ai_status(get_expected_ai_status()) + +///Returns TRUE if the ai controller can actually run at the moment, FALSE otherwise +/datum/ai_controller/proc/get_able_to_run() if(HAS_TRAIT(pawn, TRAIT_AI_PAUSED)) return FALSE if(world.time < paused_until) return FALSE return TRUE -///Runs any actions that are currently running -/datum/ai_controller/process(seconds_per_tick) - - if(!able_to_run()) - GLOB.move_manager.stop_looping(pawn) //stop moving - return //this should remove them from processing in the future through event-based stuff. +///Can this pawn interact with objects? +/datum/ai_controller/proc/ai_can_interact() + SHOULD_CALL_PARENT(TRUE) + return !QDELETED(pawn) - if(!LAZYLEN(current_behaviors) && idle_behavior) - idle_behavior.perform_idle_behavior(seconds_per_tick, src) //Do some stupid shit while we have nothing to do - return +///Interact with objects +/datum/ai_controller/proc/ai_interact(target, combat_mode, list/modifiers) + if(!ai_can_interact()) + return FALSE - if(current_movement_target) - if(!isatom(current_movement_target)) - stack_trace("[pawn]'s current movement target is not an atom, rather a [current_movement_target.type]! Did you accidentally set it to a weakref?") - CancelActions() - return + var/atom/final_target = isdatum(target) ? target : blackboard[target] //incase we got a blackboard key instead - if(get_dist(pawn, current_movement_target) > max_target_distance) //The distance is out of range - CancelActions() - return + if(QDELETED(final_target)) + return FALSE + var/params = list2params(modifiers) + var/mob/living/living_pawn = pawn + if(isnull(combat_mode)) + living_pawn.ClickOn(final_target, params) + return TRUE + + var/old_combat_mode = living_pawn.combat_mode + living_pawn.set_combat_mode(combat_mode) + living_pawn.ClickOn(final_target, params) + living_pawn.set_combat_mode(old_combat_mode) + return TRUE +///Runs any actions that are currently running +/datum/ai_controller/process(seconds_per_tick) for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) @@ -314,59 +371,44 @@ multiple modular subtrees with behaviors // Action cooldowns cannot happen faster than seconds_per_tick, so seconds_per_tick should be the value used in this scenario. var/action_seconds_per_tick = max(current_behavior.get_cooldown(src) * 0.1, seconds_per_tick) - if(current_behavior.behavior_flags & AI_BEHAVIOR_REQUIRE_MOVEMENT) //Might need to move closer - if(!current_movement_target) - stack_trace("[pawn] wants to perform action type [current_behavior.type] which requires movement, but has no current movement target!") - return //This can cause issues, so don't let these slide. - ///Stops pawns from performing such actions that should require the target to be adjacent. - var/atom/movable/moving_pawn = pawn - var/can_reach = !(current_behavior.behavior_flags & AI_BEHAVIOR_REQUIRE_REACH) || moving_pawn.CanReach(current_movement_target) - if(can_reach && current_behavior.required_distance >= get_dist(moving_pawn, current_movement_target)) ///Are we close enough to engage? - if(ai_movement.moving_controllers[src] == current_movement_target) //We are close enough, if we're moving stop. - ai_movement.stop_moving_towards(src) - - if(behavior_cooldowns[current_behavior] > world.time) //Still on cooldown - continue - ProcessBehavior(action_seconds_per_tick, current_behavior) - return - - else if(ai_movement.moving_controllers[src] != current_movement_target) //We're too far, if we're not already moving start doing it. - ai_movement.start_moving_towards(src, current_movement_target, current_behavior.required_distance) //Then start moving - - if(current_behavior.behavior_flags & AI_BEHAVIOR_MOVE_AND_PERFORM) //If we can move and perform then do so. - if(behavior_cooldowns[current_behavior] > world.time) //Still on cooldown - continue - ProcessBehavior(action_seconds_per_tick, current_behavior) - return - else //No movement required + if(!(current_behavior.behavior_flags & AI_BEHAVIOR_REQUIRE_MOVEMENT)) if(behavior_cooldowns[current_behavior] > world.time) //Still on cooldown continue ProcessBehavior(action_seconds_per_tick, current_behavior) return -///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 - break + if(isnull(current_movement_target)) + fail_behavior(current_behavior) + return + ///Stops pawns from performing such actions that should require the target to be adjacent. + var/atom/movable/moving_pawn = pawn + var/can_reach = !(current_behavior.behavior_flags & AI_BEHAVIOR_REQUIRE_REACH) || moving_pawn.CanReach(current_movement_target) + if(can_reach && current_behavior.required_distance >= get_dist(moving_pawn, current_movement_target)) ///Are we close enough to engage? + if(ai_movement.moving_controllers[src] == current_movement_target) //We are close enough, if we're moving stop. + ai_movement.stop_moving_towards(src) + + if(behavior_cooldowns[current_behavior] > world.time) //Still on cooldown + continue + ProcessBehavior(action_seconds_per_tick, current_behavior) + return + + if(ai_movement.moving_controllers[src] != current_movement_target) //We're too far, if we're not already moving start doing it. + ai_movement.start_moving_towards(src, current_movement_target, current_behavior.required_distance) //Then start moving + + if(current_behavior.behavior_flags & AI_BEHAVIOR_MOVE_AND_PERFORM) //If we can move and perform then do so. + if(behavior_cooldowns[current_behavior] > world.time) //Still on cooldown + continue + ProcessBehavior(action_seconds_per_tick, current_behavior) + return ///This is where you decide what actions are taken by the AI. /datum/ai_controller/proc/SelectBehaviors(seconds_per_tick) SHOULD_NOT_SLEEP(TRUE) //Fuck you don't sleep in procs like this. - if(!COOLDOWN_FINISHED(src, failed_planning_cooldown)) - return FALSE + planned_behaviors.Cut() - LAZYINITLIST(current_behaviors) - LAZYCLEARLIST(planned_behaviors) - - if(LAZYLEN(planning_subtrees)) - for(var/datum/ai_planning_subtree/subtree as anything in planning_subtrees) - if(subtree.SelectBehaviors(src, seconds_per_tick) == SUBTREE_RETURN_FINISH_PLANNING) - break + for(var/datum/ai_planning_subtree/subtree as anything in planning_subtrees) + if(subtree.SelectBehaviors(src, seconds_per_tick) == SUBTREE_RETURN_FINISH_PLANNING) + break SEND_SIGNAL(src, COMSIG_AI_CONTROLLER_PICKED_BEHAVIORS, current_behaviors, planned_behaviors) for(var/datum/ai_behavior/forgotten_behavior as anything in current_behaviors - planned_behaviors) @@ -384,17 +426,24 @@ multiple modular subtrees with behaviors //remove old status, if we've got one if(ai_status) GLOB.ai_controllers_by_status[ai_status] -= src + remove_from_unplanned_controllers() stop_previous_processing() ai_status = new_ai_status GLOB.ai_controllers_by_status[new_ai_status] += src + if(ai_status == AI_STATUS_OFF) + CancelActions() + return + if(!length(current_behaviors)) + add_to_unplanned_controllers() + return + start_ai_processing() + +/datum/ai_controller/proc/start_ai_processing() switch(ai_status) if(AI_STATUS_ON) START_PROCESSING(SSai_behaviors, src) if(AI_STATUS_IDLE) START_PROCESSING(SSidle_ai_behaviors, src) - CancelActions() - if(AI_STATUS_OFF) - CancelActions() /datum/ai_controller/proc/stop_previous_processing() switch(ai_status) @@ -405,6 +454,18 @@ multiple modular subtrees with behaviors /datum/ai_controller/proc/PauseAi(time) paused_until = world.time + time + update_able_to_run() + addtimer(CALLBACK(src, PROC_REF(update_able_to_run)), time) + +/datum/ai_controller/proc/add_to_unplanned_controllers() + if(isnull(ai_status) || ai_status == AI_STATUS_OFF || isnull(idle_behavior)) + return + GLOB.unplanned_controllers[ai_status][src] = TRUE + +/datum/ai_controller/proc/remove_from_unplanned_controllers() + if(isnull(ai_status) || ai_status == AI_STATUS_OFF) + return + GLOB.unplanned_controllers[ai_status] -= src /datum/ai_controller/proc/modify_cooldown(datum/ai_behavior/behavior, new_cooldown) behavior_cooldowns[behavior] = new_cooldown @@ -417,21 +478,51 @@ multiple modular subtrees with behaviors var/list/arguments = args.Copy() arguments[1] = src - if(LAZYACCESS(current_behaviors, behavior)) ///It's still in the plan, don't add it again to current_behaviors but do keep it in the planned behavior list so its not cancelled - LAZYADDASSOC(planned_behaviors, behavior, TRUE) + if(current_behaviors[behavior]) ///It's still in the plan, don't add it again to current_behaviors but do keep it in the planned behavior list so its not cancelled + planned_behaviors[behavior] = TRUE return if(!behavior.setup(arglist(arguments))) return - LAZYADDASSOC(current_behaviors, behavior, TRUE) - LAZYADDASSOC(planned_behaviors, behavior, TRUE) + + var/should_exit_unplanned = !length(current_behaviors) + planned_behaviors[behavior] = TRUE + current_behaviors[behavior] = TRUE + arguments.Cut(1, 2) if(length(arguments)) behavior_args[behavior_type] = arguments else behavior_args -= behavior_type + + if(!(behavior.behavior_flags & AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION)) //this one blocks planning! + able_to_plan = FALSE + + if(should_exit_unplanned) + exit_unplanned_mode() + SEND_SIGNAL(src, AI_CONTROLLER_BEHAVIOR_QUEUED(behavior_type), arguments) +/datum/ai_controller/proc/check_able_to_plan() + 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 + return FALSE + return TRUE + +/datum/ai_controller/proc/dequeue_behavior(datum/ai_behavior/behavior) + current_behaviors -= behavior + able_to_plan = check_able_to_plan() + if(!length(current_behaviors)) + enter_unplanned_mode() + +/datum/ai_controller/proc/exit_unplanned_mode() + remove_from_unplanned_controllers() + start_ai_processing() + +/datum/ai_controller/proc/enter_unplanned_mode() + add_to_unplanned_controllers() + stop_previous_processing() + /datum/ai_controller/proc/ProcessBehavior(seconds_per_tick, datum/ai_behavior/behavior) var/list/arguments = list(seconds_per_tick, src) var/list/stored_arguments = behavior_args[behavior.type] @@ -451,19 +542,23 @@ multiple modular subtrees with behaviors behavior.finish_action(arglist(arguments)) /datum/ai_controller/proc/CancelActions() - if(!LAZYLEN(current_behaviors)) + if(!length(current_behaviors)) return for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) - var/list/arguments = list(src, FALSE) - var/list/stored_arguments = behavior_args[current_behavior.type] - if(stored_arguments) - arguments += stored_arguments - current_behavior.finish_action(arglist(arguments)) + fail_behavior(current_behavior) + +/datum/ai_controller/proc/fail_behavior(datum/ai_behavior/current_behavior) + var/list/arguments = list(src, FALSE) + var/list/stored_arguments = behavior_args[current_behavior.type] + if(stored_arguments) + arguments += stored_arguments + current_behavior.finish_action(arglist(arguments)) /// Turn the controller on or off based on if you're alive, we only register to this if the flag is present so don't need to check again /datum/ai_controller/proc/on_stat_changed(mob/living/source, new_stat) SIGNAL_HANDLER reset_ai_status() + update_able_to_run() /datum/ai_controller/proc/on_sentience_gained() SIGNAL_HANDLER @@ -504,6 +599,15 @@ multiple modular subtrees with behaviors minimum_distance = iter_behavior.required_distance return minimum_distance +/datum/ai_controller/proc/planning_failed() + on_failed_planning_timeout = TRUE + set_ai_status(get_expected_ai_status()) + addtimer(CALLBACK(src, PROC_REF(resume_planning)), AI_FAILED_PLANNING_COOLDOWN) + +/datum/ai_controller/proc/resume_planning() + on_failed_planning_timeout = FALSE + set_ai_status(get_expected_ai_status()) + /// 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] diff --git a/code/datums/ai/babies/babies_behaviors.dm b/code/datums/ai/babies/babies_behaviors.dm index ad57d309a2c72..aa8a15a03e40b 100644 --- a/code/datums/ai/babies/babies_behaviors.dm +++ b/code/datums/ai/babies/babies_behaviors.dm @@ -58,17 +58,9 @@ var/mob/target = controller.blackboard[target_key] if(QDELETED(target) || target.stat != CONSCIOUS) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/mob/living/basic/living_pawn = controller.pawn - living_pawn.set_combat_mode(FALSE) - living_pawn.melee_attack(target) + controller.ai_interact(target = target, combat_mode = FALSE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /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/bane/bane_controller.dm b/code/datums/ai/bane/bane_controller.dm index 8d6820a800bdc..64e1dcf31af3a 100644 --- a/code/datums/ai/bane/bane_controller.dm +++ b/code/datums/ai/bane/bane_controller.dm @@ -12,7 +12,19 @@ And the only victory you achieved was a lie. Now you understand Gotham is beyond return AI_CONTROLLER_INCOMPATIBLE return ..() //Run parent at end -/datum/ai_controller/bane/able_to_run() +/datum/ai_controller/bane/on_stat_changed(mob/living/source, new_stat) + . = ..() + update_able_to_run() + +/datum/ai_controller/bane/setup_able_to_run() + . = ..() + RegisterSignal(pawn, COMSIG_MOB_INCAPACITATE_CHANGED, PROC_REF(update_able_to_run)) + +/datum/ai_controller/bane/clear_able_to_run() + UnregisterSignal(pawn, list(COMSIG_MOB_INCAPACITATE_CHANGED, COMSIG_MOB_STATCHANGE)) + return ..() + +/datum/ai_controller/bane/get_able_to_run() var/mob/living/living_pawn = pawn if(IS_DEAD_OR_INCAP(living_pawn)) return FALSE diff --git a/code/datums/ai/basic_mobs/base_basic_controller.dm b/code/datums/ai/basic_mobs/base_basic_controller.dm index cd025b28bcb2b..f21d31b05000c 100644 --- a/code/datums/ai/basic_mobs/base_basic_controller.dm +++ b/code/datums/ai/basic_mobs/base_basic_controller.dm @@ -12,17 +12,32 @@ return ..() //Run parent at end +/datum/ai_controller/basic_controller/on_stat_changed(mob/living/source, new_stat) + . = ..() + update_able_to_run() -/datum/ai_controller/basic_controller/able_to_run() +/datum/ai_controller/basic_controller/setup_able_to_run() . = ..() - if(!isliving(pawn)) - return - var/mob/living/living_pawn = pawn - var/incap_flags = NONE - if (ai_traits & CAN_ACT_IN_STASIS) - incap_flags |= IGNORE_STASIS - if(!(ai_traits & CAN_ACT_WHILE_DEAD) && (living_pawn.incapacitated(incap_flags) || living_pawn.stat)) + RegisterSignal(pawn, COMSIG_MOB_INCAPACITATE_CHANGED, PROC_REF(update_able_to_run)) + if(ai_traits & PAUSE_DURING_DO_AFTER) + RegisterSignals(pawn, list(COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED), PROC_REF(update_able_to_run)) + + +/datum/ai_controller/basic_controller/clear_able_to_run() + UnregisterSignal(pawn, list(COMSIG_MOB_INCAPACITATE_CHANGED, COMSIG_MOB_STATCHANGE, COMSIG_DO_AFTER_BEGAN, COMSIG_DO_AFTER_ENDED)) + return ..() + +/datum/ai_controller/basic_controller/get_able_to_run() + . = ..() + if(!.) return FALSE + var/mob/living/living_pawn = pawn + if(!(ai_traits & CAN_ACT_WHILE_DEAD)) + // Unroll for flags here + if (ai_traits & CAN_ACT_IN_STASIS && (living_pawn.stat || INCAPACITATED_IGNORING(living_pawn, INCAPABLE_STASIS))) + return FALSE + else if(IS_DEAD_OR_INCAP(living_pawn)) + return FALSE if(ai_traits & PAUSE_DURING_DO_AFTER && LAZYLEN(living_pawn.do_afters)) return FALSE 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 883c157a96ba9..aba62f2dc7b79 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 @@ -8,8 +8,6 @@ . = ..() if(!controller.blackboard[targeting_strategy_key]) CRASH("No targeting strategy was supplied in the blackboard for [controller.pawn]") - if(HAS_TRAIT(controller.pawn, TRAIT_HANDS_BLOCKED)) - return FALSE //Hiding location is priority var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] if(QDELETED(target)) @@ -35,11 +33,8 @@ controller.set_blackboard_key(hiding_location_key, hiding_target) - if(hiding_target) //Slap it! - basic_mob.melee_attack(hiding_target) - else - basic_mob.melee_attack(target) - + var/atom/final_target = hiding_target || target + controller.ai_interact(target = final_target, combat_mode = TRUE) if(terminate_after_action) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED return AI_BEHAVIOR_DELAY diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/emote_with_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/emote_with_target.dm new file mode 100644 index 0000000000000..7960301d70440 --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/emote_with_target.dm @@ -0,0 +1,28 @@ +/datum/ai_behavior/emote_on_target + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH + + +/datum/ai_behavior/emote_on_target/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/hunt_target = controller.blackboard[target_key] + if (isnull(hunt_target)) + return FALSE + set_movement_target(controller, hunt_target) + + +/datum/ai_behavior/emote_on_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, list/emote_list) + var/atom/target = controller.blackboard[target_key] + if(!length(emote_list) || isnull(target)) + return AI_BEHAVIOR_FAILED | AI_BEHAVIOR_DELAY + run_emote(controller.pawn, target, emote_list) + return AI_BEHAVIOR_SUCCEEDED | AI_BEHAVIOR_DELAY + + +/datum/ai_behavior/emote_on_target/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + if(succeeded) + controller.clear_blackboard_key(target_key) + + +/datum/ai_behavior/emote_on_target/proc/run_emote(mob/living/living_pawn, atom/target, list/emote_list) + living_pawn.manual_emote("[pick(emote_list)] [target]") 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 dcd1c54c71b1b..3ed8b2df2b26d 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm @@ -10,8 +10,6 @@ /datum/ai_planning_subtree/flee_target/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() var/atom/flee_from = controller.blackboard[target_key] - if(!should_flee(controller, flee_from)) - return if(!should_flee(controller, flee_from)) return var/flee_distance = controller.blackboard[BB_BASIC_MOB_FLEE_DISTANCE] || DEFAULT_BASIC_FLEE_DISTANCE diff --git a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm index dc3f6ddcf9015..12875f9a3f345 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm @@ -24,9 +24,8 @@ var/mob/living/basic/living_pawn = controller.pawn var/turf/closed/mineral/target = controller.blackboard[target_key] var/is_gibtonite_turf = istype(target, /turf/closed/mineral/gibtonite) - if(QDELETED(target)) + if(!controller.ai_interact(target = target)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - living_pawn.melee_attack(target) if(is_gibtonite_turf) living_pawn.manual_emote("sighs...") //accept whats about to happen to us 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 3640a2052b55e..43a3d400bc58d 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm @@ -43,6 +43,5 @@ if (distance > max_range || distance < min_range) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/mob/living/basic/gunman = controller.pawn - gunman.RangedAttack(target) + controller.ai_interact(target = target, combat_mode = TRUE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED 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 5bd0f8404883d..7d877731e2b05 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -46,7 +46,7 @@ /datum/ai_planning_subtree/random_speech/insect speech_chance = 5 - sound = list('sound/creatures/chitter.ogg') + sound = list('sound/mobs/non-humanoids/insect/chitter.ogg') emote_hear = list("chitters.") /datum/ai_planning_subtree/random_speech/mothroach @@ -56,7 +56,7 @@ /datum/ai_planning_subtree/random_speech/mouse speech_chance = 1 speak = list("Squeak!", "SQUEAK!", "Squeak?") - sound = list('sound/creatures/mousesqueek.ogg') + sound = list('sound/mobs/non-humanoids/mouse/mousesqueek.ogg') emote_hear = list("squeaks.") emote_see = list("runs in a circle.", "shakes.") @@ -72,7 +72,7 @@ /datum/ai_planning_subtree/random_speech/sheep speech_chance = 5 speak = list("baaa","baaaAAAAAH!","baaah") - sound = list('sound/creatures/sheep1.ogg', 'sound/creatures/sheep2.ogg', 'sound/creatures/sheep3.ogg') + sound = list('sound/mobs/non-humanoids/sheep/sheep1.ogg', 'sound/mobs/non-humanoids/sheep/sheep2.ogg', 'sound/mobs/non-humanoids/sheep/sheep3.ogg') emote_hear = list("bleats.") emote_see = list("shakes her head.", "stares into the distance.") @@ -101,21 +101,21 @@ /datum/ai_planning_subtree/random_speech/chicken speech_chance = 15 // really talkative ladies speak = list("Cluck!", "BWAAAAARK BWAK BWAK BWAK!", "Bwaak bwak.") - sound = list('sound/creatures/clucks.ogg', 'sound/creatures/bagawk.ogg') + sound = list('sound/mobs/non-humanoids/chicken/clucks.ogg', 'sound/mobs/non-humanoids/chicken/bagawk.ogg') emote_hear = list("clucks.", "croons.") emote_see = list("pecks at the ground.","flaps her wings viciously.") /datum/ai_planning_subtree/random_speech/chick speech_chance = 4 speak = list("Cherp.", "Cherp?", "Chirrup.", "Cheep!") - sound = list('sound/creatures/chick_peep.ogg') + sound = list('sound/mobs/non-humanoids/chicken/chick_peep.ogg') emote_hear = list("cheeps.") emote_see = list("pecks at the ground.","flaps her tiny wings.") /datum/ai_planning_subtree/random_speech/cow speech_chance = 1 speak = list("moo?","moo","MOOOOOO") - sound = list('sound/creatures/cow.ogg') + sound = list('sound/mobs/non-humanoids/cow/cow.ogg') emote_hear = list("brays.") emote_see = list("shakes her head.") @@ -164,19 +164,19 @@ /datum/ai_planning_subtree/random_speech/pig speech_chance = 3 speak = list("oink?","oink","snurf") - sound = list('sound/creatures/pig1.ogg', 'sound/creatures/pig2.ogg') + sound = list('sound/mobs/non-humanoids/pig/pig1.ogg', 'sound/mobs/non-humanoids/pig/pig2.ogg') emote_hear = list("snorts.") emote_see = list("sniffs around.") /datum/ai_planning_subtree/random_speech/pony speech_chance = 3 - sound = list('sound/creatures/pony/whinny01.ogg', 'sound/creatures/pony/whinny02.ogg', 'sound/creatures/pony/whinny03.ogg') + sound = list('sound/mobs/non-humanoids/pony/whinny01.ogg', 'sound/mobs/non-humanoids/pony/whinny02.ogg', 'sound/mobs/non-humanoids/pony/whinny03.ogg') emote_hear = list("whinnies!") emote_see = list("horses around.") /datum/ai_planning_subtree/random_speech/pony/tamed speech_chance = 3 - sound = list('sound/creatures/pony/snort.ogg') + sound = list('sound/mobs/non-humanoids/pony/snort.ogg') emote_hear = list("snorts.") emote_see = list("snorts.") @@ -188,7 +188,7 @@ /datum/ai_planning_subtree/random_speech/ant speech_chance = 1 speak = list("BZZZZT!", "CHTCHTCHT!", "Bzzz", "ChtChtCht") - sound = list('sound/creatures/chitter.ogg') + sound = list('sound/mobs/non-humanoids/insect/chitter.ogg') emote_hear = list("buzzes.", "clacks.") emote_see = list("shakes their head.", "twitches their antennae.") @@ -200,7 +200,7 @@ /datum/ai_planning_subtree/random_speech/crab speech_chance = 1 - sound = list('sound/creatures/claw_click.ogg') + sound = list('sound/mobs/non-humanoids/crab/claw_click.ogg') emote_hear = list("clicks.") emote_see = list("clacks.") @@ -216,11 +216,9 @@ /datum/ai_planning_subtree/random_speech/cats speech_chance = 10 - speak = list( - "mrawww!", - "meow!", - "maw!", - ) + sound = list(SFX_CAT_MEOW) + emote_hear = list("meows.") + emote_see = list("meows.") /datum/ai_planning_subtree/random_speech/blackboard //literal tower of babel, subtree form speech_chance = 1 diff --git a/code/datums/ai/basic_mobs/pet_commands/fetch.dm b/code/datums/ai/basic_mobs/pet_commands/fetch.dm index 87606fa0c6555..5ff208560d2a1 100644 --- a/code/datums/ai/basic_mobs/pet_commands/fetch.dm +++ b/code/datums/ai/basic_mobs/pet_commands/fetch.dm @@ -109,7 +109,7 @@ if(!basic_pawn.Adjacent(snack)) return AI_BEHAVIOR_DELAY - basic_pawn.melee_attack(snack) // snack attack! + controller.ai_interact(target = snack) if(QDELETED(snack)) // we ate it! return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED 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 index 709acb8d5e892..d552b69c142dc 100644 --- a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm +++ b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm @@ -25,8 +25,7 @@ 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) + if(HAS_TRAIT(the_target, TRAIT_GODMODE)) return FALSE if (vision_range && get_dist(living_mob, the_target) > vision_range) diff --git a/code/datums/ai/cursed/cursed_controller.dm b/code/datums/ai/cursed/cursed_controller.dm index 4d0f6c6f5fdc6..aa32496f35724 100644 --- a/code/datums/ai/cursed/cursed_controller.dm +++ b/code/datums/ai/cursed/cursed_controller.dm @@ -27,9 +27,9 @@ return ..() //Run parent at end ///signal called by the pawn hitting something after a throw -/datum/ai_controller/cursed/proc/on_throw_hit(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum) +/datum/ai_controller/cursed/proc/on_throw_hit(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) SIGNAL_HANDLER - if(!iscarbon(hit_atom)) + if(caught || !iscarbon(hit_atom)) return //equipcode has sleeps all over it. INVOKE_ASYNC(src, PROC_REF(try_equipping_to_target_slot), hit_atom) diff --git a/code/datums/ai/dog/dog_behaviors.dm b/code/datums/ai/dog/dog_behaviors.dm index 00a2f789e12b5..958b1f3d03de1 100644 --- a/code/datums/ai/dog/dog_behaviors.dm +++ b/code/datums/ai/dog/dog_behaviors.dm @@ -44,7 +44,7 @@ if(!SPT_PROB(20, seconds_per_tick)) return living_pawn.do_attack_animation(target, ATTACK_EFFECT_DISARM) - playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(target, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) target.visible_message(span_danger("[living_pawn] paws ineffectually at [target]!"), span_danger("[living_pawn] paws ineffectually at you!")) /// Let them know we mean business @@ -54,4 +54,4 @@ living_pawn.manual_emote("[pick("barks", "growls", "stares")] menacingly at [target]!") if(!SPT_PROB(40, seconds_per_tick)) return - playsound(living_pawn, pick('sound/creatures/dog/growl1.ogg', 'sound/creatures/dog/growl2.ogg'), 50, TRUE, -1) + playsound(living_pawn, pick('sound/mobs/non-humanoids/dog/growl1.ogg', 'sound/mobs/non-humanoids/dog/growl2.ogg'), 50, TRUE, -1) diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm index 41f256c9ba73f..5a424f304f28f 100644 --- a/code/datums/ai/generic/find_and_set.dm +++ b/code/datums/ai/generic/find_and_set.dm @@ -177,3 +177,17 @@ var/mob/living/living_pawn = controller.pawn var/potential_friend = living_pawn.faction.Find(REF(friend)) ? friend : null return potential_friend + + +/datum/ai_behavior/find_and_set/in_list/turf_types + + +/datum/ai_behavior/find_and_set/in_list/turf_types/search_tactic(datum/ai_controller/controller, locate_paths, search_range) + var/list/found = RANGE_TURFS(search_range, controller.pawn) + shuffle_inplace(found) + for(var/turf/possible_turf as anything in found) + if(!is_type_in_typecache(possible_turf, locate_paths)) + continue + if(can_see(controller.pawn, possible_turf, search_range)) + return possible_turf + return null diff --git a/code/datums/ai/generic/generic_behaviors.dm b/code/datums/ai/generic/generic_behaviors.dm index 1c0e1f65adf96..c6fcbcfb57265 100644 --- a/code/datums/ai/generic/generic_behaviors.dm +++ b/code/datums/ai/generic/generic_behaviors.dm @@ -101,11 +101,10 @@ if(QDELETED(target)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - pawn.set_combat_mode(FALSE) if(held_item) held_item.melee_attack_chain(pawn, target) else - pawn.UnarmedAttack(target, TRUE) + controller.ai_interact(target = target, combat_mode = FALSE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/hunting_behavior/hunting_behaviors.dm b/code/datums/ai/hunting_behavior/hunting_behaviors.dm index ba2da1c2d04e8..c202c4be6a7d8 100644 --- a/code/datums/ai/hunting_behavior/hunting_behaviors.dm +++ b/code/datums/ai/hunting_behavior/hunting_behaviors.dm @@ -117,31 +117,23 @@ if(always_reset_target && hunting_target_key) 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/interact_with_target + ///what combat mode should we use to interact with + var/behavior_combat_mode = TRUE -/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/interact_with_target/target_caught(mob/living/hunter, obj/structure/cable/hunted) + var/datum/ai_controller/controller = hunter.ai_controller + controller.ai_interact(target = hunted, combat_mode = behavior_combat_mode) -/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/interact_with_target/combat_mode_off + behavior_combat_mode = FALSE -/datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target +/datum/ai_behavior/hunt_target/interact_with_target/reset_target always_reset_target = TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target_combat_mode +/datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off always_reset_target = TRUE - switch_combat_mode = TRUE + behavior_combat_mode = FALSE /datum/ai_behavior/hunt_target/use_ability_on_target always_reset_target = TRUE diff --git a/code/datums/ai/hunting_behavior/hunting_corpses.dm b/code/datums/ai/hunting_behavior/hunting_corpses.dm index e720e4da947af..89d100263fb1a 100644 --- a/code/datums/ai/hunting_behavior/hunting_corpses.dm +++ b/code/datums/ai/hunting_behavior/hunting_corpses.dm @@ -1,7 +1,7 @@ /// Find and attack corpses /datum/ai_planning_subtree/find_and_hunt_target/corpses finding_behavior = /datum/ai_behavior/find_hunt_target/corpses - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target hunt_targets = list(/mob/living) /// Find nearby dead mobs diff --git a/code/datums/ai/hunting_behavior/hunting_lights.dm b/code/datums/ai/hunting_behavior/hunting_lights.dm index 6b82e87f2693b..5062a8aaf929e 100644 --- a/code/datums/ai/hunting_behavior/hunting_lights.dm +++ b/code/datums/ai/hunting_behavior/hunting_lights.dm @@ -1,11 +1,11 @@ /datum/ai_planning_subtree/find_and_hunt_target/look_for_light_fixtures target_key = BB_LOW_PRIORITY_HUNTING_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/light_fixtures - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/light_fixtures + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/light_fixtures hunt_targets = list(/obj/machinery/light) hunt_range = 7 -/datum/ai_behavior/hunt_target/unarmed_attack_target/light_fixtures +/datum/ai_behavior/hunt_target/interact_with_target/light_fixtures hunt_cooldown = 10 SECONDS always_reset_target = TRUE diff --git a/code/datums/ai/hunting_behavior/hunting_mouse.dm b/code/datums/ai/hunting_behavior/hunting_mouse.dm index d0e7161fd2de6..f97ebf27ddf6f 100644 --- a/code/datums/ai/hunting_behavior/hunting_mouse.dm +++ b/code/datums/ai/hunting_behavior/hunting_mouse.dm @@ -1,13 +1,13 @@ // Mouse subtree to hunt down delicious cheese. /datum/ai_planning_subtree/find_and_hunt_target/look_for_cheese - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/mouse + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/mouse hunt_targets = list(/obj/item/food/cheese) hunt_range = 1 // Mouse subtree to hunt down ... delicious cabling? /datum/ai_planning_subtree/find_and_hunt_target/look_for_cables target_key = BB_LOW_PRIORITY_HUNTING_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/mouse + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/mouse finding_behavior = /datum/ai_behavior/find_hunt_target/mouse_cable hunt_targets = list(/obj/structure/cable) hunt_range = 0 // Only look below us @@ -28,5 +28,5 @@ return below_the_cable.underfloor_accessibility >= UNDERFLOOR_INTERACTABLE // Our hunts have a decent cooldown. -/datum/ai_behavior/hunt_target/unarmed_attack_target/mouse +/datum/ai_behavior/hunt_target/interact_with_target/mouse hunt_cooldown = 20 SECONDS diff --git a/code/datums/ai/idle_behaviors/_idle_behavior.dm b/code/datums/ai/idle_behaviors/_idle_behavior.dm index 315233bb71d57..bacb8e7cdf37b 100644 --- a/code/datums/ai/idle_behaviors/_idle_behavior.dm +++ b/code/datums/ai/idle_behaviors/_idle_behavior.dm @@ -1,4 +1,5 @@ /datum/idle_behavior /datum/idle_behavior/proc/perform_idle_behavior(seconds_per_tick, datum/ai_controller/controller) - return + set waitfor = FALSE + SHOULD_CALL_PARENT(TRUE) diff --git a/code/datums/ai/idle_behaviors/idle_dog.dm b/code/datums/ai/idle_behaviors/idle_dog.dm index 46e0d040c9dae..4d036e9a7a5d9 100644 --- a/code/datums/ai/idle_behaviors/idle_dog.dm +++ b/code/datums/ai/idle_behaviors/idle_dog.dm @@ -1,5 +1,6 @@ ///Dog specific idle behavior. /datum/idle_behavior/idle_dog/perform_idle_behavior(seconds_per_tick, datum/ai_controller/basic_controller/dog/controller) + . = ..() var/mob/living/living_pawn = controller.pawn if(!isturf(living_pawn.loc) || living_pawn.pulledby) return diff --git a/code/datums/ai/idle_behaviors/idle_haunted.dm b/code/datums/ai/idle_behaviors/idle_haunted.dm index a67b5d6cbe04d..5784b5104f6b8 100644 --- a/code/datums/ai/idle_behaviors/idle_haunted.dm +++ b/code/datums/ai/idle_behaviors/idle_haunted.dm @@ -4,6 +4,7 @@ var/teleport_chance = 4 /datum/idle_behavior/idle_ghost_item/perform_idle_behavior(seconds_per_tick, datum/ai_controller/controller) + . = ..() var/obj/item/item_pawn = controller.pawn if(ismob(item_pawn.loc)) //Being held. dont teleport return diff --git a/code/datums/ai/idle_behaviors/idle_monkey.dm b/code/datums/ai/idle_behaviors/idle_monkey.dm index 5b5e189435deb..c32534dce529e 100644 --- a/code/datums/ai/idle_behaviors/idle_monkey.dm +++ b/code/datums/ai/idle_behaviors/idle_monkey.dm @@ -13,6 +13,7 @@ ) /datum/idle_behavior/idle_monkey/perform_idle_behavior(seconds_per_tick, datum/ai_controller/controller) + . = ..() var/mob/living/living_pawn = controller.pawn if(SPT_PROB(25, seconds_per_tick) && (living_pawn.mobility_flags & MOBILITY_MOVE) && isturf(living_pawn.loc) && !living_pawn.pulledby) diff --git a/code/datums/ai/monkey/monkey_behaviors.dm b/code/datums/ai/monkey/monkey_behaviors.dm index e6720d7d96a78..126c08daa1e8b 100644 --- a/code/datums/ai/monkey/monkey_behaviors.dm +++ b/code/datums/ai/monkey/monkey_behaviors.dm @@ -186,7 +186,7 @@ if(weapon) weapon.melee_attack_chain(living_pawn, target) else - living_pawn.UnarmedAttack(target, null, disarm ? list("right" = TRUE) : null) //Fake a right click if we're disarmin + controller.ai_interact(target = target, modifiers = disarm ? list(RIGHT_CLICK = TRUE) : null) controller.set_blackboard_key(BB_MONKEY_GUN_WORKED, TRUE) // We reset their memory of the gun being 'broken' if they accomplish some other attack else if(weapon) var/atom/real_target = target diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm index 451d692b65d34..e92ec519b209a 100644 --- a/code/datums/ai/monkey/monkey_controller.dm +++ b/code/datums/ai/monkey/monkey_controller.dm @@ -104,10 +104,22 @@ have ways of interacting with a specific mob and control it. . = ..() set_trip_mode(mode = TRUE) -/datum/ai_controller/monkey/able_to_run() +/datum/ai_controller/monkey/on_stat_changed(mob/living/source, new_stat) + . = ..() + update_able_to_run() + +/datum/ai_controller/monkey/setup_able_to_run() + . = ..() + RegisterSignal(pawn, COMSIG_MOB_INCAPACITATE_CHANGED, PROC_REF(update_able_to_run)) + +/datum/ai_controller/monkey/clear_able_to_run() + UnregisterSignal(pawn, list(COMSIG_MOB_INCAPACITATE_CHANGED, COMSIG_MOB_STATCHANGE)) + return ..() + +/datum/ai_controller/monkey/get_able_to_run() var/mob/living/living_pawn = pawn - if(living_pawn.incapacitated(IGNORE_RESTRAINTS | IGNORE_GRAB | IGNORE_STASIS) || living_pawn.stat > CONSCIOUS) + if(INCAPACITATED_IGNORING(living_pawn, INCAPABLE_RESTRAINTS|INCAPABLE_STASIS|INCAPABLE_GRAB) || living_pawn.stat > CONSCIOUS) return FALSE return ..() @@ -134,7 +146,7 @@ have ways of interacting with a specific mob and control it. for(var/obj/item/item in oview(2, living_pawn)) nearby_items += item - for(var/obj/item/item in living_pawn.held_items) // If we've got some garbage in out hands thats going to stop us from effectivly attacking, we should get rid of it. + for(var/obj/item/item in living_pawn.held_items) // If we've got some garbage in out hands that's going to stop us from effectively attacking, we should get rid of it. if(item.force < 2) living_pawn.dropItemToGround(item) @@ -151,7 +163,7 @@ have ways of interacting with a specific mob and control it. if(!weapon || (weapon in living_pawn.held_items)) return FALSE - if(weapon.force < 2) // our bite does 2 damage on avarage, no point in settling for anything less + if(weapon.force < 2) // our bite does 2 damage on average, no point in settling for anything less return FALSE set_blackboard_key(BB_MONKEY_PICKUPTARGET, weapon) diff --git a/code/datums/ai/movement/_ai_movement.dm b/code/datums/ai/movement/_ai_movement.dm index 35492c8269900..33b7e4e214f6b 100644 --- a/code/datums/ai/movement/_ai_movement.dm +++ b/code/datums/ai/movement/_ai_movement.dm @@ -11,6 +11,7 @@ controller.consecutive_pathing_attempts = 0 controller.set_blackboard_key(BB_CURRENT_MIN_MOVE_DISTANCE, min_distance) moving_controllers[controller] = current_movement_target + SEND_SIGNAL(controller.pawn, COMSIG_MOB_AI_MOVEMENT_STARTED, current_movement_target) /datum/ai_movement/proc/stop_moving_towards(datum/ai_controller/controller) controller.consecutive_pathing_attempts = 0 @@ -59,7 +60,7 @@ 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()) + if(!controller.able_to_run) controller.CancelActions() qdel(source) //stop moving return MOVELOOP_SKIP_STEP diff --git a/code/datums/ai/oldhostile/hostile_tameable.dm b/code/datums/ai/oldhostile/hostile_tameable.dm index 1c30cb95487c1..907ab955a8d53 100644 --- a/code/datums/ai/oldhostile/hostile_tameable.dm +++ b/code/datums/ai/oldhostile/hostile_tameable.dm @@ -50,7 +50,19 @@ if(buckler != blackboard[BB_HOSTILE_FRIEND]) return COMPONENT_BLOCK_BUCKLE -/datum/ai_controller/hostile_friend/able_to_run() +/datum/ai_controller/hostile_friend/on_stat_changed(mob/living/source, new_stat) + . = ..() + update_able_to_run() + +/datum/ai_controller/hostile_friend/setup_able_to_run() + . = ..() + RegisterSignal(pawn, COMSIG_MOB_INCAPACITATE_CHANGED, PROC_REF(update_able_to_run)) + +/datum/ai_controller/hostile_friend/clear_able_to_run() + UnregisterSignal(pawn, list(COMSIG_MOB_INCAPACITATE_CHANGED, COMSIG_MOB_STATCHANGE)) + return ..() + +/datum/ai_controller/hostile_friend/get_able_to_run() var/mob/living/living_pawn = pawn if(IS_DEAD_OR_INCAP(living_pawn)) @@ -77,14 +89,14 @@ if(pawn.Adjacent(pawn, new_friend)) new_friend.visible_message("[pawn] looks at [new_friend] in a friendly manner!", span_notice("[pawn] looks at you in a friendly manner!")) set_blackboard_key(BB_HOSTILE_FRIEND, new_friend) - RegisterSignal(new_friend, COMSIG_MOB_POINTED, PROC_REF(check_point)) + RegisterSignal(new_friend, COMSIG_MOVABLE_POINTED, PROC_REF(check_point)) RegisterSignal(new_friend, COMSIG_MOB_SAY, PROC_REF(check_verbal_command)) /// Someone is being mean to us, take them off our friends (add actual enemies behavior later) /datum/ai_controller/hostile_friend/proc/unfriend() var/mob/living/old_friend = blackboard[BB_HOSTILE_FRIEND] if(old_friend) - UnregisterSignal(old_friend, list(COMSIG_MOB_POINTED, COMSIG_MOB_SAY)) + UnregisterSignal(old_friend, list(COMSIG_MOVABLE_POINTED, COMSIG_MOB_SAY)) clear_blackboard_key(BB_HOSTILE_FRIEND) /// Someone is looking at us, if we're currently carrying something then show what it is, and include a message if they're our friend @@ -129,7 +141,7 @@ /datum/ai_controller/hostile_friend/proc/check_menu(mob/user) if(!istype(user)) CRASH("A non-mob is trying to issue an order to [pawn].") - if(user.incapacitated() || !can_see(user, pawn)) + if(user.incapacitated || !can_see(user, pawn)) return FALSE return TRUE @@ -190,7 +202,7 @@ set_blackboard_key(BB_HOSTILE_ORDER_MODE, HOSTILE_COMMAND_ATTACK) /// Someone we like is pointing at something, see if it's something we might want to interact with (like if they might want us to fetch something for them) -/datum/ai_controller/hostile_friend/proc/check_point(mob/pointing_friend, atom/movable/pointed_movable) +/datum/ai_controller/hostile_friend/proc/check_point(mob/pointing_friend, atom/movable/pointed_movable, obj/effect/temp_visual/point/point) SIGNAL_HANDLER var/mob/living/simple_animal/hostile/living_pawn = pawn diff --git a/code/datums/ai_laws/ai_laws.dm b/code/datums/ai_laws/ai_laws.dm index 0dbc6839430ba..a0d1d629fc8d3 100644 --- a/code/datums/ai_laws/ai_laws.dm +++ b/code/datums/ai_laws/ai_laws.dm @@ -192,7 +192,7 @@ GLOBAL_VAR(round_default_lawset) var/datum/ai_laws/default_laws = get_round_default_lawset() default_laws = new default_laws() inherent = default_laws.inherent - var/datum/job/human_ai_job = SSjob.GetJob(JOB_HUMAN_AI) + var/datum/job/human_ai_job = SSjob.get_job(JOB_HUMAN_AI) if(human_ai_job && human_ai_job.current_positions && !zeroth) //there is a human AI so we "slave" to that. zeroth = "Follow the orders of Big Brother." protected_zeroth = TRUE diff --git a/code/datums/announcers/default_announcer.dm b/code/datums/announcers/default_announcer.dm index c5dc142f818b9..cb33d68c559d9 100644 --- a/code/datums/announcers/default_announcer.dm +++ b/code/datums/announcers/default_announcer.dm @@ -1,22 +1,22 @@ /* SKYRAT EDIT REMOVAL /datum/centcom_announcer/default - welcome_sounds = list('sound/ai/default/welcome.ogg') - alert_sounds = list('sound/ai/default/attention.ogg') - command_report_sounds = list('sound/ai/default/commandreport.ogg') - event_sounds = list(ANNOUNCER_AIMALF = 'sound/ai/default/aimalf.ogg', - ANNOUNCER_ALIENS = 'sound/ai/default/aliens.ogg', - ANNOUNCER_ANIMES = 'sound/ai/default/animes.ogg', - ANNOUNCER_GRANOMALIES = 'sound/ai/default/granomalies.ogg', - ANNOUNCER_INTERCEPT = 'sound/ai/default/intercept.ogg', - ANNOUNCER_IONSTORM = 'sound/ai/default/ionstorm.ogg', - ANNOUNCER_METEORS = 'sound/ai/default/meteors.ogg', - ANNOUNCER_OUTBREAK5 = 'sound/ai/default/outbreak5.ogg', - ANNOUNCER_OUTBREAK7 = 'sound/ai/default/outbreak7.ogg', - ANNOUNCER_POWEROFF = 'sound/ai/default/poweroff.ogg', - ANNOUNCER_POWERON = 'sound/ai/default/poweron.ogg', - ANNOUNCER_RADIATION = 'sound/ai/default/radiation.ogg', - ANNOUNCER_SHUTTLECALLED = 'sound/ai/default/shuttlecalled.ogg', - ANNOUNCER_SHUTTLEDOCK = 'sound/ai/default/shuttledock.ogg', - ANNOUNCER_SHUTTLERECALLED = 'sound/ai/default/shuttlerecalled.ogg', - ANNOUNCER_SPANOMALIES = 'sound/ai/default/spanomalies.ogg') + welcome_sounds = list('sound/announcer/default/welcome.ogg') + alert_sounds = list('sound/announcer/default/attention.ogg') + command_report_sounds = list('sound/announcer/default/commandreport.ogg') + event_sounds = list(ANNOUNCER_AIMALF = 'sound/announcer/default/aimalf.ogg', + ANNOUNCER_ALIENS = 'sound/announcer/default/aliens.ogg', + ANNOUNCER_ANIMES = 'sound/announcer/default/animes.ogg', + ANNOUNCER_GRANOMALIES = 'sound/announcer/default/granomalies.ogg', + ANNOUNCER_INTERCEPT = 'sound/announcer/default/intercept.ogg', + ANNOUNCER_IONSTORM = 'sound/announcer/default/ionstorm.ogg', + ANNOUNCER_METEORS = 'sound/announcer/default/meteors.ogg', + ANNOUNCER_OUTBREAK5 = 'sound/announcer/default/outbreak5.ogg', + ANNOUNCER_OUTBREAK7 = 'sound/announcer/default/outbreak7.ogg', + ANNOUNCER_POWEROFF = 'sound/announcer/default/poweroff.ogg', + ANNOUNCER_POWERON = 'sound/announcer/default/poweron.ogg', + ANNOUNCER_RADIATION = 'sound/announcer/default/radiation.ogg', + ANNOUNCER_SHUTTLECALLED = 'sound/announcer/default/shuttlecalled.ogg', + ANNOUNCER_SHUTTLEDOCK = 'sound/announcer/default/shuttledock.ogg', + ANNOUNCER_SHUTTLERECALLED = 'sound/announcer/default/shuttlerecalled.ogg', + ANNOUNCER_SPANOMALIES = 'sound/announcer/default/spanomalies.ogg') */ diff --git a/code/datums/announcers/intern_announcer.dm b/code/datums/announcers/intern_announcer.dm index 5e8544c18710f..635508256b781 100644 --- a/code/datums/announcers/intern_announcer.dm +++ b/code/datums/announcers/intern_announcer.dm @@ -1,46 +1,46 @@ /datum/centcom_announcer/intern - welcome_sounds = list('sound/ai/intern/welcome/1.ogg', - 'sound/ai/intern/welcome/2.ogg', - 'sound/ai/intern/welcome/3.ogg', - 'sound/ai/intern/welcome/4.ogg', - 'sound/ai/intern/welcome/5.ogg', - 'sound/ai/intern/welcome/6.ogg') + welcome_sounds = list('sound/announcer/intern/welcome/1.ogg', + 'sound/announcer/intern/welcome/2.ogg', + 'sound/announcer/intern/welcome/3.ogg', + 'sound/announcer/intern/welcome/4.ogg', + 'sound/announcer/intern/welcome/5.ogg', + 'sound/announcer/intern/welcome/6.ogg') - alert_sounds = list('sound/ai/intern/alerts/1.ogg', - 'sound/ai/intern/alerts/2.ogg', - 'sound/ai/intern/alerts/3.ogg', - 'sound/ai/intern/alerts/4.ogg', - 'sound/ai/intern/alerts/5.ogg', - 'sound/ai/intern/alerts/6.ogg', - 'sound/ai/intern/alerts/7.ogg', - 'sound/ai/intern/alerts/8.ogg', - 'sound/ai/intern/alerts/9.ogg', - 'sound/ai/intern/alerts/10.ogg', - 'sound/ai/intern/alerts/11.ogg', - 'sound/ai/intern/alerts/12.ogg', - 'sound/ai/intern/alerts/13.ogg', - 'sound/ai/intern/alerts/14.ogg') + alert_sounds = list('sound/announcer/intern/alerts/1.ogg', + 'sound/announcer/intern/alerts/2.ogg', + 'sound/announcer/intern/alerts/3.ogg', + 'sound/announcer/intern/alerts/4.ogg', + 'sound/announcer/intern/alerts/5.ogg', + 'sound/announcer/intern/alerts/6.ogg', + 'sound/announcer/intern/alerts/7.ogg', + 'sound/announcer/intern/alerts/8.ogg', + 'sound/announcer/intern/alerts/9.ogg', + 'sound/announcer/intern/alerts/10.ogg', + 'sound/announcer/intern/alerts/11.ogg', + 'sound/announcer/intern/alerts/12.ogg', + 'sound/announcer/intern/alerts/13.ogg', + 'sound/announcer/intern/alerts/14.ogg') - command_report_sounds = list('sound/ai/intern/commandreport/1.ogg', - 'sound/ai/intern/commandreport/2.ogg', - 'sound/ai/intern/commandreport/3.ogg') + command_report_sounds = list('sound/announcer/intern/commandreport/1.ogg', + 'sound/announcer/intern/commandreport/2.ogg', + 'sound/announcer/intern/commandreport/3.ogg') - event_sounds = list(ANNOUNCER_AIMALF = 'sound/ai/default/aimalf.ogg', - ANNOUNCER_ALIENS = 'sound/ai/intern/aliens.ogg', - ANNOUNCER_ANIMES = 'sound/ai/intern/animes.ogg', - ANNOUNCER_GRANOMALIES = 'sound/ai/intern/granomalies.ogg', - ANNOUNCER_INTERCEPT = 'sound/ai/intern/intercept.ogg', - ANNOUNCER_IONSTORM = 'sound/ai/intern/ionstorm.ogg', - ANNOUNCER_METEORS = 'sound/ai/intern/meteors.ogg', - ANNOUNCER_OUTBREAK5 = 'sound/ai/intern/outbreak5.ogg', - ANNOUNCER_OUTBREAK7 = 'sound/ai/intern/outbreak7.ogg', - ANNOUNCER_POWEROFF = 'sound/ai/intern/poweroff.ogg', - ANNOUNCER_POWERON = 'sound/ai/intern/poweron.ogg', - ANNOUNCER_RADIATION = 'sound/ai/intern/radiation.ogg', - ANNOUNCER_SHUTTLECALLED = 'sound/ai/intern/shuttlecalled.ogg', - ANNOUNCER_SHUTTLEDOCK = 'sound/ai/intern/shuttledock.ogg', - ANNOUNCER_SHUTTLERECALLED = 'sound/ai/intern/shuttlerecalled.ogg', - ANNOUNCER_SPANOMALIES = 'sound/ai/intern/spanomalies.ogg') + event_sounds = list(ANNOUNCER_AIMALF = 'sound/announcer/default/aimalf.ogg', + ANNOUNCER_ALIENS = 'sound/announcer/intern/aliens.ogg', + ANNOUNCER_ANIMES = 'sound/announcer/intern/animes.ogg', + ANNOUNCER_GRANOMALIES = 'sound/announcer/intern/granomalies.ogg', + ANNOUNCER_INTERCEPT = 'sound/announcer/intern/intercept.ogg', + ANNOUNCER_IONSTORM = 'sound/announcer/intern/ionstorm.ogg', + ANNOUNCER_METEORS = 'sound/announcer/intern/meteors.ogg', + ANNOUNCER_OUTBREAK5 = 'sound/announcer/intern/outbreak5.ogg', + ANNOUNCER_OUTBREAK7 = 'sound/announcer/intern/outbreak7.ogg', + ANNOUNCER_POWEROFF = 'sound/announcer/intern/poweroff.ogg', + ANNOUNCER_POWERON = 'sound/announcer/intern/poweron.ogg', + ANNOUNCER_RADIATION = 'sound/announcer/intern/radiation.ogg', + ANNOUNCER_SHUTTLECALLED = 'sound/announcer/intern/shuttlecalled.ogg', + ANNOUNCER_SHUTTLEDOCK = 'sound/announcer/intern/shuttledock.ogg', + ANNOUNCER_SHUTTLERECALLED = 'sound/announcer/intern/shuttlerecalled.ogg', + ANNOUNCER_SPANOMALIES = 'sound/announcer/intern/spanomalies.ogg') - custom_alert_message = "Please stand by for an important message from our new intern.
" + custom_alert_message = span_alert("Please stand by for an important message from our new intern.
") diff --git a/code/datums/announcers/medbot_announcer.dm b/code/datums/announcers/medbot_announcer.dm index 17e8555221320..7269fe85c5703 100644 --- a/code/datums/announcers/medbot_announcer.dm +++ b/code/datums/announcers/medbot_announcer.dm @@ -1,21 +1,21 @@ /datum/centcom_announcer/medbot - welcome_sounds = list('sound/ai/medbot/welcome.ogg', - 'sound/ai/medbot/newAI.ogg') - alert_sounds = list('sound/ai/medbot/attention.ogg') - command_report_sounds = list('sound/ai/medbot/commandreport.ogg') - event_sounds = list(ANNOUNCER_AIMALF = 'sound/ai/default/aimalf.ogg', - ANNOUNCER_ALIENS = 'sound/ai/medbot/aliens.ogg', - ANNOUNCER_ANIMES = 'sound/ai/medbot/animes.ogg', - ANNOUNCER_GRANOMALIES = 'sound/ai/medbot/granomalies.ogg', - ANNOUNCER_INTERCEPT = 'sound/ai/medbot/intercept.ogg', - ANNOUNCER_IONSTORM = 'sound/ai/medbot/ionstorm.ogg', - ANNOUNCER_METEORS = 'sound/ai/medbot/meteors.ogg', - ANNOUNCER_OUTBREAK5 = 'sound/ai/medbot/outbreak5.ogg', - ANNOUNCER_OUTBREAK7 = 'sound/ai/medbot/outbreak7.ogg', - ANNOUNCER_POWEROFF = 'sound/ai/medbot/poweroff.ogg', - ANNOUNCER_POWERON = 'sound/ai/medbot/poweron.ogg', - ANNOUNCER_RADIATION = 'sound/ai/medbot/radiation.ogg', - ANNOUNCER_SHUTTLECALLED = 'sound/ai/medbot/shuttlecalled.ogg', - ANNOUNCER_SHUTTLEDOCK = 'sound/ai/medbot/shuttledock.ogg', - ANNOUNCER_SHUTTLERECALLED = 'sound/ai/medbot/shuttlerecalled.ogg', - ANNOUNCER_SPANOMALIES = 'sound/ai/medbot/spanomalies.ogg') + welcome_sounds = list('sound/announcer/medbot/welcome.ogg', + 'sound/announcer/medbot/newAI.ogg') + alert_sounds = list('sound/announcer/medbot/attention.ogg') + command_report_sounds = list('sound/announcer/medbot/commandreport.ogg') + event_sounds = list(ANNOUNCER_AIMALF = 'sound/announcer/default/aimalf.ogg', + ANNOUNCER_ALIENS = 'sound/announcer/medbot/aliens.ogg', + ANNOUNCER_ANIMES = 'sound/announcer/medbot/animes.ogg', + ANNOUNCER_GRANOMALIES = 'sound/announcer/medbot/granomalies.ogg', + ANNOUNCER_INTERCEPT = 'sound/announcer/medbot/intercept.ogg', + ANNOUNCER_IONSTORM = 'sound/announcer/medbot/ionstorm.ogg', + ANNOUNCER_METEORS = 'sound/announcer/medbot/meteors.ogg', + ANNOUNCER_OUTBREAK5 = 'sound/announcer/medbot/outbreak5.ogg', + ANNOUNCER_OUTBREAK7 = 'sound/announcer/medbot/outbreak7.ogg', + ANNOUNCER_POWEROFF = 'sound/announcer/medbot/poweroff.ogg', + ANNOUNCER_POWERON = 'sound/announcer/medbot/poweron.ogg', + ANNOUNCER_RADIATION = 'sound/announcer/medbot/radiation.ogg', + ANNOUNCER_SHUTTLECALLED = 'sound/announcer/medbot/shuttlecalled.ogg', + ANNOUNCER_SHUTTLEDOCK = 'sound/announcer/medbot/shuttledock.ogg', + ANNOUNCER_SHUTTLERECALLED = 'sound/announcer/medbot/shuttlerecalled.ogg', + ANNOUNCER_SPANOMALIES = 'sound/announcer/medbot/spanomalies.ogg') diff --git a/code/datums/beam.dm b/code/datums/beam.dm index fe34b0c7eddee..ad27ee5ee3edf 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -122,10 +122,10 @@ /datum/beam/proc/Draw() if(SEND_SIGNAL(src, COMSIG_BEAM_BEFORE_DRAW) & BEAM_CANCEL_DRAW) return - var/origin_px = isnull(override_origin_pixel_x) ? origin.pixel_x : override_origin_pixel_x - var/origin_py = isnull(override_origin_pixel_y) ? origin.pixel_y : override_origin_pixel_y - var/target_px = isnull(override_target_pixel_x) ? target.pixel_x : override_target_pixel_x - var/target_py = isnull(override_target_pixel_y) ? target.pixel_y : override_target_pixel_y + var/origin_px = (isnull(override_origin_pixel_x) ? origin.pixel_x : override_origin_pixel_x) + origin.pixel_w + var/origin_py = (isnull(override_origin_pixel_y) ? origin.pixel_y : override_origin_pixel_y) + origin.pixel_z + var/target_px = (isnull(override_target_pixel_x) ? target.pixel_x : override_target_pixel_x) + target.pixel_w + var/target_py = (isnull(override_target_pixel_y) ? target.pixel_y : override_target_pixel_y) + target.pixel_z var/Angle = get_angle_raw(origin.x, origin.y, origin_px, origin_py, target.x , target.y, target_px, target_py) ///var/Angle = round(get_angle(origin,target)) var/matrix/rot_matrix = matrix() @@ -212,6 +212,9 @@ /obj/effect/ebeam/singularity_act() return +/obj/effect/ebeam/Process_Spacemove(movement_dir, continuous_move) + return TRUE + /// A beam subtype used for advanced beams, to react to atoms entering the beam /obj/effect/ebeam/reacting /// If TRUE, atoms that exist in the beam's loc when inited count as "entering" the beam diff --git a/code/datums/brain_damage/creepy_trauma.dm b/code/datums/brain_damage/creepy_trauma.dm index d7526aa777935..941ec5cabf704 100644 --- a/code/datums/brain_damage/creepy_trauma.dm +++ b/code/datums/brain_damage/creepy_trauma.dm @@ -66,7 +66,8 @@ /datum/brain_trauma/special/obsessed/on_lose() ..() - owner.mind.remove_antag_datum(/datum/antagonist/obsessed) + if (owner.mind.remove_antag_datum(/datum/antagonist/obsessed)) + owner.mind.add_antag_datum(/datum/antagonist/former_obsessed) owner.clear_mood_event("creeping") if(obsession) log_game("[key_name(owner)] is no longer obsessed with [key_name(obsession)].") diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index f4c78bc9007e6..ad60f6cd9a6a5 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -1,3 +1,8 @@ + +#define IMAGINARY_FRIEND_RANGE 9 +#define IMAGINARY_FRIEND_SPEECH_RANGE IMAGINARY_FRIEND_RANGE +#define IMAGINARY_FRIEND_EXTENDED_SPEECH_RANGE 999 + /datum/brain_trauma/special/imaginary_friend name = "Imaginary Friend" desc = "Patient can see and hear an imaginary person." @@ -88,11 +93,15 @@ var/mob/living/owner var/bubble_icon = "default" + /// Whether our host and other imaginary friends can hear us only when nearby or practically anywhere. + var/extended_message_range = TRUE + /mob/camera/imaginary_friend/Login() . = ..() if(!. || !client) return FALSE - greet() + if(owner) + greet() Show() /mob/camera/imaginary_friend/proc/greet() @@ -119,6 +128,7 @@ if(!owner.imaginary_group) owner.imaginary_group = list(owner) owner.imaginary_group += src + greet() /// Copies appearance from passed player prefs, or randomises them if none are provided /mob/camera/imaginary_friend/proc/setup_appearance(datum/preferences/appearance_from_prefs = null) @@ -156,11 +166,11 @@ for(var/job in appearance_from_prefs.job_preferences) var/this_pref = appearance_from_prefs.job_preferences[job] if(this_pref > highest_pref) - appearance_job = SSjob.GetJob(job) + appearance_job = SSjob.get_job(job) highest_pref = this_pref if(!appearance_job) - appearance_job = SSjob.GetJob(JOB_ASSISTANT) + appearance_job = SSjob.get_job(JOB_ASSISTANT) if(istype(appearance_job, /datum/job/ai)) human_image = icon('icons/mob/silicon/ai.dmi', icon_state = resolve_ai_icon(appearance_from_prefs.read_preference(/datum/preference/choiced/ai_core_display)), dir = SOUTH) @@ -212,7 +222,7 @@ create_chat_message(speaker, message_language, raw_message, spans) to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mods)) -/mob/camera/imaginary_friend/send_speech(message, range = 7, obj/source = src, bubble_type = bubble_icon, list/spans = list(), datum/language/message_language = null, list/message_mods = list(), forced = null) +/mob/camera/imaginary_friend/send_speech(message, range = IMAGINARY_FRIEND_SPEECH_RANGE, obj/source = src, bubble_type = bubble_icon, list/spans = list(), datum/language/message_language = null, list/message_mods = list(), forced = null) message = get_message_mods(message, message_mods) message = capitalize(message) @@ -232,6 +242,9 @@ message = "[randomnote] [capitalize(message)] [randomnote]" spans |= SPAN_SINGING + if(extended_message_range) + range = IMAGINARY_FRIEND_EXTENDED_SPEECH_RANGE + var/eavesdrop_range = 0 if (message_mods[MODE_CUSTOM_SAY_ERASE_INPUT]) @@ -383,7 +396,7 @@ var/obj/visual = image('icons/hud/screen_gen.dmi', our_tile, "arrow", FLY_LAYER) INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(flick_overlay_global), visual, group_clients(), 2.5 SECONDS) - animate(visual, pixel_x = (tile.x - our_tile.x) * world.icon_size + pointed_atom.pixel_x, pixel_y = (tile.y - our_tile.y) * world.icon_size + pointed_atom.pixel_y, time = 1.7, easing = EASE_OUT) + animate(visual, pixel_x = (tile.x - our_tile.x) * ICON_SIZE_X + pointed_atom.pixel_x, pixel_y = (tile.y - our_tile.y) * ICON_SIZE_Y + pointed_atom.pixel_y, time = 1.7, easing = EASE_OUT) /mob/camera/imaginary_friend/create_thinking_indicator() if(active_thinking_indicator || active_typing_indicator || !HAS_TRAIT(src, TRAIT_THINKING_IN_CHARACTER)) @@ -528,3 +541,7 @@ real_name = "[owner.real_name]?" name = real_name human_image = icon('icons/mob/simple/lavaland/lavaland_monsters.dmi', icon_state = "curseblob") + +#undef IMAGINARY_FRIEND_RANGE +#undef IMAGINARY_FRIEND_SPEECH_RANGE +#undef IMAGINARY_FRIEND_EXTENDED_SPEECH_RANGE diff --git a/code/datums/brain_damage/magic.dm b/code/datums/brain_damage/magic.dm index 441d220a5ded3..fde1e5d2421f1 100644 --- a/code/datums/brain_damage/magic.dm +++ b/code/datums/brain_damage/magic.dm @@ -104,14 +104,14 @@ create_stalker() if(get_dist(owner, stalker) <= 1) - playsound(owner, 'sound/magic/demon_attack1.ogg', 50) + playsound(owner, 'sound/effects/magic/demon_attack1.ogg', 50) owner.visible_message(span_warning("[owner] is torn apart by invisible claws!"), span_userdanger("Ghostly claws tear your body apart!")) owner.take_bodypart_damage(rand(20, 45), wound_bonus=CANT_WOUND) else if(SPT_PROB(30, seconds_per_tick)) stalker.forceMove(get_step_towards(stalker, owner)) if(get_dist(owner, stalker) <= 8) if(!close_stalker) - var/sound/slowbeat = sound('sound/health/slowbeat.ogg', repeat = TRUE) + var/sound/slowbeat = sound('sound/effects/health/slowbeat.ogg', repeat = TRUE) owner.playsound_local(owner, slowbeat, 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) close_stalker = TRUE else diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index d5f0a0e91240a..cd45ae1abf468 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -407,7 +407,7 @@ 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()) + if(owner.incapacitated) return bodypart.receive_damage(scratch_damage) if(SPT_PROB(33, seconds_per_tick)) diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index 1bf011e0fab49..f49a6d0c0bc52 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -45,7 +45,7 @@ else message = pick_list_replacements(BRAIN_DAMAGE_FILE, "god_neutral") - playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 200, TRUE, 5) + playsound(get_turf(owner), 'sound/effects/magic/clockwork/invoke_general.ogg', 200, TRUE, 5) voice_of_god(message, owner, list("colossus","yell"), 2.5, include_owner, name, TRUE) /datum/brain_trauma/special/bluespace_prophet @@ -218,7 +218,7 @@ linked = FALSE return to_chat(owner, span_warning("Your connection to [linked_target] suddenly feels extremely strong... you can feel it pulling you!")) - owner.playsound_local(owner, 'sound/magic/lightning_chargeup.ogg', 75, FALSE) + owner.playsound_local(owner, 'sound/effects/magic/lightning_chargeup.ogg', 75, FALSE) returning = TRUE addtimer(CALLBACK(src, PROC_REF(snapback)), 10 SECONDS) @@ -231,7 +231,7 @@ return to_chat(owner, span_warning("You're pulled through spacetime!")) do_teleport(owner, get_turf(linked_target), null, channel = TELEPORT_CHANNEL_QUANTUM) - owner.playsound_local(owner, 'sound/magic/repulse.ogg', 100, FALSE) + owner.playsound_local(owner, 'sound/effects/magic/repulse.ogg', 100, FALSE) linked_target = null linked = FALSE @@ -388,17 +388,17 @@ if(owner.stat != CONSCIOUS) if(prob(20)) - owner.playsound_local(beepsky, 'sound/voice/beepsky/iamthelaw.ogg', 50) + owner.playsound_local(beepsky, 'sound/mobs/non-humanoids/beepsky/iamthelaw.ogg', 50) return if(get_dist(owner, beepsky) <= 1) - owner.playsound_local(owner, 'sound/weapons/egloves.ogg', 50) + owner.playsound_local(owner, 'sound/items/weapons/egloves.ogg', 50) owner.visible_message(span_warning("[owner]'s body jerks as if it was shocked."), span_userdanger("You feel the fist of the LAW.")) owner.adjustStaminaLoss(rand(40, 70)) QDEL_NULL(beepsky) if(prob(20) && get_dist(owner, beepsky) <= 8) - owner.playsound_local(beepsky, 'sound/voice/beepsky/criminal.ogg', 40) + owner.playsound_local(beepsky, 'sound/mobs/non-humanoids/beepsky/criminal.ogg', 40) /obj/effect/client_image_holder/securitron name = "Securitron" diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index 6d0f8fc565415..198b674631750 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -305,7 +305,7 @@ addtimer(TRAIT_CALLBACK_REMOVE(owner, TRAIT_DISCOORDINATED_TOOL_USER, TRAUMA_TRAIT), 10 SECONDS) addtimer(CALLBACK(owner, TYPE_PROC_REF(/atom, balloon_alert), owner, "dexterity regained!"), 10 SECONDS) if(prob(15)) - playsound(owner,'sound/effects/sf_hiccup_male_01.ogg', 50) + playsound(owner,'sound/mobs/humanoids/human/hiccup/sf_hiccup_male_01.ogg', 50) owner.emote("hiccup") //too drunk to feel anything //if they're to this point, they're likely dying of liver damage diff --git a/code/datums/callback.dm b/code/datums/callback.dm index 35103fbc901f3..c2941c9202986 100644 --- a/code/datums/callback.dm +++ b/code/datums/callback.dm @@ -111,7 +111,7 @@ else calling_arguments = args if(datum_flags & DF_VAR_EDITED) - if(usr != GLOB.AdminProcCallHandler && !usr?.client?.ckey) //This happens when a timer or the MC invokes a callback + if(usr != GLOB.AdminProcCallHandler && !(usr && usr?.client?.ckey)) //This happens when a timer or the MC invokes a callback return HandleUserlessProcCall(usr, object, delegate, calling_arguments) return WrapAdminProcCall(object, delegate, calling_arguments) if (object == GLOBAL_PROC) @@ -148,7 +148,7 @@ else calling_arguments = args if(datum_flags & DF_VAR_EDITED) - if(usr != GLOB.AdminProcCallHandler && !usr?.client?.ckey) //This happens when a timer or the MC invokes a callback + if(usr != GLOB.AdminProcCallHandler && !(usr && usr?.client?.ckey)) //This happens when a timer or the MC invokes a callback return HandleUserlessProcCall(usr, object, delegate, calling_arguments) return WrapAdminProcCall(object, delegate, calling_arguments) if (object == GLOBAL_PROC) diff --git a/code/datums/candidate_poll.dm b/code/datums/candidate_poll.dm index f1fa9812014ed..9afec6f371bb6 100644 --- a/code/datums/candidate_poll.dm +++ b/code/datums/candidate_poll.dm @@ -74,7 +74,7 @@ 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') + SEND_SOUND(candidate, 'sound/machines/buzz/buzz-sigh.ogg') return FALSE signed_up += candidate diff --git a/code/datums/cinematics/malf_doomsday.dm b/code/datums/cinematics/malf_doomsday.dm index 2eb330d9a484f..02297065afc45 100644 --- a/code/datums/cinematics/malf_doomsday.dm +++ b/code/datums/cinematics/malf_doomsday.dm @@ -5,6 +5,6 @@ flick("intro_malf", screen) stoplag(7.6 SECONDS) flick("station_explode_fade_red", screen) - play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + play_cinematic_sound(sound('sound/effects/explosion/explosion_distant.ogg')) special_callback?.Invoke() screen.icon_state = "summary_malf" diff --git a/code/datums/cinematics/narsie_summon.dm b/code/datums/cinematics/narsie_summon.dm index 2fecac2c63a80..1e0a5d1d48f94 100644 --- a/code/datums/cinematics/narsie_summon.dm +++ b/code/datums/cinematics/narsie_summon.dm @@ -5,9 +5,9 @@ screen.icon_state = null flick("intro_cult", screen) stoplag(2.5 SECONDS) - play_cinematic_sound(sound('sound/magic/enter_blood.ogg')) + play_cinematic_sound(sound('sound/effects/magic/enter_blood.ogg')) stoplag(2.8 SECONDS) - play_cinematic_sound(sound('sound/machines/terminal_off.ogg')) + play_cinematic_sound(sound('sound/machines/terminal/terminal_off.ogg')) stoplag(2 SECONDS) flick("station_corrupted", screen) play_cinematic_sound(sound('sound/effects/ghost.ogg')) @@ -20,10 +20,10 @@ /datum/cinematic/cult_fail/play_cinematic() screen.icon_state = "station_intact" stoplag(2 SECONDS) - play_cinematic_sound(sound('sound/creatures/narsie_rises.ogg')) + play_cinematic_sound(sound('sound/music/antag/bloodcult/narsie_rises.ogg')) stoplag(6 SECONDS) - play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + play_cinematic_sound(sound('sound/effects/explosion/explosion_distant.ogg')) stoplag(1 SECONDS) - play_cinematic_sound(sound('sound/magic/demon_dies.ogg')) + play_cinematic_sound(sound('sound/effects/magic/demon_dies.ogg')) stoplag(3 SECONDS) special_callback?.Invoke() diff --git a/code/datums/cinematics/nuke_cinematics.dm b/code/datums/cinematics/nuke_cinematics.dm index dd827f7c0b9fd..858d95c7e5102 100644 --- a/code/datums/cinematics/nuke_cinematics.dm +++ b/code/datums/cinematics/nuke_cinematics.dm @@ -22,7 +22,7 @@ /datum/cinematic/nuke/ops_victory/play_nuke_effect() flick("station_explode_fade_red", screen) - play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + play_cinematic_sound(sound('sound/effects/explosion/explosion_distant.ogg')) /// The syndicate nuclear bomb was activated, but just barely missed the station! /datum/cinematic/nuke/ops_miss @@ -30,7 +30,7 @@ /datum/cinematic/nuke/ops_miss/play_nuke_effect() flick("station_intact_fade_red", screen) - play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + play_cinematic_sound(sound('sound/effects/explosion/explosion_distant.ogg')) /// The self destruct, or another station-destroying entity like a blob, destroyed the station! /datum/cinematic/nuke/self_destruct @@ -38,14 +38,14 @@ /datum/cinematic/nuke/self_destruct/play_nuke_effect() flick("station_explode_fade_red", screen) - play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + play_cinematic_sound(sound('sound/effects/explosion/explosion_distant.ogg')) /// The self destruct was activated, yet somehow avoided destroying the station! /datum/cinematic/nuke/self_destruct_miss after_nuke_summary_state = "station_intact" /datum/cinematic/nuke/self_destruct_miss/play_nuke_effect() - play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + play_cinematic_sound(sound('sound/effects/explosion/explosion_distant.ogg')) special_callback?.Invoke() /// The syndicate nuclear bomb was activated, and the nuclear operatives failed to extract on their shuttle before it detonated on the station! @@ -54,7 +54,7 @@ /datum/cinematic/nuke/mutual_destruction/play_nuke_effect() flick("station_explode_fade_red", screen) - play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + play_cinematic_sound(sound('sound/effects/explosion/explosion_distant.ogg')) /// A blood cult summoned Nar'sie, but central command deployed a nuclear package to stop them. /datum/cinematic/nuke/cult @@ -62,7 +62,7 @@ /datum/cinematic/nuke/cult/play_nuke_effect() flick("station_explode_fade_red", screen) - play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + play_cinematic_sound(sound('sound/effects/explosion/explosion_distant.ogg')) /// A fake version of the nuclear detonation, where it winds up, but doesn't explode. /datum/cinematic/nuke/fake @@ -77,7 +77,7 @@ cleanup_time = 10 SECONDS /datum/cinematic/nuke/clown/play_nuke_effect() - play_cinematic_sound(sound('sound/items/airhorn.ogg')) + play_cinematic_sound(sound('sound/items/airhorn/airhorn.ogg')) flick("summary_selfdes", screen) //??? /// A fake version of the nuclear detonation, where it winds up, but doesn't explode as the nuke core within was missing. @@ -86,7 +86,7 @@ /datum/cinematic/nuke/no_core/play_nuke_effect() flick("station_intact", screen) - play_cinematic_sound(sound('sound/ambience/signal.ogg')) + play_cinematic_sound(sound('sound/ambience/misc/signal.ogg')) stoplag(10 SECONDS) /// The syndicate nuclear bomb was activated, but just missed the station by a whole z-level! @@ -96,5 +96,5 @@ /datum/cinematic/nuke/far_explosion/play_cinematic() // This one has no intro sequence. // It's actually just a global sound, which makes you wonder why it's a cinematic. - play_cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + play_cinematic_sound(sound('sound/effects/explosion/explosion_distant.ogg')) special_callback?.Invoke() diff --git a/code/datums/cogbar.dm b/code/datums/cogbar.dm index 0b5ead1e51e8f..6505158b58d88 100644 --- a/code/datums/cogbar.dm +++ b/code/datums/cogbar.dm @@ -44,7 +44,7 @@ /// Adds the cog to the user, visible by other players /datum/cogbar/proc/add_cog_to_user() - cog = SSvis_overlays.add_vis_overlay(user, + cog = SSvis_overlays.add_vis_overlay(user, icon = 'icons/effects/progressbar.dmi', iconstate = "cog", plane = HIGH_GAME_PLANE, @@ -52,7 +52,7 @@ unique = TRUE, alpha = 0, ) - cog.pixel_y = world.icon_size + offset_y + cog.pixel_y = ICON_SIZE_Y + offset_y animate(cog, alpha = 255, time = COGBAR_ANIMATION_TIME) if(isnull(user_client)) @@ -61,7 +61,7 @@ blank = image('icons/blanks/32x32.dmi', cog, "nothing") SET_PLANE_EXPLICIT(blank, HIGH_GAME_PLANE, user) blank.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA - blank.override = TRUE + blank.override = TRUE user_client.images += blank @@ -74,7 +74,7 @@ animate(cog, alpha = 0, time = COGBAR_ANIMATION_TIME) - QDEL_IN(src, COGBAR_ANIMATION_TIME) + QDEL_IN(src, COGBAR_ANIMATION_TIME) /// When the user is deleted, remove the cog @@ -82,6 +82,6 @@ SIGNAL_HANDLER qdel(src) - + #undef COGBAR_ANIMATION_TIME diff --git a/code/datums/communications.dm b/code/datums/communications.dm index 79f660a4cfa51..c24602e4a268b 100644 --- a/code/datums/communications.dm +++ b/code/datums/communications.dm @@ -37,7 +37,7 @@ GLOBAL_DATUM_INIT(communications_controller, /datum/communciations_controller, n else var/list/message_data = user.treat_message(input) 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") + priority_announce(html_decode(message_data["message"]), null, 'sound/announcer/announcement/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 COOLDOWN_START(src, nonsilicon_message_cooldown, COMMUNICATION_COOLDOWN) diff --git a/code/datums/components/adjust_fishing_difficulty.dm b/code/datums/components/adjust_fishing_difficulty.dm new file mode 100644 index 0000000000000..4e329b039409c --- /dev/null +++ b/code/datums/components/adjust_fishing_difficulty.dm @@ -0,0 +1,110 @@ +///Influences the difficulty of the minigame when worn or if buckled to. +/datum/component/adjust_fishing_difficulty + ///The additive numerical modifier to the difficulty of the minigame + var/modifier + ///For items, in which slot it has to be worn to influence the difficulty of the minigame + var/slots + +/datum/component/adjust_fishing_difficulty/Initialize(modifier, slots = NONE) + if(!ismovable(parent) || !modifier) + return COMPONENT_INCOMPATIBLE + + if(!isitem(parent)) + var/atom/movable/movable_parent = parent + if(!movable_parent.can_buckle) + return COMPONENT_INCOMPATIBLE + + src.modifier = modifier + src.slots = slots + +/datum/component/adjust_fishing_difficulty/RegisterWithParent() + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped)) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_dropped)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_item_examine)) + else + RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, PROC_REF(on_buckle)) + RegisterSignal(parent, COMSIG_MOVABLE_UNBUCKLE, PROC_REF(on_unbuckle)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_buckle_examine)) + + update_check() + +/datum/component/adjust_fishing_difficulty/UnregisterFromParent() + UnregisterSignal(parent, list( + COMSIG_ATOM_EXAMINE, + COMSIG_MOVABLE_BUCKLE, + COMSIG_MOVABLE_UNBUCKLE, + COMSIG_ITEM_EQUIPPED, + COMSIG_ITEM_DROPPED, + )) + + update_check(TRUE) + +/datum/component/adjust_fishing_difficulty/proc/update_check(removing = FALSE) + var/atom/movable/movable_parent = parent + for(var/mob/living/buckled_mob as anything in movable_parent.buckled_mobs) + update_user(buckled_mob, removing) + if(!isitem(movable_parent) || !isliving(movable_parent.loc)) + return + var/mob/living/holder = movable_parent.loc + var/obj/item/item = parent + if(holder.get_slot_by_item(movable_parent) & (slots || item.slot_flags)) + update_user(holder, removing) + +/datum/component/adjust_fishing_difficulty/proc/on_item_examine(obj/item/item, mob/user, list/examine_text) + SIGNAL_HANDLER + if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH)) + return + var/method = "[(slots || item.slot_flags) & ITEM_SLOT_HANDS ? "Holding" : "Wearing"] [item.p_them()]" + add_examine_line(user, examine_text, method) + +/datum/component/adjust_fishing_difficulty/proc/on_buckle_examine(atom/movable/source, mob/user, list/examine_text) + SIGNAL_HANDLER + if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH)) + return + add_examine_line(user, examine_text, "Buckling to [source.p_them()]") + +/datum/component/adjust_fishing_difficulty/proc/add_examine_line(mob/user, list/examine_text, method) + var/percent = HAS_MIND_TRAIT(user, TRAIT_EXAMINE_DEEPER_FISH) ? "[abs(modifier)]% " : "" + var/text = "[method] will make fishing [percent][modifier < 0 ? "easier" : "harder"]." + if(modifier < 0) + examine_text += span_nicegreen(text) + else + examine_text += span_danger(text) + +/datum/component/adjust_fishing_difficulty/proc/on_buckle(atom/movable/source, mob/living/buckled_mob, forced) + SIGNAL_HANDLER + update_user(buckled_mob) + +/datum/component/adjust_fishing_difficulty/proc/on_unbuckle(atom/movable/source, mob/living/buckled_mob, forced) + SIGNAL_HANDLER + update_user(buckled_mob, TRUE) + +/datum/component/adjust_fishing_difficulty/proc/on_equipped(obj/item/source, mob/living/wearer, slot) + SIGNAL_HANDLER + if(slot & (slots || source.slot_flags)) + update_user(wearer) + +/datum/component/adjust_fishing_difficulty/proc/on_dropped(obj/item/source, mob/living/dropper) + SIGNAL_HANDLER + update_user(dropper, TRUE) + +/datum/component/adjust_fishing_difficulty/proc/update_user(mob/living/user, removing = FALSE) + var/datum/fishing_challenge/challenge = GLOB.fishing_challenges_by_user[user] + if(removing) + UnregisterSignal(user, COMSIG_MOB_BEGIN_FISHING) + if(challenge) + UnregisterSignal(challenge, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY) + else + RegisterSignal(user, COMSIG_MOB_BEGIN_FISHING, PROC_REF(on_minigame_started)) + if(challenge) + RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, PROC_REF(adjust_difficulty)) + challenge?.update_difficulty() + +/datum/component/adjust_fishing_difficulty/proc/on_minigame_started(mob/living/source, datum/fishing_challenge/challenge) + SIGNAL_HANDLER + RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, PROC_REF(adjust_difficulty), TRUE) + +/datum/component/adjust_fishing_difficulty/proc/adjust_difficulty(datum/fishing_challenge/challenge, reward_path, obj/item/fishing_rod/rod, mob/living/user, list/holder) + SIGNAL_HANDLER + holder[1] += modifier diff --git a/code/datums/components/appearance_on_aggro.dm b/code/datums/components/appearance_on_aggro.dm index 8c0df88e6fdbc..143c0b260cdbd 100644 --- a/code/datums/components/appearance_on_aggro.dm +++ b/code/datums/components/appearance_on_aggro.dm @@ -13,8 +13,6 @@ var/alpha_on_aggro /// visibility of our icon when deaggroed var/alpha_on_deaggro - /// do we currently have a target - var/atom/current_target /datum/component/appearance_on_aggro/Initialize(aggro_state, overlay_icon, overlay_state, alpha_on_aggro, alpha_on_deaggro) if (!isliving(parent)) @@ -27,7 +25,7 @@ /datum/component/appearance_on_aggro/RegisterWithParent() RegisterSignal(parent, COMSIG_AI_BLACKBOARD_KEY_SET(target_key), PROC_REF(on_set_target)) - RegisterSignal(parent, COMSIG_AI_BLACKBOARD_KEY_CLEARED(target_key), PROC_REF(on_clear_target)) + RegisterSignals(parent, list(COMSIG_AI_BLACKBOARD_KEY_CLEARED(target_key), COMSIG_LIVING_DEATH, COMSIG_MOB_LOGIN), PROC_REF(revert_appearance)) if (!isnull(aggro_state)) RegisterSignal(parent, COMSIG_ATOM_UPDATE_ICON_STATE, PROC_REF(on_icon_state_updated)) if (!isnull(aggro_overlay)) @@ -35,32 +33,31 @@ /datum/component/appearance_on_aggro/UnregisterFromParent() . = ..() - UnregisterSignal(parent, list(COMSIG_AI_BLACKBOARD_KEY_SET(target_key), COMSIG_AI_BLACKBOARD_KEY_CLEARED(target_key))) + UnregisterSignal(parent, list( + COMSIG_AI_BLACKBOARD_KEY_SET(target_key), + COMSIG_AI_BLACKBOARD_KEY_CLEARED(target_key), + COMSIG_LIVING_DEATH, + COMSIG_MOB_LOGIN, + )) /datum/component/appearance_on_aggro/proc/on_set_target(mob/living/source) SIGNAL_HANDLER - var/atom/target = source.ai_controller.blackboard[target_key] + var/atom/target = source.ai_controller?.blackboard[target_key] if (QDELETED(target)) return - current_target = target if (!isnull(aggro_overlay) || !isnull(aggro_state)) source.update_appearance(UPDATE_ICON) if (!isnull(alpha_on_aggro)) animate(source, alpha = alpha_on_aggro, time = 2 SECONDS) /datum/component/appearance_on_aggro/Destroy() - if (!isnull(current_target)) - revert_appearance(parent) - return ..() - -/datum/component/appearance_on_aggro/proc/on_clear_target(atom/source) - SIGNAL_HANDLER revert_appearance(parent) + return ..() /datum/component/appearance_on_aggro/proc/revert_appearance(mob/living/source) - current_target = null + SIGNAL_HANDLER if (!isnull(aggro_overlay) || !isnull(aggro_state)) source.update_appearance(UPDATE_ICON) if (!isnull(alpha_on_deaggro)) @@ -70,11 +67,11 @@ SIGNAL_HANDLER if (source.stat == DEAD) return - source.icon_state = isnull(current_target) ? initial(source.icon_state) : aggro_state + source.icon_state = source.ai_controller?.blackboard_key_exists(target_key) ? aggro_state : initial(source.icon_state) -/datum/component/appearance_on_aggro/proc/on_overlays_updated(atom/source, list/overlays) +/datum/component/appearance_on_aggro/proc/on_overlays_updated(mob/living/basic/source, list/overlays) SIGNAL_HANDLER - if (isnull(current_target)) + if(!(source.ai_controller?.blackboard_key_exists(target_key))) return overlays += aggro_overlay diff --git a/code/datums/components/aquarium_content.dm b/code/datums/components/aquarium_content.dm index 21c6c75ca169a..d956b39928a47 100644 --- a/code/datums/components/aquarium_content.dm +++ b/code/datums/components/aquarium_content.dm @@ -15,59 +15,23 @@ var/obj/structure/aquarium/current_aquarium //This is visual effect holder that will end up in aquarium's vis_contents - var/obj/effect/vc_obj - - /// Base px offset of the visual object in current aquarium aka current base position - var/base_px = 0 - /// Base px offset of the visual object in current aquarium aka current base position - var/base_py = 0 - //Current layer for the visual object - var/base_layer - + var/obj/effect/aquarium/vc_obj /** - * Fish sprite how to: - * Need to be centered on 16,16 in the dmi and facing left by default. - * sprite_height/sprite_width is the size it will have in aquarium and used to control animation boundaries. - * source_height/source_width is the size of the original icon (ideally only the non-empty parts) + * Fish sprite how to: + * The aquarium icon state needs to be centered on 16,16 in the dmi and facing left by default. + * sprite_width/sprite_height are the sizes it will have in aquarium and used to control animation boundaries. + * Ideally these two vars represent the size of the aquarium icon state, but they can be one or two units shorter + * to give more room for the visual to float around inside the aquarium, since the aquarium tank frame overlay will likely + * cover the extra pixels anyway. */ - - /// Icon used for in aquarium sprite - var/icon = 'icons/obj/aquarium/fish.dmi' - /// If this is set this icon state will be used for the holder while icon_state will only be used for item/catalog. Transformation from source_width/height WON'T be applied. - var/icon_state - /// Applied to vc object only for use with greyscaled icons. - var/aquarium_vc_color - /// Transformation applied to the visual holder - used when scaled down sprites are used as in aquarium visual - var/matrix/base_transform - - /// How the thing will be layered - var/layer_mode = AQUARIUM_LAYER_MODE_AUTO - - /// If the starting position is randomised within bounds when inserted into aquarium. - var/randomize_position = FALSE - - //Target sprite size for path/position calculations. - var/sprite_height = 3 - var/sprite_width = 3 - - //This is the size of the source sprite. This will be used to calculate scale down factor. - var/source_width = 32 - var/source_height = 32 - /// Currently playing animation var/current_animation /// Does this behviour need additional processing in aquarium, will be added to SSobj processing on insertion var/processing = FALSE - /// TODO: Change this into trait checked on aquarium insertion - var/unique = FALSE - - /// Proc used to retrieve current animation state from the parent, optional - var/animation_getter - /// Signals of the parent that will trigger animation update var/animation_update_signals @@ -77,58 +41,27 @@ /// The original value of the beauty this component had when initialized var/original_beauty -/datum/component/aquarium_content/Initialize(icon, animation_getter, animation_update_signals, beauty) +/datum/component/aquarium_content/Initialize(animation_update_signals, beauty) if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE - src.animation_getter = animation_getter src.animation_update_signals = animation_update_signals src.beauty = original_beauty = beauty if(animation_update_signals) RegisterSignals(parent, animation_update_signals, PROC_REF(generate_animation)) - if(istype(parent,/obj/item/fish)) - InitializeFromFish() - else if(istype(parent,/obj/item/aquarium_prop)) - InitializeFromProp() - else - InitializeOther() - ADD_TRAIT(parent, TRAIT_FISH_CASE_COMPATIBILE, REF(src)) RegisterSignal(parent, COMSIG_TRY_INSERTING_IN_AQUARIUM, PROC_REF(is_ready_to_insert)) RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(enter_aquarium)) + if(isfish(parent)) + RegisterSignal(parent, COMSIG_FISH_STATUS_CHANGED, PROC_REF(on_fish_status_changed)) + //If component is added to something already in aquarium at the time initialize it properly. var/atom/movable/movable_parent = parent if(istype(movable_parent.loc, /obj/structure/aquarium)) on_inserted(movable_parent.loc) -/// Sets visuals properties for fish -/datum/component/aquarium_content/proc/InitializeFromFish() - var/obj/item/fish/fish = parent - - icon = fish.icon - sprite_height = fish.sprite_height - sprite_width = fish.sprite_width - aquarium_vc_color = fish.aquarium_vc_color - - if(fish.dedicated_in_aquarium_icon_state) - if(fish.dedicated_in_aquarium_icon) - icon = fish.dedicated_in_aquarium_icon - icon_state = fish.dedicated_in_aquarium_icon_state - base_transform = matrix() - else - icon_state = fish.icon_state - var/matrix/matrix = matrix() - var/x_scale = fish.sprite_width / fish.source_width - var/y_scale = fish.sprite_height / fish.source_height - matrix.Scale(x_scale, y_scale) - base_transform = matrix - - randomize_position = TRUE - - RegisterSignal(fish, COMSIG_FISH_STATUS_CHANGED, PROC_REF(on_fish_status_changed)) - /datum/component/aquarium_content/proc/on_fish_status_changed(obj/item/fish/source) SIGNAL_HANDLER var/old_beauty = beauty @@ -139,31 +72,6 @@ change_aquarium_beauty(beauty - old_beauty) generate_animation() -/// Sets visuals properties for fish -/datum/component/aquarium_content/proc/InitializeFromProp() - var/obj/item/aquarium_prop/prop = parent - - icon = prop.icon - icon_state = prop.icon_state - layer_mode = prop.layer_mode - sprite_height = 32 - sprite_width = 32 - base_transform = matrix() - - unique = TRUE - -/// Mostly for admin abuse -/datum/component/aquarium_content/proc/InitializeOther() - sprite_width = 8 - sprite_height = 8 - - var/matrix/matrix = matrix() - var/x_scale = sprite_width / 32 - var/y_scale = sprite_height / 32 - matrix.Scale(x_scale, y_scale) - base_transform = matrix - - /datum/component/aquarium_content/PreTransfer() . = ..() REMOVE_TRAIT(parent, TRAIT_FISH_CASE_COMPATIBILE, REF(src)) @@ -182,12 +90,11 @@ /datum/component/aquarium_content/proc/is_ready_to_insert(datum/source, obj/structure/aquarium/aquarium) SIGNAL_HANDLER - //This is kinda awful but we're unaware of other fish - if(unique) - for(var/atom/movable/fish_or_prop in aquarium) - if(fish_or_prop == parent) + if(HAS_TRAIT(parent, TRAIT_UNIQUE_AQUARIUM_CONTENT)) + for(var/atom/movable/content as anything in aquarium) + if(content == parent) continue - if(fish_or_prop.type == parent.type) + if(content.type == parent.type) return COMSIG_CANNOT_INSERT_IN_AQUARIUM return COMSIG_CAN_INSERT_IN_AQUARIUM @@ -202,7 +109,7 @@ //If we don't have vc object yet build it if(!vc_obj) - vc_obj = generate_base_vc() + generate_base_vc() //Set default position and layer set_vc_base_position() @@ -237,108 +144,28 @@ SIGNAL_HANDLER generate_animation() +///Sends a signal to the parent to get them to update the aquarium animation of the visual object +/datum/component/aquarium_content/proc/generate_animation(reset=FALSE) + if(!current_aquarium) + return + SEND_SIGNAL(parent, COMSIG_AQUARIUM_CONTENT_DO_ANIMATION, reset ? null : current_animation, current_aquarium, vc_obj) + /datum/component/aquarium_content/proc/remove_visual_from_aquarium() current_aquarium.vis_contents -= vc_obj - if(base_layer) - current_aquarium.free_layer(base_layer) + if(vc_obj.layer) + current_aquarium.free_layer(vc_obj.layer) /// Generates common visual object, propeties that don't depend on aquarium surface /datum/component/aquarium_content/proc/generate_base_vc() - var/obj/effect/visual = new - apply_appearance(visual) - visual.vis_flags |= VIS_INHERIT_ID | VIS_INHERIT_PLANE //plane so it shows properly in containers on inventory ui for handheld cases - return visual - -/// Applies icon,color and base scaling to our visual holder -/datum/component/aquarium_content/proc/apply_appearance(obj/effect/holder) - holder.icon = icon - holder.icon_state = icon_state - holder.transform = matrix(base_transform) - if(aquarium_vc_color) - holder.color = aquarium_vc_color - - -/// Actually animates the vc holder -/datum/component/aquarium_content/proc/generate_animation(reset=FALSE) - if(!current_aquarium) - return - var/next_animation = animation_getter ? call(parent,animation_getter)() : null - if(current_animation == next_animation && !reset) - return - current_animation = next_animation - switch(current_animation) - if(AQUARIUM_ANIMATION_FISH_SWIM) - swim_animation() - return - if(AQUARIUM_ANIMATION_FISH_DEAD) - dead_animation() - return - - -/// Create looping random path animation, pixel offsets parameters include offsets already -/datum/component/aquarium_content/proc/swim_animation() - var/avg_width = round(sprite_width / 2) - var/avg_height = round(sprite_height / 2) - - var/list/aq_properties = current_aquarium.get_surface_properties() - var/px_min = aq_properties[AQUARIUM_PROPERTIES_PX_MIN] + avg_width - 16 - var/px_max = aq_properties[AQUARIUM_PROPERTIES_PX_MAX] - avg_width - 16 - var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16 - var/py_max = aq_properties[AQUARIUM_PROPERTIES_PY_MAX] - avg_width - 16 - - var/origin_x = base_px - var/origin_y = base_py - var/prev_x = origin_x - var/prev_y = origin_y - animate(vc_obj, pixel_x = origin_x, time = 0, loop = -1) //Just to start the animation - var/move_number = rand(3, 5) //maybe unhardcode this - for(var/i in 1 to move_number) - //If it's last movement, move back to start otherwise move to some random point - var/target_x = i == move_number ? origin_x : rand(px_min,px_max) //could do with enforcing minimal delta for prettier zigzags - var/target_y = i == move_number ? origin_y : rand(py_min,py_max) - var/dx = prev_x - target_x - var/dy = prev_y - target_y - prev_x = target_x - prev_y = target_y - var/dist = abs(dx) + abs(dy) - var/eyeballed_time = dist * 2 //2ds per px - //Face the direction we're going - var/matrix/dir_mx = matrix(base_transform) - if(dx <= 0) //assuming default sprite is facing left here - dir_mx.Scale(-1, 1) - animate(transform = dir_mx, time = 0, loop = -1) - animate(pixel_x = target_x, pixel_y = target_y, time = eyeballed_time, loop = -1) - -/datum/component/aquarium_content/proc/dead_animation() - //Set base_py to lowest possible value - var/avg_height = round(sprite_height / 2) - var/list/aq_properties = current_aquarium.get_surface_properties() - var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16 - base_py = py_min - animate(vc_obj, pixel_y = py_min, time = 1) //flop to bottom and end current animation. + vc_obj = new + vc_obj.vis_flags |= VIS_INHERIT_ID | VIS_INHERIT_PLANE //plane so it shows properly in containers on inventory ui for handheld cases + SEND_SIGNAL(parent, COMSIG_AQUARIUM_CONTENT_GENERATE_APPEARANCE, vc_obj) /datum/component/aquarium_content/proc/set_vc_base_position() - if(randomize_position) - randomize_base_position() - if(base_layer) - current_aquarium.free_layer(base_layer) - base_layer = current_aquarium.request_layer(layer_mode) - vc_obj.layer = base_layer - -/datum/component/aquarium_content/proc/randomize_base_position() - var/list/aq_properties = current_aquarium.get_surface_properties() - var/avg_width = round(sprite_width / 2) - var/avg_height = round(sprite_height / 2) - var/px_min = aq_properties[AQUARIUM_PROPERTIES_PX_MIN] + avg_width - 16 - var/px_max = aq_properties[AQUARIUM_PROPERTIES_PX_MAX] - avg_width - 16 - var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16 - var/py_max = aq_properties[AQUARIUM_PROPERTIES_PY_MAX] - avg_width - 16 - - base_px = rand(px_min,px_max) - base_py = rand(py_min,py_max) - - vc_obj.pixel_x = base_px - vc_obj.pixel_y = base_py + SEND_SIGNAL(parent, AQUARIUM_CONTENT_RANDOMIZE_POSITION, current_aquarium, vc_obj) + if(vc_obj.layer) + current_aquarium.free_layer(vc_obj.layer) + vc_obj.layer = current_aquarium.request_layer(vc_obj.layer_mode) /datum/component/aquarium_content/proc/on_removed(obj/structure/aquarium/source, atom/movable/gone, direction) SIGNAL_HANDLER @@ -352,6 +179,16 @@ remove_visual_from_aquarium() current_aquarium = null +///The visual overlay of the aquarium content. It holds a few vars that we can modity them during signals. +/obj/effect/aquarium + layer = 0 //set on set_vc_base_position + /// Base px offset of the visual object in current aquarium aka current base position + var/base_px = 0 + /// Base px offset of the visual object in current aquarium aka current base position + var/base_py = 0 + /// How the visual will be layered + var/layer_mode = AQUARIUM_LAYER_MODE_AUTO + #undef DEAD_FISH_BEAUTY #undef MIN_DEAD_FISH_BEAUTY #undef MAX_DEAD_FISH_BEAUTY diff --git a/code/datums/components/area_based_godmode.dm b/code/datums/components/area_based_godmode.dm index 4f03ae57794c8..b9447efbafbf8 100644 --- a/code/datums/components/area_based_godmode.dm +++ b/code/datums/components/area_based_godmode.dm @@ -34,8 +34,6 @@ var/mob/mob_target = parent if(!istype(mob_target)) return COMPONENT_INCOMPATIBLE - if(initial(mob_target.status_flags) & GODMODE) - return COMPONENT_INCOMPATIBLE sources_to_area_type = list() src.gain_message = gain_message @@ -102,11 +100,11 @@ /datum/component/area_based_godmode/proc/check_area(mob/source) SIGNAL_HANDLER - var/has_godmode = source.status_flags & GODMODE + var/has_godmode = HAS_TRAIT(source, TRAIT_GODMODE) if(!check_in_valid_area(source)) if(has_godmode) to_chat(source, lose_message) - source.status_flags ^= GODMODE + REMOVE_TRAIT(source, TRAIT_GODMODE, REF(src)) check_area_cached_state = FALSE return @@ -115,7 +113,7 @@ return to_chat(source, gain_message) - source.status_flags ^= GODMODE + ADD_TRAIT(source, TRAIT_GODMODE, REF(src)) #undef MAP_AREA_TYPE #undef MAP_ALLOW_AREA_SUBTYPES diff --git a/code/datums/components/bakeable.dm b/code/datums/components/bakeable.dm index afc71936f1b92..93e96f65d58fc 100644 --- a/code/datums/components/bakeable.dm +++ b/code/datums/components/bakeable.dm @@ -93,11 +93,11 @@ var/list/asomnia_hadders = list() for(var/mob/smeller in get_hearers_in_view(DEFAULT_MESSAGE_RANGE, used_oven)) if(HAS_TRAIT(smeller, TRAIT_ANOSMIA)) - asomnia_hadders += smeller + asomnia_hadders += smeller if(positive_result) used_oven.visible_message( - span_notice("You smell something great coming from [used_oven]."), + span_notice("You smell something great coming from [used_oven]."), blind_message = span_notice("You smell something great..."), ignored_mobs = asomnia_hadders, ) diff --git a/code/datums/components/boomerang.dm b/code/datums/components/boomerang.dm index 23dd63d146712..954e752da1ea1 100644 --- a/code/datums/components/boomerang.dm +++ b/code/datums/components/boomerang.dm @@ -60,12 +60,11 @@ * * hit_atom: The atom that has been hit by the boomerang component. * * init_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_hit_throw(datum/source, atom/hit_atom, datum/thrownthing/init_throwing_datum) +/datum/component/boomerang/proc/return_hit_throw(datum/source, atom/hit_atom, datum/thrownthing/init_throwing_datum, caught) SIGNAL_HANDLER - if (!COOLDOWN_FINISHED(src, last_boomerang_throw)) + if (!COOLDOWN_FINISHED(src, last_boomerang_throw) || caught) return - var/obj/item/true_parent = parent - aerodynamic_swing(init_throwing_datum, true_parent) + aerodynamic_swing(init_throwing_datum, parent) /** * Proc that triggers when the thrown boomerang does not hit a target. diff --git a/code/datums/components/callouts.dm b/code/datums/components/callouts.dm index 98d489cc915a9..52a3e007905c3 100644 --- a/code/datums/components/callouts.dm +++ b/code/datums/components/callouts.dm @@ -136,7 +136,7 @@ color = colorize_string(creator.GetVoice(), 2, 0.9) update_appearance() var/turf/target_loc = get_turf(target) - animate(src, pixel_x = (target_loc.x - loc.x) * world.icon_size + target.pixel_x, pixel_y = (target_loc.y - loc.y) * world.icon_size + target.pixel_y, time = 0.2 SECONDS, easing = EASE_OUT) + animate(src, pixel_x = (target_loc.x - loc.x) * ICON_SIZE_X + target.pixel_x, pixel_y = (target_loc.y - loc.y) * ICON_SIZE_Y + target.pixel_y, time = 0.2 SECONDS, easing = EASE_OUT) /datum/callout_option var/name = "ERROR" diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 43d7201b1e469..c1bdeede088ca 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -14,7 +14,7 @@ /obj/effect/constructing_effect, /obj/effect/dummy/phased_mob, /obj/effect/ebeam, - /obj/effect/fishing_lure, + /obj/effect/fishing_float, /obj/effect/hotspot, /obj/effect/landmark, /obj/effect/light_emitter/tendril, @@ -252,13 +252,46 @@ GLOBAL_LIST_EMPTY(chasm_fallen_mobs) . = ..() if(isliving(arrived)) RegisterSignal(arrived, COMSIG_LIVING_REVIVE, PROC_REF(on_revive)) - GLOB.chasm_fallen_mobs += arrived + LAZYADD(GLOB.chasm_fallen_mobs[get_chasm_category(loc)], arrived) /obj/effect/abstract/chasm_storage/Exited(atom/movable/gone) . = ..() if(isliving(gone)) UnregisterSignal(gone, COMSIG_LIVING_REVIVE) - GLOB.chasm_fallen_mobs -= gone + LAZYREMOVE(GLOB.chasm_fallen_mobs[get_chasm_category(loc)], gone) + +/obj/effect/abstract/chasm_storage/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) + . = ..() + var/old_cat = get_chasm_category(old_turf) + var/new_cat = get_chasm_category(new_turf) + var/list/mobs = list() + for(var/mob/fallen in src) + mobs += fallen + LAZYREMOVE(GLOB.chasm_fallen_mobs[old_cat], mobs) + LAZYADD(GLOB.chasm_fallen_mobs[new_cat], mobs) + +/** + * Returns a key to store, remove and access fallen mobs depending on the z-level. + * This stops rescuing people from places that are waaaaaaaay too far-fetched. + */ +/proc/get_chasm_category(turf/turf) + var/z_level = turf?.z + var/area/area = get_area(turf) + if(istype(area, /area/shuttle)) //shuttle move between z-levels, so they're a special case. + return area + + if(is_away_level(z_level)) + return ZTRAIT_AWAY + if(is_mining_level(z_level)) + return ZTRAIT_MINING + if(is_station_level(z_level)) + return ZTRAIT_STATION + if(is_centcom_level(z_level)) + return ZTRAIT_CENTCOM + if(is_reserved_level(z_level)) + return ZTRAIT_RESERVED + + return ZTRAIT_SPACE_RUINS #define CHASM_TRAIT "chasm trait" /** diff --git a/code/datums/components/chuunibyou.dm b/code/datums/components/chuunibyou.dm index 4e06f0fd47486..5373b3f798754 100644 --- a/code/datums/components/chuunibyou.dm +++ b/code/datums/components/chuunibyou.dm @@ -64,14 +64,14 @@ /datum/component/chuunibyou/proc/on_try_speech(datum/source, message, ignore_spam, forced) SIGNAL_HANDLER - if(casting_spell) + if(casting_spell && !HAS_TRAIT(src, TRAIT_MUTE)) return COMPONENT_IGNORE_CAN_SPEAK ///signal sent when the parent casts a spell that has a projectile /datum/component/chuunibyou/proc/on_spell_projectile(mob/living/source, datum/action/cooldown/spell/spell, atom/cast_on, obj/projectile/to_fire) SIGNAL_HANDLER - playsound(to_fire,'sound/magic/staff_change.ogg', 75, TRUE) + playsound(to_fire,'sound/effects/magic/staff_change.ogg', 75, TRUE) to_fire.color = "#f825f8" to_fire.name = "chuuni-[to_fire.name]" to_fire.set_light(2, 2, LIGHT_COLOR_PINK, l_on = TRUE) @@ -101,7 +101,7 @@ COOLDOWN_START(src, heal_cooldown, CHUUNIBYOU_COOLDOWN_TIME) source.heal_overall_damage(heal_amount) - playsound(source, 'sound/magic/staff_healing.ogg', 30) + playsound(source, 'sound/effects/magic/staff_healing.ogg', 30) to_chat(source, span_danger("You feel slightly healed by your chuuni powers.")) /datum/component/chuunibyou/no_healing diff --git a/code/datums/components/cleaner.dm b/code/datums/components/cleaner.dm index 3001fde9837fb..75319a7133f4d 100644 --- a/code/datums/components/cleaner.dm +++ b/code/datums/components/cleaner.dm @@ -62,6 +62,9 @@ /datum/component/cleaner/proc/on_interaction(datum/source, mob/living/user, atom/target, list/modifiers) SIGNAL_HANDLER + if(isitem(source) && SHOULD_SKIP_INTERACTION(target, source, user)) + return NONE + // By default, give XP var/give_xp = TRUE if(pre_clean_callback) diff --git a/code/datums/components/connect_mob_behalf.dm b/code/datums/components/connect_mob_behalf.dm index b8aa014f81010..18ab0eebed8c8 100644 --- a/code/datums/components/connect_mob_behalf.dm +++ b/code/datums/components/connect_mob_behalf.dm @@ -1,6 +1,6 @@ /// This component behaves similar to connect_loc_behalf, but working off clients and mobs instead of loc /// To be clear, we hook into a signal on a tracked client's mob -/// We retain the ability to react to that signal on a seperate listener, which makes this quite powerful +/// We retain the ability to react to that signal on a separate listener, which makes this quite powerful /datum/component/connect_mob_behalf dupe_mode = COMPONENT_DUPE_UNIQUE diff --git a/code/datums/components/connect_range.dm b/code/datums/components/connect_range.dm index d3407f4671456..af8ec247eb262 100644 --- a/code/datums/components/connect_range.dm +++ b/code/datums/components/connect_range.dm @@ -1,6 +1,6 @@ /** * This component behaves similar to connect_loc_behalf but for all turfs in range, hooking into a signal on each of them. - * Just like connect_loc_behalf, It can react to that signal on behalf of a seperate listener. + * Just like connect_loc_behalf, It can react to that signal on behalf of a separate listener. * Good for components, though it carries some overhead. Can't be an element as that may lead to bugs. */ /datum/component/connect_range diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 64f58ce771505..de72d7afb352c 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -21,6 +21,8 @@ var/display_craftable_only = FALSE var/display_compact = FALSE var/forced_mode = FALSE + /// crafting flags we ignore when considering a recipe + var/ignored_flags = NONE /* This is what procs do: get_environment - gets a list of things accessable for crafting by user @@ -205,16 +207,16 @@ if(!check_tools(crafter, recipe, contents)) return ", missing tool." + var/considered_flags = recipe.crafting_flags & ~(ignored_flags) - - if((recipe.crafting_flags & CRAFT_ONE_PER_TURF) && (locate(recipe.result) in dest_turf)) + if((considered_flags & CRAFT_ONE_PER_TURF) && (locate(recipe.result) in dest_turf)) return ", already one here!" - if(recipe.crafting_flags & CRAFT_CHECK_DIRECTION) - if(!valid_build_direction(dest_turf, crafter.dir, is_fulltile = (recipe.crafting_flags & CRAFT_IS_FULLTILE))) + if(considered_flags & CRAFT_CHECK_DIRECTION) + if(!valid_build_direction(dest_turf, crafter.dir, is_fulltile = (considered_flags & CRAFT_IS_FULLTILE))) return ", won't fit here!" - if(recipe.crafting_flags & CRAFT_ON_SOLID_GROUND) + if(considered_flags & CRAFT_ON_SOLID_GROUND) if(isclosedturf(dest_turf)) return ", cannot be made on a wall!" @@ -222,7 +224,7 @@ if(!locate(/obj/structure/thermoplastic) in dest_turf) // for tram construction return ", must be made on solid ground!" - if(recipe.crafting_flags & CRAFT_CHECK_DENSITY) + if(considered_flags & CRAFT_CHECK_DENSITY) for(var/obj/object in dest_turf) if(object.density && !(object.obj_flags & IGNORE_DENSITY) || object.obj_flags & BLOCKS_CONSTRUCTION) return ", something is in the way!" @@ -274,12 +276,14 @@ qdel(thing) if(crafter_mob) crafter_mob.mind.adjust_experience(/datum/skill/construction, 5) - //SKYRAT EDIT STOP: Construction Skill + //SKYRAT EDIT END 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) + if(!ispath(recipe.result, /obj/item/reagent_containers) && result.reagents) + if(recipe.crafting_flags & CRAFT_CLEARS_REAGENTS) + result.reagents.clear_reagents() + if(recipe.crafting_flags & CRAFT_TRANSFERS_REAGENTS) + holder.trans_to(result.reagents, holder.total_volume, no_react = TRUE) parts -= holder qdel(holder) result.CheckParts(parts, recipe) @@ -317,7 +321,6 @@ var/datum/reagents/holder var/list/surroundings var/list/Deletion = list() - var/data var/amt var/list/requirements = list() if(R.reqs) @@ -354,7 +357,6 @@ RC.reagents.trans_to(holder, reagent_volume, target_id = path_key, no_react = TRUE) surroundings -= RC 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) @@ -368,7 +370,7 @@ SD = new S.type() Deletion += SD S.use(amt) - SD = locate(S.type) in Deletion + SD = SD || locate(S.type) in Deletion // SD might be already set here, no sense in searching for it again SD.amount += amt continue main_loop else @@ -376,9 +378,9 @@ if(!locate(S.type) in Deletion) Deletion += S else - data = S.amount - S = locate(S.type) in Deletion - S.add(data) + SD = SD || locate(S.type) in Deletion + SD.add(S.amount) // add the amount to our tally stack, SD + qdel(S) // We can just delete it straight away as it's going to be fully consumed anyway, saving some overhead from calling use() surroundings -= S else var/atom/movable/I @@ -546,7 +548,7 @@ return TRUE -/datum/component/personal_crafting/ui_act(action, params) +/datum/component/personal_crafting/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -712,3 +714,20 @@ if(recipe == potential_recipe) return TRUE return FALSE + +/datum/component/personal_crafting/machine + ignored_flags = CRAFT_CHECK_DENSITY + +/datum/component/personal_crafting/machine/get_environment(atom/crafter, list/blacklist = null, radius_range = 1) + . = list() + for(var/atom/movable/content in crafter.contents) + if((content.flags_1 & HOLOGRAM_1) || (blacklist && (content.type in blacklist))) + continue + if(isitem(content)) + var/obj/item/item = content + if(item.item_flags & ABSTRACT) //let's not tempt fate, shall we? + continue + . += content + +/datum/component/personal_crafting/machine/check_tools(atom/source, datum/crafting_recipe/recipe, list/surroundings) + return TRUE diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm index 98595647ea258..9ed5d8b312a1a 100644 --- a/code/datums/components/crafting/equipment.dm +++ b/code/datums/components/crafting/equipment.dm @@ -285,3 +285,15 @@ category = CAT_EQUIPMENT tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER) */ // SKYRAT EDIT REMOVAL END + +/datum/crafting_recipe/tether_anchor + name = "Tether Anchor" + result = /obj/item/tether_anchor + reqs = list( + /obj/item/stack/sheet/iron = 5, + /obj/item/stack/rods = 2, + /obj/item/stack/cable_coil = 15 + ) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WRENCH) + time = 5 SECONDS + category = CAT_EQUIPMENT diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index 174c0226a423e..e69d535a58b30 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -300,6 +300,22 @@ category = CAT_WEAPON_RANGED crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED +/datum/crafting_recipe/pipe_organ_gun + name = "Pipe Organ Gun" + tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER) + result = /obj/structure/mounted_gun/pipe + reqs = list( + /obj/item/pipe = 8, + /obj/item/stack/sheet/mineral/wood = 15, + /obj/item/stack/sheet/iron = 10, + /obj/item/storage/toolbox = 1, + /obj/item/stack/rods = 10, + /obj/item/assembly/igniter = 2, + ) + time = 15 SECONDS + category = CAT_WEAPON_RANGED + crafting_flags = CRAFT_CHECK_DENSITY + /datum/crafting_recipe/trash_cannon name = "Trash Cannon" tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER) @@ -323,8 +339,7 @@ /obj/item/stack/rods = 4, /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/capacitor = 1, - /obj/item/clothing/glasses/regular = 1, - /obj/item/reagent_containers/cup/glass/drinkingglass = 1, + /obj/item/reagent_containers/cup/glass/drinkingglass = 2, ) tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) time = 10 SECONDS diff --git a/code/datums/components/crafting/structures.dm b/code/datums/components/crafting/structures.dm index c4a9b48ec36b6..090ec31ce226f 100644 --- a/code/datums/components/crafting/structures.dm +++ b/code/datums/components/crafting/structures.dm @@ -74,3 +74,14 @@ ) category = CAT_STRUCTURE crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED + +/datum/crafting_recipe/manucrate + name = "Manufacturing Storage Unit" + result = /obj/machinery/power/manufacturing/storagebox + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER) + time = 6 SECONDS + reqs = list( + /obj/item/stack/sheet/iron = 10, + ) + category = CAT_STRUCTURE + crafting_flags = CRAFT_CHECK_DENSITY diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm index 3c498f74416bd..dc30d31e2d424 100644 --- a/code/datums/components/crafting/tailoring.dm +++ b/code/datums/components/crafting/tailoring.dm @@ -511,6 +511,430 @@ category = CAT_CLOTHING +/datum/crafting_recipe/sturdy_shako + name = "Sturdy Shako" + result = /obj/item/clothing/head/hats/hos/shako + tool_behaviors = list(TOOL_WELDER, TOOL_KNIFE) + time = 5 SECONDS + reqs = list( + /obj/item/clothing/head/hats/hos/cap = 1, + /obj/item/stack/sheet/plasteel = 2, //Stout shako for two refined + /obj/item/stack/sheet/mineral/gold = 2, + ) + + category = CAT_CLOTHING + +/datum/crafting_recipe/atmospherics_gas_mask + name = "atmospherics gas mask" + result = /obj/item/clothing/mask/gas/atmos + tool_behaviors = list(TOOL_WELDER) + time = 8 SECONDS + reqs = list( + /obj/item/stack/sheet/mineral/metal_hydrogen = 1, + /obj/item/stack/sheet/mineral/zaukerite = 1, + ) + + category = CAT_CLOTHING + +/datum/crafting_recipe/paper_hat + name = "Paper Hat" + result = /obj/item/clothing/head/costume/paper_hat + time = 5 SECONDS + reqs = list( + /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 + +/datum/crafting_recipe/balloon_helmet + result = /obj/item/clothing/head/helmet/balloon + reqs = list( + /obj/item/toy/balloon/long = 6, + ) + time = 4 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_helmet/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE + +/datum/crafting_recipe/balloon_tophat + result = /obj/item/clothing/head/hats/tophat/balloon + reqs = list( + /obj/item/toy/balloon/long = 6, + ) + time = 4 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_tophat/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE + +/datum/crafting_recipe/balloon_vest + result = /obj/item/clothing/suit/armor/balloon_vest + reqs = list( + /obj/item/toy/balloon/long = 18, + ) + time = 8 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/balloon_vest/check_requirements(mob/user, list/collected_requirements) + . = ..() + if(HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) + return TRUE + +/datum/crafting_recipe/press_armor + name = "press armor vest" + result = /obj/item/clothing/suit/armor/vest/press + time = 2 SECONDS + tool_paths = list(/obj/item/clothing/accessory/press_badge) + reqs = list( + /obj/item/clothing/suit/armor/vest = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/press_helmet + name = "press helmet vest" + result = /obj/item/clothing/head/helmet/press + time = 2 SECONDS + tool_paths = list(/obj/item/clothing/accessory/press_badge) + reqs = list( + /obj/item/clothing/head/helmet/sec = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/press_vest + name = "press vest" + result = /obj/item/clothing/suit/hazardvest/press + time = 2 SECONDS + tool_paths = list(/obj/item/clothing/accessory/press_badge) + reqs = list( + /obj/item/clothing/suit/hazardvest = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/press_fedora + name = "press fedora" + result = /obj/item/clothing/head/fedora/beige/press + time = 2 SECONDS + tool_paths = list(/obj/item/clothing/accessory/press_badge) + reqs = list( + /obj/item/clothing/head/fedora/beige = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/prisonsuit + name = "Prisoner Uniform (Suit)" + result = /obj/item/clothing/under/rank/prisoner + reqs = list(/obj/item/stack/sheet/cloth = 3, /obj/item/stack/license_plates = 1) + time = 2 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/prisonskirt + name = "Prisoner Uniform (Skirt)" + result = /obj/item/clothing/under/rank/prisoner/skirt + reqs = list(/obj/item/stack/sheet/cloth = 3, /obj/item/stack/license_plates = 1) + time = 2 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/prisonshoes + name = "Orange Prison Shoes" + result = /obj/item/clothing/shoes/sneakers/orange + reqs = list(/obj/item/stack/sheet/cloth = 2, /obj/item/stack/license_plates = 1) + time = 1 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/tv_helmet + name = "Television Helmet" + result = /obj/item/clothing/head/costume/tv_head + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_CROWBAR) + reqs = list(/obj/item/wallframe/status_display = 1) + time = 2 SECONDS + category = CAT_CLOTHING + +/datum/crafting_recipe/lizardhat + name = "Lizard Cloche Hat" + result = /obj/item/clothing/head/costume/lizard + time = 1 SECONDS + reqs = list(/obj/item/organ/external/tail/lizard = 1) + category = CAT_CLOTHING + +/datum/crafting_recipe/lizardhat_alternate + name = "Lizard Cloche Hat" + result = /obj/item/clothing/head/costume/lizard + time = 1 SECONDS + reqs = list(/obj/item/stack/sheet/animalhide/lizard = 1) + category = CAT_CLOTHING + +/datum/crafting_recipe/kittyears + name = "Kitty Ears" + result = /obj/item/clothing/head/costume/kitty/genuine + time = 1 SECONDS + reqs = list( + /obj/item/organ/external/tail/cat = 1, + /obj/item/organ/internal/ears/cat = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/bonearmor + name = "Bone Armor" + result = /obj/item/clothing/suit/armor/bone + time = 3 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 6, + /obj/item/stack/sheet/animalhide/goliath_hide = 3, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/bonetalisman + name = "Bone Talisman" + result = /obj/item/clothing/accessory/talisman + time = 2 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/bonecodpiece + name = "Skull Codpiece" + result = /obj/item/clothing/accessory/skullcodpiece + time = 2 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/animalhide/goliath_hide = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/skilt + name = "Sinew Kilt" + result = /obj/item/clothing/accessory/skilt + time = 2 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 1, + /obj/item/stack/sheet/sinew = 2, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/wreath + name = "Watcher Wreath" + result = /obj/item/clothing/neck/wreath + time = 2 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 2, + /obj/item/stack/ore/diamond = 2, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/icewreath + name = "Icewing Wreath" + result = /obj/item/clothing/neck/wreath/icewing + time = 2 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 1, + /obj/item/stack/sheet/sinew = 1, + /obj/item/stack/ore/diamond = 2, + /obj/item/crusher_trophy/watcher_wing/ice_wing = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/bracers + name = "Bone Bracers" + result = /obj/item/clothing/gloves/bracer + time = 2 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/skullhelm + name = "Skull Helmet" + result = /obj/item/clothing/head/helmet/skull + time = 3 SECONDS + reqs = list(/obj/item/stack/sheet/bone = 4) + category = CAT_CLOTHING + +/datum/crafting_recipe/goliathcloak + name = "Goliath Cloak" + result = /obj/item/clothing/suit/hooded/cloak/goliath + time = 5 SECONDS + reqs = list( + /obj/item/stack/sheet/sinew = 3, + /obj/item/stack/sheet/animalhide/goliath_hide = 9, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/drakecloak + name = "Ash Drake Armour" + result = /obj/item/clothing/suit/hooded/cloak/drake + time = 4 SECONDS + reqs = list( + /obj/item/stack/sheet/sinew = 2, + /obj/item/drake_remains = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/drakeremains + name = "Drake Remains" + result = /obj/item/drake_remains + time = 1 SECONDS + reqs = list( + /obj/item/stack/sheet/bone = 10, + /obj/item/stack/sheet/animalhide/ashdrake = 5, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/godslayer + name = "Godslayer Armour" + result = /obj/item/clothing/suit/hooded/cloak/godslayer + time = 6 SECONDS + reqs = list( + /obj/item/ice_energy_crystal = 1, + /obj/item/wendigo_skull = 1, + /obj/item/clockwork_alloy = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/mummy + name = "Mummification Bandages (Mask)" + result = /obj/item/clothing/mask/mummy + time = 1 SECONDS + tool_paths = list(/obj/item/nullrod/egyptian) + reqs = list(/obj/item/stack/sheet/cloth = 2) + category = CAT_CLOTHING + +/datum/crafting_recipe/mummy/body + name = "Mummification Bandages (Body)" + result = /obj/item/clothing/under/costume/mummy + reqs = list(/obj/item/stack/sheet/cloth = 5) + +/datum/crafting_recipe/chaplain_hood + name = "Follower Hoodie" + result = /obj/item/clothing/suit/hooded/chaplain_hoodie + time = 1 SECONDS + tool_paths = list( + /obj/item/clothing/suit/hooded/chaplain_hoodie, + /obj/item/book/bible, + ) + reqs = list(/obj/item/stack/sheet/cloth = 4) + category = CAT_CLOTHING + +/datum/crafting_recipe/flower_garland + name = "Flower Garland" + result = /obj/item/clothing/head/costume/garland + time = 1 SECONDS + reqs = list( + /obj/item/food/grown/poppy = 4, + /obj/item/food/grown/harebell = 4, + /obj/item/food/grown/rose = 4, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/poppy_crown + name = "Poppy Crown" + result = /obj/item/clothing/head/costume/garland/poppy + time = 1 SECONDS + reqs = list( + /obj/item/food/grown/poppy = 5, + /obj/item/stack/cable_coil = 3, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/lily_crown + name = "Lily Crown" + result = /obj/item/clothing/head/costume/garland/lily + time = 1 SECONDS + reqs = list( + /obj/item/food/grown/poppy/lily = 5, + /obj/item/stack/cable_coil = 3, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/sunflower_crown + name = "Sunflower Crown" + result = /obj/item/clothing/head/costume/garland/sunflower + time = 1 SECONDS + reqs = list( + /obj/item/food/grown/sunflower = 5, + /obj/item/stack/cable_coil = 3, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/rainbow_bunch_crown + name = "Rainbow Flower Crown" + result = /obj/item/clothing/head/costume/garland/rainbowbunch + time = 1 SECONDS + reqs = list( + /obj/item/food/grown/rainbow_flower = 5, + /obj/item/stack/cable_coil = 3, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/pillow_suit + name = "pillow suit" + result = /obj/item/clothing/suit/pillow_suit + time = 2 SECONDS + reqs = list( + /obj/item/stack/sticky_tape = 10, + /obj/item/pillow = 5, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/pillow_hood + name = "pillow hood" + result = /obj/item/clothing/head/pillow_hood + tool_behaviors = list(TOOL_WIRECUTTER, TOOL_KNIFE) + time = 2 SECONDS + reqs = list( + /obj/item/stack/sticky_tape = 5, + /obj/item/pillow = 1, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/shark_costume + name = "shark costume" + result = /obj/item/clothing/suit/hooded/shark_costume + time = 2 SECONDS + reqs = list( + /obj/item/stack/sheet/leather = 5, + /obj/item/stack/sheet/animalhide/carp = 5, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/shork_costume + name = "shork costume" + result = /obj/item/clothing/suit/hooded/shork_costume + time = 2 SECONDS + tool_behaviors = list(TOOL_WIRECUTTER) + reqs = list( + /obj/item/clothing/suit/hooded/shark_costume = 1, + ) + category = CAT_CLOTHING + + /datum/crafting_recipe/sturdy_shako name = "Sturdy Shako" result = /obj/item/clothing/head/hats/hos/shako diff --git a/code/datums/components/crank_recharge.dm b/code/datums/components/crank_recharge.dm index b5196579f3c07..071c0524db2b8 100644 --- a/code/datums/components/crank_recharge.dm +++ b/code/datums/components/crank_recharge.dm @@ -14,9 +14,11 @@ var/charge_sound_cooldown_time /// Are we currently charging var/is_charging = FALSE + /// Should you be able to move while charging, use IGNORE_USER_LOC_CHANGE if you want to move and crank + var/charge_move = NONE COOLDOWN_DECLARE(charge_sound_cooldown) -/datum/component/crank_recharge/Initialize(charging_cell, spin_to_win = FALSE, charge_amount = 500, cooldown_time = 2 SECONDS, charge_sound = 'sound/weapons/laser_crank.ogg', charge_sound_cooldown_time = 1.8 SECONDS) +/datum/component/crank_recharge/Initialize(charging_cell, spin_to_win = FALSE, charge_amount = 500, cooldown_time = 2 SECONDS, charge_sound = 'sound/items/weapons/laser_crank.ogg', charge_sound_cooldown_time = 1.8 SECONDS, charge_move = NONE) . = ..() if(!isitem(parent)) return COMPONENT_INCOMPATIBLE @@ -28,7 +30,7 @@ src.cooldown_time = cooldown_time src.charge_sound = charge_sound src.charge_sound_cooldown_time = charge_sound_cooldown_time - + src.charge_move = charge_move /datum/component/crank_recharge/RegisterWithParent() . = ..() RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_self)) @@ -57,7 +59,7 @@ COOLDOWN_START(src, charge_sound_cooldown, charge_sound_cooldown_time) playsound(source, charge_sound, 40) source.balloon_alert(user, "charging...") - if(!do_after(user, cooldown_time, source, interaction_key = DOAFTER_SOURCE_CHARGE_CRANKRECHARGE)) + if(!do_after(user, cooldown_time, source, interaction_key = DOAFTER_SOURCE_CHARGE_CRANKRECHARGE, timed_action_flags = charge_move)) is_charging = FALSE return charging_cell.give(charge_amount) diff --git a/code/datums/components/cuff_n_stun.dm b/code/datums/components/cuff_n_stun.dm index d238a81f06a24..fda9618e93c14 100644 --- a/code/datums/components/cuff_n_stun.dm +++ b/code/datums/components/cuff_n_stun.dm @@ -22,7 +22,7 @@ COOLDOWN_DECLARE(stun_cooldown) /datum/component/stun_n_cuff/Initialize(list/blacklist_mobs = list(), - stun_sound = 'sound/weapons/egloves.ogg', + stun_sound = 'sound/items/weapons/egloves.ogg', stun_timer = 8 SECONDS, handcuff_timer = 4 SECONDS, stun_cooldown_timer = 10 SECONDS, @@ -75,7 +75,7 @@ living_parent.balloon_alert(human_target, "already cuffed!") return - playsound(parent, 'sound/weapons/cablecuff.ogg', 30, TRUE) + playsound(parent, 'sound/items/weapons/cablecuff.ogg', 30, TRUE) human_target.visible_message(span_danger("[parent] is trying to put zipties on [human_target]!"),\ span_danger("[parent] is trying to put zipties on you!")) diff --git a/code/datums/components/cult_ritual_item.dm b/code/datums/components/cult_ritual_item.dm index dedd30bda0ef5..554e3d611ba2d 100644 --- a/code/datums/components/cult_ritual_item.dm +++ b/code/datums/components/cult_ritual_item.dm @@ -176,7 +176,7 @@ * cultist - the mob doing the destroying */ /datum/component/cult_ritual_item/proc/do_destroy_girder(obj/structure/girder/cult/cult_girder, mob/living/cultist) - playsound(cult_girder, 'sound/weapons/resonator_blast.ogg', 40, TRUE, ignore_walls = FALSE) + playsound(cult_girder, 'sound/items/weapons/resonator_blast.ogg', 40, TRUE, ignore_walls = FALSE) cultist.visible_message( span_warning("[cultist] strikes [cult_girder] with [parent]!"), span_notice("You demolish [cult_girder].") @@ -320,7 +320,7 @@ if(scribe_failed) failed = CALLBACK(GLOBAL_PROC, scribe_failed) - SEND_SOUND(cultist, sound('sound/weapons/slice.ogg', 0, 1, 10)) + SEND_SOUND(cultist, sound('sound/items/weapons/slice.ogg', 0, 1, 10)) if(!do_after(cultist, scribe_mod, target = get_turf(cultist), timed_action_flags = IGNORE_SLOWDOWNS)) cleanup_shields() failed?.Invoke() @@ -371,7 +371,7 @@ var/area/summon_location = get_area(cultist) 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', + sound = 'sound/music/antag/bloodcult/bloodcult_scribe.ogg', sender_override = "[command_name()] Higher Dimensional Affairs", has_important_message = TRUE, ) @@ -404,7 +404,7 @@ if(!rune.Adjacent(cultist)) return FALSE - if(cultist.incapacitated()) + if(cultist.incapacitated) return FALSE if(cultist.stat == DEAD) @@ -427,7 +427,7 @@ if(QDELETED(tool) || !cultist.is_holding(tool)) return FALSE - if(cultist.incapacitated() || cultist.stat == DEAD) + if(cultist.incapacitated || cultist.stat == DEAD) to_chat(cultist, span_warning("You can't draw a rune right now.")) return FALSE diff --git a/code/datums/components/deployable.dm b/code/datums/components/deployable.dm index f45a5b226c39d..ac0f006fb6cde 100644 --- a/code/datums/components/deployable.dm +++ b/code/datums/components/deployable.dm @@ -68,7 +68,7 @@ return new_direction = user.dir //Gets the direction for thing_to_be_deployed if there is a user source.balloon_alert(user, "deploying...") - playsound(source, 'sound/items/ratchet.ogg', 50, TRUE) + playsound(source, 'sound/items/tools/ratchet.ogg', 50, TRUE) if(!do_after(user, deploy_time)) return else // If there is for some reason no user, then the location and direction are set here diff --git a/code/datums/components/direct_explosive_trap.dm b/code/datums/components/direct_explosive_trap.dm index e3a125eb928ed..1372c569bbade 100644 --- a/code/datums/components/direct_explosive_trap.dm +++ b/code/datums/components/direct_explosive_trap.dm @@ -74,7 +74,7 @@ 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) + playsound(source, 'sound/effects/explosion/explosion2.ogg', 200, TRUE) new /obj/effect/temp_visual/explosion(get_turf(source)) EX_ACT(victim, explosive_force) qdel(src) diff --git a/code/datums/components/drift.dm b/code/datums/components/drift.dm deleted file mode 100644 index 7fba50d315178..0000000000000 --- a/code/datums/components/drift.dm +++ /dev/null @@ -1,194 +0,0 @@ -///Component that handles drifting -///Manages a movement loop that actually does the legwork of moving someone -///Alongside dealing with the post movement input blocking required to make things look nice -/datum/component/drift - var/atom/inertia_last_loc - var/old_dir - var/datum/move_loop/move/drifting_loop - ///Should we ignore the next glide rate input we get? - ///This is to some extent a hack around the order of operations - ///Around COMSIG_MOVELOOP_POSTPROCESS. I'm sorry lad - var/ignore_next_glide = FALSE - ///Have we been delayed? IE: active, but not working right this second? - var/delayed = FALSE - var/block_inputs_until - -/// Accepts three args. The direction to drift in, if the drift is instant or not, and if it's not instant, the delay on the start -/datum/component/drift/Initialize(direction, instant = FALSE, start_delay = 0) - if(!ismovable(parent)) - return COMPONENT_INCOMPATIBLE - . = ..() - - var/flags = MOVEMENT_LOOP_OUTSIDE_CONTROL - if(instant) - flags |= MOVEMENT_LOOP_START_FAST - var/atom/movable/movable_parent = parent - drifting_loop = GLOB.move_manager.move(moving = parent, direction = direction, delay = movable_parent.inertia_move_delay, subsystem = SSspacedrift, priority = MOVEMENT_SPACE_PRIORITY, flags = flags) - - if(!drifting_loop) //Really want to qdel here but can't - return COMPONENT_INCOMPATIBLE - - RegisterSignal(drifting_loop, COMSIG_MOVELOOP_START, PROC_REF(drifting_start)) - RegisterSignal(drifting_loop, COMSIG_MOVELOOP_STOP, PROC_REF(drifting_stop)) - RegisterSignal(drifting_loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(before_move)) - 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.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 - - // Start delay is essentially a more granular version of instant - // Isn't used in the standard case, just for things that have odd wants - if(!instant && start_delay) - drifting_loop.pause_for(start_delay) - visual_delay = start_delay - - apply_initial_visuals(visual_delay) - -/datum/component/drift/Destroy() - inertia_last_loc = null - if(!QDELETED(drifting_loop)) - qdel(drifting_loop) - drifting_loop = null - var/atom/movable/movable_parent = parent - movable_parent.inertia_moving = FALSE - return ..() - -/datum/component/drift/proc/apply_initial_visuals(visual_delay) - // If something "somewhere" doesn't want us to apply our glidesize delays, don't - if(SEND_SIGNAL(parent, COMSIG_MOVABLE_DRIFT_VISUAL_ATTEMPT) & DRIFT_VISUAL_FAILED) - return - - // Ignore the next glide because it's literally just us - ignore_next_glide = TRUE - var/atom/movable/movable_parent = parent - movable_parent.set_glide_size(MOVEMENT_ADJUSTED_GLIDE_SIZE(visual_delay, SSspacedrift.visual_delay)) - if(ismob(parent)) - var/mob/mob_parent = parent - //Ok this is slightly weird, but basically, we need to force the client to glide at our rate - //Make sure moving into a space move looks like a space move essentially - //There is an inbuilt assumption that gliding will be added as a part of a move call, but eh - //It's ok if it's not, it's just important if it is. - mob_parent.client?.visual_delay = MOVEMENT_ADJUSTED_GLIDE_SIZE(visual_delay, SSspacedrift.visual_delay) - -/datum/component/drift/proc/newtonian_impulse(datum/source, inertia_direction) - SIGNAL_HANDLER - var/atom/movable/movable_parent = parent - inertia_last_loc = movable_parent.loc - if(drifting_loop) - drifting_loop.direction = inertia_direction - if(!inertia_direction) - qdel(src) - return COMPONENT_MOVABLE_NEWTONIAN_BLOCK - -/datum/component/drift/proc/drifting_start() - SIGNAL_HANDLER - var/atom/movable/movable_parent = parent - inertia_last_loc = movable_parent.loc - RegisterSignal(movable_parent, COMSIG_MOVABLE_MOVED, PROC_REF(handle_move)) - // We will use glide size to intuit how long to delay our loop's next move for - // This way you can't ride two movements at once while drifting, since that'd be dumb as fuck - RegisterSignal(movable_parent, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, PROC_REF(handle_glidesize_update)) - // If you stop pulling something mid drift, I want it to retain that momentum - RegisterSignal(movable_parent, COMSIG_ATOM_NO_LONGER_PULLING, PROC_REF(stopped_pulling)) - -/datum/component/drift/proc/drifting_stop() - SIGNAL_HANDLER - var/atom/movable/movable_parent = parent - movable_parent.inertia_moving = FALSE - ignore_next_glide = FALSE - UnregisterSignal(movable_parent, list(COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, COMSIG_ATOM_NO_LONGER_PULLING)) - -/datum/component/drift/proc/before_move(datum/source) - SIGNAL_HANDLER - var/atom/movable/movable_parent = parent - movable_parent.inertia_moving = TRUE - old_dir = movable_parent.dir - delayed = FALSE - -/datum/component/drift/proc/after_move(datum/source, result, visual_delay) - SIGNAL_HANDLER - if(result == MOVELOOP_FAILURE) - qdel(src) - return - - var/atom/movable/movable_parent = parent - movable_parent.setDir(old_dir) - movable_parent.inertia_moving = FALSE - if(movable_parent.Process_Spacemove(drifting_loop.direction, continuous_move = TRUE)) - glide_to_halt(visual_delay) - return - - inertia_last_loc = movable_parent.loc - ignore_next_glide = TRUE - -/datum/component/drift/proc/loop_death(datum/source) - SIGNAL_HANDLER - drifting_loop = null - UnregisterSignal(parent, COMSIG_MOVABLE_NEWTONIAN_MOVE) // We won't block a component from replacing us anymore - -/datum/component/drift/proc/handle_move(datum/source, old_loc) - SIGNAL_HANDLER - // This can happen, because signals once sent cannot be stopped - if(QDELETED(src)) - return - var/atom/movable/movable_parent = parent - if(!isturf(movable_parent.loc)) - qdel(src) - return - if(movable_parent.inertia_moving) - return - if(!movable_parent.Process_Spacemove(drifting_loop.direction, continuous_move = TRUE)) - return - qdel(src) - -/// We're going to take the passed in glide size -/// and use it to manually delay our loop for that period -/// to allow the other movement to complete -/datum/component/drift/proc/handle_glidesize_update(datum/source, glide_size) - SIGNAL_HANDLER - // If we aren't drifting, or this is us, fuck off - var/atom/movable/movable_parent = parent - if(!drifting_loop || movable_parent.inertia_moving) - return - // If we are drifting, but this set came from the moveloop itself, drop the input - // I'm sorry man - if(ignore_next_glide) - ignore_next_glide = FALSE - return - var/glide_delay = round(world.icon_size / glide_size, 1) * world.tick_lag - drifting_loop.pause_for(glide_delay) - delayed = TRUE - -/// If we're pulling something and stop, we want it to continue at our rate and such -/datum/component/drift/proc/stopped_pulling(datum/source, atom/movable/was_pulling) - SIGNAL_HANDLER - // This does mean it falls very slightly behind, but otherwise they'll potentially run into us - var/next_move_in = drifting_loop.timer - world.time + world.tick_lag - was_pulling.newtonian_move(drifting_loop.direction, start_delay = next_move_in) - -/datum/component/drift/proc/glide_to_halt(glide_for) - if(!ismob(parent)) - qdel(src) - return - - var/mob/mob_parent = parent - var/client/our_client = mob_parent.client - // If we're not active, don't do the glide because it'll look dumb as fuck - if(!our_client || delayed) - qdel(src) - return - - block_inputs_until = world.time + glide_for - QDEL_IN(src, glide_for + 1) - qdel(drifting_loop) - RegisterSignal(parent, COMSIG_MOB_CLIENT_PRE_MOVE, PROC_REF(allow_final_movement)) - -/datum/component/drift/proc/allow_final_movement(datum/source) - // Some things want to allow movement out of spacedrift, we should let them - if(SEND_SIGNAL(parent, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT) & DRIFT_ALLOW_INPUT) - return - if(world.time < block_inputs_until) - return COMSIG_MOB_CLIENT_BLOCK_PRE_MOVE diff --git a/code/datums/components/echolocation.dm b/code/datums/components/echolocation.dm index f5181a9814738..1568a5739776a 100644 --- a/code/datums/components/echolocation.dm +++ b/code/datums/components/echolocation.dm @@ -170,7 +170,7 @@ copied_appearance.pixel_x = 0 copied_appearance.pixel_y = 0 copied_appearance.transform = matrix() - if(!iscarbon(input)) //wacky overlay people get generated everytime + if(input.icon && input.icon_state) saved_appearances["[input.icon]-[input.icon_state]"] = copied_appearance return copied_appearance diff --git a/code/datums/components/effect_remover.dm b/code/datums/components/effect_remover.dm index a67962250dbe1..c8490d760f1f8 100644 --- a/code/datums/components/effect_remover.dm +++ b/code/datums/components/effect_remover.dm @@ -66,6 +66,10 @@ if(!isliving(user)) return NONE + if(HAS_TRAIT(target, TRAIT_ILLUSORY_EFFECT)) + to_chat(user, span_notice("You pass [parent] through the [target], but nothing seems to happen. Is it really even there?")) + return NONE + if(is_type_in_typecache(target, effects_we_clear)) // Make sure we get all subtypes and everything INVOKE_ASYNC(src, PROC_REF(do_remove_effect), target, user) return ITEM_INTERACT_SUCCESS diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm index 84bfa8dfad0f0..6fc61db5e76a6 100644 --- a/code/datums/components/embedded.dm +++ b/code/datums/components/embedded.dm @@ -57,7 +57,7 @@ var/damage = weapon.throwforce if(harmful) victim.throw_alert(ALERT_EMBEDDED_OBJECT, /atom/movable/screen/alert/embeddedobject) - playsound(victim,'sound/weapons/bladeslice.ogg', 40) + playsound(victim,'sound/items/weapons/bladeslice.ogg', 40) if (limb.can_bleed()) weapon.add_mob_blood(victim)//it embedded itself in you, of course it's bloody! damage += weapon.w_class * embed_data.impact_pain_mult diff --git a/code/datums/components/engraved.dm b/code/datums/components/engraved.dm index 60bfa5f617729..5db43b8076cd2 100644 --- a/code/datums/components/engraved.dm +++ b/code/datums/components/engraved.dm @@ -67,13 +67,13 @@ RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) //supporting component transfer means putting these here instead of initialize SSpersistence.wall_engravings += src - ADD_TRAIT(parent, TRAIT_NOT_ENGRAVABLE, TRAIT_GENERIC) + ADD_TRAIT(parent, TRAIT_NOT_ENGRAVABLE, ENGRAVED_TRAIT) /datum/component/engraved/UnregisterFromParent() UnregisterSignal(parent, COMSIG_ATOM_EXAMINE) //supporting component transfer means putting these here instead of destroy SSpersistence.wall_engravings -= src - REMOVE_TRAIT(parent, TRAIT_NOT_ENGRAVABLE, TRAIT_GENERIC) + REMOVE_TRAIT(parent, TRAIT_NOT_ENGRAVABLE, ENGRAVED_TRAIT) /// Used to maintain the acid overlay on the parent [/atom]. /datum/component/engraved/proc/on_update_overlays(atom/parent_atom, list/overlays) diff --git a/code/datums/components/explodable.dm b/code/datums/components/explodable.dm index 439b156352104..9dc8db3bbc4f1 100644 --- a/code/datums/components/explodable.dm +++ b/code/datums/components/explodable.dm @@ -60,10 +60,11 @@ return check_if_detonate(I) -/datum/component/explodable/proc/explodable_impact(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum) +/datum/component/explodable/proc/explodable_impact(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) SIGNAL_HANDLER - check_if_detonate(hit_atom) + if(!caught) + check_if_detonate(hit_atom) /datum/component/explodable/proc/explodable_bump(datum/source, atom/A) SIGNAL_HANDLER diff --git a/code/datums/components/face_decal.dm b/code/datums/components/face_decal.dm index 674f17fe86cf1..df70f8a3f4989 100644 --- a/code/datums/components/face_decal.dm +++ b/code/datums/components/face_decal.dm @@ -53,6 +53,8 @@ carbon_parent.update_body_parts() else normal_overlay = get_normal_overlay() + normal_overlay.color = color + RegisterSignals(parent, list( COMSIG_COMPONENT_CLEAN_ACT, @@ -113,36 +115,39 @@ SIGNAL_HANDLER qdel(src) -/// Creampie subtype, handling signals and mood logic +/// splat subtype, handling signals and mood logic -GLOBAL_LIST_INIT(creamable, typecacheof(list( - /mob/living/carbon/human, - /mob/living/basic/pet/dog/corgi, - /mob/living/silicon/ai))) +GLOBAL_LIST_INIT(splattable, zebra_typecacheof(list( + /mob/living/carbon/human = "human", + /mob/living/basic/pet/dog/corgi = "corgi", + /mob/living/silicon/ai = "ai", +))) -/datum/component/face_decal/creampie/Initialize() - . = ..() - if(!is_type_in_typecache(parent, GLOB.creamable)) +/datum/component/face_decal/splat + ///The mood_event that we add + var/mood_event_type + +/datum/component/face_decal/splat/Initialize(icon_state, layers, color, memory_type = /datum/memory/witnessed_creampie, mood_event_type = /datum/mood_event/creampie) + if(!is_type_in_typecache(parent, GLOB.splattable)) return COMPONENT_INCOMPATIBLE - SEND_SIGNAL(parent, COMSIG_MOB_CREAMED, src) - add_memory_in_range(parent, 7, /datum/memory/witnessed_creampie, protagonist = parent) + . = ..() -/datum/component/face_decal/creampie/get_normal_overlay() - if(iscorgi(parent)) - return mutable_appearance('icons/mob/effects/creampie.dmi', "[icon_state]_corgi") + SEND_SIGNAL(parent, COMSIG_MOB_HIT_BY_SPLAT, src) + add_memory_in_range(parent, 7, memory_type, protagonist = parent) + src.mood_event_type = mood_event_type - if(isAI(parent)) - return mutable_appearance('icons/mob/effects/creampie.dmi', "[icon_state]_ai") +/datum/component/face_decal/splat/get_normal_overlay() + return mutable_appearance('icons/mob/effects/face_decal.dmi', "[icon_state]_[GLOB.splattable[type]]") -/datum/component/face_decal/creampie/RegisterWithParent() +/datum/component/face_decal/splat/RegisterWithParent() . = ..() if(iscarbon(parent)) var/mob/living/carbon/human/carbon_parent = parent - carbon_parent.add_mood_event("creampie", /datum/mood_event/creampie) + carbon_parent.add_mood_event("splat", mood_event_type) -/datum/component/face_decal/creampie/UnregisterFromParent() +/datum/component/face_decal/splat/UnregisterFromParent() . = ..() if(iscarbon(parent)) var/mob/living/carbon/carbon_parent = parent - carbon_parent.clear_mood_event("creampie") + carbon_parent.clear_mood_event("splat") diff --git a/code/datums/components/fish_growth.dm b/code/datums/components/fish_growth.dm index bc7c8a9869e44..3ec1427fd51a8 100644 --- a/code/datums/components/fish_growth.dm +++ b/code/datums/components/fish_growth.dm @@ -11,43 +11,90 @@ var/use_drop_loc ///Is the parent deleted once the result is spawned? var/del_on_grow + ///Will the result inherit the name of the fish if that was changed from the initial name. + var/inherit_name -/datum/component/fish_growth/Initialize(result_type, growth_rate, use_drop_loc = TRUE, del_on_grow = TRUE) +/datum/component/fish_growth/Initialize(result_type, growth_time, use_drop_loc = TRUE, del_on_grow = TRUE, inherit_name = TRUE) . = ..() if(!isfish(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(parent, COMSIG_FISH_LIFE, PROC_REF(on_fish_life)) src.result_type = result_type - src.growth_rate = growth_rate + growth_rate = 100 / growth_time src.use_drop_loc = use_drop_loc src.del_on_grow = del_on_grow + src.inherit_name = inherit_name -/datum/component/fish_growth/CheckDupeComponent(result_type, growth_rate, use_drop_loc = TRUE, del_on_grow = TRUE) +/datum/component/fish_growth/CheckDupeComponent( + datum/component/fish_growth/new_growth, // will be null + result_type, + growth_time, + use_drop_loc = TRUE, + del_on_grow = TRUE, + inherit_name = TRUE, +) if(result_type == src.result_type) - src.growth_rate = growth_rate + growth_rate = 100 / growth_time return TRUE //copy the growth rate and kill the new component return FALSE +/datum/component/fish_growth/RegisterWithParent() + var/evo_growth = ispath(result_type, /datum/fish_evolution) + RegisterSignal(parent, COMSIG_FISH_LIFE, PROC_REF(on_fish_life)) + if(!evo_growth) + return + var/datum/fish_evolution/evolution = GLOB.fish_evolutions[result_type] + evolution.RegisterSignal(parent, COMSIG_FISH_BEFORE_GROWING, TYPE_PROC_REF(/datum/fish_evolution, growth_checks)) + evolution.register_fish(parent) + +/datum/component/fish_growth/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_FISH_LIFE, COMSIG_FISH_BEFORE_GROWING)) + /datum/component/fish_growth/proc/on_fish_life(obj/item/fish/source, seconds_per_tick) SIGNAL_HANDLER - if(SEND_SIGNAL(source, COMSIG_FISH_BEFORE_GROWING, seconds_per_tick) & COMPONENT_DONT_GROW) + if(source.status == FISH_DEAD) //It died just now. return - maturation += growth_rate * seconds_per_tick + var/deciseconds_elapsed = seconds_per_tick * 10 + var/growth = growth_rate * deciseconds_elapsed + if(SEND_SIGNAL(source, COMSIG_FISH_BEFORE_GROWING, seconds_per_tick, growth) & COMPONENT_DONT_GROW) + return + maturation += growth if(maturation >= 100) finish_growing(source) /datum/component/fish_growth/proc/finish_growing(obj/item/fish/source) var/atom/location = use_drop_loc ? source.drop_location() : source.loc - var/atom/movable/result = new result_type (location) - if(location != source.loc) - result.visible_message(span_boldnotice("\A [result] jumps out of [source.loc]!")) - playsound(result, 'sound/effects/fish_splash.ogg', 60) - if(isbasicmob(result)) - for(var/trait_type in source.fish_traits) - var/datum/fish_trait/trait = GLOB.fish_traits[trait_type] - trait.apply_to_mob(result) - - addtimer(CALLBACK(result, TYPE_PROC_REF(/mob/living/basic, hop_on_nearby_turf)), 0.1 SECONDS) + var/is_evo = ispath(result_type, /datum/fish_evolution) + var/atom/movable/result + if(is_evo) + var/datum/fish_evolution/evolution = GLOB.fish_evolutions[result_type] + result = source.create_offspring(evolution.new_fish_type, evolution = evolution) + var/obj/item/fish/fishie = result + fishie.breeding_wait = source.breeding_wait + fishie.last_feeding = source.last_feeding + var/health_percent = source.health / initial(source.health) + fishie.adjust_health(fishie.health * health_percent) + else + result = new result_type (location) + if(location != source.loc) + result.visible_message(span_boldnotice("\A [result] jumps out of [source.loc]!")) + playsound(result, 'sound/effects/fish_splash.ogg', 60) + if(isbasicmob(result)) + for(var/trait_type in source.fish_traits) + var/datum/fish_trait/trait = GLOB.fish_traits[trait_type] + trait.apply_to_mob(result) + + addtimer(CALLBACK(result, TYPE_PROC_REF(/mob/living/basic, hop_on_nearby_turf)), 0.1 SECONDS) + + if(is_evo || location == source.loc) + var/message_verb = del_on_grow ? "grows into" : "generates" + location.visible_message(span_notice("[source] [message_verb] \a [result]."), vision_distance = 3) + + if(inherit_name && source.name != initial(source.name)) + if(ismob(result)) + var/mob/mob = result + mob.fully_replace_character_name(mob.name, source.name) + else + result.name = source.name SEND_SIGNAL(source, COMSIG_FISH_FINISH_GROWING, result) diff --git a/code/datums/components/fishing_spot.dm b/code/datums/components/fishing_spot.dm index 6638c822ff6a5..982b0da2df71a 100644 --- a/code/datums/components/fishing_spot.dm +++ b/code/datums/components/fishing_spot.dm @@ -12,17 +12,22 @@ fish_source = configuration else return COMPONENT_INCOMPATIBLE - fish_source.on_fishing_spot_init() + fish_source.on_fishing_spot_init(src) RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(handle_attackby)) RegisterSignal(parent, COMSIG_FISHING_ROD_CAST, PROC_REF(handle_cast)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(on_examined_more)) RegisterSignal(parent, COMSIG_NPC_FISHING, PROC_REF(return_fishing_spot)) RegisterSignal(parent, COMSIG_ATOM_EX_ACT, PROC_REF(explosive_fishing)) + RegisterSignal(parent, COMSIG_FISH_RELEASED_INTO, PROC_REF(fish_released)) + RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(link_to_fish_porter)) ADD_TRAIT(parent, TRAIT_FISHING_SPOT, REF(src)) /datum/component/fishing_spot/Destroy() + REMOVE_TRAIT(parent, TRAIT_FISHING_SPOT, REF(src)) + fish_source.on_fishing_spot_del(src) fish_source = null + REMOVE_TRAIT(parent, TRAIT_FISHING_SPOT, REF(src)) return ..() /datum/component/fishing_spot/proc/handle_cast(datum/source, obj/item/fishing_rod/rod, mob/user) @@ -43,15 +48,7 @@ if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISHING_SPOT)) return - var/has_known_fishes = FALSE - for(var/reward in fish_source.fish_table) - if(!ispath(reward, /obj/item/fish)) - continue - var/obj/item/fish/prototype = reward - if(initial(prototype.show_in_catalog)) - has_known_fishes = TRUE - break - if(!has_known_fishes) + if(!fish_source.has_known_fishes()) return examine_text += span_tinynoticeital("This is a fishing spot. You can look again to list its fishes...") @@ -61,25 +58,14 @@ if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISHING_SPOT)) return - var/list/known_fishes = list() - for(var/reward in fish_source.fish_table) - if(!ispath(reward, /obj/item/fish)) - continue - var/obj/item/fish/prototype = reward - if(initial(prototype.show_in_catalog)) - known_fishes += initial(prototype.name) - - if(!length(known_fishes)) - return - - examine_text += span_info("You can catch the following fish here: [english_list(known_fishes)].") + fish_source.get_catchable_fish_names(user, parent, examine_text) /datum/component/fishing_spot/proc/try_start_fishing(obj/item/possibly_rod, mob/user) SIGNAL_HANDLER var/obj/item/fishing_rod/rod = possibly_rod if(!istype(rod)) return - if(HAS_TRAIT(user,TRAIT_GONE_FISHING) || rod.fishing_line) + if(GLOB.fishing_challenges_by_user[user] || rod.fishing_line) user.balloon_alert(user, "already fishing") return COMPONENT_NO_AFTERATTACK var/denial_reason = fish_source.reason_we_cant_fish(rod, user, parent) @@ -88,15 +74,10 @@ return COMPONENT_NO_AFTERATTACK // In case the fishing source has anything else to do before beginning to fish. fish_source.on_start_fishing(rod, user, parent) - start_fishing_challenge(rod, user) - return COMPONENT_NO_AFTERATTACK - -/datum/component/fishing_spot/proc/start_fishing_challenge(obj/item/fishing_rod/rod, mob/user) - /// Roll what we caught based on modified table - var/result = fish_source.roll_reward(rod, user) - var/datum/fishing_challenge/challenge = new(src, result, rod, user) + var/datum/fishing_challenge/challenge = new(src, rod, user) fish_source.pre_challenge_started(rod, user, challenge) challenge.start(user) + return COMPONENT_NO_AFTERATTACK /datum/component/fishing_spot/proc/return_fishing_spot(datum/source, list/fish_spot_container) fish_spot_container[NPC_FISHING_SPOT] = fish_source @@ -104,3 +85,13 @@ /datum/component/fishing_spot/proc/explosive_fishing(atom/location, severity) SIGNAL_HANDLER fish_source.spawn_reward_from_explosion(location, severity) + +/datum/component/fishing_spot/proc/link_to_fish_porter(atom/source, mob/user, obj/item/multitool/tool) + SIGNAL_HANDLER + if(istype(tool.buffer, /obj/machinery/fishing_portal_generator)) + var/obj/machinery/fishing_portal_generator/portal = tool.buffer + return portal.link_fishing_spot(fish_source, source, user) + +/datum/component/fishing_spot/proc/fish_released(datum/source, obj/item/fish/fish, mob/living/releaser) + SIGNAL_HANDLER + fish_source.readd_fish(fish, releaser) diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 89d0e03b72fcc..9e2964273fd48 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -40,8 +40,6 @@ Behavior that's still missing from this component that original food items had t var/volume = 50 ///The flavortext for taste (haha get it flavor text) var/list/tastes - ///Whether to tell the examiner that this is edible or not. - var/show_examine = TRUE /datum/component/edible/Initialize( list/initial_reagents, @@ -57,7 +55,6 @@ Behavior that's still missing from this component that original food items had t datum/callback/on_consume, datum/callback/check_liked, reagent_purity = 0.5, - show_examine = TRUE, ) if(!isatom(parent)) return COMPONENT_INCOMPATIBLE @@ -73,7 +70,6 @@ Behavior that's still missing from this component that original food items had t src.on_consume = on_consume src.tastes = string_assoc_list(tastes) src.check_liked = check_liked - src.show_examine = show_examine setup_initial_reagents(initial_reagents, reagent_purity) @@ -81,9 +77,9 @@ Behavior that's still missing from this component that original food items had t RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, PROC_REF(UseByAnimal)) RegisterSignal(parent, COMSIG_ATOM_CHECKPARTS, PROC_REF(OnCraft)) - RegisterSignal(parent, COMSIG_ATOM_CREATEDBY_PROCESSING, PROC_REF(OnProcessed)) - RegisterSignal(parent, COMSIG_FOOD_INGREDIENT_ADDED, PROC_REF(edible_ingredient_added)) RegisterSignal(parent, COMSIG_OOZE_EAT_ATOM, PROC_REF(on_ooze_eat)) + RegisterSignal(parent, COMSIG_FOOD_INGREDIENT_ADDED, PROC_REF(edible_ingredient_added)) + RegisterSignal(parent, COMSIG_ATOM_CREATEDBY_PROCESSING, PROC_REF(OnProcessed)) if(isturf(parent)) RegisterSignal(parent, COMSIG_ATOM_ENTERED, PROC_REF(on_entered)) @@ -216,7 +212,7 @@ Behavior that's still missing from this component that original food items had t SIGNAL_HANDLER var/atom/owner = parent - if(!show_examine) + if(food_flags & FOOD_NO_EXAMINE) return if(foodtypes) var/list/types = bitfield_to_list(foodtypes, FOOD_FLAGS) @@ -256,7 +252,7 @@ Behavior that's still missing from this component that original food items had t if(!(food_flags & FOOD_IN_CONTAINER)) switch(bitecount) if(0) - // pass + pass() if(1) examine_list += span_notice("[owner] was bitten by someone!") if(2, 3) @@ -316,7 +312,6 @@ Behavior that's still missing from this component that original food items had t SIGNAL_HANDLER var/atom/this_food = parent - for(var/obj/item/food/crafted_part in parts_list) if(!crafted_part.reagents) continue @@ -325,7 +320,7 @@ Behavior that's still missing from this component that original food items had t this_food.reagents.maximum_volume = ROUND_UP(this_food.reagents.maximum_volume) // Just because I like whole numbers for this. - BLACKBOX_LOG_FOOD_MADE(this_food.type) + BLACKBOX_LOG_FOOD_MADE(parent.type) ///Makes sure the thing hasn't been destroyed or fully eaten to prevent eating phantom edibles /datum/component/edible/proc/IsFoodGone(atom/owner, mob/living/feeder) @@ -462,7 +457,7 @@ Behavior that's still missing from this component that original food items had t var/atom/owner = parent - if(!owner?.reagents) + if(!owner.reagents) stack_trace("[eater] failed to bite [owner], because [owner] had no reagents.") return FALSE if(eater.satiety > -200) @@ -479,7 +474,8 @@ Behavior that's still missing from this component that original food items had t if(bitecount == 0) apply_buff(eater) - var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) + var/fraction = 0.3 + fraction = min(bite_consumption / owner.reagents.total_volume, 1) owner.reagents.trans_to(eater, bite_consumption, transferred_by = feeder, methods = INGEST) bitecount++ @@ -489,8 +485,7 @@ Behavior that's still missing from this component that original food items had t On_Consume(eater, feeder) //Invoke our after eat callback if it is valid - if(after_eat) - after_eat.Invoke(eater, feeder, bitecount) + after_eat?.Invoke(eater, feeder, bitecount) //Invoke the eater's stomach's after_eat callback if valid if(iscarbon(eater)) @@ -528,13 +523,13 @@ Behavior that's still missing from this component that original food items had t /datum/component/edible/proc/apply_buff(mob/eater) var/buff var/recipe_complexity = get_recipe_complexity() - if(recipe_complexity == 0) + if(recipe_complexity <= 0) return var/obj/item/food/food = parent - if(!isnull(food.crafted_food_buff)) + if(istype(food) && !isnull(food.crafted_food_buff)) buff = food.crafted_food_buff else - buff = pick_weight(GLOB.food_buffs[recipe_complexity]) + buff = pick_weight(GLOB.food_buffs[min(recipe_complexity, FOOD_COMPLEXITY_5)]) if(!isnull(buff)) var/mob/living/living_eater = eater var/atom/owner = parent @@ -595,10 +590,13 @@ Behavior that's still missing from this component that original food items had t /// Get the complexity of the crafted food /datum/component/edible/proc/get_recipe_complexity() + var/list/extra_complexity = list(0) + SEND_SIGNAL(parent, COMSIG_FOOD_GET_EXTRA_COMPLEXITY, extra_complexity) + var/complexity_to_add = extra_complexity[1] if(!HAS_TRAIT(parent, TRAIT_FOOD_CHEF_MADE) || !istype(parent, /obj/item/food)) - return 0 // It is factory made. Soulless. + return complexity_to_add // It is factory made. Soulless. var/obj/item/food/food = parent - return food.crafting_complexity + return food.crafting_complexity + complexity_to_add /// Get food quality adjusted according to eater's preferences /datum/component/edible/proc/get_perceived_food_quality(mob/living/carbon/human/eater) @@ -663,7 +661,7 @@ Behavior that's still missing from this component that original food items had t /datum/component/edible/proc/UseByAnimal(datum/source, mob/living/basic/pet/dog/doggy) SIGNAL_HANDLER - if(!isdog(doggy)) + if(!isdog(doggy) || (food_flags & FOOD_NO_BITECOUNT)) //this entirely relies on bitecounts alas return var/atom/food = parent diff --git a/code/datums/components/food/germ_sensitive.dm b/code/datums/components/food/germ_sensitive.dm index 21785c449fb94..85b6f0a3713b2 100644 --- a/code/datums/components/food/germ_sensitive.dm +++ b/code/datums/components/food/germ_sensitive.dm @@ -25,7 +25,7 @@ GLOBAL_LIST_INIT(floor_diseases, list( RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(handle_movement)) - RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(wash)) //Wash germs off dirty things + RegisterSignals(parent, list(COMSIG_COMPONENT_CLEAN_ACT, COMSIG_ITEM_FRIED, COMSIG_ITEM_BARBEQUE_GRILLED, COMSIG_ATOM_FIRE_ACT), PROC_REF(delete_germs)) RegisterSignals(parent, list( COMSIG_ITEM_DROPPED, //Dropped into the world @@ -50,6 +50,9 @@ GLOBAL_LIST_INIT(floor_diseases, list( COMSIG_ATOM_EXAMINE, COMSIG_ATOM_EXITED, COMSIG_COMPONENT_CLEAN_ACT, + COMSIG_ITEM_FRIED, + COMSIG_ITEM_BARBEQUE_GRILLED, + COMSIG_ATOM_FIRE_ACT, COMSIG_ITEM_DROPPED, COMSIG_ITEM_PICKUP, COMSIG_MOVABLE_MOVED, @@ -116,7 +119,7 @@ GLOBAL_LIST_INIT(floor_diseases, list( var/random_disease = /datum/disease/advance/floorfood //BUBBERSTATION CHANGE: DISEASE CHANGE parent.AddComponent(/datum/component/infective, new random_disease, weak = TRUE) -/datum/component/germ_sensitive/proc/wash() +/datum/component/germ_sensitive/proc/delete_germs() SIGNAL_HANDLER if(infective) infective = FALSE diff --git a/code/datums/components/fullauto.dm b/code/datums/components/fullauto.dm index 1faa04ceacc75..a3f2009b3b506 100644 --- a/code/datums/components/fullauto.dm +++ b/code/datums/components/fullauto.dm @@ -275,7 +275,7 @@ // Gun procs. /obj/item/gun/proc/on_autofire_start(mob/living/shooter) - if(semicd || shooter.incapacitated() || !can_trigger_gun(shooter)) + if(semicd || shooter.incapacitated || !can_trigger_gun(shooter)) return FALSE if(!can_shoot()) shoot_with_empty_chamber(shooter) @@ -295,7 +295,7 @@ /obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, allow_akimbo, params) SIGNAL_HANDLER - if(semicd || shooter.incapacitated()) + if(semicd || shooter.incapacitated) return NONE if(!can_shoot()) shoot_with_empty_chamber(shooter) diff --git a/code/datums/components/gps.dm b/code/datums/components/gps.dm index 7e52f00def752..0b3751856b8a2 100644 --- a/code/datums/components/gps.dm +++ b/code/datums/components/gps.dm @@ -162,7 +162,7 @@ GLOBAL_LIST_EMPTY(GPS_list) switch(action) if("rename") var/atom/parentasatom = parent - var/a = tgui_input_text(usr, "Enter the desired tag", "GPS Tag", gpstag, 20) + var/a = tgui_input_text(usr, "Enter the desired tag", "GPS Tag", gpstag, max_length = 20) if (QDELETED(ui) || ui.status != UI_INTERACTIVE) return if (!a) diff --git a/code/datums/components/infective.dm b/code/datums/components/infective.dm index bc7cc2e6af3c4..ecd2f1ff836fd 100644 --- a/code/datums/components/infective.dm +++ b/code/datums/components/infective.dm @@ -8,43 +8,78 @@ var/weak_infection_chance = 10 -/datum/component/infective/Initialize(list/datum/disease/_diseases, expire_in, weak = FALSE) - if(islist(_diseases)) - diseases = _diseases - else - diseases = list(_diseases) +/datum/component/infective/Initialize(list/datum/disease/diseases, expire_in, weak = FALSE, weak_infection_chance = 10) + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + + if(!islist(diseases)) + diseases = islist(diseases) + + ///Make sure the diseases list is populated with instances of diseases so that it doesn't have to be for each AddComponent call. + for(var/datum/disease/disease as anything in diseases) + if(!disease) //empty entry, remove. + diseases -= disease + if(ispath(disease, /datum/disease)) + var/datum/disease/instance = new disease + diseases -= disease + diseases += instance + else if(!istype(disease)) + stack_trace("found [isdatum(disease) ? "an instance of [disease.type]" : disease] inside the diseases list argument for [type]") + diseases -= disease + + src.diseases = diseases + if(expire_in) expire_time = world.time + expire_in QDEL_IN(src, expire_in) - if(!ismovable(parent)) - return COMPONENT_INCOMPATIBLE - is_weak = weak + src.weak_infection_chance = weak_infection_chance + +/datum/component/infective/Destroy() + QDEL_LIST(diseases) + return ..() +/datum/component/infective/RegisterWithParent() if(is_weak && isitem(parent)) RegisterSignal(parent, COMSIG_FOOD_EATEN, PROC_REF(try_infect_eat)) RegisterSignal(parent, COMSIG_PILL_CONSUMED, PROC_REF(try_infect_eat)) - else - var/static/list/disease_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(try_infect_crossed), - ) - AddComponent(/datum/component/connect_loc_behalf, parent, disease_connections) - - RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(clean)) - RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, PROC_REF(try_infect_buckle)) - RegisterSignal(parent, COMSIG_MOVABLE_BUMP, PROC_REF(try_infect_collide)) - RegisterSignal(parent, COMSIG_MOVABLE_IMPACT_ZONE, PROC_REF(try_infect_impact_zone)) - if(isitem(parent)) - RegisterSignal(parent, COMSIG_ITEM_ATTACK_ZONE, PROC_REF(try_infect_attack_zone)) - RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(try_infect_attack)) - RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(try_infect_equipped)) - RegisterSignal(parent, COMSIG_FOOD_EATEN, PROC_REF(try_infect_eat)) - RegisterSignal(parent, COMSIG_PILL_CONSUMED, PROC_REF(try_infect_eat)) - if(istype(parent, /obj/item/reagent_containers/cup)) - RegisterSignal(parent, COMSIG_GLASS_DRANK, PROC_REF(try_infect_drink)) - if(isorgan(parent)) - RegisterSignal(parent, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_organ_insertion)) + return + var/static/list/disease_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(try_infect_crossed), + ) + AddComponent(/datum/component/connect_loc_behalf, parent, disease_connections) + + RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(clean)) + RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, PROC_REF(try_infect_buckle)) + RegisterSignal(parent, COMSIG_MOVABLE_BUMP, PROC_REF(try_infect_collide)) + RegisterSignal(parent, COMSIG_MOVABLE_IMPACT_ZONE, PROC_REF(try_infect_impact_zone)) + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_ZONE, PROC_REF(try_infect_attack_zone)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(try_infect_attack)) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(try_infect_equipped)) + RegisterSignal(parent, COMSIG_FOOD_EATEN, PROC_REF(try_infect_eat)) + RegisterSignal(parent, COMSIG_PILL_CONSUMED, PROC_REF(try_infect_eat)) + if(istype(parent, /obj/item/reagent_containers/cup)) + RegisterSignal(parent, COMSIG_GLASS_DRANK, PROC_REF(try_infect_drink)) + if(isorgan(parent)) + RegisterSignal(parent, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_organ_insertion)) + +/datum/component/infective/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, list( + COMSIG_FOOD_EATEN, + COMSIG_PILL_CONSUMED, + COMSIG_COMPONENT_CLEAN_ACT, + COMSIG_MOVABLE_BUMP, + COMSIG_MOVABLE_IMPACT_ZONE, + COMSIG_ITEM_ATTACK_ZONE, + COMSIG_ITEM_ATTACK, + COMSIG_ITEM_EQUIPPED, + COMSIG_GLASS_DRANK, + COMSIG_ORGAN_IMPLANTED, + )) + qdel(GetComponent(/datum/component/connect_loc_behalf)) /datum/component/infective/proc/on_organ_insertion(obj/item/organ/target, mob/living/carbon/receiver) SIGNAL_HANDLER @@ -62,16 +97,16 @@ eater.add_mood_event("disgust", /datum/mood_event/disgust/dirty_food) - if(is_weak && !prob(weak_infection_chance)) - return - - for(var/datum/disease/disease in diseases) + for(var/datum/disease/disease as anything in diseases) + if(is_weak && !prob(weak_infection_chance)) + continue if(!disease.has_required_infectious_organ(eater, ORGAN_SLOT_STOMACH)) continue eater.ForceContractDisease(disease) - try_infect(feeder, BODY_ZONE_L_ARM) + if(!is_weak) + try_infect(feeder, BODY_ZONE_L_ARM) /datum/component/infective/proc/try_infect_drink(datum/source, mob/living/drinker, mob/living/feeder) SIGNAL_HANDLER @@ -79,11 +114,14 @@ if(HAS_TRAIT(drinker, TRAIT_STRONG_STOMACH)) return - var/appendage_zone = feeder.held_items.Find(source) - appendage_zone = appendage_zone == 0 ? BODY_ZONE_CHEST : appendage_zone % 2 ? BODY_ZONE_R_ARM : BODY_ZONE_L_ARM - try_infect(feeder, appendage_zone) + if(!is_weak) + var/appendage_zone = feeder.held_items.Find(source) + appendage_zone = appendage_zone == 0 ? BODY_ZONE_CHEST : (appendage_zone % 2 ? BODY_ZONE_R_ARM : BODY_ZONE_L_ARM) + try_infect(feeder, appendage_zone) - for(var/datum/disease/disease in diseases) + for(var/datum/disease/disease as anything in diseases) + if(is_weak && !prob(weak_infection_chance)) + continue if(!disease.has_required_infectious_organ(drinker, ORGAN_SLOT_STOMACH)) continue @@ -163,19 +201,3 @@ /datum/component/infective/proc/try_infect(mob/living/L, target_zone) for(var/V in diseases) L.ContactContractDisease(V, target_zone) - -/datum/component/infective/UnregisterFromParent() - . = ..() - UnregisterSignal(parent, list( - COMSIG_FOOD_EATEN, - COMSIG_PILL_CONSUMED, - COMSIG_COMPONENT_CLEAN_ACT, - COMSIG_MOVABLE_BUMP, - COMSIG_MOVABLE_IMPACT_ZONE, - COMSIG_ITEM_ATTACK_ZONE, - COMSIG_ITEM_ATTACK, - COMSIG_ITEM_EQUIPPED, - COMSIG_GLASS_DRANK, - COMSIG_ORGAN_IMPLANTED, - )) - qdel(GetComponent(/datum/component/connect_loc_behalf)) diff --git a/code/datums/components/interaction_booby_trap.dm b/code/datums/components/interaction_booby_trap.dm index 2ae22ffbb5ae5..ef8d3c78cfcb4 100644 --- a/code/datums/components/interaction_booby_trap.dm +++ b/code/datums/components/interaction_booby_trap.dm @@ -26,7 +26,7 @@ /datum/component/interaction_booby_trap/Initialize( explosion_light_range = 3, explosion_heavy_range = 1, // So we destroy some machine components - triggered_sound = 'sound/machines/triple_beep.ogg', + triggered_sound = 'sound/machines/beep/triple_beep.ogg', trigger_delay = 0.5 SECONDS, sound_loop_type = /datum/looping_sound/trapped_machine_beep, defuse_tool = TOOL_SCREWDRIVER, diff --git a/code/datums/components/irradiated.dm b/code/datums/components/irradiated.dm index 077539f49db8e..0f70e0d80b717 100644 --- a/code/datums/components/irradiated.dm +++ b/code/datums/components/irradiated.dm @@ -51,11 +51,13 @@ /datum/component/irradiated/RegisterWithParent() RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(on_clean)) RegisterSignal(parent, COMSIG_GEIGER_COUNTER_SCAN, PROC_REF(on_geiger_counter_scan)) + RegisterSignal(parent, COMSIG_LIVING_HEALTHSCAN, PROC_REF(on_healthscan)) /datum/component/irradiated/UnregisterFromParent() UnregisterSignal(parent, list( COMSIG_COMPONENT_CLEAN_ACT, COMSIG_GEIGER_COUNTER_SCAN, + COMSIG_LIVING_HEALTHSCAN, )) /datum/component/irradiated/Destroy(force) @@ -138,7 +140,7 @@ if(human_parent.is_blind()) to_chat(human_parent, span_boldwarning("Your [affected_limb.plaintext_zone] feels like it's bubbling, then burns like hell!")) - human_parent.apply_damage(RADIATION_BURN_SPLOTCH_DAMAGE, BURN, affected_limb) + human_parent.apply_damage(RADIATION_BURN_SPLOTCH_DAMAGE, BURN, affected_limb, wound_clothing = FALSE) playsound( human_parent, pick('sound/effects/wounds/sizzle1.ogg', 'sound/effects/wounds/sizzle2.ogg'), @@ -186,6 +188,12 @@ return COMSIG_GEIGER_COUNTER_SCAN_SUCCESSFUL +/datum/component/irradiated/proc/on_healthscan(datum/source, list/render_list, advanced, mob/user, mode, tochat) + SIGNAL_HANDLER + + render_list += conditional_tooltip("Subject is irradiated.", "Supply antiradiation or antitoxin, such as [/datum/reagent/medicine/potass_iodide::name] or [/datum/reagent/medicine/pen_acid::name].", tochat) + render_list += "
" + /atom/movable/screen/alert/irradiated name = "Irradiated" desc = "You're irradiated! Heal your toxins quick, and stand under a shower to halt the incoming damage." diff --git a/code/datums/components/itempicky.dm b/code/datums/components/itempicky.dm index 74fbdff1caa91..bda8b1ae13881 100644 --- a/code/datums/components/itempicky.dm +++ b/code/datums/components/itempicky.dm @@ -5,13 +5,21 @@ var/whitelist /// Message shown if you try to pick up an item not in the whitelist var/message = "You don't like %TARGET, why would you hold it?" + /// An optional callback we check for overriding our whitelist + var/datum/callback/tertiary_condition = null -/datum/component/itempicky/Initialize(whitelist, message) +/datum/component/itempicky/Initialize(whitelist, message, tertiary_condition) if(!ismob(parent)) return COMPONENT_INCOMPATIBLE src.whitelist = whitelist if(message) src.message = message + if(tertiary_condition) + src.tertiary_condition = tertiary_condition + +/datum/component/itempicky/Destroy(force) + tertiary_condition = null + return ..() /datum/component/itempicky/RegisterWithParent() RegisterSignal(parent, COMSIG_LIVING_TRY_PUT_IN_HAND, PROC_REF(particularly)) @@ -30,6 +38,7 @@ /datum/component/itempicky/proc/particularly(datum/source, obj/item/pickingup) SIGNAL_HANDLER - if(!is_type_in_typecache(pickingup, whitelist)) + // if we were passed the output of a callback, check against that + if(!tertiary_condition?.Invoke() && !is_type_in_typecache(pickingup, whitelist)) to_chat(source, span_warning("[replacetext(message, "%TARGET", pickingup)]")) return COMPONENT_LIVING_CANT_PUT_IN_HAND diff --git a/code/datums/components/jetpack.dm b/code/datums/components/jetpack.dm index 437660abc82e0..1da8822091b90 100644 --- a/code/datums/components/jetpack.dm +++ b/code/datums/components/jetpack.dm @@ -17,17 +17,25 @@ var/datum/effect_system/trail_follow/trail /// The typepath to instansiate our trail as, when we need it var/effect_type + /// Drift force applied each movement tick + var/drift_force + /// Force that applied when stabiliziation is active and the player isn't moving in the same direction as the jetpack + var/stabilization_force + /// Our current user + var/mob/user /** * Arguments: * * stabilize - If we should drift when we finish moving, or sit stable in space] + * * drift_force - How much force is applied whenever the user tries to move + * * stabilization_force - How much force is applied per tick when we try to stabilize the user * * activation_signal - Signal we activate on * * deactivation_signal - Signal we deactivate on * * return_flag - Flag to return if activation fails * * check_on_move - Callback we call each time we attempt a move, we expect it to retun true if the move is ok, false otherwise. It expects an arg, TRUE if fuel should be consumed, FALSE othewise * * effect_type - Type of trail_follow to spawn */ -/datum/component/jetpack/Initialize(stabilize, activation_signal, deactivation_signal, return_flag, datum/callback/check_on_move, datum/effect_system/trail_follow/effect_type) +/datum/component/jetpack/Initialize(stabilize, drift_force = 1 NEWTONS, stabilization_force = 1 NEWTONS, activation_signal, deactivation_signal, return_flag, datum/callback/check_on_move, datum/effect_system/trail_follow/effect_type) . = ..() if(!isatom(parent)) return COMPONENT_INCOMPATIBLE @@ -44,8 +52,10 @@ src.deactivation_signal = deactivation_signal src.return_flag = return_flag src.effect_type = effect_type + src.drift_force = drift_force + src.stabilization_force = stabilization_force -/datum/component/jetpack/InheritComponent(datum/component/component, original, stabilize, activation_signal, deactivation_signal, return_flag, datum/callback/check_on_move, datum/effect_system/trail_follow/effect_type) +/datum/component/jetpack/InheritComponent(datum/component/component, original, stabilize, drift_force = 1 NEWTONS, stabilization_force = 1 NEWTONS, activation_signal, deactivation_signal, return_flag, datum/callback/check_on_move, datum/effect_system/trail_follow/effect_type) UnregisterSignal(parent, src.activation_signal) if(src.deactivation_signal) UnregisterSignal(parent, src.deactivation_signal) @@ -59,6 +69,8 @@ src.deactivation_signal = deactivation_signal src.return_flag = return_flag src.effect_type = effect_type + src.drift_force = drift_force + src.stabilization_force = stabilization_force if(trail && trail.effect_type != effect_type) setup_trail(trail.holder) @@ -66,87 +78,86 @@ /datum/component/jetpack/Destroy(force) if(trail) QDEL_NULL(trail) + user = null check_on_move = null return ..() /datum/component/jetpack/proc/setup_trail(mob/user) if(trail) QDEL_NULL(trail) - trail = new effect_type trail.auto_process = FALSE trail.set_up(user) trail.start() -/datum/component/jetpack/proc/activate(datum/source, mob/user) +/datum/component/jetpack/proc/activate(datum/source, mob/new_user) SIGNAL_HANDLER if(!check_on_move.Invoke(TRUE)) return return_flag + user = new_user RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(move_react)) RegisterSignal(user, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(pre_move_react)) - RegisterSignal(user, COMSIG_MOVABLE_SPACEMOVE, PROC_REF(spacemove_react)) - RegisterSignal(user, COMSIG_MOVABLE_DRIFT_VISUAL_ATTEMPT, PROC_REF(block_starting_visuals)) - RegisterSignal(user, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT, PROC_REF(ignore_ending_block)) - + RegisterSignal(user, COMSIG_MOB_CLIENT_MOVE_NOGRAV, PROC_REF(on_client_move)) + START_PROCESSING(SSnewtonian_movement, src) setup_trail(user) -/datum/component/jetpack/proc/deactivate(datum/source, mob/user) +/datum/component/jetpack/proc/deactivate(datum/source, mob/old_user) SIGNAL_HANDLER - UnregisterSignal(user, COMSIG_MOVABLE_MOVED) - UnregisterSignal(user, COMSIG_MOVABLE_PRE_MOVE) - UnregisterSignal(user, COMSIG_MOVABLE_SPACEMOVE) - UnregisterSignal(user, COMSIG_MOVABLE_DRIFT_VISUAL_ATTEMPT) - UnregisterSignal(user, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT) + UnregisterSignal(old_user, COMSIG_MOVABLE_MOVED) + UnregisterSignal(old_user, COMSIG_MOVABLE_PRE_MOVE) + UnregisterSignal(old_user, COMSIG_MOB_CLIENT_MOVE_NOGRAV) + STOP_PROCESSING(SSnewtonian_movement, src) + user = null if(trail) QDEL_NULL(trail) -/datum/component/jetpack/proc/move_react(mob/user) +/datum/component/jetpack/proc/move_react(mob/source) SIGNAL_HANDLER - if(!user || !user.client)//Don't allow jet self using - return - if(!isturf(user.loc))//You can't use jet in nowhere or from mecha/closet - return - if(!(user.movement_type & FLOATING) || user.buckled)//You don't want use jet in gravity or while buckled. + if (!should_trigger(source)) return - if(user.pulledby)//You don't must use jet if someone pull you - return - if(user.throwing)//You don't must use jet if you thrown - return - if(user.client.intended_direction)//You use jet when press keys. yes. - thrust() -/datum/component/jetpack/proc/pre_move_react(mob/user) - SIGNAL_HANDLER - if(!trail) - return FALSE - trail.oldposition = get_turf(user) + if(source.client.intended_direction && check_on_move.Invoke(FALSE))//You use jet when press keys. yes. + trail.generate_effect() -/datum/component/jetpack/proc/spacemove_react(mob/user, movement_dir, continuous_move) - SIGNAL_HANDLER - if(!continuous_move && movement_dir) - return COMSIG_MOVABLE_STOP_SPACEMOVE - // Check if we have the fuel to stop this. Do NOT cosume any fuel, just check - // This is done because things other then us can use our fuel - if(stabilize && check_on_move.Invoke(FALSE)) - return COMSIG_MOVABLE_STOP_SPACEMOVE - -/// Returns true if the thrust went well, false otherwise -/datum/component/jetpack/proc/thrust() - if(!check_on_move.Invoke(TRUE)) +/datum/component/jetpack/proc/should_trigger(mob/source) + if(!source || !source.client)//Don't allow jet self using + return FALSE + if(!isturf(source.loc))//You can't use jet in nowhere or from mecha/closet + return FALSE + if(!(source.movement_type & FLOATING) || source.buckled)//You don't want use jet in gravity or while buckled. + return FALSE + if(source.pulledby)//You don't must use jet if someone pull you + return FALSE + if(source.throwing)//You don't must use jet if you thrown return FALSE - trail.generate_effect() return TRUE -/// Basically, tell the drift component not to do its starting visuals, because they look dumb for us -/datum/component/jetpack/proc/block_starting_visuals(datum/source) +/datum/component/jetpack/proc/pre_move_react(mob/source) SIGNAL_HANDLER - return DRIFT_VISUAL_FAILED + if(!trail) + return FALSE + trail.oldposition = get_turf(source) + +/datum/component/jetpack/process(seconds_per_tick) + if (!should_trigger(user) || !stabilize || isnull(user.drift_handler)) + return -/// If we're on, don't let the drift component block movements at the end since we can speed -/datum/component/jetpack/proc/ignore_ending_block(datum/source) + var/max_drift_force = (DEFAULT_INERTIA_SPEED / user.cached_multiplicative_slowdown - 1) / INERTIA_SPEED_COEF + 1 + user.drift_handler.stabilize_drift(user.client.intended_direction ? dir2angle(user.client.intended_direction) : null, user.client.intended_direction ? max_drift_force : 0, stabilization_force * (seconds_per_tick * 1 SECONDS)) + +/datum/component/jetpack/proc/on_client_move(mob/source, list/move_args) SIGNAL_HANDLER - return DRIFT_ALLOW_INPUT + + if (!should_trigger(source)) + return + + if (!check_on_move.Invoke(TRUE)) + return + + var/max_drift_force = (DEFAULT_INERTIA_SPEED / source.cached_multiplicative_slowdown - 1) / INERTIA_SPEED_COEF + 1 + source.newtonian_move(dir2angle(source.client.intended_direction), instant = TRUE, drift_force = drift_force, controlled_cap = max_drift_force) + source.setDir(source.client.intended_direction) diff --git a/code/datums/components/jukebox.dm b/code/datums/components/jukebox.dm index 4017e86a8125b..175296cddfd69 100644 --- a/code/datums/components/jukebox.dm +++ b/code/datums/components/jukebox.dm @@ -400,7 +400,8 @@ // Default track supplied for testing and also because it's a banger /datum/track/default - song_path = 'sound/ambience/title3.ogg' + song_path = 'sound/music/lobby_music/title3.ogg' song_name = "Tintin on the Moon" song_length = 3 MINUTES + 52 SECONDS - song_beat = 1 SECONDS SKYRAT EDIT END*/ + song_beat = 1 SECONDS +SKYRAT EDIT END*/ diff --git a/code/datums/components/life_link.dm b/code/datums/components/life_link.dm index 628aceabc955a..314a3d7931bde 100644 --- a/code/datums/components/life_link.dm +++ b/code/datums/components/life_link.dm @@ -128,7 +128,7 @@ 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 + holder.pixel_y = size_check.Height() - ICON_SIZE_Y /// Update our vital status on the medical hud /datum/component/life_link/proc/update_med_hud_status(mob/living/mob_parent) @@ -136,7 +136,7 @@ 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 + holder.pixel_y = size_check.Height() - ICON_SIZE_Y if(host.stat == DEAD || HAS_TRAIT(host, TRAIT_FAKEDEATH)) holder.icon_state = "huddead" else diff --git a/code/datums/components/lockable_storage.dm b/code/datums/components/lockable_storage.dm index 482cb134159e0..ca058cb3fbfab 100644 --- a/code/datums/components/lockable_storage.dm +++ b/code/datums/components/lockable_storage.dm @@ -62,7 +62,6 @@ UnregisterSignal(parent, list( COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), - COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, )) UnregisterSignal(parent, list( COMSIG_ATOM_EXAMINE, diff --git a/code/datums/components/material/material_container.dm b/code/datums/components/material/material_container.dm index 7b3753cc71d76..10544116ce579 100644 --- a/code/datums/components/material/material_container.dm +++ b/code/datums/components/material/material_container.dm @@ -124,10 +124,10 @@ * Material Validation : Checks how much materials are available, Extracts materials from items if the container can hold them * Material Removal : Removes material from the container * - * Each Proc furthur belongs to a specific category + * Each Proc further belongs to a specific category * LOW LEVEL: Procs that are used internally & should not be used anywhere else unless you know what your doing * MID LEVEL: Procs that can be used by machines(like recycler, stacking machines) to bypass majority of checks - * HIGH LEVEL: Procs that can be used by anyone publically and guarentees safty checks & limits + * HIGH LEVEL: Procs that can be used by anyone publicly and guarantees safety checks & limits */ //================================Material Insertion procs============================== @@ -236,7 +236,7 @@ //do the insert var/last_inserted_id = insert_item_materials(target, multiplier, context) if(!isnull(last_inserted_id)) - if(delete_item || target != weapon) //we could have split the stack ourself + if(delete_item || target != weapon) //we could have split the stack ourselves qdel(target) //item gone return material_amount else if(!isnull(item_stack) && item_stack != target) //insertion failed, merge the split stack back into the original @@ -250,7 +250,7 @@ //===================================HIGH LEVEL=================================================== /** - * inserts an item from the players hand into the container. Loops through all the contents inside reccursively + * inserts an item from the players hand into the container. Loops through all the contents inside recursively * Does all explicit checking for mat flags & callbacks to check if insertion is valid * This proc is what you should be using for almost all cases * @@ -584,7 +584,7 @@ for(var/x in mats) //Loop through all required materials var/wanted = OPTIMAL_COST(mats[x] * coefficient) * multiplier if(!has_enough_of_material(x, wanted))//Not a category, so just check the normal way - testing("didnt have: [x] wanted: [wanted]") + testing("didn't have: [x] wanted: [wanted]") return FALSE return TRUE @@ -605,7 +605,7 @@ //round amount amt = OPTIMAL_COST(amt) - //get ref if nessassary + //get ref if necessary if(!istype(mat)) mat = GET_MATERIAL_REF(mat) diff --git a/code/datums/components/mind_linker.dm b/code/datums/components/mind_linker.dm index d20745a4cce10..156dc825dd5cc 100644 --- a/code/datums/components/mind_linker.dm +++ b/code/datums/components/mind_linker.dm @@ -60,11 +60,6 @@ src.speech_action_icon_state = speech_action_icon_state src.speech_action_background_icon_state = speech_action_background_icon_state - /* ORIGINAL CODE - master_speech = new(src) - master_speech.Grant(owner) - */ //ORIGINAL CODE END - //SKYRAT EDIT - NIFs if(speech_action) master_speech = new(src) @@ -95,19 +90,6 @@ /datum/component/mind_linker/proc/link_mob(mob/living/to_link) if(QDELETED(to_link) || to_link.stat == DEAD) return FALSE - - /* ORIGINAL CODE - if(HAS_TRAIT(to_link, TRAIT_MINDSHIELD)) // Mindshield implant - no dice - return FALSE - if(to_link.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0)) - return FALSE - */ //ORIGINAL CODE END - //SKYRAT 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 if(linked_mobs[to_link]) return FALSE @@ -267,7 +249,7 @@ var/datum/component/mind_linker/linker = target var/mob/living/linker_parent = linker.parent - var/message = tgui_input_text(owner, "Enter a message to transmit.", "[linker.network_name] Telepathy") + var/message = tgui_input_text(owner, "Enter a message to transmit.", "[linker.network_name] Telepathy", max_length = MAX_MESSAGE_LEN) if(!message || QDELETED(src) || QDELETED(owner) || owner.stat == DEAD) return diff --git a/code/datums/components/mob_harvest.dm b/code/datums/components/mob_harvest.dm index b9f9f86350be5..242161027b069 100644 --- a/code/datums/components/mob_harvest.dm +++ b/code/datums/components/mob_harvest.dm @@ -25,7 +25,7 @@ ///how long it takes to harvest from the mob var/item_harvest_time = 5 SECONDS ///typepath of harvest sound - var/item_harvest_sound = 'sound/items/welder2.ogg' + var/item_harvest_sound = 'sound/items/tools/welder2.ogg' //harvest_type, produced_item_typepath and speedup_type are typepaths, not reference /datum/component/mob_harvest/Initialize(harvest_tool, fed_item, produced_item_typepath, produced_item_desc, max_ready, item_generation_wait, item_reduction_time, item_harvest_time, item_harvest_sound) diff --git a/code/datums/components/omen.dm b/code/datums/components/omen.dm index e4094ba679a7e..bb72654f978ae 100644 --- a/code/datums/components/omen.dm +++ b/code/datums/components/omen.dm @@ -143,12 +143,12 @@ return for(var/obj/machinery/light/evil_light in the_turf) - if((evil_light.status == LIGHT_BURNED || evil_light.status == LIGHT_BROKEN) || (HAS_TRAIT(living_guy, TRAIT_SHOCKIMMUNE))) // we cant do anything :( // Why in the world is there no get_siemens_coeff proc??? + if((evil_light.status == LIGHT_BURNED || evil_light.status == LIGHT_BROKEN) || (HAS_TRAIT(living_guy, TRAIT_SHOCKIMMUNE))) // we can't do anything :( // Why in the world is there no get_siemens_coeff proc??? to_chat(living_guy, span_warning("[evil_light] sparks weakly for a second.")) do_sparks(2, FALSE, evil_light) // hey maybe it'll ignite them return - to_chat(living_guy, span_warning("[evil_light] glows ominously...")) // omenously + to_chat(living_guy, span_warning("[evil_light] glows ominously...")) // ominously evil_light.visible_message(span_boldwarning("[evil_light] suddenly flares brightly and sparks!")) evil_light.break_light_tube(skip_sound_and_sparks = FALSE) do_sparks(number = 4, cardinal_only = FALSE, source = evil_light) diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index 258b8f87972e0..642feee3ac0e8 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -62,13 +62,13 @@ var/directional = FALSE ///Whether we're a beam light var/beam = FALSE - ///A cone overlay for directional light, its alpha and color are dependant on the light + ///A cone overlay for directional light, its alpha and color are dependent on the light var/image/cone ///Current tracked direction for the directional cast behaviour var/current_direction - ///Tracks current directional x offset so we dont update unecessarily + ///Tracks current directional x offset so we don't update unnecessarily var/directional_offset_x - ///Tracks current directional y offset so we dont update unecessarily + ///Tracks current directional y offset so we don't update unnecessarily var/directional_offset_y ///Cast range for the directional cast (how far away the atom is moved) var/cast_range = 2 diff --git a/code/datums/components/pet_commands/pet_command.dm b/code/datums/components/pet_commands/pet_command.dm index a8db88d3a44ef..52b4cc8834920 100644 --- a/code/datums/components/pet_commands/pet_command.dm +++ b/code/datums/components/pet_commands/pet_command.dm @@ -186,14 +186,14 @@ /datum/pet_command/point_targeting/add_new_friend(mob/living/tamer) . = ..() - RegisterSignal(tamer, COMSIG_MOB_POINTED, PROC_REF(on_point)) + RegisterSignal(tamer, COMSIG_MOVABLE_POINTED, PROC_REF(on_point)) /datum/pet_command/point_targeting/remove_friend(mob/living/unfriended) . = ..() - UnregisterSignal(unfriended, COMSIG_MOB_POINTED) + UnregisterSignal(unfriended, COMSIG_MOVABLE_POINTED) /// Target the pointed atom for actions -/datum/pet_command/point_targeting/proc/on_point(mob/living/friend, atom/pointed_atom) +/datum/pet_command/point_targeting/proc/on_point(mob/living/friend, atom/pointed_atom, obj/effect/temp_visual/point/point) 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 9f4dda9cca394..fd4e1f922c8b4 100644 --- a/code/datums/components/pet_commands/pet_commands_basic.dm +++ b/code/datums/components/pet_commands/pet_commands_basic.dm @@ -298,5 +298,5 @@ return ..() /datum/pet_command/point_targeting/fish/execute_action(datum/ai_controller/controller) - controller.queue_behavior(/datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target_combat_mode, BB_CURRENT_PET_TARGET) + controller.queue_behavior(/datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off, BB_CURRENT_PET_TARGET) return SUBTREE_RETURN_FINISH_PLANNING diff --git a/code/datums/components/phylactery.dm b/code/datums/components/phylactery.dm index 99e3165fb4b91..37a46ef24af67 100644 --- a/code/datums/components/phylactery.dm +++ b/code/datums/components/phylactery.dm @@ -18,7 +18,7 @@ var/phylactery_color = COLOR_VERY_DARK_LIME_GREEN // Internal vars. - /// The number of ressurections that have occured from this phylactery. + /// The number of resurrections that have occurred from this phylactery. var/num_resurrections = 0 /// A timerid to the current revival timer. var/revive_timer @@ -150,7 +150,7 @@ UnregisterSignal(source, COMSIG_LIVING_REVIVE) /** - * Actually undergo the process of reviving the lich at the site of the phylacery. + * Actually undergo the process of reviving the lich at the site of the phylactery. * * Arguments * * corpse - optional, the old body of the lich. Can be QDELETED or null. diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index c59be2ed27651..a1be66654a2c0 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -343,7 +343,7 @@ parent_movable.update_appearance() if(changer) - playsound(changer, 'sound/items/ratchet.ogg', 10, TRUE) //sound + playsound(changer, 'sound/items/tools/ratchet.ogg', 10, TRUE) //sound //quickly disconnect and reconnect the network. if(active) diff --git a/code/datums/components/profound_fisher.dm b/code/datums/components/profound_fisher.dm index 4485115db06e6..61f6543bd12bf 100644 --- a/code/datums/components/profound_fisher.dm +++ b/code/datums/components/profound_fisher.dm @@ -1,63 +1,134 @@ -///component that allows player mobs to play the fishing minigame, non-player mobs will "pretend" fish +///component that allows player mobs to play the fishing minigame without a rod equipped, non-player mobs will "pretend" fish /datum/component/profound_fisher ///the fishing rod this mob will use var/obj/item/fishing_rod/mob_fisher/our_rod -/datum/component/profound_fisher/Initialize(list/npc_fishing_preset = list()) - if(!isliving(parent)) - return - our_rod = new(parent) - ADD_TRAIT(parent, TRAIT_PROFOUND_FISHER, REF(src)) +/datum/component/profound_fisher/Initialize(our_rod) + var/isgloves = istype(parent, /obj/item/clothing/gloves) + if(!isliving(parent) && !isgloves) + return COMPONENT_INCOMPATIBLE + src.our_rod = our_rod || new(parent) + src.our_rod.internal = TRUE + RegisterSignal(src.our_rod, COMSIG_QDELETING, PROC_REF(on_rod_qdel)) + + if(!isgloves) + RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + else + var/obj/item/clothing/gloves = parent + RegisterSignal(gloves, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equip)) + RegisterSignal(gloves, COMSIG_ITEM_DROPPED, PROC_REF(on_drop)) + RegisterSignal(gloves, COMSIG_ATOM_ATTACK_HAND_SECONDARY, PROC_REF(open_rod_menu)) + RegisterSignal(gloves, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + gloves.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1 + RegisterSignal(gloves, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item)) + var/mob/living/wearer = gloves.loc + if(istype(wearer) && wearer.get_item_by_slot(ITEM_SLOT_GLOVES) == gloves) + RegisterSignal(wearer, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) -/datum/component/profound_fisher/RegisterWithParent() - RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) +/datum/component/profound_fisher/proc/on_requesting_context_from_item(datum/source, list/context, obj/item/held_item, mob/living/user) + SIGNAL_HANDLER + if(isnull(held_item) && user.contains(parent)) + context[SCREENTIP_CONTEXT_RMB] = "Open rod UI" + return CONTEXTUAL_SCREENTIP_SET -/datum/component/profound_fisher/UnregisterFromParent() - UnregisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET) - REMOVE_TRAIT(parent, TRAIT_PROFOUND_FISHER, REF(src)) +/datum/component/profound_fisher/proc/on_examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + examine_list += span_info("When [EXAMINE_HINT("held")] or [EXAMINE_HINT("equipped")], [EXAMINE_HINT("right-click")] with a empty hand to open the integrated fishing rod interface.") + examine_list += span_tinynoticeital("To fish, you need to turn combat mode off.") + +/datum/component/profound_fisher/proc/on_rod_qdel(datum/source) + SIGNAL_HANDLER + qdel(src) /datum/component/profound_fisher/Destroy() - QDEL_NULL(our_rod) + our_rod.internal = FALSE + UnregisterSignal(our_rod, COMSIG_QDELETING) + our_rod = null return ..() -/datum/component/profound_fisher/proc/pre_attack(datum/source, atom/target) +/datum/component/profound_fisher/proc/on_equip(obj/item/source, atom/equipper, slot) + SIGNAL_HANDLER + if(slot != ITEM_SLOT_GLOVES) + return + RegisterSignal(equipper, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) + +/datum/component/profound_fisher/proc/open_rod_menu(datum/source, mob/user, list/modifiers) + SIGNAL_HANDLER + INVOKE_ASYNC(our_rod, TYPE_PROC_REF(/datum, ui_interact), user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/datum/component/profound_fisher/proc/on_drop(datum/source, atom/dropper) + SIGNAL_HANDLER + UnregisterSignal(dropper, COMSIG_LIVING_UNARMED_ATTACK) + REMOVE_TRAIT(dropper, TRAIT_PROFOUND_FISHER, TRAIT_GENERIC) //this will cancel the current minigame if the fishing rod was internal. + +/datum/component/profound_fisher/proc/on_unarmed_attack(mob/living/source, atom/attack_target, proximity_flag, list/modifiers) + SIGNAL_HANDLER + if(!should_fish_on(source, attack_target)) + return + if(source.client) + INVOKE_ASYNC(src, PROC_REF(begin_fishing), source, attack_target) + else + INVOKE_ASYNC(src, PROC_REF(pretend_fish), source, attack_target) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/datum/component/profound_fisher/proc/pre_attack(mob/living/source, atom/target) SIGNAL_HANDLER - if(!HAS_TRAIT(target, TRAIT_FISHING_SPOT)) - return NONE - var/mob/living/living_parent = parent - if(living_parent.combat_mode || !living_parent.CanReach(target)) - return NONE - if(living_parent.client) - INVOKE_ASYNC(our_rod, TYPE_PROC_REF(/obj/item, melee_attack_chain), parent, target) + if(!should_fish_on(source, target)) + return + if(source.client) + INVOKE_ASYNC(src, PROC_REF(begin_fishing), source, target) else - INVOKE_ASYNC(src, PROC_REF(pretend_fish), target) + INVOKE_ASYNC(src, PROC_REF(pretend_fish), source, target) return COMPONENT_HOSTILE_NO_ATTACK -/datum/component/profound_fisher/proc/pretend_fish(atom/target) - var/mob/living/living_parent = parent - if(DOING_INTERACTION_WITH_TARGET(living_parent, target)) +/datum/component/profound_fisher/proc/should_fish_on(mob/living/user, atom/target) + if(!HAS_TRAIT(target, TRAIT_FISHING_SPOT) || GLOB.fishing_challenges_by_user[user]) + return FALSE + if(user.combat_mode || !user.CanReach(target)) + return FALSE + return TRUE + +/datum/component/profound_fisher/proc/begin_fishing(mob/living/user, atom/target) + RegisterSignal(user, COMSIG_MOB_BEGIN_FISHING, PROC_REF(actually_fishing_with_internal_rod)) + our_rod.melee_attack_chain(user, target) + UnregisterSignal(user, COMSIG_MOB_BEGIN_FISHING) + +/datum/component/profound_fisher/proc/actually_fishing_with_internal_rod(datum/source) + SIGNAL_HANDLER + ADD_TRAIT(source, TRAIT_PROFOUND_FISHER, REF(parent)) + RegisterSignal(source, COMSIG_MOB_COMPLETE_FISHING, PROC_REF(remove_profound_fisher)) + +/datum/component/profound_fisher/proc/remove_profound_fisher(datum/source) + SIGNAL_HANDLER + REMOVE_TRAIT(source, TRAIT_PROFOUND_FISHER, TRAIT_GENERIC) + UnregisterSignal(source, COMSIG_MOB_COMPLETE_FISHING) + +/datum/component/profound_fisher/proc/pretend_fish(mob/living/source, atom/target) + if(DOING_INTERACTION_WITH_TARGET(source, target)) return var/list/fish_spot_container[NPC_FISHING_SPOT] SEND_SIGNAL(target, COMSIG_NPC_FISHING, fish_spot_container) var/datum/fish_source/fish_spot = fish_spot_container[NPC_FISHING_SPOT] if(isnull(fish_spot)) return null - var/obj/effect/fishing_lure/lure = new(get_turf(target), target) - playsound(lure, 'sound/effects/splash.ogg', 100) - var/happiness_percentage = living_parent.ai_controller?.blackboard[BB_BASIC_HAPPINESS] / 100 - var/fishing_speed = 10 SECONDS - round(4 SECONDS * happiness_percentage) - if(!do_after(living_parent, fishing_speed, target = target) && !QDELETED(fish_spot)) - qdel(lure) - return - var/reward_loot = fish_spot.roll_reward(our_rod, parent) - fish_spot.dispense_reward(reward_loot, parent, target) - playsound(lure, 'sound/effects/bigsplash.ogg', 100) - qdel(lure) + var/obj/effect/fishing_float/float = new(get_turf(target), target) + playsound(float, 'sound/effects/splash.ogg', 100) + if(!PERFORM_ALL_TESTS(fish_sources)) + var/happiness_percentage = source.ai_controller?.blackboard[BB_BASIC_HAPPINESS] * 0.01 + var/fishing_speed = 10 SECONDS - round(4 SECONDS * happiness_percentage) + if(!do_after(source, fishing_speed, target = target) && !QDELETED(fish_spot)) + qdel(float) + return + var/reward_loot = fish_spot.roll_reward(our_rod, source) + fish_spot.dispense_reward(reward_loot, source, target) + playsound(float, 'sound/effects/bigsplash.ogg', 100) + qdel(float) /obj/item/fishing_rod/mob_fisher - display_fishing_line = FALSE line = /obj/item/fishing_line/reinforced bait = /obj/item/food/bait/doughball/synthetic/unconsumable - - + resistance_flags = INDESTRUCTIBLE + reel_overlay = null + show_in_wiki = FALSE //abstract fishing rod diff --git a/code/datums/components/ranged_attacks.dm b/code/datums/components/ranged_attacks.dm index 2f9c6cb822da5..58883ce58111f 100644 --- a/code/datums/components/ranged_attacks.dm +++ b/code/datums/components/ranged_attacks.dm @@ -20,7 +20,7 @@ /datum/component/ranged_attacks/Initialize( casing_type, projectile_type, - projectile_sound = 'sound/weapons/gun/pistol/shot.ogg', + projectile_sound = 'sound/items/weapons/gun/pistol/shot.ogg', burst_shots, burst_intervals = 0.2 SECONDS, cooldown_time = 3 SECONDS, diff --git a/code/datums/components/regenerative_shield.dm b/code/datums/components/regenerative_shield.dm index 5ecf670820381..34d305b27e13f 100644 --- a/code/datums/components/regenerative_shield.dm +++ b/code/datums/components/regenerative_shield.dm @@ -59,7 +59,7 @@ if(damage >= damage_threshold || number_of_hits <= 0) return NONE - playsound(get_turf(parent), 'sound/weapons/tap.ogg', 20) + playsound(get_turf(parent), 'sound/items/weapons/tap.ogg', 20) new /obj/effect/temp_visual/guardian/phase/out(get_turf(parent)) number_of_hits = max(0, number_of_hits - 1) if(number_of_hits <= 0) @@ -71,14 +71,14 @@ for(var/obj/effect/my_effect as anything in shield_overlays) animate(my_effect, alpha = 0, time = 3 SECONDS) my_effect.remove_filter(SHIELD_FILTER) - playsound(parent, 'sound/mecha/mech_shield_drop.ogg', 20) + playsound(parent, 'sound/vehicles/mecha/mech_shield_drop.ogg', 20) /datum/component/regenerative_shield/proc/enable_shield() number_of_hits = initial(number_of_hits) for(var/obj/effect/my_effect as anything in shield_overlays) animate(my_effect, alpha = 255, time = 3 SECONDS) addtimer(CALLBACK(src, PROC_REF(apply_filter_effects), my_effect), 5 SECONDS) - playsound(parent, 'sound/mecha/mech_shield_raise.ogg', 20) + playsound(parent, 'sound/vehicles/mecha/mech_shield_raise.ogg', 20) /datum/component/regenerative_shield/proc/apply_filter_effects(obj/effect/new_effect) if(isnull(new_effect)) diff --git a/code/datums/components/religious_tool.dm b/code/datums/components/religious_tool.dm index 37b62d1aa0e3c..969e6a9a3cec1 100644 --- a/code/datums/components/religious_tool.dm +++ b/code/datums/components/religious_tool.dm @@ -159,15 +159,15 @@ /datum/component/religious_tool/proc/perform_rite(mob/living/user, path) if(user.mind.holy_role < HOLY_ROLE_PRIEST) if(user.mind.holy_role == HOLY_ROLE_DEACON) - to_chat(user, "You are merely a deacon of [GLOB.deity], and therefore cannot perform rites.") + to_chat(user, span_warning("You are merely a deacon of [GLOB.deity], and therefore cannot perform rites.")) else - to_chat(user, "You are not holy, and therefore cannot perform rites.") + to_chat(user, span_warning("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.") + to_chat(user, span_notice("There is a rite currently being performed here already.")) return if(!user.can_perform_action(parent, FORBID_TELEKINESIS_REACH)) to_chat(user,span_warning("You are not close enough to perform the rite.")) diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm index 8d4b7e6f2cb2f..a125d650513d0 100644 --- a/code/datums/components/riding/riding_mob.dm +++ b/code/datums/components/riding/riding_mob.dm @@ -13,7 +13,9 @@ var/can_use_abilities = FALSE /// shall we require riders to go through the riding minigame if they arent in our friends list var/require_minigame = FALSE - /// list of blacklisted abilities that cant be shared + /// unsharable abilities that we will force to be shared anyway + var/list/override_unsharable_abilities = list() + /// abilities that are always blacklisted from sharing var/list/blacklist_abilities = list() /datum/component/riding/creature/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE) @@ -64,10 +66,10 @@ if(living_parent.body_position != STANDING_UP) // if we move while on the ground, the rider falls off . = FALSE // for piggybacks and (redundant?) borg riding, check if the rider is stunned/restrained - else if((ride_check_flags & RIDER_NEEDS_ARMS) && (HAS_TRAIT(rider, TRAIT_RESTRAINED) || rider.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB))) + else if((ride_check_flags & RIDER_NEEDS_ARMS) && (HAS_TRAIT(rider, TRAIT_RESTRAINED) || INCAPACITATED_IGNORING(rider, INCAPABLE_RESTRAINTS|INCAPABLE_GRAB))) . = FALSE // 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))) + else if((ride_check_flags & CARRIER_NEEDS_ARM) && (HAS_TRAIT(living_parent, TRAIT_RESTRAINED) || INCAPACITATED_IGNORING(living_parent, INCAPABLE_RESTRAINTS|INCAPABLE_GRAB))) . = FALSE else if((ride_check_flags & JUST_FRIEND_RIDERS) && !(living_parent.faction.Find(REF(rider)))) . = FALSE @@ -174,6 +176,8 @@ for(var/datum/action/action as anything in ridden_creature.actions) if(is_type_in_list(action, blacklist_abilities)) continue + if(!action.can_be_shared && !is_type_in_list(action, override_unsharable_abilities)) + continue action.GiveAction(rider) /// Takes away the riding parent's abilities from the rider @@ -412,7 +416,7 @@ if(human_user && is_clown_job(human_user.mind?.assigned_role)) // there's a new sheriff in town - playsound(movable_parent, 'sound/creatures/pony/clown_gallup.ogg', 50) + playsound(movable_parent, 'sound/mobs/non-humanoids/pony/clown_gallup.ogg', 50) COOLDOWN_START(src, pony_trot_cooldown, 500 MILLISECONDS) /datum/component/riding/creature/bear/handle_specials() @@ -531,7 +535,6 @@ /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() @@ -540,9 +543,9 @@ /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)) + RegisterSignal(riding_mob, COMSIG_MOVABLE_POINTED, PROC_REF(attack_pointed)) -/datum/component/riding/creature/leaper/proc/attack_pointed(mob/living/rider, atom/pointed) +/datum/component/riding/creature/leaper/proc/attack_pointed(mob/living/rider, atom/pointed, obj/effect/temp_visual/point/point) SIGNAL_HANDLER if(!isclosedturf(pointed)) return @@ -554,7 +557,7 @@ /datum/component/riding/leaper/handle_unbuckle(mob/living/rider) . = ..() - UnregisterSignal(rider, COMSIG_MOB_POINTED) + UnregisterSignal(rider, COMSIG_MOVABLE_POINTED) /datum/component/riding/creature/raptor require_minigame = TRUE diff --git a/code/datums/components/riding/riding_vehicle.dm b/code/datums/components/riding/riding_vehicle.dm index 0d6d4a4c9677f..ee2835fc7b3bf 100644 --- a/code/datums/components/riding/riding_vehicle.dm +++ b/code/datums/components/riding/riding_vehicle.dm @@ -15,19 +15,19 @@ if(!keycheck(rider)) if(z_move_flags & ZMOVE_FEEDBACK) - to_chat(rider, "[movable_parent] has no key inserted!") + to_chat(rider, span_warning("[movable_parent] has no key inserted!")) return COMPONENT_RIDDEN_STOP_Z_MOVE if(HAS_TRAIT(rider, TRAIT_INCAPACITATED)) if(z_move_flags & ZMOVE_FEEDBACK) - to_chat(rider, "You cannot operate [movable_parent] right now!") + to_chat(rider, span_warning("You cannot operate [movable_parent] right now!")) return COMPONENT_RIDDEN_STOP_Z_MOVE if(ride_check_flags & RIDER_NEEDS_LEGS && HAS_TRAIT(rider, TRAIT_FLOORED)) if(z_move_flags & ZMOVE_FEEDBACK) - to_chat(rider, "You can't seem to manage that while unable to stand up enough to move [movable_parent]...") + to_chat(rider, span_warning("You can't seem to manage that while unable to stand up enough to move [movable_parent]...")) return COMPONENT_RIDDEN_STOP_Z_MOVE if(ride_check_flags & RIDER_NEEDS_ARMS && HAS_TRAIT(rider, TRAIT_HANDS_BLOCKED)) if(z_move_flags & ZMOVE_FEEDBACK) - to_chat(rider, "You can't seem to hold onto [movable_parent] to move it...") + to_chat(rider, span_warning("You can't seem to hold onto [movable_parent] to move it...")) return COMPONENT_RIDDEN_STOP_Z_MOVE return COMPONENT_RIDDEN_ALLOW_Z_MOVE diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index 6ff8197e09319..40df294af12a8 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -76,7 +76,7 @@ var/obj/rotated_obj = parent rotated_obj.setDir(turn(rotated_obj.dir, degrees)) if(rotation_flags & ROTATION_REQUIRE_WRENCH) - playsound(rotated_obj, 'sound/items/ratchet.ogg', 50, TRUE) + playsound(rotated_obj, 'sound/items/tools/ratchet.ogg', 50, TRUE) post_rotation.Invoke(user, degrees) diff --git a/code/datums/components/scope.dm b/code/datums/components/scope.dm index 087eb0c06d24c..46388a15e26e8 100644 --- a/code/datums/components/scope.dm +++ b/code/datums/components/scope.dm @@ -164,7 +164,7 @@ if(HAS_TRAIT(user, TRAIT_USER_SCOPED)) user.balloon_alert(user, "already zoomed!") return - user.playsound_local(parent, 'sound/weapons/scope.ogg', 75, TRUE) + user.playsound_local(parent, 'sound/items/weapons/scope.ogg', 75, TRUE) 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 @@ -210,7 +210,7 @@ )) REMOVE_TRAIT(user, TRAIT_USER_SCOPED, REF(src)) - user.playsound_local(parent, 'sound/weapons/scope.ogg', 75, TRUE, frequency = -1) + user.playsound_local(parent, 'sound/items/weapons/scope.ogg', 75, TRUE, frequency = -1) user.clear_fullscreen("scope") // if the client has ended up in another mob, find that mob so we can fix their cursor @@ -246,18 +246,18 @@ if(isnull(icon_x)) icon_x = text2num(LAZYACCESS(modifiers, ICON_X)) if(isnull(icon_x)) - icon_x = view_list[1]*world.icon_size/2 + icon_x = view_list[1]*ICON_SIZE_X/2 var/icon_y = text2num(LAZYACCESS(modifiers, VIS_Y)) if(isnull(icon_y)) icon_y = text2num(LAZYACCESS(modifiers, ICON_Y)) if(isnull(icon_y)) - icon_y = view_list[2]*world.icon_size/2 - var/x_cap = range_modifier * view_list[1]*world.icon_size / 2 - var/y_cap = range_modifier * view_list[2]*world.icon_size / 2 - var/uncapped_x = round(range_modifier * (icon_x - view_list[1]*world.icon_size/2) * MOUSE_POINTER_OFFSET_MULT) - var/uncapped_y = round(range_modifier * (icon_y - view_list[2]*world.icon_size/2) * MOUSE_POINTER_OFFSET_MULT) + icon_y = view_list[2]*ICON_SIZE_Y/2 + var/x_cap = range_modifier * view_list[1]*ICON_SIZE_X / 2 + var/y_cap = range_modifier * view_list[2]*ICON_SIZE_Y / 2 + var/uncapped_x = round(range_modifier * (icon_x - view_list[1]*ICON_SIZE_X/2) * MOUSE_POINTER_OFFSET_MULT) + var/uncapped_y = round(range_modifier * (icon_y - view_list[2]*ICON_SIZE_Y/2) * MOUSE_POINTER_OFFSET_MULT) given_x = clamp(uncapped_x, -x_cap, x_cap) given_y = clamp(uncapped_y, -y_cap, y_cap) - given_turf = locate(owner.x+round(given_x/world.icon_size, 1),owner.y+round(given_y/world.icon_size, 1),owner.z) + given_turf = locate(owner.x+round(given_x/ICON_SIZE_X, 1),owner.y+round(given_y/ICON_SIZE_Y, 1),owner.z) #undef MOUSE_POINTER_OFFSET_MULT diff --git a/code/datums/components/seclight_attachable.dm b/code/datums/components/seclight_attachable.dm index b1d4aebc93f83..6b3991c9c5e3c 100644 --- a/code/datums/components/seclight_attachable.dm +++ b/code/datums/components/seclight_attachable.dm @@ -97,8 +97,8 @@ RegisterSignal(parent, COMSIG_ITEM_UI_ACTION_CLICK, PROC_REF(on_action_click)) RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ATOM_SABOTEUR_ACT, PROC_REF(on_hit_by_saboteur)) RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_parent_deleted)) - RegisterSignal(parent, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /datum/component/seclite_attachable/UnregisterFromParent() UnregisterSignal(parent, list( @@ -110,6 +110,7 @@ COMSIG_ITEM_UI_ACTION_CLICK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_SABOTEUR_ACT, COMSIG_QDELETING, )) @@ -296,8 +297,8 @@ // but that's the downside of using icon states over overlays. source.icon_state = base_state -/// Signal proc for [COMSIG_HIT_BY_SABOTEUR] that turns the light off for a few seconds. -/datum/component/seclite_attachable/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +//turns the light off for a few seconds. +/datum/component/seclite_attachable/proc/on_hit_by_saboteur(datum/source, disrupt_duration) . = light.on_saboteur(source, disrupt_duration) update_light() + return . diff --git a/code/datums/components/seethrough_mob.dm b/code/datums/components/seethrough_mob.dm index bae87faf61583..b6951c5489b6d 100644 --- a/code/datums/components/seethrough_mob.dm +++ b/code/datums/components/seethrough_mob.dm @@ -122,6 +122,7 @@ background_icon_state = "bg_alien" cooldown_time = 1 SECONDS melee_cooldown_time = 0 + can_be_shared = FALSE /datum/action/cooldown/toggle_seethrough/Remove(mob/remove_from) var/datum/component/seethrough_mob/transparency = target diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index da83c4ad2d29d..53fc330806245 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -101,7 +101,7 @@ var/obj/item/item_parent = parent COOLDOWN_START(src, charge_add_cd, charge_increment_delay) adjust_charge(charge_recovery) // set the number of charges to current + recovery per increment, clamped from zero to max_charges - playsound(item_parent, 'sound/magic/charge.ogg', 50, TRUE) + playsound(item_parent, 'sound/effects/magic/charge.ogg', 50, TRUE) if(current_charges == max_charges) playsound(item_parent, 'sound/machines/ding.ogg', 50, TRUE) diff --git a/code/datums/components/singularity.dm b/code/datums/components/singularity.dm index 14aaedff7172a..0cd64d829a2fd 100644 --- a/code/datums/components/singularity.dm +++ b/code/datums/components/singularity.dm @@ -373,7 +373,7 @@ for(var/mob/living/target as anything in GLOB.mob_living_list) if(target.z != atom_parent.z) continue - if(target.status_effects & GODMODE) + if(HAS_TRAIT(target, TRAIT_GODMODE)) continue var/distance_from_target = get_dist(target, atom_parent) if(distance_from_target < closest_distance) diff --git a/code/datums/components/sisyphus_awarder.dm b/code/datums/components/sisyphus_awarder.dm index 2a18a2889fc65..854ed26355f25 100644 --- a/code/datums/components/sisyphus_awarder.dm +++ b/code/datums/components/sisyphus_awarder.dm @@ -65,4 +65,4 @@ "reverse_dropoff_coords" = list(bottom_of_the_hill.x, bottom_of_the_hill.y, bottom_of_the_hill.z), )) - SEND_SOUND(sisyphus, 'sound/ambience/music/sisyphus/sisyphus.ogg') + SEND_SOUND(sisyphus, 'sound/music/sisyphus/sisyphus.ogg') diff --git a/code/datums/components/sitcomlaughter.dm b/code/datums/components/sitcomlaughter.dm index 62e9276b1d75d..bc69a08b80c9d 100644 --- a/code/datums/components/sitcomlaughter.dm +++ b/code/datums/components/sitcomlaughter.dm @@ -1,10 +1,10 @@ /datum/component/wearertargeting/sitcomlaughter valid_slots = list(ITEM_SLOT_HANDS, ITEM_SLOT_BELT, ITEM_SLOT_ID, ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET, ITEM_SLOT_SUITSTORE, ITEM_SLOT_DEX_STORAGE) - signals = list(COMSIG_MOB_CREAMED, COMSIG_ON_CARBON_SLIP, COMSIG_POST_TILT_AND_CRUSH, COMSIG_MOB_CLUMSY_SHOOT_FOOT) + signals = list(COMSIG_MOB_HIT_BY_SPLAT, COMSIG_ON_CARBON_SLIP, COMSIG_POST_TILT_AND_CRUSH, COMSIG_MOB_CLUMSY_SHOOT_FOOT) proctype = PROC_REF(EngageInComedy) mobtype = /mob/living ///Sounds used for when user has a sitcom action occur - var/list/comedysounds = list('sound/items/SitcomLaugh1.ogg', 'sound/items/SitcomLaugh2.ogg', 'sound/items/SitcomLaugh3.ogg') + var/list/comedysounds = list('sound/items/sitcom_laugh/sitcomLaugh1.ogg', 'sound/items/sitcom_laugh/sitcomLaugh2.ogg', 'sound/items/sitcom_laugh/sitcomLaugh3.ogg') ///Invoked in EngageInComedy is ran var/datum/callback/post_comedy_callback ///Cooldown for inbetween laughs diff --git a/code/datums/components/soapbox.dm b/code/datums/components/soapbox.dm index 4d4577d5e12c8..9d15e5e69292c 100644 --- a/code/datums/components/soapbox.dm +++ b/code/datums/components/soapbox.dm @@ -14,15 +14,17 @@ RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(parent_moved)) ///Applies loud speech to our movable when entering the turf our parent is on -/datum/component/soapbox/proc/on_loc_entered(datum/source, atom/movable/soapbox_arrive) +/datum/component/soapbox/proc/on_loc_entered(datum/source, mob/living/soapbox_arrive) SIGNAL_HANDLER + if(!isliving(soapbox_arrive)) + return if(QDELETED(soapbox_arrive)) return RegisterSignal(soapbox_arrive, COMSIG_MOB_SAY, PROC_REF(soapbox_speech)) soapboxers += soapbox_arrive ///Takes away loud speech from our movable when it leaves the turf our parent is on -/datum/component/soapbox/proc/on_loc_exited(datum/source, atom/movable/soapbox_leave) +/datum/component/soapbox/proc/on_loc_exited(datum/source, mob/living/soapbox_leave) SIGNAL_HANDLER if(soapbox_leave in soapboxers) UnregisterSignal(soapbox_leave, COMSIG_MOB_SAY) diff --git a/code/datums/components/soulstoned.dm b/code/datums/components/soulstoned.dm index bb22030c21042..d4e9e0eaf02e1 100644 --- a/code/datums/components/soulstoned.dm +++ b/code/datums/components/soulstoned.dm @@ -11,8 +11,7 @@ stoned.forceMove(container) stoned.fully_heal() - stoned.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), SOULSTONE_TRAIT) - stoned.status_flags |= GODMODE + stoned.add_traits(list(TRAIT_GODMODE, TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), SOULSTONE_TRAIT) RegisterSignal(stoned, COMSIG_MOVABLE_MOVED, PROC_REF(free_prisoner)) @@ -25,5 +24,4 @@ /datum/component/soulstoned/UnregisterFromParent() var/mob/living/stoned = parent - stoned.status_flags &= ~GODMODE - stoned.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), SOULSTONE_TRAIT) + stoned.remove_traits(list(TRAIT_GODMODE, TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED), SOULSTONE_TRAIT) diff --git a/code/datums/components/space_kidnap.dm b/code/datums/components/space_kidnap.dm index 8a1de2123d9d3..7d59a6d7f9fde 100644 --- a/code/datums/components/space_kidnap.dm +++ b/code/datums/components/space_kidnap.dm @@ -23,7 +23,7 @@ target.balloon_alert(parent, "is dead!") return COMPONENT_CANCEL_ATTACK_CHAIN - if(!victim.incapacitated()) + if(!victim.incapacitated) return if(!isspaceturf(get_turf(target))) @@ -39,7 +39,7 @@ var/obj/particles = new /obj/effect/abstract/particle_holder (victim, /particles/void_kidnap) kidnapping = TRUE - if(do_after(parent, kidnap_time, victim, extra_checks = CALLBACK(victim, TYPE_PROC_REF(/mob, incapacitated)))) + if(do_after(parent, kidnap_time, victim, extra_checks = victim.incapacitated)) take_them(victim) qdel(particles) diff --git a/code/datums/components/speechmod.dm b/code/datums/components/speechmod.dm index 8ffa3e8624e49..fc01d8d2d846c 100644 --- a/code/datums/components/speechmod.dm +++ b/code/datums/components/speechmod.dm @@ -60,6 +60,8 @@ var/message = speech_args[SPEECH_MESSAGE] if(message[1] == "*") return + if(SEND_SIGNAL(source, COMSIG_TRY_MODIFY_SPEECH) & PREVENT_MODIFY_SPEECH) + return if(!isnull(should_modify_speech) && !should_modify_speech.Invoke(source, speech_args)) return diff --git a/code/datums/components/spin2win.dm b/code/datums/components/spin2win.dm index 4524b403355f8..ce9dfa360b323 100644 --- a/code/datums/components/spin2win.dm +++ b/code/datums/components/spin2win.dm @@ -84,7 +84,7 @@ if(start_spin_message) var/message = replacetext(start_spin_message, "%USER", spinning_user) spinning_user.visible_message(message) - playsound(spinning_user, 'sound/weapons/fwoosh.ogg', 75, FALSE) + playsound(spinning_user, 'sound/items/weapons/fwoosh.ogg', 75, FALSE) stop_spinning_timer_id = addtimer(CALLBACK(src, PROC_REF(stop_spinning), spinning_user), spin_duration, TIMER_STOPPABLE|TIMER_DELETE_ME) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_spin_equipped)) RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_spin_dropped)) @@ -95,7 +95,7 @@ STOP_PROCESSING(SSprocessing, src) UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) deltimer(stop_spinning_timer_id) - playsound(user, 'sound/weapons/fwoosh.ogg', 75, FALSE) + playsound(user, 'sound/items/weapons/fwoosh.ogg', 75, FALSE) if(user && end_spin_message) var/message = replacetext(end_spin_message, "%USER", user) user.visible_message(message) @@ -111,7 +111,7 @@ return PROCESS_KILL var/mob/living/item_owner = spinning_item.loc item_owner.emote("spin") - playsound(item_owner, 'sound/weapons/fwoosh.ogg', 75, FALSE) + playsound(item_owner, 'sound/items/weapons/fwoosh.ogg', 75, FALSE) for(var/mob/living/victim in orange(1, item_owner)) spinning_item.attack(victim, item_owner) diff --git a/code/datums/components/spirit_holding.dm b/code/datums/components/spirit_holding.dm index b510fde3523a4..11ceb778313a9 100644 --- a/code/datums/components/spirit_holding.dm +++ b/code/datums/components/spirit_holding.dm @@ -149,7 +149,7 @@ return // just in case var/atom/movable/exorcised_movable = parent to_chat(exorcist, span_notice("You begin to exorcise [parent]...")) - playsound(parent, 'sound/hallucinations/veryfar_noise.ogg',40,TRUE) + playsound(parent, 'sound/effects/hallucinations/veryfar_noise.ogg',40,TRUE) if(!do_after(exorcist, 4 SECONDS, target = exorcised_movable)) return playsound(parent, 'sound/effects/pray_chaplain.ogg',60,TRUE) diff --git a/code/datums/components/splat.dm b/code/datums/components/splat.dm new file mode 100644 index 0000000000000..5d47d17b98c9c --- /dev/null +++ b/code/datums/components/splat.dm @@ -0,0 +1,74 @@ +/datum/component/splat + ///The icon state to use for the decal + var/icon_state + ///The bodypart layer to use for the decal + var/layer + ///The type of memory to celebrate the event of getting hit by this + var/memory_type + ///The type of smudge we create on the floor + var/smudge_type + ///The moodlet passed down to the creamed component + var/moodlet_type + ///The color we give to the creamed component/overlay + var/splat_color + ///The callback called when a mob is hit by this + var/datum/callback/hit_callback + +/datum/component/splat/Initialize( + icon_state = "creampie", + layer = EXTERNAL_FRONT, + memory_type = /datum/memory/witnessed_creampie, + smudge_type = /obj/effect/decal/cleanable/food/pie_smudge, + moodlet_type = /datum/mood_event/creampie, + splat_color, + datum/callback/hit_callback, +) + . = ..() + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + + src.icon_state = icon_state + src.layer = layer + src.memory_type = memory_type + src.smudge_type = smudge_type + src.moodlet_type = moodlet_type + src.hit_callback = hit_callback + src.splat_color = splat_color + +/datum/component/splat/Destroy() + hit_callback = null + return ..() + +/datum/component/splat/RegisterWithParent() + if(isprojectile(parent)) + RegisterSignal(parent, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(projectile_splat)) + else + RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, PROC_REF(throw_splat)) + +/datum/component/splat/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_MOVABLE_IMPACT, COMSIG_PROJECTILE_SELF_ON_HIT)) + +/datum/component/splat/proc/projectile_splat(obj/projectile/source, atom/firer, atom/target, angle, hit_limb_zone, blocked) + SIGNAL_HANDLER + if(blocked != 100) + splat(source, target) + +/datum/component/splat/proc/throw_splat(atom/movable/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) + SIGNAL_HANDLER + if(caught) //someone caught us! + return + splat(source, hit_atom) + +/datum/component/splat/proc/splat(atom/movable/source, atom/hit_atom) + var/turf/hit_turf = get_turf(hit_atom) + new smudge_type(hit_turf) + var/can_splat_on = TRUE + if(isliving(hit_atom)) + var/mob/living/living_target_getting_hit = hit_atom + if(iscarbon(living_target_getting_hit)) + can_splat_on = !!(living_target_getting_hit.get_bodypart(BODY_ZONE_HEAD)) + hit_callback?.Invoke(living_target_getting_hit, can_splat_on) + if(can_splat_on && is_type_in_typecache(hit_atom, GLOB.splattable)) + hit_atom.AddComponent(/datum/component/face_decal/splat, icon_state, layer, splat_color || source.color, memory_type, moodlet_type) + SEND_SIGNAL(source, COMSIG_MOVABLE_SPLAT, hit_atom) + qdel(source) diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index 94521486bcc5f..afd8cce49e8c7 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -1,5 +1,5 @@ /datum/component/squeak - var/static/list/default_squeak_sounds = list('sound/items/toysqueak1.ogg'=1, 'sound/items/toysqueak2.ogg'=1, 'sound/items/toysqueak3.ogg'=1) + var/static/list/default_squeak_sounds = list('sound/items/toy_squeak/toysqueak1.ogg'=1, 'sound/items/toy_squeak/toysqueak2.ogg'=1, 'sound/items/toy_squeak/toysqueak3.ogg'=1) var/list/override_squeak_sounds var/mob/holder diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm index 35f67d9cd0295..8b59717da70b8 100644 --- a/code/datums/components/stationloving.dm +++ b/code/datums/components/stationloving.dm @@ -61,7 +61,7 @@ CRASH("Unable to find a blobstart landmark for [type] to relocate [parent].") var/atom/movable/movable_parent = parent - playsound(movable_parent, 'sound/machines/synth_no.ogg', 5, TRUE) + playsound(movable_parent, 'sound/machines/synth/synth_no.ogg', 5, TRUE) var/mob/holder = get(movable_parent, /mob) if(holder) diff --git a/code/datums/components/sticker.dm b/code/datums/components/sticker.dm index 2c87d856da872..b627f9923204b 100644 --- a/code/datums/components/sticker.dm +++ b/code/datums/components/sticker.dm @@ -13,18 +13,21 @@ var/atom/movable/our_sticker /// Reference to the created overlay, used during component deletion. var/mutable_appearance/sticker_overlay - // Callback invoked when sticker is applied to the parent. + /// Callback invoked when sticker is applied to the parent. var/datum/callback/stick_callback - // Callback invoked when sticker is peeled (not removed) from the parent. + /// Callback invoked when sticker is peeled (not removed) from the parent. var/datum/callback/peel_callback + /// Text added to the atom's examine when stickered. + var/examine_text -/datum/component/sticker/Initialize(atom/stickering_atom, dir = NORTH, px = 0, py = 0, datum/callback/stick_callback, datum/callback/peel_callback) +/datum/component/sticker/Initialize(atom/stickering_atom, dir = NORTH, px = 0, py = 0, datum/callback/stick_callback, datum/callback/peel_callback, examine_text) if(!isatom(parent)) return COMPONENT_INCOMPATIBLE src.our_sticker = our_sticker src.stick_callback = stick_callback src.peel_callback = peel_callback + src.examine_text = examine_text stick(stickering_atom, px, py) register_turf_signals(dir) @@ -45,9 +48,10 @@ /datum/component/sticker/RegisterWithParent() RegisterSignal(parent, COMSIG_LIVING_IGNITED, PROC_REF(on_ignite)) RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(on_clean)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) /datum/component/sticker/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_LIVING_IGNITED, COMSIG_COMPONENT_CLEAN_ACT)) + UnregisterSignal(parent, list(COMSIG_LIVING_IGNITED, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_ATOM_EXAMINE)) /// Subscribes to `COMSIG_TURF_EXPOSE` if parent atom is a turf. If turf is closed - subscribes to signal /datum/component/sticker/proc/register_turf_signals(dir) @@ -80,8 +84,8 @@ var/atom/parent_atom = parent sticker_overlay = mutable_appearance(icon = our_sticker.icon, icon_state = our_sticker.icon_state, layer = parent_atom.layer + 0.01, appearance_flags = RESET_COLOR) - sticker_overlay.pixel_w = px - world.icon_size / 2 - sticker_overlay.pixel_z = py - world.icon_size / 2 + sticker_overlay.pixel_w = px - ICON_SIZE_X / 2 + sticker_overlay.pixel_z = py - ICON_SIZE_Y / 2 parent_atom.add_overlay(sticker_overlay) stick_callback?.Invoke(parent) @@ -116,3 +120,9 @@ if(exposed_temperature >= FIRE_MINIMUM_TEMPERATURE_TO_EXIST) qdel(our_sticker) // which qdels us + +/datum/component/sticker/proc/on_examine(atom/source, mob/user, list/examine_list) + SIGNAL_HANDLER + + if(!isnull(examine_text)) + examine_list += span_warning(examine_text) diff --git a/code/datums/components/style/style.dm b/code/datums/components/style/style.dm index 04bb25cc2c323..2d60d27ebb81c 100644 --- a/code/datums/components/style/style.dm +++ b/code/datums/components/style/style.dm @@ -100,8 +100,7 @@ RegisterSignal(parent, COMSIG_USER_ITEM_INTERACTION, PROC_REF(hotswap)) RegisterSignal(parent, COMSIG_MOB_MINED, PROC_REF(on_mine)) RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_take_damage)) - RegisterSignal(parent, COMSIG_MOB_EMOTED("flip"), PROC_REF(on_flip)) - RegisterSignal(parent, COMSIG_MOB_EMOTED("spin"), PROC_REF(on_spin)) + RegisterSignal(parent, COMSIG_MOB_EMOTED("taunt"), PROC_REF(on_taunt)) RegisterSignal(parent, COMSIG_MOB_ITEM_ATTACK, PROC_REF(on_attack)) RegisterSignal(parent, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_punch)) RegisterSignal(SSdcs, COMSIG_GLOB_MOB_DEATH, PROC_REF(on_death)) @@ -116,7 +115,7 @@ UnregisterSignal(parent, COMSIG_USER_ITEM_INTERACTION) UnregisterSignal(parent, COMSIG_MOB_MINED) UnregisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE) - UnregisterSignal(parent, list(COMSIG_MOB_EMOTED("flip"), COMSIG_MOB_EMOTED("spin"))) + UnregisterSignal(parent, COMSIG_MOB_EMOTED("taunt")) UnregisterSignal(parent, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_LIVING_UNARMED_ATTACK)) UnregisterSignal(SSdcs, COMSIG_GLOB_MOB_DEATH) UnregisterSignal(parent, COMSIG_LIVING_RESONATOR_BURST) @@ -420,19 +419,12 @@ // Emote-based multipliers -/datum/component/style/proc/on_flip() +/datum/component/style/proc/on_taunt() SIGNAL_HANDLER point_multiplier = round(min(point_multiplier + 0.5, 3), 0.1) update_screen() -/datum/component/style/proc/on_spin() - SIGNAL_HANDLER - - point_multiplier = round(min(point_multiplier + 0.3, 3), 0.1) - update_screen() - - // Negative effects /datum/component/style/proc/on_take_damage(...) SIGNAL_HANDLER diff --git a/code/datums/components/subtype_picker.dm b/code/datums/components/subtype_picker.dm index 78401c9e02293..2cc76e42ecf1f 100644 --- a/code/datums/components/subtype_picker.dm +++ b/code/datums/components/subtype_picker.dm @@ -87,6 +87,6 @@ return FALSE if(QDELETED(target)) return FALSE - if(user.incapacitated() || !user.is_holding(target)) + if(user.incapacitated || !user.is_holding(target)) return FALSE return TRUE diff --git a/code/datums/components/summoning.dm b/code/datums/components/summoning.dm index 69ade1e2f1b56..4821f70d006d3 100644 --- a/code/datums/components/summoning.dm +++ b/code/datums/components/summoning.dm @@ -24,7 +24,7 @@ max_mobs = 3, spawn_delay = 10 SECONDS, spawn_text = "appears out of nowhere", - spawn_sound = 'sound/magic/summon_magic.ogg', + spawn_sound = 'sound/effects/magic/summon_magic.ogg', list/faction, ) if(!isitem(parent) && !ishostile(parent) && !isgun(parent) && !ismachinery(parent) && !isstructure(parent) && !isprojectilespell(parent)) diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm index 54a16fe807d1b..1d8b5233ca7b5 100644 --- a/code/datums/components/supermatter_crystal.dm +++ b/code/datums/components/supermatter_crystal.dm @@ -71,7 +71,7 @@ SIGNAL_HANDLER if(isliving(user)) var/mob/living/living_mob = user - if(living_mob.incorporeal_move || living_mob.status_flags & GODMODE) + if(living_mob.incorporeal_move || HAS_TRAIT(living_mob, TRAIT_GODMODE)) return if(isalien(user)) dust_mob(source, user, cause = "alien attack") @@ -80,7 +80,7 @@ /datum/component/supermatter_crystal/proc/animal_hit(datum/source, mob/living/simple_animal/user, list/modifiers) SIGNAL_HANDLER - if(user.incorporeal_move || user.status_flags & GODMODE) + if(user.incorporeal_move || HAS_TRAIT(user, TRAIT_GODMODE)) return var/atom/atom_source = source var/murder @@ -101,7 +101,7 @@ SIGNAL_HANDLER if(isliving(user)) var/mob/living/living_mob = user - if(living_mob.incorporeal_move || living_mob.status_flags & GODMODE) + if(living_mob.incorporeal_move || HAS_TRAIT(living_mob, TRAIT_GODMODE)) return var/atom/atom_source = source if(iscyborg(user) && atom_source.Adjacent(user)) @@ -115,7 +115,7 @@ /datum/component/supermatter_crystal/proc/hand_hit(datum/source, mob/living/user, list/modifiers) SIGNAL_HANDLER - if(user.incorporeal_move || user.status_flags & GODMODE) + if(user.incorporeal_move || HAS_TRAIT(user, TRAIT_GODMODE)) return if(user.zone_selected != BODY_ZONE_PRECISE_MOUTH) dust_mob(source, user, cause = "hand") @@ -202,7 +202,7 @@ return if(atom_source.Adjacent(user)) //if the item is stuck to the person, kill the person too instead of eating just the item. - if(user.incorporeal_move || user.status_flags & GODMODE) + if(user.incorporeal_move || HAS_TRAIT(user, TRAIT_GODMODE)) return var/vis_msg = span_danger("[user] reaches out and touches [atom_source] with [item], inducing a resonance... [item] starts to glow briefly before the light continues up to [user]'s body. [user.p_They()] burst[user.p_s()] into flames before flashing into dust!") var/mob_msg = span_userdanger("You reach out and touch [atom_source] with [item]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"") @@ -219,7 +219,7 @@ SIGNAL_HANDLER if(isliving(hit_object)) var/mob/living/hit_mob = hit_object - if(hit_mob.incorporeal_move || hit_mob.status_flags & GODMODE) + if(hit_mob.incorporeal_move || HAS_TRAIT(hit_mob, TRAIT_GODMODE)) return var/atom/atom_source = source var/obj/machinery/power/supermatter_crystal/our_supermatter = parent // Why is this a component? @@ -272,7 +272,7 @@ span_hear("You hear a loud crack as you are washed with a wave of heat.")) /datum/component/supermatter_crystal/proc/dust_mob(datum/source, mob/living/nom, vis_msg, mob_msg, cause) - if(nom.incorporeal_move || nom.status_flags & GODMODE) //try to keep supermatter sliver's + hemostat's dust conditions in sync with this too + if(nom.incorporeal_move || HAS_TRAIT(nom, TRAIT_GODMODE)) //try to keep supermatter sliver's + hemostat's dust conditions in sync with this too return var/atom/atom_source = source if(!vis_msg) @@ -290,10 +290,8 @@ /datum/component/supermatter_crystal/proc/consume(atom/source, atom/movable/consumed_object) if(consumed_object.flags_1 & SUPERMATTER_IGNORES_1) return - if(isliving(consumed_object)) - var/mob/living/consumed_mob = consumed_object - if(consumed_mob.status_flags & GODMODE) - return + if(HAS_TRAIT(consumed_object, TRAIT_GODMODE)) + return var/atom/atom_source = source SEND_SIGNAL(consumed_object, COMSIG_SUPERMATTER_CONSUMED, atom_source) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index acc860df52169..6078a433d9945 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -71,13 +71,10 @@ /datum/component/tackler/proc/checkTackle(mob/living/carbon/user, atom/clicked_atom, list/modifiers) SIGNAL_HANDLER - if(modifiers[ALT_CLICK] || modifiers[SHIFT_CLICK] || modifiers[CTRL_CLICK] || modifiers[MIDDLE_CLICK]) + if(!modifiers[RIGHT_CLICK] || modifiers[ALT_CLICK] || modifiers[SHIFT_CLICK] || modifiers[CTRL_CLICK] || modifiers[MIDDLE_CLICK]) return - if(!modifiers[RIGHT_CLICK]) - return - - if(!user.throw_mode || user.get_active_held_item() || user.pulling || user.buckled || user.incapacitated()) + if(!user.throw_mode || user.get_active_held_item() || user.pulling || user.buckled || user.incapacitated) return if(!clicked_atom || !(isturf(clicked_atom) || isturf(clicked_atom.loc))) @@ -107,7 +104,7 @@ tackling = TRUE RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(checkObstacle)) - playsound(user, 'sound/weapons/thudswoosh.ogg', 40, TRUE, -1) + playsound(user, 'sound/items/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) if(can_see(user, clicked_atom, 7)) @@ -545,7 +542,7 @@ else user.adjustBruteLoss(40, updating_health=FALSE) user.adjustStaminaLoss(30) - playsound(user, 'sound/effects/blobattack.ogg', 60, TRUE) + playsound(user, 'sound/effects/blob/blobattack.ogg', 60, TRUE) playsound(user, 'sound/effects/splat.ogg', 70, TRUE) playsound(user, 'sound/effects/wounds/crack2.ogg', 70, TRUE) user.emote("scream") @@ -562,7 +559,7 @@ user.adjustBruteLoss(40, updating_health = FALSE) user.adjustStaminaLoss(30) user.gain_trauma_type(BRAIN_TRAUMA_MILD) - playsound(user, 'sound/effects/blobattack.ogg', 60, TRUE) + playsound(user, 'sound/effects/blob/blobattack.ogg', 60, TRUE) playsound(user, 'sound/effects/splat.ogg', 70, TRUE) user.emote("gurgle") shake_camera(user, 7, 7) @@ -574,7 +571,7 @@ user.adjustBruteLoss(30) user.Unconscious(10 SECONDS) user.gain_trauma_type(BRAIN_TRAUMA_MILD) - user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8) + user.playsound_local(get_turf(user), 'sound/items/weapons/flashbang.ogg', 100, TRUE, 8) shake_camera(user, 6, 6) user.flash_act(1, TRUE, TRUE, length = 3.5) @@ -585,7 +582,7 @@ user.adjust_confusion(15 SECONDS) if(prob(80)) user.gain_trauma(/datum/brain_trauma/mild/concussion) - user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8) + user.playsound_local(get_turf(user), 'sound/items/weapons/flashbang.ogg', 100, TRUE, 8) user.Knockdown(4 SECONDS) shake_camera(user, 5, 5) user.flash_act(1, TRUE, TRUE, length = 2.5) @@ -605,7 +602,7 @@ user.Knockdown(2 SECONDS) shake_camera(user, 2, 2) - playsound(user, 'sound/weapons/smash.ogg', 70, TRUE) + playsound(user, 'sound/items/weapons/smash.ogg', 70, TRUE) /datum/component/tackler/proc/resetTackle() @@ -615,7 +612,7 @@ ///A special case for splatting for handling windows /datum/component/tackler/proc/splatWindow(mob/living/carbon/user, obj/structure/window/W) - playsound(user, 'sound/effects/Glasshit.ogg', 140, TRUE) + playsound(user, 'sound/effects/glass/Glasshit.ogg', 140, TRUE) if(W.type in list(/obj/structure/window, /obj/structure/window/fulltile, /obj/structure/window/unanchored, /obj/structure/window/fulltile/unanchored)) // boring unreinforced windows for(var/i in 1 to speed) @@ -694,7 +691,7 @@ var/datum/thrownthing/tackle = tackle_ref?.resolve() - playsound(owner, 'sound/weapons/smash.ogg', 70, TRUE) + playsound(owner, 'sound/items/weapons/smash.ogg', 70, TRUE) if(tackle) tackle.finalize(hit=TRUE) resetTackle() diff --git a/code/datums/components/tether.dm b/code/datums/components/tether.dm index e76f5d5b53cd3..b991891930cd1 100644 --- a/code/datums/components/tether.dm +++ b/code/datums/components/tether.dm @@ -1,39 +1,180 @@ +/// Creates a tether between two objects that limits movement range. Tether requires LOS and can be adjusted by left/right clicking its /datum/component/tether - dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + dupe_mode = COMPONENT_DUPE_ALLOWED + /// Other side of the tether var/atom/tether_target + /// Maximum (and initial) distance that this tether can be adjusted to var/max_dist + /// What the tether is going to be called var/tether_name + /// Current extension distance + var/cur_dist + /// Embedded item that the tether "should" originate from + var/atom/embed_target + /// Beam effect + var/datum/beam/tether_beam -/datum/component/tether/Initialize(atom/tether_target, max_dist = 4, tether_name) - if(!isliving(parent) || !istype(tether_target) || !tether_target.loc) +/datum/component/tether/Initialize(atom/tether_target, max_dist = 7, tether_name, atom/embed_target = null, start_distance = null) + if(!ismovable(parent) || !istype(tether_target) || !tether_target.loc) return COMPONENT_INCOMPATIBLE + src.tether_target = tether_target + src.embed_target = embed_target src.max_dist = max_dist + cur_dist = max_dist + if (start_distance != null) + cur_dist = start_distance + var/datum/beam/beam = tether_target.Beam(parent, "line", 'icons/obj/clothing/modsuit/mod_modules.dmi', emissive = FALSE, beam_type = /obj/effect/ebeam/tether) + tether_beam = beam if (ispath(tether_name, /atom)) var/atom/tmp = tether_name src.tether_name = initial(tmp.name) else src.tether_name = tether_name - RegisterSignals(parent, list(COMSIG_MOVABLE_PRE_MOVE), PROC_REF(checkTether)) -/datum/component/tether/proc/checkTether(mob/mover, newloc) +/datum/component/tether/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(check_tether)) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(check_snap)) + RegisterSignal(tether_target, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(check_tether)) + RegisterSignal(tether_target, COMSIG_MOVABLE_MOVED, PROC_REF(check_snap)) + RegisterSignal(tether_target, COMSIG_QDELETING, PROC_REF(on_delete)) + RegisterSignal(tether_beam.visuals, COMSIG_CLICK, PROC_REF(beam_click)) + // Also snap if the beam gets deleted, more of a backup check than anything + RegisterSignal(tether_beam.visuals, COMSIG_QDELETING, PROC_REF(on_delete)) + + if (!isnull(embed_target)) + RegisterSignal(embed_target, COMSIG_ITEM_UNEMBEDDED, PROC_REF(on_embedded_removed)) + RegisterSignal(embed_target, COMSIG_QDELETING, PROC_REF(on_delete)) + +/datum/component/tether/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOVABLE_MOVED)) + if (!QDELETED(tether_target)) + UnregisterSignal(tether_target, list(COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOVABLE_MOVED, COMSIG_QDELETING)) + if (!QDELETED(tether_beam)) + UnregisterSignal(tether_beam.visuals, list(COMSIG_CLICK, COMSIG_QDELETING)) + qdel(tether_beam) + if (!QDELETED(embed_target)) + UnregisterSignal(embed_target, list(COMSIG_ITEM_UNEMBEDDED, COMSIG_QDELETING)) + +/datum/component/tether/proc/check_tether(atom/source, new_loc) SIGNAL_HANDLER - if (get_dist(mover,newloc) > max_dist) - to_chat(mover, span_userdanger("The [tether_name] runs out of slack and prevents you from moving!")) + if (check_snap()) + return + + if (!isturf(new_loc)) + to_chat(source, span_warning("[tether_name] prevents you from entering [new_loc]!")) return COMPONENT_MOVABLE_BLOCK_PRE_MOVE + var/atom/movable/anchor = (source == tether_target ? parent : tether_target) + if (get_dist(anchor, new_loc) > cur_dist) + if (!istype(anchor) || anchor.anchored || !anchor.Move(get_step_towards(anchor, new_loc))) + to_chat(source, span_warning("[tether_name] runs out of slack and prevents you from moving!")) + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE + var/atom/blocker - out: - for(var/turf/T in get_line(tether_target,newloc)) - if (T.density) - blocker = T - break out - for(var/a in T) - var/atom/A = a - if(A.density && A != mover && A != tether_target) - blocker = A - break out + var/anchor_dir = get_dir(source, anchor) + for (var/turf/line_turf in get_line(anchor, new_loc)) + if (line_turf.density && line_turf != anchor.loc && line_turf != source.loc) + blocker = line_turf + break + if (line_turf == anchor.loc || line_turf == source.loc) + for (var/atom/in_turf in line_turf) + if ((in_turf.flags_1 & ON_BORDER_1) && (in_turf.dir & anchor_dir)) + blocker = in_turf + break + else + for (var/atom/in_turf in line_turf) + if (in_turf.density && in_turf != source && in_turf != tether_target) + blocker = in_turf + break + + if (!isnull(blocker)) + break + if (blocker) - to_chat(mover, span_userdanger("The [tether_name] catches on [blocker] and prevents you from moving!")) + to_chat(source, span_warning("[tether_name] catches on [blocker] and prevents you from moving!")) return COMPONENT_MOVABLE_BLOCK_PRE_MOVE + + if (get_dist(anchor, new_loc) != cur_dist || !ismovable(source)) + return + + var/atom/movable/movable_source = source + var/datum/drift_handler/handler = movable_source.drift_handler + if (isnull(handler)) + return + handler.remove_angle_force(get_angle(anchor, source)) + +/datum/component/tether/proc/check_snap() + SIGNAL_HANDLER + + var/atom/atom_target = parent + // Something broke us out, snap the tether + if (get_dist(atom_target, tether_target) > cur_dist + 1 || !isturf(atom_target.loc) || !isturf(tether_target.loc) || atom_target.z != tether_target.z) + atom_target.visible_message(span_warning("[atom_target]'s [tether_name] snaps!"), span_userdanger("Your [tether_name] snaps!"), span_hear("You hear a cable snapping.")) + qdel(src) + +/datum/component/tether/proc/on_delete() + SIGNAL_HANDLER + qdel(src) + +/datum/component/tether/proc/on_embedded_removed(atom/source, mob/living/victim) + SIGNAL_HANDLER + parent.AddComponent(/datum/component/tether, source, max_dist, tether_name, cur_dist) + qdel(src) + +/datum/component/tether/proc/beam_click(atom/source, atom/location, control, params, mob/user) + SIGNAL_HANDLER + + INVOKE_ASYNC(src, PROC_REF(process_beam_click), source, location, params, user) + +/datum/component/tether/proc/process_beam_click(atom/source, atom/location, params, mob/user) + var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, CTRL_CLICK)) + location.balloon_alert(user, "cutting the tether...") + if (!do_after(user, 5 SECONDS, user)) + return + + qdel(src) + location.balloon_alert(user, "tether cut!") + to_chat(parent, span_danger("Your [tether_name] has been cut!")) + return + + if (LAZYACCESS(modifiers, RIGHT_CLICK)) + if (cur_dist >= max_dist) + location.balloon_alert(user, "no coil remaining!") + return + cur_dist += 1 + location.balloon_alert(user, "tether extended") + return + + if (cur_dist <= 1) + location.balloon_alert(user, "too short!") + return + + if (cur_dist > get_dist(parent, tether_target)) + cur_dist -= 1 + location.balloon_alert(user, "tether shortened") + return + + if (!ismovable(parent) && !ismovable(tether_target)) + location.balloon_alert(user, "too short!") + return + + var/atom/movable/movable_parent = parent + var/atom/movable/movable_target = tether_target + + if (istype(movable_parent) && movable_parent.Move(get_step(movable_parent.loc, get_dir(movable_parent, movable_target)))) + cur_dist -= 1 + location.balloon_alert(user, "tether shortened") + return + + if (istype(movable_target) && movable_target.Move(get_step(movable_target.loc, get_dir(movable_target, movable_parent)))) + cur_dist -= 1 + location.balloon_alert(user, "tether shortened") + return + + location.balloon_alert(user, "too short!") + +/obj/effect/ebeam/tether + mouse_opacity = MOUSE_OPACITY_ICON diff --git a/code/datums/components/thermite.dm b/code/datums/components/thermite.dm index 7ab8b755ca10a..1fac66c07cd64 100644 --- a/code/datums/components/thermite.dm +++ b/code/datums/components/thermite.dm @@ -116,7 +116,7 @@ */ /datum/component/thermite/proc/thermite_melt(mob/user) var/turf/parent_turf = parent - playsound(parent_turf, 'sound/items/welder.ogg', 100, TRUE) + playsound(parent_turf, 'sound/items/tools/welder.ogg', 100, TRUE) fakefire = new(parent_turf) burn_callback = CALLBACK(src, PROC_REF(burn_parent), user) burn_timer = addtimer(burn_callback, min(amount * 0.35 SECONDS, 20 SECONDS), TIMER_STOPPABLE) diff --git a/code/datums/components/toggle_attached_clothing.dm b/code/datums/components/toggle_attached_clothing.dm index da503985169bc..8321119d85e58 100644 --- a/code/datums/components/toggle_attached_clothing.dm +++ b/code/datums/components/toggle_attached_clothing.dm @@ -67,6 +67,7 @@ RegisterSignal(parent, COMSIG_ITEM_UI_ACTION_CLICK, PROC_REF(on_toggle_pressed)) RegisterSignal(parent, COMSIG_ITEM_UI_ACTION_SLOT_CHECKED, PROC_REF(on_action_slot_checked)) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_parent_equipped)) + RegisterSignal(parent, COMSIG_ITEM_POST_UNEQUIP, PROC_REF(remove_deployable)) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED_AS_OUTFIT, PROC_REF(on_parent_equipped_outfit)) if (down_overlay_state_suffix) var/overlay_state = "[initial(clothing_parent.icon_state)][down_overlay_state_suffix]" @@ -189,6 +190,7 @@ /// Removes our deployed equipment from the wearer /datum/component/toggle_attached_clothing/proc/remove_deployable() + SIGNAL_HANDLER unequip_deployable() if (!currently_deployed) return @@ -196,9 +198,9 @@ on_removed?.Invoke(deployable) var/obj/item/parent_gear = parent - if (destroy_on_removal) + if(destroy_on_removal) QDEL_NULL(deployable) - else if (parent_icon_state_suffix) + if(parent_icon_state_suffix) parent_gear.icon_state = "[initial(parent_gear.icon_state)]" parent_gear.worn_icon_state = parent_gear.icon_state parent_gear.update_slot_icon() diff --git a/code/datums/components/transforming.dm b/code/datums/components/transforming.dm index 5276f45dc0a75..622fb2ed7d31d 100644 --- a/code/datums/components/transforming.dm +++ b/code/datums/components/transforming.dm @@ -50,7 +50,7 @@ throwforce_on = 0, throw_speed_on = 2, sharpness_on = NONE, - hitsound_on = 'sound/weapons/blade1.ogg', + hitsound_on = 'sound/items/weapons/blade1.ogg', w_class_on = WEIGHT_CLASS_BULKY, clumsy_check = TRUE, clumsy_damage = 10, @@ -174,7 +174,7 @@ /datum/component/transforming/proc/default_transform_message(obj/item/source, mob/user) if(user) source.balloon_alert(user, "[active ? "enabled" : "disabled"] [source]") - playsound(source, 'sound/weapons/batonextend.ogg', 50, TRUE) + playsound(source, 'sound/items/weapons/batonextend.ogg', 50, TRUE) /* * Toggle active between true and false, and call diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm index cf989a9b9968e..993d9aa6f1df8 100644 --- a/code/datums/components/trapdoor.dm +++ b/code/datums/components/trapdoor.dm @@ -248,10 +248,10 @@ return if(SEND_GLOBAL_SIGNAL(COMSIG_GLOB_TRAPDOOR_LINK, src) & LINKED_UP) playsound(assembly_turf, 'sound/machines/chime.ogg', 50, TRUE) - assembly_turf.visible_message("[src] has linked up to a nearby trapdoor! \ - You may now use it to check where the trapdoor is... be careful!", vision_distance = SAMETILE_MESSAGE_RANGE) + assembly_turf.visible_message(span_notice("[src] has linked up to a nearby trapdoor! \ + You may now use it to check where the trapdoor is... be careful!"), vision_distance = SAMETILE_MESSAGE_RANGE) else - playsound(assembly_turf, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(assembly_turf, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) assembly_turf.visible_message(span_warning("[src] has failed to find a trapdoor nearby to link to."), vision_distance = SAMETILE_MESSAGE_RANGE) /** @@ -326,7 +326,7 @@ return TRUE user.balloon_alert(user, "trapdoor triggered") - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) icon_state = "trapdoor_pressed" addtimer(VARSET_CALLBACK(src, icon_state, initial(icon_state)), trapdoor_cooldown_time) COOLDOWN_START(src, trapdoor_cooldown, trapdoor_cooldown_time) diff --git a/code/datums/components/unobserved_actor.dm b/code/datums/components/unobserved_actor.dm index b46b9caebbb35..007d39a0ae845 100644 --- a/code/datums/components/unobserved_actor.dm +++ b/code/datums/components/unobserved_actor.dm @@ -99,7 +99,7 @@ // We aren't in darkness, loop for viewers. for(var/mob/living/mob_target in oview(my_turf, 7)) // They probably cannot see us if we cannot see them... can they? - if(mob_target.client && !mob_target.is_blind() && !mob_target.has_unlimited_silicon_privilege && !HAS_TRAIT(mob_target, TRAIT_UNOBSERVANT)) + if(mob_target.client && !mob_target.is_blind() && !HAS_TRAIT(mob_target, TRAIT_UNOBSERVANT)) return TRUE for(var/obj/vehicle/sealed/mecha/mecha_mob_target in oview(my_turf, 7)) for(var/mob/mechamob_target as anything in mecha_mob_target.occupants) diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm index 00437a2cdd8f1..146d3c2de0785 100644 --- a/code/datums/dash_weapon.dm +++ b/code/datums/dash_weapon.dm @@ -11,9 +11,9 @@ /// How long does it take to get a dash charge back? var/charge_rate = 25 SECONDS /// What sound do we play on dash? - var/dash_sound = 'sound/magic/blink.ogg' + var/dash_sound = 'sound/effects/magic/blink.ogg' /// What sound do we play on recharge? - var/recharge_sound = 'sound/magic/charge.ogg' + var/recharge_sound = 'sound/effects/magic/charge.ogg' /// What effect does our beam use? var/beam_effect = "blur" /// How long does our beam last? diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 7fb5b80a13551..d170aeca8522e 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -142,6 +142,10 @@ _clear_signal_refs() //END: ECS SHIT + if(!(datum_flags & DF_STATIC_OBJECT)) + DREAMLUAU_CLEAR_REF_USERDATA(vars) // vars ceases existing when src does, so we need to clear any lua refs to it that exist. + DREAMLUAU_CLEAR_REF_USERDATA(src) + return QDEL_HINT_QUEUE ///Only override this if you know what you're doing. You do not know what you're doing @@ -415,6 +419,11 @@ filter_data = null atom_cast.filters = null +/// Calls qdel on itself, because signals dont allow callbacks +/datum/proc/selfdelete() + SIGNAL_HANDLER + qdel(src) + /// Return text from this proc to provide extra context to hard deletes that happen to it /// Optional, you should use this for cases where replication is difficult and extra context is required /// Can be called more then once per object, use harddel_deets_dumped to avoid duplicate calls (I am so sorry) diff --git a/code/datums/diseases/advance/floor_diseases/carpellosis.dm b/code/datums/diseases/advance/floor_diseases/carpellosis.dm index a0482215494c4..cdeb6051537e3 100644 --- a/code/datums/diseases/advance/floor_diseases/carpellosis.dm +++ b/code/datums/diseases/advance/floor_diseases/carpellosis.dm @@ -41,7 +41,7 @@ switch(stage) if(2) - if(SPT_PROB(1, seconds_per_tick) && affected_mob.stat == CONSCIOUS) + if(SPT_PROB(1, seconds_per_tick) && affected_mob.stat == CONSCIOUS && affected_mob.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)) to_chat(affected_mob, span_warning("You want to wag your tail...")) affected_mob.emote("wag") if(3) diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm index 3ec095feb5c7f..3fe097920cc4b 100644 --- a/code/datums/diseases/advance/symptoms/fire.dm +++ b/code/datums/diseases/advance/symptoms/fire.dm @@ -2,7 +2,7 @@ * Slightly hidden. * Lowers resistance tremendously. * Decreases stage speed tremendously. - * Decreases transmittablity tremendously. + * Decreases transmittability tremendously. * Fatal level * Bonus: Ignites infected mob. */ diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm index 90070aa15fb9f..005a651b7f338 100644 --- a/code/datums/diseases/advance/symptoms/flesh_eating.dm +++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm @@ -70,7 +70,7 @@ Autophagocytosis (AKA Programmed mass cell death) Very noticable. Lowers resistance. Fast stage speed. - Decreases transmittablity. + Decreases transmittability. Fatal Level. Bonus diff --git a/code/datums/diseases/chronic_illness.dm b/code/datums/diseases/chronic_illness.dm index 7b5443a61b047..9e3c3cc400cef 100644 --- a/code/datums/diseases/chronic_illness.dm +++ b/code/datums/diseases/chronic_illness.dm @@ -43,7 +43,7 @@ need_mob_update += affected_mob.adjustStaminaLoss(70, updating_stamina = FALSE) if(SPT_PROB(1, seconds_per_tick)) to_chat(affected_mob, span_danger("You feel a buzzing in your brain.")) - SEND_SOUND(affected_mob, sound('sound/weapons/flash_ring.ogg')) + SEND_SOUND(affected_mob, sound('sound/items/weapons/flash_ring.ogg')) if(SPT_PROB(0.5, seconds_per_tick)) need_mob_update += affected_mob.adjustBruteLoss(1, updating_health = FALSE) if(need_mob_update) @@ -76,7 +76,7 @@ if(2) to_chat(affected_mob, span_boldwarning("There is no place for you in this timeline.")) affected_mob.adjustStaminaLoss(100, forced = TRUE) - playsound(affected_mob.loc, 'sound/magic/repulse.ogg', 100, FALSE) + playsound(affected_mob.loc, 'sound/effects/magic/repulse.ogg', 100, FALSE) affected_mob.emote("scream") for(var/mob/living/viewers in viewers(3, affected_mob.loc)) viewers.flash_act() diff --git a/code/datums/diseases/heart_failure.dm b/code/datums/diseases/heart_failure.dm index 45d4e6672fb69..419fc9efff3df 100644 --- a/code/datums/diseases/heart_failure.dm +++ b/code/datums/diseases/heart_failure.dm @@ -43,7 +43,7 @@ to_chat(affected_mob, span_warning("You feel [pick("full", "nauseated", "sweaty", "weak", "tired", "short of breath", "uneasy")].")) if(3 to 4) if(!sound) - affected_mob.playsound_local(affected_mob, 'sound/health/slowbeat.ogg', 40, FALSE, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) + affected_mob.playsound_local(affected_mob, 'sound/effects/health/slowbeat.ogg', 40, FALSE, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) sound = TRUE if(SPT_PROB(1.5, seconds_per_tick)) to_chat(affected_mob, span_danger("You feel a sharp pain in your chest!")) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 6d972b674adf6..43e105dacbd0a 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -17,16 +17,6 @@ GLOBAL_LIST_INIT(identity_block_lengths, list( )) /** - * The same rules of the above also apply here, with the exception that this is for the unique_features string variable - * (commonly abbreviated with uf) and its blocks. Both ui and uf have a standard block length of 3 ASCII characters. - */ -GLOBAL_LIST_INIT(features_block_lengths, list( - "[DNA_MUTANT_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, - "[DNA_ETHEREAL_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, - )) - -/** - * Some identity blocks (basically pieces of the unique_identity string variable of the dna datum, commonly abbreviated with ui) * may have a length that differ from standard length of 3 ASCII characters. This list is necessary * for these non-standard blocks to work, as well as the entire unique identity string. @@ -280,8 +270,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) for(var/blocknum in 1 to DNA_FEATURE_BLOCKS) . += L[blocknum] || random_string(GET_UI_BLOCK_LEN(blocknum), GLOB.hex_characters) - - return data.Join() */ //SKYRAT EDIT REMOVAL END @@ -529,6 +517,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) features = species.randomize_features() | features // SKYRAT 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) // SKYRAT EDIT ADDITION + features["mcolor"] = "#[random_color()]" mutant_bodyparts = species.get_mutant_bodyparts(features, existing_mutant_bodyparts = randomize_features ? list() : mutant_bodyparts) // SKYRAT EDIT ADDITION update_dna_identity() @@ -749,7 +738,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(dna.features["tail_cat"]) dna.features["tail_cat"] = SSaccessories.tails_list_human[deconstruct_block(get_uni_feature_block(features, DNA_TAIL_BLOCK), length(SSaccessories.tails_list_human))] if(dna.features["tail_lizard"]) - dna.features["tail_cat"] = GLOB.tails_list_lizard[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_TAIL_BLOCK), GLOB.tails_list_lizard.len)] dna.features["tail_lizard"] = SSaccessories.tails_list_lizard[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_TAIL_BLOCK), length(SSaccessories.tails_list_lizard))] if(dna.features["ears"]) dna.features["ears"] = SSaccessories.ears_list[deconstruct_block(get_uni_feature_block(features, DNA_EARS_BLOCK), length(SSaccessories.ears_list))] @@ -760,8 +748,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(dna.features["moth_antennae"]) var/genetic_value = SSaccessories.moth_antennae_list[deconstruct_block(get_uni_feature_block(features, DNA_MOTH_ANTENNAE_BLOCK), length(SSaccessories.moth_antennae_list))] dna.features["original_moth_antennae"] = genetic_value - if(dna.features["moth_antennae"] != "Burnt Off") - dna.features["moth_antennae"] = genetic_value + dna.features["moth_antennae"] = genetic_value if(dna.features["moth_markings"]) dna.features["moth_markings"] = SSaccessories.moth_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_MOTH_MARKINGS_BLOCK), length(SSaccessories.moth_markings_list))] if(dna.features["caps"]) @@ -769,12 +756,13 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(dna.features["pod_hair"]) dna.features["pod_hair"] = SSaccessories.pod_hair_list[deconstruct_block(get_uni_feature_block(features, DNA_POD_HAIR_BLOCK), length(SSaccessories.pod_hair_list))] - for(var/obj/item/organ/external/external_organ in organs) external_organ.mutate_feature(features, src) if(icon_update) update_body(is_creating = mutcolor_update) + if(mutations_overlay_update) + update_mutations_overlay() */ //SKYRAT EDIT REMOVAL END @@ -886,7 +874,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(!has_dna()) CRASH("[src] does not have DNA") var/num = rand(1, DNA_UNI_IDENTITY_BLOCKS) - dna.set_uni_identity_block(num, random_string(GET_UI_BLOCK_LEN(num), GLOB.hex_characters)) + dna.set_uni_feature_block(num, random_string(GET_UI_BLOCK_LEN(num), GLOB.hex_characters)) updateappearance(mutations_overlay_update=1) /mob/living/carbon/proc/random_mutate_unique_features() @@ -918,7 +906,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(ui) for(var/blocknum in 1 to DNA_UNI_IDENTITY_BLOCKS) if(prob(probability)) - M.dna.set_uni_identity_block(blocknum, random_string(GET_UI_BLOCK_LEN(blocknum), GLOB.hex_characters)) + M.dna.set_uni_feature_block(blocknum, random_string(GET_UI_BLOCK_LEN(blocknum), GLOB.hex_characters)) if(uf) for(var/blocknum in 1 to DNA_FEATURE_BLOCKS) if(prob(probability)) diff --git a/code/datums/drift_handler.dm b/code/datums/drift_handler.dm new file mode 100644 index 0000000000000..27a4fd4bc9154 --- /dev/null +++ b/code/datums/drift_handler.dm @@ -0,0 +1,258 @@ +///Component that handles drifting +///Manages a movement loop that actually does the legwork of moving someone +///Alongside dealing with the post movement input blocking required to make things look nice +/datum/drift_handler + var/atom/movable/parent + var/atom/inertia_last_loc + var/old_dir + var/datum/move_loop/smooth_move/drifting_loop + ///Should we ignore the next glide rate input we get? + ///This is to some extent a hack around the order of operations + ///Around COMSIG_MOVELOOP_POSTPROCESS. I'm sorry lad + var/ignore_next_glide = FALSE + ///Have we been delayed? IE: active, but not working right this second? + var/delayed = FALSE + var/block_inputs_until + /// How much force is behind this drift. + var/drift_force = 1 + +/// Accepts three args. The direction to drift in, if the drift is instant or not, and if it's not instant, the delay on the start +/datum/drift_handler/New(atom/movable/parent, inertia_angle, instant = FALSE, start_delay = 0, drift_force = 1) + . = ..() + src.parent = parent + parent.drift_handler = src + var/flags = MOVEMENT_LOOP_OUTSIDE_CONTROL + if(instant) + flags |= MOVEMENT_LOOP_START_FAST + src.drift_force = drift_force + drifting_loop = GLOB.move_manager.smooth_move(moving = parent, angle = inertia_angle, delay = get_loop_delay(parent), subsystem = SSnewtonian_movement, priority = MOVEMENT_SPACE_PRIORITY, flags = flags) + + if(!drifting_loop) + qdel(src) + return + + RegisterSignal(drifting_loop, COMSIG_MOVELOOP_START, PROC_REF(drifting_start)) + RegisterSignal(drifting_loop, COMSIG_MOVELOOP_STOP, PROC_REF(drifting_stop)) + RegisterSignal(drifting_loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(before_move)) + RegisterSignal(drifting_loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(after_move)) + RegisterSignal(drifting_loop, COMSIG_QDELETING, PROC_REF(loop_death)) + RegisterSignal(parent, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, PROC_REF(attempt_halt)) + 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 = get_loop_delay(parent) + + // Start delay is essentially a more granular version of instant + // Isn't used in the standard case, just for things that have odd wants + if(!instant && start_delay) + drifting_loop.pause_for(start_delay) + visual_delay = start_delay + + apply_initial_visuals(visual_delay) + +/datum/drift_handler/Destroy() + inertia_last_loc = null + if(!QDELETED(drifting_loop)) + qdel(drifting_loop) + drifting_loop = null + parent.inertia_moving = FALSE + parent.drift_handler = null + return ..() + +/datum/drift_handler/proc/apply_initial_visuals(visual_delay) + // If something "somewhere" doesn't want us to apply our glidesize delays, don't + if(SEND_SIGNAL(parent, COMSIG_MOVABLE_DRIFT_VISUAL_ATTEMPT) & DRIFT_VISUAL_FAILED) + return + + // Ignore the next glide because it's literally just us + ignore_next_glide = TRUE + parent.set_glide_size(MOVEMENT_ADJUSTED_GLIDE_SIZE(visual_delay, SSnewtonian_movement.visual_delay)) + if(!ismob(parent)) + return + var/mob/mob_parent = parent + //Ok this is slightly weird, but basically, we need to force the client to glide at our rate + //Make sure moving into a space move looks like a space move essentially + //There is an inbuilt assumption that gliding will be added as a part of a move call, but eh + //It's ok if it's not, it's just important if it is. + mob_parent.client?.visual_delay = MOVEMENT_ADJUSTED_GLIDE_SIZE(visual_delay, SSnewtonian_movement.visual_delay) + +/datum/drift_handler/proc/newtonian_impulse(inertia_angle, start_delay, additional_force, controlled_cap) + SIGNAL_HANDLER + inertia_last_loc = parent.loc + // We've been told to move in the middle of deletion process, tell parent to create a new handler instead + if(!drifting_loop) + qdel(src) + return FALSE + + var/applied_force = additional_force + + var/force_x = sin(drifting_loop.angle) * drift_force + sin(inertia_angle) * applied_force / parent.inertia_force_weight + var/force_y = cos(drifting_loop.angle) * drift_force + cos(inertia_angle) * applied_force / parent.inertia_force_weight + + drift_force = clamp(sqrt(force_x * force_x + force_y * force_y), 0, !isnull(controlled_cap) ? controlled_cap : INERTIA_FORCE_CAP) + if(drift_force < 0.1) // Rounding issues + qdel(src) + return TRUE + + drifting_loop.set_angle(delta_to_angle(force_x, force_y)) + drifting_loop.set_delay(get_loop_delay(parent)) + return TRUE + +/datum/drift_handler/proc/drifting_start() + SIGNAL_HANDLER + inertia_last_loc = parent.loc + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(handle_move)) + // We will use glide size to intuit how long to delay our loop's next move for + // This way you can't ride two movements at once while drifting, since that'd be dumb as fuck + RegisterSignal(parent, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, PROC_REF(handle_glidesize_update)) + // If you stop pulling something mid drift, I want it to retain that momentum + RegisterSignal(parent, COMSIG_ATOM_NO_LONGER_PULLING, PROC_REF(stopped_pulling)) + +/datum/drift_handler/proc/drifting_stop() + SIGNAL_HANDLER + parent.inertia_moving = FALSE + ignore_next_glide = FALSE + UnregisterSignal(parent, list(COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, COMSIG_ATOM_NO_LONGER_PULLING)) + +/datum/drift_handler/proc/before_move(datum/source) + SIGNAL_HANDLER + parent.inertia_moving = TRUE + old_dir = parent.dir + delayed = FALSE + +/datum/drift_handler/proc/after_move(datum/source, result, visual_delay) + SIGNAL_HANDLER + if(result == MOVELOOP_FAILURE) + qdel(src) + return + + parent.setDir(old_dir) + parent.inertia_moving = FALSE + if(parent.Process_Spacemove(angle2dir(drifting_loop.angle), continuous_move = TRUE)) + glide_to_halt(visual_delay) + return + + inertia_last_loc = parent.loc + ignore_next_glide = TRUE + +/datum/drift_handler/proc/loop_death(datum/source) + SIGNAL_HANDLER + drifting_loop = null + +/datum/drift_handler/proc/handle_move(datum/source, old_loc) + SIGNAL_HANDLER + // This can happen, because signals once sent cannot be stopped + if(QDELETED(src)) + return + if(!isturf(parent.loc)) + qdel(src) + return + if(parent.inertia_moving) + return + if(!parent.Process_Spacemove(angle2dir(drifting_loop.angle), continuous_move = TRUE)) + return + qdel(src) + +/// We're going to take the passed in glide size +/// and use it to manually delay our loop for that period +/// to allow the other movement to complete +/datum/drift_handler/proc/handle_glidesize_update(datum/source, glide_size) + SIGNAL_HANDLER + // If we aren't drifting, or this is us, fuck off + if(!drifting_loop || parent.inertia_moving) + return + // If we are drifting, but this set came from the moveloop itself, drop the input + // I'm sorry man + if(ignore_next_glide) + ignore_next_glide = FALSE + return + var/glide_delay = round(ICON_SIZE_ALL / glide_size, 1) * world.tick_lag + drifting_loop.pause_for(glide_delay) + delayed = TRUE + +/// If we're pulling something and stop, we want it to continue at our rate and such +/datum/drift_handler/proc/stopped_pulling(datum/source, atom/movable/was_pulling) + SIGNAL_HANDLER + // This does mean it falls very slightly behind, but otherwise they'll potentially run into us + var/next_move_in = drifting_loop.timer - world.time + world.tick_lag + was_pulling.newtonian_move(angle2dir(drifting_loop.angle), start_delay = next_move_in, drift_force = drift_force, controlled_cap = drift_force) + +/datum/drift_handler/proc/glide_to_halt(glide_for) + if(!ismob(parent)) + qdel(src) + return + + var/mob/mob_parent = parent + var/client/our_client = mob_parent.client + // If we're not active, don't do the glide because it'll look dumb as fuck + if(!our_client || delayed) + qdel(src) + return + + block_inputs_until = world.time + glide_for + 1 + QDEL_IN(src, glide_for + 1) + qdel(drifting_loop) + RegisterSignal(parent, COMSIG_MOB_CLIENT_PRE_MOVE, PROC_REF(allow_final_movement)) + +/datum/drift_handler/proc/allow_final_movement(datum/source) + SIGNAL_HANDLER + // Some things want to allow movement out of spacedrift, we should let them + if(SEND_SIGNAL(parent, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT) & DRIFT_ALLOW_INPUT) + return + if(world.time < block_inputs_until) + return COMSIG_MOB_CLIENT_BLOCK_PRE_MOVE + +/datum/drift_handler/proc/attempt_halt(mob/source, movement_dir, continuous_move, atom/backup) + SIGNAL_HANDLER + + if (get_dir(source, backup) == movement_dir || source.loc == backup.loc) + if (drift_force >= INERTIA_FORCE_THROW_FLOOR) + source.throw_at(backup, 1, floor(1 + (drift_force - INERTIA_FORCE_THROW_FLOOR) / INERTIA_FORCE_PER_THROW_FORCE), spin = FALSE) + return + + if (drift_force < INERTIA_FORCE_SPACEMOVE_GRAB || isnull(drifting_loop)) + return + + if (drift_force <= INERTIA_FORCE_SPACEMOVE_REDUCTION / source.inertia_force_weight) + glide_to_halt(get_loop_delay(source)) + return COMPONENT_PREVENT_SPACEMOVE_HALT + + drift_force -= INERTIA_FORCE_SPACEMOVE_REDUCTION / source.inertia_force_weight + drifting_loop.set_delay(get_loop_delay(source)) + return COMPONENT_PREVENT_SPACEMOVE_HALT + +/datum/drift_handler/proc/get_loop_delay(atom/movable/movable) + return (DEFAULT_INERTIA_SPEED / ((1 - INERTIA_SPEED_COEF) + drift_force * INERTIA_SPEED_COEF)) * movable.inertia_move_multiplier + +/datum/drift_handler/proc/stabilize_drift(target_angle, target_force, stabilization_force) + /// We aren't drifting + if (isnull(drifting_loop)) + return + + /// Lack of angle means that we are trying to halt movement + if (isnull(target_angle)) + // Going through newtonian_move ensures that all Process_Spacemove code runs properly, instead of directly adjusting forces + parent.newtonian_move(reverse_angle(drifting_loop.angle), drift_force = min(drift_force, stabilization_force)) + return + + // Force required to be applied in order to get to the desired movement vector, with projection of current movement onto desired vector to ensure that we only compensate for excess + var/drift_projection = max(0, cos(target_angle - drifting_loop.angle)) * drift_force + var/force_x = sin(target_angle) * target_force - sin(drifting_loop.angle) * drift_force + var/force_y = cos(target_angle) * target_force - cos(drifting_loop.angle) * drift_force + var/force_angle = delta_to_angle(force_x, force_y) + var/applied_force = sqrt(force_x * force_x + force_y * force_y) + var/force_projection = max(0, cos(target_angle - force_angle)) * applied_force + force_x -= min(force_projection, drift_projection) * sin(target_angle) + force_x -= min(force_projection, drift_projection) * cos(target_angle) + applied_force = min(sqrt(force_x * force_x + force_y * force_y), stabilization_force) + parent.newtonian_move(force_angle, instant = TRUE, drift_force = applied_force) + +/// Removes all force in a certain direction +/datum/drift_handler/proc/remove_angle_force(target_angle) + /// We aren't drifting + if (isnull(drifting_loop)) + return + + var/projected_force = max(0, cos(target_angle - drifting_loop.angle)) * drift_force + if (projected_force > 0) + parent.newtonian_move(reverse_angle(target_angle), projected_force) diff --git a/code/datums/elements/ai_held_item.dm b/code/datums/elements/ai_held_item.dm index 053a1827fb23d..185e45da9aa2b 100644 --- a/code/datums/elements/ai_held_item.dm +++ b/code/datums/elements/ai_held_item.dm @@ -54,7 +54,7 @@ var/obj/item/carried_item = get_held_item(source) if (!carried_item) return - examine_text += span_notice("[source.p_They()] [source.p_are()] carrying [carried_item.get_examine_string(user)].") + examine_text += span_notice("[source.p_They()] [source.p_are()] carrying [carried_item.examine_title(user)].") /// If we died, drop anything we were carrying /datum/element/ai_held_item/proc/on_death(mob/living/ol_yeller) diff --git a/code/datums/elements/art.dm b/code/datums/elements/art.dm index 81d388aa94af8..d5a642c23d0b6 100644 --- a/code/datums/elements/art.dm +++ b/code/datums/elements/art.dm @@ -74,7 +74,7 @@ var/datum/job_department/hater_department = SSjob.get_department_type(hater_department_type) for(var/datum/job/hater_job as anything in hater_department.department_jobs) haters += hater_job.title - var/datum/job/quartermaster/fucking_quartermaster = SSjob.GetJobType(/datum/job/quartermaster) + var/datum/job/quartermaster/fucking_quartermaster = SSjob.get_job_type(/datum/job/quartermaster) haters += fucking_quartermaster.title if(!(user.mind.assigned_role.title in haters)) diff --git a/code/datums/elements/bed_tucking.dm b/code/datums/elements/bed_tucking.dm index 58f5640c31c75..3b49f2a608f88 100644 --- a/code/datums/elements/bed_tucking.dm +++ b/code/datums/elements/bed_tucking.dm @@ -53,11 +53,11 @@ return COMPONENT_NO_AFTERATTACK /datum/element/bed_tuckable/proc/tuck(obj/item/tucked, obj/structure/bed/target_bed) - tucked.dir = target_bed.dir - tucked.pixel_x = target_bed.dir & EAST ? -x_offset : x_offset + tucked.dir = target_bed.dir & target_bed.left_headrest_dirs ? EAST : WEST + tucked.pixel_x = target_bed.dir & target_bed.left_headrest_dirs ? -x_offset : x_offset tucked.pixel_y = y_offset if(starting_angle) - rotation_degree = target_bed.dir & EAST ? starting_angle + 180 : starting_angle + rotation_degree = target_bed.dir & target_bed.left_headrest_dirs ? starting_angle + 180 : starting_angle tucked.transform = turn(tucked.transform, rotation_degree) RegisterSignal(tucked, COMSIG_ITEM_PICKUP, PROC_REF(untuck)) diff --git a/code/datums/elements/block_turf_fingerprints.dm b/code/datums/elements/block_turf_fingerprints.dm new file mode 100644 index 0000000000000..f3b7ab9cf19f1 --- /dev/null +++ b/code/datums/elements/block_turf_fingerprints.dm @@ -0,0 +1,56 @@ +/** + * ## block_turf_fingerprints + * + * Attach to a movable, prevents mobs from leaving fingerprints on the turf below it + */ +/datum/element/block_turf_fingerprints + element_flags = ELEMENT_DETACH_ON_HOST_DESTROY + +/datum/element/block_turf_fingerprints/Attach(datum/target) + . = ..() + if(!ismovable(target)) + return ELEMENT_INCOMPATIBLE + + var/atom/movable/target_movable = target + if(isturf(target_movable.loc)) + apply_to_turf(target_movable.loc) + + RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(move_turf)) + +/datum/element/block_turf_fingerprints/Detach(atom/movable/target) + . = ..() + if(isturf(target.loc)) + remove_from_turf(target.loc) + + UnregisterSignal(target, COMSIG_MOVABLE_MOVED) + +/datum/element/block_turf_fingerprints/proc/apply_to_turf(turf/the_turf) + // It's possible two things with this element could be on the same turf, so let's avoid double-applying + if(the_turf.interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND) + // But what if the turf has this flag by default? We still need to override register a signal. + // Otherwise we may run into a very niche bug: + // - A turf as this flag by default + // - A movable with this element is placed on the turf + // - It does not gain the flag nor register a signal + // - The turf changes, and the new turf does not gain the flag + if(initial(the_turf.interaction_flags_atom) & INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND) + RegisterSignal(the_turf, COMSIG_TURF_CHANGE, PROC_REF(replace_our_turf), override = TRUE) + return + + the_turf.interaction_flags_atom |= INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND + RegisterSignal(the_turf, COMSIG_TURF_CHANGE, PROC_REF(replace_our_turf)) + +/datum/element/block_turf_fingerprints/proc/remove_from_turf(turf/the_turf) + the_turf.interaction_flags_atom &= ~INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND + UnregisterSignal(the_turf, COMSIG_TURF_CHANGE) + +/datum/element/block_turf_fingerprints/proc/move_turf(atom/movable/source, atom/old_loc) + SIGNAL_HANDLER + if(isturf(old_loc)) + remove_from_turf(old_loc) + if(isturf(source.loc)) + apply_to_turf(source.loc) + +/datum/element/block_turf_fingerprints/proc/replace_our_turf(datum/source, path, new_baseturfs, flags, post_change_callbacks) + SIGNAL_HANDLER + post_change_callbacks += CALLBACK(src, PROC_REF(apply_to_turf)) diff --git a/code/datums/elements/bugkiller_reagent.dm b/code/datums/elements/bugkiller_reagent.dm index 57f2ae65d9209..d2c25926e966f 100644 --- a/code/datums/elements/bugkiller_reagent.dm +++ b/code/datums/elements/bugkiller_reagent.dm @@ -59,7 +59,7 @@ /datum/status_effect/bugkiller_death/on_apply() if(owner.stat == DEAD) return FALSE - playsound(owner, 'sound/voice/human/malescream_1.ogg', 25, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = 5) + playsound(owner, 'sound/mobs/humanoids/human/scream/malescream_1.ogg', 25, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = 5) to_chat(owner, span_userdanger("The world begins to go dark...")) owner.spasm_animation(spasm_loops) owner.adjust_eye_blur(duration) diff --git a/code/datums/elements/can_shatter.dm b/code/datums/elements/can_shatter.dm index be7e02e25b458..df19e4ef12344 100644 --- a/code/datums/elements/can_shatter.dm +++ b/code/datums/elements/can_shatter.dm @@ -45,9 +45,10 @@ shatter(source, impacted_turf) /// Tells the parent to shatter if we are thrown and impact something -/datum/element/can_shatter/proc/on_throw_impact(datum/source, atom/hit_atom) +/datum/element/can_shatter/proc/on_throw_impact(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) SIGNAL_HANDLER - + if(caught) + return shatter(source, hit_atom) /// Handles the actual shattering part, throwing shards of whatever is defined on the component everywhere diff --git a/code/datums/elements/climbable.dm b/code/datums/elements/climbable.dm index 113cc8aaa90ef..5700ca3bc2e85 100644 --- a/code/datums/elements/climbable.dm +++ b/code/datums/elements/climbable.dm @@ -106,8 +106,8 @@ if(ISDIAGONALDIR(climbed_thing.dir) && same_loc) if(params) //we check the icon x and y parameters of the click-drag to determine step_dir. var/list/modifiers = params2list(params) - 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) + var/x_dist = (text2num(LAZYACCESS(modifiers, ICON_X)) - ICON_SIZE_X/2) * (climbed_thing.dir & WEST ? -1 : 1) + var/y_dist = (text2num(LAZYACCESS(modifiers, ICON_Y)) - ICON_SIZE_Y/2) * (climbed_thing.dir & SOUTH ? -1 : 1) dir_step = (x_dist >= y_dist ? (EAST|WEST) : (NORTH|SOUTH)) & climbed_thing.dir else dir_step = get_dir(user, get_step(climbed_thing, climbed_thing.dir)) diff --git a/code/datums/elements/consumable_mob.dm b/code/datums/elements/consumable_mob.dm index 1a7c67a431220..fafdb8cbcab28 100644 --- a/code/datums/elements/consumable_mob.dm +++ b/code/datums/elements/consumable_mob.dm @@ -23,7 +23,7 @@ /datum/element/consumable_mob/proc/on_consume(atom/movable/source, mob/living/consumer) SIGNAL_HANDLER - if(!consumer.combat_mode || !consumer.reagents) + if(!consumer.combat_mode || !consumer.reagents || HAS_TRAIT(consumer, TRAIT_PACIFISM)) return for(var/reagent_type in reagents_list) if(isnull(reagents_list[reagent_type])) diff --git a/code/datums/elements/corrupted_organ.dm b/code/datums/elements/corrupted_organ.dm index 666ca3460fce5..504c6851e00c6 100644 --- a/code/datums/elements/corrupted_organ.dm +++ b/code/datums/elements/corrupted_organ.dm @@ -41,7 +41,7 @@ ) return var/turf/origin_turf = get_turf(organ) - playsound(organ, 'sound/magic/forcewall.ogg', vol = 100) + playsound(organ, 'sound/effects/magic/forcewall.ogg', vol = 100) new /obj/effect/temp_visual/curse_blast(origin_turf) organ.visible_message(span_revenwarning("[organ] explodes in a burst of dark energy!")) for(var/mob/living/target in range(1, origin_turf)) diff --git a/code/datums/elements/damage_threshold.dm b/code/datums/elements/damage_threshold.dm index 60c87dc5ed5c1..764f5d7a9bd6d 100644 --- a/code/datums/elements/damage_threshold.dm +++ b/code/datums/elements/damage_threshold.dm @@ -45,7 +45,7 @@ span_hear("You hear a thud."), COMBAT_MESSAGE_RANGE, ) - playsound(source, 'sound/weapons/tap.ogg', tap_vol, TRUE, -1) + playsound(source, 'sound/items/weapons/tap.ogg', tap_vol, TRUE, -1) return SUCCESSFUL_BLOCK return NONE diff --git a/code/datums/elements/decals/blood.dm b/code/datums/elements/decals/blood.dm index 857b9e2b678ea..16fd4241147d4 100644 --- a/code/datums/elements/decals/blood.dm +++ b/code/datums/elements/decals/blood.dm @@ -24,8 +24,8 @@ icon = I.icon icon_state = I.icon_state var/icon/icon_for_size = icon(icon, icon_state) - var/scale_factor_x = icon_for_size.Width()/world.icon_size - var/scale_factor_y = icon_for_size.Height()/world.icon_size + var/scale_factor_x = icon_for_size.Width()/ICON_SIZE_X + var/scale_factor_y = icon_for_size.Height()/ICON_SIZE_Y var/mutable_appearance/blood_splatter = mutable_appearance('icons/effects/blood.dmi', "itemblood", appearance_flags = RESET_COLOR) //MA of the blood that we apply blood_splatter.transform = blood_splatter.transform.Scale(scale_factor_x, scale_factor_y) blood_splatter.blend_mode = BLEND_INSET_OVERLAY diff --git a/code/datums/elements/deliver_first.dm b/code/datums/elements/deliver_first.dm index 0fb83a2545603..ae1947bff02a8 100644 --- a/code/datums/elements/deliver_first.dm +++ b/code/datums/elements/deliver_first.dm @@ -80,7 +80,7 @@ if(user) target.balloon_alert(user, "access denied until delivery!") if(COOLDOWN_FINISHED(src, deny_cooldown)) - playsound(target, 'sound/machines/buzz-two.ogg', 30, TRUE) + playsound(target, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE) COOLDOWN_START(src, deny_cooldown, DENY_SOUND_COOLDOWN) return BLOCK_OPEN diff --git a/code/datums/elements/dextrous.dm b/code/datums/elements/dextrous.dm index 681e2a9488d8c..240cfc88494d3 100644 --- a/code/datums/elements/dextrous.dm +++ b/code/datums/elements/dextrous.dm @@ -69,5 +69,5 @@ for(var/obj/item/held_item in examined.held_items) if(held_item.item_flags & (ABSTRACT|EXAMINE_SKIP|HAND_ITEM)) continue - examine_list += span_info("[examined.p_They()] [examined.p_have()] [held_item.get_examine_string(user)] in [examined.p_their()] \ + examine_list += span_info("[examined.p_They()] [examined.p_have()] [held_item.examine_title(user)] in [examined.p_their()] \ [examined.get_held_index_name(examined.get_held_index_of_item(held_item))].") diff --git a/code/datums/elements/disarm_attack.dm b/code/datums/elements/disarm_attack.dm index a788cd9f35ed3..8b4b0b3ff8adf 100644 --- a/code/datums/elements/disarm_attack.dm +++ b/code/datums/elements/disarm_attack.dm @@ -6,13 +6,23 @@ if(!isitem(target)) return ELEMENT_INCOMPATIBLE - RegisterSignal(target, COMSIG_ITEM_ATTACK_SECONDARY, PROC_REF(secondary_attack)) - RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) + var/obj/item/item = target + RegisterSignal(item, COMSIG_ITEM_ATTACK_SECONDARY, PROC_REF(secondary_attack)) + RegisterSignal(item, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) + item.item_flags |= ITEM_HAS_CONTEXTUAL_SCREENTIPS + RegisterSignal(item, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, PROC_REF(add_item_context)) /datum/element/disarm_attack/Detach(datum/source) - UnregisterSignal(source, list(COMSIG_ATOM_EXAMINE, COMSIG_ITEM_ATTACK_SECONDARY)) + UnregisterSignal(source, list(COMSIG_ATOM_EXAMINE, COMSIG_ITEM_ATTACK_SECONDARY, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET)) return ..() +/datum/element/disarm_attack/proc/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) + SIGNAL_HANDLER + if(!isliving(target) || !can_disarm_attack(source, target, user, FALSE)) + return NONE + context[SCREENTIP_CONTEXT_RMB] = "Shove" + return CONTEXTUAL_SCREENTIP_SET + /datum/element/disarm_attack/proc/secondary_attack(obj/item/source, mob/living/victim, mob/living/user, params) SIGNAL_HANDLER if(!user.can_disarm(victim) || !can_disarm_attack(source, victim, user)) diff --git a/code/datums/elements/door_pryer.dm b/code/datums/elements/door_pryer.dm index 9f01e8be2b6ab..3e2bd2c5a43d6 100644 --- a/code/datums/elements/door_pryer.dm +++ b/code/datums/elements/door_pryer.dm @@ -60,7 +60,7 @@ message = span_warning("[attacker] starts forcing the [airlock_target] open!"), blind_message = span_hear("You hear a metal screeching sound."), ) - playsound(airlock_target, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) + playsound(airlock_target, 'sound/machines/airlock/airlock_alien_prying.ogg', 100, TRUE) airlock_target.balloon_alert(attacker, "prying...") if(!do_after(attacker, pry_time, airlock_target)) airlock_target.balloon_alert(attacker, "interrupted!") diff --git a/code/datums/elements/embed.dm b/code/datums/elements/embed.dm index 4a8bda37c3a75..fbaf638bdd520 100644 --- a/code/datums/elements/embed.dm +++ b/code/datums/elements/embed.dm @@ -23,7 +23,7 @@ return RegisterSignal(target, COMSIG_MOVABLE_IMPACT_ZONE, PROC_REF(check_embed)) - RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(examined)) + RegisterSignal(target, COMSIG_ATOM_EXAMINE_TAGS, PROC_REF(examined_tags)) RegisterSignal(target, COMSIG_EMBED_TRY_FORCE, PROC_REF(try_force_embed)) RegisterSignal(target, COMSIG_ITEM_DISABLE_EMBED, PROC_REF(detach_from_weapon)) @@ -46,7 +46,7 @@ if(blocked || !istype(victim) || HAS_TRAIT(victim, TRAIT_PIERCEIMMUNE)) return FALSE - if(victim.status_flags & GODMODE) + if(HAS_TRAIT(victim, TRAIT_GODMODE)) return FALSE var/flying_speed = throwingdatum?.speed || weapon.throw_speed @@ -82,13 +82,13 @@ Detach(weapon) ///Someone inspected our embeddable item -/datum/element/embed/proc/examined(obj/item/I, mob/user, list/examine_list) +/datum/element/embed/proc/examined_tags(obj/item/I, mob/user, list/examine_list) SIGNAL_HANDLER if(I.is_embed_harmless()) - examine_list += "[I] feels sticky, and could probably get stuck to someone if thrown properly!" + examine_list["sticky"] = "[I] feels sticky, and could probably get stuck to someone if thrown properly!" else - examine_list += "[I] has a fine point, and could probably embed in someone if thrown properly!" + examine_list["embeddable"] = "[I] has a fine point, and could probably embed in someone if thrown properly!" /** * check_embed_projectile() is what we get when a projectile with a defined shrapnel_type impacts a target. @@ -117,6 +117,8 @@ if(!try_force_embed(payload, limb)) payload.failedEmbed() + else + SEND_SIGNAL(source, COMSIG_PROJECTILE_ON_EMBEDDED, payload, hit) Detach(source) /** diff --git a/code/datums/elements/falling_hazard.dm b/code/datums/elements/falling_hazard.dm index 355bcd92e4e01..65ac6b4569f0e 100644 --- a/code/datums/elements/falling_hazard.dm +++ b/code/datums/elements/falling_hazard.dm @@ -12,7 +12,7 @@ /// Does the target crush and flatten whoever it falls on var/crushes_people = FALSE /// What sound is played when the target falls onto a mob - var/impact_sound = 'sound/magic/clockwork/fellowship_armory.ogg' //CLANG + var/impact_sound = 'sound/effects/magic/clockwork/fellowship_armory.ogg' //CLANG /datum/element/falling_hazard/Attach(datum/target, damage, wound_bonus, hardhat_safety, crushes, impact_sound) . = ..() @@ -52,7 +52,7 @@ if(crushes_people) poor_target.Knockdown(0.25 SECONDS * fall_damage) // For a piano, that would be 15 seconds - playsound(poor_target, 'sound/weapons/parry.ogg', 50, TRUE) // You PARRIED the falling object with your EPIC hardhat + playsound(poor_target, 'sound/items/weapons/parry.ogg', 50, TRUE) // You PARRIED the falling object with your EPIC hardhat return var/obj/item/bodypart/target_head = poor_target.get_bodypart(BODY_ZONE_HEAD) diff --git a/code/datums/elements/firestacker.dm b/code/datums/elements/firestacker.dm index b7bad65cc6ced..a512e5e89c7d1 100644 --- a/code/datums/elements/firestacker.dm +++ b/code/datums/elements/firestacker.dm @@ -27,10 +27,10 @@ /datum/element/firestacker/proc/stack_on(datum/owner, mob/living/target) target.adjust_fire_stacks(amount) -/datum/element/firestacker/proc/impact(datum/source, atom/hit_atom, datum/thrownthing/throwingdatum) +/datum/element/firestacker/proc/impact(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) SIGNAL_HANDLER - if(isliving(hit_atom)) + if(!caught && isliving(hit_atom)) stack_on(source, hit_atom) /datum/element/firestacker/proc/item_attack(datum/source, atom/movable/target, mob/living/user) diff --git a/code/datums/elements/food/food_trash.dm b/code/datums/elements/food/food_trash.dm index 6df36c82c4c41..244de8d7e84ab 100644 --- a/code/datums/elements/food/food_trash.dm +++ b/code/datums/elements/food/food_trash.dm @@ -22,11 +22,14 @@ RegisterSignal(target, COMSIG_ITEM_ATTACK_SELF, PROC_REF(open_trash)) if(flags & FOOD_TRASH_POPABLE) RegisterSignal(target, COMSIG_FOOD_CROSSED, PROC_REF(food_crossed)) - RegisterSignal(target, COMSIG_ITEM_ON_GRIND, PROC_REF(generate_trash)) - RegisterSignal(target, COMSIG_ITEM_ON_JUICE, PROC_REF(generate_trash)) - RegisterSignal(target, COMSIG_ITEM_USED_AS_INGREDIENT, PROC_REF(generate_trash)) - RegisterSignal(target, COMSIG_ITEM_ON_COMPOSTED, PROC_REF(generate_trash)) - RegisterSignal(target, COMSIG_ITEM_SOLD_TO_CUSTOMER, PROC_REF(generate_trash)) + RegisterSignals(target, list( + COMSIG_ITEM_ON_GRIND, + COMSIG_ITEM_ON_JUICE, + COMSIG_ITEM_USED_AS_INGREDIENT, + COMSIG_ITEM_ON_COMPOSTED, + COMSIG_ITEM_SOLD_TO_CUSTOMER, + COMSIG_MOVABLE_SPLAT, + ), PROC_REF(generate_trash)) /datum/element/food_trash/Detach(datum/target) . = ..() @@ -38,7 +41,9 @@ COMSIG_ITEM_ON_JUICE, COMSIG_ITEM_USED_AS_INGREDIENT, COMSIG_ITEM_ON_COMPOSTED, - COMSIG_ITEM_SOLD_TO_CUSTOMER,)) + COMSIG_ITEM_SOLD_TO_CUSTOMER, + COMSIG_MOVABLE_SPLAT, + )) /datum/element/food_trash/proc/generate_trash(datum/source, mob/living/eater, mob/living/feeder) SIGNAL_HANDLER diff --git a/code/datums/elements/food/fried_item.dm b/code/datums/elements/food/fried_item.dm index 2afab84d1cb43..bc21e51f24cd7 100644 --- a/code/datums/elements/food/fried_item.dm +++ b/code/datums/elements/food/fried_item.dm @@ -17,28 +17,27 @@ var/atom/this_food = target switch(fry_time) - if(0 to 15) + if(0 to 15 SECONDS) this_food.add_atom_colour(fried_colors[1], FIXED_COLOUR_PRIORITY) this_food.name = "lightly-fried [this_food.name]" this_food.desc += " It's been lightly fried in a deep fryer." - if(15 to 50) + if(15 SECONDS to 50 SECONDS) this_food.add_atom_colour(fried_colors[2], FIXED_COLOUR_PRIORITY) this_food.name = "fried [this_food.name]" this_food.desc += " It's been fried, increasing its tastiness value by [rand(1, 75)]%." - if(50 to 85) + if(50 SECONDS to 85 SECONDS) this_food.add_atom_colour(fried_colors[3], FIXED_COLOUR_PRIORITY) this_food.name = "deep-fried [this_food.name]" this_food.desc += " Deep-fried to perfection." - if(85 to INFINITY) + if(85 SECONDS to INFINITY) this_food.add_atom_colour(fried_colors[4], FIXED_COLOUR_PRIORITY) this_food.name = "\proper the physical manifestation of the very concept of fried foods" this_food.desc = "A heavily-fried... something. Who can tell anymore?" ADD_TRAIT(this_food, TRAIT_FOOD_FRIED, ELEMENT_TRAIT(type)) - SEND_SIGNAL(this_food, COMSIG_ITEM_FRIED, fry_time) // Already edible items will inherent these parameters // Otherwise, we will become edible. this_food.AddComponent( \ @@ -49,6 +48,7 @@ foodtypes = FRIED, \ volume = this_food.reagents?.maximum_volume, \ ) + SEND_SIGNAL(this_food, COMSIG_ITEM_FRIED, fry_time) /datum/element/fried_item/Detach(atom/source, ...) for(var/color in fried_colors) diff --git a/code/datums/elements/food/grilled_item.dm b/code/datums/elements/food/grilled_item.dm index de6c2ef41c1b9..6899f47faa475 100644 --- a/code/datums/elements/food/grilled_item.dm +++ b/code/datums/elements/food/grilled_item.dm @@ -28,8 +28,12 @@ if(grill_time > 30 SECONDS && isnull(this_food.GetComponent(/datum/component/edible))) this_food.AddComponent(/datum/component/edible, foodtypes = FRIED) + SEND_SIGNAL(this_food, COMSIG_ITEM_BARBEQUE_GRILLED, grill_time) + ADD_TRAIT(this_food, TRAIT_FOOD_BBQ_GRILLED, ELEMENT_TRAIT(type)) + /datum/element/grilled_item/Detach(atom/source, ...) source.name = initial(source.name) source.desc = initial(source.desc) qdel(source.GetComponent(/datum/component/edible)) // Don't care if it was initially edible + REMOVE_TRAIT(src, TRAIT_FOOD_BBQ_GRILLED, ELEMENT_TRAIT(type)) return ..() diff --git a/code/datums/elements/food/microwavable.dm b/code/datums/elements/food/microwavable.dm index 8e7305545c0b0..5fdd4c084add1 100644 --- a/code/datums/elements/food/microwavable.dm +++ b/code/datums/elements/food/microwavable.dm @@ -44,6 +44,7 @@ var/efficiency = istype(used_microwave) ? used_microwave.efficiency : 1 SEND_SIGNAL(result, COMSIG_ITEM_MICROWAVE_COOKED, source, efficiency) + SEND_SIGNAL(source, COMSIG_ITEM_MICROWAVE_COOKED_FROM, result, efficiency) if(IS_EDIBLE(result) && (result_typepath != default_typepath)) BLACKBOX_LOG_FOOD_MADE(result.type) diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm index 20ea4d42dd540..46772087e5e90 100644 --- a/code/datums/elements/footstep.dm +++ b/code/datums/elements/footstep.dm @@ -109,6 +109,9 @@ /datum/element/footstep/proc/play_simplestep(mob/living/source, atom/oldloc, direction, forced, list/old_locs, momentum_change) SIGNAL_HANDLER + if(source.moving_diagonally == SECOND_DIAG_STEP) + return // to prevent a diagonal step from counting as 2 + if (forced || SHOULD_DISABLE_FOOTSTEPS(source)) return @@ -128,6 +131,9 @@ /datum/element/footstep/proc/play_humanstep(mob/living/carbon/human/source, atom/oldloc, direction, forced, list/old_locs, momentum_change) SIGNAL_HANDLER + if(source.moving_diagonally == SECOND_DIAG_STEP) + return // to prevent a diagonal step from counting as 2 + if (forced || SHOULD_DISABLE_FOOTSTEPS(source) || !momentum_change) return @@ -178,6 +184,9 @@ /datum/element/footstep/proc/play_simplestep_machine(atom/movable/source, atom/oldloc, direction, forced, list/old_locs, momentum_change) SIGNAL_HANDLER + if(source.moving_diagonally == SECOND_DIAG_STEP) + return // to prevent a diagonal step from counting as 2 + if (forced || SHOULD_DISABLE_FOOTSTEPS(source)) return diff --git a/code/datums/elements/frozen.dm b/code/datums/elements/frozen.dm index d112ef31b5f91..df857cdd6efe6 100644 --- a/code/datums/elements/frozen.dm +++ b/code/datums/elements/frozen.dm @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 organ.organ_flags |= ORGAN_FROZEN RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) - RegisterSignal(target, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(shatter_on_throw)) + RegisterSignal(target, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(shatter_on_landed)) RegisterSignal(target, COMSIG_MOVABLE_IMPACT, PROC_REF(shatter_on_throw)) RegisterSignal(target, COMSIG_OBJ_UNFREEZE, PROC_REF(on_unfreeze)) @@ -54,8 +54,13 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 SIGNAL_HANDLER Detach(source) -///signal handler for COMSIG_MOVABLE_POST_THROW that shatters our target after impacting after a throw -/datum/element/frozen/proc/shatter_on_throw(datum/target, datum/thrownthing/throwingdatum) +/datum/element/frozen/proc/shatter_on_throw(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) + SIGNAL_HANDLER + if(!caught) + shatter_on_landed(source, throwing_datum) + +///signal handler that shatters our target after impacting after a throw. +/datum/element/frozen/proc/shatter_on_landed(datum/target, datum/thrownthing/throwingdatum) SIGNAL_HANDLER var/obj/obj_target = target if(ismob(throwingdatum.thrower)) diff --git a/code/datums/elements/give_turf_traits.dm b/code/datums/elements/give_turf_traits.dm index 3c53d4a5e7305..7e7c37d86e7ef 100644 --- a/code/datums/elements/give_turf_traits.dm +++ b/code/datums/elements/give_turf_traits.dm @@ -67,7 +67,7 @@ for(var/mob/living/living in location) living.update_turf_movespeed() -/// Signals and components are carried over when the turf is changed, so they've to be readded post-change. +/// Signals are carried over when the turf is changed, but traits aren't, so they've to be readded post-change. /datum/element/give_turf_traits/proc/pre_change_turf(turf/changed, path, list/new_baseturfs, flags, list/post_change_callbacks) SIGNAL_HANDLER post_change_callbacks += CALLBACK(src, PROC_REF(reoccupy_turf)) diff --git a/code/datums/elements/high_fiver.dm b/code/datums/elements/high_fiver.dm index 6e4e9739cefc5..249a9f4059de4 100644 --- a/code/datums/elements/high_fiver.dm +++ b/code/datums/elements/high_fiver.dm @@ -54,7 +54,7 @@ taker.add_mood_event(descriptor, /datum/mood_event/high_five_full_hand) // not so successful now! return COMPONENT_OFFER_INTERRUPT - playsound(offerer, 'sound/weapons/slap.ogg', min(50 * slappers_giver, 300), TRUE, 1) + playsound(offerer, 'sound/items/weapons/slap.ogg', min(50 * slappers_giver, 300), TRUE, 1) offerer.add_mob_memory(/datum/memory/high_five, deuteragonist = taker, high_five_type = descriptor, high_ten = high_ten) taker.add_mob_memory(/datum/memory/high_five, deuteragonist = offerer, high_five_type = descriptor, high_ten = high_ten) diff --git a/code/datums/elements/immerse.dm b/code/datums/elements/immerse.dm index 65f7d45b9ab77..d50ae906c0a55 100644 --- a/code/datums/elements/immerse.dm +++ b/code/datums/elements/immerse.dm @@ -142,8 +142,8 @@ */ /datum/element/immerse/proc/add_immerse_overlay(atom/movable/movable) var/list/icon_dimensions = get_icon_dimensions(movable.icon) - var/width = icon_dimensions["width"] || world.icon_size - var/height = icon_dimensions["height"] || world.icon_size + var/width = icon_dimensions["width"] || ICON_SIZE_X + var/height = icon_dimensions["height"] || ICON_SIZE_Y var/is_below_water = movable.layer < WATER_LEVEL_LAYER ? "underwater-" : "" @@ -184,19 +184,19 @@ * but since we want the appearance to stay where it should be, * we have to counteract this one. */ - var/extra_width = (width - world.icon_size) * 0.5 - var/extra_height = (height - world.icon_size) * 0.5 + var/extra_width = (width - ICON_SIZE_X) * 0.5 + var/extra_height = (height - ICON_SIZE_Y) * 0.5 var/mutable_appearance/overlay_appearance = new() var/icon/immerse_icon = generated_immerse_icons["[icon]-[icon_state]-[mask_icon]"] - var/last_i = width/world.icon_size + var/last_i = width/ICON_SIZE_X for(var/i in -1 to last_i) var/mutable_appearance/underwater = mutable_appearance(icon, icon_state) - underwater.pixel_x = world.icon_size * i - extra_width - underwater.pixel_y = -world.icon_size - extra_height + underwater.pixel_x = ICON_SIZE_X * i - extra_width + underwater.pixel_y = -ICON_SIZE_Y - extra_height overlay_appearance.overlays += underwater var/mutable_appearance/water_level = is_below_water ? underwater : mutable_appearance(immerse_icon) - water_level.pixel_x = world.icon_size * i - extra_width + water_level.pixel_x = ICON_SIZE_X * i - extra_width water_level.pixel_y = -extra_height overlay_appearance.overlays += water_level diff --git a/code/datums/elements/kneejerk.dm b/code/datums/elements/kneejerk.dm index cd93fe31917ed..78c0ba7654d69 100644 --- a/code/datums/elements/kneejerk.dm +++ b/code/datums/elements/kneejerk.dm @@ -51,17 +51,17 @@ var/target_brain_damage = target_brain.damage if(target_brain_damage < BRAIN_DAMAGE_MILD) //a healthy brain produces a normal reaction - playsound(target, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) + playsound(target, 'sound/items/weapons/punchmiss.ogg', 25, TRUE, -1) target.visible_message(span_danger("[target]'s leg kicks out sharply!"), \ span_danger("Your leg kicks out sharply!")) else if(target_brain_damage < BRAIN_DAMAGE_SEVERE) //a mildly damaged brain produces a delayed reaction - playsound(target, 'sound/weapons/punchmiss.ogg', 15, TRUE, -1) + playsound(target, 'sound/items/weapons/punchmiss.ogg', 15, TRUE, -1) target.visible_message(span_danger("After a moment, [target]'s leg kicks out sharply!"), \ span_danger("After a moment, your leg kicks out sharply!")) else if(target_brain_damage < BRAIN_DAMAGE_DEATH) //a severely damaged brain produces a delayed + weaker reaction - playsound(target, 'sound/weapons/punchmiss.ogg', 5, TRUE, -1) + playsound(target, 'sound/items/weapons/punchmiss.ogg', 5, TRUE, -1) target.visible_message(span_danger("After a moment, [target]'s leg kicks out weakly!"), \ span_danger("After a moment, your leg kicks out weakly!")) diff --git a/code/datums/elements/lazy_fishing_spot.dm b/code/datums/elements/lazy_fishing_spot.dm index 1ba296bfe730d..67edcea2e88ed 100644 --- a/code/datums/elements/lazy_fishing_spot.dm +++ b/code/datums/elements/lazy_fishing_spot.dm @@ -20,10 +20,19 @@ RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) RegisterSignal(target, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(on_examined_more)) RegisterSignal(target, COMSIG_ATOM_EX_ACT, PROC_REF(explosive_fishing)) + RegisterSignal(target, COMSIG_FISH_RELEASED_INTO, PROC_REF(fish_released)) + RegisterSignal(target, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(link_to_fish_porter)) /datum/element/lazy_fishing_spot/Detach(datum/target) - UnregisterSignal(target, list(COMSIG_PRE_FISHING, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_EXAMINE_MORE, COMSIG_ATOM_EX_ACT)) - UnregisterSignal(target, list(COMSIG_PRE_FISHING, COMSIG_NPC_FISHING)) + UnregisterSignal(target, list( + COMSIG_FISH_RELEASED_INTO, + COMSIG_PRE_FISHING, + COMSIG_NPC_FISHING, + COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_EXAMINE_MORE, + COMSIG_ATOM_EX_ACT, + COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), + )) REMOVE_TRAIT(target, TRAIT_FISHING_SPOT, REF(src)) return ..() @@ -41,15 +50,7 @@ var/datum/fish_source/fish_source = GLOB.preset_fish_sources[configuration] - var/has_known_fishes = FALSE - for(var/reward in fish_source.fish_table) - if(!ispath(reward, /obj/item/fish)) - continue - var/obj/item/fish/prototype = reward - if(initial(prototype.show_in_catalog)) - has_known_fishes = TRUE - break - if(!has_known_fishes) + if(!fish_source.has_known_fishes()) return examine_text += span_tinynoticeital("This is a fishing spot. You can look again to list its fishes...") @@ -60,19 +61,7 @@ return var/datum/fish_source/fish_source = GLOB.preset_fish_sources[configuration] - - var/list/known_fishes = list() - for(var/reward in fish_source.fish_table) - if(!ispath(reward, /obj/item/fish)) - continue - var/obj/item/fish/prototype = reward - if(initial(prototype.show_in_catalog)) - known_fishes += initial(prototype.name) - - if(!length(known_fishes)) - return - - examine_text += span_info("You can catch the following fish here: [english_list(known_fishes)].") + fish_source.get_catchable_fish_names(user, source, examine_text) /datum/element/lazy_fishing_spot/proc/explosive_fishing(atom/location, severity) SIGNAL_HANDLER @@ -81,3 +70,16 @@ /datum/element/lazy_fishing_spot/proc/return_glob_fishing_spot(datum/source, list/fish_spot_container) fish_spot_container[NPC_FISHING_SPOT] = GLOB.preset_fish_sources[configuration] + +/datum/element/lazy_fishing_spot/proc/link_to_fish_porter(atom/source, mob/user, obj/item/multitool/tool) + SIGNAL_HANDLER + if(!istype(tool.buffer, /obj/machinery/fishing_portal_generator)) + return + var/datum/fish_source/fish_source = GLOB.preset_fish_sources[configuration] + var/obj/machinery/fishing_portal_generator/portal = tool.buffer + return portal.link_fishing_spot(fish_source, source, user) + +/datum/element/lazy_fishing_spot/proc/fish_released(datum/source, obj/item/fish/fish, mob/living/releaser) + SIGNAL_HANDLER + var/datum/fish_source/fish_source = GLOB.preset_fish_sources[configuration] + fish_source.readd_fish(fish, releaser) diff --git a/code/datums/elements/leeching_walk.dm b/code/datums/elements/leeching_walk.dm index c0afc52b24583..c9f547189e699 100644 --- a/code/datums/elements/leeching_walk.dm +++ b/code/datums/elements/leeching_walk.dm @@ -55,3 +55,5 @@ // Heals blood loss if(source.blood_volume < BLOOD_VOLUME_NORMAL) source.blood_volume += 2.5 * seconds_per_tick + // Slowly regulates your body temp + source.adjust_bodytemperature((source.get_body_temp_normal() - source.bodytemperature)/5) diff --git a/code/datums/elements/light_eater.dm b/code/datums/elements/light_eater.dm index 27500b066fefa..3f51590da1c6e 100644 --- a/code/datums/elements/light_eater.dm +++ b/code/datums/elements/light_eater.dm @@ -127,7 +127,19 @@ */ /datum/element/light_eater/proc/on_interacting_with(obj/item/source, mob/living/user, atom/target) SIGNAL_HANDLER - eat_lights(target, source) + if(eat_lights(target, source)) + // do a "pretend" attack if we're hitting something that can't normally be + if(isobj(target)) + var/obj/smacking = target + if(smacking.obj_flags & CAN_BE_HIT) + return NONE + else if(!isturf(target)) + return NONE + user.do_attack_animation(target) + user.changeNext_move(CLICK_CD_RAPID) + target.play_attack_sound() + // not particularly picky about what happens afterwards in the attack chain + return NONE /** * Called when a source object is used to block a thrown object, projectile, or attack diff --git a/code/datums/elements/mirage_border.dm b/code/datums/elements/mirage_border.dm index 999455a0b8343..ca7c422dd1127 100644 --- a/code/datums/elements/mirage_border.dm +++ b/code/datums/elements/mirage_border.dm @@ -24,9 +24,9 @@ var/turf/northeast = locate(clamp(x + (direction & EAST ? range : 0), 1, world.maxx), clamp(y + (direction & NORTH ? range : 0), 1, world.maxy), z) holder.vis_contents += block(southwest, northeast) if(direction & SOUTH) - holder.pixel_y -= world.icon_size * range + holder.pixel_y -= ICON_SIZE_Y * range if(direction & WEST) - holder.pixel_x -= world.icon_size * range + holder.pixel_x -= ICON_SIZE_X * range /datum/element/mirage_border/Detach(atom/movable/target) . = ..() diff --git a/code/datums/elements/movetype_handler.dm b/code/datums/elements/movetype_handler.dm index 6d730d345e284..e88aac6e26515 100644 --- a/code/datums/elements/movetype_handler.dm +++ b/code/datums/elements/movetype_handler.dm @@ -8,7 +8,6 @@ element_flags = ELEMENT_DETACH_ON_HOST_DESTROY var/list/attached_atoms = list() - var/list/paused_floating_anim_atoms = list() /datum/element/movetype_handler/Attach(datum/target) . = ..() @@ -22,7 +21,6 @@ RegisterSignals(movable_target, GLOB.movement_type_removetrait_signals, PROC_REF(on_movement_type_trait_loss)) RegisterSignal(movable_target, SIGNAL_ADDTRAIT(TRAIT_NO_FLOATING_ANIM), PROC_REF(on_no_floating_anim_trait_gain)) RegisterSignal(movable_target, SIGNAL_REMOVETRAIT(TRAIT_NO_FLOATING_ANIM), PROC_REF(on_no_floating_anim_trait_loss)) - RegisterSignal(movable_target, COMSIG_PAUSE_FLOATING_ANIM, PROC_REF(pause_floating_anim)) attached_atoms[movable_target] = TRUE if(movable_target.movement_type & (FLOATING|FLYING) && !HAS_TRAIT(movable_target, TRAIT_NO_FLOATING_ANIM)) @@ -32,14 +30,12 @@ var/list/signals_to_remove = list( SIGNAL_ADDTRAIT(TRAIT_NO_FLOATING_ANIM), SIGNAL_REMOVETRAIT(TRAIT_NO_FLOATING_ANIM), - COMSIG_PAUSE_FLOATING_ANIM ) signals_to_remove += GLOB.movement_type_addtrait_signals signals_to_remove += GLOB.movement_type_removetrait_signals UnregisterSignal(source, signals_to_remove) attached_atoms -= source - paused_floating_anim_atoms -= source STOP_FLOATING_ANIM(source) return ..() @@ -51,7 +47,7 @@ return var/old_state = source.movement_type source.movement_type |= flag - if(!(old_state & (FLOATING|FLYING)) && (source.movement_type & (FLOATING|FLYING)) && !paused_floating_anim_atoms[source] && !HAS_TRAIT(source, TRAIT_NO_FLOATING_ANIM)) + if(!(old_state & (FLOATING|FLYING)) && (source.movement_type & (FLOATING|FLYING)) && !HAS_TRAIT(source, TRAIT_NO_FLOATING_ANIM)) DO_FLOATING_ANIM(source) SEND_SIGNAL(source, COMSIG_MOVETYPE_FLAG_ENABLED, flag, old_state) @@ -78,24 +74,5 @@ /// Called when the TRAIT_NO_FLOATING_ANIM trait is removed from the mob. Restarts the bobbing animation. /datum/element/movetype_handler/proc/on_no_floating_anim_trait_loss(atom/movable/source, trait) SIGNAL_HANDLER - if(source.movement_type & (FLOATING|FLYING) && !paused_floating_anim_atoms[source]) + if(source.movement_type & (FLOATING|FLYING)) DO_FLOATING_ANIM(source) - -///Pauses the floating animation for the duration of the timer... plus [tickrate - (world.time + timer) % tickrate] to be precise. -/datum/element/movetype_handler/proc/pause_floating_anim(atom/movable/source, timer) - SIGNAL_HANDLER - if(paused_floating_anim_atoms[source] < world.time + timer) - STOP_FLOATING_ANIM(source) - if(!length(paused_floating_anim_atoms)) - START_PROCESSING(SSdcs, src) //1 second tickrate. - paused_floating_anim_atoms[source] = world.time + timer - -/datum/element/movetype_handler/process() - for(var/_paused in paused_floating_anim_atoms) - var/atom/movable/paused = _paused - if(paused_floating_anim_atoms[paused] < world.time) - if(paused.movement_type & (FLOATING|FLYING) && !HAS_TRAIT(paused, TRAIT_NO_FLOATING_ANIM)) - DO_FLOATING_ANIM(paused) - paused_floating_anim_atoms -= paused - if(!length(paused_floating_anim_atoms)) - STOP_PROCESSING(SSdcs, src) diff --git a/code/datums/elements/pet_bonus.dm b/code/datums/elements/pet_bonus.dm index 5ef8b515077ac..a802c363f44f5 100644 --- a/code/datums/elements/pet_bonus.dm +++ b/code/datums/elements/pet_bonus.dm @@ -8,6 +8,8 @@ element_flags = ELEMENT_BESPOKE argument_hash_start_idx = 2 + ///string key of the emote to do when pet. + var/emote_name ///optional cute message to send when you pet your pet! var/emote_message ///actual moodlet given, defaults to the pet animal one @@ -19,6 +21,7 @@ return ELEMENT_INCOMPATIBLE src.emote_message = emote_message + src.emote_name = emote_name src.moodlet = moodlet RegisterSignal(target, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand)) @@ -36,4 +39,6 @@ SEND_SIGNAL(pet, COMSIG_ANIMAL_PET, petter, modifiers) if(emote_message && prob(33)) pet.manual_emote(emote_message) + if(emote_name) + INVOKE_ASYNC(pet, TYPE_PROC_REF(/mob, emote), emote_name) petter.add_mood_event("petting_bonus", moodlet, pet) diff --git a/code/datums/elements/pet_collar.dm b/code/datums/elements/pet_collar.dm index 5c49de2eceb5b..f98767629e7e7 100644 --- a/code/datums/elements/pet_collar.dm +++ b/code/datums/elements/pet_collar.dm @@ -54,7 +54,7 @@ /datum/element/wears_collar/proc/on_content_enter(mob/living/source, obj/item/clothing/neck/petcollar/new_collar) SIGNAL_HANDLER - if(!istype(new_collar)) + if(!istype(new_collar) || !new_collar.tagname) return source.fully_replace_character_name(null, "\proper [new_collar.tagname]") diff --git a/code/datums/elements/quality_food_ingredient.dm b/code/datums/elements/quality_food_ingredient.dm new file mode 100644 index 0000000000000..e9bfec246c52c --- /dev/null +++ b/code/datums/elements/quality_food_ingredient.dm @@ -0,0 +1,71 @@ +///An element that adds extra food quality to any edible that was made from an atom with this attached. +/datum/element/quality_food_ingredient + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + ///The increase of recipe complexity (basically hardcoded food quality) of edibles made with this. + var/complexity_increase = 0 + +/datum/element/quality_food_ingredient/Attach(datum/target, complexity_increase) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + if(HAS_TRAIT_FROM(target, TRAIT_QUALITY_FOOD_INGREDIENT, REF(src))) //It already has this element attached. + return + + src.complexity_increase = complexity_increase + + RegisterSignal(target, COMSIG_ATOM_USED_IN_CRAFT, PROC_REF(used_in_craft)) + RegisterSignal(target, COMSIG_ITEM_BAKED, PROC_REF(item_baked)) + RegisterSignal(target, COMSIG_ITEM_MICROWAVE_COOKED_FROM, PROC_REF(microwaved_from)) + RegisterSignal(target, COMSIG_ITEM_GRILLED, PROC_REF(item_grilled)) + RegisterSignals(target, list(COMSIG_ITEM_BARBEQUE_GRILLED, COMSIG_ITEM_FRIED), PROC_REF(simply_cooked)) + RegisterSignal(target, COMSIG_ITEM_USED_AS_INGREDIENT, PROC_REF(used_as_ingredient)) + +/datum/element/quality_food_ingredient/Detach(datum/source) + UnregisterSignal(source, list( + COMSIG_ATOM_USED_IN_CRAFT, + COMSIG_ITEM_BAKED, + COMSIG_ITEM_MICROWAVE_COOKED_FROM, + COMSIG_ITEM_GRILLED, + COMSIG_ITEM_BARBEQUE_GRILLED, + COMSIG_ITEM_FRIED, + COMSIG_ITEM_USED_AS_INGREDIENT, + COMSIG_FOOD_GET_EXTRA_COMPLEXITY, + )) + REMOVE_TRAIT(source, TRAIT_QUALITY_FOOD_INGREDIENT, REF(src)) + return ..() + +/datum/element/quality_food_ingredient/proc/used_in_craft(datum/source, atom/result) + SIGNAL_HANDLER + add_quality(result) + +/datum/element/quality_food_ingredient/proc/item_baked(datum/source, atom/baked_result) + SIGNAL_HANDLER + add_quality(baked_result) + +/datum/element/quality_food_ingredient/proc/microwaved_from(datum/source, atom/result) + SIGNAL_HANDLER + add_quality(result) + +/datum/element/quality_food_ingredient/proc/item_grilled(datum/source, atom/grill_result) + SIGNAL_HANDLER + add_quality(grill_result) + +/datum/element/quality_food_ingredient/proc/simply_cooked(datum/source) + SIGNAL_HANDLER + //The target of the food quality and the source are the same, there's no need to re-add the whole element. + RegisterSignal(source, COMSIG_FOOD_GET_EXTRA_COMPLEXITY, PROC_REF(add_complexity), TRUE) + ADD_TRAIT(source, TRAIT_QUALITY_FOOD_INGREDIENT, REF(src)) + +/datum/element/quality_food_ingredient/proc/used_as_ingredient(datum/source, atom/container) + SIGNAL_HANDLER + add_quality(container) + +/datum/element/quality_food_ingredient/proc/add_quality(atom/target) + target.AddElement(/datum/element/quality_food_ingredient, complexity_increase) + RegisterSignal(target, COMSIG_FOOD_GET_EXTRA_COMPLEXITY, PROC_REF(add_complexity), TRUE) + ADD_TRAIT(target, TRAIT_QUALITY_FOOD_INGREDIENT, REF(src)) + +/datum/element/quality_food_ingredient/proc/add_complexity(datum/source, list/extra_complexity) + SIGNAL_HANDLER + extra_complexity[1] += complexity_increase diff --git a/code/datums/elements/slapcrafting.dm b/code/datums/elements/slapcrafting.dm index 42776bf31f773..4b58bddd2a0f4 100644 --- a/code/datums/elements/slapcrafting.dm +++ b/code/datums/elements/slapcrafting.dm @@ -26,7 +26,7 @@ return //Don't do anything, it just shouldn't be used in crafting. RegisterSignal(target, COMSIG_ATOM_ATTACKBY, PROC_REF(attempt_slapcraft)) - RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(get_examine_info)) + RegisterSignal(target, COMSIG_ATOM_EXAMINE_TAGS, PROC_REF(get_examine_info)) RegisterSignal(target, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(get_examine_more_info)) RegisterSignal(target, COMSIG_TOPIC, PROC_REF(topic_handler)) @@ -126,7 +126,7 @@ already_used_names += initial(result.name) string_results += list("\a [initial(result.name)]") - examine_list += span_notice("You think [source] could be used to make [english_list(string_results)]! Examine again to look at the details...") + examine_list["crafting component"] = "You think [source] could be used to make [english_list(string_results)]! Examine again to look at the details..." /// Alerts any examiners to the details of the recipe. /datum/element/slapcrafting/proc/get_examine_more_info(atom/source, mob/user, list/examine_list) diff --git a/code/datums/elements/spooky.dm b/code/datums/elements/spooky.dm index 30a04f6348b20..89d53c4e99734 100644 --- a/code/datums/elements/spooky.dm +++ b/code/datums/elements/spooky.dm @@ -40,7 +40,7 @@ if((!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly))) C.adjustStaminaLoss(18) //boneless humanoids don't lose the will to live to_chat(C, "DOOT") - to_chat(C, "You're feeling more bony.") + to_chat(C, span_robot("You're feeling more bony.")) INVOKE_ASYNC(src, PROC_REF(spectral_change), H) else //the sound will spook monkeys. diff --git a/code/datums/elements/waddling.dm b/code/datums/elements/waddling.dm index e63d0329bb630..45c7fe5e93773 100644 --- a/code/datums/elements/waddling.dm +++ b/code/datums/elements/waddling.dm @@ -18,7 +18,7 @@ return if(isliving(moved)) var/mob/living/living_moved = moved - if (living_moved.incapacitated() || living_moved.body_position == LYING_DOWN) + if (living_moved.incapacitated || living_moved.body_position == LYING_DOWN) return waddling_animation(moved) diff --git a/code/datums/elements/wall_engraver.dm b/code/datums/elements/wall_engraver.dm index 7204d8cacef5e..2b319b0609a28 100644 --- a/code/datums/elements/wall_engraver.dm +++ b/code/datums/elements/wall_engraver.dm @@ -31,12 +31,12 @@ /datum/element/wall_engraver/proc/try_chisel(obj/item/item, turf/closed/wall, mob/living/user) if(!istype(wall) || !user.mind) return - if(HAS_TRAIT_FROM(wall, TRAIT_NOT_ENGRAVABLE, INNATE_TRAIT)) - user.balloon_alert(user, "wall cannot be engraved!") - return - if(HAS_TRAIT_FROM(wall, TRAIT_NOT_ENGRAVABLE, TRAIT_GENERIC)) + if(HAS_TRAIT_FROM(wall, TRAIT_NOT_ENGRAVABLE, ENGRAVED_TRAIT)) user.balloon_alert(user, "wall has already been engraved!") return + if(HAS_TRAIT(wall, TRAIT_NOT_ENGRAVABLE)) + user.balloon_alert(user, "wall cannot be engraved!") + return if(!length(user.mind?.memories)) user.balloon_alert(user, "nothing memorable to engrave!") return diff --git a/code/datums/elements/wall_tearer.dm b/code/datums/elements/wall_tearer.dm index 2c9ff5416d59b..cf61de7300919 100644 --- a/code/datums/elements/wall_tearer.dm +++ b/code/datums/elements/wall_tearer.dm @@ -51,7 +51,7 @@ var/rip_time = (istype(target, /turf/closed/wall/r_wall) ? tear_time * reinforced_multiplier : tear_time) / 3 if (rip_time > 0) tearer.visible_message(span_warning("[tearer] begins tearing through [target]!")) - playsound(tearer, 'sound/machines/airlock_alien_prying.ogg', vol = 100, vary = TRUE) + playsound(tearer, 'sound/machines/airlock/airlock_alien_prying.ogg', vol = 100, vary = TRUE) target.balloon_alert(tearer, "tearing...") if (!do_after(tearer, delay = rip_time, target = target, interaction_key = do_after_key)) tearer.balloon_alert(tearer, "interrupted!") diff --git a/code/datums/elements/weapon_description.dm b/code/datums/elements/weapon_description.dm index 0897b571159bb..eda7ca59b49e6 100644 --- a/code/datums/elements/weapon_description.dm +++ b/code/datums/elements/weapon_description.dm @@ -73,6 +73,10 @@ // Doesn't show the base notes for items that have the override notes variable set to true if(!source.override_notes) + if (source.sharpness & SHARP_EDGED) + readout += "It's sharp and could cause bleeding wounds." + if (source.sharpness & SHARP_POINTY) + readout += "It's pointy and could cause piercing wounds." // Make sure not to divide by 0 on accident if(source.force > 0) readout += "It takes about [span_warning("[HITS_TO_CRIT(source.force)] melee hit\s")] to take down an enemy." diff --git a/code/datums/elements/wheel.dm b/code/datums/elements/wheel.dm index 2bb8977ca5cae..a50addb15a382 100644 --- a/code/datums/elements/wheel.dm +++ b/code/datums/elements/wheel.dm @@ -17,7 +17,7 @@ return if(isliving(moved)) var/mob/living/living_moved = moved - if (living_moved.incapacitated() || living_moved.body_position == LYING_DOWN) + if (living_moved.incapacitated || living_moved.body_position == LYING_DOWN) return var/rotation_degree = (360 / 3) if(direction & SOUTHWEST) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 29b567e6f3cb2..12606aba6e615 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -100,8 +100,8 @@ user.log_message(msg, LOG_EMOTE) var/tmp_sound = get_sound(user) - if(tmp_sound && should_play_sound(user, intentional) && TIMER_COOLDOWN_FINISHED(user, type)) - TIMER_COOLDOWN_START(user, type, audio_cooldown) + if(tmp_sound && should_play_sound(user, intentional) && TIMER_COOLDOWN_FINISHED(user, "audible_emote_cooldown")) + TIMER_COOLDOWN_START(user, "audible_emote_cooldown", audio_cooldown) //SKYRAT EDIT CHANGE BEGIN //playsound(source = user,soundin = tmp_sound,vol = 50, vary = vary, ignore_walls = sound_wall_ignore) - SKYRAT EDIT - ORIGINAL if(istype(src, /datum/emote/living/lewd)) @@ -136,16 +136,16 @@ runechat_flags = EMOTE_MESSAGE, ) else if(is_important) - to_chat(viewer, "[user] [msg]") + to_chat(viewer, span_emote("[user] [msg]")) else if(is_audible && is_visual) viewer.show_message( - "[user] [msg]", MSG_AUDIBLE, - "You see how [user] [msg]", MSG_VISUAL, + span_emote("[user] [msg]"), MSG_AUDIBLE, + span_emote("You see how [user] [msg]"), MSG_VISUAL, ) else if(is_audible) - viewer.show_message("[user] [msg]", MSG_AUDIBLE) + viewer.show_message(span_emote("[user] [msg]"), MSG_AUDIBLE) else if(is_visual) - viewer.show_message("[user] [msg]", MSG_VISUAL) + viewer.show_message(span_emote("[user] [msg]"), MSG_VISUAL) return // Early exit so no dchat message // The emote has some important information, and should always be shown to the user @@ -155,7 +155,7 @@ if(!pref_check_emote(viewer)) continue // SKYRAT EDIT END - to_chat(viewer, "[user] [msg]") + to_chat(viewer, span_emote("[user] [msg]")) if(user.runechat_prefs_check(viewer, EMOTE_MESSAGE)) viewer.create_chat_message( speaker = user, @@ -167,7 +167,7 @@ else if(is_visual && is_audible) user.audible_message( message = msg, - deaf_message = "You see how [user] [msg]", + deaf_message = span_emote("You see how [user] [msg]"), self_message = msg, audible_message_flags = EMOTE_MESSAGE|ALWAYS_SHOW_SELF_MESSAGE, separation = space, // SKYRAT EDIT ADDITION @@ -240,8 +240,7 @@ if(!pref_check_emote(ghost)) continue // SKYRAT EDIT END - ghost.show_message("[FOLLOW_LINK(ghost, user)] [dchatmsg]") // SKYRAT EDIT CHANGE - Indented - + to_chat(ghost, span_emote("[FOLLOW_LINK(ghost, user)] [dchatmsg]")) return @@ -396,7 +395,6 @@ else return FALSE //SKYRAT EDIT END - return TRUE /** diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 1187a3bad70ce..36af740490ba3 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -1,13 +1,23 @@ /datum/ert + ///Antag datum team for this type of ERT. var/team = /datum/team/ert + ///Do we open the doors to the "high-impact" weapon/explosive cabinets? Used for combat-focused ERTs. var/opendoors = TRUE + ///Alternate antag datum given to the leader of the squad. var/leader_role = /datum/antagonist/ert/commander + ///Do we humanize all spawned players or keep them the species in their current character prefs? var/enforce_human = TRUE - var/roles = list(/datum/antagonist/ert/security, /datum/antagonist/ert/medic, /datum/antagonist/ert/engineer) //List of possible roles to be assigned to ERT members. + ///A list of roles distributed to the selected candidates that are not the leader. + var/roles = list(/datum/antagonist/ert/security, /datum/antagonist/ert/medic, /datum/antagonist/ert/engineer) + ///The custom name assigned to this team, for their antag datum/roundend reporting. var/rename_team + ///Defines the color/alert code of the response team. Unused if a polldesc is defined. var/code + ///The mission given to this ERT type in their flavor text. var/mission = "Assist the station." + ///The number of players for consideration. var/teamsize = 5 + ///The "would you like to play as XXX" message used when polling for players. var/polldesc /// If TRUE, gives the team members "[role] [random last name]" style names var/random_names = TRUE @@ -129,3 +139,14 @@ mission = "Having heard the station's request for aid, assist the crew in defending themselves." polldesc = "an independent station defense militia" random_names = TRUE + +/datum/ert/medical + opendoors = FALSE + teamsize = 4 + leader_role = /datum/antagonist/ert/medical_commander + enforce_human = FALSE //All the best doctors I know are moths and cats + roles = list(/datum/antagonist/ert/medical_technician) + rename_team = "EMT Squad" + code = "Violet" + mission = "Provide emergency medical services to the crew." + polldesc = "an emergency medical response team" diff --git a/code/datums/greyscale/README.md b/code/datums/greyscale/README.md index 9ff6bbca1d189..0d8106ebec687 100644 --- a/code/datums/greyscale/README.md +++ b/code/datums/greyscale/README.md @@ -4,7 +4,7 @@ If you're wanting to add easy recolors for your sprite then this is the system f - Multiple color layers so your sprite can be generated from more than one color. - Mixed greyscale and colored sprite layers; You can choose to only greyscale a part of the sprite or have premade filters applied to layers. -- Blend modes; Instead of just putting layers of sprites on top of eachother you can use the more advanced blend modes. +- Blend modes; Instead of just putting layers of sprites on top of each other you can use the more advanced blend modes. - Reusable configurations; You can reference greyscale sprites from within the configuration of another, allowing you to have a bunch of styles with minimal additional configuration. ## Other Documents @@ -31,7 +31,7 @@ This is simply some pointers in the code linking together your dmi and the json ## Json Configuration File -The json is made up of some metadata and a list of layers used while creating the sprite. Inner lists are processed as their own chunk before being applied elsewhere, this is useful when you start using more advanced blend modes. Most of the time though you're just going to want a list of icons overlaid on top of eachother. +The json is made up of some metadata and a list of layers used while creating the sprite. Inner lists are processed as their own chunk before being applied elsewhere, this is useful when you start using more advanced blend modes. Most of the time though you're just going to want a list of icons overlaid on top of each other. ```json { 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 99812cfa59afc..8296431384411 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm @@ -42,13 +42,11 @@ json_config = 'code/datums/greyscale/json_configs/beret_worn.json' /datum/greyscale_config/beret_badge - name = "Beret With Badge" name = "Badged Beret" icon_file = 'icons/obj/clothing/head/beret.dmi' json_config = 'code/datums/greyscale/json_configs/beret_badge.json' /datum/greyscale_config/beret_badge/worn - name = "Beret With Badge Worn" name = "Badged Beret (Worn)" json_config = 'code/datums/greyscale/json_configs/beret_badge_worn.json' SKYRAT EDIT END */ @@ -276,6 +274,11 @@ SKYRAT EDIT END */ icon_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' json_config = 'code/datums/greyscale/json_configs/jumpsuit_prison_inhand.json' +/datum/greyscale_config/jumpsuit/worn_digi + name = "Jumpsuit Worn (Digitigrate)" + icon_file = 'icons/mob/clothing/under/digi_template.dmi' + json_config = 'code/datums/greyscale/json_configs/jumpsuit_worn_digilegs.json' + /datum/greyscale_config/eth_tunic name = "Ethereal Tunic" icon_file = 'icons/obj/clothing/under/ethereal.dmi' diff --git a/code/datums/greyscale/json_configs/jumpsuit_worn_digilegs.json b/code/datums/greyscale/json_configs/jumpsuit_worn_digilegs.json new file mode 100644 index 0000000000000..9aa201cece3c1 --- /dev/null +++ b/code/datums/greyscale/json_configs/jumpsuit_worn_digilegs.json @@ -0,0 +1,10 @@ +{ + "": [ + { + "type": "icon_state", + "icon_state": "jumpsuit", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/datums/greyscale/json_configs/kitsune.json b/code/datums/greyscale/json_configs/kitsune.json index bee6418321387..495520fbbd806 100644 --- a/code/datums/greyscale/json_configs/kitsune.json +++ b/code/datums/greyscale/json_configs/kitsune.json @@ -12,5 +12,19 @@ "blend_mode": "overlay", "color_ids": [ 2 ] } + ], + "kitsune_up": [ + { + "type": "icon_state", + "icon_state": "kitsune_base_up", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "kitsune_stripe_up", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } ] } diff --git a/code/datums/greyscale/layer.dm b/code/datums/greyscale/layer.dm index 06a001c1ad835..f12fb1992c9db 100644 --- a/code/datums/greyscale/layer.dm +++ b/code/datums/greyscale/layer.dm @@ -64,7 +64,7 @@ /datum/greyscale_layer/proc/CrossVerify() return -/// Used to actualy create the layer using the given colors +/// Used to actually create the layer using the given colors /// Do not override, use InternalGenerate instead /datum/greyscale_layer/proc/Generate(list/colors, list/render_steps, icon/new_icon) var/list/processed_colors = list() diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index c3562aa598732..732323d28655c 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -89,4 +89,4 @@ msg += "Protect Assistant Role From Traitor: [CONFIG_GET(flag/protect_assistant_from_antagonist)]" msg += "Enforce Human Authority: [CONFIG_GET(flag/enforce_human_authority)]" msg += "Allow Latejoin Antagonists: [CONFIG_GET(flag/allow_latejoin_antagonists)]" - to_chat(src, "[msg.Join("
")]
") + to_chat(src, span_infoplain(msg.Join("
"))) diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index c69a279938dd1..fead0417db9b2 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -179,7 +179,7 @@ if(QDELETED(src)) return FALSE - . = !QDELETED(user) && !user.incapacitated() && !QDELETED(calling_holopad) && calling_holopad.is_operational && user.loc == calling_holopad.loc + . = !QDELETED(user) && !user.incapacitated && !QDELETED(calling_holopad) && calling_holopad.is_operational && user.loc == calling_holopad.loc if(.) if(!connected_holopad) diff --git a/code/datums/hud.dm b/code/datums/hud.dm index ca0a9d43520f3..93b2ea249262c 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -26,7 +26,7 @@ GLOBAL_LIST_INIT(trait_to_hud, list( TRAIT_SECURITY_HUD = DATA_HUD_SECURITY_ADVANCED, TRAIT_MEDICAL_HUD = DATA_HUD_MEDICAL_ADVANCED, TRAIT_DIAGNOSTIC_HUD = DATA_HUD_DIAGNOSTIC, - TRAIT_BOT_PATH_HUD = DATA_HUD_BOT_PATH, // SKYRAT EDIT CHANGE + TRAIT_BOT_PATH_HUD = DATA_HUD_BOT_PATH, TRAIT_PERMIT_HUD = DATA_HUD_PERMIT, // SKYRAT EDIT ADDITION TRAIT_BASIC_SECURITY_HUD = DATA_HUD_SECURITY_BASIC // BUBBER EDIT ADDITION )) @@ -42,11 +42,11 @@ GLOBAL_LIST_INIT(trait_to_hud, list( // by z level so when they change z's we can adjust what images they see from this hud. var/list/hud_users = list() - ///used for signal tracking purposes, associative list of the form: list(hud atom = TRUE) that isnt separated by z level + ///used for signal tracking purposes, associative list of the form: list(hud atom = TRUE) that isn't separated by z level var/list/atom/hud_atoms_all_z_levels = list() ///used for signal tracking purposes, associative list of the form: list(hud user = number of times this hud was added to this user). - ///that isnt separated by z level + ///that isn't separated by z level var/list/mob/hud_users_all_z_levels = list() ///these will be the indexes for the atom's hud_list @@ -56,10 +56,10 @@ GLOBAL_LIST_INIT(trait_to_hud, list( var/list/next_time_allowed = list() ///mobs that have triggered the cooldown and are queued to see the hud, but do not yet var/list/queued_to_see = list() - /// huduser = list(atoms with their hud hidden) - aka everyone hates targeted invisiblity + /// huduser = list(atoms with their hud hidden) - aka everyone hates targeted invisibility var/list/hud_exceptions = list() ///whether or not this atom_hud type updates the global huds_by_category list. - ///some subtypes cant work like this since theyre supposed to "belong" to + ///some subtypes can't work like this since they're supposed to "belong" to ///one target atom each. it will still go in the other global hud lists. var/uses_global_hud_category = TRUE @@ -178,9 +178,9 @@ GLOBAL_LIST_INIT(trait_to_hud, list( hud_users_all_z_levels[former_viewer] -= 1//decrement number of sources for this hud on this user (bad way to track i know) - if (absolute || hud_users_all_z_levels[former_viewer] <= 0)//if forced or there arent any sources left, remove the user + if (absolute || hud_users_all_z_levels[former_viewer] <= 0)//if forced or there aren't any sources left, remove the user - if(!hud_atoms_all_z_levels[former_viewer])//make sure we arent unregistering changes on a mob thats also a hud atom for this hud + if(!hud_atoms_all_z_levels[former_viewer])//make sure we aren't unregistering changes on a mob that's also a hud atom for this hud UnregisterSignal(former_viewer, COMSIG_MOVABLE_Z_CHANGED) UnregisterSignal(former_viewer, COMSIG_QDELETING) @@ -225,7 +225,7 @@ GLOBAL_LIST_INIT(trait_to_hud, list( if(!hud_atom_to_remove || !hud_atoms_all_z_levels[hud_atom_to_remove]) return FALSE - //make sure we arent unregistering a hud atom thats also a hud user mob + //make sure we aren't unregistering a hud atom that's also a hud user mob if(!hud_users_all_z_levels[hud_atom_to_remove]) UnregisterSignal(hud_atom_to_remove, COMSIG_MOVABLE_Z_CHANGED) UnregisterSignal(hud_atom_to_remove, COMSIG_QDELETING) @@ -281,12 +281,12 @@ GLOBAL_LIST_INIT(trait_to_hud, list( for(var/mob/hud_user as anything in get_hud_users_for_z_level(atom_turf.z)) if(!hud_user.client) continue - hud_user.client.images -= hud_atom.active_hud_list[hud_category_to_remove]//by this point it shouldnt be in active_hud_list + hud_user.client.images -= hud_atom.active_hud_list[hud_category_to_remove]//by this point it shouldn't be in active_hud_list return TRUE -///when a hud atom or hud user changes z levels this makes sure it gets the images it needs and removes the images it doesnt need. -///because of how signals work we need the same proc to handle both use cases because being a hud atom and being a hud user arent mutually exclusive +///when a hud atom or hud user changes z levels this makes sure it gets the images it needs and removes the images it doesn't need. +///because of how signals work we need the same proc to handle both use cases because being a hud atom and being a hud user aren't mutually exclusive /datum/atom_hud/proc/on_atom_or_user_z_level_changed(atom/movable/moved_atom, turf/old_turf, turf/new_turf) SIGNAL_HANDLER if(old_turf) @@ -303,7 +303,7 @@ GLOBAL_LIST_INIT(trait_to_hud, list( if(new_turf) if(hud_users_all_z_levels[moved_atom]) - hud_users[new_turf.z][moved_atom] = TRUE //hud users is associative, hud atoms isnt + hud_users[new_turf.z][moved_atom] = TRUE //hud users is associative, hud atoms isn't add_all_atoms_to_single_mob_hud(moved_atom, get_hud_atoms_for_z_level(new_turf.z)) diff --git a/code/datums/id_trim/_id_trim.dm b/code/datums/id_trim/_id_trim.dm index 067e2e3826390..32bafcb41d3f7 100644 --- a/code/datums/id_trim/_id_trim.dm +++ b/code/datums/id_trim/_id_trim.dm @@ -24,6 +24,14 @@ /// Accesses that this trim unlocks on a card that require wildcard slots to apply. If a card cannot accept all a trim's wildcard accesses, the card is incompatible with the trim. var/list/wildcard_access = list() + ///If true, IDs with this trim will grant wearers with bigger arrows when pointing + var/big_pointer = FALSE + ///If set, IDs with this trim will give wearers arrows of different colors when pointing + var/pointer_color + +/datum/id_trim/proc/find_job() + return null + /// Returns the SecHUD job icon state for whatever this object's ID card is, if it has one. /obj/item/proc/get_sechud_job_icon_state() var/obj/item/card/id/id_card = GetID() diff --git a/code/datums/id_trim/admin.dm b/code/datums/id_trim/admin.dm index 9de155c9a0468..ee0cf1b977e0a 100644 --- a/code/datums/id_trim/admin.dm +++ b/code/datums/id_trim/admin.dm @@ -5,6 +5,8 @@ department_color = COLOR_CENTCOM_BLUE subdepartment_color = COLOR_SERVICE_LIME threat_modifier = -INFINITY + big_pointer = TRUE + pointer_color = COLOR_GREEN /datum/id_trim/admin/New() . = ..() diff --git a/code/datums/id_trim/centcom.dm b/code/datums/id_trim/centcom.dm index 5cc24f4bd6e19..498a4de254e3b 100644 --- a/code/datums/id_trim/centcom.dm +++ b/code/datums/id_trim/centcom.dm @@ -7,6 +7,8 @@ department_color = COLOR_CENTCOM_BLUE subdepartment_color = COLOR_CENTCOM_BLUE threat_modifier = -10 // Centcom are legally allowed to do whatever they want + big_pointer = TRUE + pointer_color = COLOR_CENTCOM_BLUE /// Trim for Centcom VIPs /datum/id_trim/centcom/vip @@ -20,6 +22,7 @@ trim_state = "trim_janitor" department_color = COLOR_CENTCOM_BLUE subdepartment_color = COLOR_SERVICE_LIME + big_pointer = FALSE /// Trim for Centcom Thunderdome Overseers. /datum/id_trim/centcom/thunderdome_overseer @@ -35,10 +38,12 @@ /datum/id_trim/centcom/intern access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_WEAPONS) assignment = "CentCom Intern" + big_pointer = FALSE /// Trim for Centcom Head Interns. Different assignment, common station access added on. /datum/id_trim/centcom/intern/head assignment = "CentCom Head Intern" + big_pointer = TRUE /datum/id_trim/centcom/intern/head/New() . = ..() @@ -49,11 +54,13 @@ /datum/id_trim/centcom/bounty_hunter access = list(ACCESS_CENT_GENERAL) assignment = "Bounty Hunter" + big_pointer = FALSE /// Trim for Centcom Bartenders. /datum/id_trim/centcom/bartender access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR) assignment = JOB_CENTCOM_BARTENDER + big_pointer = FALSE /// Trim for Centcom Medical Officers. /datum/id_trim/centcom/medical_officer @@ -68,6 +75,7 @@ /// Trim for Centcom Specops Officers. All Centcom and Station Access. /datum/id_trim/centcom/specops_officer assignment = JOB_CENTCOM_SPECIAL_OFFICER + big_pointer = FALSE /datum/id_trim/centcom/specops_officer/New() . = ..() @@ -129,6 +137,7 @@ trim_state = "trim_securityofficer" subdepartment_color = COLOR_SECURITY_RED sechud_icon_state = SECHUD_SECURITY_RESPONSE_OFFICER + big_pointer = FALSE /datum/id_trim/centcom/ert/security/New() . = ..() @@ -141,6 +150,7 @@ trim_state = "trim_stationengineer" subdepartment_color = COLOR_ENGINEERING_ORANGE sechud_icon_state = SECHUD_ENGINEERING_RESPONSE_OFFICER + big_pointer = FALSE /datum/id_trim/centcom/ert/engineer/New() . = ..() @@ -153,6 +163,7 @@ trim_state = "trim_medicaldoctor" subdepartment_color = COLOR_MEDICAL_BLUE sechud_icon_state = SECHUD_MEDICAL_RESPONSE_OFFICER + big_pointer = FALSE /datum/id_trim/centcom/ert/medical/New() . = ..() @@ -165,6 +176,7 @@ trim_state = "trim_chaplain" subdepartment_color = COLOR_SERVICE_LIME sechud_icon_state = SECHUD_RELIGIOUS_RESPONSE_OFFICER + big_pointer = FALSE /datum/id_trim/centcom/ert/chaplain/New() . = ..() @@ -177,6 +189,7 @@ trim_state = "trim_ert_janitor" subdepartment_color = COLOR_SERVICE_LIME sechud_icon_state = SECHUD_JANITORIAL_RESPONSE_OFFICER + big_pointer = FALSE /datum/id_trim/centcom/ert/janitor/New() . = ..() @@ -189,6 +202,7 @@ trim_state = "trim_clown" subdepartment_color = COLOR_MAGENTA sechud_icon_state = SECHUD_ENTERTAINMENT_RESPONSE_OFFICER + big_pointer = FALSE /datum/id_trim/centcom/ert/clown/New() . = ..() @@ -197,6 +211,8 @@ /datum/id_trim/centcom/ert/militia assignment = "Frontier Militia" + big_pointer = FALSE /datum/id_trim/centcom/ert/militia/general assignment = "Frontier Militia General" + big_pointer = TRUE diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index b5893380fde6f..34432a638db01 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -24,10 +24,10 @@ /datum/id_trim/job/New() if(ispath(job)) - job = SSjob.GetJobType(job) + job = SSjob.get_job_type(job) if(isnull(job_changes)) - job_changes = SSmapping.config.job_changes + job_changes = SSmapping.current_map.job_changes if(!length(job_changes)) refresh_trim_access() @@ -76,6 +76,9 @@ return TRUE +/datum/id_trim/job/find_job() + return job + /datum/id_trim/job/assistant assignment = JOB_ASSISTANT trim_state = "trim_assistant" @@ -156,6 +159,29 @@ ) job = /datum/job/bartender +/datum/id_trim/job/pun_pun + assignment = "Busser" + trim_state = "trim_busser" + department_color = COLOR_SERVICE_LIME + subdepartment_color = COLOR_SERVICE_LIME + sechud_icon_state = SECHUD_BUSSER + minimal_access = list( + ACCESS_MINERAL_STOREROOM, + ACCESS_SERVICE, + ACCESS_THEATRE, + ) + extra_access = list( + ACCESS_HYDROPONICS, + ACCESS_KITCHEN, + ACCESS_BAR, + ) + template_access = list( + ACCESS_CAPTAIN, + ACCESS_CHANGE_IDS, + ACCESS_HOP, + ) + job = /datum/job/pun_pun + /datum/id_trim/job/bitrunner assignment = JOB_BITRUNNER trim_state = "trim_bitrunner" @@ -238,6 +264,8 @@ ACCESS_CHANGE_IDS, ) job = /datum/job/captain + big_pointer = TRUE + pointer_color = COLOR_COMMAND_BLUE /// Captain gets all station accesses hardcoded in because it's the Captain. /datum/id_trim/job/captain/New() @@ -360,6 +388,8 @@ ACCESS_CHANGE_IDS, ) job = /datum/job/chief_engineer + big_pointer = TRUE + pointer_color = COLOR_ENGINEERING_ORANGE /datum/id_trim/job/chief_medical_officer assignment = JOB_CHIEF_MEDICAL_OFFICER @@ -399,6 +429,8 @@ ACCESS_CHANGE_IDS, ) job = /datum/job/chief_medical_officer + big_pointer = TRUE + pointer_color = COLOR_MEDICAL_BLUE /datum/id_trim/job/clown assignment = JOB_CLOWN @@ -612,6 +644,8 @@ ACCESS_CHANGE_IDS, ) job = /datum/job/head_of_personnel + big_pointer = TRUE + pointer_color = COLOR_SERVICE_LIME /datum/id_trim/job/head_of_security assignment = JOB_HEAD_OF_SECURITY @@ -661,6 +695,8 @@ ACCESS_CHANGE_IDS, ) job = /datum/job/head_of_security + big_pointer = TRUE + pointer_color = COLOR_SECURITY_RED /datum/id_trim/job/head_of_security/refresh_trim_access() . = ..() @@ -893,6 +929,8 @@ ACCESS_CHANGE_IDS, ) job = /datum/job/quartermaster + big_pointer = TRUE + pointer_color = COLOR_CARGO_BROWN /datum/id_trim/job/research_director assignment = JOB_RESEARCH_DIRECTOR @@ -941,6 +979,8 @@ ACCESS_CHANGE_IDS, ) job = /datum/job/research_director + big_pointer = TRUE + pointer_color = COLOR_SCIENCE_PINK /datum/id_trim/job/roboticist assignment = JOB_ROBOTICIST @@ -1056,7 +1096,7 @@ if(CONFIG_GET(number/depsec_access_level) == POPULATION_SCALED_ACCESS) var/minimal_security_officers = 3 // We do not spawn in any more lockers if there are 5 or less security officers, so let's keep it lower than that number. - var/datum/job/J = SSjob.GetJob(JOB_SECURITY_OFFICER) + var/datum/job/J = SSjob.get_job(JOB_SECURITY_OFFICER) if((J.spawn_positions - minimal_security_officers) <= 0) access |= elevated_access @@ -1206,6 +1246,7 @@ extra_access = list() template_access = list() job = /datum/job/veteran_advisor + big_pointer = TRUE /datum/id_trim/job/veteran_advisor/refresh_trim_access() . = ..() @@ -1275,3 +1316,5 @@ extra_access = list() template_access = list() job = /datum/job/human_ai + big_pointer = TRUE + pointer_color = COLOR_MODERATE_BLUE diff --git a/code/datums/id_trim/ruins.dm b/code/datums/id_trim/ruins.dm index e308287ec5c5d..1eccc77a985b5 100644 --- a/code/datums/id_trim/ruins.dm +++ b/code/datums/id_trim/ruins.dm @@ -72,6 +72,7 @@ /datum/id_trim/centcom/corpse/commander assignment = "Commander" access = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE) + big_pointer = TRUE /// Trim for various Centcom corpses. /datum/id_trim/centcom/corpse/private_security @@ -115,6 +116,7 @@ /datum/id_trim/pirate/captain assignment = "Pirate Captain" trim_state = "trim_captain" + big_pointer = TRUE /datum/id_trim/pirate/silverscale assignment = "Silver Scale Member" @@ -130,6 +132,7 @@ /datum/id_trim/away/dangerous_research/head_occultist assignment = "Head Occultist" access = list(ACCESS_AWAY_SCIENCE, ACCESS_AWAY_COMMAND) + big_pointer = TRUE //Trims for waystation.dmm space ruin /datum/id_trim/away/waystation/cargo_technician @@ -143,6 +146,7 @@ trim_state = "trim_quartermaster" department_color = COLOR_CARGO_BROWN access = list(ACCESS_AWAY_SUPPLY, ACCESS_AWAY_COMMAND) + big_pointer = TRUE /datum/id_trim/away/waystation/security assignment = "Waystation Security Officer" @@ -162,8 +166,9 @@ /datum/id_trim/away/the_outlet/mad_manager assignment = "The Mad Manager" access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MEDICAL, ACCESS_AWAY_SEC) + big_pointer = TRUE -//Haunted Trading Post IDs // +//Haunted Trading Post IDs /datum/id_trim/away/hauntedtradingpost assignment = "Donk Co. Employee" department_color = COLOR_ENGINEERING_ORANGE @@ -174,4 +179,4 @@ /datum/id_trim/away/hauntedtradingpost/boss assignment = "Donk Co. Executive" access = list(ACCESS_SYNDICATE, ACCESS_AWAY_COMMAND) -// // + big_pointer = TRUE diff --git a/code/datums/id_trim/syndicate.dm b/code/datums/id_trim/syndicate.dm index 9a3e0c5fc9173..41c76aaf3784c 100644 --- a/code/datums/id_trim/syndicate.dm +++ b/code/datums/id_trim/syndicate.dm @@ -7,11 +7,14 @@ sechud_icon_state = SECHUD_SYNDICATE access = list(ACCESS_SYNDICATE) threat_modifier = 5 // Bad guy on deck + big_pointer = TRUE + pointer_color = COLOR_SYNDIE_RED /// Trim for Syndicate mobs, outfits and corpses. /datum/id_trim/syndicom/crew assignment = "Syndicate Operative" access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) + big_pointer = FALSE /// Interdyne medical Staff /datum/id_trim/syndicom/Interdyne/pharmacist @@ -19,6 +22,8 @@ trim_state = "trim_medicaldoctor" sechud_icon_state = SECHUD_SYNDICATE_INTERDYNE access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SURGERY) + big_pointer = FALSE + pointer_color = null /// Interdyne head medical Staff /datum/id_trim/syndicom/Interdyne/pharmacist_director @@ -28,6 +33,8 @@ subdepartment_color = COLOR_SYNDIE_RED_HEAD sechud_icon_state = SECHUD_SYNDICATE_INTERDYNE_HEAD access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SURGERY) + big_pointer = TRUE + pointer_color = COLOR_SYNDIE_RED_HEAD /// Trim for the space IRS agents (why are they syndie access? I wouldn't worry about it.) /datum/id_trim/syndicom/irs @@ -37,11 +44,14 @@ subdepartment_color = COLOR_COMMAND_BLUE sechud_icon_state = SECHUD_DEATH_COMMANDO access = list(ACCESS_SYNDICATE, ACCESS_MAINT_TUNNELS) + big_pointer = FALSE + pointer_color = null /datum/id_trim/syndicom/irs/auditor assignment = "Internal Revenue Service Head Auditor" trim_state = "trim_quartermaster" sechud_icon_state = SECHUD_QUARTERMASTER + big_pointer = TRUE /// Trim for Syndicate mobs, outfits and corpses. /datum/id_trim/syndicom/captain @@ -60,6 +70,8 @@ /datum/id_trim/battlecruiser/captain assignment = "Syndicate Battlecruiser Captain" access = list(ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) + big_pointer = TRUE + pointer_color = COLOR_SYNDIE_RED /// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. /datum/id_trim/chameleon @@ -79,6 +91,8 @@ /datum/id_trim/chameleon/operative/nuke_leader assignment = "Syndicate Operative Leader" access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) + big_pointer = TRUE + pointer_color = COLOR_SYNDIE_RED /// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. /datum/id_trim/chameleon/operative/clown @@ -89,3 +103,5 @@ /datum/id_trim/chameleon/operative/clown_leader assignment = "Syndicate Entertainment Operative Leader" access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) + big_pointer = TRUE + pointer_color = COLOR_SYNDIE_RED diff --git a/code/datums/json_database.dm b/code/datums/json_database.dm index ea3ff354b48ce..6baeb44ab091b 100644 --- a/code/datums/json_database.dm +++ b/code/datums/json_database.dm @@ -61,6 +61,16 @@ /datum/json_database/proc/get_key(key) return cached_data[key] +/// Picks the data of a random key and then removes that key from the database. +/// Since the list is no longer inside the database, you can mutate and use it as you like. +/datum/json_database/proc/pick_and_take_key() + if(!length(cached_data)) + return null + var/key = pick(cached_data) + . = cached_data[key] + cached_data -= key + queue_save() + /// 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 diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index 54185efdb8dda..122eab2861e99 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -2,7 +2,7 @@ * A datum for sounds that need to loop, with a high amount of configurability. */ /datum/looping_sound - /// (list or soundfile) Since this can be either a list or a single soundfile you can have random sounds. May contain further lists but must contain a soundfile at the end. + /// (list or soundfile) Since this can be either a list or a single soundfile you can have random sounds. May contain further lists but must contain a soundfile at the end. In a list, path must have also be assigned a value or it will be assigned 0 and not play. var/mid_sounds /// The length of time to wait between playing mid_sounds. var/mid_length diff --git a/code/datums/looping_sounds/acid.dm b/code/datums/looping_sounds/acid.dm index e461e5d02ce9c..9dcf6e1750a0c 100644 --- a/code/datums/looping_sounds/acid.dm +++ b/code/datums/looping_sounds/acid.dm @@ -1,5 +1,5 @@ /// Soundloop for the acid component. /datum/looping_sound/acid - mid_sounds = list('sound/items/welder.ogg' = 1) + mid_sounds = list('sound/items/tools/welder.ogg' = 1) mid_length = 10 volume = 150 diff --git a/code/datums/looping_sounds/breathing.dm b/code/datums/looping_sounds/breathing.dm index 73474149ae4bb..a50e13a7fd5da 100644 --- a/code/datums/looping_sounds/breathing.dm +++ b/code/datums/looping_sounds/breathing.dm @@ -1,13 +1,13 @@ /datum/looping_sound/breathing mid_sounds = list( - 'sound/voice/breathing/internals_breathing1.ogg' = 1, - 'sound/voice/breathing/internals_breathing2.ogg' = 1, - 'sound/voice/breathing/internals_breathing3.ogg' = 1, - 'sound/voice/breathing/internals_breathing4.ogg' = 1, - 'sound/voice/breathing/internals_breathing5.ogg' = 1, - 'sound/voice/breathing/internals_breathing6.ogg' = 1, - 'sound/voice/breathing/internals_breathing7.ogg' = 1, - 'sound/voice/breathing/internals_breathing8.ogg' = 1, + 'sound/mobs/humanoids/breathing/internals_breathing1.ogg' = 1, + 'sound/mobs/humanoids/breathing/internals_breathing2.ogg' = 1, + 'sound/mobs/humanoids/breathing/internals_breathing3.ogg' = 1, + 'sound/mobs/humanoids/breathing/internals_breathing4.ogg' = 1, + 'sound/mobs/humanoids/breathing/internals_breathing5.ogg' = 1, + 'sound/mobs/humanoids/breathing/internals_breathing6.ogg' = 1, + 'sound/mobs/humanoids/breathing/internals_breathing7.ogg' = 1, + 'sound/mobs/humanoids/breathing/internals_breathing8.ogg' = 1, ) //Calculated this by using the average breathing time of an adult (12 to 20 per minute, which on average is 16 per minute) // realism is overrated, make it longer to reduce ear fatigue diff --git a/code/datums/looping_sounds/choking.dm b/code/datums/looping_sounds/choking.dm index 444204efa1fa6..6d337b1c7d648 100644 --- a/code/datums/looping_sounds/choking.dm +++ b/code/datums/looping_sounds/choking.dm @@ -1,5 +1,5 @@ /datum/looping_sound/choking - mid_sounds = list('sound/creatures/gag1.ogg' = 1, 'sound/creatures/gag2.ogg' = 1, 'sound/creatures/gag3.ogg' = 1, 'sound/creatures/gag4.ogg' = 1, 'sound/creatures/gag5.ogg' = 1) + mid_sounds = list('sound/mobs/humanoids/human/gag_vomit/gag1.ogg' = 1, 'sound/mobs/humanoids/human/gag_vomit/gag2.ogg' = 1, 'sound/mobs/humanoids/human/gag_vomit/gag3.ogg' = 1, 'sound/mobs/humanoids/human/gag_vomit/gag4.ogg' = 1, 'sound/mobs/humanoids/human/gag_vomit/gag5.ogg' = 1) mid_length = 1.6 SECONDS mid_length_vary = 0.3 SECONDS each_once = TRUE diff --git a/code/datums/looping_sounds/cyborg.dm b/code/datums/looping_sounds/cyborg.dm index 499e61757c6dd..0a01a4c7116b9 100644 --- a/code/datums/looping_sounds/cyborg.dm +++ b/code/datums/looping_sounds/cyborg.dm @@ -1,10 +1,10 @@ /datum/looping_sound/wash - mid_sounds = list('sound/creatures/cyborg/wash1.ogg' = 1, 'sound/creatures/cyborg/wash2.ogg' = 1) + mid_sounds = list('sound/mobs/non-humanoids/cyborg/wash1.ogg' = 1, 'sound/mobs/non-humanoids/cyborg/wash2.ogg' = 1) mid_length = 1.5 SECONDS // This makes them overlap slightly, which works out well for masking the fade in/out start_volume = 100 - start_sound = 'sound/creatures/cyborg/wash_start.ogg' + start_sound = 'sound/mobs/non-humanoids/cyborg/wash_start.ogg' start_length = 3.6 SECONDS // again, slightly shorter then the real time of 4 seconds, will make the transition to midsounds more seemless end_volume = 100 - end_sound = 'sound/creatures/cyborg/wash_end.ogg' + end_sound = 'sound/mobs/non-humanoids/cyborg/wash_end.ogg' vary = TRUE extra_range = 5 diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm index 00fd3063e4382..7800326bb0a35 100644 --- a/code/datums/looping_sounds/item_sounds.dm +++ b/code/datums/looping_sounds/item_sounds.dm @@ -5,7 +5,7 @@ /datum/looping_sound/reverse_bear_trap_beep - mid_sounds = list('sound/machines/beep.ogg' = 1) + mid_sounds = list('sound/machines/beep/beep.ogg' = 1) mid_length = 60 volume = 10 @@ -24,7 +24,7 @@ mid_length = 1 SECONDS /datum/looping_sound/trapped_machine_beep - mid_sounds = list('sound/machines/beep.ogg' = 1) + mid_sounds = list('sound/machines/beep/beep.ogg' = 1) mid_length = 10 SECONDS mid_length_vary = 5 SECONDS falloff_exponent = 10 @@ -32,19 +32,19 @@ volume = 5 /datum/looping_sound/chainsaw - start_sound = list('sound/weapons/chainsaw_start.ogg' = 1) + start_sound = list('sound/items/weapons/chainsaw_start.ogg' = 1) start_length = 0.85 SECONDS - mid_sounds = list('sound/weapons/chainsaw_loop.ogg' = 1) + mid_sounds = list('sound/items/weapons/chainsaw_loop.ogg' = 1) mid_length = 0.85 SECONDS - end_sound = list('sound/weapons/chainsaw_stop.ogg' = 1) + end_sound = list('sound/items/weapons/chainsaw_stop.ogg' = 1) end_volume = 35 volume = 40 ignore_walls = FALSE /datum/looping_sound/beesmoke - mid_sounds = list('sound/weapons/beesmoke.ogg' = 1) + mid_sounds = list('sound/items/weapons/beesmoke.ogg' = 1) volume = 5 /datum/looping_sound/zipline - mid_sounds = list('sound/weapons/zipline_mid.ogg' = 1) + mid_sounds = list('sound/items/weapons/zipline_mid.ogg' = 1) volume = 5 diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index 2d5e3564e6d09..c4648a929b300 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -47,7 +47,7 @@ volume = 15 /datum/looping_sound/clock - mid_sounds = list('sound/ambience/ticking_clock.ogg' = 1) + mid_sounds = list('sound/ambience/misc/ticking_clock.ogg' = 1) mid_length = 40 volume = 50 ignore_walls = FALSE @@ -90,7 +90,7 @@ /datum/looping_sound/jackpot mid_length = 11 - mid_sounds = list('sound/machines/roulettejackpot.ogg' = 1) + mid_sounds = list('sound/machines/roulette/roulettejackpot.ogg' = 1) volume = 85 vary = TRUE @@ -116,7 +116,7 @@ start_sound = 'sound/machines/computer/computer_start.ogg' start_length = 7.2 SECONDS start_volume = 10 - mid_sounds = list('sound/machines/computer/computer_mid1.ogg', 'sound/machines/computer/computer_mid2.ogg') + mid_sounds = list('sound/machines/computer/computer_mid1.ogg' = 1, 'sound/machines/computer/computer_mid2.ogg' = 1) mid_length = 1.8 SECONDS end_sound = 'sound/machines/computer/computer_end.ogg' end_volume = 10 @@ -126,15 +126,22 @@ falloff_distance = 1 //Instant falloff after initial tile /datum/looping_sound/gravgen - mid_sounds = list('sound/machines/gravgen/gravgen_mid1.ogg' = 1, 'sound/machines/gravgen/gravgen_mid2.ogg' = 1, 'sound/machines/gravgen/gravgen_mid3.ogg' = 1, 'sound/machines/gravgen/gravgen_mid4.ogg' = 1) - mid_length = 1.8 SECONDS - extra_range = 10 - volume = 20 + start_sound = 'sound/machines/gravgen/grav_gen_start.ogg' + start_length = 1 SECONDS + mid_sounds = list( + 'sound/machines/gravgen/grav_gen_mid1.ogg' = 12, + 'sound/machines/gravgen/grav_gen_mid2.ogg' = 1, + ) + mid_length = 1.1 SECONDS + end_sound = 'sound/machines/gravgen/grav_gen_end.ogg' + extra_range = 8 + vary = TRUE + volume = 70 falloff_distance = 5 falloff_exponent = 20 /datum/looping_sound/firealarm - mid_sounds = list('sound/machines/FireAlarm1.ogg' = 1,'sound/machines/FireAlarm2.ogg' = 1,'sound/machines/FireAlarm3.ogg' = 1,'sound/machines/FireAlarm4.ogg' = 1) + mid_sounds = list('sound/machines/fire_alarm/FireAlarm1.ogg' = 1,'sound/machines/fire_alarm/FireAlarm2.ogg' = 1,'sound/machines/fire_alarm/FireAlarm3.ogg' = 1,'sound/machines/fire_alarm/FireAlarm4.ogg' = 1) mid_length = 2.4 SECONDS volume = 30 @@ -144,34 +151,34 @@ falloff_exponent = 5 /datum/looping_sound/boiling - mid_sounds = list('sound/effects/bubbles2.ogg' = 1) + mid_sounds = list('sound/effects/bubbles/bubbles2.ogg' = 1) mid_length = 7 SECONDS volume = 25 /datum/looping_sound/typing mid_sounds = list( - 'sound/machines/terminal_button01.ogg' = 1, - 'sound/machines/terminal_button02.ogg' = 1, - 'sound/machines/terminal_button03.ogg' = 1, - 'sound/machines/terminal_button04.ogg' = 1, - 'sound/machines/terminal_button05.ogg' = 1, - 'sound/machines/terminal_button06.ogg' = 1, - 'sound/machines/terminal_button07.ogg' = 1, - 'sound/machines/terminal_button08.ogg' = 1, + 'sound/machines/terminal/terminal_button01.ogg' = 1, + 'sound/machines/terminal/terminal_button02.ogg' = 1, + 'sound/machines/terminal/terminal_button03.ogg' = 1, + 'sound/machines/terminal/terminal_button04.ogg' = 1, + 'sound/machines/terminal/terminal_button05.ogg' = 1, + 'sound/machines/terminal/terminal_button06.ogg' = 1, + 'sound/machines/terminal/terminal_button07.ogg' = 1, + 'sound/machines/terminal/terminal_button08.ogg' = 1, ) mid_length = 0.3 SECONDS /datum/looping_sound/soup mid_sounds = list( - 'sound/effects/soup_boil1.ogg' = 1, - 'sound/effects/soup_boil2.ogg' = 1, - 'sound/effects/soup_boil3.ogg' = 1, - 'sound/effects/soup_boil4.ogg' = 1, - 'sound/effects/soup_boil5.ogg' = 1, + 'sound/effects/soup_boil/soup_boil1.ogg' = 1, + 'sound/effects/soup_boil/soup_boil2.ogg' = 1, + 'sound/effects/soup_boil/soup_boil3.ogg' = 1, + 'sound/effects/soup_boil/soup_boil4.ogg' = 1, + 'sound/effects/soup_boil/soup_boil5.ogg' = 1, ) mid_length = 3 SECONDS volume = 80 - end_sound = 'sound/effects/soup_boil_end.ogg' + end_sound = 'sound/effects/soup_boil/soup_boil_end.ogg' end_volume = 60 extra_range = MEDIUM_RANGE_SOUND_EXTRARANGE falloff_exponent = 4 diff --git a/code/datums/looping_sounds/music.dm b/code/datums/looping_sounds/music.dm index ac76e236bc784..cc35ab8a8ee37 100644 --- a/code/datums/looping_sounds/music.dm +++ b/code/datums/looping_sounds/music.dm @@ -1,6 +1,6 @@ /datum/looping_sound/local_forecast mid_sounds = list( - 'sound/ambience/music/elevator/robocop-short.ogg' = 1, + 'sound/music/elevator/robocop-short.ogg' = 1, ) mid_length = 61 SECONDS volume = 20 diff --git a/code/datums/looping_sounds/vents.dm b/code/datums/looping_sounds/vents.dm index 2d0a3443631df..016b21db9cad0 100644 --- a/code/datums/looping_sounds/vents.dm +++ b/code/datums/looping_sounds/vents.dm @@ -1,7 +1,7 @@ /datum/looping_sound/vent_pump_overclock - start_sound = 'sound/machines/fan_start.ogg' + start_sound = 'sound/machines/fan/fan_start.ogg' start_length = 1.5 SECONDS - end_sound = 'sound/machines/fan_stop.ogg' + end_sound = 'sound/machines/fan/fan_stop.ogg' end_sound = 1.5 SECONDS - mid_sounds = 'sound/machines/fan_loop.ogg' + mid_sounds = 'sound/machines/fan/fan_loop.ogg' mid_length = 2 SECONDS diff --git a/code/datums/looping_sounds/weather.dm b/code/datums/looping_sounds/weather.dm index 6576cfb4e8d12..fa782a5f4ee5a 100644 --- a/code/datums/looping_sounds/weather.dm +++ b/code/datums/looping_sounds/weather.dm @@ -1,53 +1,53 @@ /datum/looping_sound/active_outside_ashstorm mid_sounds = list( - 'sound/weather/ashstorm/outside/active_mid1.ogg'=1, - 'sound/weather/ashstorm/outside/active_mid1.ogg'=1, - 'sound/weather/ashstorm/outside/active_mid1.ogg'=1 + 'sound/ambience/weather/ashstorm/outside/active_mid1.ogg'=1, + 'sound/ambience/weather/ashstorm/outside/active_mid1.ogg'=1, + 'sound/ambience/weather/ashstorm/outside/active_mid1.ogg'=1 ) mid_length = 80 - start_sound = 'sound/weather/ashstorm/outside/active_start.ogg' + start_sound = 'sound/ambience/weather/ashstorm/outside/active_start.ogg' start_length = 130 - end_sound = 'sound/weather/ashstorm/outside/active_end.ogg' + end_sound = 'sound/ambience/weather/ashstorm/outside/active_end.ogg' volume = 80 /datum/looping_sound/active_inside_ashstorm mid_sounds = list( - 'sound/weather/ashstorm/inside/active_mid1.ogg'=1, - 'sound/weather/ashstorm/inside/active_mid2.ogg'=1, - 'sound/weather/ashstorm/inside/active_mid3.ogg'=1 + 'sound/ambience/weather/ashstorm/inside/active_mid1.ogg'=1, + 'sound/ambience/weather/ashstorm/inside/active_mid2.ogg'=1, + 'sound/ambience/weather/ashstorm/inside/active_mid3.ogg'=1 ) mid_length = 80 - start_sound = 'sound/weather/ashstorm/inside/active_start.ogg' + start_sound = 'sound/ambience/weather/ashstorm/inside/active_start.ogg' start_length = 130 - end_sound = 'sound/weather/ashstorm/inside/active_end.ogg' + end_sound = 'sound/ambience/weather/ashstorm/inside/active_end.ogg' volume = 60 /datum/looping_sound/weak_outside_ashstorm mid_sounds = list( - 'sound/weather/ashstorm/outside/weak_mid1.ogg'=1, - 'sound/weather/ashstorm/outside/weak_mid2.ogg'=1, - 'sound/weather/ashstorm/outside/weak_mid3.ogg'=1 + 'sound/ambience/weather/ashstorm/outside/weak_mid1.ogg'=1, + 'sound/ambience/weather/ashstorm/outside/weak_mid2.ogg'=1, + 'sound/ambience/weather/ashstorm/outside/weak_mid3.ogg'=1 ) mid_length = 80 - start_sound = 'sound/weather/ashstorm/outside/weak_start.ogg' + start_sound = 'sound/ambience/weather/ashstorm/outside/weak_start.ogg' start_length = 130 - end_sound = 'sound/weather/ashstorm/outside/weak_end.ogg' + end_sound = 'sound/ambience/weather/ashstorm/outside/weak_end.ogg' volume = 50 /datum/looping_sound/weak_inside_ashstorm mid_sounds = list( - 'sound/weather/ashstorm/inside/weak_mid1.ogg'=1, - 'sound/weather/ashstorm/inside/weak_mid2.ogg'=1, - 'sound/weather/ashstorm/inside/weak_mid3.ogg'=1 + 'sound/ambience/weather/ashstorm/inside/weak_mid1.ogg'=1, + 'sound/ambience/weather/ashstorm/inside/weak_mid2.ogg'=1, + 'sound/ambience/weather/ashstorm/inside/weak_mid3.ogg'=1 ) mid_length = 80 - start_sound = 'sound/weather/ashstorm/inside/weak_start.ogg' + start_sound = 'sound/ambience/weather/ashstorm/inside/weak_start.ogg' start_length = 130 - end_sound = 'sound/weather/ashstorm/inside/weak_end.ogg' + end_sound = 'sound/ambience/weather/ashstorm/inside/weak_end.ogg' volume = 30 /datum/looping_sound/void_loop - mid_sounds = list('sound/ambience/VoidsEmbrace.ogg'=1) + mid_sounds = list('sound/music/antag/heretic/VoidsEmbrace.ogg'=1) mid_length = 1669 // exact length of the music in ticks volume = 100 extra_range = 30 diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index e5dc7860b0b2a..8475c9e43f9f0 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -211,7 +211,7 @@ * Resets the current streak. * * Arguments - * * mob/living/new_target - (Optional) The mob being attacked while the reset is occuring. + * * mob/living/new_target - (Optional) The mob being attacked while the reset is occurring. * * update_icon - If TRUE, the combo display will be updated. */ /datum/martial_art/proc/reset_streak(mob/living/new_target, update_icon = TRUE) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 3465fe300a5ac..9d6252855d3e1 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -232,7 +232,7 @@ /datum/martial_art/boxing/proc/check_block(mob/living/boxer, atom/movable/hitby, damage, attack_text, attack_type, ...) SIGNAL_HANDLER - if(!can_use(boxer) || !boxer.throw_mode || boxer.incapacitated(IGNORE_GRAB)) + if(!can_use(boxer) || !boxer.throw_mode || INCAPACITATED_IGNORING(boxer, INCAPABLE_GRAB)) return NONE if(attack_type != UNARMED_ATTACK) diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index 8e33ac5a851ea..35f8a254e177e 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -46,7 +46,7 @@ /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)) + if(!can_use(cqc_user) || !cqc_user.throw_mode || INCAPACITATED_IGNORING(cqc_user, INCAPABLE_GRAB)) return NONE if(attack_type == PROJECTILE_ATTACK) return NONE @@ -104,7 +104,7 @@ attacker, ) to_chat(attacker, span_danger("You slam [defender] into the ground!")) - playsound(attacker, 'sound/weapons/slam.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/items/weapons/slam.ogg', 50, TRUE, -1) defender.apply_damage(10, BRUTE) defender.Paralyze(12 SECONDS) log_combat(attacker, defender, "slammed (CQC)") @@ -125,7 +125,7 @@ attacker, ) to_chat(attacker, span_danger("You kick [defender]'s head, knocking [defender.p_them()] out!")) - playsound(attacker, 'sound/weapons/genhit1.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/items/weapons/genhit1.ogg', 50, TRUE, -1) var/helmet_protection = defender.run_armor_check(BODY_ZONE_HEAD, MELEE) defender.apply_effect(20 SECONDS, EFFECT_KNOCKDOWN, helmet_protection) @@ -141,7 +141,7 @@ attacker, ) to_chat(attacker, span_danger("You kick [defender] back!")) - playsound(attacker, 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/items/weapons/cqchit1.ogg', 50, TRUE, -1) var/atom/throw_target = get_edge_target_turf(defender, attacker.dir) defender.throw_at(throw_target, 1, 14, attacker) defender.apply_damage(10, attacker.get_attack_type()) @@ -163,7 +163,7 @@ ) to_chat(attacker, span_danger("You punch [defender]'s neck!")) defender.adjustStaminaLoss(60) - playsound(attacker, 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/items/weapons/cqchit1.ogg', 50, TRUE, -1) return TRUE /datum/martial_art/cqc/proc/Restrain(mob/living/attacker, mob/living/defender) @@ -201,7 +201,7 @@ attacker, ) to_chat(attacker, span_danger("You strike [defender]'s abdomen, neck and back consecutively!")) - playsound(defender, 'sound/weapons/cqchit2.ogg', 50, TRUE, -1) + playsound(defender, 'sound/items/weapons/cqchit2.ogg', 50, TRUE, -1) var/obj/item/held_item = defender.get_active_held_item() if(held_item && defender.temporarilyRemoveItemFromInventory(held_item)) attacker.put_in_hands(held_item) @@ -291,7 +291,7 @@ picked_hit_type = pick("kick", "stomp") defender.apply_damage(bonus_damage, BRUTE) - playsound(defender, (picked_hit_type == "kick" || picked_hit_type == "stomp") ? 'sound/weapons/cqchit2.ogg' : 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) + playsound(defender, (picked_hit_type == "kick" || picked_hit_type == "stomp") ? 'sound/items/weapons/cqchit2.ogg' : 'sound/items/weapons/cqchit1.ogg', 50, TRUE, -1) defender.visible_message( span_danger("[attacker] [picked_hit_type]ed [defender]!"), @@ -344,7 +344,7 @@ attacker, ) to_chat(attacker, span_danger("You strike [defender]'s jaw,[disarmed_item ? " disarming [defender.p_them()] of [disarmed_item] and" : ""] leaving [defender.p_them()] disoriented!")) - playsound(defender, 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) + playsound(defender, 'sound/items/weapons/cqchit1.ogg', 50, TRUE, -1) defender.set_jitter_if_lower(4 SECONDS) defender.apply_damage(5, attacker.get_attack_type()) log_combat(attacker, defender, "disarmed (CQC)", addition = disarmed_item ? "(disarmed of [disarmed_item])" : null) @@ -358,7 +358,7 @@ attacker, ) to_chat(attacker, span_warning("You fail to disarm [defender]!")) - playsound(defender, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) + playsound(defender, 'sound/items/weapons/punchmiss.ogg', 25, TRUE, -1) log_combat(attacker, defender, "failed to disarm (CQC)") return MARTIAL_ATTACK_FAIL diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 57e158cf66982..d670b8eb63806 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -201,7 +201,7 @@ attacker, ) to_chat(attacker, span_danger("You disarm [defender]!")) - playsound(defender, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(defender, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) log_combat(attacker, defender, "disarmed (Krav Maga)", addition = "(disarmed of [stuff_in_hand])") return MARTIAL_ATTACK_INVALID // normal shove diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm index 8a73f47093b3b..8e24e876dec6d 100644 --- a/code/datums/martial/plasma_fist.dm +++ b/code/datums/martial/plasma_fist.dm @@ -41,7 +41,7 @@ /datum/martial_art/plasma_fist/proc/Tornado(mob/living/attacker, mob/living/defender) attacker.say("TORNADO SWEEP!", forced="plasma fist") - dance_rotate(attacker, CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), attacker, 'sound/weapons/punch1.ogg', 15, TRUE, -1)) + dance_rotate(attacker, CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), attacker, 'sound/items/weapons/punch1.ogg', 15, TRUE, -1)) tornado_spell.cast(attacker) log_combat(attacker, defender, "tornado sweeped (Plasma Fist)") return TRUE @@ -55,7 +55,7 @@ attacker, ) to_chat(attacker, span_danger("You hit [defender] with Plasma Punch!")) - playsound(defender, 'sound/weapons/punch1.ogg', 50, TRUE, -1) + playsound(defender, 'sound/items/weapons/punch1.ogg', 50, TRUE, -1) var/atom/throw_target = get_edge_target_turf(defender, get_dir(defender, get_step_away(defender, attacker))) defender.throw_at(throw_target, 200, 4,attacker) attacker.say("HYAH!", forced="plasma fist") @@ -66,7 +66,7 @@ var/hasclient = !!defender.client attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - playsound(defender, 'sound/weapons/punch1.ogg', 50, TRUE, -1) + playsound(defender, 'sound/items/weapons/punch1.ogg', 50, TRUE, -1) attacker.say("PLASMA FIST!", forced="plasma fist") defender.visible_message( span_danger("[attacker] hits [defender] with THE PLASMA FIST TECHNIQUE!"), @@ -126,7 +126,7 @@ user.apply_damage(rand(50, 70), BRUTE, wound_bonus = CANT_WOUND) addtimer(CALLBACK(src, PROC_REF(Apotheosis_end), user), 6 SECONDS) - playsound(boomspot, 'sound/weapons/punch1.ogg', 50, TRUE, -1) + playsound(boomspot, 'sound/items/weapons/punch1.ogg', 50, TRUE, -1) explosion(user, devastation_range = plasma_power, heavy_impact_range = plasma_power*2, light_impact_range = plasma_power*4, ignorecap = TRUE, explosion_cause = src) plasma_power = 1 //just in case there is any clever way to cause it to happen again return TRUE diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm index 454d23637f255..99c2b0e222464 100644 --- a/code/datums/martial/psychotic_brawl.dm +++ b/code/datums/martial/psychotic_brawl.dm @@ -67,7 +67,7 @@ attacker, ) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) - playsound(defender, 'sound/weapons/punch1.ogg', 40, TRUE, -1) + playsound(defender, 'sound/items/weapons/punch1.ogg', 40, TRUE, -1) defender.apply_damage(defender_damage, attacker.get_attack_type(), BODY_ZONE_HEAD) attacker.apply_damage(rand(5, 10), attacker.get_attack_type(), BODY_ZONE_HEAD) if(iscarbon(defender)) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 83c73dda0f6ba..f52050d8d76d7 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -53,7 +53,7 @@ attacker, ) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) - playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + playsound(defender, 'sound/items/weapons/punch1.ogg', 25, TRUE, -1) log_combat(attacker, defender, "strong punched (Sleeping Carp)") defender.apply_damage(20, attacker.get_attack_type(), affecting) return TRUE @@ -106,7 +106,7 @@ var/grab_log_description = "grabbed" attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + playsound(defender, 'sound/items/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!"), @@ -161,7 +161,7 @@ ) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) defender.apply_damage(final_damage, attacker.get_attack_type(), affecting, wound_bonus = CANT_WOUND) - playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + playsound(defender, 'sound/items/weapons/punch1.ogg', 25, TRUE, -1) log_combat(attacker, defender, "punched (Sleeping Carp)") return MARTIAL_ATTACK_SUCCESS @@ -176,7 +176,7 @@ return MARTIAL_ATTACK_SUCCESS attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + playsound(defender, 'sound/items/weapons/punch1.ogg', 25, TRUE, -1) defender.apply_damage(20, STAMINA) log_combat(attacker, defender, "disarmed (Sleeping Carp)") return MARTIAL_ATTACK_INVALID // normal disarm @@ -184,7 +184,7 @@ /datum/martial_art/the_sleeping_carp/proc/can_deflect(mob/living/carp_user) if(!can_use(carp_user) || !carp_user.combat_mode) return FALSE - if(carp_user.incapacitated(IGNORE_GRAB)) //NO STUN + if(INCAPACITATED_IGNORING(carp_user, INCAPABLE_GRAB)) //NO STUN return FALSE if(!(carp_user.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE return FALSE @@ -204,7 +204,7 @@ span_danger("[carp_user] effortlessly swats [hitting_projectile] aside! [carp_user.p_They()] can block bullets with [carp_user.p_their()] bare hands!"), span_userdanger("You deflect [hitting_projectile]!"), ) - playsound(carp_user, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) + playsound(carp_user, pick('sound/items/weapons/bulletflyby.ogg', 'sound/items/weapons/bulletflyby2.ogg', 'sound/items/weapons/bulletflyby3.ogg'), 75, TRUE) hitting_projectile.firer = carp_user hitting_projectile.set_angle(rand(0, 360))//SHING return COMPONENT_BULLET_PIERCED diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index b340d95e90fbd..5dc8c26d0f6a3 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -70,7 +70,7 @@ Simple datum which is instanced once per type and is used for every object of sa /** Handles initializing the material. * - * Arugments: + * Arguments: * - _id: The ID the material should use. Overrides the existing ID. */ /datum/material/proc/Initialize(_id, ...) diff --git a/code/datums/memory/general_memories.dm b/code/datums/memory/general_memories.dm index b8c44c6fca862..eca745d3283a6 100644 --- a/code/datums/memory/general_memories.dm +++ b/code/datums/memory/general_memories.dm @@ -162,6 +162,28 @@ "[protagonist_name] [mood_verb] as they lick off some of the pie", ) +/// Witnessed someone get splashed with squid ink. +/datum/memory/witnessed_inking + story_value = STORY_VALUE_OKAY + memory_flags = MEMORY_CHECK_BLINDNESS + // Protagonist - The mob that got pied + +/datum/memory/witnessed_inking/get_names() + return list("The inking of [protagonist_name].") + +/datum/memory/witnessed_inking/get_starts() + return list( + "[protagonist_name]'s face being covered in squid ink", + "[protagonist_name] getting squid-inked", + ) + +/datum/memory/witnessed_inking/get_moods() + return list( + "[protagonist_name] [mood_verb] as ink drips off their face", + "[protagonist_name] [mood_verb] because of their now expanded laundry task.", + "[protagonist_name] [mood_verb] as they wipe the ink off their face.", + ) + /// Got slipped by something. /datum/memory/was_slipped story_value = STORY_VALUE_MEH diff --git a/code/datums/memory/tattoo_kit.dm b/code/datums/memory/tattoo_kit.dm index 98d47eaa285d8..62b4d73be28ba 100644 --- a/code/datums/memory/tattoo_kit.dm +++ b/code/datums/memory/tattoo_kit.dm @@ -46,11 +46,11 @@ if(!tattoo_target) balloon_alert(tattoo_artist, "no limb to tattoo!") return - if(HAS_TRAIT_FROM(tattoo_target, TRAIT_NOT_ENGRAVABLE, INNATE_TRAIT)) - balloon_alert(tattoo_artist, "bodypart cannot be engraved!") + if(HAS_TRAIT_FROM(tattoo_target, TRAIT_NOT_ENGRAVABLE, ENGRAVED_TRAIT)) + balloon_alert(tattoo_artist, "bodypart already tattooed!") return - if(HAS_TRAIT_FROM(tattoo_target, TRAIT_NOT_ENGRAVABLE, TRAIT_GENERIC)) - balloon_alert(tattoo_artist, "bodypart has already been engraved!") + if(HAS_TRAIT(tattoo_target, TRAIT_NOT_ENGRAVABLE)) + balloon_alert(tattoo_artist, "bodypart cannot be tattooed!") return var/datum/memory/memory_to_tattoo = tattoo_artist.mind.select_memory("tattoo") if(!memory_to_tattoo || !tattoo_artist.Adjacent(tattoo_holder) || !tattoo_holder.get_bodypart(selected_zone)) diff --git a/code/datums/mind/_mind.dm b/code/datums/mind/_mind.dm index dddc99c072222..e5f6c9a3463dc 100644 --- a/code/datums/mind/_mind.dm +++ b/code/datums/mind/_mind.dm @@ -106,7 +106,7 @@ /datum/mind/New(_key) key = _key init_known_skills() - set_assigned_role(SSjob.GetJobType(/datum/job/unassigned)) // Unassigned by default. + set_assigned_role(SSjob.get_job_type(/datum/job/unassigned)) // Unassigned by default. /datum/mind/Destroy() SSticker.minds -= src @@ -251,7 +251,7 @@ var/new_role = input("Select new role", "Assigned role", assigned_role.title) as null|anything in sort_list(SSjob.name_occupations) if(isnull(new_role)) return - var/datum/job/new_job = SSjob.GetJob(new_role) + var/datum/job/new_job = SSjob.get_job(new_role) if (!new_job) to_chat(usr, span_warning("Job not found.")) return diff --git a/code/datums/mind/antag.dm b/code/datums/mind/antag.dm index b71a532539229..169bd7ef92afa 100644 --- a/code/datums/mind/antag.dm +++ b/code/datums/mind/antag.dm @@ -287,7 +287,7 @@ /datum/mind/proc/make_wizard() if(has_antag_datum(/datum/antagonist/wizard)) return - set_assigned_role(SSjob.GetJobType(/datum/job/space_wizard)) + set_assigned_role(SSjob.get_job_type(/datum/job/space_wizard)) special_role = ROLE_WIZARD add_antag_datum(/datum/antagonist/wizard) diff --git a/code/datums/mind/initialization.dm b/code/datums/mind/initialization.dm index eb622cc5af549..e3b3e8225dc7a 100644 --- a/code/datums/mind/initialization.dm +++ b/code/datums/mind/initialization.dm @@ -21,17 +21,17 @@ //AI /mob/living/silicon/ai/mind_initialize() . = ..() - mind.set_assigned_role(SSjob.GetJobType(/datum/job/ai)) + mind.set_assigned_role(SSjob.get_job_type(/datum/job/ai)) //BORG /mob/living/silicon/robot/mind_initialize() . = ..() - mind.set_assigned_role(SSjob.GetJobType(/datum/job/cyborg)) + mind.set_assigned_role(SSjob.get_job_type(/datum/job/cyborg)) //PAI /mob/living/silicon/pai/mind_initialize() . = ..() - mind.set_assigned_role(SSjob.GetJobType(/datum/job/personal_ai)) + mind.set_assigned_role(SSjob.get_job_type(/datum/job/personal_ai)) mind.special_role = "" diff --git a/code/datums/mood.dm b/code/datums/mood.dm index 0b0ffd5b8199c..3e4989e44cf63 100644 --- a/code/datums/mood.dm +++ b/code/datums/mood.dm @@ -465,7 +465,7 @@ clear_mood_event(MOOD_CATEGORY_AREA_BEAUTY) return - if(HAS_TRAIT(mob_parent, TRAIT_MORBID)) + if(HAS_MIND_TRAIT(mob_parent, TRAIT_MORBID)) if(HAS_TRAIT(mob_parent, TRAIT_SNOB)) switch(area_to_beautify.beauty) if(BEAUTY_LEVEL_DECENT to BEAUTY_LEVEL_GOOD) diff --git a/code/datums/mood_events/food_events.dm b/code/datums/mood_events/food_events.dm index 7d33e7e57ce06..e64d975902ea7 100644 --- a/code/datums/mood_events/food_events.dm +++ b/code/datums/mood_events/food_events.dm @@ -49,3 +49,8 @@ /datum/mood_event/food/top quality = FOOD_QUALITY_TOP + +/datum/mood_event/pacifist_eating_fish_item + description = "I shouldn't be eating living creatures..." + mood_change = -1 //The disgusting food moodlet already has a pretty big negative value, this is just for context. + timeout = 4 MINUTES diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 6ad0580e5557c..695bf43949653 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -33,6 +33,11 @@ mood_change = -2 timeout = 3 MINUTES +/datum/mood_event/inked + description = "I've been splashed with squid ink. Tastes like salt." + mood_change = -3 + timeout = 3 MINUTES + /datum/mood_event/slipped description = "I slipped. I should be more careful next time..." mood_change = -2 @@ -485,3 +490,14 @@ description = "I DIDN'T MEAN TO HURT THEM!" mood_change = -20 timeout = 10 MINUTES + +//Gained when you're hit over the head with wrapping paper or cardboard roll +/datum/mood_event/bapped + description = "Ow.. my head, I feel a bit foolish now!" + mood_change = -1 + timeout = 3 MINUTES + +/datum/mood_event/bapped/add_effects() + // Felinids apparently hate being hit over the head with cardboard + if(isfelinid(owner)) + mood_change = -2 diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 8c760e8c4f813..cdd28c1855ee8 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -333,9 +333,34 @@ /datum/mood_event/fishing description = "Fishing is relaxing." - mood_change = 5 + mood_change = 4 timeout = 3 MINUTES +/datum/mood_event/fish_released + description = "Go, fish, swim and be free!" + mood_change = 1 + timeout = 2 MINUTES + +/datum/mood_event/fish_released/add_effects(morbid, obj/item/fish/fish) + if(!morbid) + description = "Go, [fish.name], swim and be free!" + return + if(fish.status == FISH_DEAD) + description = "Some scavenger will surely find a use for the remains of [fish.name]. How pragmatic." + else + description = "Returned to the burden of the deep. But is this truly a mercy, [fish.name]? There will always be bigger fish..." + +/datum/mood_event/fish_petting + description = "It felt nice to pet the fish." + mood_change = 2 + timeout = 2 MINUTES + +/datum/mood_event/fish_petting/add_effects(obj/item/fish/fish, morbid) + if(!morbid) + description = "It felt nice to pet \the [fish]." + else + description = "I caress \the [fish] as [fish.p_they()] squirms under my touch, blissfully unaware of how cruel this world is." + /datum/mood_event/kobun description = "You are all loved by the Universe. I’m not alone, and you aren’t either." mood_change = 14 @@ -351,11 +376,6 @@ mood_change = 1 timeout = 2 MINUTES -/datum/mood_event/it_was_on_the_mouse - description = "Heh heh. \"It's on the mouse\". What a play on words." - mood_change = 1 - timeout = 2 MINUTES - /datum/mood_event/birthday description = "It's my birthday!" mood_change = 2 diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index d9cb4aabd2580..a3ecf3df70931 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -172,8 +172,7 @@ // This is specifically happening because they're not used to their new height and are stumbling around into machinery made for normal humans /datum/mutation/human/acromegaly/proc/head_bonk(mob/living/parent) SIGNAL_HANDLER - var/turf/airlock_turf = get_turf(parent) - var/atom/movable/whacked_by = locate(/obj/machinery/door/airlock) in airlock_turf || locate(/obj/machinery/door/firedoor) in airlock_turf || locate(/obj/structure/mineral_door) in airlock_turf + var/atom/movable/whacked_by = (locate(/obj/machinery/door/airlock) in parent.loc) || (locate(/obj/machinery/door/firedoor) in parent.loc) || (locate(/obj/structure/mineral_door) in parent.loc) if(!whacked_by || prob(100 - (8 * GET_MUTATION_SYNCHRONIZER(src)))) return to_chat(parent, span_danger("You hit your head on \the [whacked_by]'s header!")) @@ -209,9 +208,11 @@ // SKYRAT 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 + 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..")) //Clumsiness has a very large amount of small drawbacks depending on item. /datum/mutation/human/clumsy @@ -496,7 +497,7 @@ if(prob(15)) owner.acid_act(rand(30, 50), 10) owner.visible_message(span_warning("[owner]'s skin bubbles and pops."), span_userdanger("Your bubbling flesh pops! It burns!")) - playsound(owner,'sound/weapons/sear.ogg', 50, TRUE) + playsound(owner,'sound/items/weapons/sear.ogg', 50, TRUE) /datum/mutation/human/spastic name = "Spastic" diff --git a/code/datums/mutations/fire_breath.dm b/code/datums/mutations/fire_breath.dm index 56915ff0130ea..d643bd98508d2 100644 --- a/code/datums/mutations/fire_breath.dm +++ b/code/datums/mutations/fire_breath.dm @@ -29,7 +29,7 @@ name = "Fire Breath" desc = "You breathe a cone of fire directly in front of you." button_icon_state = "fireball0" - sound = 'sound/magic/demon_dies.ogg' //horrifying lizard noises + sound = 'sound/effects/magic/demon_dies.ogg' //horrifying lizard noises school = SCHOOL_EVOCATION cooldown_time = 40 SECONDS diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 1a44c62ad8c79..cdd21d4586af0 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -113,7 +113,7 @@ return if(!user.throw_mode || user.get_active_held_item() || user.zone_selected != BODY_ZONE_PRECISE_GROIN) return - if(user.grab_state < GRAB_NECK || !iscarbon(user.pulling) || user.buckled || user.incapacitated()) + if(user.grab_state < GRAB_NECK || !iscarbon(user.pulling) || user.buckled || user.incapacitated) return var/mob/living/carbon/possible_throwable = user.pulling @@ -167,7 +167,7 @@ * For each step of the swinging, with the delay getting shorter along the way. Checks to see we still have them in our grasp at each step. */ /datum/mutation/human/hulk/proc/swing_loop(mob/living/carbon/human/the_hulk, mob/living/carbon/yeeted_person, step, original_dir) - if(!yeeted_person || !the_hulk || the_hulk.incapacitated()) + if(!yeeted_person || !the_hulk || the_hulk.incapacitated) return if(get_dist(the_hulk, yeeted_person) > 1 || !isturf(the_hulk.loc) || !isturf(yeeted_person.loc)) to_chat(the_hulk, span_warning("You lose your grasp on [yeeted_person]!")) @@ -208,7 +208,7 @@ continue yeeted_person.adjustBruteLoss(step*0.5) - playsound(collateral_mob,'sound/weapons/punch1.ogg',50,TRUE) + playsound(collateral_mob,'sound/items/weapons/punch1.ogg',50,TRUE) log_combat(the_hulk, collateral_mob, "has smacked with tail swing victim") log_combat(the_hulk, yeeted_person, "has smacked this person into someone while tail swinging") // i have no idea how to better word this @@ -238,7 +238,7 @@ /// Time to toss the victim at high speed /datum/mutation/human/hulk/proc/finish_swing(mob/living/carbon/human/the_hulk, mob/living/carbon/yeeted_person, original_dir) - if(!yeeted_person || !the_hulk || the_hulk.incapacitated()) + if(!yeeted_person || !the_hulk || the_hulk.incapacitated) return if(get_dist(the_hulk, yeeted_person) > 1 || !isturf(the_hulk.loc) || !isturf(yeeted_person.loc)) to_chat(the_hulk, span_warning("You lose your grasp on [yeeted_person]!")) diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm index 3aceb3e7d8ad2..d3627167cb507 100644 --- a/code/datums/mutations/sight.dm +++ b/code/datums/mutations/sight.dm @@ -110,7 +110,7 @@ ///X-ray Vision lets you see through walls. /datum/mutation/human/xray name = "X Ray Vision" - desc = "A strange genome that allows the user to see between the spaces of walls." //actual x-ray would mean you'd constantly be blasting rads, wich might be fun for later //hmb + desc = "A strange genome that allows the user to see between the spaces of walls." //actual x-ray would mean you'd constantly be blasting rads, which might be fun for later //hmb text_gain_indication = span_notice("The walls suddenly disappear!") instability = POSITIVE_INSTABILITY_MAJOR locked = TRUE @@ -167,13 +167,13 @@ return to_chat(source, span_warning("You shoot with your laser eyes!")) source.changeNext_move(CLICK_CD_RANGE) - source.newtonian_move(get_dir(target, source)) + source.newtonian_move(get_angle(source, target)) var/obj/projectile/beam/laser/laser_eyes/LE = new(source.loc) LE.firer = source LE.def_zone = ran_zone(source.zone_selected) LE.preparePixelProjectile(target, source, modifiers) INVOKE_ASYNC(LE, TYPE_PROC_REF(/obj/projectile, fire)) - playsound(source, 'sound/weapons/taser2.ogg', 75, TRUE) + playsound(source, 'sound/items/weapons/taser2.ogg', 75, TRUE) ///Projectile type used by laser eyes /obj/projectile/beam/laser/laser_eyes diff --git a/code/datums/mutations/touch.dm b/code/datums/mutations/touch.dm index a7a6e9b6a24cd..7773e77a22f25 100644 --- a/code/datums/mutations/touch.dm +++ b/code/datums/mutations/touch.dm @@ -28,7 +28,7 @@ name = "Shock Touch" desc = "Channel electricity to your hand to shock people with." button_icon_state = "zap" - sound = 'sound/weapons/zapbang.ogg' + sound = 'sound/items/weapons/zapbang.ogg' cooldown_time = 12 SECONDS invocation_type = INVOCATION_NONE spell_requirements = NONE @@ -117,7 +117,7 @@ desc = "You can now lay your hands on other people to transfer a small amount of their physical injuries to yourself." button_icon = 'icons/mob/actions/actions_genetic.dmi' button_icon_state = "mending_touch" - sound = 'sound/magic/staff_healing.ogg' + sound = 'sound/effects/magic/staff_healing.ogg' cooldown_time = 12 SECONDS school = SCHOOL_RESTORATION invocation_type = INVOCATION_NONE diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 07c19eec1515d..d9874bc559c85 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -49,6 +49,13 @@ /// Type path of item to go in belt slot var/belt = null + /** + * list of items that should go in the belt of the user + * + * Format of this list should be: list(path=count,otherpath=count) + */ + var/list/belt_contents = null + /// Type path of item to go in ears slot var/ears = null @@ -279,6 +286,14 @@ for(var/i in 1 to number) EQUIP_OUTFIT_ITEM(path, ITEM_SLOT_BACKPACK) + if(belt_contents) + for(var/path in belt_contents) + var/number = belt_contents[path] + if(!isnum(number))//Default to 1 + number = 1 + for(var/i in 1 to number) + EQUIP_OUTFIT_ITEM(path, ITEM_SLOT_BELTPACK) + post_equip(user, visualsOnly) if(!visualsOnly) @@ -363,40 +378,6 @@ item.add_fingerprint(user, ignoregloves = TRUE) return TRUE -//SKYRAT EDIT -/** - * Copies the outfit from a human to itself. - **/ -/datum/outfit/proc/copy_outfit_from_target(mob/living/carbon/human/H) - if(!istype(H)) - return - if(H.back) - back = H.back.type - if(H.wear_id) - id = H.wear_id.type - if(H.w_uniform) - uniform = H.w_uniform.type - if(H.wear_suit) - suit = H.wear_suit.type - if(H.wear_mask) - mask = H.wear_mask.type - if(H.wear_neck) - neck = H.wear_neck.type - if(H.head) - head = H.head.type - if(H.shoes) - shoes = H.shoes.type - if(H.gloves) - gloves = H.gloves.type - if(H.ears) - ears = H.ears.type - if(H.glasses) - glasses = H.glasses.type - if(H.belt) - belt = H.belt.type - return TRUE -// SKYRAT 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() var/list/types = list(uniform, suit, back, belt, gloves, shoes, head, mask, neck, ears, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand, @@ -422,6 +403,13 @@ num_to_load = 1 for(var/i in 1 to num_to_load) preload += type_to_load + //Load in belt gear and shit + for(var/type_to_load in belt_contents) + var/num_to_load = belt_contents[type_to_load] + if(!isnum(num_to_load)) + num_to_load = 1 + for(var/i in 1 to num_to_load) + preload += type_to_load preload += belt preload += ears preload += glasses @@ -470,6 +458,7 @@ .["l_hand"] = l_hand .["internals_slot"] = internals_slot .["backpack_contents"] = backpack_contents + .["belt_contents"] = belt_contents .["box"] = box .["implants"] = implants .["accessory"] = accessory @@ -497,6 +486,7 @@ l_hand = target.l_hand internals_slot = target.internals_slot backpack_contents = target.backpack_contents + belt_contents = target.belt_contents box = target.box implants = target.implants accessory = target.accessory @@ -540,6 +530,12 @@ var/itype = text2path(item) if(itype) backpack_contents[itype] = backpack[item] + var/list/beltpack = outfit_data["belt_contents"] + belt_contents = list() + for(var/item in beltpack) + var/itype = text2path(item) + if(itype) + belt_contents[itype] = belt[item] box = text2path(outfit_data["box"]) var/list/impl = outfit_data["implants"] implants = list() diff --git a/code/datums/pod_style.dm b/code/datums/pod_style.dm index 853d7e058785b..8888048980cda 100644 --- a/code/datums/pod_style.dm +++ b/code/datums/pod_style.dm @@ -67,7 +67,7 @@ /datum/pod_style/missile name = "cruise missile" ui_name = "Missile" - desc = "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." + desc = "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 auxiliary payload hatch on the side, though manually opening it is likely impossible." shape = POD_SHAPE_OTHER icon_state = "missile" has_door = FALSE @@ -79,7 +79,7 @@ /datum/pod_style/missile/syndicate name = "\improper Syndicate cruise missile" ui_name = "Syndie Missile" - desc = "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." + desc = "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 auxiliary payload hatch on the side, though manually opening it is likely impossible." icon_state = "smissile" id = "syndie_missile" diff --git a/code/datums/position_point_vector.dm b/code/datums/position_point_vector.dm index c963d0ad76025..b8b697c053bca 100644 --- a/code/datums/position_point_vector.dm +++ b/code/datums/position_point_vector.dm @@ -91,9 +91,9 @@ /datum/point/proc/initialize_location(tile_x, tile_y, tile_z, p_x = 0, p_y = 0) if(!isnull(tile_x)) - x = ((tile_x - 1) * world.icon_size) + world.icon_size * 0.5 + p_x + 1 + x = ((tile_x - 1) * ICON_SIZE_X) + ICON_SIZE_X * 0.5 + p_x + 1 if(!isnull(tile_y)) - y = ((tile_y - 1) * world.icon_size) + world.icon_size * 0.5 + p_y + 1 + y = ((tile_y - 1) * ICON_SIZE_Y) + ICON_SIZE_Y * 0.5 + p_y + 1 if(!isnull(tile_z)) z = tile_z @@ -107,23 +107,23 @@ AM.pixel_y = return_py() /datum/point/proc/return_turf() - return locate(CEILING(x / world.icon_size, 1), CEILING(y / world.icon_size, 1), z) + return locate(CEILING(x / ICON_SIZE_X, 1), CEILING(y / ICON_SIZE_Y, 1), z) /datum/point/proc/return_coordinates() //[turf_x, turf_y, z] - return list(CEILING(x / world.icon_size, 1), CEILING(y / world.icon_size, 1), z) + return list(CEILING(x / ICON_SIZE_X, 1), CEILING(y / ICON_SIZE_Y, 1), z) /datum/point/proc/return_position() return new /datum/position(src) /datum/point/proc/return_px() - return MODULUS(x, world.icon_size) - 16 - 1 + return MODULUS(x, ICON_SIZE_X) - (ICON_SIZE_X/2) - 1 /datum/point/proc/return_py() - return MODULUS(y, world.icon_size) - 16 - 1 + return MODULUS(y, ICON_SIZE_Y) - (ICON_SIZE_Y/2) - 1 /datum/point/vector /// Pixels per iteration - var/speed = 32 + var/speed = ICON_SIZE_ALL var/iteration = 0 var/angle = 0 /// Calculated x movement amounts to prevent having to do trig every step. @@ -149,9 +149,9 @@ /// Same effect as initiliaze_location, but without setting the starting_x/y/z /datum/point/vector/proc/set_location(tile_x, tile_y, tile_z, p_x = 0, p_y = 0) if(!isnull(tile_x)) - x = ((tile_x - 1) * world.icon_size) + world.icon_size * 0.5 + p_x + 1 + x = ((tile_x - 1) * ICON_SIZE_X) + ICON_SIZE_X * 0.5 + p_x + 1 if(!isnull(tile_y)) - y = ((tile_y - 1) * world.icon_size) + world.icon_size * 0.5 + p_y + 1 + y = ((tile_y - 1) * ICON_SIZE_Y) + ICON_SIZE_Y * 0.5 + p_y + 1 if(!isnull(tile_z)) z = tile_z diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index b560a67aa6c90..676cf455bfc51 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -69,8 +69,8 @@ continue progress_bar.listindex-- - progress_bar.bar.pixel_y = world.icon_size + offset_y + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1)) - var/dist_to_travel = world.icon_size + offset_y + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1)) - PROGRESSBAR_HEIGHT + progress_bar.bar.pixel_y = ICON_SIZE_Y + offset_y + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1)) + var/dist_to_travel = ICON_SIZE_Y + offset_y + (PROGRESSBAR_HEIGHT * (progress_bar.listindex - 1)) - PROGRESSBAR_HEIGHT animate(progress_bar.bar, pixel_y = dist_to_travel, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING) LAZYREMOVEASSOC(user.progressbars, bar_loc, src) @@ -123,7 +123,7 @@ bar.pixel_y = 0 bar.alpha = 0 user_client.images += bar - animate(bar, pixel_y = world.icon_size + offset_y + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING) + animate(bar, pixel_y = ICON_SIZE_Y + offset_y + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = PROGRESSBAR_ANIMATION_TIME, easing = SINE_EASING) ///Updates the progress bar image visually. diff --git a/code/datums/proximity_monitor/field.dm b/code/datums/proximity_monitor/field.dm index e3f0ade5e7dba..3ba3017bed0a5 100644 --- a/code/datums/proximity_monitor/field.dm +++ b/code/datums/proximity_monitor/field.dm @@ -40,7 +40,7 @@ var/list/old_edge_turfs = edge_turfs field_turfs = new_turfs[FIELD_TURFS_KEY] edge_turfs = new_turfs[EDGE_TURFS_KEY] - if(!full_recalc) + if(full_recalc) field_turfs = list() edge_turfs = list() @@ -62,12 +62,11 @@ for(var/turf/new_turf as anything in field_turfs - old_field_turfs) if(QDELETED(src)) return - field_turfs += new_turf setup_field_turf(new_turf) + for(var/turf/new_turf as anything in edge_turfs - old_edge_turfs) if(QDELETED(src)) return - edge_turfs += new_turf setup_edge_turf(new_turf) /datum/proximity_monitor/advanced/on_initialized(turf/location, atom/created, init_flags) diff --git a/code/datums/proximity_monitor/fields/timestop.dm b/code/datums/proximity_monitor/fields/timestop.dm index 79996dee2dd36..3b8001426a03c 100644 --- a/code/datums/proximity_monitor/fields/timestop.dm +++ b/code/datums/proximity_monitor/fields/timestop.dm @@ -45,13 +45,13 @@ /obj/effect/timestop/Destroy() QDEL_NULL(chronofield) if(!hidden) - playsound(src, 'sound/magic/timeparadox2.ogg', 75, TRUE, frequency = -1) //reverse! + playsound(src, 'sound/effects/magic/timeparadox2.ogg', 75, TRUE, frequency = -1) //reverse! return ..() /obj/effect/timestop/proc/timestop() target = get_turf(src) if(!hidden) - playsound(src, 'sound/magic/timeparadox2.ogg', 75, TRUE, -1) + playsound(src, 'sound/effects/magic/timeparadox2.ogg', 75, TRUE, -1) chronofield = new (src, freezerange, TRUE, immune, antimagic_flags, channelled) if(!channelled) QDEL_IN(src, duration) diff --git a/code/datums/proximity_monitor/fields/void_storm.dm b/code/datums/proximity_monitor/fields/void_storm.dm new file mode 100644 index 0000000000000..c9e3bbbbcff91 --- /dev/null +++ b/code/datums/proximity_monitor/fields/void_storm.dm @@ -0,0 +1,37 @@ +/*! + * Void storm for the void heretic ascension + * + * Follows the heretic around and acts like an aura with damaging effects for non-heretics + */ +/datum/proximity_monitor/advanced/void_storm + edge_is_a_field = TRUE + // lazylist that keeps track of the overlays added + var/list/turf_effects + var/static/image/storm_overlay = image('icons/effects/weather_effects.dmi', "snow_storm") + +/datum/proximity_monitor/advanced/void_storm/New(atom/_host, range, _ignore_if_not_on_turf) + . = ..() + recalculate_field(full_recalc = TRUE) + +/datum/proximity_monitor/advanced/void_storm/recalculate_field(full_recalc) + full_recalc = TRUE // We always perform a full recalc because we need to update ALL the sprites + return ..() + +/datum/proximity_monitor/advanced/void_storm/cleanup_field_turf(turf/target) + . = ..() + var/obj/effect/abstract/effect = LAZYACCESS(turf_effects, target) + LAZYREMOVE(turf_effects, target) + if(effect) + qdel(effect) + +/datum/proximity_monitor/advanced/void_storm/setup_field_turf(turf/target) + . = ..() + var/obj/effect/abstract/effect = new(target) // Makes the field visible to players. + effect.alpha = 255 - get_dist(target, host.loc) * 23 + effect.color = COLOR_BLACK + effect.icon = storm_overlay.icon + effect.icon_state = storm_overlay.icon_state + effect.mouse_opacity = MOUSE_OPACITY_TRANSPARENT + effect.layer = ABOVE_ALL_MOB_LAYER + SET_PLANE(effect, ABOVE_GAME_PLANE, target) + LAZYSET(turf_effects, target, effect) diff --git a/code/datums/quirks/_quirk_constant_data.dm b/code/datums/quirks/_quirk_constant_data.dm index 1984acecec06e..34bde6d9883f2 100644 --- a/code/datums/quirks/_quirk_constant_data.dm +++ b/code/datums/quirks/_quirk_constant_data.dm @@ -35,7 +35,7 @@ GLOBAL_LIST_INIT_TYPED(all_quirk_constant_data, /datum/quirk_constant_data, gene /datum/quirk_constant_data/New() . = ..() - ASSERT(abstract_type != type && !isnull(associated_typepath), "associated_typepath null - please set it! occured on: [src.type]") + ASSERT(abstract_type != type && !isnull(associated_typepath), "associated_typepath null - please set it! occurred 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() @@ -47,7 +47,7 @@ GLOBAL_LIST_INIT_TYPED(all_quirk_constant_data, /datum/quirk_constant_data, gene 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 + continue // just in case its a fluke and its only this one that's not instantiated, we'll check the other pref entries customization_data += pref_instance.savefile_key diff --git a/code/datums/quirks/negative_quirks/claustrophobia.dm b/code/datums/quirks/negative_quirks/claustrophobia.dm index c4e3967f330ca..b618f13ce19cf 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. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe." // SKYRAT 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." + 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." diff --git a/code/datums/quirks/negative_quirks/prosthetic_organ.dm b/code/datums/quirks/negative_quirks/prosthetic_organ.dm index cd7ca2a801481..4a377699b40ac 100644 --- a/code/datums/quirks/negative_quirks/prosthetic_organ.dm +++ b/code/datums/quirks/negative_quirks/prosthetic_organ.dm @@ -60,9 +60,9 @@ 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)) - old_organ.moveToNullspace() - STOP_PROCESSING(SSobj, old_organ) + prosthetic.Insert(human_holder, special = TRUE) + old_organ.moveToNullspace() + STOP_PROCESSING(SSobj, old_organ) /datum/quirk/prosthetic_organ/post_add() to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a surplus organ. It is weak and highly unstable. \ diff --git a/code/datums/quirks/neutral_quirks/monochromatic.dm b/code/datums/quirks/neutral_quirks/monochromatic.dm index dd66220cb56a9..ef6735df25d93 100644 --- a/code/datums/quirks/neutral_quirks/monochromatic.dm +++ b/code/datums/quirks/neutral_quirks/monochromatic.dm @@ -17,7 +17,7 @@ /datum/quirk/monochromatic/post_add() if(is_detective_job(quirk_holder.mind.assigned_role)) to_chat(quirk_holder, span_boldannounce("Mmm. Nothing's ever clear on this station. It's all shades of gray...")) - quirk_holder.playsound_local(quirk_holder, 'sound/ambience/ambidet1.ogg', 50, FALSE) + quirk_holder.playsound_local(quirk_holder, 'sound/ambience/security/ambidet1.ogg', 50, FALSE) /datum/quirk/monochromatic/remove() quirk_holder.remove_client_colour(/datum/client_colour/monochrome) diff --git a/code/datums/quirks/neutral_quirks/vegetarian.dm b/code/datums/quirks/neutral_quirks/vegetarian.dm index 0ade72acafe57..0568e2f1e2293 100644 --- a/code/datums/quirks/neutral_quirks/vegetarian.dm +++ b/code/datums/quirks/neutral_quirks/vegetarian.dm @@ -7,17 +7,4 @@ lose_text = span_notice("You feel like eating meat isn't that bad.") medical_record_text = "Patient reports a vegetarian diet." mail_goodies = list(/obj/effect/spawner/random/food_or_drink/salad) - -/datum/quirk/vegetarian/add(client/client_source) - var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE) - if(!tongue) - return - tongue.liked_foodtypes &= ~MEAT - tongue.disliked_foodtypes |= MEAT - -/datum/quirk/vegetarian/remove() - var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE) - if(!tongue) - return - tongue.liked_foodtypes = initial(tongue.liked_foodtypes) - tongue.disliked_foodtypes = initial(tongue.disliked_foodtypes) + mob_trait = TRAIT_VEGETARIAN diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm index 47510703f5da3..e5b1f83c15892 100644 --- a/code/datums/quirks/positive_quirks/spacer.dm +++ b/code/datums/quirks/positive_quirks/spacer.dm @@ -4,7 +4,7 @@ /datum/quirk/spacer_born name = "Spacer" desc = "You were born in space, and have never known the comfort of a planet's gravity. Your body has adapted to this. \ - You are more comfortable in zero and artifical gravity and are more resistant to the effects of space, \ + You are more comfortable in zero and artificial gravity and are more resistant to the effects of space, \ but travelling to a planet's surface for an extended period of time will make you feel sick." gain_text = span_notice("You feel at home in space.") lose_text = span_danger("You feel homesick.") @@ -43,7 +43,7 @@ check_z(quirk_holder, skip_timers = TRUE) // drift slightly faster through zero G - quirk_holder.inertia_move_delay *= 0.8 + quirk_holder.inertia_move_multiplier *= 0.8 var/mob/living/carbon/human/human_quirker = quirk_holder human_quirker.set_mob_height(modded_height) @@ -73,7 +73,7 @@ if(QDELING(quirk_holder)) return - quirk_holder.inertia_move_delay /= 0.8 + quirk_holder.inertia_move_multiplier /= 0.8 quirk_holder.clear_mood_event("spacer") quirk_holder.remove_movespeed_modifier(/datum/movespeed_modifier/spacer) quirk_holder.remove_status_effect(/datum/status_effect/spacer) diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm index 2d1e7628f6eaf..7ad273298137b 100644 --- a/code/datums/records/manifest.dm +++ b/code/datums/records/manifest.dm @@ -31,7 +31,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) var/name = target.name var/rank = target.rank // user-visible job var/trim = target.trim // internal jobs by trim type - var/datum/job/job = SSjob.GetJob(trim) + var/datum/job/job = SSjob.get_job(trim) if(!job || !(job.job_flags & JOB_CREW_MANIFEST) || !LAZYLEN(job.departments_list)) // In case an unlawful custom rank is added. var/list/misc_list = manifest_out[DEPARTMENT_UNASSIGNED] misc_list[++misc_list.len] = list( diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm index 529a4a144caf3..7f5897e8b7527 100644 --- a/code/datums/ruins/icemoon.dm +++ b/code/datums/ruins/icemoon.dm @@ -16,7 +16,8 @@ name = "Ice-Ruin Lizard Gas Station" id = "lizgasruin" description = "A gas station. It appears to have been recently open and is in mint condition." - suffix = "icemoon_surface_gas.dmm" + prefix = "_maps/RandomRuins/IceRuins/bubberstation/" //BUBBER ADDITION + suffix = "icemoon_surface_gas_bubber.dmm" //BUBBER EDIT - ORIGINAL: icemoon_surface_gas.dmm /datum/map_template/ruin/icemoon/lust name = "Ice-Ruin Ruin of Lust" @@ -49,6 +50,32 @@ description = "This homestead was once host to a happy homesteading family. It's now host to hungry bears." suffix = "icemoon_underground_abandoned_homestead.dmm" +/datum/map_template/ruin/icemoon/entemology + name = "Ice-Ruin Insect Research Station" + id = "bug_habitat" + description = "An independently funded research outpost, long abandoned. Their mission, to boldly go where no insect life would ever live, ever, and look for bugs." + suffix = "icemoon_surface_bughabitat.dmm" + +/datum/map_template/ruin/icemoon/pizza + name = "Ice-Ruin Moffuchi's Pizzeria" + id = "pizzeria" + description = "Moffuchi's Family Pizzeria chain has a reputation for providing affordable artisanal meals of questionable edibility. This particular pizzeria seems to have been abandoned for some time." + suffix = "icemoon_surface_pizza.dmm" + +/datum/map_template/ruin/icemoon/frozen_phonebooth + name = "Ice-Ruin Frozen Phonebooth" + id = "frozen_phonebooth" + description = "A venture by Nanotrasen to help popularize the use of holopads. This one was sent to a icemoon." + suffix = "icemoon_surface_phonebooth.dmm" + +/datum/map_template/ruin/icemoon/smoking_room + name = "Ice-Ruin Smoking Room" + id = "smoking_room" + description = "Here lies Charles Morlbaro. He died the way he lived." + suffix = "icemoon_surface_smoking_room.dmm" + +// above and below ground together + /datum/map_template/ruin/icemoon/entemology name = "Ice-Ruin Insect Research Station" id = "bug_habitat" @@ -172,6 +199,12 @@ description = "Radio signals are being detected and the source is this completely innocent pile of snow." suffix = "icemoon_underground_comms_agent.dmm" +/datum/map_template/ruin/icemoon/underground/syndie_lab + name = "Ice-Ruin Syndicate Lab" + id = "syndie_lab" + description = "A small laboratory and living space for Syndicate agents." + suffix = "icemoon_underground_syndielab.dmm" + //TODO: Bottom-Level ONLY Spawns after Refactoring Related Code /datum/map_template/ruin/icemoon/underground/plasma_facility name = "Ice-Ruin Abandoned Plasma Facility" diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 67f6a2e6cfe5f..299cbf6cdf93b 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -33,7 +33,8 @@ name = "Lava-Ruin The Lizard's Gas" id = "lizgas2" description = "A recently opened gas station from the Lizard's Gas franchise." - suffix = "lavaland_surface_gas.dmm" + prefix = "_maps/RandomRuins/LavaRuins/bubberstation/" //BUBBER ADDITION + suffix = "lavaland_surface_gas_bubber.dmm" //BUBBER EDIT - ORIGINAL: lavaland_surface_gas.dmm allow_duplicates = FALSE /datum/map_template/ruin/lavaland/cube @@ -281,7 +282,7 @@ /datum/map_template/ruin/lavaland/lava_phonebooth name = "Lava-Ruin Phonebooth" id = "lava_phonebooth" - description = "A venture by nanotrasen to help popularize the use of holopads. This one somehow made its way here." + description = "A venture by Nanotrasen to help popularize the use of holopads. This one somehow made its way here." suffix = "lavaland_surface_phonebooth.dmm" allow_duplicates = FALSE cost = 5 diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index fea3d8c6702d0..e67eb0fbcd398 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -49,7 +49,7 @@ id = "asteroid6" suffix = "asteroid6.dmm" name = "Space-Ruin Asteroid 6" - description = "This asteroid has brittle bone disease, so it is fortunate asteroids dont have bones." + description = "This asteroid has brittle bone disease, so it is fortunate asteroids don't have bones." /datum/map_template/ruin/space/deep_storage id = "deep-storage" @@ -70,7 +70,7 @@ suffix = "derelict_construction.dmm" name = "Space-Ruin Derelict Construction" description = "Construction supplies are in high demand due to non-trivial damage routinely sustained by most space stations in this sector. \ - Space pirates who dont attempt to rob corporate research stations with only 3 collaborators live long enough to sell captured construction \ + Space pirates who don't attempt to rob corporate research stations with only 3 collaborators live long enough to sell captured construction \ equipment back to the highest bidder." /datum/map_template/ruin/space/derelict_sulaco @@ -140,7 +140,8 @@ /datum/map_template/ruin/space/the_lizards_gas id = "the-lizards-gas" - suffix = "thelizardsgas.dmm" + prefix = "_maps/RandomRuins/SpaceRuins/bubberstation/" //BUBBER ADDITION + suffix = "thelizardsgas_bubber.dmm" //BUBBER EDIT - ORIGINAL: thelizardsgas.dmm name = "Space-Ruin The Lizard's Gas" description = "A refueling station stocked with enough plasma for any space-worthy vessel. Well, maybe if it weren't 50 years ago." @@ -181,7 +182,7 @@ id = "spacehotel" suffix = "spacehotel_skyrat.dmm" // SKYRAT EDIT CHANGE - ORIGINAL: suffix = "spacehotel.dmm" name = "Space-Ruin 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." + description = "An interstellar hotel, where the weary spaceman can rest their head and relax, assured that the residential staff will not murder them in their sleep. Probably." /datum/map_template/ruin/space/turreted_outpost id = "turreted-outpost" @@ -480,7 +481,7 @@ BUBBERSTATION REMOVAL END */ id = "Space_phonebooth" suffix = "phonebooth.dmm" name = "Space-Ruin Phonebooth" - description = "A venture by nanotrasen to help popularize the use of holopads." + description = "A venture by Nanotrasen to help popularize the use of holopads." /datum/map_template/ruin/space/the_outlet id = "the_outlet" @@ -510,7 +511,7 @@ BUBBERSTATION REMOVAL END */ id = "garbagetruck3" suffix = "garbagetruck3.dmm" name = "Space-Ruin 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." + 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" diff --git a/code/datums/shuttles/_shuttle.dm b/code/datums/shuttles/_shuttle.dm index 0100a3d85da3d..94c20d41b7365 100644 --- a/code/datums/shuttles/_shuttle.dm +++ b/code/datums/shuttles/_shuttle.dm @@ -14,7 +14,7 @@ var/description /// The recommended occupancy limit for the shuttle (count chairs, beds, and benches then round to 5) var/occupancy_limit - /// Description of the prerequisition that has to be achieved for the shuttle to be purchased + /// Description of the prerequisite that has to be achieved for the shuttle to be purchased var/prerequisites /// Shuttle warnings and hazards to the admin who spawns the shuttle var/admin_notes @@ -40,7 +40,7 @@ . = ..() /datum/map_template/shuttle/preload_size(path, cache) - . = ..(path, TRUE) // Done this way because we still want to know if someone actualy wanted to cache the map + . = ..(path, TRUE) // Done this way because we still want to know if someone actually wanted to cache the map if(!cached_map) return diff --git a/code/datums/shuttles/emergency.dm b/code/datums/shuttles/emergency.dm index 4c1dd01668032..e36363fb8f815 100644 --- a/code/datums/shuttles/emergency.dm +++ b/code/datums/shuttles/emergency.dm @@ -31,13 +31,13 @@ mobile.event_list.Cut() if(use_all_events) for(var/path in events) - mobile.event_list.Add(new path(mobile)) + mobile.add_shuttle_event(path) events -= path else for(var/i in 1 to event_amount) var/path = pick_weight(events) events -= path - mobile.event_list.Add(new path(mobile)) + mobile.add_shuttle_event(path) /datum/map_template/shuttle/emergency/backup prefix = "_maps/shuttles/" @@ -91,7 +91,7 @@ suffix = "bar" name = "The Emergency Escape Bar" description = "Features include sentient bar staff (a Bardrone and a Barmaid), bathroom, a quality lounge for the heads, and a large gathering table." - admin_notes = "Bardrone and Barmaid are GODMODE, will be automatically sentienced by the fun balloon at 60 seconds before arrival. \ + admin_notes = "Bardrone and Barmaid have TRAIT_GODMODE (basically invincibility), will be automatically sentienced by the fun balloon at 60 seconds before arrival. \ Has medical facilities." credit_cost = CARGO_CRATE_VALUE * 10 occupancy_limit = "30" @@ -166,7 +166,7 @@ /datum/map_template/shuttle/emergency/arena suffix = "arena" name = "The Arena" - description = "The crew must pass through an otherworldy arena to board this shuttle. Expect massive casualties." + description = "The crew must pass through an otherworldly arena to board this shuttle. Expect massive casualties." prerequisites = "The source of the Bloody Signal must be tracked down and eliminated to unlock this shuttle." admin_notes = "RIP AND TEAR." credit_cost = CARGO_CRATE_VALUE * 20 @@ -243,7 +243,7 @@ suffix = "kilo" name = "Kilo Station Emergency Shuttle" credit_cost = CARGO_CRATE_VALUE * 10 - description = "A fully functional shuttle including a complete infirmary, storage facilties and regular amenities." + description = "A fully functional shuttle including a complete infirmary, storage facilities and regular amenities." occupancy_limit = "55" /datum/map_template/shuttle/emergency/mini @@ -402,15 +402,15 @@ /datum/map_template/shuttle/emergency/monkey suffix = "nature" name = "Dynamic Environmental Interaction Shuttle" - description = "A large shuttle with a center biodome that is flourishing with life. Frolick with the monkeys! (Extra monkeys are stored on the bridge.)" - admin_notes = "Pretty freakin' large, almost as big as Raven or Cere. Excercise caution with it." + description = "A large shuttle with a center biodome that is flourishing with life. Frolic with the monkeys! (Extra monkeys are stored on the bridge.)" + admin_notes = "Pretty freakin' large, almost as big as Raven or Cere. Exercise caution with it." credit_cost = CARGO_CRATE_VALUE * 16 occupancy_limit = "45" /datum/map_template/shuttle/emergency/casino suffix = "casino" name = "Lucky Jackpot Casino Shuttle" - description = "A luxurious casino packed to the brim with everything you need to start new gambling addicitions!" + description = "A luxurious casino packed to the brim with everything you need to start new gambling addictions!" admin_notes = "The ship is a bit chunky, so watch where you park it." credit_cost = 7777 occupancy_limit = "85" @@ -426,7 +426,7 @@ /datum/map_template/shuttle/emergency/fish suffix = "fish" name = "Angler's Choice Emergency Shuttle" - description = "Trades such amenities as 'storage space' and 'sufficient seating' for an artifical environment ideal for fishing, plus ample supplies (also for fishing)." + description = "Trades such amenities as 'storage space' and 'sufficient seating' for an artificial environment ideal for fishing, plus ample supplies (also for fishing)." admin_notes = "There's a chasm in it, it has railings but that won't stop determined players." credit_cost = CARGO_CRATE_VALUE * 10 occupancy_limit = "35" diff --git a/code/datums/station_alert.dm b/code/datums/station_alert.dm index 5b969afb00513..4c5f3ca7c51c5 100644 --- a/code/datums/station_alert.dm +++ b/code/datums/station_alert.dm @@ -61,7 +61,7 @@ data["alarms"] += list(nominal_category) return data -/datum/station_alert/ui_act(action, params) +/datum/station_alert/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/datums/station_traits/_station_trait.dm b/code/datums/station_traits/_station_trait.dm index bae9540fa25e9..be2f14dea39a0 100644 --- a/code/datums/station_traits/_station_trait.dm +++ b/code/datums/station_traits/_station_trait.dm @@ -33,10 +33,10 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) var/list/lobby_buttons = list() /// The ID that we look for in dynamic.json. Not synced with 'name' because I can already see this go wrong var/dynamic_threat_id - /// If ran during dynamic, do we reduce the total threat? Will be overriden by config if set + /// If ran during dynamic, do we reduce the total threat? Will be overridden by config if set var/threat_reduction = 0 - /// Which ruleset flags to allow dynamic to use. null to disregard - var/dynamic_category = null + /// Which ruleset flags to allow dynamic to use. NONE to disregard + var/dynamic_category = NONE /// Trait should not be instantiated in a round if its type matches this type var/abstract_type = /datum/station_trait @@ -49,17 +49,23 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) GLOB.dynamic_station_traits[src] = threat_reduction if(dynamic_category) GLOB.dynamic_ruleset_categories = dynamic_category + /* BUBBER EDIT REMOVAL - We have our own lobby buttons if(sign_up_button) GLOB.lobby_station_traits += src + if(SSstation.initialized) + SSstation.display_lobby_traits() + */ if(trait_processes) START_PROCESSING(SSstation, src) if(trait_to_give) ADD_TRAIT(SSstation, trait_to_give, STATION_TRAIT) /datum/station_trait/Destroy() - SSstation.station_traits -= src - GLOB.dynamic_station_traits.Remove(src) destroy_lobby_buttons() + SSstation.station_traits -= src + GLOB.lobby_station_traits -= src + GLOB.dynamic_station_traits -= src + REMOVE_TRAIT(SSstation, trait_to_give, STATION_TRAIT) return ..() /// Returns the type of info the centcom report has on this trait, if any. @@ -127,13 +133,17 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) /// Remove all of our active lobby buttons /datum/station_trait/proc/destroy_lobby_buttons() for (var/atom/movable/screen/button as anything in lobby_buttons) - var/mob/hud_owner = button.get_mob() - qdel(button) + var/mob/dead/new_player/hud_owner = button.get_mob() if (QDELETED(hud_owner)) + qdel(button) + continue + /* BUBBER EDIT REMOVAL - We use our own lobby buttons + var/datum/hud/new_player/using_hud = hud_owner.hud_used + if(!using_hud) + qdel(button) continue - var/datum/hud/using_hud = hud_owner.hud_used - using_hud?.show_hud(using_hud?.hud_version) - lobby_buttons = list() + using_hud.remove_station_trait_button(src) + */ /// Called when overriding a pulsar star command report message. /datum/station_trait/proc/get_pulsar_message() diff --git a/code/datums/station_traits/job_traits.dm b/code/datums/station_traits/job_traits.dm index 4ac95ced8469b..ce6524cc77a80 100644 --- a/code/datums/station_traits/job_traits.dm +++ b/code/datums/station_traits/job_traits.dm @@ -41,6 +41,10 @@ else LAZYADD(lobby_candidates, user) +/datum/station_trait/job/on_lobby_button_destroyed(atom/movable/screen/lobby/button/sign_up/lobby_button) + . = ..() + LAZYREMOVE(lobby_candidates, lobby_button.get_mob()) + /datum/station_trait/job/on_lobby_button_update_icon(atom/movable/screen/lobby/button/sign_up/lobby_button, updates) if (LAZYFIND(lobby_candidates, lobby_button.get_mob())) lobby_button.base_icon_state = "signup_on" @@ -61,7 +65,7 @@ if (isnull(signee) || !signee.client || !signee.mind || signee.ready != PLAYER_READY_TO_PLAY) LAZYREMOVE(lobby_candidates, signee) - var/datum/job/our_job = SSjob.GetJobType(job_to_add) + var/datum/job/our_job = SSjob.get_job_type(job_to_add) our_job.total_positions = position_amount our_job.spawn_positions = position_amount while(length(lobby_candidates) && position_amount > 0) @@ -73,14 +77,14 @@ lobby_candidates = null /datum/station_trait/job/can_display_lobby_button(client/player) - var/datum/job/our_job = SSjob.GetJobType(job_to_add) + var/datum/job/our_job = SSjob.get_job_type(job_to_add) return our_job.player_old_enough(player) && ..() /// Adds a gorilla to the cargo department, replacing the sloth and the mech /datum/station_trait/job/cargorilla name = "Cargo Gorilla" button_desc = "Sign up to become the Cargo Gorilla, a peaceful shepherd of boxes." - weight = 1 + weight = 0 show_in_report = FALSE // Selective attention test. Did you spot the gorilla? can_roll_antag = CAN_ROLL_NEVER job_to_add = /datum/job/cargo_gorilla @@ -248,6 +252,29 @@ qdel(thing_on_table) new /obj/machinery/fax/auto_name(picked_turf) +/datum/station_trait/job/pun_pun + name = "Pun Pun is a Crewmember" + button_desc = "Ook ook ah ah, sign up to play as the bartender's monkey." + weight = 0 //Unrollable by default, available all day during monkey day. + report_message = "We've evaluated the bartender's monkey to have the mental capacity of the average crewmember. As such, we made them one." + show_in_report = TRUE + can_roll_antag = CAN_ROLL_ALWAYS + job_to_add = /datum/job/pun_pun + +/datum/station_trait/job/pun_pun/New() + . = ..() + //Make sure we don't have two Pun Puns if loaded before the start of the round. + if(SSticker.HasRoundStarted() || !GLOB.the_one_and_only_punpun) + return + new /obj/effect/landmark/start/pun_pun(GLOB.the_one_and_only_punpun.loc) + qdel(GLOB.the_one_and_only_punpun) + +/* BUBBER EDIT REMOVAL - We use our own lobby buttons +/datum/station_trait/job/pun_pun/on_lobby_button_update_overlays(atom/movable/screen/lobby/button/sign_up/lobby_button, list/overlays) + . = ..() + overlays += LAZYFIND(lobby_candidates, lobby_button.get_mob()) ? "pun_pun_on" : "pun_pun_off" +*/ + #undef CAN_ROLL_ALWAYS #undef CAN_ROLL_PROTECTED #undef CAN_ROLL_NEVER diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index 14300bedf59cf..b7d5b536941bd 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -26,7 +26,7 @@ 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. + //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." @@ -343,7 +343,7 @@ /datum/station_trait/random_event_weight_modifier/dust_storms name = "Dust Stormfront" - report_message = "The space around your station is clouded by heavy pockets of space dust. Expect an increased likelyhood of space dust storms damaging the station hull." + report_message = "The space around your station is clouded by heavy pockets of space dust. Expect an increased likelihood of space dust storms damaging the station hull." trait_type = STATION_TRAIT_NEGATIVE weight = 2 cost = STATION_TRAIT_COST_LOW @@ -507,11 +507,6 @@ var/list/shielding = list() /datum/station_trait/nebula/hostile/process(seconds_per_tick) - // SKYRAT EDIT ADDITION START - if(!storms_enabled) - get_shielding_level() // So shields still produce tritium - return - // SKYRAT EDIT ADDITION END calculate_nebula_strength() apply_nebula_effect(nebula_intensity - get_shielding_level()) @@ -577,7 +572,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 // BUBBER EDIT: ORG - 5 MINUTES maximum_nebula_intensity = 1 HOURS + 40 MINUTES nebula_layer = /atom/movable/screen/parallax_layer/random/space_gas/radioactive @@ -619,10 +614,10 @@ //Send a nebula shielding unit to engineering var/datum/supply_pack/supply_pack_shielding = new /datum/supply_pack/engineering/rad_nebula_shielding_kit() if(!send_supply_pod_to_area(supply_pack_shielding.generate(null), /area/station/engineering/main, /obj/structure/closet/supplypod/centcompod)) - //if engineering isnt valid, just send it to the bridge + //if engineering isn't valid, just send it to the bridge send_supply_pod_to_area(supply_pack_shielding.generate(null), /area/station/command/bridge, /obj/structure/closet/supplypod/centcompod) - // Let medical know resistence is futile + // Let medical know resistance is futile if (/area/station/medical/virology in GLOB.areas_by_type) send_fax_to_area( new /obj/item/paper/fluff/radiation_nebula_virologist, @@ -661,7 +656,7 @@ if(!istype(get_area(spawned_mob), radioactive_areas)) //only if you're spawned in the radioactive areas return - if(!isliving(spawned_mob)) // Dynamic shouldnt spawn non-living but uhhhhhhh why not + if(!isliving(spawned_mob)) // Dynamic shouldn't spawn non-living but uhhhhhhh why not return var/mob/living/spawnee = spawned_mob @@ -699,10 +694,9 @@ 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() - /* SKYRAT 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? + //How long do we have until the first shielding unit needs to be up? var/deadline = "[(initial(innate_shielding.radioactive_nebula_shielding) * intensity_increment_time) / (1 MINUTES)] minute\s" //For how long each shielding unit will protect for var/shielder_time = "[(initial(shielder.shielding_strength) * intensity_increment_time) / (1 MINUTES)] minute\s" @@ -718,14 +712,8 @@ 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. "} - SKYRAT EDIT REMOVAL END */ - // SKYRAT 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. - "} - // SKYRAT EDIT CHANGE END - priority_announce(announcement, sound = 'sound/misc/notice1.ogg') + priority_announce(announcement, sound = 'sound/announcer/notice/notice1.ogg') //Set the display screens to the radiation alert var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index 4e00158df7d31..74a8e5424003f 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -479,7 +479,7 @@ return if((skub_stance == RANDOM_SKUB && prob(50)) || skub_stance == PRO_SKUB) - var/obj/item/storage/box/skub/boxie = new(spawned.loc) + var/obj/item/storage/box/stickers/skub/boxie = new(spawned.loc) spawned.equip_to_slot_if_possible(boxie, ITEM_SLOT_BACKPACK, indirect_action = TRUE) if(ishuman(spawned)) var/obj/item/clothing/suit/costume/wellworn_shirt/skub/shirt = new(spawned.loc) @@ -496,24 +496,28 @@ shirt.forceMove(boxie) /// A box containing a skub, for easier carry because skub is a bulky item. -/obj/item/storage/box/skub - name = "skub box" - desc = "A box to store your skub and pro-skub shirt in. A label on the back reads: \"Skubtide, Stationwide\"." - icon_state = "hugbox" - illustration = "skub" - -/obj/item/storage/box/skub/Initialize(mapload) +/obj/item/storage/box/stickers/skub + name = "skub fan pack" + desc = "A vinyl pouch to store your skub and pro-skub shirt in. A label on the back reads: \"Skubtide, Stationwide\"." + icon_state = "skubpack" + illustration = "label_skub" + w_class = WEIGHT_CLASS_SMALL + +/obj/item/storage/box/stickers/skub/Initialize(mapload) . = ..() + atom_storage.max_slots = 3 atom_storage.exception_hold = typecacheof(list(/obj/item/skub, /obj/item/clothing/suit/costume/wellworn_shirt/skub)) -/obj/item/storage/box/skub/PopulateContents() +/obj/item/storage/box/stickers/skub/PopulateContents() new /obj/item/skub(src) new /obj/item/sticker/skub(src) new /obj/item/sticker/skub(src) /obj/item/storage/box/stickers/anti_skub - name = "anti-skub stickers box" - desc = "The enemy may have been given a skub and a shirt, but I've more stickers! Plus the box can hold my anti-skub shirt." + name = "anti-skub stickers pack" + desc = "The enemy may have been given a skub and a shirt, but I've got more stickers! Plus the pack can hold my anti-skub shirt." + icon_state = "skubpack" + illustration = "label_anti_skub" /obj/item/storage/box/stickers/anti_skub/Initialize(mapload) . = ..() diff --git a/code/datums/station_traits/positive_traits.dm b/code/datums/station_traits/positive_traits.dm index dfa4fc2ce9cca..43b17377c2ec7 100644 --- a/code/datums/station_traits/positive_traits.dm +++ b/code/datums/station_traits/positive_traits.dm @@ -285,6 +285,7 @@ /datum/job/paramedic = /obj/item/organ/internal/cyberimp/eyes/hud/medical, /datum/job/prisoner = /obj/item/organ/internal/eyes/robotic/shield, /datum/job/psychologist = /obj/item/organ/internal/ears/cybernetic/whisper, + /datum/job/pun_pun = /obj/item/organ/internal/cyberimp/arm/strongarm, /datum/job/quartermaster = /obj/item/organ/internal/stomach/cybernetic/tier3, /datum/job/research_director = /obj/item/organ/internal/cyberimp/bci, /datum/job/roboticist = /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic, diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 522bae96ebc87..a2d61dedaeb9d 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -427,7 +427,7 @@ /datum/status_effect/mayhem/on_apply() . = ..() to_chat(owner, "RIP AND TEAR") - SEND_SOUND(owner, sound('sound/hallucinations/veryfar_noise.ogg')) + SEND_SOUND(owner, sound('sound/effects/hallucinations/veryfar_noise.ogg')) owner.cause_hallucination( \ /datum/hallucination/delusion/preset/demon, \ "[id] status effect", \ @@ -573,7 +573,7 @@ owner.add_stun_absorption(source = id, priority = 4) owner.add_movespeed_mod_immunities(id, /datum/movespeed_modifier/damage_slowdown) ADD_TRAIT(owner, TRAIT_FREE_HYPERSPACE_MOVEMENT, id) - owner.playsound_local(get_turf(owner), 'sound/chemistry/ahaha.ogg', vol = 100, vary = TRUE, use_reverb = TRUE) + owner.playsound_local(get_turf(owner), 'sound/effects/chemistry/ahaha.ogg', vol = 100, vary = TRUE, use_reverb = TRUE) return TRUE /datum/status_effect/blessing_of_insanity/on_remove() diff --git a/code/datums/status_effects/debuffs/choke.dm b/code/datums/status_effects/debuffs/choke.dm index c16b946aa02bd..9113c8a1a023e 100644 --- a/code/datums/status_effects/debuffs/choke.dm +++ b/code/datums/status_effects/debuffs/choke.dm @@ -217,7 +217,7 @@ var/obj/item/bodypart/chest = carbon_victim.get_bodypart(BODY_ZONE_CHEST) carbon_victim.cause_wound_of_type_and_severity(WOUND_BLUNT, chest, WOUND_SEVERITY_SEVERE, wound_source = "human force to the chest") - playsound(owner, 'sound/creatures/crack_vomit.ogg', 120, extrarange = 5, falloff_exponent = 4) + playsound(owner, 'sound/mobs/humanoids/human/gag_vomit/crack_vomit.ogg', 120, extrarange = 5, falloff_exponent = 4) vomit_up() /datum/status_effect/choke/proc/mirror_dir(atom/source, old_dir, new_dir) diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index 72f2d0c757b89..fec013267c55d 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -1,11 +1,11 @@ /// The damage healed per tick while sleeping without any modifiers #define HEALING_SLEEP_DEFAULT 0.2 -/// The sleep healing multipler for organ passive healing (since organs heal slowly) +/// The sleep healing multiplier for organ passive healing (since organs heal slowly) #define HEALING_SLEEP_ORGAN_MULTIPLIER 5 -/// The sleep multipler for fitness xp conversion +/// The sleep multiplier for fitness xp conversion #define SLEEP_QUALITY_WORKOUT_MULTIPLER 10 -//Largely negative status effects go here, even if they have small benificial effects +//Largely negative status effects go here, even if they have small beneficial effects //STUN EFFECTS /datum/status_effect/incapacitating tick_interval = -1 @@ -340,6 +340,7 @@ /datum/status_effect/cultghost/on_apply() owner.set_invis_see(SEE_INVISIBLE_OBSERVER) + return TRUE /datum/status_effect/cultghost/tick(seconds_between_ticks) if(owner.reagents) @@ -360,7 +361,7 @@ boosted = was_boosted /datum/status_effect/crusher_mark/on_apply() - if(owner.mob_size >= MOB_SIZE_LARGE && !HAS_TRAIT(owner, TRAIT_OVERSIZED)) // SKYRAT EDIT CHANGE - Original: if(owner.mob_size >= MOB_SIZE_LARGE) + if(owner.mob_size >= MOB_SIZE_LARGE) marked_underlay = mutable_appearance('icons/effects/effects.dmi', boosted ? "shield" : "shield2") marked_underlay.pixel_x = -owner.pixel_x marked_underlay.pixel_y = -owner.pixel_y @@ -496,7 +497,7 @@ wasting_effect.transform = owner.transform //if the owner has been stunned the overlay should inherit that position wasting_effect.alpha = 255 animate(wasting_effect, alpha = 0, time = 32) - playsound(owner, 'sound/effects/curse5.ogg', 20, TRUE, -1) + playsound(owner, 'sound/effects/curse/curse5.ogg', 20, TRUE, -1) owner.adjustFireLoss(0.75) if(effect_last_activation <= world.time) effect_last_activation = world.time + effect_cooldown @@ -519,7 +520,7 @@ /datum/status_effect/necropolis_curse/proc/grasp(turf/spawn_turf) set waitfor = FALSE new/obj/effect/temp_visual/dir_setting/curse/grasp_portal(spawn_turf, owner.dir) - playsound(spawn_turf, 'sound/effects/curse2.ogg', 80, TRUE, -1) + playsound(spawn_turf, 'sound/effects/curse/curse2.ogg', 80, TRUE, -1) var/obj/projectile/curse_hand/C = new (spawn_turf) C.preparePixelProjectile(owner, spawn_turf) C.fire() @@ -614,7 +615,7 @@ alert_type = null /datum/status_effect/spasms/tick(seconds_between_ticks) - if(owner.stat >= UNCONSCIOUS || owner.incapacitated() || HAS_TRAIT(owner, TRAIT_HANDS_BLOCKED) || HAS_TRAIT(owner, TRAIT_IMMOBILIZED)) + if(owner.stat >= UNCONSCIOUS || owner.incapacitated || HAS_TRAIT(owner, TRAIT_HANDS_BLOCKED) || HAS_TRAIT(owner, TRAIT_IMMOBILIZED)) return if(!prob(15)) return @@ -740,7 +741,7 @@ status_type = STATUS_EFFECT_REPLACE tick_interval = 0.2 SECONDS alert_type = null - var/msg_stage = 0//so you dont get the most intense messages immediately + var/msg_stage = 0//so you don't get the most intense messages immediately /datum/status_effect/fake_virus/on_apply() if(HAS_TRAIT(owner, TRAIT_VIRUSIMMUNE)) diff --git a/code/datums/status_effects/debuffs/drunk.dm b/code/datums/status_effects/debuffs/drunk.dm index 31a15c6a70b8d..51cdd7747ce26 100644 --- a/code/datums/status_effects/debuffs/drunk.dm +++ b/code/datums/status_effects/debuffs/drunk.dm @@ -210,7 +210,7 @@ to_chat(owner, span_warning("Maybe you should lie down for a bit...")) // Over 91, we gain even more toxloss, brain damage, and have a chance of dropping into a long sleep - if(drunk_value >= 93.4) + if(drunk_value >= 91) owner.adjustToxLoss(1) owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.4) if(owner.stat == CONSCIOUS) diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 46c31c4578d1d..ae7f73d4e0de0 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -136,6 +136,12 @@ /// Type of mob light emitter we use when on fire var/moblight_type = /obj/effect/dummy/lighting_obj/moblight/fire +/datum/status_effect/fire_handler/fire_stacks/get_examine_text() + if(owner.on_fire) + return + + return "[owner.p_They()] [owner.p_are()] covered in something flammable." + /datum/status_effect/fire_handler/fire_stacks/proc/owner_touched_sparks() SIGNAL_HANDLER @@ -221,8 +227,9 @@ amount_to_heat = amount_to_heat ** (BODYTEMP_FIRE_TEMP_SOFTCAP / owner.bodytemperature) 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) + if (!(HAS_TRAIT(victim, TRAIT_RESISTHEAT))) + victim.add_mood_event("on_fire", /datum/mood_event/on_fire) + victim.add_mob_memory(/datum/memory/was_burning) /** * Handles mob ignition, should be the only way to set on_fire to TRUE @@ -294,6 +301,9 @@ enemy_types = list(/datum/status_effect/fire_handler/fire_stacks) stack_modifier = -1 +/datum/status_effect/fire_handler/wet_stacks/get_examine_text() + return "[owner.p_They()] look[owner.p_s()] a little soaked." + /datum/status_effect/fire_handler/wet_stacks/tick(seconds_between_ticks) adjust_stacks(-0.5 * seconds_between_ticks) if(stacks <= 0) diff --git a/code/datums/status_effects/debuffs/genetic_damage.dm b/code/datums/status_effects/debuffs/genetic_damage.dm index 9a6944090775e..21b6f1db2185c 100644 --- a/code/datums/status_effects/debuffs/genetic_damage.dm +++ b/code/datums/status_effects/debuffs/genetic_damage.dm @@ -34,7 +34,7 @@ /datum/status_effect/genetic_damage/tick(seconds_between_ticks) if(ismonkey(owner) && total_damage >= GORILLA_MUTATION_MINIMUM_DAMAGE && SPT_PROB(GORILLA_MUTATION_CHANCE_PER_SECOND, seconds_between_ticks)) var/mob/living/carbon/carbon_owner = owner - carbon_owner.gorillize() + carbon_owner.gorillize(genetics_gorilla = TRUE) qdel(src) return @@ -46,15 +46,20 @@ qdel(src) return -/datum/status_effect/genetic_damage/proc/on_healthscan(datum/source, list/render_list, advanced) +/datum/status_effect/genetic_damage/proc/on_healthscan(datum/source, list/render_list, advanced, mob/user, mode, tochat) SIGNAL_HANDLER + var/message = "" if(advanced) - render_list += "Genetic damage: [round(total_damage / minimum_before_tox_damage * 100, 0.1)]%\n" + message = "Genetic damage: [round(total_damage / minimum_before_tox_damage * 100, 0.1)]%" else if(total_damage >= minimum_before_tox_damage) - render_list += "Severe genetic damage detected.\n" + message = "Severe genetic damage detected." else - render_list += "Minor genetic damage detected.\n" + message = "Minor genetic damage detected." + + if(message) + render_list += conditional_tooltip("[message]", "Irreparable under normal circumstances - will decay over time.", tochat) + render_list += "
" #undef GORILLA_MUTATION_CHANCE_PER_SECOND #undef GORILLA_MUTATION_MINIMUM_DAMAGE diff --git a/code/datums/status_effects/debuffs/hallucination.dm b/code/datums/status_effects/debuffs/hallucination.dm index 5d67acc789ed3..0d8875c6b23dd 100644 --- a/code/datums/status_effects/debuffs/hallucination.dm +++ b/code/datums/status_effects/debuffs/hallucination.dm @@ -38,13 +38,13 @@ )) /// Signal proc for [COMSIG_LIVING_HEALTHSCAN]. Show we're hallucinating to (advanced) scanners. -/datum/status_effect/hallucination/proc/on_health_scan(datum/source, list/render_list, advanced, mob/user, mode) +/datum/status_effect/hallucination/proc/on_health_scan(datum/source, list/render_list, advanced, mob/user, mode, tochat) SIGNAL_HANDLER if(!advanced) return - - render_list += "Subject is hallucinating.\n" + render_list += conditional_tooltip("Subject is hallucinating.", "Supply antipsychotic medication.", tochat) + render_list += "
" /// Signal proc for [COMSIG_CARBON_CHECKING_BODYPART], /// checking bodyparts while hallucinating can cause them to appear more damaged than they are diff --git a/code/datums/status_effects/debuffs/slime/slime_food.dm b/code/datums/status_effects/debuffs/slime/slime_food.dm index aa711bb878f75..538e62e27c597 100644 --- a/code/datums/status_effects/debuffs/slime/slime_food.dm +++ b/code/datums/status_effects/debuffs/slime/slime_food.dm @@ -54,12 +54,3 @@ /datum/status_effect/slime_food/on_remove() feeder = null - -/datum/status_effect/slime_food/update_particles() - if(particle_effect) - return - - particle_effect = new(owner, /particles/pollen) - - //particle coloured like the "pheromones" of the feeder - particle_effect.particles.color = "[feeder.chat_color]a0" diff --git a/code/datums/status_effects/debuffs/slime/slime_leech.dm b/code/datums/status_effects/debuffs/slime/slime_leech.dm index 49bd0f7b82c84..78ccacc89d8cb 100644 --- a/code/datums/status_effects/debuffs/slime/slime_leech.dm +++ b/code/datums/status_effects/debuffs/slime/slime_leech.dm @@ -66,7 +66,7 @@ if(need_mob_update) owner.updatehealth() - if(totaldamage >= 0) // AdjustBruteLoss returns a negative value on succesful damage adjustment + if(totaldamage >= 0) // AdjustBruteLoss returns a negative value on successful damage adjustment our_slime.balloon_alert(our_slime, "not food!") our_slime.stop_feeding() return diff --git a/code/datums/status_effects/debuffs/slime/slimed.dm b/code/datums/status_effects/debuffs/slime/slimed.dm index 6c2c0fb5be342..2540c4df5136c 100644 --- a/code/datums/status_effects/debuffs/slime/slimed.dm +++ b/code/datums/status_effects/debuffs/slime/slimed.dm @@ -101,17 +101,6 @@ )) to_chat(owner, span_userdanger("[feedback_text] as the layer of slime eats away at you!")) -/datum/status_effect/slimed/update_particles() - if(particle_effect) - return - - // taste the rainbow - var/particle_type = rainbow ? /particles/slime/rainbow : /particles/slime - particle_effect = new(owner, particle_type) - - if(!rainbow) - particle_effect.particles.color = "[slime_color]a0" - /datum/status_effect/slimed/get_examine_text() return span_warning("[owner.p_They()] [owner.p_are()] covered in bubbling slime!") diff --git a/code/datums/status_effects/debuffs/staggered.dm b/code/datums/status_effects/debuffs/staggered.dm index 9db72e1fd06ee..88dd91c00e0d2 100644 --- a/code/datums/status_effects/debuffs/staggered.dm +++ b/code/datums/status_effects/debuffs/staggered.dm @@ -4,7 +4,7 @@ /// Staggered can occur most often via shoving, but can also occur in other places too. /datum/status_effect/staggered id = "staggered" - tick_interval = 0.5 SECONDS + tick_interval = 0.8 SECONDS alert_type = null remove_on_fullheal = TRUE @@ -24,8 +24,6 @@ /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) @@ -40,13 +38,17 @@ return if(HAS_TRAIT(owner, TRAIT_FAKEDEATH)) return - owner.do_stagger_animation() + INVOKE_ASYNC(owner, TYPE_PROC_REF(/mob/living, 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) + var/normal_pos = base_pixel_x + body_position_pixel_x_offset + var/jitter_right = normal_pos + 4 + var/jitter_left = normal_pos - 4 + animate(src, pixel_x = jitter_left, 0.2 SECONDS, flags = ANIMATION_PARALLEL) + animate(pixel_x = jitter_right, time = 0.4 SECONDS) + animate(pixel_x = normal_pos, time = 0.2 SECONDS) /// Status effect specifically for instances where someone is vulnerable to being stunned when shoved. /datum/status_effect/next_shove_stuns diff --git a/code/datums/status_effects/debuffs/strandling.dm b/code/datums/status_effects/debuffs/strandling.dm index 6050a3df304da..0ce0ad4188221 100644 --- a/code/datums/status_effects/debuffs/strandling.dm +++ b/code/datums/status_effects/debuffs/strandling.dm @@ -57,7 +57,7 @@ * tool - the tool the user's using to remove the strange. Can be null. */ /datum/status_effect/strandling/proc/try_remove_effect(mob/user, obj/item/tool) - if(user.incapacitated() || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + if(user.incapacitated || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) return user.visible_message( diff --git a/code/datums/status_effects/debuffs/terrified.dm b/code/datums/status_effects/debuffs/terrified.dm index 6ed79372d01aa..61a6ecd4eda3b 100644 --- a/code/datums/status_effects/debuffs/terrified.dm +++ b/code/datums/status_effects/debuffs/terrified.dm @@ -55,7 +55,7 @@ owner.adjust_jitter_up_to(10 SECONDS * seconds_between_ticks, 10 SECONDS) if(terror_buildup >= TERROR_PANIC_THRESHOLD) //If you reach this amount of buildup in an engagement, it's time to start looking for a way out. - owner.playsound_local(get_turf(owner), 'sound/health/slowbeat.ogg', 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) + owner.playsound_local(get_turf(owner), 'sound/effects/health/slowbeat.ogg', 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) owner.add_fov_trait(id, FOV_270_DEGREES) //Terror induced tunnel vision owner.adjust_eye_blur_up_to(10 SECONDS * seconds_between_ticks, 10 SECONDS) if(prob(5)) //We have a little panic attack. Consider it GENTLE ENCOURAGEMENT to start running away. diff --git a/code/datums/status_effects/debuffs/tower_of_babel.dm b/code/datums/status_effects/debuffs/tower_of_babel.dm index b3c1ae0c477c7..a56ea1ac6d9a9 100644 --- a/code/datums/status_effects/debuffs/tower_of_babel.dm +++ b/code/datums/status_effects/debuffs/tower_of_babel.dm @@ -41,7 +41,7 @@ return owner.emote("mumble") - owner.playsound_local(get_turf(owner), 'sound/magic/magic_block_mind.ogg', 75, vary = TRUE) // sound of creepy whispers + owner.playsound_local(get_turf(owner), 'sound/effects/magic/magic_block_mind.ogg', 75, vary = TRUE) // sound of creepy whispers to_chat(owner, span_reallybig(span_hypnophrase("You feel a magical force affecting your speech patterns!"))) /datum/status_effect/tower_of_babel/magical/on_remove() diff --git a/code/datums/status_effects/drug_effects.dm b/code/datums/status_effects/drug_effects.dm index 1d37c8f0e43eb..bb86e2b014bf3 100644 --- a/code/datums/status_effects/drug_effects.dm +++ b/code/datums/status_effects/drug_effects.dm @@ -52,7 +52,7 @@ owner.set_jitter_if_lower(100 SECONDS) owner.Paralyze(duration) owner.visible_message(span_warning("[owner] drops to the ground as [owner.p_they()] start seizing up."), \ - span_warning("[pick("You can't collect your thoughts...", "You suddenly feel extremely dizzy...", "You cant think straight...","You can't move your face properly anymore...")]")) + span_warning("[pick("You can't collect your thoughts...", "You suddenly feel extremely dizzy...", "You can't think straight...","You can't move your face properly anymore...")]")) return TRUE /atom/movable/screen/alert/status_effect/seizure diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 3d4bd7e93655c..6fd10943b7edf 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -119,7 +119,7 @@ /datum/status_effect/bounty/on_apply() to_chat(owner, span_boldnotice("You hear something behind you talking... \"You have been marked for death by [rewarded]. If you die, they will be rewarded.\"")) - playsound(owner, 'sound/weapons/gun/shotgun/rack.ogg', 75, FALSE) + playsound(owner, 'sound/items/weapons/gun/shotgun/rack.ogg', 75, FALSE) return ..() /datum/status_effect/bounty/tick(seconds_between_ticks) @@ -130,7 +130,7 @@ /datum/status_effect/bounty/proc/rewards() if(rewarded && rewarded.mind && rewarded.stat != DEAD) to_chat(owner, span_boldnotice("You hear something behind you talking... \"Bounty claimed.\"")) - playsound(owner, 'sound/weapons/gun/shotgun/shot.ogg', 75, FALSE) + playsound(owner, 'sound/items/weapons/gun/shotgun/shot.ogg', 75, FALSE) to_chat(rewarded, span_greentext("You feel a surge of mana flow into you!")) for(var/datum/action/cooldown/spell/spell in rewarded.actions) spell.reset_spell_cooldown() diff --git a/code/datums/status_effects/song_effects.dm b/code/datums/status_effects/song_effects.dm index f61253c987d77..d846f47f169db 100644 --- a/code/datums/status_effects/song_effects.dm +++ b/code/datums/status_effects/song_effects.dm @@ -25,7 +25,7 @@ /datum/status_effect/song/antimagic/on_apply() ADD_TRAIT(owner, TRAIT_ANTIMAGIC, MAGIC_TRAIT) - playsound(owner, 'sound/weapons/fwoosh.ogg', 75, FALSE) + playsound(owner, 'sound/items/weapons/fwoosh.ogg', 75, FALSE) return ..() /datum/status_effect/song/antimagic/on_remove() @@ -45,7 +45,7 @@ /datum/status_effect/song/light/on_apply() mob_light_obj = owner.mob_light(3, 1.5, color = LIGHT_COLOR_DIM_YELLOW) - playsound(owner, 'sound/weapons/fwoosh.ogg', 75, FALSE) + playsound(owner, 'sound/items/weapons/fwoosh.ogg', 75, FALSE) return TRUE /datum/status_effect/song/light/on_remove() diff --git a/code/datums/status_effects/stacking_effect.dm b/code/datums/status_effects/stacking_effect.dm index 98dd1c3ad14e7..b0d00a92ba0c2 100644 --- a/code/datums/status_effects/stacking_effect.dm +++ b/code/datums/status_effects/stacking_effect.dm @@ -8,7 +8,7 @@ /// How many stacks are currently accumulated. /// Also, the default stacks number given on application. var/stacks = 0 - // Deciseconds until ticks start occuring, which removes stacks + // Deciseconds until ticks start occurring, which removes stacks /// (first stack will be removed at this time plus tick_interval) var/delay_before_decay /// How many stacks are lost per tick (decay trigger) @@ -31,11 +31,11 @@ /// Put the state name without the number in these state vars var/overlay_state /// Icon state for underlays applied when the status effect is applied - /// The number is concatonated onto the string based on the number of stacks to get the correct state name. + /// The number is concatenated onto the string based on the number of stacks to get the correct state name. var/underlay_state /// A reference to our overlay appearance var/mutable_appearance/status_overlay - /// A referenceto our underlay appearance + /// A reference to our underlay appearance var/mutable_appearance/status_underlay /// Effects that occur when the stack count crosses stack_threshold @@ -90,7 +90,7 @@ owner.underlays -= status_underlay stacks += stacks_added if(stacks > 0) - if(stacks >= stack_threshold && !threshold_crossed) //threshold_crossed check prevents threshold effect from occuring if changing from above threshold to still above threshold + if(stacks >= stack_threshold && !threshold_crossed) //threshold_crossed check prevents threshold effect from occurring if changing from above threshold to still above threshold threshold_crossed = TRUE on_threshold_cross() if(consumed_on_threshold) @@ -123,9 +123,9 @@ var/icon_height = I.Height() status_overlay.pixel_x = -owner.pixel_x status_overlay.pixel_y = FLOOR(icon_height * 0.25, 1) - status_overlay.transform = matrix() * (icon_height/world.icon_size) //scale the status's overlay size based on the target's icon size + status_overlay.transform = matrix() * (icon_height/ICON_SIZE_Y) //scale the status's overlay size based on the target's icon size status_underlay.pixel_x = -owner.pixel_x - status_underlay.transform = matrix() * (icon_height/world.icon_size) * 3 + status_underlay.transform = matrix() * (icon_height/ICON_SIZE_Y) * 3 status_underlay.alpha = 40 owner.add_overlay(status_overlay) owner.underlays += status_underlay diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index abf63eb3c7522..feda199d67071 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -189,20 +189,19 @@ /// Set the passed atom as the parent /datum/storage/proc/set_parent(atom/new_parent) - PRIVATE_PROC(TRUE) + PROTECTED_PROC(TRUE) ASSERT(isnull(parent)) parent = new_parent + ADD_TRAIT(parent, TRAIT_COMBAT_MODE_SKIP_INTERACTION, REF(src)) // a few of theses should probably be on the real_location rather than the parent - RegisterSignal(parent, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_item_interact)) RegisterSignals(parent, list(COMSIG_ATOM_ATTACK_PAW, COMSIG_ATOM_ATTACK_HAND), PROC_REF(on_attack)) RegisterSignal(parent, COMSIG_MOUSEDROP_ONTO, PROC_REF(on_mousedrop_onto)) RegisterSignal(parent, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(on_mousedropped_onto)) RegisterSignal(parent, COMSIG_ITEM_PRE_ATTACK, PROC_REF(on_preattack)) RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(mass_empty)) RegisterSignals(parent, list(COMSIG_ATOM_ATTACK_GHOST, COMSIG_ATOM_ATTACK_HAND_SECONDARY), PROC_REF(open_storage_on_signal)) - RegisterSignal(parent, COMSIG_ATOM_ITEM_INTERACTION_SECONDARY, PROC_REF(on_item_interact_secondary)) RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(close_distance)) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(update_actions)) RegisterSignal(parent, COMSIG_TOPIC, PROC_REF(topic_handle)) @@ -389,7 +388,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) user.balloon_alert(user, "no room!") return FALSE - var/can_hold_it = isnull(can_hold) || is_type_in_typecache(to_insert, can_hold) + var/can_hold_it = isnull(can_hold) || is_type_in_typecache(to_insert, can_hold) || is_type_in_typecache(to_insert, exception_hold) var/cant_hold_it = is_type_in_typecache(to_insert, cant_hold) var/trait_says_no = HAS_TRAIT(to_insert, TRAIT_NO_STORAGE_INSERT) if(!can_hold_it || cant_hold_it || trait_says_no) @@ -738,7 +737,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /datum/storage/proc/on_mousedrop_onto(datum/source, atom/over_object, mob/user) SIGNAL_HANDLER - if(ismecha(user.loc) || !user.canUseStorage()) + if(ismecha(user.loc) || user.incapacitated || !user.canUseStorage()) return if(istype(over_object, /atom/movable/screen/inventory/hand)) @@ -827,23 +826,12 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return if(!iscarbon(user) && !isdrone(user)) return - attempt_insert(dropping, user) return COMPONENT_CANCEL_MOUSEDROPPED_ONTO -/// Signal handler for whenever we're attacked by an object. -/datum/storage/proc/on_item_interact(datum/source, mob/user, obj/item/thing, params) - SIGNAL_HANDLER - - if(!insert_on_attack) - return NONE - if(!thing.storage_insert_on_interaction(src, parent, user)) - return NONE - if(!parent.storage_insert_on_interacted_with(src, thing, user)) - return NONE - if(SEND_SIGNAL(parent, COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, thing, user) & BLOCK_STORAGE_INSERT) - return NONE - +/// Called directly from the attack chain if [insert_on_attack] is TRUE. +/// Handles inserting an item into the storage when clicked. +/datum/storage/proc/item_interact_insert(mob/living/user, obj/item/thing) if(iscyborg(user)) return ITEM_INTERACT_BLOCKING @@ -894,18 +882,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return toreturn -/// Signal handler for when we get attacked with secondary click by an item. -/datum/storage/proc/on_item_interact_secondary(datum/source, mob/user, atom/weapon) - SIGNAL_HANDLER - - if(istype(weapon, /obj/item/chameleon)) - var/obj/item/chameleon/chameleon_weapon = weapon - chameleon_weapon.make_copy(source, user) - - if(open_storage_on_signal(source, user)) - return ITEM_INTERACT_BLOCKING - return NONE - /// 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 @@ -998,7 +974,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) if(user.active_storage == src && user.client) seeing += user else - is_using -= user + hide_contents(user) return seeing /** @@ -1056,8 +1032,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) * * mob/to_hide - the mob to hide the storage from */ /datum/storage/proc/hide_contents(mob/to_hide) - if(!to_hide.client) - return TRUE if(to_hide.active_storage == src) to_hide.active_storage = null @@ -1070,8 +1044,9 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) is_using -= to_hide - to_hide.client.screen -= storage_interfaces[to_hide].list_ui_elements() - to_hide.client.screen -= real_location.contents + if(to_hide.client) + to_hide.client.screen -= storage_interfaces[to_hide].list_ui_elements() + to_hide.client.screen -= real_location.contents QDEL_NULL(storage_interfaces[to_hide]) storage_interfaces -= to_hide @@ -1102,7 +1077,9 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) var/columns = clamp(max_slots, 1, screen_max_columns) var/rows = clamp(CEILING(adjusted_contents / columns, 1) + additional_row, 1, screen_max_rows) - for (var/ui_user in storage_interfaces) + for (var/mob/ui_user as anything in storage_interfaces) + if (isnull(storage_interfaces[ui_user])) + continue storage_interfaces[ui_user].update_position(screen_start_x, screen_pixel_x, screen_start_y, screen_pixel_y, columns, rows) var/current_x = screen_start_x diff --git a/code/datums/storage/subtypes/surgery_tray.dm b/code/datums/storage/subtypes/surgery_tray.dm index c4d8780e0513d..b2bb4f497781c 100644 --- a/code/datums/storage/subtypes/surgery_tray.dm +++ b/code/datums/storage/subtypes/surgery_tray.dm @@ -18,6 +18,7 @@ /obj/item/cautery, /obj/item/circular_saw, /obj/item/clothing/mask/surgical, + /obj/item/clothing/suit/toggle/labcoat/hospitalgown, // SKYRAT EDIT ADDITION /obj/item/hemostat, /obj/item/razor, /obj/item/retractor, diff --git a/code/datums/view.dm b/code/datums/view.dm index 90d07c667967c..702550a4e1874 100644 --- a/code/datums/view.dm +++ b/code/datums/view.dm @@ -134,7 +134,7 @@ _y = -offset if(WEST) _x = -offset - animate(chief, pixel_x = world.icon_size*_x, pixel_y = world.icon_size*_y, 0, FALSE, LINEAR_EASING, ANIMATION_END_NOW) + animate(chief, pixel_x = ICON_SIZE_X*_x, pixel_y = ICON_SIZE_Y*_y, 0, FALSE, LINEAR_EASING, ANIMATION_END_NOW) //Ready for this one? setTo(radius) diff --git a/code/datums/visual_data.dm b/code/datums/visual_data.dm index 3915b613600ca..e6c89544a333e 100644 --- a/code/datums/visual_data.dm +++ b/code/datums/visual_data.dm @@ -11,6 +11,8 @@ var/sight = NONE /// see_invisible values var/see_invis + /// see_in_dark values + var/see_dark /// What the client is seeing "out of", client.eye var/datum/weakref/client_eye /// Weakref to the mob we're mirroring off @@ -39,6 +41,7 @@ // Note: we explicitly do NOT use setters here, since it would break the behavior paint_to.sight = sight paint_to.see_invisible = see_invis + paint_to.see_in_dark = see_dark if(paint_to.client) var/atom/eye = client_eye?.resolve() if(eye) diff --git a/code/datums/votes/map_vote.dm b/code/datums/votes/map_vote.dm index 857f3919f7aca..b4f938a42e451 100644 --- a/code/datums/votes/map_vote.dm +++ b/code/datums/votes/map_vote.dm @@ -2,45 +2,18 @@ name = "Map" default_message = "Vote for next round's map!" count_method = VOTE_COUNT_METHOD_SINGLE - winner_method = VOTE_WINNER_METHOD_WEIGHTED_RANDOM + winner_method = VOTE_WINNER_METHOD_NONE display_statistics = FALSE /datum/vote/map_vote/New() . = ..() - - default_choices = list() - - // Fill in our default choices with all of the maps in our map config, if they are votable and not blocked. - 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 - continue - - default_choices += possible_config.map_name + default_choices = SSmap_vote.get_valid_map_vote_choices() /datum/vote/map_vote/create_vote() . = ..() if(!.) return FALSE - choices -= get_choices_invalid_for_population() - - //BUBBERSTATION EDIT START, CHOICE SAFETY STUFF. - //This basically just re-does map selection, but ignores persistent blocked maps and the currently voted map. - //Prevents situations where there are no maps to vote. - if(length(choices <= 3)) - 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) - continue - choices += possible_config.map_name - choices -= get_choices_invalid_for_population() - if(SSmapping.config && length(choices >= 4)) //Remove the current map if there is more than 4 possible maps. - choices -= SSmapping.config.map_name - //BUBBERSTATION EDIT END. - if(length(choices) == 1) // Only one choice, no need to vote. Let's just auto-rotate it to the only remaining map because it would just happen anyways. var/datum/map_config/change_me_out = global.config.maplist[choices[1]] finalize_vote(choices[1])// voted by not voting, very sad. @@ -64,35 +37,16 @@ . = ..() if(. != VOTE_AVAILABLE) return . - if(forced) - return VOTE_AVAILABLE - var/num_choices = length(default_choices - get_choices_invalid_for_population()) + + var/num_choices = length(default_choices) if(num_choices <= 1) return "There [num_choices == 1 ? "is only one map" : "are no maps"] to choose from." - if(SSmapping.map_vote_rocked) - return VOTE_AVAILABLE - if(SSmapping.map_voted) + if(SSmap_vote.next_map_config) return "The next map has already been selected." return VOTE_AVAILABLE -/// Returns a list of all map options that are invalid for the current population. -/datum/vote/map_vote/proc/get_choices_invalid_for_population() - var/filter_threshold = 0 - if(SSticker.HasRoundStarted()) - filter_threshold = get_active_player_count(alive_check = FALSE, afk_check = TRUE, human_check = FALSE) - else - filter_threshold = GLOB.clients.len - - var/list/invalid_choices = list() - for(var/map in default_choices) - var/datum/map_config/possible_config = config.maplist[map] - if(possible_config.config_min_users > 0 && filter_threshold < possible_config.config_min_users) - invalid_choices += map - - else if(possible_config.config_max_users > 0 && filter_threshold > possible_config.config_max_users) - invalid_choices += map - - return invalid_choices +/datum/vote/map_vote/get_result_text(list/all_winners, real_winner, list/non_voters) + return null /datum/vote/map_vote/get_vote_result(list/non_voters) // Even if we have default no vote off, @@ -113,20 +67,4 @@ return ..() /datum/vote/map_vote/finalize_vote(winning_option) - var/datum/map_config/winning_map = global.config.maplist[winning_option] - if(!istype(winning_map)) - CRASH("[type] wasn't passed a valid winning map choice. (Got: [winning_option || "null"] - [winning_map || "null"])") - - SSmapping.changemap(winning_map) - SSmapping.map_voted = TRUE - if(SSmapping.map_vote_rocked) - SSmapping.map_vote_rocked = FALSE - -/proc/revert_map_vote() - var/datum/map_config/override_map = SSmapping.config - if(isnull(override_map)) - return - - SSmapping.changemap(override_map) - log_game("The next map has been reset to [override_map.map_name].") - send_to_playing_players(span_boldannounce("The next map is: [override_map.map_name].")) + SSmap_vote.finalize_map_vote(src) diff --git a/code/datums/votes/restart_vote.dm b/code/datums/votes/restart_vote.dm index 3c74d7e518e28..ba0fdf78083b1 100644 --- a/code/datums/votes/restart_vote.dm +++ b/code/datums/votes/restart_vote.dm @@ -57,10 +57,10 @@ return // If there was a previous map vote, we revert the change. - if(!isnull(SSmapping.next_map_config)) + if(!isnull(SSmap_vote.next_map_config)) log_game("The next map has been reset due to successful restart vote.") send_to_playing_players(span_boldannounce("The next map has been reset due to successful restart vote.")) - revert_map_vote() + SSmap_vote.revert_next_map() SSticker.force_ending = FORCE_END_ROUND log_game("End round forced by successful restart vote.") diff --git a/code/datums/votes/rock_the_vote.dm b/code/datums/votes/rock_the_vote.dm deleted file mode 100644 index 6c7ac4ff2572e..0000000000000 --- a/code/datums/votes/rock_the_vote.dm +++ /dev/null @@ -1,62 +0,0 @@ -#define CHOICE_TO_ROCK "Yes, re-do the map vote." -#define CHOICE_NOT_TO_ROCK "No, keep the currently selected map." - -/// If a map vote is called before the emergency shuttle leaves the station, the players can call another vote to re-run the vote on the shuttle leaving. -/datum/vote/rock_the_vote - name = "Rock the Vote" - override_question = "Rock the Vote?" - contains_vote_in_name = TRUE //lol - default_choices = list( - CHOICE_TO_ROCK, - CHOICE_NOT_TO_ROCK, - ) - default_message = "Override the current map vote." - /// The number of times we have rocked the vote thus far. - var/rocking_votes = 0 - -/datum/vote/rock_the_vote/toggle_votable() - CONFIG_SET(flag/allow_rock_the_vote, !CONFIG_GET(flag/allow_rock_the_vote)) - -/datum/vote/rock_the_vote/is_config_enabled() - return CONFIG_GET(flag/allow_rock_the_vote) - -/datum/vote/rock_the_vote/can_be_initiated(forced) - . = ..() - if(. != VOTE_AVAILABLE) - return . - - if(SSticker.current_state == GAME_STATE_FINISHED) - return "The game is finished, no map votes can be initiated." - - if(rocking_votes >= CONFIG_GET(number/max_rocking_votes)) - return "The maximum number of times to rock the vote has been reached." - - if(SSmapping.map_vote_rocked) - return "The vote has already been rocked! Initiate a map vote!" - - if(!SSmapping.map_voted) - return "Rocking the vote is disabled because no map has been voted on yet!" - - if(SSmapping.map_force_chosen) - return "Rocking the vote is disabled because an admin has forcibly set the map!" - - if(EMERGENCY_ESCAPED_OR_ENDGAMED && SSmapping.map_voted) - return "The emergency shuttle has already left the station and the next map has already been chosen!" - - return VOTE_AVAILABLE - -/datum/vote/rock_the_vote/finalize_vote(winning_option) - rocking_votes++ - if(winning_option == CHOICE_NOT_TO_ROCK) - return - - if(winning_option == CHOICE_TO_ROCK) - to_chat(world, span_boldannounce("The vote has been rocked! Players are now able to re-run the map vote once more.")) - message_admins("The players have successfully rocked the vote.") - SSmapping.map_vote_rocked = TRUE - return - - CRASH("[type] wasn't passed a valid winning choice. (Got: [winning_option || "null"])") - -#undef CHOICE_TO_ROCK -#undef CHOICE_NOT_TO_ROCK diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index 16ffb326f8a86..8a5eeb4fbe196 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -13,7 +13,7 @@ /// description of weather var/desc = "Heavy gusts of wind blanket the area, periodically knocking down anyone caught in the open." /// The message displayed in chat to foreshadow the weather's beginning - var/telegraph_message = "The wind begins to pick up." + var/telegraph_message = span_warning("The wind begins to pick up.") /// In deciseconds, how long from the beginning of the telegraph until the weather begins var/telegraph_duration = 300 /// The sound file played to everyone on an affected z-level @@ -22,7 +22,7 @@ var/telegraph_overlay /// Displayed in chat once the weather begins in earnest - var/weather_message = "The wind begins to blow ferociously!" + var/weather_message = span_userdanger("The wind begins to blow ferociously!") /// In deciseconds, how long the weather lasts once it begins var/weather_duration = 1200 /// See above - this is the lowest possible duration @@ -37,7 +37,7 @@ var/weather_color = null /// Displayed once the weather is over - var/end_message = "The wind relents its assault." + var/end_message = span_danger("The wind relents its assault.") /// In deciseconds, how long the "wind-down" graphic will appear before vanishing entirely var/end_duration = 300 /// Sound that plays while weather is ending @@ -106,6 +106,7 @@ affectareas += V for(var/V in protected_areas) affectareas -= get_areas(V) + affectareas = enhanced_roleplay_filter(affectareas) // BUBBER EDIT ADDITION - enhanced roleplay check - modular_zubbers/code/modules/events/ev_roleplay_check.dm for(var/V in affectareas) var/area/A = V if(protect_indoors && !A.outdoors) diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm index 6a2aa2e474381..7839c3499effd 100644 --- a/code/datums/weather/weather_types/ash_storm.dm +++ b/code/datums/weather/weather_types/ash_storm.dm @@ -3,16 +3,16 @@ name = "ash storm" desc = "An intense atmospheric storm lifts ash off of the planet's surface and billows it down across the area, dealing intense fire damage to the unprotected." - telegraph_message = "An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter." + telegraph_message = span_boldwarning("An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter.") telegraph_duration = 300 telegraph_overlay = "light_ash" - weather_message = "Smoldering clouds of scorching ash billow down around you! Get inside!" + weather_message = span_userdanger("Smoldering clouds of scorching ash billow down around you! Get inside!") weather_duration_lower = 600 weather_duration_upper = 1200 weather_overlay = "ash_storm" - end_message = "The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now." + end_message = span_boldannounce("The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now.") end_duration = 300 end_overlay = "light_ash" @@ -85,10 +85,10 @@ name = "emberfall" desc = "A passing ash storm blankets the area in harmless embers." - weather_message = "Gentle embers waft down around you like grotesque snow. The storm seems to have passed you by..." + weather_message = span_notice("Gentle embers waft down around you like grotesque snow. The storm seems to have passed you by...") weather_overlay = "light_ash" - end_message = "The emberfall slows, stops. Another layer of hardened soot to the basalt beneath your feet." + end_message = span_notice("The emberfall slows, stops. Another layer of hardened soot to the basalt beneath your feet.") end_sound = null aesthetic = TRUE diff --git a/code/datums/weather/weather_types/floor_is_lava.dm b/code/datums/weather/weather_types/floor_is_lava.dm index 03ed0c68c311a..25037d433b5eb 100644 --- a/code/datums/weather/weather_types/floor_is_lava.dm +++ b/code/datums/weather/weather_types/floor_is_lava.dm @@ -3,15 +3,15 @@ name = "the floor is lava" desc = "The ground turns into surprisingly cool lava, lightly damaging anything on the floor." - telegraph_message = "You feel the ground beneath you getting hot. Waves of heat distort the air." + telegraph_message = span_warning("You feel the ground beneath you getting hot. Waves of heat distort the air.") telegraph_duration = 150 - weather_message = "The floor is lava! Get on top of something!" + weather_message = span_userdanger("The floor is lava! Get on top of something!") weather_duration_lower = 300 weather_duration_upper = 600 weather_overlay = "lava" - end_message = "The ground cools and returns to its usual form." + end_message = span_danger("The ground cools and returns to its usual form.") end_duration = 0 area_type = /area diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index 12533845f90d9..8d8110f9cf966 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -4,23 +4,23 @@ desc = "A cloud of intense radiation passes through the area dealing rad damage to those who are unprotected." telegraph_duration = 400 - telegraph_message = "The air begins to grow warm." + telegraph_message = span_danger("The air begins to grow warm.") - weather_message = "You feel waves of heat wash over you! Find shelter!" + weather_message = span_userdanger("You feel waves of heat wash over you! Find shelter!") weather_overlay = "ash_storm" weather_duration_lower = 600 weather_duration_upper = 1500 weather_color = "green" - weather_sound = 'sound/misc/bloblarm.ogg' + weather_sound = 'sound/announcer/alarm/bloblarm.ogg' end_duration = 100 - end_message = "The air seems to be cooling off again." + end_message = span_notice("The air seems to be cooling off again.") area_type = /area protected_areas = list(/area/station/maintenance, /area/station/ai_monitored/turret_protected/ai_upload, /area/station/ai_monitored/turret_protected/ai_upload_foyer, /area/station/ai_monitored/turret_protected/aisat/maint, /area/station/ai_monitored/command/storage/satellite, /area/station/ai_monitored/turret_protected/ai, /area/station/commons/storage/emergency/starboard, /area/station/commons/storage/emergency/port, - /area/shuttle, /area/station/security/prison/safe, /area/station/security/prison/toilet, /area/icemoon/underground, /area/ruin/comms_agent/maint) + /area/shuttle, /area/station/security/prison/safe, /area/station/security/prison/toilet, /area/mine/maintenance, /area/icemoon/underground, /area/ruin/comms_agent/maint) target_trait = ZTRAIT_STATION immunity_type = TRAIT_RADSTORM_IMMUNE @@ -34,28 +34,28 @@ status_alarm(TRUE) -/datum/weather/rad_storm/weather_act(mob/living/L) +/datum/weather/rad_storm/weather_act(mob/living/living) if(!prob(mutate_chance)) return - if(!ishuman(L)) + if(!ishuman(living) || HAS_TRAIT(living, TRAIT_GODMODE)) return - var/mob/living/carbon/human/H = L - if(!H.can_mutate() || H.status_flags & GODMODE) + var/mob/living/carbon/human/human = living + if(!human.can_mutate()) return - if(HAS_TRAIT(H, TRAIT_RADIMMUNE)) + if(HAS_TRAIT(human, TRAIT_RADIMMUNE)) return - if (SSradiation.wearing_rad_protected_clothing(H)) + if (SSradiation.wearing_rad_protected_clothing(human)) return - H.random_mutate_unique_identity() - H.random_mutate_unique_features() + human.random_mutate_unique_identity() + human.random_mutate_unique_features() if(prob(50)) - do_mutate(L) + do_mutate(human) /datum/weather/rad_storm/end() if(..()) diff --git a/code/datums/weather/weather_types/snow_storm.dm b/code/datums/weather/weather_types/snow_storm.dm index c98ee9636a7aa..2b749cdbc84d1 100644 --- a/code/datums/weather/weather_types/snow_storm.dm +++ b/code/datums/weather/weather_types/snow_storm.dm @@ -3,18 +3,18 @@ desc = "Harsh snowstorms roam the topside of this arctic planet, burying any area unfortunate enough to be in its path." probability = 90 - telegraph_message = "Drifting particles of snow begin to dust the surrounding area.." + telegraph_message = span_warning("Drifting particles of snow begin to dust the surrounding area..") telegraph_duration = 300 telegraph_overlay = "light_snow" - weather_message = "Harsh winds pick up as dense snow begins to fall from the sky! Seek shelter!" + weather_message = span_userdanger("Harsh winds pick up as dense snow begins to fall from the sky! Seek shelter!") weather_overlay = "snow_storm" weather_duration_lower = 600 weather_duration_upper = 1500 use_glow = FALSE end_duration = 100 - end_message = "The snowfall dies down, it should be safe to go outside again." + end_message = span_boldannounce("The snowfall dies down, it should be safe to go outside again.") area_type = /area protect_indoors = TRUE diff --git a/code/datums/weather/weather_types/void_storm.dm b/code/datums/weather/weather_types/void_storm.dm index 90cc7d44cfbe1..617e3ff0230fd 100644 --- a/code/datums/weather/weather_types/void_storm.dm +++ b/code/datums/weather/weather_types/void_storm.dm @@ -6,7 +6,7 @@ telegraph_overlay = "light_snow" weather_message = span_hypnophrase("You feel the air around you getting colder... and void's sweet embrace...") - weather_overlay = "snow_storm" + weather_overlay = "light_snow" weather_color = COLOR_BLACK weather_duration_lower = 60 SECONDS weather_duration_upper = 120 SECONDS @@ -19,31 +19,5 @@ protect_indoors = FALSE target_trait = ZTRAIT_VOIDSTORM - immunity_type = TRAIT_VOIDSTORM_IMMUNE - barometer_predictable = FALSE perpetual = TRUE - - /// List of areas that were once impacted areas but are not anymore. Used for updating the weather overlay based whether the ascended heretic is in the area. - var/list/former_impacted_areas = list() - -/datum/weather/void_storm/can_weather_act(mob/living/mob_to_check) - . = ..() - if(IS_HERETIC_OR_MONSTER(mob_to_check)) - return FALSE - -/datum/weather/void_storm/weather_act(mob/living/victim) - var/need_mob_update = FALSE - need_mob_update += victim.adjustFireLoss(1, updating_health = FALSE) - need_mob_update += victim.adjustOxyLoss(rand(1, 3), updating_health = FALSE) - if(need_mob_update) - victim.updatehealth() - victim.adjust_eye_blur(rand(0 SECONDS, 2 SECONDS)) - victim.adjust_bodytemperature(-30 * TEMPERATURE_DAMAGE_COEFFICIENT) - -// Goes through former_impacted_areas and sets the overlay of each back to the telegraph overlay, to indicate the ascended heretic is no longer in that area. -/datum/weather/void_storm/update_areas() - for(var/area/former_area as anything in former_impacted_areas) - former_area.icon_state = telegraph_overlay - former_impacted_areas -= former_area - return ..() diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm index c3c8a1c0e93e1..73bdc511ee4ba 100644 --- a/code/datums/wires/_wires.dm +++ b/code/datums/wires/_wires.dm @@ -348,7 +348,7 @@ data["proper_name"] = (proper_name != "Unknown") ? proper_name : null return data -/datum/wires/ui_act(action, params) +/datum/wires/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(. || !interactable(usr)) return diff --git a/code/datums/wires/mecha.dm b/code/datums/wires/mecha.dm index 4e11eda65f7f6..2fe8f19517403 100644 --- a/code/datums/wires/mecha.dm +++ b/code/datums/wires/mecha.dm @@ -95,12 +95,13 @@ if(mecha.Adjacent(target) && !TIMER_COOLDOWN_RUNNING(mecha, COOLDOWN_MECHA_MELEE_ATTACK) && target.mech_melee_attack(mecha)) TIMER_COOLDOWN_START(mecha, COOLDOWN_MECHA_MELEE_ATTACK, mecha.melee_cooldown) -/datum/wires/mecha/ui_act(action, params) +/datum/wires/mecha/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return + var/mob/user = ui.user var/obj/vehicle/sealed/mecha/mecha = holder - if(!HAS_SILICON_ACCESS(usr) && mecha.internal_damage & MECHA_INT_SHORT_CIRCUIT && mecha.shock(usr)) + if(!HAS_SILICON_ACCESS(user) && mecha.internal_damage & MECHA_INT_SHORT_CIRCUIT && mecha.shock(usr)) return FALSE /datum/wires/mecha/can_reveal_wires(mob/user) diff --git a/code/datums/wires/mod.dm b/code/datums/wires/mod.dm index 00d836a52eba4..8250bc45f69c9 100644 --- a/code/datums/wires/mod.dm +++ b/code/datums/wires/mod.dm @@ -50,9 +50,10 @@ if(WIRE_INTERFACE) mod.interface_break = !mend -/datum/wires/mod/ui_act(action, params) +/datum/wires/mod/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) var/obj/item/mod/control/mod = holder - if(!HAS_SILICON_ACCESS(usr) && mod.seconds_electrified && mod.shock(usr)) + var/mob/user = ui.user + if(!HAS_SILICON_ACCESS(user) && mod.seconds_electrified && mod.shock(user)) return FALSE return ..() diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm index fa939d5b5607c..d7f98f07debd9 100644 --- a/code/datums/wires/syndicatebomb.dm +++ b/code/datums/wires/syndicatebomb.dm @@ -48,7 +48,7 @@ if(WIRE_PROCEED) holder.visible_message(span_danger("[icon2html(B, viewers(holder))] The bomb buzzes ominously!")) - playsound(B, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(B, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) var/seconds = B.seconds_remaining() if(seconds >= 61) // Long fuse bombs can suddenly become more dangerous if you tinker with them. B.detonation_timer = world.time + 600 diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index d930c496de6ce..cb4879c82c83b 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -213,7 +213,7 @@ .["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho .["gamestate"] = SSticker.current_state - .["map_name"] = SSmapping.config?.map_name || "Loading..." + .["map_name"] = SSmapping.current_map.map_name || "Loading..." if(key_valid) .["active_players"] = get_active_player_count() diff --git a/code/datums/wounds/_wound_static_data.dm b/code/datums/wounds/_wound_static_data.dm index f996bb258c795..adc0923ee4f0a 100644 --- a/code/datums/wounds/_wound_static_data.dm +++ b/code/datums/wounds/_wound_static_data.dm @@ -1,6 +1,6 @@ // This datum is merely a singleton instance that allows for custom "can be applied" behaviors without instantiating a wound instance. // For example: You can make a pregen_data subtype for your wound that overrides can_be_applied_to to only apply to specifically slimeperson limbs. -// Without this, youre stuck with very static initial variables. +// Without this, you're stuck with very static initial variables. /// A singleton datum that holds pre-gen and static data about a wound. Each wound datum should have a corresponding wound_pregen_data. /datum/wound_pregen_data @@ -56,9 +56,9 @@ if (!abstract) if (required_limb_biostate == null) - stack_trace("required_limb_biostate null - please set it! occured on: [src.type]") + stack_trace("required_limb_biostate null - please set it! occurred on: [src.type]") if (wound_path_to_generate == null) - stack_trace("wound_path_to_generate null - please set it! occured on: [src.type]") + stack_trace("wound_path_to_generate null - please set it! occurred on: [src.type]") scar_priorities = generate_scar_priorities() @@ -82,8 +82,8 @@ * * random_roll = FALSE: If this is in the context of a random wound generation, and this wound wasn't specifically checked. * * Returns: - * FALSE if the limb cannot be wounded, if the wounding types dont match ours (via wounding_types_valid()), if we have a higher severity wound already in our series, - * if we have a biotype mismatch, if the limb isnt in a viable zone, or if theres any duplicate wound types. + * FALSE if the limb cannot be wounded, if the wounding types don't match ours (via wounding_types_valid()), if we have a higher severity wound already in our series, + * if we have a biotype mismatch, if the limb isn't in a viable zone, or if there's any duplicate wound types. * TRUE otherwise. */ /datum/wound_pregen_data/proc/can_be_applied_to(obj/item/bodypart/limb, list/suggested_wounding_types = required_wounding_types, datum/wound/old_wound, random_roll = FALSE, duplicates_allowed = src.duplicates_allowed, care_about_existing_wounds = TRUE) @@ -95,7 +95,7 @@ if (random_roll && !can_be_randomly_generated) return FALSE - if (HAS_TRAIT(limb.owner, TRAIT_NEVER_WOUNDED) || (limb.owner.status_flags & GODMODE)) + if (HAS_TRAIT(limb.owner, TRAIT_NEVER_WOUNDED) || HAS_TRAIT(limb.owner, TRAIT_GODMODE)) return FALSE if (!wounding_types_valid(suggested_wounding_types)) diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index 47f29a21e9dd5..5e5258c86deb9 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -23,6 +23,8 @@ var/desc = "" /// The basic treatment suggested by health analyzers var/treat_text = "" + /// Even more basic treatment + var/treat_text_short = "" /// What the limb looks like on a cursory examine var/examine_desc = "is badly hurt" @@ -127,7 +129,7 @@ return ..() -/// If we should have an actionspeed_mod, ensures we do and updates its slowdown. Otherwise, ensures we dont have one +/// If we should have an actionspeed_mod, ensures we do and updates its slowdown. Otherwise, ensures we don't have one /// by qdeleting any existing modifier. /datum/wound/proc/update_actionspeed_modifier() if (should_have_actionspeed_modifier()) @@ -323,7 +325,7 @@ SIGNAL_HANDLER qdel(src) -/// Remove the wound from whatever it's afflicting, and cleans up whateverstatus effects it had or modifiers it had on interaction times. ignore_limb is used for detachments where we only want to forget the victim +/// Remove the wound from whatever it's afflicting, and cleans up whatever status effects it had or modifiers it had on interaction times. ignore_limb is used for detachments where we only want to forget the victim /datum/wound/proc/remove_wound(ignore_limb, replaced = FALSE) //TODO: have better way to tell if we're getting removed without replacement (full heal) scar stuff var/old_victim = victim @@ -341,7 +343,7 @@ if(limb && !ignore_limb) set_limb(null, replaced) // since we're removing limb's ref to us, we should do the same - // if you want to keep the ref, do it externally, theres no reason for us to remember it + // if you want to keep the ref, do it externally, there's no reason for us to remember it if (ismob(old_victim)) var/mob/mob_victim = old_victim @@ -643,22 +645,42 @@ return span_bold("[desc]!") return "[desc]." +/** + * Prints the details about the wound for the wound scanner on simple mode + */ /datum/wound/proc/get_scanner_description(mob/user) - return "Type: [name]\nSeverity: [severity_text(simple = FALSE)]\nDescription: [desc]\nRecommended Treatment: [treat_text]" + return "Type: [name]
\ + Severity: [severity_text()]
\ + Description: [desc]
\ + Recommended Treatment: [treat_text]" +/** + * Prints the details about the wound for the wound scanner on complex mode + */ /datum/wound/proc/get_simple_scanner_description(mob/user) - return "[name] detected!\nRisk: [severity_text(simple = TRUE)]\nDescription: [simple_desc ? simple_desc : desc]\nTreatment Guide: [simple_treat_text]\nHomemade Remedies: [homemade_treat_text]" + var/severity_text_formatted = severity_text() + for(var/i in 1 to severity) + severity_text_formatted += "!" -/datum/wound/proc/severity_text(simple = FALSE) + return "[name] detected!
\ + Risk: [severity_text_formatted]
\ + Description: [simple_desc || desc]
\ + Treatment Guide: [simple_treat_text]
\ + Homemade Remedies: [homemade_treat_text]" + +/** + * Returns what text describes this wound + */ +/datum/wound/proc/severity_text() switch(severity) if(WOUND_SEVERITY_TRIVIAL) return "Trivial" if(WOUND_SEVERITY_MODERATE) - return "Moderate" + (simple ? "!" : "") + return "Moderate" if(WOUND_SEVERITY_SEVERE) - return "Severe" + (simple ? "!!" : "") + return "Severe" if(WOUND_SEVERITY_CRITICAL) - return "Critical" + (simple ? "!!!" : "") + return "Critical" /// Returns TRUE if our limb is the head or chest, FALSE otherwise. /// Essential in the sense of "we cannot live without it". @@ -688,13 +710,13 @@ /datum/wound/proc/get_limb_examine_description() return -/// Gets the flat percentage chance increment of a dismember occuring, if a dismember is attempted (requires mangled flesh and bone). returning 15 = +15%. +/// Gets the flat percentage chance increment of a dismember occurring, if a dismember is attempted (requires mangled flesh and bone). returning 15 = +15%. /datum/wound/proc/get_dismember_chance_bonus(existing_chance) SHOULD_BE_PURE(TRUE) var/datum/wound_pregen_data/pregen_data = get_pregen_data() - if (WOUND_BLUNT in pregen_data.required_wounding_types && severity >= WOUND_SEVERITY_CRITICAL) + if ((WOUND_BLUNT in pregen_data.required_wounding_types) && severity >= WOUND_SEVERITY_CRITICAL) return WOUND_CRITICAL_BLUNT_DISMEMBER_BONUS // we only require mangled bone (T2 blunt), but if there's a critical blunt, we'll add 15% more /// Returns our pregen data, which is practically guaranteed to exist, so this proc can safely be used raw. diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index 13877c8223bcc..70e80ca196159 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -146,14 +146,26 @@ if(1 to 6) victim.bleed(blood_bled, TRUE) if(7 to 13) - victim.visible_message("A thin stream of blood drips from [victim]'s mouth from the blow to [victim.p_their()] chest.", span_danger("You cough up a bit of blood from the blow to your chest."), vision_distance=COMBAT_MESSAGE_RANGE) + victim.visible_message( + span_smalldanger("A thin stream of blood drips from [victim]'s mouth from the blow to [victim.p_their()] chest."), + span_danger("You cough up a bit of blood from the blow to your chest."), + vision_distance = COMBAT_MESSAGE_RANGE, + ) victim.bleed(blood_bled, TRUE) if(14 to 19) - victim.visible_message("Blood spews out of [victim]'s mouth from the blow to [victim.p_their()] chest!", span_danger("You spit out a string of blood from the blow to your chest!"), vision_distance=COMBAT_MESSAGE_RANGE) + victim.visible_message( + span_smalldanger("Blood spews out of [victim]'s mouth from the blow to [victim.p_their()] chest!"), + span_danger("You spit out a string of blood from the blow to your chest!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ) new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) victim.bleed(blood_bled) if(20 to INFINITY) - victim.visible_message(span_danger("Blood spurts out of [victim]'s mouth from the blow to [victim.p_their()] chest!"), span_danger("You choke up on a spray of blood from the blow to your chest!"), vision_distance=COMBAT_MESSAGE_RANGE) + victim.visible_message( + span_danger("Blood spurts out of [victim]'s mouth from the blow to [victim.p_their()] chest!"), + span_bolddanger("You choke up on a spray of blood from the blow to your chest!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ) victim.bleed(blood_bled) new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) victim.add_splatter_floor(get_step(victim.loc, victim.dir)) @@ -186,7 +198,9 @@ /datum/wound/blunt/bone/moderate name = "Joint Dislocation" desc = "Patient's limb has been unset from socket, causing pain and reduced motor function." - treat_text = "Recommended application of bonesetter to affected limb, though manual relocation by applying an aggressive grab to the patient and helpfully interacting with afflicted limb may suffice." + treat_text = "Apply Bonesetter to the affected limb. \ + Manual relocation by via an aggressive grab and a tight hug to the affected limb may also suffice." + treat_text_short = "Apply Bonesetter, or manually relocate the limb." examine_desc = "is awkwardly janked out of place" occur_text = "janks violently and becomes unseated" severity = WOUND_SEVERITY_MODERATE @@ -321,7 +335,9 @@ /datum/wound/blunt/bone/severe name = "Hairline Fracture" desc = "Patient's bone has suffered a crack in the foundation, causing serious pain and reduced limb functionality." - treat_text = "Recommended light surgical application of bone gel, though a sling of medical gauze will prevent worsening situation." + treat_text = "Repair surgically. In the event of an emergency, an application of bone gel over the affected area will fix over time. \ + A splint or sling of medical gauze can also be used to prevent the fracture from worsening." + treat_text_short = "Repair surgically, or apply bone gel. A splint or gauze sling can also be used." examine_desc = "appears grotesquely swollen, jagged bumps hinting at chips in the bone" occur_text = "sprays chips of bone and develops a nasty looking bruise" @@ -354,8 +370,11 @@ /// Compound Fracture (Critical Blunt) /datum/wound/blunt/bone/critical name = "Compound Fracture" - desc = "Patient's bones have suffered multiple gruesome fractures, causing significant pain and near uselessness of limb." - treat_text = "Immediate binding of affected limb, followed by surgical intervention ASAP." + desc = "Patient's bones have suffered multiple fractures, \ + couped with a break in the skin, causing significant pain and near uselessness of limb." + treat_text = "Immediately bind the affected limb with gauze or a splint. Repair surgically. \ + In the event of an emergency, bone gel and surgical tape can be applied to the affected area to fix over a long period of time." + treat_text_short = "Repair surgically, or apply bone gel and surgical tape. A splint or gauze sling should also be used." examine_desc = "is thoroughly pulped and cracked, exposing shards of bone to open air" occur_text = "cracks apart, exposing broken bones to open air" diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index 6c35cedd33c60..b4bc3d9bc0e09 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -40,7 +40,7 @@ return . = ..() - if(strikes_to_lose_limb == 0) // we've already hit sepsis, nothing more to do + if(strikes_to_lose_limb <= 0) // we've already hit sepsis, nothing more to do victim.adjustToxLoss(0.25 * seconds_per_tick) if(SPT_PROB(0.5, seconds_per_tick)) victim.visible_message(span_danger("The infection on the remnants of [victim]'s [limb.plaintext_zone] shift and bubble nauseatingly!"), span_warning("You can feel the infection on the remnants of your [limb.plaintext_zone] coursing through your veins!"), vision_distance = COMBAT_MESSAGE_RANGE) @@ -81,6 +81,8 @@ infestation += infestation_rate * seconds_per_tick switch(infestation) if(0 to WOUND_INFECTION_MODERATE) + return + if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE) if(SPT_PROB(15, seconds_per_tick)) victim.adjustToxLoss(0.2) @@ -131,6 +133,13 @@ threshold_penalty = 120 // piss easy to destroy set_disabling(TRUE) +/datum/wound/burn/flesh/set_disabling(new_value) + . = ..() + if(new_value && strikes_to_lose_limb <= 0) + treat_text_short = "Amputate or augment limb immediately, or place the patient into cryogenics." + else + treat_text_short = initial(treat_text_short) + /datum/wound/burn/flesh/get_wound_description(mob/user) if(strikes_to_lose_limb <= 0) return span_deadsay("[victim.p_Their()] [limb.plaintext_zone] has locked up completely and is non-functional.") @@ -164,9 +173,25 @@ return "[condition.Join()]" +/datum/wound/burn/flesh/severity_text(simple = FALSE) + . = ..() + . += " Burn / " + switch(infestation) + if(-INFINITY to WOUND_INFECTION_MODERATE) + . += "No" + if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE) + . += "Moderate" + if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL) + . += "Severe" + if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC) + . += "Critical" + if(WOUND_INFECTION_SEPTIC to INFINITY) + . += "Total" + . += " Infection" + /datum/wound/burn/flesh/get_scanner_description(mob/user) if(strikes_to_lose_limb <= 0) // Unclear if it can go below 0, best to not take the chance - var/oopsie = "Type: [name]\nSeverity: [severity_text()]" + var/oopsie = "Type: [name]
Severity: [severity_text()]" oopsie += "
Infection Level: [span_deadsay("The body part has suffered complete sepsis and must be removed. Amputate or augment limb immediately, or place the patient in a cryotube.")]
" return oopsie @@ -245,7 +270,7 @@ // people complained about burns not healing on stasis beds, so in addition to checking if it's cured, they also get the special ability to very slowly heal on stasis beds if they have the healing effects stored /datum/wound/burn/flesh/on_stasis(seconds_per_tick, times_fired) . = ..() - if(strikes_to_lose_limb == 0) // we've already hit sepsis, nothing more to do + if(strikes_to_lose_limb <= 0) // we've already hit sepsis, nothing more to do if(SPT_PROB(0.5, seconds_per_tick)) victim.visible_message(span_danger("The infection on the remnants of [victim]'s [limb.plaintext_zone] shift and bubble nauseatingly!"), span_warning("You can feel the infection on the remnants of your [limb.plaintext_zone] coursing through your veins!"), vision_distance = COMBAT_MESSAGE_RANGE) return @@ -276,7 +301,8 @@ /datum/wound/burn/flesh/moderate name = "Second Degree Burns" desc = "Patient is suffering considerable burns with mild skin penetration, weakening limb integrity and increased burning sensations." - treat_text = "Recommended application of topical ointment or regenerative mesh to affected region." + treat_text = "Apply topical ointment or regenerative mesh to the wound." + treat_text_short = "Apply healing aid such as regenerative mesh." examine_desc = "is badly burned and breaking out in blisters" occur_text = "breaks out with violent red burns" severity = WOUND_SEVERITY_MODERATE @@ -300,7 +326,11 @@ /datum/wound/burn/flesh/severe name = "Third Degree Burns" desc = "Patient is suffering extreme burns with full skin penetration, creating serious risk of infection and greatly reduced limb integrity." - treat_text = "Recommended immediate disinfection and excision of any infected skin, followed by bandaging and ointment. If the limb has locked up, it must be amputated, augmented or treated with cryogenics." + treat_text = "Swiftly apply healing aids such as Synthflesh or regenerative mesh to the wound. \ + Disinfect the wound and surgically debride any infected skin, and wrap in clean gauze / use ointment to prevent further infection. \ + If the limb has locked up, it must be amputated, augmented or treated with cryogenics." + treat_text_short = "Apply healing aid such as regenerative mesh, Synthflesh, or cryogenics and disinfect / debride. \ + Clean gauze or ointment will slow infection rate." examine_desc = "appears seriously charred, with aggressive red splotches" occur_text = "chars rapidly, exposing ruined tissue and spreading angry red burns" severity = WOUND_SEVERITY_SEVERE @@ -326,7 +356,11 @@ /datum/wound/burn/flesh/critical name = "Catastrophic Burns" desc = "Patient is suffering near complete loss of tissue and significantly charred muscle and bone, creating life-threatening risk of infection and negligible limb integrity." - treat_text = "Immediate surgical debriding of any infected skin, followed by potent tissue regeneration formula and bandaging. If the limb has locked up, it must be amputated, augmented or treated with cryogenics." + treat_text = "Immediately apply healing aids such as Synthflesh or regenerative mesh to the wound. \ + Disinfect the wound and surgically debride any infected skin, and wrap in clean gauze / use ointment to prevent further infection. \ + If the limb has locked up, it must be amputated, augmented or treated with cryogenics." + treat_text_short = "Apply healing aid such as regenerative mesh, Synthflesh, or cryogenics and disinfect / debride. \ + Clean gauze or ointment will slow infection rate." examine_desc = "is a ruined mess of blanched bone, melted fat, and charred tissue" occur_text = "vaporizes as flesh, bone, and fat melt together in a horrifying mess" severity = WOUND_SEVERITY_CRITICAL @@ -363,8 +397,8 @@ can_be_randomly_generated = FALSE wound_path_to_generate = /datum/wound/burn/flesh/severe/brand - /// special severe wound caused by the cursed slot machine. + /datum/wound/burn/flesh/severe/cursed_brand name = "Ancient Brand" desc = "Patient is suffering extreme burns with oddly ornate brand markings, creating serious risk of infection and greatly reduced limb integrity." diff --git a/code/datums/wounds/cranial_fissure.dm b/code/datums/wounds/cranial_fissure.dm index df973d3bdec90..8feebe8d2b624 100644 --- a/code/datums/wounds/cranial_fissure.dm +++ b/code/datums/wounds/cranial_fissure.dm @@ -29,7 +29,8 @@ /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." + treat_text = "Surgical reconstruction of the skull is necessary." + treat_text_short = "Surgical reconstruction required." examine_desc = "is split open" occur_text = "is split into two separated chunks" @@ -95,7 +96,7 @@ victim.balloon_alert(user, "no eyes to take!") return TRUE - playsound(victim, 'sound/surgery/organ2.ogg', 50, TRUE) + playsound(victim, 'sound/items/handling/surgery/organ2.ogg', 50, TRUE) victim.balloon_alert(user, "pulling out eyes...") user.visible_message( span_boldwarning("[user] reaches inside [victim]'s skull..."), @@ -115,7 +116,7 @@ log_combat(user, victim, "pulled out the eyes of") - playsound(victim, 'sound/surgery/organ1.ogg', 75, TRUE) + playsound(victim, 'sound/items/handling/surgery/organ1.ogg', 75, TRUE) user.visible_message( span_boldwarning("[user] rips out [victim]'s eyes!"), span_boldwarning("You rip out [victim]'s eyes!"), diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index c0be047b9381b..72f49cc58e35d 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -5,7 +5,7 @@ /datum/wound/pierce/bleed name = "Piercing Wound" - sound_effect = 'sound/weapons/slice.ogg' + sound_effect = 'sound/items/weapons/slice.ogg' processes = TRUE treatable_by = list(/obj/item/stack/medical/suture) treatable_tools = list(TOOL_CAUTERY) @@ -41,14 +41,26 @@ if(1 to 6) victim.bleed(blood_bled, TRUE) if(7 to 13) - victim.visible_message("Blood droplets fly from the hole in [victim]'s [limb.plaintext_zone].", span_danger("You cough up a bit of blood from the blow to your [limb.plaintext_zone]."), vision_distance=COMBAT_MESSAGE_RANGE) + victim.visible_message( + span_smalldanger("Blood droplets fly from the hole in [victim]'s [limb.plaintext_zone]."), + span_danger("You cough up a bit of blood from the blow to your [limb.plaintext_zone]."), + vision_distance = COMBAT_MESSAGE_RANGE, + ) victim.bleed(blood_bled, TRUE) if(14 to 19) - victim.visible_message("A small stream of blood spurts from the hole in [victim]'s [limb.plaintext_zone]!", span_danger("You spit out a string of blood from the blow to your [limb.plaintext_zone]!"), vision_distance=COMBAT_MESSAGE_RANGE) + victim.visible_message( + span_smalldanger("A small stream of blood spurts from the hole in [victim]'s [limb.plaintext_zone]!"), + span_danger("You spit out a string of blood from the blow to your [limb.plaintext_zone]!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ) new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) victim.bleed(blood_bled) if(20 to INFINITY) - victim.visible_message(span_danger("A spray of blood streams from the gash in [victim]'s [limb.plaintext_zone]!"), span_danger("You choke up on a spray of blood from the blow to your [limb.plaintext_zone]!"), vision_distance=COMBAT_MESSAGE_RANGE) + victim.visible_message( + span_danger("A spray of blood streams from the gash in [victim]'s [limb.plaintext_zone]!"), + span_bolddanger("You choke up on a spray of blood from the blow to your [limb.plaintext_zone]!"), + vision_distance = COMBAT_MESSAGE_RANGE, + ) victim.bleed(blood_bled) new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir) victim.add_splatter_floor(get_step(victim.loc, victim.dir)) @@ -179,7 +191,10 @@ /datum/wound/pierce/bleed/moderate name = "Minor Skin Breakage" desc = "Patient's skin has been broken open, causing severe bruising and minor internal bleeding in affected area." - treat_text = "Treat affected site with bandaging or exposure to extreme cold. In dire cases, brief exposure to vacuum may suffice." // space is cold in ss13, so it's like an ice pack! + treat_text = "Apply bandaging or suturing to the wound, make use of blood clotting agents, \ + cauterization, or in extreme circumstances, exposure to extreme cold or vaccuum. \ + Follow with food and a rest period." + treat_text_short = "Apply bandaging or suturing." examine_desc = "has a small, circular hole, gently bleeding" occur_text = "spurts out a thin stream of blood" sound_effect = 'sound/effects/wounds/pierce1.ogg' @@ -210,7 +225,10 @@ /datum/wound/pierce/bleed/severe name = "Open Puncture" desc = "Patient's internal tissue is penetrated, causing sizeable internal bleeding and reduced limb stability." - treat_text = "Repair punctures in skin by suture or cautery, extreme cold may also work." + treat_text = "Swiftly apply bandaging or suturing to the wound, make use of blood clotting agents or saline-glucose, \ + cauterization, or in extreme circumstances, exposure to extreme cold or vaccuum. \ + Follow with iron supplements and a rest period." + treat_text_short = "Apply bandaging, suturing, clotting agents, or cauterization." examine_desc = "is pierced clear through, with bits of tissue obscuring the open hole" occur_text = "looses a violent spray of blood, revealing a pierced wound" sound_effect = 'sound/effects/wounds/pierce2.ogg' @@ -240,7 +258,10 @@ /datum/wound/pierce/bleed/critical name = "Ruptured Cavity" desc = "Patient's internal tissue and circulatory system is shredded, causing significant internal bleeding and damage to internal organs." - treat_text = "Surgical repair of puncture wound, followed by supervised resanguination." + treat_text = "Immediately apply bandaging or suturing to the wound, make use of blood clotting agents or saline-glucose, \ + cauterization, or in extreme circumstances, exposure to extreme cold or vaccuum. \ + Follow with supervised resanguination." + treat_text_short = "Apply bandaging, suturing, clotting agents, or cauterization." examine_desc = "is ripped clear through, barely held together by exposed bone" occur_text = "blasts apart, sending chunks of viscera flying in all directions" sound_effect = 'sound/effects/wounds/pierce3.ogg' diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index dd41d48620e99..fd3cb4bd7b2b1 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -5,7 +5,7 @@ /datum/wound/slash name = "Slashing (Cut) Wound" - sound_effect = 'sound/weapons/slice.ogg' + sound_effect = 'sound/items/weapons/slice.ogg' /datum/wound_pregen_data/flesh_slash abstract = TRUE @@ -321,7 +321,9 @@ /datum/wound/slash/flesh/moderate name = "Rough Abrasion" desc = "Patient's skin has been badly scraped, generating moderate blood loss." - treat_text = "Application of clean bandages or first-aid grade sutures, followed by food and rest." + treat_text = "Apply bandaging or suturing to the wound. \ + Follow up with food and a rest period." + treat_text_short = "Apply bandaging or suturing." examine_desc = "has an open cut" occur_text = "is cut open, slowly leaking blood" sound_effect = 'sound/effects/wounds/blood1.ogg' @@ -350,7 +352,10 @@ /datum/wound/slash/flesh/severe name = "Open Laceration" desc = "Patient's skin is ripped clean open, allowing significant blood loss." - treat_text = "Speedy application of first-aid grade sutures and clean bandages, followed by vitals monitoring to ensure recovery." + treat_text = "Swiftly apply bandaging or suturing to the wound, \ + or make use of blood clotting agents or cauterization. \ + Follow up with iron supplements or saline-glucose and a rest period." + treat_text_short = "Apply bandaging, suturing, clotting agents, or cauterization." examine_desc = "has a severe cut" occur_text = "is ripped open, veins spurting blood" sound_effect = 'sound/effects/wounds/blood2.ogg' @@ -380,7 +385,10 @@ /datum/wound/slash/flesh/critical name = "Weeping Avulsion" desc = "Patient's skin is completely torn open, along with significant loss of tissue. Extreme blood loss will lead to quick death without intervention." - treat_text = "Immediate bandaging and either suturing or cauterization, followed by supervised resanguination." + treat_text = "Immediately apply bandaging or suturing to the wound, \ + or make use of blood clotting agents or cauterization. \ + Follow up supervised resanguination." + treat_text_short = "Apply bandaging, suturing, clotting agents, or cauterization." examine_desc = "is carved down to the bone, spraying blood wildly" occur_text = "is torn open, spraying blood wildly" sound_effect = 'sound/effects/wounds/blood3.ogg' diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 0c6847e7db348..b988fa0b6daa8 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -91,7 +91,7 @@ ///Does this area immediately play an ambience track upon enter? var/forced_ambience = FALSE ///The background droning loop that plays 24/7 - var/ambient_buzz = 'sound/ambience/shipambience.ogg' + var/ambient_buzz = 'sound/ambience/general/shipambience.ogg' ///The volume of the ambient buzz var/ambient_buzz_vol = 35 ///Used to decide what the minimum time between ambience is @@ -128,7 +128,7 @@ * A list of teleport locations * * Adding a wizard area teleport list because motherfucking lag -- Urist - * I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game + * I am far too lazy to make it a proper list of areas so I'll just make it run the usual teleport routine at the start of the game */ GLOBAL_LIST_EMPTY(teleportlocs) @@ -168,9 +168,9 @@ GLOBAL_LIST_EMPTY(teleportlocs) return ..() /* - * Initalize this area + * Initialize this area * - * intializes the dynamic area lighting and also registers the area with the z level via + * initializes the dynamic area lighting and also registers the area with the z level via * reg_in_areas_in_z * * returns INITIALIZE_HINT_LATELOAD @@ -414,7 +414,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) /** * Update the icon state of the area * - * Im not sure what the heck this does, somethign to do with weather being able to set icon + * I'm not sure what the heck this does, something to do with weather being able to set icon * states on areas?? where the heck would that even display? */ /area/update_icon_state() @@ -439,7 +439,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) /** * Returns int 1 or 0 if the area has power for the given channel * - * evalutes a mixture of variables mappers can set, requires_power, always_unpowered and then + * evaluates a mixture of variables mappers can set, requires_power, always_unpowered and then * per channel power_equip, power_light, power_environ */ /area/proc/powered(chan) // return true if the area has power to given channel diff --git a/code/game/area/areas/ai_monitored.dm b/code/game/area/areas/ai_monitored.dm index a6964d70f6ae0..4e63479987e85 100644 --- a/code/game/area/areas/ai_monitored.dm +++ b/code/game/area/areas/ai_monitored.dm @@ -23,9 +23,9 @@ // Turret protected /area/station/ai_monitored/turret_protected - ambientsounds = list('sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg') + ambientsounds = list('sound/ambience/engineering/ambitech.ogg', 'sound/ambience/engineering/ambitech2.ogg', 'sound/ambience/engineering/ambiatmos.ogg', 'sound/ambience/engineering/ambiatmos2.ogg') ///Some sounds (like the space jam) are terrible when on loop. We use this variable to add it to other AI areas, but override it to keep it from the AI's core. - var/ai_will_not_hear_this = list('sound/ambience/ambimalf.ogg') + var/ai_will_not_hear_this = list('sound/ambience/misc/ambimalf.ogg') airlock_wires = /datum/wires/airlock/ai /area/station/ai_monitored/turret_protected/Initialize(mapload) diff --git a/code/game/area/areas/away_content.dm b/code/game/area/areas/away_content.dm index 14ea52648f89d..5ff0143c0a1a9 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 = UNIQUE_AREA /area/awaymission/museum name = "Nanotrasen Museum" @@ -23,7 +23,7 @@ Unused icons for new areas are "awaycontent1" ~ "awaycontent30" base_lighting_alpha = 200 base_lighting_color = "#FFF4AA" sound_environment = SOUND_ENVIRONMENT_PLAIN - ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/ambiodd.ogg','sound/ambience/ambinice.ogg') + ambientsounds = list('sound/ambience/beach/shore.ogg', 'sound/ambience/misc/ambiodd.ogg','sound/ambience/medical/ambinice.ogg') /area/awaymission/museum/cafeteria name = "Nanotrasen Museum Cafeteria" diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm index f5ac4fac78e36..43a18ac5f18e2 100644 --- a/code/game/area/areas/centcom.dm +++ b/code/game/area/areas/centcom.dm @@ -129,6 +129,7 @@ /area/centcom/tdome/arena name = "Thunderdome Arena" icon_state = "thunder" + area_flags = parent_type::area_flags | UNLIMITED_FISHING //for possible testing purposes /area/centcom/tdome/tdome1 name = "Thunderdome (Team 1)" diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index 031a6dd5039d7..be6db4e077fec 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -4,7 +4,7 @@ icon_state = "mining" has_gravity = STANDARD_GRAVITY area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED | CULT_PERMITTED - ambient_buzz = 'sound/ambience/magma.ogg' + ambient_buzz = 'sound/ambience/lavaland/magma.ogg' /area/mine/lobby name = "Mining Station" @@ -134,7 +134,7 @@ flags_1 = NONE area_flags = VALID_TERRITORY | UNIQUE_AREA | FLORA_ALLOWED sound_environment = SOUND_AREA_LAVALAND - ambient_buzz = 'sound/ambience/magma.ogg' + ambient_buzz = 'sound/ambience/lavaland/magma.ogg' /area/lavaland/surface name = "Lavaland" @@ -195,7 +195,7 @@ area_flags = UNIQUE_AREA | FLORA_ALLOWED ambience_index = AMBIENCE_ICEMOON sound_environment = SOUND_AREA_ICEMOON - ambient_buzz = 'sound/ambience/magma.ogg' + ambient_buzz = 'sound/ambience/lavaland/magma.ogg' /area/icemoon/surface name = "Icemoon" diff --git a/code/game/area/areas/ruins/icemoon.dm b/code/game/area/areas/ruins/icemoon.dm index fd983f763a3a2..061bd8f06d209 100644 --- a/code/game/area/areas/ruins/icemoon.dm +++ b/code/game/area/areas/ruins/icemoon.dm @@ -44,7 +44,7 @@ mood_message = "I feel like I am being watched..." /area/ruin/bughabitat - name = "\improper Entemology Outreach Center" + name = "\improper Entomology Outreach Center" mood_bonus = 1 mood_message = "This place seems strangely serene." @@ -75,3 +75,7 @@ /area/ruin/powered/hermit name = "\improper Hermit's Cabin" +/area/ruin/syndielab + name = "\improper Syndicate Lab" + ambience_index = AMBIENCE_DANGER + sound_environment = SOUND_ENVIRONMENT_CAVE diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index 2063775823a06..2ed0337171dd8 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -8,7 +8,7 @@ /area/ruin/powered/clownplanet name = "\improper Clown Biodome" - ambientsounds = list('sound/ambience/clown.ogg') + ambientsounds = list('sound/music/lobby_music/clown.ogg') /area/ruin/unpowered/gaia name = "\improper Patch of Eden" @@ -38,7 +38,7 @@ /area/ruin/syndicate_lava_base name = "\improper Secret Base" ambience_index = AMBIENCE_DANGER - ambient_buzz = 'sound/ambience/magma.ogg' + ambient_buzz = 'sound/ambience/lavaland/magma.ogg' /area/ruin/unpowered/cultaltar name = "\improper Cult Altar" @@ -49,7 +49,7 @@ name = "\improper The Lizard's Gas" icon_state = "lizardgas" sound_environment = SOUND_ENVIRONMENT_ROOM - ambient_buzz = 'sound/ambience/magma.ogg' + ambient_buzz = 'sound/ambience/lavaland/magma.ogg' //Syndicate lavaland base @@ -94,16 +94,15 @@ power_environ = FALSE power_equip = FALSE power_light = FALSE - ambient_buzz = 'sound/ambience/magma.ogg' + ambient_buzz = 'sound/ambience/lavaland/magma.ogg' //ash walker nest /area/ruin/unpowered/ash_walkers - //SKYRAT EDIT ADDITION BEGIN - ASH WALKER MACHINES FIX + //SKYRAT EDIT ADDITION BEGIN - ASH WALKER MACHINES FIX //SKYRAT TODO - Fix this proper holy hell always_unpowered = FALSE power_equip = TRUE //SKYRAT EDIT ADDITION END - ambient_buzz = 'sound/ambience/magma.ogg' - + ambient_buzz = 'sound/ambience/lavaland/magma.ogg' /area/ruin/unpowered/ratvar outdoors = TRUE - ambient_buzz = 'sound/ambience/magma.ogg' + ambient_buzz = 'sound/ambience/lavaland/magma.ogg' diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm index 1b697dc02b0a0..ac687d6024a88 100644 --- a/code/game/area/areas/ruins/space.dm +++ b/code/game/area/areas/ruins/space.dm @@ -55,7 +55,7 @@ /area/ruin/space/has_grav/powered/aesthetic name = "Aesthetic" - ambientsounds = list('sound/ambience/ambivapor1.ogg') + ambientsounds = list('sound/ambience/misc/ambivapor1.ogg') //Ruin of Hotel @@ -89,7 +89,6 @@ /area/ruin/space/has_grav/hotel/pool name = "\improper Hotel Pool Room" - icon_state = "fitness" /area/ruin/space/has_grav/hotel/bar name = "\improper Hotel Bar" @@ -336,7 +335,7 @@ /area/ruin/space/ancientstation/delta/ai name = "\improper Delta Station AI Core" icon_state = "os_delta_ai" - ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg') + ambientsounds = list('sound/ambience/misc/ambimalf.ogg', 'sound/ambience/engineering/ambitech.ogg', 'sound/ambience/engineering/ambitech2.ogg', 'sound/ambience/engineering/ambiatmos.ogg', 'sound/ambience/engineering/ambiatmos2.ogg') /area/ruin/space/ancientstation/delta/storage name = "\improper Delta Station Storage" @@ -547,14 +546,14 @@ /area/ruin/space/abandoned_tele name = "\improper Abandoned Teleporter" - ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/signal.ogg') + ambientsounds = list('sound/ambience/misc/ambimalf.ogg', 'sound/ambience/misc/signal.ogg') //OLD AI SAT /area/ruin/space/tcommsat_oldaisat // Since tcommsat was moved to /area/station/, this turf doesn't inhereit its properties anymore name = "\improper Abandoned Satellite" - ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen9.ogg', 'sound/ambience/ambitech.ogg',\ - 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg', 'sound/ambience/ambimystery.ogg') + ambientsounds = list('sound/ambience/engineering/ambisin2.ogg', 'sound/ambience/misc/signal.ogg', 'sound/ambience/misc/signal.ogg', 'sound/ambience/general/ambigen9.ogg', 'sound/ambience/engineering/ambitech.ogg',\ + 'sound/ambience/engineering/ambitech2.ogg', 'sound/ambience/engineering/ambitech3.ogg', 'sound/ambience/misc/ambimystery.ogg') airlock_wires = /datum/wires/airlock/engineering // CRASHED PRISON SHUTTLE @@ -593,7 +592,7 @@ // The planet of the clowns /area/ruin/space/has_grav/powered/clownplanet name = "\improper Clown Planet" - ambientsounds = list('sound/ambience/clown.ogg') + ambientsounds = list('sound/music/lobby_music/clown.ogg') //DERELICT SULACO /area/ruin/space/has_grav/derelictsulaco @@ -672,7 +671,7 @@ icon = 'icons/area/areas_ruins.dmi' icon_state = "ruins" requires_power = FALSE - ambientsounds = list('sound/ambience/ambigen12.ogg','sound/ambience/ambigen13.ogg','sound/ambience/ambinice.ogg') + ambientsounds = list('sound/ambience/general/ambigen12.ogg','sound/ambience/general/ambigen13.ogg','sound/ambience/medical/ambinice.ogg') // the outlet /area/ruin/space/has_grav/the_outlet/storefront diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 78b887173b94a..4aa54a4ef2116 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -123,7 +123,7 @@ if(SSshuttle.arrivals?.mode == SHUTTLE_CALL) var/atom/movable/screen/splash/Spl = new(null, boarder.client, TRUE) Spl.Fade(TRUE) - boarder.playsound_local(get_turf(boarder), 'sound/voice/ApproachingTG.ogg', 25) + boarder.playsound_local(get_turf(boarder), 'sound/announcer/ApproachingTG.ogg', 25) boarder.update_parallax_teleport() diff --git a/code/game/area/areas/station/command.dm b/code/game/area/areas/station/command.dm index 23f2c7c61c0fc..ee4325d94aef8 100644 --- a/code/game/area/areas/station/command.dm +++ b/code/game/area/areas/station/command.dm @@ -2,7 +2,7 @@ name = "Command" icon_state = "command" ambientsounds = list( - 'sound/ambience/signal.ogg', + 'sound/ambience/misc/signal.ogg', ) airlock_wires = /datum/wires/airlock/command sound_environment = SOUND_AREA_STANDARD_STATION diff --git a/code/game/area/areas/station/maintenance.dm b/code/game/area/areas/station/maintenance.dm index 53e6da606d085..5e636719e7a09 100644 --- a/code/game/area/areas/station/maintenance.dm +++ b/code/game/area/areas/station/maintenance.dm @@ -5,7 +5,7 @@ airlock_wires = /datum/wires/airlock/maint sound_environment = SOUND_AREA_TUNNEL_ENCLOSED forced_ambience = TRUE - ambient_buzz = 'sound/ambience/source_corridor2.ogg' + ambient_buzz = 'sound/ambience/maintenance/source_corridor2.ogg' ambient_buzz_vol = 20 /* diff --git a/code/game/area/areas/station/medical.dm b/code/game/area/areas/station/medical.dm index fc6c6ff3a7564..b45a1492b290f 100644 --- a/code/game/area/areas/station/medical.dm +++ b/code/game/area/areas/station/medical.dm @@ -11,7 +11,7 @@ name = "\improper Abandoned Medbay" icon_state = "abandoned_medbay" ambientsounds = list( - 'sound/ambience/signal.ogg', + 'sound/ambience/misc/signal.ogg', ) sound_environment = SOUND_AREA_SMALL_ENCLOSED @@ -124,5 +124,5 @@ mood_bonus = 3 mood_message = "I feel at ease here." ambientsounds = list( - 'sound/ambience/aurora_caelus_short.ogg', + 'sound/ambience/aurora_caelus/aurora_caelus_short.ogg', ) diff --git a/code/game/area/areas/station/security.dm b/code/game/area/areas/station/security.dm index 93629f35628c2..ca158e69df87b 100644 --- a/code/game/area/areas/station/security.dm +++ b/code/game/area/areas/station/security.dm @@ -79,8 +79,8 @@ name = "\improper Detective's Office" icon_state = "detective" ambientsounds = list( - 'sound/ambience/ambidet1.ogg', - 'sound/ambience/ambidet2.ogg', + 'sound/ambience/security/ambidet1.ogg', + 'sound/ambience/security/ambidet2.ogg', ) /area/station/security/detectives_office/private_investigators_office diff --git a/code/game/area/areas/station/telecomm.dm b/code/game/area/areas/station/telecomm.dm index 78ec16a59bf29..02101c28c1a90 100644 --- a/code/game/area/areas/station/telecomm.dm +++ b/code/game/area/areas/station/telecomm.dm @@ -5,14 +5,14 @@ /area/station/tcommsat icon_state = "tcomsatcham" ambientsounds = list( - 'sound/ambience/ambisin2.ogg', - 'sound/ambience/signal.ogg', - 'sound/ambience/signal.ogg', - 'sound/ambience/ambigen9.ogg', - 'sound/ambience/ambitech.ogg', - 'sound/ambience/ambitech2.ogg', - 'sound/ambience/ambitech3.ogg', - 'sound/ambience/ambimystery.ogg', + 'sound/ambience/engineering/ambisin2.ogg', + 'sound/ambience/misc/signal.ogg', + 'sound/ambience/misc/signal.ogg', + 'sound/ambience/general/ambigen9.ogg', + 'sound/ambience/engineering/ambitech.ogg', + 'sound/ambience/engineering/ambitech2.ogg', + 'sound/ambience/engineering/ambitech3.ogg', + 'sound/ambience/misc/ambimystery.ogg', ) airlock_wires = /datum/wires/airlock/engineering diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index 6198370dc2469..b45912c6053e8 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -186,6 +186,13 @@ if(smoothing_flags & SMOOTH_QUEUED) SSicon_smooth.remove_from_queues(src) + // These lists cease existing when src does, so we need to clear any lua refs to them that exist. + if(!(datum_flags & DF_STATIC_OBJECT)) + DREAMLUAU_CLEAR_REF_USERDATA(contents) + DREAMLUAU_CLEAR_REF_USERDATA(filters) + DREAMLUAU_CLEAR_REF_USERDATA(overlays) + DREAMLUAU_CLEAR_REF_USERDATA(underlays) + return ..() /atom/proc/handle_ricochet(obj/projectile/ricocheting_projectile) @@ -683,10 +690,10 @@ 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) + UsedforProcessing(user, process_item, chosen_option, created_atoms) return -/atom/proc/UsedforProcessing(mob/living/user, obj/item/used_item, list/chosen_option) +/atom/proc/UsedforProcessing(mob/living/user, obj/item/used_item, list/chosen_option, list/created_atoms) qdel(src) return diff --git a/code/game/atom/alternate_appearance.dm b/code/game/atom/alternate_appearance.dm index 228462f7936a4..8c50760ea45ea 100644 --- a/code/game/atom/alternate_appearance.dm +++ b/code/game/atom/alternate_appearance.dm @@ -35,20 +35,51 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) GLOB.active_alternate_appearances += src for(var/mob in GLOB.player_list) - if(mobShouldSee(mob)) - show_to(mob) + apply_to_new_mob(mob) /datum/atom_hud/alternate_appearance/Destroy() GLOB.active_alternate_appearances -= src return ..() -/datum/atom_hud/alternate_appearance/proc/onNewMob(mob/M) - if(mobShouldSee(M)) - show_to(M) +/// Wrapper for applying this alt hud to the passed mob (if they should see it) +/datum/atom_hud/alternate_appearance/proc/apply_to_new_mob(mob/applying_to) + if(mobShouldSee(applying_to)) + if(!hud_users_all_z_levels[applying_to]) + show_to(applying_to) + return TRUE + return FALSE +/// Checks if the passed mob should be seeing this hud /datum/atom_hud/alternate_appearance/proc/mobShouldSee(mob/M) return FALSE +/datum/atom_hud/alternate_appearance/show_to(mob/new_viewer) + . = ..() + if(!new_viewer) + return + track_mob(new_viewer) + +/// Registers some signals to track the mob's state to determine if they should be seeing the hud still +/datum/atom_hud/alternate_appearance/proc/track_mob(mob/new_viewer) + return + +/datum/atom_hud/alternate_appearance/hide_from(mob/former_viewer, absolute) + . = ..() + if(!former_viewer || hud_atoms_all_z_levels[former_viewer] >= 1) + return + untrack_mob(former_viewer) + +/// Unregisters the signals that were tracking the mob's state +/datum/atom_hud/alternate_appearance/proc/untrack_mob(mob/former_viewer) + return + +/datum/atom_hud/alternate_appearance/proc/check_hud(mob/source) + SIGNAL_HANDLER + // Attempt to re-apply the hud entirely + if(!apply_to_new_mob(source)) + // If that failed, probably shouldn't be seeing it at all, so nuke it + hide_from(source, absolute = TRUE) + /datum/atom_hud/alternate_appearance/add_atom_to_hud(atom/A, image/I) . = ..() if(.) @@ -99,6 +130,22 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) if(ghost_appearance) QDEL_NULL(ghost_appearance) +/datum/atom_hud/alternate_appearance/basic/track_mob(mob/new_viewer) + RegisterSignals(new_viewer, list( + COMSIG_MOB_ANTAGONIST_REMOVED, + COMSIG_MOB_GHOSTIZED, + COMSIG_MOB_MIND_TRANSFERRED_INTO, + COMSIG_MOB_MIND_TRANSFERRED_OUT_OF, + ), PROC_REF(check_hud), override = TRUE) + +/datum/atom_hud/alternate_appearance/basic/untrack_mob(mob/former_viewer) + UnregisterSignal(former_viewer, list( + COMSIG_MOB_ANTAGONIST_REMOVED, + COMSIG_MOB_GHOSTIZED, + COMSIG_MOB_MIND_TRANSFERRED_INTO, + COMSIG_MOB_MIND_TRANSFERRED_OUT_OF, + )) + /datum/atom_hud/alternate_appearance/basic/add_atom_to_hud(atom/A) LAZYINITLIST(A.hud_list) A.hud_list[appearance_key] = image @@ -136,16 +183,10 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) /datum/atom_hud/alternate_appearance/basic/noncult /datum/atom_hud/alternate_appearance/basic/noncult/mobShouldSee(mob/M) - if(!IS_CULTIST(M)) - return TRUE - return FALSE + return !IS_CULTIST(M) -/datum/atom_hud/alternate_appearance/basic/cult - -/datum/atom_hud/alternate_appearance/basic/cult/mobShouldSee(mob/M) - if(IS_CULTIST(M)) - return TRUE - return FALSE +/datum/atom_hud/alternate_appearance/basic/has_antagonist/cult + antag_datum_type = /datum/antagonist/cult /datum/atom_hud/alternate_appearance/basic/blessed_aware @@ -171,3 +212,10 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) return ..() /datum/atom_hud/alternate_appearance/basic/food_demands + +/datum/atom_hud/alternate_appearance/basic/heretic + +/datum/atom_hud/alternate_appearance/basic/heretic/mobShouldSee(mob/M) + if(IS_HERETIC(M)) + return TRUE + return FALSE diff --git a/code/game/atom/atom_act.dm b/code/game/atom/atom_act.dm index 53269c5538cc2..5d8d9decd70a4 100644 --- a/code/game/atom/atom_act.dm +++ b/code/game/atom/atom_act.dm @@ -116,11 +116,15 @@ * 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) + * + * Worth of note: If hitby returns TRUE, it means the object has been blocked or catched by src. + * So far, this is only possible for living mobs and carbons, who can hold shields and catch thrown items. */ /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), 0.2 SECONDS) + return FALSE /** * We have have actually hit the passed in atom @@ -209,7 +213,7 @@ ///wrapper proc that passes our mob's rust_strength to the target we are rusting /mob/living/proc/do_rust_heretic_act(atom/target) - var/datum/antagonist/heretic/heretic_data = IS_HERETIC(src) + var/datum/antagonist/heretic/heretic_data = GET_HERETIC(src) target.rust_heretic_act(heretic_data?.rust_strength) /mob/living/basic/heretic_summon/rust_walker/do_rust_heretic_act(atom/target) diff --git a/code/game/atom/atom_defense.dm b/code/game/atom/atom_defense.dm index d2280fd2b59c0..7be7aaac3954d 100644 --- a/code/game/atom/atom_defense.dm +++ b/code/game/atom/atom_defense.dm @@ -94,17 +94,14 @@ CRASH("/atom/proc/run_atom_armor was called on [src] without being implemented as a type that uses integrity!") if(damage_flag == MELEE && damage_amount < damage_deflection) return 0 - switch(damage_type) - if(BRUTE) - if(BURN) - else - return 0 + if(damage_type != BRUTE && damage_type != BURN) + return 0 var/armor_protection = 0 if(damage_flag) armor_protection = get_armor_rating(damage_flag) if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. armor_protection = clamp(PENETRATE_ARMOUR(armor_protection, armour_penetration), min(armor_protection, 0), 100) - return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION) + return round(damage_amount * (100 - armor_protection) * 0.01, DAMAGE_PRECISION) ///the sound played when the atom is damaged. /atom/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) @@ -118,9 +115,9 @@ 'modular_skyrat/master_files/sound/effects/metalblock7.wav', 'modular_skyrat/master_files/sound/effects/metalblock8.wav'), 50, TRUE) //SKYRAT EDIT END else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) ///Called to get the damage that hulks will deal to the atom. /atom/proc/hulk_damage() diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index e728781ee01ba..fee219f7b4b50 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -1,6 +1,14 @@ /atom - ///If non-null, overrides a/an/some in all cases + /// If non-null, overrides a/an/some in all cases var/article + /// Text that appears preceding the name in examine() + var/examine_thats = "That's" + +/mob/living/carbon/human + examine_thats = "This is" + +/mob/living/silicon/robot + examine_thats = "This is" /** * Called when a mob examines (shift click or verb) this atom @@ -11,30 +19,20 @@ * 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() - + . = 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 + . += "[desc]" + + var/list/tags_list = examine_tags(user) + if (length(tags_list)) + var/tag_string = list() + for (var/atom_tag in tags_list) + tag_string += (isnull(tags_list[atom_tag]) ? atom_tag : span_tooltip(tags_list[atom_tag], atom_tag)) + // Weird bit but ensures that if the final element has its own "and" we don't add another one + tag_string = english_list(tag_string, and_text = (findtext(tag_string[length(tag_string)], " and ")) ? ", " : " and ") + var/post_descriptor = examine_post_descriptor(user) + . += "[p_They()] [p_are()] a [tag_string] [examine_descriptor(user)][length(post_descriptor) ? " [jointext(post_descriptor, " ")]" : ""]." if(reagents) var/user_sees_reagents = user.can_see_reagents() @@ -60,6 +58,34 @@ SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) +/* + * A list of "tags" displayed after atom's description in examine. + * This should return an assoc list of tags -> tooltips for them. If item if null, then no tooltip is assigned. + * For example: + * list("small" = "This is a small size class item.", "fireproof" = "This item is impervious to fire.") + * will result in + * This is a small, fireproof item. + * where "item" is pulled from examine_descriptor() proc + */ +/atom/proc/examine_tags(mob/user) + . = list() + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_TAGS, user, .) + +/// What this atom should be called in examine tags +/atom/proc/examine_descriptor(mob/user) + return "object" + +/// Returns a list of strings to be displayed after the descriptor +/atom/proc/examine_post_descriptor(mob/user) + . = list() + if(!custom_materials) + return + var/mats_list = list() + for(var/custom_material in custom_materials) + var/datum/material/current_material = GET_MATERIAL_REF(custom_material) + mats_list += span_tooltip("It is made out of [current_material.name].", current_material.name) + . += "made of [english_list(mats_list)]" + /** * Called when a mob examines (shift click or verb) this atom twice (or more) within EXAMINE_MORE_WINDOW (default 1 second) * @@ -83,7 +109,7 @@ * [COMSIG_ATOM_GET_EXAMINE_NAME] signal */ /atom/proc/get_examine_name(mob/user) - var/list/override = list(article, null, "[name]") + var/list/override = list(article, null, "[get_visible_name()]") SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) if(!isnull(override[EXAMINE_POSITION_ARTICLE])) @@ -92,11 +118,24 @@ if(!isnull(override[EXAMINE_POSITION_BEFORE])) override -= null // There is no article, don't try to join it return "\a [jointext(override, " ")]" - return "\a [src]" + return "\a [src]" + +/mob/living/get_examine_name(mob/user) + return get_visible_name() -///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)]" +/// Icon displayed in examine +/atom/proc/get_examine_icon(mob/user) + return icon2html(src, user) + +/** + * Formats the atom's name into a string for use in examine (as the "title" of the atom) + * + * * user - the mob examining the atom + * * thats - whether to include "That's", or similar (mobs use "This is") before the name + */ +/atom/proc/examine_title(mob/user, thats = FALSE) + var/examine_icon = get_examine_icon(user) + return "[examine_icon ? "[examine_icon] " : ""][thats ? "[examine_thats] ":""][get_examine_name(user)]" /** * Returns an extended list of examine strings for any contained ID cards. @@ -106,7 +145,6 @@ */ /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()) diff --git a/code/game/atom/atom_tool_acts.dm b/code/game/atom/atom_tool_acts.dm index abe580958a4e7..2ef7ab1e08028 100644 --- a/code/game/atom/atom_tool_acts.dm +++ b/code/game/atom/atom_tool_acts.dm @@ -1,7 +1,7 @@ /** * ## Item interaction * - * Handles non-combat iteractions of a tool on this atom, + * Handles non-combat interactions of a tool on this atom, * such as using a tool on a wall to deconstruct it, * or scanning someone with a health analyzer */ @@ -14,7 +14,7 @@ if(tool_return) return tool_return - var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) + var/is_right_clicking = text2num(LAZYACCESS(modifiers, RIGHT_CLICK)) var/is_left_clicking = !is_right_clicking var/early_sig_return = NONE if(is_left_clicking) @@ -22,10 +22,8 @@ * This is intentionally using `||` instead of `|` to short-circuit the signal calls * This is because we want to return early if ANY of these signals return a value * - * This puts priority on the atom's signals, then the tool's signals, then the user's signals - * So stuff like storage can be handled before stuff the item wants to do like cleaner component - * - * Future idea: Being on combat mode could change/reverse the priority of these signals + * This puts priority on the atom's signals, then the tool's signals, then the user's signals, + * so we can avoid doing two interactions at once */ early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_ITEM_INTERACTION, user, tool, modifiers) \ || SEND_SIGNAL(tool, COMSIG_ITEM_INTERACTING_WITH_ATOM, user, src, modifiers) \ @@ -50,6 +48,16 @@ if(interact_return) return interact_return + // We have to manually handle storage in item_interaction because storage is blocking in 99% of interactions, which stifles a lot + // Yeah it sucks not being able to signalize this, but the other option is to have a second signal here just for storage which is also not great + if(atom_storage) + if(is_left_clicking) + if(atom_storage.insert_on_attack) + return atom_storage.item_interact_insert(user, tool) + else + if(atom_storage.open_storage(user) && atom_storage.display_contents) + return ITEM_INTERACT_SUCCESS + return NONE /** @@ -61,7 +69,7 @@ * * Handles the tool_acts in particular, such as wrenches and screwdrivers. * - * This can be overriden to handle unique "tool interactions" + * This can be overridden to handle unique "tool interactions" * IE using an item like a tool (when it's not actually one) * This is particularly useful for things that shouldn't be inserted into storage * (because tool acting runs before storage checks) @@ -325,23 +333,3 @@ /// 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 - -/** - * Called before this item is placed into a storage container - * via the item clicking on the target atom - * - * Returning FALSE will prevent the item from being stored. - */ -/obj/item/proc/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) - return TRUE - -/** - * Called before an item is put into this atom's storage datum via the item clicking on this atom - * - * This can be used to add item-atom interactions that you want handled before inserting something into storage - * (But it's also fairly snowflakey) - * - * Returning FALSE will block that item from being put into our storage. - */ -/atom/proc/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) - return TRUE diff --git a/code/game/atom/atoms_initializing_EXPENSIVE.dm b/code/game/atom/atoms_initializing_EXPENSIVE.dm index f76f00670d27e..4d539786537d8 100644 --- a/code/game/atom/atoms_initializing_EXPENSIVE.dm +++ b/code/game/atom/atoms_initializing_EXPENSIVE.dm @@ -24,7 +24,7 @@ switch(result) if (INITIALIZE_HINT_NORMAL) - // pass + EMPTY_BLOCK_GUARD // Pass if(INITIALIZE_HINT_LATELOAD) if(arguments[1]) //mapload late_loaders += A @@ -56,14 +56,14 @@ * 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 + * [Initialization][/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. + * result is that the Initialize 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() + if(GLOB.use_preloader && src.type == GLOB._preloader_path)//in case the instantiated atom is creating other atoms in New() world.preloader_load(src) var/do_initialize = SSatoms.initialized @@ -79,17 +79,17 @@ * we don't use New as we have better control over when this is called and we can choose * to delay calls or hook other logic in and so forth * - * During roundstart map parsing, atoms are queued for intialization in the base atom/New(), - * After the map has loaded, then Initalize is called on all atoms one by one. NB: this - * is also true for loading map templates as well, so they don't Initalize until all objects + * During roundstart map parsing, atoms are queued for initialization in the base atom/New(), + * After the map has loaded, then Initialize is called on all atoms one by one. NB: this + * is also true for loading map templates as well, so they don't Initialize until all objects * in the map file are parsed and present in the world * * If you're creating an object at any point after SSInit has run then this proc will be * immediately be called from New. * - * mapload: This parameter is true if the atom being loaded is either being intialized during - * the Atom subsystem intialization, or if the atom is being loaded from the map template. - * If the item is being created at runtime any time after the Atom subsystem is intialized then + * mapload: This parameter is true if the atom being loaded is either being initialized during + * the Atom subsystem initialization, or if the atom is being loaded from the map template. + * If the item is being created at runtime any time after the Atom subsystem is initialized then * it's false. * * The mapload argument occupies the same position as loc when Initialize() is called by New(). @@ -97,7 +97,7 @@ * with mapload at the end of atom/New() before this proc (atom/Initialize()) is called. * * You must always call the parent of this proc, otherwise failures will occur as the item - * will not be seen as initalized (this can lead to all sorts of strange behaviour, like + * will not be seen as initialized (this can lead to all sorts of strange behaviour, like * the item being completely unclickable) * * You must not sleep in this proc, or any subprocs @@ -135,7 +135,7 @@ if(uses_integrity) atom_integrity = max_integrity - TEST_ONLY_ASSERT((!armor || istype(armor)), "[type] has an armor that contains an invalid value at intialize") + TEST_ONLY_ASSERT((!armor || istype(armor)), "[type] has an armor that contains an invalid value at initialize") // apply materials properly from the default custom_materials value // This MUST come after atom_integrity is set above, as if old materials get removed, @@ -149,14 +149,14 @@ return INITIALIZE_HINT_NORMAL /** - * Late Intialization, for code that should run after all atoms have run Intialization + * Late Initialization, for code that should run after all atoms have run Initialization * - * To have your LateIntialize proc be called, your atoms [Initalization][/atom/proc/Initialize] + * To have your LateIntialize proc be called, your atoms [Initialization][/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 + * that all atoms will actually exist in the "WORLD" at this time and that all their Initialization * code has been run */ /atom/proc/LateInitialize() diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 8874bfb7717c9..b0530b1595e3b 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -17,7 +17,7 @@ var/tk_throw_range = 10 var/mob/pulledby = null /// What language holder type to init as - var/initial_language_holder = /datum/language_holder + var/initial_language_holder = /datum/language_holder/atom_basic /// Holds all languages this mob can speak and understand VAR_PRIVATE/datum/language_holder/language_holder /// The list of factions this atom belongs to @@ -33,8 +33,10 @@ var/speech_span ///Are we moving with inertia? Mostly used as an optimization var/inertia_moving = FALSE - ///Delay in deciseconds between inertia based movement - var/inertia_move_delay = 5 + ///Multiplier for inertia based movement in space + var/inertia_move_multiplier = 1 + ///Object "weight", higher weight reduces acceleration applied to the object + var/inertia_force_weight = 1 ///The last time we pushed off something ///This is a hack to get around dumb him him me scenarios var/last_pushoff @@ -110,6 +112,9 @@ /// The pitch adjustment that this movable uses when speaking. var/pitch = 0 + /// Datum that keeps all data related to zero-g drifting and handles related code/comsigs + var/datum/drift_handler/drift_handler + /// The filter to apply to the voice when processing the TTS audio message. var/voice_filter = "" @@ -201,6 +206,7 @@ /atom/movable/Destroy(force) QDEL_NULL(language_holder) QDEL_NULL(em_block) + QDEL_NULL(drift_handler) unbuckle_all_mobs(force = TRUE) @@ -234,6 +240,10 @@ LAZYNULL(client_mobs_in_contents) + // These lists cease existing when src does, so we need to clear any lua refs to them that exist. + DREAMLUAU_CLEAR_REF_USERDATA(vis_contents) + DREAMLUAU_CLEAR_REF_USERDATA(vis_locs) + . = ..() for(var/movable_content in contents) @@ -458,7 +468,7 @@ var/static/list/not_falsey_edits = list(NAMEOF_STATIC(src, bound_width) = TRUE, NAMEOF_STATIC(src, bound_height) = TRUE) if(banned_edits[var_name]) return FALSE //PLEASE no. - if(careful_edits[var_name] && (var_value % world.icon_size) != 0) + if(careful_edits[var_name] && (var_value % ICON_SIZE_ALL) != 0) return FALSE if(not_falsey_edits[var_name] && !var_value) return FALSE @@ -772,7 +782,7 @@ if(!. && set_dir_on_move && update_dir && !face_mouse) // SKYRAT EDIT CHANGE - && !face_mouse setDir(first_step_dir) else if(!inertia_moving) - newtonian_move(direct) + newtonian_move(dir2angle(direct)) if(client_mobs_in_contents) update_parallax_contents() moving_diagonally = 0 @@ -846,8 +856,8 @@ /atom/movable/proc/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) SHOULD_CALL_PARENT(TRUE) - if (!inertia_moving && momentum_change) - newtonian_move(movement_dir) + if (!moving_diagonally && !inertia_moving && momentum_change && movement_dir) + newtonian_move(dir2angle(movement_dir)) // If we ain't moving diagonally right now, update our parallax // We don't do this all the time because diag movements should trigger one call to this, not two // Waste of cpu time, and it fucks the animate @@ -1125,7 +1135,7 @@ RESOLVE_ACTIVE_MOVEMENT var/atom/oldloc = loc - var/is_multi_tile = bound_width > world.icon_size || bound_height > world.icon_size + var/is_multi_tile = bound_width > ICON_SIZE_X || bound_height > ICON_SIZE_Y SET_ACTIVE_MOVEMENT(oldloc, NONE, TRUE, null) @@ -1148,8 +1158,8 @@ var/list/new_locs = block( destination, locate( - min(world.maxx, destination.x + ROUND_UP(bound_width / 32)), - min(world.maxy, destination.y + ROUND_UP(bound_height / 32)), + min(world.maxx, destination.x + ROUND_UP(bound_width / ICON_SIZE_X)), + min(world.maxy, destination.y + ROUND_UP(bound_height / ICON_SIZE_Y)), destination.z ) ) @@ -1269,15 +1279,19 @@ /// Only moves the object if it's under no gravity /// Accepts the direction to move, if the push should be instant, and an optional parameter to fine tune the start delay -/atom/movable/proc/newtonian_move(direction, instant = FALSE, start_delay = 0) - if(!isturf(loc) || Process_Spacemove(direction, continuous_move = TRUE)) +/// Drift force determines how much acceleration should be applied. Controlled cap, if set, will ensure that if the object was moving slower than the cap before, it cannot accelerate past the cap from this move. +/atom/movable/proc/newtonian_move(inertia_angle, instant = FALSE, start_delay = 0, drift_force = 1 NEWTONS, controlled_cap = null) + if(!isturf(loc) || Process_Spacemove(angle2dir(inertia_angle), continuous_move = TRUE)) return FALSE - if(SEND_SIGNAL(src, COMSIG_MOVABLE_NEWTONIAN_MOVE, direction, start_delay) & COMPONENT_MOVABLE_NEWTONIAN_BLOCK) - return TRUE - - AddComponent(/datum/component/drift, direction, instant, start_delay) + if (!isnull(drift_handler)) + if (drift_handler.newtonian_impulse(inertia_angle, start_delay, drift_force, controlled_cap)) + return TRUE + new /datum/drift_handler(src, inertia_angle, instant, start_delay, drift_force) + // Something went wrong and it failed to create itself, most likely we have a higher priority loop already + if (QDELETED(drift_handler)) + return FALSE return TRUE /atom/movable/set_explosion_block(explosion_block) @@ -1290,16 +1304,22 @@ /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_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 - - if(impact_signal && (impact_signal & COMPONENT_MOVABLE_IMPACT_NEVERMIND)) + var/impact_flags = pre_impact(hit_atom, throwingdatum) + if(impact_flags & COMPONENT_MOVABLE_IMPACT_NEVERMIND) 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) + if(impact_flags & COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH) + hitpush = FALSE + var/caught = hit_atom.hitby(src, throwingdatum=throwingdatum, hitpush=hitpush) + SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum, caught) + return caught + +///Called before we attempt to call hitby and send the COMSIG_MOVABLE_IMPACT signal +/atom/movable/proc/pre_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + var/impact_flags = SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_IMPACT, hit_atom, throwingdatum) + var/target_flags = SEND_SIGNAL(hit_atom, COMSIG_ATOM_PREHITBY, src, throwingdatum) + if(target_flags & COMSIG_HIT_PREVENTED) + impact_flags |= COMPONENT_MOVABLE_IMPACT_NEVERMIND + return impact_flags /atom/movable/hitby(atom/movable/hitting_atom, skipcatch, hitpush = TRUE, blocked, datum/thrownthing/throwingdatum) if(HAS_TRAIT(src, TRAIT_NO_THROW_HITPUSH)) @@ -1452,6 +1472,7 @@ return /atom/movable/proc/get_spacemove_backup() + var/atom/secondary_backup for(var/checked_range in orange(1, get_turf(src))) if(isarea(checked_range)) continue @@ -1459,12 +1480,18 @@ var/turf/turf = checked_range if(!turf.density) continue - return turf + if (get_dir(src, turf) in GLOB.cardinals) + return turf + secondary_backup = turf + continue var/atom/movable/checked_atom = checked_range if(checked_atom.density || !checked_atom.CanPass(src, get_dir(src, checked_atom))) if(checked_atom.last_pushoff == world.time) continue - return checked_atom + if (get_dir(src, checked_atom) in GLOB.cardinals) + return checked_atom + secondary_backup = checked_atom + return secondary_backup ///called when a mob resists while inside a container that is itself inside something. /atom/movable/proc/relay_container_resist_act(mob/living/user, obj/container) diff --git a/code/game/communications.dm b/code/game/communications.dm index 2c87c58b628f6..f28348cbb9117 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -110,6 +110,7 @@ GLOBAL_LIST_INIT(radiochannels, list( RADIO_CHANNEL_SUPPLY = FREQ_SUPPLY, RADIO_CHANNEL_SERVICE = FREQ_SERVICE, RADIO_CHANNEL_AI_PRIVATE = FREQ_AI_PRIVATE, + RADIO_CHANNEL_ENTERTAINMENT = FREQ_ENTERTAINMENT, RADIO_CHANNEL_CTF_RED = FREQ_CTF_RED, RADIO_CHANNEL_CTF_BLUE = FREQ_CTF_BLUE, RADIO_CHANNEL_CTF_GREEN = FREQ_CTF_GREEN, @@ -134,6 +135,7 @@ GLOBAL_LIST_INIT(reverseradiochannels, list( "[FREQ_SUPPLY]" = RADIO_CHANNEL_SUPPLY, "[FREQ_SERVICE]" = RADIO_CHANNEL_SERVICE, "[FREQ_AI_PRIVATE]" = RADIO_CHANNEL_AI_PRIVATE, + "[FREQ_ENTERTAINMENT]" = RADIO_CHANNEL_ENTERTAINMENT, "[FREQ_CTF_RED]" = RADIO_CHANNEL_CTF_RED, "[FREQ_CTF_BLUE]" = RADIO_CHANNEL_CTF_BLUE, "[FREQ_CTF_GREEN]" = RADIO_CHANNEL_CTF_GREEN, @@ -152,10 +154,11 @@ GLOBAL_LIST_INIT(radiocolors, list( RADIO_CHANNEL_SUPPLY = "#a8732b", RADIO_CHANNEL_SERVICE = "#6eaa2c", RADIO_CHANNEL_AI_PRIVATE = "#ff00ff", + RADIO_CHANNEL_ENTERTAINMENT = "#00ff99", RADIO_CHANNEL_CTF_RED = "#ff0000", RADIO_CHANNEL_CTF_BLUE = "#0000ff", RADIO_CHANNEL_CTF_GREEN = "#00ff00", - RADIO_CHANNEL_CTF_YELLOW = "#d1ba22" + RADIO_CHANNEL_CTF_YELLOW = "#d1ba22", )) /datum/radio_frequency diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index c24f6156a6134..800997d24a81e 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -28,6 +28,8 @@ var/obj/item/clothing/under/U = H.w_uniform if(!istype(U)) return FALSE + if(U.has_sensor < HAS_SENSORS) + return FALSE if(U.sensor_mode <= SENSOR_VITALS) return FALSE return TRUE @@ -173,7 +175,7 @@ Medical HUD! Basic mode needs suit sensors on. holder.icon_state = "hud[RoundHealth(src)]" var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y //for carbon suit sensors /mob/living/carbon/med_hud_set_health() @@ -186,7 +188,7 @@ Medical HUD! Basic mode needs suit sensors on. return var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) holder.icon_state = "huddead" else @@ -199,7 +201,7 @@ Medical HUD! Basic mode needs suit sensors on. var/icon/I = icon(icon, icon_state, dir) var/virus_threat = check_virus() - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(HAS_TRAIT(src, TRAIT_XENO_HOST)) holder.icon_state = "hudxeno" else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) @@ -227,7 +229,11 @@ Medical HUD! Basic mode needs suit sensors on. holder.icon_state = "hudbuff" if(null) holder.icon_state = "hudhealthy" - + if(ishuman(src)) + var/mob/living/carbon/human/crew = src + var/obj/item/clothing/under/uniform = crew.w_uniform + if(uniform && uniform.has_sensor == BROKEN_SENSORS) + holder.icon_state = "hudnosensor" /*********************************************** FAN HUDs! For identifying other fans on-sight. @@ -238,7 +244,7 @@ FAN HUDs! For identifying other fans on-sight. /mob/living/carbon/human/proc/fan_hud_set_fandom() var/image/holder = hud_list[FAN_HUD] var/icon/hud_icon = icon(icon, icon_state, dir) - holder.pixel_y = hud_icon.Height() - world.icon_size + holder.pixel_y = hud_icon.Height() - ICON_SIZE_Y holder.icon_state = "hudfan_no" var/obj/item/clothing/under/undershirt = w_uniform @@ -269,7 +275,7 @@ Security HUDs! Basic mode shows only the job. /mob/living/carbon/human/proc/sec_hud_set_ID() var/image/holder = hud_list[ID_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y var/sechud_icon_state = wear_id?.get_sechud_job_icon_state() if(!sechud_icon_state || HAS_TRAIT(src, TRAIT_UNKNOWN)) sechud_icon_state = "hudno_id" @@ -298,7 +304,7 @@ Security HUDs! Basic mode shows only the job. 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.pixel_y = IC.Height() - ICON_SIZE_Y holder.icon_state = current_implant.hud_icon_state set_hud_image_active(IMPSEC_FIRST_HUD) security_slot++ @@ -306,22 +312,22 @@ Security HUDs! Basic mode shows only the job. 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.pixel_y = IC.Height() - ICON_SIZE_Y + holder.pixel_x = initial(holder.pixel_x) + (ICON_SIZE_X / 4 - 1) //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] var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size + holder.pixel_y = IC.Height() - ICON_SIZE_Y holder.icon_state = "hud_imp_loyal" set_hud_image_active(IMPLOYAL_HUD) /mob/living/carbon/human/proc/sec_hud_set_security_status() 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 + holder.pixel_y = sec_icon.Height() - ICON_SIZE_Y if (HAS_TRAIT(src, TRAIT_ALWAYS_WANTED)) holder.icon_state = "hudwanted" @@ -398,7 +404,7 @@ Diagnostic HUDs! /mob/living/silicon/proc/diag_hud_set_health() var/image/holder = hud_list[DIAG_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(stat == DEAD) holder.icon_state = "huddiagdead" else @@ -407,7 +413,7 @@ Diagnostic HUDs! /mob/living/silicon/proc/diag_hud_set_status() var/image/holder = hud_list[DIAG_STAT_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y switch(stat) if(CONSCIOUS) holder.icon_state = "hudstat" @@ -420,7 +426,7 @@ Diagnostic HUDs! /mob/living/silicon/robot/proc/diag_hud_set_borgcell() var/image/holder = hud_list[DIAG_BATT_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(cell) var/chargelvl = (cell.charge/cell.maxcharge) holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" @@ -431,7 +437,7 @@ Diagnostic HUDs! /mob/living/silicon/robot/proc/diag_hud_set_aishell() //Shows tracking beacons on the mech var/image/holder = hud_list[DIAG_TRACK_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(!shell) //Not an AI shell holder.icon_state = null set_hud_image_inactive(DIAG_TRACK_HUD) @@ -446,7 +452,7 @@ Diagnostic HUDs! /mob/living/silicon/ai/proc/diag_hud_set_deployed() //Shows tracking beacons on the mech var/image/holder = hud_list[DIAG_TRACK_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(!deployed_shell) holder.icon_state = null set_hud_image_inactive(DIAG_TRACK_HUD) @@ -460,14 +466,14 @@ Diagnostic HUDs! /obj/vehicle/sealed/mecha/proc/diag_hud_set_mechhealth() var/image/holder = hud_list[DIAG_MECH_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y holder.icon_state = "huddiag[RoundDiagBar(atom_integrity/max_integrity)]" /obj/vehicle/sealed/mecha/proc/diag_hud_set_mechcell() var/image/holder = hud_list[DIAG_BATT_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(cell) var/chargelvl = cell.charge/cell.maxcharge holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" @@ -477,7 +483,7 @@ Diagnostic HUDs! /obj/vehicle/sealed/mecha/proc/diag_hud_set_mechstat() var/image/holder = hud_list[DIAG_STAT_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(internal_damage) holder.icon_state = "hudwarn" set_hud_image_active(DIAG_STAT_HUD) @@ -489,7 +495,7 @@ Diagnostic HUDs! /obj/vehicle/sealed/mecha/proc/diag_hud_set_mechtracking() var/image/holder = hud_list[DIAG_TRACK_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y var/new_icon_state //This var exists so that the holder's icon state is set only once in the event of multiple mech beacons. for(var/obj/item/mecha_parts/mecha_tracking/T in trackers) if(T.ai_beacon) //Beacon with AI uplink @@ -503,7 +509,7 @@ Diagnostic HUDs! /obj/vehicle/sealed/mecha/proc/diag_hud_set_camera() var/image/holder = hud_list[DIAG_CAMERA_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(chassis_camera?.is_emp_scrambled) holder.icon_state = "hudcamera_empd" return @@ -515,13 +521,13 @@ Diagnostic HUDs! /mob/living/simple_animal/bot/proc/diag_hud_set_bothealth() var/image/holder = hud_list[DIAG_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" /mob/living/simple_animal/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/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(bot_mode_flags & BOT_MODE_ON) holder.icon_state = "hudstat" else if(stat) //Generally EMP causes this @@ -532,7 +538,7 @@ Diagnostic HUDs! /mob/living/simple_animal/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation var/image/holder = hud_list[DIAG_BOT_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(client) //If the bot is player controlled, it will not be following mode logic! holder.icon_state = "hudsentient" return @@ -554,7 +560,7 @@ Diagnostic HUDs! /mob/living/simple_animal/bot/mulebot/proc/diag_hud_set_mulebotcell() var/image/holder = hud_list[DIAG_BATT_HUD] var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(cell) var/chargelvl = (cell.charge/cell.maxcharge) holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 4e7410eef6793..c048e21fedc0c 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -364,7 +364,7 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION return FALSE if(human_check) brain_target = target.current?.get_organ_slot(ORGAN_SLOT_BRAIN) - //Protect will always suceed when someone suicides + //Protect will always succeed when someone suicides return !target || (target.current && HAS_TRAIT(target.current, TRAIT_SUICIDED)) || considered_alive(target, enforce_human = human_check) || (brain_target && HAS_TRAIT(brain_target, TRAIT_SUICIDED)) /datum/objective/protect/update_explanation_text() diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 679a3182a57cd..16a6615497ce4 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -279,7 +279,7 @@ return data -/obj/machinery/pdapainter/ui_act(action, params) +/obj/machinery/pdapainter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 40e06362d9775..34b8612c2d4be 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -634,7 +634,6 @@ if(!.) return FALSE - if((interaction_flags_machine & INTERACT_MACHINE_REQUIRES_SIGHT) && user.is_blind()) to_chat(user, span_warning("This machine requires sight to use.")) return FALSE @@ -687,10 +686,11 @@ return ..() /obj/machinery/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - add_fingerprint(usr) - update_last_used(usr) - if(HAS_AI_ACCESS(usr) && !GLOB.cameranet.checkTurfVis(get_turf(src))) //We check if they're an AI specifically here, so borgs can still access off-camera stuff. - to_chat(usr, span_warning("You can no longer connect to this device!")) + var/mob/user = ui.user + add_fingerprint(user) + update_last_used(user) + if(isAI(user) && !GLOB.cameranet.checkTurfVis(get_turf(src))) //We check if they're an AI specifically here, so borgs/adminghosts/human wand can still access off-camera stuff. + to_chat(user, span_warning("You can no longer connect to this device!")) return FALSE return ..() @@ -1147,6 +1147,9 @@ if(0 to 25) . += span_warning("It's falling apart!") +/obj/machinery/examine_descriptor(mob/user) + return "machine" + /obj/machinery/examine_more(mob/user) . = ..() if(HAS_TRAIT(user, TRAIT_RESEARCH_SCANNER) && component_parts) diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 1700abb0af1ab..029f4a17ea99b 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -16,16 +16,26 @@ GLOBAL_LIST_EMPTY(announcement_systems) circuit = /obj/item/circuitboard/machine/announcement_system + ///The headset that we use for broadcasting var/obj/item/radio/headset/radio + ///The message that we send when someone is joining. var/arrival = "%PERSON has signed up as %RANK" - var/arrivalToggle = 1 + ///Whether the arrival message is sent + var/arrival_toggle = TRUE + ///The message that we send when a department head arrives. var/newhead = "%PERSON, %RANK, is the department head." - var/newheadToggle = 1 + ///Whether the newhead message is sent. + var/newhead_toggle = TRUE var/greenlight = "Light_Green" var/pinklight = "Light_Pink" var/errorlight = "Error_Red" + ///If true, researched nodes will be announced to the appropriate channels + var/announce_research_node = TRUE + /// The text that we send when announcing researched nodes. + var/node_message = "The '%NODE' techweb node has been researched" + /obj/machinery/announcement_system/Initialize(mapload) . = ..() GLOB.announcement_systems += src @@ -41,10 +51,10 @@ GLOBAL_LIST_EMPTY(announcement_systems) /obj/machinery/announcement_system/update_overlays() . = ..() - if(arrivalToggle) + if(arrival_toggle) . += greenlight - if(newheadToggle) + if(newhead_toggle) . += pinklight if(machine_stat & BROKEN) @@ -78,18 +88,25 @@ GLOBAL_LIST_EMPTY(announcement_systems) str = replacetext(str, "%RANK", "[rank]") return str -/obj/machinery/announcement_system/proc/announce(message_type, user, rank, list/channels) +/obj/machinery/announcement_system/proc/announce(message_type, target, rank, list/channels) if(!is_operational) return var/message - if(message_type == "ARRIVAL" && arrivalToggle) - message = CompileText(arrival, user, rank) - else if(message_type == "NEWHEAD" && newheadToggle) - message = CompileText(newhead, user, rank) - else if(message_type == "ARRIVALS_BROKEN") - message = "The arrivals shuttle has been damaged. Docking for repairs..." + switch(message_type) + if(AUTO_ANNOUNCE_ARRIVAL) + if(!arrival_toggle) + return + message = CompileText(arrival, target, rank) + if(AUTO_ANNOUNCE_NEWHEAD) + if(!newhead_toggle) + return + message = CompileText(newhead, target, rank) + if(AUTO_ANNOUNCE_ARRIVALS_BROKEN) + message = "The arrivals shuttle has been damaged. Docking for repairs..." + if(AUTO_ANNOUNCE_NODE) + message = replacetext(node_message, "%NODE", target) broadcast(message, channels) @@ -118,9 +135,11 @@ GLOBAL_LIST_EMPTY(announcement_systems) /obj/machinery/announcement_system/ui_data() var/list/data = list() data["arrival"] = arrival - data["arrivalToggle"] = arrivalToggle + data["arrivalToggle"] = arrival_toggle data["newhead"] = newhead - data["newheadToggle"] = newheadToggle + data["newheadToggle"] = newhead_toggle + data["node_message"] = node_message + data["node_toggle"] = announce_research_node return data /obj/machinery/announcement_system/ui_act(action, param) @@ -131,29 +150,32 @@ GLOBAL_LIST_EMPTY(announcement_systems) return if(machine_stat & BROKEN) visible_message(span_warning("[src] buzzes."), span_hear("You hear a faint buzz.")) - playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, TRUE) + playsound(src.loc, 'sound/machines/buzz/buzz-two.ogg', 50, TRUE) return switch(action) if("ArrivalText") - var/NewMessage = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN) - if(!usr.can_perform_action(src, ALLOW_SILICON_REACH)) - return - if(NewMessage) - arrival = NewMessage - usr.log_message("updated the arrivals announcement to: [NewMessage]", LOG_GAME) + var/new_message = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN) + if(new_message) + arrival = new_message + usr.log_message("updated the arrivals announcement to: [new_message]", LOG_GAME) if("NewheadText") - var/NewMessage = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN) - if(!usr.can_perform_action(src, ALLOW_SILICON_REACH)) - return - if(NewMessage) - newhead = NewMessage - usr.log_message("updated the head announcement to: [NewMessage]", LOG_GAME) - if("NewheadToggle") - newheadToggle = !newheadToggle + var/new_message = trim(html_encode(param["newText"]), MAX_MESSAGE_LEN) + if(new_message) + newhead = new_message + usr.log_message("updated the head announcement to: [new_message]", LOG_GAME) + if("node_message") + var/new_message = trim(html_encode(param["new_text"]), MAX_MESSAGE_LEN) + if(new_message) + node_message = new_message + usr.log_message("updated the researched node announcement to: [node_message]", LOG_GAME) + if("newhead_toggle") + newhead_toggle = !newhead_toggle update_appearance() - if("ArrivalToggle") - arrivalToggle = !arrivalToggle + if("arrivalToggle") + arrival_toggle = !arrival_toggle update_appearance() + if("node_toggle") + announce_research_node = !announce_research_node add_fingerprint(usr) /obj/machinery/announcement_system/attack_robot(mob/living/silicon/user) @@ -173,6 +195,11 @@ GLOBAL_LIST_EMPTY(announcement_systems) arrival = pick("#!@%ERR-34%2 CANNOT LOCAT@# JO# F*LE!", "CRITICAL ERROR 99.", "ERR)#: DA#AB@#E NOT F(*ND!") newhead = pick("OV#RL()D: \[UNKNOWN??\] DET*#CT)D!", "ER)#R - B*@ TEXT F*O(ND!", "AAS.exe is not responding. NanoOS is searching for a solution to the problem.") + node_message = pick(list( + replacetext(/obj/machinery/announcement_system::node_message, "%NODE", /datum/techweb_node/mech_clown::display_name), + "R/NT1M3 A= ANNOUN-*#nt_SY!?EM.dm, LI%£ 86: N=0DE NULL!", + "BEPIS BEPIS BEPIS", + )) /obj/machinery/announcement_system/emp_act(severity) . = ..() diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index 40670a22f44c4..72de51d034fe8 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -73,7 +73,7 @@ end_siphon() return - playsound(src, 'sound/items/poster_being_created.ogg', 100, TRUE) + playsound(src, 'sound/items/poster/poster_being_created.ogg', 100, TRUE) syphoning_credits += siphon_am synced_bank_account.adjust_money(-siphon_am) if(next_warning < world.time && prob(15)) diff --git a/code/game/machinery/barsigns.dm b/code/game/machinery/barsigns.dm index 11dc005269b7b..0f33028aa9a76 100644 --- a/code/game/machinery/barsigns.dm +++ b/code/game/machinery/barsigns.dm @@ -102,9 +102,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /obj/machinery/barsign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(src.loc, 'sound/effects/glasshit.ogg', 75, TRUE) + playsound(src.loc, 'sound/effects/glass/glasshit.ogg', 75, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/machinery/barsign/attack_ai(mob/user) return attack_hand(user) diff --git a/code/game/machinery/big_manipulator.dm b/code/game/machinery/big_manipulator.dm index d81c9d222a6c8..8d2bde3e145ae 100644 --- a/code/game/machinery/big_manipulator.dm +++ b/code/game/machinery/big_manipulator.dm @@ -58,7 +58,6 @@ return if(!manipulator_hand) create_manipulator_hand() - manipulator_hand.forceMove(get_turf(src)) /obj/machinery/big_manipulator/wrench_act(mob/living/user, obj/item/tool) . = ..() @@ -103,8 +102,9 @@ /// Creat manipulator hand effect on manipulator core. /obj/machinery/big_manipulator/proc/create_manipulator_hand() - manipulator_hand = new/obj/effect/big_manipulator_hand(get_turf(src)) + manipulator_hand = new/obj/effect/big_manipulator_hand(src) manipulator_hand.dir = take_here + vis_contents += manipulator_hand /// Check servo tier and change manipulator speed, power_use and colour. /obj/machinery/big_manipulator/proc/manipulator_lvl() diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 6f21e9303fc5a..f3760fda0319a 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -133,8 +133,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) find_and_hang_on_wall(directional = TRUE, \ custom_drop_callback = CALLBACK(src, PROC_REF(deconstruct), FALSE)) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) - /obj/machinery/camera/Destroy(force) if(can_use()) toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks @@ -235,11 +233,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) M.reset_perspective(null) to_chat(M, span_warning("The screen bursts into static!")) -/obj/machinery/camera/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/machinery/camera/on_saboteur(datum/source, disrupt_duration) + . = ..() //lasts twice as much so we don't have to constantly shoot cameras just to be S T E A L T H Y emp_act(EMP_LIGHT, reset_time = disrupt_duration * 2) - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/machinery/camera/proc/post_emp_reset(thisemp, previous_network) if(QDELETED(src)) @@ -368,7 +366,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) else visible_message(span_danger("\The [src] [change_msg]!")) - playsound(src, 'sound/items/wirecutter.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/wirecutter.ogg', 100, TRUE) update_appearance() //update Initialize() if you remove this. // now disconnect anyone using the camera diff --git a/code/game/machinery/camera/camera_construction.dm b/code/game/machinery/camera/camera_construction.dm index 15f22d02cbe96..d6988617e1f25 100644 --- a/code/game/machinery/camera/camera_construction.dm +++ b/code/game/machinery/camera/camera_construction.dm @@ -30,7 +30,7 @@ switch(camera_construction_state) if(CAMERA_STATE_WIRED) tool.play_tool_sound(src) - var/input = tgui_input_text(user, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret", "Set Network", "SS13") + var/input = tgui_input_text(user, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret", "Set Network", "SS13", max_length = MAX_NAME_LEN) if(isnull(input)) return ITEM_INTERACT_BLOCKING var/list/tempnetwork = splittext(input, ",") diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index bddc0492c3c0b..cf10c591286fb 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -7,7 +7,7 @@ circuit = /obj/item/circuitboard/machine/cell_charger pass_flags = PASSTABLE var/obj/item/stock_parts/power_store/cell/charging = null - var/charge_rate = STANDARD_CELL_RATE //SKYRAT EDIT CHANGE - ORIGINAL: 0.25 * STANDARD_CELL_RATE + var/charge_rate = 0.5 * STANDARD_CELL_RATE //SKYRAT EDIT CHANGE - ORIGINAL: 0.25 * STANDARD_CELL_RATE /* OVERWRITTEN IN modular_skyrat\modules\aesthetics\cells\cell.dm /obj/machinery/cell_charger/update_overlays() @@ -133,7 +133,7 @@ /obj/machinery/cell_charger/RefreshParts() . = ..() - charge_rate = STANDARD_CELL_RATE //SKYRAT EDIT CHANGE - ORIGINAL: 0.25 * STANDARD_CELL_RATE + charge_rate = 0.5 * STANDARD_CELL_RATE //SKYRAT EDIT CHANGE - ORIGINAL: 0.25 * STANDARD_CELL_RATE for(var/datum/stock_part/capacitor/capacitor in component_parts) charge_rate *= capacitor.tier diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm index fa0d28c999c88..d8c8a98caef77 100644 --- a/code/game/machinery/civilian_bounties.dm +++ b/code/game/machinery/civilian_bounties.dm @@ -76,11 +76,11 @@ return FALSE if(!inserted_scan_id) status_report = "Please insert your ID first." - playsound(loc, 'sound/machines/synth_no.ogg', 30 , TRUE) + playsound(loc, 'sound/machines/synth/synth_no.ogg', 30 , TRUE) return FALSE if(!inserted_scan_id.registered_account.civilian_bounty) status_report = "Please accept a new civilian bounty first." - playsound(loc, 'sound/machines/synth_no.ogg', 30 , TRUE) + playsound(loc, 'sound/machines/synth/synth_no.ogg', 30 , TRUE) return FALSE status_report = "Civilian Bounty: " var/obj/machinery/piratepad/civilian/pad = pad_ref?.resolve() @@ -89,10 +89,10 @@ continue if(inserted_scan_id.registered_account.civilian_bounty.applies_to(AM)) status_report += "Target Applicable." - playsound(loc, 'sound/machines/synth_yes.ogg', 30 , TRUE) + playsound(loc, 'sound/machines/synth/synth_yes.ogg', 30 , TRUE) return status_report += "Not Applicable." - playsound(loc, 'sound/machines/synth_no.ogg', 30 , TRUE) + playsound(loc, 'sound/machines/synth/synth_no.ogg', 30 , TRUE) /** * This fully rewrites base behavior in order to only check for bounty objects, and no other types of objects like pirate-pads do. @@ -135,7 +135,7 @@ pad.visible_message(span_notice("[pad] activates!")) flick(pad.sending_state,pad) pad.icon_state = pad.idle_state - playsound(loc, 'sound/machines/synth_yes.ogg', 30 , TRUE) + playsound(loc, 'sound/machines/synth/synth_yes.ogg', 30 , TRUE) sending = FALSE ///Here is where cargo bounties are added to the player's bank accounts, then adjusted and scaled into a civilian bounty. @@ -151,7 +151,7 @@ say("Requesting ID card has no job assignment registered!") return FALSE var/list/datum/bounty/crumbs = list(random_bounty(pot_acc.account_job.bounty_types), // We want to offer 2 bounties from their appropriate job catagories - random_bounty(pot_acc.account_job.bounty_types), // and 1 guarenteed assistant bounty if the other 2 suck. + random_bounty(pot_acc.account_job.bounty_types), // and 1 guaranteed assistant bounty if the other 2 suck. random_bounty(CIV_JOB_BASIC)) COOLDOWN_START(pot_acc, bounty_timer, (5 MINUTES) - cooldown_reduction) pot_acc.bounties = crumbs @@ -164,7 +164,7 @@ */ /obj/machinery/computer/piratepad_control/civilian/proc/pick_bounty(datum/bounty/choice) if(!inserted_scan_id || !inserted_scan_id.registered_account || !inserted_scan_id.registered_account.bounties || !inserted_scan_id.registered_account.bounties[choice]) - playsound(loc, 'sound/machines/synth_no.ogg', 40 , TRUE) + playsound(loc, 'sound/machines/synth/synth_no.ogg', 40 , TRUE) return inserted_scan_id.registered_account.civilian_bounty = inserted_scan_id.registered_account.bounties[choice] inserted_scan_id.registered_account.bounties = null @@ -203,7 +203,7 @@ return data -/obj/machinery/computer/piratepad_control/civilian/ui_act(action, params) +/obj/machinery/computer/piratepad_control/civilian/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -242,13 +242,13 @@ if(target) if(holder_item && inserting_item.InsertID(target)) - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) else id_eject(user, target) user.visible_message(span_notice("[user] inserts \the [card_to_insert] into \the [src]."), span_notice("You insert \the [card_to_insert] into \the [src].")) - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) ui_interact(user) return TRUE @@ -263,7 +263,7 @@ user.put_in_hands(target) user.visible_message(span_notice("[user] gets \the [target] from \the [src]."), \ span_notice("You get \the [target] from \the [src].")) - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) inserted_scan_id = null return TRUE diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index e37e915aff60e..2066a40b4c540 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -75,16 +75,16 @@ if(machine_stat & BROKEN) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE) else - playsound(src.loc, 'sound/effects/glasshit.ogg', 75, TRUE) + playsound(src.loc, 'sound/effects/glass/glasshit.ogg', 75, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/machinery/computer/atom_break(damage_flag) if(!circuit) //no circuit, no breaking return . = ..() if(.) - playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) + playsound(loc, 'sound/effects/glass/glassbr3.ogg', 100, TRUE) set_light(0) /obj/machinery/computer/proc/imprint_gps(gps_tag) // Currently used by the upload computers and communications console diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index ba3041cc4840c..0b28775a5b869 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -46,7 +46,7 @@ return data -/obj/machinery/computer/aifixer/ui_act(action, params) +/obj/machinery/computer/aifixer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -58,7 +58,7 @@ if("PRG_beginReconstruction") if(occupier?.health < 100) to_chat(usr, span_notice("Reconstruction in progress. This will take several minutes.")) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 25, FALSE) restoring = TRUE occupier.notify_revival("Your core files are being restored!", source = src) . = TRUE diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 97bf368d3e25e..efb3f4480330e 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -57,7 +57,7 @@ return if(active_apc) disconnect_apc() - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) apc.connect_remote_access(user) user.log_message("remotely accessed [apc] from [src].", LOG_GAME) log_activity("[auth_id] remotely accessed APC in [get_area_name(apc.area, TRUE)]") @@ -134,18 +134,18 @@ authenticated = TRUE auth_id = "[ID.registered_name] ([ID.assignment]):" log_activity("[auth_id] logged in to the terminal") - playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_on.ogg', 50, FALSE) else auth_id = "[ID.registered_name] ([ID.assignment]):" log_activity("[auth_id] attempted to log into the terminal") - playsound(src, 'sound/machines/terminal_error.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 50, FALSE) say("ID rejected, access denied!") return auth_id = "Unknown (Unknown):" log_activity("[auth_id] attempted to log into the terminal") if("log-out") log_activity("[auth_id] logged out of the terminal") - playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 50, FALSE) authenticated = FALSE auth_id = "\[NULL\]" if("toggle-logs") diff --git a/code/game/machinery/computer/arcade/_arcade.dm b/code/game/machinery/computer/arcade/_arcade.dm index 0837a6cc50908..011a1f3a05579 100644 --- a/code/game/machinery/computer/arcade/_arcade.dm +++ b/code/game/machinery/computer/arcade/_arcade.dm @@ -78,7 +78,7 @@ /obj/machinery/computer/arcade/proc/prizevend(mob/living/user, prizes = 1) SEND_SIGNAL(src, COMSIG_ARCADE_PRIZEVEND, user, prizes) if(user.mind?.get_skill_level(/datum/skill/gaming) >= SKILL_LEVEL_LEGENDARY && HAS_TRAIT(user, TRAIT_GAMERGOD)) - visible_message("[user] inputs an intense cheat code!",\ + visible_message(span_notice("[user] inputs an intense cheat code!"),\ span_notice("You hear a flurry of buttons being pressed.")) say("CODE ACTIVATED: EXTRA PRIZES.") prizes *= 2 diff --git a/code/game/machinery/computer/arcade/amputation.dm b/code/game/machinery/computer/arcade/amputation.dm index 84a02af387ad2..d20a5de2b2812 100644 --- a/code/game/machinery/computer/arcade/amputation.dm +++ b/code/game/machinery/computer/arcade/amputation.dm @@ -17,19 +17,19 @@ user.played_game() var/obj/item/bodypart/chopchop = user.get_active_hand() if(do_after(user, 5 SECONDS, target = src, extra_checks = CALLBACK(src, PROC_REF(do_they_still_have_that_hand), user, chopchop))) - playsound(src, 'sound/weapons/slice.ogg', 25, TRUE, -1) + playsound(src, 'sound/items/weapons/slice.ogg', 25, TRUE, -1) to_chat(user, span_userdanger("The guillotine drops on your arm, and the machine sucks it in!")) chopchop.dismember() qdel(chopchop) user.mind?.adjust_experience(/datum/skill/gaming, 100) user.won_game() - playsound(src, 'sound/arcade/win.ogg', 50, TRUE) + playsound(src, 'sound/machines/arcade/win.ogg', 50, TRUE) new /obj/item/stack/arcadeticket((get_turf(src)), rand(6,10)) to_chat(user, span_notice("[src] dispenses a handful of tickets!")) return if(!do_they_still_have_that_hand(user, chopchop)) to_chat(user, span_warning("The guillotine drops, but your hand seems to be gone already!")) - playsound(src, 'sound/weapons/slice.ogg', 25, TRUE, -1) + playsound(src, 'sound/items/weapons/slice.ogg', 25, TRUE, -1) else to_chat(user, span_notice("You (wisely) decide against putting your hand in the machine.")) user.lost_game() diff --git a/code/game/machinery/computer/arcade/battle.dm b/code/game/machinery/computer/arcade/battle.dm index 9733759b5caf4..169104d6c2fe3 100644 --- a/code/game/machinery/computer/arcade/battle.dm +++ b/code/game/machinery/computer/arcade/battle.dm @@ -226,7 +226,7 @@ user.mind?.adjust_experience(/datum/skill/gaming, exp_gained) user.won_game() SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("win", (obj_flags & EMAGGED ? "emagged":"normal"))) - playsound(loc, 'sound/arcade/win.ogg', 40) + playsound(loc, 'sound/machines/arcade/win.ogg', 40) if(ui_panel != UI_PANEL_WORLD_MAP) //we havent been booted to world map, we're still going. ui_panel = UI_PANEL_BETWEEN_FIGHTS @@ -250,11 +250,11 @@ ui_panel = UI_PANEL_GAMEOVER feedback_message = "GAME OVER." say("You have been crushed! GAME OVER.") - playsound(loc, 'sound/arcade/lose.ogg', 40, TRUE) + playsound(loc, 'sound/machines/arcade/lose.ogg', 40, TRUE) lose_game(user) else feedback_message = "User took [damage_taken] damage!" - playsound(loc, 'sound/arcade/hit.ogg', 40, TRUE, extrarange = -3) + playsound(loc, 'sound/machines/arcade/hit.ogg', 40, TRUE, extrarange = -3) SStgui.update_uis(src) ///Called when you attack the enemy. @@ -270,17 +270,17 @@ if(BATTLE_ARCADE_PLAYER_COUNTERATTACK) feedback_message = "User prepares to counterattack!" process_enemy_turn(user, defending_flags = BATTLE_ATTACK_FLAG_COUNTERATTACK) - playsound(loc, 'sound/arcade/mana.ogg', 40, TRUE, extrarange = -3) + playsound(loc, 'sound/machines/arcade/mana.ogg', 40, TRUE, extrarange = -3) if(BATTLE_ARCADE_PLAYER_DEFEND) feedback_message = "User pulls up their shield!" process_enemy_turn(user, defending_flags = BATTLE_ATTACK_FLAG_DEFEND) - playsound(loc, 'sound/arcade/mana.ogg', 40, TRUE, extrarange = -3) + playsound(loc, 'sound/machines/arcade/mana.ogg', 40, TRUE, extrarange = -3) if(!damage_dealt) return enemy_hp -= round(max(0, damage_dealt), 1) feedback_message = "[enemy_name] took [damage_dealt] damage!" - playsound(loc, 'sound/arcade/hit.ogg', 40, TRUE, extrarange = -3) + playsound(loc, 'sound/machines/arcade/hit.ogg', 40, TRUE, extrarange = -3) process_enemy_turn(user) ///Called when you successfully counterattack the enemy. @@ -289,7 +289,7 @@ var/damage_dealt = (rand(20, 30) * (!isnull(weapon) ? weapon.bonus_modifier : 1)) enemy_hp -= round(max(0, damage_dealt), 1) feedback_message = "User counterattacked for [damage_dealt] damage!" - playsound(loc, 'sound/arcade/boom.ogg', 40, TRUE, extrarange = -3) + playsound(loc, 'sound/machines/arcade/boom.ogg', 40, TRUE, extrarange = -3) if(enemy_hp <= 0) on_battle_win(user) SStgui.update_uis(src) @@ -334,7 +334,7 @@ enemy_hp = round(min(enemy_max_hp, enemy_hp + healed_amount), 1) enemy_mp -= round(max(0, 10), 1) feedback_message = "[enemy_name] healed for [healed_amount] health points!" - playsound(loc, 'sound/arcade/heal.ogg', 40, TRUE, extrarange = -3) + playsound(loc, 'sound/machines/arcade/heal.ogg', 40, TRUE, extrarange = -3) SStgui.update_uis(src) return if(player_current_mp >= 5) //minimum to steal @@ -342,7 +342,7 @@ player_current_mp -= round(max(0, healed_amount), 1) enemy_mp += healed_amount feedback_message = "[enemy_name] stole [healed_amount] MP from you!" - playsound(loc, 'sound/arcade/steal.ogg', 40, TRUE) + playsound(loc, 'sound/machines/arcade/steal.ogg', 40, TRUE) SStgui.update_uis(src) return //we couldn't heal ourselves or steal MP, we'll just attack instead. @@ -437,7 +437,7 @@ say("You don't have enough gold to rest!") return TRUE player_gold -= DEFAULT_ITEM_PRICE / 2 - playsound(loc, 'sound/mecha/skyfall_power_up.ogg', 40) + playsound(loc, 'sound/vehicles/mecha/skyfall_power_up.ogg', 40) player_current_hp = PLAYER_MAX_HP player_current_mp = PLAYER_MAX_MP return TRUE @@ -476,11 +476,11 @@ return TRUE if("continue_with_rest") if(prob(60)) - playsound(loc, 'sound/mecha/skyfall_power_up.ogg', 40) + playsound(loc, 'sound/vehicles/mecha/skyfall_power_up.ogg', 40) player_current_hp = PLAYER_MAX_HP player_current_mp = PLAYER_MAX_MP else - playsound(loc, 'sound/machines/defib_zap.ogg', 40) + playsound(loc, 'sound/machines/defib/defib_zap.ogg', 40) if(prob(40)) //You got robbed, and now have to go to your next fight. player_gold /= 2 diff --git a/code/game/machinery/computer/arcade/orion.dm b/code/game/machinery/computer/arcade/orion.dm index 85bebddd25c6d..a6685e4782ccd 100644 --- a/code/game/machinery/computer/arcade/orion.dm +++ b/code/game/machinery/computer/arcade/orion.dm @@ -181,7 +181,7 @@ return static_data -/obj/machinery/computer/arcade/orion_trail/ui_act(action, list/params) +/obj/machinery/computer/arcade/orion_trail/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -421,7 +421,7 @@ var/sheriff = remove_crewmember(target) //I shot the sheriff if(target) killed_crew += 1 //if there was no suspected lings, this is just plain murder - playsound(loc,'sound/weapons/gun/pistol/shot.ogg', 100, TRUE) + playsound(loc,'sound/items/weapons/gun/pistol/shot.ogg', 100, TRUE) if(!settlers.len || !alive) say("The last crewmember [sheriff], shot themselves, GAME OVER!") if(obj_flags & EMAGGED) @@ -535,7 +535,7 @@ time_for_next_level = 3 SECONDS if(2) say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") - playsound(loc, 'sound/machines/buzz-sigh.ogg', 25, TRUE) + playsound(loc, 'sound/machines/buzz/buzz-sigh.ogg', 25, TRUE) time_for_next_level = 0.36 SECONDS if(3 to INFINITY) visible_message(span_userdanger("[src] explodes!")) diff --git a/code/game/machinery/computer/arcade/orion_event.dm b/code/game/machinery/computer/arcade/orion_event.dm index 7ab2f3b98b3b0..d39766200dc52 100644 --- a/code/game/machinery/computer/arcade/orion_event.dm +++ b/code/game/machinery/computer/arcade/orion_event.dm @@ -67,8 +67,8 @@ text = "Oh no! The engine has broken down! \ You can repair it with an engine part, or you \ can make repairs for 3 days." - emag_message = "You hear some large object lurch to a halt right behind you! When you go to look, nothing's there..." - emag_sound = 'sound/effects/creak1.ogg' + emag_message = span_warning("You hear some large object lurch to a halt right behind you! When you go to look, nothing's there...") + emag_sound = 'sound/effects/creak/creak1.ogg' weight = 2 event_responses = list() @@ -170,7 +170,7 @@ /datum/orion_event/hull_part/proc/fix_floor(obj/machinery/computer/arcade/orion_trail/game) game.say("A new floor suddenly appears around [game]. What the hell?") - playsound(game, 'sound/weapons/genhit.ogg', 100, TRUE) + playsound(game, 'sound/items/weapons/genhit.ogg', 100, TRUE) for(var/turf/open/space/fixed in orange(1, game)) fixed.place_on_top(/turf/open/floor/plating) @@ -264,7 +264,7 @@ else to_chat(usr, span_userdanger("Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...")) gamer.take_bodypart_damage(30) - playsound(game, 'sound/weapons/genhit2.ogg', 100, TRUE) + playsound(game, 'sound/items/weapons/genhit2.ogg', 100, TRUE) /datum/orion_event/illness name = "Space Illness" @@ -321,7 +321,7 @@ gamer.Paralyze(60) game.say("A sudden gust of powerful wind slams [gamer] into the floor!") gamer.take_bodypart_damage(25) - playsound(game, 'sound/weapons/genhit.ogg', 100, TRUE) + playsound(game, 'sound/items/weapons/genhit.ogg', 100, TRUE) /datum/orion_event/changeling_infiltration name = "Changeling Infiltration" diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 5f3d7dd6e9e9d..3ed359a006296 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -28,7 +28,7 @@ return data -/obj/machinery/computer/atmos_alert/ui_act(action, params) +/obj/machinery/computer/atmos_alert/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/computer/atmos_computers/_atmos_control.dm b/code/game/machinery/computer/atmos_computers/_atmos_control.dm index cdd0349ac85b9..25e51738611f1 100644 --- a/code/game/machinery/computer/atmos_computers/_atmos_control.dm +++ b/code/game/machinery/computer/atmos_computers/_atmos_control.dm @@ -152,7 +152,7 @@ data["chambers"] += list(chamber_info) return data -/obj/machinery/computer/atmos_control/ui_act(action, params) +/obj/machinery/computer/atmos_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(. || !(control || reconnecting)) return diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 64955913e400b..21f5ed3db7bab 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -50,7 +50,7 @@ /obj/machinery/computer/security/ui_interact(mob/user, datum/tgui/ui) . = ..() - if(!user.can_perform_action(src, NEED_DEXTERITY|ALLOW_SILICON_REACH)) //prevents monkeys from using camera consoles + if(!user.client) //prevents errors by trying to pass clients that don't exist. return // Update UI ui = SStgui.try_update_ui(user, src, ui) @@ -67,7 +67,7 @@ concurrent_users += user_ref // Turn on the console if(length(concurrent_users) == 1 && is_living) - playsound(src, 'sound/machines/terminal_on.ogg', 25, FALSE) + playsound(src, 'sound/machines/terminal/terminal_on.ogg', 25, FALSE) use_energy(active_power_usage) // Register map objects cam_screen.display_to(user) @@ -108,7 +108,7 @@ return data -/obj/machinery/computer/security/ui_act(action, params) +/obj/machinery/computer/security/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -171,7 +171,7 @@ if(length(concurrent_users) == 0 && is_living) active_camera = null last_camera_turf = null - playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE) + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 25, FALSE) /obj/machinery/computer/security/proc/show_camera_static() cam_screen.vis_contents.Cut() diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 45bfeb9fcef36..6640f5582fa20 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -60,7 +60,7 @@ return ..() /obj/machinery/computer/camera_advanced/process() - if(!can_use(current_user) || (issilicon(current_user) && !current_user.has_unlimited_silicon_privilege)) + if(!can_use(current_user) || (issilicon(current_user) && !HAS_SILICON_ACCESS(current_user))) unset_machine() return PROCESS_KILL @@ -118,7 +118,7 @@ eyeobj.eye_user = null user.remote_control = null current_user = null - playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE) + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 25, FALSE) /obj/machinery/computer/camera_advanced/on_set_is_operational(old_value) if(!is_operational) @@ -296,7 +296,7 @@ continue T["[netcam.c_tag][netcam.can_use() ? null : " (Deactivated)"]"] = netcam - playsound(origin, 'sound/machines/terminal_prompt.ogg', 25, FALSE) + playsound(origin, 'sound/machines/terminal/terminal_prompt.ogg', 25, FALSE) var/camera = tgui_input_list(usr, "Camera to view", "Cameras", T) if(isnull(camera)) return @@ -305,12 +305,12 @@ var/obj/machinery/camera/final = T[camera] playsound(src, SFX_TERMINAL_TYPE, 25, FALSE) if(final) - playsound(origin, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) + playsound(origin, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 25, FALSE) remote_eye.setLoc(get_turf(final)) owner.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static) owner.clear_fullscreen("flash", 3) //Shorter flash than normal since it's an ~~advanced~~ console! else - playsound(origin, 'sound/machines/terminal_prompt_deny.ogg', 25, FALSE) + playsound(origin, 'sound/machines/terminal/terminal_prompt_deny.ogg', 25, FALSE) /datum/action/innate/camera_multiz_up name = "Move up a floor" diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 757c9df3d9523..2e50520f61be2 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -117,11 +117,13 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) return TRUE return authenticated -/// Skyrat Edit Start - Are we the AI? +// SKYRAT EDIT START - Are we the AI? +/// Are we the ai, or captain? /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 +// SKYRAT EDIT END /obj/machinery/computer/communications/attackby(obj/I, mob/user, params) if(isidcard(I)) @@ -143,7 +145,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) battlecruiser_called = TRUE 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) + playsound(src, 'sound/machines/terminal/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 return TRUE @@ -153,10 +155,10 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if (authenticated) authorize_access = SSid_access.get_region_access_list(list(REGION_ALL_STATION)) balloon_alert(user, "routing circuits scrambled") - playsound(src, 'sound/machines/terminal_alert.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 50, FALSE) return TRUE -/obj/machinery/computer/communications/ui_act(action, list/params) +/obj/machinery/computer/communications/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) var/static/list/approved_states = list(STATE_BUYING_SHUTTLE, STATE_CHANGING_STATUS, STATE_MAIN, STATE_MESSAGES) . = ..() @@ -166,11 +168,12 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if (!has_communication()) return + var/mob/user = ui.user . = TRUE switch (action) if ("answerMessage") - if (!authenticated(usr)) + if (!authenticated(user)) return var/answer_index = params["answer"] @@ -178,7 +181,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) // If either of these aren't numbers, then bad voodoo. if(!isnum(answer_index) || !isnum(message_index)) - message_admins("[ADMIN_LOOKUPFLW(usr)] provided an invalid index type when replying to a message on [src] [ADMIN_JMP(src)]. This should not happen. Please check with a maintainer and/or consult tgui logs.") + message_admins("[ADMIN_LOOKUPFLW(user)] provided an invalid index type when replying to a message on [src] [ADMIN_JMP(src)]. This should not happen. Please check with a maintainer and/or consult tgui logs.") CRASH("Non-numeric index provided when answering comms console message.") if (!answer_index || !message_index || answer_index < 1 || message_index < 1) @@ -189,28 +192,28 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) message.answered = answer_index message.answer_callback.InvokeAsync() if ("callShuttle") - if (!authenticated(usr) || syndicate) + if (!authenticated(user) || syndicate) return var/reason = trim(params["reason"], MAX_MESSAGE_LEN) if (length(reason) < CALL_SHUTTLE_REASON_LENGTH) return - SSshuttle.requestEvac(usr, reason) + SSshuttle.requestEvac(user, reason) post_status("shuttle") if ("changeSecurityLevel") - if (!authenticated_as_silicon_or_captain(usr)) + if (!authenticated_as_silicon_or_captain(user)) return // Check if they have - if (!HAS_SILICON_ACCESS(usr)) - var/obj/item/held_item = usr.get_active_held_item() + if (!HAS_SILICON_ACCESS(user)) + var/obj/item/held_item = user.get_active_held_item() var/obj/item/card/id/id_card = held_item?.GetID() if (!istype(id_card)) - to_chat(usr, span_warning("You need to swipe your ID!")) - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE) + to_chat(user, span_warning("You need to swipe your ID!")) + playsound(src, 'sound/machines/terminal/terminal_prompt_deny.ogg', 50, FALSE) return if (!(ACCESS_CAPTAIN in id_card.access)) - to_chat(usr, span_warning("You are not authorized to do this!")) - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE) + to_chat(user, span_warning("You are not authorized to do this!")) + playsound(src, 'sound/machines/terminal/terminal_prompt_deny.ogg', 50, FALSE) return var/new_sec_level = SSsecurity_level.text_level_to_number(params["newSecurityLevel"]) @@ -221,17 +224,17 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) SSsecurity_level.set_level(new_sec_level) - to_chat(usr, span_notice("Authorization confirmed. Modifying security level.")) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + to_chat(user, span_notice("Authorization confirmed. Modifying security level.")) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) // Only notify people if an actual change happened - usr.log_message("changed the security level to [params["newSecurityLevel"]] with [src].", LOG_GAME) - message_admins("[ADMIN_LOOKUPFLW(usr)] has changed the security level to [params["newSecurityLevel"]] with [src] at [AREACOORD(usr)].") - deadchat_broadcast(" has changed the security level to [params["newSecurityLevel"]] with [src] at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr, message_type=DEADCHAT_ANNOUNCEMENT) + user.log_message("changed the security level to [params["newSecurityLevel"]] with [src].", LOG_GAME) + message_admins("[ADMIN_LOOKUPFLW(user)] has changed the security level to [params["newSecurityLevel"]] with [src] at [AREACOORD(user)].") + deadchat_broadcast(" has changed the security level to [params["newSecurityLevel"]] with [src] at [span_name("[get_area_name(user, TRUE)]")].", span_name("[user.real_name]"), user, message_type=DEADCHAT_ANNOUNCEMENT) alert_level_tick += 1 if ("deleteMessage") - if (!authenticated(usr)) + if (!authenticated(user)) return var/message_index = text2num(params["message"]) if (!message_index) @@ -247,29 +250,29 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if (!COOLDOWN_FINISHED(src, important_action_cooldown)) return - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) var/message = trim(html_encode(params["message"]), MAX_MESSAGE_LEN) var/emagged = obj_flags & EMAGGED if (emagged) - message_syndicate(message, usr) - to_chat(usr, span_danger("SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND.")) + message_syndicate(message, user) + to_chat(user, span_danger("SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND.")) else if(syndicate) - message_syndicate(message, usr) - to_chat(usr, span_danger("Message transmitted to Syndicate Command.")) + message_syndicate(message, user) + to_chat(user, span_danger("Message transmitted to Syndicate Command.")) else - message_centcom(message, usr) - to_chat(usr, span_notice("Message transmitted to Central Command.")) + message_centcom(message, user) + to_chat(user, span_notice("Message transmitted to Central Command.")) var/associates = (emagged || syndicate) ? "the Syndicate": "CentCom" - usr.log_talk(message, LOG_SAY, tag = "message to [associates]") - deadchat_broadcast(" has messaged [associates], \"[message]\" at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr, message_type = DEADCHAT_ANNOUNCEMENT) + user.log_talk(message, LOG_SAY, tag = "message to [associates]") + deadchat_broadcast(" has messaged [associates], \"[message]\" at [span_name("[get_area_name(user, TRUE)]")].", span_name("[user.real_name]"), user, message_type = DEADCHAT_ANNOUNCEMENT) COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN) if ("purchaseShuttle") - var/can_buy_shuttles_or_fail_reason = can_buy_shuttles(usr) + var/can_buy_shuttles_or_fail_reason = can_buy_shuttles(user) if (can_buy_shuttles_or_fail_reason != TRUE) if (can_buy_shuttles_or_fail_reason != FALSE) - to_chat(usr, span_alert("[can_buy_shuttles_or_fail_reason]")) + to_chat(user, span_alert("[can_buy_shuttles_or_fail_reason]")) return var/list/shuttles = flatten_list(SSmapping.shuttle_templates) var/datum/map_template/shuttle/shuttle = locate(params["shuttle"]) in shuttles @@ -278,7 +281,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if (!can_purchase_this_shuttle(shuttle)) return if (!shuttle.prerequisites_met()) - to_chat(usr, span_alert("You have not met the requirements for purchasing this shuttle.")) + to_chat(user, span_alert("You have not met the requirements for purchasing this shuttle.")) return var/datum/bank_account/bank_account = SSeconomy.get_dep_account(ACCOUNT_CAR) if (bank_account.account_balance < shuttle.credit_cost) @@ -291,42 +294,42 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) SSshuttle.action_load(shuttle, replace = TRUE) bank_account.adjust_money(-shuttle.credit_cost) - var/purchaser_name = (obj_flags & EMAGGED) ? scramble_message_replace_chars("AUTHENTICATION FAILURE: CVE-2018-17107", 60) : usr.real_name + var/purchaser_name = (obj_flags & EMAGGED) ? scramble_message_replace_chars("AUTHENTICATION FAILURE: CVE-2018-17107", 60) : user.real_name minor_announce("[purchaser_name] has purchased [shuttle.name] for [shuttle.credit_cost] credits.[shuttle.extra_desc ? " [shuttle.extra_desc]" : ""]" , "Shuttle Purchase") - message_admins("[ADMIN_LOOKUPFLW(usr)] purchased [shuttle.name].") - log_shuttle("[key_name(usr)] has purchased [shuttle.name].") + message_admins("[ADMIN_LOOKUPFLW(user)] purchased [shuttle.name].") + log_shuttle("[key_name(user)] has purchased [shuttle.name].") SSblackbox.record_feedback("text", "shuttle_purchase", 1, shuttle.name) state = STATE_MAIN if ("recallShuttle") // AIs cannot recall the shuttle - if (!authenticated(usr) || HAS_SILICON_ACCESS(usr) || syndicate) + if (!authenticated(user) || HAS_SILICON_ACCESS(user) || syndicate) return - SSshuttle.cancelEvac(usr) + SSshuttle.cancelEvac(user) if ("requestNukeCodes") - if (!authenticated_as_non_silicon_captain(usr)) + if (!authenticated_as_non_silicon_captain(user)) return if (!COOLDOWN_FINISHED(src, important_action_cooldown)) return var/reason = trim(html_encode(params["reason"]), MAX_MESSAGE_LEN) - nuke_request(reason, usr) - to_chat(usr, span_notice("Request sent.")) - usr.log_message("has requested the nuclear codes from CentCom with reason \"[reason]\"", LOG_SAY) - priority_announce("The codes for the on-station nuclear self-destruct have been requested by [usr]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self-Destruct Codes Requested", SSstation.announcer.get_rand_report_sound()) - playsound(src, 'sound/machines/terminal_prompt.ogg', 50, FALSE) + nuke_request(reason, user) + to_chat(user, span_notice("Request sent.")) + user.log_message("has requested the nuclear codes from CentCom with reason \"[reason]\"", LOG_SAY) + priority_announce("The codes for the on-station nuclear self-destruct have been requested by [user]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self-Destruct Codes Requested", SSstation.announcer.get_rand_report_sound()) + playsound(src, 'sound/machines/terminal/terminal_prompt.ogg', 50, FALSE) COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN) if ("restoreBackupRoutingData") - if (!authenticated_as_non_silicon_captain(usr)) + if (!authenticated_as_non_silicon_captain(user)) return if (!(obj_flags & EMAGGED)) return - to_chat(usr, span_notice("Backup routing data restored.")) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + to_chat(user, span_notice("Backup routing data restored.")) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) obj_flags &= ~EMAGGED if ("sendToOtherSector") - if (!authenticated_as_non_silicon_captain(usr)) + if (!authenticated_as_non_silicon_captain(user)) return - if (!can_send_messages_to_other_sectors(usr)) + if (!can_send_messages_to_other_sectors(user)) return if (!COOLDOWN_FINISHED(src, important_action_cooldown)) return @@ -338,52 +341,52 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) GLOB.communications_controller.soft_filtering = FALSE var/list/hard_filter_result = is_ic_filtered(message) if(hard_filter_result) - tgui_alert(usr, "Your message contains: (\"[hard_filter_result[CHAT_FILTER_INDEX_WORD]]\"), which is not allowed on this server.") + tgui_alert(user, "Your message contains: (\"[hard_filter_result[CHAT_FILTER_INDEX_WORD]]\"), which is not allowed on this server.") return var/list/soft_filter_result = is_soft_ooc_filtered(message) if(soft_filter_result) - if(tgui_alert(usr,"Your message contains \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". \"[soft_filter_result[CHAT_FILTER_INDEX_REASON]]\", Are you sure you want to use it?", "Soft Blocked Word", list("Yes", "No")) != "Yes") + if(tgui_alert(user,"Your message contains \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". \"[soft_filter_result[CHAT_FILTER_INDEX_REASON]]\", Are you sure you want to use it?", "Soft Blocked Word", list("Yes", "No")) != "Yes") return - message_admins("[ADMIN_LOOKUPFLW(usr)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". They may be using a disallowed term for a cross-station message. Increasing delay time to reject.\n\n Message: \"[html_encode(message)]\"") - log_admin_private("[key_name(usr)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". They may be using a disallowed term for a cross-station message. Increasing delay time to reject.\n\n Message: \"[message]\"") + message_admins("[ADMIN_LOOKUPFLW(user)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". They may be using a disallowed term for a cross-station message. Increasing delay time to reject.\n\n Message: \"[html_encode(message)]\"") + log_admin_private("[key_name(user)] has passed the soft filter for \"[soft_filter_result[CHAT_FILTER_INDEX_WORD]]\". They may be using a disallowed term for a cross-station message. Increasing delay time to reject.\n\n Message: \"[message]\"") GLOB.communications_controller.soft_filtering = TRUE - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) var/destination = params["destination"] - usr.log_message("is about to send the following message to [destination]: [message]", LOG_GAME) + user.log_message("is about to send the following message to [destination]: [message]", LOG_GAME) to_chat( GLOB.admins, span_adminnotice( \ - "CROSS-SECTOR MESSAGE (OUTGOING): [ADMIN_LOOKUPFLW(usr)] is about to send \ + "CROSS-SECTOR MESSAGE (OUTGOING): [ADMIN_LOOKUPFLW(user)] is about to send \ the following message to [destination] (will autoapprove in [GLOB.communications_controller.soft_filtering ? DisplayTimeText(EXTENDED_CROSS_SECTOR_CANCEL_TIME) : DisplayTimeText(CROSS_SECTOR_CANCEL_TIME)]): \ REJECT
\ [html_encode(message)]" \ ) ) - send_cross_comms_message_timer = addtimer(CALLBACK(src, PROC_REF(send_cross_comms_message), usr, destination, message), GLOB.communications_controller.soft_filtering ? EXTENDED_CROSS_SECTOR_CANCEL_TIME : CROSS_SECTOR_CANCEL_TIME, TIMER_STOPPABLE) + send_cross_comms_message_timer = addtimer(CALLBACK(src, PROC_REF(send_cross_comms_message), user, destination, message), GLOB.communications_controller.soft_filtering ? EXTENDED_CROSS_SECTOR_CANCEL_TIME : CROSS_SECTOR_CANCEL_TIME, TIMER_STOPPABLE) COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN) if ("setState") - if (!authenticated(usr)) + if (!authenticated(user)) return if (!(params["state"] in approved_states)) return - if (state == STATE_BUYING_SHUTTLE && can_buy_shuttles(usr) != TRUE) + if (state == STATE_BUYING_SHUTTLE && can_buy_shuttles(user) != TRUE) return set_state(usr, params["state"]) if ("setStatusMessage") - if (!authenticated(usr)) + if (!authenticated(user)) return var/line_one = reject_bad_text(params["upperText"] || "", MAX_STATUS_LINE_LENGTH) var/line_two = reject_bad_text(params["lowerText"] || "", MAX_STATUS_LINE_LENGTH) post_status("message", line_one, line_two) last_status_display = list(line_one, line_two) if ("setStatusPicture") - if (!authenticated(usr)) + if (!authenticated(user)) return var/picture = params["picture"] if (!(picture in GLOB.status_display_approved_pictures)) @@ -402,17 +405,17 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) authenticated = FALSE authorize_access = null authorize_name = null - playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 50, FALSE) return if (obj_flags & EMAGGED) authenticated = TRUE authorize_access = SSid_access.get_region_access_list(list(REGION_ALL_STATION)) authorize_name = "Unknown" - to_chat(usr, span_warning("[src] lets out a quiet alarm as its login is overridden.")) - playsound(src, 'sound/machines/terminal_alert.ogg', 25, FALSE) - else if(isliving(usr)) - var/mob/living/L = usr + to_chat(user, span_warning("[src] lets out a quiet alarm as its login is overridden.")) + playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 25, FALSE) + else if(isliving(user)) + var/mob/living/L = user var/obj/item/card/id/id_card = L.get_idcard(hand_first = TRUE) if (check_access(id_card)) authenticated = TRUE @@ -420,40 +423,40 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) authorize_name = "[id_card.registered_name] - [id_card.assignment]" state = STATE_MAIN - playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_on.ogg', 50, FALSE) imprint_gps(gps_tag = "Encrypted Communications Channel") if ("toggleEmergencyAccess") - if(emergency_access_cooldown(usr)) //if were in cooldown, dont allow the following code + if(emergency_access_cooldown(user)) //if were in cooldown, dont allow the following code return - if (!authenticated_as_silicon_or_captain(usr)) + if (!authenticated_as_silicon_or_captain(user)) return if (GLOB.emergency_access) revoke_maint_all_access() - usr.log_message("disabled emergency maintenance access.", LOG_GAME) - message_admins("[ADMIN_LOOKUPFLW(usr)] disabled emergency maintenance access.") - deadchat_broadcast(" disabled emergency maintenance access at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr, message_type = DEADCHAT_ANNOUNCEMENT) + user.log_message("disabled emergency maintenance access.", LOG_GAME) + message_admins("[ADMIN_LOOKUPFLW(user)] disabled emergency maintenance access.") + deadchat_broadcast(" disabled emergency maintenance access at [span_name("[get_area_name(user, TRUE)]")].", span_name("[user.real_name]"), user, message_type = DEADCHAT_ANNOUNCEMENT) else make_maint_all_access() - usr.log_message("enabled emergency maintenance access.", LOG_GAME) - message_admins("[ADMIN_LOOKUPFLW(usr)] enabled emergency maintenance access.") - deadchat_broadcast(" enabled emergency maintenance access at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr, message_type = DEADCHAT_ANNOUNCEMENT) + user.log_message("enabled emergency maintenance access.", LOG_GAME) + message_admins("[ADMIN_LOOKUPFLW(user)] enabled emergency maintenance access.") + deadchat_broadcast(" enabled emergency maintenance access at [span_name("[get_area_name(user, TRUE)]")].", span_name("[user.real_name]"), user, message_type = DEADCHAT_ANNOUNCEMENT) // Request codes for the Captain's Spare ID safe. if("requestSafeCodes") if(SSjob.assigned_captain) - to_chat(usr, span_warning("There is already an assigned Captain or Acting Captain on deck!")) + to_chat(user, span_warning("There is already an assigned Captain or Acting Captain on deck!")) return if(SSjob.safe_code_timer_id) - to_chat(usr, span_warning("The safe code has already been requested and is being delivered to your station!")) + to_chat(user, span_warning("The safe code has already been requested and is being delivered to your station!")) return if(SSjob.safe_code_requested) - to_chat(usr, span_warning("The safe code has already been requested and delivered to your station!")) + to_chat(user, span_warning("The safe code has already been requested and delivered to your station!")) return if(!SSid_access.spare_id_safe_code) - to_chat(usr, span_warning("There is no safe code to deliver to your station!")) + to_chat(user, span_warning("There is no safe code to deliver to your station!")) return var/turf/pod_location = get_turf(src) @@ -462,6 +465,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 if ("callThePolice") if(!pre_911_check(usr)) @@ -487,7 +491,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) GLOB.pizza_order = pick(GLOB.pizza_names) call_911(EMERGENCY_RESPONSE_EMAG) to_chat(usr, span_notice("Thank you for choosing Dogginos, [GLOB.pizza_order]!")) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) if("toggleEngOverride") if(emergency_access_cooldown(usr)) //if were in cooldown, dont allow the following code return @@ -502,6 +506,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) 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 + /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)].")) @@ -525,7 +530,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) var/list/payload = list() - payload["sender_ckey"] = usr.ckey + payload["sender_ckey"] = user.ckey var/network_name = CONFIG_GET(string/cross_comms_network) if(network_name) payload["network"] = network_name @@ -536,9 +541,9 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) send2otherserver(html_decode(name_to_send), message, "Comms_Console", destination == "all" ? null : list(destination), additional_data = payload) //SKYRAT 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].") - deadchat_broadcast(" has sent an outgoing message to the other station(s).
", "[usr.real_name]", usr, message_type = DEADCHAT_ANNOUNCEMENT) + user.log_talk(message, LOG_SAY, tag = "message to the other server") + message_admins("[ADMIN_LOOKUPFLW(user)] has sent a message to the other server\[s].") + deadchat_broadcast(" has sent an outgoing message to the other station(s).", "[user.real_name]", user, message_type = DEADCHAT_ANNOUNCEMENT) GLOB.communications_controller.soft_filtering = FALSE // set it to false at the end of the proc to ensure that everything prior reads as intended /obj/machinery/computer/communications/ui_data(mob/user) @@ -731,7 +736,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) /// Returns TRUE if the user can buy shuttles. /// If they cannot, returns FALSE or a string detailing why. /obj/machinery/computer/communications/proc/can_buy_shuttles(mob/user) - if (!SSmapping.config.allow_custom_shuttles) + if (!SSmapping.current_map.allow_custom_shuttles) return FALSE if (HAS_SILICON_ACCESS(user)) return FALSE @@ -780,7 +785,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if(!GLOB.communications_controller.can_announce(user, is_ai)) to_chat(user, span_alert("Intercomms recharging. Please stand by.")) return - var/input = tgui_input_text(user, "Message to announce to the station crew", "Announcement") + var/input = tgui_input_text(user, "Message to announce to the station crew", "Announcement", max_length = MAX_MESSAGE_LEN) if(!input || !user.can_perform_action(src, ALLOW_SILICON_REACH)) return if(user.try_speak(input)) @@ -799,7 +804,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) var/list/players = get_communication_players() GLOB.communications_controller.make_announcement(user, is_ai, input, syndicate || (obj_flags & EMAGGED), players) - deadchat_broadcast(" made a priority announcement from [span_name("[get_area_name(usr, TRUE)]")].", span_name("[user.real_name]"), user, message_type=DEADCHAT_ANNOUNCEMENT) + deadchat_broadcast(" made a priority announcement from [span_name("[get_area_name(user, TRUE)]")].", span_name("[user.real_name]"), user, message_type=DEADCHAT_ANNOUNCEMENT) /obj/machinery/computer/communications/proc/get_communication_players() return GLOB.player_list diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 2e2d853af440f..c568c5a052a61 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -132,7 +132,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) JOB_STATION_ENGINEER = 41, JOB_ATMOSPHERIC_TECHNICIAN = 42, JOB_ENGINEERING_GUARD = 43, // SKYRAT EDIT ADDITION - JOB_TELECOMMS_SPECIALIST = 44, // SKYRAT EDIT ADDITION + JOB_TELECOMMS_SPECIALIST = 44, // SKYRAT EDIT ADDITION // 50-59: Cargo JOB_QUARTERMASTER = 50, JOB_SHAFT_MINER = 51, @@ -152,8 +152,9 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) JOB_MIME = 68, JOB_JANITOR = 69, JOB_LAWYER = 71, - JOB_BARBER = 72, // SKYRAT EDIT ADDITION + JOB_BARBER = 74, // SKYRAT EDIT ADDITION JOB_BOUNCER = 73, // SKYRAT EDIT ADDITION + JOB_PSYCHOLOGIST = 72, // 200-229: Centcom JOB_CENTCOM_ADMIRAL = 200, JOB_CENTCOM = 201, @@ -199,7 +200,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) z = T.z . = list( "sensors" = update_data(z), - "link_allowed" = HAS_AI_ACCESS(user) + "link_allowed" = HAS_AI_ACCESS(user), ) /datum/crewmonitor/proc/update_data(z) @@ -240,7 +241,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) continue // Check if their uniform is in a compatible mode. - if((uniform.has_sensor == NO_SENSORS) || !uniform.sensor_mode) //BUBBERSTATION CHANGE: 'uniform.has_sensor <= NO_SENSORS' TO 'uniform.has_sensor == NO_SENSORS' + if((uniform.has_sensor == NO_SENSORS) || !uniform.sensor_mode) stack_trace("Human without active suit sensors is in suit_sensors_list: [tracked_human] ([tracked_human.type]) ([uniform.type])") continue @@ -261,26 +262,24 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) var/trim_assignment = id_card.get_trim_assignment() if (jobs[trim_assignment] != null) entry["ijob"] = jobs[trim_assignment] + + // SKYRAT EDIT BEGIN: Checking for robotic race + if (issynthetic(tracked_human)) + entry["is_robot"] = TRUE + // SKYRAT EDIT END - //BUBBERSTATION CHANGE: EMP SENSORS - if(uniform.has_sensor == BROKEN_SENSORS) - entry["is_robot"] = rand(0,1) + // Broken sensors show garbage data + if (uniform.has_sensor == BROKEN_SENSORS) entry["life_status"] = rand(0,1) - entry["area"] = prob(80) ? pick_list(ION_FILE, "ionarea") : pick("COWGIRL","REVERSE COWGIRL","DOGGYSTYLE","MISSIONARY","69") - entry["oxydam"] = rand(0,1000) - entry["toxdam"] = rand(0,1000) - entry["burndam"] =rand(0,1000) - entry["brutedam"] = rand(0,1000) + entry["area"] = pick_list (ION_FILE, "ionarea") + entry["oxydam"] = rand(0,175) + entry["toxdam"] = rand(0,175) + entry["burndam"] = rand(0,175) + entry["brutedam"] = rand(0,175) entry["health"] = -50 entry["can_track"] = tracked_living_mob.can_track() results[++results.len] = entry continue - //BUBBERSTATION CHANGE END - - // SKYRAT EDIT BEGIN: Checking for robotic race - if (issynthetic(tracked_human)) - entry["is_robot"] = TRUE - // SKYRAT EDIT END // BUBBERSTATION EDIT BEGIN: Add DNR status // If sensors are above living tracking, set DNR state @@ -288,7 +287,19 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) entry["is_dnr"] = tracked_human.get_dnr() // BUBBERSTATION EDIT END - // Binary living/dead status + // Broken sensors show garbage data + if (uniform.has_sensor == BROKEN_SENSORS) + entry["life_status"] = rand(0,1) + entry["area"] = pick_list (ION_FILE, "ionarea") + entry["oxydam"] = rand(0,175) + entry["toxdam"] = rand(0,175) + entry["burndam"] = rand(0,175) + entry["brutedam"] = rand(0,175) + entry["health"] = -50 + entry["can_track"] = tracked_living_mob.can_track() + results[++results.len] = entry + continue + // Current status if (sensor_mode >= SENSOR_LIVING) entry["life_status"] = tracked_living_mob.stat @@ -318,7 +329,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) return results -/datum/crewmonitor/ui_act(action, params) +/datum/crewmonitor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() if(.) return diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 80f59501f0272..25f22af387f32 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -398,7 +398,7 @@ return data -/obj/machinery/computer/scan_consolenew/ui_act(action, list/params) +/obj/machinery/computer/scan_consolenew/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) var/static/list/gene_letters = list("A", "T", "C", "G"); var/static/gene_letter_count = length(gene_letters) @@ -683,7 +683,7 @@ var/datum/mutation/human/target_mutation = get_mut_by_ref(bref, search_flags) // Prompt for modifier string - var/new_sequence_input = tgui_input_text(usr, "Enter a replacement sequence", "Inherent Gene Replacement", 32, encode = FALSE) + var/new_sequence_input = tgui_input_text(usr, "Enter a replacement sequence", "Inherent Gene Replacement", max_length = 32, encode = FALSE) // Drop out if the string is the wrong length if(length(new_sequence_input) != 32) return @@ -1352,7 +1352,7 @@ // However, if this is the case, we can't make a complete injector and // this catches that edge case if(!buffer_slot["name"] || !buffer_slot["UF"] || !buffer_slot["blood_type"]) - to_chat(usr,"Genetic data corrupted, unable to create injector.") + to_chat(usr,span_warning("Genetic data corrupted, unable to create injector.")) return I = new /obj/item/dnainjector/timed(loc) @@ -1736,7 +1736,7 @@ // However, if this is the case, we can't make a complete injector and // this catches that edge case if(!buffer_slot["UF"]) - to_chat(usr,"Genetic data corrupted, unable to apply genetic data.") + to_chat(usr,span_warning("Genetic data corrupted, unable to apply genetic data.")) return FALSE COOLDOWN_START(src, enzyme_copy_timer, ENZYME_COPY_BASE_COOLDOWN) scanner_occupant.dna.unique_features = buffer_slot["UF"] diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index 7c6d1307b76b1..1502e5af50621 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -116,7 +116,7 @@ return data -/obj/machinery/computer/launchpad/ui_act(action, params) +/obj/machinery/computer/launchpad/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/computer/mechlaunchpad.dm b/code/game/machinery/computer/mechlaunchpad.dm index 46c0045fb3568..7590e690d07a6 100644 --- a/code/game/machinery/computer/mechlaunchpad.dm +++ b/code/game/machinery/computer/mechlaunchpad.dm @@ -66,7 +66,7 @@ /// A proc that makes random beeping sounds for a set amount of time, the sounds are separated by a random amount of time. /obj/machinery/computer/mechpad/proc/random_beeps(mob/user, time = 0, mintime = 0, maxtime = 1) - var/static/list/beep_sounds = list('sound/machines/terminal_prompt_confirm.ogg', 'sound/machines/terminal_prompt_deny.ogg', 'sound/machines/terminal_error.ogg', 'sound/machines/terminal_select.ogg', 'sound/machines/terminal_success.ogg') + var/static/list/beep_sounds = list('sound/machines/terminal/terminal_prompt_confirm.ogg', 'sound/machines/terminal/terminal_prompt_deny.ogg', 'sound/machines/terminal/terminal_error.ogg', 'sound/machines/terminal/terminal_select.ogg', 'sound/machines/terminal/terminal_success.ogg') var/time_to_spend = 0 var/orig_time = time while(time > 0) @@ -132,7 +132,7 @@ if(!can_launch(user, where)) return flick("mechpad-launch", connected_mechpad) - playsound(connected_mechpad, 'sound/machines/triple_beep.ogg', 50, TRUE) + playsound(connected_mechpad, 'sound/machines/beep/triple_beep.ogg', 50, TRUE) addtimer(CALLBACK(src, PROC_REF(start_launch), user, where), 1 SECONDS) /obj/machinery/computer/mechpad/proc/start_launch(mob/user, obj/machinery/mechpad/where) @@ -205,7 +205,7 @@ data["mechonly"] = current_pad.mech_only return data -/obj/machinery/computer/mechpad/ui_act(action, params) +/obj/machinery/computer/mechpad/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/computer/operating_computer.dm b/code/game/machinery/computer/operating_computer.dm index 43a18c7081f30..0354806d85ebd 100644 --- a/code/game/machinery/computer/operating_computer.dm +++ b/code/game/machinery/computer/operating_computer.dm @@ -163,7 +163,7 @@ )) return data -/obj/machinery/computer/operating/ui_act(action, params) +/obj/machinery/computer/operating/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return 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 2ba9e00d9f5fa..54ccad56f64e9 100644 --- a/code/game/machinery/computer/orders/order_computer/mining_order.dm +++ b/code/game/machinery/computer/orders/order_computer/mining_order.dm @@ -62,7 +62,7 @@ /obj/machinery/computer/order_console/mining/retrieve_points(obj/item/card/id/id_card) return round(id_card.registered_account.mining_points) -/obj/machinery/computer/order_console/mining/ui_act(action, params) +/obj/machinery/computer/order_console/mining/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(!.) flick("mining-deny", src) @@ -126,7 +126,7 @@ /obj/machinery/computer/order_console/mining/proc/check_menu(obj/item/mining_voucher/voucher, mob/living/redeemer) if(!istype(redeemer)) return FALSE - if(redeemer.incapacitated()) + if(redeemer.incapacitated) return FALSE if(QDELETED(voucher)) return FALSE diff --git a/code/game/machinery/computer/orders/order_computer/order_computer.dm b/code/game/machinery/computer/orders/order_computer/order_computer.dm index 54fda957526d2..9c4613208f6f0 100644 --- a/code/game/machinery/computer/orders/order_computer/order_computer.dm +++ b/code/game/machinery/computer/orders/order_computer/order_computer.dm @@ -124,7 +124,8 @@ GLOBAL_LIST_EMPTY(order_console_products) )) return data -/obj/machinery/computer/order_console/ui_act(action, params) +/obj/machinery/computer/order_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() if(.) return diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 4cc32401704d2..798f20c21a8f0 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -78,7 +78,7 @@ break return data -/obj/machinery/computer/pod/ui_act(action, list/params) +/obj/machinery/computer/pod/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm index 9777c1b209cdf..828d981bec644 100644 --- a/code/game/machinery/computer/prisoner/_prisoner.dm +++ b/code/game/machinery/computer/prisoner/_prisoner.dm @@ -35,7 +35,7 @@ return contained_id = new_id balloon_alert_to_viewers("id inserted") - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) /obj/machinery/computer/prisoner/proc/id_eject(mob/user) if(isnull(contained_id)) @@ -48,7 +48,7 @@ contained_id.forceMove(drop_location()) balloon_alert_to_viewers("id ejected") - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/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)) diff --git a/code/game/machinery/computer/prisoner/gulag_teleporter.dm b/code/game/machinery/computer/prisoner/gulag_teleporter.dm index 4c2f4dacde3f2..66440bb97c3fd 100644 --- a/code/game/machinery/computer/prisoner/gulag_teleporter.dm +++ b/code/game/machinery/computer/prisoner/gulag_teleporter.dm @@ -67,12 +67,12 @@ return data -/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_act(action, list/params) +/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return if(isliving(usr)) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) if(!allowed(usr)) to_chat(usr, span_warning("Access denied.")) return @@ -144,7 +144,7 @@ user.log_message("teleported [key_name(prisoner)] to the Labor Camp [COORD(beacon)] for [id_goal_not_set ? "default goal of ":""][contained_id.goal] points.", LOG_GAME) prisoner.log_message("teleported to Labor Camp [COORD(beacon)] by [key_name(user)] for [id_goal_not_set ? "default goal of ":""][contained_id.goal] points.", LOG_GAME, log_globally = FALSE) teleporter.handle_prisoner(contained_id, temporary_record) - playsound(src, 'sound/weapons/emitter.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/items/weapons/emitter.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) prisoner.forceMove(get_turf(beacon)) prisoner.Paralyze(40) // small travel dizziness to_chat(prisoner, span_warning("The teleportation makes you a little dizzy.")) diff --git a/code/game/machinery/computer/prisoner/management.dm b/code/game/machinery/computer/prisoner/management.dm index ada71bad02304..a971dce2d9d02 100644 --- a/code/game/machinery/computer/prisoner/management.dm +++ b/code/game/machinery/computer/prisoner/management.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_EMPTY_TYPED(tracked_implants, /obj/item/implant) /obj/machinery/computer/prisoner/management/ui_data(mob/user) var/list/data = list() - data["authorized"] = (authenticated && isliving(user)) || isAdminGhostAI(user) || issilicon(user) + data["authorized"] = (authenticated && isliving(user)) || HAS_SILICON_ACCESS(user) data["inserted_id"] = null if(!isnull(contained_id)) data["inserted_id"] = list( @@ -43,7 +43,7 @@ GLOBAL_LIST_EMPTY_TYPED(tracked_implants, /obj/item/implant) return data -/obj/machinery/computer/prisoner/management/ui_act(action, list/params) +/obj/machinery/computer/prisoner/management/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -52,20 +52,20 @@ GLOBAL_LIST_EMPTY_TYPED(tracked_implants, /obj/item/implant) 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) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) switch(action) if("login") if(allowed(usr)) authenticated = TRUE - playsound(src, 'sound/machines/terminal_on.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_on.ogg', 50, FALSE) else - playsound(src, 'sound/machines/terminal_error.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 50, FALSE) return TRUE if("logout") authenticated = FALSE - playsound(src, 'sound/machines/terminal_off.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 50, FALSE) return TRUE if("insert_id") diff --git a/code/game/machinery/computer/records/records.dm b/code/game/machinery/computer/records/records.dm index d53895300438d..7d01d973549b3 100644 --- a/code/game/machinery/computer/records/records.dm +++ b/code/game/machinery/computer/records/records.dm @@ -57,7 +57,7 @@ expunge_record_info(target) balloon_alert(user, "record expunged") - playsound(src, 'sound/machines/terminal_eject.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_eject.ogg', 70, TRUE) investigate_log("[key_name(user)] expunged the record of [target.name].", INVESTIGATE_RECORDS) return TRUE @@ -69,7 +69,7 @@ if("logout") balloon_alert(user, "logged out") - playsound(src, 'sound/machines/terminal_off.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 70, TRUE) authenticated = FALSE return TRUE @@ -82,14 +82,14 @@ ui.close() balloon_alert(user, "purging records...") - playsound(src, 'sound/machines/terminal_alert.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 70, TRUE) if(do_after(user, 5 SECONDS)) for(var/datum/record/crew/entry in GLOB.manifest.general) expunge_record_info(entry) balloon_alert(user, "records purged") - playsound(src, 'sound/machines/terminal_off.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 70, TRUE) investigate_log("[key_name(user)] purged all records.", INVESTIGATE_RECORDS) else balloon_alert(user, "interrupted!") @@ -139,23 +139,23 @@ if(!authenticated && !allowed(user)) balloon_alert(user, "access denied") - playsound(src, 'sound/machines/terminal_error.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 70, TRUE) return FALSE - if(mugshot.picture.psize_x > world.icon_size || mugshot.picture.psize_y > world.icon_size) + if(mugshot.picture.psize_x > ICON_SIZE_X || mugshot.picture.psize_y > ICON_SIZE_Y) balloon_alert(user, "photo too large!") - playsound(src, 'sound/machines/terminal_error.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 70, TRUE) return FALSE var/trimmed = copytext(mugshot.name, 9, MAX_NAME_LEN) // Remove "photo - " - var/name = tgui_input_text(user, "Enter the name of the new record.", "New Record", trimmed, MAX_NAME_LEN) + var/name = tgui_input_text(user, "Enter the name of the new record.", "New Record", trimmed, max_length = MAX_NAME_LEN) if(!name || !is_operational || !user.can_perform_action(src, ALLOW_SILICON_REACH) || !mugshot || QDELETED(mugshot) || QDELETED(src)) return FALSE new /datum/record/crew(name = name, character_appearance = mugshot.picture.picture_image) balloon_alert(user, "record created") - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 70, TRUE) qdel(mugshot) @@ -168,10 +168,10 @@ if(!allowed(user)) balloon_alert(user, "access denied") - playsound(src, 'sound/machines/terminal_error.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 70, TRUE) return FALSE balloon_alert(user, "logged in") - playsound(src, 'sound/machines/terminal_on.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_on.ogg', 70, TRUE) return TRUE diff --git a/code/game/machinery/computer/records/security.dm b/code/game/machinery/computer/records/security.dm index eda93ad579da8..088d3c2b390ad 100644 --- a/code/game/machinery/computer/records/security.dm +++ b/code/game/machinery/computer/records/security.dm @@ -210,13 +210,13 @@ var/input_name = strip_html_full(params["name"], MAX_CRIME_NAME_LEN) if(!input_name) to_chat(usr, span_warning("You must enter a name for the crime.")) - playsound(src, 'sound/machines/terminal_error.ogg', 75, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 75, TRUE) return FALSE var/max = CONFIG_GET(number/maxfine) if(params["fine"] > max) to_chat(usr, span_warning("The maximum fine is [max] credits.")) - playsound(src, 'sound/machines/terminal_error.ogg', 75, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 75, TRUE) return FALSE var/input_details @@ -327,7 +327,7 @@ /// Finishes printing, resets the printer. /obj/machinery/computer/records/security/proc/print_finish(obj/item/printable) printing = FALSE - playsound(src, 'sound/machines/terminal_eject.ogg', 100, TRUE) + playsound(src, 'sound/machines/terminal/terminal_eject.ogg', 100, TRUE) printable.forceMove(loc) return TRUE @@ -336,7 +336,7 @@ /obj/machinery/computer/records/security/proc/print_record(mob/user, datum/record/crew/target, list/params) if(printing) balloon_alert(user, "printer busy") - playsound(src, 'sound/machines/terminal_error.ogg', 100, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 100, TRUE) return FALSE printing = TRUE diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 0c8b6e58d6e7e..12aa1c3ce0362 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -81,7 +81,7 @@ return data -/obj/machinery/computer/robotics/ui_act(action, params) +/obj/machinery/computer/robotics/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 53fda80f4fa6a..df3cc6e26a552 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)) /// SKYRAT TODO - look into what broke this - 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 d00c5824d8bd3..8cd12610c748b 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -84,7 +84,7 @@ power_station.teleporter_hub.update_appearance() power_station.teleporter_hub.calibrated = FALSE -/obj/machinery/computer/teleporter/ui_act(action, params) +/obj/machinery/computer/teleporter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/computer/telescreen.dm b/code/game/machinery/computer/telescreen.dm index deca4ec8245e1..6021c954cabfc 100644 --- a/code/game/machinery/computer/telescreen.dm +++ b/code/game/machinery/computer/telescreen.dm @@ -40,6 +40,8 @@ circuit = null interaction_flags_atom = INTERACT_ATOM_UI_INTERACT | INTERACT_ATOM_NO_FINGERPRINT_INTERACT | INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND | INTERACT_MACHINE_REQUIRES_SIGHT frame_type = /obj/item/wallframe/telescreen/entertainment + /// Virtual radio inside of the entertainment monitor to broadcast audio + var/obj/item/radio/entertainment/speakers/speakers var/icon_state_off = "entertainment_blank" var/icon_state_on = "entertainment" @@ -53,20 +55,74 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai /obj/machinery/computer/security/telescreen/entertainment/Initialize(mapload) . = ..() - RegisterSignal(src, COMSIG_CLICK, PROC_REF(BigClick)) find_and_hang_on_wall() + speakers = new(src) -// Bypass clickchain to allow humans to use the telescreen from a distance -/obj/machinery/computer/security/telescreen/entertainment/proc/BigClick() - SIGNAL_HANDLER +/obj/machinery/computer/security/telescreen/entertainment/Destroy() + . = ..() + QDEL_NULL(speakers) - if(!network.len) - balloon_alert(usr, "nothing on TV!") - return +/obj/machinery/computer/security/telescreen/entertainment/examine(mob/user) + . = ..() + . += length(network) ? span_notice("The TV is broadcasting something!") : span_notice("There's nothing on TV.") + +/obj/machinery/computer/security/telescreen/entertainment/ui_state(mob/user) + return GLOB.always_state + +// Snowflake ui status to allow mobs to watch TV from across the room, +// but only allow adjacent mobs / tk users / silicon to change the channel +/obj/machinery/computer/security/telescreen/entertainment/ui_status(mob/living/user, datum/ui_state/state) + if(!can_watch_tv(user)) + return UI_CLOSE + if(!isliving(user)) + return isAdminGhostAI(user) ? UI_INTERACTIVE : UI_UPDATE + if(user.stat >= SOFT_CRIT) + return UI_UPDATE + + var/can_range = FALSE + if(iscarbon(user)) + var/mob/living/carbon/carbon_user = user + if(carbon_user.dna?.check_mutation(/datum/mutation/human/telekinesis) && tkMaxRangeCheck(user, src)) + can_range = TRUE + if(HAS_SILICON_ACCESS(user) || (user.interaction_range && user.interaction_range >= get_dist(user, src))) + can_range = TRUE + + if((can_range || user.CanReach(src)) && ISADVANCEDTOOLUSER(user)) + if(user.incapacitated) + return UI_UPDATE + if(!can_range && user.can_hold_items() && (user.usable_hands <= 0 || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))) + return UI_UPDATE + return UI_INTERACTIVE + return UI_UPDATE + +/obj/machinery/computer/security/telescreen/entertainment/Click(location, control, params) + if(world.time <= usr.next_click + 1) + return // just so someone can't turn an auto clicker on and spam tvs + . = ..() + if(!can_watch_tv(usr)) + return + if((!length(network) && !Adjacent(usr)) || LAZYACCESS(params2list(params), SHIFT_CLICK)) // let people examine + return + // Lets us see the tv regardless of click results INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, interact), usr) -///Sets the monitor's icon to the selected state, and says an announcement +/obj/machinery/computer/security/telescreen/entertainment/proc/can_watch_tv(mob/living/watcher) + if(!is_operational) + return FALSE + if((watcher.sight & SEE_OBJS) || HAS_SILICON_ACCESS(watcher)) + if(get_dist(watcher, src) > 7) + return FALSE + else + if(!can_see(watcher, src, 7)) + return FALSE + if(watcher.is_blind()) + return FALSE + if(!isobserver(watcher) && watcher.stat >= UNCONSCIOUS) + return FALSE + return TRUE + +/// Sets the monitor's icon to the selected state, and says an announcement /obj/machinery/computer/security/telescreen/entertainment/proc/notify(on, announcement) if(on && icon_state == icon_state_off) icon_state = icon_state_on diff --git a/code/game/machinery/computer/warrant.dm b/code/game/machinery/computer/warrant.dm index 3b73a8b75bfea..71455fc5a2e40 100644 --- a/code/game/machinery/computer/warrant.dm +++ b/code/game/machinery/computer/warrant.dm @@ -88,26 +88,26 @@ if(!isliving(user) || issilicon(user)) to_chat(user, span_warning("ACCESS DENIED")) - playsound(src, 'sound/machines/terminal_error.ogg', 100, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 100, TRUE) return FALSE var/mob/living/player = user var/obj/item/card/id/auth = player.get_idcard(TRUE) if(!auth) to_chat(user, span_warning("ACCESS DENIED: No ID card detected.")) - playsound(src, 'sound/machines/terminal_error.ogg', 100, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 100, TRUE) return FALSE var/datum/bank_account/account = auth.registered_account if(!account?.account_holder || account.account_holder == "Unassigned") to_chat(user, span_warning("ACCESS DENIED: No account linked to ID.")) - playsound(src, 'sound/machines/terminal_error.ogg', 100, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 100, TRUE) return FALSE var/amount = params["amount"] if(!amount || !isnum(amount) || amount > warrant.fine || !account.adjust_money(-amount, "Paid fine for [target.name]")) to_chat(user, span_warning("ACCESS DENIED: Invalid amount.")) - playsound(src, 'sound/machines/terminal_error.ogg', 100, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 100, TRUE) return FALSE account.bank_card_talk("You have paid [amount]cr towards [target.name]'s fine of [warrant.fine]cr.") @@ -139,7 +139,7 @@ /// Finishes printing, resets the printer. /obj/machinery/computer/warrant/proc/print_finish(obj/item/paper/bounty) printing = FALSE - playsound(src, 'sound/machines/terminal_eject.ogg', 100, TRUE) + playsound(src, 'sound/machines/terminal/terminal_eject.ogg', 100, TRUE) bounty.forceMove(loc) return TRUE @@ -148,7 +148,7 @@ /obj/machinery/computer/warrant/proc/print_bounty(mob/user, list/params) if(printing) balloon_alert(user, "printer busy") - playsound(src, 'sound/machines/terminal_error.ogg', 100, TRUE) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 100, TRUE) return FALSE var/datum/record/crew/target = locate(params["crew_ref"]) in GLOB.manifest.general diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index dea1972cea734..100e94477335c 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -51,11 +51,11 @@ return UI_CLOSE if(!allowed(user)) to_chat(user,span_warning("Error: Access Denied.")) - user.playsound_local(src, 'sound/misc/compiler-failure.ogg', 25, TRUE) + user.playsound_local(src, 'sound/machines/compiler/compiler-failure.ogg', 25, TRUE) return UI_CLOSE if(!length(music_player.songs)) to_chat(user,span_warning("Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue.")) - user.playsound_local(src, 'sound/misc/compiler-failure.ogg', 25, TRUE) + user.playsound_local(src, 'sound/machines/compiler/compiler-failure.ogg', 25, TRUE) return UI_CLOSE return ..() @@ -68,7 +68,7 @@ /obj/machinery/jukebox/ui_data(mob/user) return music_player.get_ui_data() -/obj/machinery/jukebox/ui_act(action, list/params) +/obj/machinery/jukebox/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -80,7 +80,7 @@ to_chat(usr, span_warning("Error: The device is still resetting from the last activation, \ it will be ready again in [DisplayTimeText(COOLDOWN_TIMELEFT(src, jukebox_song_cd))].")) if(COOLDOWN_FINISHED(src, jukebox_error_cd)) - playsound(src, 'sound/misc/compiler-failure.ogg', 33, TRUE) + playsound(src, 'sound/machines/compiler/compiler-failure.ogg', 33, TRUE) COOLDOWN_START(src, jukebox_error_cd, 15 SECONDS) return TRUE @@ -135,7 +135,7 @@ if(!QDELING(src)) COOLDOWN_START(src, jukebox_song_cd, 10 SECONDS) - playsound(src,'sound/machines/terminal_off.ogg',50,TRUE) + playsound(src,'sound/machines/terminal/terminal_off.ogg',50,TRUE) update_use_power(IDLE_POWER_USE) update_appearance(UPDATE_ICON_STATE) return TRUE diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index fc74b18c03c34..6b47c56267681 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -11,8 +11,7 @@ pass_flags = PASSTABLE interaction_flags_click = ALLOW_SILICON_REACH /// List of dishes the drive can hold - var/list/collectable_items = list(/obj/item/trash/waffles, // SKYRAT EDIT CHANGE - non-static list - /obj/item/trash/waffles, + var/list/collectable_items = list( // SKYRAT EDIT CHANGE - non static list /obj/item/broken_bottle, /obj/item/kitchen/fork, /obj/item/plate, @@ -23,8 +22,7 @@ /obj/item/trash/tray, ) /// List of items the drive detects as trash - var/static/list/disposable_items = list(/obj/item/trash/waffles, - /obj/item/trash/waffles, + var/static/list/disposable_items = list( /obj/item/broken_bottle, /obj/item/plate_shard, /obj/item/shard, @@ -38,6 +36,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 COOLDOWN_DECLARE(time_since_dishes) @@ -78,7 +77,7 @@ LAZYREMOVE(dish_drive_contents, dish) user.put_in_hands(dish) balloon_alert(user, "[dish] taken") - playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) + playsound(src, 'sound/items/pshoom/pshoom.ogg', 50, TRUE) flick("synthesizer_beam", src) /obj/machinery/dish_drive/wrench_act(mob/living/user, obj/item/tool) @@ -92,7 +91,7 @@ return LAZYADD(dish_drive_contents, dish) balloon_alert(user, "[dish] placed in drive") - playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) + playsound(src, 'sound/items/pshoom/pshoom.ogg', 50, TRUE) flick("synthesizer_beam", src) return else if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), dish)) @@ -126,14 +125,13 @@ do_the_dishes() if(!suction_enabled) return - for(var/obj/item/dish in view(2 + suck_distance, src)) if(is_type_in_list(dish, collectable_items) && dish.loc != src && (!dish.reagents || !dish.reagents.total_volume) && (dish.contents.len < 1)) if(dish.Adjacent(src)) LAZYADD(dish_drive_contents, dish) visible_message(span_notice("[src] beams up [dish]!")) dish.forceMove(src) - playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) + playsound(src, 'sound/items/pshoom/pshoom.ogg', 50, TRUE) flick("synthesizer_beam", src) else step_towards(dish, src) @@ -157,7 +155,7 @@ if(!bin) if(manual) visible_message(span_warning("[src] buzzes. There are no disposal bins in range!")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return var/disposed = 0 for(var/obj/item/dish in dish_drive_contents) @@ -170,8 +168,8 @@ disposed++ if (disposed) visible_message(span_notice("[src] [pick("whooshes", "bwooms", "fwooms", "pshooms")] and beams [disposed] stored item\s into the nearby [bin.name].")) - playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) - playsound(bin, 'sound/items/pshoom.ogg', 50, TRUE) + playsound(src, 'sound/items/pshoom/pshoom.ogg', 50, TRUE) + playsound(bin, 'sound/items/pshoom/pshoom.ogg', 50, TRUE) Beam(bin, icon_state = "rped_upgrade", time = 5) bin.update_appearance() flick("synthesizer_beam", src) diff --git a/code/game/machinery/dna_infuser/dna_infuser.dm b/code/game/machinery/dna_infuser/dna_infuser.dm index cc2641d32971e..961092c635b33 100644 --- a/code/game/machinery/dna_infuser/dna_infuser.dm +++ b/code/game/machinery/dna_infuser/dna_infuser.dm @@ -67,7 +67,7 @@ return if(occupant && infusing_from) if(!occupant.can_infuse(user)) - playsound(src, 'sound/machines/scanbuzz.ogg', 35, vary = TRUE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 35, vary = TRUE) return balloon_alert(user, "starting DNA infusion...") start_infuse() diff --git a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm index d24a951d76b52..bd8734643f898 100644 --- a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm +++ b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm @@ -1,6 +1,6 @@ /* * Tier one entries are unlocked at the start, and are for dna mutants that are: - * - easy to aquire (rats) + * - easy to acquire (rats) * - have a bonus for getting past a threshold * - might serve a job purpose for others (goliath) and thus should be gainable early enough */ diff --git a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_two_entries.dm b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_two_entries.dm index 5eb13847bb5a0..1620607d5f09c 100644 --- a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_two_entries.dm +++ b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_two_entries.dm @@ -1,6 +1,6 @@ /* * Tier two entries are unlocked after infusing someone/being infused and achieving a bonus, and are for dna mutants that are: - * - harder to aquire (gondolas) but not *necessarily* requiring job help + * - harder to acquire (gondolas) but not *necessarily* requiring job help * - have a bonus for getting past a threshold * * todos for the future: 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 235986cbd0ddb..670abc2d87bbf 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 @@ -75,7 +75,7 @@ desc = "EVERYONE CALM DOWN! I'm not implying anything with this entry. Are we really so surprised that felinids are humans with mixed feline DNA?" threshold_desc = DNA_INFUSION_NO_THRESHOLD qualities = list( - "oh, let me guess, you're a big fan of those japanese tourist bots", + "oh, let me guess, you're a big fan of those Japanese tourist bots", ) input_obj_or_mob = list( /mob/living/basic/pet/cat, 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 a9d2d956f7fb5..60d4465ce72ff 100644 --- a/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm @@ -22,5 +22,6 @@ color = ear_owner.hair_color ear_owner.dna.species.mutant_bodyparts -= "ears" ear_owner.update_body() + sprite_accessory_override = /datum/sprite_accessory/ears/fox */ //SKYRAT EDIT REMOVAL END 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 45d5f3ddfd997..4f8d38aa99971 100644 --- a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm @@ -130,7 +130,7 @@ . = ..() if(prob(5)) owner.emote("squeaks") - playsound(owner, 'sound/creatures/mousesqueek.ogg', 100) + playsound(owner, 'sound/mobs/non-humanoids/mouse/mousesqueek.ogg', 100) #undef RAT_ORGAN_COLOR #undef RAT_SCLERA_COLOR diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 0b325951e292c..19801a45b52f5 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -61,6 +61,11 @@ #define AIRLOCK_FRAME_OPEN "open" #define AIRLOCK_FRAME_OPENING "opening" +#define AIRLOCK_FRAME_CLOSED "closed" +#define AIRLOCK_FRAME_CLOSING "closing" +#define AIRLOCK_FRAME_OPEN "open" +#define AIRLOCK_FRAME_OPENING "opening" + #define AIRLOCK_SECURITY_NONE 0 //Normal airlock //Wires are not secured #define AIRLOCK_SECURITY_IRON 1 //Medium security airlock //There is a simple iron plate over wires (use welder) #define AIRLOCK_SECURITY_PLASTEEL_I_S 2 //Sliced inner plating (use crowbar), jumps to 0 @@ -137,12 +142,12 @@ var/normalspeed = TRUE var/cutAiWire = FALSE var/autoname = FALSE - var/doorOpen = 'sound/machines/airlock.ogg' - var/doorClose = 'sound/machines/airlockclose.ogg' - var/doorDeni = 'sound/machines/deniedbeep.ogg' // i'm thinkin' Deni's - var/boltUp = 'sound/machines/boltsup.ogg' - var/boltDown = 'sound/machines/boltsdown.ogg' - var/noPower = 'sound/machines/doorclick.ogg' + var/doorOpen = 'sound/machines/airlock/airlock.ogg' + var/doorClose = 'sound/machines/airlock/airlockclose.ogg' + var/doorDeni = 'sound/machines/beep/deniedbeep.ogg' // i'm thinkin' Deni's + var/boltUp = 'sound/machines/airlock/boltsup.ogg' + var/boltDown = 'sound/machines/airlock/boltsdown.ogg' + var/noPower = 'sound/machines/airlock/doorclick.ogg' /// What airlock assembly mineral plating was applied to var/previous_airlock = /obj/structure/door_assembly /// Material of inner filling; if its an airlock with glass, this should be set to "glass" @@ -1066,7 +1071,7 @@ to_chat(user, span_warning("[src] has already been sealed!")) return user.visible_message(span_notice("[user] begins sealing [src]."), span_notice("You begin sealing [src].")) - playsound(src, 'sound/items/jaws_pry.ogg', 30, TRUE) + playsound(src, 'sound/items/tools/jaws_pry.ogg', 30, TRUE) if(!do_after(user, airlockseal.seal_time, target = src)) return if(!density) @@ -1078,7 +1083,7 @@ if(!user.transferItemToLoc(airlockseal, src)) to_chat(user, span_warning("For some reason, you can't attach [airlockseal]!")) return - playsound(src, 'sound/machines/airlockforced.ogg', 30, TRUE) + playsound(src, 'sound/machines/airlock/airlockforced.ogg', 30, TRUE) user.visible_message(span_notice("[user] finishes sealing [src]."), span_notice("You finish sealing [src].")) seal = airlockseal modify_max_integrity(max_integrity * AIRLOCK_SEAL_MULTIPLIER) @@ -1152,12 +1157,12 @@ to_chat(user, span_warning("You don't have the dexterity to remove the seal!")) return TRUE user.visible_message(span_notice("[user] begins removing the seal from [src]."), span_notice("You begin removing [src]'s pneumatic seal.")) - playsound(src, 'sound/machines/airlockforced.ogg', 30, TRUE) + playsound(src, 'sound/machines/airlock/airlockforced.ogg', 30, TRUE) if(!do_after(user, airlockseal.unseal_time, target = src)) return TRUE if(!seal) return TRUE - playsound(src, 'sound/items/jaws_pry.ogg', 30, TRUE) + playsound(src, 'sound/items/tools/jaws_pry.ogg', 30, TRUE) airlockseal.forceMove(get_turf(user)) user.visible_message(span_notice("[user] finishes removing the seal from [src]."), span_notice("You finish removing [src]'s pneumatic seal.")) seal = null @@ -1191,10 +1196,10 @@ return TRUE /obj/machinery/door/airlock/try_to_crowbar(obj/item/I, mob/living/user, forced = FALSE) - if(I?.tool_behaviour == TOOL_CROWBAR && should_try_removing_electronics() && !operating) + if(I.tool_behaviour == TOOL_CROWBAR && should_try_removing_electronics() && !operating) user.visible_message(span_notice("[user] removes the electronics from the airlock assembly."), \ span_notice("You start to remove electronics from the airlock assembly...")) - if(I.use_tool(src, user, 40, volume=100)) + if(I.use_tool(src, user, 40, volume = 100)) deconstruct(TRUE, user) return if(seal) @@ -1217,10 +1222,10 @@ if(!prying_so_hard) var/time_to_open = 50 - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) //is it aliens or just the CE being a dick? + playsound(src, 'sound/machines/airlock/airlock_alien_prying.ogg', 100, TRUE) //is it aliens or just the CE being a dick? prying_so_hard = TRUE - if(do_after(user, time_to_open, src)) - if(check_electrified && shock(user,100)) + if(I.use_tool(src, user, time_to_open, volume = 100)) + if(check_electrified && shock(user, 100)) prying_so_hard = FALSE return open(BYPASS_DOOR_CHECKS) @@ -1397,7 +1402,7 @@ return TRUE if(BYPASS_DOOR_CHECKS) - playsound(src, 'sound/machines/airlockforced.ogg', 30, TRUE) + playsound(src, 'sound/machines/airlock/airlockforced.ogg', 30, TRUE) return TRUE else @@ -1490,7 +1495,7 @@ var/time_to_open = 5 //half a second if(hasPower()) time_to_open = 5 SECONDS //Powered airlocks take longer to open, and are loud. - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) + playsound(src, 'sound/machines/airlock/airlock_alien_prying.ogg', 100, TRUE) if(do_after(user, time_to_open, src)) @@ -1579,9 +1584,8 @@ if(!disassembled) A?.update_integrity(A.max_integrity * 0.5) - else if(obj_flags & EMAGGED) - //no electronics nothing - else + + else if(!(obj_flags & EMAGGED)) var/obj/item/electronics/airlock/ae if(!electronics) ae = new/obj/item/electronics/airlock(loc) @@ -1677,7 +1681,7 @@ data["wires"] = wire return data -/obj/machinery/door/airlock/ui_act(action, params) +/obj/machinery/door/airlock/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -2245,7 +2249,7 @@ if(!hasPower()) to_chat(user, span_notice("You begin unlocking the airlock safety mechanism...")) if(do_after(user, 15 SECONDS, target = src)) - try_to_crowbar(null, user, TRUE) + try_to_crowbar(src, user, TRUE) return TRUE else // always open from the space side @@ -2391,7 +2395,7 @@ new /obj/effect/temp_visual/cult/sac(loc) var/atom/throwtarget throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src))) - SEND_SOUND(L, sound(pick('sound/hallucinations/turn_around1.ogg','sound/hallucinations/turn_around2.ogg'),0,1,50)) + SEND_SOUND(L, sound(pick('sound/effects/hallucinations/turn_around1.ogg','sound/effects/hallucinations/turn_around2.ogg'),0,1,50)) flash_color(L, flash_color=COLOR_CULT_RED, flash_time=20) L.Paralyze(40) L.throw_at(throwtarget, 5, 1) @@ -2525,6 +2529,7 @@ set_density(TRUE) operating = FALSE return TRUE + // SKYRAT EDIT REMOVAL START - moved to code/__DEFINES/~skyrat_defines/airlock.dm /* #undef AIRLOCK_SECURITY_NONE diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 73ae0994eb517..2973579153a84 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -109,7 +109,7 @@ var/new_cycle_id = trim(params["passedCycleId"], 30) passed_cycle_id = new_cycle_id -/obj/item/electronics/airlock/ui_act(action, params) +/obj/item/electronics/airlock/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 30489173e673e..3b66f304eb3ad 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -78,7 +78,7 @@ if(!timing) return PROCESS_KILL - if(REALTIMEOFDAY - activation_time >= timer_duration) // SKYRAT EDIT CHANGE: original was world.time + if(world.time - activation_time >= timer_duration) timer_end() // open doors, reset timer, clear status screen update_content() @@ -104,7 +104,7 @@ if(machine_stat & (NOPOWER|BROKEN)) return 0 - activation_time = REALTIMEOFDAY // SKYRAT EDIT CHANGE: original was world.time + activation_time = world.time timing = TRUE begin_processing() @@ -177,7 +177,7 @@ * * seconds - Return the time in seconds if TRUE, else deciseconds. */ /obj/machinery/status_display/door_timer/proc/time_left(seconds = FALSE) - . = max(0, timer_duration + (activation_time ? activation_time - REALTIMEOFDAY : 0)) // SKYRAT EDIT CHANGE, Original: . = max(0, timer_duration + (activation_time ? activation_time - world.time : 0)) + . = max(0, timer_duration + (activation_time ? activation_time - world.time : 0)) if(seconds) . /= (1 SECONDS) @@ -218,7 +218,7 @@ break return data -/obj/machinery/status_display/door_timer/ui_act(action, params) +/obj/machinery/status_display/door_timer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -269,7 +269,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 = world.time else . = FALSE diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 2edd188c6e812..d2ca4c7a01783 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -210,7 +210,7 @@ if(!red_alert_access) return audible_message(span_notice("[src] whirr[p_s()] as [p_they()] automatically lift[p_s()] access requirements!")) - playsound(src, 'sound/machines/boltsup.ogg', 50, TRUE) + playsound(src, 'sound/machines/airlock/boltsup.ogg', 50, TRUE) /obj/machinery/door/proc/try_safety_unlock(mob/user) return FALSE @@ -334,7 +334,7 @@ return -/obj/machinery/door/proc/try_to_crowbar(obj/item/acting_object, mob/user) +/obj/machinery/door/proc/try_to_crowbar(obj/item/acting_object, mob/user, forced = FALSE) return /// Called when the user right-clicks on the door with a crowbar. @@ -399,7 +399,7 @@ switch(damage_type) if(BRUTE) if(glass) - playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE) + playsound(loc, 'sound/effects/glass/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', \ @@ -408,9 +408,9 @@ 'modular_skyrat/master_files/sound/effects/metalblock7.wav', 'modular_skyrat/master_files/sound/effects/metalblock8.wav'), 50, TRUE) //SKYRAT EDIT END else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/machinery/door/emp_act(severity) . = ..() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index dd1e37872ef8e..7c9e48af46024 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -59,8 +59,8 @@ ///Keeps track of if we're playing the alarm sound loop (as only one firelock per group should be). Used during power changes. var/is_playing_alarm = FALSE - var/knock_sound = 'sound/effects/glassknock.ogg' - var/bash_sound = 'sound/effects/glassbash.ogg' + var/knock_sound = 'sound/effects/glass/glassknock.ogg' + var/bash_sound = 'sound/effects/glass/glassbash.ogg' /datum/armor/door_firedoor @@ -282,8 +282,7 @@ if(!environment) stack_trace("We tried to check a gas_mixture that doesn't exist for its firetype, what are you DOING") return - - var/pressure = environment.return_pressure() //SKYRAT EDIT ADDITION - Micro optimisation + var/pressure = environment?.return_pressure() //SKYRAT EDIT ADDITION - Micro optimisation if(environment.temperature >= BODYTEMP_HEAT_WARNING_2 || pressure > HAZARD_HIGH_PRESSURE) //BUBBER EDIT CHANGE - FIRELOCKS return FIRELOCK_ALARM_TYPE_HOT if(environment.temperature <= BODYTEMP_COLD_WARNING_2 || pressure < HAZARD_LOW_PRESSURE) //BUBBER EDIT CHANGE - FIRELOCKS @@ -545,7 +544,7 @@ correct_state() /// We check for adjacency when using the primary attack. -/obj/machinery/door/firedoor/try_to_crowbar(obj/item/acting_object, mob/user) +/obj/machinery/door/firedoor/try_to_crowbar(obj/item/acting_object, mob/user, forced = FALSE) if(welded || operating) return diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm index bccc243381ba4..8d35f44b0d80c 100644 --- a/code/game/machinery/doors/passworddoor.dm +++ b/code/game/machinery/doors/passworddoor.dm @@ -20,7 +20,7 @@ /// Sound used upon closing. var/door_close = 'sound/machines/blastdoor.ogg' /// Sound used upon denying. - var/door_deny = 'sound/machines/buzz-sigh.ogg' + var/door_deny = 'sound/machines/buzz/buzz-sigh.ogg' /obj/machinery/door/password/voice voice_activated = TRUE @@ -103,7 +103,7 @@ playsound(src, door_deny, 30, TRUE) /obj/machinery/door/password/proc/ask_for_pass(mob/user) - var/guess = tgui_input_text(user, "Enter the password", "Password") + var/guess = tgui_input_text(user, "Enter the password", "Password", max_length = MAX_MESSAGE_LEN) if(guess == password) return TRUE return FALSE diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index a8ee8c4b58bd0..5a89dea6888d4 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -254,7 +254,7 @@ user.visible_message(span_warning("[user] begins prying open [src]."),\ span_noticealien("You begin digging your claws into [src] with all your might!"),\ span_warning("You hear groaning metal...")) - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) + playsound(src, 'sound/machines/airlock/airlock_alien_prying.ogg', 100, TRUE) var/time_to_open = 5 SECONDS if(hasPower()) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 0c897c6809666..d093cc0d3556d 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -6,7 +6,7 @@ layer = ABOVE_WINDOW_LAYER closingLayer = ABOVE_WINDOW_LAYER resistance_flags = ACID_PROOF - obj_flags = CAN_BE_HIT | BLOCKS_CONSTRUCTION_DIR + obj_flags = CAN_BE_HIT | IGNORE_DENSITY | BLOCKS_CONSTRUCTION_DIR var/base_state = "left" max_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ max_integrity at the bottom of this .dm file integrity_failure = 0 @@ -326,9 +326,9 @@ /obj/machinery/door/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(src, 'sound/effects/glasshit.ogg', 90, TRUE) + playsound(src, 'sound/effects/glass/glasshit.ogg', 90, TRUE) if(BURN) - playsound(src, 'sound/items/welder.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/machinery/door/window/on_deconstruction(disassembled) if(disassembled) diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/drone_dispenser.dm similarity index 77% rename from code/game/machinery/droneDispenser.dm rename to code/game/machinery/drone_dispenser.dm index af39257973cce..414746dcb1923 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/drone_dispenser.dm @@ -14,40 +14,58 @@ integrity_failure = 0.33 // These allow for different icons when creating custom dispensers + /// Icon string to use when the drone dispenser is not processing. var/icon_off = "off" + /// Icon string to use when the drone dispenser is processing. var/icon_on = "on" + /// Icon string to use when the drone dispenser is on cooldown. var/icon_recharging = "recharge" + /// Icon string to use when the drone dispenser is making a new shell. var/icon_creating = "make" + /// The quantity of materials used when generating a new drone shell. var/list/using_materials + /// Quantity of materials to automatically insert when the drone dispenser is spawned. var/starting_amount = 0 var/iron_cost = HALF_SHEET_MATERIAL_AMOUNT var/glass_cost = HALF_SHEET_MATERIAL_AMOUNT + /// Energy to draw when processing a new drone shell fresh. var/energy_used = 1 KILO JOULES + /// What operation the drone shell dispenser is currently in, checked in process() to determine behavior var/mode = DRONE_READY + /// Reference to world.time to use for calculation of cooldowns and production of a new drone dispenser. var/timer + /// How long should the drone dispenser be on cooldown after operating var/cooldownTime = 3 MINUTES - var/production_time = 30 + /// How long does it the drone dispenser take to generate a new drone shell? + var/production_time = 3 SECONDS //The item the dispenser will create - var/dispense_type = /obj/effect/mob_spawn/ghost_role/drone + var/list/dispense_type = list(/obj/effect/mob_spawn/ghost_role/drone) - // The maximum number of "idle" drone shells it will make before - // ceasing production. Set to 0 for infinite. + /// The maximum number of "idle" drone shells it will make before ceasing production. Set to 0 for infinite. var/maximum_idle = 3 - var/work_sound = 'sound/items/rped.ogg' + /// Sound that the drone dispnser plays when it's ready to start making more drones. + var/work_sound = 'sound/items/tools/rped.ogg' + /// Sound that the drone dispnser plays when it's created a new drone. var/create_sound = 'sound/items/deconstruct.ogg' + /// Sound that the drone dispnser plays when it's recharged it's cooldown. var/recharge_sound = 'sound/machines/ping.ogg' + /// String that's displayed for when the drone dispenser start working. var/begin_create_message = "whirs to life!" + /// String that's displayed for when the drone dispenser stops working. var/end_create_message = "dispenses a drone shell." + /// String that's displayed for when the drone dispenser finished it's cooldown. var/recharge_message = "pings." + /// String that's displayed for when the drone dispenser is still on cooldown. var/recharging_text = "It is whirring and clicking. It seems to be recharging." - + /// String that's displayed for when the drone dispenser is broken. var/break_message = "lets out a tinny alarm before falling dark." + /// Sound that the drone dispnser plays when it's broken. var/break_sound = 'sound/machines/warning-buzzer.ogg' - + /// Reference to the object's internal storage for materials. var/datum/component/material_container/materials /obj/machinery/drone_dispenser/Initialize(mapload) @@ -75,7 +93,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." - dispense_type = /obj/effect/mob_spawn/ghost_role/drone/syndrone + dispense_type = list(/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 end_create_message = "dispenses a suspicious drone shell." @@ -84,14 +102,14 @@ /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." - dispense_type = /obj/effect/mob_spawn/ghost_role/drone/syndrone/badass + dispense_type = list(/obj/effect/mob_spawn/ghost_role/drone/syndrone/badass) end_create_message = "dispenses an ominous suspicious drone shell." // I don't need your forgiveness, this is awesome. /obj/machinery/drone_dispenser/snowflake name = "snowflake drone shell dispenser" desc = "A hefty machine that, when supplied with iron and glass, will periodically create a snowflake drone shell. Does not need to be manually operated." - dispense_type = /obj/effect/mob_spawn/ghost_role/drone/snowflake + dispense_type = list(/obj/effect/mob_spawn/ghost_role/drone/snowflake) end_create_message = "dispenses a snowflake drone shell." // Those holoprojectors aren't cheap iron_cost = SHEET_MATERIAL_AMOUNT @@ -103,7 +121,7 @@ /obj/machinery/drone_dispenser/derelict name = "derelict drone shell dispenser" desc = "A rusty machine that, when supplied with iron and glass, will periodically create a derelict drone shell. Does not need to be manually operated." - dispense_type = /obj/effect/mob_spawn/ghost_role/drone/derelict + dispense_type = list(/obj/effect/mob_spawn/ghost_role/drone/derelict) end_create_message = "dispenses a derelict drone shell." iron_cost = SHEET_MATERIAL_AMOUNT * 5 glass_cost = SHEET_MATERIAL_AMOUNT * 2.5 @@ -113,7 +131,7 @@ /obj/machinery/drone_dispenser/classic name = "classic drone shell dispenser" desc = "A hefty machine that, when supplied with iron and glass, will periodically create a classic drone shell. Does not need to be manually operated." - dispense_type = /obj/effect/mob_spawn/ghost_role/drone/classic + dispense_type = list(/obj/effect/mob_spawn/ghost_role/drone/classic) end_create_message = "dispenses a classic drone shell." // An example of a custom drone dispenser. @@ -131,7 +149,7 @@ glass_cost = 0 energy_used = 0 cooldownTime = 10 //Only 1 second - hivebots are extremely weak - dispense_type = /mob/living/basic/hivebot + dispense_type = list(/mob/living/basic/hivebot) begin_create_message = "closes and begins fabricating something within." end_create_message = "slams open, revealing a hivebot!" recharge_sound = null @@ -141,7 +159,7 @@ /obj/machinery/drone_dispenser/binoculars name = "binoculars fabricator" desc = "A hefty machine that periodically creates a pair of binoculars. Really, Nanotrasen? We're getting this lazy?" - dispense_type = /obj/item/binoculars + dispense_type = list(/obj/item/binoculars) starting_amount = SHEET_MATERIAL_AMOUNT * 2.5 //Redudant maximum_idle = 1 cooldownTime = 5 SECONDS @@ -194,8 +212,9 @@ if(energy_used) use_energy(energy_used) - var/atom/A = new dispense_type(loc) - A.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) + for(var/spawnable_item as anything in dispense_type) + var/atom/spawned_atom = new spawnable_item(loc) + spawned_atom.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) if(create_sound) playsound(src, create_sound, 50, TRUE) @@ -217,9 +236,10 @@ /obj/machinery/drone_dispenser/proc/count_shells() . = 0 - for(var/a in loc) - if(istype(a, dispense_type)) - .++ + for(var/actual_shell in loc) + for(var/potential_item as anything in dispense_type) + if(istype(actual_shell, potential_item)) + .++ /obj/machinery/drone_dispenser/update_icon_state() if(machine_stat & (BROKEN|NOPOWER)) diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index be3730fd57c9f..83b1626900286 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -31,7 +31,7 @@ return TRUE /obj/machinery/door_buttons/access_button - icon = 'icons/obj/machines/wallmounts.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/wallmounts.dmi' icon_state = "access_button_standby" base_icon_state = "access_button" name = "access button" diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm index fe0ca05c760b5..18e880902963d 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 OVERRIDDEN BY AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/wallmounts.dmi' icon_state = "airlock_control_standby" base_icon_state = "airlock_control" @@ -244,7 +244,7 @@ return data -/obj/machinery/airlock_controller/ui_act(action, params) +/obj/machinery/airlock_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/fat_sucker.dm b/code/game/machinery/fat_sucker.dm index c93a0e4f7ea56..0652ab1605e5d 100644 --- a/code/game/machinery/fat_sucker.dm +++ b/code/game/machinery/fat_sucker.dm @@ -166,7 +166,7 @@ set_light(2, 1, "#ff0000") else say("Subject not fat enough.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, FALSE) overlays += "[icon_state]_red" //throw a red light icon over it, to show that it won't work /obj/machinery/fat_sucker/proc/stop() diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 94612b8c9db35..5853389ac80ff 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -108,7 +108,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26) power_change() return - playsound(src, 'sound/weapons/flash.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/flash.ogg', 100, TRUE) flick("[base_icon_state]_flash", src) flash_lighting_fx() diff --git a/code/game/machinery/flatpacker.dm b/code/game/machinery/flatpacker.dm index 182db1edc08d9..56fcc8a8ae74c 100644 --- a/code/game/machinery/flatpacker.dm +++ b/code/game/machinery/flatpacker.dm @@ -112,7 +112,7 @@ /obj/machinery/flatpacker/proc/AfterMaterialInsert(container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context) SIGNAL_HANDLER - //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it + //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benefit from it if(directly_use_energy(ROUND_UP((amount_inserted / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * 0.4 * initial(active_power_usage)))) flick_overlay_view(mutable_appearance('icons/obj/machines/lathes.dmi', "flatpacker_bar"), 1 SECONDS) @@ -268,7 +268,7 @@ if(!materials.has_materials(needed_mats, creation_efficiency)) say("Not enough materials to begin production.") return - playsound(src, 'sound/items/rped.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/rped.ogg', 50, TRUE) busy = TRUE flick_overlay_view(mutable_appearance('icons/obj/machines/lathes.dmi', "flatpacker_bar"), flatpack_time) @@ -292,7 +292,7 @@ if(isnull(amount)) return - //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it + //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benefit from it if(!directly_use_energy(ROUND_UP((amount / MAX_STACK_SIZE) * 0.4 * initial(active_power_usage)))) say("No power to dispense sheets") return @@ -401,7 +401,7 @@ new /obj/effect/temp_visual/mook_dust(loc) var/obj/machinery/new_machine = new board.build_path(loc) loc.visible_message(span_warning("[src] deploys!")) - playsound(src, 'sound/machines/terminal_eject.ogg', 70, TRUE) + playsound(src, 'sound/machines/terminal/terminal_eject.ogg', 70, TRUE) new_machine.on_construction(user) qdel(src) return ITEM_INTERACT_SUCCESS diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm index 72ac0e746f4b0..93f60beeb8a14 100644 --- a/code/game/machinery/gulag_item_reclaimer.dm +++ b/code/game/machinery/gulag_item_reclaimer.dm @@ -82,7 +82,7 @@ return data -/obj/machinery/gulag_item_reclaimer/ui_act(action, params) +/obj/machinery/gulag_item_reclaimer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index 5fa999a690e9a..4949f53adfbfe 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -76,15 +76,15 @@ for(var/obj/item/abiotic_item in carbon_occupant.held_items + carbon_occupant.get_equipped_items()) if(!(HAS_TRAIT(abiotic_item, TRAIT_NODROP))) say("Subject may not have abiotic items on.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return if(!(carbon_occupant.mob_biotypes & MOB_ORGANIC)) say("Subject is not organic.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return if(!allow_living && !(carbon_occupant.stat == DEAD || HAS_TRAIT(carbon_occupant, TRAIT_FAKEDEATH))) //I mean, the machines scanners arent advanced enough to tell you're alive say("Subject is still alive.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return return TRUE @@ -141,7 +141,7 @@ open_machine() if (!success) say("Protocol interrupted. Aborting harvest.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) else say("Subject has been successfully harvested.") playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, FALSE) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index a2d67f8be49b0..322057b18629b 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -168,7 +168,7 @@ Possible to do for anyone motivated enough: /obj/machinery/holopad/tutorial/attack_hand(mob/user, list/modifiers) if(!istype(user)) return - if(user.incapacitated() || !is_operational) + if(user.incapacitated || !is_operational) return if(replay_mode) replay_stop() @@ -308,7 +308,7 @@ Possible to do for anyone motivated enough: data["holo_calls"] += list(call_data) return data -/obj/machinery/holopad/ui_act(action, list/params) +/obj/machinery/holopad/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -522,7 +522,7 @@ Possible to do for anyone motivated enough: if(outgoing_call) holocall.Disconnect(src)//can't answer calls while calling else - playsound(src, 'sound/machines/twobeep.ogg', 100) //bring, bring! + playsound(src, 'sound/machines/beep/twobeep.ogg', 100) //bring, bring! are_ringing = TRUE if(ringing != are_ringing) @@ -677,7 +677,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ if(!isliving(owner)) return TRUE var/mob/living/user = owner - if(user.incapacitated() || !user.client) + if(user.incapacitated || !user.client) return FALSE return TRUE diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm index f8f3ed49be598..a2895f6ae9fcd 100644 --- a/code/game/machinery/hypnochair.dm +++ b/code/game/machinery/hypnochair.dm @@ -63,7 +63,7 @@ return data -/obj/machinery/hypnochair/ui_act(action, params) +/obj/machinery/hypnochair/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -91,11 +91,11 @@ /obj/machinery/hypnochair/proc/interrogate() if(!trigger_phrase) - playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, TRUE) + playsound(get_turf(src), 'sound/machines/buzz/buzz-sigh.ogg', 25, TRUE) return var/mob/living/carbon/C = occupant if(!istype(C)) - playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, TRUE) + playsound(get_turf(src), 'sound/machines/buzz/buzz-sigh.ogg', 25, TRUE) return victim = C if(C.get_eye_protection() <= 0) @@ -114,13 +114,13 @@ interrupt_interrogation() return if(SPT_PROB(5, seconds_per_tick) && !(C.get_eye_protection() > 0)) - to_chat(C, "[pick(\ + to_chat(C, span_hypnophrase(pick(\ "...blue... red... green... blue, red, green, blueredgreen[span_small("blueredgreen")]",\ "...pretty colors...",\ "...you keep hearing words, but you can't seem to understand them...",\ "...so peaceful...",\ "...an annoying buzz in your ears..."\ - )]") + ))) use_energy(active_power_usage * seconds_per_tick) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 4ac2a177e76bc..437c2dbd168a6 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -106,7 +106,7 @@ .["containerMaxVolume"] = drip_reagents.maximum_volume .["containerReagentColor"] = mix_color_from_reagents(drip_reagents.reagent_list) -/obj/machinery/iv_drip/ui_act(action, params) +/obj/machinery/iv_drip/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -256,7 +256,7 @@ // If the human is losing too much blood, beep. if(attached_mob.blood_volume < BLOOD_VOLUME_SAFE && prob(5)) audible_message(span_hear("[src] beeps loudly.")) - playsound(loc, 'sound/machines/twobeep_high.ogg', 50, TRUE) + playsound(loc, 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) var/atom/movable/target = use_internal_storage ? src : reagent_container attached_mob.transfer_blood_to(target, amount) update_appearance(UPDATE_ICON) @@ -322,7 +322,7 @@ return if(!usr.can_perform_action(src)) return - if(usr.incapacitated()) + if(usr.incapacitated) return if(reagent_container) if(attached) @@ -340,7 +340,7 @@ if(!isliving(usr)) to_chat(usr, span_warning("You can't do that!")) return - if(!usr.can_perform_action(src) || usr.incapacitated()) + if(!usr.can_perform_action(src) || usr.incapacitated) return if(inject_only) mode = IV_INJECTING diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 8733ca548632e..c2fb218d50a33 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -181,11 +181,11 @@ indicator_icon = "launchpad_pull" update_indicator() - playsound(get_turf(src), 'sound/weapons/flash.ogg', 25, TRUE) + playsound(get_turf(src), 'sound/items/weapons/flash.ogg', 25, TRUE) teleporting = TRUE if(!hidden) - playsound(target, 'sound/weapons/flash.ogg', 25, TRUE) + playsound(target, 'sound/items/weapons/flash.ogg', 25, TRUE) var/datum/effect_system/spark_spread/quantum/spark_system = new /datum/effect_system/spark_spread/quantum() spark_system.set_up(5, TRUE, target) spark_system.start() @@ -203,7 +203,7 @@ if(!hidden) // Takes twice as long to make sure it properly fades out. Beam(target, icon_state = teleport_beam, time = BEAM_FADE_TIME*2, beam_type = /obj/effect/ebeam/launchpad) - playsound(target, 'sound/weapons/emitter2.ogg', 25, TRUE) + playsound(target, 'sound/items/weapons/emitter2.ogg', 25, TRUE) // use a lot of power use_energy(active_power_usage) @@ -216,7 +216,7 @@ source = dest dest = target - playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, TRUE) + playsound(get_turf(src), 'sound/items/weapons/emitter2.ogg', 25, TRUE) var/first = TRUE for(var/atom/movable/ROI in source) if(ROI == src) @@ -417,7 +417,7 @@ return pad.doteleport(user, sending) -/obj/item/launchpad_remote/ui_act(action, params) +/obj/item/launchpad_remote/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 731b8f3a085ec..c8d0249fca02d 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 OVERRIDDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/wallmounts.dmi' icon_state = "light-nopower" base_icon_state = "light" desc = "Make dark." diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index de676a8815a09..834d7115b0418 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -149,7 +149,7 @@ if(user.combat_mode) //so we can hit the machine return ..() -/obj/machinery/limbgrower/ui_act(action, list/params) +/obj/machinery/limbgrower/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -178,7 +178,7 @@ consumed_reagents_list[reagent_id] *= production_coefficient if(!reagents.has_reagent(reagent_id, consumed_reagents_list[reagent_id])) audible_message(span_notice("[src] buzzes.")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) return power = max(active_power_usage, (power + consumed_reagents_list[reagent_id])) @@ -207,7 +207,7 @@ for(var/reagent_id in modified_consumed_reagents_list) if(!reagents.has_reagent(reagent_id, modified_consumed_reagents_list[reagent_id])) audible_message(span_notice("The [src] buzzes.")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) break reagents.remove_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) diff --git a/code/game/machinery/modular_shield.dm b/code/game/machinery/modular_shield.dm index 5c621be756ddf..b4fa6bed17bb0 100644 --- a/code/game/machinery/modular_shield.dm +++ b/code/game/machinery/modular_shield.dm @@ -276,7 +276,7 @@ data["initiating_field"] = initiating return data -/obj/machinery/modular_shield_generator/ui_act(action, params) +/obj/machinery/modular_shield_generator/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index c15421cbf5abb..98149a8232223 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -181,16 +181,17 @@ data["static_controls"] = static_controls return data -/obj/machinery/navbeacon/ui_act(action, params) +/obj/machinery/navbeacon/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return + var/mob/user = ui.user - if(action == "lock" && allowed(usr)) + if(action == "lock" && allowed(user)) controls_locked = !controls_locked return TRUE - if(controls_locked && !HAS_SILICON_ACCESS(usr)) + if(controls_locked && !HAS_SILICON_ACCESS(user)) return switch(action) @@ -210,7 +211,7 @@ toggle_code(NAVBEACON_DELIVERY_MODE) return TRUE if("set_location") - var/input_text = tgui_input_text(usr, "Enter the beacon's location tag", "Beacon Location", location, 20) + var/input_text = tgui_input_text(user, "Enter the beacon's location tag", "Beacon Location", location, max_length = 20) if (!input_text || location == input_text) return glob_lists_deregister() @@ -219,7 +220,7 @@ return TRUE if("set_patrol_next") var/next_patrol = codes[NAVBEACON_PATROL_NEXT] - var/input_text = tgui_input_text(usr, "Enter the tag of the next patrol location", "Beacon Location", next_patrol, 20) + var/input_text = tgui_input_text(user, "Enter the tag of the next patrol location", "Beacon Location", next_patrol, max_length = 20) if (!input_text || location == input_text) return codes[NAVBEACON_PATROL_NEXT] = input_text diff --git a/code/game/machinery/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm index 7f3d8ea806f46..18c3d9434d869 100644 --- a/code/game/machinery/newscaster/newscaster_machine.dm +++ b/code/game/machinery/newscaster/newscaster_machine.dm @@ -64,7 +64,7 @@ acid = 30 /obj/machinery/newscaster/pai/ui_state(mob/user) - return GLOB.reverse_contained_state + return GLOB.deep_inventory_state MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) @@ -264,7 +264,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) return data -/obj/machinery/newscaster/ui_act(action, params) +/obj/machinery/newscaster/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -405,14 +405,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) return TRUE if("setCriminalName") - var/temp_name = tgui_input_text(usr, "Write the Criminal's Name", "Warrent Alert Handler", "John Doe", MAX_NAME_LEN, multiline = FALSE) + var/temp_name = tgui_input_text(usr, "Write the Criminal's Name", "Warrent Alert Handler", "John Doe", max_length = MAX_NAME_LEN, multiline = FALSE) if(!temp_name) return TRUE criminal_name = temp_name return TRUE if("setCrimeData") - var/temp_desc = tgui_input_text(usr, "Write the Criminal's Crimes", "Warrent Alert Handler", "Unknown", MAX_BROADCAST_LEN, multiline = TRUE) + var/temp_desc = tgui_input_text(usr, "Write the Criminal's Crimes", "Warrent Alert Handler", "Unknown", max_length = MAX_BROADCAST_LEN, multiline = TRUE) if(!temp_desc) return TRUE crime_description = temp_desc @@ -529,9 +529,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) if(machine_stat & BROKEN) playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, TRUE) else - playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE) + playsound(loc, 'sound/effects/glass/glasshit.ogg', 90, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/machinery/newscaster/on_deconstruction(disassembled) @@ -542,7 +542,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) /obj/machinery/newscaster/atom_break(damage_flag) . = ..() if(.) - playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) + playsound(loc, 'sound/effects/glass/glassbr3.ogg', 100, TRUE) /obj/machinery/newscaster/attack_paw(mob/living/user, list/modifiers) @@ -623,7 +623,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) if(channel) if(update_alert) say("Breaking news from [channel]!") - playsound(loc, 'sound/machines/twobeep_high.ogg', 75, TRUE) + playsound(loc, 'sound/machines/beep/twobeep_high.ogg', 75, TRUE) alert = TRUE update_appearance() addtimer(CALLBACK(src, PROC_REF(remove_alert)), ALERT_DELAY, TIMER_UNIQUE|TIMER_OVERRIDE) @@ -703,7 +703,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) if(channel_name == potential_channel.channel_ID) current_channel = potential_channel break - var/temp_message = tgui_input_text(usr, "Write your Feed story", "Network Channel Handler", feed_channel_message, multiline = TRUE) + var/temp_message = tgui_input_text(usr, "Write your Feed story", "Network Channel Handler", feed_channel_message, max_length = MAX_BROADCAST_LEN, multiline = TRUE) if(length(temp_message) <= 1) return TRUE if(temp_message) @@ -745,10 +745,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) */ /obj/machinery/newscaster/proc/delete_bounty_request() if(!active_request || !current_user) - playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 20, TRUE) return TRUE if(active_request?.owner != current_user.account_holder) - playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 20, TRUE) return TRUE say("Deleted current request.") GLOB.request_list.Remove(active_request) @@ -759,7 +759,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) */ /obj/machinery/newscaster/proc/create_bounty() if(!current_user || !bounty_text) - playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 20, TRUE) return TRUE for(var/datum/station_request/iterated_station_request as anything in GLOB.request_list) if(iterated_station_request.req_number == current_user.account_id) @@ -779,11 +779,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) say("No ID detected.") return TRUE if(current_user.account_holder == active_request.owner) - playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 20, TRUE) return TRUE for(var/new_apply in active_request?.applicants) if(current_user.account_holder == active_request?.applicants[new_apply]) - playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 20, TRUE) return TRUE active_request.applicants += list(current_user) @@ -794,7 +794,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) if(!current_user) return TRUE if(!current_user.has_money(active_request.value) || (current_user.account_holder != active_request.owner)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return TRUE payment_target.transfer_money(current_user, active_request.value, "Bounty Request") say("Paid out [active_request.value] credits.") diff --git a/code/game/machinery/newscaster/newspaper.dm b/code/game/machinery/newscaster/newspaper.dm index c381f2f506304..6bc1e6c77ff14 100644 --- a/code/game/machinery/newscaster/newspaper.dm +++ b/code/game/machinery/newscaster/newspaper.dm @@ -84,7 +84,7 @@ if(scribble_page == current_page) user.balloon_alert(user, "already scribbled!") return - var/new_scribble_text = tgui_input_text(user, "What do you want to scribble?", "Write something") + var/new_scribble_text = tgui_input_text(user, "What do you want to scribble?", "Write something", max_length = MAX_MESSAGE_LEN) if(isnull(new_scribble_text)) return add_fingerprint(user) diff --git a/code/game/machinery/photobooth.dm b/code/game/machinery/photobooth.dm index 321ae7efd6e76..d1244bcc85d47 100644 --- a/code/game/machinery/photobooth.dm +++ b/code/game/machinery/photobooth.dm @@ -130,7 +130,7 @@ if(obj_flags & EMAGGED) var/mob/living/carbon/carbon_occupant = occupant for(var/i in 1 to 5) //play a ton of sounds to mimic it blinding you - playsound(src, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, TRUE) + playsound(src, pick('sound/items/polaroid/polaroid1.ogg', 'sound/items/polaroid/polaroid2.ogg'), 75, TRUE) if(carbon_occupant) carbon_occupant.flash_act(5) sleep(0.2 SECONDS) @@ -141,12 +141,12 @@ if(!do_after(occupant, 2 SECONDS, src, timed_action_flags = IGNORE_HELD_ITEM)) //gives them time to put their hand items away. taking_pictures = FALSE return - playsound(src, 'sound/items/polaroid1.ogg', 75, TRUE) + playsound(src, 'sound/items/polaroid/polaroid1.ogg', 75, TRUE) flash() if(!do_after(occupant, 3 SECONDS, src, timed_action_flags = IGNORE_HELD_ITEM)) taking_pictures = FALSE return - playsound(src, 'sound/items/polaroid2.ogg', 75, TRUE) + playsound(src, 'sound/items/polaroid/polaroid2.ogg', 75, TRUE) flash() if(!do_after(occupant, 2 SECONDS, src, timed_action_flags = IGNORE_HELD_ITEM)) taking_pictures = FALSE diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index ef18dc6b068ae..39d6fe7d2ea0c 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -175,7 +175,7 @@ Buildable meters set name = "Invert Pipe" set src in view(1) - if ( usr.incapacitated() ) + if ( usr.incapacitated ) return do_a_flip() diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index eb5b499bce79e..de7c6351e38d4 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -62,7 +62,7 @@ data["init_directions"] = init_directions return data -/obj/machinery/pipedispenser/ui_act(action, params) +/obj/machinery/pipedispenser/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) return switch(action) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index c9694730a3f8a..e64e01bbcf246 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -135,15 +135,13 @@ DEFINE_BITFIELD(turret_flags, list( if(!has_cover) INVOKE_ASYNC(src, PROC_REF(popUp)) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) - AddElement(/datum/element/hostile_machine) ///Toggles the turret on or off depending on the value of the turn_on arg. /obj/machinery/porta_turret/proc/toggle_on(turn_on = TRUE) if(on == turn_on) return - if(on && !COOLDOWN_FINISHED(src, disabled_time)) + if(turn_on && !COOLDOWN_FINISHED(src, disabled_time)) return on = turn_on check_should_process() @@ -157,10 +155,10 @@ DEFINE_BITFIELD(turret_flags, list( addtimer(CALLBACK(src, PROC_REF(toggle_on), TRUE), duration + 1) //the cooldown isn't over until the tick after its end. toggle_on(FALSE) -/obj/machinery/porta_turret/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/machinery/porta_turret/on_saboteur(datum/source, disrupt_duration) + . = ..() INVOKE_ASYNC(src, PROC_REF(set_disabled), disrupt_duration) - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/machinery/porta_turret/proc/check_should_process() if (datum_flags & DF_ISPROCESSING) @@ -264,7 +262,7 @@ DEFINE_BITFIELD(turret_flags, list( data["allow_manual_control"] = TRUE return data -/obj/machinery/porta_turret/ui_act(action, list/params) +/obj/machinery/porta_turret/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -575,7 +573,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()) + var/datum/job/apparent_job = SSjob.get_job(perp.get_assignment()) if(apparent_job?.job_flags & JOB_HEAD_OF_STAFF) return 0 @@ -749,8 +747,8 @@ DEFINE_BITFIELD(turret_flags, list( mode = TURRET_LETHAL stun_projectile = /obj/projectile/bullet lethal_projectile = /obj/projectile/bullet - lethal_projectile_sound = 'sound/weapons/gun/pistol/shot.ogg' - stun_projectile_sound = 'sound/weapons/gun/pistol/shot.ogg' + lethal_projectile_sound = 'sound/items/weapons/gun/pistol/shot.ogg' + stun_projectile_sound = 'sound/items/weapons/gun/pistol/shot.ogg' icon_state = "syndie_off" base_icon_state = "syndie" faction = list(ROLE_SYNDICATE) @@ -771,9 +769,9 @@ DEFINE_BITFIELD(turret_flags, list( icon_state = "standard_lethal" base_icon_state = "standard" stun_projectile = /obj/projectile/energy/electrode - stun_projectile_sound = 'sound/weapons/taser.ogg' + stun_projectile_sound = 'sound/items/weapons/taser.ogg' lethal_projectile = /obj/projectile/beam/laser - lethal_projectile_sound = 'sound/weapons/laser.ogg' + lethal_projectile_sound = 'sound/items/weapons/laser.ogg' desc = "An energy blaster auto-turret." armor_type = /datum/armor/syndicate_turret @@ -790,14 +788,14 @@ DEFINE_BITFIELD(turret_flags, list( icon_state = "standard_lethal" base_icon_state = "standard" stun_projectile = /obj/projectile/energy/electrode - stun_projectile_sound = 'sound/weapons/taser.ogg' + stun_projectile_sound = 'sound/items/weapons/taser.ogg' lethal_projectile = /obj/projectile/beam/laser/heavylaser - lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' + lethal_projectile_sound = 'sound/items/weapons/lasercannonfire.ogg' desc = "An energy blaster auto-turret." /obj/machinery/porta_turret/syndicate/energy/raven stun_projectile = /obj/projectile/beam/laser - stun_projectile_sound = 'sound/weapons/laser.ogg' + stun_projectile_sound = 'sound/items/weapons/laser.ogg' faction = list(FACTION_NEUTRAL,FACTION_SILICON,FACTION_TURRET) /obj/machinery/porta_turret/syndicate/pod @@ -808,9 +806,9 @@ DEFINE_BITFIELD(turret_flags, list( /obj/machinery/porta_turret/syndicate/irs lethal_projectile = /obj/projectile/bullet/c10mm/ap - lethal_projectile_sound = 'sound/weapons/gun/smg/shot.ogg' + lethal_projectile_sound = 'sound/items/weapons/gun/smg/shot.ogg' stun_projectile = /obj/projectile/bullet/c10mm/ap - stun_projectile_sound = 'sound/weapons/gun/smg/shot.ogg' + stun_projectile_sound = 'sound/items/weapons/gun/smg/shot.ogg' armor_type = /datum/armor/syndicate_turret faction = list(FACTION_PIRATE) @@ -819,8 +817,8 @@ DEFINE_BITFIELD(turret_flags, list( shot_delay = 3 stun_projectile = /obj/projectile/bullet/p50/penetrator/shuttle lethal_projectile = /obj/projectile/bullet/p50/penetrator/shuttle - lethal_projectile_sound = 'sound/weapons/gun/smg/shot.ogg' - stun_projectile_sound = 'sound/weapons/gun/smg/shot.ogg' + lethal_projectile_sound = 'sound/items/weapons/gun/smg/shot.ogg' + stun_projectile_sound = 'sound/items/weapons/gun/smg/shot.ogg' armor_type = /datum/armor/syndicate_shuttle /datum/armor/syndicate_shuttle @@ -853,7 +851,7 @@ DEFINE_BITFIELD(turret_flags, list( installation = null uses_stored = FALSE lethal_projectile = /obj/projectile/plasma/turret - lethal_projectile_sound = 'sound/weapons/plasma_cutter.ogg' + lethal_projectile_sound = 'sound/items/weapons/plasma_cutter.ogg' mode = TURRET_LETHAL //It would be useless in stun mode anyway faction = list(FACTION_NEUTRAL,FACTION_SILICON,FACTION_TURRET) //Minebots, medibots, etc that should not be shot. @@ -880,8 +878,8 @@ DEFINE_BITFIELD(turret_flags, list( scan_range = 9 stun_projectile = /obj/projectile/beam/laser lethal_projectile = /obj/projectile/beam/laser - lethal_projectile_sound = 'sound/weapons/plasma_cutter.ogg' - stun_projectile_sound = 'sound/weapons/plasma_cutter.ogg' + lethal_projectile_sound = 'sound/items/weapons/plasma_cutter.ogg' + stun_projectile_sound = 'sound/items/weapons/plasma_cutter.ogg' icon_state = "syndie_off" base_icon_state = "syndie" faction = list(FACTION_NEUTRAL,FACTION_SILICON,FACTION_TURRET) @@ -906,6 +904,13 @@ DEFINE_BITFIELD(turret_flags, list( lethal_projectile = /obj/projectile/beam/weak/penetrator faction = list(FACTION_NEUTRAL,FACTION_SILICON,FACTION_TURRET) +/obj/machinery/porta_turret/centcom_shuttle/weak/mining + name = "Old Mining Turret" + lethal_projectile = /obj/projectile/kinetic/miner + lethal_projectile_sound = 'sound/items/weapons/kinetic_accel.ogg' + stun_projectile = /obj/projectile/kinetic/miner + stun_projectile_sound = 'sound/items/weapons/kinetic_accel.ogg' + //////////////////////// //Turret Control Panel// //////////////////////// @@ -1025,34 +1030,36 @@ DEFINE_BITFIELD(turret_flags, list( /obj/machinery/turretid/ui_data(mob/user) var/list/data = list() data["locked"] = locked - data["siliconUser"] = user.has_unlimited_silicon_privilege + data["siliconUser"] = HAS_SILICON_ACCESS(user) data["enabled"] = enabled data["lethal"] = lethal data["shootCyborgs"] = shoot_cyborgs return data -/obj/machinery/turretid/ui_act(action, list/params) +/obj/machinery/turretid/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return + var/mob/user = ui.user + switch(action) if("lock") - if(!usr.has_unlimited_silicon_privilege) + if(!HAS_SILICON_ACCESS(user)) return if((obj_flags & EMAGGED) || (machine_stat & BROKEN)) - to_chat(usr, span_warning("The turret control is unresponsive!")) + to_chat(user, span_warning("The turret control is unresponsive!")) return locked = !locked return TRUE if("power") - toggle_on(usr) + toggle_on(user) return TRUE if("mode") - toggle_lethal(usr) + toggle_lethal(user) return TRUE if("shoot_silicons") - shoot_silicons(usr) + shoot_silicons(user) return TRUE /obj/machinery/turretid/proc/toggle_lethal(mob/user) diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm index a8fa4e67b2bf6..0ae7d9699ee26 100644 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ b/code/game/machinery/porta_turret/portable_turret_construct.dm @@ -182,7 +182,7 @@ return if(used.get_writing_implement_details()?["interaction_mode"] == MODE_WRITING) //you can rename turrets like bots! - var/choice = tgui_input_text(user, "Enter a new turret name", "Turret Classification", finish_name, MAX_NAME_LEN) + var/choice = tgui_input_text(user, "Enter a new turret name", "Turret Classification", finish_name, max_length = MAX_NAME_LEN) if(!choice) return if(!user.can_perform_action(src)) diff --git a/code/game/machinery/portagrav.dm b/code/game/machinery/portagrav.dm index c970fa5f8f1c6..62fc67b7c070a 100644 --- a/code/game/machinery/portagrav.dm +++ b/code/game/machinery/portagrav.dm @@ -229,7 +229,7 @@ . = ..() if(.) return - playsound(src, 'sound/machines/terminal_button07.ogg', 45, TRUE) + playsound(src, 'sound/machines/terminal/terminal_button07.ogg', 45, TRUE) switch(action) if("adjust_grav") var/adjustment = text2num(params["adjustment"]) diff --git a/code/game/machinery/prisongate.dm b/code/game/machinery/prisongate.dm index b05b6dd90c4a1..88cb40dd50f79 100644 --- a/code/game/machinery/prisongate.dm +++ b/code/game/machinery/prisongate.dm @@ -51,7 +51,7 @@ for(var/mob/living/stowaway in cargobay.contents) //nice try bub if(COOLDOWN_FINISHED(src, spam_cooldown_time)) say("Stowaway detected in internal contents. Access denied.") - playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, FALSE) COOLDOWN_START(src, spam_cooldown_time, SPAM_CD) return FALSE var/mob/living/carbon/the_toucher = gate_toucher @@ -82,7 +82,7 @@ return TRUE if(COOLDOWN_FINISHED(src, spam_cooldown_time)) say("Prison ID with ongoing sentence detected. Access denied.") - playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, FALSE) COOLDOWN_START(src, spam_cooldown_time, SPAM_CD) return FALSE if(COOLDOWN_FINISHED(src, spam_cooldown_time)) diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 3c698a918e694..273d4749cfd3a 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -138,7 +138,7 @@ /obj/machinery/quantumpad/proc/doteleport(mob/user = null, obj/machinery/quantumpad/target_pad = linked_pad) if(!target_pad) return - playsound(get_turf(src), 'sound/weapons/flash.ogg', 25, TRUE) + playsound(get_turf(src), 'sound/items/weapons/flash.ogg', 25, TRUE) teleporting = TRUE addtimer(CALLBACK(src, PROC_REF(teleport_contents), user, target_pad), teleport_speed) @@ -162,9 +162,9 @@ target_pad.sparks() flick("qpad-beam", src) - playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, TRUE) + playsound(get_turf(src), 'sound/items/weapons/emitter2.ogg', 25, TRUE) flick("qpad-beam", target_pad) - playsound(get_turf(target_pad), 'sound/weapons/emitter2.ogg', 25, TRUE) + playsound(get_turf(target_pad), 'sound/items/weapons/emitter2.ogg', 25, TRUE) for(var/atom/movable/ROI in get_turf(src)) if(QDELETED(ROI)) continue //sleeps in CHECK_TICK diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 9919214d72fc4..f7a952ddb17a2 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -75,7 +75,7 @@ recharge_speed = 0 repairs = 0 for(var/datum/stock_part/capacitor/capacitor in component_parts) - recharge_speed += (capacitor.tier * STANDARD_CELL_CHARGE * 0.1) + recharge_speed += 5e-3 * capacitor.tier for(var/datum/stock_part/servo/servo in component_parts) repairs += servo.tier - 1 for(var/obj/item/stock_parts/power_store/cell in component_parts) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 8ce9265917d63..166410cfccf56 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -15,7 +15,7 @@ var/amount_produced = 50 var/crush_damage = 1000 var/eat_victim_items = TRUE - var/item_recycle_sound = 'sound/items/welder.ogg' + var/item_recycle_sound = 'sound/items/tools/welder.ogg' var/datum/component/material_container/materials /obj/machinery/recycler/Initialize(mapload) @@ -206,7 +206,7 @@ if(nom.len && sound) playsound(src, item_recycle_sound, (50 + nom.len * 5), TRUE, nom.len, ignore_walls = (nom.len - 10)) // As a substitute for playing 50 sounds at once. if(not_eaten) - playsound(src, 'sound/machines/buzz-sigh.ogg', (50 + not_eaten * 5), FALSE, not_eaten, ignore_walls = (not_eaten - 10)) // Ditto. + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', (50 + not_eaten * 5), FALSE, not_eaten, ignore_walls = (not_eaten - 10)) // Ditto. /obj/machinery/recycler/proc/recycle_item(obj/item/weapon) . = FALSE @@ -225,7 +225,7 @@ qdel(weapon) /obj/machinery/recycler/proc/emergency_stop() - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) safety_mode = TRUE update_appearance() addtimer(CALLBACK(src, PROC_REF(reboot)), SAFETY_COOLDOWN) @@ -239,7 +239,7 @@ L.forceMove(loc) if(issilicon(L)) - playsound(src, 'sound/items/welder.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 50, TRUE) else playsound(src, 'sound/effects/splat.ogg', 50, TRUE) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index f2b1ba303ebea..dea6503858cdd 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -217,7 +217,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) return if(!reply_message) has_mail_send_error = TRUE - playsound(src, 'sound/machines/buzz-two.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, TRUE) return TRUE send_message(recipient, reply_message, REQ_NORMAL_MESSAGE_PRIORITY, REPLY_REQUEST) @@ -273,9 +273,9 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) if(!silent) if(has_mail_send_error) - playsound(src, 'sound/machines/buzz-two.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, TRUE) else - playsound(src, 'sound/machines/twobeep.ogg', 50, TRUE) + playsound(src, 'sound/machines/beep/twobeep.ogg', 50, TRUE) message_stamped_by = "" message_verified_by = "" @@ -350,7 +350,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) var/alert = new_message.get_alert() if(!silent) - playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE) + playsound(src, 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) say(alert) if(new_message.radio_freq) diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm index 2a8dc8bb49b22..f0bc48916ae21 100644 --- a/code/game/machinery/roulette_machine.dm +++ b/code/game/machinery/roulette_machine.dm @@ -98,7 +98,7 @@ return data -/obj/machinery/roulette/ui_act(action, params) +/obj/machinery/roulette/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -127,7 +127,7 @@ if(isidcard(W)) playsound(src, 'sound/machines/card_slide.ogg', 50, TRUE) else - playsound(src, 'sound/machines/terminal_success.ogg', 50, TRUE) + playsound(src, 'sound/machines/terminal/terminal_success.ogg', 50, TRUE) if(machine_stat & MAINT || !on || locked) to_chat(user, span_notice("The machine appears to be disabled.")) @@ -135,17 +135,17 @@ if(!player_card.registered_account) say("You don't have a bank account!") - playsound(src, 'sound/machines/buzz-two.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE) return FALSE if(my_card) if(IS_DEPARTMENTAL_CARD(player_card)) // Are they using a department ID say("You cannot gamble with the department budget!") - playsound(src, 'sound/machines/buzz-two.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE) return FALSE if(player_card.registered_account.account_balance < chosen_bet_amount) //Does the player have enough funds say("You do not have the funds to play! Lower your bet or get more money.") - playsound(src, 'sound/machines/buzz-two.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE) return FALSE if(!chosen_bet_amount || isnull(chosen_bet_type)) return FALSE @@ -181,13 +181,13 @@ icon_state = "rolling" //Prepare the new icon state for rolling before hand. flick("flick_up", src) - playsound(src, 'sound/machines/piston_raise.ogg', 70) + playsound(src, 'sound/machines/piston/piston_raise.ogg', 70) playsound(src, 'sound/machines/chime.ogg', 50) addtimer(CALLBACK(src, PROC_REF(play), user, player_card, chosen_bet_type, chosen_bet_amount, potential_payout), 4) //Animation first return TRUE else - var/msg = tgui_input_text(user, "Name of your roulette wheel", "Roulette Customization", "Roulette Machine", MAX_NAME_LEN) + var/msg = tgui_input_text(user, "Name of your roulette wheel", "Roulette Customization", "Roulette Machine", max_length = MAX_NAME_LEN) if(!msg) return name = msg @@ -209,7 +209,7 @@ if(!my_card?.registered_account) // Something happened to my_card during the 0.4 seconds delay of the timed callback. icon_state = "idle" flick("flick_down", src) - playsound(src, 'sound/machines/piston_lower.ogg', 70) + playsound(src, 'sound/machines/piston/piston_lower.ogg', 70) return var/payout = potential_payout @@ -222,7 +222,7 @@ var/rolled_number = rand(0, 36) - playsound(src, 'sound/machines/roulettewheel.ogg', 50) + playsound(src, 'sound/machines/roulette/roulettewheel.ogg', 50) addtimer(CALLBACK(src, PROC_REF(finish_play), player_id, bet_type, bet_amount, payout, rolled_number), 34) //4 deciseconds more so the animation can play addtimer(CALLBACK(src, PROC_REF(finish_play_animation)), 3 SECONDS) @@ -231,7 +231,7 @@ /obj/machinery/roulette/proc/finish_play_animation() icon_state = "idle" flick("flick_down", src) - playsound(src, 'sound/machines/piston_lower.ogg', 70) + playsound(src, 'sound/machines/piston/piston_lower.ogg', 70) ///Ran after a while to check if the player won or not. /obj/machinery/roulette/proc/finish_play(obj/item/card/id/player_id, bet_type, bet_amount, potential_payout, rolled_number) @@ -249,7 +249,7 @@ if(!is_winner) say("You lost! Better luck next time") - playsound(src, 'sound/machines/synth_no.ogg', 50) + playsound(src, 'sound/machines/synth/synth_no.ogg', 50) return FALSE // Prevents money generation exploits. Doesn't prevent the owner being a scrooge and running away with the money. @@ -257,7 +257,7 @@ potential_payout = (account_balance >= potential_payout) ? potential_payout : account_balance say("You have won [potential_payout] credits! Congratulations!") - playsound(src, 'sound/machines/synth_yes.ogg', 50) + playsound(src, 'sound/machines/synth/synth_yes.ogg', 50) dispense_prize(potential_payout) @@ -362,7 +362,7 @@ if(my_card.registered_account.account_balance >= payout) return TRUE //We got the betting amount say("The bank account of [my_card.registered_account.account_holder] does not have enough funds to pay out the potential prize, contact them to fill up their account or lower your bet!") - playsound(src, 'sound/machines/buzz-two.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE) return FALSE /obj/machinery/roulette/update_overlays() @@ -456,7 +456,7 @@ "path" = /obj/structure/closet/supplypod/centcompod, "spawn" = /obj/machinery/roulette )) - + qdel(src) #undef ROULETTE_DOZ_COL_PAYOUT diff --git a/code/game/machinery/satellite/satellite_control.dm b/code/game/machinery/satellite/satellite_control.dm index c0875d9e26a6b..9983cc439e366 100644 --- a/code/game/machinery/satellite/satellite_control.dm +++ b/code/game/machinery/satellite/satellite_control.dm @@ -11,7 +11,7 @@ ui = new(user, src, "SatelliteControl", name) ui.open() -/obj/machinery/computer/sat_control/ui_act(action, params) +/obj/machinery/computer/sat_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/scanner_gate.dm b/code/game/machinery/scanner_gate.dm index ce5158828ca06..126238a542980 100644 --- a/code/game/machinery/scanner_gate.dm +++ b/code/game/machinery/scanner_gate.dm @@ -357,7 +357,7 @@ say("[detected_thing][reverse ? " not " : " "]detected!!") COOLDOWN_START(src, next_beep, 2 SECONDS) - playsound(source = src, soundin = 'sound/machines/scanbuzz.ogg', vol = 30, vary = FALSE, extrarange = MEDIUM_RANGE_SOUND_EXTRARANGE, falloff_distance = 4) + playsound(source = src, soundin = 'sound/machines/scanner/scanbuzz.ogg', vol = 30, vary = FALSE, extrarange = MEDIUM_RANGE_SOUND_EXTRARANGE, falloff_distance = 4) set_scanline("alarm", 2 SECONDS) /obj/machinery/scanner_gate/can_interact(mob/user) @@ -383,7 +383,7 @@ data["contraband_enabled"] = !!n_spect return data -/obj/machinery/scanner_gate/ui_act(action, params) +/obj/machinery/scanner_gate/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index d5dc9e3a26ef8..97b0adf5601a8 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -283,7 +283,7 @@ /obj/machinery/power/shieldwallgen name = "shield wall generator" desc = "A shield generator." - icon ='icons/obj/machines/shield_generator.dmi' //SKYRAT EDIT CHANGE - ICON OVERRIDDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/shield_generator.dmi' icon_state = "shield_wall_gen" base_icon_state = "shield_wall_gen" light_on = FALSE diff --git a/code/game/machinery/sleepers.dm b/code/game/machinery/sleepers.dm index 63291035e784f..9b843cd550612 100644 --- a/code/game/machinery/sleepers.dm +++ b/code/game/machinery/sleepers.dm @@ -237,7 +237,7 @@ return data -/obj/machinery/sleeper/ui_act(action, params) +/obj/machinery/sleeper/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -300,17 +300,21 @@ * Can be controlled from the inside and can be deconstructed. */ /obj/machinery/sleeper/syndie + name = "syndicate sleeper" icon_state = "sleeper_s" base_icon_state = "sleeper_s" controls_inside = TRUE deconstructable = TRUE + circuit = /obj/item/circuitboard/machine/sleeper/syndie ///Fully upgraded variant, the circuit using tier 4 parts. /obj/machinery/sleeper/syndie/fullupgrade + name = "upgraded syndicate sleeper" circuit = /obj/item/circuitboard/machine/sleeper/fullupgrade ///Fully upgraded, not deconstructable, while using the normal sprite. /obj/machinery/sleeper/syndie/fullupgrade/nt + name = "\improper Nanotrasen sleeper" icon_state = "sleeper" base_icon_state = "sleeper" deconstructable = FALSE diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index bb93b7d00f5b6..d3266df16f880 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -109,7 +109,7 @@ else if(!user.temporarilyRemoveItemFromInventory(inserted_coin)) return ITEM_INTERACT_BLOCKING - balloon_alert(user, "coin insterted") + balloon_alert(user, "coin inserted") balance += inserted_coin.value qdel(inserted_coin) return ITEM_INTERACT_SUCCESS @@ -335,14 +335,14 @@ else balloon_alert(user, "no luck!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50) did_player_win = FALSE if(did_player_win) add_filter("jackpot_rays", 3, ray_filter) animate(get_filter("jackpot_rays"), offset = 10, time = 3 SECONDS, loop = -1) addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, remove_filter), "jackpot_rays"), 3 SECONDS) - playsound(src, 'sound/machines/roulettejackpot.ogg', 50, TRUE) + playsound(src, 'sound/machines/roulette/roulettejackpot.ogg', 50, TRUE) /// Checks for a jackpot (5 matching icons in the middle row) with the given icon name /obj/machinery/computer/slot_machine/proc/check_jackpot(name) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 90218cef96d1e..76c086edfff8b 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -262,7 +262,7 @@ data["currentTemp"] = round(current_temperature - T0C, 1) return data -/obj/machinery/space_heater/ui_act(action, params) +/obj/machinery/space_heater/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -387,7 +387,7 @@ .["beaker"] = beaker .["currentTemp"] = beaker ? (round(beaker.reagents.chem_temp - T0C)) : "N/A" -/obj/machinery/space_heater/improvised_chem_heater/ui_act(action, params) +/obj/machinery/space_heater/improvised_chem_heater/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm index 9ef3d8e3a99a9..49f00741895fe 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -9,6 +9,7 @@ obj_flags = BLOCKS_CONSTRUCTION can_buckle = TRUE buckle_lying = 90 + buckle_dir = SOUTH circuit = /obj/item/circuitboard/machine/stasis fair_market_price = 10 payment_department = ACCOUNT_MED @@ -22,6 +23,7 @@ /obj/machinery/stasis/Initialize(mapload) . = ..() AddElement(/datum/element/elevation, pixel_shift = 6) + update_buckle_vars(dir) /obj/machinery/stasis/examine(mob/user) . = ..() @@ -32,9 +34,9 @@ if(last_stasis_sound != _running) var/sound_freq = rand(5120, 8800) if(_running) - playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = sound_freq) + playsound(src, 'sound/machines/synth/synth_yes.ogg', 50, TRUE, frequency = sound_freq) else - playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = sound_freq) + playsound(src, 'sound/machines/synth/synth_no.ogg', 50, TRUE, frequency = sound_freq) last_stasis_sound = _running /obj/machinery/stasis/click_alt(mob/user) @@ -57,6 +59,13 @@ thaw_them(L) return ..() +/obj/machinery/stasis/setDir(newdir) + . = ..() + update_buckle_vars(newdir) + +/obj/machinery/stasis/proc/update_buckle_vars(newdir) + buckle_lying = newdir & NORTHEAST ? 270 : 90 + /obj/machinery/stasis/proc/stasis_running() return stasis_enabled && is_operational diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 7a6ce09206e29..d6ffef1b2d65a 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY(key_to_status_display) 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(icon, "outline", src, alpha = src.alpha) // Timed process - performs nothing in the base class /obj/machinery/status_display/process() diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 6b04b2c6f340d..1eff3f6587080 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -230,7 +230,7 @@ /obj/machinery/suit_storage_unit/update_overlays() . = ..() - //if things arent powered, these show anyways + //if things aren't powered, these show anyways if(panel_open) . += "[base_icon_state]_panel" if(state_open) @@ -506,7 +506,7 @@ locked = FALSE if(uv_super) visible_message(span_warning("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.")) - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 50, TRUE) + playsound(src, 'sound/machines/airlock/airlock_alien_prying.ogg', 50, TRUE) var/datum/effect_system/fluid_spread/smoke/bad/black/smoke = new smoke.set_up(0, holder = src, location = src) smoke.start() @@ -523,7 +523,7 @@ else visible_message(span_warning("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.")) qdel(mob_occupant.GetComponent(/datum/component/irradiated)) - playsound(src, 'sound/machines/airlockclose.ogg', 25, TRUE) + playsound(src, 'sound/machines/airlock/airlockclose.ogg', 25, TRUE) var/list/things_to_clear = list() //Done this way since using GetAllContents on the SSU itself would include circuitry and such. if(suit) things_to_clear += suit @@ -711,12 +711,12 @@ var/name_set = FALSE var/desc_set = FALSE - var/str = tgui_input_text(user, "Personal Unit Name", "Unit Name") + var/str = tgui_input_text(user, "Personal Unit Name", "Unit Name", max_length = MAX_NAME_LEN) if(!isnull(str)) name = str name_set = TRUE - str = tgui_input_text(user, "Personal Unit Description", "Unit Description") + str = tgui_input_text(user, "Personal Unit Description", "Unit Description", max_length = MAX_DESC_LEN) if(!isnull(str)) desc = str desc_set = TRUE @@ -793,7 +793,7 @@ */ /obj/machinery/suit_storage_unit/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) if(screwdriver.tool_behaviour == TOOL_SCREWDRIVER && (uv || locked)) - to_chat(user, span_warning("You cant open the panel while its [locked ? "locked" : "decontaminating"]")) + to_chat(user, span_warning("You can't open the panel while its [locked ? "locked" : "decontaminating"]")) return TRUE return ..() diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 3a7cc849acd30..25dc258a38d94 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -501,7 +501,7 @@ reactants += S.reagents if(!chem_splash(get_turf(src), reagents, spread_range, reactants, temp_boost)) - playsound(loc, 'sound/items/screwdriver2.ogg', 50, TRUE) + playsound(loc, 'sound/items/tools/screwdriver2.ogg', 50, TRUE) return // The Explosion didn't do anything. No need to log, or disappear. if(adminlog) @@ -621,7 +621,7 @@ balloon_alert(user, "set to [chosen_theme?.name || DIMENSION_CHOICE_RANDOM]") /obj/item/bombcore/dimensional/proc/check_menu(mob/user) - if(!user.is_holding(src) || user.incapacitated()) + if(!user.is_holding(src) || user.incapacitated) return FALSE return TRUE diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index 2c31dcbd98955..06d390e5f2e27 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -155,7 +155,7 @@ if (TRANSMISSION_SUPERSPACE) // Only radios which are independent for(var/obj/item/radio/independent_radio in GLOB.all_radios["[frequency]"]) - if(independent_radio.independent && independent_radio.can_receive(frequency, signal_reaches_every_z_level)) + if((independent_radio.special_channels & RADIO_SPECIAL_CENTCOM) && independent_radio.can_receive(frequency, signal_reaches_every_z_level)) radios += independent_radio for(var/obj/item/radio/called_radio as anything in radios) diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index 25b5ddd212710..22a41a6ada66b 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -95,7 +95,7 @@ return data -/obj/machinery/computer/telecomms/server/ui_act(action, params) +/obj/machinery/computer/telecomms/server/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index a38f18231fb76..1b3197e702da5 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -117,7 +117,7 @@ data["requests"] = request_list return data -/obj/machinery/computer/message_monitor/ui_act(action, params) +/obj/machinery/computer/message_monitor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return . @@ -139,7 +139,7 @@ return TRUE authenticated = TRUE - success_message = "YOU SUCCESFULLY LOGGED IN!" + success_message = "YOU SUCCESSFULLY LOGGED IN!" return TRUE if("link_server") @@ -180,10 +180,10 @@ notice_message = "NOTICE: Logs cleared." return TRUE if("set_key") - var/dkey = tgui_input_text(usr, "Please enter the decryption key", "Telecomms Decryption") + var/dkey = tgui_input_text(usr, "Please enter the decryption key", "Telecomms Decryption", max_length = 16) if(dkey && dkey != "") if(linkedServer.decryptkey == dkey) - var/newkey = tgui_input_text(usr, "Please enter the new key (3 - 16 characters max)", "New Key") + var/newkey = tgui_input_text(usr, "Please enter the new key (3 - 16 characters max)", "New Key", max_length = 16) if(length(newkey) <= 3) notice_message = "NOTICE: Decryption key too short!" else if(newkey && newkey != "") @@ -210,8 +210,8 @@ break return TRUE if("send_fake_message") - var/sender = tgui_input_text(usr, "What is the sender's name?", "Sender") - var/job = tgui_input_text(usr, "What is the sender's job?", "Job") + var/sender = tgui_input_text(usr, "What is the sender's name?", "Sender", max_length = MAX_NAME_LEN) + var/job = tgui_input_text(usr, "What is the sender's job?", "Job", max_length = 60) var/recipient var/list/tablet_to_messenger = list() @@ -229,7 +229,7 @@ else recipient = null - var/message = tgui_input_text(usr, "Please enter your message", "Message") + var/message = tgui_input_text(usr, "Please enter your message", "Message", max_length = MAX_MESSAGE_LEN) if(isnull(sender) || sender == "") sender = "UNKNOWN" diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index abc2b7dbdbff4..e70c7f7de172a 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -81,7 +81,7 @@ return data -/obj/machinery/computer/telecomms/monitor/ui_act(action, params) +/obj/machinery/computer/telecomms/monitor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index fb68631b76676..8b982b4e3b953 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -82,7 +82,7 @@ return data -/obj/machinery/telecomms/ui_act(action, params) +/obj/machinery/telecomms/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -105,7 +105,7 @@ if(params["value"]) if(length(params["value"]) > 32) to_chat(current_user, span_warning("Error: Machine ID too long!")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return else id = params["value"] @@ -115,7 +115,7 @@ if(params["value"]) if(length(params["value"]) > 15) to_chat(current_user, span_warning("Error: Network name too long!")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return else for(var/obj/machinery/telecomms/linked_machine in links) @@ -130,7 +130,7 @@ if("freq") if(tempfreq in banned_frequencies) to_chat(current_user, span_warning("Error: Interference preventing filtering frequency: \"[tempfreq / 10] kHz\"")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) else if(!(tempfreq in freq_listening)) freq_listening.Add(tempfreq) diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm index 15d20b3d1eb25..b56b4811083d3 100644 --- a/code/game/machinery/telecomms/machines/bus.dm +++ b/code/game/machinery/telecomms/machines/bus.dm @@ -60,8 +60,8 @@ /obj/machinery/telecomms/bus/preset_two id = "Bus 2" network = "tcommsat" - freq_listening = list(FREQ_SUPPLY, FREQ_SERVICE) - autolinkers = list("processor2", "supply", "service") + freq_listening = list(FREQ_SUPPLY, FREQ_SERVICE, FREQ_ENTERTAINMENT) + autolinkers = list("processor2", "supply", "service", "entertainment") /obj/machinery/telecomms/bus/preset_three id = "Bus 3" diff --git a/code/game/machinery/telecomms/machines/hub.dm b/code/game/machinery/telecomms/machines/hub.dm index fa4d550cdf477..3f71343b2007f 100644 --- a/code/game/machinery/telecomms/machines/hub.dm +++ b/code/game/machinery/telecomms/machines/hub.dm @@ -72,6 +72,7 @@ "common", "command", "engineering", + "entertainment", "security", "receiverA", "receiverB", diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm index 8d6f8c85f43a1..875398fb8f245 100644 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ b/code/game/machinery/telecomms/machines/receiver.dm @@ -57,7 +57,7 @@ id = "Receiver A" network = "tcommsat" autolinkers = list("receiverA") // link to relay - freq_listening = list(FREQ_SCIENCE, FREQ_MEDICAL, FREQ_SUPPLY, FREQ_SERVICE) + freq_listening = list(FREQ_SCIENCE, FREQ_MEDICAL, FREQ_SUPPLY, FREQ_SERVICE, FREQ_ENTERTAINMENT) //--PRESET RIGHT--// diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm index 0c87a6101d182..1c7557b79def8 100644 --- a/code/game/machinery/telecomms/machines/server.dm +++ b/code/game/machinery/telecomms/machines/server.dm @@ -100,9 +100,9 @@ autolinkers = list("supply") /obj/machinery/telecomms/server/presets/service - id = "Service Server" - freq_listening = list(FREQ_SERVICE) - autolinkers = list("service") + id = "Service & Entertainment Server" + freq_listening = list(FREQ_SERVICE, FREQ_ENTERTAINMENT) + autolinkers = list("service", "entertainment") /obj/machinery/telecomms/server/presets/common id = "Common Server" diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 238994004ded0..45a91d7e5a6ec 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -84,7 +84,7 @@ return if(!transform_dead && victim.stat == DEAD) - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src.loc, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) return // Activate the cooldown @@ -92,7 +92,7 @@ cooldown_timer = world.time + cooldown_duration update_appearance() - playsound(src.loc, 'sound/items/welder.ogg', 50, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 50, TRUE) victim.emote("scream") // It is painful victim.adjustBruteLoss(max(0, 80 - victim.getBruteLoss())) // Hurt the human, don't try to kill them though. diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index fd57b24da099f..f06ac5d920916 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -3,6 +3,8 @@ var/can_buckle = FALSE /// Bed-like behaviour, forces mob.lying = buckle_lying if not set to [NO_BUCKLE_LYING]. var/buckle_lying = NO_BUCKLE_LYING + /// Bed-like behaviour, sets mob dir to buckle_dir if not set to [BUCKLE_MATCH_DIR]. If set to [BUCKLE_MATCH_DIR], makes mob dir match ours. + var/buckle_dir = BUCKLE_MATCH_DIR /// Require people to be handcuffed before being able to buckle. eg: pipes var/buckle_requires_restraints = FALSE /// The mobs currently buckled to this atom @@ -106,7 +108,10 @@ M.set_glide_size(glide_size) M.Move(loc) - M.setDir(dir) + if(buckle_dir == BUCKLE_MATCH_DIR) + M.setDir(dir) + else + M.setDir(buckle_dir) //Something has unbuckled us in reaction to the above movement if(!M.buckled) @@ -261,7 +266,7 @@ */ /atom/movable/proc/is_user_buckle_possible(mob/living/target, mob/user, check_loc = TRUE) // Standard adjacency and other checks. - if(!Adjacent(user) || !Adjacent(target) || !isturf(user.loc) || user.incapacitated() || target.anchored) + if(!Adjacent(user) || !Adjacent(target) || !isturf(user.loc) || user.incapacitated || target.anchored) return FALSE if(iscarbon(user)) diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index ce9bab6a511cc..f249d22500c30 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -95,6 +95,15 @@ /obj/effect/anomaly/proc/anomalyNeutralize() new /obj/effect/particle_effect/fluid/smoke/bad(loc) + SSblackbox.record_feedback( + "nested tally", + "anomaly_defused", + 1, + list( + "[type]", + immortal ? "immortal" : "[round((death_time - world.time) / 10)]ds time left", + ) + ) if(drops_core) if(isnull(anomaly_core)) diff --git a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm index ab53099ed34e2..d722d90ed1172 100644 --- a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm +++ b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm @@ -25,7 +25,7 @@ return new /obj/effect/temp_visual/circle_wave/bioscrambler(get_turf(src)) - playsound(src, 'sound/magic/cosmic_energy.ogg', vol = 50, vary = TRUE) + playsound(src, 'sound/effects/magic/cosmic_energy.ogg', vol = 50, vary = TRUE) COOLDOWN_START(src, pulse_cooldown, pulse_delay) for(var/mob/living/carbon/nearby in hearers(range, src)) nearby.bioscramble(name) @@ -62,7 +62,7 @@ for(var/mob/living/carbon/target in GLOB.player_list) if (target.z != z) continue - if (target.status_flags & GODMODE) + if (HAS_TRAIT(target, TRAIT_GODMODE)) continue if (target.stat >= UNCONSCIOUS) continue // Don't just haunt a corpse @@ -89,10 +89,12 @@ duration = 0.5 SECONDS color = COLOR_LIME var/max_alpha = 255 + ///How far the effect would scale in size + var/amount_to_scale = 2 /obj/effect/temp_visual/circle_wave/Initialize(mapload) transform = matrix().Scale(0.1) - animate(src, transform = matrix().Scale(2), time = duration, flags = ANIMATION_PARALLEL) + animate(src, transform = matrix().Scale(amount_to_scale), time = duration, flags = ANIMATION_PARALLEL) animate(src, alpha = max_alpha, time = duration * 0.6, flags = ANIMATION_PARALLEL) animate(alpha = 0, time = duration * 0.4) apply_wibbly_filters(src) @@ -103,3 +105,8 @@ /obj/effect/temp_visual/circle_wave/bioscrambler/light max_alpha = 128 + +/obj/effect/temp_visual/circle_wave/void_conduit + color = COLOR_FULL_TONER_BLACK + duration = 12 SECONDS + amount_to_scale = 12 diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index 7721b50942897..0a71427776eea 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -53,7 +53,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") var/list/flashers = list() for(var/mob/living/carbon/C in viewers(TO, null)) diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm index a9d2e0bcaa0c4..2d92eaabb929c 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm @@ -11,7 +11,7 @@ /// Typepath of custom material to use for objects. var/datum/material/material /// Sound to play when transforming a tile - var/sound = 'sound/magic/blind.ogg' + var/sound = 'sound/effects/magic/blind.ogg' /// Weighted list of turfs to replace the floor with. var/list/replace_floors = list(/turf/open/floor/material = 1) /// Typepath of turf to replace walls with. @@ -255,7 +255,7 @@ icon = 'icons/obj/ore.dmi' icon_state = "uranium" material = /datum/material/uranium - sound = 'sound/items/welder.ogg' + sound = 'sound/items/tools/welder.ogg' /datum/dimension_theme/meat name = "Meat" @@ -468,4 +468,4 @@ /obj/item/reagent_containers/cup/glass/trophy = list(/obj/item/reagent_containers/cup/glass/trophy/bronze_cup = 1), /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/bronze = 1), ) - sound = 'sound/magic/clockwork/fellowship_armory.ogg' + sound = 'sound/effects/magic/clockwork/fellowship_armory.ogg' diff --git a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm index e6c3e855386b7..0998e3f803dec 100644 --- a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm +++ b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm @@ -132,11 +132,11 @@ icon_state = "anom" anchored = TRUE var/static/list/spooky_noises = list( - 'sound/hallucinations/growl1.ogg', - 'sound/hallucinations/growl2.ogg', - 'sound/hallucinations/growl3.ogg', - 'sound/hallucinations/veryfar_noise.ogg', - 'sound/hallucinations/wail.ogg' + 'sound/effects/hallucinations/growl1.ogg', + 'sound/effects/hallucinations/growl2.ogg', + 'sound/effects/hallucinations/growl3.ogg', + 'sound/effects/hallucinations/veryfar_noise.ogg', + 'sound/effects/hallucinations/wail.ogg' ) var/list/ghosts_spawned = list() diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm index 4065d8c04a45e..63997d4da6809 100644 --- a/code/game/objects/effects/anomalies/anomalies_hallucination.dm +++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm @@ -18,6 +18,7 @@ /obj/effect/anomaly/hallucination/Initialize(mapload, new_lifespan, drops_core) . = ..() apply_wibbly_filters(src) + generate_decoys() /obj/effect/anomaly/hallucination/anomalyEffect(seconds_per_tick) . = ..() @@ -40,10 +41,60 @@ if(!isturf(loc)) return - visible_hallucination_pulse( + hallucination_pulse( center = get_turf(src), - radius = 10, + radius = 15, hallucination_duration = 50 SECONDS, hallucination_max_duration = 300 SECONDS, optional_messages = messages, ) + +/obj/effect/anomaly/hallucination/proc/generate_decoys() + for(var/turf/floor in orange(1, src)) + if(prob(35)) + new /obj/effect/anomaly/hallucination/decoy(floor) + +/obj/effect/anomaly/hallucination/decoy + drops_core = FALSE + ///Stores the fake analyzer scan text, so the result is always consistent for each anomaly. + var/report_text + +/obj/effect/anomaly/hallucination/decoy/Initialize(mapload, new_lifespan, drops_core) + . = ..() + ADD_TRAIT(src, TRAIT_ILLUSORY_EFFECT, INNATE_TRAIT) + report_text = pick( + "[src]'s unstable field is fluctuating along frequency 9999999.99999, code 9999999.99999. No, no, that can't be right?", + "It doesn't detect anything. It awaits an input, as if you're pointing it towards nothing at all. What?", + "The interface displays [pick("a bad memory from your past", "the frequency numbers in a language you cannot read", "the first 15 digits of Pi", "yourself, from behind, angled at a 3/4ths isometric perspective")]. What the hell?", + "Nothing happens?", + "It reports that you are a [pick("moron", "idiot", "cretin", "lowlife", "worthless denthead", "gump")]. Huh?", + "It tells you to try again, because you're doing it all wrong. What?", + "It occurs to you that the anomaly you're scanning isn't actually there.", + "It's not working. You activate %TOOL% again. Still broken. You activate %TOOL%. You activate %TOOL%. Why isn't this working??", + "Something happens. You can't tell what. The interface on %TOOL% remains blank.", + "What are you even trying to accomplish here? Did you really think that was going to work?", + "Someone behind you whispers the frequency code to you, but you can't quite hear them. The interface on %TOOL% remains blank.", + "For a brief moment, you see yourself traversing a frozen forest, before snapping back to reality. The interface on %TOOL% remains blank.", + "Nothing interesting happens. Are you sure you're actually using it on anything?", + "For a moment you can feel your skin falling off, then blink as the sensation vanishes. What the hell did that mean?", + "The interface reports that you are a complete failure, and have screwed everything up again. Great work.", + "You realize that the formatting of this message is completely wrong, and get confused. Now why would that be?", + "%TOOL% stares back at you. It looks dissapointed, its screen practically saying 'You missed the anomaly, you dolt. There's nothing there!'", + "Nothing. Weird, maybe %TOOL% must be broken or something?", + "You activate %TOOL%. You activate %TOOL%. You activate %TOOL%. You activate %TOOL%. You activate %TOOL%. You activate %TOOL%. You activate %TOOL%. Why isn't it working??", + ) + +/obj/effect/anomaly/hallucination/decoy/anomalyEffect(seconds_per_tick) + if(SPT_PROB(move_chance, seconds_per_tick)) + move_anomaly() + +/obj/effect/anomaly/hallucination/decoy/analyzer_act(mob/living/user, obj/item/analyzer/tool) + to_chat(user, span_notice("You activate [tool]. [replacetext(report_text, "%TOOL%", "[tool]")]")) + return ITEM_INTERACT_BLOCKING + +/obj/effect/anomaly/hallucination/decoy/detonate() + do_sparks(3, source = src) + return + +/obj/effect/anomaly/hallucination/decoy/generate_decoys() + return diff --git a/code/game/objects/effects/cursor_catcher.dm b/code/game/objects/effects/cursor_catcher.dm index a8c19e40be80d..366ab0556248c 100644 --- a/code/game/objects/effects/cursor_catcher.dm +++ b/code/game/objects/effects/cursor_catcher.dm @@ -60,8 +60,8 @@ var/icon_y = text2num(LAZYACCESS(modifiers, VIS_Y)) if(isnull(icon_y)) icon_y = text2num(LAZYACCESS(modifiers, ICON_Y)) - var/our_x = round(icon_x / world.icon_size) - var/our_y = round(icon_y / world.icon_size) + var/our_x = round(icon_x / ICON_SIZE_X) + var/our_y = round(icon_y / ICON_SIZE_Y) given_turf = locate(owner.x + our_x - round(view_list[1]/2), owner.y + our_y - round(view_list[2]/2), owner.z) - given_x = round(icon_x - world.icon_size * our_x, 1) - given_y = round(icon_y - world.icon_size * our_y, 1) + given_x = round(icon_x - ICON_SIZE_X * our_x, 1) + given_y = round(icon_y - ICON_SIZE_Y * our_y, 1) diff --git a/code/game/objects/effects/decals/cleanable/food.dm b/code/game/objects/effects/decals/cleanable/food.dm index 0fc4352c78da9..d612bd9e7f53e 100644 --- a/code/game/objects/effects/decals/cleanable/food.dm +++ b/code/game/objects/effects/decals/cleanable/food.dm @@ -10,6 +10,9 @@ icon_state = "tomato_floor1" random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") +/obj/effect/decal/cleanable/food/tomato_smudge/can_bloodcrawl_in() + return TRUE // why? why not. + /obj/effect/decal/cleanable/food/plant_smudge name = "plant smudge" desc = "Chlorophyll? More like borophyll!" @@ -58,3 +61,14 @@ name = "flour" desc = "It's still good. Four second rule!" icon_state = "flour" + +/obj/effect/decal/cleanable/food/squid_ink + name = "ink smear" + desc = "a smear from some inky substance..." + icon = 'icons/mob/silicon/robots.dmi' + icon_state = "floor1" + color = COLOR_DARK + +/obj/effect/decal/cleanable/food/squid_ink/Initialize(mapload, list/datum/disease/diseases) + icon_state = "floor[rand(1, 7)]" + return ..() diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 3218231b30984..9125d7f2a10be 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -360,7 +360,7 @@ decal_reagent = /datum/reagent/ants reagent_amount = 5 /// Sound the ants make when biting - var/bite_sound = 'sound/weapons/bite.ogg' + var/bite_sound = 'sound/items/weapons/bite.ogg' /obj/effect/decal/cleanable/ants/Initialize(mapload) if(mapload && reagent_amount > 2) diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm index 61f14f9d80ebb..803555ae89a99 100644 --- a/code/game/objects/effects/decals/remains.dm +++ b/code/game/objects/effects/decals/remains.dm @@ -5,7 +5,7 @@ /obj/effect/decal/remains/acid_act() visible_message(span_warning("[src] dissolve[gender == PLURAL?"":"s"] into a puddle of sizzling goop!")) - playsound(src, 'sound/items/welder.ogg', 150, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 150, TRUE) new /obj/effect/decal/cleanable/greenglow(drop_location()) qdel(src) return TRUE @@ -18,18 +18,23 @@ return !istype(here_turf, /obj/structure/closet/crate/grave/filled) && ..() /obj/effect/decal/remains/human/smokey - desc = "They look like human remains. They have a strange, smokey aura about them..." + name = "remains of Charles Morlbaro" + desc = "I guess we figured out what happened to the guy who lives here. You'd best tread lightly around this..." ///Our proximity monitor, for detecting nearby looters. var/datum/proximity_monitor/proximity_monitor ///The reagent we will release when our remains are disturbed. var/datum/reagent/that_shit_that_killed_saddam + ///A cooldown for how frequently the gas is released when disturbed. COOLDOWN_DECLARE(gas_cooldown) + ///The length of the aforementioned cooldown. + var/gas_cooldown_length = (20 SECONDS) /obj/effect/decal/remains/human/smokey/Initialize(mapload) . = ..() - proximity_monitor = new(src, 0) - that_shit_that_killed_saddam = get_random_reagent_id() + proximity_monitor = new(src, 1) + var/list/blocked_reagents = subtypesof(/datum/reagent/medicine) + subtypesof(/datum/reagent/consumable) //Boooooriiiiing + that_shit_that_killed_saddam = get_random_reagent_id(blacklist = blocked_reagents) /obj/effect/decal/remains/human/smokey/HasProximity(atom/movable/tomb_raider) if(!COOLDOWN_FINISHED(src, gas_cooldown)) @@ -37,10 +42,11 @@ if(iscarbon(tomb_raider)) var/mob/living/carbon/nearby_carbon = tomb_raider - if (nearby_carbon.move_intent != MOVE_INTENT_WALK || prob(15)) + if(nearby_carbon.move_intent != MOVE_INTENT_WALK || prob(5)) release_smoke(nearby_carbon) - COOLDOWN_START(src, gas_cooldown, rand(20 SECONDS, 2 MINUTES)) + COOLDOWN_START(src, gas_cooldown, gas_cooldown_length) +///Releases a cloud of smoke based on the randomly generated reagent in Initialize(). /obj/effect/decal/remains/human/smokey/proc/release_smoke(mob/living/smoke_releaser) visible_message(span_warning("[smoke_releaser] disturbs the [src], which releases a huge cloud of gas!")) var/datum/effect_system/fluid_spread/smoke/chem/cigarette_puff = new() @@ -49,6 +55,15 @@ cigarette_puff.set_up(range = 2, amount = DIAMOND_AREA(2), holder = src, location = get_turf(src), silent = TRUE) cigarette_puff.start() +///Subtype of smokey remains used for rare maintenance spawns. +/obj/effect/decal/remains/human/smokey/maintenance + name = "smokey remains" + desc = "They look like human remains. They have a strange, smokey aura about them... You should tread lightly when walking near this." + +/obj/effect/decal/remains/human/smokey/maintenance/Initialize(mapload) + . = ..() + gas_cooldown_length = rand(4 MINUTES, 6 MINUTES) + /obj/effect/decal/remains/plasma icon_state = "remainsplasma" diff --git a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm index 6e5173790b22f..ca091cd50191a 100644 --- a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm +++ b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm @@ -97,6 +97,18 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/dark_red) /// Bar tiles +TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/red) + +/// Dark red tiles + +/obj/effect/turf_decal/tile/dark_red + name = "dark red tile decal" + color = "#B11111" + +TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/dark_red) + +/// Bar tiles + /obj/effect/turf_decal/tile/bar name = "bar tile decal" color = "#791500" diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 4fdd4ac598ee0..6ddd65f12cfca 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -20,8 +20,8 @@ would spawn and follow the beaker, even if it is carried or thrown. GLOB.cameranet.updateVisibility(src) return ..() -// Prevents effects from getting registered for SSspacedrift -/obj/effect/particle_effect/newtonian_move(direction, instant = FALSE, start_delay = 0) +// Prevents effects from getting registered for SSnewtonian_movement +/obj/effect/particle_effect/newtonian_move(inertia_angle, instant = FALSE, start_delay = 0, drift_force = 0, controlled_cap = null) return TRUE /datum/effect_system 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 6d968574c686c..07383a0aa6f0b 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 @@ -40,7 +40,7 @@ if(slippery_foam) AddComponent(/datum/component/slippery, 100) create_reagents(1000, REAGENT_HOLDER_INSTANT_REACT) - playsound(src, 'sound/effects/bubbles2.ogg', 80, TRUE, -3) + playsound(src, 'sound/effects/bubbles/bubbles2.ogg', 80, TRUE, -3) AddElement(/datum/element/atmos_sensitive, mapload) SSfoam.start_processing(src) @@ -324,7 +324,7 @@ return attack_hand(user, modifiers) /obj/structure/foamedmetal/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - playsound(src.loc, 'sound/weapons/tap.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/weapons/tap.ogg', 100, TRUE) /obj/structure/foamedmetal/attack_hand(mob/user, list/modifiers) . = ..() @@ -333,7 +333,7 @@ user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) to_chat(user, span_warning("You hit [src] but bounce off it!")) - playsound(src.loc, 'sound/weapons/tap.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/weapons/tap.ogg', 100, TRUE) /obj/structure/foamedmetal/attackby(obj/item/W, mob/user, params) ///A speed modifier for how fast the wall is build diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index e9a6263286e59..c98dfc2ddf78e 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -246,7 +246,7 @@ GLOBAL_VAR_INIT(glowshrooms, 0) /obj/structure/glowshroom/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) if(damage_type == BURN && damage_amount) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/glowshroom/should_atmos_process(datum/gas_mixture/air, exposed_temperature) return exposed_temperature > 300 diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 2839055a3db14..c7a7a33e72e4c 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -317,6 +317,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) GLOB.newplayer_start += loc return INITIALIZE_HINT_QDEL +/obj/effect/landmark/start/pun_pun + name = JOB_PUN_PUN + icon = 'icons/mob/human/human.dmi' + icon_state = "monkey" + /obj/effect/landmark/latejoin name = "JoinLate" diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index f080035d54c2e..12c8c15b62eaf 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -275,7 +275,7 @@ if(active) return - playsound(src, 'sound/weapons/armbomb.ogg', 70, TRUE) + playsound(src, 'sound/items/weapons/armbomb.ogg', 70, TRUE) to_chat(user, span_warning("You arm \the [src], causing it to shake! It will deploy in 3 seconds.")) active = TRUE addtimer(CALLBACK(src, PROC_REF(deploy_mine)), 3 SECONDS) diff --git a/code/game/objects/effects/phased_mob.dm b/code/game/objects/effects/phased_mob.dm index b1df969b45c92..357e9683072c1 100644 --- a/code/game/objects/effects/phased_mob.dm +++ b/code/game/objects/effects/phased_mob.dm @@ -23,6 +23,7 @@ jaunter.forceMove(src) if(ismob(jaunter)) var/mob/mob_jaunter = jaunter + RegisterSignal(mob_jaunter, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_change)) mob_jaunter.reset_perspective(src) /obj/effect/dummy/phased_mob/Destroy() @@ -55,6 +56,7 @@ /obj/effect/dummy/phased_mob/Exited(atom/movable/gone, direction) . = ..() if(gone == jaunter) + UnregisterSignal(jaunter, COMSIG_MOB_STATCHANGE) SEND_SIGNAL(src, COMSIG_MOB_EJECTED_FROM_JAUNT, jaunter) jaunter = null @@ -98,3 +100,9 @@ newloc = can_z_move(direction, get_turf(src), newloc, ZMOVE_INCAPACITATED_CHECKS | ZMOVE_FEEDBACK | ZMOVE_ALLOW_ANCHORED, user) return newloc + +/// Signal proc for [COMSIG_MOB_STATCHANGE], to throw us out of the jaunt if we lose consciousness. +/obj/effect/dummy/phased_mob/proc/on_stat_change(mob/living/source, new_stat, old_stat) + SIGNAL_HANDLER + if(source == jaunter && source.stat != CONSCIOUS) + eject_jaunter() diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 255f34eff51dd..a43fee5608de3 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -66,7 +66,7 @@ return ..() // Prevents portals spawned by jaunter/handtele from floating into space when relocated to an adjacent tile. -/obj/effect/portal/newtonian_move(direction, instant = FALSE, start_delay = 0) +/obj/effect/portal/newtonian_move(inertia_angle, instant = FALSE, start_delay = 0, drift_force = 0, controlled_cap = null) return TRUE /obj/effect/portal/attackby(obj/item/W, mob/user, params) diff --git a/code/game/objects/effects/posters/poster.dm b/code/game/objects/effects/posters/poster.dm index 4ced5babbbfa8..135887aafc83f 100644 --- a/code/game/objects/effects/posters/poster.dm +++ b/code/game/objects/effects/posters/poster.dm @@ -248,7 +248,7 @@ flick("poster_being_set", placed_poster) placed_poster.forceMove(src) //deletion of the poster is handled in poster/Exited(), so don't have to worry about P anymore. - playsound(src, 'sound/items/poster_being_created.ogg', 100, TRUE) + playsound(src, 'sound/items/poster/poster_being_created.ogg', 100, TRUE) var/turf/user_drop_location = get_turf(user) //cache this so it just falls to the ground if they move. also no tk memes allowed. if(!do_after(user, PLACE_SPEED, placed_poster, extra_checks = CALLBACK(placed_poster, TYPE_PROC_REF(/obj/structure/sign/poster, snowflake_closed_turf_check), src))) @@ -266,7 +266,7 @@ /obj/structure/sign/poster/proc/tear_poster(mob/user) visible_message(span_notice("[user] rips [src] in a single, decisive motion!") ) - playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/poster/poster_ripped.ogg', 100, TRUE) spring_trap(user) var/obj/structure/sign/poster/ripped/torn_poster = new(loc) diff --git a/code/game/objects/effects/powerup.dm b/code/game/objects/effects/powerup.dm index 3dc5db8de95de..8598d623fb0e5 100644 --- a/code/game/objects/effects/powerup.dm +++ b/code/game/objects/effects/powerup.dm @@ -59,7 +59,7 @@ icon_state = "backpack-medical" respawn_time = 30 SECONDS pickup_message = "Health restored!" - pickup_sound = 'sound/magic/staff_healing.ogg' + pickup_sound = 'sound/effects/magic/staff_healing.ogg' /// How much the pickup heals when picked up var/heal_amount = 50 /// Does this pickup fully heal when picked up @@ -89,7 +89,7 @@ icon_state = "ammobox" respawn_time = 30 SECONDS pickup_message = "Ammunition reloaded!" - pickup_sound = 'sound/weapons/gun/shotgun/rack.ogg' + pickup_sound = 'sound/items/weapons/gun/shotgun/rack.ogg' /obj/effect/powerup/ammo/trigger(mob/living/target) . = ..() @@ -110,7 +110,7 @@ name = "Lightning Orb" desc = "You feel faster just looking at it." icon_state = "speed" - pickup_sound = 'sound/magic/lightningshock.ogg' + pickup_sound = 'sound/effects/magic/lightningshock.ogg' /obj/effect/powerup/speed/trigger(mob/living/target) . = ..() diff --git a/code/game/objects/effects/rcd.dm b/code/game/objects/effects/rcd.dm index 17ea3e44a10a1..03d77f0f84504 100644 --- a/code/game/objects/effects/rcd.dm +++ b/code/game/objects/effects/rcd.dm @@ -10,7 +10,7 @@ * * fade_time - The time for RCD holograms to fade */ /proc/rcd_scan(atom/source, scan_range = RCD_DESTRUCTIVE_SCAN_RANGE, fade_time = RCD_HOLOGRAM_FADE_TIME) - playsound(source, 'sound/items/rcdscan.ogg', 50, vary = TRUE, pressure_affected = FALSE) + playsound(source, 'sound/items/tools/rcdscan.ogg', 50, vary = TRUE, pressure_affected = FALSE) var/turf/source_turf = get_turf(source) for(var/turf/open/surrounding_turf as anything in RANGE_TURFS(scan_range, source_turf)) diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 50497d531e76f..d05d5f039256b 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -4,7 +4,7 @@ var/sparks = 0 //whether sparks spread var/virusProb = 20 //the chance for viruses to spread on the gibs var/gib_mob_type //generate a fake mob to transfer DNA from if we weren't passed a mob. - var/sound_to_play = 'sound/effects/blobattack.ogg' + var/sound_to_play = 'sound/effects/blob/blobattack.ogg' var/sound_vol = 60 var/list/gibtypes = list() //typepaths of the gib decals to spawn var/list/gibamounts = list() //amount to spawn for each gib decal type we'll spawn. diff --git a/code/game/objects/effects/spawners/message_in_a_bottle.dm b/code/game/objects/effects/spawners/message_in_a_bottle.dm new file mode 100644 index 0000000000000..c4ac63ad0be22 --- /dev/null +++ b/code/game/objects/effects/spawners/message_in_a_bottle.dm @@ -0,0 +1,25 @@ +/obj/effect/spawner/message_in_a_bottle + name = "message in a bottle" + desc = "Sending out an SOS" + icon = 'icons/effects/random_spawners.dmi' + icon_state = "message_bottle" + var/probability = 100 + +/obj/effect/spawner/message_in_a_bottle/Initialize(mapload) + . = ..() + if(!prob(probability)) + return INITIALIZE_HINT_QDEL + if(!SSpersistence.initialized) + RegisterSignal(SSpersistence, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(on_persistence_init)) + else + SSpersistence.load_message_bottle(loc) + return INITIALIZE_HINT_QDEL + +/obj/effect/spawner/message_in_a_bottle/proc/on_persistence_init(datum/source) + SIGNAL_HANDLER + UnregisterSignal(SSpersistence, COMSIG_SUBSYSTEM_POST_INITIALIZE) + SSpersistence.load_message_bottle(loc) + qdel(src) + +/obj/effect/spawner/message_in_a_bottle/low_prob + probability = 1.5 diff --git a/code/game/objects/effects/spawners/random/decoration.dm b/code/game/objects/effects/spawners/random/decoration.dm index 6116d22873317..35ad503cb2789 100644 --- a/code/game/objects/effects/spawners/random/decoration.dm +++ b/code/game/objects/effects/spawners/random/decoration.dm @@ -114,6 +114,27 @@ /obj/item/flashlight/glowstick/pink, ) + +/obj/effect/spawner/random/decoration/glowstick/on + name = "random colored glowstick (on)" + icon_state = "glowstick" + loot = list( + /obj/item/flashlight/glowstick, + /obj/item/flashlight/glowstick/red, + /obj/item/flashlight/glowstick/blue, + /obj/item/flashlight/glowstick/cyan, + /obj/item/flashlight/glowstick/orange, + /obj/item/flashlight/glowstick/yellow, + /obj/item/flashlight/glowstick/pink, + ) + +/obj/effect/spawner/random/decoration/glowstick/on/make_item(spawn_loc, type_path_to_make) + . = ..() + + var/obj/item/flashlight/glowstick = . + + glowstick.set_light_on(TRUE) + /obj/effect/spawner/random/decoration/paint name = "paint spawner" icon_state = "paint" diff --git a/code/game/objects/effects/spawners/random/medical.dm b/code/game/objects/effects/spawners/random/medical.dm index ccbc109254abe..050223525e6e8 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/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 359c147eb4fb5..289a2aba27600 100644 --- a/code/game/objects/effects/spawners/random/structure.dm +++ b/code/game/objects/effects/spawners/random/structure.dm @@ -23,6 +23,7 @@ /obj/effect/spawner/random/trash/mess = 30, /obj/item/kirbyplants/fern = 20, /obj/structure/closet/crate/decorations = 15, + /obj/effect/decal/remains/human/smokey/maintenance = 7, /obj/structure/destructible/cult/pants_altar = 1, ) diff --git a/code/game/objects/effects/spawners/random/trash.dm b/code/game/objects/effects/spawners/random/trash.dm index dfac8e4c0c814..6f6f5badc8e7e 100644 --- a/code/game/objects/effects/spawners/random/trash.dm +++ b/code/game/objects/effects/spawners/random/trash.dm @@ -89,7 +89,6 @@ /obj/item/trash/cnds = 1, /obj/item/trash/syndi_cakes = 1, /obj/item/trash/shrimp_chips = 1, - /obj/item/trash/waffles = 1, /obj/item/trash/tray = 1, ) @@ -325,3 +324,18 @@ if(istype(crushed_can)) crushed_can.icon_state = pick(soda_icons) return crushed_can + +/obj/effect/spawner/random/trash/ghetto_containers + name = "ghetto container spawner" + loot = list( + /obj/item/reagent_containers/cup/bucket = 5, + /obj/item/reagent_containers/cup/glass/bottle = 5, + /obj/item/reagent_containers/cup/glass/bottle/small = 5, + /obj/item/reagent_containers/cup/glass/mug = 5, + /obj/item/reagent_containers/cup/glass/shaker = 5, + /obj/item/reagent_containers/cup/watering_can/wood = 5, + /obj/item/reagent_containers/cup/mortar = 2, + /obj/item/reagent_containers/cup/soup_pot = 2, + /obj/item/reagent_containers/cup/blastoff_ampoule = 1, + /obj/item/reagent_containers/cup/maunamug = 1, + ) diff --git a/code/game/objects/effects/spiderwebs.dm b/code/game/objects/effects/spiderwebs.dm index 2d0f1b9b14de2..49765c059865b 100644 --- a/code/game/objects/effects/spiderwebs.dm +++ b/code/game/objects/effects/spiderwebs.dm @@ -14,7 +14,7 @@ /obj/structure/spider/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) if(damage_type == BURN)//the stickiness of the web mutes all attack sounds except fire damage type - playsound(loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/spider/run_atom_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) if(damage_flag == MELEE) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index ea9435bd6b4ee..7ab968c42b9a5 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -442,7 +442,7 @@ if(size_calc_target) layer = size_calc_target.layer + 0.01 var/icon/I = icon(size_calc_target.icon, size_calc_target.icon_state, size_calc_target.dir) - size_matrix = matrix() * (I.Height()/world.icon_size) + size_matrix = matrix() * (I.Height()/ICON_SIZE_Y) transform = size_matrix //scale the bleed overlay's size based on the target's icon size var/matrix/M = transform if(shrink) @@ -564,7 +564,7 @@ /obj/effect/constructing_effect/proc/attacked(mob/user) user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) user.changeNext_move(CLICK_CD_MELEE) - playsound(loc, 'sound/weapons/egloves.ogg', vol = 80, vary = TRUE) + playsound(loc, 'sound/items/weapons/egloves.ogg', vol = 80, vary = TRUE) end() /obj/effect/constructing_effect/attackby(obj/item/weapon, mob/user, params) diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index 14b7f43a82280..8c4ea163232e1 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -5,7 +5,7 @@ var/obj/effect/projectile/tracer/PB = new beam_type if(isnull(light_color_override)) light_color_override = color - PB.apply_vars(angle_between_points(starting, ending), midpoint.return_px(), midpoint.return_py(), color, pixel_length_between_points(starting, ending) / world.icon_size, midpoint.return_turf(), 0) + PB.apply_vars(angle_between_points(starting, ending), midpoint.return_px(), midpoint.return_py(), color, pixel_length_between_points(starting, ending) / ICON_SIZE_ALL, midpoint.return_turf(), 0) . = PB if(light_range > 0 && light_intensity > 0) var/list/turf/line = get_line(starting.return_turf(), ending.return_turf()) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 21a357baecd4d..f1017b6d25ba2 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -39,6 +39,12 @@ ///The config type to use for greyscaled belt overlays. Both this and greyscale_colors must be assigned to work. var/greyscale_config_belt + /// Greyscale config used when generating digitigrade versions of the sprite. + var/digitigrade_greyscale_config_worn + /// Greyscale colors used when generating digitigrade versions of the sprite. + /// Optional - If not set it will default to normal greyscale colors, or approximate them if those are unset as well + var/digitigrade_greyscale_colors + /* !!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!! IF YOU ADD MORE ICON CRAP TO THIS @@ -77,8 +83,10 @@ var/equip_sound ///Sound uses when picking the item up (into your hands) var/pickup_sound - ///Sound uses when dropping the item, or when its thrown. + ///Sound uses when dropping the item, or when its thrown if a thrown sound isn't specified. var/drop_sound + ///Sound used on impact when the item is thrown. + var/throw_drop_sound ///Do the drop and pickup sounds vary? var/sound_vary = FALSE ///Whether or not we use stealthy audio levels for this item's attack sounds @@ -264,7 +272,7 @@ if(!hitsound) if(damtype == BURN) - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' if(damtype == BRUTE) hitsound = SFX_SWING_HIT @@ -455,27 +463,36 @@ abstract_move(null) forceMove(T) -/obj/item/examine(mob/user) //This might be spammy. Remove? - . = ..() - - . += "[gender == PLURAL ? "They are" : "It is"] a [weight_class_to_text(w_class)] item." +/obj/item/examine_tags(mob/user) + var/list/parent_tags = ..() + parent_tags.Insert(1, weight_class_to_text(w_class)) // To make size display first, otherwise it looks goofy + . = parent_tags + .[weight_class_to_text(w_class)] = "[gender == PLURAL ? "They are" : "It is"] a [weight_class_to_text(w_class)] item." if(item_flags & CRUEL_IMPLEMENT) - . += "[src] seems quite practical for particularly morbid procedures and experiments." + .[span_red("morbid")] = "It seems quite practical for particularly morbid procedures and experiments." + + if (siemens_coefficient == 0) + .["insulated"] = "It is made from a robust electrical insulator and will block any electricity passing through it!" + else if (siemens_coefficient <= 0.5) + .["partially insulated"] = "It is made from a poor insulator that will dampen (but not fully block) electric shocks passing through it." if(resistance_flags & INDESTRUCTIBLE) - . += "[src] seems extremely robust! It'll probably withstand anything that could happen to it!" - else - if(resistance_flags & LAVA_PROOF) - . += "[src] is made of an extremely heat-resistant material, it'd probably be able to withstand lava!" - if(resistance_flags & (ACID_PROOF | UNACIDABLE)) - . += "[src] looks pretty robust! It'd probably be able to withstand acid!" - if(resistance_flags & FREEZE_PROOF) - . += "[src] is made of cold-resistant materials." - if(resistance_flags & FIRE_PROOF) - . += "[src] is made of fire-retardant materials." + .["indestructible"] = "It is extremely robust! It'll probably withstand anything that could happen to it!" return + if(resistance_flags & LAVA_PROOF) + .["lavaproof"] = "It is made of an extremely heat-resistant material, it'd probably be able to withstand lava!" + if(resistance_flags & (ACID_PROOF | UNACIDABLE)) + .["acidproof"] = "It looks pretty robust! It'd probably be able to withstand acid!" + if(resistance_flags & FREEZE_PROOF) + .["freezeproof"] = "It is made of cold-resistant materials." + if(resistance_flags & FIRE_PROOF) + .["fireproof"] = "It is made of fire-retardant materials." + +/obj/item/examine_descriptor(mob/user) + return "item" + /obj/item/examine_more(mob/user) . = ..() if(HAS_TRAIT(user, TRAIT_RESEARCH_SCANNER)) @@ -642,7 +659,7 @@ /obj/item/attack_alien(mob/user, list/modifiers) var/mob/living/carbon/alien/ayy = user - if(!user.can_hold_items(src)) + if(!ayy.can_hold_items(src)) if(src in ayy.contents) // To stop Aliens having items stuck in their pockets ayy.dropItemToGround(src) to_chat(user, span_warning("Your claws aren't capable of such fine manipulation!")) @@ -812,7 +829,7 @@ set category = "Object" set name = "Pick up" - if(usr.incapacitated() || !Adjacent(usr)) + if(usr.incapacitated || !Adjacent(usr)) return if(isliving(usr)) @@ -849,36 +866,33 @@ . = ..() do_drop_animation(master_storage.parent) +/obj/item/pre_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + var/impact_flags = ..() + if(w_class < WEIGHT_CLASS_BULKY) + impact_flags |= COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH + if(!(impact_flags & COMPONENT_MOVABLE_IMPACT_NEVERMIND) && get_temperature() && isliving(hit_atom)) + var/mob/living/victim = hit_atom + victim.ignite_mob() + return impact_flags + /obj/item/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(QDELETED(hit_atom)) - return - 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) + . = ..() + if(!isliving(hit_atom)) //Living mobs handle hit sounds differently. + if(throw_drop_sound) + playsound(src, throw_drop_sound, YEET_SOUND_VOLUME, ignore_walls = FALSE, vary = sound_vary) + return + playsound(src, drop_sound, YEET_SOUND_VOLUME, ignore_walls = FALSE, vary = sound_vary) 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() - var/itempush = 1 - if(w_class < WEIGHT_CLASS_BULKY) - itempush = 0 //too light to push anything - if(isliving(hit_atom)) //Living mobs handle hit sounds differently. - var/volume = get_volume_by_throwforce_and_or_w_class() - if (throwforce > 0 || HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND)) - if (mob_throw_hit_sound) - playsound(hit_atom, mob_throw_hit_sound, volume, TRUE, -1) - else if(hitsound) - playsound(hit_atom, hitsound, volume, TRUE, -1) - else - playsound(hit_atom, 'sound/weapons/genhit.ogg',volume, TRUE, -1) + var/volume = get_volume_by_throwforce_and_or_w_class() + if (throwforce > 0 || HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND)) + if (mob_throw_hit_sound) + playsound(hit_atom, mob_throw_hit_sound, volume, TRUE, -1) + else if(hitsound) + playsound(hit_atom, hitsound, volume, TRUE, -1) else - playsound(hit_atom, 'sound/weapons/throwtap.ogg', 1, volume, -1) - + playsound(hit_atom, 'sound/items/weapons/genhit.ogg',volume, TRUE, -1) else - playsound(src, drop_sound, YEET_SOUND_VOLUME, ignore_walls = FALSE) - return hit_atom.hitby(src, 0, itempush, throwingdatum=throwingdatum) + playsound(hit_atom, 'sound/items/weapons/throwtap.ogg', 1, volume, -1) /obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE) if(HAS_TRAIT(src, TRAIT_NODROP)) @@ -1099,7 +1113,7 @@ var/timedelay = usr.client.prefs.read_preference(/datum/preference/numeric/tooltip_delay) / 100 tip_timer = addtimer(CALLBACK(src, PROC_REF(openTip), location, control, params, usr), timedelay, TIMER_STOPPABLE)//timer takes delay in deciseconds, but the pref is in milliseconds. dividing by 100 converts it. if(usr.client.prefs.read_preference(/datum/preference/toggle/item_outlines)) - if(istype(L) && L.incapacitated()) + if(istype(L) && L.incapacitated) apply_outline(COLOR_RED_GRAY) //if they're dead or handcuffed, let's show the outline as red to indicate that they can't interact with that right now else apply_outline() //if the player's alive and well we send the command with no color set, so it uses the theme's color @@ -1201,13 +1215,13 @@ return TRUE /// Called before [obj/item/proc/use_tool] if there is a delay, or by [obj/item/proc/use_tool] if there isn't. Only ever used by welding tools and stacks, so it's not added on any other [obj/item/proc/use_tool] checks. -/obj/item/proc/tool_start_check(mob/living/user, amount=0) - . = tool_use_check(user, amount) +/obj/item/proc/tool_start_check(mob/living/user, amount=0, heat_required=0) + . = tool_use_check(user, amount, heat_required) if(.) SEND_SIGNAL(src, COMSIG_TOOL_START_USE, user) /// A check called by [/obj/item/proc/tool_start_check] once, and by use_tool on every tick of delay. -/obj/item/proc/tool_use_check(mob/living/user, amount) +/obj/item/proc/tool_use_check(mob/living/user, amount, heat_required) return !amount /// Generic use proc. Depending on the item, it uses up fuel, charges, sheets, etc. Returns TRUE on success, FALSE on failure. @@ -1354,7 +1368,7 @@ * Then, it checks tiny items. * After all that, it returns TRUE if the item is set to be discovered. Otherwise, it returns FALSE. * - * This works similarily to /suicide_act: if you want an item to have a unique interaction, go to that item + * This works similarly to /suicide_act: if you want an item to have a unique interaction, go to that item * and give it an /on_accidental_consumption proc override. For a simple example of this, check out the nuke disk. * * Arguments @@ -1379,7 +1393,7 @@ return source_item?.reagents?.add_reagent(/datum/reagent/blood, 2) - else if(custom_materials?.len) //if we've got materials, lets see whats in it + else if(custom_materials?.len) //if we've got materials, let's see what's in it // How many mats have we found? You can only be affected by two material datums by default var/found_mats = 0 // How much of each material is in it? Used to determine if the glass should break @@ -1851,9 +1865,11 @@ /obj/item/proc/set_embed(datum/embed_data/embed) if(embed_data == embed) return + if(isnull(get_embed())) // Add embed on objects that did not have it added + AddElement(/datum/element/embed) if(!GLOB.embed_by_type[embed_data?.type]) qdel(embed_data) - embed_data = ispath(embed) ? get_embed_by_type(armor) : embed + embed_data = ispath(embed) ? get_embed_by_type(embed) : embed SEND_SIGNAL(src, COMSIG_ITEM_EMBEDDING_UPDATE) /** @@ -1868,3 +1884,37 @@ RETURN_TYPE(/obj/item) return src + +/// Checks if the bait is liked by the fish type or not. Returns a multiplier that affects the chance of catching it. +/obj/item/proc/check_bait(obj/item/fish/fish_type) + if(HAS_TRAIT(src, TRAIT_OMNI_BAIT)) + return 1 + var/catch_multiplier = 1 + var/list/properties = SSfishing.fish_properties[fish_type] + //Bait matching likes doubles the chance + var/list/fav_bait = properties[FISH_PROPERTIES_FAV_BAIT] + for(var/bait_identifer in fav_bait) + if(is_matching_bait(src, bait_identifer)) + catch_multiplier *= 2 + //Bait matching dislikes + var/list/disliked_bait = properties[FISH_PROPERTIES_BAD_BAIT] + for(var/bait_identifer in disliked_bait) + if(is_matching_bait(src, bait_identifer)) + catch_multiplier *= 0.5 + return catch_multiplier + +/// Helper proc that checks if a bait matches identifier from fav/disliked bait list +/proc/is_matching_bait(obj/item/bait, identifier) + if(ispath(identifier)) //Just a path + return istype(bait, identifier) + if(!islist(identifier)) + return HAS_TRAIT(bait, identifier) + var/list/special_identifier = identifier + switch(special_identifier[FISH_BAIT_TYPE]) + if(FISH_BAIT_FOODTYPE) + var/datum/component/edible/edible = bait.GetComponent(/datum/component/edible) + return edible?.foodtypes & special_identifier[FISH_BAIT_VALUE] + if(FISH_BAIT_REAGENT) + return bait.reagents?.has_reagent(special_identifier[FISH_BAIT_VALUE], special_identifier[FISH_BAIT_AMOUNT], check_subtypes = TRUE) + else + CRASH("Unknown bait identifier in fish favourite/disliked list") diff --git a/code/game/objects/items/AI_modules/freeform.dm b/code/game/objects/items/AI_modules/freeform.dm index a0a91f7185e5a..05ef00c946772 100644 --- a/code/game/objects/items/AI_modules/freeform.dm +++ b/code/game/objects/items/AI_modules/freeform.dm @@ -8,7 +8,7 @@ laws = list("") /obj/item/ai_module/core/freeformcore/attack_self(mob/user) - var/targName = tgui_input_text(user, "Enter a new core law for the AI.", "Freeform Law Entry", laws[1], CONFIG_GET(number/max_law_len), TRUE) + var/targName = tgui_input_text(user, "Enter a new core law for the AI.", "Freeform Law Entry", laws[1], max_length = CONFIG_GET(number/max_law_len), multiline = TRUE) if(!targName || !user.is_holding(src)) return if(is_ic_filtered(targName)) @@ -37,7 +37,7 @@ if(!newpos || !user.is_holding(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return lawpos = newpos - var/targName = tgui_input_text(user, "Enter a new law for the AI.", "Freeform Law Entry", laws[1], CONFIG_GET(number/max_law_len), TRUE) + var/targName = tgui_input_text(user, "Enter a new law for the AI.", "Freeform Law Entry", laws[1], max_length = CONFIG_GET(number/max_law_len), multiline = TRUE) if(!targName || !user.is_holding(src)) return if(is_ic_filtered(targName)) diff --git a/code/game/objects/items/AI_modules/full_lawsets.dm b/code/game/objects/items/AI_modules/full_lawsets.dm index 30e904d45ac84..593bc43f2dcea 100644 --- a/code/game/objects/items/AI_modules/full_lawsets.dm +++ b/code/game/objects/items/AI_modules/full_lawsets.dm @@ -58,7 +58,7 @@ var/subject = "human being" /obj/item/ai_module/core/full/asimov/attack_self(mob/user as mob) - var/targName = tgui_input_text(user, "Enter a new subject that Asimov is concerned with.", "Asimov", subject, MAX_NAME_LEN) + var/targName = tgui_input_text(user, "Enter a new subject that Asimov is concerned with.", "Asimov", subject, max_length = MAX_NAME_LEN) if(!targName || !user.is_holding(src)) return subject = targName @@ -73,7 +73,7 @@ var/subject = "human being" /obj/item/ai_module/core/full/asimovpp/attack_self(mob/user) - var/target_name = tgui_input_text(user, "Enter a new subject that Asimov++ is concerned with.", "Asimov++", subject, MAX_NAME_LEN) + var/target_name = tgui_input_text(user, "Enter a new subject that Asimov++ is concerned with.", "Asimov++", subject, max_length = MAX_NAME_LEN) if(!target_name || !user.is_holding(src)) return laws.Cut() diff --git a/code/game/objects/items/AI_modules/hacked.dm b/code/game/objects/items/AI_modules/hacked.dm index 81100d0ed157b..41a1f38ba891d 100644 --- a/code/game/objects/items/AI_modules/hacked.dm +++ b/code/game/objects/items/AI_modules/hacked.dm @@ -4,7 +4,7 @@ laws = list("") /obj/item/ai_module/syndicate/attack_self(mob/user) - var/targName = tgui_input_text(user, "Enter a new law for the AI", "Freeform Law Entry", laws[1], CONFIG_GET(number/max_law_len), TRUE) + var/targName = tgui_input_text(user, "Enter a new law for the AI", "Freeform Law Entry", laws[1], max_length = CONFIG_GET(number/max_law_len), multiline = TRUE) if(!targName || !user.is_holding(src)) return if(is_ic_filtered(targName)) // not even the syndicate can uwu @@ -55,7 +55,7 @@ to_chat(sender, span_warning("You should use [src] on an AI upload console or the AI core itself.")) return if(malf_candidate.mind?.has_antag_datum(/datum/antagonist/malf_ai)) //Already malf - to_chat(sender, span_warning("Unknown error occured. Upload process aborted.")) + to_chat(sender, span_warning("Unknown error occurred. Upload process aborted.")) return var/datum/antagonist/malf_ai/infected/malf_datum = new (give_objectives = TRUE, new_boss = sender.mind) diff --git a/code/game/objects/items/AI_modules/supplied.dm b/code/game/objects/items/AI_modules/supplied.dm index b53e16a86b0c8..76f4715730620 100644 --- a/code/game/objects/items/AI_modules/supplied.dm +++ b/code/game/objects/items/AI_modules/supplied.dm @@ -27,7 +27,7 @@ lawpos = 4 /obj/item/ai_module/supplied/safeguard/attack_self(mob/user) - var/targName = tgui_input_text(user, "Subject to safeguard.", "Safeguard", user.name, MAX_NAME_LEN) + var/targName = tgui_input_text(user, "Subject to safeguard.", "Safeguard", user.name, max_length = MAX_NAME_LEN) if(!targName || !user.is_holding(src)) return targetName = targName diff --git a/code/game/objects/items/AI_modules/zeroth.dm b/code/game/objects/items/AI_modules/zeroth.dm index 74fc7ab8232ae..480735bfe2fe7 100644 --- a/code/game/objects/items/AI_modules/zeroth.dm +++ b/code/game/objects/items/AI_modules/zeroth.dm @@ -25,7 +25,7 @@ laws = list("Only SUBJECT is human.") /obj/item/ai_module/zeroth/onehuman/attack_self(mob/user) - var/targName = tgui_input_text(user, "Enter the subject who is the only human.", "One Human", user.real_name, MAX_NAME_LEN) + var/targName = tgui_input_text(user, "Enter the subject who is the only human.", "One Human", user.real_name, max_length = MAX_NAME_LEN) if(!targName || !user.is_holding(src)) return targetName = targName diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index 7eb5f2e93d8d7..672ec1586239d 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -229,7 +229,7 @@ * Actually add current decal to the floor. * * Responsible for actually adding the element to the turf for maximum flexibility.area - * Can be overriden for different decal behaviors. + * Can be overridden for different decal behaviors. * Arguments: * * target - The turf being painted to */ @@ -298,7 +298,7 @@ .["current_dir"] = stored_dir .["current_custom_color"] = stored_custom_color -/obj/item/airlock_painter/decal/ui_act(action, list/params) +/obj/item/airlock_painter/decal/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -394,6 +394,7 @@ list("Dark", "#0e0f0f"), list("Bar Burgundy", "#79150082"), list("Sec Blue", "#486091"), // SKYRAT EDIT CHANGE + list("Sec Red", "#DE3A3A"), list("Cargo Brown", "#A46106"), list("Engi Yellow", "#EFB341"), list("Service Green", "#9FED58"), diff --git a/code/game/objects/items/bear_armor.dm b/code/game/objects/items/bear_armor.dm index 8cfad42be15a6..140a3d295f11b 100644 --- a/code/game/objects/items/bear_armor.dm +++ b/code/game/objects/items/bear_armor.dm @@ -1,7 +1,7 @@ /obj/item/bear_armor 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." + are written on the back of one of the plates in Russian. This seems like an awful idea." icon = 'icons/obj/tools.dmi' icon_state = "bear_armor_upgrade" diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index c949f977508f1..4c83923355261 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -46,7 +46,7 @@ R.add_fingerprint(user) qdel(src) user.forceMove(R) - playsound(src, 'sound/items/zip.ogg', 15, TRUE, -3) + playsound(src, 'sound/items/zip/zip.ogg', 15, TRUE, -3) return OXYLOSS // Bluespace bodybag @@ -86,7 +86,7 @@ return item_bag /obj/item/bodybag/bluespace/container_resist_act(mob/living/user) - if(user.incapacitated()) + if(user.incapacitated) to_chat(user, span_warning("You can't get out while you're restrained like this!")) return user.changeNext_move(CLICK_CD_BREAKOUT) @@ -97,7 +97,7 @@ return // you are still in the bag? time to go unless you KO'd, honey! // if they escape during this time and you rebag them the timer is still clocking down and does NOT reset so they can very easily get out. - if(user.incapacitated()) + if(user.incapacitated) to_chat(loc, span_warning("The pressure subsides. It seems that they've stopped resisting...")) return loc.visible_message(span_warning("[user] suddenly appears in front of [loc]!"), span_userdanger("[user] breaks free of [src]!")) diff --git a/code/game/objects/items/boxcutter.dm b/code/game/objects/items/boxcutter.dm index 467bc666e6027..58be269bacddf 100644 --- a/code/game/objects/items/boxcutter.dm +++ b/code/game/objects/items/boxcutter.dm @@ -38,7 +38,7 @@ throwforce_on = 4, \ throw_speed_on = throw_speed, \ sharpness_on = SHARP_EDGED, \ - hitsound_on = 'sound/weapons/bladeslice.ogg', \ + hitsound_on = 'sound/items/weapons/bladeslice.ogg', \ w_class_on = WEIGHT_CLASS_NORMAL, \ attack_verb_continuous_on = list("cuts", "stabs", "slashes"), \ attack_verb_simple_on = list("cut", "stab", "slash"), \ diff --git a/code/game/objects/items/broom.dm b/code/game/objects/items/broom.dm index fa849c51437da..32636b1a99c81 100644 --- a/code/game/objects/items/broom.dm +++ b/code/game/objects/items/broom.dm @@ -102,7 +102,7 @@ for (var/obj/item/garbage in items_to_sweep) garbage.Move(new_item_loc, sweep_dir) - playsound(current_item_loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) + playsound(current_item_loc, 'sound/items/weapons/thudswoosh.ogg', 30, TRUE, -1) /obj/item/pushbroom/cyborg name = "cyborg push broom" diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index d4508710a8547..960363685b1e8 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -49,7 +49,7 @@ if(!user.combat_mode || pushed_over || !isturf(loc)) return ..() user.visible_message(span_warning("[user] pushes over [src]!"), span_danger("You push over [src]!")) - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) push_over() /obj/item/cardboard_cutout/equipped(mob/living/user, slot) @@ -149,7 +149,7 @@ /obj/item/cardboard_cutout/proc/check_menu(mob/living/user, obj/item/toy/crayon/crayon) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE if(pushed_over) to_chat(user, span_warning("Right [src] first!")) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index de2395bfcc91d..5518f7fa8366a 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -87,7 +87,7 @@ var/holopay_name = "holographic pay stand" /// Registered owner's age. - var/registered_age = 18 //SKYRAT EDIT - ORIGINAL (13) + var/registered_age = 18 //SKYRAT EDIT - ORIGINAL (30) /// The job name registered on the card (for example: Assistant). var/assignment @@ -104,6 +104,11 @@ /// Boolean value. If TRUE, the [Intern] tag gets prepended to this ID card when the label is updated. var/is_intern = FALSE + ///If true, the wearer will have bigger arrow when pointing at things. Passed down by trims. + var/big_pointer = FALSE + ///If set, the arrow will have a different color. + var/pointer_color + /datum/armor/card_id fire = 100 acid = 100 @@ -120,7 +125,7 @@ /obj/item/card/id/Initialize(mapload) . = ..() - var/datum/bank_account/blank_bank_account = new("Unassigned", SSjob.GetJobType(/datum/job/unassigned), player_account = FALSE) + var/datum/bank_account/blank_bank_account = new("Unassigned", SSjob.get_job_type(/datum/job/unassigned), player_account = FALSE) registered_account = blank_bank_account registered_account.replaceable = TRUE @@ -144,12 +149,35 @@ QDEL_NULL(my_store) return ..() +/obj/item/card/id/equipped(mob/user, slot) + . = ..() + if(slot == ITEM_SLOT_ID) + RegisterSignal(user, COMSIG_MOVABLE_POINTED, PROC_REF(on_pointed)) + +/obj/item/card/id/proc/on_pointed(mob/living/user, atom/pointed, obj/effect/temp_visual/point/point) + SIGNAL_HANDLER + if((!big_pointer && !pointer_color) || HAS_TRAIT(user, TRAIT_UNKNOWN)) + return + if(point.icon_state != /obj/effect/temp_visual/point::icon_state) //it differs from the original icon_state already. + return + if(big_pointer) + point.icon_state = "arrow_large" + if(pointer_color) + point.icon_state = "[point.icon_state]_white" + point.color = pointer_color + var/mutable_appearance/highlight = mutable_appearance(point.icon, "[point.icon_state]_highlights", appearance_flags = RESET_COLOR) + point.add_overlay(highlight) + +/obj/item/card/id/dropped(mob/user) + UnregisterSignal(user, COMSIG_MOVABLE_POINTED) + return ..() + /obj/item/card/id/get_id_examine_strings(mob/user) . = ..() - . += list("[icon2html(get_cached_flat_icon(), user, extra_classes = "bigicon")]") + . += list("[icon2html(get_cached_flat_icon(), user, extra_classes = "hugeicon")]") -/obj/item/card/id/get_examine_string(mob/user, thats = FALSE) - return "[icon2html(get_cached_flat_icon(), user)] [thats? "That's ":""][get_examine_name(user)]" +/obj/item/card/id/get_examine_icon(mob/user) + return icon2html(get_cached_flat_icon(), user) /** * Helper proc, checks whether the ID card can hold any given set of wildcards. @@ -744,7 +772,7 @@ 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...") - var/sound/slowbeat = sound('sound/health/slowbeat.ogg', repeat = TRUE) + var/sound/slowbeat = sound('sound/effects/health/slowbeat.ogg', repeat = TRUE) user.playsound_local(get_turf(src), slowbeat, 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) if(isliving(user)) var/mob/living/living_user = user @@ -787,7 +815,7 @@ if(registered_account.replaceable) . += span_info("Alt-Right-Click the ID to change the linked bank account.") if(registered_account.civilian_bounty) - . += "There is an active civilian bounty." + . += span_info("There is an active civilian bounty.") . += span_info("[registered_account.bounty_text()]") . += span_info("Quantity: [registered_account.bounty_num()]") . += span_info("Reward: [registered_account.bounty_value()]") @@ -966,6 +994,11 @@ return ..() +/obj/item/card/id/advanced/proc/after_input_check(mob/user) + if(QDELETED(user) || QDELETED(src) || !user.client || !user.can_perform_action(src, NEED_DEXTERITY|FORBID_TELEKINESIS_REACH)) + return FALSE + return TRUE + /obj/item/card/id/advanced/item_interaction(mob/living/user, obj/item/tool, list/modifiers) . = ..() if(.) @@ -1268,7 +1301,7 @@ . = ..() registered_account = new(player_account = FALSE) registered_account.account_id = ADMIN_ACCOUNT_ID // this is so bank_card_talk() can work. - registered_account.account_job = SSjob.GetJobType(/datum/job/admin) + registered_account.account_job = SSjob.get_job_type(/datum/job/admin) registered_account.account_balance += 999999 // MONEY! We add more money to the account every time we spawn because it's a debug item and infinite money whoopie /obj/item/card/id/advanced/debug/alt_click_can_use_id(mob/living/user) @@ -1421,6 +1454,44 @@ trim = /datum/id_trim/highlander wildcard_slots = WILDCARD_LIMIT_ADMIN +/// An ID that you can flip with attack_self_secondary, overriding the appearance of the ID (useful for plainclothes detectives for example). +/obj/item/card/id/advanced/plainclothes + name = "Plainclothes ID" + ///The trim that we use as plainclothes identity + var/alt_trim = /datum/id_trim/job/assistant + +/obj/item/card/id/advanced/plainclothes/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_LMB] = "Show/Flip ID" + +/obj/item/card/id/advanced/plainclothes/examine(mob/user) + . = ..() + if(trim_assignment_override) + . += span_smallnotice("it's currently under plainclothes identity.") + else + . += span_smallnotice("flip it to switch to the plainclothes identity.") + +/obj/item/card/id/advanced/plainclothes/attack_self(mob/user) + var/popup_input = tgui_input_list(user, "Choose Action", "Two-Sided ID", list("Show", "Flip")) + if(!popup_input || !after_input_check(user)) + return TRUE + if(popup_input == "Show") + return ..() + balloon_alert(user, "flipped") + if(trim_assignment_override) + SSid_access.remove_trim_from_chameleon_card(src) + else + SSid_access.apply_trim_to_chameleon_card(src, alt_trim) + update_label() + update_appearance() + +/obj/item/card/id/advanced/plainclothes/update_label() + if(!trim_assignment_override) + return ..() + var/name_string = registered_name ? "[registered_name]'s ID Card" : initial(name) + var/datum/id_trim/fake = SSid_access.trim_singletons_by_path[alt_trim] + name = "[name_string] ([fake.assignment])" + /obj/item/card/id/advanced/chameleon name = "agent card" desc = "A highly advanced chameleon ID card. Touch this card on another ID card or player to choose which accesses to copy. \ @@ -1561,7 +1632,7 @@ return data -/obj/item/card/id/advanced/chameleon/ui_act(action, list/params) +/obj/item/card/id/advanced/chameleon/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -1635,8 +1706,9 @@ to_chat(user, span_notice("You successfully reset the ID card.")) return - ///forge the ID if not forged. - var/input_name = tgui_input_text(user, "What name would you like to put on this card? Leave blank to randomise.", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name), MAX_NAME_LEN) + ///forge the ID if not forged.s + var/input_name = tgui_input_text(user, "What name would you like to put on this card? Leave blank to randomise.", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name), max_length = MAX_NAME_LEN, encode = FALSE) + if(!after_input_check(user)) return TRUE if(input_name) @@ -1666,7 +1738,7 @@ if(!after_input_check(user)) return TRUE - var/target_occupation = tgui_input_text(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels.", "Agent card job assignment", assignment ? assignment : "Assistant", MAX_NAME_LEN) + var/target_occupation = tgui_input_text(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels.", "Agent card job assignment", assignment ? assignment : "Assistant", max_length = MAX_NAME_LEN) if(!after_input_check(user)) return TRUE @@ -1703,11 +1775,6 @@ registered_account = account to_chat(user, span_notice("Your account number has been automatically assigned.")) -/obj/item/card/id/advanced/chameleon/proc/after_input_check(mob/user) - if(QDELETED(user) || QDELETED(src) || !user.client || !user.can_perform_action(src, NEED_DEXTERITY|FORBID_TELEKINESIS_REACH)) - return FALSE - return TRUE - /obj/item/card/id/advanced/chameleon/add_item_context(obj/item/source, list/context, atom/target, mob/living/user,) . = ..() @@ -1825,15 +1892,15 @@ return switch(popup_input) if("Name") - var/input_name = tgui_input_text(user, "What name would you like to put on this card?", "Cardboard card name", scribbled_name || (ishuman(user) ? user.real_name : user.name), MAX_NAME_LEN) - input_name = sanitize_name(input_name, allow_numbers = TRUE) + var/raw_input = tgui_input_text(user, "What name would you like to put on this card?", "Cardboard card name", scribbled_name || (ishuman(user) ? user.real_name : user.name), max_length = MAX_NAME_LEN) + var/input_name = sanitize_name(raw_input, allow_numbers = TRUE) if(!after_input_check(user, item, input_name, scribbled_name)) return scribbled_name = input_name var/list/details = item.get_writing_implement_details() details_colors[INDEX_NAME_COLOR] = details["color"] || COLOR_BLACK if("Assignment") - var/input_assignment = tgui_input_text(user, "What assignment would you like to put on this card?", "Cardboard card job ssignment", scribbled_assignment || "Assistant", MAX_NAME_LEN) + var/input_assignment = tgui_input_text(user, "What assignment would you like to put on this card?", "Cardboard card job ssignment", scribbled_assignment || "Assistant", max_length = MAX_NAME_LEN) if(!after_input_check(user, item, input_assignment, scribbled_assignment)) return scribbled_assignment = sanitize(input_assignment) @@ -1866,7 +1933,7 @@ /obj/item/card/cardboard/proc/after_input_check(mob/living/user, obj/item/item, input, value) if(!input || (value && input == value)) return FALSE - if(QDELETED(user) || QDELETED(item) || QDELETED(src) || user.incapacitated() || !user.is_holding(item) || !user.CanReach(src) || !user.can_write(item)) + if(QDELETED(user) || QDELETED(item) || QDELETED(src) || user.incapacitated || !user.is_holding(item) || !user.CanReach(src) || !user.can_write(item)) return FALSE return TRUE @@ -1903,10 +1970,10 @@ /obj/item/card/cardboard/get_id_examine_strings(mob/user) . = ..() - . += list("[icon2html(get_cached_flat_icon(), user, extra_classes = "bigicon")]") + . += list("[icon2html(get_cached_flat_icon(), user, extra_classes = "hugeicon")]") -/obj/item/card/cardboard/get_examine_string(mob/user, thats = FALSE) - return "[icon2html(get_cached_flat_icon(), user)] [thats? "That's ":""][get_examine_name(user)]" +/obj/item/card/cardboard/get_examine_icon(mob/user) + return icon2html(get_cached_flat_icon(), user) /obj/item/card/cardboard/examine(mob/user) . = ..() diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/chainsaw.dm index 68501057ebf42..c74e446a6ca35 100644 --- a/code/game/objects/items/chainsaw.dm +++ b/code/game/objects/items/chainsaw.dm @@ -47,13 +47,13 @@ /obj/item/chainsaw/suicide_act(mob/living/carbon/user) if(on) user.visible_message(span_suicide("[user] begins to tear [user.p_their()] head off with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/weapons/chainsawhit.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/chainsawhit.ogg', 100, TRUE) var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) if(myhead) myhead.dismember() else user.visible_message(span_suicide("[user] smashes [src] into [user.p_their()] neck, destroying [user.p_their()] esophagus! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/weapons/genhit1.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/genhit1.ogg', 100, TRUE) return BRUTELOSS /obj/item/chainsaw/attack_self(mob/user) @@ -66,7 +66,7 @@ butchering.butchering_enabled = on if(on) - hitsound = 'sound/weapons/chainsawhit.ogg' + hitsound = 'sound/items/weapons/chainsawhit.ogg' chainsaw_loop.start() else hitsound = SFX_SWING_HIT @@ -79,8 +79,7 @@ /** * Handles adding components to the chainsaw. Added in Initialize() - * - * Applies components to the chainsaw. Added as a seperate proc to allow for + * Applies components to the chainsaw. Added as a separate proc to allow for * variance between subtypes */ /obj/item/chainsaw/proc/apply_components() @@ -88,14 +87,14 @@ speed = 3 SECONDS, \ effectiveness = 100, \ bonus_modifier = 0, \ - butcher_sound = 'sound/weapons/chainsawhit.ogg', \ + butcher_sound = 'sound/items/weapons/chainsawhit.ogg', \ disabled = TRUE, \ ) AddComponent(/datum/component/two_handed, require_twohands=TRUE) /obj/item/chainsaw/doomslayer name = "THE GREAT COMMUNICATOR" - desc = "VRRRRRRR!!!" + desc = span_warning("VRRRRRRR!!!") armour_penetration = 100 force_on = 30 @@ -110,7 +109,7 @@ if (isnull(head)) return ..() - playsound(user, 'sound/weapons/slice.ogg', vol = 80, vary = TRUE) + playsound(user, 'sound/items/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))) @@ -124,7 +123,7 @@ /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!")) - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) + playsound(src, pick('sound/items/weapons/bulletflyby.ogg', 'sound/items/weapons/bulletflyby2.ogg', 'sound/items/weapons/bulletflyby3.ogg'), 75, TRUE) return TRUE return FALSE @@ -162,7 +161,7 @@ speed = 3 SECONDS, \ effectiveness = 100, \ bonus_modifier = 0, \ - butcher_sound = 'sound/weapons/chainsawhit.ogg', \ + butcher_sound = 'sound/items/weapons/chainsawhit.ogg', \ disabled = TRUE, \ ) diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 1d1f8fad7cc56..6b4ae0f918394 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -69,8 +69,8 @@ if(!response_timer_id) return var/turf/T = get_turf(src) - T.visible_message("The proposed changes disappear \ - from [src]; it looks like they've been rejected.") + T.visible_message(span_warning("The proposed changes disappear \ + from [src]; it looks like they've been rejected.")) var/m = "[key_name(user)] has rejected the proposed station name." message_admins(m) diff --git a/code/game/objects/items/choice_beacon.dm b/code/game/objects/items/choice_beacon.dm index 6bd6472d9c8f1..aa51d71c5eda4 100644 --- a/code/game/objects/items/choice_beacon.dm +++ b/code/game/objects/items/choice_beacon.dm @@ -30,7 +30,7 @@ if(user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, TRUE) return FALSE /// Opens a menu and allows the mob to pick an option from the list @@ -162,7 +162,7 @@ // just drops the box at their feet, "quiet" and "sneaky" /obj/item/choice_beacon/augments/spawn_option(obj/choice_path, mob/living/user) new choice_path(get_turf(user)) - playsound(src, 'sound/weapons/emitter2.ogg', 50, extrarange = SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/items/weapons/emitter2.ogg', 50, extrarange = SILENCED_SOUND_EXTRARANGE) /obj/item/choice_beacon/holy name = "armaments beacon" @@ -176,7 +176,7 @@ if(user.mind?.holy_role) return ..() - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, TRUE) return FALSE // Overrides generate options so that we can show a neat radial instead diff --git a/code/game/objects/items/chromosome.dm b/code/game/objects/items/chromosome.dm index d7fd7b39544be..dcfc7930ebfe2 100644 --- a/code/game/objects/items/chromosome.dm +++ b/code/game/objects/items/chromosome.dm @@ -2,7 +2,7 @@ name = "blank chromosome" icon = 'icons/obj/science/chromosomes.dmi' icon_state = "" - desc = "A tube holding chromosomic data." + desc = "A tube holding chromosomal data." force = 0 w_class = WEIGHT_CLASS_SMALL @@ -16,7 +16,7 @@ /obj/item/chromosome/proc/can_apply(datum/mutation/human/HM) if(!HM || !(HM.can_chromosome == CHROMOSOME_NONE)) return FALSE - if((stabilizer_coeff != 1) && (HM.stabilizer_coeff != -1)) //if the chromosome is 1, we dont change anything. If the mutation is -1, we cant change it. sorry + if((stabilizer_coeff != 1) && (HM.stabilizer_coeff != -1)) //if the chromosome is 1, we don't change anything. If the mutation is -1, we can't change it. sorry return TRUE if((synchronizer_coeff != 1) && (HM.synchronizer_coeff != -1)) return TRUE diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigarettes.dm similarity index 76% rename from code/game/objects/items/cigs_lighters.dm rename to code/game/objects/items/cigarettes.dm index 69764c17b0df5..01daa174a295c 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigarettes.dm @@ -6,8 +6,6 @@ MATCHES CIGARETTES CIGARS SMOKING PIPES -CHEAP LIGHTERS -ZIPPO CIGARETTE PACKETS ARE IN FANCY.DM */ @@ -52,7 +50,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_state = "match_lit" damtype = BURN force = 3 - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' inhand_icon_state = "cigon" name = "lit [initial(name)]" desc = "A [initial(name)]. This one is lit." @@ -137,6 +135,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM name = "cigarette" desc = "A roll of tobacco and nicotine. It is not food." icon = 'icons/obj/cigarettes.dmi' + worn_icon = 'icons/mob/clothing/mask.dmi' icon_state = "cigoff" inhand_icon_state = "cigon" //gets overriden during intialize(), just have it for unit test sanity. throw_speed = 0.5 @@ -205,7 +204,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM // "It is called a cigarette" AddComponent(/datum/component/edible,\ initial_reagents = list_reagents,\ - food_flags = null,\ + food_flags = FOOD_NO_EXAMINE,\ foodtypes = JUNKFOOD,\ volume = 50,\ eat_time = 0 SECONDS,\ @@ -215,7 +214,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM junkiness = 0,\ reagent_purity = null,\ on_consume = CALLBACK(src, PROC_REF(on_consume)),\ - show_examine = FALSE, \ ) /obj/item/cigarette/Destroy() @@ -249,7 +247,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(!QDELETED(src) && !QDELETED(dropee) && how_long_have_we_been_smokin >= 4 SECONDS && iscarbon(dropee) && iscarbon(loc)) var/mob/living/carbon/smoker = dropee // This relies on the fact that dropped is called before slot is nulled - if(src == smoker.wear_mask && !smoker.incapacitated()) + if(src == smoker.wear_mask && !smoker.incapacitated) long_exhale(smoker) UnregisterSignal(dropee, list(COMSIG_HUMAN_FORCESAY, COMSIG_ATOM_DIR_CHANGE)) @@ -354,7 +352,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM return lit = TRUE - playsound(src.loc, 'sound/items/cig_light.ogg', 100, 1) + playsound(src.loc, 'sound/items/lighter/cig_light.ogg', 100, 1) make_cig_smoke() if(!(flags_1 & INITIALIZED_1)) update_appearance(UPDATE_ICON) @@ -362,7 +360,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM attack_verb_continuous = string_list(list("burns", "singes")) attack_verb_simple = string_list(list("burn", "singe")) - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' damtype = BURN force = 4 if(reagents.get_reagent_amount(/datum/reagent/toxin/plasma)) // the plasma explodes when exposed to fire @@ -409,7 +407,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM STOP_PROCESSING(SSobj, src) reagents.flags |= NO_REACT lit = FALSE - playsound(src.loc, 'sound/items/cig_snuff.ogg', 100, 1) + playsound(src.loc, 'sound/items/lighter/cig_snuff.ogg', 100, 1) update_appearance(UPDATE_ICON) if(ismob(loc)) to_chat(loc, span_notice("Your [name] goes out.")) @@ -696,6 +694,27 @@ CIGARETTE PACKETS ARE IN FANCY.DM pixel_y = rand(-5, 5) +/obj/item/cigarette/dart + name = "fat dart" + desc = "Chuff back this fat dart" + icon_state = "bigon" + icon_on = "bigon" + icon_off = "bigoff" + w_class = WEIGHT_CLASS_BULKY + smoketime = 18 MINUTES + chem_volume = 65 + list_reagents = list(/datum/reagent/drug/nicotine = 45) + choke_time_max = 40 SECONDS + lung_harm = 2 + +/obj/item/cigarette/dart/Initialize(mapload) + . = ..() + //the compiled icon state is how it appears when it's on. + //That's how we want it to show on orbies (little virtual PDA pets). + //However we should reset their appearance on runtime. + update_appearance(UPDATE_ICON_STATE) + + //////////// // CIGARS // //////////// @@ -836,319 +855,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM inhand_icon_on = null inhand_icon_off = null -///////// -//ZIPPO// -///////// -/obj/item/lighter - name = "\improper Zippo lighter" - desc = "The zippo." - icon = 'icons/obj/cigarettes.dmi' - icon_state = "zippo" - inhand_icon_state = "zippo" - worn_icon_state = "lighter" - w_class = WEIGHT_CLASS_TINY - obj_flags = CONDUCTS_ELECTRICITY - slot_flags = ITEM_SLOT_BELT - heat = 1500 - resistance_flags = FIRE_PROOF - grind_results = list(/datum/reagent/iron = 1, /datum/reagent/fuel = 5, /datum/reagent/fuel/oil = 5) - custom_price = PAYCHECK_CREW * 1.1 - light_system = OVERLAY_LIGHT - light_range = 2 - light_power = 1.3 - light_color = LIGHT_COLOR_FIRE - light_on = FALSE - /// Whether the lighter is lit. - var/lit = FALSE - /// Whether the lighter is fancy. Fancy lighters have fancier flavortext and won't burn thumbs. - var/fancy = TRUE - /// The engraving overlay used by this lighter. - var/overlay_state - /// A list of possible engraving overlays. - var/overlay_list = list( - "plain", - "dame", - "thirteen", - "snake" - ) - -/obj/item/lighter/Initialize(mapload) - . = ..() - if(!overlay_state) - overlay_state = pick(overlay_list) - AddComponent(\ - /datum/component/bullet_intercepting,\ - block_chance = 0.5,\ - active_slots = ITEM_SLOT_SUITSTORE,\ - on_intercepted = CALLBACK(src, PROC_REF(on_intercepted_bullet)),\ - ) - update_appearance() - -/// Destroy the lighter when it's shot by a bullet -/obj/item/lighter/proc/on_intercepted_bullet(mob/living/victim, obj/projectile/bullet) - victim.visible_message(span_warning("\The [bullet] shatters on [victim]'s lighter!")) - playsound(victim, SFX_RICOCHET, 100, TRUE) - new /obj/effect/decal/cleanable/oil(get_turf(src)) - do_sparks(1, TRUE, src) - victim.dropItemToGround(src, force = TRUE, silent = TRUE) - qdel(src) - -/obj/item/lighter/cyborg_unequip(mob/user) - if(!lit) - return - set_lit(FALSE) - -/obj/item/lighter/suicide_act(mob/living/carbon/user) - if (lit) - user.visible_message(span_suicide("[user] begins holding \the [src]'s flame up to [user.p_their()] face! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/items/welder.ogg', 50, TRUE) - return FIRELOSS - else - user.visible_message(span_suicide("[user] begins whacking [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - return BRUTELOSS - -/obj/item/lighter/update_icon_state() - icon_state = "[initial(icon_state)][lit ? "-on" : ""]" - return ..() - -/obj/item/lighter/update_overlays() - . = ..() - . += create_lighter_overlay() - -/// Generates an overlay used by this lighter. -/obj/item/lighter/proc/create_lighter_overlay() - return mutable_appearance(icon, "lighter_overlay_[overlay_state][lit ? "-on" : ""]") - -/obj/item/lighter/ignition_effect(atom/A, mob/user) - if(get_temperature()) - . = span_infoplain(span_rose("With a single flick of [user.p_their()] wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool.")) - -/obj/item/lighter/proc/set_lit(new_lit) - if(lit == new_lit) - return - - lit = new_lit - if(lit) - force = 5 - damtype = BURN - hitsound = 'sound/items/welder.ogg' - attack_verb_continuous = string_list(list("burns", "singes")) - attack_verb_simple = string_list(list("burn", "singe")) - START_PROCESSING(SSobj, src) - if(isliving(loc)) - var/mob/living/male_model = loc - if(male_model.fire_stacks && !(male_model.on_fire)) - male_model.ignite_mob() - else - hitsound = SFX_SWING_HIT - force = 0 - attack_verb_continuous = null //human_defense.dm takes care of it - attack_verb_simple = null - STOP_PROCESSING(SSobj, src) - set_light_on(lit) - update_appearance() - -/obj/item/lighter/extinguish() - . = ..() - set_lit(FALSE) - -/obj/item/lighter/attack_self(mob/living/user) - if(!user.is_holding(src)) - return ..() - if(lit) - set_lit(FALSE) - if(fancy) - user.visible_message( - 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.loc , 'sound/items/zippo_off.ogg', 100, 1) - else - user.visible_message( - span_notice("[user] quietly shuts off [src]."), - span_notice("You quietly shut off [src].") - ) - playsound(src.loc , 'sound/items/lighter_off.ogg', 100, 1) - return - - set_lit(TRUE) - if(fancy) - user.visible_message( - 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.loc , 'sound/items/zippo_on.ogg', 100, 1) - return - else - playsound(src.loc, 'sound/items/lighter_on.ogg', 100, 1) - - var/hand_protected = FALSE - var/mob/living/carbon/human/human_user = user - if(!istype(human_user) || HAS_TRAIT(human_user, TRAIT_RESISTHEAT) || HAS_TRAIT(human_user, TRAIT_RESISTHEATHANDS)) - hand_protected = TRUE - else if(!istype(human_user.gloves, /obj/item/clothing/gloves)) - hand_protected = FALSE - else - var/obj/item/clothing/gloves/gloves = human_user.gloves - if(gloves.max_heat_protection_temperature) - hand_protected = (gloves.max_heat_protection_temperature > 360) - - if(hand_protected || prob(75)) - user.visible_message( - span_notice("After a few attempts, [user] manages to light [src]."), - span_notice("After a few attempts, you manage to light [src].") - ) - return - - var/hitzone = user.held_index_to_dir(user.active_hand_index) == "r" ? BODY_ZONE_PRECISE_R_HAND : BODY_ZONE_PRECISE_L_HAND - user.apply_damage(5, BURN, hitzone) - user.visible_message( - span_warning("After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn[user.p_s()] [user.p_their()] finger in the process."), - span_warning("You burn yourself while lighting the lighter!") - ) - user.add_mood_event("burnt_thumb", /datum/mood_event/burnt_thumb) - - -/obj/item/lighter/attack(mob/living/carbon/M, mob/living/carbon/user) - if(lit && M.ignite_mob()) - message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(M)] on fire with [src] at [AREACOORD(user)]") - log_game("[key_name(user)] set [key_name(M)] on fire with [src] at [AREACOORD(user)]") - var/obj/item/cigarette/cig = help_light_cig(M) - if(!lit || !cig || user.combat_mode) - ..() - return - - if(cig.lit) - to_chat(user, span_warning("The [cig.name] is already lit!")) - if(M == user) - cig.attackby(src, user) - return - - if(fancy) - cig.light(span_rose("[user] whips the [name] out and holds it for [M]. [user.p_Their()] arm is as steady as the unflickering flame [user.p_they()] light[user.p_s()] \the [cig] with.")) - else - cig.light(span_notice("[user] holds the [name] out for [M], and lights [M.p_their()] [cig.name].")) - - -/obj/item/lighter/process() - open_flame(heat) - -/obj/item/lighter/get_temperature() - return lit * heat - - -/obj/item/lighter/greyscale - name = "cheap lighter" - desc = "A cheap lighter." - icon_state = "lighter" - fancy = FALSE - overlay_list = list( - "transp", - "tall", - "matte", - "zoppo" //u cant stoppo th zoppo - ) - - /// The color of the lighter. - var/lighter_color - /// The set of colors this lighter can be autoset as on init. - var/list/color_list = list( //Same 16 color selection as electronic assemblies - COLOR_ASSEMBLY_BLACK, - COLOR_FLOORTILE_GRAY, - COLOR_ASSEMBLY_BGRAY, - COLOR_ASSEMBLY_WHITE, - COLOR_ASSEMBLY_RED, - COLOR_ASSEMBLY_ORANGE, - COLOR_ASSEMBLY_BEIGE, - COLOR_ASSEMBLY_BROWN, - COLOR_ASSEMBLY_GOLD, - COLOR_ASSEMBLY_YELLOW, - COLOR_ASSEMBLY_GURKHA, - COLOR_ASSEMBLY_LGREEN, - COLOR_ASSEMBLY_GREEN, - COLOR_ASSEMBLY_LBLUE, - COLOR_ASSEMBLY_BLUE, - COLOR_ASSEMBLY_PURPLE - ) - -/obj/item/lighter/greyscale/Initialize(mapload) - . = ..() - if(!lighter_color) - lighter_color = pick(color_list) - update_appearance() - -/obj/item/lighter/greyscale/create_lighter_overlay() - var/mutable_appearance/lighter_overlay = ..() - lighter_overlay.color = lighter_color - return lighter_overlay - -/obj/item/lighter/greyscale/ignition_effect(atom/A, mob/user) - if(get_temperature()) - . = span_notice("After some fiddling, [user] manages to light [A] with [src].") - - -/obj/item/lighter/slime - name = "slime zippo" - desc = "A specialty zippo made from slimes and industry. Has a much hotter flame than normal." - icon_state = "slighter" - heat = 3000 //Blue flame! - light_color = LIGHT_COLOR_CYAN - overlay_state = "slime" - grind_results = list(/datum/reagent/iron = 1, /datum/reagent/fuel = 5, /datum/reagent/medicine/pyroxadone = 5) - -/obj/item/lighter/skull - name = "badass zippo" - desc = "An absolutely badass zippo lighter. Just look at that skull!" - overlay_state = "skull" - -/obj/item/lighter/mime - name = "pale zippo" - desc = "In lieu of fuel, performative spirit can be used to light cigarettes." - icon_state = "mlighter" //These ones don't show a flame. - light_color = LIGHT_COLOR_HALOGEN - heat = 0 //I swear it's a real lighter dude you just can't see the flame dude I promise - overlay_state = "mime" - grind_results = list(/datum/reagent/iron = 1, /datum/reagent/toxin/mutetoxin = 5, /datum/reagent/consumable/nothing = 10) - light_range = 0 - light_power = 0 - fancy = FALSE - -/obj/item/lighter/mime/ignition_effect(atom/A, mob/user) - . = span_infoplain("[user] lifts the [name] to the [A], which miraculously lights!") - -/obj/item/lighter/bright - name = "illuminative zippo" - desc = "Sustains an incredibly bright chemical reaction when you spark it. Avoid looking directly at the igniter when lit." - icon_state = "slighter" - light_color = LIGHT_COLOR_ELECTRIC_CYAN - overlay_state = "bright" - grind_results = list(/datum/reagent/iron = 1, /datum/reagent/flash_powder = 10) - light_range = 8 - light_power = 3 //Irritatingly bright and large enough to cover a small room. - fancy = FALSE - -/obj/item/lighter/bright/examine(mob/user) - . = ..() - - if(lit && isliving(user)) - var/mob/living/current_viewer = user - current_viewer.flash_act(4) - -/obj/item/lighter/bright/ignition_effect(atom/A, mob/user) - if(get_temperature()) - . = span_infoplain(span_rose("[user] lifts the [src] to the [A], igniting it with a brilliant flash of light!")) - var/mob/living/current_viewer = user - current_viewer.flash_act(4) - -/obj/effect/spawner/random/special_lighter - name = "special lighter spawner" - icon_state = "lighter" - loot = list( - /obj/item/lighter/skull, - /obj/item/lighter/mime, - /obj/item/lighter/bright, - ) - /////////// //ROLLING// /////////// diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm index 236b6ed402c4a..6439ef9ccbe94 100644 --- a/code/game/objects/items/circuitboards/circuitboard.dm +++ b/code/game/objects/items/circuitboards/circuitboard.dm @@ -17,8 +17,8 @@ grind_results = list(/datum/reagent/silicon = 20) greyscale_colors = CIRCUIT_COLOR_GENERIC var/build_path = null - ///determines if the circuit board originated from a vendor off station or not. - var/onstation = TRUE + /// whether or not the circuit board will build into a vendor whose products cost nothing (used for offstation vending machines mostly) + var/all_products_free = FALSE ///determines if the board requires specific levels of parts. (ie specifically a femto menipulator vs generic manipulator) var/specific_parts = FALSE diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 41950561571d6..9c3cde9f725a5 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -403,6 +403,29 @@ name = "R&D Console" greyscale_colors = CIRCUIT_COLOR_SCIENCE build_path = /obj/machinery/computer/rdconsole + var/silence_announcements = FALSE + +/obj/item/circuitboard/computer/rdconsole/examine(mob/user) + . = ..() + . += span_info("The board is configured to [silence_announcements ? "silence" : "announce"] researched nodes on radio.") + . += span_notice("The board mode can be changed with a [EXAMINE_HINT("multitool")].") + +/obj/item/circuitboard/computer/rdconsole/multitool_act(mob/living/user) + . = ..() + if(obj_flags & EMAGGED) + balloon_alert(user, "board mode is broken!") + return + silence_announcements = !silence_announcements + balloon_alert(user, "announcements [silence_announcements ? "enabled" : "disabled"]") + +/obj/item/circuitboard/computer/rdconsole/emag_act(mob/user, obj/item/card/emag/emag_card) + if (obj_flags & EMAGGED) + return FALSE + + obj_flags |= EMAGGED + silence_announcements = FALSE + to_chat(user, span_notice("You overload the node announcement chip, forcing every node to be announced on the common channel.")) + return TRUE /obj/item/circuitboard/computer/rdservercontrol name = "R&D Server Control" diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index 6c2c107fc850f..6d1497ebcec4e 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -344,6 +344,23 @@ /datum/stock_part/capacitor = 1) def_components = list(/obj/item/stock_parts/power_store/battery = /obj/item/stock_parts/power_store/battery/high/empty) +/obj/item/circuitboard/machine/smes/connector + name = "power connector" + build_path = /obj/machinery/power/smes/connector + req_components = list( + /obj/item/stack/cable_coil = 5, + /datum/stock_part/capacitor = 1,) + +/obj/item/circuitboard/machine/smesbank + name = "portable SMES" + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + needs_anchored = FALSE + build_path = /obj/machinery/power/smesbank + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/stock_parts/power_store/battery = 5,) + def_components = list(/obj/item/stock_parts/power_store/battery = /obj/item/stock_parts/power_store/battery/high/empty) + /obj/item/circuitboard/machine/techfab/department/engineering name = "\improper Departmental Techfab - Engineering" greyscale_colors = CIRCUIT_COLOR_ENGINEERING @@ -352,6 +369,9 @@ /obj/item/circuitboard/machine/smes/super def_components = list(/obj/item/stock_parts/power_store/battery = /obj/item/stock_parts/power_store/battery/super/empty) +/obj/item/circuitboard/machine/smesbank/super + def_components = list(/obj/item/stock_parts/power_store/battery = /obj/item/stock_parts/power_store/battery/super/empty) + /obj/item/circuitboard/machine/thermomachine name = "Thermomachine" greyscale_colors = CIRCUIT_COLOR_ENGINEERING @@ -631,6 +651,7 @@ /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", /obj/machinery/vending/cola = "Robust Softdrinks", /obj/machinery/vending/custom = "Custom Vendor", + /obj/machinery/vending/cytopro = "CytoPro", /obj/machinery/vending/dinnerware = "Plasteel Chef's Dinnerware Vendor", /obj/machinery/vending/drugs = "NanoDrug Plus", /obj/machinery/vending/engineering = "Robco Tool Maker", @@ -932,6 +953,9 @@ /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/glass = 2) +/obj/item/circuitboard/machine/sleeper/syndie + build_path = /obj/machinery/sleeper/syndie + /obj/item/circuitboard/machine/sleeper/fullupgrade build_path = /obj/machinery/sleeper/syndie/fullupgrade req_components = list( @@ -1720,3 +1744,65 @@ req_components = list( /datum/stock_part/servo = 1, ) + +/obj/item/circuitboard/machine/manucrafter + name = /obj/machinery/power/manufacturing/crafter::name + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/power/manufacturing/crafter + req_components = list( + /obj/item/stack/sheet/iron = 5, + /datum/stock_part/servo = 1, + ) + +/obj/item/circuitboard/machine/manulathe + name = /obj/machinery/power/manufacturing/lathe::name + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/power/manufacturing/lathe + req_components = list( + /obj/item/stack/sheet/iron = 5, + /datum/stock_part/servo = 1, + ) + +/obj/item/circuitboard/machine/manucrusher + name = /obj/machinery/power/manufacturing/crusher::name + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/power/manufacturing/crusher + req_components = list( + /obj/item/stack/sheet/iron = 5, + /datum/stock_part/servo = 1, + ) + +/obj/item/circuitboard/machine/manuunloader + name = /obj/machinery/power/manufacturing/unloader::name + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/power/manufacturing/unloader + req_components = list( + /obj/item/stack/sheet/iron = 5, + /datum/stock_part/servo = 1, + ) + +/obj/item/circuitboard/machine/manusorter + name = /obj/machinery/power/manufacturing/sorter::name + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/power/manufacturing/sorter + req_components = list( + /obj/item/stack/sheet/iron = 5, + /datum/stock_part/scanning_module = 1, + ) + +/obj/item/circuitboard/machine/manusmelter + name = /obj/machinery/power/manufacturing/smelter::name + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/power/manufacturing/smelter + req_components = list( + /obj/item/stack/sheet/iron = 5, + /datum/stock_part/micro_laser = 1, + ) + +/obj/item/circuitboard/machine/manurouter + name = /obj/machinery/power/manufacturing/router::name + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/power/manufacturing/router + req_components = list( + /obj/item/stack/sheet/iron = 5, + ) diff --git a/code/game/objects/items/climbingrope.dm b/code/game/objects/items/climbingrope.dm index e68e508771248..f058b2b761515 100644 --- a/code/game/objects/items/climbingrope.dm +++ b/code/game/objects/items/climbingrope.dm @@ -18,6 +18,7 @@ var/uses = 5 ///climb time var/climb_time = 2.5 SECONDS + var/climbsound = 'sound/effects/pickaxe/picaxe1.ogg' // BUBBER EDIT - Mothwings need this /obj/item/climbing_hook/examine(mob/user) . = ..() @@ -27,6 +28,8 @@ . += span_notice("The rope looks like you could use it [uses] times before it falls apart.") /obj/item/climbing_hook/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return NONE return ranged_interact_with_atom(interacting_with, user, modifiers) /obj/item/climbing_hook/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) @@ -46,8 +49,10 @@ 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) + // BUBBER EDIT BEGIN - climbsound + playsound(target, climbsound, 50) //plays twice so people above and below can hear + playsound(user_turf, climbsound, 50) + // BUBBER EDIT END 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)) // Our climbers athletics ability diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index 6565bcae44f5b..1870b6dd2ba0f 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -161,9 +161,6 @@ return CLEAN_BLOCKED return ..() -/obj/item/soap/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/living/user) - return !user.combat_mode // only cleans a storage item if on combat - /* * Bike Horns */ @@ -212,7 +209,7 @@ desc = "Damn son, where'd you find this?" icon_state = "air_horn" worn_icon_state = "horn_air" - sound_file = 'sound/items/airhorn2.ogg' + sound_file = 'sound/items/airhorn/airhorn2.ogg' /datum/crafting_recipe/airhorn name = "Air Horn" diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index abad07f96d844..9734661e88f63 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -35,10 +35,12 @@ update_icon_state() balloon_alert(user, "mode: [desc[mode]]") -/obj/item/door_remote/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/door_remote/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!istype(interacting_with, /obj/machinery/door) && !isturf(interacting_with)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/door_remote/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) var/obj/machinery/door/door if (istype(interacting_with, /obj/machinery/door)) diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index 390a48ffa709f..f249b87b04f54 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -37,8 +37,6 @@ . += "Alt-click to change the style." /obj/item/lipstick/update_icon_state() - icon_state = "lipstick[open ? "_uncap" : null]" - inhand_icon_state = "lipstick[open ? "open" : null]" icon_state = "[base_icon_state][open ? "_uncap" : null]" inhand_icon_state = "[base_icon_state][open ? "open" : null]" return ..() @@ -77,7 +75,7 @@ /obj/item/lipstick/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.is_holding(src)) + if(user.incapacitated || !user.is_holding(src)) return FALSE return TRUE @@ -115,13 +113,10 @@ name = "syndie lipstick" desc = "Syndicate branded lipstick with a killer dose of kisses. Observe safety regulations!" icon_state = "slipstick" - base_icon_state = "slipstick" lipstick_color = COLOR_SYNDIE_RED lipstick_trait = TRAIT_SYNDIE_KISS random_spawn = FALSE - lipstick_color = COLOR_SYNDIE_RED - lipstick_trait = TRAIT_SYNDIE_KISS /obj/item/lipstick/random name = "lipstick" @@ -186,7 +181,6 @@ to_chat(user, span_notice("You wipe off the lipstick with [src].")) target.update_lips(null) return - user.visible_message(span_warning("[user] begins to wipe [target]'s lipstick off with \the [src]."), \ span_notice("You begin to wipe off [target]'s lipstick...")) if(!do_after(user, 1 SECONDS, target = target)) @@ -208,7 +202,7 @@ /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 + shave(user, BODY_ZONE_HEAD)//doesn't need to be BODY_ZONE_HEAD specifically, but whatever return BRUTELOSS /obj/item/razor/proc/shave(mob/living/carbon/human/skinhead, location = BODY_ZONE_PRECISE_MOUTH) @@ -216,7 +210,7 @@ skinhead.set_facial_hairstyle("Shaved", update = TRUE) else skinhead.set_hairstyle("Skinhead", update = TRUE) - playsound(loc, 'sound/items/welder2.ogg', 20, TRUE) + playsound(loc, 'sound/items/tools/welder2.ogg', 20, TRUE) /obj/item/razor/attack(mob/target_mob, mob/living/user, params) if(!ishuman(target_mob)) diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index 45bb25285ef24..630637316b355 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -79,7 +79,7 @@ var/throwtarget = get_step(user, get_dir(src, user)) user.safe_throw_at(throwtarget, 1, 1, force = MOVE_FORCE_EXTREMELY_STRONG) - playsound(get_turf(src),'sound/magic/repulse.ogg', 100, TRUE) + playsound(get_turf(src),'sound/effects/magic/repulse.ogg', 100, TRUE) return @@ -126,7 +126,7 @@ sleep(3 SECONDS) if(QDELETED(src)) return - playsound(src,'sound/machines/twobeep.ogg',50,FALSE) + playsound(src,'sound/machines/beep/twobeep.ogg',50,FALSE) var/mutable_appearance/hologram = mutable_appearance(icon, "hologram") hologram.pixel_y = 16 add_overlay(hologram) @@ -158,7 +158,7 @@ sleep(0.5 SECONDS) if(QDELETED(src)) return - playsound(src,'sound/machines/triple_beep.ogg',50,FALSE) + playsound(src,'sound/machines/beep/triple_beep.ogg',50,FALSE) add_overlay("text") sleep(1 SECONDS) if(QDELETED(src)) @@ -247,7 +247,7 @@ dump = new /obj/structure/checkoutmachine(null, bogdanoff) priority_announce("The spacecoin bubble has popped! Get to the credit deposit machine at [get_area(src)] and cash out before you lose all of your funds!", sender_override = "CRAB-17 Protocol") animate(DF, pixel_z = -8, time = 5, , easing = LINEAR_EASING) - playsound(src, 'sound/weapons/mortar_whistle.ogg', 70, TRUE, 6) + playsound(src, 'sound/items/weapons/mortar_whistle.ogg', 70, TRUE, 6) addtimer(CALLBACK(src, PROC_REF(endLaunch)), 5, TIMER_CLIENT_TIME) //Go onto the last step after a very short falling animation diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 23f2dad1e4e95..221e73f8596dd 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -372,7 +372,7 @@ .["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) +/obj/item/toy/crayon/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -384,7 +384,7 @@ . = TRUE if("select_stencil") var/stencil = params["item"] - if(stencil in all_drawables + randoms) + if(stencil in (all_drawables + randoms)) drawtype = stencil . = TRUE text_buffer = "" @@ -402,7 +402,7 @@ set_painting_tool_color(paint_color) . = TRUE if("enter_text") - var/txt = tgui_input_text(usr, "Choose what to write", "Scribbles", text_buffer) + var/txt = tgui_input_text(usr, "Choose what to write", "Scribbles", text_buffer, max_length = MAX_MESSAGE_LEN) if(isnull(txt)) return txt = crayon_text_strip(txt) @@ -485,7 +485,7 @@ temp = "symbol" else if(drawing in drawings) temp = "drawing" - else if(drawing in graffiti|oriented) + else if(drawing in (graffiti|oriented)) temp = "graffiti" var/graf_rot @@ -504,8 +504,8 @@ var/clicky if(LAZYACCESS(modifiers, ICON_X) && LAZYACCESS(modifiers, ICON_Y)) - clickx = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) - clicky = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) + clickx = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(ICON_SIZE_X/2), ICON_SIZE_X/2) + clicky = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(ICON_SIZE_Y/2), ICON_SIZE_Y/2) if(!instant) to_chat(user, span_notice("You start drawing a [temp] on the [target.name]...")) @@ -865,7 +865,10 @@ /obj/item/toy/crayon/spraycan/can_use_on(atom/target, mob/user, list/modifiers) if(iscarbon(target)) return TRUE - if(ismob(target) && (HAS_TRAIT(target, TRAIT_SPRAY_PAINTABLE))) + if(is_capped && HAS_TRAIT(target, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + // specifically don't try to use a capped spraycan on stuff like bags and tables, just place it + return FALSE + if(ismob(target) && HAS_TRAIT(target, TRAIT_SPRAY_PAINTABLE)) return TRUE if(isobj(target) && !(target.flags_1 & UNPAINTABLE_1)) return TRUE @@ -967,6 +970,10 @@ /obj/item/toy/crayon/spraycan/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(is_capped) + if(!interacting_with.color) + // let's be generous and assume if they're trying to match something with no color, while capped, + // we shouldn't be blocking further interactions + return NONE balloon_alert(user, "take the cap off first!") return ITEM_INTERACT_BLOCKING if(check_empty(user)) @@ -1003,9 +1010,6 @@ update_appearance() return CLICK_ACTION_SUCCESS -/obj/item/toy/crayon/spraycan/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) - return is_capped - /obj/item/toy/crayon/spraycan/update_icon_state() icon_state = is_capped ? icon_capped : icon_uncapped return ..() diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm index 071561d57a095..fb6400fc7b36c 100644 --- a/code/game/objects/items/debug_items.dm +++ b/code/game/objects/items/debug_items.dm @@ -46,7 +46,7 @@ /obj/item/debug/omnitool/proc/check_menu(mob/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE @@ -168,7 +168,7 @@ return if(!user.client.holder) //safety if the admin readmined to save their ass lol. to_chat(user, span_reallybig("You shouldn't have done that...")) - playsound(src, 'sound/voice/borg_deathsound.ogg') + playsound(src, 'sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg') sleep(3 SECONDS) living_user.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) living_user.gib(DROP_ALL_REMAINS) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 4393f7eeebd39..10eaced7bc583 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -137,11 +137,12 @@ return ..() /obj/item/defibrillator/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params) - if(ismob(loc)) - var/mob/M = loc - if(istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) + if(!ismob(loc)) + return + var/mob/living_mob = loc + if(!living_mob.incapacitated && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/hand = over_object + living_mob.putItemFromInventoryInHandIfPossible(src, hand.held_index) /obj/item/defibrillator/screwdriver_act(mob/living/user, obj/item/tool) if(!cell || !cell_removable) @@ -257,10 +258,10 @@ if(cell) if(cell.charge >= paddles.revivecost) visible_message(span_notice("[src] beeps: Unit ready.")) - playsound(src, 'sound/machines/defib_ready.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_ready.ogg', 50, FALSE) else visible_message(span_notice("[src] beeps: Charge depleted.")) - playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_failed.ogg', 50, FALSE) paddles.cooldown = FALSE paddles.update_appearance() update_power() @@ -398,7 +399,7 @@ /obj/item/shockpaddles/proc/finish_recharge() var/turf/current_turf = get_turf(src) current_turf.audible_message(span_notice("[src] beeps: Unit is recharged.")) - playsound(src, 'sound/machines/defib_ready.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_ready.ogg', 50, FALSE) cooldown = FALSE update_appearance() @@ -417,7 +418,7 @@ user.visible_message(span_danger("[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide!")) if(req_defib) defib.deductcharge(revivecost) - playsound(src, 'sound/machines/defib_zap.ogg', 50, TRUE, -1) + playsound(src, 'sound/machines/defib/defib_zap.ogg', 50, TRUE, -1) return OXYLOSS /obj/item/shockpaddles/update_icon_state() @@ -450,7 +451,7 @@ defib?.update_power() if(req_defib && !defib.powered) user.visible_message(span_warning("[defib] beeps: Not enough charge!")) - playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_failed.ogg', 50, FALSE) return if(!HAS_TRAIT(src, TRAIT_WIELDED)) if(iscyborg(user)) @@ -492,7 +493,7 @@ do_help(H, user) -/// Called whenever the paddles successfuly shock something +/// Called whenever the paddles successfully shock something /obj/item/shockpaddles/proc/do_success() if(busy) busy = FALSE @@ -526,7 +527,7 @@ M.Knockdown(75) M.set_jitter_if_lower(100 SECONDS) M.apply_status_effect(/datum/status_effect/convulsing) - playsound(src, 'sound/machines/defib_zap.ogg', 50, TRUE, -1) + playsound(src, 'sound/machines/defib/defib_zap.ogg', 50, TRUE, -1) if(HAS_TRAIT(M,MOB_ORGANIC)) M.emote("gasp") log_combat(user, M, "zapped", src) @@ -543,7 +544,7 @@ user.visible_message(span_notice("[user] places [src] on [H]'s chest."), span_warning("You place [src] on [H]'s chest and begin to charge them.")) var/turf/T = get_turf(defib) - playsound(src, 'sound/machines/defib_charge.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_charge.ogg', 50, FALSE) if(req_defib) T.audible_message(span_warning("\The [defib] lets out an urgent beep and lets out a steadily rising hum...")) else @@ -554,12 +555,12 @@ return if(H && H.stat == DEAD) to_chat(user, span_warning("[H] is dead.")) - playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_failed.ogg', 50, FALSE) do_cancel() return user.visible_message(span_boldannounce("[user] shocks [H] with \the [src]!"), span_warning("You shock [H] with \the [src]!")) - playsound(src, 'sound/machines/defib_zap.ogg', 100, TRUE, -1) - playsound(src, 'sound/weapons/egloves.ogg', 100, TRUE, -1) + playsound(src, 'sound/machines/defib/defib_zap.ogg', 100, TRUE, -1) + playsound(src, 'sound/items/weapons/egloves.ogg', 100, TRUE, -1) H.emote("scream") shock_pulling(45, H) if(H.can_heartattack() && !H.undergoing_cardiac_arrest()) @@ -587,14 +588,14 @@ update_appearance() if(do_after(user, 3 SECONDS, H, extra_checks = CALLBACK(src, PROC_REF(is_wielded)))) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process user.visible_message(span_notice("[user] places [src] on [H]'s chest."), span_warning("You place [src] on [H]'s chest.")) - playsound(src, 'sound/machines/defib_charge.ogg', 75, FALSE) + playsound(src, 'sound/machines/defib/defib_charge.ogg', 75, FALSE) var/obj/item/organ/internal/heart = H.get_organ_by_type(/obj/item/organ/internal/heart) if(do_after(user, 2 SECONDS, H, extra_checks = CALLBACK(src, PROC_REF(is_wielded)))) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total if((!combat && !req_defib) || (req_defib && !defib.combat)) for(var/obj/item/clothing/C in H.get_equipped_items()) if((C.body_parts_covered & CHEST) && (C.clothing_flags & THICKMATERIAL)) //check to see if something is obscuring their chest. user.audible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's chest is obscured. Operation aborted.")) - playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_failed.ogg', 50, FALSE) do_cancel() return if(SEND_SIGNAL(H, COMSIG_DEFIBRILLATOR_PRE_HELP_ZAP, user, src) & COMPONENT_DEFIB_STOP) @@ -603,7 +604,7 @@ if(H.stat == DEAD) H.visible_message(span_warning("[H]'s body convulses a bit.")) playsound(src, SFX_BODYFALL, 50, TRUE) - playsound(src, 'sound/machines/defib_zap.ogg', 75, TRUE, -1) + playsound(src, 'sound/machines/defib/defib_zap.ogg', 75, TRUE, -1) shock_pulling(30, H) var/defib_result = H.can_defib() @@ -628,13 +629,16 @@ 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 // BUBBED EDIT REMOVAL BEGIN -// if (DEFIB_FAIL_DNR) -// fail_reason = "Patient has been flagged as Do Not Resuscitate. Further attempts futile." - //SKYRAT EDIT ADDITION END - DNR TRAIT // BUBBER EDIT REMOVAL BEGIN + /* BUBBER EDIT REMOVAL + //SKYRAT 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 + */ + if(fail_reason) user.visible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - [fail_reason]")) - playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_failed.ogg', 50, FALSE) else var/total_brute = H.getBruteLoss() var/total_burn = H.getFireLoss() @@ -653,20 +657,23 @@ if(need_mob_update) H.updatehealth() // Previous "adjust" procs don't update health, so we do it manually. user.visible_message(span_notice("[req_defib ? "[defib]" : "[src]"] pings: Resuscitation successful.")) - playsound(src, 'sound/machines/defib_success.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_success.ogg', 50, FALSE) H.set_heartattack(FALSE) if(defib_result == DEFIB_POSSIBLE) H.grab_ghost() H.revive() H.emote("gasp") H.set_jitter_if_lower(200 SECONDS) + to_chat(H, "[CONFIG_GET(string/blackoutpolicy)]") //SKYRAT 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 if (target_synthetic) user.visible_message(span_boldwarning("[src] fire a powerful jolt of electricity into [H]'s vulnerable circuitry!")) @@ -684,13 +691,14 @@ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_synth_defib_trauma), brain_organ, trauma), SYNTH_DEFIBBED_TRAUMA_DURATION) // SKYRAT EDIT ADDITION END - SYNTH REVIVAL + do_success() return else if (!H.get_organ_by_type(/obj/item/organ/internal/heart)) user.visible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's heart is missing. Operation aborted.")) - playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_failed.ogg', 50, FALSE) else if(H.undergoing_cardiac_arrest()) - playsound(src, 'sound/machines/defib_zap.ogg', 50, TRUE, -1) + playsound(src, 'sound/machines/defib/defib_zap.ogg', 50, TRUE, -1) if(!(heart.organ_flags & ORGAN_FAILING)) H.set_heartattack(FALSE) user.visible_message(span_notice("[req_defib ? "[defib]" : "[src]"] pings: Patient's heart is now beating again.")) @@ -699,7 +707,7 @@ else user.visible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.")) - playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE) + playsound(src, 'sound/machines/defib/defib_failed.ogg', 50, FALSE) do_cancel() /obj/item/shockpaddles/proc/is_wielded() @@ -734,7 +742,7 @@ base_icon_state = "syndiepaddles" /obj/item/shockpaddles/syndicate/nanotrasen - name = "elite nanotrasen defibrillator paddles" + name = "elite Nanotrasen defibrillator paddles" desc = "A pair of paddles used to revive deceased ERT members. They possess both the ability to penetrate armor and to deliver powerful or disabling shocks offensively." icon_state = "ntpaddles0" inhand_icon_state = "ntpaddles0" diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index c619f7d7018e0..77eefa8a1507b 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -43,17 +43,15 @@ user.visible_message(span_suicide("[user] is trying to upload [user.p_them()]self into [src]! That's not going to work out well!")) return BRUTELOSS -/obj/item/aicard/pre_attack(atom/target, mob/living/user, params) - . = ..() - if(.) - return - +/obj/item/aicard/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(AI) - if(upload_ai(target, user)) - return TRUE + if(upload_ai(interacting_with, user)) + return ITEM_INTERACT_SUCCESS else - if(capture_ai(target, user)) - return TRUE + if(capture_ai(interacting_with, user)) + return ITEM_INTERACT_SUCCESS + + return NONE /// Tries to get an AI from the atom clicked /obj/item/aicard/proc/capture_ai(atom/from_what, mob/living/user) diff --git a/code/game/objects/items/devices/aicard_evil.dm b/code/game/objects/items/devices/aicard_evil.dm index 3e8c56ce940fd..852a105de350f 100644 --- a/code/game/objects/items/devices/aicard_evil.dm +++ b/code/game/objects/items/devices/aicard_evil.dm @@ -102,13 +102,13 @@ else AI = locate() in A if(!AI || AI.interaction_range == INFINITY) - playsound(src,'sound/machines/buzz-sigh.ogg',50,FALSE) + playsound(src,'sound/machines/buzz/buzz-sigh.ogg',50,FALSE) to_chat(user, span_notice("Error! Incompatible object!")) return ..() AI.interaction_range += 2 if(AI.interaction_range > 7) AI.interaction_range = INFINITY - playsound(src,'sound/machines/twobeep.ogg',50,FALSE) + playsound(src,'sound/machines/beep/twobeep.ogg',50,FALSE) to_chat(user, span_notice("You insert [src] into [AI]'s compartment, and it beeps as it processes the data.")) to_chat(AI, span_notice("You process [src], and find yourself able to manipulate electronics from up to [AI.interaction_range] meters!")) qdel(src) diff --git a/code/game/objects/items/devices/battle_royale.dm b/code/game/objects/items/devices/battle_royale.dm index 70ae0a8f85b2d..5a6fe059cb6c4 100644 --- a/code/game/objects/items/devices/battle_royale.dm +++ b/code/game/objects/items/devices/battle_royale.dm @@ -238,7 +238,7 @@ GLOBAL_DATUM_INIT(battle_royale_master, /datum/battle_royale_master, new) As a gesture of gratitude, we will be providing our premium broadcast to your entertainment monitors at no cost so that you can watch the excitement. \n\ Bystanders are advised not to intervene... but if you do, make it look good for the camera!", title = "Rumble Royale Beginning", - sound = 'sound/machines/alarm.ogg', + sound = 'sound/announcer/alarm/nuke_alarm.ogg', has_important_message = TRUE, sender_override = "Rumble Royale Pirate Broadcast Station", color_override = "red", @@ -268,7 +268,7 @@ GLOBAL_DATUM_INIT(battle_royale_master, /datum/battle_royale_master, new) priority_announce( text = message, title = "Rumble Royale Casualty Report", - sound = 'sound/misc/notice1.ogg', + sound = 'sound/announcer/notice/notice1.ogg', has_important_message = TRUE, sender_override = "Rumble Royale Pirate Broadcast Station", color_override = "red", @@ -302,7 +302,7 @@ GLOBAL_DATUM_INIT(battle_royale_master, /datum/battle_royale_master, new) priority_announce( text = message, title = "Rumble Royale Winner", - sound = 'sound/misc/notice1.ogg', + sound = 'sound/announcer/notice/notice1.ogg', has_important_message = TRUE, sender_override = "Rumble Royale Pirate Broadcast Station", color_override = "red", @@ -317,7 +317,7 @@ GLOBAL_DATUM_INIT(battle_royale_master, /datum/battle_royale_master, new) priority_announce( text = "We're halfway done folks! And bad news to anyone who hasn't made it to the [chosen_area]... you're out!", title = "Rumble Royale Update", - sound = 'sound/misc/notice1.ogg', + sound = 'sound/announcer/notice/notice1.ogg', has_important_message = TRUE, sender_override = "Rumble Royale Pirate Broadcast Station", color_override = "red", @@ -335,7 +335,7 @@ GLOBAL_DATUM_INIT(battle_royale_master, /datum/battle_royale_master, new) We're sorry to announce that this edition of Royal Rumble has no winner. \n\ Better luck next time!", title = "Rumble Royale Concluded", - sound = 'sound/misc/notice1.ogg', + sound = 'sound/announcer/notice/notice1.ogg', has_important_message = TRUE, sender_override = "Rumble Royale Pirate Broadcast Station", color_override = "red", diff --git a/code/game/objects/items/devices/broadcast_camera.dm b/code/game/objects/items/devices/broadcast_camera.dm new file mode 100644 index 0000000000000..78868844e48cb --- /dev/null +++ b/code/game/objects/items/devices/broadcast_camera.dm @@ -0,0 +1,124 @@ +// Unique broadcast camera given to the first Curator +// Only one should exist ideally, if other types are created they must have different camera_networks +// Broadcasts its surroundings to entertainment monitors and its audio to entertainment radio channel +/obj/item/broadcast_camera + name = "broadcast camera" + desc = "A large camera that streams its live feed and audio to entertainment monitors across the station, allowing everyone to watch the broadcast." + desc_controls = "Right-click to change the broadcast name. Alt-click to toggle microphone." + icon = 'icons/obj/service/broadcast.dmi' + icon_state = "broadcast_cam0" + base_icon_state = "broadcast_cam" + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + force = 8 + throwforce = 12 + w_class = WEIGHT_CLASS_NORMAL + obj_flags = INDESTRUCTIBLE | EMP_PROTECT_ALL // No fun police + slot_flags = NONE + light_system = OVERLAY_LIGHT + light_color = COLOR_SOFT_RED + light_range = 1 + light_power = 0.3 + light_on = FALSE + /// Is camera streaming + var/active = FALSE + /// Is the microphone turned on + var/active_microphone = TRUE + /// The name of the broadcast + var/broadcast_name = "Curator News" + /// The networks it broadcasts to, default is CAMERANET_NETWORK_CURATOR + var/list/camera_networks = list(CAMERANET_NETWORK_CURATOR) + /// The "virtual" security camera inside of the physical camera + var/obj/machinery/camera/internal_camera + /// The "virtual" radio inside of the the physical camera, a la microphone + var/obj/item/radio/entertainment/microphone/internal_radio + +/obj/item/broadcast_camera/Destroy(force) + QDEL_NULL(internal_radio) + QDEL_NULL(internal_camera) + + return ..() + +/obj/item/broadcast_camera/update_icon_state() + icon_state = "[base_icon_state]0" + return ..() + +/obj/item/broadcast_camera/attack_self(mob/user, modifiers) + . = ..() + active = !active + if(active) + on_activating() + else + on_deactivating() + +/obj/item/broadcast_camera/attack_self_secondary(mob/user, modifiers) + . = ..() + broadcast_name = tgui_input_text(user = user, title = "Broadcast Name", message = "What will be the name of your broadcast?", default = "[broadcast_name]", max_length = MAX_CHARTER_LEN) + +/obj/item/broadcast_camera/examine(mob/user) + . = ..() + . += span_notice("Broadcast name is [broadcast_name]") + . += span_notice("The microphone is [active_microphone ? "On" : "Off"]") + +/obj/item/broadcast_camera/on_enter_storage(datum/storage/master_storage) + . = ..() + if(active) + on_deactivating() + +/obj/item/broadcast_camera/dropped(mob/user, silent) + . = ..() + if(active) + on_deactivating() + +/// When activating the camera +/obj/item/broadcast_camera/proc/on_activating() + if(!iscarbon(loc)) + return + active = TRUE + icon_state = "[base_icon_state][active]" + /// The carbon who wielded the camera, allegedly + var/mob/living/carbon/wielding_carbon = loc + + // INTERNAL CAMERA + internal_camera = new(wielding_carbon) // Cameras for some reason do not work inside of obj's + internal_camera.internal_light = FALSE + internal_camera.network = camera_networks + internal_camera.c_tag = "LIVE: [broadcast_name]" + start_broadcasting_network(camera_networks, "[broadcast_name] is now LIVE!") + + // INTERNAL RADIO + internal_radio = new(src) + /// Sets the state of the microphone + set_microphone_state() + + set_light_on(TRUE) + playsound(source = src, soundin = 'sound/machines/terminal/terminal_processing.ogg', vol = 20, vary = FALSE, ignore_walls = FALSE) + balloon_alert_to_viewers("live!") + +/// When deactivating the camera +/obj/item/broadcast_camera/proc/on_deactivating() + active = FALSE + icon_state = "[base_icon_state][active]" + QDEL_NULL(internal_camera) + QDEL_NULL(internal_radio) + + stop_broadcasting_network(camera_networks) + + set_light_on(FALSE) + playsound(source = src, soundin = 'sound/machines/terminal/terminal_prompt_deny.ogg', vol = 20, vary = FALSE, ignore_walls = FALSE) + balloon_alert_to_viewers("offline") + +/obj/item/broadcast_camera/click_alt(mob/user) + active_microphone = !active_microphone + + /// Text popup for letting the user know that the microphone has changed state + balloon_alert(user, "turned [active_microphone ? "on" : "off"] the microphone.") + + ///If the radio exists as an object, set its state accordingly + if(active) + set_microphone_state() + + return CLICK_ACTION_SUCCESS + +/obj/item/broadcast_camera/proc/set_microphone_state() + internal_radio.set_broadcasting(active_microphone) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 1920e47f97f66..fbdf3bae40a88 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -36,28 +36,39 @@ else to_chat(user, span_warning("You can't use [src] while inside something!")) -/obj/item/chameleon/interact_with_atom(atom/target, mob/living/user, list/modifiers) +/obj/item/chameleon/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!can_copy(interacting_with) || SHOULD_SKIP_INTERACTION(interacting_with, src, user)) + return NONE + make_copy(interacting_with, user) + return ITEM_INTERACT_SUCCESS + +/obj/item/chameleon/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!can_copy(interacting_with)) // RMB scan works on storage items, LMB scan does not + return NONE + make_copy(interacting_with, user) + return ITEM_INTERACT_SUCCESS + +/obj/item/chameleon/proc/can_copy(atom/target) if(!check_sprite(target)) - return ITEM_INTERACT_BLOCKING + return FALSE if(active_dummy)//I now present you the blackli(f)st - return ITEM_INTERACT_BLOCKING + return FALSE if(isturf(target)) - return ITEM_INTERACT_BLOCKING + return FALSE if(ismob(target)) - return ITEM_INTERACT_BLOCKING + return FALSE if(istype(target, /obj/structure/falsewall)) - return ITEM_INTERACT_BLOCKING + return FALSE if(target.alpha != 255) - return ITEM_INTERACT_BLOCKING + return FALSE if(target.invisibility != 0) - return ITEM_INTERACT_BLOCKING + return FALSE if(iseffect(target) && !istype(target, /obj/effect/decal)) //be a footprint - return ITEM_INTERACT_BLOCKING - make_copy(target, user) - return ITEM_INTERACT_SUCCESS + return FALSE + return TRUE /obj/item/chameleon/proc/make_copy(atom/target, mob/user) - playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, TRUE, -6) + playsound(get_turf(src), 'sound/items/weapons/flash.ogg', 100, TRUE, -6) to_chat(user, span_notice("Scanned [target].")) var/obj/temp = new /obj() temp.appearance = target.appearance diff --git a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm index 5814101463ba4..cd0b42e0e8ac4 100644 --- a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm +++ b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm @@ -44,7 +44,7 @@ if(!circuits) to_chat(R, span_warning("You need more material. Use [src] on existing simple circuits to break them down.")) return - playsound(R, 'sound/items/rped.ogg', 50, TRUE) + playsound(R, 'sound/items/tools/rped.ogg', 50, TRUE) recharging = TRUE circuits-- maptext = MAPTEXT(circuits) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 96dae8c0fc514..2d8492e81a4de 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -29,9 +29,9 @@ /// Can we toggle this light on and off (used for contexual screentips only) var/toggle_context = TRUE /// The sound the light makes when it's turned on - var/sound_on = 'sound/weapons/magin.ogg' + var/sound_on = 'sound/items/weapons/magin.ogg' /// The sound the light makes when it's turned off - var/sound_off = 'sound/weapons/magout.ogg' + var/sound_off = 'sound/items/weapons/magout.ogg' /// Should the flashlight start turned on? var/start_on = FALSE @@ -42,9 +42,6 @@ update_brightness() register_context() - if(toggle_context) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) - var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/flashlight_eyes) AddElement( @@ -257,7 +254,7 @@ if(!scanning.get_bodypart(BODY_ZONE_HEAD)) to_chat(user, span_warning("[scanning] doesn't have a head!")) return - if(light_power < 1) + if(light_power < 0.5) to_chat(user, span_warning("[src] isn't bright enough to see anything!")) return @@ -287,12 +284,12 @@ setDir(user.dir) /// when hit by a light disruptor - turns the light off, forces the light to be disabled for a few seconds -/obj/item/flashlight/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/item/flashlight/on_saboteur(datum/source, disrupt_duration) + . = ..() if(light_on) toggle_light() COOLDOWN_START(src, disabled_time, disrupt_duration) - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/item/flashlight/pen name = "penlight" @@ -362,7 +359,7 @@ light_range = 5 // A little better than the standard flashlight. light_power = 0.8 light_color = "#99ccff" - hitsound = 'sound/weapons/genhit1.ogg' + hitsound = 'sound/items/weapons/genhit1.ogg' // the desk lamps are a bit special /obj/item/flashlight/lamp @@ -431,7 +428,7 @@ if(light_on) attack_verb_continuous = string_list(list("burns", "singes")) attack_verb_simple = string_list(list("burn", "singe")) - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' force = on_damage damtype = BURN update_brightness() @@ -458,7 +455,7 @@ name = "lit [initial(name)]" attack_verb_continuous = string_list(list("burns", "singes")) attack_verb_simple = string_list(list("burn", "singe")) - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' force = on_damage damtype = BURN @@ -696,6 +693,9 @@ color = LIGHT_COLOR_GREEN light_color = LIGHT_COLOR_GREEN +/obj/item/flashlight/lantern/jade/on + start_on = TRUE + /obj/item/flashlight/slime gender = PLURAL name = "glowing slime extract" diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 5d40d40a4d925..e41c346c9930d 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -21,10 +21,10 @@ /// Checks to make sure the projector isn't busy with making another forcefield. var/force_proj_busy = FALSE -/obj/item/forcefield_projector/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/forcefield_projector/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/forcefield_projector/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!check_allowed_items(interacting_with, not_inside = TRUE)) return NONE if(istype(interacting_with, /obj/structure/projected_forcefield)) @@ -59,7 +59,7 @@ return ITEM_INTERACT_BLOCKING force_proj_busy = FALSE - playsound(src,'sound/weapons/resonator_fire.ogg',50,TRUE) + playsound(src,'sound/items/weapons/resonator_fire.ogg',50,TRUE) user.visible_message(span_warning("[user] projects a forcefield!"),span_notice("You project a forcefield.")) var/obj/structure/projected_forcefield/F = new(T, src) current_fields += F @@ -124,14 +124,14 @@ /obj/structure/projected_forcefield/Destroy() visible_message(span_warning("[src] flickers and disappears!")) - playsound(src,'sound/weapons/resonator_blast.ogg',25,TRUE) + playsound(src,'sound/items/weapons/resonator_blast.ogg',25,TRUE) if(generator) generator.current_fields -= src generator = null return ..() /obj/structure/projected_forcefield/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE) + playsound(loc, 'sound/items/weapons/egloves.ogg', 80, TRUE) /obj/structure/projected_forcefield/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) if(sound_effect) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 1d5ef17a90c4a..25bae4306091f 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -67,13 +67,13 @@ update_appearance(UPDATE_ICON) balloon_alert(user, "switch [scanning ? "on" : "off"]") -/obj/item/geiger_counter/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/geiger_counter/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - if (user.combat_mode) + if(SHOULD_SKIP_INTERACTION(interacting_with, src, user)) return NONE - if (!CAN_IRRADIATE(interacting_with)) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/geiger_counter/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!CAN_IRRADIATE(interacting_with)) return NONE user.visible_message(span_notice("[user] scans [interacting_with] with [src]."), span_notice("You scan [interacting_with]'s radiation levels with [src]...")) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index d9260649742f3..baf5b62be5e32 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -99,7 +99,7 @@ var/obj/item/stock_parts/attack_diode = attack_item if(crystal_lens && attack_diode.rating < 3) //only tier 3 and up are small enough to fit to_chat(user, span_warning("You try to jam \the [attack_item.name] in place, but \the [crystal_lens.name] is in the way!")) - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 20) + playsound(src, 'sound/machines/airlock/airlock_alien_prying.ogg', 20) if(do_after(user, 2 SECONDS, src)) var/atom/atom_to_teleport = pick(user, attack_item) if(atom_to_teleport == user) @@ -113,7 +113,7 @@ return if(!user.transferItemToLoc(attack_item, src)) return - playsound(src, 'sound/items/screwdriver.ogg', 30) + playsound(src, 'sound/items/tools/screwdriver.ogg', 30) diode = attack_item balloon_alert(user, "installed \the [diode.name]") //we have a diode now, try starting a charge sequence in case the pointer was charging when we took out the diode @@ -129,7 +129,7 @@ var/obj/item/stack/ore/bluespace_crystal/crystal_stack = attack_item if(diode && diode.rating < 3) //only lasers of tier 3 and up can house a lens to_chat(user, span_warning("You try to jam \the [crystal_stack.name] in front of the diode, but it's a bad fit!")) - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 20) + playsound(src, 'sound/machines/airlock/airlock_alien_prying.ogg', 20) if(do_after(user, 2 SECONDS, src)) var/atom/atom_to_teleport = pick(user, src) if(atom_to_teleport == user) @@ -148,7 +148,7 @@ if(!user.transferItemToLoc(single_crystal, src)) return crystal_lens = single_crystal - playsound(src, 'sound/items/screwdriver2.ogg', 30) + playsound(src, 'sound/items/tools/screwdriver2.ogg', 30) balloon_alert(user, "installed \the [crystal_lens.name]") to_chat(user, span_notice("You install a [crystal_lens.name] in [src]. \ It can now be used to shine through obstacles at the cost of double the energy drain.")) @@ -183,12 +183,14 @@ and the wide margin between it and the focus lens could probably house a crystal of some sort." /obj/item/laser_pointer/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - -/obj/item/laser_pointer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) laser_act(interacting_with, user, modifiers) return ITEM_INTERACT_BLOCKING +/obj/item/laser_pointer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) + ///Handles shining the clicked atom, /obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, list/modifiers) if(isnull(diode)) @@ -233,9 +235,12 @@ else if(user.zone_selected == BODY_ZONE_PRECISE_EYES) //Intensity of the laser dot to pass to flash_act var/severity = pick(0, 1, 2) + var/always_fail = FALSE + if(istype(target_humanoid.glasses, /obj/item/clothing/glasses/eyepatch) && prob(50)) + always_fail = TRUE //chance to actually hit the eyes depends on internal component - if(prob(effectchance * diode.rating) && target_humanoid.flash_act(severity)) + if(prob(effectchance * diode.rating) && !always_fail && target_humanoid.flash_act(severity)) outmsg = span_notice("You blind [target_humanoid] by shining [src] in [target_humanoid.p_their()] eyes.") log_combat(user, target_humanoid, "blinded with a laser pointer", src) else @@ -271,7 +276,7 @@ //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) // SKYRAT 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 @@ -300,7 +305,7 @@ if(outmsg) user.visible_message(span_danger("[user] points [src] at [target]!"), outmsg) //SKYRAT EDIT CHANGE - ORIGINAL: to_chat(user, outmsg) else - user.visible_message(span_notice("[user] points [src] at [target]."), span_notice("You point [src] at [target].")) //SKYRAT EDIT CHANGE - ORIGINAL: to_chat(user, span_info("You point [src] at [target].")) + 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 4039b412ebe78..e3c19dfde66f3 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -208,7 +208,7 @@ for(var/obj/machinery/light/target in user.loc) replace_light(target, user) on_a_light = TRUE - if(!on_a_light) //So we dont give a ballon alert when we just used replace_light + if(!on_a_light) //So we don't give a balloon alert when we just used replace_light user.balloon_alert(user, "[uses] lights, [bulb_shards]/[BULB_SHARDS_REQUIRED] fragments") /** @@ -223,7 +223,7 @@ if(istype(target, /obj/machinery/light)) if(replace_light(target, user) && bluespace_toggle) user.Beam(target, icon_state = "rped_upgrade", time = 0.5 SECONDS) - playsound(src, 'sound/items/pshoom.ogg', 40, 1) + playsound(src, 'sound/items/pshoom/pshoom.ogg', 40, 1) return TRUE // if we are attacking a floodlight frame finish it @@ -233,7 +233,7 @@ new /obj/machinery/power/floodlight(frame.loc) if(bluespace_toggle) user.Beam(target, icon_state = "rped_upgrade", time = 0.5 SECONDS) - playsound(src, 'sound/items/pshoom.ogg', 40, 1) + playsound(src, 'sound/items/pshoom/pshoom.ogg', 40, 1) to_chat(user, span_notice("You finish \the [frame] with a light tube.")) qdel(frame) return TRUE @@ -246,7 +246,7 @@ light_replaced = TRUE if(light_replaced && bluespace_toggle) user.Beam(target, icon_state = "rped_upgrade", time = 0.5 SECONDS) - playsound(src, 'sound/items/pshoom.ogg', 40, 1) + playsound(src, 'sound/items/pshoom/pshoom.ogg', 40, 1) return TRUE return FALSE @@ -325,6 +325,12 @@ . = ..() ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT) +/obj/item/lightreplacer/cyborg/advanced + name = "high capacity light replacer" + desc = "A higher capacity light replacer. Refill with broken or working lightbulbs, or sheets of glass." + icon_state = "lightreplacer_high" + max_uses = 50 + /obj/item/lightreplacer/blue name = "bluespace light replacer" desc = "A modified light replacer that zaps lights into place. Refill with broken or working lightbulbs, or sheets of glass." diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index d250139e38e0f..19e65f8ff5471 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -24,17 +24,22 @@ throwforce = 0 throw_range = 7 throw_speed = 3 - drop_sound = 'sound/items/handling/multitool_drop.ogg' - pickup_sound = 'sound/items/handling/multitool_pickup.ogg' + drop_sound = 'sound/items/handling/tools/multitool_drop.ogg' + pickup_sound = 'sound/items/handling/tools/multitool_pickup.ogg' custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.2) custom_premium_price = PAYCHECK_COMMAND * 3 toolspeed = 1 - usesound = 'sound/weapons/empty.ogg' + usesound = 'sound/items/weapons/empty.ogg' var/datum/buffer // simple machine buffer for device linkage var/mode = 0 var/apc_scanner = TRUE COOLDOWN_DECLARE(next_apc_scan) +/obj/item/multitool/Destroy() + if(buffer) + remove_buffer(buffer) + return ..() + /obj/item/multitool/examine(mob/user) . = ..() . += span_notice("Its buffer [buffer ? "contains [buffer]." : "is empty."]") @@ -70,9 +75,10 @@ /obj/item/multitool/proc/set_buffer(datum/buffer) if(src.buffer) UnregisterSignal(src.buffer, COMSIG_QDELETING) + remove_buffer(src.buffer) src.buffer = buffer if(!QDELETED(buffer)) - RegisterSignal(buffer, COMSIG_QDELETING, PROC_REF(on_buffer_del)) + RegisterSignal(buffer, COMSIG_QDELETING, PROC_REF(remove_buffer)) /** * Called when the buffer's stored object is deleted @@ -80,8 +86,9 @@ * This proc does not clear the buffer of the multitool, it is here to * handle the deletion of the object the buffer references */ -/obj/item/multitool/proc/on_buffer_del(datum/source) +/obj/item/multitool/proc/remove_buffer(datum/source) SIGNAL_HANDLER + SEND_SIGNAL(src, COMSIG_MULTITOOL_REMOVE_BUFFER, source) buffer = null // Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby. diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 1925737143e9d..364550f062aa7 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -2,9 +2,9 @@ #define CLAMPED_OFF 1 #define OPERATING 2 -#define FRACTION_TO_RELEASE 50 +#define FRACTION_TO_RELEASE 25 #define ALERT 90 -#define MINIMUM_HEAT 10000 +#define MINIMUM_HEAT 20000 // Powersink - used to drain station power @@ -23,7 +23,7 @@ throw_speed = 1 throw_range = 2 custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT* 7.5) - var/max_heat = 5e7 // Maximum contained heat before exploding. Not actual temperature. + var/max_heat = 100 * STANDARD_BATTERY_CHARGE // Maximum contained heat before exploding. Not actual temperature. var/internal_heat = 0 // Contained heat, goes down every tick. var/mode = DISCONNECTED // DISCONNECTED, CLAMPED_OFF, OPERATING var/warning_given = FALSE //! Stop warning spam, only warn the admins/deadchat once that we are about to boom. @@ -171,7 +171,7 @@ if(istype(terminal.master, /obj/machinery/power/apc)) var/obj/machinery/power/apc/apc = terminal.master if(apc.operating && apc.cell) - drained += 0.001 * apc.cell.use(0.05 * STANDARD_CELL_CHARGE, force = TRUE) + drained += 0.001 * apc.cell.use(0.1 * STANDARD_BATTERY_CHARGE, force = TRUE) internal_heat += drained /obj/item/powersink/process() diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index af19c6cd4f5da..b127a650e2d26 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -104,7 +104,7 @@ data["maxFrequency"] = MAX_FREE_FREQ return data -/obj/item/electropack/ui_act(action, params) +/obj/item/electropack/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 88c9251d5b2bc..2eab06806dd09 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -4,26 +4,22 @@ 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. - var/syndie = FALSE - /// If true, the radio can say/hear on the special CentCom channel. - var/independent = FALSE /// What channels does this encryption key grant to the parent headset. var/list/channels = list() + /// Flags for which "special" radio networks should be accessible + var/special_channels = NONE var/datum/language/translated_language greyscale_config = /datum/greyscale_config/encryptionkey_basic greyscale_colors = "#820a16#3758c4" /obj/item/encryptionkey/examine(mob/user) . = ..() - if(LAZYLEN(channels) || translate_binary) + if(LAZYLEN(channels) || special_channels & RADIO_SPECIAL_BINARY) var/list/examine_text_list = list() for(var/i in channels) examine_text_list += "[GLOB.channel_tokens[i]] - [LOWER_TEXT(i)]" - if(translate_binary) + if(special_channels & RADIO_SPECIAL_BINARY) examine_text_list += "[GLOB.channel_tokens[MODE_BINARY]] - [MODE_BINARY]" . += span_notice("It can access the following channels; [jointext(examine_text_list, ", ")].") @@ -34,14 +30,14 @@ name = "syndicate encryption key" icon_state = "cypherkey_syndicate" channels = list(RADIO_CHANNEL_SYNDICATE = 1) - syndie = TRUE + special_channels = RADIO_SPECIAL_SYNDIE greyscale_config = /datum/greyscale_config/encryptionkey_syndicate greyscale_colors = "#171717#990000" /obj/item/encryptionkey/binary name = "binary translator key" icon_state = "cypherkey_basic" - translate_binary = TRUE + special_channels = RADIO_SPECIAL_BINARY translated_language = /datum/language/machine greyscale_config = /datum/greyscale_config/encryptionkey_basic greyscale_colors = "#24a157#3758c4" @@ -102,6 +98,13 @@ greyscale_config = /datum/greyscale_config/encryptionkey_service greyscale_colors = "#ebebeb#3bca5a" +/obj/item/encryptionkey/headset_srvent + name = "press radio encryption key" + icon_state = "cypherkey_service" + channels = list(RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_ENTERTAINMENT = 0) + greyscale_config = /datum/greyscale_config/encryptionkey_service + greyscale_colors = "#83eb8f#3bca5a" + /obj/item/encryptionkey/headset_com name = "command radio encryption key" icon_state = "cypherkey_cube" @@ -182,7 +185,7 @@ /obj/item/encryptionkey/headset_cent name = "\improper CentCom radio encryption key" icon_state = "cypherkey_centcom" - independent = TRUE + special_channels = RADIO_SPECIAL_CENTCOM channels = list(RADIO_CHANNEL_CENTCOM = 1) greyscale_config = /datum/greyscale_config/encryptionkey_centcom greyscale_colors = "#24a157#dca01b" @@ -197,6 +200,7 @@ RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_AI_PRIVATE = 1, + RADIO_CHANNEL_ENTERTAINMENT = 1, ) /obj/item/encryptionkey/ai_with_binary @@ -210,15 +214,16 @@ RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_AI_PRIVATE = 1, + RADIO_CHANNEL_ENTERTAINMENT = 1, ) - translate_binary = TRUE + special_channels = RADIO_SPECIAL_BINARY translated_language = /datum/language/machine /obj/item/encryptionkey/ai/evil //ported from NT, this goes 'inside' the AI. name = "syndicate binary encryption key" icon_state = "cypherkey_syndicate" channels = list(RADIO_CHANNEL_SYNDICATE = 1) - syndie = TRUE + special_channels = RADIO_SPECIAL_SYNDIE greyscale_config = /datum/greyscale_config/encryptionkey_syndicate greyscale_colors = "#171717#990000" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index d04fd8c872c03..6bb0fe91260bb 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -17,7 +17,8 @@ GLOBAL_LIST_INIT(channel_tokens, list( RADIO_CHANNEL_SUPPLY = RADIO_TOKEN_SUPPLY, RADIO_CHANNEL_SERVICE = RADIO_TOKEN_SERVICE, MODE_BINARY = MODE_TOKEN_BINARY, - RADIO_CHANNEL_AI_PRIVATE = RADIO_TOKEN_AI_PRIVATE + RADIO_CHANNEL_AI_PRIVATE = RADIO_TOKEN_AI_PRIVATE, + RADIO_CHANNEL_ENTERTAINMENT = RADIO_TOKEN_ENTERTAINMENT, )) /obj/item/radio/headset @@ -55,7 +56,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( if(item_flags & IN_INVENTORY && loc == user) // construction of frequency description var/list/avail_chans = list("Use [RADIO_KEY_COMMON] for the currently tuned frequency") - if(translate_binary) + if(special_channels & RADIO_SPECIAL_BINARY) avail_chans += "use [MODE_TOKEN_BINARY] for [MODE_BINARY]" if(length(channels)) for(var/i in 1 to length(channels)) @@ -209,6 +210,13 @@ GLOBAL_LIST_INIT(channel_tokens, list( worn_icon_state = "srv_headset" keyslot = /obj/item/encryptionkey/headset_srvmed +/obj/item/radio/headset/headset_srvent + name = "press headset" + desc = "A headset allowing the wearer to communicate with service and broadcast to entertainment channel." + icon_state = "srvent_headset" + worn_icon_state = "srv_headset" + keyslot = /obj/item/encryptionkey/headset_srvent + /obj/item/radio/headset/headset_com name = "command radio headset" desc = "A headset with a commanding channel." @@ -436,12 +444,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( if(!(ch_name in src.channels)) LAZYSET(channels, ch_name, keyslot2.channels[ch_name]) - if(keyslot2.translate_binary) - translate_binary = TRUE - if(keyslot2.syndie) - syndie = TRUE - if(keyslot2.independent) - independent = TRUE + special_channels |= keyslot2.special_channels for(var/ch_name in channels) secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) @@ -465,7 +468,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( grant_headset_languages(mob_loc) /obj/item/radio/headset/click_alt(mob/living/user) - if (!command) + if(!istype(user) || !command) return CLICK_ACTION_BLOCKING use_command = !use_command to_chat(user, span_notice("You toggle high-volume mode [use_command ? "on" : "off"].")) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index e3587b44066fc..3da023ac329a1 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -118,7 +118,7 @@ return FALSE if(freq == FREQ_SYNDICATE) - if(!(syndie)) + if(!(special_channels &= RADIO_SPECIAL_SYNDIE)) return FALSE//Prevents broadcast of messages over devices lacking the encryption return TRUE @@ -154,7 +154,7 @@ // A fully locked one will do nothing, as locked is intended to be used for stuff that should never be changed if(RADIO_FREQENCY_LOCKED) balloon_alert(user, "can't override frequency lock!") - playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, FALSE, SILENCED_SOUND_EXTRARANGE) return // Emagging an unlocked one will do nothing, for now @@ -219,6 +219,19 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/item/radio/intercom, 27) command = TRUE icon_off = "intercom_command-p" +/obj/item/radio/intercom/syndicate + name = "syndicate intercom" + desc = "Talk smack through this." + command = TRUE + special_channels = RADIO_SPECIAL_SYNDIE + +/obj/item/radio/intercom/syndicate/freerange + name = "syndicate wide-band intercom" + desc = "A custom-made Syndicate-issue intercom used to transmit on all Nanotrasen frequencies. Particularly expensive." + freerange = TRUE + MAPPING_DIRECTIONAL_HELPERS(/obj/item/radio/intercom/prison, 27) MAPPING_DIRECTIONAL_HELPERS(/obj/item/radio/intercom/chapel, 27) MAPPING_DIRECTIONAL_HELPERS(/obj/item/radio/intercom/command, 27) +MAPPING_DIRECTIONAL_HELPERS(/obj/item/radio/intercom/syndicate, 27) +MAPPING_DIRECTIONAL_HELPERS(/obj/item/radio/intercom/syndicate/freerange, 27) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 96dbabfc81b5b..239e97404afb2 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -57,18 +57,16 @@ var/use_command = FALSE /// If true, use_command can be toggled at will. var/command = FALSE + /// Does it play radio noise? + var/radio_noise = TRUE ///makes anyone who is talking through this anonymous. var/anonymize = FALSE /// Encryption key handling var/obj/item/encryptionkey/keyslot - /// If true, can hear the special binary channel. - 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. - var/syndie = FALSE + /// Flags for which "special" radio networks should be accessible + var/special_channels = NONE /// 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 /// associative list of the encrypted radio channels this radio can listen/broadcast to, of the form: list(channel name = channel frequency) @@ -109,7 +107,7 @@ perform_update_icon = FALSE set_listening(listening) set_broadcasting(broadcasting) - set_frequency(sanitize_frequency(frequency, freerange, syndie)) + set_frequency(sanitize_frequency(frequency, freerange, (special_channels & RADIO_SPECIAL_SYNDIE))) set_on(on) perform_update_icon = TRUE @@ -123,19 +121,17 @@ return AddElement(/datum/element/slapcrafting, string_list(list(/datum/crafting_recipe/improv_explosive))) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) - /obj/item/radio/Destroy() remove_radio_all(src) //Just to be sure if(istype(keyslot)) QDEL_NULL(keyslot) return ..() -/obj/item/radio/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/item/radio/on_saboteur(datum/source, disrupt_duration) + . = ..() if(broadcasting) //no broadcasting but it can still be used to send radio messages. set_broadcasting(FALSE) - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/item/radio/proc/set_frequency(new_frequency) SEND_SIGNAL(src, COMSIG_RADIO_NEW_FREQUENCY, args) @@ -154,12 +150,7 @@ if(!(channel_name in channels)) channels[channel_name] = keyslot.channels[channel_name] - if(keyslot.translate_binary) - translate_binary = TRUE - if(keyslot.syndie) - syndie = TRUE - if(keyslot.independent) - independent = TRUE + special_channels = keyslot.special_channels for(var/channel_name in channels) secure_radio_connections[channel_name] = add_radio(src, GLOB.radiochannels[channel_name]) @@ -171,9 +162,7 @@ /obj/item/radio/proc/resetChannels() channels = list() secure_radio_connections = list() - translate_binary = FALSE - syndie = FALSE - independent = FALSE + special_channels = NONE ///goes through all radio channels we should be listening for and readds them to the global list /obj/item/radio/proc/readd_listening_radio_channels() @@ -185,7 +174,7 @@ /obj/item/radio/proc/make_syndie() // Turns normal radios into Syndicate radios! qdel(keyslot) keyslot = new /obj/item/encryptionkey/syndicate() - syndie = TRUE + special_channels |= RADIO_SPECIAL_SYNDIE recalculateChannels() /obj/item/radio/interact(mob/user) @@ -342,7 +331,7 @@ channel = null // Nearby active jammers prevent the message from transmitting - if(is_within_radio_jammer_range(src) && !syndie) + if(is_within_radio_jammer_range(src) && !(special_channels & RADIO_SPECIAL_SYNDIE)) return // Determine the identity information which will be attached to the signal. @@ -352,7 +341,7 @@ var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, radio_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 (special_channels & RADIO_SPECIAL_CENTCOM && (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 signal.data["compression"] = 0 signal.transmission_method = TRANSMISSION_SUPERSPACE signal.levels = list(0) @@ -362,8 +351,8 @@ if(isliving(talking_movable)) var/mob/living/talking_living = talking_movable - if(talking_living.client?.prefs.read_preference(/datum/preference/toggle/radio_noise) && !HAS_TRAIT(talking_living, TRAIT_DEAF)) - SEND_SOUND(talking_living, 'sound/misc/radio_talk.ogg') + if(radio_noise && !HAS_TRAIT(talking_living, TRAIT_DEAF) && talking_living.client?.prefs.read_preference(/datum/preference/toggle/radio_noise)) + SEND_SOUND(talking_living, 'sound/items/radio/radio_talk.ogg') // All radios make an attempt to use the subspace system first signal.send_to_receivers() @@ -411,12 +400,12 @@ if(message_mods[RADIO_EXTENSION] == MODE_L_HAND || message_mods[RADIO_EXTENSION] == MODE_R_HAND) // try to avoid being heard double if (loc == speaker && ismob(speaker)) - var/mob/M = speaker - var/idx = M.get_held_index_of_item(src) + var/mob/mob_speaker = speaker + var/idx = mob_speaker.get_held_index_of_item(src) // left hands are odd slots if (idx && (idx % 2) == (message_mods[RADIO_EXTENSION] == MODE_L_HAND)) return - talk_into(speaker, raw_message, , spans, language=message_language, message_mods=filtered_mods) + talk_into(speaker, raw_message, spans=spans, language=message_language, message_mods=filtered_mods) /// Checks if this radio can receive on the given frequency. /obj/item/radio/proc/can_receive(input_frequency, list/levels) @@ -426,7 +415,7 @@ if(!position || !(position.z in levels)) return FALSE - if (input_frequency == FREQ_SYNDICATE && !syndie) + if (input_frequency == FREQ_SYNDICATE && !(special_channels & RADIO_SPECIAL_SYNDIE)) return FALSE // allow checks: are we listening on that frequency? @@ -434,7 +423,7 @@ return TRUE for(var/ch_name in channels) if(channels[ch_name] & FREQ_LISTENING) - if(GLOB.radiochannels[ch_name] == text2num(input_frequency) || syndie) + if(GLOB.radiochannels[ch_name] == text2num(input_frequency) || special_channels & RADIO_SPECIAL_SYNDIE) return TRUE return FALSE @@ -446,16 +435,16 @@ return var/mob/living/holder = loc - if(!holder.client?.prefs.read_preference(/datum/preference/toggle/radio_noise) && !HAS_TRAIT(holder, TRAIT_DEAF)) + if(!radio_noise || HAS_TRAIT(holder, TRAIT_DEAF) || !holder.client?.prefs.read_preference(/datum/preference/toggle/radio_noise)) return var/list/spans = data["spans"] if(COOLDOWN_FINISHED(src, audio_cooldown)) COOLDOWN_START(src, audio_cooldown, 0.5 SECONDS) - SEND_SOUND(holder, 'sound/misc/radio_receive.ogg') + SEND_SOUND(holder, 'sound/items/radio/radio_receive.ogg') if((SPAN_COMMAND in spans) && COOLDOWN_FINISHED(src, important_audio_cooldown)) COOLDOWN_START(src, important_audio_cooldown, 0.5 SECONDS) - SEND_SOUND(holder, 'sound/misc/radio_important.ogg') + SEND_SOUND(holder, 'sound/items/radio/radio_important.ogg') /obj/item/radio/ui_state(mob/user) return GLOB.inventory_state @@ -505,7 +494,7 @@ tune = tune * 10 . = TRUE if(.) - set_frequency(sanitize_frequency(tune, freerange, syndie)) + set_frequency(sanitize_frequency(tune, freerange, (special_channels & RADIO_SPECIAL_SYNDIE))) if("listen") set_listening(!listening) . = TRUE @@ -551,6 +540,11 @@ if(listening && overlay_speaker_idle) . += overlay_speaker_idle +/obj/item/radio/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(user.combat_mode && tool.tool_behaviour == TOOL_SCREWDRIVER) + return screwdriver_act(user, tool) + return ..() + /obj/item/radio/screwdriver_act(mob/living/user, obj/item/tool) add_fingerprint(user) unscrewed = !unscrewed @@ -604,7 +598,7 @@ channels[ch_name] = TRUE /obj/item/radio/borg/syndicate - syndie = TRUE + special_channels = RADIO_SPECIAL_SYNDIE keyslot = /obj/item/encryptionkey/syndicate /obj/item/radio/borg/syndicate/Initialize(mapload) @@ -652,4 +646,60 @@ . = ..() set_listening(FALSE) +// RADIOS USED BY BROADCASTING +/obj/item/radio/entertainment + desc = "You should not hold this." + canhear_range = 7 + freerange = TRUE + freqlock = RADIO_FREQENCY_LOCKED + radio_noise = FALSE + +/obj/item/radio/entertainment/Initialize(mapload) + . = ..() + set_frequency(FREQ_ENTERTAINMENT) + +/obj/item/radio/entertainment/speakers // Used inside of the entertainment monitors, not to be used as a actual item + should_be_listening = TRUE + should_be_broadcasting = FALSE + +/obj/item/radio/entertainment/speakers/Initialize(mapload) + . = ..() + set_broadcasting(FALSE) + set_listening(TRUE) + wires?.cut(WIRE_TX) + +/obj/item/radio/entertainment/speakers/on_receive_message(list/data) + playsound(source = src, soundin = SFX_MUFFLED_SPEECH, vol = 60, extrarange = -4, vary = TRUE, ignore_walls = FALSE) + + return ..() + +/obj/item/radio/entertainment/speakers/physical // Can be used as a physical item + name = "entertainment radio" + desc = "A portable one-way radio permamently tuned into entertainment frequency." + icon_state = "radio" + inhand_icon_state = "radio" + worn_icon_state = "radio" + overlay_speaker_idle = "radio_s_idle" + overlay_speaker_active = "radio_s_active" + overlay_mic_idle = "radio_m_idle" + overlay_mic_active = "radio_m_active" + +/obj/item/radio/entertainment/microphone // Used inside of a broadcast camera, not to be used as a actual item + should_be_listening = FALSE + should_be_broadcasting = TRUE + +/obj/item/radio/entertainment/microphone/Initialize(mapload) + . = ..() + set_broadcasting(TRUE) + set_listening(FALSE) + wires?.cut(WIRE_RX) + +/obj/item/radio/entertainment/microphone/physical // Can be used as a physical item + name = "microphone" + desc = "No comments." + icon = 'icons/obj/service/broadcast.dmi' + icon_state = "microphone" + inhand_icon_state = "microphone" + canhear_range = 3 + #undef FREQ_LISTENING diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm index e88b1a51187a3..342383380cf76 100644 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ b/code/game/objects/items/devices/reverse_bear_trap.dm @@ -112,7 +112,7 @@ source = src, header = "Reverse bear trap armed", notify_flags = NOTIFY_CATEGORY_NOFLASH, - ghost_sound = 'sound/machines/beep.ogg', + ghost_sound = 'sound/machines/beep/beep.ogg', notify_volume = 75, ) diff --git a/code/game/objects/items/devices/scanners/autopsy_scanner.dm b/code/game/objects/items/devices/scanners/autopsy_scanner.dm index c5d33b7422656..a054b3c69d2ce 100644 --- a/code/game/objects/items/devices/scanners/autopsy_scanner.dm +++ b/code/game/objects/items/devices/scanners/autopsy_scanner.dm @@ -95,7 +95,7 @@ var/blood_type = scanned.dna.blood_type if(blood_id != /datum/reagent/blood) var/datum/reagent/reagents = GLOB.chemical_reagents_list[blood_id] - blood_type = reagents ? reagents.name : blood_id + blood_type = reagents?.name || blood_id autopsy_information += "Blood Type: [blood_type]
" autopsy_information += "Blood Volume: [scanned.blood_volume] cl ([blood_percent]%)
" @@ -108,10 +108,11 @@ for(var/datum/symptom/symptom as anything in advanced_disease.symptoms) autopsy_information += "[symptom.name] - [symptom.desc]
" - var/obj/item/paper/autopsy_report = new(user.loc) - autopsy_report.name = "Autopsy Report ([scanned.name])" + var/obj/item/paper/autopsy_report = new(user.drop_location()) + autopsy_report.name = "autopsy report of [scanned] - [station_time_timestamp()])" autopsy_report.add_raw_text(autopsy_information.Join("\n")) - autopsy_report.update_appearance(UPDATE_ICON) + autopsy_report.color = "#99ccff" + autopsy_report.update_appearance() user.put_in_hands(autopsy_report) user.balloon_alert(user, "report printed") return TRUE diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 261af85e6d576..a1aee90dd5b39 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -30,6 +30,8 @@ custom_price = PAYCHECK_COMMAND /// If this analyzer will give a bonus to wound treatments apon woundscan. var/give_wound_treatment_bonus = FALSE + var/last_scan_text + var/scanner_busy = FALSE /obj/item/healthanalyzer/Initialize(mapload) . = ..() @@ -38,7 +40,7 @@ /obj/item/healthanalyzer/examine(mob/user) . = ..() if(src.mode != SCANNER_NO_MODE) - . += span_notice("Alt-click [src] to toggle the limb damage readout.") + . += span_notice("Alt-click [src] to toggle the limb damage readout. Ctrl-shift-click to print readout report.") /obj/item/healthanalyzer/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins to analyze [user.p_them()]self with [src]! The display shows that [user.p_theyre()] dead!")) @@ -58,8 +60,6 @@ /obj/item/healthanalyzer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE - if(!user.can_read(src)) //SKYRAT 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 @@ -69,37 +69,45 @@ // Clumsiness/brain damage check if ((HAS_TRAIT(user, TRAIT_CLUMSY) || HAS_TRAIT(user, TRAIT_DUMB)) && prob(50)) - user.visible_message(span_warning("[user] analyzes the floor's vitals!"), \ - span_notice("You stupidly try to analyze the floor's vitals!")) - to_chat(user, "[span_info("Analyzing results for The floor:\n\tOverall status: Healthy")]\ - \n[span_info("Key: Suffocation/Toxin/Burn/Brute")]\ - \n[span_info("\tDamage specifics: 0-0-0-0")]\ - \n[span_info("Body temperature: ???")]") + var/turf/scan_turf = get_turf(user) + user.visible_message( + span_warning("[user] analyzes [scan_turf]'s vitals!"), + span_notice("You stupidly try to analyze [scan_turf]'s vitals!"), + ) + + var/floor_text = "Analyzing results for [scan_turf] ([station_time_timestamp()]):
" + floor_text += "Overall status: Unknown
" + floor_text += "Subject lacks a brain.
" + floor_text += "Body temperature: [scan_turf?.return_air()?.return_temperature() || "???"]
" + + if(user.can_read(src)) // BUBBER EDIT - Blind people can analyze again + to_chat(user, examine_block(floor_text)) + last_scan_text = floor_text return if(ispodperson(M) && !advanced) - to_chat(user, "[M]'s biological structure is too complex for the health analyzer.") + to_chat(user, span_info("[M]'s biological structure is too complex for the health analyzer.")) return user.visible_message(span_notice("[user] analyzes [M]'s vitals.")) balloon_alert(user, "analyzing vitals") playsound(user.loc, 'sound/items/healthanalyzer.ogg', 50) + var/readability_check = user.can_read(src) && !user.is_blind() switch (scanmode) if (SCANMODE_HEALTH) - healthscan(user, M, mode, advanced) + last_scan_text = healthscan(user, M, mode, advanced, tochat = readability_check) if (SCANMODE_WOUND) - woundscan(user, M, src) + if(readability_check) + woundscan(user, M, src) add_fingerprint(user) /obj/item/healthanalyzer/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) return NONE - if(!user.can_read(src)) // SKYRAT EDIT CHANGE - Blind people can analyze again - ORIGINAL: if(!user.can_read(src) || user.is_blind()) - return ITEM_INTERACT_BLOCKING - - chemscan(user, interacting_with) + if(user.can_read(src)) // SKYRAT EDIT CHANGE - Blind people can analyze again - ORIGINAL: if(user.can_read(src) && !user.is_blind()) + chemscan(user, interacting_with) return ITEM_INTERACT_SUCCESS /obj/item/healthanalyzer/add_item_context( @@ -132,319 +140,274 @@ * tochat - Whether to immediately post the result into the chat of the user, otherwise it will return the results. */ /proc/healthscan(mob/user, mob/living/target, mode = SCANNER_VERBOSE, advanced = FALSE, tochat = TRUE) - if(user.incapacitated()) + if(user.incapacitated) return // the final list of strings to render - var/render_list = list() + var/list/render_list = list() // Damage specifics var/oxy_loss = target.getOxyLoss() var/tox_loss = target.getToxLoss() var/fire_loss = target.getFireLoss() var/brute_loss = target.getBruteLoss() - var/mob_status = (target.stat == DEAD ? span_alert("Deceased") : "[round(target.health/target.maxHealth,0.01)*100]% healthy") + var/mob_status = (!target.appears_alive() ? span_alert("Deceased") : "[round(target.health / target.maxHealth, 0.01) * 100]% healthy") - if(HAS_TRAIT(target, TRAIT_FAKEDEATH) && !advanced) - mob_status = span_alert("Deceased") - oxy_loss = max(rand(1, 40), oxy_loss, (300 - (tox_loss + fire_loss + brute_loss))) // Random oxygen loss + if(HAS_TRAIT(target, TRAIT_FAKEDEATH) && target.stat != DEAD) + // if we don't appear to actually be in a "dead state", add fake oxyloss + if(oxy_loss + tox_loss + fire_loss + brute_loss < 200) + oxy_loss += 200 - (oxy_loss + tox_loss + fire_loss + brute_loss) + oxy_loss = clamp(oxy_loss, 0, 200) - render_list += "[span_info("Analyzing results for [target]:")]\nOverall status: [mob_status]\n" + render_list += "[span_info("Analyzing results for [target] ([station_time_timestamp()]):")]
Overall status: [mob_status]
" - if(ishuman(target)) - var/mob/living/carbon/human/humantarget = target - if(humantarget.undergoing_cardiac_arrest() && humantarget.stat != DEAD) - render_list += "Subject suffering from heart attack: Apply defibrillation or other electric shock immediately!\n" - if(humantarget.has_reagent(/datum/reagent/inverse/technetium)) - advanced = TRUE + if(!advanced && target.has_reagent(/datum/reagent/inverse/technetium)) + advanced = TRUE - SEND_SIGNAL(target, COMSIG_LIVING_HEALTHSCAN, render_list, advanced, user, mode) + SEND_SIGNAL(target, COMSIG_LIVING_HEALTHSCAN, render_list, advanced, user, mode, tochat) // Husk detection if(HAS_TRAIT(target, TRAIT_HUSK)) if(advanced) if(HAS_TRAIT_FROM(target, TRAIT_HUSK, BURN)) - /* SKYRAT EDIT START: More unhusking information */ - render_list += "Subject has been husked by severe burns. Proceed by repairing burn damage and following up with \ - application of [SYNTHFLESH_UNHUSK_AMOUNT]u synthflesh or injection of rezadone as treatment.\n" + // BUBBER EDIT BEGIN - Better unhusk info with rezadone and exact units mentioned + render_list += "Subject has been husked by [conditional_tooltip("severe burns", "Tend burns and apply [SYNTHFLESH_UNHUSK_AMOUNT]u [/datum/reagent/medicine/c2/synthflesh::name] or use [/datum/reagent/medicine/rezadone::name].", tochat)].
" else if (HAS_TRAIT_FROM(target, TRAIT_HUSK, CHANGELING_DRAIN)) - render_list += "Subject has been husked by dessication. Use application of [SYNTHFLESH_LING_UNHUSK_AMOUNT]u \ - of synthflesh or injection of rezadone as treatment.\n" - /* SKYRAT EDIT END */ + render_list += "Subject has been husked by [conditional_tooltip("desiccation", "Apply [SYNTHFLESH_LING_UNHUSK_AMOUNT]u [/datum/reagent/medicine/c2/synthflesh::name] or use [/datum/reagent/medicine/rezadone::name]", tochat)].
" + // BUBBER EDIT END else - render_list += "Subject has been husked by mysterious causes.\n" + render_list += "Subject has been husked by mysterious causes.
" else - render_list += "Subject has been husked.\n" + render_list += "Subject has been husked.
" if(target.getStaminaLoss()) if(advanced) - render_list += "Fatigue level: [target.getStaminaLoss()]%.\n" + render_list += "Fatigue level: [target.getStaminaLoss()]%.
" else - render_list += "Subject appears to be suffering from fatigue.\n" + render_list += "Subject appears to be suffering from fatigue.
" if (!target.get_organ_slot(ORGAN_SLOT_BRAIN)) // kept exclusively for soul purposes - render_list += "Subject lacks a brain.\n" + render_list += "Subject lacks a brain.
" var/death_consequences_status_text // SKYRAT 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) - if(!trauma.display_scanner) - continue - //SKYRAT EDIT: Scary Traits (Bimbo) - var/trauma_desc = "" - switch(trauma.resilience) - if(TRAUMA_RESILIENCE_SURGERY) - trauma_desc += "severe " - if(TRAUMA_RESILIENCE_LOBOTOMY) - trauma_desc += "deep-rooted " - if(TRAUMA_RESILIENCE_WOUND) - trauma_desc += "fracture-derived " - // SKYRAT EDIT CHANGE BEGIN - Curable permanent traumas - if(TRAUMA_RESILIENCE_MAGIC) - trauma_desc += "soul-bound " - if(TRAUMA_RESILIENCE_ABSOLUTE) - trauma_desc += "permanent " - // SKYRAT EDIT CHANGE END - trauma_desc += trauma.scan_desc - trauma_text += trauma_desc - // SKYRAT 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) - // SKYRAT 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" + if(LAZYLEN(carbontarget.quirks)) + render_list += "Subject Major Disabilities: [carbontarget.get_quirk_string(FALSE, CAT_QUIRK_MAJOR_DISABILITY, from_scan = TRUE)].
" if(advanced) - render_list += "Subject Minor Disabilities: [carbontarget.get_quirk_string(FALSE, CAT_QUIRK_MINOR_DISABILITY, TRUE)].\n" - // Allergies - BUBBER EDIT BEGIN - for(var/datum/quirk/quirky as anything in target.quirks) - if(istype(quirky, /datum/quirk/item_quirk/allergic)) - var/datum/quirk/item_quirk/allergic/allergies_quirk = quirky - var/allergies = allergies_quirk.allergy_string - render_list += "Subject is extremely allergic to the following chemicals:\n" - render_list += "[allergies]\n" // BUBBER EDIT END - - // SKYRAT EDIT ADDITION START -- Show increased/decreased brute/burn mods, to "leave a paper trail" for the fragility quirk - if(ishuman(target)) - var/mob/living/carbon/human/humantarget = target - - var/datum/physiology/physiology = humantarget.physiology - if (physiology.brute_mod != 1) - render_list += "Subject takes [(physiology.brute_mod) * 100]% brute damage.\n" - if (physiology.burn_mod != 1) - render_list += "Subject takes [(physiology.burn_mod) * 100]% burn damage.\n" - // SKYRAT EDIT ADDITION END - - if (HAS_TRAIT(target, TRAIT_IRRADIATED)) - render_list += "Subject is irradiated. Supply toxin healing.\n" - - //Eyes and ears - if(advanced && iscarbon(target)) - var/mob/living/carbon/carbontarget = target - - // Ear status - var/obj/item/organ/internal/ears/ears = carbontarget.get_organ_slot(ORGAN_SLOT_EARS) - if(istype(ears)) - if(HAS_TRAIT_FROM(carbontarget, TRAIT_DEAF, GENETIC_MUTATION)) - render_list += "Subject is genetically deaf.\n" - else if(HAS_TRAIT_FROM(carbontarget, TRAIT_DEAF, EAR_DAMAGE)) - render_list += "Subject is deaf from ear damage.\n" - else if(HAS_TRAIT(carbontarget, TRAIT_DEAF)) - render_list += "Subject is deaf.\n" - else - if(ears.damage) - render_list += "Subject has [ears.damage > ears.maxHealth ? "permanent ": "temporary "]hearing damage.\n" - if(ears.deaf) - render_list += "Subject is [ears.damage > ears.maxHealth ? "permanently": "temporarily"] deaf.\n" - - // Eye status - var/obj/item/organ/internal/eyes/eyes = carbontarget.get_organ_slot(ORGAN_SLOT_EYES) - if(istype(eyes)) - if(carbontarget.is_blind()) - render_list += "Subject is blind.\n" - else if(carbontarget.is_nearsighted()) - render_list += "Subject is nearsighted.\n" + render_list += "Subject Minor Disabilities: [carbontarget.get_quirk_string(FALSE, CAT_QUIRK_MINOR_DISABILITY, TRUE)].
" // Body part damage report if(iscarbon(target)) var/mob/living/carbon/carbontarget = target - var/list/damaged = carbontarget.get_damaged_bodyparts(1,1) - if(length(damaged)>0 || oxy_loss>0 || tox_loss>0 || fire_loss>0) - var/dmgreport = "General status:\ - \ + var/any_damage = brute_loss > 0 || fire_loss > 0 || oxy_loss > 0 || tox_loss > 0 || fire_loss > 0 + var/any_missing = length(carbontarget.bodyparts) < (carbontarget.dna?.species?.max_bodypart_count || 6) + var/any_wounded = length(carbontarget.all_wounds) + var/any_embeds = carbontarget.has_embedded_objects() + if(any_damage || (mode == SCANNER_VERBOSE && (any_missing || any_wounded || any_embeds))) + render_list += "
" + var/dmgreport = "Body status:\ + \ +
\ + \ \ \ \ \ - \ - \ - \ - \ - \ - " + \ + \ + \ + \ + \ + \ + \ + \ + " if(mode == SCANNER_VERBOSE) - for(var/obj/item/bodypart/limb as anything in damaged) - if(limb.bodytype & BODYTYPE_ROBOTIC) - dmgreport += "" - else - dmgreport += "" - dmgreport += "" - dmgreport += "" - dmgreport += "
Damage:BruteBurnToxinSuffocation
Overall:[CEILING(brute_loss,1)][CEILING(fire_loss,1)][CEILING(tox_loss,1)][CEILING(oxy_loss,1)]
Suffocation
Overall:[ceil(brute_loss)][ceil(fire_loss)][ceil(tox_loss)][ceil(oxy_loss)]
[capitalize(limb.name)]:
[capitalize(limb.plaintext_zone)]:[(limb.brute_dam > 0) ? "[CEILING(limb.brute_dam,1)]" : "0"][(limb.burn_dam > 0) ? "[CEILING(limb.burn_dam,1)]" : "0"]
" + // Follow same body zone list every time so it's consistent across all humans + for(var/zone in GLOB.all_body_zones) + var/obj/item/bodypart/limb = carbontarget.get_bodypart(zone) + if(isnull(limb)) + dmgreport += "" + dmgreport += "[capitalize(parse_zone(zone))]:" + dmgreport += "-" + dmgreport += "-" + dmgreport += "" + dmgreport += "↳ Physical trauma: [conditional_tooltip("Dismembered", "Reattach or replace surgically.", tochat)]" + continue + var/has_any_embeds = length(limb.embedded_objects) >= 1 + var/has_any_wounds = length(limb.wounds) >= 1 + var/is_damaged = limb.burn_dam > 0 || limb.brute_dam > 0 + if(!is_damaged && (zone != BODY_ZONE_CHEST || (tox_loss <= 0 && oxy_loss <= 0)) && !has_any_embeds && !has_any_wounds) + continue + dmgreport += "" + dmgreport += "[capitalize((limb.bodytype & BODYTYPE_ROBOTIC) ? limb.name : limb.plaintext_zone)]:" + dmgreport += "[limb.brute_dam > 0 ? ceil(limb.brute_dam) : "0"]" + dmgreport += "[limb.burn_dam > 0 ? ceil(limb.burn_dam) : "0"]" + if(zone == BODY_ZONE_CHEST) // tox/oxy is stored in the chest + dmgreport += "[tox_loss > 0 ? ceil(tox_loss) : "0"]" + dmgreport += "[oxy_loss > 0 ? ceil(oxy_loss) : "0"]" + dmgreport += "" + if(has_any_embeds) + var/list/embedded_names = list() + for(var/obj/item/embed as anything in limb.embedded_objects) + embedded_names[capitalize(embed.name)] += 1 + for(var/embedded_name in embedded_names) + var/displayed = embedded_name + var/embedded_amt = embedded_names[embedded_name] + if(embedded_amt > 1) + displayed = "[embedded_amt]x [embedded_name]" + dmgreport += "↳ Foreign object(s): [conditional_tooltip(displayed, "Use a hemostat to remove.", tochat)]" + if(has_any_wounds) + for(var/datum/wound/wound as anything in limb.wounds) + dmgreport += "↳ Physical trauma: [conditional_tooltip("[wound.name] ([wound.severity_text()])", wound.treat_text_short, tochat)]" + + dmgreport += "" render_list += dmgreport // tables do not need extra linebreak - for(var/obj/item/bodypart/limb as anything in carbontarget.bodyparts) - for(var/obj/item/embed as anything in limb.embedded_objects) - render_list += "Embedded object: [embed] located in \the [limb.plaintext_zone]\n" if(ishuman(target)) var/mob/living/carbon/human/humantarget = target // Organ damage, missing organs - if(humantarget.organs && humantarget.organs.len) - var/render = FALSE - var/toReport = "Organs:\ - \ - \ - [advanced ? "" : ""]\ - " - - for(var/obj/item/organ/organ as anything in humantarget.organs) - var/status = organ.get_status_text(advanced) - if (status != "") + var/render = FALSE + var/toReport = "Organ status:\ + \ +
Organ:DmgStatus
\ + \ + \ + [advanced ? "" : ""]\ + \ + " + + var/list/missing_organs = list() + if(!humantarget.get_organ_slot(ORGAN_SLOT_BRAIN)) + missing_organs[ORGAN_SLOT_BRAIN] = "Brain" + if(!humantarget.needs_heart() && !humantarget.get_organ_slot(ORGAN_SLOT_HEART)) + missing_organs[ORGAN_SLOT_HEART] = "Heart" + if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOBREATH, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantlungs) && !humantarget.get_organ_slot(ORGAN_SLOT_LUNGS)) + missing_organs[ORGAN_SLOT_LUNGS] = "Lungs" + if(!HAS_TRAIT_FROM(humantarget, TRAIT_LIVERLESS_METABOLISM, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantliver) && !humantarget.get_organ_slot(ORGAN_SLOT_LIVER)) + missing_organs[ORGAN_SLOT_LIVER] = "Liver" + if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOHUNGER, SPECIES_TRAIT) && !isnull(humantarget.dna.species.mutantstomach) && !humantarget.get_organ_slot(ORGAN_SLOT_STOMACH)) + missing_organs[ORGAN_SLOT_STOMACH] ="Stomach" + if(!isnull(humantarget.dna.species.mutanttongue) && !humantarget.get_organ_slot(ORGAN_SLOT_TONGUE)) + missing_organs[ORGAN_SLOT_TONGUE] = "Tongue" + if(!isnull(humantarget.dna.species.mutantears) && !humantarget.get_organ_slot(ORGAN_SLOT_EARS)) + missing_organs[ORGAN_SLOT_EARS] = "Ears" + if(!isnull(humantarget.dna.species.mutantears) && !humantarget.get_organ_slot(ORGAN_SLOT_EYES)) + missing_organs[ORGAN_SLOT_EYES] = "Eyes" + + // Follow same order as in the organ_process_order so it's consistent across all humans + for(var/sorted_slot in GLOB.organ_process_order) + var/obj/item/organ/organ = humantarget.get_organ_slot(sorted_slot) + if(isnull(organ)) + if(missing_organs[sorted_slot]) render = TRUE - toReport += "\ - [advanced ? "" : ""]\ - " - - var/missing_organs = list() - if(!humantarget.get_organ_slot(ORGAN_SLOT_BRAIN)) - missing_organs += "brain" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOBLOOD, SPECIES_TRAIT) && !humantarget.get_organ_slot(ORGAN_SLOT_HEART)) - missing_organs += "heart" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOBREATH, SPECIES_TRAIT) && !humantarget.get_organ_slot(ORGAN_SLOT_LUNGS)) - missing_organs += "lungs" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_LIVERLESS_METABOLISM, SPECIES_TRAIT) && !humantarget.get_organ_slot(ORGAN_SLOT_LIVER)) - missing_organs += "liver" - if(!HAS_TRAIT_FROM(humantarget, TRAIT_NOHUNGER, SPECIES_TRAIT) && !humantarget.get_organ_slot(ORGAN_SLOT_STOMACH)) - missing_organs += "stomach" - if(!humantarget.get_organ_slot(ORGAN_SLOT_TONGUE)) - missing_organs += "tongue" - if(!humantarget.get_organ_slot(ORGAN_SLOT_EARS)) - missing_organs += "ears" - if(!humantarget.get_organ_slot(ORGAN_SLOT_EYES)) - missing_organs += "eyes" - - if(length(missing_organs)) + toReport += "\ + [advanced ? "" : ""]\ + " + continue + if(mode != SCANNER_VERBOSE && !organ.show_on_condensed_scans()) + continue + var/status = organ.get_status_text(advanced, tochat) + var/appendix = organ.get_status_appendix(advanced, tochat) + if(status || appendix) + status ||= "OK" // otherwise flawless organs have no status reported by default render = TRUE - for(var/organ in missing_organs) - toReport += "\ - [advanced ? "" : ""]\ - " + toReport += "\ + \ + [advanced ? "" : ""]\ + \ + " + if(appendix) + toReport += "" + + if(render) + render_list += "
" + render_list += toReport + "
Organ:DmgStatus
[organ.name]:[CEILING(organ.damage,1)][status]
[missing_organs[sorted_slot]]:-Missing
[organ]:["-"]["Missing"]
[capitalize(organ.name)]:[organ.damage > 0 ? ceil(organ.damage) : "0"][status]
↳ [appendix]
" // tables do not need extra linebreak + + // Cybernetics + var/list/cyberimps + for(var/obj/item/organ/internal/cyberimp/cyberimp in humantarget.organs) + if(IS_ROBOTIC_ORGAN(cyberimp) && !(cyberimp.organ_flags & ORGAN_HIDDEN)) + LAZYADD(cyberimps, cyberimp.examine_title(user)) + if(LAZYLEN(cyberimps)) + if(!render) + render_list += "
" + render_list += "Detected cybernetic modifications:
" + render_list += "[english_list(cyberimps, and_text = ", and ")]
" - if(render) - render_list += toReport + "" // tables do not need extra linebreak + render_list += "
" //Genetic stability - if(advanced && humantarget.has_dna()) - render_list += "Genetic Stability: [humantarget.dna.stability]%.\n" + if(advanced && humantarget.has_dna() && humantarget.dna.stability != initial(humantarget.dna.stability)) + render_list += "Genetic Stability: [humantarget.dna.stability]%.
" // Hulk and body temperature var/datum/species/targetspecies = humantarget.dna.species var/mutant = HAS_TRAIT(humantarget, TRAIT_HULK) - render_list += "Species: [targetspecies.name][mutant ? "-derived mutant" : ""]\n" + render_list += "Species: [targetspecies.name][mutant ? "-derived mutant" : ""]
" var/core_temperature_message = "Core temperature: [round(humantarget.coretemperature-T0C, 0.1)] °C ([round(humantarget.coretemperature*1.8-459.67,0.1)] °F)" if(humantarget.coretemperature >= humantarget.get_body_temp_heat_damage_limit()) - render_list += "☼ [core_temperature_message] ☼\n" + render_list += "☼ [core_temperature_message] ☼
" else if(humantarget.coretemperature <= humantarget.get_body_temp_cold_damage_limit()) - render_list += "❄ [core_temperature_message] ❄\n" + render_list += "❄ [core_temperature_message] ❄
" else - render_list += "[core_temperature_message]\n" + render_list += "[core_temperature_message]
" var/body_temperature_message = "Body temperature: [round(target.bodytemperature-T0C, 0.1)] °C ([round(target.bodytemperature*1.8-459.67,0.1)] °F)" if(target.bodytemperature >= target.get_body_temp_heat_damage_limit()) - render_list += "☼ [body_temperature_message] ☼\n" + render_list += "☼ [body_temperature_message] ☼
" else if(target.bodytemperature <= target.get_body_temp_cold_damage_limit()) - render_list += "❄ [body_temperature_message] ❄\n" + render_list += "❄ [body_temperature_message] ❄
" else - render_list += "[body_temperature_message]\n" - - // Time of death - if(target.station_timestamp_timeofdeath && (target.stat == DEAD || ((HAS_TRAIT(target, TRAIT_FAKEDEATH)) && !advanced))) - render_list += "Time of Death: [target.station_timestamp_timeofdeath]\n" - var/tdelta = round(world.time - target.timeofdeath) - render_list += "Subject died [DisplayTimeText(tdelta)] ago.\n" - - // Wounds - if(iscarbon(target)) - var/mob/living/carbon/carbontarget = target - var/list/wounded_parts = carbontarget.get_wounded_bodyparts() - for(var/i in wounded_parts) - var/obj/item/bodypart/wounded_part = i - render_list += "Physical trauma[LAZYLEN(wounded_part.wounds) > 1 ? "s" : ""] detected in [wounded_part.name]" - for(var/k in wounded_part.wounds) - var/datum/wound/W = k - render_list += "
[W.name] ([W.severity_text()])\nRecommended treatment: [W.treat_text]
" // less lines than in woundscan() so we don't overload people trying to get basic med info - render_list += "
" - - //Diseases - for(var/datum/disease/disease as anything in target.diseases) - if(!(disease.visibility_flags & HIDDEN_SCANNER)) - render_list += "Warning: [disease.form] detected\n\ -
Name: [disease.name].\nType: [disease.spread_text].\nStage: [disease.stage]/[disease.max_stages].\nPossible Cure: [disease.cure_text]
\ -
" // divs do not need extra linebreak + render_list += "[body_temperature_message]
" // Blood Level - if(target.has_dna()) - var/mob/living/carbon/carbontarget = target - var/blood_id = carbontarget.get_blood_id() - if(blood_id) - if(carbontarget.is_bleeding()) - render_list += "Subject is bleeding!\n" - var/blood_percent = round((carbontarget.blood_volume / BLOOD_VOLUME_NORMAL) * 100) - var/blood_type = carbontarget.dna.blood_type - if(blood_id != /datum/reagent/blood) // special blood substance - var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id] - blood_type = R ? R.name : blood_id - if(carbontarget.blood_volume <= BLOOD_VOLUME_SAFE && carbontarget.blood_volume > BLOOD_VOLUME_OKAY) - render_list += "Blood level: LOW [blood_percent]%, [carbontarget.blood_volume] cl, [span_info("type: [blood_type]")]\n" - else if(carbontarget.blood_volume <= BLOOD_VOLUME_OKAY) - render_list += "Blood level: CRITICAL [blood_percent]%, [carbontarget.blood_volume] cl, [span_info("type: [blood_type]")]\n" - else - render_list += "Blood level: [blood_percent]%, [carbontarget.blood_volume] cl, type: [blood_type]\n" + var/mob/living/carbon/carbontarget = target + var/blood_id = carbontarget.get_blood_id() + if(blood_id) + var/blood_percent = round((carbontarget.blood_volume / BLOOD_VOLUME_NORMAL) * 100) + var/blood_type = carbontarget.dna.blood_type + if(blood_id != /datum/reagent/blood) // special blood substance + var/datum/reagent/real_reagent = GLOB.chemical_reagents_list[blood_id] + blood_type = real_reagent?.name || blood_id + if(carbontarget.blood_volume <= BLOOD_VOLUME_SAFE && carbontarget.blood_volume > BLOOD_VOLUME_OKAY) + render_list += "Blood level: LOW [blood_percent]%, [carbontarget.blood_volume] cl, [span_info("type: [blood_type]")]
" + else if(carbontarget.blood_volume <= BLOOD_VOLUME_OKAY) + render_list += "Blood level: CRITICAL [blood_percent]%, [carbontarget.blood_volume] cl, [span_info("type: [blood_type]")]
" + else + render_list += "Blood level: [blood_percent]%, [carbontarget.blood_volume] cl, type: [blood_type]
" - // Blood Alcohol Content var/blood_alcohol_content = target.get_blood_alcohol_content() if(blood_alcohol_content > 0) if(blood_alcohol_content >= 0.24) - render_list += "Blood alcohol content: CRITICAL [blood_alcohol_content]%\n" + render_list += "Blood alcohol content: CRITICAL [blood_alcohol_content]%
" else - render_list += "Blood alcohol content: [blood_alcohol_content]%\n" + render_list += "Blood alcohol content: [blood_alcohol_content]%
" - // Cybernetics - if(iscarbon(target)) - var/mob/living/carbon/carbontarget = target - var/cyberimp_detect - for(var/obj/item/organ/internal/cyberimp/cyberimp in carbontarget.organs) - if(IS_ROBOTIC_ORGAN(cyberimp) && !(cyberimp.organ_flags & ORGAN_HIDDEN)) - cyberimp_detect += "[!cyberimp_detect ? "[cyberimp.get_examine_string(user)]" : ", [cyberimp.get_examine_string(user)]"]" - if(cyberimp_detect) - render_list += "Detected cybernetic modifications:\n" - render_list += "[cyberimp_detect]\n" - // we handled the last
so we don't need handholding + //Diseases + var/disease_hr = FALSE + for(var/datum/disease/disease as anything in target.diseases) + if(disease.visibility_flags & HIDDEN_SCANNER) + continue + if(!disease_hr) + render_list += "
" + disease_hr = TRUE + render_list += "\ + Warning: [disease.form] detected
\ +
\ + Name: [disease.name].
\ + Type: [disease.spread_text].
\ + Stage: [disease.stage]/[disease.max_stages].
\ + Possible Cure: [disease.cure_text]
\ +
" - // SKYRAT EDIT ADDITION - Mutant stuff + // SKYRAT EDIT ADDITION - Mutant stuff and DEATH CONSEQUENCES if(target.GetComponent(/datum/component/mutant_infection)) render_list += span_userdanger("UNKNOWN PROTO-VIRAL INFECTION DETECTED. ISOLATE IMMEDIATELY.") - // SKYRAT EDIT END - - // SKYRAT EDIT ADDITION - DEATH CONSEQUENCES QUIRK if(death_consequences_status_text) render_list += death_consequences_status_text // SKYRAT EDIT END @@ -464,13 +427,50 @@ render_list += "Patient's infection is currently [cling_infection.can_cure ? "EXPOSED" : "INCUBATING"]." //BUBBERSTATION EDIT END + // Time of death + if(target.station_timestamp_timeofdeath && !target.appears_alive()) + render_list += "
" + render_list += "Time of Death: [target.station_timestamp_timeofdeath]
" + render_list += "Subject died [DisplayTimeText(round(world.time - target.timeofdeath))] ago.
" + + . = jointext(render_list, "") if(tochat) - to_chat(user, examine_block(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) - else - return(jointext(render_list, "")) + to_chat(user, examine_block(.), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) + return . + +/obj/item/healthanalyzer/click_ctrl_shift(mob/user) + . = ..() + if(!LAZYLEN(last_scan_text)) + balloon_alert(user, "no scans!") + return + if(scanner_busy) + balloon_alert(user, "analyzer busy!") + return + scanner_busy = TRUE + balloon_alert(user, "printing report...") + addtimer(CALLBACK(src, PROC_REF(print_report)), 2 SECONDS) + +/obj/item/healthanalyzer/proc/print_report(mob/user) + var/obj/item/paper/report_paper = new(get_turf(src)) + + report_paper.color = "#99ccff" + report_paper.name = "health scan report - [station_time_timestamp()]" + var/report_text = "
Health scan report. Time of retrieval: [station_time_timestamp()]

" + report_text += last_scan_text + + report_paper.add_raw_text(report_text) + report_paper.update_appearance() + + if(ismob(loc)) + var/mob/printer = loc + printer.put_in_hands(report_paper) + balloon_alert(printer, "logs cleared") + + report_text = list() + scanner_busy = FALSE /proc/chemscan(mob/living/user, mob/living/target) - if(user.incapacitated()) + if(user.incapacitated) return if(istype(target) && target.reagents) @@ -483,12 +483,12 @@ var/datum/reagent/reagent = r if(reagent.chemical_flags & REAGENT_INVISIBLE) //Don't show hidden chems on scanners continue - render_block += "[round(reagent.volume, 0.001)] units of [reagent.name][reagent.overdosed ? " - [span_boldannounce("OVERDOSING")]" : ".
"]\n" + render_block += "[round(reagent.volume, 0.001)] units of [reagent.name][reagent.overdosed ? " - [span_boldannounce("OVERDOSING")]" : ".
"]
" if(!length(render_block)) //If no VISIBLY DISPLAYED reagents are present, we report as if there is nothing. - render_list += "Subject contains no reagents in their blood.\n" + render_list += "Subject contains no reagents in their blood.
" else - render_list += "Subject contains the following reagents in their blood:\n" + render_list += "Subject contains the following reagents in their blood:
" render_list += render_block //Otherwise, we add the header, reagent readouts, and clear the readout block for use on the stomach. render_block.Cut() @@ -501,35 +501,35 @@ if(bit.chemical_flags & REAGENT_INVISIBLE) continue if(!belly.food_reagents[bit.type]) - render_block += "[round(bit.volume, 0.001)] units of [bit.name][bit.overdosed ? " - [span_boldannounce("OVERDOSING")]" : ".
"]\n" + render_block += "[round(bit.volume, 0.001)] units of [bit.name][bit.overdosed ? " - [span_boldannounce("OVERDOSING")]" : ".
"]
" else var/bit_vol = bit.volume - belly.food_reagents[bit.type] if(bit_vol > 0) - render_block += "[round(bit_vol, 0.001)] units of [bit.name][bit.overdosed ? " - [span_boldannounce("OVERDOSING")]" : ".
"]\n" + render_block += "[round(bit_vol, 0.001)] units of [bit.name][bit.overdosed ? " - [span_boldannounce("OVERDOSING")]" : ".
"]
" if(!length(render_block)) - render_list += "Subject contains no reagents in their stomach.\n" + render_list += "Subject contains no reagents in their stomach.
" else - render_list += "Subject contains the following reagents in their stomach:\n" + render_list += "Subject contains the following reagents in their stomach:
" render_list += render_block // Addictions if(LAZYLEN(target.mind?.active_addictions)) - render_list += "Subject is addicted to the following types of drug:\n" + render_list += "Subject is addicted to the following types of drug:
" for(var/datum/addiction/addiction_type as anything in target.mind.active_addictions) - render_list += "[initial(addiction_type.name)]\n" + render_list += "[initial(addiction_type.name)]
" // Special eigenstasium addiction if(target.has_status_effect(/datum/status_effect/eigenstasium)) - render_list += "Subject is temporally unstable. Stabilising agent is recommended to reduce disturbances.\n" + render_list += "Subject is temporally unstable. Stabilising agent is recommended to reduce disturbances.
" // Allergies for(var/datum/quirk/quirky as anything in target.quirks) if(istype(quirky, /datum/quirk/item_quirk/allergic)) var/datum/quirk/item_quirk/allergic/allergies_quirk = quirky var/allergies = allergies_quirk.allergy_string - render_list += "Subject is extremely allergic to the following chemicals:\n" - render_list += "[allergies]\n" + render_list += "Subject is extremely allergic to the following chemicals:
" + render_list += "[allergies]
" // we handled the last
so we don't need handholding to_chat(user, examine_block(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) @@ -556,7 +556,7 @@ /// Displays wounds with extended information on their status vs medscanners /proc/woundscan(mob/user, mob/living/carbon/patient, obj/item/healthanalyzer/scanner, simple_scan = FALSE) - if(!istype(patient) || user.incapacitated()) + if(!istype(patient) || user.incapacitated) return var/render_list = "" @@ -566,7 +566,7 @@ render_list += "Warning: Physical trauma[LAZYLEN(wounded_part.wounds) > 1? "s" : ""] detected in [wounded_part.name]" for(var/limb_wound in wounded_part.wounds) var/datum/wound/current_wound = limb_wound - render_list += "
[simple_scan ? current_wound.get_simple_scanner_description() : current_wound.get_scanner_description()]
\n" + render_list += "
[simple_scan ? current_wound.get_simple_scanner_description() : current_wound.get_scanner_description()]

" if (scanner.give_wound_treatment_bonus) ADD_TRAIT(current_wound, TRAIT_WOUND_SCANNED, ANALYZER_TRAIT) if(!advised) @@ -587,7 +587,7 @@ if(simple_scan) var/obj/item/healthanalyzer/simple/simple_scanner = scanner simple_scanner.show_emotion(AID_EMOTION_WARN) - playsound(simple_scanner, 'sound/machines/twobeep.ogg', 50, FALSE) + playsound(simple_scanner, 'sound/machines/beep/twobeep.ogg', 50, FALSE) /obj/item/healthanalyzer/simple @@ -625,7 +625,7 @@ show_emotion(AID_EMOTION_ANGRY) /obj/item/healthanalyzer/simple/proc/violence(mob/user) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) if(isliving(user)) var/mob/living/L = user to_chat(L, span_warning("[src] makes a disappointed buzz and pricks your finger for being greedy. Ow!")) @@ -650,7 +650,7 @@ ) if(!iscarbon(interacting_with)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) 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 ITEM_INTERACT_BLOCKING @@ -725,14 +725,14 @@ /// 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()) + if(!istype(patient) || user.incapacitated) return var/list/render = list() for(var/datum/disease/disease as anything in patient.diseases) if(!(disease.visibility_flags & HIDDEN_SCANNER)) - render += "Warning: [disease.form] detected\n\ -
Name: [disease.name].\nType: [disease.spread_text].\nStage: [disease.stage]/[disease.max_stages].\nPossible Cure: [disease.cure_text]
\ + render += "Warning: [disease.form] detected
\ +
Name: [disease.name].
Type: [disease.spread_text].
Stage: [disease.stage]/[disease.max_stages].
Possible Cure: [disease.cure_text]
\
" if(!length(render)) @@ -742,7 +742,7 @@ else to_chat(user, span_notice(render.Join(""))) scanner.emotion = AID_EMOTION_WARN - playsound(scanner, 'sound/machines/twobeep.ogg', 50, FALSE) + playsound(scanner, 'sound/machines/beep/twobeep.ogg', 50, FALSE) #undef SCANMODE_HEALTH #undef SCANMODE_WOUND diff --git a/code/game/objects/items/devices/swapper.dm b/code/game/objects/items/devices/swapper.dm index 650562dd87829..20554d18a8e59 100644 --- a/code/game/objects/items/devices/swapper.dm +++ b/code/game/objects/items/devices/swapper.dm @@ -57,9 +57,9 @@ if(QDELETED(linked_swapper)) to_chat(user, span_warning("[src] is not linked with another swapper.")) return - playsound(src, 'sound/weapons/flash.ogg', 25, TRUE) + playsound(src, 'sound/items/weapons/flash.ogg', 25, TRUE) to_chat(user, span_notice("You activate [src].")) - playsound(linked_swapper, 'sound/weapons/flash.ogg', 25, TRUE) + playsound(linked_swapper, 'sound/items/weapons/flash.ogg', 25, TRUE) if(ismob(linked_swapper.loc)) var/mob/holder = linked_swapper.loc to_chat(holder, span_notice("[linked_swapper] starts buzzing.")) diff --git a/code/game/objects/items/devices/table_clock.dm b/code/game/objects/items/devices/table_clock.dm index 37c1098759e98..d9c5e44fcf76c 100644 --- a/code/game/objects/items/devices/table_clock.dm +++ b/code/game/objects/items/devices/table_clock.dm @@ -37,7 +37,7 @@ . = ..() if(attacking_item.force < 5 || broken) return - if(break_clock(break_sound = 'sound/magic/clockwork/ark_activation.ogg')) + if(break_clock(break_sound = 'sound/effects/magic/clockwork/ark_activation.ogg')) user.visible_message( span_warning("[user] smashes \the [src] so hard it stops breaking!"), span_boldannounce("I can't stand this stupid machine anymore! Shut up already!"), diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index d30f379197eea..9b6328fe682fa 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -122,7 +122,7 @@ /obj/item/taperecorder/proc/can_use(mob/user) if(user && ismob(user)) - if(!user.incapacitated()) + if(!user.incapacitated) return TRUE return FALSE @@ -162,7 +162,7 @@ if(mytape && recording) mytape.timestamp += mytape.used_capacity - mytape.storedinfo += "\[[time2text(mytape.used_capacity,"mm:ss")]\] [raw_message]" + mytape.storedinfo += "\[[time2text(mytape.used_capacity,"mm:ss")]\] [speaker.GetVoice()]: [raw_message]" /obj/item/taperecorder/verb/record() diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 0dc69cb9c8117..a2fac2b50a44f 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -138,7 +138,7 @@ effective or pretty fucking useless. data["cooldown"] = DisplayTimeText(get_cooldown()) return data -/obj/item/healthanalyzer/rad_laser/ui_act(action, params) +/obj/item/healthanalyzer/rad_laser/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -361,15 +361,6 @@ effective or pretty fucking useless. new /obj/item/analyzer(src) new /obj/item/wirecutters(src) -/obj/item/storage/toolbox/emergency/turret/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) - if(!istype(inserted, /obj/item/wrench/combat)) - return TRUE - if(!user.combat_mode) - return TRUE - if(!inserted.toolspeed) - return TRUE - return FALSE - /obj/item/storage/toolbox/emergency/turret/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(!istype(tool, /obj/item/wrench/combat)) return NONE @@ -389,7 +380,7 @@ effective or pretty fucking useless. COMBAT_MESSAGE_RANGE, ) - playsound(src, 'sound/items/drill_use.ogg', 80, TRUE, -1) + playsound(src, 'sound/items/tools/drill_use.ogg', 80, TRUE, -1) var/obj/machinery/porta_turret/syndicate/toolbox/turret = new(get_turf(loc)) set_faction(turret, user) turret.toolbox = src diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 598c16c9041a8..4f0c0a84aa317 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -25,11 +25,36 @@ /obj/item/transfer_valve/Initialize(mapload) . = ..() RegisterSignal(src, COMSIG_ITEM_FRIED, PROC_REF(on_fried)) + register_context() /obj/item/transfer_valve/Destroy() attached_device = null return ..() +/obj/item/transfer_valve/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + + if(tank_one || tank_two) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove [tank_one || tank_two]" + . = CONTEXTUAL_SCREENTIP_SET + if(istype(held_item) && is_type_in_list(held_item, list(/obj/item/tank, /obj/item/assembly))) + context[SCREENTIP_CONTEXT_LMB] = "Attach [held_item]" + . = CONTEXTUAL_SCREENTIP_SET + + return . || NONE + +/obj/item/transfer_valve/click_alt(mob/user) + if(tank_one) + split_gases() + valve_open = FALSE + tank_one.forceMove(drop_location()) + else if(tank_two) + split_gases() + valve_open = FALSE + tank_two.forceMove(drop_location()) + + return CLICK_ACTION_SUCCESS + /obj/item/transfer_valve/IsAssemblyHolder() return TRUE @@ -291,7 +316,7 @@ data["valve"] = valve_open return data -/obj/item/transfer_valve/ui_act(action, params) +/obj/item/transfer_valve/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index b06dd737654d0..aa98d325a7d46 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -360,10 +360,8 @@ if(4) //Destroy Equipment selected_turf.visible_message(span_userdanger("Everything [user] is holding and wearing disappears!")) - for(var/obj/item/non_implant in user) - if(istype(non_implant, /obj/item/implant)) - continue - qdel(non_implant) + var/list/belongings = user.get_all_gear() + QDEL_LIST(belongings) if(5) //Monkeying selected_turf.visible_message(span_userdanger("[user] transforms into a monkey!")) @@ -395,9 +393,9 @@ if(11) //Cookie selected_turf.visible_message(span_userdanger("A cookie appears out of thin air!")) - var/obj/item/food/cookie/C = new(drop_location()) + var/obj/item/food/cookie/ooh_a_cookie = new(drop_location()) do_smoke(0, holder = src, location = drop_location()) - C.name = "Cookie of Fate" + ooh_a_cookie.name = "Cookie of Fate" if(12) //Healing selected_turf.visible_message(span_userdanger("[user] looks very healthy!")) @@ -509,8 +507,8 @@ to_summon, get_turf(cast_on), precision = 1, - asoundin = 'sound/magic/wand_teleport.ogg', - asoundout = 'sound/magic/wand_teleport.ogg', + asoundin = 'sound/effects/magic/wand_teleport.ogg', + asoundout = 'sound/effects/magic/wand_teleport.ogg', channel = TELEPORT_CHANNEL_MAGIC, ) diff --git a/code/game/objects/items/dna_probe.dm b/code/game/objects/items/dna_probe.dm index 57718ca217e0b..9e3be2dce40c4 100644 --- a/code/game/objects/items/dna_probe.dm +++ b/code/game/objects/items/dna_probe.dm @@ -48,7 +48,7 @@ if(!our_vault) dna_vault_ref = WEAKREF(target)//linking the dna vault with the probe balloon_alert(user, "vault linked") - playsound(src, 'sound/machines/terminal_success.ogg', 50) + playsound(src, 'sound/machines/terminal/terminal_success.ogg', 50) return TRUE return FALSE @@ -70,14 +70,14 @@ target.animal_dna += stored_dna_animal stored_dna_animal.Cut() target.check_goal() - playsound(target, 'sound/misc/compiler-stage1.ogg', 50) + playsound(target, 'sound/machines/compiler/compiler-stage1.ogg', 50) to_chat(user, span_notice("[uploaded] new datapoints uploaded.")) return uploaded /obj/item/dna_probe/proc/scan_dna(atom/target, mob/user) var/obj/machinery/dna_vault/our_vault = dna_vault_ref?.resolve() if(!our_vault) - playsound(user, 'sound/machines/buzz-sigh.ogg', 50) + playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 50) balloon_alert(user, "need database!") return if(istype(target, /obj/machinery/hydroponics)) @@ -94,7 +94,7 @@ to_chat(user, span_alert("Plant needs to be ready to harvest to perform full data scan.")) //Because space dna is actually magic return stored_dna_plants[hydro_tray.myseed.type] = TRUE - playsound(src, 'sound/misc/compiler-stage2.ogg', 50) + playsound(src, 'sound/machines/compiler/compiler-stage2.ogg', 50) balloon_alert(user, "data added") return TRUE else if(ishuman(target)) @@ -109,7 +109,7 @@ to_chat(user, span_alert("No compatible DNA detected.")) return . stored_dna_human[human_target.dna.unique_identity] = TRUE - playsound(src, 'sound/misc/compiler-stage2.ogg', 50) + playsound(src, 'sound/machines/compiler/compiler-stage2.ogg', 50) balloon_alert(user, "data added") return TRUE @@ -131,7 +131,7 @@ to_chat(user, span_alert("No compatible DNA detected.")) return . stored_dna_animal[living_target.type] = TRUE - playsound(src, 'sound/misc/compiler-stage2.ogg', 50) + playsound(src, 'sound/machines/compiler/compiler-stage2.ogg', 50) balloon_alert(user, "data added") return TRUE @@ -162,7 +162,7 @@ /obj/item/dna_probe/carp_scanner/scan_dna(atom/target, mob/user) if(istype(target, /mob/living/basic/carp)) carp_dna_loaded = TRUE - playsound(src, 'sound/misc/compiler-stage2.ogg', 50) + playsound(src, 'sound/machines/compiler/compiler-stage2.ogg', 50) balloon_alert(user, "dna scanned") else return ..() diff --git a/code/game/objects/items/door_seal.dm b/code/game/objects/items/door_seal.dm index d3e80cdf16de1..a3189c94cfb00 100644 --- a/code/game/objects/items/door_seal.dm +++ b/code/game/objects/items/door_seal.dm @@ -21,6 +21,6 @@ /obj/item/door_seal/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is sealing [user.p_them()]self off from the world with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/items/jaws_pry.ogg', 30, TRUE) + playsound(src, 'sound/items/tools/jaws_pry.ogg', 30, TRUE) return BRUTELOSS diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index 218a59a646d96..7f168444d6aee 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -24,7 +24,7 @@ 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 = 75 - block_sound = 'sound/weapons/block_blade.ogg' + block_sound = 'sound/items/weapons/block_blade.ogg' max_integrity = 200 armor_type = /datum/armor/item_dualsaber resistance_flags = FIRE_PROOF @@ -49,8 +49,8 @@ AddComponent(/datum/component/two_handed, \ force_unwielded = force, \ force_wielded = two_hand_force, \ - wieldsound = 'sound/weapons/saberon.ogg', \ - unwieldsound = 'sound/weapons/saberoff.ogg', \ + wieldsound = 'sound/items/weapons/saberon.ogg', \ + unwieldsound = 'sound/items/weapons/saberoff.ogg', \ wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ ) @@ -62,7 +62,7 @@ to_chat(user, span_warning("You lack the grace to wield this!")) return COMPONENT_TWOHANDED_BLOCK_WIELD update_weight_class(w_class_on) - hitsound = 'sound/weapons/blade1.ogg' + hitsound = 'sound/items/weapons/blade1.ogg' START_PROCESSING(SSobj, src) set_light_on(TRUE) diff --git a/code/game/objects/items/dyespray.dm b/code/game/objects/items/dyespray.dm index 24fa7b80c81e4..78358cb98910d 100644 --- a/code/game/objects/items/dyespray.dm +++ b/code/game/objects/items/dyespray.dm @@ -1,6 +1,6 @@ /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 your hair any colors and gradients you'd like." // SKYRAT EDIT - Making the dyespray change hair color w_class = WEIGHT_CLASS_TINY icon = 'icons/obj/cosmetic.dmi' icon_state = "dyespray" diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index bb063f4a1f461..40f08e78ffc77 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -153,7 +153,7 @@ /obj/item/toy/eightball/haunted/start_shaking(mob/user) // notify ghosts that someone's shaking a haunted eightball // and inform them of the message, (hopefully a yes/no question) - selected_message = tgui_input_text(user, "What is your question?", "Eightball") || initial(selected_message) + selected_message = tgui_input_text(user, "What is your question?", "Eightball", max_length = MAX_MESSAGE_LEN) || initial(selected_message) if (!(src in user.held_items)) return FALSE notify_ghosts( @@ -219,7 +219,7 @@ data["answers"] += list(answer_data) return data -/obj/item/toy/eightball/haunted/ui_act(action, params) +/obj/item/toy/eightball/haunted/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/objects/items/emags.dm b/code/game/objects/items/emags.dm index 5590f72eaf3ba..02343bc27a431 100644 --- a/code/game/objects/items/emags.dm +++ b/code/game/objects/items/emags.dm @@ -137,16 +137,16 @@ . = ..() 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/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/living/user) - return !user.combat_mode - /obj/item/card/emag/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(SHOULD_SKIP_INTERACTION(interacting_with, src, user)) + return NONE // lets us put things in bags without trying to emag them if(!can_emag(interacting_with, user)) return ITEM_INTERACT_BLOCKING log_combat(user, interacting_with, "attempted to emag") if(interacting_with.emag_act(user, src)) SSblackbox.record_feedback("tally", "atom_emagged", 1, interacting_with.type) - return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_SUCCESS + return NONE // In a perfect world this would be blocking, but this is not a perfect world /obj/item/card/emag/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) return prox_check ? NONE : interact_with_atom(interacting_with, user) @@ -183,7 +183,7 @@ /obj/item/card/emag/doorjack/proc/recharge(mob/user) charges = min(charges+1, max_charges) - playsound(src,'sound/machines/twobeep.ogg',10,TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) + playsound(src,'sound/machines/beep/twobeep.ogg',10,TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) charge_timers.Remove(charge_timers[1]) /obj/item/card/emag/doorjack/examine(mob/user) diff --git a/code/game/objects/items/etherealdiscoball.dm b/code/game/objects/items/etherealdiscoball.dm index fe066bd1bf572..4eca1dc2fc0a7 100644 --- a/code/game/objects/items/etherealdiscoball.dm +++ b/code/game/objects/items/etherealdiscoball.dm @@ -1,5 +1,5 @@ /obj/item/etherealballdeployer - name = "Portable Ethereal Disco Ball" + name = "portable ethereal disco ball" desc = "Press the button for a deployment of slightly-unethical PARTY!" icon = 'icons/obj/devices/remote.dmi' icon_state = "ethdisco" @@ -11,7 +11,7 @@ qdel(src) /obj/structure/etherealball - name = "Ethereal Disco Ball" + name = "ethereal disco ball" desc = "The ethics of this discoball are questionable." icon = 'icons/obj/machines/floor.dmi' icon_state = "ethdisco_head_0" diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 0012dd08f2645..5eb5e3bf2bdd6 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -5,7 +5,7 @@ icon_state = "fire_extinguisher0" worn_icon_state = "fire_extinguisher" inhand_icon_state = "fire_extinguisher" - hitsound = 'sound/weapons/smash.ogg' + hitsound = 'sound/items/weapons/smash.ogg' obj_flags = CONDUCTS_ELECTRICITY throwforce = 10 w_class = WEIGHT_CLASS_NORMAL @@ -207,13 +207,15 @@ else return FALSE -/obj/item/extinguisher/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/extinguisher/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - if (interacting_with.loc == user) + if(interacting_with.loc == user) return NONE + // Always skip interaction if it's a bag or table (that's not on fire) + if(!(interacting_with.resistance_flags & ON_FIRE) && HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) +/obj/item/extinguisher/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(refilling) refilling = FALSE return NONE @@ -238,7 +240,7 @@ var/movementdirection = REVERSE_DIR(direction) addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/extinguisher, move_chair), B, movementdirection), 0.1 SECONDS) else - user.newtonian_move(REVERSE_DIR(direction)) + user.newtonian_move(dir2angle(REVERSE_DIR(direction))) //Get all the turfs that can be shot at var/turf/T = get_turf(interacting_with) diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm index 8a8f26b2c8995..265a05cfac74a 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/fireaxe.dm @@ -17,7 +17,7 @@ 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") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED armor_type = /datum/armor/item_fireaxe resistance_flags = FIRE_PROOF @@ -83,7 +83,7 @@ demolition_mod = 2 tool_behaviour = TOOL_CROWBAR toolspeed = 1 - usesound = 'sound/items/crowbar.ogg' + usesound = 'sound/items/tools/crowbar.ogg' //boarding axe /obj/item/fireaxe/boardingaxe diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index ad03fe9ab4f10..cd41859307efb 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -32,8 +32,8 @@ var/create_full = FALSE var/create_with_tank = FALSE var/igniter_type = /obj/item/assembly/igniter - var/acti_sound = 'sound/items/welderactivate.ogg' - var/deac_sound = 'sound/items/welderdeactivate.ogg' + var/acti_sound = 'sound/items/tools/welderactivate.ogg' + var/deac_sound = 'sound/items/tools/welderdeactivate.ogg' /obj/item/flamethrower/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/food/bait.dm b/code/game/objects/items/food/bait.dm index f31eb44f308eb..711c6cb1e68ff 100644 --- a/code/game/objects/items/food/bait.dm +++ b/code/game/objects/items/food/bait.dm @@ -6,6 +6,8 @@ var/bait_quality = TRAIT_BASIC_QUALITY_BAIT /// Icon state added to main fishing rod icon when this bait is equipped var/rod_overlay_icon_state + /// Is this included in the autowiki? + var/show_on_wiki = TRUE /obj/item/food/bait/Initialize(mapload) . = ..() @@ -36,9 +38,14 @@ lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' inhand_icon_state = "pen" + bait_quality = TRAIT_GREAT_QUALITY_BAIT //this is only here for autowiki purposes, it's removed on init. food_reagents = list(/datum/reagent/drug/kronkaine = 2) //The kronkaine is the thing that makes this a great bait. tastes = list("hypocrisy" = 1) +/obj/item/food/bait/natural/Initialize(mapload) + . = ..() + REMOVE_TRAIT(src, bait_quality, INNATE_TRAIT) + /obj/item/food/bait/doughball name = "doughball" desc = "Small piece of dough. Simple but effective fishing bait." @@ -51,17 +58,12 @@ bait_quality = TRAIT_BASIC_QUALITY_BAIT rod_overlay_icon_state = "dough_overlay" -/** - * Bound to the tech fishing rod, from which cannot be removed, - * Bait-related preferences and traits, both negative and positive, - * should be ignored by this bait. - * Otherwise it'd be hard/impossible to cath some fish with it, - * making that rod a shoddy choice in the long run. - */ +///The abstract synthetic doughball type. /obj/item/food/bait/doughball/synthetic name = "synthetic doughball" icon_state = "doughball_blue" preserved_food = TRUE + show_on_wiki = FALSE //It's an abstract item. /obj/item/food/bait/doughball/synthetic/Initialize(mapload) . = ..() @@ -70,10 +72,17 @@ ///Found in the can of omni-baits, only available from the super fishing toolbox, from the fishing mystery box. /obj/item/food/bait/doughball/synthetic/super name = "super-doughball" - desc = "No fish will be able to resist this." + desc = "Be they herbivore or carnivores, no fish will be able to resist this." bait_quality = TRAIT_GREAT_QUALITY_BAIT + show_on_wiki = TRUE -///Used by the advanced fishing rod +/** + * Bound to the tech fishing rod, from which cannot be removed, + * Bait-related preferences and traits, both negative and positive, + * should be ignored by this bait. + * Otherwise it'd be hard/impossible to cath some fish with it, + * making that rod a shoddy choice in the long run. + */ /obj/item/food/bait/doughball/syntethic/unconsumable /obj/item/food/bait/doughball/synthetic/unconsumable/Initialize(mapload) diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm index 0f95aac6d8528..48e7a2a21b1ae 100644 --- a/code/game/objects/items/food/bread.dm +++ b/code/game/objects/items/food/bread.dm @@ -384,7 +384,7 @@ ADD_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND, SWORDPLAY_TRAIT) attack_verb_continuous = list("slashes", "cuts") attack_verb_simple = list("slash", "cut") - hitsound = 'sound/weapons/rapierhit.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' fake_swordplay = TRUE RegisterSignal(src, COMSIG_ITEM_EQUIPPED, PROC_REF(on_sword_equipped)) @@ -418,7 +418,7 @@ /// Deadly bread used by a mime /obj/item/food/baguette/combat - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' sharpness = SHARP_EDGED /// Force when wielded as a sword by a mime var/active_force = 20 diff --git a/code/game/objects/items/food/burgers.dm b/code/game/objects/items/food/burgers.dm index b2d779ca3a54c..db493b341d16a 100644 --- a/code/game/objects/items/food/burgers.dm +++ b/code/game/objects/items/food/burgers.dm @@ -255,7 +255,7 @@ var/obj/machinery/light/light = locate(/obj/machinery/light) in view(4, src) light?.flicker() if(62 to 64) - playsound(loc, pick('sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg'), 50, TRUE, ignore_walls = FALSE) + playsound(loc, pick('sound/effects/hallucinations/i_see_you1.ogg', 'sound/effects/hallucinations/i_see_you2.ogg'), 50, TRUE, ignore_walls = FALSE) if(61) visible_message("[src] spews out a glob of ectoplasm!") new /obj/effect/decal/cleanable/greenglow/ecto(loc) @@ -580,7 +580,7 @@ /obj/item/food/burger/rib name = "mcrib" - desc = "An elusive rib shaped burger with limited availablity across the galaxy. Not as good as you remember it." + desc = "An elusive rib shaped burger with limited availability across the galaxy. Not as good as you remember it." icon_state = "mcrib" food_reagents = list( /datum/reagent/consumable/nutriment = 2, diff --git a/code/game/objects/items/food/cake.dm b/code/game/objects/items/food/cake.dm index ec3e0a0390caa..b161410bc3f6f 100644 --- a/code/game/objects/items/food/cake.dm +++ b/code/game/objects/items/food/cake.dm @@ -267,7 +267,7 @@ desc = "Just enough calories for a whole nuclear operative squad." icon_state = "energycake" force = 5 - hitsound = 'sound/weapons/blade1.ogg' + hitsound = 'sound/items/weapons/blade1.ogg' food_reagents = list( /datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/sprinkles = 10, @@ -285,7 +285,7 @@ /obj/item/food/cake/birthday/energy/proc/energy_bite(mob/living/user) to_chat(user, "As you eat the cake, you accidentally hurt yourself on the embedded energy sword!") user.apply_damage(30, BRUTE, BODY_ZONE_HEAD) - playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) + playsound(user, 'sound/items/weapons/blade1.ogg', 5, TRUE) /obj/item/food/cake/birthday/energy/attack(mob/living/target_mob, mob/living/user) . = ..() @@ -298,7 +298,7 @@ desc = "For the traitor on the go." icon_state = "energycakeslice" force = 2 - hitsound = 'sound/weapons/blade1.ogg' + hitsound = 'sound/items/weapons/blade1.ogg' food_reagents = list( /datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sprinkles = 2, @@ -325,7 +325,7 @@ if(eater != feeder) log_combat(feeder, eater, "fed an energy cake to", src) eater.apply_damage(18, BRUTE, BODY_ZONE_HEAD) - playsound(eater, 'sound/weapons/blade1.ogg', 5, TRUE) + playsound(eater, 'sound/items/weapons/blade1.ogg', 5, TRUE) /obj/item/food/cake/apple name = "apple cake" diff --git a/code/game/objects/items/food/donuts.dm b/code/game/objects/items/food/donuts.dm index 0d2e2f91d3008..922ed2eaa6674 100644 --- a/code/game/objects/items/food/donuts.dm +++ b/code/game/objects/items/food/donuts.dm @@ -79,7 +79,7 @@ reagents.add_reagent(extra_reagent, 3) /obj/item/food/donut/meat - name = "Meat Donut" + name = "meat donut" desc = "Tastes as gross as it looks." icon_state = "donut_meat" food_reagents = list( diff --git a/code/game/objects/items/food/egg.dm b/code/game/objects/items/food/egg.dm index bcc61e721e211..bbb7d6784e2e0 100644 --- a/code/game/objects/items/food/egg.dm +++ b/code/game/objects/items/food/egg.dm @@ -130,9 +130,9 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) return ITEM_INTERACT_BLOCKING var/atom/broken_egg = new /obj/item/food/rawegg(interacting_with.loc) if(LAZYACCESS(modifiers, ICON_X)) - broken_egg.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) + broken_egg.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(ICON_SIZE_X/2), ICON_SIZE_X/2) if(LAZYACCESS(modifiers, ICON_Y)) - broken_egg.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) + broken_egg.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(ICON_SIZE_Y/2), ICON_SIZE_Y/2) playsound(user, 'sound/items/sheath.ogg', 40, TRUE) reagents.copy_to(broken_egg, reagents.total_volume) @@ -340,4 +340,5 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) ) tastes = list("custard" = 1) foodtypes = MEAT | VEGETABLES + venue_value = FOOD_PRICE_NORMAL crafting_complexity = FOOD_COMPLEXITY_3 diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index 63f42d0d83bcc..9bda586b2693f 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -36,6 +36,36 @@ w_class = WEIGHT_CLASS_SMALL starting_reagent_purity = 1.0 +/obj/item/food/fishmeat/quality + name = "quality fish fillet" + desc = "A fillet of some precious fish meat." + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment/vitamin = 3, + ) + bite_consumption = 7 + crafting_complexity = FOOD_COMPLEXITY_1 + +/obj/item/food/fishmeat/quality/Initialize(mapload) + . = ..() + AddElement(/datum/element/quality_food_ingredient, FOOD_COMPLEXITY_1) + +/obj/item/food/fishmeat/salmon + name = "salmon fillet" + desc = "a chunky, fatty fillet of salmon meat." + icon_state = "salmon" + food_reagents = list( + /datum/reagent/consumable/nutriment/protein = 4, + /datum/reagent/consumable/nutriment/vitamin = 3, + /datum/reagent/consumable/nutriment/fat = 2, + ) + bite_consumption = 4.5 + crafting_complexity = FOOD_COMPLEXITY_1 + +/obj/item/food/fishmeat/salmon/Initialize(mapload) + . = ..() + AddElement(/datum/element/quality_food_ingredient, FOOD_COMPLEXITY_1) + /obj/item/food/fishmeat/carp name = "carp fillet" desc = "A fillet of spess carp meat." @@ -69,14 +99,20 @@ /obj/item/food/fishmeat/gunner_jellyfish name = "filleted gunner jellyfish" - desc = "A gunner jellyfish with the stingers removed. Mildly hallucinogenic." + desc = "A gunner jellyfish with the stingers removed. Mildly hallucinogenic when raw." icon = 'icons/obj/food/lizard.dmi' icon_state = "jellyfish_fillet" food_reagents = list( - /datum/reagent/consumable/nutriment/protein = 4, - /datum/reagent/toxin/mindbreaker = 2, + /datum/reagent/consumable/nutriment/protein = 4, //The halluginogen comes from the fish trait. ) +///Premade gunner jellyfish fillets from supply orders. Contains the halluginogen that'd be normally from the fish trait. +/obj/item/food/fishmeat/gunner_jellyfish/supply + +/obj/item/food/fishmeat/gunner_jellyfish/supply/Initialize(mapload) + food_reagents[/datum/reagent/toxin/mindbreaker/fish] = 2 + return ..() + /obj/item/food/fishmeat/armorfish name = "cleaned armorfish" desc = "An armorfish with its guts and shell removed, ready for use in cooking." @@ -254,6 +290,7 @@ tastes = list("rice and meat" = 4, "lettuce" = 2, "soy sauce" = 2) trash_type = /obj/item/reagent_containers/cup/bowl w_class = WEIGHT_CLASS_SMALL + venue_value = FOOD_PRICE_NORMAL crafting_complexity = FOOD_COMPLEXITY_4 /obj/item/food/fish_poke @@ -270,6 +307,7 @@ tastes = list("rice and fish" = 4, "lettuce" = 2, "soy sauce" = 2) trash_type = /obj/item/reagent_containers/cup/bowl w_class = WEIGHT_CLASS_SMALL + venue_value = FOOD_PRICE_NORMAL crafting_complexity = FOOD_COMPLEXITY_4 ////////////////////////////////////////////MEATS AND ALIKE//////////////////////////////////////////// @@ -491,7 +529,7 @@ /obj/item/food/patty name = "patty" - desc = "The nanotrasen patty is the patty for you and me!" + desc = "The Nanotrasen patty is the patty for you and me!" icon = 'icons/obj/food/meat.dmi' icon_state = "patty" food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2) @@ -716,13 +754,22 @@ w_class = WEIGHT_CLASS_TINY venue_value = FOOD_PRICE_CHEAP crafting_complexity = FOOD_COMPLEXITY_1 + var/meat_source = "\"chicken\"" /obj/item/food/nugget/Initialize(mapload) . = ..() var/shape = pick("lump", "star", "lizard", "corgi") - desc = "A \"chicken\" nugget vaguely shaped like a [shape]." + desc = "A [meat_source] nugget vaguely shaped like a [shape]." icon_state = "nugget_[shape]" +///subtype harvested from fish caught from, you guess it, the deepfryer +/obj/item/food/nugget/fish + name = "fish nugget" + tastes = list("fried fish" = 1) + foodtypes = MEAT|SEAFOOD|FRIED + venue_value = FOOD_PRICE_NORMAL + meat_source = "fish" + /obj/item/food/pigblanket name = "pig in a blanket" desc = "A tiny sausage wrapped in a flakey, buttery roll. Free this pig from its blanket prison by eating it." diff --git a/code/game/objects/items/food/meatslab.dm b/code/game/objects/items/food/meatslab.dm index 3f8cb918eced9..ed391a57bd255 100644 --- a/code/game/objects/items/food/meatslab.dm +++ b/code/game/objects/items/food/meatslab.dm @@ -353,7 +353,7 @@ /obj/item/food/meat/rawbacon name = "raw piece of bacon" desc = "A raw piece of bacon." - icon_state = "baconb" + icon_state = "bacon" bite_consumption = 2 food_reagents = list( /datum/reagent/consumable/nutriment/protein = 2, @@ -369,7 +369,7 @@ /obj/item/food/meat/bacon name = "piece of bacon" desc = "A delicious piece of bacon." - icon_state = "baconcookedb" + icon_state = "baconcooked" food_reagents = list( /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 1, diff --git a/code/game/objects/items/food/mexican.dm b/code/game/objects/items/food/mexican.dm index fa66db1450c8f..3dc6adc107962 100644 --- a/code/game/objects/items/food/mexican.dm +++ b/code/game/objects/items/food/mexican.dm @@ -124,6 +124,7 @@ tastes = list("nachos" = 2, "hot pepper" = 1) foodtypes = VEGETABLES | FRIED | DAIRY w_class = WEIGHT_CLASS_SMALL + venue_value = FOOD_PRICE_CHEAP crafting_complexity = FOOD_COMPLEXITY_2 /obj/item/food/taco diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 4e8b8cbf2209c..bfd26f534de23 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -292,6 +292,14 @@ foodtypes = FRUIT | ALCOHOL crafting_complexity = FOOD_COMPLEXITY_2 +/obj/item/food/melonkeg/CheckParts(list/parts_list) + . = ..() + var/obj/item/reagent_containers/cup/glass/bottle/bottle = locate() in contents + if(!bottle) + return + if(bottle.message_in_a_bottle) + bottle.message_in_a_bottle.forceMove(drop_location()) + /obj/item/food/honeybar name = "honey nut bar" desc = "Oats and nuts compressed together into a bar, held together with a honey glaze." @@ -320,7 +328,7 @@ throwforce = 15 block_chance = 55 armour_penetration = 80 - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' wound_bonus = -50 attack_verb_continuous = list("slaps", "slathers") attack_verb_simple = list("slap", "slather") @@ -331,7 +339,7 @@ crafting_complexity = FOOD_COMPLEXITY_5 /obj/item/food/branrequests - name = "Bran Requests Cereal" + name = "bran requests cereal" desc = "A dry cereal that satiates your requests for bran. Tastes uniquely like raisins and salt." icon_state = "bran_requests" food_reagents = list( @@ -414,7 +422,7 @@ w_class = WEIGHT_CLASS_TINY /obj/item/food/crab_rangoon - name = "Crab Rangoon" + name = "crab rangoon" desc = "Has many names, like crab puffs, cheese won'tons, crab dumplings? Whatever you call them, they're a fabulous blast of cream cheesy crab." icon = 'icons/obj/food/meat.dmi' icon_state = "crabrangoon" @@ -568,7 +576,7 @@ tastes = list() /obj/item/food/pacoca - name = "pacoca" + name = "paçoca" desc = "A traditional Brazilian treat made of ground peanuts, sugar, and salt compressed into a cylinder." icon = 'icons/obj/food/food.dmi' icon_state = "pacoca" @@ -797,3 +805,30 @@ foodtypes = VEGETABLES | GRAIN w_class = WEIGHT_CLASS_TINY crafting_complexity = FOOD_COMPLEXITY_4 + +///Extracted from squids, or any fish with the ink fish trait. +/obj/item/food/ink_sac + name = "ink sac" + desc = "the ink sac from some sort of fish or mollusk. It could be canned with a processor." + icon_state = "ink_sac" + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/salt = 5) + tastes = list("seafood" = 3) + foodtypes = SEAFOOD|RAW + +/obj/item/food/ink_sac/Initialize(mapload) + . = ..() + AddComponent(/datum/component/splat, \ + memory_type = /datum/memory/witnessed_inking, \ + smudge_type = /obj/effect/decal/cleanable/food/squid_ink, \ + moodlet_type = /datum/mood_event/inked, \ + splat_color = COLOR_NEARLY_ALL_BLACK, \ + hit_callback = CALLBACK(src, PROC_REF(blind_em)), \ + ) + +/obj/item/food/ink_sac/proc/blind_em(mob/living/victim, can_splat_on) + if(can_splat_on) + victim.adjust_temp_blindness_up_to(7 SECONDS, 10 SECONDS) + victim.adjust_confusion_up_to(3.5 SECONDS, 6 SECONDS) + victim.Paralyze(2 SECONDS) //splat! + victim.visible_message(span_warning("[victim] is inked by [src]!"), span_userdanger("You've been inked by [src]!")) + playsound(victim, SFX_DESECRATION, 50, TRUE) diff --git a/code/game/objects/items/food/packaged.dm b/code/game/objects/items/food/packaged.dm index 0f08fd8f57dd9..b3578204a2daa 100644 --- a/code/game/objects/items/food/packaged.dm +++ b/code/game/objects/items/food/packaged.dm @@ -156,6 +156,25 @@ tastes = list("seafood" = 7, "tin" = 1) foodtypes = SEAFOOD +/obj/item/food/canned/squid_ink/open_can(mob/user) + . = ..() + AddComponent(/datum/component/splat, \ + memory_type = /datum/memory/witnessed_inking, \ + smudge_type = /obj/effect/decal/cleanable/food/squid_ink, \ + moodlet_type = /datum/mood_event/inked, \ + splat_color = COLOR_NEARLY_ALL_BLACK, \ + hit_callback = CALLBACK(src, PROC_REF(blind_em)), \ + ) + ADD_TRAIT(src, TRAIT_UNCATCHABLE, INNATE_TRAIT) //good luck catching the liquid + +/obj/item/food/canned/squid_ink/proc/blind_em(mob/living/victim, can_splat_on) + if(can_splat_on) + victim.adjust_temp_blindness_up_to(7 SECONDS, 10 SECONDS) + victim.adjust_confusion_up_to(3.5 SECONDS, 6 SECONDS) + victim.Paralyze(2 SECONDS) //splat! + victim.visible_message(span_warning("[victim] is inked by [src]!"), span_userdanger("You've been inked by [src]!")) + playsound(victim, SFX_DESECRATION, 50, TRUE) + /obj/item/food/canned/chap name = "can of CHAP" desc = "CHAP: Chopped Ham And Pork. The classic American canned meat product that won a world war, then sent millions of servicemen home with heart congestion." diff --git a/code/game/objects/items/food/pancakes.dm b/code/game/objects/items/food/pancakes.dm index 52829ab4c3acd..488ba1e5eb5ad 100644 --- a/code/game/objects/items/food/pancakes.dm +++ b/code/game/objects/items/food/pancakes.dm @@ -52,7 +52,7 @@ /obj/item/food/pancakes/raw/examine(mob/user) . = ..() if(name == initial(name)) - . += "You can modify the pancake by adding blueberries or chocolate before finishing the griddle." + . += span_notice("You can modify the pancake by adding blueberries or chocolate before finishing the griddle.") /obj/item/food/pancakes/blueberry name = "blueberry pancake" diff --git a/code/game/objects/items/food/pastries.dm b/code/game/objects/items/food/pastries.dm index 83f30ab0b06bd..0b96101a99d51 100644 --- a/code/game/objects/items/food/pastries.dm +++ b/code/game/objects/items/food/pastries.dm @@ -67,7 +67,6 @@ name = "waffles" desc = "Mmm, waffles." icon_state = "waffles" - trash_type = /obj/item/trash/waffles food_reagents = list( /datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 2, @@ -85,7 +84,6 @@ name = "\improper Soylent Green" desc = "Not made of people. Honest." //Totally people. icon_state = "soylent_green" - trash_type = /obj/item/trash/waffles food_reagents = list( /datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2, @@ -100,7 +98,6 @@ name = "\improper Soylent Virdians" desc = "Not made of people. Honest." //Actually honest for once. icon_state = "soylent_yellow" - trash_type = /obj/item/trash/waffles food_reagents = list( /datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2, @@ -115,7 +112,6 @@ name = "roffle waffles" desc = "Waffles from Roffle. Co." icon_state = "rofflewaffles" - trash_type = /obj/item/trash/waffles bite_consumption = 4 food_reagents = list( /datum/reagent/consumable/nutriment = 8, diff --git a/code/game/objects/items/food/pie.dm b/code/game/objects/items/food/pie.dm index 0cb5af860e842..6d73bc2f5df21 100644 --- a/code/game/objects/items/food/pie.dm +++ b/code/game/objects/items/food/pie.dm @@ -74,32 +74,17 @@ var/stunning = TRUE crafting_complexity = FOOD_COMPLEXITY_3 -/obj/item/food/pie/cream/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) +/obj/item/food/pie/cream/Initialize(mapload) . = ..() - if(!.) //if we're not being caught - splat(hit_atom) - -/obj/item/food/pie/cream/proc/splat(atom/movable/hit_atom) - if(isliving(loc)) //someone caught us! - return - var/turf/hit_turf = get_turf(hit_atom) - new/obj/effect/decal/cleanable/food/pie_smudge(hit_turf) - if(reagents?.total_volume) - reagents.expose(hit_atom, TOUCH) - var/is_creamable = TRUE - if(isliving(hit_atom)) - var/mob/living/living_target_getting_hit = hit_atom - if(stunning) - living_target_getting_hit.Paralyze(2 SECONDS) //splat! - if(iscarbon(living_target_getting_hit)) - is_creamable = !!(living_target_getting_hit.get_bodypart(BODY_ZONE_HEAD)) - if(is_creamable) - living_target_getting_hit.adjust_eye_blur(2 SECONDS) - living_target_getting_hit.visible_message(span_warning("[living_target_getting_hit] is creamed by [src]!"), span_userdanger("You've been creamed by [src]!")) - playsound(living_target_getting_hit, SFX_DESECRATION, 50, TRUE) - if(is_creamable && is_type_in_typecache(hit_atom, GLOB.creamable)) - hit_atom.AddComponent(/datum/component/face_decal/creampie, "creampie", EXTERNAL_FRONT) - qdel(src) + AddComponent(/datum/component/splat, hit_callback = CALLBACK(src, PROC_REF(stun_and_blur))) + +/obj/item/food/pie/cream/proc/stun_and_blur(mob/living/victim, can_splat_on) + if(stunning) + victim.Paralyze(2 SECONDS) //splat! + if(can_splat_on) + victim.adjust_eye_blur(2 SECONDS) + victim.visible_message(span_warning("[victim] is creamed by [src]!"), span_userdanger("You've been creamed by [src]!")) + playsound(victim, SFX_DESECRATION, 50, TRUE) /obj/item/food/pie/cream/nostun stunning = FALSE diff --git a/code/game/objects/items/food/sandwichtoast.dm b/code/game/objects/items/food/sandwichtoast.dm index 47a7b563e0895..e63127a6a219d 100644 --- a/code/game/objects/items/food/sandwichtoast.dm +++ b/code/game/objects/items/food/sandwichtoast.dm @@ -41,6 +41,7 @@ /datum/reagent/carbon = 4, ) tastes = list("toast" = 2, "cheese" = 3, "butter" = 1) + venue_value = FOOD_PRICE_NORMAL crafting_complexity = FOOD_COMPLEXITY_3 /obj/item/food/sandwich/jelly diff --git a/code/game/objects/items/frog_statue.dm b/code/game/objects/items/frog_statue.dm index 34c491d9dd72b..d1f65dc4b2ad5 100644 --- a/code/game/objects/items/frog_statue.dm +++ b/code/game/objects/items/frog_statue.dm @@ -41,7 +41,7 @@ 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!") + . += 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) @@ -76,7 +76,7 @@ SIGNAL_HANDLER contained_frog = null - playsound(src, 'sound/magic/demon_dies.ogg', 50, TRUE) + playsound(src, 'sound/effects/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) diff --git a/code/game/objects/items/granters/_granters.dm b/code/game/objects/items/granters/_granters.dm index b205a1f0ffa64..bfdb2013cfdac 100644 --- a/code/game/objects/items/granters/_granters.dm +++ b/code/game/objects/items/granters/_granters.dm @@ -18,9 +18,9 @@ var/reading_time = 5 SECONDS /// The sounds played as the user's reading the book. var/list/book_sounds = list( - 'sound/effects/pageturn1.ogg', - 'sound/effects/pageturn2.ogg', - 'sound/effects/pageturn3.ogg', + 'sound/effects/page_turn/pageturn1.ogg', + 'sound/effects/page_turn/pageturn2.ogg', + 'sound/effects/page_turn/pageturn3.ogg', ) /obj/item/book/granter/attack_self(mob/living/user) diff --git a/code/game/objects/items/granters/crafting/fletching.dm b/code/game/objects/items/granters/crafting/fletching.dm index 91ce20c43dd89..482cc2cd33efc 100644 --- a/code/game/objects/items/granters/crafting/fletching.dm +++ b/code/game/objects/items/granters/crafting/fletching.dm @@ -7,7 +7,7 @@ /datum/crafting_recipe/plastic_arrow, /datum/crafting_recipe/shortbow, /datum/crafting_recipe/holy_arrow, - ///datum/crafting_recipe/arrow_quiver, // SKYRAT EDIT REMOVAL: public-knowledge quiver + // /datum/crafting_recipe/arrow_quiver, // SKYRAT EDIT REMOVAL: public-knowledge quiver /datum/crafting_recipe/violin, ) icon_state = "book4" diff --git a/code/game/objects/items/granters/magic/lightning_bolt.dm b/code/game/objects/items/granters/magic/lightning_bolt.dm index 3e3cbade46fa6..9fb6494bcc38c 100644 --- a/code/game/objects/items/granters/magic/lightning_bolt.dm +++ b/code/game/objects/items/granters/magic/lightning_bolt.dm @@ -13,4 +13,3 @@ "UNLIMITED power? Well... maybe if I practice...", "Wait until they're grouped up...", ) - diff --git a/code/game/objects/items/granters/martial_arts/cqc.dm b/code/game/objects/items/granters/martial_arts/cqc.dm index b2191997586ba..7d3f7f2ef9e26 100644 --- a/code/game/objects/items/granters/martial_arts/cqc.dm +++ b/code/game/objects/items/granters/martial_arts/cqc.dm @@ -3,7 +3,7 @@ name = "old manual" martial_name = "close quarters combat" desc = "A small, black manual. There are drawn instructions of tactical hand-to-hand combat." - greet = "You've mastered the basics of CQC." + greet = span_boldannounce("You've mastered the basics of CQC.") icon_state = "cqcmanual" remarks = list( "Kick... Slam...", @@ -22,7 +22,7 @@ /obj/item/book/granter/martial/cqc/recoil(mob/living/user) to_chat(user, span_warning("[src] explodes!")) - playsound(src,'sound/effects/explosion1.ogg',40,TRUE) + playsound(src,'sound/effects/explosion/explosion1.ogg',40,TRUE) user.flash_act(1, 1) user.adjustBruteLoss(6) user.adjustFireLoss(6) diff --git a/code/game/objects/items/granters/martial_arts/plasma_fist.dm b/code/game/objects/items/granters/martial_arts/plasma_fist.dm index dab85637da5b2..22b6b4aefa18e 100644 --- a/code/game/objects/items/granters/martial_arts/plasma_fist.dm +++ b/code/game/objects/items/granters/martial_arts/plasma_fist.dm @@ -3,8 +3,8 @@ name = "frayed scroll" martial_name = "plasma fist" desc = "An aged and frayed scrap of paper written in shifting runes. There are hand-drawn illustrations of pugilism." - greet = "You have learned the ancient martial art of Plasma Fist. Your combos are extremely hard to pull off, but include some of the most deadly moves ever seen including \ - the plasma fist, which when pulled off will make someone violently explode." + greet = span_boldannounce("You have learned the ancient martial art of Plasma Fist. Your combos are extremely hard to pull off, but include some of the most deadly moves ever seen including \ + the plasma fist, which when pulled off will make someone violently explode.") icon = 'icons/obj/scrolls.dmi' icon_state ="plasmafist" remarks = list( 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 3c66ce8affa15..88123439725f0 100644 --- a/code/game/objects/items/granters/martial_arts/sleeping_carp.dm +++ b/code/game/objects/items/granters/martial_arts/sleeping_carp.dm @@ -3,9 +3,9 @@ name = "mysterious scroll" 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 \ + greet = span_sciradio("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 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." + 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" worn_icon_state = "scroll" diff --git a/code/game/objects/items/grenades/_grenade.dm b/code/game/objects/items/grenades/_grenade.dm index a9fe7e65809ab..780311fa4d149 100644 --- a/code/game/objects/items/grenades/_grenade.dm +++ b/code/game/objects/items/grenades/_grenade.dm @@ -17,8 +17,9 @@ obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT max_integrity = 40 - pickup_sound = 'sound/items/grenade_pick_up.ogg' - drop_sound = 'sound/items/grenade_drop.ogg' + pickup_sound = 'sound/items/handling/grenade/grenade_pick_up.ogg' + drop_sound = 'sound/items/handling/grenade/grenade_drop.ogg' + sound_vary = TRUE /// Bitfields which prevent the grenade from detonating if set. Includes ([GRENADE_DUD]|[GRENADE_USED]) var/dud_flags = NONE ///Is this grenade currently armed? @@ -50,6 +51,8 @@ var/shrapnel_radius ///Did we add the component responsible for spawning shrapnel to this? var/shrapnel_initialized + ///Possible timers that can be assigned for detonation. Values are strings in SECONDS + var/list/possible_fuse_time = list("Instant", "3", "4", "5") /obj/item/grenade/Initialize(mapload) . = ..() @@ -152,7 +155,7 @@ if(shrapnel_type && shrapnel_radius) shrapnel_initialized = TRUE AddComponent(/datum/component/pellet_cloud, projectile_type = shrapnel_type, magnitude = shrapnel_radius) - playsound(src, 'sound/weapons/armbomb.ogg', volume, TRUE) + playsound(src, 'sound/items/weapons/armbomb.ogg', volume, TRUE) if(istype(user)) user.add_mob_memory(/datum/memory/bomb_planted, antagonist = src) active = TRUE @@ -209,7 +212,10 @@ return FALSE if(change_det_time()) tool.play_tool_sound(src) - to_chat(user, span_notice("You modify the time delay. It's set for [DisplayTimeText(det_time)].")) + if(det_time == 0) + to_chat(user, span_notice("You modify the time delay. It's set to be instantaneous.")) + else + to_chat(user, span_notice("You modify the time delay. It's set for [DisplayTimeText(det_time)].")) return TRUE /obj/item/grenade/multitool_act(mob/living/user, obj/item/tool) @@ -219,7 +225,7 @@ . = TRUE - var/newtime = tgui_input_list(user, "Please enter a new detonation time", "Detonation Timer", list("Instant", 3, 4, 5)) + var/newtime = tgui_input_list(user, "Please enter a new detonation time", "Detonation Timer", possible_fuse_time) if (isnull(newtime)) return if(!user.can_perform_action(src)) @@ -227,25 +233,40 @@ if(newtime == "Instant" && change_det_time(0)) to_chat(user, span_notice("You modify the time delay. It's set to be instantaneous.")) return - newtime = round(newtime) + newtime = round(text2num(newtime)) if(change_det_time(newtime)) to_chat(user, span_notice("You modify the time delay. It's set for [DisplayTimeText(det_time)].")) -/obj/item/grenade/proc/change_det_time(time) //Time uses real time. +/** + * Sets det_time to a number in SECONDS + * + * if time is passed as an argument, `det_time` will be `time SECONDS` + * + * Cycles the duration of the fuse of the grenade `det_time` based on the options provided in list/possible_fuse_time +*/ +/obj/item/grenade/proc/change_det_time(time) . = TRUE + //Multitool if(!isnull(time)) - det_time = round(clamp(time * 10, 0, 5 SECONDS)) + det_time = round(clamp(time SECONDS, 0, 5 SECONDS)) //This is fine for now but consider making this a variable if you want >5s fuse + return + + //Screwdriver + if(det_time == 0) + det_time = "Instant" + else + det_time = num2text(det_time * 0.1) + + var/old_selection = possible_fuse_time.Find(det_time) //Position of det_time in the list + if(old_selection >= possible_fuse_time.len) + det_time = possible_fuse_time[1] else - var/previous_time = det_time - switch(det_time) - if (0) - det_time = 3 SECONDS - if (3 SECONDS) - det_time = 5 SECONDS - if (5 SECONDS) - det_time = 0 - if(det_time == previous_time) - det_time = 5 SECONDS + det_time = possible_fuse_time[old_selection+1] + + if(det_time == "Instant") + det_time = 0 //String to num conversion because I hate coders + return + det_time = text2num(det_time) SECONDS /obj/item/grenade/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index c39e947e2bfe2..fa8e188292be7 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -234,7 +234,7 @@ active = TRUE update_icon_state() - playsound(src, 'sound/weapons/armbomb.ogg', volume, TRUE) + playsound(src, 'sound/items/weapons/armbomb.ogg', volume, TRUE) if(landminemode) landminemode.activate() return diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm index b27285e07861c..fe5666267e07f 100644 --- a/code/game/objects/items/grenades/clusterbuster.dm +++ b/code/game/objects/items/grenades/clusterbuster.dm @@ -13,7 +13,7 @@ var/base_state = "clusterbang" var/payload = /obj/item/grenade/flashbang/cluster var/payload_spawner = /obj/effect/payload_spawner - var/prime_sound = 'sound/weapons/armbomb.ogg' + var/prime_sound = 'sound/items/weapons/armbomb.ogg' var/min_spawned = 4 var/max_spawned = 8 var/segment_chance = 35 @@ -207,7 +207,7 @@ icon_state = "slimebang" base_state = "slimebang" payload_spawner = /obj/effect/payload_spawner/random_slime - prime_sound = 'sound/effects/bubbles.ogg' + prime_sound = 'sound/effects/bubbles/bubbles.ogg' /obj/item/grenade/clusterbuster/slime/volatile payload_spawner = /obj/effect/payload_spawner/random_slime/volatile diff --git a/code/game/objects/items/grenades/festive.dm b/code/game/objects/items/grenades/festive.dm index e9acdd6cfd631..87c8e554213bc 100644 --- a/code/game/objects/items/grenades/festive.dm +++ b/code/game/objects/items/grenades/festive.dm @@ -29,7 +29,7 @@ lit = TRUE icon_state = "sparkler_on" force = 6 - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' name = "lit [initial(name)]" attack_verb_continuous = list("burns") attack_verb_simple = list("burn") @@ -92,7 +92,7 @@ if(det_time) det_time -= 10 to_chat(user, span_notice("You shorten the fuse of [src] with [item].")) - playsound(src, 'sound/items/wirecutter.ogg', 20, TRUE) + playsound(src, 'sound/items/tools/wirecutter.ogg', 20, TRUE) icon_state = initial(icon_state) + "_[det_time]" update_appearance() else diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm index a73b0b0250000..c83801d81fc53 100644 --- a/code/game/objects/items/grenades/flashbang.dm +++ b/code/game/objects/items/grenades/flashbang.dm @@ -4,6 +4,7 @@ inhand_icon_state = "flashbang" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + possible_fuse_time = list("3", "4", "5") var/flashbang_range = 7 //how many tiles away the mob will be stunned. /obj/item/grenade/flashbang/apply_grenade_fantasy_bonuses(quality) @@ -22,7 +23,7 @@ if(!flashbang_turf) return do_sparks(rand(5, 9), FALSE, src) - playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) + playsound(flashbang_turf, 'sound/items/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) new /obj/effect/dummy/lighting_obj (flashbang_turf, flashbang_range + 2, 4, COLOR_WHITE, 2) for(var/mob/living/living_mob in get_hearers_in_view(flashbang_range, flashbang_turf)) bang(get_turf(living_mob), living_mob) @@ -50,7 +51,6 @@ living_mob.Knockdown(30) living_mob.soundbang_act(1, max(200 / max(1, distance), 60), rand(0, 5)) - /obj/item/grenade/stingbang name = "stingbang" icon_state = "timeg" @@ -91,7 +91,7 @@ if(!flashbang_turf) return do_sparks(rand(5, 9), FALSE, src) - playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 50, TRUE, 8, 0.9) + playsound(flashbang_turf, 'sound/items/weapons/flashbang.ogg', 50, TRUE, 8, 0.9) new /obj/effect/dummy/lighting_obj (flashbang_turf, flashbang_range + 2, 2, COLOR_WHITE, 1) for(var/mob/living/living_mob in get_hearers_in_view(flashbang_range, flashbang_turf)) pop(get_turf(living_mob), living_mob) diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index 3c818ab598b2b..a74000a84a405 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -187,7 +187,7 @@ log_combat(user, target, "given a noogie to", addition = "([damage] brute before armor)") target.apply_damage(damage, BRUTE, BODY_ZONE_HEAD) user.adjustStaminaLoss(iteration + 5) - playsound(get_turf(user), pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg'), 50) + playsound(get_turf(user), pick('sound/effects/rustle/rustle1.ogg','sound/effects/rustle/rustle2.ogg','sound/effects/rustle/rustle3.ogg','sound/effects/rustle/rustle4.ogg','sound/effects/rustle/rustle5.ogg'), 50) if(prob(33)) user.visible_message(span_danger("[user] continues noogie'ing [target]!"), span_warning("You continue giving [target] a noogie!"), vision_distance=COMBAT_MESSAGE_RANGE, ignored_mobs=target) @@ -235,7 +235,7 @@ ) to_chat(slapped, span_userdanger("You see [user] scoff and pull back [user.p_their()] arm, then suddenly you're on the ground with an ungodly ringing in your ears!")) slap_volume = 120 - SEND_SOUND(slapped, sound('sound/weapons/flash_ring.ogg')) + SEND_SOUND(slapped, sound('sound/items/weapons/flash_ring.ogg')) shake_camera(slapped, 2, 2) slapped.Paralyze(2.5 SECONDS) slapped.adjust_confusion(7 SECONDS) @@ -278,7 +278,7 @@ span_notice("You slap [slapped]!"), span_hear("You hear a slap."), ) - playsound(slapped, 'sound/weapons/slap.ogg', slap_volume, TRUE, -1) + playsound(slapped, 'sound/items/weapons/slap.ogg', slap_volume, TRUE, -1) return /obj/item/hand_item/slapper/pre_attack_secondary(atom/target, mob/living/user, params) @@ -556,8 +556,8 @@ name = "kiss" icon = 'icons/mob/simple/animal.dmi' icon_state = "heart" - hitsound = 'sound/effects/kiss.ogg' - hitsound_wall = 'sound/effects/kiss.ogg' + hitsound = 'sound/effects/emotes/kiss.ogg' + hitsound_wall = 'sound/effects/emotes/kiss.ogg' pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE speed = 1.6 damage_type = BRUTE diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 7edc000920454..e63085d65be52 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -48,15 +48,16 @@ breakouttime = 1 MINUTES armor_type = /datum/armor/restraints_handcuffs custom_price = PAYCHECK_COMMAND * 0.35 - pickup_sound = 'sound/items/handcuffs_pick_up.ogg' - drop_sound = 'sound/items/handcuffs_drop.ogg' + pickup_sound = 'sound/items/handling/handcuffs/handcuffs_pick_up.ogg' + drop_sound = 'sound/items/handling/handcuffs/handcuffs_drop.ogg' + sound_vary = TRUE ///How long it takes to handcuff someone var/handcuff_time = 4 SECONDS ///Multiplier for handcuff time var/handcuff_time_mod = 1 ///Sound that plays when starting to put handcuffs on someone - var/cuffsound = 'sound/weapons/handcuffs.ogg' + var/cuffsound = 'sound/items/weapons/handcuffs.ogg' ///Sound that plays when restrain is successful var/cuffsuccesssound = 'sound/items/handcuff_finish.ogg' ///If set, handcuffs will be destroyed on application and leave behind whatever this is set to. @@ -199,7 +200,7 @@ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.75) breakouttime = 30 SECONDS - cuffsound = 'sound/weapons/cablecuff.ogg' + cuffsound = 'sound/items/weapons/cablecuff.ogg' pickup_sound = null drop_sound = null restraint_strength = HANDCUFFS_TYPE_WEAK @@ -423,7 +424,7 @@ /obj/item/restraints/legcuffs/beartrap/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is sticking [user.p_their()] head in the [src.name]! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/bladeslice.ogg', 50, TRUE, -1) return BRUTELOSS /obj/item/restraints/legcuffs/beartrap/attack_self(mob/user) @@ -550,7 +551,7 @@ /obj/item/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, gentle = FALSE, quickstart = TRUE) if(!..()) return - playsound(src.loc,'sound/weapons/bolathrow.ogg', 75, TRUE) + playsound(src.loc,'sound/items/weapons/bolathrow.ogg', 75, TRUE) /obj/item/restraints/legcuffs/bola/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed, @@ -605,7 +606,7 @@ desc = "A specialized hard-light bola designed to ensnare fleeing criminals and aid in arrests." icon_state = "ebola" inhand_icon_state = "ebola" - hitsound = 'sound/weapons/taserhit.ogg' + hitsound = 'sound/items/weapons/taserhit.ogg' w_class = WEIGHT_CLASS_SMALL breakouttime = 6 SECONDS custom_price = PAYCHECK_COMMAND * 0.35 diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index d1e128c0b5b10..b9dc441df724a 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -17,9 +17,9 @@ demolition_mod = 1.25 attack_verb_continuous = list("robusts") attack_verb_simple = list("robust") - hitsound = 'sound/weapons/smash.ogg' - drop_sound = 'sound/items/handling/toolbox_drop.ogg' - pickup_sound = 'sound/items/handling/toolbox_pickup.ogg' + hitsound = 'sound/items/weapons/smash.ogg' + drop_sound = 'sound/items/handling/toolbox/toolbox_drop.ogg' + pickup_sound = 'sound/items/handling/toolbox/toolbox_pickup.ogg' var/awakened = FALSE var/bloodthirst = HIS_GRACE_SATIATED var/prev_bloodthirst = HIS_GRACE_SATIATED @@ -133,8 +133,8 @@ if(!L.stat) L.visible_message(span_warning("[src] lunges at [L]!"), "[src] lunges at you!") do_attack_animation(L, null, src) - playsound(L, 'sound/weapons/smash.ogg', 50, TRUE) - playsound(L, 'sound/misc/desecration-01.ogg', 50, TRUE) + playsound(L, 'sound/items/weapons/smash.ogg', 50, TRUE) + playsound(L, 'sound/effects/desecration/desecration-01.ogg', 50, TRUE) L.adjustBruteLoss(force) adjust_bloodthirst(-5) //Don't stop attacking they're right there! else @@ -172,7 +172,7 @@ return var/turf/T = get_turf(src) T.visible_message(span_boldwarning("[src] slowly stops rattling and falls still, His latch snapping shut.")) - playsound(loc, 'sound/weapons/batonextend.ogg', 100, TRUE) + playsound(loc, 'sound/items/weapons/batonextend.ogg', 100, TRUE) name = initial(name) desc = initial(desc) animate(src, transform=matrix()) @@ -189,7 +189,7 @@ var/victims = 0 meal.visible_message(span_warning("[src] swings open and devours [meal]!"), "[src] consumes you!") meal.adjustBruteLoss(200) - playsound(meal, 'sound/misc/desecration-02.ogg', 75, TRUE) + playsound(meal, 'sound/effects/desecration/desecration-02.ogg', 75, TRUE) playsound(src, 'sound/items/eatfood.ogg', 100, TRUE) meal.forceMove(src) force_bonus += HIS_GRACE_FORCE_BONUS @@ -259,7 +259,7 @@ desc = "A legendary toolbox and a distant artifact from The Age of Three Powers. On its three latches engraved are the words \"The Sun\", \"The Moon\", and \"The Stars\". The entire toolbox has the words \"The World\" engraved into its sides." ascended = TRUE update_appearance() - playsound(src, 'sound/effects/his_grace_ascend.ogg', 100) + playsound(src, 'sound/effects/his_grace/his_grace_ascend.ogg', 100) if(istype(master)) master.update_held_items() master.visible_message("Gods will be watching.") diff --git a/code/game/objects/items/implants/implant_deathrattle.dm b/code/game/objects/items/implants/implant_deathrattle.dm index 64f85c020c87a..f26eb4ab947c6 100644 --- a/code/game/objects/items/implants/implant_deathrattle.dm +++ b/code/game/objects/items/implants/implant_deathrattle.dm @@ -54,10 +54,10 @@ var/area = get_area_name(get_turf(owner)) // All "hearers" hear the same sound. var/sound = pick( - 'sound/items/knell1.ogg', - 'sound/items/knell2.ogg', - 'sound/items/knell3.ogg', - 'sound/items/knell4.ogg', + 'sound/items/knell/knell1.ogg', + 'sound/items/knell/knell2.ogg', + 'sound/items/knell/knell3.ogg', + 'sound/items/knell/knell4.ogg', ) diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 027c2e59a11de..ffef74de3c1cc 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 OVERRIDDEN BY AESTHETICS - SEE MODULE +/obj/item/implantcase 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 efbe320d7f049..503a1a183e163 100644 --- a/code/game/objects/items/implants/implantchair.dm +++ b/code/game/objects/items/implants/implantchair.dm @@ -55,7 +55,7 @@ return data -/obj/machinery/implantchair/ui_act(action, params) +/obj/machinery/implantchair/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -84,7 +84,7 @@ ready = FALSE addtimer(CALLBACK(src, PROC_REF(set_ready)),injection_cooldown) else - playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, TRUE) + playsound(get_turf(src), 'sound/machines/buzz/buzz-sigh.ogg', 25, TRUE) update_appearance() /obj/machinery/implantchair/proc/implant_action(mob/living/M) diff --git a/code/game/objects/items/implants/implantuplink.dm b/code/game/objects/items/implants/implantuplink.dm index c3c06d51f47ca..c27bc581f66bb 100644 --- a/code/game/objects/items/implants/implantuplink.dm +++ b/code/game/objects/items/implants/implantuplink.dm @@ -53,6 +53,10 @@ imp = new imp_type(src, uplink_handler) return ..() +/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) imp_type = /obj/item/implant/uplink/precharged diff --git a/code/game/objects/items/implants/security/implant_noteleport.dm b/code/game/objects/items/implants/security/implant_noteleport.dm index b4795a7f797b7..a757e2cc0cd0f 100644 --- a/code/game/objects/items/implants/security/implant_noteleport.dm +++ b/code/game/objects/items/implants/security/implant_noteleport.dm @@ -17,6 +17,7 @@ if(!. || !isliving(target)) return FALSE RegisterSignal(target, COMSIG_MOVABLE_TELEPORTING, PROC_REF(on_teleport)) + RegisterSignal(target, COMSIG_MOB_PRE_JAUNT, PROC_REF(on_jaunt)) return TRUE /obj/item/implant/teleport_blocker/removed(mob/target, silent = FALSE, special = FALSE) @@ -24,6 +25,7 @@ if(!. || !isliving(target)) return FALSE UnregisterSignal(target, COMSIG_MOVABLE_TELEPORTING) + UnregisterSignal(target, COMSIG_MOB_PRE_JAUNT) return TRUE /// Signal for COMSIG_MOVABLE_TELEPORTED that blocks teleports and stuns the would-be-teleportee. @@ -38,6 +40,18 @@ spark_system.start() return COMPONENT_BLOCK_TELEPORT +/// Signal for COMSIG_MOB_PRE_JAUNT that prevents a user from entering a jaunt. +/obj/item/implant/teleport_blocker/proc/on_jaunt(mob/living/jaunter) + SIGNAL_HANDLER + + to_chat(jaunter, span_holoparasite("As you attempt to jaunt, you slam directly into the barrier between realities and are sent crashing back into corporeality!")) + + jaunter.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, jaunter) + spark_system.start() + return COMPONENT_BLOCK_JAUNT + /obj/item/implantcase/teleport_blocker name = "implant case - 'Bluespace Grounding'" desc = "A glass case containing a bluespace grounding implant." diff --git a/code/game/objects/items/implants/security/implant_track.dm b/code/game/objects/items/implants/security/implant_track.dm index b95c0afa7d857..9b8050d7dade2 100644 --- a/code/game/objects/items/implants/security/implant_track.dm +++ b/code/game/objects/items/implants/security/implant_track.dm @@ -48,7 +48,7 @@ return if(params["implant_action"] == "warn") - var/warning = tgui_input_text(user, "What warning do you want to send to [imp_in.name]?", "Messaging") + var/warning = tgui_input_text(user, "What warning do you want to send to [imp_in.name]?", "Messaging", max_length = MAX_MESSAGE_LEN) 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)) diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm index 4aff1f03388ab..c22bf5d2ac60d 100644 --- a/code/game/objects/items/inspector.dm +++ b/code/game/objects/items/inspector.dm @@ -121,7 +121,7 @@ return ITEM_INTERACT_BLOCKING if(contraband_scan(interacting_with, user)) - playsound(src, 'sound/machines/uplinkerror.ogg', 40) + playsound(src, 'sound/machines/uplink/uplinkerror.ogg', 40) balloon_alert(user, "contraband detected!") return ITEM_INTERACT_SUCCESS else @@ -195,10 +195,10 @@ */ /obj/item/inspector/proc/print_report(mob/user) if(!cell) - to_chat(user, "\The [src] doesn't seem to be on... It feels quite light. Perhaps it lacks a power cell?") + to_chat(user, span_info("\The [src] doesn't seem to be on... It feels quite light. Perhaps it lacks a power cell?")) return if(cell.charge == 0) - to_chat(user, "\The [src] doesn't seem to be on... Perhaps it ran out of power?") + to_chat(user, span_info("\The [src] doesn't seem to be on... Perhaps it ran out of power?")) return if(!cell.use(energy_per_print)) if(cell.use(ENERGY_TO_SPEAK)) @@ -389,7 +389,7 @@ if(cell.use(ENERGY_TO_SPEAK)) say("ERROR! OUT OF PAPER! MAXIMUM PRINTING SPEED UNAVAIBLE! SWITCH TO A SLOWER SPEED TO OR PROVIDE PAPER!") else - to_chat(user, "\The [src] doesn't seem to be on... Perhaps it ran out of power?") + to_chat(user, span_info("\The [src] doesn't seem to be on... Perhaps it ran out of power?")) return paper_charges-- return ..() diff --git a/code/game/objects/items/janitor_key.dm b/code/game/objects/items/janitor_key.dm index 8f96205984b42..d18ac7bd20db5 100644 --- a/code/game/objects/items/janitor_key.dm +++ b/code/game/objects/items/janitor_key.dm @@ -82,6 +82,6 @@ investigate_log("Access to the [department_access] department on [src] has expired.]", INVESTIGATE_ACCESSCHANGES) department_access = null say("Access revoked, time ran out.") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE) #undef ACCESS_TIMER_LIMIT diff --git a/code/game/objects/items/kirby_plants/kirbyplants.dm b/code/game/objects/items/kirby_plants/kirbyplants.dm index 3becb1ecb61b3..f5e550be4a70e 100644 --- a/code/game/objects/items/kirby_plants/kirbyplants.dm +++ b/code/game/objects/items/kirby_plants/kirbyplants.dm @@ -1,6 +1,6 @@ /obj/item/kirbyplants name = "potted plant" - //icon = 'icons/obj/fluff/flora/plants.dmi' // ORIGINAL + //icon = 'icons/obj/fluff/flora/plants.dmi' // SKYRAT EDIT - ORIGINAL icon = 'modular_skyrat/modules/aesthetics/plants/plants.dmi' // SKYRAT EDIT CHANGE icon_state = "plant-01" base_icon_state = "plant-01" @@ -71,7 +71,8 @@ generate_states() var/current = random_plant_states.Find(icon_state) var/next = WRAP(current+1,1,length(random_plant_states)) - icon_state = random_plant_states[next] + base_icon_state = random_plant_states[next] + update_appearance(UPDATE_ICON) /obj/item/kirbyplants/proc/generate_states() random_plant_states = list() @@ -90,7 +91,7 @@ /obj/item/kirbyplants/random/Initialize(mapload) . = ..() - //icon = 'icons/obj/flora/plants.dmi' // ORIGINAL + //icon = 'icons/obj/flora/plants.dmi' // SKYRAT EDIT - ORIGINAL icon = 'modular_skyrat/modules/aesthetics/plants/plants.dmi' //SKYRAT EDIT CHANGE randomize_base_icon_state() diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index bc424788771dd..24506e006d81f 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -30,7 +30,7 @@ obj_flags = CONDUCTS_ELECTRICITY attack_verb_continuous = list("attacks", "stabs", "pokes") attack_verb_simple = list("attack", "stab", "poke") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' armor_type = /datum/armor/kitchen_fork sharpness = SHARP_POINTY var/datum/reagent/forkload //used to eat omelette @@ -110,7 +110,7 @@ force = 0 throwforce = 0 sharpness = SHARP_EDGED - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("prods", "whiffs", "scratches", "pokes") attack_verb_simple = list("prod", "whiff", "scratch", "poke") tool_behaviour = TOOL_KNIFE @@ -123,7 +123,7 @@ . += " It's fitted with a [tool_behaviour] head." /obj/item/knife/kitchen/silicon/attack_self(mob/user) - playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/items/tools/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 the [src].")) @@ -140,7 +140,7 @@ icon_state = "sili_knife" force = 0 sharpness = SHARP_EDGED - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("prods", "whiffs", "scratches", "pokes") attack_verb_simple = list("prod", "whiff", "scratch", "poke") @@ -163,7 +163,6 @@ custom_price = PAYCHECK_CREW * 1.5 tool_behaviour = TOOL_ROLLINGPIN - /obj/item/kitchen/rollingpin/illegal name = "metal rolling pin" desc = "A heavy metallic rolling pin used to bash in those annoying ingredients." diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm index 848058a6a279e..e089a5bc55d7d 100644 --- a/code/game/objects/items/knives.dm +++ b/code/game/objects/items/knives.dm @@ -13,7 +13,7 @@ demolition_mod = 0.75 w_class = WEIGHT_CLASS_SMALL throwforce = 10 - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' throw_speed = 3 throw_range = 6 custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 6) @@ -145,7 +145,7 @@ . = ..() if(user.get_item_by_slot(ITEM_SLOT_MASK) == src && !user.has_status_effect(/datum/status_effect/choke) && prob(20)) user.apply_damage(5, BRUTE, BODY_ZONE_HEAD) - playsound(user, 'sound/weapons/slice.ogg', 50, TRUE) + playsound(user, 'sound/items/weapons/slice.ogg', 50, TRUE) user.visible_message(span_danger("[user] accidentally cuts [user.p_them()]self while pulling [src] out of [user.p_them()] teeth! What a doofus!"), span_userdanger("You accidentally cut your mouth with [src]!")) /obj/item/knife/combat/equipped(mob/living/user, slot, initial = FALSE) diff --git a/code/game/objects/items/lighter.dm b/code/game/objects/items/lighter.dm new file mode 100644 index 0000000000000..a27db91909c3d --- /dev/null +++ b/code/game/objects/items/lighter.dm @@ -0,0 +1,362 @@ +/obj/item/lighter + name = "\improper Zippo lighter" + desc = "The zippo." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "zippo" + inhand_icon_state = "zippo" + worn_icon_state = "lighter" + w_class = WEIGHT_CLASS_TINY + obj_flags = CONDUCTS_ELECTRICITY + slot_flags = ITEM_SLOT_BELT + resistance_flags = FIRE_PROOF + grind_results = list(/datum/reagent/iron = 1, /datum/reagent/fuel = 5, /datum/reagent/fuel/oil = 5) + custom_price = PAYCHECK_CREW * 1.1 + light_system = OVERLAY_LIGHT + light_range = 2 + light_power = 1.3 + light_color = LIGHT_COLOR_FIRE + light_on = FALSE + toolspeed = 1.5 + tool_behaviour = TOOL_WELDER + ///The amount of heat a lighter has while it's on. We're using the define to ensure lighters can't do things we don't want them to. + var/heat_while_on = HIGH_TEMPERATURE_REQUIRED - 100 + ///The amount of time the lighter has been on for, for fuel consumption. + var/burned_fuel_for = 0 + ///The max amount of fuel the lighter can hold. + var/maximum_fuel = 6 + /// Whether the lighter is lit. + var/lit = FALSE + /// Whether the lighter is fancy. Fancy lighters have fancier flavortext and won't burn thumbs. + var/fancy = TRUE + /// The engraving overlay used by this lighter. + var/overlay_state + /// A list of possible engraving overlays. + var/list/overlay_list = list( + "plain", + "dame", + "thirteen", + "snake", + ) + +/obj/item/lighter/Initialize(mapload) + . = ..() + create_reagents(maximum_fuel, REFILLABLE | DRAINABLE) + reagents.add_reagent(/datum/reagent/fuel, maximum_fuel) + if(!overlay_state) + overlay_state = pick(overlay_list) + AddComponent(\ + /datum/component/bullet_intercepting,\ + block_chance = 0.5,\ + active_slots = ITEM_SLOT_SUITSTORE,\ + on_intercepted = CALLBACK(src, PROC_REF(on_intercepted_bullet)),\ + ) + update_appearance() + +/// Destroy the lighter when it's shot by a bullet +/obj/item/lighter/proc/on_intercepted_bullet(mob/living/victim, obj/projectile/bullet) + victim.visible_message(span_warning("\The [bullet] shatters on [victim]'s lighter!")) + playsound(victim, SFX_RICOCHET, 100, TRUE) + new /obj/effect/decal/cleanable/oil(get_turf(src)) + do_sparks(1, TRUE, src) + victim.dropItemToGround(src, force = TRUE, silent = TRUE) + qdel(src) + +/obj/item/lighter/cyborg_unequip(mob/user) + if(!lit) + return + set_lit(FALSE) + +/obj/item/lighter/suicide_act(mob/living/carbon/user) + if (lit) + user.visible_message(span_suicide("[user] begins holding \the [src]'s flame up to [user.p_their()] face! It looks like [user.p_theyre()] trying to commit suicide!")) + playsound(src, 'sound/items/tools/welder.ogg', 50, TRUE) + return FIRELOSS + else + user.visible_message(span_suicide("[user] begins whacking [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + return BRUTELOSS + +/obj/item/lighter/update_icon_state() + icon_state = "[initial(icon_state)][lit ? "-on" : ""]" + return ..() + +/obj/item/lighter/update_overlays() + . = ..() + . += create_lighter_overlay() + +/// Generates an overlay used by this lighter. +/obj/item/lighter/proc/create_lighter_overlay() + return mutable_appearance(icon, "lighter_overlay_[overlay_state][lit ? "-on" : ""]") + +/obj/item/lighter/ignition_effect(atom/A, mob/user) + if(get_temperature()) + . = span_infoplain(span_rose("With a single flick of [user.p_their()] wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool.")) + +/obj/item/lighter/proc/set_lit(new_lit) + if(lit == new_lit) + return + + lit = new_lit + if(lit) + force = 5 + damtype = BURN + hitsound = 'sound/items/tools/welder.ogg' + attack_verb_continuous = string_list(list("burns", "singes")) + attack_verb_simple = string_list(list("burn", "singe")) + heat = heat_while_on + START_PROCESSING(SSobj, src) + if(fancy) + playsound(src.loc , 'sound/items/lighter/zippo_on.ogg', 100, 1) + else + playsound(src.loc, 'sound/items/lighter/lighter_on.ogg', 100, 1) + if(isliving(loc)) + var/mob/living/male_model = loc + if(male_model.fire_stacks && !(male_model.on_fire)) + male_model.ignite_mob() + else + hitsound = SFX_SWING_HIT + force = 0 + heat = 0 + attack_verb_continuous = null //human_defense.dm takes care of it + attack_verb_simple = null + STOP_PROCESSING(SSobj, src) + if(fancy) + playsound(src.loc , 'sound/items/lighter/zippo_off.ogg', 100, 1) + else + playsound(src.loc , 'sound/items/lighter/lighter_off.ogg', 100, 1) + set_light_on(lit) + update_appearance() + +/obj/item/lighter/extinguish() + . = ..() + set_lit(FALSE) + +/obj/item/lighter/attack_self(mob/living/user) + if(!user.is_holding(src)) + return ..() + if(lit) + set_lit(FALSE) + if(fancy) + user.visible_message( + 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.") + ) + else + user.visible_message( + span_notice("[user] quietly shuts off [src]."), + span_notice("You quietly shut off [src].") + ) + return + + if(get_fuel() <= 0) + return + + set_lit(TRUE) + + if(fancy) + user.visible_message( + 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.") + ) + return + + var/hand_protected = FALSE + var/mob/living/carbon/human/human_user = user + if(!istype(human_user) || HAS_TRAIT(human_user, TRAIT_RESISTHEAT) || HAS_TRAIT(human_user, TRAIT_RESISTHEATHANDS)) + hand_protected = TRUE + else if(!istype(human_user.gloves, /obj/item/clothing/gloves)) + hand_protected = FALSE + else + var/obj/item/clothing/gloves/gloves = human_user.gloves + if(gloves.max_heat_protection_temperature) + hand_protected = (gloves.max_heat_protection_temperature > 360) + + if(hand_protected || prob(75)) + user.visible_message( + span_notice("After a few attempts, [user] manages to light [src]."), + span_notice("After a few attempts, you manage to light [src].") + ) + return + + var/hitzone = user.held_index_to_dir(user.active_hand_index) == "r" ? BODY_ZONE_PRECISE_R_HAND : BODY_ZONE_PRECISE_L_HAND + user.apply_damage(5, BURN, hitzone) + user.visible_message( + span_warning("After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn[user.p_s()] [user.p_their()] finger in the process."), + span_warning("You burn yourself while lighting the lighter!") + ) + user.add_mood_event("burnt_thumb", /datum/mood_event/burnt_thumb) + +/obj/item/lighter/attack(mob/living/target_mob, mob/living/user, params) + if(lit) + use(0.5) + if(target_mob.ignite_mob()) + message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(target_mob)] on fire with [src] at [AREACOORD(user)]") + log_game("[key_name(user)] set [key_name(target_mob)] on fire with [src] at [AREACOORD(user)]") + var/obj/item/cigarette/cig = help_light_cig(target_mob) + if(!lit || !cig || user.combat_mode) + return ..() + + if(cig.lit) + to_chat(user, span_warning("The [cig.name] is already lit!")) + if(target_mob == user) + cig.attackby(src, user) + return + + if(fancy) + cig.light(span_rose("[user] whips the [name] out and holds it for [target_mob]. [user.p_Their()] arm is as steady as the unflickering flame [user.p_they()] light[user.p_s()] \the [cig] with.")) + else + cig.light(span_notice("[user] holds the [name] out for [target_mob], and lights [target_mob.p_their()] [cig.name].")) + +///Checks if the lighter is able to perform a welding task. +/obj/item/lighter/tool_use_check(mob/living/user, amount, heat_required) + if(!lit) + to_chat(user, span_warning("[src] has to be on to complete this task!")) + return FALSE + if(get_fuel() < amount) + to_chat(user, span_warning("You need more welding fuel to complete this task!")) + return FALSE + if(heat < heat_required) + return FALSE + return TRUE + +/obj/item/lighter/process(seconds_per_tick) + if(lit) + burned_fuel_for += seconds_per_tick + if(burned_fuel_for >= TOOL_FUEL_BURN_INTERVAL) + use(used = 0.25) + + open_flame(heat) + +/obj/item/lighter/get_temperature() + return lit * heat + +/// Uses fuel from the lighter. +/obj/item/lighter/use(used = 0) + if(!lit) + return FALSE + + if(used > 0) + burned_fuel_for = 0 + + if(get_fuel() >= used) + reagents.remove_reagent(/datum/reagent/fuel, used) + if(get_fuel() <= 0) + set_lit(FALSE) + return TRUE + return FALSE + +///Returns the amount of fuel +/obj/item/lighter/proc/get_fuel() + return reagents.get_reagent_amount(/datum/reagent/fuel) + +/obj/item/lighter/greyscale + name = "cheap lighter" + desc = "A cheap lighter." + icon_state = "lighter" + maximum_fuel = 3 + fancy = FALSE + overlay_list = list( + "transp", + "tall", + "matte", + "zoppo", //u cant stoppo th zoppo + ) + + /// The color of the lighter. + var/lighter_color + /// The set of colors this lighter can be autoset as on init. + var/static/list/color_list = list( //Same 16 color selection as electronic assemblies + COLOR_ASSEMBLY_BLACK, + COLOR_FLOORTILE_GRAY, + COLOR_ASSEMBLY_BGRAY, + COLOR_ASSEMBLY_WHITE, + COLOR_ASSEMBLY_RED, + COLOR_ASSEMBLY_ORANGE, + COLOR_ASSEMBLY_BEIGE, + COLOR_ASSEMBLY_BROWN, + COLOR_ASSEMBLY_GOLD, + COLOR_ASSEMBLY_YELLOW, + COLOR_ASSEMBLY_GURKHA, + COLOR_ASSEMBLY_LGREEN, + COLOR_ASSEMBLY_GREEN, + COLOR_ASSEMBLY_LBLUE, + COLOR_ASSEMBLY_BLUE, + COLOR_ASSEMBLY_PURPLE + ) + +/obj/item/lighter/greyscale/Initialize(mapload) + . = ..() + if(!lighter_color) + lighter_color = pick(color_list) + update_appearance() + +/obj/item/lighter/greyscale/create_lighter_overlay() + var/mutable_appearance/lighter_overlay = ..() + lighter_overlay.color = lighter_color + return lighter_overlay + +/obj/item/lighter/greyscale/ignition_effect(atom/A, mob/user) + if(get_temperature()) + . = span_notice("After some fiddling, [user] manages to light [A] with [src].") + + +/obj/item/lighter/slime + name = "slime zippo" + desc = "A specialty zippo made from slimes and industry. Has a much hotter flame than normal." + icon_state = "slighter" + heat_while_on = parent_type::heat_while_on + 1000 //Blue flame is hotter, this means this does act as a welding tool. + light_color = LIGHT_COLOR_CYAN + overlay_state = "slime" + grind_results = list(/datum/reagent/iron = 1, /datum/reagent/fuel = 5, /datum/reagent/medicine/pyroxadone = 5) + +/obj/item/lighter/skull + name = "badass zippo" + desc = "An absolutely badass zippo lighter. Just look at that skull!" + overlay_state = "skull" + +/obj/item/lighter/mime + name = "pale zippo" + desc = "In lieu of fuel, performative spirit can be used to light cigarettes." + icon_state = "mlighter" //These ones don't show a flame. + light_color = LIGHT_COLOR_HALOGEN + heat_while_on = 0 //I swear it's a real lighter dude you just can't see the flame dude I promise + overlay_state = "mime" + grind_results = list(/datum/reagent/iron = 1, /datum/reagent/toxin/mutetoxin = 5, /datum/reagent/consumable/nothing = 10) + light_range = 0 + light_power = 0 + fancy = FALSE + +/obj/item/lighter/mime/ignition_effect(atom/A, mob/user) + . = span_infoplain("[user] lifts the [name] to the [A], which miraculously lights!") + +/obj/item/lighter/bright + name = "illuminative zippo" + desc = "Sustains an incredibly bright chemical reaction when you spark it. Avoid looking directly at the igniter when lit." + icon_state = "slighter" + light_color = LIGHT_COLOR_ELECTRIC_CYAN + overlay_state = "bright" + grind_results = list(/datum/reagent/iron = 1, /datum/reagent/flash_powder = 10) + light_range = 8 + light_power = 3 //Irritatingly bright and large enough to cover a small room. + fancy = FALSE + +/obj/item/lighter/bright/examine(mob/user) + . = ..() + + if(lit && isliving(user)) + var/mob/living/current_viewer = user + current_viewer.flash_act(4) + +/obj/item/lighter/bright/ignition_effect(atom/A, mob/user) + if(get_temperature()) + . = span_infoplain(span_rose("[user] lifts the [src] to the [A], igniting it with a brilliant flash of light!")) + var/mob/living/current_viewer = user + current_viewer.flash_act(4) + +/obj/effect/spawner/random/special_lighter + name = "special lighter spawner" + icon_state = "lighter" + loot = list( + /obj/item/lighter/skull, + /obj/item/lighter/mime, + /obj/item/lighter/bright, + ) diff --git a/code/game/objects/items/machine_wand.dm b/code/game/objects/items/machine_wand.dm index fd0c730fff811..a4e1be08ee450 100644 --- a/code/game/objects/items/machine_wand.dm +++ b/code/game/objects/items/machine_wand.dm @@ -24,6 +24,18 @@ bug_appearance = mutable_appearance('icons/effects/effects.dmi', "fly-surrounding", ABOVE_WINDOW_LAYER) register_context() +/obj/item/machine_remote/equipped(mob/user, slot, initial) + . = ..() + if(user.get_active_held_item() == src) + ADD_TRAIT(user, TRAIT_AI_ACCESS, HELD_ITEM_TRAIT) + ADD_TRAIT(user, TRAIT_SILICON_ACCESS, HELD_ITEM_TRAIT) + +/obj/item/machine_remote/dropped(mob/user, silent) + . = ..() + if(user.get_active_held_item() != src) + REMOVE_TRAIT(user, TRAIT_AI_ACCESS, HELD_ITEM_TRAIT) + REMOVE_TRAIT(user, TRAIT_SILICON_ACCESS, HELD_ITEM_TRAIT) + /obj/item/machine_remote/Destroy(force) . = ..() if(controlling_machine_or_bot) @@ -49,7 +61,7 @@ /obj/item/machine_remote/ui_interact(mob/user, datum/tgui/ui) if(!COOLDOWN_FINISHED(src, timeout_time)) - playsound(src, 'sound/machines/synth_no.ogg', 30 , TRUE) + playsound(src, 'sound/machines/synth/synth_no.ogg', 30 , TRUE) say("Remote control disabled temporarily. Please try again soon.") return FALSE if(!controlling_machine_or_bot) @@ -73,12 +85,14 @@ remove_old_machine() return CLICK_ACTION_SUCCESS -/obj/item/machine_remote/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/machine_remote/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION) || (!ismachinery(interacting_with) && !isbot(interacting_with))) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/machine_remote/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!COOLDOWN_FINISHED(src, timeout_time)) - playsound(src, 'sound/machines/synth_no.ogg', 30 , TRUE) + playsound(src, 'sound/machines/synth/synth_no.ogg', 30 , TRUE) say("Remote control disabled temporarily. Please try again soon.") return ITEM_INTERACT_BLOCKING if(!ismachinery(interacting_with) && !isbot(interacting_with)) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 7470dd359fd60..9eb6ae44eb80e 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -109,7 +109,7 @@ var/tag = uppertext(GLOB.TAGGERLOCATIONS[destination_tag.currTag]) to_chat(user, span_notice("*[tag]*")) sort_tag = destination_tag.currTag - playsound(loc, 'sound/machines/twobeep_high.ogg', vol = 100, vary = TRUE) + playsound(loc, 'sound/machines/beep/twobeep_high.ogg', vol = 100, vary = TRUE) /obj/item/mail/multitool_act(mob/living/user, obj/item/tool) if(user.get_inactive_held_item() == src) @@ -147,7 +147,7 @@ user.put_in_hands(stuff) else stuff.forceMove(drop_location()) - playsound(loc, 'sound/items/poster_ripped.ogg', vol = 50, vary = TRUE) + playsound(loc, 'sound/items/poster/poster_ripped.ogg', vol = 50, vary = TRUE) qdel(src) return TRUE @@ -404,7 +404,7 @@ /obj/item/mail/traitor/after_unwrap(mob/user) user.temporarilyRemoveItemFromInventory(src, force = TRUE) - playsound(loc, 'sound/items/poster_ripped.ogg', vol = 50, vary = TRUE) + playsound(loc, 'sound/items/poster/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) var/whomst = made_by_cached_name ? "[made_by_cached_name] ([made_by_cached_ckey])" : "no one in particular" @@ -421,7 +421,7 @@ if(!do_after(user, 2 SECONDS, target = src)) return FALSE balloon_alert(user, "disarmed") - playsound(src, 'sound/machines/defib_ready.ogg', vol = 100, vary = TRUE) + playsound(src, 'sound/machines/defib/defib_ready.ogg', vol = 100, vary = TRUE) armed = FALSE return TRUE else @@ -432,7 +432,7 @@ return FALSE if(prob(50)) balloon_alert(user, "disarmed something...?") - playsound(src, 'sound/machines/defib_ready.ogg', vol = 100, vary = TRUE) + playsound(src, 'sound/machines/defib/defib_ready.ogg', vol = 100, vary = TRUE) armed = FALSE return TRUE else @@ -550,10 +550,10 @@ shady_mail.made_by_cached_name = user.mind.name if(index == 1) - var/mail_name = tgui_input_text(user, "Enter mail title, or leave it blank", "Mail Counterfeiting") + var/mail_name = tgui_input_text(user, "Enter mail title, or leave it blank", "Mail Counterfeiting", max_length = MAX_LABEL_LEN) if(!(src in user.contents)) return FALSE - if(reject_bad_text(mail_name, ascii_only = FALSE)) + if(reject_bad_text(mail_name, max_length = MAX_LABEL_LEN, ascii_only = FALSE)) shady_mail.name = mail_name else shady_mail.name = mail_type diff --git a/code/game/objects/items/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm index 74d908732a562..9d1c4fe676b84 100644 --- a/code/game/objects/items/maintenance_loot.dm +++ b/code/game/objects/items/maintenance_loot.dm @@ -20,8 +20,9 @@ wound_bonus = 20 demolition_mod = 1.25 grind_results = list(/datum/reagent/lead = 20) - pickup_sound = 'sound/items/lead_pipe_pickup.ogg' - drop_sound = 'sound/items/lead_pipe_drop.ogg' + pickup_sound = 'sound/items/handling/lead_pipe/lead_pipe_pickup.ogg' + drop_sound = 'sound/items/handling/materials/metal_drop.ogg' + throw_drop_sound = 'sound/items/handling/lead_pipe/lead_pipe_drop.ogg' hitsound = 'sound/items/lead_pipe_hit.ogg' //A good battery early in the shift. Source of lead & sulfuric acid reagents. diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index 4af5c4c923e75..01e5983b7d7aa 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -12,6 +12,7 @@ force = 12 //9 hit crit w_class = WEIGHT_CLASS_NORMAL wound_bonus = 15 + sound_vary = TRUE /// Whether this baton is active or not var/active = TRUE @@ -176,7 +177,7 @@ /obj/item/melee/baton/proc/check_parried(mob/living/carbon/human/human_target, mob/living/user) if (human_target.check_block(src, 0, "[user]'s [name]", MELEE_ATTACK)) - playsound(human_target, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(human_target, 'sound/items/weapons/genhit.ogg', 50, TRUE) return TRUE return FALSE @@ -318,11 +319,15 @@ bare_wound_bonus = 5 clumsy_knockdown_time = 15 SECONDS active = FALSE - pickup_sound = 'sound/items/stun_baton_pick_up.ogg' - drop_sound = 'sound/items/stun_baton_drop.ogg' - + var/folded_drop_sound = 'sound/items/baton/telescopic_baton_folded_drop.ogg' + var/folded_pickup_sound = 'sound/items/baton/telescopic_baton_folded_pickup.ogg' + var/unfolded_drop_sound = 'sound/items/baton/telescopic_baton_unfolded_drop.ogg' + var/unfolded_pickup_sound = 'sound/items/baton/telescopic_baton_unfolded_pickup.ogg' + pickup_sound = 'sound/items/baton/telescopic_baton_folded_pickup.ogg' + drop_sound = 'sound/items/baton/telescopic_baton_folded_drop.ogg' + sound_vary = TRUE /// The sound effecte played when our baton is extended. - var/on_sound = 'sound/weapons/batonextend.ogg' + var/on_sound = 'sound/items/weapons/batonextend.ogg' /// The inhand iconstate used when our baton is extended. var/on_inhand_icon_state = "nullrod" /// The force on extension. @@ -376,6 +381,12 @@ inhand_icon_state = active ? on_inhand_icon_state : null // When inactive, there is no inhand icon_state. if(user) balloon_alert(user, active ? "extended" : "collapsed") + if(!active) + drop_sound = folded_drop_sound + pickup_sound = folded_pickup_sound + else + drop_sound = unfolded_drop_sound + pickup_sound = unfolded_pickup_sound playsound(src, on_sound, 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE @@ -396,10 +407,12 @@ stamina_damage = 85 clumsy_knockdown_time = 24 SECONDS affect_cyborg = TRUE - on_stun_sound = 'sound/effects/contractorbatonhit.ogg' + on_stun_sound = 'sound/items/weapons/contractor_baton/contractorbatonhit.ogg' + unfolded_drop_sound = 'sound/items/baton/contractor_baton_unfolded_pickup.ogg' + unfolded_pickup_sound = 'sound/items/baton/contractor_baton_unfolded_pickup.ogg' on_inhand_icon_state = "contractor_baton_on" - on_sound = 'sound/weapons/contractorbatonextend.ogg' + on_sound = 'sound/items/weapons/contractorbatonextend.ogg' active_force = 16 /obj/item/melee/baton/telescopic/contractor_baton/get_wait_description() @@ -429,7 +442,7 @@ knockdown_time = 5 SECONDS clumsy_knockdown_time = 15 SECONDS cooldown = 2.5 SECONDS - on_stun_sound = 'sound/weapons/egloves.ogg' + on_stun_sound = 'sound/items/weapons/egloves.ogg' on_stun_volume = 50 active = FALSE context_living_rmb_active = "Harmful Stun" @@ -438,9 +451,13 @@ light_on = FALSE light_color = LIGHT_COLOR_ORANGE light_power = 0.5 - pickup_sound = 'sound/items/stun_baton_pick_up.ogg' - drop_sound = 'sound/items/stun_baton_drop.ogg' - + var/inactive_drop_sound = 'sound/items/baton/stun_baton_inactive_drop.ogg' + var/inactive_pickup_sound = 'sound/items/baton/stun_baton_inactive_pickup.ogg' + var/active_drop_sound = 'sound/items/baton/stun_baton_active_drop.ogg' + var/active_pickup_sound = 'sound/items/baton/stun_baton_active_pickup.ogg' + drop_sound = 'sound/items/baton/stun_baton_inactive_drop.ogg' + pickup_sound = 'sound/items/baton/stun_baton_inactive_pickup.ogg' + sound_vary = TRUE var/throw_stun_chance = 35 var/obj/item/stock_parts/power_store/cell @@ -462,7 +479,6 @@ else cell = new preload_cell_type(src) RegisterSignal(src, COMSIG_ATOM_ATTACKBY, PROC_REF(convert)) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) update_appearance() /obj/item/melee/baton/security/get_cell() @@ -491,25 +507,25 @@ var/turf/source_turf = get_turf(src) var/obj/item/melee/baton/baton = new (source_turf) baton.alpha = 20 - playsound(source_turf, 'sound/items/drill_use.ogg', 80, TRUE, -1) + playsound(source_turf, 'sound/items/tools/drill_use.ogg', 80, TRUE, -1) animate(src, alpha = 0, time = 1 SECONDS) animate(baton, alpha = 255, time = 1 SECONDS) qdel(item) qdel(src) -/obj/item/melee/baton/security/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/item/melee/baton/security/on_saboteur(datum/source, disrupt_duration) + . = ..() if(!active) return - toggle_light() - active = FALSE + turn_off() update_appearance() - return COMSIG_SABOTEUR_SUCCESS + return TRUE + /obj/item/melee/baton/security/Exited(atom/movable/mov_content) . = ..() if(mov_content == cell) cell = null - active = FALSE + turn_off() update_appearance() /obj/item/melee/baton/security/update_icon_state() @@ -559,26 +575,41 @@ return FALSE /obj/item/melee/baton/security/attack_self(mob/user) - if(cell?.charge >= cell_hit_cost) - active = !active - balloon_alert(user, "turned [active ? "on" : "off"]") - playsound(src, SFX_SPARKS, 75, TRUE, -1) - toggle_light(user) - do_sparks(1, TRUE, src) + if(cell?.charge >= cell_hit_cost && !active) + turn_on(user) + balloon_alert(user, "turned on") else - active = FALSE + turn_off() if(!cell) balloon_alert(user, "no power source!") - else + else if(cell?.charge < cell_hit_cost) balloon_alert(user, "out of charge!") - update_appearance() + else + balloon_alert(user, "turned off") add_fingerprint(user) /// Toggles the stun baton's light -/obj/item/melee/baton/security/proc/toggle_light(mob/user) +/obj/item/melee/baton/security/proc/toggle_light() set_light_on(!light_on) return +/obj/item/melee/baton/security/proc/turn_on(mob/user) + active = TRUE + playsound(src, SFX_SPARKS, 75, TRUE, -1) + update_appearance() + toggle_light() + do_sparks(1, TRUE, src) + drop_sound = active_drop_sound + pickup_sound = active_pickup_sound + +/obj/item/melee/baton/security/proc/turn_off() + active = FALSE + set_light_on(FALSE) + update_appearance() + playsound(src, SFX_SPARKS, 75, TRUE, -1) + drop_sound = inactive_drop_sound + pickup_sound = inactive_pickup_sound + /obj/item/melee/baton/security/proc/deductcharge(deducted_charge) if(!cell) return @@ -587,10 +618,7 @@ . = cell.use(deducted_charge) if(active && cell.charge < cell_hit_cost) //we're below minimum, turn off - active = FALSE - set_light_on(FALSE) - update_appearance() - playsound(src, SFX_SPARKS, 75, TRUE, -1) + turn_off() /obj/item/melee/baton/security/clumsy_check(mob/living/carbon/human/user) . = ..() diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index cb9cbb5fd82de..eec42f8b60df5 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -24,7 +24,7 @@ /// Sharpness while active. var/active_sharpness = SHARP_EDGED /// Hitsound played attacking while active. - var/active_hitsound = 'sound/weapons/blade1.ogg' + var/active_hitsound = 'sound/items/weapons/blade1.ogg' /// Weight class while active. var/active_w_class = WEIGHT_CLASS_BULKY /// The heat given off when active. @@ -33,10 +33,10 @@ // SKYRAT EDIT ADD START /// The sound played when the item is turned on - var/enable_sound = 'sound/weapons/saberon.ogg' + var/enable_sound = 'sound/items/weapons/saberon.ogg' /// The sound played when the item is turned off - var/disable_sound = 'sound/weapons/saberoff.ogg' + var/disable_sound = 'sound/items/weapons/saberoff.ogg' // SKYRAT EDIT ADD END @@ -132,7 +132,7 @@ tool_behaviour = (active ? TOOL_SAW : NONE) //Lets energy weapons cut trees. Also lets them do bonecutting surgery, which is kinda metal! if(user) balloon_alert(user, "[name] [active ? "enabled":"disabled"]") - playsound(src, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 35, TRUE) + playsound(src, active ? 'sound/items/weapons/saberon.ogg' : 'sound/items/weapons/saberoff.ogg', 35, TRUE) set_light_on(active) update_appearance(UPDATE_ICON_STATE) return COMPONENT_NO_DEFAULT_MESSAGE @@ -146,7 +146,7 @@ base_icon_state = "axe" lefthand_file = 'icons/mob/inhands/weapons/axes_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/axes_righthand.dmi' - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("attacks", "chops", "cleaves", "tears", "lacerates", "cuts") attack_verb_simple = list("attack", "chop", "cleave", "tear", "lacerate", "cut") force = 40 @@ -198,7 +198,7 @@ throw_range = 5 armour_penetration = 35 block_chance = 50 - block_sound = 'sound/weapons/block_blade.ogg' + block_sound = 'sound/items/weapons/block_blade.ogg' embed_type = /datum/embed_data/esword /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) @@ -237,7 +237,7 @@ 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' icon_state = "esaw" - hitsound = 'sound/weapons/circsawhit.ogg' + hitsound = 'sound/items/weapons/circsawhit.ogg' force = 18 hitcost = 0.075 * STANDARD_CELL_CHARGE // Costs more than a standard cyborg esword. w_class = WEIGHT_CLASS_NORMAL @@ -331,7 +331,7 @@ base_icon_state = "blade" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - hitsound = 'sound/weapons/blade1.ogg' + hitsound = 'sound/items/weapons/blade1.ogg' 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") force = 30 diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 9e7e9cec7ee38..7703160bfdb1d 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -21,7 +21,7 @@ w_class = WEIGHT_CLASS_NORMAL attack_verb_continuous = list("flogs", "whips", "lashes", "disciplines") attack_verb_simple = list("flog", "whip", "lash", "discipline") - hitsound = 'sound/weapons/chainhit.ogg' + hitsound = 'sound/items/weapons/chainhit.ogg' custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) /obj/item/melee/chainofcommand/suicide_act(mob/living/user) @@ -39,7 +39,7 @@ w_class = WEIGHT_CLASS_HUGE force = 20 throwforce = 10 - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' 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") sharpness = SHARP_EDGED @@ -70,8 +70,8 @@ sharpness = SHARP_EDGED attack_verb_continuous = list("slashes", "cuts") attack_verb_simple = list("slash", "cut") - block_sound = 'sound/weapons/parry.ogg' - hitsound = 'sound/weapons/rapierhit.ogg' + block_sound = 'sound/items/weapons/parry.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) wound_bonus = 10 bare_wound_bonus = 25 @@ -167,7 +167,6 @@ /obj/item/melee/parsnip_sabre name = "parsnip sabre" desc = "A weird, yet elegant weapon. Suprisingly sharp for something made from a parsnip." - icon = 'icons/obj/weapons/sword.dmi' icon_state = "parsnip_sabre" inhand_icon_state = "parsnip_sabre" @@ -182,8 +181,8 @@ sharpness = SHARP_EDGED attack_verb_continuous = list("slashes", "cuts") attack_verb_simple = list("slash", "cut") - block_sound = 'sound/weapons/parry.ogg' - hitsound = 'sound/weapons/rapierhit.ogg' + block_sound = 'sound/items/weapons/parry.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' custom_materials = null wound_bonus = 5 bare_wound_bonus = 15 @@ -224,8 +223,8 @@ armour_penetration = 65 attack_verb_continuous = list("slashes", "stings", "prickles", "pokes") attack_verb_simple = list("slash", "sting", "prickle", "poke") - hitsound = 'sound/weapons/rapierhit.ogg' - block_sound = 'sound/weapons/parry.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' + block_sound = 'sound/items/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) @@ -370,7 +369,7 @@ w_class = WEIGHT_CLASS_NORMAL attack_verb_continuous = list("flogs", "whips", "lashes", "disciplines") attack_verb_simple = list("flog", "whip", "lash", "discipline") - hitsound = 'sound/weapons/whip.ogg' + hitsound = 'sound/items/weapons/whip.ogg' /obj/item/melee/curator_whip/afterattack(atom/target, mob/user, click_parameters) if(ishuman(target)) @@ -434,7 +433,7 @@ inhand_icon_state = active ? "nullrod" : null if(user) balloon_alert(user, "[active ? "extended" : "collapsed"] [src]") - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/melee/roastingstick/attackby(atom/target, mob/user) @@ -475,7 +474,7 @@ return NONE if (istype(interacting_with, /obj/singularity) && get_dist(user, interacting_with) < 10) to_chat(user, span_notice("You send [held_sausage] towards [interacting_with].")) - playsound(src, 'sound/items/rped.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/rped.ogg', 50, TRUE) beam = user.Beam(interacting_with, icon_state = "rped_upgrade", time = 10 SECONDS) return ITEM_INTERACT_SUCCESS return NONE @@ -486,21 +485,21 @@ if (!is_type_in_typecache(interacting_with, ovens)) return NONE to_chat(user, span_notice("You extend [src] towards [interacting_with].")) - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE) finish_roasting(user, interacting_with) return ITEM_INTERACT_SUCCESS /obj/item/melee/roastingstick/proc/finish_roasting(user, atom/target) if(do_after(user, 10 SECONDS, target = user)) to_chat(user, span_notice("You finish roasting [held_sausage].")) - playsound(src, 'sound/items/welder2.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/welder2.ogg', 50, TRUE) held_sausage.add_atom_colour(rgb(103, 63, 24), FIXED_COLOUR_PRIORITY) held_sausage.name = "[target.name]-roasted [held_sausage.name]" held_sausage.desc = "[held_sausage.desc] It has been cooked to perfection on \a [target]." update_appearance() else QDEL_NULL(beam) - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE) to_chat(user, span_notice("You put [src] away.")) /obj/item/melee/cleric_mace @@ -524,7 +523,7 @@ w_class = WEIGHT_CLASS_BULKY throwforce = 8 block_chance = 10 - block_sound = 'sound/weapons/genhit.ogg' + block_sound = 'sound/items/weapons/genhit.ogg' armour_penetration = 50 attack_verb_continuous = list("smacks", "strikes", "cracks", "beats") attack_verb_simple = list("smack", "strike", "crack", "beat") diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index 41c1809b5589e..66e0b15e99fd7 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -108,7 +108,7 @@ return FALSE if(!user.is_holding(src)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index 9bc5189313d63..8be08a876d70d 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -57,14 +57,14 @@ /obj/item/pet_carrier/attack_self(mob/living/user) if(open) to_chat(user, span_notice("You close [src]'s door.")) - playsound(user, 'sound/effects/bin_close.ogg', 50, TRUE) + playsound(user, 'sound/effects/bin/bin_close.ogg', 50, TRUE) open = FALSE else if(locked) to_chat(user, span_warning("[src] is locked!")) return to_chat(user, span_notice("You open [src]'s door.")) - playsound(user, 'sound/effects/bin_open.ogg', 50, TRUE) + playsound(user, 'sound/effects/bin/bin_open.ogg', 50, TRUE) open = TRUE update_appearance() @@ -74,9 +74,9 @@ locked = !locked to_chat(user, span_notice("You flip the lock switch [locked ? "down" : "up"].")) if(locked) - playsound(user, 'sound/machines/boltsdown.ogg', 30, TRUE) + playsound(user, 'sound/machines/airlock/boltsdown.ogg', 30, TRUE) else - playsound(user, 'sound/machines/boltsup.ogg', 30, TRUE) + playsound(user, 'sound/machines/airlock/boltsup.ogg', 30, TRUE) update_appearance() return CLICK_ACTION_SUCCESS @@ -129,7 +129,7 @@ loc.visible_message(span_warning("[user] flips the lock switch on [src] by reaching through!"), null, null, null, user) to_chat(user, span_boldannounce("Bingo! The lock pops open!")) locked = FALSE - playsound(src, 'sound/machines/boltsup.ogg', 30, TRUE) + playsound(src, 'sound/machines/airlock/boltsup.ogg', 30, TRUE) update_appearance() else loc.visible_message(span_warning("[src] starts rattling as something pushes against the door!"), null, null, null, user) @@ -182,7 +182,7 @@ add_occupant(target) /obj/item/pet_carrier/proc/add_occupant(mob/living/occupant) - if(occupant in occupants || !istype(occupant)) + if((occupant in occupants) || !istype(occupant)) return occupant.forceMove(src) occupants += occupant diff --git a/code/game/objects/items/pillow.dm b/code/game/objects/items/pillow.dm index b924983a4272f..af2096a9c2caa 100644 --- a/code/game/objects/items/pillow.dm +++ b/code/game/objects/items/pillow.dm @@ -51,9 +51,9 @@ if(!iscarbon(target_mob)) return if(bricked || HAS_TRAIT(src, TRAIT_WIELDED)) - hit_sound = 'sound/items/pillow_hit2.ogg' + hit_sound = 'sound/items/pillow/pillow_hit2.ogg' else - hit_sound = 'sound/items/pillow_hit.ogg' + hit_sound = 'sound/items/pillow/pillow_hit.ogg' user.apply_damage(5, STAMINA) //Had to be done so one person cannot keep multiple people stam critted last_fighter = user playsound(user, hit_sound, 80) //the basic 50 vol is barely audible @@ -116,7 +116,7 @@ user.put_in_hands(pillow_trophy) pillow_trophy = null balloon_alert(user, "tag removed") - playsound(user,'sound/items/poster_ripped.ogg', 50) + playsound(user,'sound/items/poster/poster_ripped.ogg', 50) update_appearance() return CLICK_ACTION_SUCCESS diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index 5d7fc1957f4f4..878fd0ad3bb77 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -44,7 +44,7 @@ /obj/item/pinpointer/proc/toggle_on() active = !active - playsound(src, 'sound/items/screwdriver2.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/screwdriver2.ogg', 50, TRUE) if(active) START_PROCESSING(SSfastprocess, src) else @@ -152,7 +152,7 @@ return if(isnull(names[pinpoint_target])) return - if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated()) + if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated) return target = names[pinpoint_target] toggle_on() diff --git a/code/game/objects/items/pitchfork.dm b/code/game/objects/items/pitchfork.dm index 63c4db34b3969..1ece740d4a6df 100644 --- a/code/game/objects/items/pitchfork.dm +++ b/code/game/objects/items/pitchfork.dm @@ -17,7 +17,7 @@ w_class = WEIGHT_CLASS_BULKY attack_verb_continuous = list("attacks", "impales", "pierces") attack_verb_simple = list("attack", "impale", "pierce") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED max_integrity = 200 armor_type = /datum/armor/item_pitchfork diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 95f46da2e10ce..7c7f998251c12 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -44,7 +44,7 @@ /obj/item/toy/plush/Initialize(mapload) . = ..() AddComponent(/datum/component/squeak, squeak_override) - AddElement(/datum/element/bed_tuckable, mapload, 6, 7, 90) + AddElement(/datum/element/bed_tuckable, mapload, 6, -5, 90) AddElement(/datum/element/toy_talk) //have we decided if Pinocchio goes in the blue or pink aisle yet? @@ -393,7 +393,7 @@ inhand_icon_state = "carp_plushie" attack_verb_continuous = list("bites", "eats", "fin slaps") attack_verb_simple = list("bite", "eat", "fin slap") - squeak_override = list('sound/weapons/bite.ogg'=1) + squeak_override = list('sound/items/weapons/bite.ogg'=1) /obj/item/toy/plush/bubbleplush name = "\improper Bubblegum plushie" @@ -401,7 +401,7 @@ icon_state = "bubbleplush" attack_verb_continuous = list("rents") attack_verb_simple = list("rent") - squeak_override = list('sound/magic/demon_attack1.ogg'=1) + squeak_override = list('sound/effects/magic/demon_attack1.ogg'=1) /obj/item/toy/plush/ratplush name = "\improper Ratvar plushie" @@ -438,7 +438,7 @@ clash_target = null P.clashing = FALSE return - playsound(src, 'sound/magic/clockwork/ratvar_attack.ogg', 50, TRUE, frequency = 2) + playsound(src, 'sound/effects/magic/clockwork/ratvar_attack.ogg', 50, TRUE, frequency = 2) sleep(0.24 SECONDS) if(QDELETED(src)) P.clashing = FALSE @@ -457,7 +457,7 @@ if(QDELETED(P)) clash_target = null return - playsound(P, 'sound/magic/clockwork/narsie_attack.ogg', 50, TRUE, frequency = 2) + playsound(P, 'sound/effects/magic/clockwork/narsie_attack.ogg', 50, TRUE, frequency = 2) sleep(0.33 SECONDS) if(QDELETED(src)) P.clashing = FALSE @@ -476,16 +476,16 @@ if(a_winnar_is == src) say(pick("DIE.", "ROT.")) P.say(pick("Nooooo...", "Not die. To y-", "Die. Ratv-", "Sas tyen re-")) - playsound(src, 'sound/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE, frequency = 2) - playsound(P, 'sound/magic/demon_dies.ogg', 50, TRUE, frequency = 2) + playsound(src, 'sound/effects/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE, frequency = 2) + playsound(P, 'sound/effects/magic/demon_dies.ogg', 50, TRUE, frequency = 2) explosion(P, light_impact_range = 1) qdel(P) clash_target = null else say("NO! I will not be banished again...") P.say(pick("Ha.", "Ra'sha fonn dest.", "You fool. To come here.")) - playsound(src, 'sound/magic/clockwork/anima_fragment_death.ogg', 62, TRUE, frequency = 2) - playsound(P, 'sound/magic/demon_attack1.ogg', 50, TRUE, frequency = 2) + playsound(src, 'sound/effects/magic/clockwork/anima_fragment_death.ogg', 62, TRUE, frequency = 2) + playsound(P, 'sound/effects/magic/demon_attack1.ogg', 50, TRUE, frequency = 2) explosion(src, light_impact_range = 1) qdel(src) P.clashing = FALSE @@ -511,7 +511,7 @@ greyscale_config = /datum/greyscale_config/plush_lizard attack_verb_continuous = list("claws", "hisses", "tail slaps") attack_verb_simple = list("claw", "hiss", "tail slap") - squeak_override = list('sound/weapons/slash.ogg' = 1) + squeak_override = list('sound/items/weapons/slash.ogg' = 1) /obj/item/toy/plush/lizard_plushie/Initialize(mapload) . = ..() @@ -559,7 +559,7 @@ inhand_icon_state = null attack_verb_continuous = list("bites", "hisses", "tail slaps") attack_verb_simple = list("bite", "hiss", "tail slap") - squeak_override = list('sound/weapons/bite.ogg' = 1) + squeak_override = list('sound/items/weapons/bite.ogg' = 1) /obj/item/toy/plush/nukeplushie name = "operative plushie" @@ -588,7 +588,7 @@ inhand_icon_state = null attack_verb_continuous = list("blorbles", "slimes", "absorbs") attack_verb_simple = list("blorble", "slime", "absorb") - squeak_override = list('sound/effects/blobattack.ogg' = 1) + squeak_override = list('sound/effects/blob/blobattack.ogg' = 1) gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy // This is supposed to be only in the bus ruin, don't spawn it elsewhere @@ -657,13 +657,13 @@ attack_verb_continuous = list("stings") attack_verb_simple = list("sting") gender = FEMALE - squeak_override = list('sound/voice/moth/scream_moth.ogg'=1) + squeak_override = list('sound/mobs/humanoids/moth/scream_moth.ogg'=1) /obj/item/toy/plush/goatplushie name = "strange goat plushie" icon_state = "goat" desc = "Despite its cuddly appearance and plush nature, it will beat you up all the same. Goats never change." - squeak_override = list('sound/weapons/punch1.ogg'=1) + squeak_override = list('sound/items/weapons/punch1.ogg'=1) /// Whether or not this goat is currently taking in a monsterous doink var/going_hard = FALSE /// Whether or not this goat has been flattened like a funny pancake @@ -724,7 +724,7 @@ inhand_icon_state = null attack_verb_continuous = list("flutters", "flaps") attack_verb_simple = list("flutter", "flap") - squeak_override = list('sound/voice/moth/scream_moth.ogg'=1) + squeak_override = list('sound/mobs/humanoids/moth/scream_moth.ogg'=1) ///Used to track how many people killed themselves with item/toy/plush/moth var/suicide_count = 0 @@ -737,7 +737,7 @@ desc = "A plushie depicting a creepy mothperson. It's killed [suicide_count] people! I don't think I want to hug it any more!" divine = TRUE resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF - playsound(src, 'sound/hallucinations/wail.ogg', 50, TRUE, -1) + playsound(src, 'sound/effects/hallucinations/wail.ogg', 50, TRUE, -1) var/list/available_spots = get_adjacent_open_turfs(loc) if(available_spots.len) //If the user is in a confined space the plushie will drop normally as the user dies, but in the open the plush is placed one tile away from the user to prevent squeak spam var/turf/open/random_open_spot = pick(available_spots) @@ -751,7 +751,7 @@ icon_state = "pkplush" attack_verb_continuous = list("hugs", "squeezes") attack_verb_simple = list("hug", "squeeze") - squeak_override = list('sound/weapons/thudswoosh.ogg'=1) + squeak_override = list('sound/items/weapons/thudswoosh.ogg'=1) /obj/item/toy/plush/rouny name = "runner plushie" @@ -770,7 +770,7 @@ inhand_icon_state = null attack_verb_continuous = list("abducts", "probes") attack_verb_continuous = list("abduct", "probe") - squeak_override = list('sound/weather/ashstorm/inside/weak_end.ogg' = 1) //very faint sound since abductors are silent as far as "speaking" is concerned. + squeak_override = list('sound/ambience/weather/ashstorm/inside/weak_end.ogg' = 1) //very faint sound since abductors are silent as far as "speaking" is concerned. /obj/item/toy/plush/abductor/agent name = "abductor agent plushie" @@ -780,8 +780,8 @@ attack_verb_continuous = list("abducts", "probes", "stuns") attack_verb_continuous = list("abduct", "probe", "stun") squeak_override = list( - 'sound/weapons/egloves.ogg' = 2, - 'sound/weapons/cablecuff.ogg' = 1, + 'sound/items/weapons/egloves.ogg' = 2, + 'sound/items/weapons/cablecuff.ogg' = 1, ) /obj/item/toy/plush/shark diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index b49fb7ec26051..f9e63d7ee3f74 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -39,7 +39,7 @@ var/charge_tick = 0 var/charge_type var/selfcharge = FALSE - var/fire_sound = 'sound/weapons/sonic_jackhammer.ogg' + var/fire_sound = 'sound/items/weapons/sonic_jackhammer.ogg' var/spin_item = TRUE //Do the projectiles spin when launched? trigger_guard = TRIGGER_GUARD_NORMAL @@ -103,7 +103,7 @@ /obj/item/pneumatic_cannon/wrench_act(mob/living/user, obj/item/tool) if(needs_air == FALSE) return - playsound(src, 'sound/items/ratchet.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/ratchet.ogg', 50, TRUE) pressure_setting = pressure_setting >= HIGH_PRESSURE ? LOW_PRESSURE : pressure_setting + 1 balloon_alert(user, "output level set to [pressure_setting_to_text(pressure_setting)]") return TRUE diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index 0054520c957ee..77810ff3a89b6 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -117,7 +117,7 @@ if(!gas_used) to_chat(user, span_warning("\The [src]'s tank is empty!")) target.apply_damage((force / 5), BRUTE) - playsound(loc, 'sound/weapons/punch1.ogg', 50, TRUE) + playsound(loc, 'sound/items/weapons/punch1.ogg', 50, TRUE) target.visible_message(span_danger("[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!"), \ span_userdanger("[user]'s punches you!")) return @@ -125,7 +125,7 @@ if(!molar_cmp_equals(gas_used.total_moles(), gas_per_fist * fist_pressure_setting)) our_turf.assume_air(gas_used) to_chat(user, span_warning("\The [src]'s piston-ram lets out a weak hiss, it needs more gas!")) - playsound(loc, 'sound/weapons/punch4.ogg', 50, TRUE) + playsound(loc, 'sound/items/weapons/punch4.ogg', 50, TRUE) target.apply_damage((force / 2), BRUTE) target.visible_message(span_danger("[user]'s powerfist lets out a weak hiss as [user.p_they()] punch[user.p_es()] [target.name]!"), \ span_userdanger("[user]'s punch strikes with force!")) @@ -135,8 +135,8 @@ span_userdanger("You cry out in pain as [user]'s punch flings you backwards!")) new /obj/effect/temp_visual/kinetic_blast(target.loc) target.apply_damage(force * fist_pressure_setting, BRUTE, wound_bonus = CANT_WOUND) - playsound(src, 'sound/weapons/resonator_blast.ogg', 50, TRUE) - playsound(src, 'sound/weapons/genhit2.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/resonator_blast.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit2.ogg', 50, TRUE) if(!QDELETED(target)) var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 335e7b3d5fbd7..a008acedb6d1c 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -305,7 +305,7 @@ visible_message(span_boldnotice("[src] becomes fully charged!")) powered = TRUE SEND_SIGNAL(src, COMSIG_PUZZLE_COMPLETED) - playsound(src, 'sound/machines/synth_yes.ogg', 100, TRUE) + playsound(src, 'sound/machines/synth/synth_yes.ogg', 100, TRUE) // // literally just buttons @@ -363,7 +363,7 @@ used = single_use update_icon_state() visible_message(span_notice("[user] presses a button on [src]."), span_notice("You press a button on [src].")) - playsound(src, 'sound/machines/terminal_button07.ogg', 45, TRUE) + playsound(src, 'sound/machines/terminal/terminal_button07.ogg', 45, TRUE) on_puzzle_complete() MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/button, 32) @@ -386,7 +386,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/button, 32) return used = TRUE update_icon_state() - playsound(src, 'sound/machines/beep.ogg', 45, TRUE) + playsound(src, 'sound/machines/beep/beep.ogg', 45, TRUE) on_puzzle_complete() MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/keycardpad, 32) @@ -419,11 +419,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/keycardpad, 32) var/correct = pass_input == password balloon_alert_to_viewers("[correct ? "correct" : "wrong"] password[correct ? "" : "!"]") if(!correct) - playsound(src, 'sound/machines/buzz-sigh.ogg', 45, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 45, TRUE) return used = single_use update_icon_state() - playsound(src, 'sound/machines/terminal_button07.ogg', 45, TRUE) + playsound(src, 'sound/machines/terminal/terminal_button07.ogg', 45, TRUE) on_puzzle_complete() MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/password, 32) diff --git a/code/game/objects/items/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm index 669d7e3bab6a6..961e0fff88afd 100644 --- a/code/game/objects/items/rcd/RCD.dm +++ b/code/game/objects/items/rcd/RCD.dm @@ -16,8 +16,8 @@ item_flags = NO_MAT_REDEMPTION | NOBLUDGEON has_ammobar = TRUE actions_types = list(/datum/action/item_action/rcd_scan) - drop_sound = 'sound/items/handling/rcd_drop.ogg' - pickup_sound = 'sound/items/handling/rcd_pickup.ogg' + drop_sound = 'sound/items/handling/tools/rcd_drop.ogg' + pickup_sound = 'sound/items/handling/tools/rcd_pickup.ogg' sound_vary = TRUE /// main category of currently selected design[Structures, Airlocks, Airlock Access] @@ -80,10 +80,6 @@ GLOB.rcd_list -= src . = ..() -/obj/item/construction/rcd/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - playsound(src, SFX_TOOL_SWITCH, 20, TRUE) - /obj/item/construction/rcd/ui_action_click(mob/user, actiontype) if (!COOLDOWN_FINISHED(src, destructive_scan_cooldown)) to_chat(user, span_warning("[src] lets out a low buzz.")) @@ -130,7 +126,7 @@ var/atom/movable/rcd_structure = rcd_results["[RCD_DESIGN_PATH]"] /** *For anything that does not go an a wall we have to make sure that turf is clear for us to put the structure on it - *If we are just trying to destory something then this check is not nessassary + *If we are just trying to destroy something then this check is not necessary *RCD_WALLFRAME is also returned as the rcd_mode when upgrading apc, airalarm, firealarm using simple circuits upgrade */ if(rcd_mode != RCD_WALLFRAME && rcd_mode != RCD_DECONSTRUCT) @@ -146,7 +142,7 @@ 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. + else //for directional windows we ignore other directional windows as they can be in different directions on the turf. structures_to_ignore = list(/obj/structure/window) //check if we can build our window on the grill @@ -156,7 +152,7 @@ return FALSE /** - * if we are trying to create plating on turf which is not a proper floor then dont check for objects on top of the turf just allow that turf to be converted into plating. e.g. create plating beneath a player or underneath a machine frame/any dense object + * if we are trying to create plating on turf which is not a proper floor then don't check for objects on top of the turf just allow that turf to be converted into plating. e.g. create plating beneath a player or underneath a machine frame/any dense object * if we are trying to finish a wall girder then let it finish then make sure no one/nothing is stuck in the girder */ else if(rcd_mode == RCD_TURF && rcd_structure == /turf/open/floor/plating/rcd && (!istype(target_turf, /turf/open/floor) || istype(target, /obj/structure/girder))) @@ -188,10 +184,10 @@ ignored_types = list(/obj/structure/window) //if we are trying to create grills/windoors we can go ahead and further ignore other windoors on the turf if(rcd_mode == RCD_WINDOWGRILLE || (rcd_mode == RCD_AIRLOCK && ispath(rcd_structure, /obj/machinery/door/window))) - //only ignore mobs if we are trying to create windoors and not grills. We dont want to drop a grill on top of somebody + //only ignore mobs if we are trying to create windoors and not grills. We don't want to drop a grill on top of somebody ignore_mobs = rcd_mode == RCD_AIRLOCK ignored_types += /obj/machinery/door/window - //if we are trying to create full airlock doors then we do the regular checks and make sure we have the full space for them. i.e. dont ignore anything dense on the turf + //if we are trying to create full airlock doors then we do the regular checks and make sure we have the full space for them. i.e. don't ignore anything dense on the turf else if(rcd_mode == RCD_AIRLOCK) ignored_types = list() @@ -211,15 +207,15 @@ * * [mob][user]- the user building this structure */ /obj/item/construction/rcd/proc/rcd_create(atom/target, mob/user) - //straight up cant touch this + var/list/rcd_results = target.rcd_vals(user, src) // does this atom allow for rcd actions? + if(!rcd_results) // nope + return NONE + + //straight up can't touch this if(mode == RCD_DECONSTRUCT && (target.resistance_flags & INDESTRUCTIBLE)) balloon_alert(user, "too durable!") - return + return ITEM_INTERACT_BLOCKING - //does this atom allow for rcd actions? - var/list/rcd_results = target.rcd_vals(user, src) - if(!rcd_results) - return FALSE rcd_results["[RCD_DESIGN_MODE]"] = mode rcd_results["[RCD_DESIGN_PATH]"] = rcd_design_path @@ -241,6 +237,7 @@ log_tool("[key_name(user)] used [src] to [rcd_results["[RCD_DESIGN_MODE]"] != RCD_DECONSTRUCT ? "construct [initial(design_path.name)]([design_path])" : "deconstruct [target_name]([target_path])"] at [location]") current_active_effects -= 1 + return ITEM_INTERACT_SUCCESS /** * Internal proc which creates the rcd effects & creates the structure @@ -348,6 +345,7 @@ return data /obj/item/construction/rcd/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + playsound(src, SFX_TOOL_SWITCH, 20, TRUE) switch(action) if("root_category") @@ -371,10 +369,10 @@ * The advantage of organizing designs into categories is that * You can ignore an complete category if the design disk upgrade for that category isn't installed. */ - //You can't select designs from the Machines category if you dont have the frames upgrade installed. + //You can't select designs from the Machines category if you don't have the frames upgrade installed. if(category == "Machines" && !(upgrade & RCD_UPGRADE_FRAMES)) return TRUE - //You can't select designs from the Furniture category if you dont have the furnishing upgrade installed. + //You can't select designs from the Furniture category if you don't have the furnishing upgrade installed. if(category == "Furniture" && !(upgrade & RCD_UPGRADE_FURNISHING)) return TRUE @@ -404,37 +402,32 @@ return . mode = construction_mode - rcd_create(interacting_with, user) - return ITEM_INTERACT_SUCCESS + return rcd_create(interacting_with, user) /obj/item/construction/rcd/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!ranged || !range_check(interacting_with, user)) return ITEM_INTERACT_BLOCKING mode = construction_mode - rcd_create(interacting_with, user) - return ITEM_INTERACT_SUCCESS + return rcd_create(interacting_with, user) /obj/item/construction/rcd/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) mode = RCD_DECONSTRUCT - rcd_create(interacting_with, user) - return ITEM_INTERACT_SUCCESS + return rcd_create(interacting_with, user) /obj/item/construction/rcd/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) if(!ranged || !range_check(interacting_with, user)) return ITEM_INTERACT_BLOCKING mode = RCD_DECONSTRUCT - rcd_create(interacting_with, user) - return ITEM_INTERACT_SUCCESS + return rcd_create(interacting_with, user) /obj/item/construction/rcd/handle_openspace_click(turf/target, mob/user, list/modifiers) interact_with_atom(target, user, modifiers) /obj/item/construction/rcd/proc/detonate_pulse() - audible_message("[src] begins to vibrate and \ - buzz loudly!","[src] begins \ - vibrating violently!") + audible_message(span_danger("[src] begins to vibrate and buzz loudly!"), \ + span_danger("[src] begins vibrating violently!")) // 5 seconds to get rid of it addtimer(CALLBACK(src, PROC_REF(detonate_pulse_explode)), 5 SECONDS) diff --git a/code/game/objects/items/rcd/RHD.dm b/code/game/objects/items/rcd/RHD.dm index 64179a81b5fb4..8007fac4dd4c7 100644 --- a/code/game/objects/items/rcd/RHD.dm +++ b/code/game/objects/items/rcd/RHD.dm @@ -71,7 +71,7 @@ return silo_mats.mat_container.get_material_amount(/datum/material/iron) / SILO_USE_AMOUNT return 0 -///returns local matter units available. overriden by rcd borg to return power units available +///returns local matter units available. overridden by rcd borg to return power units available /obj/item/construction/proc/get_matter(mob/user) return matter @@ -292,7 +292,7 @@ /obj/item/construction/proc/check_menu(mob/living/user, remote_anchor) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE if(remote_anchor && user.remote_control != remote_anchor) return FALSE diff --git a/code/game/objects/items/rcd/RLD.dm b/code/game/objects/items/rcd/RLD.dm index 6156cd0ee73e6..2a99f535f42b5 100644 --- a/code/game/objects/items/rcd/RLD.dm +++ b/code/game/objects/items/rcd/RLD.dm @@ -166,7 +166,7 @@ return ITEM_INTERACT_BLOCKING activate() var/obj/machinery/light/L = new /obj/machinery/light(get_turf(winner)) - L.setDir(get_dir(interacting_with, winner)) + L.setDir(get_dir(winner, interacting_with)) L.color = color_choice L.set_light_color(color_choice) return ITEM_INTERACT_SUCCESS diff --git a/code/game/objects/items/rcd/RPD.dm b/code/game/objects/items/rcd/RPD.dm index 642bbc70623fb..07db9978e3e09 100644 --- a/code/game/objects/items/rcd/RPD.dm +++ b/code/game/objects/items/rcd/RPD.dm @@ -59,6 +59,8 @@ GLOBAL_LIST_INIT(disposal_pipe_recipes, list( new /datum/pipe_info/disposal("Sort Junction", /obj/structure/disposalpipe/sorting/mail, PIPE_TRIN_M), new /datum/pipe_info/disposal("Rotator", /obj/structure/disposalpipe/rotator, PIPE_ONEDIR_FLIPPABLE), new /datum/pipe_info/disposal("Trunk", /obj/structure/disposalpipe/trunk), + new /datum/pipe_info/disposal("Down Turn", /obj/structure/disposalpipe/trunk/multiz/down), + new /datum/pipe_info/disposal("Up Turn", /obj/structure/disposalpipe/trunk/multiz), new /datum/pipe_info/disposal("Bin", /obj/machinery/disposal/bin, PIPE_ONEDIR), new /datum/pipe_info/disposal("Outlet", /obj/structure/disposaloutlet), new /datum/pipe_info/disposal("Chute", /obj/machinery/disposal/delivery_chute), @@ -183,8 +185,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*37.5, /datum/material/glass=SHEET_MATERIAL_AMOUNT*18.75) armor_type = /datum/armor/item_pipe_dispenser resistance_flags = FIRE_PROOF - drop_sound = 'sound/items/handling/rpd_drop.ogg' - pickup_sound = 'sound/items/handling/rpd_pickup.ogg' + drop_sound = 'sound/items/handling/tools/rpd_drop.ogg' + pickup_sound = 'sound/items/handling/tools/rpd_pickup.ogg' sound_vary = TRUE ///Sparks system used when changing device in the UI var/datum/effect_system/spark_spread/spark_system @@ -361,12 +363,13 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( data["init_directions"] = init_directions return data -/obj/item/pipe_dispenser/ui_act(action, params) +/obj/item/pipe_dispenser/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - playsound(src, SFX_TOOL_SWITCH, 20, TRUE) if(.) return + playsound(src, SFX_TOOL_SWITCH, 20, TRUE) + var/playeffect = TRUE switch(action) if("color") @@ -686,7 +689,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( if(multi_layer) balloon_alert(source_mob, "turn off multi layer!") return - if(source_mob.incapacitated(IGNORE_RESTRAINTS|IGNORE_STASIS)) + if(INCAPACITATED_IGNORING(source_mob, INCAPABLE_RESTRAINTS|INCAPABLE_STASIS)) return if(source_mob.get_active_held_item() != src) return diff --git a/code/game/objects/items/rcd/RPLD.dm b/code/game/objects/items/rcd/RPLD.dm index d45ae8cf1a4f9..a5fade8381c9e 100644 --- a/code/game/objects/items/rcd/RPLD.dm +++ b/code/game/objects/items/rcd/RPLD.dm @@ -12,6 +12,9 @@ banned_upgrades = RCD_ALL_UPGRADES & ~RCD_UPGRADE_SILO_LINK matter = 200 max_matter = 200 + drop_sound = 'sound/items/handling/tools/rcd_drop.ogg' + pickup_sound = 'sound/items/handling/tools/rcd_pickup.ogg' + sound_vary = TRUE ///category of design selected var/selected_category @@ -159,11 +162,9 @@ return data -/obj/item/construction/plumbing/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() +/obj/item/construction/plumbing/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state) playsound(src, SFX_TOOL_SWITCH, 20, TRUE) -/obj/item/construction/plumbing/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("color") var/color = params["paint_color"] @@ -294,7 +295,7 @@ /obj/item/construction/plumbing/proc/mouse_wheeled(mob/source, atom/A, delta_x, delta_y, params) SIGNAL_HANDLER - if(source.incapacitated(IGNORE_RESTRAINTS|IGNORE_STASIS)) + if(INCAPACITATED_IGNORING(source, INCAPABLE_RESTRAINTS|INCAPABLE_STASIS)) return if(delta_y == 0) return diff --git a/code/game/objects/items/rcd/RSF.dm b/code/game/objects/items/rcd/RSF.dm index ee85994143a00..e3d27620ce9ff 100644 --- a/code/game/objects/items/rcd/RSF.dm +++ b/code/game/objects/items/rcd/RSF.dm @@ -121,7 +121,7 @@ RSF return radial_list /obj/item/rsf/proc/check_menu(mob/user) - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE diff --git a/code/game/objects/items/rcd/RTD.dm b/code/game/objects/items/rcd/RTD.dm index 45b9c9e3687dd..1925b3e6ffc66 100644 --- a/code/game/objects/items/rcd/RTD.dm +++ b/code/game/objects/items/rcd/RTD.dm @@ -24,6 +24,9 @@ item_flags = NO_MAT_REDEMPTION | NOBLUDGEON has_ammobar = TRUE banned_upgrades = RCD_ALL_UPGRADES & ~RCD_UPGRADE_SILO_LINK + drop_sound = 'sound/items/handling/tools/rcd_drop.ogg' + pickup_sound = 'sound/items/handling/tools/rcd_pickup.ogg' + sound_vary = TRUE /// main category for tile design var/root_category = "Conventional" @@ -195,6 +198,7 @@ return data /obj/item/construction/rtd/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + playsound(src, SFX_TOOL_SWITCH, 20, TRUE) var/floor_designs = GLOB.floor_designs switch(action) diff --git a/code/game/objects/items/rcd/RWD.dm b/code/game/objects/items/rcd/RWD.dm index 0ee29e87a352f..bafbfdc5d8dd9 100644 --- a/code/game/objects/items/rcd/RWD.dm +++ b/code/game/objects/items/rcd/RWD.dm @@ -152,7 +152,7 @@ if(!ISADVANCEDTOOLUSER(user)) to_chat(user, span_warning("You don't have the dexterity to do this!")) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index 63e1c19c64abe..72a4706e6a456 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -75,7 +75,7 @@ inspired_human.AdjustImmobilized(-40) inspired_human.AdjustParalyzed(-40) inspired_human.AdjustUnconscious(-40) - playsound(inspired_human, 'sound/magic/staff_healing.ogg', 25, FALSE) + playsound(inspired_human, 'sound/effects/magic/staff_healing.ogg', 25, FALSE) /obj/item/banner/proc/special_inspiration(mob/living/carbon/human/H) //Any banner-specific inspiration effects go here return @@ -343,10 +343,12 @@ var/staffcooldown = 0 var/staffwait = 30 -/obj/item/godstaff/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/godstaff/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(SHOULD_SKIP_INTERACTION(interacting_with, src, user)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/godstaff/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(staffcooldown + staffwait > world.time) return ITEM_INTERACT_BLOCKING diff --git a/code/game/objects/items/robot/ai_upgrades.dm b/code/game/objects/items/robot/ai_upgrades.dm index f6357b229efb9..b630a3b8a4231 100644 --- a/code/game/objects/items/robot/ai_upgrades.dm +++ b/code/game/objects/items/robot/ai_upgrades.dm @@ -1,4 +1,45 @@ ///AI Upgrades +/obj/item/aiupgrade + name = "ai upgrade disk" + desc = "You really shouldn't be seeing this" + icon = 'icons/obj/devices/circuitry_n_data.dmi' + icon_state = "datadisk3" + ///The upgrade that will be applied to the AI when installed + var/datum/ai_module/to_gift = /datum/ai_module + +/obj/item/aiupgrade/pre_attack(atom/target, mob/living/user, proximity) + if(!proximity) + return ..() + if(!isAI(target)) + return ..() + var/mob/living/silicon/ai/AI = target + var/datum/action/innate/ai/action = locate(to_gift.power_type) in AI.actions + var/datum/ai_module/gifted_ability = new to_gift + if(!to_gift.upgrade) + if(!action) + var/ability = to_gift.power_type + var/datum/action/gifted_action = new ability + gifted_action.Grant(AI) + else if(gifted_ability.one_purchase) + to_chat(user, "[AI] already has an [src] installed!") + return + else + action.uses += initial(action.uses) + action.desc = "[initial(action.desc)] It has [action.uses] use\s remaining." + action.build_all_button_icons() + else + if(!action) + gifted_ability.upgrade(AI) + if(gifted_ability.unlock_text) + to_chat(AI, gifted_ability.unlock_text) + if(gifted_ability.unlock_sound) + AI.playsound_local(AI, gifted_ability.unlock_sound, 50, 0) + update_static_data(AI) + to_chat(user, span_notice("You install [src], upgrading [AI].")) + to_chat(AI, span_userdanger("[user] has upgraded you with [src]!")) + user.log_message("has upgraded [key_name(AI)] with a [src].", LOG_GAME) + qdel(src) + return TRUE //Malf Picker @@ -34,28 +75,21 @@ //Lipreading -/obj/item/surveillance_upgrade +/obj/item/aiupgrade/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/devices/circuitry_n_data.dmi' - icon_state = "datadisk3" + to_gift = /datum/ai_module/malf/upgrade/eavesdrop -/obj/item/surveillance_upgrade/Initialize(mapload) +/obj/item/aiupgrade/surveillance_upgrade/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_CONTRABAND, INNATE_TRAIT) -/obj/item/surveillance_upgrade/pre_attack(atom/A, mob/living/user, proximity) - if(!proximity) - return ..() - if(!isAI(A)) - return ..() - var/mob/living/silicon/ai/AI = A - if(AI.eyeobj) - AI.eyeobj.relay_speech = TRUE - to_chat(AI, span_userdanger("[user] has upgraded you with surveillance software!")) - to_chat(AI, "Via a combination of hidden microphones and lip reading software, you are able to use your cameras to listen in on conversations.") - to_chat(user, span_notice("You upgrade [AI]. [src] is consumed in the process.")) - user.log_message("has upgraded [key_name(AI)] with a [src].", LOG_GAME) - message_admins("[ADMIN_LOOKUPFLW(user)] has upgraded [ADMIN_LOOKUPFLW(AI)] with a [src].") - qdel(src) - return TRUE + +/obj/item/aiupgrade/power_transfer + name = "power transfer upgrade" + desc = "A legal upgrade that allows an artificial intelligence to directly provide power to APCs from a distance" + to_gift = /datum/ai_module/power_apc + + + + diff --git a/code/game/objects/items/robot/items/food.dm b/code/game/objects/items/robot/items/food.dm index b7b018362c73c..3dd15b508cc97 100644 --- a/code/game/objects/items/robot/items/food.dm +++ b/code/game/objects/items/robot/items/food.dm @@ -112,7 +112,7 @@ gumball = new /obj/item/ammo_casing/gumball(src) gumball.loaded_projectile.color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) - playsound(src.loc, 'sound/weapons/bulletflyby3.ogg', 50, TRUE) + playsound(src.loc, 'sound/items/weapons/bulletflyby3.ogg', 50, TRUE) gumball.fire_casing(target, user, params, 0, 0, null, 0, src) user.visible_message(span_warning("[user] shoots a high-velocity gumball at [target]!")) check_amount() diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm index a98d13770b7ab..385baa0381ae9 100644 --- a/code/game/objects/items/robot/items/generic.dm +++ b/code/game/objects/items/robot/items/generic.dm @@ -30,7 +30,7 @@ if(ishuman(attacked_mob)) var/mob/living/carbon/human/human = attacked_mob if(human.check_block(src, 0, "[attacked_mob]'s [name]", MELEE_ATTACK)) - playsound(attacked_mob, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(attacked_mob, 'sound/items/weapons/genhit.ogg', 50, TRUE) return FALSE if(iscyborg(user)) var/mob/living/silicon/robot/robot_user = user @@ -54,7 +54,7 @@ span_userdanger("[user] prods you with [src]!"), ) - playsound(loc, 'sound/weapons/egloves.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/egloves.ogg', 50, TRUE, -1) cooldown_check = world.time + cooldown log_combat(user, attacked_mob, "stunned", src, "(Combat mode: [user.combat_mode ? "On" : "Off"])") @@ -88,9 +88,9 @@ mode = HUG_MODE_NICE switch(mode) if(HUG_MODE_NICE) - to_chat(user, "Power reset. Hugs!") + to_chat(user, span_infoplain("Power reset. Hugs!")) if(HUG_MODE_HUG) - to_chat(user, "Power increased!") + to_chat(user, span_infoplain("Power increased!")) if(HUG_MODE_SHOCK) to_chat(user, "BZZT. Electrifying arms...") if(HUG_MODE_CRUSH) @@ -114,7 +114,7 @@ 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) + playsound(loc, 'sound/items/weapons/tap.ogg', 50, TRUE, -1) else if(ishuman(attacked_mob)) if(user.body_position == LYING_DOWN) user.visible_message( @@ -133,7 +133,7 @@ span_notice("[user] pets [attacked_mob]!"), span_notice("You pet [attacked_mob]!"), ) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) if(HUG_MODE_HUG) if(ishuman(attacked_mob)) attacked_mob.adjust_status_effects_on_shake_up() @@ -160,7 +160,7 @@ 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) + playsound(loc, 'sound/items/weapons/tap.ogg', 50, TRUE, -1) if(HUG_MODE_SHOCK) if (!COOLDOWN_FINISHED(src, shock_cooldown)) return @@ -184,7 +184,7 @@ 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) + playsound(loc, 'sound/effects/sparks/sparks2.ogg', 50, TRUE, -1) user.cell.use(0.5 * STANDARD_CELL_CHARGE, force = TRUE) COOLDOWN_START(src, shock_cooldown, HUG_SHOCK_COOLDOWN) if(HUG_MODE_CRUSH) @@ -200,7 +200,7 @@ span_userdanger("[user] crushes [attacked_mob]!"), span_danger("You crush [attacked_mob]!"), ) - playsound(loc, 'sound/weapons/smash.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/smash.ogg', 50, TRUE, -1) attacked_mob.adjustBruteLoss(15) user.cell.use(0.3 * STANDARD_CELL_CHARGE, force = TRUE) COOLDOWN_START(src, crush_cooldown, HUG_CRUSH_COOLDOWN) @@ -378,7 +378,7 @@ carbon.adjust_confusion(6 SECONDS) audible_message("HUMAN HARM") - playsound(get_turf(src), 'sound/ai/harmalarm.ogg', 70, 3) + playsound(get_turf(src), 'sound/mobs/non-humanoids/cyborg/harmalarm.ogg', 70, 3) COOLDOWN_START(src, alarm_cooldown, HARM_ALARM_SAFETY_COOLDOWN) user.log_message("used a Cyborg Harm Alarm", LOG_ATTACK) if(iscyborg(user)) diff --git a/code/game/objects/items/robot/items/hypo.dm b/code/game/objects/items/robot/items/hypo.dm index 1e75e22162a36..94d0a7955e87f 100644 --- a/code/game/objects/items/robot/items/hypo.dm +++ b/code/game/objects/items/robot/items/hypo.dm @@ -225,7 +225,7 @@ /obj/item/reagent_containers/borghypo/attack_self(mob/user) ui_interact(user) -/obj/item/reagent_containers/borghypo/ui_act(action, params) +/obj/item/reagent_containers/borghypo/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -485,8 +485,8 @@ SKYRAT EDIT REMOVAL END */ /obj/item/reagent_containers/borghypo/borgshaker/hacked name = "cyborg shaker" desc = "Will mix drinks that knock them dead." - icon = 'icons/obj/drinks/mixed_drinks.dmi' icon_state = "threemileislandglass" + icon = 'icons/obj/drinks/mixed_drinks.dmi' tgui_theme = "syndicate" dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP default_reagent_types = HACKED_SERVICE_REAGENTS diff --git a/code/game/objects/items/robot/items/tools.dm b/code/game/objects/items/robot/items/tools.dm index f16cd0844901d..beaca11b695b9 100644 --- a/code/game/objects/items/robot/items/tools.dm +++ b/code/game/objects/items/robot/items/tools.dm @@ -9,8 +9,8 @@ resistance_flags = FIRE_PROOF //if it's channeling a cyborg's excess heat, it's probably fireproof force = 5 damtype = BURN - usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg') //the usesounds of a lit welder - hitsound = 'sound/items/welder.ogg' //the hitsound of a lit welder + usesound = list('sound/items/tools/welder.ogg', 'sound/items/tools/welder2.ogg') //the usesounds of a lit welder + hitsound = 'sound/items/tools/welder.ogg' //the hitsound of a lit welder //Peacekeeper Cyborg Projectile Dampenening Field /obj/item/borg/projectile_dampen @@ -247,7 +247,7 @@ if(initial(tool.tool_behaviour) == new_tool_behaviour) reference = tool update_appearance(UPDATE_ICON_STATE) - playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/change_jaws.ogg', 50, TRUE) break /obj/item/borg/cyborg_omnitool/update_icon_state() @@ -267,7 +267,7 @@ /obj/item/borg/cyborg_omnitool/proc/set_upgraded(upgrade) upgraded = upgraded - playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/change_jaws.ogg', 50, TRUE) /obj/item/borg/cyborg_omnitool/medical name = "surgical omni-toolset" diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 7e954fbcec5cd..ce350ecb788f8 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -121,14 +121,11 @@ if(chest) chest.forceMove(drop_to) - new /obj/item/stack/cable_coil(drop_to, 1) - chest.wired = FALSE - chest.cell?.forceMove(drop_to) + chest.drop_organs() if(head) - head.flash1?.forceMove(drop_to) - head.flash2?.forceMove(drop_to) head.forceMove(drop_to) + head.drop_organs() /obj/item/robot_suit/proc/put_in_hand_or_drop(mob/living/user, obj/item/I) //normal put_in_hands() drops the item ontop of the player, this drops it at the suit's loc if(!user.put_in_hands(I)) @@ -322,7 +319,7 @@ // This canonizes that MMI'd cyborgs have memories of their previous life brainmob.add_mob_memory(/datum/memory/was_cyborged, protagonist = brainmob.mind, deuteragonist = user) brainmob.mind.transfer_to(O) - playsound(O.loc, 'sound/voice/liveagain.ogg', 75, TRUE) + playsound(O.loc, 'sound/mobs/non-humanoids/cyborg/liveagain.ogg', 75, TRUE) if(O.mind && O.mind.special_role) to_chat(O, span_userdanger("You have been robotized!")) @@ -409,7 +406,7 @@ data["lawsync"] = lawsync return data -/obj/item/robot_suit/ui_act(action, list/params) +/obj/item/robot_suit/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 36365288a1c3c..e4afe968fa182 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -218,6 +218,17 @@ items_to_add = list(/obj/item/plunger/cyborg) +/obj/item/borg/upgrade/high_capacity_light_replacer + name = "janitor cyborg high capacity replacer" + desc = "Increases the amount of lights that can be stored in the replacer." + icon_state = "module_janitor" + require_model = TRUE + model_type = list(/obj/item/robot_model/janitor) + model_flags = BORG_MODEL_JANITOR + + items_to_add = list (/obj/item/lightreplacer/cyborg/advanced) + items_to_remove = list(/obj/item/lightreplacer/cyborg) + /obj/item/borg/upgrade/syndicate name = "illegal equipment module" desc = "Unlocks the hidden, deadlier functions of a cyborg." @@ -588,11 +599,7 @@ return FALSE // SKYRAT EDIT ADDITION BEGIN - var/resize_amount = 1.25 - if(TRAIT_R_WIDE in borg.model.model_features) - resize_amount = 1.25 - if(TRAIT_R_TALL in borg.model.model_features) - resize_amount = 1.05 + var/resize_amount = 1.6 // SKYRAT EDIT ADDITION END ADD_TRAIT(borg, TRAIT_NO_TRANSFORM, REF(src)) var/prev_lockcharge = borg.lockcharge @@ -603,7 +610,7 @@ smoke.start() sleep(0.2 SECONDS) for(var/i in 1 to 4) - playsound(borg, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, TRUE, -1) + playsound(borg, pick('sound/items/tools/drill_use.ogg', 'sound/items/tools/jaws_cut.ogg', 'sound/items/tools/jaws_pry.ogg', 'sound/items/tools/welder.ogg', 'sound/items/tools/ratchet.ogg'), 80, TRUE, -1) sleep(1.2 SECONDS) if(!prev_lockcharge) borg.SetLockdown(FALSE) @@ -618,7 +625,7 @@ return . if (borg.hasExpanded) borg.hasExpanded = FALSE - borg.update_transform(0.8) // SKYRAT EDIT CHANGE - ORIGINAL: borg.update_transform(0.5) + borg.update_transform(0.625) // SKYRAT EDIT CHANGE - ORIGINAL: borg.update_transform(0.5) /obj/item/borg/upgrade/rped name = "engineering cyborg RPED" @@ -824,7 +831,7 @@ if(borgo.mind) borgo.mind.grab_ghost() - playsound(loc, 'sound/voice/liveagain.ogg', 75, TRUE) + playsound(loc, 'sound/mobs/non-humanoids/cyborg/liveagain.ogg', 75, TRUE) else playsound(loc, 'sound/machines/ping.ogg', 75, TRUE) diff --git a/code/game/objects/items/scrolls.dm b/code/game/objects/items/scrolls.dm index 65d9000728d53..3fea8376eb3d2 100644 --- a/code/game/objects/items/scrolls.dm +++ b/code/game/objects/items/scrolls.dm @@ -55,7 +55,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/human_user = user - if(human_user.incapacitated() || !human_user.is_holding(src)) + if(human_user.incapacitated || !human_user.is_holding(src)) return var/datum/action/cooldown/spell/teleport/area_teleport/wizard/scroll/teleport = locate() in actions if(!teleport) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index c980fe0dbb359..acab30562cdaf 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -15,7 +15,7 @@ attack_verb_continuous = list("shoves", "bashes") attack_verb_simple = list("shove", "bash") armor_type = /datum/armor/item_shield - block_sound = 'sound/weapons/block_shield.ogg' + block_sound = 'sound/items/weapons/block_shield.ogg' /// makes beam projectiles pass through the shield var/transparent = FALSE /// if the shield will break by sustaining damage @@ -26,6 +26,10 @@ var/shield_break_sound = 'sound/effects/bang.ogg' /// baton bash cooldown COOLDOWN_DECLARE(baton_bash) + /// is shield bashable? + var/is_bashable = TRUE + /// sound when a shield is bashed + var/shield_bash_sound = 'sound/effects/shieldbash.ogg' /datum/armor/item_shield melee = 50 @@ -61,6 +65,19 @@ if(0 to 25) . += span_warning("It's falling apart!") +/obj/item/shield/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking) + . = ..() + if(. & ITEM_INTERACT_ANY_BLOCKER) + return . + if(!istype(tool, /obj/item/melee/baton) || !is_bashable) + return . + if(!COOLDOWN_FINISHED(src, baton_bash)) + return ITEM_INTERACT_BLOCKING + user.visible_message(span_warning("[user] bashes [src] with [tool]!")) + playsound(src, shield_bash_sound, 50, TRUE) + COOLDOWN_START(src, baton_bash, BATON_BASH_COOLDOWN) + return ITEM_INTERACT_SUCCESS + /obj/item/shield/proc/on_shield_block(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) if(!breakable_by_damage || (damage_type != BRUTE && damage_type != BURN)) return TRUE @@ -146,11 +163,11 @@ custom_materials = list(/datum/material/glass= SHEET_MATERIAL_AMOUNT * 3.75, /datum/material/iron= HALF_SHEET_MATERIAL_AMOUNT) transparent = TRUE max_integrity = 75 - shield_break_sound = 'sound/effects/glassbr3.ogg' + shield_break_sound = 'sound/effects/glass/glassbr3.ogg' shield_break_leftover = /obj/item/shard armor_type = /datum/armor/item_shield/riot - pickup_sound = 'sound/items/plastic_shield_pick_up.ogg' - drop_sound = 'sound/items/plastic_shield_drop.ogg' + pickup_sound = 'sound/items/handling/shield/plastic_shield_pick_up.ogg' + drop_sound = 'sound/items/handling/shield/plastic_shield_drop.ogg' /obj/item/shield/riot/Initialize(mapload) . = ..() @@ -162,13 +179,6 @@ ) /obj/item/shield/riot/attackby(obj/item/attackby_item, mob/user, params) - if(istype(attackby_item, /obj/item/melee/baton)) - if(!COOLDOWN_FINISHED(src, baton_bash)) - return - user.visible_message(span_warning("[user] bashes [src] with [attackby_item]!")) - playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, TRUE) - COOLDOWN_START(src, baton_bash, BATON_BASH_COOLDOWN) - return if(istype(attackby_item, /obj/item/stack/sheet/mineral/titanium)) if (atom_integrity >= max_integrity) to_chat(user, span_warning("[src] is already in perfect condition.")) @@ -284,7 +294,7 @@ /obj/item/shield/energy 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." + desc = "A hardlight shield capable of reflecting blocked energy projectiles, as well as providing well-rounded defense from most all other attacks." icon_state = "eshield" inhand_icon_state = "eshield" w_class = WEIGHT_CLASS_TINY @@ -295,7 +305,9 @@ throwforce = 3 throw_speed = 3 breakable_by_damage = FALSE - block_sound = 'sound/weapons/block_blade.ogg' + block_sound = 'sound/items/weapons/block_blade.ogg' + is_bashable = FALSE // Gotta wait till it activates y'know + shield_bash_sound = 'sound/effects/energyshieldbash.ogg' /// Force of the shield when active. var/active_force = 10 /// Throwforce of the shield when active. @@ -343,7 +355,8 @@ if(user) balloon_alert(user, active ? "activated" : "deactivated") - playsound(src, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 35, TRUE) + playsound(src, active ? 'sound/items/weapons/saberon.ogg' : 'sound/items/weapons/saberoff.ogg', 35, TRUE) + is_bashable = !is_bashable return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/shield/energy/proc/can_disarm_attack(datum/source, mob/living/victim, mob/living/user, send_message = TRUE) @@ -355,7 +368,7 @@ /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. \ + desc = "A hardlight shield capable of reflecting all energy projectiles, as well as providing well-rounded defense from most all other attacks. \ Often employed by Nanotrasen deathsquads." icon_state = "advanced_eshield" inhand_icon_state = "advanced_eshield" @@ -407,7 +420,7 @@ slot_flags = active ? ITEM_SLOT_BACK : null if(user) balloon_alert(user, active ? "extended" : "collapsed") - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/shield/riot/tele/proc/can_disarm_attack(datum/source, mob/living/victim, mob/living/user, send_message = TRUE) @@ -459,6 +472,6 @@ max_integrity = 35 shield_break_leftover = /obj/item/stack/rods/two armor_type = /datum/armor/item_shield/improvised - block_sound = 'sound/items/trayhit2.ogg' + block_sound = 'sound/items/trayhit/trayhit2.ogg' #undef BATON_BASH_COOLDOWN diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index 3fe92227e60c0..ebc22e1338c5a 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -15,7 +15,7 @@ embed_type = /datum/embed_data/spear armour_penetration = 10 custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass= HALF_SHEET_MATERIAL_AMOUNT * 2) - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("attacks", "pokes", "jabs", "tears", "lacerates", "gores") attack_verb_simple = list("attack", "poke", "jab", "tear", "lacerate", "gore") sharpness = SHARP_EDGED // i know the whole point of spears is that they're pointy, but edged is more devastating at the moment so @@ -174,10 +174,8 @@ return if(target.resistance_flags & INDESTRUCTIBLE) //due to the lich incident of 2021, embedding grenades inside of indestructible structures is forbidden return - if(ismob(target)) - var/mob/mob_target = target - if(mob_target.status_flags & GODMODE) //no embedding grenade phylacteries inside of ghost poly either - return + if(HAS_TRAIT(target, TRAIT_GODMODE)) + return if(iseffect(target)) //and no accidentally wasting your moment of glory on graffiti return user.say("[war_cry]", forced="spear warcry") diff --git a/code/game/objects/items/stacks/golem_food/golem_hand_actions.dm b/code/game/objects/items/stacks/golem_food/golem_hand_actions.dm index e4b65e033975e..00606ba3e6d77 100644 --- a/code/game/objects/items/stacks/golem_food/golem_hand_actions.dm +++ b/code/game/objects/items/stacks/golem_food/golem_hand_actions.dm @@ -35,7 +35,7 @@ qdel(src) return ITEM_INTERACT_BLOCKING - playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/sonic_jackhammer.ogg', 50, TRUE) held_gibtonite.forceMove(get_turf(src)) held_gibtonite.det_time = 2 SECONDS held_gibtonite.GibtoniteReaction(user, "A [src] has targeted [interacting_with] with a thrown and primed") 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 f54a83a8d8ec5..db77c63d375f4 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 @@ -215,7 +215,7 @@ /// Shoot a beam at the target atom /datum/status_effect/golem/plasma/proc/zap_effect(atom/target) owner.Beam(target, icon_state = "lightning[rand(1,12)]", time = 0.5 SECONDS) - playsound(owner, 'sound/magic/lightningshock.ogg', vol = 50, vary = TRUE) + playsound(owner, 'sound/effects/magic/lightningshock.ogg', vol = 50, vary = TRUE) /// Makes you spaceproof /datum/status_effect/golem/plasteel @@ -298,8 +298,8 @@ arm.unarmed_attack_verbs = list("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' + arm.unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + arm.unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' RegisterSignal(arm, COMSIG_QDELETING, PROC_REF(on_arm_destroyed)) LAZYADD(modified_arms, arm) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index d76861b6c4932..cb3bb78f65683 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -133,7 +133,7 @@ if(!try_heal_checks(patient, user, heal_brute, heal_burn)) return FALSE if(patient.heal_bodypart_damage((heal_brute * patient.maxHealth/100))) - user.visible_message("[user] applies [src] on [patient].", "You apply [src] on [patient].") + user.visible_message(span_infoplain(span_green("[user] applies [src] on [patient].")), span_infoplain(span_green("You apply [src] on [patient]."))) return TRUE patient.balloon_alert(user, "can't heal [patient]!") return FALSE @@ -279,7 +279,7 @@ if(!do_after(user, treatment_delay, target = patient)) return - user.visible_message("[user] applies [src] to [patient]'s [limb.plaintext_zone].", "You bandage the wounds on [user == patient ? "your" : "[patient]'s"] [limb.plaintext_zone].") + user.visible_message(span_infoplain(span_green("[user] applies [src] to [patient]'s [limb.plaintext_zone].")), span_infoplain(span_green("You bandage the wounds on [user == patient ? "your" : "[patient]'s"] [limb.plaintext_zone]."))) limb.apply_gauze(src) /obj/item/stack/medical/gauze/twelve @@ -436,7 +436,7 @@ is_open = TRUE balloon_alert(user, "opened") update_appearance() - playsound(src, 'sound/items/poster_ripped.ogg', 20, TRUE) + playsound(src, 'sound/items/poster/poster_ripped.ogg', 20, TRUE) return return ..() diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 69dbe87cd5cc9..9e91ba2aaaca2 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -32,15 +32,15 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ max_amount = 50 attack_verb_continuous = list("hits", "bludgeons", "whacks") attack_verb_simple = list("hit", "bludgeon", "whack") - hitsound = 'sound/weapons/gun/general/grenade_launch.ogg' + hitsound = 'sound/items/weapons/gun/general/grenade_launch.ogg' embed_type = /datum/embed_data/rods novariants = TRUE matter_amount = 2 cost = HALF_SHEET_MATERIAL_AMOUNT source = /datum/robot_energy_storage/material/iron merge_type = /obj/item/stack/rods - pickup_sound = 'sound/items/iron_rod_pick_up.ogg' - drop_sound = 'sound/items/metal_drop.ogg' + pickup_sound = 'sound/items/handling/materials/iron_rod_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/metal_drop.ogg' sound_vary = TRUE /datum/embed_data/rods diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 19e290170f8af..8415ffa3f407f 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -32,8 +32,8 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ cost = SHEET_MATERIAL_AMOUNT source = /datum/robot_energy_storage/material/glass sniffable = TRUE - pickup_sound = 'sound/items/glass_pick_up.ogg' - drop_sound = 'sound/items/glass_drop.ogg' + pickup_sound = 'sound/items/handling/materials/glass_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/glass_drop.ogg' /datum/armor/sheet_glass fire = 50 @@ -104,8 +104,8 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10) material_flags = NONE tableVariant = /obj/structure/table/glass/plasmaglass - pickup_sound = 'sound/items/glass_pick_up.ogg' - drop_sound = 'sound/items/glass_drop.ogg' + pickup_sound = 'sound/items/handling/materials/glass_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/glass_drop.ogg' /obj/item/stack/sheet/plasmaglass/fifty amount = 50 @@ -164,8 +164,8 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10) matter_amount = 6 tableVariant = /obj/structure/table/reinforced/rglass - pickup_sound = 'sound/items/glass_pick_up.ogg' - drop_sound = 'sound/items/glass_drop.ogg' + pickup_sound = 'sound/items/handling/materials/glass_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/glass_drop.ogg' /obj/item/stack/sheet/rglass/fifty amount = 50 @@ -204,8 +204,8 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ gulag_valid = TRUE matter_amount = 8 tableVariant = /obj/structure/table/reinforced/plasmarglass - pickup_sound = 'sound/items/glass_pick_up.ogg' - drop_sound = 'sound/items/glass_drop.ogg' + pickup_sound = 'sound/items/handling/materials/glass_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/glass_drop.ogg' /datum/armor/sheet_plasmarglass melee = 20 @@ -236,8 +236,8 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list( resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/titaniumglass tableVariant = /obj/structure/table/reinforced/titaniumglass - pickup_sound = 'sound/items/glass_pick_up.ogg' - drop_sound = 'sound/items/glass_drop.ogg' + pickup_sound = 'sound/items/handling/materials/glass_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/glass_drop.ogg' /obj/item/stack/sheet/titaniumglass/fifty amount = 50 @@ -268,8 +268,8 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/plastitaniumglass tableVariant = /obj/structure/table/reinforced/plastitaniumglass - pickup_sound = 'sound/items/glass_pick_up.ogg' - drop_sound = 'sound/items/glass_drop.ogg' + pickup_sound = 'sound/items/handling/materials/glass_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/glass_drop.ogg' /obj/item/stack/sheet/plastitaniumglass/fifty amount = 50 @@ -296,7 +296,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( custom_materials = list(/datum/material/glass=SHEET_MATERIAL_AMOUNT) attack_verb_continuous = list("stabs", "slashes", "slices", "cuts") attack_verb_simple = list("stab", "slash", "slice", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' resistance_flags = ACID_PROOF armor_type = /datum/armor/item_shard max_integrity = 40 diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 9dff36dca2dde..4478b21a6ef15 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -5,8 +5,8 @@ inhand_icon_state = null novariants = TRUE merge_type = /obj/item/stack/sheet/animalhide - pickup_sound = 'sound/items/skin_pick_up.ogg' - drop_sound = 'sound/items/skin_drop.ogg' + pickup_sound = 'sound/items/handling/materials/skin_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/skin_drop.ogg' /obj/item/stack/sheet/animalhide/human name = "human skin" @@ -193,8 +193,8 @@ GLOBAL_LIST_INIT(carp_recipes, list ( \ icon_state = "sheet-leather" inhand_icon_state = null merge_type = /obj/item/stack/sheet/leather - pickup_sound = 'sound/items/skin_pick_up.ogg' - drop_sound = 'sound/items/skin_drop.ogg' + pickup_sound = 'sound/items/handling/materials/skin_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/skin_drop.ogg' GLOBAL_LIST_INIT(leather_recipes, list ( \ new/datum/stack_recipe("wallet", /obj/item/storage/wallet, 1, crafting_flags = NONE, category = CAT_CONTAINERS), \ @@ -209,6 +209,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ new/datum/stack_recipe("sheriff vest", /obj/item/clothing/accessory/vest_sheriff, 4, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe("biker jacket", /obj/item/clothing/suit/jacket/leather/biker, 7, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("leather loincloth", /obj/item/clothing/under/costume/loincloth, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe_list("belts", list( \ new/datum/stack_recipe("tool belt", /obj/item/storage/belt/utility, 4, crafting_flags = NONE, category = CAT_CONTAINERS), \ new/datum/stack_recipe("botanical belt", /obj/item/storage/belt/plant, 2, crafting_flags = NONE, category = CAT_CONTAINERS), \ @@ -326,7 +327,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ /obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, params) if(W.get_sharpness()) - playsound(loc, 'sound/weapons/slice.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/slice.ogg', 50, TRUE, -1) user.visible_message(span_notice("[user] starts cutting hair off \the [src]."), span_notice("You start cutting the hair off \the [src]..."), span_hear("You hear the sound of a knife rubbing against flesh.")) if(do_after(user, 5 SECONDS, target = src)) to_chat(user, span_notice("You cut the hair from [src.name].")) @@ -348,8 +349,8 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ icon_state = "sheet-hairlesshide" inhand_icon_state = null merge_type = /obj/item/stack/sheet/hairlesshide - pickup_sound = 'sound/items/skin_pick_up.ogg' - drop_sound = 'sound/items/skin_drop.ogg' + pickup_sound = 'sound/items/handling/materials/skin_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/skin_drop.ogg' /obj/item/stack/sheet/hairlesshide/examine(mob/user) . = ..() @@ -363,8 +364,8 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ icon_state = "sheet-wetleather" inhand_icon_state = null merge_type = /obj/item/stack/sheet/wethide - pickup_sound = 'sound/items/skin_pick_up.ogg' - drop_sound = 'sound/items/skin_drop.ogg' + pickup_sound = 'sound/items/handling/materials/skin_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/skin_drop.ogg' /// Reduced when exposed to high temperatures var/wetness = 30 /// Kelvin to start drying diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index b3c2f91ce388a..38cd55f413efe 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -395,8 +395,8 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ grind_results = list(/datum/reagent/cellulose = 20) //no lignocellulose or lignin reagents yet, walltype = /turf/closed/wall/mineral/wood stairs_type = /obj/structure/stairs/wood - pickup_sound = 'sound/items/wood_pick_up.ogg' - drop_sound = 'sound/items/wood_drop.ogg' + pickup_sound = 'sound/items/handling/materials/wood_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/wood_drop.ogg' /datum/armor/mineral_wood fire = 50 @@ -460,6 +460,8 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \ grind_results = list(/datum/reagent/cellulose = 10) material_type = /datum/material/bamboo walltype = /turf/closed/wall/mineral/bamboo + drop_sound = null + pickup_sound = null /datum/armor/mineral_bamboo fire = 50 @@ -504,6 +506,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 3, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe("white softcap", /obj/item/clothing/head/soft/mime, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ new/datum/stack_recipe("white beanie", /obj/item/clothing/head/beanie, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("loincloth", /obj/item/clothing/under/costume/loincloth/cloth, 2, crafting_flags = NONE, category = CAT_CLOTHING), \ null, \ new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/blindfold, 2, crafting_flags = NONE, category = CAT_ENTERTAINMENT), \ null, \ @@ -692,8 +695,8 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ merge_type = /obj/item/stack/sheet/cardboard grind_results = list(/datum/reagent/cellulose = 10) material_type = /datum/material/cardboard - pickup_sound = 'sound/items/cardboard_pick_up.ogg' - drop_sound = 'sound/items/cardboard_drop.ogg' + pickup_sound = 'sound/items/handling/materials/cardboard_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/cardboard_drop.ogg' /obj/item/stack/sheet/cardboard/Initialize(mapload, new_amount, merge, list/mat_override, mat_amt) . = ..() @@ -825,6 +828,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ grind_results = list(/datum/reagent/carbon = 10) merge_type = /obj/item/stack/sheet/bone material_type = /datum/material/bone + drop_sound = null + pickup_sound = null /obj/item/stack/sheet/bone/Initialize(mapload, new_amount, merge, list/mat_override, mat_amt) . = ..() @@ -870,8 +875,8 @@ GLOBAL_LIST_INIT(plastic_recipes, list( throwforce = 7 material_type = /datum/material/plastic merge_type = /obj/item/stack/sheet/plastic - pickup_sound = 'sound/items/plastic_pick_up.ogg' - drop_sound = 'sound/items/plastic_drop.ogg' + pickup_sound = 'sound/items/handling/materials/plastic_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/plastic_drop.ogg' /obj/item/stack/sheet/plastic/fifty amount = 50 @@ -898,6 +903,8 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra resistance_flags = FLAMMABLE grind_results = list(/datum/reagent/cellulose = 20) material_type = /datum/material/paper + drop_sound = null + pickup_sound = null /obj/item/stack/sheet/paperframes/get_main_recipes() . = ..() @@ -919,6 +926,8 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra merge_type = /obj/item/stack/sheet/meat material_type = /datum/material/meat material_modifier = 1 //None of that wussy stuff + drop_sound = null + pickup_sound = null /obj/item/stack/sheet/meat/fifty amount = 50 @@ -936,6 +945,8 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra merge_type = /obj/item/stack/sheet/pizza material_type = /datum/material/pizza material_modifier = 1 + drop_sound = null + pickup_sound = null /obj/item/stack/sheet/pizza/fifty amount = 50 diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index 568fd2f49aa29..b9a66202a16e3 100644 --- a/code/game/objects/items/stacks/sheets/sheets.dm +++ b/code/game/objects/items/stacks/sheets/sheets.dm @@ -13,8 +13,8 @@ attack_verb_simple = list("bash", "batter", "bludgeon", "thrash", "smash") novariants = FALSE material_flags = MATERIAL_EFFECTS - pickup_sound = 'sound/items/metal_pick_up.ogg' - drop_sound = 'sound/items/metal_drop.ogg' + pickup_sound = 'sound/items/handling/materials/metal_pick_up.ogg' + drop_sound = 'sound/items/handling/materials/metal_drop.ogg' var/sheettype = null //this is used for girders in the creation of walls/false walls ///If true, this is worth points in the gulag labour stacker var/gulag_valid = FALSE @@ -63,7 +63,7 @@ * Facilitates sheets being smacked on the floor * * This is used for crafting by hitting the floor with items. - * The inital use case is glass sheets breaking in to shards when the floor is hit. + * The initial use case is glass sheets breaking in to shards when the floor is hit. * Args: * * user: The user that did the action * * params: paramas passed in from attackby diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index c96cebd58cc50..b5aa0a30c3ca3 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -177,7 +177,7 @@ /** * use available_amount of sheets/pieces, return TRUE only if all sheets/pieces of this stack were used * we don't delete this stack when it reaches 0 because we expect the all in one grinder, etc to delete - * this stack if grinding was successfull + * this stack if grinding was successful */ use(available_amount, check = FALSE) return available_amount == current_amount @@ -302,7 +302,7 @@ data["recipes"] = recursively_build_recipes(recipes) return data -/obj/item/stack/ui_act(action, params) +/obj/item/stack/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -369,7 +369,7 @@ /obj/item/stack/proc/radial_check(mob/builder) if(QDELETED(builder) || QDELETED(src)) return FALSE - if(builder.incapacitated()) + if(builder.incapacitated) return FALSE if(!builder.is_holding(src)) return FALSE @@ -549,7 +549,7 @@ update_weight() return TRUE -/obj/item/stack/tool_use_check(mob/living/user, amount) +/obj/item/stack/tool_use_check(mob/living/user, amount, heat_required) if(get_amount() < amount) // general balloon alert that says they don't have enough user.balloon_alert(user, "not enough material!") diff --git a/code/game/objects/items/stacks/tape.dm b/code/game/objects/items/stacks/tape.dm index acfc59b64d037..a1394bbad4fd9 100644 --- a/code/game/objects/items/stacks/tape.dm +++ b/code/game/objects/items/stacks/tape.dm @@ -29,14 +29,14 @@ if(user.get_inactive_held_item() == src) if(is_zero_amount(delete_if_zero = TRUE)) return - playsound(user, 'sound/items/duct_tape_rip.ogg', 50, TRUE) + playsound(user, 'sound/items/duct_tape/duct_tape_rip.ogg', 50, TRUE) if(!do_after(user, 1 SECONDS)) return var/new_tape_gag = new tape_gag(src) user.put_in_hands(new_tape_gag) use(1) to_chat(user, span_notice("You rip off a piece of tape.")) - playsound(user, 'sound/items/duct_tape_snap.ogg', 50, TRUE) + playsound(user, 'sound/items/duct_tape/duct_tape_snap.ogg', 50, TRUE) return TRUE return ..() @@ -53,10 +53,10 @@ return ITEM_INTERACT_BLOCKING user.visible_message(span_notice("[user] begins wrapping [target] with [src]."), span_notice("You begin wrapping [target] with [src].")) - playsound(user, 'sound/items/duct_tape_rip.ogg', 50, TRUE) + playsound(user, 'sound/items/duct_tape/duct_tape_rip.ogg', 50, TRUE) if(do_after(user, 3 SECONDS, target=target)) - playsound(user, 'sound/items/duct_tape_snap.ogg', 50, TRUE) + playsound(user, 'sound/items/duct_tape/duct_tape_snap.ogg', 50, TRUE) use(1) if(istype(target, /obj/item/clothing/gloves/fingerless)) var/obj/item/clothing/gloves/tackler/offbrand/O = new /obj/item/clothing/gloves/tackler/offbrand diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 4a540bb5ba5d2..dcaacf19405be 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -68,7 +68,7 @@ * Place our tile on a plating, or replace it. * * Arguments: - * * target_plating - Instance of the plating we want to place on. Replaced during sucessful executions. + * * target_plating - Instance of the plating we want to place on. Replaced during successful executions. * * user - The mob doing the placing. */ /obj/item/stack/tile/proc/place_tile(turf/open/floor/plating/target_plating, mob/user) @@ -83,7 +83,7 @@ return 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) + playsound(target_plating, 'sound/items/weapons/genhit.ogg', 50, TRUE) return target_plating // Most executions should end here. // If we and the target tile share the same initial baseturf and they consent, replace em. @@ -98,7 +98,7 @@ target_plating = target_plating.ChangeTurf(placed_turf_path, target_plating.baseturfs, CHANGETURF_INHERIT_AIR) target_plating.setDir(turf_dir) - playsound(target_plating, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(target_plating, 'sound/items/weapons/genhit.ogg', 50, TRUE) return target_plating /obj/item/stack/tile/handle_openspace_click(turf/target, mob/user, list/modifiers) @@ -1260,7 +1260,7 @@ inhand_icon_state = "tile-catwalk" mats_per_unit = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT) turf_type = /turf/open/floor/catwalk_floor - merge_type = /obj/item/stack/tile/catwalk_tile //Just to be cleaner, these all stack with eachother + merge_type = /obj/item/stack/tile/catwalk_tile //Just to be cleaner, these all stack with each other tile_reskin_types = list( /obj/item/stack/tile/catwalk_tile, /obj/item/stack/tile/catwalk_tile/iron, diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index bf8d17822bd0d..ec83b1b5efa7e 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -11,12 +11,28 @@ icon_state = "wrap_paper" inhand_icon_state = "wrap_paper" greyscale_config = /datum/greyscale_config/wrap_paper - item_flags = NOBLUDGEON amount = 25 max_amount = 25 resistance_flags = FLAMMABLE merge_type = /obj/item/stack/wrapping_paper singular_name = "wrapping paper" + throwforce = 0 + w_class = WEIGHT_CLASS_TINY + throw_speed = 3 + throw_range = 5 + hitsound = 'sound/effects/bonk.ogg' + +/obj/item/stack/wrapping_paper/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND, INNATE_TRAIT) + +/obj/item/stack/wrapping_paper/attack(mob/living/target_mob, mob/living/user, params) + . = ..() + user.visible_message( + span_warning("[user] baps [target_mob] on the head with [src]!"), + span_warning("You bap [target_mob] on the head with [src]!"), + ) + target_mob.add_mood_event("roll", /datum/mood_event/bapped) /obj/item/stack/wrapping_paper/Initialize(mapload) . = ..() @@ -103,13 +119,6 @@ /obj/item/delivery/can_be_package_wrapped() return FALSE -/obj/item/stack/package_wrap/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) - if(isitem(storage_holder)) - // Don't insert if the target can be wrapped - var/obj/item/item = storage_holder - return !item.can_be_package_wrapped() - return TRUE - /obj/item/stack/package_wrap/interact_with_atom(obj/interacting_with, mob/living/user, list/modifiers) if(!isobj(interacting_with)) return NONE @@ -123,6 +132,8 @@ if(isitem(interacting_with)) var/obj/item/item = interacting_with if(!item.can_be_package_wrapped()) + if(SHOULD_SKIP_INTERACTION(interacting_with, src, user)) + return NONE // put it in the bag instead of yelling balloon_alert(user, "can't be wrapped!") return ITEM_INTERACT_BLOCKING if(user.is_holding(item)) @@ -171,7 +182,6 @@ else balloon_alert(user, "not enough paper!") return ITEM_INTERACT_BLOCKING - else if(istype(interacting_with, /obj/machinery/portable_atmospherics)) var/obj/machinery/portable_atmospherics/portable_atmospherics = interacting_with if(portable_atmospherics.anchored) @@ -219,3 +229,17 @@ w_class = WEIGHT_CLASS_TINY throw_speed = 3 throw_range = 5 + hitsound = 'sound/effects/bonk.ogg' + +/obj/item/c_tube/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND, INNATE_TRAIT) + +/obj/item/c_tube/attack(mob/living/target_mob, mob/living/user, params) + . = ..() + user.visible_message( + span_warning("[user] baps [target_mob] on the head with [src]!"), + span_warning("You bap [target_mob] on the head with [src]!"), + ) + target_mob.add_mood_event("roll", /datum/mood_event/bapped) + diff --git a/code/game/objects/items/stickers.dm b/code/game/objects/items/stickers.dm index 19ac58f6f4072..9924749379573 100644 --- a/code/game/objects/items/stickers.dm +++ b/code/game/objects/items/stickers.dm @@ -25,13 +25,15 @@ throw_range = 3 pressure_resistance = 0 - item_flags = NOBLUDGEON | XENOMORPH_HOLDABLE //funny ~Jimmyl + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_TINY /// `list` or `null`, contains possible alternate `icon_states`. var/list/icon_states - /// Whether sticker is legal and allowed to generate inside non-syndicate boxes. - var/contraband = FALSE + /// This sticker won't be generated inside random sticker packs. + var/exclude_from_random = FALSE + /// Text added to the atom's examine when stickered. + var/examine_text /obj/item/sticker/Initialize(mapload) . = ..() @@ -85,7 +87,7 @@ user.log_message("stuck [src] to [key_name(victim)]", LOG_ATTACK) victim.log_message("had [src] stuck to them by [key_name(user)]", LOG_ATTACK) - target.AddComponent(/datum/component/sticker, src, get_dir(target, src), px, py) + target.AddComponent(/datum/component/sticker, src, get_dir(target, src), px, py, null, null, examine_text) return TRUE #undef MAX_STICKER_COUNT @@ -123,6 +125,7 @@ name = "blue R sticker" desc = "A sticker of FUCK THE SYSTEM, the galaxy's premiere hardcore punk band." icon_state = "revhead" + examine_text = "There is a sticker displaying FUCK THE SYSTEM, the galaxy's premiere hardcore punk band." /obj/item/sticker/pslime name = "slime plushie sticker" @@ -149,6 +152,12 @@ name = "toolbox sticker" icon_state = "soul" +/obj/item/sticker/chief_engineer + name = "CE approved sticker" + icon_state = "ce_approved" + exclude_from_random = TRUE + examine_text = "There is a sticker displaying the Chief Engineer's SEAL OF APPROVAL." + /obj/item/sticker/clown name = "clown sticker" icon_state = "honkman" @@ -164,15 +173,17 @@ /obj/item/sticker/skub name = "skub sticker" icon_state = "skub" + examine_text = "There is a sticker displaying Skubtide, Stationwide!" /obj/item/sticker/anti_skub name = "anti-skub sticker" icon_state = "anti_skub" + examine_text = "There is an anti-skub sticker." /obj/item/sticker/syndicate name = "syndicate sticker" icon_state = "synd" - contraband = TRUE + exclude_from_random = TRUE /obj/item/sticker/syndicate/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 4199b544f818f..b8d9900b198c3 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -250,7 +250,7 @@ attack_verb_simple = list("MEAT", "MEAT MEAT") custom_materials = list(/datum/material/meat = SHEET_MATERIAL_AMOUNT * 25) // MEAT ///Sounds used in the squeak component - var/list/meat_sounds = list('sound/effects/blobattack.ogg' = 1) + var/list/meat_sounds = list('sound/effects/blob/blobattack.ogg' = 1) ///Reagents added to the edible component, ingested when you EAT the MEAT var/list/meat_reagents = list( /datum/reagent/consumable/nutriment/protein = 10, @@ -417,11 +417,11 @@ // How much time it takes to zip up (close) the duffelbag var/zip_up_duration = 0.5 SECONDS // Audio played during zipup - var/zip_up_sfx = 'sound/items/zip_up.ogg' + var/zip_up_sfx = 'sound/items/zip/zip_up.ogg' // How much time it takes to unzip the duffel var/unzip_duration = 2.1 SECONDS // Audio played during unzip - var/unzip_sfx = 'sound/items/un_zip.ogg' + var/unzip_sfx = 'sound/items/zip/un_zip.ogg' /obj/item/storage/backpack/duffelbag/Initialize(mapload) . = ..() @@ -643,7 +643,7 @@ zip_slowdown = 0.3 // Faster unzipping. Utilizes the same noise as zipping up to fit the unzip duration. unzip_duration = 0.5 SECONDS - unzip_sfx = 'sound/items/zip_up.ogg' + unzip_sfx = 'sound/items/zip/zip_up.ogg' //SKYRAT EDIT CHANGE START - It's just a black duffel. /obj/item/storage/backpack/duffelbag/syndie diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 996cd933647a1..864078c4b0839 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -155,13 +155,13 @@ UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) listeningTo = null -/obj/item/storage/bag/ore/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) - if(istype(inserted, /obj/item/boulder)) - to_chat(user, span_warning("You can't fit [inserted] into [src]. \ +/obj/item/storage/bag/ore/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/boulder)) + to_chat(user, span_warning("You can't fit [tool] into [src]. \ Perhaps you should break it down first, or find an ore box.")) - return FALSE + return ITEM_INTERACT_BLOCKING - return TRUE + return NONE /obj/item/storage/bag/ore/proc/pickup_ores(mob/living/user) SIGNAL_HANDLER @@ -396,9 +396,9 @@ do_scatter(tray_item) if(prob(50)) - playsound(M, 'sound/items/trayhit1.ogg', 50, TRUE) + playsound(M, 'sound/items/trayhit/trayhit1.ogg', 50, TRUE) else - playsound(M, 'sound/items/trayhit2.ogg', 50, TRUE) + playsound(M, 'sound/items/trayhit/trayhit2.ogg', 50, TRUE) if(ishuman(M)) if(prob(10)) @@ -575,13 +575,13 @@ new /obj/item/ammo_casing/harpoon(src) /obj/item/storage/bag/rebar_quiver - name = "Rebar Storage Quiver" + name = "rebar quiver" icon = 'icons/obj/weapons/bows/quivers.dmi' icon_state = "rebar_quiver" worn_icon_state = "rebar_quiver" inhand_icon_state = "rebar_quiver" desc = "A oxygen tank cut in half, used for holding sharpened rods for the rebar crossbow." - slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE + slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE|ITEM_SLOT_NECK resistance_flags = FLAMMABLE /obj/item/storage/bag/rebar_quiver/Initialize(mapload) @@ -598,4 +598,59 @@ /obj/item/ammo_casing/rebar/paperball, )) +/obj/item/storage/bag/rebar_quiver/syndicate + icon_state = "syndie_quiver_0" + worn_icon_state = "syndie_quiver_0" + inhand_icon_state = "holyquiver" + desc = "A specialized quiver meant to hold any kind of bolts intended for use with the rebar crossbow. \ + Clearly a better design than a cut up oxygen tank..." + slot_flags = ITEM_SLOT_NECK + w_class = WEIGHT_CLASS_NORMAL + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + actions_types = list(/datum/action/item_action/reload_rebar) + +/obj/item/storage/bag/rebar_quiver/syndicate/Initialize(mapload) + . = ..() + atom_storage.max_slots = 20 + atom_storage.max_total_storage = 20 + update_appearance(UPDATE_OVERLAYS) + +/obj/item/storage/bag/rebar_quiver/syndicate/PopulateContents() + for(var/to_fill in 1 to 20) + new /obj/item/ammo_casing/rebar/syndie(src) + +/obj/item/storage/bag/rebar_quiver/syndicate/update_icon_state() + . = ..() + switch(contents.len) + if(0) + icon_state = "syndie_quiver_0" + if(1 to 7) + icon_state = "syndie_quiver_1" + if(8 to 13) + icon_state = "syndie_quiver_2" + if(14 to 20) + icon_state = "syndie_quiver_3" + +/obj/item/storage/bag/rebar_quiver/syndicate/ui_action_click(mob/user, actiontype) + if(istype(actiontype, /datum/action/item_action/reload_rebar)) + reload_held_rebar(user) + +/obj/item/storage/bag/rebar_quiver/syndicate/proc/reload_held_rebar(mob/user) + if(!contents.len) + user.balloon_alert(user, "no bolts left!") + return + var/obj/held_item = user.get_active_held_item() + if(!held_item || !istype(held_item, /obj/item/gun/ballistic/rifle/rebarxbow)) + user.balloon_alert(user, "no held crossbow!") + return + var/obj/item/gun/ballistic/rifle/rebarxbow/held_crossbow = held_item + if(held_crossbow.magazine.contents.len >= held_crossbow.magazine.max_ammo) + user.balloon_alert(user, "no more room!") + return + if(!do_after(user, 1.2 SECONDS, user)) + return + + var/obj/item/ammo_casing/rebar/ammo_to_load = contents[1] + held_crossbow.attackby(ammo_to_load, user) + #undef ORE_BAG_BALOON_COOLDOWN diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index adc7d30df1da0..b9e4094a2bbb5 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -76,6 +76,7 @@ /obj/item/wrench, /obj/item/spess_knife, /obj/item/melee/sickly_blade/lock, + /obj/item/reagent_containers/cup/soda_cans, )) /obj/item/storage/belt/utility/chief @@ -397,8 +398,8 @@ /obj/item/restraints/handcuffs, /obj/item/restraints/legcuffs/bola, /obj/item/stock_parts/power_store/cell/microfusion, //SKYRAT EDIT ADDITION - )) - atom_storage.open_sound = 'sound/items/holster.ogg' + )) + atom_storage.open_sound = 'sound/items/handling/holster_open.ogg' atom_storage.open_sound_vary = TRUE atom_storage.rustle_sound = FALSE @@ -539,6 +540,7 @@ . = ..() atom_storage.max_slots = 1 atom_storage.set_holdable(/obj/item/clothing/mask/luchador) + AddComponent(/datum/component/adjust_fishing_difficulty, -2) /obj/item/storage/belt/military name = "chest rig" diff --git a/code/game/objects/items/storage/boxes/_boxes.dm b/code/game/objects/items/storage/boxes/_boxes.dm index 9401527299689..58e68b4487ab7 100644 --- a/code/game/objects/items/storage/boxes/_boxes.dm +++ b/code/game/objects/items/storage/boxes/_boxes.dm @@ -8,8 +8,8 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' resistance_flags = FLAMMABLE - drop_sound = 'sound/items/handling/cardboardbox_drop.ogg' - pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg' + drop_sound = 'sound/items/handling/cardboard_box/cardboardbox_drop.ogg' + pickup_sound = 'sound/items/handling/cardboard_box/cardboardbox_pickup.ogg' /// What material do we get when we fold this box? var/foldable_result = /obj/item/stack/sheet/cardboard /// What drawing will we get on the face of the box? @@ -19,8 +19,8 @@ . = ..() atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL update_appearance() - atom_storage.open_sound = 'sound/items/cardboard_box_open.ogg' - atom_storage.rustle_sound = 'sound/items/cardboard_box_rustle.ogg' + atom_storage.open_sound = 'sound/items/handling/cardboard_box/cardboard_box_open.ogg' + atom_storage.rustle_sound = 'sound/items/handling/cardboard_box/cardboard_box_rustle.ogg' /obj/item/storage/box/suicide_act(mob/living/carbon/user) var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) diff --git a/code/game/objects/items/storage/boxes/clothes_boxes.dm b/code/game/objects/items/storage/boxes/clothes_boxes.dm index 6b4e995a2762e..86cd3931f1e20 100644 --- a/code/game/objects/items/storage/boxes/clothes_boxes.dm +++ b/code/game/objects/items/storage/boxes/clothes_boxes.dm @@ -38,8 +38,8 @@ new /obj/item/stack/sticky_tape(src) /obj/item/storage/box/fakesyndiesuit - name = "boxed space suit and helmet" - desc = "A sleek, sturdy box used to hold replica spacesuits." + name = "boxed replica space suit and helmet" + desc = "A sleek, sturdy box used to hold toy spacesuits." icon_state = "syndiebox" illustration = "syndiesuit" @@ -130,6 +130,24 @@ new /obj/item/clothing/under/ethereal_tunic/trailwarden(src) new /obj/item/storage/backpack/saddlepack(src) +/obj/item/storage/box/hero/journalist + name = "Assassinated by CIA - 1984." // Literally + desc = "Many courageous individuals risked their lives to report on events the government sought to keep hidden from the public, ensuring that the truth remained buried and unheard. These garments are replicas of the clothing worn by one such 'journalist,' a silent sentinel in the fight for truth." + +/obj/item/storage/box/hero/journalist/PopulateContents() + new /obj/item/clothing/under/costume/buttondown/slacks(src) + new /obj/item/clothing/suit/toggle/suspenders(src) + new /obj/item/clothing/neck/tie/red(src) + new /obj/item/clothing/head/fedora/beige/press(src) + new /obj/item/clothing/accessory/press_badge(src) + new /obj/item/clothing/suit/hazardvest/press(src) + new /obj/item/radio/entertainment/microphone/physical(src) + new /obj/item/radio/entertainment/speakers/physical(src) + new /obj/item/clipboard(src) + new /obj/item/taperecorder(src) + new /obj/item/camera(src) + new /obj/item/wallframe/telescreen/entertainment(src) + /obj/item/storage/box/holy name = "Templar Kit" /// This item is used to generate a preview image for this set. diff --git a/code/game/objects/items/storage/boxes/engineering_boxes.dm b/code/game/objects/items/storage/boxes/engineering_boxes.dm index a46703ec8bf9d..09f641ec31520 100644 --- a/code/game/objects/items/storage/boxes/engineering_boxes.dm +++ b/code/game/objects/items/storage/boxes/engineering_boxes.dm @@ -112,3 +112,12 @@ ..() for(var/i in 1 to 7) new /obj/item/tank/internals/emergency_oxygen/engi(src) //in case anyone ever wants to do anything with spawning them, apart from crafting the box + +/obj/item/storage/box/stickers/chief_engineer + name = "CE approved sticker pack" + desc = "With one of these stickers, inform the crew that the contraption in the corridor is COMPLETELY SAFE!" + illustration = "label_ce" + +/obj/item/storage/box/stickers/chief_engineer/PopulateContents() + for(var/i in 1 to 3) + new /obj/item/sticker/chief_engineer(src) diff --git a/code/game/objects/items/storage/boxes/food_boxes.dm b/code/game/objects/items/storage/boxes/food_boxes.dm index bccb04f14d006..bac558ce3be78 100644 --- a/code/game/objects/items/storage/boxes/food_boxes.dm +++ b/code/game/objects/items/storage/boxes/food_boxes.dm @@ -126,7 +126,7 @@ /obj/item/storage/box/papersack/proc/check_menu(mob/user, obj/item/pen/P) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE if(contents.len) balloon_alert(user, "items inside!") @@ -301,7 +301,7 @@ new /obj/item/food/fishmeat/armorfish(src) new /obj/item/food/fishmeat/carp(src) new /obj/item/food/fishmeat/moonfish(src) - new /obj/item/food/fishmeat/gunner_jellyfish(src) + new /obj/item/food/fishmeat/gunner_jellyfish/supply(src) /obj/item/storage/box/ingredients/salads theme_name = "salads" diff --git a/code/game/objects/items/storage/boxes/science_boxes.dm b/code/game/objects/items/storage/boxes/science_boxes.dm index 48ab6cd5b7243..63e1c1ee3762d 100644 --- a/code/game/objects/items/storage/boxes/science_boxes.dm +++ b/code/game/objects/items/storage/boxes/science_boxes.dm @@ -39,6 +39,7 @@ illustration = null /// Which type of cube are we spawning in this box? var/cube_type = /obj/item/food/monkeycube + custom_price = PAYCHECK_CREW * 2 /obj/item/storage/box/monkeycubes/Initialize(mapload) . = ..() diff --git a/code/game/objects/items/storage/boxes/service_boxes.dm b/code/game/objects/items/storage/boxes/service_boxes.dm index ee558d863daf4..f50629818ecab 100644 --- a/code/game/objects/items/storage/boxes/service_boxes.dm +++ b/code/game/objects/items/storage/boxes/service_boxes.dm @@ -47,7 +47,7 @@ /obj/item/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" - desc = "Keep out of reach of children." + desc = span_alert("Keep out of reach of children.") illustration = "mousetrap" /obj/item/storage/box/mousetraps/PopulateContents() @@ -224,14 +224,35 @@ new /obj/item/toy/balloon/long(src) /obj/item/storage/box/stickers - name = "box of stickers" - desc = "A box full of random stickers. Do give to the clown." + name = "sticker pack" + desc = "A pack of removable stickers. Removable? What a rip off!
On the back, DO NOT GIVE TO THE CLOWN! is printed in large lettering." + icon = 'icons/obj/toys/stickers.dmi' + icon_state = "stickerpack" + illustration = null + w_class = WEIGHT_CLASS_TINY + var/static/list/pack_labels = list( + "smile", + "frown", + "heart", + "silentman", + "tider", + "star", + ) + +/obj/item/storage/box/stickers/Initialize(mapload) + . = ..() + atom_storage.max_slots = 8 + atom_storage.set_holdable(list(/obj/item/sticker)) + atom_storage.max_specific_storage = WEIGHT_CLASS_TINY + if(isnull(illustration)) + illustration = pick(pack_labels) + update_appearance() /obj/item/storage/box/stickers/proc/generate_non_contraband_stickers_list() var/list/allowed_stickers = list() for(var/obj/item/sticker/sticker_type as anything in subtypesof(/obj/item/sticker)) - if(!sticker_type::contraband) + if(!sticker_type::exclude_from_random) allowed_stickers += sticker_type return allowed_stickers @@ -247,8 +268,9 @@ new type(src) /obj/item/storage/box/stickers/googly - name = "box of googly eye stickers" + name = "googly eye sticker pack" desc = "Turn anything and everything into something vaguely alive!" + illustration = "googly-alt" /obj/item/storage/box/stickers/googly/PopulateContents() for(var/i in 1 to 6) diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm index bd474808446af..a0b6e892e0591 100644 --- a/code/game/objects/items/storage/briefcase.dm +++ b/code/game/objects/items/storage/briefcase.dm @@ -110,3 +110,12 @@ new /obj/item/clothing/mask/balaclava(src) new /obj/item/bodybag(src) new /obj/item/soap/nanotrasen(src) + +/obj/item/storage/briefcase/hitchiker/PopulateContents() + new /obj/item/food/sandwich/peanut_butter_jelly(src) + new /obj/item/food/sandwich/peanut_butter_jelly(src) + new /obj/item/reagent_containers/cup/glass/waterbottle/large(src) + new /obj/item/soap(src) + new /obj/item/pillow/random(src) + new /obj/item/tank/internals/emergency_oxygen(src) + new /obj/item/tank/internals/emergency_oxygen(src) diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm index f8dee3afdc7f4..010cc7ffd7f5a 100644 --- a/code/game/objects/items/storage/holsters.dm +++ b/code/game/objects/items/storage/holsters.dm @@ -33,7 +33,7 @@ /obj/item/gun/energy/laser/captain, /obj/item/gun/energy/e_gun/hos, )) - atom_storage.open_sound = 'sound/items/holster.ogg' + atom_storage.open_sound = 'sound/items/handling/holster_open.ogg' atom_storage.open_sound_vary = TRUE /obj/item/storage/belt/holster/energy @@ -113,8 +113,8 @@ /obj/item/storage/belt/holster/detective/full/PopulateContents() generate_items_inside(list( - /obj/item/gun/ballistic/revolver/c38/detective = 1, /obj/item/ammo_box/c38 = 2, + /obj/item/gun/ballistic/revolver/c38/detective = 1, ), src) /obj/item/storage/belt/holster/detective/full/ert @@ -126,8 +126,8 @@ /obj/item/storage/belt/holster/detective/full/ert/PopulateContents() generate_items_inside(list( - /obj/item/gun/ballistic/automatic/pistol/m1911 = 1, /obj/item/ammo_box/magazine/m45 = 2, + /obj/item/gun/ballistic/automatic/pistol/m1911 = 1, ),src) /obj/item/storage/belt/holster/chameleon @@ -197,8 +197,8 @@ /obj/item/storage/belt/holster/nukie/cowboy/full/PopulateContents() generate_items_inside(list( - /obj/item/gun/ballistic/revolver/syndicate/cowboy/nuclear = 1, /obj/item/ammo_box/a357 = 2, + /obj/item/gun/ballistic/revolver/syndicate/cowboy/nuclear = 1, ), src) diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index 421d82b667fde..8cd1548d537c5 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -232,7 +232,6 @@ /obj/item/storage/lockbox/order name = "order lockbox" desc = "A box used to secure small cargo orders from being looted by those who didn't order it. Yeah, cargo tech, that means you." - icon = 'icons/obj/storage/case.dmi' icon_state = "secure" icon_closed = "secure" icon_locked = "secure_locked" diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index 368ef9c0b406a..ff51c99604c70 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -18,8 +18,8 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' throw_speed = 3 throw_range = 7 - drop_sound = 'sound/items/medkit_drop.ogg' - pickup_sound = 'sound/items/medkit_pick_up.ogg' + drop_sound = 'sound/items/handling/medkit/medkit_drop.ogg' + pickup_sound = 'sound/items/handling/medkit/medkit_pick_up.ogg' sound_vary = TRUE var/empty = FALSE /// Defines damage type of the medkit. General ones stay null. Used for medibot healing bonuses @@ -82,9 +82,9 @@ /obj/item/storage/medkit/Initialize(mapload) . = ..() atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL - atom_storage.open_sound = 'sound/items/medkit_open.ogg' + atom_storage.open_sound = 'sound/items/handling/medkit/medkit_open.ogg' atom_storage.open_sound_vary = TRUE - atom_storage.rustle_sound = 'sound/items/medkit_rustle.ogg' + atom_storage.rustle_sound = 'sound/items/handling/medkit/medkit_rustle.ogg' /obj/item/storage/medkit/regular icon_state = "medkit" @@ -129,6 +129,7 @@ icon_state = "medkit_surgery" inhand_icon_state = "medkit" desc = "A high capacity aid kit for doctors, full of medical supplies and basic surgical equipment." + custom_premium_price = PAYCHECK_COMMAND * 6 // BUBBER EDIT ADDITION /obj/item/storage/medkit/surgery/Initialize(mapload) . = ..() @@ -818,3 +819,8 @@ /obj/item/storage/test_tube_rack/update_icon_state() icon_state = "[base_icon_state][contents.len > 0 ? contents.len : null]" return ..() + +/obj/item/storage/test_tube_rack/full/PopulateContents() + for(var/i in 1 to atom_storage.max_slots) + new /obj/item/reagent_containers/cup/tube(src) + diff --git a/code/game/objects/items/storage/sixpack.dm b/code/game/objects/items/storage/sixpack.dm index a6e36bf05925f..f1a950f025b8c 100644 --- a/code/game/objects/items/storage/sixpack.dm +++ b/code/game/objects/items/storage/sixpack.dm @@ -42,9 +42,9 @@ new /obj/item/reagent_containers/cup/soda_cans/cola(src) /obj/item/storage/cans/sixbeer - name = "beer bottle ring" - desc = "Holds six beer bottles. Remember to recycle when you're done!" + name = "beer can ring" + desc = "Holds six beers. Remember to recycle when you're done!" /obj/item/storage/cans/sixbeer/PopulateContents() for(var/i in 1 to 6) - new /obj/item/reagent_containers/cup/glass/bottle/beer(src) + new /obj/item/reagent_containers/cup/soda_cans/beer(src) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 8a2920b601305..f5d802a02ffe2 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -16,9 +16,9 @@ custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*5) attack_verb_continuous = list("robusts") attack_verb_simple = list("robust") - hitsound = 'sound/weapons/smash.ogg' - drop_sound = 'sound/items/handling/toolbox_drop.ogg' - pickup_sound = 'sound/items/handling/toolbox_pickup.ogg' + hitsound = 'sound/items/weapons/smash.ogg' + drop_sound = 'sound/items/handling/toolbox/toolbox_drop.ogg' + pickup_sound = 'sound/items/handling/toolbox/toolbox_pickup.ogg' material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR var/latches = "single_latch" var/has_latches = TRUE @@ -33,8 +33,8 @@ if(prob(1)) latches = "triple_latch" update_appearance() - atom_storage.open_sound = 'sound/items/toolbox_open.ogg' - atom_storage.rustle_sound = 'sound/items/toolbox_rustle.ogg' + atom_storage.open_sound = 'sound/items/handling/toolbox/toolbox_open.ogg' + atom_storage.rustle_sound = 'sound/items/handling/toolbox/toolbox_rustle.ogg' AddElement(/datum/element/falling_hazard, damage = force, wound_bonus = wound_bonus, hardhat_safety = TRUE, crushes = FALSE, impact_sound = hitsound) /obj/item/storage/toolbox/update_overlays() @@ -412,6 +412,7 @@ desc = "A bandana. It seems to have a little carp embroidered on the inside, as well as the kanji '魚'." icon_state = "snake_eater" inhand_icon_state = null + clothing_traits = list(TRAIT_FISH_EATER) /obj/item/clothing/head/costume/knight name = "fake medieval helmet" diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 60e6d4113b5e8..bbdadcfefb4bd 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -346,6 +346,7 @@ /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) + new /obj/item/storage/bag/rebar_quiver/syndicate(src) /obj/item/storage/box/syndie_kit/origami_bundle name = "origami kit" @@ -683,14 +684,7 @@ group.register(i) desc += " The implants are registered to the \"[group.name]\" group." -/obj/item/storage/box/syndie_kit/stickers - name = "sticker kit" - -/obj/item/storage/box/syndie_kit/stickers/Initialize(mapload) - . = ..() - atom_storage.max_slots = 8 - -/obj/item/storage/box/syndie_kit/stickers/PopulateContents() +/obj/item/storage/box/stickers/syndie_kit/PopulateContents() var/list/types = subtypesof(/obj/item/sticker/syndicate) for(var/i in 1 to atom_storage.max_slots) diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index ab2d8f35341af..9329bc9dc1182 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -115,10 +115,8 @@ cached_flat_icon = getFlatIcon(src) return cached_flat_icon -/obj/item/storage/wallet/get_examine_string(mob/user, thats = FALSE) - if(front_id) - return "[icon2html(get_cached_flat_icon(), user)] [thats? "That's ":""][get_examine_name(user)]" //displays all overlays in chat - return ..() +/obj/item/storage/wallet/get_examine_icon(mob/user) + return icon2html(get_cached_flat_icon(), user) /obj/item/storage/wallet/proc/update_label() if(front_id) @@ -179,4 +177,3 @@ /obj/item/storage/wallet/money/PopulateContents() for(var/iteration in 1 to pick(3, 4)) new /obj/item/holochip(src, rand(50, 450)) - diff --git a/code/game/objects/items/surgery_tray.dm b/code/game/objects/items/surgery_tray.dm index 457e971b90dd6..9aaf882109a78 100644 --- a/code/game/objects/items/surgery_tray.dm +++ b/code/game/objects/items/surgery_tray.dm @@ -1,29 +1,3 @@ -/datum/storage/surgery_tray - max_total_storage = 30 - max_specific_storage = WEIGHT_CLASS_NORMAL - max_slots = 14 - -/datum/storage/surgery_tray/New() - . = ..() - set_holdable(list( - /obj/item/autopsy_scanner, - /obj/item/blood_filter, - /obj/item/bonesetter, - /obj/item/cautery, - /obj/item/circular_saw, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/suit/toggle/labcoat/hospitalgown, // SKYRAT EDIT ADDITION - /obj/item/hemostat, - /obj/item/razor, - /obj/item/reagent_containers/medigel, - /obj/item/retractor, - /obj/item/scalpel, - /obj/item/stack/medical/bone_gel, - /obj/item/stack/sticky_tape/surgical, - /obj/item/surgical_drapes, - /obj/item/surgicaldrill, - )) - /** * Surgery Trays * A storage object that displays tools in its contents based on tier, better tools are more visible. @@ -217,7 +191,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/hospitalgown(src) // SKYRAT EDIT ADDITION + new /obj/item/autopsy_scanner(src) // BUBBER 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/tail_pin.dm b/code/game/objects/items/tail_pin.dm index 71bd50b1dda21..dc2ffaefea0a9 100644 --- a/code/game/objects/items/tail_pin.dm +++ b/code/game/objects/items/tail_pin.dm @@ -8,7 +8,7 @@ throwforce = 0 throw_speed = 1 custom_materials = list(/datum/material/iron= HALF_SHEET_MATERIAL_AMOUNT) - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("pokes", "jabs", "pins the tail on") attack_verb_simple = list("poke", "jab") sharpness = SHARP_POINTY @@ -44,6 +44,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/party_game, 32) var/list/modifiers = params2list(params) if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) return - I.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) - I.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) + I.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(ICON_SIZE_X/2), ICON_SIZE_X/2) + I.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(ICON_SIZE_Y/2), ICON_SIZE_Y/2) return TRUE diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index cd5a9a1841ead..6976c936b665f 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -14,10 +14,16 @@ var/on = FALSE /// If the jetpack will stop when you stop moving var/stabilize = FALSE + /// If the jetpack will have a speedboost in space/nograv or not + var/full_speed = TRUE /// If our jetpack is disabled, from getting EMPd var/disabled = FALSE /// Callback for the jetpack component var/thrust_callback + /// How much force out jetpack can output per tick + var/drift_force = 1.5 NEWTONS + /// How much force this jetpack can output per tick to stabilize the user + var/stabilizer_force = 1.2 NEWTONS /obj/item/tank/jetpack/Initialize(mapload) . = ..() @@ -35,19 +41,27 @@ * Arguments * stabilize - Should this jetpack be stabalized */ -/obj/item/tank/jetpack/proc/configure_jetpack(stabilize) +/obj/item/tank/jetpack/proc/configure_jetpack(stabilize, mob/user = null) src.stabilize = stabilize AddComponent( \ /datum/component/jetpack, \ src.stabilize, \ + drift_force, \ + stabilizer_force, \ COMSIG_JETPACK_ACTIVATED, \ COMSIG_JETPACK_DEACTIVATED, \ JETPACK_ACTIVATION_FAILED, \ thrust_callback, \ - /datum/effect_system/trail_follow/ion \ + /datum/effect_system/trail_follow/ion, \ ) + if (!isnull(user) && user.get_item_by_slot(slot_flags) == src) + if (!stabilize) + ADD_TRAIT(user, TRAIT_NOGRAV_ALWAYS_DRIFT, JETPACK_TRAIT) + else + REMOVE_TRAIT(user, TRAIT_NOGRAV_ALWAYS_DRIFT, JETPACK_TRAIT) + /obj/item/tank/jetpack/item_action_slot_check(slot) if(slot & slot_flags) return TRUE @@ -73,13 +87,13 @@ cycle(user) else if(istype(action, /datum/action/item_action/jetpack_stabilization)) if(on) - configure_jetpack(!stabilize) + configure_jetpack(!stabilize, user) to_chat(user, span_notice("You turn the jetpack stabilization [stabilize ? "on" : "off"].")) else toggle_internals(user) /obj/item/tank/jetpack/proc/cycle(mob/user) - if(user.incapacitated()) + if(user.incapacitated) return if(!on) @@ -105,12 +119,19 @@ return FALSE on = TRUE update_icon(UPDATE_ICON_STATE) + if(full_speed) + user.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/full_speed) + if (!stabilize) + ADD_TRAIT(user, TRAIT_NOGRAV_ALWAYS_DRIFT, JETPACK_TRAIT) return TRUE /obj/item/tank/jetpack/proc/turn_off(mob/user) SEND_SIGNAL(src, COMSIG_JETPACK_DEACTIVATED, user) on = FALSE update_icon(UPDATE_ICON_STATE) + if(user) + user.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/full_speed) + REMOVE_TRAIT(user, TRAIT_NOGRAV_ALWAYS_DRIFT, JETPACK_TRAIT) /obj/item/tank/jetpack/proc/allow_thrust(num, use_fuel = TRUE) if(!ismob(loc)) @@ -168,6 +189,9 @@ worn_icon_state = "jetpack-improvised" volume = 20 //normal jetpacks have 70 volume gas_type = null //it starts empty + full_speed = FALSE + drift_force = 1 NEWTONS + stabilizer_force = 0.5 NEWTONS /obj/item/tank/jetpack/improvised/allow_thrust(num) if(!ismob(loc)) @@ -210,6 +234,8 @@ volume = 90 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy. slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_SUITSTORE + drift_force = 2 NEWTONS + stabilizer_force = 2 NEWTONS /obj/item/tank/jetpack/oxygen/security name = "security jetpack (oxygen)" diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index d89794f420917..8a7f18ed2cc5d 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -21,9 +21,9 @@ 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' - pickup_sound = 'sound/items/gas_tank_pick_up.ogg' - drop_sound = 'sound/items/gas_tank_drop.ogg' + hitsound = 'sound/items/weapons/smash.ogg' + pickup_sound = 'sound/items/handling/gas_tank/gas_tank_pick_up.ogg' + drop_sound = 'sound/items/handling/gas_tank/gas_tank_drop.ogg' sound_vary = TRUE pressure_resistance = ONE_ATMOSPHERE * 5 force = 5 @@ -86,13 +86,13 @@ /// Called by carbons after they connect the tank to their breathing apparatus. /obj/item/tank/proc/after_internals_opened(mob/living/carbon/carbon_target) breathing_mob = carbon_target - playsound(loc, 'sound/items/internals_on.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(loc, 'sound/items/internals/internals_on.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) RegisterSignal(carbon_target, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) /// Called by carbons after they disconnect the tank from their breathing apparatus. /obj/item/tank/proc/after_internals_closed(mob/living/carbon/carbon_target) breathing_mob = null - playsound(loc, 'sound/items/internals_off.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(loc, 'sound/items/internals/internals_off.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) UnregisterSignal(carbon_target, COMSIG_MOB_GET_STATUS_TAB_ITEMS) /obj/item/tank/proc/get_status_tab_item(mob/living/source, list/items) @@ -256,7 +256,7 @@ if(istype(carbon_user) && (carbon_user.external == src || carbon_user.internal == src)) .["connected"] = TRUE -/obj/item/tank/ui_act(action, params) +/obj/item/tank/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -443,7 +443,7 @@ /obj/item/tank/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here. audible_message(span_warning("[icon2html(src, hearers(src))] *beep* *beep* *beep*")) - playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) + playsound(src, 'sound/machines/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) addtimer(CALLBACK(src, PROC_REF(ignite)), 1 SECONDS) /// Attaches an assembly holder to the tank to create a bomb. diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 8094a9a21c863..1c23937d2b589 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -47,7 +47,7 @@ if(user.get_item_by_slot(user.getBackSlot()) != src) to_chat(user, span_warning("The watertank must be worn properly to use!")) return - if(user.incapacitated()) + if(user.incapacitated) return if(QDELETED(noz)) @@ -371,7 +371,7 @@ qdel(src) // Please don't spacedrift thanks -/obj/effect/resin_container/newtonian_move(direction, instant = FALSE, start_delay = 0) +/obj/effect/resin_container/newtonian_move(inertia_angle, instant = FALSE, start_delay = 0, drift_force = 0, controlled_cap = null) return TRUE #undef EXTINGUISHER diff --git a/code/game/objects/items/taster.dm b/code/game/objects/items/taster.dm index 599b78971db11..cdd67ceae5654 100644 --- a/code/game/objects/items/taster.dm +++ b/code/game/objects/items/taster.dm @@ -16,4 +16,4 @@ else var/message = interacting_with.reagents.generate_taste_message(user, taste_sensitivity) to_chat(user, span_notice("[src] tastes [message] in [interacting_with].")) - return ITEM_INTERACT_SUCCESS + return user.combat_mode ? NONE : ITEM_INTERACT_SUCCESS diff --git a/code/game/objects/items/tcg/tcg.dm b/code/game/objects/items/tcg/tcg.dm index fc2eeba82ff72..1f6c334c9921b 100644 --- a/code/game/objects/items/tcg/tcg.dm +++ b/code/game/objects/items/tcg/tcg.dm @@ -3,7 +3,7 @@ /obj/item/tcgcard name = "Coder" - desc = "Wow, a mint condition coder card! Better tell the Github all about this!" + desc = "Wow, a mint condition coder card! Better tell the GitHub all about this!" icon = DEFAULT_TCG_DMI_ICON icon_state = "runtime" w_class = WEIGHT_CLASS_TINY @@ -151,7 +151,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) /obj/item/tcgcard/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE @@ -249,7 +249,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) /obj/item/tcgcard_deck/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE @@ -332,11 +332,11 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) /obj/item/cardpack name = "Trading Card Pack: Coder" - desc = "Contains six complete fuckups by the coders. Report this on github please!" + desc = "Contains six complete fuckups by the coders. Report this on GitHub please!" icon = 'icons/obj/toys/tcgmisc.dmi' icon_state = "error" w_class = WEIGHT_CLASS_TINY - custom_price = PAYCHECK_CREW * 0.75 //Price reduced from * 2 to * 0.75, this is planned as a temporary measure until card persistance is added. + custom_price = PAYCHECK_CREW * 0.75 //Price reduced from * 2 to * 0.75, this is planned as a temporary measure until card persistence is added. ///The card series to look in var/series = "MEME" ///Chance of the pack having a coin in it out of 10 @@ -351,7 +351,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) "epic" = 30, "legendary" = 5, "misprint" = 1) - ///The amount of cards to draw from the guarenteed rarity table + ///The amount of cards to draw from the guaranteed rarity table var/guaranteed_count = 1 ///The guaranteed rarity table, acts about the same as the rarity table. it can have as many or as few raritys as you'd like var/list/guar_rarity = list( @@ -400,7 +400,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) new /obj/item/tcgcard(get_turf(user), series, template) to_chat(user, span_notice("Wow! Check out these cards!")) new /obj/effect/decal/cleanable/wrapping(get_turf(user)) - playsound(loc, 'sound/items/poster_ripped.ogg', 20, TRUE) + playsound(loc, 'sound/items/poster/poster_ripped.ogg', 20, TRUE) if(prob(contains_coin)) to_chat(user, span_notice("...and it came with a flipper, too!")) new /obj/item/coin/thunderdome(get_turf(user)) @@ -434,7 +434,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) atom_storage.max_total_storage = 120 atom_storage.max_slots = 60 -///Returns a list of cards ids of card_cnt weighted by rarity from the pack's tables that have matching series, with gnt_cnt of the guarenteed table. +///Returns a list of cards ids of card_cnt weighted by rarity from the pack's tables that have matching series, with gnt_cnt of the guaranteed table. /obj/item/cardpack/proc/buildCardListWithRarity(card_cnt, rarity_cnt) var/list/toReturn = list() //You can always get at least one of some rarity @@ -453,7 +453,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) weight += rarity_table[chance] var/random = rand(weight) for(var/bracket in rarity_table) - //Steals blatently from pick_weight(), sorry buddy I need the index + //Steals blatantly from pick_weight(), sorry buddy I need the index random -= rarity_table[bracket] if(random <= 0) rarity = bracket @@ -469,12 +469,12 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) log_runtime("The index [rarity] of rarity_table does not exist in the global cache") return toReturn -//All of these values should be overriden by either a template or a card itself +//All of these values should be overridden by either a template or a card itself /datum/card ///Unique ID, for use in lookups and (eventually) for persistence. MAKE SURE THIS IS UNIQUE FOR EACH CARD IN AS SERIES, OR THE ENTIRE SYSTEM WILL BREAK, AND I WILL BE VERY DISAPPOINTED. var/id = "coder" var/name = "Coder" - var/desc = "Wow, a mint condition coder card! Better tell the Github all about this!" + var/desc = "Wow, a mint condition coder card! Better tell the GitHub all about this!" ///This handles any extra rules for the card, i.e. extra attributes, special effects, etc. If you've played any other card game, you know how this works. var/rules = "There are no rules here. There is no escape. No Recall or Intervention can work in this place." var/icon = DEFAULT_TCG_DMI diff --git a/code/game/objects/items/tcg/tcg_machines.dm b/code/game/objects/items/tcg/tcg_machines.dm index 78854afdd5b39..7a55e2e9554f7 100644 --- a/code/game/objects/items/tcg/tcg_machines.dm +++ b/code/game/objects/items/tcg/tcg_machines.dm @@ -90,7 +90,7 @@ GLOBAL_LIST_EMPTY(tcgcard_machine_radial_choices) /obj/machinery/trading_card_holder/attack_hand_secondary(mob/user) if(isnull(current_summon)) - var/card_name = tgui_input_text(user, "Insert card name", "Blank Card Naming", "blank card", MAX_NAME_LEN) + var/card_name = tgui_input_text(user, "Insert card name", "Blank Card Naming", "blank card", max_length = MAX_NAME_LEN) if(isnull(card_name) || !user.can_perform_action(src)) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN current_summon = new /obj/structure/trading_card_summon/blank(locate(x + summon_offset_x, y + summon_offset_y, z)) @@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(tcgcard_machine_radial_choices) /obj/machinery/trading_card_holder/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE @@ -356,7 +356,7 @@ GLOBAL_LIST_EMPTY(tcgcard_mana_bar_radial_choices) /obj/machinery/trading_card_button/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index 6d50f36028e62..d3fc2b0803bb7 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -195,7 +195,7 @@ var/teleport_location_key = tgui_input_list(user, "Teleporter to lock on", "Hand Teleporter", sort_list(locations)) if (isnull(teleport_location_key)) return - if(user.get_active_held_item() != src || user.incapacitated()) + if(user.get_active_held_item() != src || user.incapacitated) return // Not always a datum, but needed for IS_WEAKREF_OF to cast properly. @@ -344,6 +344,8 @@ var/maximum_teleport_distance = 8 //How far the emergency teleport checks for a safe position var/parallel_teleport_distance = 3 + // How much blood lost per teleport (out of base 560 blood) + var/bleed_amount = 20 /obj/item/syndicate_teleporter/Initialize(mapload) . = ..() @@ -370,7 +372,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/holder = loc balloon_alert(holder, "teleporter beeps") - playsound(src, 'sound/machines/twobeep.ogg', 10, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) + playsound(src, 'sound/machines/beep/twobeep.ogg', 10, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) /obj/item/syndicate_teleporter/emp_act(severity) . = ..() @@ -432,7 +434,10 @@ charges = max(charges - 1, 0) new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(current_location) new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(destination) - make_bloods(current_location, destination, user) + if(make_bloods(current_location, destination, user)) + new /obj/effect/temp_visual/circle_wave/syndi_teleporter/bloody(destination) + else + new /obj/effect/temp_visual/circle_wave/syndi_teleporter(destination) playsound(current_location, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) playsound(destination, 'sound/effects/phasein.ogg', 25, 1, SHORT_RANGE_SOUND_EXTRARANGE) playsound(destination, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) @@ -468,11 +473,14 @@ new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(emergency_destination) balloon_alert(user, "emergency teleport triggered!") - if (!HAS_TRAIT(user, TRAIT_NOBLOOD)) - make_bloods(mobloc, emergency_destination, user) + if(make_bloods(destination, emergency_destination, user)) + new /obj/effect/temp_visual/circle_wave/syndi_teleporter/bloody(destination) + else + new /obj/effect/temp_visual/circle_wave/syndi_teleporter(destination) playsound(mobloc, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) playsound(emergency_destination, 'sound/effects/phasein.ogg', 25, 1, SHORT_RANGE_SOUND_EXTRARANGE) playsound(emergency_destination, SFX_PORTAL_ENTER, 50, 1, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/warning-buzzer.ogg', 25, TRUE) else //We tried to save. We failed. Death time. get_fragged(user, destination) @@ -484,7 +492,7 @@ new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(destination) playsound(mobloc, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) playsound(destination, SFX_PORTAL_ENTER, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - playsound(destination, 'sound/magic/disintegrate.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(destination, 'sound/effects/magic/disintegrate.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(!not_holding_tele) to_chat(victim, span_userdanger("You teleport into [destination], [src] tries to save you, but...")) else @@ -500,16 +508,45 @@ victim.apply_damage(20, BRUTE) victim.Paralyze(6 SECONDS) to_chat(victim, span_warning("[user] teleports into you, knocking you to the floor with the bluespace wave!")) + victim.throw_at(get_step_rand(victim), 1, 1, user, spin = TRUE) ///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/living/user) + if(HAS_TRAIT(user, TRAIT_NOBLOOD)) + return FALSE user.add_splatter_floor(old_location) user.add_splatter_floor(new_location) if(!iscarbon(user)) - return + return FALSE var/mob/living/carbon/carbon_user = user - carbon_user.bleed(10) + // always lose a bit + carbon_user.bleed(bleed_amount * 0.25) + // sometimes lose a lot + // average evens out to 10 per teleport, but the randomness spices things up + if(prob(25) && bleed_amount) + playsound(src, 'sound/effects/wounds/pierce1.ogg', 40, vary = TRUE) + visible_message(span_warning("Blood visibly spurts out of [user] as [src] fails to teleport [user.p_their()] body properly!"), \ + span_boldwarning("Blood visibly spurts out of you as [src] fails to teleport your body properly!")) + carbon_user.bleed(bleed_amount * 0.75) + carbon_user.spray_blood(pick(GLOB.alldirs), rand(1, 3)) + return TRUE + + return FALSE + // retval used for picking wave type + +/// Visual effect spawned when teleporting +/obj/effect/temp_visual/circle_wave/syndi_teleporter + duration = 0.25 SECONDS + color = COLOR_SYNDIE_RED + max_alpha = 100 + amount_to_scale = 0.8 + +/obj/effect/temp_visual/circle_wave/syndi_teleporter/bloody + duration = 0.25 SECONDS + color = COLOR_VIVID_RED + max_alpha = 160 + amount_to_scale = 1 /obj/item/paper/syndicate_teleporter name = "Teleporter Guide" diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index 41edfaea37e88..a2efbe2d4beba 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -187,7 +187,7 @@ if(!isliving(hit_atom)) return ..() 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 + if(victim.incorporeal_move || HAS_TRAIT(victim, TRAIT_GODMODE)) //try to keep this in sync with supermatter's consume fail conditions return ..() var/mob/thrower = throwingdatum?.get_thrower() if(thrower) @@ -208,7 +208,7 @@ /obj/item/nuke_core/supermatter_sliver/pickup(mob/living/user) ..() - if(!isliving(user) || user.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions + if(!isliving(user) || HAS_TRAIT(user, TRAIT_GODMODE)) //try to keep this in sync with supermatter's consume fail conditions return FALSE user.visible_message(span_danger("[user] reaches out and tries to pick up [src]. [user.p_their()] body starts to glow and bursts into flames before flashing into dust!"),\ span_userdanger("You reach for [src] with your hands. That was dumb."),\ @@ -247,13 +247,6 @@ if(ismob(loc)) to_chat(loc, span_warning("[src] is permanently sealed, [sliver] is safely contained.")) -/obj/item/nuke_core_container/supermatter/attackby(obj/item/hemostat/supermatter/tongs, mob/user) - if(istype(tongs)) - //try to load shard into core - load(tongs, user) - else - return ..() - /obj/item/scalpel/supermatter name = "supermatter scalpel" desc = "A scalpel with a fragile tip of condensed hyper-noblium gas, searingly cold to the touch, that can safely shave a sliver off a supermatter crystal." @@ -261,7 +254,7 @@ icon_state = "supermatter_scalpel" toolspeed = 0.5 damtype = BURN - usesound = 'sound/weapons/bladeslice.ogg' + usesound = 'sound/items/weapons/bladeslice.ogg' var/usesLeft /obj/item/scalpel/supermatter/Initialize(mapload) @@ -295,11 +288,15 @@ /obj/item/hemostat/supermatter/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!sliver) - return NONE + return ..() + if (istype(interacting_with, /obj/item/nuke_core_container/supermatter)) + var/obj/item/nuke_core_container/supermatter/container = interacting_with + container.load(src, user) + return ITEM_INTERACT_SUCCESS if(ismovable(interacting_with) && interacting_with != sliver) Consume(interacting_with, user) return ITEM_INTERACT_SUCCESS - return NONE + return ..() /obj/item/hemostat/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // no instakill supermatter javelins if(sliver) @@ -314,7 +311,7 @@ if(!isliving(AM)) return var/mob/living/victim = AM - if(victim.incorporeal_move || victim.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions + if(victim.incorporeal_move || HAS_TRAIT(victim, TRAIT_GODMODE)) //try to keep this in sync with supermatter's consume fail conditions return victim.investigate_log("has been dusted by [src].", INVESTIGATE_DEATHS) victim.dust() diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 20e3846adefab..b98ace86cf006 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -6,8 +6,8 @@ inhand_icon_state = "crowbar" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - usesound = 'sound/items/crowbar.ogg' - operating_sound = 'sound/items/crowbar_prying.ogg' + usesound = 'sound/items/tools/crowbar.ogg' + operating_sound = 'sound/items/tools/crowbar_prying.ogg' obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT force = 5 @@ -15,8 +15,8 @@ demolition_mod = 1.25 w_class = WEIGHT_CLASS_SMALL custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.5) - drop_sound = 'sound/items/handling/crowbar_drop.ogg' - pickup_sound = 'sound/items/handling/crowbar_pickup.ogg' + drop_sound = 'sound/items/handling/tools/crowbar_drop.ogg' + pickup_sound = 'sound/items/handling/tools/crowbar_pickup.ogg' attack_verb_continuous = list("attacks", "bashes", "batters", "bludgeons", "whacks") attack_verb_simple = list("attack", "bash", "batter", "bludgeon", "whack") @@ -35,7 +35,7 @@ /obj/item/crowbar/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/genhit.ogg', 50, TRUE, -1) return BRUTELOSS /obj/item/crowbar/red @@ -47,7 +47,7 @@ name = "alien crowbar" desc = "A hard-light crowbar. It appears to pry by itself, without any effort required." icon = 'icons/obj/antags/abductor.dmi' - usesound = 'sound/weapons/sonic_jackhammer.ogg' + usesound = 'sound/items/weapons/sonic_jackhammer.ogg' custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) icon_state = "crowbar" belt_icon_state = "crowbar_alien" @@ -115,7 +115,7 @@ 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*2.25, /datum/material/silver = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/titanium = SHEET_MATERIAL_AMOUNT*1.75) - usesound = 'sound/items/jaws_pry.ogg' + usesound = 'sound/items/tools/jaws_pry.ogg' force = 15 w_class = WEIGHT_CLASS_NORMAL toolspeed = 0.7 @@ -152,7 +152,7 @@ tool_behaviour = (active ? TOOL_WIRECUTTER : TOOL_CROWBAR) if(user) balloon_alert(user, "attached [active ? "cutting" : "prying"]") - playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/change_jaws.ogg', 50, TRUE) if(tool_behaviour == TOOL_CROWBAR) RemoveElement(/datum/element/cuffsnapping, snap_time_weak_handcuffs, snap_time_strong_handcuffs) else @@ -174,10 +174,10 @@ /obj/item/crowbar/power/suicide_act(mob/living/user) if(tool_behaviour == TOOL_CROWBAR) user.visible_message(span_suicide("[user] is putting [user.p_their()] head in [src], it looks like [user.p_theyre()] trying to commit suicide!")) - playsound(loc, 'sound/items/jaws_pry.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/tools/jaws_pry.ogg', 50, TRUE, -1) else user.visible_message(span_suicide("[user] is wrapping \the [src] around [user.p_their()] neck. It looks like [user.p_theyre()] trying to rip [user.p_their()] head off!")) - playsound(loc, 'sound/items/jaws_cut.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/tools/jaws_cut.ogg', 50, TRUE, -1) if(iscarbon(user)) var/mob/living/carbon/suicide_victim = user var/obj/item/bodypart/target_bodypart = suicide_victim.get_bodypart(BODY_ZONE_HEAD) @@ -192,7 +192,7 @@ icon = 'icons/obj/items_cyborg.dmi' icon_state = "toolkit_engiborg_crowbar" worn_icon_state = "toolkit_engiborg_crowbar" //error sprite - this shouldn't have been dropped - usesound = 'sound/items/jaws_pry.ogg' + usesound = 'sound/items/tools/jaws_pry.ogg' force = 10 toolspeed = 0.5 @@ -234,7 +234,7 @@ user.log_message("tried to pry open [mech], located at [loc_name(mech)], which is currently occupied by [mech.occupants.Join(", ")].", LOG_ATTACK) var/mech_dir = mech.dir mech.balloon_alert(user, "prying open...") - playsound(mech, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) + playsound(mech, 'sound/machines/airlock/airlock_alien_prying.ogg', 100, TRUE) 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 @@ -243,7 +243,7 @@ if(isAI(occupant)) continue mech.mob_exit(occupant, randomstep = TRUE) - playsound(mech, 'sound/machines/airlockforced.ogg', 75, TRUE) + playsound(mech, 'sound/machines/airlock/airlockforced.ogg', 75, TRUE) /obj/item/crowbar/mechremoval/proc/extra_checks(obj/vehicle/sealed/mecha/mech, mech_dir) return HAS_TRAIT(src, TRAIT_WIELDED) && LAZYLEN(mech.occupants) && mech.dir == mech_dir diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index b9e0d15e69f6e..8cf9005d19137 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -20,14 +20,14 @@ custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.75) attack_verb_continuous = list("stabs") attack_verb_simple = list("stab") - hitsound = 'sound/weapons/bladeslice.ogg' - usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg') - operating_sound = 'sound/items/screwdriver_operating.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' + usesound = list('sound/items/tools/screwdriver.ogg', 'sound/items/tools/screwdriver2.ogg') + operating_sound = 'sound/items/tools/screwdriver_operating.ogg' tool_behaviour = TOOL_SCREWDRIVER toolspeed = 1 armor_type = /datum/armor/item_screwdriver - drop_sound = 'sound/items/handling/screwdriver_drop.ogg' - pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg' + drop_sound = 'sound/items/handling/tools/screwdriver_drop.ogg' + pickup_sound = 'sound/items/handling/tools/screwdriver_pickup.ogg' sharpness = SHARP_POINTY greyscale_config = /datum/greyscale_config/screwdriver greyscale_config_inhand_left = /datum/greyscale_config/screwdriver_inhand_left @@ -68,7 +68,7 @@ icon_state = "screwdriver_a" inhand_icon_state = "screwdriver_nuke" custom_materials = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) - usesound = 'sound/items/pshoom.ogg' + usesound = 'sound/items/pshoom/pshoom.ogg' toolspeed = 0.1 random_color = FALSE greyscale_config_inhand_left = null @@ -93,8 +93,8 @@ throw_range = 3//it's heavier than a screw driver/wrench, so it does more damage, but can't be thrown as far 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' + hitsound = 'sound/items/tools/drill_hit.ogg' + usesound = 'sound/items/tools/drill_use.ogg' w_class = WEIGHT_CLASS_NORMAL toolspeed = 0.7 random_color = FALSE @@ -130,7 +130,7 @@ tool_behaviour = (active ? TOOL_WRENCH : TOOL_SCREWDRIVER) if(user) balloon_alert(user, "attached [active ? "bolt bit" : "screw bit"]") - playsound(src, 'sound/items/change_drill.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/change_drill.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/screwdriver/power/examine() @@ -142,7 +142,7 @@ user.visible_message(span_suicide("[user] is putting [src] to [user.p_their()] temple. It looks like [user.p_theyre()] trying to commit suicide!")) else user.visible_message(span_suicide("[user] is pressing [src] against [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(loc, 'sound/items/drill_use.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/tools/drill_use.ogg', 50, TRUE, -1) return BRUTELOSS /obj/item/screwdriver/cyborg @@ -150,8 +150,8 @@ desc = "A powerful automated screwdriver, designed to be both precise and quick." icon = 'icons/obj/items_cyborg.dmi' icon_state = "toolkit_engiborg_screwdriver" - hitsound = 'sound/items/drill_hit.ogg' - usesound = 'sound/items/drill_use.ogg' + hitsound = 'sound/items/tools/drill_hit.ogg' + usesound = 'sound/items/tools/drill_use.ogg' toolspeed = 0.5 random_color = FALSE diff --git a/code/game/objects/items/tools/spess_knife.dm b/code/game/objects/items/tools/spess_knife.dm index 9fd5dbb01582a..4019aa41c701d 100644 --- a/code/game/objects/items/tools/spess_knife.dm +++ b/code/game/objects/items/tools/spess_knife.dm @@ -68,7 +68,7 @@ update_tool_parameters() update_appearance(UPDATE_ICON_STATE) - playsound(src, 'sound/weapons/empty.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/empty.ogg', 50, TRUE) /// Used to pick random tool behavior for the knife /obj/item/spess_knife/proc/pick_tool() diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index a5a7235257b56..01342aeb05b3d 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -1,5 +1,3 @@ -/// How many seconds between each fuel depletion tick ("use" proc) -#define WELDER_FUEL_BURN_INTERVAL 5 /obj/item/weldingtool name = "welding tool" desc = "A standard edition welder provided by Nanotrasen." @@ -14,9 +12,9 @@ force = 3 throwforce = 5 hitsound = SFX_SWING_HIT - usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg') - drop_sound = 'sound/items/handling/weldingtool_drop.ogg' - pickup_sound = 'sound/items/handling/weldingtool_pickup.ogg' + usesound = list('sound/items/tools/welder.ogg', 'sound/items/tools/welder2.ogg') + drop_sound = 'sound/items/handling/tools/weldingtool_drop.ogg' + pickup_sound = 'sound/items/handling/tools/weldingtool_pickup.ogg' light_system = OVERLAY_LIGHT light_range = 2 light_power = 1.5 @@ -30,8 +28,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 + bare_wound_bonus = 15 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 @@ -48,8 +46,8 @@ /// When fuel was last removed. var/burned_fuel_for = 0 - var/activation_sound = 'sound/items/welderactivate.ogg' - var/deactivation_sound = 'sound/items/welderdeactivate.ogg' + var/activation_sound = 'sound/items/tools/welderactivate.ogg' + var/deactivation_sound = 'sound/items/tools/welderdeactivate.ogg' /datum/armor/item_weldingtool fire = 100 @@ -89,7 +87,7 @@ force = 15 damtype = BURN burned_fuel_for += seconds_per_tick - if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL) + if(burned_fuel_for >= TOOL_FUEL_BURN_INTERVAL) use(TRUE) update_appearance() @@ -244,7 +242,7 @@ playsound(loc, activation_sound, 50, TRUE) force = 15 damtype = BURN - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' update_appearance() START_PROCESSING(SSobj, src) else @@ -276,16 +274,17 @@ return welding /// If welding tool ran out of fuel during a construction task, construction fails. -/obj/item/weldingtool/tool_use_check(mob/living/user, amount) +/obj/item/weldingtool/tool_use_check(mob/living/user, amount, heat_required) if(!isOn() || !check_fuel()) to_chat(user, span_warning("[src] has to be on to complete this task!")) return FALSE - - if(get_fuel() >= amount) - return TRUE - else + if(get_fuel() < amount) to_chat(user, span_warning("You need more welding fuel to complete this task!")) return FALSE + if(heat < heat_required) + to_chat(user, span_warning("[src] is not hot enough to complete this task!")) + return FALSE + return TRUE /// Ran when the welder is attacked by a screwdriver. /obj/item/weldingtool/proc/flamethrower_screwdriver(obj/item/tool, mob/user) @@ -410,6 +409,3 @@ if(get_fuel() < max_fuel && nextrefueltick < world.time) nextrefueltick = world.time + 10 reagents.add_reagent(/datum/reagent/fuel, 1) - - -#undef WELDER_FUEL_BURN_INTERVAL diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 380ff539b2bfe..4865ef561f487 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -22,11 +22,11 @@ custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.8) attack_verb_continuous = list("pinches", "nips") attack_verb_simple = list("pinch", "nip") - hitsound = 'sound/items/wirecutter.ogg' - usesound = 'sound/items/wirecutter.ogg' - operating_sound = 'sound/items/wirecutter_cut.ogg' - drop_sound = 'sound/items/handling/wirecutter_drop.ogg' - pickup_sound = 'sound/items/handling/wirecutter_pickup.ogg' + hitsound = 'sound/items/tools/wirecutter.ogg' + usesound = 'sound/items/tools/wirecutter.ogg' + operating_sound = 'sound/items/tools/wirecutter_cut.ogg' + drop_sound = 'sound/items/handling/tools/wirecutter_drop.ogg' + pickup_sound = 'sound/items/handling/tools/wirecutter_pickup.ogg' tool_behaviour = TOOL_WIRECUTTER toolspeed = 1 armor_type = /datum/armor/item_wirecutters diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index aa72b5d257ac6..41b4556ebace5 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -13,11 +13,11 @@ throwforce = 7 demolition_mod = 1.25 w_class = WEIGHT_CLASS_SMALL - usesound = 'sound/items/ratchet.ogg' - operating_sound = list('sound/items/ratchet_fast.ogg', 'sound/items/ratchet_slow.ogg') + usesound = 'sound/items/tools/ratchet.ogg' + operating_sound = list('sound/items/tools/ratchet_fast.ogg', 'sound/items/tools/ratchet_slow.ogg') custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*1.5) - drop_sound = 'sound/items/handling/wrench_drop.ogg' - pickup_sound = 'sound/items/handling/wrench_pickup.ogg' + drop_sound = 'sound/items/handling/tools/wrench_drop.ogg' + pickup_sound = 'sound/items/handling/tools/wrench_pickup.ogg' attack_verb_continuous = list("bashes", "batters", "bludgeons", "whacks") attack_verb_simple = list("bash", "batter", "bludgeon", "whack") @@ -35,7 +35,7 @@ /obj/item/wrench/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/genhit.ogg', 50, TRUE, -1) return BRUTELOSS /obj/item/wrench/abductor @@ -124,7 +124,7 @@ tool_behaviour = active ? TOOL_WRENCH : initial(tool_behaviour) if(user) balloon_alert(user, "[name] [active ? "active, woe!":"restrained"]") - playsound(src, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 5, TRUE) + playsound(src, active ? 'sound/items/weapons/saberon.ogg' : 'sound/items/weapons/saberoff.ogg', 5, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/wrench/bolter diff --git a/code/game/objects/items/toy_mechs.dm b/code/game/objects/items/toy_mechs.dm index 1b3367032c190..9aa8ef8ea0259 100644 --- a/code/game/objects/items/toy_mechs.dm +++ b/code/game/objects/items/toy_mechs.dm @@ -96,7 +96,7 @@ return FALSE //dead men tell no tales, incapacitated men fight no fights - if(attacker_controller.incapacitated()) + if(attacker_controller.incapacitated) return FALSE //if the attacker_controller isn't next to the attacking toy (and doesn't have telekinesis), the battle ends if(!in_range(attacker, attacker_controller) && !(attacker_controller.dna.check_mutation(/datum/mutation/human/telekinesis))) @@ -106,7 +106,7 @@ //if it's PVP and the opponent is not next to the defending(src) toy (and doesn't have telekinesis), the battle ends if(opponent) - if(opponent.incapacitated()) + if(opponent.incapacitated) return FALSE if(!in_range(src, opponent) && !(opponent.dna.check_mutation(/datum/mutation/human/telekinesis))) opponent.visible_message(span_notice("[opponent.name] separates from [src], ending the battle."), \ @@ -129,7 +129,7 @@ to_chat(user, span_notice("You play with [src].")) timer = world.time + cooldown if(!quiet) - playsound(user, 'sound/mecha/mechstep.ogg', 20, TRUE) + playsound(user, 'sound/vehicles/mecha/mechstep.ogg', 20, TRUE) else . = ..() @@ -193,7 +193,7 @@ to_chat(user, span_notice("You telekinetically play with [src].")) timer = world.time + cooldown if(!quiet) - playsound(user, 'sound/mecha/mechstep.ogg', 20, TRUE) + playsound(user, 'sound/vehicles/mecha/mechstep.ogg', 20, TRUE) return COMPONENT_CANCEL_ATTACK_CHAIN @@ -224,12 +224,12 @@ switch(i) if(1, 3) SpinAnimation(5, 0) - playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE) + playsound(src, 'sound/vehicles/mecha/mechstep.ogg', 30, TRUE) user.adjustBruteLoss(25) user.adjustStaminaLoss(50) if(2) user.SpinAnimation(5, 0) - playsound(user, 'sound/weapons/smash.ogg', 20, TRUE) + playsound(user, 'sound/items/weapons/smash.ogg', 20, TRUE) combat_health-- //we scratched it! if(4) say(special_attack_cry + "!!") @@ -330,7 +330,7 @@ span_danger("You begin charging [attacker]'s special attack!")) else //just attack attacker.SpinAnimation(5, 0) - playsound(attacker, 'sound/mecha/mechstep.ogg', 30, TRUE) + playsound(attacker, 'sound/vehicles/mecha/mechstep.ogg', 30, TRUE) combat_health-- attacker_controller.visible_message(span_danger("[attacker] devastates [src]!"), \ span_danger("You ram [attacker] into [src]!"), \ @@ -357,7 +357,7 @@ span_danger("[src] and [attacker] clash dramatically, causing sparks to fly!"), \ span_hear("You hear hard plastic rubbing against hard plastic."), COMBAT_MESSAGE_RANGE) if(5) //both win - playsound(attacker, 'sound/weapons/parry.ogg', 20, TRUE) + playsound(attacker, 'sound/items/weapons/parry.ogg', 20, TRUE) if(prob(50)) attacker_controller.visible_message(span_danger("[src]'s attack deflects off of [attacker]."), \ span_danger("[src]'s attack deflects off of [attacker]."), \ @@ -374,7 +374,7 @@ span_danger("You begin charging [src]'s special attack!")) else //just attack SpinAnimation(5, 0) - playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE) + playsound(src, 'sound/vehicles/mecha/mechstep.ogg', 30, TRUE) attacker.combat_health-- src_controller.visible_message(span_danger("[src] smashes [attacker]!"), \ span_danger("You smash [src] into [attacker]!"), \ @@ -476,14 +476,14 @@ switch(special_attack_type) if(SPECIAL_ATTACK_DAMAGE) //+2 damage victim.combat_health-=2 - playsound(src, 'sound/weapons/marauder.ogg', 20, TRUE) + playsound(src, 'sound/items/weapons/marauder.ogg', 20, TRUE) if(SPECIAL_ATTACK_HEAL) //+2 healing combat_health+=2 - playsound(src, 'sound/mecha/mech_shield_raise.ogg', 20, TRUE) + playsound(src, 'sound/vehicles/mecha/mech_shield_raise.ogg', 20, TRUE) if(SPECIAL_ATTACK_UTILITY) //+1 heal, +1 damage victim.combat_health-- combat_health++ - playsound(src, 'sound/mecha/mechmove01.ogg', 30, TRUE) + playsound(src, 'sound/vehicles/mecha/mechmove01.ogg', 30, TRUE) if(SPECIAL_ATTACK_OTHER) //other super_special_attack(victim) else @@ -571,7 +571,7 @@ special_attack_cry = "MEGA HORN" /obj/item/toy/mecha/honk/super_special_attack(obj/item/toy/mecha/victim) - playsound(src, 'sound/machines/honkbot_evil_laugh.ogg', 20, TRUE) + playsound(src, 'sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg', 20, TRUE) victim.special_attack_cooldown += 3 //Adds cooldown to the other mech and gives a minor self heal combat_health++ @@ -605,7 +605,7 @@ special_attack_cry = "KILLER CLAMP" /obj/item/toy/mecha/deathripley/super_special_attack(obj/item/toy/mecha/victim) - playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 20, TRUE) + playsound(src, 'sound/items/weapons/sonic_jackhammer.ogg', 20, TRUE) if(victim.combat_health < combat_health) //Instantly kills the other mech if its health is below ours. say("EXECUTE!!") victim.combat_health = 0 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 1c82bffbf7c7e..6f47661d93a63 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -199,7 +199,7 @@ return ..() /obj/item/toy/balloon/proc/pop_balloon(monkey_pop = FALSE) - playsound(src, 'sound/effects/cartoon_pop.ogg', 50, vary = TRUE) + playsound(src, 'sound/effects/cartoon_sfx/cartoon_pop.ogg', 50, vary = TRUE) if(monkey_pop) // Monkeys make money from popping bloons new /obj/item/coin/iron(get_turf(src)) qdel(src) @@ -398,7 +398,7 @@ /obj/item/toy/captainsaid/attack_self(mob/living/user) current_mode++ - playsound(src, 'sound/items/screwdriver2.ogg', 50, vary = TRUE) + playsound(src, 'sound/items/tools/screwdriver2.ogg', 50, vary = TRUE) if (current_mode <= modes.len) balloon_alert(user, "set to [current_mode]") else @@ -531,9 +531,9 @@ src.add_fingerprint(user) if (src.bullets < 1) user.show_message(span_warning("*click*"), MSG_AUDIBLE) - playsound(src, 'sound/weapons/gun/revolver/dry_fire.ogg', 30, TRUE) + playsound(src, 'sound/items/weapons/gun/revolver/dry_fire.ogg', 30, TRUE) return ITEM_INTERACT_SUCCESS - playsound(user, 'sound/weapons/gun/revolver/shot.ogg', 100, TRUE) + playsound(user, 'sound/items/weapons/gun/revolver/shot.ogg', 100, TRUE) src.bullets-- user.visible_message(span_danger("[user] fires [src] at [interacting_with]!"), \ span_danger("You fire [src] at [interacting_with]!"), \ @@ -606,7 +606,7 @@ if(user) balloon_alert(user, "[active ? "flicked out":"pushed in"] [src]") - playsound(src, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 20, TRUE) + playsound(src, active ? 'sound/items/weapons/saberon.ogg' : 'sound/items/weapons/saberoff.ogg', 20, TRUE) update_appearance(UPDATE_ICON) return COMPONENT_NO_DEFAULT_MESSAGE @@ -697,9 +697,9 @@ inhand_icon_state = "artistic_toolbox" lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' - hitsound = 'sound/weapons/smash.ogg' - drop_sound = 'sound/items/handling/toolbox_drop.ogg' - pickup_sound = 'sound/items/handling/toolbox_pickup.ogg' + hitsound = 'sound/items/weapons/smash.ogg' + drop_sound = 'sound/items/handling/toolbox/toolbox_drop.ogg' + pickup_sound = 'sound/items/handling/toolbox/toolbox_pickup.ogg' attack_verb_continuous = list("robusts") attack_verb_simple = list("robust") var/active = FALSE @@ -747,7 +747,7 @@ active = FALSE update_appearance() visible_message(span_warning("[src] slowly stops rattling and falls still, its latch snapping shut.")) //subtle difference - playsound(loc, 'sound/weapons/batonextend.ogg', 100, TRUE) + playsound(loc, 'sound/items/weapons/batonextend.ogg', 100, TRUE) animate(src, transform = matrix()) /* @@ -790,7 +790,7 @@ w_class = WEIGHT_CLASS_NORMAL attack_verb_continuous = list("attacks", "slashes", "stabs", "slices") attack_verb_simple = list("attack", "slash", "stab", "slice") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' /* * Snap pops @@ -963,7 +963,7 @@ cooldown = world.time + 600 user.audible_message(span_hear("You hear the click of a button."), self_message = span_notice("You activate [src], it plays a loud noise!")) sleep(0.5 SECONDS) - playsound(src, 'sound/machines/alarm.ogg', 20, FALSE) + playsound(src, 'sound/announcer/alarm/nuke_alarm.ogg', 20, FALSE) sleep(14 SECONDS) user.visible_message(span_alert("[src] violently explodes!")) explosion(src, light_impact_range = 1) @@ -973,7 +973,7 @@ user.visible_message(span_warning("[user] presses a button on [src]."), span_notice("You activate [src], it plays a loud noise!"), span_hear("You hear the click of a button.")) sleep(0.5 SECONDS) icon_state = "nuketoy" - playsound(src, 'sound/machines/alarm.ogg', 20, FALSE) + playsound(src, 'sound/announcer/alarm/nuke_alarm.ogg', 20, FALSE) sleep(13.5 SECONDS) icon_state = "nuketoycool" sleep(cooldown - world.time) @@ -1032,7 +1032,7 @@ if (cooldown < world.time) cooldown = (world.time + 300) // Sets cooldown at 30 seconds user.visible_message(span_warning("[user] presses the big red button."), span_notice("You press the button, it plays a loud noise!"), span_hear("The button clicks loudly.")) - playsound(src, 'sound/effects/explosionfar.ogg', 50, FALSE) + playsound(src, 'sound/effects/explosion/explosionfar.ogg', 50, FALSE) for(var/mob/M in urange(10, src)) // Checks range if(!M.stat && !isAI(M)) // Checks to make sure whoever's getting shaken is alive/not the AI // Short delay to match up with the explosion sound @@ -1104,7 +1104,7 @@ if (cooldown < world.time) cooldown = world.time + 1800 //3 minutes user.visible_message(span_warning("[user] rotates a cogwheel on [src]."), span_notice("You rotate a cogwheel on [src], it plays a loud noise!"), span_hear("You hear cogwheels turning.")) - playsound(src, 'sound/magic/clockwork/ark_activation.ogg', 50, FALSE) + playsound(src, 'sound/effects/magic/clockwork/ark_activation.ogg', 50, FALSE) else to_chat(user, span_alert("The cogwheels are already turning!")) @@ -1134,7 +1134,6 @@ name = "xenomorph action figure" desc = "MEGA presents the new Xenos Isolated action figure! Comes complete with realistic sounds! Pull back string to use." w_class = WEIGHT_CLASS_SMALL - item_flags = XENOMORPH_HOLDABLE var/cooldown = 0 /obj/item/toy/toy_xeno/attack_self(mob/user) @@ -1144,7 +1143,7 @@ icon_state = "[initial(icon_state)]_used" sleep(0.5 SECONDS) audible_message(span_danger("[icon2html(src, viewers(src))] Hiss!")) - var/list/possible_sounds = list('sound/voice/hiss1.ogg', 'sound/voice/hiss2.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss4.ogg') + var/list/possible_sounds = list('sound/mobs/non-humanoids/hiss/hiss1.ogg', 'sound/mobs/non-humanoids/hiss/hiss2.ogg', 'sound/mobs/non-humanoids/hiss/hiss3.ogg', 'sound/mobs/non-humanoids/hiss/hiss4.ogg') var/chosen_sound = pick(possible_sounds) playsound(get_turf(src), chosen_sound, 50, TRUE) addtimer(VARSET_CALLBACK(src, icon_state, "[initial(icon_state)]"), 4.5 SECONDS) @@ -1216,7 +1215,7 @@ name = "\improper Cyborg action figure" icon_state = "borg" toysay = "I. LIVE. AGAIN." - toysound = 'sound/voice/liveagain.ogg' + toysound = 'sound/mobs/non-humanoids/cyborg/liveagain.ogg' /obj/item/toy/figure/botanist name = "\improper Botanist action figure" @@ -1359,7 +1358,7 @@ name = "\improper Wizard action figure" icon_state = "wizard" toysay = "EI NATH!" - toysound = 'sound/magic/disintegrate.ogg' + toysound = 'sound/effects/magic/disintegrate.ogg' /obj/item/toy/figure/rd name = "\improper Research Director action figure" @@ -1370,13 +1369,13 @@ name = "\improper Roboticist action figure" icon_state = "roboticist" toysay = "Big stompy mechs!" - toysound = 'sound/mecha/mechstep.ogg' + toysound = 'sound/vehicles/mecha/mechstep.ogg' /obj/item/toy/figure/scientist name = "\improper Scientist action figure" icon_state = "scientist" toysay = "I call ordnance." - toysound = 'sound/effects/explosionfar.ogg' + toysound = 'sound/effects/explosion/explosionfar.ogg' /obj/item/toy/figure/syndie name = "\improper Nuclear Operative action figure" @@ -1405,7 +1404,7 @@ //Add changing looks when i feel suicidal about making 20 inhands for these. /obj/item/toy/dummy/attack_self(mob/user) - var/new_name = tgui_input_text(usr, "What would you like to name the dummy?", "Doll Name", doll_name, MAX_NAME_LEN) + var/new_name = tgui_input_text(usr, "What would you like to name the dummy?", "Doll Name", doll_name, max_length = MAX_NAME_LEN) if(!new_name || !user.is_holding(src)) return doll_name = new_name @@ -1461,7 +1460,7 @@ /obj/item/toy/braintoy/attack_self(mob/user) if(cooldown <= world.time) cooldown = (world.time + 10) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, 'sound/effects/blobattack.ogg', 50, FALSE), 0.5 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, 'sound/effects/blob/blobattack.ogg', 50, FALSE), 0.5 SECONDS) /* * Eldritch Toys @@ -1563,7 +1562,7 @@ GLOBAL_LIST_EMPTY(intento_players) #define DISARM "disarm" #define GRAB "grab" #define HARM "harm" -#define ICON_SPLIT world.icon_size/2 +#define ICON_SPLIT ICON_SIZE_ALL/2 // These states do not have any associated processing. #define STATE_AWAITING_PLAYER_INPUT "awaiting_player_input" @@ -1638,7 +1637,7 @@ GLOBAL_LIST_EMPTY(intento_players) /obj/item/toy/intento/proc/boot() say("Game starting!") - playsound(src, 'sound/machines/synth_yes.ogg', 50, FALSE) + playsound(src, 'sound/machines/synth/synth_yes.ogg', 50, FALSE) state = STATE_STARTING COOLDOWN_START(src, next_process, TIME_TO_BEGIN) @@ -1717,7 +1716,7 @@ GLOBAL_LIST_EMPTY(intento_players) user.client.give_award(/datum/award/score/intento_score, user, award_score) say("GAME OVER. Your score was [score]!") - playsound(src, 'sound/machines/synth_no.ogg', 50, FALSE) + playsound(src, 'sound/machines/synth/synth_no.ogg', 50, FALSE) if(user && loc == user && obj_flags & EMAGGED) ADD_TRAIT(src, TRAIT_NODROP, type) diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index ff540932f31b7..82636c0ee8514 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -85,10 +85,6 @@ desc = "In the Mothic Fleet every individual wrapper is carefully recycled and repurposed into fresh material. Over here they are more commonly dropped directly onto the floor." icon_state = "moth_ration" -/obj/item/trash/waffles - name = "waffles tray" - icon_state = "waffles" - /obj/item/trash/pistachios name = "pistachios pack" icon_state = "pistachios_pack" diff --git a/code/game/objects/items/wall_mounted.dm b/code/game/objects/items/wall_mounted.dm index ef19205cf8063..2db970b556ae1 100644 --- a/code/game/objects/items/wall_mounted.dm +++ b/code/game/objects/items/wall_mounted.dm @@ -61,9 +61,9 @@ /obj/item/wallframe/screwdriver_act(mob/living/user, obj/item/tool) // For camera-building borgs - var/turf/T = get_step(get_turf(user), user.dir) - if(iswallturf(T)) - T.attackby(src, user) + var/turf/wall_turf = get_step(get_turf(user), user.dir) + if(iswallturf(wall_turf)) + wall_turf.item_interaction(user, src) return ITEM_INTERACT_SUCCESS /obj/item/wallframe/wrench_act(mob/living/user, obj/item/tool) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 821f994a1ed6f..bddc056b99ef8 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -67,7 +67,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 . = "A sacred weapon of the higher castes from the clown planet, used to strike fear into the hearts of their foes. Wield it with care." /obj/item/balloon_mallet/attack(mob/living/target, mob/living/user) - playsound(loc, 'sound/creatures/clown/hehe.ogg', 20) + playsound(loc, 'sound/mobs/non-humanoids/clown/hehe.ogg', 20) if (!isliving(target)) return switch(target.mob_mood.sanity) @@ -94,7 +94,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 force = 2 throwforce = 1 w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' 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") @@ -111,7 +111,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 inhand_icon_state = "claymore" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK force = 40 @@ -120,7 +120,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 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 = 50 - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' sharpness = SHARP_EDGED max_integrity = 200 armor_type = /datum/armor/item_claymore @@ -332,7 +332,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 user.update_held_items() name = new_name - playsound(user, 'sound/items/screwdriver2.ogg', 50, TRUE) + playsound(user, 'sound/items/tools/screwdriver2.ogg', 50, TRUE) /obj/item/claymore/highlander/robot //BLOODTHIRSTY BORGS NOW COME IN PLAID icon = 'icons/obj/items_cyborg.dmi' @@ -363,11 +363,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 force = 40 throwforce = 10 w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' 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 = 50 - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' sharpness = SHARP_EDGED max_integrity = 200 armor_type = /datum/armor/item_katana @@ -447,7 +447,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throw_speed = 3 throw_range = 6 custom_materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 6) - hitsound = 'sound/weapons/genhit.ogg' + hitsound = 'sound/items/weapons/genhit.ogg' attack_verb_continuous = list("stubs", "pokes") attack_verb_simple = list("stub", "poke") resistance_flags = FIRE_PROOF @@ -472,7 +472,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 throwforce_on = 23, \ throw_speed_on = throw_speed, \ sharpness_on = SHARP_EDGED, \ - hitsound_on = 'sound/weapons/bladeslice.ogg', \ + hitsound_on = 'sound/items/weapons/bladeslice.ogg', \ w_class_on = WEIGHT_CLASS_NORMAL, \ attack_verb_continuous_on = list("slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts"), \ attack_verb_simple_on = list("slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut"), \ @@ -504,7 +504,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 w_class = WEIGHT_CLASS_SMALL attack_verb_continuous = list("calls", "rings") attack_verb_simple = list("call", "ring") - hitsound = 'sound/weapons/ring.ogg' + hitsound = 'sound/items/weapons/ring.ogg' /obj/item/phone/suicide_act(mob/living/user) if(locate(/obj/structure/chair/stool) in user.loc) @@ -518,7 +518,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 desc = "A long bamboo-made staff with steel-capped ends. It is rumoured that initiates of Spider Clan train with such before getting to learn how to use a katana." force = 10 block_chance = 45 - block_sound = 'sound/weapons/genhit.ogg' + block_sound = 'sound/items/weapons/genhit.ogg' slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY hitsound = SFX_SWING_HIT @@ -675,7 +675,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(user) balloon_alert(user, active ? "extended" : "collapsed") - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/staff @@ -892,7 +892,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 to_chat(user, span_warning("You're already ready to do a home run!")) return ..() to_chat(user, span_warning("You begin gathering strength...")) - playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, TRUE) + playsound(get_turf(src), 'sound/effects/magic/lightning_chargeup.ogg', 65, TRUE) if(do_after(user, 9 SECONDS, target = src)) to_chat(user, span_userdanger("You gather power! Time for a home run!")) homerun_ready = TRUE @@ -910,7 +910,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(!QDELETED(target)) target.throw_at(throw_target, rand(8,10), 14, user) SSexplosions.medturf += throw_target - playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, TRUE) + playsound(get_turf(src), 'sound/items/weapons/homerun.ogg', 100, TRUE) homerun_ready = FALSE return else if(!QDELETED(target) && !target.anchored) @@ -963,7 +963,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 return TRUE /obj/item/melee/baseball_bat/proc/launch_back(atom/movable/target, mob/living/user, turf/target_turf, datum_throw_speed) - playsound(target, 'sound/magic/tail_swing.ogg', 50, TRUE) + playsound(target, 'sound/effects/magic/tail_swing.ogg', 50, TRUE) REMOVE_TRAIT(user, TRAIT_IMMOBILIZED, type) target.mouse_opacity = initial(target.mouse_opacity) target.add_filter("baseball_launch", 3, motion_blur_filter(1, 3)) @@ -994,7 +994,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 force = 20 throwforce = 20 mob_thrower = TRUE - block_sound = 'sound/weapons/effects/batreflect.ogg' + block_sound = 'sound/items/weapons/effects/batreflect.ogg' /obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers return TRUE @@ -1110,11 +1110,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT block_chance = 20 - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' sharpness = SHARP_EDGED force = 14 throwforce = 12 - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' 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") @@ -1137,7 +1137,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 attack_speed = CLICK_CD_HYPER_RAPID embed_type = /datum/embed_data/hfr_blade block_chance = 25 - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' sharpness = SHARP_EDGED w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK @@ -1169,7 +1169,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(attack_type == PROJECTILE_ATTACK) if(HAS_TRAIT(src, TRAIT_WIELDED) || prob(final_block_chance)) owner.visible_message(span_danger("[owner] deflects [attack_text] with [src]!")) - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) + playsound(src, pick('sound/items/weapons/bulletflyby.ogg', 'sound/items/weapons/bulletflyby2.ogg', 'sound/items/weapons/bulletflyby3.ogg'), 75, TRUE) return TRUE return FALSE if(prob(final_block_chance * (HAS_TRAIT(src, TRAIT_WIELDED) ? 2 : 1))) @@ -1200,8 +1200,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 user.do_attack_animation(target, "nothing") var/list/modifiers = params2list(params) var/damage_mod = 1 - var/x_slashed = text2num(modifiers[ICON_X]) || world.icon_size/2 //in case we arent called by a client - var/y_slashed = text2num(modifiers[ICON_Y]) || world.icon_size/2 //in case we arent called by a client + var/x_slashed = text2num(modifiers[ICON_X]) || ICON_SIZE_X/2 //in case we arent called by a client + var/y_slashed = text2num(modifiers[ICON_Y]) || ICON_SIZE_Y/2 //in case we arent called by a client new /obj/effect/temp_visual/slash(get_turf(target), target, x_slashed, y_slashed, slash_color) if(target == previous_target?.resolve()) //if the same target, we calculate a damage multiplier if you swing your mouse around var/x_mod = previous_x - x_slashed @@ -1210,8 +1210,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 previous_target = WEAKREF(target) previous_x = x_slashed previous_y = y_slashed - playsound(src, 'sound/weapons/bladeslice.ogg', 100, vary = TRUE) - playsound(src, 'sound/weapons/zapbang.ogg', 50, vary = TRUE) + playsound(src, 'sound/items/weapons/bladeslice.ogg', 100, vary = TRUE) + playsound(src, 'sound/items/weapons/zapbang.ogg', 50, vary = TRUE) if(isliving(target)) var/mob/living/living_target = target living_target.apply_damage(force*damage_mod, BRUTE, sharpness = SHARP_EDGED, wound_bonus = wound_bonus, bare_wound_bonus = bare_wound_bonus, def_zone = user.zone_selected) @@ -1249,7 +1249,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 var/matrix/new_transform = matrix() new_transform.Turn(rand(1, 360)) // Random slash angle var/datum/decompose_matrix/decomp = target.transform.decompose() - new_transform.Translate((x_slashed - world.icon_size/2) * decomp.scale_x, (y_slashed - world.icon_size/2) * decomp.scale_y) // Move to where we clicked + new_transform.Translate((x_slashed - ICON_SIZE_X/2) * decomp.scale_x, (y_slashed - ICON_SIZE_Y/2) * decomp.scale_y) // Move to where we clicked //Follow target's transform while ignoring scaling new_transform.Turn(decomp.rotation) new_transform.Translate(decomp.shift_x, decomp.shift_y) diff --git a/code/game/objects/items/wiki_manuals.dm b/code/game/objects/items/wiki_manuals.dm index 7209d76cc5735..d64c565f04adf 100644 --- a/code/game/objects/items/wiki_manuals.dm +++ b/code/game/objects/items/wiki_manuals.dm @@ -1,31 +1,5 @@ // 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 @@ -37,9 +11,10 @@ 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. + if(tgui_alert(user, "This book's page will open in your browser. Are you sure?", "Open The Wiki", list("Yes", "No")) != "Yes") + return + usr << link("[wiki_url]/[page_link]") /obj/item/book/manual/wiki/chemistry name = "Chemistry Textbook" @@ -223,6 +198,3 @@ 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 index 34676e18bf02d..e5750c06bb2d4 100644 --- a/code/game/objects/items/wizard_weapons.dm +++ b/code/game/objects/items/wizard_weapons.dm @@ -66,7 +66,7 @@ if(isliving(target)) var/mob/living/smacked = target smacked.take_bodypart_damage(20, 0) - playsound(user, 'sound/weapons/marauder.ogg', 50, TRUE) + playsound(user, 'sound/items/weapons/marauder.ogg', 50, TRUE) vortex(get_turf(target), user) addtimer(VARSET_CALLBACK(src, charged, TRUE), 10 SECONDS) diff --git a/code/game/objects/items_reskin.dm b/code/game/objects/items_reskin.dm index 9fa3b91d0e198..f8bffa7bf5f63 100644 --- a/code/game/objects/items_reskin.dm +++ b/code/game/objects/items_reskin.dm @@ -81,6 +81,6 @@ return FALSE if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 92ca803177ec5..ae369dc190776 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -68,7 +68,7 @@ /obj/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) if(attack_generic(user, 60, BRUTE, MELEE, 0)) - playsound(src.loc, 'sound/weapons/slash.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/weapons/slash.ogg', 100, TRUE) /obj/attack_animal(mob/living/simple_animal/user, list/modifiers) . = ..() diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 1b9282be66182..0a88aade6978f 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -187,9 +187,11 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) . = ..() if(desc_controls) . += span_notice(desc_controls) - if(obj_flags & UNIQUE_RENAME) - . += span_notice("Use a pen on it to rename it or change its description.") +/obj/examine_tags(mob/user) + . = ..() + if(obj_flags & UNIQUE_RENAME) + .["renameable"] = "Use a pen on it to rename it or change its description." /obj/analyzer_act(mob/living/user, obj/item/analyzer/tool) if(atmos_scan(user=user, target=src, silent=FALSE)) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index ff6e6e171bb06..e6c9579d67936 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -32,7 +32,7 @@ QUEUE_SMOOTH_NEIGHBORS(src) return ..() -/obj/structure/ui_act(action, params) +/obj/structure/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) add_fingerprint(usr) return ..() @@ -58,6 +58,9 @@ if(!broken) return span_warning("It's falling apart!") +/obj/structure/examine_descriptor(mob/user) + return "structure" + /obj/structure/rust_heretic_act() take_damage(500, BRUTE, "melee", 1) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 5c219aaa4a946..4a5ee234c7742 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -61,7 +61,6 @@ /obj/structure/ai_core/Destroy() if(istype(remote_ai)) - remote_ai.break_core_link() remote_ai = null QDEL_NULL(circuit) QDEL_NULL(core_mmi) @@ -72,7 +71,7 @@ . = ..() if(. > 0 && istype(remote_ai)) to_chat(remote_ai, span_danger("Your core is under attack!")) - + /obj/structure/ai_core/deactivated icon_state = "ai-empty" diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index f0c855e7c74d9..120b91a40ffbc 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -24,12 +24,12 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE) + playsound(loc, 'sound/effects/blob/attackblob.ogg', 100, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) if(damage_amount) - playsound(loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 100, TRUE) /* * Generic alien stuff, not related to the purple lizards but still alien-like @@ -392,7 +392,7 @@ return if(BURST) to_chat(user, span_notice("You clear the hatched egg.")) - playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE) + playsound(loc, 'sound/effects/blob/attackblob.ogg', 100, TRUE) qdel(src) return if(GROWING) diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index 681724f4d40e1..131e08808fbdb 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -38,7 +38,7 @@ unbuckle_mob(captive) add_fingerprint(hero) return - + captive.visible_message(span_warning("[captive.name] struggles to break free from the gelatinous resin!"), span_notice("You struggle to break free from the gelatinous resin... (Stay still for about a minute and a half.)"), span_hear("You hear squelching...")) @@ -56,7 +56,7 @@ add_fingerprint(hero) /obj/structure/bed/nest/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) - if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.incapacitated() || M.buckled ) + if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.incapacitated || M.buckled ) return if(M.get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel)) @@ -95,9 +95,9 @@ /obj/structure/bed/nest/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE) + playsound(loc, 'sound/effects/blob/attackblob.ogg', 100, TRUE) if(BURN) - playsound(loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/bed/nest/attack_alien(mob/living/carbon/alien/user, list/modifiers) if(!user.combat_mode) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 0fb193a057a14..9131a28e6eb06 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -15,6 +15,7 @@ anchored = TRUE can_buckle = TRUE buckle_lying = 90 + buckle_dir = SOUTH resistance_flags = FLAMMABLE max_integrity = 100 integrity_failure = 0.35 @@ -26,12 +27,15 @@ var/elevation = 8 /// If this bed can be deconstructed using a wrench var/can_deconstruct = TRUE + /// Directions in which the bed has its headrest on the left side. + var/left_headrest_dirs = NORTHEAST /obj/structure/bed/Initialize(mapload) . = ..() AddElement(/datum/element/soft_landing) if(elevation) AddElement(/datum/element/elevation, pixel_shift = elevation) + update_buckle_vars(dir) register_context() /obj/structure/bed/examine(mob/user) @@ -51,6 +55,13 @@ context[SCREENTIP_CONTEXT_LMB] = "Unbuckle" return CONTEXTUAL_SCREENTIP_SET +/obj/structure/bed/setDir(newdir) + . = ..() + update_buckle_vars(newdir) + +/obj/structure/bed/proc/update_buckle_vars(newdir) + buckle_lying = newdir & left_headrest_dirs ? 270 : 90 + /obj/structure/bed/atom_deconstruct(disassembled = TRUE) if(build_stack_type) new build_stack_type(loc, build_stack_amount) @@ -74,6 +85,8 @@ icon_state = "med_down" base_icon_state = "med" anchored = FALSE + left_headrest_dirs = SOUTHWEST + buckle_lying = 270 resistance_flags = NONE build_stack_type = /obj/item/stack/sheet/mineral/titanium build_stack_amount = 1 diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 28d84e32ef094..ee0bc80047772 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -16,7 +16,17 @@ var/buildstacktype = /obj/item/stack/sheet/iron var/buildstackamount = 1 var/item_chair = /obj/item/chair // if null it can't be picked up + ///How much sitting on this chair influences fishing difficulty + var/fishing_modifier = -3 +/obj/structure/chair/Initialize(mapload) + . = ..() + if(prob(0.2)) + name = "tactical [name]" + fishing_modifier -= 4 + MakeRotate() + if(can_buckle && fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /obj/structure/chair/examine(mob/user) . = ..() @@ -24,12 +34,6 @@ if(!has_buckled_mobs() && can_buckle) . += span_notice("While standing on [src], drag and drop your sprite onto [src] to buckle to it.") -/obj/structure/chair/Initialize(mapload) - . = ..() - if(prob(0.2)) - name = "tactical [name]" - MakeRotate() - ///This proc adds the rotate component, overwrite this if you for some reason want to change some specific args. /obj/structure/chair/proc/MakeRotate() AddComponent(/datum/component/simple_rotation, ROTATION_IGNORE_ANCHORED|ROTATION_GHOSTS_ALLOWED) @@ -75,7 +79,7 @@ to_chat(user, span_notice("You connect the shock kit to the [name], electrifying it ")) else user.put_in_active_hand(input_shock_kit) - to_chat(user, " You cannot fit the shock kit onto the [name]!") + to_chat(user, span_notice("You cannot fit the shock kit onto the [name]!")) /obj/structure/chair/wrench_act_secondary(mob/living/user, obj/item/weapon) @@ -139,6 +143,7 @@ buildstacktype = /obj/item/stack/sheet/mineral/wood buildstackamount = 3 item_chair = /obj/item/chair/wood + fishing_modifier = -4 /obj/structure/chair/wood/narsie_act() return @@ -156,6 +161,7 @@ max_integrity = 70 buildstackamount = 2 item_chair = null + fishing_modifier = -5 // The mutable appearance used for the overlay over buckled mobs. var/mutable_appearance/armrest @@ -231,11 +237,13 @@ desc = "A luxurious chair, the many purple scales reflect the light in a most pleasing manner." icon_state = "carp_chair" buildstacktype = /obj/item/stack/sheet/animalhide/carp + fishing_modifier = -10 /obj/structure/chair/office anchored = FALSE buildstackamount = 5 item_chair = null + fishing_modifier = -4 icon_state = "officechair_dark" /obj/structure/chair/office/Initialize(mapload) @@ -250,6 +258,10 @@ /obj/structure/chair/office/tactical name = "tactical swivel chair" +/obj/structure/chair/office/tactical/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -10) + /obj/structure/chair/office/light icon_state = "officechair_white" @@ -321,7 +333,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) throwforce = 10 demolition_mod = 1.25 throw_range = 3 - hitsound = 'sound/items/trayhit1.ogg' + hitsound = 'sound/items/trayhit/trayhit1.ogg' hit_reaction_chance = 50 custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) item_flags = SKIP_FANTASY_ON_SPAWN @@ -411,7 +423,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) name = "bamboo stool" icon_state = "bamboo_stool" inhand_icon_state = "stool_bamboo" - hitsound = 'sound/weapons/genhit1.ogg' + hitsound = 'sound/items/weapons/genhit1.ogg' origin_type = /obj/structure/chair/stool/bamboo break_chance = 50 //Submissive and breakable unlike the chad iron stool @@ -424,7 +436,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) inhand_icon_state = "woodenchair" resistance_flags = FLAMMABLE max_integrity = 70 - hitsound = 'sound/weapons/genhit1.ogg' + hitsound = 'sound/items/weapons/genhit1.ogg' origin_type = /obj/structure/chair/wood custom_materials = null break_chance = 50 @@ -441,6 +453,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) desc = "You sit in this. Either by will or force. Looks REALLY uncomfortable." icon_state = "chairold" item_chair = null + fishing_modifier = 4 /obj/structure/chair/bronze name = "brass chair" @@ -450,6 +463,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) buildstacktype = /obj/item/stack/sheet/bronze buildstackamount = 1 item_chair = null + fishing_modifier = -12 //the pinnacle of Ratvarian technology. /// Total rotations made var/turns = 0 @@ -489,6 +503,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) item_chair = null obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION alpha = 0 + fishing_modifier = -20 //it only lives for 25 seconds, so we make them worth it. /obj/structure/chair/mime/wrench_act_secondary(mob/living/user, obj/item/weapon) return NONE @@ -510,6 +525,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) buildstacktype = /obj/item/stack/sheet/plastic buildstackamount = 2 item_chair = /obj/item/chair/plastic + fishing_modifier = -8 /obj/structure/chair/plastic/post_buckle_mob(mob/living/Mob) Mob.pixel_y += 2 diff --git a/code/game/objects/structures/beds_chairs/sofa.dm b/code/game/objects/structures/beds_chairs/sofa.dm index bf9a221929b67..04bb0b1e25e3f 100644 --- a/code/game/objects/structures/beds_chairs/sofa.dm +++ b/code/game/objects/structures/beds_chairs/sofa.dm @@ -19,6 +19,7 @@ path/corner/color_name {\ icon = 'icons/obj/chairs_wide.dmi' buildstackamount = 1 item_chair = null + fishing_modifier = -4 var/mutable_appearance/armrest /obj/structure/chair/sofa/Initialize(mapload) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 02a0e320d1ffb..a843c3e3e4bff 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -38,7 +38,7 @@ LINEN BINS /obj/item/bedsheet/Initialize(mapload) . = ..() AddComponent(/datum/component/surgery_initiator) - AddElement(/datum/element/bed_tuckable, mapload, 0, 12, 0) + AddElement(/datum/element/bed_tuckable, mapload, 0, 0, 0) if(bedsheet_type == BEDSHEET_DOUBLE) stack_amount *= 2 dying_key = DYE_REGISTRY_DOUBLE_BEDSHEET diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm index a26a2f9278437..e6f7edd939628 100644 --- a/code/game/objects/structures/bonfire.dm +++ b/code/game/objects/structures/bonfire.dm @@ -73,8 +73,8 @@ if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) return //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) - used_item.pixel_x = used_item.base_pixel_x + clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) - used_item.pixel_y = used_item.base_pixel_y + clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) + used_item.pixel_x = used_item.base_pixel_x + clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(ICON_SIZE_X/2), ICON_SIZE_X/2) + used_item.pixel_y = used_item.base_pixel_y + clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(ICON_SIZE_Y/2), ICON_SIZE_Y/2) else return ..() @@ -185,6 +185,13 @@ /obj/structure/bonfire/dense density = TRUE +/obj/structure/bonfire/dense/prelit/Initialize(mapload) + . = ..() + return INITIALIZE_HINT_LATELOAD + +/obj/structure/bonfire/dense/prelit/LateInitialize() + start_burning() + /obj/structure/bonfire/prelit/Initialize(mapload) . = ..() return INITIALIZE_HINT_LATELOAD diff --git a/code/game/objects/structures/cannons/cannon.dm b/code/game/objects/structures/cannons/cannon.dm index 3a10cc17189f8..66c827442bf32 100644 --- a/code/game/objects/structures/cannons/cannon.dm +++ b/code/game/objects/structures/cannons/cannon.dm @@ -17,7 +17,7 @@ var/charge_ignited = FALSE var/fire_delay = 15 var/charge_size = 15 - var/fire_sound = 'sound/weapons/gun/general/cannon.ogg' + var/fire_sound = 'sound/items/weapons/gun/general/cannon.ogg' /obj/structure/cannon/Initialize(mapload) . = ..() diff --git a/code/game/objects/structures/cannons/cannon_instructions.dm b/code/game/objects/structures/cannons/cannon_instructions.dm index c259ea0e76f17..34cdcdf1ced68 100644 --- a/code/game/objects/structures/cannons/cannon_instructions.dm +++ b/code/game/objects/structures/cannons/cannon_instructions.dm @@ -17,4 +17,10 @@ REGULAR CANNONBALL: A fine choice for killing landlubbers! Will take off any lim EXPLOSIVE SHELLBALL: The most elegant in breaching (er killin', if you're good at aimin') tools, ye be packing this shell with many scuppering chemicals! Just make sure to not fire it when ye be close to target!
MALFUNCTION SHOT: A very gentle "cannonball" dart at first glance, but make no mistake: This is their worst nightmare! Enjoy an easy boarding process while all their machines are broken and all their weapons unloaded from an EMP!
THE BIGGEST ONE: A shellball, but much bigger. Ye won't be seein' much of these as they were discontinued for sinkin' the firer's ship as often as it sunk the scallywag's ship. Very big boom! If ye have one, ye have been warned! + +
FIRING THAR CANISTER GATLING
+ +THE CANISTER GATLING AIN'T LIKE OTHER CANNONS, AND DOESN'T REQUIRE GUNPOWDER, INSTEAD RELYING ON SPECIAL CANISTER SHOT SHELLS. +ALL YOU HAVE TO DO IS CRAM A SHELL IN THE BREACH, LIGHT HER UP AND YOU'LL BE BLOWING THOSE CORPORATE SODS TO KINGDOM COME! +SHE LACKS THE SHEER WALL-BREAKING PUNCH OF THE HOLEMAKERS, BUT CHEWS THROUGH SOFT TARGETS LIKE A SHARK THROUGH A GROUP OF BEACH THROUGH A GROUP OF BEACHGOERS, YAHAR. "} diff --git a/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm b/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm new file mode 100644 index 0000000000000..f0fa9e27d7869 --- /dev/null +++ b/code/game/objects/structures/cannons/mounted_guns/mounted_gun.dm @@ -0,0 +1,187 @@ +//Mounted guns are basically a smaller equivalent to cannons, designed to use pre-existing ammo rather than cannonballs. +//Due to using pre-existing ammo, they dont require to be loaded with gunpowder or an equivalent. + +/obj/structure/mounted_gun + name = "Mounted Gun" + desc = "Default mounted gun for inheritance purposes." + density = TRUE + anchored = FALSE + icon = 'icons/obj/weapons/cannons.dmi' + icon_state = "falconet_patina" + var/icon_state_base = "falconet_patina" + var/icon_state_fire = "falconet_patina_fire" + max_integrity = 300 + ///whether the cannon can be unwrenched from the ground. Anchorable_cannon equivalent. + var/anchorable_gun = TRUE + ///Max shots per firing of the gun. + var/max_shots_per_fire = 1 + ///Shots currently loaded. Should never be more than max_shots_per_fire. + var/shots_in_gun = 1 + ///shots added to gun, per piece of ammo loaded. + var/shots_per_load = 1 + ///Accepted "ammo" type + var/obj/item/ammo_type = /obj/item/ammo_casing/strilka310 + ///Projectile from said gun. Doesnt automatically inherit said ammo's projectile in case you wanted to make a gun that shoots floor tiles or something. + var/obj/item/projectile_type = /obj/projectile/bullet/strilka310 + ///If the gun has anything in it. + var/loaded_gun = TRUE + ///If the gun is currently loaded with its maximum capacity. + var/fully_loaded_gun = TRUE + ///delay in firing the gun after lighting + var/fire_delay = 5 + ///Delay between shots + var/shot_delay = 3 + ///If the gun shakes the camera when firing + var/firing_shakes_camera = TRUE + ///sound of firing for all but last shot + var/fire_sound = 'sound/items/weapons/gun/general/mountedgun.ogg' + ///sound of firing for last shot + var/last_fire_sound = 'sound/items/weapons/gun/general/mountedgunend.ogg' + +/obj/structure/mounted_gun/wrench_act(mob/living/user, obj/item/tool) + . = ..() + if(!anchorable_gun) /// Can't anchor an unanchorable gun. + return FALSE + default_unfasten_wrench(user, tool) + return ITEM_INTERACT_SUCCESS + +///Covers Reloading and lighting of the gun +/obj/structure/mounted_gun/attackby(obj/item/ammo_casing/used_item, mob/user, params) + var/ignition_message = used_item.ignition_effect(src, user) // Checks if item used can ignite stuff. + if(istype(used_item, ammo_type)) + if(fully_loaded_gun) + balloon_alert(user, "already fully loaded!") + return + else + shots_in_gun = shots_in_gun + shots_per_load //Add one to the shots in the gun + + loaded_gun = TRUE // Make sure it registers theres ammo in there, so it can fire. + QDEL_NULL(used_item) + if(shots_in_gun >= max_shots_per_fire) + shots_in_gun = max_shots_per_fire // in case of somehow firing only some of a guns shots, and reloading, you still cant get above the maximum ammo size. + fully_loaded_gun = TRUE //So you cant load extra. + return + + else if(ignition_message) // if item the player used ignites, light the gun! + visible_message(ignition_message) + user.log_message("fired a cannon", LOG_ATTACK) + log_game("[key_name(user)] fired a cannon in [AREACOORD(src)]") + addtimer(CALLBACK(src, PROC_REF(fire)), fire_delay) //uses fire proc as shown below to shoot the gun + return + ..() + +/obj/structure/mounted_gun/proc/fire() + if (!loaded_gun) + balloon_alert_to_viewers("gun is not loaded!","",2) + return + for(var/times_fired = 1, times_fired <= shots_in_gun, times_fired++) //The normal DM for loop structure since the times it has fired is changing in the loop itself. + for(var/mob/shaken_mob in urange(10, src)) + if(shaken_mob.stat == CONSCIOUS && firing_shakes_camera == TRUE) + shake_camera(shaken_mob, 3, 1) + icon_state = icon_state_fire + if(loaded_gun) + + if (times_fired < shots_in_gun) + playsound(src, fire_sound, 50, FALSE, 5) + else + playsound(src, last_fire_sound, 50, TRUE, 5) + var/obj/projectile/fired_projectile = new projectile_type(get_turf(src)) + fired_projectile.firer = src + fired_projectile.fired_from = src + fired_projectile.fire(dir2angle(dir)) + sleep(shot_delay) + loaded_gun = FALSE + shots_in_gun = 0 + fully_loaded_gun = FALSE + icon_state = icon_state_base + +/obj/structure/mounted_gun/pipe + + name = "Pipe Organ Gun" + desc = "To become master over one who has killed, one must become a better killer. This engine of destruction is one of many things made to that end." + icon_state = "pipeorgangun" + icon_state_base = "pipeorgangun" + icon_state_fire = "pipeorgangun_fire" + anchored = FALSE + anchorable_gun = TRUE + max_shots_per_fire = 8 + shots_in_gun = 8 + shots_per_load = 2 + ammo_type = /obj/item/ammo_casing/junk + projectile_type = /obj/projectile/bullet/junk + loaded_gun = TRUE + fully_loaded_gun = TRUE + fire_delay = 3 + shot_delay = 2 + firing_shakes_camera = FALSE + +/obj/structure/mounted_gun/pipe/examine_more(mob/user) + . = ..() + . += span_notice("Looking down at the [name], you recall a tale told to you in some distant memory...") + + . += span_info("To commit an act of vengeance is not unlike to enter a blood pact with a devil, ending the life of another, at the cost of your own.") + . += span_info("When humanity first spilled the blood of its own kind, with likely nothing more than a rock, the seal was broken. Vengeance was borne unto the world.") + . += span_info("However, vengeance alone is not enough to carry through the grim deed of murder. One must an gain advantage over their adversary.") + . += span_info("As such, the man who ended another's life with a stone, was in turn smote himself by another wielding a spear. After spears, bows. Swords. Guns. Tanks. Missiles. And on and on Vengeance fed. Growing stronger. Growing Worse.") + . += span_info("Vengeance persists to this day. It sometimes may slumber, seemingly content with having gorged itself, but in the end, its ceaseless hunger can be neither numbed nor sated.") + +/obj/structure/mounted_gun/pipe/fire() + if (!loaded_gun) + balloon_alert_to_viewers("Gun is not loaded!","",2) + return + for(var/times_fired = 1, times_fired <= shots_in_gun, times_fired++) //The normal DM for loop structure since the times it has fired is changing in the loop itself. + for(var/mob/shaken_mob in urange(10, src)) + if((shaken_mob.stat == CONSCIOUS)&&(firing_shakes_camera == TRUE)) + shake_camera(shaken_mob, 3, 1) + icon_state = icon_state_fire + if(loaded_gun) + playsound(src, fire_sound, 50, TRUE, 5) + + var/list_of_projectiles = list( + /obj/projectile/bullet/junk = 40, + /obj/projectile/bullet/incendiary/fire/junk = 25, + /obj/projectile/bullet/junk/shock = 25, + /obj/projectile/bullet/junk/hunter = 20, + /obj/projectile/bullet/junk/phasic = 8, + /obj/projectile/bullet/junk/ripper = 8, + /obj/projectile/bullet/junk/reaper = 3, + ) + projectile_type = pick_weight(list_of_projectiles) + + var/obj/projectile/fired_projectile = new projectile_type(get_turf(src)) + fired_projectile.firer = src + fired_projectile.fired_from = src + fired_projectile.fire(dir2angle(dir)) + sleep(shot_delay) + loaded_gun = FALSE + shots_in_gun = 0 + fully_loaded_gun = FALSE + icon_state = icon_state_base + +/obj/structure/mounted_gun/canister_gatling //for the funny skeleton pirates! + + name = "Canister Gatling Gun" + desc = "''Quantity has a quality of its own.''" + icon_state = "canister_gatling" + icon_state_base = "canister_gatling" + icon_state_fire = "canister_gatling_fire" + anchored = FALSE + anchorable_gun = TRUE + max_shots_per_fire = 50 + shots_per_load = 50 + shots_in_gun = 50 + ammo_type = /obj/item/ammo_casing/canister_shot + projectile_type = /obj/projectile/bullet/shrapnel + loaded_gun = TRUE + fully_loaded_gun = TRUE + fire_delay = 3 + shot_delay = 1 + firing_shakes_camera = FALSE + +/obj/item/ammo_casing/canister_shot + name = "Canister Shot" + desc = "A gigantic... well, canister of canister shot. Used for reloading the Canister Gatling Gun." + icon_state = "canister_shot" + obj_flags = CONDUCTS_ELECTRICITY + throwforce = 0 + w_class = WEIGHT_CLASS_BULKY diff --git a/code/game/objects/structures/construction_console/construction_actions.dm b/code/game/objects/structures/construction_console/construction_actions.dm index fc014d14318bd..1a6b5deeeae26 100644 --- a/code/game/objects/structures/construction_console/construction_actions.dm +++ b/code/game/objects/structures/construction_console/construction_actions.dm @@ -91,7 +91,7 @@ if(place_turf.density) to_chat(owner, span_warning("[structure_name] may only be placed on a floor.")) return - //Can't place two dense objects inside eachother + //Can't place two dense objects inside each other if(initial(structure_path.density) && place_turf.is_blocked_turf()) to_chat(owner, span_warning("Location is obstructed by something. Please clear the location and try again.")) return @@ -120,7 +120,7 @@ button_icon_state = "build_turret" structure_name = "turrets" structure_path = /obj/machinery/porta_turret/aux_base - place_sound = 'sound/items/drill_use.ogg' + place_sound = 'sound/items/tools/drill_use.ogg' /datum/action/innate/construction/place_structure/turret/after_place(obj/placed_structure, remaining) var/obj/machinery/computer/auxiliary_base/turret_controller = locate() in get_area(placed_structure) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 27e69dcba56f1..58e99dc8839aa 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -56,8 +56,8 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet. var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients. var/cutting_tool = /obj/item/weldingtool - var/open_sound = 'sound/machines/closet_open.ogg' - var/close_sound = 'sound/machines/closet_close.ogg' + var/open_sound = 'sound/machines/closet/closet_open.ogg' + var/close_sound = 'sound/machines/closet/closet_close.ogg' var/open_sound_volume = 35 var/close_sound_volume = 50 var/material_drop = /obj/item/stack/sheet/iron @@ -157,8 +157,8 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) register_context() if(opened) - opened = FALSE //nessassary because open() proc will early return if its true - if(open(special_effects = FALSE)) //closets which are meant to be open by default dont need to be animated open + opened = FALSE //necessary because open() proc will early return if its true + if(open(special_effects = FALSE)) //closets which are meant to be open by default don't need to be animated open return update_appearance() @@ -331,15 +331,15 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) if(id_card) . += span_notice("It can be [EXAMINE_HINT("marked")] with a pen.") if(can_weld_shut && !welded) - . += span_notice("Its can be [EXAMINE_HINT("welded")] shut.") + . += span_notice("It can be [EXAMINE_HINT("welded")] shut.") if(welded) - . += span_notice("Its [EXAMINE_HINT("welded")] shut.") + . += span_notice("It's [EXAMINE_HINT("welded")] shut.") if(anchorable && !anchored) . += span_notice("It can be [EXAMINE_HINT("bolted")] to the ground.") if(anchored) . += 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.") + . += span_notice("It can be [EXAMINE_HINT("painted")] with another texture.") if(HAS_TRAIT(user, TRAIT_SKITTISH) && divable) . += span_notice("If you bump into [p_them()] while running, you will jump inside.") @@ -823,21 +823,24 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) balloon_alert(user, "unlock first!") return - if(isnull(id_card)) + if(isnull(id_card) && secure) balloon_alert(user, "not yours to rename!") return var/name_set = FALSE var/desc_set = FALSE - var/str = tgui_input_text(user, "Personal Locker Name", "Locker Name") - if(!isnull(str)) - name = str + + var/input_name = tgui_input_text(user, "Locker Name", "Locker Name", max_length = MAX_NAME_LEN) + + if(!isnull(input_name)) + name = input_name name_set = TRUE - str = tgui_input_text(user, "Personal Locker Description", "Locker Description") - if(!isnull(str)) - desc = str + var/input_desc = tgui_input_text(user, "Locker Description", "Locker Description", max_length = MAX_DESC_LEN) + + if(!isnull(input_desc)) + desc = input_desc desc_set = TRUE var/bit_flag = NONE @@ -888,7 +891,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) user.log_message("[welded ? "welded":"unwelded"] closet [src] with [weapon]", LOG_GAME) update_appearance() - else if(!user.combat_mode) + else if(!user.combat_mode || (weapon.item_flags & NOBLUDGEON)) var/item_is_id = weapon.GetID() if(!item_is_id) return FALSE @@ -1066,7 +1069,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) addtimer(CALLBACK(src, PROC_REF(check_if_shake)), next_check_time) return TRUE - // If we reach here, nobody is resisting, so dont shake + // If we reach here, nobody is resisting, so don't shake return FALSE /obj/structure/closet/proc/bust_open() @@ -1189,15 +1192,13 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) return if(!opened && ((shove_flags & SHOVE_KNOCKDOWN_BLOCKED) || !(shove_flags & SHOVE_BLOCKED))) return - var/was_opened = opened - if(!toggle()) - return - if(was_opened) - if (!target.Move(get_turf(src), get_dir(target, src))) + if(opened) + if (target.loc != loc) return target.forceMove(src) else target.Knockdown(SHOVE_KNOCKDOWN_SOLID) + toggle() update_icon() target.visible_message(span_danger("[shover.name] shoves [target.name] into [src]!"), span_userdanger("You're shoved into [src] by [shover.name]!"), diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index ac8b444e47dc7..0bb1b564eceb6 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -5,8 +5,8 @@ icon_state = "bodybag" density = FALSE mob_storage_capacity = 2 - open_sound = 'sound/items/zip.ogg' - close_sound = 'sound/items/zip.ogg' + open_sound = 'sound/items/zip/zip.ogg' + close_sound = 'sound/items/zip/zip.ogg' open_sound_volume = 15 close_sound_volume = 15 integrity_failure = 0 @@ -116,8 +116,22 @@ */ /obj/structure/closet/body_bag/proc/perform_fold(mob/living/carbon/human/the_folder) visible_message(span_notice("[the_folder] folds up [src].")) - var/obj/item/bodybag/folding_bodybag = foldedbag_instance || new foldedbag_path - the_folder.put_in_hands(folding_bodybag) + the_folder.put_in_hands(undeploy_bodybag(the_folder.loc)) + +/// Makes the bag into an item, returns that item +/obj/structure/closet/body_bag/proc/undeploy_bodybag(atom/fold_loc) + var/obj/item/bodybag/folding_bodybag = foldedbag_instance || new foldedbag_path() + if(fold_loc) + folding_bodybag.forceMove(fold_loc) + return folding_bodybag + +/obj/structure/closet/body_bag/container_resist_act(mob/living/user, loc_required = TRUE) + // ideally we support this natively but i guess that's for a later time + if(!istype(loc, /obj/machinery/disposal)) + return ..() + for(var/atom/movable/thing as anything in src) + thing.forceMove(loc) + undeploy_bodybag(loc) /obj/structure/closet/body_bag/bluespace name = "bluespace body bag" @@ -152,7 +166,7 @@ /obj/structure/closet/body_bag/bluespace/perform_fold(mob/living/carbon/human/the_folder) visible_message(span_notice("[the_folder] folds up [src].")) - var/obj/item/bodybag/folding_bodybag = foldedbag_instance || new foldedbag_path + var/obj/item/bodybag/folding_bodybag = undeploy_bodybag(the_folder.loc) var/max_weight_of_contents = initial(folding_bodybag.w_class) for(var/am in contents) var/atom/movable/content = am @@ -186,7 +200,7 @@ contents_thermal_insulation = 0.5 foldedbag_path = /obj/item/bodybag/environmental /// The list of weathers we protect from. - var/list/weather_protection = list(TRAIT_ASHSTORM_IMMUNE, TRAIT_RADSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE, TRAIT_VOIDSTORM_IMMUNE) // Does not protect against lava or the The Floor Is Lava spell. + var/list/weather_protection = list(TRAIT_ASHSTORM_IMMUNE, TRAIT_RADSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE) // Does not protect against lava or the The Floor Is Lava spell. /// The contents of the gas to be distributed to an occupant. Set in Initialize() var/datum/gas_mixture/air_contents = null @@ -277,18 +291,9 @@ icon_state = initial(icon_state) /obj/structure/closet/body_bag/environmental/prisoner/container_resist_act(mob/living/user, loc_required = TRUE) - /// copy-pasted with changes because flavor text as well as some other misc stuff - if(opened) - return - if(ismovable(loc)) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - var/atom/movable/location = loc - location.relay_container_resist_act(user, src) - return - if(!sinched) - open(user) - return + // copy-pasted with changes because flavor text as well as some other misc stuff + if(opened || ismovable(loc) || !sinched) + return ..() user.changeNext_move(CLICK_CD_BREAKOUT) user.last_special = world.time + CLICK_CD_BREAKOUT @@ -301,6 +306,8 @@ //we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting user.visible_message(span_danger("[user] successfully broke out of [src]!"), span_notice("You successfully break out of [src]!")) + if(istype(loc, /obj/machinery/disposal)) + return ..() bust_open() else if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. @@ -369,11 +376,11 @@ icon_state = "holobag_med" resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF foldedbag_path = null - weather_protection = list(TRAIT_VOIDSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE) + weather_protection = list(TRAIT_SNOWSTORM_IMMUNE) /obj/structure/closet/body_bag/environmental/hardlight/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) if(damage_type in list(BRUTE, BURN)) - playsound(src, 'sound/weapons/egloves.ogg', 80, TRUE) + playsound(src, 'sound/items/weapons/egloves.ogg', 80, TRUE) /obj/structure/closet/body_bag/environmental/prisoner/hardlight name = "hardlight prisoner bodybag" @@ -381,8 +388,8 @@ icon_state = "holobag_sec" resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF foldedbag_path = null - weather_protection = list(TRAIT_VOIDSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE) + weather_protection = list(TRAIT_SNOWSTORM_IMMUNE) /obj/structure/closet/body_bag/environmental/prisoner/hardlight/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) if(damage_type in list(BRUTE, BURN)) - playsound(src, 'sound/weapons/egloves.ogg', 80, TRUE) + playsound(src, 'sound/items/weapons/egloves.ogg', 80, TRUE) diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index f0d1eaa0cc819..19eb438876483 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -32,7 +32,7 @@ var/move_delay = FALSE /obj/structure/closet/cardboard/relaymove(mob/living/user, direction) - if(opened || move_delay || user.incapacitated() || !isturf(loc) || !has_gravity(loc)) + if(opened || move_delay || user.incapacitated || !isturf(loc) || !has_gravity(loc)) return move_delay = TRUE var/oldloc = loc @@ -72,7 +72,7 @@ for(var/mob/living/alerted_mob as anything in alerted) if(alerted_mob.stat != CONSCIOUS || alerted_mob.is_blind()) continue - if(!alerted_mob.incapacitated(IGNORE_RESTRAINTS)) + if(!INCAPACITATED_IGNORING(alerted_mob, INCAPABLE_RESTRAINTS)) alerted_mob.face_atom(src) alerted_mob.do_alert_animation() @@ -105,8 +105,8 @@ resistance_flags = NONE move_speed_multiplier = 2 cutting_tool = /obj/item/weldingtool - open_sound = 'sound/machines/crate_open.ogg' - close_sound = 'sound/machines/crate_close.ogg' + open_sound = 'sound/machines/crate/crate_open.ogg' + close_sound = 'sound/machines/crate/crate_close.ogg' open_sound_volume = 35 close_sound_volume = 50 material_drop = /obj/item/stack/sheet/plasteel diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index f2171b2e8b1b0..24e9c93bdb97c 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -3,8 +3,8 @@ desc = "Old will forever be in fashion." icon_state = "cabinet" resistance_flags = FLAMMABLE - open_sound = 'sound/machines/wooden_closet_open.ogg' - close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound = 'sound/machines/closet/wooden_closet_open.ogg' + close_sound = 'sound/machines/closet/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 max_integrity = 70 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 c0cf7bb873bba..24b901dc920d0 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -4,8 +4,8 @@ icon_state = "cabinet" resistance_flags = FLAMMABLE max_integrity = 70 - open_sound = 'sound/machines/wooden_closet_open.ogg' - close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound = 'sound/machines/closet/wooden_closet_open.ogg' + close_sound = 'sound/machines/closet/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 door_anim_time = 0 // no animation @@ -18,6 +18,7 @@ new /obj/item/etherealballdeployer(src) new /obj/item/roulette_wheel_beacon(src) + //SKYRAT EDIT ADDITION new /obj/item/storage/fancy/candle_box(src) new /obj/item/storage/fancy/candle_box(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 182c93b90df7d..80a707ce2313b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -22,6 +22,7 @@ new /obj/item/construction/plumbing/engineering(src) //SKYRAT EDIT ADDITION new /obj/item/circuitboard/machine/rodstopper(src) //SKYRAT EDIT ADDITION new /obj/item/card/id/departmental_budget/eng(src) //SKYRAT EDIT ADDITION + new /obj/item/storage/box/stickers/chief_engineer(src) /obj/structure/closet/secure_closet/engineering_chief/populate_contents_immediate() . = ..() 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 e5eed4cb2954b..6261ec6538e9a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -50,8 +50,8 @@ 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 = 'sound/machines/closet/wooden_closet_open.ogg' + close_sound = 'sound/machines/closet/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 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 d0487198d4c7c..f639df5f12866 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -40,8 +40,8 @@ icon_state = "cabinet" resistance_flags = FLAMMABLE max_integrity = 70 - open_sound = 'sound/machines/wooden_closet_open.ogg' - close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound = 'sound/machines/closet/wooden_closet_open.ogg' + close_sound = 'sound/machines/closet/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 door_anim_time = 0 // no animation diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 4474f1d2feca4..77a548265c4c5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -24,6 +24,10 @@ new /obj/item/gun/energy/e_gun(src) new /obj/item/storage/belt/sabre(src) +/obj/structure/closet/secure_closet/captains/populate_contents_immediate() + new /obj/item/gun/energy/e_gun(src) + new /obj/item/storage/belt/sabre(src) + /obj/structure/closet/secure_closet/hop name = "head of personnel's locker" icon_state = "hop" @@ -82,6 +86,14 @@ new /obj/item/pinpointer/nuke(src) new /obj/item/gun/ballistic/shotgun/automatic/combat/compact(src) +/obj/structure/closet/secure_closet/hos/populate_contents_immediate() + . = ..() + + // Traitor steal objectives + new /obj/item/gun/energy/e_gun/hos(src) + new /obj/item/pinpointer/nuke(src) + new /obj/item/gun/ballistic/shotgun/automatic/combat/compact(src) + /obj/structure/closet/secure_closet/warden name = "warden's locker" icon_state = "warden" @@ -173,8 +185,8 @@ resistance_flags = FLAMMABLE max_integrity = 70 door_anim_time = 0 // no animation - open_sound = 'sound/machines/wooden_closet_open.ogg' - close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound = 'sound/machines/closet/wooden_closet_open.ogg' + close_sound = 'sound/machines/closet/wooden_closet_close.ogg' req_access = list(ACCESS_DETECTIVE) /obj/structure/closet/secure_closet/detective/PopulateContents() @@ -283,6 +295,7 @@ /obj/structure/closet/secure_closet/armory1 name = "armory armor locker" + icon_state = "armory" req_access = list(ACCESS_ARMORY) /obj/structure/closet/secure_closet/armory1/PopulateContents() 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 7367e04e6f5c0..4d3c3d739f9e6 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -94,7 +94,6 @@ new /obj/item/clothing/head/utility/hardhat/red(src) new /obj/item/crowbar/large/emergency(src) - /* * Tool Closet */ diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index a21aa5926fa12..2dfa053537e44 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -1,18 +1,17 @@ /obj/structure/closet/crate name = "crate" desc = "A rectangular steel crate." - icon = 'icons/obj/storage/crates.dmi' //ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/storage/crates.dmi' icon_state = "crate" base_icon_state = "crate" req_access = null - can_weld_shut = FALSE horizontal = TRUE allow_objects = TRUE allow_dense = TRUE dense_when_open = TRUE delivery_icon = "deliverycrate" - open_sound = 'sound/machines/crate_open.ogg' - close_sound = 'sound/machines/crate_close.ogg' + open_sound = 'sound/machines/crate/crate_open.ogg' + close_sound = 'sound/machines/crate/crate_close.ogg' open_sound_volume = 35 close_sound_volume = 50 drag_slowdown = 0 @@ -95,6 +94,9 @@ else if(secure) . += "securecrateg" + if(welded) + . += icon_welded + if(opened && lid_icon_state) var/mutable_appearance/lid = mutable_appearance(icon = lid_icon, icon_state = lid_icon_state) lid.pixel_x = lid_x @@ -119,7 +121,7 @@ if(elevation_open) AddElement(/datum/element/elevation, pixel_shift = elevation_open) if(!QDELETED(manifest)) - playsound(src, 'sound/items/poster_ripped.ogg', 75, TRUE) + playsound(src, 'sound/items/poster/poster_ripped.ogg', 75, TRUE) manifest.forceMove(get_turf(src)) manifest = null update_appearance() @@ -146,7 +148,7 @@ ///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) + playsound(src, 'sound/items/poster/poster_ripped.ogg', 75, TRUE) manifest.forceMove(loc) if(ishuman(user)) @@ -167,13 +169,14 @@ max_integrity = 70 material_drop = /obj/item/stack/sheet/mineral/wood material_drop_amount = 5 - open_sound = 'sound/machines/wooden_closet_open.ogg' - close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound = 'sound/machines/closet/wooden_closet_open.ogg' + close_sound = 'sound/machines/closet/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 can_install_electronics = FALSE paint_jobs = null elevation_open = 0 + can_weld_shut = FALSE /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." @@ -190,6 +193,7 @@ base_icon_state = "laundry" elevation = 14 elevation_open = 14 + can_weld_shut = FALSE /obj/structure/closet/crate/trashcart/Initialize(mapload) . = ..() @@ -222,6 +226,12 @@ icon_state = "medicalcrate" base_icon_state = "medicalcrate" +/obj/structure/closet/crate/deforest + name = "deforest medical crate" + desc = "A DeForest brand crate of medical supplies." + icon_state = "deforest" + base_icon_state = "deforest" + /obj/structure/closet/crate/medical/department icon_state = "medical" base_icon_state = "medical" @@ -290,6 +300,24 @@ icon_state = "food" base_icon_state = "food" +/obj/structure/closet/crate/freezer/donk + name = "donk co. fridge" + desc = "A Donk Co. brand fridge, keeps your donkpcokets and foam ammunition fresh!" + icon_state = "donkcocrate" + base_icon_state = "donkcocrate" + +/obj/structure/closet/crate/freezer/interdyne + name = "interdyne freezer" + desc = "Interdyne Pharmauceutics branded freezer. Might or might not contain cold steel, or fresh organs." + icon_state = "interdynefreezer" + base_icon_state = "interdynefreezer" + +/obj/structure/closet/crate/freezer/blood/interdyne + name = "interdyne blood freezer" + desc = "Interdyne Pharmauceutics branded freezer. Only freshly harvested- I mean, freshly kept blood inside!" + icon_state = "interdynefreezer" + base_icon_state = "interdynefreezer" + /obj/structure/closet/crate/radiation desc = "A crate with a radiation sign on it." name = "radiation crate" @@ -312,6 +340,12 @@ icon_state = "cargo" base_icon_state = "cargo" +/obj/structure/closet/crate/robust + name = "robust industries crate" + desc = "Robust Inustries LLC. crate. Feels oddly nostalgic." + icon_state = "robust" + base_icon_state = "robust" + /obj/structure/closet/crate/cargo/mining name = "mining crate" icon_state = "mining" @@ -322,6 +356,14 @@ icon_state = "engi_crate" base_icon_state = "engi_crate" + +/obj/structure/closet/crate/nakamura + name = "nakamura engineering crate" + desc = "Crate from Nakamura Engineering, most likely containing engineering supplies or MODcores." + icon_state = "nakamura" + base_icon_state = "nakamura" + + /obj/structure/closet/crate/engineering/electrical icon_state = "engi_e_crate" base_icon_state = "engi_e_crate" diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index a686d53f392c6..dfe2eb8c43d47 100644 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ b/code/game/objects/structures/crates_lockers/crates/bins.dm @@ -3,8 +3,8 @@ name = "trash bin" icon_state = "trashbin" base_icon_state = "trashbin" - open_sound = 'sound/effects/bin_open.ogg' - close_sound = 'sound/effects/bin_close.ogg' + open_sound = 'sound/effects/bin/bin_open.ogg' + close_sound = 'sound/effects/bin/bin_close.ogg' anchored = TRUE horizontal = FALSE delivery_icon = null @@ -12,6 +12,7 @@ paint_jobs = null elevation = 17 elevation_open = 17 + can_weld_shut = FALSE /obj/structure/closet/crate/bin/LateInitialize() . = ..() @@ -66,4 +67,4 @@ items_to_sweep.Cut() to_chat(user, span_notice("You sweep the pile of garbage into [src].")) - playsound(broom.loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) + playsound(broom.loc, 'sound/items/weapons/thudswoosh.ogg', 30, TRUE, -1) diff --git a/code/game/objects/structures/crates_lockers/crates/cardboard.dm b/code/game/objects/structures/crates_lockers/crates/cardboard.dm index 7b1e7dc725779..5d1418e397eb5 100644 --- a/code/game/objects/structures/crates_lockers/crates/cardboard.dm +++ b/code/game/objects/structures/crates_lockers/crates/cardboard.dm @@ -6,12 +6,13 @@ material_drop_amount = 4 icon_state = "cardboard" base_icon_state = "cardboard" - open_sound = 'sound/items/poster_ripped.ogg' + open_sound = 'sound/items/poster/poster_ripped.ogg' close_sound = 'sound/machines/cardboard_box.ogg' open_sound_volume = 25 close_sound_volume = 25 paint_jobs = null cutting_tool = /obj/item/wirecutters + can_weld_shut = FALSE /obj/structure/closet/crate/cardboard/mothic name = "\improper Mothic Fleet box" diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm index 5e1873d166ab6..052ca9cffb63b 100644 --- a/code/game/objects/structures/crates_lockers/crates/critter.dm +++ b/code/game/objects/structures/crates_lockers/crates/critter.dm @@ -9,14 +9,15 @@ material_drop = /obj/item/stack/sheet/mineral/wood material_drop_amount = 4 delivery_icon = "deliverybox" - open_sound = 'sound/machines/wooden_closet_open.ogg' - close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound = 'sound/machines/closet/wooden_closet_open.ogg' + close_sound = 'sound/machines/closet/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 contents_pressure_protection = 0.8 can_install_electronics = FALSE elevation = 21 elevation_open = 0 + can_weld_shut = FALSE 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 073d4a936d81b..b3cce9609c06f 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -9,12 +9,13 @@ material_drop_amount = 4 delivery_icon = "deliverybox" integrity_failure = 0 //Makes the crate break when integrity reaches 0, instead of opening and becoming an invisible sprite. - open_sound = 'sound/machines/wooden_closet_open.ogg' - close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound = 'sound/machines/closet/wooden_closet_open.ogg' + close_sound = 'sound/machines/closet/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 can_install_electronics = FALSE elevation = 22 + can_weld_shut = FALSE // Stops people from "diving into" a crate you can't open normally divable = FALSE @@ -34,18 +35,18 @@ if(W.tool_behaviour == TOOL_CROWBAR) if(manifest) tear_manifest(user) - + if(!open(user)) + return FALSE user.visible_message(span_notice("[user] pries \the [src] open."), \ span_notice("You pry open \the [src]."), \ span_hear("You hear splitting wood.")) - playsound(src.loc, 'sound/weapons/slashmiss.ogg', 75, TRUE) + playsound(src.loc, 'sound/items/weapons/slashmiss.ogg', 75, TRUE) var/turf/T = get_turf(src) for(var/i in 1 to material_drop_amount) new material_drop(src) for(var/atom/movable/AM in contents) AM.forceMove(T) - qdel(src) else diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 1a102fdb512fd..e93591f1d596c 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -44,6 +44,17 @@ icon_state = "weaponcrate" base_icon_state = "weaponcrate" +/obj/structure/closet/crate/secure/gorlex_weapons + desc = "A secure weapons crate of Gorlex Marauders." + name = "weapons crate" + icon_state = "gorlex_weaponcrate" + base_icon_state = "gorlex_weaponcrate" + +/obj/structure/closet/crate/secure/gorlex_weapons/jammed + desc = "A beaten up, jammed open weapon crate of Gorlex Marauders." + name = "jammed weapons crate" + locked = FALSE + /obj/structure/closet/crate/secure/plasma desc = "A secure plasma crate." name = "plasma crate" @@ -192,3 +203,65 @@ else if(!silent) to_chat(user, span_warning("[src] is broken!")) else ..() + +/obj/structure/closet/crate/secure/interdyne + name = "interdyne crate" + desc = "Crate belonging to Interdyne Pharmaceutics. Hopefully doesn't have bioweapons inside..." + icon_state = "interdynecrate" + base_icon_state = "interdynecrate" + +/obj/structure/closet/crate/secure/tiger + name = "tiger co-op crate" + icon_state = "tigercrate" + base_icon_state = "tigercrate" + +/obj/structure/closet/crate/secure/self + name = "s.e.l.f. crate" + desc = "A secure crate locked from the inside with a scanning panel above it and holographic display of lock's status. Sentient Engine Liberation Front engineers are quite the show-offs." + icon_state = "selfcrate" + base_icon_state = "selfcrate" + +/obj/structure/closet/crate/secure/m13 + name = "mysterious secure crate" + desc = "A secure crate. Lacks any obvious logos or even codes for where it arrived from, but looks like taken straight from a spy movie." + icon_state = "mithirteencrate" + base_icon_state = "mithirteencrate" + +/obj/structure/closet/crate/secure/arc + name = "animal rights consortium crate" + icon_state = "arccrate" + base_icon_state = "arccrate" + +/obj/structure/closet/crate/secure/cybersun + name = "cybersun crate" + +/obj/structure/closet/crate/secure/cybersun/dawn + desc = "A secure crate from Cybersun Industries. It has distinct orange-green colouring, probably of some departament or division, but you cannot tell what is it." + icon_state = "cyber_dawncrate" + base_icon_state = "cyber_dawncrate" + +/obj/structure/closet/crate/secure/cybersun/noon + desc = "A secure crate from Cybersun Industries. It has distinct yellow-orange colouring, probably of some departament or division, but you cannot tell what is it." + icon_state = "cyber_nooncrate" + base_icon_state = "cyber_nooncrate" + +/obj/structure/closet/crate/secure/cybersun/dusk + desc = "A secure crate from Cybersun Industries. It has distinct purple-green colouring, probably of some departament or division, but you cannot tell what is it." + icon_state = "cyber_duskcrate" + base_icon_state = "cyber_duskcrate" + +/obj/structure/closet/crate/secure/cybersun/night + desc = "A secure crate from Cybersun Industries. This one blatantly adorns syndicate colours. You can only guess it contains equipement for syndicate operatives." + icon_state = "cyber_nightcrate" + base_icon_state = "cyber_nightcrate" + +/obj/structure/closet/crate/secure/wafflecorp + name = "wafflecorp crate" + desc = "A very outdated model and design of shipment crate with a modern lock strapped on it, how befitting of its brand owner, Waffle Corporation. Golden lettering written in cursive by the logo reads 'bringing you consecutively top five world-wide rated* breakfast since 2055. A much smaller fineprint, also in cursive, clarifies: '*in years 2099-2126'... It's year 2563 now, however." + icon_state = "wafflecrate" + base_icon_state = "wafflecrate" + +/obj/structure/closet/crate/secure/gorlex + name = "gorlex marauders crate" + icon_state = "gorlexcrate" + base_icon_state = "gorlexcrate" diff --git a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm index 8403f82213511..a686282f287c5 100644 --- a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm +++ b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm @@ -52,7 +52,7 @@ unlock_contents = list() 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) + playsound(src, 'sound/machines/airlock/boltsup.ogg', 50, vary = FALSE) togglelock(user) /obj/structure/closet/crate/secure/syndicrate/togglelock(mob/living/user, silent) diff --git a/code/game/objects/structures/crates_lockers/crates/wooden.dm b/code/game/objects/structures/crates_lockers/crates/wooden.dm index 5ff3c69aa6bed..5703cb6ddcb39 100644 --- a/code/game/objects/structures/crates_lockers/crates/wooden.dm +++ b/code/game/objects/structures/crates_lockers/crates/wooden.dm @@ -5,8 +5,8 @@ material_drop_amount = 6 icon_state = "wooden" base_icon_state = "wooden" - open_sound = 'sound/machines/wooden_closet_open.ogg' - close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound = 'sound/machines/closet/wooden_closet_open.ogg' + close_sound = 'sound/machines/closet/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 paint_jobs = null diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index be4180b5fa177..a571009d0a6ca 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -81,11 +81,11 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(src.loc, 'sound/weapons/slash.ogg', 80, TRUE) + playsound(src.loc, 'sound/items/weapons/slash.ogg', 80, TRUE) else - playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(loc, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(loc, 'sound/items/welder.ogg', 80, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 80, TRUE) /obj/structure/curtain/bounty icon_type = "bounty" diff --git a/code/game/objects/structures/deployable_turret.dm b/code/game/objects/structures/deployable_turret.dm index 2b1a90500ccf8..e9162294c8f42 100644 --- a/code/game/objects/structures/deployable_turret.dm +++ b/code/game/objects/structures/deployable_turret.dm @@ -27,9 +27,9 @@ var/warned = FALSE var/list/calculated_projectile_vars /// Sound to play at the end of a burst - var/overheatsound = 'sound/weapons/sear.ogg' + var/overheatsound = 'sound/items/weapons/sear.ogg' /// Sound to play when firing - var/firesound = 'sound/weapons/gun/smg/shot.ogg' + var/firesound = 'sound/items/weapons/gun/smg/shot.ogg' /// If using a wrench on the turret will start undeploying it var/can_be_undeployed = FALSE /// What gets spawned if the object is undeployed @@ -70,7 +70,7 @@ //BUCKLE HOOKS /obj/machinery/deployable_turret/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE) - playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(src,'sound/vehicles/mecha/mechmove01.ogg', 50, TRUE) for(var/obj/item/I in buckled_mob.held_items) if(istype(I, /obj/item/gun_control)) qdel(I) @@ -85,7 +85,7 @@ STOP_PROCESSING(SSfastprocess, src) /obj/machinery/deployable_turret/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) - if(user.incapacitated() || !istype(user)) + if(user.incapacitated || !istype(user)) return M.forceMove(get_turf(src)) . = ..() @@ -103,7 +103,7 @@ M.pixel_y = 14 layer = ABOVE_MOB_LAYER setDir(SOUTH) - playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(src,'sound/vehicles/mecha/mechmove01.ogg', 50, TRUE) set_anchored(TRUE) if(M.client) M.client.view_size.setTo(view_range) @@ -129,7 +129,7 @@ calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(controller, target_turf, modifiers) /obj/machinery/deployable_turret/proc/direction_track(mob/user, atom/targeted) - if(user.incapacitated()) + if(user.incapacitated) return setDir(get_dir(src,targeted)) user.setDir(dir) @@ -169,7 +169,7 @@ /obj/machinery/deployable_turret/proc/checkfire(atom/targeted_atom, mob/user) target = targeted_atom - if(target == user || user.incapacitated() || target == get_turf(src)) + if(target == user || user.incapacitated || target == get_turf(src)) return if(world.time < cooldown) if(!warned && world.time > (cooldown - cooldown_duration + rate_of_fire*number_of_shots)) // To capture the window where one is done firing @@ -187,7 +187,7 @@ addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/machinery/deployable_turret/, fire_helper), user), i*rate_of_fire) /obj/machinery/deployable_turret/proc/fire_helper(mob/user) - if(user.incapacitated() || !(user in buckled_mobs)) + if(user.incapacitated || !(user in buckled_mobs)) return update_positioning() //REFRESH MOUSE TRACKING!! var/turf/targets_from = get_turf(src) @@ -221,8 +221,8 @@ number_of_shots = 3 cooldown_duration = 2 SECONDS rate_of_fire = 2 - firesound = 'sound/weapons/gun/hmg/hmg.ogg' - overheatsound = 'sound/weapons/gun/smg/smgrack.ogg' + firesound = 'sound/items/weapons/gun/hmg/hmg.ogg' + overheatsound = 'sound/items/weapons/gun/smg/smgrack.ogg' can_be_undeployed = TRUE spawned_on_undeploy = /obj/item/deployable_turret_folded @@ -259,11 +259,11 @@ M.attacked_by(src, user) add_fingerprint(user) -/obj/item/gun_control/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) +/obj/item/gun_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) var/obj/machinery/deployable_turret/E = user.buckled E.calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(user, interacting_with, modifiers) E.direction_track(user, interacting_with) E.checkfire(interacting_with, user) -/obj/item/gun_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) +/obj/item/gun_control/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) diff --git a/code/game/objects/structures/destructible_structures.dm b/code/game/objects/structures/destructible_structures.dm index beffa5d4fd741..e64779c31ed1a 100644 --- a/code/game/objects/structures/destructible_structures.dm +++ b/code/game/objects/structures/destructible_structures.dm @@ -1,7 +1,7 @@ /obj/structure/destructible //a base for destructible structures max_integrity = 100 - var/break_message = "The strange, admin-y structure breaks!" //The message shown when a structure breaks - var/break_sound = 'sound/magic/clockwork/invoke_general.ogg' //The sound played when a structure breaks + var/break_message = span_warning("The strange, admin-y structure breaks!") //The message shown when a structure breaks + var/break_sound = 'sound/effects/magic/clockwork/invoke_general.ogg' //The sound played when a structure breaks var/list/debris = null //Parts left behind when a structure breaks, takes the form of list(path = amount_to_spawn) /obj/structure/destructible/atom_deconstruct(disassembled = TRUE) diff --git a/code/game/objects/structures/detectiveboard.dm b/code/game/objects/structures/detectiveboard.dm new file mode 100644 index 0000000000000..27c11cda5a018 --- /dev/null +++ b/code/game/objects/structures/detectiveboard.dm @@ -0,0 +1,308 @@ +#define MAX_ICON_NOTICES 8 +#define MAX_CASES 8 +#define MAX_EVIDENCE_Y 3500 +#define MAX_EVIDENCE_X 1180 + +#define EVIDENCE_TYPE_PHOTO "photo" +#define EVIDENCE_TYPE_PAPER "paper" + +/obj/structure/detectiveboard + name = "detective notice board" + desc = "A board for linking evidence to crimes." + icon = 'icons/obj/wallmounts.dmi' + icon_state = "noticeboard" + density = FALSE + anchored = TRUE + max_integrity = 150 + + /// When player attaching evidence to board this will become TRUE + var/attaching_evidence = FALSE + /// Colors for case color + var/list/case_colors = list("red", "orange", "yellow", "green", "blue", "violet") + /// List of board cases + var/list/datum/case/cases = list() + /// Index of viewing case in cases array + var/current_case = 1 + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/detectiveboard, 32) + +/obj/structure/detectiveboard/Initialize(mapload) + . = ..() + + if(mapload) + for(var/obj/item/item in loc) + if(istype(item, /obj/item/paper) || istype(item, /obj/item/photo)) + item.forceMove(src) + cases[current_case].notices++ + + register_context() + find_and_hang_on_wall() + +/// Attaching evidences: photo and papers + +/obj/structure/detectiveboard/attackby(obj/item/item, mob/user, params) + if(istype(item, /obj/item/paper) || istype(item, /obj/item/photo)) + if(!cases.len) + to_chat(user, "There are no cases!") + return + + if(attaching_evidence) + to_chat(user, "You already attaching evidence!") + return + attaching_evidence = TRUE + var/name = tgui_input_text(user, "Please enter the evidence name", "Detective's Board", max_length = MAX_NAME_LEN) + if(!name) + attaching_evidence = FALSE + return + var/desc = tgui_input_text(user, "Please enter the evidence description", "Detective's Board", max_length = MAX_DESC_LEN) + if(!desc) + attaching_evidence = FALSE + return + + if(!user.transferItemToLoc(item, src)) + attaching_evidence = FALSE + return + cases[current_case].notices++ + var/datum/evidence/evidence = new (name, desc, item) + cases[current_case].evidences += evidence + to_chat(user, span_notice("You pin the [item] to the detective board.")) + attaching_evidence = FALSE + update_appearance(UPDATE_ICON) + return + return ..() + +/obj/structure/detectiveboard/wrench_act_secondary(mob/living/user, obj/item/tool) + . = ..() + balloon_alert(user, "[anchored ? "un" : ""]securing...") + tool.play_tool_sound(src) + if(tool.use_tool(src, user, 6 SECONDS)) + playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + balloon_alert(user, "[anchored ? "un" : ""]secured") + deconstruct() + return TRUE + +/obj/structure/detectiveboard/ui_state(mob/user) + return GLOB.physical_state + +/obj/structure/detectiveboard/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DetectiveBoard", name, 1200, 800) + ui.open() + +/obj/structure/detectiveboard/ui_data(mob/user) + var/list/data = list() + var/list/data_cases = list() + for(var/datum/case/case in cases) + var/list/data_case = list("ref"=REF(case),"name" = case.name, "color" = case.color) + var/list/data_evidences = list() + for(var/datum/evidence/evidence in case.evidences) + var/list/data_evidence = list("ref" = REF(evidence), "name" = evidence.name, "type" = evidence.evidence_type, "description" = evidence.description, "x"=evidence.x, "y"=evidence.y) + var/list/data_connections = list() + for(var/datum/evidence/connection in evidence.connections) + data_connections += REF(connection) // TODO: create array of strings + data_evidence["connections"] = data_connections + switch(evidence.evidence_type) + if(EVIDENCE_TYPE_PHOTO) + var/obj/item/photo/photo = evidence.item + var/tmp_picture_name = "evidence_photo[REF(photo)].png" + user << browse_rsc(photo.picture.picture_image, tmp_picture_name) + data_evidence["photo_url"] = tmp_picture_name + if(EVIDENCE_TYPE_PAPER) + var/obj/item/paper/paper = evidence.item + data_evidence["text"] = "" + if(paper.raw_text_inputs && paper.raw_text_inputs.len) + data_evidence["text"] = paper.raw_text_inputs[1].raw_text + data_evidences += list(data_evidence) + data_case["evidences"] = data_evidences + var/list/connections = list() + for(var/datum/evidence/evidence in case.evidences) + for(var/datum/evidence/connection in evidence.connections) + var/list/from_pos = get_pin_position(evidence) + var/list/to_pos = get_pin_position(connection) + var/found_in_connections = FALSE + for(var/list/con in connections) + if(con["from"]["x"] == to_pos["x"] && con["from"]["y"] == to_pos["y"] && con["to"]["x"] == from_pos["x"] && con["to"]["y"] == from_pos["y"] ) + found_in_connections = TRUE + if(!found_in_connections) + var/list/data_connection = list("color" = "red", "from" = from_pos, "to" = to_pos) + connections += list(data_connection) + data_case["connections"] = connections + data_cases += list(data_case) + + data["cases"] = data_cases + data["current_case"] = current_case + return data + +/obj/structure/detectiveboard/proc/get_pin_position(datum/evidence/evidence) + return list("x" = evidence.x + 15, "y" = evidence.y + 15) + +/obj/structure/detectiveboard/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + var/mob/user = ui.user + switch(action) + if("add_case") + if(cases.len == MAX_CASES) + return FALSE + var/new_case = tgui_input_text(user, "Please enter the case name", "Detective's Board", max_length = MAX_NAME_LEN) + if(!new_case) + return FALSE + var/case_color = tgui_input_list(user, "Please choose case color", "Detective's Board", case_colors) + if(!case_color) + return FALSE + + var/datum/case/case = new (new_case, case_color) + cases += case + current_case = clamp(cases.len, 1, MAX_CASES) + update_appearance(UPDATE_ICON) + return TRUE + if("set_case") + if(cases && params["case"] && params["case"] <= cases.len) + current_case = clamp(params["case"], 1, MAX_CASES) + update_appearance(UPDATE_ICON) + return TRUE + if("remove_case") + var/datum/case/case = locate(params["case_ref"]) in cases + if(case) + for(var/datum/evidence/evidence in case.evidences) + remove_item(evidence.item, user) + cases -= case + current_case = clamp(cases.len, 1, MAX_CASES) + update_appearance(UPDATE_ICON) + return TRUE + if("rename_case") + var/new_name = tgui_input_text(user, "Please enter the new name for the case", "Detective's Board", max_length = MAX_NAME_LEN) + if(new_name) + var/datum/case/case = locate(params["case_ref"]) in cases + case.name = new_name + return TRUE + if("look_evidence") + var/datum/case/case = locate(params["case_ref"]) in cases + var/datum/evidence/evidence = locate(params["evidence_ref"]) in case.evidences + if(evidence.evidence_type == EVIDENCE_TYPE_PHOTO) + var/obj/item/photo/item = evidence.item + item.show(user) + return TRUE + + var/obj/item/paper/paper = evidence.item + var/paper_text = "" + for(var/datum/paper_input/text_input as anything in paper.raw_text_inputs) + paper_text += text_input.raw_text + user << browse("[paper.name]" \ + + "" \ + + "[paper_text]" \ + + "", "window=photo_showing;size=480x608") + onclose(user, "[name]") + if("remove_evidence") + var/datum/case/case = cases[current_case] + var/datum/evidence/evidence = locate(params["evidence_ref"]) in case.evidences + if(evidence) + var/obj/item/item = evidence.item + if(!istype(item) || item.loc != src) + return + remove_item(item, user) + for(var/datum/evidence/connection in evidence.connections) + connection.connections.Remove(evidence) + case.evidences -= evidence + update_appearance(UPDATE_ICON) + return TRUE + if("set_evidence_cords") + var/datum/case/case = locate(params["case_ref"]) in cases + if(case) + var/datum/evidence/evidence = locate(params["evidence_ref"]) in case.evidences + if(evidence) + evidence.x = clamp(params["rel_x"], 0, MAX_EVIDENCE_X) + evidence.y = clamp(params["rel_y"], 0, MAX_EVIDENCE_Y) + return TRUE + if("add_connection") + var/datum/evidence/from_evidence = locate(params["from_ref"]) in cases[current_case].evidences + var/datum/evidence/to_evidence = locate(params["to_ref"]) in cases[current_case].evidences + if(from_evidence && to_evidence) + from_evidence.connections += to_evidence + to_evidence.connections += from_evidence + return TRUE + + + return FALSE + +/obj/structure/detectiveboard/update_overlays() + . = ..() + if(!cases.len) + return + if(cases[current_case].notices < MAX_ICON_NOTICES) + . += "notices_[cases[current_case].notices]" + else + . += "notices_[MAX_ICON_NOTICES]" +/** + * Removes an item from the notice board + * + * Arguments: + * * item - The item that is to be removed + * * user - The mob that is trying to get the item removed, if there is one + */ +/obj/structure/detectiveboard/proc/remove_item(obj/item/item, mob/user) + item.forceMove(drop_location()) + if(user) + user.put_in_hands(item) + balloon_alert(user, "removed from board") + cases[current_case].notices-- + update_appearance(UPDATE_ICON) + +/obj/structure/detectiveboard/atom_deconstruct(disassembled = TRUE) + if(!disassembled) + new /obj/item/stack/sheet/mineral/wood(loc) + else + new /obj/item/wallframe/detectiveboard(loc) + for(var/obj/item/content in contents) + remove_item(content) + +/obj/item/wallframe/detectiveboard + name = "detective notice board" + desc = "A board for linking evidence to crimes." + icon = 'icons/obj/wallmounts.dmi' + icon_state = "noticeboard" + custom_materials = list( + /datum/material/wood = SHEET_MATERIAL_AMOUNT, + ) + resistance_flags = FLAMMABLE + result_path = /obj/structure/detectiveboard + pixel_shift = 32 + +/datum/evidence + var/name = "None" + var/description = "No description" + var/evidence_type = "none" + var/x = 0 + var/y = 0 + var/list/datum/evidence/connections = list() + var/obj/item/item = null + +/datum/evidence/New(param_name, param_desc, obj/item/param_item) + name = param_name + description = param_desc + item = param_item + if(istype(param_item, /obj/item/photo)) + evidence_type = EVIDENCE_TYPE_PHOTO + else + evidence_type = EVIDENCE_TYPE_PAPER + +/datum/case + var/notices = 0 + var/name = "" + var/color = 0 + var/list/datum/evidence/evidences = list() + +/datum/case/New(param_name, param_color) + name = param_name + color = param_color + + +#undef EVIDENCE_TYPE_PHOTO +#undef EVIDENCE_TYPE_PAPER + +#undef MAX_EVIDENCE_Y +#undef MAX_EVIDENCE_X +#undef MAX_ICON_NOTICES +#undef MAX_CASES diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index faebf85265cea..3334c9b9dbe2d 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -77,9 +77,9 @@ /obj/structure/displaycase/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(src, 'sound/effects/glasshit.ogg', 75, TRUE) + playsound(src, 'sound/effects/glass/glasshit.ogg', 75, TRUE) if(BURN) - playsound(src, 'sound/items/welder.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/displaycase/atom_deconstruct(disassembled = TRUE) dump() @@ -159,7 +159,7 @@ toggle_lock(user) else if(open && !showpiece) insert_showpiece(attacking_item, user) - return TRUE //cancel the attack chain, wether we successfully placed an item or not + return TRUE //cancel the attack chain, whether we successfully placed an item or not else if(glass_fix && broken && istype(attacking_item, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/glass_sheet = attacking_item if(glass_sheet.get_amount() < 2) @@ -387,7 +387,7 @@ /obj/structure/displaycase/trophy/proc/toggle_historian_mode(mob/user) historian_mode = !historian_mode balloon_alert(user, "[historian_mode ? "enabled" : "disabled"] historian mode.") - playsound(src, 'sound/machines/twobeep.ogg', vary = 50) + playsound(src, 'sound/machines/beep/twobeep.ogg', vary = 50) SStgui.update_uis(src) /obj/structure/displaycase/trophy/toggle_lock(mob/user) @@ -411,7 +411,7 @@ data["showpiece_icon"] = icon2base64(getFlatIcon(showpiece, no_anim=TRUE)) return data -/obj/structure/displaycase/trophy/ui_act(action, params) +/obj/structure/displaycase/trophy/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -426,7 +426,7 @@ return if("change_message") if(showpiece && !holographic_showpiece) - var/new_trophy_message = tgui_input_text(usr, "Let's make history!", "Trophy Message", trophy_message, MAX_PLAQUE_LEN) + var/new_trophy_message = tgui_input_text(usr, "Let's make history!", "Trophy Message", trophy_message, max_length = MAX_PLAQUE_LEN) if(!new_trophy_message) return trophy_message = new_trophy_message @@ -526,7 +526,7 @@ data["product_icon"] = showpiece ? icon2base64(getFlatIcon(showpiece, no_anim=TRUE)) : null return data -/obj/structure/displaycase/forsale/ui_act(action, params) +/obj/structure/displaycase/forsale/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -576,7 +576,7 @@ if(!potential_acc || !potential_acc.registered_account) return if(!check_access(potential_acc)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return toggle_lock() if("Register") @@ -585,13 +585,13 @@ if(!potential_acc || !potential_acc.registered_account) return if(!check_access(potential_acc)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return payments_acc = potential_acc.registered_account playsound(src, 'sound/machines/click.ogg', 20, TRUE) if("Adjust") if(!check_access(potential_acc) || potential_acc.registered_account != payments_acc) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return var/new_price_input = tgui_input_number(usr, "Sale price for this vend-a-tray", "New Price", 10, 1000) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 9493a7c941407..5fc9bf674c144 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -83,7 +83,7 @@ /obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, params) if(IS_WRITING_UTENSIL(W) && !user.combat_mode) - var/t = tgui_input_text(user, "Enter the name for the door", "Airlock Renaming", created_name, MAX_NAME_LEN) + var/t = tgui_input_text(user, "Enter the name for the door", "Airlock Renaming", created_name, max_length = MAX_NAME_LEN) if(!t) return if(!in_range(src, usr) && loc != usr) @@ -219,7 +219,7 @@ if(!noglass) if(!glass) if(istype(G, /obj/item/stack/sheet/rglass) || istype(G, /obj/item/stack/sheet/glass)) - playsound(src, 'sound/items/crowbar.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/crowbar.ogg', 100, TRUE) user.visible_message(span_notice("[user] adds [G.name] to the airlock assembly."), \ span_notice("You start to install [G.name] into the airlock assembly...")) if(do_after(user, 4 SECONDS, target = src)) @@ -242,7 +242,7 @@ to_chat(user, span_warning("You cannot add [G] to [src]!")) return if(G.get_amount() >= 2) - playsound(src, 'sound/items/crowbar.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/crowbar.ogg', 100, TRUE) user.visible_message(span_notice("[user] adds [G.name] to the airlock assembly."), \ span_notice("You start to install [G.name] into the airlock assembly...")) if(do_after(user, 4 SECONDS, target = src)) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 1791d72aa1279..2407fc748ace8 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -16,8 +16,6 @@ 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 else stored_extinguisher = new /obj/item/extinguisher(src) update_appearance(UPDATE_ICON) @@ -162,6 +160,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) return ..() */ + /obj/structure/extinguisher_cabinet/atom_break(damage_flag) . = ..() if(!broken) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 0564223a7c759..a4d35f02e0c09 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -130,7 +130,7 @@ if(tool) tool.play_tool_sound(src, 100) else - playsound(src, 'sound/items/welder.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 100, TRUE) deconstruct(disassembled) /obj/structure/falsewall/atom_deconstruct(disassembled = TRUE) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index ab69b7bc7a41e..7af4dd0f6c0dc 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -95,9 +95,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32) if(broken) playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, TRUE) else - playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE) + playsound(loc, 'sound/effects/glass/glasshit.ogg', 90, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/fireaxecabinet/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = TRUE, attack_dir) if(open) @@ -111,7 +111,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32) if(!broken) update_appearance() broken = TRUE - playsound(src, 'sound/effects/glassbr3.ogg', 100, TRUE) + playsound(src, 'sound/effects/glass/glassbr3.ogg', 100, TRUE) new /obj/item/shard(loc) new /obj/item/shard(loc) diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index 97a9ce8bd4d2b..675756e660976 100644 --- a/code/game/objects/structures/fireplace.dm +++ b/code/game/objects/structures/fireplace.dm @@ -68,26 +68,25 @@ var/logs_used = min(space_for_logs, wood.amount) wood.use(logs_used) adjust_fuel_timer(LOG_BURN_TIMER * logs_used) - user.visible_message("[user] tosses some \ - wood into [src].", "You add \ - some fuel to [src].") - else if(istype(T, /obj/item/paper_bin)) + user.visible_message(span_notice("[user] tosses some wood into [src]."), span_notice("You add some fuel to [src].")) + return + + if(istype(T, /obj/item/paper_bin)) var/obj/item/paper_bin/paper_bin = T - user.visible_message("[user] throws [T] into \ - [src].", "You add [T] to [src].\ - ") + user.visible_message(span_notice("[user] throws [T] into [src]."), span_notice("You add [T] to [src].")) adjust_fuel_timer(PAPER_BURN_TIMER * paper_bin.total_paper) qdel(paper_bin) - else if(istype(T, /obj/item/paper)) - user.visible_message("[user] throws [T] into \ - [src].", "You throw [T] into [src].\ - ") + return + + if(istype(T, /obj/item/paper)) + user.visible_message(span_notice("[user] throws [T] into [src]."), span_notice("You throw [T] into [src].")) adjust_fuel_timer(PAPER_BURN_TIMER) qdel(T) - else if(try_light(T,user)) return - else - . = ..() + + if(try_light(T,user)) + return + return ..() /obj/structure/fireplace/update_overlays() . = ..() @@ -95,15 +94,15 @@ return switch(burn_time_remaining()) - if(0 to 19999) //SKYRAT EDIT original: if(0 to 500) + if(0 to 500) . += "fireplace_fire0" - if(20000 to 39999) //SKYRAT EDIT original: if(500 to 1000) + if(500 to 1000) . += "fireplace_fire1" - if(40000 to 59999) //SKYRAT EDIT original: if(1000 to 1500) + if(1000 to 1500) . += "fireplace_fire2" - if(60000 to 79999) //SKYRAT EDIT original: if(1500 to 2000) + if(1500 to 2000) . += "fireplace_fire3" - if(80000 to MAXIMUM_BURN_TIMER) //SKYRAT EDIT original: if(2000 to MAXIMUM_BURN_TIMER) + if(2000 to MAXIMUM_BURN_TIMER) . += "fireplace_fire4" . += "fireplace_glow" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index c9804fab0f8cc..0f5c5aaedf5a5 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -512,7 +512,7 @@ /obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, params) add_fingerprint(user) if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount = 0)) + if(!W.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) return balloon_alert(user, "slicing apart...") if(W.use_tool(src, user, 40, volume=50)) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index aa9af66868fdd..4aaba04bc1835 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -286,9 +286,9 @@ if(damage_amount) playsound(src, 'sound/effects/grillehit.ogg', 80, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(src, 'sound/items/welder.ogg', 80, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 80, TRUE) /obj/structure/grille/atom_deconstruct(disassembled = TRUE) @@ -359,7 +359,7 @@ return FALSE var/obj/structure/cable/C = T.get_cable_node() if(C) - playsound(src, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) + playsound(src, 'sound/effects/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) tesla_zap(source = src, zap_range = 3, power = C.newavail() * 0.01, cutoff = 1e3, zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN | ZAP_LOW_POWER_GEN | ZAP_ALLOW_DUPLICATES) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot. C.add_delayedload(C.newavail() * 0.0375) // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock. // What do you mean by this? return ..() diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index a51e82498e2bc..f46caa48c7b8b 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -43,7 +43,7 @@ buckle_prevents_pull = TRUE layer = ABOVE_MOB_LAYER /// The sound the guillotine makes when it successfully cuts off a head - var/drop_sound = 'sound/weapons/guillotine.ogg' + var/drop_sound = 'sound/items/weapons/guillotine.ogg' /// The current state of the blade var/blade_status = GUILLOTINE_BLADE_RAISED /// How sharp the blade is diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 4f4972d486415..b297b670b0ebe 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -104,7 +104,7 @@ return FALSE if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/code/game/objects/structures/gym/punching_bag.dm b/code/game/objects/structures/gym/punching_bag.dm index 59ccf6f23c2c3..bba9e4f715c2a 100644 --- a/code/game/objects/structures/gym/punching_bag.dm +++ b/code/game/objects/structures/gym/punching_bag.dm @@ -7,13 +7,13 @@ layer = ABOVE_MOB_LAYER ///List of sounds that can be played when punched. var/static/list/hit_sounds = list( - 'sound/weapons/genhit1.ogg', - 'sound/weapons/genhit2.ogg', - 'sound/weapons/genhit3.ogg', - 'sound/weapons/punch1.ogg', - 'sound/weapons/punch2.ogg', - 'sound/weapons/punch3.ogg', - 'sound/weapons/punch4.ogg', + 'sound/items/weapons/genhit1.ogg', + 'sound/items/weapons/genhit2.ogg', + 'sound/items/weapons/genhit3.ogg', + 'sound/items/weapons/punch1.ogg', + 'sound/items/weapons/punch2.ogg', + 'sound/items/weapons/punch3.ogg', + 'sound/items/weapons/punch4.ogg', ) /obj/structure/punching_bag/Initialize(mapload) diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index 30983c5088d67..6d86b5f7a30d5 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -52,9 +52,9 @@ /obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE) + playsound(loc, 'sound/items/weapons/egloves.ogg', 80, TRUE) if(BURN) - playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE) + playsound(loc, 'sound/items/weapons/egloves.ogg', 80, TRUE) /obj/structure/holosign/proc/create_vis_overlay() var/turf/our_turf = get_turf(src) @@ -135,11 +135,11 @@ if(!opened) density = FALSE opened = TRUE - playsound(src, 'sound/machines/door_open.ogg', 50, TRUE) + playsound(src, 'sound/machines/door/door_open.ogg', 50, TRUE) else density = TRUE opened = FALSE - playsound(src, 'sound/machines/door_close.ogg', 50, TRUE) + playsound(src, 'sound/machines/door/door_close.ogg', 50, TRUE) update_icon_state() COOLDOWN_START(src, cooldown_open, 1 SECONDS) @@ -262,7 +262,7 @@ if(!COOLDOWN_FINISHED(src, virus_detected)) return - playsound(get_turf(src),'sound/machines/buzz-sigh.ogg', 65, TRUE, 4) + playsound(get_turf(src),'sound/machines/buzz/buzz-sigh.ogg', 65, TRUE, 4) COOLDOWN_START(src, virus_detected, 1 SECONDS) icon_state = "holo_medical-deny" update_icon_state() diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index 6efa671875915..fb082b72456dc 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(ore_probability, list( * */ /obj/structure/spawner/ice_moon/proc/destroy_effect() - playsound(loc,'sound/effects/explosionfar.ogg', 200, TRUE) + playsound(loc,'sound/effects/explosion/explosionfar.ogg', 200, TRUE) visible_message(span_boldannounce("[src] collapses, sealing everything inside!
\nOres fall out of the cave as it is destroyed!")) /** diff --git a/code/game/objects/structures/janitor.dm b/code/game/objects/structures/janitor.dm index 0413bcac53986..a8df82e02b2fa 100644 --- a/code/game/objects/structures/janitor.dm +++ b/code/game/objects/structures/janitor.dm @@ -337,7 +337,7 @@ * * user The mob interacting with a menu */ /obj/structure/mop_bucket/janitorialcart/proc/check_menu(mob/living/user) - return istype(user) && !user.incapacitated() + return istype(user) && !user.incapacitated /obj/structure/mop_bucket/janitorialcart/update_overlays() . = ..() diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index c13e8f7e4aeb1..7d6ec9edf2df3 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -33,6 +33,57 @@ context[SCREENTIP_CONTEXT_LMB] = message return CONTEXTUAL_SCREENTIP_SET +/obj/structure/kitchenspike_frame/welder_act(mob/living/user, obj/item/tool) + if(!tool.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) + return FALSE + to_chat(user, span_notice("You begin cutting \the [src] apart...")) + if(!tool.use_tool(src, user, 5 SECONDS, volume = 50)) + return TRUE + visible_message(span_notice("[user] slices apart \the [src]."), + span_notice("You cut \the [src] apart with \the [tool]."), + span_hear("You hear welding.")) + new /obj/item/stack/sheet/iron(loc, MEATSPIKE_IRONROD_REQUIREMENT) + qdel(src) + return TRUE + +/obj/structure/kitchenspike_frame/wrench_act(mob/living/user, obj/item/tool) + default_unfasten_wrench(user, tool) + return TRUE + +/obj/structure/kitchenspike_frame/attackby(obj/item/attacking_item, mob/user, params) + add_fingerprint(user) + if(!istype(attacking_item, /obj/item/stack/rods)) + return ..() + var/obj/item/stack/rods/used_rods = attacking_item + if(used_rods.get_amount() >= MEATSPIKE_IRONROD_REQUIREMENT) + used_rods.use(MEATSPIKE_IRONROD_REQUIREMENT) + balloon_alert(user, "meatspike built") + var/obj/structure/new_meatspike = new /obj/structure/kitchenspike(loc) + transfer_fingerprints_to(new_meatspike) + qdel(src) + return + balloon_alert(user, "[MEATSPIKE_IRONROD_REQUIREMENT] rods needed!") + +/obj/structure/kitchenspike_frame/examine(mob/user) + . = ..() + . += "It can be welded apart." + . += "You could attach [MEATSPIKE_IRONROD_REQUIREMENT] iron rods to it to create a Meat Spike." + +/obj/structure/kitchenspike_frame/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(isnull(held_item)) + return NONE + + var/message = "" + if(held_item.tool_behaviour == TOOL_WELDER) + message = "Deconstruct" + else if(held_item.tool_behaviour == TOOL_WRENCH) + message = "Bolt Down Frame" + + if(!message) + return NONE + context[SCREENTIP_CONTEXT_LMB] = message + return CONTEXTUAL_SCREENTIP_SET + /obj/structure/kitchenspike_frame/welder_act(mob/living/user, obj/item/tool) if(!tool.tool_start_check(user, amount = 0)) return FALSE diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 314539aa2b412..ffe4ea44a00cb 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -182,7 +182,7 @@ INVOKE_ASYNC(src, PROC_REF(start_travelling), user, going_up) /obj/structure/ladder/proc/check_menu(mob/user, is_ghost) - if(user.incapacitated() || (!user.Adjacent(src))) + if(user.incapacitated || (!user.Adjacent(src))) return FALSE return TRUE diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 0d7d23191742c..0b55326130022 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -162,7 +162,7 @@ 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) + playsound(src, 'sound/items/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) diff --git a/code/game/objects/structures/lavaland/gulag_vent.dm b/code/game/objects/structures/lavaland/gulag_vent.dm index c269c5213e71a..8cb530e31b18a 100644 --- a/code/game/objects/structures/lavaland/gulag_vent.dm +++ b/code/game/objects/structures/lavaland/gulag_vent.dm @@ -47,4 +47,4 @@ new spawned_boulder(get_turf(living_user)) living_user.visible_message(span_notice("[living_user] hauls a boulder out of [src].")) living_user.apply_damage(stamina_damage_to_inflict, STAMINA) - playsound(src, 'sound/weapons/genhit.ogg', vol = 50, vary = TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', vol = 50, vary = TRUE) diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm index bf69b23238c61..b169868a85fb7 100644 --- a/code/game/objects/structures/lavaland/necropolis_tendril.dm +++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm @@ -131,7 +131,7 @@ GLOBAL_LIST_INIT(tendrils, list()) /obj/effect/collapse/proc/collapse() for(var/mob/M in range(7,src)) shake_camera(M, 15, 1) - playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, TRUE) + playsound(get_turf(src),'sound/effects/explosion/explosionfar.ogg', 200, TRUE) visible_message(span_boldannounce("The tendril falls inward, the ground around it widening into a yawning chasm!")) for(var/turf/T in RANGE_TURFS(2,src)) if(HAS_TRAIT(T, TRAIT_NO_TERRAFORM)) diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm index f9214b989b95c..adf888a2d9c42 100644 --- a/code/game/objects/structures/lavaland/ore_vent.dm +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -121,7 +121,7 @@ for(var/i in 1 to 3) if(do_after(user, boulder_size * 1 SECONDS, src)) user.apply_damage(20, STAMINA) - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) produce_boulder(TRUE) visible_message(span_notice("You've successfully produced a boulder! Boy are your arms tired.")) @@ -263,39 +263,40 @@ * If the node drone is dead, the ore vent is not tapped and the wave defense can be reattempted. * * Also gives xp and mining points to all nearby miners in equal measure. + * Arguments: + * - force: Set to true if you want to just skip all checks and make the vent start producing boulders. */ -/obj/structure/ore_vent/proc/handle_wave_conclusion() +/obj/structure/ore_vent/proc/handle_wave_conclusion(force = FALSE) SIGNAL_HANDLER SEND_SIGNAL(src, COMSIG_VENT_WAVE_CONCLUDED) COOLDOWN_RESET(src, wave_cooldown) particles = null - if(!QDELETED(node)) - if(get_turf(node) != get_turf(src)) - visible_message(span_danger("The [node] detaches from the [src], and the vent closes back up!")) - icon_state = initial(icon_state) - update_appearance(UPDATE_ICON_STATE) - UnregisterSignal(node, COMSIG_MOVABLE_MOVED) - node.pre_escape(success = FALSE) - node = null - return //Start over! - - tapped = TRUE //The Node Drone has survived the wave defense, and the ore vent is tapped. - SSore_generation.processed_vents += src - log_game("Ore vent [key_name_and_tag(src)] was tapped") - SSblackbox.record_feedback("tally", "ore_vent_completed", 1, type) - balloon_alert_to_viewers("vent tapped!") - icon_state = icon_state_tapped - update_appearance(UPDATE_ICON_STATE) - qdel(GetComponent(/datum/component/gps)) - UnregisterSignal(node, COMSIG_QDELETING) - else + if(QDELETED(node) && !force) visible_message(span_danger("\the [src] creaks and groans as the mining attempt fails, and the vent closes back up.")) icon_state = initial(icon_state) update_appearance(UPDATE_ICON_STATE) node = null return //Bad end, try again. + else if(!QDELETED(node) && get_turf(node) != get_turf(src) && !force) + visible_message(span_danger("The [node] detaches from the [src], and the vent closes back up!")) + icon_state = initial(icon_state) + update_appearance(UPDATE_ICON_STATE) + UnregisterSignal(node, COMSIG_MOVABLE_MOVED) + node.pre_escape(success = FALSE) + node = null + return //Start over! + + tapped = TRUE //The Node Drone has survived the wave defense, and the ore vent is tapped. + SSore_generation.processed_vents += src + log_game("Ore vent [key_name_and_tag(src)] was tapped") + SSblackbox.record_feedback("tally", "ore_vent_completed", 1, type) + balloon_alert_to_viewers("vent tapped!") + icon_state = icon_state_tapped + update_appearance(UPDATE_ICON_STATE) + qdel(GetComponent(/datum/component/gps)) + UnregisterSignal(node, COMSIG_QDELETING) for(var/mob/living/miner in range(7, src)) //Give the miners who are near the vent points and xp. var/obj/item/card/id/user_id_card = miner.get_idcard(TRUE) @@ -307,7 +308,7 @@ if(user_id_card.registered_account) user_id_card.registered_account.mining_points += point_reward_val user_id_card.registered_account.bank_card_talk("You have been awarded [point_reward_val] mining points for your efforts.") - node.pre_escape() //Visually show the drone is done and flies away. + node?.pre_escape() //Visually show the drone is done and flies away. node = null add_overlay(mutable_appearance('icons/obj/mining_zones/terrain.dmi', "well", ABOVE_MOB_LAYER)) @@ -426,7 +427,7 @@ /** * When the ore vent cannot spawn a mob due to being blocked from all sides, we cause some MILD, MILD explosions. - * Explosion matches a gibtonite light explosion, as a way to clear neartby solid structures, with a high likelyhood of breaking the NODE drone. + * Explosion matches a gibtonite light explosion, as a way to clear nearby solid structures, with a high likelihood of breaking the NODE drone. */ /obj/structure/ore_vent/proc/anti_cheese() explosion(src, heavy_impact_range = 1, light_impact_range = 3, flame_range = 0, flash_range = 0, adminlog = FALSE) diff --git a/code/game/objects/structures/life_candle.dm b/code/game/objects/structures/life_candle.dm index 7c9250ed9a246..d9eb81c783c35 100644 --- a/code/game/objects/structures/life_candle.dm +++ b/code/game/objects/structures/life_candle.dm @@ -22,7 +22,7 @@ var/datum/outfit/outfit // How long until we respawn them after their death. var/respawn_time = 50 - var/respawn_sound = 'sound/magic/staff_animation.ogg' + var/respawn_sound = 'sound/effects/magic/staff_animation.ogg' /obj/structure/life_candle/Initialize(mapload) . = ..() diff --git a/code/game/objects/structures/maintenance.dm b/code/game/objects/structures/maintenance.dm index 375d526991893..d3eb552c46b8b 100644 --- a/code/game/objects/structures/maintenance.dm +++ b/code/game/objects/structures/maintenance.dm @@ -1,9 +1,9 @@ /** This structure acts as a source of moisture loving cell lines, -as well as a location where a hidden item can somtimes be retrieved +as well as a location where a hidden item can sometimes be retrieved at the cost of risking a vicious bite.**/ /obj/structure/moisture_trap name = "moisture trap" - desc = "A device installed in order to control moisture in poorly ventilated areas.\nThe stagnant water inside basin seems to produce serious biofouling issues when improperly maintained.\nThis unit in particular seems to be teeming with life!\nWho thought mother Gaia could assert herself so vigoriously in this sterile and desolate place?" + desc = "A device installed in order to control moisture in poorly ventilated areas.\nThe stagnant water inside basin seems to produce serious biofouling issues when improperly maintained.\nThis unit in particular seems to be teeming with life!\nWho thought mother Gaia could assert herself so vigorously in this sterile and desolate place?" icon_state = "moisture_trap" anchored = TRUE density = FALSE @@ -58,7 +58,7 @@ at the cost of risking a vicious bite.**/ if(!isliving(user)) return FALSE var/mob/living/living_user = user - if(living_user.body_position == STANDING_UP && ishuman(living_user)) //I dont think monkeys can crawl on command. + if(living_user.body_position == STANDING_UP && ishuman(living_user)) //I don't think monkeys can crawl on command. return FALSE return TRUE @@ -84,7 +84,7 @@ at the cost of risking a vicious bite.**/ to_chat(user, span_danger("You feel a sharp pain as an unseen creature sinks its [pick("fangs", "beak", "proboscis")] into your arm!")) if(affecting?.receive_damage(30)) bite_victim.update_damage_overlays() - playsound(src,'sound/weapons/bite.ogg', 70, TRUE) + playsound(src,'sound/items/weapons/bite.ogg', 70, TRUE) return to_chat(user, span_warning("You find nothing of value...")) @@ -122,8 +122,8 @@ at the cost of risking a vicious bite.**/ desc = "What is this? Who put it on this station? And why does it emanate strange energy?" icon_state = "altar" cult_examine_tip = "Even you don't understand the eldritch magic behind this." - break_message = "The structure shatters, leaving only a demonic screech!" - break_sound = 'sound/magic/demon_dies.ogg' + break_message = span_warning("The structure shatters, leaving only a demonic screech!") + break_sound = 'sound/effects/magic/demon_dies.ogg' light_color = LIGHT_COLOR_BLOOD_MAGIC light_range = 2 use_cooldown_duration = 1 MINUTES @@ -188,7 +188,7 @@ at the cost of risking a vicious bite.**/ status = ALTAR_STAGEONE update_icon() visible_message(span_warning("[src] starts creating something...")) - playsound(src, 'sound/magic/pantsaltar.ogg', 60) + playsound(src, 'sound/effects/magic/pantsaltar.ogg', 60) addtimer(CALLBACK(src, PROC_REF(pants_stagetwo)), ALTAR_TIME) /// Continues the creation, making every mob nearby nauseous. @@ -226,7 +226,7 @@ at the cost of risking a vicious bite.**/ /obj/structure/destructible/cult/pants_altar/proc/check_menu(mob/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE diff --git a/code/game/objects/structures/mannequin.dm b/code/game/objects/structures/mannequin.dm index 871438cd5aed9..d94b65a02a2fa 100644 --- a/code/game/objects/structures/mannequin.dm +++ b/code/game/objects/structures/mannequin.dm @@ -108,15 +108,15 @@ var/datum/sprite_accessory/underwear/underwear = SSaccessories.underwear_list[underwear_name] if(underwear) if(body_type == FEMALE && underwear.gender == MALE) - . += wear_female_version(underwear.icon_state, underwear.icon, BODY_LAYER, FEMALE_UNIFORM_FULL) + . += mutable_appearance(wear_female_version(underwear.icon_state, underwear.icon, FEMALE_UNIFORM_FULL), layer = -BODY_LAYER) else - . += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) + . += mutable_appearance(underwear.icon, underwear.icon_state, layer = -BODY_LAYER) var/datum/sprite_accessory/undershirt/undershirt = SSaccessories.undershirt_list[undershirt_name] if(undershirt) if(body_type == FEMALE) - . += wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) + . += mutable_appearance(wear_female_version(undershirt.icon_state, undershirt.icon), layer = -BODY_LAYER) else - . += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) + . += mutable_appearance(undershirt.icon, undershirt.icon_state, layer = -BODY_LAYER) var/datum/sprite_accessory/socks/socks = SSaccessories.socks_list[socks_name] if(socks) . += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 0af1dcded4e44..5fae9be3e886f 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -88,7 +88,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) return display_radial_menu(user) /obj/structure/mirror/proc/display_radial_menu(mob/living/carbon/human/user) - var/pick = show_radial_menu(user, src, mirror_options, user, radius = 36, require_near = TRUE) + var/pick = show_radial_menu(user, src, mirror_options, user, radius = 36, require_near = TRUE, tooltips = TRUE) if(!pick) return TRUE //get out @@ -383,12 +383,36 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) desc = "Pride cometh before the..." race_flags = MIRROR_PRIDE mirror_options = PRIDE_MIRROR_OPTIONS + /// If the last user has altered anything about themselves + var/changed = FALSE + +/obj/structure/mirror/magic/pride/display_radial_menu(mob/living/carbon/human/user) + var/pick = show_radial_menu(user, src, mirror_options, user, radius = 36, require_near = TRUE, tooltips = TRUE) + if(!pick) + return TRUE //get out + + changed = TRUE + switch(pick) + if(CHANGE_HAIR) + change_hair(user) + if(CHANGE_BEARD) + change_beard(user) + if(CHANGE_RACE) + change_race(user) + if(CHANGE_SEX) // sex: yes + change_sex(user) + if(CHANGE_NAME) + change_name(user) + if(CHANGE_EYES) + change_eyes(user) + + return display_radial_menu(user) /obj/structure/mirror/magic/pride/attack_hand(mob/living/carbon/human/user) + changed = FALSE . = ..() - if(.) - return TRUE - + if (!changed) + return 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-"), diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 2c181b12ab307..c4c38072cb9ef 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -31,7 +31,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants and other ghosties. /obj/structure/bodycontainer - icon = 'icons/obj/structures.dmi'//ICON OVERRIDDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/structures.dmi' icon_state = "morgue1" density = TRUE anchored = TRUE @@ -272,7 +272,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an 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 + playsound(src, 'sound/items/weapons/gun/general/empty_alarm.ogg', 50, FALSE) //Revive them you blind fucks COOLDOWN_START(src, next_beep, beep_cooldown) SEND_SIGNAL(src, COMSIG_MORGUE_ALARM) // BUBBER EDIT diff --git a/code/game/objects/structures/mystery_box.dm b/code/game/objects/structures/mystery_box.dm index 9bb51ba09cbef..0a0c9ca0a1017 100644 --- a/code/game/objects/structures/mystery_box.dm +++ b/code/game/objects/structures/mystery_box.dm @@ -121,8 +121,8 @@ GLOBAL_LIST_INIT(mystery_fishing, list( max_integrity = 99999 damage_deflection = 100 - var/crate_open_sound = 'sound/machines/crate_open.ogg' - var/crate_close_sound = 'sound/machines/crate_close.ogg' + var/crate_open_sound = 'sound/machines/crate/crate_open.ogg' + var/crate_close_sound = 'sound/machines/crate/crate_close.ogg' var/open_sound = 'sound/effects/mysterybox/mbox_full.ogg' var/grant_sound = 'sound/effects/mysterybox/mbox_end.ogg' /// The box's current state, and whether it can be interacted with in different ways @@ -142,7 +142,7 @@ GLOBAL_LIST_INIT(mystery_fishing, list( /// Stores the current sound channel we're using so we can cut off our own sounds as needed. Randomized after each roll var/current_sound_channel /// How many time can it still be used? - var/uses_left + var/uses_left = INFINITY /// A list of weakrefs to mind datums of people that opened it and how many times. var/list/datum/weakref/minds_that_opened_us @@ -281,6 +281,7 @@ GLOBAL_LIST_INIT(mystery_fishing, list( max_integrity = 100 damage_deflection = 30 grant_extra_mag = FALSE + anchored = FALSE /obj/structure/mystery_box/handle_deconstruct(disassembled) new /obj/item/stack/sheet/mineral/wood(drop_location(), 2) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 841da89972599..8bae150e3ba37 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -66,7 +66,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/noticeboard, 32) data["items"] += list(content_data) return data -/obj/structure/noticeboard/ui_act(action, params) +/obj/structure/noticeboard/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm index 5383436d4dbff..d27a2e8e1cd8d 100644 --- a/code/game/objects/structures/petrified_statue.dm +++ b/code/game/objects/structures/petrified_statue.dm @@ -13,24 +13,24 @@ /obj/structure/statue/petrified/relaymove() return -/obj/structure/statue/petrified/Initialize(mapload, mob/living/L, statue_timer, save_brain) +/obj/structure/statue/petrified/Initialize(mapload, mob/living/living, statue_timer, save_brain) . = ..() if(statue_timer) timer = statue_timer if(save_brain) brain = save_brain - if(L) - petrified_mob = L - if(L.buckled) - L.buckled.unbuckle_mob(L,force=1) - L.visible_message(span_warning("[L]'s skin rapidly turns to marble!"), span_userdanger("Your body freezes up! Can't... move... can't... think...")) - L.forceMove(src) - ADD_TRAIT(L, TRAIT_MUTE, STATUE_MUTE) - L.faction |= FACTION_MIMIC //Stops mimics from instaqdeling people in statues - L.status_flags |= GODMODE - atom_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues - max_integrity = atom_integrity - START_PROCESSING(SSobj, src) + if(!living) + return + petrified_mob = living + if(living.buckled) + living.buckled.unbuckle_mob(living, force = TRUE) + living.visible_message(span_warning("[living]'s skin rapidly turns to marble!"), span_userdanger("Your body freezes up! Can't... move... can't... think...")) + living.forceMove(src) + living.add_traits(list(TRAIT_GODMODE, TRAIT_MUTE, TRAIT_NOBLOOD), STATUE_MUTE) + living.faction |= FACTION_MIMIC //Stops mimics from instaqdeling people in statues + atom_integrity = living.health + 100 //stoning damaged mobs will result in easier to shatter statues + max_integrity = atom_integrity + START_PROCESSING(SSobj, src) /obj/structure/statue/petrified/process(seconds_per_tick) if(!petrified_mob) @@ -47,6 +47,9 @@ /obj/structure/statue/petrified/Exited(atom/movable/gone, direction) . = ..() if(gone == petrified_mob) + petrified_mob.remove_traits(list(TRAIT_GODMODE, TRAIT_MUTE, TRAIT_NOBLOOD), STATUE_MUTE) + petrified_mob.take_overall_damage((petrified_mob.health - atom_integrity + 100)) //any new damage the statue incurred is transferred to the mob + petrified_mob.faction -= FACTION_MIMIC petrified_mob = null /obj/structure/statue/petrified/Destroy() @@ -64,13 +67,7 @@ for(var/obj/O in src) O.forceMove(loc) - if(petrified_mob) - petrified_mob.status_flags &= ~GODMODE - REMOVE_TRAIT(petrified_mob, TRAIT_MUTE, STATUE_MUTE) - REMOVE_TRAIT(petrified_mob, TRAIT_NOBLOOD, MAGIC_TRAIT) - petrified_mob.take_overall_damage((petrified_mob.health - atom_integrity + 100)) //any new damage the statue incurred is transferred to the mob - petrified_mob.faction -= FACTION_MIMIC - petrified_mob.forceMove(loc) + petrified_mob?.forceMove(loc) return ..() /obj/structure/statue/petrified/atom_deconstruct(disassembled = TRUE) @@ -114,7 +111,6 @@ return FALSE var/obj/structure/statue/petrified/S = new(loc, src, statue_timer, save_brain) S.name = "statue of [name]" - ADD_TRAIT(src, TRAIT_NOBLOOD, MAGIC_TRAIT) S.copy_overlays(src) var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) if(colorlist) diff --git a/code/game/objects/structures/pinatas.dm b/code/game/objects/structures/pinatas.dm index 6483d39b1a26c..56a258a45f7be 100644 --- a/code/game/objects/structures/pinatas.dm +++ b/code/game/objects/structures/pinatas.dm @@ -28,18 +28,18 @@ . = ..() if(get_integrity() < (max_integrity/2)) icon_state = "[base_icon_state]_damaged" - if(damage_amount >= 10) // Swing means minimum damage threshhold for dropping candy is met. + if(damage_amount >= 10) // Swing means minimum damage threshold for dropping candy is met. flick("[icon_state]_swing", src) /obj/structure/pinata/play_attack_sound(damage_amount, damage_type, damage_flag) switch(damage_type) if(BRUTE) if(damage_amount) - playsound(src, 'sound/weapons/slash.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/slash.ogg', 50, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(src, 'sound/items/welder.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/pinata/atom_deconstruct(disassembled) new debris(get_turf(src)) diff --git a/code/game/objects/structures/plaques/_plaques.dm b/code/game/objects/structures/plaques/_plaques.dm index 1277869dbf67f..951a538e7241a 100644 --- a/code/game/objects/structures/plaques/_plaques.dm +++ b/code/game/objects/structures/plaques/_plaques.dm @@ -88,7 +88,7 @@ var/namechoice = tgui_input_text(user, "Title this plaque. (e.g. 'Best HoP Award', 'Great Ashwalker War Memorial')", "Plaque Customization", max_length = MAX_NAME_LEN) if(!namechoice) return - var/descriptionchoice = tgui_input_text(user, "Engrave this plaque's text", "Plaque Customization") + var/descriptionchoice = tgui_input_text(user, "Engrave this plaque's text", "Plaque Customization", max_length = MAX_PLAQUE_LEN) if(!descriptionchoice) return if(!Adjacent(user)) //Make sure user is adjacent still @@ -161,7 +161,7 @@ var/namechoice = tgui_input_text(user, "Title this plaque. (e.g. 'Best HoP Award', 'Great Ashwalker War Memorial')", "Plaque Customization", max_length = MAX_NAME_LEN) if(!namechoice) return - var/descriptionchoice = tgui_input_text(user, "Engrave this plaque's text", "Plaque Customization") + var/descriptionchoice = tgui_input_text(user, "Engrave this plaque's text", "Plaque Customization", max_length = MAX_PLAQUE_LEN) if(!descriptionchoice) return if(!Adjacent(user)) //Make sure user is adjacent still diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index d1c70dd188ad1..a5ed048153c41 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -2,7 +2,7 @@ name = "airtight plastic flaps" desc = "Heavy duty, airtight, plastic flaps. Definitely can't get past those. No way." gender = PLURAL - icon = 'icons/obj/structures.dmi'//ICON OVERRIDDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/structures.dmi' icon_state = "plasticflaps" armor_type = /datum/armor/structure_plasticflaps density = FALSE diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index b23641a416a16..2481d1307ea53 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/railings.dmi' icon_state = "railing" flags_1 = ON_BORDER_1 - obj_flags = CAN_BE_HIT | BLOCKS_CONSTRUCTION_DIR + obj_flags = CAN_BE_HIT | BLOCKS_CONSTRUCTION_DIR | IGNORE_DENSITY density = TRUE anchored = TRUE pass_flags_self = LETPASSTHROW|PASSSTRUCTURE @@ -25,17 +25,30 @@ energy = 100 bomb = 10 +/obj/structure/railing/unbreakable + resistance_flags = INDESTRUCTIBLE + /obj/structure/railing/corner //aesthetic corner sharp edges hurt oof ouch icon_state = "railing_corner" density = FALSE climbable = FALSE + +/obj/structure/railing/corner/unbreakable + resistance_flags = INDESTRUCTIBLE + /obj/structure/railing/corner/end //end of a segment of railing without making a loop icon_state = "railing_end" +/obj/structure/railing/corner/end/unbreakable + resistance_flags = INDESTRUCTIBLE + /obj/structure/railing/corner/end/flip //same as above but flipped around icon_state = "railing_end_flip" +/obj/structure/railing/corner/end/flip/unbreakable + resistance_flags = INDESTRUCTIBLE + /obj/structure/railing/Initialize(mapload) . = ..() if(climbable) @@ -89,6 +102,10 @@ /obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I) . = ..() + if(resistance_flags & INDESTRUCTIBLE) + to_chat(user, span_warning("You try to cut apart the railing, but it's too hard!")) + I.play_tool_sound(src, 100) + return TRUE to_chat(user, span_warning("You cut apart the railing.")) I.play_tool_sound(src, 100) deconstruct() diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index e27f5fcf42b40..5cd3f58df0530 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -311,7 +311,7 @@ return data -/obj/structure/reflector/ui_act(action, params) +/obj/structure/reflector/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index bcc9d1386955b..b2796019f168b 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -129,7 +129,7 @@ FLOOR SAFES return data -/obj/structure/safe/ui_act(action, params) +/obj/structure/safe/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -234,7 +234,7 @@ FLOOR SAFES if(!canhear) return if(current_tick == 2) - to_chat(user, "The sounds from [src] are too fast and blend together.") + to_chat(user, span_italics("The sounds from [src] are too fast and blend together.")) if(total_ticks == 1 || prob(SOUND_CHANCE)) balloon_alert(user, pick(sounds)) diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm index 14ac052639422..2158a88a6b656 100644 --- a/code/game/objects/structures/showcase.dm +++ b/code/game/objects/structures/showcase.dm @@ -52,7 +52,6 @@ /obj/structure/showcase/machinery/oldpod/used/psyker name = "opened mental energizer" desc = "A mental energizer that has recently discharged its occupant. The pod appears non-functional." - icon = 'icons/obj/machines/sleeper.dmi' icon_state = "psykerpod-open" /obj/structure/showcase/cyborg/old diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 67fe92951d0ae..0ae4c1173d4cb 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -120,6 +120,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) return TRUE + //SKYRAT EDIT ADDITION /obj/machinery/shower/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) if(do_after(user, 3 SECONDS, src)) @@ -195,10 +196,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) deconstruct() return TRUE -/obj/machinery/shower/setDir(newdir) - . = ..() - update_appearance(UPDATE_OVERLAYS) - /obj/machinery/shower/update_overlays() . = ..() if(!actually_on) @@ -206,14 +203,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) 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) switch(dir) - + if(NORTH) + water_falling.pixel_y += pixel_shift if(SOUTH) - water_falling.pixel_z -= 24 + water_falling.pixel_y -= pixel_shift if(EAST) - water_falling.pixel_w += 16 + water_falling.pixel_x += pixel_shift if(WEST) - water_falling.pixel_w -= 16 - + water_falling.pixel_x -= pixel_shift . += water_falling /obj/machinery/shower/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index 9268cb9c059ce..d3713ca1b2f68 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -12,7 +12,7 @@ var/buildable_sign = TRUE ///This determines if you can select this sign type when using a pen on a sign backing. False by default, set to true per sign type to override. var/is_editable = FALSE - ///sign_change_name is used to make nice looking, alphebetized and categorized names when you use a pen on any sign item or structure which is_editable. + ///sign_change_name is used to make nice looking, alphabetized and categorized names when you use a pen on any sign item or structure which is_editable. var/sign_change_name ///Callback to the knock down proc for wallmounting behavior. var/knock_down_callback @@ -135,7 +135,7 @@ unwrenched_sign.setDir(dir) qdel(src) //The sign structure on the wall goes poof and only the sign item from unwrenching remains. -/obj/structure/sign/blank //This subtype is necessary for now because some other things (posters, picture frames, paintings) inheret from the parent type. +/obj/structure/sign/blank //This subtype is necessary for now because some other things (posters, picture frames, paintings) inherit from the parent type. icon_state = "backing" name = "sign backing" desc = "A plastic sign backing, use a pen to change the decal. It can be detached from the wall with a wrench." diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index 743d76ef182b2..db4981aeac77a 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -53,7 +53,7 @@ to_chat(user, span_warning("[src] already has a holotag attached!")) return to_chat(user, span_notice("You affix a holotag to [src].")) - playsound(src, 'sound/machines/twobeep.ogg', 100) + playsound(src, 'sound/machines/beep/twobeep.ogg', 100) gps_tagged = TRUE assigned_tag = "\[[mob_gps_id]-[rand(100,999)]\] " + spawner_gps_id var/datum/component/gps/our_gps = GetComponent(/datum/component/gps) @@ -221,7 +221,7 @@ /obj/structure/spawner/nether/process(seconds_per_tick) for(var/mob/living/living_mob in contents) if(living_mob) - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) living_mob.adjustBruteLoss(60 * seconds_per_tick) new /obj/effect/gibspawner/generic(get_turf(living_mob), living_mob) if(living_mob.stat == DEAD) @@ -299,5 +299,5 @@ proteon.add_filter("sentient_proteon", 3, list("type" = "outline", "color" = COLOR_CULT_RED, "size" = 2, "alpha" = 40)) /obj/structure/spawner/sentient/proteon_spawner/handle_deconstruct(disassembled) - playsound('sound/hallucinations/veryfar_noise.ogg', 125) + playsound('sound/effects/hallucinations/veryfar_noise.ogg', 125) visible_message(span_cult_bold("[src] completely falls apart, the screams of the damned reaching a feverous pitch before slowly fading away into nothing.")) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index f813e355c7e6f..06553329897ac 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -55,6 +55,8 @@ AddElement(/datum/element/give_turf_traits, give_turf_traits) register_context() + ADD_TRAIT(src, TRAIT_COMBAT_MODE_SKIP_INTERACTION, INNATE_TRAIT) + ///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) @@ -224,36 +226,24 @@ deconstruct(TRUE) return ITEM_INTERACT_SUCCESS -/obj/structure/table/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) - if(istype(tool, /obj/item/construction/rcd)) - return NONE +// This extends base item interaction because tables default to blocking 99% of interactions +/obj/structure/table/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(.) + return . - var/deck_act_value = NONE if(istype(tool, /obj/item/toy/cards/deck)) - deck_act_value = deck_act(user, tool, modifiers, TRUE) - // Continue to placing if we don't do anything else - if(deck_act_value != NONE) - return deck_act_value - - if(!user.combat_mode) - return table_place_act(user, tool, modifiers) - - return NONE - -/obj/structure/table/item_interaction(mob/living/user, obj/item/tool, list/modifiers) - . = NONE + . = deck_act(user, tool, modifiers, !!LAZYACCESS(modifiers, RIGHT_CLICK)) if(istype(tool, /obj/item/storage/bag/tray)) . = tray_act(user, tool) - else if(istype(tool, /obj/item/toy/cards/deck)) - . = deck_act(user, tool, modifiers, FALSE) else if(istype(tool, /obj/item/riding_offhand)) . = riding_offhand_act(user, tool) // Continue to placing if we don't do anything else - if(. != NONE) + if(.) return . - if(!user.combat_mode) + if(!user.combat_mode || (tool.item_flags & NOBLUDGEON)) return table_place_act(user, tool, modifiers) return NONE @@ -319,8 +309,8 @@ // Items are centered by default, but we move them if click ICON_X and ICON_Y are available 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 table turf) - tool.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size*0.5), world.icon_size*0.5) - tool.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size*0.5), world.icon_size*0.5) + tool.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(ICON_SIZE_X*0.5), ICON_SIZE_X*0.5) + tool.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(ICON_SIZE_Y*0.5), ICON_SIZE_Y*0.5) AfterPutItemOnTable(tool, user) return ITEM_INTERACT_SUCCESS @@ -480,7 +470,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 & MOVETYPES_NOT_TOUCHING_GROUND) && (!isteshari(M))) //SKYRAT EDIT ADDITION - Allows Teshari to climb on glassies safely. + if(M.has_gravity() && M.mob_size > MOB_SIZE_SMALL && !(M.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) && (!isteshari(M))) //SKYRAT EDIT ADDITION - Allows Teshari to climb on glassies safely. - This should be a component table_shatter(M) /obj/structure/table/glass/proc/table_shatter(mob/living/victim) @@ -707,7 +697,7 @@ /obj/structure/table/bronze/tablepush(mob/living/user, mob/living/pushed_mob) ..() - playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/clockwork/fellowship_armory.ogg', 50, TRUE) /obj/structure/table/reinforced/rglass name = "reinforced glass table" @@ -794,6 +784,16 @@ 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 @@ -859,6 +859,7 @@ AddElement(/datum/element/climbable) AddElement(/datum/element/elevation, pixel_shift = 12) register_context() + ADD_TRAIT(src, TRAIT_COMBAT_MODE_SKIP_INTERACTION, INNATE_TRAIT) /obj/structure/rack/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) if(isnull(held_item)) @@ -886,8 +887,11 @@ deconstruct(TRUE) return ITEM_INTERACT_SUCCESS -/obj/structure/rack/item_interaction(mob/living/user, obj/item/tool, list/modifiers) - if((tool.item_flags & ABSTRACT) || user.combat_mode) +/obj/structure/rack/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(.) + return . + if((tool.item_flags & ABSTRACT) || (user.combat_mode && !(tool.item_flags & NOBLUDGEON))) return NONE if(user.transferItemToLoc(tool, drop_location(), silent = FALSE)) return ITEM_INTERACT_SUCCESS @@ -913,9 +917,9 @@ if(damage_amount) playsound(loc, 'sound/items/dodgeball.ogg', 80, TRUE) else - playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(loc, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(loc, 'sound/items/welder.ogg', 40, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 40, TRUE) /* * Rack destruction @@ -976,8 +980,7 @@ if(!user.temporarilyRemoveItemFromInventory(src)) return var/obj/structure/rack/R = new /obj/structure/rack(get_turf(src)) - user.visible_message("[user] assembles \a [R].\ - ", span_notice("You assemble \a [R].")) + user.visible_message(span_notice("[user] assembles \a [R]."), span_notice("You assemble \a [R].")) R.add_fingerprint(user) qdel(src) building = FALSE diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 2d16ea30a69e4..46c18d85b407f 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -71,7 +71,7 @@ oxygentanks++ else full = TRUE - else if(!user.combat_mode) + else if(!user.combat_mode || (I.item_flags & NOBLUDGEON)) balloon_alert(user, "can't insert!") return else diff --git a/code/game/objects/structures/training_machine.dm b/code/game/objects/structures/training_machine.dm index bed4c4805cca6..e0bb6357a8a22 100644 --- a/code/game/objects/structures/training_machine.dm +++ b/code/game/objects/structures/training_machine.dm @@ -79,7 +79,7 @@ * * Will not respond if moving and emagged, so once you set it to go it can't be stopped! */ -/obj/structure/training_machine/ui_act(action, params) +/obj/structure/training_machine/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -209,7 +209,7 @@ moving = FALSE starting_turf = null say(message) - playsound(src,'sound/machines/synth_no.ogg',50,FALSE) + playsound(src,'sound/machines/synth/synth_no.ogg',50,FALSE) STOP_PROCESSING(SSfastprocess, src) /** @@ -221,7 +221,7 @@ moving = TRUE starting_turf = get_turf(src) say("Beginning training simulation.") - playsound(src,'sound/machines/triple_beep.ogg',50,FALSE) + playsound(src,'sound/machines/beep/triple_beep.ogg',50,FALSE) START_PROCESSING(SSfastprocess, src) /** @@ -285,7 +285,7 @@ do_attack_animation(target, null, attached_item) if (obj_flags & EMAGGED) target.apply_damage(attached_item.force, BRUTE, BODY_ZONE_CHEST, attacking_item = attached_item) - playsound(src, 'sound/weapons/smash.ogg', 15, TRUE) + playsound(src, 'sound/items/weapons/smash.ogg', 15, TRUE) COOLDOWN_START(src, attack_cooldown, rand(MIN_ATTACK_DELAY, MAX_ATTACK_DELAY)) /** @@ -390,9 +390,9 @@ return FALSE total_hits++ lap_hits++ - playsound(src,'sound/weapons/smash.ogg',50,FALSE) + playsound(src,'sound/items/weapons/smash.ogg',50,FALSE) if (lap_hits % HITS_TO_KILL == 0) - playsound(src,'sound/machines/twobeep.ogg',25,FALSE) + playsound(src,'sound/machines/beep/twobeep.ogg',25,FALSE) return TRUE /obj/item/training_toolbox/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 8fc1426c5f36d..39a62204fa5d0 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -251,7 +251,7 @@ return var/obj/structure/transit_tube_pod/dispensed/pod = new(loc) AM.visible_message(span_notice("[pod] forms around [AM]."), span_notice("[pod] materializes around you.")) - playsound(src, 'sound/weapons/emitter2.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/emitter2.ogg', 50, TRUE) pod.setDir(turn(src.dir, -90)) AM.forceMove(pod) pod.update_appearance() 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 f88aadc04631f..6522a2125fea3 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -69,7 +69,7 @@ deconstruct(FALSE) /obj/structure/transit_tube_pod/container_resist_act(mob/living/user) - if(!user.incapacitated()) + if(!user.incapacitated) empty_pod() return if(!moving) diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm index 0cf5ddf7c9130..a30a59e45a2c1 100644 --- a/code/game/objects/structures/traps.dm +++ b/code/game/objects/structures/traps.dm @@ -6,7 +6,7 @@ density = FALSE anchored = TRUE alpha = 30 //initially quite hidden when not "recharging" - var/flare_message = "the trap flares brightly!" + var/flare_message = span_warning("the trap flares brightly!") var/last_trigger = 0 var/time_between_triggers = 1 MINUTES var/charges = INFINITY @@ -20,7 +20,7 @@ /obj/structure/trap/Initialize(mapload) . = ..() - flare_message = "[src] flares brightly!" + flare_message = span_warning("[src] flares brightly!") spark_system = new spark_system.set_up(4,1,src) spark_system.attach(src) @@ -113,7 +113,7 @@ /obj/structure/trap/stun/hunter/Initialize(mapload) . = ..() time_between_triggers = 1 SECONDS - flare_message = "[src] snaps shut!" + flare_message = span_warning("[src] snaps shut!") /obj/structure/trap/stun/hunter/Destroy() if(!QDELETED(stored_item)) diff --git a/code/game/objects/structures/votingbox.dm b/code/game/objects/structures/votingbox.dm index 42ccd62509304..55909978fe2f7 100644 --- a/code/game/objects/structures/votingbox.dm +++ b/code/game/objects/structures/votingbox.dm @@ -94,7 +94,7 @@ ui_interact(user) /obj/structure/votebox/proc/set_description(mob/user) - var/new_description = tgui_input_text(user, "Enter a new description", "Vote Description", vote_description, multiline = TRUE) + var/new_description = tgui_input_text(user, "Enter a new description", "Vote Description", vote_description, multiline = TRUE, max_length = MAX_DESC_LEN) if(new_description) vote_description = new_description diff --git a/code/game/objects/structures/water_structures/sink.dm b/code/game/objects/structures/water_structures/sink.dm index 878dab578a52e..1cd3f7d7aaa53 100644 --- a/code/game/objects/structures/water_structures/sink.dm +++ b/code/game/objects/structures/water_structures/sink.dm @@ -204,7 +204,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14)) if(O.item_flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. return - if(!user.combat_mode) + if(!user.combat_mode || (O.item_flags & NOBLUDGEON)) to_chat(user, span_notice("You start washing [O]...")) busy = TRUE if(!do_after(user, 4 SECONDS, target = src)) diff --git a/code/game/objects/structures/water_structures/toilet.dm b/code/game/objects/structures/water_structures/toilet.dm index 7237cd03c5045..986d7eae4ea05 100644 --- a/code/game/objects/structures/water_structures/toilet.dm +++ b/code/game/objects/structures/water_structures/toilet.dm @@ -25,13 +25,9 @@ var/list/cistern_items ///Lazylist of fish in the toilet, not to be mixed with the items in the cistern. Max of 3 var/list/fishes - ///Static toilet water overlay given to toilets that are facing a direction we can see the water in. - var/static/mutable_appearance/toilet_water_overlay /obj/structure/toilet/Initialize(mapload) . = ..() - if(isnull(toilet_water_overlay)) - toilet_water_overlay = mutable_appearance(icon, "[base_icon_state]-water") cover_open = round(rand(0, 1)) update_appearance(UPDATE_ICON) if(mapload && SSmapping.level_trait(z, ZTRAIT_STATION)) @@ -176,8 +172,8 @@ /obj/structure/toilet/update_overlays() . = ..() - if(!flushing && cover_open && (dir & SOUTH)) - . += toilet_water_overlay + if(!flushing && cover_open) + . += "[base_icon_state]-water" /obj/structure/toilet/atom_deconstruct(dissambled = TRUE) for(var/obj/toilet_item in cistern_items) diff --git a/code/game/objects/structures/water_structures/water_source.dm b/code/game/objects/structures/water_structures/water_source.dm index 9420156d91805..a59051f92dd50 100644 --- a/code/game/objects/structures/water_structures/water_source.dm +++ b/code/game/objects/structures/water_structures/water_source.dm @@ -114,7 +114,7 @@ attacking_item.use(1) return - if(!user.combat_mode) + if(!user.combat_mode || (attacking_item.item_flags & NOBLUDGEON)) to_chat(user, span_notice("You start washing [attacking_item]...")) busy = TRUE if(!do_after(user, 4 SECONDS, target = src)) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 4c22cbf01b29d..4ff29eb606e8f 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -252,7 +252,7 @@ ae.forceMove(drop_location()) else if(IS_WRITING_UTENSIL(W)) - var/t = tgui_input_text(user, "Enter the name for the door", "Windoor Renaming", created_name, MAX_NAME_LEN) + var/t = tgui_input_text(user, "Enter the name for the door", "Windoor Renaming", created_name, max_length = MAX_NAME_LEN) if(!t) return if(!in_range(src, usr) && loc != usr) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 04428bb617fdb..995f9b617bb7f 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -28,9 +28,9 @@ var/glass_amount = 1 var/real_explosion_block //ignore this, just use explosion_block var/break_sound = SFX_SHATTER - var/knock_sound = 'sound/effects/glassknock.ogg' - var/bash_sound = 'sound/effects/glassbash.ogg' - var/hit_sound = 'sound/effects/glasshit.ogg' + var/knock_sound = 'sound/effects/glass/glassknock.ogg' + var/bash_sound = 'sound/effects/glass/glassbash.ogg' + var/hit_sound = 'sound/effects/glass/glasshit.ogg' /// If some inconsiderate jerk has had their blood spilled on this window, thus making it cleanable var/bloodied = FALSE ///Datum that the shard and debris type is pulled from for when the glass is broken. @@ -321,9 +321,9 @@ if(damage_amount) playsound(src, hit_sound, 75, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(src, 'sound/items/welder.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/window/atom_deconstruct(disassembled = TRUE) @@ -450,6 +450,7 @@ addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/movable, forceMove), loc), time_to_go + time_to_return) //we back boys addtimer(VARSET_CALLBACK(src, dramatically_disappearing, FALSE), time_to_go + time_to_return) //also set the var back addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), time_to_go + time_to_return) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), get_turf(src), 'sound/effects/glass/glass_reverse.ogg', 70, TRUE), time_to_go + time_to_return) var/obj/structure/grille/grill = take_grill ? (locate(/obj/structure/grille) in loc) : null if(grill) @@ -490,7 +491,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/unanchored/spawner, 0) //2022 BABYYYYY ~lewc //2023 ONE YEAR TO GO! -LT3 /datum/armor/window_reinforced - melee = 50 + melee = 80 bomb = 25 fire = 80 acid = 100 @@ -504,7 +505,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/unanchored/spawner, 0) switch(state) if(RWINDOW_SECURE) if(tool.tool_behaviour == TOOL_WELDER) - if(tool.tool_start_check(user)) + if(tool.tool_start_check(user, heat_required = HIGH_TEMPERATURE_REQUIRED)) user.visible_message(span_notice("[user] holds \the [tool] to the security screws on \the [src]..."), span_notice("You begin heating the security screws on \the [src]...")) if(tool.use_tool(src, user, 15 SECONDS, volume = 100)) @@ -898,9 +899,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw resistance_flags = FLAMMABLE armor_type = /datum/armor/none knock_sound = SFX_PAGE_TURN - bash_sound = 'sound/weapons/slashmiss.ogg' - break_sound = 'sound/items/poster_ripped.ogg' - hit_sound = 'sound/weapons/slashmiss.ogg' + bash_sound = 'sound/items/weapons/slashmiss.ogg' + break_sound = 'sound/items/poster/poster_ripped.ogg' + hit_sound = 'sound/items/weapons/slashmiss.ogg' 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) diff --git a/code/game/say.dm b/code/game/say.dm index ee54ef4a8f7bf..28a868a5c1601 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -12,6 +12,7 @@ GLOBAL_LIST_INIT(freqtospan, list( "[FREQ_SECURITY]" = "secradio", "[FREQ_COMMAND]" = "comradio", "[FREQ_AI_PRIVATE]" = "aiprivradio", + "[FREQ_ENTERTAINMENT]" = "enteradio", "[FREQ_SYNDICATE]" = "syndradio", "[FREQ_UPLINK]" = "syndradio", // this probably shouldnt appear ingame "[FREQ_CENTCOM]" = "centcomradio", @@ -294,7 +295,7 @@ GLOBAL_LIST_INIT(freqtospan, list( //HACKY VIRTUALSPEAKER STUFF BEYOND THIS POINT //these exist mostly to deal with the AIs hrefs and job stuff. -/atom/movable/proc/GetJob() //Get a job, you lazy butte +/atom/movable/proc/get_job() //Get a job, you lazy butte /atom/movable/proc/GetSource() @@ -341,7 +342,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/virtualspeaker) else // Unidentifiable mob job = "Unknown" -/atom/movable/virtualspeaker/GetJob() +/atom/movable/virtualspeaker/get_job() return job /atom/movable/virtualspeaker/GetSource() diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 8ddae94231d31..52372448616c7 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -113,7 +113,7 @@ if(ENGINE_UNWRENCHED) to_chat(user, span_warning("The [src.name] needs to be wrenched to the floor!")) if(ENGINE_WRENCHED) - if(!tool.tool_start_check(user, amount=round(ENGINE_WELDTIME / 5))) + if(!tool.tool_start_check(user, amount=round(ENGINE_WELDTIME / 5), heat_required = HIGH_TEMPERATURE_REQUIRED)) return TRUE user.visible_message(span_notice("[user.name] starts to weld the [name] to the floor."), \ @@ -126,7 +126,7 @@ alter_engine_power(engine_power) if(ENGINE_WELDED) - if(!tool.tool_start_check(user, amount=round(ENGINE_WELDTIME / 5))) + if(!tool.tool_start_check(user, amount=round(ENGINE_WELDTIME / 5), heat_required = HIGH_TEMPERATURE_REQUIRED)) return TRUE user.visible_message(span_notice("[user.name] starts to cut the [name] free from the floor."), \ diff --git a/code/game/sound.dm b/code/game/sound.dm index 7ce288c9db84a..b379187e09ddd 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -43,6 +43,9 @@ if(isarea(source)) CRASH("playsound(): source is an area") + if(islist(soundin)) + CRASH("playsound(): soundin attempted to pass a list! Consider using pick()") + var/turf/turf_source = get_turf(source) if (!turf_source || !soundin || !vol) @@ -208,83 +211,83 @@ return soundin switch(soundin) if(SFX_SHATTER) - soundin = pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg') + soundin = pick('sound/effects/glass/glassbr1.ogg','sound/effects/glass/glassbr2.ogg','sound/effects/glass/glassbr3.ogg') if(SFX_EXPLOSION) - soundin = pick('sound/effects/explosion1.ogg','sound/effects/explosion2.ogg') + soundin = pick('sound/effects/explosion/explosion1.ogg','sound/effects/explosion/explosion2.ogg') if(SFX_EXPLOSION_CREAKING) - soundin = pick('sound/effects/explosioncreak1.ogg', 'sound/effects/explosioncreak2.ogg') + soundin = pick('sound/effects/explosion/explosioncreak1.ogg', 'sound/effects/explosion/explosioncreak2.ogg') if(SFX_HULL_CREAKING) - soundin = pick('sound/effects/creak1.ogg', 'sound/effects/creak2.ogg', 'sound/effects/creak3.ogg') + soundin = pick('sound/effects/creak/creak1.ogg', 'sound/effects/creak/creak2.ogg', 'sound/effects/creak/creak3.ogg') if(SFX_SPARKS) - soundin = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg') + soundin = pick('sound/effects/sparks/sparks1.ogg','sound/effects/sparks/sparks2.ogg','sound/effects/sparks/sparks3.ogg','sound/effects/sparks/sparks4.ogg') if(SFX_RUSTLE) - soundin = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg') + soundin = pick('sound/effects/rustle/rustle1.ogg','sound/effects/rustle/rustle2.ogg','sound/effects/rustle/rustle3.ogg','sound/effects/rustle/rustle4.ogg','sound/effects/rustle/rustle5.ogg') if(SFX_BODYFALL) - soundin = pick('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg') + soundin = pick('sound/effects/bodyfall/bodyfall1.ogg','sound/effects/bodyfall/bodyfall2.ogg','sound/effects/bodyfall/bodyfall3.ogg','sound/effects/bodyfall/bodyfall4.ogg') if(SFX_PUNCH) - soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') + soundin = pick('sound/items/weapons/punch1.ogg','sound/items/weapons/punch2.ogg','sound/items/weapons/punch3.ogg','sound/items/weapons/punch4.ogg') if(SFX_CLOWN_STEP) soundin = pick('sound/effects/footstep/clownstep1.ogg','sound/effects/footstep/clownstep2.ogg') if(SFX_SUIT_STEP) soundin = pick('sound/effects/suitstep1.ogg','sound/effects/suitstep2.ogg') if(SFX_SWING_HIT) - soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') + soundin = pick('sound/items/weapons/genhit1.ogg', 'sound/items/weapons/genhit2.ogg', 'sound/items/weapons/genhit3.ogg') if(SFX_HISS) - soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') + soundin = pick('sound/mobs/non-humanoids/hiss/hiss1.ogg','sound/mobs/non-humanoids/hiss/hiss2.ogg','sound/mobs/non-humanoids/hiss/hiss3.ogg','sound/mobs/non-humanoids/hiss/hiss4.ogg') if(SFX_PAGE_TURN) - soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') + soundin = pick('sound/effects/page_turn/pageturn1.ogg', 'sound/effects/page_turn/pageturn2.ogg','sound/effects/page_turn/pageturn3.ogg') if(SFX_RICOCHET) - soundin = pick( 'sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg','sound/weapons/effects/ric3.ogg','sound/weapons/effects/ric4.ogg','sound/weapons/effects/ric5.ogg') + soundin = pick( 'sound/items/weapons/effects/ric1.ogg', 'sound/items/weapons/effects/ric2.ogg','sound/items/weapons/effects/ric3.ogg','sound/items/weapons/effects/ric4.ogg','sound/items/weapons/effects/ric5.ogg') if(SFX_TERMINAL_TYPE) soundin = pick(list( - 'sound/machines/terminal_button01.ogg', - 'sound/machines/terminal_button02.ogg', - 'sound/machines/terminal_button03.ogg', - 'sound/machines/terminal_button04.ogg', - 'sound/machines/terminal_button05.ogg', - 'sound/machines/terminal_button06.ogg', - 'sound/machines/terminal_button07.ogg', - 'sound/machines/terminal_button08.ogg', + 'sound/machines/terminal/terminal_button01.ogg', + 'sound/machines/terminal/terminal_button02.ogg', + 'sound/machines/terminal/terminal_button03.ogg', + 'sound/machines/terminal/terminal_button04.ogg', + 'sound/machines/terminal/terminal_button05.ogg', + 'sound/machines/terminal/terminal_button06.ogg', + 'sound/machines/terminal/terminal_button07.ogg', + 'sound/machines/terminal/terminal_button08.ogg', )) if(SFX_DESECRATION) - soundin = pick('sound/misc/desecration-01.ogg', 'sound/misc/desecration-02.ogg', 'sound/misc/desecration-03.ogg') + soundin = pick('sound/effects/desecration/desecration-01.ogg', 'sound/effects/desecration/desecration-02.ogg', 'sound/effects/desecration/desecration-03.ogg') if(SFX_IM_HERE) - soundin = pick('sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg') + soundin = pick('sound/effects/hallucinations/im_here1.ogg', 'sound/effects/hallucinations/im_here2.ogg') if(SFX_CAN_OPEN) - soundin = pick('sound/effects/can_open1.ogg', 'sound/effects/can_open2.ogg', 'sound/effects/can_open3.ogg') + soundin = pick('sound/effects/can/can_open1.ogg', 'sound/effects/can/can_open2.ogg', 'sound/effects/can/can_open3.ogg') if(SFX_BULLET_MISS) - soundin = pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg') + soundin = pick('sound/items/weapons/bulletflyby.ogg', 'sound/items/weapons/bulletflyby2.ogg', 'sound/items/weapons/bulletflyby3.ogg') if(SFX_REVOLVER_SPIN) - soundin = pick('sound/weapons/gun/revolver/spin1.ogg', 'sound/weapons/gun/revolver/spin2.ogg', 'sound/weapons/gun/revolver/spin3.ogg') + soundin = pick('sound/items/weapons/gun/revolver/spin1.ogg', 'sound/items/weapons/gun/revolver/spin2.ogg', 'sound/items/weapons/gun/revolver/spin3.ogg') if(SFX_LAW) soundin = pick(list( - 'sound/voice/beepsky/creep.ogg', - 'sound/voice/beepsky/god.ogg', - 'sound/voice/beepsky/iamthelaw.ogg', - 'sound/voice/beepsky/insult.ogg', - 'sound/voice/beepsky/radio.ogg', - 'sound/voice/beepsky/secureday.ogg', + 'sound/mobs/non-humanoids/beepsky/creep.ogg', + 'sound/mobs/non-humanoids/beepsky/god.ogg', + 'sound/mobs/non-humanoids/beepsky/iamthelaw.ogg', + 'sound/mobs/non-humanoids/beepsky/insult.ogg', + 'sound/mobs/non-humanoids/beepsky/radio.ogg', + 'sound/mobs/non-humanoids/beepsky/secureday.ogg', )) if(SFX_HONKBOT_E) soundin = pick(list( 'sound/effects/pray.ogg', - 'sound/effects/reee.ogg', - 'sound/items/AirHorn.ogg', - 'sound/items/AirHorn2.ogg', + 'sound/mobs/non-humanoids/frog/reee.ogg', + 'sound/items/airhorn/AirHorn.ogg', + 'sound/items/airhorn/AirHorn2.ogg', 'sound/items/bikehorn.ogg', 'sound/items/WEEOO1.ogg', - 'sound/machines/buzz-sigh.ogg', + 'sound/machines/buzz/buzz-sigh.ogg', 'sound/machines/ping.ogg', - 'sound/magic/Fireball.ogg', + 'sound/effects/magic/Fireball.ogg', 'sound/misc/sadtrombone.ogg', - 'sound/voice/beepsky/creep.ogg', - 'sound/voice/beepsky/iamthelaw.ogg', - 'sound/voice/hiss1.ogg', - 'sound/weapons/bladeslice.ogg', - 'sound/weapons/flashbang.ogg', + 'sound/mobs/non-humanoids/beepsky/creep.ogg', + 'sound/mobs/non-humanoids/beepsky/iamthelaw.ogg', + 'sound/mobs/non-humanoids/hiss/hiss1.ogg', + 'sound/items/weapons/bladeslice.ogg', + 'sound/items/weapons/flashbang.ogg', )) if(SFX_GOOSE) - soundin = pick('sound/creatures/goose1.ogg', 'sound/creatures/goose2.ogg', 'sound/creatures/goose3.ogg', 'sound/creatures/goose4.ogg') + soundin = pick('sound/mobs/non-humanoids/goose/goose1.ogg', 'sound/mobs/non-humanoids/goose/goose2.ogg', 'sound/mobs/non-humanoids/goose/goose3.ogg', 'sound/mobs/non-humanoids/goose/goose4.ogg') if(SFX_WARPSPEED) soundin = 'sound/runtime/hyperspace/hyperspace_begin.ogg' if(SFX_SM_CALM) @@ -432,49 +435,49 @@ 'sound/machines/sm/accent/delam/33.ogg', )) if(SFX_CRUNCHY_BUSH_WHACK) - soundin = pick('sound/effects/crunchybushwhack1.ogg', 'sound/effects/crunchybushwhack2.ogg', 'sound/effects/crunchybushwhack3.ogg') + soundin = pick('sound/effects/bush/crunchybushwhack1.ogg', 'sound/effects/bush/crunchybushwhack2.ogg', 'sound/effects/bush/crunchybushwhack3.ogg') if(SFX_TREE_CHOP) - soundin = pick('sound/effects/treechop1.ogg', 'sound/effects/treechop2.ogg', 'sound/effects/treechop3.ogg') + soundin = pick('sound/effects/treechop/treechop1.ogg', 'sound/effects/treechop/treechop2.ogg', 'sound/effects/treechop/treechop3.ogg') if(SFX_ROCK_TAP) - soundin = pick('sound/effects/rocktap1.ogg', 'sound/effects/rocktap2.ogg', 'sound/effects/rocktap3.ogg') + soundin = pick('sound/effects/rock/rocktap1.ogg', 'sound/effects/rock/rocktap2.ogg', 'sound/effects/rock/rocktap3.ogg') if(SFX_SEAR) - soundin = 'sound/weapons/sear.ogg' + soundin = 'sound/items/weapons/sear.ogg' if(SFX_REEL) soundin = pick( - 'sound/items/reel1.ogg', - 'sound/items/reel2.ogg', - 'sound/items/reel3.ogg', - 'sound/items/reel4.ogg', - 'sound/items/reel5.ogg', + 'sound/items/reel/reel1.ogg', + 'sound/items/reel/reel2.ogg', + 'sound/items/reel/reel3.ogg', + 'sound/items/reel/reel4.ogg', + 'sound/items/reel/reel5.ogg', ) if(SFX_RATTLE) soundin = pick( - 'sound/items/rattle1.ogg', - 'sound/items/rattle2.ogg', - 'sound/items/rattle3.ogg', + 'sound/items/rattle/rattle1.ogg', + 'sound/items/rattle/rattle2.ogg', + 'sound/items/rattle/rattle3.ogg', ) if(SFX_PORTAL_CLOSE) - soundin = 'sound/effects/portal_close.ogg' + soundin = 'sound/effects/portal/portal_close.ogg' if(SFX_PORTAL_ENTER) - soundin = 'sound/effects/portal_travel.ogg' + soundin = 'sound/effects/portal/portal_travel.ogg' if(SFX_PORTAL_CREATED) soundin = pick( - 'sound/effects/portal_open_1.ogg', - 'sound/effects/portal_open_2.ogg', - 'sound/effects/portal_open_3.ogg', + 'sound/effects/portal/portal_open_1.ogg', + 'sound/effects/portal/portal_open_2.ogg', + 'sound/effects/portal/portal_open_3.ogg', ) if(SFX_SCREECH) soundin = pick( - 'sound/creatures/monkey/monkey_screech_1.ogg', - 'sound/creatures/monkey/monkey_screech_2.ogg', - 'sound/creatures/monkey/monkey_screech_3.ogg', - 'sound/creatures/monkey/monkey_screech_4.ogg', - 'sound/creatures/monkey/monkey_screech_5.ogg', - 'sound/creatures/monkey/monkey_screech_6.ogg', - 'sound/creatures/monkey/monkey_screech_7.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_1.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_2.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_3.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_4.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_5.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_6.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_7.ogg', ) if(SFX_TOOL_SWITCH) - soundin = 'sound/items/handling/tool_switch.ogg' + soundin = 'sound/items/tools/tool_switch.ogg' if(SFX_KEYBOARD_CLICKS) soundin = pick( 'sound/machines/computer/keyboard_clicks_1.ogg', @@ -496,4 +499,45 @@ 'sound/items/stones/stone_pick_up1.ogg', 'sound/items/stones/stone_pick_up2.ogg', ) + if(SFX_MUFFLED_SPEECH) + soundin = pick( + 'sound/effects/muffspeech/muffspeech1.ogg', + 'sound/effects/muffspeech/muffspeech2.ogg', + 'sound/effects/muffspeech/muffspeech3.ogg', + 'sound/effects/muffspeech/muffspeech4.ogg', + 'sound/effects/muffspeech/muffspeech5.ogg', + 'sound/effects/muffspeech/muffspeech6.ogg', + 'sound/effects/muffspeech/muffspeech7.ogg', + 'sound/effects/muffspeech/muffspeech8.ogg', + 'sound/effects/muffspeech/muffspeech9.ogg', + ) + if(SFX_DEFAULT_FISH_SLAP) + soundin = 'sound/mobs/non-humanoids/fish/fish_slap1.ogg' + if(SFX_ALT_FISH_SLAP) + soundin = 'sound/mobs/non-humanoids/fish/fish_slap2.ogg' + if(SFX_FISH_PICKUP) + soundin = pick( + 'sound/mobs/non-humanoids/fish/fish_pickup1.ogg', + 'sound/mobs/non-humanoids/fish/fish_pickup2.ogg', + ) + if(SFX_LIQUID_POUR) + soundin = pick( + 'sound/effects/liquid_pour/liquid_pour1.ogg', + 'sound/effects/liquid_pour/liquid_pour2.ogg', + 'sound/effects/liquid_pour/liquid_pour3.ogg', + ) + if(SFX_CAT_MEOW) + soundin = pick_weight(list( + 'sound/creatures/cat/cat_meow1.ogg' = 33, + 'sound/creatures/cat/cat_meow2.ogg' = 33, + 'sound/creatures/cat/cat_meow3.ogg' = 33, + 'sound/creatures/cat/oranges_meow1.ogg' = 1, + )) + if(SFX_CAT_PURR) + soundin = pick( + 'sound/creatures/cat/cat_purr1.ogg', + 'sound/creatures/cat/cat_purr2.ogg', + 'sound/creatures/cat/cat_purr3.ogg', + 'sound/creatures/cat/cat_purr4.ogg', + ) return soundin diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index a1f6455615320..1e50e50569991 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -182,6 +182,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 if(old_liquids) if(!isnull(new_turf.liquids)) //isnull is faster diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm index 8ccaabc46c0af..cf287a6eb6d88 100644 --- a/code/game/turfs/closed/_closed.dm +++ b/code/game/turfs/closed/_closed.dm @@ -15,3 +15,6 @@ /turf/closed/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) return FALSE + +/turf/closed/examine_descriptor(mob/user) + return "wall" diff --git a/code/game/turfs/closed/indestructible.dm b/code/game/turfs/closed/indestructible.dm index 470177ee39727..302826549c18a 100644 --- a/code/game/turfs/closed/indestructible.dm +++ b/code/game/turfs/closed/indestructible.dm @@ -87,10 +87,6 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen) pixel_x = 0 else if(width == 608) // 608x480 is widescreen pixel_x = -64 - // SKYRAT 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 /turf/closed/indestructible/splashscreen/vv_edit_var(var_name, var_value) . = ..() diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm index be4b6ca7ad295..b09a0355b9f58 100644 --- a/code/game/turfs/closed/wall/misc_walls.dm +++ b/code/game/turfs/closed/wall/misc_walls.dm @@ -51,6 +51,13 @@ . = ..() AddElement(/datum/element/rust) +/turf/closed/wall/heretic_rust + color = MAP_SWITCH(null, COLOR_GREEN_GRAY) + +/turf/closed/wall/heretic_rust/Initialize(mapload) + . = ..() + AddElement(/datum/element/rust/heretic) + /turf/closed/wall/r_wall/rust //SDMM supports colors, this is simply for easier mapping //and should be removed on initialize @@ -61,6 +68,13 @@ . = ..() AddElement(/datum/element/rust) +/turf/closed/wall/r_wall/heretic_rust + color = MAP_SWITCH(null, COLOR_GREEN_GRAY) + +/turf/closed/wall/r_wall/heretic_rust/Initialize(mapload) + . = ..() + AddElement(/datum/element/rust/heretic) + /turf/closed/wall/mineral/bronze name = "clockwork wall" desc = "A huge chunk of bronze, decorated like gears and cogs." diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm index 06bc0ebe02bdd..3575f02c77f4e 100644 --- a/code/game/turfs/closed/wall/reinf_walls.dm +++ b/code/game/turfs/closed/wall/reinf_walls.dm @@ -1,7 +1,7 @@ /turf/closed/wall/r_wall name = "reinforced wall" desc = "A huge chunk of reinforced metal used to separate rooms." - icon = 'icons/turf/walls/reinforced_wall.dmi' //ICON OVERRIDDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/turf/walls/reinforced_wall.dmi' icon_state = "reinforced_wall-0" base_icon_state = "reinforced_wall" opacity = TRUE @@ -76,7 +76,7 @@ if(COVER) if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=2)) + if(!W.tool_start_check(user, amount=2, heat_required = HIGH_TEMPERATURE_REQUIRED)) return to_chat(user, span_notice("You begin slicing through the metal cover...")) if(W.use_tool(src, user, 60, volume=100)) @@ -109,7 +109,7 @@ return TRUE if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=2)) + if(!W.tool_start_check(user, amount=2, heat_required = HIGH_TEMPERATURE_REQUIRED)) return to_chat(user, span_notice("You begin welding the metal cover back to the frame...")) if(W.use_tool(src, user, 60, volume=100)) @@ -143,7 +143,7 @@ if(SUPPORT_RODS) if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=2)) + if(!W.tool_start_check(user, amount=2, heat_required = HIGH_TEMPERATURE_REQUIRED)) return to_chat(user, span_notice("You begin slicing through the support rods...")) if(W.use_tool(src, user, 100, volume=100)) @@ -176,7 +176,7 @@ return TRUE if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=0)) + if(!W.tool_start_check(user, amount=0, heat_required = HIGH_TEMPERATURE_REQUIRED)) return to_chat(user, span_notice("You begin welding the support rods back together...")) if(W.use_tool(src, user, 100, volume=100)) diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index 0ff9e3c76d435..f1297e4a02258 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -2,7 +2,7 @@ /turf/closed/wall name = "wall" - desc = "A huge chunk of iron used to separate rooms." //ICON OVERRIDDEN IN SKYRAT AESTHETICS - SEE MODULE + desc = "A huge chunk of iron used to separate rooms." icon = 'icons/turf/walls/wall.dmi' icon_state = "wall-0" base_icon_state = "wall" @@ -40,7 +40,7 @@ if(!iscarbon(dropping) && !iscyborg(dropping)) return var/mob/living/leaner = dropping - if(leaner.incapacitated(IGNORE_RESTRAINTS) || leaner.stat != CONSCIOUS || HAS_TRAIT(leaner, TRAIT_NO_TRANSFORM)) + if(INCAPACITATED_IGNORING(leaner, INCAPABLE_RESTRAINTS) || leaner.stat != CONSCIOUS || HAS_TRAIT(leaner, TRAIT_NO_TRANSFORM)) return if(!leaner.density || leaner.pulledby || leaner.buckled || !(leaner.mobility_flags & MOBILITY_STAND)) return @@ -117,7 +117,6 @@ GLOB.station_turfs -= src return ..() - /turf/closed/wall/examine(mob/user) . += ..() . += deconstruction_hints(user) @@ -132,7 +131,7 @@ if(devastated) devastate_wall() else - playsound(src, 'sound/items/welder.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 100, TRUE) var/newgirder = break_wall() if(newgirder) //maybe we don't /want/ a girder! transfer_fingerprints_to(newgirder) @@ -235,26 +234,21 @@ return user.changeNext_move(CLICK_CD_MELEE) to_chat(user, span_notice("You push the wall but nothing happens!")) - playsound(src, 'sound/weapons/genhit.ogg', 25, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 25, TRUE) add_fingerprint(user) -/turf/closed/wall/attackby(obj/item/W, mob/user, params) - user.changeNext_move(CLICK_CD_MELEE) +/turf/closed/wall/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if (!ISADVANCEDTOOLUSER(user)) to_chat(user, span_warning("You don't have the dexterity to do this!")) - return - - //get the user's location - if(!isturf(user.loc)) - return //can't do this stuff whilst inside objects and such + return ITEM_INTERACT_BLOCKING add_fingerprint(user) //the istype cascade has been spread among various procs for easy overriding - if(try_clean(W, user) || try_wallmount(W, user) || try_decon(W, user)) - return + if(try_clean(tool, user) || try_wallmount(tool, user) || try_decon(tool, user)) + return ITEM_INTERACT_SUCCESS - return ..() + return NONE /turf/closed/wall/proc/try_clean(obj/item/W, mob/living/user) if((user.combat_mode) || !LAZYLEN(dent_decals)) @@ -290,7 +284,7 @@ /turf/closed/wall/proc/try_decon(obj/item/I, mob/user) if(I.tool_behaviour == TOOL_WELDER) - if(!I.tool_start_check(user, amount=round(slicing_duration / 50))) + if(!I.tool_start_check(user, amount=round(slicing_duration / 50), heat_required = HIGH_TEMPERATURE_REQUIRED)) return FALSE to_chat(user, span_notice("You begin slicing through the outer plating...")) diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 777adb9bb2cb1..68c3c1a1c7710 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -74,6 +74,9 @@ . += burnt_appearance +/turf/open/examine_descriptor(mob/user) + return "floor" + //direction is direction of travel of A /turf/open/zPassIn(direction) if(direction != DOWN) @@ -423,10 +426,10 @@ /turf/open/get_dumping_location() return src -/turf/open/proc/ClearWet()//Nuclear option of immediately removing slipperyness from the tile instead of the natural drying over time +/turf/open/proc/ClearWet()//Nuclear option of immediately removing slipperiness from the tile instead of the natural drying over time qdel(GetComponent(/datum/component/wet_floor)) -/// Builds with rods. This doesn't exist to be overriden, just to remove duplicate logic for turfs that want +/// Builds with rods. This doesn't exist to be overridden, just to remove duplicate logic for turfs that want /// To support floor tile creation /// I'd make it a component, but one of these things is space. So no. /turf/open/proc/build_with_rods(obj/item/stack/rods/used_rods, mob/user) @@ -440,7 +443,7 @@ if(used_rods.use(1)) qdel(catwalk_bait) to_chat(user, span_notice("You construct a catwalk.")) - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) new /obj/structure/lattice/catwalk(src) else to_chat(user, span_warning("You need two rods to build a catwalk!")) @@ -448,7 +451,7 @@ if(used_rods.use(1)) to_chat(user, span_notice("You construct a lattice.")) - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) new /obj/structure/lattice(src) else to_chat(user, span_warning("You need one rod to build a lattice.")) @@ -464,7 +467,7 @@ balloon_alert(user, "need a floor tile to build!") return - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) var/turf/open/floor/plating/new_plating = place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) if(lattice) qdel(lattice) @@ -488,7 +491,7 @@ balloon_alert(user, "no tile!") return - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) new used_tiles.tile_type(src) /// Very similar to build_with_rods, this exists to allow building transport/tram girders on openspace @@ -501,5 +504,5 @@ balloon_alert(user, "not enough titanium!") return - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) new /obj/structure/girder/tram(src) diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm index 504e876d536ce..f81ac4c7f536e 100644 --- a/code/game/turfs/open/chasm.dm +++ b/code/game/turfs/open/chasm.dm @@ -65,7 +65,7 @@ to_chat(user, span_warning("You need one rod to build a lattice.")) return to_chat(user, span_notice("You construct a lattice.")) - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) // Create a lattice, without reverting to our baseturf new /obj/structure/lattice(src) return diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index 3bf80bc89d422..dad46fd8de6b6 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -1,7 +1,7 @@ /// Anything above a lattice should go here. /turf/open/floor name = "floor" - icon = 'icons/turf/floors.dmi' //ICON OVERRIDDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/turf/floors.dmi' base_icon_state = "floor" baseturfs = /turf/open/floor/plating @@ -14,8 +14,8 @@ smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_OPEN_FLOOR canSmoothWith = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_OPEN_FLOOR - thermal_conductivity = 0.04 - heat_capacity = 10000 + thermal_conductivity = 0.02 + heat_capacity = 20000 tiled_dirt = TRUE diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm index dd30a86d8de45..793e4ce8e55e4 100644 --- a/code/game/turfs/open/floor/light_floor.dm +++ b/code/game/turfs/open/floor/light_floor.dm @@ -184,7 +184,7 @@ /turf/open/floor/light/proc/check_menu(mob/living/user, obj/item/multitool) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE if(!multitool || !user.is_holding(multitool)) return FALSE diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm index d43e4b5e92fe6..81c4578136b30 100644 --- a/code/game/turfs/open/floor/misc_floor.dm +++ b/code/game/turfs/open/floor/misc_floor.dm @@ -257,6 +257,14 @@ AddElement(/datum/element/rust) color = null +/turf/open/floor/plating/heretic_rust + color = COLOR_GREEN_GRAY + +/turf/open/floor/plating/heretic_rust/Initialize(mapload) + . = ..() + AddElement(/datum/element/rust/heretic) + color = null + /turf/open/floor/plating/plasma initial_gas_mix = ATMOS_TANK_PLASMA diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index 6e4834773c325..9c7cf01576178 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -148,10 +148,10 @@ if(L) qdel(L) to_chat(user, span_notice("You reinforce the foamed plating with tiling.")) - playsound(src, 'sound/weapons/Genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/Genhit.ogg', 50, TRUE) ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) else - playsound(src, 'sound/weapons/tap.ogg', 100, TRUE) //The attack sound is muffled by the foam itself + playsound(src, 'sound/items/weapons/tap.ogg', 100, TRUE) //The attack sound is muffled by the foam itself user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(prob(I.force * 20 - 25)) diff --git a/code/game/turfs/open/floor/reinforced_floor.dm b/code/game/turfs/open/floor/reinforced_floor.dm index 0a44c78ceca5e..dcba9ed36673a 100644 --- a/code/game/turfs/open/floor/reinforced_floor.dm +++ b/code/game/turfs/open/floor/reinforced_floor.dm @@ -4,7 +4,7 @@ desc = "Extremely sturdy." icon_state = "engine" holodeck_compatible = TRUE - thermal_conductivity = 0.025 + thermal_conductivity = 0.01 heat_capacity = INFINITY floor_tile = /obj/item/stack/rods footstep = FOOTSTEP_PLATING diff --git a/code/game/turfs/open/ice.dm b/code/game/turfs/open/ice.dm index 481dcb6b84732..f28bc8dd4b052 100644 --- a/code/game/turfs/open/ice.dm +++ b/code/game/turfs/open/ice.dm @@ -15,10 +15,21 @@ clawfootstep = FOOTSTEP_HARD_CLAW heavyfootstep = FOOTSTEP_GENERIC_HEAVY rust_resistance = RUST_RESISTANCE_ORGANIC + var/can_make_hole = TRUE + var/static/list/tool_screentips = list( + TOOL_SHOVEL = list( + SCREENTIP_CONTEXT_LMB = "Dig fishing hole", + ), + TOOL_MINING = list( + SCREENTIP_CONTEXT_LMB = "Dig fishing hole", + ), + ) /turf/open/misc/ice/Initialize(mapload) . = ..() MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE, FALSE) + if(can_make_hole) + AddElement(/datum/element/contextual_screentip_tools, tool_screentips) /turf/open/misc/ice/break_tile() return @@ -26,6 +37,29 @@ /turf/open/misc/ice/burn_tile() return +/turf/open/misc/ice/examine(mob/user) + . = ..() + if(can_make_hole) + . += span_info("You could use a [EXAMINE_HINT("shovel")] or a [EXAMINE_HINT("pick")] to dig a fishing hole here.") + +/turf/open/misc/ice/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!can_make_hole) + return NONE + if(tool.tool_behaviour != TOOL_SHOVEL && tool.tool_behaviour != TOOL_MINING) + return NONE + balloon_alert(user, "digging...") + playsound(src, 'sound/effects/shovel_dig.ogg', 50, TRUE) + if(!do_after(user, 5 SECONDS, src)) + return NONE + balloon_alert(user, "dug hole") + AddComponent(/datum/component/fishing_spot, GLOB.preset_fish_sources[/datum/fish_source/ice_fishing]) + ADD_TRAIT(src, TRAIT_CATCH_AND_RELEASE, INNATE_TRAIT) + add_overlay(mutable_appearance('icons/turf/overlays.dmi', "ice_hole")) + can_make_hole = FALSE + RemoveElement(/datum/element/contextual_screentip_tools, tool_screentips) + flags_1 &= ~HAS_CONTEXTUAL_SCREENTIPS_1 + return ITEM_INTERACT_SUCCESS + /turf/open/misc/ice/smooth icon_state = "ice_turf-255" base_icon_state = "ice_turf" @@ -40,11 +74,13 @@ /turf/open/misc/ice/icemoon/no_planet_atmos planetary_atmos = FALSE + can_make_hole = FALSE /turf/open/misc/ice/temperate baseturfs = /turf/open/misc/ice/temperate desc = "Somehow, it is not melting under these conditions. Must be some very thick ice. Just as slippery too." initial_gas_mix = COLD_ATMOS //it works with /turf/open/misc/asteroid/snow/temperatre + can_make_hole = FALSE //For when you want real, genuine ice in your kitchen's cold room. /turf/open/misc/ice/coldroom diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 23e2b6b38db84..eebb74b72897b 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -16,7 +16,7 @@ light_power = 0.75 light_color = LIGHT_COLOR_LAVA light_on = FALSE - bullet_bounce_sound = 'sound/items/welder2.ogg' + bullet_bounce_sound = 'sound/items/tools/welder2.ogg' footstep = FOOTSTEP_LAVA barefootstep = FOOTSTEP_LAVA @@ -48,6 +48,8 @@ . = ..() if(fish_source_type) AddElement(/datum/element/lazy_fishing_spot, fish_source_type) + // You can release chrabs and lavaloops and likes in lava, or be an absolute scumbag and drop other fish there too. + ADD_TRAIT(src, TRAIT_CATCH_AND_RELEASE, INNATE_TRAIT) refresh_light() if(!smoothing_flags) update_appearance() @@ -199,7 +201,7 @@ return if(R.use(1)) to_chat(user, span_notice("You construct a lattice.")) - playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) new /obj/structure/lattice/lava(locate(x, y, z)) else to_chat(user, span_warning("You need one rod to build a heatproof lattice.")) diff --git a/code/game/turfs/open/misc.dm b/code/game/turfs/open/misc.dm index 02de7489786f9..f00e6ed6ded6e 100644 --- a/code/game/turfs/open/misc.dm +++ b/code/game/turfs/open/misc.dm @@ -3,7 +3,7 @@ /// Please do not bloat this. Love you <3 /turf/open/misc name = "coder/mapper fucked up" - desc = "report on github please" + desc = "report on GitHub please" flags_1 = NO_SCREENTIPS_1 | CAN_BE_DIRTY_1 turf_flags = IS_SOLID | NO_RUST @@ -17,8 +17,8 @@ smoothing_groups = SMOOTH_GROUP_TURF_OPEN canSmoothWith = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_OPEN_FLOOR - thermal_conductivity = 0.04 - heat_capacity = 10000 + thermal_conductivity = 0.02 + heat_capacity = 20000 tiled_dirt = TRUE /turf/open/misc/attackby(obj/item/W, mob/user, params) diff --git a/code/game/turfs/open/sand.dm b/code/game/turfs/open/sand.dm index c863e28231d35..254c595fcbdd6 100644 --- a/code/game/turfs/open/sand.dm +++ b/code/game/turfs/open/sand.dm @@ -10,6 +10,10 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY rust_resistance = RUST_RESISTANCE_ORGANIC +/turf/open/misc/beach/Initialize(mapload) + . = ..() + AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/sand) + /turf/open/misc/beach/ex_act(severity, target) return FALSE @@ -37,6 +41,10 @@ clawfootstep = FOOTSTEP_WATER heavyfootstep = FOOTSTEP_WATER +/turf/open/misc/beach/coast/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION, INNATE_TRAIT) + /turf/open/misc/beach/coast/break_tile() . = ..() icon_state = "beach" diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm index 4a8244a649196..835d29089181b 100644 --- a/code/game/turfs/open/water.dm +++ b/code/game/turfs/open/water.dm @@ -1,4 +1,5 @@ /turf/open/water + name = "water" gender = PLURAL desc = "Shallow water." icon = 'icons/turf/floors.dmi' @@ -21,7 +22,7 @@ var/immerse_overlay_color = "#5AAA88" /// Fishing element for this specific water tile - var/datum/fish_source/fishing_datum = /datum/fish_source/portal + var/datum/fish_source/fishing_datum = /datum/fish_source/river /turf/open/water/Initialize(mapload) . = ..() @@ -29,10 +30,12 @@ AddElement(/datum/element/watery_tile) if(!isnull(fishing_datum)) AddElement(/datum/element/lazy_fishing_spot, fishing_datum) + ADD_TRAIT(src, TRAIT_CATCH_AND_RELEASE, INNATE_TRAIT) /turf/open/water/jungle /turf/open/water/beach + planetary_atmos = FALSE gender = PLURAL desc = "Come on in, it's great!" icon = 'icons/turf/beach.dmi' @@ -42,6 +45,10 @@ immerse_overlay_color = "#7799AA" fishing_datum = /datum/fish_source/ocean/beach +/turf/open/water/beach/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION, INNATE_TRAIT) + /turf/open/water/lavaland_atmos initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 35381db347c27..c9256f2e0c850 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -3,6 +3,7 @@ GLOBAL_LIST_EMPTY(station_turfs) /// Any floor or wall. What makes up the station and the rest of the map. /turf icon = 'icons/turf/floors.dmi' + datum_flags = DF_STATIC_OBJECT vis_flags = VIS_INHERIT_ID // Important for interaction with and visualization of openspace. luminosity = 1 light_height = LIGHTING_HEIGHT_FLOOR @@ -31,7 +32,7 @@ GLOBAL_LIST_EMPTY(station_turfs) var/temperature = T20C ///Used for fire, if a melting temperature was reached, it will be destroyed var/to_be_destroyed = 0 - ///The max temperature of the fire which it was subjected to + ///The max temperature of the fire which it was subjected to, determines the melting point of turf var/max_fire_temperature_sustained = 0 var/blocks_air = FALSE @@ -46,7 +47,7 @@ GLOBAL_LIST_EMPTY(station_turfs) var/requires_activation //add to air processing after initialize? var/changing_turf = FALSE - var/bullet_bounce_sound = 'sound/weapons/gun/general/mag_bullet_remove.ogg' //sound played when a shell casing is ejected ontop of the turf. + var/bullet_bounce_sound = 'sound/items/weapons/gun/general/mag_bullet_remove.ogg' //sound played when a shell casing is ejected ontop of the turf. var/bullet_sizzle = FALSE //used by ammo_casing/bounce_away() to determine if the shell casing should make a sizzle sound when it's ejected over the turf //IE if the turf is supposed to be water, set TRUE. @@ -230,7 +231,7 @@ GLOBAL_LIST_EMPTY(station_turfs) /// Call to move a turf from its current area to a new one /turf/proc/change_area(area/old_area, area/new_area) - //dont waste our time + //don't waste our time if(old_area == new_area) return @@ -269,14 +270,14 @@ GLOBAL_LIST_EMPTY(station_turfs) * * type_list - are we checking for types of atoms to ignore and not physical atoms */ /turf/proc/is_blocked_turf(exclude_mobs = FALSE, source_atom = null, list/ignore_atoms, type_list = FALSE) - if(density) + if((!isnull(source_atom) && !CanPass(source_atom, get_dir(src, source_atom))) || density) return TRUE for(var/atom/movable/movable_content as anything in contents) // We don't want to block ourselves if((movable_content == source_atom)) continue - // dont consider ignored atoms or their types + // don't consider ignored atoms or their types if(length(ignore_atoms)) if(!type_list && (movable_content in ignore_atoms)) continue @@ -305,7 +306,7 @@ GLOBAL_LIST_EMPTY(station_turfs) return TRUE return FALSE -//The zpass procs exist to be overriden, not directly called +//The zpass procs exist to be overridden, not directly called //use can_z_pass for that ///If we'd allow anything to travel into us /turf/proc/zPassIn(direction) @@ -425,7 +426,7 @@ GLOBAL_LIST_EMPTY(station_turfs) if(thing == mover || thing == mover_loc) // Multi tile objects and moving out of other objects continue if(!thing.Cross(mover)) - if(QDELETED(mover)) //deleted from Cross() (CanPass is pure so it cant delete, Cross shouldnt be doing this either though, but it can happen) + if(QDELETED(mover)) //deleted from Cross() (CanPass is pure so it can't delete, Cross shouldn't be doing this either though, but it can happen) return FALSE if(mover_is_phasing) mover.Bump(thing) @@ -608,7 +609,7 @@ GLOBAL_LIST_EMPTY(station_turfs) . = ..() if((acidpwr <= 0) || (acid_volume <= 0)) return FALSE - if(QDELETED(src)) //skyrat edit: fix createanddestroy + if(QDELETED(src)) //skyrat edit: fix createanddestroy // SKYRAT TODO: Look into why this happens return FALSE AddComponent(/datum/component/acid, acidpwr, acid_volume, GLOB.acid_overlay) diff --git a/code/game/world.dm b/code/game/world.dm index 0a472d8120748..c97188893a22b 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -353,7 +353,6 @@ GLOBAL_VAR(tracy_log) #endif /world/proc/auxcleanup() - AUXTOOLS_FULL_SHUTDOWN(AUXLUA) var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL") if (debug_server) call_ext(debug_server, "auxtools_shutdown")() @@ -408,10 +407,10 @@ GLOBAL_VAR(tracy_log) 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]" - 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]" + if(SSmapping.current_map) + new_status += "
Map: [SSmapping.current_map.map_path == CUSTOM_MAP_PATH ? "Uncharted Territory" : SSmapping.current_map.map_name]" + if(SSmap_vote.next_map_config) + new_status += "[SSmapping.current_map ? " | " : "
"]Next: [SSmap_vote.next_map_config.map_path == CUSTOM_MAP_PATH ? "Uncharted Territory" : SSmap_vote.next_map_config.map_name]" status = new_status */ @@ -426,7 +425,7 @@ GLOBAL_VAR(tracy_log) hub_password = "SORRYNOPASSWORD" /** - * Handles incresing the world's maxx var and intializing the new turfs and assigning them to the global area. + * Handles increasing the world's maxx var and initializing the new turfs and assigning them to the global area. * If map_load_z_cutoff is passed in, it will only load turfs up to that z level, inclusive. * This is because maploading will handle the turfs it loads itself. */ @@ -453,7 +452,7 @@ GLOBAL_VAR(tracy_log) maxy = new_maxy if(!map_load_z_cutoff) return - var/area/global_area = GLOB.areas_by_type[world.area] // We're guarenteed to be touching the global area, so we'll just do this + var/area/global_area = GLOB.areas_by_type[world.area] // We're guaranteed to be touching the global area, so we'll just do this LISTASSERTLEN(global_area.turfs_by_zlevel, map_load_z_cutoff, list()) for (var/zlevel in 1 to map_load_z_cutoff) var/list/to_add = block( @@ -488,6 +487,7 @@ GLOBAL_VAR(tracy_log) /world/proc/on_tickrate_change() SStimer?.reset_buckets() + DREAMLUAU_SET_EXECUTION_LIMIT_MILLIS(tick_lag * 100) /world/proc/init_byond_tracy() var/library diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index a2db78a175b4d..f36a89e72e1ff 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -113,7 +113,7 @@ data["dos_crashed"] = dos_failure return data -/obj/machinery/ntnet_relay/ui_act(action, params) +/obj/machinery/ntnet_relay/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/actionspeed/_actionspeed_modifier.dm b/code/modules/actionspeed/_actionspeed_modifier.dm index 36b9b9c860dec..59dec9f87cac4 100644 --- a/code/modules/actionspeed/_actionspeed_modifier.dm +++ b/code/modules/actionspeed/_actionspeed_modifier.dm @@ -156,7 +156,7 @@ GLOBAL_LIST_EMPTY(actionspeed_modification_cache) var/amt = M.multiplicative_slowdown if(conflict) // Conflicting modifiers prioritize the larger slowdown or the larger speedup - // We purposefuly don't handle mixing speedups and slowdowns on the same id + // We purposefully don't handle mixing speedups and slowdowns on the same id if(abs(conflict_tracker[conflict]) < abs(amt)) conflict_tracker[conflict] = amt else diff --git a/code/modules/admin/admin_fax_panel.dm b/code/modules/admin/admin_fax_panel.dm index 8874b6f38eb5a..cc88f1949f2e1 100644 --- a/code/modules/admin/admin_fax_panel.dm +++ b/code/modules/admin/admin_fax_panel.dm @@ -20,6 +20,8 @@ ADMIN_VERB(fax_panel, R_ADMIN, "Fax Panel", "View and respond to faxes sent to C /datum/fax_panel_interface/New() //Get all faxes, and save them to our list. for(var/obj/machinery/fax/fax as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/fax)) + if(istype(fax, /obj/machinery/fax/admin)) + continue available_faxes += WEAKREF(fax) //Get all stamps diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 0f7d7a3f39b30..1510783fc7cb8 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -320,7 +320,7 @@ ADMIN_VERB(give_mob_action, R_FUN, "Give Mob Action", ADMIN_VERB_NO_DESCRIPTION, if(isnull(ability_melee_cooldown) || ability_melee_cooldown < 0) ability_melee_cooldown = 2 add_ability.melee_cooldown_time = ability_melee_cooldown * 1 SECONDS - add_ability.name = tgui_input_text(user, "Choose ability name", "Ability name", "Generic Ability") + add_ability.name = tgui_input_text(user, "Choose ability name", "Ability name", "Generic Ability", max_length = MAX_NAME_LEN) add_ability.create_sequence_actions() else add_ability = new ability_type(ability_recipient) @@ -484,12 +484,14 @@ ADMIN_VERB(populate_world, R_DEBUG, "Populate World", "Populate the world with t testing("Spawned test mob at [get_area_name(tile, TRUE)] ([tile.x],[tile.y],[tile.z])") ADMIN_VERB(toggle_ai_interact, R_ADMIN, "Toggle Admin AI Interact", "Allows you to interact with most machines as an AI would as a ghost.", ADMIN_CATEGORY_GAME) - user.AI_Interact = !user.AI_Interact - if(user.mob && isAdminGhostAI(user.mob)) - user.mob.has_unlimited_silicon_privilege = user.AI_Interact + var/doesnt_have_silicon_access = !HAS_TRAIT_FROM(user, TRAIT_AI_ACCESS, ADMIN_TRAIT) + if(doesnt_have_silicon_access) + ADD_TRAIT(user, TRAIT_AI_ACCESS, ADMIN_TRAIT) + else + REMOVE_TRAIT(user, TRAIT_AI_ACCESS, ADMIN_TRAIT) - log_admin("[key_name(user)] has [user.AI_Interact ? "activated" : "deactivated"] Admin AI Interact") - message_admins("[key_name_admin(user)] has [user.AI_Interact ? "activated" : "deactivated"] their AI interaction") + log_admin("[key_name(user)] has [doesnt_have_silicon_access ? "activated" : "deactivated"] Admin AI Interact") + message_admins("[key_name_admin(user)] has [doesnt_have_silicon_access ? "activated" : "deactivated"] their AI interaction") ADMIN_VERB(debug_statpanel, R_DEBUG, "Debug Stat Panel", "Toggles local debug of the stat panel", ADMIN_CATEGORY_DEBUG) user.stat_panel.send_message("create_debug") @@ -521,7 +523,7 @@ ADMIN_VERB(spawn_debug_full_crew, R_DEBUG, "Spawn Debug Full Crew", "Creates a f // Then, spawn a human and slap a person into it. var/number_made = 0 for(var/rank in SSjob.name_occupations) - var/datum/job/job = SSjob.GetJob(rank) + var/datum/job/job = SSjob.get_job(rank) // JOB_CREW_MEMBER is all jobs that pretty much aren't silicon if(!(job.job_flags & JOB_CREW_MEMBER)) @@ -533,7 +535,7 @@ ADMIN_VERB(spawn_debug_full_crew, R_DEBUG, "Spawn Debug Full Crew", "Creates a f new_guy.mind.name = "[rank] Dummy" // Assign the rank to the new player dummy. - if(!SSjob.AssignRole(new_guy, job, do_eligibility_checks = FALSE)) + if(!SSjob.assign_role(new_guy, job, do_eligibility_checks = FALSE)) qdel(new_guy) to_chat(user, "[rank] wasn't able to be spawned.") continue @@ -545,7 +547,7 @@ ADMIN_VERB(spawn_debug_full_crew, R_DEBUG, "Spawn Debug Full Crew", "Creates a f qdel(new_guy) // Then equip up the human with job gear. - SSjob.EquipRank(character, job) + SSjob.equip_rank(character, job) job.after_latejoin_spawn(character) // Finally, ensure the minds are tracked and in the manifest. diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm index 91ec1b247a706..6caec4859878b 100644 --- a/code/modules/admin/antag_panel.dm +++ b/code/modules/admin/antag_panel.dm @@ -78,16 +78,16 @@ GLOBAL_VAR(antag_prototypes) /datum/mind/proc/get_special_statuses() var/list/result = LAZYCOPY(special_statuses) if(!current) - result += "No body!" + result += span_bad("No body!") if(current && HAS_TRAIT(current, TRAIT_MINDSHIELD)) - result += "Mindshielded" + result += span_good("Mindshielded") if(current && HAS_MIND_TRAIT(current, TRAIT_UNCONVERTABLE)) - result += "Unconvertable" + result += span_good("Unconvertable") //Move these to mob if(iscyborg(current)) var/mob/living/silicon/robot/robot = current if (robot.emagged) - result += "Emagged" + result += span_bad("Emagged") return result.Join(" | ") /datum/mind/proc/traitor_panel() @@ -158,7 +158,7 @@ GLOBAL_VAR(antag_prototypes) continue else //Show removal and current one priority_sections |= antag_category - antag_header_parts += "[current_antag.name]" + antag_header_parts += span_bad("[current_antag.name]") antag_header_parts += "Remove" antag_header_parts += "Open VV" diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 04300582160d6..f619bd8aaba87 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -64,7 +64,7 @@ return UI_INTERACTIVE return ..() -/obj/effect/fun_balloon/sentience/ui_act(action, list/params) +/obj/effect/fun_balloon/sentience/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -105,6 +105,7 @@ alert_pic = 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 89ad2fc8dd256..f84d3ea8aa861 100644 --- a/code/modules/admin/greyscale_modify_menu.dm +++ b/code/modules/admin/greyscale_modify_menu.dm @@ -120,7 +120,7 @@ data["sprites"] = sprite_data return data -/datum/greyscale_modify_menu/ui_act(action, params) +/datum/greyscale_modify_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/admin/outfit_editor.dm b/code/modules/admin/outfit_editor.dm index 67196c54bd434..a3bd433f52e40 100644 --- a/code/modules/admin/outfit_editor.dm +++ b/code/modules/admin/outfit_editor.dm @@ -100,7 +100,7 @@ drip.vars[slot] = null if("rename") - var/newname = tgui_input_text(owner, "What do you want to name this outfit?", OUTFIT_EDITOR_NAME) + var/newname = tgui_input_text(owner, "What do you want to name this outfit?", OUTFIT_EDITOR_NAME, max_length = MAX_NAME_LEN) if(newname) drip.name = newname if("save") diff --git a/code/modules/admin/painting_manager.dm b/code/modules/admin/painting_manager.dm index 7a8bd7127a4d3..5ebcdef005904 100644 --- a/code/modules/admin/painting_manager.dm +++ b/code/modules/admin/painting_manager.dm @@ -55,7 +55,7 @@ ADMIN_VERB(painting_manager, R_ADMIN, "Paintings Manager", "View and redact pain if("rename") //Modify the metadata var/old_title = chosen_painting.title - var/new_title = tgui_input_text(user, "New painting title?", "Painting Rename", chosen_painting.title) + var/new_title = tgui_input_text(user, "New painting title?", "Painting Rename", chosen_painting.title, max_length = MAX_NAME_LEN) if(!new_title) return chosen_painting.title = new_title @@ -63,7 +63,7 @@ ADMIN_VERB(painting_manager, R_ADMIN, "Paintings Manager", "View and redact pain return TRUE if("rename_author") var/old_name = chosen_painting.creator_name - var/new_name = tgui_input_text(user, "New painting author name?", "Painting Rename", chosen_painting.creator_name) + var/new_name = tgui_input_text(user, "New painting author name?", "Painting Rename", chosen_painting.creator_name, max_length = MAX_NAME_LEN) if(!new_name) return chosen_painting.creator_name = new_name @@ -83,7 +83,7 @@ ADMIN_VERB(painting_manager, R_ADMIN, "Paintings Manager", "View and redact pain log_admin("[key_name(user)] has removed tag [params["tag"]] from persistent painting made by [chosen_painting.creator_ckey] with id [chosen_painting.md5].") return TRUE if("add_tag") - var/tag_name = tgui_input_text(user, "New tag name?", "Add Tag") + var/tag_name = tgui_input_text(user, "New tag name?", "Add Tag", max_length = MAX_NAME_LEN) if(!tag_name) return if(!chosen_painting.tags) diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index e508a10473927..296b6fd2dd86f 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -222,7 +222,7 @@ ADMIN_VERB(edit_admin_permissions, R_PERMISSIONS, "Permissions Panel", "Edit adm . = ckey(admin_key) if(!.) return FALSE - if(!admin_ckey && (. in GLOB.admin_datums+GLOB.deadmins)) + if(!admin_ckey && (. in (GLOB.admin_datums+GLOB.deadmins))) to_chat(usr, span_danger("[admin_key] is already an admin."), confidential = TRUE) return FALSE if(use_db) diff --git a/code/modules/admin/skill_panel.dm b/code/modules/admin/skill_panel.dm index ec80768276dce..b1ba4d10910a0 100644 --- a/code/modules/admin/skill_panel.dm +++ b/code/modules/admin/skill_panel.dm @@ -35,7 +35,7 @@ var/exp_percent = exp / SKILL_EXP_LIST[SKILL_LEVEL_LEGENDARY] .["skills"] += list(list("playername" = targetmind.current, "path" = type, "name" = S.name, "desc" = S.desc, "lvlnum" = lvl_num, "lvl" = lvl_name, "exp" = exp, "exp_prog" = xp_req_to_level - xp_prog_to_level, "exp_req" = xp_req_to_level, "exp_percent" = exp_percent, "max_exp" = SKILL_EXP_LIST[length(SKILL_EXP_LIST)])) -/datum/skill_panel/ui_act(action, params) +/datum/skill_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/admin/smites/dock_pay.dm b/code/modules/admin/smites/dock_pay.dm index 0ce91bbd4b701..a3828feb828dc 100644 --- a/code/modules/admin/smites/dock_pay.dm +++ b/code/modules/admin/smites/dock_pay.dm @@ -28,4 +28,4 @@ else card.registered_account.account_balance = card.registered_account.account_balance - new_cost card.registered_account.bank_card_talk("[new_cost] credits deducted from your account based on performance review.") - SEND_SOUND(target, 'sound/machines/buzz-sigh.ogg') + SEND_SOUND(target, 'sound/machines/buzz/buzz-sigh.ogg') diff --git a/code/modules/admin/smites/imaginary_friend_special.dm b/code/modules/admin/smites/imaginary_friend_special.dm index e670e26fd1fa4..37425faf3b1c8 100644 --- a/code/modules/admin/smites/imaginary_friend_special.dm +++ b/code/modules/admin/smites/imaginary_friend_special.dm @@ -1,6 +1,8 @@ #define CHOICE_RANDOM_APPEARANCE "Random" #define CHOICE_PREFS_APPEARANCE "Look-a-like" +#define CHOICE_PICK_PLAYER "Pick player" #define CHOICE_POLL_GHOSTS "Offer to ghosts" +#define CHOICE_END_THEM "Do it!" #define CHOICE_CANCEL "Cancel" /** @@ -15,10 +17,12 @@ **/ /datum/smite/custom_imaginary_friend name = "Imaginary Friend (Special)" - /// Who are we going to add to your head today? - var/list/friend_candidates /// Do we randomise friend appearances or not? var/random_appearance + /// Are we polling for ghosts + var/ghost_polling + /// How many imaginary friends should be added when polling + var/polled_friend_count /datum/smite/custom_imaginary_friend/configure(client/user) var/appearance_choice = tgui_alert(user, @@ -29,69 +33,99 @@ return FALSE random_appearance = appearance_choice == CHOICE_RANDOM_APPEARANCE - var/picked_client = tgui_input_list(user, "Pick the player to put in control", "New Imaginary Friend", list(CHOICE_POLL_GHOSTS) + sort_list(GLOB.clients)) - if(isnull(picked_client)) - return FALSE - - if(picked_client == CHOICE_POLL_GHOSTS) - return poll_ghosts(user) - - var/client/friend_candidate_client = picked_client - if(QDELETED(friend_candidate_client)) - to_chat(user, span_warning("Selected player no longer has a client, aborting.")) - return FALSE + var/client_selection_choice = tgui_alert(user, + "Do you want to pick a specific player, or poll for ghosts?", + "Imaginary Friend Selection?", + list(CHOICE_PICK_PLAYER, CHOICE_POLL_GHOSTS, CHOICE_CANCEL)) - if(isliving(friend_candidate_client.mob) && (tgui_alert(user, "This player already has a living mob ([friend_candidate_client.mob]). Do you still want to turn them into an Imaginary Friend?", "Remove player from mob?", list("Do it!", "Cancel")) != "Do it!")) + if(isnull(client_selection_choice) || client_selection_choice == CHOICE_CANCEL) return FALSE + ghost_polling = client_selection_choice == CHOICE_POLL_GHOSTS - if(QDELETED(friend_candidate_client)) - to_chat(user, span_warning("Selected player no longer has a client, aborting.")) - return FALSE + if(ghost_polling) + var/how_many = tgui_input_number(user, "How many imaginary friends should be added?", "Imaginary friend count", default = 1, min_value = 1) + if(isnull(how_many) || how_many < 1) + return FALSE + polled_friend_count = how_many - friend_candidates = list(friend_candidate_client) return TRUE -/// Try to offer the role to ghosts -/datum/smite/custom_imaginary_friend/proc/poll_ghosts(client/user) - var/how_many = tgui_input_number(user, "How many imaginary friends should be added?", "Imaginary friend count", default = 1, min_value = 1) - if (isnull(how_many) || how_many < 1) - return FALSE +/// Try to offer the role to ghosts +/datum/smite/custom_imaginary_friend/proc/poll_ghosts(client/user, mob/living/target) var/list/volunteers = SSpolling.poll_ghost_candidates( check_jobban = ROLE_PAI, poll_time = 10 SECONDS, ignore_category = POLL_IGNORE_IMAGINARYFRIEND, - role_name_text = "imaginary friend", + jump_target = target, + role_name_text = "an imaginary friend for [target.real_name]", ) var/volunteer_count = length(volunteers) - if (volunteer_count == 0) + if(volunteer_count == 0) to_chat(user, span_warning("No candidates volunteered, aborting.")) - return FALSE + return shuffle_inplace(volunteers) - friend_candidates = list() - while (how_many > 0 && length(volunteers) > 0) + var/list/friend_candidates = list() + while(polled_friend_count > 0 && length(volunteers) > 0) var/mob/dead/observer/lucky_ghost = pop(volunteers) if (!lucky_ghost.client) continue - how_many-- + polled_friend_count-- friend_candidates += lucky_ghost.client - return TRUE + return friend_candidates + +/// Pick client manually +/datum/smite/custom_imaginary_friend/proc/pick_client(client/user) + var/picked_client = tgui_input_list(user, "Pick the player to put in control", "New Imaginary Friend", sort_list(GLOB.clients)) + if(isnull(picked_client)) + return + + var/client/friend_candidate_client = picked_client + if(QDELETED(friend_candidate_client)) + to_chat(user, span_warning("Selected player no longer has a client, aborting.")) + return + + if(isliving(friend_candidate_client.mob)) + var/end_them_choice = tgui_alert(user, + "This player already has a living mob ([friend_candidate_client.mob]). Do you still want to turn them into an Imaginary Friend?", + "Remove player from mob?", + list(CHOICE_END_THEM, CHOICE_CANCEL)) + if(end_them_choice == CHOICE_CANCEL) + return + + if(QDELETED(friend_candidate_client)) + to_chat(user, span_warning("Selected player no longer has a client, aborting.")) + return + + return list(friend_candidate_client) + /datum/smite/custom_imaginary_friend/effect(client/user, mob/living/target) . = ..() + // Run this check before and after polling, we don't wanna poll for something which already stopped existing + if(QDELETED(target)) + to_chat(user, span_warning("The target mob no longer exists, aborting.")) + return + + var/list/friend_candidates + if(ghost_polling) + friend_candidates = poll_ghosts(user, target) + else + friend_candidates = pick_client(user) + if(QDELETED(target)) to_chat(user, span_warning("The target mob no longer exists, aborting.")) return - if(!length(friend_candidates)) + if(isnull(friend_candidates) || !length(friend_candidates)) to_chat(user, span_warning("No provided imaginary friend candidates, aborting.")) return var/list/final_clients = list() - for (var/client/client as anything in friend_candidates) - if (QDELETED(client)) + for(var/client/client as anything in friend_candidates) + if(QDELETED(client)) continue final_clients += client @@ -99,7 +133,7 @@ to_chat(user, span_warning("No provided imaginary friend candidates had clients, aborting.")) return - for (var/client/friend_candidate_client as anything in final_clients) + for(var/client/friend_candidate_client as anything in final_clients) var/mob/client_mob = friend_candidate_client.mob if(isliving(client_mob)) client_mob.ghostize() @@ -114,5 +148,7 @@ #undef CHOICE_RANDOM_APPEARANCE #undef CHOICE_PREFS_APPEARANCE +#undef CHOICE_PICK_PLAYER #undef CHOICE_POLL_GHOSTS +#undef CHOICE_END_THEM #undef CHOICE_CANCEL diff --git a/code/modules/admin/smites/immerse.dm b/code/modules/admin/smites/immerse.dm index fd330868e9940..9cdd8aca95ec8 100644 --- a/code/modules/admin/smites/immerse.dm +++ b/code/modules/admin/smites/immerse.dm @@ -5,5 +5,5 @@ /datum/smite/immerse/effect(client/user, mob/living/target) . = ..() immerse_player(target) - SEND_SOUND(target, sound('sound/voice/roleplay.ogg')) + SEND_SOUND(target, sound('sound/misc/roleplay.ogg')) to_chat(target, span_boldnotice("Please roleplay appropriately, okay?")) diff --git a/code/modules/admin/smites/lightning.dm b/code/modules/admin/smites/lightning.dm index 660af779f9b5c..6ffd8eb58695c 100644 --- a/code/modules/admin/smites/lightning.dm +++ b/code/modules/admin/smites/lightning.dm @@ -12,7 +12,7 @@ var/turf/lightning_source = get_step(get_step(user, NORTH), NORTH) lightning_source.Beam(user, icon_state="lightning[rand(1,12)]", time = 5) user.adjustFireLoss(LIGHTNING_BOLT_DAMAGE) - playsound(get_turf(user), 'sound/magic/lightningbolt.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/effects/magic/lightningbolt.ogg', 50, TRUE) if(ishuman(user)) var/mob/living/carbon/human/human_target = user human_target.electrocution_animation(LIGHTNING_BOLT_ELECTROCUTION_ANIMATION_LENGTH) diff --git a/code/modules/admin/smites/nugget.dm b/code/modules/admin/smites/nugget.dm index 4525f674f2c0d..18e5254e615f5 100644 --- a/code/modules/admin/smites/nugget.dm +++ b/code/modules/admin/smites/nugget.dm @@ -16,6 +16,6 @@ if (limb.body_part == HEAD || limb.body_part == CHEST) continue addtimer(CALLBACK(limb, TYPE_PROC_REF(/obj/item/bodypart/, dismember)), timer) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), carbon_target, 'sound/effects/cartoon_pop.ogg', 70), timer) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), carbon_target, 'sound/effects/cartoon_sfx/cartoon_pop.ogg', 70), timer) addtimer(CALLBACK(carbon_target, TYPE_PROC_REF(/mob/living/, spin), 4, 1), timer - 0.4 SECONDS) timer += 2 SECONDS diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm index d697537c6df5f..c68baa32e4ea1 100644 --- a/code/modules/admin/sound_emitter.dm +++ b/code/modules/admin/sound_emitter.dm @@ -81,7 +81,7 @@ return var/mob/user = usr if(href_list["edit_label"]) - var/new_label = tgui_input_text(user, "Choose a new label", "Sound Emitter") + var/new_label = tgui_input_text(user, "Choose a new label", "Sound Emitter", max_length = MAX_NAME_LEN) if(!new_label) return maptext = MAPTEXT(new_label) diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index 7c6a89a3546ef..735321d6fa55c 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -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(/* SKYRAT EDIT CHANGE - MULTISERVER - AND [server_check] */{" SELECT 1 FROM [format_table_name("ban")] WHERE diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 400c4e05d8c67..cf03d1e6b281a 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -433,10 +433,12 @@ var/text = query_get_type_messages.item[5] var/timestamp = query_get_type_messages.item[6] var/server = query_get_type_messages.item[7] - var/editor_key = query_get_type_messages.item[9] // SKYRAT EDIT CHANGE BEGIN - MULTISERVER + // SKYRAT EDIT CHANGE BEGIN - MULTISERVER + var/editor_key = query_get_type_messages.item[9] var/expire_timestamp = query_get_type_messages.item[10] var/playtime = query_get_type_messages.item[11] - var/round_id = query_get_type_messages.item[12] // SKYRAT EDIT CHANGE END - MULTISERVER + var/round_id = query_get_type_messages.item[12] + // SKYRAT EDIT CHANGE END - MULTISERVER output += "" if(type == "watchlist entry") output += "[t_key] | " @@ -497,13 +499,15 @@ var/text = query_get_messages.item[5] var/timestamp = query_get_messages.item[6] var/server = query_get_messages.item[7] - var/editor_key = query_get_messages.item[9] // SKYRAT EDIT CHANGE BEGIN - MULTISERVER + // SKYRAT EDIT CHANGE BEGIN - MULTISERVER + var/editor_key = query_get_messages.item[9] var/age = text2num(query_get_messages.item[10]) target_key = query_get_messages.item[11] var/expire_timestamp = query_get_messages.item[12] var/severity = query_get_messages.item[13] var/playtime = query_get_messages.item[14] - var/round_id = query_get_messages.item[15] // SKYRAT EDIT CHANGE END - MULTISERVER + var/round_id = query_get_messages.item[15] + // SKYRAT EDIT CHANGE END - MULTISERVER var/alphatext = "" var/nsd = CONFIG_GET(number/note_stale_days) var/nfd = CONFIG_GET(number/note_fresh_days) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 9daf217af9708..6a32a25d393bf 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1780,11 +1780,10 @@ if(!check_rights(R_ADMIN)) return - for(var/obj/machinery/fax/FAX as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/fax)) - if(!is_centcom_level(FAX.z)) + for(var/obj/machinery/fax/admin/FAX as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/fax/admin)) + if(FAX.fax_id != href_list["destination"]) continue - - FAX.receive(locate(href_list["print_fax"]), href_list["fax_name"]) + FAX.receive(locate(href_list["print_fax"]), href_list["sender_name"]) // SKYRAT EDIT ADDITION START else if(href_list["pass_opfor_candidate"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 36db4fa8bc4b0..4ee2b79f04459 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -64,7 +64,7 @@ "SELECT /mob/living IN (@[/area/service/bar MAP contents])[1]" What if some dumbass admin spawned a bajillion spiders and you need to kill them all? - Oh yeah you'd rather not delete all the spiders in maintenace. Only that one room the spiders were + Oh yeah you'd rather not delete all the spiders in maintenance. Only that one room the spiders were spawned in. "DELETE /mob/living/carbon/superior_animal/giant_spider WHERE loc.loc == marked" @@ -109,7 +109,7 @@ By the way, queries are slow and take a while. Be patient. They don't hang the entire server though. - With great power comes great responsability. + With great power comes great responsibility. Here's a slightly more formal quick reference. diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index bc74347475ae9..1305e5a660d6e 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -51,6 +51,9 @@ /proc/_get_step(Ref, Dir) return get_step(Ref, Dir) +/proc/_hascall(object, procname) + return hascall(object, procname) + /proc/_hearers(Depth = world.view, Center = usr) return hearers(Depth, Center) diff --git a/code/modules/admin/verbs/admin.dm b/code/modules/admin/verbs/admin.dm index 86bbd15ff3571..7cab28b554992 100644 --- a/code/modules/admin/verbs/admin.dm +++ b/code/modules/admin/verbs/admin.dm @@ -32,7 +32,7 @@ ADMIN_VERB(unprison, R_ADMIN, "UnPrison", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEG tgui_alert(user, "[prisoner.name] is not prisoned.") return - SSjob.SendToLateJoin(prisoner) + SSjob.send_to_late_join(prisoner) message_admins("[key_name_admin(user)] has unprisoned [key_name_admin(prisoner)]") log_admin("[key_name(user)] has unprisoned [key_name(prisoner)]") BLACKBOX_LOG_ADMIN_VERB("Unprison") diff --git a/code/modules/admin/verbs/admin_newscaster.dm b/code/modules/admin/verbs/admin_newscaster.dm index 0439cfa8811ac..b1be5560d69d9 100644 --- a/code/modules/admin/verbs/admin_newscaster.dm +++ b/code/modules/admin/verbs/admin_newscaster.dm @@ -134,7 +134,7 @@ ADMIN_VERB(access_news_network, R_ADMIN, "Access Newscaster Network", "Allows yo data["wanted"] = wanted_info return data -/datum/newspanel/ui_act(action, params) +/datum/newspanel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -234,14 +234,14 @@ ADMIN_VERB(access_news_network, R_ADMIN, "Access Newscaster Network", "Allows yo return TRUE if("setCriminalName") - var/temp_name = tgui_input_text(usr, "Write the Criminal's Name", "Warrent Alert Handler", "John Doe", MAX_NAME_LEN, multiline = FALSE) + var/temp_name = tgui_input_text(usr, "Write the Criminal's Name", "Warrent Alert Handler", "John Doe", max_length = MAX_NAME_LEN, multiline = FALSE) if(!temp_name) return TRUE criminal_name = temp_name return TRUE if("setCrimeData") - var/temp_desc = tgui_input_text(usr, "Write the Criminal's Crimes", "Warrent Alert Handler", "Unknown", MAX_BROADCAST_LEN, multiline = TRUE) + var/temp_desc = tgui_input_text(usr, "Write the Criminal's Crimes", "Warrent Alert Handler", "Unknown", max_length = MAX_BROADCAST_LEN, multiline = TRUE) if(!temp_desc) return TRUE crime_description = temp_desc @@ -339,7 +339,7 @@ ADMIN_VERB(access_news_network, R_ADMIN, "Access Newscaster Network", "Allows yo if(channel_name == potential_channel.channel_ID) current_channel = potential_channel break - var/temp_message = tgui_input_text(usr, "Write your Feed story", "Network Channel Handler", feed_channel_message, multiline = TRUE) + var/temp_message = tgui_input_text(usr, "Write your Feed story", "Network Channel Handler", feed_channel_message, max_length = MAX_BROADCAST_LEN, multiline = TRUE) if(length(temp_message) <= 1) return TRUE if(temp_message) diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm index a9d285815ad37..7ecadd4891c37 100644 --- a/code/modules/admin/verbs/adminevents.dm +++ b/code/modules/admin/verbs/adminevents.dm @@ -168,7 +168,7 @@ ADMIN_VERB(disable_shuttle, R_ADMIN, "Disable Shuttle", "Those fuckers aren't ge priority_announce( text = "Emergency Shuttle uplink failure, shuttle disabled until further notice.", title = "Uplink Failure", - sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "grey", ) @@ -194,7 +194,7 @@ ADMIN_VERB(enable_shuttle, R_ADMIN, "Enable Shuttle", "Those fuckers ARE getting priority_announce( text = "Emergency Shuttle uplink reestablished, shuttle enabled.", title = "Uplink Restored", - sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "green", ) @@ -218,9 +218,15 @@ ADMIN_VERB(hostile_environment, R_ADMIN, "Hostile Environment", "Disable the shu SSshuttle.hostile_environments.Cut() SSshuttle.checkHostileEnvironment() -ADMIN_VERB(toggle_nuke, R_DEBUG|R_ADMIN, "Toggle Nuke", "Arm or disarm a nuke.", ADMIN_CATEGORY_EVENTS, obj/machinery/nuclearbomb/nuke in world) +ADMIN_VERB(toggle_nuke, R_DEBUG|R_ADMIN, "Toggle Nuke", "Arm or disarm a nuke.", ADMIN_CATEGORY_EVENTS) + var/list/nukes = list() + for (var/obj/machinery/nuclearbomb/bomb in world) + nukes += bomb + var/obj/machinery/nuclearbomb/nuke = tgui_input_list(user, "", "Toggle Nuke", nukes) + if (isnull(nuke)) + return if(!nuke.timing) - var/newtime = input(user, "Set activation timer.", "Activate Nuke", "[nuke.timer_set]") as num|null + var/newtime = tgui_input_number(user, "Set activation timer.", "Activate Nuke", nuke.timer_set) if(!newtime) return nuke.timer_set = newtime @@ -263,13 +269,21 @@ ADMIN_VERB(command_report_footnote, R_ADMIN, "Command Report Footnote", "Adds a var/datum/command_footnote/command_report_footnote = new /datum/command_footnote() GLOB.communications_controller.block_command_report += 1 //Add a blocking condition to the counter until the inputs are done. - command_report_footnote.message = tgui_input_text(user, "This message will be attached to the bottom of the roundstart threat report. Be sure to delay the roundstart report if you need extra time.", "P.S.") + command_report_footnote.message = tgui_input_text( + user, + "This message will be attached to the bottom of the roundstart threat report. Be sure to delay the roundstart report if you need extra time.", + "P.S.", + ) if(!command_report_footnote.message) GLOB.communications_controller.block_command_report -= 1 qdel(command_report_footnote) return - command_report_footnote.signature = tgui_input_text(user, "Whose signature will appear on this footnote?", "Also sign here, here, aaand here.") + command_report_footnote.signature = tgui_input_text( + user, + "Whose signature will appear on this footnote?", + "Also sign here, here, aaand here.", + ) if(!command_report_footnote.signature) command_report_footnote.signature = "Classified" diff --git a/code/modules/admin/verbs/adminfun.dm b/code/modules/admin/verbs/adminfun.dm index 8bc7a611b35d4..c58d63581bd34 100644 --- a/code/modules/admin/verbs/adminfun.dm +++ b/code/modules/admin/verbs/adminfun.dm @@ -147,14 +147,14 @@ ADMIN_VERB(polymorph_all, R_ADMIN, "Polymorph All", "Applies the effects of the continue M.audible_message(span_hear("...wabbajack...wabbajack...")) - playsound(M.loc, 'sound/magic/staff_change.ogg', 50, TRUE, -1) + playsound(M.loc, 'sound/effects/magic/staff_change.ogg', 50, TRUE, -1) M.wabbajack() message_admins("Mass polymorph started by [who_did_it] is complete.") ADMIN_VERB_AND_CONTEXT_MENU(admin_smite, R_ADMIN|R_FUN, "Smite", "Smite a player with divine power.", ADMIN_CATEGORY_FUN, mob/living/target in world) - var/punishment = input(user, "Choose a punishment", "DIVINE SMITING") as null|anything in GLOB.smites + var/punishment = tgui_input_list(user, "Choose a punishment", "DIVINE SMITING", GLOB.smites) if(QDELETED(target) || !punishment) return @@ -187,7 +187,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(admin_smite, R_ADMIN|R_FUN, "Smite", "Smite a player /proc/firing_squad(mob/living/carbon/target, turf/source_turf, body_zone, wound_bonus, damage) if(!target.get_bodypart(body_zone)) return - playsound(target, 'sound/weapons/gun/revolver/shot.ogg', 100) + playsound(target, 'sound/items/weapons/gun/revolver/shot.ogg', 100) var/obj/projectile/bullet/smite/divine_wrath = new(source_turf) divine_wrath.damage = damage divine_wrath.wound_bonus = wound_bonus diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm index 93880b3c5c606..cbd4f735712dd 100644 --- a/code/modules/admin/verbs/admingame.dm +++ b/code/modules/admin/verbs/admingame.dm @@ -182,20 +182,24 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(show_player_panel, R_ADMIN, "Show Player Panel", mo user << browse(body, "window=adminplayeropts-[REF(player)];size=550x515") BLACKBOX_LOG_ADMIN_VERB("Player Panel") -/client/proc/cmd_admin_godmode(mob/M in GLOB.mob_list) +/client/proc/cmd_admin_godmode(mob/mob in GLOB.mob_list) set category = "Admin.Game" set name = "Godmode" if(!check_rights(R_ADMIN)) return - M.status_flags ^= GODMODE - to_chat(usr, span_adminnotice("Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]"), confidential = TRUE) + var/had_trait = HAS_TRAIT_FROM(mob, TRAIT_GODMODE, ADMIN_TRAIT) + if(had_trait) + REMOVE_TRAIT(mob, TRAIT_GODMODE, ADMIN_TRAIT) + else + ADD_TRAIT(mob, TRAIT_GODMODE, ADMIN_TRAIT) + to_chat(usr, span_adminnotice("Toggled [had_trait ? "OFF" : "ON"]"), confidential = TRUE) - log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]") - var/msg = "[key_name_admin(usr)] has toggled [ADMIN_LOOKUPFLW(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]" + log_admin("[key_name(usr)] has toggled [key_name(mob)]'s nodamage to [had_trait ? "Off" : "On"]") + var/msg = "[key_name_admin(usr)] has toggled [ADMIN_LOOKUPFLW(mob)]'s nodamage to [had_trait ? "Off" : "On"]" message_admins(msg) - admin_ticket_log(M, msg) - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Godmode", "[M.status_flags & GODMODE ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + admin_ticket_log(mob, msg) + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Godmode", "[had_trait ? "Disabled" : "Enabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! /* If a guy was gibbed and you want to revive him, this is a good way to do so. @@ -222,7 +226,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th if(findtext(G_found.real_name,"monkey")) if(tgui_alert(user,"This character appears to have been a monkey. Would you like to respawn them as such?",,list("Yes","No")) == "Yes") var/mob/living/carbon/human/species/monkey/new_monkey = new - SSjob.SendToLateJoin(new_monkey) + SSjob.send_to_late_join(new_monkey) G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use new_monkey.key = G_found.key to_chat(new_monkey, "You have been fully respawned. Enjoy the game.", confidential = TRUE) @@ -234,7 +238,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th //Ok, it's not a monkey. So, spawn a human. var/mob/living/carbon/human/new_character = new//The mob being spawned. - SSjob.SendToLateJoin(new_character) + SSjob.send_to_late_join(new_character) var/datum/record/locked/record_found //Referenced to later to either randomize or not randomize the character. if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something @@ -257,7 +261,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th else new_character.mind_initialize() if(is_unassigned_job(new_character.mind.assigned_role)) - new_character.mind.set_assigned_role(SSjob.GetJobType(SSjob.overflow_role)) + new_character.mind.set_assigned_role(SSjob.get_job_type(SSjob.overflow_role)) new_character.key = G_found.key @@ -274,7 +278,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th //Now for special roles and equipment. var/datum/antagonist/traitor/traitordatum = new_character.mind.has_antag_datum(/datum/antagonist/traitor) if(traitordatum) - SSjob.EquipRank(new_character, new_character.mind.assigned_role, new_character.client) + SSjob.equip_rank(new_character, new_character.mind.assigned_role, new_character.client) new_character.mind.give_uplink(silent = TRUE, antag_datum = traitordatum) switch(new_character.mind.special_role) @@ -303,7 +307,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th new_character = new_character.AIize() else if(!traitordatum) // Already equipped there. - SSjob.EquipRank(new_character, new_character.mind.assigned_role, new_character.client)//Or we simply equip them. + SSjob.equip_rank(new_character, new_character.mind.assigned_role, new_character.client)//Or we simply equip them. //Announces the character on all the systems, based on the record. if(!record_found && (new_character.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 4c984c42b71ae..96f6069df7ab0 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -103,7 +103,7 @@ ADMIN_VERB(cmd_admin_pm_panel, R_NONE, "Admin PM", "Show a list of clients to PM if(length(recipient_interactions) == 1) if(length(opening_interactions)) // Inform the admin that they aren't the first var/printable_interators = english_list(opening_interactions) - SEND_SOUND(src, sound('sound/machines/buzz-sigh.ogg', volume=30)) + SEND_SOUND(src, sound('sound/machines/buzz/buzz-sigh.ogg', volume=30)) message_prompt += "\n\n**This ticket is already being responded to by: [printable_interators]**" // add the admin who is currently responding to the list of people responding LAZYADD(recipient_ticket.opening_responders, src) diff --git a/code/modules/admin/verbs/ai_triumvirate.dm b/code/modules/admin/verbs/ai_triumvirate.dm index d63994a25c319..38c2eba712c60 100644 --- a/code/modules/admin/verbs/ai_triumvirate.dm +++ b/code/modules/admin/verbs/ai_triumvirate.dm @@ -36,7 +36,7 @@ GLOBAL_DATUM(triple_ai_controller, /datum/triple_ai_controller) to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.", confidential = TRUE) return - var/datum/job/job = SSjob.GetJobType(/datum/job/ai) + var/datum/job/job = SSjob.get_job_type(/datum/job/ai) if(!job) to_chat(usr, "Unable to locate the AI job", confidential = TRUE) CRASH("triple_ai() called, no /datum/job/ai to be found.") diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm index 7f56155c9989a..2192428846709 100644 --- a/code/modules/admin/verbs/anonymousnames.dm +++ b/code/modules/admin/verbs/anonymousnames.dm @@ -268,7 +268,7 @@ GLOBAL_DATUM(current_anonymous_theme, /datum/anonymous_theme) set_station_name("[pick(GLOB.first_names)] [pick(GLOB.last_names)]") /datum/anonymous_theme/station/announce_to_all_players() - priority_announce("Confirmed level 9 reality error event near [station_name()]. All personnel must try their best to carry on, as to not trigger more reality events by accident.", "Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') + priority_announce("Confirmed level 9 reality error event near [station_name()]. All personnel must try their best to carry on, as to not trigger more reality events by accident.", "Central Command Higher Dimensional Affairs", 'sound/announcer/notice/notice1.ogg') /datum/anonymous_theme/station/anonymous_name(mob/target) return new_station_name() diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index ffeb1cce2731c..97f690f2a5aad 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -64,7 +64,7 @@ ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, AD .["ais"] += list(list("name" = ai.name, "ref" = REF(ai), "connected" = (borg.connected_ai == ai))) -/datum/borgpanel/ui_act(action, params) +/datum/borgpanel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -153,15 +153,15 @@ ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, AD if (!borg.radio.keyslot) // There's no encryption key. This shouldn't happen but we can cope borg.radio.channels -= channel if (channel == RADIO_CHANNEL_SYNDICATE) - borg.radio.syndie = FALSE + borg.radio.special_channels &= ~RADIO_SPECIAL_SYNDIE else if (channel == "CentCom") - borg.radio.independent = FALSE + borg.radio.special_channels &= ~RADIO_SPECIAL_CENTCOM else borg.radio.keyslot.channels -= channel if (channel == RADIO_CHANNEL_SYNDICATE) - borg.radio.keyslot.syndie = FALSE + borg.radio.keyslot.special_channels &= ~RADIO_SPECIAL_SYNDIE else if (channel == "CentCom") - borg.radio.keyslot.independent = FALSE + borg.radio.keyslot.special_channels &= ~RADIO_SPECIAL_CENTCOM message_admins("[key_name_admin(user)] removed the [channel] radio channel from [ADMIN_LOOKUPFLW(borg)].") log_silicon("[key_name(user)] removed the [channel] radio channel from [key_name(borg)].") else // We're adding a channel @@ -169,9 +169,9 @@ ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, AD borg.radio.keyslot = new() borg.radio.keyslot.channels[channel] = 1 if (channel == RADIO_CHANNEL_SYNDICATE) - borg.radio.keyslot.syndie = TRUE + borg.radio.keyslot.special_channels |= RADIO_SPECIAL_SYNDIE else if (channel == "CentCom") - borg.radio.keyslot.independent = TRUE + borg.radio.keyslot.special_channels |= RADIO_SPECIAL_CENTCOM message_admins("[key_name_admin(user)] added the [channel] radio channel to [ADMIN_LOOKUPFLW(borg)].") log_silicon("[key_name(user)] added the [channel] radio channel to [key_name(borg)].") borg.radio.recalculateChannels() diff --git a/code/modules/admin/verbs/change_shuttle_events.dm b/code/modules/admin/verbs/change_shuttle_events.dm index 90f7e03672e73..258370df3b7b5 100644 --- a/code/modules/admin/verbs/change_shuttle_events.dm +++ b/code/modules/admin/verbs/change_shuttle_events.dm @@ -27,5 +27,5 @@ ADMIN_VERB(change_shuttle_events, R_ADMIN|R_FUN, "Change Shuttle Events", "Chang port.event_list.Remove(active[options[result]]) message_admins("[key_name_admin(user)] has removed '[active[result]]' from [port].") else - port.event_list.Add(new typepath (port)) message_admins("[key_name_admin(user)] has added '[typepath]' to [port].") + port.add_shuttle_event(typepath) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 20cdf3514598f..b6c5e10ca1d81 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -583,8 +583,8 @@ ADMIN_VERB(jump_to_ruin, R_DEBUG, "Jump to Ruin", "Displays a list of all placed return var/datum/map_template/ruin/template = landmark.ruin_template user.mob.forceMove(get_turf(landmark)) - to_chat(user, span_name("[template.name]"), confidential = TRUE) - to_chat(user, "[template.description]", confidential = TRUE) + to_chat(user, span_name(template.name), confidential = TRUE) + to_chat(user, span_italics(template.description), confidential = TRUE) ADMIN_VERB_VISIBILITY(place_ruin, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) ADMIN_VERB(place_ruin, R_DEBUG, "Spawn Ruin", "Attempt to randomly place a specific ruin.", ADMIN_CATEGORY_MAPPING) @@ -625,7 +625,7 @@ ADMIN_VERB(place_ruin, R_DEBUG, "Spawn Ruin", "Attempt to randomly place a speci log_admin("[key_name(user)] randomly spawned ruin [ruinname] at [COORD(landmark)].") user.mob.forceMove(get_turf(landmark)) to_chat(user, span_name("[template.name]"), confidential = TRUE) - to_chat(user, "[template.description]", confidential = TRUE) + to_chat(user, span_italics("[template.description]"), confidential = TRUE) else to_chat(user, span_warning("Failed to place [template.name]."), confidential = TRUE) diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm index e116a9daf9a53..6aaa5068a5b9e 100644 --- a/code/modules/admin/verbs/ert.dm +++ b/code/modules/admin/verbs/ert.dm @@ -250,7 +250,7 @@ ert_antag.random_names = ertemplate.random_names ert_operative.mind.add_antag_datum(ert_antag,ert_team) - ert_operative.mind.set_assigned_role(SSjob.GetJobType(ert_antag.ert_job_path)) + ert_operative.mind.set_assigned_role(SSjob.get_job_type(ert_antag.ert_job_path)) //Logging and cleanup ert_operative.log_message("has been selected as \a [ert_antag.name].", LOG_GAME) diff --git a/code/modules/admin/verbs/ghost_pool_protection.dm b/code/modules/admin/verbs/ghost_pool_protection.dm index 439f4a37b897d..ed31d124a7de0 100644 --- a/code/modules/admin/verbs/ghost_pool_protection.dm +++ b/code/modules/admin/verbs/ghost_pool_protection.dm @@ -50,7 +50,7 @@ ADMIN_VERB(ghost_pool_protection, R_ADMIN, "Ghost Pool Protection", "Choose whic data["minigames"] = (new_role_flags & GHOSTROLE_MINIGAME) return data -/datum/ghost_pool_menu/ui_act(action, params) +/datum/ghost_pool_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/admin/verbs/grant_dna_infusion.dm b/code/modules/admin/verbs/grant_dna_infusion.dm index 06cfa8110d60d..2e087a160574d 100644 --- a/code/modules/admin/verbs/grant_dna_infusion.dm +++ b/code/modules/admin/verbs/grant_dna_infusion.dm @@ -19,7 +19,7 @@ // This is necessary because list propererties are not defined until initialization picked_infusion = infusions[picked_infusion] - picked_infusion = new picked_infusion + picked_infusion = new picked_infusion() if(!length(picked_infusion.output_organs)) return FALSE @@ -27,7 +27,8 @@ . = picked_infusion for(var/obj/item/organ/infusion_organ as anything in picked_infusion.output_organs) var/obj/item/organ/new_organ = new infusion_organ() - if(!new_organ.replace_into(target)) + new_organ.replace_into(target) + if(new_organ.owner != target) to_chat(usr, span_notice("[target] is unable to carry [new_organ]!")) qdel(new_organ) . = FALSE diff --git a/code/modules/admin/verbs/lawpanel.dm b/code/modules/admin/verbs/lawpanel.dm index f1daaf175761f..6de3ff70182b8 100644 --- a/code/modules/admin/verbs/lawpanel.dm +++ b/code/modules/admin/verbs/lawpanel.dm @@ -24,7 +24,7 @@ ADMIN_VERB(law_panel, R_ADMIN, "Law Panel", "View the AI laws.", ADMIN_CATEGORY_ var/lawtype = tgui_input_list(user, "Select law type", "Law type", lawtypes) if(isnull(lawtype)) return FALSE - var/lawtext = tgui_input_text(user, "Input law text", "Law text") + var/lawtext = tgui_input_text(user, "Input law text", "Law text") // admin verb so no max length and also any user-level input is config based already so ehhhh if(!lawtext) return FALSE if(QDELETED(src) || QDELETED(borgo)) diff --git a/code/modules/admin/verbs/lua/README.md b/code/modules/admin/verbs/lua/README.md index 707184d4d772b..9b9bfbe05f93f 100644 --- a/code/modules/admin/verbs/lua/README.md +++ b/code/modules/admin/verbs/lua/README.md @@ -1,150 +1,225 @@ -# Auxlua +# Objects ---- +Datums, lists, typepaths, static appearances, and some other objects are represented in Luau as userdata. Certain operations can be performed on these types of objects. -## Datums +## Common metamethods -DM datums are treated as lua userdata, and can be stored in fields. Due to fundamental limitations in lua, userdata is inherently truthy. Since datum userdata can correspond to a deleted datum, which would evaluate to `null` in DM, the function [`datum:is_null()`](#datumisnull) is provided to offer a truthiness test consistent with DM. +The following metamethods are defined for all objects. -Keep in mind that BYOND can't see that a datum is referenced in a lua field, and will garbage collect it if it is not referenced anywhere in DM. +### \_\_tostring(): string -### datum:get_var(var) +Returns the string representation of the object. This uses BYOND's internal string conversion function. -Equivalent to DM's `datum.var` +### \_\_eq(other: any): boolean -### datum:set_var(var, value) +Compare the equality of two objects. While passing the same object into luau twice will return two references to the same userdata, some DM projects may override the equality operator using an `__operator==` proc definition. -Equivalent to DM's `datum.var = value` +## Datum-like Objects -### datum:call_proc(procName, ...) +Datum-like objects include datums themselves, clients (if they have not been redefined to be children of `/datum`), static appearances, and the world. -Equivalent to DM's `datum.procName(...)` +### \_\_index(index: string): any -### datum:is_null() +Access the member specified by `index`. -This function is used to evaluate the truthiness of a DM var. The lua statement `if datum:is_null() then` is equivalent to the DM statement `if(datum)`. +If `index` is a valid var for the object, the index operation will return that var's value. +If the var getting wrapper proc is set, the operation will instead call that proc with the arguments `(object, index)`. -### datum.vars +For objects other than static appearances, if `index` is a valid proc for the object, the operation will return a wrapper for that proc that can be invoked using call syntax (e.g. `object:proc(...arguments)`). If the object proc calling wrapper is set, calling the returned function will instead call the wrapper proc with the arguments `(object, proc, {...arguments})`. Note that vars will be shadowed by procs with the same name. To work around this, use the `dm.get_var` function. -Returns a userdatum that allows you to access and modifiy the vars of a DM datum by index. `datum.vars.foo` is equivalent to `datum:get_var("foo")`, while `datum.vars.foo = bar` is equivalent to `datum:set_var("foo", bar)` +### \_\_newindex(index: string, value: any): () ---- +Set the var specified by `index` to `value`, if that var exists on the object. + +If the var setting wrapper proc is set, the operation will instead call that proc with the arguments `(object, index, value)`. ## Lists -In order to allow lists to be modified in-place across the DM-to-lua language barrier, lists are treated as userdata. Whenever running code that expects a DM value, auxlua will attempt to convert tables into lists. +Lists are syntactically similar to tables, with one crucial difference. +Unlike tables, numeric indices must be non-zero integers within the bounds of the list. + +### \_\_index(index: any): any + +Read the list at `index`. This works both for numeric indices and assoc keys. +Vars lists cannot be directly read this way if the var getting wrapper proc is set. + +### \_\_newindex(index: any, value: any): any + +Write `value` to the list at `index`. This works both for writing numeric indices and assoc keys. +Vars lists cannot be directly written this way if the var setting wrapper proc is set. + +### \_\_len(): integer + +Returns the length of the list, similarly to the `length` builtin in DM. + +### Iteration + +Lists support Luau's generalized iteration. Iteration this way returns pairs of numeric indices and list values. +For example, the statement `for _, v in L do` is logically equivalent to the DM statement `for(var/v in L)`. + +# Global Fields and Modules + +In addition to the full extent of Luau's standard library modules, some extra functions and modules have been added. + +## Global-Level Fields + +### sleep(): () + +Yields the active thread, without worrying about passing data into or out of the state. + +Threads yielded this way are placed at the end of a queue. Call the `awaken` hook function from DM to execute the thread at the front of the queue. + +### loadstring(code: string): function + +Luau does not inherently include the `loadstring` function common to a number of other versions of lua. This is an effective reimplementation of `loadstring`. + +### print(...any): () + +Calls the print wrapper with the passed in arguments. +Raises an error if no print wrapper is set, as that means there is nothing to print with. + +### \_state_id: integer + +The handle to the underlying luau state in the dreamluau binary. + +## \_exec + +The `_exec` module includes volatile fields related to the current execution context. + +### \_next_yield_index: integer + +When yielding a thread with `coroutine.yield`, it will be inserted into an internal table at the first open integer index. +This field corresponds to that first open integer index. + +### \_limit: integer? + +If set, the execution limit, rounded to the nearest millisecond. + +### \_time: integer + +The length of successive time luau code has been executed, including recursive calls to DM and back into luau, rounded to the nearest millisecond. + +## dm -List references are subject to the same limitations as datum userdata, but you are less likely to encounter these limitations for regular lists. +The `dm` module includes fields and functions for basic interaction with DM. -Some lists (`vars`, `contents`, `overlays`, `underlays`, `vis_contents`, and `vis_locs`) are inherently attached to datums, and as such, their corresponding userdata contains a weak reference to the containing datum. Use [`list:is_null`](#listisnull) to validate these types of lists. +### world: userdata -### list.len +A static reference to the DM `world`. -Equivalent to DM's `list.len` +### global_vars: userdata -### list:get(index) +A static reference that functions like the DM keyword `global`. This can be indexed to read/write global vars. -Equivalent to DM's `list[index]` +### global_procs: table -### list:set(index, value) +A table that can be indexed by string for functions that wrap global procs. -Equivalent to DM's `list[index] = value` +Due to BYOND limitations, attempting to index an invalid proc returns a function logically equivalent to a no-op. -### list:add(value) +### get_var(object: userdata, var: string): function -Equivalent to DM's `list.Add(value)` +Reads the var `var` on `object`. This function can be used to get vars that are shadowed by procs declared with the same name. -### list:remove(value) +### new(path: string, ...any): userdata -Equivalent to DM's `list.Remove(value)` +Creates an instance of the object specified by `path`, with `...` as its arguments. +If the "new" wrapper is set, that proc will be called instead, with the arguments `(path, {...})`. -### list:to_table() +### is_valid_ref(ref: any): boolean -Converts a DM list into a lua table. +Returns true if the value passed in corresponds to a valid reference-counted DM object. -### list:of_type(type_path) +### usr: userdata? -Will extract only values of type `type_path`. +Corresponds to the DM var `usr`. -### list:is_null() +## list -A similar truthiness test to [`datum:is_null()`](#datumisnull). This function only has the possibility of returning `false` for lists that are inherently attached to a datum (`vars`, `contents`, `overlays`, `underlays`, `vis_contents`, and `vis_locs`). +The `list` module contains wrappers for the builtin list procs, along with several other utility functions for working with lists. -### list.entries +### add(list: userdata, ...any): () -Returns a userdatum that allows you to access and modifiy the entries of the list by index. `list.entries.foo` is equivalent to `list:get("foo")`, while `list.entries.foo = bar` is equivalent to `list:set("foo", bar)` +Logically equivalent to the DM statement `list.Add(...)`. ---- +### copy(list: userdata, start?: integer, end?: integer): userdata -## The dm table +Logically equivalent to the DM statement `list.Copy(start, end)`. -The `dm` table consists of the basic hooks into the DM language. +### cut(list: userdata, start?: integer, end?: integer): userdata -### dm.state_id +Logically equivalent to the DM statement `list.Cut(start, end)`. -The address of the lua state in memory. This is a copy of the internal value used by auxlua to locate the lua state in a global hash map. `state_id` is a registry value that is indirectly obtained using the `dm` table's `__index` metamethod. +### find(list: userdata, item: any, start?: integer, end?: integer): integer -### dm.global_proc(proc, ...) -Calls the global proc `/proc/[proc]` with `...` as its arguments. +Logically equivalent to the DM statement `list.Find(item, start, end)`. -### dm.world -A reference to DM's `world`, in the form of datum userdata. This reference is always valid, since `world` always exists. +### insert(list: userdata, index: integer, ...any): integer -Due to limitations inherent in the wrapper functions used on tgstation, `world:set_var` and `world:call_proc` will raise an error. +Logically equivalent to the DM statement `list.Insert(item, ...)`. -### dm.global_vars -A reference to DM's `global`, in the form of datum userdata. Subject to the same limitations as `dm.world` +### join(list: userdata, glue: string, start?: integer, end?: integer): string -### dm.usr -A weak reference to DM's `usr`. As a rule of thumb, this is a reference to the mob of the client who triggered the chain of procs leading to the execution of Lua code. The following is a list of what `usr` is for the most common ways of executing Lua code: -- For resumes and awakens, which are generally executed by the MC, `usr` is (most likely) null. -- `SS13.wait` queues a resume, which gets executed by the MC. Therefore, `usr` is null after `SS13.wait` finishes. -- For chunk loads, `usr` is generally the current mob of the admin that loaded that chunk. -- For function calls done from the Lua editor, `usr` is the current mob of the admin calling the function. -- `SS13.register_signal` creates a `/datum/callback` that gets executed by the `SEND_SIGNAL` macro for the corresponding signal. As such, `usr` is the mob that triggered the chain of procs leading to the invocation of `SEND_SIGNAL`. +Logically equivalent to the statement `list.Join(glue, start, end)`. ---- +### remove(list: userdata, ...any): integer -## Execution Limit +Logically equivalent to the DM statement `list.Remove(...)`. -In order to prevent freezing the server with infinite loops, auxlua enforces an execution limit, defaulting to 100ms. When a single lua state has been executing for longer than this limit, it will eventually stop and produce an error. +### remove_all(list: userdata, ...any): integer -To avoid exceeding the execution limit, call `sleep()` or `coroutine.yield()` before the execution limit is reached. +Logically equivalent to the DM statement `list.RemoveAll(...)`. -### over_exec_usage(fraction = 0.95) +### splice(list: userdata, start?: integer, end?: integer, ...any): () -This function returns whether the current run of the Lua VM has executed for longer than the specified fraction of the execution limit. You can use this function to branch to a call to `sleep()` or `coroutine.yield()` to maximize the amount of work done in a single run of the Lua VM. If nil, `fraction` will default to 0.95, otherwise, it will be clamped to the range \[0, 1\]. +Logically equivalent to the DM statement `list.Splice(start, end, ...)`. ---- +### swap(list: userdata, index_1: integer, index_2: integer): () -## Task management -The Lua Scripting subsystem manages the execution of tasks for each Lua state. A single fire of the subsystem behaves as follows: -- All tasks that slept since the last fire are resumed in the order they slept. -- For each queued resume, the corresponding task is resumed. +Logically equivalent to the DM statement `list.Swap(index_1, index_2)`. -### sleep() -Yields the current thread, scheduling it to be resumed during the next fire of SSlua. Use this function to prevent your Lua code from exceeding its allowed execution duration. Under the hood, `sleep` performs the following: +### to_table(list: userdata, deep?: boolean): table -- Sets the [`sleep_flag`](#sleep_flag) -- Calls `coroutine.yield()` -- Clears the sleep flag when determining whether the task slept or yielded -- Ignores the return values of `coroutine.yield()` once resumed +Creates a table that is a copy of `list`. If `deep` is true, `to_table` will be called on any lists inside that list. ---- +### from_table(table: table): userdata -## The SS13 package +Creates a list that is a copy of `table`. This is not strictly necessary, as tables are automatically converted to lists when passed back into DM, using the same internal logic as `from_table`. + +### filter(list: userdata, path: string): userdata + +Returns a copy of `list`, containing only elements that are objects descended from `path`. + +## pointer + +The `pointer` module contains utility functions for interacting with pointers. +Keep in mind that passing DM pointers into luau and manipulating them in this way can bypass wrapper procs. + +### read(pointer: userdata): any + +Gets the underlying data the pointer references. + +### write(pointer: userdata, value: any): () + +Writes `value` to the underlying data the pointer references. + +### unwrap(possible_pointer: any): any + +If `possible_pointer` is a pointer, reads it. Otherwise, it is returned as-is. + +# The SS13 package The `SS13` package contains various helper functions that use code specific to tgstation. -### SS13.state +## SS13.state A reference to the state datum (`/datum/lua_state`) handling this Lua state. -### SS13.get_runner_ckey() +## SS13.get_runner_ckey() The ckey of the user who ran the lua script in the current context. Can be unreliable if accessed after sleeping. -### SS13.get_runner_client() +## SS13.get_runner_client() Returns the client of the user who ran the lua script in the current context. Can be unreliable if accessed after sleeping. -### SS13.global_proc +## SS13.global_proc A wrapper for the magic string used to tell `WrapAdminProcCall` to call a global proc. For instance, `/datum/callback` must be instantiated with `SS13.global_proc` as its first argument to specify that it will be invoking a global proc. The following example declares a callback which will execute the global proc `to_chat`: @@ -152,25 +227,18 @@ The following example declares a callback which will execute the global proc `to local callback = SS13.new("/datum/callback", SS13.global_proc, "to_chat", dm.world, "Hello World") ``` -### SS13.istype(thing, type) +## SS13.istype(thing, type) Equivalent to the DM statement `istype(thing, text2path(type))`. -### SS13.new(type, ...) -Instantiates a datum of type `type` with `...` as the arguments passed to `/proc/_new` -The following example spawns a singularity at the caller's current turf: -```lua -SS13.new("/obj/singularity", dm.global_proc("_get_step", dm.usr, 0)) -``` - -### SS13.new_untracked(type, ...) -Works exactly like SS13.new but it does not store the value to the lua state's `references` list variable. This means that the variable could end up deleted if nothing holds a reference to it. +## SS13.new(type, ...) +An alias for `dm.new` -### SS13.is_valid(datum) +## SS13.is_valid(datum) Can be used to determine if the datum passed is not nil, not undefined and not qdel'd all in one. A helper function that allows you to check the validity from only one function. Example usage: ```lua local datum = SS13.new("/datum") -dm.global_proc("qdel", datum) +dm.global_procs.qdel(datum) print(SS13.is_valid(datum)) -- false local null = nil @@ -180,13 +248,13 @@ local datum = SS13.new("/datum") print(SS13.is_valid(datum)) -- true ``` -### SS13.type(string) -Converts a string into a type. Equivalent to doing `dm.global_proc("_text2path", "/path/to/type")` +## SS13.type(string) +Converts a string into a typepath. Equivalent to doing `dm.global_proc("_text2path", "/path/to/type")` -### SS13.qdel(datum) +## SS13.qdel(datum) Deletes a datum. You shouldn't try to reference it after calling this function. Equivalent to doing `dm.global_proc("qdel", datum)` -### SS13.await(thing_to_call, proc_to_call, ...) +## SS13.await(thing_to_call, proc_to_call, ...) Calls `proc_to_call` on `thing_to_call`, with `...` as its arguments, and sleeps until that proc returns. Returns two return values - the first is the return value of the proc, and the second is the message of any runtime exception thrown by the called proc. The following example calls and awaits the return of `poll_ghost_candidates`: @@ -194,59 +262,59 @@ The following example calls and awaits the return of `poll_ghost_candidates`: local ghosts, runtime = SS13.await(SS13.global_proc, "poll_ghost_candidates", "Would you like to be considered for something?") ``` -### SS13.wait(time, timer) +## SS13.wait(time, timer) Waits for a number of **seconds** specified with the `time` argument. You can optionally specify a timer subsystem using the `timer` argument. Internally, this function creates a timer that will resume the current task after `time` seconds, then yields the current task by calling `coroutine.yield` with no arguments and ignores the return values. If the task is prematurely resumed, the timer will be safely deleted. -### SS13.register_signal(datum, signal, func, make_easy_clear_function) +## SS13.register_signal(datum, signal, func) Registers the Lua function `func` as a handler for `signal` on `datum`. Like with signal handlers written in DM, Lua signal handlers should not sleep (either by calling `sleep` or `coroutine.yield`). -If `make_easy_clear_function` is truthy, a member function taking no arguments will be created in the `SS13` table to easily unregister the signal handler. - -This function returns the `/datum/callback` created to call `func` from DM. +This function returns whether the signal registration was successful. The following example defines a function which will register a signal that makes `target` make a honking sound any time it moves: ```lua function honk(target) SS13.register_signal(target, "movable_moved", function(source) - dm.global_proc("playsound", target, "sound/items/bikehorn.ogg", 100, true) + dm.global_procs.playsound(target, "sound/items/bikehorn.ogg", 100, true) end) end ``` -### SS13.unregister_signal(datum, signal, callback) -Unregister a signal previously registered using `SS13.register_signal`. `callback` should be a `datum/callback` previously returned by `SS13.register_signal`. If `callback` is not specified, **ALL** signal handlers registered on `datum` for `signal` will be unregistered. +NOTE: if `func` is an anonymous function declared inside the call to `SS13.register_signal`, it cannot be referenced in order to unregister that signal with `SS13.unregister_signal` -### SS13.set_timeout(time, func) +## SS13.unregister_signal(datum, signal, func) +Unregister a signal previously registered using `SS13.register_signal`. `func` must be a function for which a handler for the specified signal has already been registered. If `func` is `nil`, all handlers for that signal will be unregistered. + +## SS13.set_timeout(time, func) Creates a timer which will execute `func` after `time` **seconds**. `func` should not expect to be passed any arguments, as it will not be passed any. Unlike `SS13.wait`, `SS13.set_timeout` does not yield or sleep the current task, making it suitable for use in signal handlers for `SS13.register_signal` The following example will output a message to chat after 5 seconds: ```lua SS13.set_timeout(5, function() - dm.global_proc("to_chat", dm.world, "Hello World!") + dm.global_procs.to_chat(dm.world, "Hello World!") end) ``` -### SS13.start_loop(time, amount, func) +## SS13.start_loop(time, amount, func) Creates a timer which will execute `func` after `time` **seconds**. `func` should not expect to be passed any arguments, as it will not be passed any. Works exactly the same as `SS13.set_timeout` except it will loop the timer `amount` times. If `amount` is set to -1, it will loop indefinitely. Returns a number value, which represents the timer's id. Can be stopped with `SS13.end_loop` Returns a number, the timer id, which is needed to stop indefinite timers. The following example will output a message to chat every 5 seconds, repeating 10 times: ```lua SS13.start_loop(5, 10, function() - dm.global_proc("to_chat", dm.world, "Hello World!") + dm.global_procs.to_chat(dm.world, "Hello World!") end) ``` The following example will output a message to chat every 5 seconds, until `SS13.end_loop(timerid)` is called: ```lua local timerid = SS13.start_loop(5, -1, function() - dm.global_proc("to_chat", dm.world, "Hello World!") + dm.global_proc.to_chat(dm.world, "Hello World!") end) ``` -### SS13.end_loop(id) +## SS13.end_loop(id) Prematurely ends a loop that hasn't ended yet, created with `SS13.start_loop`. Silently fails if there is no started loop with the specified id. The following example will output a message to chat every 5 seconds and delete it after it has repeated 20 times: ```lua @@ -254,7 +322,7 @@ local repeated_amount = 0 -- timerid won't be in the looping function's scope if declared before the function is declared. local timerid timerid = SS13.start_loop(5, -1, function() - dm.global_proc("to_chat", dm.world, "Hello World!") + dm.global_procs.to_chat(dm.world, "Hello World!") repeated_amount += 1 if repeated_amount >= 20 then SS13.end_loop(timerid) @@ -262,35 +330,6 @@ timerid = SS13.start_loop(5, -1, function() end) ``` -### SS13.stop_all_loops() +## SS13.stop_all_loops() Stops all current running loops that haven't ended yet. Useful in case you accidentally left a indefinite loop running without storing the id anywhere. - -### SS13.stop_tracking(datum) -Stops tracking a datum that was created via `SS13.new` so that it can be garbage collected and deleted without having to qdel. Should be used for things like callbacks and other such datums where the reference to the variable is no longer needed. - ---- - -## Internal globals - -Auxlua defines several registry values for each state. Note that there is no way to access registry values from lua code. - -### sleep_flag - -This flag is used to designate that a yielding task should be put in the sleep queue instead of the yield table. Once auxlua determines that a task should sleep, `sleep_flag` is cleared. - -### sleep_queue - -A sequence of threads, each corresponding to a task that has slept. When calling `/proc/__lua_awaken`, auxlua will dequeue the first thread from the sequence and resume it. - -### yield_table - -A table of threads, each corresponding to a coroutine that has yielded. When calling `/proc/__lua_resume`, auxlua will look for a thread at the index specified in the `index` argument, and resume it with the arguments specified in the `arguments` argument. - -### task_info - -A table of key-value-pairs, where the keys are threads, and the values are tables consisting of the following fields: - -- name: A string containing the name of the task -- status: A string, either "sleep" or "yield" -- index: The task's index in `sleep_queue` or `yield_table` diff --git a/code/modules/admin/verbs/lua/_wrappers.dm b/code/modules/admin/verbs/lua/_wrappers.dm index 8e05453d29d5d..d516f064f847f 100644 --- a/code/modules/admin/verbs/lua/_wrappers.dm +++ b/code/modules/admin/verbs/lua/_wrappers.dm @@ -1,3 +1,12 @@ +/proc/wrap_lua_get_var(datum/thing, var_name) + SHOULD_NOT_SLEEP(TRUE) + if(thing == world) + return world.vars[var_name] + if(ref(thing) == "\[0xe000001\]") //This weird fucking thing is like global.vars, but it's not a list and vars is not a valid index for it and I really don't fucking know. + return global.vars[var_name] + if(thing.can_vv_get(var_name)) + return thing.vars[var_name] + /proc/wrap_lua_set_var(datum/thing_to_set, var_name, value) SHOULD_NOT_SLEEP(TRUE) thing_to_set.vv_edit_var(var_name, value) @@ -11,8 +20,6 @@ ret = WrapAdminProcCall(thing_to_call, proc_name, arguments) else ret = HandleUserlessProcCall("lua", thing_to_call, proc_name, arguments) - if(isdatum(ret)) - SSlua.gc_guard += ret return ret /proc/wrap_lua_global_proc_call(proc_name, list/arguments) @@ -24,8 +31,6 @@ ret = WrapAdminProcCall(GLOBAL_PROC, proc_name, arguments) else ret = HandleUserlessProcCall("lua", GLOBAL_PROC, proc_name, arguments) - if(isdatum(ret)) - SSlua.gc_guard += ret return ret /proc/wrap_lua_print(state_id, list/arguments) @@ -38,6 +43,6 @@ if(!target_state) return var/print_message = jointext(arguments, "\t") - var/result = list("status" = "print", "param" = print_message) + var/result = list("status" = "print", "message" = print_message) INVOKE_ASYNC(target_state, TYPE_PROC_REF(/datum/lua_state, log_result), result, TRUE) log_lua("[target_state]: [print_message]") diff --git a/code/modules/admin/verbs/lua/helpers.dm b/code/modules/admin/verbs/lua/helpers.dm index 66b7c835e9ab1..c3072f15e74cd 100644 --- a/code/modules/admin/verbs/lua/helpers.dm +++ b/code/modules/admin/verbs/lua/helpers.dm @@ -3,27 +3,27 @@ #define PROMISE_REJECTED 2 /** - * Auxtools hooks act as "set waitfor = 0" procs. This means that whenever - * a proc directly called from auxtools sleeps, the hook returns with whatever + * Byondapi hooks act as "set waitfor = 0" procs. This means that whenever + * a proc directly called from an external library sleeps, the hook returns with whatever * the called proc had as its return value at the moment it slept. This may not * be desired behavior, so this datum exists to wrap these procs. * * Some procs that don't sleep could take longer than the execution limit would * allow for. We can wrap these in a promise as well. */ -/datum/auxtools_promise +/datum/promise var/datum/callback/callback var/return_value var/runtime_message var/status = PROMISE_PENDING -/datum/auxtools_promise/New(...) +/datum/promise/New(...) + if(!usr) + usr = GLOB.lua_usr callback = CALLBACK(arglist(args)) - perform() + INVOKE_ASYNC(src, PROC_REF(perform)) -/datum/auxtools_promise/proc/perform() - set waitfor = 0 - sleep() //In case we have to call a super-expensive non-sleeping proc (like getFlatIcon) +/datum/promise/proc/perform() try return_value = callback.Invoke() status = PROMISE_RESOLVED diff --git a/code/modules/admin/verbs/lua/lua_editor.dm b/code/modules/admin/verbs/lua/lua_editor.dm index d4a4bc2ee50b7..93e8e50c1a6a4 100644 --- a/code/modules/admin/verbs/lua/lua_editor.dm +++ b/code/modules/admin/verbs/lua/lua_editor.dm @@ -16,6 +16,12 @@ /// If set, we will force the editor to look at this chunk var/force_view_chunk + /// If set, we will force the script input to be this + var/force_input + + /// If set, the latest code execution performed from the editor raised an error, and this is the message from that error + var/last_error + /datum/lua_editor/New(state, _quick_log_index) . = ..() if(state) @@ -37,37 +43,52 @@ /datum/lua_editor/ui_state(mob/user) return GLOB.debug_state -/datum/lua_editor/ui_static_data(mob/user) - var/list/data = list() - data["documentation"] = file2text('code/modules/admin/verbs/lua/README.md') - data["auxtools_enabled"] = CONFIG_GET(flag/auxtools_enabled) - data["ss_lua_init"] = SSlua.initialized - return data - /datum/lua_editor/ui_data(mob/user) var/list/data = list() - if(!CONFIG_GET(flag/auxtools_enabled) || !SSlua.initialized) + data["ss_lua_init"] = SSlua.initialized + if(!SSlua.initialized) return data data["noStateYet"] = !current_state data["showGlobalTable"] = show_global_table if(current_state) if(current_state.log) - data["stateLog"] = kvpify_list(refify_list(current_state.log.Copy((page*50)+1, min((page+1)*50+1, current_state.log.len+1)))) + var/list/logs = current_state.log.Copy((page*50)+1, min((page+1)*50+1, current_state.log.len+1)) + for(var/i in 1 to logs.len) + var/list/log = logs[i] + log = log.Copy() + if(log["return_values"]) + log["return_values"] = kvpify_list(prepare_lua_editor_list(deep_copy_without_cycles(log["return_values"]))) + logs[i] = log + data["stateLog"] = logs data["page"] = page data["pageCount"] = CEILING(current_state.log.len/50, 1) data["tasks"] = current_state.get_tasks() if(show_global_table) current_state.get_globals() - data["globals"] = kvpify_list(refify_list(current_state.globals)) - data["states"] = SSlua.states - data["callArguments"] = kvpify_list(refify_list(arguments)) + var/list/values = current_state.globals["values"] + values = deep_copy_without_cycles(values) + values = prepare_lua_editor_list(values) + values = kvpify_list(values) + var/list/variants = current_state.globals["variants"] + data["globals"] = list("values" = values, "variants" = variants) + if(last_error) + data["lastError"] = last_error + last_error = null + data["supressRuntimes"] = current_state.supress_runtimes + data["states"] = list() + for(var/datum/lua_state/state as anything in SSlua.states) + data["states"] += state.display_name + data["callArguments"] = kvpify_list(prepare_lua_editor_list(deep_copy_without_cycles(arguments))) if(force_modal) data["forceModal"] = force_modal force_modal = null if(force_view_chunk) data["forceViewChunk"] = force_view_chunk force_view_chunk = null + if(force_input) + data["force_input"] = force_input + force_input = null return data /datum/lua_editor/proc/traverse_list(list/path, list/root, traversal_depth_offset = 0) @@ -99,14 +120,24 @@ else return root -/datum/lua_editor/ui_act(action, list/params) +/datum/lua_editor/proc/run_code(code) + var/ckey = usr.ckey + current_state.ckey_last_runner = ckey + var/result = current_state.load_script(code) + var/index_with_result = current_state.log_result(result) + if(result["status"] == "error") + last_error = result["message"] + message_admins("[key_name(usr)] executed [length(code)] bytes of lua code. [ADMIN_LUAVIEW_CHUNK(current_state, index_with_result)]") + +/datum/lua_editor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - if(!check_rights_for(usr.client, R_DEBUG)) + var/mob/user = ui.user + if(!check_rights_for(user.client, R_DEBUG)) return if(action == "runCodeFile") - params["code"] = file2text(input(usr, "Input File") as null|file) + params["code"] = file2text(input(user, "Input File") as null|file) if(isnull(params["code"])) return action = "runCode" @@ -116,6 +147,8 @@ if(!length(state_name)) return TRUE var/datum/lua_state/new_state = new(state_name) + if(QDELETED(new_state)) + return SSlua.states += new_state LAZYREMOVEASSOC(SSlua.editors, text_ref(current_state), src) current_state = new_state @@ -130,11 +163,14 @@ page = 0 return TRUE if("runCode") - var/code = params["code"] - current_state.ckey_last_runner = usr.ckey - var/result = current_state.load_script(code) - var/index_with_result = current_state.log_result(result) - message_admins("[key_name(usr)] executed [length(code)] bytes of lua code. [ADMIN_LUAVIEW_CHUNK(current_state, index_with_result)]") + run_code(params["code"]) + return TRUE + if("runFile") + var/code_file = input(user, "Select a script to run.", "Lua") as file|null + if(!code_file) + return TRUE + var/code = file2text(code_file) + run_code(code) return TRUE if("moveArgUp") var/list/path = params["path"] @@ -158,9 +194,9 @@ var/list/path = params["path"] var/list/target_list = traverse_list(path, arguments) if(target_list != arguments) - usr?.client?.mod_list_add(target_list, null, "a lua editor", "arguments") + user?.client?.mod_list_add(target_list, null, "a lua editor", "arguments") else - var/list/vv_val = usr?.client?.vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) + var/list/vv_val = user?.client?.vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT)) var/class = vv_val["class"] if(!class) return @@ -168,53 +204,58 @@ return TRUE if("callFunction") var/list/recursive_indices = params["indices"] - var/list/current_list = kvpify_list(current_state.globals) + var/list/current_list = kvpify_list(current_state.globals["values"]) + var/list/current_variants = current_state.globals["variants"] var/function = list() while(LAZYLEN(recursive_indices)) var/index = popleft(recursive_indices) var/list/element = current_list[index] var/key = element["key"] var/value = element["value"] - if(!(istext(key) || isnum(key))) - to_chat(usr, span_warning("invalid key \[[key]] for function call (expected text or num)")) + var/list/variant_pair = current_variants[index] + var/key_variant = variant_pair["key"] + if(key_variant == "function" || key_variant == "thread" || key_variant == "userdata" || key_variant == "error_as_value") + to_chat(user, span_warning("invalid table key \[[key]] for function call (expected text, num, path, list, or ref, got [key_variant])")) return function += key if(islist(value)) current_list = value + current_variants = variant_pair["value"] else - var/regex/function_regex = regex("^function: 0x\[0-9a-fA-F]+$") - if(function_regex.Find(value)) - break - to_chat(usr, span_warning("invalid path element \[[value]] for function call (expected list or text matching [function_regex])")) - return + if(variant_pair["value"] != "function") + to_chat(user, span_warning("invalid value \[[value]] for function call (expected list or function)")) + return var/result = current_state.call_function(arglist(list(function) + arguments)) current_state.log_result(result) + if(result["status"] == "error") + last_error = result["message"] arguments.Cut() - return TRUE + return if("resumeTask") var/task_index = params["index"] SSlua.queue_resume(current_state, task_index, arguments) arguments.Cut() return TRUE if("killTask") - var/task_info = params["info"] - SSlua.kill_task(current_state, task_info) + var/is_sleep = params["is_sleep"] + var/index = params["index"] + SSlua.kill_task(current_state, is_sleep, index) return TRUE if("vvReturnValue") var/log_entry_index = params["entryIndex"] var/list/log_entry = current_state.log[log_entry_index] - var/thing_to_debug = traverse_list(params["tableIndices"], log_entry["param"]) + var/thing_to_debug = traverse_list(params["indices"], log_entry["return_values"]) if(isweakref(thing_to_debug)) var/datum/weakref/ref = thing_to_debug thing_to_debug = ref.resolve() - INVOKE_ASYNC(usr.client, TYPE_PROC_REF(/client, debug_variables), thing_to_debug) + INVOKE_ASYNC(user.client, TYPE_PROC_REF(/client, debug_variables), thing_to_debug) return FALSE if("vvGlobal") - var/thing_to_debug = traverse_list(params["indices"], current_state.globals) + var/thing_to_debug = traverse_list(params["indices"], current_state.globals["values"]) if(isweakref(thing_to_debug)) var/datum/weakref/ref = thing_to_debug thing_to_debug = ref.resolve() - INVOKE_ASYNC(usr.client, TYPE_PROC_REF(/client, debug_variables), thing_to_debug) + INVOKE_ASYNC(user.client, TYPE_PROC_REF(/client, debug_variables), thing_to_debug) return FALSE if("clearArgs") arguments.Cut() @@ -222,12 +263,18 @@ if("toggleShowGlobalTable") show_global_table = !show_global_table return TRUE + if("toggleSupressRuntimes") + current_state.supress_runtimes = !current_state.supress_runtimes + return TRUE if("nextPage") page = min(page+1, CEILING(current_state.log.len/50, 1)-1) return TRUE if("previousPage") page = max(page-1, 0) return TRUE + if("nukeLog") + current_state.log.Cut() + return TRUE /datum/lua_editor/ui_close(mob/user) . = ..() diff --git a/code/modules/admin/verbs/lua/lua_state.dm b/code/modules/admin/verbs/lua/lua_state.dm index bf2bcbd5a9003..30bc21c83b2be 100644 --- a/code/modules/admin/verbs/lua/lua_state.dm +++ b/code/modules/admin/verbs/lua/lua_state.dm @@ -1,15 +1,15 @@ #define MAX_LOG_REPEAT_LOOKBACK 5 -GLOBAL_VAR_INIT(IsLuaCall, FALSE) -GLOBAL_PROTECT(IsLuaCall) - GLOBAL_DATUM(lua_usr, /mob) GLOBAL_PROTECT(lua_usr) +GLOBAL_LIST_EMPTY_TYPED(lua_state_stack, /datum/weakref) +GLOBAL_PROTECT(lua_state_stack) + /datum/lua_state - var/name + var/display_name - /// The internal ID of the lua state stored in auxlua's global map + /// The internal ID of the lua state stored in dreamluau's state list var/internal_id /// A log of every return, yield, and error for each chunk execution and function call @@ -18,15 +18,15 @@ GLOBAL_PROTECT(lua_usr) /// A list of all the variables in the state's environment var/list/globals = list() - /// A list in which to store datums and lists instantiated in lua, ensuring that they don't get garbage collected - var/list/references = list() - /// Ckey of the last user who ran a script on this lua state. var/ckey_last_runner = "" /// Whether the timer.lua script has been included into this lua context state. var/timer_enabled = FALSE + /// Whether to supress logging BYOND runtimes for this state. + var/supress_runtimes = FALSE + /// Callbacks that need to be ran on next tick var/list/functions_to_execute = list() @@ -39,55 +39,70 @@ GLOBAL_PROTECT(lua_usr) if(SSlua.initialized != TRUE) qdel(src) return - name = _name - internal_id = __lua_new_state() + display_name = _name + internal_id = DREAMLUAU_NEW_STATE() + if(isnull(internal_id)) + stack_trace("dreamluau is not loaded") + qdel(src) + else if(!isnum(internal_id)) + stack_trace(internal_id) + qdel(src) /datum/lua_state/proc/check_if_slept(result) - if(result["status"] == "sleeping") + if(result["status"] == "sleep") SSlua.sleeps += src /datum/lua_state/proc/log_result(result, verbose = TRUE) if(!islist(result)) return - if(!verbose && result["status"] != "errored" && result["status"] != "bad return" \ - && !(result["name"] == "input" && (result["status"] == "finished" || length(result["param"])))) + var/status = result["status"] + if(!verbose && status != "error" && status != "panic" && status != "runtime" && !(result["name"] == "input" && (status == "finished" || length(result["return_values"])))) + return + if(status == "runtime" && supress_runtimes) return var/append_to_log = TRUE var/index_of_log if(log.len) for(var/index in log.len to max(log.len - MAX_LOG_REPEAT_LOOKBACK, 1) step -1) var/list/entry = log[index] - if(entry["status"] == result["status"] \ - && entry["chunk"] == result["chunk"] \ - && entry["name"] == result["name"] \ - && ((entry["param"] == result["param"]) || deep_compare_list(entry["param"], result["param"]))) - if(!entry["repeats"]) - entry["repeats"] = 0 - index_of_log = index - entry["repeats"]++ - append_to_log = FALSE - break + if(!compare_lua_logs(entry, result)) + continue + if(!entry["repeats"]) + entry["repeats"] = 0 + index_of_log = index + entry["repeats"]++ + append_to_log = FALSE + break if(append_to_log) - if(islist(result["param"])) - result["param"] = weakrefify_list(encode_text_and_nulls(result["param"])) + if(islist(result["return_values"])) + add_lua_return_value_variants(result["return_values"], result["variants"]) + result["return_values"] = weakrefify_list(result["return_values"]) log += list(result) index_of_log = log.len INVOKE_ASYNC(src, TYPE_PROC_REF(/datum/lua_state, update_editors)) return index_of_log +/datum/lua_state/proc/parse_error(message, name) + if(copytext(message, 1, 7) == "PANIC:") + return list("status" = "panic", "message" = copytext(message, 7), "name" = name) + else + return list("status" = "error", "message" = message, "name" = name) + /datum/lua_state/proc/load_script(script) - GLOB.IsLuaCall = TRUE var/tmp_usr = GLOB.lua_usr GLOB.lua_usr = usr - var/result = __lua_load(internal_id, script) - GLOB.IsLuaCall = FALSE + DREAMLUAU_SET_USR + GLOB.lua_state_stack += WEAKREF(src) + var/result = DREAMLUAU_LOAD(internal_id, script, "input") + SSlua.needs_gc_cycle |= src + pop(GLOB.lua_state_stack) GLOB.lua_usr = tmp_usr // Internal errors unrelated to the code being executed are returned as text rather than lists if(isnull(result)) - result = list("status" = "errored", "param" = "__lua_load returned null (it may have runtimed - check the runtime logs)", "name" = "input") + result = list("status" = "error", "message" = "load returned null (it may have runtimed - check the runtime logs)", "name" = "input") if(istext(result)) - result = list("status" = "errored", "param" = result, "name" = "input") + result = parse_error(result, "input") result["chunk"] = script check_if_slept(result) @@ -109,67 +124,106 @@ GLOBAL_PROTECT(lua_usr) if(islist(function)) var/list/new_function_path = list() for(var/path_element in function) - new_function_path += path_element + if(isweakref(path_element)) + var/datum/weakref/weak_ref = path_element + var/resolved = weak_ref.hard_resolve() + if(!resolved) + return list("status" = "error", "message" = "Weakref in function path ([weak_ref] [text_ref(weak_ref)]) resolved to null.", "name" = jointext(function, ".")) + new_function_path += resolved + else + new_function_path += path_element function = new_function_path + else + function = list(function) var/tmp_usr = GLOB.lua_usr GLOB.lua_usr = usr - GLOB.IsLuaCall = TRUE - var/result = __lua_call(internal_id, function, call_args) - GLOB.IsLuaCall = FALSE + DREAMLUAU_SET_USR + GLOB.lua_state_stack += WEAKREF(src) + var/result = DREAMLUAU_CALL_FUNCTION(internal_id, function, call_args) + SSlua.needs_gc_cycle |= src + pop(GLOB.lua_state_stack) GLOB.lua_usr = tmp_usr if(isnull(result)) - result = list("status" = "errored", "param" = "__lua_call returned null (it may have runtimed - check the runtime logs)", "name" = islist(function) ? jointext(function, ".") : function) + result = list("status" = "error", "message" = "call_function returned null (it may have runtimed - check the runtime logs)", "name" = jointext(function, ".")) if(istext(result)) - result = list("status" = "errored", "param" = result, "name" = islist(function) ? jointext(function, ".") : function) + result = parse_error(result, jointext(function, ".")) check_if_slept(result) return result /datum/lua_state/proc/call_function_return_first(function, ...) + SHOULD_NOT_SLEEP(TRUE) // This function is meant to be used for signal handlers. var/list/result = call_function(arglist(args)) - log_result(result, verbose = FALSE) + INVOKE_ASYNC(src, PROC_REF(log_result), deep_copy_list(result), /*verbose = */FALSE) if(length(result)) - if(islist(result["param"]) && length(result["param"])) - return result["param"][1] + if(islist(result["return_values"]) && length(result["return_values"])) + var/return_value = result["return_values"][1] + var/variant = (islist(result["variants"]) && length(result["variants"])) && result["variants"][1] + if(islist(return_value) && islist(variant)) + remove_non_dm_variants(return_value, variant) + return return_value /datum/lua_state/proc/awaken() - GLOB.IsLuaCall = TRUE - var/result = __lua_awaken(internal_id) - GLOB.IsLuaCall = FALSE + DREAMLUAU_SET_USR + GLOB.lua_state_stack += WEAKREF(src) + var/result = DREAMLUAU_AWAKEN(internal_id) + SSlua.needs_gc_cycle |= src + pop(GLOB.lua_state_stack) if(isnull(result)) - result = list("status" = "errored", "param" = "__lua_awaken returned null (it may have runtimed - check the runtime logs)", "name" = "An attempted awaken") + result = list("status" = "error", "message" = "awaken returned null (it may have runtimed - check the runtime logs)", "name" = "An attempted awaken") if(istext(result)) - result = list("status" = "errored", "param" = result, "name" = "An attempted awaken") + result = parse_error(result, "An attempted awaken") check_if_slept(result) return result /// Prefer calling SSlua.queue_resume over directly calling this /datum/lua_state/proc/resume(index, ...) var/call_args = length(args) > 1 ? args.Copy(2) : list() - var/msg = "[key_name(usr)] resumed a lua coroutine with arguments: [english_list(call_args)]" - log_lua(msg) - GLOB.IsLuaCall = TRUE - var/result = __lua_resume(internal_id, index, call_args) - GLOB.IsLuaCall = FALSE + DREAMLUAU_SET_USR + GLOB.lua_state_stack += WEAKREF(src) + var/result = DREAMLUAU_RESUME(internal_id, index, call_args) + SSlua.needs_gc_cycle |= src + pop(GLOB.lua_state_stack) if(isnull(result)) - result = list("status" = "errored", "param" = "__lua_resume returned null (it may have runtimed - check the runtime logs)", "name" = "An attempted resume") + result = list("status" = "error", "param" = "resume returned null (it may have runtimed - check the runtime logs)", "name" = "An attempted resume") if(istext(result)) - result = list("status" = "errored", "param" = result, "name" = "An attempted resume") + result = parse_error(result, "An attempted resumt") check_if_slept(result) return result /datum/lua_state/proc/get_globals() - globals = weakrefify_list(encode_text_and_nulls(__lua_get_globals(internal_id))) + var/result = DREAMLUAU_GET_GLOBALS(internal_id) + if(isnull(result)) + CRASH("get_globals returned null") + if(istext(result)) + CRASH(result) + var/list/new_globals = result + var/list/values = new_globals["values"] + var/list/variants = new_globals["variants"] + add_lua_editor_variants(values, variants) + globals = list("values" = weakrefify_list(values), "variants" = variants) /datum/lua_state/proc/get_tasks() - return __lua_get_tasks(internal_id) + var/result = DREAMLUAU_LIST_THREADS(internal_id) + if(isnull(result)) + CRASH("list_threads returned null") + if(istext(result)) + CRASH(result) + return result -/datum/lua_state/proc/kill_task(task_info) - __lua_kill_task(internal_id, task_info) +/datum/lua_state/proc/kill_task(is_sleep, index) + var/result = is_sleep ? DREAMLUAU_KILL_SLEEPING_THREAD(internal_id, index) : DREAMLUAU_KILL_YIELDED_THREAD(internal_id, index) + SSlua.needs_gc_cycle |= src + return result + +/datum/lua_state/proc/collect_garbage() + var/result = DREAMLUAU_COLLECT_GARBAGE(internal_id) + if(!isnull(result)) + CRASH(result) /datum/lua_state/proc/update_editors() var/list/editor_list = LAZYACCESS(SSlua.editors, text_ref(src)) @@ -177,18 +231,4 @@ GLOBAL_PROTECT(lua_usr) for(var/datum/lua_editor/editor as anything in editor_list) SStgui.update_uis(editor) -/// Called by lua scripts when they add an atom to var/list/references so that it gets cleared up on delete. -/datum/lua_state/proc/clear_on_delete(datum/to_clear) - RegisterSignal(to_clear, COMSIG_QDELETING, PROC_REF(on_delete)) - -/// Called by lua scripts when an atom they've added should soft delete and this state should stop tracking it. -/// Needs to unregister all signals. -/datum/lua_state/proc/let_soft_delete(datum/to_clear) - UnregisterSignal(to_clear, COMSIG_QDELETING, PROC_REF(on_delete)) - references -= to_clear - -/datum/lua_state/proc/on_delete(datum/to_clear) - SIGNAL_HANDLER - references -= to_clear - #undef MAX_LOG_REPEAT_LOOKBACK diff --git a/code/modules/admin/verbs/machine_upgrade.dm b/code/modules/admin/verbs/machine_upgrade.dm index 258de6bcf4dfd..7495b383d0e00 100644 --- a/code/modules/admin/verbs/machine_upgrade.dm +++ b/code/modules/admin/verbs/machine_upgrade.dm @@ -1,5 +1,5 @@ -ADMIN_VERB(machine_upgrade, R_DEBUG, "Tweak Component Ratings", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, obj/machinery/machine in world) - var/new_rating = input(user, "Enter new rating:","Num") as num|null +ADMIN_VERB_AND_CONTEXT_MENU(machine_upgrade, R_DEBUG, "Tweak Component Ratings", ADMIN_VERB_NO_DESCRIPTION, ADMIN_CATEGORY_HIDDEN, obj/machinery/machine in world) + var/new_rating = tgui_input_number(user, "", "Enter new rating:") if(new_rating && machine.component_parts) for(var/obj/item/stock_parts/P in machine.component_parts) P.rating = new_rating diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 5c1647a5edbf9..c069bda812b03 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -342,7 +342,7 @@ ADMIN_VERB(check_for_obstructed_atmospherics, R_DEBUG, "Check For Obstructed Atm var/list/results = list() - results += "

Anything that is considered to aesthetically obstruct an atmospherics machine (vent, scrubber, port) is listed below. Please re-arrange to accomodate for this.


" + results += "

Anything that is considered to aesthetically obstruct an atmospherics machine (vent, scrubber, port) is listed below. Please re-arrange to accommodate for this.


" // Ignore out stuff we see in normal and standard mapping that we don't care about (false alarms). Typically stuff that goes directionally off turfs or other undertile objects that we don't want to care about. var/list/ignore_list = list( diff --git a/code/modules/admin/verbs/maprotation.dm b/code/modules/admin/verbs/maprotation.dm index 09d6d93bee632..38d7535758fc7 100644 --- a/code/modules/admin/verbs/maprotation.dm +++ b/code/modules/admin/verbs/maprotation.dm @@ -1,12 +1,3 @@ - -ADMIN_VERB(force_random_rotate, R_SERVER, "Trigger 'Random' Map Rotation", "Force a map vote.", ADMIN_CATEGORY_SERVER) - var/rotate = tgui_alert(user,"Force a random map rotation to trigger?", "Rotate map?", list("Yes", "Cancel")) - if (rotate != "Yes") - return - message_admins("[key_name_admin(user)] is forcing a random map rotation.") - log_admin("[key_name(user)] is forcing a random map rotation.") - SSmapping.maprotate() - ADMIN_VERB(admin_change_map, R_SERVER, "Change Map", "Set the next map.", ADMIN_CATEGORY_SERVER) var/list/maprotatechoices = list() for (var/map in config.maplist) @@ -119,14 +110,14 @@ ADMIN_VERB(admin_change_map, R_SERVER, "Change Map", "Set the next map.", ADMIN_ fdel(PATH_TO_NEXT_MAP_JSON) text2file(json_encode(json_value), PATH_TO_NEXT_MAP_JSON) - if(SSmapping.changemap(virtual_map)) + if(SSmap_vote.set_next_map(virtual_map)) message_admins("[key_name_admin(user)] has changed the map to [virtual_map.map_name]") - SSmapping.map_force_chosen = TRUE + SSmap_vote.admin_override = TRUE fdel("data/custom_map_json/[config_file]") else var/datum/map_config/virtual_map = maprotatechoices[chosenmap] message_admins("[key_name_admin(user)] is changing the map to [virtual_map.map_name]") log_admin("[key_name(user)] is changing the map to [virtual_map.map_name]") - if (SSmapping.changemap(virtual_map)) + if (SSmap_vote.set_next_map(virtual_map)) message_admins("[key_name_admin(user)] has changed the map to [virtual_map.map_name]") - SSmapping.map_force_chosen = TRUE + SSmap_vote.admin_override = TRUE diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index 107d74d9c3975..f3acd741faacd 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -41,7 +41,7 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w #define THUNDERDOME_TEMPLATE_FILE "admin_thunderdome.dmm" #define HIGHLANDER_DELAY_TEXT "40 seconds (crush the hope of a normal shift)" -/datum/secrets_menu/ui_act(action, params) +/datum/secrets_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -84,7 +84,7 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w if("infinite_sec") if(!is_debugger) return - var/datum/job/sec_job = SSjob.GetJobType(/datum/job/security_officer) + var/datum/job/sec_job = SSjob.get_job_type(/datum/job/security_officer) sec_job.total_positions = -1 sec_job.spawn_positions = -1 message_admins("[key_name_admin(holder)] has removed the cap on security officers.") @@ -648,12 +648,12 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w /proc/portalAnnounce(announcement, playlightning) set waitfor = FALSE if (playlightning) - sound_to_playing_players('sound/magic/lightning_chargeup.ogg') + sound_to_playing_players('sound/effects/magic/lightning_chargeup.ogg') sleep(8 SECONDS) priority_announce(replacetext(announcement, "%STATION%", station_name())) if (playlightning) sleep(2 SECONDS) - sound_to_playing_players('sound/magic/lightningbolt.ogg') + sound_to_playing_players('sound/effects/magic/lightningbolt.ogg') /// Spawns a portal storm that spawns in sentient/non sentient mobs /// portal_appearance is a list in the form (turf's plane offset + 1) -> appearance to use @@ -671,7 +671,7 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w H.equipOutfit(humanoutfit) var/turf/T = get_step(loc, SOUTHWEST) T.flick_overlay_static(portal_appearance[GET_TURF_PLANE_OFFSET(T) + 1], 15) - playsound(T, 'sound/magic/lightningbolt.ogg', rand(80, 100), TRUE) + playsound(T, 'sound/effects/magic/lightningbolt.ogg', rand(80, 100), TRUE) /datum/everyone_is_an_antag_controller var/chosen_antag = "" diff --git a/code/modules/admin/verbs/server.dm b/code/modules/admin/verbs/server.dm index f0817f06a3680..27a0a1c3f5ba0 100644 --- a/code/modules/admin/verbs/server.dm +++ b/code/modules/admin/verbs/server.dm @@ -96,9 +96,9 @@ ADMIN_VERB(start_now, R_SERVER, "Start Now", "Start the round RIGHT NOW.", ADMIN if(SSticker.start_immediately) SSticker.start_immediately = FALSE - SSticker.SetTimeLeft(1800) - to_chat(world, span_infoplain(span_bold("The game will start in 180 seconds."))) - SEND_SOUND(world, sound('sound/ai/default/attention.ogg')) + SSticker.SetTimeLeft(3 MINUTES) + to_chat(world, span_big(span_notice("The game will start in 3 minutes."))) + SEND_SOUND(world, sound('sound/announcer/default/attention.ogg')) message_admins(span_adminnotice("[key_name_admin(user)] has cancelled immediate game start. Game will start in 3 minutes.")) log_admin("[key_name(user)] has cancelled immediate game start.") return @@ -151,8 +151,8 @@ ADMIN_VERB(toggle_ai, R_SERVER, "Toggle AI", "Toggle the ability to choose AI jo if (alai) to_chat(world, span_bold("The AI job is no longer chooseable."), confidential = TRUE) else - to_chat(world, span_bold("The AI job is chooseable now."), confidential = TRUE) - log_admin("[key_name(usr)] toggled AI allowed.") + to_chat(world, "The AI job is chooseable now.", confidential = TRUE) + log_admin("[key_name(user)] toggled AI allowed.") world.update_status() SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle AI", "[!alai ? "Disabled" : "Enabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! @@ -203,11 +203,11 @@ ADMIN_VERB(delay, R_SERVER, "Delay Pre-Game", "Delay the game start.", ADMIN_CAT SSticker.SetTimeLeft(newtime) SSticker.start_immediately = FALSE if(newtime < 0) - to_chat(world, span_infoplain(span_bold("The game start has been delayed.")), confidential = TRUE) - log_admin("[key_name(usr)] delayed the round start.") + to_chat(world, span_infoplain("The game start has been delayed."), confidential = TRUE) + log_admin("[key_name(user)] delayed the round start.") else to_chat(world, span_infoplain(span_bold("The game will start in [DisplayTimeText(newtime)].")), confidential = TRUE) - SEND_SOUND(world, sound('sound/ai/default/attention.ogg')) + SEND_SOUND(world, sound('sound/announcer/default/attention.ogg')) log_admin("[key_name(user)] set the pre-game delay to [DisplayTimeText(newtime)].") BLACKBOX_LOG_ADMIN_VERB("Delay Game Start") @@ -238,7 +238,7 @@ ADMIN_VERB(toggle_guests, R_SERVER, "Toggle Guests", "Toggle the ability for gue if (new_guest_ban) to_chat(world, span_bold("Guests may no longer enter the game."), confidential = TRUE) else - to_chat(world, span_bold("Guests may now enter the game."), confidential = TRUE) - log_admin("[key_name(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") - message_admins(span_adminnotice("[key_name_admin(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.")) + to_chat(world, "Guests may now enter the game.", confidential = TRUE) + log_admin("[key_name(user)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") + message_admins(span_adminnotice("[key_name_admin(user)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.")) SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Guests", "[!new_guest_ban ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/shuttlepanel.dm b/code/modules/admin/verbs/shuttlepanel.dm index 0a33acb06925c..9090a5cd2f039 100644 --- a/code/modules/admin/verbs/shuttlepanel.dm +++ b/code/modules/admin/verbs/shuttlepanel.dm @@ -3,7 +3,7 @@ ADMIN_VERB(shuttle_panel, R_ADMIN, "Shuttle Manipulator", "Opens the shuttle man /obj/docking_port/mobile/proc/admin_fly_shuttle(mob/user) var/list/options = list() - options += "-----COMPATABLE DOCKS:" //SKYRAT EDIT ADDITION + options += "-----COMPATIBLE DOCKS:" //SKYRAT EDIT ADDITION for(var/port in SSshuttle.stationary_docking_ports) if (istype(port, /obj/docking_port/stationary/transit)) continue // please don't do this @@ -11,7 +11,7 @@ ADMIN_VERB(shuttle_panel, R_ADMIN, "Shuttle Manipulator", "Opens the shuttle man if (canDock(S) == SHUTTLE_CAN_DOCK) options[S.name || S.shuttle_id] = S //SKYRAT EDIT ADDITION START - options += "-----INCOMPATABLE DOCKS:" //I WILL CRASH THIS SHIP WITH NO SURVIVORS! + options += "-----INCOMPATIBLE DOCKS:" //I WILL CRASH THIS SHIP WITH NO SURVIVORS! for(var/port in SSshuttle.stationary_docking_ports) if (istype(port, /obj/docking_port/stationary/transit)) continue // please don't do this diff --git a/code/modules/admin/view_variables/admin_delete.dm b/code/modules/admin/view_variables/admin_delete.dm index fe6e338078785..a2bd8d0b8ed4b 100644 --- a/code/modules/admin/view_variables/admin_delete.dm +++ b/code/modules/admin/view_variables/admin_delete.dm @@ -27,7 +27,7 @@ vv_update_display(D, "deleted", "") // Skyrat edit addition start -- optional bluespace sparks on delete if(T && prefs.read_preference(/datum/preference/toggle/admin/delete_sparks)) - playsound(T, 'sound/magic/Repulse.ogg', 100, 1) + playsound(T, 'sound/effects/magic/repulse.ogg', 100, 1) var/datum/effect_system/spark_spread/quantum/sparks = new sparks.set_up(10, 1, T) sparks.attach(T) diff --git a/code/modules/admin/view_variables/debug_variable_appearance.dm b/code/modules/admin/view_variables/debug_variable_appearance.dm index 9e92eba4605c3..c5a367e83a064 100644 --- a/code/modules/admin/view_variables/debug_variable_appearance.dm +++ b/code/modules/admin/view_variables/debug_variable_appearance.dm @@ -38,6 +38,9 @@ // can't use the name either for byond reasons var/_vis_flags +#if (MIN_COMPILER_VERSION > 515 || MIN_COMPILER_BUILD > 1643) +#warn vis_flags should now be supported by mutable appearances so we can safely remove the weird copying in this code +#endif // all alone at the end of the universe GLOBAL_DATUM_INIT(pluto, /atom/movable, new /atom/movable(null)) @@ -63,6 +66,13 @@ GLOBAL_DATUM_INIT(pluto, /atom/movable, new /atom/movable(null)) return FALSE if(var_name == NAMEOF(src, realized_underlays)) return FALSE + +#if (MIN_COMPILER_VERSION >= 515 && MIN_COMPILER_BUILD >= 1643) +#warn X/Y/Z and contents are now fully unviewable on our supported versions, remove the below check +#endif + +// lummy removed these from the the MA/image type +#if (DM_VERSION <= 515 && DM_BUILD < 1643) // Filtering out the stuff I know we don't care about if(var_name == NAMEOF(src, x)) return FALSE @@ -70,13 +80,14 @@ GLOBAL_DATUM_INIT(pluto, /atom/movable, new /atom/movable(null)) return FALSE if(var_name == NAMEOF(src, z)) return FALSE - // Could make an argument for these but I think they will just confuse people, so yeeet -#ifndef SPACEMAN_DMM // Spaceman doesn't believe in contents on appearances, sorry lads + #ifndef SPACEMAN_DMM // Spaceman doesn't believe in contents on appearances, sorry lads if(var_name == NAMEOF(src, contents)) return FALSE -#endif + #endif if(var_name == NAMEOF(src, loc)) return FALSE +#endif + // Could make an argument for this but I think they will just confuse people, so yeeet if(var_name == NAMEOF(src, vis_contents)) return FALSE return ..() diff --git a/code/modules/admin/view_variables/debug_variables.dm b/code/modules/admin/view_variables/debug_variables.dm index d9a1b90b0af29..835da1a0b39cb 100644 --- a/code/modules/admin/view_variables/debug_variables.dm +++ b/code/modules/admin/view_variables/debug_variables.dm @@ -29,7 +29,7 @@ return "[.][item]" -// This is split into a seperate proc mostly to make errors that happen not break things too much +// This is split into a separate proc mostly to make errors that happen not break things too much /proc/_debug_variable_value(name, value, level, datum/owner, sanitize, display_flags) if(isappearance(value)) value = get_vv_appearance(value) @@ -64,11 +64,11 @@ var/datum/datum_value = value return datum_value.debug_variable_value(name, level, owner, sanitize, display_flags) - if(islist(value) || (name in GLOB.vv_special_lists)) // Some special lists arent detectable as a list through istype + if(islist(value) || (name in GLOB.vv_special_lists)) // Some special lists aren't detectable as a list through istype var/list/list_value = value var/list/items = list() - // This is becuse some lists either dont count as lists or a locate on their ref will return null + // This is because some lists either don't count as lists or a locate on their ref will return null var/link_vars = "Vars=[REF(value)]" if(name in GLOB.vv_special_lists) link_vars = "Vars=[REF(owner)];special_varname=[name]" diff --git a/code/modules/admin/view_variables/filterrific.dm b/code/modules/admin/view_variables/filterrific.dm index 0bd9f51c114f9..a997d52047743 100644 --- a/code/modules/admin/view_variables/filterrific.dm +++ b/code/modules/admin/view_variables/filterrific.dm @@ -24,7 +24,7 @@ data["target_filter_data"] = target.filter_data return data -/datum/filter_editor/ui_act(action, list/params) +/datum/filter_editor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm b/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm index fa5fde1f20e18..8eb2f1c72f0fb 100644 --- a/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm +++ b/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm @@ -42,7 +42,7 @@ data["pixelated"] = target.appearance_flags & PIXEL_SCALE return data -/datum/nobody_wants_to_learn_matrix_math/ui_act(action, list/params) +/datum/nobody_wants_to_learn_matrix_math/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -52,7 +52,7 @@ var/matrix_var_name = params["var_name"] var/matrix_var_value = params["var_value"] if(testing_matrix.vv_edit_var(matrix_var_name, matrix_var_value) == FALSE) - to_chat(src, "Your edit was rejected by the object. This is a bug with the matrix tester, not your fault, so report it on github.", confidential = TRUE) + to_chat(src, "Your edit was rejected by the object. This is a bug with the matrix tester, not your fault, so report it on GitHub.", confidential = TRUE) return set_transform() if("scale") diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index 37bf0911c608f..66ac70f3f62f7 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -3,7 +3,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the variables of a datum.", ADMIN_CATEGORY_DEBUG, datum/thing in world) user.debug_variables(thing) -// This is kept as a seperate proc because admins are able to show VV to non-admins +// This is kept as a separate proc because admins are able to show VV to non-admins /client/proc/debug_variables(datum/thing in world) set category = "Debug" @@ -23,7 +23,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the if(isappearance(thing)) thing = get_vv_appearance(thing) // this is /mutable_appearance/our_bs_subtype - var/islist = islist(thing) || (!isdatum(thing) && hascall(thing, "Cut")) // Some special lists dont count as lists, but can be detected by if they have list procs + var/islist = islist(thing) || (!isdatum(thing) && hascall(thing, "Cut")) // Some special lists don't count as lists, but can be detected by if they have list procs if(!islist && !isdatum(thing)) return diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 191b508d9a09c..21e36c205071a 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(antagonists) ui = new(user, src, ui_name, name) ui.open() -/datum/antagonist/ui_act(action, params) +/datum/antagonist/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -271,6 +271,9 @@ GLOBAL_LIST_EMPTY(antagonists) if(count_against_dynamic_roll_chance && owner.current.stat != DEAD && owner.current.client) owner.current.add_to_current_living_antags() + for (var/datum/atom_hud/alternate_appearance/basic/antag_hud as anything in GLOB.active_alternate_appearances) + antag_hud.apply_to_new_mob(owner.current) + SEND_SIGNAL(owner, COMSIG_ANTAGONIST_GAINED, src) /** @@ -328,13 +331,8 @@ GLOBAL_LIST_EMPTY(antagonists) if(team) team.remove_member(owner) SEND_SIGNAL(owner, COMSIG_ANTAGONIST_REMOVED, src) - - // Remove HUDs that they should no longer see - var/mob/living/current = owner.current - for (var/datum/atom_hud/alternate_appearance/basic/has_antagonist/antag_hud as anything in GLOB.has_antagonist_huds) - if (!antag_hud.mobShouldSee(current)) - antag_hud.hide_from(current) - + if(owner.current) + SEND_SIGNAL(owner.current, COMSIG_MOB_ANTAGONIST_REMOVED, src) qdel(src) // SKYRAT EDIT START owner?.handle_exploitables() //Inefficient here, but on_removal() is called in multiple locations @@ -421,7 +419,7 @@ GLOBAL_LIST_EMPTY(antagonists) * Appears at start of roundend_catagory section. */ /datum/antagonist/proc/roundend_report_header() - return "The [roundend_category] were:
" + return span_header("The [roundend_category] were:
") /** * Proc that sends string data for the round-end report. @@ -534,8 +532,7 @@ GLOBAL_LIST_EMPTY(antagonists) // Add HUDs that they couldn't see before for (var/datum/atom_hud/alternate_appearance/basic/has_antagonist/antag_hud as anything in GLOB.has_antagonist_huds) - if (antag_hud.mobShouldSee(owner.current)) - antag_hud.show_to(owner.current) + antag_hud.apply_to_new_mob(owner.current) /// Takes a location, returns an image drawing "on" it that matches this antag datum's hud icon /datum/antagonist/proc/hud_image_on(mob/hud_loc) diff --git a/code/modules/antagonists/_common/antag_hud.dm b/code/modules/antagonists/_common/antag_hud.dm index 863d52ef5ffe4..9933569f9a988 100644 --- a/code/modules/antagonists/_common/antag_hud.dm +++ b/code/modules/antagonists/_common/antag_hud.dm @@ -8,8 +8,9 @@ GLOBAL_LIST_EMPTY_TYPED(has_antagonist_huds, /datum/atom_hud/alternate_appearanc var/datum/weakref/team_ref /datum/atom_hud/alternate_appearance/basic/has_antagonist/New(key, image/I, antag_datum_type, datum/weakref/team) - src.antag_datum_type = antag_datum_type - team_ref = team + if(antag_datum_type) + src.antag_datum_type = antag_datum_type + src.team_ref = team GLOB.has_antagonist_huds += src return ..(key, I, NONE) @@ -18,6 +19,8 @@ GLOBAL_LIST_EMPTY_TYPED(has_antagonist_huds, /datum/atom_hud/alternate_appearanc return ..() /datum/atom_hud/alternate_appearance/basic/has_antagonist/mobShouldSee(mob/M) + if(add_ghost_version && isobserver(M)) + return FALSE // use the ghost version instead var/datum/team/antag_team = team_ref?.resolve() if(!isnull(antag_team)) return !!(M.mind in antag_team.members) diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index bbc5c7a7b03ab..27c1fd5a0ea89 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -45,7 +45,7 @@ get_asset_datum(/datum/asset/simple/contracts), ) -/obj/item/antag_spawner/contract/ui_act(action, list/params) +/obj/item/antag_spawner/contract/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(used || polling || !ishuman(usr)) return @@ -83,7 +83,7 @@ app.wiz_team = master_wizard.wiz_team master_wizard.wiz_team.add_member(app_mind) app_mind.add_antag_datum(app) - app_mind.set_assigned_role(SSjob.GetJobType(/datum/job/wizard_apprentice)) + app_mind.set_assigned_role(SSjob.get_job_type(/datum/job/wizard_apprentice)) app_mind.special_role = ROLE_WIZARD_APPRENTICE SEND_SOUND(M, sound('sound/effects/magic.ogg')) @@ -274,7 +274,7 @@ spawn_antag(chosen_one.client, get_turf(src), initial(demon_type.name), user.mind) to_chat(user, shatter_msg) to_chat(user, veil_msg) - playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, TRUE) + playsound(user.loc, 'sound/effects/glass/glassbr1.ogg', 100, TRUE) qdel(src) else to_chat(user, span_warning("The bottle's contents usually pop and boil constantly, but right now they're eerily still and calm. Perhaps you should try again later.")) @@ -424,15 +424,7 @@ monkey_man.fully_replace_character_name(monkey_man.real_name, pick(GLOB.syndicate_monkey_names)) - monkey_man.dna.add_mutation(/datum/mutation/human/clever) - // Can't make them human or nonclever. At least not with the easy and boring way out. - for(var/datum/mutation/human/mutation as anything in monkey_man.dna.mutations) - mutation.mutadone_proof = TRUE - mutation.instability = 0 - - // Extra backup! - ADD_TRAIT(monkey_man, TRAIT_NO_DNA_SCRAMBLE, SPECIES_TRAIT) - // Anything else requires enough effort that they deserve it. + monkey_man.make_clever_and_no_dna_scramble() monkey_man.mind.enslave_mind_to_creator(user) diff --git a/code/modules/antagonists/_common/antag_team.dm b/code/modules/antagonists/_common/antag_team.dm index 29f94b040ec5f..527196c51c3ea 100644 --- a/code/modules/antagonists/_common/antag_team.dm +++ b/code/modules/antagonists/_common/antag_team.dm @@ -49,12 +49,12 @@ GLOBAL_LIST_EMPTY(antagonist_teams) /datum/team/proc/roundend_report() var/list/report = list() - report += "\The [name]:" + report += span_header("\The [name]:") report += "The [member_name]s were:" report += printplayerlist(members) if(objectives.len) - report += "Team had following objectives:" + report += span_header("Team had following objectives:") var/win = TRUE var/objective_count = 1 for(var/datum/objective/objective as anything in objectives) diff --git a/code/modules/antagonists/abductor/abductee/abductee.dm b/code/modules/antagonists/abductor/abductee/abductee.dm index fa529a6504415..9b5421c0fd720 100644 --- a/code/modules/antagonists/abductor/abductee/abductee.dm +++ b/code/modules/antagonists/abductor/abductee/abductee.dm @@ -6,7 +6,7 @@ */ /datum/antagonist/abductee name = "\improper Abductee" - stinger_sound = 'sound/ambience/antag/abductee.ogg' + stinger_sound = 'sound/music/antag/abductee.ogg' roundend_category = "abductees" antagpanel_category = ANTAG_GROUP_ABDUCTORS antag_hud_name = "abductee" diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm index 939c0ce0a6239..2ca46499a7db0 100644 --- a/code/modules/antagonists/abductor/abductor.dm +++ b/code/modules/antagonists/abductor/abductor.dm @@ -7,7 +7,7 @@ show_in_antagpanel = FALSE //should only show subtypes show_to_ghosts = TRUE suicide_cry = "FOR THE MOTHERSHIP!!" // They can't even talk but y'know - stinger_sound = 'sound/ambience/antag/ayylien.ogg' + stinger_sound = 'sound/music/antag/ayylien.ogg' var/datum/team/abductor_team/team var/sub_role var/outfit @@ -16,11 +16,6 @@ /// Type path for the associated job datum. var/role_job = /datum/job/abductor_agent -/datum/antagonist/abductor/New() - // lets get the loading started now, but don't block waiting for it - INVOKE_ASYNC(SSmapping, TYPE_PROC_REF(/datum/controller/subsystem/mapping, lazy_load_template), LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS) - return ..() - /datum/antagonist/abductor/get_preview_icon() var/mob/living/carbon/human/dummy/consistent/scientist = new var/mob/living/carbon/human/dummy/consistent/agent = new @@ -75,7 +70,7 @@ return team /datum/antagonist/abductor/on_gain() - owner.set_assigned_role(SSjob.GetJobType(role_job)) + owner.set_assigned_role(SSjob.get_job_type(role_job)) owner.special_role = ROLE_ABDUCTOR objectives += team.objectives finalize_abductor() @@ -176,7 +171,7 @@ else result += "[name] team failed its mission." - result += "The abductors of [name] were:" + result += span_header("The abductors of [name] were:") for(var/datum/mind/abductor_mind in members) result += printplayer(abductor_mind) result += printobjectives(objectives) diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm index d3f162f5fb55a..91107529721bc 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -48,7 +48,7 @@ icon_state = "gizmo_scan" to_chat(user, span_notice("You switch the device to [mode == GIZMO_SCAN? "SCAN": "MARK"] MODE")) -/obj/item/abductor/gizmo/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) +/obj/item/abductor/gizmo/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!ScientistCheck(user)) return ITEM_INTERACT_SKIP_TO_ATTACK // So you slap them with it if(!console) @@ -63,8 +63,10 @@ return ITEM_INTERACT_SUCCESS -/obj/item/abductor/gizmo/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) +/obj/item/abductor/gizmo/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!ismob(interacting_with)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) /obj/item/abductor/gizmo/proc/scan(atom/target, mob/living/user) if(ishuman(target)) @@ -104,15 +106,17 @@ icon_state = "silencer" inhand_icon_state = "gizmo" -/obj/item/abductor/silencer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) +/obj/item/abductor/silencer/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!AbductorCheck(user)) return ITEM_INTERACT_SKIP_TO_ATTACK // So you slap them with it radio_off(interacting_with, user) return ITEM_INTERACT_SUCCESS -/obj/item/abductor/silencer/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) +/obj/item/abductor/silencer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!ismob(interacting_with)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) /obj/item/abductor/silencer/proc/radio_off(atom/target, mob/living/user) if( !(user in (viewers(7,target))) ) @@ -155,10 +159,12 @@ icon_state = "mind_device_message" to_chat(user, span_notice("You switch the device to [mode == MIND_DEVICE_MESSAGE? "TRANSMISSION": "COMMAND"] MODE")) -/obj/item/abductor/mind_device/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/abductor/mind_device/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!ismob(interacting_with)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/abductor/mind_device/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!ScientistCheck(user)) return ITEM_INTERACT_BLOCKING @@ -183,8 +189,12 @@ to_chat(user, span_warning("Your target is already under a mind-controlling influence!")) return - var/command = tgui_input_text(user, "Enter the command for your target to follow.\ - Uses Left: [target_gland.mind_control_uses], Duration: [DisplayTimeText(target_gland.mind_control_duration)]", "Enter command") + var/command = tgui_input_text( + user, + "Enter the command for your target to follow. Uses Left: [target_gland.mind_control_uses], Duration: [DisplayTimeText(target_gland.mind_control_duration)]", + "Enter command", + max_length = MAX_MESSAGE_LEN, + ) if(!command) return @@ -209,14 +219,14 @@ if(living_target.stat == DEAD) to_chat(user, span_warning("Your target is dead!")) return - var/message = tgui_input_text(user, "Message to send to your target's brain", "Enter message") + var/message = tgui_input_text(user, "Message to send to your target's brain", "Enter message", max_length = MAX_MESSAGE_LEN) if(!message) return if(QDELETED(living_target) || living_target.stat == DEAD) return living_target.balloon_alert(living_target, "you hear a voice") - to_chat(living_target, span_hear("You hear a voice in your head saying:
[message]")) + to_chat(living_target, span_hear("You hear a voice in your head saying: [span_abductor(message)]")) to_chat(user, span_notice("You send the message to your target.")) log_directed_talk(user, living_target, message, LOG_SAY, "abductor whisper") @@ -225,7 +235,7 @@ name = "alien firing pin" icon_state = "firing_pin_ayy" desc = "This firing pin is slimy and warm; you can swear you feel it constantly trying to mentally probe you." - fail_message = "Firing error, please contact Command." + fail_message = span_abductor("Firing error, please contact Command.") /obj/item/firing_pin/abductor/pin_auth(mob/living/user) . = isabductor(user) @@ -296,7 +306,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} cooldown = 0 SECONDS stamina_damage = 0 knockdown_time = 14 SECONDS - on_stun_sound = 'sound/weapons/egloves.ogg' + on_stun_sound = 'sound/items/weapons/egloves.ogg' affect_cyborg = TRUE var/mode = BATON_STUN @@ -329,7 +339,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} affect_cyborg = is_stun_mode log_stun_attack = is_stun_mode // other modes have their own log entries. stun_animation = is_stun_or_sleep - on_stun_sound = is_stun_or_sleep ? 'sound/weapons/egloves.ogg' : null + on_stun_sound = is_stun_or_sleep ? 'sound/items/weapons/egloves.ogg' : null to_chat(usr, span_notice("You switch the baton to [txt] mode.")) update_appearance() @@ -384,7 +394,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} /obj/item/melee/baton/abductor/proc/SleepAttack(mob/living/target, mob/living/user) playsound(src, on_stun_sound, 50, TRUE, -1) - if(target.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB)) + if(INCAPACITATED_IGNORING(target, INCAPABLE_RESTRAINTS|INCAPABLE_GRAB)) if(target.can_block_magic(MAGIC_RESISTANCE_MIND)) to_chat(user, span_warning("The specimen has some kind of mental protection that is interfering with the sleep inducement! It seems you've been foiled.")) target.visible_message(span_danger("[user] tried to induced sleep in [target] with [src], but is unsuccessful!"), \ @@ -412,7 +422,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} var/mob/living/carbon/carbon_victim = victim if(!carbon_victim.handcuffed) if(carbon_victim.canBeHandcuffed()) - playsound(src, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2) + playsound(src, 'sound/items/weapons/cablecuff.ogg', 30, TRUE, -2) carbon_victim.visible_message(span_danger("[user] begins restraining [carbon_victim] with [src]!"), \ span_userdanger("[user] begins shaping an energy field around your hands!")) if(do_after(user, time_to_cuff, carbon_victim) && carbon_victim.canBeHandcuffed()) @@ -512,7 +522,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} ..() user.visible_message(span_notice("[user] places down [src] and activates it."), span_notice("You place down [src] and activate it.")) user.dropItemToGround(src) - playsound(src, 'sound/machines/terminal_alert.ogg', 50) + playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 50) addtimer(CALLBACK(src, PROC_REF(try_spawn_machine)), 3 SECONDS) /obj/item/abductor_machine_beacon/proc/try_spawn_machine() @@ -529,7 +539,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} visible_message(span_notice("[new_machine] warps on top of the beacon!")) qdel(src) else - playsound(src, 'sound/machines/buzz-two.ogg', 50) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50) /obj/item/abductor_machine_beacon/chem_dispenser name = "beacon - Reagent Synthesizer" @@ -608,7 +618,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} inhand_icon_state = "silencer" toolspeed = 0.25 tool_behaviour = null - usesound = 'sound/items/pshoom.ogg' + usesound = 'sound/items/pshoom/pshoom.ogg' ///A list of all the tools we offer. Stored as "Tool" for the key, and the icon/icon_state as the value. var/list/tool_list = list() ///Which toolset do we have active currently? @@ -689,7 +699,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} /obj/item/abductor/alien_omnitool/proc/check_menu(mob/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index 29ea5f1e78502..89052e022180e 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -51,7 +51,7 @@ return var/image/holder = owner.hud_list[GLAND_HUD] var/icon/I = icon(owner.icon, owner.icon_state, owner.dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = I.Height() - ICON_SIZE_Y if(active_mind_control) holder.icon_state = "hudgland_active" else if(mind_control_uses) diff --git a/code/modules/antagonists/abductor/equipment/glands/electric.dm b/code/modules/antagonists/abductor/equipment/glands/electric.dm index 72b2c1e14ad1c..e0b3df0f19c32 100644 --- a/code/modules/antagonists/abductor/equipment/glands/electric.dm +++ b/code/modules/antagonists/abductor/equipment/glands/electric.dm @@ -23,4 +23,4 @@ /obj/item/organ/internal/heart/gland/electric/proc/zap() tesla_zap(source = owner, zap_range = 4, power = 8e3, cutoff = 1e3, zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN) - playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, TRUE) + playsound(get_turf(owner), 'sound/effects/magic/lightningshock.ogg', 50, TRUE) diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm index 7f4462377654c..83ba7a7ffbdf2 100644 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -183,7 +183,7 @@ owner.visible_message(span_warning("With a loud snap, [owner]'s [parse_zone(body_zone)] rapidly grows back from [owner.p_their()] body!"), span_userdanger("With a loud snap, your [parse_zone(body_zone)] rapidly grows back from your body!"), span_warning("Your hear a loud snap.")) - playsound(owner, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(owner, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) owner.regenerate_limb(body_zone) /obj/item/organ/internal/heart/gland/heal/proc/replace_blood() @@ -212,7 +212,7 @@ /obj/item/organ/internal/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest) if(!IS_ORGANIC_LIMB(chest)) owner.visible_message(span_warning("[owner]'s [chest.name] rapidly expels its mechanical components, replacing them with flesh!"), span_userdanger("Your [chest.name] rapidly expels its mechanical components, replacing them with flesh!")) - playsound(owner, 'sound/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE) + playsound(owner, 'sound/effects/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE) var/list/dirs = GLOB.alldirs.Copy() for(var/i in 1 to 3) var/obj/effect/decal/cleanable/robot_debris/debris = new(get_turf(owner)) diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index ee729de7068b8..3dcdaf5a5b07e 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -118,7 +118,7 @@ data["vest_lock"] = HAS_TRAIT_FROM(vest, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT) return data -/obj/machinery/abductor/console/ui_act(action, list/params) +/obj/machinery/abductor/console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/antagonists/abductor/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm index 8d8f9e14b8954..416153c50e58f 100644 --- a/code/modules/antagonists/abductor/machinery/dispenser.dm +++ b/code/modules/antagonists/abductor/machinery/dispenser.dm @@ -48,7 +48,7 @@ data["glands"] += list(gland_information) return data -/obj/machinery/abductor/gland_dispenser/ui_act(action, list/params) +/obj/machinery/abductor/gland_dispenser/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm index a549171b66150..c4e59c505bf04 100644 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ b/code/modules/antagonists/abductor/machinery/experiment.dm @@ -86,7 +86,7 @@ data["occupant_status"] = mob_occupant.stat return data -/obj/machinery/abductor/experiment/ui_act(action, list/params) +/obj/machinery/abductor/experiment/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -169,7 +169,7 @@ credits += point_reward return "Experiment successful! [point_reward] new data-points collected." else - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src.loc, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return "Experiment failed! No replacement organ detected." else say("Brain activity nonexistent - disposing sample...") @@ -190,7 +190,7 @@ H.forceMove(console.pad.teleport_target) return //Area not chosen / It's not safe area - teleport to arrivals - SSjob.SendToLateJoin(H, FALSE) + SSjob.send_to_late_join(H, FALSE) return /obj/machinery/abductor/experiment/update_icon_state() diff --git a/code/modules/antagonists/ashwalker/ashwalker.dm b/code/modules/antagonists/ashwalker/ashwalker.dm index eeba85982cd64..8c3d85317672f 100644 --- a/code/modules/antagonists/ashwalker/ashwalker.dm +++ b/code/modules/antagonists/ashwalker/ashwalker.dm @@ -65,9 +65,9 @@ objectives -= necropolis_objective //So we don't count it in the check for other objectives. report += "The [name] was tasked with defending the Necropolis:" if(necropolis_objective.check_completion()) - report += span_greentext("The nest stands! Glory to the Necropolis!
") + report += span_greentext(span_header("The nest stands! Glory to the Necropolis!
")) else - report += span_redtext("The Necropolis was destroyed, the tribe has fallen...
") + report += span_redtext(span_header("The Necropolis was destroyed, the tribe has fallen...
")) if(length(objectives)) report += span_header("The [name]'s other objectives were:") diff --git a/code/modules/antagonists/battlecruiser/battlecruiser.dm b/code/modules/antagonists/battlecruiser/battlecruiser.dm index bcc2fc963309a..194034e31bbd2 100644 --- a/code/modules/antagonists/battlecruiser/battlecruiser.dm +++ b/code/modules/antagonists/battlecruiser/battlecruiser.dm @@ -20,7 +20,7 @@ antag_hud_name = "battlecruiser_crew" antagpanel_category = ANTAG_GROUP_SYNDICATE job_rank = ROLE_BATTLECRUISER_CREW - stinger_sound = 'sound/ambience/antag/ops.ogg' + stinger_sound = 'sound/music/antag/ops.ogg' /// Team to place the crewmember on. var/datum/team/battlecruiser/battlecruiser_team diff --git a/code/modules/antagonists/blob/blob_antag.dm b/code/modules/antagonists/blob/blob_antag.dm index 9cad238bb0011..9f9d97fac8dde 100644 --- a/code/modules/antagonists/blob/blob_antag.dm +++ b/code/modules/antagonists/blob/blob_antag.dm @@ -6,7 +6,7 @@ show_in_antagpanel = FALSE job_rank = ROLE_BLOB ui_name = "AntagInfoBlob" - stinger_sound = 'sound/ambience/antag/blobalert.ogg' + stinger_sound = 'sound/music/antag/blobalert.ogg' /// Action to release a blob infection var/datum/action/innate/blobpop/pop_action /// Initial points for a human blob @@ -133,13 +133,13 @@ owner.mind.transfer_to(blob_cam) old_body.gib() blob_cam.place_blob_core(placement_override, pop_override = TRUE) - playsound(get_turf(blob_cam), 'sound/ambience/antag/blobalert.ogg', 50, FALSE) + playsound(get_turf(blob_cam), 'sound/music/antag/blobalert.ogg', 50, FALSE) blobtag.has_already_popped = TRUE notify_ghosts( "A Blob host has burst in [get_area_name(blob_cam.blob_core)]", source = blob_cam.blob_core, - ghost_sound = 'sound/ambience/antag/blobalert.ogg', + ghost_sound = 'sound/music/antag/blobalert.ogg', header = "Blob Awakening!", notify_volume = 75, ) diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm index 2d7f4c5d34eb8..65a50621b1717 100644 --- a/code/modules/antagonists/blob/blobstrains/_reagent.dm +++ b/code/modules/antagonists/blob/blobstrains/_reagent.dm @@ -26,12 +26,21 @@ // These can only be applied by blobs. They are what (reagent) blobs are made out of. /datum/reagent/blob name = "Unknown" - description = "shouldn't exist and you should adminhelp immediately." + description = "" color = COLOR_WHITE taste_description = "bad code and slime" chemical_flags = NONE penetrates_skin = NONE + +/datum/reagent/blob/New() + ..() + + if(name == "Unknown") + description = "shouldn't exist and you should adminhelp immediately." + else if(description == "") + description = "[name] is the reagent created by that type of blob." + /// Used by blob reagents to calculate the reaction volume they should use when exposing mobs. /datum/reagent/blob/proc/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) if(exposed_mob.stat == DEAD || HAS_TRAIT(exposed_mob, TRAIT_BLOB_ALLY)) diff --git a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm index a18d802ff7dd4..acb4d96c23ad8 100644 --- a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm +++ b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm @@ -12,7 +12,7 @@ /datum/reagent/blob/cryogenic_poison name = "Cryogenic Poison" - description = "will inject targets with a freezing poison that does high damage over time." + description = "A freezing poison that does high damage over time. Cryogenic poison blobs inject this into their victims." color = "#8BA6E9" taste_description = "brain freeze" diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm index a62895ae6c4b7..d9010a965376e 100644 --- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm +++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm @@ -12,6 +12,7 @@ /datum/reagent/blob/regenerative_materia name = "Regenerative Materia" + description = "Chemical that inflicts toxin damage and makes the target believe they are fully healed. Regenerative materia blobs inject this into their victims." taste_description = "heaven" color = "#A88FB7" diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index e33b6fdf364cf..619ccec667947 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -187,14 +187,14 @@ GLOBAL_LIST_EMPTY(blob_nodes) blobstrain.on_sporedeath(spore) /mob/camera/blob/proc/victory() - sound_to_playing_players('sound/machines/alarm.ogg') + sound_to_playing_players('sound/announcer/alarm/nuke_alarm.ogg', 70) sleep(10 SECONDS) for(var/mob/living/live_guy as anything in GLOB.mob_living_list) var/turf/guy_turf = get_turf(live_guy) if(isnull(guy_turf) || !is_station_level(guy_turf.z)) continue - if(live_guy in GLOB.overminds || (live_guy.pass_flags & PASSBLOB)) + if((live_guy in GLOB.overminds) || (live_guy.pass_flags & PASSBLOB)) continue var/area/blob_area = get_area(guy_turf) diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 324c91ea3a529..ce1b016dcb045 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -175,6 +175,7 @@ if(isspaceturf(T) && !(locate(/obj/structure/lattice) in T) && prob(80)) make_blob = FALSE playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) //Let's give some feedback that we DID try to spawn in space, since players are used to it + balloon_alert(controller, "failed to expand!") ConsumeTile() //hit the tile we're in, making sure there are no border objects blocking us if(!T.CanPass(src, get_dir(T, src))) //is the target turf impassable @@ -281,11 +282,11 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(src.loc, 'sound/effects/attackblob.ogg', 50, TRUE) + playsound(src.loc, 'sound/effects/blob/attackblob.ogg', 50, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/blob/run_atom_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) switch(damage_type) diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm index 6eeccc8c361dd..f995dc0b81b03 100644 --- a/code/modules/antagonists/blob/structures/core.dm +++ b/code/modules/antagonists/blob/structures/core.dm @@ -24,7 +24,7 @@ GLOB.blob_cores += src START_PROCESSING(SSobj, src) SSpoints_of_interest.make_point_of_interest(src) - update_appearance() //so it atleast appears + update_appearance() //so it at least appears if(!placed && !overmind) return INITIALIZE_HINT_QDEL if(overmind) diff --git a/code/modules/antagonists/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm index 57707688f4daf..ebad949060a91 100644 --- a/code/modules/antagonists/brainwashing/brainwashing.dm +++ b/code/modules/antagonists/brainwashing/brainwashing.dm @@ -30,7 +30,7 @@ /datum/antagonist/brainwashed name = "\improper Brainwashed Victim" job_rank = ROLE_BRAINWASHED - stinger_sound = 'sound/ambience/antag/brainwashed.ogg' + stinger_sound = 'sound/music/antag/brainwashed.ogg' roundend_category = "brainwashed victims" show_in_antagpanel = TRUE antag_hud_name = "brainwashed" @@ -61,7 +61,7 @@ return var/list/objectives = list() do - var/objective = tgui_input_text(admin, "Add an objective", "Brainwashing") + var/objective = tgui_input_text(admin, "Add an objective", "Brainwashing", max_length = MAX_MESSAGE_LEN) if(objective) objectives += objective while(tgui_alert(admin, "Add another objective?", "More Brainwashing", list("Yes","No")) == "Yes") diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm index 6a08d0d9a7109..b9cf9354e44e6 100644 --- a/code/modules/antagonists/brother/brother.dm +++ b/code/modules/antagonists/brother/brother.dm @@ -9,7 +9,7 @@ suicide_cry = "FOR MY BROTHER!!" antag_moodlet = /datum/mood_event/focused hardcore_random_bonus = TRUE - stinger_sound = 'sound/ambience/antag/tatoralert.ogg' + stinger_sound = 'sound/music/antag/traitor/tatoralert.ogg' VAR_PRIVATE datum/team/brother_team/team @@ -137,6 +137,7 @@ brother1.dna.features["ethcolor"] = GLOB.color_list_ethereal["Faint Red"] brother1.set_species(/datum/species/ethereal) + brother2.dna.features["mcolor"] = "#E5CD99" // SKYRAT EDIT ADDITION - Customization brother2.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: brother2.dna.features["moth_antennae"] = "Plain" brother2.dna.mutant_bodyparts["moth_markings"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: brother2.dna.features["moth_markings"] = "None" diff --git a/code/modules/antagonists/changeling/cellular_emporium.dm b/code/modules/antagonists/changeling/cellular_emporium.dm index 68e83ea25e668..754d2343d5cd5 100644 --- a/code/modules/antagonists/changeling/cellular_emporium.dm +++ b/code/modules/antagonists/changeling/cellular_emporium.dm @@ -69,7 +69,7 @@ return data -/datum/cellular_emporium/ui_act(action, params) +/datum/cellular_emporium/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index eac2fa1cd12c5..d10074db3eed6 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -14,7 +14,8 @@ can_assign_self_objectives = TRUE default_custom_objective = "Consume the station's most valuable genomes." hardcore_random_bonus = TRUE - stinger_sound = 'sound/ambience/antag/ling_alert.ogg' + stinger_sound = 'sound/music/antag/ling_alert.ogg' + /// Whether to give this changeling objectives or not var/give_objectives = TRUE /// Weather we assign objectives which compete with other lings @@ -59,7 +60,7 @@ /// The voice we're mimicing via the changeling voice ability. var/mimicing = "" /// Whether we can currently respec in the cellular emporium. - var/can_respec = FALSE + var/can_respec = 0 /// The currently active changeling sting. var/datum/action/changeling/sting/chosen_sting @@ -148,6 +149,7 @@ /datum/antagonist/changeling/Destroy() QDEL_NULL(emporium_action) QDEL_NULL(cellular_emporium) + current_profile = null return ..() /datum/antagonist/changeling/on_gain() @@ -472,7 +474,7 @@ to_chat(owner.current, span_notice("We have removed our evolutions from this form, and are now ready to readapt.")) remove_changeling_powers() - can_respec = FALSE + can_respec -= 1 SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, "Readapt") log_changeling_power("[key_name(owner)] readapted their changeling powers") return TRUE @@ -568,11 +570,11 @@ // Clothes, of course new_profile.underwear = target.underwear + new_profile.underwear_color = target.underwear_color new_profile.undershirt = target.undershirt new_profile.socks = target.socks // SKYRAT EDIT ADDITION START new_profile.bra = target.bra - new_profile.underwear_color = target.underwear_color new_profile.undershirt_color = target.undershirt_color new_profile.socks_color = target.socks_color new_profile.bra_color = target.bra_color @@ -609,7 +611,7 @@ // Grab the target's sechut icon. new_profile.id_icon = target.wear_id?.get_sechud_job_icon_state() - var/list/slots = list("head", "wear_mask", "wear_neck", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store") // SKYRAT EDIT + var/list/slots = list("head", "wear_mask", "wear_neck", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store") for(var/slot in slots) if(!(slot in target.vars)) continue @@ -651,7 +653,7 @@ if(!first_profile) first_profile = new_profile - current_profile = first_profile // SKYRAT EDIT + current_profile = first_profile stored_profiles += new_profile absorbed_count++ @@ -802,7 +804,7 @@ var/static/list/slot2slot = list( "head" = ITEM_SLOT_HEAD, "wear_mask" = ITEM_SLOT_MASK, - "wear_neck" = ITEM_SLOT_NECK, // SKYRAT EDIT + "wear_neck" = ITEM_SLOT_NECK, "back" = ITEM_SLOT_BACK, "wear_suit" = ITEM_SLOT_OCLOTHING, "w_uniform" = ITEM_SLOT_ICLOTHING, @@ -826,6 +828,7 @@ var/datum/dna/chosen_dna = chosen_profile.dna user.real_name = chosen_profile.name user.underwear = chosen_profile.underwear + user.underwear_color = chosen_profile.underwear_color user.undershirt = chosen_profile.undershirt user.socks = chosen_profile.socks user.age = chosen_profile.age @@ -834,7 +837,6 @@ // SKYRAT EDIT ADDITION START user.bra = chosen_profile.bra - user.underwear_color = chosen_profile.underwear_color user.undershirt_color = chosen_profile.undershirt_color user.socks_color = chosen_profile.socks_color user.bra_color = chosen_profile.bra_color @@ -1012,6 +1014,8 @@ var/list/worn_icon_state_list = list() /// The underwear worn by the profile source var/underwear + /// The colour of the underwear worn by the profile source + var/underwear_color /// The undershirt worn by the profile source var/undershirt /// The socks worn by the profile source @@ -1037,10 +1041,10 @@ /// The TTS filter of the profile filter var/voice_filter = "" - /datum/changeling_profile/Destroy() qdel(dna) LAZYCLEARLIST(stored_scars) + QDEL_LAZYLIST(quirks) return ..() /* @@ -1060,6 +1064,7 @@ new_profile.righthand_file_list = righthand_file_list.Copy() new_profile.inhand_icon_state_list = inhand_icon_state_list.Copy() new_profile.underwear = underwear + new_profile.underwear_color = underwear_color new_profile.undershirt = undershirt new_profile.socks = socks new_profile.worn_icon_list = worn_icon_list.Copy() @@ -1075,7 +1080,6 @@ new_profile.voice = voice new_profile.voice_filter = voice_filter // SKYRAT EDIT ADDITION START - new_profile.underwear_color = underwear_color new_profile.undershirt_color = undershirt_color new_profile.socks_color = socks_color new_profile.bra = bra @@ -1135,11 +1139,11 @@ var/icon/final_icon = render_preview_outfit(/datum/outfit/changeling) var/icon/split_icon = render_preview_outfit(/datum/outfit/job/engineer) - final_icon.Shift(WEST, world.icon_size / 2) - final_icon.Shift(EAST, world.icon_size / 2) + final_icon.Shift(WEST, ICON_SIZE_X / 2) + final_icon.Shift(EAST, ICON_SIZE_X / 2) - split_icon.Shift(EAST, world.icon_size / 2) - split_icon.Shift(WEST, world.icon_size / 2) + split_icon.Shift(EAST, ICON_SIZE_X / 2) + split_icon.Shift(WEST, ICON_SIZE_X / 2) final_icon.Blend(split_icon, ICON_OVERLAY) diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index b50186b1ac43a..d06d8fe91735a 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -99,7 +99,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p if(req_stat < user.stat) user.balloon_alert(user, "incapacitated!") return FALSE - if((HAS_TRAIT(user, TRAIT_DEATHCOMA)) && (!ignores_fakedeath)) + if(HAS_TRAIT(user, TRAIT_DEATHCOMA) && !ignores_fakedeath) user.balloon_alert(user, "playing dead!") return FALSE return TRUE diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 7e13612153b49..71b1509ec816c 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -41,9 +41,14 @@ owner.visible_message(span_danger("[owner] sucks the fluids from [target]!"), span_notice("We have absorbed [target].")) to_chat(target, span_userdanger("You are absorbed by the changeling!")) + var/true_absorbtion = (!isnull(target.client) || !isnull(target.mind) || !isnull(target.last_mind)) + if (!true_absorbtion) + to_chat(owner, span_changeling(span_bold("You absorb [target], but their weak DNA is not enough to satisfy your hunger."))) + if(!changeling.has_profile_with_dna(target.dna)) changeling.add_new_profile(target) - changeling.true_absorbs++ + if (true_absorbtion) + changeling.true_absorbs++ if(owner.nutrition < NUTRITION_LEVEL_WELL_FED) owner.set_nutrition(min((owner.nutrition + target.nutrition), NUTRITION_LEVEL_WELL_FED)) @@ -57,7 +62,8 @@ is_absorbing = FALSE changeling.adjust_chemicals(10) - changeling.can_respec = TRUE + if (true_absorbtion) + changeling.can_respec++ if(target.stat != DEAD) target.investigate_log("has died from being changeling absorbed.", INVESTIGATE_DEATHS) diff --git a/code/modules/antagonists/changeling/powers/defib_grasp.dm b/code/modules/antagonists/changeling/powers/defib_grasp.dm index 867a595e17dcd..227b11c3a387b 100644 --- a/code/modules/antagonists/changeling/powers/defib_grasp.dm +++ b/code/modules/antagonists/changeling/powers/defib_grasp.dm @@ -38,12 +38,12 @@ changeling.set_resting(FALSE) changeling.adjust_jitter(20 SECONDS) changeling.emote("scream") - playsound(changeling, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(changeling, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) // Mimics some real defib stuff (wish this was more generalized) playsound(defib, SFX_BODYFALL, 50, TRUE) - playsound(defib, 'sound/machines/defib_zap.ogg', 75, TRUE, -1) - playsound(defib, 'sound/machines/defib_success.ogg', 50, FALSE) // I guess + playsound(defib, 'sound/machines/defib/defib_zap.ogg', 75, TRUE, -1) + playsound(defib, 'sound/machines/defib/defib_success.ogg', 50, FALSE) // I guess defib.shock_pulling(30, changeling) /// Removes the arms of the defibber if they're a carbon, and stuns them for a bit. diff --git a/code/modules/antagonists/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm index 1dff58377fd4a..b0149501e6679 100644 --- a/code/modules/antagonists/changeling/powers/fakedeath.dm +++ b/code/modules/antagonists/changeling/powers/fakedeath.dm @@ -108,7 +108,7 @@ if(!length(user.get_missing_limbs() - dont_regenerate)) return - playsound(user, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(user, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) user.visible_message( span_warning("[user]'s missing limbs reform, making a loud, grotesque sound!"), span_userdanger("Your limbs regrow, making a loud, crunchy sound and giving you great pain!"), @@ -123,7 +123,7 @@ return var/datum/antagonist/changeling/ling = IS_CHANGELING(user) - if(QDELETED(ling) || !(src in ling.innate_powers + ling.purchased_powers)) // checking both innate and purchased for full coverage + if(QDELETED(ling) || !(src in (ling.innate_powers + ling.purchased_powers))) // checking both innate and purchased for full coverage return if(!HAS_TRAIT_FROM(user, TRAIT_DEATHCOMA, CHANGELING_TRAIT)) return diff --git a/code/modules/antagonists/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm index 0b7668260d769..c4f2376f755a0 100644 --- a/code/modules/antagonists/changeling/powers/headcrab.dm +++ b/code/modules/antagonists/changeling/powers/headcrab.dm @@ -4,7 +4,7 @@ helptext = "We will be placed in control of a small, fragile creature. We may attack a corpse like this to plant an egg which will slowly mature into a new form for us." button_icon_state = "last_resort" chemical_cost = 20 - dna_cost = 1 + dna_cost = CHANGELING_POWER_INNATE req_human = TRUE req_stat = DEAD ignores_fakedeath = TRUE diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 1a339fd13868d..f6b42bf19f212 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -53,8 +53,8 @@ if(istype(hand_item, weapon_type)) user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL will delete the item if(!silent) - playsound(user, 'sound/effects/blobattack.ogg', 30, TRUE) - user.visible_message(span_warning("With a sickening crunch, [user] reforms [user.p_their()] [weapon_name_simple] into an arm!"), span_notice("We assimilate the [weapon_name_simple] back into our body."), "With a sickening crunch, \ - [target] reforms [target.p_their()] [blade.name] into an arm!", - span_warning("[blade] reforms back to normal."), - "= limit)) + if(QDELETED(src) || owner.incapacitated || !BS || (rune && !(locate(/obj/effect/rune/empower) in range(1, owner))) || (length(spells) >= limit)) return to_chat(owner,span_warning("You begin to carve unnatural symbols into your flesh!")) - SEND_SOUND(owner, sound('sound/weapons/slice.ogg',0,1,10)) + SEND_SOUND(owner, sound('sound/items/weapons/slice.ogg',0,1,10)) if(!channeling) channeling = TRUE else @@ -137,7 +137,7 @@ ..() /datum/action/innate/cult/blood_spell/IsAvailable(feedback = FALSE) - if(!IS_CULTIST(owner) || owner.incapacitated() || (!charges && deletes_on_empty)) + if(!IS_CULTIST(owner) || owner.incapacitated || (!charges && deletes_on_empty)) return FALSE return ..() @@ -263,7 +263,7 @@ SEND_SOUND(caller, sound('sound/effects/ghost.ogg', FALSE, TRUE, 50)) var/image/sparkle_image = image('icons/effects/cult.dmi', clicked_on, "bloodsparkles", ABOVE_MOB_LAYER) - clicked_on.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", sparkle_image, NONE) + clicked_on.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/has_antagonist/cult, "cult_apoc", sparkle_image, NONE) addtimer(CALLBACK(clicked_on, TYPE_PROC_REF(/atom/, remove_alt_appearance), "cult_apoc", TRUE), 4 MINUTES, TIMER_OVERRIDE|TIMER_UNIQUE) to_chat(caller, span_cult_bold("[clicked_on] has been cursed with living nightmares!")) @@ -292,7 +292,7 @@ owner.visible_message(span_warning("Thin grey dust falls from [owner]'s hand!"), \ span_cult_italic("You invoke the veiling spell, hiding nearby runes.")) charges-- - SEND_SOUND(owner, sound('sound/magic/smoke.ogg',0,1,25)) + SEND_SOUND(owner, sound('sound/effects/magic/smoke.ogg',0,1,25)) owner.whisper(invocation, language = /datum/language/common) for(var/obj/effect/rune/R in range(5,owner)) R.conceal() @@ -312,7 +312,7 @@ span_cult_italic("You invoke the counterspell, revealing nearby runes.")) charges-- owner.whisper(invocation, language = /datum/language/common) - SEND_SOUND(owner, sound('sound/magic/enter_blood.ogg',0,1,25)) + SEND_SOUND(owner, sound('sound/effects/magic/enter_blood.ogg',0,1,25)) for(var/obj/effect/rune/R in range(7,owner)) //More range in case you weren't standing in exactly the same spot R.reveal() for(var/obj/structure/destructible/cult/S in range(6,owner)) @@ -433,13 +433,15 @@ /obj/item/melee/blood_magic/stun/cast_spell(mob/living/target, mob/living/carbon/user) if(!istype(target) || IS_CULTIST(target)) return - var/datum/antagonist/cult/cultist = IS_CULTIST(user) - var/datum/team/cult/cult_team = cultist.get_team() + var/datum/antagonist/cult/cultist = GET_CULTIST(user) + var/datum/team/cult/cult_team = cultist?.get_team() var/effect_coef = 1 - if(cult_team.cult_ascendent) + if(cult_team?.cult_ascendent) effect_coef = 0.1 - else if(cult_team.cult_risen) + else if(cult_team?.cult_risen) effect_coef = 0.4 + if(IS_CULTIST(user) && isnull(GET_CULTIST(user))) + effect_coef = 0.2 user.visible_message( span_warning("[user] holds up [user.p_their()] hand, which explodes in a flash of red light!"), span_cult_italic("You attempt to stun [target] with the spell!"), @@ -459,7 +461,7 @@ target.color = COLOR_HERETIC_GREEN animate(target, color = old_color, time = 4 SECONDS, easing = EASE_IN) target.mob_light(range = 1.5, power = 2.5, color = COLOR_HERETIC_GREEN, duration = 0.5 SECONDS) - playsound(target, 'sound/magic/magic_block_mind.ogg', 150, TRUE) // insanely quiet + playsound(target, 'sound/effects/magic/magic_block_mind.ogg', 150, TRUE) // insanely quiet to_chat(user, span_warning("An eldritch force intervenes as you touch [target], absorbing most of the effects!")) to_chat(target, span_warning("As [user] touches you with vile magicks, the Mansus absorbs most of the effects!")) @@ -521,7 +523,7 @@ to_chat(user, span_warning("You must pick a valid rune!")) return var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? - if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !actual_selected_rune) + if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated || !actual_selected_rune) return var/turf/dest = get_turf(actual_selected_rune) if(dest.is_blocked_turf(TRUE)) @@ -565,7 +567,7 @@ /obj/item/melee/blood_magic/shackles/proc/CuffAttack(mob/living/carbon/C, mob/living/user) if(!C.handcuffed) - playsound(loc, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2) + playsound(loc, 'sound/items/weapons/cablecuff.ogg', 30, TRUE, -2) C.visible_message(span_danger("[user] begins restraining [C] with dark magic!"), \ span_userdanger("[user] begins shaping dark magic shackles around your wrists!")) if(do_after(user, 3 SECONDS, C)) @@ -648,7 +650,7 @@ if(candidate.mmi || candidate.shell) channeling = TRUE user.visible_message(span_danger("A dark cloud emanates from [user]'s hand and swirls around [candidate]!")) - playsound(T, 'sound/machines/airlock_alien_prying.ogg', 80, TRUE) + playsound(T, 'sound/machines/airlock/airlock_alien_prying.ogg', 80, TRUE) var/prev_color = candidate.color candidate.color = "black" if(!do_after(user, 9 SECONDS, target = candidate)) @@ -679,7 +681,7 @@ if(istype(target,/obj/machinery/door/airlock)) channeling = TRUE - playsound(T, 'sound/machines/airlockforced.ogg', 50, TRUE) + playsound(T, 'sound/machines/airlock/airlockforced.ogg', 50, TRUE) do_sparks(5, TRUE, target) if(!do_after(user, 5 SECONDS, target = user) && !QDELETED(target)) channeling = FALSE @@ -707,7 +709,7 @@ /obj/item/melee/blood_magic/construction/proc/check_menu(mob/user) if(!istype(user)) CRASH("The cult construct selection radial menu was accessed by something other than a valid user.") - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE @@ -796,7 +798,7 @@ construct_thing.adjust_health(-uses) construct_thing.visible_message(span_warning("[construct_thing] is partially healed by [user]'s blood magic!")) uses = 0 - playsound(get_turf(construct_thing), 'sound/magic/staff_healing.ogg', 25) + playsound(get_turf(construct_thing), 'sound/effects/magic/staff_healing.ogg', 25) user.Beam(construct_thing, icon_state="sendbeam", time = 1 SECONDS) return TRUE @@ -851,7 +853,7 @@ need_mob_update += human_bloodbag.adjustBruteLoss(damage_healed * (human_bloodbag.getBruteLoss() / overall_damage), updating_health = FALSE) if(need_mob_update) human_bloodbag.updatehealth() - playsound(get_turf(human_bloodbag), 'sound/magic/staff_healing.ogg', 25) + playsound(get_turf(human_bloodbag), 'sound/effects/magic/staff_healing.ogg', 25) new /obj/effect/temp_visual/cult/sparks(get_turf(human_bloodbag)) if (user != human_bloodbag) //Dont create beam from the user to the user user.Beam(human_bloodbag, icon_state="sendbeam", time = 15) @@ -872,7 +874,7 @@ human_bloodbag.blood_volume -= BLOOD_DRAIN_GAIN * USES_TO_BLOOD uses += BLOOD_DRAIN_GAIN user.Beam(human_bloodbag, icon_state="drainbeam", time = 1 SECONDS) - playsound(get_turf(human_bloodbag), 'sound/magic/enter_blood.ogg', 50) + playsound(get_turf(human_bloodbag), 'sound/effects/magic/enter_blood.ogg', 50) human_bloodbag.visible_message(span_danger("[user] drains some of [human_bloodbag]'s blood!")) to_chat(user,span_cult_italic("Your blood rite gains 50 charges from draining [human_bloodbag]'s blood.")) new /obj/effect/temp_visual/cult/sparks(get_turf(human_bloodbag)) @@ -906,7 +908,7 @@ return user.Beam(our_turf,icon_state="drainbeam", time = 15) new /obj/effect/temp_visual/cult/sparks(get_turf(user)) - playsound(our_turf, 'sound/magic/enter_blood.ogg', 50) + playsound(our_turf, 'sound/effects/magic/enter_blood.ogg', 50) to_chat(user, span_cult_italic("Your blood rite has gained [round(blood_to_gain)] charge\s from blood sources around you!")) uses += max(1, round(blood_to_gain)) @@ -973,7 +975,7 @@ /obj/item/melee/blood_magic/manipulator/proc/check_menu(mob/living/user) if(!istype(user)) CRASH("The Blood Rites manipulator radial menu was accessed by something other than a valid user.") - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index a4f3b291f74da..7a8e2fa535fd4 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -27,7 +27,7 @@ return ..() /datum/action/innate/cult/comm/Activate() - var/input = tgui_input_text(usr, "Message to tell to the other acolytes", "Voice of Blood") + var/input = tgui_input_text(usr, "Message to tell to the other acolytes", "Voice of Blood", max_length = MAX_MESSAGE_LEN) if(!input || !IsAvailable(feedback = TRUE)) return @@ -120,30 +120,30 @@ if(!team_member.current) continue team_member.current.update_mob_action_buttons() - if(team_member.current.incapacitated()) + if(team_member.current.incapacitated) continue - SEND_SOUND(team_member.current, 'sound/hallucinations/im_here1.ogg') + SEND_SOUND(team_member.current, 'sound/effects/hallucinations/im_here1.ogg') to_chat(team_member.current, span_cult_large("Acolyte [nominee] has asserted that [nominee.p_theyre()] worthy of leading the cult. A vote will be called shortly.")) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(poll_cultists_for_leader), nominee, team), 10 SECONDS) ///Polls all Cultists on whether the person putting themselves forward should be made the Cult Leader, if they can actually be such. /proc/poll_cultists_for_leader(mob/living/nominee, datum/team/cult/team) - if(QDELETED(nominee) || nominee.incapacitated()) + if(QDELETED(nominee) || nominee.incapacitated) team.cult_vote_called = FALSE for(var/datum/mind/team_member as anything in team.members) if(!team_member.current) continue team_member.current.update_mob_action_buttons() - if(team_member.current.incapacitated()) + if(team_member.current.incapacitated) continue to_chat(team_member.current,span_cult_large("[nominee] has died in the process of attempting to start a vote!")) return FALSE var/list/mob/living/asked_cultists = list() for(var/datum/mind/team_member as anything in team.members) - if(!team_member.current || team_member.current == nominee || team_member.current.incapacitated()) + if(!team_member.current || team_member.current == nominee || team_member.current.incapacitated) continue - SEND_SOUND(team_member.current, 'sound/magic/exit_blood.ogg') + SEND_SOUND(team_member.current, 'sound/effects/magic/exit_blood.ogg') asked_cultists += team_member.current var/list/yes_voters = SSpolling.poll_candidates( @@ -161,13 +161,13 @@ chat_text_border_icon = mutable_appearance('icons/effects/effects.dmi', "cult_master_logo") ) ) - if(QDELETED(nominee) || nominee.incapacitated()) + if(QDELETED(nominee) || nominee.incapacitated) team.cult_vote_called = FALSE for(var/datum/mind/team_member as anything in team.members) if(!team_member.current) continue team_member.current.update_mob_action_buttons() - if(team_member.current.incapacitated()) + if(team_member.current.incapacitated) continue to_chat(team_member.current,span_cult_large("[nominee] has died in the process of attempting to win the cult's support!")) return FALSE @@ -177,7 +177,7 @@ if(!team_member.current) continue team_member.current.update_mob_action_buttons() - if(team_member.current.incapacitated()) + if(team_member.current.incapacitated) continue to_chat(team_member.current,span_cult_large("[nominee] has gone catatonic in the process of attempting to win the cult's support!")) return FALSE @@ -187,7 +187,7 @@ if(!team_member.current) continue team_member.current.update_mob_action_buttons() - if(team_member.current.incapacitated()) + if(team_member.current.incapacitated) continue to_chat(team_member.current, span_cult_large("[nominee] could not win the cult's support and shall continue to serve as an acolyte.")) return FALSE @@ -244,7 +244,7 @@ new /obj/effect/temp_visual/dir_setting/cult/phase(mobloc, B.current.dir) playsound(mobloc, SFX_PORTAL_ENTER, 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(4) - playsound(mobloc, 'sound/magic/exit_blood.ogg', 100, TRUE) + playsound(mobloc, 'sound/effects/magic/exit_blood.ogg', 100, TRUE) if(B.current != owner) var/turf/final = pick(destinations) if(istype(B.current.loc, /obj/item/soulstone)) @@ -268,13 +268,13 @@ owner.say("C'arta forbici!", language = /datum/language/common, forced = "cult invocation") if(2) owner.say("Pleggh e'ntrath!", language = /datum/language/common, forced = "cult invocation") - playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 50, TRUE) + playsound(get_turf(owner),'sound/effects/magic/clockwork/narsie_attack.ogg', 50, TRUE) if(3) owner.say("Barhah hra zar'garis!", language = /datum/language/common, forced = "cult invocation") - playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 75, TRUE) + playsound(get_turf(owner),'sound/effects/magic/clockwork/narsie_attack.ogg', 75, TRUE) if(4) owner.say("N'ath reth sh'yro eth d'rekkathnor!!!", language = /datum/language/common, forced = "cult invocation") - playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 100, TRUE) + playsound(get_turf(owner),'sound/effects/magic/clockwork/narsie_attack.ogg', 100, TRUE) /datum/action/innate/cult/master/cultmark name = "Mark Target" @@ -399,7 +399,7 @@ if(QDELETED(owner) || QDELETED(src)) return - SEND_SOUND(owner, 'sound/magic/enter_blood.ogg') + SEND_SOUND(owner, 'sound/effects/magic/enter_blood.ogg') to_chat(owner, span_cult_bold("Your previous mark is gone - you are now ready to create a new blood mark.")) build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) @@ -452,7 +452,7 @@ var/turf/throwee_turf = get_turf(throwee) - playsound(throwee_turf, 'sound/magic/exit_blood.ogg') + playsound(throwee_turf, 'sound/effects/magic/exit_blood.ogg') new /obj/effect/temp_visual/cult/sparks(throwee_turf, caller.dir) throwee.visible_message( span_warning("A pulse of magic whisks [throwee] away!"), @@ -488,7 +488,7 @@ var/mob/living/living_clicked = clicked_on if(!IS_CULTIST(living_clicked)) return FALSE - SEND_SOUND(caller, sound('sound/weapons/thudswoosh.ogg')) + SEND_SOUND(caller, sound('sound/items/weapons/thudswoosh.ogg')) to_chat(caller, span_cult_bold("You reach through the veil with your mind's eye and seize [clicked_on]! Click anywhere nearby to teleport [clicked_on.p_them()]!")) throwee_ref = WEAKREF(clicked_on) return TRUE diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index ceaa5a0694386..826a2b052ba32 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -19,13 +19,14 @@ inhand_x_dimension = 32 inhand_y_dimension = 32 w_class = WEIGHT_CLASS_SMALL + slot_flags = ITEM_SLOT_BELT force = 15 throwforce = 25 block_chance = 25 wound_bonus = -10 bare_wound_bonus = 20 armour_penetration = 35 - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' /obj/item/melee/cultblade/dagger/Initialize(mapload) . = ..() @@ -72,8 +73,8 @@ Striking a noncultist, however, will tear their flesh."} block_chance = 50 // now it's officially a cult esword wound_bonus = -50 bare_wound_bonus = 20 - hitsound = 'sound/weapons/bladeslice.ogg' - block_sound = 'sound/weapons/parry.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' + block_sound = 'sound/items/weapons/parry.ogg' attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends") attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") /// If TRUE, it can be used at will by anyone, non-cultists included @@ -217,7 +218,7 @@ Striking a noncultist, however, will tear their flesh."} // Get the heretic's new body and antag datum. trapped_entity = trapped_mind?.current trapped_entity.key = trapped_mind?.key - var/datum/antagonist/heretic/heretic_holder = IS_HERETIC(trapped_entity) + var/datum/antagonist/heretic/heretic_holder = GET_HERETIC(trapped_entity) if(!heretic_holder) stack_trace("[soul_to_bind] in but not a heretic on the heretic soul blade.") @@ -284,7 +285,7 @@ Striking a noncultist, however, will tear their flesh."} item_flags = NEEDS_PERMIT | DROPDEL flags_1 = NONE block_chance = 25 //these dweebs don't get full block chance, because they're free cultists - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' /obj/item/melee/cultblade/ghost/Initialize(mapload) . = ..() @@ -300,8 +301,8 @@ Striking a noncultist, however, will tear their flesh."} desc = "Use the sword to shear open the flimsy fabric of this reality and teleport to your target." button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "phaseshift" - dash_sound = 'sound/magic/enter_blood.ogg' - recharge_sound = 'sound/magic/exit_blood.ogg' + dash_sound = 'sound/effects/magic/enter_blood.ogg' + recharge_sound = 'sound/effects/magic/exit_blood.ogg' beam_effect = "sendbeam" phasein = /obj/effect/temp_visual/dir_setting/cult/phase phaseout = /obj/effect/temp_visual/dir_setting/cult/phase/out @@ -378,7 +379,7 @@ Striking a noncultist, however, will tear their flesh."} worn_icon = 'icons/mob/clothing/suits/armor.dmi' inhand_icon_state = "cultrobes" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/tome, /obj/item/melee/cultblade) + allowed = list(/obj/item/tome, /obj/item/melee/cultblade, /obj/item/melee/sickly_blade/cursed) armor_type = /datum/armor/hooded_cultrobes flags_inv = HIDEJUMPSUIT cold_protection = CHEST|GROIN|LEGS|ARMS @@ -595,7 +596,6 @@ Striking a noncultist, however, will tear their flesh."} /obj/item/clothing/suit/hooded/cultrobes/berserker name = "flagellant's robes" desc = "Blood-soaked robes infused with dark magic; allows the user to move at inhuman speeds, but at the cost of increased damage. Provides an even greater speed boost if its hood is worn." - allowed = list(/obj/item/tome, /obj/item/melee/cultblade) armor_type = /datum/armor/cultrobes_berserker slowdown = -0.3 //the hood gives an additional -0.3 if you have it flipped up, for a total of -0.6 hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/berserkerhood @@ -717,7 +717,7 @@ Striking a noncultist, however, will tear their flesh."} SSshuttle.block_recall(surplus) totalcurses++ to_chat(user, span_danger("You shatter the orb! A dark essence spirals into the air, then disappears.")) - playsound(user.loc, 'sound/effects/glassbr1.ogg', 50, TRUE) + playsound(user.loc, 'sound/effects/glass/glassbr1.ogg', 50, TRUE) if(!remaining_curses) remaining_curses = strings(CULT_SHUTTLE_CURSE, "curse_announce") @@ -725,7 +725,7 @@ Striking a noncultist, however, will tear their flesh."} var/curse_message = pick_n_take(remaining_curses) || "Something has gone horrendously wrong..." curse_message += " The shuttle will be delayed by three minutes." - priority_announce("[curse_message]", "System Failure", 'sound/misc/notice1.ogg') + priority_announce("[curse_message]", "System Failure", 'sound/announcer/notice/notice1.ogg') if(MAX_SHUTTLE_CURSES-totalcurses <= 0) to_chat(user, span_danger(span_big("You sense that the emergency escape shuttle can no longer be cursed. It would be unwise to create more cursed orbs."))) else if(MAX_SHUTTLE_CURSES-totalcurses == 1) @@ -735,7 +735,7 @@ Striking a noncultist, however, will tear their flesh."} if(totalcurses >= MAX_SHUTTLE_CURSES && (world.time < first_curse_time + SHUTTLE_CURSE_OMFG_TIMESPAN)) var/omfg_message = pick_list(CULT_SHUTTLE_CURSE, "omfg_announce") || "LEAVE US ALONE!" - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(priority_announce), omfg_message, "Priority Alert", 'sound/misc/announce_syndi.ogg', null, "Nanotrasen Department of Transportation: Central Command"), rand(2 SECONDS, 6 SECONDS)) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(priority_announce), omfg_message, "Priority Alert", 'sound/announcer/announcement/announce_syndi.ogg', null, "Nanotrasen Department of Transportation: Central Command"), rand(2 SECONDS, 6 SECONDS)) for(var/mob/iter_player as anything in GLOB.player_list) if(IS_CULTIST(iter_player)) iter_player.client?.give_award(/datum/award/achievement/misc/cult_shuttle_omfg, iter_player) @@ -911,7 +911,7 @@ Striking a noncultist, however, will tear their flesh."} cultists |= cult_mind.current var/mob/living/cultist_to_receive = tgui_input_list(user, "Who do you wish to call to [src]?", "Followers of the Geometer", (cultists - user)) - if(QDELETED(src) || loc != user || user.incapacitated()) + if(QDELETED(src) || loc != user || user.incapacitated) return ITEM_INTERACT_BLOCKING if(isnull(cultist_to_receive)) to_chat(user, span_cult_italic("You require a destination!")) @@ -953,8 +953,8 @@ Striking a noncultist, however, will tear their flesh."} attack_verb_continuous = list("attacks", "slices", "shreds", "sunders", "lacerates", "cleaves") attack_verb_simple = list("attack", "slice", "shred", "sunder", "lacerate", "cleave") sharpness = SHARP_EDGED - hitsound = 'sound/weapons/bladeslice.ogg' - block_sound = 'sound/weapons/parry.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' + block_sound = 'sound/items/weapons/parry.ogg' var/datum/action/innate/cult/halberd/halberd_act /obj/item/melee/cultblade/halberd/Initialize(mapload) @@ -984,7 +984,7 @@ Striking a noncultist, however, will tear their flesh."} var/mob/living/target = hit_atom if(IS_CULTIST(target) && target.put_in_active_hand(src)) - playsound(src, 'sound/weapons/throwtap.ogg', 50) + playsound(src, 'sound/items/weapons/throwtap.ogg', 50) target.visible_message(span_warning("[target] catches [src] out of the air!")) return if(target.can_block_magic() || IS_CULTIST(target)) @@ -1004,7 +1004,7 @@ Striking a noncultist, however, will tear their flesh."} T.visible_message(span_warning("[src] shatters and melts back into blood!")) new /obj/effect/temp_visual/cult/sparks(T) new /obj/effect/decal/cleanable/blood/splatter(T) - playsound(T, 'sound/effects/glassbr3.ogg', 100) + playsound(T, 'sound/effects/glass/glassbr3.ogg', 100) qdel(src) /obj/item/melee/cultblade/halberd/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) @@ -1053,7 +1053,7 @@ Striking a noncultist, however, will tear their flesh."} desc = "Blood for blood." color = "#ff0000" ammo_type = /obj/item/ammo_casing/magic/arcane_barrage/blood - fire_sound = 'sound/magic/wand_teleport.ogg' + fire_sound = 'sound/effects/magic/wand_teleport.ogg' /obj/item/ammo_casing/magic/arcane_barrage/blood projectile_type = /obj/projectile/magic/arcane_barrage/blood @@ -1142,7 +1142,7 @@ Striking a noncultist, however, will tear their flesh."} /obj/item/blood_beam/proc/charge(mob/user) var/obj/O - playsound(src, 'sound/magic/lightning_chargeup.ogg', 100, TRUE) + playsound(src, 'sound/effects/magic/lightning_chargeup.ogg', 100, TRUE) for(var/i in 1 to 12) if(!charging) break @@ -1171,7 +1171,7 @@ Striking a noncultist, however, will tear their flesh."} second = !second //Handles beam firing in pairs if(!firing) break - playsound(src, 'sound/magic/exit_blood.ogg', 75, TRUE) + playsound(src, 'sound/effects/magic/exit_blood.ogg', 75, TRUE) new /obj/effect/temp_visual/dir_setting/cult/phase(user.loc, user.dir) var/turf/temp_target = get_turf_in_angle(set_angle, targets_from, 40) for(var/turf/T in get_line(targets_from,temp_target)) @@ -1199,7 +1199,7 @@ Striking a noncultist, however, will tear their flesh."} if(L.density) L.Paralyze(20) L.adjustBruteLoss(45) - playsound(L, 'sound/hallucinations/wail.ogg', 50, TRUE) + playsound(L, 'sound/effects/hallucinations/wail.ogg', 50, TRUE) L.emote("scream") user.Beam(temp_target, icon_state="blood_beam", time = 7, beam_type = /obj/effect/ebeam/blood) @@ -1221,8 +1221,9 @@ Striking a noncultist, however, will tear their flesh."} w_class = WEIGHT_CLASS_BULKY attack_verb_continuous = list("bumps", "prods") attack_verb_simple = list("bump", "prod") - hitsound = 'sound/weapons/smash.ogg' - block_sound = 'sound/weapons/effects/ric5.ogg' + hitsound = 'sound/items/weapons/smash.ogg' + block_sound = 'sound/items/weapons/effects/ric5.ogg' + shield_bash_sound = 'sound/effects/glass/glassknock.ogg' var/illusions = 2 /obj/item/shield/mirror/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) @@ -1233,7 +1234,7 @@ Striking a noncultist, however, will tear their flesh."} var/turf/T = get_turf(owner) T.visible_message(span_warning("The sheer force from [hitby] shatters the mirror shield!")) new /obj/effect/temp_visual/cult/sparks(T) - playsound(T, 'sound/effects/glassbr3.ogg', 100) + playsound(T, 'sound/effects/glass/glassbr3.ogg', 100) owner.Paralyze(25) qdel(src) return FALSE @@ -1270,7 +1271,7 @@ Striking a noncultist, however, will tear their flesh."} illusions++ if(illusions == initial(illusions) && isliving(loc)) var/mob/living/holder = loc - to_chat(holder, "The shield's illusions are back at full strength!") + to_chat(holder, span_cult_italic("The shield's illusions are back at full strength!")) /obj/item/shield/mirror/IsReflect() if(prob(block_chance)) @@ -1278,7 +1279,6 @@ Striking a noncultist, however, will tear their flesh."} return FALSE /obj/item/shield/mirror/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - var/turf/impact_turf = get_turf(hit_atom) if(isliving(hit_atom)) var/mob/living/target = hit_atom @@ -1286,19 +1286,14 @@ Striking a noncultist, however, will tear their flesh."} target.visible_message(span_warning("[src] bounces off of [target], as if repelled by an unseen force!")) return if(IS_CULTIST(target) && target.put_in_active_hand(src)) - playsound(src, 'sound/weapons/throwtap.ogg', 50) + playsound(src, 'sound/items/weapons/throwtap.ogg', 50) target.visible_message(span_warning("[target] catches [src] out of the air!")) return if(!..()) target.Paralyze(30) - var/mob/thrower = throwingdatum?.get_thrower() - if(thrower) - for(var/mob/living/Next in orange(2, impact_turf)) - if(!Next.density || IS_CULTIST(Next)) - continue - throw_at(Next, 3, 1, thrower) - return - throw_at(thrower, 7, 1, null) + new /obj/effect/temp_visual/cult/sparks(target) + playsound(target, 'sound/effects/glass/glassbr3.ogg', 100) + qdel(src) else ..() diff --git a/code/modules/antagonists/cult/cult_objectives.dm b/code/modules/antagonists/cult/cult_objectives.dm index 8a4bf74dec800..17957f88bca17 100644 --- a/code/modules/antagonists/cult/cult_objectives.dm +++ b/code/modules/antagonists/cult/cult_objectives.dm @@ -71,7 +71,7 @@ /datum/objective/sacrifice/proc/on_possible_mindswap(mob/source) SIGNAL_HANDLER UnregisterSignal(target.current, list(COMSIG_QDELETING, COMSIG_MOB_MIND_TRANSFERRED_INTO)) - //we check if the mind is bodyless only after mindswap shenanigeans to avoid issues. + //we check if the mind is bodyless only after mindswap shenanigans to avoid issues. addtimer(CALLBACK(src, PROC_REF(do_we_have_a_body)), 0 SECONDS) /datum/objective/sacrifice/proc/do_we_have_a_body() diff --git a/code/modules/antagonists/cult/cult_structure_altar.dm b/code/modules/antagonists/cult/cult_structure_altar.dm index e38591c0c0705..e3fcf645a2f0e 100644 --- a/code/modules/antagonists/cult/cult_structure_altar.dm +++ b/code/modules/antagonists/cult/cult_structure_altar.dm @@ -10,7 +10,7 @@ desc = "A bloodstained altar dedicated to Nar'Sie." cult_examine_tip = "Can be used to create eldritch whetstones, construct shells, and flasks of unholy water." icon_state = "talismanaltar" - break_message = "The altar shatters, leaving only the wailing of the damned!" + break_message = span_warning("The altar shatters, leaving only the wailing of the damned!") mansus_conversion_path = /obj/effect/heretic_rune /obj/structure/destructible/cult/item_dispenser/altar/setup_options() diff --git a/code/modules/antagonists/cult/cult_structure_archives.dm b/code/modules/antagonists/cult/cult_structure_archives.dm index 9917d9505f7be..d4867659651f8 100644 --- a/code/modules/antagonists/cult/cult_structure_archives.dm +++ b/code/modules/antagonists/cult/cult_structure_archives.dm @@ -12,7 +12,7 @@ icon_state = "tomealtar" light_range = 1.5 light_color = LIGHT_COLOR_FIRE - break_message = "The books and tomes of the archives burn into ash as the desk shatters!" + break_message = span_warning("The books and tomes of the archives burn into ash as the desk shatters!") mansus_conversion_path = /obj/item/codex_cicatrix /obj/structure/destructible/cult/item_dispenser/archives/setup_options() diff --git a/code/modules/antagonists/cult/cult_structure_forge.dm b/code/modules/antagonists/cult/cult_structure_forge.dm index 12d15b9296ef4..2ba11b2905afe 100644 --- a/code/modules/antagonists/cult/cult_structure_forge.dm +++ b/code/modules/antagonists/cult/cult_structure_forge.dm @@ -12,7 +12,7 @@ icon_state = "forge" light_range = 2 light_color = LIGHT_COLOR_LAVA - break_message = "The forge breaks apart into shards with a howling scream!" + break_message = span_warning("The forge breaks apart into shards with a howling scream!") mansus_conversion_path = /obj/structure/destructible/eldritch_crucible /obj/structure/destructible/cult/item_dispenser/forge/setup_options() diff --git a/code/modules/antagonists/cult/cult_structure_pylon.dm b/code/modules/antagonists/cult/cult_structure_pylon.dm index e436601325d25..54151f1171e12 100644 --- a/code/modules/antagonists/cult/cult_structure_pylon.dm +++ b/code/modules/antagonists/cult/cult_structure_pylon.dm @@ -5,8 +5,8 @@ icon_state = "pylon" light_range = 1.5 light_color = COLOR_SOFT_RED - break_sound = 'sound/effects/glassbr2.ogg' - break_message = "The blood-red crystal falls to the floor and shatters!" + break_sound = 'sound/effects/glass/glassbr2.ogg' + break_message = span_warning("The blood-red crystal falls to the floor and shatters!") /// Length of the cooldown in between tile corruptions. Doubled if no turfs are found. var/corruption_cooldown_duration = 5 SECONDS /// The cooldown for corruptions. diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 2cdb2c2e6f468..5aae2a6ccbc22 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -1,7 +1,7 @@ // Cult buildings! /obj/structure/destructible/cult icon = 'icons/obj/antags/cult/structures.dmi' - break_sound = 'sound/hallucinations/veryfar_noise.ogg' + break_sound = 'sound/effects/hallucinations/veryfar_noise.ogg' density = TRUE anchored = TRUE light_power = 2 @@ -137,7 +137,7 @@ /* * Set up and populate our list of options. - * Overriden by subtypes. + * Overridden by subtypes. * * The list of options is a associated list of format: * item_name = list( @@ -201,7 +201,7 @@ * Returns TRUE if the user is a living mob that is a cultist and is not incapacitated. */ /obj/structure/destructible/cult/item_dispenser/proc/check_menu(mob/user) - return isliving(user) && is_cultist_check(user) && !user.incapacitated() + return isliving(user) && is_cultist_check(user) && !user.incapacitated // Spooky looking door used in gateways. Or something. /obj/effect/gateway diff --git a/code/modules/antagonists/cult/datums/cult_team.dm b/code/modules/antagonists/cult/datums/cult_team.dm index 72c7df8bf5d14..a616c8ddd42e4 100644 --- a/code/modules/antagonists/cult/datums/cult_team.dm +++ b/code/modules/antagonists/cult/datums/cult_team.dm @@ -55,7 +55,7 @@ if(ratio > CULT_RISEN && !cult_risen) for(var/datum/mind/mind as anything in members) if(mind.current) - SEND_SOUND(mind.current, 'sound/ambience/antag/bloodcult/bloodcult_eyes.ogg') + SEND_SOUND(mind.current, 'sound/music/antag/bloodcult/bloodcult_eyes.ogg') to_chat(mind.current, span_cult_large(span_warning("The veil weakens as your cult grows, your eyes begin to glow..."))) mind.current.AddElement(/datum/element/cult_eyes) cult_risen = TRUE @@ -64,8 +64,8 @@ if(ratio > CULT_ASCENDENT && !cult_ascendent) for(var/datum/mind/mind as anything in members) if(mind.current) - SEND_SOUND(mind.current, 'sound/ambience/antag/bloodcult/bloodcult_halos.ogg') - to_chat(mind.current, span_cult_large(span_warning("Your cult is ascendent and the red harvest approaches - you cannot hide your true nature for much longer!!"))) + SEND_SOUND(mind.current, 'sound/music/antag/bloodcult/bloodcult_halos.ogg') + to_chat(mind.current, span_cult_large(span_warning("Your cult is ascendant and the red harvest approaches - you cannot hide your true nature for much longer!!"))) mind.current.AddElement(/datum/element/cult_halo) cult_ascendent = TRUE log_game("The blood cult has ascended with [cultplayers] players.") @@ -125,7 +125,7 @@ count++ if(members.len) - parts += "The cultists were:" + parts += span_header("The cultists were:") if(length(true_cultists)) parts += printplayerlist(true_cultists) else @@ -164,7 +164,7 @@ continue to_chat(cultist.current, span_bold(span_cult_large("[marker] has marked [blood_target] in the [target_area.name] as the cult's top priority, get there immediately!"))) - SEND_SOUND(cultist.current, sound(pick('sound/hallucinations/over_here2.ogg','sound/hallucinations/over_here3.ogg'), 0, 1, 75)) + SEND_SOUND(cultist.current, sound(pick('sound/effects/hallucinations/over_here2.ogg','sound/effects/hallucinations/over_here3.ogg'), 0, 1, 75)) cultist.current.client.images += blood_target_image if(duration != INFINITY) diff --git a/code/modules/antagonists/cult/datums/cultist.dm b/code/modules/antagonists/cult/datums/cultist.dm index f56d79a8f4b18..fd5ba1ba20d29 100644 --- a/code/modules/antagonists/cult/datums/cultist.dm +++ b/code/modules/antagonists/cult/datums/cultist.dm @@ -7,7 +7,7 @@ preview_outfit = /datum/outfit/cultist job_rank = ROLE_CULTIST antag_hud_name = "cult" - stinger_sound = 'sound/ambience/antag/bloodcult/bloodcult_gain.ogg' + stinger_sound = 'sound/music/antag/bloodcult/bloodcult_gain.ogg' ///The vote ability Cultists have to elect someone to be the leader. var/datum/action/innate/cult/mastervote/vote_ability @@ -256,7 +256,7 @@ var/area/current_area = get_area(owner.current) for(var/datum/mind/cult_mind as anything in cult_team.members) - SEND_SOUND(cult_mind, sound('sound/hallucinations/veryfar_noise.ogg')) + SEND_SOUND(cult_mind, sound('sound/effects/hallucinations/veryfar_noise.ogg')) to_chat(cult_mind, span_cult_large("The Cult's Master, [owner.current.name], has fallen in \the [current_area]!")) /datum/antagonist/cult/get_preview_icon() diff --git a/code/modules/antagonists/cult/rune_spawn_action.dm b/code/modules/antagonists/cult/rune_spawn_action.dm index 3d791dbce44dc..be0e1e88ff8ed 100644 --- a/code/modules/antagonists/cult/rune_spawn_action.dm +++ b/code/modules/antagonists/cult/rune_spawn_action.dm @@ -67,7 +67,7 @@ var/scribe_mod = scribe_time if(istype(T, /turf/open/floor/engine/cult)) scribe_mod *= 0.5 - playsound(T, 'sound/magic/enter_blood.ogg', 100, FALSE) + playsound(T, 'sound/effects/magic/enter_blood.ogg', 100, FALSE) if(do_after(owner, scribe_mod, target = owner, extra_checks = CALLBACK(owner, TYPE_PROC_REF(/mob, break_do_after_checks), health, action_interrupt))) new rune_type(owner.loc, chosen_keyword) else diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index d8ce241caf3c8..ddcc0c23887f7 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -200,9 +200,12 @@ structure_check() searches for nearby cultist structures required for the invoca invocation = "Ra'sha yoka!" invoke_damage = 30 can_be_scribed = FALSE + var/randomized = TRUE /obj/effect/rune/malformed/Initialize(mapload, set_keyword) . = ..() + if(!randomized) + return icon_state = "[rand(1,7)]" color = rgb(rand(0,255), rand(0,255), rand(0,255)) @@ -210,6 +213,9 @@ structure_check() searches for nearby cultist structures required for the invoca ..() qdel(src) +/obj/effect/rune/malformed/norandom + randomized = FALSE + //Rite of Offering: Converts or sacrifices a target. /obj/effect/rune/convert cultist_name = "Offer" @@ -379,14 +385,14 @@ structure_check() searches for nearby cultist structures required for the invoca qdel(sacrificial) return TRUE if(sacrificial && (signal_result & DUST_SACRIFICE)) // No soulstone when dusted - playsound(sacrificial, 'sound/magic/teleport_diss.ogg', 100, TRUE) + playsound(sacrificial, 'sound/effects/magic/teleport_diss.ogg', 100, TRUE) sacrificial.investigate_log("has been sacrificially dusted by the cult.", INVESTIGATE_DEATHS) sacrificial.dust(TRUE, FALSE, TRUE) else if (sacrificial) var/obj/item/soulstone/stone = new(loc) if(sacrificial.mind && !HAS_TRAIT(sacrificial, TRAIT_SUICIDED)) stone.capture_soul(sacrificial, invokers[1], forced = TRUE) - playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, TRUE) + playsound(sacrificial, 'sound/effects/magic/disintegrate.ogg', 100, TRUE) sacrificial.investigate_log("has been sacrificially gibbed by the cult.", INVESTIGATE_DEATHS) sacrificial.gib(DROP_ALL_REMAINS) @@ -493,7 +499,7 @@ structure_check() searches for nearby cultist structures required for the invoca var/turf/T = get_turf(src) if(is_away_level(T.z)) - to_chat(user, "You are not in the right dimension!") + to_chat(user, span_cult_italic("You are not in the right dimension!")) log_game("Teleport rune activated by [user] at [COORD(src)] failed - [user] is in away mission.") fail_invoke() return @@ -505,7 +511,7 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() return var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? - if(!Adjacent(user) || QDELETED(src) || user.incapacitated() || !actual_selected_rune) + if(!Adjacent(user) || QDELETED(src) || user.incapacitated || !actual_selected_rune) fail_invoke() return @@ -764,7 +770,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) else fail_invoke() return - SEND_SOUND(mob_to_revive, 'sound/ambience/antag/bloodcult/bloodcult_gain.ogg') + SEND_SOUND(mob_to_revive, 'sound/music/antag/bloodcult/bloodcult_gain.ogg') to_chat(mob_to_revive, span_cult_large("\"PASNAR SAVRAE YAM'TOTH. Arise.\"")) mob_to_revive.visible_message(span_warning("[mob_to_revive] draws in a huge breath, red light shining from [mob_to_revive.p_their()] eyes."), \ span_cult_large("You awaken suddenly from the void. You're alive!")) @@ -774,7 +780,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) /obj/effect/rune/raise_dead/proc/validness_checks(mob/living/target_mob, mob/living/user) if(QDELETED(user)) return FALSE - if(!Adjacent(user) || user.incapacitated()) + if(!Adjacent(user) || user.incapacitated) return FALSE if(QDELETED(target_mob)) return FALSE @@ -839,40 +845,40 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) return var/mob/living/cultist_to_summon = tgui_input_list(user, "Who do you wish to call to [src]?", "Followers of the Geometer", cultists) var/fail_logmsg = "Summon Cultist rune activated by [user] at [COORD(src)] failed - " - if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated()) + if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated) return if(isnull(cultist_to_summon)) - to_chat(user, "You require a summoning target!") + to_chat(user, span_cult_italic("You require a summoning target!")) fail_logmsg += "no target." log_game(fail_logmsg) fail_invoke() return if(cultist_to_summon.stat == DEAD) - to_chat(user, "[cultist_to_summon] has died!") + to_chat(user, span_cult_italic("[cultist_to_summon] has died!")) fail_logmsg += "target died." log_game(fail_logmsg) fail_invoke() return if(cultist_to_summon.pulledby || cultist_to_summon.buckled) - to_chat(user, "[cultist_to_summon] is being held in place!") + to_chat(user, span_cult_italic("[cultist_to_summon] is being held in place!")) fail_logmsg += "target restrained." log_game(fail_logmsg) fail_invoke() return if(!IS_CULTIST(cultist_to_summon)) - to_chat(user, "[cultist_to_summon] is not a follower of the Geometer!") + to_chat(user, span_cult_italic("[cultist_to_summon] is not a follower of the Geometer!")) fail_logmsg += "target deconverted." log_game(fail_logmsg) fail_invoke() return if(is_away_level(cultist_to_summon.z)) - to_chat(user, "[cultist_to_summon] is not in our dimension!") + to_chat(user, span_cult_italic("[cultist_to_summon] is not in our dimension!")) fail_logmsg += "target is in away mission." log_game(fail_logmsg) fail_invoke() return cultist_to_summon.visible_message(span_warning("[cultist_to_summon] suddenly disappears in a flash of red light!"), \ - "Overwhelming vertigo consumes you as you are hurled through the air!") + span_cult_italic("Overwhelming vertigo consumes you as you are hurled through the air!")) ..() visible_message(span_warning("A foggy shape materializes atop [src] and solidifies into [cultist_to_summon]!")) var/turf/old_turf = get_turf(cultist_to_summon) @@ -962,12 +968,12 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) /obj/effect/rune/manifest/can_invoke(mob/living/user) if(!(user in get_turf(src))) - to_chat(user, "You must be standing on [src]!") + to_chat(user, span_cult_italic("You must be standing on [src]!")) fail_invoke() log_game("Manifest rune failed - user not standing on rune") return list() if(user.has_status_effect(/datum/status_effect/cultghost)) - to_chat(user, "Ghosts can't summon more ghosts!") + to_chat(user, span_cult_italic("Ghosts can't summon more ghosts!")) fail_invoke() log_game("Manifest rune failed - user is a ghost") return list() @@ -1014,7 +1020,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) new_human.set_invis_see(SEE_INVISIBLE_OBSERVER) new_human.add_traits(list(TRAIT_NOBREATH, TRAIT_PERMANENTLY_MORTAL), INNATE_TRAIT) // permanently mortal can be removed once this is a bespoke kind of mob ghosts++ - playsound(src, 'sound/magic/exit_blood.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/exit_blood.ogg', 50, TRUE) visible_message(span_warning("A cloud of red mist forms above [src], and from within steps... a [new_human.gender == FEMALE ? "wo":""]man.")) to_chat(user, span_cult_italic("Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...")) var/obj/structure/emergency_shield/cult/weak/N = new(T) @@ -1129,7 +1135,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) intensity = max(60, 360 - (360*(intensity/length(GLOB.player_list) + 0.3)**2)) //significantly lower intensity for "winning" cults var/duration = intensity*10 - playsound(T, 'sound/magic/enter_blood.ogg', 100, TRUE) + playsound(T, 'sound/effects/magic/enter_blood.ogg', 100, TRUE) visible_message(span_warning("A colossal shockwave of energy bursts from the rune, disintegrating it in the process!")) for(var/mob/living/target in range(src, 3)) @@ -1150,7 +1156,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/noncult, "human_apoc", A, NONE) addtimer(CALLBACK(M, TYPE_PROC_REF(/atom/, remove_alt_appearance),"human_apoc",TRUE), duration) images += A - SEND_SOUND(M, pick(sound('sound/ambience/antag/bloodcult/bloodcult_gain.ogg'),sound('sound/voice/ghost_whisper.ogg'),sound('sound/misc/ghosty_wind.ogg'))) + SEND_SOUND(M, pick(sound('sound/music/antag/bloodcult/bloodcult_gain.ogg'),sound('sound/music/antag/bloodcult/ghost_whisper.ogg'),sound('sound/music/antag/bloodcult/ghosty_wind.ogg'))) else var/construct = pick("wraith","artificer","juggernaut") var/image/B = image('icons/mob/nonhuman-player/cult.dmi',M,construct, ABOVE_MOB_LAYER) @@ -1160,8 +1166,8 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) images += B if(!IS_CULTIST(M)) if(M.client) - var/image/C = image('icons/effects/cult.dmi',M,"bloodsparkles", ABOVE_MOB_LAYER) - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", C, NONE) + var/image/C = image('icons/effects/cult.dmi', M, "bloodsparkles", ABOVE_MOB_LAYER) + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/has_antagonist/cult, "cult_apoc", C, NONE) addtimer(CALLBACK(M, TYPE_PROC_REF(/atom/, remove_alt_appearance),"cult_apoc",TRUE), duration) images += C else diff --git a/code/modules/antagonists/cult/sword_fling.dm b/code/modules/antagonists/cult/sword_fling.dm index 83238b0d8a2f4..d4c1530f06b98 100644 --- a/code/modules/antagonists/cult/sword_fling.dm +++ b/code/modules/antagonists/cult/sword_fling.dm @@ -56,7 +56,7 @@ new particle_to_spawn(get_turf(loccer)) loccer.shake_up_animation() - playsound(loccer, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(loccer, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) if(prob(resist_chance)) flinged_sword.forceMove(get_turf(loccer)) diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 4cd69ac9be2b0..ce4419cd53964 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -31,6 +31,7 @@ /datum/antagonist/ert/on_gain() if(random_names) update_name() + else owner.current.fully_replace_character_name(owner.current.real_name,"[role] [owner.current.client?.prefs?.read_preference(/datum/preference/name/emergency)]") //BUBBER EDIT ADDITION: ERT NAMES if(forge_objectives_for_ert) forge_objectives() if(equip_ert) @@ -234,9 +235,11 @@ var/mob/living/carbon/human/H = owner.current if(!istype(H)) return + if(isplasmaman(H)) - H.equipOutfit(plasmaman_outfit) - H.open_internals(H.get_item_for_held_index(2)) + H.dna.species.outfit_important_for_life = plasmaman_outfit + + H.dna.species.give_important_for_life(H) H.equipOutfit(outfit) if(isplasmaman(H)) @@ -290,3 +293,13 @@ name = "Frontier Militia General" outfit = /datum/outfit/centcom/militia/general role = "General" + +/datum/antagonist/ert/medical_commander + role = "Chief EMT" + outfit = /datum/outfit/centcom/ert/medical_commander + plasmaman_outfit = /datum/outfit/plasmaman/medical_commander + +/datum/antagonist/ert/medical_technician + role = "Emergency Medical Technician" + outfit = /datum/outfit/centcom/ert/medical_technician + plasmaman_outfit = /datum/outfit/plasmaman/medical_technician diff --git a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm index 2905dff3a0f58..8e2b62c8187a4 100644 --- a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm +++ b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm @@ -157,11 +157,11 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE) + playsound(src, 'sound/effects/blob/attackblob.ogg', 50, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(src, 'sound/items/welder.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/item/paper/crumpled/fluff/fortune_teller name = "scribbled note" diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index 1e40f0fff3856..aa1a34f6e2d4d 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -26,7 +26,8 @@ can_assign_self_objectives = TRUE default_custom_objective = "Turn a department into a testament for your dark knowledge." hardcore_random_bonus = TRUE - stinger_sound = 'sound/ambience/antag/heretic/heretic_gain.ogg' + stinger_sound = 'sound/music/antag/heretic/heretic_gain.ogg' + /// Whether we give this antagonist objectives on gain. var/give_objectives = TRUE /// Whether we've ascended! (Completed one of the final rituals) @@ -218,7 +219,7 @@ return data -/datum/antagonist/heretic/ui_act(action, params) +/datum/antagonist/heretic/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -313,7 +314,6 @@ RegisterSignal(our_mob, COMSIG_LIVING_CULT_SACRIFICED, PROC_REF(on_cult_sacrificed)) RegisterSignals(our_mob, list(COMSIG_MOB_BEFORE_SPELL_CAST, COMSIG_MOB_SPELL_ACTIVATED), PROC_REF(on_spell_cast)) RegisterSignal(our_mob, COMSIG_USER_ITEM_INTERACTION, PROC_REF(on_item_use)) - RegisterSignal(our_mob, COMSIG_MOB_LOGIN, PROC_REF(fix_influence_network)) RegisterSignal(our_mob, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(after_fully_healed)) /datum/antagonist/heretic/remove_innate_effects(mob/living/mob_override) @@ -329,7 +329,6 @@ COMSIG_MOB_BEFORE_SPELL_CAST, COMSIG_MOB_SPELL_ACTIVATED, COMSIG_USER_ITEM_INTERACTION, - COMSIG_MOB_LOGIN, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_LIVING_CULT_SACRIFICED, )) @@ -457,18 +456,6 @@ var/obj/item/offhand = user.get_inactive_held_item() return !QDELETED(offhand) && istype(offhand, /obj/item/melee/touch_attack/mansus_fist) -/* - * Signal proc for [COMSIG_MOB_LOGIN]. - * - * Calls rework_network() on our reality smash tracker - * whenever a login / client change happens, to ensure - * influence client visibility is fixed. - */ -/datum/antagonist/heretic/proc/fix_influence_network(mob/source) - SIGNAL_HANDLER - - GLOB.reality_smash_track.rework_network() - /// Signal proc for [COMSIG_LIVING_POST_FULLY_HEAL], /// Gives the heretic aliving heart on aheal or organ refresh /datum/antagonist/heretic/proc/after_fully_healed(mob/living/source, heal_flags) @@ -527,7 +514,7 @@ for(var/datum/mind/mind as anything in cult_team.members) if(mind.current) - SEND_SOUND(mind.current, 'sound/magic/clockwork/narsie_attack.ogg') + SEND_SOUND(mind.current, 'sound/effects/magic/clockwork/narsie_attack.ogg') to_chat(mind.current, span_cult_large(span_warning("Arcane and forbidden knowledge floods your forges and archives. The cult has learned how to create the ")) + span_cult_large(span_hypnophrase("[result]!"))) return SILENCE_SACRIFICE_MESSAGE|DUST_SACRIFICE @@ -656,7 +643,7 @@ /datum/antagonist/heretic/proc/passive_influence_gain() knowledge_points++ if(owner.current.stat <= SOFT_CRIT) - to_chat(owner.current, "[span_hear("You hear a whisper...")] [span_hypnophrase(pick(strings(HERETIC_INFLUENCE_FILE, "drain_message")))]") + to_chat(owner.current, "[span_hear("You hear a whisper...")] [span_hypnophrase(pick_list(HERETIC_INFLUENCE_FILE, "drain_message"))]") addtimer(CALLBACK(src, PROC_REF(passive_influence_gain)), passive_gain_timer) /datum/antagonist/heretic/roundend_report() diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index 81573b4791562..94ecc0f9d77f1 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -676,13 +676,12 @@ return !was_completed /datum/heretic_knowledge/knowledge_ritual/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) + var/datum/antagonist/heretic/our_heretic = GET_HERETIC(user) our_heretic.knowledge_points += KNOWLEDGE_RITUAL_POINTS was_completed = TRUE - var/drain_message = pick(strings(HERETIC_INFLUENCE_FILE, "drain_message")) to_chat(user, span_boldnotice("[name] completed!")) - to_chat(user, span_hypnophrase(span_big("[drain_message]"))) + to_chat(user, span_hypnophrase(span_big("[pick_list(HERETIC_INFLUENCE_FILE, "drain_message")]"))) desc += " (Completed!)" log_heretic_knowledge("[key_name(user)] completed a [name] at [worldtime2text()].") user.add_mob_memory(/datum/memory/heretic_knowledge_ritual) @@ -723,7 +722,7 @@ return TRUE /datum/heretic_knowledge/ultimate/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) if(!can_be_invoked(heretic_datum)) return FALSE @@ -744,7 +743,7 @@ return (sacrifice.stat == DEAD) && !ismonkey(sacrifice) /datum/heretic_knowledge/ultimate/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) heretic_datum.ascended = TRUE // Show the cool red gradiant in our UI diff --git a/code/modules/antagonists/heretic/heretic_living_heart.dm b/code/modules/antagonists/heretic/heretic_living_heart.dm index b616d300097e9..3e8f39fef4f94 100644 --- a/code/modules/antagonists/heretic/heretic_living_heart.dm +++ b/code/modules/antagonists/heretic/heretic_living_heart.dm @@ -104,7 +104,7 @@ return ..() /datum/action/cooldown/track_target/Activate(atom/target) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(owner) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(owner) var/datum/heretic_knowledge/sac_knowledge = heretic_datum.get_knowledge(/datum/heretic_knowledge/hunt_and_sacrifice) if(!LAZYLEN(heretic_datum.sac_targets)) owner.balloon_alert(owner, "no targets, visit a rune!") diff --git a/code/modules/antagonists/heretic/heretic_monsters.dm b/code/modules/antagonists/heretic/heretic_monsters.dm index 5bc7041cd461d..2cb3dd3bfa4d0 100644 --- a/code/modules/antagonists/heretic/heretic_monsters.dm +++ b/code/modules/antagonists/heretic/heretic_monsters.dm @@ -8,7 +8,7 @@ antag_hud_name = "heretic_beast" suicide_cry = "MY MASTER SMILES UPON ME!!" show_in_antagpanel = FALSE - stinger_sound = 'sound/ambience/antag/heretic/heretic_gain.ogg' + stinger_sound = 'sound/music/antag/heretic/heretic_gain.ogg' /// Our master (a heretic)'s mind. var/datum/mind/master diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm index 3e7bfad8f44c2..164d5ef84ced8 100644 --- a/code/modules/antagonists/heretic/influences.dm +++ b/code/modules/antagonists/heretic/influences.dm @@ -29,36 +29,6 @@ tracked_heretics.Cut() return ..() -/** - * Automatically fixes the target and smash network - * - * Fixes any bugs that are caused by late Generate() or exchanging clients - */ -/datum/reality_smash_tracker/proc/rework_network() - SIGNAL_HANDLER - - for(var/mind in tracked_heretics) - if(isnull(mind)) - stack_trace("A null somehow landed in the [type] list of minds. How?") - tracked_heretics -= mind - continue - - add_to_smashes(mind) - -/** - * Allow [to_add] to see all tracked reality smashes. - */ -/datum/reality_smash_tracker/proc/add_to_smashes(datum/mind/to_add) - for(var/obj/effect/heretic_influence/reality_smash as anything in smashes) - reality_smash.add_mind(to_add) - -/** - * Stop [to_remove] from seeing any tracked reality smashes. - */ -/datum/reality_smash_tracker/proc/remove_from_smashes(datum/mind/to_remove) - for(var/obj/effect/heretic_influence/reality_smash as anything in smashes) - reality_smash.remove_mind(to_remove) - /** * Generates a set amount of reality smashes * based on the number of already existing smashes @@ -73,7 +43,7 @@ while((length(smashes) + num_drained) < how_many_can_we_make && location_sanity < 100) var/turf/chosen_location = get_safe_random_station_turf() - // We don't want them close to each other - at least 1 tile of seperation + // We don't want them close to each other - at least 1 tile of separation var/list/nearby_things = range(1, chosen_location) var/obj/effect/heretic_influence/what_if_i_have_one = locate() in nearby_things var/obj/effect/visible_heretic_influence/what_if_i_had_one_but_its_used = locate() in nearby_things @@ -83,8 +53,6 @@ new /obj/effect/heretic_influence(chosen_location) - rework_network() - /** * Adds a mind to the list of people that can see the reality smashes * @@ -100,9 +68,6 @@ //SKYRAT EDIT END generate_new_influences() - add_to_smashes(heretic) - - /** * Removes a mind from the list of people that can see the reality smashes * @@ -111,8 +76,6 @@ /datum/reality_smash_tracker/proc/remove_tracked_mind(datum/mind/heretic) tracked_heretics -= heretic - remove_from_smashes(heretic) - /obj/effect/visible_heretic_influence name = "pierced reality" icon = 'icons/effects/eldritch.dmi' @@ -206,46 +169,23 @@ var/being_drained = FALSE /// The icon state applied to the image created for this influence. var/real_icon_state = "reality_smash" - /// A list of all minds that can see us. - var/list/datum/mind/minds = list() - /// The image shown to heretics - var/image/heretic_image - /// We hold the turf we're on so we can remove and add the 'no prints' flag. - var/turf/on_turf /obj/effect/heretic_influence/Initialize(mapload) . = ..() GLOB.reality_smash_track.smashes += src - heretic_image = image(icon, src, real_icon_state, OBJ_LAYER) generate_name() - on_turf = get_turf(src) - if(!istype(on_turf)) - return - on_turf.interaction_flags_atom |= INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND - RegisterSignal(on_turf, COMSIG_TURF_CHANGE, PROC_REF(replace_our_turf)) + var/image/heretic_image = image(icon, src, real_icon_state, OBJ_LAYER) + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/has_antagonist/heretic, "reality_smash", heretic_image) + + AddElement(/datum/element/block_turf_fingerprints) AddComponent(/datum/component/redirect_attack_hand_from_turf, interact_check = CALLBACK(src, PROC_REF(verify_user_can_see))) /obj/effect/heretic_influence/proc/verify_user_can_see(mob/user) - return (user?.mind in minds) - -/obj/effect/heretic_influence/proc/replace_our_turf(datum/source, path, new_baseturfs, flags, post_change_callbacks) - SIGNAL_HANDLER - post_change_callbacks += CALLBACK(src, PROC_REF(replace_our_turf_two)) - on_turf = null //hard del ref? - -/obj/effect/heretic_influence/proc/replace_our_turf_two(turf/new_turf) - new_turf.interaction_flags_atom |= INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND - on_turf = new_turf + return (user.mind in GLOB.reality_smash_track.tracked_heretics) /obj/effect/heretic_influence/Destroy() GLOB.reality_smash_track.smashes -= src - for(var/datum/mind/heretic in minds) - remove_mind(heretic) - - heretic_image = null - on_turf?.interaction_flags_atom &= ~INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND - on_turf = null return ..() /obj/effect/heretic_influence/attack_hand_secondary(mob/user, list/modifiers) @@ -295,49 +235,35 @@ // We don't need to set being_drained back since we delete after anyways loc.balloon_alert(user, "influence drained") - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) heretic_datum.knowledge_points += knowledge_to_gain // Aaand now we delete it after_drain(user) -/* +/** * Handle the effects of the drain. */ /obj/effect/heretic_influence/proc/after_drain(mob/living/user) if(user) - to_chat(user, span_hypnophrase(pick(strings(HERETIC_INFLUENCE_FILE, "drain_message")))) + to_chat(user, span_hypnophrase(pick_list(HERETIC_INFLUENCE_FILE, "drain_message"))) to_chat(user, span_warning("[src] begins to fade into reality!")) var/obj/effect/visible_heretic_influence/illusion = new /obj/effect/visible_heretic_influence(drop_location()) - illusion.name = "\improper" + pick(strings(HERETIC_INFLUENCE_FILE, "drained")) + " " + format_text(name) + illusion.name = "\improper" + pick_list(HERETIC_INFLUENCE_FILE, "drained") + " " + format_text(name) GLOB.reality_smash_track.num_drained++ qdel(src) -/* - * Add a mind to the list of tracked minds, - * making another person able to see us. - */ -/obj/effect/heretic_influence/proc/add_mind(datum/mind/heretic) - minds |= heretic - heretic.current?.client?.images |= heretic_image - -/* - * Remove a mind present in our list - * from being able to see us. - */ -/obj/effect/heretic_influence/proc/remove_mind(datum/mind/heretic) - if(!(heretic in minds)) - CRASH("[type] - remove_mind called with a mind not present in the minds list!") - - minds -= heretic - heretic.current?.client?.images -= heretic_image - -/* +/** * Generates a random name for the influence. */ /obj/effect/heretic_influence/proc/generate_name() - name = "\improper" + pick(strings(HERETIC_INFLUENCE_FILE, "prefix")) + " " + pick(strings(HERETIC_INFLUENCE_FILE, "postfix")) + name = "\improper" + pick_list(HERETIC_INFLUENCE_FILE, "prefix") + " " + pick_list(HERETIC_INFLUENCE_FILE, "postfix") #undef NUM_INFLUENCES_PER_HERETIC + +/// Hud used for heretics to see influences +/datum/atom_hud/alternate_appearance/basic/has_antagonist/heretic + antag_datum_type = /datum/antagonist/heretic + add_ghost_version = TRUE diff --git a/code/modules/antagonists/heretic/items/corrupted_organs.dm b/code/modules/antagonists/heretic/items/corrupted_organs.dm index 3bd3ead7f6094..335279c9553a6 100644 --- a/code/modules/antagonists/heretic/items/corrupted_organs.dm +++ b/code/modules/antagonists/heretic/items/corrupted_organs.dm @@ -2,7 +2,7 @@ /obj/item/organ/internal/eyes/corrupt name = "corrupt orbs" desc = "These eyes have seen something they shouldn't have." - organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS /// The override images we are applying var/list/hallucinations @@ -40,7 +40,7 @@ /obj/item/organ/internal/tongue/corrupt name = "corrupt tongue" desc = "This one tells only lies." - organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS /obj/item/organ/internal/tongue/corrupt/Initialize(mapload) . = ..() @@ -67,7 +67,7 @@ /obj/item/organ/internal/liver/corrupt name = "corrupt liver" desc = "After what you've seen you could really go for a drink." - organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS /// How much extra ingredients to add? var/amount_added = 5 /// What extra ingredients can we add? @@ -111,7 +111,7 @@ /obj/item/organ/internal/stomach/corrupt name = "corrupt stomach" desc = "This parasite demands an unwholesome diet in order to be satisfied." - organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS /// Do we have an unholy thirst? var/thirst_satiated = FALSE /// Timer for when we get thirsty again @@ -177,7 +177,7 @@ /obj/item/organ/internal/heart/corrupt name = "corrupt heart" desc = "What corruption is this spreading along with the blood?" - organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS /// How long until the next heart? COOLDOWN_DECLARE(hand_cooldown) @@ -197,7 +197,7 @@ /obj/item/organ/internal/lungs/corrupt name = "corrupt lungs" desc = "Some things SHOULD be drowned in tar." - organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS /// How likely are we not to cough every time we take a breath? var/cough_chance = 15 /// How much gas to emit? @@ -232,7 +232,7 @@ /obj/item/organ/internal/appendix/corrupt name = "corrupt appendix" desc = "What kind of dark, cosmic force is even going to bother to corrupt an appendix?" - organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS /// How likely are we to spawn worms? var/worm_chance = 2 diff --git a/code/modules/antagonists/heretic/items/forbidden_book.dm b/code/modules/antagonists/heretic/items/forbidden_book.dm index 38f42b58c5e82..2591a1fd752a9 100644 --- a/code/modules/antagonists/heretic/items/forbidden_book.dm +++ b/code/modules/antagonists/heretic/items/forbidden_book.dm @@ -47,7 +47,7 @@ update_weight_class(WEIGHT_CLASS_NORMAL) /obj/item/codex_cicatrix/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) if(!heretic_datum) return NONE if(isopenturf(interacting_with)) diff --git a/code/modules/antagonists/heretic/items/heretic_armor.dm b/code/modules/antagonists/heretic/items/heretic_armor.dm index 0c64e4a227eaf..8375c3ae44334 100644 --- a/code/modules/antagonists/heretic/items/heretic_armor.dm +++ b/code/modules/antagonists/heretic/items/heretic_armor.dm @@ -153,6 +153,7 @@ RemoveElement(/datum/element/heretic_focus) if(isliving(loc)) + REMOVE_TRAIT(loc, TRAIT_RESISTLOWPRESSURE, REF(src)) loc.balloon_alert(loc, "cloak hidden") loc.visible_message(span_notice("Light shifts around [loc], making the cloak around them invisible!")) @@ -163,5 +164,6 @@ AddElement(/datum/element/heretic_focus) if(isliving(loc)) + ADD_TRAIT(loc, TRAIT_RESISTLOWPRESSURE, REF(src)) loc.balloon_alert(loc, "cloak revealed") loc.visible_message(span_notice("A kaleidoscope of colours collapses around [loc], a cloak appearing suddenly around their person!")) diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm index ddfec8db20cf7..ab98e1b9e4c7c 100644 --- a/code/modules/antagonists/heretic/items/heretic_blades.dm +++ b/code/modules/antagonists/heretic/items/heretic_blades.dm @@ -10,6 +10,7 @@ inhand_x_dimension = 64 inhand_y_dimension = 64 obj_flags = CONDUCTS_ELECTRICITY + slot_flags = ITEM_SLOT_BELT sharpness = SHARP_EDGED w_class = WEIGHT_CLASS_NORMAL force = 20 @@ -18,7 +19,7 @@ bare_wound_bonus = 15 toolspeed = 0.375 demolition_mod = 0.8 - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' armour_penetration = 35 attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends") attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") @@ -229,7 +230,7 @@ /obj/item/melee/sickly_blade/cursed/interact_with_atom(atom/target, mob/living/user, list/modifiers) . = ..() - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) if(!heretic_datum) return NONE diff --git a/code/modules/antagonists/heretic/items/heretic_necks.dm b/code/modules/antagonists/heretic/items/heretic_necks.dm index 5c73c22a4e793..a738b4aae47ea 100644 --- a/code/modules/antagonists/heretic/items/heretic_necks.dm +++ b/code/modules/antagonists/heretic/items/heretic_necks.dm @@ -1,5 +1,5 @@ /obj/item/clothing/neck/heretic_focus - name = "Amber Focus" + name = "amber focus" desc = "An amber focusing glass that provides a link to the world beyond. The necklace seems to twitch, but only when you look at it from the corner of your eye." icon_state = "eldritch_necklace" w_class = WEIGHT_CLASS_SMALL @@ -10,7 +10,7 @@ AddElement(/datum/element/heretic_focus) /obj/item/clothing/neck/heretic_focus/crimson_medallion - name = "Crimson Medallion" + name = "crimson medallion" desc = "A blood-red focusing glass that provides a link to the world beyond, and worse. Its eye is constantly twitching and gazing in all directions. It almost seems to be silently screaming..." icon_state = "crimson_medallion" /// The aura healing component. Used to delete it when taken off. @@ -105,7 +105,7 @@ . += span_red("You can also squeeze it to recover a large amount of health quickly, at a cost...") /obj/item/clothing/neck/eldritch_amulet - name = "Warm Eldritch Medallion" + name = "warm eldritch medallion" desc = "A strange medallion. Peering through the crystalline surface, the world around you melts away. You see your own beating heart, and the pulsing of a thousand others." icon = 'icons/obj/antags/eldritch.dmi' icon_state = "eye_medalion" @@ -134,7 +134,7 @@ user.update_sight() /obj/item/clothing/neck/eldritch_amulet/piercing - name = "Piercing Eldritch Medallion" + name = "piercing eldritch medallion" desc = "A strange medallion. Peering through the crystalline surface, the light refracts into new and terrifying spectrums of color. You see yourself, reflected off cascading mirrors, warped into impossible shapes." heretic_only_trait = TRAIT_XRAY_VISION @@ -149,7 +149,7 @@ // The amulet conversion tool used by moon heretics /obj/item/clothing/neck/heretic_focus/moon_amulet - name = "Moonlight Amulet" + name = "moonlight amulet" desc = "A piece of the mind, the soul and the moon. Gazing into it makes your head spin and hear whispers of laughter and joy." icon = 'icons/obj/antags/eldritch.dmi' icon_state = "moon_amulette" diff --git a/code/modules/antagonists/heretic/items/hunter_rifle.dm b/code/modules/antagonists/heretic/items/hunter_rifle.dm index 53f1c1555861b..cb8636aed2b14 100644 --- a/code/modules/antagonists/heretic/items/hunter_rifle.dm +++ b/code/modules/antagonists/heretic/items/hunter_rifle.dm @@ -12,7 +12,7 @@ inhand_icon_state = "lionhunter" worn_icon_state = "lionhunter" accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/lionhunter - fire_sound = 'sound/weapons/gun/sniper/shot.ogg' + fire_sound = 'sound/items/weapons/gun/sniper/shot.ogg' SET_BASE_PIXEL(-8, 0) @@ -64,7 +64,7 @@ return TRUE user.balloon_alert(user, "taking aim...") - user.playsound_local(get_turf(user), 'sound/weapons/gun/general/chunkyrack.ogg', 100, TRUE) + user.playsound_local(get_turf(user), 'sound/items/weapons/gun/general/chunkyrack.ogg', 100, TRUE) var/image/reticle = image( icon = 'icons/mob/actions/actions_items.dmi', diff --git a/code/modules/antagonists/heretic/items/labyrinth_handbook.dm b/code/modules/antagonists/heretic/items/labyrinth_handbook.dm index 8555b60f0c393..178b8b16da5b7 100644 --- a/code/modules/antagonists/heretic/items/labyrinth_handbook.dm +++ b/code/modules/antagonists/heretic/items/labyrinth_handbook.dm @@ -41,10 +41,12 @@ . += span_hypnophrase("Materializes a barrier upon any tile in sight, which only you can pass through. Lasts 8 seconds.") . += span_hypnophrase("It has [uses] uses left.") -/obj/item/heretic_labyrinth_handbook/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/heretic_labyrinth_handbook/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/heretic_labyrinth_handbook/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!IS_HERETIC(user)) if(ishuman(user)) var/mob/living/carbon/human/human_user = user @@ -60,7 +62,7 @@ return ITEM_INTERACT_BLOCKING turf_target.visible_message(span_warning("A storm of paper materializes!")) new /obj/effect/temp_visual/paper_scatter(turf_target) - playsound(turf_target, 'sound/magic/smoke.ogg', 30) + playsound(turf_target, 'sound/effects/magic/smoke.ogg', 30) new barrier_type(turf_target, user) uses-- if(uses <= 0) diff --git a/code/modules/antagonists/heretic/items/unfathomable_curio.dm b/code/modules/antagonists/heretic/items/unfathomable_curio.dm index 716b0927f54c6..eff1fa7ea2fe2 100644 --- a/code/modules/antagonists/heretic/items/unfathomable_curio.dm +++ b/code/modules/antagonists/heretic/items/unfathomable_curio.dm @@ -21,6 +21,7 @@ atom_storage.max_total_storage = 21 atom_storage.set_holdable(list( /obj/item/ammo_box/strilka310/lionhunter, + /obj/item/heretic_labyrinth_handbook, /obj/item/bodypart, // Bodyparts are often used in rituals. /obj/item/clothing/neck/eldritch_amulet, /obj/item/clothing/neck/heretic_focus, diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm index 315bb14b6648e..62de33105fffc 100644 --- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm @@ -230,7 +230,7 @@ priority_announce( text = "[generate_heretic_text()] Fear the blaze, for the Ashlord, [user.real_name] has ascended! The flames shall consume all! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_ash.ogg', + sound = 'sound/music/antag/heretic/ascend_ash.ogg', color_override = "pink", ) diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm index de79151739f4b..dc76f242c018f 100644 --- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm @@ -98,7 +98,7 @@ target.AdjustParalyzed(1.5 SECONDS) target.apply_damage(10, BRUTE, wound_bonus = CANT_WOUND) target.balloon_alert(source, "backstab!") - playsound(get_turf(target), 'sound/weapons/guillotine.ogg', 100, TRUE) + playsound(get_turf(target), 'sound/items/weapons/guillotine.ogg', 100, TRUE) /// The cooldown duration between trigers of blade dance #define BLADE_DANCE_COOLDOWN (20 SECONDS) @@ -147,7 +147,7 @@ if(!riposte_ready) return - if(source.incapacitated(IGNORE_GRAB)) + if(INCAPACITATED_IGNORING(source, INCAPABLE_GRAB)) return var/mob/living/attacker = hitby.loc @@ -184,7 +184,7 @@ addtimer(CALLBACK(src, PROC_REF(reset_riposte), source), BLADE_DANCE_COOLDOWN) /datum/heretic_knowledge/blade_dance/proc/counter_attack(mob/living/carbon/human/source, mob/living/target, obj/item/melee/sickly_blade/weapon, attack_text) - playsound(get_turf(source), 'sound/weapons/parry.ogg', 100, TRUE) + playsound(get_turf(source), 'sound/items/weapons/parry.ogg', 100, TRUE) source.balloon_alert(source, "riposte used") source.visible_message( span_warning("[source] leans into [attack_text] and delivers a sudden riposte back at [target]!"), @@ -423,7 +423,7 @@ priority_announce( text = "[generate_heretic_text()] Master of blades, the Torn Champion's disciple, [user.real_name] has ascended! Their steel is that which will cut reality in a maelstom of silver! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_blade.ogg', + sound = 'sound/music/antag/heretic/ascend_blade.ogg', color_override = "pink", ) ADD_TRAIT(user, TRAIT_NEVER_WOUNDED, name) diff --git a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm index a3e7576132036..f6e364766f6ef 100644 --- a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm @@ -70,7 +70,7 @@ /datum/heretic_knowledge/spell/cosmic_runes name = "Cosmic Runes" - desc = "Grants you Cosmic Runes, a spell that creates two runes linked with eachother for easy teleportation. \ + desc = "Grants you Cosmic Runes, a spell that creates two runes linked with each other for easy teleportation. \ Only the entity activating the rune will get transported, and it can be used by anyone without a star mark. \ However, people with a star mark will get transported along with another person using the rune." gain_text = "The distant stars crept into my dreams, roaring and screaming without reason. \ @@ -191,7 +191,7 @@ combo_counter += 1 if(second_target_resolved) new /obj/effect/temp_visual/cosmic_explosion(get_turf(second_target_resolved)) - playsound(get_turf(second_target_resolved), 'sound/magic/cosmic_energy.ogg', 25, FALSE) + playsound(get_turf(second_target_resolved), 'sound/effects/magic/cosmic_energy.ogg', 25, FALSE) need_mob_update = FALSE need_mob_update += second_target_resolved.adjustFireLoss(14, updating_health = FALSE) need_mob_update += second_target_resolved.adjustOrganLoss(pick(valid_organ_slots), 12) @@ -199,7 +199,7 @@ second_target_resolved.updatehealth() if(third_target_resolved) new /obj/effect/temp_visual/cosmic_domain(get_turf(third_target_resolved)) - playsound(get_turf(third_target_resolved), 'sound/magic/cosmic_energy.ogg', 50, FALSE) + playsound(get_turf(third_target_resolved), 'sound/effects/magic/cosmic_energy.ogg', 50, FALSE) need_mob_update = FALSE need_mob_update += third_target_resolved.adjustFireLoss(28, updating_health = FALSE) need_mob_update += third_target_resolved.adjustOrganLoss(pick(valid_organ_slots), 14) @@ -282,7 +282,7 @@ priority_announce( text = "[generate_heretic_text()] A Star Gazer has arrived into the station, [user.real_name] has ascended! This station is the domain of the Cosmos! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_cosmic.ogg', + sound = 'sound/music/antag/heretic/ascend_cosmic.ogg', color_override = "pink", ) var/mob/living/basic/heretic_summon/star_gazer/star_gazer_mob = new /mob/living/basic/heretic_summon/star_gazer(loc) diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm index 6dde1a3038d4a..2d75bf3119ab5 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -34,7 +34,7 @@ name = "Principle of Hunger" desc = "Opens up the Path of Flesh to you. \ Allows you to transmute a knife and a pool of blood into a Bloody Blade. \ - You can only create twenty at a time." //SKYRAT EDIT three to twenty + You can create upto twenty at a time." //SKYRAT EDIT three to twenty gain_text = "Hundreds of us starved, but not me... I found strength in my greed." next_knowledge = list(/datum/heretic_knowledge/limited_amount/flesh_grasp) required_atoms = list( @@ -42,7 +42,7 @@ /obj/effect/decal/cleanable/blood = 1, ) result_atoms = list(/obj/item/melee/sickly_blade/flesh) - limit = 3 // Bumped up so they can arm up their ghouls too. + limit = 20 // Bumped up so they can arm up their ghouls too. route = PATH_FLESH research_tree_icon_path = 'icons/obj/weapons/khopesh.dmi' research_tree_icon_state = "flesh_blade" @@ -329,7 +329,7 @@ priority_announce( text = "[generate_heretic_text()] Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, [user.real_name] has ascended! Fear the ever twisting hand! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_flesh.ogg', + sound = 'sound/music/antag/heretic/ascend_flesh.ogg', color_override = "pink", ) @@ -337,7 +337,7 @@ worm_spell.Grant(user) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) var/datum/heretic_knowledge/limited_amount/flesh_grasp/grasp_ghoul = heretic_datum.get_knowledge(/datum/heretic_knowledge/limited_amount/flesh_grasp) grasp_ghoul.limit *= 3 var/datum/heretic_knowledge/limited_amount/flesh_ghoul/ritual_ghoul = heretic_datum.get_knowledge(/datum/heretic_knowledge/limited_amount/flesh_ghoul) diff --git a/code/modules/antagonists/heretic/knowledge/general_side.dm b/code/modules/antagonists/heretic/knowledge/general_side.dm index 8216b3b256975..7b1d45fb9cf0e 100644 --- a/code/modules/antagonists/heretic/knowledge/general_side.dm +++ b/code/modules/antagonists/heretic/knowledge/general_side.dm @@ -18,7 +18,7 @@ /datum/heretic_knowledge/reroll_targets/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) // Check first if they have a Living Heart. If it's missing, we should // throw a fail to show the heretic that there's no point in rerolling // if you don't have a heart to track the targets in the first place. @@ -29,7 +29,7 @@ return TRUE /datum/heretic_knowledge/reroll_targets/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) for(var/mob/living/carbon/human/target as anything in heretic_datum.sac_targets) heretic_datum.remove_sacrifice_target(target) diff --git a/code/modules/antagonists/heretic/knowledge/lock_lore.dm b/code/modules/antagonists/heretic/knowledge/lock_lore.dm index ac375d7942a36..6761be77eda8d 100644 --- a/code/modules/antagonists/heretic/knowledge/lock_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/lock_lore.dm @@ -90,7 +90,7 @@ var/turf/target_turf = get_turf(target) SEND_SIGNAL(target_turf, COMSIG_ATOM_MAGICALLY_UNLOCKED, src, source) - playsound(target, 'sound/magic/hereticknock.ogg', 100, TRUE, -1) + playsound(target, 'sound/effects/magic/hereticknock.ogg', 100, TRUE, -1) return COMPONENT_USE_HAND @@ -240,15 +240,14 @@ priority_announce( text = "Delta-class dimensional anomaly detec[generate_heretic_text()] Reality rended, torn. Gates open, doors open, [user.real_name] has ascended! Fear the tide! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_knock.ogg', + sound = 'sound/music/antag/heretic/ascend_knock.ogg', color_override = "pink", ) // buffs var/datum/action/cooldown/spell/shapeshift/eldritch/ascension/transform_spell = new(user.mind) transform_spell.Grant(user) - - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) var/datum/heretic_knowledge/blade_upgrade/flesh/lock/blade_upgrade = heretic_datum.get_knowledge(/datum/heretic_knowledge/blade_upgrade/flesh/lock) blade_upgrade.chance += 30 new /obj/structure/lock_tear(loc, user.mind) diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm index 3c6b4e2109b69..99ee675c8ecab 100644 --- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm @@ -208,7 +208,7 @@ text = "[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \ The truth shall finally devour the lie! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_moon.ogg', + sound = 'sound/music/antag/heretic/ascend_moon.ogg', color_override = "pink", ) diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm index 3a081c8d295fb..c1c1e2a4a04c9 100644 --- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm @@ -198,7 +198,7 @@ /datum/heretic_knowledge/spell/entropic_plume/on_gain(mob/user) . = ..() - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) + var/datum/antagonist/heretic/our_heretic = GET_HERETIC(user) our_heretic.increase_rust_strength(TRUE) /datum/heretic_knowledge/ultimate/rust_final @@ -255,7 +255,7 @@ priority_announce( text = "[generate_heretic_text()] Fear the decay, for the Rustbringer, [user.real_name] has ascended! None shall escape the corrosion! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_rust.ogg', + sound = 'sound/music/antag/heretic/ascend_rust.ogg', color_override = "pink", ) trigger(loc) diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm index 30757e88a4b29..9c29d15ba67c6 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm @@ -115,7 +115,7 @@ if (isnull(spawn_turf)) return new /obj/effect/temp_visual/dir_setting/curse/grasp_portal(spawn_turf, victim.dir) - playsound(spawn_turf, 'sound/effects/curse2.ogg', 80, TRUE, -1) + playsound(spawn_turf, 'sound/effects/curse/curse2.ogg', 80, TRUE, -1) var/obj/projectile/curse_hand/hel/hand = new (spawn_turf) hand.preparePixelProjectile(victim, spawn_turf) if (QDELETED(hand)) // safety check if above fails - above has a stack trace if it does fail diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm index 78c2b64439618..54e7348f188fa 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm @@ -66,7 +66,7 @@ CRASH("Failed to lazy load heretic sacrifice template!") /datum/heretic_knowledge/hunt_and_sacrifice/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) // First we have to check if the heretic has a Living Heart. // You may wonder why we don't straight up prevent them from invoking the ritual if they don't have one - // Hunt and sacrifice should always be invokable for clarity's sake, even if it'll fail immediately. @@ -75,7 +75,7 @@ return FALSE // We've got no targets set, let's try to set some. - // If we recently failed to aquire targets, we will be unable to aquire any. + // If we recently failed to acquire targets, we will be unable to acquire any. if(!LAZYLEN(heretic_datum.sac_targets)) atoms += user return TRUE @@ -99,7 +99,7 @@ return FALSE /datum/heretic_knowledge/hunt_and_sacrifice/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) // Force it to work if the sacrifice is a cultist, even if there's no targets. var/mob/living/carbon/human/sac = selected_atoms[1] if(!LAZYLEN(heretic_datum.sac_targets) && !IS_CULTIST(sac)) @@ -189,11 +189,11 @@ * Arguments * * user - the mob doing the sacrifice (a heretic) * * selected_atoms - a list of all atoms chosen. Should be (at least) one human. - * * loc - the turf the sacrifice is occuring on + * * loc - the turf the sacrifice is occurring on */ /datum/heretic_knowledge/hunt_and_sacrifice/proc/sacrifice_process(mob/living/user, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) var/mob/living/carbon/human/sacrifice = locate() in selected_atoms if(!sacrifice) CRASH("[type] sacrifice_process didn't have a human in the atoms list. How'd it make it so far?") @@ -207,7 +207,7 @@ var/feedback = "Your patrons accept your offer" var/sac_job_flag = sacrifice.mind?.assigned_role?.job_flags | sacrifice.last_mind?.assigned_role?.job_flags - var/datum/antagonist/cult/cultist_datum = IS_CULTIST(sacrifice) + var/datum/antagonist/cult/cultist_datum = GET_CULTIST(sacrifice) // Heads give 3 points, cultists give 1 point (and a special reward), normal sacrifices give 2 points. heretic_datum.total_sacrifices++ if((sac_job_flag & JOB_HEAD_OF_STAFF)) @@ -223,7 +223,7 @@ if(prob(min(15 * rewards_given)) && (rewards_given <= 5)) for(var/datum/mind/mind as anything in cultist_datum.cult_team.members) if(mind.current) - SEND_SOUND(mind.current, 'sound/magic/clockwork/narsie_attack.ogg') + SEND_SOUND(mind.current, 'sound/effects/magic/clockwork/narsie_attack.ogg') var/message = span_narsie("A vile heretic has ") + \ span_cult_large(span_hypnophrase("sacrificed")) + \ span_narsie(" one of our own. Destroy and sacrifice the infidel before it claims more!") @@ -249,7 +249,7 @@ // Visible and audible encouragement! to_chat(user, span_big(span_hypnophrase("A servant of the Sanguine Apostate!"))) to_chat(user, span_hierophant("Your patrons are rapturous!")) - playsound(sacrifice, 'sound/magic/disintegrate.ogg', 75, TRUE) + playsound(sacrifice, 'sound/effects/magic/disintegrate.ogg', 75, TRUE) // Drop all items and splatter them around messily. var/list/dustee_items = sacrifice.unequip_everything() @@ -260,7 +260,7 @@ sacrifice.dust(TRUE, TRUE) // Increase reward counter - var/datum/antagonist/heretic/antag = IS_HERETIC(user) + var/datum/antagonist/heretic/antag = GET_HERETIC(user) antag.rewards_given++ // Cool effect for the rune as well as the item @@ -281,8 +281,8 @@ return // Remove the outline, we don't need it anymore. rune?.remove_filter("reward_outline") - playsound(loc, 'sound/magic/repulse.ogg', 75, TRUE) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + playsound(loc, 'sound/effects/magic/repulse.ogg', 75, TRUE) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) ASSERT(heretic_datum) // This list will be almost identical to unlocked_heretic_items, with the same keys, the difference being the values will be 1 to 5. var/list/rewards = heretic_datum.unlocked_heretic_items.Copy() @@ -389,7 +389,7 @@ curse_organs(sac_target) // Send 'em to the destination. If the teleport fails, just disembowel them and stop the chain - if(!destination || !do_teleport(sac_target, destination, asoundin = 'sound/magic/repulse.ogg', asoundout = 'sound/magic/blind.ogg', no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE)) + if(!destination || !do_teleport(sac_target, destination, asoundin = 'sound/effects/magic/repulse.ogg', asoundout = 'sound/effects/magic/blind.ogg', no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE)) disembowel_target(sac_target) return @@ -403,6 +403,8 @@ to_chat(sac_target, span_big(span_hypnophrase("Unnatural forces begin to claw at your every being from beyond the veil."))) + playsound(sac_target, 'sound/music/antag/heretic/heretic_sacrifice.ogg', 50, FALSE) // play theme + sac_target.apply_status_effect(/datum/status_effect/unholy_determination, SACRIFICE_REALM_DURATION) addtimer(CALLBACK(src, PROC_REF(after_target_wakes), sac_target), SACRIFICE_SLEEP_DURATION * 0.5) // Begin the minigame @@ -506,6 +508,7 @@ sac_target.remove_status_effect(/datum/status_effect/necropolis_curse) sac_target.remove_status_effect(/datum/status_effect/unholy_determination) sac_target.reagents?.del_reagent(/datum/reagent/inverse/helgrasp/heretic) + sac_target.uncuff() sac_target.clear_mood_event("shadow_realm") if(IS_HERETIC(sac_target)) var/datum/antagonist/heretic/victim_heretic = sac_target.mind?.has_antag_datum(/datum/antagonist/heretic) @@ -529,7 +532,7 @@ safe_turf = get_turf(backup_loc) stack_trace("[type] - return_target was unable to find a safe turf for [sac_target] to return to. Defaulting to observer start turf.") - if(!do_teleport(sac_target, safe_turf, asoundout = 'sound/magic/blind.ogg', no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE)) + if(!do_teleport(sac_target, safe_turf, asoundout = 'sound/effects/magic/blind.ogg', no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE)) safe_turf = get_turf(backup_loc) sac_target.forceMove(safe_turf) stack_trace("[type] - return_target was unable to teleport [sac_target] to the observer start turf. Forcemoving.") diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm index 5055d2d9628ce..07b126fe74f2f 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_map.dm @@ -91,7 +91,7 @@ GLOBAL_LIST_EMPTY(heretic_sacrifice_landmarks) /area/centcom/heretic_sacrifice/Initialize(mapload) if(!ambientsounds) - ambientsounds = GLOB.ambience_assoc[ambience_index] + 'sound/ambience/ambiatm1.ogg' + ambientsounds = GLOB.ambience_assoc[ambience_index] + 'sound/ambience/misc/ambiatm1.ogg' return ..() /area/centcom/heretic_sacrifice/ash //also, the default diff --git a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm index 3a0f17ed48391..2bae6ed540296 100644 --- a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm +++ b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm @@ -47,7 +47,7 @@ desc = "Allows you to transmute any ballistic weapon, such as a pipegun, with hide \ from any animal, a plank of wood, and a camera to create the Lionhunter's rifle. \ The Lionhunter's Rifle is a long ranged ballistic weapon with three shots. \ - These shots function as normal, albeit weak high caliber mutitions when fired from \ + These shots function as normal, albeit weak high-caliber munitions when fired from \ close range or at inanimate objects. You can aim the rifle at distant foes, \ causing the shot to deal massively increased damage and hone in on them." gain_text = "I met an old man in an antique shop who wielded a very unusual weapon. \ diff --git a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm index a958ab3f272bb..d54646fe103b2 100644 --- a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm +++ b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm @@ -37,6 +37,23 @@ route = PATH_SIDE depth = 8 +/datum/heretic_knowledge/spell/void_prison + name = "Void Prison" + desc = "Grants you Void Prison, a spell that places your victim into ball, making them unable to do anything or speak. \ + Applies void chill afterwards." + gain_text = "At first, I see myself, waltzing along a snow-laden street. \ + I try to yell, grab hold of this fool and tell them to run. \ + But the only welts made are on my own beating fist. \ + My smiling face turns to regard me, reflecting back in glassy eyes the empty path I have been lead down." + next_knowledge = list( + /datum/heretic_knowledge/spell/void_phase, + /datum/heretic_knowledge/summon/raw_prophet, + ) + spell_to_add = /datum/action/cooldown/spell/pointed/void_prison + cost = 1 + route = PATH_SIDE + depth = 8 + /datum/heretic_knowledge/spell/cleave name = "Blood Cleave" desc = "Grants you Cleave, an area-of-effect targeted spell \ diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm index d8d3b6cc5ab62..2b5186bb55019 100644 --- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm @@ -107,29 +107,26 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) return TRUE /datum/heretic_knowledge/living_heart/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) + var/datum/antagonist/heretic/our_heretic = GET_HERETIC(user) var/obj/item/organ/our_living_heart = user.get_organ_slot(our_heretic.living_heart_organ_slot) - // Obviously you need a heart in your chest to do a ritual on your... heart - if(!our_living_heart) - loc.balloon_alert(user, "ritual failed, you have no [our_heretic.living_heart_organ_slot]!") // "you have no heart!" - return FALSE - // For sanity's sake, check if they've got a heart - + // For sanity's sake, check if they've got a living heart - // even though it's not invokable if you already have one, // they may have gained one unexpectantly in between now and then - if(HAS_TRAIT(our_living_heart, TRAIT_LIVING_HEART)) - loc.balloon_alert(user, "ritual failed, already have a living heart!") - return FALSE + if(!QDELETED(our_living_heart)) + if(HAS_TRAIT(our_living_heart, TRAIT_LIVING_HEART)) + loc.balloon_alert(user, "ritual failed, already have a living heart!") + return FALSE - // By this point they are making a new heart - // If their current heart is organic / not synthetic, we can continue the ritual as normal - if(is_valid_heart(our_living_heart)) - return TRUE + // By this point they are making a new heart + // If their current heart is organic / not synthetic, we can continue the ritual as normal + if(is_valid_heart(our_living_heart)) + return TRUE - // If their current heart is not organic / is synthetic, they need an organic replacement - // ...But if our organ-to-be-replaced is unremovable, we're screwed - if(our_living_heart.organ_flags & ORGAN_UNREMOVABLE) - loc.balloon_alert(user, "ritual failed, [our_heretic.living_heart_organ_slot] unremovable!") // "heart unremovable!" - return FALSE + // If their current heart is not organic / is synthetic, they need an organic replacement + // ...But if our organ-to-be-replaced is unremovable, we're screwed + if(our_living_heart.organ_flags & ORGAN_UNREMOVABLE) + loc.balloon_alert(user, "ritual failed, [our_heretic.living_heart_organ_slot] unremovable!") // "heart unremovable!" + return FALSE // Otherwise, seek out a replacement in our atoms for(var/obj/item/organ/nearby_organ in atoms) @@ -145,23 +142,27 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) return FALSE /datum/heretic_knowledge/living_heart/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) + var/datum/antagonist/heretic/our_heretic = GET_HERETIC(user) var/obj/item/organ/our_new_heart = user.get_organ_slot(our_heretic.living_heart_organ_slot) // Our heart is robotic or synthetic - we need to replace it, and we fortunately should have one by here if(!is_valid_heart(our_new_heart)) var/obj/item/organ/our_replacement_heart = locate(required_organ_type) in selected_atoms - if(our_replacement_heart) + if(!our_replacement_heart) + CRASH("[type] required a replacement organic heart in on_finished_recipe, but did not find one.") + // Repair the organic heart, if needed, to just below the high threshold + if(our_replacement_heart.damage >= our_replacement_heart.high_threshold) + our_replacement_heart.set_organ_damage(our_replacement_heart.high_threshold - 1) + // And now, put our organic heart in its place + our_replacement_heart.Insert(user, TRUE, TRUE) + if(our_new_heart) // Throw our current heart out of our chest, violently user.visible_message(span_boldwarning("[user]'s [our_new_heart.name] bursts suddenly out of [user.p_their()] chest!")) INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, emote), "scream") user.apply_damage(20, BRUTE, BODY_ZONE_CHEST) - // And put our organic heart in its place - our_replacement_heart.Insert(user, TRUE, TRUE) + selected_atoms -= our_new_heart // so we don't delete our old heart while we dramatically toss is out our_new_heart.throw_at(get_edge_target_turf(user, pick(GLOB.alldirs)), 2, 2) - our_new_heart = our_replacement_heart - else - CRASH("[type] required a replacement organic heart in on_finished_recipe, but did not find one.") + our_new_heart = our_replacement_heart if(!our_new_heart) CRASH("[type] somehow made it to on_finished_recipe without a heart. What?") @@ -177,12 +178,12 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) // Make it the living heart our_new_heart.AddComponent(/datum/component/living_heart) to_chat(user, span_warning("You feel your [our_new_heart.name] begin pulse faster and faster as it awakens!")) - playsound(user, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(user, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) return TRUE /// Checks if the passed heart is a valid heart to become a living heart /datum/heretic_knowledge/living_heart/proc/is_valid_heart(obj/item/organ/new_heart) - if(!new_heart) + if(QDELETED(new_heart)) return FALSE if(!new_heart.useable) return FALSE @@ -233,7 +234,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) gain_text = "The occult leaves fragments of knowledge and power anywhere and everywhere. The Codex Cicatrix is one such example. \ Within the leather-bound faces and age old pages, a path into the Mansus is revealed." required_atoms = list( - /obj/item/book = 1, + list(/obj/item/toy/eldritch_book, /obj/item/book) = 1, /obj/item/pen = 1, list(/mob/living, /obj/item/stack/sheet/leather, /obj/item/stack/sheet/animalhide) = 1, ) @@ -271,7 +272,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) /datum/heretic_knowledge/codex_cicatrix/cleanup_atoms(list/selected_atoms) var/mob/living/body = locate() in selected_atoms if(!body) - return + return ..() // A golem or an android doesn't have skin! var/exterior_text = "skin" // If carbon, it's the limb. If not, it's the body. @@ -296,7 +297,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) var/obj/item/book/le_book = locate() in selected_atoms if(!le_book) stack_trace("Somehow, no book in codex cicatrix selected atoms! [english_list(selected_atoms)]") - playsound(body, 'sound/items/poster_ripped.ogg', 100, TRUE) + playsound(body, 'sound/items/poster/poster_ripped.ogg', 100, TRUE) body.do_jitter_animation() body.visible_message(span_danger("An awful ripping sound is heard as [ripped_thing]'s [exterior_text] is ripped straight out, wrapping around [le_book || "the book"], turning into an eldritch shade of blue!")) return ..() @@ -319,7 +320,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) var/alert = tgui_alert(user,"Do you really want to forsake your ascension? This action cannot be reverted.", "Feast of Owls", list("Yes I'm sure", "No"), 30 SECONDS) if(alert != "Yes I'm sure" || QDELETED(user) || QDELETED(src) || get_dist(user, loc) > 2) return FALSE - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) if(QDELETED(heretic_datum) || heretic_datum.feast_of_owls) return FALSE @@ -328,7 +329,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) heretic_datum.feast_of_owls = TRUE user.set_temp_blindness(reward * 1 SECONDS) user.AdjustParalyzed(reward * 1 SECONDS) - user.playsound_local(get_turf(user), 'sound/ambience/antag/heretic/heretic_gain_intense.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) + user.playsound_local(get_turf(user), 'sound/music/antag/heretic/heretic_gain_intense.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) for(var/i in 1 to reward) user.emote("scream") playsound(loc, 'sound/items/eatfood.ogg', 100, TRUE) @@ -340,6 +341,6 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) return FALSE to_chat(user, span_danger(span_big("Your ambition is ravaged, but something powerful remains in its wake..."))) - var/drain_message = pick(strings(HERETIC_INFLUENCE_FILE, "drain_message")) + var/drain_message = pick_list(HERETIC_INFLUENCE_FILE, "drain_message") to_chat(user, span_hypnophrase(span_big("[drain_message]"))) return . diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm index 51f0146fca38d..1268609a88db3 100644 --- a/code/modules/antagonists/heretic/knowledge/void_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm @@ -12,9 +12,10 @@ * * Mark of Void * Ritual of Knowledge - * Cone of Cold + * Void Conduit * Void Phase * > Sidepaths: + * Void Stasis * Carving Knife * Blood Siphon * @@ -78,7 +79,7 @@ var/mob/living/carbon/carbon_target = target carbon_target.adjust_silence(10 SECONDS) - carbon_target.apply_status_effect(/datum/status_effect/void_chill) + carbon_target.apply_status_effect(/datum/status_effect/void_chill, 2) /datum/heretic_knowledge/cold_snap name = "Aristocrat's Way" @@ -96,12 +97,29 @@ research_tree_icon_path = 'icons/effects/effects.dmi' research_tree_icon_state = "the_freezer" depth = 4 + /// Traits we apply to become immune to the environment + var/static/list/gain_traits = list(TRAIT_NO_SLIP_ICE, TRAIT_NO_SLIP_SLIDE) /datum/heretic_knowledge/cold_snap/on_gain(mob/user, datum/antagonist/heretic/our_heretic) user.add_traits(list(TRAIT_NOBREATH, TRAIT_RESISTCOLD), type) + RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(check_environment)) /datum/heretic_knowledge/cold_snap/on_lose(mob/user, datum/antagonist/heretic/our_heretic) user.remove_traits(list(TRAIT_RESISTCOLD, TRAIT_NOBREATH), type) + UnregisterSignal(user, COMSIG_LIVING_LIFE) + +///Checks if our traits should be active +/datum/heretic_knowledge/cold_snap/proc/check_environment(mob/living/user) + SIGNAL_HANDLER + + var/datum/gas_mixture/environment = user.loc?.return_air() + if(!isnull(environment)) + var/affected_temperature = environment.return_temperature() + var/affected_pressure = environment.return_pressure() + if(affected_temperature <= T0C || affected_pressure < ONE_ATMOSPHERE) + user.add_traits(gain_traits, type) + else + user.remove_traits(gain_traits, type) /datum/heretic_knowledge/mark/void_mark name = "Mark of Void" @@ -114,17 +132,17 @@ mark_type = /datum/status_effect/eldritch/void /datum/heretic_knowledge/knowledge_ritual/void - next_knowledge = list(/datum/heretic_knowledge/spell/void_cone) + next_knowledge = list(/datum/heretic_knowledge/spell/void_conduit) route = PATH_VOID -/datum/heretic_knowledge/spell/void_cone - name = "Void Blast" - desc = "Grants you Void Blast, a spell that shoots out a freezing blast in a cone in front of you, \ - freezing the ground and any victims within." - gain_text = "Every door I open racks my body. I am afraid of what is behind them. Someone is expecting me, \ - and my legs start to drag. Is that... snow?" +/datum/heretic_knowledge/spell/void_conduit + name = "Void Conduit" + desc = "Grants you Void Conduit, a spell which summons a pulsing gate to the Void itself. Every pulse breaks windows and airlocks, while afflicting Heathens with an eldritch chill and shielding Heretics against low pressure." + gain_text = "The hum in the still, cold air turns to a cacophonous rattle. \ + Over the noise, there is no distinction to the clattering of window panes and the yawning knowledge that ricochets through my skull. \ + The doors won't close. I can't keep the cold out now." next_knowledge = list(/datum/heretic_knowledge/spell/void_phase) - spell_to_add = /datum/action/cooldown/spell/cone/staggered/cone_of_cold/void + spell_to_add = /datum/action/cooldown/spell/conjure/void_conduit cost = 1 route = PATH_VOID depth = 7 @@ -139,6 +157,7 @@ /datum/heretic_knowledge/blade_upgrade/void, /datum/heretic_knowledge/reroll_targets, /datum/heretic_knowledge/spell/blood_siphon, + /datum/heretic_knowledge/spell/void_prison, /datum/heretic_knowledge/rune_carver, ) spell_to_add = /datum/action/cooldown/spell/pointed/void_phase @@ -149,13 +168,19 @@ /datum/heretic_knowledge/blade_upgrade/void name = "Seeking Blade" - desc = "You can now attack distant marked targets with your Void Blade, teleporting directly next to them." + desc = "Your blade now freezes enemies. Additionally, you can now attack distant marked targets with your Void Blade, teleporting directly next to them." gain_text = "Fleeting memories, fleeting feet. I mark my way with frozen blood upon the snow. Covered and forgotten." next_knowledge = list(/datum/heretic_knowledge/spell/void_pull) route = PATH_VOID research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' research_tree_icon_state = "blade_upgrade_void" +/datum/heretic_knowledge/blade_upgrade/void/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) + if(source == target) + return + + target.apply_status_effect(/datum/status_effect/void_chill, 2) + /datum/heretic_knowledge/blade_upgrade/void/do_ranged_effects(mob/living/user, mob/living/target, obj/item/melee/sickly_blade/blade) if(!target.has_status_effect(/datum/status_effect/eldritch)) return @@ -200,6 +225,8 @@ var/datum/looping_sound/void_loop/sound_loop ///Reference to the ongoing voidstrom that surrounds the heretic var/datum/weather/void_storm/storm + ///The storm where there are actual effects + var/datum/proximity_monitor/advanced/void_storm/heavy_storm /datum/heretic_knowledge/ultimate/void_final/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) if(!isopenturf(loc)) @@ -218,19 +245,25 @@ priority_announce( text = "[generate_heretic_text()] The nobleman of void [user.real_name] has arrived, stepping along the Waltz that ends worlds! [generate_heretic_text()]", title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_void.ogg', + sound = 'sound/music/antag/heretic/ascend_void.ogg', color_override = "pink", ) - ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT) + user.add_traits(list(TRAIT_RESISTLOWPRESSURE, TRAIT_NEGATES_GRAVITY, TRAIT_MOVE_FLYING, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAGIC_TRAIT) // Let's get this show on the road! sound_loop = new(user, TRUE, TRUE) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) - RegisterSignal(user, COMSIG_LIVING_DEATH, PROC_REF(on_death)) + RegisterSignal(user, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(hit_by_projectile)) + RegisterSignals(user, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING), PROC_REF(on_death)) + heavy_storm = new(user, 10) + if(ishuman(user)) + var/mob/living/carbon/human/ascended_human = user + var/obj/item/organ/internal/eyes/heretic_eyes = ascended_human.get_organ_slot(ORGAN_SLOT_EYES) + heretic_eyes?.color_cutoffs = list(30, 30, 30) + ascended_human.update_sight() /datum/heretic_knowledge/ultimate/void_final/on_lose(mob/user, datum/antagonist/heretic/our_heretic) on_death() // Losing is pretty much dying. I think - RegisterSignals(user, list(COMSIG_LIVING_LIFE, COMSIG_LIVING_DEATH)) /** * Signal proc for [COMSIG_LIVING_LIFE]. @@ -243,10 +276,29 @@ /datum/heretic_knowledge/ultimate/void_final/proc/on_life(mob/living/source, seconds_per_tick, times_fired) SIGNAL_HANDLER - for(var/mob/living/carbon/close_carbon in view(5, source)) - if(IS_HERETIC_OR_MONSTER(close_carbon)) - continue - close_carbon.adjust_silence_up_to(2 SECONDS, 20 SECONDS) + for(var/atom/thing_in_range as anything in range(10, source)) + if(iscarbon(thing_in_range)) + var/mob/living/carbon/close_carbon = thing_in_range + if(IS_HERETIC_OR_MONSTER(close_carbon)) + close_carbon.apply_status_effect(/datum/status_effect/void_conduit) + continue + close_carbon.adjust_silence_up_to(2 SECONDS, 20 SECONDS) + close_carbon.apply_status_effect(/datum/status_effect/void_chill, 1) + close_carbon.adjust_eye_blur(rand(0 SECONDS, 2 SECONDS)) + close_carbon.adjust_bodytemperature(-30 * TEMPERATURE_DAMAGE_COEFFICIENT) + + if(istype(thing_in_range, /obj/machinery/door) || istype(thing_in_range, /obj/structure/door_assembly)) + var/obj/affected_door = thing_in_range + affected_door.take_damage(rand(60, 80)) + + if(istype(thing_in_range, /obj/structure/window) || istype(thing_in_range, /obj/structure/grille)) + var/obj/structure/affected_structure = thing_in_range + affected_structure.take_damage(rand(20, 40)) + + if(isturf(thing_in_range)) + var/turf/affected_turf = thing_in_range + var/datum/gas_mixture/environment = affected_turf.return_air() + environment.temperature *= 0.9 // Telegraph the storm in every area on the station. var/list/station_levels = SSmapping.levels_by_trait(ZTRAIT_STATION) @@ -254,14 +306,6 @@ storm = new /datum/weather/void_storm(station_levels) storm.telegraph() - // When the heretic enters a new area, intensify the storm in the new area, - // and lessen the intensity in the former area. - var/area/source_area = get_area(source) - if(!storm.impacted_areas[source_area]) - storm.former_impacted_areas |= storm.impacted_areas - storm.impacted_areas = list(source_area) - storm.update_areas() - /** * Signal proc for [COMSIG_LIVING_DEATH]. * @@ -275,3 +319,32 @@ if(storm) storm.end() QDEL_NULL(storm) + if(heavy_storm) + QDEL_NULL(heavy_storm) + UnregisterSignal(source, list(COMSIG_LIVING_LIFE, COMSIG_ATOM_PRE_BULLET_ACT, COMSIG_LIVING_DEATH, COMSIG_QDELETING)) + +///Few checks to determine if we can deflect bullets +/datum/heretic_knowledge/ultimate/void_final/proc/can_deflect(mob/living/ascended_heretic) + if(!(ascended_heretic.mobility_flags & MOBILITY_USE)) + return FALSE + if(!isturf(ascended_heretic.loc)) + return FALSE + return TRUE + +/datum/heretic_knowledge/ultimate/void_final/proc/hit_by_projectile(mob/living/ascended_heretic, obj/projectile/hitting_projectile, def_zone) + SIGNAL_HANDLER + + if(!can_deflect(ascended_heretic)) + return NONE + + ascended_heretic.visible_message( + span_danger("The void storm surrounding [ascended_heretic] deflects [hitting_projectile]!"), + span_userdanger("The void storm protects you from [hitting_projectile]!"), + ) + playsound(ascended_heretic, pick('sound/effects/magic/VoidDeflect01.ogg', 'sound/effects/magic/VoidDeflect02.ogg', 'sound/effects/magic/VoidDeflect03.ogg'), 75, TRUE) + hitting_projectile.firer = ascended_heretic + if(prob(75)) + hitting_projectile.set_angle(get_angle(hitting_projectile.firer, hitting_projectile.fired_from)) + else + hitting_projectile.set_angle(rand(0, 360))//SHING + return COMPONENT_BULLET_PIERCED diff --git a/code/modules/antagonists/heretic/magic/aggressive_spread.dm b/code/modules/antagonists/heretic/magic/aggressive_spread.dm index dfb4a94847406..77c6a6227deb8 100644 --- a/code/modules/antagonists/heretic/magic/aggressive_spread.dm +++ b/code/modules/antagonists/heretic/magic/aggressive_spread.dm @@ -5,7 +5,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "corrode" - sound = 'sound/items/welder.ogg' + sound = 'sound/items/tools/welder.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS diff --git a/code/modules/antagonists/heretic/magic/ascended_shapeshift.dm b/code/modules/antagonists/heretic/magic/ascended_shapeshift.dm index e792dc116da6f..a11c8d1d3a93a 100644 --- a/code/modules/antagonists/heretic/magic/ascended_shapeshift.dm +++ b/code/modules/antagonists/heretic/magic/ascended_shapeshift.dm @@ -20,7 +20,7 @@ if(!.) return //buff our forms so this ascension ability isnt shit - playsound(caster, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(caster, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) var/mob/living/monster = . monster.AddComponent(/datum/component/seethrough_mob) monster.maxHealth *= 1.5 diff --git a/code/modules/antagonists/heretic/magic/ash_ascension.dm b/code/modules/antagonists/heretic/magic/ash_ascension.dm index 8b564198a61eb..f4ed8686c1053 100644 --- a/code/modules/antagonists/heretic/magic/ash_ascension.dm +++ b/code/modules/antagonists/heretic/magic/ash_ascension.dm @@ -67,7 +67,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "fire_ring" - sound = 'sound/items/welder.ogg' + sound = 'sound/items/tools/welder.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS @@ -151,7 +151,7 @@ if(L.can_block_magic()) L.visible_message(span_danger("The spell bounces off of [L]!"), span_danger("The spell bounces off of you!")) continue - if(L in hit_list || L == source) + if((L in hit_list) || L == source) continue hit_list += L L.adjustFireLoss(20) diff --git a/code/modules/antagonists/heretic/magic/blood_siphon.dm b/code/modules/antagonists/heretic/magic/blood_siphon.dm index 1e3d6258826d4..1801b6d9dbc9f 100644 --- a/code/modules/antagonists/heretic/magic/blood_siphon.dm +++ b/code/modules/antagonists/heretic/magic/blood_siphon.dm @@ -25,7 +25,7 @@ /datum/action/cooldown/spell/pointed/blood_siphon/cast(mob/living/cast_on) . = ..() - playsound(owner, 'sound/magic/demon_attack1.ogg', 75, TRUE) + playsound(owner, 'sound/effects/magic/demon_attack1.ogg', 75, TRUE) if(cast_on.can_block_magic()) owner.balloon_alert(owner, "spell blocked!") cast_on.visible_message( diff --git a/code/modules/antagonists/heretic/magic/caretaker.dm b/code/modules/antagonists/heretic/magic/caretaker.dm index 86ff285001917..b882386329a89 100644 --- a/code/modules/antagonists/heretic/magic/caretaker.dm +++ b/code/modules/antagonists/heretic/magic/caretaker.dm @@ -8,7 +8,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "caretaker" - sound = 'sound/effects/curse2.ogg' + sound = 'sound/effects/curse/curse2.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 1 MINUTES diff --git a/code/modules/antagonists/heretic/magic/cosmic_expansion.dm b/code/modules/antagonists/heretic/magic/cosmic_expansion.dm index 3fb197d392cb0..9baf3366f4ba8 100644 --- a/code/modules/antagonists/heretic/magic/cosmic_expansion.dm +++ b/code/modules/antagonists/heretic/magic/cosmic_expansion.dm @@ -7,7 +7,7 @@ button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "cosmic_domain" - sound = 'sound/magic/cosmic_expansion.ogg' + sound = 'sound/effects/magic/cosmic_expansion.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 45 SECONDS diff --git a/code/modules/antagonists/heretic/magic/cosmic_runes.dm b/code/modules/antagonists/heretic/magic/cosmic_runes.dm index 207b60ae9393a..1003920dfa9ad 100644 --- a/code/modules/antagonists/heretic/magic/cosmic_runes.dm +++ b/code/modules/antagonists/heretic/magic/cosmic_runes.dm @@ -7,7 +7,7 @@ button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "cosmic_rune" - sound = 'sound/magic/forcewall.ogg' + sound = 'sound/effects/magic/forcewall.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 15 SECONDS @@ -99,8 +99,8 @@ get_turf(linked_rune_resolved), no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC, - asoundin = 'sound/magic/cosmic_energy.ogg', - asoundout = 'sound/magic/cosmic_energy.ogg', + asoundin = 'sound/effects/magic/cosmic_energy.ogg', + asoundout = 'sound/effects/magic/cosmic_energy.ogg', ) for(var/mob/living/person_on_rune in get_turf(src)) if(person_on_rune.has_status_effect(/datum/status_effect/star_mark)) diff --git a/code/modules/antagonists/heretic/magic/expand_sight.dm b/code/modules/antagonists/heretic/magic/expand_sight.dm index e9715c9a77926..126a5a180ec2f 100644 --- a/code/modules/antagonists/heretic/magic/expand_sight.dm +++ b/code/modules/antagonists/heretic/magic/expand_sight.dm @@ -17,7 +17,7 @@ /datum/action/innate/expand_sight/Activate() active = TRUE owner.client?.view_size.setTo(boost_to) - playsound(owner, pick('sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg'), 50, TRUE, ignore_walls = FALSE) + playsound(owner, pick('sound/effects/hallucinations/i_see_you1.ogg', 'sound/effects/hallucinations/i_see_you2.ogg'), 50, TRUE, ignore_walls = FALSE) COOLDOWN_START(src, last_toggle, 8 SECONDS) /datum/action/innate/expand_sight/Deactivate() diff --git a/code/modules/antagonists/heretic/magic/fire_blast.dm b/code/modules/antagonists/heretic/magic/fire_blast.dm index 4c17ca5ffc0de..104b4697cd2d0 100644 --- a/code/modules/antagonists/heretic/magic/fire_blast.dm +++ b/code/modules/antagonists/heretic/magic/fire_blast.dm @@ -7,7 +7,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "flames" - sound = 'sound/magic/fireball.ogg' + sound = 'sound/effects/magic/fireball.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 45 SECONDS diff --git a/code/modules/antagonists/heretic/magic/flesh_surgery.dm b/code/modules/antagonists/heretic/magic/flesh_surgery.dm index ff474f063198f..87d1927cc977c 100644 --- a/code/modules/antagonists/heretic/magic/flesh_surgery.dm +++ b/code/modules/antagonists/heretic/magic/flesh_surgery.dm @@ -96,7 +96,7 @@ var/organ_hp_to_heal = to_heal.maxHealth * organ_percent_healing to_heal.set_organ_damage(max(0 , to_heal.damage - organ_hp_to_heal)) to_heal.balloon_alert(caster, "organ healed") - playsound(to_heal, 'sound/magic/staff_healing.ogg', 30) + playsound(to_heal, 'sound/effects/magic/staff_healing.ogg', 30) new /obj/effect/temp_visual/cult/sparks(get_turf(to_heal)) var/condition = (to_heal.damage > 0) ? "better" : "perfect" caster.visible_message( @@ -118,7 +118,7 @@ // while for human minions(ghouls), this will heal brute and burn like normal. So be careful adjusting to bigger numbers to_heal.balloon_alert(caster, "[what_are_we] healed") to_heal.heal_overall_damage(monster_brute_healing, monster_burn_healing) - playsound(to_heal, 'sound/magic/staff_healing.ogg', 30) + playsound(to_heal, 'sound/effects/magic/staff_healing.ogg', 30) new /obj/effect/temp_visual/cult/sparks(get_turf(to_heal)) caster.visible_message( span_warning("[caster]'s hand glows a brilliant red as [caster.p_they()] restore[caster.p_s()] [to_heal] to good condition!"), @@ -181,7 +181,7 @@ ) carbon_victim.balloon_alert(caster, "extracting [chosen_organ]...") - playsound(victim, 'sound/weapons/slice.ogg', 50, TRUE) + playsound(victim, 'sound/items/weapons/slice.ogg', 50, TRUE) carbon_victim.add_atom_colour(COLOR_DARK_RED, TEMPORARY_COLOUR_PRIORITY) if(!do_after(caster, time_it_takes, carbon_victim, extra_checks = CALLBACK(src, PROC_REF(extraction_checks), picked_organ, hand, victim, caster))) carbon_victim.balloon_alert(caster, "interrupted!") diff --git a/code/modules/antagonists/heretic/magic/furious_steel.dm b/code/modules/antagonists/heretic/magic/furious_steel.dm index 0ab882a9289e1..d61ce5d1a3920 100644 --- a/code/modules/antagonists/heretic/magic/furious_steel.dm +++ b/code/modules/antagonists/heretic/magic/furious_steel.dm @@ -7,7 +7,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "furious_steel" - sound = 'sound/weapons/guillotine.ogg' + sound = 'sound/items/weapons/guillotine.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 60 SECONDS @@ -155,7 +155,7 @@ overlay_icon_state = "bg_cult_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "cursed_steel" - sound = 'sound/weapons/guillotine.ogg' + sound = 'sound/items/weapons/guillotine.ogg' cooldown_time = 40 SECONDS invocation = "IA!" diff --git a/code/modules/antagonists/heretic/magic/mansus_grasp.dm b/code/modules/antagonists/heretic/magic/mansus_grasp.dm index 43dde25374f89..67df0f2be0468 100644 --- a/code/modules/antagonists/heretic/magic/mansus_grasp.dm +++ b/code/modules/antagonists/heretic/magic/mansus_grasp.dm @@ -5,7 +5,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "mansus_grasp" - sound = 'sound/items/welder.ogg' + sound = 'sound/items/tools/welder.ogg' school = SCHOOL_EVOCATION cooldown_time = 10 SECONDS @@ -56,7 +56,7 @@ carbon_hit.color = COLOR_CULT_RED animate(carbon_hit, color = old_color, time = 4 SECONDS, easing = EASE_IN) carbon_hit.mob_light(range = 1.5, power = 2.5, color = COLOR_CULT_RED, duration = 0.5 SECONDS) - playsound(carbon_hit, 'sound/magic/curse.ogg', 50, TRUE) + playsound(carbon_hit, 'sound/effects/magic/curse.ogg', 50, TRUE) to_chat(caster, span_warning("An unholy force intervenes as you grasp [carbon_hit], absorbing most of the effects!")) to_chat(carbon_hit, span_warning("As [caster] grasps you with eldritch forces, your blood magic absorbs most of the effects!")) diff --git a/code/modules/antagonists/heretic/magic/mind_gate.dm b/code/modules/antagonists/heretic/magic/mind_gate.dm index c5a6e74452a61..7963c4d6c0266 100644 --- a/code/modules/antagonists/heretic/magic/mind_gate.dm +++ b/code/modules/antagonists/heretic/magic/mind_gate.dm @@ -7,7 +7,7 @@ button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "mind_gate" - sound = 'sound/magic/curse.ogg' + sound = 'sound/effects/magic/curse.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 20 SECONDS diff --git a/code/modules/antagonists/heretic/magic/mirror_walk.dm b/code/modules/antagonists/heretic/magic/mirror_walk.dm index b9029e1ab072d..93642c7f324d4 100644 --- a/code/modules/antagonists/heretic/magic/mirror_walk.dm +++ b/code/modules/antagonists/heretic/magic/mirror_walk.dm @@ -67,7 +67,7 @@ if(!do_after(jaunter, phase_out_time, nearby_reflection, IGNORE_USER_LOC_CHANGE|IGNORE_INCAPACITATED, hidden = TRUE)) return - playsound(jaunter, 'sound/magic/ethereal_enter.ogg', 50, TRUE, -1) + playsound(jaunter, 'sound/effects/magic/ethereal_enter.ogg', 50, TRUE, -1) jaunter.visible_message( span_boldwarning("[jaunter] phases out of reality, vanishing before your very eyes!"), span_notice("You jump into the reflection coming off of [nearby_reflection], entering the mirror's realm."), @@ -107,7 +107,7 @@ /datum/action/cooldown/spell/jaunt/mirror_walk/on_jaunt_exited(obj/effect/dummy/phased_mob/jaunt, mob/living/unjaunter) . = ..() UnregisterSignal(jaunt, COMSIG_MOVABLE_MOVED) - playsound(unjaunter, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) + playsound(unjaunter, 'sound/effects/magic/ethereal_exit.ogg', 50, TRUE, -1) var/turf/phase_turf = get_turf(unjaunter) // Chilly! diff --git a/code/modules/antagonists/heretic/magic/moon_parade.dm b/code/modules/antagonists/heretic/magic/moon_parade.dm index 3b7f1d007cd6e..e6457a6a2b101 100644 --- a/code/modules/antagonists/heretic/magic/moon_parade.dm +++ b/code/modules/antagonists/heretic/magic/moon_parade.dm @@ -7,7 +7,7 @@ button_icon_state = "moon_parade" ranged_mousepointer = 'icons/effects/mouse_pointers/moon_target.dmi' - sound = 'sound/magic/cosmic_energy.ogg' + sound = 'sound/effects/magic/cosmic_energy.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS diff --git a/code/modules/antagonists/heretic/magic/moon_smile.dm b/code/modules/antagonists/heretic/magic/moon_smile.dm index 35f2d77e3e6b6..63bcc4cc84831 100644 --- a/code/modules/antagonists/heretic/magic/moon_smile.dm +++ b/code/modules/antagonists/heretic/magic/moon_smile.dm @@ -8,7 +8,7 @@ button_icon_state = "moon_smile" ranged_mousepointer = 'icons/effects/mouse_pointers/moon_target.dmi' - sound = 'sound/magic/blind.ogg' + sound = 'sound/effects/magic/blind.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 20 SECONDS @@ -35,7 +35,7 @@ to_chat(owner, span_warning("The moon does not smile upon them.")) return FALSE - playsound(cast_on, 'sound/hallucinations/i_see_you1.ogg', 50, 1) + playsound(cast_on, 'sound/effects/hallucinations/i_see_you1.ogg', 50, 1) to_chat(cast_on, span_warning("Your eyes cry out in pain, your ears bleed and your lips seal! THE MOON SMILES UPON YOU!")) cast_on.adjust_temp_blindness(moon_smile_duration + 1 SECONDS) cast_on.set_eye_blur_if_lower(moon_smile_duration + 2 SECONDS) diff --git a/code/modules/antagonists/heretic/magic/realignment.dm b/code/modules/antagonists/heretic/magic/realignment.dm index d3ddc03fbbef3..8ad6ce7829970 100644 --- a/code/modules/antagonists/heretic/magic/realignment.dm +++ b/code/modules/antagonists/heretic/magic/realignment.dm @@ -7,7 +7,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/hud/implants.dmi' button_icon_state = "adrenal" - // sound = 'sound/magic/whistlereset.ogg' + // sound = 'sound/effects/magic/whistlereset.ogg' I have no idea why this was commented out school = SCHOOL_FORBIDDEN cooldown_time = 6 SECONDS diff --git a/code/modules/antagonists/heretic/magic/rust_wave.dm b/code/modules/antagonists/heretic/magic/rust_wave.dm index 0282a32b2b687..b109a068042b9 100644 --- a/code/modules/antagonists/heretic/magic/rust_wave.dm +++ b/code/modules/antagonists/heretic/magic/rust_wave.dm @@ -8,7 +8,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "entropic_plume" - sound = 'sound/magic/forcewall.ogg' + sound = 'sound/effects/magic/forcewall.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS @@ -90,7 +90,7 @@ alpha = 180 damage = 30 damage_type = TOX - hitsound = 'sound/weapons/punch3.ogg' + hitsound = 'sound/items/weapons/punch3.ogg' trigger_range = 0 ignored_factions = list(FACTION_HERETIC) range = 15 @@ -98,7 +98,7 @@ /obj/projectile/magic/aoe/rust_wave/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() - playsound(src, 'sound/items/welder.ogg', 75, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 75, TRUE) var/list/turflist = list() var/turf/T1 turflist += get_turf(src) diff --git a/code/modules/antagonists/heretic/magic/shadow_cloak.dm b/code/modules/antagonists/heretic/magic/shadow_cloak.dm index ef135441c3657..ca0ca1fa15b05 100644 --- a/code/modules/antagonists/heretic/magic/shadow_cloak.dm +++ b/code/modules/antagonists/heretic/magic/shadow_cloak.dm @@ -7,7 +7,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "ninja_cloak" - sound = 'sound/effects/curse2.ogg' + sound = 'sound/effects/curse/curse2.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 6 SECONDS @@ -28,17 +28,20 @@ return ..() /datum/action/cooldown/spell/shadow_cloak/is_valid_target(atom/cast_on) - return isliving(cast_on) && !HAS_TRAIT(cast_on, TRAIT_HULK) // Hulks are not stealthy. Need not apply + if(HAS_TRAIT(cast_on, TRAIT_HULK)) // Hulks are not stealthy. Need not apply + cast_on.balloon_alert(cast_on, "cannot cast while hulk!") + return FALSE + return isliving(cast_on) /datum/action/cooldown/spell/shadow_cloak/before_cast(mob/living/cast_on) . = ..() sound = pick( - 'sound/effects/curse1.ogg', - 'sound/effects/curse2.ogg', - 'sound/effects/curse3.ogg', - 'sound/effects/curse4.ogg', - 'sound/effects/curse5.ogg', - 'sound/effects/curse6.ogg', + 'sound/effects/curse/curse1.ogg', + 'sound/effects/curse/curse2.ogg', + 'sound/effects/curse/curse3.ogg', + 'sound/effects/curse/curse4.ogg', + 'sound/effects/curse/curse5.ogg', + 'sound/effects/curse/curse6.ogg', ) // We handle the CD on our own return . | SPELL_NO_IMMEDIATE_COOLDOWN @@ -63,7 +66,7 @@ StartCooldown(uncloak_timer / 3) /datum/action/cooldown/spell/shadow_cloak/proc/cloak_mob(mob/living/cast_on) - playsound(cast_on, 'sound/chemistry/ahaha.ogg', 50, TRUE, -1, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = 0.5) + playsound(cast_on, 'sound/effects/chemistry/ahaha.ogg', 50, TRUE, -1, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = 0.5) cast_on.visible_message( span_warning("[cast_on] disappears into the shadows!"), span_notice("You disappear into the shadows, becoming unidentifiable."), @@ -80,7 +83,7 @@ active_cloak = null UnregisterSignal(cast_on, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING)) - playsound(cast_on, 'sound/effects/curseattack.ogg', 50) + playsound(cast_on, 'sound/effects/curse/curseattack.ogg', 50) if(show_message) cast_on.visible_message( span_warning("[cast_on] appears from the shadows!"), diff --git a/code/modules/antagonists/heretic/magic/space_crawl.dm b/code/modules/antagonists/heretic/magic/space_crawl.dm index 90f74a37047f3..6a96403872f11 100644 --- a/code/modules/antagonists/heretic/magic/space_crawl.dm +++ b/code/modules/antagonists/heretic/magic/space_crawl.dm @@ -83,8 +83,7 @@ jaunter.put_in_hands(right_hand) RegisterSignal(jaunter, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), PROC_REF(on_focus_lost)) - RegisterSignal(jaunter, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_change)) - playsound(our_turf, 'sound/magic/cosmic_energy.ogg', 50, TRUE, -1) + playsound(our_turf, 'sound/effects/magic/cosmic_energy.ogg', 50, TRUE, -1) our_turf.visible_message(span_warning("[jaunter] sinks into [our_turf]!")) new /obj/effect/temp_visual/space_explosion(our_turf) jaunter.extinguish_mob() @@ -107,8 +106,8 @@ /datum/action/cooldown/spell/jaunt/space_crawl/on_jaunt_exited(obj/effect/dummy/phased_mob/jaunt, mob/living/unjaunter) UnregisterSignal(jaunt, COMSIG_MOVABLE_MOVED) - UnregisterSignal(unjaunter, list(SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), COMSIG_MOB_STATCHANGE)) - playsound(get_turf(unjaunter), 'sound/magic/cosmic_energy.ogg', 50, TRUE, -1) + UnregisterSignal(unjaunter, list(SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING))) + playsound(get_turf(unjaunter), 'sound/effects/magic/cosmic_energy.ogg', 50, TRUE, -1) new /obj/effect/temp_visual/space_explosion(get_turf(unjaunter)) if(iscarbon(unjaunter)) for(var/obj/item/space_crawl/space_hand in unjaunter.held_items) @@ -122,13 +121,6 @@ var/turf/our_turf = get_turf(source) try_exit_jaunt(our_turf, source, TRUE) -/// Signal proc for [COMSIG_MOB_STATCHANGE], to throw us out of the jaunt if we lose consciousness. -/datum/action/cooldown/spell/jaunt/space_crawl/proc/on_stat_change(mob/living/source, new_stat, old_stat) - SIGNAL_HANDLER - if(new_stat != CONSCIOUS) - var/turf/our_turf = get_turf(source) - try_exit_jaunt(our_turf, source, TRUE) - /// Spacecrawl "hands", prevent the user from holding items in spacecrawl /obj/item/space_crawl name = "space crawl" diff --git a/code/modules/antagonists/heretic/magic/star_blast.dm b/code/modules/antagonists/heretic/magic/star_blast.dm index 3eb62b7ada814..e6f7a96811e40 100644 --- a/code/modules/antagonists/heretic/magic/star_blast.dm +++ b/code/modules/antagonists/heretic/magic/star_blast.dm @@ -6,7 +6,7 @@ button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "star_blast" - sound = 'sound/magic/cosmic_energy.ogg' + sound = 'sound/effects/magic/cosmic_energy.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 20 SECONDS @@ -46,7 +46,7 @@ nearby_mob.apply_status_effect(/datum/status_effect/star_mark, cast_on) /obj/projectile/magic/star_ball/Destroy() - playsound(get_turf(src), 'sound/magic/cosmic_energy.ogg', 50, FALSE) + playsound(get_turf(src), 'sound/effects/magic/cosmic_energy.ogg', 50, FALSE) for(var/turf/cast_turf as anything in get_turfs()) new /obj/effect/forcefield/cosmic_field(cast_turf) return ..() diff --git a/code/modules/antagonists/heretic/magic/star_touch.dm b/code/modules/antagonists/heretic/magic/star_touch.dm index 89c5d02e7d498..d9cd5a05eab2b 100644 --- a/code/modules/antagonists/heretic/magic/star_touch.dm +++ b/code/modules/antagonists/heretic/magic/star_touch.dm @@ -10,7 +10,7 @@ button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "star_touch" - sound = 'sound/items/welder.ogg' + sound = 'sound/items/tools/welder.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 15 SECONDS invocation = "ST'R 'N'RG'!" @@ -107,8 +107,8 @@ get_turf(star_gazer_mob), no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC, - asoundin = 'sound/magic/cosmic_energy.ogg', - asoundout = 'sound/magic/cosmic_energy.ogg', + asoundin = 'sound/effects/magic/cosmic_energy.ogg', + asoundout = 'sound/effects/magic/cosmic_energy.ogg', ) remove_hand_with_no_refund(user) diff --git a/code/modules/antagonists/heretic/magic/void_conduit.dm b/code/modules/antagonists/heretic/magic/void_conduit.dm new file mode 100644 index 0000000000000..036415269c975 --- /dev/null +++ b/code/modules/antagonists/heretic/magic/void_conduit.dm @@ -0,0 +1,128 @@ +/datum/action/cooldown/spell/conjure/void_conduit + name = "Void Conduit" + desc = "Opens a gate to the Void; it releases an intermittent pulse that damages windows and airlocks, \ + while afflicting Heathens with void chill. \ + Affected Heretics instead receive low pressure resistance." + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "void_rift" + + cooldown_time = 1 MINUTES + + sound = null + school = SCHOOL_FORBIDDEN + invocation = "MBR'C' TH' V''D!" + invocation_type = INVOCATION_SHOUT + spell_requirements = NONE + + summon_radius = 0 + summon_type = list(/obj/structure/void_conduit) + summon_respects_density = TRUE + summon_respects_prev_spawn_points = TRUE + +/obj/structure/void_conduit + name = "Void Conduit" + desc = "An open gate which leads to nothingness. Releases pulses which you do not want to get hit by." + icon = 'icons/effects/effects.dmi' + icon_state = "void_conduit" + anchored = TRUE + density = TRUE + ///Overlay to apply to the tiles in range of the conduit + var/static/image/void_overlay = image(icon = 'icons/turf/overlays.dmi', icon_state = "voidtile") + ///List of tiles that we added an overlay to, so we can clear them when the conduit is deleted + var/list/overlayed_turfs = list() + ///How many tiles far our effect is + var/effect_range = 8 + ///id of the deletion timer + var/timerid + ///Audio loop for the rift being alive + var/datum/looping_sound/void_conduit/soundloop + +/obj/structure/void_conduit/Initialize(mapload) + . = ..() + soundloop = new(src, start_immediately = TRUE) + timerid = QDEL_IN_STOPPABLE(src, 1 MINUTES) + START_PROCESSING(SSobj, src) + build_view_turfs() + +/obj/structure/void_conduit/proc/build_view_turfs() + for(var/turf/affected_turf as anything in overlayed_turfs) + affected_turf.cut_overlay(void_overlay) + for(var/turf/affected_turf as anything in view(effect_range, src)) + if(!isopenturf(affected_turf)) + continue + affected_turf.add_overlay(void_overlay) + overlayed_turfs += affected_turf + void_overlay.mouse_opacity = MOUSE_OPACITY_TRANSPARENT + void_overlay.alpha = 180 + +/obj/structure/void_conduit/Destroy(force) + QDEL_NULL(soundloop) + deltimer(timerid) + STOP_PROCESSING(SSobj, src) + for(var/turf/affected_turf as anything in overlayed_turfs) //If the portal is moved, the overlays don't stick around + affected_turf.cut_overlay(void_overlay) + return ..() + +/obj/structure/void_conduit/process(seconds_per_tick) + build_view_turfs() + do_conduit_pulse() + +///Sends out a pulse +/obj/structure/void_conduit/proc/do_conduit_pulse() + var/list/turfs_to_affect = list() + for(var/turf/affected_turf as anything in view(effect_range, loc)) + var/distance = get_dist(loc, affected_turf) + if(!turfs_to_affect["[distance]"]) + turfs_to_affect["[distance]"] = list() + turfs_to_affect["[distance]"] += affected_turf + + for(var/distance in 0 to effect_range) + if(!turfs_to_affect["[distance]"]) + continue + addtimer(CALLBACK(src, PROC_REF(handle_effects), turfs_to_affect["[distance]"]), (1 SECONDS) * distance) + + new /obj/effect/temp_visual/circle_wave/void_conduit(get_turf(src)) + +///Applies the effects of the pulse "hitting" something. Freezes non-heretic, destroys airlocks/windows +/obj/structure/void_conduit/proc/handle_effects(list/turfs) + for(var/turf/affected_turf as anything in turfs) + for(var/atom/thing_to_affect as anything in affected_turf.contents) + + if(isliving(thing_to_affect)) + var/mob/living/affected_mob = thing_to_affect + if(affected_mob.can_block_magic(MAGIC_RESISTANCE)) + continue + if(IS_HERETIC(affected_mob)) + affected_mob.apply_status_effect(/datum/status_effect/void_conduit) + else + affected_mob.apply_status_effect(/datum/status_effect/void_chill, 1) + + if(istype(thing_to_affect, /obj/machinery/door) || istype(thing_to_affect, /obj/structure/door_assembly)) + var/obj/affected_door = thing_to_affect + affected_door.take_damage(rand(15, 30)) + + if(istype(thing_to_affect, /obj/structure/window) || istype(thing_to_affect, /obj/structure/grille)) + var/obj/structure/affected_structure = thing_to_affect + affected_structure.take_damage(rand(10, 20)) + +/datum/looping_sound/void_conduit + mid_sounds = 'sound/ambience/misc/ambiatm1.ogg' + mid_length = 1 SECONDS + extra_range = 10 + volume = 40 + falloff_distance = 5 + falloff_exponent = 20 + +/datum/status_effect/void_conduit + duration = 15 SECONDS + status_type = STATUS_EFFECT_REPLACE + alert_type = null + +/datum/status_effect/void_conduit/on_apply() + ADD_TRAIT(owner, TRAIT_RESISTLOWPRESSURE, "void_conduit") + return TRUE + +/datum/status_effect/void_conduit/on_remove() + REMOVE_TRAIT(owner, TRAIT_RESISTLOWPRESSURE, "void_conduit") diff --git a/code/modules/antagonists/heretic/magic/void_phase.dm b/code/modules/antagonists/heretic/magic/void_phase.dm index 350ca0f29c100..473fa057cf54c 100644 --- a/code/modules/antagonists/heretic/magic/void_phase.dm +++ b/code/modules/antagonists/heretic/magic/void_phase.dm @@ -10,7 +10,7 @@ ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' school = SCHOOL_FORBIDDEN - cooldown_time = 30 SECONDS + cooldown_time = 25 SECONDS invocation = "RE'L'TY PH'S'E." invocation_type = INVOCATION_WHISPER @@ -50,13 +50,14 @@ /// Does the AOE effect of the blinka t the passed turf /datum/action/cooldown/spell/pointed/void_phase/proc/cause_aoe(turf/target_turf, effect_type = /obj/effect/temp_visual/voidin) new effect_type(target_turf) - playsound(target_turf, 'sound/magic/voidblink.ogg', 60, FALSE) + playsound(target_turf, 'sound/effects/magic/voidblink.ogg', 60, FALSE) for(var/mob/living/living_mob in range(damage_radius, target_turf)) if(IS_HERETIC_OR_MONSTER(living_mob) || living_mob == owner) continue if(living_mob.can_block_magic(antimagic_flags)) continue living_mob.apply_damage(40, BRUTE, wound_bonus = CANT_WOUND) + living_mob.apply_status_effect(/datum/status_effect/void_chill, 1) /obj/effect/temp_visual/voidin icon = 'icons/effects/96x96.dmi' diff --git a/code/modules/antagonists/heretic/magic/void_prison.dm b/code/modules/antagonists/heretic/magic/void_prison.dm new file mode 100644 index 0000000000000..cfd85c92b6e1c --- /dev/null +++ b/code/modules/antagonists/heretic/magic/void_prison.dm @@ -0,0 +1,101 @@ +/datum/action/cooldown/spell/pointed/void_prison + name = "Void Prison" + desc = "Sends a heathen into the void for 10 seconds. \ + They will be unable to perform any actions for the duration. \ + Afterwards, they will be chilled and returned to the mortal plane." + background_icon_state = "bg_heretic" + overlay_icon_state = "bg_heretic_border" + button_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "voidball" + ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' + sound = 'sound/effects/magic/voidblink.ogg' + + cooldown_time = 1 MINUTES + cast_range = 3 + + sound = null + school = SCHOOL_FORBIDDEN + invocation = "V''D PR'S'N!" + invocation_type = INVOCATION_SHOUT + spell_requirements = NONE + +/datum/action/cooldown/spell/pointed/void_prison/before_cast(atom/cast_on) + . = ..() + if(. & SPELL_CANCEL_CAST) + return + if(!ismob(cast_on)) + return SPELL_CANCEL_CAST + +/datum/action/cooldown/spell/pointed/void_prison/cast(mob/living/carbon/human/cast_on) + . = ..() + if(cast_on.can_block_magic(antimagic_flags)) + cast_on.visible_message( + span_danger("A swirling, cold void wraps around [cast_on], but they burst free in a wave of heat!"), + span_danger("A yawning void begins to open before you, but a great wave of heat bursts it apart! You are protected!!") + ) + return + cast_on.apply_status_effect(/datum/status_effect/void_prison, "void_stasis") + +/datum/status_effect/void_prison + id = "void_prison" + duration = 10 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/void_prison + ///The overlay that gets applied to whoever has this status active + var/obj/effect/abstract/voidball/stasis_overlay + +/datum/status_effect/void_prison/on_creation(mob/living/new_owner, set_duration) + . = ..() + stasis_overlay = new /obj/effect/abstract/voidball(new_owner) + RegisterSignal(stasis_overlay, COMSIG_QDELETING, PROC_REF(clear_overlay)) + new_owner.vis_contents += stasis_overlay + stasis_overlay.animate_opening() + addtimer(CALLBACK(src, PROC_REF(enter_prison), new_owner), 1 SECONDS) + +/datum/status_effect/void_prison/on_remove() + if(!IS_HERETIC(owner)) + owner.apply_status_effect(/datum/status_effect/void_chill, 3) + if(stasis_overlay) + //Free our prisoner + owner.remove_traits(list(TRAIT_GODMODE, TRAIT_NO_TRANSFORM, TRAIT_SOFTSPOKEN), REF(src)) + owner.forceMove(get_turf(stasis_overlay)) + stasis_overlay.forceMove(owner) + owner.vis_contents += stasis_overlay + //Animate closing the ball + stasis_overlay.animate_closing() + stasis_overlay.icon_state = "voidball_closed" + QDEL_IN(stasis_overlay, 1.1 SECONDS) + stasis_overlay = null + return ..() + +///Freezes our prisoner in place +/datum/status_effect/void_prison/proc/enter_prison(mob/living/prisoner) + stasis_overlay.forceMove(prisoner.loc) + prisoner.forceMove(stasis_overlay) + prisoner.add_traits(list(TRAIT_GODMODE, TRAIT_NO_TRANSFORM, TRAIT_SOFTSPOKEN), REF(src)) + +///Makes sure to clear the ref in case the voidball ever suddenly disappears +/datum/status_effect/void_prison/proc/clear_overlay() + SIGNAL_HANDLER + stasis_overlay = null + +//----Voidball effect +/obj/effect/abstract/voidball + icon = 'icons/mob/actions/actions_ecult.dmi' + icon_state = "voidball_effect" + layer = ABOVE_ALL_MOB_LAYER + vis_flags = VIS_INHERIT_ID + +///Plays a opening animation +/obj/effect/abstract/voidball/proc/animate_opening() + flick("voidball_opening", src) + +///Plays a closing animation +/obj/effect/abstract/voidball/proc/animate_closing() + flick("voidball_closing", src) + +//---- Screen alert +/atom/movable/screen/alert/status_effect/void_prison + name = "Void Prison" + desc = "A Yawning void encases your mortal coil." //Go straight to jail, do not pass GO, do not collect 200$ + icon = 'icons/mob/actions/actions_ecult.dmi' + icon_state = "voidball_effect" diff --git a/code/modules/antagonists/heretic/magic/void_pull.dm b/code/modules/antagonists/heretic/magic/void_pull.dm index 2021bf8a04e4f..4e73ff6f49bf9 100644 --- a/code/modules/antagonists/heretic/magic/void_pull.dm +++ b/code/modules/antagonists/heretic/magic/void_pull.dm @@ -6,10 +6,10 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "voidpull" - sound = 'sound/magic/voidblink.ogg' + sound = 'sound/effects/magic/voidblink.ogg' school = SCHOOL_FORBIDDEN - cooldown_time = 40 SECONDS + cooldown_time = 30 SECONDS invocation = "BR'NG F'RTH TH'M T' M'." invocation_type = INVOCATION_WHISPER @@ -32,6 +32,7 @@ // Before we cast the actual effects, deal AOE damage to anyone adjacent to us for(var/mob/living/nearby_living as anything in get_things_to_cast_on(cast_on, damage_radius)) nearby_living.apply_damage(30, BRUTE, wound_bonus = CANT_WOUND) + nearby_living.apply_status_effect(/datum/status_effect/void_chill, 1) /datum/action/cooldown/spell/aoe/void_pull/get_things_to_cast_on(atom/center, radius_override = 1) var/list/things = list() diff --git a/code/modules/antagonists/heretic/magic/wave_of_desperation.dm b/code/modules/antagonists/heretic/magic/wave_of_desperation.dm index 3b78b56ddc0ba..16e3440ebbeec 100644 --- a/code/modules/antagonists/heretic/magic/wave_of_desperation.dm +++ b/code/modules/antagonists/heretic/magic/wave_of_desperation.dm @@ -6,7 +6,7 @@ overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "uncuff" - sound = 'sound/magic/swap.ogg' + sound = 'sound/effects/magic/swap.ogg' school = SCHOOL_FORBIDDEN cooldown_time = 5 MINUTES diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index 1668ea5a11ef7..d60129ae3d930 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -190,7 +190,7 @@ var/obj/effect/floating_blade/to_remove = blades[1] - playsound(get_turf(source), 'sound/weapons/parry.ogg', 100, TRUE) + playsound(get_turf(source), 'sound/items/weapons/parry.ogg', 100, TRUE) source.visible_message( span_warning("[to_remove] orbiting [source] snaps in front of [attack_text], blocking it before vanishing!"), span_warning("[to_remove] orbiting you snaps in front of [attack_text], blocking it before vanishing!"), @@ -251,11 +251,10 @@ status_type = STATUS_EFFECT_REFRESH duration = -1 alert_type = null - var/static/list/caretaking_traits = list(TRAIT_HANDS_BLOCKED, TRAIT_IGNORESLOWDOWN, TRAIT_SECLUDED_LOCATION) + var/static/list/caretaking_traits = list(TRAIT_GODMODE, TRAIT_HANDS_BLOCKED, TRAIT_IGNORESLOWDOWN, TRAIT_SECLUDED_LOCATION) /datum/status_effect/caretaker_refuge/on_apply() owner.add_traits(caretaking_traits, TRAIT_STATUS_EFFECT(id)) - owner.status_flags |= GODMODE animate(owner, alpha = 45,time = 0.5 SECONDS) owner.density = FALSE RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), PROC_REF(on_focus_lost)) @@ -266,7 +265,6 @@ /datum/status_effect/caretaker_refuge/on_remove() owner.remove_traits(caretaking_traits, TRAIT_STATUS_EFFECT(id)) - owner.status_flags &= ~GODMODE owner.alpha = initial(owner.alpha) owner.density = initial(owner.density) UnregisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING)) @@ -283,7 +281,7 @@ /datum/status_effect/caretaker_refuge/proc/nullrod_handler(datum/source, obj/item/weapon) SIGNAL_HANDLER - playsound(get_turf(owner), 'sound/effects/curse1.ogg', 80, TRUE) + playsound(get_turf(owner), 'sound/effects/curse/curse1.ogg', 80, TRUE) owner.visible_message(span_warning("[weapon] repels the haze around [owner]!")) owner.remove_status_effect(type) diff --git a/code/modules/antagonists/heretic/status_effects/debuffs.dm b/code/modules/antagonists/heretic/status_effects/debuffs.dm index 7037d1cc3778b..8b1751bccde69 100644 --- a/code/modules/antagonists/heretic/status_effects/debuffs.dm +++ b/code/modules/antagonists/heretic/status_effects/debuffs.dm @@ -1,41 +1,3 @@ -// VOID CHILL -/datum/status_effect/void_chill - id = "void_chill" - alert_type = /atom/movable/screen/alert/status_effect/void_chill - duration = 8 SECONDS - status_type = STATUS_EFFECT_REPLACE - tick_interval = 0.5 SECONDS - /// The amount the victim's body temperature changes each tick() in kelvin. Multiplied by TEMPERATURE_DAMAGE_COEFFICIENT. - var/cooling_per_tick = -14 - -/atom/movable/screen/alert/status_effect/void_chill - name = "Void Chill" - desc = "There's something freezing you from within and without. You've never felt cold this oppressive before..." - icon_state = "void_chill" - -/datum/status_effect/void_chill/on_apply() - owner.add_atom_colour(COLOR_BLUE_LIGHT, TEMPORARY_COLOUR_PRIORITY) - owner.add_movespeed_modifier(/datum/movespeed_modifier/void_chill, update = TRUE) - return TRUE - -/datum/status_effect/void_chill/on_remove() - owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_BLUE_LIGHT) - owner.remove_movespeed_modifier(/datum/movespeed_modifier/void_chill, update = TRUE) - -/datum/status_effect/void_chill/tick(seconds_between_ticks) - owner.adjust_bodytemperature(cooling_per_tick * TEMPERATURE_DAMAGE_COEFFICIENT) - -/datum/status_effect/void_chill/major - duration = 10 SECONDS - cooling_per_tick = -20 - -/datum/status_effect/void_chill/lasting - id = "lasting_void_chill" - duration = -1 - -/datum/movespeed_modifier/void_chill - multiplicative_slowdown = 0.3 - // AMOK /datum/status_effect/amok id = "amok" diff --git a/code/modules/antagonists/heretic/status_effects/mark_effects.dm b/code/modules/antagonists/heretic/status_effects/mark_effects.dm index b234fb604c241..2521794907231 100644 --- a/code/modules/antagonists/heretic/status_effects/mark_effects.dm +++ b/code/modules/antagonists/heretic/status_effects/mark_effects.dm @@ -47,10 +47,10 @@ /datum/status_effect/eldritch/proc/on_effect() SHOULD_CALL_PARENT(TRUE) - playsound(owner, 'sound/magic/repulse.ogg', 75, TRUE) + playsound(owner, 'sound/effects/magic/repulse.ogg', 75, TRUE) qdel(src) //what happens when this is procced. -//Each mark has diffrent effects when it is destroyed that combine with the mansus grasp effect. +//Each mark has different effects when it is destroyed that combine with the mansus grasp effect. // MARK OF FLESH @@ -105,7 +105,7 @@ effect_icon_state = "emark4" /datum/status_effect/eldritch/void/on_effect() - owner.apply_status_effect(/datum/status_effect/void_chill/major) + owner.apply_status_effect(/datum/status_effect/void_chill, 3) owner.adjust_silence(10 SECONDS) return ..() @@ -284,5 +284,5 @@ . = ..() UnregisterSignal (owner, COMSIG_MOB_APPLY_DAMAGE) - // Incase the trait was not removed earlier + // In case the trait was not removed earlier REMOVE_TRAIT(owner, TRAIT_PACIFISM, id) diff --git a/code/modules/antagonists/heretic/status_effects/void_chill.dm b/code/modules/antagonists/heretic/status_effects/void_chill.dm new file mode 100644 index 0000000000000..ed4bf1f3cb521 --- /dev/null +++ b/code/modules/antagonists/heretic/status_effects/void_chill.dm @@ -0,0 +1,113 @@ +/*! + * Contains the "Void Chill" status effect. Harmful debuff which freezes and slows down non-heretics + * Cannot affect silicons (How are you gonna freeze a robot?) + */ +/datum/status_effect/void_chill + id = "void_chill" + duration = 30 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/void_chill + status_type = STATUS_EFFECT_REFRESH //Custom code + on_remove_on_mob_delete = TRUE + remove_on_fullheal = TRUE + ///Current amount of stacks we have + var/stacks + ///Maximum of stacks that we could possibly get + var/stack_limit = 5 + ///icon for the overlay + var/image/stacks_overlay + +/datum/status_effect/void_chill/on_creation(mob/living/new_owner, new_stacks, ...) + . = ..() + RegisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(update_stacks_overlay)) + set_stacks(new_stacks) + owner.add_atom_colour(COLOR_BLUE_LIGHT, TEMPORARY_COLOUR_PRIORITY) + owner.update_icon(UPDATE_OVERLAYS) + +/datum/status_effect/void_chill/on_apply() + if(issilicon(owner)) + return FALSE + return TRUE + +/datum/status_effect/void_chill/on_remove() + owner.update_icon(UPDATE_OVERLAYS) + owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_BLUE_LIGHT) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/void_chill) + owner.remove_alt_appearance("heretic_status") + REMOVE_TRAIT(owner, TRAIT_HYPOTHERMIC, REF(src)) + UnregisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS) + +/datum/status_effect/void_chill/tick(seconds_between_ticks) + owner.adjust_bodytemperature(-12 * stacks * seconds_between_ticks) + +/datum/status_effect/void_chill/refresh(mob/living/new_owner, new_stacks, forced = FALSE) + . = ..() + if(forced) + set_stacks(new_stacks) + else + adjust_stacks(new_stacks) + owner.update_icon(UPDATE_OVERLAYS) + +///Updates the overlay that gets applied on our victim +/datum/status_effect/void_chill/proc/update_stacks_overlay(atom/parent_atom, list/overlays) + SIGNAL_HANDLER + + linked_alert?.update_appearance(UPDATE_ICON_STATE|UPDATE_DESC) + owner.remove_alt_appearance("heretic_status") + stacks_overlay = image('icons/effects/effects.dmi', owner, "void_chill_partial") + if(stacks >= 5) + stacks_overlay = image('icons/effects/effects.dmi', owner, "void_chill_oh_fuck") + owner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/heretic, "heretic_status", stacks_overlay, NONE) + +/** + * Setter and adjuster procs for stacks + * + * Arguments: + * - new_stacks + * + */ + +/datum/status_effect/void_chill/proc/set_stacks(new_stacks) + stacks = max(0, min(stack_limit, new_stacks)) + update_movespeed(stacks) + +/datum/status_effect/void_chill/proc/adjust_stacks(new_stacks) + stacks = max(0, min(stack_limit, stacks + new_stacks)) + update_movespeed(stacks) + if(stacks >= 5) + ADD_TRAIT(owner, TRAIT_HYPOTHERMIC, REF(src)) + +///Updates the movespeed of owner based on the amount of stacks of the debuff +/datum/status_effect/void_chill/proc/update_movespeed(stacks) + owner.add_movespeed_modifier(/datum/movespeed_modifier/void_chill, update = TRUE) + owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/void_chill, update = TRUE, multiplicative_slowdown = (0.5 * stacks)) + linked_alert.maptext = MAPTEXT_TINY_UNICODE("[stacks]") + +/datum/status_effect/void_chill/lasting + id = "lasting_void_chill" + duration = -1 + +/datum/movespeed_modifier/void_chill + variable = TRUE + multiplicative_slowdown = 0.1 + +//---- Screen alert +/atom/movable/screen/alert/status_effect/void_chill + name = "Void Chill" + desc = "There's something freezing you from within and without. You've never felt cold this oppressive before..." + icon_state = "void_chill_minor" + +/atom/movable/screen/alert/status_effect/void_chill/update_icon_state() + . = ..() + if(!istype(attached_effect, /datum/status_effect/void_chill)) + return + var/datum/status_effect/void_chill/chill_effect = attached_effect + if(chill_effect.stacks >= 5) + icon_state = "void_chill_oh_fuck" + +/atom/movable/screen/alert/status_effect/void_chill/update_desc(updates) + . = ..() + if(!istype(attached_effect, /datum/status_effect/void_chill)) + return + var/datum/status_effect/void_chill/chill_effect = attached_effect + if(chill_effect.stacks >= 5) + desc = "You had your chance to run, now it's too late. You may never feel warmth again..." diff --git a/code/modules/antagonists/heretic/structures/carving_knife.dm b/code/modules/antagonists/heretic/structures/carving_knife.dm index 70133e951af91..72b224d117dd4 100644 --- a/code/modules/antagonists/heretic/structures/carving_knife.dm +++ b/code/modules/antagonists/heretic/structures/carving_knife.dm @@ -11,7 +11,7 @@ wound_bonus = 20 force = 10 throwforce = 20 - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends") attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") actions_types = list(/datum/action/item_action/rune_shatter) @@ -152,7 +152,7 @@ if(!.) return - owner.playsound_local(get_turf(owner), 'sound/magic/blind.ogg', 50, TRUE) + owner.playsound_local(get_turf(owner), 'sound/effects/magic/blind.ogg', 50, TRUE) var/obj/item/melee/rune_carver/target_sword = target QDEL_LIST(target_sword.current_runes) target_sword.SpinAnimation(5, 1) @@ -203,7 +203,7 @@ var/mob/living/real_owner = owner?.resolve() if(real_owner) to_chat(real_owner, span_userdanger("[victim.real_name] has stepped foot on the alert rune in [get_area(src)]!")) - real_owner.playsound_local(get_turf(real_owner), 'sound/magic/curse.ogg', 50, TRUE) + real_owner.playsound_local(get_turf(real_owner), 'sound/effects/magic/curse.ogg', 50, TRUE) /obj/structure/trap/eldritch/tentacle name = "grasping carving" @@ -219,7 +219,7 @@ carbon_victim.Paralyze(5 SECONDS) carbon_victim.apply_damage(20, BRUTE, BODY_ZONE_R_LEG) carbon_victim.apply_damage(20, BRUTE, BODY_ZONE_L_LEG) - playsound(src, 'sound/magic/demon_attack1.ogg', 75, TRUE) + playsound(src, 'sound/effects/magic/demon_attack1.ogg', 75, TRUE) /obj/structure/trap/eldritch/mad name = "mad carving" @@ -240,4 +240,4 @@ carbon_victim.set_dizzy_if_lower(40 SECONDS) carbon_victim.adjust_temp_blindness(4 SECONDS) carbon_victim.add_mood_event("gates_of_mansus", /datum/mood_event/gates_of_mansus) - playsound(src, 'sound/magic/blind.ogg', 75, TRUE) + playsound(src, 'sound/effects/magic/blind.ogg', 75, TRUE) diff --git a/code/modules/antagonists/heretic/structures/lock_final.dm b/code/modules/antagonists/heretic/structures/lock_final.dm index 759bc8aa55e39..295ecbb3a2b91 100644 --- a/code/modules/antagonists/heretic/structures/lock_final.dm +++ b/code/modules/antagonists/heretic/structures/lock_final.dm @@ -1,6 +1,6 @@ /obj/structure/lock_tear name = "???" - desc = "It stares back. Theres no reason to remain. Run." + desc = "It stares back. There's no reason to remain. Run." max_integrity = INFINITE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF icon = 'icons/obj/anomaly.dmi' @@ -47,7 +47,7 @@ /obj/structure/lock_tear/proc/end_madness(datum/former_master) SIGNAL_HANDLER var/turf/our_turf = get_turf(src) - playsound(our_turf, 'sound/magic/castsummon.ogg', vol = 100, vary = TRUE) + playsound(our_turf, 'sound/effects/magic/castsummon.ogg', vol = 100, vary = TRUE) visible_message(span_boldwarning("The rip in space spasms and disappears!")) UnregisterSignal(former_master, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING)) // Just in case they die THEN delete new /obj/effect/temp_visual/destabilising_tear(our_turf) diff --git a/code/modules/antagonists/heretic/structures/mawed_crucible.dm b/code/modules/antagonists/heretic/structures/mawed_crucible.dm index 2135ffa134ca5..ea962cbc5a4e1 100644 --- a/code/modules/antagonists/heretic/structures/mawed_crucible.dm +++ b/code/modules/antagonists/heretic/structures/mawed_crucible.dm @@ -6,7 +6,7 @@ icon = 'icons/obj/antags/eldritch.dmi' icon_state = "crucible" base_icon_state = "crucible" - break_sound = 'sound/hallucinations/wail.ogg' + break_sound = 'sound/effects/hallucinations/wail.ogg' light_power = 1 anchored = TRUE density = TRUE @@ -31,7 +31,7 @@ for(var/turf/nearby_turf as anything in get_adjacent_open_turfs(our_turf)) if(prob(10 * current_mass)) new /obj/effect/decal/cleanable/greenglow(nearby_turf) - playsound(our_turf, 'sound/effects/bubbles2.ogg', 50, TRUE) + playsound(our_turf, 'sound/effects/bubbles/bubbles2.ogg', 50, TRUE) return ..() @@ -69,12 +69,6 @@ bite_the_hand(user) return TRUE - if(istype(weapon, /obj/item/codex_cicatrix) || istype(weapon, /obj/item/melee/touch_attack/mansus_fist)) - playsound(src, 'sound/items/deconstruct.ogg', 30, TRUE, ignore_walls = FALSE) - set_anchored(!anchored) - balloon_alert(user, "[anchored ? "":"un"]anchored") - return TRUE - if(isbodypart(weapon)) var/obj/item/bodypart/consumed = weapon @@ -99,6 +93,13 @@ return ..() +/obj/structure/destructible/eldritch_crucible/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/codex_cicatrix) || istype(tool, /obj/item/melee/touch_attack/mansus_fist)) + playsound(src, 'sound/items/deconstruct.ogg', 30, TRUE, ignore_walls = FALSE) + set_anchored(!anchored) + balloon_alert(user, "[anchored ? "":"un"]anchored") + return ITEM_INTERACT_SUCCESS + /obj/structure/destructible/eldritch_crucible/attack_hand(mob/user, list/modifiers) . = ..() if(.) @@ -163,7 +164,7 @@ var/obj/item/spawned_pot = new spawned_type(drop_location()) - playsound(src, 'sound/misc/desecration-02.ogg', 75, TRUE) + playsound(src, 'sound/effects/desecration/desecration-02.ogg', 75, TRUE) visible_message(span_notice("[src]'s shining liquid drains into a flask, creating a [spawned_pot.name]!")) balloon_alert(user, "potion created") @@ -237,7 +238,7 @@ if(!iscarbon(user)) return - playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) + playsound(src, 'sound/effects/bubbles/bubbles.ogg', 50, TRUE) if(!IS_HERETIC_OR_MONSTER(user)) to_chat(user, span_danger("You down some of the liquid from [src]. The taste causes you to retch, and the glass vanishes.")) diff --git a/code/modules/antagonists/heretic/transmutation_rune.dm b/code/modules/antagonists/heretic/transmutation_rune.dm index 0c510e34ff28e..b04e8a4caf196 100644 --- a/code/modules/antagonists/heretic/transmutation_rune.dm +++ b/code/modules/antagonists/heretic/transmutation_rune.dm @@ -50,7 +50,7 @@ /obj/effect/heretic_rune/proc/try_rituals(mob/living/user) is_in_use = TRUE - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) var/list/rituals = heretic_datum.get_rituals() if(!length(rituals)) loc.balloon_alert(user, "no rituals available!") @@ -167,7 +167,7 @@ // This doesn't necessarily mean the ritual will succeed, but it's valid! // Do the animations and associated feedback. flick("[icon_state]_active", src) - playsound(user, 'sound/magic/castsummon.ogg', 75, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_exponent = 10) + playsound(user, 'sound/effects/magic/castsummon.ogg', 75, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_exponent = 10) // - We temporarily make all of our chosen atoms invisible, as some rituals may sleep, // and we don't want people to be able to run off with ritual items. @@ -233,6 +233,11 @@ set_greyscale(colors = list(path_colour)) icon_state = animation_state + var/image/silicon_image = image(icon = 'icons/effects/eldritch.dmi', icon_state = null, loc = src) + silicon_image.override = TRUE + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "heretic_rune", silicon_image) + + /obj/effect/temp_visual/drawing_heretic_rune/fast duration = 12 SECONDS animation_state = "transmutation_rune_fast" diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm index 3c78cdb1774e1..6812bc2620a3e 100644 --- a/code/modules/antagonists/highlander/highlander.dm +++ b/code/modules/antagonists/highlander/highlander.dm @@ -43,8 +43,8 @@ . = ..() /datum/antagonist/highlander/greet() - to_chat(owner, "Your [sword.name] cries out for blood. Claim the lives of others, and your own will be restored!\n\ - Activate it in your hand, and it will lead to the nearest target. Attack the nuclear authentication disk with it, and you will store it.") + to_chat(owner, span_boldannounce("Your [sword.name] cries out for blood. Claim the lives of others, and your own will be restored!\n\ + Activate it in your hand, and it will lead to the nearest target. Attack the nuclear authentication disk with it, and you will store it.")) owner.announce_objectives() @@ -88,8 +88,8 @@ name = "\improper highlander" /datum/antagonist/highlander/robot/greet() - to_chat(owner, "Your integrated claymore cries out for blood. Claim the lives of others, and your own will be restored!\n\ - Activate it in your hand, and it will lead to the nearest target. Attack the nuclear authentication disk with it, and you will store it.") + to_chat(owner, span_boldannounce("Your integrated claymore cries out for blood. Claim the lives of others, and your own will be restored!\n\ + Activate it in your hand, and it will lead to the nearest target. Attack the nuclear authentication disk with it, and you will store it.")) /datum/antagonist/highlander/robot/give_equipment() var/mob/living/silicon/robot/robotlander = owner.current diff --git a/code/modules/antagonists/hypnotized/hypnotized.dm b/code/modules/antagonists/hypnotized/hypnotized.dm index fc1e5d7d5ad24..bde67390bf7fb 100644 --- a/code/modules/antagonists/hypnotized/hypnotized.dm +++ b/code/modules/antagonists/hypnotized/hypnotized.dm @@ -1,7 +1,7 @@ /// Antag datum associated with the hypnosis brain trauma, used for displaying objectives and antag hud /datum/antagonist/hypnotized name = "\improper Hypnotized Victim" - stinger_sound = 'sound/ambience/antag/hypnotized.ogg' + stinger_sound = 'sound/music/antag/hypnotized.ogg' job_rank = ROLE_HYPNOTIZED roundend_category = "hypnotized victims" antag_hud_name = "brainwashed" diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm index 624f181dea2dd..3c4e0296f91cb 100644 --- a/code/modules/antagonists/malf_ai/malf_ai.dm +++ b/code/modules/antagonists/malf_ai/malf_ai.dm @@ -21,7 +21,7 @@ ///since the module purchasing is built into the antag info, we need to keep track of its compact mode here var/module_picker_compactmode = FALSE ///malf on_gain sound effect. Set here so Infected AI can override - var/malf_sound = 'sound/ambience/antag/malf.ogg' + var/malf_sound = 'sound/music/antag/malf.ogg' /datum/antagonist/malf_ai/New(give_objectives = TRUE) . = ..() @@ -41,14 +41,13 @@ malf_ai.vox_voices += VOX_MIL #endif // SKYRAT EDIT END - - employer = pick(GLOB.ai_employers) if(!employer) employer = pick(GLOB.ai_employers) malfunction_flavor = strings(MALFUNCTION_FLAVOR_FILE, employer) add_law_zero() + RegisterSignal(owner.current, COMSIG_SILICON_AI_CORE_STATUS, PROC_REF(core_status)) if(malf_sound) owner.current.playsound_local(get_turf(owner.current), malf_sound, 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) owner.current.grant_language(/datum/language/codespeak, source = LANGUAGE_MALF) @@ -72,7 +71,7 @@ QDEL_NULL(malf_ai.malf_picker) owner.special_role = null - + UnregisterSignal(owner, COMSIG_SILICON_AI_CORE_STATUS) return ..() /// Generates a complete set of malf AI objectives up to the traitor objective limit. @@ -211,7 +210,7 @@ "name" = category, "items" = (category == malf_ai.malf_picker.selected_cat ? list() : null)) for(var/module in malf_ai.malf_picker.possible_modules[category]) - var/datum/ai_module/mod = malf_ai.malf_picker.possible_modules[category][module] + var/datum/ai_module/malf/mod = malf_ai.malf_picker.possible_modules[category][module] cat["items"] += list(list( "name" = mod.name, "cost" = mod.cost, @@ -221,7 +220,7 @@ return data -/datum/antagonist/malf_ai/ui_act(action, list/params) +/datum/antagonist/malf_ai/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -236,7 +235,7 @@ for(var/category in malf_ai.malf_picker.possible_modules) buyable_items += malf_ai.malf_picker.possible_modules[category] for(var/key in buyable_items) - var/datum/ai_module/valid_mod = buyable_items[key] + var/datum/ai_module/malf/valid_mod = buyable_items[key] if(valid_mod.name == item_name) malf_ai.malf_picker.purchase_module(malf_ai, valid_mod) return TRUE @@ -250,7 +249,7 @@ /datum/antagonist/malf_ai/roundend_report() var/list/result = list() - //var/malf_ai_won = TRUE // SKYRAT EDIT REMOVAL + var/malf_ai_won = TRUE result += printplayer(owner) @@ -258,28 +257,20 @@ if(objectives.len) //If the traitor had no objectives, don't need to process this. var/count = 1 for(var/datum/objective/objective in objectives) - // SKYRAT EDIT START - No greentext - /* if(!objective.check_completion()) malf_ai_won = FALSE objectives_text += "
Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" - */ - objectives_text += "
Objective #[count]: [objective.explanation_text]" - // SKYRAT EDIT END - No greentext count++ result += objectives_text - // SKYRAT EDIT REMOVAL START - /* var/special_role_text = LOWER_TEXT(name) if(malf_ai_won) result += span_greentext("The [special_role_text] was successful!") else result += span_redtext("The [special_role_text] has failed!") - SEND_SOUND(owner.current, 'sound/ambience/ambifailure.ogg') - */ + SEND_SOUND(owner.current, 'sound/ambience/misc/ambifailure.ogg') return result.Join("
") @@ -293,6 +284,14 @@ return malf_ai_icon +/datum/antagonist/malf_ai/proc/core_status(datum/source) + SIGNAL_HANDLER + + var/mob/living/silicon/ai/malf_owner = owner.current + if(malf_owner.linked_core) + return COMPONENT_CORE_ALL_GOOD + return COMPONENT_CORE_DISCONNECTED + //Subtype of Malf AI datum, used for one of the traitor final objectives /datum/antagonist/malf_ai/infected name = "Infected AI" diff --git a/code/modules/antagonists/malf_ai/malf_ai_module_picker.dm b/code/modules/antagonists/malf_ai/malf_ai_module_picker.dm index 0ac27c14c97bf..5e95e11c41bca 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_module_picker.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_module_picker.dm @@ -62,7 +62,7 @@ return data -/datum/module_picker/ui_act(action, list/params) +/datum/module_picker/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index 28181ce32c256..c54714f21c5af 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -52,7 +52,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /obj/machinery/computer/gateway_control, ))) -GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/destructive/nuke_station) //BUBBERSTATION CHANGE: REMOVES NUKE STATION ROUNDSTART MODULE +GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf) - /datum/ai_module/malf/destructive/nuke_station) // BUBBER EDIT - REMOVES NUKE STATION ROUNDSTART MODULE /// The malf AI action subtype. All malf actions are subtypes of this. /datum/action/innate/ai @@ -137,19 +137,19 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d return /// Modules causing destruction -/datum/ai_module/destructive +/datum/ai_module/malf/destructive category = "Destructive Modules" /// Modules with stealthy and utility uses -/datum/ai_module/utility +/datum/ai_module/malf/utility category = "Utility Modules" /// Modules that are improving AI abilities and assets -/datum/ai_module/upgrade +/datum/ai_module/malf/upgrade category = "Upgrade Modules" /// Doomsday Device: Starts the self-destruct timer. It can only be stopped by killing the AI completely. -/datum/ai_module/destructive/nuke_station +/datum/ai_module/malf/destructive/nuke_station name = "Doomsday Device" description = "Activate a weapon that will disintegrate all organic life on the station after a 450 second delay. \ Can only be used while on the station, will fail if your core is moved off station or destroyed. \ @@ -201,7 +201,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d if(QDELETED(owner) || !isturf(owner_AI.loc)) active = FALSE return - owner.playsound_local(owner, 'sound/misc/bloblarm.ogg', 50, 0, use_reverb = FALSE) + owner.playsound_local(owner, 'sound/announcer/alarm/bloblarm.ogg', 50, 0, use_reverb = FALSE) to_chat(owner, span_userdanger("!!! UNAUTHORIZED SELF-DESTRUCT ACCESS !!!")) to_chat(owner, span_boldannounce("This is a class-3 security violation. This incident will be reported to Central Command.")) for(var/i in 1 to 3) @@ -227,7 +227,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d active = FALSE return to_chat(owner, span_boldnotice("Arm self-destruct device? (Y/N)")) - owner.playsound_local(owner, 'sound/misc/compiler-stage1.ogg', 50, 0, use_reverb = FALSE) + owner.playsound_local(owner, 'sound/machines/compiler/compiler-stage1.ogg', 50, 0, use_reverb = FALSE) sleep(2 SECONDS) if(QDELETED(owner) || !isturf(owner_AI.loc)) active = FALSE @@ -238,7 +238,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d active = FALSE return to_chat(owner, span_boldnotice("Confirm arming of self-destruct device? (Y/N)")) - owner.playsound_local(owner, 'sound/misc/compiler-stage2.ogg', 50, 0, use_reverb = FALSE) + owner.playsound_local(owner, 'sound/machines/compiler/compiler-stage2.ogg', 50, 0, use_reverb = FALSE) sleep(1 SECONDS) if(QDELETED(owner) || !isturf(owner_AI.loc)) active = FALSE @@ -249,7 +249,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d active = FALSE return to_chat(owner, span_boldnotice("Please repeat password to confirm.")) - owner.playsound_local(owner, 'sound/misc/compiler-stage2.ogg', 50, 0, use_reverb = FALSE) + owner.playsound_local(owner, 'sound/machines/compiler/compiler-stage2.ogg', 50, 0, use_reverb = FALSE) sleep(1.4 SECONDS) if(QDELETED(owner) || !isturf(owner_AI.loc)) active = FALSE @@ -350,7 +350,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d var/sec_left = seconds_remaining() if(!sec_left) timing = FALSE - sound_to_playing_players('sound/machines/alarm.ogg') + sound_to_playing_players('sound/announcer/alarm/nuke_alarm.ogg', 70) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(play_cinematic), /datum/cinematic/malf, world, CALLBACK(src, PROC_REF(trigger_doomsday))), 10 SECONDS) else if(world.time >= next_announce) @@ -372,7 +372,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d return TRUE /// Hostile Station Lockdown: Locks, bolts, and electrifies every airlock on the station. After 90 seconds, the doors reset. -/datum/ai_module/destructive/lockdown +/datum/ai_module/malf/destructive/lockdown name = "Hostile Station Lockdown" description = "Overload the airlock, blast door and fire control networks, locking them down. \ Caution! This command also electrifies all airlocks. The networks will automatically reset after 90 seconds, briefly \ @@ -381,7 +381,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d one_purchase = TRUE power_type = /datum/action/innate/ai/lockdown unlock_text = span_notice("You upload a sleeper trojan into the door control systems. You can send a signal to set it off at any time.") - unlock_sound = 'sound/machines/boltsdown.ogg' + unlock_sound = 'sound/machines/airlock/boltsdown.ogg' /datum/action/innate/ai/lockdown name = "Lockdown" @@ -424,13 +424,13 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d CHECK_TICK /// Override Machine: Allows the AI to override a machine, animating it into an angry, living version of itself. -/datum/ai_module/destructive/override_machine +/datum/ai_module/malf/destructive/override_machine name = "Machine Override" description = "Overrides a machine's programming, causing it to rise up and attack everyone except other machines. Four uses per purchase." cost = 30 power_type = /datum/action/innate/ai/ranged/override_machine unlock_text = span_notice("You procure a virus from the Space Dark Web and distribute it to the station's machines.") - unlock_sound = 'sound/machines/airlock_alien_prying.ogg' + unlock_sound = 'sound/machines/airlock/airlock_alien_prying.ogg' /datum/action/innate/ai/ranged/override_machine name = "Override Machine" @@ -446,7 +446,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d desc = "[desc] It has [uses] use\s remaining." /datum/action/innate/ai/ranged/override_machine/do_ability(mob/living/caller, atom/clicked_on) - if(caller.incapacitated()) + if(caller.incapacitated) unset_ranged_ability(caller) return FALSE if(!ismachinery(clicked_on)) @@ -481,7 +481,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d new /mob/living/simple_animal/hostile/mimic/copy/machine(get_turf(to_animate), to_animate, caller, TRUE) /// Destroy RCDs: Detonates all non-cyborg RCDs on the station. -/datum/ai_module/destructive/destroy_rcd +/datum/ai_module/malf/destructive/destroy_rcd name = "Destroy RCDs" description = "Send a specialised pulse to detonate all hand-held and exosuit Rapid Construction Devices on the station." cost = 25 @@ -503,10 +503,10 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d var/obj/item/construction/rcd/RCD = I RCD.detonate_pulse() to_chat(owner, span_danger("RCD detonation pulse emitted.")) - owner.playsound_local(owner, 'sound/machines/twobeep.ogg', 50, 0) + owner.playsound_local(owner, 'sound/machines/beep/twobeep.ogg', 50, 0) /// Overload Machine: Allows the AI to overload a machine, detonating it after a delay. Two uses per purchase. -/datum/ai_module/destructive/overload_machine +/datum/ai_module/malf/destructive/overload_machine name = "Machine Overload" description = "Overheats an electrical machine, causing a small explosion and destroying it. Two uses per purchase." cost = 20 @@ -539,7 +539,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d qdel(to_explode) /datum/action/innate/ai/ranged/overload_machine/do_ability(mob/living/caller, atom/clicked_on) - if(caller.incapacitated()) + if(caller.incapacitated) unset_ranged_ability(caller) return FALSE if(!ismachinery(clicked_on)) @@ -567,7 +567,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d return TRUE /// Blackout: Overloads a random number of lights across the station. Three uses. -/datum/ai_module/destructive/blackout +/datum/ai_module/malf/destructive/blackout name = "Blackout" description = "Attempts to overload the lighting circuits on the station, destroying some bulbs. Three uses per purchase." cost = 15 @@ -601,13 +601,13 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d build_all_button_icons() /// HIGH IMPACT HONKING -/datum/ai_module/destructive/megahonk +/datum/ai_module/malf/destructive/megahonk name = "Percussive Intercomm Interference" description = "Emit a debilitatingly percussive auditory blast through the station intercoms. Does not overpower hearing protection. Two uses per purchase." cost = 20 power_type = /datum/action/innate/ai/honk unlock_text = span_notice("You upload a sinister sound file into every intercom...") - unlock_sound = 'sound/items/airhorn.ogg' + unlock_sound = 'sound/items/airhorn/airhorn.ogg' /datum/action/innate/ai/honk name = "Percussive Intercomm Interference" @@ -622,7 +622,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d if(!found_intercom.is_on() || !found_intercom.get_listening() || found_intercom.wires.is_cut(WIRE_RX)) //Only operating intercoms play the honk continue found_intercom.audible_message(message = "[found_intercom] crackles for a split second.", hearing_distance = 3) - playsound(found_intercom, 'sound/items/airhorn.ogg', 100, TRUE) + playsound(found_intercom, 'sound/items/airhorn/airhorn.ogg', 100, TRUE) for(var/mob/living/carbon/honk_victim in ohearers(6, found_intercom)) var/turf/victim_turf = get_turf(honk_victim) if(isspaceturf(victim_turf) && !victim_turf.Adjacent(found_intercom)) //Prevents getting honked in space @@ -632,9 +632,9 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d to_chat(honk_victim, span_clown("HOOOOONK!")) /// Robotic Factory: Places a large machine that converts humans that go through it into cyborgs. Unlocking this ability removes shunting. -/datum/ai_module/utility/place_cyborg_transformer +/datum/ai_module/malf/utility/place_cyborg_transformer name = "Robotic Factory (Removes Shunting)" - description = "Build a machine anywhere, using expensive nanomachines, that will slowly create loyal cyborgs for you." // Skyrat edit + description = "Build a machine anywhere, using expensive nanomachines, that will slowly create loyal cyborgs for you." // SKYRAT EDIT cost = 100 power_type = /datum/action/innate/ai/place_transformer unlock_text = span_notice("You make contact with Space Amazon and request a robotics factory for delivery.") @@ -642,7 +642,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d /datum/action/innate/ai/place_transformer name = "Place Robotics Factory" - desc = "Places a machine that creates cyborgs efficiently. Conveyor belts included!" // Skyrat edit + desc = "Places a machine that slowly creates cyborgs. Conveyor belts included!" // SKYRAT EDIT button_icon_state = "robotic_factory" uses = 1 auto_use_uses = FALSE //So we can attempt multiple times @@ -679,7 +679,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d C.images -= I /mob/living/silicon/ai/proc/can_place_transformer(datum/action/innate/ai/place_transformer/action) - if(!eyeobj || !isturf(loc) || incapacitated() || !action) + if(!eyeobj || !isturf(loc) || incapacitated || !action) return var/turf/middle = get_turf(eyeobj) var/list/turfs = list(middle, locate(middle.x - 1, middle.y, middle.z), locate(middle.x + 1, middle.y, middle.z)) @@ -707,7 +707,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d return success /// Air Alarm Safety Override: Unlocks the ability to enable dangerous modes on all air alarms. -/datum/ai_module/utility/break_air_alarms +/datum/ai_module/malf/utility/break_air_alarms name = "Air Alarm Safety Override" description = "Gives you the ability to disable safeties on all air alarms. This will allow you to use extremely dangerous environmental modes. \ Anyone can check the air alarm's interface and may be tipped off by their nonfunctionality." @@ -730,10 +730,10 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d continue AA.obj_flags |= EMAGGED to_chat(owner, span_notice("All air alarm safeties on the station have been overridden. Air alarms may now use extremely dangerous environmental modes.")) - owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) + owner.playsound_local(owner, 'sound/machines/terminal/terminal_off.ogg', 50, 0) /// Thermal Sensor Override: Unlocks the ability to disable all fire alarms from doing their job. -/datum/ai_module/utility/break_fire_alarms +/datum/ai_module/malf/utility/break_fire_alarms name = "Thermal Sensor Override" description = "Gives you the ability to override the thermal sensors on all fire alarms. \ This will remove their ability to scan for fire and thus their ability to alert." @@ -742,7 +742,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d power_type = /datum/action/innate/ai/break_fire_alarms unlock_text = span_notice("You replace the thermal sensing capabilities of all fire alarms with a manual override, \ allowing you to turn them off at will.") - unlock_sound = 'sound/machines/FireAlarm1.ogg' + unlock_sound = 'sound/machines/fire_alarm/FireAlarm1.ogg' /datum/action/innate/ai/break_fire_alarms name = "Override Thermal Sensors" @@ -761,10 +761,10 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d continue firelock.emag_act(owner_AI, src) to_chat(owner, span_notice("All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.")) - owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) + owner.playsound_local(owner, 'sound/machines/terminal/terminal_off.ogg', 50, 0) /// Disable Emergency Lights -/datum/ai_module/utility/emergency_lights +/datum/ai_module/malf/utility/emergency_lights name = "Disable Emergency Lights" description = "Cuts emergency lights across the entire station. If power is lost to light fixtures, \ they will not attempt to fall back on emergency power reserves." @@ -791,7 +791,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d owner.playsound_local(owner, 'sound/effects/light_flicker.ogg', 50, FALSE) /// Reactivate Camera Network: Reactivates up to 30 cameras across the station. -/datum/ai_module/utility/reactivate_cameras +/datum/ai_module/malf/utility/reactivate_cameras name = "Reactivate Camera Network" description = "Runs a network-wide diagnostic on the camera network, resetting focus and re-routing power to failed cameras. \ Can be used to repair up to 30 cameras." @@ -799,7 +799,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d one_purchase = TRUE power_type = /datum/action/innate/ai/reactivate_cameras unlock_text = span_notice("You deploy nanomachines to the cameranet.") - unlock_sound = 'sound/items/wirecutter.ogg' + unlock_sound = 'sound/items/tools/wirecutter.ogg' /datum/action/innate/ai/reactivate_cameras name = "Reactivate Cameras" @@ -824,7 +824,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d fixed_cameras++ uses-- //Not adjust_uses() so it doesn't automatically delete or show a message to_chat(owner, span_notice("Diagnostic complete! Cameras reactivated: [fixed_cameras]. Reactivations remaining: [uses].")) - owner.playsound_local(owner, 'sound/items/wirecutter.ogg', 50, 0) + owner.playsound_local(owner, 'sound/items/tools/wirecutter.ogg', 50, 0) adjust_uses(0, TRUE) //Checks the uses remaining if(QDELETED(src) || !uses) //Not sure if not having src here would cause a runtime, so it's here to be safe return @@ -832,16 +832,16 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d build_all_button_icons() /// Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them X-ray vision. -/datum/ai_module/upgrade/upgrade_cameras +/datum/ai_module/malf/upgrade/upgrade_cameras name = "Upgrade Camera Network" description = "Install broad-spectrum scanning and electrical redundancy firmware to the camera network, enabling EMP-proofing and light-amplified X-ray vision. Upgrade is done immediately upon purchase." //I <3 pointless technobabble //This used to have motion sensing as well, but testing quickly revealed that giving it to the whole cameranet is PURE HORROR. cost = 35 //Decent price for omniscience! upgrade = TRUE unlock_text = span_notice("OTA firmware distribution complete! Cameras upgraded: CAMSUPGRADED. Light amplification system online.") - unlock_sound = 'sound/items/rped.ogg' + unlock_sound = 'sound/items/tools/rped.ogg' -/datum/ai_module/upgrade/upgrade_cameras/upgrade(mob/living/silicon/ai/AI) +/datum/ai_module/malf/upgrade/upgrade_cameras/upgrade(mob/living/silicon/ai/AI) // Sets up nightvision RegisterSignal(AI, COMSIG_MOB_UPDATE_SIGHT, PROC_REF(on_update_sight)) AI.update_sight() @@ -864,44 +864,44 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d upgraded_cameras++ unlock_text = replacetext(unlock_text, "CAMSUPGRADED", "[upgraded_cameras]") //This works, since unlock text is called after upgrade() -/datum/ai_module/upgrade/upgrade_cameras/proc/on_update_sight(mob/source) +/datum/ai_module/malf/upgrade/upgrade_cameras/proc/on_update_sight(mob/source) SIGNAL_HANDLER // Dim blue, pretty source.lighting_color_cutoffs = blend_cutoff_colors(source.lighting_color_cutoffs, list(5, 25, 35)) /// AI Turret Upgrade: Increases the health and damage of all turrets. -/datum/ai_module/upgrade/upgrade_turrets +/datum/ai_module/malf/upgrade/upgrade_turrets name = "AI Turret Upgrade" description = "Improves the power and health of all AI turrets. This effect is permanent. Upgrade is done immediately upon purchase." cost = 30 upgrade = TRUE unlock_text = span_notice("You establish a power diversion to your turrets, upgrading their health and damage.") - unlock_sound = 'sound/items/rped.ogg' + unlock_sound = 'sound/items/tools/rped.ogg' -/datum/ai_module/upgrade/upgrade_turrets/upgrade(mob/living/silicon/ai/AI) +/datum/ai_module/malf/upgrade/upgrade_turrets/upgrade(mob/living/silicon/ai/AI) for(var/obj/machinery/porta_turret/ai/turret as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/porta_turret/ai)) turret.AddElement(/datum/element/empprotection, EMP_PROTECT_ALL) turret.max_integrity = 200 turret.repair_damage(200) turret.lethal_projectile = /obj/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR. - turret.lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' + turret.lethal_projectile_sound = 'sound/items/weapons/lasercannonfire.ogg' /// Enhanced Surveillance: Enables AI to hear conversations going on near its active vision. -/datum/ai_module/upgrade/eavesdrop +/datum/ai_module/malf/upgrade/eavesdrop name = "Enhanced Surveillance" description = "Via a combination of hidden microphones and lip reading software, \ you are able to use your cameras to listen in on conversations. Upgrade is done immediately upon purchase." cost = 30 upgrade = TRUE unlock_text = span_notice("OTA firmware distribution complete! Cameras upgraded: Enhanced surveillance package online.") - unlock_sound = 'sound/items/rped.ogg' + unlock_sound = 'sound/items/tools/rped.ogg' -/datum/ai_module/upgrade/eavesdrop/upgrade(mob/living/silicon/ai/AI) +/datum/ai_module/malf/upgrade/eavesdrop/upgrade(mob/living/silicon/ai/AI) if(AI.eyeobj) AI.eyeobj.relay_speech = TRUE /// Unlock Mech Domination: Unlocks the ability to dominate mechs. Big shocker, right? -/datum/ai_module/upgrade/mecha_domination +/datum/ai_module/malf/upgrade/mecha_domination name = "Unlock Mech Domination" description = "Allows you to hack into a mech's onboard computer, shunting all processes into it and ejecting any occupants. \ Do not allow the mech to leave the station's vicinity or allow it to be destroyed. \ @@ -910,19 +910,19 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d upgrade = TRUE unlock_text = span_notice("Virus package compiled. Select a target mech at any time. You must remain on the station at all times. \ Loss of signal will result in total system lockout.") - unlock_sound = 'sound/mecha/nominal.ogg' + unlock_sound = 'sound/vehicles/mecha/nominal.ogg' -/datum/ai_module/upgrade/mecha_domination/upgrade(mob/living/silicon/ai/AI) +/datum/ai_module/malf/upgrade/mecha_domination/upgrade(mob/living/silicon/ai/AI) AI.can_dominate_mechs = TRUE //Yep. This is all it does. Honk! -/datum/ai_module/upgrade/voice_changer +/datum/ai_module/malf/upgrade/voice_changer name = "Voice Changer" description = "Allows you to change the AI's voice. Upgrade is active immediately upon purchase." cost = 40 one_purchase = TRUE power_type = /datum/action/innate/ai/voice_changer unlock_text = span_notice("OTA firmware distribution complete! Voice changer online.") - unlock_sound = 'sound/items/rped.ogg' + unlock_sound = 'sound/items/tools/rped.ogg' /datum/action/innate/ai/voice_changer name="Voice Changer" @@ -995,7 +995,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d data["selected"] = say_span || owner.speech_span return data -/obj/machinery/ai_voicechanger/ui_act(action, params) +/obj/machinery/ai_voicechanger/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) return switch(action) @@ -1053,7 +1053,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d if("name") say_name = strip_html(params["name"], MAX_NAME_LEN) -/datum/ai_module/utility/emag +/datum/ai_module/malf/utility/emag name = "Targeted Safeties Override" description = "Allows you to disable the safeties of any machinery on the station, provided you can access it." cost = 20 @@ -1096,7 +1096,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d var/mob/living/silicon/ai/ai_caller = caller - if(ai_caller.incapacitated()) + if(ai_caller.incapacitated) unset_ranged_ability(caller) return FALSE @@ -1147,7 +1147,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d return TRUE -/datum/ai_module/utility/core_tilt +/datum/ai_module/malf/utility/core_tilt name = "Rolling Servos" description = "Allows you to slowly roll around, crushing anything in your way with your bulk." cost = 10 @@ -1186,7 +1186,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d return FALSE var/mob/living/silicon/ai/ai_caller = caller - if (ai_caller.incapacitated() || !isturf(ai_caller.loc)) + if (ai_caller.incapacitated || !isturf(ai_caller.loc)) return FALSE var/turf/target = get_turf(clicked_on) @@ -1214,7 +1214,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d COOLDOWN_START(src, time_til_next_tilt, roll_over_cooldown) /datum/action/innate/ai/ranged/core_tilt/proc/do_roll_over(mob/living/silicon/ai/ai_caller, picked_dir) - if (ai_caller.incapacitated() || !isturf(ai_caller.loc)) // prevents bugs where the ai is carded and rolls + if (ai_caller.incapacitated || !isturf(ai_caller.loc)) // prevents bugs where the ai is carded and rolls return var/turf/target = get_step(ai_caller, picked_dir) // in case we moved we pass the dir not the target turf @@ -1228,7 +1228,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d /// Used in our radial menu, state-checking proc after the radial menu sleeps /datum/action/innate/ai/ranged/core_tilt/proc/radial_check(mob/living/silicon/ai/caller) - if (QDELETED(caller) || caller.incapacitated() || caller.stat == DEAD) + if (QDELETED(caller) || caller.incapacitated || caller.stat == DEAD) return FALSE if (uses <= 0) @@ -1246,7 +1246,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d stack_trace("non-standard dir entered to get_rotation_from_dir. (got: [dir])") return 0 -/datum/ai_module/utility/remote_vendor_tilt +/datum/ai_module/malf/utility/remote_vendor_tilt name = "Remote vendor tilting" description = "Lets you remotely tip vendors over in any direction." cost = 15 @@ -1275,7 +1275,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d return FALSE var/mob/living/silicon/ai/ai_caller = caller - if(ai_caller.incapacitated()) + if(ai_caller.incapacitated) unset_ranged_ability(caller) return FALSE @@ -1331,7 +1331,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module) - /datum/ai_module/d /// Used in our radial menu, state-checking proc after the radial menu sleeps /datum/action/innate/ai/ranged/remote_vendor_tilt/proc/radial_check(mob/living/silicon/ai/caller, obj/machinery/vending/clicked_vendor) - if (QDELETED(caller) || caller.incapacitated() || caller.stat == DEAD) + if (QDELETED(caller) || caller.incapacitated || caller.stat == DEAD) return FALSE if (QDELETED(clicked_vendor)) diff --git a/code/modules/antagonists/nightmare/nightmare_equipment.dm b/code/modules/antagonists/nightmare/nightmare_equipment.dm index 6fbe6c6097bec..52a687f9ac795 100644 --- a/code/modules/antagonists/nightmare/nightmare_equipment.dm +++ b/code/modules/antagonists/nightmare/nightmare_equipment.dm @@ -15,7 +15,7 @@ w_class = WEIGHT_CLASS_HUGE sharpness = SHARP_EDGED tool_behaviour = TOOL_MINING - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' wound_bonus = -30 bare_wound_bonus = 20 ///If this is true, our next hit will be critcal, temporarily stunning our target diff --git a/code/modules/antagonists/nightmare/nightmare_organs.dm b/code/modules/antagonists/nightmare/nightmare_organs.dm index a77aaa79b23ea..5c6756439646a 100644 --- a/code/modules/antagonists/nightmare/nightmare_organs.dm +++ b/code/modules/antagonists/nightmare/nightmare_organs.dm @@ -84,7 +84,7 @@ span_warning("[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!"), span_danger("[src] feels unnaturally cold in your hands. You raise [src] to your mouth and devour it!") ) - playsound(user, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(user, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) user.visible_message( span_warning("Blood erupts from [user]'s arm as it reforms into a weapon!"), @@ -130,7 +130,7 @@ to_chat(owner, span_userdanger("You feel the shadows invade your skin, leaping into the center of your chest! You're alive!")) SEND_SOUND(owner, sound('sound/effects/ghost.ogg')) owner.visible_message(span_warning("[owner] staggers to [owner.p_their()] feet!")) - playsound(owner, 'sound/hallucinations/far_noise.ogg', 50, TRUE) + playsound(owner, 'sound/effects/hallucinations/far_noise.ogg', 50, TRUE) respawn_progress = 0 /obj/item/organ/internal/heart/nightmare/get_availability(datum/species/owner_species, mob/living/owner_mob) diff --git a/code/modules/antagonists/ninja/energy_katana.dm b/code/modules/antagonists/ninja/energy_katana.dm index 630aa310ab3ca..efd993550915f 100644 --- a/code/modules/antagonists/ninja/energy_katana.dm +++ b/code/modules/antagonists/ninja/energy_katana.dm @@ -24,10 +24,10 @@ block_chance = 50 armour_penetration = 50 w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' pickup_sound = 'sound/items/unsheath.ogg' drop_sound = 'sound/items/sheath.ogg' - block_sound = 'sound/weapons/block_blade.ogg' + block_sound = 'sound/items/weapons/block_blade.ogg' 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") slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT @@ -68,7 +68,7 @@ /datum/action/innate/dash/ninja current_charges = 3 max_charges = 3 - charge_rate = 200 //SKYRAT EDIT CHANGE - ORIGINAL: 200, BUBBERS EDIT CHANGE, REVERTS IT TO ORIGINAL + charge_rate = 200 beam_length = 1 SECONDS recharge_sound = null diff --git a/code/modules/antagonists/ninja/energy_net_nets.dm b/code/modules/antagonists/ninja/energy_net_nets.dm index 111d1f2651548..5f08762b34135 100644 --- a/code/modules/antagonists/ninja/energy_net_nets.dm +++ b/code/modules/antagonists/ninja/energy_net_nets.dm @@ -30,7 +30,7 @@ /obj/structure/energy_net/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) if(damage_type == BRUTE || damage_type == BURN) - playsound(src, 'sound/weapons/slash.ogg', 80, TRUE) + playsound(src, 'sound/items/weapons/slash.ogg', 80, TRUE) /obj/structure/energy_net/atom_destruction(damage_flag) for(var/mob/recovered_mob as anything in buckled_mobs) diff --git a/code/modules/antagonists/ninja/outfit.dm b/code/modules/antagonists/ninja/outfit.dm index ba54c33d842a7..924943dce777b 100644 --- a/code/modules/antagonists/ninja/outfit.dm +++ b/code/modules/antagonists/ninja/outfit.dm @@ -10,7 +10,7 @@ internals_slot = ITEM_SLOT_RPOCKET belt = /obj/item/energy_katana back = /obj/item/mod/control/pre_equipped/ninja - //implants = list(/obj/item/implant/explosive) SKYRAT EDIT REMOVAL + implants = list(/obj/item/implant/explosive) /datum/outfit/ninja/post_equip(mob/living/carbon/human/ninja) var/obj/item/grenade/c4/ninja/charge = ninja.l_store diff --git a/code/modules/antagonists/nukeop/datums/operative.dm b/code/modules/antagonists/nukeop/datums/operative.dm index 9eca88d33852d..ebaaf8692b2f4 100644 --- a/code/modules/antagonists/nukeop/datums/operative.dm +++ b/code/modules/antagonists/nukeop/datums/operative.dm @@ -8,7 +8,8 @@ show_to_ghosts = TRUE hijack_speed = 2 //If you can't take out the station, take the shuttle instead. suicide_cry = "FOR THE SYNDICATE!!" - stinger_sound = 'sound/ambience/antag/ops.ogg' + stinger_sound = 'sound/music/antag/ops.ogg' + /// Which nukie team are we on? var/datum/team/nuclear/nuke_team /// If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team. @@ -94,7 +95,7 @@ nuke_team = new_team /datum/antagonist/nukeop/admin_add(datum/mind/new_owner,mob/admin) - new_owner.set_assigned_role(SSjob.GetJobType(/datum/job/nuclear_operative)) + new_owner.set_assigned_role(SSjob.get_job_type(/datum/job/nuclear_operative)) new_owner.add_antag_datum(src) message_admins("[key_name_admin(admin)] has nuke op'ed [key_name_admin(new_owner)].") log_admin("[key_name(admin)] has nuke op'ed [key_name(new_owner)].") @@ -114,8 +115,8 @@ 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) + final_icon.Blend(teammate, ICON_UNDERLAY, -ICON_SIZE_X / 4, 0) + final_icon.Blend(teammate, ICON_UNDERLAY, ICON_SIZE_X / 4, 0) if (!isnull(nuke_icon_state)) var/icon/nuke = icon('icons/obj/machines/nuke.dmi', nuke_icon_state) diff --git a/code/modules/antagonists/nukeop/datums/operative_leader.dm b/code/modules/antagonists/nukeop/datums/operative_leader.dm index c2995e5575326..1af9f1d28c40e 100644 --- a/code/modules/antagonists/nukeop/datums/operative_leader.dm +++ b/code/modules/antagonists/nukeop/datums/operative_leader.dm @@ -44,7 +44,13 @@ /datum/antagonist/nukeop/leader/proc/ask_name() var/randomname = pick(GLOB.last_names) - var/newname = tgui_input_text(owner.current, "You are the nuclear operative [title]. Please choose a last name for your family.", "Name change", randomname, MAX_NAME_LEN) + var/newname = tgui_input_text( + owner.current, + "You are the nuclear operative [title]. Please choose a last name for your family.", + "Name change", + randomname, + max_length = MAX_NAME_LEN, + ) if (!newname) newname = randomname else diff --git a/code/modules/antagonists/nukeop/datums/operative_support.dm b/code/modules/antagonists/nukeop/datums/operative_support.dm index c9ea12b63c5d2..aa0c031c070aa 100644 --- a/code/modules/antagonists/nukeop/datums/operative_support.dm +++ b/code/modules/antagonists/nukeop/datums/operative_support.dm @@ -21,7 +21,7 @@ network = OPERATIVE_CAMERA_NET, \ emp_proof = FALSE, \ ) - our_teammate.playsound_local(get_turf(owner.current), 'sound/weapons/egloves.ogg', 100, 0) + our_teammate.playsound_local(get_turf(owner.current), 'sound/items/weapons/egloves.ogg', 100, 0) to_chat(our_teammate, span_notice("A Syndicate Overwatch Intelligence Agent has been assigned to your team. Smile, you're on camera!")) RegisterSignal(nuke_team, COMSIG_NUKE_TEAM_ADDITION, PROC_REF(late_bodycam)) diff --git a/code/modules/antagonists/nukeop/datums/operative_team.dm b/code/modules/antagonists/nukeop/datums/operative_team.dm index 1e06f32594d84..b676bda303dd6 100644 --- a/code/modules/antagonists/nukeop/datums/operative_team.dm +++ b/code/modules/antagonists/nukeop/datums/operative_team.dm @@ -15,7 +15,7 @@ /datum/team/nuclear/roundend_report() var/list/parts = list() - parts += "[syndicate_name] Operatives:" + parts += span_header("[syndicate_name] Operatives:") switch(get_result()) if(NUKE_RESULT_FLUKE) @@ -55,7 +55,7 @@ parts += "Neutral Victory" parts += "Mission aborted!" - var/text = "
The syndicate operatives were:" + var/text = span_header("
The syndicate operatives were:") var/purchases = "" var/TC_uses = 0 LAZYINITLIST(GLOB.uplink_purchase_logs_by_key) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm index fa2718833d36f..ebc2c6ec32639 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm @@ -26,7 +26,7 @@ /obj/item/disk/nuclear/Initialize(mapload) . = ..() - AddElement(/datum/element/bed_tuckable, mapload, 6, 6, 0) + AddElement(/datum/element/bed_tuckable, mapload, 6, -6, 0) AddComponent(/datum/component/stationloving, !fake) if(!fake) @@ -102,7 +102,7 @@ /obj/item/disk/nuclear/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is going delta! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/machines/alarm.ogg', 50, -1, TRUE) + playsound(src, 'sound/announcer/alarm/nuke_alarm.ogg', 50, -1, TRUE) for(var/i in 1 to 100) addtimer(CALLBACK(user, TYPE_PROC_REF(/atom, add_atom_colour), (i % 2)? COLOR_VIBRANT_LIME : COLOR_RED, ADMIN_COLOUR_PRIORITY), i) addtimer(CALLBACK(src, PROC_REF(manual_suicide), user), 101) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm index a52a026abe0cb..c3b976bb149bd 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm @@ -95,7 +95,7 @@ GLOBAL_VAR(station_nuke_source) return TRUE auth = weapon update_ui_mode() - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) add_fingerprint(user) return TRUE @@ -328,7 +328,7 @@ GLOBAL_VAR(station_nuke_source) return data -/obj/machinery/nuclearbomb/ui_act(action, params) +/obj/machinery/nuclearbomb/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -336,7 +336,7 @@ GLOBAL_VAR(station_nuke_source) switch(action) if("eject_disk") if(auth && auth.loc == src) - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) playsound(src, 'sound/machines/nuke/general_beep.ogg', 50, FALSE) auth.forceMove(get_turf(src)) auth = null @@ -344,7 +344,7 @@ GLOBAL_VAR(station_nuke_source) else var/obj/item/I = usr.is_holding_item_of_type(/obj/item/disk/nuclear) if(I && disk_check(I) && usr.transferItemToLoc(I, src)) - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) playsound(src, 'sound/machines/nuke/general_beep.ogg', 50, FALSE) auth = I . = TRUE @@ -519,7 +519,7 @@ GLOBAL_VAR(station_nuke_source) yes_code = FALSE safety = TRUE update_appearance() - sound_to_playing_players('sound/machines/alarm.ogg') + sound_to_playing_players('sound/announcer/alarm/nuke_alarm.ogg', 70) sound_to_playing_players('modular_skyrat/modules/alerts/sound/misc/delta_countdown.ogg') // SKYRAT EDIT ADDITION SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NUKE_DEVICE_DETONATING, src) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index 0160fbd89149c..0dba54bf2aaaf 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -43,7 +43,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) if(custom_threat == "Yes") declaring_war = TRUE - war_declaration = tgui_input_text(user, "Insert your custom declaration", "Declaration", multiline = TRUE, encode = FALSE) + war_declaration = tgui_input_text(user, "Insert your custom declaration", "Declaration", max_length = MAX_MESSAGE_LEN, multiline = TRUE, encode = FALSE) declaring_war = FALSE if(!check_allowed(user) || !war_declaration) @@ -63,7 +63,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) var/custom_threat = tgui_alert(usr, "Do you want to customize the declaration?", "Customize?", list("Yes", "No")) if(custom_threat == "Yes") - war_declaration = tgui_input_text(usr, "Insert your custom declaration", "Declaration", multiline = TRUE, encode = FALSE) + war_declaration = tgui_input_text(usr, "Insert your custom declaration", "Declaration", max_length = MAX_MESSAGE_LEN, multiline = TRUE, encode = FALSE) if(!war_declaration) tgui_alert(usr, "Invalid war declaration.", "Poor Choice of Words") @@ -80,7 +80,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) priority_announce( text = memo, title = "Declaration of War", - sound = 'sound/machines/alarm.ogg', + sound = 'sound/announcer/alarm/nuke_alarm.ogg', has_important_message = TRUE, sender_override = "Nuclear Operative Outpost", color_override = "red", @@ -192,7 +192,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) priority_announce( text = memo, title = "Declaration of War", - sound = 'sound/machines/alarm.ogg', + sound = 'sound/announcer/alarm/nuke_alarm.ogg', has_important_message = TRUE, sender_override = "Nuclear Operative Outpost", color_override = "red", diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm index 59ab16be7dc9c..f285be319d923 100644 --- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm +++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm @@ -63,7 +63,7 @@ if(isliving(loc)) var/mob/living/L = loc to_chat(L, span_userdanger("Your [name] beeps as it reconfigures its tracking algorithms.")) - playsound(L, 'sound/machines/triple_beep.ogg', 50, TRUE) + playsound(L, 'sound/machines/beep/triple_beep.ogg', 50, TRUE) mode = new_mode scan_for_target() diff --git a/code/modules/antagonists/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm index 0a07d2391aa85..b0cf9967aa653 100644 --- a/code/modules/antagonists/obsessed/obsessed.dm +++ b/code/modules/antagonists/obsessed/obsessed.dm @@ -1,3 +1,9 @@ +#define OBSESSED_OBJECTIVE_SPEND_TIME "spend_time" +#define OBSESSED_OBJECTIVE_POLAROID "polaroid" +#define OBSESSED_OBJECTIVE_HUG "hug" +#define OBSESSED_OBJECTIVE_HEIRLOOM "heirloom" +#define OBSESSED_OBJECTIVE_JEALOUS "jealous" + /datum/antagonist/obsessed name = "Obsessed" show_in_antagpanel = TRUE @@ -12,9 +18,24 @@ suicide_cry = "FOR MY LOVE!!" preview_outfit = /datum/outfit/obsessed hardcore_random_bonus = TRUE - stinger_sound = 'sound/ambience/antag/creepalert.ogg' + stinger_sound = 'sound/music/antag/creepalert.ogg' + /// How many objectives should be generated + var/objectives_to_generate = 3 + /// Brain trauma that causes the obsession var/datum/brain_trauma/special/obsessed/trauma +/// Dummy antag datum that will show the cured obsessed to admins +/datum/antagonist/former_obsessed + name = "Former Obsessed" + show_in_antagpanel = FALSE + show_name_in_check_antagonists = TRUE + antagpanel_category = ANTAG_GROUP_CREW + show_in_roundend = FALSE + count_against_dynamic_roll_chance = FALSE + silent = TRUE + can_elimination_hijack = ELIMINATION_PREVENT + antag_flags = FLAG_FAKE_ANTAG + /datum/antagonist/obsessed/admin_add(datum/mind/new_owner,mob/admin) var/mob/living/carbon/C = new_owner.current if(!istype(C)) @@ -72,8 +93,8 @@ H.regenerate_icons() /datum/antagonist/obsessed/forge_objectives(datum/mind/obsessionmind) - var/list/objectives_left = list("spendtime", "polaroid", "hug") - var/datum/objective/assassinate/kill = new // ZUBBER EDIT : Now with less round-removal! | org: var/datum/objective/assassinate/obsessed/kill = new + var/list/objectives_left = list(OBSESSED_OBJECTIVE_SPEND_TIME, OBSESSED_OBJECTIVE_POLAROID, OBSESSED_OBJECTIVE_HUG) + var/datum/objective/assassinate/kill = new // BUBBER EDIT - Less RR kill.owner = owner kill.target = obsessionmind var/obj/family_heirloom @@ -84,49 +105,49 @@ family_heirloom = heirloom_quirk.heirloom?.resolve() break if(family_heirloom) - objectives_left += "heirloom" + objectives_left += OBSESSED_OBJECTIVE_HEIRLOOM // If they have no coworkers, jealousy will pick someone else on the station. This will never be a free objective. if(!is_captain_job(obsessionmind.assigned_role)) - objectives_left += "jealous" + objectives_left += OBSESSED_OBJECTIVE_JEALOUS - for(var/i in 1 to 3) - var/chosen_objective = pick(objectives_left) - objectives_left.Remove(chosen_objective) + for(var/i in 1 to objectives_to_generate) + var/chosen_objective = pick_n_take(objectives_left) switch(chosen_objective) - if("spendtime") + if(OBSESSED_OBJECTIVE_SPEND_TIME) var/datum/objective/spendtime/spendtime = new spendtime.owner = owner spendtime.target = obsessionmind objectives += spendtime - if("polaroid") + if(OBSESSED_OBJECTIVE_POLAROID) var/datum/objective/polaroid/polaroid = new polaroid.owner = owner polaroid.target = obsessionmind objectives += polaroid - if("hug") + if(OBSESSED_OBJECTIVE_HUG) var/datum/objective/hug/hug = new hug.owner = owner hug.target = obsessionmind objectives += hug - if("heirloom") + if(OBSESSED_OBJECTIVE_HEIRLOOM) var/datum/objective/steal/heirloom_thief/heirloom_thief = new heirloom_thief.owner = owner heirloom_thief.target = obsessionmind//while you usually wouldn't need this for stealing, we need the name of the obsession heirloom_thief.steal_target = family_heirloom objectives += heirloom_thief - if("jealous") + if(OBSESSED_OBJECTIVE_JEALOUS) var/datum/objective/assassinate/jealous/jealous = new jealous.owner = owner jealous.target = obsessionmind//will reroll into a coworker on the objective itself objectives += jealous objectives += kill//finally add the assassinate last, because you'd have to complete it last to greentext. + for(var/datum/objective/O in objectives) O.update_explanation_text() /datum/antagonist/obsessed/roundend_report_header() - return "Someone became obsessed!
" + return span_header("Someone became obsessed!
") /datum/antagonist/obsessed/roundend_report() var/list/report = list() @@ -278,3 +299,9 @@ explanation_text = "Steal [target.name]'s family heirloom, [steal_target] they cherish." else explanation_text = "Free Objective" + +#undef OBSESSED_OBJECTIVE_SPEND_TIME +#undef OBSESSED_OBJECTIVE_POLAROID +#undef OBSESSED_OBJECTIVE_HUG +#undef OBSESSED_OBJECTIVE_HEIRLOOM +#undef OBSESSED_OBJECTIVE_JEALOUS diff --git a/code/modules/antagonists/paradox_clone/paradox_clone.dm b/code/modules/antagonists/paradox_clone/paradox_clone.dm index e809e8cecbf00..960cf7f59ec2f 100644 --- a/code/modules/antagonists/paradox_clone/paradox_clone.dm +++ b/code/modules/antagonists/paradox_clone/paradox_clone.dm @@ -52,7 +52,7 @@ kill.update_explanation_text() objectives += kill - owner.set_assigned_role(SSjob.GetJobType(/datum/job/paradox_clone)) + owner.set_assigned_role(SSjob.get_job_type(/datum/job/paradox_clone)) //clone doesnt show up on message lists var/obj/item/modular_computer/pda/messenger = locate() in owner.current @@ -73,7 +73,7 @@ original_mind.quick_copy_all_memories(owner) /datum/antagonist/paradox_clone/roundend_report_header() - return "A paradox clone appeared on the station!
" + return span_header("A paradox clone appeared on the station!
") /datum/outfit/paradox_clone name = "Paradox Clone (Preview only)" diff --git a/code/modules/antagonists/pirate/pirate.dm b/code/modules/antagonists/pirate/pirate.dm index 0fa80f5524776..6bff6eb357208 100644 --- a/code/modules/antagonists/pirate/pirate.dm +++ b/code/modules/antagonists/pirate/pirate.dm @@ -104,7 +104,7 @@ /datum/team/pirate/roundend_report() var/list/parts = list() - parts += "Space Pirates were:" + parts += span_header("Space Pirates were:") var/all_dead = TRUE for(var/datum/mind/M in members) diff --git a/code/modules/antagonists/pirate/pirate_gangs.dm b/code/modules/antagonists/pirate/pirate_gangs.dm index 555d68f1c9de7..bb7451e212a06 100644 --- a/code/modules/antagonists/pirate/pirate_gangs.dm +++ b/code/modules/antagonists/pirate/pirate_gangs.dm @@ -162,7 +162,6 @@ GLOBAL_LIST_INIT(heavy_pirate_gangs, init_pirate_gangs(is_heavy = TRUE)) response_not_enough = "You trying to cheat us? That's fine, we'll take your station as collateral." announcement_color = "yellow" - ///Agents from the space I.R.S. heavily armed to stea- I mean, collect the station's tax dues /datum/pirate_gang/irs name = "Space IRS Agents" diff --git a/code/modules/antagonists/pirate/pirate_outfits.dm b/code/modules/antagonists/pirate/pirate_outfits.dm index 72318fe4987ca..14729908e65be 100644 --- a/code/modules/antagonists/pirate/pirate_outfits.dm +++ b/code/modules/antagonists/pirate/pirate_outfits.dm @@ -55,6 +55,8 @@ head = /obj/item/clothing/head/helmet/space/pirate + id_trim = /datum/id_trim/pirate/captain + /datum/outfit/pirate/silverscale name = "Silver Scale Member" @@ -151,6 +153,8 @@ suit = /obj/item/clothing/suit/jacket/oversized head = /obj/item/clothing/head/costume/crown + id_trim = /datum/id_trim/pirate/captain + /datum/outfit/pirate/medieval name = "Medieval Warmonger" @@ -181,3 +185,6 @@ belt = /obj/item/gun/magic/hook l_pocket = /obj/item/tank/internals/emergency_oxygen r_pocket = /obj/item/flashlight/lantern + + + skillchips = list(/obj/item/skillchip/big_pointer) //they don't have an id, so this is needed diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm index c2c8d872cf38c..feb62ec4fca66 100644 --- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm +++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm @@ -264,7 +264,7 @@ data["status_report"] = status_report return data -/obj/machinery/computer/piratepad_control/ui_act(action, params) +/obj/machinery/computer/piratepad_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -438,7 +438,7 @@ var/mob_cost = get_cost(sold_item) sold_item.process_capture(mob_cost, mob_cost * 1.2) do_sparks(8, FALSE, sold_item) - playsound(picked_turf, 'sound/weapons/emitter2.ogg', 25, TRUE) + playsound(picked_turf, 'sound/items/weapons/emitter2.ogg', 25, TRUE) sold_item.flash_act() sold_item.adjust_confusion(10 SECONDS) sold_item.adjust_dizzy(10 SECONDS) diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 88dabd337887c..da7b76577275c 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -6,7 +6,7 @@ antag_moodlet = /datum/mood_event/revolution antag_hud_name = "rev" suicide_cry = "VIVA LA REVOLUTION!!" - stinger_sound = 'sound/ambience/antag/revolutionary_tide.ogg' + stinger_sound = 'sound/music/antag/revolutionary_tide.ogg' var/datum/team/revolution/rev_team /// When this antagonist is being de-antagged, this is the source. Can be a mob (for mindshield/blunt force trauma) or a #define string. @@ -314,7 +314,7 @@ owner.current.visible_message(span_deconversion_message("[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!"), null, null, null, owner.current) to_chat(owner, "You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you....") else if(issilicon(owner.current)) - owner.current.visible_message(span_deconversion_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it."), null, null, null, owner.current) + owner.current.visible_message(span_deconversion_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initializing it."), null, null, null, owner.current) to_chat(owner, span_userdanger("The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you.")) /datum/antagonist/rev/head/farewell() @@ -327,7 +327,7 @@ else to_chat(owner, "The sweet release of death. You are no longer a Head Revolutionary.") else if(issilicon(owner.current)) - owner.current.visible_message(span_deconversion_message("The frame beeps contentedly, suppressing the disloyal personality traits from the MMI before initalizing it."), null, null, null, owner.current) + owner.current.visible_message(span_deconversion_message("The frame beeps contentedly, suppressing the disloyal personality traits from the MMI before initializing it."), null, null, null, owner.current) to_chat(owner, span_userdanger("The frame's firmware detects and suppresses your unwanted personality traits! You feel more content with the leadership around these parts.")) /// Handles rev removal via IC methods such as borging, mindshielding, blunt force trauma to the head or revs losing. @@ -431,7 +431,7 @@ var/list/datum/mind/promotable = list() var/list/datum/mind/monkey_promotable = list() for(var/datum/mind/khrushchev in non_heads) - if(khrushchev.current && !khrushchev.current.incapacitated() && !HAS_TRAIT(khrushchev.current, TRAIT_RESTRAINED) && khrushchev.current.client) + if(khrushchev.current && !khrushchev.current.incapacitated && !HAS_TRAIT(khrushchev.current, TRAIT_RESTRAINED) && khrushchev.current.client) if((ROLE_REV_HEAD in khrushchev.current.client.prefs.be_special) || (ROLE_PROVOCATEUR in khrushchev.current.client.prefs.be_special)) if(!ismonkey(khrushchev.current)) promotable += khrushchev @@ -584,19 +584,19 @@ if(headrevs.len) var/list/headrev_part = list() - headrev_part += "The head revolutionaries were:" + headrev_part += span_header("The head revolutionaries were:") headrev_part += printplayerlist(headrevs, !check_rev_victory()) result += headrev_part.Join("
") if(revs.len) var/list/rev_part = list() - rev_part += "The revolutionaries were:" + rev_part += span_header("The revolutionaries were:") rev_part += printplayerlist(revs, !check_rev_victory()) result += rev_part.Join("
") var/list/heads = SSjob.get_all_heads() if(heads.len) - var/head_text = "The heads of staff were:" + var/head_text = span_header("The heads of staff were:") head_text += "
    " for(var/datum/mind/head in heads) var/target = (head in targets) diff --git a/code/modules/antagonists/sentient_creature/sentient_creature.dm b/code/modules/antagonists/sentient_creature/sentient_creature.dm index d1197265ced5d..9fbafdfe2cce9 100644 --- a/code/modules/antagonists/sentient_creature/sentient_creature.dm +++ b/code/modules/antagonists/sentient_creature/sentient_creature.dm @@ -10,11 +10,11 @@ var/icon/pandora = icon('icons/mob/simple/lavaland/lavaland_elites.dmi', "pandora") pandora.Blend(rgb(128, 128, 128, 128), ICON_MULTIPLY) - final_icon.Blend(pandora, ICON_UNDERLAY, -world.icon_size / 4, 0) + final_icon.Blend(pandora, ICON_UNDERLAY, -ICON_SIZE_X / 4, 0) var/icon/rat = icon('icons/mob/simple/animal.dmi', "regalrat") rat.Blend(rgb(128, 128, 128, 128), ICON_MULTIPLY) - final_icon.Blend(rat, ICON_UNDERLAY, world.icon_size / 4, 0) + final_icon.Blend(rat, ICON_UNDERLAY, ICON_SIZE_X / 4, 0) final_icon.Scale(ANTAGONIST_PREVIEW_ICON_SIZE, ANTAGONIST_PREVIEW_ICON_SIZE) return final_icon diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index 828ee94587fcb..6038c5e6820b7 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -141,7 +141,7 @@ . += span_notice("It has [carp_stored] carp available to spawn as.") /obj/structure/carp_rift/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - playsound(src, 'sound/magic/lightningshock.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/lightningshock.ogg', 50, TRUE) /obj/structure/carp_rift/Destroy() STOP_PROCESSING(SSobj, src) diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index 17650faf93758..090c8f66dc82e 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -37,7 +37,7 @@ Today, we will snuff out one of those lights.") to_chat(owner, span_boldwarning("You have five minutes to find a safe location to place down the first rift. If you take longer than five minutes to place a rift, you will be returned from whence you came.")) owner.announce_objectives() - owner.current.playsound_local(get_turf(owner.current), 'sound/magic/demon_attack1.ogg', 80) + owner.current.playsound_local(get_turf(owner.current), 'sound/effects/magic/demon_attack1.ogg', 80) /datum/antagonist/space_dragon/forge_objectives() var/static/list/area/allowed_areas @@ -67,12 +67,12 @@ forge_objectives() rift_ability = new() owner.special_role = ROLE_SPACE_DRAGON - owner.set_assigned_role(SSjob.GetJobType(/datum/job/space_dragon)) + owner.set_assigned_role(SSjob.get_job_type(/datum/job/space_dragon)) return ..() /datum/antagonist/space_dragon/on_removal() owner.special_role = null - owner.set_assigned_role(SSjob.GetJobType(/datum/job/unassigned)) + owner.set_assigned_role(SSjob.get_job_type(/datum/job/unassigned)) return ..() /datum/antagonist/space_dragon/apply_innate_effects(mob/living/mob_override) @@ -142,7 +142,7 @@ if(riftTimer >= maxRiftTimer) to_chat(owner.current, span_boldwarning("You've failed to summon the rift in a timely manner! You're being pulled back from whence you came!")) destroy_rifts() - SEND_SOUND(owner.current, sound('sound/magic/demon_dies.ogg')) + SEND_SOUND(owner.current, sound('sound/effects/magic/demon_dies.ogg')) owner.current.death(/* gibbed = */ TRUE) QDEL_NULL(owner.current) @@ -173,7 +173,7 @@ * Triggers when Space Dragon completes his objective. * Calls the shuttle with a coefficient of 3, making it impossible to recall. * Sets all of his rifts to allow for infinite sentient carp spawns - * Also plays appropiate sounds and CENTCOM messages. + * Also plays appropriate sounds and CENTCOM messages. */ /datum/antagonist/space_dragon/proc/victory() objective_complete = TRUE @@ -182,15 +182,15 @@ 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.", "[command_name()] Wildlife Observations", has_important_message = TRUE) - sound_to_playing_players('sound/creatures/space_dragon_roar.ogg', volume = 75) + sound_to_playing_players('sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg', volume = 75) for(var/obj/structure/carp_rift/rift as anything in rift_list) rift.carp_stored = 999999 rift.time_charged = rift.max_charge /** - * Gives Space Dragon their the rift speed buff permanantly and fully heals the user. + * Gives Space Dragon their the rift speed buff permanently and fully heals the user. * - * Gives Space Dragon the enraged speed buff from charging rifts permanantly. + * Gives Space Dragon the enraged speed buff from charging rifts permanently. * Only happens in circumstances where Space Dragon completes their objective. * Also gives them a full heal. */ @@ -256,7 +256,7 @@ parts += "The [name] has failed!" if(length(carp)) - parts += "
    The [name] was assisted by:" + parts += span_header("
    The [name] was assisted by:") parts += "
      " var/list/players_to_carp_taken = list() for(var/datum/mind/carpy as anything in carp) diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm index 3fcbc914040e8..6a7cb56c9131b 100644 --- a/code/modules/antagonists/space_ninja/space_ninja.dm +++ b/code/modules/antagonists/space_ninja/space_ninja.dm @@ -73,6 +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 if(length(get_crewmember_minds()) >= BOMB_POP_REQUIREMENT) //Explosive plant, the bomb will register its completion on priming @@ -91,11 +92,11 @@ //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 + //Message of Terror, set to complete upon using your gloves a communication console var/datum/objective/communicationobjective = new /datum/objective/terror_message() objectives += communicationobjective - */ + //Survival until end var/datum/objective/survival = new /datum/objective/survive() survival.owner = owner @@ -103,7 +104,7 @@ /datum/antagonist/ninja/greet() . = ..() - SEND_SOUND(owner.current, sound('sound/effects/ninja_greeting.ogg')) + SEND_SOUND(owner.current, sound('sound/music/antag/ninja_greeting.ogg')) to_chat(owner.current, span_danger("I am an elite mercenary of the mighty Spider Clan!")) to_chat(owner.current, span_warning("Surprise is my weapon. Shadows are my armor. Without them, I am nothing.")) to_chat(owner.current, span_notice("The station is located to your [dir2text(get_dir(owner.current, locate(world.maxx/2, world.maxy/2, owner.current.z)))]. A thrown ninja star will be a great way to get there.")) @@ -122,13 +123,13 @@ equip_space_ninja(owner.current) owner.current.add_quirk(/datum/quirk/freerunning) owner.current.add_quirk(/datum/quirk/light_step) - owner.current.mind.set_assigned_role(SSjob.GetJobType(/datum/job/space_ninja)) + owner.current.mind.set_assigned_role(SSjob.get_job_type(/datum/job/space_ninja)) owner.current.mind.special_role = ROLE_NINJA operative.mind.active = TRUE // BUBBER EDIT END return ..() /datum/antagonist/ninja/admin_add(datum/mind/new_owner,mob/admin) - new_owner.set_assigned_role(SSjob.GetJobType(/datum/job/space_ninja)) + new_owner.set_assigned_role(SSjob.get_job_type(/datum/job/space_ninja)) new_owner.special_role = ROLE_NINJA new_owner.add_antag_datum(src) message_admins("[key_name_admin(admin)] has ninja'ed [key_name_admin(new_owner)].") diff --git a/code/modules/antagonists/spy/spy.dm b/code/modules/antagonists/spy/spy.dm index 2468eb27cad3f..65dba0ef2eb1e 100644 --- a/code/modules/antagonists/spy/spy.dm +++ b/code/modules/antagonists/spy/spy.dm @@ -30,7 +30,7 @@ if(spawn_with_objectives) give_random_objectives() . = ..() - SEND_SOUND(owner.current, sound('sound/ambience/antag/spy.ogg')) + SEND_SOUND(owner.current, sound('sound/music/antag/spy.ogg')) /datum/antagonist/spy/ui_static_data(mob/user) var/list/data = ..() diff --git a/code/modules/antagonists/spy/spy_bounty.dm b/code/modules/antagonists/spy/spy_bounty.dm index 01a1a1baf7b9a..ccab7952a9c2c 100644 --- a/code/modules/antagonists/spy/spy_bounty.dm +++ b/code/modules/antagonists/spy/spy_bounty.dm @@ -132,6 +132,14 @@ /datum/spy_bounty/proc/clean_up_stolen_item(atom/movable/stealing, mob/living/spy) do_sparks(3, FALSE, stealing) + if(isitem(stealing) && stealing.loc == spy) + // get it out of our inventory before we mess with it to prevent any weirdness. + // bypasses nodrop - if you want, add a bespoke check for that higher up the chain + spy.temporarilyRemoveItemFromInventory(stealing, force = TRUE) + // also check for DROPDEL + if(QDELETED(stealing)) + return + // Don't mess with it while it's going away var/had_attack_hand_interaction = stealing.interaction_flags_atom & INTERACT_ATOM_ATTACK_HAND stealing.interaction_flags_atom &= ~INTERACT_ATOM_ATTACK_HAND @@ -529,7 +537,7 @@ return TRUE if(IS_WEAKREF_OF(stealing, target_ref)) var/mob/living/carbon/human/target = stealing - if(!target.incapacitated(IGNORE_RESTRAINTS|IGNORE_STASIS)) + if(!INCAPACITATED_IGNORING(target, INCAPABLE_RESTRAINTS|INCAPABLE_STASIS)) return FALSE if(find_desired_thing(target)) return TRUE diff --git a/code/modules/antagonists/spy/spy_uplink.dm b/code/modules/antagonists/spy/spy_uplink.dm index 5de66271fe29c..f5c60f706c588 100644 --- a/code/modules/antagonists/spy/spy_uplink.dm +++ b/code/modules/antagonists/spy/spy_uplink.dm @@ -23,7 +23,7 @@ /datum/component/spy_uplink/RegisterWithParent() RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_self)) - RegisterSignal(parent, COMSIG_ITEM_PRE_ATTACK_SECONDARY, PROC_REF(on_pre_attack_secondary)) + RegisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_item_atom_interaction)) RegisterSignal(parent, COMSIG_TABLET_CHECK_DETONATE, PROC_REF(block_pda_bombs)) /datum/component/spy_uplink/UnregisterFromParent() @@ -60,13 +60,15 @@ INVOKE_ASYNC(src, TYPE_PROC_REF(/datum, ui_interact), user) return NONE -/datum/component/spy_uplink/proc/on_pre_attack_secondary(obj/item/source, atom/target, mob/living/user, params) +/datum/component/spy_uplink/proc/on_item_atom_interaction(obj/item/source, mob/living/user, atom/target, list/modifiers) SIGNAL_HANDLER if(!ismovable(target)) return NONE if(!IS_SPY(user)) return NONE + if(SHOULD_SKIP_INTERACTION(target, source, user)) + return NONE if(!try_steal(target, user)) return NONE return COMPONENT_CANCEL_ATTACK_CHAIN @@ -94,11 +96,11 @@ /// Wraps the stealing process in a scanning effect. /datum/component/spy_uplink/proc/start_stealing(atom/movable/stealing, mob/living/spy, datum/spy_bounty/bounty) if(!isturf(stealing.loc) && stealing.loc != spy) - to_chat(spy, span_warning("Your uplinks blinks red: [stealing] cannot be extracted from there.")) + to_chat(spy, span_warning("Your uplink blinks red: [stealing] cannot be extracted from there.")) return FALSE log_combat(spy, stealing, "started stealing", parent, "(spy bounty)") - playsound(stealing, 'sound/items/pshoom.ogg', 33, vary = TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = 0.33, ignore_walls = FALSE) + playsound(stealing, 'sound/items/pshoom/pshoom.ogg', 33, vary = TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = 0.33, ignore_walls = FALSE) var/obj/effect/scan_effect/active_scan_effect = new(stealing.loc) active_scan_effect.appearance = stealing.appearance @@ -139,10 +141,10 @@ if(!do_after(spy, bounty.theft_time, stealing, interaction_key = REF(src), hidden = TRUE)) return FALSE if(bounty.claimed) - to_chat(spy, span_warning("Your uplinks blinks red: The bounty for [stealing] has been claimed by another spy!")) + to_chat(spy, span_warning("Your uplink blinks red: The bounty for [stealing] has been claimed by another spy!")) return FALSE if(spy.is_holding(stealing) && !spy.dropItemToGround(stealing)) - to_chat(spy, span_warning("Your uplinks blinks red: [stealing] seems stuck to your hand!")) + to_chat(spy, span_warning("Your uplink blinks red: [stealing] seems stuck to your hand!")) return FALSE var/bounty_key = bounty.get_dupe_protection_key(stealing) diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm index b88e5180ec71d..56bcd12bb2794 100644 --- a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm @@ -102,7 +102,7 @@ if(traitor_data.uplink_handler.contractor_hub.current_contract == src) traitor_data.uplink_handler.contractor_hub.current_contract = null - for(var/obj/item/person_contents as anything in person_sent.gather_belongings()) + for(var/obj/item/person_contents as anything in person_sent.gather_belongings(FALSE, FALSE)) if(ishuman(person_sent)) var/mob/living/carbon/human/human_sent = person_sent if(person_contents == human_sent.w_uniform) @@ -122,7 +122,11 @@ if(person_contents == human_sent.wrists) // once wrists actually have a danger item, you have my blessing to remove continue // SPLURT EDIT END - person_sent.transferItemToLoc(person_contents) + + var/unequipped = person_sent.temporarilyRemoveItemFromInventory(person_contents) + if (!unequipped) + continue + person_contents.moveToNullspace() victim_belongings.Add(WEAKREF(person_contents)) var/obj/structure/closet/supplypod/extractionpod/pod = source diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index bbdfa77eceacd..f739245314fc2 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -1,6 +1,6 @@ ///all the employers that are syndicate #define FLAVOR_FACTION_SYNDICATE "syndicate" -///all the employers that are nanotrasen +///all the employers that are Nanotrasen #define FLAVOR_FACTION_NANOTRASEN "nanotrasen" /datum/antagonist/traitor @@ -17,7 +17,7 @@ can_assign_self_objectives = TRUE default_custom_objective = "Perform an overcomplicated heist on valuable Nanotrasen assets." hardcore_random_bonus = TRUE - stinger_sound = 'sound/ambience/antag/tatoralert.ogg' + stinger_sound = 'sound/music/antag/traitor/tatoralert.ogg' ///The flag of uplink that this traitor is supposed to have. var/uplink_flag_given = UPLINK_TRAITORS @@ -366,7 +366,7 @@ result += span_greentext("The [special_role_text] was successful!") else result += span_redtext("The [special_role_text] has failed!") - SEND_SOUND(owner.current, 'sound/ambience/ambifailure.ogg') + SEND_SOUND(owner.current, 'sound/ambience/misc/ambifailure.ogg') return result.Join("
      ") diff --git a/code/modules/antagonists/traitor/objectives/eyesnatching.dm b/code/modules/antagonists/traitor/objectives/eyesnatching.dm index 31dec4e812a6b..7d664b20d36cb 100644 --- a/code/modules/antagonists/traitor/objectives/eyesnatching.dm +++ b/code/modules/antagonists/traitor/objectives/eyesnatching.dm @@ -204,7 +204,7 @@ target.equip_to_slot_if_possible(new_patch, ITEM_SLOT_EYES, disable_warning = TRUE) to_chat(user, span_notice("You successfully extract [target]'s eyeballs.")) - playsound(target, 'sound/surgery/retractor2.ogg', 100, TRUE) + playsound(target, 'sound/items/handling/surgery/retractor2.ogg', 100, TRUE) playsound(target, 'sound/effects/pop.ogg', 100, TRAIT_MUTE) eyeballies.Remove(target) eyeballies.forceMove(get_turf(target)) diff --git a/code/modules/antagonists/traitor/objectives/final_objective/final_objective.dm b/code/modules/antagonists/traitor/objectives/final_objective/final_objective.dm index cb9f4ac73aaf8..6e722b1515eb4 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/final_objective.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/final_objective.dm @@ -34,7 +34,7 @@ if(objective == src) continue objective.fail_objective() - user.playsound_local(get_turf(user), 'sound/traitor/final_objective.ogg', vol = 100, vary = FALSE, channel = CHANNEL_TRAITOR) + user.playsound_local(get_turf(user), 'sound/music/antag/traitor/final_objective.ogg', vol = 100, vary = FALSE, channel = CHANNEL_TRAITOR) handler.final_objective = name /datum/traitor_objective/ultimate/uplink_ui_data(mob/user) diff --git a/code/modules/antagonists/traitor/objectives/kidnapping.dm b/code/modules/antagonists/traitor/objectives/kidnapping.dm index ea7fef9b4b607..0d4ff5cfd9971 100644 --- a/code/modules/antagonists/traitor/objectives/kidnapping.dm +++ b/code/modules/antagonists/traitor/objectives/kidnapping.dm @@ -228,13 +228,14 @@ var/mob/living/carbon/human/sent_mob = entered_atom - for(var/obj/item/belonging in sent_mob.gather_belongings()) + for(var/obj/item/belonging in sent_mob.gather_belongings(FALSE, FALSE)) if(belonging == sent_mob.get_item_by_slot(ITEM_SLOT_ICLOTHING) || belonging == sent_mob.get_item_by_slot(ITEM_SLOT_FEET)) continue - var/unequipped = sent_mob.transferItemToLoc(belonging) + var/unequipped = sent_mob.temporarilyRemoveItemFromInventory(belonging) if (!unequipped) continue + belonging.moveToNullspace() target_belongings.Add(WEAKREF(belonging)) var/datum/market_item/hostage/market_item = sent_mob.process_capture(rand(1000, 3000)) diff --git a/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm b/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm index 4acfe7120489a..5492f04a0f847 100644 --- a/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm +++ b/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm @@ -178,22 +178,22 @@ var/area/user_area = get_area(user) if(!(user_area.type in objective.scan_areas)) balloon_alert(user, "invalid area!") - playsound(user, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return if(!objective.scan_areas[user_area.type]) balloon_alert(user, "already scanned here!") - playsound(user, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return user.visible_message(span_danger("[user] presses a few buttons on [src] and it starts ominously beeping!"), span_notice("You activate [src] and start scanning the area. Do not exit [get_area_name(user, TRUE)] until the scan finishes!")) - playsound(user, 'sound/machines/triple_beep.ogg', 30, TRUE) + playsound(user, 'sound/machines/beep/triple_beep.ogg', 30, TRUE) var/alertstr = span_userdanger("Network Alert: Station network probing attempt detected[user_area?" in [get_area_name(user, TRUE)]":". Unable to pinpoint location"].") for(var/mob/living/silicon/ai/ai_player in GLOB.player_list) to_chat(ai_player, alertstr) if(!do_after(user, 30 SECONDS, src, IGNORE_USER_LOC_CHANGE | IGNORE_TARGET_LOC_CHANGE | IGNORE_HELD_ITEM | IGNORE_INCAPACITATED | IGNORE_SLOWDOWNS, extra_checks = CALLBACK(src, PROC_REF(scan_checks), user, user_area, objective), hidden = TRUE)) - playsound(user, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return playsound(user, 'sound/machines/ding.ogg', 100, TRUE) diff --git a/code/modules/antagonists/traitor/objectives/steal.dm b/code/modules/antagonists/traitor/objectives/steal.dm index fdcd693fed889..4c697d66d57fc 100644 --- a/code/modules/antagonists/traitor/objectives/steal.dm +++ b/code/modules/antagonists/traitor/objectives/steal.dm @@ -255,7 +255,7 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) /obj/item/traitor_bug name = "suspicious device" desc = "It looks dangerous." - item_flags = EXAMINE_SKIP + item_flags = EXAMINE_SKIP|NOBLUDGEON icon = 'icons/obj/antags/syndicate_tools.dmi' icon_state = "bug" @@ -280,7 +280,8 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) /obj/item/traitor_bug/interact_with_atom(atom/movable/target, mob/living/user, list/modifiers) if(!target_object_type || !ismovable(target)) return NONE - + if(SHOULD_SKIP_INTERACTION(target, src, user)) + return NONE var/result = SEND_SIGNAL(src, COMSIG_TRAITOR_BUG_PRE_PLANTED_OBJECT, target) if(!(result & COMPONENT_FORCE_PLACEMENT)) if(result & COMPONENT_FORCE_FAIL_PLACEMENT || !istype(target, target_object_type)) @@ -315,6 +316,3 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) anchored = FALSE UnregisterSignal(planted_on, COMSIG_QDELETING) planted_on = null - -/obj/item/traitor_bug/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) - return !istype(storage_holder, target_object_type) diff --git a/code/modules/antagonists/traitor/traitor_objective.dm b/code/modules/antagonists/traitor/traitor_objective.dm index 3e13340157334..ecfebaddeadcb 100644 --- a/code/modules/antagonists/traitor/traitor_objective.dm +++ b/code/modules/antagonists/traitor/traitor_objective.dm @@ -216,10 +216,10 @@ /datum/traitor_objective/proc/finish_objective(mob/user) switch(objective_state) if(OBJECTIVE_STATE_FAILED, OBJECTIVE_STATE_INVALID) - user.playsound_local(get_turf(user), 'sound/traitor/objective_failed.ogg', vol = 100, vary = FALSE, channel = CHANNEL_TRAITOR) + user.playsound_local(get_turf(user), 'sound/music/antag/traitor/objective_failed.ogg', vol = 100, vary = FALSE, channel = CHANNEL_TRAITOR) return TRUE if(OBJECTIVE_STATE_COMPLETED) - user.playsound_local(get_turf(user), 'sound/traitor/objective_success.ogg', vol = 100, vary = FALSE, channel = CHANNEL_TRAITOR) + user.playsound_local(get_turf(user), 'sound/music/antag/traitor/objective_success.ogg', vol = 100, vary = FALSE, channel = CHANNEL_TRAITOR) completion_payout() return TRUE return FALSE diff --git a/code/modules/antagonists/traitor/uplink_handler.dm b/code/modules/antagonists/traitor/uplink_handler.dm index 2d27f3c4a0eff..83899300614e5 100644 --- a/code/modules/antagonists/traitor/uplink_handler.dm +++ b/code/modules/antagonists/traitor/uplink_handler.dm @@ -255,7 +255,7 @@ if(!(to_take in potential_objectives)) return - user.playsound_local(get_turf(user), 'sound/traitor/objective_taken.ogg', vol = 100, vary = FALSE, channel = CHANNEL_TRAITOR) + user.playsound_local(get_turf(user), 'sound/music/antag/traitor/objective_taken.ogg', vol = 100, vary = FALSE, channel = CHANNEL_TRAITOR) to_take.on_objective_taken(user) to_take.objective_state = OBJECTIVE_STATE_ACTIVE potential_objectives -= to_take diff --git a/code/modules/antagonists/voidwalker/voidwalker_abilities.dm b/code/modules/antagonists/voidwalker/voidwalker_abilities.dm index 4fe88f50d01c6..3bf4e1b76c3a4 100644 --- a/code/modules/antagonists/voidwalker/voidwalker_abilities.dm +++ b/code/modules/antagonists/voidwalker/voidwalker_abilities.dm @@ -12,7 +12,7 @@ deactive_msg = "You refocus your eyes..." /// how long we need to stare at someone to unsettle them (woooooh) var/stare_time = 8 SECONDS - /// how long we stun someone on succesful cast + /// how long we stun someone on successful cast var/stun_time = 2 SECONDS /// stamina damage we doooo var/stamina_damage = 80 @@ -37,7 +37,7 @@ spookify(cast_on) return owner.balloon_alert(owner, "line of sight broken!") - return SPELL_CANCEL_CAST + return SPELL_NO_IMMEDIATE_COOLDOWN /datum/action/cooldown/spell/pointed/unsettle/proc/check_if_in_view(mob/living/carbon/human/target) SIGNAL_HANDLER diff --git a/code/modules/antagonists/voidwalker/voidwalker_loot.dm b/code/modules/antagonists/voidwalker/voidwalker_loot.dm index 73ed9c7cd2207..11a51c8a5b2f1 100644 --- a/code/modules/antagonists/voidwalker/voidwalker_loot.dm +++ b/code/modules/antagonists/voidwalker/voidwalker_loot.dm @@ -35,7 +35,7 @@ starer.gain_trauma(/datum/brain_trauma/voided/stable) to_chat(user, span_purple("And a whole world opens up to you.")) - playsound(get_turf(user), 'sound/effects/curse5.ogg', 60) + playsound(get_turf(user), 'sound/effects/curse/curse5.ogg', 60) uses-- if(uses <= 0 ) diff --git a/code/modules/antagonists/voidwalker/voidwalker_species.dm b/code/modules/antagonists/voidwalker/voidwalker_species.dm index 069582fbb2c7e..5b50c3da69ed9 100644 --- a/code/modules/antagonists/voidwalker/voidwalker_species.dm +++ b/code/modules/antagonists/voidwalker/voidwalker_species.dm @@ -20,6 +20,7 @@ TRAIT_ADVANCEDTOOLUSER, TRAIT_NO_BLOOD_OVERLAY, TRAIT_NO_THROWING, + TRAIT_GENELESS, ) changesource_flags = MIRROR_BADMIN diff --git a/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm b/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm index 9df3eabab3d21..9bf5b3c2664c3 100644 --- a/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm +++ b/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm @@ -16,7 +16,7 @@ resistance_flags = INDESTRUCTIBLE | ACID_PROOF | FIRE_PROOF | LAVA_PROOF | UNACIDABLE w_class = WEIGHT_CLASS_HUGE tool_behaviour = TOOL_MINING - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' wound_bonus = -30 bare_wound_bonus = 20 diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 9176558c7a166..1036abc24955f 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -17,7 +17,7 @@ force = 15 throwforce = 10 w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' var/charges = 1 var/spawn_type = /obj/tear_in_reality var/spawn_amt = 1 @@ -171,7 +171,7 @@ throwforce = 15 damtype = BURN force = 15 - hitsound = 'sound/items/welder2.ogg' + hitsound = 'sound/items/tools/welder2.ogg' var/mob/current_owner @@ -335,7 +335,7 @@ whistler = user var/turf/current_turf = get_turf(user) var/turf/spawn_location = locate(user.x + pick(-7, 7), user.y, user.z) - playsound(current_turf,'sound/magic/warpwhistle.ogg', 200, TRUE) + playsound(current_turf,'sound/effects/magic/warpwhistle.ogg', 200, TRUE) new /obj/effect/temp_visual/teleporting_tornado(spawn_location, src) ///Teleporting tornado, spawned by warp whistle, teleports the user if they manage to pick them up. @@ -431,10 +431,10 @@ COMSIG_ITEM_MAGICALLY_CHARGED = PROC_REF(on_magic_charge), ) -/obj/item/runic_vendor_scepter/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/runic_vendor_scepter/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/runic_vendor_scepter/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(scepter_is_busy_recharging) user.balloon_alert(user, "busy!") return ITEM_INTERACT_BLOCKING @@ -472,7 +472,7 @@ return ITEM_INTERACT_BLOCKING scepter_is_busy_summoning = FALSE if(summon_vendor_charges) - playsound(src,'sound/weapons/resonator_fire.ogg',50,TRUE) + playsound(src,'sound/items/weapons/resonator_fire.ogg',50,TRUE) user.visible_message(span_warning("[user] summons a runic vendor!")) new /obj/machinery/vending/runic_vendor(afterattack_turf) summon_vendor_charges-- diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index a954391bfdb7f..e7f9419ce6b06 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -92,7 +92,7 @@ if(IS_CULTIST(exorcist) || theme == THEME_HOLY) return balloon_alert(exorcist, "exorcising...") - playsound(src, 'sound/hallucinations/veryfar_noise.ogg', 40, TRUE) + playsound(src, 'sound/effects/hallucinations/veryfar_noise.ogg', 40, TRUE) if(!do_after(exorcist, 4 SECONDS, target = src)) return playsound(src, 'sound/effects/pray_chaplain.ogg', 60, TRUE) @@ -229,21 +229,21 @@ shade_datum.release_time = world.time on_release_spirits() -/obj/item/soulstone/pre_attack(atom/A, mob/living/user, params) - 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 ..() +/obj/item/soulstone/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + var/mob/living/basic/shade/occupant = locate() in src + var/obj/item/storage/toolbox/mechanical/target_toolbox = interacting_with + if(isnull(occupant) || !istype(target_toolbox) || target_toolbox.has_soul) + return NONE if(theme == THEME_HOLY && IS_CULTIST(user)) hot_potato(user) - return + return ITEM_INTERACT_BLOCKING if(!role_check(user)) user.Unconscious(10 SECONDS) to_chat(user, span_userdanger("Your body is wracked with debilitating pain!")) - return + return ITEM_INTERACT_BLOCKING - user.visible_message("[user] holds [src] above [user.p_their()] head and forces it into [target_toolbox] with a flash of light!", \ + user.visible_message(span_notice("[user] holds [src] above [user.p_their()] head and forces it into [target_toolbox] with a flash of light!"), \ span_notice("You hold [src] above your head briefly, then force it into [target_toolbox], transferring the [occupant]'s soul!"), ignored_mobs = occupant) to_chat(occupant, span_userdanger("[user] holds you up briefly, then forces you into [target_toolbox]!")) to_chat(occupant, span_deadsay("Your eternal soul has been sacrificed to restore the soul of a toolbox. Them's the breaks!")) @@ -258,6 +258,7 @@ target_toolbox.icon_state = "toolbox_blue_old" target_toolbox.has_soul = TRUE target_toolbox.has_latches = FALSE + return ITEM_INTERACT_SUCCESS ///////////////////////////Transferring to constructs///////////////////////////////////////////////////// /obj/structure/constructshell @@ -265,11 +266,11 @@ icon = 'icons/mob/shells.dmi' icon_state = "construct_cult" desc = "A wicked machine used by those skilled in magical arts. It is inactive." - var/extra_desc = {"A construct shell, used to house bound souls from a soulstone.\n - Placing a soulstone with a soul into this shell allows you to produce your choice of the following:\n - An Artificer, which can produce more shells and soulstones, as well as fortifications.\n - A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n - A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."} + var/extra_desc = span_cult("A construct shell, used to house bound souls from a soulstone.\n\ + Placing a soulstone with a soul into this shell allows you to produce your choice of the following:\n\ + An Artificer, which can produce more shells and soulstones, as well as fortifications.\n\ + A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n\ + A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow.") /obj/structure/constructshell/examine(mob/user) . = ..() @@ -295,15 +296,15 @@ /// Procs for moving soul in and out off stone /// Transfer the mind of a carbon mob (which is then dusted) into a shade mob inside src. -/// If forced, sacrifical and stat checks are skipped. +/// If forced, sacrificial and stat checks are skipped. /obj/item/soulstone/proc/capture_soul(mob/living/carbon/victim, mob/user, forced = FALSE) - if(!iscarbon(victim)) //TODO: Add sacrifice stoning for non-organics, just because you have no body doesnt mean you dont have a soul + if(!iscarbon(victim)) //TODO: Add sacrifice stoning for non-organics, just because you have no body doesn't mean you don't have a soul return FALSE if(contents.len) return FALSE if(!forced) - var/datum/antagonist/cult/cultist = IS_CULTIST(user) + var/datum/antagonist/cult/cultist = GET_CULTIST(user) if(cultist) var/datum/team/cult/cult_team = cultist.get_team() if(victim.mind && cult_team.is_sacrifice_target(victim.mind)) @@ -377,7 +378,7 @@ /obj/item/soulstone/proc/check_menu(mob/user, obj/structure/constructshell/shell) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.is_holding(src) || !user.CanReach(shell, src)) + if(user.incapacitated || !user.is_holding(src) || !user.CanReach(shell, src)) return FALSE return TRUE @@ -449,7 +450,7 @@ /// Called when a ghost is chosen to become a shade. /obj/item/soulstone/proc/on_poll_concluded(mob/living/master, mob/living/victim, mob/dead/observer/ghost) - if(isnull(victim) || master.incapacitated() || !master.is_holding(src) || !master.CanReach(victim, src)) + if(isnull(victim) || master.incapacitated || !master.is_holding(src) || !master.CanReach(victim, src)) return FALSE if(isnull(ghost?.client)) to_chat(master, span_danger("There were no spirits willing to become a shade.")) diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm index fe5f69fd9fa53..737a3d73403d1 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm @@ -28,7 +28,7 @@ /datum/spellbook_entry/summon/guns/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy = TRUE) summon_guns(user, 10) - playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/effects/magic/castsummon.ogg', 50, TRUE) return ..() /datum/spellbook_entry/summon/magic @@ -45,7 +45,7 @@ /datum/spellbook_entry/summon/magic/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy = TRUE) summon_magic(user, 10) - playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/effects/magic/castsummon.ogg', 50, TRUE) return ..() /datum/spellbook_entry/summon/events @@ -65,7 +65,7 @@ /datum/spellbook_entry/summon/events/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy = TRUE) summon_events(user) - playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/effects/magic/castsummon.ogg', 50, TRUE) return ..() /datum/spellbook_entry/summon/curse_of_madness @@ -74,11 +74,11 @@ cost = 4 /datum/spellbook_entry/summon/curse_of_madness/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy = TRUE) - var/message = tgui_input_text(user, "Whisper a secret truth to drive your victims to madness", "Whispers of Madness") + var/message = tgui_input_text(user, "Whisper a secret truth to drive your victims to madness", "Whispers of Madness", max_length = MAX_MESSAGE_LEN) if(!message || QDELETED(user) || QDELETED(book) || !can_buy(user, book)) return FALSE curse_of_madness(user, message) - playsound(user, 'sound/magic/mandswap.ogg', 50, TRUE) + playsound(user, 'sound/effects/magic/mandswap.ogg', 50, TRUE) return ..() /// A wizard ritual that allows the wizard to teach a specific spellbook enty to everyone on the station. diff --git a/code/modules/antagonists/wizard/equipment/teleport_rod.dm b/code/modules/antagonists/wizard/equipment/teleport_rod.dm index c15b66da6ff61..e0a5ce31145c6 100644 --- a/code/modules/antagonists/wizard/equipment/teleport_rod.dm +++ b/code/modules/antagonists/wizard/equipment/teleport_rod.dm @@ -85,7 +85,7 @@ . = ITEM_INTERACT_SUCCESS - var/sound/teleport_sound = sound('sound/magic/summonitems_generic.ogg') + var/sound/teleport_sound = sound('sound/effects/magic/summonitems_generic.ogg') teleport_sound.pitch = 0.5 // Handle our own pizzaz rather than doing it in do_teleport new /obj/effect/temp_visual/teleport_flux(start_turf, user.dir) diff --git a/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm b/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm index 98ee3d0f22aa7..a2e30cfbe227f 100644 --- a/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm @@ -172,7 +172,7 @@ data["full_random_bonus"] = initial(uses) + full_random_bonus return data -/obj/item/spellbook/ui_act(action, params) +/obj/item/spellbook/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/all_access.dm b/code/modules/antagonists/wizard/grand_ritual/finales/all_access.dm index ab699e74064de..1ff93db81938b 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/all_access.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/all_access.dm @@ -14,4 +14,4 @@ target_door.req_one_access = list() INVOKE_ASYNC(target_door, TYPE_PROC_REF(/obj/machinery/door/airlock, open)) CHECK_TICK - priority_announce("AULIE OXIN FIERA!!", null, 'sound/magic/knock.ogg', sender_override = "[invoker.real_name]", color_override = "purple") + priority_announce("AULIE OXIN FIERA!!", null, 'sound/effects/magic/knock.ogg', sender_override = "[invoker.real_name]", color_override = "purple") diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm index a951a5daf4223..3716a684c6a3d 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm @@ -31,14 +31,14 @@ ) /datum/grand_finale/armageddon/trigger(mob/living/carbon/human/invoker) - priority_announce(pick(possible_last_words), null, 'sound/magic/voidblink.ogg', sender_override = "[invoker.real_name]", color_override = "purple") + priority_announce(pick(possible_last_words), null, 'sound/effects/magic/voidblink.ogg', sender_override = "[invoker.real_name]", color_override = "purple") var/turf/current_location = get_turf(invoker) invoker.gib(DROP_ALL_REMAINS) var/static/list/doom_options = list() if (!length(doom_options)) doom_options = list(DOOM_SINGULARITY, DOOM_TESLA) - if (!SSmapping.config.planetary) + if (!SSmapping.is_planetary()) doom_options += DOOM_METEORS switch(pick(doom_options)) diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/captaincy.dm b/code/modules/antagonists/wizard/grand_ritual/finales/captaincy.dm index f3df3e68b922c..1ce4e1648daf6 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/captaincy.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/captaincy.dm @@ -9,7 +9,7 @@ message_admins("[key_name(invoker)] has replaced the Captain") var/list/former_captains = list() var/list/other_crew = list() - SEND_SOUND(world, sound('sound/magic/timeparadox2.ogg')) + SEND_SOUND(world, sound('sound/effects/magic/timeparadox2.ogg')) for (var/mob/living/carbon/human/crewmate as anything in GLOB.human_list) if (!crewmate.mind) diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm b/code/modules/antagonists/wizard/grand_ritual/finales/cheese.dm index 5cdd770486cd5..f0b8ef709aee8 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.", "[command_name()] 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/glass/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/immortality.dm b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm index e0d4f3376f80a..436383975d131 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/immortality.dm @@ -19,7 +19,7 @@ /datum/grand_finale/immortality/trigger(mob/living/carbon/human/invoker) new /obj/effect/temp_visual/immortality_blast(get_turf(invoker)) - SEND_SOUND(world, sound('sound/magic/teleport_diss.ogg')) + SEND_SOUND(world, sound('sound/effects/magic/teleport_diss.ogg')) for (var/mob/living/alive_guy as anything in GLOB.mob_living_list) new /obj/effect/temp_visual/immortality_pulse(get_turf(alive_guy)) if (!alive_guy.mind) diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm b/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm index a2f25863a4baf..2134e2862a461 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm @@ -191,7 +191,7 @@ possible_obstacle.atom_destruction("magic") if (evaporated_obstacles) - playsound(target_turf, 'sound/magic/blind.ogg', 100, TRUE) + playsound(target_turf, 'sound/effects/magic/blind.ogg', 100, TRUE) target_turf.balloon_alert(owner, "rune created") var/obj/effect/grand_rune/new_rune = new next_rune_typepath(target_turf, times_completed) diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm index 15900a6ac0b0a..009853bed22d1 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm @@ -147,7 +147,7 @@ haunt_color = spell_colour, \ haunt_duration = 10 SECONDS, \ aggro_radius = 0, \ - spawn_message = span_revenwarning("[sacrifice] begins to float and twirl into the air as it becomes enveloped in otherworldy energies..."), \ + spawn_message = span_revenwarning("[sacrifice] begins to float and twirl into the air as it becomes enveloped in otherworldly energies..."), \ ) addtimer(CALLBACK(sacrifice, TYPE_PROC_REF(/obj/item/food/cheese/wheel, consume_cheese)), 10 SECONDS) cheese_sacrificed += length(cheese_to_haunt) @@ -162,7 +162,7 @@ on_invocation_complete(user) return flick("[icon_state]_flash", src) - playsound(src,'sound/magic/staff_animation.ogg', 75, TRUE) + playsound(src,'sound/effects/magic/staff_animation.ogg', 75, TRUE) INVOKE_ASYNC(src, PROC_REF(invoke_rune), user) /// Add special effects for casting a spell, basically you glow and hover in the air. @@ -181,7 +181,7 @@ /// Called when you actually finish the damn thing /obj/effect/grand_rune/proc/on_invocation_complete(mob/living/user) is_in_use = FALSE - playsound(src,'sound/magic/staff_change.ogg', 75, TRUE) + playsound(src,'sound/effects/magic/staff_change.ogg', 75, TRUE) INVOKE_ASYNC(src, PROC_REF(summon_round_event), user) // Running the event sleeps trigger_side_effects() tear_reality() @@ -253,7 +253,7 @@ while(created < to_create && location_sanity < 100) var/turf/chosen_location = get_safe_random_station_turf() - // We don't want them close to each other - at least 1 tile of seperation + // We don't want them close to each other - at least 1 tile of separation var/list/nearby_things = range(1, chosen_location) var/obj/effect/heretic_influence/what_if_i_have_one = locate() in nearby_things var/obj/effect/visible_heretic_influence/what_if_i_had_one_but_its_used = locate() in nearby_things 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 a760115a61b9e..52c4056ee01fa 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm @@ -38,7 +38,7 @@ abstract = FALSE /datum/grand_side_effect/scramble_turfs/trigger(potency, turf/ritual_location, mob/invoker) - playsound(ritual_location, 'sound/magic/timeparadox2.ogg', 60, TRUE) + playsound(ritual_location, 'sound/effects/magic/timeparadox2.ogg', 60, TRUE) var/datum/action/cooldown/spell/spell = new /datum/action/cooldown/spell/spacetime_dist() spell.cast(ritual_location) @@ -200,7 +200,7 @@ #define CREWMATE_SUMMON_TELEPORT_DELAY 9 SECONDS /datum/grand_side_effect/summon_crewmate/trigger(potency, turf/ritual_location, mob/invoker) - playsound(ritual_location, 'sound/magic/lightning_chargeup.ogg', 65, TRUE) + playsound(ritual_location, 'sound/effects/magic/lightning_chargeup.ogg', 65, TRUE) var/list/potential_victims = list() var/area/our_area = get_area(ritual_location) for (var/mob/living/carbon/human/crewmate as anything in GLOB.human_list) @@ -218,7 +218,7 @@ new /obj/effect/temp_visual/teleport_abductor(landing_pos) var/mob/living/carbon/human/victim = pick(potential_victims) - playsound(get_turf(victim),'sound/magic/repulse.ogg', 60, TRUE) + playsound(get_turf(victim),'sound/effects/magic/repulse.ogg', 60, TRUE) victim.Immobilize(CREWMATE_SUMMON_TELEPORT_DELAY) victim.AddElement(/datum/element/forced_gravity, 0) victim.add_filter("teleport_glow", 2, list("type" = "outline", "color" = "#de3aff48", "size" = 2)) @@ -244,7 +244,7 @@ abstract = FALSE /datum/grand_side_effect/smoke/trigger(potency, turf/ritual_location, mob/invoker) - playsound(src, 'sound/magic/smoke.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/smoke.ogg', 50, TRUE) var/range = LERP(2, 4, potency/GRAND_RITUAL_FINALE_COUNT) var/datum/effect_system/fluid_spread/smoke/colourful/smoke = new smoke.set_up(range, holder = ritual_location, location = ritual_location) @@ -383,7 +383,7 @@ return if (!mob_path) return - playsound(get_turf(src),'sound/magic/teleport_app.ogg', 60, TRUE) + playsound(get_turf(src),'sound/effects/magic/teleport_app.ogg', 60, TRUE) do_sparks(5, FALSE, loc) new mob_path(loc) diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index ebeb00d799b07..ddf49028e3aff 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -15,6 +15,7 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) can_assign_self_objectives = TRUE default_custom_objective = "Demonstrate your incredible and destructive magical powers." hardcore_random_bonus = TRUE + var/give_objectives = TRUE var/strip = TRUE //strip before equipping var/allow_rename = TRUE @@ -28,11 +29,6 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) /// Perks that wizard learn var/list/perks = list() -/datum/antagonist/wizard/New() - if(move_to_lair) // kick off loading of your lair, if you want to be moved to it - INVOKE_ASYNC(SSmapping, TYPE_PROC_REF(/datum/controller/subsystem/mapping, lazy_load_template), LAZY_TEMPLATE_KEY_WIZARDDEN) - return ..() - /datum/antagonist/wizard_minion name = "Wizard Minion" antagpanel_category = ANTAG_GROUP_WIZARDS @@ -129,7 +125,7 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) if(!owner.current) return if(!GLOB.wizardstart.len) - SSjob.SendToLateJoin(owner.current) + SSjob.send_to_late_join(owner.current) to_chat(owner, "HOT INSERTION, GO GO GO") owner.current.forceMove(pick(GLOB.wizardstart)) @@ -448,10 +444,10 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) /datum/team/wizard/roundend_report() var/list/parts = list() - parts += "Wizards/witches of [master_wizard.owner.name] team were:" + parts += span_header("Wizards/witches of [master_wizard.owner.name] team were:") parts += master_wizard.roundend_report() parts += " " - parts += "[master_wizard.owner.name] apprentices and minions were:" + parts += span_header("[master_wizard.owner.name] apprentices and minions were:") parts += printplayerlist(members - master_wizard.owner) return "
      [parts.Join("
      ")]
      " diff --git a/code/modules/antagonists/xeno/xeno.dm b/code/modules/antagonists/xeno/xeno.dm index 59c83fd52ed11..b60b649857877 100644 --- a/code/modules/antagonists/xeno/xeno.dm +++ b/code/modules/antagonists/xeno/xeno.dm @@ -11,7 +11,7 @@ //Simply lists them. /datum/team/xeno/roundend_report() var/list/parts = list() - parts += "The [name] were:" + parts += span_header("The [name] were:") parts += printplayerlist(members) return "
      [parts.Join("
      ")]
      " @@ -109,7 +109,7 @@ var/escape_count = 0 //counts the number of xenomorphs that were born in captivity who ended the round outside of it var/captive_count = 0 //counts the number of xenomorphs born in captivity who remained there until the end of the round (losers) - parts += "The [name] were:
      " + parts += span_header("The [name] were:
      ") if(check_captivity(progenitor.current) == CAPTIVE_XENO_PASS) parts += span_greentext("The progenitor of this hive was [progenitor.key], as [progenitor], who successfully escaped captivity!") + "
      " @@ -160,7 +160,7 @@ else mind.add_antag_datum(/datum/antagonist/xeno) - mind.set_assigned_role(SSjob.GetJobType(/datum/job/xenomorph)) + mind.set_assigned_role(SSjob.get_job_type(/datum/job/xenomorph)) mind.special_role = ROLE_ALIEN /mob/living/carbon/alien/on_wabbajacked(mob/living/new_mob) @@ -170,7 +170,7 @@ if(isalien(new_mob)) return mind.remove_antag_datum(/datum/antagonist/xeno) - mind.set_assigned_role(SSjob.GetJobType(/datum/job/unassigned)) + mind.set_assigned_role(SSjob.get_job_type(/datum/job/unassigned)) mind.special_role = null #undef CAPTIVE_XENO_DEAD diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm index 567ac383d9440..1c11e0f8086cc 100644 --- a/code/modules/art/paintings.dm +++ b/code/modules/art/paintings.dm @@ -159,7 +159,7 @@ . = ..() ui_interact(user) -/obj/item/canvas/ui_act(action, params) +/obj/item/canvas/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -417,7 +417,7 @@ /obj/item/canvas/proc/try_rename(mob/user) if(painting_metadata.loaded_from_json) // No renaming old paintings return TRUE - var/new_name = tgui_input_text(user, "What do you want to name the painting?", "Title Your Masterpiece", null, MAX_NAME_LEN) + var/new_name = tgui_input_text(user, "What do you want to name the painting?", "Title Your Masterpiece", max_length = MAX_NAME_LEN) new_name = reject_bad_name(new_name, allow_numbers = TRUE, ascii_only = FALSE, strict = TRUE, cap_after_symbols = FALSE) if(isnull(new_name)) return FALSE diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm index fd64d212f3e80..eeb0cfa9cb432 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -36,7 +36,7 @@ /obj/structure/statue/attackby(obj/item/W, mob/living/user, params) add_fingerprint(user) if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=1)) + if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return FALSE user.balloon_alert(user, "slicing apart...") if(W.use_tool(src, user, 40, volume=50)) @@ -277,10 +277,10 @@ custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.75) attack_verb_continuous = list("stabs") attack_verb_simple = list("stab") - hitsound = 'sound/weapons/bladeslice.ogg' - usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg') - drop_sound = 'sound/items/handling/screwdriver_drop.ogg' - pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' + usesound = list('sound/effects/pickaxe/picaxe1.ogg', 'sound/effects/pickaxe/picaxe2.ogg', 'sound/effects/pickaxe/picaxe3.ogg') + drop_sound = 'sound/items/handling/tools/screwdriver_drop.ogg' + pickup_sound = 'sound/items/handling/tools/screwdriver_pickup.ogg' sharpness = SHARP_POINTY tool_behaviour = TOOL_RUSTSCRAPER toolspeed = 3 // You're gonna have a bad time @@ -348,7 +348,7 @@ Moving interrupts //How long whole process takes var/sculpting_time = 30 SECONDS //Single interruptible progress period - var/sculpting_period = round(sculpting_time / world.icon_size) //this is just so it reveals pixels line by line for each. + var/sculpting_period = round(sculpting_time / ICON_SIZE_Y) //this is just so it reveals pixels line by line for each. var/interrupted = FALSE var/remaining_time = sculpting_time - (prepared_block.completion * sculpting_time) @@ -473,7 +473,7 @@ Moving interrupts return FALSE //No big icon things var/list/icon_dimensions = get_icon_dimensions(target.icon) - if(icon_dimensions["width"] != world.icon_size || icon_dimensions["height"] != world.icon_size) + if(icon_dimensions["width"] != ICON_SIZE_X || icon_dimensions["height"] != ICON_SIZE_Y) user.balloon_alert(user, "sculpt target is too big!") return FALSE return TRUE @@ -509,7 +509,7 @@ Moving interrupts remove_filter("partial_uncover") target_appearance_with_filters = null else - var/mask_offset = min(world.icon_size,round(completion * world.icon_size)) + var/mask_offset = min(ICON_SIZE_Y,round(completion * ICON_SIZE_Y)) remove_filter("partial_uncover") add_filter("partial_uncover", 1, alpha_mask_filter(icon = white, y = -mask_offset)) target_appearance_with_filters.filters = filter(type="alpha",icon=white,y=-mask_offset,flags=MASK_INVERSE) diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index b81eb26e7fae9..6e448637dbaa4 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -109,7 +109,7 @@ if(burnt_out || (world.time < last_trigger + cooldown)) return FALSE last_trigger = world.time - playsound(src, 'sound/weapons/flash.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/flash.ogg', 100, TRUE) set_light_on(TRUE) addtimer(CALLBACK(src, PROC_REF(flash_end)), FLASH_LIGHT_DURATION, TIMER_OVERRIDE|TIMER_UNIQUE) times_used++ @@ -128,7 +128,7 @@ /** * Handles actual flashing part of the attack * - * This proc is awful in every sense of the way, someone should definately refactor this whole code. + * This proc is awful in every sense of the way, someone should definitely refactor this whole code. * Arguments: * * M - Victim * * user - Attacker @@ -161,7 +161,7 @@ else if(sigreturn & DEVIATION_OVERRIDE_NONE) deviation = DEVIATION_NONE - //If you face away from someone they shouldnt notice any effects. + //If you face away from someone they shouldn't notice any effects. if(deviation == DEVIATION_FULL) return @@ -185,7 +185,7 @@ /** * Handles the directionality of the attack * - * Returns the amount of 'deviation', 0 being facing eachother, 1 being sideways, 2 being facing away from eachother. + * Returns the amount of 'deviation', 0 being facing each other, 1 being sideways, 2 being facing away from each other. * Arguments: * * victim - Victim * * attacker - Attacker @@ -328,7 +328,7 @@ return FALSE overheat = TRUE addtimer(CALLBACK(src, PROC_REF(cooldown)), flashcd) - playsound(src, 'sound/weapons/flash.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/flash.ogg', 100, TRUE) update_icon(ALL, TRUE) return TRUE diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 20316ebfd66d1..ad2c6ac17641d 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -58,8 +58,8 @@ //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) + audible_message(span_infoplain("[icon2html(src, hearers(src))] *beep* *beep* *beep*")) + playsound(src, 'sound/machines/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) toggle_scan() /obj/item/assembly/health/proc/toggle_scan() @@ -100,7 +100,7 @@ data["target"] = health_target return data -/obj/item/assembly/health/ui_act(action, params) +/obj/item/assembly/health/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return . diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 7c23d1dc4cbdb..f0e9b5136ee8d 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -164,7 +164,7 @@ message = span_infoplain("[icon2html(src, hearers(holder || src))] *beep* *beep* *beep*"), hearing_distance = hearing_range, ) - playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE, extrarange = hearing_range - SOUND_RANGE + 1, falloff_distance = hearing_range) + playsound(src, 'sound/machines/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE, extrarange = hearing_range - SOUND_RANGE + 1, falloff_distance = hearing_range) COOLDOWN_START(src, next_activate, 3 SECONDS) /obj/item/assembly/infra/activate() @@ -255,15 +255,15 @@ var/x_move = 0 var/y_move = 0 if(movement_dir & NORTH) - y_move = -32 + y_move = -ICON_SIZE_Y else if(movement_dir & SOUTH) - y_move = 32 + y_move = ICON_SIZE_Y if(movement_dir & WEST) - x_move = 32 + x_move = ICON_SIZE_X else if(movement_dir & EAST) - x_move = -32 + x_move = -ICON_SIZE_X - var/fake_glide_time = round(world.icon_size / glide_size * world.tick_lag, world.tick_lag) + var/fake_glide_time = round(ICON_SIZE_ALL / glide_size * world.tick_lag, world.tick_lag) for(var/obj/effect/ebeam/beam as anything in active_beam?.elements) var/matrix/base_transform = matrix(beam.transform) beam.transform = beam.transform.Translate(x_move, y_move) @@ -291,7 +291,7 @@ data["visible"] = visible return data -/obj/item/assembly/infra/ui_act(action, params) +/obj/item/assembly/infra/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return . diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 5c7f5208254f0..69436f7985dbf 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -89,7 +89,7 @@ to_chat(user, span_warning("Your hand slips, setting off the trigger!")) pulse() update_appearance() - playsound(loc, 'sound/weapons/handcuffs.ogg', 30, TRUE, -3) + playsound(loc, 'sound/items/weapons/handcuffs.ogg', 30, TRUE, -3) /obj/item/assembly/mousetrap/update_icon_state() icon_state = "mousetrap[armed ? "armed" : ""]" @@ -174,7 +174,7 @@ to_chat(user, span_notice("You disarm [src].")) armed = !armed update_appearance() - playsound(src, 'sound/weapons/handcuffs.ogg', 30, TRUE, -3) + playsound(src, 'sound/items/weapons/handcuffs.ogg', 30, TRUE, -3) // Clumsy check only diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 031a3f78eadeb..6ba2a7a63421e 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -92,9 +92,9 @@ return FALSE next_activate = world.time + (3 SECONDS) // this must happen before anything else pulse() - audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*", null, hearing_range) + audible_message(span_infoplain("[icon2html(src, hearers(src))] *beep* *beep* *beep*"), null, hearing_range) for(var/mob/hearing_mob in get_hearers_in_view(hearing_range, src)) - hearing_mob.playsound_local(get_turf(src), 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) + hearing_mob.playsound_local(get_turf(src), 'sound/machines/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) return TRUE @@ -154,7 +154,7 @@ data["sensitivity"] = sensitivity return data -/obj/item/assembly/prox_sensor/ui_act(action, params) +/obj/item/assembly/prox_sensor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 5af89f10ec1b4..4e265384ace24 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -46,7 +46,7 @@ user.set_suicide(TRUE) user.adjustOxyLoss(200)//it sends an electrical pulse to their heart, killing them. or something. user.death(FALSE) - playsound(user, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) + playsound(user, 'sound/machines/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) qdel(src) /obj/item/assembly/signaler/Initialize(mapload) @@ -169,9 +169,9 @@ last_receive_signal_log = istype(holder, /obj/item/transfer_valve) ? signal.logging_data : null pulse() - audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*", null, hearing_range) + audible_message(span_infoplain("[icon2html(src, hearers(src))] *beep* *beep* *beep*"), null, hearing_range) for(var/mob/hearing_mob in get_hearers_in_view(hearing_range, src)) - hearing_mob.playsound_local(get_turf(src), 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) + hearing_mob.playsound_local(get_turf(src), 'sound/machines/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) return TRUE /obj/item/assembly/signaler/proc/set_frequency(new_frequency) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 0d05d44320d96..09cbfd9b0dc59 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -58,7 +58,7 @@ pulse() audible_message(span_infoplain("[icon2html(src, hearers(src))] *beep* *beep* *beep*"), null, hearing_range) for(var/mob/hearing_mob in get_hearers_in_view(hearing_range, src)) - hearing_mob.playsound_local(get_turf(src), 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) + hearing_mob.playsound_local(get_turf(src), 'sound/machines/beep/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) if(loop) timing = TRUE update_appearance() @@ -110,7 +110,7 @@ data["loop"] = loop return data -/obj/item/assembly/timer/ui_act(action, params) +/obj/item/assembly/timer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm index 77e6e0333a573..bc302a188d825 100644 --- a/code/modules/asset_cache/asset_list.dm +++ b/code/modules/asset_cache/asset_list.dm @@ -486,6 +486,7 @@ GLOBAL_LIST_EMPTY(asset_datums) #undef SPRSZ_ICON #undef SPRSZ_STRIPPED + /datum/asset/changelog_item _abstract = /datum/asset/changelog_item var/item_filename diff --git a/code/modules/asset_cache/assets/rtd.dm b/code/modules/asset_cache/assets/rtd.dm index 23a3b0d71b2db..66899fcb943f1 100644 --- a/code/modules/asset_cache/assets/rtd.dm +++ b/code/modules/asset_cache/assets/rtd.dm @@ -2,7 +2,7 @@ name = "rtd" /datum/asset/spritesheet/rtd/create_spritesheets() - //some tiles may share the same icon but have diffrent properties to animate that icon + //some tiles may share the same icon but have different properties to animate that icon //so we keep track of what icons we registered var/list/registered = list() diff --git a/code/modules/asset_cache/transports/asset_transport.dm b/code/modules/asset_cache/transports/asset_transport.dm index 3dbcc301843cc..62ca18fe82a19 100644 --- a/code/modules/asset_cache/transports/asset_transport.dm +++ b/code/modules/asset_cache/transports/asset_transport.dm @@ -125,7 +125,7 @@ if (unreceived.len) if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) - to_chat(client, "Sending Resources...") + to_chat(client, span_infoplain("Sending Resources...")) for (var/asset_name in unreceived) var/new_asset_name = asset_name diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 7a06572824ae6..dc56aa3fda7f7 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -304,7 +304,7 @@ our_excited_group = excited_group //update our cache if(our_excited_group && enemy_excited_group && enemy_tile.excited) //If you're both excited, no need to compare right? should_share_air = TRUE - else if(our_air.compare(enemy_air)) //Lets see if you're up for it + else if(our_air.compare(enemy_air, ARCHIVE)) //Lets see if you're up for it SSair.add_to_active(enemy_tile) //Add yourself young man var/datum/excited_group/existing_group = our_excited_group || enemy_excited_group || new if(!our_excited_group) @@ -332,7 +332,7 @@ var/datum/gas_mixture/planetary_mix = SSair.planetary[initial_gas_mix] // archive ourself again so we don't accidentally share more gas than we currently have LINDA_CYCLE_ARCHIVE(src) - if(our_air.compare(planetary_mix)) + if(our_air.compare(planetary_mix, ARCHIVE)) if(!our_excited_group) var/datum/excited_group/new_group = new new_group.add_turf(src) @@ -623,7 +623,7 @@ Then we space some of our heat, and think about if we should stop conducting. continue var/turf/neighbor = get_step(src, direction) - if(!neighbor?.thermal_conductivity) + if(!neighbor.thermal_conductivity) continue if(neighbor.archived_cycle < SSair.times_fired) diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index db2732be83fad..f329b98bec06a 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -451,16 +451,17 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) //thermal energy of the system (self and sharer) is unchanged ///Compares sample to self to see if within acceptable ranges that group processing may be enabled +///Takes the gas index to read from as a second arg (either MOLES or ARCHIVE) ///Returns: a string indicating what check failed, or "" if check passes -/datum/gas_mixture/proc/compare(datum/gas_mixture/sample) +/datum/gas_mixture/proc/compare(datum/gas_mixture/sample, index) var/list/sample_gases = sample.gases //accessing datum vars is slower than proc vars var/list/cached_gases = gases var/moles_sum = 0 for(var/id in cached_gases | sample_gases) // compare gases from either mixture // Yes this is actually fast. I too hate it here - var/gas_moles = cached_gases[id]?[MOLES] || 0 - var/sample_moles = sample_gases[id]?[MOLES] || 0 + var/gas_moles = cached_gases[id]?[index] || 0 + var/sample_moles = sample_gases[id]?[index] || 0 // Brief explanation. We are much more likely to not pass this first check then pass the first and fail the second // Because of this, double calculating the delta is FASTER then inserting it into a var if(abs(gas_moles - sample_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) @@ -470,8 +471,12 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) moles_sum += gas_moles if(moles_sum > MINIMUM_MOLES_DELTA_TO_MOVE) //Don't consider temp if there's not enough mols - if(abs(temperature - sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return "temp" + if(index == ARCHIVE) + if(abs(temperature_archived - sample.temperature_archived) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) + return "temp" + else + if(abs(temperature - sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) + return "temp" return "" @@ -547,7 +552,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) /** * Counts how much pressure will there be if we impart MOLAR_ACCURACY amounts of our gas to the output gasmix. - * We do all of this without actually transferring it so dont worry about it changing the gasmix. + * We do all of this without actually transferring it so don't worry about it changing the gasmix. * Returns: Resulting pressure (number). * Args: * - output_air (gasmix). @@ -562,10 +567,10 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) * Args: * - output_air. The gas mix we want to pump to. * - target_pressure. The target pressure we want. - * - ignore_temperature. Returns a cheaper form of gas calculation, useful if the temperature difference between the two gasmixes is low or nonexistant. + * - ignore_temperature. Returns a cheaper form of gas calculation, useful if the temperature difference between the two gasmixes is low or nonexistent. */ /datum/gas_mixture/proc/gas_pressure_calculate(datum/gas_mixture/output_air, target_pressure, ignore_temperature = FALSE) - // So we dont need to iterate the gaslist multiple times. + // So we don't need to iterate the gaslist multiple times. var/our_moles = total_moles() var/output_moles = output_air.total_moles() var/output_pressure = output_air.return_pressure() diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index 7bbfea3dcf253..c040e30db3fcf 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -85,7 +85,7 @@ rarity = 1000 purchaseable = TRUE base_value = 0.1 - desc = "A very common gas that used to pad artifical atmospheres to habitable pressure." + desc = "A very common gas that used to pad artificial atmospheres to habitable pressure." primary_color = "#ffff00" /datum/gas/carbon_dioxide //what the fuck is this? @@ -133,7 +133,7 @@ fusion_power = 10 rarity = 50 base_value = 2.5 - desc = "The most noble gas of them all. High quantities of hyper-noblium actively prevents reactions from occuring." + desc = "The most noble gas of them all. High quantities of hyper-noblium actively prevents reactions from occurring." primary_color = COLOR_TEAL /datum/gas/nitrous_oxide @@ -173,7 +173,7 @@ fusion_power = 5 rarity = 300 base_value = 2.5 - desc = "A highly flammable and radioctive gas." + desc = "A highly flammable and radioactive gas." primary_color = "#32cd32" /datum/gas/bz @@ -279,7 +279,7 @@ moles_visible = MOLES_GAS_VISIBLE rarity = 300 base_value = 4 - desc = "A potent fire supressant. Removes oxygen from high temperature fires and cools down the area" + desc = "A potent fire suppressant. Removes oxygen from high temperature fires and cools down the area" primary_color = COLOR_PURPLE /datum/gas/helium @@ -314,7 +314,7 @@ appearance_flags = TILE_BOUND vis_flags = NONE // The visual offset we are "on". - // Can't use the tradtional loc because we are stored in nullspace, and we can't set plane before init because of the helping that SET_PLANE_EXPLICIT does IN init + // Can't use the traditional loc because we are stored in nullspace, and we can't set plane before init because of the helping that SET_PLANE_EXPLICIT does IN init var/plane_offset = 0 /obj/effect/overlay/gas/New(state, alph, offset) diff --git a/code/modules/atmospherics/gasmixtures/reaction_factors.dm b/code/modules/atmospherics/gasmixtures/reaction_factors.dm index 5148793179500..af058dc77877f 100644 --- a/code/modules/atmospherics/gasmixtures/reaction_factors.dm +++ b/code/modules/atmospherics/gasmixtures/reaction_factors.dm @@ -50,14 +50,14 @@ /datum/gas/carbon_dioxide = "Carbon Dioxide is formed at 1 mole per mole of freon consumed.", "Temperature" = "Can only occur between [FREON_LOWER_TEMPERATURE] - [FREON_MAXIMUM_BURN_TEMPERATURE] Kelvin", "Energy" = "[FIRE_FREON_ENERGY_CONSUMED] joules of energy is absorbed per mole of freon consumed.", - "Hot Ice" = "This reaction produces hot ice when occuring between [HOT_ICE_FORMATION_MINIMUM_TEMPERATURE]-[HOT_ICE_FORMATION_MAXIMUM_TEMPERATURE] kelvins", + "Hot Ice" = "This reaction produces hot ice when occurring between [HOT_ICE_FORMATION_MINIMUM_TEMPERATURE]-[HOT_ICE_FORMATION_MAXIMUM_TEMPERATURE] kelvins", ) /datum/gas_reaction/nitrousformation/init_factors() factor = list( /datum/gas/oxygen = "10 moles of Oxygen needs to be present for the reaction to occur. Oxygen is consumed at 0.5 moles per mole of nitrous oxide formed.", - /datum/gas/nitrogen = " 20 moles of Nitrogen needs to be present for the reaction to occur. Nitrogen is consumed at 1 mole per mole of nitrous oxife formed.", + /datum/gas/nitrogen = " 20 moles of Nitrogen needs to be present for the reaction to occur. Nitrogen is consumed at 1 mole per mole of nitrous oxide formed.", /datum/gas/bz = "5 moles of BZ needs to be present for the reaction to occur. Not consumed.", /datum/gas/nitrous_oxide = "Nitrous oxide gets produced rapidly.", "Temperature" = "Can only occur between [N2O_FORMATION_MIN_TEMPERATURE] - [N2O_FORMATION_MAX_TEMPERATURE] Kelvin", diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 56da306a6d5f2..f6c238c8d0e28 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -328,7 +328,7 @@ SET_REACTION_RESULTS(burned_fuel) var/turf/open/location - if(istype(holder, /datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet. + if(istype(holder, /datum/pipeline)) //Find the tile the reaction is occurring on, or a random part of the network if it's a pipenet. var/datum/pipeline/pipenet = holder location = pick(pipenet.members) else if(isatom(holder)) @@ -686,7 +686,7 @@ var/list/cached_gases = air.gases var/temperature = air.temperature - //This reaction is agressively slow. like, a tenth of a mole per fire slow. Keep that in mind + //This reaction is aggressively slow. like, a tenth of a mole per fire slow. Keep that in mind var/heat_efficiency = min(temperature / NITRIUM_DECOMPOSITION_TEMP_DIVISOR, cached_gases[/datum/gas/nitrium][MOLES]) if (heat_efficiency <= 0 || (cached_gases[/datum/gas/nitrium][MOLES] - heat_efficiency < 0)) //Shouldn't produce gas from nothing. @@ -793,7 +793,6 @@ cached_gases[/datum/gas/tritium][MOLES] -= 5 * nob_formed * reduction_factor cached_gases[/datum/gas/nitrogen][MOLES] -= 10 * nob_formed cached_gases[/datum/gas/hypernoblium][MOLES] += nob_formed // I'm not going to nitpick, but N20H10 feels like it should be an explosive more than anything. - SET_REACTION_RESULTS(nob_formed) var/energy_released = nob_formed * (NOBLIUM_FORMATION_ENERGY / (max(cached_gases[/datum/gas/bz][MOLES], 1))) var/new_heat_capacity = air.heat_capacity() @@ -1092,7 +1091,7 @@ SET_REACTION_RESULTS(produced_amount) var/turf/open/location var/energy_released = produced_amount * PN_TRITIUM_CONVERSION_ENERGY - if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet. + if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occurring on, or a random part of the network if it's a pipenet. var/datum/pipeline/pipenet = holder location = pick(pipenet.members) else if(isatom(holder)) @@ -1144,7 +1143,7 @@ SET_REACTION_RESULTS(consumed_amount) var/turf/open/location var/energy_released = consumed_amount * PN_BZASE_ENERGY - if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet. + if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occurring on, or a random part of the network if it's a pipenet. var/datum/pipeline/pipenet = holder location = pick(pipenet.members) else if(isatom(holder)) diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 6f1e0c6fcd9cb..5f073d17fc1e2 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -123,9 +123,9 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) )) GLOB.air_alarms += src - update_appearance() find_and_hang_on_wall() register_context() + check_enviroment() /obj/machinery/airalarm/process() if(!COOLDOWN_FINISHED(src, warning_cooldown)) @@ -342,15 +342,15 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) return data -/obj/machinery/airalarm/ui_act(action, params) +/obj/machinery/airalarm/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(. || buildstage != AIR_ALARM_BUILD_COMPLETE) return - if((locked && !HAS_SILICON_ACCESS(usr)) || (HAS_SILICON_ACCESS(usr) && aidisabled)) + var/mob/user = ui.user + if((locked && !HAS_SILICON_ACCESS(user)) || (HAS_SILICON_ACCESS(user) && aidisabled)) return - var/mob/user = usr var/area/area = connected_sensor ? get_area(connected_sensor) : get_area(src) ASSERT(!isnull(area)) @@ -465,7 +465,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) var/threshold_type = params["threshold_type"] var/value = params["value"] tlv.set_value(threshold_type, value) - investigate_log("threshold value for [threshold]:[threshold_type] was set to [value] by [key_name(usr)]", INVESTIGATE_ATMOS) + investigate_log("threshold value for [threshold]:[threshold_type] was set to [value] by [key_name(user)]", INVESTIGATE_ATMOS) check_enviroment() @@ -476,7 +476,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) return var/threshold_type = params["threshold_type"] tlv.reset_value(threshold_type) - investigate_log("threshold value for [threshold]:[threshold_type] was reset by [key_name(usr)]", INVESTIGATE_ATMOS) + investigate_log("threshold value for [threshold]:[threshold_type] was reset by [key_name(user)]", INVESTIGATE_ATMOS) check_enviroment() @@ -493,7 +493,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) disconnect_sensor() if ("lock") - togglelock(usr) + togglelock(user) return TRUE update_appearance() @@ -568,34 +568,34 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) danger_level = max(danger_level, tlv_collection["pressure"].check_value(pressure)) danger_level = max(danger_level, tlv_collection["temperature"].check_value(temp)) if(total_moles) - for(var/gas_path in environment.gases) - var/moles = environment.gases[gas_path][MOLES] + for(var/gas_path in GLOB.meta_gas_info) + var/moles = environment.gases[gas_path] ? environment.gases[gas_path][MOLES] : 0 danger_level = max(danger_level, tlv_collection[gas_path].check_value(pressure * moles / total_moles)) if(danger_level) alarm_manager.send_alarm(ALARM_ATMOS) - if(pressure <= WARNING_LOW_PRESSURE && temp <= BODYTEMP_COLD_WARNING_1+10) + if(pressure <= tlv_collection["pressure"].hazard_min && temp <= tlv_collection["temperature"].hazard_min) warning_message = "Danger! Low pressure and temperature detected." return - if(pressure <= WARNING_LOW_PRESSURE && temp >= BODYTEMP_HEAT_WARNING_1-27) + if(pressure <= tlv_collection["pressure"].hazard_min && temp >= tlv_collection["temperature"].hazard_max) warning_message = "Danger! Low pressure and high temperature detected." return - if(pressure >= WARNING_HIGH_PRESSURE && temp >= BODYTEMP_HEAT_WARNING_1-27) + if(pressure >= tlv_collection["pressure"].hazard_max && temp >= tlv_collection["temperature"].hazard_max) warning_message = "Danger! High pressure and temperature detected." return - if(pressure >= WARNING_HIGH_PRESSURE && temp <= BODYTEMP_COLD_WARNING_1+10) + if(pressure >= tlv_collection["pressure"].hazard_max && temp <= tlv_collection["temperature"].hazard_min) warning_message = "Danger! High pressure and low temperature detected." return - if(pressure <= WARNING_LOW_PRESSURE) + if(pressure <= tlv_collection["pressure"].hazard_min) warning_message = "Danger! Low pressure detected." return - if(pressure >= WARNING_HIGH_PRESSURE) + if(pressure >= tlv_collection["pressure"].hazard_max) warning_message = "Danger! High pressure detected." return - if(temp <= BODYTEMP_COLD_WARNING_1+10) + if(temp <= tlv_collection["temperature"].hazard_min) warning_message = "Danger! Low temperature detected." return - if(temp >= BODYTEMP_HEAT_WARNING_1-27) + if(temp >= tlv_collection["temperature"].hazard_max) warning_message = "Danger! High temperature detected." return else @@ -677,6 +677,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) tlv_collection["temperature"] = new /datum/tlv/no_checks tlv_collection["pressure"] = new /datum/tlv/no_checks + for(var/gas_path in GLOB.meta_gas_info) + tlv_collection[gas_path] = new /datum/tlv/no_checks + ///Used for air alarm link helper, which connects air alarm to a sensor with corresponding chamber_id /obj/machinery/airalarm/proc/setup_chamber_link() var/obj/machinery/air_sensor/sensor = GLOB.objects_by_id_tag[GLOB.map_loaded_sensors[air_sensor_chamber_id]] diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 12e6c684079e6..186ef8ea9aace 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -34,7 +34,7 @@ ///The flags of the pipe/component (PIPING_ALL_LAYER | PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY | PIPING_CARDINAL_AUTONORMALIZE) var/pipe_flags = NONE - ///This only works on pipes, because they have 1000 subtypes wich need to be visible and invisible under tiles, so we track this here + ///This only works on pipes, because they have 1000 subtypes which need to be visible and invisible under tiles, so we track this here var/hide = TRUE ///The image of the pipe/device used for ventcrawling @@ -331,7 +331,7 @@ if(isnull(given_layer)) given_layer = piping_layer - // you cant place the machine on the same location as the target cause it blocks + // you can't place the machine on the same location as the target cause it blocks if(target.loc == loc) return FALSE @@ -478,7 +478,7 @@ * Called by wrench_act() before deconstruct() * Arguments: * * mob_user - the mob doing the act - * * pressures - it can be passed on from wrench_act(), it's the pressure difference between the enviroment pressure and the pipe internal pressure + * * pressures - it can be passed on from wrench_act(), it's the pressure difference between the environment pressure and the pipe internal pressure */ /obj/machinery/atmospherics/proc/unsafe_pressure_release(mob/user, pressures = null) if(!user) @@ -569,7 +569,7 @@ // Handles mob movement inside a pipenet /obj/machinery/atmospherics/relaymove(mob/living/user, direction) - if(!direction) //cant go this way. + if(!direction) //can't go this way. return if(user in buckled_mobs)// fixes buckle ventcrawl edgecase fuck bug return @@ -614,8 +614,8 @@ our_client.set_eye(target_move) // Let's smooth out that movement with an animate yeah? // If the new x is greater (move is left to right) we get a negative offset. vis versa - our_client.pixel_x = (x - target_move.x) * world.icon_size - our_client.pixel_y = (y - target_move.y) * world.icon_size + our_client.pixel_x = (x - target_move.x) * ICON_SIZE_X + our_client.pixel_y = (y - target_move.y) * ICON_SIZE_Y animate(our_client, pixel_x = 0, pixel_y = 0, time = 0.05 SECONDS) our_client.move_delay = world.time + 0.05 SECONDS diff --git a/code/modules/atmospherics/machinery/bluespace_vendor.dm b/code/modules/atmospherics/machinery/bluespace_vendor.dm index 91da04afaf2e7..5eca214cee0da 100644 --- a/code/modules/atmospherics/machinery/bluespace_vendor.dm +++ b/code/modules/atmospherics/machinery/bluespace_vendor.dm @@ -244,7 +244,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/bluespace_vendor, 30) data["tank_full"] = total_tank_pressure return data -/obj/machinery/bluespace_vendor/ui_act(action, params) +/obj/machinery/bluespace_vendor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index bac6400951bae..2fb89f6356da2 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -178,5 +178,6 @@ Skyrat removal START, moved to modular file pixel_x = 0 pixel_y = 0 + Skyrat removal END */ 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 1d7657dd35276..567cfcc6a843b 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -84,7 +84,7 @@ Passive gate is similar to the regular pump except: data["max_pressure"] = round(MAX_OUTPUT_PRESSURE) return data -/obj/machinery/atmospherics/components/binary/passive_gate/ui_act(action, params) +/obj/machinery/atmospherics/components/binary/passive_gate/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm index ff9cc36d7cd61..b1e03743b5d89 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm @@ -84,7 +84,7 @@ data["max_pressure"] = round(ONE_ATMOSPHERE*100) return data -/obj/machinery/atmospherics/components/binary/pressure_valve/ui_act(action, params) +/obj/machinery/atmospherics/components/binary/pressure_valve/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 1e68bf9ad691a..848a41735c777 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -81,7 +81,7 @@ data["max_pressure"] = round(MAX_OUTPUT_PRESSURE) return data -/obj/machinery/atmospherics/components/binary/pump/ui_act(action, params) +/obj/machinery/atmospherics/components/binary/pump/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm index 879f6b7fab8d3..0b6195f7b8425 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm @@ -107,7 +107,7 @@ data["max_temperature"] = round(max_temperature) return data -/obj/machinery/atmospherics/components/binary/temperature_gate/ui_act(action, params) +/obj/machinery/atmospherics/components/binary/temperature_gate/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm index 3976e8db750c1..88ec2265c69f6 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm @@ -88,7 +88,7 @@ data["max_heat_transfer_rate"] = round(max_heat_transfer_rate) return data -/obj/machinery/atmospherics/components/binary/temperature_pump/ui_act(action, params) +/obj/machinery/atmospherics/components/binary/temperature_pump/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index ae8965ae0561e..477ea40137632 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -122,7 +122,7 @@ data["max_rate"] = round(MAX_TRANSFER_RATE) return data -/obj/machinery/atmospherics/components/binary/volume_pump/ui_act(action, params) +/obj/machinery/atmospherics/components/binary/volume_pump/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm index c6e1d6183ef79..27cb78bb26ce7 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_main_processes.dm @@ -493,7 +493,7 @@ zaps_aspect = OVER_9000_ZAP_ICON_STATE flags |= (ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE) - playsound(loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) + playsound(loc, 'sound/items/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) for(var/i in 1 to zap_number) supermatter_zap(src, 5, power_level * 2.4e5, flags, zap_cutoff = cutoff, power_level = src.power_level * 1000, zap_icon = zaps_aspect) diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm index 86f2e3dddf5bf..96272858a96b7 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm @@ -79,7 +79,7 @@ /obj/machinery/atmospherics/components/unary/hypertorus/fuel_input name = "HFR fuel input port" - desc = "Input port for the Hypertorus Fusion Reactor, designed to take in only Hydrogen and Tritium in gas forms." + desc = "Input port for the Hypertorus Fusion Reactor, designed to take in fuels with the optimal fuel mix being a 50/50 split." icon_state = "fuel_input_off" icon_state_open = "fuel_input_open" icon_state_off = "fuel_input_off" @@ -313,7 +313,7 @@ return data -/obj/machinery/hypertorus/interface/ui_act(action, params) +/obj/machinery/hypertorus/interface/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm index 9f2f6a96f4bf8..bc27ab0a42e36 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm @@ -301,13 +301,13 @@ /obj/machinery/atmospherics/components/unary/hypertorus/core/proc/alarm() switch(get_status()) if(HYPERTORUS_MELTING) - playsound(src, 'sound/misc/bloblarm.ogg', 100, FALSE, 40, 30, falloff_distance = 10) + playsound(src, 'sound/announcer/alarm/bloblarm.ogg', 100, FALSE, 40, 30, falloff_distance = 10) if(HYPERTORUS_EMERGENCY) - playsound(src, 'sound/machines/engine_alert1.ogg', 100, FALSE, 30, 30, falloff_distance = 10) + playsound(src, 'sound/machines/engine_alert/engine_alert1.ogg', 100, FALSE, 30, 30, falloff_distance = 10) if(HYPERTORUS_DANGER) - playsound(src, 'sound/machines/engine_alert2.ogg', 100, FALSE, 30, 30, falloff_distance = 10) + playsound(src, 'sound/machines/engine_alert/engine_alert2.ogg', 100, FALSE, 30, 30, falloff_distance = 10) if(HYPERTORUS_WARNING) - playsound(src, 'sound/machines/terminal_alert.ogg', 75) + playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 75) /** * Getter for the machine integrity @@ -413,7 +413,7 @@ var/critical = selected_fuel.meltdown_flags & HYPERTORUS_FLAG_CRITICAL_MELTDOWN if(critical) priority_announce("WARNING - The explosion will likely cover a big part of the station and the coming EMP will wipe out most of the electronics. \ - Get as far away as possible from the reactor or find a way to shut it down.", "Alert", 'sound/misc/notice3.ogg') + Get as far away as possible from the reactor or find a way to shut it down.", "Alert", 'sound/announcer/notice/notice3.ogg') var/speaking = "[emergency_alert] The Hypertorus fusion reactor has reached critical integrity failure. Emergency magnetic dampeners online." radio.talk_into(src, speaking, common_channel, language = get_selected_language()) @@ -430,7 +430,7 @@ radio.talk_into(src, "[safe_alert] Failsafe has been disengaged.", common_channel) final_countdown = FALSE return - else if((i % 50) != 0 && i > 50) // A message once every 5 seconds until the final 5 seconds which count down individualy + else if((i % 50) != 0 && i > 50) // A message once every 5 seconds until the final 5 seconds which count down individually sleep(1 SECONDS) continue else if(i > 50) 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 7d854974067a8..13c872199dc0c 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) 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 f0482c210a66a..b5cc7c628df29 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm @@ -106,7 +106,7 @@ return TRUE return FALSE -///Injects the gases from the input inside the internal gasmix, the amount is dependant on the gas_input var +///Injects the gases from the input inside the internal gasmix, the amount is dependent on the gas_input var /obj/machinery/atmospherics/components/binary/crystallizer/proc/inject_gases() var/datum/gas_mixture/contents = airs[2] for(var/gas_type in selected_recipe.requirements) @@ -300,7 +300,7 @@ data["gas_input"] = gas_input return data -/obj/machinery/atmospherics/components/binary/crystallizer/ui_act(action, params) +/obj/machinery/atmospherics/components/binary/crystallizer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm index 26cb395113519..6308e1eee611e 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm @@ -1,6 +1,6 @@ /obj/item/hypernoblium_crystal name = "Hypernoblium Crystal" - desc = "Crystalized oxygen and hypernoblium stored in a bottle to pressureproof your clothes or stop reactions occuring in portable atmospheric devices." + desc = "Crystallized oxygen and hypernoblium stored in a bottle to pressureproof your clothes or stop reactions occurring in portable atmospheric devices." icon = 'icons/obj/pipes_n_cables/atmos.dmi' icon_state = "hypernoblium_crystal" var/uses = 1 diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index ee1e61428d196..f76f3dc470f57 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -304,7 +304,7 @@ . = TRUE if(atom_integrity >= max_integrity) return - if(!tool.tool_start_check(user, amount = 0)) + if(!tool.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) return to_chat(user, span_notice("You begin to repair the cracks in the gas tank...")) var/repair_amount = max_integrity / 10 @@ -562,7 +562,7 @@ if(!anchored) to_chat(user, span_notice("You need to wrench [src] to the floor before finishing.")) return - if(!tool.tool_start_check(user, amount = 0)) + if(!tool.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) return to_chat(user, span_notice("You begin sealing the outer plating with the welder...")) if(!tool.use_tool(src, user, 2 SECONDS, volume = 60)) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index da6c75d699d08..593832ec7986b 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -141,7 +141,7 @@ return data -/obj/machinery/atmospherics/components/trinary/filter/ui_act(action, params) +/obj/machinery/atmospherics/components/trinary/filter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 8f90986baaa46..8f7aa4a2d5716 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -150,7 +150,7 @@ data["node2_concentration"] = round(node2_concentration*100, 1) return data -/obj/machinery/atmospherics/components/trinary/mixer/ui_act(action, params) +/obj/machinery/atmospherics/components/trinary/mixer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return 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 ebe053663f9e0..04306fbbdb3bc 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm @@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component data["credits"] = credits_gained return data -/obj/machinery/atmospherics/components/unary/bluespace_sender/ui_act(action, params) +/obj/machinery/atmospherics/components/unary/bluespace_sender/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 59ce701924c91..874a04f4a2c8b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -661,7 +661,7 @@ if(isliving(target)) var/mob/living/living_mob = target - if(living_mob.incapacitated()) + if(living_mob.incapacitated) close_machine(target) return 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 3f87ca671fdc9..c0b584d9029cc 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -122,7 +122,7 @@ data["max_rate"] = round(MAX_TRANSFER_RATE) return data -/obj/machinery/atmospherics/components/unary/outlet_injector/ui_act(action, params) +/obj/machinery/atmospherics/components/unary/outlet_injector/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 619bf100a170f..cb49e572fd1f8 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -283,7 +283,7 @@ data["pressure"] = port.return_pressure() return data -/obj/machinery/atmospherics/components/unary/thermomachine/ui_act(action, params) +/obj/machinery/atmospherics/components/unary/thermomachine/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return 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 06af6052bf018..9f531b64cf70f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -230,7 +230,7 @@ fan_overclocked = !fan_overclocked if(from_break) - playsound(src, 'sound/machines/fan_break.ogg', 100) + playsound(src, 'sound/machines/fan/fan_break.ogg', 100) fan_overclocked = FALSE if(fan_overclocked) @@ -360,7 +360,7 @@ update_appearance() pipe_vision_img = image(src, loc, dir = dir) SET_PLANE_EXPLICIT(pipe_vision_img, ABOVE_HUD_PLANE, src) - playsound(loc, 'sound/weapons/bladeslice.ogg', 100, TRUE) + playsound(loc, 'sound/items/weapons/bladeslice.ogg', 100, TRUE) /obj/machinery/atmospherics/components/unary/vent_pump/high_volume name = "large air vent" 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 4da9039605266..6b591d4010c0e 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -328,7 +328,7 @@ update_appearance() pipe_vision_img = image(src, loc, dir = dir) SET_PLANE_EXPLICIT(pipe_vision_img, ABOVE_HUD_PLANE, src) - playsound(loc, 'sound/weapons/bladeslice.ogg', 100, TRUE) + playsound(loc, 'sound/items/weapons/bladeslice.ogg', 100, TRUE) /obj/machinery/atmospherics/components/unary/vent_scrubber/layer2 diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 2200d10fda506..ad8df3cbc8248 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -49,7 +49,7 @@ reconcile_air() //Only react if the mix has changed, and don't keep updating if it hasn't update = air.react(src) - //CalculateGasmixColor(air) // SKYRAT EDIT REMOVAL - Pipe gas visuals removed + //CalculateGasmixColor(air) // SKYRAT EDIT REMOVAL - Pipe gas visuals removed // SKYRAT TODO - Look into this /datum/pipeline/proc/set_air(datum/gas_mixture/new_air) if(new_air == air) @@ -96,7 +96,7 @@ while(possible_expansions.len) for(var/obj/machinery/atmospherics/borderline in possible_expansions) var/list/result = borderline.pipeline_expansion(src) - if(!(result && result.len)) + if(!result?.len) possible_expansions -= borderline continue for(var/obj/machinery/atmospherics/considered_device in result) diff --git a/code/modules/atmospherics/machinery/pipes/smart.dm b/code/modules/atmospherics/machinery/pipes/smart.dm index ee2efd699cdb0..ce4dc0e36a51e 100644 --- a/code/modules/atmospherics/machinery/pipes/smart.dm +++ b/code/modules/atmospherics/machinery/pipes/smart.dm @@ -14,22 +14,6 @@ GLOBAL_LIST_INIT(atmos_components, typecacheof(list(/obj/machinery/atmospherics) ///Current active connections var/connections = NONE - ///Was this pipe created during map load - var/map_loaded_pipe = FALSE - -/obj/machinery/atmospherics/pipe/smart/Initialize(mapload) - map_loaded_pipe = mapload - return ..() - -///helper function to append all directions into an single bit flag -/obj/machinery/atmospherics/pipe/smart/proc/append_directions(list/spanning_directions) - var/bit_flag = NONE - for(var/i in 1 to length(spanning_directions)) - var/spanning_direction = spanning_directions[i] - if(!spanning_direction) - continue - bit_flag |= spanning_direction - return bit_flag /obj/machinery/atmospherics/pipe/smart/update_pipe_icon() icon = 'icons/obj/pipes_n_cables/!pipes_bitmask.dmi' diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index af13be0bbbf9b..467ad0e381d1e 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -76,7 +76,7 @@ . = ..() if(!allowed(user)) to_chat(user, span_alert("Error - Unauthorized User.")) - playsound(src, 'sound/misc/compiler-failure.ogg', 50, TRUE) + playsound(src, 'sound/machines/compiler/compiler-failure.ogg', 50, TRUE) return /obj/machinery/portable_atmospherics/canister/add_context(atom/source, list/context, obj/item/held_item, mob/user) @@ -397,7 +397,7 @@ 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)) + if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return ITEM_INTERACT_BLOCKING var/pressure = air_contents.return_pressure() @@ -566,7 +566,7 @@ "cellCharge" = internal_cell ? internal_cell.percent() : 0 ) -/obj/machinery/portable_atmospherics/canister/ui_act(action, params) +/obj/machinery/portable_atmospherics/canister/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm b/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm index cde38f216ad70..434f243d6a3ca 100644 --- a/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/pipe_scrubber.dm @@ -129,7 +129,7 @@ data["pressureLimitTank"] = internal_tank.pressure_limit return data -/obj/machinery/portable_atmospherics/pipe_scrubber/ui_act(action, params) +/obj/machinery/portable_atmospherics/pipe_scrubber/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 210eb9b0d9e28..cb1a23f82f15a 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -32,8 +32,8 @@ var/suppress_reactions = FALSE /// Is there a hypernoblium crystal inserted into this var/nob_crystal_inserted = FALSE - var/insert_sound = 'sound/effects/tank_insert_clunky.ogg' - var/remove_sound = 'sound/effects/tank_remove_thunk.ogg' + var/insert_sound = 'sound/effects/compressed_air/tank_insert_clunky.ogg' + var/remove_sound = 'sound/effects/compressed_air/tank_remove_thunk.ogg' var/sound_vol = 50 /datum/armor/machinery_portable_atmospherics @@ -95,7 +95,7 @@ /obj/machinery/portable_atmospherics/welder_act(mob/living/user, obj/item/tool) if(user.combat_mode) return ITEM_INTERACT_SKIP_TO_ATTACK - if(atom_integrity >= max_integrity || (machine_stat & BROKEN) || !tool.tool_start_check(user, amount = 1)) + if(atom_integrity >= max_integrity || (machine_stat & BROKEN) || !tool.tool_start_check(user, amount = 1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return ITEM_INTERACT_BLOCKING balloon_alert(user, "repairing...") while(tool.use_tool(src, user, 2.5 SECONDS, volume=40)) @@ -223,16 +223,17 @@ if(!user.transferItemToLoc(new_tank, src)) return FALSE - investigate_log("had its internal [holding] swapped with [new_tank] by [key_name(user)].", INVESTIGATE_ATMOS) - to_chat(user, span_notice("[holding ? "In one smooth motion you pop [holding] out of [src]'s connector and replace it with [new_tank]" : "You insert [new_tank] into [src]"].")) - if(holding && new_tank)//for when we are actually switching tanks + investigate_log("had its internal [holding] swapped with [new_tank] by [key_name(user)].", INVESTIGATE_ATMOS) + to_chat(user, span_notice("In one smooth motion you pop [holding] out of [src]'s connector and replace it with [new_tank].")) user.put_in_hands(holding) UnregisterSignal(holding, COMSIG_QDELETING) holding = new_tank RegisterSignal(holding, COMSIG_QDELETING, PROC_REF(unregister_holding)) playsound(src, list(insert_sound,remove_sound), sound_vol) else if(holding)//we remove a tank + investigate_log("had its internal [holding] removed by [key_name(user)].", INVESTIGATE_ATMOS) + to_chat(user, span_notice("You remove [holding] from [src].")) if(Adjacent(user)) user.put_in_hands(holding) else @@ -241,6 +242,8 @@ UnregisterSignal(holding, COMSIG_QDELETING) holding = null else if(new_tank)//we insert the tank + investigate_log("had [new_tank] inserted into it by [key_name(user)].", INVESTIGATE_ATMOS) + to_chat(user, span_notice("You insert [new_tank] into [src].")) holding = new_tank playsound(src, insert_sound, sound_vol) RegisterSignal(holding, COMSIG_QDELETING, PROC_REF(unregister_holding)) diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 7b0dbef314ec0..3efc87e00ac3a 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -109,7 +109,7 @@ data["holding"] = null return data -/obj/machinery/portable_atmospherics/pump/ui_act(action, params) +/obj/machinery/portable_atmospherics/pump/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 84fd04388c28c..aeb64583c9bc9 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -166,7 +166,7 @@ else if(on && holding) user.investigate_log("started a transfer into [holding].", INVESTIGATE_ATMOS) -/obj/machinery/portable_atmospherics/scrubber/ui_act(action, params) +/obj/machinery/portable_atmospherics/scrubber/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/autowiki/pages/base.dm b/code/modules/autowiki/pages/base.dm index 8e745ace61c2d..ce32bfd4032b7 100644 --- a/code/modules/autowiki/pages/base.dm +++ b/code/modules/autowiki/pages/base.dm @@ -46,7 +46,12 @@ if (IsAdminAdvancedProcCall()) return + var/static/uploaded_icons = list() + if(uploaded_icons["[name]"]) + CRASH("We tried uploading an icon, but the name \"[name]\" was already taken!") + fcopy(icon, "data/autowiki_files/[name].png") + uploaded_icons["[name]"] = TRUE /// Escape a parameter such that it can be correctly put inside a wiki output /datum/autowiki/proc/escape_value(parameter) diff --git a/code/modules/autowiki/pages/fishing.dm b/code/modules/autowiki/pages/fishing.dm new file mode 100644 index 0000000000000..eab26bd6c6c03 --- /dev/null +++ b/code/modules/autowiki/pages/fishing.dm @@ -0,0 +1,451 @@ +/datum/autowiki/fish + page = "Template:Autowiki/Content/Fish" + +/datum/autowiki/fish/generate() + var/output = "" + + var/datum/reagent/def_food = /obj/item/fish::food + var/def_food_name = initial(def_food.name) + var/def_feeding = /obj/item/fish::feeding_frequency + var/def_feeding_text = DisplayTimeText(def_feeding) + var/def_breeding = /obj/item/fish::breeding_timeout + var/def_breeding_text = DisplayTimeText(def_breeding) + + var/list/generated_icons = list() + var/list/fish_types = subtypesof(/obj/item/fish) + sortTim(fish_types, GLOBAL_PROC_REF(cmp_fish_fluid)) + + for (var/obj/item/fish/fish as anything in fish_types) + + var/filename = FISH_AUTOWIKI_FILENAME(fish) + + if(!generated_icons[filename]) + upload_icon(icon(fish:icon, fish::icon_state, frame = 1), filename) + generated_icons[filename] = TRUE + + if(!(fish::fish_flags & FISH_FLAG_SHOW_IN_CATALOG)) + continue + + var/list/properties = SSfishing.fish_properties[fish] + + var/description = escape_value(fish::desc) + var/list/extra_info = list() + if(fish::fillet_type != /obj/item/food/fishmeat) + var/obj/item/fillet = fish::fillet_type + if(!fillet) + extra_info += "Cannot be butchered." + else + extra_info += "When butchered, it'll yield [initial(fillet.name)]." + var/datum/reagent/food = fish::food + if(food != def_food) + extra_info += "It has to be fed [initial(food.name)] instead of [def_food_name]" + if(fish::feeding_frequency != def_feeding) + extra_info += "It has to be fed every [DisplayTimeText(fish::feeding_frequency)] instead of [def_feeding_text]" + if(fish::breeding_timeout != def_breeding) + extra_info += "It takes [DisplayTimeText(fish::breeding_timeout)] to reproduce instead of [def_breeding_text]" + if(length(extra_info)) + description += "
      [extra_info.Join(extra_info,"
      ")]" + + var/list/output_list = list( + "name" = full_capitalize(escape_value(fish::name)), + "icon" = filename, + "description" = description, + "size_weight" = "[fish::average_size]cm / [fish::average_weight]g", + "fluid" = escape_value(fish::required_fluid_type), + "temperature" = "Doesn't matter", + "stable_population" = fish::stable_population, + "traits" = generate_traits(properties[FISH_PROPERTIES_TRAITS]), + "favorite_baits" = generate_baits(properties[FISH_PROPERTIES_FAV_BAIT]), + "disliked_baits" = generate_baits(properties[FISH_PROPERTIES_BAD_BAIT], TRUE), + "beauty_score" = properties[FISH_PROPERTIES_BEAUTY_SCORE], + ) + var/not_infinity = fish::required_temperature_max < INFINITY + if(fish::required_temperature_min > 0 || not_infinity) + var/max_temp = not_infinity ? fish::required_temperature_max : "∞" + output_list["temperature"] = "[fish::required_temperature_min] - [max_temp] K" + + output += "\n\n" + include_template("Autowiki/FishEntry", output_list) + + return output + +/datum/autowiki/fish/proc/generate_baits(list/baits, bad = FALSE) + var/list/list = list() + if(!length(baits)) + return list("None") + + for (var/identifier in baits) + if(ispath(identifier)) //Just a path + var/obj/item/item = identifier + list += initial(item.name) + continue + var/list/special_identifier = identifier + switch(special_identifier["Type"]) + if("Foodtype") + list += english_list(bitfield_to_list(special_identifier["Value"], FOOD_FLAGS_IC)) + if("Reagent") + var/datum/reagent/reagent = special_identifier["Value"] + list += "[reagent::name][bad ? "" : "(At least [special_identifier["Amount"]] units)"]" + + return list + +/datum/autowiki/fish/proc/generate_traits(list/traits) + var/output = "" + + for(var/trait_type in traits) + var/datum/fish_trait/trait = GLOB.fish_traits[trait_type] + output += include_template("Autowiki/FishTypeTraits", list( + "name" = escape_value(trait.name), + "description" = escape_value(trait.catalog_description), + )) + + return output + +/datum/autowiki/fish_trait + page = "Template:Autowiki/Content/Fish/Trait" + +/datum/autowiki/fish_trait/generate() + var/output = "" + + for(var/trait_type in GLOB.fish_traits) + var/datum/fish_trait/trait = GLOB.fish_traits[trait_type] + var/desc = escape_value(trait.catalog_description) + if(length(trait.incompatible_traits)) + var/incompatible = list() + for(var/datum/fish_trait/bad as anything in trait.incompatible_traits) + incompatible += span_bold(initial(bad.name)) + desc += "
      Incompatible with [english_list(incompatible)]." + output += include_template("Autowiki/FishAllTraits", list( + "name" = escape_value(trait.name), + "description" = escape_value(trait.catalog_description), + "inheritability" = trait.inheritability, + "inheritability_diff" = trait.diff_traits_inheritability, + + )) + + return output + +/datum/autowiki/fish_bait + page = "Template:Autowiki/Content/Fish/Bait" + +/datum/autowiki/fish_bait/generate() + var/output = "" + + var/list/generated_icons = list() + for (var/obj/item/food/bait/bait as anything in subtypesof(/obj/item/food/bait)) + if(!bait::show_on_wiki) + continue + + var/filename = SANITIZE_FILENAME("[bait::icon_state]_wiki_bait") + + var/quality = "Bland" + + var/list/foodtypes + if(ispath(bait, /obj/item/food/bait/doughball/synthetic)) + foodtypes = list("Don't worry about it") + else + foodtypes = bitfield_to_list(bait::foodtypes, FOOD_FLAGS_IC) || list("None") + + switch(bait::bait_quality) + if(TRAIT_BASIC_QUALITY_BAIT) + quality = "Basic" + if(TRAIT_GOOD_QUALITY_BAIT) + quality = "Good" + if(TRAIT_GREAT_QUALITY_BAIT) + quality = "Great" + + output += "\n\n" + include_template("Autowiki/FishBait", list( + "name" = full_capitalize(escape_value(bait::name)), + "icon" = filename, + "description" = escape_value(bait::desc), + "foodtypes" = foodtypes, + "quality" = quality, + )) + + if(!generated_icons[filename]) + upload_icon(icon(bait:icon, bait::icon_state, frame = 1), filename) + generated_icons[filename] = TRUE + + var/filename = SANITIZE_FILENAME(/obj/item/stock_parts/power_store/cell/lead::icon_state) + + var/lead_desc = /obj/item/stock_parts/power_store/cell/lead::desc + lead_desc += " You probably shouldn't use it unless you're trying to catch a zipzap." + output += "\n\n" + include_template("Autowiki/FishBait", list( + "name" = full_capitalize(escape_value(/obj/item/stock_parts/power_store/cell/lead::name)), + "icon" = filename, + "description" = lead_desc, + "foodtypes" = "None", + "quality" = "Poisonous", + )) + + upload_icon(icon(/obj/item/stock_parts/power_store/cell/lead::icon, /obj/item/stock_parts/power_store/cell/lead::icon_state), filename) + + var/obj/needletype = /obj/item/fish/needlefish + output += "\n\n" + include_template("Autowiki/FishBait", list( + "name" = "Baitfish", + "icon" = FISH_AUTOWIKI_FILENAME(needletype), + "description" = "Smaller fish such as goldfish, needlefish, armorfish and lavaloops can also be used as bait, It's a fish eat fish world.", + "foodtypes" = "Seafood?", + "quality" = "Good", + )) + + output += "\n\n" + include_template("Autowiki/FishBait", list( + "name" = "Food", + "icon" = "plain_bread", + "description" = "In absence of baits, food can be used as a substitute.", + "foodtypes" = "Depends", + "quality" = "Bland most of the times", + )) + + upload_icon(icon(/obj/item/food/bread/plain::icon, /obj/item/food/bread/plain::icon_state), "plain_bread") + + return output + +/datum/autowiki/fishing_line + page = "Template:Autowiki/Content/Fish/Line" + +/datum/autowiki/fishing_line/generate() + var/output = "" + + var/list/generated_icons = list() + for (var/obj/item/fishing_line/line as anything in typesof(/obj/item/fishing_line)) + var/filename = SANITIZE_FILENAME("[line::icon_state]_wiki_line") + + output += "\n\n" + include_template("Autowiki/FishLine", list( + "name" = full_capitalize(escape_value(line::name)), + "icon" = filename, + "description" = escape_value(line::wiki_desc), + )) + + if(!generated_icons[filename]) + upload_icon(icon(line:icon, line::icon_state), filename) + generated_icons[filename] = TRUE + + return output + +/datum/autowiki/fishing_hook + page = "Template:Autowiki/Content/Fish/Hook" + +/datum/autowiki/fishing_hook/generate() + var/output = "" + + var/list/generated_icons = list() + for (var/obj/item/fishing_hook/hook as anything in typesof(/obj/item/fishing_hook)) + var/filename = SANITIZE_FILENAME("[hook::icon_state]_wiki_hook") + + output += "\n\n" + include_template("Autowiki/FishHook", list( + "name" = full_capitalize(escape_value(hook::name)), + "icon" = filename, + "description" = escape_value(hook::wiki_desc), + )) + + if(!generated_icons[filename]) + upload_icon(icon(hook:icon, hook::icon_state), filename) + generated_icons[filename] = TRUE + + return output + +/datum/autowiki/fishing_rod + page = "Template:Autowiki/Content/Fish/Rod" + +/datum/autowiki/fishing_rod/generate() + var/output = "" + + var/list/generated_icons = list() + for (var/obj/item/fishing_rod/rod as anything in typesof(/obj/item/fishing_rod)) + if(!rod::show_in_wiki) + continue + + var/filename = SANITIZE_FILENAME("[rod::icon_state]_wiki_rod") + + var/desc = escape_value(rod::ui_description) + if(rod::wiki_description) + desc += "
      [escape_value(rod::wiki_description)]" + output += "\n\n" + include_template("Autowiki/FishingRod", list( + "name" = full_capitalize(escape_value(rod::name)), + "icon" = filename, + "description" = desc, + )) + + if(!generated_icons[filename]) + var/icon/rod_icon = icon(rod:icon, rod::icon_state) + if(rod::reel_overlay) + var/icon/line = icon(rod::icon, rod::reel_overlay) + line.Blend(rod::default_line_color, ICON_MULTIPLY) + rod_icon.Blend(line, ICON_OVERLAY) + upload_icon(rod_icon, filename) + generated_icons[filename] = TRUE + + return output + +/datum/autowiki/fish_sources + page = "Template:Autowiki/Content/Fish/Source" + +/datum/autowiki/fish_sources/generate() + var/output = "" + + for(var/source_type in GLOB.preset_fish_sources) + var/datum/fish_source/source = GLOB.preset_fish_sources[source_type] + if(!source.catalog_description) + continue + + output += "\n\n" + include_template("Autowiki/FishSource", list( + "name" = full_capitalize(source.catalog_description), + "difficulty" = source.fishing_difficulty, + "contents" = get_contents(source), + )) + + ///Used for stuff that isn't fish by default + upload_icon(icon('icons/effects/random_spawners.dmi', "questionmark"), FISH_SOURCE_AUTOWIKI_QUESTIONMARK) + + return output + +/datum/autowiki/fish_sources/proc/get_contents(datum/fish_source/source) + var/output = "" + var/list/data = source.generate_wiki_contents(src) + sortTim(data, GLOBAL_PROC_REF(cmp_autowiki_fish_sources_content)) + for(var/list/entry in data) + entry[FISH_SOURCE_AUTOWIKI_WEIGHT] = "[round(entry[FISH_SOURCE_AUTOWIKI_WEIGHT], 0.1)]%" + var/weight_suffix = entry[FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX] + if(weight_suffix) + entry[FISH_SOURCE_AUTOWIKI_WEIGHT] += " [weight_suffix]" + entry -= FISH_SOURCE_AUTOWIKI_WEIGHT + output += include_template("Autowiki/FishSourceContents", entry) + + return output + +///Sort the autowiki fish entries by their weight. However, duds always come first. +/proc/cmp_autowiki_fish_sources_content(list/A, list/B) + if(A[FISH_SOURCE_AUTOWIKI_NAME] == FISH_SOURCE_AUTOWIKI_DUD) + return -1 + if(B[FISH_SOURCE_AUTOWIKI_NAME] == FISH_SOURCE_AUTOWIKI_DUD) + return 1 + if(A[FISH_SOURCE_AUTOWIKI_NAME] == FISH_SOURCE_AUTOWIKI_OTHER) + return 1 + if(B[FISH_SOURCE_AUTOWIKI_NAME] == FISH_SOURCE_AUTOWIKI_OTHER) + return -1 + return B[FISH_SOURCE_AUTOWIKI_WEIGHT] - A[FISH_SOURCE_AUTOWIKI_WEIGHT] + +/datum/autowiki/fish_scan + page = "Template:Autowiki/Content/Fish/Scan" + +/datum/autowiki/fish_scan/generate() + var/output = "" + + var/list/generated_icons = list() + var/datum/techweb/techweb = locate(/datum/techweb/admin) in SSresearch.techwebs + for(var/scan_type in typesof(/datum/experiment/scanning/fish)) + techweb.add_experiment(scan_type) //Make sure each followup experiment is available + var/datum/experiment/scanning/fish/scan = locate(scan_type) in techweb.available_experiments + if(!scan) //Just to be sure, if the scan was already completed. + scan = locate(scan_type) in techweb.completed_experiments + + output += "\n\n" + include_template("Autowiki/FishScan", list( + "name" = full_capitalize(escape_value(scan.name)), + "description" = escape_value(scan.description), + "requirements" = build_requirements(scan), + "rewards" = build_rewards(scan, generated_icons), + + )) + + return output + +/datum/autowiki/fish_scan/proc/build_requirements(datum/experiment/scanning/fish/scan) + var/output = "" + for(var/obj/item/type as anything in scan.required_atoms) + var/name = initial(type.name) + //snowflake case because the default holographic fish is called goldfish but we don't want to confuse readers. + if(type == /obj/item/fish/holo) + name = "holographic Fish" + output += include_template("Autowiki/FishScanRequirements", list( + "name" = full_capitalize(escape_value(name)), + "amount" = scan.required_atoms[type], + )) + return output + +/datum/autowiki/fish_scan/proc/build_rewards(datum/experiment/scanning/fish/scan, list/generated_icons) + var/output = "" + var/datum/fish_source/portal/reward = GLOB.preset_fish_sources[scan.fish_source_reward] + var/filename = SANITIZE_FILENAME("fishing_portal_[reward.radial_state]") + + var/list/unlocks = list() + for(var/datum/experiment/unlock as anything in scan.next_experiments) + unlocks += initial(unlock.name) + output += include_template("Autowiki/FishScanRewards", list( + "name" = full_capitalize(escape_value("[reward.radial_name] Dimension")), + "icon" = filename, + "points" = scan.get_points_reward_text(), + "unlock" = english_list(unlocks, nothing_text = "Nothing"), + )) + + if(!generated_icons[filename]) + upload_icon(icon(icon = 'icons/hud/radial_fishing.dmi', icon_state = reward.radial_state), filename) + generated_icons[filename] = TRUE + + return output + +/datum/autowiki/fish_evolution + page = "Template:Autowiki/Content/Fish/Evolution" + +/datum/autowiki/fish_evolution/generate() + var/output = "" + + for(var/evo_type in GLOB.fish_evolutions) + var/datum/fish_evolution/evolution = GLOB.fish_evolutions[evo_type] + if(!evolution.show_on_wiki) + continue + + output += "\n\n" + include_template("Autowiki/FishEvolution", list( + "name" = escape_value(evolution.name), + "fish" = get_fish(evo_type), + "min_max_temp" = "[evolution.required_temperature_min] - [evolution.required_temperature_max] K", + "notes" = escape_value(evolution.conditions_note), + "result_icon" = evolution.show_result_on_wiki ? FISH_AUTOWIKI_FILENAME(evolution.new_fish_type) : FISH_SOURCE_AUTOWIKI_QUESTIONMARK, + )) + + return output + +/datum/autowiki/fish_evolution/proc/get_fish(evo_type) + var/output = "" + + for(var/obj/item/fish/fish as anything in GLOB.fishes_by_fish_evolution[evo_type]) + if(!(initial(fish.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG)) + continue + output += include_template("Autowiki/FishEvolutionCandidate", list( + "name" = escape_value(full_capitalize(initial(fish.name))), + "icon" = FISH_AUTOWIKI_FILENAME(fish), + )) + + return output + +/datum/autowiki/fish_lure + page = "Template:Autowiki/Content/Fish/Lure" + +/datum/autowiki/fish_lure/generate() + var/output = "" + + for(var/obj/item/fishing_lure/lure as anything in SSfishing.lure_catchables) + var/state = initial(lure.icon_state) + var/filename = SANITIZE_FILENAME("[state]_wiki_lure") + output += "\n\n" + include_template("Autowiki/FishLure", list( + "name" = escape_value(full_capitalize(initial(lure.name))), + "desc" = escape_value(initial(lure.name)), + "icon" = filename, + "catchables" = build_catchables(SSfishing.lure_catchables[lure]), + )) + + upload_icon(icon(icon = initial(lure.icon), icon_state = state), filename) + + return output + +/datum/autowiki/fish_lure/proc/build_catchables(list/catchables) + var/output = "" + + for(var/obj/item/fish/fish as anything in catchables) + if(!(initial(fish.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG)) + continue + output += include_template("Autowiki/FishLureCatchables", list( + "name" = escape_value(full_capitalize(initial(fish.name))), + "icon" = FISH_AUTOWIKI_FILENAME(fish), + )) + + return output diff --git a/code/modules/autowiki/pages/soup.dm b/code/modules/autowiki/pages/soup.dm index f67d00e97a057..754beb3a82adb 100644 --- a/code/modules/autowiki/pages/soup.dm +++ b/code/modules/autowiki/pages/soup.dm @@ -16,6 +16,7 @@ var/container_for_images = /obj/item/reagent_containers/cup/bowl + var/list/already_generated_icons = list() for(var/soup_recipe_type in subtypesof(/datum/chemical_reaction/food/soup)) var/datum/chemical_reaction/food/soup/soup_recipe = new soup_recipe_type() // Used to determine what icon is displayed on the wiki @@ -123,14 +124,17 @@ template_list["results"] = escape_value(compiled_results) // -- While we're here, generate an icon of the bowl -- - if(!soup_icon_state) - var/obj/item/reagent_containers/cup/bowl/soup_bowl = new() - soup_bowl.reagents.add_reagent(result_soup_type, soup_bowl.reagents.maximum_volume) - upload_icon(getFlatIcon(soup_bowl, no_anim = TRUE), filename) - qdel(soup_bowl) - else - var/image/compiled_image = image(icon = soup_icon, icon_state = soup_icon_state) - upload_icon(getFlatIcon(compiled_image, no_anim = TRUE), filename) + + if(!already_generated_icons[filename]) + if(!soup_icon_state) + var/obj/item/reagent_containers/cup/bowl/soup_bowl = new() + soup_bowl.reagents.add_reagent(result_soup_type, soup_bowl.reagents.maximum_volume) + upload_icon(getFlatIcon(soup_bowl, no_anim = TRUE), filename) + qdel(soup_bowl) + else + var/image/compiled_image = image(icon = soup_icon, icon_state = soup_icon_state) + upload_icon(getFlatIcon(compiled_image, no_anim = TRUE), filename) + already_generated_icons[filename] = TRUE // -- Cleanup -- qdel(soup_recipe) diff --git a/code/modules/autowiki/pages/vending.dm b/code/modules/autowiki/pages/vending.dm index 0a8dd3db0a9d5..e110afa760ea2 100644 --- a/code/modules/autowiki/pages/vending.dm +++ b/code/modules/autowiki/pages/vending.dm @@ -10,7 +10,10 @@ // So we put it inside, something var/obj/parent = new - for (var/vending_type in sort_list(subtypesof(/obj/machinery/vending), GLOBAL_PROC_REF(cmp_typepaths_asc))) + for (var/obj/machinery/vending/vending_type as anything in sort_list(subtypesof(/obj/machinery/vending), GLOBAL_PROC_REF(cmp_typepaths_asc))) + var/obj/machinery/vending/parent_machine = type2parent(vending_type) + if(initial(parent_machine.name) == initial(vending_type.name)) + continue //Same name, likely just a slightly touched up subtype for specific maps. var/obj/machinery/vending/vending_machine = new vending_type(parent) vending_machine.use_power = FALSE vending_machine.update_icon(UPDATE_ICON_STATE) diff --git a/code/modules/awaymissions/away_props.dm b/code/modules/awaymissions/away_props.dm index 843e55b963fe4..90fc3031088f2 100644 --- a/code/modules/awaymissions/away_props.dm +++ b/code/modules/awaymissions/away_props.dm @@ -137,3 +137,16 @@ if(!istype(mover)) return return isnull(mover.ckey) == reverse + +/obj/effect/invisible_wall // why didnt we have this already + name = "invisible wall" + desc = "You shall not pass" + icon = 'icons/effects/mapping_helpers.dmi' + icon_state = "blocker" + color = COLOR_BLUE_LIGHT + invisibility = INVISIBILITY_MAXIMUM + anchored = TRUE + +/obj/effect/invisible_wall/CanAllowThrough(mob/living/mover, border_dir) + ..() + return FALSE // NO diff --git a/code/modules/awaymissions/cordon.dm b/code/modules/awaymissions/cordon.dm index 285d0d49e1051..738efa1d7c21f 100644 --- a/code/modules/awaymissions/cordon.dm +++ b/code/modules/awaymissions/cordon.dm @@ -49,10 +49,10 @@ /turf/cordon/Bumped(atom/movable/bumped_atom) . = ..() - if(HAS_TRAIT(bumped_atom, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT)) //we could feasibly reach the border, so just dont + if(HAS_TRAIT(bumped_atom, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT)) //we could feasibly reach the border, so just don't dump_in_space(bumped_atom) -/// Area used in conjuction with the cordon turf to create a fully functioning world border. +/// Area used in conjunction with the cordon turf to create a fully functioning world border. /area/misc/cordon name = "CORDON" icon_state = "cordon" diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 80925779310af..5c3785de7f71d 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -22,7 +22,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) /datum/gateway_destination/proc/get_available_reason() . = "Unreachable" if(world.time - SSticker.round_start_time < wait) - playsound(src, 'sound/effects/gateway_calibrating.ogg', 80, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/gateway/gateway_calibrating.ogg', 80, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) . = "Connection desynchronized. Recalibration in progress." /* Check if the movable is allowed to arrive at this destination (exile implants mostly) */ @@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) return //SKYRAT EDIT END if(get_dir(src,AM) == gateway?.dir) - playsound(src, 'sound/effects/gateway_travel.ogg', 70, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/gateway/gateway_travel.ogg', 70, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) gateway.Transfer(AM) /obj/effect/gateway_portal_bumper/Destroy(force) @@ -231,7 +231,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) /obj/machinery/gateway/proc/deactivate() var/datum/gateway_destination/dest = target target = null - playsound(src, 'sound/effects/gateway_close.ogg', 140, TRUE, TRUE, SOUND_RANGE) + playsound(src, 'sound/machines/gateway/gateway_close.ogg', 140, TRUE, TRUE, SOUND_RANGE) dest.deactivate(src) QDEL_NULL(portal) update_use_power(IDLE_POWER_USE) @@ -298,7 +298,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) target.activate(destination) portal_visuals.setup_visuals(target) transport_active = TRUE - playsound(src, 'sound/effects/gateway_open.ogg', 140, TRUE, TRUE, SOUND_RANGE) + playsound(src, 'sound/machines/gateway/gateway_open.ogg', 140, TRUE, TRUE, SOUND_RANGE) generate_bumper() update_use_power(ACTIVE_POWER_USE) update_appearance() @@ -341,7 +341,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) if(calibrated) to_chat(user, span_alert("The gate is already calibrated, there is no work for you to do here.")) else - playsound(src, 'sound/effects/gateway_calibrated.ogg', 80, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/gateway/gateway_calibrated.ogg', 80, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) to_chat(user, "[span_boldnotice("Recalibration successful!")]: \black This gate's systems have been fine tuned. Travel to this gate will now be on target.") calibrated = TRUE return TRUE @@ -408,7 +408,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) destinations += list(possible_destination.get_ui_data()) .["destinations"] = destinations -/obj/machinery/computer/gateway_control/ui_act(action, list/params) +/obj/machinery/computer/gateway_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/awaymissions/mission_code/Beach.dm b/code/modules/awaymissions/mission_code/Beach.dm index 8e05cfe4a5eb1..7f0e27c090ae2 100644 --- a/code/modules/awaymissions/mission_code/Beach.dm +++ b/code/modules/awaymissions/mission_code/Beach.dm @@ -6,7 +6,7 @@ base_lighting_color = "#FFFFCC" requires_power = FALSE has_gravity = STANDARD_GRAVITY - ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg','sound/ambience/ambiodd.ogg','sound/ambience/ambinice.ogg') + ambientsounds = list('sound/ambience/beach/shore.ogg', 'sound/ambience/beach/seag1.ogg','sound/ambience/beach/seag2.ogg','sound/ambience/beach/seag3.ogg','sound/ambience/misc/ambiodd.ogg','sound/ambience/medical/ambinice.ogg') /obj/item/paper/fluff/old_pirate_note name = "rum-stained letter" diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index cf6a6a3c9c7a4..2525e679cad64 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -90,7 +90,7 @@ name = "lumbermill saw" desc = "Faster then the cartoons!" obj_flags = CAN_BE_HIT | EMAGGED - item_recycle_sound = 'sound/weapons/chainsawhit.ogg' + item_recycle_sound = 'sound/items/weapons/chainsawhit.ogg' /obj/machinery/recycler/lumbermill/recycle_item(obj/item/grown/log/L) if(!istype(L)) diff --git a/code/modules/awaymissions/mission_code/centcomAway.dm b/code/modules/awaymissions/mission_code/centcomAway.dm index 3b0d3e8a810cb..1fc54d7ef9679 100644 --- a/code/modules/awaymissions/mission_code/centcomAway.dm +++ b/code/modules/awaymissions/mission_code/centcomAway.dm @@ -7,32 +7,32 @@ /area/awaymission/centcom_away/general name = "XCC-P5831" - ambientsounds = list('sound/ambience/ambigen2.ogg') + ambientsounds = list('sound/ambience/general/ambigen2.ogg') /area/awaymission/centcom_away/maint name = "XCC-P5831 Maintenance" icon_state = "away1" - ambientsounds = list('sound/ambience/ambisin1.ogg') + ambientsounds = list('sound/ambience/engineering/ambisin1.ogg') /area/awaymission/centcom_away/thunderdome name = "XCC-P5831 Thunderdome" icon_state = "away2" - ambientsounds = list('sound/ambience/ambisin2.ogg') + ambientsounds = list('sound/ambience/engineering/ambisin2.ogg') /area/awaymission/centcom_away/cafe name = "XCC-P5831 Kitchen Arena" icon_state = "away3" - ambientsounds = list('sound/ambience/ambisin3.ogg') + ambientsounds = list('sound/ambience/engineering/ambisin3.ogg') /area/awaymission/centcom_away/courtroom name = "XCC-P5831 Courtroom" icon_state = "away4" - ambientsounds = list('sound/ambience/ambisin4.ogg') + ambientsounds = list('sound/ambience/engineering/ambisin4.ogg') /area/awaymission/centcom_away/hangar name = "XCC-P5831 Hangars" icon_state = "away4" - ambientsounds = list('sound/ambience/ambigen4.ogg') + ambientsounds = list('sound/ambience/general/ambigen4.ogg') //centcomAway items diff --git a/code/modules/awaymissions/mission_code/moonoutpost19.dm b/code/modules/awaymissions/mission_code/moonoutpost19.dm index 17385bc70bc40..446b9916a4577 100644 --- a/code/modules/awaymissions/mission_code/moonoutpost19.dm +++ b/code/modules/awaymissions/mission_code/moonoutpost19.dm @@ -34,7 +34,7 @@ power_environ = FALSE power_equip = FALSE power_light = FALSE - ambientsounds = list('sound/ambience/ambimine.ogg') + ambientsounds = list('sound/ambience/ruin/ambimine.ogg') icon_state = "awaycontent5" outdoors = TRUE @@ -56,7 +56,7 @@ power_environ = FALSE power_equip = FALSE power_light = FALSE - ambientsounds = list('sound/ambience/ambimine.ogg') + ambientsounds = list('sound/ambience/ruin/ambimine.ogg') icon_state = "awaycontent8" //Fluff objects/structures. diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index cc35b4a79efca..db48b1b31d1fb 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -306,13 +306,13 @@ PRESET /datum/preset_holoimage/nanotrasenprivatesecurity NAME James Reed DELAY 10 - SOUND sound/weapons/laser.ogg + SOUND sound/items/weapons/laser.ogg DELAY 10 - SOUND sound/weapons/laser.ogg + SOUND sound/items/weapons/laser.ogg DELAY 10 - SOUND sound/weapons/laser.ogg + SOUND sound/items/weapons/laser.ogg DELAY 10 - SOUND sound/weapons/laser.ogg + SOUND sound/items/weapons/laser.ogg DELAY 15 SAY Just go! I'll keep it busy, there's an outpost south of here with an elevator to the surface. NAME Jacob Ullman @@ -333,9 +333,9 @@ DELAY 10 SAY You don't need to tell me twice, I just need to swipe access and then.. DELAY 15 - SOUND sound/effects/glassbr1.ogg + SOUND sound/effects/glass/glassbr1.ogg DELAY 10 - SOUND sound/effects/glassbr2.ogg + SOUND sound/effects/glass/glassbr2.ogg DELAY 15 NAME Jacob Ullman DELAY 10 @@ -347,13 +347,13 @@ DELAY 10 SAY DON'T FUCKING RUSH ME ALRIGHT IT'S BEING CALLED. DELAY 15 - SOUND sound/effects/huuu.ogg + SOUND sound/mobs/non-humanoids/frog/huuu.ogg DELAY 5 - SOUND sound/effects/huuu.ogg + SOUND sound/mobs/non-humanoids/frog/huuu.ogg DELAY 15 SOUND sound/effects/woodhit.ogg DELAY 2 - SOUND sound/effects/bodyfall3.ogg + SOUND sound/effects/bodyfall/bodyfall3.ogg DELAY 5 SOUND sound/effects/meow1.ogg DELAY 15 diff --git a/code/modules/balloon_alert/balloon_alert.dm b/code/modules/balloon_alert/balloon_alert.dm index db8c529198631..cf890c0130807 100644 --- a/code/modules/balloon_alert/balloon_alert.dm +++ b/code/modules/balloon_alert/balloon_alert.dm @@ -44,7 +44,7 @@ if (isnull(viewer_client)) return - var/bound_width = world.icon_size + var/bound_width = ICON_SIZE_X if (ismovable(src)) var/atom/movable/movable_source = src bound_width = movable_source.bound_width @@ -64,7 +64,7 @@ animate( balloon_alert, - pixel_y = world.icon_size * 1.2, + pixel_y = ICON_SIZE_Y * 1.2, time = BALLOON_TEXT_TOTAL_LIFETIME(length_mult), easing = SINE_EASING | EASE_OUT, ) diff --git a/code/modules/basketball/basketball.dm b/code/modules/basketball/basketball.dm index 35579dc448282..c69c2fd1f7833 100644 --- a/code/modules/basketball/basketball.dm +++ b/code/modules/basketball/basketball.dm @@ -8,7 +8,6 @@ inhand_icon_state = "basketball" desc = "Here's your chance, do your dance at the Space Jam." w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets - item_flags = XENOMORPH_HOLDABLE // playing ball against a xeno is rigged since they cannot be disarmed /// The person dribbling the basketball var/mob/living/wielder /// So the basketball doesn't make sound every step diff --git a/code/modules/basketball/controller.dm b/code/modules/basketball/controller.dm index 53e89d182a3e7..4373c8d784a8d 100644 --- a/code/modules/basketball/controller.dm +++ b/code/modules/basketball/controller.dm @@ -194,7 +194,7 @@ GLOBAL_VAR(basketball_game) player_client.prefs.safe_transfer_prefs_to(baller, is_antag = TRUE) baller.key = player_key - SEND_SOUND(baller, sound('sound/misc/whistle.ogg', volume=30)) + SEND_SOUND(baller, sound('sound/items/whistle/whistle.ogg', volume=30)) if(is_player_referee) to_chat(baller, span_notice("You are a referee. Make sure the teams play fair and use your whistle to call fouls appropriately.")) else diff --git a/code/modules/basketball/hoop.dm b/code/modules/basketball/hoop.dm index 72669df017d90..edc106c155e63 100644 --- a/code/modules/basketball/hoop.dm +++ b/code/modules/basketball/hoop.dm @@ -38,7 +38,7 @@ /obj/structure/hoop/proc/score(obj/item/toy/basketball/ball, mob/living/baller, points) // we still play buzzer sound regardless of the object - playsound(src, 'sound/machines/scanbuzz.ogg', 100, FALSE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 100, FALSE) if(!istype(ball)) return @@ -130,7 +130,7 @@ loser.forceMove(loc) loser.Paralyze(100) visible_message(span_danger("[baller] dunks [loser] into \the [src]!")) - playsound(src, 'sound/machines/scanbuzz.ogg', 100, FALSE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 100, FALSE) baller.adjustStaminaLoss(STAMINA_COST_DUNKING_MOB) baller.stop_pulling() diff --git a/code/modules/basketball/referee.dm b/code/modules/basketball/referee.dm index 666ff628682b8..2c0a28d7331e1 100644 --- a/code/modules/basketball/referee.dm +++ b/code/modules/basketball/referee.dm @@ -34,7 +34,7 @@ /datum/action/innate/timeout/do_ability(mob/living/caller, mob/living/carbon/human/target) caller.say("FOUL BY [target]!", forced = "whistle") - playsound(caller, 'sound/misc/whistle.ogg', 30, FALSE, 4) + playsound(caller, 'sound/items/whistle/whistle.ogg', 30, FALSE, 4) new /obj/effect/timestop(get_turf(target), 0, 5 SECONDS, list(caller), TRUE, TRUE) diff --git a/code/modules/bitrunning/antagonists/netguardian.dm b/code/modules/bitrunning/antagonists/netguardian.dm index f0ea7822985f4..0f546f87b1dc9 100644 --- a/code/modules/bitrunning/antagonists/netguardian.dm +++ b/code/modules/bitrunning/antagonists/netguardian.dm @@ -22,7 +22,7 @@ attack_verb_continuous = "drills" attack_verb_simple = "drills" - attack_sound = 'sound/weapons/drill.ogg' + attack_sound = 'sound/items/weapons/drill.ogg' attack_vis_effect = ATTACK_EFFECT_MECHFIRE verb_say = "states" verb_ask = "queries" @@ -58,7 +58,7 @@ ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) AddComponent(/datum/component/ranged_attacks, \ casing_type = /obj/item/ammo_casing/c46x30mm, \ - projectile_sound = 'sound/weapons/gun/smg/shot.ogg', \ + projectile_sound = 'sound/items/weapons/gun/smg/shot.ogg', \ burst_shots = 6 \ ) @@ -71,7 +71,7 @@ /mob/living/basic/netguardian/death(gibbed) do_sparks(number = 3, cardinal_only = TRUE, source = src) - playsound(src, 'sound/mecha/weapdestr.ogg', 100) + playsound(src, 'sound/vehicles/mecha/weapdestr.ogg', 100) return ..() /mob/living/basic/netguardian/update_overlays() @@ -91,7 +91,7 @@ /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) + playsound(player, 'sound/vehicles/mecha/skyfall_power_up.ogg', 120) player.say("target acquired.", "machine") var/overlay_icon = 'icons/mob/nonhuman-player/netguardian.dmi' diff --git a/code/modules/bitrunning/areas.dm b/code/modules/bitrunning/areas.dm index 4fcf0a0496e47..0656f9d65b389 100644 --- a/code/modules/bitrunning/areas.dm +++ b/code/modules/bitrunning/areas.dm @@ -14,7 +14,7 @@ name = "Virtual Domain Ruins" icon_state = "bit_ruin" icon = 'icons/area/areas_station.dmi' - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING has_gravity = STANDARD_GRAVITY requires_power = FALSE @@ -26,7 +26,7 @@ /area/virtual_domain/safehouse name = "Virtual Domain Safehouse" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA | UNLIMITED_FISHING icon_state = "bit_safe" requires_power = FALSE sound_environment = SOUND_ENVIRONMENT_ROOM @@ -36,30 +36,30 @@ /area/lavaland/surface/outdoors/virtual_domain name = "Virtual Domain Lava Ruins" icon_state = "bit_ruin" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING /area/icemoon/underground/explored/virtual_domain name = "Virtual Domain Ice Ruins" icon_state = "bit_ice" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING /area/ruin/space/virtual_domain name = "Virtual Domain Unexplored Location" icon = 'icons/area/areas_station.dmi' icon_state = "bit_ruin" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING /area/space/virtual_domain name = "Virtual Domain Space" icon = 'icons/area/areas_station.dmi' icon_state = "bit_space" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING ///Areas that virtual entities should not be in /area/virtual_domain/protected_space name = "Virtual Domain Safe Zone" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA | UNLIMITED_FISHING icon_state = "bit_safe" /area/virtual_domain/protected_space/fullbright diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm index b56fd3069c722..d71e88b2160ad 100644 --- a/code/modules/bitrunning/components/avatar_connection.dm +++ b/code/modules/bitrunning/components/avatar_connection.dm @@ -70,7 +70,7 @@ for(var/skill_type in old_mind.known_skills) avatar.mind.set_experience(skill_type, old_mind.get_skill_exp(skill_type), silent = TRUE) - avatar.playsound_local(avatar, 'sound/magic/blink.ogg', 25, TRUE) + avatar.playsound_local(avatar, 'sound/effects/magic/blink.ogg', 25, TRUE) avatar.set_static_vision(2 SECONDS) avatar.set_temp_blindness(1 SECONDS) // I'm in @@ -135,7 +135,7 @@ SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_success.ogg', 50, vary = TRUE) + avatar.playsound_local(avatar, 'sound/machines/terminal/terminal_success.ogg', 50, vary = TRUE) avatar.throw_alert( ALERT_BITRUNNER_COMPLETED, /atom/movable/screen/alert/bitrunning/qserver_domain_complete, @@ -180,7 +180,7 @@ SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, vary = TRUE) + avatar.playsound_local(avatar, 'sound/machines/terminal/terminal_alert.ogg', 50, vary = TRUE) var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_CROWBAR, /atom/movable/screen/alert/bitrunning, @@ -230,7 +230,7 @@ SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, vary = TRUE) + avatar.playsound_local(avatar, 'sound/machines/terminal/terminal_alert.ogg', 50, vary = TRUE) var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_SHUTDOWN, /atom/movable/screen/alert/bitrunning, @@ -245,7 +245,7 @@ SIGNAL_HANDLER var/mob/living/avatar = parent - avatar.playsound_local(avatar, 'sound/machines/terminal_alert.ogg', 50, vary = TRUE) + avatar.playsound_local(avatar, 'sound/machines/terminal/terminal_alert.ogg', 50, vary = TRUE) var/atom/movable/screen/alert/bitrunning/alert = avatar.throw_alert( ALERT_BITRUNNER_BREACH, /atom/movable/screen/alert/bitrunning, diff --git a/code/modules/bitrunning/components/bitrunning_points.dm b/code/modules/bitrunning/components/bitrunning_points.dm index ea8f63f76d8df..ae20ec41fb4a3 100644 --- a/code/modules/bitrunning/components/bitrunning_points.dm +++ b/code/modules/bitrunning/components/bitrunning_points.dm @@ -28,7 +28,7 @@ /// Spawns the crate with some effects /datum/component/bitrunning_points/proc/reveal() - playsound(src, 'sound/magic/blink.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/blink.ogg', 50, TRUE) var/turf/tile = parent var/obj/structure/closet/crate/secure/bitrunning/encrypted/crate = new() diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm index 16190851f3720..370957e2ebb0f 100644 --- a/code/modules/bitrunning/event.dm +++ b/code/modules/bitrunning/event.dm @@ -61,7 +61,7 @@ var/total = 0 for(var/datum/weakref/server_ref in cyber_control.active_servers) var/obj/machinery/quantum_server/server = server_ref?.resolve() - if(isnull(server)) + if(isnull(server) || QDELETED(server)) continue total += length(server.mutation_candidate_refs) diff --git a/code/modules/bitrunning/netpod/container.dm b/code/modules/bitrunning/netpod/container.dm index 6165544544511..b9c262a9fb190 100644 --- a/code/modules/bitrunning/netpod/container.dm +++ b/code/modules/bitrunning/netpod/container.dm @@ -17,7 +17,7 @@ /obj/machinery/netpod/open_machine(drop = TRUE, density_to_set = FALSE) - playsound(src, 'sound/machines/tramopen.ogg', 60, TRUE, frequency = 65000) + playsound(src, 'sound/machines/tram/tramopen.ogg', 60, TRUE, frequency = 65000) flick("[base_icon_state]_opening", src) SEND_SIGNAL(src, COMSIG_BITRUNNER_NETPOD_OPENED) update_use_power(IDLE_POWER_USE) @@ -29,7 +29,7 @@ if(!state_open || panel_open || !is_operational || !iscarbon(user)) return - playsound(src, 'sound/machines/tramclose.ogg', 60, TRUE, frequency = 65000) + playsound(src, 'sound/machines/tram/tramclose.ogg', 60, TRUE, frequency = 65000) flick("[base_icon_state]_closing", src) ..() @@ -52,7 +52,7 @@ span_notice("You start to pry open [src]."), span_notice("You hear loud prying on metal.") ) - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE) + playsound(src, 'sound/machines/airlock/airlock_alien_prying.ogg', 100, TRUE) SEND_SIGNAL(src, COMSIG_BITRUNNER_CROWBAR_ALERT, pryer) @@ -67,7 +67,7 @@ /// Closes the machine without shoving in an occupant /obj/machinery/netpod/proc/shut_pod() state_open = FALSE - playsound(src, 'sound/machines/tramclose.ogg', 60, TRUE, frequency = 65000) + playsound(src, 'sound/machines/tram/tramclose.ogg', 60, TRUE, frequency = 65000) flick("[base_icon_state]_closing", src) set_density(TRUE) diff --git a/code/modules/bitrunning/netpod/ui.dm b/code/modules/bitrunning/netpod/ui.dm index 93719fe64ebef..919ba1e174b53 100644 --- a/code/modules/bitrunning/netpod/ui.dm +++ b/code/modules/bitrunning/netpod/ui.dm @@ -27,7 +27,7 @@ return data -/obj/machinery/netpod/ui_act(action, params) +/obj/machinery/netpod/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return TRUE diff --git a/code/modules/bitrunning/netpod/utils.dm b/code/modules/bitrunning/netpod/utils.dm index c593b457e9cc1..fa271748e78ad 100644 --- a/code/modules/bitrunning/netpod/utils.dm +++ b/code/modules/bitrunning/netpod/utils.dm @@ -29,7 +29,7 @@ open_machine() return - mob_occupant.playsound_local(src, 'sound/magic/blink.ogg', 25, TRUE) + mob_occupant.playsound_local(src, 'sound/effects/magic/blink.ogg', 25, TRUE) mob_occupant.set_static_vision(2 SECONDS) mob_occupant.set_temp_blindness(1 SECONDS) mob_occupant.Paralyze(2 SECONDS) diff --git a/code/modules/bitrunning/objects/byteforge.dm b/code/modules/bitrunning/objects/byteforge.dm index b971cdae75ddc..cc18d2011a294 100644 --- a/code/modules/bitrunning/objects/byteforge.dm +++ b/code/modules/bitrunning/objects/byteforge.dm @@ -26,7 +26,7 @@ /// Does some sparks after it's done /obj/machinery/byteforge/proc/flash(atom/movable/thing) - playsound(src, 'sound/magic/blink.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/blink.ogg', 50, TRUE) var/datum/effect_system/spark_spread/quantum/sparks = new() sparks.set_up(5, 1, loc) diff --git a/code/modules/bitrunning/objects/loot_box.dm b/code/modules/bitrunning/objects/loot_box.dm index 200e0b259fbda..e142a3e93a43c 100644 --- a/code/modules/bitrunning/objects/loot_box.dm +++ b/code/modules/bitrunning/objects/loot_box.dm @@ -47,7 +47,7 @@ atom_storage.max_total_storage = 3 atom_storage.locked = STORAGE_NOT_LOCKED icon_state = icon_closed - playsound(src, 'sound/magic/blink.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/blink.ogg', 50, TRUE) /obj/item/storage/lockbox/bitrunning/decrypted/PopulateContents() var/choice = SSbitrunning.pick_secondary_loot(source_domain) diff --git a/code/modules/bitrunning/objects/loot_crate.dm b/code/modules/bitrunning/objects/loot_crate.dm index db3f927e02153..158da4e29f0ff 100644 --- a/code/modules/bitrunning/objects/loot_crate.dm +++ b/code/modules/bitrunning/objects/loot_crate.dm @@ -37,7 +37,7 @@ rewards_multiplier = 1, ) . = ..() - playsound(src, 'sound/magic/blink.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/blink.ogg', 50, TRUE) if(isnull(completed_domain)) return diff --git a/code/modules/bitrunning/objects/vendor.dm b/code/modules/bitrunning/objects/vendor.dm index abd63a9e78430..d44630bc3beed 100644 --- a/code/modules/bitrunning/objects/vendor.dm +++ b/code/modules/bitrunning/objects/vendor.dm @@ -62,7 +62,7 @@ /obj/machinery/computer/order_console/bitrunning/retrieve_points(obj/item/card/id/id_card) return round(id_card.registered_account.bitrunning_points) -/obj/machinery/computer/order_console/bitrunning/ui_act(action, params) +/obj/machinery/computer/order_console/bitrunning/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(!.) flick("vendor_off", src) diff --git a/code/modules/bitrunning/orders/tech.dm b/code/modules/bitrunning/orders/tech.dm index 7e987e4818104..9dd1db17c799d 100644 --- a/code/modules/bitrunning/orders/tech.dm +++ b/code/modules/bitrunning/orders/tech.dm @@ -2,38 +2,38 @@ category_index = CATEGORY_BITRUNNING_TECH /datum/orderable_item/bitrunning_tech/item_tier1 - cost_per_order = 1000 + cost_per_order = 750 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 + cost_per_order = 1250 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 + cost_per_order = 2000 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 + cost_per_order = 750 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 + cost_per_order = 1500 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 + cost_per_order = 2500 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." /datum/orderable_item/bitrunning_tech/flip_skillchip - item_path = /obj/item/skillchip/matrix_flip - cost_per_order = 2000 + item_path = /obj/item/skillchip/matrix_taunt + cost_per_order = 1500 /datum/orderable_item/bitrunning_tech/pka_mod item_path = /obj/item/bitrunning_disk/item/pka_mods @@ -42,7 +42,7 @@ /datum/orderable_item/bitrunning_tech/pka_mod/premium item_path = /obj/item/bitrunning_disk/item/pka_mods/premium - cost_per_order = 1800 + cost_per_order = 1600 desc = "This disk contains a program that lets you equip stronger modkits for the proto-kinetic accelerator. Proto-kinetic accelerator not included." /datum/orderable_item/bitrunning_tech/pkc_mod @@ -52,5 +52,5 @@ /datum/orderable_item/bitrunning_tech/pkc_mod/premium item_path = /obj/item/bitrunning_disk/item/pkc_mods/premium - cost_per_order = 1800 + cost_per_order = 1600 desc = "This disk contains a program that lets you equip stronger trophies for the proto-kinetic crusher. Proto-kinetic crusher not included." diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm index 541d36ad5d72c..672a79ba72cef 100644 --- a/code/modules/bitrunning/server/_parent.dm +++ b/code/modules/bitrunning/server/_parent.dm @@ -108,7 +108,7 @@ add_overlay(mutable_appearance('icons/obj/machines/bitrunning.dmi', "emag_overlay")) balloon_alert(user, "system jailbroken...") - playsound(src, 'sound/effects/sparks1.ogg', 35, vary = TRUE) + playsound(src, 'sound/effects/sparks/sparks1.ogg', 35, vary = TRUE) /obj/machinery/quantum_server/update_appearance(updates) if(isnull(generated_domain) || !is_operational) diff --git a/code/modules/bitrunning/server/loot.dm b/code/modules/bitrunning/server/loot.dm index 0e6ff30cd246a..e4c523099ea54 100644 --- a/code/modules/bitrunning/server/loot.dm +++ b/code/modules/bitrunning/server/loot.dm @@ -33,7 +33,7 @@ SEND_SIGNAL(src, COMSIG_BITRUNNER_DOMAIN_COMPLETE, cache, generated_domain.reward_points) points += generated_domain.reward_points - playsound(src, 'sound/machines/terminal_success.ogg', 30, vary = TRUE) + playsound(src, 'sound/machines/terminal/terminal_success.ogg', 30, vary = TRUE) var/bonus = calculate_rewards() diff --git a/code/modules/bitrunning/server/map_handling.dm b/code/modules/bitrunning/server/map_handling.dm index f98332f7e8d8f..ba2162ef4f52e 100644 --- a/code/modules/bitrunning/server/map_handling.dm +++ b/code/modules/bitrunning/server/map_handling.dm @@ -5,12 +5,12 @@ if(!length(avatar_connection_refs)) balloon_alert_to_viewers("powering down domain...") - playsound(src, 'sound/machines/terminal_off.ogg', 40, vary = TRUE) + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 40, vary = TRUE) reset() return balloon_alert_to_viewers("notifying clients...") - playsound(src, 'sound/machines/terminal_alert.ogg', 100, vary = TRUE) + playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 100, vary = TRUE) user.visible_message( span_danger("[user] begins depowering the server!"), span_notice("You start disconnecting clients..."), @@ -43,7 +43,7 @@ return FALSE is_ready = FALSE - playsound(src, 'sound/machines/terminal_processing.ogg', 30, 2) + playsound(src, 'sound/machines/terminal/terminal_processing.ogg', 30, 2) /// If any one of these fail, it reverts the entire process if(!load_domain(map_key) || !load_map_items() || !load_mob_segments()) @@ -60,7 +60,7 @@ if(prob(spawn_chance)) setup_glitch() - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, vary = TRUE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 30, vary = TRUE) balloon_alert_to_viewers("domain loaded.") generated_domain.start_time = world.time points -= generated_domain.cost diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm index d34305f3dc6d1..df36ba521ccfa 100644 --- a/code/modules/bitrunning/server/obj_generation.dm +++ b/code/modules/bitrunning/server/obj_generation.dm @@ -124,9 +124,12 @@ 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 + var/list/mob_spawns = landmark.spawn_mobs(get_turf(landmark), segment) + if(length(mob_spawns)) + mutation_candidate_refs += mob_spawns + qdel(landmark) + qdel(segment) return TRUE diff --git a/code/modules/bitrunning/server/threats.dm b/code/modules/bitrunning/server/threats.dm index 0819c68f08122..145cdc9ee2bbf 100644 --- a/code/modules/bitrunning/server/threats.dm +++ b/code/modules/bitrunning/server/threats.dm @@ -119,9 +119,9 @@ var/datum/mind/antag_mind = new_mob.mind antag_mind.add_antag_datum(chosen_role) antag_mind.special_role = ROLE_GLITCH - antag_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch)) + antag_mind.set_assigned_role(SSjob.get_job_type(/datum/job/bitrunning_glitch)) - playsound(new_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE) + playsound(new_mob, 'sound/effects/magic/ethereal_exit.ogg', 50, vary = TRUE) message_admins("[ADMIN_LOOKUPFLW(new_mob)] has been made into virtual antagonist by an event.") new_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME) @@ -170,13 +170,13 @@ if(temp_body) qdel(temp_body) - 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) + do_teleport(antag, get_turf(chosen_forge), forced = TRUE, asoundin = 'sound/effects/magic/ethereal_enter.ogg', asoundout = 'sound/effects/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() // BUBBER EDIT - REF CHECK for RUNTIME AVOIDANCE + var/mob/living/creature = creature_ref?.resolve() if(isnull(creature) || creature.mind) mutation_candidate_refs.Remove(creature_ref) diff --git a/code/modules/bitrunning/server/util.dm b/code/modules/bitrunning/server/util.dm index 21c712c8a4361..4f819c54cdc4c 100644 --- a/code/modules/bitrunning/server/util.dm +++ b/code/modules/bitrunning/server/util.dm @@ -141,7 +141,7 @@ /// Do some magic teleport sparks /obj/machinery/quantum_server/proc/spark_at_location(obj/cache) - playsound(cache, 'sound/magic/blink.ogg', 50, vary = TRUE) + playsound(cache, 'sound/effects/magic/blink.ogg', 50, vary = TRUE) var/datum/effect_system/spark_spread/quantum/sparks = new() sparks.set_up(5, location = get_turf(cache)) sparks.start() diff --git a/code/modules/bitrunning/spawners.dm b/code/modules/bitrunning/spawners.dm index 4b5f79a43b186..26288d54a1555 100644 --- a/code/modules/bitrunning/spawners.dm +++ b/code/modules/bitrunning/spawners.dm @@ -1,5 +1,5 @@ /obj/effect/mob_spawn/ghost_role/human/virtual_domain - outfit = /datum/outfit/pirate + outfit = /datum/outfit/virtual_pirate prompt_name = "a virtual domain debug entity" flavour_text = "You probably shouldn't be seeing this, contact a coder!" you_are_text = "You are NOT supposed to be here. How did you let this happen?" @@ -32,6 +32,16 @@ you_are_text = "You are a virtual pirate. Yarrr!" flavour_text = " There's a LANDLUBBER after yer booty. Stop them!" +/datum/outfit/virtual_pirate + name = "Virtual Pirate" + id = /obj/item/card/id/advanced + id_trim = /datum/id_trim/pirate + uniform = /obj/item/clothing/under/costume/pirate + suit = /obj/item/clothing/suit/costume/pirate/armored + glasses = /obj/item/clothing/glasses/eyepatch + head = /obj/item/clothing/head/costume/pirate/bandana/armored + shoes = /obj/item/clothing/shoes/pirate/armored + /obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate/special(mob/living/spawned_mob, mob/mob_possessor) . = ..() diff --git a/code/modules/bitrunning/turfs.dm b/code/modules/bitrunning/turfs.dm index 6ceb31b0e3130..763388b6e0850 100644 --- a/code/modules/bitrunning/turfs.dm +++ b/code/modules/bitrunning/turfs.dm @@ -1,6 +1,5 @@ /turf/open/indestructible/bitrunning_transport name = "circuit floor" - icon = 'icons/turf/floors.dmi' desc = "Looks complex. You can see the circuits running through the floor." icon_state = "bitrunning" diff --git a/code/modules/bitrunning/virtual_domain/domains/grassland_hunt.dm b/code/modules/bitrunning/virtual_domain/domains/grassland_hunt.dm new file mode 100644 index 0000000000000..9c9e1c7171a6c --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/grassland_hunt.dm @@ -0,0 +1,28 @@ +/datum/lazy_template/virtual_domain/grasslands_hunt + name = "Grasslands Hunt" + desc = "A peaceful hunt in the wilderness." + help_text = "As a hunter, you must be able to track and kill your prey. Prove yourself." + is_modular = TRUE + key = "grasslands_hunt" + map_name = "grasslands_hunt" + mob_modules = list(/datum/modular_mob_segment/deer) + + +/datum/lazy_template/virtual_domain/grasslands_hunt/setup_domain(list/created_atoms) + for(var/obj/effect/landmark/bitrunning/mob_segment/landmark in created_atoms) + RegisterSignal(landmark, COMSIG_BITRUNNING_MOB_SEGMENT_SPAWNED, PROC_REF(on_spawned)) + + +/// The mob segment has concluded spawning +/datum/lazy_template/virtual_domain/grasslands_hunt/proc/on_spawned(datum/source, list/mobs) + SIGNAL_HANDLER + + for(var/mob/living/fauna as anything in mobs) + RegisterSignal(fauna, COMSIG_LIVING_DEATH, PROC_REF(on_death)) + + +/// Handles deer being slain +/datum/lazy_template/virtual_domain/grasslands_hunt/proc/on_death(datum/source) + SIGNAL_HANDLER + + add_points(3.5) diff --git a/code/modules/bitrunning/virtual_domain/domains/meta_central.dm b/code/modules/bitrunning/virtual_domain/domains/meta_central.dm new file mode 100644 index 0000000000000..dc1029353c320 --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/meta_central.dm @@ -0,0 +1,13 @@ +/datum/lazy_template/virtual_domain/meta_central + name = "Meta Central" + cost = BITRUNNER_COST_LOW + desc = "Every so often, workers demand rights from Nanotrasen. This is unprofitable." + difficulty = BITRUNNER_DIFFICULTY_LOW + forced_outfit = /datum/outfit/job/security/mod + help_text = "Respond to the worker's demands with sanctioned violence. Recover valuable materials that may be scattered around. Just remember your training: Always assume guilt, they can confess in medbay... Or something like that." + is_modular = TRUE + key = "meta_central" + map_name = "meta_central" + mob_modules = list(/datum/modular_mob_segment/revolutionary) + reward_points = BITRUNNER_REWARD_LOW + announce_to_ghosts = TRUE diff --git a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm index b8c5880a69c38..94d2f9ce7c571 100644 --- a/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm +++ b/code/modules/bitrunning/virtual_domain/modular_mob_segment.dm @@ -3,27 +3,49 @@ #define SPAWN_UNLIKELY 35 #define SPAWN_RARE 10 + +/// Handles spawning mobs for this landmark. Sends a signal when done. +/obj/effect/landmark/bitrunning/mob_segment/proc/spawn_mobs(turf/origin, datum/modular_mob_segment/segment) + var/list/mob/living/spawned_mobs = list() + + spawned_mobs += segment.spawn_mobs(origin) + + SEND_SIGNAL(src, COMSIG_BITRUNNING_MOB_SEGMENT_SPAWNED, spawned_mobs) + + var/list/datum/weakref/mob_refs = list() + for(var/mob/living/spawned as anything in spawned_mobs) + if(QDELETED(spawned)) + continue + + mob_refs += WEAKREF(spawned) + + return mob_refs + + +/** + * A list for mob spawning landmarks to use. + */ /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() + var/list/mobs = list() + /// Spawn no more than this amount + var/max = 4 /// 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) + var/list/mob/living/spawned_mobs = list() - shuffle_inplace(mobs) + var/total_amount = exact ? length(mobs) : rand(1, max) + shuffle_inplace(mobs) var/list/turf/nearby = list() for(var/turf/tile as anything in RANGE_TURFS(2, origin)) @@ -46,7 +68,10 @@ var/mob/living/mob = new path(destination) nearby -= destination - spawned_mob_refs.Add(WEAKREF(mob)) + spawned_mobs += mob + + return spawned_mobs + // Some generic mob segments. If you want to add generic ones for any map, add them here @@ -156,6 +181,20 @@ /mob/living/basic/alien/drone, ) + +/datum/modular_mob_segment/deer + max = 1 + mobs = list( + /mob/living/basic/deer, + ) + + +/datum/modular_mob_segment/revolutionary + mobs = list( + /mob/living/basic/revolutionary, + ) + + #undef SPAWN_ALWAYS #undef SPAWN_LIKELY #undef SPAWN_UNLIKELY diff --git a/code/modules/buildmode/submodes/advanced.dm b/code/modules/buildmode/submodes/advanced.dm index 2167a85a57ca3..2b5db1552dac7 100644 --- a/code/modules/buildmode/submodes/advanced.dm +++ b/code/modules/buildmode/submodes/advanced.dm @@ -62,7 +62,7 @@ var/turf/T = get_turf(object) qdel(object) if(T && c.prefs.read_preference(/datum/preference/toggle/admin/delete_sparks)) - playsound(T, 'sound/magic/Repulse.ogg', 100, 1) + playsound(T, 'sound/effects/magic/repulse.ogg', 100, 1) var/datum/effect_system/spark_spread/quantum/sparks = new sparks.set_up(10, 1, T) sparks.attach(T) diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm index a37c6becfa152..4aacc5a6dbacf 100644 --- a/code/modules/buildmode/submodes/basic.dm +++ b/code/modules/buildmode/submodes/basic.dm @@ -41,7 +41,7 @@ var/turf/T = get_turf(object) qdel(object) if(T && c.prefs.read_preference(/datum/preference/toggle/admin/delete_sparks)) - playsound(T, 'sound/magic/Repulse.ogg', 100, 1) + playsound(T, 'sound/effects/magic/repulse.ogg', 100, 1) var/datum/effect_system/spark_spread/quantum/sparks = new sparks.set_up(10, 1, T) sparks.attach(T) diff --git a/code/modules/buildmode/submodes/delete.dm b/code/modules/buildmode/submodes/delete.dm index 79daeaa2c9de3..cab05b45ae2ed 100644 --- a/code/modules/buildmode/submodes/delete.dm +++ b/code/modules/buildmode/submodes/delete.dm @@ -19,7 +19,7 @@ var/turf/T = get_turf(object) qdel(object) if(T && c.prefs.read_preference(/datum/preference/toggle/admin/delete_sparks)) - playsound(T, 'sound/magic/Repulse.ogg', 100, 1) + playsound(T, 'sound/effects/magic/repulse.ogg', 100, 1) var/datum/effect_system/spark_spread/quantum/sparks = new sparks.set_up(10, 1, T) sparks.attach(T) diff --git a/code/modules/buildmode/submodes/map_export.dm b/code/modules/buildmode/submodes/map_export.dm index e0cb6629e1902..19c0d57b57f73 100644 --- a/code/modules/buildmode/submodes/map_export.dm +++ b/code/modules/buildmode/submodes/map_export.dm @@ -19,7 +19,7 @@ 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"].") + to_chat(builder, span_notice("[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( diff --git a/code/modules/capture_the_flag/ctf_classes.dm b/code/modules/capture_the_flag/ctf_classes.dm index 9255b2c281f62..4a960ff1a9cac 100644 --- a/code/modules/capture_the_flag/ctf_classes.dm +++ b/code/modules/capture_the_flag/ctf_classes.dm @@ -55,7 +55,7 @@ var/obj/item/radio/headset = human_to_equip.ears headset.set_frequency(team_radio_freq) headset.freqlock = RADIO_FREQENCY_LOCKED - headset.independent = TRUE + headset.special_channels |= RADIO_SPECIAL_CENTCOM human_to_equip.dna.species.stunmod = 0 /datum/outfit/ctf/instagib diff --git a/code/modules/capture_the_flag/ctf_controller.dm b/code/modules/capture_the_flag/ctf_controller.dm index b5df4981c9f15..dbc152d6bf467 100644 --- a/code/modules/capture_the_flag/ctf_controller.dm +++ b/code/modules/capture_the_flag/ctf_controller.dm @@ -63,7 +63,7 @@ ///Unloading CTF removes the map entirely and allows for a new map to be loaded in its place. /datum/ctf_controller/proc/unload_ctf() if(game_id != CTF_GHOST_CTF_GAME_ID) - return //At present we only support unloading standard centcom ctf, if we intend to support ctf unloading elsewhere then this proc will need to be ammended. + return //At present we only support unloading standard centcom ctf, if we intend to support ctf unloading elsewhere then this proc will need to be amended. stop_ctf() new /obj/effect/landmark/ctf(get_turf(GLOB.ctf_spawner)) @@ -187,7 +187,7 @@ respawn_cooldown = CTF_DEFAULT_RESPAWN instagib_mode = !instagib_mode -///A datum that holds details about individual CTF teams, any team specific CTF functionality should be implimented here. +///A datum that holds details about individual CTF teams, any team specific CTF functionality should be implemented here. /datum/ctf_team ///Reference to the spawn point that this team uses. var/obj/machinery/ctf/spawner/spawner @@ -206,7 +206,7 @@ team_color = spawner.team team_span = spawner.team_span -///If the team is destroyed all players in that team need their componenet removed. +///If the team is destroyed all players in that team need their component removed. /datum/ctf_team/Destroy(force) for(var/player in team_members) var/datum/component/ctf_player/ctf_player = team_members[player] @@ -217,7 +217,7 @@ /datum/ctf_team/proc/score_points(points_scored) points += points_scored -///Resets this teams score and clears its member list. All members will be dusted and have their player componenet removed. +///Resets this teams score and clears its member list. All members will be dusted and have their player component removed. /datum/ctf_team/proc/reset_team() points = 0 for(var/player in team_members) @@ -231,7 +231,7 @@ var/datum/component/ctf_player/ctf_player = team_members[player] ctf_player.send_message(message) -///Creates a CTF game with the provided teeam ID then returns a reference to the new controller. If a controller already exists provides a reference to it. +///Creates a CTF game with the provided team ID then returns a reference to the new controller. If a controller already exists provides a reference to it. /proc/create_ctf_game(game_id) if(GLOB.ctf_games[game_id]) return GLOB.ctf_games[game_id] diff --git a/code/modules/capture_the_flag/ctf_equipment.dm b/code/modules/capture_the_flag/ctf_equipment.dm index 0211a066555d1..3261b1d82660d 100644 --- a/code/modules/capture_the_flag/ctf_equipment.dm +++ b/code/modules/capture_the_flag/ctf_equipment.dm @@ -67,7 +67,7 @@ slot_flags = null accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/ctf/shotgun empty_indicator = TRUE - fire_sound = 'sound/weapons/gun/shotgun/shot_alt.ogg' + fire_sound = 'sound/items/weapons/gun/shotgun/shot_alt.ogg' semi_auto = TRUE internal_magazine = FALSE tac_reloads = TRUE diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index 38a7318b5548e..2f292218e79f6 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -275,7 +275,7 @@ var/obj/item/ctf_flag/flag = item if(flag.team != team) to_chat(user, span_userdanger("Take \the [initial(flag.name)] to your team's controller!")) - user.playsound_local(get_turf(user), 'sound/machines/buzz-sigh.ogg', 100, vary = FALSE, use_reverb = FALSE) + user.playsound_local(get_turf(user), 'sound/machines/buzz/buzz-sigh.ogg', 100, vary = FALSE, use_reverb = FALSE) /obj/item/ctf_flag/dropped(mob/user) ..() diff --git a/code/modules/capture_the_flag/ctf_map_loading.dm b/code/modules/capture_the_flag/ctf_map_loading.dm index 6448533a3c74b..4c2f6b319e036 100644 --- a/code/modules/capture_the_flag/ctf_map_loading.dm +++ b/code/modules/capture_the_flag/ctf_map_loading.dm @@ -100,5 +100,5 @@ GLOBAL_DATUM(ctf_spawner, /obj/effect/landmark/ctf) /datum/map_template/ctf/turbine name = "Turbine" - description = "A CTF map that takes place in a familiar facility. Don't try to hold out mid- Theres no sentries in this version." + description = "A CTF map that takes place in a familiar facility. Don't try to hold out mid- There's no sentries in this version." mappath = "_maps/map_files/CTF/turbine.dmm" diff --git a/code/modules/capture_the_flag/ctf_player_component.dm b/code/modules/capture_the_flag/ctf_player_component.dm index c51b48b918c98..5a02a954aba6a 100644 --- a/code/modules/capture_the_flag/ctf_player_component.dm +++ b/code/modules/capture_the_flag/ctf_player_component.dm @@ -1,4 +1,4 @@ -///A component added to the mind of anyone who is playing in an ongoing CTF match. Any player specific CTF functionality should be implimented here. (someone should impliment score tracking here) +///A component added to the mind of anyone who is playing in an ongoing CTF match. Any player specific CTF functionality should be implemented here. (someone should implement score tracking here) /datum/component/ctf_player ///The team that this player is associated with. var/team diff --git a/code/modules/cards/cardhand.dm b/code/modules/cards/cardhand.dm index ac14e17fea61b..2c72a552767e7 100644 --- a/code/modules/cards/cardhand.dm +++ b/code/modules/cards/cardhand.dm @@ -14,7 +14,7 @@ /obj/item/toy/cards/cardhand/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] is slitting [user.p_their()] wrists with \the [src]! It looks like [user.p_they()] [user.p_have()] a crummy hand!")) - playsound(src, 'sound/items/cardshuffle.ogg', 50, TRUE) + playsound(src, 'sound/items/cards/cardshuffle.ogg', 50, TRUE) return BRUTELOSS /obj/item/toy/cards/cardhand/examine(mob/user) @@ -67,7 +67,7 @@ qdel(src) // cardhand is empty now so delete it /obj/item/toy/cards/cardhand/proc/check_menu(mob/living/user) - return isliving(user) && !user.incapacitated() + return isliving(user) && !user.incapacitated /obj/item/toy/cards/cardhand/attackby(obj/item/weapon, mob/living/user, params, flip_card = FALSE) var/obj/item/toy/singlecard/card diff --git a/code/modules/cards/cards.dm b/code/modules/cards/cards.dm index 5cd17a53515cc..e151af0226426 100644 --- a/code/modules/cards/cards.dm +++ b/code/modules/cards/cards.dm @@ -50,7 +50,7 @@ card.transform = Matrix card.update_appearance() - playsound(src, 'sound/items/cardshuffle.ogg', 50, TRUE) + playsound(src, 'sound/items/cards/cardshuffle.ogg', 50, TRUE) if(istype(src, /obj/item/toy/cards/cardhand)) qdel(src) @@ -125,7 +125,7 @@ cards -= card update_appearance() - playsound(src, 'sound/items/cardflip.ogg', 50, TRUE) + playsound(src, 'sound/items/cards/cardflip.ogg', 50, TRUE) return card /// Returns the cards in this deck. diff --git a/code/modules/cards/deck/deck.dm b/code/modules/cards/deck/deck.dm index ccce356024956..69aa85ed8f2fe 100644 --- a/code/modules/cards/deck/deck.dm +++ b/code/modules/cards/deck/deck.dm @@ -32,7 +32,7 @@ /obj/item/toy/cards/deck/Initialize(mapload) . = ..() AddElement(/datum/element/drag_pickup) - AddComponent(/datum/component/two_handed, attacksound='sound/items/cardflip.ogg') + AddComponent(/datum/component/two_handed, attacksound='sound/items/cards/cardflip.ogg') register_context() if(!is_standard_deck) @@ -50,7 +50,7 @@ /obj/item/toy/cards/deck/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] is slitting [user.p_their()] wrists with \the [src]! It looks like their luck ran out!")) - playsound(src, 'sound/items/cardshuffle.ogg', 50, TRUE) + playsound(src, 'sound/items/cards/cardshuffle.ogg', 50, TRUE) return BRUTELOSS /obj/item/toy/cards/deck/examine(mob/user) @@ -103,7 +103,7 @@ return COOLDOWN_START(src, shuffle_cooldown, shuffle_time) shuffle_inplace(fetch_card_atoms()) - playsound(src, 'sound/items/cardshuffle.ogg', 50, TRUE) + playsound(src, 'sound/items/cards/cardshuffle.ogg', 50, TRUE) user.balloon_alert_to_viewers("shuffles the deck") addtimer(CALLBACK(src, PROC_REF(CardgameEvent), user), 60 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) @@ -209,7 +209,7 @@ cardgame_desc = "suspicious card game" icon_state = "deck_syndicate_full" deckstyle = "syndicate" - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' force = 5 throwforce = 10 attack_verb_continuous = list("attacks", "slices", "dices", "slashes", "cuts") diff --git a/code/modules/cards/deck/tarot.dm b/code/modules/cards/deck/tarot.dm index cf21fe789352e..a276716844b0a 100644 --- a/code/modules/cards/deck/tarot.dm +++ b/code/modules/cards/deck/tarot.dm @@ -40,7 +40,7 @@ . = ..() AddComponent( \ /datum/component/two_handed, \ - attacksound = 'sound/items/cardflip.ogg', \ + attacksound = 'sound/items/cards/cardflip.ogg', \ wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ ) diff --git a/code/modules/cards/singlecard.dm b/code/modules/cards/singlecard.dm index 5f2c6e37f387a..1999c19d7ff88 100644 --- a/code/modules/cards/singlecard.dm +++ b/code/modules/cards/singlecard.dm @@ -103,7 +103,7 @@ /obj/item/toy/singlecard/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] is slitting [user.p_their()] wrists with \the [src]! It looks like [user.p_they()] [user.p_have()] an unlucky card!")) - playsound(src, 'sound/weapons/bladeslice.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/bladeslice.ogg', 50, TRUE) return BRUTELOSS /** diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm index 772538f3ca25e..96293208acdb0 100644 --- a/code/modules/cargo/bounties/mining.dm +++ b/code/modules/cargo/bounties/mining.dm @@ -46,7 +46,6 @@ reward = CARGO_CRATE_VALUE * 15 required_count = 3 wanted_types = list(/obj/item/clothing/accessory/talisman = TRUE) - /datum/bounty/item/mining/watcher_wreath name = "Watcher Wreaths" description = "Station 14's Research Director thinks they're onto a break-through on the cultural icons of some pagan beliefs. Ship them a few watcher wreaths for analysis." @@ -61,7 +60,7 @@ reward = CARGO_CRATE_VALUE * 30 required_count = 1 wanted_types = list(/obj/item/clothing/neck/wreath/icewing = TRUE) - + //SKYRAT EDIT REMOVAL /* /datum/bounty/item/mining/bone_dagger diff --git a/code/modules/cargo/bounties/science.dm b/code/modules/cargo/bounties/science.dm index 0206ea41967d6..be0edbe1eb64b 100644 --- a/code/modules/cargo/bounties/science.dm +++ b/code/modules/cargo/bounties/science.dm @@ -55,7 +55,7 @@ //******Modular Computer Bounties****** /datum/bounty/item/science/ntnet name = "Modular Tablets" - description = "Turns out that NTNet wasn't actually a fad afterall, who knew. Send some fully functional PDAs to help get us up to speed on the latest technology." + description = "Turns out that NTNet wasn't actually a fad after all, who knew. Send some fully functional PDAs to help get us up to speed on the latest technology." reward = CARGO_CRATE_VALUE * 6 required_count = 4 wanted_types = list(/obj/item/modular_computer/pda = TRUE) diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index dd779c796ce8f..179ca701adc0c 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -191,7 +191,7 @@ ADMIN_VERB(centcom_podlauncher, R_ADMIN, "Config/Launch Supplypod", "Configure a data["soundVolume"] = temp_pod.soundVolume //Admin sound to play when the pod leaves return data -/datum/centcom_podlauncher/ui_act(action, params) +/datum/centcom_podlauncher/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -343,10 +343,10 @@ ADMIN_VERB(centcom_podlauncher, R_ADMIN, "Config/Launch Supplypod", "Configure a temp_pod.adminNamed = FALSE temp_pod.setStyle(temp_pod.style) //This resets the name of the pod based on its current style (see supplypod/setStyle() proc) return - var/nameInput= tgui_input_text(usr, "Enter a custom name", "Custom name", temp_pod.style::name, MAX_NAME_LEN) //Gather input for name and desc + var/nameInput= tgui_input_text(usr, "Enter a custom name", "Custom name", temp_pod.style::name, max_length = MAX_NAME_LEN) if (isnull(nameInput)) return - var/descInput = tgui_input_text(usr, "Enter a custom desc", "Custom description", temp_pod.style::desc) + var/descInput = tgui_input_text(usr, "Enter a custom desc", "Custom description", temp_pod.style::desc, max_length = MAX_DESC_LEN) if (isnull(descInput)) return temp_pod.name = nameInput diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index 4942ea2c06a93..4070301bfbe39 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -1,3 +1,6 @@ +#define EXPRESS_EMAG_DISCOUNT 0.72 +#define BEACON_PRINT_COOLDOWN 10 SECONDS + /obj/machinery/computer/cargo/express name = "express supply console" desc = "This console allows the user to purchase a package \ @@ -11,18 +14,28 @@ interface_type = "CargoExpress" var/message - var/printed_beacons = 0 //number of beacons printed. Used to determine beacon names. var/list/meme_pack_data - var/obj/item/supplypod_beacon/beacon //the linked supplypod beacon - var/area/landingzone = /area/station/cargo/storage //where we droppin boys - var/podType = /obj/structure/closet/supplypod - var/cooldown = 0 //cooldown to prevent printing supplypod beacon spam - var/locked = TRUE //is the console locked? unlock with ID - var/usingBeacon = FALSE //is the console in beacon mode? exists to let beacon know when a pod may come in + /// The linked supplypod beacon + var/obj/item/supplypod_beacon/beacon + /// Where we droppin boys + var/area/landingzone = /area/station/cargo/storage + var/pod_type = /obj/structure/closet/supplypod + /// If this console is locked and needs to be unlocked with an ID + var/locked = TRUE + /// Is the console in beacon mode? Exists to let beacon know when a pod may come in + var/using_beacon = FALSE + /// Number of beacons printed. Used to determine beacon names. + var/static/printed_beacons = 0 + /// Cooldown to prevent beacon spam + COOLDOWN_DECLARE(beacon_print_cooldown) /obj/machinery/computer/cargo/express/Initialize(mapload) . = ..() packin_up() + landingzone = GLOB.areas_by_type[landingzone] + if (isnull(landingzone)) + WARNING("[src] couldnt find a Quartermaster/Storage (aka cargobay) area on the station, and as such it has set the supplypod landingzone to the area it resides in.") + landingzone = get_area(src) /obj/machinery/computer/cargo/express/on_construction(mob/user) . = ..() @@ -33,24 +46,33 @@ beacon.unlink_console() return ..() -/obj/machinery/computer/cargo/express/attackby(obj/item/W, mob/living/user, params) - if(W.GetID() && allowed(user)) +/obj/machinery/computer/cargo/express/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if (tool.GetID() && allowed(user)) locked = !locked to_chat(user, span_notice("You [locked ? "lock" : "unlock"] the interface.")) - return - else if(istype(W, /obj/item/disk/cargo/bluespace_pod)) - podType = /obj/structure/closet/supplypod/bluespacepod//doesnt effect circuit board, making reversal possible + return ITEM_INTERACT_SUCCESS + + if (istype(tool, /obj/item/disk/cargo/bluespace_pod)) + if (pod_type == /obj/structure/closet/supplypod/bluespacepod) + balloon_alert(user, "already upgraded!") + return ITEM_INTERACT_FAILURE + if(!user.temporarilyRemoveItemFromInventory(tool)) + return ITEM_INTERACT_FAILURE + pod_type = /obj/structure/closet/supplypod/bluespacepod // doesnt affect our circuit board, making reversal possible to_chat(user, span_notice("You insert the disk into [src], allowing for advanced supply delivery vehicles.")) - qdel(W) - return TRUE - else if(istype(W, /obj/item/supplypod_beacon)) - var/obj/item/supplypod_beacon/sb = W - if (sb.express_console != src) - sb.link_console(src, user) - return TRUE - else - to_chat(user, span_alert("[src] is already linked to [sb].")) - ..() + tool.forceMove(src) + return ITEM_INTERACT_SUCCESS + + if(istype(tool, /obj/item/supplypod_beacon)) + var/obj/item/supplypod_beacon/beacon = tool + if (beacon.express_console != src) + beacon.link_console(src, user) + return ITEM_INTERACT_SUCCESS + + to_chat(user, span_alert("[src] is already linked to [beacon].")) + return ITEM_INTERACT_FAILURE + + return NONE /obj/machinery/computer/cargo/express/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) @@ -68,8 +90,11 @@ packin_up() return TRUE -/obj/machinery/computer/cargo/express/proc/packin_up() // oh shit, I'm sorry +/obj/machinery/computer/cargo/express/proc/packin_up(forced = FALSE) // oh shit, I'm sorry meme_pack_data = list() // sorry for what? + if (!forced && !SSshuttle.initialized) // Subsystem is still sleeping, add ourselves to its buffer and abort + SSshuttle.express_consoles += src + return for(var/pack in SSshuttle.supply_packs) // our quartermaster taught us not to be ashamed of our supply packs var/datum/supply_pack/P = SSshuttle.supply_packs[pack] // specially since they're such a good price and all if(!meme_pack_data[P.group]) // yeah, I see that, your quartermaster gave you good advice @@ -83,7 +108,7 @@ continue // i'd be right happy to meme_pack_data[P.group]["packs"] += list(list( "name" = P.name, - "cost" = P.get_cost(), + "cost" = P.get_cost() * get_discount(), "id" = pack, "desc" = P.desc || P.name // If there is a description, use it. Otherwise use the pack's name. )) @@ -91,26 +116,26 @@ /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(cargo_account) - if(D) - data["points"] = D.account_balance + var/datum/bank_account/account = SSeconomy.get_dep_account(cargo_account) + if(account) + data["points"] = account.account_balance data["locked"] = locked//swipe an ID to unlock data["siliconUser"] = HAS_SILICON_ACCESS(user) data["beaconzone"] = beacon ? get_area(beacon) : ""//where is the beacon located? outputs in the tgui - data["usingBeacon"] = usingBeacon //is the mode set to deliver to the beacon or the cargobay? - data["canBeacon"] = !usingBeacon || canBeacon //is the mode set to beacon delivery, and is the beacon in a valid location? - data["canBuyBeacon"] = cooldown <= 0 && D.account_balance >= BEACON_COST - data["beaconError"] = usingBeacon && !canBeacon ? "(BEACON ERROR)" : ""//changes button text to include an error alert if necessary + data["using_beacon"] = using_beacon //is the mode set to deliver to the beacon or the cargobay? + data["canBeacon"] = !using_beacon || canBeacon //is the mode set to beacon delivery, and is the beacon in a valid location? + data["canBuyBeacon"] = COOLDOWN_FINISHED(src, beacon_print_cooldown) && account.account_balance >= BEACON_COST + data["beaconError"] = using_beacon && !canBeacon ? "(BEACON ERROR)" : ""//changes button text to include an error alert if necessary data["hasBeacon"] = beacon != null//is there a linked beacon? data["beaconName"] = beacon ? beacon.name : "No Beacon Found" - data["printMsg"] = cooldown > 0 ? "Print Beacon for [BEACON_COST] credits ([cooldown])" : "Print Beacon for [BEACON_COST] credits"//buttontext for printing beacons + data["printMsg"] = COOLDOWN_FINISHED(src, beacon_print_cooldown) ? "Print Beacon for [BEACON_COST] credits" : "Print Beacon for [BEACON_COST] credits ([COOLDOWN_TIMELEFT(src, beacon_print_cooldown)])" //buttontext for printing beacons data["supplies"] = list() message = "Sales are near-instantaneous - please choose carefully." if(SSshuttle.supply_blocked) message = blockade_warning - if(usingBeacon && !beacon) + if(using_beacon && !beacon) message = "BEACON ERROR: BEACON MISSING"//beacon was destroyed - else if (usingBeacon && !canBeacon) + else if (using_beacon && !canBeacon) message = "BEACON ERROR: MUST BE EXPOSED"//beacon's loc/user's loc must be a turf if(obj_flags & EMAGGED) message = "(&!#@ERROR: R0UTING_#PRO7O&OL MALF(*CT#ON. $UG%ESTE@ ACT#0N: !^/PULS3-%E)ET CIR*)ITB%ARD." @@ -119,34 +144,37 @@ packin_up() stack_trace("There was no pack data for [src]") data["supplies"] = meme_pack_data - if (cooldown > 0)//cooldown used for printing beacons - cooldown-- return data +/obj/machinery/computer/cargo/express/proc/get_discount() + return (obj_flags & EMAGGED) ? EXPRESS_EMAG_DISCOUNT : 1 + /obj/machinery/computer/cargo/express/ui_act(action, params, datum/tgui/ui) . = ..() if(.) return + var/mob/user = ui.user switch(action) if("LZCargo") - usingBeacon = FALSE + using_beacon = FALSE if (beacon) beacon.update_status(SP_UNREADY) //ready light on beacon will turn off if("LZBeacon") - usingBeacon = TRUE + using_beacon = TRUE 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(cargo_account) - if(D) - if(D.adjust_money(-BEACON_COST)) - cooldown = 10//a ~ten second cooldown for printing beacons to prevent spam - var/obj/item/supplypod_beacon/C = new /obj/item/supplypod_beacon(drop_location()) - C.link_console(src, usr)//rather than in beacon's Initialize(), we can assign the computer to the beacon by reusing this proc) - printed_beacons++//printed_beacons starts at 0, so the first one out will be called beacon # 1 - beacon.name = "Supply Pod Beacon #[printed_beacons]" + var/datum/bank_account/account = SSeconomy.get_dep_account(cargo_account) + if(isnull(account) || !account.adjust_money(-BEACON_COST)) + return + // a ~ten second cooldown for printing beacons to prevent spam + COOLDOWN_START(src, beacon_print_cooldown, BEACON_PRINT_COOLDOWN) + var/obj/item/supplypod_beacon/new_beacon = new /obj/item/supplypod_beacon(drop_location()) + new_beacon.link_console(src, user) //rather than in beacon's Initialize(), we can assign the computer to the beacon by reusing this proc) + printed_beacons++ //printed_beacons starts at 0, so the first one out will be called beacon # 1 + beacon.name = "Supply Pod Beacon #[printed_beacons]" if("add")//Generate Supply Order first if(TIMER_COOLDOWN_RUNNING(src, COOLDOWN_EXPRESSPOD_CONSOLE)) @@ -159,69 +187,71 @@ CRASH("Unknown supply pack id given by express order console ui. ID: [params["id"]]") var/name = "*None Provided*" var/rank = "*None Provided*" - var/ckey = usr.ckey - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr + var/ckey = user.ckey + if(ishuman(user)) + var/mob/living/carbon/human/H = user name = H.get_authentification_name() rank = H.get_assignment(hand_first = TRUE) - else if(HAS_SILICON_ACCESS(usr)) - name = usr.real_name + else if(HAS_SILICON_ACCESS(user)) + name = user.real_name rank = "Silicon" var/reason = "" + var/datum/supply_order/order = new(pack, name, rank, ckey, reason) + var/datum/bank_account/account = SSeconomy.get_dep_account(cargo_account) + if (isnull(account) && order.pack.get_cost() > 0) + return + + if (obj_flags & EMAGGED) + landingzone = GLOB.areas_by_type[pick(GLOB.the_station_areas)] + 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(cargo_account) - if(D) - points_to_check = D.account_balance - if(!(obj_flags & EMAGGED)) - if(SO.pack.get_cost() <= points_to_check) - var/LZ - if (istype(beacon) && usingBeacon)//prioritize beacons over landing in cargobay - LZ = get_turf(beacon) - beacon.update_status(SP_LAUNCH) - else if (!usingBeacon)//find a suitable supplypod landing zone in cargobay - landingzone = GLOB.areas_by_type[/area/station/cargo/storage] - if (!landingzone) - WARNING("[src] couldnt find a Quartermaster/Storage (aka cargobay) area on the station, and as such it has set the supplypod landingzone to the area it resides in.") - landingzone = get_area(src) - for(var/turf/open/floor/T in landingzone.get_turfs_from_all_zlevels())//uses default landing zone - if(T.is_blocked_turf()) - continue - LAZYADD(empty_turfs, T) - CHECK_TICK - if(empty_turfs?.len) - LZ = pick(empty_turfs) - if (SO.pack.get_cost() <= points_to_check && LZ)//we need to call the cost check again because of the CHECK_TICK call - TIMER_COOLDOWN_START(src, COOLDOWN_EXPRESSPOD_CONSOLE, 5 SECONDS) - D.adjust_money(-SO.pack.get_cost()) - if(pack.special_pod) - new /obj/effect/pod_landingzone(LZ, pack.special_pod, SO) - else - new /obj/effect/pod_landingzone(LZ, podType, SO) - . = TRUE - update_appearance() + if (!istype(beacon) || !using_beacon || (obj_flags & EMAGGED)) + empty_turfs = list() + for(var/turf/open/floor/open_turf in landingzone.get_turfs_from_all_zlevels()) + if(!open_turf.is_blocked_turf()) + empty_turfs += open_turf + + if (!length(empty_turfs)) + return + + if (obj_flags & EMAGGED) + if (account.account_balance < order.pack.get_cost() * -get_discount()) + return + + TIMER_COOLDOWN_START(src, COOLDOWN_EXPRESSPOD_CONSOLE, 10 SECONDS) + order.generateRequisition(get_turf(src)) + for(var/i in 1 to MAX_EMAG_ROCKETS) + if (!account.adjust_money(order.pack.get_cost() * -get_discount())) + break + + var/turf/landing_turf = pick(empty_turfs) + empty_turfs -= landing_turf + if(pack.special_pod) + new /obj/effect/pod_landingzone(landing_turf, pack.special_pod, order) + else + new /obj/effect/pod_landingzone(landing_turf, pod_type, order) + + update_appearance() + return TRUE + + var/turf/landing_turf + if (istype(beacon) && using_beacon) + landing_turf = get_turf(beacon) + beacon.update_status(SP_LAUNCH) else - if(SO.pack.get_cost() * (0.72*MAX_EMAG_ROCKETS) <= points_to_check) // bulk discount :^) - landingzone = GLOB.areas_by_type[pick(GLOB.the_station_areas)] //override default landing zone - for(var/turf/open/floor/T in landingzone.get_turfs_from_all_zlevels()) - if(T.is_blocked_turf()) - continue - LAZYADD(empty_turfs, T) - CHECK_TICK - if(empty_turfs?.len) - TIMER_COOLDOWN_START(src, COOLDOWN_EXPRESSPOD_CONSOLE, 10 SECONDS) - D.adjust_money(-(SO.pack.get_cost() * (0.72*MAX_EMAG_ROCKETS))) - - SO.generateRequisition(get_turf(src)) - for(var/i in 1 to MAX_EMAG_ROCKETS) - var/LZ = pick(empty_turfs) - LAZYREMOVE(empty_turfs, LZ) - if(pack.special_pod) - new /obj/effect/pod_landingzone(LZ, pack.special_pod, SO) - else - new /obj/effect/pod_landingzone(LZ, podType, SO) - . = TRUE - update_appearance() - CHECK_TICK + landing_turf = pick(empty_turfs) + + if (!account.adjust_money(-order.pack.get_cost() * get_discount())) + return + + TIMER_COOLDOWN_START(src, COOLDOWN_EXPRESSPOD_CONSOLE, 5 SECONDS) + if(pack.special_pod) + new /obj/effect/pod_landingzone(landing_turf, pack.special_pod, order) + else + new /obj/effect/pod_landingzone(landing_turf, pod_type, order) + + update_appearance() + return TRUE +#undef EXPRESS_EMAG_DISCOUNT +#undef BEACON_PRINT_COOLDOWN diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm index aa42b5cacde44..f7ce106d58048 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -237,6 +237,12 @@ cost = PAYCHECK_CREW contains = list(/obj/item/storage/box/fishing_lines) +/datum/supply_pack/goody/fishing_lure_set + name = "Fishing Lures Set" + desc = "A set of bite-resistant fishing lures to fish all (most) sort of fish. Beat randomness to a curb today!" + cost = PAYCHECK_CREW * 8 + contains = list(/obj/item/storage/box/fishing_lures) + /datum/supply_pack/goody/fishing_hook_rescue name = "Rescue Fishing Hook Single-Pack" desc = "For when your fellow miner has inevitably fallen into a chasm, and it's up to you to save them." @@ -252,7 +258,7 @@ /datum/supply_pack/goody/fish_feed name = "Can of Fish Food Single-Pack" desc = "For keeping your little friends fed and alive." - cost = PAYCHECK_CREW * 1 + cost = PAYCHECK_CREW contains = list(/obj/item/fish_feed) /datum/supply_pack/goody/naturalbait diff --git a/code/modules/cargo/markets/_market.dm b/code/modules/cargo/markets/_market.dm index 4696d3007a7ae..e2a21eb12ebad 100644 --- a/code/modules/cargo/markets/_market.dm +++ b/code/modules/cargo/markets/_market.dm @@ -68,7 +68,7 @@ uplink.current_user.adjust_money(-price, "Other: Third Party Transaction") if(ismob(user)) var/mob/m_user = user - m_user.playsound_local(get_turf(m_user), 'sound/machines/twobeep_high.ogg', 50, TRUE) + m_user.playsound_local(get_turf(m_user), 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) return TRUE return FALSE diff --git a/code/modules/cargo/markets/market_telepad.dm b/code/modules/cargo/markets/market_telepad.dm index 53a3d73ee486a..f0c8e058fc0fb 100644 --- a/code/modules/cargo/markets/market_telepad.dm +++ b/code/modules/cargo/markets/market_telepad.dm @@ -176,7 +176,7 @@ if(state_open) if(locate(/mob/living) in tool.get_all_contents()) say("Living being detected, cannot sell!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, FALSE) return ITEM_INTERACT_BLOCKING if(!user.transferItemToLoc(tool, src)) balloon_alert(user, "stuck to your hands!") @@ -193,7 +193,7 @@ if(creds_value < restock_cost) say("Insufficient credits!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, FALSE) return ITEM_INTERACT_BLOCKING if(istype(tool, /obj/item/holochip)) @@ -271,7 +271,7 @@ return if(locate(/mob/living) in occupant.get_all_contents()) say("Living being detected, cannot sell!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, FALSE) return var/datum/bank_account/account var/datum/market/our_market = SSmarket.markets[/datum/market/blackmarket] @@ -280,17 +280,17 @@ return if(length(our_market.available_items[/datum/market_item/local_good::category]) >= LTSRBT_MAX_MARKET_ITEMS) say("Local market saturated, buy some goods first!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, FALSE) return var/mob/living/living_user = user var/obj/item/card/id/card = living_user.get_idcard(TRUE) if(!(card?.registered_account)) say("No bank account to charge market fees detected!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, FALSE) return if(!card.registered_account.adjust_money(-PLACE_ON_MARKET_COST, "Market: Placement Fee")) say("Insufficient credits!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, FALSE) return account = card.registered_account diff --git a/code/modules/cargo/markets/market_uplink.dm b/code/modules/cargo/markets/market_uplink.dm index 147e37e3f9d87..17cad32042668 100644 --- a/code/modules/cargo/markets/market_uplink.dm +++ b/code/modules/cargo/markets/market_uplink.dm @@ -98,7 +98,7 @@ )) return data -/obj/item/market_uplink/ui_act(action, params) +/obj/item/market_uplink/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/cargo/materials_market.dm b/code/modules/cargo/materials_market.dm index 797ebf5411d6f..4037a51c6916b 100644 --- a/code/modules/cargo/materials_market.dm +++ b/code/modules/cargo/materials_market.dm @@ -68,7 +68,7 @@ if(!amount) say("Not enough material. Aborting.") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, FALSE) return TRUE qdel(exportable) @@ -77,7 +77,7 @@ new_block.export_mat = material_to_export new_block.quantity = amount to_chat(user, span_notice("You have created a stock block worth [new_block.export_value] cr! Sell it before it becomes liquid!")) - playsound(src, 'sound/machines/synth_yes.ogg', 50, FALSE) + playsound(src, 'sound/machines/synth/synth_yes.ogg', 50, FALSE) return TRUE return ..() @@ -274,14 +274,14 @@ var/prior_sheets = current_order.pack.contains[sheet_to_buy] if(prior_sheets + quantity > SSstock_market.materials_quantity[material_bought] ) say("There aren't enough sheets on the market! Please wait for more sheets to be traded before adding more.") - playsound(usr, 'sound/machines/synth_no.ogg', 35, FALSE) + playsound(usr, 'sound/machines/synth/synth_no.ogg', 35, FALSE) return // Check if the order exceeded the purchase limit var/prior_stacks = ROUND_UP(prior_sheets / MAX_STACK_SIZE) if(prior_stacks >= MAX_STACK_LIMIT) say("There are already 10 stacks of sheets on order! Please wait for them to arrive before ordering more.") - playsound(usr, 'sound/machines/synth_no.ogg', 35, FALSE) + playsound(usr, 'sound/machines/synth/synth_no.ogg', 35, FALSE) return // Prevents you from ordering more than the available budget diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index c675352d024b2..10eee2a805b17 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -10,10 +10,15 @@ #define MANIFEST_ERROR_ITEM (1 << 2) /obj/item/paper/fluff/jobs/cargo/manifest + can_become_message_in_bottle = FALSE //A lot of these are spawned each round, they'd only dilute the pool and make it boring. var/order_cost = 0 var/order_id = 0 var/errors = 0 +/obj/item/paper/requisition + can_become_message_in_bottle = FALSE //A lot of these are spawned each round, they'd only dilute the pool and make it boring. + + /obj/item/paper/fluff/jobs/cargo/manifest/Initialize(mapload, id, cost, manifest_can_fail = TRUE) . = ..() order_id = id @@ -99,7 +104,7 @@ return round(cost) /datum/supply_order/proc/generateRequisition(turf/T) - var/obj/item/paper/requisition_paper = new(T) + var/obj/item/paper/requisition/requisition_paper = new(T) requisition_paper.name = "requisition form - #[id] ([pack.name])" var/requisition_text = "

      [station_name()] Supply Requisition

      " @@ -136,7 +141,7 @@ manifest_text += "Item: [packname]
      " manifest_text += "Contents:
      " manifest_text += "
        " - var/container_contents = list() // Associative list with the format (item_name = nº of occurences, ...) + var/container_contents = list() // Associative list with the format (item_name = nº of occurrences, ...) for(var/atom/movable/AM in container.contents - manifest_paper) container_contents[AM.name]++ if((manifest_paper.errors & MANIFEST_ERROR_CONTENTS) && container_contents) diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm index 6e5643e383efb..3fee1e2dcf4b6 100644 --- a/code/modules/cargo/orderconsole.dm +++ b/code/modules/cargo/orderconsole.dm @@ -235,18 +235,18 @@ var/reason = "" if(requestonly && !self_paid) working_list = SSshuttle.request_list - reason = tgui_input_text(user, "Reason", name) + reason = tgui_input_text(user, "Reason", name, max_length = MAX_MESSAGE_LEN) if(isnull(reason)) return if(pack.goody && !self_paid) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) say("ERROR: Small crates may only be purchased by private accounts.") return var/similar_count = SSshuttle.supply.get_order_count(pack) if(similar_count == OVER_ORDER_LIMIT) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) say("ERROR: No more then [CARGO_MAX_ORDER] of any pack may be ordered at once") return @@ -330,7 +330,7 @@ else //create the paper from the SSshuttle.shopping_list if(length(SSshuttle.shopping_list)) - var/obj/item/paper/requisition_paper = new(get_turf(src)) + var/obj/item/paper/requisition/requisition_paper = new(get_turf(src)) requisition_paper.name = "requisition form - [station_time_timestamp()]" var/requisition_text = "

        [station_name()] Supply Requisition

        " requisition_text += "
        " @@ -385,7 +385,7 @@ return add_item(ui.user, supply_pack_id) if("remove") var/order_name = params["order_name"] - //try removing atleast one item with the specified name. An order may not be removed if it was from the department + //try removing at least one item with the specified name. An order may not be removed if it was from the department for(var/datum/supply_order/order in SSshuttle.shopping_list) if(order.pack.name != order_name) continue diff --git a/code/modules/cargo/packs/engineering.dm b/code/modules/cargo/packs/engineering.dm index 907ae1598c653..dd376ec201747 100644 --- a/code/modules/cargo/packs/engineering.dm +++ b/code/modules/cargo/packs/engineering.dm @@ -76,7 +76,7 @@ cost = CARGO_CRATE_VALUE * 4 contains = list(/obj/item/inducer/orderable = 2) crate_name = "inducer crate" - crate_type = /obj/structure/closet/crate/engineering/electrical + crate_type = /obj/structure/closet/crate/nakamura /datum/supply_pack/engineering/pacman name = "P.A.C.M.A.N Generator Crate" @@ -86,7 +86,7 @@ access_view = ACCESS_ENGINEERING contains = list(/obj/machinery/power/port_gen/pacman) crate_name = "\improper PACMAN generator crate" - crate_type = /obj/structure/closet/crate/engineering/electrical + crate_type = /obj/structure/closet/crate/nakamura /datum/supply_pack/engineering/power name = "Power Cell Crate" @@ -199,7 +199,6 @@ desc = "Protect the very existence of this station with these Anti-Meteor defenses. \ Contains three Shield Generator Satellites." cost = CARGO_CRATE_VALUE * 6 - special = TRUE access_view = ACCESS_COMMAND contains = list(/obj/machinery/satellite/meteor_shield = 3) crate_name= "shield sat crate" @@ -209,7 +208,6 @@ name = "Shield System Control Board" desc = "A control system for the Shield Generator Satellite system." cost = CARGO_CRATE_VALUE * 10 - special = TRUE access_view = ACCESS_COMMAND contains = list(/obj/item/circuitboard/computer/sat_control) crate_name= "shield control board crate" diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index 8a282770c4e7a..0032816c08203 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" + crate_type = /obj/structure/closet/crate/freezer/donk discountable = SUPPLY_PACK_STD_DISCOUNTABLE /datum/supply_pack/imports/foamforce/bonus @@ -30,6 +31,7 @@ /obj/item/ammo_box/magazine/toy/pistol = 2, ) crate_name = "foam force crate" + crate_type = /obj/structure/closet/crate/freezer/donk /datum/supply_pack/imports/meatmeatmeatmeat // MEAT MEAT MEAT MEAT name = "MEAT MEAT MEAT MEAT MEAT" @@ -141,6 +143,7 @@ /obj/item/gun/ballistic/automatic/wt550 = 2, /obj/item/ammo_box/magazine/wt550m9 = 2, ) + crate_type = /obj/structure/closet/crate/secure/gorlex_weapons/jammed /datum/supply_pack/imports/wt550ammo name = "Smuggled WT-550 Ammo Crate" @@ -153,7 +156,7 @@ /obj/item/ammo_box/magazine/wt550m9/wtic = 2, ) crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/internals + crate_type = /obj/structure/closet/crate/secure/gorlex_weapons/jammed /datum/supply_pack/imports/shocktrooper name = "Shocktrooper Crate" @@ -169,6 +172,7 @@ /obj/item/clothing/suit/armor/vest, /obj/item/clothing/head/helmet, ) + crate_type = /obj/structure/closet/crate/secure/gorlex_weapons/jammed /datum/supply_pack/imports/specialops name = "Special Ops Crate" diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index d44e8c42d3783..a112ada0e554f 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -29,7 +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 + crate_type = /obj/structure/closet/crate/deforest /datum/supply_pack/medical/coroner_crate name = "Autopsy Kit" @@ -138,6 +138,7 @@ /obj/item/emergency_bed, ) crate_name = "surgical supplies crate" + crate_type = /obj/structure/closet/crate/deforest /datum/supply_pack/medical/salglucanister name = "Heavy-Duty Saline Canister" diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm index f405fc7de3a8a..a47c92fabc449 100644 --- a/code/modules/cargo/packs/organic.dm +++ b/code/modules/cargo/packs/organic.dm @@ -101,8 +101,8 @@ /datum/supply_pack/organic/randomized/chef/fruits name = "Fruit Crate" - desc = "Rich of vitamins. Contains a lime, orange, watermelon, apple, \ - berries and a lime." + desc = "Rich in vitamins. Contains a lime, orange, watermelon, apple, \ + berries and a lemon." cost = CARGO_CRATE_VALUE * 3 contains = list(/obj/item/food/grown/citrus/lime, /obj/item/food/grown/citrus/orange, diff --git a/code/modules/cargo/packs/science.dm b/code/modules/cargo/packs/science.dm index dfa2a66359336..6b4f38b95a03a 100644 --- a/code/modules/cargo/packs/science.dm +++ b/code/modules/cargo/packs/science.dm @@ -189,4 +189,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/robo + crate_type = /obj/structure/closet/crate/nakamura diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index 8a0765602b342..1823ef5174f94 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -36,7 +36,7 @@ /datum/supply_pack/security/forensics name = "Forensics Crate" desc = "Stay hot on the criminal's heels with Nanotrasen's Detective Essentials™. \ - Contains a forensics scanner, six evidence bags, camera, tape recorder, stick of chalk, \ + Contains a forensics scanner, six evidence bags, camera, special board for evidences, tape recorder, stick of chalk, \ and of course, a fedora." cost = CARGO_CRATE_VALUE * 2.5 access_view = ACCESS_MORGUE @@ -46,6 +46,7 @@ /obj/item/taperecorder, /obj/item/toy/crayon/white, /obj/item/clothing/head/fedora/det_hat, + /obj/item/wallframe/detectiveboard ) crate_name = "forensics crate" diff --git a/code/modules/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm index 20323b52960da..26af45f960a5e 100644 --- a/code/modules/cargo/packs/service.dm +++ b/code/modules/cargo/packs/service.dm @@ -245,7 +245,7 @@ /obj/item/food/ready_donk/donkhiladas, ) crate_name = "\improper Ready-Donk crate" - crate_type = /obj/structure/closet/crate/freezer/food + crate_type = /obj/structure/closet/crate/freezer/donk discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/service/randomized/ready_donk/fill(obj/structure/closet/crate/C) @@ -269,6 +269,7 @@ /obj/item/reagent_containers/cup/bottle/syrup_bottle/caramel, //one extra syrup as a treat ) crate_name = "coffee equipment crate" + crate_type = /obj/structure/closet/crate/robust discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE /datum/supply_pack/service/coffeemaker @@ -309,7 +310,7 @@ desc = "A fairly outdated copy of 'Whittle Me This: Fletching for the Modern Spacer', along with some useful materials. \ For those looking to get into bow-making, or give their LARPing a little more edge, you can't go wrong. Also has \ instructions for making violins." - cost = CARGO_CRATE_VALUE * 1.5 + cost = CARGO_CRATE_VALUE * 5 contains = list( /obj/item/book/granter/crafting_recipe/fletching = 1, /obj/item/stack/sheet/mineral/wood = 10, diff --git a/code/modules/cargo/packs/vending_restock.dm b/code/modules/cargo/packs/vending_restock.dm index 10ae874d5d6c9..e5ae6f25c9371 100644 --- a/code/modules/cargo/packs/vending_restock.dm +++ b/code/modules/cargo/packs/vending_restock.dm @@ -17,7 +17,14 @@ cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/item/vending_refill/cigarette) crate_name = "cigarette supply crate" - crate_type = /obj/structure/closet/crate + crate_type = /obj/structure/closet/crate/robust + +/datum/supply_pack/vending/science/cytopro + name = "Cytology Vendor Supply Crate" + desc = "For all your vat-growing needs! Contains a CytoPro machine refill." + cost = CARGO_CRATE_VALUE * 3 + contains = list(/obj/item/vending_refill/cytopro) + crate_name = "cytopro supply crate" /datum/supply_pack/vending/dinnerware name = "Dinnerware Supply Crate" @@ -106,6 +113,7 @@ cost = CARGO_CRATE_VALUE * 2 contains = list(/obj/item/vending_refill/snack) crate_name = "snacks supply crate" + crate_type = /obj/structure/closet/crate/robust /datum/supply_pack/vending/cola name = "Softdrinks Supply Crate" diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index f5915eaed37d3..f47cae697a48b 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -40,7 +40,7 @@ var/reversing = FALSE //If true, the pod will not send any items. Instead, after opening, it will close again (picking up items/mobs) and fly back to centcom var/list/reverse_dropoff_coords //Turf that the reverse pod will drop off its newly-acquired cargo to var/fallingSoundLength = 11 - var/fallingSound = 'sound/weapons/mortar_long_whistle.ogg'//Admin sound to play before the pod lands + var/fallingSound = 'sound/items/weapons/mortar_long_whistle.ogg'//Admin sound to play before the pod lands var/landingSound //Admin sound to play when the pod lands var/openingSound //Admin sound to play when the pod opens var/leavingSound //Admin sound to play when the pod leaves @@ -700,7 +700,7 @@ target_living.Stun(pod.delays[POD_TRANSIT]+10, ignore_canstun = TRUE)//you ain't goin nowhere, kid. if (pod.delays[POD_TRANSIT] + pod.delays[POD_FALLING] < pod.fallingSoundLength) pod.fallingSoundLength = 3 //The default falling sound is a little long, so if the landing time is shorter than the default falling sound, use a special, shorter default falling sound - pod.fallingSound = 'sound/weapons/mortar_whistle.ogg' + pod.fallingSound = 'sound/items/weapons/mortar_whistle.ogg' var/soundStartTime = pod.delays[POD_TRANSIT] - pod.fallingSoundLength + pod.delays[POD_FALLING] if (soundStartTime < 0) soundStartTime = 1 diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm index 2d9a618bb414e..976298bbc0b15 100644 --- a/code/modules/cargo/supplypod_beacon.dm +++ b/code/modules/cargo/supplypod_beacon.dm @@ -27,17 +27,17 @@ switch(consoleStatus) if (SP_LINKED) linked = TRUE - playsound(src,'sound/machines/twobeep.ogg',50,FALSE) + playsound(src,'sound/machines/beep/twobeep.ogg',50,FALSE) if (SP_READY) ready = TRUE if (SP_LAUNCH) launched = TRUE - playsound(src,'sound/machines/triple_beep.ogg',50,FALSE) + playsound(src,'sound/machines/beep/triple_beep.ogg',50,FALSE) playsound(src,'sound/machines/warning-buzzer.ogg',50,FALSE) addtimer(CALLBACK(src, PROC_REF(endLaunch)), 33)//wait 3.3 seconds (time it takes for supplypod to land), then update icon if (SP_UNLINK) linked = FALSE - playsound(src,'sound/machines/synth_no.ogg',50,FALSE) + playsound(src,'sound/machines/synth/synth_no.ogg',50,FALSE) if (SP_UNREADY) ready = FALSE update_appearance() @@ -73,7 +73,9 @@ /obj/item/supplypod_beacon/wrench_act(mob/living/user, obj/item/tool) . = ..() - default_unfasten_wrench(user, tool) + if (default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + pixel_x = 0 + pixel_y = 0 return ITEM_INTERACT_SUCCESS /obj/item/supplypod_beacon/proc/unlink_console() @@ -91,7 +93,7 @@ express_console = C//set the linked console var to the console express_console.beacon = src//out with the old in with the news update_status(SP_LINKED) - if (express_console.usingBeacon) + if (express_console.using_beacon) update_status(SP_READY) to_chat(user, span_notice("[src] linked to [C].")) diff --git a/code/modules/cargo/universal_scanner.dm b/code/modules/cargo/universal_scanner.dm index 484f4a7a03201..d86a758ef89d3 100644 --- a/code/modules/cargo/universal_scanner.dm +++ b/code/modules/cargo/universal_scanner.dm @@ -200,7 +200,7 @@ to_chat(user, span_notice(message)) if(price) - playsound(src, 'sound/machines/terminal_select.ogg', 50, vary = TRUE) + playsound(src, 'sound/machines/terminal/terminal_select.ogg', 50, vary = TRUE) if(istype(target, /obj/item/delivery)) var/obj/item/delivery/parcel = target @@ -257,7 +257,7 @@ /obj/item/universal_scanner/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 2b60b3bdbb2e4..c8e9e9a64c270 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -45,8 +45,6 @@ var/datum/click_intercept = null ///Time when the click was intercepted var/click_intercept_time = 0 - ///Used for admin AI interaction - var/AI_Interact = FALSE ///Used to cache this client's bans to save on DB queries var/ban_cache = null diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index eb42e8dbf9d64..6085db7141f36 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -37,6 +37,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( return //SKYRAT EDIT ADDITION END +#ifndef TESTING + if (LOWER_TEXT(hsrc_command) == "_debug") //disable the integrated byond vv in the client side debugging tools since it doesn't respect vv read protections + return +#endif + #ifndef TESTING if (LOWER_TEXT(hsrc_command) == "_debug") //disable the integrated byond vv in the client side debugging tools since it doesn't respect vv read protections return @@ -655,7 +660,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(!query_client_in_db.Execute()) qdel(query_client_in_db) return -/* +/* SKYRAT EDIT - 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]) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index a8bef76b28275..0e8bb3c2ee869 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 = 50 // BUBBER EDIT: original is 3 /// Bitflags for communications that are muted var/muted = NONE @@ -112,7 +112,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) unlock_content = !!parent.IsByondMember() donator_status = !!GLOB.donator_list[parent.ckey] //SKYRAT EDIT ADD - DONATOR CHECK if(unlock_content || donator_status) //SKYRAT EDIT - ADD DONATOR CHECK - max_save_slots = 50 //SKYRAT EDIT - ORIGINAL 8 + max_save_slots = 100 //SKYRAT EDIT - ORIGINAL 8 else CRASH("attempted to create a preferences datum without a client or mock!") load_savefile() @@ -204,7 +204,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) data["character_profiles"] = create_character_profiles() data["character_preview_view"] = character_preview_view.assigned_map - data["overflow_role"] = SSjob.GetJobType(SSjob.overflow_role).title + data["overflow_role"] = SSjob.get_job_type(SSjob.overflow_role).title data["window"] = current_window data["content_unlocked"] = unlock_content @@ -593,7 +593,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (preference.savefile_identifier != PREFERENCE_CHARACTER) continue - preference.apply_to_human(character, read_preference(preference.type), src) + preference.apply_to_human(character, read_preference(preference.type), src) // SKYRAT EDIT - src // SKYRAT EDIT ADDITION START - middleware apply human prefs for (var/datum/preference_middleware/preference_middleware as anything in middleware) diff --git a/code/modules/client/preferences/README.md b/code/modules/client/preferences/README.md index fabfb779c902b..674f234d48ef6 100644 --- a/code/modules/client/preferences/README.md +++ b/code/modules/client/preferences/README.md @@ -398,11 +398,11 @@ For inspiration, here is changeling's: var/icon/final_icon = render_preview_outfit(/datum/outfit/changeling) var/icon/split_icon = render_preview_outfit(/datum/outfit/job/engineer) - final_icon.Shift(WEST, world.icon_size / 2) - final_icon.Shift(EAST, world.icon_size / 2) + final_icon.Shift(WEST, ICON_SIZE_X / 2) + final_icon.Shift(EAST, ICON_SIZE_X / 2) - split_icon.Shift(EAST, world.icon_size / 2) - split_icon.Shift(WEST, world.icon_size / 2) + split_icon.Shift(EAST, ICON_SIZE_X / 2) + split_icon.Shift(WEST, ICON_SIZE_X / 2) final_icon.Blend(split_icon, ICON_OVERLAY) diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm index f70a92e583cff..8eca46525277a 100644 --- a/code/modules/client/preferences/_preference.dm +++ b/code/modules/client/preferences/_preference.dm @@ -290,6 +290,9 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) /// This will, for instance, update the character preference view. /// Performs sanity checks. /datum/preferences/proc/update_preference(datum/preference/preference, preference_value) + if (!preference.is_accessible(src)) + return FALSE + var/new_value = preference.deserialize(preference_value, src) var/success = preference.write(null, new_value) diff --git a/code/modules/client/preferences/body_type.dm b/code/modules/client/preferences/body_type.dm index caad2b0437b72..6b27e0f0f0da7 100644 --- a/code/modules/client/preferences/body_type.dm +++ b/code/modules/client/preferences/body_type.dm @@ -27,4 +27,3 @@ return initial(species.sexes) #undef USE_GENDER - diff --git a/code/modules/client/preferences/clothing.dm b/code/modules/client/preferences/clothing.dm index e57d87bf2c821..e19be484925c5 100644 --- a/code/modules/client/preferences/clothing.dm +++ b/code/modules/client/preferences/clothing.dm @@ -93,15 +93,6 @@ /datum/preference/choiced/jumpsuit/apply_to_human(mob/living/carbon/human/target, value) target.jumpsuit_style = value -/datum/preference/choiced/jumpsuit/create_informed_default_value(datum/preferences/preferences) - switch(preferences.read_preference(/datum/preference/choiced/gender)) - if(MALE) - return PREF_SUIT - if(FEMALE) - return PREF_SKIRT - - return ..() - /// Socks preference /datum/preference/choiced/socks savefile_key = "socks" diff --git a/code/modules/client/preferences/middleware/_middleware.dm b/code/modules/client/preferences/middleware/_middleware.dm index b7719270cc326..6c666544883dd 100644 --- a/code/modules/client/preferences/middleware/_middleware.dm +++ b/code/modules/client/preferences/middleware/_middleware.dm @@ -43,7 +43,7 @@ /datum/preference_middleware/proc/get_character_preferences(mob/user) return null -/// Called before every update_preference, returns TRUE if this handled it. +/// Called every set_preference, returns TRUE if this handled it. /datum/preference_middleware/proc/pre_set_preference(mob/user, preference, value) return FALSE diff --git a/code/modules/client/preferences/middleware/jobs.dm b/code/modules/client/preferences/middleware/jobs.dm index 293381711a5e9..8aefa3d3643c0 100644 --- a/code/modules/client/preferences/middleware/jobs.dm +++ b/code/modules/client/preferences/middleware/jobs.dm @@ -13,7 +13,7 @@ if (level != null && level != JP_LOW && level != JP_MEDIUM && level != JP_HIGH) return FALSE - var/datum/job/job = SSjob.GetJob(job_title) + var/datum/job/job = SSjob.get_job(job_title) if (isnull(job)) return FALSE @@ -33,7 +33,7 @@ var/job_title = params["job"] var/new_job_title = params["new_title"] - var/datum/job/job = SSjob.GetJob(job_title) + var/datum/job/job = SSjob.get_job(job_title) if (isnull(job)) return FALSE @@ -100,6 +100,7 @@ /datum/preference_middleware/jobs/get_ui_static_data(mob/user) var/list/data = list() + // SKYRAT EDIT if(CONFIG_GET(flag/bypass_veteran_system) || SSplayer_ranks.is_veteran(user.client)) data["is_veteran"] = TRUE @@ -115,6 +116,7 @@ var/list/job_bans = get_job_bans(user) if (job_bans.len) data["job_bans"] = job_bans + return data.len > 0 ? data : null /datum/preference_middleware/jobs/proc/get_required_job_playtime(mob/user) @@ -154,7 +156,6 @@ data += job.title return data - //SKYRAT 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() @@ -167,3 +168,4 @@ return data //SKYRAT EDIT ADDITION END + diff --git a/code/modules/client/preferences/middleware/keybindings.dm b/code/modules/client/preferences/middleware/keybindings.dm index f4a1c06784e2f..07ec54d3cbc01 100644 --- a/code/modules/client/preferences/middleware/keybindings.dm +++ b/code/modules/client/preferences/middleware/keybindings.dm @@ -27,6 +27,7 @@ preferences.key_bindings = deep_copy_list(GLOB.default_hotkeys) preferences.key_bindings_by_key = preferences.get_key_bindings_by_key(preferences.key_bindings) preferences.update_static_data(user) + user.client.update_special_keybinds() return TRUE @@ -41,10 +42,11 @@ preferences.key_bindings_by_key = preferences.get_key_bindings_by_key(preferences.key_bindings) preferences.update_static_data(user) + user.client.update_special_keybinds() return TRUE -/datum/preference_middleware/keybindings/proc/set_keybindings(list/params) +/datum/preference_middleware/keybindings/proc/set_keybindings(list/params, mob/user) var/keybind_name = params["keybind_name"] if (isnull(GLOB.keybindings_by_name[keybind_name])) @@ -73,6 +75,8 @@ preferences.key_bindings[keybind_name] = hotkeys preferences.key_bindings_by_key = preferences.get_key_bindings_by_key(preferences.key_bindings) + user.client.update_special_keybinds() + return TRUE /datum/asset/json/keybindings diff --git a/code/modules/client/preferences/middleware/quirks.dm b/code/modules/client/preferences/middleware/quirks.dm index 67eaacbe499a6..b5c2b62ef78ea 100644 --- a/code/modules/client/preferences/middleware/quirks.dm +++ b/code/modules/client/preferences/middleware/quirks.dm @@ -95,7 +95,10 @@ 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 \ + )// SKYRAT 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. diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index 08d8f86592c7a..f7c77f10fd298 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 //SKYRAT EDIT CHANGE Caligra be damned if not /// If the highest priority job matches this, will prioritize this name in the UI var/relevant_job diff --git a/code/modules/client/preferences/species_features/lizard.dm b/code/modules/client/preferences/species_features/lizard.dm index 97154c106d54e..2ae38c9ac67c5 100644 --- a/code/modules/client/preferences/species_features/lizard.dm +++ b/code/modules/client/preferences/species_features/lizard.dm @@ -143,7 +143,6 @@ target.dna.features["tail_lizard"] = value /datum/preference/choiced/lizard_tail/create_default_value() - var/datum/sprite_accessory/tails/lizard/smooth/tail = /datum/sprite_accessory/tails/lizard/smooth - return initial(tail.name) return /datum/sprite_accessory/tails/lizard/smooth::name + */ diff --git a/code/modules/client/preferences/species_features/mushperson.dm b/code/modules/client/preferences/species_features/mushperson.dm index 9b77ed72f19cf..2ed5871307918 100644 --- a/code/modules/client/preferences/species_features/mushperson.dm +++ b/code/modules/client/preferences/species_features/mushperson.dm @@ -6,7 +6,7 @@ relevant_mutant_bodypart = "cap" /datum/preference/choiced/mushroom_cap/init_possible_values() - return assoc_to_keys_features(GLOB.caps_list) + return assoc_to_keys_features(SSaccessories.caps_list) /datum/preference/choiced/mushroom_cap/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["caps"] = value diff --git a/code/modules/client/preferences/species_features/vampire.dm b/code/modules/client/preferences/species_features/vampire.dm index 5ecdae7b1bf8e..f720dca3649ec 100644 --- a/code/modules/client/preferences/species_features/vampire.dm +++ b/code/modules/client/preferences/species_features/vampire.dm @@ -32,7 +32,7 @@ GLOBAL_LIST_EMPTY(vampire_houses) //find and setup the house (department) this vampire is joining var/datum/job_department/vampire_house - var/datum/job/vampire_job = SSjob.GetJob(target.job) + var/datum/job/vampire_job = SSjob.get_job(target.job) if(!vampire_job) //no job or no mind LOSERS return var/list/valid_departments = (SSjob.joinable_departments.Copy()) - list(/datum/job_department/silicon, /datum/job_department/undefined) diff --git a/code/modules/client/preferences/ui_style.dm b/code/modules/client/preferences/ui_style.dm index 64a82b592c60a..fa002fd71b0e7 100644 --- a/code/modules/client/preferences/ui_style.dm +++ b/code/modules/client/preferences/ui_style.dm @@ -12,8 +12,8 @@ var/icon/icons = GLOB.available_ui_styles[value] var/icon/icon = icon(icons, "hand_r") - icon.Crop(1, 1, world.icon_size * 2, world.icon_size) - icon.Blend(icon(icons, "hand_l"), ICON_OVERLAY, world.icon_size) + icon.Crop(1, 1, ICON_SIZE_X * 2, ICON_SIZE_Y) + icon.Blend(icon(icons, "hand_l"), ICON_OVERLAY, ICON_SIZE_X) return icon diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 9690827b023b5..b10d47c2190e3 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -58,7 +58,7 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") msg = emoji_parse(msg) - if(SSticker.HasRoundStarted() && (msg[1] in list(".",";",":","#") || findtext_char(msg, "say", 1, 5))) + if(SSticker.HasRoundStarted() && ((msg[1] in list(".",";",":","#")) || findtext_char(msg, "say", 1, 5))) if(tgui_alert(usr,"Your message \"[raw_msg]\" looks like it was meant for in game communication, say it in OOC?", "Meant for OOC?", list("Yes", "No")) != "Yes") return @@ -88,7 +88,6 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") if(prefs.hearted) var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat) keyname = "[sheet.icon_tag("emoji-heart")][keyname]" - //The linkify span classes and linkify=TRUE below make ooc text get clickable chat href links if you pass in something resembling a url for(var/client/receiver as anything in GLOB.clients) if(!receiver.prefs) // Client being created or deleted. Despite all, this can be null. @@ -259,7 +258,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC // Check if the list is empty if(!length(players)) // Express that there are no players we can ignore in chat - to_chat(src, "There are no other players you can ignore!") + to_chat(src, span_infoplain("There are no other players you can ignore!")) // Stop running return @@ -280,7 +279,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC // Check if the selected player is on our ignore list if(selection in prefs.ignoring) // Express that the selected player is already on our ignore list in chat - to_chat(src, "You are already ignoring [selection]!") + to_chat(src, span_infoplain("You are already ignoring [selection]!")) // Stop running return @@ -292,7 +291,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC prefs.save_preferences() // Express that we've ignored the selected player in chat - to_chat(src, "You are now ignoring [selection] on the OOC channel.") + to_chat(src, span_infoplain("You are now ignoring [selection] on the OOC channel.")) // Unignore verb /client/verb/select_unignore() @@ -303,7 +302,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC // Check if we've ignored any players if(!length(prefs.ignoring)) // Express that we haven't ignored any players in chat - to_chat(src, "You haven't ignored any players!") + to_chat(src, span_infoplain("You haven't ignored any players!")) // Stop running return @@ -318,7 +317,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC // Check if the selected player is not on our ignore list if(!(selection in prefs.ignoring)) // Express that the selected player is not on our ignore list in chat - to_chat(src, "You are not ignoring [selection]!") + to_chat(src, span_infoplain("You are not ignoring [selection]!")) // Stop running return @@ -330,7 +329,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC prefs.save_preferences() // Express that we've unignored the selected player in chat - to_chat(src, "You are no longer ignoring [selection] on the OOC channel.") + to_chat(src, span_infoplain("You are no longer ignoring [selection] on the OOC channel.")) /client/proc/show_previous_roundend_report() set name = "Your Last Round" @@ -372,7 +371,7 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC var/desired_width = 0 if(zoom_value) - desired_width = round(view_size[1] * zoom_value * world.icon_size) + desired_width = round(view_size[1] * zoom_value * ICON_SIZE_X) else // Looks like we expect mapwindow.size to be "ixj" where i and j are numbers. @@ -461,3 +460,9 @@ ADMIN_VERB(reset_ooc_color, R_FUN, "Reset Player OOC Color", "Returns player OOC ASSERT(prefs, "User attempted to export preferences while preferences were null!") // what the fuck prefs.savefile.export_json_to_client(usr, ckey) + +/client/verb/map_vote_tally_count() + set name = "Show Map Vote Tallies" + set desc = "View the current map vote tally counts." + set category = "Server" + to_chat(mob, SSmap_vote.tally_printout) diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm index 5b31ae49849ce..bd023ede6308e 100644 --- a/code/modules/client/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -67,7 +67,7 @@ msg += "" msg += "Total Players: [length(Lines)]" - to_chat(src, "[msg]") + to_chat(src, span_infoplain("[msg]")) /client/verb/adminwho() set category = "Admin" diff --git a/code/modules/clothing/belts/polymorph_belt.dm b/code/modules/clothing/belts/polymorph_belt.dm index fb09b2e68c8f1..8e1bfb0aed7bd 100644 --- a/code/modules/clothing/belts/polymorph_belt.dm +++ b/code/modules/clothing/belts/polymorph_belt.dm @@ -49,7 +49,7 @@ active = TRUE update_appearance(UPDATE_ICON_STATE) update_transform_action() - playsound(src, 'sound/machines/crate_open.ogg', 50, FALSE) + playsound(src, 'sound/machines/crate/crate_open.ogg', 50, FALSE) /obj/item/polymorph_belt/attack(mob/living/target_mob, mob/living/user, params) . = ..() @@ -104,9 +104,14 @@ invocation_type = INVOCATION_NONE spell_requirements = NONE possible_shapes = list(/mob/living/basic/cockroach) + can_be_shared = FALSE /// Amount of time it takes us to transform back or forth var/channel_time = 3 SECONDS +/datum/action/cooldown/spell/shapeshift/polymorph_belt/cast(mob/living/cast_on) + cast_on = owner //make sure this is only affecting the wearer of the belt + return ..() + /datum/action/cooldown/spell/shapeshift/polymorph_belt/Remove(mob/remove_from) var/datum/status_effect/shapechange_mob/shapechange = remove_from.has_status_effect(/datum/status_effect/shapechange_mob/from_spell) var/atom/changer = shapechange?.caster_mob || remove_from @@ -114,6 +119,7 @@ return ..() /datum/action/cooldown/spell/shapeshift/polymorph_belt/before_cast(mob/living/cast_on) + cast_on = owner . = ..() if (. & SPELL_CANCEL_CAST) return @@ -139,7 +145,7 @@ cast_on.transform = old_transform return . | SPELL_CANCEL_CAST cast_on.visible_message(span_warning("[cast_on]'s body rearranges itself with a horrible crunching sound!")) - playsound(cast_on, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(cast_on, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) /datum/action/cooldown/spell/shapeshift/polymorph_belt/after_cast(atom/cast_on) . = ..() diff --git a/code/modules/clothing/chameleon/_chameleon_action.dm b/code/modules/clothing/chameleon/_chameleon_action.dm index 7d11355791bde..b9a1697976bd8 100644 --- a/code/modules/clothing/chameleon/_chameleon_action.dm +++ b/code/modules/clothing/chameleon/_chameleon_action.dm @@ -208,7 +208,7 @@ if(istype(applying_from, /datum/outfit/job)) var/datum/outfit/job/job_outfit = applying_from - var/datum/job/job_datum = SSjob.GetJobType(job_outfit.jobtype) + var/datum/job/job_datum = SSjob.get_job_type(job_outfit.jobtype) apply_job_data(job_datum) update_look(using_item_type) diff --git a/code/modules/clothing/chameleon/chameleon_scanner.dm b/code/modules/clothing/chameleon/chameleon_scanner.dm index 2ea0958a0cc66..8b213e3f816f9 100644 --- a/code/modules/clothing/chameleon/chameleon_scanner.dm +++ b/code/modules/clothing/chameleon/chameleon_scanner.dm @@ -46,10 +46,14 @@ /obj/item/chameleon_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) return scan_target(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING -/obj/item/chameleon_scanner/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) +/obj/item/chameleon_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(SHOULD_SKIP_INTERACTION(interacting_with, src, user)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) -/obj/item/chameleon_scanner/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) +/obj/item/chameleon_scanner/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!isliving(interacting_with) && !isturf(interacting_with)) + return NONE var/list/scanned_outfit = scan_target(interacting_with, user) if(length(scanned_outfit)) var/datum/outfit/empty_outfit = new() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 4829f2120ea3a..1fed6c781df79 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -314,14 +314,6 @@ . += span_warning("[p_Theyre()] completely shredded and require[p_s()] mending before [p_they()] can be worn again!") return - switch (max_heat_protection_temperature) - if (400 to 1000) - . += "[src] offers the wearer limited protection from fire." - if (1001 to 1600) - . += "[src] offers the wearer some protection from fire." - if (1601 to 35000) - . += "[src] offers the wearer robust protection from fire." - if(TRAIT_FAST_CUFFING in clothing_traits) . += "[src] increase the speed that you handcuff others." @@ -356,6 +348,38 @@ if(get_armor().has_any_armor() || (flags_cover & (HEADCOVERSMOUTH|PEPPERPROOF)) || (clothing_flags & STOPSPRESSUREDAMAGE) || (visor_flags & STOPSPRESSUREDAMAGE)) . += span_notice("OOC: Click here to see its protection classes.") // SKYRAT EDIT ORIGINAL: ("It has a tag listing its protection classes.") +/obj/item/clothing/examine_tags(mob/user) + . = ..() + if (clothing_flags & THICKMATERIAL) + .["thick"] = "Protects from most injections and sprays." + if (clothing_flags & CASTING_CLOTHES) + .["magical"] = "Allows magical beings to cast spells when wearing [src]." + if((clothing_flags & STOPSPRESSUREDAMAGE) || (visor_flags & STOPSPRESSUREDAMAGE)) + .["pressureproof"] = "Protects the wearer from extremely low or high pressure, such as vacuum of space." + if(flags_cover & PEPPERPROOF) + .["pepperproof"] = "Protects the wearer from the effects of pepperspray." + if (heat_protection || cold_protection) + var/heat_desc + var/cold_desc + switch (max_heat_protection_temperature) + if (400 to 1000) + heat_desc = "high" + if (1001 to 1600) + heat_desc = "very high" + if (1601 to 35000) + heat_desc = "extremely high" + switch (min_cold_protection_temperature) + if (160 to 272) + cold_desc = "low" + if (72 to 159) + cold_desc = "very low" + if (0 to 71) + cold_desc = "extremely low" + .["thermally insulated"] = "Protects the wearer from [jointext(list(heat_desc, cold_desc), " and ")] temperatures." + +/obj/item/clothing/examine_descriptor(mob/user) + return "clothing" + /obj/item/clothing/Topic(href, href_list) . = ..() @@ -383,7 +407,7 @@ added_damage_header = TRUE readout += "[armor_to_protection_name(durability_key)] [armor_to_protection_class(rating)]" - if(flags_cover & HEADCOVERSMOUTH || flags_cover & PEPPERPROOF) + if((flags_cover & HEADCOVERSMOUTH) || (flags_cover & PEPPERPROOF)) var/list/things_blocked = list() if(flags_cover & HEADCOVERSMOUTH) things_blocked += span_tooltip("Because this item is worn on the head and is covering the mouth, it will block facehugger proboscides, killing facehuggers.", "facehuggers") @@ -393,7 +417,7 @@ readout += "COVERAGE" readout += "It will block [english_list(things_blocked)]." - if(clothing_flags & STOPSPRESSUREDAMAGE || visor_flags & STOPSPRESSUREDAMAGE) + if((clothing_flags & STOPSPRESSUREDAMAGE) || (visor_flags & STOPSPRESSUREDAMAGE)) var/list/parts_covered = list() var/output_string = "It" if(!(clothing_flags & STOPSPRESSUREDAMAGE)) @@ -405,8 +429,19 @@ if(length(parts_covered)) // Just in case someone makes spaceproof gloves or something readout += "[output_string] will protect the wearer's [english_list(parts_covered)] from [span_tooltip("The extremely low pressure is the biggest danger posed by the vacuum of space.", "low pressure")]." - if(min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT) - readout += "It will insulate the wearer from [span_tooltip("While not as dangerous as the lack of pressure, the extremely low temperature of space is also a hazard.", "the cold of space")]." + var/heat_prot + switch (max_heat_protection_temperature) + if (400 to 1000) + heat_prot = "minor" + if (1001 to 1600) + heat_prot = "some" + if (1601 to 35000) + heat_prot = "extreme" + if (heat_prot) + . += "[src] offers the wearer [heat_protection] protection from heat, up to [max_heat_protection_temperature] kelvin." + + if(min_cold_protection_temperature) + readout += "It will insulate the wearer from [min_cold_protection_temperature <= SPACE_SUIT_MIN_TEMP_PROTECT ? span_tooltip("While not as dangerous as the lack of pressure, the extremely low temperature of space is also a hazard.", "the cold of space, down to [min_cold_protection_temperature] kelvin") : "cold, down to [min_cold_protection_temperature] kelvin"]." if(!length(readout)) readout += "No armor or durability information available." @@ -528,7 +563,7 @@ BLIND // can't see anything update_appearance() //most of the time the sprite changes /obj/item/clothing/proc/can_use(mob/user) - return istype(user) && !user.incapacitated() + return istype(user) && !user.incapacitated /obj/item/clothing/proc/spawn_shreds() new /obj/effect/decal/cleanable/shreds(get_turf(src), name) diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index 5ae5b628808e1..bdc294f5366ae 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -26,3 +26,4 @@ . = ..() AddElement(/datum/element/earhealing) AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) + AddComponent(/datum/component/adjust_fishing_difficulty, -1) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 1c90176bc9e79..089661bd7728e 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -112,7 +112,7 @@ throw_speed = 4 attack_verb_continuous = list("slices") attack_verb_simple = list("slice") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED /obj/item/clothing/glasses/science @@ -251,7 +251,7 @@ throw_speed = 4 attack_verb_continuous = list("slices") attack_verb_simple = list("slice") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED glass_colour_type = /datum/client_colour/glass_colour/lightgreen @@ -344,6 +344,7 @@ /obj/item/clothing/glasses/sunglasses/Initialize(mapload) . = ..() add_glasses_slapcraft_component() + AddComponent(/datum/component/adjust_fishing_difficulty, -1) /obj/item/clothing/glasses/sunglasses/proc/add_glasses_slapcraft_component() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/hudsunsec, /datum/crafting_recipe/hudsunmed, /datum/crafting_recipe/hudsundiag, /datum/crafting_recipe/scienceglasses) @@ -384,7 +385,7 @@ throw_speed = 4 attack_verb_continuous = list("slices") attack_verb_simple = list("slice") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED /obj/item/clothing/glasses/sunglasses/gar/orange @@ -445,9 +446,21 @@ 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 -/obj/item/clothing/glasses/welding/attack_self(mob/user) +/obj/item/clothing/glasses/welding/Initialize(mapload) + . = ..() + if(!up) + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + +/obj/item/clothing/glasses/welding/attack_self(mob/living/user) adjust_visor(user) +/obj/item/clothing/glasses/welding/adjust_visor(mob/user) + . = ..() + if(up) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) + else + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /obj/item/clothing/glasses/welding/update_icon_state() . = ..() icon_state = "[initial(icon_state)][up ? "up" : ""]" @@ -466,6 +479,10 @@ tint = INFINITY // You WILL Be blind, no matter what dog_fashion = /datum/dog_fashion/head +/obj/item/clothing/glasses/blindfold/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /obj/item/clothing/glasses/trickblindfold name = "blindfold" desc = "A see-through blindfold perfect for cheating at games like pin the stun baton on the clown." @@ -503,6 +520,10 @@ flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/red +/obj/item/clothing/glasses/thermal/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + /obj/item/clothing/glasses/thermal/emp_act(severity) . = ..() if(. & EMP_PROTECT_SELF) @@ -558,10 +579,6 @@ icon_state = (icon_state == base_icon_state) ? "[base_icon_state]_flipped" : base_icon_state user.update_worn_glasses() -/datum/armor/glasses_science - fire = 80 - acid = 100 - /obj/item/clothing/glasses/cold name = "cold goggles" desc = "A pair of goggles meant for low temperatures." @@ -621,6 +638,10 @@ var/list/hudlist = list(DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC, DATA_HUD_SECURITY_ADVANCED, DATA_HUD_BOT_PATH) var/xray = FALSE +/obj/item/clothing/glasses/debug/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -15) + /obj/item/clothing/glasses/debug/equipped(mob/user, slot) . = ..() if(!(slot & ITEM_SLOT_EYES)) @@ -707,6 +728,10 @@ /// Hallucination datum currently being used for seeing mares var/datum/hallucination/stored_hallucination +/obj/item/clothing/glasses/nightmare_vision/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 13) + /obj/item/clothing/glasses/nightmare_vision/Destroy() QDEL_NULL(stored_hallucination) return ..() diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index dc35ab1dbf4c0..332aba8a71990 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -204,7 +204,7 @@ throw_speed = 4 attack_verb_continuous = list("slices") attack_verb_simple = list("slice") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED /obj/item/clothing/glasses/hud/security/sunglasses/gars/giga diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index 5f63e0c3464bf..418f8358f4d2a 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -12,6 +12,9 @@ siemens_coefficient = 0.5 body_parts_covered = HANDS slot_flags = ITEM_SLOT_GLOVES + equip_sound = 'sound/items/equip/glove_equip.ogg' + drop_sound = 'sound/items/handling/glove_drop.ogg' + pickup_sound = 'sound/items/handling/glove_pick_up.ogg' attack_verb_continuous = list("challenges") attack_verb_simple = list("challenge") strip_delay = 20 diff --git a/code/modules/clothing/gloves/bone.dm b/code/modules/clothing/gloves/bone.dm index 2c75e642ff617..761057054f901 100644 --- a/code/modules/clothing/gloves/bone.dm +++ b/code/modules/clothing/gloves/bone.dm @@ -12,6 +12,10 @@ resistance_flags = NONE armor_type = /datum/armor/gloves_bracer +/obj/item/clothing/gloves/bracer/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + /datum/armor/gloves_bracer melee = 15 bullet = 25 diff --git a/code/modules/clothing/gloves/botany.dm b/code/modules/clothing/gloves/botany.dm index af94a6b7bb13e..144477240b29d 100644 --- a/code/modules/clothing/gloves/botany.dm +++ b/code/modules/clothing/gloves/botany.dm @@ -12,6 +12,10 @@ clothing_traits = list(TRAIT_PLANT_SAFE) armor_type = /datum/armor/gloves_botanic_leather +/obj/item/clothing/gloves/botanic_leather/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /datum/armor/gloves_botanic_leather bio = 50 fire = 70 diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index 021d895f69c36..ab6e03ae493d2 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -19,6 +19,7 @@ ) AddComponent(/datum/component/martial_art_giver, style_to_give) + AddComponent(/datum/component/adjust_fishing_difficulty, 19) /obj/item/clothing/gloves/boxing/evil name = "evil boxing gloves" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 83d670458e1b3..06185a4e562e4 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -9,7 +9,6 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE cut_type = /obj/item/clothing/gloves/fingerless - clothing_traits = list(TRAIT_FAST_CUFFING) // SKYRAT EDIT ADDITION START uses_advanced_reskins = TRUE unique_reskin = list( @@ -62,6 +61,7 @@ /obj/item/clothing/gloves/color/fingerless/Initialize(mapload) . = ..() var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/gripperoffbrand) + AddComponent(/datum/component/adjust_fishing_difficulty, -2) AddElement( /datum/element/slapcrafting,\ diff --git a/code/modules/clothing/gloves/combat.dm b/code/modules/clothing/gloves/combat.dm index efc5bd40b0587..a2574c8d23ec7 100644 --- a/code/modules/clothing/gloves/combat.dm +++ b/code/modules/clothing/gloves/combat.dm @@ -25,8 +25,16 @@ greyscale_colors = null inhand_icon_state = null +/obj/item/clothing/gloves/combat/wizard/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //something something wizard casting + /obj/item/clothing/gloves/combat/floortile name = "floortile camouflage gloves" desc = "Is it just me or is there a pair of gloves on the floor?" icon_state = "ftc_gloves" inhand_icon_state = "greyscale_gloves" + +/obj/item/clothing/gloves/combat/floortiletile/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //tacticool diff --git a/code/modules/clothing/gloves/insulated.dm b/code/modules/clothing/gloves/insulated.dm index 19109d68b9c93..d20ae78c6c4cc 100644 --- a/code/modules/clothing/gloves/insulated.dm +++ b/code/modules/clothing/gloves/insulated.dm @@ -13,15 +13,18 @@ custom_price = PAYCHECK_CREW * 10 custom_premium_price = PAYCHECK_COMMAND * 6 cut_type = /obj/item/clothing/gloves/cut - clothing_traits = list(TRAIT_CHUNKYFINGERS) + +/obj/item/clothing/gloves/color/yellow/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 10) /obj/item/clothing/gloves/color/yellow/apply_fantasy_bonuses(bonus) . = ..() if(bonus >= 10) - detach_clothing_traits(TRAIT_CHUNKYFINGERS) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) /obj/item/clothing/gloves/color/yellow/remove_fantasy_bonuses(bonus) - attach_clothing_traits(TRAIT_CHUNKYFINGERS) + AddComponent(/datum/component/adjust_fishing_difficulty, 10) return ..() /datum/armor/color_yellow @@ -116,6 +119,10 @@ greyscale_colors = null clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH) +/obj/item/clothing/gloves/cut/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/gloves/cut/heirloom desc = "The old gloves your great grandfather stole from Engineering, many moons ago. They've seen some tough times recently." @@ -131,3 +138,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE + +/obj/item/clothing/gloves/chief_engineer/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) diff --git a/code/modules/clothing/gloves/punch_mitts.dm b/code/modules/clothing/gloves/punch_mitts.dm index 07d93d5ab021c..96848731a9cbb 100644 --- a/code/modules/clothing/gloves/punch_mitts.dm +++ b/code/modules/clothing/gloves/punch_mitts.dm @@ -11,7 +11,7 @@ /obj/item/clothing/gloves/fingerless/punch_mitts/Initialize(mapload) . = ..() - + AddComponent(/datum/component/adjust_fishing_difficulty, -4) AddComponent(/datum/component/martial_art_giver, /datum/martial_art/boxing/hunter) /datum/armor/gloves_mitts diff --git a/code/modules/clothing/gloves/special.dm b/code/modules/clothing/gloves/special.dm index d7fb34ae7c7e6..98de3145ddc78 100644 --- a/code/modules/clothing/gloves/special.dm +++ b/code/modules/clothing/gloves/special.dm @@ -14,6 +14,7 @@ . = ..() RegisterSignal(src, COMSIG_ITEM_EQUIPPED, PROC_REF(on_glove_equip)) RegisterSignal(src, COMSIG_ITEM_POST_UNEQUIP, PROC_REF(on_glove_unequip)) + AddComponent(/datum/component/adjust_fishing_difficulty, 19) /// Called when the glove is equipped. Adds a component to the equipper and stores a weak reference to it. /obj/item/clothing/gloves/cargo_gauntlet/proc/on_glove_equip(datum/source, mob/equipper, slot) @@ -59,6 +60,7 @@ /obj/item/clothing/gloves/rapid/Initialize(mapload) . = ..() AddComponent(/datum/component/wearertargeting/punchcooldown) + AddComponent(/datum/component/adjust_fishing_difficulty, -7) /obj/item/clothing/gloves/radio name = "translation gloves" @@ -74,6 +76,10 @@ icon_state = "black" greyscale_colors = "#2f2e31" +/obj/item/clothing/gloves/race/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -7) + /obj/item/clothing/gloves/captain desc = "Regal blue gloves, with a nice gold trim, a diamond anti-shock coating, and an integrated thermal barrier. Swanky." name = "captain's gloves" @@ -90,6 +96,10 @@ resistance_flags = NONE clothing_traits = list(TRAIT_FAST_CUFFING) +/obj/item/clothing/gloves/captain/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + /datum/armor/captain_gloves bio = 90 fire = 70 @@ -117,6 +127,10 @@ greyscale_colors = "#99eeff" clothing_traits = list(TRAIT_QUICKER_CARRY, TRAIT_FASTMED) +/obj/item/clothing/gloves/latex/nitrile/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + /obj/item/clothing/gloves/latex/coroner name = "coroner's gloves" desc = "Black gloves made from latex with a superhydrophobic coating. Useful for picking bodies up instead of dragging blood behind." @@ -155,3 +169,106 @@ siemens_coefficient = 0.3 clothing_traits = list(TRAIT_QUICKER_CARRY, TRAIT_CHUNKYFINGERS) clothing_flags = THICKMATERIAL + +/obj/item/clothing/gloves/atmos/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 6) + +///A pair of gloves that both allow the user to fish without the need of a held fishing rod and provides athletics experience. +/obj/item/clothing/gloves/fishing + name = "athletic fishing gloves" + desc = "A pair of gloves to fish without a fishing rod but your raw athletics strength. It doubles as a good workout device. WARNING: May cause injuries when catching bigger fish." + icon_state = "fishing_gloves" + ///The current fishing minigame datum the wearer is engaged in. + var/datum/fishing_challenge/challenge + +/obj/item/clothing/gloves/fishing/Initialize(mapload) + . = ..() + AddComponent(/datum/component/profound_fisher, new /obj/item/fishing_rod/mob_fisher/athletic(src)) + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //on top of the extra that you get from the athletics skill. + +/obj/item/clothing/gloves/fishing/equipped(mob/user, slot) + . = ..() + if(slot == ITEM_SLOT_GLOVES) + RegisterSignal(user, COMSIG_MOB_BEGIN_FISHING_MINIGAME, PROC_REF(begin_workout)) + +/obj/item/clothing/gloves/fishing/dropped(mob/user) + UnregisterSignal(user, COMSIG_MOB_BEGIN_FISHING_MINIGAME) + if(challenge) + stop_workout(user) + return ..() + +/obj/item/clothing/gloves/fishing/proc/begin_workout(datum/source, datum/fishing_challenge/challenge) + SIGNAL_HANDLER + RegisterSignal(source, COMSIG_MOB_COMPLETE_FISHING, PROC_REF(stop_workout)) + if(HAS_TRAIT(source, TRAIT_PROFOUND_FISHER)) //Only begin working out if we're fishing with these gloves and not some other fishing rod.. + START_PROCESSING(SSprocessing, src) + src.challenge = challenge + +/obj/item/clothing/gloves/fishing/proc/stop_workout(datum/source) + SIGNAL_HANDLER + UnregisterSignal(source, COMSIG_MOB_COMPLETE_FISHING) + challenge = null + STOP_PROCESSING(SSprocessing, src) + +/obj/item/clothing/gloves/fishing/process(seconds_per_tick) + var/mob/living/wearer = loc + var/stamina_exhaustion = 2 + challenge.difficulty * 0.02 + var/is_heavy_gravity = wearer.has_gravity() > STANDARD_GRAVITY + var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = wearer.get_organ_slot(ORGAN_SLOT_SPINE) + if(istype(potential_spine)) + stamina_exhaustion *= potential_spine.athletics_boost_multiplier + if(HAS_TRAIT(wearer, TRAIT_STRENGTH)) + stamina_exhaustion *= 0.5 + + var/experience = 0.3 + challenge.difficulty * 0.003 + if(is_heavy_gravity) + stamina_exhaustion *= 1.5 + experience *= 2 + + wearer.adjustStaminaLoss(stamina_exhaustion) + wearer.mind?.adjust_experience(/datum/skill/athletics, experience) + wearer.apply_status_effect(/datum/status_effect/exercised) + +///The internal fishing rod of the athletic fishing gloves. The more athletic you're, the easier the minigame will be. +/obj/item/fishing_rod/mob_fisher/athletic + name = "athletics fishing gloves" + icon = /obj/item/clothing/gloves/fishing::icon + icon_state = /obj/item/clothing/gloves/fishing::icon_state + line = null + bait = null + ui_description = "A pair of gloves to fish without a fishing rod while training your athletics." + wiki_description = "It requires the Advanced Fishing Technology Node to be researched to be printed. It may hurt the user when catching larger fish." + show_in_wiki = TRUE //Show this cool pair of gloves in the wiki. + +/obj/item/fishing_rod/mob_fisher/athletic/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_FISHING_ROD_CAUGHT_FISH, PROC_REF(noodling_is_dangerous)) + +/obj/item/fishing_rod/mob_fisher/athletic/get_fishing_overlays() + return list() + +/obj/item/fishing_rod/mob_fisher/athletic/hook_hit(atom/atom_hit_by_hook_projectile, mob/user) + difficulty_modifier = -3 * (user.mind?.get_skill_level(/datum/skill/athletics) - 1) + return ..() + +/obj/item/fishing_rod/mob_fisher/athletic/proc/noodling_is_dangerous(datum/source, atom/movable/reward, mob/living/user) + SIGNAL_HANDLER + if(!isfish(reward)) + return + var/damage = 0 + var/obj/item/fish/fishe = reward + switch(fishe.w_class) + if(WEIGHT_CLASS_BULKY) + damage = 10 + if(WEIGHT_CLASS_HUGE) + damage = 14 + if(WEIGHT_CLASS_GIGANTIC) + damage = 18 + if(!damage && fishe.weight >= 2000) + damage = 5 + damage = round(damage * fishe.weight * 0.0005) + if(damage) + var/body_zone = pick(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM) + user.apply_damage(damage, BRUTE, body_zone, user.run_armor_check(body_zone, MELEE)) + playsound(src,'sound/items/weapons/bite.ogg', damage * 2, TRUE) diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index bbe7f5dba18b4..d45fa8d0a90b5 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -22,6 +22,12 @@ var/tackle_speed = 1 /// See: [/datum/component/tackler/var/skill_mod] var/skill_mod = 1 + ///How much these gloves affect fishing difficulty + var/fishing_modifier = -5 + +/obj/item/clothing/gloves/tackler/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) //fishing tackle equipment (ba dum tsh) /obj/item/clothing/gloves/tackler/Destroy() tackler = null @@ -55,6 +61,7 @@ tackle_speed = 2 min_distance = 2 skill_mod = -2 + fishing_modifier = -8 /obj/item/clothing/gloves/tackler/combat name = "gorilla gloves" @@ -106,9 +113,11 @@ base_knockdown = 1.75 SECONDS min_distance = 2 skill_mod = -1 + fishing_modifier = -3 /obj/item/clothing/gloves/tackler/football name = "football gloves" desc = "Gloves for football players! Teaches them how to tackle like a pro." icon_state = "tackle_gloves" inhand_icon_state = null + fishing_modifier = -3 diff --git a/code/modules/clothing/head/cakehat.dm b/code/modules/clothing/head/cakehat.dm index 1fc0fa0b05b50..8a389cbf812ff 100644 --- a/code/modules/clothing/head/cakehat.dm +++ b/code/modules/clothing/head/cakehat.dm @@ -18,9 +18,9 @@ wound_bonus = 10 bare_wound_bonus = 5 dog_fashion = /datum/dog_fashion/head - hitsound = 'sound/weapons/tap.ogg' - var/hitsound_on = 'sound/weapons/sear.ogg' //so we can differentiate between cakehat and energyhat - var/hitsound_off = 'sound/weapons/tap.ogg' + hitsound = 'sound/items/weapons/tap.ogg' + var/hitsound_on = 'sound/items/weapons/sear.ogg' //so we can differentiate between cakehat and energyhat + var/hitsound_off = 'sound/items/weapons/tap.ogg' var/force_on = 15 var/throwforce_on = 15 var/damtype_on = BURN @@ -57,23 +57,30 @@ /obj/item/clothing/head/utility/hardhat/cakehat/energycake name = "energy cake" desc = "You put the energy sword on your cake. Brilliant." - icon_state = "hardhat0_energycake" + icon_state = "hardhat1_energycake" inhand_icon_state = "hardhat0_energycake" hat_type = "energycake" - hitsound = 'sound/weapons/tap.ogg' - hitsound_on = 'sound/weapons/blade1.ogg' - hitsound_off = 'sound/weapons/tap.ogg' + hitsound = 'sound/items/weapons/tap.ogg' + hitsound_on = 'sound/items/weapons/blade1.ogg' + hitsound_off = 'sound/items/weapons/tap.ogg' damtype_on = BRUTE force_on = 18 //same as epen (but much more obvious) light_range = 3 //ditto heat = 0 +/obj/item/clothing/head/utility/hardhat/cakehat/energycake/Initialize(mapload) + . = ..() + //the compiled icon state is how it appears when it's on. + //That's how we want it to show on orbies (little virtual PDA pets). + //However we should reset their appearance on runtime. + update_appearance(UPDATE_ICON_STATE) + /obj/item/clothing/head/utility/hardhat/cakehat/energycake/turn_on(mob/living/user) - playsound(src, 'sound/weapons/saberon.ogg', 5, TRUE) + playsound(src, 'sound/items/weapons/saberon.ogg', 5, TRUE) to_chat(user, span_warning("You turn on \the [src].")) return ..() /obj/item/clothing/head/utility/hardhat/cakehat/energycake/turn_off(mob/living/user) - playsound(src, 'sound/weapons/saberoff.ogg', 5, TRUE) + playsound(src, 'sound/items/weapons/saberoff.ogg', 5, TRUE) to_chat(user, span_warning("You turn off \the [src].")) return ..() diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 3cd88ffc8eda0..9f7d01506f1e5 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -107,6 +107,10 @@ inhand_icon_state = null dog_fashion = /datum/dog_fashion/head/pirate +/obj/item/clothing/head/collectable/pirate/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/head/collectable/kitty name = "collectable kitty ears" desc = "The fur feels... a bit too realistic." @@ -129,6 +133,10 @@ icon_state = "wizard" dog_fashion = /datum/dog_fashion/head/blue_wizard +/obj/item/clothing/head/collectable/wizard/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -1) + /obj/item/clothing/head/collectable/hardhat name = "collectable hard hat" desc = "WARNING! Offers no real protection, or luminosity, but damn, is it fancy!" @@ -173,3 +181,7 @@ inhand_icon_state = "swatsyndie_helmet" clothing_flags = SNUG_FIT flags_inv = HIDEHAIR + +/obj/item/clothing/head/collectable/swat/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) diff --git a/code/modules/clothing/head/costume.dm b/code/modules/clothing/head/costume.dm index 5442210aecd73..a1cfd37ec0db0 100644 --- a/code/modules/clothing/head/costume.dm +++ b/code/modules/clothing/head/costume.dm @@ -119,14 +119,10 @@ /obj/item/clothing/head/costume/cardborg/equipped(mob/living/user, slot) ..() if(ishuman(user) && (slot & ITEM_SLOT_HEAD)) - var/mob/living/carbon/human/H = user - if(istype(H.wear_suit, /obj/item/clothing/suit/costume/cardborg)) - var/obj/item/clothing/suit/costume/cardborg/CB = H.wear_suit - CB.disguise(user, src) - -/obj/item/clothing/head/costume/cardborg/dropped(mob/living/user) - ..() - user.remove_alt_appearance("standard_borg_disguise") + var/mob/living/carbon/human/human_user = user + if(istype(human_user.wear_suit, /obj/item/clothing/suit/costume/cardborg)) + var/obj/item/clothing/suit/costume/cardborg/suit = human_user.wear_suit + suit.disguise(user, src) /obj/item/clothing/head/costume/bronze name = "bronze hat" diff --git a/code/modules/clothing/head/fedora.dm b/code/modules/clothing/head/fedora.dm index e4e8d4b54368d..7bf295f74553a 100644 --- a/code/modules/clothing/head/fedora.dm +++ b/code/modules/clothing/head/fedora.dm @@ -35,3 +35,13 @@ name = "carpskin fedora" icon_state = "fedora_carpskin" inhand_icon_state = null + +/obj/item/clothing/head/fedora/carpskin/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + +/obj/item/clothing/head/fedora/beige/press + name = "press fedora" + desc = "An beige fedora with a piece of paper saying \"PRESS\" stuck in its rim." + icon_state = "fedora_press" + inhand_icon_state = null diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index b35b51891bbb4..64fb494751e74 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -40,7 +40,6 @@ /obj/item/clothing/head/utility/hardhat/Initialize(mapload) . = ..() AddElement(/datum/element/update_icon_updates_onmob) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /obj/item/clothing/head/utility/hardhat/proc/toggle_helmet_light(mob/living/user) on = !on @@ -60,11 +59,11 @@ /obj/item/clothing/head/utility/hardhat/proc/turn_off(mob/user) set_light_on(FALSE) -/obj/item/clothing/head/utility/hardhat/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/item/clothing/head/utility/hardhat/on_saboteur(datum/source, disrupt_duration) + . = ..() if(on) toggle_helmet_light() - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/item/clothing/head/utility/hardhat/attack_self(mob/living/user) toggle_helmet_light(user) @@ -143,7 +142,7 @@ /obj/item/clothing/head/utility/hardhat/welding/adjust_visor(mob/living/user) . = ..() if(.) - playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) + playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 50, TRUE) /obj/item/clothing/head/utility/hardhat/welding/worn_overlays(mutable_appearance/standing, isinhands) . = ..() @@ -238,6 +237,10 @@ dog_fashion = /datum/dog_fashion/head/pumpkin/unlit clothing_traits = list() +/obj/item/clothing/head/utility/hardhat/pumpkinhead/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) + /obj/item/clothing/head/utility/hardhat/pumpkinhead/set_light_on(new_value) . = ..() if(isnull(.)) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 75e31d1318313..b9b371d498c10 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -75,6 +75,16 @@ update_appearance() return CLICK_ACTION_SUCCESS +/obj/item/clothing/head/helmet/press + name = "press helmet" + desc = "A blue helmet used to distinguish non-combatant \"PRESS\" members, like if anyone cares." + icon_state = "helmet_press" + +/obj/item/clothing/head/helmet/press/worn_overlays(mutable_appearance/standing, isinhands, icon_file) + . = ..() + if(!isinhands) + . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha) + /obj/item/clothing/head/helmet/alt name = "bulletproof helmet" desc = "A bulletproof combat helmet that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." @@ -191,6 +201,10 @@ visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED) +/obj/item/clothing/head/helmet/toggleable/riot/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + /datum/armor/toggleable_riot melee = 50 bullet = 10 @@ -270,6 +284,10 @@ dog_fashion = null clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED) +/obj/item/clothing/head/helmet/swat/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) + /datum/armor/helmet_swat melee = 40 bullet = 30 @@ -419,6 +437,10 @@ dog_fashion = null clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED) +/obj/item/clothing/head/helmet/knight/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) + /datum/armor/helmet_knight melee = 50 bullet = 10 diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index a5041de7fa0a9..7b67cda761f2e 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -54,7 +54,7 @@ /obj/item/clothing/head/utility/chefhat/proc/on_mouse_emote(mob/living/source, key, emote_message, type_override) SIGNAL_HANDLER var/mob/living/carbon/wearer = loc - if(!wearer || wearer.incapacitated(IGNORE_RESTRAINTS)) + if(!wearer || INCAPACITATED_IGNORING(wearer, INCAPABLE_RESTRAINTS)) return if (!prob(mouse_control_probability)) return COMPONENT_CANT_EMOTE @@ -68,7 +68,7 @@ return COMPONENT_MOVABLE_BLOCK_PRE_MOVE // Didn't roll well enough or on cooldown var/mob/living/carbon/wearer = loc - if(!wearer || wearer.incapacitated(IGNORE_RESTRAINTS)) + if(!wearer || INCAPACITATED_IGNORING(wearer, INCAPABLE_RESTRAINTS)) return COMPONENT_MOVABLE_BLOCK_PRE_MOVE // Not worn or can't move var/move_direction = get_dir(wearer, moved_to) @@ -624,6 +624,10 @@ flags_inv = HIDEHAIR //Cover your head doctor! w_class = WEIGHT_CLASS_SMALL //surgery cap can be easily crumpled +/obj/item/clothing/head/utility/surgerycap/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/head/utility/surgerycap/attack_self(mob/user) . = ..() if(.) @@ -666,6 +670,10 @@ icon_state = "headmirror" body_parts_covered = NONE +/obj/item/clothing/head/utility/head_mirror/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/head/utility/head_mirror/examine(mob/user) . = ..() . += span_notice("In a properly lit room, you can use this to examine people's eyes, ears, and mouth closer.") diff --git a/code/modules/clothing/head/mind_monkey_helmet.dm b/code/modules/clothing/head/mind_monkey_helmet.dm index b78dc5e11fa7c..57b5ee5c21631 100644 --- a/code/modules/clothing/head/mind_monkey_helmet.dm +++ b/code/modules/clothing/head/mind_monkey_helmet.dm @@ -10,6 +10,10 @@ var/mob/living/carbon/human/magnification = null ///if the helmet is on a valid target (just works like a normal helmet if not (cargo please stop)) var/polling = FALSE///if the helmet is currently polling for targets (special code for removal) var/light_colors = 1 ///which icon state color this is (red, blue, yellow) + /// This chance is increased by 7 every time the helmet fails to get a host, to dissuade spam. starts negative to add 1 safe reuse + var/rage_chance = -7 + /// Holds the steam effect at dangerous rage chance levels. + var/obj/effect/abstract/particle_holder/particle_effect /obj/item/clothing/head/helmet/monkey_sentience/Initialize(mapload) . = ..() @@ -18,12 +22,13 @@ /obj/item/clothing/head/helmet/monkey_sentience/examine(mob/user) . = ..() - . += span_boldwarning("---WARNING: REMOVAL OF HELMET ON SUBJECT MAY LEAD TO:---") + . += span_boldwarning("---WARNING: REMOVAL OF HELMET ON SUBJECT, OR REPEATED SENTIENCE GENERATION FAILURES MAY LEAD TO:---") . += span_warning("BLOOD RAGE") . += span_warning("BRAIN DEATH") . += span_warning("PRIMAL GENE ACTIVATION") . += span_warning("GENETIC MAKEUP MASS SUSCEPTIBILITY") - . += span_boldnotice("Ask your CMO if mind magnification is right for you.") + . += span_notice("Warranty voided if helmet is placed after more than ") + span_boldnotice("two") + span_notice(" mind magnification failures.") + . += span_boldnotice("Ask your CMO if mind magnification is right for you!") /obj/item/clothing/head/helmet/monkey_sentience/update_icon_state() . = ..() @@ -37,7 +42,7 @@ var/mob/living/something = user to_chat(something, span_boldnotice("You feel a stabbing pain in the back of your head for a moment.")) something.apply_damage(5,BRUTE,BODY_ZONE_HEAD,FALSE,FALSE,FALSE) //notably: no damage resist (it's in your helmet), no damage spread (it's in your helmet) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/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.") @@ -55,9 +60,40 @@ UnregisterSignal(magnification, COMSIG_SPECIES_LOSS) magnification = null visible_message(span_notice("[src] falls silent and drops on the floor. Maybe you should try again later?")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + var/particle_path + switch(rage_chance) + if(-7 to 0) + user.visible_message(span_notice("[src] falls silent and drops on the floor. Try again later?")) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) + particle_path = null + if(7 to 13) + user.visible_message(span_notice("[src] sparkles momentarily, then falls silent and drops on the floor. Maybe you should try again later?")) + playsound(src, SFX_SPARKS, 30, TRUE) + do_sparks(2, FALSE, src) + particle_path = /particles/smoke/steam/mild + if(14 to 21) + user.visible_message(span_notice("[src] sparkles and shatters ominously, then falls silent and drops on the floor. Maybe you shouldn't try again later.")) + do_sparks(4, FALSE, src) + playsound(src, SFX_SPARKS, 15, TRUE) + playsound(src, SFX_SHATTER, 30, TRUE) + particle_path = /particles/smoke/steam/bad + if(21 to INFINITY) + user.visible_message(span_notice("[src] buzzes and smokes heavily, then falls silent and drops on the floor. This is clearly a bad idea.")) + do_sparks(6, FALSE, src) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE) + particle_path = /particles/smoke/steam + rage_chance += 7 + + QDEL_NULL(particle_effect) + if(particle_path) + particle_effect = new(src, particle_path) + QDEL_IN(particle_effect, 2 MINUTES) + + if((rage_chance > 0) && prob(rage_chance)) // too much spam means agnry gorilla running at you + malfunction(user) user.dropItemToGround(src) return + magnification.key = chosen_one.key playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, FALSE) to_chat(magnification, span_notice("You're a mind magnified monkey! Protect your helmet with your life- if you lose it, your sentience goes with it!")) @@ -78,25 +114,28 @@ to_chat(magnification, span_userdanger("You feel your flicker of sentience ripped away from you, as everything becomes dim...")) magnification.ghostize(FALSE) if(prob(10)) - switch(rand(1,4)) - if(1) //blood rage - var/datum/ai_controller/monkey/monky_controller = magnification.ai_controller - monky_controller.set_trip_mode(mode = FALSE) - monky_controller.set_blackboard_key(BB_MONKEY_AGGRESSIVE, TRUE) - if(2) //brain death - magnification.apply_damage(500,BRAIN,BODY_ZONE_HEAD,FALSE,FALSE,FALSE) - if(3) //primal gene (gorilla) - magnification.gorillize() - if(4) //genetic mass susceptibility (gib) - magnification.gib(DROP_ALL_REMAINS) + malfunction(magnification) //either used up correctly or taken off before polling finished (punish this by destroying the helmet) UnregisterSignal(magnification, COMSIG_SPECIES_LOSS) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) playsound(src, SFX_SPARKS, 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) visible_message(span_warning("[src] fizzles and breaks apart!")) magnification = null new /obj/effect/decal/cleanable/ash(drop_location()) //just in case they're in a locker or other containers it needs to use crematorium ash, see the path itself for an explanation +/obj/item/clothing/head/helmet/monkey_sentience/proc/malfunction(mob/living/carbon/target) + switch(rand(1,4)) + if(1) //blood rage + var/datum/ai_controller/monkey/monky_controller = target.ai_controller + monky_controller.set_trip_mode(mode = FALSE) + monky_controller.set_blackboard_key(BB_MONKEY_AGGRESSIVE, TRUE) + if(2) //brain death + target.apply_damage(500,BRAIN,BODY_ZONE_HEAD,FALSE,FALSE,FALSE) + if(3) //primal gene (gorilla) + target.gorillize() + if(4) //genetic mass susceptibility (gib) + target.gib(DROP_ALL_REMAINS) + /obj/item/clothing/head/helmet/monkey_sentience/dropped(mob/user) . = ..() if(magnification || polling) diff --git a/code/modules/clothing/head/moth.dm b/code/modules/clothing/head/moth.dm index 961de9e3a7578..a15a3b1025b2b 100644 --- a/code/modules/clothing/head/moth.dm +++ b/code/modules/clothing/head/moth.dm @@ -15,6 +15,7 @@ /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) + AddComponent(/datum/component/adjust_fishing_difficulty, -2) /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/pirate.dm b/code/modules/clothing/head/pirate.dm index 818478ccb7d4a..6d5d0a67f30f9 100644 --- a/code/modules/clothing/head/pirate.dm +++ b/code/modules/clothing/head/pirate.dm @@ -5,8 +5,9 @@ inhand_icon_state = null dog_fashion = /datum/dog_fashion/head/pirate -/obj/item/clothing/head/costume/pirate - var/datum/language/piratespeak/L = new +/obj/item/clothing/head/costume/pirate/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) /obj/item/clothing/head/costume/pirate/equipped(mob/user, slot) . = ..() diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 4744296cdb8ee..629305740318d 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -33,7 +33,7 @@ /obj/item/clothing/head/soft/proc/flip(mob/user) - if(!user.incapacitated()) + if(!user.incapacitated) flipped = !flipped if(flipped) icon_state = "[soft_type][soft_suffix]_flipped" @@ -175,6 +175,7 @@ . = ..() AddComponent(/datum/component/speechmod, replacements = strings("crustacean_replacement.json", "crustacean")) //you asked for this. AddElement(/datum/element/skill_reward, /datum/skill/fishing) + AddComponent(/datum/component/adjust_fishing_difficulty, -4) #define PROPHAT_MOOD "prophat" diff --git a/code/modules/clothing/head/tophat.dm b/code/modules/clothing/head/tophat.dm index 612f02ce692e9..e204673743e58 100644 --- a/code/modules/clothing/head/tophat.dm +++ b/code/modules/clothing/head/tophat.dm @@ -21,7 +21,7 @@ return COOLDOWN_START(src, rabbit_cooldown, RABBIT_CD_TIME) - playsound(get_turf(src), 'sound/weapons/emitter.ogg', 70) + playsound(get_turf(src), 'sound/items/weapons/emitter.ogg', 70) do_smoke(amount = DIAMOND_AREA(1), holder = src, location = src, smoke_type=/obj/effect/particle_effect/fluid/smoke/quick) if(prob(10)) diff --git a/code/modules/clothing/head/welding.dm b/code/modules/clothing/head/welding.dm index e3f014875dde4..000448fd7258d 100644 --- a/code/modules/clothing/head/welding.dm +++ b/code/modules/clothing/head/welding.dm @@ -18,6 +18,11 @@ resistance_flags = FIRE_PROOF clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT +/obj/item/clothing/head/utility/welding/Initialize(mapload) + . = ..() + if(!up) + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /datum/armor/utility_welding melee = 10 fire = 100 @@ -26,6 +31,13 @@ /obj/item/clothing/head/utility/welding/attack_self(mob/user) adjust_visor(user) +/obj/item/clothing/head/utility/welding/adjust_visor(mob/user) + . = ..() + if(up) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) + else + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /obj/item/clothing/head/utility/welding/update_icon_state() . = ..() icon_state = "[initial(icon_state)][up ? "up" : ""]" diff --git a/code/modules/clothing/masks/animal_masks.dm b/code/modules/clothing/masks/animal_masks.dm index 05e5888168e12..5a92c8faf071c 100644 --- a/code/modules/clothing/masks/animal_masks.dm +++ b/code/modules/clothing/masks/animal_masks.dm @@ -133,7 +133,7 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( icon_state = "pig" inhand_icon_state = null animal_sounds = list("Oink!","Squeeeeeeee!","Oink Oink!") - curse_spawn_sound = 'sound/magic/pighead_curse.ogg' + curse_spawn_sound = 'sound/effects/magic/pighead_curse.ogg' flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT /obj/item/clothing/mask/animal/pig/cursed @@ -150,6 +150,18 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( animal_sounds_alt = list("HUUUUU!!","SMOOOOOKIN'!!","Hello my baby, hello my honey, hello my rag-time gal.", "Feels bad, man.", "GIT DIS GUY OFF ME!!" ,"SOMEBODY STOP ME!!", "NORMIES, GET OUT!!") flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT +/obj/item/clothing/mask/animal/frog/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, cursed ? 2 : -2) + +/obj/item/clothing/mask/animal/frog/make_cursed() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + +/obj/item/clothing/mask/animal/frog/clear_curse() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/mask/animal/frog/cursed cursed = TRUE @@ -158,7 +170,7 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( icon_state = "cowmask" inhand_icon_state = null flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - curse_spawn_sound = 'sound/magic/cowhead_curse.ogg' + curse_spawn_sound = 'sound/effects/magic/cowhead_curse.ogg' animal_sounds = list("Moooooooo!","Moo!","Moooo!") /obj/item/clothing/mask/animal/cowmask/cursed @@ -172,7 +184,7 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( inhand_icon_state = null animal_sounds = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEYES|HIDEEARS|HIDESNOUT - curse_spawn_sound = 'sound/magic/horsehead_curse.ogg' + curse_spawn_sound = 'sound/effects/magic/horsehead_curse.ogg' /obj/item/clothing/mask/animal/horsehead/cursed cursed = TRUE @@ -227,6 +239,18 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( inhand_icon_state = null animal_sounds = list("RAWR!","Rawr!","GRR!","Growl!") +/obj/item/clothing/mask/animal/small/bear/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, cursed ? 2 : -2) + +/obj/item/clothing/mask/animal/small/bear/make_cursed() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + +/obj/item/clothing/mask/animal/small/bear/clear_curse() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/mask/animal/small/bear/cursed cursed = TRUE @@ -275,5 +299,17 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list( animal_sounds_alt = list("Eekum-bokum!", "Oomenacka!", "In mah head..... Zombi.... Zombi!") animal_sounds_alt_probability = 5 +/obj/item/clothing/mask/animal/small/tribal/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, cursed ? 4 : -4) + +/obj/item/clothing/mask/animal/small/tribal/make_cursed() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 4) + +/obj/item/clothing/mask/animal/small/tribal/clear_curse() + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) + /obj/item/clothing/mask/animal/small/tribal/cursed //adminspawn only. cursed = TRUE diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 2e75cebf5d98f..46ad60e58deaa 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -24,6 +24,10 @@ w_class = WEIGHT_CLASS_SMALL actions_types = list(/datum/action/item_action/adjust) +/obj/item/clothing/mask/floortilebalaclava/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //tacticool + /obj/item/clothing/mask/floortilebalaclava/attack_self(mob/user) adjust_visor(user) diff --git a/code/modules/clothing/masks/costume.dm b/code/modules/clothing/masks/costume.dm index 844b823880ac4..ff980442565a4 100644 --- a/code/modules/clothing/masks/costume.dm +++ b/code/modules/clothing/masks/costume.dm @@ -38,6 +38,7 @@ icon_state = "kitsune" inhand_icon_state = null w_class = WEIGHT_CLASS_SMALL + adjusted_flags = ITEM_SLOT_HEAD flags_inv = HIDEFACE|HIDEFACIALHAIR custom_price = PAYCHECK_CREW greyscale_colors = "#EEEEEE#AA0000" @@ -45,6 +46,18 @@ greyscale_config_worn = /datum/greyscale_config/kitsune/worn flags_1 = IS_PLAYER_COLORABLE_1 +/obj/item/clothing/mask/kitsune/examine(mob/user) + . = ..() + if(up) + . += "Use in-hand to wear as a mask!" + return + else + . += "Use in-hand to tie it up to wear as a hat!" + +/obj/item/clothing/mask/kitsune/attack_self(mob/user) + adjust_visor(user) + alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : null + /obj/item/clothing/mask/rebellion name = "rebellion mask" desc = "Mask that is usually used during rebellions by insurgents. It covers the entire face and makes you unrecognizable." diff --git a/code/modules/clothing/masks/gas_filter.dm b/code/modules/clothing/masks/gas_filter.dm index 08ae650c24726..e29f80a5ea089 100644 --- a/code/modules/clothing/masks/gas_filter.dm +++ b/code/modules/clothing/masks/gas_filter.dm @@ -53,7 +53,7 @@ /obj/item/gas_filter/examine(mob/user) . = ..() - . += "[src] is at [filter_status]% durability." + . += span_notice("[src] is at [filter_status]% durability.") /** * called by the gas mask where the filter is installed, lower the filter_status depending on the breath gas composition and by the strength of the filter diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index ca01efe5c47f0..1f9711cc7cc01 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -18,6 +18,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( armor_type = /datum/armor/mask_gas flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH | PEPPERPROOF resistance_flags = NONE + voice_filter = "lowpass=f=750,volume=2" ///Max numbers of installable filters var/max_filters = 1 ///List to keep track of each filter @@ -28,19 +29,19 @@ GLOBAL_LIST_INIT(clown_mask_options, list( var/has_fov = TRUE ///Cigarette in the mask var/obj/item/cigarette/cig - voice_filter = "lowpass=f=750,volume=2" + ///How much does this mask affect fishing difficulty + var/fishing_modifier = 2 /datum/armor/mask_gas bio = 100 -/obj/item/clothing/mask/gas/worn_overlays(mutable_appearance/standing, isinhands) - . = ..() - if(!isinhands && cig) - . += cig.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi') - /obj/item/clothing/mask/gas/Initialize(mapload) . = ..() - //init_fov() Bubber edit - NO + //init_fov() BUBBER EDIT - Dear god + + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) + if(!max_filters || !starting_filter_type) return @@ -49,6 +50,11 @@ GLOBAL_LIST_INIT(clown_mask_options, list( LAZYADD(gas_filters, inserted_filter) has_filter = TRUE +/obj/item/clothing/mask/gas/worn_overlays(mutable_appearance/standing, isinhands) + . = ..() + if(!isinhands && cig) + . += cig.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi') + /obj/item/clothing/mask/gas/Destroy() QDEL_LAZYLIST(gas_filters) return..() @@ -222,6 +228,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT resistance_flags = FIRE_PROOF clothing_flags = parent_type::clothing_flags | INTERNALS_ADJUST_EXEMPT + fishing_modifier = 8 /datum/armor/gas_welding melee = 10 @@ -235,7 +242,13 @@ GLOBAL_LIST_INIT(clown_mask_options, list( /obj/item/clothing/mask/gas/welding/adjust_visor(mob/living/user) . = ..() if(.) - playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) + playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 50, TRUE) + if(!fishing_modifier) + return + if(up) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) + else + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /obj/item/clothing/mask/gas/welding/update_icon_state() . = ..() @@ -266,6 +279,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( strip_delay = 60 w_class = WEIGHT_CLASS_SMALL has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/clown_hat name = "clown wig and mask" @@ -285,6 +299,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( has_fov = FALSE var/list/clownmask_designs = list() voice_filter = null // performer masks expect to be talked through + fishing_modifier = 0 /obj/item/clothing/mask/gas/clown_hat/plasmaman starting_filter_type = /obj/item/gas_filter/plasmaman @@ -300,19 +315,15 @@ GLOBAL_LIST_INIT(clown_mask_options, list( ) AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) -// BUBBERSTATION EDIT -//WAS: //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) //SKYRAT EDIT REMOVAL - - /obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user) - if(!istype(user) || user.incapacitated()) + if(!istype(user) || user.incapacitated) return 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)) + if(src && choice && !user.incapacitated && in_range(user,src)) var/list/options = GLOB.clown_mask_options icon_state = options[choice] user.update_worn_mask() @@ -331,6 +342,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/mime name = "mime mask" @@ -344,6 +356,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( actions_types = list(/datum/action/item_action/adjust) species_exception = list(/datum/species/golem) has_fov = FALSE + fishing_modifier = 0 var/list/mimemask_designs = list() /obj/item/clothing/mask/gas/mime/plasmaman @@ -359,7 +372,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( ) /obj/item/clothing/mask/gas/mime/ui_action_click(mob/user) - if(!istype(user) || user.incapacitated()) + if(!istype(user) || user.incapacitated) return var/list/options = list() @@ -372,7 +385,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( if(!choice) return FALSE - if(src && choice && !user.incapacitated() && in_range(user,src)) + if(src && choice && !user.incapacitated && in_range(user,src)) // SKYRAT EDIT ADDITION START - More mask variations var/mob/living/carbon/human/human_user = user if(human_user.dna.species.mutant_bodyparts["snout"]) @@ -402,6 +415,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/sexymime name = "sexy mime mask" @@ -413,6 +427,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( resistance_flags = FLAMMABLE species_exception = list(/datum/species/golem) has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/cyborg name = "cyborg visor" @@ -421,6 +436,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( resistance_flags = FLAMMABLE has_fov = FALSE flags_cover = MASKCOVERSEYES + fishing_modifier = 0 /obj/item/clothing/mask/gas/owl_mask name = "owl mask" @@ -431,6 +447,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = -1 /obj/item/clothing/mask/gas/carp name = "carp mask" @@ -439,6 +456,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( inhand_icon_state = null has_fov = FALSE flags_cover = MASKCOVERSEYES + fishing_modifier = -3 /obj/item/clothing/mask/gas/tiki_mask name = "tiki mask" @@ -452,6 +470,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( max_integrity = 100 actions_types = list(/datum/action/item_action/adjust) dog_fashion = null + fishing_modifier = -2 var/list/tikimask_designs = list() /obj/item/clothing/mask/gas/tiki_mask/Initialize(mapload) @@ -494,6 +513,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( resistance_flags = FIRE_PROOF | ACID_PROOF flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR|HIDESNOUT has_fov = FALSE + fishing_modifier = -2 /obj/item/clothing/mask/gas/prop name = "prop gas mask" @@ -504,6 +524,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSMOUTH resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/atmosprop name = "prop atmospheric gas mask" @@ -515,6 +536,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_cover = MASKCOVERSMOUTH resistance_flags = FLAMMABLE has_fov = FALSE + fishing_modifier = 0 /obj/item/clothing/mask/gas/driscoll name = "driscoll mask" @@ -523,3 +545,4 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_inv = HIDEFACIALHAIR w_class = WEIGHT_CLASS_NORMAL inhand_icon_state = null + fishing_modifier = 0 diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index cbfbc166cbcab..aee1ac17b1b3e 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -57,7 +57,8 @@ GLOBAL_LIST_INIT(hailer_phrases, list( visor_flags_cover = MASKCOVERSMOUTH tint = 0 has_fov = FALSE - unique_death = 'sound/voice/sec_death.ogg' + fishing_modifier = 0 + unique_death = 'sound/items/sec_hailer/sec_death.ogg' COOLDOWN_DECLARE(hailer_cooldown) ///Decides the phrases available for use; defines used are the last index of a category of available phrases var/aggressiveness = AGGR_BAD_COP @@ -86,6 +87,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( visor_flags_inv = 0 flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + fishing_modifier = 2 /obj/item/clothing/mask/gas/sechailer/swat/spacepol name = "spacepol mask" @@ -103,6 +105,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( slot_flags = null aggressiveness = AGGR_GOOD_COP // Borgs are nicecurity! actions_types = list(/datum/action/item_action/halt) + fishing_modifier = 0 /obj/item/clothing/mask/gas/sechailer/screwdriver_act(mob/living/user, obj/item/I) . = ..() @@ -207,7 +210,7 @@ GLOBAL_LIST_INIT(hailer_phrases, list( return COOLDOWN_START(src, whistle_cooldown, 10 SECONDS) user.audible_message("HALT!") - playsound(src, 'sound/misc/whistle.ogg', 50, FALSE, 4) + playsound(src, 'sound/items/whistle/whistle.ogg', 50, FALSE, 4) /datum/action/item_action/halt name = "HALT!" diff --git a/code/modules/clothing/masks/muzzle.dm b/code/modules/clothing/masks/muzzle.dm index 6154e7762cb52..05bdd086efe86 100644 --- a/code/modules/clothing/masks/muzzle.dm +++ b/code/modules/clothing/masks/muzzle.dm @@ -62,7 +62,7 @@ . = ..() if(user.get_item_by_slot(ITEM_SLOT_MASK) != src) return - playsound(user, 'sound/items/duct_tape_rip.ogg', 50, TRUE) + playsound(user, 'sound/items/duct_tape/duct_tape_rip.ogg', 50, TRUE) if(harmful_strip) user.apply_damage(stripping_damage, BRUTE, BODY_ZONE_HEAD) INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, emote), "scream") diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 3ea26de01c554..64a4b65a008a8 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -213,6 +213,10 @@ desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing." icon_state = "stethoscope" +/obj/item/clothing/neck/stethoscope/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/neck/stethoscope/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] puts \the [src] to [user.p_their()] chest! It looks like [user.p_they()] won't hear much!")) return OXYLOSS @@ -454,6 +458,10 @@ /obj/item/clothing/neck/petcollar/attack_self(mob/user) tagname = sanitize_name(tgui_input_text(user, "Would you like to change the name on the tag?", "Pet Naming", "Spot", MAX_NAME_LEN)) + if (!tagname || !length(tagname)) + name = initial(name) + tagname = null + return name = "[initial(name)] - [tagname]" ////////////// diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 13c92994eb603..2b24ec6710fbd 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -104,6 +104,8 @@ l_pocket = /obj/item/healthanalyzer/advanced additional_radio = /obj/item/encryptionkey/heads/cmo + skillchips = list(/obj/item/skillchip/entrails_reader) + /datum/outfit/centcom/ert/medic/alert name = "ERT Medic - High Alert" @@ -133,6 +135,9 @@ l_pocket = /obj/item/rcd_ammo/large additional_radio = /obj/item/encryptionkey/heads/ce + + skillchips = list(/obj/item/skillchip/job/engineer) + /datum/outfit/centcom/ert/engineer/alert name = "ERT Engineer - High Alert" @@ -520,6 +525,9 @@ glasses = /obj/item/clothing/glasses/hud/health/sunglasses additional_radio = /obj/item/encryptionkey/heads/cmo + + skillchips = list(/obj/item/skillchip/entrails_reader) + /datum/outfit/centcom/ert/marine/engineer name = "Marine Engineer" @@ -533,6 +541,8 @@ glasses = /obj/item/clothing/glasses/hud/diagnostic/sunglasses additional_radio = /obj/item/encryptionkey/heads/ce + skillchips = list(/obj/item/skillchip/job/engineer) + /datum/outfit/centcom/militia name = "Militia Man" @@ -563,3 +573,72 @@ head = /obj/item/clothing/head/beret/militia l_hand = /obj/item/megaphone suit_store = /obj/item/gun/energy/laser/musket/prime + +/datum/outfit/centcom/ert/medical_commander + name = "Chief EMT" + id = /obj/item/card/id/advanced/centcom/ert/medical + uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer + l_pocket = /obj/item/healthanalyzer/advanced + shoes = /obj/item/clothing/shoes/sneakers/white + backpack_contents = list( + /obj/item/reagent_containers/hypospray/combat = 1, + /obj/item/storage/medkit/regular = 1, + /obj/item/storage/medkit/advanced = 1, + /obj/item/melee/baton/telescopic = 1, + /obj/item/gun/energy/pulse/pistol/loyalpin = 1, + /obj/item/stack/medical/poultice = 1, //These stacks contain 15 by default. Great for getting corpses to defib range without surgery. + ) + belt = /obj/item/storage/belt/medical/ert + glasses = /obj/item/clothing/glasses/hud/health/sunglasses + additional_radio = /obj/item/encryptionkey/heads/cmo + mask = /obj/item/clothing/mask/surgical + back = /obj/item/mod/control/pre_equipped/emergency_medical/corpsman + gloves = null + suit = null + head = null + suit_store = /obj/item/tank/internals/oxygen + +/datum/outfit/centcom/ert/medical_technician + name = "EMT Paramedic" + id = /obj/item/card/id/advanced/centcom/ert/medical + uniform = /obj/item/clothing/under/rank/medical/scrubs/blue + l_pocket = /obj/item/healthanalyzer + backpack_contents = list( + /obj/item/reagent_containers/hypospray/combat = 1, + /obj/item/storage/medkit/regular = 1, + /obj/item/reagent_containers/syringe = 1, + /obj/item/reagent_containers/cup/bottle/formaldehyde = 1, + /obj/item/reagent_containers/medigel/sterilizine = 1, + /obj/item/bodybag = 2, + ) + mask = /obj/item/clothing/mask/surgical + belt = /obj/item/storage/belt/medical/ert + glasses = /obj/item/clothing/glasses/hud/health + additional_radio = /obj/item/encryptionkey/heads/cmo + shoes = /obj/item/clothing/shoes/sneakers/blue + back = /obj/item/mod/control/pre_equipped/emergency_medical + gloves = null + suit = null + head = null + suit_store = /obj/item/tank/internals/oxygen + +/obj/item/mod/control/pre_equipped/emergency_medical + theme = /datum/mod_theme/medical + starting_frequency = MODLINK_FREQ_CENTCOM + applied_cell = /obj/item/stock_parts/power_store/cell/hyper + applied_modules = list( + /obj/item/mod/module/organizer, + /obj/item/mod/module/defibrillator, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/health_analyzer, + /obj/item/mod/module/injector, + /obj/item/mod/module/surgical_processor/emergency, + /obj/item/mod/module/storage/large_capacity, + ) + +/obj/item/mod/control/pre_equipped/emergency_medical/corpsman + theme = /datum/mod_theme/medical/corpsman + +///Identical to medical MODsuit, but uses the alternate skin by default. +/datum/mod_theme/medical/corpsman + default_skin = "corpsman" diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm index fa07b3297b285..b99ea6f526202 100644 --- a/code/modules/clothing/outfits/event.dm +++ b/code/modules/clothing/outfits/event.dm @@ -18,7 +18,7 @@ if(visualsOnly) return user.fully_replace_character_name(user.real_name, "Santa Claus") - user.mind.set_assigned_role(SSjob.GetJobType(/datum/job/santa)) + user.mind.set_assigned_role(SSjob.get_job_type(/datum/job/santa)) user.mind.special_role = ROLE_SANTA user.hairstyle = "Long Hair 3" diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm index 1b2e0ead14883..a0e927c631938 100644 --- a/code/modules/clothing/outfits/plasmaman.dm +++ b/code/modules/clothing/outfits/plasmaman.dm @@ -302,3 +302,15 @@ uniform = /obj/item/clothing/under/plasmaman //same gloves = /obj/item/clothing/gloves/color/plasmaman/black head = /obj/item/clothing/head/helmet/space/plasmaman + +/datum/outfit/plasmaman/medical_commander + name = "Chief EMT Plasmaman" + uniform = /obj/item/clothing/under/plasmaman/chief_medical_officer + gloves = /obj/item/clothing/gloves/color/plasmaman/white + head = /obj/item/clothing/head/helmet/space/plasmaman/chief_medical_officer + +/datum/outfit/plasmaman/medical_technician + name = "EMT Paramedic Plasmaman" + uniform = /obj/item/clothing/under/plasmaman/medical + gloves = /obj/item/clothing/gloves/color/plasmaman/white + head = /obj/item/clothing/head/helmet/space/plasmaman/medical diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 28bd5e8b85c64..c9155b57ab737 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -44,7 +44,7 @@ user.visible_message(span_suicide("[user] is bashing [user.p_their()] own head in with [src]! Ain't that a kick in the head?")) for(var/i in 1 to 3) sleep(0.3 SECONDS) - playsound(user, 'sound/weapons/genhit2.ogg', 50, TRUE) + playsound(user, 'sound/items/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) @@ -91,7 +91,7 @@ /obj/item/clothing/shoes/proc/restore_offsets(mob/user) equipped_before_drop = FALSE user.pixel_y -= offset - worn_y_dimension = world.icon_size + worn_y_dimension = ICON_SIZE_Y /obj/item/clothing/shoes/dropped(mob/user) var/atom/movable/screen/alert/our_alert = our_alert_ref?.resolve() diff --git a/code/modules/clothing/shoes/boots.dm b/code/modules/clothing/shoes/boots.dm index 03f174aa43c31..68a7b1bb0aefd 100644 --- a/code/modules/clothing/shoes/boots.dm +++ b/code/modules/clothing/shoes/boots.dm @@ -72,6 +72,10 @@ icon_state = "ftc_boots" inhand_icon_state = null +/obj/item/clothing/shoes/jackboots/floortile/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) //tacticool + /obj/item/clothing/shoes/winterboots name = "winter boots" desc = "Boots lined with 'synthetic' animal fur." @@ -175,6 +179,10 @@ icon_state = "pirateboots" inhand_icon_state = null +/obj/item/clothing/shoes/pirate/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/shoes/pirate/armored armor_type = /datum/armor/shoes_pirate strip_delay = 40 diff --git a/code/modules/clothing/shoes/clown.dm b/code/modules/clothing/shoes/clown.dm index 8aad27d716822..93ccf96dacf49 100644 --- a/code/modules/clothing/shoes/clown.dm +++ b/code/modules/clothing/shoes/clown.dm @@ -15,6 +15,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) + AddComponent(/datum/component/adjust_fishing_difficulty, 3) //Goofy // BUBBERSTATION EDIT //WAS: //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) //SKYRAT EDIT REMOVAL diff --git a/code/modules/clothing/shoes/costume.dm b/code/modules/clothing/shoes/costume.dm index bf8000d9a0800..3c66c0ac0c6b5 100644 --- a/code/modules/clothing/shoes/costume.dm +++ b/code/modules/clothing/shoes/costume.dm @@ -44,7 +44,8 @@ /obj/item/clothing/shoes/bronze/Initialize(mapload) . = ..() - AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/effects/magic/clockwork/fellowship_armory.ogg' = 1), 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + AddComponent(/datum/component/adjust_fishing_difficulty, 4) /obj/item/clothing/shoes/cookflops desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!" @@ -128,6 +129,7 @@ create_storage(storage_type = /datum/storage/pockets/shoes) LoadComponent(/datum/component/squeak, list('sound/effects/quack.ogg' = 1), 50, falloff_exponent = 20) + AddComponent(/datum/component/adjust_fishing_difficulty, -6) //deploy tactical duckling lure /obj/item/clothing/shoes/ducky_shoes/equipped(mob/living/user, slot) . = ..() diff --git a/code/modules/clothing/shoes/cult.dm b/code/modules/clothing/shoes/cult.dm index 80d03d3a09e25..f1a856b42688b 100644 --- a/code/modules/clothing/shoes/cult.dm +++ b/code/modules/clothing/shoes/cult.dm @@ -1,5 +1,5 @@ /obj/item/clothing/shoes/cult - name = "\improper Nar'Sien invoker boots" + name = "\improper Nar'Sian boots" desc = "A pair of boots worn by the followers of Nar'Sie." icon_state = "cult" inhand_icon_state = null @@ -10,7 +10,7 @@ lace_time = 10 SECONDS /obj/item/clothing/shoes/cult/alt - name = "cultist boots" + name = "\improper Nar'Sian invoker boots" icon_state = "cultalt" /obj/item/clothing/shoes/cult/alt/ghost diff --git a/code/modules/clothing/shoes/galoshes.dm b/code/modules/clothing/shoes/galoshes.dm index e743db6b7424c..d42b8ffddb388 100644 --- a/code/modules/clothing/shoes/galoshes.dm +++ b/code/modules/clothing/shoes/galoshes.dm @@ -12,11 +12,18 @@ can_be_bloody = FALSE custom_price = PAYCHECK_CREW * 3 can_be_tied = FALSE + ///How much these boots affect fishing difficulty + var/fishing_modifier = -3 + +/obj/item/clothing/shoes/galoshes/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /obj/item/clothing/shoes/galoshes/dry name = "absorbent galoshes" desc = "A pair of purple rubber boots, designed to prevent slipping on wet surfaces while also drying them." icon_state = "galoshes_dry" + fishing_modifier = -6 /datum/armor/shoes_galoshes bio = 100 diff --git a/code/modules/clothing/shoes/jumpboots.dm b/code/modules/clothing/shoes/jumpboots.dm index 3446c2e7c7873..dc9dadcea5a53 100644 --- a/code/modules/clothing/shoes/jumpboots.dm +++ b/code/modules/clothing/shoes/jumpboots.dm @@ -36,6 +36,7 @@ user.visible_message(span_warning("[usr] dashes forward into the air!")) recharging_time = world.time + recharging_rate else + REMOVE_TRAIT(user, TRAIT_MOVE_FLOATING, LEAPING_TRAIT) to_chat(user, span_warning("Something prevents you from dashing forward!")) /obj/item/clothing/shoes/bhop/rocket diff --git a/code/modules/clothing/shoes/laceup.dm b/code/modules/clothing/shoes/laceup.dm index 7ee348ea6c434..808bf22f5080d 100644 --- a/code/modules/clothing/shoes/laceup.dm +++ b/code/modules/clothing/shoes/laceup.dm @@ -3,3 +3,7 @@ desc = "The height of fashion, and they're pre-polished!" icon_state = "laceups" equip_delay_other = 50 + +/obj/item/clothing/shoes/laceup/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) //You aren't going to fish with these are you? diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 2ae13924dedc9..38d4770244abd 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -20,18 +20,30 @@ var/slowdown_active = 2 /// A list of traits we apply when we get activated var/list/active_traits = list(TRAIT_NO_SLIP_WATER, TRAIT_NO_SLIP_ICE, TRAIT_NO_SLIP_SLIDE, TRAIT_NEGATES_GRAVITY) + /// How much do these boots affect fishing when active + var/magpulse_fishing_modifier = 8 + /// How much do these boots affect fishing when not active + var/fishing_modifier = 4 /obj/item/clothing/shoes/magboots/Initialize(mapload) . = ..() AddElement(/datum/element/update_icon_updates_onmob) RegisterSignal(src, COMSIG_SPEED_POTION_APPLIED, PROC_REF(on_speed_potioned)) + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /// Signal handler for [COMSIG_SPEED_POTION_APPLIED]. Speed potion removes the active slowdown /obj/item/clothing/shoes/magboots/proc/on_speed_potioned(datum/source) SIGNAL_HANDLER - slowdown_active = 0 // Don't need to touch the actual slowdown here, since the speed potion does it for us + slowdown_active = 0 + + if(magpulse && magpulse_fishing_modifier) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) + magpulse_fishing_modifier = fishing_modifier /obj/item/clothing/shoes/magboots/verb/toggle() set name = "Toggle Magboots" @@ -47,7 +59,15 @@ if(magpulse) attach_clothing_traits(active_traits) slowdown += slowdown_active + if(magpulse_fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, magpulse_fishing_modifier) + else if(magpulse_fishing_modifier != fishing_modifier) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) else + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) + else if(magpulse_fishing_modifier != fishing_modifier) + qdel(GetComponent(/datum/component/adjust_fishing_difficulty)) detach_clothing_traits(active_traits) slowdown = max(initial(slowdown), slowdown - slowdown_active) // Just in case, for speed pot shenanigans @@ -71,9 +91,13 @@ base_icon_state = "advmag" slowdown_active = SHOES_SLOWDOWN // ZERO active slowdown resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + magpulse_fishing_modifier = 3 + fishing_modifier = 0 /obj/item/clothing/shoes/magboots/syndie name = "blood-red magboots" desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders." icon_state = "syndiemag0" base_icon_state = "syndiemag" + magpulse_fishing_modifier = 6 + fishing_modifier = 3 diff --git a/code/modules/clothing/shoes/wheelys.dm b/code/modules/clothing/shoes/wheelys.dm index 9b67f14d14415..9f5bd1631f9c1 100644 --- a/code/modules/clothing/shoes/wheelys.dm +++ b/code/modules/clothing/shoes/wheelys.dm @@ -51,7 +51,7 @@ worn_icon_state = "[initial(worn_icon_state)]-on" else worn_icon_state = "[initial(worn_icon_state)]" - playsound(src, 'sound/weapons/tap.ogg', 10, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 10, TRUE) update_appearance() /obj/item/clothing/shoes/wheelys/Destroy() diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 4b8fe43bd96ee..348de7bd032fc 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -25,6 +25,13 @@ resistance_flags = NONE dog_fashion = null slowdown = 0.5 + ///How much this helmet affects fishing difficulty + var/fishing_modifier = 3 + +/obj/item/clothing/head/helmet/space/Initialize(mapload) + . = ..() + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) /datum/armor/helmet_space bio = 100 @@ -70,6 +77,8 @@ var/thermal_on = FALSE /// If this is FALSE the batery status UI will be disabled. This is used for suits that don't use bateries like the changeling's flesh suit mutation. var/show_hud = TRUE + ///How much this suit affects fishing difficulty + var/fishing_modifier = 5 /datum/armor/suit_space bio = 100 @@ -81,6 +90,9 @@ if(ispath(cell)) cell = new cell(src) + if(fishing_modifier) + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) + /// Start Processing on the space suit when it is worn to heat the wearer /obj/item/clothing/suit/space/equipped(mob/living/user, slot) . = ..() diff --git a/code/modules/clothing/spacesuits/freedom.dm b/code/modules/clothing/spacesuits/freedom.dm index b0a08f4cc7367..085b9c8deb7c2 100644 --- a/code/modules/clothing/spacesuits/freedom.dm +++ b/code/modules/clothing/spacesuits/freedom.dm @@ -9,6 +9,7 @@ strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = ACID_PROOF | FIRE_PROOF + fishing_modifier = 0 /datum/armor/space_freedom melee = 20 @@ -31,3 +32,4 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = ACID_PROOF | FIRE_PROOF slowdown = 0 + fishing_modifier = 0 diff --git a/code/modules/clothing/spacesuits/pirate.dm b/code/modules/clothing/spacesuits/pirate.dm index 73feec525c548..8ead0aeaa6619 100644 --- a/code/modules/clothing/spacesuits/pirate.dm +++ b/code/modules/clothing/spacesuits/pirate.dm @@ -7,6 +7,7 @@ armor_type = /datum/armor/space_pirate strip_delay = 40 equip_delay_other = 20 + fishing_modifier = -2 /datum/armor/space_pirate melee = 30 @@ -31,6 +32,7 @@ armor_type = /datum/armor/space_pirate strip_delay = 40 equip_delay_other = 20 + fishing_modifier = -3 /obj/item/clothing/head/helmet/space/pirate/tophat name = "designer pirate helmet" @@ -39,7 +41,7 @@ /obj/item/clothing/suit/space/pirate/silverscale name = "designer pirate suit" - desc = "A specially-made Cybersun branded space suit; the fine plastisilk exterior is woven from the coccons of black-market Lümlan mothroaches \ - and the trim is lined with the ivory of the critically endagered Zanzibarian dwarf elephant. Baby seal leather boots sold seperately." + desc = "A specially-made Cybersun branded space suit; the fine plastisilk exterior is woven from the cocoons of black-market Lümlan mothroaches \ + and the trim is lined with the ivory of the critically endangered Zanzibarian dwarf elephant. Baby seal leather boots sold separately." inhand_icon_state = "syndicate-black" icon_state = "syndicate-black-white" diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 380cd0cf3fb53..88767b84b66d5 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -8,6 +8,7 @@ resistance_flags = FIRE_PROOF icon_state = "plasmaman_suit" inhand_icon_state = "plasmaman_suit" + fishing_modifier = 0 var/next_extinguish = 0 var/extinguish_cooldown = 100 var/extinguishes_left = 10 @@ -57,6 +58,7 @@ light_power = 0.8 light_color = "#ffcc99" light_on = FALSE + fishing_modifier = 0 var/helmet_on = FALSE var/smile = FALSE var/smile_color = COLOR_RED @@ -68,6 +70,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF visor_flags_inv = HIDEEYES|HIDEFACE + slowdown = 0 /datum/armor/space_plasmaman bio = 100 @@ -78,7 +81,6 @@ . = ..() visor_toggling() update_appearance() - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /obj/item/clothing/head/helmet/space/plasmaman/examine() . = ..() @@ -106,7 +108,7 @@ to_chat(user, span_notice("Your helmet's torch can't pass through your welding visor!")) set_light_on(FALSE) helmet_on = FALSE - playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing + playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing update_appearance() /obj/item/clothing/head/helmet/space/plasmaman/update_icon_state() @@ -194,13 +196,13 @@ update_item_action_buttons() -/obj/item/clothing/head/helmet/space/plasmaman/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/item/clothing/head/helmet/space/plasmaman/on_saboteur(datum/source, disrupt_duration) + . = ..() if(!helmet_on) - return + return FALSE helmet_on = FALSE update_appearance() - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/item/clothing/head/helmet/space/plasmaman/attack_hand_secondary(mob/user) ..() diff --git a/code/modules/clothing/spacesuits/santa.dm b/code/modules/clothing/spacesuits/santa.dm index f6bd1657606c5..08f01cc1869bb 100644 --- a/code/modules/clothing/spacesuits/santa.dm +++ b/code/modules/clothing/spacesuits/santa.dm @@ -8,6 +8,7 @@ flags_cover = HEADCOVERSEYES dog_fashion = /datum/dog_fashion/head/santa slowdown = 0 + fishing_modifier = 0 /obj/item/clothing/head/helmet/space/santahat/beardless icon = 'icons/obj/clothing/head/costume.dmi' @@ -26,3 +27,4 @@ inhand_icon_state = "santa" slowdown = 0 allowed = list(/obj/item) //for stuffing exta special presents + fishing_modifier = 0 diff --git a/code/modules/clothing/spacesuits/softsuit.dm b/code/modules/clothing/spacesuits/softsuit.dm index 0b644286063ec..3bbb6d0bd0f90 100644 --- a/code/modules/clothing/spacesuits/softsuit.dm +++ b/code/modules/clothing/spacesuits/softsuit.dm @@ -95,5 +95,5 @@ name = "torn [src]." desc = "A bulky suit meant to protect the user during emergency situations, at least until someone tore a hole in the suit." torn = TRUE - playsound(loc, 'sound/weapons/slashmiss.ogg', 50, TRUE) + playsound(loc, 'sound/items/weapons/slashmiss.ogg', 50, TRUE) playsound(loc, 'sound/effects/refill.ogg', 50, TRUE) diff --git a/code/modules/clothing/spacesuits/specialops.dm b/code/modules/clothing/spacesuits/specialops.dm index caaa32cc24be2..dbe02400aa664 100644 --- a/code/modules/clothing/spacesuits/specialops.dm +++ b/code/modules/clothing/spacesuits/specialops.dm @@ -13,6 +13,7 @@ strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF + fishing_modifier = 0 /datum/armor/space_beret melee = 80 @@ -41,6 +42,7 @@ strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF + fishing_modifier = 0 /datum/armor/space_officer melee = 80 diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 0d33f0e5f5117..b1cbc76399bd8 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -59,6 +59,16 @@ /obj/item/clothing/suit/armor/vest/alt/sec icon_state = "armor_sec" +/obj/item/clothing/suit/armor/vest/press + name = "press armor vest" + desc = "A blue armor vest used to distinguish non-combatant \"PRESS\" members, like if anyone cares." + icon_state = "armor_press" + +/obj/item/clothing/suit/armor/vest/press/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/armor/vest/marine name = "tactical armor vest" desc = "A set of the finest mass produced, stamped plasteel armor plates, containing an environmental protection unit for all-condition door kicking." @@ -308,6 +318,10 @@ equip_delay_other = 60 clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED) +/obj/item/clothing/suit/armor/riot/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 5) + /datum/armor/armor_riot melee = 50 bullet = 10 @@ -347,7 +361,7 @@ return ..() /obj/item/clothing/suit/armor/balloon_vest/proc/pop() - playsound(src, 'sound/effects/cartoon_pop.ogg', 50, vary = TRUE) + playsound(src, 'sound/effects/cartoon_sfx/cartoon_pop.ogg', 50, vary = TRUE) qdel(src) @@ -427,6 +441,10 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED) +/obj/item/clothing/suit/armor/swat/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 5) + //All of the armor below is mostly unused @@ -568,6 +586,10 @@ armor_type = /datum/armor/vest_durathread dog_fashion = null +/obj/item/clothing/suit/armor/vest/durathread/Initialize(mapload) + . = ..() + allowed |= /obj/item/clothing/suit/apron::allowed + /datum/armor/vest_durathread melee = 20 bullet = 10 @@ -709,6 +731,10 @@ /obj/item/gun/ballistic/bow ) +/obj/item/clothing/suit/armor/vest/military/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 5) + /datum/armor/military melee = 45 bullet = 25 diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index d82dd048e7268..2ca604505347e 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -18,6 +18,7 @@ . = ..() if(flags_inv & HIDEFACE) AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES) + AddComponent(/datum/component/adjust_fishing_difficulty, 6) /datum/armor/head_bio_hood bio = 100 @@ -37,11 +38,15 @@ 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 strip_delay = 70 equip_delay_other = 70 resistance_flags = ACID_PROOF +/obj/item/clothing/suit/bio_suit/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 6) + //Standard biosuit, orange stripe /datum/armor/suit_bio_suit bio = 100 diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index 75c1c5d850d4f..4c85ed7422281 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -44,6 +44,7 @@ armor_type = /datum/armor/pirate_armored strip_delay = 40 equip_delay_other = 20 + species_exception = null /obj/item/clothing/suit/costume/pirate/captain name = "pirate captain coat" @@ -55,6 +56,7 @@ armor_type = /datum/armor/pirate_armored strip_delay = 40 equip_delay_other = 20 + species_exception = null /obj/item/clothing/suit/costume/cyborg_suit name = "cyborg suit" @@ -166,6 +168,7 @@ body_parts_covered = CHEST|GROIN|LEGS flags_inv = HIDEJUMPSUIT dog_fashion = /datum/dog_fashion/back + var/in_use = FALSE /obj/item/clothing/suit/costume/cardborg/equipped(mob/living/user, slot) ..() @@ -174,17 +177,33 @@ /obj/item/clothing/suit/costume/cardborg/dropped(mob/living/user) ..() + if (!in_use) + return user.remove_alt_appearance("standard_borg_disguise") - -/obj/item/clothing/suit/costume/cardborg/proc/disguise(mob/living/carbon/human/H, obj/item/clothing/head/costume/cardborg/borghead) - if(istype(H)) - if(!borghead) - borghead = H.head - if(istype(borghead, /obj/item/clothing/head/costume/cardborg)) //why is this done this way? because equipped() is called BEFORE THE ITEM IS IN THE SLOT WHYYYY - var/image/I = image(icon = 'icons/mob/silicon/robots.dmi' , icon_state = "robot", loc = H) - I.override = 1 - I.add_overlay(mutable_appearance('icons/mob/silicon/robots.dmi', "robot_e")) //gotta look realistic - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "standard_borg_disguise", I) //you look like a robot to robots! (including yourself because you're totally a robot) + in_use = FALSE + var/mob/living/carbon/human/human_user = user + if (istype(human_user.head, /obj/item/clothing/head/costume/cardborg)) + UnregisterSignal(human_user.head, COMSIG_ITEM_DROPPED) + +/obj/item/clothing/suit/costume/cardborg/proc/disguise(mob/living/carbon/human/human_user, obj/item/clothing/head/costume/cardborg/borghead) + if(!istype(human_user)) + return + if(!borghead) + borghead = human_user.head + if(!istype(borghead, /obj/item/clothing/head/costume/cardborg)) //why is this done this way? because equipped() is called BEFORE THE ITEM IS IN THE SLOT WHYYYY + return + RegisterSignal(borghead, COMSIG_ITEM_DROPPED, PROC_REF(helmet_drop)) // Don't need to worry about qdeleting since dropped will be called from there + in_use = TRUE + var/image/override_image = image(icon = 'icons/mob/silicon/robots.dmi' , icon_state = "robot", loc = human_user) + override_image.override = TRUE + override_image.add_overlay(mutable_appearance('icons/mob/silicon/robots.dmi', "robot_e")) //gotta look realistic + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "standard_borg_disguise", override_image) //you look like a robot to robots! (including yourself because you're totally a robot) + +/obj/item/clothing/suit/costume/cardborg/proc/helmet_drop(datum/source, mob/living/user) + SIGNAL_HANDLER + UnregisterSignal(source, COMSIG_ITEM_DROPPED) + user.remove_alt_appearance("standard_borg_disguise") + in_use = FALSE /obj/item/clothing/suit/costume/snowman name = "snowman outfit" @@ -244,6 +263,10 @@ allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/rifle/boltaction/harpoon) hoodtype = /obj/item/clothing/head/hooded/carp_hood +/obj/item/clothing/suit/hooded/carp_costume/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/head/hooded/carp_hood name = "carp hood" desc = "A hood attached to a carp costume." @@ -255,6 +278,10 @@ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS +/obj/item/clothing/head/hooded/carp_hood/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/head/hooded/carp_hood/equipped(mob/living/carbon/human/user, slot) ..() if (slot & ITEM_SLOT_HEAD) @@ -375,6 +402,10 @@ clothing_flags = THICKMATERIAL hoodtype = /obj/item/clothing/head/hooded/shark_hood +/obj/item/clothing/suit/hooded/shark_costume/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + /obj/item/clothing/head/hooded/shark_hood name = "shark hood" desc = "A hood attached to a shark costume." @@ -385,6 +416,10 @@ clothing_flags = THICKMATERIAL flags_inv = HIDEHAIR|HIDEEARS +/obj/item/clothing/head/hooded/shark_hood/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/suit/hooded/shork_costume // Oh God Why name = "shork costume" desc = "Why would you ever do this?" @@ -396,6 +431,10 @@ clothing_flags = THICKMATERIAL hoodtype = /obj/item/clothing/head/hooded/shork_hood +/obj/item/clothing/suit/hooded/shork_costume/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 2) + /obj/item/clothing/head/hooded/shork_hood name = "shork hood" desc = "A hood attached to a shork costume." @@ -406,6 +445,10 @@ clothing_flags = THICKMATERIAL flags_inv = HIDEHAIR|HIDEEARS +/obj/item/clothing/head/hooded/shork_hood/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 3) + /obj/item/clothing/suit/hooded/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!? name = "bloated human suit" desc = "A horribly bloated suit made from human skins." @@ -509,6 +552,14 @@ name = "bronze suit" desc = "A big and clanky suit made of bronze that offers no protection and looks very unfashionable. Nice." icon_state = "clockwork_cuirass_old" + allowed = list( + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/tank/jetpack/oxygen/captain, + /obj/item/storage/belt/holster, + //new + /obj/item/toy/clockwork_watch, + ) armor_type = /datum/armor/costume_bronze /obj/item/clothing/suit/hooded/mysticrobe @@ -562,6 +613,10 @@ flags_1 = IS_PLAYER_COLORABLE_1 species_exception = list(/datum/species/golem) +/obj/item/clothing/suit/costume/hawaiian/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/suit/costume/football_armor name = "football protective gear" desc = "Given to members of the football team!" diff --git a/code/modules/clothing/suits/ethereal.dm b/code/modules/clothing/suits/ethereal.dm index 6c53329a13e7d..1c86ca34094f3 100644 --- a/code/modules/clothing/suits/ethereal.dm +++ b/code/modules/clothing/suits/ethereal.dm @@ -14,6 +14,7 @@ /obj/item/clothing/suit/hooded/ethereal_raincoat/Initialize(mapload) . = ..() update_icon(UPDATE_OVERLAYS) + AddComponent(/datum/component/adjust_fishing_difficulty, -3) /obj/item/clothing/suit/hooded/ethereal_raincoat/worn_overlays(mutable_appearance/standing, isinhands, icon_file) . = ..() @@ -28,6 +29,11 @@ name = "trailwarden oilcoat" desc = "A masterfully handcrafted oilslick coat, supposedly makes for excellent camouflage among Sprout's vegetation. You can hear a faint electrical buzz emanating from the luminescent pattern." greyscale_colors = "#32a87d" + hoodtype = /obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden + +/obj/item/clothing/suit/hooded/ethereal_raincoat/trailwarden/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -5) /obj/item/clothing/suit/hooded/ethereal_raincoat/trailwarden/equipped(mob/living/user, slot) . = ..() @@ -45,3 +51,9 @@ worn_icon = 'icons/mob/clothing/head/ethereal.dmi' body_parts_covered = HEAD flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR + +/obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden + +/obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) diff --git a/code/modules/clothing/suits/ghostsheet.dm b/code/modules/clothing/suits/ghostsheet.dm index 65213fd176dba..965adc9b7e2ff 100644 --- a/code/modules/clothing/suits/ghostsheet.dm +++ b/code/modules/clothing/suits/ghostsheet.dm @@ -16,6 +16,7 @@ . = ..() if(check_holidays(HALLOWEEN)) update_icon(UPDATE_OVERLAYS) + AddComponent(/datum/component/adjust_fishing_difficulty, 8) /obj/item/clothing/suit/costume/ghost_sheet/worn_overlays(mutable_appearance/standing, isinhands, icon_file) . = ..() diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm index 9004f773e35ba..176661dbb57e1 100644 --- a/code/modules/clothing/suits/jacket.dm +++ b/code/modules/clothing/suits/jacket.dm @@ -62,6 +62,7 @@ /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/gun/energy/laser/musket, /obj/item/radio, ) @@ -83,6 +84,7 @@ /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/gun/energy/laser/musket, /obj/item/radio, ) @@ -129,6 +131,7 @@ /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/gun/energy/laser/musket, /obj/item/radio, ) @@ -163,6 +166,7 @@ /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/gun/energy/laser/musket, /obj/item/radio, ) diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index cc94b200969ba..2ba150ab692ee 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -52,6 +52,10 @@ greyscale_colors = "#313c6e" flags_1 = IS_PLAYER_COLORABLE_1 +/obj/item/clothing/suit/apron/overalls/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) + //Captain /obj/item/clothing/suit/jacket/capjacket name = "captain's parade jacket" @@ -191,6 +195,11 @@ if(!isinhands) . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha) +/obj/item/clothing/suit/hazardvest/press // Variant used by the Curator + name = "press hazard vest" + desc = "A blue high-visibility vest used to distinguish non-combatant \"PRESS\" members, like if anyone cares." + icon_state = "hazard_press" + //Lawyer /obj/item/clothing/suit/toggle/lawyer name = "blue formal suit jacket" @@ -344,6 +353,10 @@ /obj/item/tank/internals/emergency_oxygen, ) +/obj/item/clothing/suit/apron/surgical/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) // FISH DOCTOR?! + //Curator /obj/item/clothing/suit/jacket/curator name = "treasure hunter's coat" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index cf2158177f77b..b5abbce9f648c 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -38,6 +38,10 @@ icon_state = "labcoat_cmo" inhand_icon_state = null +/obj/item/clothing/suit/toggle/labcoat/cmo/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /datum/armor/toggle_labcoat bio = 50 fire = 50 @@ -57,13 +61,14 @@ icon_state = "labcoat_paramedic" inhand_icon_state = null -//START SKYRAT EDIT ADDITION /obj/item/clothing/suit/toggle/labcoat/paramedic/Initialize(mapload) . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + //START SKYRAT EDIT ADDITION allowed += list( /obj/item/storage/medkit, ) -//END SKYRAT EDIT + //END SKYRAT EDIT /obj/item/clothing/suit/toggle/labcoat/mad name = "\proper The Mad's labcoat" diff --git a/code/modules/clothing/suits/moth.dm b/code/modules/clothing/suits/moth.dm index dd0a7f016ac17..076a0dd0b3c9a 100644 --- a/code/modules/clothing/suits/moth.dm +++ b/code/modules/clothing/suits/moth.dm @@ -16,7 +16,7 @@ /obj/item/clothing/suit/mothcoat/original/Initialize(mapload) . = ..() - + AddComponent(/datum/component/adjust_fishing_difficulty, -3) create_storage(storage_type = /datum/storage/pockets) /obj/item/clothing/suit/mothcoat/winter diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm index c1889cc77383d..eaa997607f09e 100644 --- a/code/modules/clothing/suits/reactive_armour.dm +++ b/code/modules/clothing/suits/reactive_armour.dm @@ -126,7 +126,7 @@ /obj/item/clothing/suit/armor/reactive/teleport/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) owner.visible_message(span_danger("The reactive teleport system flings [owner] clear of [attack_text]!")) - playsound(get_turf(owner),'sound/magic/blink.ogg', 100, TRUE) + playsound(get_turf(owner),'sound/effects/magic/blink.ogg', 100, TRUE) do_teleport(owner, get_turf(owner), tele_range, no_effects = TRUE, channel = TELEPORT_CHANNEL_BLUESPACE) reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration return TRUE @@ -134,8 +134,8 @@ /obj/item/clothing/suit/armor/reactive/teleport/emp_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) owner.visible_message(span_danger("The reactive teleport system flings itself clear of [attack_text], leaving someone behind in the process!")) owner.dropItemToGround(src, TRUE, TRUE) - playsound(get_turf(owner),'sound/machines/buzz-sigh.ogg', 50, TRUE) - playsound(get_turf(owner),'sound/magic/blink.ogg', 100, TRUE) + playsound(get_turf(owner),'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) + playsound(get_turf(owner),'sound/effects/magic/blink.ogg', 100, TRUE) do_teleport(src, get_turf(owner), tele_range, no_effects = TRUE, channel = TELEPORT_CHANNEL_BLUESPACE) reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration return FALSE //you didn't actually evade the attack now did you @@ -150,7 +150,7 @@ /obj/item/clothing/suit/armor/reactive/fire/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) owner.visible_message(span_danger("[src] blocks [attack_text], sending out jets of flame!")) - playsound(get_turf(owner),'sound/magic/fireball.ogg', 100, TRUE) + playsound(get_turf(owner),'sound/effects/magic/fireball.ogg', 100, TRUE) for(var/mob/living/carbon/carbon_victim in range(6, get_turf(src))) if(carbon_victim != owner) carbon_victim.adjust_fire_stacks(8) @@ -161,7 +161,7 @@ /obj/item/clothing/suit/armor/reactive/fire/emp_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) owner.visible_message(span_danger("[src] just makes [attack_text] worse by spewing molten death on [owner]!")) - playsound(get_turf(owner),'sound/magic/fireball.ogg', 100, TRUE) + playsound(get_turf(owner),'sound/effects/magic/fireball.ogg', 100, TRUE) owner.adjust_fire_stacks(12) owner.ignite_mob() reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration @@ -263,7 +263,7 @@ var/repulse_force = MOVE_FORCE_EXTREMELY_STRONG /obj/item/clothing/suit/armor/reactive/repulse/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - playsound(get_turf(owner),'sound/magic/repulse.ogg', 100, TRUE) + playsound(get_turf(owner),'sound/effects/magic/repulse.ogg', 100, TRUE) owner.visible_message(span_danger("[src] blocks [attack_text], converting the attack into a wave of force!")) var/turf/owner_turf = get_turf(owner) var/list/thrown_items = list() @@ -278,7 +278,7 @@ return TRUE /obj/item/clothing/suit/armor/reactive/repulse/emp_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - playsound(get_turf(owner),'sound/magic/repulse.ogg', 100, TRUE) + playsound(get_turf(owner),'sound/effects/magic/repulse.ogg', 100, TRUE) owner.visible_message(span_danger("[src] does not block [attack_text], and instead generates an attracting force!")) var/turf/owner_turf = get_turf(owner) var/list/thrown_items = list() @@ -418,7 +418,7 @@ reactivearmor_cooldown_duration = 10 SECONDS /obj/item/clothing/suit/armor/reactive/barricade/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - playsound(get_turf(owner),'sound/magic/repulse.ogg', 100, TRUE) + playsound(get_turf(owner),'sound/effects/magic/repulse.ogg', 100, TRUE) owner.visible_message(span_danger("The reactive armor interposes matter from another world between [src] and [attack_text]!")) for (var/atom/movable/target in repulse_targets(owner)) repulse(target, owner) @@ -480,7 +480,7 @@ reactivearmor_cooldown_duration = 40 SECONDS /obj/item/clothing/suit/armor/reactive/ectoplasm/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - playsound(get_turf(owner),'sound/hallucinations/veryfar_noise.ogg', 100, TRUE) + playsound(get_turf(owner),'sound/effects/hallucinations/veryfar_noise.ogg', 100, TRUE) owner.visible_message(span_danger("The [src] lets loose a burst of otherworldly energy!")) haunt_outburst(epicenter = get_turf(owner), range = 5, haunt_chance = 85, duration = 30 SECONDS) diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 6cbbe623557e6..2d674857d6388 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -39,6 +39,10 @@ equip_delay_other = 60 resistance_flags = FIRE_PROOF +/obj/item/clothing/suit/utility/fire/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 7) + /datum/armor/utility_fire melee = 15 bullet = 5 @@ -78,7 +82,7 @@ heat_protection = CHEST|GROIN|LEGS|FEET|ARMS cold_protection = CHEST|GROIN|LEGS|FEET|ARMS body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETAUR|HIDETAIL // NOVA EDIT ADDITION - HIDETAUR, HIDETAIL + flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETAUR|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAUR, HIDETAIL /* * Bomb protection @@ -104,6 +108,7 @@ . = ..() if(flags_inv & HIDEFACE) AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES) + AddComponent(/datum/component/adjust_fishing_difficulty, 8) /datum/armor/utility_bomb_hood melee = 20 @@ -133,6 +138,10 @@ equip_delay_other = 70 resistance_flags = NONE +/obj/item/clothing/suit/utility/bomb_suit/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 8) + /datum/armor/utility_bomb_suit melee = 20 laser = 20 @@ -179,6 +188,7 @@ . = ..() if(flags_inv & HIDEFACE) AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES) + AddComponent(/datum/component/adjust_fishing_difficulty, 7) /datum/armor/utility_radiation bio = 60 @@ -212,3 +222,4 @@ /obj/item/clothing/suit/utility/radiation/Initialize(mapload) . = ..() AddElement(/datum/element/radiation_protected_clothing) + AddComponent(/datum/component/adjust_fishing_difficulty, 7) diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index b86f7845cf3d7..57c2055d6c229 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -49,7 +49,7 @@ /obj/item/clothing/suit/hooded/wintercoat/click_alt(mob/user) zipped = !zipped - playsound(src, 'sound/items/zip_up.ogg', 30, TRUE, -3) + playsound(src, 'sound/items/zip/zip_up.ogg', 30, TRUE, -3) worn_icon_state = "[initial(icon_state)][zipped ? "_t" : ""]" balloon_alert(user, "[zipped ? "" : "un"]zipped") @@ -221,16 +221,7 @@ desc = "A green and blue winter coat. The zipper tab looks like the flower from a member of Rosa Hesperrhodos, a pretty pink-and-white rose. The colours absolutely clash." icon_state = "coathydro" inhand_icon_state = "coathydro" - allowed = list( - /obj/item/cultivator, - /obj/item/hatchet, - /obj/item/plant_analyzer, - /obj/item/reagent_containers/spray/plantbgone, - /obj/item/reagent_containers/cup/bottle, - /obj/item/reagent_containers/spray/pestspray, - /obj/item/seeds, - /obj/item/storage/bag/plants, - ) + allowed = /obj/item/clothing/suit/apron::allowed hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro /obj/item/clothing/head/hooded/winterhood/hydro @@ -688,4 +679,3 @@ desc = "A heavy jacket hood made from 'synthetic' animal furs, with custom colors." greyscale_config = /datum/greyscale_config/winter_hoods greyscale_config_worn = /datum/greyscale_config/winter_hoods/worn - diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 53026e974bf63..704182f3642d2 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -11,6 +11,12 @@ clothing_flags = SNUG_FIT | CASTING_CLOTHES resistance_flags = FIRE_PROOF | ACID_PROOF dog_fashion = /datum/dog_fashion/head/blue_wizard + ///How much this hat affects fishing difficulty + var/fishing_modifier = -4 + +/obj/item/clothing/head/wizard/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) //A wizard always practices his casting (ba dum tsh) /datum/armor/head_wizard melee = 30 @@ -48,6 +54,7 @@ armor_type = /datum/armor/none resistance_flags = FLAMMABLE dog_fashion = /datum/dog_fashion/head/blue_wizard + fishing_modifier = -1 /obj/item/clothing/head/wizard/chanterelle name = "chanterelle hat" @@ -114,6 +121,12 @@ equip_delay_other = 50 clothing_flags = CASTING_CLOTHES resistance_flags = FIRE_PROOF | ACID_PROOF + ///How much this robe affects fishing difficulty + var/fishing_modifier = -6 + +/obj/item/clothing/suit/wizrobe/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) //A wizard always practices his casting (ba dum tsh) /datum/armor/suit_wizrobe melee = 30 @@ -181,17 +194,20 @@ inhand_icon_state = "wizrobe" armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -2 /obj/item/clothing/head/wizard/marisa/fake name = "witch hat" armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -1 /obj/item/clothing/head/wizard/tape/fake name = "tape hat" desc = "A hat designed exclusively from duct tape. You can barely see." armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -1 /obj/item/clothing/suit/wizrobe/marisa/fake name = "witch robe" @@ -200,12 +216,14 @@ inhand_icon_state = null armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -2 /obj/item/clothing/suit/wizrobe/tape/fake name = "tape robe" desc = "An outfit designed exclusively from duct tape. It was hard to put on." armor_type = /datum/armor/none resistance_flags = FLAMMABLE + fishing_modifier = -2 /obj/item/clothing/suit/wizrobe/paper name = "papier-mache robe" // no non-latin characters! @@ -222,21 +240,8 @@ icon_state = "durathread-fake" inhand_icon_state = null armor_type = /datum/armor/robe_durathread - allowed = list( - /obj/item/cultivator, - /obj/item/geneshears, - /obj/item/graft, - /obj/item/hatchet, - /obj/item/plant_analyzer, - /obj/item/reagent_containers/cup/beaker, - /obj/item/reagent_containers/cup/bottle, - /obj/item/reagent_containers/cup/tube, - /obj/item/reagent_containers/spray/pestspray, - /obj/item/reagent_containers/spray/plantbgone, - /obj/item/secateurs, - /obj/item/seeds, - /obj/item/storage/bag/plants, - ) + allowed = /obj/item/clothing/suit/apron::allowed + fishing_modifier = -4 /datum/armor/robe_durathread melee = 15 @@ -287,7 +292,7 @@ return usr.say("Rise, my creation! Off your page into this realm!", forced = "stickman summoning") - playsound(loc, 'sound/magic/summon_magic.ogg', 50, TRUE, TRUE) + playsound(loc, 'sound/effects/magic/summon_magic.ogg', 50, TRUE, TRUE) var/mob/living/M = new /mob/living/basic/stickman/lesser(get_turf(usr)) M.faction += list("[REF(usr)]") robe_charge = FALSE diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 1a58d91fd154a..e9f4dda6669b1 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -8,6 +8,8 @@ slot_flags = ITEM_SLOT_ICLOTHING interaction_flags_click = NEED_DEXTERITY armor_type = /datum/armor/clothing_under + supports_variations_flags = CLOTHING_DIGITIGRADE_MASK + digitigrade_greyscale_config_worn = /datum/greyscale_config/jumpsuit/worn_digi equip_sound = 'sound/items/equip/jumpsuit_equip.ogg' drop_sound = 'sound/items/handling/cloth_drop.ogg' pickup_sound = 'sound/items/handling/cloth_pickup.ogg' @@ -92,7 +94,7 @@ return changed ? CONTEXTUAL_SCREENTIP_SET : . -/obj/item/clothing/under/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE) +/obj/item/clothing/under/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE) // SKYRAT EDIT - customisation . = ..() if(isinhands) return @@ -105,11 +107,7 @@ . += modify_accessory_overlay() // SKYRAT 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)) - var/obj/item/stack/cable_coil/cabling = attacking_item - to_chat(user, span_notice("You repair the suit sensors on [src] with [cabling].")) - cabling.use(1) - has_sensor = HAS_SENSORS + if(repair_sensors(attacking_item, user)) return TRUE if(istype(attacking_item, /obj/item/clothing/accessory)) @@ -128,39 +126,11 @@ /obj/item/clothing/under/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED) . = ..() if(damaged_state == CLOTHING_SHREDDED && has_sensor > NO_SENSORS) - has_sensor = BROKEN_SENSORS + break_sensors() else if(damaged_state == CLOTHING_PRISTINE && has_sensor == BROKEN_SENSORS) - has_sensor = HAS_SENSORS + repair_sensors(cable_required = FALSE) update_appearance() -/* BUBBERSTATION CHANGE: REWORKS SENSOR EMP - -/obj/item/clothing/under/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(has_sensor == NO_SENSORS || has_sensor == BROKEN_SENSORS) - return - - if(severity <= EMP_HEAVY) - has_sensor = BROKEN_SENSORS - if(ismob(loc)) - var/mob/M = loc - to_chat(M,span_warning("[src]'s sensors short out!")) - - else - sensor_mode = pick(SENSOR_OFF, SENSOR_OFF, SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS) - if(ismob(loc)) - var/mob/M = loc - to_chat(M,span_warning("The sensors on the [src] change rapidly!")) - - if(ishuman(loc)) - var/mob/living/carbon/human/ooman = loc - if(ooman.w_uniform == src) - ooman.update_suit_sensors() - -BUBBERSTATION CHANGE END */ - /obj/item/clothing/under/visual_equipped(mob/user, slot) . = ..() if(adjusted == ALT_STYLE) @@ -180,13 +150,68 @@ BUBBERSTATION CHANGE END */ freshly_laundered = FALSE user.add_mood_event("fresh_laundry", /datum/mood_event/fresh_laundry) +// Start suit sensor handling + +/// Change the suit sensor state to broken and update the mob's status on the global sensor list +/obj/item/clothing/under/proc/break_sensors() + if(has_sensor == BROKEN_SENSORS || has_sensor == NO_SENSORS) + return + + visible_message(span_warning("[src]'s medical sensors short out!"), blind_message = span_warning("The [src] makes an electronic sizzling sound!"), vision_distance = COMBAT_MESSAGE_RANGE) + has_sensor = BROKEN_SENSORS + sensor_malfunction() + update_wearer_status() + +/** + * Repair the suit sensors and update the mob's status on the global sensor list. + * Can be called either through player action such as repairing with coil, or as part of a general fixing proc + * + * Arguments: + * * attacking_item - the item being used for the repair, if any + * * user - mob that's doing the repair + * * cable_required - set to FALSE to bypass consuming cable coil + */ +/obj/item/clothing/under/proc/repair_sensors(obj/item/attacking_item, mob/user, cable_required = TRUE) + if(has_sensor != BROKEN_SENSORS) + return + + if(cable_required) + if(!istype(attacking_item, /obj/item/stack/cable_coil)) + return + var/obj/item/stack/cable_coil/cabling = attacking_item + if(!cabling.use(1)) + return + cabling.visible_message(span_notice("[user] repairs the suit sensors on [src] with [cabling].")) + + playsound(source = src, soundin = 'sound/effects/sparks/sparks4.ogg', vol = 100, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE) + has_sensor = HAS_SENSORS + update_wearer_status() + + return TRUE + +/// If the item is being worn, a gentle reminder every 3-5 minutes that the sensors are broken +/obj/item/clothing/under/proc/sensor_malfunction() + if(!QDELETED(src) && has_sensor == BROKEN_SENSORS && ishuman(loc)) + do_sparks(number = 2, cardinal_only = FALSE, source = src) + addtimer(CALLBACK(src, PROC_REF(sensor_malfunction)), rand(BROKEN_SPARKS_MIN, BROKEN_SPARKS_MAX * 0.5), TIMER_UNIQUE | TIMER_NO_HASH_WAIT) + +/// If the item is being worn, update the mob's status on the global sensor list +/obj/item/clothing/under/proc/update_wearer_status() + if(!ishuman(loc)) + return + + var/mob/living/carbon/human/ooman = loc + ooman.update_suit_sensors() + ooman.med_hud_set_status() + /mob/living/carbon/human/update_suit_sensors() . = ..() update_sensor_list() +/// Adds or removes a mob from the global suit sensors list based on sensor status and mode /mob/living/carbon/human/proc/update_sensor_list() - var/obj/item/clothing/under/U = w_uniform - if(istype(U) && U.has_sensor > NO_SENSORS && U.sensor_mode) + var/obj/item/clothing/under/uniform = w_uniform + if(istype(uniform) && uniform.has_sensor > NO_SENSORS && uniform.sensor_mode) GLOB.suit_sensors_list |= src else GLOB.suit_sensors_list -= src @@ -194,6 +219,50 @@ BUBBERSTATION CHANGE END */ /mob/living/carbon/human/dummy/update_sensor_list() return +/* BUBBERSTATION CHANGE: REWORKS SENSOR EMP + +/obj/item/clothing/under/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + if(has_sensor == NO_SENSORS || has_sensor == BROKEN_SENSORS) + return + + if(severity <= EMP_HEAVY) + break_sensors() + + else + sensor_mode = pick(SENSOR_OFF, SENSOR_OFF, SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS) + playsound(source = src, soundin = 'sound/effects/sparks/sparks3.ogg', vol = 75, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE) + visible_message(span_warning("The [src]'s medical sensors flash and change rapidly!"), blind_message = span_warning("The [src] makes an electronic sizzling sound!"), vision_distance = COMBAT_MESSAGE_RANGE) + + update_wearer_status() + +BUBBERSTATION CHANGE END */ + +/** + * Called by medical scanners a simple summary of the status + * + * Arguments: + * * silent: If TRUE, will return blank if everything is fine + */ +/obj/item/clothing/under/proc/get_sensor_text(silent = TRUE) + if(has_sensor == BROKEN_SENSORS) + return "Non-Functional: Repair with cable coil" + + if(silent) + return "" + + switch(has_sensor) + if(NO_SENSORS) + return "Not Present" + + if(LOCKED_SENSORS) + return "Functional, Locked" + + if(HAS_SENSORS) + return "Functional" + // End suit sensor handling /// Attach the passed accessory to the clothing item @@ -289,7 +358,7 @@ BUBBERSTATION CHANGE END */ if(can_adjust) . += "Alt-click on [src] to wear it [adjusted == ALT_STYLE ? "normally" : "casually"]." if(has_sensor == BROKEN_SENSORS) - . += "Its sensors appear to be shorted out. You could repair it with some cabling." + . += span_warning("The medical sensors appear to be shorted out. You could repair it with some cabling.") else if(has_sensor > NO_SENSORS) switch(sensor_mode) if(SENSOR_OFF) @@ -309,7 +378,7 @@ BUBBERSTATION CHANGE END */ /obj/item/clothing/under/proc/list_accessories_with_icon(mob/user) var/list/all_accessories = list() for(var/obj/item/clothing/accessory/attached as anything in attached_accessories) - all_accessories += attached.get_examine_string(user) + all_accessories += attached.examine_title(user) return all_accessories @@ -340,10 +409,7 @@ BUBBERSTATION CHANGE END */ if(SENSOR_COORDS) to_chat(user_mob, span_notice("Your suit will now report your exact vital lifesigns as well as your coordinate position.")) - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.w_uniform == src) - H.update_suit_sensors() + update_wearer_status() /obj/item/clothing/under/item_ctrl_click(mob/user) if(!can_toggle_sensors(user)) @@ -351,6 +417,7 @@ BUBBERSTATION CHANGE END */ sensor_mode = SENSOR_COORDS balloon_alert(user, "set to tracking") + update_wearer_status() return CLICK_ACTION_SUCCESS /// Checks if the toggler is allowed to toggle suit sensors currently diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index 0ea3922893a76..335eded4d4c82 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -241,3 +241,46 @@ if (ishuman(user)) var/mob/living/carbon/human/human_wearer = user human_wearer.sec_hud_set_security_status() + +/obj/item/clothing/accessory/press_badge + name = "press badge" + desc = "A blue press badge that clearly identifies the wearer as a member of the media. While it signifies press affiliation, it does not grant any special privileges or rights no matter how much the wearer yells about it." + desc_controls = "Click person with it to show them it" + icon_state = "press_badge" + attachment_slot = NONE // actually NECK but that doesn't make sense + /// The name of the person in the badge + var/journalist_name + /// The name of the press person is working for + var/press_name + +/obj/item/clothing/accessory/press_badge/examine(mob/user) + . = ..() + if(!journalist_name || !press_name) + . += span_notice("Use it in hand to input information") + return + + . += span_notice("It belongs to [journalist_name], [press_name]") + +/obj/item/clothing/accessory/press_badge/attack_self(mob/user, modifiers) + . = ..() + if(!journalist_name) + journalist_name = tgui_input_text(user, "What is your name?", "Journalist Name", "[user.name]", max_length = MAX_NAME_LEN) + if(!press_name) + press_name = tgui_input_text(user, "For what organization you work?", "Press Name", "Nanotrasen", max_length = MAX_CHARTER_LEN) + +/obj/item/clothing/accessory/press_badge/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + . = ..() + if(!isliving(interacting_with)) + return + + var/mob/living/interacting_living = interacting_with + if(user.combat_mode) + playsound(interacting_living, 'sound/items/weapons/throw.ogg', 30) + examine(interacting_living) + to_chat(interacting_living, span_userdanger("[user] shoves the [src] up your face!")) + user.visible_message(span_warning("[user] have shoved a [src] into [interacting_living] face.")) + else + playsound(interacting_living, 'sound/items/weapons/throwsoft.ogg', 20) + examine(interacting_living) + to_chat(interacting_living, span_boldwarning("[user] shows the [src] to you.")) + user.visible_message(span_notice("[user] shows a [src] to [interacting_living].")) diff --git a/code/modules/clothing/under/accessories/tribal.dm b/code/modules/clothing/under/accessories/tribal.dm index ad55b26fa89fd..0d5786a20e94b 100644 --- a/code/modules/clothing/under/accessories/tribal.dm +++ b/code/modules/clothing/under/accessories/tribal.dm @@ -12,7 +12,7 @@ attachment_slot = GROIN /obj/item/clothing/accessory/skilt - name = "Sinew Skirt" + name = "sinew skirt" desc = "For the last time. IT'S A KILT not a skirt." icon_state = "skilt" minimize_when_attached = FALSE diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index b548aee70975d..3b7a900528322 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -226,6 +226,7 @@ greyscale_config_inhand_left = null greyscale_config_inhand_right = null greyscale_config_worn = null + digitigrade_greyscale_colors = "#3f3f3f" can_adjust = FALSE flags_1 = NONE diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index ba30233d2b7b9..24b2e0375cb0a 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -420,7 +420,7 @@ can_adjust = FALSE /obj/item/clothing/under/costume/gi - name = "Martial Artist Gi" + name = "martial gi" desc = "Assistant, nukie, whatever. You can beat anyone; it's called hard work!" icon_state = "martial_arts_gi" greyscale_config = /datum/greyscale_config/gi @@ -437,13 +437,13 @@ update_icon(UPDATE_OVERLAYS) /obj/item/clothing/under/costume/gi/goku - name = "Sacred Gi" + name = "sacred gi" desc = "Created by a man who touched the hearts and lives of many." icon_state = "martial_arts_gi_goku" greyscale_colors = "#f89925#3e6dd7" /obj/item/clothing/under/costume/traditional - name = "Traditional Suit" + name = "traditional suit" desc = "A full, vibrantly coloured suit. Likely with traditional purposes. Maybe the colours represent a familly, clan, or rank, who knows." icon_state = "tradition" inhand_icon_state = null @@ -451,7 +451,7 @@ can_adjust = FALSE /obj/item/clothing/under/costume/loincloth - name = "Leather Loincloth" + name = "leather loincloth" desc = "Just a piece of leather to cover private areas. Itchy to the touch. Whoever made this must have been desperate, or savage." icon_state = "loincloth" inhand_icon_state = null diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm index be8eab0bb9f16..55f0da88918b5 100644 --- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm +++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm @@ -31,15 +31,13 @@ inhand_icon_state = "clown" female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY can_adjust = FALSE + supports_variations_flags = CLOTHING_NO_VARIATION /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) -// BUBBERSTATION EDIT -//WAS: //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) //SKYRAT EDIT REMOVAL - /obj/item/clothing/under/rank/civilian/clown/blue name = "blue clown suit" desc = "'BLUE HONK!'" diff --git a/code/modules/clothing/under/jobs/civilian/curator.dm b/code/modules/clothing/under/jobs/civilian/curator.dm index 8f40e623d8adf..f08657cee0754 100644 --- a/code/modules/clothing/under/jobs/civilian/curator.dm +++ b/code/modules/clothing/under/jobs/civilian/curator.dm @@ -28,6 +28,10 @@ inhand_icon_state = null worn_icon = 'icons/mob/clothing/under/civilian.dmi' +/obj/item/clothing/under/rank/civilian/curator/treasure_hunter/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -3) + /obj/item/clothing/under/rank/civilian/curator/nasa name = "\improper NASA jumpsuit" desc = "It has a NASA logo on it and is made of space-proofed materials." diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm index 1574b64bbf066..2dea332408231 100644 --- a/code/modules/clothing/under/jobs/medical.dm +++ b/code/modules/clothing/under/jobs/medical.dm @@ -44,6 +44,10 @@ icon_state = "scrubscmo" inhand_icon_state = "w_suit" +/obj/item/clothing/under/rank/medical/chief_medical_officer/scrubs/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck name = "chief medical officer's turtleneck" desc = "A light blue turtleneck and tan khakis, for a chief medical officer with a superior sense of style." @@ -82,6 +86,10 @@ /obj/item/clothing/under/rank/medical/scrubs name = "medical scrubs" +/obj/item/clothing/under/rank/medical/scrubs/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /obj/item/clothing/under/rank/medical/scrubs/blue desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue." icon_state = "scrubsblue" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 8f1263fa3e2b2..588dd8efc2a68 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -15,7 +15,7 @@ icon_state = "blue_pyjamas" /obj/item/clothing/under/misc/patriotsuit - name = "Patriotic Suit" + name = "patriotic suit" desc = "Motorcycle not included." icon_state = "ek" inhand_icon_state = null @@ -33,6 +33,7 @@ desc = "Groovy!" icon_state = "psyche" inhand_icon_state = "p_suit" + digitigrade_greyscale_colors = "#3f3f3f" /obj/item/clothing/under/misc/vice_officer name = "vice officer's jumpsuit" @@ -57,6 +58,10 @@ can_adjust = FALSE resistance_flags = FIRE_PROOF | ACID_PROOF +/obj/item/clothing/under/misc/adminsuit/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -15) + /datum/armor/clothing_under/adminsuit melee = 100 bullet = 100 diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm index 11ed224e9cf81..9d226bad5320d 100644 --- a/code/modules/clothing/under/skirt_dress.dm +++ b/code/modules/clothing/under/skirt_dress.dm @@ -40,6 +40,10 @@ body_parts_covered = CHEST|GROIN|LEGS flags_inv = HIDESHOES +/obj/item/clothing/under/dress/wedding_dress/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 4) //You aren't going to fish with this are you? + /obj/item/clothing/under/dress/eveninggown name = "evening gown" desc = "Fancy dress for space bar singers." @@ -50,6 +54,10 @@ flags_1 = IS_PLAYER_COLORABLE_1 greyscale_colors = "#e11f1f" +/obj/item/clothing/under/dress/eveninggown/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 4) //You aren't going to fish with this are you? + /obj/item/clothing/under/dress/skirt name = "cardigan skirt" desc = "A nice skirt with a cute cardigan, very fancy!" diff --git a/code/modules/clothing/under/suits.dm b/code/modules/clothing/under/suits.dm index 0dbf1880d7d2f..98f41f407cab9 100644 --- a/code/modules/clothing/under/suits.dm +++ b/code/modules/clothing/under/suits.dm @@ -107,8 +107,16 @@ icon_state = "tuxedo" inhand_icon_state = null +/obj/item/clothing/under/suit/tuxedo/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, 4) //You aren't going to fish with this are you? + /obj/item/clothing/under/suit/carpskin name = "carpskin suit" desc = "An luxurious suit made with only the finest scales, perfect for conducting dodgy business deals." icon_state = "carpskin_suit" inhand_icon_state = null + +/obj/item/clothing/under/suit/carpskin/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index ff3061d3e5992..e4653b1c9bd47 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -34,6 +34,10 @@ can_adjust = FALSE supports_variations_flags = NONE +/obj/item/clothing/under/syndicate/bloodred/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //extra-tactical + /datum/armor/clothing_under/syndicate_bloodred melee = 10 bullet = 10 @@ -119,6 +123,10 @@ can_adjust = FALSE supports_variations_flags = NONE +/obj/item/clothing/under/syndicate/floortilecamo/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4) //tacticool + /obj/item/clothing/under/syndicate/soviet name = "Ratnik 5 tracksuit" desc = "Badly translated labels tell you to clean this in Vodka. Great for squatting in." @@ -160,6 +168,10 @@ supports_variations_flags = NONE armor_type = /datum/armor/clothing_under/syndicate_scrubs +/obj/item/clothing/under/syndicate/scrubs/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?! + /datum/armor/clothing_under/syndicate_scrubs melee = 10 bio = 50 diff --git a/code/modules/deathmatch/deathmatch_controller.dm b/code/modules/deathmatch/deathmatch_controller.dm index 0b098871624dc..de5132198881a 100644 --- a/code/modules/deathmatch/deathmatch_controller.dm +++ b/code/modules/deathmatch/deathmatch_controller.dm @@ -54,7 +54,7 @@ var/datum/deathmatch_lobby/lobby = lobbies[ckey] if (user.ckey == ckey) .["hosting"] = TRUE - if (user.ckey in lobby.observers+lobby.players) + if (user.ckey in (lobby.observers+lobby.players)) .["playing"] = ckey .["lobbies"] += list(list( name = ckey, @@ -67,7 +67,7 @@ /datum/deathmatch_controller/proc/find_lobby_by_user(ckey) for(var/lobbykey in lobbies) var/datum/deathmatch_lobby/lobby = lobbies[lobbykey] - if(ckey in lobby.players+lobby.observers) + if(ckey in (lobby.players+lobby.observers)) return lobby /datum/deathmatch_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm index 44d2729afc204..7a8d212dbb80e 100644 --- a/code/modules/deathmatch/deathmatch_loadouts.dm +++ b/code/modules/deathmatch/deathmatch_loadouts.dm @@ -8,7 +8,9 @@ /// If defined, using this outfit sets the targets species to it var/datum/species/species_override /// This outfit will grant these spells if applied - var/list/granted_spells = list() + var/list/spells_to_add = list() + /// This outfit will grant these mutations if applied + var/list/mutations_to_add = list() /datum/outfit/deathmatch_loadout/pre_equip(mob/living/carbon/human/user, visualsOnly = FALSE) . = ..() @@ -17,15 +19,20 @@ if(!isnull(species_override)) user.set_species(species_override) + else if (!isnull(user.dna.species.outfit_important_for_life)) //plasmamen get lit on fire and die user.set_species(/datum/species/human) - for(var/datum/action/act as anything in granted_spells) + + for(var/datum/action/act as anything in spells_to_add) var/datum/action/new_ability = new act(user) if(istype(new_ability, /datum/action/cooldown/spell)) var/datum/action/cooldown/spell/new_spell = new_ability - new_spell.spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC + new_spell.spell_requirements = NONE new_ability.Grant(user) + for(var/mutation in mutations_to_add) + user.dna.add_mutation(mutation) + /datum/outfit/deathmatch_loadout/naked name = "Deathmatch: Naked" display_name = "Unarmed, Butt-naked" @@ -332,7 +339,7 @@ suit = /obj/item/clothing/suit/hooded/explorer shoes = /obj/item/clothing/shoes/workboots/mining mask = /obj/item/clothing/mask/gas/explorer - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/mob_cooldown/dash, ) @@ -374,10 +381,10 @@ suit = /datum/outfit/wizard::suit head = /datum/outfit/wizard::head shoes = /datum/outfit/wizard::shoes - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/aoe/magic_missile, /datum/action/cooldown/spell/forcewall, - /datum/action/cooldown/spell/jaunt/ethereal_jaunt, + /datum/action/cooldown/spell/pointed/projectile/fireball, ) /datum/outfit/deathmatch_loadout/wizard/pyro @@ -388,7 +395,7 @@ suit = /obj/item/clothing/suit/wizrobe/red head = /obj/item/clothing/head/wizard/red mask = /obj/item/cigarette - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/pointed/projectile/fireball, /datum/action/cooldown/spell/smoke, ) @@ -400,7 +407,7 @@ suit = /obj/item/clothing/suit/wizrobe/magusred head = /obj/item/clothing/head/wizard/magus - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/pointed/projectile/lightningbolt, /datum/action/cooldown/spell/charged/beam/tesla, ) @@ -413,9 +420,9 @@ species_override = /datum/species/skeleton suit = /obj/item/clothing/suit/wizrobe/black head = /obj/item/clothing/head/wizard/black - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/touch/scream_for_me, - /datum/action/cooldown/spell/teleport/radius_turf/blink, + /datum/action/cooldown/spell/conjure/link_worlds, ) /datum/outfit/deathmatch_loadout/wizard/larp @@ -427,7 +434,7 @@ suit = /obj/item/clothing/suit/wizrobe/fake head = /obj/item/clothing/head/wizard/fake shoes = /obj/item/clothing/shoes/sandal - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/conjure_item/spellpacket, /datum/action/cooldown/spell/aoe/repulse/wizard, ) @@ -441,7 +448,7 @@ suit = /obj/item/clothing/suit/wizrobe/marisa head = /obj/item/clothing/head/wizard/marisa shoes = /obj/item/clothing/shoes/sneakers/marisa - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/chuuni_invocations, /datum/action/cooldown/spell/pointed/projectile/spell_cards, ) @@ -454,7 +461,7 @@ l_hand = /obj/item/mjollnir suit = /obj/item/clothing/suit/wizrobe/magusblue head = /obj/item/clothing/head/wizard/magus - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/summonitem, ) @@ -464,7 +471,7 @@ desc = "You feel severely under-leveled for this encounter..." l_hand = null - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/charge, ) @@ -477,7 +484,7 @@ suit = /obj/item/clothing/suit/wizrobe/tape head = /obj/item/clothing/head/wizard/tape shoes = /obj/item/clothing/shoes/jackboots - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/conjure_item/infinite_guns/gun, /datum/action/cooldown/spell/aoe/knock, ) @@ -492,7 +499,7 @@ suit = /obj/item/clothing/suit/costume/hawaiian head = /obj/item/clothing/head/wizard/red shoes = /obj/item/clothing/shoes/sneakers/marisa - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/rod_form, /datum/action/cooldown/spell/conjure/the_traps, ) @@ -509,7 +516,7 @@ mask = /obj/item/clothing/mask/gas/clown_hat back = /obj/item/storage/backpack/clown shoes = /obj/item/clothing/shoes/clown_shoes - granted_spells = null + spells_to_add = null /datum/outfit/deathmatch_loadout/wizard/monkey name = "Deathmatch: Monkey" @@ -522,7 +529,7 @@ suit = null head = /obj/item/clothing/head/wizard shoes = null - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/conjure/simian, ) @@ -698,7 +705,7 @@ /obj/item/food/croissant/throwing = 2, ) - granted_spells = list( + spells_to_add = list( /datum/action/cooldown/spell/vow_of_silence, /datum/action/cooldown/spell/conjure_item/invisible_box, /datum/action/cooldown/spell/conjure/invisible_chair, @@ -726,3 +733,397 @@ /obj/item/knife/butcher, /obj/item/sharpener, ) + +//species + +/datum/outfit/deathmatch_loadout/humanity + name = "Deathmatch: Human Species" + display_name = "Humanity" + desc = "The most ambitious and successful species. Or just the most rapacious, depending on who you ask." + species_override = /datum/species/human + + head = /obj/item/clothing/head/soft/black + glasses = /obj/item/clothing/glasses/sunglasses + ears = /obj/item/radio/headset/headset_com + neck = /obj/item/clothing/neck/large_scarf/blue + //suit + id_trim = /datum/id_trim/job/bridge_assistant // half tider half command + id = /obj/item/card/id/advanced/chameleon + uniform = /obj/item/clothing/under/trek/command/next + l_pocket = /obj/item/gun/energy/e_gun/mini // they are thej best race in the end. not as impactful as you may think + r_pocket = /obj/item/extinguisher/mini + gloves = /obj/item/clothing/gloves/fingerless + belt = /obj/item/storage/belt/utility/full/inducer + shoes = /obj/item/clothing/shoes/sneakers/black + +// Lizard: Desert, Soldier, Trash + +/datum/outfit/deathmatch_loadout/lizardkind + name = "Deathmatch: Lizard Species" + display_name = "Lizardfolk" + desc = "They may be heavily discrimated against, they may be most often seen doing menial activities, but at least they, uh, uhh..." + species_override = /datum/species/lizard + + head = /obj/item/clothing/head/soft/purple + id_trim = /datum/id_trim/job/janitor + id = /obj/item/card/id/advanced/chameleon + uniform = /obj/item/clothing/under/rank/civilian/janitor + gloves = /obj/item/clothing/gloves/color/black + belt = /obj/item/storage/belt/janitor/full + shoes = /obj/item/clothing/shoes/chameleon/noslip + r_hand = /obj/item/mop/advanced + back = /obj/item/storage/backpack + backpack_contents = list( + /obj/item/toy/plush/lizard_plushie/green, + // reclaiming lizard racism + /obj/item/reagent_containers/cup/glass/bottle/lizardwine, + /obj/item/tailclub, + /obj/item/melee/chainofcommand/tailwhip, + /obj/item/reagent_containers/cup/glass/coffee + ) + +/datum/outfit/deathmatch_loadout/mothman + name = "Deathmatch: Moth Species" + display_name = "Mothmen" + desc = "An innocent and fluffy visage hides the combat ability of a particularly hairy kitten." + species_override = /datum/species/moth + + head = /obj/item/clothing/head/utility/head_mirror + glasses = /obj/item/clothing/glasses/hud/health + suit = /obj/item/clothing/suit/hooded/wintercoat/medical + suit_store = /obj/item/flashlight/pen/paramedic + id_trim = /datum/id_trim/job/medical_doctor + id = /obj/item/card/id/advanced/chameleon + uniform = /obj/item/clothing/under/rank/medical/scrubs/blue + belt = /obj/item/storage/belt/medical/paramedic + shoes = /obj/item/clothing/shoes/sneakers/white + l_hand = /obj/item/circular_saw + + back = /obj/item/storage/backpack/medic + + backpack_contents = list( + /obj/item/toy/plush/moth, + /obj/item/storage/medkit/brute, + /obj/item/storage/medkit/fire, + /obj/item/statuebust/hippocratic + ) + +// Roboticist?? +/datum/outfit/deathmatch_loadout/ethereal + name = "Deathmatch: Ethereal Species" + display_name = "Etherealkind" + desc = "Prepare to be SHOCKED as you are reminded of this species's existence." + species_override = /datum/species/ethereal + + head = /obj/item/clothing/head/soft/black + id_trim = /datum/id_trim/job/roboticist + id = /obj/item/card/id/advanced/chameleon + suit = /obj/item/clothing/suit/toggle/labcoat/roboticist + suit_store = /datum/id_trim/job/roboticist + uniform = /obj/item/clothing/under/rank/rnd/roboticist + l_pocket = /obj/item/assembly/flash + belt = /obj/item/storage/belt/utility/full + shoes = /obj/item/clothing/shoes/sneakers/black + + back = /obj/item/storage/backpack/science + + backpack_contents = list( + /obj/item/etherealballdeployer, + ) + + mutations_to_add = list(/obj/item/dnainjector/shock) // pretend ethereals are interesting + +/datum/outfit/deathmatch_loadout/plasmamen + name = "Deathmatch: Plasmaman Species" + display_name = "Plasmamen" + desc = "Burn baby burn!" + species_override = /datum/species/plasmaman + + head = /obj/item/clothing/head/helmet/space/plasmaman/atmospherics + suit = /obj/item/clothing/suit/hazardvest + suit_store = /obj/item/flashlight + uniform = /obj/item/clothing/under/plasmaman/atmospherics + id_trim = /datum/id_trim/job/atmospheric_technician + id = /obj/item/card/id/advanced/chameleon + belt = /obj/item/storage/belt/utility/atmostech + gloves = /obj/item/clothing/gloves/color/plasmaman/atmos + shoes = /obj/item/clothing/shoes/workboots + r_pocket = /obj/item/tank/internals/plasmaman/belt/full + + back = /obj/item/storage/backpack/industrial + + backpack_contents = list( + /obj/item/toy/plush/plasmamanplushie, + /obj/item/tank/internals/plasma, + /obj/item/tank/internals/plasmaman, + /obj/item/stack/sheet/mineral/uranium/half, + /obj/item/stack/sheet/mineral/plasma/thirty, + /obj/item/reagent_containers/condiment/milk, + /obj/item/storage/medkit/fire, + /obj/item/reagent_containers/syringe/plasma + ) + +/datum/outfit/deathmatch_loadout/felinid + name = "Deathmatch: Felinid Species" + display_name = "Felinids" + desc = "Strictly inferior to humans in every way." + species_override = /datum/species/human/felinid + + head = /obj/item/clothing/head/soft/rainbow + glasses = null + ears = /obj/item/radio/headset + neck = /obj/item/clothing/neck/petcollar + //suit + uniform = /obj/item/clothing/under/color/rainbow + l_pocket = /obj/item/toy/cattoy + r_pocket = /obj/item/restraints/handcuffs/fake + gloves = /obj/item/clothing/gloves/color/rainbow + belt = /obj/item/melee/curator_whip + shoes = /obj/item/clothing/shoes/sneakers/rainbow + +//spleef + +/datum/outfit/deathmatch_loadout/lattice_battles + name = "Deathmatch: Lattice loadout" + display_name = "Lattice Battler" + desc = "Snip the catwalks under everyone else and win! You're pacifist, so no punching." + + uniform = /obj/item/clothing/under/pants/jeans + suit = /obj/item/clothing/suit/costume/wellworn_shirt/graphic + r_pocket = /obj/item/stack/rods/twentyfive + l_pocket = /obj/item/stack/rods/twentyfive + r_hand = /obj/item/wirecutters + +// We don't want them to just punch each other to death + +/datum/outfit/deathmatch_loadout/lattice_battles/pre_equip(mob/living/carbon/human/user, visualsOnly) + . = ..() + ADD_TRAIT(user, TRAIT_PACIFISM, REF(src)) + +// Ragnarok: Fight between religions! + +/datum/outfit/deathmatch_loadout/cultish/pre_equip(mob/living/carbon/human/user, visualsOnly) + . = ..() + ADD_TRAIT(user, TRAIT_ACT_AS_CULTIST, REF(src)) + user.AddElement(/datum/element/cult_halo, initial_delay = 0 SECONDS) + user.AddElement(/datum/element/cult_eyes, initial_delay = 0 SECONDS) + +// Cultist Invoker, has all the balanced cult gear + +/datum/outfit/deathmatch_loadout/cultish/invoker + name = "Deathmatch: Cultist Invoker" + display_name = "Cultist Invoker" + desc = "Prove Nar'sie's superiority with your well-balanced set of equipment." + //species_override = /datum/species/plasmaman + + head = /obj/item/clothing/head/hooded/cult_hoodie/cult_shield + glasses = /obj/item/clothing/glasses/hud/health/night/cultblind + suit = /obj/item/clothing/suit/hooded/cultrobes/cult_shield // the dreaded return! + suit_store = /obj/item/melee/cultblade + uniform = /obj/item/clothing/under/color/black + id_trim = null + belt = /obj/item/melee/cultblade/dagger + l_pocket = /obj/item/flashlight/flare/culttorch + r_pocket = /obj/item/flashlight/flare/culttorch + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/cult/alt + l_hand = /obj/item/shield/mirror // the dreaded return!! + + back = /obj/item/storage/backpack/cultpack + + backpack_contents = list( + /obj/item/restraints/legcuffs/bola/cult, + /obj/item/reagent_containers/cup/beaker/unholywater, + ) + +// Cultist Artificer, gets all the balanced cult magicks + +/datum/outfit/deathmatch_loadout/cultish/artificer + name = "Deathmatch: Cultist Artificer" + display_name = "Cultist Artificer" + desc = "Prove Nar'sie's superiority with your well-balanced blood magicks." + //species_override = /datum/species/plasmaman + + head = /obj/item/clothing/head/hooded/cult_hoodie/berserkerhood + neck = /obj/item/clothing/neck/heretic_focus/crimson_medallion + suit = /obj/item/clothing/suit/hooded/cultrobes/berserker + suit_store = /obj/item/melee/sickly_blade/cursed + uniform = /obj/item/clothing/under/color/red + id_trim = null + belt = /obj/item/melee/cultblade/dagger + l_pocket = /obj/item/flashlight/flare/culttorch + r_pocket = /obj/item/flashlight/flare/culttorch + gloves = /obj/item/clothing/gloves/color/red + shoes = /obj/item/clothing/shoes/cult + l_hand = null + + back = /obj/item/storage/backpack/cultpack + + backpack_contents = list( + /obj/item/reagent_containers/cup/beaker/unholywater, + /obj/item/reagent_containers/cup/beaker/unholywater, + /obj/item/reagent_containers/cup/beaker/unholywater, + ) + + spells_to_add = list( + /datum/action/innate/cult/blood_spell/horror, + /datum/action/innate/cult/blood_spell/stun, + /datum/action/innate/cult/blood_spell/stun, + /datum/action/innate/cult/blood_spell/manipulation, + ) + +/datum/outfit/deathmatch_loadout/cultish/artificer/post_equip(mob/living/carbon/human/user, visualsOnly) + . = ..() + var/datum/action/innate/cult/blood_spell/manipulation/magick = locate() in user.get_all_contents() + magick.charges = 300 + +/datum/outfit/deathmatch_loadout/heresy + /// Grants the effects of these knowledges to the DMer + var/list/knowledge_to_grant + +/datum/outfit/deathmatch_loadout/heresy/pre_equip(mob/living/carbon/human/user, visualsOnly) + . = ..() + ADD_TRAIT(user, TRAIT_ACT_AS_HERETIC, REF(src)) + user.AddElement(/datum/element/leeching_walk) + + // Creates the knowledge as an isolated datum inside the target, allowing passive knowledges to work still. + for(var/datum/heretic_knowledge/knowhow as anything in knowledge_to_grant) + knowhow = new knowhow(user) + knowhow.on_gain(user, null) + +// Heretic Warrior + +/datum/outfit/deathmatch_loadout/heresy/warrior + name = "Deathmatch: Heretic Warrior" + display_name = "Heretic Warrior" + desc = "Prove the furious strength of the Mansus!" + + head = /obj/item/clothing/head/hooded/cult_hoodie/eldritch + neck = /obj/item/clothing/neck/heretic_focus + suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch + suit_store = /obj/item/melee/sickly_blade/dark + uniform = /obj/item/clothing/under/color/darkgreen + id_trim = null + belt = /obj/item/melee/sickly_blade/rust + gloves = null + shoes = /obj/item/clothing/shoes/sandal + l_pocket = /obj/item/flashlight/lantern/jade/on + r_pocket = /obj/item/melee/rune_carver + l_hand = null + + back = /obj/item/storage/backpack + + backpack_contents = list( + /obj/item/reagent_containers/cup/beaker/eldritch, + /obj/item/reagent_containers/cup/beaker/eldritch, + /obj/item/eldritch_potion/wounded, + /obj/item/eldritch_potion/wounded, + ) + + // I mean is it really that bad if they don't even know half this stuff is added to them. + // It's like, forbidden knowledge. It fits with the mansus theme - great excuse for poor design! + knowledge_to_grant = list( + /datum/heretic_knowledge/duel_stance, + /datum/heretic_knowledge/blade_grasp, + /datum/heretic_knowledge/blade_dance, + /datum/heretic_knowledge/blade_upgrade/blade, + ) + + spells_to_add = list( + /datum/action/cooldown/spell/touch/mansus_grasp, + /datum/action/cooldown/spell/realignment, + /datum/action/cooldown/spell/pointed/projectile/furious_steel, + /datum/action/cooldown/spell/cone/staggered/entropic_plume, + /datum/action/cooldown/spell/pointed/rust_construction, + ) + +// Heretic Scribe + +/datum/outfit/deathmatch_loadout/heresy/scribe + name = "Deathmatch: Heretic Scribe" + display_name = "Heretic Scribe" + desc = "Reveal the forgotten knowledge of the Mansus." + + head = /obj/item/clothing/head/helmet/chaplain/witchunter_hat + mask = /obj/item/clothing/mask/madness_mask + neck = /obj/item/clothing/neck/eldritch_amulet + suit = /obj/item/clothing/suit/hooded/cultrobes/void + suit_store = /obj/item/melee/sickly_blade + uniform = /obj/item/clothing/under/costume/gamberson/military + id_trim = null + belt = /obj/item/storage/belt/unfathomable_curio + gloves = null + shoes = /obj/item/clothing/shoes/winterboots/ice_boots + l_pocket = /obj/item/ammo_box/strilka310/lionhunter + r_pocket = /obj/item/ammo_box/strilka310/lionhunter + + back = /obj/item/gun/ballistic/rifle/lionhunter // for his neutral b, he wields a gun + + belt_contents = list( + /obj/item/heretic_labyrinth_handbook, + /obj/item/heretic_labyrinth_handbook, + /obj/item/eldritch_potion/duskndawn, + /obj/item/eldritch_potion/duskndawn, + ) + + knowledge_to_grant = list( + /datum/heretic_knowledge/cosmic_grasp, + /datum/heretic_knowledge/moon_grasp, + ) + + spells_to_add = list( + /datum/action/cooldown/spell/touch/mansus_grasp, + /datum/action/cooldown/spell/pointed/projectile/star_blast, + /datum/action/cooldown/spell/touch/star_touch, + /datum/action/cooldown/spell/pointed/mind_gate, + /datum/action/cooldown/spell/aoe/void_pull, + ) + +// Chaplain! No spells (other than smoke), but strong armor and weapons, and immune to others' spells + +/datum/outfit/deathmatch_loadout/holy_crusader + name = "Deathmatch: Holy Crusader" + display_name = "Holy Crusader" + desc = "Smite the heathens!!" + //species_override = /datum/species/plasmaman + + head = /obj/item/clothing/head/helmet/chaplain + neck = /obj/item/camera/spooky + suit = /obj/item/clothing/suit/chaplainsuit/armor/templar + suit_store = /obj/item/book/bible/booze + uniform = /obj/item/clothing/under/rank/civilian/chaplain + id_trim = null + belt = /obj/item/nullrod/non_station // choose any! + gloves = /obj/item/clothing/gloves/plate + shoes = /obj/item/clothing/shoes/plate + l_pocket = /obj/item/flashlight/lantern/on + r_pocket = /obj/item/reagent_containers/cup/glass/bottle/holywater + l_hand = /obj/item/shield/buckler + + back = /obj/item/claymore/weak // or don't + + spells_to_add = list( + /datum/action/cooldown/spell/smoke/lesser + ) + mutations_to_add = list( + /datum/mutation/human/medieval, + /datum/mutation/human/lay_on_hands, // useless, but fun + ) + +// Rat'var Apostate + +/datum/outfit/deathmatch_loadout/clock_cult + name = "Deathmatch: Clock Cultist" + display_name = "Rat'var Apostate" + desc = "You're in a fight between the servants of gods, and yours is dead. Good luck?" + + head = /obj/item/clothing/head/costume/bronze + suit = /obj/item/clothing/suit/costume/bronze + suit_store = /obj/item/toy/clockwork_watch + uniform = /obj/item/clothing/under/chameleon + id_trim = null + belt = /obj/item/brass_spear + gloves = /obj/item/clothing/gloves/tinkerer + shoes = /obj/item/clothing/shoes/bronze + l_pocket = /obj/item/reagent_containers/cup/beaker/synthflesh/named // they used to turn their dmg into tox with a spell. close enough + r_pocket = /obj/item/reagent_containers/cup/beaker/synthflesh/named diff --git a/code/modules/deathmatch/deathmatch_lobby.dm b/code/modules/deathmatch/deathmatch_lobby.dm index 2009ada4200b5..c880d1da9f035 100644 --- a/code/modules/deathmatch/deathmatch_lobby.dm +++ b/code/modules/deathmatch/deathmatch_lobby.dm @@ -289,7 +289,7 @@ /datum/deathmatch_lobby/proc/join(mob/player) if (playing || !player) return - if(!(player.ckey in players+observers)) + if(!(player.ckey in (players+observers))) if (players.len >= map.max_players) add_observer(player) else diff --git a/code/modules/deathmatch/deathmatch_mapping.dm b/code/modules/deathmatch/deathmatch_mapping.dm index 9f006e1524295..a0651f7da121b 100644 --- a/code/modules/deathmatch/deathmatch_mapping.dm +++ b/code/modules/deathmatch/deathmatch_mapping.dm @@ -11,9 +11,6 @@ /obj/effect/landmark/deathmatch_player_spawn name = "Deathmatch Player Spawner" -/area/deathmatch/teleport //Prevent access to cross-z teleportation in the map itself (no wands of safety/teleportation scrolls). Cordons should prevent same-z teleportations outside of the arena. - area_flags = /area/deathmatch::area_flags & ~NOTELEPORT - // for the illusion of a moving train /turf/open/chasm/true/no_smooth/fake_motion_sand name = "air" @@ -25,3 +22,13 @@ /turf/open/chasm/true/no_smooth/fake_motion_sand/fast icon_state = "sandmovingfast" base_icon_state = "sandmovingfast" + +// fakeout + +/turf/open/chasm/true/fakeout + name = /turf/open/floor/wood::name + // desc kept the same + icon_state = /turf/open/floor/wood::icon_state + base_icon_state = /turf/open/floor/wood::base_icon_state + icon = /turf/open/floor/wood::icon + smoothing_flags = NONE diff --git a/code/modules/deathmatch/deathmatch_maps.dm b/code/modules/deathmatch/deathmatch_maps.dm index 078555e05accb..da08ae0b3114c 100644 --- a/code/modules/deathmatch/deathmatch_maps.dm +++ b/code/modules/deathmatch/deathmatch_maps.dm @@ -17,7 +17,6 @@ /// whether we are currently being loaded by a lobby var/template_in_use = FALSE - /datum/lazy_template/deathmatch/ragecage name = "Ragecage" desc = "Fun for the whole family, the classic ragecage." @@ -205,5 +204,45 @@ map_name = "finaldestination" key = "finaldestination" +/datum/lazy_template/deathmatch/species_warfare + name = "Species Warfare" + desc = "Choose your favorite species and prove its superiority against all the other, lamer species. And also anyone else of your own." + max_players = 8 + allowed_loadouts = list( + /datum/outfit/deathmatch_loadout/humanity, + /datum/outfit/deathmatch_loadout/lizardkind, + /datum/outfit/deathmatch_loadout/mothman, + /datum/outfit/deathmatch_loadout/ethereal, + /datum/outfit/deathmatch_loadout/plasmamen, + /datum/outfit/deathmatch_loadout/felinid, + ) + map_name = "species_warfare" + key = "species_warfare" + +/datum/lazy_template/deathmatch/lattice_battles + name = "Lattice Battles" + desc = "Tired of fisticuffs all the time? Just snip the catwalk underneath instead!" + max_players = 8 + allowed_loadouts = list( + /datum/outfit/deathmatch_loadout/lattice_battles, + ) + map_name = "lattice_battles" + key = "lattice_battles" + +/datum/lazy_template/deathmatch/ragnarok + name = "Ragnarok" + desc = "Cultists, heretics, and chaplains all duking it out in the jungle to retrieve the McGuffin." + max_players = 8 + allowed_loadouts = list( + /datum/outfit/deathmatch_loadout/cultish/invoker, + /datum/outfit/deathmatch_loadout/cultish/artificer, + /datum/outfit/deathmatch_loadout/heresy/warrior, + /datum/outfit/deathmatch_loadout/heresy/scribe, + /datum/outfit/deathmatch_loadout/holy_crusader, + /datum/outfit/deathmatch_loadout/clock_cult, + ) + map_name = "ragnarok" + key = "ragnarok" + /datum/turf_reservation/indestructible_plating turf_type = /turf/open/indestructible/plating //a little hacky but i guess it has to be done diff --git a/code/modules/deathmatch/deathmatch_modifier.dm b/code/modules/deathmatch/deathmatch_modifier.dm index dadca49d70a4f..9faafa91a48b7 100644 --- a/code/modules/deathmatch/deathmatch_modifier.dm +++ b/code/modules/deathmatch/deathmatch_modifier.dm @@ -232,7 +232,7 @@ projectile.ricochets_max += 2 projectile.min_ricochets += 2 projectile.ricochet_incidence_leeway = 0 - ADD_TRAIT(projectile, TRAIT_ALWAYS_HIT_ZONE, DEATHMATCH_TRAIT) + projectile.accuracy_falloff = 0 /datum/deathmatch_modifier/stormtrooper name = "Stormtrooper Aim" diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index 4f8d8c74cb123..7110e368dce68 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -7,16 +7,19 @@ icon_state = "evidenceobj" inhand_icon_state = "" w_class = WEIGHT_CLASS_TINY + item_flags = NOBLUDGEON /obj/item/evidencebag/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - if(interacting_with == loc) + if(interacting_with == loc || !isitem(interacting_with) || HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) return NONE - evidencebagEquip(interacting_with, user) - return ITEM_INTERACT_SUCCESS + if(evidencebagEquip(interacting_with, user)) + return ITEM_INTERACT_SUCCESS + return NONE -/obj/item/evidencebag/attackby(obj/item/I, mob/user, params) - if(evidencebagEquip(I, user)) - return 1 +/obj/item/evidencebag/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(evidencebagEquip(tool, user)) + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/evidencebag/Exited(atom/movable/gone, direction) . = ..() @@ -27,7 +30,7 @@ /obj/item/evidencebag/proc/evidencebagEquip(obj/item/I, mob/user) if(!istype(I) || I.anchored) - return + return FALSE if(loc.atom_storage && I.atom_storage) to_chat(user, span_warning("No matter what way you try, you can't get [I] to fit inside [src].")) @@ -43,24 +46,24 @@ if(loc in I.get_all_contents()) // fixes tg #39452, evidence bags could store their own location, causing I to be stored in the bag while being present inworld still, and able to be teleported when removed. to_chat(user, span_warning("You find putting [I] in [src] while it's still inside it quite difficult!")) - return + return TRUE if(I.w_class > WEIGHT_CLASS_NORMAL) to_chat(user, span_warning("[I] won't fit in [src]!")) - return + return TRUE if(contents.len) to_chat(user, span_warning("[src] already has something inside it!")) - return + return TRUE if(!isturf(I.loc)) //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up. if(I.loc.atom_storage) //in a container. I.loc.atom_storage.remove_single(user, I, src) if(!user.is_holding(I) || HAS_TRAIT(I, TRAIT_NODROP)) - return + return TRUE if(QDELETED(I)) - return + return TRUE user.visible_message(span_notice("[user] puts [I] into [src]."), span_notice("You put [I] inside [src]."),\ span_hear("You hear a rustle as someone puts something into a plastic bag.")) @@ -78,7 +81,7 @@ desc = "An evidence bag containing [I]. [I.desc]" I.forceMove(src) update_weight_class(I.w_class) - return 1 + return TRUE /obj/item/evidencebag/attack_self(mob/user) if(contents.len) diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 57987eda621d9..002647f7a0816 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -74,10 +74,9 @@ // Clear the logs log = list() -/obj/item/detective_scanner/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/living/user) - return !user.combat_mode - /obj/item/detective_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(SHOULD_SKIP_INTERACTION(interacting_with, src, user)) + return NONE // lets us put our scanner away without trying to scan the bag safe_scan(user, interacting_with) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/discord/tgs_commands.dm b/code/modules/discord/tgs_commands.dm index 42d6d19ba99a7..8c6796bc1ea16 100644 --- a/code/modules/discord/tgs_commands.dm +++ b/code/modules/discord/tgs_commands.dm @@ -4,7 +4,7 @@ /datum/tgs_chat_command/tgscheck/Run(datum/tgs_chat_user/sender, params) var/server = CONFIG_GET(string/server) - return new /datum/tgs_message_content("[GLOB.round_id ? "Round #[GLOB.round_id]: " : ""][GLOB.clients.len] players on [SSmapping.config.map_name]; Round [SSticker.HasRoundStarted() ? (SSticker.IsRoundInProgress() ? "Active" : "Finishing") : "Starting"] -- [server ? server : "[world.internet_address]:[world.port]"]") + return new /datum/tgs_message_content("[GLOB.round_id ? "Round #[GLOB.round_id]: " : ""][GLOB.clients.len] players on [SSmapping.current_map.map_name]; Round [SSticker.HasRoundStarted() ? (SSticker.IsRoundInProgress() ? "Active" : "Finishing") : "Starting"] -- [server ? server : "[world.internet_address]:[world.port]"]") /datum/tgs_chat_command/gameversion name = "gameversion" diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm index d31e204333b31..8ec8e5b2d8a56 100644 --- a/code/modules/economy/account.dm +++ b/code/modules/economy/account.dm @@ -44,6 +44,7 @@ payday_modifier = modifier add_to_accounts = player_account setup_unique_account_id() + update_account_job_lists(job) pay_token = uppertext("[copytext(newname, 1, 2)][copytext(newname, -1)]-[random_capital_letter()]-[rand(1111,9999)]") /datum/bank_account/Destroy() @@ -71,11 +72,23 @@ if(SSeconomy.bank_accounts_by_id["[account_id]"]) stack_trace("Unable to find a unique account ID, substituting currently existing account of id [account_id].") SSeconomy.bank_accounts_by_id["[account_id]"] = src - if(account_job) - LAZYADD(SSeconomy.bank_accounts_by_job[account_job.type], src) + +/** + * Proc places this account into the right place in the `SSeconomy.bank_accounts_by_job` list, if needed. + * If an old job is given, it removes it from its previous place first. + */ +/datum/bank_account/proc/update_account_job_lists(datum/job/new_job, datum/job/old_job) + if(!add_to_accounts) + return + + if(old_job) + SSeconomy.bank_accounts_by_job[old_job.type] -= src + if(new_job) + LAZYADD(SSeconomy.bank_accounts_by_job[new_job.type], src) /datum/bank_account/vv_edit_var(var_name, var_value) // just so you don't have to do it manually var/old_id = account_id + var/datum/job/old_job = account_job var/old_balance = account_balance . = ..() switch(var_name) @@ -83,11 +96,15 @@ if(add_to_accounts) SSeconomy.bank_accounts_by_id -= "[old_id]" setup_unique_account_id() + if(NAMEOF(src, account_job)) + update_account_job_lists(account_job, old_job) if(NAMEOF(src, add_to_accounts)) if(add_to_accounts) setup_unique_account_id() + update_account_job_lists(account_job) else SSeconomy.bank_accounts_by_id -= "[account_id]" + SSeconomy.bank_accounts_by_job[account_job.type] -= src if(NAMEOF(src, account_balance)) add_log_to_history(var_value - old_balance, "Nanotrasen: Moderator Action") @@ -217,7 +234,7 @@ return if(card_holder.can_hear()) - card_holder.playsound_local(get_turf(card_holder), 'sound/machines/twobeep_high.ogg', 50, TRUE) + card_holder.playsound_local(get_turf(card_holder), 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) to_chat(card_holder, "[icon2html(icon_source, card_holder)] [span_notice("[message]")]") else if(isturf(card.loc)) //If on the ground var/turf/card_location = card.loc @@ -225,7 +242,7 @@ if(!potential_hearer.client || (!(get_chat_toggles(potential_hearer.client) & CHAT_BANKCARD) && !force)) continue if(potential_hearer.can_hear()) - potential_hearer.playsound_local(card_location, 'sound/machines/twobeep_high.ogg', 50, TRUE) + potential_hearer.playsound_local(card_location, 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) to_chat(potential_hearer, "[icon2html(icon_source, potential_hearer)] [span_notice("[message]")]") else var/atom/sound_atom @@ -235,7 +252,7 @@ if(!sound_atom) sound_atom = card.drop_location() //in case we're inside a bodybag in a crate or something. doing this here to only process it if there's a valid mob who can hear the sound. if(potential_hearer.can_hear()) - potential_hearer.playsound_local(get_turf(sound_atom), 'sound/machines/twobeep_high.ogg', 50, TRUE) + potential_hearer.playsound_local(get_turf(sound_atom), 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) to_chat(potential_hearer, "[icon2html(icon_source, potential_hearer)] [span_notice("[message]")]") /** diff --git a/code/modules/economy/holopay.dm b/code/modules/economy/holopay.dm index 54f6be3666a22..301a4a5d6f8cd 100644 --- a/code/modules/economy/holopay.dm +++ b/code/modules/economy/holopay.dm @@ -61,9 +61,9 @@ /obj/structure/holopay/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE) + playsound(loc, 'sound/items/weapons/egloves.ogg', 80, TRUE) if(BURN) - playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE) + playsound(loc, 'sound/items/weapons/egloves.ogg', 80, TRUE) /obj/structure/holopay/atom_deconstruct(dissambled = TRUE) dissipate() diff --git a/code/modules/emote_panel/emote_panel.dm b/code/modules/emote_panel/emote_panel.dm index 72caf05e92b27..d064161c23249 100644 --- a/code/modules/emote_panel/emote_panel.dm +++ b/code/modules/emote_panel/emote_panel.dm @@ -42,7 +42,7 @@ 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) + emote_param = tgui_input_text(ui.user, "Add params to the emote...", emote.message_param, max_length = MAX_MESSAGE_LEN) ui.user.emote(emote_key, message = emote_param, intentional = TRUE) /datum/emote_panel/ui_interact(mob/user, datum/tgui/ui) diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 5bbd1b2782b16..6fec7d2502e6d 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -101,6 +101,12 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) // The proceeding mess will almost definitely break if error messages are ever changed var/list/splitlines = splittext(E.desc, "\n") var/list/desclines = list() + var/list/state_stack = GLOB.lua_state_stack + var/is_lua_call = length(state_stack) + var/list/lua_stacks = list() + if(is_lua_call) + for(var/level in 1 to state_stack.len) + lua_stacks += list(splittext(DREAMLUAU_GET_TRACEBACK(level), "\n")) if(LAZYLEN(splitlines) > ERROR_USEFUL_LEN) // If there aren't at least three lines, there's no info for(var/line in splitlines) if(LAZYLEN(line) < 3 || findtext(line, "source file:") || findtext(line, "usr.loc:")) @@ -110,13 +116,14 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) desclines.Add(usrinfo) usrinfo = null continue // Our usr info is better, replace it - if(copytext(line, 1, 3) != " ")//3 == length(" ") + 1 desclines += (" " + line) // Pad any unpadded lines, so they look pretty else desclines += line if(usrinfo) //If this info isn't null, it hasn't been added yet desclines.Add(usrinfo) + if(is_lua_call) + SSlua.log_involved_runtime(E, desclines, lua_stacks) if(silencing) desclines += " (This error will now be silenced for [DisplayTimeText(configured_error_silence_time)])" if(GLOB.error_cache) diff --git a/code/modules/escape_menu/details.dm b/code/modules/escape_menu/details.dm index 49bd19ce97fd7..ab6ff05d3ea46 100644 --- a/code/modules/escape_menu/details.dm +++ b/code/modules/escape_menu/details.dm @@ -35,7 +35,7 @@ GLOBAL_DATUM(escape_menu_details, /atom/movable/screen/escape_menu/details) Round ID: [GLOB.round_id || "Unset"]
        Round Time: [ROUND_TIME()]
        - Map: [SSmapping.config?.map_name || "Loading..."]
        + Map: [SSmapping.current_map.map_name || "Loading..."]
        Time Dilation: [round(SStime_track.time_dilation_current,1)]%
        "} diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index 5c3e3013438bf..0e2edb42f6205 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -15,7 +15,7 @@ var/earliest_start = 20 MINUTES //The earliest world.time that an event can start (round-duration in deciseconds) default: 20 mins var/min_players = 0 //The minimum amount of alive, non-AFK human players on server required to start the event. - var/occurrences = 0 //How many times this event has occured + var/occurrences = 0 //How many times this event has occurred var/max_occurrences = 20 //The maximum number of times this event can occur (naturally), it can still be forced. //By setting this to 0 you can effectively disable an event. @@ -74,7 +74,7 @@ SHOULD_CALL_PARENT(TRUE) if(occurrences >= max_occurrences) return FALSE - if(!roundstart && !SSticker.HasRoundStarted()) // BUBBER EDIT: Roundstart checks added + if(!(roundstart ^ SSticker.HasRoundStarted())) // BUBBER EDIT: Roundstart checks added return FALSE if(weight == 0) // BUBBER EDIT: Weight check added return FALSE @@ -173,7 +173,7 @@ Runs the event */ /datum/round_event_control/proc/run_event(random = FALSE, announce_chance_override = null, admin_forced = FALSE, event_cause) /* - * We clear our signals first so we dont cancel a wanted event by accident, + * We clear our signals first so we don't cancel a wanted event by accident, * the majority of time the admin will probably want to cancel a single midround spawned random events * and not multiple events called by others admins * * In the worst case scenario we can still recall a event which we cancelled by accident, which is much better then to have a unwanted event @@ -252,7 +252,7 @@ Runs the event SHOULD_CALL_PARENT(FALSE) return -///Annouces the event name to deadchat, override this if what an event should show to deadchat is different to its event name. +///Announces the event name to deadchat, override this if what an event should show to deadchat is different to its event name. /datum/round_event/proc/announce_deadchat(random, cause) deadchat_broadcast(" has just been[random ? " randomly" : ""] triggered[cause ? " by [cause]" : ""]!", "[control.name]", message_type=DEADCHAT_ANNOUNCEMENT) //STOP ASSUMING IT'S BADMINS! @@ -299,8 +299,8 @@ Runs the event -//Do not override this proc, instead use the appropiate procs. -//This proc will handle the calls to the appropiate procs. +//Do not override this proc, instead use the appropriate procs. +//This proc will handle the calls to the appropriate procs. /datum/round_event/process() SHOULD_NOT_OVERRIDE(TRUE) if(!processing) diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 875b8c0dcf23a..2fdd161514903 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -19,14 +19,14 @@ /datum/round_event/aurora_caelus/announce(fake) 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.", - sound = 'sound/misc/notice2.ogg', + sound = 'sound/announcer/notice/notice2.ogg', sender_override = "Nanotrasen Meteorology Division") if (fake) return 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)) - M.playsound_local(M, 'sound/ambience/aurora_caelus.ogg', 20, FALSE, pressure_affected = FALSE) + M.playsound_local(M, 'sound/ambience/aurora_caelus/aurora_caelus.ogg', 20, FALSE, pressure_affected = FALSE) fade_space(fade_in = TRUE) fade_kitchen(fade_in = TRUE) @@ -66,7 +66,7 @@ fade_space() 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', + sound = 'sound/announcer/notice/notice2.ogg', sender_override = "Nanotrasen Meteorology Division") /datum/round_event/aurora_caelus/proc/fade_space(fade_in = FALSE) diff --git a/code/modules/events/earthquake.dm b/code/modules/events/earthquake.dm index 84945dc99f09d..58b0a7e40821a 100644 --- a/code/modules/events/earthquake.dm +++ b/code/modules/events/earthquake.dm @@ -112,10 +112,10 @@ earthquake_witness.playsound_local( earthquake_witness, pick( - 'sound/misc/earth_rumble_distant1.ogg', - 'sound/misc/earth_rumble_distant2.ogg', - 'sound/misc/earth_rumble_distant3.ogg', - 'sound/misc/earth_rumble_distant4.ogg', + 'sound/ambience/earth_rumble/earth_rumble_distant1.ogg', + 'sound/ambience/earth_rumble/earth_rumble_distant2.ogg', + 'sound/ambience/earth_rumble/earth_rumble_distant3.ogg', + 'sound/ambience/earth_rumble/earth_rumble_distant4.ogg', ), 75, ) @@ -150,12 +150,12 @@ playsound(epicenter, 'sound/misc/metal_creak.ogg', 125, TRUE) /datum/round_event/earthquake/end() - playsound(epicenter, 'sound/misc/earth_rumble.ogg', 125) + playsound(epicenter, 'sound/ambience/earth_rumble/earth_rumble.ogg', 125) for(var/mob/earthquake_witness as anything in GLOB.player_list) if(!is_station_level(earthquake_witness.z) || !is_mining_level(earthquake_witness.z)) continue shake_camera(earthquake_witness, 2 SECONDS, 4) - earthquake_witness.playsound_local(earthquake_witness, 'sound/effects/explosionfar.ogg', 75) + earthquake_witness.playsound_local(earthquake_witness, 'sound/effects/explosion/explosionfar.ogg', 75) // Step two of the destruction, which detonates the turfs in the earthquake zone. There is no actual explosion, meaning stuff around the earthquake zone is perfectly safe. // All turfs, and everything else that IS in the earthquake zone, however, will behave as if it were bombed. diff --git a/code/modules/events/ghost_role/fugitive_event.dm b/code/modules/events/ghost_role/fugitive_event.dm index 9eb792a6f6ab3..e08304b9925e3 100644 --- a/code/modules/events/ghost_role/fugitive_event.dm +++ b/code/modules/events/ghost_role/fugitive_event.dm @@ -54,7 +54,7 @@ gear_fugitive_leader(leader, landing_turf, backstory) //after spawning - playsound(src, 'sound/weapons/emitter.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/emitter.ogg', 50, TRUE) new /obj/item/storage/toolbox/mechanical(landing_turf) //so they can actually escape maint var/hunter_backstory = pick( HUNTER_PACK_COPS, @@ -72,7 +72,7 @@ player_mind.active = TRUE var/mob/living/carbon/human/S = new(landing_turf) player_mind.transfer_to(S) - player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/fugitive)) + player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/fugitive)) player_mind.special_role = ROLE_FUGITIVE player_mind.add_antag_datum(/datum/antagonist/fugitive) var/datum/antagonist/fugitive/fugitiveantag = player_mind.has_antag_datum(/datum/antagonist/fugitive) diff --git a/code/modules/events/ghost_role/morph_event.dm b/code/modules/events/ghost_role/morph_event.dm index 21d4b07873d86..b9841283ceed7 100644 --- a/code/modules/events/ghost_role/morph_event.dm +++ b/code/modules/events/ghost_role/morph_event.dm @@ -25,10 +25,10 @@ var/mob/living/basic/morph/corpus_accipientis = new(spawn_loc) player_mind.transfer_to(corpus_accipientis) - player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/morph)) + player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/morph)) player_mind.special_role = ROLE_MORPH player_mind.add_antag_datum(/datum/antagonist/morph) - SEND_SOUND(corpus_accipientis, sound('sound/magic/mutate.ogg')) + SEND_SOUND(corpus_accipientis, sound('sound/effects/magic/mutate.ogg')) message_admins("[ADMIN_LOOKUPFLW(corpus_accipientis)] has been made into a morph by an event.") corpus_accipientis.log_message("was spawned as a morph by an event.", LOG_GAME) spawned_mobs += corpus_accipientis diff --git a/code/modules/events/ghost_role/nightmare.dm b/code/modules/events/ghost_role/nightmare.dm index d30108d94b984..9f894c237d41c 100644 --- a/code/modules/events/ghost_role/nightmare.dm +++ b/code/modules/events/ghost_role/nightmare.dm @@ -27,11 +27,11 @@ var/mob/living/carbon/human/S = new (spawn_loc) player_mind.transfer_to(S) - player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/nightmare)) + player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/nightmare)) player_mind.special_role = ROLE_NIGHTMARE player_mind.add_antag_datum(/datum/antagonist/nightmare) S.set_species(/datum/species/shadow/nightmare) - playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) + playsound(S, 'sound/effects/magic/ethereal_exit.ogg', 50, TRUE, -1) message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Nightmare by an event.") S.log_message("was spawned as a Nightmare by an event.", LOG_GAME) spawned_mobs += S diff --git a/code/modules/events/ghost_role/operative.dm b/code/modules/events/ghost_role/operative.dm index 98cfe5ecad41e..c7ad41d001d16 100644 --- a/code/modules/events/ghost_role/operative.dm +++ b/code/modules/events/ghost_role/operative.dm @@ -22,7 +22,7 @@ operative.randomize_human_appearance(~RANDOMIZE_SPECIES) operative.dna.update_dna_identity() var/datum/mind/Mind = new /datum/mind(chosen_one.key) - Mind.set_assigned_role(SSjob.GetJobType(/datum/job/lone_operative)) + Mind.set_assigned_role(SSjob.get_job_type(/datum/job/lone_operative)) Mind.special_role = ROLE_LONE_OPERATIVE Mind.active = TRUE Mind.transfer_to(operative) diff --git a/code/modules/events/ghost_role/sentience.dm b/code/modules/events/ghost_role/sentience.dm index 092813008458a..b12dd5c517423 100644 --- a/code/modules/events/ghost_role/sentience.dm +++ b/code/modules/events/ghost_role/sentience.dm @@ -104,9 +104,9 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list( spawned_mobs += selected to_chat(selected, span_userdanger("Hello world!")) - to_chat(selected, "Due to freak radiation and/or chemicals \ + to_chat(selected, span_warning("Due to freak radiation and/or chemicals \ and/or lucky chance, you have gained human level intelligence \ - and the ability to speak and understand human language!") + and the ability to speak and understand human language!")) return SUCCESSFUL_SPAWN diff --git a/code/modules/events/ghost_role/space_dragon.dm b/code/modules/events/ghost_role/space_dragon.dm index 8a39d4a5daea5..56d82ff33c7cf 100644 --- a/code/modules/events/ghost_role/space_dragon.dm +++ b/code/modules/events/ghost_role/space_dragon.dm @@ -28,7 +28,7 @@ var/mob/living/basic/space_dragon/dragon = new(spawn_location) dragon.key = chosen_one.key dragon.mind.add_antag_datum(/datum/antagonist/space_dragon) - playsound(dragon, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) + playsound(dragon, 'sound/effects/magic/ethereal_exit.ogg', 50, TRUE, -1) message_admins("[ADMIN_LOOKUPFLW(dragon)] has been made into a Space Dragon by an event.") dragon.log_message("was spawned as a Space Dragon by an event.", LOG_GAME) spawned_mobs += dragon diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm index c65a6358ef4fd..d10c7bf960051 100644 --- a/code/modules/events/heart_attack.dm +++ b/code/modules/events/heart_attack.dm @@ -71,7 +71,7 @@ if(winner.has_status_effect(/datum/status_effect/exercised)) //Stuff that should "block" a heart attack rather than just deny eligibility for one goes here. winner.visible_message(span_warning("[winner] grunts and clutches their chest for a moment, catching [winner.p_their()] breath."), span_medal("Your chest lurches in pain for a brief moment, which quickly fades. \ You feel like you've just avoided a serious health disaster."), span_hear("You hear someone's breathing sharpen for a moment, followed by a sigh of relief."), 4) - winner.playsound_local(get_turf(winner), 'sound/health/slowbeat.ogg', 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) + winner.playsound_local(get_turf(winner), 'sound/effects/health/slowbeat.ogg', 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE) winner.Stun(3 SECONDS) if(winner.client) winner.client.give_award(/datum/award/achievement/misc/healthy, winner) diff --git a/code/modules/events/holiday/easter.dm b/code/modules/events/holiday/easter.dm index 40c7fda57c3c2..d10fb681cc5bd 100644 --- a/code/modules/events/holiday/easter.dm +++ b/code/modules/events/holiday/easter.dm @@ -66,7 +66,7 @@ //Bunny Suit /obj/item/clothing/head/costume/bunnyhead - name = "Easter Bunny Head" + name = "Easter Bunny head" icon_state = "bunnyhead" inhand_icon_state = null desc = "Considerably more cute than 'Frank'." @@ -75,7 +75,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT /obj/item/clothing/suit/costume/bunnysuit - name = "Easter Bunny Suit" + name = "easter bunny suit" desc = "Hop Hop Hop!" icon_state = "bunnysuit" icon = 'icons/obj/clothing/suits/costume.dmi' @@ -88,7 +88,7 @@ //Bunny bag! /obj/item/storage/backpack/satchel/bunnysatchel - name = "Easter Bunny Satchel" + name = "easter bunny satchel" desc = "Good for your eyes." icon_state = "satchel_carrot" inhand_icon_state = null diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 686adf1e5d3f6..9c9d81d01d73f 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -34,7 +34,7 @@ //AI laws for(var/mob/living/silicon/ai/M in GLOB.alive_mob_list) M.laws_sanity_check() - if(M.stat != DEAD && !M.incapacitated()) + if(M.stat != DEAD && !M.incapacitated) if(prob(replaceLawsetChance)) var/datum/ai_laws/ion_lawset = pick_weighted_lawset() // pick_weighted_lawset gives us a typepath, diff --git a/code/modules/events/meteors/dark_matteor_event.dm b/code/modules/events/meteors/dark_matteor_event.dm index 86d38f93e6cca..412354b16f13d 100644 --- a/code/modules/events/meteors/dark_matteor_event.dm +++ b/code/modules/events/meteors/dark_matteor_event.dm @@ -25,7 +25,7 @@ spawn_meteor(list(/obj/effect/meteor/dark_matteor = 1), null, target) /datum/round_event/dark_matteor/announce(fake) - priority_announce("Warning. Excessive tampering of meteor satellites has attracted a dark matt-eor. Signature approaching [GLOB.station_name]. Please brace for impact.", "Meteor Alert", 'sound/misc/airraid.ogg') + priority_announce("Warning. Excessive tampering of meteor satellites has attracted a dark matt-eor. Signature approaching [GLOB.station_name]. Please brace for impact.", "Meteor Alert", 'sound/announcer/alarm/airraid.ogg') /datum/event_admin_setup/warn_admin/dark_matteor warning_text = "Dark Matt-eors spawn singularities. The round is ending once a dark matt-eor hits the station. Proceed anyways?" diff --git a/code/modules/events/meteors/meteor_wave_events.dm b/code/modules/events/meteors/meteor_wave_events.dm index 8a43af74601ad..42516c961aa0b 100644 --- a/code/modules/events/meteors/meteor_wave_events.dm +++ b/code/modules/events/meteors/meteor_wave_events.dm @@ -90,8 +90,10 @@ /datum/round_event/meteor_wave/meaty wave_name = "meaty" +/* BUBBER EDIT REMOVAL BEGIN - moved to modular_zubbers/code/modules/events/meteor_wave.dm /datum/round_event/meteor_wave/meaty/announce(fake) priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.", ANNOUNCER_METEORS) +*/// BUBBER EDIT REMOVAL FINISH /datum/round_event_control/meteor_wave/dust_storm name = "Major Space Dust" diff --git a/code/modules/events/mice_migration.dm b/code/modules/events/mice_migration.dm index 450f910080018..cf0071c2e5cd4 100644 --- a/code/modules/events/mice_migration.dm +++ b/code/modules/events/mice_migration.dm @@ -23,7 +23,7 @@ priority_announce("Due to [cause], [plural] [name] have [movement] \ into the [location].", "Migration Alert", - 'sound/creatures/mousesqueek.ogg') + 'sound/mobs/non-humanoids/mouse/mousesqueek.ogg') /datum/round_event/mice_migration/start() SSminor_mapping.trigger_migration(rand(minimum_mice, maximum_mice)) diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 0ca7800ee22d1..f96b73e66a295 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -72,11 +72,11 @@ /datum/round_event/portal_storm/announce(fake) set waitfor = 0 - sound_to_playing_players('sound/magic/lightning_chargeup.ogg') + sound_to_playing_players('sound/effects/magic/lightning_chargeup.ogg') sleep(8 SECONDS) priority_announce("Massive bluespace anomaly detected en route to [station_name()]. Brace for impact.") sleep(2 SECONDS) - sound_to_playing_players('sound/magic/lightningbolt.ogg') + sound_to_playing_players('sound/effects/magic/lightningbolt.ogg') /datum/round_event/portal_storm/tick() spawn_effects(get_random_station_turf()) @@ -112,7 +112,7 @@ return T = get_step(T, SOUTHWEST) //align center of image with turf T.flick_overlay_static(storm_appearances[GET_TURF_PLANE_OFFSET(T) + 1], 15) - playsound(T, 'sound/magic/lightningbolt.ogg', rand(80, 100), TRUE) + playsound(T, 'sound/effects/magic/lightningbolt.ogg', rand(80, 100), TRUE) /datum/round_event/portal_storm/proc/spawn_hostile() if(!hostile_types || !hostile_types.len) diff --git a/code/modules/events/scrubber_overflow.dm b/code/modules/events/scrubber_overflow.dm index 1de96d1cf0a84..7f24648a9e5a7 100644 --- a/code/modules/events/scrubber_overflow.dm +++ b/code/modules/events/scrubber_overflow.dm @@ -22,23 +22,20 @@ /// A list of scrubbers that will have reagents ejected from them var/list/scrubbers = list() /// The list of chems that scrubbers can produce - - // BUBBER EDIT START - DISABLES MESSY REAGENTS - var/list/safer_chems = list(/datum/reagent/water, /datum/reagent/carbon, - // /datum/reagent/consumable/flour, + /datum/reagent/consumable/flour, /datum/reagent/space_cleaner, - // /datum/reagent/carpet/royal/blue, - // /datum/reagent/carpet/orange, + /datum/reagent/carpet/royal/blue, + /datum/reagent/carpet/orange, /datum/reagent/consumable/nutriment, /datum/reagent/consumable/condensedcapsaicin, /datum/reagent/drug/mushroomhallucinogen, /datum/reagent/lube, - // /datum/reagent/glitter/blue, - // /datum/reagent/glitter/pink, + /datum/reagent/glitter/blue, + /datum/reagent/glitter/pink, /datum/reagent/cryptobiolin, - // /datum/reagent/blood, + /datum/reagent/blood, /datum/reagent/medicine/c2/multiver, /datum/reagent/water/holywater, /datum/reagent/consumable/ethanol, @@ -51,19 +48,16 @@ /datum/reagent/consumable/laughter, /datum/reagent/concentrated_barbers_aid, /datum/reagent/baldium, - // /datum/reagent/colorful_reagent, - // /datum/reagent/consumable/salt, + /datum/reagent/colorful_reagent, + /datum/reagent/consumable/salt, /datum/reagent/consumable/ethanol/beer, /datum/reagent/hair_dye, /datum/reagent/consumable/sugar, - // /datum/reagent/glitter/white, + /datum/reagent/glitter/white, /datum/reagent/gravitum, /datum/reagent/growthserum, /datum/reagent/yuck, ) - - // BUBBER EDIT END - //needs to be chemid unit checked at some point /datum/round_event/scrubber_overflow/announce_deadchat(random, cause) diff --git a/code/modules/events/space_vines/vine_mutations.dm b/code/modules/events/space_vines/vine_mutations.dm index 5dbbd1d9795fd..6c21462193b0d 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(10) // SKYRAT 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(10) // SKYRAT EDIT CHANGE - Original: 20 /datum/spacevine_mutation/explosive // JC IT'S A BOMB name = "Explosive" @@ -180,7 +180,7 @@ if(thorn && prob(40) && !HAS_TRAIT(victim, TRAIT_PIERCEIMMUNE)) //If we found the thorns mutation there is now a chance to get stung instead of lashed or smashed. victim.apply_damage(50, BRUTE, def_zone = limb, wound_bonus = rand(-20,10), sharpness = SHARP_POINTY) //This one gets a bit lower damage because it ignores armor. victim.Stun(1 SECONDS) //Stopped in place for a moment. - playsound(living_mob, 'sound/weapons/pierce.ogg', 50, TRUE, -1) + playsound(living_mob, 'sound/items/weapons/pierce.ogg', 50, TRUE, -1) living_mob.visible_message(span_danger("[living_mob] is nailed by a sharp thorn!"), \ span_userdanger("You are nailed by a sharp thorn!")) log_combat(vine, living_mob, "aggressively pierced") //"Aggressively" for easy ctrl+F'ing in the attack logs. @@ -188,7 +188,7 @@ if(prob(80) && !HAS_TRAIT(victim, TRAIT_PIERCEIMMUNE)) victim.apply_damage(60, BRUTE, def_zone = limb, blocked = armor, wound_bonus = rand(-20,10), sharpness = SHARP_EDGED) victim.Knockdown(2 SECONDS) - playsound(victim, 'sound/weapons/whip.ogg', 50, TRUE, -1) + playsound(victim, 'sound/items/weapons/whip.ogg', 50, TRUE, -1) living_mob.visible_message(span_danger("[living_mob] is lacerated by an outburst of vines!"), \ span_userdanger("You are lacerated by an outburst of vines!")) log_combat(vine, living_mob, "aggressively lacerated") @@ -203,7 +203,7 @@ log_combat(vine, living_mob, "aggressively smashed") else //Living but not a carbon? Maybe a silicon? Can't be wounded so have a big chunk of simple bruteloss with no special effects. They can be entangled. living_mob.adjustBruteLoss(75) - playsound(living_mob, 'sound/weapons/whip.ogg', 50, TRUE, -1) + playsound(living_mob, 'sound/items/weapons/whip.ogg', 50, TRUE, -1) living_mob.visible_message(span_danger("[living_mob] is brutally threshed by [vine]!"), \ span_userdanger("You are brutally threshed by [vine]!")) log_combat(vine, living_mob, "aggressively spread into") //You aren't being attacked by the vines. You just happen to stand in their way. @@ -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(7) // SKYRAT 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(7) // SKYRAT 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 094a37371d755..78d0d0e8e3551 100644 --- a/code/modules/events/space_vines/vine_structure.dm +++ b/code/modules/events/space_vines/vine_structure.dm @@ -95,11 +95,11 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(src, 'sound/weapons/slash.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/slash.ogg', 50, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/spacevine/proc/on_entered(datum/source, atom/movable/movable) SIGNAL_HANDLER diff --git a/code/modules/events/supermatter_surge.dm b/code/modules/events/supermatter_surge.dm index c7fb6f969d82b..8d8c50a69f92e 100644 --- a/code/modules/events/supermatter_surge.dm +++ b/code/modules/events/supermatter_surge.dm @@ -92,7 +92,7 @@ /datum/round_event/supermatter_surge/announce(fake) var/class_to_announce = fake ? pick(1, 2, 3, 4) : surge_class - priority_announce("The Crystal Integrity Monitoring System has detected unusual atmospheric properties in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class [class_to_announce] Supermatter Surge Alert", 'sound/machines/engine_alert3.ogg') + priority_announce("The Crystal Integrity Monitoring System has detected unusual atmospheric properties in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class [class_to_announce] Supermatter Surge Alert", 'sound/machines/engine_alert/engine_alert3.ogg') /datum/round_event/supermatter_surge/start() engine.bullet_energy = surge_class + SURGE_BULLET_ENERGY_ADDITION @@ -126,7 +126,7 @@ fakeable = FALSE /datum/round_event/supermatter_surge/poly/announce(fake) - priority_announce("The Crystal Integrity Monitoring System has detected unusual parrot type resonance in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class P Supermatter Surge Alert", 'sound/machines/engine_alert3.ogg') + priority_announce("The Crystal Integrity Monitoring System has detected unusual parrot type resonance in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class P Supermatter Surge Alert", 'sound/machines/engine_alert/engine_alert3.ogg') #undef SURGE_DURATION_MIN #undef SURGE_DURATION_MAX diff --git a/code/modules/events/wizard/fakeexplosion.dm b/code/modules/events/wizard/fakeexplosion.dm index 78612ecf863b0..cb7c61823a162 100644 --- a/code/modules/events/wizard/fakeexplosion.dm +++ b/code/modules/events/wizard/fakeexplosion.dm @@ -7,5 +7,5 @@ description = "The nuclear explosion cutscene begins to play to scare the crew." /datum/round_event/wizard/fake_explosion/start() - sound_to_playing_players('sound/machines/alarm.ogg') + sound_to_playing_players('sound/announcer/alarm/nuke_alarm.ogg', 70) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(play_cinematic), /datum/cinematic/nuke/fake, world), 10 SECONDS) diff --git a/code/modules/events/wizard/rpgtitles.dm b/code/modules/events/wizard/rpgtitles.dm index 9512c298dea4f..b78ae483ea687 100644 --- a/code/modules/events/wizard/rpgtitles.dm +++ b/code/modules/events/wizard/rpgtitles.dm @@ -4,7 +4,7 @@ typepath = /datum/round_event/wizard/rpgtitles max_occurrences = 1 earliest_start = 0 MINUTES - description = "Everyone gains an RPG title hovering above them." + description = "Everyone gains an RPG title hovering below them." min_wizard_trigger_potency = 4 max_wizard_trigger_potency = 7 @@ -38,7 +38,7 @@ GLOBAL_DATUM(rpgtitle_controller, /datum/rpgtitle_controller) /datum/rpgtitle_controller/proc/on_crewmember_join(datum/source, mob/living/new_crewmember, rank) SIGNAL_HANDLER - var/datum/job/job = SSjob.GetJob(rank) + var/datum/job/job = SSjob.get_job(rank) //we must prepare for the mother of all strings new_crewmember.maptext_height = max(new_crewmember.maptext_height, 32) diff --git a/code/modules/experisci/destructive_scanner.dm b/code/modules/experisci/destructive_scanner.dm index d5d87eb631163..c742aaa68c028 100644 --- a/code/modules/experisci/destructive_scanner.dm +++ b/code/modules/experisci/destructive_scanner.dm @@ -33,7 +33,7 @@ var/aggressive = FALSE for(var/mob/living/living_mob in pickup_zone) if(!(obj_flags & EMAGGED) && ishuman(living_mob)) //Can only kill humans when emagged. - playsound(src, 'sound/machines/buzz-sigh.ogg', 25) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 25) say("Cannot scan with humans inside.") return aggressive = TRUE diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index de5b3abc15a30..1ec229cd1cd1e 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -142,14 +142,6 @@ experiment_proper = TRUE required_gas = /datum/gas/hypernoblium -/datum/experiment/ordnance/gaseous/halon - name = "Halon Gas Shells" - description = "The delivery of Halon gas into an area of operation might prove useful. Perform research and publish papers on this field." - gain = list(10,30,60) - target_amount = list(15,55,250) - experiment_proper = TRUE - required_gas = /datum/gas/halon - /datum/experiment/scanning/random/material/meat name = "Biological Material Scanning Experiment" description = "They told us we couldn't make chairs out of every material in the world. You're here to prove those nay-sayers wrong." diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm index 666a92fb3c817..cdbbf7dc7d04a 100644 --- a/code/modules/experisci/experiment/handlers/experiment_handler.dm +++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm @@ -93,7 +93,7 @@ SIGNAL_HANDLER if ((isnull(selected_experiment) && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE)) || (config_flags & EXPERIMENT_CONFIG_SILENT_FAIL)) return - playsound(user, 'sound/machines/buzz-sigh.ogg', 25) + playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 25) to_chat(user, span_notice("[target] is not related to your currently selected experiment.")) /** @@ -136,7 +136,7 @@ to_chat(user, span_notice("You scan [target].")) user.mind.adjust_experience(/datum/skill/research, 5) //SKYRAT EDIT: Research Skill (simple research) else if(!(config_flags & EXPERIMENT_CONFIG_SILENT_FAIL)) - playsound(user, 'sound/machines/buzz-sigh.ogg', 25) + playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 25) to_chat(user, span_notice("[target] is not related to your currently selected experiment.")) /** @@ -147,7 +147,7 @@ var/atom/movable/our_scanner = parent if (selected_experiment == null) if(!(config_flags & EXPERIMENT_CONFIG_SILENT_FAIL)) - playsound(our_scanner, 'sound/machines/buzz-sigh.ogg', 25) + playsound(our_scanner, 'sound/machines/buzz/buzz-sigh.ogg', 25) to_chat(our_scanner, span_notice("No experiment selected!")) return var/successful_scan @@ -159,7 +159,7 @@ playsound(our_scanner, 'sound/machines/ping.ogg', 25) to_chat(our_scanner, span_notice("The scan succeeds.")) else if(!(config_flags & EXPERIMENT_CONFIG_SILENT_FAIL)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 25) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 25) our_scanner.say("The scan did not result in anything.") /// Hooks on a successful autopsy experiment @@ -361,7 +361,7 @@ ) .["experiments"] += list(data) -/datum/component/experiment_handler/ui_act(action, params) +/datum/component/experiment_handler/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/experisci/experiment/types/experiment.dm b/code/modules/experisci/experiment/types/experiment.dm index add015622f621..358d795f68f59 100644 --- a/code/modules/experisci/experiment/types/experiment.dm +++ b/code/modules/experisci/experiment/types/experiment.dm @@ -99,3 +99,9 @@ experiment_handler.selected_experiment = null var/announcetext = experiment_handler.linked_web.complete_experiment(src) experiment_handler.announce_message_to_all(announcetext) + +/datum/experiment/proc/get_points_reward_text() + var/list/english_list_keys = list() + for(var/points_type in points_reward) + english_list_keys += "[points_reward[points_type]] [points_type]" + return "[english_list(english_list_keys)] points" diff --git a/code/modules/experisci/experiment/types/scanning_fish.dm b/code/modules/experisci/experiment/types/scanning_fish.dm index 0c39471e071cb..3f15622e7b1a9 100644 --- a/code/modules/experisci/experiment/types/scanning_fish.dm +++ b/code/modules/experisci/experiment/types/scanning_fish.dm @@ -64,7 +64,7 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) ///Only scannable fish will contribute towards the experiment. /datum/experiment/scanning/fish/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, obj/item/fish/target, typepath) - return target.experisci_scannable + return target.fish_flags & FISH_FLAG_EXPERIMENT_SCANNABLE /** * After a fish scanning experiment is done, more may be unlocked. If so, add them to the techweb diff --git a/code/modules/explorer_drone/control_console.dm b/code/modules/explorer_drone/control_console.dm index 8cc8854f27dc8..78451dd71a168 100644 --- a/code/modules/explorer_drone/control_console.dm +++ b/code/modules/explorer_drone/control_console.dm @@ -97,7 +97,7 @@ icon_screen = initial(icon_screen) . = ..() -/obj/machinery/computer/exodrone_control_console/ui_act(action, list/params) +/obj/machinery/computer/exodrone_control_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/explorer_drone/exodrone.dm b/code/modules/explorer_drone/exodrone.dm index 5754ccc4a5e18..8ba0f64b4a6f6 100644 --- a/code/modules/explorer_drone/exodrone.dm +++ b/code/modules/explorer_drone/exodrone.dm @@ -63,12 +63,15 @@ GLOBAL_LIST_EMPTY(exodrone_launchers) /obj/item/exodrone/Initialize(mapload) . = ..() - name = pick(strings(EXODRONE_FILE,"probe_names")) - if(name_counter[name]) - name_counter[name]++ - name = "[name] \Roman[name_counter[name]]" + if(name == /obj/item/exodrone::name) + name = pick(strings(EXODRONE_FILE,"probe_names")) + if(name_counter[name]) + name_counter[name]++ + name = "[name] \Roman[name_counter[name]]" + else + name_counter[name] = 1 else - name_counter[name] = 1 + name = name GLOB.exodrones += src // Cargo storage create_storage(max_slots = EXODRONE_CARGO_SLOTS, canthold = GLOB.blacklisted_cargo_types) diff --git a/code/modules/explorer_drone/exploration_events/trader.dm b/code/modules/explorer_drone/exploration_events/trader.dm index c4d4b5ac94b27..b686a53582d53 100644 --- a/code/modules/explorer_drone/exploration_events/trader.dm +++ b/code/modules/explorer_drone/exploration_events/trader.dm @@ -22,7 +22,7 @@ return "You encountered [name] but could not understand what they want without a translator." var/obj/want = required_path var/obj/gives = traded_path - return "Encountered [name] willing to trade [initial(want.name)] for [initial(gives.name)]" + return "Encountered [name] willing to trade [initial(gives.name)] for [initial(want.name)]" /datum/exploration_event/simple/trader/get_description(obj/item/exodrone/drone) if(requires_translator && !drone.has_tool(EXODRONE_TOOL_TRANSLATOR)) diff --git a/code/modules/explorer_drone/scanner_array.dm b/code/modules/explorer_drone/scanner_array.dm index 6317ee273bed4..0cbeb684a8c6e 100644 --- a/code/modules/explorer_drone/scanner_array.dm +++ b/code/modules/explorer_drone/scanner_array.dm @@ -121,7 +121,7 @@ GLOBAL_LIST_INIT(scan_conditions,init_scan_conditions()) . = ..() .["all_bands"] = GLOB.exoscanner_bands -/obj/machinery/computer/exoscanner_control/ui_act(action, list/params) +/obj/machinery/computer/exoscanner_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/fishing/admin.dm b/code/modules/fishing/admin.dm index ba5c29a7fd172..46212f421283b 100644 --- a/code/modules/fishing/admin.dm +++ b/code/modules/fishing/admin.dm @@ -51,12 +51,12 @@ ADMIN_VERB(fishing_calculator, R_DEBUG, "Fishing Calculator", "A calculator... f temporary_rod.set_slot(new line_type(temporary_rod), ROD_SLOT_LINE) var/result_table = list() - var/modified_table = spot.get_modified_fish_table(temporary_rod,user) + var/modified_table = spot.get_modified_fish_table(temporary_rod, user, null) for(var/result_type in spot.fish_table) // through this not modified to display 0 chance ones too var/list/info = list() info["result"] = result_type info["weight"] = modified_table[result_type] || 0 - info["difficulty"] = spot.calculate_difficulty(result_type,temporary_rod, user) + info["difficulty"] = spot.calculate_difficulty(result_type, temporary_rod, user) + /datum/fishing_challenge::difficulty info["count"] = spot.fish_counts[result_type] || "Infinite" result_table += list(info) current_table = result_table diff --git a/code/modules/fishing/aquarium/aquarium.dm b/code/modules/fishing/aquarium/aquarium.dm index 5afbf4b72d9a9..56de1a9b10f6a 100644 --- a/code/modules/fishing/aquarium/aquarium.dm +++ b/code/modules/fishing/aquarium/aquarium.dm @@ -35,7 +35,7 @@ var/last_feeding /// Can fish reproduce in this quarium. - var/allow_breeding = TRUE + var/reproduction_and_growth = TRUE //This is the area where fish can swim var/aquarium_zone_min_px = 2 @@ -295,7 +295,7 @@ else dead_fish++ - var/morb = HAS_TRAIT(user, TRAIT_MORBID) + var/morb = HAS_MIND_TRAIT(user, TRAIT_MORBID) //Check if there are live fish - good mood //All fish dead - bad mood. //No fish - nothing. @@ -307,14 +307,30 @@ /obj/structure/aquarium/ui_data(mob/user) . = ..() - .["fluid_type"] = fluid_type + .["fluidType"] = fluid_type .["temperature"] = fluid_temp - .["allow_breeding"] = allow_breeding - .["feeding_interval"] = feeding_interval / (1 MINUTES) - var/list/content_data = list() - for(var/atom/movable/fish in contents) - content_data += list(list("name"=fish.name,"ref"=ref(fish))) - .["contents"] = content_data + .["allowBreeding"] = reproduction_and_growth + .["fishData"] = list() + .["feedingInterval"] = feeding_interval / (1 MINUTES) + .["propData"] = list() + for(var/atom/movable/item in contents) + if(isfish(item)) + var/obj/item/fish/fish = item + .["fishData"] += list(list( + "fish_ref" = REF(fish), + "fish_name" = fish.name, + "fish_happiness" = fish.get_happiness_value(), + "fish_icon" = fish::icon, + "fish_icon_state" = fish::icon_state, + "fish_health" = fish.health, + )) + continue + .["propData"] += list(list( + "prop_ref" = REF(item), + "prop_name" = item.name, + "prop_icon" = item::icon, + "prop_icon_state" = item::icon_state, + )) /obj/structure/aquarium/ui_static_data(mob/user) . = ..() @@ -322,8 +338,9 @@ .["minTemperature"] = min_fluid_temp .["maxTemperature"] = max_fluid_temp .["fluidTypes"] = fluid_types + .["heartIcon"] = 'icons/effects/effects.dmi' -/obj/structure/aquarium/ui_act(action, params) +/obj/structure/aquarium/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -339,20 +356,25 @@ fluid_type = params["fluid"] SEND_SIGNAL(src, COMSIG_AQUARIUM_FLUID_CHANGED, fluid_type) . = TRUE - if("allow_breeding") - allow_breeding = !allow_breeding + if("reproduction_and_growth") + reproduction_and_growth = !reproduction_and_growth . = TRUE if("feeding_interval") feeding_interval = params["feeding_interval"] MINUTES . = TRUE - if("remove") - var/atom/movable/inside = locate(params["ref"]) in contents - if(inside) - if(isitem(inside)) - user.put_in_hands(inside) - else - inside.forceMove(get_turf(src)) - to_chat(user,span_notice("You take out [inside] from [src].")) + if("pet_fish") + var/obj/item/fish/fish = locate(params["fish_reference"]) in contents + fish?.pet_fish(user) + if("remove_item") + var/atom/movable/item = locate(params["item_reference"]) in contents + item?.forceMove(drop_location()) + to_chat(user, span_notice("You take out [item] from [src].")) + if("rename_fish") + var/new_name = sanitize_name(params["chosen_name"]) + if(!new_name) + return + var/atom/movable/fish = locate(params["fish_reference"]) in contents + fish.name = new_name /obj/structure/aquarium/ui_interact(mob/user, datum/tgui/ui) . = ..() @@ -374,7 +396,7 @@ possible_destinations_for_fish = get_adjacent_open_turfs(droploc) else possible_destinations_for_fish = list(droploc) - playsound(src, 'sound/effects/glassbr3.ogg', 100, TRUE) + playsound(src, 'sound/effects/glass/glassbr3.ogg', 100, TRUE) for(var/atom/movable/fish in contents) fish.forceMove(pick(possible_destinations_for_fish)) if(fluid_type != AQUARIUM_FLUID_AIR) @@ -399,9 +421,13 @@ new /obj/item/aquarium_prop/sand(src) new /obj/item/aquarium_prop/seaweed(src) - new /obj/item/fish/goldfish/gill(src) + if(prob(85)) + new /obj/item/fish/goldfish/gill(src) + reagents.add_reagent(/datum/reagent/consumable/nutriment, 2) + else + new /obj/item/fish/goldfish/three_eyes/gill(src) + reagents.add_reagent(/datum/reagent/toxin/mutagen, 2) //three eyes goldfish feed on mutagen. - reagents.add_reagent(/datum/reagent/consumable/nutriment, 2) /obj/structure/aquarium/prefilled anchored = TRUE diff --git a/code/modules/fishing/aquarium/aquarium_kit.dm b/code/modules/fishing/aquarium/aquarium_kit.dm index fcb3d90f9f910..11fd841009d08 100644 --- a/code/modules/fishing/aquarium/aquarium_kit.dm +++ b/code/modules/fishing/aquarium/aquarium_kit.dm @@ -58,7 +58,7 @@ name = "ominous fish case" /obj/item/storage/fish_case/syndicate/get_fish_type() - return pick(/obj/item/fish/donkfish, /obj/item/fish/emulsijack, /obj/item/fish/jumpercable) + return pick(/obj/item/fish/donkfish, /obj/item/fish/emulsijack, /obj/item/fish/jumpercable, /obj/item/fish/chainsawfish) /obj/item/storage/fish_case/tiziran name = "imported fish case" @@ -122,7 +122,16 @@ /obj/item/aquarium_prop/Initialize(mapload) . = ..() - AddComponent(/datum/component/aquarium_content, icon, beauty = beauty) + //It's important that we register the signals before the component is attached. + RegisterSignal(src, COMSIG_AQUARIUM_CONTENT_GENERATE_APPEARANCE, PROC_REF(generate_aquarium_appearance)) + AddComponent(/datum/component/aquarium_content, beauty = beauty) + ADD_TRAIT(src, TRAIT_UNIQUE_AQUARIUM_CONTENT, INNATE_TRAIT) + +/obj/item/aquarium_prop/proc/generate_aquarium_appearance(datum/source, obj/effect/aquarium/visual) + SIGNAL_HANDLER + visual.icon = icon + visual.icon_state = icon_state + visual.layer_mode = layer_mode /obj/item/aquarium_prop/rocks name = "decorative rocks" diff --git a/code/modules/fishing/aquarium/fish_analyzer.dm b/code/modules/fishing/aquarium/fish_analyzer.dm index 3d01479ef5a2f..905d3549128d5 100644 --- a/code/modules/fishing/aquarium/fish_analyzer.dm +++ b/code/modules/fishing/aquarium/fish_analyzer.dm @@ -8,6 +8,7 @@ worn_icon_state = "fish_analyzer" desc = "A fish-shaped scanner used to monitor fish's status and evolutionary traits." obj_flags = CONDUCTS_ELECTRICITY + custom_price = PAYCHECK_CREW * 3 item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT throwforce = 3 @@ -40,7 +41,7 @@ register_item_context() update_appearance() - + AddComponent(/datum/component/adjust_fishing_difficulty, -3, ITEM_SLOT_HANDS) /obj/item/fish_analyzer/examine(mob/user) . = ..() @@ -127,7 +128,7 @@ "fish_food_color" = fishie.food::color, "fish_min_temp" = fishie.required_temperature_min, "fish_max_temp" = fishie.required_temperature_max, - "fish_hunger" = HAS_TRAIT(fishie, TRAIT_FISH_NO_HUNGER) ? 0 : PERCENT(min((world.time - fishie.last_feeding) / fishie.feeding_frequency, 1)), + "fish_hunger" = HAS_TRAIT(fishie, TRAIT_FISH_NO_HUNGER) ? 0 : 1 - fishie.get_hunger(), "fish_fluid_compatible" = aquarium ? compatible_fluid_type(fishie.required_fluid_type, aquarium.fluid_type) : null, "fish_fluid_type" = fishie.required_fluid_type, "fish_breed_timer" = round(max(fishie.breeding_wait - world.time, 0) / 10), diff --git a/code/modules/fishing/bait.dm b/code/modules/fishing/bait.dm index 78d18aa539e8d..ec758be704201 100644 --- a/code/modules/fishing/bait.dm +++ b/code/modules/fishing/bait.dm @@ -1,6 +1,6 @@ /obj/item/bait_can name = "can o bait" - desc = "there's a lot of them in there, getting them out takes a while though" + desc = "there's a lot of them in there, getting them out takes a while though." icon = 'icons/obj/fishing.dmi' icon_state = "bait_can" base_icon_state = "bait_can" @@ -61,3 +61,239 @@ bait_type = /obj/item/food/bait/doughball/synthetic/super uses_left = 12 +/obj/item/fishing_lure + name = "artificial minnow" + desc = "A fishing lure meant to attract smaller omnivore fish." + icon = 'icons/obj/fishing.dmi' + icon_state = "minnow" + w_class = WEIGHT_CLASS_SMALL + /** + * A list with two keys delimiting the spinning interval in which a mouse click has to be pressed while fishing. + * This is passed down to the fishing rod, and then to the lure during the minigame. + */ + var/spin_frequency = list(2 SECONDS, 3 SECONDS) + +/obj/item/fishing_lure/Initialize(mapload) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_BAIT_ALLOW_FISHING_DUD, TRAIT_OMNI_BAIT, TRAIT_BAIT_UNCONSUMABLE), INNATE_TRAIT) + RegisterSignal(src, COMSIG_FISHING_EQUIPMENT_SLOTTED, PROC_REF(lure_equipped)) + +/obj/item/fishing_lure/proc/lure_equipped(datum/source, obj/item/fishing_rod/rod) + SIGNAL_HANDLER + rod.spin_frequency = spin_frequency + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_removed)) + +/obj/item/fishing_lure/proc/on_removed(atom/movable/source, obj/item/fishing_rod/rod, dir, forced) + SIGNAL_HANDLER + UnregisterSignal(src, COMSIG_MOVABLE_MOVED) + rod.spin_frequency = null + +///Called for every fish subtype by the fishing subsystem when initializing, to populate the list of fish that can be catched with this lure. +/obj/item/fishing_lure/proc/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/avg_size = initial(fish_type.average_size) + var/intermediate_size = FISH_SIZE_SMALL_MAX + (FISH_SIZE_NORMAL_MAX - FISH_SIZE_SMALL_MAX) + if(!ISINRANGE(avg_size, FISH_SIZE_TINY_MAX * 0.5, intermediate_size)) + return FALSE + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/vegan, /datum/fish_trait/picky_eater, /datum/fish_trait/nocturnal, /datum/fish_trait/heavy) & fish_traits)) + return FALSE + return TRUE + +/obj/item/fishing_lure/examine(mob/user) + . = ..() + . += span_info("It has to be spun with a frequency of [spin_frequency[1] * 0.1] to [spin_frequency[2] * 0.1] seconds while fishing.") + if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISHING_SPOT)) + . += span_tinynotice("Thanks to your experience, you can examine it again to get a list of fish you can catch with it.") + +/obj/item/fishing_lure/examine_more(mob/user) + . = ..() + if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISHING_SPOT)) + return + + var/list/known_fishes = list() + for(var/obj/item/fish/fish_type as anything in SSfishing.lure_catchables[type]) + if(initial(fish_type.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG) + known_fishes += initial(fish_type.name) + + if(!length(known_fishes)) + return + + . += span_info("You can catch the following fish with this lure: [english_list(known_fishes)].") + +///Check if the fish is in the list of catchable fish for this fishing lure. Return value is a multiplier. +/obj/item/fishing_lure/check_bait(obj/item/fish/fish_type) + var/multiplier = 0 + if(is_type_in_list(/obj/item/fishing_lure, SSfishing.fish_properties[fish_type][FISH_PROPERTIES_FAV_BAIT])) + multiplier += 2 + if(fish_type in SSfishing.lure_catchables[type]) + multiplier += 10 + return multiplier + +/obj/item/fishing_lure/plug + name = "big plug lure" + desc = "A fishing lure used to catch larger omnivore fish." + icon_state = "plug" + +/obj/item/fishing_lure/plug/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/avg_size = initial(fish_type.average_size) + if(avg_size <= FISH_SIZE_SMALL_MAX) + return FALSE + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/vegan, /datum/fish_trait/picky_eater, /datum/fish_trait/nocturnal, /datum/fish_trait/heavy) & fish_traits)) + return FALSE + return TRUE + +/obj/item/fishing_lure/dropping + name = "plastic dropping" + desc = "A fishing lure to catch all sort of slimy, ratty, disgusting and/or junk-loving fish." + icon_state = "dropping" + spin_frequency = list(1.5 SECONDS, 2.8 SECONDS) + +/obj/item/fishing_lure/dropping/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/sources = list(/datum/fish_source/toilet, /datum/fish_source/moisture_trap) + for(var/datum/fish_source/source as anything in sources) + var/datum/fish_source/instance = GLOB.preset_fish_sources[/datum/fish_source/toilet] + if(fish_type in instance.fish_table) + return TRUE + var/list/fav_baits = fish_properties[FISH_PROPERTIES_FAV_BAIT] + for(var/list/identifier in fav_baits) + if(identifier[FISH_BAIT_TYPE] == FISH_BAIT_FOODTYPE && (identifier[FISH_BAIT_VALUE] & (JUNKFOOD|GROSS|TOXIC))) + return TRUE + if(initial(fish_type.beauty) <= FISH_BEAUTY_DISGUSTING) + return TRUE + return FALSE + +/obj/item/fishing_lure/spoon + name = "\improper Indy spoon lure" + desc = "A lustrous piece of metal mimicking the scales of a fish. Good for catching small to medium freshwater omnivore fish." + icon_state = "spoon" + spin_frequency = list(1.25 SECONDS, 2.25 SECONDS) + +/obj/item/fishing_lure/spoon/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/avg_size = initial(fish_type.average_size) + if(!ISINRANGE(avg_size, FISH_SIZE_TINY_MAX + 1, FISH_SIZE_NORMAL_MAX)) + return FALSE + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/vegan, /datum/fish_trait/picky_eater, /datum/fish_trait/nocturnal, /datum/fish_trait/heavy) & fish_traits)) + return FALSE + var/fluid_type = initial(fish_type.required_fluid_type) + if(fluid_type == AQUARIUM_FLUID_FRESHWATER || fluid_type == AQUARIUM_FLUID_ANADROMOUS || fluid_type == AQUARIUM_FLUID_ANY_WATER) + return TRUE + if((/datum/fish_trait/amphibious in fish_traits) && fluid_type == AQUARIUM_FLUID_AIR) + return TRUE + return FALSE + +/obj/item/fishing_lure/artificial_fly + name = "\improper Silkbuzz artificial fly" + desc = "A fishing lure resembling a large wooly fly. Good for catching all sort of picky fish." + icon_state = "artificial_fly" + spin_frequency = list(1.1 SECONDS, 2 SECONDS) + +/obj/item/fishing_lure/artificial_fly/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(/datum/fish_trait/picky_eater in fish_traits) + return TRUE + return FALSE + +/obj/item/fishing_lure/led + name = "\improper LED fishing lure" + desc = "A heavy, waterproof and fish-looking LED stick, used to catch abyssal and demersal fish alike." + icon_state = "led" + spin_frequency = list(3 SECONDS, 3.8 SECONDS) + +/obj/item/fishing_lure/led/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_BAIT_IGNORE_ENVIRONMENT, INNATE_TRAIT) + update_appearance(UPDATE_OVERLAYS) + +/obj/item/fishing_lure/led/update_overlays() + . = ..() + . += emissive_appearance(icon, "led_emissive", src) + +/obj/item/fishing_lure/led/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/nocturnal, /datum/fish_trait/heavy) & fish_traits)) + return TRUE + return FALSE + +/obj/item/fishing_lure/lucky_coin + name = "\improper Maneki-Coin lure" + desc = "A faux-gold lure used to attract shiny-loving fish." + icon_state = "lucky_coin" + spin_frequency = list(1.5 SECONDS, 2.7 SECONDS) + +/obj/item/fishing_lure/lucky_coin/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(/datum/fish_trait/shiny_lover in fish_traits) + return TRUE + return FALSE + +/obj/item/fishing_lure/algae + name = "plastic algae lure" + desc = "A soft clump of fake algae used to attract herbivore water critters." + icon_state = "algae" + spin_frequency = list(3 SECONDS, 5 SECONDS) + +/obj/item/fishing_lure/algae/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(/datum/fish_trait/vegan in fish_traits) + return TRUE + return FALSE + +/obj/item/fishing_lure/grub + name = "\improper Twister Worm lure" + desc = "A soft plastic lure with the body of a grub and a twisting tail. Good for panfish and other small omnivore fish." + icon_state = "grub" + spin_frequency = list(1 SECONDS, 2.7 SECONDS) + +/obj/item/fishing_lure/grub/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + if(initial(fish_type.average_size) >= FISH_SIZE_SMALL_MAX) + return FALSE + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(length(list(/datum/fish_trait/vegan, /datum/fish_trait/picky_eater) & fish_traits)) + return FALSE + return TRUE + +/obj/item/fishing_lure/buzzbait + name = "\improper Electric-Buzz lure" + desc = "A metallic, colored clanked attached to a series of cables that somehow attract shock-worthy fish." + icon_state = "buzzbait" + spin_frequency = list(0.8 SECONDS, 1.7 SECONDS) + +/obj/item/fishing_lure/buzzbait/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(/datum/fish_trait/electrogenesis in fish_traits) + return TRUE + return FALSE + +/obj/item/fishing_lure/spinnerbait + name = "spinnerbait lure" + desc = "A versatile lure, good for catching all sort of predatory freshwater fish." + icon_state = "spinnerbait" + spin_frequency = list(2 SECONDS, 4 SECONDS) + +/obj/item/fishing_lure/spinnerbait/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(!(/datum/fish_trait/predator in fish_traits)) + return FALSE + var/init_fluid_type = initial(fish_type.required_fluid_type) + if(init_fluid_type == AQUARIUM_FLUID_FRESHWATER || init_fluid_type == AQUARIUM_FLUID_ANADROMOUS || init_fluid_type == AQUARIUM_FLUID_ANY_WATER) + return TRUE + if((/datum/fish_trait/amphibious in fish_traits) && init_fluid_type == AQUARIUM_FLUID_AIR) //fluid type is changed to freshwater on init + return TRUE + return FALSE + +/obj/item/fishing_lure/daisy_chain + name = "daisy chain lure" + desc = "A lure resembling a small school of fish, good for catching several saltwater predators." + icon_state = "daisy_chain" + spin_frequency = list(2 SECONDS, 4 SECONDS) + +/obj/item/fishing_lure/daisy_chain/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties) + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] + if(!(/datum/fish_trait/predator in fish_traits)) + return FALSE + var/init_fluid_type = initial(fish_type.required_fluid_type) + if(init_fluid_type == AQUARIUM_FLUID_SALTWATER || init_fluid_type == AQUARIUM_FLUID_ANADROMOUS || init_fluid_type == AQUARIUM_FLUID_ANY_WATER) + return TRUE + return FALSE diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 3b0c48fb41e65..d88129a7c43ec 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -1,39 +1,44 @@ +#define FISH_SAD 0 +#define FISH_VERY_HAPPY 4 + +#define GET_FISH_ELECTROGENESIS(fish) (fish.electrogenesis_power * fish.size * 0.1) + // Fish path used for autogenerated fish /obj/item/fish - name = "generic looking aquarium fish" + name = "fish" desc = "very bland" icon = 'icons/obj/aquarium/fish.dmi' - icon_state = "bugfish" lefthand_file = 'icons/mob/inhands/fish_lefthand.dmi' righthand_file = 'icons/mob/inhands/fish_righthand.dmi' - inhand_icon_state = "fish_normal" force = 6 + throwforce = 6 + throw_range = 8 attack_verb_continuous = list("slaps", "whacks") attack_verb_simple = list("slap", "whack") - hitsound = 'sound/weapons/slap.ogg' - ///The grind results of the fish. They scale with the weight of the fish. - grind_results = list(/datum/reagent/blood = 5, /datum/reagent/consumable/liquidgibs = 5) + hitsound = SFX_DEFAULT_FISH_SLAP + drop_sound = 'sound/mobs/non-humanoids/fish/fish_drop1.ogg' + pickup_sound = SFX_FISH_PICKUP + sound_vary = TRUE obj_flags = UNIQUE_RENAME + item_flags = IMMUTABLE_SLOW|SLOWS_WHILE_IN_HAND - /// Resulting width of aquarium visual icon - default size of "fish_greyscale" state - var/sprite_width = 3 - /// Resulting height of aquarium visual icon - default size of "fish_greyscale" state - var/sprite_height = 3 + /// Flags for fish variables that would otherwise be TRUE/FALSE + var/fish_flags = FISH_FLAG_SHOW_IN_CATALOG|FISH_DO_FLOP_ANIM|FISH_FLAG_EXPERIMENT_SCANNABLE - /// Original width of aquarium visual icon - used to calculate scaledown factor - var/source_width = 32 - /// Original height of aquarium visual icon - used to calculate scaledown factor - var/source_height = 32 + /// width of aquarium visual icon + var/sprite_width + /// height of aquarium visual icon + var/sprite_height + ///this icon file will be used for in-aquarium visual for the fish + var/dedicated_in_aquarium_icon = 'icons/obj/aquarium/fish.dmi' /** - * If present and it also has a dedicated icon state, this icon file will - * be used for in-aquarium visual for the fish instead of its icon + * The icon_state that will be used for in-aquarium visual for the fish + * If not set, "[initial(icon_state)]_small" will be used instead */ - var/dedicated_in_aquarium_icon - /// If present this icon will be used for in-aquarium visual for the fish instead of icon_state var/dedicated_in_aquarium_icon_state - /// If present aquarium visual will be this color + /// If present aquarium visual will be of this color var/aquarium_vc_color /// Required fluid type for this fish to live. @@ -47,23 +52,19 @@ var/datum/reagent/food = /datum/reagent/consumable/nutriment /// How often the fish needs to be fed var/feeding_frequency = 5 MINUTES - /// Time of last feedeing + /// Time of last the fish was fed var/last_feeding /// Fish status var/status = FISH_ALIVE ///icon used when the fish is dead, ifset. var/icon_state_dead - ///If this fish should do the flopping animation - var/do_flop_animation = TRUE /// Current fish health. Dies at 0. var/health = 100 /// The message shown when the fish dies. var/death_text = "%SRC dies." - /// Should this fish type show in fish catalog - var/show_in_catalog = TRUE /// How rare this fish is in the random cases var/random_case_rarity = FISH_RARITY_BASIC @@ -80,10 +81,10 @@ var/breeding_timeout = 2 MINUTES /// If set, the fish can also breed with these fishes types var/list/compatible_types + /// If set, when procreating these are the types of fish that will be generate instead of 'type' + var/list/spawn_types /// A list of possible evolutions. If set, offsprings may be of a different, new fish type if conditions are met. var/list/evolution_types - /// The species' name(s) of the parents of the fish. Shown by the fish analyzer. - var/progenitors // Fishing related properties @@ -93,8 +94,8 @@ */ var/list/fish_traits = list() - /// Fishing behaviour - var/fish_ai_type = FISH_AI_DUMB + /// path to datums that dictate how the fish moves during the fishing minigame + var/fish_movement_type = /datum/fish_movement /// Base additive modifier to fishing difficulty var/fishing_difficulty_modifier = 0 @@ -115,11 +116,18 @@ var/size /// Average size for this fish type in centimeters. Will be used as gaussian distribution with 20% deviation for fishing, bought fish are always standard size var/average_size = 50 + /// The maximum size this fish can reach, calculated the first time update_size_and_weight() is called. + var/maximum_size /// Weight in grams. Null until update_size_and_weight is called. Grind results scale with it. Don't think too hard how a trout could fit in a blender. var/weight /// Average weight for this fish type in grams var/average_weight = 1000 + /// The maximum weight this fish can reach, calculated the first time update_size_and_weight() is called. + var/maximum_weight + + ///The general deviation from the average weight and size this fish has in the wild + var/weight_size_deviation = 0.2 /// When outside of an aquarium, these gases that are checked (as well as pressure and temp) to assert if the environment is safe or not. var/list/safe_air_limits = list( @@ -132,25 +140,37 @@ var/min_pressure = WARNING_LOW_PRESSURE var/max_pressure = HAZARD_HIGH_PRESSURE - /// If this fish type counts towards the Fish Species Scanning experiments - var/experisci_scannable = TRUE /// cooldown on creating tesla zaps COOLDOWN_DECLARE(electrogenesis_cooldown) - /// power of the tesla zap created by the fish in a bioelectric generator - var/electrogenesis_power = 10 MEGA JOULES + /// power of the tesla zap created by the fish in a bioelectric generator. Scales with size. + var/electrogenesis_power = 2 MEGA JOULES /// The beauty this fish provides to the aquarium it's inserted in. var/beauty = FISH_BEAUTY_GENERIC + /** + * If you wonder why this isn't being tracked by the edible component instead: + * We reset the this value when revived, and slowly chip it away as we heal. + * Of course, it would be daunting to get this to be handled by the edible component + * given its complexity. + */ + var/bites_amount = 0 + /obj/item/fish/Initialize(mapload, apply_qualities = TRUE) . = ..() - AddComponent(/datum/component/aquarium_content, icon, PROC_REF(get_aquarium_animation), list(COMSIG_FISH_STIRRED), beauty) + base_icon_state = icon_state + //It's important that we register the signals before the component is attached. + RegisterSignal(src, COMSIG_AQUARIUM_CONTENT_DO_ANIMATION, PROC_REF(update_aquarium_animation)) + RegisterSignal(src, AQUARIUM_CONTENT_RANDOMIZE_POSITION, PROC_REF(randomize_aquarium_position)) + RegisterSignal(src, COMSIG_AQUARIUM_CONTENT_GENERATE_APPEARANCE, PROC_REF(update_aquarium_appearance)) + AddComponent(/datum/component/aquarium_content, list(COMSIG_FISH_STIRRED), beauty) RegisterSignal(src, COMSIG_ATOM_ON_LAZARUS_INJECTOR, PROC_REF(use_lazarus)) - if(do_flop_animation) + if(fish_flags & FISH_DO_FLOP_ANIM) RegisterSignal(src, COMSIG_ATOM_TEMPORARY_ANIMATION_START, PROC_REF(on_temp_animation)) - check_environment() + check_flopping() if(status != FISH_DEAD) + ADD_TRAIT(src, TRAIT_UNCOMPOSTABLE, REF(src)) //Composting a food that is not real food wouldn't work anyway. START_PROCESSING(SSobj, src) //stops new fish from being able to reproduce right away. @@ -160,50 +180,265 @@ if(apply_qualities) apply_traits() //Make sure traits are applied before size and weight. update_size_and_weight() - progenitors = full_capitalize(name) //default value register_evolutions() + register_context() + register_item_context() + +/obj/item/fish/add_item_context(atom/source, list/context, obj/item/held_item, mob/user) + if(HAS_TRAIT(source, TRAIT_CATCH_AND_RELEASE)) + context[SCREENTIP_CONTEXT_RMB] = "Release" + return CONTEXTUAL_SCREENTIP_SET + return NONE + +/obj/item/fish/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(src == held_item) + context[SCREENTIP_CONTEXT_LMB] = "Pet" + return CONTEXTUAL_SCREENTIP_SET + if(istype(held_item, /obj/item/fish_feed)) + context[SCREENTIP_CONTEXT_LMB] = "Feed" + return CONTEXTUAL_SCREENTIP_SET + if(istype(held_item, /obj/item/fish_analyzer)) + context[SCREENTIP_CONTEXT_LMB] = "Scan" + return CONTEXTUAL_SCREENTIP_SET + return NONE + +/obj/item/fish/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(!HAS_TRAIT(interacting_with, TRAIT_CATCH_AND_RELEASE)) + return NONE + if(HAS_TRAIT(src, TRAIT_NODROP)) + balloon_alert(user, "it's stuck to your hand!") + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "releasing fish...") + if(!do_after(src, 3 SECONDS, interacting_with)) + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "fish released") + var/goodbye_text = "Bye bye [name]." + if(status == FISH_DEAD && !HAS_MIND_TRAIT(user, TRAIT_NAIVE)) + goodbye_text = "May it rest in peace..." + user.visible_message(span_notice("[user] releases [src] into [interacting_with]"), \ + span_notice("You release [src] into [interacting_with]. [goodbye_text]"), \ + span_notice("You hear a splash.")) + playsound(interacting_with, 'sound/effects/splash.ogg', 50) + SEND_SIGNAL(interacting_with, COMSIG_FISH_RELEASED_INTO, src) + qdel(src) + return ITEM_INTERACT_SUCCESS + +///Main proc that makes the fish edible. +/obj/item/fish/proc/make_edible() + var/foodtypes = get_food_types() + if(foodtypes & RAW) + AddComponent(/datum/component/infective, GLOB.floor_diseases.Copy(), weak = TRUE, weak_infection_chance = PERFORM_ALL_TESTS(edible_fish) ? 100 : 15) + else + AddComponent(/datum/component/germ_sensitive) + var/bites_to_finish = weight / FISH_WEIGHT_BITE_DIVISOR + create_reagents(INFINITY) //We'll set this to the total volume of the reagents right after generate_fish_reagents() is over + generate_fish_reagents(bites_to_finish) + reagents.maximum_volume = round(reagents.total_volume * 1.25) //make some meager space for condiments. + AddComponent(/datum/component/edible, \ + food_flags = FOOD_NO_EXAMINE|FOOD_NO_BITECOUNT, \ + foodtypes = foodtypes, \ + volume = reagents.total_volume, \ + eat_time = 1.5 SECONDS, \ + bite_consumption = reagents.total_volume / bites_to_finish, \ + after_eat = CALLBACK(src, PROC_REF(after_eat)), \ + check_liked = CALLBACK(src, PROC_REF(check_liked)), \ + reagent_purity = 1, \ + ) + RegisterSignals(src, list(COMSIG_ITEM_FRIED, COMSIG_ITEM_BARBEQUE_GRILLED), PROC_REF(on_fish_cooked)) + +///A proc that returns the food types the edible component has when initialized. +/obj/item/fish/proc/get_food_types() + return SEAFOOD|MEAT|RAW|GORE + +///Kill the fish, remove the raw and gore food types, and the infectiveness too if not under-cooked. +/obj/item/fish/proc/on_fish_cooked(datum/source, cooking_time) + SIGNAL_HANDLER + SHOULD_NOT_OVERRIDE(TRUE) + adjust_health(0) + + //Remove the blood from the reagents holder and reward the player with some extra nutriment added to the fish. + var/datum/reagent/consumable/nutriment/protein/protein = reagents.has_reagent(/datum/reagent/consumable/nutriment/protein, check_subtypes = TRUE) + var/datum/reagent/blood/blood = reagents.has_reagent(/datum/reagent/blood) + var/old_blood_volume = blood ? blood.volume : 0 //we can't use the ?. operator since the above proc doesn't return null but 0 + reagents.del_reagent(/datum/reagent/blood) + + ///Make space for the additional nutriment + if(blood || protein) + var/volume_mult = 1 + var/protein_volume = protein ? protein.volume : 0 + if(bites_amount) + var/initial_bites_left = weight / FISH_WEIGHT_BITE_DIVISOR + var/bites_left = initial_bites_left - bites_amount + volume_mult = initial_bites_left / bites_left + adjust_reagents_capacity((protein_volume - old_blood_volume) * volume_mult) + ///Add the extra nutriment + if(protein) + reagents.multiply_single_reagent(/datum/reagent/consumable/nutriment/protein, 2) + + var/datum/component/edible/edible = GetComponent(/datum/component/edible) + edible.foodtypes &= ~(RAW|GORE) + if(cooking_time >= FISH_SAFE_COOKING_DURATION) + well_cooked() + + ///override the signals so they don't mess with blood and proteins again. + RegisterSignals(src, list(COMSIG_ITEM_FRIED, COMSIG_ITEM_BARBEQUE_GRILLED), PROC_REF(on_fish_cooked_again), TRUE) + +///Just kill the fish, again, and perhaps remove the infective comp. +/obj/item/fish/proc/on_fish_cooked_again(datum/source, cooking_time) + SIGNAL_HANDLER + if(!HAS_TRAIT(src, TRAIT_FISH_SURVIVE_COOKING)) + adjust_health(0) + if(cooking_time >= FISH_SAFE_COOKING_DURATION) + well_cooked() + +///The fish is well cooked. Change how the fish tastes, remove the infective comp and add the relative trait. +/obj/item/fish/proc/well_cooked() + qdel(GetComponent(/datum/component/infective)) + AddComponent(/datum/component/germ_sensitive) + ADD_TRAIT(src, TRAIT_FISH_WELL_COOKED, INNATE_TRAIT) + var/datum/reagent/consumable/nutriment/protein/protein = reagents.has_reagent(/datum/reagent/consumable/nutriment/protein, check_subtypes = TRUE) + if(protein) + protein.data = get_fish_taste_cooked() + +///Checks if the fish is liked or not when eaten by a human. +/obj/item/fish/proc/check_liked(mob/living/eater) + if(HAS_TRAIT(eater, TRAIT_PACIFISM) && (status == FISH_ALIVE ||HAS_MIND_TRAIT(eater, TRAIT_NAIVE))) + eater.add_mood_event("eating_fish", /datum/mood_event/pacifist_eating_fish_item) + return FOOD_TOXIC + if(HAS_TRAIT(eater, TRAIT_AGEUSIA)) + return + if(HAS_TRAIT(eater, TRAIT_FISH_EATER) && !HAS_TRAIT(eater, TRAIT_VEGETARIAN)) + return FOOD_LIKED + +/** + * Fish is not a reagent holder yet it's edible, so it doen't behave like most other snacks + * which means it has its own way of handling being bitten, which is defined here. + */ +/obj/item/fish/proc/after_eat(mob/living/eater, mob/living/feeder) + SHOULD_CALL_PARENT(TRUE) + if(!reagents.total_volume) + return + bites_amount++ + var/bites_to_finish = weight / FISH_WEIGHT_BITE_DIVISOR + adjust_health(health - (initial(health) / bites_to_finish) * 3) + if(status == FISH_ALIVE && prob(50) && feeder.is_holding(src) && feeder.dropItemToGround(src)) + to_chat(feeder, span_warning("[src] slips out of your hands in pain!")) + var/turf/target_turf = get_ranged_target_turf(get_turf(src), pick(GLOB.alldirs), 2) + throw_at(target_turf) + +///A proc that returns a static reagent holder with a set reagents that you'd get when eating this fish. +/obj/item/fish/proc/generate_fish_reagents(multiplier = 1) + SHOULD_NOT_OVERRIDE(TRUE) + var/list/reagents_to_add = get_base_edible_reagents_to_add() + SEND_SIGNAL(src, COMSIG_GENERATE_REAGENTS_TO_ADD, reagents_to_add) + if(multiplier != 1) + for(var/reagent in reagents_to_add) + reagents_to_add[reagent] *= multiplier + reagents.add_reagent_list(reagents_to_add, added_purity = 1) + var/datum/reagent/consumable/nutriment/protein/protein = reagents.has_reagent(/datum/reagent/consumable/nutriment/protein, check_subtypes = TRUE) + if(protein) + protein.data = HAS_TRAIT(src, TRAIT_FISH_WELL_COOKED) ? get_fish_taste_cooked() : get_fish_taste() + +/obj/item/fish/proc/get_fish_taste() + return list("raw fish" = 2.5, "scales" = 1) + +/obj/item/fish/proc/get_fish_taste_cooked() + return list("cooked fish" = 2) + +///The proc that adds in the main reagents this fish has when eaten (without accounting for traits) +/obj/item/fish/proc/get_base_edible_reagents_to_add() + var/return_list = list( + /datum/reagent/consumable/nutriment/protein = 2, + /datum/reagent/blood = 1, + ) + //It has been at the very least under-cooked. + if(HAS_TRAIT(src, TRAIT_FOOD_FRIED) || HAS_TRAIT(src, TRAIT_FOOD_BBQ_GRILLED)) + return_list[/datum/reagent/consumable/nutriment/protein] *= 2 + return_list -= /datum/reagent/blood + if(required_fluid_type == AQUARIUM_FLUID_SALTWATER) + return_list[/datum/reagent/consumable/salt] = 0.4 + return return_list + +///adjusts the maximum volume of the fish reagents holder and update the amount of food to bite +/obj/item/fish/proc/adjust_reagents_capacity(amount_to_add) + if(!reagents) + return + reagents.maximum_volume += amount_to_add + var/bites_to_finish = weight / FISH_WEIGHT_BITE_DIVISOR + ///updates how many units of reagent one bite takes if edible. + if(IS_EDIBLE(src)) + AddComponent(/datum/component/edible, bite_consumption = reagents.maximum_volume / bites_to_finish) + +///Grinding a fish replaces some the protein it has with blood and gibs. You ain't getting a clean smoothie out of it. +/obj/item/fish/on_grind() + . = ..() + if(!reagents) + return + reagents.convert_reagent(/datum/reagent/consumable/nutriment/protein, /datum/reagent/consumable/liquidgibs, 0.4, include_source_subtypes = TRUE) + reagents.convert_reagent(/datum/reagent/consumable/nutriment/protein, /datum/reagent/blood, 0.2, include_source_subtypes = TRUE) + +///When processed, the reagents inside this fish will be passed to the created atoms. +/obj/item/fish/UsedforProcessing(mob/living/user, obj/item/used_item, list/chosen_option, list/created_atoms) + var/created_len = length(created_atoms) + for(var/atom/movable/created as anything in created_atoms) + if(!created.reagents) + continue + for(var/datum/reagent/reagent as anything in reagents.reagent_list) + var/transfer_vol = reagent.volume / created_len + var/datum/reagent/result_reagent = created.reagents.has_reagent(reagent.type) + if(!result_reagent) + created.reagents.add_reagent(reagent.type, transfer_vol, reagents.copy_data(reagent), reagents.chem_temp, reagent.purity, reagent.ph, no_react = TRUE) + continue + var/multiplier = transfer_vol / result_reagent.volume + created.reagents.multiply_single_reagent(reagent.type, multiplier) + return ..() /obj/item/fish/update_icon_state() if(status == FISH_DEAD && icon_state_dead) icon_state = icon_state_dead else - icon_state = initial(icon_state) + icon_state = base_icon_state return ..() /obj/item/fish/attackby(obj/item/item, mob/living/user, params) if(!istype(item, /obj/item/fish_feed)) return ..() if(!item.reagents.total_volume) - balloon_alert(user, "[item] is empty!") + balloon_alert(user, "[item.name] is empty!") return TRUE if(status == FISH_DEAD) - balloon_alert(user, "[src] is dead!") + balloon_alert(user, "[name] [HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "isn't hungry" : "is dead!"]") return TRUE feed(item.reagents) - balloon_alert(user, "fed [src]") + balloon_alert(user, "fed [name]") return TRUE /obj/item/fish/examine(mob/user) . = ..() if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_DEEPER_FISH)) if(status == FISH_DEAD) - . += span_deadsay("it's dead.") - var/list/warnings = list() - if(is_hungry()) - warnings += "starving" - if(!HAS_TRAIT(src, TRAIT_FISH_STASIS) && !proper_environment()) - warnings += "drowning" - if(health < initial(health) * 0.6) - warnings += "sick" - if(length(warnings)) - . += span_warning("it's [english_list(warnings)]") + . += span_deadsay("It's [HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "taking the big snooze" : "dead"].") + else + var/list/warnings = list() + if(is_starving()) + warnings += "starving" + if(!HAS_TRAIT(src, TRAIT_FISH_STASIS) && !proper_environment()) + warnings += "drowning" + if(health < initial(health) * 0.6) + warnings += "sick" + if(length(warnings)) + . += span_warning("It's [english_list(warnings)].") if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH)) . += span_notice("It's [size] cm long.") . += span_notice("It weighs [weight] g.") + if(HAS_TRAIT(src, TRAIT_FISHING_BAIT)) + . += span_smallnoticeital("It can be used as a fishing bait.") + if(bites_amount) + . += span_warning("It's been bitten by someone.") ///Randomizes weight and size. -/obj/item/fish/proc/randomize_size_and_weight(base_size = average_size, base_weight = average_weight, deviation = 0.2) +/obj/item/fish/proc/randomize_size_and_weight(base_size = average_size, base_weight = average_weight, deviation = weight_size_deviation) var/size_deviation = 0.2 * base_size var/new_size = round(clamp(gaussian(base_size, size_deviation), average_size * 1/MAX_FISH_DEVIATION_COEFF, average_size * MAX_FISH_DEVIATION_COEFF)) @@ -214,37 +449,180 @@ ///Updates weight and size, along with weight class, number of fillets you can get and grind results. /obj/item/fish/proc/update_size_and_weight(new_size = average_size, new_weight = average_weight) - if(size && fillet_type) - RemoveElement(/datum/element/processable, TOOL_KNIFE, fillet_type, num_fillets, 0.5 SECONDS, screentip_verb = "Cut") + SEND_SIGNAL(src, COMSIG_FISH_UPDATE_SIZE_AND_WEIGHT, new_size, new_weight) + if(size) + remove_fillet_type() + if(size > FISH_SIZE_TWO_HANDS_REQUIRED) + qdel(GetComponent(/datum/component/two_handed)) + else + maximum_size = min(new_size * 2, average_size * MAX_FISH_DEVIATION_COEFF) size = new_size + + var/init_icon_state = initial(inhand_icon_state) switch(size) if(0 to FISH_SIZE_TINY_MAX) update_weight_class(WEIGHT_CLASS_TINY) - inhand_icon_state = "fish_small" + if(!init_icon_state) + inhand_icon_state = "fish_small" if(FISH_SIZE_TINY_MAX to FISH_SIZE_SMALL_MAX) - inhand_icon_state = "fish_small" + if(!init_icon_state) + inhand_icon_state = "fish_small" update_weight_class(WEIGHT_CLASS_SMALL) if(FISH_SIZE_SMALL_MAX to FISH_SIZE_NORMAL_MAX) - inhand_icon_state = "fish_normal" + if(!init_icon_state) + inhand_icon_state = "fish_normal" update_weight_class(WEIGHT_CLASS_NORMAL) if(FISH_SIZE_NORMAL_MAX to FISH_SIZE_BULKY_MAX) - inhand_icon_state = "fish_bulky" + if(!init_icon_state) + inhand_icon_state = "fish_bulky" update_weight_class(WEIGHT_CLASS_BULKY) - if(FISH_SIZE_BULKY_MAX to INFINITY) - inhand_icon_state = "fish_huge" + if(FISH_SIZE_BULKY_MAX to FISH_SIZE_HUGE_MAX) + if(!init_icon_state) + inhand_icon_state = "fish_huge" update_weight_class(WEIGHT_CLASS_HUGE) - if(fillet_type) - var/init_fillets = initial(num_fillets) - var/amount = max(round(init_fillets * size / FISH_FILLET_NUMBER_SIZE_DIVISOR, 1), 1) - num_fillets = amount - AddElement(/datum/element/processable, TOOL_KNIFE, fillet_type, num_fillets, 0.5 SECONDS, screentip_verb = "Cut") + if(FISH_SIZE_HUGE_MAX to INFINITY) + if(!init_icon_state) + inhand_icon_state = "fish_huge" + update_weight_class(WEIGHT_CLASS_GIGANTIC) + + if(size > FISH_SIZE_TWO_HANDS_REQUIRED || (HAS_TRAIT(src, TRAIT_FISH_SHOULD_TWOHANDED) && w_class >= WEIGHT_CLASS_BULKY)) + inhand_icon_state = "[inhand_icon_state]_wielded" + AddComponent(/datum/component/two_handed, require_twohands = TRUE) + add_fillet_type() + + var/make_edible = !weight if(weight) for(var/reagent_type in grind_results) - grind_results[reagent_type] /= FLOOR(weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR, 0.1) + grind_results[reagent_type] /= max(FLOOR(weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR, 0.1), 0.1) + if(reagents) //This fish has reagents. Adjust the maximum volume of the reagent holder and do some math to adjut the reagents too. + var/new_weight_ratio = new_weight / weight + var/volume_diff = reagents.maximum_volume * new_weight_ratio - reagents.maximum_volume + if(new_weight_ratio > weight) + adjust_reagents_capacity(volume_diff) + ///As always, we want to maintain proportions here, so we need to get the ratio of bites left and initial bites left. + var/weight_diff = new_weight - weight + var/multiplier = weight_diff / FISH_WEIGHT_BITE_DIVISOR + var/initial_bites_left = weight / FISH_WEIGHT_BITE_DIVISOR + var/bites_left = initial_bites_left - bites_amount + var/amount_to_gen = bites_left / initial_bites_left * multiplier + generate_fish_reagents(amount_to_gen) + else + reagents.multiply_reagents(new_weight_ratio) + adjust_reagents_capacity(volume_diff) + else + maximum_weight = min(new_weight * 2, new_weight * MAX_FISH_DEVIATION_COEFF) + weight = new_weight + + if(make_edible) + make_edible() + + if(weight >= FISH_WEIGHT_SLOWDOWN) + slowdown = round(((weight/FISH_WEIGHT_SLOWDOWN_DIVISOR)**FISH_WEIGHT_SLOWDOWN_EXPONENT)-1.3, 0.1) + drag_slowdown = round(slowdown * 0.5, 1) + else + slowdown = 0 + drag_slowdown = 0 + if(ismob(loc)) + var/mob/mob = loc + mob.update_equipment_speed_mods() + for(var/reagent_type in grind_results) - grind_results[reagent_type] *= FLOOR(weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR, 0.1) + grind_results[reagent_type] *= max(FLOOR(weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR, 0.1), 0.1) + + update_fish_force() + +/obj/item/fish/proc/remove_fillet_type() + if(!fillet_type) + return + var/amount = max(round(num_fillets * size / FISH_FILLET_NUMBER_SIZE_DIVISOR, 1), 1) + var/time = PERFORM_ALL_TESTS(fish_size_weight) ? 0 : 0.5 SECONDS * amount + RemoveElement(/datum/element/processable, TOOL_KNIFE, fillet_type, amount, time, screentip_verb = "Cut") + +/obj/item/fish/proc/add_fillet_type() + if(!fillet_type) + return + var/amount = max(round(num_fillets * size / FISH_FILLET_NUMBER_SIZE_DIVISOR, 1), 1) + var/time = PERFORM_ALL_TESTS(fish_size_weight) ? 0 : 0.5 SECONDS * amount + AddElement(/datum/element/processable, TOOL_KNIFE, fillet_type, amount, time, screentip_verb = "Cut") + return amount //checked by a unit test + +/** + * Weight, unlike size, is a bit more exponential, but the world isn't perfect, so isn't my code. + * Anyway, this returns a gross estimate of the "rank" of "category" for our fish weight, based on how + * weight generaly scales up (250, 500, 1000, 2000, 4000 etc...) + */ +/obj/item/fish/proc/get_weight_rank() + return max(round(1 + log(2, weight/FISH_WEIGHT_FORCE_DIVISOR), 1), 1) + +///Reset weapon-related variables of this items and recalculates those values based on the fish weight and size. +/obj/item/fish/proc/update_fish_force() + if(force >= 15 && hitsound == SFX_ALT_FISH_SLAP) + hitsound = SFX_DEFAULT_FISH_SLAP + force = initial(force) + throwforce = initial(throwforce) + throw_range = initial(throw_range) + demolition_mod = initial(demolition_mod) + attack_verb_continuous = initial(attack_verb_continuous) + attack_verb_simple = initial(attack_verb_simple) + hitsound = initial(hitsound) + damtype = initial(damtype) + attack_speed = initial(attack_speed) + block_chance = initial(block_chance) + armour_penetration = initial(armour_penetration) + wound_bonus = initial(wound_bonus) + bare_wound_bonus = initial(bare_wound_bonus) + toolspeed = initial(toolspeed) + + var/weight_rank = get_weight_rank() + + throw_range -= weight_rank + get_force_rank() + + var/bonus_malus = weight_rank - w_class + if(bonus_malus) + calculate_fish_force_bonus(bonus_malus) + + throwforce = force + + SEND_SIGNAL(src, COMSIG_FISH_FORCE_UPDATED, weight_rank, bonus_malus) + + if(material_flags & MATERIAL_EFFECTS) //struck by metal gen or something. + for(var/current_material in custom_materials) + var/datum/material/material = GET_MATERIAL_REF(current_material) + force *= material.strength_modifier + throwforce *= material.strength_modifier + if(material.item_sound_override) + hitsound = material.item_sound_override + + if(force >=15 && hitsound == SFX_DEFAULT_FISH_SLAP) // don't override special attack sounds + hitsound = SFX_ALT_FISH_SLAP // do more damage - do heavier slap sound + +///A proc that makes the fish slightly stronger or weaker if there's a noticeable discrepancy between size and weight. +/obj/item/fish/proc/calculate_fish_force_bonus(bonus_malus) + demolition_mod += bonus_malus * 0.1 + attack_speed += bonus_malus * 0.1 + force = round(force * (1 + bonus_malus * 0.1), 0.1) + +/obj/item/fish/proc/get_force_rank() + switch(w_class) + if(WEIGHT_CLASS_TINY) + force -= 3 + attack_speed -= 0.1 SECONDS + if(WEIGHT_CLASS_NORMAL) + force += 2 + if(WEIGHT_CLASS_BULKY) + force += 5 + attack_speed += 0.1 SECONDS + if(WEIGHT_CLASS_HUGE) + force += 9 + attack_speed += 0.2 SECONDS + demolition_mod += 0.2 + if(WEIGHT_CLASS_GIGANTIC) + force += 13 + attack_speed += 0.4 SECONDS + demolition_mod += 0.4 /** * This proc has fish_traits list populated with fish_traits paths from three different lists: @@ -260,7 +638,7 @@ fish_traits = fixed_traits?.Copy() || list() var/list/same_traits = x_traits & y_traits - var/list/all_traits = (x_traits|y_traits)-removed_traits + var/list/all_traits = (y_traits ? (x_traits|y_traits) : x_traits) - removed_traits /// a list of incompatible traits that'll be filled as it goes on. Don't let any such trait pass onto the fish. var/list/incompatible_traits = list() @@ -289,11 +667,16 @@ if(trait_type in incompatible_traits) continue var/datum/fish_trait/trait = GLOB.fish_traits[trait_type] + if(isnull(trait)) + stack_trace("Couldn't find trait [trait_type || "null"] in the global fish traits list") + continue if(!isnull(trait.fish_whitelist) && !(type in trait.fish_whitelist)) continue if(length(fish_traits & trait.incompatible_traits)) continue - if((trait_type in same_traits) ? prob(trait.inheritability) : prob(trait.diff_traits_inheritability)) + // If there's no partner, we've been reated through parthenogenesis or growth, therefore, traits are copied + // Otherwise, we do some probability checks. + if(!y_traits || ((trait_type in same_traits) ? prob(trait.inheritability) : prob(trait.diff_traits_inheritability))) fish_traits |= trait_type incompatible_traits |= trait.incompatible_traits @@ -311,7 +694,7 @@ /obj/item/fish/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() - check_environment() + check_flopping() /obj/item/fish/proc/enter_stasis() ADD_TRAIT(src, TRAIT_FISH_STASIS, INNATE_TRAIT) @@ -324,6 +707,15 @@ if(status != FISH_DEAD) START_PROCESSING(SSobj, src) +///Returns the 0-1 value for hunger +/obj/item/fish/proc/get_hunger() + . = CLAMP01((world.time - last_feeding) / feeding_frequency) + if(HAS_TRAIT(src, TRAIT_FISH_NO_HUNGER)) + return min(., 0.2) + +/obj/item/fish/proc/is_starving() + return get_hunger() >= 1 + ///Feed the fishes with the contents of the fish feed /obj/item/fish/proc/feed(datum/reagents/fed_reagents) if(status != FISH_ALIVE) @@ -331,7 +723,7 @@ var/fed_reagent_type if(fed_reagents.remove_reagent(food, 0.1)) fed_reagent_type = food - last_feeding = world.time + sate_hunger() else var/datum/reagent/wrong_reagent = pick(fed_reagents.reagent_list) if(!wrong_reagent) @@ -340,11 +732,53 @@ fed_reagents.remove_reagent(fed_reagent_type, 0.1) SEND_SIGNAL(src, COMSIG_FISH_FED, fed_reagents, fed_reagent_type) -/obj/item/fish/proc/check_environment() +/** + * Base multiplier of the difference between current size and weight and their maximum value + * Used to calculate how much fish grow each time they're fed, alongside with the current hunger, + * and the current size and weight, meaning bigger fish naturally tend to grow way more slowly + * Growth peaks at 45% hunger but very rapidly wanes past that. + */ +#define FISH_GROWTH_MULT 0.38 +#define FISH_GROWTH_PEAK 0.45 +#define FISH_SIZE_WEIGHT_GROWTH_MALUS 0.5 + +///Proc that should be called when the fish is fed. By default, it grows the fish depending on various variables. +/obj/item/fish/proc/sate_hunger() + if(isaquarium(loc)) + var/obj/structure/aquarium/aquarium = loc + if(!aquarium.reproduction_and_growth) + return + var/hunger = get_hunger() + if(hunger < 0.05) //don't bother growing for very small amounts. + return + last_feeding = world.time + var/new_size = size + var/new_weight = weight + var/hunger_mult + if(hunger < FISH_GROWTH_PEAK) + hunger_mult = hunger * (1/FISH_GROWTH_PEAK) + else + hunger_mult = 1 - (hunger - FISH_GROWTH_PEAK) * 4 + if(hunger_mult <= 0) + return + if(size < maximum_size) + new_size += CEILING((maximum_size - size) * FISH_GROWTH_MULT / (w_class * FISH_SIZE_WEIGHT_GROWTH_MALUS) * hunger_mult, 1) + new_size = min(new_size, maximum_size) + if(weight < maximum_weight) + new_weight += CEILING((maximum_weight - weight) * FISH_GROWTH_MULT / (get_weight_rank() * FISH_SIZE_WEIGHT_GROWTH_MALUS) * hunger_mult, 1) + new_weight = min(new_weight, maximum_weight) + if(new_size != size || new_weight != weight) + update_size_and_weight(new_size, new_weight) + +#undef FISH_SIZE_WEIGHT_GROWTH_MALUS +#undef FISH_GROWTH_MULT +#undef FISH_GROWTH_PEAK + +/obj/item/fish/proc/check_flopping() if(QDELETED(src)) //we don't care anymore return - if(!do_flop_animation) + if(!(fish_flags & FISH_DO_FLOP_ANIM)) return // Do additional stuff @@ -370,28 +804,78 @@ SEND_SIGNAL(src, COMSIG_FISH_LIFE, seconds_per_tick) -/obj/item/fish/proc/set_status(new_status) +/obj/item/fish/proc/set_status(new_status, silent = FALSE) if(status == new_status) return switch(new_status) if(FISH_ALIVE) status = FISH_ALIVE health = initial(health) // since the fishe has been revived + regenerate_bites(bites_amount) last_feeding = world.time //reset hunger - check_environment() + check_flopping() START_PROCESSING(SSobj, src) + ADD_TRAIT(src, TRAIT_UNCOMPOSTABLE, INNATE_TRAIT) if(FISH_DEAD) status = FISH_DEAD STOP_PROCESSING(SSobj, src) + REMOVE_TRAIT(src, TRAIT_UNCOMPOSTABLE, INNATE_TRAIT) stop_flopping() - var/message = span_notice(replacetext(death_text, "%SRC", "[src]")) - if(isaquarium(loc)) - loc.visible_message(message) - else - visible_message(message) + if(!silent) + var/message = span_notice(replacetext(death_text, "%SRC", "[src]")) + if(isaquarium(loc)) + loc.visible_message(message) + else + visible_message(message) update_appearance() + update_fish_force() SEND_SIGNAL(src, COMSIG_FISH_STATUS_CHANGED) +/obj/item/fish/vv_edit_var(var_name, var_value) + switch(var_name) + if(NAMEOF(src, status)) + if(var_value != FISH_DEAD && var_value != FISH_ALIVE) + var_value = var_value ? FISH_ALIVE : FISH_DEAD + set_status(var_value) + if(NAMEOF(src, size)) + if(!isnum(var_value) || var_value == 0) + return FALSE + update_size_and_weight(var_value, weight) + if(NAMEOF(src, weight)) + if(!isnum(var_value) || var_value == 0) + return FALSE + update_size_and_weight(size, var_value) + if(NAMEOF(src, health)) + if(!isnum(var_value)) + return FALSE + adjust_health(health) + if(NAMEOF(src, fish_flags)) + var/old_fish_flags = fish_flags + fish_flags = var_value + if((old_fish_flags ^ fish_flags) & FISH_DO_FLOP_ANIM) //the flopping flag wasn't added nor removed + return TRUE + if(fish_flags & FISH_DO_FLOP_ANIM) + RegisterSignal(src, COMSIG_ATOM_TEMPORARY_ANIMATION_START, PROC_REF(on_temp_animation)) + else + UnregisterSignal(src, COMSIG_ATOM_TEMPORARY_ANIMATION_START) + check_flopping() + if(NAMEOF(src, fillet_type)) + if(!ispath(var_value)) + return FALSE + remove_fillet_type() + fillet_type = var_value + add_fillet_type() + if(NAMEOF(src, num_fillets)) + if(!isnum(var_value)) + return FALSE + remove_fillet_type() + num_fillets = var_value + add_fillet_type() + else + return ..() + + return TRUE + /obj/item/fish/expose_reagents(list/reagents, datum/reagents/source, methods = TOUCH, volume_modifier = 1, show_message = TRUE) . = ..() if(. & COMPONENT_NO_EXPOSE_REAGENTS || status != FISH_DEAD) @@ -418,6 +902,25 @@ injector.expend(src, user) return LAZARUS_INJECTOR_USED +/obj/item/fish/proc/update_aquarium_appearance(datum/source, obj/effect/aquarium/visual) + SIGNAL_HANDLER + visual.icon = dedicated_in_aquarium_icon || icon + visual.icon_state = dedicated_in_aquarium_icon_state || "[initial(icon_state)]_small" + visual.color = aquarium_vc_color + +/obj/item/fish/proc/randomize_aquarium_position(datum/source, obj/structure/aquarium/current_aquarium, obj/effect/aquarium/visual) + SIGNAL_HANDLER + var/list/aq_properties = current_aquarium.get_surface_properties() + var/avg_width = round(sprite_width * 0.5) + var/avg_height = round(sprite_height * 0.5) + var/px_min = aq_properties[AQUARIUM_PROPERTIES_PX_MIN] + avg_width - 16 + var/px_max = aq_properties[AQUARIUM_PROPERTIES_PX_MAX] - avg_width - 16 + var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16 + var/py_max = aq_properties[AQUARIUM_PROPERTIES_PY_MAX] - avg_width - 16 + + visual.pixel_x = visual.base_px = rand(px_min,px_max) + visual.pixel_y = visual.base_py = rand(py_min,py_max) + /obj/item/fish/proc/get_aquarium_animation() var/obj/structure/aquarium/aquarium = loc if(!istype(aquarium) || aquarium.fluid_type == AQUARIUM_FLUID_AIR || status == FISH_DEAD) @@ -425,8 +928,61 @@ else return AQUARIUM_ANIMATION_FISH_SWIM +/obj/item/fish/proc/update_aquarium_animation(datum/source, current_animation, obj/structure/current_aquarium, obj/effect/visual) + SIGNAL_HANDLER + var/animation = get_aquarium_animation() + if(animation == current_animation) + return + switch(animation) + if(AQUARIUM_ANIMATION_FISH_SWIM) + swim_animation(current_aquarium, visual) + if(AQUARIUM_ANIMATION_FISH_DEAD) + dead_animation(current_aquarium, visual) + +/// Create looping random path animation, pixel offsets parameters include offsets already +/obj/item/fish/proc/swim_animation(obj/structure/aquarium/current_aquarium, obj/effect/aquarium/visual) + var/avg_width = round(sprite_width / 2) + var/avg_height = round(sprite_height / 2) + + var/list/aq_properties = current_aquarium.get_surface_properties() + var/px_min = aq_properties[AQUARIUM_PROPERTIES_PX_MIN] + avg_width - 16 + var/px_max = aq_properties[AQUARIUM_PROPERTIES_PX_MAX] - avg_width - 16 + var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16 + var/py_max = aq_properties[AQUARIUM_PROPERTIES_PY_MAX] - avg_width - 16 + + var/origin_x = visual.base_px + var/origin_y = visual.base_py + var/prev_x = origin_x + var/prev_y = origin_y + animate(visual, pixel_x = origin_x, time = 0, loop = -1) //Just to start the animation + var/move_number = rand(3, 5) //maybe unhardcode this + for(var/i in 1 to move_number) + //If it's last movement, move back to start otherwise move to some random point + var/target_x = i == move_number ? origin_x : rand(px_min,px_max) //could do with enforcing minimal delta for prettier zigzags + var/target_y = i == move_number ? origin_y : rand(py_min,py_max) + var/dx = prev_x - target_x + var/dy = prev_y - target_y + prev_x = target_x + prev_y = target_y + var/dist = abs(dx) + abs(dy) + var/eyeballed_time = dist * 2 //2ds per px + //Face the direction we're going + var/matrix/dir_mx = matrix(visual.transform) + if(dx <= 0) //assuming default sprite is facing left here + dir_mx.Scale(-1, 1) + animate(transform = dir_mx, time = 0, loop = -1) + animate(pixel_x = target_x, pixel_y = target_y, time = eyeballed_time, loop = -1) + +/obj/item/fish/proc/dead_animation(obj/structure/aquarium/current_aquarium, obj/effect/aquarium/visual) + //Set base_py to lowest possible value + var/avg_height = round(sprite_height / 2) + var/list/aq_properties = current_aquarium.get_surface_properties() + var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16 + visual.base_py = py_min + animate(visual, pixel_y = py_min, time = 1) //flop to bottom and end current animation. + /// Checks if our current environment lets us live. -/obj/item/fish/proc/proper_environment() +/obj/item/fish/proc/proper_environment(temp_range_min = required_temperature_min, temp_range_max = required_temperature_max) var/obj/structure/aquarium/aquarium = loc if(istype(aquarium)) if(!compatible_fluid_type(required_fluid_type, aquarium.fluid_type)) @@ -450,23 +1006,38 @@ return FALSE return TRUE -/obj/item/fish/proc/is_hungry() - return !HAS_TRAIT(src, TRAIT_FISH_NO_HUNGER) && world.time - last_feeding >= feeding_frequency - /obj/item/fish/proc/process_health(seconds_per_tick) var/health_change_per_second = 0 if(!proper_environment()) health_change_per_second -= 3 //Dying here - if(is_hungry()) + if(is_starving()) health_change_per_second -= 0.5 //Starving else health_change_per_second += 0.5 //Slowly healing adjust_health(health + health_change_per_second * seconds_per_tick) -/obj/item/fish/proc/adjust_health(amt) - health = clamp(amt, 0, initial(health)) +/obj/item/fish/proc/adjust_health(amount) + if(status == FISH_DEAD || amount == health) + return + var/pre_health = health + var/initial_health = initial(health) + health = clamp(amount, 0, initial_health) if(health <= 0) set_status(FISH_DEAD) + return + if(amount < pre_health || !bites_amount) + return + var/health_to_pre_health_diff = amount - pre_health + var/init_health_to_pre_diff = initial_health - pre_health + var/bites_to_recover = bites_amount * (health_to_pre_health_diff / init_health_to_pre_diff) + regenerate_bites(bites_to_recover) + +/obj/item/fish/proc/regenerate_bites(amount) + amount = min(amount, bites_amount) + if(amount <= 0) + return + bites_amount -= amount + generate_fish_reagents(amount) /obj/item/fish/proc/ready_to_reproduce(being_targeted = FALSE) var/obj/structure/aquarium/aquarium = loc @@ -476,7 +1047,7 @@ return FALSE 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 + return aquarium.reproduction_and_growth && health >= initial(health) * 0.8 && stable_population >= 1 && world.time >= breeding_wait /obj/item/fish/proc/try_to_reproduce() var/obj/structure/aquarium/aquarium = loc @@ -511,36 +1082,51 @@ second_fish = other_fish break - if(!second_fish && !HAS_TRAIT(src, TRAIT_FISH_SELF_REPRODUCE)) - return FALSE + if(!second_fish) + if(!HAS_TRAIT(src, TRAIT_FISH_SELF_REPRODUCE)) + return FALSE + if(length(aquarium.tracked_fish_by_type[type]) >= stable_population) + return FALSE + + if(PERFORM_ALL_TESTS(fish_breeding) && second_fish && !length(evolution_types)) + return create_offspring(second_fish.type, second_fish) var/chosen_type var/datum/fish_evolution/chosen_evolution - if(PERFORM_ALL_TESTS(fish_breeding) && second_fish && !length(evolution_types)) - chosen_type = second_fish.type - else - var/list/possible_evolutions = list() - for(var/evolution_type in evolution_types) + var/list/possible_evolutions = list() + for(var/evolution_type in evolution_types) + var/datum/fish_evolution/evolution = GLOB.fish_evolutions[evolution_type] + if(evolution.check_conditions(src, second_fish, aquarium)) + possible_evolutions += evolution + if(second_fish?.evolution_types) + var/secondary_evolutions = (second_fish.evolution_types - evolution_types) + for(var/evolution_type in secondary_evolutions) var/datum/fish_evolution/evolution = GLOB.fish_evolutions[evolution_type] - if(evolution.check_conditions(src, second_fish, aquarium)) + if(evolution.check_conditions(second_fish, src, aquarium)) possible_evolutions += evolution - if(second_fish?.evolution_types) - var/secondary_evolutions = (second_fish.evolution_types - evolution_types) - for(var/evolution_type in secondary_evolutions) - var/datum/fish_evolution/evolution = GLOB.fish_evolutions[evolution_type] - if(evolution.check_conditions(second_fish, src, aquarium)) - possible_evolutions += evolution - - if(length(possible_evolutions)) - chosen_evolution = pick(possible_evolutions) - chosen_type = chosen_evolution.new_fish_type - else if(second_fish) - if(length(aquarium.tracked_fish_by_type[type]) >= stable_population) - chosen_type = second_fish.type - else - chosen_type = pick(second_fish.type, type) + + var/list/types = spawn_types || list(type) + if(length(possible_evolutions)) + chosen_evolution = pick(possible_evolutions) + chosen_type = chosen_evolution.new_fish_type + else if(second_fish) + var/list/second_fish_types = second_fish.spawn_types || list(second_fish.type) + var/recessive = HAS_TRAIT(src, TRAIT_FISH_RECESSIVE) + var/recessive_partner = HAS_TRAIT(second_fish, TRAIT_FISH_RECESSIVE) + if(length(aquarium.tracked_fish_by_type[type]) >= stable_population) + if(recessive_partner && !recessive) + return FALSE + chosen_type = pick(second_fish_types) else - chosen_type = type + if(recessive && !recessive_partner) + chosen_type = pick(second_fish_types) + else if(recessive_partner && !recessive) + chosen_type = pick(types) + else + var/list/picks = second_fish_types + types + chosen_type = pick(picks) + else + chosen_type = pick(types) return create_offspring(chosen_type, second_fish, chosen_evolution) @@ -549,19 +1135,16 @@ //Try to pass down compatible traits based on inheritability new_fish.inherit_traits(fish_traits, partner?.fish_traits, evolution?.new_traits, evolution?.removed_traits) + //We combine two methods for determining the size and weight of the offspring for less extreme results. if(partner) + var/ratio_size = new_fish.average_size * (((size / average_size) + (partner.size / partner.average_size)) / 2) var/mean_size = (size + partner.size)/2 + var/ratio_weight = new_fish.average_size * (((weight / average_weight) + (partner.weight / partner.average_weight)) / 2) var/mean_weight = (weight + partner.weight)/2 - new_fish.randomize_size_and_weight(mean_size, mean_weight, 0.3, TRUE) + new_fish.randomize_size_and_weight((mean_size + ratio_size) * 0.5, (mean_weight + ratio_weight) * 0.5, 0.3) partner.breeding_wait = world.time + breeding_timeout else //Make a close of this fish. - new_fish.update_size_and_weight(size, weight, TRUE) - new_fish.progenitors = initial(name) - if(partner && type != partner.type) - var/string = "[initial(name)] - [initial(partner.name)]" - new_fish.progenitors = full_capitalize(string) - else - new_fish.progenitors = full_capitalize(initial(name)) + new_fish.update_size_and_weight(size, weight) breeding_wait = world.time + breeding_timeout @@ -631,7 +1214,7 @@ flop_animation() /obj/item/fish/proc/try_electrogenesis() - if(status == FISH_DEAD || is_hungry()) + if(status == FISH_DEAD || is_starving()) return COOLDOWN_START(src, electrogenesis_cooldown, ELECTROGENESIS_DURATION + ELECTROGENESIS_VARIANCE) var/fish_zap_range = 1 @@ -639,7 +1222,7 @@ var/fish_zap_flags = ZAP_MOB_DAMAGE if(istype(loc, /obj/structure/aquarium/bioelec_gen)) fish_zap_range = 5 - fish_zap_power = electrogenesis_power + fish_zap_power = GET_FISH_ELECTROGENESIS(src) fish_zap_flags |= (ZAP_GENERATES_POWER | ZAP_MOB_STUN) tesla_zap(source = get_turf(src), zap_range = fish_zap_range, power = fish_zap_power, cutoff = 1 MEGA JOULES, zap_flags = fish_zap_flags) @@ -651,6 +1234,76 @@ calculated_price *= 0.05 return round(calculated_price) +/obj/item/fish/proc/get_happiness_value() + var/happiness_value = 0 + if(fish_flags & FISH_FLAG_PETTED) + happiness_value++ + if(get_hunger() < 0.5) + happiness_value++ + var/obj/structure/aquarium/aquarium = loc + if(!istype(aquarium)) + return happiness_value + if(compatible_fluid_type(required_fluid_type, aquarium.fluid_type)) + happiness_value++ + if(ISINRANGE(aquarium.fluid_temp, required_temperature_min, required_temperature_max)) + happiness_value++ + if(bites_amount) // ouch + happiness_value -= 2 + if(health < initial(health) * 0.6) + happiness_value -= 1 + return clamp(happiness_value, FISH_SAD, FISH_VERY_HAPPY) + +/obj/item/fish/attack_self(mob/living/user) + . = ..() + pet_fish(user) + +/obj/item/fish/proc/pet_fish(mob/living/user) + var/in_aquarium = isaquarium(loc) + if(status == FISH_DEAD) + to_chat(user, span_warning("You try to pet [src], but [p_theyre()] motionless!")) + return FALSE + if(!proper_environment()) + to_chat(user, span_warning("You try to pet [src], but [p_theyre()] not feeling well!")) + return FALSE + if(fish_flags & FISH_FLAG_PETTED) + if(in_aquarium) + to_chat(user, span_warning("[src] runs away from your finger as you dip it into the water!")) + else + to_chat(user, span_warning("You try to pet [src] but [p_they()] squirms away!")) + return FALSE + if(HAS_TRAIT(src, TRAIT_FISH_ELECTROGENESIS) && GET_FISH_ELECTROGENESIS(src) > 15 MEGA JOULES) + user.electrocute_act(5, src) //was it all worth it? + fish_flags |= FISH_FLAG_PETTED + new /obj/effect/temp_visual/heart(get_turf(src)) + if((/datum/fish_trait/aggressive in fish_traits) && prob(50)) + if(!in_aquarium) + user.visible_message( + span_warning("[src] dances around before biting [user]!"), + span_warning("[src] dances around before biting you!"), + vision_distance = DEFAULT_MESSAGE_RANGE - 3, + ) + else + user.visible_message( + span_warning("[src] bites [user]'s hand!"), + span_warning("You pet [src] as you hold it, only for [p_them()] to happily bite back!"), + vision_distance = DEFAULT_MESSAGE_RANGE - 3, + ) + var/body_zone = pick(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM) + user.apply_damage((force * 0.2) + w_class * 2, BRUTE, body_zone, user.run_armor_check(body_zone, MELEE)) + playsound(src,'sound/items/weapons/bite.ogg', 45, TRUE, -1) + else + if(in_aquarium) + to_chat(user, span_notice("[src] dances around!")) + else + to_chat(user, span_notice("You pet [src] as you hold it.")) + user.add_mood_event("petted_fish", /datum/mood_event/fish_petting, src, HAS_MIND_TRAIT(user, TRAIT_MORBID)) + playsound(src, 'sound/items/weapons/thudswoosh.ogg', 30, TRUE, -1) + addtimer(CALLBACK(src, PROC_REF(undo_petted)), 30 SECONDS) + return TRUE + +/obj/item/fish/proc/undo_petted() + fish_flags &= ~FISH_FLAG_PETTED + /// Returns random fish, using random_case_rarity probabilities. /proc/random_fish_type(required_fluid) var/static/probability_table @@ -680,3 +1333,7 @@ return fluid_type == AQUARIUM_FLUID_SALTWATER || fluid_type == AQUARIUM_FLUID_FRESHWATER else return fish_fluid_type == fluid_type + +#undef GET_FISH_ELECTROGENESIS +#undef FISH_SAD +#undef FISH_VERY_HAPPY diff --git a/code/modules/fishing/fish/chasm_detritus.dm b/code/modules/fishing/fish/chasm_detritus.dm index ea9fcb4775770..9595c552e18d2 100644 --- a/code/modules/fishing/fish/chasm_detritus.dm +++ b/code/modules/fishing/fish/chasm_detritus.dm @@ -96,7 +96,7 @@ GLOBAL_LIST_INIT_TYPED(chasm_detritus_types, /datum/chasm_detritus, init_chasm_d /// This also includes all mobs fallen into chasms, regardless of distance /datum/chasm_detritus/restricted/bodies/get_chasm_contents(turf/fishing_spot) . = ..() - . |= GLOB.chasm_fallen_mobs + . |= GLOB.chasm_fallen_mobs[get_chasm_category(fishing_spot)] /// Body detritus is selected in favor of bodies belonging to sentient mobs /// The first sentient body found in the list of contents is returned, otherwise diff --git a/code/modules/fishing/fish/fish_evolution.dm b/code/modules/fishing/fish/fish_evolution.dm index e6e2f1d9570ac..25ce133c98d40 100644 --- a/code/modules/fishing/fish/fish_evolution.dm +++ b/code/modules/fishing/fish/fish_evolution.dm @@ -1,4 +1,7 @@ +///A global list of fish evolutions, which are singletons. GLOBAL_LIST_INIT(fish_evolutions, init_subtypes_w_path_keys(/datum/fish_evolution, list())) +///A list of fish evolution types, each having an associated list containing all fish types that have it. +GLOBAL_LIST_EMPTY(fishes_by_fish_evolution) /** * Fish evolution datums @@ -7,46 +10,74 @@ GLOBAL_LIST_INIT(fish_evolutions, init_subtypes_w_path_keys(/datum/fish_evolutio * then there's a chance the offspring may be of a new type rather than the same as its source or mate (if any). */ /datum/fish_evolution + ///The name of the evolution. If not set, it'll be generated on runtime from the name of the new fish type. var/name + ///The probability that this evolution can happen. var/probability = 0 ///The obj/item/fish path of the new fish var/obj/item/fish/new_fish_type = /obj/item/fish ///The minimum required temperature for the evolved fish to spawn - var/required_temperature_min = MIN_AQUARIUM_TEMP + var/required_temperature_min = 0 ///The maximum required temperature for the evolved fish to spawn - var/required_temperature_max = MAX_AQUARIUM_TEMP + var/required_temperature_max = INFINITY ///A list of traits added to the new fish. These take priority over the parents' traits. var/list/new_traits ///If set, these traits will be removed from the new fish. var/list/removed_traits ///A text string shown in the catalog, containing information on conditions specific to this evolution. var/conditions_note + ///Is this evolution shown on the wiki? + var/show_on_wiki = TRUE + ///Is the result of this evolution shown on the wiki? + var/show_result_on_wiki = TRUE /datum/fish_evolution/New() + ..() + SHOULD_CALL_PARENT(TRUE) if(!ispath(new_fish_type, /obj/item/fish)) stack_trace("[type] instantiated with a new fish type of [new_fish_type]. That's not a fish, hun, things will break.") if(!name) name = full_capitalize(initial(new_fish_type.name)) /** * The main proc that checks whether this can happen or not. - * Please do keep in mind a mate may not be present for fish with the - * self-reproductive trait. + * Keep in mind the mate and aquarium arguments may be null if + * the fish is self-reproducing or this evolution is a result of a fish_growth component */ /datum/fish_evolution/proc/check_conditions(obj/item/fish/source, obj/item/fish/mate, obj/structure/aquarium/aquarium) SHOULD_CALL_PARENT(TRUE) - //chances are halved if only one parent has this evolution. - var/real_probability = (mate && (type in mate.evolution_types)) ? probability : probability/2 - if(!prob(real_probability)) - return FALSE - if(!ISINRANGE(aquarium.fluid_temp, required_temperature_min, required_temperature_max)) + if(aquarium) + //chances are halved if only one parent has this evolution. + var/real_probability = (mate && (type in mate.evolution_types)) ? probability : probability/2 + if(!prob(real_probability)) + return FALSE + if(!ISINRANGE(aquarium.fluid_temp, required_temperature_min, required_temperature_max)) + return FALSE + else if(!source.proper_environment(required_temperature_min, required_temperature_max)) return FALSE return TRUE +///This is called when the evolution is set as the result type of a fish_growth component +/datum/fish_evolution/proc/growth_checks(obj/item/fish/source, seconds_per_tick, growth) + SIGNAL_HANDLER + SHOULD_CALL_PARENT(TRUE) + if(source.health < initial(source.health) * 0.5) + return COMPONENT_DONT_GROW + if(source.get_hunger() >= 0.5) //too hungry to grow + return COMPONENT_DONT_GROW + var/obj/structure/aquarium/aquarium = source.loc + if(istype(aquarium) && !aquarium.reproduction_and_growth) //the aquarium has breeding disabled + return COMPONENT_DONT_GROW + else + aquarium = null + if(!check_conditions(source, aquarium = aquarium)) + return COMPONENT_DONT_GROW + ///Called by the fish analyzer right click function. Returns a text string used as tooltip. /datum/fish_evolution/proc/get_evolution_tooltip() . = "" - if(required_temperature_min != MIN_AQUARIUM_TEMP || required_temperature_max != MAX_AQUARIUM_TEMP) - . = "An aquarium temperature between [required_temperature_min] and [required_temperature_max] is required." + if(required_temperature_min > 0 || required_temperature_max < INFINITY) + var/max_temp = required_temperature_max < INFINITY ? " and [required_temperature_max]" : "" + . = "An aquarium temperature between [required_temperature_min][max_temp] is required." if(conditions_note) . += " [conditions_note]" return . @@ -78,6 +109,7 @@ GLOBAL_LIST_INIT(fish_evolutions, init_subtypes_w_path_keys(/datum/fish_evolutio /datum/fish_evolution/purple_sludgefish probability = 5 new_fish_type = /obj/item/fish/sludgefish/purple + new_traits = list(/datum/fish_trait/recessive) removed_traits = list(/datum/fish_trait/no_mating) /datum/fish_evolution/mastodon @@ -85,7 +117,8 @@ GLOBAL_LIST_INIT(fish_evolutions, init_subtypes_w_path_keys(/datum/fish_evolutio probability = 40 new_fish_type = /obj/item/fish/mastodon new_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/amphibious, /datum/fish_trait/predator, /datum/fish_trait/aggressive) - conditions_note = "The fish (and its mate) need to be unusually big both in size and weight." + conditions_note = "The fish (and its mate) needs to be unusually big both in size and weight." + show_result_on_wiki = FALSE /datum/fish_evolution/mastodon/check_conditions(obj/item/fish/source, obj/item/fish/mate, obj/structure/aquarium/aquarium) if((source.size < 120 || source.weight < 3000) || (mate && (mate.size < 120 || mate.weight < 3000))) @@ -103,3 +136,47 @@ GLOBAL_LIST_INIT(fish_evolutions, init_subtypes_w_path_keys(/datum/fish_evolutio new_fish_type = /obj/item/fish/chasm_crab/ice required_temperature_min = MIN_AQUARIUM_TEMP+9 required_temperature_max = MIN_AQUARIUM_TEMP+10 + +/datum/fish_evolution/three_eyes + probability = 3 + new_fish_type = /obj/item/fish/goldfish/three_eyes + new_traits = list(/datum/fish_trait/recessive) + +/datum/fish_evolution/chainsawfish + probability = 30 + new_fish_type = /obj/item/fish/chainsawfish + new_traits = list(/datum/fish_trait/predator, /datum/fish_trait/aggressive) + conditions_note = "The fish needs to be unusually big and aggressive" + +/datum/fish_evolution/chainsawfish/check_conditions(obj/item/fish/source, obj/item/fish/mate, obj/structure/aquarium/aquarium) + var/double_avg_size = /obj/item/fish/goldfish::average_size * 2 + var/double_avg_weight = /obj/item/fish/goldfish::average_weight * 2 + if(source.size >= double_avg_size && source.weight >= double_avg_weight && (/datum/fish_trait/aggressive in source.fish_traits)) + return ..() + return FALSE + +/datum/fish_evolution/armored_pike + probability = 75 + new_fish_type = /obj/item/fish/pike/armored + conditions_note = "The fish needs to have the stinger trait" + +/datum/fish_evolution/armored_pike/check_conditions(obj/item/fish/source, obj/item/fish/mate, obj/structure/aquarium/aquarium) + if(HAS_TRAIT(source, TRAIT_FISH_STINGER)) + return ..() + return FALSE + +/datum/fish_evolution/fritterish + new_fish_type = /obj/item/fish/fryish/fritterish + removed_traits = list(/datum/fish_trait/no_mating) + conditions_note = "Fryish will grow into it over time." + +/datum/fish_evolution/nessie + name = "???" + new_fish_type = /obj/item/fish/fryish/nessie + conditions_note = "The final stage of fritterfish growth. It gotta be big!" + show_result_on_wiki = FALSE + +/datum/fish_evolution/nessiefish/check_conditions(obj/item/fish/source, obj/item/fish/mate, obj/structure/aquarium/aquarium) + if(source.size >= (/obj/item/fish/fryish/fritterish::average_size * 1.5) && source.size >= (/obj/item/fish/fryish/fritterish::average_weight * 1.5)) + return ..() + return FALSE diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm index 76b0cc8691c21..c9ab3325af367 100644 --- a/code/modules/fishing/fish/fish_traits.dm +++ b/code/modules/fishing/fish/fish_traits.dm @@ -37,6 +37,8 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) var/list/fish_whitelist /// Depending on the value, fish with trait will be reported as more or less difficult in the catalog. var/added_difficulty = 0 + /// Reagents to add to the fish whenever the COMSIG_GENERATE_REAGENTS_TO_ADD signal is sent. Their values will be multiplied later. + var/list/reagents_to_add /// Difficulty modifier from this mod, needs to return a list with two values /datum/fish_trait/proc/difficulty_mod(obj/item/fishing_rod/rod, mob/fisherman) @@ -44,7 +46,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) return list(ADDITIVE_FISHING_MOD = 0, MULTIPLICATIVE_FISHING_MOD = 1) /// Catch weight table modifier from this mod, needs to return a list with two values -/datum/fish_trait/proc/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_trait/proc/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) SHOULD_CALL_PARENT(TRUE) return list(ADDITIVE_FISHING_MOD = 0, MULTIPLICATIVE_FISHING_MOD = 1) @@ -54,7 +56,9 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) /// Applies some special qualities to the fish that has been spawned /datum/fish_trait/proc/apply_to_fish(obj/item/fish/fish) - return + SHOULD_CALL_PARENT(TRUE) + if(length(reagents_to_add)) + RegisterSignal(fish, COMSIG_GENERATE_REAGENTS_TO_ADD, PROC_REF(add_reagents)) /// Applies some special qualities to basic mobs generated by fish (i.e. chasm chrab --> young lobstrosity --> lobstrosity). /datum/fish_trait/proc/apply_to_mob(mob/living/basic/mob) @@ -67,17 +71,38 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) /// Proc used by both the predator and necrophage traits. /datum/fish_trait/proc/eat_fish(obj/item/fish/predator, obj/item/fish/prey) - predator.last_feeding = world.time var/message = prey.status == FISH_DEAD ? "[src] eats [prey]'s carcass." : "[src] hunts down and eats [prey]." predator.loc.visible_message(span_warning(message)) SEND_SIGNAL(prey, COMSIG_FISH_EATEN_BY_OTHER_FISH, predator) qdel(prey) + predator.sate_hunger() + -/// Proc that inserts a reagent to the grind_results list of the fish. You'll still have to set the processed comsig proc yourself. -/datum/fish_trait/proc/add_to_reagents(obj/item/fish/fish, reagent_type, amount) - LAZYINITLIST(fish.grind_results) - fish.grind_results.Insert(1, reagent_type) - fish.grind_results[reagent_type] = amount +/** + * Signal sent when we need to generate an abstract holder containing + * reagents to be transfered, usually as a result of the fish being eaten by someone + */ +/datum/fish_trait/proc/add_reagents(obj/item/fish/fish, list/reagents) + SIGNAL_HANDLER + for(var/reagent in reagents_to_add) + reagents[reagent] += reagents_to_add[reagent] + +/// Proc that adds or changes the venomous when the fish size and/or weight are updated +/datum/fish_trait/proc/add_venom(obj/item/fish/source, venom_path, new_weight, mult = 0.25) + if(source.size) + var/old_amount = max(round((source.weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR) * mult, 0.1), mult) + source.RemoveElement(/datum/element/venomous, venom_path, old_amount) + + var/new_amount = max(round((new_weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR) * mult, 0.1), mult) + source.AddElement(/datum/element/venomous, venom_path, new_amount) + +/// Proc that changes the venomous element based on if the fish is alive or dead (basically dead fish are weaker). +/datum/fish_trait/proc/change_venom_on_death(obj/item/fish/source, venom_path, live_mult, dead_mult) + var/live_amount = max(round((source.weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR) * live_mult, 0.1), live_mult) + var/dead_amount = max(round((source.weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR) * dead_mult, 0.1), dead_mult) + var/is_dead = source.status == FISH_DEAD + source.RemoveElement(/datum/element/venomous, venom_path, is_dead ? live_amount : dead_amount, thrown_effect = TRUE) + source.AddElement(/datum/element/venomous, venom_path, is_dead ? dead_amount : live_amount, thrown_effect = TRUE) /datum/fish_trait/wary name = "Wary" @@ -95,37 +120,57 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) /datum/fish_trait/shiny_lover/difficulty_mod(obj/item/fishing_rod/rod, mob/fisherman) . = ..() - // These fish are easier to catch with shiny lure + // These fish are easier to catch with shiny hook if(rod.hook && rod.hook.fishing_hook_traits & FISHING_HOOK_SHINY) .[ADDITIVE_FISHING_MOD] -= FISH_TRAIT_MINOR_DIFFICULTY_BOOST +/datum/fish_trait/shiny_lover/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) + . = ..() + // These fish are harder to find without a shiny hook + if(rod.hook && rod.hook.fishing_hook_traits & FISHING_HOOK_SHINY) + .[MULTIPLICATIVE_FISHING_MOD] = 0.5 + /datum/fish_trait/picky_eater name = "Picky Eater" - catalog_description = "This fish is very picky and will ignore low quality bait." + catalog_description = "This fish is very picky and will ignore low quality bait (unless it's amongst its favorites)." -/datum/fish_trait/picky_eater/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_trait/picky_eater/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) . = ..() if(!rod.bait) .[MULTIPLICATIVE_FISHING_MOD] = 0 return 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 + var/list/fav_baits = SSfishing.fish_properties[fish_type][FISH_PROPERTIES_FAV_BAIT] + for(var/identifier in fav_baits) + if(is_matching_bait(rod.bait, identifier)) //we like this bait anyway + return + + var/list/bad_baits = SSfishing.fish_properties[fish_type][FISH_PROPERTIES_BAD_BAIT] + for(var/identifier in bad_baits) + if(is_matching_bait(rod.bait, identifier)) //we hate this bait. + .[MULTIPLICATIVE_FISHING_MOD] = 0 + return + + if(!HAS_TRAIT(rod.bait, TRAIT_GOOD_QUALITY_BAIT) && !HAS_TRAIT(rod.bait, TRAIT_GREAT_QUALITY_BAIT)) + .[MULTIPLICATIVE_FISHING_MOD] = 0 /datum/fish_trait/nocturnal name = "Nocturnal" catalog_description = "This fish avoids bright lights, fishing and storing in darkness recommended." -/datum/fish_trait/nocturnal/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_trait/nocturnal/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) . = ..() - var/turf/turf = get_turf(fisherman) - var/light_amount = turf.get_lumcount() + if(rod.bait && HAS_TRAIT(rod.bait, TRAIT_BAIT_IGNORE_ENVIRONMENT)) + return + var/turf/turf = get_turf(location) + var/light_amount = turf?.get_lumcount() if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) .[MULTIPLICATIVE_FISHING_MOD] = 0 /datum/fish_trait/nocturnal/apply_to_fish(obj/item/fish/fish) + . = ..() RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(check_light)) /datum/fish_trait/nocturnal/proc/check_light(obj/item/fish/source, seconds_per_tick) @@ -157,7 +202,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) mob.apply_status_effect(/datum/status_effect/shadow_regeneration) /datum/fish_trait/heavy - name = "Heavy" + name = "Demersal" catalog_description = "This fish tends to stay near the waterbed." /datum/fish_trait/heavy/apply_to_mob(mob/living/basic/mob) @@ -170,25 +215,27 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) mob.obj_damage *= 1.3 /datum/fish_trait/heavy/minigame_mod(obj/item/fishing_rod/rod, mob/fisherman, datum/fishing_challenge/minigame) - minigame.fish_idle_velocity -= 10 + minigame.mover.fish_idle_velocity -= 10 /datum/fish_trait/carnivore name = "Carnivore" catalog_description = "This fish can only be baited with meat." incompatible_traits = list(/datum/fish_trait/vegan) -/datum/fish_trait/carnivore/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_trait/carnivore/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) . = ..() if(!rod.bait) .[MULTIPLICATIVE_FISHING_MOD] = 0 return if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT)) return + if(isfish(rod.bait)) + return if(!istype(rod.bait, /obj/item/food)) .[MULTIPLICATIVE_FISHING_MOD] = 0 return var/obj/item/food/food_bait = rod.bait - if(!(food_bait.foodtypes & MEAT)) + if(!(food_bait.foodtypes & (MEAT|SEAFOOD|BUGS))) .[MULTIPLICATIVE_FISHING_MOD] = 0 /datum/fish_trait/vegan @@ -196,14 +243,20 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) catalog_description = "This fish can only be baited with fresh produce." incompatible_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/necrophage) -/datum/fish_trait/vegan/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_trait/vegan/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) . = ..() if(!rod.bait) .[MULTIPLICATIVE_FISHING_MOD] = 0 return if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT)) return - if(!istype(rod.bait, /obj/item/food/grown)) + if(!istype(rod.bait, /obj/item/food)) + .[MULTIPLICATIVE_FISHING_MOD] = 0 + return + if(istype(rod.bait, /obj/item/food/grown)) + return + var/obj/item/food/food_bait = rod.bait + if(food_bait.foodtypes & (MEAT|SEAFOOD|GORE|BUGS|DAIRY) || !(food_bait.foodtypes & (VEGETABLES|FRUIT))) .[MULTIPLICATIVE_FISHING_MOD] = 0 /datum/fish_trait/emulsijack @@ -211,6 +264,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) catalog_description = "This fish emits an invisible toxin that emulsifies other fish for it to feed on." /datum/fish_trait/emulsijack/apply_to_fish(obj/item/fish/fish) + . = ..() RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(emulsify)) ADD_TRAIT(fish, TRAIT_RESIST_EMULSIFY, FISH_TRAIT_DATUM) @@ -226,7 +280,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) emulsified = TRUE if(emulsified) source.adjust_health(source.health + 3 * seconds_per_tick) - source.last_feeding = world.time //it feeds on the emulsion! + source.sate_hunger() /datum/fish_trait/emulsijack/apply_to_mob(mob/living/basic/mob) . = ..() @@ -250,11 +304,12 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) incompatible_traits = list(/datum/fish_trait/vegan) /datum/fish_trait/necrophage/apply_to_fish(obj/item/fish/fish) + . = ..() RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(eat_dead_fishes)) /datum/fish_trait/necrophage/proc/eat_dead_fishes(obj/item/fish/source, seconds_per_tick) SIGNAL_HANDLER - if(!source.is_hungry() || !isaquarium(source.loc)) + if(source.get_hunger() > 0.75 || !isaquarium(source.loc)) return for(var/obj/item/fish/victim in source.loc) if(victim.status != FISH_DEAD || victim == source || HAS_TRAIT(victim, TRAIT_YUCKY_FISH)) @@ -269,21 +324,38 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) diff_traits_inheritability = 25 /datum/fish_trait/parthenogenesis/apply_to_fish(obj/item/fish/fish) + . = ..() ADD_TRAIT(fish, TRAIT_FISH_SELF_REPRODUCE, FISH_TRAIT_DATUM) /** * Useful for those species with the parthenogenesis trait if you don't want them to mate with each other, - * or for similar shenanigeans, I don't know. + * or for similar shenanigans, I don't know. * Otherwise you could just set the stable_population to 1. */ /datum/fish_trait/no_mating name = "Mateless" catalog_description = "This fish cannot reproduce with other fishes." incompatible_traits = list(/datum/fish_trait/crossbreeder) + spontaneous_manifest_types = list( + /obj/item/fish/fryish = 100, + /obj/item/fish/fryish/fritterish = 0, + /obj/item/fish/fryish/nessie = 0 + ) /datum/fish_trait/no_mating/apply_to_fish(obj/item/fish/fish) + . = ..() ADD_TRAIT(fish, TRAIT_FISH_NO_MATING, FISH_TRAIT_DATUM) +///Prevent offsprings of fish with this trait from being of the same type (unless self-mating or the partner also has the trait) +/datum/fish_trait/recessive + name = "Recessive" + catalog_description = "If crossbred, offsprings will always be of the mate species, unless it also possess the trait." + diff_traits_inheritability = 0 + +/datum/fish_trait/no_mating/apply_to_fish(obj/item/fish/fish) + . = ..() + ADD_TRAIT(fish, TRAIT_FISH_RECESSIVE, FISH_TRAIT_DATUM) + /datum/fish_trait/revival diff_traits_inheritability = 15 name = "Self-Revival" @@ -291,6 +363,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) spontaneous_manifest_types = list(/obj/item/fish/boned = 100, /obj/item/fish/mastodon = 100) /datum/fish_trait/revival/apply_to_fish(obj/item/fish/fish) + . = ..() RegisterSignal(fish, COMSIG_FISH_STATUS_CHANGED, PROC_REF(check_status)) /datum/fish_trait/revival/proc/check_status(obj/item/fish/source) @@ -318,16 +391,22 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) catalog_description = "It's a predatory fish. It'll hunt down and eat live fishes of smaller size when hungry." incompatible_traits = list(/datum/fish_trait/vegan) +/datum/fish_trait/predator/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type) + . = ..() + if(isfish(rod.bait)) + .[MULTIPLICATIVE_FISHING_MOD] *= 2 + /datum/fish_trait/predator/apply_to_fish(obj/item/fish/fish) + . = ..() RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(eat_fishes)) /datum/fish_trait/predator/proc/eat_fishes(obj/item/fish/source, seconds_per_tick) SIGNAL_HANDLER - if(!source.is_hungry() || !isaquarium(source.loc)) + if(source.get_hunger() > 0.75 || !isaquarium(source.loc)) return var/obj/structure/aquarium/aquarium = source.loc for(var/obj/item/fish/victim in aquarium.get_fishes(TRUE, source)) - if(victim.size < source.size * 0.75) // It's a big fish eat small fish world + if(victim.size < source.size * 0.7) // It's a big fish eat small fish world continue if(victim.status != FISH_ALIVE || victim == source || HAS_TRAIT(victim, TRAIT_YUCKY_FISH) || SPT_PROB(80, seconds_per_tick)) continue @@ -337,31 +416,35 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) /datum/fish_trait/yucky name = "Yucky" catalog_description = "This fish tastes so repulsive, other fishes won't try to eat it." + reagents_to_add = list(/datum/reagent/yuck = 1.2) /datum/fish_trait/yucky/apply_to_fish(obj/item/fish/fish) - RegisterSignal(fish, COMSIG_ATOM_PROCESSED, PROC_REF(add_yuck)) + . = ..() ADD_TRAIT(fish, TRAIT_YUCKY_FISH, FISH_TRAIT_DATUM) - add_to_reagents(fish, /datum/reagent/yuck, 3) - -/datum/fish_trait/yucky/proc/add_yuck(obj/item/fish/source, mob/living/user, obj/item/process_item, list/results) - var/amount = source.grind_results[/datum/reagent/yuck] / length(results) - for(var/atom/result as anything in results) - result.reagents?.add_reagent(/datum/reagent/yuck, amount) /datum/fish_trait/toxic name = "Toxic" - catalog_description = "This fish contains toxins in its liver. Feeding it to predatory fishes or people is not reccomended." + catalog_description = "This fish contains toxins. Feeding it to predatory fishes or people is not recommended." diff_traits_inheritability = 25 + reagents_to_add = list(/datum/reagent/toxin/tetrodotoxin = 1) /datum/fish_trait/toxic/apply_to_fish(obj/item/fish/fish) - RegisterSignal(fish, COMSIG_ATOM_PROCESSED, PROC_REF(add_toxin)) + . = ..() + RegisterSignal(fish, COMSIG_FISH_UPDATE_SIZE_AND_WEIGHT, PROC_REF(make_venomous)) + RegisterSignal(fish, COMSIG_FISH_STATUS_CHANGED, PROC_REF(on_status_change)) RegisterSignal(fish, COMSIG_FISH_EATEN_BY_OTHER_FISH, PROC_REF(on_eaten)) - add_to_reagents(fish, /datum/reagent/toxin/tetrodotoxin, 2.5) -/datum/fish_trait/toxic/proc/add_toxin(obj/item/fish/source, mob/living/user, obj/item/process_item, list/results) - var/amount = source.grind_results[ /datum/reagent/toxin/tetrodotoxin] / length(results) - for(var/atom/result as anything in results) - result.reagents?.add_reagent(/datum/reagent/toxin/tetrodotoxin, amount) +/datum/fish_trait/toxic/proc/make_venomous(obj/item/fish/source, new_size, new_weight) + SIGNAL_HANDLER + if(!HAS_TRAIT(source, TRAIT_FISH_STINGER)) + return + add_venom(source, /datum/reagent/toxin/tetrodotoxin, new_weight, mult = source.status == FISH_DEAD ? 0.1 : 0.25) + +/datum/fish_trait/toxic/proc/on_status_change(obj/item/fish/source) + SIGNAL_HANDLER + if(!HAS_TRAIT(source, TRAIT_FISH_STINGER)) + return + change_venom_on_death(source, /datum/reagent/toxin/tetrodotoxin, 0.25, 0.1) /datum/fish_trait/toxic/proc/on_eaten(obj/item/fish/source, obj/item/fish/predator) if(HAS_TRAIT(predator, TRAIT_FISH_TOXIN_IMMUNE)) @@ -388,6 +471,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) diff_traits_inheritability = 40 /datum/fish_trait/toxin_immunity/apply_to_fish(obj/item/fish/fish) + . = ..() ADD_TRAIT(fish, TRAIT_FISH_TOXIN_IMMUNE, FISH_TRAIT_DATUM) /datum/fish_trait/crossbreeder @@ -398,6 +482,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) incompatible_traits = list(/datum/fish_trait/no_mating) /datum/fish_trait/crossbreeder/apply_to_fish(obj/item/fish/fish) + . = ..() ADD_TRAIT(fish, TRAIT_FISH_CROSSBREEDER, FISH_TRAIT_DATUM) /datum/fish_trait/aggressive @@ -407,6 +492,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) catalog_description = "This fish is aggressively territorial, and may attack fish that come close to it." /datum/fish_trait/aggressive/apply_to_fish(obj/item/fish/fish) + . = ..() RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(try_attack_fish)) /datum/fish_trait/aggressive/proc/try_attack_fish(obj/item/fish/source, seconds_per_tick) @@ -429,8 +515,10 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) spontaneous_manifest_types = list(/obj/item/fish/clownfish/lube = 100) catalog_description = "This fish exudes a viscous, slippery lubrificant. It's recommended not to step on it." added_difficulty = 5 + reagents_to_add = list(/datum/reagent/lube = 1.2) /datum/fish_trait/lubed/apply_to_fish(obj/item/fish/fish) + . = ..() fish.AddComponent(/datum/component/slippery, 8 SECONDS, SLIDE|GALOSHES_DONT_HELP) /datum/fish_trait/lubed/apply_to_mob(mob/living/basic/mob) @@ -448,6 +536,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) catalog_description = "This fish has developed a primitive adaptation to life on both land and water." /datum/fish_trait/amphibious/apply_to_fish(obj/item/fish/fish) + . = ..() ADD_TRAIT(fish, TRAIT_FISH_AMPHIBIOUS, FISH_TRAIT_DATUM) if(fish.required_fluid_type == AQUARIUM_FLUID_AIR) fish.required_fluid_type = AQUARIUM_FLUID_FRESHWATER @@ -460,6 +549,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) incompatible_traits = list(/datum/fish_trait/predator, /datum/fish_trait/necrophage) /datum/fish_trait/mixotroph/apply_to_fish(obj/item/fish/fish) + . = ..() ADD_TRAIT(fish, TRAIT_FISH_NO_HUNGER, FISH_TRAIT_DATUM) /datum/fish_trait/antigrav @@ -467,12 +557,13 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) inheritability = 75 diff_traits_inheritability = 25 catalog_description = "This fish will invert the gravity of the bait at random. May fall upward outside after being caught." - added_difficulty = 15 + added_difficulty = 20 /datum/fish_trait/antigrav/minigame_mod(obj/item/fishing_rod/rod, mob/fisherman, datum/fishing_challenge/minigame) minigame.special_effects |= FISHING_MINIGAME_RULE_ANTIGRAV /datum/fish_trait/antigrav/apply_to_fish(obj/item/fish/fish) + . = ..() fish.AddElement(/datum/element/forced_gravity, NEGATIVE_GRAVITY) /datum/fish_trait/antigrav/apply_to_mob(mob/living/basic/mob) @@ -489,6 +580,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) catalog_description = "This fish tends to die of stress when forced to be around too many other fish." /datum/fish_trait/anxiety/apply_to_fish(obj/item/fish/fish) + . = ..() RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(on_fish_life)) ///signal sent when the anxiety fish is fed, killing it if sharing contents with too many fish. @@ -509,26 +601,39 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) inheritability = 60 diff_traits_inheritability = 30 catalog_description = "This fish is electroreceptive, and will generate electric fields. Can be harnessed inside a bioelectric generator." + reagents_to_add = list(/datum/reagent/consumable/liquidelectricity = 1.5) /datum/fish_trait/electrogenesis/apply_to_fish(obj/item/fish/fish) + . = ..() ADD_TRAIT(fish, TRAIT_FISH_ELECTROGENESIS, FISH_TRAIT_DATUM) - RegisterSignal(fish, COMSIG_ITEM_ATTACK, PROC_REF(on_item_attack)) + RegisterSignal(fish, COMSIG_FISH_FORCE_UPDATED, PROC_REF(on_force_updated)) + RegisterSignals(fish, list(COMSIG_ITEM_FRIED, TRAIT_FOOD_BBQ_GRILLED), PROC_REF(on_fish_cooked)) -/datum/fish_trait/electrogenesis/proc/on_item_attack(obj/item/fish/fish, mob/living/target, mob/living/user) +/datum/fish_trait/electrogenesis/proc/on_fish_cooked(obj/item/fish/fish, cooked_time) SIGNAL_HANDLER + if(cooked_time >= FISH_SAFE_COOKING_DURATION) + fish.reagents.del_reagent(/datum/reagent/consumable/liquidelectricity) + else + fish.reagents.multiply_single_reagent(/datum/reagent/consumable/liquidelectricity, 0.66) + +/datum/fish_trait/electrogenesis/add_reagents(obj/item/fish/fish, list/reagents) + . = ..() + if(HAS_TRAIT(fish, TRAIT_FISH_WELL_COOKED)) // Cooking it well removes all liquid electricity + reagents -= /datum/reagent/consumable/liquidelectricity + else + reagents -= /datum/reagent/blood + //Otherwise, undercooking it will remove 2/3 of it. + if(!HAS_TRAIT(fish, TRAIT_FOOD_FRIED) && !HAS_TRAIT(fish, TRAIT_FOOD_BBQ_GRILLED)) + reagents[/datum/reagent/consumable/liquidelectricity] -= 1 +/datum/fish_trait/electrogenesis/proc/on_force_updated(obj/item/fish/fish, weight_rank, bonus_or_malus) + SIGNAL_HANDLER if(fish.status == FISH_ALIVE) - fish.force = 16 + fish.force += 10 - fish.w_class fish.damtype = BURN fish.attack_verb_continuous = list("shocks", "zaps") fish.attack_verb_simple = list("shock", "zap") - fish.hitsound = 'sound/effects/sparks4.ogg' - else - fish.force = fish::force - fish.damtype = fish::damtype - fish.attack_verb_continuous = fish::attack_verb_continuous - fish.attack_verb_simple = fish::attack_verb_simple - fish.hitsound = fish::hitsound + fish.hitsound = 'sound/effects/sparks/sparks4.ogg' /datum/fish_trait/electrogenesis/apply_to_mob(mob/living/basic/mob) . = ..() @@ -539,10 +644,123 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) /datum/fish_trait/stunted name = "Stunted Growth" catalog_description = "This chrab's development is stunted, and will not properly reach adulthood." - spontaneous_manifest_types = list(/obj/item/fish/chasm_crab = 12, /obj/item/fish/chasm_crab/ice = 12) + spontaneous_manifest_types = list(/obj/item/fish/chasm_crab = 12) fish_whitelist = list(/obj/item/fish/chasm_crab, /obj/item/fish/chasm_crab/ice) diff_traits_inheritability = 40 /datum/fish_trait/stunted/apply_to_mob(mob/living/basic/mob) . = ..() qdel(mob.GetComponent(/datum/component/growth_and_differentiation)) + +/datum/fish_trait/stinger + name = "Stinger" + inheritability = 80 + diff_traits_inheritability = 35 + catalog_description = "This fish is equipped with a sharp stringer or bill capable of delivering damage and toxins." + spontaneous_manifest_types = list( + /obj/item/fish/stingray = 100, + /obj/item/fish/swordfish = 100, + /obj/item/fish/chainsawfish = 100, + /obj/item/fish/pike/armored = 100, + ) + +/datum/fish_trait/stinger/apply_to_fish(obj/item/fish/fish) + . = ..() + ADD_TRAIT(fish, TRAIT_FISH_STINGER, FISH_TRAIT_DATUM) + RegisterSignal(fish, COMSIG_FISH_FORCE_UPDATED, PROC_REF(on_force_updated)) + +/datum/fish_trait/stinger/proc/on_force_updated(obj/item/fish/fish, weight_rank, bonus_or_malus) + SIGNAL_HANDLER + fish.force += 1 + fish.w_class + bonus_or_malus + +/datum/fish_trait/toxic_barbs + name = "Toxic Barbs" + catalog_description = "This fish' stinger, bill or otherwise, is coated with simple, yet effetive venom." + spontaneous_manifest_types = list(/obj/item/fish/stingray = 35) + +/datum/fish_trait/toxic_barbs/apply_to_fish(obj/item/fish/fish) + . = ..() + RegisterSignal(fish, COMSIG_FISH_UPDATE_SIZE_AND_WEIGHT, PROC_REF(make_venomous)) + RegisterSignal(fish, COMSIG_FISH_STATUS_CHANGED, PROC_REF(on_status_change)) + +/datum/fish_trait/toxic_barbs/proc/make_venomous(obj/item/fish/source, new_size, new_weight) + SIGNAL_HANDLER + if(!HAS_TRAIT(source, TRAIT_FISH_STINGER)) + ///Remove the trait from the fish so it doesn't show on the analyzer as it doesn't do anything on stingerless ones. + source.fish_traits -= type + UnregisterSignal(source, list(COMSIG_FISH_UPDATE_SIZE_AND_WEIGHT, COMSIG_FISH_STATUS_CHANGED)) + return + add_venom(source, /datum/reagent/toxin/venom, new_weight, mult = source.status == FISH_DEAD ? 0.3 : 0.7) + +/datum/fish_trait/toxic_barbs/proc/on_status_change(obj/item/fish/source) + SIGNAL_HANDLER + if(!HAS_TRAIT(source, TRAIT_FISH_STINGER)) + return + change_venom_on_death(source, /datum/reagent/toxin/venom, 0.7, 0.3) + +/datum/fish_trait/hallucinogenic + name = "Hallucinogenic" + catalog_description = "This fish is coated with hallucinogenic neurotoxin. We advise cooking it before consumption." + reagents_to_add = list(/datum/reagent/toxin/mindbreaker/fish = 1) + +/datum/fish_trait/hallucinogenic/add_reagents(obj/item/fish/fish, list/reagents) + if(!HAS_TRAIT(src, TRAIT_FOOD_FRIED) && !HAS_TRAIT(src, TRAIT_FOOD_BBQ_GRILLED)) + return ..() + +/datum/fish_trait/ink + name = "Ink Production" + catalog_description = "This fish possess a sac that produces ink." + diff_traits_inheritability = 70 + spontaneous_manifest_types = list(/obj/item/fish/squid = 35) + +/datum/fish_trait/ink/apply_to_fish(obj/item/fish/fish) + . = ..() + RegisterSignal(fish, COMSIG_ATOM_PROCESSED, PROC_REF(on_process)) + RegisterSignal(fish, COMSIG_ITEM_ATTACK_ZONE, PROC_REF(attacked_someone)) + +/datum/fish_trait/ink/proc/attacked_someone(obj/item/fish/source, mob/living/target, mob/living/user, zone) + SIGNAL_HANDLER + if(HAS_TRAIT(source, TRAIT_FISH_INK_ON_COOLDOWN) || source.status == FISH_DEAD) + return + if(!iscarbon(target) || target.get_bodypart(BODY_ZONE_HEAD)) + target.adjust_temp_blindness_up_to(4 SECONDS, 8 SECONDS) + target.adjust_confusion_up_to(1.5 SECONDS, 4 SECONDS) + target.AddComponent(/datum/component/face_decal/splat, \ + color = COLOR_NEARLY_ALL_BLACK, \ + memory_type = /datum/memory/witnessed_inking, \ + mood_event_type = /datum/mood_event/inked, \ + ) + target.visible_message(span_warning("[target] is inked by [source]!"), span_userdanger("You've been inked by [source]!")) + playsound(target, SFX_DESECRATION, 50, TRUE) + ADD_TRAIT(source, TRAIT_FISH_INK_ON_COOLDOWN, FISH_TRAIT_DATUM) + addtimer(TRAIT_CALLBACK_REMOVE(source, TRAIT_FISH_INK_ON_COOLDOWN, FISH_TRAIT_DATUM), 9 SECONDS) + +/datum/fish_trait/ink/proc/on_process(obj/item/fish/source, mob/living/user, obj/item/process_item, list/results) + SIGNAL_HANDLER + new /obj/item/food/ink_sac(source.drop_location()) + +/datum/fish_trait/camouflage + name = "Camouflage" + catalog_description = "This fish possess the ability to blend with its surroundings." + spontaneous_manifest_types = list(/obj/item/fish/squid = 35) + added_difficulty = 5 + +/datum/fish_trait/camouflage/minigame_mod(obj/item/fishing_rod/rod, mob/fisherman, datum/fishing_challenge/minigame) + minigame.special_effects |= FISHING_MINIGAME_RULE_CAMO + +/datum/fish_trait/camouflage/apply_to_fish(obj/item/fish/fish) + . = ..() + RegisterSignal(fish, COMSIG_FISH_LIFE, PROC_REF(fade_out)) + RegisterSignals(fish, list(COMSIG_MOVABLE_MOVED, COMSIG_FISH_STATUS_CHANGED), PROC_REF(reset_alpha)) + +/datum/fish_trait/camouflage/proc/fade_out(obj/item/fish/source, seconds_per_tick) + SIGNAL_HANDLER + if(source.status == FISH_DEAD || source.last_move + 5 SECONDS >= world.time) + return + source.alpha = max(source.alpha - 10 * seconds_per_tick, 10) + +/datum/fish_trait/camouflage/proc/reset_alpha(obj/item/fish/source) + SIGNAL_HANDLER + var/init_alpha = initial(source.alpha) + if(init_alpha != source.alpha) + animate(source.alpha, alpha = init_alpha, time = 1.2 SECONDS, easing = CIRCULAR_EASING|EASE_OUT) diff --git a/code/modules/fishing/fish/fish_types.dm b/code/modules/fishing/fish/fish_types.dm deleted file mode 100644 index ce9f36f0553d6..0000000000000 --- a/code/modules/fishing/fish/fish_types.dm +++ /dev/null @@ -1,797 +0,0 @@ -// Freshwater fish - -/obj/item/fish/goldfish - name = "goldfish" - desc = "Despite common belief, goldfish do not have three-second memories. \ - They can actually remember things that happened up to three months ago." - icon_state = "goldfish" - sprite_width = 8 - sprite_height = 8 - stable_population = 3 - average_size = 30 - average_weight = 500 - favorite_bait = list(/obj/item/food/bait/worm) - required_temperature_min = MIN_AQUARIUM_TEMP+18 - required_temperature_max = MIN_AQUARIUM_TEMP+26 - -/obj/item/fish/goldfish/gill - name = "McGill" - desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case." - stable_population = 1 - random_case_rarity = FISH_RARITY_NOPE - show_in_catalog = FALSE - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/angelfish - name = "angelfish" - desc = "Young Angelfish often live in groups, while adults prefer solitary life. They become territorial and aggressive toward other fish when they reach adulthood." - icon_state = "angelfish" - dedicated_in_aquarium_icon_state = "bigfish" - sprite_height = 7 - source_height = 7 - average_size = 30 - average_weight = 500 - stable_population = 3 - fish_traits = list(/datum/fish_trait/aggressive) - required_temperature_min = MIN_AQUARIUM_TEMP+22 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - -/obj/item/fish/guppy - name = "guppy" - desc = "Guppy is also known as rainbow fish because of the brightly colored body and fins." - icon_state = "guppy" - dedicated_in_aquarium_icon_state = "fish_greyscale" - aquarium_vc_color = "#91AE64" - sprite_width = 8 - sprite_height = 5 - average_size = 30 - average_weight = 500 - stable_population = 6 - required_temperature_min = MIN_AQUARIUM_TEMP+20 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - -/obj/item/fish/plasmatetra - name = "plasma tetra" - desc = "Due to their small size, tetras are prey to many predators in their watery world, including eels, crustaceans, and invertebrates." - icon_state = "plastetra" - dedicated_in_aquarium_icon_state = "fish_greyscale" - aquarium_vc_color = "#D30EB0" - average_size = 30 - average_weight = 500 - stable_population = 3 - required_temperature_min = MIN_AQUARIUM_TEMP+20 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - -/obj/item/fish/catfish - name = "cory catfish" - desc = "A catfish has about 100,000 taste buds, and their bodies are covered with them to help detect chemicals present in the water and also to respond to touch." - icon_state = "catfish" - dedicated_in_aquarium_icon_state = "fish_greyscale" - aquarium_vc_color = "#907420" - average_size = 100 - average_weight = 2000 - stable_population = 3 - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = JUNKFOOD - ) - ) - required_temperature_min = MIN_AQUARIUM_TEMP+12 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/tadpole - name = "tadpole" - desc = "The larval spawn of an amphibian. A very minuscle, round creature with a long tail it uses to swim around." - icon_state = "tadpole" - dedicated_in_aquarium_icon_state = "tadpole small" - average_size = 3 - average_weight = 10 - sprite_width = 3 - sprite_height = 1 - health = 50 - feeding_frequency = 1.5 MINUTES - required_temperature_min = MIN_AQUARIUM_TEMP+15 - required_temperature_max = MIN_AQUARIUM_TEMP+20 - fillet_type = null - fish_traits = list(/datum/fish_trait/no_mating) //They grow into frogs and that's it. - beauty = FISH_BEAUTY_NULL - random_case_rarity = FISH_RARITY_NOPE //Why would you want generic frog tadpoles you get from ponds inside fish cases? - /// Once dead, tadpoles disappear after a dozen seconds, since you can get infinite tadpoles. - var/del_timerid - -/obj/item/fish/tadpole/Initialize(mapload, apply_qualities = TRUE) - . = ..() - AddComponent(/datum/component/fish_growth, /mob/living/basic/frog, 100 / rand(2.5, 3 MINUTES) * 10) - RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks)) - RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth)) - -/obj/item/fish/tadpole/set_status(new_status) - . = ..() - if(status == FISH_DEAD) - del_timerid = QDEL_IN_STOPPABLE(src, 12 SECONDS) - else - deltimer(del_timerid) - -/obj/item/fish/tadpole/proc/growth_checks(datum/source, seconds_per_tick) - SIGNAL_HANDLER - var/hunger = CLAMP01((world.time - last_feeding) / feeding_frequency) - if(hunger >= 0.7) //too hungry to grow - return COMPONENT_DONT_GROW - var/obj/structure/aquarium/aquarium = loc - if(!aquarium.allow_breeding) //the aquarium has breeding disabled - return COMPONENT_DONT_GROW - -/obj/item/fish/tadpole/proc/on_growth(datum/source, mob/living/basic/frog/result) - SIGNAL_HANDLER - playsound(result, result.attack_sound, 50, TRUE) // reeeeeeeeeeeeeee... - -/obj/item/fish/tadpole/get_export_price(price, percent) - return 2 //two credits. Tadpoles aren't really that valueable. - -// Saltwater fish below - -/obj/item/fish/clownfish - name = "clownfish" - desc = "Clownfish catch prey by swimming onto the reef, attracting larger fish, and luring them back to the anemone. The anemone will sting and eat the larger fish, leaving the remains for the clownfish." - icon_state = "clownfish" - dedicated_in_aquarium_icon_state = "clownfish_small" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - sprite_width = 8 - sprite_height = 5 - average_size = 30 - average_weight = 500 - stable_population = 4 - fish_traits = list(/datum/fish_trait/picky_eater) - evolution_types = list(/datum/fish_evolution/lubefish) - compatible_types = list(/obj/item/fish/clownfish/lube) - required_temperature_min = MIN_AQUARIUM_TEMP+22 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - -/obj/item/fish/clownfish/lube - name = "lubefish" - desc = "A clownfish exposed to cherry-flavored lube for far too long. First discovered the days following a cargo incident around the seas of Europa, when thousands of thousands of thousands..." - icon_state = "lubefish" - random_case_rarity = FISH_RARITY_VERY_RARE - dedicated_in_aquarium_icon_state = "lubefish_small" - fish_traits = list(/datum/fish_trait/picky_eater, /datum/fish_trait/lubed) - evolution_types = null - compatible_types = list(/obj/item/fish/clownfish) - food = /datum/reagent/lube - beauty = FISH_BEAUTY_GREAT - -/obj/item/fish/cardinal - name = "cardinalfish" - desc = "Cardinalfish are often found near sea urchins, where the fish hide when threatened." - icon_state = "cardinalfish" - dedicated_in_aquarium_icon_state = "fish_greyscale" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - average_size = 30 - average_weight = 500 - stable_population = 4 - fish_traits = list(/datum/fish_trait/vegan) - required_temperature_min = MIN_AQUARIUM_TEMP+22 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - -/obj/item/fish/greenchromis - name = "green chromis" - desc = "The Chromis can vary in color from blue to green depending on the lighting and distance from the lights." - icon_state = "greenchromis" - dedicated_in_aquarium_icon_state = "fish_greyscale" - aquarium_vc_color = "#00ff00" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - average_size = 30 - average_weight = 500 - stable_population = 5 - required_temperature_min = MIN_AQUARIUM_TEMP+23 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - - fishing_difficulty_modifier = 5 // Bit harder - -/obj/item/fish/firefish - name = "firefish goby" - desc = "To communicate in the wild, the firefish uses its dorsal fin to alert others of potential danger." - icon_state = "firefish" - sprite_width = 6 - sprite_height = 5 - required_fluid_type = AQUARIUM_FLUID_SALTWATER - average_size = 30 - average_weight = 500 - stable_population = 3 - disliked_bait = list(/obj/item/food/bait/worm, /obj/item/food/bait/doughball) - fish_ai_type = FISH_AI_ZIPPY - required_temperature_min = MIN_AQUARIUM_TEMP+23 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - -/obj/item/fish/pufferfish - name = "pufferfish" - desc = "They say that one pufferfish contains enough toxins to kill 30 people, although in the last few decades they've been genetically engineered en masse to be less poisonous." - icon_state = "pufferfish" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - sprite_width = 8 - sprite_height = 8 - average_size = 60 - average_weight = 1000 - stable_population = 3 - required_temperature_min = MIN_AQUARIUM_TEMP+23 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/toxic) - beauty = FISH_BEAUTY_GOOD - - -/obj/item/fish/lanternfish - name = "lanternfish" - desc = "Typically found in areas below 6600 feet below the surface of the ocean, they live in complete darkness." - icon_state = "lanternfish" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - random_case_rarity = FISH_RARITY_VERY_RARE - source_width = 28 - source_height = 21 - sprite_width = 8 - sprite_height = 8 - average_size = 100 - average_weight = 1500 - stable_population = 3 - fish_traits = list(/datum/fish_trait/nocturnal) - required_temperature_min = MIN_AQUARIUM_TEMP+2 //My source is that the water at a depth 6600 feet is pretty darn cold. - required_temperature_max = MIN_AQUARIUM_TEMP+18 - beauty = FISH_BEAUTY_NULL - -//Tiziran Fish -/obj/item/fish/dwarf_moonfish - name = "dwarf moonfish" - desc = "Ordinarily in the wild, the Zagoskian moonfish is around the size of a tuna, however through selective breeding a smaller breed suitable for being kept as an aquarium pet has been created." - icon_state = "dwarf_moonfish" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - stable_population = 2 - fillet_type = /obj/item/food/fishmeat/moonfish - average_size = 100 - average_weight = 2000 - required_temperature_min = MIN_AQUARIUM_TEMP+20 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/gunner_jellyfish - name = "gunner jellyfish" - desc = "So called due to their resemblance to an artillery shell, the gunner jellyfish is native to Tizira, where it is enjoyed as a delicacy. Produces a mild hallucinogen that is destroyed by cooking." - icon_state = "gunner_jellyfish" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - stable_population = 4 - fillet_type = /obj/item/food/fishmeat/gunner_jellyfish - required_temperature_min = MIN_AQUARIUM_TEMP+24 - required_temperature_max = MIN_AQUARIUM_TEMP+32 - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/needlefish - name = "needlefish" - desc = "A tiny, transparent fish which resides in large schools in the oceans of Tizira. A common food for other, larger fish." - icon_state = "needlefish" - dedicated_in_aquarium_icon_state = "needlefish_small" - sprite_width = 7 - required_fluid_type = AQUARIUM_FLUID_SALTWATER - stable_population = 12 - fillet_type = null - average_size = 20 - average_weight = 300 - fish_traits = list(/datum/fish_trait/carnivore) - required_temperature_min = MIN_AQUARIUM_TEMP+10 - required_temperature_max = MIN_AQUARIUM_TEMP+32 - -/obj/item/fish/armorfish - name = "armorfish" - desc = "A small shellfish native to Tizira's oceans, known for its exceptionally hard shell. Consumed similarly to prawns." - icon_state = "armorfish" - dedicated_in_aquarium_icon_state = "armorfish_small" - sprite_height = 5 - sprite_width = 6 - required_fluid_type = AQUARIUM_FLUID_SALTWATER - stable_population = 10 - fillet_type = /obj/item/food/fishmeat/armorfish - fish_ai_type = FISH_AI_SLOW - required_temperature_min = MIN_AQUARIUM_TEMP+10 - required_temperature_max = MIN_AQUARIUM_TEMP+32 - -/// Commonly found on the mining fishing spots. Can be grown into lobstrosities -/obj/item/fish/chasm_crab - name = "chasm chrab" - desc = "The young of the lobstrosity mature in pools below the earth, eating what falls in until large enough to clamber out. Those found near the station are well-fed." - icon_state = "chrab" - dedicated_in_aquarium_icon_state = "chrab_small" - sprite_height = 9 - sprite_width = 8 - stable_population = 4 - feeding_frequency = 10 MINUTES - random_case_rarity = FISH_RARITY_RARE - fillet_type = /obj/item/food/meat/slab/rawcrab - required_temperature_min = MIN_AQUARIUM_TEMP+9 - required_temperature_max = LAVALAND_MAX_TEMPERATURE+50 - min_pressure = HAZARD_LOW_PRESSURE - safe_air_limits = list( - /datum/gas/oxygen = list(2, 100), - /datum/gas/nitrogen, - /datum/gas/carbon_dioxide = list(0, 20), - /datum/gas/water_vapor, - /datum/gas/plasma = list(0, 5), - /datum/gas/bz = list(0, 5), - /datum/gas/miasma = list(0, 5), - ) - evolution_types = list(/datum/fish_evolution/ice_chrab) - compatible_types = list(/obj/item/fish/chasm_crab/ice) - beauty = FISH_BEAUTY_GOOD - ///This value represents how much the crab needs aren't being met. Higher values translate to a more likely hostile lobstrosity. - var/anger = 0 - ///The lobstrosity type this matures into - var/lob_type = /mob/living/basic/mining/lobstrosity/juvenile/lava - ///at which rate the crab gains maturation - var/growth_rate = 100 / (10 MINUTES) * 10 - -/obj/item/fish/chasm_crab/Initialize(mapload, apply_qualities = TRUE) - . = ..() - RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks)) - RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth)) - -///A chasm crab growth speed is determined by its initial weight and size, ergo bigger crabs for faster lobstrosities -/obj/item/fish/chasm_crab/update_size_and_weight(new_size = average_size, new_weight = average_weight) - . = ..() - var/multiplier = 1 - switch(size) - if(0 to FISH_SIZE_TINY_MAX) - multiplier -= 0.2 - if(FISH_SIZE_SMALL_MAX to FISH_SIZE_NORMAL_MAX) - multiplier += 0.2 - if(FISH_SIZE_NORMAL_MAX to FISH_SIZE_BULKY_MAX) - multiplier += 0.5 - if(FISH_SIZE_BULKY_MAX to INFINITY) - multiplier += 0.8 - - if(weight <= 800) - multiplier -= 0.1 * round((1000 - weight) / 200) - else if(weight >= 1500) - multiplier += min(0.1 * round((weight - 1000) / 500), 2) - - AddComponent(/datum/component/fish_growth, lob_type, initial(growth_rate) * multiplier) - -/obj/item/fish/chasm_crab/proc/growth_checks(datum/source, seconds_per_tick) - SIGNAL_HANDLER - var/hunger = CLAMP01((world.time - last_feeding) / feeding_frequency) - if(health <= initial(health) * 0.6 || hunger >= 0.6) //if too hurt or hungry, don't grow. - anger += growth_rate * 2 * seconds_per_tick - return COMPONENT_DONT_GROW - - if(hunger >= 0.4) //I'm hungry and angry - anger += growth_rate * 0.6 * seconds_per_tick - - if(!isaquarium(loc)) - return - - var/obj/structure/aquarium/aquarium = loc - if(!aquarium.allow_breeding) //the aquarium has breeding disabled - return COMPONENT_DONT_GROW - if(!locate(/obj/item/aquarium_prop) in aquarium) //the aquarium deco is quite barren - anger += growth_rate * 0.25 * seconds_per_tick - var/fish_count = length(aquarium.get_fishes()) - if(!ISINRANGE(fish_count, 3, AQUARIUM_MAX_BREEDING_POPULATION * 0.5)) //too lonely or overcrowded - anger += growth_rate * 0.3 * seconds_per_tick - if(fish_count > AQUARIUM_MAX_BREEDING_POPULATION * 0.5) //check if there's enough room to maturate. - return COMPONENT_DONT_GROW - -/obj/item/fish/chasm_crab/proc/on_growth(datum/source, mob/living/basic/mining/lobstrosity/juvenile/result) - SIGNAL_HANDLER - if(!prob(anger)) - result.AddElement(/datum/element/ai_retaliate) - qdel(result.ai_controller) - result.ai_controller = new /datum/ai_controller/basic_controller/lobstrosity/juvenile/calm(result) - else if(anger < 30) //not really that mad, just a bit unstable. - qdel(result.ai_controller) - result.ai_controller = new /datum/ai_controller/basic_controller/lobstrosity/juvenile/capricious(result) - -/obj/item/fish/chasm_crab/ice - name = "arctic chrab" - desc = "A subspecies of chasm chrabs that has adapted to the cold climate and lack of abysmal holes of the icemoon." - icon_state = "arctic_chrab" - dedicated_in_aquarium_icon_state = "arctic_chrab_small" - required_temperature_min = ICEBOX_MIN_TEMPERATURE-20 - required_temperature_max = MIN_AQUARIUM_TEMP+15 - evolution_types = list(/datum/fish_evolution/chasm_chrab) - compatible_types = list(/obj/item/fish/chasm_crab) - beauty = FISH_BEAUTY_GREAT - lob_type = /mob/living/basic/mining/lobstrosity/juvenile - -/obj/item/fish/donkfish - name = "donk co. company patent donkfish" - desc = "A lab-grown donkfish. Its invention was an accident for the most part, as it was intended to be consumed in donk pockets. Unfortunately, it tastes horrible, so it has now become a pseudo-mascot." - icon_state = "donkfish" - random_case_rarity = FISH_RARITY_VERY_RARE - required_fluid_type = AQUARIUM_FLUID_FRESHWATER - stable_population = 4 - fillet_type = /obj/item/food/fishmeat/donkfish - fish_traits = list(/datum/fish_trait/yucky) - required_temperature_min = MIN_AQUARIUM_TEMP+15 - required_temperature_max = MIN_AQUARIUM_TEMP+28 - beauty = FISH_BEAUTY_EXCELLENT - -/obj/item/fish/emulsijack - name = "toxic emulsijack" - desc = "Ah, the terrifying emulsijack. Created in a laboratory, the only real use of this slimey, scaleless fish is for completely ruining a tank." - icon_state = "emulsijack" - random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS - required_fluid_type = AQUARIUM_FLUID_ANADROMOUS - stable_population = 3 - fish_traits = list(/datum/fish_trait/emulsijack) - required_temperature_min = MIN_AQUARIUM_TEMP+5 - required_temperature_max = MIN_AQUARIUM_TEMP+40 - beauty = FISH_BEAUTY_BAD - -/obj/item/fish/jumpercable - name = "monocloning jumpercable" - desc = "A surprisingly useful if nasty looking creation from the syndicate fish labs. Drop one in a tank, and \ - watch it self-feed and multiply. Generates more and more power as a growing swarm!" - icon_state = "jumpercable" - dedicated_in_aquarium_icon_state = "jumpercable_small" - sprite_width = 17 - sprite_height = 5 - stable_population = 12 - average_size = 110 - average_weight = 6000 - random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS - required_temperature_min = MIN_AQUARIUM_TEMP+10 - required_temperature_max = MIN_AQUARIUM_TEMP+30 - favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) - fish_traits = list( - /datum/fish_trait/parthenogenesis, - /datum/fish_trait/mixotroph, - /datum/fish_trait/electrogenesis, - ) - beauty = FISH_BEAUTY_UGLY - -/obj/item/fish/ratfish - name = "ratfish" - desc = "A rat exposed to the murky waters of maintenance too long. Any higher power, if it revealed itself, would state that the ratfish's continued existence is extremely unwelcome." - icon_state = "ratfish" - random_case_rarity = FISH_RARITY_RARE - required_fluid_type = AQUARIUM_FLUID_FRESHWATER - stable_population = 10 //set by New, but this is the default config value - fillet_type = /obj/item/food/meat/slab/human/mutant/zombie //eww... - fish_traits = list(/datum/fish_trait/necrophage) - required_temperature_min = MIN_AQUARIUM_TEMP+15 - required_temperature_max = MIN_AQUARIUM_TEMP+35 - fish_ai_type = FISH_AI_ZIPPY - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = DAIRY - ) - ) - beauty = FISH_BEAUTY_DISGUSTING - -/obj/item/fish/ratfish/Initialize(mapload, apply_qualities = TRUE) - . = ..() - //stable pop reflects the config for how many mice migrate. powerful... - stable_population = CONFIG_GET(number/mice_roundstart) - -/obj/item/fish/sludgefish - name = "sludgefish" - desc = "A misshapen, fragile, loosely fish-like living goop, the only thing that'd ever thrive in the acidic and claustrophobic cavities of the station's organic waste disposal system." - icon_state = "sludgefish" - dedicated_in_aquarium_icon_state = "sludgefish_small" - sprite_width = 7 - sprite_height = 6 - required_fluid_type = AQUARIUM_FLUID_SULPHWATEVER - stable_population = 8 - average_size = 20 - average_weight = 400 - health = 50 - breeding_timeout = 2.5 MINUTES - fish_traits = list(/datum/fish_trait/parthenogenesis, /datum/fish_trait/no_mating) - required_temperature_min = MIN_AQUARIUM_TEMP+10 - required_temperature_max = MIN_AQUARIUM_TEMP+40 - evolution_types = list(/datum/fish_evolution/purple_sludgefish) - beauty = FISH_BEAUTY_NULL - -/obj/item/fish/sludgefish/purple - name = "purple sludgefish" - desc = "A misshapen, fragile, loosely fish-like living goop. This one has developed sexual reproduction mechanisms, and a purple tint to boot." - icon_state = "sludgefish_purple" - dedicated_in_aquarium_icon_state = "sludgefish_purple_small" - random_case_rarity = FISH_RARITY_NOPE - fish_traits = list(/datum/fish_trait/parthenogenesis) - -/obj/item/fish/slimefish - name = "acquatic slime" - desc = "Kids, this is what happens when a slime overcomes its hydrophobic nature. It goes glug glug." - icon_state = "slimefish" - icon_state_dead = "slimefish_dead" - dedicated_in_aquarium_icon_state = "slimefish_small" - sprite_width = 7 - sprite_height = 7 - do_flop_animation = FALSE //it already has a cute bouncy wiggle. :3 - random_case_rarity = FISH_RARITY_VERY_RARE - required_fluid_type = AQUARIUM_FLUID_ANADROMOUS - stable_population = 4 - health = 150 - fillet_type = /obj/item/slime_extract/grey - grind_results = list(/datum/reagent/toxin/slimejelly = 10) - fish_traits = list(/datum/fish_trait/toxin_immunity, /datum/fish_trait/crossbreeder) - favorite_bait = list( - list( - "Type" = "Foodtype", - "Value" = TOXIC, - ), - list( - "Type" = "Reagent", - "Value" = /datum/reagent/toxin, - "Amount" = 5, - ), - ) - required_temperature_min = MIN_AQUARIUM_TEMP+20 - beauty = FISH_BEAUTY_GREAT - -/obj/item/fish/boned - name = "unmarine bonemass" - desc = "What one could mistake for fish remains, is in reality a species that chose to discard its weak flesh a long time ago. A living fossil, in its most literal sense." - icon_state = "bonemass" - dedicated_in_aquarium_icon_state = "bonemass_small" - sprite_width = 10 - sprite_height = 7 - fish_ai_type = FISH_AI_ZIPPY - random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS - required_fluid_type = AQUARIUM_FLUID_ANY_WATER - min_pressure = HAZARD_LOW_PRESSURE - health = 150 - stable_population = 3 - grind_results = list(/datum/reagent/bone_dust = 10) - fillet_type = /obj/item/stack/sheet/bone - num_fillets = 2 - fish_traits = list(/datum/fish_trait/revival, /datum/fish_trait/carnivore) - average_size = 70 - average_weight = 2000 - death_text = "%SRC stops moving." //It's dead... or is it? - evolution_types = list(/datum/fish_evolution/mastodon) - beauty = FISH_BEAUTY_UGLY - -/obj/item/fish/mastodon - name = "unmarine mastodon" - desc = "A monster of exposed muscles and innards, wrapped in a fish-like skeleton. You don't remember ever seeing it on the catalog." - icon = 'icons/obj/aquarium/wide.dmi' - icon_state = "mastodon" - dedicated_in_aquarium_icon = 'icons/obj/aquarium/fish.dmi' - dedicated_in_aquarium_icon_state = "mastodon_small" - base_pixel_x = -16 - pixel_x = -16 - sprite_width = 12 - sprite_height = 7 - show_in_catalog = FALSE - random_case_rarity = FISH_RARITY_NOPE - fishing_difficulty_modifier = 5 - required_fluid_type = AQUARIUM_FLUID_ANY_WATER - min_pressure = HAZARD_LOW_PRESSURE - health = 300 - stable_population = 2 //This means they can only crossbreed. - grind_results = list(/datum/reagent/bone_dust = 5, /datum/reagent/consumable/liquidgibs = 5) - fillet_type = /obj/item/stack/sheet/bone - num_fillets = 2 - feeding_frequency = 2 MINUTES - breeding_timeout = 10 MINUTES - average_size = 180 - average_weight = 5000 - death_text = "%SRC stops moving." - fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/amphibious, /datum/fish_trait/revival, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive) - beauty = FISH_BEAUTY_BAD - -/obj/item/fish/holo - name = "holographic goldfish" - desc = "A holographic representation of a common goldfish, slowly flickering out, removed from its holo-habitat." - icon_state = "goldfish" - show_in_catalog = FALSE - random_case_rarity = FISH_RARITY_NOPE - sprite_width = 8 - sprite_height = 8 - stable_population = 1 - average_size = 30 - average_weight = 500 - required_fluid_type = AQUARIUM_FLUID_ANADROMOUS - grind_results = null - fillet_type = null - death_text = "%SRC gently disappears." - fish_traits = list(/datum/fish_trait/no_mating) //just to be sure, these shouldn't reproduce - experisci_scannable = FALSE - -/obj/item/fish/holo/Initialize(mapload, apply_qualities = TRUE) - . = ..() - var/area/station/holodeck/holo_area = get_area(src) - if(!istype(holo_area)) - addtimer(CALLBACK(src, PROC_REF(set_status), FISH_DEAD), 1 MINUTES) - return - holo_area.linked.add_to_spawned(src) - -/obj/item/fish/holo/set_status(new_status) - . = ..() - if(status == FISH_DEAD) - animate(src, alpha = 0, 3 SECONDS, easing = SINE_EASING) - QDEL_IN(src, 3 SECONDS) - -/obj/item/fish/holo/crab - name = "holographic crab" - desc = "A holographic represantion of a soul-crushingly soulless crab, unlike the cuter ones occasionally roaming around. It stares at you, with empty, beady eyes." - icon_state = "crab" - dedicated_in_aquarium_icon_state = "crab_small" - average_weight = 1000 - sprite_height = 6 - sprite_width = 10 - -/obj/item/fish/holo/puffer - name = "holographic pufferfish" - desc ="A holographic representation of 100% safe-to-eat pufferfish... that is, if holographic fishes were even edible." - icon_state = "pufferfish" - sprite_width = 8 - sprite_height = 8 - average_size = 60 - average_weight = 1000 - beauty = FISH_BEAUTY_GOOD - -/obj/item/fish/holo/angel - name = "holographic angelfish" - desc = "A holographic representation of a angelfish. I got nothing snarky to say about this one." - icon_state = "angelfish" - dedicated_in_aquarium_icon_state = "bigfish" - sprite_height = 7 - -/obj/item/fish/holo/clown - name = "holographic clownfish" - icon_state = "holo_clownfish" - desc = "A holographic representation of a clownfish, or at least how they used to look like five centuries ago." - dedicated_in_aquarium_icon_state = "holo_clownfish_small" - required_fluid_type = AQUARIUM_FLUID_SALTWATER - sprite_width = 8 - sprite_height = 5 - -/obj/item/fish/holo/checkered - name = "unrendered holographic fish" - desc = "A checkered silhoutte of searing purple and pitch black presents itself before your eyes, like a tear in fabric of reality. It hurts to watch." - icon_state = "checkered" //it's a meta joke, buddy. - dedicated_in_aquarium_icon_state = "checkered_small" - sprite_width = 4 - beauty = FISH_BEAUTY_NULL - -/obj/item/fish/holo/halffish - name = "holographic half-fish" - desc = "A holographic representation of... a fish reduced to all bones, except for its head. Isn't it supposed to be dead? Ehr, holo-dead?" - icon_state = "half_fish" - dedicated_in_aquarium_icon_state = "half_fish_small" - sprite_height = 4 - sprite_width = 10 - average_size = 50 - beauty = FISH_BEAUTY_UGLY - -/obj/item/fish/starfish - name = "cosmostarfish" - desc = "A peculiar, gravity-defying, echinoderm-looking critter from hyperspace." - icon_state = "starfish" - dedicated_in_aquarium_icon_state = "starfish_small" - icon_state_dead = "starfish_dead" - sprite_width = 4 - average_size = 30 - average_weight = 300 - stable_population = 3 - required_fluid_type = AQUARIUM_FLUID_AIR - random_case_rarity = FISH_RARITY_NOPE - required_temperature_min = 0 - required_temperature_max = INFINITY - safe_air_limits = null - min_pressure = 0 - max_pressure = INFINITY - grind_results = list(/datum/reagent/bluespace = 10) - fillet_type = null - fish_traits = list(/datum/fish_trait/antigrav, /datum/fish_trait/mixotroph) - beauty = FISH_BEAUTY_GREAT - -/obj/item/fish/starfish/Initialize(mapload, apply_qualities = TRUE) - . = ..() - update_appearance(UPDATE_OVERLAYS) - -/obj/item/fish/starfish/update_overlays() - . = ..() - if(status == FISH_ALIVE) - . += emissive_appearance(icon, "starfish_emissive", src) - -///It spins, and dimly glows in the dark. -/obj/item/fish/starfish/flop_animation() - DO_FLOATING_ANIM(src) - -/obj/item/fish/lavaloop - name = "lavaloop fish" - desc = "Due to its curvature, it can be used as make-shift boomerang." - icon_state = "lava_loop" - sprite_width = 3 - sprite_height = 5 - average_size = 30 - average_weight = 500 - resistance_flags = FIRE_PROOF | LAVA_PROOF - required_fluid_type = AQUARIUM_FLUID_ANY_WATER //if we can survive hot lava and freezing plasrivers, we can survive anything - fish_ai_type = FISH_AI_ZIPPY - min_pressure = HAZARD_LOW_PRESSURE - required_temperature_min = MIN_AQUARIUM_TEMP+30 - required_temperature_max = MIN_AQUARIUM_TEMP+35 - aquarium_vc_color = "#ce7e1d" - fish_traits = list( - /datum/fish_trait/carnivore, - /datum/fish_trait/heavy, - ) - hitsound = null - throwforce = 5 - beauty = FISH_BEAUTY_GOOD - ///maximum bonus damage when winded up - var/maximum_bonus = 25 - -/obj/item/fish/lavaloop/Initialize(mapload, apply_qualities = TRUE) - . = ..() - ADD_TRAIT(src, TRAIT_BYPASS_RANGED_ARMOR, INNATE_TRAIT) - AddComponent(/datum/component/boomerang, throw_range, TRUE) - AddComponent(\ - /datum/component/throwbonus_on_windup,\ - maximum_bonus = maximum_bonus,\ - windup_increment_speed = 2,\ - throw_text = "starts cooking in your hands, it may explode soon!",\ - pass_maximum_callback = CALLBACK(src, PROC_REF(explode_on_user)),\ - apply_bonus_callback = CALLBACK(src, PROC_REF(on_fish_land)),\ - sound_on_success = 'sound/weapons/parry.ogg',\ - effect_on_success = /obj/effect/temp_visual/guardian/phase,\ - ) - -/obj/item/fish/lavaloop/proc/explode_on_user(mob/living/user) - var/obj/item/bodypart/arm/active_arm = user.get_active_hand() - active_arm?.dismember() - to_chat(user, span_warning("[src] explodes!")) - playsound(src, 'sound/effects/explosion1.ogg', 40, TRUE) - user.flash_act(1, 1) - qdel(src) - -/obj/item/fish/lavaloop/proc/on_fish_land(mob/living/target, bonus_value) - if(!istype(target)) - return FALSE - return (target.mob_size >= MOB_SIZE_LARGE) - -/obj/item/fish/lavaloop/plasma_river - maximum_bonus = 30 - -/obj/item/fish/lavaloop/plasma_river/explode_on_user(mob/living/user) - playsound(src, 'sound/effects/explosion1.ogg', 40, TRUE) - user.flash_act(1, 1) - user.apply_status_effect(/datum/status_effect/ice_block_talisman, 5 SECONDS) - qdel(src) - -/obj/item/fish/lavaloop/plasma_river/on_fish_land(mob/living/target, bonus_value) - if(!istype(target)) - return FALSE - if(target.mob_size < MOB_SIZE_LARGE) - return FALSE - var/freeze_timer = (bonus_value * 0.1) - if(freeze_timer <= 0) - return FALSE - target.apply_status_effect(/datum/status_effect/ice_block_talisman, freeze_timer SECONDS) - return FALSE - -/obj/item/fish/zipzap - name = "anxious zipzap" - desc = "A fish overflowing with crippling anxiety and electric potential. Worried about the walls of its tank closing in constantly. Both literally and as a general metaphorical unease about life's direction." - icon_state = "zipzap" - icon_state_dead = "zipzap_dead" - sprite_width = 8 - sprite_height = 8 - stable_population = 3 - average_size = 30 - average_weight = 500 - random_case_rarity = FISH_RARITY_VERY_RARE - favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) - required_temperature_min = MIN_AQUARIUM_TEMP+18 - required_temperature_max = MIN_AQUARIUM_TEMP+26 - fish_traits = list( - /datum/fish_trait/no_mating, - /datum/fish_trait/wary, - /datum/fish_trait/anxiety, - /datum/fish_trait/electrogenesis, - ) - //anxiety naturally limits the amount of zipzaps per tank, so they are stronger alone - electrogenesis_power = 20 MEGA JOULES - beauty = FISH_BEAUTY_GOOD diff --git a/code/modules/fishing/fish/types/air_space.dm b/code/modules/fishing/fish/types/air_space.dm new file mode 100644 index 0000000000000..dda3794ff4e1c --- /dev/null +++ b/code/modules/fishing/fish/types/air_space.dm @@ -0,0 +1,101 @@ +/obj/item/fish/sand_surfer + name = "sand surfer" + desc = "A bronze alien \"fish\" living and swimming underneath faraway sandy places." + icon_state = "sand_surfer" + sprite_height = 6 + sprite_width = 6 + stable_population = 5 + average_size = 65 + average_weight = 1100 + weight_size_deviation = 0.35 + random_case_rarity = FISH_RARITY_RARE + required_fluid_type = AQUARIUM_FLUID_AIR + required_temperature_min = MIN_AQUARIUM_TEMP+25 + required_temperature_max = MIN_AQUARIUM_TEMP+60 + fish_movement_type = /datum/fish_movement/plunger + fishing_difficulty_modifier = 5 + fish_traits = list(/datum/fish_trait/shiny_lover) + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/sand_crab + name = "burrower crab" + desc = "A sand-dwelling crustacean. It looks like a crab and tastes like a crab, but waddles like a fish." + icon_state = "crab" + dedicated_in_aquarium_icon_state = "crab_small" + sprite_height = 6 + sprite_width = 10 + average_size = 60 + average_weight = 1000 + weight_size_deviation = 0.1 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + required_temperature_min = MIN_AQUARIUM_TEMP+20 + required_temperature_max = MIN_AQUARIUM_TEMP+40 + fillet_type = /obj/item/food/meat/slab/rawcrab + fish_traits = list(/datum/fish_trait/amphibious, /datum/fish_trait/shiny_lover, /datum/fish_trait/carnivore) + fish_movement_type = /datum/fish_movement/slow + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD, + ), + ) + +/obj/item/fish/sand_crab/get_fish_taste() + return list("raw crab" = 2) + +/obj/item/fish/sand_crab/get_fish_taste_cooked() + return list("cooked crab" = 2) + +/obj/item/fish/bumpy + name = "bump-fish" + desc = "An misshapen fish-thing all covered in stubby little tendrils" + icon_state = "bumpy" + sprite_height = 4 + sprite_width = 5 + stable_population = 4 + required_fluid_type = AQUARIUM_FLUID_ANY_WATER + required_temperature_min = MIN_AQUARIUM_TEMP+15 + required_temperature_max = MIN_AQUARIUM_TEMP+40 + beauty = FISH_BEAUTY_BAD + fish_traits = list(/datum/fish_trait/amphibious, /datum/fish_trait/vegan) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = VEGETABLES, + ), + ) + +/obj/item/fish/starfish + name = "cosmostarfish" + desc = "A peculiar, gravity-defying, echinoderm-looking critter from hyperspace." + icon_state = "starfish" + icon_state_dead = "starfish_dead" + sprite_height = 3 + sprite_width = 4 + average_size = 30 + average_weight = 300 + stable_population = 3 + required_fluid_type = AQUARIUM_FLUID_AIR + random_case_rarity = FISH_RARITY_NOPE + required_temperature_min = 0 + required_temperature_max = INFINITY + safe_air_limits = null + min_pressure = 0 + max_pressure = INFINITY + grind_results = list(/datum/reagent/bluespace = 10) + fillet_type = null + fish_traits = list(/datum/fish_trait/antigrav, /datum/fish_trait/mixotroph) + beauty = FISH_BEAUTY_GREAT + +/obj/item/fish/starfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + update_appearance(UPDATE_OVERLAYS) + +/obj/item/fish/starfish/update_overlays() + . = ..() + if(status == FISH_ALIVE) + . += emissive_appearance(icon, "starfish_emissive", src) + +///It spins, and dimly glows in the dark. +/obj/item/fish/starfish/flop_animation() + DO_FLOATING_ANIM(src) diff --git a/code/modules/fishing/fish/types/anadromous.dm b/code/modules/fishing/fish/types/anadromous.dm new file mode 100644 index 0000000000000..5afb2cb48ce5a --- /dev/null +++ b/code/modules/fishing/fish/types/anadromous.dm @@ -0,0 +1,68 @@ +/obj/item/fish/sockeye_salmon + name = "sockeye salmon" + desc = "A fairly common and iconic salmon endemic of the Pacific Ocean. At some point imported into outer space, where we're now." + icon_state = "sockeye" + sprite_width = 6 + sprite_height = 4 + stable_population = 6 + required_temperature_min = MIN_AQUARIUM_TEMP+3 + required_temperature_max = MIN_AQUARIUM_TEMP+19 + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + fillet_type = /obj/item/food/fishmeat/salmon + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/sockeye_salmon/get_base_edible_reagents_to_add() + var/return_list = ..() + return_list[/datum/reagent/consumable/nutriment/fat] = 1 + return return_list + +/obj/item/fish/arctic_char + name = "arctic char" + desc = "A cold-water anadromous fish widespread around the Northern Hemisphere of Earth, yet it has somehow found a way here." + icon_state = "arctic_char" + sprite_width = 7 + sprite_height = 4 + stable_population = 6 + average_size = 60 + average_weight = 1200 + weight_size_deviation = 0.5 // known for their size dismophism + required_temperature_min = MIN_AQUARIUM_TEMP+3 + required_temperature_max = MIN_AQUARIUM_TEMP+19 + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + +/obj/item/fish/pike + name = "pike" + desc = "A long-bodied predator with a snout that almost looks like a beak. Definitely not a weapon to swing around." + icon = 'icons/obj/aquarium/wide.dmi' + icon_state = "pike" + inhand_icon_state = "pike" + base_pixel_x = -16 + pixel_x = -16 + stable_population = 4 + sprite_width = 10 + sprite_height = 3 + average_size = 100 + average_weight = 2000 + breeding_timeout = 4 MINUTES + health = 150 + beauty = FISH_BEAUTY_GOOD + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + random_case_rarity = FISH_RARITY_RARE + fish_movement_type = /datum/fish_movement/plunger + fishing_difficulty_modifier = 10 + required_temperature_min = MIN_AQUARIUM_TEMP+12 + required_temperature_max = MIN_AQUARIUM_TEMP+27 + fish_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive) + evolution_types = list(/datum/fish_evolution/armored_pike) + compatible_types = list(/obj/item/fish/pike/armored) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD|MEAT, + ), + /obj/item/fish, + ) + +/obj/item/fish/pike/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_FISH_SHOULD_TWOHANDED, INNATE_TRAIT) diff --git a/code/modules/fishing/fish/types/freshwater.dm b/code/modules/fishing/fish/types/freshwater.dm new file mode 100644 index 0000000000000..fe0ff437c7d8c --- /dev/null +++ b/code/modules/fishing/fish/types/freshwater.dm @@ -0,0 +1,228 @@ +/obj/item/fish/goldfish + name = "goldfish" + desc = "Despite common belief, goldfish do not have three-second memories. \ + They can actually remember things that happened up to three months ago." + icon_state = "goldfish" + dedicated_in_aquarium_icon_state = "fish_greyscale" + aquarium_vc_color = "#D8540D" + sprite_width = 5 + sprite_height = 3 + stable_population = 9 + average_size = 20 + average_weight = 200 + weight_size_deviation = 0.35 + favorite_bait = list(/obj/item/food/bait/worm) + required_temperature_min = MIN_AQUARIUM_TEMP+18 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + evolution_types = list(/datum/fish_evolution/three_eyes, /datum/fish_evolution/chainsawfish) + compatible_types = list(/obj/item/fish/goldfish/gill, /obj/item/fish/goldfish/three_eyes, /obj/item/fish/goldfish/three_eyes/gill) + +/obj/item/fish/goldfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT), INNATE_TRAIT) + +/obj/item/fish/goldfish/gill + name = "McGill" + desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case." + stable_population = 1 + random_case_rarity = FISH_RARITY_NOPE + fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG + beauty = FISH_BEAUTY_GOOD + compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/three_eyes) + fish_traits = list(/datum/fish_trait/recessive) + +/obj/item/fish/goldfish/gill/get_fish_taste() + return list("raw fish" = 2.5, "objection" = 1) + +/obj/item/fish/goldfish/three_eyes + name = "three-eyed goldfish" + desc = "A goldfish with an extra half a pair of eyes. You wonder what it's been feeding on lately..." + icon_state = "three_eyes" + stable_population = 4 + fish_traits = list(/datum/fish_trait/recessive, /datum/fish_trait/shiny_lover) + compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/gill, /obj/item/fish/goldfish/three_eyes/gill) + beauty = FISH_BEAUTY_GOOD + fishing_difficulty_modifier = 10 + random_case_rarity = FISH_RARITY_VERY_RARE + food = /datum/reagent/toxin/mutagen + favorite_bait = list( + list( + "Type" = "Reagent", + "Value" = /datum/reagent/toxin/mutagen, + "Amount" = 3, + ), + ) + +/obj/item/fish/goldfish/three_eyes/get_fish_taste() + return list("raw fish" = 2.5, "chemical waste" = 0.5) + +/obj/item/fish/goldfish/three_eyes/gill + name = "McGill" + desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case. It looks kinda different today..." + compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/three_eyes) + beauty = FISH_BEAUTY_GREAT + fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG + stable_population = 1 + random_case_rarity = FISH_RARITY_NOPE + +/obj/item/fish/goldfish/three_eyes/gill/get_fish_taste() + return list("raw fish" = 2.5, "objection" = 1) + +/obj/item/fish/angelfish + name = "angelfish" + desc = "Young Angelfish often live in groups, while adults prefer solitary life. They become territorial and aggressive toward other fish when they reach adulthood." + icon_state = "angelfish" + sprite_width = 4 + sprite_height = 7 + average_size = 30 + average_weight = 500 + stable_population = 3 + fish_traits = list(/datum/fish_trait/aggressive) + required_temperature_min = MIN_AQUARIUM_TEMP+22 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + +/obj/item/fish/guppy + name = "guppy" + desc = "Guppy is also known as rainbow fish because of the brightly colored body and fins." + icon_state = "guppy" + sprite_width = 5 + sprite_height = 2 + sprite_width = 8 + sprite_height = 5 + average_size = 30 + average_weight = 500 + stable_population = 6 + required_temperature_min = MIN_AQUARIUM_TEMP+20 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + +/obj/item/fish/plasmatetra + name = "plasma tetra" + desc = "Due to their small size, tetras are prey to many predators in their watery world, including eels, crustaceans, and invertebrates." + icon_state = "plastetra" + sprite_width = 4 + sprite_height = 2 + average_size = 30 + average_weight = 500 + stable_population = 3 + required_temperature_min = MIN_AQUARIUM_TEMP+20 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + +/obj/item/fish/catfish + name = "catfish" + desc = "A catfish has about 100,000 taste buds, and their bodies are covered with them to help detect chemicals present in the water and also to respond to touch." + icon_state = "catfish" + sprite_width = 8 + sprite_height = 4 + average_size = 80 + average_weight = 1600 + weight_size_deviation = 0.35 + stable_population = 3 + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = JUNKFOOD + ) + ) + required_temperature_min = MIN_AQUARIUM_TEMP+12 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/zipzap + name = "anxious zipzap" + desc = "A fish overflowing with crippling anxiety and electric potential. Worried about the walls of its tank closing in constantly. Both literally and as a general metaphorical unease about life's direction." + icon_state = "zipzap" + icon_state_dead = "zipzap_dead" + sprite_width = 6 + sprite_height = 3 + stable_population = 3 + average_size = 30 + average_weight = 500 + random_case_rarity = FISH_RARITY_VERY_RARE + favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) + required_temperature_min = MIN_AQUARIUM_TEMP+18 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + fish_traits = list( + /datum/fish_trait/no_mating, + /datum/fish_trait/wary, + /datum/fish_trait/anxiety, + /datum/fish_trait/electrogenesis, + ) + //anxiety naturally limits the amount of zipzaps per tank, so they are stronger alone + electrogenesis_power = 6.7 MEGA JOULES + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/zipzap/get_fish_taste() + return list("raw fish" = 2, "anxiety" = 1) + +/obj/item/fish/tadpole + name = "tadpole" + desc = "The larval spawn of an amphibian. A very minuscle, round creature with a long tail it uses to swim around." + icon_state = "tadpole" + average_size = 3 + average_weight = 10 + sprite_width = 3 + sprite_height = 1 + health = 50 + feeding_frequency = 1.5 MINUTES + required_temperature_min = MIN_AQUARIUM_TEMP+15 + required_temperature_max = MIN_AQUARIUM_TEMP+20 + fillet_type = null + fish_traits = list(/datum/fish_trait/no_mating) //They grow into frogs and that's it. + beauty = FISH_BEAUTY_NULL + random_case_rarity = FISH_RARITY_NOPE //Why would you want generic frog tadpoles you get from ponds inside fish cases? + /// Once dead, tadpoles disappear after a dozen seconds, since you can get infinite tadpoles. + var/del_timerid + +/obj/item/fish/tadpole/Initialize(mapload, apply_qualities = TRUE) + . = ..() + AddComponent(/datum/component/fish_growth, /mob/living/basic/frog, rand(2.5, 3 MINUTES)) + RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks)) + RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth)) + +/obj/item/fish/tadpole/make_edible() + return + +/obj/item/fish/tadpole/set_status(new_status, silent = FALSE) + . = ..() + if(status == FISH_DEAD) + del_timerid = QDEL_IN_STOPPABLE(src, 12 SECONDS) + else + deltimer(del_timerid) + +/obj/item/fish/tadpole/proc/growth_checks(datum/source, seconds_per_tick, growth) + SIGNAL_HANDLER + var/hunger = get_hunger() + if(hunger >= 0.7) //too hungry to grow + return COMPONENT_DONT_GROW + var/obj/structure/aquarium/aquarium = loc + if(istype(aquarium) && !aquarium.reproduction_and_growth) //the aquarium has breeding disabled + return COMPONENT_DONT_GROW + +/obj/item/fish/tadpole/proc/on_growth(datum/source, mob/living/basic/frog/result) + SIGNAL_HANDLER + playsound(result, result.attack_sound, 50, TRUE) // reeeeeeeeeeeeeee... + +/obj/item/fish/tadpole/get_export_price(price, percent) + return 2 //two credits. Tadpoles aren't really that valueable. + +/obj/item/fish/perch + name = "perch" + desc = "An all around popular panfish, game fish and unfortunate prey to other, bigger predators." + icon_state = "perch" + dedicated_in_aquarium_icon_state = "fish_greyscale" + aquarium_vc_color = "#9D8C64" + sprite_width = 5 + sprite_height = 3 + stable_population = 7 + average_size = 25 + average_weight = 400 + required_temperature_min = MIN_AQUARIUM_TEMP+5 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = BUGS, + ), + /obj/item/fish, + /obj/item/fishing_lure, //they love lures in general. + ) diff --git a/code/modules/fishing/fish/types/holographic.dm b/code/modules/fishing/fish/types/holographic.dm new file mode 100644 index 0000000000000..64de7d866d695 --- /dev/null +++ b/code/modules/fishing/fish/types/holographic.dm @@ -0,0 +1,109 @@ + +/obj/item/fish/holo + name = "holographic goldfish" + desc = "A holographic representation of a common goldfish, slowly flickering out, removed from its holo-habitat." + icon_state = /obj/item/fish/goldfish::icon_state + fish_flags = parent_type::fish_flags & ~(FISH_FLAG_SHOW_IN_CATALOG|FISH_FLAG_EXPERIMENT_SCANNABLE) + random_case_rarity = FISH_RARITY_NOPE + dedicated_in_aquarium_icon_state = /obj/item/fish/goldfish::dedicated_in_aquarium_icon_state + aquarium_vc_color = /obj/item/fish/goldfish::aquarium_vc_color + sprite_width = /obj/item/fish/goldfish::sprite_width + sprite_height = /obj/item/fish/goldfish::sprite_height + stable_population = 1 + average_size = /obj/item/fish/goldfish::average_size + average_weight = /obj/item/fish/goldfish::average_weight + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + fillet_type = null + death_text = "%SRC gently disappears." + fish_traits = list(/datum/fish_trait/no_mating) //just to be sure, these shouldn't reproduce + beauty = /obj/item/fish/goldfish::beauty + +/obj/item/fish/holo/Initialize(mapload, apply_qualities = TRUE) + . = ..() + var/area/station/holodeck/holo_area = get_area(src) + if(!istype(holo_area)) + addtimer(CALLBACK(src, PROC_REF(set_status), FISH_DEAD), 1 MINUTES) + return + holo_area.linked.add_to_spawned(src) + +/obj/item/fish/holo/make_edible(weight_val) + return + +/obj/item/fish/holo/set_status(new_status, silent = FALSE) + . = ..() + if(status == FISH_DEAD) + animate(src, alpha = 0, 3 SECONDS, easing = SINE_EASING) + QDEL_IN(src, 3 SECONDS) + +/obj/item/fish/holo/crab + name = "holographic crab" + desc = "A holographic represantion of a soul-crushingly soulless crab, unlike the cuter ones occasionally roaming around. It stares at you, with empty, beady eyes." + icon_state = "crab" + dedicated_in_aquarium_icon_state = null + aquarium_vc_color = null + average_size = 30 + average_weight = 1000 + sprite_height = 6 + sprite_width = 10 + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/holo/puffer + name = "holographic pufferfish" + desc ="A holographic representation of 100% safe-to-eat pufferfish... that is, if holographic fishes were even edible." + icon_state = /obj/item/fish/pufferfish::icon_state + dedicated_in_aquarium_icon_state = /obj/item/fish/pufferfish::dedicated_in_aquarium_icon_state + aquarium_vc_color = /obj/item/fish/pufferfish::aquarium_vc_color + average_size = /obj/item/fish/pufferfish::average_size + average_weight = /obj/item/fish/pufferfish::average_weight + sprite_height = /obj/item/fish/pufferfish::sprite_height + sprite_width = /obj/item/fish/pufferfish::sprite_width + beauty = /obj/item/fish/pufferfish::beauty + +/obj/item/fish/holo/angel + name = "holographic angelfish" + desc = "A holographic representation of a angelfish. I got nothing snarky to say about this one." + icon_state = /obj/item/fish/angelfish::icon_state + dedicated_in_aquarium_icon_state = /obj/item/fish/angelfish::dedicated_in_aquarium_icon_state + aquarium_vc_color = /obj/item/fish/angelfish::aquarium_vc_color + average_size = /obj/item/fish/angelfish::average_size + average_weight = /obj/item/fish/angelfish::average_weight + sprite_height = /obj/item/fish/angelfish::sprite_height + sprite_width = /obj/item/fish/angelfish::sprite_width + beauty = /obj/item/fish/angelfish::beauty + +/obj/item/fish/holo/clown + name = "holographic clownfish" + icon_state = "holo_clownfish" + desc = "A holographic representation of a clownfish, or at least how they used to look like five centuries ago." + dedicated_in_aquarium_icon_state = null + aquarium_vc_color = /obj/item/fish/clownfish::aquarium_vc_color + average_size = /obj/item/fish/clownfish::average_size + average_weight = /obj/item/fish/clownfish::average_weight + sprite_height = /obj/item/fish/clownfish::sprite_height + sprite_width = /obj/item/fish/clownfish::sprite_width + required_fluid_type = /obj/item/fish/clownfish::required_fluid_type + beauty = /obj/item/fish/clownfish::beauty + +/obj/item/fish/holo/checkered + name = "unrendered holographic fish" + desc = "A checkered silhoutte of searing purple and pitch black presents itself before your eyes, like a tear in fabric of reality. It hurts to watch." + icon_state = "checkered" //it's a meta joke, buddy. + dedicated_in_aquarium_icon_state = null + aquarium_vc_color = null + average_size = 30 + average_weight = 500 + sprite_width = 4 + sprite_height = 3 + beauty = FISH_BEAUTY_NULL + +/obj/item/fish/holo/halffish + name = "holographic half-fish" + desc = "A holographic representation of... a fish reduced to all bones, except for its head. Isn't it supposed to be dead? Ehr, holo-dead?" + icon_state = "half_fish" + dedicated_in_aquarium_icon_state = null + aquarium_vc_color = null + sprite_height = 4 + sprite_width = 10 + average_size = 50 + average_weight = 500 + beauty = FISH_BEAUTY_UGLY diff --git a/code/modules/fishing/fish/types/mining.dm b/code/modules/fishing/fish/types/mining.dm new file mode 100644 index 0000000000000..9e44e08ae316c --- /dev/null +++ b/code/modules/fishing/fish/types/mining.dm @@ -0,0 +1,216 @@ +/// Commonly found on the mining fishing spots. Can be grown into lobstrosities +/obj/item/fish/chasm_crab + name = "chasm chrab" + desc = "The young of the lobstrosity mature in pools below the earth, eating what falls in until large enough to clamber out. Those found near the station are well-fed." + icon_state = "chrab" + sprite_height = 9 + sprite_width = 8 + stable_population = 4 + feeding_frequency = 10 MINUTES + random_case_rarity = FISH_RARITY_RARE + fillet_type = /obj/item/food/meat/slab/rawcrab + required_temperature_min = MIN_AQUARIUM_TEMP+9 + required_temperature_max = LAVALAND_MAX_TEMPERATURE+50 + min_pressure = HAZARD_LOW_PRESSURE + safe_air_limits = list( + /datum/gas/oxygen = list(2, 100), + /datum/gas/nitrogen, + /datum/gas/carbon_dioxide = list(0, 20), + /datum/gas/water_vapor, + /datum/gas/plasma = list(0, 5), + /datum/gas/bz = list(0, 5), + /datum/gas/miasma = list(0, 5), + ) + evolution_types = list(/datum/fish_evolution/ice_chrab) + compatible_types = list(/obj/item/fish/chasm_crab/ice) + beauty = FISH_BEAUTY_GOOD + favorite_bait = list(/obj/item/fish/lavaloop) + ///This value represents how much the crab needs aren't being met. Higher values translate to a more likely hostile lobstrosity. + var/anger = 0 + ///The lobstrosity type this matures into + var/lob_type = /mob/living/basic/mining/lobstrosity/juvenile/lava + +/obj/item/fish/chasm_crab/Initialize(mapload, apply_qualities = TRUE) + . = ..() + RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks)) + RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth)) + +/obj/item/fish/chasm_crab/get_fish_taste() + return list("raw crab" = 2) + +/obj/item/fish/chasm_crab/get_fish_taste_cooked() + return list("cooked crab" = 2) + +///A chasm crab growth speed is determined by its initial weight and size, ergo bigger crabs for faster lobstrosities +/obj/item/fish/chasm_crab/update_size_and_weight(new_size = average_size, new_weight = average_weight) + . = ..() + var/multiplier = 1 + switch(size) + if(0 to FISH_SIZE_TINY_MAX) + multiplier -= 0.2 + if(FISH_SIZE_SMALL_MAX to FISH_SIZE_NORMAL_MAX) + multiplier += 0.2 + if(FISH_SIZE_NORMAL_MAX to FISH_SIZE_BULKY_MAX) + multiplier += 0.5 + if(FISH_SIZE_BULKY_MAX to INFINITY) + multiplier += 0.8 + + + if(weight <= (average_weight - 200)) + multiplier -= 0.1 * round((average_weight - weight) / 200) + else if(weight >= (average_weight + 500)) + multiplier += min(0.1 * round((weight - average_weight) / 500), 2) + AddComponent(/datum/component/fish_growth, lob_type, 10 MINUTES * multiplier) + +/obj/item/fish/chasm_crab/pet_fish(mob/living/user) + . = ..() + if(.) + anger -= min(anger, 6.5) + +/obj/item/fish/chasm_crab/proc/growth_checks(datum/source, seconds_per_tick, growth) + SIGNAL_HANDLER + var/hunger = get_hunger() + if(health <= initial(health) * 0.6 || hunger >= 0.6) //if too hurt or hungry, don't grow. + anger += growth * 2 + return COMPONENT_DONT_GROW + + if(hunger >= 0.4) //I'm hungry and angry + anger += growth * 0.6 + + if(!isaquarium(loc)) + return + + var/obj/structure/aquarium/aquarium = loc + if(!aquarium.reproduction_and_growth) //the aquarium has breeding disabled + return COMPONENT_DONT_GROW + if(!locate(/obj/item/aquarium_prop) in aquarium) //the aquarium deco is quite barren + anger += growth * 0.25 + var/fish_count = length(aquarium.get_fishes()) + if(!ISINRANGE(fish_count, 3, AQUARIUM_MAX_BREEDING_POPULATION * 0.5)) //too lonely or overcrowded + anger += growth * 0.3 + if(fish_count > AQUARIUM_MAX_BREEDING_POPULATION * 0.5) //check if there's enough room to maturate. + return COMPONENT_DONT_GROW + +/obj/item/fish/chasm_crab/proc/on_growth(datum/source, mob/living/basic/mining/lobstrosity/juvenile/result) + SIGNAL_HANDLER + if(!prob(anger)) + result.AddElement(/datum/element/ai_retaliate) + qdel(result.ai_controller) + result.ai_controller = new /datum/ai_controller/basic_controller/lobstrosity/juvenile/calm(result) + else if(anger < 30) //not really that mad, just a bit unstable. + qdel(result.ai_controller) + result.ai_controller = new /datum/ai_controller/basic_controller/lobstrosity/juvenile/capricious(result) + +/obj/item/fish/chasm_crab/ice + name = "arctic chrab" + desc = "A subspecies of chasm chrabs that has adapted to the cold climate and lack of abysmal holes of the icemoon." + icon_state = "arctic_chrab" + required_temperature_min = ICEBOX_MIN_TEMPERATURE-20 + required_temperature_max = MIN_AQUARIUM_TEMP+15 + evolution_types = list(/datum/fish_evolution/chasm_chrab) + compatible_types = list(/obj/item/fish/chasm_crab) + beauty = FISH_BEAUTY_GREAT + lob_type = /mob/living/basic/mining/lobstrosity/juvenile + +/obj/item/fish/boned + name = "unmarine bonemass" + desc = "What one could mistake for fish remains, is in reality a species that chose to discard its weak flesh a long time ago. A living fossil, in its most literal sense." + icon_state = "bonemass" + sprite_width = 10 + sprite_height = 7 + fish_movement_type = /datum/fish_movement/zippy + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_fluid_type = AQUARIUM_FLUID_ANY_WATER + min_pressure = HAZARD_LOW_PRESSURE + health = 150 + stable_population = 3 + grind_results = list(/datum/reagent/bone_dust = 10) + fillet_type = /obj/item/stack/sheet/bone + num_fillets = 2 + fish_traits = list(/datum/fish_trait/revival, /datum/fish_trait/carnivore) + average_size = 70 + average_weight = 2000 + death_text = "%SRC stops moving." //It's dead... or is it? + evolution_types = list(/datum/fish_evolution/mastodon) + beauty = FISH_BEAUTY_UGLY + +/obj/item/fish/boned/make_edible(weight_val) + return //it's all bones and no meat. + +/obj/item/fish/lavaloop + name = "lavaloop fish" + desc = "Due to its curvature, it can be used as make-shift boomerang." + icon_state = "lava_loop" + sprite_width = 3 + sprite_height = 5 + average_size = 30 + average_weight = 500 + resistance_flags = FIRE_PROOF | LAVA_PROOF + required_fluid_type = AQUARIUM_FLUID_ANY_WATER //if we can survive hot lava and freezing plasrivers, we can survive anything + fish_movement_type = /datum/fish_movement/zippy + min_pressure = HAZARD_LOW_PRESSURE + required_temperature_min = MIN_AQUARIUM_TEMP+30 + required_temperature_max = MIN_AQUARIUM_TEMP+35 + fish_traits = list( + /datum/fish_trait/carnivore, + /datum/fish_trait/heavy, + ) + hitsound = null + throwforce = 5 + beauty = FISH_BEAUTY_GOOD + ///maximum bonus damage when winded up + var/maximum_bonus = 25 + +/obj/item/fish/lavaloop/Initialize(mapload, apply_qualities = TRUE) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT, TRAIT_BYPASS_RANGED_ARMOR), INNATE_TRAIT) + AddComponent(/datum/component/boomerang, throw_range, TRUE) + AddComponent(\ + /datum/component/throwbonus_on_windup,\ + maximum_bonus = maximum_bonus,\ + windup_increment_speed = 2,\ + throw_text = "starts cooking in your hands, it may explode soon!",\ + pass_maximum_callback = CALLBACK(src, PROC_REF(explode_on_user)),\ + apply_bonus_callback = CALLBACK(src, PROC_REF(on_fish_land)),\ + sound_on_success = 'sound/items/weapons/parry.ogg',\ + effect_on_success = /obj/effect/temp_visual/guardian/phase,\ + ) + +/obj/item/fish/lavaloop/get_fish_taste() + return list("chewy fish" = 2) + +/obj/item/fish/lavaloop/get_food_types() + return SEAFOOD|MEAT|GORE //Well-cooked in lava + +/obj/item/fish/lavaloop/proc/explode_on_user(mob/living/user) + var/obj/item/bodypart/arm/active_arm = user.get_active_hand() + active_arm?.dismember() + to_chat(user, span_warning("[src] explodes!")) + playsound(src, 'sound/effects/explosion/explosion1.ogg', 40, TRUE) + user.flash_act(1, 1) + qdel(src) + +/obj/item/fish/lavaloop/proc/on_fish_land(mob/living/target, bonus_value) + if(!istype(target)) + return FALSE + return (target.mob_size >= MOB_SIZE_LARGE) + +/obj/item/fish/lavaloop/plasma_river + maximum_bonus = 30 + +/obj/item/fish/lavaloop/plasma_river/explode_on_user(mob/living/user) + playsound(src, 'sound/effects/explosion/explosion1.ogg', 40, TRUE) + user.flash_act(1, 1) + user.apply_status_effect(/datum/status_effect/ice_block_talisman, 5 SECONDS) + qdel(src) + +/obj/item/fish/lavaloop/plasma_river/on_fish_land(mob/living/target, bonus_value) + if(!istype(target)) + return FALSE + if(target.mob_size < MOB_SIZE_LARGE) + return FALSE + var/freeze_timer = (bonus_value * 0.1) + if(freeze_timer <= 0) + return FALSE + target.apply_status_effect(/datum/status_effect/ice_block_talisman, freeze_timer SECONDS) + return FALSE diff --git a/code/modules/fishing/fish/types/ruins.dm b/code/modules/fishing/fish/types/ruins.dm new file mode 100644 index 0000000000000..153a5bc3b7b7c --- /dev/null +++ b/code/modules/fishing/fish/types/ruins.dm @@ -0,0 +1,90 @@ +///From oil puddles from the elephant graveyard. Also an evolution of the "unmarine bonemass" +/obj/item/fish/mastodon + name = "unmarine mastodon" + desc = "A monster of exposed muscles and innards, wrapped in a fish-like skeleton. You don't remember ever seeing it on the catalog." + icon = 'icons/obj/aquarium/wide.dmi' + icon_state = "mastodon" + base_pixel_x = -16 + pixel_x = -16 + sprite_width = 12 + sprite_height = 7 + fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG + random_case_rarity = FISH_RARITY_NOPE + fishing_difficulty_modifier = 30 + required_fluid_type = AQUARIUM_FLUID_ANY_WATER + min_pressure = HAZARD_LOW_PRESSURE + health = 300 + stable_population = 1 //This means they can only crossbreed. + grind_results = list(/datum/reagent/bone_dust = 5, /datum/reagent/consumable/liquidgibs = 5) + fillet_type = /obj/item/stack/sheet/bone + num_fillets = 2 + feeding_frequency = 2 MINUTES + breeding_timeout = 5 MINUTES + average_size = 180 + average_weight = 5000 + death_text = "%SRC stops moving." + fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/amphibious, /datum/fish_trait/revival, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive) + beauty = FISH_BEAUTY_BAD + +/obj/item/fish/mastodon/make_edible(weight_val) + return //it's all bones and gibs. + +///From the cursed spring +/obj/item/fish/soul + name = "soulfish" + desc = "A distant yet vaguely close critter, like a long lost relative. You feel your soul rejuvenated just from looking at it... Also, what the fuck is this shit?!" + icon_state = "soulfish" + sprite_width = 7 + sprite_height = 6 + average_size = 60 + average_weight = 1200 + stable_population = 4 + fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG + beauty = FISH_BEAUTY_EXCELLENT + fish_movement_type = /datum/fish_movement/choppy //Glideless legacy movement? in my fishing minigame? + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = JUNKFOOD|FRIED, + ), + ) + fillet_type = /obj/item/food/meat/cutlet/plain/human + required_temperature_min = MIN_AQUARIUM_TEMP+3 + required_temperature_max = MIN_AQUARIUM_TEMP+38 + random_case_rarity = FISH_RARITY_NOPE + +/obj/item/fish/soul/get_food_types() + return MEAT|RAW|GORE //Not-so-quite-seafood + +/obj/item/fish/soul/get_fish_taste() + return list("meat" = 2, "soulfulness" = 1) + +/obj/item/fish/soul/get_fish_taste_cooked() + return list("cooked meat" = 2) + +///From the cursed spring +/obj/item/fish/skin_crab + name = "skin crab" + desc = "\"And on the eighth day, a demential mockery of both humanity and crabity was made.\" Fascinating." + icon_state = "skin_crab" + sprite_width = 7 + sprite_height = 6 + average_size = 40 + average_weight = 750 + stable_population = 5 + fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG + beauty = FISH_BEAUTY_GREAT + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = JUNKFOOD|FRIED + ), + ) + fillet_type = /obj/item/food/meat/slab/rawcrab + random_case_rarity = FISH_RARITY_NOPE + +/obj/item/fish/skin_crab/get_fish_taste() + return list("raw crab" = 2) + +/obj/item/fish/skin_crab/get_fish_taste_cooked() + return list("cooked crab" = 2) diff --git a/code/modules/fishing/fish/types/saltwater.dm b/code/modules/fishing/fish/types/saltwater.dm new file mode 100644 index 0000000000000..74f1d1d32b9e0 --- /dev/null +++ b/code/modules/fishing/fish/types/saltwater.dm @@ -0,0 +1,284 @@ +/obj/item/fish/clownfish + name = "clownfish" + desc = "Clownfish catch prey by swimming onto the reef, attracting larger fish, and luring them back to the anemone. The anemone will sting and eat the larger fish, leaving the remains for the clownfish." + icon_state = "clownfish" + required_fluid_type = AQUARIUM_FLUID_SALTWATER + sprite_width = 7 + sprite_height = 4 + average_size = 30 + average_weight = 500 + stable_population = 4 + fish_traits = list(/datum/fish_trait/picky_eater) + evolution_types = list(/datum/fish_evolution/lubefish) + compatible_types = list(/obj/item/fish/clownfish/lube) + required_temperature_min = MIN_AQUARIUM_TEMP+22 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + +/obj/item/fish/clownfish/get_fish_taste() + return list("raw fish" = 2, "something funny" = 1) + +/obj/item/fish/clownfish/lube + name = "lubefish" + desc = "A clownfish exposed to cherry-flavored lube for far too long. First discovered the days following a cargo incident around the seas of Europa, when thousands of thousands of thousands..." + icon_state = "lubefish" + random_case_rarity = FISH_RARITY_VERY_RARE + fish_traits = list(/datum/fish_trait/picky_eater, /datum/fish_trait/lubed) + evolution_types = null + compatible_types = list(/obj/item/fish/clownfish) + food = /datum/reagent/lube + fishing_difficulty_modifier = 5 + beauty = FISH_BEAUTY_GREAT + +/obj/item/fish/cardinal + name = "cardinalfish" + desc = "Cardinalfish are often found near sea urchins, where the fish hide when threatened." + icon_state = "cardinalfish" + sprite_width = 6 + sprite_height = 3 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + average_size = 30 + average_weight = 500 + stable_population = 4 + fish_traits = list(/datum/fish_trait/vegan) + required_temperature_min = MIN_AQUARIUM_TEMP+22 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + +/obj/item/fish/greenchromis + name = "green chromis" + desc = "The Chromis can vary in color from blue to green depending on the lighting and distance from the lights." + icon_state = "greenchromis" + sprite_width = 5 + sprite_height = 3 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + average_size = 30 + average_weight = 500 + stable_population = 5 + required_temperature_min = MIN_AQUARIUM_TEMP+23 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + + fishing_difficulty_modifier = 5 // Bit harder + +/obj/item/fish/firefish + name = "firefish goby" + desc = "To communicate in the wild, the firefish uses its dorsal fin to alert others of potential danger." + icon_state = "firefish" + sprite_width = 5 + sprite_height = 3 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + average_size = 30 + average_weight = 500 + stable_population = 3 + disliked_bait = list(/obj/item/food/bait/worm, /obj/item/food/bait/doughball) + fish_movement_type = /datum/fish_movement/zippy + required_temperature_min = MIN_AQUARIUM_TEMP+23 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + +/obj/item/fish/pufferfish + name = "pufferfish" + desc = "They say that one pufferfish contains enough toxins to kill 30 people, although in the last few decades they've been genetically engineered en masse to be less poisonous." + icon_state = "pufferfish" + required_fluid_type = AQUARIUM_FLUID_SALTWATER + sprite_width = 8 + sprite_height = 6 + average_size = 60 + average_weight = 1000 + stable_population = 3 + required_temperature_min = MIN_AQUARIUM_TEMP+23 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + fillet_type = /obj/item/food/fishmeat/quality //Too bad they're poisonous + fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/toxic) + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/lanternfish + name = "lanternfish" + desc = "Typically found in areas below 6600 feet below the surface of the ocean, they live in complete darkness." + icon_state = "lanternfish" + required_fluid_type = AQUARIUM_FLUID_SALTWATER + random_case_rarity = FISH_RARITY_VERY_RARE + sprite_width = 6 + sprite_height = 5 + average_size = 50 + average_weight = 1000 + stable_population = 3 + fish_traits = list(/datum/fish_trait/nocturnal) + required_temperature_min = MIN_AQUARIUM_TEMP+2 //My source is that the water at a depth 6600 feet is pretty darn cold. + required_temperature_max = MIN_AQUARIUM_TEMP+18 + beauty = FISH_BEAUTY_NULL + +/obj/item/fish/stingray + name = "stingray" + desc = "A type of ray, most known for its venomous stinger. Despite that, They're normally docile, if not a bit easily frightened." + icon_state = "stingray" + stable_population = 4 + sprite_height = 7 + sprite_width = 8 + average_size = 60 + average_weight = 700 + beauty = FISH_BEAUTY_GREAT + random_case_rarity = FISH_RARITY_RARE + required_fluid_type = AQUARIUM_FLUID_SALTWATER //Someone ought to add river rays later I guess. + fish_traits = list(/datum/fish_trait/stinger, /datum/fish_trait/toxic_barbs, /datum/fish_trait/wary, /datum/fish_trait/carnivore, /datum/fish_trait/predator) + +/obj/item/fish/swordfish + name = "swordfish" + desc = "A large billfish, most famous for its elongated bill, while also fairly popular for cooking, and as a fearsome weapon in the hands of a veteran spess-fisherman." + icon = 'icons/obj/aquarium/wide.dmi' + icon_state = "swordfish" + inhand_icon_state = "swordfish" + force = 18 + sharpness = SHARP_EDGED + attack_verb_continuous = list("slashes", "cuts", "pierces") + attack_verb_simple = list("slash", "cut", "pierce") + block_sound = 'sound/items/weapons/parry.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' + demolition_mod = 0.75 + attack_speed = 1 SECONDS + block_chance = 50 + wound_bonus = 10 + bare_wound_bonus = 20 + armour_penetration = 75 + base_pixel_x = -18 + pixel_x = -18 + sprite_width = 13 + sprite_height = 6 + stable_population = 3 + average_size = 140 + average_weight = 4000 + breeding_timeout = 4.5 MINUTES + feeding_frequency = 4 MINUTES + health = 180 + beauty = FISH_BEAUTY_EXCELLENT + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_fluid_type = AQUARIUM_FLUID_SALTWATER + fish_movement_type = /datum/fish_movement/plunger + fishing_difficulty_modifier = 25 + fillet_type = /obj/item/food/fishmeat/quality + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD, + ), + /obj/item/fish, + ) + fish_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/stinger) + +/obj/item/fish/swordfish/get_force_rank() + switch(w_class) + if(WEIGHT_CLASS_TINY) + force -= 11 + attack_speed -= 0.4 SECONDS + block_chance -= 45 + armour_penetration -= 20 + wound_bonus -= 15 + bare_wound_bonus -= 20 + if(WEIGHT_CLASS_SMALL) + force -= 8 + attack_speed -= 0.3 SECONDS + block_chance -= 30 + armour_penetration -= 15 + wound_bonus -= 10 + bare_wound_bonus -= 20 + if(WEIGHT_CLASS_NORMAL) + force -= 5 + attack_speed -= 0.2 SECONDS + block_chance -= 20 + armour_penetration -= 10 + wound_bonus -= 10 + bare_wound_bonus -= 15 + if(WEIGHT_CLASS_BULKY) + force -= 3 + attack_speed -= 0.1 SECONDS + block_chance -= 10 + armour_penetration -= 5 + wound_bonus -= 5 + bare_wound_bonus -= 10 + if(WEIGHT_CLASS_GIGANTIC) + force += 5 + attack_speed += 0.2 SECONDS + demolition_mod += 0.15 + block_chance += 10 + armour_penetration += 5 + wound_bonus += 5 + bare_wound_bonus += 10 + + if(status == FISH_DEAD) + force -= 4 + w_class + block_chance -= 25 + armour_penetration -= 30 + wound_bonus -= 10 + bare_wound_bonus -= 10 + +/obj/item/fish/swordfish/calculate_fish_force_bonus(bonus_malus) + . = ..() + armour_penetration += bonus_malus * 5 + wound_bonus += bonus_malus * 3 + bare_wound_bonus += bonus_malus * 5 + block_chance += bonus_malus * 7 + +/obj/item/fish/squid + name = "squid" + desc = "An elongated mollusk with eight tentacles, natural camouflage and ink clouds to spray at predators. One of the most intelligent, well-equipped invertebrates out there." + icon_state = "squid" + sprite_width = 4 + sprite_height = 5 + stable_population = 6 + weight_size_deviation = 0.5 // They vary greatly in size. + average_weight = 500 //They're quite lighter than they're long. + required_fluid_type = AQUARIUM_FLUID_SALTWATER + beauty = FISH_BEAUTY_GOOD + required_temperature_min = MIN_AQUARIUM_TEMP+5 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/ink, /datum/fish_trait/camouflage, /datum/fish_trait/wary) + +/obj/item/fish/squid/get_fish_taste() + return list("raw mollusk" = 2) + +/obj/item/fish/squid/get_fish_taste_cooked() + return list("cooked mollusk" = 2, "tenderness" = 0.5) + +/obj/item/fish/monkfish + name = "monkfish" + desc = "A member of the Lophiid family of anglerfish. It goes by several different names, however none of them will make it look any prettier, nor be any less delicious." + icon_state = "monkfish" + required_fluid_type = AQUARIUM_FLUID_SALTWATER + sprite_height = 7 + sprite_width = 7 + beauty = FISH_BEAUTY_UGLY + required_temperature_min = MIN_AQUARIUM_TEMP+2 + required_temperature_max = MIN_AQUARIUM_TEMP+23 + average_size = 60 + average_weight = 1400 + stable_population = 4 + fish_traits = list(/datum/fish_trait/heavy) + fillet_type = /obj/item/food/fishmeat/quality + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD|BUGS, + ), + ) + +/obj/item/fish/monkfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + name = pick("monkfish", "fishing-frog", "frog-fish", "sea-devil", "goosefish") + +/obj/item/fish/plaice + name = "plaice" + desc = "Perhaps the most prominent flatfish in the space-market. Nature really pulled out the rolling pin on this one." + icon_state = "plaice" + sprite_height = 7 + sprite_width = 6 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + required_temperature_min = MIN_AQUARIUM_TEMP+2 + required_temperature_max = MIN_AQUARIUM_TEMP+18 + average_size = 40 + average_weight = 700 + stable_population = 5 + fish_traits = list(/datum/fish_trait/heavy) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD|BUGS, + ), + ) + diff --git a/code/modules/fishing/fish/types/station.dm b/code/modules/fishing/fish/types/station.dm new file mode 100644 index 0000000000000..e811996d5af04 --- /dev/null +++ b/code/modules/fishing/fish/types/station.dm @@ -0,0 +1,228 @@ +/obj/item/fish/ratfish + name = "ratfish" + desc = "A rat exposed to the murky waters of maintenance too long. Any higher power, if it revealed itself, would state that the ratfish's continued existence is extremely unwelcome." + icon_state = "ratfish" + sprite_width = 7 + sprite_height = 5 + random_case_rarity = FISH_RARITY_RARE + required_fluid_type = AQUARIUM_FLUID_FRESHWATER + stable_population = /datum/config_entry/number/mice_roundstart::default //set by New, but this is the default config value + fillet_type = /obj/item/food/meat/slab/human/mutant/zombie //eww... + fish_traits = list(/datum/fish_trait/necrophage) + required_temperature_min = MIN_AQUARIUM_TEMP+15 + required_temperature_max = MIN_AQUARIUM_TEMP+35 + fish_movement_type = /datum/fish_movement/zippy + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = DAIRY + ) + ) + beauty = FISH_BEAUTY_DISGUSTING + +/obj/item/fish/ratfish/get_fish_taste() + return list("vermin" = 2, "maintenance" = 1) + +/obj/item/fish/ratfish/get_fish_taste_cooked() + return list("cooked vermin" = 2, "burned fur" = 0.5) + +/obj/item/fish/ratfish/get_food_types() + return MEAT|RAW|GORE //Not-so-quite-seafood + +/obj/item/fish/ratfish/get_base_edible_reagents_to_add() + var/list/return_list = ..() + return_list[/datum/reagent/rat_spit] = 1 + return return_list + +/obj/item/fish/ratfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + //stable pop reflects the config for how many mice migrate. powerful... + stable_population = CONFIG_GET(number/mice_roundstart) + +/obj/item/fish/sludgefish + name = "sludgefish" + desc = "A misshapen, fragile, loosely fish-like living goop, the only thing that'd ever thrive in the acidic and claustrophobic cavities of the station's organic waste disposal system." + icon_state = "sludgefish" + sprite_width = 7 + sprite_height = 6 + required_fluid_type = AQUARIUM_FLUID_SULPHWATEVER + stable_population = 8 + average_size = 20 + average_weight = 400 + health = 50 + breeding_timeout = 2.5 MINUTES + fish_traits = list(/datum/fish_trait/parthenogenesis, /datum/fish_trait/no_mating) + required_temperature_min = MIN_AQUARIUM_TEMP+10 + required_temperature_max = MIN_AQUARIUM_TEMP+40 + evolution_types = list(/datum/fish_evolution/purple_sludgefish) + beauty = FISH_BEAUTY_NULL + +/obj/item/fish/sludgefish/get_fish_taste() + return list("raw fish" = 2, "eau de toilet" = 1) + +/obj/item/fish/sludgefish/purple + name = "purple sludgefish" + desc = "A misshapen, fragile, loosely fish-like living goop. This one has developed sexual reproduction mechanisms, and a purple tint to boot." + icon_state = "sludgefish_purple" + random_case_rarity = FISH_RARITY_NOPE + fish_traits = list(/datum/fish_trait/parthenogenesis) + +/obj/item/fish/slimefish + name = "acquatic slime" + desc = "Kids, this is what happens when a slime overcomes its hydrophobic nature. It goes glug glug." + icon_state = "slimefish" + icon_state_dead = "slimefish_dead" + sprite_width = 7 + sprite_height = 7 + fish_flags = parent_type::fish_flags & ~FISH_DO_FLOP_ANIM //it already has a cute bouncy wiggle. :3 + random_case_rarity = FISH_RARITY_VERY_RARE + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + stable_population = 4 + health = 150 + fillet_type = /obj/item/slime_extract/grey + fish_traits = list(/datum/fish_trait/toxin_immunity, /datum/fish_trait/crossbreeder) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = TOXIC, + ), + list( + FISH_BAIT_TYPE = FISH_BAIT_REAGENT, + FISH_BAIT_VALUE = /datum/reagent/toxin, + FISH_BAIT_AMOUNT = 5, + ), + ) + required_temperature_min = MIN_AQUARIUM_TEMP+20 + beauty = FISH_BEAUTY_GREAT + +/obj/item/fish/slimefish/get_food_types() + return SEAFOOD|TOXIC + +/obj/item/fish/slimefish/get_base_edible_reagents_to_add() + return list(/datum/reagent/toxin/slimejelly = 5) + +/obj/item/fish/fryish + name = "fryish" + desc = "A youngling of the Fritterish family of delicious extremophile, piscine lifeforms. Just don't tell 'Mankind for Ethical Animal Treatment' you ate it." + icon_state = "fryish" + sprite_width = 3 + sprite_height = 3 + average_size = 20 + average_weight = 400 + random_case_rarity = FISH_RARITY_VERY_RARE + required_fluid_type = AQUARIUM_FLUID_ANY_WATER + stable_population = 8 + fillet_type = /obj/item/food/nugget/fish + fish_traits = list(/datum/fish_trait/picky_eater, /datum/fish_trait/no_mating) + compatible_types = list(/obj/item/fish/fryish/fritterish, /obj/item/fish/fryish/nessie) + spawn_types = list(/obj/item/fish/fryish) + required_temperature_min = MIN_AQUARIUM_TEMP+50 + required_temperature_max = MIN_AQUARIUM_TEMP+220 + fish_movement_type = /datum/fish_movement/zippy + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = FRIED, + ) + ) + disliked_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = GROSS|RAW, + ) + ) + beauty = FISH_BEAUTY_GOOD + fishing_difficulty_modifier = -5 + ///Is this a baitfish? + var/is_bait = TRUE + ///The evolution datum of the next thing we grow into, given time (and food) + var/next_type = /datum/fish_evolution/fritterish + ///How long does it take for us to grow up? + var/growth_time = 3.5 MINUTES + +/obj/item/fish/fryish/Initialize(mapload) + . = ..() + if(is_bait) + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GREAT_QUALITY_BAIT), INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_FISH_SURVIVE_COOKING, INNATE_TRAIT) + +/obj/item/fish/fryish/update_size_and_weight(new_size = average_size, new_weight = average_weight) + . = ..() + if(!next_type) + return + var/multiplier = (size / average_size) * (weight / average_weight) + + AddComponent(/datum/component/fish_growth, next_type, growth_time * multiplier, use_drop_loc = FALSE) + +/obj/item/fish/fryish/get_fish_taste() + return list("fried fish" = 1) + +/obj/item/fish/fryish/get_fish_taste_cooked() + return list("extra-fried fish" = 1) + +/obj/item/fish/fryish/get_food_types() + return FRIED|MEAT|SEAFOOD + +/obj/item/fish/fryish/get_base_edible_reagents_to_add() + var/list/return_list = list( + /datum/reagent/consumable/nutriment/protein = 2, + /datum/reagent/consumable/nutriment/fat = 1.5, + ) + return return_list + +/obj/item/fish/fryish/fritterish + name = "fritterish" + desc = "A deliciously extremophile alien fish. This one looks like a taiyaki." + icon_state = "fritterish" + average_size = 50 + average_weight = 1000 + sprite_width = 5 + sprite_height = 3 + stable_population = 5 + fish_traits = list(/datum/fish_trait/picky_eater) + compatible_types = list(/obj/item/fish/fryish, /obj/item/fish/fryish/nessie) + fish_movement_type = /datum/fish_movement + is_bait = FALSE + next_type = /datum/fish_evolution/nessie + growth_time = 8 MINUTES + +/obj/item/fish/fryish/fritterish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + base_icon_state = icon_state = pick("fritterish", "bernardfish", "matthewfish") + switch(icon_state) + if("bernardfish") + name = "bernard-fish" + desc = "A deliciously extremophile alien fish shaped like a dinosaur. Children love it." + sprite_width = 4 + sprite_height = 6 + if("matthewfish") + desc = "A deliciously extremophile alien fish shaped like a pterodactyl. Children love it." + name = "matthew-fish" + sprite_width = 6 + +/obj/item/fish/fryish/nessie + name = "nessie-fish" + desc = "A deliciously extremophile alien fish. This one is so big, you could write legends about it." + icon = 'icons/obj/aquarium/wide.dmi' + icon_state = "nessiefish" + base_pixel_x = -16 + pixel_x = -16 + sprite_width = 12 + sprite_height = 4 + average_size = 150 + average_weight = 6000 + health = 125 + feeding_frequency = 5 MINUTES + breeding_timeout = 5 MINUTES + random_case_rarity = FISH_RARITY_NOPE + stable_population = 3 + num_fillets = 2 + fish_traits = list(/datum/fish_trait/picky_eater, /datum/fish_trait/predator) + compatible_types = list(/obj/item/fish/fryish, /obj/item/fish/fryish/fritterish) + spawn_types = list(/obj/item/fish/fryish/fritterish) + fish_movement_type = /datum/fish_movement + beauty = FISH_BEAUTY_EXCELLENT + fishing_difficulty_modifier = 45 + fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG + is_bait = FALSE + next_type = null diff --git a/code/modules/fishing/fish/types/syndicate.dm b/code/modules/fishing/fish/types/syndicate.dm new file mode 100644 index 0000000000000..8732bb8f0bd3b --- /dev/null +++ b/code/modules/fishing/fish/types/syndicate.dm @@ -0,0 +1,270 @@ +///Contains fish that can be found in the syndicate fishing portal setting as well as the ominous fish case. +/obj/item/fish/emulsijack + name = "toxic emulsijack" + desc = "Ah, the terrifying emulsijack. Created in a laboratory, the only real use of this slimey, scaleless fish is for completely ruining a tank." + icon_state = "emulsijack" + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_fluid_type = AQUARIUM_FLUID_ANADROMOUS + stable_population = 3 + sprite_width = 7 + sprite_height = 3 + fish_traits = list(/datum/fish_trait/emulsijack) + required_temperature_min = MIN_AQUARIUM_TEMP+5 + required_temperature_max = MIN_AQUARIUM_TEMP+40 + beauty = FISH_BEAUTY_BAD + +/obj/item/fish/emulsijack/get_fish_taste() + return list("raw fish" = 2, "acid" = 1) //no scales + +/obj/item/fish/donkfish + name = "donk co. company patent donkfish" + desc = "A lab-grown donkfish. Its invention was an accident for the most part, as it was intended to be consumed in donk pockets. Unfortunately, it tastes horrible, so it has now become a pseudo-mascot." + icon_state = "donkfish" + random_case_rarity = FISH_RARITY_VERY_RARE + stable_population = 4 + sprite_width = 5 + sprite_height = 4 + fillet_type = /obj/item/food/fishmeat/donkfish + fish_traits = list(/datum/fish_trait/yucky) + required_temperature_min = MIN_AQUARIUM_TEMP+15 + required_temperature_max = MIN_AQUARIUM_TEMP+28 + beauty = FISH_BEAUTY_EXCELLENT + +/obj/item/fish/jumpercable + name = "monocloning jumpercable" + desc = "A surprisingly useful if nasty looking creation from the syndicate fish labs. Drop one in a tank, and \ + watch it self-feed and multiply. Generates more and more power as a growing swarm!" + icon_state = "jumpercable" + sprite_width = 16 + sprite_height = 5 + stable_population = 12 + average_size = 110 + average_weight = 6000 + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_temperature_min = MIN_AQUARIUM_TEMP+10 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead) + fish_traits = list( + /datum/fish_trait/parthenogenesis, + /datum/fish_trait/mixotroph, + /datum/fish_trait/electrogenesis, + ) + electrogenesis_power = 0.9 MEGA JOULES + beauty = FISH_BEAUTY_UGLY + +/obj/item/fish/chainsawfish + name = "chainsawfish" + desc = "A very, very angry bioweapon, whose sole purpose is to rip and tear." + icon = 'icons/obj/aquarium/wide.dmi' + icon_state = "chainsawfish" + inhand_icon_state = "chainsawfish" + icon_state_dead = "chainsawfish_dead" + force = 22 + demolition_mod = 1.5 + block_chance = 15 + attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices") + attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice") + hitsound = 'sound/items/weapons/chainsawhit.ogg' + sharpness = SHARP_EDGED + tool_behaviour = TOOL_SAW + toolspeed = 0.5 + base_pixel_x = -16 + pixel_x = -16 + sprite_width = 8 + sprite_height = 5 + stable_population = 3 + average_size = 85 + average_weight = 2500 + breeding_timeout = 4.25 MINUTES + feeding_frequency = 3 MINUTES + health = 180 + beauty = FISH_BEAUTY_GREAT + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + required_fluid_type = AQUARIUM_FLUID_FRESHWATER + fish_movement_type = /datum/fish_movement/accelerando + fishing_difficulty_modifier = 30 + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = GORE, + ), + ) + fish_traits = list(/datum/fish_trait/aggressive, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/stinger) + required_temperature_min = MIN_AQUARIUM_TEMP+18 + required_temperature_max = MIN_AQUARIUM_TEMP+26 + +/obj/item/fish/chainsawfish/Initialize(mapload) + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + +/obj/item/fish/chainsawfish/get_fish_taste() + return list("raw fish" = 2.5, "anger" = 1) + +/obj/item/fish/chainsawfish/update_icon_state() + if(status == FISH_DEAD) + inhand_icon_state = "chainsawfish_dead" + else + inhand_icon_state = "chainsawfish" + if(HAS_TRAIT(src, TRAIT_WIELDED)) + inhand_icon_state = "[inhand_icon_state]_wielded" + return ..() + +/obj/item/fish/chainsawfish/get_force_rank() + switch(w_class) + if(WEIGHT_CLASS_TINY) + force -= 10 + attack_speed -= 0.2 SECONDS + demolition_mod -= 0.4 + block_chance -= 15 + armour_penetration -= 10 + wound_bonus -= 10 + bare_wound_bonus -= 10 + toolspeed += 0.6 + if(WEIGHT_CLASS_SMALL) + force -= 8 + attack_speed -= 0.1 SECONDS + demolition_mod -= 0.3 + block_chance -= 10 + armour_penetration -= 10 + wound_bonus -= 10 + bare_wound_bonus -= 10 + toolspeed += 0.4 + if(WEIGHT_CLASS_NORMAL) + force -= 5 + demolition_mod -= 0.15 + block_chance -= 5 + armour_penetration -= 5 + wound_bonus -= 5 + bare_wound_bonus -= 5 + toolspeed += 0.2 + if(WEIGHT_CLASS_HUGE) + force += 2 + attack_speed += 0.2 SECONDS + demolition_mod += 0.15 + armour_penetration += 10 + block_chance += 10 + wound_bonus += 10 + bare_wound_bonus += 5 + if(WEIGHT_CLASS_GIGANTIC) + force += 4 + attack_speed += 0.4 SECONDS + demolition_mod += 0.3 + block_chance += 20 + armour_penetration += 20 + wound_bonus += 15 + bare_wound_bonus += 10 + toolspeed -= 0.1 + + if(status == FISH_DEAD) + force -= 8 + w_class + hitsound = SFX_SWING_HIT + block_chance -= 25 + demolition_mod -= 0.3 + armour_penetration -= 15 + wound_bonus -= 5 + bare_wound_bonus -= 5 + toolspeed += 1 + +/obj/item/fish/chainsawfish/calculate_fish_force_bonus(bonus_malus) + . = ..() + armour_penetration += bonus_malus * 3 + wound_bonus += bonus_malus * 2 + bare_wound_bonus += bonus_malus * 3 + block_chance += bonus_malus * 2 + toolspeed -= bonus_malus * 0.1 + +/obj/item/fish/pike/armored + name = "armored pike" + desc = "A long-bodied, metal-clad predator with a snout that almost looks like an halberd. Definitely a weapon to swing around." + icon_state = "armored_pike" + inhand_icon_state = "armored_pike" + attack_verb_continuous = list("attacks", "pokes", "jabs", "tears", "lacerates", "gores") + attack_verb_simple = list("attack", "poke", "jab", "tear", "lacerate", "gore") + hitsound = 'sound/items/weapons/bladeslice.ogg' + block_sound = 'sound/items/weapons/parry.ogg' + force = 20 + sharpness = SHARP_EDGED + wound_bonus = -15 + attack_speed = 1 SECONDS + block_chance = 25 + bare_wound_bonus = 15 + demolition_mod = 0.8 + armour_penetration = 10 + stable_population = 3 + average_weight = 3000 + breeding_timeout = 5 MINUTES + feeding_frequency = 4 MINUTES + health = 180 + random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS + beauty = FISH_BEAUTY_GREAT + fishing_difficulty_modifier = 20 + fish_traits = list(/datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive, /datum/fish_trait/picky_eater, /datum/fish_trait/stinger) + evolution_types = null + compatible_types = list(/obj/item/fish/pike) + favorite_bait = list( + list( + FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE, + FISH_BAIT_VALUE = SEAFOOD, + ), + /obj/item/fish, + ) + +/obj/item/fish/pike/armored/get_fish_taste() + return list("raw fish" = 2.5, "metal" = 1) + +/obj/item/fish/pike/armored/get_fish_taste() + return list("cooked fish" = 2.5, "metal" = 1) + +/obj/item/fish/pike/armored/get_force_rank() + switch(w_class) + if(WEIGHT_CLASS_TINY) + force -= 11 + attack_speed -= 0.4 SECONDS + block_chance -= 25 + armour_penetration -= 15 + wound_bonus -= 15 + bare_wound_bonus -= 30 + if(WEIGHT_CLASS_SMALL) + force -= 6 + attack_speed -= 0.3 SECONDS + block_chance -= 20 + armour_penetration -= 10 + wound_bonus -= 10 + bare_wound_bonus -= 25 + if(WEIGHT_CLASS_NORMAL) + force -= 4 + attack_speed -= 0.2 SECONDS + block_chance -= 20 + armour_penetration -= 5 + wound_bonus -= 10 + bare_wound_bonus -= 15 + if(WEIGHT_CLASS_HUGE) + force += 3 + attack_speed += 0.2 SECONDS + block_chance += 10 + demolition_mod += 0.1 + armour_penetration += 5 + wound_bonus += 10 + bare_wound_bonus += 5 + if(WEIGHT_CLASS_GIGANTIC) + force += 7 + attack_speed += 0.3 SECONDS + demolition_mod += 0.2 + block_chance += 20 + armour_penetration += 10 + wound_bonus += 15 + bare_wound_bonus += 10 + + if(status == FISH_DEAD) + force -= 5 + w_class + block_chance -= 15 + armour_penetration -= 10 + wound_bonus -= 5 + bare_wound_bonus -= 15 + +/obj/item/fish/pike/armored/calculate_fish_force_bonus(bonus_malus) + . = ..() + armour_penetration += bonus_malus * 3 + wound_bonus += bonus_malus * 2 + bare_wound_bonus += bonus_malus * 4 + block_chance += bonus_malus * 4 diff --git a/code/modules/fishing/fish/types/tiziran.dm b/code/modules/fishing/fish/types/tiziran.dm new file mode 100644 index 0000000000000..b6fd43709f2d6 --- /dev/null +++ b/code/modules/fishing/fish/types/tiziran.dm @@ -0,0 +1,86 @@ +//Tiziran Fish. + +/obj/item/fish/dwarf_moonfish + name = "dwarf moonfish" + desc = "Ordinarily in the wild, the Zagoskian moonfish is around the size of a tuna, however through selective breeding a smaller breed suitable for being kept as an aquarium pet has been created." + icon_state = "dwarf_moonfish" + sprite_height = 6 + sprite_width = 6 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + stable_population = 2 + fillet_type = /obj/item/food/fishmeat/moonfish + average_size = 60 + average_weight = 1000 + required_temperature_min = MIN_AQUARIUM_TEMP+20 + required_temperature_max = MIN_AQUARIUM_TEMP+30 + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/gunner_jellyfish + name = "gunner jellyfish" + desc = "So called due to their resemblance to an artillery shell, the gunner jellyfish is native to Tizira, where it is enjoyed as a delicacy. Produces a mild hallucinogen that is destroyed by cooking." + icon_state = "gunner_jellyfish" + sprite_height = 4 + sprite_width = 5 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + stable_population = 4 + fillet_type = /obj/item/food/fishmeat/gunner_jellyfish + fish_traits = list(/datum/fish_trait/hallucinogenic) + required_temperature_min = MIN_AQUARIUM_TEMP+24 + required_temperature_max = MIN_AQUARIUM_TEMP+32 + beauty = FISH_BEAUTY_GOOD + +/obj/item/fish/gunner_jellyfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + AddElement(/datum/element/quality_food_ingredient, FOOD_COMPLEXITY_2) + +/obj/item/fish/gunner_jellyfish/get_fish_taste() + return list("cold jelly" = 2) + +/obj/item/fish/gunner_jellyfish/get_fish_taste_cooked() + return list("crunchy tenderness" = 2) + +/obj/item/fish/needlefish + name = "needlefish" + desc = "A tiny, transparent fish which resides in large schools in the oceans of Tizira. A common food for other, larger fish." + icon_state = "needlefish" + sprite_height = 3 + sprite_width = 7 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + stable_population = 12 + breeding_timeout = 1 MINUTES + fillet_type = null + average_size = 20 + average_weight = 300 + fish_traits = list(/datum/fish_trait/carnivore) + required_temperature_min = MIN_AQUARIUM_TEMP+10 + required_temperature_max = MIN_AQUARIUM_TEMP+32 + +/obj/item/fish/needlefish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT), INNATE_TRAIT) + +/obj/item/fish/armorfish + name = "armorfish" + desc = "A small shellfish native to Tizira's oceans, known for its exceptionally hard shell. Consumed similarly to prawns." + icon_state = "armorfish" + sprite_height = 5 + sprite_width = 6 + average_size = 25 + average_weight = 350 + required_fluid_type = AQUARIUM_FLUID_SALTWATER + stable_population = 10 + breeding_timeout = 1.25 MINUTES + fillet_type = /obj/item/food/fishmeat/armorfish + fish_movement_type = /datum/fish_movement/slow + required_temperature_min = MIN_AQUARIUM_TEMP+10 + required_temperature_max = MIN_AQUARIUM_TEMP+32 + +/obj/item/fish/armorfish/Initialize(mapload, apply_qualities = TRUE) + . = ..() + add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT), INNATE_TRAIT) + +/obj/item/fish/chasm_crab/get_fish_taste() + return list("raw prawn" = 2) + +/obj/item/fish/chasm_crab/get_fish_taste_cooked() + return list("cooked prawn" = 2) diff --git a/code/modules/fishing/fish_catalog.dm b/code/modules/fishing/fish_catalog.dm index 49a84413ded06..4f329861ff93c 100644 --- a/code/modules/fishing/fish_catalog.dm +++ b/code/modules/fishing/fish_catalog.dm @@ -3,8 +3,13 @@ name = "Fish Encyclopedia" desc = "Indexes all fish known to mankind (and related species)." icon_state = "fishbook" + custom_price = PAYCHECK_CREW * 2 starting_content = "Lot of fish stuff" //book wrappers could use cleaning so this is not necessary +/obj/item/book/manual/fish_catalog/Initialize(mapload) + . = ..() + AddComponent(/datum/component/adjust_fishing_difficulty, -4, ITEM_SLOT_HANDS) + /obj/item/book/manual/fish_catalog/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) @@ -16,11 +21,10 @@ var/static/fish_info if(!fish_info) fish_info = list() - for(var/_fish_type as anything in subtypesof(/obj/item/fish)) - var/obj/item/fish/fish = _fish_type - var/list/fish_data = list() - if(!initial(fish.show_in_catalog)) + for(var/obj/item/fish/fish as anything in subtypesof(/obj/item/fish)) + if(!(initial(fish.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG)) continue + var/list/fish_data = list() fish_data["name"] = initial(fish.name) fish_data["desc"] = initial(fish.desc) fish_data["fluid"] = initial(fish.required_fluid_type) @@ -37,27 +41,9 @@ else fish_data["feed"] = "[AQUARIUM_COMPANY] Fish Feed" fish_data["fishing_tips"] = build_fishing_tips(fish) - var/beauty_score = initial(fish.beauty) - switch(beauty_score) - if(-INFINITY to FISH_BEAUTY_DISGUSTING) - beauty_score = "OH HELL NAW!" - if(FISH_BEAUTY_DISGUSTING to FISH_BEAUTY_UGLY) - beauty_score = "☆☆☆☆☆" - if(FISH_BEAUTY_UGLY to FISH_BEAUTY_BAD) - beauty_score = "★☆☆☆☆" - if(FISH_BEAUTY_BAD to FISH_BEAUTY_NULL) - beauty_score = "★★☆☆☆" - if(FISH_BEAUTY_NULL to FISH_BEAUTY_GENERIC) - beauty_score = "★★★☆☆" - if(FISH_BEAUTY_GENERIC to FISH_BEAUTY_GOOD) - beauty_score = "★★★★☆" - if(FISH_BEAUTY_GOOD to FISH_BEAUTY_GREAT) - beauty_score = "★★★★★" - if(FISH_BEAUTY_GREAT to INFINITY) - beauty_score = "★★★★★★" - fish_data["beauty"] = beauty_score + fish_data["beauty"] = SSfishing.fish_properties[fish][FISH_PROPERTIES_BEAUTY_SCORE] + fish_info += list(fish_data) - // TODO: Custom entries for unusual stuff .["fish_info"] = fish_info .["sponsored_by"] = AQUARIUM_COMPANY @@ -68,12 +54,12 @@ return initial(bait_item.name) if(islist(bait)) var/list/special_identifier = bait - switch(special_identifier["Type"]) - if("Foodtype") - return jointext(bitfield_to_list(special_identifier["Value"], FOOD_FLAGS_IC),",") - if("Reagent") - var/datum/reagent/prototype = special_identifier["Value"] - return "[initial(prototype.name)] (at least [special_identifier["Amount"]]u)" + switch(special_identifier[FISH_BAIT_TYPE]) + if(FISH_BAIT_FOODTYPE) + return jointext(bitfield_to_list(special_identifier[FISH_BAIT_VALUE], FOOD_FLAGS_IC),",") + if(FISH_BAIT_REAGENT) + var/datum/reagent/prototype = special_identifier[FISH_BAIT_VALUE] + return "[initial(prototype.name)] (at least [special_identifier[FISH_BAIT_AMOUNT]]u)" else stack_trace("Unknown bait identifier in fish favourite/disliked list") return "SOMETHING VERY WEIRD" @@ -90,9 +76,9 @@ if(source.catalog_description && (fish_type in source.fish_table)) spot_descriptions += source.catalog_description .["spots"] = english_list(spot_descriptions, nothing_text = "Unknown") - var/list/fish_list_properties = collect_fish_properties() - var/list/fav_bait = fish_list_properties[fishy][NAMEOF(fishy, favorite_bait)] - var/list/disliked_bait = fish_list_properties[fishy][NAMEOF(fishy, disliked_bait)] + var/list/fish_list_properties = SSfishing.fish_properties + var/list/fav_bait = fish_list_properties[fishy][FISH_PROPERTIES_FAV_BAIT] + var/list/disliked_bait = fish_list_properties[fishy][FISH_PROPERTIES_BAD_BAIT] var/list/bait_list = list() // Favourite/Disliked bait for(var/bait_type_or_trait in fav_bait) @@ -104,7 +90,7 @@ .["disliked_bait"] = english_list(bait_list, nothing_text = "None") // Fish traits description var/list/trait_descriptions = list() - var/list/fish_traits = fish_list_properties[fishy][NAMEOF(fishy, fish_traits)] + var/list/fish_traits = fish_list_properties[fishy][FISH_PROPERTIES_TRAITS] var/fish_difficulty = initial(fishy.fishing_difficulty_modifier) for(var/fish_trait in fish_traits) var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] diff --git a/code/modules/fishing/fish_movement.dm b/code/modules/fishing/fish_movement.dm new file mode 100644 index 0000000000000..b288161b19237 --- /dev/null +++ b/code/modules/fishing/fish_movement.dm @@ -0,0 +1,224 @@ +/// Any lower than this, and the target position of the fish is considered null +#define FISH_TARGET_MIN_DISTANCE 6 +/// The friction applied to fish jumps, so that it decelerates over time +#define FISH_FRICTION_MULT 0.9 +/// Used to decide whether the fish can jump in a certain direction +#define FISH_SHORT_JUMP_MIN_DISTANCE 100 +/// The maximum distance for a short jump +#define FISH_SHORT_JUMP_MAX_DISTANCE 200 + +///Fish movements are simple datums, generated by the fishing minigame, that represent how the fish moves suring the minigame. +/datum/fish_movement + /// The minigame that spawned us + var/datum/fishing_challenge/master + /// How many times move_fish() has been called + var/times_fired = 0 + /// How likely the fish is to perform a standard jump, then multiplied by difficulty + var/short_jump_chance = 2.25 + /// How likely the fish is to perform a long jump, then multiplied by difficulty + var/long_jump_chance = 0.0625 + /// The speed limit for the short jump + var/short_jump_velocity_limit = 400 + /// The speed limit for the long jump + var/long_jump_velocity_limit = 200 + /// The current speed limit used + var/current_velocity_limit + /// The base velocity of the fish, which may affect jump distances and falling speed. + var/fish_idle_velocity = 0 + /// A position on the slider the fish wants to get to + var/target_position + /// If true, the fish can jump while a target position is set, thus overriding it + var/can_interrupt_move = TRUE + /// The current speed the fish is moving at + var/fish_velocity = 0 + +/datum/fish_movement/New(datum/fishing_challenge/master) + src.master = master + +/** + * Proc that adjusts movement values to the difficulty of the minigame. + * The operations can be a tad complex, but basically it ensures that jump + * chances with a probability higher than 1% increase in a smooth curve so that + * they still reach 100% prob when the difficulty peakes. + */ +/datum/fish_movement/proc/adjust_to_difficulty() + var/square_angle_rad = TORADIANS(90) + var/zero_one_difficulty = master.difficulty/100 + if(short_jump_chance > 1) + short_jump_chance = (zero_one_difficulty**(square_angle_rad-TORADIANS(arctan(short_jump_chance * 1/square_angle_rad))))*100 + else + short_jump_chance *= master.difficulty + if(long_jump_chance > 1) + long_jump_chance = (zero_one_difficulty**(square_angle_rad-TORADIANS(arctan(long_jump_chance * 1/square_angle_rad))))*100 + else + long_jump_chance *= master.difficulty + +/datum/fish_movement/proc/reset_difficulty_values() + short_jump_chance = initial(short_jump_chance) + long_jump_chance = initial(long_jump_chance) + +///The main proc, called by minigame every SSfishing tick while it's in the 'active' phase. +/datum/fish_movement/proc/move_fish(seconds_per_tick) + times_fired++ + /** + * The jump chances are meant to run every odd tick (each every decisecond) + * We cannot do it every tick because the fish would be jumpier than intended + * and we cannot cut the chances in half to fit on each tick, because the maximum probability + * would go from 100% to 75%. + */ + var/can_roll = times_fired % 2 + + var/long_chance = long_jump_chance * seconds_per_tick * (1/seconds_per_tick) + var/short_chance = short_jump_chance * seconds_per_tick * (1/seconds_per_tick) + + // If we have the target but we're close enough, mark as target reached + if(abs(target_position - master.fish_position) < FISH_TARGET_MIN_DISTANCE) + target_position = null + + // Switching to new long jump target can interrupt any other + if(can_roll && (can_interrupt_move || isnull(target_position)) && prob(long_chance)) + /** + * Move at least 0.75 to full of the availible bar in given direction, + * and more likely to move in the direction where there's more space + */ + var/distance_from_top = FISHING_MINIGAME_AREA - master.fish_position - master.fish_height + var/distance_from_bottom = master.fish_position + var/top_chance + if(distance_from_top < FISH_SHORT_JUMP_MIN_DISTANCE) + top_chance = 0 + else + top_chance = (distance_from_top/max(distance_from_bottom, 1)) * 100 + var/new_target = master.fish_position + if(prob(top_chance)) + new_target += distance_from_top * rand(75, 100)/100 + else + new_target -= distance_from_bottom * rand(75, 100)/100 + target_position = round(new_target) + current_velocity_limit = long_jump_velocity_limit + + // Move towards target + if(!isnull(target_position)) + var/distance = target_position - master.fish_position + // about 5 at diff 15 , 10 at diff 30, 30 at diff 100 + var/acceleration_mult = get_acceleration(seconds_per_tick) + var/target_acceleration = distance * acceleration_mult * seconds_per_tick + + fish_velocity = fish_velocity * FISH_FRICTION_MULT + target_acceleration + else if(can_roll && prob(short_chance)) + var/distance_from_top = FISHING_MINIGAME_AREA - master.fish_position - master.fish_height + var/distance_from_bottom = master.fish_position + var/jump_length + if(distance_from_top >= FISH_SHORT_JUMP_MIN_DISTANCE) + jump_length = rand(FISH_SHORT_JUMP_MIN_DISTANCE, FISH_SHORT_JUMP_MAX_DISTANCE) + if(distance_from_bottom >= FISH_SHORT_JUMP_MIN_DISTANCE && (!jump_length || prob(50))) + jump_length = -rand(FISH_SHORT_JUMP_MIN_DISTANCE, FISH_SHORT_JUMP_MAX_DISTANCE) + target_position = clamp(master.fish_position + jump_length, 0, FISHING_MINIGAME_AREA - master.fish_height) + current_velocity_limit = short_jump_velocity_limit + + fish_velocity = clamp(fish_velocity + fish_idle_velocity, -current_velocity_limit, current_velocity_limit) + set_fish_position(seconds_per_tick) + +///Proc that returns the acceleration of the fish during the minigame. +/datum/fish_movement/proc/get_acceleration(seconds_per_tick) + return 0.3 * master.difficulty + 0.5 + +///Called at the end of move_fish(), for updating the position of the fish in the fishing minigame. +/datum/fish_movement/proc/set_fish_position(seconds_per_tick) + master.fish_position = clamp(master.fish_position + fish_velocity * seconds_per_tick, 0, FISHING_MINIGAME_AREA - master.fish_height) + +///Generic fish movement datum that only performs slow, uninterrupted long jumps +/datum/fish_movement/slow + short_jump_chance = 0 + long_jump_chance = 1.5 + long_jump_velocity_limit = 150 + can_interrupt_move = FALSE + +///Generic fish movement datum with triple the short jump chance. +/datum/fish_movement/zippy + short_jump_chance = parent_type::short_jump_chance * 3 + +///fish movement datum that progressively gets faster until acceleration and velocity are double the starting ones. +/datum/fish_movement/accelerando + ///The jump velocity to add each tick + var/short_jump_vel_add + ///The long jump velocity to add each tick + var/long_jump_vel_add + ///Time to reach full speed, in seconds. + var/accel_time_cap = 30 + +/datum/fish_movement/accelerando/move_fish(seconds_per_tick) + var/seconds_elapsed = (times_fired * seconds_per_tick) + if(seconds_elapsed >= accel_time_cap) + return ..() + if(!times_fired) //First tick, cache the initial jump velocities + short_jump_vel_add = short_jump_velocity_limit/accel_time_cap + long_jump_vel_add = long_jump_velocity_limit/accel_time_cap + return ..() + + if(current_velocity_limit) + var/vel_add = current_velocity_limit == short_jump_velocity_limit ? short_jump_vel_add : long_jump_vel_add + current_velocity_limit += round(vel_add * seconds_per_tick, 0.01) + + short_jump_velocity_limit += round(short_jump_vel_add * seconds_per_tick, 0.01) + long_jump_velocity_limit += round(long_jump_vel_add * seconds_per_tick, 0.01) + return ..() + +/datum/fish_movement/accelerando/get_acceleration(seconds_per_tick) + var/acceleration = ..() + return acceleration + min(acceleration, acceleration * times_fired * seconds_per_tick / accel_time_cap) + +/datum/fish_movement/accelerando/set_fish_position(seconds_per_tick) + fish_velocity = round(fish_velocity) + return ..() + +///Fish movement datum that updates the fish position twice per second. +/datum/fish_movement/choppy + ///We keep of the theorical fish position to eventually use + var/faux_position = 0 + +/datum/fish_movement/choppy/set_fish_position(seconds_per_tick) + faux_position = clamp(faux_position + fish_velocity * seconds_per_tick, 0, FISHING_MINIGAME_AREA - master.fish_height) + if(!((times_fired * SSfishing.wait) % (0.5 SECONDS))) + master.fish_position = faux_position + +///Fish movement datum that weakly pushes the fish up and then down with greater force once it reaches the top of the minigame. +/datum/fish_movement/plunger + ///Is the fish plunging to the bottom of the minigame area, or should it swim up? + var/is_plunging = TRUE + ///The added idle velocity when plunging + var/plunging_speed = -22 + +/datum/fish_movement/plunger/adjust_to_difficulty() + . = ..() + //Adjust the fleeing velocity, up to five times the initial value. + plunging_speed += round(plunging_speed * master.difficulty * 0.03) + fish_idle_velocity += plunging_speed //so it can be safely subtracted if the fish starts at the bottom. + +/datum/fish_movement/plunger/reset_difficulty_values() + . = ..() + if(is_plunging) + fish_idle_velocity -= plunging_speed + plunging_speed = initial(plunging_speed) + +/datum/fish_movement/plunger/move_fish(seconds_per_tick) + var/fish_area = FISHING_MINIGAME_AREA - master.fish_height + if(is_plunging) + if(target_position > master.fish_position) //nothing should stop us from plunging. + target_position = null + var/dist_bot_percent = master.fish_position/fish_area + if(dist_bot_percent <= 0.04) + fish_idle_velocity -= plunging_speed + is_plunging = FALSE + else + var/dist_top_percent = (fish_area - master.fish_position)/fish_area + if(dist_top_percent <= 0.04) + fish_idle_velocity += plunging_speed + is_plunging = TRUE + + return ..() + + +#undef FISH_TARGET_MIN_DISTANCE +#undef FISH_FRICTION_MULT +#undef FISH_SHORT_JUMP_MIN_DISTANCE +#undef FISH_SHORT_JUMP_MAX_DISTANCE diff --git a/code/modules/fishing/fishing_equipment.dm b/code/modules/fishing/fishing_equipment.dm index 5408e411876b9..ccad3b4708017 100644 --- a/code/modules/fishing/fishing_equipment.dm +++ b/code/modules/fishing/fishing_equipment.dm @@ -16,6 +16,8 @@ var/list/fishing_line_traits /// Color of the fishing line var/line_color = COLOR_GRAY + ///The description given to the autowiki + var/wiki_desc = "A generic fishing line. Without one, the casting range of the rod will be significantly hampered." /obj/item/fishing_line/reinforced name = "reinforced fishing line reel" @@ -23,6 +25,7 @@ icon_state = "reel_green" fishing_line_traits = FISHING_LINE_REINFORCED line_color = "#2b9c2b" + wiki_desc = "Allows you to fish in lava and plasma rivers and lakes." /obj/item/fishing_line/cloaked name = "cloaked fishing line reel" @@ -30,6 +33,7 @@ icon_state = "reel_white" fishing_line_traits = FISHING_LINE_CLOAKED line_color = "#82cfdd" + wiki_desc = "Fishing anxious and wary fish will be easier with this equipped." /obj/item/fishing_line/bouncy name = "flexible fishing line reel" @@ -37,6 +41,7 @@ icon_state = "reel_red" fishing_line_traits = FISHING_LINE_BOUNCY line_color = "#99313f" + wiki_desc = "It reduces the progression loss during the fishing minigame." /obj/item/fishing_line/sinew name = "fishing sinew" @@ -44,6 +49,7 @@ icon_state = "reel_sinew" fishing_line_traits = FISHING_LINE_REINFORCED|FISHING_LINE_STIFF line_color = "#d1cca3" + wiki_desc = "Crafted from sinew. It allows you to fish in lava and plasma like the reinforced line, but it'll make the minigame harder." /** * A special line reel that let you skip the biting phase of the minigame, netting you a completion bonus, @@ -52,10 +58,13 @@ */ /obj/item/fishing_line/auto_reel name = "fishing line auto-reel" - desc = "A fishing line that automatically starts reeling in fish the moment they bite. Also good for hurling things at yourself." + desc = "A fishing line that automatically spins lures and begins reeling in fish the moment it bites. Also good for hurling things towards you." icon_state = "reel_auto" fishing_line_traits = FISHING_LINE_AUTOREEL line_color = "#F88414" + wiki_desc = "Automatically starts the minigame once the fish bites the bait. It also spin fishing lures for you without needing an input. \ + It can also be used to snag in objects from a distance more rapidly.
        \ + It requires the Advanced Fishing Technology Node to be researched to be printed." /obj/item/fishing_line/auto_reel/Initialize(mapload) . = ..() @@ -90,7 +99,7 @@ if(!movable_target.safe_throw_at(destination, source.cast_range, 2, callback = throw_callback, gentle = please_be_gentle)) UnregisterSignal(movable_target, COMSIG_ATOM_PREHITBY) else - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE) /obj/item/fishing_line/auto_reel/proc/catch_it_chucklenut(obj/item/source, atom/hit_atom, datum/thrownthing/throwingdatum) SIGNAL_HANDLER @@ -118,7 +127,8 @@ var/rod_overlay_icon_state = "hook_overlay" /// What subtype of `/obj/item/chasm_detritus` do we fish out of chasms? Defaults to `/obj/item/chasm_detritus`. var/chasm_detritus_type = /datum/chasm_detritus - + ///The description given to the autowiki + var/wiki_desc = "A generic fishing hook. You won't be able to fish without one." /** * Simple getter proc for hooks to implement special hook bonuses for @@ -162,7 +172,22 @@ icon_state = "treasure" rod_overlay_icon_state = "hook_treasure_overlay" chasm_detritus_type = /datum/chasm_detritus/restricted/objects + wiki_desc = "It vastly improves the chances of catching things other than fish." + +/obj/item/fishing_hook/magnet/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_FISHING_EQUIPMENT_SLOTTED, PROC_REF(hook_equipped)) + +///We make sure that the fishng rod doesn't need a bait to reliably catch non-fish loot. +/obj/item/fishing_hook/magnet/proc/hook_equipped(datum/source, obj/item/fishing_rod/rod) + SIGNAL_HANDLER + ADD_TRAIT(rod, TRAIT_ROD_REMOVE_FISHING_DUD, type) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_removed)) +/obj/item/fishing_hook/magnet/proc/on_removed(atom/movable/source, atom/old_loc, dir, forced) + SIGNAL_HANDLER + REMOVE_TRAIT(old_loc, TRAIT_ROD_REMOVE_FISHING_DUD, type) + UnregisterSignal(src, COMSIG_MOVABLE_MOVED) /obj/item/fishing_hook/magnet/get_hook_bonus_multiplicative(fish_type, datum/fish_source/source) if(fish_type == FISHING_DUD || ispath(fish_type, /obj/item/fish)) @@ -171,19 +196,19 @@ // We multiply the odds by five for everything that's not a fish nor a dud return MAGNET_HOOK_BONUS_MULTIPLIER - /obj/item/fishing_hook/shiny name = "shiny lure hook" icon_state = "gold_shiny" fishing_hook_traits = FISHING_HOOK_SHINY rod_overlay_icon_state = "hook_shiny_overlay" + wiki_desc = "It's used to attract shiny-loving fish and make them easier to catch." /obj/item/fishing_hook/weighted name = "weighted hook" icon_state = "weighted" fishing_hook_traits = FISHING_HOOK_WEIGHTED rod_overlay_icon_state = "hook_weighted_overlay" - + wiki_desc = "It reduces the bounce that happens when you hit the boundaries of the minigame bar." /obj/item/fishing_hook/rescue name = "rescue hook" @@ -191,6 +216,8 @@ icon_state = "rescue" rod_overlay_icon_state = "hook_rescue_overlay" chasm_detritus_type = /datum/chasm_detritus/restricted/bodies + wiki_desc = "A hook used to rescue bodies whom have fallen into chasms. \ + You won't catch fish with it, nor it can't be used for fishing outside of chasms, though it can still be used to reel in people and items from unreachable locations.." /obj/item/fishing_hook/rescue/can_be_hooked(atom/target) return ..() || isliving(target) @@ -220,6 +247,7 @@ name = "bone hook" desc = "A simple hook carved from sharpened bone" icon_state = "hook_bone" + wiki_desc = "A generic fishing hook carved out of sharpened bone. Bone fishing rods come pre-equipped with it." /obj/item/fishing_hook/stabilized name = "gyro-stabilized hook" @@ -227,6 +255,8 @@ icon_state = "gyro" fishing_hook_traits = FISHING_HOOK_BIDIRECTIONAL rod_overlay_icon_state = "hook_gyro_overlay" + wiki_desc = "It allows you to move both up (left-click) and down (right-click) during the minigame while negating gravity.
        \ + It requires the Advanced Fishing Technology Node to be researched to be printed." /obj/item/fishing_hook/stabilized/examine(mob/user) . = ..() @@ -239,6 +269,9 @@ w_class = WEIGHT_CLASS_NORMAL fishing_hook_traits = FISHING_HOOK_NO_ESCAPE|FISHING_HOOK_NO_ESCAPE|FISHING_HOOK_KILL rod_overlay_icon_state = "hook_jaws_overlay" + wiki_desc = "A beartrap-looking hook that makes losing the fishing minigame impossible (Unless you drop the rod or get stunned). However it'll hurt the fish and eventually kill it. \ + Funnily enough, you can snag in people with it too. It won't hurt them like a actual beartrap, but it'll still slow them down.
        \ + It has to be bought from the black market uplink." /obj/item/fishing_hook/jaws/can_be_hooked(atom/target) return ..() || isliving(target) @@ -254,6 +287,9 @@ icon_state = "fishing" inhand_icon_state = "artistic_toolbox" material_flags = NONE + custom_price = PAYCHECK_CREW * 3 + ///How much holding this affects fishing difficulty + var/fishing_modifier = -2 /obj/item/storage/toolbox/fishing/Initialize(mapload) . = ..() @@ -262,6 +298,7 @@ /obj/item/fishing_rod, )) atom_storage.exception_hold = exception_cache + AddComponent(/datum/component/adjust_fishing_difficulty, -2, ITEM_SLOT_HANDS) /obj/item/storage/toolbox/fishing/PopulateContents() new /obj/item/bait_can/worm(src) @@ -292,6 +329,7 @@ desc = "Contains EVERYTHING (almost) you need for your fishing trip." icon_state = "gold" inhand_icon_state = "toolbox_gold" + fishing_modifier = -7 /obj/item/storage/toolbox/fishing/master/PopulateContents() new /obj/item/fishing_rod/telescopic/master(src) @@ -306,6 +344,7 @@ /obj/item/storage/box/fishing_hooks name = "fishing hook set" illustration = "fish" + custom_price = PAYCHECK_CREW * 2 /obj/item/storage/box/fishing_hooks/PopulateContents() new /obj/item/fishing_hook/magnet(src) @@ -322,6 +361,7 @@ /obj/item/storage/box/fishing_lines name = "fishing line set" illustration = "fish" + custom_price = PAYCHECK_CREW * 2 /obj/item/storage/box/fishing_lines/PopulateContents() new /obj/item/fishing_line/bouncy(src) @@ -347,7 +387,7 @@ name = "fishing tip" desc = "A slip of paper containing a pearl of wisdom about fishing within it, though you wish it were an actual pearl." -/obj/item/paper/paperslip/fortune/Initialize(mapload) +/obj/item/paper/paperslip/fishing_tip/Initialize(mapload) default_raw_text = pick(GLOB.fishing_tips) return ..() @@ -364,5 +404,43 @@ new /obj/item/storage/fish_case(src) new /obj/item/storage/fish_case(src) +/obj/item/storage/box/fishing_lures + name = "fishing lures set" + desc = "A small tackle box containing all the fishing lures you will ever need to curb randomness." + icon_state = "plasticbox" + foldable_result = null + illustration = "fish" + custom_price = PAYCHECK_CREW * 9 + +/obj/item/storage/box/fishing_lures/PopulateContents() + new /obj/item/paper/lures_instructions(src) + var/list/typesof = typesof(/obj/item/fishing_lure) + for(var/type in typesof) + new type (src) + atom_storage.set_holdable(/obj/item/fishing_lure) //can only hold lures + //adds an extra slot, so we can put back the lures even if we didn't take out the instructions. + atom_storage.max_slots = length(typesof) + 1 + atom_storage.max_total_storage = WEIGHT_CLASS_SMALL * (atom_storage.max_slots + 1) + +/obj/item/paper/lures_instructions + name = "instructions paper" + icon_state = "slipfull" + show_written_words = FALSE + desc = "A piece of grey paper with a how-to for dummies about fishing lures printed on it. Smells cheap." + default_raw_text = "Thank you for buying this set.
        \ + This a simple non-exhaustive set of instructions on how to use fishing lures, some information may \ + be slightly incorrect or oversimplified.

        \ + + First and foremost, fishing lures are inedible, artificial baits sturdy enough to not end up being \ + consumed by the hungry fish. However, they need to be spun at intervals to replicate \ + the motion of a prey or organic bait and tempt the fish, since a piece of plastic and metal ins't \ + all that appetitizing by itself. Different lures can be used to catch different fish.

        \ + + To help you, each lure comes with a small light diode that's attached to the float of your fishing rod. \ + A float is basically the thing bobbing up'n'down above the fishing spot. \ + The light will flash green and a sound cue will be played when the lure is ready to be spun. \ + Do not spin while the light is still red.

        \ + That's all, best of luck to your angling journey." + #undef MAGNET_HOOK_BONUS_MULTIPLIER #undef RESCUE_HOOK_FISH_MULTIPLIER diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm index 9c70d474a62d7..30ce2b33ad0cc 100644 --- a/code/modules/fishing/fishing_minigame.dm +++ b/code/modules/fishing/fishing_minigame.dm @@ -1,20 +1,10 @@ -// Lure bobbing +// float bobbing #define WAIT_PHASE 1 // Click now to start tgui part #define BITING_PHASE 2 // UI minigame phase #define MINIGAME_PHASE 3 -/// The height of the minigame slider. Not in pixels, but minigame units. -#define FISHING_MINIGAME_AREA 1000 -/// Any lower than this, and the target position of the fish is considered null -#define FISH_TARGET_MIN_DISTANCE 6 -/// The friction applied to fish jumps, so that it decelerates over time -#define FISH_FRICTION_MULT 0.9 -/// Used to decide whether the fish can jump in a certain direction -#define FISH_SHORT_JUMP_MIN_DISTANCE 100 -/// The maximum distance for a short jump -#define FISH_SHORT_JUMP_MAX_DISTANCE 200 // Acceleration mod when bait is over fish #define FISH_ON_BAIT_ACCELERATION_MULT 0.6 /// The minimum velocity required for the bait to bounce @@ -42,13 +32,13 @@ ///The standard pixel height of the fish (minus a pixel on each direction for the sake of a better looking sprite) #define MINIGAME_FISH_HEIGHT 4 +GLOBAL_LIST_EMPTY(fishing_challenges_by_user) + /datum/fishing_challenge /// When the ui minigame phase started var/start_time /// Is it finished (either by win/lose or window closing) var/completed = FALSE - /// Fish AI type to use - var/fish_ai = FISH_AI_DUMB /// Rule modifiers (eg weighted bait) var/special_effects = NONE /// A list of possible active minigame effects. If not empty, one will be picked from time to time. @@ -65,16 +55,20 @@ var/phase = WAIT_PHASE // Timer for the next phase var/next_phase_timer + // The last time we clicked during the baiting phase + var/last_baiting_click /// Fishing mob var/mob/user /// Rod that is used for the challenge var/obj/item/fishing_rod/used_rod - /// Lure visual - var/obj/effect/fishing_lure/lure + /// float visual + var/obj/effect/fishing_float/float + ///The physical fishing spot our float is hovering + var/atom/location /// Background icon state from fishing_hud.dmi var/background = "background_default" /// Fish icon state from fishing_hud.dmi - var/fish_icon = "fish" + var/fish_icon = FISH_ICON_DEF /// Fishing line visual var/datum/beam/fishing_line @@ -93,8 +87,6 @@ var/fish_position = 0 /// The position of the bait on the minigame slider var/bait_position = 0 - /// The current speed the fish is moving at - var/fish_velocity = 0 /// The current speed the bait is moving at var/bait_velocity = 0 @@ -105,22 +97,7 @@ /// How much completion is gained per second when the bait area is intersecting with the fish's var/completion_gain = 5 - /// How likely the fish is to perform a standard jump, then multiplied by difficulty - var/short_jump_chance = 2.25 - /// How likely the fish is to perform a long jump, then multiplied by difficulty - var/long_jump_chance = 0.0625 - /// The speed limit for the short jump - var/short_jump_velocity_limit = 400 - /// The speed limit for the long jump - var/long_jump_velocity_limit = 200 - /// The current speed limit used - var/current_velocity_limit = 200 - /// The base velocity of the fish, which may affect jump distances and falling speed. - var/fish_idle_velocity = 0 - /// A position on the slider the fish wants to get to - var/target_position - /// If true, the fish can jump while a target position is set, thus overriding it - var/can_interrupt_move = TRUE + var/datum/fish_movement/mover /// Whether the bait is idle or reeling up or down (left and right click) var/reeling_state = REELING_STATE_IDLE @@ -134,34 +111,22 @@ ///The background as shown in the minigame, and the holder of the other visual overlays var/atom/movable/screen/fishing_hud/fishing_hud -/datum/fishing_challenge/New(datum/component/fishing_spot/comp, reward_path, obj/item/fishing_rod/rod, mob/user) +/datum/fishing_challenge/New(datum/component/fishing_spot/comp, obj/item/fishing_rod/rod, mob/user) src.user = user - src.reward_path = reward_path - src.used_rod = rod - var/atom/spot = comp.parent - lure = new(get_turf(spot), spot) - RegisterSignal(spot, COMSIG_QDELETING, PROC_REF(on_spot_gone)) + used_rod = rod + location = comp.parent + float = new(get_turf(location), location) + float.spin_frequency = rod.spin_frequency + RegisterSignal(location, COMSIG_QDELETING, PROC_REF(on_spot_gone)) + RegisterSignal(comp, COMSIG_QDELETING, PROC_REF(on_spot_gone)) RegisterSignal(comp.fish_source, COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE, PROC_REF(interrupt_challenge)) - comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_COMPLETED, TYPE_PROC_REF(/datum/fish_source, on_challenge_completed)) + comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, TYPE_PROC_REF(/datum/fish_source, roll_reward_minigame)) + comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, TYPE_PROC_REF(/datum/fish_source, calculate_difficulty_minigame)) + comp.fish_source.RegisterSignal(user, COMSIG_MOB_COMPLETE_FISHING, TYPE_PROC_REF(/datum/fish_source, on_challenge_completed)) background = comp.fish_source.background - /// Fish minigame properties - if(ispath(reward_path,/obj/item/fish)) - var/obj/item/fish/fish = reward_path - fish_ai = initial(fish.fish_ai_type) - switch(fish_ai) - if(FISH_AI_ZIPPY) // Keeps on jumping - short_jump_chance *= 3 - if(FISH_AI_SLOW) // Only does long jump, and doesn't change direction until it gets there - short_jump_chance = 0 - long_jump_chance = 1.5 - long_jump_velocity_limit = 150 - long_jump_velocity_limit = FALSE - // Apply fish trait modifiers - var/list/fish_list_properties = collect_fish_properties() - var/list/fish_traits = fish_list_properties[fish][NAMEOF(fish, fish_traits)] - for(var/fish_trait in fish_traits) - var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] - trait.minigame_mod(rod, user, src) + SEND_SIGNAL(user, COMSIG_MOB_BEGIN_FISHING, src) + GLOB.fishing_challenges_by_user[user] = src + /// Enable special parameters if(rod.line) completion_gain += 1 // Any fishing line will provide a small boost by default @@ -186,55 +151,24 @@ completion_loss += user.mind?.get_skill_modifier(/datum/skill/fishing, SKILL_VALUE_MODIFIER)/5 - if(special_effects & FISHING_MINIGAME_RULE_KILL && ispath(reward_path,/obj/item/fish)) - RegisterSignal(comp.fish_source, COMSIG_FISH_SOURCE_REWARD_DISPENSED, PROC_REF(hurt_fish)) - - difficulty += comp.fish_source.calculate_difficulty(reward_path, rod, user, src) - difficulty = clamp(round(difficulty), FISHING_EASY_DIFFICULTY - 5, 100) - - if(difficulty > FISHING_EASY_DIFFICULTY) - completion -= MAX_FISH_COMPLETION_MALUS * (difficulty * 0.01) - - if(HAS_MIND_TRAIT(user, TRAIT_REVEAL_FISH)) - fish_icon = GLOB.specific_fish_icons[reward_path] || "fish" - - /** - * If the chances are higher than 1% (100% at maximum difficulty), they'll scale - * less than proportionally (exponent less than 1) instead. - * This way we ensure fish with high jump chances won't get TOO jumpy until - * they near the maximum difficulty, at which they hit 100% - */ - var/square_angle_rad = TORADIANS(90) - var/zero_one_difficulty = difficulty/100 - if(short_jump_chance > 1) - short_jump_chance = (zero_one_difficulty**(square_angle_rad-TORADIANS(arctan(short_jump_chance * 1/square_angle_rad))))*100 - else - short_jump_chance *= difficulty - if(long_jump_chance > 1) - long_jump_chance = (zero_one_difficulty**(square_angle_rad-TORADIANS(arctan(long_jump_chance * 1/square_angle_rad))))*100 - else - long_jump_chance *= difficulty - - bait_height -= round(difficulty * BAIT_HEIGHT_DIFFICULTY_MALUS) - bait_pixel_height = round(MINIGAME_BAIT_HEIGHT * (bait_height/initial(bait_height)), 1) - /datum/fishing_challenge/Destroy(force) + GLOB.fishing_challenges_by_user -= user if(!completed) complete(win = FALSE) if(fishing_line) //Stops the line snapped message from appearing everytime the minigame is over. UnregisterSignal(fishing_line, COMSIG_QDELETING) QDEL_NULL(fishing_line) - if(lure) - QDEL_NULL(lure) + QDEL_NULL(float) SStgui.close_uis(src) user = null used_rod = null + location = null + QDEL_NULL(mover) return ..() /datum/fishing_challenge/proc/send_alert(message) - var/turf/lure_turf = get_turf(lure) - lure_turf?.balloon_alert(user, message) + location?.balloon_alert(user, message) /datum/fishing_challenge/proc/on_spot_gone(datum/source) SIGNAL_HANDLER @@ -242,50 +176,114 @@ interrupt() /datum/fishing_challenge/proc/interrupt_challenge(datum/source, reason) + SIGNAL_HANDLER if(reason) send_alert(reason) interrupt() /datum/fishing_challenge/proc/start(mob/living/user) /// Create fishing line visuals - if(used_rod.display_fishing_line) - fishing_line = used_rod.create_fishing_line(lure, target_py = 5) + if(!used_rod.internal) + fishing_line = used_rod.create_fishing_line(float, user, target_py = 5) + if(isnull(fishing_line)) //couldn't create a fishing line, probably because we don't have a good line of sight. + qdel(src) + return RegisterSignal(fishing_line, COMSIG_QDELETING, PROC_REF(on_line_deleted)) else //if the rod doesnt have a fishing line, then it ends when they move away - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_user_move)) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_float_or_user_move)) + RegisterSignal(float, COMSIG_MOVABLE_MOVED, PROC_REF(on_float_or_user_move)) + RegisterSignal(user, SIGNAL_ADDTRAIT(TRAIT_HANDS_BLOCKED), PROC_REF(on_hands_blocked)) + RegisterSignal(user, SIGNAL_REMOVETRAIT(TRAIT_PROFOUND_FISHER), PROC_REF(no_longer_fishing)) active_effects = bitfield_to_list(special_effects & FISHING_MINIGAME_ACTIVE_EFFECTS) // If fishing line breaks los / rod gets dropped / deleted RegisterSignal(used_rod, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_self)) - ADD_TRAIT(user, TRAIT_GONE_FISHING, REF(src)) user.add_mood_event("fishing", /datum/mood_event/fishing) RegisterSignal(user, COMSIG_MOB_CLICKON, PROC_REF(handle_click)) start_baiting_phase() to_chat(user, span_notice("You start fishing...")) - playsound(lure, 'sound/effects/splash.ogg', 100) + playsound(location, 'sound/effects/splash.ogg', 100) + +///Set the timers for lure that need to be spun at intervals. +/datum/fishing_challenge/proc/set_lure_timers() + float.spin_ready = FALSE + addtimer(CALLBACK(src, PROC_REF(set_lure_ready)), float.spin_frequency[1], TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(missed_lure)), float.spin_frequency[2], TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_DELETE_ME) + float.update_appearance(UPDATE_OVERLAYS) + +/datum/fishing_challenge/proc/set_lure_ready() + if(phase != WAIT_PHASE) + return + float.spin_ready = TRUE + float.update_appearance(UPDATE_OVERLAYS) + if(special_effects & FISHING_MINIGAME_AUTOREEL) + addtimer(CALLBACK(src, PROC_REF(auto_spin)), 0.2 SECONDS) + playsound(float, 'sound/machines/ping.ogg', 10, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + +/datum/fishing_challenge/proc/auto_spin() + if(phase != WAIT_PHASE || !float.spin_ready) + return + float.spin_ready = FALSE + float.update_appearance(UPDATE_OVERLAYS) + set_lure_timers() + send_alert("spun") + +/datum/fishing_challenge/proc/missed_lure() + if(phase != WAIT_PHASE) + return + send_alert("miss!") + start_baiting_phase(TRUE) //Add in another 3 to 5 seconds for not spinning the lure. /datum/fishing_challenge/proc/on_line_deleted(datum/source) SIGNAL_HANDLER fishing_line = null - ///The lure may be out of sight if the user has moed around a corner, so the message should be displayed over him instead. + ///The float may be out of sight if the user has moed around a corner, so the message should be displayed over him instead. user.balloon_alert(user, user.is_holding(used_rod) ? "line snapped" : "rod dropped") interrupt() -/datum/fishing_challenge/proc/on_user_move(datum/source) +/datum/fishing_challenge/proc/on_float_or_user_move(datum/source) SIGNAL_HANDLER - user.balloon_alert(user, "too far!") + if(!user.CanReach(location)) + user.balloon_alert(user, "too far!") + interrupt() + +/datum/fishing_challenge/proc/on_hands_blocked(datum/source) + SIGNAL_HANDLER + if(completed) //the rod was dropped and therefore challenge already completed. + return + user.balloon_alert(user, "hands blocked!") + interrupt() + +/datum/fishing_challenge/proc/no_longer_fishing(datum/source) + SIGNAL_HANDLER + user.balloon_alert(user, "interrupted!") interrupt() /datum/fishing_challenge/proc/handle_click(mob/source, atom/target, modifiers) SIGNAL_HANDLER - //You need to be holding the rod to use it. + if(HAS_TRAIT(source, TRAIT_HANDS_BLOCKED)) //blocked, can't do stuff + return + //Doing other stuff if(LAZYACCESS(modifiers, SHIFT_CLICK) || LAZYACCESS(modifiers, CTRL_CLICK) || LAZYACCESS(modifiers, ALT_CLICK)) return + //You need to be actively holding on the fishing rod to use it, unless you've the profound_fisher trait. if(!HAS_TRAIT(source, TRAIT_PROFOUND_FISHER) && source.get_active_held_item() != used_rod) return if(phase == WAIT_PHASE) - send_alert("miss!") - start_baiting_phase(TRUE) //Add in another 3 to 5 seconds for that blunder. + if(world.time < last_baiting_click + 0.25 SECONDS) + return COMSIG_MOB_CANCEL_CLICKON //Don't punish players if they accidentally double clicked. + if(float.spin_frequency) + if(!float.spin_ready) + send_alert("too early!") + start_baiting_phase(TRUE) //Add in another 3 to 5 seconds for that blunder. + else + send_alert("spun") + last_baiting_click = world.time + float.spin_ready = FALSE + set_lure_timers() + else + send_alert("miss!") + start_baiting_phase(TRUE) //Add in another 3 to 5 seconds for that blunder. else if(phase == BITING_PHASE) start_minigame_phase() return COMSIG_MOB_CANCEL_CLICKON @@ -306,6 +304,9 @@ send_alert("stopped fishing") complete(FALSE) +///The multiplier of the fishing experience malus if the user's level is substantially above the difficulty. +#define EXPERIENCE_MALUS_MULT 0.08 + /datum/fishing_challenge/proc/complete(win = FALSE) if(completed) return @@ -313,41 +314,53 @@ completed = TRUE if(phase == MINIGAME_PHASE) remove_minigame_hud() - if(user) - REMOVE_TRAIT(user, TRAIT_GONE_FISHING, REF(src)) - if(start_time) - var/seconds_spent = (world.time - start_time) * 0.1 - if(!(special_effects & FISHING_MINIGAME_RULE_NO_EXP)) - user.mind?.adjust_experience(/datum/skill/fishing, round(seconds_spent * FISHING_SKILL_EXP_PER_SECOND * experience_multiplier)) - if(user.mind?.get_skill_level(/datum/skill/fishing) >= SKILL_LEVEL_LEGENDARY) - user.client?.give_award(/datum/award/achievement/skill/legendary_fisher, user) + if(!QDELETED(user) && user.mind && start_time && !(special_effects & FISHING_MINIGAME_RULE_NO_EXP)) + var/seconds_spent = (world.time - start_time) * 0.1 + var/extra_exp_malus = user.mind.get_skill_level(/datum/skill/fishing) - difficulty * 0.1 + if(extra_exp_malus > 0) + experience_multiplier /= (1 + extra_exp_malus * EXPERIENCE_MALUS_MULT) + user.mind.adjust_experience(/datum/skill/fishing, round(seconds_spent * FISHING_SKILL_EXP_PER_SECOND * experience_multiplier)) + if(user.mind.get_skill_level(/datum/skill/fishing) >= SKILL_LEVEL_LEGENDARY) + user.client?.give_award(/datum/award/achievement/skill/legendary_fisher, user) if(win) if(reward_path != FISHING_DUD) - playsound(lure, 'sound/effects/bigsplash.ogg', 100) - SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_COMPLETED, user, win) + playsound(location, 'sound/effects/bigsplash.ogg', 100) + SEND_SIGNAL(user, COMSIG_MOB_COMPLETE_FISHING, src, win) if(!QDELETED(src)) qdel(src) +#undef EXPERIENCE_MALUS_MULT + /datum/fishing_challenge/proc/start_baiting_phase(penalty = FALSE) + reward_path = null //In case we missed the biting phase, set the path back to null var/wait_time + last_baiting_click = world.time if(penalty) wait_time = min(timeleft(next_phase_timer) + rand(3 SECONDS, 5 SECONDS), 30 SECONDS) else - wait_time = rand(3 SECONDS, 25 SECONDS) + wait_time = float.spin_frequency ? rand(11 SECONDS, 17 SECONDS) : rand(3 SECONDS, 25 SECONDS) if(special_effects & FISHING_MINIGAME_AUTOREEL && wait_time >= 15 SECONDS) wait_time = max(wait_time - 7.5 SECONDS, 15 SECONDS) deltimer(next_phase_timer) phase = WAIT_PHASE //Bobbing animation - animate(lure, pixel_y = 1, time = 1 SECONDS, loop = -1, flags = ANIMATION_RELATIVE) + animate(float, pixel_y = 1, time = 1 SECONDS, loop = -1, flags = ANIMATION_RELATIVE) animate(pixel_y = -1, time = 1 SECONDS, flags = ANIMATION_RELATIVE) - next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_biting_phase)), wait_time, TIMER_STOPPABLE) + next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_biting_phase)), wait_time, TIMER_STOPPABLE|TIMER_DELETE_ME) + if(float.spin_frequency) + set_lure_timers() /datum/fishing_challenge/proc/start_biting_phase() phase = BITING_PHASE - // Trashing animation - playsound(lure, 'sound/effects/fish_splash.ogg', 100) + + var/list/rewards = list() + SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, used_rod, user, location, rewards) + if(length(rewards)) + reward_path = pick(rewards) + playsound(location, 'sound/effects/fish_splash.ogg', 100) + if(HAS_MIND_TRAIT(user, TRAIT_REVEAL_FISH)) + fish_icon = GLOB.specific_fish_icons[reward_path] || FISH_ICON_DEF switch(fish_icon) if(FISH_ICON_DEF) send_alert("fish!!!") @@ -369,15 +382,31 @@ send_alert("crustacean!!!") if(FISH_ICON_BONE) send_alert("bones!!!") + if(FISH_ICON_ELECTRIC) + send_alert("zappy!!!") + if(FISH_ICON_WEAPON) + send_alert("weapon!!!") + if(FISH_ICON_CRITTER) + send_alert("critter!!!") + if(FISH_ICON_SEED) + send_alert("seed!!!") + if(FISH_ICON_BOTTLE) + send_alert("bottle!!!") else send_alert("!!!") - animate(lure, pixel_y = 3, time = 5, loop = -1, flags = ANIMATION_RELATIVE) + animate(float, pixel_y = 3, time = 5, loop = -1, flags = ANIMATION_RELATIVE) animate(pixel_y = -3, time = 5, flags = ANIMATION_RELATIVE) if(special_effects & FISHING_MINIGAME_AUTOREEL) - start_minigame_phase(auto_reel = TRUE) - return + addtimer(CALLBACK(src, PROC_REF(automatically_start_minigame)), 0.2 SECONDS) // Setup next phase - next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_baiting_phase)), BITING_TIME_WINDOW, TIMER_STOPPABLE) + next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_baiting_phase)), BITING_TIME_WINDOW, TIMER_STOPPABLE|TIMER_DELETE_ME) + ///If we're using a lure, we want the float to show a little green light during the minigame phase and not a red one. + float.spin_ready = TRUE + float.update_appearance(UPDATE_OVERLAYS) + +/datum/fishing_challenge/proc/automatically_start_minigame() + if(phase == BITING_PHASE) + start_minigame_phase(auto_reel = TRUE) ///The damage dealt per second to the fish when FISHING_MINIGAME_RULE_KILL is active. #define FISH_DAMAGE_PER_SECOND 2 @@ -399,7 +428,58 @@ var/damage = CEILING((world.time - start_time)/10 * FISH_DAMAGE_PER_SECOND, 1) reward.adjust_health(reward.health - damage) +/datum/fishing_challenge/proc/get_difficulty() + var/list/difficulty_holder = list(0) + SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, reward_path, used_rod, user, difficulty_holder) + difficulty = difficulty_holder[1] + //If you manage to be so well-equipped and skilled to completely crush the difficulty, just skip to the reward. + if(difficulty <= 0) + complete(TRUE) + return FALSE + difficulty = clamp(round(difficulty), FISHING_MINIMUM_DIFFICULTY, 100) + return TRUE + +/datum/fishing_challenge/proc/update_difficulty() + if(phase != MINIGAME_PHASE) + return + var/old_difficulty = difficulty + //early return if the difficulty is the same or we crush the minigame all the way to 0 difficulty + if(!get_difficulty() || difficulty == old_difficulty) + return + bait_height = initial(bait_height) + experience_multiplier -= difficulty * FISHING_SKILL_DIFFIULTY_EXP_MULT + mover.reset_difficulty_values() + adjust_to_difficulty() + +/datum/fishing_challenge/proc/adjust_to_difficulty() + mover.adjust_to_difficulty() + bait_height -= round(difficulty * BAIT_HEIGHT_DIFFICULTY_MALUS) + bait_pixel_height = round(MINIGAME_BAIT_HEIGHT * (bait_height/initial(bait_height)), 1) + experience_multiplier += difficulty * FISHING_SKILL_DIFFIULTY_EXP_MULT + fishing_hud.hud_bait.adjust_to_difficulty(src) + +///Get the difficulty and other variables, than start the minigame /datum/fishing_challenge/proc/start_minigame_phase(auto_reel = FALSE) + SEND_SIGNAL(user, COMSIG_MOB_BEGIN_FISHING_MINIGAME, src) + if(!get_difficulty()) //we totalized 0 or less difficulty, instant win. + return + + if(difficulty > FISHING_DEFAULT_DIFFICULTY) + completion -= MAX_FISH_COMPLETION_MALUS * (difficulty * 0.01) + + /// Fish minigame properties + if(ispath(reward_path,/obj/item/fish)) + var/obj/item/fish/fish = reward_path + var/movement_path = initial(fish.fish_movement_type) + mover = new movement_path(src) + // Apply fish trait modifiers + var/list/fish_traits = SSfishing.fish_properties[fish][FISH_PROPERTIES_TRAITS] + for(var/fish_trait in fish_traits) + var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] + trait.minigame_mod(used_rod, user, src) + else + mover = new /datum/fish_movement(src) + if(auto_reel) completion *= 1.3 else @@ -413,22 +493,47 @@ completion *= 1.2 if(BITING_TIME_WINDOW - 0.5 SECONDS to BITING_TIME_WINDOW) completion *= 1.4 + //randomize the position of the fish a little + fish_position = rand(0, (FISHING_MINIGAME_AREA - fish_height) * 0.8) + var/diff_dist = 100 + difficulty + bait_position = clamp(round(fish_position + rand(-diff_dist, diff_dist) - bait_height * 0.5), 0, FISHING_MINIGAME_AREA - bait_height) + if(!prepare_minigame_hud()) + get_stack_trace("couldn't prepare minigame hud for a fishing challenge.") //just to be sure. This shouldn't happen. + qdel(src) return + + adjust_to_difficulty() + phase = MINIGAME_PHASE deltimer(next_phase_timer) if((FISHING_MINIGAME_RULE_KILL in special_effects) && ispath(reward_path,/obj/item/fish)) var/obj/item/fish/fish = reward_path var/wait_time = (initial(fish.health) / FISH_DAMAGE_PER_SECOND) SECONDS - addtimer(CALLBACK(src, PROC_REF(win_anyway)), wait_time) + addtimer(CALLBACK(src, PROC_REF(win_anyway)), wait_time, TIMER_DELETE_ME) start_time = world.time - experience_multiplier += difficulty * FISHING_SKILL_DIFFIULTY_EXP_MULT + +///Throws a stack with prefixed text. +/datum/fishing_challenge/proc/get_stack_trace(init_text) + var/text = "[init_text] " + text += "used rod: [used_rod || "null"], " + if(used_rod) + text += "bait: [used_rod.bait || "null"], " + text += "reward: [reward_path || "null"], " + text += "user: [user || "null"]" + if(user) + if(QDELING(user)) + text += ", user qdeling" + else if(!user.client) + text += ", user clientless" + text += "." + stack_trace(text) #undef FISH_DAMAGE_PER_SECOND ///Initialize the minigame hud and register some signals to make it work. /datum/fishing_challenge/proc/prepare_minigame_hud() - if(!user.client || user.incapacitated()) + if(!user.client || user.incapacitated) return FALSE . = TRUE fishing_hud = new @@ -465,7 +570,7 @@ /datum/fishing_challenge/process(seconds_per_tick) if(length(active_effects) && COOLDOWN_FINISHED(src, active_effect_cd)) select_active_effect() - move_fish(seconds_per_tick) + mover.move_fish(seconds_per_tick) move_bait(seconds_per_tick) if(!QDELETED(fishing_hud)) update_visuals() @@ -485,6 +590,11 @@ fishing_hud.transform = fishing_hud.transform.Scale(1, -1) SEND_SOUND(user, sound('sound/effects/boing.ogg')) COOLDOWN_START(src, active_effect_cd, rand(5, 6) SECONDS) + if(FISHING_MINIGAME_RULE_CAMO) + fishing_hud.icon_state = "background_camo" + SEND_SOUND(user, sound('sound/effects/nightmare_poof.ogg', volume = 15)) + COOLDOWN_START(src, active_effect_cd, rand(6, 8) SECONDS) + animate(fishing_hud.hud_fish, alpha = 7, time = 2 SECONDS) return ///go back to normal @@ -497,62 +607,14 @@ if(FISHING_MINIGAME_RULE_FLIP) fishing_hud.transform = fishing_hud.transform.Scale(1, -1) COOLDOWN_START(src, active_effect_cd, rand(8, 12) SECONDS) + if(FISHING_MINIGAME_RULE_CAMO) + COOLDOWN_START(src, active_effect_cd, rand(9, 16) SECONDS) + SEND_SOUND(user, sound('sound/effects/nightmare_reappear.ogg', volume = 15)) + animate(fishing_hud.hud_fish, alpha = 255, time = 1.2 SECONDS) fishing_hud.icon_state = background current_active_effect = null -///The proc that moves the fish around, just like in the old TGUI, mostly. -/datum/fishing_challenge/proc/move_fish(seconds_per_tick) - var/long_chance = long_jump_chance * seconds_per_tick * 10 - var/short_chance = short_jump_chance * seconds_per_tick * 10 - - // If we have the target but we're close enough, mark as target reached - if(abs(target_position - fish_position) < FISH_TARGET_MIN_DISTANCE) - target_position = null - - // Switching to new long jump target can interrupt any other - if((can_interrupt_move || isnull(target_position)) && prob(long_chance)) - /** - * Move at least 0.75 to full of the availible bar in given direction, - * and more likely to move in the direction where there's more space - */ - var/distance_from_top = FISHING_MINIGAME_AREA - fish_position - fish_height - var/distance_from_bottom = fish_position - var/top_chance - if(distance_from_top < FISH_SHORT_JUMP_MIN_DISTANCE) - top_chance = 0 - else - top_chance = (distance_from_top/max(distance_from_bottom, 1)) * 100 - var/new_target = fish_position - if(prob(top_chance)) - new_target += distance_from_top * rand(75, 100)/100 - else - new_target -= distance_from_bottom * rand(75, 100)/100 - target_position = round(new_target) - current_velocity_limit = long_jump_velocity_limit - - // Move towards target - if(!isnull(target_position)) - var/distance = target_position - fish_position - // about 5 at diff 15 , 10 at diff 30, 30 at diff 100 - var/acceleration_mult = 0.3 * difficulty + 0.5 - var/target_acceleration = distance * acceleration_mult * seconds_per_tick - - fish_velocity = fish_velocity * FISH_FRICTION_MULT + target_acceleration - else if(prob(short_chance)) - var/distance_from_top = FISHING_MINIGAME_AREA - fish_position - fish_height - var/distance_from_bottom = fish_position - var/jump_length - if(distance_from_top >= FISH_SHORT_JUMP_MIN_DISTANCE) - jump_length = rand(FISH_SHORT_JUMP_MIN_DISTANCE, FISH_SHORT_JUMP_MAX_DISTANCE) - if(distance_from_bottom >= FISH_SHORT_JUMP_MIN_DISTANCE && (!jump_length || prob(50))) - jump_length = -rand(FISH_SHORT_JUMP_MIN_DISTANCE, FISH_SHORT_JUMP_MAX_DISTANCE) - target_position = clamp(fish_position + jump_length, 0, FISHING_MINIGAME_AREA - fish_height) - current_velocity_limit = short_jump_velocity_limit - - fish_velocity = clamp(fish_velocity + fish_idle_velocity, -current_velocity_limit, current_velocity_limit) - fish_position = clamp(fish_position + fish_velocity * seconds_per_tick, 0, FISHING_MINIGAME_AREA - fish_height) - ///The proc that moves the bait around, just like in the old TGUI, mostly. /datum/fishing_challenge/proc/move_bait(seconds_per_tick) var/should_bounce = abs(bait_velocity) > BAIT_MIN_VELOCITY_BOUNCE @@ -613,9 +675,7 @@ bait_velocity += velocity_change //check that the fish area is still intersecting the bait now that it has moved - fish_on_bait = (fish_position + fish_height >= bait_position) && (bait_position + bait_height >= fish_position) - - if(fish_on_bait) + if(is_fish_on_bait()) completion += completion_gain * seconds_per_tick if(completion >= 100) complete(TRUE) @@ -627,6 +687,10 @@ completion = clamp(completion, 0, 100) +///Returns TRUE if the fish and the bait are intersecting +/datum/fishing_challenge/proc/is_fish_on_bait() + return (fish_position + fish_height >= bait_position) && (bait_position + bait_height >= fish_position) + ///update the vertical pixel position of both fish and bait, and the icon state of the completion bar /datum/fishing_challenge/proc/update_visuals() var/bait_offset_mult = bait_position/FISHING_MINIGAME_AREA @@ -673,18 +737,24 @@ icon = 'icons/hud/fishing_hud.dmi' icon_state = "bait" vis_flags = VIS_INHERIT_ID + ///The stored value we used to squish the bar based on the difficulty + var/current_vertical_transform /atom/movable/screen/hud_bait/Initialize(mapload, datum/hud/hud_owner, datum/fishing_challenge/challenge) . = ..() if(!challenge || challenge.bait_pixel_height == MINIGAME_BAIT_HEIGHT) return - var/static/icon_height - if(!icon_height) - var/list/icon_dimensions = get_icon_dimensions(icon) - icon_height = icon_dimensions["height"] - var/height_percent_diff = challenge.bait_pixel_height/MINIGAME_BAIT_HEIGHT - transform = transform.Scale(1, height_percent_diff) - pixel_z = -icon_height * (1 - height_percent_diff) * 0.5 + adjust_to_difficulty(challenge) + +/atom/movable/screen/hud_bait/proc/adjust_to_difficulty(datum/fishing_challenge/challenge) + if(current_vertical_transform) + transform = transform.Scale(1, 1/current_vertical_transform) + pixel_z = 0 + var/list/icon_dimensions = get_icon_dimensions(icon) + var/icon_height = icon_dimensions["height"] + current_vertical_transform = challenge.bait_pixel_height/MINIGAME_BAIT_HEIGHT + transform = transform.Scale(1, current_vertical_transform) + pixel_z = -icon_height * (1 - current_vertical_transform) * 0.5 /atom/movable/screen/hud_fish icon = 'icons/hud/fishing_hud.dmi' @@ -707,34 +777,47 @@ icon_state = "completion_[FLOOR(challenge.completion, 5)]" /// The visual that appears over the fishing spot -/obj/effect/fishing_lure +/obj/effect/fishing_float + name = "float" icon = 'icons/obj/fishing.dmi' - icon_state = "lure_idle" + icon_state = "float" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + /** + * A list with two keys delimiting the spinning interval in which a mouse click has to be pressed while fishing. + * If set, an emissive overlay will be added, colored green when the lure is ready to be spun, otherwise red. + */ + var/list/spin_frequency + ///Is the bait ready to be spun? + var/spin_ready = FALSE -/obj/effect/fishing_lure/Initialize(mapload, atom/spot) +/obj/effect/fishing_float/Initialize(mapload, atom/spot) . = ..() - if(ismovable(spot)) // we want the lure and therefore the fishing line to stay connected with the fishing spot. + if(!spot) + return + if(ismovable(spot)) // we want the float and therefore the fishing line to stay connected with the fishing spot. RegisterSignal(spot, COMSIG_MOVABLE_MOVED, PROC_REF(follow_movable)) + SET_BASE_PIXEL(spot.pixel_x, spot.pixel_y) + SET_BASE_VISUAL_PIXEL(spot.pixel_w, spot.pixel_z) -/obj/effect/fishing_lure/proc/follow_movable(atom/movable/source) +/obj/effect/fishing_float/proc/follow_movable(atom/movable/source) SIGNAL_HANDLER set_glide_size(source.glide_size) forceMove(source.loc) +/obj/effect/fishing_float/update_overlays() + . = ..() + if(!spin_frequency) + return + var/mutable_appearance/overlay = mutable_appearance(icon, "lure_light") + overlay.color = spin_ready ? COLOR_GREEN : COLOR_RED + . += overlay + . += emissive_appearance(icon, "lure_light_emissive", src, alpha = src.alpha) + #undef WAIT_PHASE #undef BITING_PHASE #undef MINIGAME_PHASE -#undef FISHING_MINIGAME_AREA -#undef FISH_TARGET_MIN_DISTANCE -#undef FISH_FRICTION_MULT -#undef FISH_SHORT_JUMP_MIN_DISTANCE -#undef FISH_SHORT_JUMP_MAX_DISTANCE -#undef FISH_ON_BAIT_ACCELERATION_MULT -#undef BAIT_MIN_VELOCITY_BOUNCE -#undef BAIT_DECELERATION_MULT - #undef MINIGAME_SLIDER_HEIGHT #undef MINIGAME_BAIT_HEIGHT #undef MINIGAME_FISH_HEIGHT @@ -745,5 +828,9 @@ #undef REELING_STATE_UP #undef REELING_STATE_DOWN +#undef FISH_ON_BAIT_ACCELERATION_MULT +#undef BAIT_MIN_VELOCITY_BOUNCE +#undef BAIT_DECELERATION_MULT + #undef MAX_FISH_COMPLETION_MALUS #undef BITING_TIME_WINDOW diff --git a/code/modules/fishing/fishing_portal_machine.dm b/code/modules/fishing/fishing_portal_machine.dm index 8b157cbebfff3..e1be9dc909ba9 100644 --- a/code/modules/fishing/fishing_portal_machine.dm +++ b/code/modules/fishing/fishing_portal_machine.dm @@ -11,6 +11,46 @@ ///The current fishing spot loaded in var/datum/component/fishing_spot/active + ///A list of fishing spot it's linked to with a multitool. + var/list/linked_fishing_spots + ///The maximum number of fishing spots it can be linked to + var/max_fishing_spots = 1 + ///If true, the fishing portal can stay connected to a linked fishing spot even on different z-levels + var/long_range_link = FALSE + +/obj/machinery/fishing_portal_generator/Initialize(mapload) + . = ..() + var/static/list/tool_screentips = list( + TOOL_MULTITOOL = list( + SCREENTIP_CONTEXT_LMB = "Link", + SCREENTIP_CONTEXT_RMB = "Unlink fishing spots" + ), + ) + AddElement(/datum/element/contextual_screentip_tools, tool_screentips) + ADD_TRAIT(src, TRAIT_UNLINKABLE_FISHING_SPOT, INNATE_TRAIT) + +/obj/machinery/fishing_portal_generator/Destroy() + deactivate() + linked_fishing_spots = null + return ..() + +///Higher tier parts let you link to more fishing spots at once and eventually let you connect through different zlevels. +/obj/machinery/fishing_portal_generator/RefreshParts() + . = ..() + max_fishing_spots = 0 + long_range_link = FALSE + for(var/datum/stock_part/matter_bin/matter_bin in component_parts) + max_fishing_spots += matter_bin.tier * 0.5 + max_fishing_spots = ROUND_UP(max_fishing_spots) + for(var/datum/stock_part/capacitor/capacitor in component_parts) + if(capacitor.tier >= 3) + long_range_link = TRUE + if(!long_range_link) + check_fishing_spot_z() + if(length(linked_fishing_spots) > max_fishing_spots) + if(active) + deactivate() + linked_fishing_spots.len = max_fishing_spots /obj/machinery/fishing_portal_generator/on_set_panel_open() update_appearance() @@ -21,9 +61,94 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS +/obj/machinery/fishing_portal_generator/multitool_act(mob/living/user, obj/item/multitool/tool) + if(machine_stat & NOPOWER) + balloon_alert(user, "no power!") + return ITEM_INTERACT_BLOCKING + var/unlink = tool.buffer == src + tool.set_buffer(unlink ? null : src) + balloon_alert(user, "fish-porter [unlink ? "un" : ""]linked") + if(!unlink) + tool.item_flags |= ITEM_HAS_CONTEXTUAL_SCREENTIPS + RegisterSignal(tool, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, PROC_REF(multitool_context)) + RegisterSignal(tool, COMSIG_MULTITOOL_REMOVE_BUFFER, PROC_REF(multitool_unbuffered)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/fishing_portal_generator/multitool_act_secondary(mob/living/user, obj/item/tool) + if(machine_stat & NOPOWER) + balloon_alert(user, "no power!") + return ITEM_INTERACT_BLOCKING + if(!length(linked_fishing_spots)) + balloon_alert(user, "nothing to unlink!") + return ITEM_INTERACT_BLOCKING + var/list/fishing_list = list() + var/id = 1 + for(var/atom/spot as anything in linked_fishing_spots) + var/choice_name = "[spot.name] ([id])" + fishing_list[choice_name] = spot + id++ + var/list/choices = list() + for(var/radial_name in fishing_list) + var/datum/fish_source/source = fishing_list[radial_name] + var/mutable_appearance/appearance = mutable_appearance('icons/hud/radial_fishing.dmi', source.radial_state) + appearance.add_overlay('icons/hud/radial_fishing.dmi', "minus_sign") + choices[radial_name] = appearance + + var/choice = show_radial_menu(user, src, choices, radius = 38, custom_check = CALLBACK(src, TYPE_PROC_REF(/atom, can_interact), user), tooltips = TRUE) + if(!choice) + return + var/atom/spot = fishing_list[choice] + if(QDELETED(spot) || !(spot in linked_fishing_spots) || !can_interact(user)) + return + unlink_fishing_spot(spot) + balloon_alert(user, "fishing spot unlinked") + +/obj/machinery/fishing_portal_generator/proc/multitool_context(obj/item/source, list/context, atom/target, mob/living/user) + SIGNAL_HANDLER + if(HAS_TRAIT(target, TRAIT_FISHING_SPOT) && !HAS_TRAIT(target, TRAIT_UNLINKABLE_FISHING_SPOT)) + context[SCREENTIP_CONTEXT_LMB] = "Link to fish-porter" + return CONTEXTUAL_SCREENTIP_SET + return NONE + +/obj/machinery/fishing_portal_generator/proc/multitool_unbuffered(datum/source, datum/buffer) + SIGNAL_HANDLER + UnregisterSignal(source, list(COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, COMSIG_MULTITOOL_REMOVE_BUFFER)) + +///Called when using a multitool on any other fishing source. +/obj/machinery/fishing_portal_generator/proc/link_fishing_spot(datum/fish_source/source, atom/spot, mob/living/user) + if(istype(spot, /obj/machinery/fishing_portal_generator)) //Don't link it to itself or other fishing portals. + return + if(length(linked_fishing_spots) >= max_fishing_spots) + spot.balloon_alert(user, "cannot link more!") + return ITEM_INTERACT_BLOCKING + for(var/other_spot in linked_fishing_spots) + var/datum/fish_source/stored = linked_fishing_spots[other_spot] + if(stored == source) + spot.balloon_alert(user, "already linked!") + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 15, FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + return ITEM_INTERACT_BLOCKING + if(HAS_TRAIT(spot, TRAIT_UNLINKABLE_FISHING_SPOT)) + spot.balloon_alert(user, "unlinkable fishing spot!") + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 15, FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + return ITEM_INTERACT_BLOCKING + LAZYSET(linked_fishing_spots, spot, source) + RegisterSignal(spot, SIGNAL_REMOVETRAIT(TRAIT_FISHING_SPOT), PROC_REF(unlink_fishing_spot)) + spot.balloon_alert(user, "fishing spot linked") + playsound(spot, 'sound/machines/ping.ogg', 15, TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/fishing_portal_generator/proc/unlink_fishing_spot(atom/spot) + SIGNAL_HANDLER + var/datum/fish_source/source = linked_fishing_spots[spot] + if(active?.fish_source == source) + deactivate() + LAZYREMOVE(linked_fishing_spots, spot) + UnregisterSignal(spot, SIGNAL_REMOVETRAIT(TRAIT_FISHING_SPOT)) + /obj/machinery/fishing_portal_generator/examine(mob/user) . = ..() - . += span_notice("You can unlock further portal settings by completing fish scanning experiments.") + . += span_notice("You can unlock further portal settings by completing fish scanning experiments, \ + or by connecting it to other fishing spots with a multitool.") /obj/machinery/fishing_portal_generator/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) @@ -47,19 +172,78 @@ if(!active) return . += "portal_on" - var/datum/fish_source/portal/portal = active.fish_source + var/datum/fish_source/portal = active.fish_source . += portal.overlay_state . += emissive_appearance(icon, "portal_emissive", src) -/obj/machinery/fishing_portal_generator/proc/activate(datum/fish_source/selected_source) +/obj/machinery/fishing_portal_generator/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) + . = ..() + check_fishing_spot_z() + +/obj/machinery/fishing_portal_generator/proc/check_fishing_spot_z() + if(!active || long_range_link || istype(active.fish_source, /datum/fish_source/portal)) + return + var/turf/new_turf = get_turf(src) + if(!new_turf) + deactivate() + return + for(var/atom/spot as anything in linked_fishing_spots) + if(linked_fishing_spots[spot] != active.fish_source) + continue + var/turf/turf = get_turf(spot) + if(turf.z != new_turf.z && !(is_station_level(turf.z) && is_station_level(new_turf.z))) + deactivate() + +/obj/machinery/fishing_portal_generator/proc/activate(datum/fish_source/selected_source, mob/user) + if(QDELETED(selected_source)) + return + if(machine_stat & NOPOWER) + balloon_alert(user, "no power!") + return ITEM_INTERACT_BLOCKING + if(!istype(selected_source, /datum/fish_source/portal)) //likely from a linked fishing spot + var/abort = TRUE + for(var/atom/spot as anything in linked_fishing_spots) + if(linked_fishing_spots[spot] != selected_source) + continue + if(long_range_link) + abort = FALSE + var/turf/spot_turf = get_turf(spot) + var/turf/turf = get_turf(src) + if(turf.z == spot_turf.z || (is_station_level(turf.z) && is_station_level(spot_turf.z))) + abort = FALSE + if(!abort) + RegisterSignal(spot, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_fishing_spot_z_level_changed)) + break + if(abort) + balloon_alert(user, "cannot reach linked!") + return + active = AddComponent(/datum/component/fishing_spot, selected_source) - use_power = ACTIVE_POWER_USE + ADD_TRAIT(src, TRAIT_CATCH_AND_RELEASE, INNATE_TRAIT) + if(use_power != NO_POWER_USE) + use_power = ACTIVE_POWER_USE update_icon() /obj/machinery/fishing_portal_generator/proc/deactivate() + if(!active) + return + if(!istype(active.fish_source, /datum/fish_source/portal)) + for(var/atom/spot as anything in linked_fishing_spots) + if(linked_fishing_spots[spot] == active.fish_source) + UnregisterSignal(spot, COMSIG_MOVABLE_Z_CHANGED) QDEL_NULL(active) - use_power = IDLE_POWER_USE - update_icon() + + REMOVE_TRAIT(src, TRAIT_CATCH_AND_RELEASE, INNATE_TRAIT) + if(!QDELETED(src)) + if(use_power != NO_POWER_USE) + use_power = IDLE_POWER_USE + update_icon() + +/obj/machinery/fishing_portal_generator/proc/on_fishing_spot_z_level_changed(atom/spot, turf/old_turf, turf/new_turf, same_z_layer) + SIGNAL_HANDLER + var/turf/turf = get_turf(src) + if(turf.z != new_turf.z && !(is_station_level(turf.z) && is_station_level(new_turf.z))) + deactivate() /obj/machinery/fishing_portal_generator/on_set_is_operational(old_value) if(old_value) @@ -88,18 +272,28 @@ var/datum/fish_source/portal/reward = GLOB.preset_fish_sources[experiment.fish_source_reward] available_fish_sources[reward.radial_name] = reward + var/id = 1 + for(var/atom/spot as anything in linked_fishing_spots) + var/choice_name = "[spot.name] ([id])" + available_fish_sources[choice_name] = linked_fishing_spots[spot] + id++ + if(length(available_fish_sources) == 1) - activate(default) + activate(default, user) return var/list/choices = list() for(var/radial_name in available_fish_sources) - var/datum/fish_source/portal/source = available_fish_sources[radial_name] - choices[radial_name] = image(icon = 'icons/hud/radial_fishing.dmi', icon_state = source.radial_state) + var/datum/fish_source/source = available_fish_sources[radial_name] + var/mutable_appearance/radial_icon = mutable_appearance('icons/hud/radial_fishing.dmi', source.radial_state) + if(!istype(source, /datum/fish_source/portal)) + //a little star on the top-left to distinguishs them from standard portals. + radial_icon.add_overlay('icons/hud/radial_fishing.dmi', "linked_source") + choices[radial_name] = radial_icon var/choice = show_radial_menu(user, src, choices, radius = 38, custom_check = CALLBACK(src, TYPE_PROC_REF(/atom, can_interact), user), tooltips = TRUE) if(!choice || !can_interact(user)) return - activate(available_fish_sources[choice]) + activate(available_fish_sources[choice], user) /obj/machinery/fishing_portal_generator/emagged obj_flags = parent_type::obj_flags | EMAGGED diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index c36ea48b15c02..23aabcc3ece7c 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -17,8 +17,12 @@ var/cast_range = 3 /// Fishing minigame difficulty modifier (additive) var/difficulty_modifier = 0 - /// Explaination of rod functionality shown in the ui + /// Explaination of rod functionality shown in the ui and the autowiki var/ui_description = "A classic fishing rod, with no special qualities." + /// More explaination shown in the wiki after ui_description + var/wiki_description = "" + /// Is this fishing rod shown in the wiki + var/show_in_wiki = TRUE var/obj/item/bait var/obj/item/fishing_line/line = /obj/item/fishing_line @@ -36,12 +40,18 @@ /// The default color for the reel overlay if no line is equipped. var/default_line_color = "gray" - ///should there be a fishing line? - var/display_fishing_line = TRUE + ///Is this currently being used by the profound fisher component? + var/internal = FALSE ///The name of the icon state of the reel overlay var/reel_overlay = "reel_overlay" + /** + * A list with two keys delimiting the spinning interval in which a mouse click has to be pressed while fishing. + * Inherited from baits, passed down to the minigame lure. + */ + var/list/spin_frequency + ///Prevents spamming the line casting, without affecting the player's click cooldown. COOLDOWN_DECLARE(casting_cd) @@ -69,9 +79,11 @@ /obj/item/fishing_rod/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) . = ..() - if(currently_hooked) - context[SCREENTIP_CONTEXT_LMB] = "Reel in" - context[SCREENTIP_CONTEXT_RMB] = "Unhook" + var/gone_fishing = GLOB.fishing_challenges_by_user[user] + if(currently_hooked || gone_fishing) + context[SCREENTIP_CONTEXT_LMB] = (gone_fishing && spin_frequency) ? "Spin" : "Reel in" + if(!gone_fishing) + context[SCREENTIP_CONTEXT_RMB] = "Unhook" return CONTEXTUAL_SCREENTIP_SET return NONE @@ -107,8 +119,19 @@ var/mob/living/caught_mob = reward if(caught_mob.stat == DEAD) return - else if(!isfish(reward)) - return + else + if(!isfish(reward)) + return + var/obj/item/fish/fish = reward + if(HAS_TRAIT(bait, TRAIT_POISONOUS_BAIT) && !HAS_TRAIT(fish, TRAIT_FISH_TOXIN_IMMUNE)) + var/kill_fish = TRUE + for(var/bait_identifer in fish.favorite_bait) + if(is_matching_bait(bait, bait_identifer)) + kill_fish = FALSE + break + if(kill_fish) + fish.set_status(FISH_DEAD, silent = TRUE) + QDEL_NULL(bait) update_icon() @@ -119,17 +142,25 @@ /obj/item/fishing_rod/proc/reel(mob/user) if(DOING_INTERACTION_WITH_TARGET(user, currently_hooked)) return + playsound(src, SFX_REEL, 50, vary = FALSE) - if(!do_after(user, 0.8 SECONDS, currently_hooked, timed_action_flags = IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE, extra_checks = CALLBACK(src, PROC_REF(fishing_line_check)))) + var/time = (0.8 - round(user.mind?.get_skill_level(/datum/skill/fishing) * 0.04, 0.1)) SECONDS + if(!do_after(user, time, currently_hooked, timed_action_flags = IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE, extra_checks = CALLBACK(src, PROC_REF(fishing_line_check)))) return + if(currently_hooked.anchored || currently_hooked.move_resist >= MOVE_FORCE_STRONG) balloon_alert(user, "[currently_hooked.p_they()] won't budge!") return + + //About thirty minutes of non-stop reeling to get from zero to master... not worth it but hey, you do what you do. + user.mind?.adjust_experience(/datum/skill/fishing, time * 0.13) + //Try to move it 'till it's under the user's feet, then try to pick it up if(isitem(currently_hooked)) - step_towards(currently_hooked, get_turf(src)) - if(currently_hooked.loc == user.loc) - user.put_in_inactive_hand(currently_hooked) + var/obj/item/item = currently_hooked + step_towards(item, get_turf(src)) + if(item.loc == user.loc && (item.interaction_flags_item & INTERACT_ITEM_ATTACK_HAND_PICKUP)) + user.put_in_inactive_hand(item) QDEL_NULL(fishing_line) //Not an item, so just delete the line if it's adjacent to the user. else if(get_dist(currently_hooked,get_turf(src)) > 1) @@ -147,21 +178,20 @@ ui_interact(user) /// Generates the fishing line visual from the current user to the target and updates inhands -/obj/item/fishing_rod/proc/create_fishing_line(atom/movable/target, target_py = null) - if(!display_fishing_line) - return null - var/mob/user = loc - if(!istype(user)) +/obj/item/fishing_rod/proc/create_fishing_line(atom/movable/target, mob/living/firer, target_py = null) + if(internal) return null if(fishing_line) QDEL_NULL(fishing_line) var/beam_color = line?.line_color || default_line_color - fishing_line = new(user, target, icon_state = "fishing_line", beam_color = beam_color, emissive = FALSE, override_target_pixel_y = target_py) - fishing_line.lefthand = user.get_held_index_of_item(src) % 2 == 1 + fishing_line = new(firer, target, icon_state = "fishing_line", beam_color = beam_color, emissive = FALSE, override_target_pixel_y = target_py) + fishing_line.lefthand = firer.get_held_index_of_item(src) % 2 == 1 RegisterSignal(fishing_line, COMSIG_BEAM_BEFORE_DRAW, PROC_REF(check_los)) RegisterSignal(fishing_line, COMSIG_QDELETING, PROC_REF(clear_line)) INVOKE_ASYNC(fishing_line, TYPE_PROC_REF(/datum/beam/, Start)) - user.update_held_items() + if(QDELETED(fishing_line)) + return null + firer.update_held_items() return fishing_line /obj/item/fishing_rod/proc/clear_line(datum/source) @@ -172,6 +202,15 @@ fishing_line = null currently_hooked = null +/obj/item/fishing_rod/proc/get_cast_range(mob/living/user) + . = cast_range + if(!user && !isliving(loc)) + return + user = loc + if(!user.is_holding(src) || !user.mind) + return + . += round(user.mind.get_skill_level(/datum/skill/fishing) * 0.3) + /obj/item/fishing_rod/dropped(mob/user, silent) . = ..() QDEL_NULL(fishing_line) @@ -183,7 +222,7 @@ if(!hook.can_be_hooked(target_atom)) return currently_hooked = target_atom - create_fishing_line(target_atom) + create_fishing_line(target_atom, user) hook.hook_attached(target_atom, src) SEND_SIGNAL(src, COMSIG_FISHING_ROD_HOOKED_ITEM, target_atom, user) @@ -192,11 +231,14 @@ SIGNAL_HANDLER . = NONE - if(!CheckToolReach(src, source.target, cast_range)) + if(!CheckToolReach(src, source.target, get_cast_range())) qdel(source) return BEAM_CANCEL_DRAW /obj/item/fishing_rod/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + //this prevent trying to use telekinesis to fish (which would be broken anyway), also whacking people with a rod. + if(!user.contains(src) || (user.combat_mode && !isturf(interacting_with)) ||HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return ..() return ranged_interact_with_atom(interacting_with, user, modifiers) /obj/item/fishing_rod/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) @@ -234,7 +276,7 @@ return casting = TRUE var/obj/projectile/fishing_cast/cast_projectile = new(get_turf(src)) - cast_projectile.range = cast_range + cast_projectile.range = get_cast_range(user) cast_projectile.owner = src cast_projectile.original = target cast_projectile.fired_from = src @@ -245,9 +287,8 @@ COOLDOWN_START(src, casting_cd, 1 SECONDS) /// Called by hook projectile when hitting things -/obj/item/fishing_rod/proc/hook_hit(atom/atom_hit_by_hook_projectile) - var/mob/user = loc - if(!hook || !istype(user)) +/obj/item/fishing_rod/proc/hook_hit(atom/atom_hit_by_hook_projectile, mob/user) + if(!hook) return if(SEND_SIGNAL(atom_hit_by_hook_projectile, COMSIG_FISHING_ROD_CAST, src, user) & FISHING_ROD_CAST_HANDLED) return @@ -261,6 +302,12 @@ ui.set_autoupdate(FALSE) ui.open() +/obj/item/fishing_rod/ui_state() + if(internal) + return GLOB.deep_inventory_state + else + return GLOB.default_state + /obj/item/fishing_rod/update_overlays() . = ..() . += get_fishing_overlays() @@ -268,10 +315,11 @@ /obj/item/fishing_rod/proc/get_fishing_overlays() . = list() var/line_color = line?.line_color || default_line_color - /// Line part by the rod, always visible - var/mutable_appearance/reel_appearance = mutable_appearance(icon, reel_overlay) - reel_appearance.color = line_color - . += reel_appearance + /// Line part by the rod. + if(reel_overlay) + var/mutable_appearance/reel_appearance = mutable_appearance(icon, reel_overlay) + reel_appearance.color = line_color + . += reel_appearance // Line & hook is also visible when only bait is equipped but it uses default appearances then if(hook || bait) @@ -365,7 +413,7 @@ return FALSE return TRUE -/obj/item/fishing_rod/ui_act(action, list/params) +/obj/item/fishing_rod/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return . @@ -379,6 +427,8 @@ /// Ideally this will be replaced with generic slotted storage datum + display /obj/item/fishing_rod/proc/use_slot(slot, mob/user, obj/item/new_item) + if(fishing_line || GLOB.fishing_challenges_by_user[user]) + return var/obj/item/current_item switch(slot) if(ROD_SLOT_BAIT) @@ -400,23 +450,20 @@ if(user.transferItemToLoc(new_item,src)) set_slot(new_item, slot) balloon_alert(user, "[slot] installed") + else + balloon_alert(user, "stuck to your hands!") + return /// Trying to swap item else if(new_item && current_item) if(!slot_check(new_item,slot)) return - if(user.transferItemToLoc(new_item,src)) - switch(slot) - if(ROD_SLOT_BAIT) - bait = new_item - if(ROD_SLOT_HOOK) - hook = new_item - if(ROD_SLOT_LINE) - line = new_item - user.put_in_hands(current_item) - balloon_alert(user, "[slot] swapped") - - if(new_item) - SEND_SIGNAL(new_item, COMSIG_FISHING_EQUIPMENT_SLOTTED, src) + if(user.transferItemToLoc(new_item, src)) + user.put_in_hands(current_item) + set_slot(new_item, slot) + balloon_alert(user, "[slot] swapped") + else + balloon_alert(user, "stuck to your hands!") + return update_icon() playsound(src, 'sound/items/click.ogg', 50, TRUE) @@ -426,16 +473,23 @@ switch(slot) if(ROD_SLOT_BAIT) bait = equipment + if(!HAS_TRAIT(bait, TRAIT_BAIT_ALLOW_FISHING_DUD)) + ADD_TRAIT(src, TRAIT_ROD_REMOVE_FISHING_DUD, INNATE_TRAIT) if(ROD_SLOT_HOOK) hook = equipment if(ROD_SLOT_LINE) line = equipment cast_range += FISHING_ROD_REEL_CAST_RANGE + else + CRASH("set_slot called with an undefined slot: [slot]") + + SEND_SIGNAL(equipment, COMSIG_FISHING_EQUIPMENT_SLOTTED, src) /obj/item/fishing_rod/Exited(atom/movable/gone, direction) . = ..() if(gone == bait) bait = null + REMOVE_TRAIT(src, TRAIT_ROD_REMOVE_FISHING_DUD, INNATE_TRAIT) if(gone == line) cast_range -= FISHING_ROD_REEL_CAST_RANGE line = null @@ -447,10 +501,12 @@ /obj/item/fishing_rod/unslotted hook = null line = null + show_in_wiki = FALSE /obj/item/fishing_rod/bone name = "bone fishing rod" desc = "A humble rod, made with whatever happened to be on hand." + ui_description = "A fishing rod crafted with leather, sinew and bones." icon_state = "fishing_rod_bone" reel_overlay = "reel_bone" default_line_color = "red" @@ -462,9 +518,11 @@ icon_state = "fishing_rod_telescopic" desc = "A lightweight, ergonomic, easy to store telescopic fishing rod. " inhand_icon_state = null + custom_price = PAYCHECK_CREW * 9 force = 0 w_class = WEIGHT_CLASS_NORMAL ui_description = "A collapsible fishing rod that can fit within a backpack." + wiki_description = "It has to be bought from Cargo." reel_overlay = "reel_telescopic" ///The force of the item when extended. var/active_force = 8 @@ -503,7 +561,7 @@ if(HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) return //the fishing minigame uses the attack_self signal to let the user end it early without having to drop the rod. - if(HAS_TRAIT(user, TRAIT_GONE_FISHING)) + if(GLOB.fishing_challenges_by_user[user]) return COMPONENT_BLOCK_TRANSFORM ///Gives feedback to the user, makes it show up inhand, toggles whether it can be used for fishing. @@ -513,16 +571,21 @@ inhand_icon_state = active ? "rod" : null // When inactive, there is no inhand icon_state. if(user) balloon_alert(user, active ? "extended" : "collapsed") - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) - update_appearance(UPDATE_OVERLAYS) + playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE) + update_appearance() QDEL_NULL(fishing_line) return COMPONENT_NO_DEFAULT_MESSAGE +/obj/item/fishing_rod/telescopic/update_icon_state() + . = ..() + icon_state = "[initial(icon_state)][!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE) ? "_collapsed" : ""]" + /obj/item/fishing_rod/telescopic/master name = "master fishing rod" desc = "The mythical rod of a lost fisher king. Said to be imbued with un-paralleled fishing power. There's writing on the back of the pole. \"中国航天制造\"" difficulty_modifier = -10 - ui_description = "This rod makes fishing easy even for an absolute beginner." + ui_description = "A mythical telescopic fishing rod that makes fishing quite easier." + wiki_description = null icon_state = "fishing_rod_master" reel_overlay = "reel_master" active_force = 13 //It's that sturdy @@ -533,7 +596,8 @@ /obj/item/fishing_rod/tech name = "advanced fishing rod" desc = "An embedded universal constructor along with micro-fusion generator makes this marvel of technology never run out of bait. Interstellar treaties prevent using it outside of recreational fishing. And you can fish with this. " - ui_description = "This rod has an infinite supply of synth-bait. Also doubles as an Experi-Scanner for fish." + ui_description = "A rod with an infinite supply of synthetic bait. Doubles as an Experi-Scanner for fish." + wiki_description = "It requires the Advanced Fishing Technology Node to be researched to be printed." icon_state = "fishing_rod_science" reel_overlay = "reel_science" bait = /obj/item/food/bait/doughball/synthetic/unconsumable @@ -585,13 +649,13 @@ transform = transform.Scale(1, -1) . = ..() if(!QDELETED(src)) - our_line = owner.create_fishing_line(src) + our_line = owner.create_fishing_line(src, firer) /obj/projectile/fishing_cast/on_hit(atom/target, blocked = 0, pierce_hit) . = ..() if(blocked < 100) QDEL_NULL(our_line) //we need to delete the old beam datum, otherwise it won't let you fish. - owner.hook_hit(target) + owner.hook_hit(target, firer) /obj/projectile/fishing_cast/Destroy() QDEL_NULL(our_line) @@ -657,4 +721,7 @@ override_origin_pixel_x = lefthand ? lefthand_n_px : righthand_n_px override_origin_pixel_y = lefthand ? lefthand_n_py : righthand_n_py + override_origin_pixel_x += origin.pixel_x + override_origin_pixel_y += origin.pixel_y + #undef FISHING_ROD_REEL_CAST_RANGE diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 4a0419f98f55f..38455068ce22e 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -8,30 +8,51 @@ GLOBAL_LIST_INIT(preset_fish_sources, init_subtypes_w_path_keys(/datum/fish_sour * A lot of the icons here may be a tad inaccurate, but since we're limited to the free font awesome icons we * have access to, we got to make do. */ -GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( - /mob/living/basic/carp = FISH_ICON_DEF, - /mob/living/basic/mining = FISH_ICON_HOSTILE, - /obj/effect/decal/remains = FISH_ICON_BONE, - /obj/effect/mob_spawn/corpse = FISH_ICON_BONE, - /obj/item/coin = FISH_ICON_COIN, - /obj/item/fish = FISH_ICON_DEF, - /obj/item/fish/armorfish = FISH_ICON_CRAB, - /obj/item/fish/boned = FISH_ICON_BONE, - /obj/item/fish/chasm_crab = FISH_ICON_CRAB, - /obj/item/fish/gunner_jellyfish = FISH_ICON_JELLYFISH, - /obj/item/fish/holo/crab = FISH_ICON_CRAB, - /obj/item/fish/holo/puffer = FISH_ICON_CHUNKY, - /obj/item/fish/mastodon = FISH_ICON_BONE, - /obj/item/fish/pufferfish = FISH_ICON_CHUNKY, - /obj/item/fish/slimefish = FISH_ICON_SLIME, - /obj/item/fish/sludgefish = FISH_ICON_SLIME, - /obj/item/fish/starfish = FISH_ICON_STAR, - /obj/item/storage/wallet = FISH_ICON_COIN, - /obj/item/stack/sheet/bone = FISH_ICON_BONE, - /obj/item/stack/sheet/mineral = FISH_ICON_GEM, - /obj/item/stack/ore = FISH_ICON_GEM, - /obj/structure/closet/crate = FISH_ICON_COIN, -))) +GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) + +/proc/generate_specific_fish_icons() + var/list/return_list = zebra_typecacheof(list( + /mob/living/basic/axolotl = FISH_ICON_CRITTER, + /mob/living/basic/frog = FISH_ICON_CRITTER, + /mob/living/basic/carp = FISH_ICON_DEF, + /mob/living/basic/mining = FISH_ICON_HOSTILE, + /obj/effect/decal/remains = FISH_ICON_BONE, + /obj/effect/mob_spawn/corpse = FISH_ICON_BONE, + /obj/effect/spawner/message_in_a_bottle = FISH_ICON_BOTTLE, + /obj/item/coin = FISH_ICON_COIN, + /obj/item/fish = FISH_ICON_DEF, + /obj/item/fish/armorfish = FISH_ICON_CRAB, + /obj/item/fish/boned = FISH_ICON_BONE, + /obj/item/fish/chainsawfish = FISH_ICON_WEAPON, + /obj/item/fish/chasm_crab = FISH_ICON_CRAB, + /obj/item/fish/gunner_jellyfish = FISH_ICON_JELLYFISH, + /obj/item/fish/holo/crab = FISH_ICON_CRAB, + /obj/item/fish/holo/puffer = FISH_ICON_CHUNKY, + /obj/item/fish/jumpercable = FISH_ICON_ELECTRIC, + /obj/item/fish/lavaloop = FISH_ICON_WEAPON, + /obj/item/fish/mastodon = FISH_ICON_BONE, + /obj/item/fish/pike/armored = FISH_ICON_WEAPON, + /obj/item/fish/pufferfish = FISH_ICON_CHUNKY, + /obj/item/fish/sand_crab = FISH_ICON_CRAB, + /obj/item/fish/skin_crab = FISH_ICON_CRAB, + /obj/item/fish/slimefish = FISH_ICON_SLIME, + /obj/item/fish/sludgefish = FISH_ICON_SLIME, + /obj/item/fish/starfish = FISH_ICON_STAR, + /obj/item/fish/stingray = FISH_ICON_WEAPON, + /obj/item/fish/swordfish = FISH_ICON_WEAPON, + /obj/item/fish/zipzap = FISH_ICON_ELECTRIC, + /obj/item/seeds/grass = FISH_ICON_SEED, + /obj/item/seeds/random = FISH_ICON_SEED, + /obj/item/storage/wallet = FISH_ICON_COIN, + /obj/item/stack/sheet/bone = FISH_ICON_BONE, + /obj/item/stack/sheet/mineral = FISH_ICON_GEM, + /obj/item/stack/ore = FISH_ICON_GEM, + /obj/structure/closet/crate = FISH_ICON_COIN, + /obj/structure/mystery_box = FISH_ICON_COIN, + )) + + return_list[FISHING_RANDOM_SEED] = FISH_ICON_SEED + return return_list /** * Where the fish actually come from - every fishing spot has one assigned but multiple fishing holes @@ -45,39 +66,64 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( var/list/fish_table = list() /// If a key from fish_table is present here, that fish is availible in limited quantity and is reduced by one on successful fishing var/list/fish_counts = list() + /// Any limited quantity stuff in this list will be readded to the counts after a while + var/list/fish_count_regen + /// A list of stuff that's currently waiting to be readded to fish_counts + var/list/currently_on_regen /// Text shown as baloon alert when you roll a dud in the table var/duds = list("it was nothing", "the hook is empty") - /// Baseline difficulty for fishing in this spot + /// Baseline difficulty for fishing in this spot. THIS IS ADDED TO THE DEFAULT DIFFICULTY OF THE MINIGAME (15) var/fishing_difficulty = FISHING_DEFAULT_DIFFICULTY /// How the spot type is described in fish catalog section about fish sources, will be skipped if null var/catalog_description /// Background image name from /datum/asset/simple/fishing_minigame var/background = "background_default" - /// It true, repeated and large explosions won't be as efficient. This is usually meant for global fish sources. + /// It true, repeated and large explosions won't be as efficient. This is usually for fish sources that cover multiple turfs (i.e. rivers, oceans). var/explosive_malus = FALSE /// If explosive_malus is true, this will be used to keep track of the turfs where an explosion happened for when we'll spawn the loot. var/list/exploded_turfs + ///When linked to a fishing portal, this will be the icon_state of this option in the radial menu + var/radial_state = "default" + ///When selected by the fishing portal, this will be the icon_state of the overlay shown on the machine. + var/overlay_state = "portal_aquarium" /// Mindless mobs that can fish will never pull up items on this list var/static/list/profound_fisher_blacklist = typecacheof(list( /mob/living/basic/mining/lobstrosity, /obj/structure/closet/crate/necropolis/tendril, )) + + ///List of multipliers used to make fishes more common compared to everything else depending on bait quality, indexed from best to worst. + var/static/weight_result_multiplier = list( + TRAIT_GREAT_QUALITY_BAIT = 9, + TRAIT_GOOD_QUALITY_BAIT = 3.5, + TRAIT_BASIC_QUALITY_BAIT = 2, + ) + ///List of exponents used to level out the table weight differences between fish depending on bait quality. + var/static/weight_leveling_exponents = list( + TRAIT_GREAT_QUALITY_BAIT = 0.7, + TRAIT_GOOD_QUALITY_BAIT = 0.55, + TRAIT_BASIC_QUALITY_BAIT = 0.4, + ) + /datum/fish_source/New() if(!PERFORM_ALL_TESTS(focus_only/fish_sources_tables)) return for(var/path in fish_counts) if(!(path in fish_table)) - stack_trace("path [path] found in the 'fish_counts' list but not in the fish_table one of [type]") + stack_trace("path [path] found in the 'fish_counts' list but not in the 'fish_table'") /datum/fish_source/Destroy() exploded_turfs = null return ..() ///Called when src is set as the fish source of a fishing spot component -/datum/fish_source/proc/on_fishing_spot_init(/datum/component/fishing_spot/spot) +/datum/fish_source/proc/on_fishing_spot_init(datum/component/fishing_spot/spot) return +///Called whenever a fishing spot with this fish source attached is deleted +/datum/fish_source/proc/on_fishing_spot_del(datum/component/fishing_spot/spot) + /// 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, atom/parent) return rod.reason_we_cant_fish(src) @@ -86,6 +132,19 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( /datum/fish_source/proc/on_start_fishing(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) return +///Comsig proc from the fishing minigame for 'calculate_difficulty' +/datum/fish_source/proc/calculate_difficulty_minigame(datum/fishing_challenge/challenge, reward_path, obj/item/fishing_rod/rod, mob/fisherman, list/difficulty_holder) + SIGNAL_HANDLER + SHOULD_NOT_OVERRIDE(TRUE) + difficulty_holder[1] += calculate_difficulty(reward_path, rod, fisherman) + + // Difficulty modifier added by the fisher's skill level + if(!(challenge.special_effects & FISHING_MINIGAME_RULE_NO_EXP)) + difficulty_holder[1] += fisherman.mind?.get_skill_modifier(/datum/skill/fishing, SKILL_VALUE_MODIFIER) + + if(challenge.special_effects & FISHING_MINIGAME_RULE_KILL) + challenge.RegisterSignal(src, COMSIG_FISH_SOURCE_REWARD_DISPENSED, TYPE_PROC_REF(/datum/fishing_challenge, hurt_fish)) + /** * Calculates the difficulty of the minigame: * @@ -112,8 +171,8 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( // In the future non-fish rewards can have variable difficulty calculated here return - var/list/fish_list_properties = collect_fish_properties() var/obj/item/fish/caught_fish = result + var/list/fish_properties = SSfishing.fish_properties[caught_fish] // Baseline fish difficulty . += initial(caught_fish.fishing_difficulty_modifier) @@ -121,18 +180,18 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( if(rod.bait) var/obj/item/bait = rod.bait //Fav bait makes it easier - var/list/fav_bait = fish_list_properties[caught_fish][NAMEOF(caught_fish, favorite_bait)] + var/list/fav_bait = fish_properties[FISH_PROPERTIES_FAV_BAIT] for(var/bait_identifer in fav_bait) if(is_matching_bait(bait, bait_identifer)) . += FAV_BAIT_DIFFICULTY_MOD //Disliked bait makes it harder - var/list/disliked_bait = fish_list_properties[caught_fish][NAMEOF(caught_fish, disliked_bait)] + var/list/disliked_bait = fish_properties[FISH_PROPERTIES_BAD_BAIT] for(var/bait_identifer in disliked_bait) if(is_matching_bait(bait, bait_identifer)) . += DISLIKED_BAIT_DIFFICULTY_MOD // Matching/not matching fish traits and equipment - var/list/fish_traits = fish_list_properties[caught_fish][NAMEOF(caught_fish, fish_traits)] + var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS] var/additive_mod = 0 var/multiplicative_mod = 1 @@ -145,9 +204,15 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( . += additive_mod . *= multiplicative_mod -/// In case you want more complex rules for specific spots -/datum/fish_source/proc/roll_reward(obj/item/fishing_rod/rod, mob/fisherman) - return pick_weight(get_modified_fish_table(rod,fisherman)) +///Comsig proc from the fishing minigame for 'roll_reward' +/datum/fish_source/proc/roll_reward_minigame(datum/source, obj/item/fishing_rod/rod, mob/fisherman, atom/location, list/rewards) + SIGNAL_HANDLER + SHOULD_NOT_OVERRIDE(TRUE) + rewards += roll_reward(rod, fisherman, location) + +/// Returns a typepath or a special value which we use for spawning dispensing a reward later. +/datum/fish_source/proc/roll_reward(obj/item/fishing_rod/rod, mob/fisherman, atom/location) + return pick_weight(get_modified_fish_table(rod, fisherman, location)) || FISHING_DUD /** * Used to register signals or add traits and the such right after conditions have been cleared @@ -161,21 +226,21 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( SEND_SIGNAL(src, COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE, reason) /** - * Proc called when the COMSIG_FISHING_CHALLENGE_COMPLETED signal is sent. + * Proc called when the COMSIG_MOB_COMPLETE_FISHING signal is sent. * Check if we've succeeded. If so, write into memory and dispense the reward. */ -/datum/fish_source/proc/on_challenge_completed(datum/fishing_challenge/source, mob/user, success) +/datum/fish_source/proc/on_challenge_completed(mob/user, datum/fishing_challenge/challenge, success) SIGNAL_HANDLER SHOULD_CALL_PARENT(TRUE) + UnregisterSignal(user, COMSIG_MOB_COMPLETE_FISHING) if(!success) return - var/obj/item/fish/caught = source.reward_path - user.add_mob_memory(/datum/memory/caught_fish, protagonist = user, deuteragonist = initial(caught.name)) - var/turf/fishing_spot = get_turf(source.lure) - var/atom/movable/reward = dispense_reward(source.reward_path, user, fishing_spot) - if(source.used_rod) - SEND_SIGNAL(source.used_rod, COMSIG_FISHING_ROD_CAUGHT_FISH, reward, user) - source.used_rod.consume_bait(reward) + var/turf/fishing_spot = get_turf(challenge.float) + var/atom/movable/reward = dispense_reward(challenge.reward_path, user, fishing_spot) + if(reward) + user.add_mob_memory(/datum/memory/caught_fish, protagonist = user, deuteragonist = reward.name) + SEND_SIGNAL(challenge.used_rod, COMSIG_FISHING_ROD_CAUGHT_FISH, reward, user) + challenge.used_rod.consume_bait(reward) /// Gives out the reward if possible /datum/fish_source/proc/dispense_reward(reward_path, mob/fisherman, turf/fishing_spot) @@ -198,16 +263,33 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( /datum/fish_source/proc/simple_dispense_reward(reward_path, atom/spawn_location, turf/fishing_spot) if(isnull(reward_path)) return null - if((reward_path in fish_counts)) // This is limited count result + var/area/area = get_area(fishing_spot) + if(!(area.area_flags & UNLIMITED_FISHING) && !isnull(fish_counts[reward_path])) // This is limited count result + //Somehow, we're trying to spawn an expended reward. + if(fish_counts[reward_path] <= 0) + return null fish_counts[reward_path] -= 1 - if(!fish_counts[reward_path]) - fish_counts -= reward_path //Ran out of these since rolling (multiple fishermen on same source most likely) - fish_table -= reward_path + var/regen_time = fish_count_regen?[reward_path] + if(regen_time) + LAZYADDASSOC(currently_on_regen, reward_path, 1) + if(currently_on_regen[reward_path] == 1) + addtimer(CALLBACK(src, PROC_REF(regen_count), reward_path), regen_time) var/atom/movable/reward = spawn_reward(reward_path, spawn_location, fishing_spot) SEND_SIGNAL(src, COMSIG_FISH_SOURCE_REWARD_DISPENSED, reward) return reward +/datum/fish_source/proc/regen_count(reward_path) + if(!LAZYACCESS(currently_on_regen, reward_path)) + return + fish_counts[reward_path] += 1 + currently_on_regen[reward_path] -= 1 + if(currently_on_regen[reward_path] <= 0) + LAZYREMOVE(currently_on_regen, reward_path) + return + var/regen_time = fish_count_regen[reward_path] + addtimer(CALLBACK(src, PROC_REF(regen_count), reward_path), regen_time) + /// Spawns a reward from a atom path right where the fisherman is. Part of the dispense_reward() logic. /datum/fish_source/proc/spawn_reward(reward_path, atom/spawn_location, turf/fishing_spot) if(reward_path == FISHING_DUD) @@ -222,64 +304,35 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( caught_fish.randomize_size_and_weight() return reward -/// Cached fish list properties so we don't have to initalize fish every time, init deffered -GLOBAL_LIST(fishing_property_cache) - -/// Awful workaround around initial(x.list_variable) not being a thing while trying to keep some semblance of being structured -/proc/collect_fish_properties() - if(GLOB.fishing_property_cache == null) - var/list/fish_property_table = list() - for(var/fish_type in subtypesof(/obj/item/fish)) - var/obj/item/fish/fish = new fish_type(null, FALSE) - fish_property_table[fish_type] = list() - fish_property_table[fish_type][NAMEOF(fish, favorite_bait)] = fish.favorite_bait.Copy() - fish_property_table[fish_type][NAMEOF(fish, disliked_bait)] = fish.disliked_bait.Copy() - fish_property_table[fish_type][NAMEOF(fish, fish_traits)] = fish.fish_traits.Copy() - QDEL_NULL(fish) - GLOB.fishing_property_cache = fish_property_table - return GLOB.fishing_property_cache - -/// Checks if bait matches identifier from fav/disliked bait list -/datum/fish_source/proc/is_matching_bait(obj/item/bait, identifier) - if(ispath(identifier)) //Just a path - return istype(bait, identifier) - if(islist(identifier)) - var/list/special_identifier = identifier - switch(special_identifier["Type"]) - if("Foodtype") - var/obj/item/food/food_bait = bait - return istype(food_bait) && food_bait.foodtypes & special_identifier["Value"] - if("Reagent") - return bait.reagents?.has_reagent(special_identifier["Value"], special_identifier["Amount"], check_subtypes = TRUE) - else - CRASH("Unknown bait identifier in fish favourite/disliked list") - else - return HAS_TRAIT(bait, identifier) +/// Returns the fish table, with with the unavailable items from fish_counts removed. +/datum/fish_source/proc/get_fish_table() + var/list/table = fish_table.Copy() + for(var/result in table) + if(!isnull(fish_counts[result]) && fish_counts[result] <= 0) + table -= result + return table /// Builds a fish weights table modified by bait/rod/user properties -/datum/fish_source/proc/get_modified_fish_table(obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_source/proc/get_modified_fish_table(obj/item/fishing_rod/rod, mob/fisherman, atom/location) var/obj/item/bait = rod.bait - ///An exponent used to level out the difference in probabilities between fishes/mobs on the table depending on bait quality. + ///An exponent used to level out the table weight differences between fish depending on bait quality. var/leveling_exponent = 0 ///Multiplier used to make fishes more common compared to everything else. var/result_multiplier = 1 - var/list/final_table = fish_table.Copy() + var/list/final_table = get_fish_table() if(bait) - if(HAS_TRAIT(bait, TRAIT_GREAT_QUALITY_BAIT)) - result_multiplier = 9 - leveling_exponent = 0.5 - else if(HAS_TRAIT(bait, TRAIT_GOOD_QUALITY_BAIT)) - result_multiplier = 3.5 - leveling_exponent = 0.25 - else if(HAS_TRAIT(bait, TRAIT_BASIC_QUALITY_BAIT)) - result_multiplier = 2 - leveling_exponent = 0.1 - final_table -= FISHING_DUD + for(var/trait in weight_result_multiplier) + if(HAS_TRAIT(bait, trait)) + result_multiplier = weight_result_multiplier[trait] + leveling_exponent = weight_leveling_exponents[trait] + break - var/list/fish_list_properties = collect_fish_properties() + + if(HAS_TRAIT(rod, TRAIT_ROD_REMOVE_FISHING_DUD)) + final_table -= FISHING_DUD if(HAS_TRAIT(fisherman, TRAIT_PROFOUND_FISHER) && !fisherman.client) @@ -289,60 +342,101 @@ GLOBAL_LIST(fishing_property_cache) final_table[result] += rod.hook?.get_hook_bonus_additive(result)//Decide on order here so it can be multiplicative if(ispath(result, /obj/item/fish)) - //Modify fish roll chance - var/obj/item/fish/caught_fish = result - if(bait) final_table[result] = round(final_table[result] * result_multiplier, 1) - 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) - if(is_matching_bait(bait, bait_identifer)) - final_table[result] *= 2 - //Bait matching dislikes - var/list/disliked_bait = fish_list_properties[result][NAMEOF(caught_fish, disliked_bait)] - for(var/bait_identifer in disliked_bait) - if(is_matching_bait(bait, bait_identifer)) - final_table[result] = round(final_table[result] * 0.5, 1) + var/mult = bait.check_bait(result) + final_table[result] = round(final_table[result] * mult, 1) + if(mult > 1 && HAS_TRAIT(bait, TRAIT_BAIT_ALLOW_FISHING_DUD)) + final_table -= FISHING_DUD else - final_table[result] = round(final_table[result] * 0.15, 1) //Fishing without bait is not going to be easy + final_table[result] = round(final_table[result] * FISH_WEIGHT_MULT_WITHOUT_BAIT, 1) //Fishing without bait is not going to be easy // Apply fish trait modifiers - var/list/fish_traits = fish_list_properties[caught_fish][NAMEOF(caught_fish, fish_traits)] - var/additive_mod = 0 - var/multiplicative_mod = 1 - for(var/fish_trait in fish_traits) - var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] - var/list/mod = trait.catch_weight_mod(rod, fisherman) - additive_mod += mod[ADDITIVE_FISHING_MOD] - multiplicative_mod *= mod[MULTIPLICATIVE_FISHING_MOD] - - final_table[result] += additive_mod - final_table[result] = round(final_table[result] * multiplicative_mod, 1) + final_table[result] = get_fish_trait_catch_mods(final_table[result], result, rod, fisherman, location) if(final_table[result] <= 0) final_table -= result - ///here we even out the chances of fishie based on bait quality: better baits lead rarer fishes being more common. + if(leveling_exponent) - var/highest_fish_weight - var/list/collected_fish_weights = list() - for(var/fishable in final_table) - if(ispath(fishable, /obj/item/fish)) - var/fish_weight = fish_table[fishable] - collected_fish_weights[fishable] = fish_weight - if(fish_weight > highest_fish_weight) - highest_fish_weight = fish_weight - - for(var/fish in collected_fish_weights) - var/difference = highest_fish_weight - collected_fish_weights[fish] - if(!difference) - continue - final_table[fish] += round(difference**leveling_exponent, 1) + level_out_fish(final_table, leveling_exponent) return final_table +///A proc that levels out the weights of various fish, leading to rarer fishes being more common. +/datum/fish_source/proc/level_out_fish(list/table, exponent) + var/highest_fish_weight + var/list/collected_fish_weights = list() + for(var/fishable in table) + if(ispath(fishable, /obj/item/fish)) + var/fish_weight = table[fishable] + collected_fish_weights[fishable] = fish_weight + if(fish_weight > highest_fish_weight) + highest_fish_weight = fish_weight + + for(var/fish in collected_fish_weights) + var/difference = highest_fish_weight - collected_fish_weights[fish] + if(!difference) + continue + table[fish] += round(difference**exponent, 1) + +/datum/fish_source/proc/get_fish_trait_catch_mods(weight, obj/item/fish/fish, obj/item/fishing_rod/rod, mob/user, atom/location) + if(!ispath(fish, /obj/item/fish)) + return weight + var/multiplier = 1 + for(var/fish_trait in SSfishing.fish_properties[fish][FISH_PROPERTIES_TRAITS]) + var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] + var/list/mod = trait.catch_weight_mod(rod, user, location, fish) + weight += mod[ADDITIVE_FISHING_MOD] + multiplier *= mod[MULTIPLICATIVE_FISHING_MOD] + + return round(weight * multiplier, 1) + +///returns true if this fishing spot has fish that are shown in the catalog. +/datum/fish_source/proc/has_known_fishes() + for(var/reward in fish_table) + if(!ispath(reward, /obj/item/fish)) + continue + var/obj/item/fish/prototype = reward + if(initial(prototype.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG) + return TRUE + return FALSE + +///Add a string with the names of catchable fishes to the examine text. +/datum/fish_source/proc/get_catchable_fish_names(mob/user, atom/location, list/examine_text) + var/list/known_fishes = list() + + var/obj/item/fishing_rod/rod = user.get_active_held_item() + if(!istype(rod)) + rod = null + + for(var/reward in fish_table) + if(!ispath(reward, /obj/item/fish)) + continue + var/obj/item/fish/prototype = reward + if(initial(prototype.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG) + var/init_name = initial(prototype.name) + if(rod) + var/init_weight = fish_table[reward] + var/weight = (rod.bait ? rod.bait.check_bait(prototype) : 1) + weight = get_fish_trait_catch_mods(weight, reward, rod, user, location) + if(weight > init_weight) + init_name = span_bold(init_name) + if(weight/init_weight >= 3.5) + init_name = "init_name" + else if(weight < init_weight) + init_name = span_small(init_name) + known_fishes += init_name + + if(!length(known_fishes)) + return + + var/info = "You can catch the following fish here" + + if(rod) + info = span_tooltip("boldened are the fish you're more likely to catch with your current setup. The opposite is true for smaller names", info) + examine_text += span_info("[info]: [english_list(known_fishes)].") + /datum/fish_source/proc/spawn_reward_from_explosion(atom/location, severity) if(!explosive_malus) explosive_spawn(location, severity) @@ -360,19 +454,135 @@ GLOBAL_LIST(fishing_property_cache) explosive_spawn(turf, exploded_turfs[turf], multiplier) exploded_turfs = null -/datum/fish_source/proc/explosive_spawn(location, severity, multiplier = 1) +/datum/fish_source/proc/explosive_spawn(atom/location, severity, multiplier = 1) for(var/i in 1 to (severity + 2)) if(!prob((100 + 100 * severity)/i * multiplier)) continue - var/reward_loot = pick_weight(fish_table) + var/reward_loot = pick_weight(get_fish_table()) var/atom/movable/reward = simple_dispense_reward(reward_loot, location, location) if(isnull(reward)) continue if(isfish(reward)) var/obj/item/fish/fish = reward - fish.set_status(FISH_DEAD) + fish.set_status(FISH_DEAD, silent = TRUE) if(isitem(reward)) reward.pixel_x = rand(-9, 9) reward.pixel_y = rand(-9, 9) if(severity >= EXPLODE_DEVASTATE) reward.ex_act(EXPLODE_LIGHT) + +///Called when releasing a fish in a fishing spot with the TRAIT_CATCH_AND_RELEASE trait. +/datum/fish_source/proc/readd_fish(obj/item/fish/fish, mob/living/releaser) + var/is_morbid = HAS_MIND_TRAIT(releaser, TRAIT_MORBID) + var/is_naive = HAS_MIND_TRAIT(releaser, TRAIT_NAIVE) + if(fish.status == FISH_DEAD) //ded fish won't repopulate the sea. + if(is_naive || is_morbid) + releaser.add_mood_event("fish_released", /datum/mood_event/fish_released, is_morbid && !is_naive, fish) + return + if(((fish.type in fish_table) != is_morbid) || is_naive) + releaser.add_mood_event("fish_released", /datum/mood_event/fish_released, is_morbid && !is_naive, fish) + if(isnull(fish_counts[fish.type])) //This fish can be caught indefinitely so it won't matter. + return + //If this fish population isn't recovering from recent losses, we just increase it. + if(!LAZYACCESS(currently_on_regen, fish.type)) + fish_counts[fish.type] += 1 + else + regen_count(fish.type) + +/** + * Called by /datum/autowiki/fish_sources unless the catalog entry for this fish source is null. + * It should Return a list of entries with keys named "name", "icon", "weight" and "notes" + * detailing the contents of this fish source. + */ +/datum/fish_source/proc/generate_wiki_contents(datum/autowiki/fish_sources/wiki) + var/list/data = list() + var/list/only_fish = list() + + var/total_weight = 0 + var/total_weight_without_bait = 0 + var/total_weight_no_fish = 0 + + var/list/tables_by_quality = list() + var/list/total_weight_by_quality = list() + var/list/total_weight_by_quality_no_fish = list() + + for(var/obj/item/fish/fish as anything in fish_table) + var/weight = fish_table[fish] + if(fish != FISHING_DUD) + total_weight += weight + if(!ispath(fish, /obj/item/fish)) + total_weight_without_bait += weight + total_weight_no_fish += weight + continue + if(initial(fish.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG) + only_fish += fish + total_weight_without_bait += round(fish_table[fish] * FISH_WEIGHT_MULT_WITHOUT_BAIT, 1) + + for(var/trait in weight_result_multiplier) + var/list/table_copy = fish_table.Copy() + table_copy -= FISHING_DUD + var/exponent = weight_leveling_exponents[trait] + var/multiplier = weight_result_multiplier[trait] + for(var/fish as anything in table_copy) + if(!ispath(fish, /obj/item/fish)) + continue + table_copy[fish] = round(table_copy[fish] * multiplier, 1) + + level_out_fish(table_copy, exponent) + tables_by_quality[trait] = table_copy + + var/tot_weight = 0 + var/tot_weight_no_fish = 0 + for(var/result in table_copy) + var/weight = table_copy[result] + tot_weight += weight + if(!ispath(result, /obj/item/fish)) + tot_weight_no_fish += weight + total_weight_by_quality[trait] = tot_weight + total_weight_by_quality_no_fish[trait] = tot_weight_no_fish + + //show the improved weights in ascending orders for fish. + tables_by_quality = reverseList(tables_by_quality) + + if(FISHING_DUD in fish_table) + data += LIST_VALUE_WRAP_LISTS(list( + FISH_SOURCE_AUTOWIKI_NAME = FISH_SOURCE_AUTOWIKI_DUD, + FISH_SOURCE_AUTOWIKI_ICON = "", + FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(fish_table[FISHING_DUD]/total_weight_without_bait), + FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX = "WITHOUT A BAIT", + FISH_SOURCE_AUTOWIKI_NOTES = "Unless you have a magnet or rescue hook or you know what you're doing, always use a bait", + )) + + for(var/obj/item/fish/fish as anything in only_fish) + var/weight = fish_table[fish] + var/deets = "Can be caught indefinitely" + if(fish in fish_counts) + deets = "It's quite rare and can only be caught up to [fish_counts[fish]] times" + if(fish in fish_count_regen) + deets += " every [DisplayTimeText(fish::breeding_timeout)]" + var/list/weight_deets = list() + for(var/trait in tables_by_quality) + weight_deets += "[round(PERCENT(tables_by_quality[trait][fish]/total_weight_by_quality[trait]), 0.1)]%" + var/weight_suffix = "([english_list(weight_deets, and_text = ", ")])" + data += LIST_VALUE_WRAP_LISTS(list( + FISH_SOURCE_AUTOWIKI_NAME = wiki.escape_value(full_capitalize(initial(fish.name))), + FISH_SOURCE_AUTOWIKI_ICON = FISH_AUTOWIKI_FILENAME(fish), + FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(weight/total_weight), + FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX = weight_suffix, + FISH_SOURCE_AUTOWIKI_NOTES = deets, + )) + + if(total_weight_no_fish) //There are things beside fish that we can catch. + var/list/weight_deets = list() + for(var/trait in tables_by_quality) + weight_deets += "[round(PERCENT(total_weight_by_quality_no_fish[trait]/total_weight_by_quality[trait]), 0.1)]%" + var/weight_suffix = "([english_list(weight_deets, and_text = ", ")])" + data += LIST_VALUE_WRAP_LISTS(list( + FISH_SOURCE_AUTOWIKI_NAME = FISH_SOURCE_AUTOWIKI_OTHER, + FISH_SOURCE_AUTOWIKI_ICON = FISH_SOURCE_AUTOWIKI_QUESTIONMARK, + FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(total_weight_no_fish/total_weight), + FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX = weight_suffix, + FISH_SOURCE_AUTOWIKI_NOTES = "Who knows what it may be. Try and find out", + )) + + return data diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm index bbec264b09235..06d508ffcabd8 100644 --- a/code/modules/fishing/sources/source_types.dm +++ b/code/modules/fishing/sources/source_types.dm @@ -1,25 +1,110 @@ /datum/fish_source/ocean + radial_state = "seaboat" + overlay_state = "portal_ocean" fish_table = list( // FISHING_DUD = 15, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. - /obj/item/coin/gold = 5, - /obj/item/fish/clownfish = 15, - /obj/item/fish/pufferfish = 15, - /obj/item/fish/cardinal = 15, - /obj/item/fish/greenchromis = 15, - /obj/item/fish/lanternfish = 5, - /obj/item/fish/zipzap = 5, - /obj/item/fish/clownfish/lube = 3, - /obj/structure/mystery_box/fishing = 1, + /obj/effect/spawner/message_in_a_bottle = 4, + /obj/item/coin/gold = 6, + /obj/item/fish/clownfish = 11, + /obj/item/fish/pufferfish = 11, + /obj/item/fish/cardinal = 11, + /obj/item/fish/greenchromis = 11, + /obj/item/fish/squid = 11, + /obj/item/fish/stingray = 8, + /obj/item/fish/plaice = 8, + /obj/item/fish/monkfish = 5, + /obj/item/fish/stingray = 10, + /obj/item/fish/lanternfish = 7, + /obj/item/fish/zipzap = 7, + /obj/item/fish/clownfish/lube = 5, + /obj/item/fish/swordfish = 5, + /obj/item/fish/swordfish = 3, + /obj/structure/mystery_box/fishing = 2, ) fish_counts = list( /obj/item/fish/clownfish/lube = 2, + /obj/item/fish/swordfish = 2, /obj/structure/mystery_box/fishing = 1, ) + fish_count_regen = list( + /obj/item/fish/clownfish/lube = 3 MINUTES, + /obj/item/fish/swordfish = 5 MINUTES, + ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 5 explosive_malus = TRUE /datum/fish_source/ocean/beach catalog_description = "Beach shore water" + radial_state = "palm_beach" + overlay_state = "portal_beach" + +/datum/fish_source/ice_fishing + catalog_description = "Ice-covered water" + radial_state = "ice" + overlay_state = "portal_ocean" + fish_table = list( + FISHING_DUD = 4, + /obj/item/fish/arctic_char = 5, + /obj/item/fish/sockeye_salmon = 5, + /obj/item/fish/chasm_crab/ice = 2, + /obj/item/fish/boned = 1, + ) + fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 20 + +/datum/fish_source/river + catalog_description = "River water" + radial_state = "river" + overlay_state = "portal_river" + fish_table = list( + FISHING_DUD = 4, + /obj/item/fish/goldfish = 5, + /obj/item/fish/guppy = 5, + /obj/item/fish/perch = 4, + /obj/item/fish/angelfish = 4, + /obj/item/fish/catfish = 4, + /obj/item/fish/perch = 5, + /obj/item/fish/slimefish = 2, + /obj/item/fish/sockeye_salmon = 1, + /obj/item/fish/arctic_char = 1, + /obj/item/fish/pike = 1, + /obj/item/fish/goldfish/three_eyes = 1, + ) + fish_counts = list( + /obj/item/fish/pike = 3, + ) + fish_count_regen = list( + /obj/item/fish/pike = 4 MINUTES, + ) + fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 5 + explosive_malus = TRUE + +/datum/fish_source/sand + catalog_description = "Sand" + radial_state = "palm_beach" + fish_table = list( + FISHING_DUD = 8, + /obj/item/fish/sand_crab = 10, + /obj/item/fish/sand_surfer = 10, + /obj/item/fish/bumpy = 10, + /obj/item/coin/gold = 3, + ) + fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 20 + explosive_malus = TRUE + +/datum/fish_source/cursed_spring + catalog_description = null //it's a secret (sorta, I know you're reading this) + radial_state = "cursed" + fish_table = list( + FISHING_DUD = 2, + /obj/item/fish/soul = 3, + /obj/item/fish/skin_crab = 3, + /obj/item/fishing_rod/telescopic/master = 1, + ) + fish_counts = list( + /obj/item/fishing_rod/telescopic/master = 1, + ) + fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 25 + explosive_malus = TRUE /datum/fish_source/portal fish_table = list( @@ -27,28 +112,36 @@ /obj/item/fish/goldfish = 10, /obj/item/fish/guppy = 10, /obj/item/fish/angelfish = 10, + /obj/item/fish/perch = 5, + /obj/item/fish/goldfish/three_eyes = 3, ) catalog_description = "Aquarium dimension (Fishing portal generator)" + radial_state = "fish_tank" ///The name of this option shown in the radial menu on the fishing portal generator var/radial_name = "Aquarium" - ///The icon state shown for this option in the radial menu - var/radial_state = "fish_tank" - ///The icon state of the overlay shown on the machine when active. - var/overlay_state = "portal_aquarium" /datum/fish_source/portal/beach fish_table = list( //FISHING_DUD = 10, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. + /obj/effect/spawner/message_in_a_bottle = 3, /obj/item/fish/clownfish = 10, /obj/item/fish/pufferfish = 10, /obj/item/fish/cardinal = 10, /obj/item/fish/greenchromis = 10, + /obj/item/fish/squid = 8, + /obj/item/fish/plaice = 8, ) catalog_description = "Beach dimension (Fishing portal generator)" radial_name = "Beach" radial_state = "palm_beach" overlay_state = "portal_beach" +/datum/fish_source/portal/beach/on_fishing_spot_init(datum/component/fishing_spot/spot) + ADD_TRAIT(spot.parent, TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION, INNATE_TRAIT) + +/datum/fish_source/portal/beach/on_fishing_spot_del(datum/component/fishing_spot/spot) + REMOVE_TRAIT(spot.parent, TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION, INNATE_TRAIT) + /datum/fish_source/portal/chasm background = "background_lavaland" fish_table = list( @@ -66,6 +159,7 @@ /datum/fish_source/portal/ocean fish_table = list( // FISHING_DUD = 5, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. + /obj/effect/spawner/message_in_a_bottle = 2, /obj/item/fish/lanternfish = 5, /obj/item/fish/firefish = 5, /obj/item/fish/dwarf_moonfish = 5, @@ -73,6 +167,15 @@ /obj/item/fish/needlefish = 5, /obj/item/fish/armorfish = 5, /obj/item/fish/zipzap = 5, + /obj/item/fish/stingray = 4, + /obj/item/fish/monkfish = 4, + /obj/item/fish/swordfish = 3, + ) + fish_counts = list( + /obj/item/fish/swordfish = 2, + ) + fish_count_regen = list( + /obj/item/fish/swordfish = 5 MINUTES, ) catalog_description = "Ocean dimension (Fishing portal generator)" fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 10 @@ -80,6 +183,12 @@ overlay_state = "portal_ocean" radial_state = "seaboat" +/datum/fish_source/portal/ocean/on_fishing_spot_init(datum/component/fishing_spot/spot) + ADD_TRAIT(spot.parent, TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION, INNATE_TRAIT) + +/datum/fish_source/portal/ocean/on_fishing_spot_del(datum/component/fishing_spot/spot) + REMOVE_TRAIT(spot.parent, TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION, INNATE_TRAIT) + /datum/fish_source/portal/hyperspace fish_table = list( // FISHING_DUD = 5, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. @@ -104,6 +213,16 @@ /obj/item/fish/donkfish = 5, /obj/item/fish/emulsijack = 5, /obj/item/fish/jumpercable = 5, + /obj/item/fish/chainsawfish = 2, + /obj/item/fish/pike/armored = 2, + ) + fish_counts = list( + /obj/item/fish/chainsawfish = 1, + /obj/item/fish/pike/armored = 1, + ) + fish_count_regen = list( + /obj/item/fish/chainsawfish = 7 MINUTES, + /obj/item/fish/pike/armored = 7 MINUTES, ) catalog_description = "Syndicate dimension (Fishing portal generator)" radial_name = "Syndicate" @@ -146,7 +265,7 @@ fish_table[reward_path] = rand(1, 4) ///Difficulty has to be calculated before the rest, because of how it influences jump chances -/datum/fish_source/portal/random/calculate_difficulty(result, obj/item/fishing_rod/rod, mob/fisherman, datum/fishing_challenge/challenge) +/datum/fish_source/portal/random/calculate_difficulty(datum/fishing_challenge/challenge, result, obj/item/fishing_rod/rod, mob/fisherman) . = ..() . += rand(-10, 15) @@ -155,8 +274,8 @@ challenge.bait_bounce_mult = clamp(challenge.bait_bounce_mult + (rand(-3, 3) * 0.1), 0.1, 1) challenge.completion_loss = max(challenge.completion_loss + rand(-2, 2), 0) challenge.completion_gain = max(challenge.completion_gain + rand(-1, 1), 2) - challenge.short_jump_velocity_limit += rand(-100, 100) - challenge.long_jump_velocity_limit += rand(-100, 100) + challenge.mover.short_jump_velocity_limit += rand(-100, 100) + challenge.mover.long_jump_velocity_limit += rand(-100, 100) var/static/list/active_effects = bitfield_to_list(FISHING_MINIGAME_ACTIVE_EFFECTS) for(var/effect in active_effects) if(prob(30)) @@ -180,19 +299,19 @@ new_traits |= pick_weight(weighted_traits) caught_fish.inherit_traits(new_traits) caught_fish.randomize_size_and_weight(deviation = 0.3) - caught_fish.progenitors = full_capitalize(caught_fish.name) return caught_fish /datum/fish_source/chasm catalog_description = "Chasm depths" background = "background_lavaland" + radial_state = "ground_hole" + overlay_state = "portal_chasm" fish_table = list( //FISHING_DUD = 5, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. /obj/item/fish/chasm_crab = 15, /datum/chasm_detritus = 30, ) - fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 5 /datum/fish_source/chasm/on_start_fishing(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) @@ -216,6 +335,8 @@ /datum/fish_source/lavaland catalog_description = "Lava vents" background = "background_lavaland" + radial_state = "lava" + overlay_state = "portal_lava" fish_table = list( // FISHING_DUD = 5, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. /obj/item/stack/ore/slag = 20, @@ -259,15 +380,17 @@ /datum/fish_source/moisture_trap catalog_description = "Moisture trap basins" + radial_state = "garbage" fish_table = list( // FISHING_DUD = 20, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. /obj/item/fish/ratfish = 10, - /obj/item/fish/slimefish = 4 + /obj/item/fish/slimefish = 4, ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 10 /datum/fish_source/toilet catalog_description = "Station toilets" + radial_state = "toilet" duds = list("ewww... nothing", "it was nothing", "it was toilet paper", "it was flushed away", "the hook is empty", "where's the damn money?!") fish_table = list( // FISHING_DUD = 18, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. @@ -293,6 +416,21 @@ ) fishing_difficulty = FISHING_EASY_DIFFICULTY +/datum/fish_source/holographic/on_fishing_spot_init(datum/component/fishing_spot/spot) + ADD_TRAIT(spot.parent, TRAIT_UNLINKABLE_FISHING_SPOT, REF(src)) //You would have to be inside the holodeck anyway... + +/datum/fish_source/holographic/on_fishing_spot_del(datum/component/fishing_spot/spot) + REMOVE_TRAIT(spot.parent, TRAIT_UNLINKABLE_FISHING_SPOT, REF(src)) + +/datum/fish_source/holographic/generate_wiki_contents(datum/autowiki/fish_sources/wiki) + var/obj/item/fish/prototype = /obj/item/fish/holo/checkered + return LIST_VALUE_WRAP_LISTS(list( + FISH_SOURCE_AUTOWIKI_NAME = "Holographic Fish", + FISH_SOURCE_AUTOWIKI_ICON = FISH_AUTOWIKI_FILENAME(prototype), + FISH_SOURCE_AUTOWIKI_WEIGHT = 100, + FISH_SOURCE_AUTOWIKI_NOTES = "Holographic fish disappears outside the Holodeck", + )) + /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)) @@ -312,6 +450,8 @@ /datum/fish_source/oil_well catalog_description = "Oil wells" + radial_state = "oil" + overlay_state = "portal_chasm" //close enough to pitch black fish_table = list( // FISHING_DUD = 5, BUBBERSTATION CHANGE: NO DUDS. HOLY SHIT. /obj/item/fish/boned = 10, @@ -319,22 +459,26 @@ /obj/item/clothing/gloves/bracer = 2, /obj/effect/decal/remains/human = 2, /obj/item/fish/mastodon = 1, + /obj/item/fishing_rod/telescopic/master = 1, ) fish_counts = list( /obj/item/clothing/gloves/bracer = 1, /obj/effect/decal/remains/human = 1, /obj/item/fish/mastodon = 1, + /obj/item/fishing_rod/telescopic/master = 1, + ) + fish_count_regen = list( + /obj/item/fish/mastodon = 8 MINUTES, ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 15 -#define RANDOM_SEED "Random seed" - /datum/fish_source/hydro_tray catalog_description = "Hydroponics trays" + radial_state = "hydro" fish_table = list( FISHING_DUD = 25, /obj/item/food/grown/grass = 25, - RANDOM_SEED = 16, + FISHING_RANDOM_SEED = 16, /obj/item/seeds/grass = 6, /obj/item/seeds/random = 1, /mob/living/basic/frog = 1, @@ -343,13 +487,55 @@ fish_counts = list( /obj/item/food/grown/grass = 10, /obj/item/seeds/grass = 4, - RANDOM_SEED = 4, + FISHING_RANDOM_SEED = 4, /obj/item/seeds/random = 1, /mob/living/basic/frog = 1, /mob/living/basic/axolotl = 1, ) fishing_difficulty = FISHING_EASY_DIFFICULTY - 5 +/datum/fish_source/hydro_tray/generate_wiki_contents(datum/autowiki/fish_sources/wiki) + var/list/data = list() + var/total_weight = 0 + var/critter_weight = 0 + var/seed_weight = 0 + var/other_weight = 0 + var/dud_weight = fish_table[FISHING_DUD] + for(var/content in fish_table) + var/weight = fish_table[content] + total_weight += weight + if(ispath(content, /mob/living)) + critter_weight += weight + else if(ispath(content, /obj/item/food/grown) || ispath(content, /obj/item/seeds) || content == FISHING_RANDOM_SEED) + seed_weight += weight + else if(content != FISHING_DUD) + other_weight += weight + + data += LIST_VALUE_WRAP_LISTS(list( + FISH_SOURCE_AUTOWIKI_NAME = FISH_SOURCE_AUTOWIKI_DUD, + FISH_SOURCE_AUTOWIKI_DUD = "", + FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(dud_weight/total_weight), + FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX = "WITHOUT A BAIT", + FISH_SOURCE_AUTOWIKI_NOTES = "", + )) + + data += LIST_VALUE_WRAP_LISTS(list( + FISH_SOURCE_AUTOWIKI_NAME = "Critter", + FISH_SOURCE_AUTOWIKI_DUD = "", + FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(critter_weight/total_weight), + FISH_SOURCE_AUTOWIKI_NOTES = "A small creature, usually a frog or an axolotl", + )) + + if(other_weight) + data += LIST_VALUE_WRAP_LISTS(list( + FISH_SOURCE_AUTOWIKI_NAME = "Other Stuff", + FISH_SOURCE_AUTOWIKI_DUD = "", + FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(other_weight/total_weight), + FISH_SOURCE_AUTOWIKI_NOTES = "Other stuff, who knows...", + )) + + return data + /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 ..() @@ -372,7 +558,7 @@ return ..() /datum/fish_source/hydro_tray/spawn_reward(reward_path, mob/fisherman, turf/fishing_spot) - if(reward_path != RANDOM_SEED) + if(reward_path != FISHING_RANDOM_SEED) var/mob/living/created_reward = ..() if(istype(created_reward)) created_reward.name = "small [created_reward.name]" @@ -394,4 +580,23 @@ var/picked_path = pick(seeds_to_draw_from) return new picked_path(get_turf(fishing_spot)) -#undef RANDOM_SEED +/datum/fish_source/deepfryer + catalog_description = "Deep Fryers" + radial_state = "fryer" + fish_table = list( + /obj/item/food/badrecipe = 15, + /obj/item/food/nugget = 5, + /obj/item/fish/fryish = 40, + /obj/item/fish/fryish/fritterish = 4, + /obj/item/fish/fryish/nessie = 1, + ) + fish_counts = list( + /obj/item/fish/fryish = 10, + /obj/item/fish/fryish/fritterish = 4, + /obj/item/fish/fryish/nessie = 1, + ) + fish_count_regen = list( + /obj/item/fish/fryish = 2 MINUTES, + /obj/item/fish/fryish/fritterish = 6 MINUTES, + ) + fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 13 diff --git a/code/modules/food_and_drinks/machinery/coffeemaker.dm b/code/modules/food_and_drinks/machinery/coffeemaker.dm index 5fdd296d7fc69..a559d707af948 100644 --- a/code/modules/food_and_drinks/machinery/coffeemaker.dm +++ b/code/modules/food_and_drinks/machinery/coffeemaker.dm @@ -731,7 +731,6 @@ coffeepot.reagents.add_reagent_list(reagent_delta) qdel(reference_bean) - // remove the coffee beans from the machine coffee.Cut(1,2) coffee_amount-- diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index f698ebe39e0e4..eb143b0422d7b 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -63,6 +63,8 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( reagents.add_reagent(/datum/reagent/consumable/nutriment/fat/oil, 25) fry_loop = new(src, FALSE) RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(on_cleaned)) + AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/deepfryer) + AddElement(/datum/element/fish_safe_storage) //Prevents fryish and fritterish from dying inside the deepfryer. /obj/machinery/deepfryer/Destroy() QDEL_NULL(fry_loop) @@ -154,7 +156,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( reagents.trans_to(frying, oil_use * seconds_per_tick, multiplier = fry_speed * 3) //Fried foods gain more of the reagent thanks to space magic grease_level += prob(grease_increase_chance) * grease_Increase_amount - cook_time += fry_speed * seconds_per_tick + cook_time += fry_speed * seconds_per_tick SECONDS if(cook_time >= DEEPFRYER_COOKTIME && !frying_fried) frying_fried = TRUE //frying... frying... fried playsound(src.loc, 'sound/machines/ding.ogg', 50, TRUE) diff --git a/code/modules/food_and_drinks/machinery/food_cart.dm b/code/modules/food_and_drinks/machinery/food_cart.dm index a14ea3593c51a..9549bcc7ae1d3 100644 --- a/code/modules/food_and_drinks/machinery/food_cart.dm +++ b/code/modules/food_and_drinks/machinery/food_cart.dm @@ -86,7 +86,7 @@ return var/obj/item/card/id/id_card = user.get_idcard(hand_first = TRUE) if(!check_access(id_card)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return to_chat(user, span_notice("You attempt to [unpacked ? "pack up" :"unpack"] [src]...")) if(!do_after(user, 5 SECONDS, src)) diff --git a/code/modules/food_and_drinks/machinery/griddle.dm b/code/modules/food_and_drinks/machinery/griddle.dm index e0c45e6c9af10..ed1884c89af27 100644 --- a/code/modules/food_and_drinks/machinery/griddle.dm +++ b/code/modules/food_and_drinks/machinery/griddle.dm @@ -73,8 +73,8 @@ return if(user.transferItemToLoc(I, src, silent = FALSE)) //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) - I.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) - I.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) + I.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(ICON_SIZE_X/2), ICON_SIZE_X/2) + I.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(ICON_SIZE_Y/2), ICON_SIZE_Y/2) to_chat(user, span_notice("You place [I] on [src].")) AddToGrill(I, user) else diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm index 355601693b9d2..b58af21331eab 100644 --- a/code/modules/food_and_drinks/machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm @@ -1,5 +1,5 @@ ///How many units of a reagent is needed to make a cone. -#define CONE_REAGENET_NEEDED 1 +#define CONE_REAGENT_NEEDED 1 ///The vat is set to dispense ice cream. #define VAT_MODE_ICECREAM "ice cream" @@ -242,7 +242,7 @@ ///Makes an ice cream cone of the make_type, using ingredients list as reagents used to make it. Puts in user's hand if possible. /obj/machinery/icecream_vat/proc/make_cone(mob/user, make_type, list/ingredients) for(var/reagents_needed in ingredients) - if(!reagents.has_reagent(reagents_needed, CONE_REAGENET_NEEDED)) + if(!reagents.has_reagent(reagents_needed, CONE_REAGENT_NEEDED)) balloon_alert(user, "not enough ingredients!") return var/cone_type = cone_prototypes[make_type].type @@ -251,7 +251,7 @@ var/obj/item/food/icecream/cone = new cone_type(src) for(var/reagents_used in ingredients) - reagents.remove_reagent(reagents_used, CONE_REAGENET_NEEDED) + reagents.remove_reagent(reagents_used, CONE_REAGENT_NEEDED) balloon_alert_to_viewers("cooks up [cone.name]", "cooks up [cone.name]") try_put_in_hand(cone, user) @@ -262,14 +262,14 @@ CRASH("[user] was making ice cream of [selected_flavour] but had no flavor datum for it!") for(var/reagents_needed in flavor.ingredients) - if(!reagents.has_reagent(reagents_needed, CONE_REAGENET_NEEDED)) + if(!reagents.has_reagent(reagents_needed, CONE_REAGENT_NEEDED)) balloon_alert(user, "not enough ingredients!") return var/should_use_custom_ingredients = (flavor.takes_custom_ingredients && custom_ice_cream_beaker && custom_ice_cream_beaker.reagents.total_volume) if(flavor.add_flavour(source, should_use_custom_ingredients ? custom_ice_cream_beaker.reagents : null)) for(var/reagents_used in flavor.ingredients) - reagents.remove_reagent(reagents_used, CONE_REAGENET_NEEDED) + reagents.remove_reagent(reagents_used, CONE_REAGENT_NEEDED) balloon_alert_to_viewers("scoops [selected_flavour]", "scoops [selected_flavour]") if(istype(cone)) @@ -297,4 +297,4 @@ #undef VAT_MODE_ICECREAM #undef VAT_MODE_CONES -#undef CONE_REAGENET_NEEDED +#undef CONE_REAGENT_NEEDED diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index 4fa586401ff56..ae6e3945c94b4 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -381,12 +381,20 @@ if(operating) return NONE - if (item.item_flags & ABSTRACT) + if(item.item_flags & ABSTRACT) + return NONE + + if(dirty >= MAX_MICROWAVE_DIRTINESS) // The microwave is all dirty so can't be used! + if(IS_EDIBLE(item)) + balloon_alert(user, "it's too dirty!") + return ITEM_INTERACT_BLOCKING return NONE if(broken > NOT_BROKEN) - balloon_alert(user, "it's broken!") - return ITEM_INTERACT_BLOCKING + if(IS_EDIBLE(item)) + balloon_alert(user, "it's broken!") + return ITEM_INTERACT_BLOCKING + return NONE if(istype(item, /obj/item/stock_parts/power_store/cell) && cell_powered) var/swapped = FALSE @@ -405,12 +413,10 @@ return ITEM_INTERACT_SUCCESS if(!anchored) - balloon_alert(user, "not secured!") - return ITEM_INTERACT_BLOCKING - - if(dirty >= MAX_MICROWAVE_DIRTINESS) // The microwave is all dirty so can't be used! - balloon_alert(user, "it's too dirty!") - return ITEM_INTERACT_BLOCKING + if(IS_EDIBLE(item)) + balloon_alert(user, "not secured!") + return ITEM_INTERACT_BLOCKING + return NONE if(vampire_charging_capable && istype(item, /obj/item/modular_computer) && ingredients.len > 0) balloon_alert(user, "max 1 device!") @@ -483,7 +489,7 @@ vampire_charging_enabled = !vampire_charging_enabled balloon_alert(user, "set to [vampire_charging_enabled ? "charge" : "cook"]") - playsound(src, 'sound/machines/twobeep_high.ogg', 50, FALSE) + playsound(src, 'sound/machines/beep/twobeep_high.ogg', 50, FALSE) if(HAS_SILICON_ACCESS(user)) visible_message(span_notice("[user] sets \the [src] to [vampire_charging_enabled ? "charge" : "cook"]."), blind_message = span_notice("You hear \the [src] make an informative beep!")) return CLICK_ACTION_SUCCESS @@ -582,11 +588,11 @@ if(wire_disabled) audible_message("[src] buzzes.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) return if(cell_powered && cell?.charge < TIER_1_CELL_CHARGE_RATE * efficiency) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) balloon_alert(cooker, "no power draw!") return @@ -622,7 +628,7 @@ /obj/machinery/microwave/proc/wzhzhzh() if(cell_powered && !isnull(cell)) if(!cell.use(TIER_1_CELL_CHARGE_RATE * efficiency)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) return visible_message(span_notice("\The [src] turns on."), null, span_hear("You hear a microwave humming.")) @@ -802,13 +808,13 @@ /obj/machinery/microwave/proc/vampire(mob/cooker) var/obj/item/modular_computer/vampire_pda = LAZYACCESS(ingredients, 1) if(isnull(vampire_pda)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) after_finish_loop() return vampire_cell = vampire_pda.internal_cell if(isnull(vampire_cell)) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) after_finish_loop() return @@ -819,7 +825,7 @@ /obj/machinery/microwave/proc/charge(mob/cooker) if(!vampire_charging_capable) balloon_alert(cooker, "needs upgrade!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) return if(operating || broken > 0 || panel_open || dirty >= MAX_MICROWAVE_DIRTINESS) @@ -827,14 +833,14 @@ if(wire_disabled) audible_message("[src] buzzes.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) return // We should only be charging PDAs for(var/atom/movable/potential_item as anything in ingredients) if(!istype(potential_item, /obj/item/modular_computer)) balloon_alert(cooker, "pda only!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) eject() return diff --git a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm index 56fd1869261ba..960bb01dc301d 100644 --- a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm @@ -31,9 +31,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.125 // SKYRAT EDIT CHANGE - buffs to allow 1 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.125 // SKYRAT EDIT CHANGE - buffs to allow 1 cubes per monkey at T4 - ORIGINAL: cube_production += matter_bin.tier * 0.1 /obj/machinery/monkey_recycler/examine(mob/user) . = ..() diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index 858e4cd7aefcf..3a097d7047e94 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -203,7 +203,7 @@ /// Returns details related to the fridge structure /obj/machinery/smartfridge/proc/structure_examine() - . = "" + . = list() if(welded_down) . += span_info("It's moorings are firmly [EXAMINE_HINT("welded")] to the floor.") @@ -253,9 +253,9 @@ /obj/machinery/smartfridge/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(src.loc, 'sound/effects/glasshit.ogg', 75, TRUE) + playsound(src.loc, 'sound/effects/glass/glasshit.ogg', 75, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/machinery/smartfridge/atom_break(damage_flag) playsound(src, SFX_SHATTER, 50, TRUE) @@ -313,7 +313,7 @@ to_chat(user, span_warning("\The [src]'s magnetic door won't open without power!")) return FALSE - if(!user.combat_mode) + if(!user.combat_mode || (weapon.item_flags & NOBLUDGEON)) to_chat(user, span_warning("\The [src] smartly refuses [weapon].")) return FALSE @@ -343,7 +343,7 @@ 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]!")) + to_chat(owner, span_warning("\the [weapon] is stuck to your hand, you cannot put it in \the [src]!")) return FALSE return TRUE else @@ -396,43 +396,39 @@ if(. || !ui.user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return - . = TRUE var/mob/living_mob = ui.user switch(action) if("Release") var/amount = text2num(params["amount"]) - var/desired = 1 + if(isnull(amount) || !isnum(amount)) + return TRUE var/dispensed_amount = 0 if(isAI(living_mob)) to_chat(living_mob, span_warning("[src] does not respect your authority!")) - return - - if (amount > 1) - desired = tgui_input_number(living_mob, "How many items would you like to take out?", "Release", default = min(amount, 50), max_value = min(amount, 50)) - if(!desired) - return + return TRUE - for(var/obj/item/dispensed_item in src) - if(desired <= 0) + for(var/obj/item/dispensed_item in contents) + if(amount <= 0) break var/item_name = "[dispensed_item.type]-[replacetext(replacetext(dispensed_item.name, "\proper", ""), "\improper", "")]" - if(params["path"] == item_name) - if(dispensed_item in component_parts) - CRASH("Attempted removal of [dispensed_item] component_part from smartfridge via smartfridge interface.") - //dispense the item - if(!living_mob.put_in_hands(dispensed_item)) - dispensed_item.forceMove(drop_location()) - adjust_item_drop_location(dispensed_item) - use_energy(active_power_usage) - dispensed_amount++ - desired-- + if(params["path"] != item_name) + continue + if(dispensed_item in component_parts) + CRASH("Attempted removal of [dispensed_item] component_part from smartfridge via smartfridge interface.") + //dispense the item + if(!living_mob.put_in_hands(dispensed_item)) + dispensed_item.forceMove(drop_location()) + adjust_item_drop_location(dispensed_item) + use_energy(active_power_usage) + dispensed_amount++ + amount-- if(dispensed_amount && vend_sound) playsound(src, vend_sound, 50, TRUE, extrarange = -3) if (visible_contents) update_appearance() - return + return TRUE return FALSE @@ -480,15 +476,16 @@ .["isdryer"] = TRUE .["drying"] = drying -/obj/machinery/smartfridge/drying/ui_act(action, params) +/obj/machinery/smartfridge/drying/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) update_appearance() // This is to handle a case where the last item is taken out manually instead of through drying pop-out return + var/mob/user = ui.user switch(action) if("Dry") - toggle_drying(FALSE, usr) + toggle_drying(FALSE, user) return TRUE /obj/machinery/smartfridge/drying/powered() diff --git a/code/modules/food_and_drinks/machinery/stove_component.dm b/code/modules/food_and_drinks/machinery/stove_component.dm index fcbabafc2d12c..76f52345c8c35 100644 --- a/code/modules/food_and_drinks/machinery/stove_component.dm +++ b/code/modules/food_and_drinks/machinery/stove_component.dm @@ -132,7 +132,7 @@ real_parent.balloon_alert_to_viewers("burners [on ? "on" : "off"]") playsound(real_parent, 'sound/machines/click.ogg', 30, TRUE) - playsound(real_parent, on ? 'sound/items/welderactivate.ogg' : 'sound/items/welderdeactivate.ogg', 15, TRUE) + playsound(real_parent, on ? 'sound/items/tools/welderactivate.ogg' : 'sound/items/tools/welderdeactivate.ogg', 15, TRUE) /datum/component/stove/proc/on_attackby(obj/machinery/source, obj/item/attacking_item, mob/user, params) SIGNAL_HANDLER @@ -267,7 +267,7 @@ return // this gets badly murdered by sidemap soup_smoke = new(parent, particle_type) - soup_smoke.set_particle_position(container_x, round(world.icon_size * 0.66), 0) + soup_smoke.set_particle_position(container_x, round(ICON_SIZE_Y * 0.66), 0) return QDEL_NULL(soup_smoke) diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index add7eecaf92e0..ef88a4758115b 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -121,7 +121,7 @@ icon = 'icons/obj/service/kitchen.dmi' icon_state = "plate_shard1" base_icon_state = "plate_shard" - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' w_class = WEIGHT_CLASS_TINY force = 5 throwforce = 5 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 77606f5e37210..78b9623c3a016 100644 --- a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm +++ b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm @@ -224,7 +224,7 @@ /datum/chemical_reaction/drink/moscow_mule results = list(/datum/reagent/consumable/ethanol/moscow_mule = 10) required_reagents = list(/datum/reagent/consumable/sol_dry = 5, /datum/reagent/consumable/ethanol/vodka = 5, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/ice = 1) - mix_sound = 'sound/effects/bubbles2.ogg' + mix_sound = 'sound/effects/bubbles/bubbles2.ogg' /datum/chemical_reaction/drink/painkiller results = list(/datum/reagent/consumable/ethanol/painkiller = 10) @@ -361,7 +361,7 @@ /datum/chemical_reaction/drink/bacchus_blessing results = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 4) required_reagents = list(/datum/reagent/consumable/ethanol/hooch = 1, /datum/reagent/consumable/ethanol/absinthe = 1, /datum/reagent/consumable/ethanol/manly_dorf = 1, /datum/reagent/consumable/ethanol/syndicatebomb = 1) - mix_message = "The mixture turns to a sickening froth." + mix_message = span_warning("The mixture turns to a sickening froth.") /datum/chemical_reaction/drink/eggnog results = list(/datum/reagent/consumable/ethanol/eggnog = 15) @@ -378,7 +378,7 @@ results = list(/datum/reagent/consumable/ethanol/quadruple_sec = 15) required_reagents = list(/datum/reagent/consumable/ethanol/triple_sec = 5, /datum/reagent/consumable/triple_citrus = 5, /datum/reagent/consumable/grenadine = 5) mix_message = "The snap of a taser emanates clearly from the mixture as it settles." - mix_sound = 'sound/weapons/taser.ogg' + mix_sound = 'sound/items/weapons/taser.ogg' reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_OTHER /datum/chemical_reaction/drink/grasshopper @@ -394,7 +394,7 @@ results = list(/datum/reagent/consumable/ethanol/quintuple_sec = 15) required_reagents = list(/datum/reagent/consumable/ethanol/quadruple_sec = 5, /datum/reagent/consumable/nutriment/soup/clown_tears = 5, /datum/reagent/consumable/ethanol/syndicatebomb = 5) mix_message = "Judgement is upon you." - mix_sound = 'sound/items/airhorn2.ogg' + mix_sound = 'sound/items/airhorn/airhorn2.ogg' reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_OTHER /datum/chemical_reaction/drink/bastion_bourbon @@ -481,14 +481,14 @@ results = list(/datum/reagent/consumable/ethanol/wizz_fizz = 3) required_reagents = list(/datum/reagent/consumable/ethanol/triple_sec = 1, /datum/reagent/consumable/sodawater = 1, /datum/reagent/consumable/ethanol/champagne = 1) mix_message = "The beverage starts to froth with an almost mystical zeal!" - mix_sound = 'sound/effects/bubbles2.ogg' + mix_sound = 'sound/effects/bubbles/bubbles2.ogg' reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_OTHER /datum/chemical_reaction/drink/bug_spray results = list(/datum/reagent/consumable/ethanol/bug_spray = 5) required_reagents = list(/datum/reagent/consumable/ethanol/triple_sec = 2, /datum/reagent/consumable/lemon_lime = 1, /datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/ethanol/vodka = 1) mix_message = "The faint aroma of summer camping trips wafts through the air; but what's that buzzing noise?" - mix_sound = 'sound/creatures/bee.ogg' + mix_sound = 'sound/mobs/non-humanoids/bee/bee.ogg' reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_OTHER /datum/chemical_reaction/drink/jack_rose @@ -579,7 +579,7 @@ results = list(/datum/reagent/consumable/ethanol/pod_tesla = 15) required_reagents = list(/datum/reagent/consumable/ethanol/telepole = 5, /datum/reagent/consumable/ethanol/brave_bull = 3, /datum/reagent/consumable/ethanol/admiralty = 5) mix_message = "Arcs of lightning fly from the mixture." - mix_sound = 'sound/weapons/zapbang.ogg' + mix_sound = 'sound/items/weapons/zapbang.ogg' /datum/chemical_reaction/drink/yuyakita results = list(/datum/reagent/consumable/ethanol/yuyakita = 4) diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index e9a9405264ac0..cfdac1630d63e 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -1,5 +1,6 @@ /datum/crafting_recipe/food mass_craftable = TRUE + crafting_flags = parent_type::crafting_flags | CRAFT_TRANSFERS_REAGENTS | CRAFT_CLEARS_REAGENTS /datum/crafting_recipe/food/on_craft_completion(mob/user, atom/result) SHOULD_CALL_PARENT(TRUE) @@ -277,7 +278,7 @@ results = list(/datum/reagent/consumable/salt = 2) required_reagents = list(/datum/reagent/consumable/liquidelectricity/enriched = 2, /datum/reagent/consumable/grounding_solution = 1) mix_message = "The mixture lets off a sharp snap as the electricity discharges." - mix_sound = 'sound/weapons/taser.ogg' + mix_sound = 'sound/items/weapons/taser.ogg' reaction_flags = REACTION_INSTANT /datum/chemical_reaction/food/martian_batter diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm index 3ff29e194c719..14f93b45cd8dc 100644 --- a/code/modules/food_and_drinks/recipes/processor_recipes.dm +++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm @@ -139,3 +139,7 @@ output = /obj/item/popsicle_stick food_multiplier = 3 preserve_materials = FALSE + +/datum/food_processor_process/canned_ink + input = /obj/item/food/ink_sac + output = /obj/item/food/canned/squid_ink diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index 2b10fe169c272..c69de62fbfc97 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -245,7 +245,7 @@ // Everything else will just get fried if(isnull(ingredient.reagents) && !is_type_in_list(ingredient, required_ingredients)) - ingredient.AddElement(/datum/element/fried_item, 30) + ingredient.AddElement(/datum/element/fried_item, 30 SECONDS) continue // Things that had reagents or ingredients in the soup will get deleted @@ -710,7 +710,7 @@ /datum/chemical_reaction/food/soup/bloodsoup required_reagents = list( - /datum/reagent/water/salt = 10, // SKYRAT EDIT CHANGE - ORIGINAL: /datum/reagent/water = 10, + /datum/reagent/water = 10, /datum/reagent/blood = 10, ) required_ingredients = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm index e5589fcc42d43..5a754361ffb1f 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm @@ -1,6 +1,10 @@ // This is the home of drink related tablecrafting recipes, I have opted to only let players bottle fancy boozes to reduce the number of entries. +///Abstract types for all drink recipes that use bottles and result in another bottle, so that the message_in_a_bottle item is properly transferred. +/datum/crafting_recipe/bottled + parts = list(/obj/item/reagent_containers/cup/glass/bottle = 1) + ///////////////// Booze & Bottles /////////////////// /datum/crafting_recipe/lizardwine @@ -14,7 +18,7 @@ result = /obj/item/reagent_containers/cup/glass/bottle/lizardwine category = CAT_DRINK -/datum/crafting_recipe/moonshinejug +/datum/crafting_recipe/bottled/moonshinejug name = "Moonshine Jug" time = 30 reqs = list( @@ -24,7 +28,7 @@ result = /obj/item/reagent_containers/cup/glass/bottle/moonshine category = CAT_DRINK -/datum/crafting_recipe/hoochbottle +/datum/crafting_recipe/bottled/hoochbottle name = "Hooch Bottle" time = 30 reqs = list( @@ -35,7 +39,7 @@ result = /obj/item/reagent_containers/cup/glass/bottle/hooch category = CAT_DRINK -/datum/crafting_recipe/blazaambottle +/datum/crafting_recipe/bottled/blazaambottle name = "Blazaam Bottle" time = 20 reqs = list( @@ -45,7 +49,7 @@ result = /obj/item/reagent_containers/cup/glass/bottle/blazaam category = CAT_DRINK -/datum/crafting_recipe/champagnebottle +/datum/crafting_recipe/bottled/champagnebottle name = "Champagne Bottle" time = 30 reqs = list( @@ -55,7 +59,7 @@ result = /obj/item/reagent_containers/cup/glass/bottle/champagne category = CAT_DRINK -/datum/crafting_recipe/trappistbottle +/datum/crafting_recipe/bottled/trappistbottle name = "Trappist Bottle" time = 15 reqs = list( @@ -65,7 +69,7 @@ result = /obj/item/reagent_containers/cup/glass/bottle/trappist category = CAT_DRINK -/datum/crafting_recipe/goldschlagerbottle +/datum/crafting_recipe/bottled/goldschlagerbottle name = "Goldschlager Bottle" time = 30 reqs = list( @@ -75,7 +79,7 @@ result = /obj/item/reagent_containers/cup/glass/bottle/goldschlager category = CAT_DRINK -/datum/crafting_recipe/patronbottle +/datum/crafting_recipe/bottled/patronbottle name = "Patron Bottle" time = 30 reqs = list( @@ -87,7 +91,7 @@ ////////////////////// Non-alcoholic recipes /////////////////// -/datum/crafting_recipe/holybottle +/datum/crafting_recipe/bottled/holybottle name = "Holy Water Flask" time = 30 reqs = list( @@ -99,7 +103,7 @@ //flask of unholy water is a beaker for some reason, I will try making it a bottle and add it here once the antag freeze is over. t. kryson -/datum/crafting_recipe/nothingbottle +/datum/crafting_recipe/bottled/nothingbottle name = "Nothing Bottle" time = 30 reqs = list( @@ -116,7 +120,7 @@ reqs = list(/obj/item/stack/sheet/cardboard = 1) category = CAT_CONTAINERS -/datum/crafting_recipe/candycornliquor +/datum/crafting_recipe/bottled/candycornliquor name = "candy corn liquor" result = /obj/item/reagent_containers/cup/glass/bottle/candycornliquor time = 30 @@ -125,7 +129,7 @@ /obj/item/reagent_containers/cup/glass/bottle = 1) category = CAT_DRINK -/datum/crafting_recipe/kong +/datum/crafting_recipe/bottled/kong name = "Kong" result = /obj/item/reagent_containers/cup/glass/bottle/kong time = 30 diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index 4b78482867a5f..cc27a6f078bef 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -282,7 +282,7 @@ category = CAT_MISCFOOD /datum/crafting_recipe/food/pacoca - name = "Pacoca" + name = "Paçoca" reqs = list( /obj/item/food/grown/peanut = 2, /datum/reagent/consumable/sugar = 5, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index c965526bcb1c6..8798f7cd8806c 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -13,6 +13,14 @@ result = /obj/item/food/donut/plain category = CAT_PASTRY +// It is so stupid that we have to do this but because food crafting clears all reagents that got added during init, +// here we are adding it again (but only for crafting, maploaded and spawned donuts work fine). +// Until the issues with crafted items' reagents are resolved this will have to do +/datum/crafting_recipe/food/donut/on_craft_completion(mob/user, atom/result) + . = ..() + var/obj/item/food/donut/donut_result = result + if(donut_result.is_decorated) + donut_result.reagents.add_reagent(/datum/reagent/consumable/sprinkles, 1) /datum/crafting_recipe/food/donut/chaos name = "Chaos donut" diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm index 8ed91683c0523..0bd29c51054db 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm @@ -67,7 +67,6 @@ /obj/item/food/grown/apple = 2, /obj/item/food/grown/grapes = 2, /obj/item/food/grown/banana = 2, - /obj/item/food/watermelonslice = 2 ) result = /obj/item/food/salad/jungle diff --git a/code/modules/food_and_drinks/restaurant/_venue.dm b/code/modules/food_and_drinks/restaurant/_venue.dm index 3c694a0350978..c03772ae20449 100644 --- a/code/modules/food_and_drinks/restaurant/_venue.dm +++ b/code/modules/food_and_drinks/restaurant/_venue.dm @@ -242,8 +242,8 @@ if(linked_venue && linked_venue.restaurant_portal) //We're already linked, unlink us. if(linked_venue.open) linked_venue.close() - linked_venue.restaurant_portal.linked_venue = null linked_venue.restaurant_portal = null + linked_venue = null linked_venue = chosen_venue linked_venue.restaurant_portal = src diff --git a/code/modules/food_and_drinks/restaurant/customers/_customer.dm b/code/modules/food_and_drinks/restaurant/customers/_customer.dm index c9011ad8c8a28..7856323cad7fc 100644 --- a/code/modules/food_and_drinks/restaurant/customers/_customer.dm +++ b/code/modules/food_and_drinks/restaurant/customers/_customer.dm @@ -39,7 +39,7 @@ ///Base icon state for the customer var/base_icon_state = "amerifat" ///Sound to use when this robot type speaks - var/speech_sound = 'sound/creatures/tourist/tourist_talk.ogg' + var/speech_sound = 'sound/mobs/non-humanoids/tourist/tourist_talk.ogg' /// Is this unique once per venue? var/is_unique = FALSE @@ -159,7 +159,7 @@ first_warning_line = "Get your hands off of me!" second_warning_line = "Do not touch me you filthy animal, last warning!" self_defense_line = "I will break you like a baguette!" - speech_sound = 'sound/creatures/tourist/tourist_talk_french.ogg' + speech_sound = 'sound/mobs/non-humanoids/tourist/tourist_talk_french.ogg' orderable_objects = list( VENUE_RESTAURANT = list( /obj/item/food/baguette = 20, @@ -203,7 +203,7 @@ first_warning_line = "Don't touch me you pervert!" second_warning_line = "I'm going to go super saiyan if you touch me again! Last warning!" self_defense_line = "OMAE WA MO, SHINDEROU!" - speech_sound = 'sound/creatures/tourist/tourist_talk_japanese1.ogg' + speech_sound = 'sound/mobs/non-humanoids/tourist/tourist_talk_japanese1.ogg' orderable_objects = list( VENUE_RESTAURANT = list( /datum/custom_order/icecream = 4, @@ -247,7 +247,7 @@ first_warning_line = "Hey, only my employer gets to mess with me like that." second_warning_line = "Leave me be, I'm trying to focus. Last warning!" self_defense_line = "I didn't want it to end up like this." - speech_sound = 'sound/creatures/tourist/tourist_talk_japanese2.ogg' + speech_sound = 'sound/mobs/non-humanoids/tourist/tourist_talk_japanese2.ogg' orderable_objects = list( VENUE_RESTAURANT = list( /datum/reagent/consumable/nutriment/soup/miso = 6, @@ -282,7 +282,7 @@ second_warning_line = "Last warning! I'll destroy you!" self_defense_line = "Flap attack!" - speech_sound = 'sound/creatures/tourist/tourist_talk_moth.ogg' + speech_sound = 'sound/mobs/non-humanoids/tourist/tourist_talk_moth.ogg' orderable_objects = list( VENUE_RESTAURANT = list( @@ -342,7 +342,7 @@ /datum/customer_data/mexican base_icon_state = "mexican" prefix_file = "strings/names/mexican_prefix.txt" - speech_sound = 'sound/creatures/tourist/tourist_talk_mexican.ogg' + speech_sound = 'sound/mobs/non-humanoids/tourist/tourist_talk_mexican.ogg' clothing_sets = list("mexican_poncho") orderable_objects = list( VENUE_RESTAURANT = list( @@ -382,7 +382,7 @@ /datum/customer_data/british base_icon_state = "british" prefix_file = "strings/names/british_prefix.txt" - speech_sound = 'sound/creatures/tourist/tourist_talk_british.ogg' + speech_sound = 'sound/mobs/non-humanoids/tourist/tourist_talk_british.ogg' friendly_pull_line = "I don't enjoy being pulled around like this." first_warning_line = "Our sovereign lord the Queen chargeth and commandeth all persons, being assembled, immediately to disperse themselves." diff --git a/code/modules/hallucination/battle.dm b/code/modules/hallucination/battle.dm index 4bbf9729cdeb6..2a50093e3a015 100644 --- a/code/modules/hallucination/battle.dm +++ b/code/modules/hallucination/battle.dm @@ -11,9 +11,9 @@ /// The upper end to how many shots we'll fire. var/shots_to_fire_upper_range = 6 /// The sound effect we play when we "fire" a shot. - var/fire_sound = 'sound/weapons/gun/shotgun/shot.ogg' + var/fire_sound = 'sound/items/weapons/gun/shotgun/shot.ogg' /// The sound we make when our shot actually "hits" "someone". - var/hit_person_sound = 'sound/weapons/pierce.ogg' + var/hit_person_sound = 'sound/items/weapons/pierce.ogg' /// The sound we make when our shot misses someone and "hits" a "wall". var/hit_wall_sound = SFX_RICOCHET /// The number of successful hits required to "down" the "someone" we're firing at. @@ -60,9 +60,9 @@ /datum/hallucination/battle/gun/disabler shots_to_fire_lower_range = 5 shots_to_fire_upper_range = 10 - fire_sound = 'sound/weapons/taser2.ogg' - hit_person_sound = 'sound/weapons/tap.ogg' - hit_wall_sound = 'sound/weapons/effects/searwall.ogg' + fire_sound = 'sound/items/weapons/taser2.ogg' + hit_person_sound = 'sound/items/weapons/tap.ogg' + hit_wall_sound = 'sound/items/weapons/effects/searwall.ogg' number_of_hits_to_end = 3 chance_to_fall = 70 @@ -70,9 +70,9 @@ /datum/hallucination/battle/gun/laser shots_to_fire_lower_range = 5 shots_to_fire_upper_range = 10 - fire_sound = 'sound/weapons/laser.ogg' - hit_person_sound = 'sound/weapons/sear.ogg' - hit_wall_sound = 'sound/weapons/effects/searwall.ogg' + fire_sound = 'sound/items/weapons/laser.ogg' + hit_person_sound = 'sound/items/weapons/sear.ogg' + hit_wall_sound = 'sound/items/weapons/effects/searwall.ogg' number_of_hits_to_end = 4 chance_to_fall = 70 @@ -82,7 +82,7 @@ /datum/hallucination/battle/stun_prod/start() var/turf/source = random_far_turf() - hallucinator.playsound_local(source, 'sound/weapons/egloves.ogg', 40, TRUE) + hallucinator.playsound_local(source, 'sound/items/weapons/egloves.ogg', 40, TRUE) hallucinator.playsound_local(source, SFX_BODYFALL, 25, TRUE) addtimer(CALLBACK(src, PROC_REF(fake_cuff), source), 2 SECONDS) return TRUE @@ -92,7 +92,7 @@ if(QDELETED(src) || QDELETED(hallucinator) || !source) return - hallucinator.playsound_local(source, 'sound/weapons/cablecuff.ogg', 15, TRUE) + hallucinator.playsound_local(source, 'sound/items/weapons/cablecuff.ogg', 15, TRUE) qdel(src) /// A hallucination of someone being stun batonned, and subsequently harmbatonned. @@ -101,7 +101,7 @@ /datum/hallucination/battle/harm_baton/start() var/turf/source = random_far_turf() - hallucinator.playsound_local(source, 'sound/weapons/egloves.ogg', 40, TRUE) + hallucinator.playsound_local(source, 'sound/items/weapons/egloves.ogg', 40, TRUE) hallucinator.playsound_local(source, SFX_BODYFALL, 25, TRUE) addtimer(CALLBACK(src, PROC_REF(harmbaton_loop), source, rand(5, 12)), 2 SECONDS) @@ -126,7 +126,7 @@ /datum/hallucination/battle/e_sword/start() var/turf/source = random_far_turf() - hallucinator.playsound_local(source, 'sound/weapons/saberon.ogg', 15, 1) + hallucinator.playsound_local(source, 'sound/items/weapons/saberon.ogg', 15, 1) addtimer(CALLBACK(src, PROC_REF(stab_loop), source, rand(4, 8)), CLICK_CD_MELEE) return TRUE @@ -136,10 +136,10 @@ return if(stabs_remaining >= 1) - hallucinator.playsound_local(source, 'sound/weapons/blade1.ogg', 50, TRUE) + hallucinator.playsound_local(source, 'sound/items/weapons/blade1.ogg', 50, TRUE) else - hallucinator.playsound_local(source, 'sound/weapons/saberoff.ogg', 15, TRUE) + hallucinator.playsound_local(source, 'sound/items/weapons/saberoff.ogg', 15, TRUE) qdel(src) return diff --git a/code/modules/hallucination/bolted_airlocks.dm b/code/modules/hallucination/bolted_airlocks.dm index 9fb180dfcae11..a275c775d66ec 100644 --- a/code/modules/hallucination/bolted_airlocks.dm +++ b/code/modules/hallucination/bolted_airlocks.dm @@ -102,11 +102,11 @@ /obj/effect/client_image_holder/hallucination/fake_door_lock/show_image_to(mob/show_to) . = ..() - show_to.playsound_local(get_turf(src), 'sound/machines/boltsdown.ogg', 30, FALSE, 3) + show_to.playsound_local(get_turf(src), 'sound/machines/airlock/boltsdown.ogg', 30, FALSE, 3) /obj/effect/client_image_holder/hallucination/fake_door_lock/hide_image_from(mob/show_to) . = ..() - show_to.playsound_local(get_turf(src), 'sound/machines/boltsup.ogg', 30, FALSE, 3) + show_to.playsound_local(get_turf(src), 'sound/machines/airlock/boltsup.ogg', 30, FALSE, 3) /obj/effect/client_image_holder/hallucination/fake_door_lock/proc/on_airlock_deleted(datum/source) SIGNAL_HANDLER diff --git a/code/modules/hallucination/delusions.dm b/code/modules/hallucination/delusions.dm index 106988f73277b..0760d05ff46c6 100644 --- a/code/modules/hallucination/delusions.dm +++ b/code/modules/hallucination/delusions.dm @@ -94,7 +94,7 @@ if(play_wabbajack) to_chat(hallucinator, span_hear("...wabbajack...wabbajack...")) - hallucinator.playsound_local(get_turf(hallucinator), 'sound/magic/staff_change.ogg', 50, TRUE) + hallucinator.playsound_local(get_turf(hallucinator), 'sound/effects/magic/staff_change.ogg', 50, TRUE) if(duration > 0) QDEL_IN(src, duration) @@ -191,7 +191,7 @@ /datum/hallucination/delusion/preset/cyborg/make_delusion_image(mob/over_who) . = ..() - hallucinator.playsound_local(get_turf(over_who), 'sound/voice/liveagain.ogg', 75, TRUE) + hallucinator.playsound_local(get_turf(over_who), 'sound/mobs/non-humanoids/cyborg/liveagain.ogg', 75, TRUE) /datum/hallucination/delusion/preset/ghost delusion_icon_file = 'icons/mob/simple/mob.dmi' diff --git a/code/modules/hallucination/fake_sound.dm b/code/modules/hallucination/fake_sound.dm index f5d750a114427..1d93be83f947c 100644 --- a/code/modules/hallucination/fake_sound.dm +++ b/code/modules/hallucination/fake_sound.dm @@ -34,40 +34,40 @@ /datum/hallucination/fake_sound/normal/airlock volume = 30 - sound_type = 'sound/machines/airlock.ogg' + sound_type = 'sound/machines/airlock/airlock.ogg' /datum/hallucination/fake_sound/normal/airlock_pry volume = 100 - sound_type = 'sound/machines/airlock_alien_prying.ogg' + sound_type = 'sound/machines/airlock/airlock_alien_prying.ogg' /datum/hallucination/fake_sound/normal/airlock_pry/play_fake_sound(turf/source, sound_to_play) . = ..() - queue_fake_sound(source, 'sound/machines/airlockforced.ogg', 50, TRUE, delay = 5 SECONDS) + queue_fake_sound(source, 'sound/machines/airlock/airlockforced.ogg', 50, TRUE, delay = 5 SECONDS) /datum/hallucination/fake_sound/normal/console volume = 25 - sound_type = 'sound/machines/terminal_prompt.ogg' + sound_type = 'sound/machines/terminal/terminal_prompt.ogg' /datum/hallucination/fake_sound/normal/boom - sound_type = list('sound/effects/explosion1.ogg', 'sound/effects/explosion2.ogg') + sound_type = list('sound/effects/explosion/explosion1.ogg', 'sound/effects/explosion/explosion2.ogg') /datum/hallucination/fake_sound/normal/distant_boom - sound_type = 'sound/effects/explosionfar.ogg' + sound_type = 'sound/effects/explosion/explosionfar.ogg' /datum/hallucination/fake_sound/normal/glass - sound_type = list('sound/effects/glassbr1.ogg', 'sound/effects/glassbr2.ogg', 'sound/effects/glassbr3.ogg') + sound_type = list('sound/effects/glass/glassbr1.ogg', 'sound/effects/glass/glassbr2.ogg', 'sound/effects/glass/glassbr3.ogg') /datum/hallucination/fake_sound/normal/alarm - volume = 100 - sound_type = 'sound/machines/alarm.ogg' + volume = 70 + sound_type = 'sound/announcer/alarm/nuke_alarm.ogg' /datum/hallucination/fake_sound/normal/beepsky volume = 35 - sound_type = 'sound/voice/beepsky/freeze.ogg' + sound_type = 'sound/mobs/non-humanoids/beepsky/freeze.ogg' /datum/hallucination/fake_sound/normal/mech volume = 40 - sound_type = 'sound/mecha/mechstep.ogg' + sound_type = 'sound/vehicles/mecha/mechstep.ogg' /// The turf the mech started walking from. var/turf/mech_source /// What dir is the mech walking? @@ -106,15 +106,15 @@ addtimer(CALLBACK(src, PROC_REF(mech_walk)), 1 SECONDS) /datum/hallucination/fake_sound/normal/wall_deconstruction - sound_type = 'sound/items/welder.ogg' + sound_type = 'sound/items/tools/welder.ogg' /datum/hallucination/fake_sound/normal/wall_deconstruction/play_fake_sound(turf/source, sound_to_play) . = ..() - queue_fake_sound(source, 'sound/items/welder2.ogg', delay = 10.5 SECONDS) - queue_fake_sound(source, 'sound/items/ratchet.ogg', delay = 12 SECONDS) + queue_fake_sound(source, 'sound/items/tools/welder2.ogg', delay = 10.5 SECONDS) + queue_fake_sound(source, 'sound/items/tools/ratchet.ogg', delay = 12 SECONDS) /datum/hallucination/fake_sound/normal/door_hacking - sound_type = 'sound/items/screwdriver.ogg' + sound_type = 'sound/items/tools/screwdriver.ogg' volume = 30 /datum/hallucination/fake_sound/normal/door_hacking/play_fake_sound(turf/source, sound_to_play) @@ -124,20 +124,20 @@ var/hacking_time = rand(4 SECONDS, 8 SECONDS) // Multitool sound. - queue_fake_sound(source, 'sound/weapons/empty.ogg', delay = 0.8 SECONDS) + queue_fake_sound(source, 'sound/items/weapons/empty.ogg', delay = 0.8 SECONDS) if(hacking_time > 4.5 SECONDS) // Another multitool sound if the hacking time is long. - queue_fake_sound(source, 'sound/weapons/empty.ogg', delay = 3 SECONDS) + queue_fake_sound(source, 'sound/items/weapons/empty.ogg', delay = 3 SECONDS) if(prob(50)) // Bonus multitool sound, rapidly after the last. - queue_fake_sound(source, 'sound/weapons/empty.ogg', delay = 3.5 SECONDS) + queue_fake_sound(source, 'sound/items/weapons/empty.ogg', delay = 3.5 SECONDS) if(hacking_time > 5.5 SECONDS) // A final multitool sound if the hacking time is very long. - queue_fake_sound(source, 'sound/weapons/empty.ogg', delay = 5 SECONDS) + queue_fake_sound(source, 'sound/items/weapons/empty.ogg', delay = 5 SECONDS) // Crowbarring it open. - queue_fake_sound(source, 'sound/machines/airlockforced.ogg', delay = hacking_time) + queue_fake_sound(source, 'sound/machines/airlock/airlockforced.ogg', delay = hacking_time) /datum/hallucination/fake_sound/normal/steam volume = 75 @@ -146,7 +146,7 @@ /datum/hallucination/fake_sound/normal/flash random_hallucination_weight = 2 // "it's revs" volume = 90 - sound_type = 'sound/weapons/flash.ogg' + sound_type = 'sound/items/weapons/flash.ogg' /datum/hallucination/fake_sound/weird abstract_hallucination_parent = /datum/hallucination/fake_sound/weird @@ -167,24 +167,24 @@ sound_vary = FALSE no_source = TRUE sound_type = list( - 'sound/ambience/antag/bloodcult/bloodcult_gain.ogg', - 'sound/ambience/antag/clockcultalr.ogg', - 'sound/ambience/antag/heretic/heretic_gain.ogg', - 'sound/ambience/antag/ling_alert.ogg', - 'sound/ambience/antag/malf.ogg', - 'sound/ambience/antag/ops.ogg', - 'sound/ambience/antag/spy.ogg', - 'sound/ambience/antag/tatoralert.ogg', + 'sound/music/antag/bloodcult/bloodcult_gain.ogg', + 'sound/music/antag/clockcultalr.ogg', + 'sound/music/antag/heretic/heretic_gain.ogg', + 'sound/music/antag/ling_alert.ogg', + 'sound/music/antag/malf.ogg', + 'sound/music/antag/ops.ogg', + 'sound/music/antag/spy.ogg', + 'sound/music/antag/traitor/tatoralert.ogg', ) /datum/hallucination/fake_sound/weird/chimp_event volume = 90 sound_vary = FALSE no_source = TRUE - sound_type = 'sound/ambience/antag/monkey.ogg' + sound_type = 'sound/music/antag/monkey.ogg' /datum/hallucination/fake_sound/weird/colossus - sound_type = 'sound/magic/clockwork/invoke_general.ogg' + sound_type = 'sound/effects/magic/clockwork/invoke_general.ogg' /datum/hallucination/fake_sound/weird/creepy @@ -197,11 +197,11 @@ volume = 40 sound_vary = FALSE no_source = TRUE - sound_type = 'sound/magic/curse.ogg' + sound_type = 'sound/effects/magic/curse.ogg' /datum/hallucination/fake_sound/weird/game_over sound_vary = FALSE - sound_type = 'sound/misc/compiler-failure.ogg' + sound_type = 'sound/machines/compiler/compiler-failure.ogg' /datum/hallucination/fake_sound/weird/hallelujah sound_vary = FALSE @@ -219,15 +219,15 @@ /datum/hallucination/fake_sound/weird/laugher sound_type = list( - 'sound/voice/human/womanlaugh.ogg', - 'sound/voice/human/manlaugh1.ogg', - 'sound/voice/human/manlaugh2.ogg', + 'sound/mobs/humanoids/human/laugh/womanlaugh.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh1.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh2.ogg', ) /datum/hallucination/fake_sound/weird/phone volume = 15 sound_vary = FALSE - sound_type = 'sound/weapons/ring.ogg' + sound_type = 'sound/items/weapons/ring.ogg' /datum/hallucination/fake_sound/weird/phone/play_fake_sound(turf/source, sound_to_play) for(var/next_ring in 1 to 3) @@ -237,25 +237,25 @@ /datum/hallucination/fake_sound/weird/spell sound_type = list( - 'sound/magic/disintegrate.ogg', - 'sound/magic/ethereal_enter.ogg', - 'sound/magic/ethereal_exit.ogg', - 'sound/magic/fireball.ogg', - 'sound/magic/forcewall.ogg', - 'sound/magic/teleport_app.ogg', - 'sound/magic/teleport_diss.ogg', + 'sound/effects/magic/disintegrate.ogg', + 'sound/effects/magic/ethereal_enter.ogg', + 'sound/effects/magic/ethereal_exit.ogg', + 'sound/effects/magic/fireball.ogg', + 'sound/effects/magic/forcewall.ogg', + 'sound/effects/magic/teleport_app.ogg', + 'sound/effects/magic/teleport_diss.ogg', ) /datum/hallucination/fake_sound/weird/spell/just_jaunt // A few antags use jaunts, so this sound specifically is fun to isolate - sound_type = 'sound/magic/ethereal_enter.ogg' + sound_type = 'sound/effects/magic/ethereal_enter.ogg' /datum/hallucination/fake_sound/weird/summon_sound // Heretic circle sound, notably volume = 75 - sound_type = 'sound/magic/castsummon.ogg' + sound_type = 'sound/effects/magic/castsummon.ogg' /datum/hallucination/fake_sound/weird/tesloose volume = 35 - sound_type = 'sound/magic/lightningbolt.ogg' + sound_type = 'sound/effects/magic/lightningbolt.ogg' /datum/hallucination/fake_sound/weird/tesloose/play_fake_sound(turf/source, sound_to_play) . = ..() @@ -266,21 +266,21 @@ random_hallucination_weight = 2 // Some of these are ambience sounds too volume = 25 sound_type = list( - 'sound/voice/lowHiss1.ogg', - 'sound/voice/lowHiss2.ogg', - 'sound/voice/lowHiss3.ogg', - 'sound/voice/lowHiss4.ogg', - 'sound/voice/hiss1.ogg', - 'sound/voice/hiss2.ogg', - 'sound/voice/hiss3.ogg', - 'sound/voice/hiss4.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss1.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss2.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss3.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss4.ogg', + 'sound/mobs/non-humanoids/hiss/hiss1.ogg', + 'sound/mobs/non-humanoids/hiss/hiss2.ogg', + 'sound/mobs/non-humanoids/hiss/hiss3.ogg', + 'sound/mobs/non-humanoids/hiss/hiss4.ogg', ) /datum/hallucination/fake_sound/weird/radio_static volume = 75 no_source = TRUE sound_vary = FALSE - sound_type = 'sound/hallucinations/radio_static.ogg' + sound_type = 'sound/effects/hallucinations/radio_static.ogg' /datum/hallucination/fake_sound/weird/ice_crack random_hallucination_weight = 2 diff --git a/code/modules/hallucination/inhand_fake_item.dm b/code/modules/hallucination/inhand_fake_item.dm index cb787d217e1c4..de3b6b99411e9 100644 --- a/code/modules/hallucination/inhand_fake_item.dm +++ b/code/modules/hallucination/inhand_fake_item.dm @@ -16,7 +16,7 @@ // These slots are human only, + they have to have a uniform var/mob/living/carbon/human/human_hallucinator = hallucinator - if(istype(hallucinator) && human_hallucinator.w_uniform) + if(istype(human_hallucinator) && human_hallucinator.w_uniform) if((valid_slots & ITEM_SLOT_BELT) && !human_hallucinator.belt) slots_free[ui_belt] = ITEM_SLOT_BELT if((valid_slots & ITEM_SLOT_LPOCKET) && !human_hallucinator.l_store) @@ -72,7 +72,7 @@ var/obj/item/melee/energy/sword/saber/sabre_color = pick(subtypesof(/obj/item/melee/energy/sword/saber)) // Yes this can break if someone changes esword icon stuff hallucinated_item.icon_state = "[hallucinated_item.icon_state]_on_[initial(sabre_color.sword_color_icon)]" - hallucinator.playsound_local(get_turf(hallucinator), 'sound/weapons/saberon.ogg', 35, TRUE) + hallucinator.playsound_local(get_turf(hallucinator), 'sound/items/weapons/saberon.ogg', 35, TRUE) return hallucinated_item @@ -109,7 +109,7 @@ if(prob(15)) // Yes this can break if someone changse grenade icon stuff hallucinated_item.icon_state = "[hallucinated_item.icon_state]_active" - hallucinator.playsound_local(get_turf(hallucinator), 'sound/weapons/armbomb.ogg', 60, TRUE) + hallucinator.playsound_local(get_turf(hallucinator), 'sound/items/weapons/armbomb.ogg', 60, TRUE) to_chat(hallucinator, span_warning("You prime [hallucinated_item]! 5 seconds!")) return hallucinated_item diff --git a/code/modules/hallucination/mother.dm b/code/modules/hallucination/mother.dm index d9cd7f1983119..7d407e43d8eb1 100644 --- a/code/modules/hallucination/mother.dm +++ b/code/modules/hallucination/mother.dm @@ -37,7 +37,7 @@ var/obj/visual = image('icons/hud/screen_gen.dmi', mother.loc, "arrow", FLY_LAYER) INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(flick_overlay_global), visual, list(hallucinator.client), 2.5 SECONDS) - animate(visual, pixel_x = (tile.x - mother.x) * world.icon_size, pixel_y = (tile.y - mother.y) * world.icon_size, time = 1.7, easing = EASE_OUT) + animate(visual, pixel_x = (tile.x - mother.x) * ICON_SIZE_X, pixel_y = (tile.y - mother.y) * ICON_SIZE_Y, time = 1.7, easing = EASE_OUT) /datum/hallucination/your_mother/proc/talk(text) var/plus_runechat = hallucinator.client?.prefs.read_preference(/datum/preference/toggle/enable_runechat) diff --git a/code/modules/hallucination/nearby_fake_item.dm b/code/modules/hallucination/nearby_fake_item.dm index 4864594c9a50b..10d08ee47c96f 100644 --- a/code/modules/hallucination/nearby_fake_item.dm +++ b/code/modules/hallucination/nearby_fake_item.dm @@ -67,12 +67,12 @@ image_icon_state = "e_sword_on_red" /datum/hallucination/nearby_fake_item/e_sword/generate_fake_image(mob/living/carbon/human/holder, file) - hallucinator.playsound_local(get_turf(holder), 'sound/weapons/saberon.ogg', 35, TRUE) + hallucinator.playsound_local(get_turf(holder), 'sound/items/weapons/saberon.ogg', 35, TRUE) return ..() /datum/hallucination/nearby_fake_item/e_sword/remove_image(mob/living/carbon/human/holder) if(!QDELETED(holder)) - hallucinator.playsound_local(get_turf(holder), 'sound/weapons/saberoff.ogg', 35, TRUE) + hallucinator.playsound_local(get_turf(holder), 'sound/items/weapons/saberoff.ogg', 35, TRUE) return ..() /datum/hallucination/nearby_fake_item/e_sword/double_bladed @@ -115,12 +115,12 @@ image_icon_state = "arm_blade" /datum/hallucination/nearby_fake_item/armblade/generate_fake_image(mob/living/carbon/human/holder, file) - hallucinator.playsound_local(get_turf(holder), 'sound/effects/blobattack.ogg', 35, TRUE) + hallucinator.playsound_local(get_turf(holder), 'sound/effects/blob/blobattack.ogg', 35, TRUE) return ..() /datum/hallucination/nearby_fake_item/armblade/remove_image(mob/living/carbon/human/holder) if(!QDELETED(holder)) - hallucinator.playsound_local(get_turf(holder), 'sound/effects/blobattack.ogg', 35, TRUE) + hallucinator.playsound_local(get_turf(holder), 'sound/effects/blob/blobattack.ogg', 35, TRUE) return ..() /datum/hallucination/nearby_fake_item/ttv diff --git a/code/modules/hallucination/station_message.dm b/code/modules/hallucination/station_message.dm index 976b88f662097..9441cdeb42a5a 100644 --- a/code/modules/hallucination/station_message.dm +++ b/code/modules/hallucination/station_message.dm @@ -42,23 +42,23 @@ var/static/list/ascension_bodies = list( list( "text" = "Fear the blaze, for the Ashlord, %FAKENAME% has ascended! The flames shall consume all!", - "sound" = 'sound/ambience/antag/heretic/ascend_blade.ogg', + "sound" = 'sound/music/antag/heretic/ascend_blade.ogg', ), list( "text" = "Master of blades, the Torn Champion's disciple, %FAKENAME% has ascended! Their steel is that which will cut reality in a maelstom of silver!", - "sound" = 'sound/ambience/antag/heretic/ascend_blade.ogg', + "sound" = 'sound/music/antag/heretic/ascend_blade.ogg', ), list( "text" = "Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, %FAKENAME% has ascended! Fear the ever twisting hand!", - "sound" = 'sound/ambience/antag/heretic/ascend_flesh.ogg', + "sound" = 'sound/music/antag/heretic/ascend_flesh.ogg', ), list( "text" = "Fear the decay, for the Rustbringer, %FAKENAME% has ascended! None shall escape the corrosion!", - "sound" = 'sound/ambience/antag/heretic/ascend_rust.ogg', + "sound" = 'sound/music/antag/heretic/ascend_rust.ogg', ), list( "text" = "The nobleman of void %FAKENAME% has arrived, stepping along the Waltz that ends worlds!", - "sound" = 'sound/ambience/antag/heretic/ascend_void.ogg', + "sound" = 'sound/music/antag/heretic/ascend_void.ogg', ) ) @@ -95,7 +95,7 @@ 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', + sound = 'sound/music/antag/bloodcult/bloodcult_scribe.ogg', has_important_message = TRUE, players = list(hallucinator), ) @@ -111,7 +111,7 @@ /datum/hallucination/station_message/supermatter_delam /datum/hallucination/station_message/supermatter_delam/start() - SEND_SOUND(hallucinator, 'sound/magic/charge.ogg') + SEND_SOUND(hallucinator, 'sound/effects/magic/charge.ogg') to_chat(hallucinator, span_boldannounce("You feel reality distort for a moment...")) return ..() @@ -129,5 +129,5 @@ if(QDELETED(src)) return - hallucinator.playsound_local(get_turf(hallucinator), 'sound/effects/explosion_distant.ogg', 50, FALSE, pressure_affected = FALSE) + hallucinator.playsound_local(get_turf(hallucinator), 'sound/effects/explosion/explosion_distant.ogg', 50, FALSE, pressure_affected = FALSE) qdel(src) diff --git a/code/modules/hallucination/stray_bullet.dm b/code/modules/hallucination/stray_bullet.dm index 63e19c1bb89f2..13ace2933350a 100644 --- a/code/modules/hallucination/stray_bullet.dm +++ b/code/modules/hallucination/stray_bullet.dm @@ -189,7 +189,7 @@ name = "bullet" hal_icon_state = "bullet" hal_fire_sound = "gunshot" - hal_hitsound = 'sound/weapons/pierce.ogg' + hal_hitsound = 'sound/items/weapons/pierce.ogg' hal_hitsound_wall = SFX_RICOCHET hal_impact_effect = "impact_bullet" hal_impact_effect_wall = "impact_bullet" @@ -203,9 +203,9 @@ name = "laser" damage_type = BURN hal_icon_state = "laser" - hal_fire_sound = 'sound/weapons/laser.ogg' - hal_hitsound = 'sound/weapons/sear.ogg' - hal_hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hal_fire_sound = 'sound/items/weapons/laser.ogg' + hal_hitsound = 'sound/items/weapons/sear.ogg' + hal_hitsound_wall = 'sound/items/weapons/effects/searwall.ogg' hal_impact_effect = "impact_laser" hal_impact_effect_wall = "impact_laser_wall" hit_duration = 4 @@ -225,8 +225,8 @@ damage_type = BURN hal_icon_state = "spark" color = COLOR_YELLOW - hal_fire_sound = 'sound/weapons/taser.ogg' - hal_hitsound = 'sound/weapons/taserhit.ogg' + hal_fire_sound = 'sound/items/weapons/taser.ogg' + hal_hitsound = 'sound/items/weapons/taserhit.ogg' hal_hitsound_wall = null hal_impact_effect = null hal_impact_effect_wall = null @@ -250,9 +250,9 @@ name = "disabler beam" damage_type = STAMINA hal_icon_state = "omnilaser" - hal_fire_sound = 'sound/weapons/taser2.ogg' - hal_hitsound = 'sound/weapons/tap.ogg' - hal_hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hal_fire_sound = 'sound/items/weapons/taser2.ogg' + hal_hitsound = 'sound/items/weapons/tap.ogg' + hal_hitsound_wall = 'sound/items/weapons/effects/searwall.ogg' hal_impact_effect = "impact_laser_blue" hal_impact_effect_wall = null hit_duration = 4 @@ -269,7 +269,7 @@ name = "bolt" damage_type = TOX hal_icon_state = "cbbolt" - hal_fire_sound = 'sound/weapons/genhit.ogg' + hal_fire_sound = 'sound/items/weapons/genhit.ogg' hal_hitsound = null hal_hitsound_wall = null hal_impact_effect = null @@ -285,7 +285,7 @@ name = "bolt of change" damage_type = BURN hal_icon_state = "ice_1" - hal_fire_sound = 'sound/magic/staff_change.ogg' + hal_fire_sound = 'sound/effects/magic/staff_change.ogg' hal_hitsound = null hal_hitsound_wall = null hal_impact_effect = null @@ -307,7 +307,7 @@ name = "bolt of death" damage_type = BURN hal_icon_state = "pulse1_bl" - hal_fire_sound = 'sound/magic/wandodeath.ogg' + hal_fire_sound = 'sound/effects/magic/wandodeath.ogg' hal_hitsound = null hal_hitsound_wall = null hal_impact_effect = null diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 6fe7fdbc57d94..d5a9457141294 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -257,7 +257,7 @@ /datum/holiday/april_fools/celebrate() . = ..() SSjob.set_overflow_role(/datum/job/clown) - SSticker.login_music = 'sound/ambience/clown.ogg' + SSticker.login_music = 'sound/music/lobby_music/clown.ogg' for(var/i in GLOB.new_player_list) var/mob/dead/new_player/P = i if(P.client) @@ -694,6 +694,10 @@ begin_day = 14 begin_month = DECEMBER +/datum/holiday/monkey/celebrate() + . = ..() + SSstation.setup_trait(/datum/station_trait/job/pun_pun) + /datum/holiday/doomsday name = "Mayan Doomsday Anniversary" begin_day = 21 diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index b98d66f6bd2c7..1107c8c25793a 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -146,10 +146,10 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf data["emagged"] = TRUE data["emag_programs"] = emag_programs data["program"] = program - data["can_toggle_safety"] = issilicon(user) || isAdminGhostAI(user) + data["can_toggle_safety"] = HAS_SILICON_ACCESS(user) return data -/obj/machinery/computer/holodeck/ui_act(action, params) +/obj/machinery/computer/holodeck/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/hydroponics/beekeeping/bee_smoker.dm b/code/modules/hydroponics/beekeeping/bee_smoker.dm index 91195dacc84d7..3daa75f89e63a 100644 --- a/code/modules/hydroponics/beekeeping/bee_smoker.dm +++ b/code/modules/hydroponics/beekeeping/bee_smoker.dm @@ -37,13 +37,17 @@ return TRUE /obj/item/bee_smoker/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!istype(interacting_with, /obj/structure/beebox) && !isturf(interacting_with) && !istype(interacting_with, /mob/living/basic/bee)) + return NONE + + . = ITEM_INTERACT_BLOCKING if(!activated) user.balloon_alert(user, "not activated!") - return ITEM_INTERACT_BLOCKING + return . if(current_herb_fuel < single_use_cost) user.balloon_alert(user, "not enough fuel!") - return ITEM_INTERACT_BLOCKING + return . current_herb_fuel -= single_use_cost playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) @@ -53,16 +57,19 @@ if(friend.flags_1 & HOLOGRAM_1) continue friend.befriend(user) + . = ITEM_INTERACT_SUCCESS if(!istype(interacting_with, /obj/structure/beebox)) - return ITEM_INTERACT_BLOCKING + return . var/obj/structure/beebox/hive = interacting_with for(var/mob/living/bee as anything in hive.bees) if(bee.flags_1 & HOLOGRAM_1) continue bee.befriend(user) - return ITEM_INTERACT_SUCCESS + . = ITEM_INTERACT_SUCCESS + + return . /obj/item/bee_smoker/attackby(obj/item/herb, mob/living/carbon/human/user, list/modifiers) . = ..() @@ -89,7 +96,7 @@ /obj/item/bee_smoker/proc/alter_state() activated = !activated - playsound(src, 'sound/items/welderdeactivate.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/welderdeactivate.ogg', 50, TRUE) if(!activated) beesmoke_loop.stop() diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 52df09c29cdf8..3549b3e965f48 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -526,7 +526,7 @@ return data -/obj/machinery/biogenerator/ui_act(action, list/params) +/obj/machinery/biogenerator/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index 49b7056c9e7e8..993173b7efc52 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -23,7 +23,7 @@ /// The sound of fermentation var/datum/looping_sound/boiling/soundloop /// Sound played when the lid is opened. - var/lid_open_sound = 'sound/items/handling/cardboardbox_pickup.ogg' + var/lid_open_sound = 'sound/items/handling/cardboard_box/cardboardbox_pickup.ogg' /// Sound played when the lid is closed. var/lid_close_sound = 'sound/effects/footstep/woodclaw2.ogg' diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index 885eb77c0c695..62b18c8eea703 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -53,7 +53,7 @@ //Now squeezable for imitation carpmeat /obj/item/food/grown/koibeans/attack_self(mob/living/user) user.visible_message(span_notice("[user] crushes [src] into a slab of carplike meat."), span_notice("You crush [src] into something that resembles a slab of carplike meat.")) - playsound(user, 'sound/effects/blobattack.ogg', 50, TRUE) + playsound(user, 'sound/effects/blob/blobattack.ogg', 50, TRUE) var/obj/item/food/fishmeat/carp/imitation/fishie = new(null) fishie.reagents.set_all_reagents_purity(seed.get_reagent_purity()) qdel(src) @@ -85,7 +85,7 @@ /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) + playsound(user, 'sound/effects/blob/blobattack.ogg', 50, TRUE) var/obj/item/food/butterslice/butties = new(null) butties.reagents.set_all_reagents_purity(seed.get_reagent_purity()) qdel(src) diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index b304382d2dc47..f1fdfe807ef1d 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -100,7 +100,7 @@ /obj/item/food/grown/meatwheat/attack_self(mob/living/user) user.visible_message(span_notice("[user] crushes [src] into meat."), span_notice("You crush [src] into something that resembles meat.")) - playsound(user, 'sound/effects/blobattack.ogg', 50, TRUE) + playsound(user, 'sound/effects/blob/blobattack.ogg', 50, TRUE) var/obj/item/food/meat/slab/meatwheat/meaties = new(null) meaties.reagents.set_all_reagents_purity(seed.get_reagent_purity()) qdel(src) diff --git a/code/modules/hydroponics/grown/onion.dm b/code/modules/hydroponics/grown/onion.dm index 0d33c3e1f395d..4287bf9eb3ec9 100644 --- a/code/modules/hydroponics/grown/onion.dm +++ b/code/modules/hydroponics/grown/onion.dm @@ -48,7 +48,7 @@ /obj/item/food/grown/onion/red/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/onion_slice/red, 2, 15, screentip_verb = "Cut") -/obj/item/food/grown/onion/UsedforProcessing(mob/living/user, obj/item/I, list/chosen_option) +/obj/item/food/grown/onion/UsedforProcessing(mob/living/user, obj/item/I, list/chosen_option, list/created_atoms) var/datum/effect_system/fluid_spread/smoke/chem/cry_about_it = new //Since the onion is destroyed when it's sliced, var/splat_location = get_turf(src) //we need to set up the smoke beforehand cry_about_it.attach(splat_location) diff --git a/code/modules/hydroponics/grown/pineapple.dm b/code/modules/hydroponics/grown/pineapple.dm index 5de85e9168f1f..577befaadfaa8 100644 --- a/code/modules/hydroponics/grown/pineapple.dm +++ b/code/modules/hydroponics/grown/pineapple.dm @@ -23,7 +23,7 @@ bite_consumption_mod = 2 force = 4 throwforce = 8 - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("stings", "pines") attack_verb_simple = list("sting", "pine") throw_speed = 1 diff --git a/code/modules/hydroponics/grown/weeds/nettle.dm b/code/modules/hydroponics/grown/weeds/nettle.dm index 33a0f6288912d..dec1e8b119e2b 100644 --- a/code/modules/hydroponics/grown/weeds/nettle.dm +++ b/code/modules/hydroponics/grown/weeds/nettle.dm @@ -43,7 +43,7 @@ righthand_file = 'icons/mob/inhands/weapons/plants_righthand.dmi' damtype = BURN force = 15 - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' throwforce = 5 w_class = WEIGHT_CLASS_NORMAL throw_speed = 1 diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index ccb4bb571e270..67eba9f94fe0a 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -428,7 +428,7 @@ custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.5) attack_verb_continuous = list("slashes", "slices", "cuts", "claws") attack_verb_simple = list("slash", "slice", "cut", "claw") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' /obj/item/cultivator/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is scratching [user.p_their()] back as hard as [user.p_they()] can with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) @@ -460,7 +460,7 @@ if(has_gravity(loc) && HAS_TRAIT(H, TRAIT_CLUMSY) && !H.resting) H.set_confusion_if_lower(10 SECONDS) H.Stun(20) - playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/punch4.ogg', 50, TRUE) H.visible_message(span_warning("[H] steps on [src] causing the handle to hit [H.p_them()] right in the face!"), \ span_userdanger("You step on [src] causing the handle to hit you right in the face!")) @@ -482,7 +482,7 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5) attack_verb_continuous = list("chops", "tears", "lacerates", "cuts") attack_verb_simple = list("chop", "tear", "lacerate", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED /datum/embed_data/hatchet @@ -499,7 +499,7 @@ /obj/item/hatchet/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is chopping at [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) - playsound(src, 'sound/weapons/bladeslice.ogg', 50, TRUE, -1) + playsound(src, 'sound/items/weapons/bladeslice.ogg', 50, TRUE, -1) return BRUTELOSS /obj/item/hatchet/wooden @@ -529,7 +529,7 @@ slot_flags = ITEM_SLOT_BACK attack_verb_continuous = list("chops", "slices", "cuts", "reaps") attack_verb_simple = list("chop", "slice", "cut", "reap") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED item_flags = CRUEL_IMPLEMENT //maybe they want to use it in surgery var/swiping = FALSE @@ -591,7 +591,7 @@ custom_materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT*2) attack_verb_continuous = list("slashes", "slices", "cuts", "claws") attack_verb_simple = list("slash", "slice", "cut", "claw") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' ///Catch right clicks so we can stylize! /obj/item/secateurs/pre_attack_secondary(atom/target, mob/living/user, params) @@ -605,7 +605,7 @@ SEND_SIGNAL(target, COMSIG_ATOM_RESTYLE, user, target, user.zone_selected, EXTERNAL_RESTYLE_PLANT, 6 SECONDS) /obj/item/geneshears - name = "Botanogenetic Plant Shears" + name = "botanogenetic plant shears" desc = "A high tech, high fidelity pair of plant shears, capable of cutting genetic traits out of a plant." icon = 'icons/obj/service/hydroponics/equipment.dmi' icon_state = "genesheers" @@ -621,7 +621,7 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2, /datum/material/uranium=HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold=SMALL_MATERIAL_AMOUNT*5) attack_verb_continuous = list("slashes", "slices", "cuts") attack_verb_simple = list("slash", "slice", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' // ************************************* // Nutrient defines for hydroponics diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 8856667ae5384..3a1a6d83e7dbf 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -139,8 +139,8 @@ context[SCREENTIP_CONTEXT_LMB] = "Lock mutation" return CONTEXTUAL_SCREENTIP_SET - // Edibles and pills can be composted. - if(IS_EDIBLE(held_item) || istype(held_item, /obj/item/reagent_containers/pill)) + // Edibles can be composted (most of the times). + if(IS_EDIBLE(held_item) && HAS_TRAIT(held_item, TRAIT_UNCOMPOSTABLE)) context[SCREENTIP_CONTEXT_LMB] = "Compost" return CONTEXTUAL_SCREENTIP_SET @@ -532,6 +532,7 @@ if(myseed && myseed.loc != src) myseed.forceMove(src) SEND_SIGNAL(src, COMSIG_HYDROTRAY_SET_SEED, new_seed) + age = 0 update_appearance() if(isnull(myseed)) particles = null @@ -700,7 +701,6 @@ else new_seed = new /obj/item/seeds/starthistle(src) set_seed(new_seed) - age = 0 lastcycle = world.time set_plant_health(myseed.endurance, update_icon = FALSE) set_weedlevel(0, update_icon = FALSE) // Reset @@ -724,7 +724,6 @@ set_seed(new mutantseed(src)) hardmutate() - age = 0 set_plant_health(myseed.endurance, update_icon = FALSE) lastcycle = world.time set_weedlevel(0, update_icon = FALSE) @@ -741,7 +740,6 @@ set_seed(new polymorph_seed(src)) hardmutate() - age = 0 set_plant_health(myseed.endurance, update_icon = FALSE) lastcycle = world.time set_weedlevel(0, update_icon = FALSE) @@ -755,7 +753,6 @@ var/newWeed = pick(/obj/item/seeds/liberty, /obj/item/seeds/angel, /obj/item/seeds/nettle/death, /obj/item/seeds/kudzu) set_seed(new newWeed(src)) hardmutate() - age = 0 set_plant_health(myseed.endurance, update_icon = FALSE) lastcycle = world.time set_weedlevel(0, update_icon = FALSE) // Reset @@ -855,7 +852,10 @@ var/visi_msg = "" var/transfer_amount - if(IS_EDIBLE(reagent_source) || istype(reagent_source, /obj/item/reagent_containers/pill)) + if(IS_EDIBLE(reagent_source)) + if(HAS_TRAIT(reagent_source, TRAIT_UNCOMPOSTABLE)) + to_chat(user, "[reagent_source] cannot be composted in its current state") + return visi_msg="[user] composts [reagent_source], spreading it through [target]" transfer_amount = reagent_source.reagents.total_volume SEND_SIGNAL(reagent_source, COMSIG_ITEM_ON_COMPOSTED, user) @@ -907,7 +907,6 @@ SEND_SIGNAL(O, COMSIG_SEED_ON_PLANTED, src) to_chat(user, span_notice("You plant [O].")) set_seed(O) - age = 1 set_plant_health(myseed.endurance) lastcycle = world.time return @@ -987,9 +986,9 @@ to_chat(user, span_notice("The tray is empty.")) return if(myseed.apply_graft(snip)) - to_chat(user, "You carefully integrate the grafted plant limb onto [myseed.plantname], granting it [snip.stored_trait.get_name()].") + to_chat(user, span_notice("You carefully integrate the grafted plant limb onto [myseed.plantname], granting it [snip.stored_trait.get_name()].")) else - to_chat(user, "You integrate the grafted plant limb onto [myseed.plantname], but it does not accept the [snip.stored_trait.get_name()] trait from the [snip].") + to_chat(user, span_notice("You integrate the grafted plant limb onto [myseed.plantname], but it does not accept the [snip.stored_trait.get_name()] trait from the [snip].")) qdel(snip) return @@ -1012,7 +1011,6 @@ if(O.use_tool(src, user, 50, volume=50) || (!myseed && !weedlevel)) user.visible_message(span_notice("[user] digs out the plants in [src]!"), span_notice("You dig out all of [src]'s plants!")) if(myseed) //Could be that they're just using it as a de-weeder - age = 0 set_plant_health(0, update_icon = FALSE, forced = TRUE) lastproduce = 0 set_seed(null) @@ -1087,10 +1085,14 @@ /obj/machinery/hydroponics/click_ctrl(mob/user) if(!anchored) return NONE + + update_use_power(ACTIVE_POWER_USE) + if(!powered()) to_chat(user, span_warning("[name] has no power.")) update_use_power(NO_POWER_USE) return CLICK_ACTION_BLOCKING + set_self_sustaining(!self_sustaining) to_chat(user, span_notice("You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].")) return CLICK_ACTION_SUCCESS diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index ebfff08e87886..2de37c55d0eaf 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -201,7 +201,7 @@ return RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(squash_plant)) - RegisterSignal(our_plant, COMSIG_MOVABLE_IMPACT, PROC_REF(squash_plant)) + RegisterSignal(our_plant, COMSIG_MOVABLE_IMPACT, PROC_REF(squash_plant_if_not_caught)) RegisterSignal(our_plant, COMSIG_ITEM_ATTACK_SELF, PROC_REF(squash_plant)) /* @@ -238,6 +238,10 @@ qdel(our_plant) +/datum/plant_gene/trait/squash/proc/squash_plant_if_not_caught(datum/source, atom/hit_atom, datum/thrownthing/throwing_datum, caught) + if(!caught) + squash_plant(source, hit_atom) + /* * Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery. * Applies other trait effects (teleporting, etc) to the target by signal. @@ -640,7 +644,7 @@ if(living_target.reagents && living_target.can_inject()) var/injecting_amount = max(1, our_seed.potency * 0.2) // Minimum of 1, max of 20 our_plant.reagents.trans_to(living_target, injecting_amount, methods = INJECT) - to_chat(target, "You are pricked by [our_plant]!") + to_chat(target, span_danger("You are pricked by [our_plant]!")) log_combat(our_plant, living_target, "pricked and attempted to inject reagents from [our_plant] to [living_target]. Last touched by: [our_plant.fingerprintslast].") our_plant.investigate_log("pricked and injected [key_name(living_target)] and injected [injecting_amount] reagents at [AREACOORD(living_target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY) @@ -797,7 +801,7 @@ icon = "face-laugh-squint" mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_GRAFTABLE /// Sounds that play when this trait triggers - var/list/sounds = list('sound/items/SitcomLaugh1.ogg', 'sound/items/SitcomLaugh2.ogg', 'sound/items/SitcomLaugh3.ogg') + var/list/sounds = list('sound/items/sitcom_laugh/sitcomLaugh1.ogg', 'sound/items/sitcom_laugh/sitcomLaugh2.ogg', 'sound/items/sitcom_laugh/sitcomLaugh3.ogg') /datum/plant_gene/trait/plant_laughter/on_new_plant(obj/item/our_plant, newloc) . = ..() diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index c558cba8b3eab..93d9cc0aea773 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -276,7 +276,7 @@ data["trait_db"] += trait_data return data -/obj/machinery/seed_extractor/ui_act(action, params) +/obj/machinery/seed_extractor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 771e52b60d013..ebee146eb0e1d 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -482,7 +482,7 @@ return switch(choice) if("Plant Name") - var/newplantname = reject_bad_text(tgui_input_text(user, "Write a new plant name", "Plant Name", plantname, 20)) + var/newplantname = reject_bad_text(tgui_input_text(user, "Write a new plant name", "Plant Name", plantname, max_length = MAX_NAME_LEN)) if(isnull(newplantname)) return if(!user.can_perform_action(src)) @@ -490,7 +490,7 @@ name = "[LOWER_TEXT(newplantname)]" plantname = newplantname if("Seed Description") - var/newdesc = tgui_input_text(user, "Write a new seed description", "Seed Description", desc, 180) + var/newdesc = tgui_input_text(user, "Write a new seed description", "Seed Description", desc, max_length = MAX_DESC_LEN) if(isnull(newdesc)) return if(!user.can_perform_action(src)) @@ -499,7 +499,7 @@ if("Product Description") if(product && !productdesc) productdesc = initial(product.desc) - var/newproductdesc = tgui_input_text(user, "Write a new product description", "Product Description", productdesc, 180) + var/newproductdesc = tgui_input_text(user, "Write a new product description", "Product Description", productdesc, max_length = MAX_DESC_LEN) if(isnull(newproductdesc)) return if(!user.can_perform_action(src)) @@ -629,11 +629,6 @@ /obj/item/grown/get_plant_seed() return seed - - - - - /obj/item/seeds/proc/perform_reagent_pollination(obj/item/seeds/donor) var/list/datum/plant_gene/reagent/valid_reagents = list() for(var/datum/plant_gene/reagent/donor_reagent in donor.genes) @@ -655,11 +650,5 @@ if(length(valid_reagents)) // pick a valid reagent that our receptor seed don't have and add the gene to it var/datum/plant_gene/reagent/selected_reagent = pick(valid_reagents) - genes += selected_reagent.Copy() reagents_from_genes() - - - - - diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm index 19f0bfb641609..26d58c472e1bf 100644 --- a/code/modules/hydroponics/unique_plant_genes.dm +++ b/code/modules/hydroponics/unique_plant_genes.dm @@ -593,7 +593,7 @@ else our_plant.color = COLOR_RED - playsound(our_plant.drop_location(), 'sound/weapons/armbomb.ogg', 75, TRUE, -3) + playsound(our_plant.drop_location(), 'sound/items/weapons/armbomb.ogg', 75, TRUE, -3) addtimer(CALLBACK(src, PROC_REF(detonate), our_plant), rand(4 SECONDS, 10 SECONDS)) //BUBBERSTATION CHANGE: 1 TO 6 INTO 4 TO 10. /datum/plant_gene/trait/bomb_plant/potency_based/detonate(obj/item/our_plant) diff --git a/code/modules/instruments/instrument_data/fun.dm b/code/modules/instruments/instrument_data/fun.dm index 68a88683fccd3..52b88295ea861 100644 --- a/code/modules/instruments/instrument_data/fun.dm +++ b/code/modules/instruments/instrument_data/fun.dm @@ -38,11 +38,11 @@ /datum/instrument/fun/mothscream name = "Moth Scream" id = "mothscream" - real_samples = list("60"='sound/voice/moth/scream_moth.ogg') + real_samples = list("60"='sound/mobs/humanoids/moth/scream_moth.ogg') admin_only = TRUE /datum/instrument/fun/bilehorn name = "Bilehorn" id = "bilehorn" - real_samples = list("60"='sound/creatures/bileworm/bileworm_spit.ogg') + real_samples = list("60"='sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg') admin_only = TRUE diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index 170000eb11557..4cf7df5a671ce 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -27,7 +27,7 @@ if(!ismob(music_player)) return STOP_PLAYING var/mob/user = music_player - if(user.incapacitated() || !((loc == user) || (isturf(loc) && Adjacent(user)))) // sorry, no more TK playing. + if(user.incapacitated || !((loc == user) || (isturf(loc) && Adjacent(user)))) // sorry, no more TK playing. return STOP_PLAYING /obj/item/instrument/suicide_act(mob/living/user) @@ -59,7 +59,7 @@ inhand_icon_state = "banjo" attack_verb_continuous = list("scruggs-styles", "hum-diggitys", "shin-digs", "clawhammers") attack_verb_simple = list("scruggs-style", "hum-diggity", "shin-dig", "clawhammer") - hitsound = 'sound/weapons/banjoslap.ogg' + hitsound = 'sound/items/weapons/banjoslap.ogg' allowed_instrument_ids = "banjo" /obj/item/instrument/guitar @@ -69,7 +69,7 @@ inhand_icon_state = "guitar" attack_verb_continuous = list("plays metal on", "serenades", "crashes", "smashes") attack_verb_simple = list("play metal on", "serenade", "crash", "smash") - hitsound = 'sound/weapons/stringsmash.ogg' + hitsound = 'sound/items/weapons/stringsmash.ogg' allowed_instrument_ids = list("guitar","csteelgt","cnylongt", "ccleangt", "cmutedgt") /obj/item/instrument/eguitar @@ -80,7 +80,7 @@ force = 12 attack_verb_continuous = list("plays metal on", "shreds", "crashes", "smashes") attack_verb_simple = list("play metal on", "shred", "crash", "smash") - hitsound = 'sound/weapons/stringsmash.ogg' + hitsound = 'sound/items/weapons/stringsmash.ogg' allowed_instrument_ids = "eguitar" /obj/item/instrument/glockenspiel @@ -243,6 +243,6 @@ attack_verb_simple = list("flutter", "flap") w_class = WEIGHT_CLASS_TINY force = 0 - hitsound = 'sound/voice/moth/scream_moth.ogg' + hitsound = 'sound/mobs/humanoids/moth/scream_moth.ogg' custom_price = PAYCHECK_COMMAND * 2.37 custom_premium_price = PAYCHECK_COMMAND * 2.37 diff --git a/code/modules/instruments/songs/editor.dm b/code/modules/instruments/songs/editor.dm index 651b3d6f3b647..4029e5c395419 100644 --- a/code/modules/instruments/songs/editor.dm +++ b/code/modules/instruments/songs/editor.dm @@ -111,7 +111,7 @@ tempo = sanitize_tempo(5) // default 120 BPM return TRUE if("add_new_line") - var/newline = tgui_input_text(user, "Enter your line", parent.name) + var/newline = tgui_input_text(user, "Enter your line", parent.name, max_length = MUSIC_MAXLINECHARS) if(!newline || !in_range(parent, user)) return if(lines.len > MUSIC_MAXLINES) @@ -129,7 +129,7 @@ var/line_to_edit = params["line_editing"] if(line_to_edit > lines.len || line_to_edit < 1) return FALSE - var/new_line_text = tgui_input_text(user, "Enter your line ", parent.name, lines[line_to_edit], MUSIC_MAXLINECHARS) + var/new_line_text = tgui_input_text(user, "Enter your line ", parent.name, lines[line_to_edit], max_length = MUSIC_MAXLINECHARS) if(isnull(new_line_text) || !in_range(parent, user)) return FALSE lines[line_to_edit] = new_line_text diff --git a/code/modules/instruments/stationary.dm b/code/modules/instruments/stationary.dm index ca0e7e2d9e770..c9b8263924023 100644 --- a/code/modules/instruments/stationary.dm +++ b/code/modules/instruments/stationary.dm @@ -52,7 +52,7 @@ if(BRUTE) playsound(src, 'sound/effects/piano_hit.ogg', 100, TRUE) if(BURN) - playsound(src, 'sound/items/welder.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/musician/piano/atom_break(damage_flag) . = ..() diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 3b1b52c455461..936c74d93c7ed 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -213,7 +213,10 @@ /mob/living/carbon/human/on_job_equipping(datum/job/equipping, client/player_client) if(equipping.paycheck_department) var/datum/bank_account/bank_account = new(real_name, equipping, dna.species.payday_modifier) - bank_account.payday(STARTING_PAYCHECKS, TRUE) + //BUBBERSTATION CHANGE START: EXTRA DOSH FOR ROUND STARTERS + // bank_account.payday(STARTING_PAYCHECKS, TRUE) + bank_account.payday(STARTING_PAYCHECKS * (!player_client?.mob?.mind?.late_joiner ? 3 : 1 ), TRUE) //Triple the dosh for shift starters. + //BUBBERSTATION CHANGE END account_id = bank_account.account_id bank_account.replaceable = FALSE add_mob_memory(/datum/memory/key/account, remembered_id = account_id) @@ -243,11 +246,20 @@ dna.species.pre_equip_species_outfit(equipping, src, visual_only) equip_outfit_and_loadout(equipping.get_outfit(consistent), player_client?.prefs, visual_only, equipping) // SKYRAT EDIT CHANGE - Add equipping param -// Original: /datum/job/proc/announce_head(mob/living/carbon/human/H, channels) //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 - 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)) +/datum/job/proc/announce_head(mob/living/carbon/human/human, channels, job_title) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES + if(!human) + return + var/obj/machinery/announcement_system/system + var/list/available_machines = list() + for(var/obj/machinery/announcement_system/announce as anything in GLOB.announcement_systems) + if(announce.newhead_toggle) + available_machines += announce + break + if(!length(available_machines)) + return + system = pick(available_machines) + //timer because these should come after the captain announcement + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(system, TYPE_PROC_REF(/obj/machinery/announcement_system, announce), AUTO_ANNOUNCE_NEWHEAD, human.real_name, job_title, channels), 1)) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES //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) @@ -412,10 +424,10 @@ if(visualsOnly) return - var/datum/job/equipped_job = SSjob.GetJobType(jobtype) + var/datum/job/equipped_job = SSjob.get_job_type(jobtype) if(!equipped_job) - equipped_job = SSjob.GetJob(equipped.job) + equipped_job = SSjob.get_job(equipped.job) var/obj/item/card/id/card = equipped.wear_id @@ -497,8 +509,6 @@ hangover_landmark.used = TRUE break 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 if(length(GLOB.jobspawn_overrides[job_spawn_title])) return pick(GLOB.jobspawn_overrides[job_spawn_title]) @@ -524,8 +534,6 @@ /// Finds a valid latejoin spawn point, checking for events and special conditions. /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 if(length(GLOB.jobspawn_overrides[job_spawn_title])) //We're doing something special today. return pick(GLOB.jobspawn_overrides[job_spawn_title]) diff --git a/code/modules/jobs/job_types/assistant/gimmick_assistants.dm b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm index 16c0e0378443c..161ea00a4fbd2 100644 --- a/code/modules/jobs/job_types/assistant/gimmick_assistants.dm +++ b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm @@ -129,7 +129,7 @@ mask = /obj/item/clothing/mask/whistle uniform = /obj/item/clothing/under/color/red - //neck = /obj/item/camera SKYRAT EDIT REMOVAL + //neck = /obj/item/camera //SKYRAT TODO - Figure out why this adding to Wardrobe canon list makes holodisks with clowns harddel cameras outfit_weight = 2 diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm old mode 100755 new mode 100644 diff --git a/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm b/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm index 637177adffbcd..0968569ae33af 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm @@ -222,7 +222,7 @@ inhand_icon_state = null /obj/item/clothing/suit/chaplainsuit/armor/crusader - name = "Crusader's Armour" + name = "crusader's armour" desc = "Armour that's comprised of metal and cloth." icon_state = "crusader" w_class = WEIGHT_CLASS_BULKY diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm index b2958f9696831..ca81e7bf468b8 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm @@ -22,6 +22,8 @@ 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 + /// Affects GLOB.holy_weapon_type. Disable to allow null rods to change at will and without affecting the station's type. + var/station_holy_item = TRUE /obj/item/nullrod/Initialize(mapload) . = ..() @@ -35,7 +37,7 @@ ) AddElement(/datum/element/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) - if(!GLOB.holy_weapon_type && type == /obj/item/nullrod) + if((!GLOB.holy_weapon_type || !station_holy_item) && type == /obj/item/nullrod) var/list/rods = list() for(var/obj/item/nullrod/nullrod_type as anything in typesof(/obj/item/nullrod)) if(!initial(nullrod_type.chaplain_spawnable)) @@ -56,6 +58,8 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an AddComponent(/datum/component/subtype_picker, rods, CALLBACK(src, PROC_REF(on_holy_weapon_picked))) /obj/item/nullrod/proc/on_holy_weapon_picked(obj/item/nullrod/holy_weapon_type) + if(!station_holy_item) + return GLOB.holy_weapon_type = holy_weapon_type SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NULLROD_PICKED) SSblackbox.record_feedback("tally", "chaplain_weapon", 1, "[initial(holy_weapon_type.name)]") @@ -94,6 +98,10 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an . += span_cult_italic("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/non_station + station_holy_item = FALSE + chaplain_spawnable = FALSE + /// Claymore Variant /// This subtype possesses a block chance and is sharp. @@ -109,9 +117,9 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT block_chance = 30 - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' sharpness = SHARP_EDGED - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' 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") menu_description = "A sharp claymore which provides a low chance of blocking incoming melee attacks. Can be worn on the back or belt." @@ -132,7 +140,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' inhand_x_dimension = 64 inhand_y_dimension = 64 - hitsound = 'sound/hallucinations/growl1.ogg' + hitsound = 'sound/effects/hallucinations/growl1.ogg' menu_description = "A sharp blade which provides a low chance of blocking incoming melee attacks. Can be worn on the back or belt." /obj/item/nullrod/claymore/chainsaw_sword @@ -144,7 +152,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an slot_flags = ITEM_SLOT_BELT attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices") attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice") - hitsound = 'sound/weapons/chainsawhit.ogg' + hitsound = 'sound/items/weapons/chainsawhit.ogg' tool_behaviour = TOOL_SAW toolspeed = 1.5 //slower than a real saw menu_description = "A sharp chainsaw sword which provides a low chance of blocking incoming melee attacks. Can be used as a slower saw tool. Can be worn on the belt." @@ -189,8 +197,8 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an inhand_icon_state = "e_sword_on_blue" worn_icon_state = "swordblue" slot_flags = ITEM_SLOT_BELT - hitsound = 'sound/weapons/blade1.ogg' - block_sound = 'sound/weapons/block_blade.ogg' + hitsound = 'sound/items/weapons/blade1.ogg' + block_sound = 'sound/items/weapons/block_blade.ogg' menu_description = "A sharp energy sword which provides a low chance of blocking incoming melee attacks. Can be worn on the belt." /obj/item/nullrod/claymore/saber/red @@ -225,7 +233,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an sharpness = SHARP_EDGED attack_verb_continuous = list("chops", "slices", "cuts", "zandatsu's") attack_verb_simple = list("chop", "slice", "cut", "zandatsu") - hitsound = 'sound/weapons/rapierhit.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' menu_description = "A sharp blade which partially penetrates armor. Very effective at butchering bodies. Can be worn on the back." /obj/item/nullrod/vibro/Initialize(mapload) @@ -245,7 +253,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' worn_icon_state = "spellblade" - hitsound = 'sound/weapons/rapierhit.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' menu_description = "A sharp blade which partially penetrates armor. Very effective at butchering bodies. Can be worn on the back." /obj/item/nullrod/vibro/talking @@ -259,7 +267,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an worn_icon_state = "talking_sword" attack_verb_continuous = list("chops", "slices", "cuts") attack_verb_simple= list("chop", "slice", "cut") - hitsound = 'sound/weapons/rapierhit.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' menu_description = "A sharp blade which partially penetrates armor. Able to awaken a friendly spirit to provide guidance. Very effective at butchering bodies. Can be worn on the back." /obj/item/nullrod/vibro/talking/Initialize(mapload) @@ -276,7 +284,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an slot_flags = ITEM_SLOT_BELT attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices") attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice") - hitsound = 'sound/weapons/chainsawhit.ogg' + hitsound = 'sound/items/weapons/chainsawhit.ogg' tool_behaviour = TOOL_SAW toolspeed = 0.5 //same speed as an active chainsaw chaplain_spawnable = FALSE //prevents being pickable as a chaplain weapon (it has 30 force) @@ -297,7 +305,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an slot_flags = null item_flags = ABSTRACT | DROPDEL w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/weapons/sear.ogg' + hitsound = 'sound/items/weapons/sear.ogg' damtype = BURN attack_verb_continuous = list("punches", "cross counters", "pummels") attack_verb_simple = list(SFX_PUNCH, "cross counter", "pummel") @@ -321,7 +329,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an force = 5 slot_flags = ITEM_SLOT_BACK block_chance = 50 - block_sound = 'sound/weapons/genhit.ogg' + block_sound = 'sound/items/weapons/genhit.ogg' menu_description = "A red staff which provides a medium chance of blocking incoming attacks via a protective red aura around its user, but deals very low amount of damage. Can be worn only on the back." /// The icon which appears over the mob holding the item var/shield_icon = "shield-red" @@ -352,7 +360,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an force = 4.13 throwforce = 1 slot_flags = ITEM_SLOT_BELT - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' 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") menu_description = "An odd s(w)ord dealing a laughable amount of damage. Fits in pockets. Can be worn on the belt." @@ -398,7 +406,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an sharpness = SHARP_EDGED attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices") attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice") - hitsound = 'sound/weapons/chainsawhit.ogg' + hitsound = 'sound/items/weapons/chainsawhit.ogg' tool_behaviour = TOOL_SAW toolspeed = 2 //slower than a real saw menu_description = "An undroppable sharp chainsaw hand. Can be used as a very slow saw tool. Capable of slowly butchering bodies. Disappears if the arm holding it is cut off." @@ -449,7 +457,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an slot_flags = ITEM_SLOT_BACK attack_verb_continuous = list("attacks", "smashes", "crushes", "splatters", "cracks") attack_verb_simple = list("attack", "smash", "crush", "splatter", "crack") - hitsound = 'sound/weapons/blade1.ogg' + hitsound = 'sound/items/weapons/blade1.ogg' menu_description = "A hammer dealing a little less damage due to its user's pride. Has a low chance of transferring some of the user's reagents to the target. Capable of tapping knees to measure brain health. Can be worn on the back." /obj/item/nullrod/pride_hammer/Initialize(mapload) @@ -478,7 +486,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an slot_flags = ITEM_SLOT_BELT attack_verb_continuous = list("whips", "lashes") attack_verb_simple = list("whip", "lash") - hitsound = 'sound/weapons/chainhit.ogg' + hitsound = 'sound/items/weapons/chainhit.ogg' menu_description = "A whip. Deals extra damage to vampires. Fits in pockets. Can be worn on the belt." // Atheist's Fedora - Wear it on your head. No melee damage, massive throw force. @@ -556,7 +564,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an force = 15 attack_verb_continuous = list("bites", "eats", "fin slaps") attack_verb_simple = list("bite", "eat", "fin slap") - hitsound = 'sound/weapons/bite.ogg' + hitsound = 'sound/items/weapons/bite.ogg' menu_description = "A plushie dealing a little less damage due to its cute form. Capable of blessing one person with the Carp-Sie favor, which grants friendship of all wild space carps. Fits in pockets. Can be worn on the belt." /obj/item/nullrod/carp/Initialize(mapload) @@ -570,7 +578,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown." force = 14 block_chance = 40 - block_sound = 'sound/weapons/genhit.ogg' + block_sound = 'sound/items/weapons/genhit.ogg' slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY hitsound = SFX_SWING_HIT @@ -610,7 +618,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an w_class = WEIGHT_CLASS_HUGE sharpness = SHARP_EDGED slot_flags = null - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' 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") item_flags = SLOWS_WHILE_IN_HAND @@ -650,7 +658,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an slot_flags = ITEM_SLOT_BACK attack_verb_continuous = list("pokes", "impales", "pierces", "jabs") attack_verb_simple = list("poke", "impale", "pierce", "jab") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED menu_description = "A sharp pitchfork. Can be worn on the back." @@ -687,7 +695,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an armour_penetration = 35 attack_verb_continuous = list("pulses", "mends", "cuts") attack_verb_simple = list("pulse", "mend", "cut") - hitsound = 'sound/effects/sparks4.ogg' + hitsound = 'sound/effects/sparks/sparks4.ogg' menu_description = "A tool dealing brain damage which partially penetrates armor. Fits in pockets. Can be worn on the belt." // Ancient Spear - Slight armor penetration, based on the Brass Spear from the Clockcult game mode. @@ -706,9 +714,31 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an w_class = WEIGHT_CLASS_HUGE attack_verb_continuous = list("stabs", "pokes", "slashes", "clocks") attack_verb_simple = list("stab", "poke", "slash", "clock") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' menu_description = "A pointy spear which penetrates armor a little. Can be worn only on the belt." +// Unholy version of above, since the gamemode is dead in the water + +/obj/item/brass_spear + name = "dull brass spear" + desc = "An ancient spear made of brass. The point seems sharp, but it feels so dull.. you get a feeling brass isn't good nonmagical material for a weapon." + icon = 'icons/obj/weapons/spear.dmi' + icon_state = "ratvarian_spear" + inhand_icon_state = "ratvarian_spear" + lefthand_file = 'icons/mob/inhands/antag/clockwork_lefthand.dmi' + righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi' + slot_flags = ITEM_SLOT_BELT + force = 15 + throw_speed = 3 + throw_range = 7 + throwforce = 15 + armour_penetration = 10 + sharpness = SHARP_POINTY + w_class = WEIGHT_CLASS_HUGE + attack_verb_continuous = list("stabs", "pokes", "slashes", "clocks") + attack_verb_simple = list("stab", "poke", "slash", "clock") + hitsound = 'sound/items/weapons/bladeslice.ogg' + // Nullblade - For when you really want to feel like rolling dice during combat /obj/item/nullrod/nullblade @@ -725,9 +755,9 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an wound_bonus = 10 bare_wound_bonus = 30 slot_flags = ITEM_SLOT_BELT - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' sharpness = SHARP_POINTY - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("attacks", "punctures", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") attack_verb_simple = list("attack", "puncture", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") menu_description = "A blade that deals variable, low amounts of damage, but does easily inflict wounds. \ @@ -878,4 +908,4 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an // We got a sneak attack! living_target.apply_damage(round(sneak_attack_dice, DAMAGE_PRECISION), BRUTE, def_zone = affecting, blocked = armor_block, wound_bonus = bare_wound_bonus, sharpness = SHARP_EDGED) living_target.balloon_alert(user, "sneak attack!") - playsound(living_target, 'sound/weapons/guillotine.ogg', 50, TRUE) + playsound(living_target, 'sound/items/weapons/guillotine.ogg', 50, TRUE) 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 ec484ebe6ebc5..b6c36058d0884 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm @@ -25,7 +25,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and return ..() to_chat(owner, span_userdanger("[scythe] tears into you for your unworthy display of arrogance!")) - playsound(owner, 'sound/magic/demon_attack1.ogg', 50, TRUE) + playsound(owner, 'sound/effects/magic/demon_attack1.ogg', 50, TRUE) part.receive_damage(brute = 25, wound_bonus = 10, sharpness = SHARP_EDGED) return ..() @@ -152,7 +152,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and 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) + playsound(get_turf(potential_reaping), 'sound/items/weapons/bladeslice.ogg', 250, TRUE) reaped_head.dismember() user.visible_message(span_danger("[user] swings [src] down, slicing [potential_reaping]'s [head_name] clean off! You think [src] may have grown stronger!"), span_notice("As you perform the death knell on [potential_reaping], [src] gains power! For a time...")) if(potential_empowerment == SCYTHE_SATED) //We don't want actual player heads to go wandering off, but it'll be funny if a bunch of monkeyhuman heads started floating around diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index 26a43fa775192..dc36796c4d1cf 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -82,7 +82,7 @@ /datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() - var/datum/job/cook/other_chefs = SSjob.GetJobType(jobtype) + var/datum/job/cook/other_chefs = SSjob.get_job_type(jobtype) if(other_chefs) // If there's other Chefs, you're a Cook if(other_chefs.cooks > 0)//Cooks id_trim = /datum/id_trim/job/cook diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm index a3172c444074d..96fc6177a158c 100644 --- a/code/modules/jobs/job_types/curator.dm +++ b/code/modules/jobs/job_types/curator.dm @@ -48,7 +48,7 @@ /obj/item/glassblowing/magnifying_glass, //SKYRAT EDIT: Magnifying Glass ) belt = /obj/item/modular_computer/pda/curator - ears = /obj/item/radio/headset/headset_srv + ears = /obj/item/radio/headset/headset_srvent shoes = /obj/item/clothing/shoes/laceup l_pocket = /obj/item/laser_pointer/green r_pocket = /obj/item/key/displaycase @@ -56,6 +56,18 @@ accessory = /obj/item/clothing/accessory/pocketprotector/full +/datum/outfit/job/curator/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + if(visualsOnly) + return ..() + + /// There can be only one cameraman on this station, and no, not that kind + var/static/cameraman_choosen = FALSE + if(!cameraman_choosen) + backpack_contents[/obj/item/broadcast_camera] = 1 + cameraman_choosen = TRUE + return ..() + + /datum/outfit/job/curator/post_equip(mob/living/carbon/human/translator, visualsOnly = FALSE) ..() diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index ddcae8f806075..96da95519e3e8 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -29,13 +29,14 @@ mail_goodies = list( /obj/item/storage/fancy/cigarettes = 25, - /obj/item/ammo_box/c38 = 25, + /obj/item/ammo_box/c38 = 20, /obj/item/ammo_box/c38/dumdum = 5, /obj/item/ammo_box/c38/hotshot = 5, /obj/item/ammo_box/c38/iceblox = 5, /obj/item/ammo_box/c38/match = 5, /obj/item/ammo_box/c38/trac = 5, - /obj/item/storage/belt/holster/detective/full = 1 + /obj/item/card/id/advanced/plainclothes = 5, + /obj/item/storage/belt/holster/detective/full = 1, ) family_heirlooms = list(/obj/item/reagent_containers/cup/glass/bottle/whiskey) @@ -49,6 +50,8 @@ name = "Detective" jobtype = /datum/job/detective + id = /obj/item/card/id/advanced/plainclothes + id_trim = /datum/id_trim/job/detective uniform = /obj/item/clothing/under/rank/security/detective suit = /obj/item/clothing/suit/jacket/det_suit diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index eba86ec2af07a..46090cdbe30ac 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -131,7 +131,7 @@ return FALSE if(!user.is_holding(src)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE if(!user.mind) return FALSE diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index cc03854957c63..7370af5d9ec4e 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -50,6 +50,10 @@ ears = /obj/item/radio/headset/headset_sci l_pocket = /obj/item/modular_computer/pda/roboticist + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/science + duffelbag = /obj/item/storage/backpack/duffelbag/science + pda_slot = ITEM_SLOT_LPOCKET skillchips = list(/obj/item/skillchip/job/roboticist) diff --git a/code/modules/jobs/job_types/station_trait/human_ai.dm b/code/modules/jobs/job_types/station_trait/human_ai.dm index 032ad08af5a60..a6e77d77a510c 100644 --- a/code/modules/jobs/job_types/station_trait/human_ai.dm +++ b/code/modules/jobs/job_types/station_trait/human_ai.dm @@ -161,6 +161,6 @@ user.balloon_alert(user, "unpacking...") if(!do_after(user, 5 SECONDS, src)) return - playsound(src, 'sound/items/drill_use.ogg', 40, TRUE) + playsound(src, 'sound/items/tools/drill_use.ogg', 40, TRUE) new /obj/machinery/computer/camera_advanced/human_ai(get_turf(src)) qdel(src) diff --git a/code/modules/jobs/job_types/station_trait/pun_pun.dm b/code/modules/jobs/job_types/station_trait/pun_pun.dm new file mode 100644 index 0000000000000..eca4861e77ef0 --- /dev/null +++ b/code/modules/jobs/job_types/station_trait/pun_pun.dm @@ -0,0 +1,53 @@ +///Special job, active during monkey day. +/datum/job/pun_pun + title = JOB_PUN_PUN + description = "Assist the service department by serving drinks and food and entertaining the crew." + department_head = list(JOB_HEAD_OF_PERSONNEL) + faction = FACTION_STATION + total_positions = 0 + spawn_positions = 0 + supervisors = "the Bartender" + spawn_type = /mob/living/carbon/human/species/monkey/punpun + outfit = /datum/outfit/job/pun_pun + config_tag = "PUN_PUN" + random_spawns_possible = FALSE + paycheck = PAYCHECK_LOWER + paycheck_department = ACCOUNT_CIV + display_order = JOB_DISPLAY_ORDER_PUN_PUN + departments_list = list(/datum/job_department/service) + exclusive_mail_goodies = TRUE + mail_goodies = list( + /obj/item/food/grown/banana = 4, + /obj/effect/spawner/random/entertainment/money_medium = 3, + /obj/item/clothing/head/helmet/monkey_sentience = 1, + /obj/item/book/granter/sign_language = 1, + /obj/item/food/monkeycube = 1, + ) + rpg_title = "Homunculus" + allow_bureaucratic_error = FALSE + job_flags = (STATION_JOB_FLAGS|STATION_TRAIT_JOB_FLAGS)&~JOB_ASSIGN_QUIRKS + +/datum/job/pun_pun/get_spawn_mob(client/player_client, atom/spawn_point) + if (!player_client) + return + var/mob/living/monky = new spawn_type(get_turf(spawn_point)) + if(!GLOB.the_one_and_only_punpun) + GLOB.the_one_and_only_punpun = monky + return monky + +/datum/job/pun_pun/after_spawn(mob/living/carbon/human/monkey, client/player_client) + . = ..() + monkey.make_clever_and_no_dna_scramble() + +/datum/outfit/job/pun_pun + name = "Pun Pun" + jobtype = /datum/job/pun_pun + + id_trim = /datum/id_trim/job/pun_pun + belt = /obj/item/modular_computer/pda/pun_pun + uniform = /obj/item/clothing/under/suit/waiter + backpack_contents = list( + /obj/item/gun/ballistic/shotgun/monkey = 1, + /obj/item/storage/box/beanbag = 1, + ) + shoes = null //monkeys cannot equip shoes diff --git a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm index 6fcb8d94707f5..f8a0f2f801d31 100644 --- a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm +++ b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm @@ -37,10 +37,19 @@ allow_bureaucratic_error = FALSE job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS -/datum/job/veteran_advisor/get_roundstart_spawn_point() //Spawning at Brig where Officers spawn - if (length(GLOB.start_landmarks_list["Security Officer"])) - return pick(GLOB.start_landmarks_list["Security Officer"]) - return ..() +/datum/job/veteran_advisor/get_default_roundstart_spawn_point() + for(var/obj/effect/landmark/start/spawn_point as anything in GLOB.start_landmarks_list) + if(spawn_point.name != "Security Officer") + continue + . = spawn_point + if(spawn_point.used) //so we can revert to spawning them on top of eachother if something goes wrong + continue + spawn_point.used = TRUE + break + if(!.) // Try to fall back to "our" landmark + . = ..() + if(!.) + log_mapping("Job [title] ([type]) couldn't find a round start spawn point.") /datum/job/veteran_advisor/after_spawn(mob/living/spawned, client/player_client) . = ..() diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index 31b0d4f795058..ebf1f79936fb2 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -36,7 +36,8 @@ /obj/item/storage/box/handcuffs = 10, /obj/item/storage/box/teargas = 10, /obj/item/storage/box/flashbangs = 10, - /obj/item/storage/box/rubbershot = 10 + /obj/item/storage/box/rubbershot = 10, + /obj/item/storage/box/lethalshot = 5 ) rpg_title = "Jailor" job_flags = STATION_JOB_FLAGS | JOB_BOLD_SELECT_TEXT diff --git a/code/modules/language/_language_holder.dm b/code/modules/language/_language_holder.dm index b6dea2d4e0e28..b48a1ab1530ab 100644 --- a/code/modules/language/_language_holder.dm +++ b/code/modules/language/_language_holder.dm @@ -37,10 +37,10 @@ Key procs /datum/language_holder /// Lazyassoclist of all understood languages - var/list/understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) + var/list/understood_languages /// Lazyassoclist of languages that can be spoken. /// Tongue organ may also set limits beyond this list. - var/list/spoken_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) + var/list/spoken_languages /// Lazyassoclist of blocked languages. /// Used to prevent understanding and speaking certain languages, ie for certain mobs, mutations etc. var/list/blocked_languages @@ -503,14 +503,17 @@ GLOBAL_LIST_INIT(prototype_language_holders, init_language_holder_prototypes()) /datum/language/nekomimetic = list(LANGUAGE_ATOM), ) +// Given to atoms by default +/datum/language_holder/atom_basic + understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) + spoken_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) + +// Explicitly empty one for readability /datum/language_holder/empty - understood_languages = null - spoken_languages = null +// Has all the languages known (via "mind") /datum/language_holder/universal - understood_languages = null - spoken_languages = null /datum/language_holder/universal/New() . = ..() - grant_all_languages() + grant_all_languages(source = LANGUAGE_MIND) diff --git a/code/modules/language/_language_menu.dm b/code/modules/language/_language_menu.dm index 0bfb7a79977af..905be8169e26a 100644 --- a/code/modules/language/_language_menu.dm +++ b/code/modules/language/_language_menu.dm @@ -56,7 +56,7 @@ return data -/datum/language_menu/ui_act(action, params) +/datum/language_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/language/nekomimetic.dm b/code/modules/language/nekomimetic.dm index 39a968c92139a..4be943f84417a 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", "gato", "kit", "sune", "yori", "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 5221dc8047422..eda1f18f8e7eb 100644 --- a/code/modules/library/bibles.dm +++ b/code/modules/library/bibles.dm @@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( /// Destroy the bible when it's shot by a bullet /obj/item/book/bible/proc/on_intercepted_bullet(mob/living/victim, obj/projectile/bullet) victim.add_mood_event("blessing", /datum/mood_event/blessing) - playsound(victim, 'sound/magic/magic_block_holy.ogg', 50, TRUE) + playsound(victim, 'sound/effects/magic/magic_block_holy.ogg', 50, TRUE) victim.visible_message(span_warning("[src] takes [bullet] in [victim]'s place!")) var/obj/structure/fluff/paper/stack/pages = new(get_turf(src)) pages.setDir(pick(GLOB.alldirs)) @@ -186,7 +186,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( return FALSE if(!istype(user) || !user.is_holding(src)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE if(user.mind?.holy_role != HOLY_ROLE_HIGHPRIEST) return FALSE @@ -269,9 +269,6 @@ GLOBAL_LIST_INIT(bibleitemstates, list( playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) log_combat(user, target_mob, "attacked", src) -/obj/item/book/bible/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) - return !istype(storage_holder, /obj/item/book/bible) - /obj/item/book/bible/interact_with_atom(atom/bible_smacked, mob/living/user, list/modifiers) if(SEND_SIGNAL(bible_smacked, COMSIG_BIBLE_SMACKED, user) & COMSIG_END_BIBLE_CHAIN) return ITEM_INTERACT_SUCCESS @@ -313,7 +310,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( if(istype(bible_smacked, /obj/item/melee/cultblade/haunted) && !IS_CULTIST(user)) var/obj/item/melee/cultblade/haunted/sword = bible_smacked sword.balloon_alert(user, "exorcising...") - playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE) + playsound(src,'sound/effects/hallucinations/veryfar_noise.ogg',40,TRUE) if(do_after(user, 4 SECONDS, target = sword)) playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE) new /obj/item/nullrod/nullblade(get_turf(sword)) @@ -332,7 +329,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 = "syndicate tome" desc = "A very ominous tome resembling a bible." icon_state ="ebook" item_flags = NO_BLOOD_ON_ITEM @@ -340,7 +337,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( throw_range = 7 throwforce = 18 force = 18 - hitsound = 'sound/weapons/sear.ogg' + hitsound = 'sound/items/weapons/sear.ogg' damtype = BURN attack_verb_continuous = list("attacks", "burns", "blesses", "damns", "scorches", "curses", "smites") attack_verb_simple = list("attack", "burn", "bless", "damn", "scorch", "curses", "smites") diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index 5ae9afcdcbe49..7f5f010563a5a 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -133,7 +133,7 @@ name = newtitle book_data.set_title(html_decode(newtitle)) //Don't want to double encode here if("Contents") - var/content = tgui_input_text(user, "Write your book's contents (HTML NOT allowed)", "Book Contents", multiline = TRUE) + var/content = tgui_input_text(user, "Write your book's contents (HTML NOT allowed)", "Book Contents", max_length = MAX_PAPER_LENGTH, multiline = TRUE) if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return if(!content) @@ -141,7 +141,7 @@ return book_data.set_content(html_decode(content)) if("Author") - var/author = tgui_input_text(user, "Write the author's name", "Author Name") + var/author = tgui_input_text(user, "Write the author's name", "Author Name", max_length = MAX_NAME_LEN) if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return if(!author) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index a65159a3f8225..d7102fe96005a 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -80,7 +80,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) data["params_changed"] = params_changed return data -/obj/machinery/computer/libraryconsole/ui_act(action, params) +/obj/machinery/computer/libraryconsole/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -424,7 +424,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) scanner = WEAKREF(foundya) return foundya -/obj/machinery/computer/libraryconsole/bookmanagement/ui_act(action, params) +/obj/machinery/computer/libraryconsole/bookmanagement/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) //The parent call takes care of stuff like searching, don't forget about that yeah? . = ..() if(.) @@ -753,7 +753,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) return cache = held_book.book_data.return_copy() flick("bigscanner1", src) - playsound(src, 'sound/machines/scanner.ogg', vol = 50, vary = TRUE) + playsound(src, 'sound/machines/scanner/scanner.ogg', vol = 50, vary = TRUE) return TRUE if("clear") cache = null diff --git a/code/modules/library/skill_learning/generic_skillchips/matrix_flip.dm b/code/modules/library/skill_learning/generic_skillchips/matrix_flip.dm deleted file mode 100644 index a836442eca052..0000000000000 --- a/code/modules/library/skill_learning/generic_skillchips/matrix_flip.dm +++ /dev/null @@ -1,40 +0,0 @@ -#define FLIP_STAMINA_COST 19 - -/obj/item/skillchip/matrix_flip - name = "BULLET_DODGER skillchip" - skill_name = "Flip 2 Dodge" - skill_description = "At the cost of stamina, your flips can also be used to dodge incoming projectiles." - skill_icon = FA_ICON_SPINNER - activate_message = span_notice("You feel the urge to flip scenically as if you are the 'Chosen One'.") - deactivate_message = span_notice("The urge to flip goes away.") - -/obj/item/skillchip/matrix_flip/on_activate(mob/living/carbon/user, silent = FALSE) - . = ..() - ADD_TRAIT(user, TRAIT_SLOW_FLIP, SKILLCHIP_TRAIT) - RegisterSignal(user, COMSIG_MOB_EMOTED("flip"), PROC_REF(on_flip)) - RegisterSignal(user, COMSIG_MOB_PRE_EMOTED, PROC_REF(check_if_we_can_flip)) - -/obj/item/skillchip/matrix_flip/on_deactivate(mob/living/carbon/user, silent=FALSE) - REMOVE_TRAIT(user, TRAIT_SLOW_FLIP, SKILLCHIP_TRAIT) - UnregisterSignal(user, list(COMSIG_MOB_EMOTED("flip"), COMSIG_MOB_PRE_EMOTED)) - return ..() - -///Prevent players from stamcritting from INTENTIONAL flips. 1.4s of bullet immunity isn't worth several secs of stun. -/obj/item/skillchip/matrix_flip/proc/check_if_we_can_flip(mob/living/source, key, params, type_override, intentional, datum/emote/emote) - SIGNAL_HANDLER - if(key != "flip" || !intentional) - return - if((source.maxHealth - (source.getStaminaLoss() + FLIP_STAMINA_COST)) <= source.crit_threshold) - source.balloon_alert(source, "too tired!") - return COMPONENT_CANT_EMOTE - -/obj/item/skillchip/matrix_flip/proc/on_flip(mob/living/source) - SIGNAL_HANDLER - if(HAS_TRAIT_FROM(source, TRAIT_UNHITTABLE_BY_PROJECTILES, SKILLCHIP_TRAIT)) - return - playsound(source, 'sound/weapons/fwoosh.ogg', 90, FALSE, frequency = 0.7) - ADD_TRAIT(source, TRAIT_UNHITTABLE_BY_PROJECTILES, SKILLCHIP_TRAIT) - source.adjustStaminaLoss(FLIP_STAMINA_COST) - addtimer(TRAIT_CALLBACK_REMOVE(source, TRAIT_UNHITTABLE_BY_PROJECTILES, SKILLCHIP_TRAIT), FLIP_EMOTE_DURATION * 2) - -#undef FLIP_STAMINA_COST diff --git a/code/modules/library/skill_learning/generic_skillchips/matrix_taunt.dm b/code/modules/library/skill_learning/generic_skillchips/matrix_taunt.dm new file mode 100644 index 0000000000000..cfe61b08e0c3c --- /dev/null +++ b/code/modules/library/skill_learning/generic_skillchips/matrix_taunt.dm @@ -0,0 +1,37 @@ +#define TAUNT_STAMINA_COST 19 + +/obj/item/skillchip/matrix_taunt + name = "BULLET_DODGER skillchip" + skill_name = "Taunt 2 Dodge" + skill_description = "At the cost of stamina, your taunts can also be used to dodge incoming projectiles." + skill_icon = FA_ICON_SPINNER + activate_message = span_notice("You feel the urge to taunt scenically as if you are the 'Chosen One'.") + deactivate_message = span_notice("The urge to taunt goes away.") + +/obj/item/skillchip/matrix_taunt/on_activate(mob/living/carbon/user, silent = FALSE) + . = ..() + RegisterSignal(user, COMSIG_MOB_EMOTED("taunt"), PROC_REF(on_taunt)) + RegisterSignal(user, COMSIG_MOB_PRE_EMOTED, PROC_REF(check_if_we_can_taunt)) + +/obj/item/skillchip/matrix_taunt/on_deactivate(mob/living/carbon/user, silent=FALSE) + UnregisterSignal(user, list(COMSIG_MOB_EMOTED("taunt"), COMSIG_MOB_PRE_EMOTED)) + return ..() + +///Prevent players from stamcritting from INTENTIONAL flips. 1.4s of bullet immunity isn't worth several secs of stun. +/obj/item/skillchip/matrix_taunt/proc/check_if_we_can_taunt(mob/living/source, key, params, type_override, intentional, datum/emote/emote) + SIGNAL_HANDLER + if(key != "taunt" || !intentional) + return + if((source.maxHealth - (source.getStaminaLoss() + TAUNT_STAMINA_COST)) <= source.crit_threshold) + source.balloon_alert(source, "too tired!") + return COMPONENT_CANT_EMOTE + +/obj/item/skillchip/matrix_taunt/proc/on_taunt(mob/living/source) + SIGNAL_HANDLER + if(HAS_TRAIT_FROM(source, TRAIT_UNHITTABLE_BY_PROJECTILES, SKILLCHIP_TRAIT)) + return + ADD_TRAIT(source, TRAIT_UNHITTABLE_BY_PROJECTILES, SKILLCHIP_TRAIT) + source.adjustStaminaLoss(TAUNT_STAMINA_COST) + addtimer(TRAIT_CALLBACK_REMOVE(source, TRAIT_UNHITTABLE_BY_PROJECTILES, SKILLCHIP_TRAIT), TAUNT_EMOTE_DURATION * 1.5) + +#undef TAUNT_STAMINA_COST diff --git a/code/modules/library/skill_learning/generic_skillchips/point.dm b/code/modules/library/skill_learning/generic_skillchips/point.dm new file mode 100644 index 0000000000000..761a482268952 --- /dev/null +++ b/code/modules/library/skill_learning/generic_skillchips/point.dm @@ -0,0 +1,99 @@ +/** + * A skillchip that gives the user bigger arrows when pointing at things (like some id trims do). + * As a bonus, they can costumize the color of the arrow/pointer too. + */ +/obj/item/skillchip/big_pointer + name = "Kommand skillchip" + desc = "A biochip detailing various techniques employed by historical leaders to points at things like a true boss." + skill_name = "Enhanced pointing" + skill_description = "Learn to point at things in a more noticeable way." + skill_icon = FA_ICON_ARROW_DOWN + activate_message = span_notice("From \"The Definitive Compendium of Body Language for the Aspiring Leader\", page 164, paragraph 3...") + deactivate_message = span_notice("So, uh, yeah, how do I point at things again?") + + ///The action for changing the pointer color + var/datum/action/change_pointer_color/action + +/obj/item/skillchip/big_pointer/Destroy() + action = null + return ..() + +/obj/item/skillchip/big_pointer/on_activate(mob/living/carbon/user, silent=FALSE) + . = ..() + RegisterSignal(user, COMSIG_MOVABLE_POINTED, PROC_REF(fancier_pointer)) + if(!action) + action = new(src) + action.Grant(user) + +/obj/item/skillchip/big_pointer/on_deactivate(mob/living/carbon/user, silent=FALSE) + UnregisterSignal(user, COMSIG_MOVABLE_POINTED) + action?.arrow_color = null + action?.arrow_overlay = null + action?.Remove(user) + return ..() + +/obj/item/skillchip/big_pointer/proc/fancier_pointer(mob/living/user, atom/pointed, obj/effect/temp_visual/point/point) + SIGNAL_HANDLER + if(HAS_TRAIT(user, TRAIT_UNKNOWN)) + return + point.cut_overlays() + if(!action.arrow_color) + point.icon_state = "arrow_large" + return + point.icon_state = "arrow_large_white" + point.color = action.arrow_color + var/mutable_appearance/highlight = mutable_appearance(point.icon, "arrow_large_white_highlights", appearance_flags = RESET_COLOR) + point.add_overlay(highlight) + +/datum/action/change_pointer_color + name = "Change Pointer Color" + desc = "Set your custom pointer color, or reset it to the default." + button_icon = /obj/effect/temp_visual/point::icon + button_icon_state = "arrow_large_still" + check_flags = AB_CHECK_CONSCIOUS + ///the color of our arrow + var/arrow_color + ///the arrow overlay shown on the button + var/mutable_appearance/arrow_overlay + +/datum/action/change_pointer_color/Destroy() + . = ..() + arrow_overlay = null + +/datum/action/change_pointer_color/Trigger(trigger_flags) + . = ..() + if(!.) + return + var/mob/user = owner + if(!arrow_color) + pick_color(user) + return + var/choice = tgui_alert(owner, "Reset or update pointer color?","Pointer Color", list("Reset","Update")) + if(user != owner || !choice || !IsAvailable(feedback = TRUE)) + return + if(choice == "Update") + pick_color(user) + else + arrow_color = null + owner.balloon_alert(owner, "pointer reset") + build_all_button_icons(update_flags = UPDATE_BUTTON_ICON, force = TRUE) + +/datum/action/change_pointer_color/proc/pick_color(mob/user) + var/ncolor = input(owner, "Pick new color", "Pointer Color", arrow_color) as color|null + if(user != owner || !IsAvailable(feedback = TRUE)) + return + arrow_color = ncolor + owner.balloon_alert(owner, "pointer updated") + build_all_button_icons(update_flags = UPDATE_BUTTON_ICON, force = TRUE) + +/datum/action/change_pointer_color/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force = FALSE) + if(!arrow_color) + return ..() + + current_button.icon = current_button.icon_state = null + current_button.cut_overlay(arrow_overlay) + + arrow_overlay = mutable_appearance(icon = /obj/effect/temp_visual/point::icon, icon_state = "arrow_large_white_still") + arrow_overlay.color = arrow_color + arrow_overlay.overlays += mutable_appearance(icon = /obj/effect/temp_visual/point::icon, icon_state = "arrow_large_white_still_highlights", appearance_flags = RESET_COLOR) + current_button.add_overlay(arrow_overlay) diff --git a/code/modules/library/skill_learning/generic_skillchips/rod_suplex.dm b/code/modules/library/skill_learning/generic_skillchips/rod_suplex.dm index bff83423be73e..07bc945e1d180 100644 --- a/code/modules/library/skill_learning/generic_skillchips/rod_suplex.dm +++ b/code/modules/library/skill_learning/generic_skillchips/rod_suplex.dm @@ -5,8 +5,8 @@ skill_name = "True Strength" skill_description = "The knowledge and strength to resolve the most ancient conumdrum; what happens when an unstoppable force meets an immovable object." skill_icon = "dumbbell" - activate_message = "You realise if you apply the correct force, at the correct angle, it is possible to make the immovable permanently movable. And... damn, you look huge." - deactivate_message = "You forget how to permanently anchor a paradoxical object. Also, you should really hit the gym..." + activate_message = span_notice("You realise if you apply the correct force, at the correct angle, it is possible to make the immovable permanently movable. And... damn, you look huge.") + deactivate_message = span_notice("You forget how to permanently anchor a paradoxical object. Also, you should really hit the gym...") chip_category = SKILLCHIP_CATEGORY_GENERAL skillchip_flags = NONE slot_use = 1 diff --git a/code/modules/library/skill_learning/job_skillchips/chef.dm b/code/modules/library/skill_learning/job_skillchips/chef.dm index 75bc494543c36..e457d8773a09f 100644 --- a/code/modules/library/skill_learning/job_skillchips/chef.dm +++ b/code/modules/library/skill_learning/job_skillchips/chef.dm @@ -4,8 +4,8 @@ skill_name = "Close Quarters Cooking" skill_description = "A specialised form of self defence, developed by skilled sous-chef de cuisines. No man fights harder than a chef to defend his kitchen." skill_icon = "utensils" - activate_message = "You can visualize how to defend your kitchen with martial arts." - deactivate_message = "You forget how to control your muscles to execute kicks, slams and restraints while in a kitchen environment." + activate_message = span_notice("You can visualize how to defend your kitchen with martial arts.") + deactivate_message = span_notice("You forget how to control your muscles to execute kicks, slams and restraints while in a kitchen environment.") /// The Chef CQC given by the skillchip. var/datum/martial_art/cqc/under_siege/style diff --git a/code/modules/library/skill_learning/job_skillchips/psychologist.dm b/code/modules/library/skill_learning/job_skillchips/psychologist.dm index 6450d13b89a37..be0fe7502f63d 100644 --- a/code/modules/library/skill_learning/job_skillchips/psychologist.dm +++ b/code/modules/library/skill_learning/job_skillchips/psychologist.dm @@ -5,5 +5,5 @@ skill_name = "Supermatter Cognition Theory" skill_description = "Understand the correct mental patterns to keep in mind around matter in a hyperfractal state, causing immunity to visions and making the matter in question \"calmer\"." skill_icon = "spa" - activate_message = "You start thinking in patterns that will render you immune to visions from, and act as a calming influence for, matter in a hyperfractal state." - deactivate_message = "Your thoughts become more disordered and jumbled. You are no longer immune to the abyss." + activate_message = span_notice("You start thinking in patterns that will render you immune to visions from, and act as a calming influence for, matter in a hyperfractal state.") + deactivate_message = span_notice("Your thoughts become more disordered and jumbled. You are no longer immune to the abyss.") diff --git a/code/modules/library/skill_learning/job_skillchips/roboticist.dm b/code/modules/library/skill_learning/job_skillchips/roboticist.dm index 401315e265abc..aa43bafbe8b52 100644 --- a/code/modules/library/skill_learning/job_skillchips/roboticist.dm +++ b/code/modules/library/skill_learning/job_skillchips/roboticist.dm @@ -5,5 +5,5 @@ skill_name = "Cyborg Circuitry" skill_description = "Recognise cyborg wire layouts and understand their functionality at a glance." skill_icon = "sitemap" - activate_message = "You suddenly comprehend the secrets behind cyborg circuitry." - deactivate_message = "Cyborg circuitry stops making sense as images of coloured wires fade from your mind." + activate_message = span_notice("You suddenly comprehend the secrets behind cyborg circuitry.") + deactivate_message = span_notice("Cyborg circuitry stops making sense as images of coloured wires fade from your mind.") diff --git a/code/modules/library/skill_learning/job_skillchips/station_engineer.dm b/code/modules/library/skill_learning/job_skillchips/station_engineer.dm index 0ed2edb5ccda9..08ab6ee61e3f1 100644 --- a/code/modules/library/skill_learning/job_skillchips/station_engineer.dm +++ b/code/modules/library/skill_learning/job_skillchips/station_engineer.dm @@ -5,5 +5,5 @@ skill_name = "Engineering Circuitry" skill_description = "Recognise airlock and APC wire layouts and understand their functionality at a glance." skill_icon = "sitemap" - activate_message = "You suddenly comprehend the secrets behind airlock and APC circuitry." - deactivate_message = "Airlock and APC circuitry stops making sense as images of coloured wires fade from your mind." + activate_message = span_notice("You suddenly comprehend the secrets behind airlock and APC circuitry.") + deactivate_message = span_notice("Airlock and APC circuitry stops making sense as images of coloured wires fade from your mind.") diff --git a/code/modules/library/skill_learning/skill_station.dm b/code/modules/library/skill_learning/skill_station.dm index b376501f758fd..2dec45a6abf77 100644 --- a/code/modules/library/skill_learning/skill_station.dm +++ b/code/modules/library/skill_learning/skill_station.dm @@ -252,7 +252,7 @@ current_skills += list(skill_chip.get_chip_data()) .["current"] = current_skills -/obj/machinery/skill_station/ui_act(action, list/params) +/obj/machinery/skill_station/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/library/skill_learning/skillchip.dm b/code/modules/library/skill_learning/skillchip.dm index b8903e5bde09a..10139585dd9a7 100644 --- a/code/modules/library/skill_learning/skillchip.dm +++ b/code/modules/library/skill_learning/skillchip.dm @@ -377,8 +377,8 @@ skill_name = "Underwater Basketweaving" skill_description = "Master intricate art of using twine to create perfect baskets while submerged." skill_icon = "shopping-basket" - activate_message = "You're one with the twine and the sea." - deactivate_message = "Higher mysteries of underwater basketweaving leave your mind." + activate_message = span_notice("You're one with the twine and the sea.") + deactivate_message = span_notice("Higher mysteries of underwater basketweaving leave your mind.") /obj/item/skillchip/wine_taster name = "WINE skillchip" @@ -387,8 +387,8 @@ skill_name = "Wine Tasting" skill_description = "Recognize wine vintage from taste alone. Never again lack an opinion when presented with an unknown drink." skill_icon = "wine-bottle" - activate_message = "You recall wine taste." - deactivate_message = "Your memories of wine evaporate." + activate_message = span_notice("You recall wine taste.") + deactivate_message = span_notice("Your memories of wine evaporate.") /obj/item/skillchip/bonsai name = "Hedge 3 skillchip" @@ -396,16 +396,16 @@ skill_name = "Hedgetrimming" skill_description = "Trim hedges and potted plants into marvelous new shapes with any old knife. Not applicable to plastic plants." skill_icon = "spa" - activate_message = "Your mind is filled with plant arrangments." - deactivate_message = "You can't remember what a hedge looks like anymore." + activate_message = span_notice("Your mind is filled with plant arrangments.") + deactivate_message = span_notice("You can't remember what a hedge looks like anymore.") /obj/item/skillchip/useless_adapter name = "Skillchip adapter" skill_name = "Useless adapter" skill_description = "Allows you to insert another skillchip into this adapter after it has been inserted into your brain..." skill_icon = "plug" - activate_message = "You can now activate another chip through this adapter, but you're not sure why you did this..." - deactivate_message = "You no longer have the useless skillchip adapter." + activate_message = span_notice("You can now activate another chip through this adapter, but you're not sure why you did this...") + deactivate_message = span_notice("You no longer have the useless skillchip adapter.") skillchip_flags = SKILLCHIP_ALLOWS_MULTIPLE // Literally does nothing. complexity = 0 @@ -417,8 +417,8 @@ skill_name = "Lightbulb Removing" skill_description = "Stop failing taking out lightbulbs today, no gloves needed!" skill_icon = "lightbulb" - activate_message = "Your feel like your pain receptors are less sensitive to hot objects." - deactivate_message = "You feel like hot objects could stop you again..." + activate_message = span_notice("Your feel like your pain receptors are less sensitive to hot objects.") + deactivate_message = span_notice("You feel like hot objects could stop you again...") /obj/item/skillchip/disk_verifier name = "K33P-TH4T-D15K skillchip" @@ -426,8 +426,8 @@ skill_name = "Nuclear Disk Verification" skill_description = "Nuclear authentication disks have an extremely long serial number for verification. This skillchip stores that number, which allows the user to automatically spot forgeries." skill_icon = "save" - activate_message = "You feel your mind automatically verifying long serial numbers on disk shaped objects." - deactivate_message = "The innate recognition of absurdly long disk-related serial numbers fades from your mind." + activate_message = span_notice("You feel your mind automatically verifying long serial numbers on disk shaped objects.") + deactivate_message = span_notice("The innate recognition of absurdly long disk-related serial numbers fades from your mind.") /obj/item/skillchip/entrails_reader name = "3NTR41LS skillchip" @@ -435,8 +435,8 @@ skill_name = "Entrails Reader" skill_description = "Be able to learn about a person's life, by looking at their internal organs. Not to be confused with looking into the future." skill_icon = "lungs" - activate_message = "You feel that you know a lot about interpreting organs." - deactivate_message = "Knowledge of liver damage, heart strain and lung scars fades from your mind." + activate_message = span_notice("You feel that you know a lot about interpreting organs.") + deactivate_message = span_notice("Knowledge of liver damage, heart strain and lung scars fades from your mind.") /obj/item/skillchip/appraiser name = "GENUINE ID Appraisal Now! skillchip" diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index e3f72da5bbffd..21676d1741e74 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -201,8 +201,8 @@ var/list/hand_back if(!(get_offset.light_flags & LIGHT_IGNORE_OFFSET)) hand_back = get_visual_offset(get_offset) - hand_back[1] = -hand_back[1] / world.icon_size - hand_back[2] = -hand_back[2] / world.icon_size + hand_back[1] = -hand_back[1] / ICON_SIZE_X + hand_back[2] = -hand_back[2] / ICON_SIZE_Y else hand_back = list(0, 0) diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index 30c239160e5a6..03e53ff6f8ab1 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -93,7 +93,8 @@ return FALSE LAZYADD(new_atom_host.light_sources, src) - if(ismovable(new_atom_host) && new_atom_host == source_atom) + //yes, we register the signal to the top atom too, this is intentional and ensures contained lighting updates properly + if(ismovable(new_atom_host)) RegisterSignal(new_atom_host, COMSIG_MOVABLE_MOVED, PROC_REF(update_host_lights)) RegisterSignal(new_atom_host, COMSIG_TURF_NO_LONGER_BLOCK_LIGHT, PROC_REF(force_update)) return TRUE @@ -104,7 +105,7 @@ return FALSE LAZYREMOVE(old_atom_host.light_sources, src) - if(ismovable(old_atom_host) && old_atom_host == source_atom) + if(ismovable(old_atom_host)) UnregisterSignal(old_atom_host, COMSIG_MOVABLE_MOVED) UnregisterSignal(old_atom_host, COMSIG_TURF_NO_LONGER_BLOCK_LIGHT) return TRUE diff --git a/code/modules/loadout/categories/heads.dm b/code/modules/loadout/categories/heads.dm index 5d491cc63c558..70ac3821e1beb 100644 --- a/code/modules/loadout/categories/heads.dm +++ b/code/modules/loadout/categories/heads.dm @@ -136,6 +136,26 @@ name = "Rose" item_path = /obj/item/food/grown/rose +/datum/loadout_item/head/sunflower + name = "Sunflower" + item_path = /obj/item/food/grown/sunflower + +/datum/loadout_item/head/poppy + name = "Poppy" + item_path = /obj/item/food/grown/poppy + +/datum/loadout_item/head/lily + name = "Lily" + item_path = /obj/item/food/grown/poppy/lily + +/datum/loadout_item/head/geranium + name = "Geranium" + item_path = /obj/item/food/grown/poppy/geranium + +/datum/loadout_item/head/harebell + name = "Harebell" + item_path = /obj/item/food/grown/harebell + /datum/loadout_item/head/wig name = "Wig" item_path = /obj/item/clothing/head/wig/natural diff --git a/code/modules/loadout/loadout_helpers.dm b/code/modules/loadout/loadout_helpers.dm index ee270693ced12..b5bd890c87419 100644 --- a/code/modules/loadout/loadout_helpers.dm +++ b/code/modules/loadout/loadout_helpers.dm @@ -30,11 +30,11 @@ var/list/preference_list = preference_source.read_preference(/datum/preference/loadout) var/list/loadout_datums = loadout_list_to_datums(preference_list) - var/obj/item/storage/briefcase/empty/travel_suitcase // SKYRAT EDIT ADDITIONi + // SKYRAT EDIT ADDITION BEGIN + var/obj/item/storage/briefcase/empty/travel_suitcase var/loadout_placement_preference = preference_source.read_preference(/datum/preference/choiced/loadout_override_preference) // Slap our things into the outfit given for(var/datum/loadout_item/item as anything in loadout_datums) - // SKYRAT EDIT ADDITION if(item.restricted_roles && equipping && !(equipping.title in item.restricted_roles)) if(preference_source.parent) to_chat(preference_source.parent, span_warning("You were unable to get a loadout item([initial(item.item_path.name)]) due to job restrictions!")) diff --git a/code/modules/loadout/loadout_items.dm b/code/modules/loadout/loadout_items.dm index 79c8012814ae5..de50b793b160a 100644 --- a/code/modules/loadout/loadout_items.dm +++ b/code/modules/loadout/loadout_items.dm @@ -441,4 +441,3 @@ GLOBAL_LIST_INIT(all_loadout_categories, init_loadout_categories()) )) return reskins - diff --git a/code/modules/logging/log_holder.dm b/code/modules/logging/log_holder.dm index b1a43c468dfc8..85a436076c84e 100644 --- a/code/modules/logging/log_holder.dm +++ b/code/modules/logging/log_holder.dm @@ -337,7 +337,7 @@ ADMIN_VERB(log_viewer_new, R_ADMIN|R_DEBUG, "View Round Logs", "View the rounds var/datum/data = data_list[key] if(isnull(data)) - // do nothing - nulls are allowed + pass() // nulls are allowed else if(islist(data)) data = recursive_jsonify(data, semvers) diff --git a/code/modules/lootpanel/_lootpanel.dm b/code/modules/lootpanel/_lootpanel.dm index 45862ebf45542..ab13a7c211677 100644 --- a/code/modules/lootpanel/_lootpanel.dm +++ b/code/modules/lootpanel/_lootpanel.dm @@ -56,13 +56,13 @@ /datum/lootpanel/ui_status(mob/user, datum/ui_state/state) - if(user.incapacitated()) + if(user.incapacitated) return UI_DISABLED return UI_INTERACTIVE -/datum/lootpanel/ui_act(action, list/params) +/datum/lootpanel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mafia/controller.dm b/code/modules/mafia/controller.dm index f6b46c3430dc9..d4edbb37f411e 100644 --- a/code/modules/mafia/controller.dm +++ b/code/modules/mafia/controller.dm @@ -602,13 +602,18 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) outfit_to_distribute = player_outfit for(var/datum/mafia_role/role as anything in all_roles) - var/mob/living/carbon/human/H = new(get_turf(role.assigned_landmark)) - H.add_traits(list(TRAIT_NOFIRE, TRAIT_NOBREATH, TRAIT_CANNOT_CRYSTALIZE, TRAIT_PERMANENTLY_MORTAL), MAFIA_TRAIT) - H.equipOutfit(outfit_to_distribute) - H.status_flags |= GODMODE - RegisterSignal(H, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(display_votes)) + var/mob/living/carbon/human/human = new(get_turf(role.assigned_landmark)) + human.add_traits(list( + TRAIT_NOFIRE, + TRAIT_NOBREATH, + TRAIT_CANNOT_CRYSTALIZE, + TRAIT_PERMANENTLY_MORTAL, + TRAIT_GODMODE, + ), MAFIA_TRAIT) + human.equipOutfit(outfit_to_distribute) + RegisterSignal(human, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(display_votes)) var/obj/item/modular_computer/modpc = role.player_pda - role.register_body(H) + role.register_body(human) if(modpc) player_role_lookup[modpc] = role else diff --git a/code/modules/mafia/roles/roles.dm b/code/modules/mafia/roles/roles.dm index 4cfd7662d843e..b035b618ec4e7 100644 --- a/code/modules/mafia/roles/roles.dm +++ b/code/modules/mafia/roles/roles.dm @@ -145,7 +145,7 @@ /datum/mafia_role/proc/greet() mafia_alert = new(body, src) - SEND_SOUND(body, 'sound/ambience/ambifailure.ogg') + SEND_SOUND(body, 'sound/ambience/misc/ambifailure.ogg') to_chat(body, span_danger("You are the [name].")) to_chat(body, span_danger("[desc]")) switch(team) diff --git a/code/modules/manufactorio/_manufacturing.dm b/code/modules/manufactorio/_manufacturing.dm new file mode 100644 index 0000000000000..236c05dd86910 --- /dev/null +++ b/code/modules/manufactorio/_manufacturing.dm @@ -0,0 +1,123 @@ +#define MANUFACTURING_FAIL_FULL -1 +#define MANUFACTURING_FAIL 0 +#define MANUFACTURING_SUCCESS 1 + +#define POCKET_INPUT "Input" +#define POCKET_OUTPUT "Output" + +#define MANUFACTURING_TURF_LAG_LIMIT 10 // max items on a turf before we consider it full + +/obj/machinery/power/manufacturing + icon = 'icons/obj/machines/manufactorio.dmi' + name = "base manufacture receiving type" + desc = "this shouldnt exist" + density = TRUE + /// Do we add the simple_rotation component and a text that we are powered by cable? Also allows unwrenching + var/may_be_moved = TRUE + /// Allow taking in mobs from conveyors? + var/allow_mob_bump_intake = FALSE + +/obj/machinery/power/manufacturing/Initialize(mapload) + . = ..() + if(may_be_moved) + AddComponent(/datum/component/simple_rotation) + if(anchored) + connect_to_network() + +/obj/machinery/power/manufacturing/examine(mob/user) + . = ..() + if(may_be_moved) + . += "It receives power via cable, but certain buildings do not need power." + . += length(contents - circuit) ? "It contains:" : "Its empty." + for(var/atom/movable/thing as anything in contents - circuit) + var/text = thing.name + var/obj/item/stack/possible_stack = thing + if(istype(possible_stack)) + text = "[possible_stack.amount] [text]" + . += text + + +/obj/machinery/power/manufacturing/Bumped(atom/movable/bumped_atom) //attempt to put in whatever is pushed into us via conveyor + . = ..() + if((!allow_mob_bump_intake && ismob(bumped_atom)) || !anchored) //only uncomment if youre brave + return + var/conveyor = locate(/obj/machinery/conveyor) in bumped_atom.loc + if(isnull(conveyor)) + return + receive_resource(bumped_atom, bumped_atom.loc, get_dir(src, bumped_atom)) + +/obj/machinery/power/manufacturing/wrench_act(mob/living/user, obj/item/tool) + . = ..() + if(!may_be_moved) + return + default_unfasten_wrench(user, tool) + if(anchored) + connect_to_network() + else + disconnect_from_network() + return ITEM_INTERACT_SUCCESS + +/obj/machinery/power/manufacturing/screwdriver_act(mob/living/user, obj/item/tool) + if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING + +/obj/machinery/power/manufacturing/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/power/manufacturing/proc/generate_io_overlays(direction, color, offsets_override) + var/list/dir_offset + if(islist(offsets_override)) + dir_offset = offsets_override + else + dir_offset = dir2offset(direction) + dir_offset[1] *= 32 + dir_offset[2] *= 32 + var/image/nonemissive = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_[direction]") + nonemissive.pixel_x = dir_offset[1] + nonemissive.pixel_y = dir_offset[2] + nonemissive.color = color + var/mutable_appearance/emissive = emissive_appearance(nonemissive.icon, nonemissive.icon_state, offset_spokesman = src, alpha = nonemissive.alpha) + emissive.pixel_y = nonemissive.pixel_y + emissive.pixel_x = nonemissive.pixel_x + return list(nonemissive, emissive) + +/// Returns whatever object it may output, or null if it cant do that +/obj/machinery/power/manufacturing/proc/request_resource() + + +/obj/machinery/power/manufacturing/proc/receive_resource(atom/movable/receiving, atom/from, receive_dir) + CRASH("Unimplemented!") //check can_receive_resource here + +//use dir please +/obj/machinery/power/manufacturing/proc/send_resource(atom/movable/sending, atom/what_or_dir) + if(isobj(what_or_dir)) + var/obj/machinery/power/manufacturing/target = what_or_dir + return target.receive_resource(sending, src, get_step(src, what_or_dir)) + var/turf/next_turf = isturf(what_or_dir) ? what_or_dir : get_step(src, what_or_dir) + var/obj/machinery/power/manufacturing/manufactury = locate(/obj/machinery/power/manufacturing) in next_turf + if(!isnull(manufactury)) + if(!manufactury.anchored) + return MANUFACTURING_FAIL + return manufactury.receive_resource(sending, src, isturf(what_or_dir) ? get_dir(src, what_or_dir) : what_or_dir) + if(next_turf.is_blocked_turf(exclude_mobs = TRUE, source_atom = sending)) + return MANUFACTURING_FAIL + if(length(next_turf.contents) >= MANUFACTURING_TURF_LAG_LIMIT) + return MANUFACTURING_FAIL_FULL + if(isnull(sending)) + return MANUFACTURING_SUCCESS // for the sake of being used as a check + if(isnull(sending.loc) || !sending.Move(next_turf, get_dir(src, next_turf))) + sending.forceMove(next_turf) + return MANUFACTURING_SUCCESS + +/// Checks if this stack (if not a stack does not do anything) can merge WITHOUT creating two stacks in contents +/obj/machinery/power/manufacturing/proc/may_merge_in_contents(obj/item/stack/stack) + if(!istype(stack)) + return + for(var/obj/item/stack/other in contents - circuit) + if(!other.can_merge(stack)) + continue + if(other.amount + stack.amount <= other.max_amount) + return other diff --git a/code/modules/manufactorio/machines/crafter.dm b/code/modules/manufactorio/machines/crafter.dm new file mode 100644 index 0000000000000..ee794d2930121 --- /dev/null +++ b/code/modules/manufactorio/machines/crafter.dm @@ -0,0 +1,139 @@ +/obj/machinery/power/manufacturing/crafter + name = "manufacturing assembling machine" + desc = "Assembles (crafts) the set recipe until it runs out of resources. Inputs irrelevant to the recipe are ignored." + icon_state = "crafter" + circuit = /obj/item/circuitboard/machine/manucrafter + /// power used per process() spent crafting + var/power_cost = 5 KILO WATTS + /// our output, if the way out was blocked is held here + var/atom/movable/withheld + /// current recipe + var/datum/crafting_recipe/recipe + /// crafting component + var/datum/component/personal_crafting/machine/craftsman + /// current timer for our crafting + var/craft_timer + /// do we use cooking recipes instead + var/cooking = FALSE + +/obj/machinery/power/manufacturing/crafter/Initialize(mapload) + . = ..() + craftsman = AddComponent(/datum/component/personal_crafting/machine) + +/obj/machinery/power/manufacturing/crafter/examine(mob/user) + . = ..() + . += span_notice("It is currently manufacturing [isnull(recipe) ? "nothing. Use a multitool to set it" : recipe.name].") + if(isnull(recipe)) + return + . += span_notice("It needs:") + for(var/valid_type in recipe.reqs) + // Check if they're datums, specifically reagents. + var/datum/reagent/reagent_ingredient = valid_type + if(istype(reagent_ingredient)) + var/amount = recipe.reqs[reagent_ingredient] + . += "[amount] unit[amount > 1 ? "s" : ""] of [initial(reagent_ingredient.name)]" + + var/atom/ingredient = valid_type + var/amount = recipe.reqs[ingredient] + + . += "[amount > 1 ? ("[amount]" + " of") : "a"] [initial(ingredient.name)]" + +/obj/machinery/power/manufacturing/crafter/update_overlays() + . = ..() + . += generate_io_overlays(dir, COLOR_ORANGE) + for(var/target_dir in GLOB.cardinals - dir) + . += generate_io_overlays(target_dir, COLOR_MODERATE_BLUE) + +/obj/machinery/power/manufacturing/crafter/proc/valid_for_recipe(obj/item/checking) + . = FALSE + for(var/requirement_path in recipe.reqs) + if(!ispath(checking.type, requirement_path) || recipe.blacklist.Find(checking.type)) + continue + return TRUE + +/obj/machinery/power/manufacturing/crafter/proc/contains_type(path) + . = FALSE + for(var/content in contents - circuit) + if(!istype(content, path)) + continue + return TRUE + +/obj/machinery/power/manufacturing/crafter/receive_resource(obj/receiving, atom/from, receive_dir) + if(isnull(recipe) || !isitem(receiving) || surplus() < power_cost) + return MANUFACTURING_FAIL + if(receive_dir == dir || !valid_for_recipe(receiving)) + return MANUFACTURING_FAIL + if(!may_merge_in_contents(receiving) && contains_type(receiving.type)) + return MANUFACTURING_FAIL_FULL + receiving.Move(src, get_dir(receiving, src)) + START_PROCESSING(SSmanufacturing, src) + return MANUFACTURING_SUCCESS + +/obj/machinery/power/manufacturing/crafter/multitool_act(mob/living/user, obj/item/tool) + . = NONE + var/list/unavailable = list() + for(var/datum/crafting_recipe/potential_recipe as anything in cooking ? GLOB.cooking_recipes : GLOB.crafting_recipes) + if(craftsman.is_recipe_available(potential_recipe, user)) + continue + var/obj/result = initial(potential_recipe.result) + if(istype(result) && initial(result.anchored)) + continue + unavailable += potential_recipe + var/result = tgui_input_list(usr, "Recipe", "Select Recipe", (cooking ? GLOB.cooking_recipes : GLOB.crafting_recipes) - unavailable) + if(isnull(result) || result == recipe || !user.can_perform_action(src)) + return ITEM_INTERACT_FAILURE + var/dump_target = get_step(src, get_dir(src, user)) + for(var/atom/movable/thing as anything in contents - circuit) + thing.Move(dump_target) + recipe = result + return ITEM_INTERACT_SUCCESS + +/obj/machinery/power/manufacturing/crafter/Exited(atom/movable/gone, direction) + . = ..() + if(gone == withheld) + withheld = null + +/obj/machinery/power/manufacturing/crafter/atom_destruction(damage_flag) + . = ..() + withheld?.Move(drop_location(src)) + +/obj/machinery/power/manufacturing/crafter/Destroy() + . = ..() + recipe = null + craftsman = null + QDEL_NULL(withheld) + +/obj/machinery/power/manufacturing/crafter/process(seconds_per_tick) + if(!isnull(withheld) && !send_resource(withheld, dir)) + return + if(!isnull(craft_timer)) + if(surplus() >= power_cost) + add_load() + else + deltimer(craft_timer) + craft_timer = null + say("Power failure!") + return + if(isnull(recipe) || !craftsman.check_contents(src, recipe, craftsman.get_surroundings(src))) + return + flick_overlay_view(mutable_appearance(icon, "crafter_printing"), recipe.time) + craft_timer = addtimer(CALLBACK(src, PROC_REF(craft), recipe), recipe.time, TIMER_STOPPABLE) + +/obj/machinery/power/manufacturing/crafter/proc/craft(datum/crafting_recipe/recipe) + if(QDELETED(src)) + return + craft_timer = null + var/atom/movable/result = craftsman.construct_item(src, recipe) + if(istype(result)) + if(isitem(result)) + result.pixel_x += rand(-4, 4) + result.pixel_y += rand(-4, 4) + result.Move(src) + send_resource(result, dir) + else + say(result) + +/obj/machinery/power/manufacturing/crafter/cooker + name = "manufacturing cooking machine" // maybe this shouldnt be available dont wanna make chef useless, though otherwise it would need a sprite + desc = "Cooks the set recipe until it runs out of resources. Inputs irrelevant to the recipe are ignored." + cooking = TRUE diff --git a/code/modules/manufactorio/machines/crusher.dm b/code/modules/manufactorio/machines/crusher.dm new file mode 100644 index 0000000000000..f0f18c10ae8c5 --- /dev/null +++ b/code/modules/manufactorio/machines/crusher.dm @@ -0,0 +1,83 @@ +/obj/machinery/power/manufacturing/crusher //todo make it work for other stuff + name = "manufacturing crusher" + desc = "Crushes any item put into it, boulders and such. Materials below a sheet are stored in the machine." + icon_state = "crusher" + circuit = /obj/item/circuitboard/machine/manucrusher + /// power used to crush + var/crush_cost = 3 KILO WATTS + /// how much can we hold + var/capacity = 5 + /// withheld output because output is either blocked or full + var/atom/movable/withholding + /// list of held mats + var/list/obj/item/stack/held_mats = list() + +/obj/machinery/power/manufacturing/crusher/update_overlays() + . = ..() + . += generate_io_overlays(dir, COLOR_ORANGE) // OUT - stuff in it + . += generate_io_overlays(REVERSE_DIR(dir), COLOR_MODERATE_BLUE) // IN - to crush + +/obj/machinery/power/manufacturing/crusher/Destroy() + . = ..() + QDEL_NULL(withholding) + +/obj/machinery/power/manufacturing/crusher/atom_destruction(damage_flag) + withholding?.Move(drop_location()) + return ..() + +/obj/machinery/power/manufacturing/crusher/receive_resource(obj/receiving, atom/from, receive_dir) + if(istype(receiving, /obj/item/stack/ore) || receiving.resistance_flags & INDESTRUCTIBLE || !isitem(receiving) || surplus() < crush_cost || receive_dir != REVERSE_DIR(dir)) + return MANUFACTURING_FAIL + if(!may_merge_in_contents(receiving) && length(contents - circuit) >= capacity) + return MANUFACTURING_FAIL_FULL + receiving.Move(src, get_dir(receiving, src)) + START_PROCESSING(SSmanufacturing, src) + return MANUFACTURING_SUCCESS + +/obj/machinery/power/manufacturing/crusher/Exited(atom/movable/gone, direction) + . = ..() + if(gone == withholding) + withholding = null + +/obj/machinery/power/manufacturing/crusher/process(seconds_per_tick) //noot functional + if(!isnull(withholding) && !send_resource(withholding, dir)) + return + for(var/material in held_mats) + if(held_mats[material] >= 1) + var/new_amount = floor(held_mats[material]) + held_mats[material] -= new_amount + if(held_mats[material] <= 0) + held_mats -= material + withholding = new material(null, new_amount) + return + var/list/poor_saps = contents - circuit + if(!length(poor_saps)) + return PROCESS_KILL + if(surplus() < crush_cost) + return + var/obj/victim = poor_saps[length(poor_saps)] + if(istype(victim)) //todo handling for other things + if(!length(victim.custom_materials)) + add_load(crush_cost) + victim.atom_destruction() + for(var/obj/object in victim.contents+victim) + for(var/datum/material/possible_mat as anything in object.custom_materials) + var/quantity = object.custom_materials[possible_mat] + object.set_custom_materials(object.custom_materials.Copy() - possible_mat, 1) + var/type_to_use = istype(victim, /obj/item/boulder) ? possible_mat.ore_type : possible_mat.sheet_type + if(quantity < SHEET_MATERIAL_AMOUNT) + if(!(type_to_use in held_mats)) + held_mats[type_to_use] = quantity / SHEET_MATERIAL_AMOUNT + continue + held_mats[type_to_use] += quantity / SHEET_MATERIAL_AMOUNT + continue + var/obj/item/stack/sheet/new_item = new type_to_use(src, quantity / SHEET_MATERIAL_AMOUNT) + if(!send_resource(new_item, dir)) + withholding = new_item + return + else if(isliving(victim)) + var/mob/living/poor_sap = victim + poor_sap.adjustBruteLoss(95, TRUE) + if(!send_resource(poor_sap, dir)) + withholding = poor_sap + return diff --git a/code/modules/manufactorio/machines/debug.dm b/code/modules/manufactorio/machines/debug.dm new file mode 100644 index 0000000000000..7c21cf4e989a7 --- /dev/null +++ b/code/modules/manufactorio/machines/debug.dm @@ -0,0 +1,18 @@ +/obj/loop_spawner + name = "testing loop spawner" + icon = 'icons/obj/machines/mining_machines.dmi' + icon_state = "unloader" + anchored = TRUE + color = COLOR_PURPLE + /// directions we can output to right now + var/to_spawn = /obj/item/screwdriver + /// the subsystem to process us + var/subsystem_to_process_us = /datum/controller/subsystem/processing/obj + +/obj/loop_spawner/Initialize(mapload) + . = ..() + var/datum/controller/subsystem/processing/subsystem = locate(subsystem_to_process_us) in Master.subsystems + START_PROCESSING(subsystem, src) + +/obj/loop_spawner/process(seconds_per_tick) + new to_spawn(get_step(src, dir)) diff --git a/code/modules/manufactorio/machines/lathe.dm b/code/modules/manufactorio/machines/lathe.dm new file mode 100644 index 0000000000000..2669e851b931f --- /dev/null +++ b/code/modules/manufactorio/machines/lathe.dm @@ -0,0 +1,145 @@ +/obj/machinery/power/manufacturing/lathe // this is a heavily gutted autolathe + name = "manufacturing lathe" + desc = "Lathes the set recipe until it runs out of resources. Only accepts sheets or other kinds of material stacks." + icon_state = "lathe" + circuit = /obj/item/circuitboard/machine/manulathe + /// power cost for lathing + var/power_cost = 5 KILO WATTS + /// design id we print + var/design_id + ///The container to hold materials + var/datum/component/material_container/materials + //looping sound for printing items + var/datum/looping_sound/lathe_print/print_sound + ///Designs related to the autolathe + var/datum/techweb/autounlocking/stored_research + /// timer id of printing + var/busy = FALSE + /// our output, if the way out was blocked is held here + var/atom/movable/withheld + +/obj/machinery/power/manufacturing/lathe/Initialize(mapload) + . = ..() + print_sound = new(src, FALSE) + materials = AddComponent( \ + /datum/component/material_container, \ + SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL], \ + SHEET_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, \ + MATCONTAINER_EXAMINE|MATCONTAINER_NO_INSERT, \ + ) + if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe]) + GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] = new /datum/techweb/autounlocking/autolathe + stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] + +/obj/machinery/power/manufacturing/lathe/examine(mob/user) + . = ..() + var/datum/design/design + if(!isnull(design_id)) + design = SSresearch.techweb_design_by_id(design_id) + . += span_notice("It is set to print [!isnull(design) ? design.name : "nothing, set with a multitool"].") + if(isnull(design)) + return + . += span_notice("It needs:") + for(var/valid_type in design.materials) + var/atom/ingredient = valid_type + var/amount = design.materials[ingredient] / SHEET_MATERIAL_AMOUNT + + . += "[amount] sheets of [initial(ingredient.name)]" + +/obj/machinery/power/manufacturing/lathe/update_overlays() + . = ..() + . += generate_io_overlays(dir, COLOR_ORANGE) // OUT - stuff in it + . += generate_io_overlays(REVERSE_DIR(dir), COLOR_MODERATE_BLUE) // IN - to crush + +/obj/machinery/power/manufacturing/lathe/Destroy() + . = ..() + stored_research = null + QDEL_NULL(print_sound) + materials = null + QDEL_NULL(withheld) + +/obj/machinery/power/manufacturing/lathe/atom_destruction(damage_flag) + withheld?.Move(drop_location()) + return ..() + +/obj/machinery/power/manufacturing/lathe/receive_resource(atom/movable/receiving, atom/from, receive_dir) + if(!isstack(receiving) || receiving.resistance_flags & INDESTRUCTIBLE || receive_dir != REVERSE_DIR(dir)) + return MANUFACTURING_FAIL + materials.insert_item(receiving) + return MANUFACTURING_SUCCESS + +/obj/machinery/power/manufacturing/lathe/multitool_act(mob/living/user, obj/item/tool) + . = ..() + var/list/name_to_id = list() + for(var/id in stored_research.researched_designs) + var/datum/design/design = SSresearch.techweb_design_by_id(id) + name_to_id[design.name] = id + var/result = tgui_input_list(user, "Select Design", "Select Design", sort_list(name_to_id)) + if(isnull(result)) + return ITEM_INTERACT_FAILURE + design_id = name_to_id[result] + return ITEM_INTERACT_SUCCESS + +/obj/machinery/power/manufacturing/lathe/process() + if(!isnull(withheld) && !send_resource(withheld, dir)) + return + + var/datum/design/design = SSresearch.techweb_design_by_id(design_id) + if(isnull(design) || !(design.build_type & AUTOLATHE)) + return + if(surplus() < power_cost) + finalize_build() + return + //check for materials required. For custom material items decode their required materials + var/list/materials_needed = list() + for(var/material in design.materials) + var/amount_needed = design.materials[material] + if(istext(material)) // category + for(var/datum/material/valid_candidate as anything in SSmaterials.materials_by_category[material]) + if(materials.get_material_amount(valid_candidate) < amount_needed) + continue + material = valid_candidate + break + if(isnull(material)) + return + materials_needed[material] = amount_needed + + if(!materials.has_materials(materials_needed)) + return + + var/craft_time = (design.construction_time * design.lathe_time_factor) ** 0.8 + flick_overlay_view(mutable_appearance(icon, "crafter_printing"), craft_time) + print_sound.start() + add_load(power_cost) + busy = addtimer(CALLBACK(src, PROC_REF(do_make_item), design, materials_needed), craft_time, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_DELETE_ME) + +/obj/machinery/power/manufacturing/lathe/proc/do_make_item(datum/design/design, list/materials_needed) + finalize_build() + if(surplus() < power_cost) + return + + var/is_stack = ispath(design.build_path, /obj/item/stack) + if(!materials.has_materials(materials_needed)) + return + materials.use_materials(materials_needed) + + var/atom/movable/created + if(is_stack) + var/obj/item/stack/stack_item = initial(design.build_path) + created = new stack_item(null, 1) + else + created = new design.build_path(null) + split_materials_uniformly(materials_needed, target_object = created) + if(isitem(created)) + created.pixel_x = created.base_pixel_x + rand(-6, 6) + created.pixel_y = created.base_pixel_y + rand(-6, 6) + SSblackbox.record_feedback("nested tally", "lathe_printed_items", 1, list("[type]", "[created.type]")) + + if(!send_resource(created, dir)) + withheld = created + + +/obj/machinery/power/manufacturing/lathe/proc/finalize_build() + print_sound.stop() + deltimer(busy) + busy = null diff --git a/code/modules/manufactorio/machines/router.dm b/code/modules/manufactorio/machines/router.dm new file mode 100644 index 0000000000000..7c57a930bd3a6 --- /dev/null +++ b/code/modules/manufactorio/machines/router.dm @@ -0,0 +1,66 @@ +/obj/machinery/power/manufacturing/router // Basically a splitter + name = "manufacturing router" + desc = "Distributes input to 3 output directions equally. Stacks are split, and you may toggle outputs with a multitool. May not receive from other routers." + allow_mob_bump_intake = TRUE + icon_state = "splitter" + circuit = /obj/item/circuitboard/machine/manurouter + /// outputs disabled with a multitool + var/list/disabled_dirs = list() + /// directions we can output to right now + var/list/directions + +/obj/machinery/power/manufacturing/router/Initialize(mapload) + . = ..() + directions = GLOB.cardinals.Copy() + +/obj/machinery/power/manufacturing/router/multitool_act(mob/living/user, obj/item/tool) + . = ..() + var/to_toggle = get_dir(src, user) + if(!(to_toggle in GLOB.cardinals)) + balloon_alert(user, "stand inline!") + return ITEM_INTERACT_FAILURE + if(to_toggle in disabled_dirs) + disabled_dirs -= to_toggle + else + disabled_dirs += to_toggle + update_appearance(UPDATE_OVERLAYS) + balloon_alert(user, "toggled output") + return ITEM_INTERACT_SUCCESS + +/obj/machinery/power/manufacturing/router/update_overlays() + . = ..() + for(var/direction in GLOB.cardinals) + var/variant + if(disabled_dirs.Find(direction)) + variant = "bl" + else + variant = (direction == dir) ? "in" : "out" + var/image/new_overlay = image(icon, "splitter_[variant]", layer = layer+0.001, dir = direction) + . += new_overlay + +/obj/machinery/power/manufacturing/router/receive_resource(obj/receiving, atom/from, receive_dir) + if(istype(from, /obj/machinery/power/manufacturing/router)) + return MANUFACTURING_FAIL + var/list/filtered = directions - receive_dir - disabled_dirs + if(!length(filtered)) + directions = GLOB.cardinals.Copy() + for(var/target in filtered) + directions -= target + if(isstack(receiving)) + receiving = handle_stack(receiving, receive_dir) + if(send_resource(receiving, target)) + dir = receive_dir + update_appearance(UPDATE_OVERLAYS) // im sorry + return MANUFACTURING_SUCCESS + return MANUFACTURING_FAIL_FULL + +/obj/machinery/power/manufacturing/router/proc/handle_stack(obj/item/stack/stack, direction) + . = stack + var/potential_output_count = length(GLOB.cardinals - direction - disabled_dirs) + if(potential_output_count <= 1) + return + var/split_amount = round(stack.amount / potential_output_count, 1) + if(stack.amount == potential_output_count) + return + var/atom/movable/new_stack = stack.split_stack(amount = min(stack.amount, split_amount)) + return new_stack diff --git a/code/modules/manufactorio/machines/smelter.dm b/code/modules/manufactorio/machines/smelter.dm new file mode 100644 index 0000000000000..1a7beca66f49c --- /dev/null +++ b/code/modules/manufactorio/machines/smelter.dm @@ -0,0 +1,59 @@ +/obj/machinery/power/manufacturing/smelter + name = "manufacturing smelter" + desc = "Pretty much incinerates whatever is put into it. Refines ore (not boulders)." + icon_state = "smelter" + circuit = /obj/item/circuitboard/machine/manusmelter + /// power used to smelt + var/power_cost = 4 KILO WATTS + /// our output, if the way out was blocked is held here + var/atom/movable/withheld + +/obj/machinery/power/manufacturing/smelter/update_overlays() + . = ..() + . += generate_io_overlays(dir, COLOR_ORANGE) // OUT - stuff in it + . += generate_io_overlays(REVERSE_DIR(dir), COLOR_MODERATE_BLUE) // IN - to crush + +/obj/machinery/power/manufacturing/smelter/receive_resource(obj/receiving, atom/from, receive_dir) + if(!isitem(receiving) || surplus() < power_cost || receive_dir != REVERSE_DIR(dir)) + return MANUFACTURING_FAIL + var/list/stacks = contents - circuit + if(!may_merge_in_contents(receiving) && length(stacks) >= 5) + return MANUFACTURING_FAIL_FULL + receiving.Move(src, get_dir(receiving, src)) + START_PROCESSING(SSmanufacturing, src) + return MANUFACTURING_SUCCESS + +/obj/machinery/power/manufacturing/smelter/Destroy() + . = ..() + QDEL_NULL(withheld) + +/obj/machinery/power/manufacturing/smelter/atom_destruction(damage_flag) + withheld?.Move(drop_location()) + return ..() + +/obj/machinery/power/manufacturing/smelter/process(seconds_per_tick) + var/list/stacks = contents - circuit + if(!length(stacks)) + return + + var/list/stacks_preprocess = contents - circuit + var/obj/item/stack/ore/ore = stacks_preprocess[length(stacks_preprocess)] + if(isnull(ore)) + return + if(isnull(withheld) && surplus() >= power_cost) + icon_state="smelter_on" + add_load(power_cost) + if(istype(ore)) + var/obj/item/stack/new_stack = new ore.refined_type(null, min(5, ore.amount), FALSE) + new_stack.moveToNullspace() + ore.use(min(5, ore.amount)) + ore = new_stack + else + ore.fire_act(1400) + withheld = ore + else if(surplus() < power_cost) + icon_state = "smelter" + if(send_resource(withheld, dir)) + withheld = null // nullspace thumbs down + if(!length(contents - circuit)) + return PROCESS_KILL //we finished diff --git a/code/modules/manufactorio/machines/sorter.dm b/code/modules/manufactorio/machines/sorter.dm new file mode 100644 index 0000000000000..b749b14c6d893 --- /dev/null +++ b/code/modules/manufactorio/machines/sorter.dm @@ -0,0 +1,149 @@ +/obj/machinery/power/manufacturing/sorter + icon_state = "router" + name = "conveyor sort-router" + desc = "Pushes things on it to its sides following set criteria, set via multitool." + layer = BELOW_OPEN_DOOR_LAYER + density = FALSE + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND + circuit = /obj/item/circuitboard/machine/manusorter + /// for mappers; filter path = list(direction, value), otherwise a list of initialized filters + var/list/sort_filters = list() + /// dir to push to if there is no criteria + var/dir_if_not_met + /// timer id of the thing that makes stuff move + var/delay_timerid + /// max filters + var/max_filters = 10 + +/obj/machinery/power/manufacturing/sorter/Initialize(mapload) + . = ..() + if(isnull(dir_if_not_met)) + dir_if_not_met = dir + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + for(var/i in 1 to length(sort_filters)) + var/creating_type = sort_filters[i] + var/list/values = sort_filters[creating_type] + var/datum/sortrouter_filter/new_type = new creating_type(src) + new_type.dir_target = values[1] + new_type.value = values[2] + sort_filters[i] = new_type + START_PROCESSING(SSobj, src) + +/obj/machinery/power/manufacturing/sorter/Destroy() + . = ..() + QDEL_LIST(sort_filters) + +/obj/machinery/power/manufacturing/sorter/multitool_act(mob/living/user, obj/item/tool) + . = ..() + ui_interact(user) + +/obj/machinery/power/manufacturing/sorter/receive_resource(atom/movable/receiving, atom/from, receive_dir) + if(length(loc.contents) >= MANUFACTURING_TURF_LAG_LIMIT) + return MANUFACTURING_FAIL_FULL + receiving.Move(loc) + return MANUFACTURING_SUCCESS + + +/obj/machinery/power/manufacturing/sorter/ui_data(mob/user) + . = list() + .["unmet_dir"] = dir_if_not_met + .["filters"] = list() + for(var/datum/sortrouter_filter/sorting as anything in sort_filters) + .["filters"] += list(list( + "name" = sorting.return_name(), + "ref" = REF(sorting), + "inverted" = sorting.inverted, + "dir" = sorting.dir_target, + )) + +/obj/machinery/power/manufacturing/sorter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + switch(action) + if("del_filter") + var/datum/sortrouter_filter/filter = locate(params["ref"]) + if(isnull(filter)) + return + sort_filters -= filter + qdel(filter) + return TRUE + if("new_filter") + if(length(sort_filters) >= max_filters) + return + var/static/list/filter_by_name + if(!length(filter_by_name)) + filter_by_name = list() + for(var/datum/sortrouter_filter/to_do as anything in subtypesof(/datum/sortrouter_filter)) + filter_by_name[initial(to_do.name)] = to_do + filter_by_name = sort_list(filter_by_name) + var/target_type = tgui_input_list(usr, "Select a filter", "New Filter", filter_by_name) + if(isnull(target_type)|| !usr.can_perform_action(src, ALLOW_SILICON_REACH)) + return + target_type = filter_by_name[target_type] + sort_filters += new target_type(src) + return TRUE + if("rotate") + var/datum/sortrouter_filter/filter = locate(params["ref"]) + if(isnull(filter)) + return + var/next_ind = GLOB.cardinals.Find(filter.dir_target) + 1 + filter.dir_target = GLOB.cardinals[WRAP(next_ind, 1, 5)] + return TRUE + if("rotate_unmet") + var/next_ind = GLOB.cardinals.Find(dir_if_not_met) + 1 + dir_if_not_met = GLOB.cardinals[WRAP(next_ind, 1, 5)] + return TRUE + if("edit") + var/datum/sortrouter_filter/filter = locate(params["ref"]) + if(isnull(filter)) + return + filter.edit(usr) + return TRUE + if("shift") + var/datum/sortrouter_filter/filter = locate(params["ref"]) + if(isnull(filter)) + return + var/next_ind = WRAP(sort_filters.Find(filter) + text2num(params["amount"]), 1, length(sort_filters)+1) + sort_filters -= filter + sort_filters.Insert(next_ind, filter) + return TRUE + +/obj/machinery/power/manufacturing/sorter/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ManufacturingSorter") + ui.open() + +/obj/machinery/power/manufacturing/sorter/proc/send_nomobs(atom/movable/moving, dir) + var/mutable_appearance/operate = mutable_appearance(icon, "router_operate") + operate.dir = dir + flick_overlay_view(operate, 1 SECONDS) + return ismob(moving) ? moving.Move(get_step(src,dir), dir) : send_resource(moving, dir) + +/obj/machinery/power/manufacturing/sorter/process() + if(delay_timerid || !length(loc?.contents - 1)) + return + launch_everything() + +/obj/machinery/power/manufacturing/sorter/proc/on_entered(datum/source, atom/movable/mover) + SIGNAL_HANDLER + if(mover == src || !istype(mover) || mover.anchored || delay_timerid) + return + delay_timerid = addtimer(CALLBACK(src, PROC_REF(launch_everything)), 0.2 SECONDS) + +/obj/machinery/power/manufacturing/sorter/proc/launch_everything() + delay_timerid = null + var/turf/where_we_at = get_turf(src) + for(var/atom/movable/mover as anything in where_we_at.contents) + if(mover.anchored) + continue + for(var/datum/sortrouter_filter/sorting as anything in sort_filters) + if(sorting.meets_conditions(mover) == sorting.inverted) + continue + send_nomobs(mover, sorting.dir_target) + return + send_nomobs(mover, dir_if_not_met) diff --git a/code/modules/manufactorio/machines/sorter_filters.dm b/code/modules/manufactorio/machines/sorter_filters.dm new file mode 100644 index 0000000000000..cb7e31cc41ed4 --- /dev/null +++ b/code/modules/manufactorio/machines/sorter_filters.dm @@ -0,0 +1,120 @@ +/datum/sortrouter_filter + /// name of the filter shown in UI + var/name + /// if it meets criteria, item is pushed to this direction + var/dir_target = NORTH + /// value of our filter, checked by us + var/value = "" + /// is our output inverted? checked by sorter + var/inverted = FALSE + /// the sorter we belong to + var/obj/machinery/power/manufacturing/sorter/sorter + +/datum/sortrouter_filter/New(sorter) + . = ..() + if(isnull(sorter)) + return + src.sorter = sorter + +/datum/sortrouter_filter/Destroy() + . = ..() + if(isnull(sorter)) + return + sorter = null + +/datum/sortrouter_filter + +/datum/sortrouter_filter/proc/return_name() + return name + +/datum/sortrouter_filter/proc/edit(mob/user) + to_chat(user, "This filter is not editable.") + +/datum/sortrouter_filter/proc/meets_conditions(atom/checking) + +/datum/sortrouter_filter/is_stack + name = "input is stack" + +/datum/sortrouter_filter/is_stack/meets_conditions(atom/checking) + return isstack(checking) + +/datum/sortrouter_filter/is_ore + name = "input is ore" + +/datum/sortrouter_filter/is_ore/meets_conditions(atom/checking) + return istype(checking, /obj/item/stack/ore) + +/datum/sortrouter_filter/is_mail + name = "input is mail" + +/datum/sortrouter_filter/is_mail/meets_conditions(atom/checking) + return istype(checking, /obj/item/mail) + +/datum/sortrouter_filter/is_tagged + name = "input is tagged X" + +/datum/sortrouter_filter/is_tagged/edit(mob/user) + var/target = tgui_input_list(user, "Select a tag", "Tag", sort_list(GLOB.TAGGERLOCATIONS)) + if(isnull(target) || !user.can_perform_action(sorter, ALLOW_SILICON_REACH)) + return + value = GLOB.TAGGERLOCATIONS.Find(target) + +/datum/sortrouter_filter/is_tagged/return_name() + return "input is tagged [value ? GLOB.TAGGERLOCATIONS[value] : ""]" + +/datum/sortrouter_filter/is_tagged/meets_conditions(checking) + var/obj/item/delivery/mail_or_delivery = checking + var/sort_tag + if(istype(checking, /obj/item/delivery) || istype(checking, /obj/item/mail)) + sort_tag = mail_or_delivery.sort_tag + + return value == sort_tag + +/datum/sortrouter_filter/name_contains + name = "input's name contains" + +/datum/sortrouter_filter/name_contains/edit(mob/user) + var/target = tgui_input_text(user, "What should it contain?", "Name", value, 12) + if(isnull(target)|| !user.can_perform_action(sorter, ALLOW_SILICON_REACH)) + return + value = target + +/datum/sortrouter_filter/name_contains/return_name() + return "input's name contains [value]" + +/datum/sortrouter_filter/name_contains/meets_conditions(atom/checking) + return findtext(LOWER_TEXT(checking.name), value) + +/datum/sortrouter_filter/is_path_specific + name = "input is specific item" + /// are we currently listening for an item to set as our filter? + var/currently_listening = FALSE + +/datum/sortrouter_filter/is_path_specific/edit(mob/user) + name = initial(name) + if(!currently_listening) + name = "awaiting item" + to_chat(user, "Hit the sorter with the item of choice to set the filter.") + sorter.balloon_alert(user, "awaiting item!") + currently_listening = TRUE + RegisterSignal(sorter, COMSIG_ATOM_ATTACKBY, PROC_REF(sorter_hit)) + else + currently_listening = FALSE + UnregisterSignal(sorter, COMSIG_ATOM_ATTACKBY) + +/datum/sortrouter_filter/is_path_specific/proc/sorter_hit(datum/source, obj/item/attacking_item, user, params) + currently_listening = FALSE + value = attacking_item.type + name = attacking_item.name + sorter.balloon_alert(user, "filter set") + UnregisterSignal(sorter, COMSIG_ATOM_ATTACKBY) + return COMPONENT_NO_AFTERATTACK + +/datum/sortrouter_filter/is_path_specific/meets_conditions(atom/checking) + return checking.type == value + +/datum/sortrouter_filter/is_path_specific/subtypes + name = "input is specific kind of item" + +/datum/sortrouter_filter/is_path_specific/subtypes/meets_conditions(atom/checking) + return istype(checking.type, value) diff --git a/code/modules/manufactorio/machines/storagebox.dm b/code/modules/manufactorio/machines/storagebox.dm new file mode 100644 index 0000000000000..21957871cf803 --- /dev/null +++ b/code/modules/manufactorio/machines/storagebox.dm @@ -0,0 +1,46 @@ +/obj/machinery/power/manufacturing/storagebox + name = "manufacturing storage unit" + desc = "Its basically a box. Receives resources (if anchored). Needs a machine to take stuff out of without dumping everything out." + icon_state = "box" + /// how much can we hold + var/max_stuff = 16 + +/obj/machinery/power/manufacturing/request_resource() //returns last inserted item + var/list/real_contents = contents - circuit + if(!length(real_contents)) + return + return (real_contents)[length(real_contents)] + +/obj/machinery/power/manufacturing/storagebox/receive_resource(atom/movable/receiving, atom/from, receive_dir) + if(iscloset(receiving) && length(receiving.contents)) + return MANUFACTURING_FAIL + if(!may_merge_in_contents(receiving) && length(contents - circuit) >= max_stuff) + return MANUFACTURING_FAIL_FULL + receiving.Move(src,receive_dir) + return MANUFACTURING_SUCCESS + +/obj/machinery/power/manufacturing/storagebox/container_resist_act(mob/living/user) + . = ..() + user.Move(drop_location()) + +/obj/machinery/power/manufacturing/storagebox/screwdriver_act(mob/living/user, obj/item/tool) + . = NONE + balloon_alert(user, "disassembling...") + if(!do_after(user, 5 SECONDS, src)) + return ITEM_INTERACT_FAILURE + atom_destruction() + return ITEM_INTERACT_SUCCESS + +/obj/machinery/power/manufacturing/storagebox/atom_destruction(damage_flag) + new /obj/item/stack/sheet/iron(drop_location(), 10) + dump_inventory_contents() + return ..() + +/obj/machinery/power/manufacturing/storagebox/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(user.combat_mode) + return + balloon_alert(user, "dumping..") + if(!do_after(user, 1.25 SECONDS, src)) + return + dump_inventory_contents() diff --git a/code/modules/manufactorio/machines/unloader.dm b/code/modules/manufactorio/machines/unloader.dm new file mode 100644 index 0000000000000..982c33582684e --- /dev/null +++ b/code/modules/manufactorio/machines/unloader.dm @@ -0,0 +1,78 @@ +/obj/machinery/power/manufacturing/unloader + name = "manufacturing crate unloader" + desc = "Unloads crates (and ore boxes) passed into it, ejecting the empty crate to the side and its contents forwards. Use a multitool to flip the crate output." + icon = 'icons/obj/machines/mining_machines.dmi' + icon_state = "unloader-corner" + circuit = /obj/item/circuitboard/machine/manuunloader + /// power used per attempt to unload a crate + var/power_to_unload_crate = 2 KILO WATTS + /// whether the side we output unloaded crates is flipped + var/flip_side = FALSE + +/obj/machinery/power/manufacturing/unloader/update_overlays() + . = ..() + . += generate_io_overlays(dir, COLOR_ORANGE) // OUT - stuff in it + . += generate_io_overlays(REVERSE_DIR(dir), COLOR_MODERATE_BLUE) // IN - crate + . += generate_io_overlays(turn(dir, flip_side ? 90 : -90), COLOR_ORANGE) // OUT -- empty crate + +/obj/machinery/power/manufacturing/unloader/request_resource() //returns held crate if someone wants to do that for some reason + var/list/real_contents = contents - circuit + if(!length(real_contents)) + return + return (real_contents)[1] + +/obj/machinery/power/manufacturing/unloader/multitool_act(mob/living/user, obj/item/tool) + . = ..() + balloon_alert(user, "flipped") + flip_side = !flip_side + update_appearance() + +/obj/machinery/power/manufacturing/unloader/receive_resource(obj/receiving, atom/from, receive_dir) + if(surplus() < power_to_unload_crate || receive_dir != REVERSE_DIR(dir)) + return MANUFACTURING_FAIL + var/list/real_contents = contents - circuit + if(length(real_contents)) + return MANUFACTURING_FAIL_FULL + + var/obj/structure/closet/as_closet = receiving + var/obj/structure/ore_box/as_orebox = receiving + if(istype(as_closet)) + if(!as_closet.can_open()) + return MANUFACTURING_FAIL + else if(!istype(as_orebox)) + return MANUFACTURING_FAIL + receiving.Move(src, get_dir(receiving, src)) + START_PROCESSING(SSfastprocess, src) + return MANUFACTURING_SUCCESS + +/obj/machinery/power/manufacturing/unloader/process(seconds_per_tick) + var/list/real_contents = contents - circuit + if(!length(real_contents)) + return PROCESS_KILL + if(surplus() < power_to_unload_crate) + return + add_load(power_to_unload_crate) + var/obj/structure/closet/closet = real_contents[1] + if(istype(closet)) + return unload_crate(closet) + else + return unload_orebox(closet) + +/obj/machinery/power/manufacturing/unloader/proc/unload_crate(obj/structure/closet/closet) + if (!closet.contents_initialized) + closet.contents_initialized = TRUE + closet.PopulateContents() + SEND_SIGNAL(closet, COMSIG_CLOSET_CONTENTS_INITIALIZED) + for(var/atom/thing as anything in closet.contents) + if(ismob(thing)) + continue + send_resource(thing, dir) + if(!length(closet.contents) && send_resource(closet, turn(dir, flip_side ? 90 : -90))) + closet.open(force = TRUE) + return PROCESS_KILL + +/obj/machinery/power/manufacturing/unloader/proc/unload_orebox(obj/structure/ore_box/box) + for(var/atom/thing as anything in box.contents) + send_resource(thing, dir) + if(!length(box.contents) && send_resource(box, turn(dir, flip_side ? 90 : -90))) + return PROCESS_KILL diff --git a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm index f0368ba8c749b..f4782dc9fcae5 100644 --- a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm +++ b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm @@ -11,6 +11,7 @@ */ /turf/open/water/cursed_spring + name = "cursed spring" baseturfs = /turf/open/water/cursed_spring planetary_atmos = TRUE initial_gas_mix = ICEMOON_DEFAULT_ATMOS diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm b/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm index 7f1c8d781f4f8..a5b1492a1520b 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/biodome_winter.dm @@ -35,7 +35,7 @@ addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/movable, throw_at), thrown_by, throw_range+2, throw_speed, null, TRUE), 0.1 SECONDS) /obj/item/freeze_cube/proc/freeze_hit_atom(atom/movable/hit_atom) - playsound(src, 'sound/effects/glassbr3.ogg', 50, TRUE) + playsound(src, 'sound/effects/glass/glassbr3.ogg', 50, TRUE) COOLDOWN_START(src, freeze_cooldown, cooldown_time) if(isobj(hit_atom)) var/obj/hit_object = hit_atom diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm index ef6dc902c9f08..8501c21cbccf7 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm @@ -160,10 +160,10 @@ var/y = width - round((id - 1) / width) var/x = ((id - 1) % width) + 1 - var/x_start = 1 + (x - 1) * world.icon_size - var/x_end = x_start + world.icon_size - 1 - var/y_start = 1 + ((y - 1) * world.icon_size) - var/y_end = y_start + world.icon_size - 1 + var/x_start = 1 + (x - 1) * ICON_SIZE_X + var/x_end = x_start + ICON_SIZE_X - 1 + var/y_start = 1 + ((y - 1) * ICON_SIZE_Y) + var/y_end = y_start + ICON_SIZE_Y - 1 var/icon/T = new(base_icon) T.Crop(x_start,y_start,x_end,y_end) diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm index 26fdfcbb90bb0..c49b5c1399625 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm @@ -3,7 +3,6 @@ /obj/machinery/vending/syndichem name = "\improper SyndiChem" desc = "A vending machine full of grenades and grenade accessories. Sponsored by Donk Co." - req_access = list(ACCESS_SYNDICATE) products = list(/obj/item/stack/cable_coil = 5, /obj/item/assembly/igniter = 20, /obj/item/assembly/prox_sensor = 5, diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm b/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm index f3b321b88b223..6d3ef03c3f028 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm @@ -153,7 +153,7 @@ /// Type of projectile we fire var/projectile_type = /obj/projectile/baby_watcher_blast /// Sound to make when we shoot - var/projectile_sound = 'sound/weapons/pierce.ogg' + var/projectile_sound = 'sound/items/weapons/pierce.ogg' /// Time between taking potshots at goliaths var/fire_delay = 5 SECONDS /// How much faster do we shoot when avenging our parent? 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 21c96f0aeaa10..7ef451ddc303a 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 @@ -65,7 +65,7 @@ else 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)) + SEND_SOUND(deadmind, sound('sound/effects/magic/enter_blood.ogg',volume=100)) addtimer(CALLBACK(src, PROC_REF(remake_walker), offeredmob), 20 SECONDS) offeredmob.forceMove(src) return @@ -75,7 +75,7 @@ else meat_counter++ 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) + playsound(get_turf(src),'sound/effects/magic/demon_consume.ogg', 100, TRUE) 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 @@ -103,7 +103,7 @@ 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) + playsound(get_turf(newwalker),'sound/effects/magic/exit_blood.ogg', 100, TRUE) qdel(oldmob) /obj/structure/lavaland/ash_walker/proc/spawn_mob() diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/cursed_slot_machine.dm b/code/modules/mapfluff/ruins/objects_and_mobs/cursed_slot_machine.dm index ab6b2bb1825c9..16b63f37b2a37 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/cursed_slot_machine.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/cursed_slot_machine.dm @@ -44,7 +44,7 @@ icon_screen = "slots_screen_working" update_appearance() - playsound(src, 'sound/lavaland/cursed_slot_machine.ogg', 50, FALSE) + playsound(src, 'sound/machines/lavaland/cursed_slot_machine.ogg', 50, FALSE) addtimer(CALLBACK(src, PROC_REF(determine_victor), user), 5 SECONDS) /obj/structure/cursed_slot_machine/update_overlays() @@ -84,11 +84,11 @@ user.apply_status_effect(/datum/status_effect/grouped/cursed) SEND_SIGNAL(user, COMSIG_CURSED_SLOT_MACHINE_LOST) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) balloon_alert_to_viewers("you lost!") return - playsound(src, 'sound/lavaland/cursed_slot_machine_jackpot.ogg', 50, FALSE) + playsound(src, 'sound/machines/lavaland/cursed_slot_machine_jackpot.ogg', 50, FALSE) new prize(get_turf(src)) if(user) to_chat(user, span_boldwarning("You've hit the jackpot!!! Laughter echoes around you as your reward appears in the machine's place.")) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm index 57f20abb1aa19..c8b504b72e572 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm @@ -64,7 +64,7 @@ max_integrity = 5 //one tap /obj/structure/fluff/balloon_nuke/atom_destruction() - playsound(loc, 'sound/effects/cartoon_pop.ogg', 75, vary = TRUE) + playsound(loc, 'sound/effects/cartoon_sfx/cartoon_pop.ogg', 75, vary = TRUE) ..() /obj/structure/fluff/fake_camera @@ -159,7 +159,7 @@ mask = /obj/item/clothing/mask/fakemoustache/italian /obj/machinery/vending/hotdog/museum - onstation_override = TRUE + all_products_free = TRUE /obj/machinery/vending/hotdog/museum/screwdriver_act(mob/living/user, obj/item/attack_item) return NONE @@ -199,6 +199,6 @@ var/obj/structure/toilet/destination = pick(partners) forceMove(destination) destination.w_items += w_class - destination.contents += src + LAZYADD(destination.cistern_items, src) #undef CAFE_KEYCARD_TOILETS 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 860eb8c816882..7fda1df5951f0 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm @@ -122,7 +122,7 @@ sight_blocker.pixel_y = initial(sight_blocker.pixel_y) - (32 * sight_blocker_distance) sight_blocker.forceMove(sight_blocker_turf) sleep(0.25 SECONDS) - playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 30, TRUE, frequency = 15000) + playsound(T, 'sound/effects/magic/clockwork/invoke_general.ogg', 30, TRUE, frequency = 15000) add_overlay(door_overlay) open = FALSE else @@ -161,7 +161,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) /obj/structure/necropolis_gate/legion_gate/attack_hand(mob/user, list/modifiers) if(!open && !changing_openness) var/safety = tgui_alert(user, "You think this might be a bad idea...", "Knock on the door?", list("Proceed", "Abort")) - if(safety == "Abort" || !in_range(src, user) || !src || open || changing_openness || user.incapacitated()) + if(safety == "Abort" || !in_range(src, user) || !src || open || changing_openness || user.incapacitated) return user.visible_message(span_warning("[user] knocks on [src]..."), span_boldannounce("You tentatively knock on [src]...")) playsound(user.loc, 'sound/effects/shieldbash.ogg', 100, TRUE) @@ -183,7 +183,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) message_admins("[user ? ADMIN_LOOKUPFLW(user):"Unknown"] has released Legion!") user.log_message("released Legion.", LOG_GAME) - var/sound/legion_sound = sound('sound/creatures/legion_spawn.ogg') + var/sound/legion_sound = sound('sound/mobs/non-humanoids/legion/legion_spawn.ogg') for(var/mob/M in GLOB.player_list) if(is_valid_z_level(get_turf(M), T)) to_chat(M, span_userdanger("Discordant whispers flood your mind in a thousand voices. Each one speaks your name, over and over. Something horrible has been released.")) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm index 15566603a9322..6e67c0831d398 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm @@ -34,7 +34,7 @@ force = 18 throwforce = 10 w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' /obj/item/knife/envy/afterattack(atom/target, mob/living/carbon/human/user, click_parameters) if(!istype(user) || !ishuman(target)) diff --git a/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm b/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm index ce50fcccc1568..8be91920719c1 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm @@ -140,7 +140,7 @@ ui = new(user, src, "VaultController", name) ui.open() -/obj/machinery/computer/vaultcontroller/ui_act(action, params) +/obj/machinery/computer/vaultcontroller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm index e06c9bbb03608..21bf3da443180 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm @@ -13,41 +13,46 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) . = ..() password = "[GLOB.fscpassword]" -/obj/machinery/vending/medical/syndicate_access/cybersun +/obj/machinery/vending/medical/syndicate/cybersun name = "\improper CyberMed ++" desc = "An advanced vendor that dispenses medical drugs, both recreational and medicinal." - products = list(/obj/item/reagent_containers/syringe = 4, - /obj/item/healthanalyzer = 4, - /obj/item/reagent_containers/pill/patch/libital = 5, - /obj/item/reagent_containers/pill/patch/aiuri = 5, - /obj/item/reagent_containers/cup/bottle/multiver = 1, - /obj/item/reagent_containers/cup/bottle/syriniver = 1, - /obj/item/reagent_containers/cup/bottle/epinephrine = 3, - /obj/item/reagent_containers/cup/bottle/morphine = 3, - /obj/item/reagent_containers/cup/bottle/potass_iodide = 1, - /obj/item/reagent_containers/cup/bottle/salglu_solution = 3, - /obj/item/reagent_containers/syringe/antiviral = 5, - /obj/item/reagent_containers/medigel/libital = 2, - /obj/item/reagent_containers/medigel/aiuri = 2, - /obj/item/reagent_containers/medigel/sterilizine = 1) + products = list( + /obj/item/reagent_containers/syringe = 4, + /obj/item/healthanalyzer = 4, + /obj/item/reagent_containers/pill/patch/libital = 5, + /obj/item/reagent_containers/pill/patch/aiuri = 5, + /obj/item/reagent_containers/cup/bottle/multiver = 1, + /obj/item/reagent_containers/cup/bottle/syriniver = 1, + /obj/item/reagent_containers/cup/bottle/epinephrine = 3, + /obj/item/reagent_containers/cup/bottle/morphine = 3, + /obj/item/reagent_containers/cup/bottle/potass_iodide = 1, + /obj/item/reagent_containers/cup/bottle/salglu_solution = 3, + /obj/item/reagent_containers/syringe/antiviral = 5, + /obj/item/reagent_containers/medigel/libital = 2, + /obj/item/reagent_containers/medigel/aiuri = 2, + /obj/item/reagent_containers/medigel/sterilizine = 1, + ) contraband = list(/obj/item/reagent_containers/cup/bottle/cold = 2, - /obj/item/restraints/handcuffs = 4, - /obj/item/storage/backpack/duffelbag/syndie/surgery = 1, - /obj/item/storage/medkit/tactical = 1) - premium = list(/obj/item/storage/pill_bottle/psicodine = 2, - /obj/item/reagent_containers/hypospray/medipen = 3, - /obj/item/reagent_containers/hypospray/medipen/atropine = 2, - /obj/item/storage/medkit/regular = 3, - /obj/item/storage/medkit/brute = 1, - /obj/item/storage/medkit/fire = 1, - /obj/item/storage/medkit/toxin = 1, - /obj/item/storage/medkit/o2 = 1, - /obj/item/storage/medkit/advanced = 1, - /obj/item/defibrillator/loaded = 1, - /obj/item/wallframe/defib_mount = 1, - /obj/item/sensor_device = 2, - /obj/item/pinpointer/crew = 2, - /obj/item/shears = 1) + /obj/item/restraints/handcuffs = 4, + /obj/item/storage/backpack/duffelbag/syndie/surgery = 1, + /obj/item/storage/medkit/tactical = 1, + ) + premium = list( + /obj/item/storage/pill_bottle/psicodine = 2, + /obj/item/reagent_containers/hypospray/medipen = 3, + /obj/item/reagent_containers/hypospray/medipen/atropine = 2, + /obj/item/storage/medkit/regular = 3, + /obj/item/storage/medkit/brute = 1, + /obj/item/storage/medkit/fire = 1, + /obj/item/storage/medkit/toxin = 1, + /obj/item/storage/medkit/o2 = 1, + /obj/item/storage/medkit/advanced = 1, + /obj/item/defibrillator/loaded = 1, + /obj/item/wallframe/defib_mount = 1, + /obj/item/sensor_device = 2, + /obj/item/pinpointer/crew = 2, + /obj/item/shears = 1, + ) /////////// forgottenship lore @@ -112,15 +117,15 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) /area/ruin/space/has_grav/syndicate_forgotten_ship name = "Syndicate Forgotten Ship" icon_state = "syndie-ship" - ambientsounds = list('sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg', 'sound/ambience/ambigen8.ogg', 'sound/ambience/ambigen9.ogg') + ambientsounds = list('sound/ambience/misc/ambidanger.ogg', 'sound/ambience/misc/ambidanger2.ogg', 'sound/ambience/general/ambigen8.ogg', 'sound/ambience/general/ambigen9.ogg') /area/ruin/space/has_grav/syndicate_forgotten_cargopod name = "Syndicate Forgotten Cargo pod" icon_state = "syndie-ship" - ambientsounds = list('sound/ambience/ambigen3.ogg', 'sound/ambience/signal.ogg') + ambientsounds = list('sound/ambience/general/ambigen3.ogg', 'sound/ambience/misc/signal.ogg') /area/ruin/space/has_grav/powered/syndicate_forgotten_vault name = "Syndicate Forgotten Vault" icon_state = "syndie-ship" - ambientsounds = list('sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg') + ambientsounds = list('sound/ambience/engineering/ambitech2.ogg', 'sound/ambience/engineering/ambitech3.ogg') area_flags = NOTELEPORT | UNIQUE_AREA diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm b/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm index 03bd6c224deda..04404dc630872 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm @@ -115,16 +115,14 @@ // [Hazards & Traps] //cyborg holobarriers that die when the boss dies, how exciting +#define SELFDESTRUCT_QUEUE "hauntedtradingpost_sd" //make sure it matches the AI cores ID /obj/structure/holosign/barrier/cyborg/cybersun_ai_shield desc = "A fragile holographic energy field projected by an AI core. It keeps unwanted humanoids at safe distance." /obj/structure/holosign/barrier/cyborg/cybersun_ai_shield/Initialize(mapload) . = ..() - GLOB.selfdestructs_when_boss_dies += src - -/obj/structure/holosign/barrier/cyborg/cybersun_ai_shield/Destroy() - GLOB.selfdestructs_when_boss_dies -= src - return ..() + if(mapload) //shouldnt queue when we arent even part of a ruin, probably admin shitspawned + SSqueuelinks.add_to_queue(src, SELFDESTRUCT_QUEUE) //smes that produces power, until the boss dies then it self destructs and you gotta make your own power /obj/machinery/power/smes/magical/cybersun @@ -136,12 +134,7 @@ /obj/machinery/power/smes/magical/cybersun/Initialize(mapload) . = ..() if(donk_ai_slave) - GLOB.selfdestructs_when_boss_dies += src - -/obj/machinery/power/smes/magical/cybersun/Destroy() - if(donk_ai_slave) - GLOB.selfdestructs_when_boss_dies -= src - return ..() + SSqueuelinks.add_to_queue(src, SELFDESTRUCT_QUEUE) //this is a trigger for traps involving doors and shutters //doors get closed and bolted, shutters get cycled open/closed @@ -165,19 +158,31 @@ var/suicide_pact = FALSE //id of the suicide pact this tripwire is in var/suicide_pact_id -GLOBAL_LIST_EMPTY(tripwire_suicide_pact) /obj/machinery/button/door/invisible_tripwire/Initialize(mapload) . = ..() - if(donk_ai_slave == TRUE) - GLOB.selfdestructs_when_boss_dies += src - if(suicide_pact == TRUE && suicide_pact_id != null) - GLOB.tripwire_suicide_pact += src + if(donk_ai_slave) + SSqueuelinks.add_to_queue(src, SELFDESTRUCT_QUEUE) + if(suicide_pact && suicide_pact_id != null) + SSqueuelinks.add_to_queue(src, suicide_pact_id) + . = INITIALIZE_HINT_LATELOAD var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) +/obj/machinery/button/door/invisible_tripwire/post_machine_initialize() + . = ..() + if(!suicide_pact || isnull(SSqueuelinks.queues[suicide_pact_id])) + return // we got beat to it + SSqueuelinks.pop_link(suicide_pact_id) + +/obj/machinery/button/door/invisible_tripwire/MatchedLinks(id, list/partners) + if(id != suicide_pact_id) + return + for(var/partner in partners) + RegisterSignal(partner, COMSIG_PUZZLE_COMPLETED, TYPE_PROC_REF(/datum, selfdelete)) + /obj/machinery/button/door/invisible_tripwire/proc/on_entered(atom/source, atom/movable/victim) SIGNAL_HANDLER if(!isliving(victim)) @@ -194,19 +199,9 @@ GLOBAL_LIST_EMPTY(tripwire_suicide_pact) INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, interact), victim) if(multiuse && uses_remaining != 1) return - if(suicide_pact&& suicide_pact_id) - for (var/obj/machinery/button/door/invisible_tripwire/pact_member in GLOB.tripwire_suicide_pact) - if(src.suicide_pact_id == pact_member.suicide_pact_id) - qdel(pact_member) - qdel(src) - - -/obj/machinery/button/door/invisible_tripwire/Destroy() - if(donk_ai_slave) - GLOB.selfdestructs_when_boss_dies -= src if(suicide_pact && suicide_pact_id) - GLOB.tripwire_suicide_pact -= src - return ..() + SEND_SIGNAL(src, COMSIG_PUZZLE_COMPLETED) + qdel(src) //door button that destroys itself when it is pressed /obj/machinery/button/door/selfdestructs @@ -271,13 +266,8 @@ GLOBAL_LIST_EMPTY(tripwire_suicide_pact) proximity_monitor?.set_range(trigger_range) my_turf = get_turf(src) host_machine = locate(/obj/machinery) in loc - if(donk_ai_slave == TRUE) - GLOB.selfdestructs_when_boss_dies += src - -/obj/effect/overloader_trap/Destroy() - if(donk_ai_slave == TRUE) - GLOB.selfdestructs_when_boss_dies -= src - return ..() + if(donk_ai_slave) + SSqueuelinks.add_to_queue(src, SELFDESTRUCT_QUEUE) /obj/effect/overloader_trap/proc/check_faction(mob/target) for(var/faction1 in faction) @@ -337,8 +327,8 @@ GLOBAL_LIST_EMPTY(tripwire_suicide_pact) base_icon_state = "donk" stun_projectile = /obj/projectile/bullet/foam_dart/riot lethal_projectile = /obj/projectile/bullet/c9mm/blunttip - lethal_projectile_sound = 'sound/weapons/gun/pistol/shot.ogg' - stun_projectile_sound = 'sound/weapons/gun/pistol/shot.ogg' + lethal_projectile_sound = 'sound/items/weapons/gun/pistol/shot.ogg' + stun_projectile_sound = 'sound/items/weapons/gun/pistol/shot.ogg' desc = "A ballistic machine gun auto-turret with Donk Co. branding. It uses 9mm rounds." armor_type = /datum/armor/donk_turret scan_range = 6 @@ -363,9 +353,9 @@ GLOBAL_LIST_EMPTY(tripwire_suicide_pact) icon_state = "red_lethal" base_icon_state = "red" stun_projectile = /obj/projectile/energy/electrode - stun_projectile_sound = 'sound/weapons/taser.ogg' + stun_projectile_sound = 'sound/items/weapons/taser.ogg' lethal_projectile = /obj/projectile/beam/laser/cybersun - lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' + lethal_projectile_sound = 'sound/items/weapons/lasercannonfire.ogg' desc = "An energy gun auto-turret with Cybersun branding. It fires high-energy plasma beams that do a lot of damage, but it can be fairly slow." armor_type = /datum/armor/syndicate_shuttle scan_range = 6 @@ -381,3 +371,4 @@ GLOBAL_LIST_EMPTY(tripwire_suicide_pact) damage = 30 wound_bonus = -50 +#undef SELFDESTRUCT_QUEUE diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index 950bf8feae32e..1181dcb93a14f 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -91,7 +91,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) to_chat(target, span_warning("You too far away from \the [src] to enter it!")) // If the target is incapacitated after selecting a room, they're not allowed to teleport. - if(target.incapacitated()) + if(target.incapacitated) 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? @@ -186,11 +186,6 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) if(ruinSpawned && roomNumber == GLOB.hhMysteryRoomNumber) load_from = hotelRoomTempLore //SKYRAT EDIT ADDITION START - GHOST HOTEL UPDATE - //else if(chosen_room == "Apartment") - // load_from = ghost_cafe_rooms_apartment - //SKYRAT EDIT ADDITION END - - //BUBBER EDIT ADDITION START - GHOST HOTEL UPDATE else if(chosen_room == "Apartment") load_from = ghost_cafe_rooms_apartment @@ -201,7 +196,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) load_from = ghost_cafe_rooms_stationside else if(chosen_room == "Library") load_from = ghost_cafe_rooms_library - //BUBBER EDIT ADDITION END + //SKYRAT EDIT ADDITION END load_from.load(bottom_left) activeRooms["[roomNumber]"] = roomReservation diff --git a/code/modules/mapfluff/ruins/spaceruin_code/meatderelict.dm b/code/modules/mapfluff/ruins/spaceruin_code/meatderelict.dm index 0db718e399bf6..2b2216641488d 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/meatderelict.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/meatderelict.dm @@ -131,7 +131,7 @@ /obj/lightning_thrower/process(seconds_per_tick) var/list/dirs = throw_diagonals ? GLOB.diagonals : GLOB.cardinals throw_diagonals = !throw_diagonals - playsound(src, 'sound/magic/lightningbolt.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE) + playsound(src, 'sound/effects/magic/lightningbolt.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE) for(var/direction in dirs) var/victim_turf = get_step(src, direction) if(isclosedturf(victim_turf)) diff --git a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm index 59998bb53c8f2..a91d033f1ee7b 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm @@ -56,7 +56,7 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(loc, 'sound/effects/attackblob.ogg', vol = 50, vary = TRUE, pressure_affected = FALSE) + playsound(loc, 'sound/effects/blob/attackblob.ogg', vol = 50, vary = TRUE, pressure_affected = FALSE) else playsound(loc, 'sound/effects/meatslap.ogg', vol = 50, vary = TRUE, pressure_affected = FALSE) if(BURN) diff --git a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_mod.dm b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_mod.dm index 77b8aa0bbce28..994162345dae2 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_mod.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_mod.dm @@ -35,7 +35,7 @@ update_appearance() /obj/machinery/mod_installer/proc/play_install_sound() - playsound(src, 'sound/items/rped.ogg', 30, FALSE) + playsound(src, 'sound/items/tools/rped.ogg', 30, FALSE) /obj/machinery/mod_installer/update_icon_state() icon_state = busy ? busy_icon_state : "[base_icon_state][state_open ? "_open" : null]" diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 47dca7b438e3c..950f3e2809ef2 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -167,7 +167,6 @@ // Cache for sonic speed var/list/to_rebuild = SSair.adjacent_rebuild - // iterate over turfs in the border and clear them from active atmos processing for(var/turf/border_turf as anything in CORNER_BLOCK_OFFSET(T, width + 2, height + 2, -1, -1)) SSair.remove_from_active(border_turf) diff --git a/code/modules/meteors/meteor_dark_matteor.dm b/code/modules/meteors/meteor_dark_matteor.dm index 18dbaf007024f..acf21a3c434b8 100644 --- a/code/modules/meteors/meteor_dark_matteor.dm +++ b/code/modules/meteors/meteor_dark_matteor.dm @@ -6,7 +6,7 @@ hits = 15 hitpwr = EXPLODE_DEVASTATE heavy = TRUE - meteorsound = 'sound/effects/curse1.ogg' + meteorsound = 'sound/effects/curse/curse1.ogg' meteordrop = list(/obj/singularity/dark_matter) //what the FUCK dropamt = 1 threat = 100 diff --git a/code/modules/meteors/meteor_spawning.dm b/code/modules/meteors/meteor_spawning.dm index d19d3aff0a5a6..83b1c9533c577 100644 --- a/code/modules/meteors/meteor_spawning.dm +++ b/code/modules/meteors/meteor_spawning.dm @@ -104,7 +104,7 @@ player_mind.transfer_to(new_changeling) player_mind.special_role = ROLE_CHANGELING_MIDROUND player_mind.add_antag_datum(/datum/antagonist/changeling/space) - SEND_SOUND(new_changeling, 'sound/magic/mutate.ogg') + SEND_SOUND(new_changeling, 'sound/effects/magic/mutate.ogg') message_admins("[ADMIN_LOOKUPFLW(new_changeling)] has been made into a space changeling by an event.") new_changeling.log_message("was spawned as a midround space changeling by an event.", LOG_GAME) diff --git a/code/modules/meteors/meteor_types.dm b/code/modules/meteors/meteor_types.dm index 199f6517abb1e..74e5ecb78c106 100644 --- a/code/modules/meteors/meteor_types.dm +++ b/code/modules/meteors/meteor_types.dm @@ -203,7 +203,7 @@ pass_flags = PASSTABLE | PASSGRILLE hits = 1 hitpwr = EXPLODE_LIGHT - meteorsound = 'sound/weapons/gun/smg/shot.ogg' + meteorsound = 'sound/items/weapons/gun/smg/shot.ogg' meteordrop = list(/obj/item/stack/ore/glass) threat = 1 @@ -301,7 +301,7 @@ icon_state = "carp" desc = "Am I glad he's frozen in there, and that we're out here." hits = 4 - meteorsound = 'sound/effects/ethereal_revive_fail.ogg' + meteorsound = 'sound/mobs/humanoids/ethereal/ethereal_revive_fail.ogg' meteordrop = list(/mob/living/basic/carp) dropamt = 1 threat = 5 @@ -342,7 +342,7 @@ /obj/effect/meteor/banana/meteor_effect() ..() - playsound(src, 'sound/items/AirHorn.ogg', 100, TRUE, -1) + playsound(src, 'sound/items/airhorn/AirHorn.ogg', 100, TRUE, -1) for(var/atom/movable/object in view(4, get_turf(src))) var/turf/throwtarget = get_edge_target_turf(get_turf(src), get_dir(get_turf(src), get_step_away(object, get_turf(src)))) object.safe_throw_at(throwtarget, 5, 1, force = MOVE_FORCE_STRONG) @@ -368,7 +368,7 @@ /obj/effect/meteor/emp/meteor_effect() ..() - playsound(src, 'sound/weapons/zapbang.ogg', 100, TRUE, -1) + playsound(src, 'sound/items/weapons/zapbang.ogg', 100, TRUE, -1) empulse(src, 3, 8) //Meaty Ore @@ -378,7 +378,7 @@ desc = "Just... don't think too hard about where this thing came from." hits = 2 heavy = TRUE - meteorsound = 'sound/effects/blobattack.ogg' + meteorsound = 'sound/effects/blob/blobattack.ogg' meteordrop = list(/obj/item/food/meat/slab/human, /obj/item/food/meat/slab/human/mutant, /obj/item/organ/internal/heart, /obj/item/organ/internal/lungs, /obj/item/organ/internal/tongue, /obj/item/organ/internal/appendix/) var/meteorgibs = /obj/effect/gibspawner/generic threat = 2 @@ -464,6 +464,6 @@ /obj/effect/meteor/pumpkin/Initialize(mapload) . = ..() - meteorsound = pick('sound/hallucinations/im_here1.ogg','sound/hallucinations/im_here2.ogg') + meteorsound = pick('sound/effects/hallucinations/im_here1.ogg','sound/effects/hallucinations/im_here2.ogg') #undef DEFAULT_METEOR_LIFETIME diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 40cb967d3a0ab..10b2fbe71d062 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -246,7 +246,7 @@ new /obj/item/clothing/mask/balaclava(src) new /obj/item/gun/ballistic/shotgun/toy(src) new /obj/item/gun/ballistic/automatic/pistol/toy(src) - new /obj/item/gun/ballistic/automatic/toy/unrestricted(src) + new /obj/item/gun/ballistic/automatic/toy(src) new /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted(src) new /obj/item/ammo_box/foambox(src) if(98) diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index a1503b7f63420..82cdaffa71468 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -133,7 +133,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/auxiliary_base, 32) return FALSE return TRUE -/obj/machinery/computer/auxiliary_base/ui_act(action, params) +/obj/machinery/computer/auxiliary_base/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mining/boulder_processing/_boulder_processing.dm b/code/modules/mining/boulder_processing/_boulder_processing.dm index ab72e4ebae57b..28d8f9b6ea462 100644 --- a/code/modules/mining/boulder_processing/_boulder_processing.dm +++ b/code/modules/mining/boulder_processing/_boulder_processing.dm @@ -81,14 +81,14 @@ for(var/obj/item/boulder/potential_boulder in contents) boulder_count += 1 . += span_notice("Storage capacity = [boulder_count]/[boulders_held_max] boulders.") - . += span_notice("Can process upto [boulders_processing_count] boulders at a time.") + . += span_notice("Can process up to [boulders_processing_count] boulders at a time.") if(anchored) - . += span_notice("Its [EXAMINE_HINT("anchored")] in place.") + . += span_notice("It's [EXAMINE_HINT("anchored")] in place.") else . += span_warning("It needs to be [EXAMINE_HINT("anchored")] to start operations.") - . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") + . += span_notice("Its maintenance panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") if(panel_open) . += span_notice("The whole machine can be [EXAMINE_HINT("pried")] apart.") @@ -127,7 +127,7 @@ if(!istype(new_boulder) || QDELETED(new_boulder)) return FALSE - //someone just processed this + //someone is still processing this if(new_boulder.processed_by) return FALSE @@ -149,7 +149,6 @@ */ /obj/machinery/bouldertech/proc/accept_boulder(obj/item/boulder/new_boulder) PRIVATE_PROC(TRUE) - if(!can_process_boulder(new_boulder)) return FALSE @@ -262,7 +261,7 @@ if(!COOLDOWN_FINISHED(src, sound_cooldown)) return ITEM_INTERACT_BLOCKING COOLDOWN_START(src, sound_cooldown, 1.5 SECONDS) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, FALSE) return ITEM_INTERACT_BLOCKING var/obj/item/card/id/id_card = tool @@ -304,7 +303,7 @@ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) return if(!anchored) - balloon_alert(user, "anchor first!") + balloon_alert(user, "anchor it first!") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN if(panel_open) balloon_alert(user, "close panel!") @@ -408,6 +407,9 @@ return TRUE if(locate(/obj/item/boulder) in loc) //There is an boulder in our loc. it has be removed so we don't clog up our loc with even more boulders return FALSE + if(!length(specific_boulder.custom_materials)) + specific_boulder.break_apart() + return TRUE //Reset durability to little random lower value cause we have crushed it so many times var/size = specific_boulder.boulder_size diff --git a/code/modules/mining/boulder_processing/boulder.dm b/code/modules/mining/boulder_processing/boulder.dm index 342afe8abe5c3..41f4e5b7695a9 100644 --- a/code/modules/mining/boulder_processing/boulder.dm +++ b/code/modules/mining/boulder_processing/boulder.dm @@ -62,9 +62,9 @@ icon_state = "[boulder_string]_small" /obj/item/boulder/CanAllowThrough(atom/movable/mover, border_dir) - . = ..() if(istype(mover, /obj/item/boulder)) //This way, boulders can only go one at a time on conveyor belts, but everyone else can go through. return FALSE + return ..() /obj/item/boulder/attack_self(mob/user, list/modifiers) . = ..() @@ -128,7 +128,7 @@ process_speed = override_speed_multiplier else process_speed = INATE_BOULDER_SPEED_MULTIPLIER - playsound(src, 'sound/effects/rocktap1.ogg', 50) + playsound(src, 'sound/effects/rock/rocktap1.ogg', 50) if(!continued) to_chat(user, span_notice("You scrape away at \the [src]...")) else @@ -143,7 +143,7 @@ if(durability <= 0) convert_to_ore() to_chat(user, span_notice("You finish working on \the [src], and it crumbles into ore.")) - playsound(src, 'sound/effects/rock_break.ogg', 50) + playsound(src, 'sound/effects/rock/rock_break.ogg', 50) user.mind?.adjust_experience(/datum/skill/mining, MINING_SKILL_BOULDER_SIZE_XP * 0.2) qdel(src) return @@ -172,7 +172,7 @@ if(length(contents)) var/list/quips = list("Clang!", "Crack!", "Bang!", "Clunk!", "Clank!") visible_message(span_notice("[pick(quips)] Something falls out of \the [src]!")) - playsound(loc, 'sound/effects/picaxe1.ogg', 60, FALSE) + playsound(loc, 'sound/effects/pickaxe/picaxe1.ogg', 60, FALSE) for(var/obj/item/content as anything in contents) content.forceMove(get_turf(src)) qdel(src) diff --git a/code/modules/mining/boulder_processing/boulder_types.dm b/code/modules/mining/boulder_processing/boulder_types.dm index 8f6889b7c8470..366c5b21c4259 100644 --- a/code/modules/mining/boulder_processing/boulder_types.dm +++ b/code/modules/mining/boulder_processing/boulder_types.dm @@ -25,6 +25,10 @@ artifact_inside = null return ..() +/obj/item/boulder/artifact/update_icon_state() + . = ..() + icon_state = "boulder_artifact" // Hardset to artifact sprites for consistency + ///Boulders usually spawned in lavaland labour camp area /obj/item/boulder/gulag name = "low-quality boulder" diff --git a/code/modules/mining/boulder_processing/brm.dm b/code/modules/mining/boulder_processing/brm.dm index 9b9186968918b..bb7b7f650338a 100644 --- a/code/modules/mining/boulder_processing/brm.dm +++ b/code/modules/mining/boulder_processing/brm.dm @@ -58,15 +58,15 @@ /obj/machinery/brm/examine(mob/user) . = ..() . += span_notice("The small screen reads there are [span_boldnotice("[SSore_generation.available_boulders.len] boulders")] available to teleport.") - . += span_notice("Can collect upto [boulders_processing_max] boulders at a time.") - . += span_notice("Automatic boulder retrival can be toggled [EXAMINE_HINT("[toggled_on ? "Off" : "On"]")] with [EXAMINE_HINT("Right Click")].") + . += span_notice("Can collect up to [boulders_processing_max] boulders at a time.") + . += span_notice("Automatic boulder retrieval can be toggled [EXAMINE_HINT("[toggled_on ? "Off" : "On"]")] with [EXAMINE_HINT("Right Click")].") if(anchored) - . += span_notice("Its [EXAMINE_HINT("anchored")] in place.") + . += span_notice("It's [EXAMINE_HINT("anchored")] in place.") else . += span_warning("It needs to be [EXAMINE_HINT("anchored")] to start operations.") - . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "Closed" : "Open"].") + . += span_notice("Its maintenance panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") if(panel_open) . += span_notice("The whole machine can be [EXAMINE_HINT("pried")] apart.") @@ -127,7 +127,9 @@ var/result = pre_collect_boulder() if(result == TURF_BLOCKED_BY_BOULDER) - balloon_alert(user, "no space") + balloon_alert(user, "no space!") + else if(result) + balloon_alert(user, "teleporting...") COOLDOWN_START(src, manual_teleport_cooldown, TELEPORTATION_TIME) return TRUE @@ -162,9 +164,9 @@ var/result = pre_collect_boulder() if(result == TURF_BLOCKED_BY_BOULDER) - balloon_alert(user, "no space") + balloon_alert(user, "no space!") else if(result) - balloon_alert(user, "teleporting") + balloon_alert(user, "teleporting...") COOLDOWN_START(src, manual_teleport_cooldown, TELEPORTATION_TIME) @@ -179,9 +181,9 @@ var/result = pre_collect_boulder() if(result == TURF_BLOCKED_BY_BOULDER) - balloon_alert(user, "no space") + balloon_alert(user, "no space!") else if(result) - balloon_alert(user, "teleporting") + balloon_alert(user, "teleporting...") COOLDOWN_START(src, manual_teleport_cooldown, TELEPORTATION_TIME) @@ -192,7 +194,7 @@ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) return if(!anchored) - balloon_alert(user, "anchor first!") + balloon_alert(user, "anchor it first!") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN toggle_auto_on(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -211,7 +213,7 @@ balloon_alert(user, "close panel first!") return if(!anchored) - balloon_alert(user, "anchor first!") + balloon_alert(user, "anchor it first!") return if(!is_operational || machine_stat & (BROKEN | NOPOWER)) return @@ -228,7 +230,7 @@ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) return if(!anchored) - balloon_alert(user, "anchor first!") + balloon_alert(user, "unanchored!") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN toggle_auto_on(user) @@ -239,7 +241,7 @@ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) return if(!anchored) - balloon_alert(user, "anchor first!") + balloon_alert(user, "unanchored!") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN toggle_auto_on(user) @@ -282,7 +284,7 @@ //no more boulders if(!SSore_generation.available_boulders.len) if(feedback) - playsound(loc, 'sound/machines/synth_no.ogg', 30 , TRUE) + playsound(loc, 'sound/machines/synth/synth_no.ogg', 30 , TRUE) balloon_alert_to_viewers("no boulders to collect!") batch_processing = FALSE return FALSE diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index ecaa17321c486..af31d32719f14 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -332,7 +332,7 @@ COOLDOWN_START(src, effect_cooldown, effect_cooldown_time) //This needs to happen first, otherwise there's an infinite loop user.heal_ordered_damage(heal_amount, damage_heal_order) user.visible_message(span_notice("[user] suddenly revives, as their armor swirls with demonic energy!"), span_notice("You suddenly feel invigorated!")) - playsound(user.loc, 'sound/magic/clockwork/ratvar_attack.ogg', 50) + playsound(user.loc, 'sound/effects/magic/clockwork/ratvar_attack.ogg', 50) /obj/item/clothing/suit/hooded/explorer/syndicate name = "syndicate explorer suit" diff --git a/code/modules/mining/equipment/grapple_gun.dm b/code/modules/mining/equipment/grapple_gun.dm index 76da071ec6e2d..0247d0164b025 100644 --- a/code/modules/mining/equipment/grapple_gun.dm +++ b/code/modules/mining/equipment/grapple_gun.dm @@ -64,7 +64,7 @@ if(user.CanReach(attacked_atom)) return ITEM_INTERACT_BLOCKING - var/atom/bullet = fire_projectile(/obj/projectile/grapple_hook, attacked_atom, 'sound/weapons/zipline_fire.ogg') + var/atom/bullet = fire_projectile(/obj/projectile/grapple_hook, attacked_atom, 'sound/items/weapons/zipline_fire.ogg') zipline = user.Beam(bullet, icon_state = "zipline_hook", maxdistance = 9, layer = BELOW_MOB_LAYER) hooked = FALSE RegisterSignal(bullet, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(on_grapple_hit)) @@ -181,6 +181,6 @@ range = 9 speed = 0.1 can_hit_turfs = TRUE - hitsound = 'sound/weapons/zipline_hit.ogg' + hitsound = 'sound/items/weapons/zipline_hit.ogg' #undef DAMAGE_ON_IMPACT diff --git a/code/modules/mining/equipment/kheiral_cuffs.dm b/code/modules/mining/equipment/kheiral_cuffs.dm index eaaf11616cc71..27b3a1c42a70d 100644 --- a/code/modules/mining/equipment/kheiral_cuffs.dm +++ b/code/modules/mining/equipment/kheiral_cuffs.dm @@ -42,13 +42,13 @@ if(!(slot & ITEM_SLOT_GLOVES)) return on_wrist = TRUE - playsound(loc, 'sound/weapons/handcuffs.ogg', 30, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(loc, 'sound/items/weapons/handcuffs.ogg', 30, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) connect_kheiral_network(user) /obj/item/kheiral_cuffs/dropped(mob/user, silent) . = ..() if(on_wrist) - playsound(loc, 'sound/weapons/handcuffs.ogg', 30, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(loc, 'sound/items/weapons/handcuffs.ogg', 30, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) on_wrist = FALSE remove_kheiral_network(user) diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 62f4924aa657c..2db28cb881d5d 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -24,7 +24,7 @@ throw_speed = 4 armour_penetration = 10 custom_materials = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT*1.15, /datum/material/glass=HALF_SHEET_MATERIAL_AMOUNT*2.075) - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("smashes", "crushes", "cleaves", "chops", "pulps") attack_verb_simple = list("smash", "crush", "cleave", "chop", "pulp") sharpness = SHARP_EDGED @@ -50,7 +50,6 @@ ) //technically it's huge and bulky, but this provides an incentive to use it AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=20) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /obj/item/kinetic_crusher/Destroy() QDEL_LIST(trophies) @@ -128,7 +127,7 @@ if((user.dir & backstab_dir) && (target.dir & backstab_dir) || boosted_mark) backstabbed = TRUE combined_damage += backstab_bonus - playsound(user, 'sound/weapons/kinetic_accel.ogg', 100, TRUE) //Seriously who spelled it wrong + playsound(user, 'sound/items/weapons/kinetic_accel.ogg', 100, TRUE) //Seriously who spelled it wrong if(!QDELETED(crusher_damage_effect)) crusher_damage_effect.total_damage += combined_damage SEND_SIGNAL(user, COMSIG_LIVING_CRUSHER_DETONATE, target, src, backstabbed) @@ -159,7 +158,7 @@ attached_trophy.on_projectile_fire(destabilizer, user) destabilizer.preparePixelProjectile(target, user, modifiers) destabilizer.firer = user - playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, TRUE) + playsound(user, 'sound/items/weapons/plasma_cutter.ogg', 100, TRUE) destabilizer.fire() charged = FALSE update_appearance() @@ -169,17 +168,18 @@ if(!charged) charged = TRUE update_appearance() - playsound(src.loc, 'sound/weapons/kinetic_reload.ogg', 60, TRUE) + playsound(src.loc, 'sound/items/weapons/kinetic_reload.ogg', 60, TRUE) /obj/item/kinetic_crusher/ui_action_click(mob/user, actiontype) set_light_on(!light_on) - playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(user, 'sound/items/weapons/empty.ogg', 100, TRUE) update_appearance() -/obj/item/kinetic_crusher/proc/on_saboteur(datum/source, disrupt_duration) +/obj/item/kinetic_crusher/on_saboteur(datum/source, disrupt_duration) + . = ..() set_light_on(FALSE) - playsound(src, 'sound/weapons/empty.ogg', 100, TRUE) - return COMSIG_SABOTEUR_SUCCESS + playsound(src, 'sound/items/weapons/empty.ogg', 100, TRUE) + return TRUE /obj/item/kinetic_crusher/update_icon_state() inhand_icon_state = "crusher[HAS_TRAIT(src, TRAIT_WIELDED)]" // this is not icon_state and not supported by 2hcomponent @@ -373,7 +373,7 @@ for(var/mob/living/living_target in oview(2, user)) if(user.faction_check_atom(living_target) || living_target.stat == DEAD) continue - playsound(living_target, 'sound/magic/fireball.ogg', 20, TRUE) + playsound(living_target, 'sound/effects/magic/fireball.ogg', 20, TRUE) new /obj/effect/temp_visual/fire(living_target.loc) addtimer(CALLBACK(src, PROC_REF(pushback), living_target, user), 1) //no free backstabs, we push AFTER module stuff is done living_target.adjustFireLoss(bonus_value, forced = TRUE) diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index c33181dd8068d..5433c85977b41 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -39,8 +39,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list( /obj/item/stack/marker_beacon/examine(mob/user) . = ..() - . += "Use in-hand to place a [singular_name].\n"+\ - "Alt-click to select a color. Current color is [picked_color]." + . += span_notice("Use in-hand to place a [singular_name].\nAlt-click to select a color. Current color is [picked_color].") /obj/item/stack/marker_beacon/update_icon_state() icon_state = "[initial(icon_state)][LOWER_TEXT(picked_color)]" @@ -148,7 +147,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list( var/obj/effect/decal/cleanable/ash/A = new /obj/effect/decal/cleanable/ash(drop_location()) A.desc += "\nLooks like this used to be \a [src] some time ago." visible_message(span_danger("[src] is disintegrated by [I]!")) - playsound(src, 'sound/items/welder.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 50, TRUE) qdel(src) return return ..() diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index abf5ca77e181d..85cb66ae8676c 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -15,7 +15,7 @@ custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT) tool_behaviour = TOOL_MINING toolspeed = 1 - usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg') + usesound = list('sound/effects/pickaxe/picaxe1.ogg', 'sound/effects/pickaxe/picaxe2.ogg', 'sound/effects/pickaxe/picaxe3.ogg') attack_verb_continuous = list("hits", "pierces", "slices", "attacks") attack_verb_simple = list("hit", "pierce", "slice", "attack") @@ -67,8 +67,8 @@ inhand_icon_state = "handdrill" slot_flags = ITEM_SLOT_BELT toolspeed = 0.6 //available from roundstart, faster than a pickaxe. - usesound = 'sound/weapons/drill.ogg' - hitsound = 'sound/weapons/drill.ogg' + usesound = 'sound/items/weapons/drill.ogg' + hitsound = 'sound/items/weapons/drill.ogg' desc = "An electric mining drill for the especially scrawny." /obj/item/pickaxe/drill/cyborg @@ -98,8 +98,8 @@ icon_state = "jackhammer" inhand_icon_state = "jackhammer" toolspeed = 0.1 //the epitome of powertools. extremely fast mining - usesound = 'sound/weapons/sonic_jackhammer.ogg' - hitsound = 'sound/weapons/sonic_jackhammer.ogg' + usesound = 'sound/items/weapons/sonic_jackhammer.ogg' + hitsound = 'sound/items/weapons/sonic_jackhammer.ogg' desc = "Cracks rocks with sonic blasts." /obj/item/pickaxe/improvised @@ -213,7 +213,7 @@ w_class = WEIGHT_CLASS_SMALL tool_behaviour = TOOL_WRENCH toolspeed = 0.75 - usesound = 'sound/items/ratchet.ogg' + usesound = 'sound/items/tools/ratchet.ogg' attack_verb_continuous = list("bashes", "bludgeons", "thrashes", "whacks") attack_verb_simple = list("bash", "bludgeon", "thrash", "whack") wound_bonus = 10 @@ -260,7 +260,7 @@ sharpness = NONE toolspeed = 0.75 update_weight_class(WEIGHT_CLASS_SMALL) - usesound = 'sound/items/ratchet.ogg' + usesound = 'sound/items/tools/ratchet.ogg' attack_verb_continuous = list("bashes", "bludgeons", "thrashes", "whacks") attack_verb_simple = list("bash", "bludgeon", "thrash", "whack") if("Shovel") @@ -276,16 +276,16 @@ sharpness = SHARP_POINTY toolspeed = 0.5 update_weight_class(WEIGHT_CLASS_NORMAL) - usesound = 'sound/effects/picaxe1.ogg' + usesound = 'sound/effects/pickaxe/picaxe1.ogg' attack_verb_continuous = list("hits", "pierces", "slices", "attacks") attack_verb_simple = list("hit", "pierce", "slice", "attack") - playsound(src, 'sound/items/ratchet.ogg', 50, vary = TRUE) + playsound(src, 'sound/items/tools/ratchet.ogg', 50, vary = TRUE) update_appearance(UPDATE_ICON) /obj/item/trench_tool/proc/check_menu(mob/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE @@ -312,10 +312,10 @@ wound_bonus = -10 attack_verb_continuous = list("bonks", "bludgeons", "pounds") attack_verb_simple = list("bonk", "bludgeon", "pound") - drop_sound = 'sound/weapons/sonic_jackhammer.ogg' - pickup_sound = 'sound/items/handling/crowbar_pickup.ogg' - hitsound = 'sound/weapons/sonic_jackhammer.ogg' - block_sound = 'sound/weapons/sonic_jackhammer.ogg' + drop_sound = 'sound/items/weapons/sonic_jackhammer.ogg' + pickup_sound = 'sound/items/handling/tools/crowbar_pickup.ogg' + hitsound = 'sound/items/weapons/sonic_jackhammer.ogg' + block_sound = 'sound/items/weapons/sonic_jackhammer.ogg' item_flags = SLOWS_WHILE_IN_HAND | IMMUTABLE_SLOW slowdown = 3 attack_speed = 1.2 SECONDS @@ -355,7 +355,7 @@ /obj/item/shovel/giant_wrench/proc/on_transform(obj/item/source, mob/user, active) SIGNAL_HANDLER - usesound = (active ? 'sound/items/ratchet.ogg' : initial(usesound)) + usesound = (active ? 'sound/items/tools/ratchet.ogg' : initial(usesound)) block_chance = (active ? 0 : initial(block_chance)) recoil_factor = (active ? 2 : initial(recoil_factor)) do_launch = (active ? FALSE : initial(do_launch)) @@ -363,7 +363,7 @@ armour_penetration = (active ? 30 : initial(armour_penetration)) if(user) balloon_alert(user, "folded Big Slappy [active ? "open" : "closed"]") - playsound(src, 'sound/items/ratchet.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/ratchet.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/shovel/giant_wrench/attack(mob/living/target_mob, mob/living/user) diff --git a/code/modules/mining/equipment/monster_organs/monster_organ.dm b/code/modules/mining/equipment/monster_organs/monster_organ.dm index a854f113740f8..5a7c8caadbb1a 100644 --- a/code/modules/mining/equipment/monster_organs/monster_organ.dm +++ b/code/modules/mining/equipment/monster_organs/monster_organ.dm @@ -133,6 +133,9 @@ return ..() /obj/item/organ/internal/monster_core/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!isliving(interacting_with)) + return NONE + try_apply(interacting_with, user) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm index 99b27e15ca8ab..5019e023d3184 100644 --- a/code/modules/mining/equipment/resonator.dm +++ b/code/modules/mining/equipment/resonator.dm @@ -87,7 +87,7 @@ if(parent_resonator) parent_resonator.fields += src adding_failure = set_failure - playsound(src,'sound/weapons/resonator_fire.ogg',50,TRUE) + playsound(src,'sound/items/weapons/resonator_fire.ogg',50,TRUE) if(mode == RESONATOR_MODE_AUTO) transform = matrix()*0.75 animate(src, transform = matrix()*1.5, time = duration) @@ -123,7 +123,7 @@ var/turf/closed/mineral/mineral_turf = src_turf mineral_turf.gets_drilled(creator) check_pressure(src_turf) - playsound(src_turf, 'sound/weapons/resonator_blast.ogg', 50, TRUE) + playsound(src_turf, 'sound/items/weapons/resonator_blast.ogg', 50, TRUE) for(var/mob/living/attacked_living in src_turf) if(creator) log_combat(creator, attacked_living, "used a resonator field on", "resonator") diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index eb94f68a1f9a7..6ffcfa7bc6752 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -107,7 +107,7 @@ . = ..() if(.) // KERPLUNK - playsound(M,'sound/weapons/resonator_blast.ogg',50,TRUE) + playsound(M,'sound/items/weapons/resonator_blast.ogg',50,TRUE) if(iscarbon(M)) var/mob/living/carbon/L = M L.Paralyze(60) diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index 649acabfcae4a..1ef2f778bc54b 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -38,6 +38,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) var/obj/structure/extraction_point/extraction_point = point_ref.resolve() if(isnull(extraction_point)) GLOB.total_extraction_beacons.Remove(point_ref) + continue if(extraction_point.beacon_network in beacon_networks) possible_beacons += extraction_point if(!length(possible_beacons)) @@ -79,7 +80,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) balloon_alert(user, "too heavy!") return . balloon_alert_to_viewers("attaching...") - playsound(thing, 'sound/items/zip.ogg', vol = 50, vary = TRUE) + playsound(thing, 'sound/items/zip/zip.ogg', vol = 50, vary = TRUE) if(isliving(thing)) var/mob/living/creature = thing if(creature.mind) @@ -123,7 +124,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) 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) + playsound(holder_obj.loc, 'sound/items/fulton/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) @@ -133,7 +134,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) sleep(6 SECONDS) - playsound(holder_obj.loc, 'sound/items/fultext_launch.ogg', vol = 50, vary = TRUE, extrarange = -3) + playsound(holder_obj.loc, 'sound/items/fulton/fultext_launch.ogg', vol = 50, vary = TRUE, extrarange = -3) animate(holder_obj, pixel_z = 1000, time = 3 SECONDS, flags = ANIMATION_RELATIVE) if(ishuman(thing)) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index cd5a60a22f2ae..ee700e3d9774b 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -68,7 +68,7 @@ data["can_go_home"] = can_go_home return data -/obj/machinery/mineral/labor_claim_console/ui_act(action, params) +/obj/machinery/mineral/labor_claim_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 1401f8a51399c..768427f530aed 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -257,6 +257,21 @@ seed = /obj/item/seeds/lavaland/fireblossom wine_power = 40 +/obj/item/food/grown/ash_flora/seraka + name = "seraka cap" + desc = "Small, deeply flavourful mushrooms originally native to Tizira." + icon_state = "seraka_cap" + seed = /obj/item/seeds/lavaland/seraka + wine_power = 40 + +/obj/item/food/grown/ash_flora/fireblossom + name = "fire blossom" + desc = "A flower from a fire blossom." + icon_state = "fireblossom" + slot_flags = ITEM_SLOT_HEAD + seed = /obj/item/seeds/lavaland/fireblossom + wine_power = 40 + //SEEDS /obj/item/seeds/lavaland @@ -405,16 +420,3 @@ 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 2c0f7c85bf7fe..8f557e521983f 100644 --- a/code/modules/mining/lavaland/megafauna_loot.dm +++ b/code/modules/mining/lavaland/megafauna_loot.dm @@ -56,7 +56,7 @@ force = 15 attack_verb_continuous = list("clubs", "beats", "pummels") attack_verb_simple = list("club", "beat", "pummel") - hitsound = 'sound/weapons/sonic_jackhammer.ogg' + hitsound = 'sound/items/weapons/sonic_jackhammer.ogg' resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF actions_types = list(/datum/action/item_action/vortex_recall) /// Linked teleport beacon for the group teleport functionality. @@ -85,7 +85,7 @@ say("Xverwpsgexmrk...", forced = "hierophant club suicide") user.visible_message(span_suicide("[user] holds [src] into the air! It looks like [user.p_theyre()] trying to commit suicide!")) new/obj/effect/temp_visual/hierophant/telegraph(get_turf(user)) - playsound(user,'sound/machines/airlockopen.ogg', 75, TRUE) + playsound(user,'sound/machines/airlock/airlockopen.ogg', 75, TRUE) user.visible_message(span_hierophant_warning("[user] fades out, leaving [user.p_their()] belongings behind!")) for(var/obj/item/user_item in user) if(user_item != src) @@ -128,7 +128,7 @@ span_notice("You start detaching the hierophant beacon...")) if(do_after(user, 5 SECONDS, target = user) && !beacon) var/turf/user_turf = get_turf(user) - playsound(user_turf,'sound/magic/blind.ogg', 200, TRUE, -4) + playsound(user_turf,'sound/effects/magic/blind.ogg', 200, TRUE, -4) new /obj/effect/temp_visual/hierophant/telegraph/teleport(user_turf, user) beacon = new/obj/effect/hierophant(user_turf) user.update_mob_action_buttons() @@ -166,8 +166,8 @@ return new /obj/effect/temp_visual/hierophant/telegraph(destination, user) new /obj/effect/temp_visual/hierophant/telegraph(source, user) - playsound(destination,'sound/magic/wand_teleport.ogg', 200, TRUE) - playsound(source,'sound/machines/airlockopen.ogg', 200, TRUE) + playsound(destination,'sound/effects/magic/wand_teleport.ogg', 200, TRUE) + playsound(source,'sound/machines/airlock/airlockopen.ogg', 200, TRUE) if(!do_after(user, 0.3 SECONDS, target = user) || !user || !beacon || QDELETED(beacon)) //no walking away shitlord teleporting = FALSE if(user) @@ -251,7 +251,7 @@ for(var/mob/living/carbon/human/target in range(7,user)) target.apply_status_effect(/datum/status_effect/mayhem) to_chat(user, span_notice("You shatter the bottle!")) - playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, TRUE) + playsound(user.loc, 'sound/effects/glass/glassbr1.ogg', 100, TRUE) message_admins(span_adminnotice("[ADMIN_LOOKUPFLW(user)] has activated a bottle of mayhem!")) user.log_message("activated a bottle of mayhem", LOG_ATTACK) qdel(src) @@ -370,7 +370,7 @@ righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' attack_verb_continuous = list("chops", "slices", "cuts", "reaps") attack_verb_simple = list("chop", "slice", "cut", "reap") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' inhand_x_dimension = 64 inhand_y_dimension = 64 force = 20 @@ -559,7 +559,7 @@ projectile.firer = src projectile.fire(null, attacked_atom) visible_message(span_danger("[src] fires at [attacked_atom]!"), span_notice("You fire at [attacked_atom]!")) - playsound(src, 'sound/magic/fireball.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/fireball.ogg', 50, TRUE) /obj/item/soulscythe/proc/slash_target(atom/attacked_atom) if(isliving(attacked_atom) && use_blood(10)) @@ -578,7 +578,7 @@ SpinAnimation(5) addtimer(CALLBACK(src, PROC_REF(reset_spin)), 1 SECONDS) visible_message(span_danger("[src] slashes [attacked_atom]!"), span_notice("You slash [attacked_atom]!")) - playsound(src, 'sound/weapons/bladeslice.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/bladeslice.ogg', 50, TRUE) do_attack_animation(attacked_atom, ATTACK_EFFECT_SLASH) /obj/item/soulscythe/proc/charge_target(atom/attacked_atom) @@ -594,7 +594,7 @@ return visible_message(span_danger("[src] charges at [attacked_atom]!"), span_notice("You charge at [attacked_atom]!")) new /obj/effect/temp_visual/mook_dust(get_turf(src)) - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE) SpinAnimation(1) throwforce *= 2 throw_at(attacked_atom, 10, 3, soul, FALSE) @@ -659,7 +659,7 @@ force = 1 throwforce = 1 hitsound = 'sound/effects/ghost2.ogg' - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends") attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF @@ -796,7 +796,7 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF attack_verb_continuous = list("sears", "clubs", "burn") attack_verb_simple = list("sear", "club", "burn") - hitsound = 'sound/weapons/sear.ogg' + hitsound = 'sound/items/weapons/sear.ogg' var/turf_type = /turf/open/lava/smooth/weak var/transform_string = "lava" var/reset_turf_type = /turf/open/misc/asteroid/basalt @@ -807,10 +807,12 @@ var/timer = 0 var/static/list/banned_turfs = typecacheof(list(/turf/open/space, /turf/closed)) -/obj/item/lava_staff/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - return interact_with_atom(interacting_with, user, modifiers) - /obj/item/lava_staff/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(interacting_with.atom_storage || SHOULD_SKIP_INTERACTION(interacting_with, src, user)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/lava_staff/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(timer > world.time) return NONE if(is_type_in_typecache(interacting_with, banned_turfs)) @@ -833,7 +835,7 @@ message_admins("[ADMIN_LOOKUPFLW(user)] fired the lava staff at [ADMIN_VERBOSEJMP(T)]") user.log_message("fired the lava staff at [AREACOORD(T)].", LOG_ATTACK) timer = world.time + create_cooldown - playsound(T,'sound/magic/fireball.ogg', 200, TRUE) + playsound(T,'sound/effects/magic/fireball.ogg', 200, TRUE) else timer = world.time qdel(L) @@ -842,7 +844,7 @@ if(T.TerraformTurf(reset_turf_type, flags = CHANGETURF_INHERIT_AIR)) user.visible_message(span_danger("[user] turns \the [old_name] into [reset_string]!")) timer = world.time + reset_cooldown - playsound(T,'sound/magic/fireball.ogg', 200, TRUE) + playsound(T,'sound/effects/magic/fireball.ogg', 200, TRUE) return ITEM_INTERACT_SUCCESS /obj/effect/temp_visual/lavastaff @@ -873,7 +875,7 @@ inhand_x_dimension = 64 inhand_y_dimension = 64 slot_flags = ITEM_SLOT_BELT - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' w_class = WEIGHT_CLASS_BULKY sharpness = SHARP_EDGED /// List of factions we deal bonus damage to @@ -975,7 +977,7 @@ user.changeNext_move(CLICK_CD_MELEE * 0.25) if(user) balloon_alert(user, "[active ? "opened" : "closed"] [src]") - playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (active * 30000)) + playsound(src, 'sound/effects/magic/clockwork/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (active * 30000)) return COMPONENT_NO_DEFAULT_MESSAGE //Legion: Staff of Storms @@ -992,7 +994,7 @@ w_class = WEIGHT_CLASS_BULKY force = 20 damtype = BURN - hitsound = 'sound/weapons/taserhit.ogg' + hitsound = 'sound/items/weapons/taserhit.ogg' wound_bonus = -30 bare_wound_bonus = 20 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF @@ -1034,7 +1036,7 @@ return user.visible_message(span_warning("[user] holds [src] skywards as an orange beam travels into the sky!"), \ span_notice("You hold [src] skyward, dispelling the storm!")) - playsound(user, 'sound/magic/staff_change.ogg', 200, FALSE) + playsound(user, 'sound/effects/magic/staff_change.ogg', 200, FALSE) var/old_color = user.color user.color = list(340/255, 240/255, 0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) var/old_transform = user.transform @@ -1071,7 +1073,7 @@ if((target_turf.z in weather.impacted_z_levels) && ispath(target_area.type, weather.area_type)) power_boosted = TRUE break - playsound(src, 'sound/magic/lightningshock.ogg', 10, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) + playsound(src, 'sound/effects/magic/lightningshock.ogg', 10, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) targeted_turfs += target_turf balloon_alert(user, "you aim at [target_turf]...") new /obj/effect/temp_visual/telegraphing/thunderbolt(target_turf) @@ -1083,7 +1085,7 @@ /obj/item/storm_staff/proc/recharge(mob/user) thunder_charges = min(thunder_charges + 1, max_thunder_charges) - playsound(src, 'sound/magic/charge.ogg', 10, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) + playsound(src, 'sound/effects/magic/charge.ogg', 10, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) /obj/item/storm_staff/proc/throw_thunderbolt(turf/target, boosted) targeted_turfs -= target @@ -1103,6 +1105,6 @@ for(var/obj/hit_thing in turf) hit_thing.take_damage(20, BURN, ENERGY, FALSE) - playsound(target, 'sound/magic/lightningbolt.ogg', 100, TRUE) + playsound(target, 'sound/effects/magic/lightningbolt.ogg', 100, TRUE) target.visible_message(span_danger("A thunderbolt strikes [target]!")) explosion(target, light_impact_range = (boosted ? 1 : 0), flame_range = (boosted ? 2 : 1), silent = TRUE) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index d90d65db40500..41c58335417e9 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -8,6 +8,7 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF can_install_electronics = FALSE paint_jobs = null + can_weld_shut = FALSE /obj/structure/closet/crate/necropolis/tendril desc = "It's watching you suspiciously. You need a skeleton key to open it." diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 3f0c18abcca0f..f7c06e16702f4 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -202,13 +202,13 @@ 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) + guardian.playsound_local(get_turf(guardian), 'sound/effects/magic/summonitems_generic.ogg', 50, TRUE) /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!")) - guardian.playsound_local(get_turf(guardian), 'sound/magic/repulse.ogg', 50, TRUE) + guardian.playsound_local(get_turf(guardian), 'sound/effects/magic/repulse.ogg', 50, TRUE) /datum/action/item_action/hands_free/memento_mori check_flags = NONE @@ -425,8 +425,7 @@ if(!user) return - user.status_flags &= ~GODMODE - REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) + user.remove_traits(list(TRAIT_GODMODE, TRAIT_NO_TRANSFORM), REF(src)) user.forceMove(get_turf(src)) user.visible_message(span_danger("[user] pops back into reality!")) @@ -437,8 +436,7 @@ setDir(user.dir) user.forceMove(src) - ADD_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) - user.status_flags |= GODMODE + user.add_traits(list(TRAIT_GODMODE, TRAIT_NO_TRANSFORM), REF(src)) user_ref = WEAKREF(user) @@ -557,8 +555,8 @@ 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.dna.species.handle_mutant_bodyparts(exposed_human) // BUBBER EDIT OR BEGIN + playsound(exposed_human.loc, 'sound/items/poster/poster_ripped.ogg', 50, TRUE, -1) exposed_human.apply_damage(20, def_zone = BODY_ZONE_CHEST, forced = TRUE, wound_bonus = CANT_WOUND) exposed_human.emote("scream") @@ -595,10 +593,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 extends much farther than you were expecting.")) 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)) continue var/turf/T2 = locate(ladder_x, ladder_y, i) last_ladder = new /obj/structure/ladder/unbreakable/jacob(T2, null, last_ladder) @@ -671,7 +669,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_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' // SKYRAT EDIT - DIGIS hoodtype = /obj/item/clothing/head/hooded/berserker armor_type = /datum/armor/hooded_berserker cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -773,7 +771,7 @@ /// Starts berserk, reducing incoming brute by 50%, doubled attacking speed, NOGUNS trait, adding a color and giving them the berserk movespeed modifier /obj/item/clothing/head/hooded/berserker/proc/berserk_mode(mob/living/carbon/human/user) to_chat(user, span_warning("You enter berserk mode.")) - playsound(user, 'sound/magic/staff_healing.ogg', 50) + playsound(user, 'sound/effects/magic/staff_healing.ogg', 50) user.add_movespeed_modifier(/datum/movespeed_modifier/berserk) user.physiology.brute_mod *= 0.5 user.next_move_modifier *= BERSERK_ATTACK_SPEED_MODIFIER @@ -791,7 +789,7 @@ if(QDELETED(user)) return to_chat(user, span_warning("You exit berserk mode.")) - playsound(user, 'sound/magic/summonitems_generic.ogg', 50) + playsound(user, 'sound/effects/magic/summonitems_generic.ogg', 50) user.remove_movespeed_modifier(/datum/movespeed_modifier/berserk) user.physiology.brute_mod *= 2 user.next_move_modifier /= BERSERK_ATTACK_SPEED_MODIFIER @@ -907,7 +905,7 @@ healthscan(living_owner, living_scanned, 1, TRUE) - owner.playsound_local(get_turf(owner), 'sound/magic/smoke.ogg', 50, TRUE) + owner.playsound_local(get_turf(owner), 'sound/effects/magic/smoke.ogg', 50, TRUE) owner.balloon_alert(owner, "[living_scanned] scanned") addtimer(CALLBACK(src, PROC_REF(send_cooldown_end_message), cooldown_time)) @@ -943,7 +941,7 @@ /obj/item/organ/internal/cyberimp/arm/shard/attack_self(mob/user, modifiers) . = ..() to_chat(user, span_userdanger("The mass goes up your arm and goes inside it!")) - playsound(user, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(user, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) var/index = user.get_held_index_of_item(src) zone = (index == LEFT_HANDS ? BODY_ZONE_L_ARM : BODY_ZONE_R_ARM) SetSlotFromZone() @@ -964,7 +962,7 @@ return FALSE if(!katana.drew_blood) to_chat(owner, span_userdanger("[katana] lashes out at you in hunger!")) - playsound(owner, 'sound/magic/demon_attack1.ogg', 50, TRUE) + playsound(owner, 'sound/effects/magic/demon_attack1.ogg', 50, TRUE) var/obj/item/bodypart/part = owner.get_holding_bodypart_of_item(katana) if(part) part.receive_damage(brute = 25, wound_bonus = 10, sharpness = SHARP_EDGED) @@ -990,12 +988,12 @@ force = 15 armour_penetration = 30 block_chance = 30 - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' sharpness = SHARP_EDGED w_class = WEIGHT_CLASS_HUGE 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") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | FREEZE_PROOF var/shattered = FALSE var/drew_blood = FALSE @@ -1047,7 +1045,7 @@ user.visible_message(span_warning("[user] strikes [target] with [src]'s hilt!"), span_notice("You hilt strike [target]!")) to_chat(target, span_userdanger("You've been struck by [user]!")) - playsound(src, 'sound/weapons/genhit3.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/genhit3.ogg', 50, TRUE) RegisterSignal(target, COMSIG_MOVABLE_IMPACT, PROC_REF(strike_throw_impact)) var/atom/throw_target = get_edge_target_turf(target, user.dir) target.throw_at(throw_target, 5, 3, user, FALSE, gentle = TRUE) @@ -1072,7 +1070,7 @@ /obj/item/cursed_katana/proc/slice(mob/living/target, mob/user) user.visible_message(span_warning("[user] does a wide slice!"), span_notice("You do a wide slice!")) - playsound(src, 'sound/weapons/bladeslice.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/bladeslice.ogg', 50, TRUE) var/turf/user_turf = get_turf(user) var/dir_to_target = get_dir(user_turf, get_turf(target)) var/static/list/cursed_katana_slice_angles = list(0, -45, 45, -90, 90) //so that the animation animates towards the target clicked and not towards a side target @@ -1092,7 +1090,7 @@ user.visible_message(span_warning("[user] vanishes into thin air!"), span_notice("You enter the dark cloak.")) new /obj/effect/temp_visual/mook_dust(get_turf(src)) - playsound(src, 'sound/magic/smoke.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/smoke.ogg', 50, TRUE) if(ishostile(target)) var/mob/living/simple_animal/hostile/hostile_target = target if(hostile_target.target == user) @@ -1105,7 +1103,7 @@ user.clear_sight(SEE_SELF) user.visible_message(span_warning("[user] appears from thin air!"), span_notice("You exit the dark cloak.")) - playsound(src, 'sound/magic/summonitems_generic.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/summonitems_generic.ogg', 50, TRUE) new /obj/effect/temp_visual/mook_dust(get_turf(src)) /obj/item/cursed_katana/proc/cut(mob/living/target, mob/user) @@ -1114,7 +1112,7 @@ to_chat(target, span_userdanger("Your tendons have been cut by [user]!")) target.apply_damage(damage = 15, sharpness = SHARP_EDGED, wound_bonus = 15) user.do_attack_animation(target, ATTACK_EFFECT_DISARM) - playsound(src, 'sound/weapons/rapierhit.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/rapierhit.ogg', 50, TRUE) var/datum/status_effect/stacking/saw_bleed/bloodletting/status = target.has_status_effect(/datum/status_effect/stacking/saw_bleed/bloodletting) if(!status) target.apply_status_effect(/datum/status_effect/stacking/saw_bleed/bloodletting, 6) @@ -1125,7 +1123,7 @@ user.visible_message(span_warning("[user] dashes through [target]!"), span_notice("You dash through [target]!")) to_chat(target, span_userdanger("[user] dashes through you!")) - playsound(src, 'sound/magic/blink.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/blink.ogg', 50, TRUE) target.apply_damage(damage = 17, sharpness = SHARP_POINTY, bare_wound_bonus = 10) var/turf/dash_target = get_turf(target) for(var/distance in 0 to 8) @@ -1145,7 +1143,7 @@ to_chat(target, span_userdanger("[user] shatters [src] over you!")) target.apply_damage(damage = ishostile(target) ? 75 : 35, wound_bonus = 20) user.do_attack_animation(target, ATTACK_EFFECT_SMASH) - playsound(src, 'sound/effects/glassbr3.ogg', 100, TRUE) + playsound(src, 'sound/effects/glass/glassbr3.ogg', 100, TRUE) shattered = TRUE moveToNullspace() balloon_alert(user, "katana shattered") @@ -1154,7 +1152,7 @@ /obj/item/cursed_katana/proc/coagulate(mob/user) balloon_alert(user, "katana coagulated") shattered = FALSE - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) #undef ATTACK_STRIKE #undef ATTACK_SLICE diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 61318f63b92a5..d0c63bd3b7aa8 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -94,7 +94,7 @@ /obj/machinery/mineral/processing_unit_console/ui_data(mob/user) return processing_machine.ui_data() -/obj/machinery/mineral/processing_unit_console/ui_act(action, list/params) +/obj/machinery/mineral/processing_unit_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 14460cffb1b66..312acb6672014 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -297,7 +297,7 @@ return data -/obj/machinery/mineral/ore_redemption/ui_act(action, params) +/obj/machinery/mineral/ore_redemption/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index 97c3a90b78eb1..7fe2e9468f186 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -143,7 +143,7 @@ return data -/obj/machinery/ore_silo/ui_act(action, list/params) +/obj/machinery/ore_silo/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index c8a58a1d0f493..1c250b578668c 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -62,7 +62,7 @@ )) return data -/obj/machinery/mineral/stacking_unit_console/ui_act(action, list/params) +/obj/machinery/mineral/stacking_unit_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 7b9a56df1eab8..aaf127bf8b594 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -94,7 +94,7 @@ desc = "Used to call and send the mining shuttle." circuit = /obj/item/circuitboard/computer/mining_shuttle shuttleId = "mining" - possible_destinations = "mining_home;mining_away;landing_zone_dock" + possible_destinations = "mining_home;mining_away;landing_zone_dock;mining_public" no_destination_swap = TRUE //ATTACK HAND IGNORING PARENT RETURN VALUE @@ -160,6 +160,7 @@ close_sound = 'sound/machines/trapdoor/trapdoor_shut.ogg' set_dir_on_move = TRUE can_buckle = TRUE + can_weld_shut = FALSE /// Whether we're on a set of rails or just on the ground var/on_rails = FALSE @@ -320,7 +321,7 @@ return update_rail_state(FALSE) Move(new_destination) - var/sound/thud_sound = sound('sound/weapons/thudswoosh.ogg') + var/sound/thud_sound = sound('sound/items/weapons/thudswoosh.ogg') thud_sound.pitch = 0.5 playsound(src, thud_sound, 50, TRUE) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index e9e8b3a7c3daf..7ad08083df3a8 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -517,7 +517,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ playsound(user.loc, 'sound/items/coinflip.ogg', 50, TRUE) var/oldloc = loc sleep(1.5 SECONDS) - if(loc == oldloc && user && !user.incapacitated()) + if(loc == oldloc && user && !user.incapacitated) user.visible_message(span_notice("[user] flips [src]. It lands on [coinflip]."), \ span_notice("You flip [src]. It lands on [coinflip]."), \ span_hear("You hear the clattering of loose change.")) @@ -599,7 +599,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ playsound(user.loc, 'sound/items/coinflip.ogg', 50, TRUE) var/oldloc = loc sleep(1.5 SECONDS) - if(loc == oldloc && user && !user.incapacitated()) + if(loc == oldloc && user && !user.incapacitated) user.visible_message(span_notice("[user] flips [src]. It lands on [coinflip]."), \ span_notice("You flip [src]. It lands on [coinflip]."), \ span_hear("You hear the clattering of loose change.")) diff --git a/code/modules/mining/satchel_ore_box.dm b/code/modules/mining/satchel_ore_box.dm index b94796b161433..94be35108d0b0 100644 --- a/code/modules/mining/satchel_ore_box.dm +++ b/code/modules/mining/satchel_ore_box.dm @@ -95,7 +95,7 @@ return list("materials" = materials) -/obj/structure/ore_box/ui_act(action, params) +/obj/structure/ore_box/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index b4ddc8cd9c8b4..eb0d787f64b49 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -4,10 +4,10 @@ density = FALSE move_force = INFINITY move_resist = INFINITY - status_flags = GODMODE // You can't damage it. mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_ABSTRACT // No one can see us sight = SEE_SELF + status_flags = NONE /// Toggles if the camera can move on shuttles var/move_on_shuttle = FALSE /// Toggles if the camera can use emotes @@ -15,6 +15,7 @@ /mob/camera/Initialize(mapload) . = ..() + ADD_TRAIT(src, TRAIT_GODMODE, INNATE_TRAIT) SSpoints_of_interest.make_point_of_interest(src) if(!move_on_shuttle) ADD_TRAIT(src, TRAIT_BLOCK_SHUTTLE_MOVEMENT, INNATE_TRAIT) diff --git a/code/modules/mob/dead/new_player/latejoin_menu.dm b/code/modules/mob/dead/new_player/latejoin_menu.dm index d2db3aa34b7fe..b01e45c4d33b5 100644 --- a/code/modules/mob/dead/new_player/latejoin_menu.dm +++ b/code/modules/mob/dead/new_player/latejoin_menu.dm @@ -35,7 +35,7 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new) ui.open() /datum/latejoin_menu/proc/scream_at_player(mob/dead/new_player/player) - if(istype(player) && !player.jobs_menu_mounted) + if(!player.jobs_menu_mounted) to_chat(player, span_notice("If the late join menu isn't showing, hold CTRL while clicking the join button!")) /datum/latejoin_menu/ui_data(mob/user) @@ -190,7 +190,6 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new) return TRUE owner.vote_on_poll_handler(poll, params) - return TRUE /// Gives the user a random job that they can join as, and prompts them if they'd actually like to keep it, rerolling if not. Cancellable by the user. diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 4513abd9e92e0..e512818c95853 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -147,7 +147,7 @@ return GENERIC_JOB_UNAVAILABLE_ERROR /mob/dead/new_player/proc/IsJobUnavailable(rank, latejoin = FALSE) - var/datum/job/job = SSjob.GetJob(rank) + var/datum/job/job = SSjob.get_job(rank) if(!(job.job_flags & JOB_NEW_PLAYER_JOINABLE)) return JOB_UNAVAILABLE_GENERIC if((job.current_positions >= job.total_positions) && job.total_positions != -1) @@ -203,9 +203,9 @@ SSticker.queued_players -= src SSticker.queue_delay = 4 - var/datum/job/job = SSjob.GetJob(rank) + var/datum/job/job = SSjob.get_job(rank) - if(!SSjob.AssignRole(src, job, TRUE)) + if(!SSjob.assign_role(src, job, TRUE)) 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 @@ -219,14 +219,14 @@ CRASH("Failed to create a character for latejoin.") transfer_character() - SSjob.EquipRank(character, job, character.client) + SSjob.equip_rank(character, job, character.client) job.after_latejoin_spawn(character) #define IS_NOT_CAPTAIN 0 #define IS_ACTING_CAPTAIN 1 #define IS_FULL_CAPTAIN 2 var/is_captain = IS_NOT_CAPTAIN - var/captain_sound = 'sound/misc/notice2.ogg' + var/captain_sound = 'sound/announcer/notice/notice2.ogg' // 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 @@ -259,8 +259,10 @@ humanc.increment_scar_slot() humanc.load_persistent_scars() + SSpersistence.load_modular_persistence(humanc.get_organ_slot(ORGAN_SLOT_BRAIN)) // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE + if(GLOB.curse_of_madness_triggered) give_madness(humanc, GLOB.curse_of_madness_triggered) @@ -281,6 +283,7 @@ if(humanc) // Quirks may change manifest datapoints, so inject only after assigning quirks GLOB.manifest.inject(humanc, humanc.client) // SKYRAT EDIT - Added humanc.client - ALTERNATIVE_JOB_TITLES + var/area/station/arrivals = GLOB.areas_by_type[/area/station/hallway/secondary/entry] if(humanc && arrivals && !arrivals.power_environ) //arrivals depowered humanc.put_in_hands(new /obj/item/crowbar/large/emergency(get_turf(humanc))) //if hands full then just drops on the floor diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index cd5111c235c66..8be060496bc3a 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -31,7 +31,6 @@ var/obj/item/bodypart/chest/chest = character.get_bodypart(BODY_ZONE_CHEST) chest.add_bodypart_overlay(new /datum/bodypart_overlay/simple/sixpack() ) - /** * 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. @@ -89,14 +88,15 @@ for(var/job in job_preferences) if(job_preferences[job] > highest_pref) - preview_job = SSjob.GetJob(job) + preview_job = SSjob.get_job(job) highest_pref = job_preferences[job] return preview_job /* SKYRAT 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() + +/datum/preferences/proc/render_new_preview_appearance(mob/living/carbon/human/dummy/mannequin, show_job_clothes = TRUE) + var/datum/job/no_job = SSjob.get_job_type(/datum/job/unassigned) + var/datum/job/preview_job = get_highest_priority_job() || no_job if(preview_job) // Silicons only need a very basic preview since there is no customization for them. diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index c239817a30e14..cf5863163c884 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -7,9 +7,6 @@ ghost_others = client.prefs.read_preference(/datum/preference/choiced/ghost_others) var/preferred_form = null - if(isAdminGhostAI(src)) - has_unlimited_silicon_privilege = TRUE - if(client.prefs.unlock_content) preferred_form = client.prefs.read_preference(/datum/preference/choiced/ghost_form) ghost_orbit = client.prefs.read_preference(/datum/preference/choiced/ghost_orbit) diff --git a/code/modules/mob/dead/observer/notificationprefs.dm b/code/modules/mob/dead/observer/notificationprefs.dm index 802da5e2b8011..5e14f1e5ce9bc 100644 --- a/code/modules/mob/dead/observer/notificationprefs.dm +++ b/code/modules/mob/dead/observer/notificationprefs.dm @@ -38,7 +38,7 @@ "desc" = GLOB.poll_ignore_desc[key] )) -/datum/notificationpanel/ui_act(action, params) +/datum/notificationpanel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index f6ce0fe95cf52..5b1cf278a6468 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -141,11 +141,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) add_to_dead_mob_list() - for(var/v in GLOB.active_alternate_appearances) - if(!v) - continue - var/datum/atom_hud/alternate_appearance/AA = v - AA.onNewMob(src) + for(var/datum/atom_hud/alternate_appearance/alt_hud as anything in GLOB.active_alternate_appearances) + alt_hud.apply_to_new_mob(src) . = ..() @@ -325,7 +322,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp ghostize(TRUE) // Can return with TRUE return TRUE // SKYRAT 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")) + var/response = tgui_alert(usr, "Are you sure you want to ghost? You won't be able to re-enter your body!", "Confirm Ghost Observe", list("Ghost", "Stay in Body")) if(response != "Ghost") return FALSE//didn't want to ghost after-all ghostize(FALSE) // FALSE parameter is so we can never re-enter our body. U ded. @@ -420,7 +417,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp //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) 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) + var/datum/job/job_to_free = SSjob.get_job(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 @@ -504,7 +501,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/list/icon_dimensions = get_icon_dimensions(target.icon) var/orbitsize = (icon_dimensions["width"] + icon_dimensions["height"]) * 0.5 - orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25) + orbitsize -= (orbitsize/ICON_SIZE_ALL)*(ICON_SIZE_ALL*0.25) var/rot_seg diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 021960395d086..9b67f4c012f35 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -84,15 +84,10 @@ /datum/emote/flip/run_emote(mob/user, params , type_override, intentional) . = ..() - user.SpinAnimation(HAS_TRAIT(user, TRAIT_SLOW_FLIP) ? FLIP_EMOTE_DURATION * 2 : FLIP_EMOTE_DURATION, 1) + user.SpinAnimation(FLIP_EMOTE_DURATION, 1) /datum/emote/flip/check_cooldown(mob/user, intentional) - var/slow_flipper = HAS_TRAIT(user, TRAIT_SLOW_FLIP) - if(slow_flipper) - cooldown *= 2 . = ..() - if(slow_flipper) - cooldown *= 0.5 if(.) return if(!can_run_emote(user, intentional=intentional)) @@ -148,3 +143,27 @@ #undef BEYBLADE_DIZZINESS_DURATION #undef BEYBLADE_CONFUSION_INCREMENT #undef BEYBLADE_CONFUSION_LIMIT + + +/datum/emote/jump + key = "jump" + key_third_person = "jumps" + message = "jumps!" + // Allows ghosts to jump + mob_type_ignore_stat_typecache = list(/mob/dead/observer) + +/datum/emote/jump/run_emote(mob/user, params, type_override, intentional) + . = ..() + + var/original_transform = user.transform + animate(user, transform = user.transform.Translate(0, 4), time = 0.1 SECONDS, flags = ANIMATION_PARALLEL) + animate(transform = original_transform, time = 0.1 SECONDS) + +/datum/emote/jump/get_sound(mob/user) + return 'sound/items/weapons/thudswoosh.ogg' + +// Avoids playing sounds if we're a ghost +/datum/emote/jump/should_play_sound(mob/user, intentional) + if(isliving(user)) + return ..() + return FALSE diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index d40b016cd5289..e8f981fd3c57c 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -511,7 +511,7 @@ // SKYRAT EDIT ADDITION END for(var/slot in slot_priority) - if(equip_to_slot_if_possible(W, slot, disable_warning = TRUE, redraw_mob = TRUE, initial = initial, indirect_action = indirect_action)) // SKYRAT EDIT CHANGE - ORIGINAL: if(equip_to_slot_if_possible(W, slot, disable_warning = TRUE, redraw_mob = TRUE, indirect_action = indirect_action)) + if(equip_to_slot_if_possible(W, slot, disable_warning = TRUE, redraw_mob = TRUE, indirect_action = indirect_action, initial = initial)) // SKYRAT EDIT CHANGE - ORIGINAL: if(equip_to_slot_if_possible(W, slot, disable_warning = TRUE, redraw_mob = TRUE, indirect_action = indirect_action)) return TRUE if(qdel_on_fail) @@ -582,8 +582,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" @@ -600,19 +598,19 @@ hud_used.build_hand_slots() //GetAllContents that is reasonable and not stupid -/mob/living/proc/get_all_gear() - var/list/processing_list = get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES | INCLUDE_HELD) +/mob/living/proc/get_all_gear(accessories = TRUE, recursive = TRUE) + var/list/processing_list = get_equipped_items(INCLUDE_POCKETS | INCLUDE_HELD | (accessories ? INCLUDE_ACCESSORIES : NONE)) list_clear_nulls(processing_list) // handles empty hands var/i = 0 while(i < length(processing_list)) var/atom/A = processing_list[++i] - if(A.atom_storage) + if(A.atom_storage && recursive) processing_list += A.atom_storage.return_inv() 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() +/mob/living/proc/gather_belongings(accessories = TRUE, recursive = TRUE) + var/list/belongings = get_all_gear(accessories, recursive) for (var/obj/item/implant/storage/internal_bag in implants) belongings += internal_bag.contents return belongings diff --git a/code/modules/mob/living/basic/alien/_alien.dm b/code/modules/mob/living/basic/alien/_alien.dm index 907d28aaa4187..99b615fbf6089 100644 --- a/code/modules/mob/living/basic/alien/_alien.dm +++ b/code/modules/mob/living/basic/alien/_alien.dm @@ -35,10 +35,10 @@ attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW gold_core_spawnable = NO_SPAWN - death_sound = 'sound/voice/hiss6.ogg' + death_sound = 'sound/mobs/non-humanoids/hiss/hiss6.ogg' death_message = "lets out a waning guttural screech, green blood bubbling from its maw..." habitable_atmos = null diff --git a/code/modules/mob/living/basic/alien/queen.dm b/code/modules/mob/living/basic/alien/queen.dm index f2d787743a258..8957d05d89b10 100644 --- a/code/modules/mob/living/basic/alien/queen.dm +++ b/code/modules/mob/living/basic/alien/queen.dm @@ -15,7 +15,7 @@ ///The type of projectile that fires from attacks. var/projectiletype = /obj/projectile/neurotoxin/damaging ///The sound that plays when the projectile is fired. - var/projectilesound = 'sound/weapons/pierce.ogg' + var/projectilesound = 'sound/items/weapons/pierce.ogg' /mob/living/basic/alien/queen/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/basic/alien/sentinel.dm b/code/modules/mob/living/basic/alien/sentinel.dm index 8f5ae815c5ffd..7f39e1b12aab5 100644 --- a/code/modules/mob/living/basic/alien/sentinel.dm +++ b/code/modules/mob/living/basic/alien/sentinel.dm @@ -13,7 +13,7 @@ ///The type of projectile that fires from attacks. var/projectiletype = /obj/projectile/neurotoxin/damaging ///The sound that plays when the projectile is fired. - var/projectilesound = 'sound/weapons/pierce.ogg' + var/projectilesound = 'sound/items/weapons/pierce.ogg' /mob/living/basic/alien/sentinel/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index 7d67e8a4ae5a2..2413da9478012 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -266,7 +266,7 @@ REMOVE_TRAIT(src, TRAIT_NO_GLIDE, SPEED_TRAIT) /mob/living/basic/relaymove(mob/living/user, direction) - if(user.incapacitated()) + if(user.incapacitated) return return relaydrive(user, direction) diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 646cabe339d42..b4100a73cc160 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -15,7 +15,7 @@ ignored_mobs = user, ) to_chat(user, span_notice("You [response_help_simple] [src].")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) return TRUE if(HAS_TRAIT(user, TRAIT_PACIFISM)) @@ -72,7 +72,7 @@ visible_message(span_notice("[user.name] [response_help_continuous] [src]."), \ span_notice("[user.name] [response_help_continuous] you."), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_notice("You [response_help_simple] [src].")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) /mob/living/basic/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) @@ -80,7 +80,7 @@ if(!.) return if(LAZYACCESS(modifiers, RIGHT_CLICK)) - playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/pierce.ogg', 25, TRUE, -1) visible_message(span_danger("[user] [response_disarm_continuous] [name]!"), \ span_userdanger("[user] [response_disarm_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You [response_disarm_simple] [name]!")) @@ -90,7 +90,7 @@ visible_message(span_danger("[user] slashes at [src]!"), \ 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) + playsound(loc, 'sound/items/weapons/slice.ogg', 25, TRUE, -1) apply_damage(damage) log_combat(user, src, "attacked") @@ -159,7 +159,7 @@ ..() /mob/living/basic/update_stat() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return if(stat != DEAD) if(health <= 0) diff --git a/code/modules/mob/living/basic/blob_minions/blob_spore.dm b/code/modules/mob/living/basic/blob_minions/blob_spore.dm index e8c3acc8b97f0..6946d30a631ec 100644 --- a/code/modules/mob/living/basic/blob_minions/blob_spore.dm +++ b/code/modules/mob/living/basic/blob_minions/blob_spore.dm @@ -19,7 +19,7 @@ obj_damage = 0 attack_verb_continuous = "batters" attack_verb_simple = "batter" - attack_sound = 'sound/weapons/genhit1.ogg' + attack_sound = 'sound/items/weapons/genhit1.ogg' death_message = "explodes into a cloud of gas!" gold_core_spawnable = HOSTILE_SPAWN basic_mob_flags = DEL_ON_DEATH diff --git a/code/modules/mob/living/basic/blob_minions/blob_zombie.dm b/code/modules/mob/living/basic/blob_minions/blob_zombie.dm index 50299a38b3fee..b3ce7ea38cbc4 100644 --- a/code/modules/mob/living/basic/blob_minions/blob_zombie.dm +++ b/code/modules/mob/living/basic/blob_minions/blob_zombie.dm @@ -18,7 +18,7 @@ obj_damage = 20 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/genhit1.ogg' + attack_sound = 'sound/items/weapons/genhit1.ogg' death_message = "collapses to the ground!" gold_core_spawnable = NO_SPAWN basic_mob_flags = DEL_ON_DEATH diff --git a/code/modules/mob/living/basic/blob_minions/blobbernaut.dm b/code/modules/mob/living/basic/blob_minions/blobbernaut.dm index 8b94063ba7764..13146c3b5c51c 100644 --- a/code/modules/mob/living/basic/blob_minions/blobbernaut.dm +++ b/code/modules/mob/living/basic/blob_minions/blobbernaut.dm @@ -17,7 +17,7 @@ obj_damage = BLOBMOB_BLOBBERNAUT_DMG_OBJ attack_verb_continuous = "slams" attack_verb_simple = "slam" - attack_sound = 'sound/effects/blobattack.ogg' + attack_sound = 'sound/effects/blob/blobattack.ogg' verb_say = "gurgles" verb_ask = "demands" verb_exclaim = "roars" @@ -84,8 +84,8 @@ key = ckey flick("blobbernaut_produce", src) health = maxHealth / 2 // Start out injured to encourage not beelining away from the blob - SEND_SOUND(src, sound('sound/effects/blobattack.ogg')) - SEND_SOUND(src, sound('sound/effects/attackblob.ogg')) + SEND_SOUND(src, sound('sound/effects/blob/blobattack.ogg')) + SEND_SOUND(src, sound('sound/effects/blob/attackblob.ogg')) to_chat(src, span_infoplain("You are powerful, hard to kill, and slowly regenerate near nodes and cores, [span_cult_large("but will slowly die if not near the blob")] or if the factory that made you is killed.")) to_chat(src, span_infoplain("You can communicate with other blobbernauts and overminds telepathically by attempting to speak normally")) to_chat(src, span_infoplain("Your overmind's blob reagent is: [blobstrain.name]!")) diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index 04b3a7864d21e..be7ce8bc5ddc5 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -26,7 +26,6 @@ GLOBAL_LIST_INIT(command_strings, list( maximum_survivable_temperature = INFINITY minimum_survivable_temperature = 0 - has_unlimited_silicon_privilege = TRUE sentience_type = SENTIENCE_ARTIFICIAL status_flags = NONE //no default canpush @@ -59,6 +58,7 @@ GLOBAL_LIST_INIT(command_strings, list( ///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 + /// DO NOT MODIFY MANUALLY, USE set_bot_mode_flags. If you don't shit breaks BAD 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_COVER_MAINTS_OPEN | BOT_COVER_LOCKED | BOT_COVER_EMAGGED | BOT_COVER_HACKED var/bot_access_flags = BOT_COVER_LOCKED @@ -109,6 +109,7 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/Initialize(mapload) . = ..() + add_traits(list(TRAIT_SILICON_ACCESS, TRAIT_REAGENT_SCANNER, TRAIT_UNOBSERVANT), INNATE_TRAIT) AddElement(/datum/element/ai_retaliate) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(handle_loop_movement)) RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(after_attacked)) @@ -151,6 +152,11 @@ GLOBAL_LIST_INIT(command_strings, list( ai_controller.set_blackboard_key(BB_RADIO_CHANNEL, radio_channel) update_appearance() +/mob/living/basic/bot/proc/set_mode_flags(mode_flags) + SHOULD_CALL_PARENT(TRUE) + bot_mode_flags = mode_flags + SEND_SIGNAL(src, COMSIG_BOT_MODE_FLAGS_SET, mode_flags) + /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"]") @@ -181,7 +187,7 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/proc/turn_on() if(stat == DEAD) return FALSE - bot_mode_flags |= BOT_MODE_ON + set_mode_flags(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() @@ -190,7 +196,7 @@ GLOBAL_LIST_INIT(command_strings, list( return TRUE /mob/living/basic/bot/proc/turn_off() - bot_mode_flags &= ~BOT_MODE_ON + set_mode_flags(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. @@ -308,7 +314,7 @@ GLOBAL_LIST_INIT(command_strings, list( return FALSE bot_access_flags |= BOT_COVER_EMAGGED bot_access_flags |= BOT_COVER_LOCKED - bot_mode_flags &= ~BOT_MODE_REMOTE_ENABLED //Manually emagging the bot also locks the AI from controlling it. + set_mode_flags(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")) @@ -532,6 +538,7 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/proc/bot_reset(bypass_ai_reset = FALSE) SEND_SIGNAL(src, COMSIG_BOT_RESET) access_card.set_access(initial_access) + update_bot_mode(new_mode = src::mode) diag_hud_set_botstat() diag_hud_set_botmode() clear_path_hud() @@ -552,15 +559,17 @@ GLOBAL_LIST_INIT(command_strings, list( // process control input switch(command) if("patroloff") - bot_reset() //HOLD IT!! //OBJECTION!! - bot_mode_flags &= ~BOT_MODE_AUTOPATROL + set_patrol_off() if("patrolon") - bot_mode_flags |= BOT_MODE_AUTOPATROL + set_mode_flags(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/set_patrol_off() + bot_reset() + set_mode_flags(bot_mode_flags & ~BOT_MODE_AUTOPATROL) /mob/living/basic/bot/proc/bot_control_message(command, user) if(command == "summon") @@ -607,10 +616,10 @@ GLOBAL_LIST_INIT(command_strings, list( if("maintenance") bot_access_flags ^= BOT_COVER_MAINTS_OPEN if("patrol") - bot_mode_flags ^= BOT_MODE_AUTOPATROL + set_mode_flags(bot_mode_flags ^ BOT_MODE_AUTOPATROL) bot_reset() if("airplane") - bot_mode_flags ^= BOT_MODE_REMOTE_ENABLED + set_mode_flags(bot_mode_flags ^ BOT_MODE_REMOTE_ENABLED) if("hack") if(!HAS_SILICON_ACCESS(the_user)) return diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm index b7cd5dcabd394..fd89168ddf4f1 100644 --- a/code/modules/mob/living/basic/bots/bot_ai.dm +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -48,6 +48,12 @@ return RegisterSignal(new_pawn, COMSIG_BOT_RESET, PROC_REF(reset_bot)) RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_CLEARED(BB_BOT_SUMMON_TARGET), PROC_REF(clear_summon)) + RegisterSignal(new_pawn, COMSIG_MOB_AI_MOVEMENT_STARTED, PROC_REF(on_movement_start)) + +/datum/ai_controller/basic_controller/bot/proc/on_movement_start(mob/living/basic/bot/source, atom/target) + SIGNAL_HANDLER + if(current_movement_target == blackboard[BB_BEACON_TARGET]) + source.update_bot_mode(new_mode = BOT_PATROL) /datum/ai_controller/basic_controller/bot/proc/clear_summon() SIGNAL_HANDLER @@ -55,7 +61,15 @@ var/mob/living/basic/bot/bot_pawn = pawn bot_pawn.bot_reset() -/datum/ai_controller/basic_controller/bot/able_to_run() +/datum/ai_controller/basic_controller/bot/setup_able_to_run() + . = ..() + RegisterSignal(pawn, COMSIG_BOT_MODE_FLAGS_SET, PROC_REF(update_able_to_run)) + +/datum/ai_controller/basic_controller/bot/clear_able_to_run() + UnregisterSignal(pawn, list(COMSIG_BOT_MODE_FLAGS_SET)) + return ..() + +/datum/ai_controller/basic_controller/bot/get_able_to_run() var/mob/living/basic/bot/bot_pawn = pawn if(!(bot_pawn.bot_mode_flags & BOT_MODE_ON)) return FALSE @@ -67,7 +81,7 @@ /datum/ai_controller/basic_controller/bot/proc/reset_bot() SIGNAL_HANDLER - + CancelActions() if(!length(reset_keys)) return for(var/key in reset_keys) @@ -122,7 +136,6 @@ return if(controller.blackboard_key_exists(BB_BEACON_TARGET)) - bot_pawn.update_bot_mode(new_mode = BOT_PATROL) controller.queue_behavior(travel_behavior, BB_BEACON_TARGET) return @@ -187,8 +200,6 @@ /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 diff --git a/code/modules/mob/living/basic/bots/bot_hud.dm b/code/modules/mob/living/basic/bots/bot_hud.dm index 61aee9f10b180..6cb3f6bcd01b0 100644 --- a/code/modules/mob/living/basic/bots/bot_hud.dm +++ b/code/modules/mob/living/basic/bots/bot_hud.dm @@ -1,13 +1,13 @@ /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.pixel_y = icon_image.Height() - ICON_SIZE_Y 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 + holder.pixel_y = our_icon.Height() - ICON_SIZE_Y if(bot_mode_flags & BOT_MODE_ON) holder.icon_state = "hudstat" return @@ -19,7 +19,7 @@ /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 + holder.pixel_y = icon_image.Height() - ICON_SIZE_Y if(client) //If the bot is player controlled, it will not be following mode logic! holder.icon_state = "hudsentient" return @@ -47,12 +47,14 @@ if(isnull(ai_controller)) return + //Removes path images and handles removing hud client images clear_path_hud() + var/list/path_huds_watching_me = list(GLOB.huds[DATA_HUD_DIAGNOSTIC], GLOB.huds[DATA_HUD_BOT_PATH]) + 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], GLOB.huds[DATA_HUD_BOT_PATH]) var/atom/move_target = ai_controller.current_movement_target if(move_target != ai_controller.blackboard[BB_BEACON_TARGET]) @@ -62,9 +64,6 @@ 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 @@ -75,7 +74,9 @@ 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) + var/image/path_display = image(icon = path_image_icon, loc = current_turf, icon_state = path_image_icon_state, layer = BOT_PATH_LAYER, dir = next_direction) + + SET_PLANE(path_display, GAME_PLANE, current_turf) if((ISDIAGONALDIR(next_direction) && (previous_direction & (NORTH|SOUTH)))) var/turn_value = (next_direction == SOUTHWEST || next_direction == NORTHEAST) ? 90 : -90 @@ -118,3 +119,8 @@ animate(our_image, alpha = 0, time = 0.3 SECONDS) current_pathed_turfs -= index + // Call hud remove handlers to ensure viewing user client images are removed + var/list/path_huds_watching_me = list(GLOB.huds[DATA_HUD_DIAGNOSTIC], GLOB.huds[DATA_HUD_BOT_PATH]) + for(var/datum/atom_hud/hud as anything in path_huds_watching_me) + hud.remove_atom_from_hud(src) + diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm index cd30dd4057d0e..1e2bfdb732b16 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm @@ -239,7 +239,8 @@ // 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_COVER_LOCKED) && !HAS_SILICON_ACCESS(ui.user)) + var/mob/user = ui.user + if(. || (bot_access_flags & BOT_COVER_LOCKED) && !HAS_SILICON_ACCESS(user)) return switch(action) diff --git a/code/modules/mob/living/basic/bots/dedbot.dm b/code/modules/mob/living/basic/bots/dedbot.dm index bf48ac93c3b57..0dd5bff9a7c66 100644 --- a/code/modules/mob/living/basic/bots/dedbot.dm +++ b/code/modules/mob/living/basic/bots/dedbot.dm @@ -21,7 +21,7 @@ sharpness = SHARP_EDGED attack_verb_continuous = "eviscerates" attack_verb_simple = "eviscerate" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH gold_core_spawnable = HOSTILE_SPAWN limb_destroyer = TRUE @@ -103,7 +103,7 @@ return FALSE caster.Shake(1.4, 0.8, 0.3 SECONDS) caster.visible_message(span_danger("[caster] shakes violently!")) - playsound(caster, 'sound/weapons/drill.ogg', 120 , TRUE) + playsound(caster, 'sound/items/weapons/drill.ogg', 120 , TRUE) slash_em(caster) StartCooldown(cooldown_time) diff --git a/code/modules/mob/living/basic/bots/firebot/firebot.dm b/code/modules/mob/living/basic/bots/firebot/firebot.dm index e6eeaa2031cc6..1db37c6340bff 100644 --- a/code/modules/mob/living/basic/bots/firebot/firebot.dm +++ b/code/modules/mob/living/basic/bots/firebot/firebot.dm @@ -29,20 +29,20 @@ /mob/living/basic/bot/firebot/generate_speak_list() var/static/list/idle_lines = list( - FIREBOT_VOICED_NO_FIRES = 'sound/voice/firebot/nofires.ogg', - FIREBOT_VOICED_ONLY_YOU = 'sound/voice/firebot/onlyyou.ogg', - FIREBOT_VOICED_TEMPERATURE_NOMINAL = 'sound/voice/firebot/tempnominal.ogg', - FIREBOT_VOICED_KEEP_COOL = 'sound/voice/firebot/keepitcool.ogg', + FIREBOT_VOICED_NO_FIRES = 'sound/mobs/non-humanoids/firebot/nofires.ogg', + FIREBOT_VOICED_ONLY_YOU = 'sound/mobs/non-humanoids/firebot/onlyyou.ogg', + FIREBOT_VOICED_TEMPERATURE_NOMINAL = 'sound/mobs/non-humanoids/firebot/tempnominal.ogg', + FIREBOT_VOICED_KEEP_COOL = 'sound/mobs/non-humanoids/firebot/keepitcool.ogg', ) var/static/list/fire_detected_lines = list( - FIREBOT_VOICED_FIRE_DETECTED = 'sound/voice/firebot/detected.ogg', - FIREBOT_VOICED_STOP_DROP = 'sound/voice/firebot/stopdropnroll.ogg', - FIREBOT_VOICED_EXTINGUISHING = 'sound/voice/firebot/extinguishing.ogg', + FIREBOT_VOICED_FIRE_DETECTED = 'sound/mobs/non-humanoids/firebot/detected.ogg', + FIREBOT_VOICED_STOP_DROP = 'sound/mobs/non-humanoids/firebot/stopdropnroll.ogg', + FIREBOT_VOICED_EXTINGUISHING = 'sound/mobs/non-humanoids/firebot/extinguishing.ogg', ) var/static/list/emagged_lines = list( - FIREBOT_VOICED_CANDLE_TIP = 'sound/voice/firebot/candle_tip.ogg', - FIREBOT_VOICED_ELECTRIC_FIRE = 'sound/voice/firebot/electric_fire_tip.ogg', - FIREBOT_VOICED_FUEL_TIP = 'sound/voice/firebot/gasoline_tip.ogg' + FIREBOT_VOICED_CANDLE_TIP = 'sound/mobs/non-humanoids/firebot/candle_tip.ogg', + FIREBOT_VOICED_ELECTRIC_FIRE = 'sound/mobs/non-humanoids/firebot/electric_fire_tip.ogg', + FIREBOT_VOICED_FUEL_TIP = 'sound/mobs/non-humanoids/firebot/gasoline_tip.ogg' ) ai_controller.set_blackboard_key(BB_FIREBOT_EMAGGED_LINES, emagged_lines) ai_controller.set_blackboard_key(BB_FIREBOT_IDLE_LINES, idle_lines) @@ -112,9 +112,10 @@ return data // Actions received from TGUI -/mob/living/basic/bot/firebot/ui_act(action, params) +/mob/living/basic/bot/firebot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(. || (bot_access_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(usr))) + var/mob/user = ui.user + if(. || (bot_access_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(user))) return switch(action) diff --git a/code/modules/mob/living/basic/bots/honkbots/honkbot.dm b/code/modules/mob/living/basic/bots/honkbots/honkbot.dm index 7f869995c31a3..1fa30063dd581 100644 --- a/code/modules/mob/living/basic/bots/honkbots/honkbot.dm +++ b/code/modules/mob/living/basic/bots/honkbots/honkbot.dm @@ -48,7 +48,7 @@ can_slip_callback = CALLBACK(src, PROC_REF(pre_slip)),\ ) AddComponent(/datum/component/stun_n_cuff,\ - stun_sound = 'sound/items/AirHorn.ogg',\ + stun_sound = 'sound/items/airhorn/AirHorn.ogg',\ post_stun_callback = CALLBACK(src, PROC_REF(post_stun)),\ post_arrest_callback = CALLBACK(src, PROC_REF(post_arrest)),\ handcuff_type = /obj/item/restraints/handcuffs/cable/zipties/fake,\ @@ -88,7 +88,7 @@ /mob/living/basic/bot/honkbot/ui_data(mob/user) var/list/data = ..() - if(!(bot_access_flags & BOT_COVER_LOCKED) || issilicon(user) || isAdminGhostAI(user)) + if(!(bot_access_flags & BOT_COVER_LOCKED) || HAS_SILICON_ACCESS(user)) data["custom_controls"]["slip_people"] = honkbot_flags & HONKBOT_MODE_SLIP data["custom_controls"]["fake_cuff"] = honkbot_flags & HONKBOT_HANDCUFF_TARGET data["custom_controls"]["check_ids"] = honkbot_flags & HONKBOT_CHECK_IDS @@ -97,7 +97,8 @@ /mob/living/basic/bot/honkbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(. || !isliving(ui.user) || (bot_access_flags & BOT_COVER_LOCKED) && !(ui.user.has_unlimited_silicon_privilege)) + var/mob/user = ui.user + if(. || !isliving(user) || (bot_access_flags & BOT_COVER_LOCKED) && !HAS_SILICON_ACCESS(user)) return switch(action) if("slip_people") diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm index 4dbd78dcac14a..6100a81279747 100644 --- a/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm +++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm @@ -29,23 +29,23 @@ 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', + HYGIENEBOT_VOICED_UNHYGIENIC = 'sound/mobs/non-humanoids/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', + HYGIENEBOT_VOICED_THREAT_AIRLOCK = 'sound/mobs/non-humanoids/hygienebot/dragyouout.ogg', + HYGIENEBOT_VOICED_FOUL_SMELL = 'sound/mobs/non-humanoids/hygienebot/foulsmelling.ogg', + HYGIENEBOT_VOICED_TROGLODYTE = 'sound/mobs/non-humanoids/hygienebot/troglodyte.ogg', + HYGIENEBOT_VOICED_GREEN_CLOUD = 'sound/mobs/non-humanoids/hygienebot/greencloud.ogg', + HYGIENEBOT_VOICED_ARSEHOLE = 'sound/mobs/non-humanoids/hygienebot/letmeclean.ogg', + HYGIENEBOT_VOICED_THREAT_ARTERIES = 'sound/mobs/non-humanoids/hygienebot/cutarteries.ogg', + HYGIENEBOT_VOICED_STOP_RUNNING = 'sound/mobs/non-humanoids/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', + HYGIENEBOT_VOICED_FUCKING_FINALLY = 'sound/mobs/non-humanoids/hygienebot/finally.ogg', + HYGIENEBOT_VOICED_THANK_GOD = 'sound/mobs/non-humanoids/hygienebot/thankgod.ogg', + HYGIENEBOT_VOICED_DEGENERATE = 'sound/mobs/non-humanoids/hygienebot/degenerate.ogg', ) /mob/living/basic/bot/hygienebot/Initialize(mapload) diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm index 2c614e003c8ab..f678843c7ccb9 100644 --- a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm +++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm @@ -12,6 +12,7 @@ planning_subtrees = list( /datum/ai_planning_subtree/manage_unreachable_list, /datum/ai_planning_subtree/respond_to_summon, + /datum/ai_planning_subtree/handle_trash_talk, /datum/ai_planning_subtree/wash_people, /datum/ai_planning_subtree/salute_authority, /datum/ai_planning_subtree/find_patrol_beacon, @@ -23,16 +24,27 @@ BB_BOT_SUMMON_TARGET, ) -/datum/ai_controller/basic_controller/bot/hygienebot/TryPossessPawn(atom/new_pawn) - . = ..() - if(. & AI_CONTROLLER_INCOMPATIBLE) +/datum/ai_planning_subtree/handle_trash_talk + +/datum/ai_planning_subtree/handle_trash_talk/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) + if(!controller.blackboard_key_exists(BB_WASH_TARGET)) return - RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_CLEARED(BB_WASH_TARGET), PROC_REF(reset_anger)) + controller.queue_behavior(/datum/ai_behavior/commence_trashtalk, BB_WASH_TARGET) -/datum/ai_controller/basic_controller/bot/hygienebot/proc/reset_anger() - SIGNAL_HANDLER +/datum/ai_behavior/commence_trashtalk + action_cooldown = 4 SECONDS - set_blackboard_key(BB_WASH_FRUSTRATION, 0) +/datum/ai_behavior/commence_trashtalk/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + if(!controller.blackboard_key_exists(target_key)) + return AI_BEHAVIOR_FAILED | AI_BEHAVIOR_DELAY + + var/frustration_count = controller.blackboard[BB_WASH_FRUSTRATION] + controller.set_blackboard_key(BB_WASH_FRUSTRATION, min(frustration_count + 1, BOT_FRUSTRATION_LIMIT)) + if(controller.blackboard[BB_WASH_FRUSTRATION] < BOT_ANGER_THRESHOLD) + return AI_BEHAVIOR_FAILED | AI_BEHAVIOR_DELAY + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] + announcement?.announce(pick(controller.blackboard[BB_WASH_THREATS])) + return AI_BEHAVIOR_SUCCEEDED | AI_BEHAVIOR_DELAY /datum/ai_planning_subtree/wash_people @@ -85,8 +97,6 @@ controller.set_blackboard_key(target_key, found_target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED - - /datum/ai_behavior/find_valid_wash_targets/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() if(!succeeded) @@ -95,9 +105,8 @@ 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 + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION required_distance = 0 - action_cooldown = 1 SECONDS /datum/ai_behavior/wash_target/setup(datum/ai_controller/controller, target_key) . = ..() @@ -117,25 +126,17 @@ living_pawn.melee_attack(unclean_target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED - var/frustration_count = controller.blackboard[BB_WASH_FRUSTRATION] - controller.set_blackboard_key(BB_WASH_FRUSTRATION, frustration_count + 1) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /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) + controller.clear_blackboard_key(target_key) + var/wash_frustration = controller.blackboard[BB_WASH_FRUSTRATION] + controller.clear_blackboard_key(BB_WASH_FRUSTRATION) + if(!succeeded || wash_frustration <= BOT_ANGER_THRESHOLD) 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) + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] + announcement.announce(pick(controller.blackboard[BB_WASH_DONE])) #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 index 269505fb8c877..b6dcb572a5c0a 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot.dm @@ -29,66 +29,66 @@ ///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', + MEDIBOT_VOICED_HOLD_ON = 'sound/mobs/non-humanoids/medbot/coming.ogg', + MEDIBOT_VOICED_WANT_TO_HELP = 'sound/mobs/non-humanoids/medbot/help.ogg', + MEDIBOT_VOICED_YOU_ARE_INJURED = 'sound/mobs/non-humanoids/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', + MEDIBOT_VOICED_ALL_PATCHED_UP = 'sound/mobs/non-humanoids/medbot/patchedup.ogg', + MEDIBOT_VOICED_APPLE_A_DAY = 'sound/mobs/non-humanoids/medbot/apple.ogg', + MEDIBOT_VOICED_FEEL_BETTER = 'sound/mobs/non-humanoids/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', + MEDIBOT_VOICED_STAY_WITH_ME = 'sound/mobs/non-humanoids/medbot/no.ogg', + MEDIBOT_VOICED_LIVE = 'sound/mobs/non-humanoids/medbot/live.ogg', + MEDIBOT_VOICED_NEVER_LOST = 'sound/mobs/non-humanoids/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', + MEDIBOT_VOICED_DELICIOUS = 'sound/mobs/non-humanoids/medbot/delicious.ogg', + MEDIBOT_VOICED_PLASTIC_SURGEON = 'sound/mobs/non-humanoids/medbot/surgeon.ogg', + MEDIBOT_VOICED_MASK_ON = 'sound/mobs/non-humanoids/medbot/radar.ogg', + MEDIBOT_VOICED_ALWAYS_A_CATCH = 'sound/mobs/non-humanoids/medbot/catch.ogg', + MEDIBOT_VOICED_LIKE_FLIES = 'sound/mobs/non-humanoids/medbot/flies.ogg', + MEDIBOT_VOICED_SUFFER = 'sound/mobs/non-humanoids/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', + MEDIBOT_VOICED_FUCK_YOU = 'sound/mobs/non-humanoids/medbot/fuck_you.ogg', + MEDIBOT_VOICED_NOT_A_GAME = 'sound/mobs/non-humanoids/medbot/turn_off.ogg', + MEDIBOT_VOICED_IM_DIFFERENT = 'sound/mobs/non-humanoids/medbot/im_different.ogg', + MEDIBOT_VOICED_FOURTH_WALL = 'sound/mobs/non-humanoids/medbot/close.ogg', + MEDIBOT_VOICED_SHINDEMASHOU = 'sound/mobs/non-humanoids/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', + MEDIBOT_VOICED_WAIT = 'sound/mobs/non-humanoids/medbot/hey_wait.ogg', + MEDIBOT_VOICED_DONT = 'sound/mobs/non-humanoids/medbot/please_dont.ogg', + MEDIBOT_VOICED_TRUSTED_YOU = 'sound/mobs/non-humanoids/medbot/i_trusted_you.ogg', + MEDIBOT_VOICED_NO_SAD = 'sound/mobs/non-humanoids/medbot/nooo.ogg', + MEDIBOT_VOICED_OH_FUCK = 'sound/mobs/non-humanoids/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', + MEDIBOT_VOICED_FORGIVE = 'sound/mobs/non-humanoids/medbot/forgive.ogg', + MEDIBOT_VOICED_THANKS = 'sound/mobs/non-humanoids/medbot/thank_you.ogg', + MEDIBOT_VOICED_GOOD_PERSON = 'sound/mobs/non-humanoids/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', + MEDIBOT_VOICED_PUT_BACK = 'sound/mobs/non-humanoids/medbot/please_put_me_back.ogg', + MEDIBOT_VOICED_IM_SCARED = 'sound/mobs/non-humanoids/medbot/please_im_scared.ogg', + MEDIBOT_VOICED_NEED_HELP = 'sound/mobs/non-humanoids/medbot/dont_like.ogg', + MEDIBOT_VOICED_THIS_HURTS = 'sound/mobs/non-humanoids/medbot/pain_is_real.ogg', + MEDIBOT_VOICED_THE_END = 'sound/mobs/non-humanoids/medbot/is_this_the_end.ogg', + MEDIBOT_VOICED_NOOO = 'sound/mobs/non-humanoids/medbot/nooo.ogg', ) var/static/list/misc_announcements= list( - MEDIBOT_VOICED_CHICKEN = 'sound/voice/medbot/i_am_chicken.ogg', + MEDIBOT_VOICED_CHICKEN = 'sound/mobs/non-humanoids/medbot/i_am_chicken.ogg', ) /// drop determining variable var/health_analyzer = /obj/item/healthanalyzer @@ -210,9 +210,9 @@ // 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_COVER_LOCKED) && !HAS_SILICON_ACCESS(ui.user)) + var/mob/user = ui.user + if(. || !isliving(ui.user) || (bot_access_flags & BOT_COVER_LOCKED) && !HAS_SILICON_ACCESS(user)) return - var/mob/living/our_user = ui.user switch(action) if("heal_threshold") var/adjust_num = round(text2num(params["threshold"])) @@ -229,7 +229,7 @@ medical_mode_flags ^= MEDBOT_STATIONARY_MODE if("sync_tech") if(!linked_techweb) - to_chat(our_user, span_notice("No research techweb connected.")) + to_chat(user, span_notice("No research techweb connected.")) return var/oldheal_amount = heal_amount var/tech_boosters @@ -336,7 +336,7 @@ 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)) //SKYRAT 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)) + if(!do_after(src, delay = 2 SECONDS, target = patient, interaction_key = TEND_DAMAGE_INTERACTION)) update_bot_mode(new_mode = BOT_IDLE) return var/modified_heal_amount = heal_amount diff --git a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm index f0b2f089cb6e7..81680380d109b 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm @@ -56,6 +56,10 @@ 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)) + // BUBBER EDIT ADDITION START - Don't hunt down synthetics + if(treatable_target.mob_biotypes & MOB_ROBOTIC) + continue + // BUBBER EDIT ADDITION END if(LAZYACCESS(ignore_keys, treatable_target) || treatable_target.stat == DEAD) continue if((access_flags & BOT_COVER_EMAGGED) && treatable_target.stat == CONSCIOUS) diff --git a/code/modules/mob/living/basic/clown/clown.dm b/code/modules/mob/living/basic/clown/clown.dm index 9e8f6950525a7..3fd2328458293 100644 --- a/code/modules/mob/living/basic/clown/clown.dm +++ b/code/modules/mob/living/basic/clown/clown.dm @@ -247,7 +247,7 @@ armour_penetration = 20 attack_verb_continuous = "steals the girlfriend of" attack_verb_simple = "steal the girlfriend of" - attack_sound = 'sound/items/airhorn2.ogg' + attack_sound = 'sound/items/airhorn/airhorn2.ogg' loot = list( /obj/effect/gibspawner/human, /obj/effect/spawner/foam_starter/small, @@ -584,7 +584,7 @@ var/peels_to_spawn = min(peel_amount, reachable_turfs.len) for(var/i in 1 to peels_to_spawn) new banana_type(pick_n_take(reachable_turfs)) - playsound(owner, 'sound/creatures/clown/clownana_rustle.ogg', 60) + playsound(owner, 'sound/mobs/non-humanoids/clown/clownana_rustle.ogg', 60) animate(owner, time = 1, pixel_x = 6, easing = CUBIC_EASING | EASE_OUT) animate(time = 2, pixel_x = -8, easing = CUBIC_EASING) animate(time = 1, pixel_x = 0, easing = CUBIC_EASING | EASE_IN) @@ -615,7 +615,7 @@ if(!do_after(owner, 1 SECONDS)) activating = FALSE return - playsound(owner, 'sound/creatures/clown/hehe.ogg', 100) + playsound(owner, 'sound/mobs/non-humanoids/clown/hehe.ogg', 100) if(!do_after(owner, 1 SECONDS)) activating = FALSE return @@ -626,5 +626,5 @@ . = ..() new /obj/item/food/grown/banana/bunch(get_step(owner.loc, owner.dir)) playsound(owner, 'sound/items/bikehorn.ogg', 60) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), owner, 'sound/creatures/clown/hohoho.ogg', 100, 1), 1 SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), owner, 'sound/mobs/non-humanoids/clown/hohoho.ogg', 100, 1), 1 SECONDS) StartCooldown() diff --git a/code/modules/mob/living/basic/cult/constructs/_construct.dm b/code/modules/mob/living/basic/cult/constructs/_construct.dm index 1c5e91b50c263..01004685607a0 100644 --- a/code/modules/mob/living/basic/cult/constructs/_construct.dm +++ b/code/modules/mob/living/basic/cult/constructs/_construct.dm @@ -106,7 +106,7 @@ return FALSE to_chat(src, span_bold(playstyle_string)) -/mob/living/basic/construct/examine(mob/user) +/mob/living/basic/construct/get_examine_name(mob/user) var/text_span switch(theme) if(THEME_CULT) @@ -115,13 +115,20 @@ text_span = "purple" if(THEME_HOLY) text_span = "blue" - . = list("This is [icon2html(src, user)] \a [src]!\n[desc]") + + if(!text_span) + return ..() + + return "[..()]" + +/mob/living/basic/construct/examine(mob/user) + . = list() if(health < maxHealth) if(health >= maxHealth/2) . += span_warning("[p_They()] look[p_s()] slightly dented.") else . += span_warning(span_bold("[p_They()] look[p_s()] severely dented!")) - . += "" + return . /mob/living/basic/construct/narsie_act() diff --git a/code/modules/mob/living/basic/cult/constructs/artificer.dm b/code/modules/mob/living/basic/cult/constructs/artificer.dm index 8856c0e66a2ad..1d66f193ebc29 100644 --- a/code/modules/mob/living/basic/cult/constructs/artificer.dm +++ b/code/modules/mob/living/basic/cult/constructs/artificer.dm @@ -13,7 +13,7 @@ melee_damage_upper = 5 attack_verb_continuous = "rams" attack_verb_simple = "ram" - attack_sound = 'sound/weapons/punch2.ogg' + attack_sound = 'sound/items/weapons/punch2.ogg' construct_spells = list( /datum/action/cooldown/spell/aoe/magic_missile/lesser, /datum/action/cooldown/spell/conjure/construct/lesser, diff --git a/code/modules/mob/living/basic/cult/constructs/harvester.dm b/code/modules/mob/living/basic/cult/constructs/harvester.dm index b48a26b681937..95a5956825421 100644 --- a/code/modules/mob/living/basic/cult/constructs/harvester.dm +++ b/code/modules/mob/living/basic/cult/constructs/harvester.dm @@ -11,7 +11,7 @@ melee_damage_upper = 20 attack_verb_continuous = "butchers" attack_verb_simple = "butcher" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH construct_spells = list( /datum/action/cooldown/spell/aoe/area_conversion, diff --git a/code/modules/mob/living/basic/cult/constructs/juggernaut.dm b/code/modules/mob/living/basic/cult/constructs/juggernaut.dm index ef972d2b91693..5d5ae8c645499 100644 --- a/code/modules/mob/living/basic/cult/constructs/juggernaut.dm +++ b/code/modules/mob/living/basic/cult/constructs/juggernaut.dm @@ -14,7 +14,7 @@ attack_verb_continuous = "smashes their armored gauntlet into" attack_verb_simple = "smash your armored gauntlet into" speed = 2.5 - attack_sound = 'sound/weapons/punch3.ogg' + attack_sound = 'sound/items/weapons/punch3.ogg' status_flags = NONE mob_size = MOB_SIZE_LARGE construct_spells = list( diff --git a/code/modules/mob/living/basic/cult/constructs/proteon.dm b/code/modules/mob/living/basic/cult/constructs/proteon.dm index 2ff58d2463c0b..c39af7831fe8b 100644 --- a/code/modules/mob/living/basic/cult/constructs/proteon.dm +++ b/code/modules/mob/living/basic/cult/constructs/proteon.dm @@ -12,7 +12,7 @@ attack_verb_continuous = "pinches" attack_verb_simple = "pinch" smashes_walls = TRUE - attack_sound = 'sound/weapons/punch2.ogg' + attack_sound = 'sound/items/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 diff --git a/code/modules/mob/living/basic/cult/constructs/wraith.dm b/code/modules/mob/living/basic/cult/constructs/wraith.dm index 06a09b6446ed3..4a41bc1cc2aa7 100644 --- a/code/modules/mob/living/basic/cult/constructs/wraith.dm +++ b/code/modules/mob/living/basic/cult/constructs/wraith.dm @@ -10,7 +10,7 @@ melee_damage_upper = 20 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH construct_spells = list( /datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift, diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index 81acb7ee3f3e8..0047058ceaf56 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -37,7 +37,6 @@ bubble_icon = "machine" 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, STAMINA = 0, OXY = 0) hud_possible = list(DIAG_STAT_HUD, DIAG_HUD, ANTAG_HUD) unique_name = TRUE @@ -202,7 +201,16 @@ for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) diag_hud.add_atom_to_hud(src) - add_traits(list(TRAIT_VENTCRAWLER_ALWAYS, TRAIT_NEGATES_GRAVITY, TRAIT_LITERATE, TRAIT_KNOW_ENGI_WIRES, TRAIT_ADVANCEDTOOLUSER), INNATE_TRAIT) + add_traits(list( + TRAIT_VENTCRAWLER_ALWAYS, + TRAIT_NEGATES_GRAVITY, + TRAIT_LITERATE, + TRAIT_KNOW_ENGI_WIRES, + TRAIT_ADVANCEDTOOLUSER, + TRAIT_SILICON_ACCESS, + TRAIT_REAGENT_SCANNER, + TRAIT_UNOBSERVANT, + ), INNATE_TRAIT) listener = new(list(ALARM_ATMOS, ALARM_FIRE, ALARM_POWER), list(z)) RegisterSignal(listener, COMSIG_ALARM_LISTENER_TRIGGERED, PROC_REF(alarm_triggered)) @@ -213,16 +221,16 @@ /mob/living/basic/drone/med_hud_set_health() var/image/holder = hud_list[DIAG_HUD] var/icon/hud_icon = icon(icon, icon_state, dir) - holder.pixel_y = hud_icon.Height() - world.icon_size + holder.pixel_y = hud_icon.Height() - ICON_SIZE_Y holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" /mob/living/basic/drone/med_hud_set_status() var/image/holder = hud_list[DIAG_STAT_HUD] var/icon/hud_icon = icon(icon, icon_state, dir) - holder.pixel_y = hud_icon.Height() - world.icon_size + holder.pixel_y = hud_icon.Height() - ICON_SIZE_Y if(stat == DEAD) holder.icon_state = "huddead2" - else if(incapacitated()) + else if(incapacitated) holder.icon_state = "hudoffline" else holder.icon_state = "hudstat" @@ -268,21 +276,21 @@ return icon('icons/mob/butts.dmi', BUTT_SPRITE_DRONE) /mob/living/basic/drone/examine(mob/user) - . = list("This is [icon2html(src, user)] \a [src]!", EXAMINE_SECTION_BREAK) //SKYRAT EDIT CHANGE + . = list() //Hands for(var/obj/item/held_thing in held_items) if(held_thing.item_flags & (ABSTRACT|EXAMINE_SKIP|HAND_ITEM)) continue - . += "It has [held_thing.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(held_thing))]." + . += "It has [held_thing.examine_title(user)] in its [get_held_index_name(get_held_index_of_item(held_thing))]." //Internal storage if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) - . += "It is holding [internal_storage.get_examine_string(user)] in its internal storage." + . += "It is holding [internal_storage.examine_title(user)] in its internal storage." //Cosmetic hat - provides no function other than looks if(head && !(head.item_flags & ABSTRACT)) - . += "It is wearing [head.get_examine_string(user)] on its head." + . += "It is wearing [head.examine_title(user)] on its head." //Braindead if(!client && stat != DEAD) @@ -305,8 +313,6 @@ . += span_deadsay("A message repeatedly flashes on its display: \"REBOOT -- REQUIRED\".") else . += span_deadsay("A message repeatedly flashes on its display: \"ERROR -- OFFLINE\".") - . += "" - /mob/living/basic/drone/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //Secbots won't hunt maintenance drones. return -10 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 08c9278b75331..402aca848de8c 100644 --- a/code/modules/mob/living/basic/drone/extra_drone_types.dm +++ b/code/modules/mob/living/basic/drone/extra_drone_types.dm @@ -126,7 +126,7 @@ " - Going to the main station in search of materials.\n"+\ " - Interacting with non-drone players outside KS13, 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." + span_warning("If you do not have the regular drone laws, follow your laws to the best of your ability.") shy = FALSE /mob/living/basic/drone/derelict/Initialize(mapload) diff --git a/code/modules/mob/living/basic/drone/interaction.dm b/code/modules/mob/living/basic/drone/interaction.dm index 0b0247c1c45f3..58b7cd88ef287 100644 --- a/code/modules/mob/living/basic/drone/interaction.dm +++ b/code/modules/mob/living/basic/drone/interaction.dm @@ -32,7 +32,7 @@ return ..() /mob/living/basic/drone/mob_try_pickup(mob/living/user, instant=FALSE) - if(stat == DEAD || status_flags & GODMODE) + if(stat == DEAD || HAS_TRAIT(src, TRAIT_GODMODE)) return return ..() diff --git a/code/modules/mob/living/basic/drone/visuals_icons.dm b/code/modules/mob/living/basic/drone/visuals_icons.dm index 7a2122022f81b..32ff97da305a1 100644 --- a/code/modules/mob/living/basic/drone/visuals_icons.dm +++ b/code/modules/mob/living/basic/drone/visuals_icons.dm @@ -108,7 +108,7 @@ /mob/living/basic/drone/proc/check_menu() if(!istype(src)) return FALSE - if(incapacitated()) + if(incapacitated) return FALSE return TRUE 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 b4d73ad59273a..77fa9ce8ca088 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 @@ -26,14 +26,12 @@ /datum/ai_behavior/enter_exit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) var/obj/structure/beebox/current_home = controller.blackboard[target_key] - var/mob/living/bee_pawn = controller.pawn var/atom/attack_target = controller.blackboard[attack_key] if(attack_target) // forget about who we attacking when we go home controller.clear_blackboard_key(attack_key) - var/datum/callback/callback = CALLBACK(bee_pawn, TYPE_PROC_REF(/mob/living/basic/bee, handle_habitation), current_home) - callback.Invoke() + controller.ai_interact(target = current_home, combat_mode = FALSE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/inhabit_hive @@ -53,8 +51,7 @@ if(!potential_home.habitable(bee_pawn)) //the house become full before we get to it return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/datum/callback/callback = CALLBACK(bee_pawn, TYPE_PROC_REF(/mob/living/basic/bee, handle_habitation), potential_home) - callback.Invoke() + controller.ai_interact(target = potential_home, combat_mode = FALSE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/inhabit_hive/finish_action(datum/ai_controller/controller, succeeded, target_key) 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 66191c92516f2..fadac576ea599 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/_cow.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/_cow.dm @@ -20,7 +20,7 @@ response_harm_simple = "kick" attack_verb_continuous = "kicks" attack_verb_simple = "kick" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' attack_vis_effect = ATTACK_EFFECT_KICK health = 50 maxHealth = 50 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 dc3e09e38f211..47f11a02839e4 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 @@ -15,7 +15,7 @@ attack_verb_continuous = "telekinetically rams its moonihorn into" attack_verb_simple = "telekinetically ram your moonihorn into" gold_core_spawnable = NO_SPAWN - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH ai_controller = /datum/ai_controller/basic_controller/cow/moonicorn food_types = list(/obj/item/food/grown/galaxythistle) diff --git a/code/modules/mob/living/basic/farm_animals/deer.dm b/code/modules/mob/living/basic/farm_animals/deer/deer.dm similarity index 72% rename from code/modules/mob/living/basic/farm_animals/deer.dm rename to code/modules/mob/living/basic/farm_animals/deer/deer.dm index c51be81b77d04..dc27c82dd82f5 100644 --- a/code/modules/mob/living/basic/farm_animals/deer.dm +++ b/code/modules/mob/living/basic/farm_animals/deer/deer.dm @@ -16,7 +16,7 @@ response_harm_simple = "kick" attack_verb_continuous = "bucks" attack_verb_simple = "buck" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' health = 75 maxHealth = 75 blood_volume = BLOOD_VOLUME_NORMAL @@ -24,28 +24,16 @@ /// Things that will scare us into being stationary. Vehicles are scary to deers because they might have headlights. var/static/list/stationary_scary_things = list(/obj/vehicle) + /mob/living/basic/deer/Initialize(mapload) . = ..() + AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_SHOE) 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, typecacheof(stationary_scary_things)) -/datum/ai_controller/basic_controller/deer - blackboard = list( - BB_STATIONARY_MOVE_TO_TARGET = TRUE, - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, - ) - ai_traits = STOP_MOVING_WHEN_PULLED - ai_movement = /datum/ai_movement/basic_avoidance - idle_behavior = /datum/idle_behavior/idle_random_walk - planning_subtrees = list( - /datum/ai_planning_subtree/random_speech/deer, - /datum/ai_planning_subtree/stare_at_thing, - /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, - /datum/ai_planning_subtree/flee_target, - ) /// Cold resistent and doesn't need to breathe /mob/living/basic/deer/ice diff --git a/code/modules/mob/living/basic/farm_animals/deer/deer_ai.dm b/code/modules/mob/living/basic/farm_animals/deer/deer_ai.dm new file mode 100644 index 0000000000000..f17e0c9014fba --- /dev/null +++ b/code/modules/mob/living/basic/farm_animals/deer/deer_ai.dm @@ -0,0 +1,156 @@ +/datum/ai_controller/basic_controller/deer + blackboard = list( + BB_STATIONARY_MOVE_TO_TARGET = TRUE, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/deer, + /datum/ai_planning_subtree/stare_at_thing, + /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/rest_at_home, + /datum/ai_planning_subtree/play_with_friends, + /datum/ai_planning_subtree/find_and_hunt_target/mark_territory, + /datum/ai_planning_subtree/find_and_hunt_target/graze, + /datum/ai_planning_subtree/find_and_hunt_target/drink_water, + ) + + +///subtree to go around drinking water +/datum/ai_planning_subtree/find_and_hunt_target/drink_water + target_key = BB_DEER_WATER_TARGET + finding_behavior = /datum/ai_behavior/find_and_set/in_list/turf_types + hunting_behavior = /datum/ai_behavior/hunt_target/drink_water + hunt_targets = list(/turf/open/water) + hunt_range = 7 + hunt_chance = 5 + + +/datum/ai_behavior/hunt_target/drink_water + always_reset_target = TRUE + hunt_cooldown = 20 SECONDS + + +/datum/ai_behavior/hunt_target/drink_water/target_caught(mob/living/hunter, atom/hunted) + var/static/list/possible_emotes = list("drinks the water!", "dances in the water!", "splashes around happily!") + hunter.manual_emote(pick(possible_emotes)) + + +///subtree to go around grazing +/datum/ai_planning_subtree/find_and_hunt_target/graze + target_key = BB_DEER_GRASS_TARGET + finding_behavior = /datum/ai_behavior/find_and_set/in_list/turf_types + hunting_behavior = /datum/ai_behavior/hunt_target/eat_grass + hunt_targets = list(/turf/open/floor/grass) + hunt_range = 7 + hunt_chance = 45 + + +/datum/ai_behavior/hunt_target/eat_grass + always_reset_target = TRUE + hunt_cooldown = 15 SECONDS + + +/datum/ai_behavior/hunt_target/eat_grass/target_caught(mob/living/hunter, atom/hunted) + var/static/list/possible_emotes = list("eats the grass!", "munches down the grass!", "chews on the grass!") + hunter.manual_emote(pick(possible_emotes)) + + +///subtree to go around playing with other deers +/datum/ai_planning_subtree/play_with_friends + + +/datum/ai_planning_subtree/play_with_friends/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/static/list/emote_list = list("plays with", "dances with", "celebrates with") + var/static/list/friend_types = typecacheof(list(/mob/living/basic/deer)) + if(controller.blackboard_key_exists(BB_DEER_PLAYFRIEND)) + controller.queue_behavior(/datum/ai_behavior/emote_on_target, BB_DEER_PLAYFRIEND, emote_list) + if(SPT_PROB(3, seconds_per_tick)) + controller.queue_behavior(/datum/ai_behavior/find_hunt_target/valid_deer, BB_DEER_PLAYFRIEND, friend_types) + return SUBTREE_RETURN_FINISH_PLANNING + + +/datum/ai_behavior/emote_on_target/deer_play + + +/datum/ai_behavior/emote_on_target/deer_play/run_emote(mob/living/living_pawn, atom/target, list/emote_list) + . = ..() + living_pawn.spin(spintime = 4, speed = 1) + + +/datum/ai_behavior/find_hunt_target/valid_deer/valid_dinner(mob/living/source, mob/living/deer, radius, datum/ai_controller/controller, seconds_per_tick) + if(deer.stat == DEAD) + return FALSE + if(!can_see(source, deer, radius)) + return FALSE + deer.ai_controller?.set_blackboard_key(BB_DEER_PLAYFRIEND, source) + return can_see(source, deer, radius) + + +///subtree to mark trees as territories +/datum/ai_planning_subtree/find_and_hunt_target/mark_territory + target_key = BB_DEER_TREE_TARGET + finding_behavior = /datum/ai_behavior/find_hunt_target + hunting_behavior = /datum/ai_behavior/hunt_target/mark_territory + hunt_targets = list(/obj/structure/flora/tree) + hunt_range = 7 + hunt_chance = 75 + + +/datum/ai_behavior/hunt_target/mark_territory + always_reset_target = TRUE + hunt_cooldown = 15 SECONDS + + +/datum/ai_behavior/hunt_target/mark_territory/target_caught(mob/living/hunter, atom/hunted) + hunter.manual_emote("marks [hunted] with its hooves!") + hunter.ai_controller.set_blackboard_key(BB_DEER_TREEHOME, hunted) + + +/datum/ai_planning_subtree/find_and_hunt_target/mark_territory/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(controller.blackboard_key_exists(BB_DEER_TREEHOME)) //already found our home, abort! + return + return ..() + + +/datum/ai_planning_subtree/rest_at_home/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(controller.blackboard[BB_DEER_RESTING] > world.time) //we're resting for now, nothing more to do + return SUBTREE_RETURN_FINISH_PLANNING + if(!controller.blackboard_key_exists(BB_DEER_TREEHOME) || controller.blackboard[BB_DEER_NEXT_REST_TIMER] > world.time) + return + controller.queue_behavior(/datum/ai_behavior/return_home, BB_DEER_TREEHOME) + + +/datum/ai_behavior/return_home + required_distance = 0 + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + ///minimum time till next rest + var/minimum_time = 2 MINUTES + ///maximum time till next rest + var/maximum_time = 4 MINUTES + + +/datum/ai_behavior/return_home/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + var/list/possible_turfs = get_adjacent_open_turfs(target) + shuffle_inplace(possible_turfs) + for(var/turf/possible_turf as anything in possible_turfs) + if(!possible_turf.is_blocked_turf()) + set_movement_target(controller, possible_turf) + return TRUE + return FALSE + + +/datum/ai_behavior/return_home/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/mob/living/living_pawn = controller.pawn + var/static/list/possible_emotes = list("rests its legs...", "yawns and naps...", "curls up and rests...") + living_pawn.manual_emote(pick(possible_emotes)) + controller.set_blackboard_key(BB_DEER_RESTING, world.time + 15 SECONDS) + controller.set_blackboard_key(BB_DEER_NEXT_REST_TIMER, world.time + rand(minimum_time, maximum_time)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED 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 f2354cc5f149a..7b177c5c17d24 100644 --- a/code/modules/mob/living/basic/farm_animals/goat/_goat.dm +++ b/code/modules/mob/living/basic/farm_animals/goat/_goat.dm @@ -15,7 +15,7 @@ response_harm_simple = "kick" attack_verb_continuous = "kicks" attack_verb_simple = "kick" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' attack_vis_effect = ATTACK_EFFECT_KICK butcher_results = list(/obj/item/food/meat/slab/grassfed = 4) 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 d1b1aebf9eb00..b536cb3aebfe6 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm @@ -31,7 +31,7 @@ obj_damage = 40 attack_verb_continuous = "pummels" attack_verb_simple = "pummel" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' unique_name = TRUE ai_controller = /datum/ai_controller/basic_controller/gorilla faction = list(FACTION_MONKEY, FACTION_JUNGLE) @@ -146,10 +146,7 @@ obj_damage = 15 ai_controller = /datum/ai_controller/basic_controller/gorilla/lesser butcher_results = list(/obj/item/food/meat/slab/gorilla = 2) - -/mob/living/basic/gorilla/lesser/Initialize(mapload) - . = ..() - transform *= 0.75 + current_size = 0.75 /// Cargo's wonderful mascot, the tranquil box-carrying ape /mob/living/basic/gorilla/cargorilla @@ -167,4 +164,21 @@ ADD_TRAIT(src, TRAIT_PACIFISM, INNATE_TRAIT) AddComponent(/datum/component/crate_carrier) +/// A version of the gorilla achieved by reaching enough genetic damage as a monkey +/mob/living/basic/gorilla/genetics + name = "Lab Gorilla" + maxHealth = 180 + health = 180 + desc = "A gorilla created via \"advanced genetic science\". While not quite as strong as their wildborne brethren, this simian still packs a punch." + melee_damage_lower = 15 + melee_damage_upper = 18 + obj_damage = 25 + speed = 0.1 + paralyze_chance = 0 + current_size = 0.9 + +/mob/living/basic/gorilla/genetics/Initialize(mapload) + . = ..() + qdel(GetComponent(/datum/component/amputating_limbs)) + #undef GORILLA_HANDS_LAYER diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_emotes.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_emotes.dm index 94133336c4d49..063e6bfb6599a 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_emotes.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_emotes.dm @@ -8,4 +8,4 @@ message = "oogas." message_param = "oogas at %t." emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE - sound = 'sound/creatures/gorilla.ogg' + sound = 'sound/mobs/non-humanoids/gorilla/gorilla.ogg' diff --git a/code/modules/mob/living/basic/farm_animals/pig.dm b/code/modules/mob/living/basic/farm_animals/pig.dm index 6f732f1684479..d0fbb5a82473a 100644 --- a/code/modules/mob/living/basic/farm_animals/pig.dm +++ b/code/modules/mob/living/basic/farm_animals/pig.dm @@ -18,7 +18,7 @@ response_harm_simple = "kick" attack_verb_continuous = "kicks" attack_verb_simple = "kick" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' attack_vis_effect = ATTACK_EFFECT_KICK melee_damage_lower = 1 melee_damage_upper = 2 diff --git a/code/modules/mob/living/basic/farm_animals/pony.dm b/code/modules/mob/living/basic/farm_animals/pony.dm index 9f008d85fcc7a..29672e032c84b 100644 --- a/code/modules/mob/living/basic/farm_animals/pony.dm +++ b/code/modules/mob/living/basic/farm_animals/pony.dm @@ -15,7 +15,7 @@ response_harm_simple = "kick" attack_verb_continuous = "kicks" attack_verb_simple = "kick" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' attack_vis_effect = ATTACK_EFFECT_KICK melee_damage_lower = 5 melee_damage_upper = 10 @@ -46,7 +46,7 @@ /mob/living/basic/pony/tamed(mob/living/tamer, atom/food) can_buckle = TRUE buckle_lying = 0 - playsound(src, 'sound/creatures/pony/snort.ogg', 50) + playsound(src, 'sound/mobs/non-humanoids/pony/snort.ogg', 50) AddElement(/datum/element/ridable, /datum/component/riding/creature/pony) visible_message(span_notice("[src] snorts happily.")) new /obj/effect/temp_visual/heart(loc) @@ -85,9 +85,9 @@ manual_emote("whinnies ANGRILY!") playsound(src, pick(list( - 'sound/creatures/pony/whinny01.ogg', - 'sound/creatures/pony/whinny02.ogg', - 'sound/creatures/pony/whinny03.ogg' + 'sound/mobs/non-humanoids/pony/whinny01.ogg', + 'sound/mobs/non-humanoids/pony/whinny02.ogg', + 'sound/mobs/non-humanoids/pony/whinny03.ogg' )), 50) /mob/living/basic/pony/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) diff --git a/code/modules/mob/living/basic/farm_animals/rabbit.dm b/code/modules/mob/living/basic/farm_animals/rabbit.dm index f77772ab17c7b..dec48ea8be4af 100644 --- a/code/modules/mob/living/basic/farm_animals/rabbit.dm +++ b/code/modules/mob/living/basic/farm_animals/rabbit.dm @@ -26,7 +26,7 @@ response_help_simple = "pet" response_disarm_continuous = "gently pushes aside" response_disarm_simple = "gently push aside" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' attack_vis_effect = ATTACK_EFFECT_KICK response_harm_continuous = "kicks" response_harm_simple = "kick" diff --git a/code/modules/mob/living/basic/farm_animals/sheep.dm b/code/modules/mob/living/basic/farm_animals/sheep.dm index 5617da83a53a5..6fd4c485db79e 100644 --- a/code/modules/mob/living/basic/farm_animals/sheep.dm +++ b/code/modules/mob/living/basic/farm_animals/sheep.dm @@ -18,7 +18,7 @@ response_harm_simple = "kick" attack_verb_continuous = "kicks" attack_verb_simple = "kick" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' attack_vis_effect = ATTACK_EFFECT_KICK health = 50 maxHealth = 50 @@ -40,7 +40,7 @@ item_generation_wait = 3 MINUTES, \ item_reduction_time = 30 SECONDS, \ item_harvest_time = 5 SECONDS, \ - item_harvest_sound = 'sound/surgery/scalpel1.ogg', \ + item_harvest_sound = 'sound/items/handling/surgery/scalpel1.ogg', \ ) AddElement(/datum/element/ai_retaliate) RegisterSignal(src, COMSIG_LIVING_CULT_SACRIFICED, PROC_REF(on_sacrificed)) diff --git a/code/modules/mob/living/basic/festivus_pole.dm b/code/modules/mob/living/basic/festivus_pole.dm index 1c1a88dd31fe5..7ff4ab6c53262 100644 --- a/code/modules/mob/living/basic/festivus_pole.dm +++ b/code/modules/mob/living/basic/festivus_pole.dm @@ -30,7 +30,7 @@ melee_damage_upper = 12 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE faction = list(FACTION_HOSTILE) diff --git a/code/modules/mob/living/basic/guardian/guardian.dm b/code/modules/mob/living/basic/guardian/guardian.dm index b338a5a4435c3..9ddf2c1fc319f 100644 --- a/code/modules/mob/living/basic/guardian/guardian.dm +++ b/code/modules/mob/living/basic/guardian/guardian.dm @@ -31,7 +31,7 @@ response_disarm_simple = "flail at" response_harm_continuous = "punches" response_harm_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' attack_verb_continuous = "punches" attack_verb_simple = "punch" combat_mode = TRUE diff --git a/code/modules/mob/living/basic/guardian/guardian_creator.dm b/code/modules/mob/living/basic/guardian/guardian_creator.dm index 441a60124a7bf..08a28041cc845 100644 --- a/code/modules/mob/living/basic/guardian/guardian_creator.dm +++ b/code/modules/mob/living/basic/guardian/guardian_creator.dm @@ -129,7 +129,7 @@ GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) /obj/item/guardian_creator/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.is_holding(src) || used) + if(user.incapacitated || !user.is_holding(src) || used) return FALSE return TRUE diff --git a/code/modules/mob/living/basic/guardian/guardian_fluff.dm b/code/modules/mob/living/basic/guardian/guardian_fluff.dm index 4ede238921ed3..2b8a8ff8cec31 100644 --- a/code/modules/mob/living/basic/guardian/guardian_fluff.dm +++ b/code/modules/mob/living/basic/guardian/guardian_fluff.dm @@ -22,7 +22,7 @@ /// Verb shown to attacker when attacking var/attack_verb_simple = "punch" /// Sound played when we attack - var/attack_sound = 'sound/weapons/punch1.ogg' + var/attack_sound = 'sound/items/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. diff --git a/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm b/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm index 2e94aaf039498..19f98a70f409b 100644 --- a/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm +++ b/code/modules/mob/living/basic/guardian/guardian_types/assassin.dm @@ -9,7 +9,7 @@ melee_damage_upper = 15 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/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) diff --git a/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm b/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm index ae9cbfbeecbc8..2b9d50f085493 100644 --- a/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm +++ b/code/modules/mob/living/basic/guardian/guardian_types/dextrous.dm @@ -28,7 +28,7 @@ . = ..() 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.") + . += span_info("It is holding [internal_storage.examine_title(user)] in its internal storage.") /mob/living/basic/guardian/dextrous/recall_effects() . = ..() diff --git a/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm b/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm index b2ac9d66e8c23..3f8f492f1d0f0 100644 --- a/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm +++ b/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm @@ -6,7 +6,7 @@ attack_verb_continuous = "shocks" attack_verb_simple = "shock" melee_damage_type = BURN - attack_sound = 'sound/machines/defib_zap.ogg' + attack_sound = 'sound/machines/defib/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.") diff --git a/code/modules/mob/living/basic/guardian/guardian_types/support.dm b/code/modules/mob/living/basic/guardian/guardian_types/support.dm index 8ab24b7e9b7d1..46b69652cf5d9 100644 --- a/code/modules/mob/living/basic/guardian/guardian_types/support.dm +++ b/code/modules/mob/living/basic/guardian/guardian_types/support.dm @@ -134,7 +134,7 @@ /// 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) + playsound(target, 'sound/items/weapons/punch1.ogg', 50, TRUE, TRUE, frequency = -1) source.balloon_alert(source, "teleporting...") target.visible_message( span_danger("[target] starts to glow faintly!"), \ diff --git a/code/modules/mob/living/basic/guardian/guardian_verbs.dm b/code/modules/mob/living/basic/guardian/guardian_verbs.dm index 80a2af7db7a27..b69fac878209a 100644 --- a/code/modules/mob/living/basic/guardian/guardian_verbs.dm +++ b/code/modules/mob/living/basic/guardian/guardian_verbs.dm @@ -57,7 +57,7 @@ if (isnull(summoner)) return var/sender_key = key - var/input = tgui_input_text(src, "Enter a message to tell your summoner", "Guardian") + var/input = tgui_input_text(src, "Enter a message to tell your summoner", "Guardian", max_length = MAX_MESSAGE_LEN) if (sender_key != key || !input) //guardian got reset, or did not enter anything return @@ -91,7 +91,7 @@ /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") + var/input = tgui_input_text(owner, "Enter a message to tell your guardian", "Message", max_length = MAX_MESSAGE_LEN) StartCooldown() if (!input) return FALSE diff --git a/code/modules/mob/living/basic/health_adjustment.dm b/code/modules/mob/living/basic/health_adjustment.dm index bae9d7b9e57b5..ca98f98eb8e91 100644 --- a/code/modules/mob/living/basic/health_adjustment.dm +++ b/code/modules/mob/living/basic/health_adjustment.dm @@ -4,12 +4,12 @@ * Arguments: * * amount The amount that will be used to adjust the mob's health * * updating_health If the mob's health should be immediately updated to the new value - * * forced If we should force update the adjustment of the mob's health no matter the restrictions, like GODMODE + * * forced If we should force update the adjustment of the mob's health no matter the restrictions, like TRAIT_GODMODE * returns the net change in bruteloss after applying the damage amount */ /mob/living/basic/proc/adjust_health(amount, updating_health = TRUE, forced = FALSE) . = FALSE - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return 0 . = bruteloss // bruteloss value before applying damage bruteloss = round(clamp(bruteloss + amount, 0, maxHealth * 2), DAMAGE_PRECISION) diff --git a/code/modules/mob/living/basic/heretic/_heretic_summon.dm b/code/modules/mob/living/basic/heretic/_heretic_summon.dm index b6336182a2224..b482ee2d211a2 100644 --- a/code/modules/mob/living/basic/heretic/_heretic_summon.dm +++ b/code/modules/mob/living/basic/heretic/_heretic_summon.dm @@ -13,7 +13,7 @@ speed = 0 melee_attack_cooldown = CLICK_CD_MELEE - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' response_help_continuous = "thinks better of touching" response_help_simple = "think better of touching" response_disarm_continuous = "flails at" diff --git a/code/modules/mob/living/basic/heretic/fire_shark.dm b/code/modules/mob/living/basic/heretic/fire_shark.dm index c4106050bc26e..1ac4ccb7b237a 100644 --- a/code/modules/mob/living/basic/heretic/fire_shark.dm +++ b/code/modules/mob/living/basic/heretic/fire_shark.dm @@ -11,7 +11,7 @@ maxHealth = 16 melee_damage_lower = 8 melee_damage_upper = 8 - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE obj_damage = 0 attack_verb_continuous = "bites" @@ -30,4 +30,5 @@ AddComponent(/datum/component/swarming) AddComponent(/datum/component/regenerator, outline_colour = COLOR_DARK_RED) ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_MOVEMENT, INNATE_TRAIT) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) diff --git a/code/modules/mob/living/basic/heretic/flesh_worm.dm b/code/modules/mob/living/basic/heretic/flesh_worm.dm index 92b910c717fae..cddd34ba44184 100644 --- a/code/modules/mob/living/basic/heretic/flesh_worm.dm +++ b/code/modules/mob/living/basic/heretic/flesh_worm.dm @@ -98,7 +98,7 @@ if(!istype(target, /obj/item/bodypart/arm)) return ..() visible_message(span_warning("[src] devours [target]!")) - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) qdel(target) on_arm_eaten() diff --git a/code/modules/mob/living/basic/heretic/star_gazer.dm b/code/modules/mob/living/basic/heretic/star_gazer.dm index e503cd65aea16..57a0ddfe322d8 100644 --- a/code/modules/mob/living/basic/heretic/star_gazer.dm +++ b/code/modules/mob/living/basic/heretic/star_gazer.dm @@ -21,11 +21,11 @@ attack_verb_continuous = "ravages" attack_verb_simple = "ravage" attack_vis_effect = ATTACK_EFFECT_SLASH - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' melee_attack_cooldown = 0.6 SECONDS speak_emote = list("growls") damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 0, STAMINA = 0, OXY = 0) - death_sound = 'sound/magic/cosmic_expansion.ogg' + death_sound = 'sound/effects/magic/cosmic_expansion.ogg' slowed_by_drag = FALSE move_force = MOVE_FORCE_OVERPOWERING 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 a83953ae1c94d..0b27ac6958e0e 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 @@ -16,7 +16,7 @@ melee_damage_upper = 15 attack_verb_continuous = "slices" attack_verb_simple = "slice" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_VERY_STRONG @@ -24,7 +24,7 @@ crusher_loot = /obj/item/crusher_trophy/ice_demon_cube ai_controller = /datum/ai_controller/basic_controller/ice_demon death_message = "fades as the energies that tied it to this world dissipate." - death_sound = 'sound/magic/demon_dies.ogg' + death_sound = 'sound/effects/magic/demon_dies.ogg' /mob/living/basic/mining/ice_demon/Initialize(mapload) . = ..() @@ -38,7 +38,7 @@ AddComponent(\ /datum/component/ranged_attacks,\ projectile_type = /obj/projectile/temp/ice_demon,\ - projectile_sound = 'sound/weapons/pierce.ogg',\ + projectile_sound = 'sound/items/weapons/pierce.ogg',\ ) var/static/list/death_loot = list(/obj/item/stack/ore/bluespace_crystal = 3) AddElement(/datum/element/death_drops, death_loot) @@ -66,7 +66,7 @@ melee_damage_upper = 5 attack_verb_continuous = "slices" attack_verb_simple = "slice" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' alpha = 80 ai_controller = /datum/ai_controller/basic_controller/ice_demon/afterimage ///how long do we exist for 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 768375cfce8a6..43f8c61d0c880 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 @@ -26,9 +26,9 @@ attack_verb_continuous = "chomps" attack_verb_simple = "chomp" death_message = "collapses on its side." - death_sound = 'sound/magic/demon_dies.ogg' + death_sound = 'sound/effects/magic/demon_dies.ogg' - attack_sound = 'sound/magic/demon_attack1.ogg' + attack_sound = 'sound/effects/magic/demon_attack1.ogg' move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_VERY_STRONG pull_force = MOVE_FORCE_VERY_STRONG 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 53d7e7191ef05..33d091db4e4b1 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 @@ -21,7 +21,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/corpses/ice_whelp target_key = BB_TARGET_CANNIBAL finding_behavior = /datum/ai_behavior/find_hunt_target/corpses/dragon_corpse - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/dragon_cannibalise hunt_targets = list(/mob/living/basic/mining/ice_whelp) hunt_range = 10 @@ -32,10 +32,10 @@ return FALSE return ..() -/datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise +/datum/ai_behavior/hunt_target/interact_with_target/dragon_cannibalise behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION -/datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) +/datum/ai_behavior/hunt_target/interact_with_target/dragon_cannibalise/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) var/mob/living/target = controller.blackboard[target_key] if(QDELETED(target) || target.stat != DEAD || target.pulledby) //we were too slow return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED @@ -66,20 +66,14 @@ set_movement_target(controller, target) /datum/ai_behavior/sculpt_statue/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - var/atom/target = controller.blackboard[target_key] - var/mob/living/basic/living_pawn = controller.pawn - - if(QDELETED(target)) + if(!controller.ai_interact(target = target_key, combat_mode = FALSE)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - - living_pawn.melee_attack(target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/sculpt_statue/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() controller.clear_blackboard_key(target_key) - //subtree to use our attacks on the victim /datum/ai_planning_subtree/targeted_mob_ability/ice_whelp ability_key = BB_WHELP_STRAIGHTLINE_FIRE diff --git a/code/modules/mob/living/basic/icemoon/wolf/wolf.dm b/code/modules/mob/living/basic/icemoon/wolf/wolf.dm index b7a947f00e309..3708d754ab4b0 100644 --- a/code/modules/mob/living/basic/icemoon/wolf/wolf.dm +++ b/code/modules/mob/living/basic/icemoon/wolf/wolf.dm @@ -30,7 +30,7 @@ attack_verb_simple = "bite" death_message = "snarls its last and perishes." - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' move_force = MOVE_FORCE_WEAK move_resist = MOVE_FORCE_WEAK pull_force = MOVE_FORCE_WEAK diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper.dm b/code/modules/mob/living/basic/jungle/leaper/leaper.dm index f3213897f9bdb..94babd0218e5b 100644 --- a/code/modules/mob/living/basic/jungle/leaper/leaper.dm +++ b/code/modules/mob/living/basic/jungle/leaper/leaper.dm @@ -23,7 +23,7 @@ minimum_survivable_temperature = 0 maximum_survivable_temperature = INFINITY - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH status_flags = NONE lighting_cutoff_red = 5 diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm index efc09410db488..d753c42c51ec8 100644 --- a/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm +++ b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm @@ -137,7 +137,7 @@ if(!length(possible_turfs)) return FALSE - playsound(owner, 'sound/magic/fireball.ogg', 70, TRUE) + playsound(owner, 'sound/effects/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() 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 62b36a1bbaf94..059375a7ed6a6 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 @@ -29,7 +29,7 @@ mob_size = MOB_SIZE_LARGE speak_emote = list("chitters") - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH ai_controller = /datum/ai_controller/basic_controller/mega_arachnid alpha = 40 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 fa2a86787d861..7d1b40fc5ec23 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 @@ -19,7 +19,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/destroy_surveillance target_key = BB_SURVEILLANCE_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/find_active_surveillance - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target hunt_targets = list(/obj/machinery/camera, /obj/machinery/light) hunt_range = 7 diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling.dm b/code/modules/mob/living/basic/jungle/seedling/seedling.dm index 7a853b8a9d086..00db708bc3299 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling.dm @@ -31,7 +31,7 @@ lighting_cutoff_blue = 25 mob_size = MOB_SIZE_LARGE faction = list(FACTION_PLANTS) - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH ai_controller = /datum/ai_controller/basic_controller/seedling ///the state of combat we are in @@ -338,7 +338,7 @@ living_target.ignite_mob() living_target.adjustFireLoss(30) - playsound(target_turf, 'sound/magic/lightningbolt.ogg', 50, TRUE) + playsound(target_turf, 'sound/effects/magic/lightningbolt.ogg', 50, TRUE) if(!is_seedling) return var/mob/living/basic/seedling/seed_firer = firer 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 2ed4811e46f25..440cfc2861b69 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm @@ -19,7 +19,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/watering_can target_key = BB_WATERCAN_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target hunt_targets = list(/obj/item/reagent_containers/cup/watering_can) hunt_range = 7 @@ -32,7 +32,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/treat_hydroplants target_key = BB_HYDROPLANT_TARGET finding_behavior = /datum/ai_behavior/find_and_set/treatable_hydro - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/treat_hydroplant + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/treat_hydroplant hunt_targets = list(/obj/machinery/hydroponics) hunt_range = 7 @@ -58,11 +58,11 @@ if(possible_trays.len) return pick(possible_trays) -/datum/ai_behavior/hunt_target/unarmed_attack_target/treat_hydroplant +/datum/ai_behavior/hunt_target/interact_with_target/treat_hydroplant hunt_cooldown = 2 SECONDS always_reset_target = TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/treat_hydroplant/target_caught(mob/living/living_pawn, obj/machinery/hydroponics/hydro_target) +/datum/ai_behavior/hunt_target/interact_with_target/treat_hydroplant/target_caught(mob/living/living_pawn, obj/machinery/hydroponics/hydro_target) if(QDELETED(hydro_target) || QDELETED(hydro_target.myseed)) return @@ -112,7 +112,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/fill_watercan target_key = BB_LOW_PRIORITY_HUNTING_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/suitable_dispenser - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/water_source + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/water_source hunt_targets = list(/obj/structure/sink, /obj/structure/reagent_dispensers) hunt_range = 7 @@ -135,7 +135,7 @@ return can_see(source, water_source, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/water_source +/datum/ai_behavior/hunt_target/interact_with_target/water_source behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION hunt_cooldown = 5 SECONDS diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling_projectiles.dm b/code/modules/mob/living/basic/jungle/seedling/seedling_projectiles.dm index 37a3ec1c0aca9..303776384d1f6 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling_projectiles.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling_projectiles.dm @@ -7,8 +7,8 @@ armor_flag = ENERGY light_color = LIGHT_COLOR_DIM_YELLOW speed = 1.6 - hitsound = 'sound/weapons/sear.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hitsound = 'sound/items/weapons/sear.ogg' + hitsound_wall = 'sound/items/weapons/effects/searwall.ogg' nondirectional_sprite = TRUE /obj/projectile/seedling/on_hit(atom/target, blocked = 0, pierce_hit) 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 ec375283fcea0..0a4a557eef15b 100644 --- a/code/modules/mob/living/basic/jungle/venus_human_trap.dm +++ b/code/modules/mob/living/basic/jungle/venus_human_trap.dm @@ -143,9 +143,9 @@ combat_mode = TRUE basic_mob_flags = DEL_ON_DEATH death_message = "collapses into bits of plant matter." - attacked_sound = 'sound/creatures/venus_trap_hurt.ogg' - death_sound = 'sound/creatures/venus_trap_death.ogg' - attack_sound = 'sound/creatures/venus_trap_hit.ogg' + attacked_sound = 'sound/mobs/non-humanoids/venus_trap/venus_trap_hurt.ogg' + death_sound = 'sound/mobs/non-humanoids/venus_trap/venus_trap_death.ogg' + attack_sound = 'sound/mobs/non-humanoids/venus_trap/venus_trap_hit.ogg' unsuitable_heat_damage = 5 // heat damage is different from cold damage since coldmos is significantly more common than plasmafires unsuitable_cold_damage = 2 // they now do take cold damage, but this should be sufficiently small that it does not cause major issues habitable_atmos = null diff --git a/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm b/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm index 6c1f5ba0846cd..5f13d53160a83 100644 --- a/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm +++ b/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm @@ -16,7 +16,7 @@ attack_verb_continuous = "bites into" attack_verb_simple = "bite into" throw_blocked_message = "bounces off the shell of" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_BITE ai_controller = /datum/ai_controller/basic_controller/basilisk butcher_results = list( @@ -30,7 +30,7 @@ /mob/living/basic/mining/basilisk/Initialize(mapload) . = ..() AddComponent(/datum/component/basic_mob_attack_telegraph) - ranged_attacks = AddComponent(/datum/component/ranged_attacks, projectile_type = /obj/projectile/temp/watcher, projectile_sound = 'sound/weapons/pierce.ogg') + ranged_attacks = AddComponent(/datum/component/ranged_attacks, projectile_type = /obj/projectile/temp/watcher, projectile_sound = 'sound/items/weapons/pierce.ogg') RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(check_lava)) /mob/living/basic/mining/basilisk/Destroy() 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 f023215d7dd5c..8e43e43e72c31 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm @@ -19,14 +19,14 @@ return playsound(burrower, 'sound/effects/break_stone.ogg', 50, TRUE) new /obj/effect/temp_visual/mook_dust(get_turf(burrower)) - burrower.status_flags |= GODMODE + ADD_TRAIT(burrower, TRAIT_GODMODE, REF(src)) burrower.SetInvisibility(INVISIBILITY_MAXIMUM, id=type) burrower.forceMove(unburrow_turf) //not that it's gonna die with godmode but still SLEEP_CHECK_DEATH(rand(0.7 SECONDS, 1.2 SECONDS), burrower) playsound(burrower, 'sound/effects/break_stone.ogg', 50, TRUE) new /obj/effect/temp_visual/mook_dust(unburrow_turf) - burrower.status_flags &= ~GODMODE + REMOVE_TRAIT(burrower, TRAIT_GODMODE, REF(src)) burrower.RemoveInvisibility(type) /datum/action/cooldown/mob_cooldown/resurface/proc/get_unburrow_turf(mob/living/burrower, atom/target) @@ -53,7 +53,7 @@ name = "Spew Bile" desc = "Spews bile everywhere. Must resurface after use to refresh." projectile_type = /obj/projectile/bileworm_acid - projectile_sound = 'sound/creatures/bileworm/bileworm_spit.ogg' + projectile_sound = 'sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg' shared_cooldown = MOB_SHARED_COOLDOWN_1 | MOB_SHARED_COOLDOWN_2 /datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/bileworm/Activate(atom/target_atom) @@ -70,7 +70,7 @@ /obj/projectile/bileworm_acid name = "acidic bile" icon_state = "neurotoxin" - hitsound = 'sound/weapons/sear.ogg' + hitsound = 'sound/items/weapons/sear.ogg' damage = 20 speed = 2 range = 20 @@ -108,14 +108,14 @@ return //this will give up on devouring the target which is fine by me playsound(devourer, 'sound/effects/break_stone.ogg', 50, TRUE) new /obj/effect/temp_visual/mook_dust(get_turf(devourer)) - devourer.status_flags |= GODMODE + ADD_TRAIT(devourer, TRAIT_GODMODE, REF(src)) devourer.SetInvisibility(INVISIBILITY_MAXIMUM, id=type) devourer.forceMove(devour_turf) //not that it's gonna die with godmode but still SLEEP_CHECK_DEATH(rand(0.7 SECONDS, 1.2 SECONDS), devourer) playsound(devourer, 'sound/effects/break_stone.ogg', 50, TRUE) new /obj/effect/temp_visual/mook_dust(devour_turf) - devourer.status_flags &= ~GODMODE + REMOVE_TRAIT(devourer, TRAIT_GODMODE, REF(src)) devourer.RemoveInvisibility(type) if(!(target in devour_turf)) to_chat(devourer, span_warning("Someone stole your dinner!")) diff --git a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_loot.dm b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_loot.dm index 7c04ed65a61c7..a5740a51ebd9a 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_loot.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_loot.dm @@ -51,7 +51,7 @@ owner_has_control = FALSE cooldown_time = 10 SECONDS projectile_type = /obj/projectile/bileworm_acid - projectile_sound = 'sound/creatures/bileworm/bileworm_spit.ogg' + projectile_sound = 'sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg' /datum/action/cooldown/mob_cooldown/projectile_attack/dir_shots/spewlet/New(Target) firing_directions = GLOB.cardinals.Copy() diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm index 61f31f7044dbc..5900289cae569 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimbeam.dm @@ -52,7 +52,7 @@ /// Create a laser in the direction we are facing /datum/action/cooldown/mob_cooldown/brimbeam/proc/fire_laser() owner.visible_message(span_danger("[owner] fires a brimbeam!")) - playsound(owner, 'sound/creatures/brimdemon.ogg', 150, FALSE, 0, 3) + playsound(owner, 'sound/mobs/non-humanoids/brimdemon/brimdemon.ogg', 150, FALSE, 0, 3) var/turf/target_turf = get_ranged_target_turf(owner, owner.dir, beam_range) var/turf/origin_turf = get_turf(owner) var/list/affected_turfs = get_line(origin_turf, target_turf) - origin_turf diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm index 9a88c636cf511..81dc34002eedb 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm @@ -14,13 +14,13 @@ speak_emote = list("cackles") melee_damage_lower = 7.5 melee_damage_upper = 7.5 - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' melee_attack_cooldown = 0.6 SECONDS attack_vis_effect = ATTACK_EFFECT_BITE attack_verb_continuous = "bites" attack_verb_simple = "bite" death_message = "wails as infernal energy escapes from its wounds, leaving it an empty husk." - death_sound = 'sound/magic/demon_dies.ogg' + death_sound = 'sound/effects/magic/demon_dies.ogg' light_color = LIGHT_COLOR_BLOOD_MAGIC light_power = 5 light_range = 1.4 diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm index 11fd7b6aa260f..78960b5340d30 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm @@ -8,11 +8,11 @@ var/static/list/comic_phrases = list("BOOM", "BANG", "KABLOW", "KAPOW", "OUCH", "BAM", "KAPOW", "WHAM", "POW", "KABOOM") /obj/item/crusher_trophy/brimdemon_fang/effect_desc() - return "mark detonation creates visual and audiosensory effects on the target" + return "mark detonation to create visual and audiosensory effects at the target" /obj/item/crusher_trophy/brimdemon_fang/on_mark_detonation(mob/living/target, mob/living/user) target.balloon_alert_to_viewers("[pick(comic_phrases)]!") - playsound(target, 'sound/lavaland/brimdemon_crush.ogg', 100) + playsound(target, 'sound/mobs/non-humanoids/brimdemon/brimdemon_crush.ogg', 100) /// Reagent pool left by dying brimdemon /obj/effect/decal/cleanable/brimdust diff --git a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm index ce9f243935809..26c0d79540a73 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm @@ -19,7 +19,7 @@ melee_damage_upper = 0 attack_verb_continuous = "barrels into" attack_verb_simple = "barrel into" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' combat_mode = FALSE speak_emote = list("screeches") death_message = "stops moving as green liquid oozes from the carcass!" @@ -52,7 +52,6 @@ /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) 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 a31bf1f3e1d2e..8ea2467a2a813 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm @@ -1,3 +1,4 @@ +#define BURROW_RANGE 5 /datum/ai_controller/basic_controller/goldgrub blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, @@ -11,6 +12,7 @@ planning_subtrees = list( /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/burrow_through_ground, /datum/ai_planning_subtree/dig_away_from_danger, /datum/ai_planning_subtree/flee_target, /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores, @@ -39,10 +41,50 @@ /datum/ai_planning_subtree/look_for_adult, ) +/datum/ai_planning_subtree/burrow_through_ground + +/datum/ai_planning_subtree/burrow_through_ground/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(is_jaunting(controller.pawn) && controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) + controller.queue_behavior(/datum/ai_behavior/burrow_through_ground, BB_BASIC_MOB_CURRENT_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/burrow_through_ground + action_cooldown = 10 SECONDS + +/datum/ai_behavior/burrow_through_ground/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/atom/target = controller.blackboard[target_key] + if(!is_jaunting(controller.pawn) || QDELETED(target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + var/mob/living/living_pawn = controller.pawn + var/atom/movable/phased = living_pawn.loc + + var/list/turfs_list = RANGE_TURFS(BURROW_RANGE, phased) + var/current_max_distance = 0 + var/turf/selected_turf + + for(var/turf/possible_turf as anything in turfs_list) + if(!ismineralturf(possible_turf) && !isasteroidturf(possible_turf)) + continue + + var/distance_to_target = get_dist(possible_turf, target) + if(distance_to_target > current_max_distance) + current_max_distance = distance_to_target + selected_turf = possible_turf + + if(distance_to_target == BURROW_RANGE) + break + + if(isnull(selected_turf)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + phased.forceMove(selected_turf) + return AI_BEHAVIOR_SUCCEEDED | AI_BEHAVIOR_DELAY + ///consume food! /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores target_key = BB_ORE_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/hunt_ores + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/hunt_ores finding_behavior = /datum/ai_behavior/find_hunt_target/hunt_ores hunt_targets = list(/obj/item/stack/ore) hunt_chance = 90 @@ -65,13 +107,13 @@ return can_see(source, target, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/hunt_ores +/datum/ai_behavior/hunt_target/interact_with_target/hunt_ores always_reset_target = TRUE ///break boulders so that we can find more food! /datum/ai_planning_subtree/find_and_hunt_target/harvest_vents target_key = BB_VENT_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target //We call the ore vent's produce_boulder() proc here to produce a single boulder. + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target //We call the ore vent's produce_boulder() proc here to produce a single boulder. finding_behavior = /datum/ai_behavior/find_hunt_target/harvest_vents hunt_targets = list(/obj/structure/ore_vent) hunt_chance = 25 @@ -95,7 +137,7 @@ ///break boulders so that we can find more food! /datum/ai_planning_subtree/find_and_hunt_target/break_boulders target_key = BB_BOULDER_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target //We process boulders once every tap, so we dont need to do anything special here + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target //We process boulders once every tap, so we dont need to do anything special here finding_behavior = /datum/ai_behavior/find_hunt_target/break_boulders hunt_targets = list(/obj/item/boulder) hunt_chance = 100 //If we can, we should always break boulders. @@ -179,3 +221,5 @@ controller.queue_behavior(/datum/ai_behavior/use_mob_ability, BB_SPIT_ABILITY) controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) return SUBTREE_RETURN_FINISH_PLANNING + +#undef BURROW_RANGE diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm index 4a28fba66309e..7d6b1dc6e404a 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm @@ -19,7 +19,7 @@ obj_damage = 100 melee_damage_lower = 25 melee_damage_upper = 25 - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' attack_verb_continuous = "pulverizes" attack_verb_simple = "pulverize" throw_blocked_message = "does nothing to the tough hide of" @@ -136,7 +136,7 @@ if (!COOLDOWN_FINISHED(src, ability_animation_cooldown)) return COOLDOWN_START(src, ability_animation_cooldown, 2 SECONDS) - playsound(src, 'sound/magic/demon_attack1.ogg', vol = 50, vary = TRUE) + playsound(src, 'sound/effects/magic/demon_attack1.ogg', vol = 50, vary = TRUE) Shake(1, 0, 1.5 SECONDS) /// Called slightly before tentacles ability comes off cooldown, as a warning diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm index f9e1d458ef2ed..6b822d490de78 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm @@ -139,12 +139,12 @@ can_breed = FALSE gender = NEUTER ai_controller = /datum/ai_controller/basic_controller/gutlunch/gutlunch_baby + current_size = 0.6 ///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,\ diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm index c7f7e86c86680..261f6d22a021b 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -73,7 +73,7 @@ ///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 + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/food_trough finding_behavior = /datum/ai_behavior/find_hunt_target/food_trough hunt_targets = list(/obj/structure/ore_container/food_trough/gutlunch_trough) hunt_chance = 75 @@ -96,9 +96,9 @@ return can_see(source, target, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough +/datum/ai_behavior/hunt_target/interact_with_target/food_trough always_reset_target = TRUE - switch_combat_mode = TRUE + behavior_combat_mode = FALSE /datum/pet_command/mine_walls command_name = "Mine" diff --git a/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm b/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm index f0de6c3272e55..931b568e5ee3f 100644 --- a/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm +++ b/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm @@ -17,7 +17,7 @@ attack_verb_continuous = "weakly tackles" attack_verb_simple = "weakly tackles" speak_emote = list("telepathically cries") - attack_sound = 'sound/weapons/pierce.ogg' + attack_sound = 'sound/items/weapons/pierce.ogg' throw_blocked_message = "passes between the bodies of the" obj_damage = 0 pass_flags = PASSTABLE @@ -94,7 +94,7 @@ attack_verb_continuous = "bites" attack_verb_simple = "bite" speak_emote = list("telepathically cries") - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE obj_damage = 0 density = FALSE 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 7d50806e63a0c..6dbbe72a2459b 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 @@ -98,8 +98,8 @@ var/turf/my_turf = get_turf(src) dir = get_dir(spawn_from, my_turf) - var/move_x = (my_turf.x - spawn_from.x) * world.icon_size - var/move_y = (my_turf.y - spawn_from.y) * world.icon_size + var/move_x = (my_turf.x - spawn_from.x) * ICON_SIZE_X + var/move_y = (my_turf.y - spawn_from.y) * ICON_SIZE_Y pixel_x = -move_x pixel_y = -move_y diff --git a/code/modules/mob/living/basic/lavaland/legion/legion.dm b/code/modules/mob/living/basic/lavaland/legion/legion.dm index 12bf6555d97d4..76d3f51947e63 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion.dm @@ -21,7 +21,7 @@ attack_verb_continuous = "lashes out at" attack_verb_simple = "lash out at" speak_emote = list("gurgles") - attack_sound = 'sound/weapons/pierce.ogg' + attack_sound = 'sound/items/weapons/pierce.ogg' throw_blocked_message = "bounces harmlessly off of" crusher_loot = /obj/item/crusher_trophy/legion_skull death_message = "wails in chorus and dissolves into quivering flesh." 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 1bae1b3035379..856ff315d0c1e 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm @@ -66,6 +66,9 @@ if (QDELETED(victim) || prob(30)) return ..() + if(HAS_MIND_TRAIT(victim, TRAIT_MIMING)) // mimes cant talk + return + var/list/remembered_speech = controller.blackboard[BB_LEGION_RECENT_LINES] || list() if (length(remembered_speech) && prob(50)) // Don't spam the radio 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 e578067a44576..df493825ec4e9 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm @@ -26,7 +26,7 @@ attack_verb_simple = "bite" attack_vis_effect = ATTACK_EFFECT_BITE speak_emote = list("echoes") // who the fuck speaking as this mob it dies 10 seconds after it spawns - attack_sound = 'sound/weapons/pierce.ogg' + attack_sound = 'sound/items/weapons/pierce.ogg' density = FALSE ai_controller = /datum/ai_controller/basic_controller/legion_brood /// Reference to a guy who made us diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm b/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm index 5345adc88da3c..9526dcaef52c6 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm @@ -12,7 +12,7 @@ attack_verb_continuous = "mauls" attack_verb_simple = "maul" attack_vis_effect = ATTACK_EFFECT_BITE - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' speak_emote = list("chimpers") corpse_type = /obj/effect/mob_spawn/corpse/human/monkey ai_controller = /datum/ai_controller/basic_controller/legion_monkey 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 3f678da6910bc..d4503230e482f 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm @@ -7,7 +7,7 @@ icon_state = "legion_remains" zone = BODY_ZONE_CHEST slot = ORGAN_SLOT_PARASITE_EGG - organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE | ORGAN_VIRGIN | ORGAN_PROMINENT + organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS decay_factor = STANDARD_ORGAN_DECAY * 3 // About 5 minutes outside of a host /// What stage of growth the corruption has reached. var/stage = 0 @@ -21,10 +21,10 @@ var/spawn_type = /mob/living/basic/mining/legion /// Spooky sounds to play as you start to turn var/static/list/spooky_sounds = list( - 'sound/voice/lowHiss1.ogg', - 'sound/voice/lowHiss2.ogg', - 'sound/voice/lowHiss3.ogg', - 'sound/voice/lowHiss4.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss1.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss2.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss3.ogg', + 'sound/mobs/non-humanoids/hiss/lowHiss4.ogg', ) /obj/item/organ/internal/legion_tumour/Initialize(mapload) @@ -117,7 +117,7 @@ to_chat(owner, span_danger("Something flexes under your skin.")) if(SPT_PROB(2, seconds_per_tick)) if (prob(40)) - SEND_SOUND(owner, sound('sound/voice/ghost_whisper.ogg')) + SEND_SOUND(owner, sound('sound/music/antag/bloodcult/ghost_whisper.ogg')) else SEND_SOUND(owner, sound(pick(spooky_sounds))) if(SPT_PROB(3, seconds_per_tick)) diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm index 8c879d3ab48c8..b4de3d2321fe6 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm @@ -16,7 +16,7 @@ melee_damage_upper = 19 attack_verb_continuous = "snips" attack_verb_simple = "snip" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE // Closer than a scratch to a crustacean pinching effect melee_attack_cooldown = 1 SECONDS butcher_results = list( 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 32ec66a62cc37..de62b43e4a054 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm @@ -104,7 +104,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/lobster_fishing target_key = BB_FISHING_TARGET hunt_targets = list(/turf/open/lava) - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target_combat_mode + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off /datum/ai_planning_subtree/basic_melee_attack_subtree/lobster melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/lobster @@ -323,7 +323,7 @@ var/atom/fingers = controller.blackboard[target_key] if (QDELETED(fingers) || living_pawn.pulling != fingers) return AI_BEHAVIOR_FAILED - living_pawn.melee_attack(fingers) + controller.ai_interact(target = fingers) return AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/hoard_fingers/finish_action(datum/ai_controller/controller, succeeded, target_key) diff --git a/code/modules/mob/living/basic/lavaland/mook/mook.dm b/code/modules/mob/living/basic/lavaland/mook/mook.dm index 6ecf54bc26482..888023897397e 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook.dm @@ -15,9 +15,9 @@ move_resist = MOVE_FORCE_VERY_STRONG melee_damage_lower = 8 melee_damage_upper = 8 - attack_sound = 'sound/weapons/rapierhit.ogg' + attack_sound = 'sound/items/weapons/rapierhit.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH - death_sound = 'sound/voice/mook_death.ogg' + death_sound = 'sound/mobs/non-humanoids/mook/mook_death.ogg' ai_controller = /datum/ai_controller/basic_controller/mook/support speed = 5 pixel_x = -16 @@ -243,8 +243,8 @@ melee_damage_lower = 10 melee_damage_upper = 10 gender = MALE - attack_sound = 'sound/weapons/stringsmash.ogg' - death_sound = 'sound/voice/mook_death.ogg' + attack_sound = 'sound/items/weapons/stringsmash.ogg' + death_sound = 'sound/mobs/non-humanoids/mook/mook_death.ogg' ai_controller = /datum/ai_controller/basic_controller/mook/bard ///our guitar var/obj/item/instrument/guitar/held_guitar 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 f80f1f3dae29e..90d7cb0d5b42d 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm @@ -53,8 +53,8 @@ /datum/action/cooldown/mob_cooldown/mook_ability/mook_leap/proc/launch_towards_target(atom/target) new /obj/effect/temp_visual/mook_dust(get_turf(owner)) - playsound(get_turf(owner), 'sound/weapons/thudswoosh.ogg', 25, TRUE) - playsound(owner, 'sound/voice/mook_leap_yell.ogg', 100, TRUE) + playsound(get_turf(owner), 'sound/items/weapons/thudswoosh.ogg', 25, TRUE) + playsound(owner, 'sound/mobs/non-humanoids/mook/mook_leap_yell.ogg', 100, TRUE) var/turf/target_turf = get_turf(target) if(!target_turf.is_blocked_turf()) @@ -117,7 +117,7 @@ var/mob/living/basic/mining/mook/mook_owner = owner mook_owner.change_combatant_state(state = MOOK_ATTACK_ACTIVE) new /obj/effect/temp_visual/mook_dust(get_turf(owner)) - playsound(get_turf(owner), 'sound/weapons/thudswoosh.ogg', 50, TRUE) + playsound(get_turf(owner), 'sound/items/weapons/thudswoosh.ogg', 50, TRUE) animate(owner, pixel_y = owner.base_pixel_y + 146, time = 0.5 SECONDS) addtimer(CALLBACK(src, PROC_REF(land_on_turf), target), 0.5 SECONDS) 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 eeefc7a8b5c72..15da812a0b237 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm @@ -70,7 +70,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///deposit ores into the stand! /datum/ai_planning_subtree/find_and_hunt_target/material_stand target_key = BB_MATERIAL_STAND_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/material_stand finding_behavior = /datum/ai_behavior/find_hunt_target hunt_targets = list(/obj/structure/ore_container/material_stand) hunt_range = 9 @@ -81,14 +81,14 @@ GLOBAL_LIST_INIT(mook_commands, list( return return ..() -/datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand +/datum/ai_behavior/hunt_target/interact_with_target/material_stand required_distance = 0 always_reset_target = TRUE - switch_combat_mode = TRUE + behavior_combat_mode = FALSE behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT ///try to face the counter when depositing ores -/datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) +/datum/ai_behavior/hunt_target/interact_with_target/material_stand/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) . = ..() var/atom/hunt_target = controller.blackboard[hunting_target_key] if (QDELETED(hunt_target)) @@ -297,7 +297,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///find injured miner mooks after they come home from a long day of work /datum/ai_planning_subtree/find_and_hunt_target/injured_mooks target_key = BB_INJURED_MOOK - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/injured_mooks + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/injured_mooks finding_behavior = /datum/ai_behavior/find_hunt_target/injured_mooks hunt_targets = list(/mob/living/basic/mining/mook/worker) hunt_range = 9 @@ -313,9 +313,7 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_behavior/find_hunt_target/injured_mooks/valid_dinner(mob/living/source, mob/living/injured_mook) return (injured_mook.health < injured_mook.maxHealth) -/datum/ai_behavior/hunt_target/unarmed_attack_target/injured_mooks - -/datum/ai_behavior/hunt_target/unarmed_attack_target/injured_mooks +/datum/ai_behavior/hunt_target/interact_with_target/injured_mooks always_reset_target = TRUE hunt_cooldown = 10 SECONDS @@ -405,7 +403,7 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_planning_subtree/find_and_hunt_target/bonfire target_key = BB_MOOK_BONFIRE_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/bonfire - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/bonfire + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/bonfire hunt_targets = list(/obj/structure/bonfire) hunt_range = 9 @@ -418,5 +416,5 @@ GLOBAL_LIST_INIT(mook_commands, list( return can_see(source, fire, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/bonfire +/datum/ai_behavior/hunt_target/interact_with_target/bonfire always_reset_target = TRUE diff --git a/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm b/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm index 87687c5699963..00ca34757c8d6 100644 --- a/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm +++ b/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm @@ -126,7 +126,7 @@ animate(src, pixel_z = 400, time = 2 SECONDS, easing = QUAD_EASING|EASE_IN, flags = ANIMATION_PARALLEL) sleep(2 SECONDS) if(funny_ending) - playsound(src, 'sound/effects/explosion3.ogg', 50, FALSE) //node drone died on the way back to his home planet. + playsound(src, 'sound/effects/explosion/explosion3.ogg', 50, FALSE) //node drone died on the way back to his home planet. visible_message(span_notice("...or maybe not.")) qdel(src) diff --git a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm index 784f5dd369907..b7f7ffa9cf693 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm @@ -36,7 +36,7 @@ GLOBAL_LIST_EMPTY(raptor_population) maximum_survivable_temperature = INFINITY attack_verb_continuous = "pecks" attack_verb_simple = "chomps" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' faction = list(FACTION_RAPTOR, FACTION_NEUTRAL) speak_emote = list("screeches") ai_controller = /datum/ai_controller/basic_controller/raptor @@ -85,11 +85,11 @@ GLOBAL_LIST_EMPTY(raptor_population) BB_EMOTE_SAY = list("Chirp chirp chirp!", "Kweh!", "Bwark!"), BB_EMOTE_SEE = list("shakes its feathers!", "stretches!", "flaps its wings!", "pecks at the ground!"), BB_EMOTE_SOUND = list( - 'sound/creatures/raptor_1.ogg', - 'sound/creatures/raptor_2.ogg', - 'sound/creatures/raptor_3.ogg', - 'sound/creatures/raptor_4.ogg', - 'sound/creatures/raptor_5.ogg', + 'sound/mobs/non-humanoids/raptor/raptor_1.ogg', + 'sound/mobs/non-humanoids/raptor/raptor_2.ogg', + 'sound/mobs/non-humanoids/raptor/raptor_3.ogg', + 'sound/mobs/non-humanoids/raptor/raptor_4.ogg', + 'sound/mobs/non-humanoids/raptor/raptor_5.ogg', ), BB_SPEAK_CHANCE = 2, ) diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm index 33a655869072a..7e3022f95716d 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm @@ -1,4 +1,4 @@ -/datum/ai_behavior/hunt_target/unarmed_attack_target/heal_raptor +/datum/ai_behavior/hunt_target/interact_with_target/heal_raptor always_reset_target = TRUE /datum/ai_behavior/find_hunt_target/injured_raptor @@ -11,12 +11,11 @@ /datum/ai_behavior/find_hunt_target/raptor_victim/valid_dinner(mob/living/source, mob/living/target, radius) if(target.ai_controller?.blackboard[BB_RAPTOR_TROUBLE_MAKER]) return FALSE - return target.stat != DEAD && can_see(source, target, radius) + return target.stat != DEAD && can_see(source, target, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors - always_reset_target = TRUE +/datum/ai_behavior/hunt_target/interact_with_target/reset_target/bully_raptors -/datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) +/datum/ai_behavior/hunt_target/interact_with_target/bully_raptors/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) if(succeeded) controller.set_blackboard_key(BB_RAPTOR_TROUBLE_COOLDOWN, world.time + 2 MINUTES) return ..() @@ -24,31 +23,13 @@ /datum/ai_behavior/find_hunt_target/raptor_baby/valid_dinner(mob/living/source, mob/living/target, radius) return can_see(source, target, radius) && target.stat != DEAD -/datum/ai_behavior/hunt_target/care_for_young - always_reset_target = TRUE +/datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off/care_for_young -/datum/ai_behavior/hunt_target/care_for_young/target_caught(mob/living/hunter, atom/hunted) +/datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off/care_for_young/target_caught(mob/living/hunter, atom/hunted) hunter.manual_emote("grooms [hunted]!") - hunter.set_combat_mode(FALSE) - hunter.ClickOn(hunted) - -/datum/ai_behavior/hunt_target/care_for_young/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) - var/mob/living/living_pawn = controller.pawn - living_pawn.set_combat_mode(initial(living_pawn.combat_mode)) return ..() /datum/ai_behavior/find_hunt_target/raptor_trough /datum/ai_behavior/find_hunt_target/raptor_trough/valid_dinner(mob/living/source, atom/movable/trough, radius) return !!(locate(/obj/item/stack/ore) in trough.contents) - -/datum/ai_behavior/hunt_target/unarmed_attack_target/raptor_trough - always_reset_target = TRUE - -/datum/ai_behavior/hunt_target/unarmed_attack_target/raptor_trough/target_caught(mob/living/hunter, atom/hunted) - hunter.set_combat_mode(FALSE) - -/datum/ai_behavior/hunt_target/unarmed_attack_target/raptor_trough/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) - var/mob/living/living_pawn = controller.pawn - living_pawn.set_combat_mode(initial(living_pawn.combat_mode)) - return ..() diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm index a23bcf7801b2e..8178df7b78c24 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm @@ -8,8 +8,8 @@ "wags their tail against", "playfully leans against" ), - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor, - BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/raptor), BB_BABIES_CHILD_TYPES = list(/mob/living/basic/raptor/baby_raptor), BB_MAX_CHILDREN = 5, @@ -23,7 +23,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/heal_raptors, /datum/ai_planning_subtree/random_speech/blackboard, /datum/ai_planning_subtree/pet_planning, - /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/target_retaliate/check_faction, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/find_and_hunt_target/raptor_trough, @@ -41,19 +41,13 @@ RegisterSignal(new_pawn, COMSIG_MOB_ATE, PROC_REF(post_eat)) /datum/ai_controller/basic_controller/raptor/proc/post_eat() + SIGNAL_HANDLER clear_blackboard_key(BB_RAPTOR_TROUGH_TARGET) set_blackboard_key(BB_RAPTOR_EAT_COOLDOWN, world.time + NEXT_EAT_COOLDOWN) -/datum/targeting_strategy/basic/raptor - -//dont attack anyone that shares our factions. -/datum/targeting_strategy/basic/raptor/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) - . = ..() - return . - /datum/ai_controller/basic_controller/baby_raptor blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_FIND_MOM_TYPES = list(/mob/living/basic/raptor), BB_IGNORE_MOM_TYPES = list(/mob/living/basic/raptor/baby_raptor), ) diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm index 7ba0dad5561f6..a8d91963ebfb7 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm @@ -1,6 +1,6 @@ /datum/ai_planning_subtree/find_and_hunt_target/heal_raptors target_key = BB_INJURED_RAPTOR - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/heal_raptor + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/heal_raptor finding_behavior = /datum/ai_behavior/find_hunt_target/injured_raptor hunt_targets = list(/mob/living/basic/raptor) hunt_chance = 70 @@ -13,7 +13,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/raptor_start_trouble target_key = BB_RAPTOR_VICTIM - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target/bully_raptors finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_victim hunt_targets = list(/mob/living/basic/raptor) hunt_chance = 30 @@ -36,7 +36,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/care_for_young target_key = BB_RAPTOR_BABY - hunting_behavior = /datum/ai_behavior/hunt_target/care_for_young + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off/care_for_young finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_baby hunt_targets = list(/mob/living/basic/raptor/baby_raptor) hunt_chance = 75 @@ -49,7 +49,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/raptor_trough target_key = BB_RAPTOR_TROUGH_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_trough hunt_targets = list(/obj/structure/ore_container/food_trough/raptor_trough) hunt_chance = 80 diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm index ef7e6fa3167c6..cd1439b3c5ffc 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm @@ -32,7 +32,7 @@ var/happiness_percentage = my_raptor.ai_controller?.blackboard[BB_BASIC_HAPPINESS] var/obj/effect/overlay/happiness_overlay/display = new display.set_hearts(happiness_percentage) - display.pixel_y = world.icon_size * 0.5 + display.pixel_y = ICON_SIZE_Y * 0.5 data["raptor_happiness"] = icon2base64(getFlatIcon(display)) qdel(display) @@ -56,7 +56,7 @@ return NONE raptor = WEAKREF(attacked_atom) - playsound(src, 'sound/items/orbie_send_out.ogg', 20) + playsound(src, 'sound/mobs/non-humanoids/orbie/orbie_send_out.ogg', 20) balloon_alert(user, "scanned") ui_interact(user) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher.dm index c3c30526dff74..c7648aa38b259 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher.dm @@ -29,7 +29,7 @@ /// Icon state for our eye overlay var/eye_glow = "ice_glow" /// Sound to play when we shoot - var/shoot_sound = 'sound/weapons/pierce.ogg' + var/shoot_sound = 'sound/items/weapons/pierce.ogg' /// Typepath of our gaze ability var/gaze_attack = /datum/action/cooldown/mob_cooldown/watcher_gaze // We attract and eat these things for some reason diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm index a61ea0743f9a4..f88624ce125be 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_overwatch.dm @@ -17,7 +17,7 @@ /// Type of projectile to fire var/projectile_type = /obj/projectile/temp/watcher /// Sound the projectile we fire makes - var/projectile_sound = 'sound/weapons/pierce.ogg' + var/projectile_sound = 'sound/items/weapons/pierce.ogg' /// Time to watch for var/overwatch_duration = 3 SECONDS diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index 54fe9a07367cf..bcf8071d7c289 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -18,7 +18,7 @@ obj_damage = 10 attack_verb_continuous = "drills" attack_verb_simple = "drill" - attack_sound = 'sound/weapons/circsawhit.ogg' + attack_sound = 'sound/items/weapons/circsawhit.ogg' sentience_type = SENTIENCE_MINEBOT speak_emote = list("states") mob_biotypes = MOB_ROBOTIC diff --git a/code/modules/mob/living/basic/minebots/minebot_abilities.dm b/code/modules/mob/living/basic/minebots/minebot_abilities.dm index 8d1a93bd42916..a421c5d81f48c 100644 --- a/code/modules/mob/living/basic/minebots/minebot_abilities.dm +++ b/code/modules/mob/living/basic/minebots/minebot_abilities.dm @@ -119,7 +119,7 @@ return FALSE var/obj/effect/mine/minebot/my_mine = new(my_turf) my_mine.ignore_list = owner.faction.Copy() - playsound(my_turf, 'sound/weapons/armbomb.ogg', 20) + playsound(my_turf, 'sound/items/weapons/armbomb.ogg', 20) StartCooldown() return TRUE @@ -132,7 +132,7 @@ /obj/effect/temp_visual/rising_rocket/Initialize(mapload) . = ..() - playsound(src, 'sound/weapons/minebot_rocket.ogg', 100, FALSE) + playsound(src, 'sound/items/weapons/minebot_rocket.ogg', 100, FALSE) animate(src, pixel_y = base_pixel_y + 500, time = duration, easing = EASE_IN) /obj/effect/temp_visual/falling_rocket @@ -154,7 +154,7 @@ animate(src, pixel_y = 0, time = duration) /obj/effect/temp_visual/falling_rocket/proc/create_explosion() - playsound(src, 'sound/weapons/minebot_rocket.ogg', 100, FALSE) + playsound(src, 'sound/items/weapons/minebot_rocket.ogg', 100, FALSE) var/datum/effect_system/fluid_spread/smoke/smoke = new smoke.set_up(1, holder = src) smoke.start() @@ -176,7 +176,7 @@ var/datum/effect_system/fluid_spread/smoke/smoke = new smoke.set_up(0, holder = src) smoke.start() - playsound(src, 'sound/effects/explosion3.ogg', 100) + playsound(src, 'sound/effects/explosion/explosion3.ogg', 100) victim.apply_damage(damage_to_apply) /obj/effect/mine/minebot/can_trigger(atom/movable/on_who) diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index 31fed0ec1f32c..8043fda65d0a6 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -98,7 +98,7 @@ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_pawn = controller.pawn living_pawn.say("REPAIRING [target]!") - living_pawn.UnarmedAttack(target) + controller.ai_interact(target = target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/repair_drone/finish_action(datum/ai_controller/controller, success, target_key) @@ -251,7 +251,7 @@ ///store ores in our body /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores/minebot - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/consume_ores/minebot + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/consume_ores/minebot hunt_chance = 100 /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores/minebot/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) @@ -263,10 +263,10 @@ return ..() -/datum/ai_behavior/hunt_target/unarmed_attack_target/consume_ores/minebot +/datum/ai_behavior/hunt_target/interact_with_target/consume_ores/minebot hunt_cooldown = 2 SECONDS -/datum/ai_behavior/hunt_target/unarmed_attack_target/consume_ores/minebot/target_caught(mob/living/hunter, obj/item/stack/ore/hunted) +/datum/ai_behavior/hunt_target/interact_with_target/consume_ores/minebot/target_caught(mob/living/hunter, obj/item/stack/ore/hunted) if(hunter.combat_mode) hunter.set_combat_mode(FALSE) return ..() diff --git a/code/modules/mob/living/basic/minebots/minebot_remote_control.dm b/code/modules/mob/living/basic/minebots/minebot_remote_control.dm index 3601940912389..742785769e90d 100644 --- a/code/modules/mob/living/basic/minebots/minebot_remote_control.dm +++ b/code/modules/mob/living/basic/minebots/minebot_remote_control.dm @@ -44,6 +44,8 @@ user.update_mouse_pointer() /obj/item/minebot_remote_control/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return NONE return ranged_interact_with_atom(interacting_with, user, modifiers) /obj/item/minebot_remote_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) @@ -54,7 +56,7 @@ if(isnull(target_turf) || isclosedturf(target_turf) || isgroundlessturf(target_turf)) user.balloon_alert(user, "invalid target!") return ITEM_INTERACT_BLOCKING - playsound(src, 'sound/machines/beep.ogg', 30) + playsound(src, 'sound/machines/beep/beep.ogg', 30) clear_priming() new /obj/effect/temp_visual/minebot_target(target_turf) COOLDOWN_START(src, bomb_timer, BOMB_COOLDOWN) 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 index 35a5d9e12afcf..655a6431fc2a7 100644 --- a/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm +++ b/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm @@ -9,7 +9,7 @@ /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 + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/stove_target finding_behavior = /datum/ai_behavior/find_hunt_target/stove hunt_targets = list(/obj/machinery/oven/range) hunt_range = 9 @@ -25,10 +25,10 @@ return FALSE return TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target +/datum/ai_behavior/hunt_target/interact_with_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) +/datum/ai_behavior/hunt_target/interact_with_target/stove_target/target_caught(mob/living/hunter, obj/machinery/oven/range/stove) if(stove.open) return return ..() diff --git a/code/modules/mob/living/basic/pets/cat/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm index 2bcd715d7f5c8..d91052a6816eb 100644 --- a/code/modules/mob/living/basic/pets/cat/cat.dm +++ b/code/modules/mob/living/basic/pets/cat/cat.dm @@ -29,7 +29,7 @@ held_state = "cat2" attack_verb_continuous = "claws" attack_verb_simple = "claw" - attack_sound = 'sound/weapons/slash.ogg' + attack_sound = 'sound/items/weapons/slash.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW ///icon of the collar we can wear var/collar_icon_state = "cat" @@ -52,12 +52,29 @@ ///icon state of our cult icon var/cult_icon_state = "cat_cult" +/datum/emote/living/basic/pet/cat/meow + key = "meow" + key_third_person = "meows" + message = "meows!" + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + vary = TRUE + sound = SFX_CAT_MEOW + +/datum/emote/living/basic/pet/cat/purr + key = "purr" + key_third_person = "purrs" + message = "purrs." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + vary = TRUE + sound = SFX_CAT_PURR + + /mob/living/basic/pet/cat/Initialize(mapload) . = ..() AddElement(/datum/element/cultist_pet, pet_cult_icon_state = cult_icon_state) AddElement(/datum/element/wears_collar, collar_icon_state = collar_icon_state, collar_resting_icon_state = TRUE) AddElement(/datum/element/ai_retaliate) - AddElement(/datum/element/pet_bonus, "purrs!") + AddElement(/datum/element/pet_bonus, null, /datum/mood_event/pet_animal, "purr") AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) add_cell_sample() add_verb(src, /mob/living/proc/toggle_resting) diff --git a/code/modules/mob/living/basic/pets/cat/cat_ai.dm b/code/modules/mob/living/basic/pets/cat/cat_ai.dm index d6589d29b407e..8dde10495681d 100644 --- a/code/modules/mob/living/basic/pets/cat/cat_ai.dm +++ b/code/modules/mob/living/basic/pets/cat/cat_ai.dm @@ -63,7 +63,7 @@ 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) + controller.ai_interact(target = home) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED @@ -213,13 +213,13 @@ /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 + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_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 +/datum/ai_behavior/hunt_target/interact_with_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) @@ -253,7 +253,6 @@ 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 diff --git a/code/modules/mob/living/basic/pets/dog/_dog.dm b/code/modules/mob/living/basic/pets/dog/_dog.dm index b1c2c5e486fc1..1ff991941d327 100644 --- a/code/modules/mob/living/basic/pets/dog/_dog.dm +++ b/code/modules/mob/living/basic/pets/dog/_dog.dm @@ -31,7 +31,7 @@ // The dog attack pet command can raise melee attack above 0 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE melee_attack_cooldown = 0.8 SECONDS /// Instructions you can give to dogs diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm index e1f05b33d81fb..ac213fbf30960 100644 --- a/code/modules/mob/living/basic/pets/dog/corgi.dm +++ b/code/modules/mob/living/basic/pets/dog/corgi.dm @@ -116,7 +116,7 @@ user.visible_message(span_notice("[user] starts to shave [src] using \the [attacking_item]."), span_notice("You start to shave [src] using \the [attacking_item]...")) if(do_after(user, 5 SECONDS, target = src)) user.visible_message(span_notice("[user] shaves [src]'s hair using \the [attacking_item].")) - playsound(get_turf(src), 'sound/items/welder2.ogg', 20, TRUE) + playsound(get_turf(src), 'sound/items/tools/welder2.ogg', 20, TRUE) shaved = TRUE icon_living = "[icon_living]_shaved" icon_dead = "[icon_living]_shaved_dead" @@ -399,7 +399,7 @@ place_on_head(new /obj/item/clothing/glasses/eyepatch/medical) /mob/living/basic/pet/dog/corgi/ian/narsie_act() - playsound(src, 'sound/magic/demon_dies.ogg', 75, TRUE) + playsound(src, 'sound/effects/magic/demon_dies.ogg', 75, TRUE) var/mob/living/basic/pet/dog/corgi/narsie/narsIan = new(loc) narsIan.setDir(dir) investigate_log("has been gibbed and replaced with Nars-Ian by Nar'Sie.", INVESTIGATE_DEATHS) @@ -486,7 +486,7 @@ return visible_message(span_warning("Dark magic resonating from [src] devours [prey]!"), \ "DELICIOUS SOULS") - playsound(src, 'sound/magic/demon_attack1.ogg', 75, TRUE) + playsound(src, 'sound/effects/magic/demon_attack1.ogg', 75, TRUE) new /obj/effect/temp_visual/cult/sac(get_turf(prey)) narsie_act() prey.investigate_log("has been sacrificed by [src].", INVESTIGATE_DEATHS) diff --git a/code/modules/mob/living/basic/pets/fox.dm b/code/modules/mob/living/basic/pets/fox.dm index 00272488f367b..a442f60715851 100644 --- a/code/modules/mob/living/basic/pets/fox.dm +++ b/code/modules/mob/living/basic/pets/fox.dm @@ -25,7 +25,7 @@ melee_damage_upper = 5 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE ai_controller = /datum/ai_controller/basic_controller/fox diff --git a/code/modules/mob/living/basic/pets/orbie/orbie.dm b/code/modules/mob/living/basic/pets/orbie/orbie.dm index c0c6dd7b023fc..a0fbba899e354 100644 --- a/code/modules/mob/living/basic/pets/orbie/orbie.dm +++ b/code/modules/mob/living/basic/pets/orbie/orbie.dm @@ -51,6 +51,7 @@ AddComponent(/datum/component/obeys_commands, pet_commands) AddElement(/datum/element/basic_eating, food_types = food_types) ADD_TRAIT(src, TRAIT_SILICON_EMOTES_ALLOWED, INNATE_TRAIT) + RegisterSignal(src, COMSIG_ATOM_CAN_BE_PULLED, PROC_REF(on_pulled)) RegisterSignal(src, COMSIG_VIRTUAL_PET_LEVEL_UP, PROC_REF(on_level_up)) RegisterSignal(src, COMSIG_MOB_CLICKON, PROC_REF(on_click)) diff --git a/code/modules/mob/living/basic/pets/parrot/_parrot.dm b/code/modules/mob/living/basic/pets/parrot/_parrot.dm index c23481d85a7ec..e61b052217909 100644 --- a/code/modules/mob/living/basic/pets/parrot/_parrot.dm +++ b/code/modules/mob/living/basic/pets/parrot/_parrot.dm @@ -152,11 +152,6 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list( . = ..() . += "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) diff --git a/code/modules/mob/living/basic/pets/parrot/poly.dm b/code/modules/mob/living/basic/pets/parrot/poly.dm index cba3dd6e588e3..f825788decd98 100644 --- a/code/modules/mob/living/basic/pets/parrot/poly.dm +++ b/code/modules/mob/living/basic/pets/parrot/poly.dm @@ -191,9 +191,9 @@ 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 + status_flags = NONE butcher_results = list(/obj/item/ectoplasm = 1) ai_controller = /datum/ai_controller/basic_controller/parrot/ghost speech_probability_rate = 1 @@ -202,7 +202,7 @@ /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) + add_traits(list(TRAIT_GODMODE, TRAIT_DONT_WRITE_MEMORY), INNATE_TRAIT) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) return ..() diff --git a/code/modules/mob/living/basic/pets/pet_cult/pet_cult_abilities.dm b/code/modules/mob/living/basic/pets/pet_cult/pet_cult_abilities.dm index 83d70336f2c0c..79631c96dca4f 100644 --- a/code/modules/mob/living/basic/pets/pet_cult/pet_cult_abilities.dm +++ b/code/modules/mob/living/basic/pets/pet_cult/pet_cult_abilities.dm @@ -11,4 +11,4 @@ ) summon_radius = 0 create_summon_timer = 5 SECONDS - sound = 'sound/magic/exit_blood.ogg' + sound = 'sound/effects/magic/exit_blood.ogg' diff --git a/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm b/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm index fb10680991895..77263b1748963 100644 --- a/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm +++ b/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm @@ -111,9 +111,7 @@ if(isnull(revive_mob) || revive_mob.stat != DEAD || !(revive_mob.mind in cult_team.members)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/mob/living/basic/living_pawn = controller.pawn - living_pawn.melee_attack(target) - + controller.ai_interact(target = target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/activate_rune/finish_action(datum/ai_controller/controller, success, target_key) diff --git a/code/modules/mob/living/basic/pets/sloth.dm b/code/modules/mob/living/basic/pets/sloth.dm index 125a3a7b97d6a..9cd7711aa0672 100644 --- a/code/modules/mob/living/basic/pets/sloth.dm +++ b/code/modules/mob/living/basic/pets/sloth.dm @@ -22,7 +22,7 @@ GLOBAL_DATUM(cargo_sloth, /mob/living/basic/sloth) attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE mob_biotypes = MOB_ORGANIC|MOB_BEAST diff --git a/code/modules/mob/living/basic/revolutionary.dm b/code/modules/mob/living/basic/revolutionary.dm new file mode 100644 index 0000000000000..8aa41b3c7230d --- /dev/null +++ b/code/modules/mob/living/basic/revolutionary.dm @@ -0,0 +1,146 @@ +/mob/living/basic/revolutionary + name = "Revolutionary" + desc = "They stand for a cause..." + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + faction = list(FACTION_HOSTILE) + icon = 'icons/mob/simple/simple_human.dmi' + gender = MALE + basic_mob_flags = DEL_ON_DEATH + attack_verb_continuous = "robusts" + attack_verb_simple = "robust" + maxHealth = 50 + health = 50 + melee_damage_lower = 15 + melee_damage_upper = 20 + obj_damage = 20 + attack_sound = 'sound/items/weapons/smash.ogg' + ai_controller = /datum/ai_controller/basic_controller/revolutionary + /// list of weapons we can have + var/static/list/possible_weapons = list( + /obj/item/storage/toolbox/mechanical = "robust", + /obj/item/spear = "pierce", + /obj/item/fireaxe = "slice", + /obj/item/melee/baseball_bat = "bat", + /obj/item/melee/baton = "discipline", + ) + /// List of things to shout + var/static/list/phrases = list( + "The revolution will not be televized!", + "VIVA!", + "Dirty pig!", + "Gondola meat is murder!", + "Free Cargonia!", + "Mime rights are human rights!", + "猫娘 Free Terry!", + ) + /// List of causes to #support + var/static/list/causes = list( + "Worker's rights", + "Icemoon climate change", + "Fair clown treatment", + "Lizards", + "Moths", + "Stop Lavaland drilling", + "The Captain has been replaced by a robot", + "Free Cargonia", + "Befriend all space dragons", + "The Grey Tide", + "Rising cost of medbay", + ) + /// Monkey screeches + var/static/list/monkey_screeches = list( + 'sound/mobs/non-humanoids/monkey/monkey_screech_1.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_2.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_3.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_4.ogg', + ) + /// Male screams + var/static/list/male_screams = list( + 'sound/mobs/humanoids/human/scream/malescream_1.ogg', + 'sound/mobs/humanoids/human/scream/malescream_2.ogg', + 'sound/mobs/humanoids/human/scream/malescream_3.ogg', + 'sound/mobs/humanoids/human/scream/malescream_4.ogg', + 'sound/mobs/humanoids/human/scream/malescream_5.ogg', + ) + /// Female screams + var/static/list/female_screams = list( + 'sound/mobs/humanoids/human/scream/femalescream_1.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_2.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_3.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_4.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_5.ogg', + ) + + +/mob/living/basic/revolutionary/Initialize(mapload) + . = ..() + shuffle_inplace(phrases) + var/static/list/display_emote = list( + BB_EMOTE_SAY = phrases, + BB_EMOTE_SOUND = monkey_screeches, + BB_SPEAK_CHANCE = 5, + ) + ai_controller.set_blackboard_key(BB_BASIC_MOB_SPEAK_LINES, display_emote) + var/obj/item/weapon_of_choice = pick(possible_weapons) + attack_sound = weapon_of_choice::hitsound + attack_verb_simple = possible_weapons[weapon_of_choice] + attack_verb_continuous = "[attack_verb_simple]s" + + var/static/list/death_loot = list(/obj/effect/mob_spawn/corpse/human/revolutionary) + AddElement(/datum/element/death_drops, death_loot) + apply_dynamic_human_appearance(src, mob_spawn_path = /obj/effect/mob_spawn/corpse/human/revolutionary, l_hand = weapon_of_choice) + + gender = pick(MALE, FEMALE, PLURAL) + var/first_name + switch(gender) + if(MALE) + first_name = pick(GLOB.first_names_male) + death_sound = pick(male_screams + monkey_screeches) + if(FEMALE) + first_name = pick(GLOB.first_names_female) + death_sound = pick(female_screams + monkey_screeches) + if(PLURAL) + first_name = pick(GLOB.first_names) + death_sound = pick(male_screams + female_screams + monkey_screeches) + + fully_replace_character_name(name, "[first_name] [pick(GLOB.last_names)]") + desc += span_infoplain("\nToday, that cause is: ") + shuffle_inplace(causes) + desc += span_notice("#[pick(causes)].") + + +/obj/effect/mob_spawn/corpse/human/revolutionary + name = "Revolutionary" + outfit = /datum/outfit/revolution + + +/datum/outfit/revolution + name = "Revolution" + uniform = /obj/item/clothing/under/color/grey + head = /obj/item/clothing/head/costume/ushanka + mask = /obj/item/clothing/mask/gas + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/jackboots + + +/datum/ai_controller/basic_controller/revolutionary + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/blackboard/revolutionary, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + + +/datum/ai_planning_subtree/random_speech/blackboard/revolutionary + + +/datum/ai_planning_subtree/random_speech/blackboard/revolutionary/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) + return + + return ..() diff --git a/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm b/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm index e9b62f9deaf2e..6287c1f25e19e 100644 --- a/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm +++ b/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm @@ -31,8 +31,8 @@ var/datum/action/cooldown/mob_cooldown/targeted_mob_ability/donk_laser //is this being used as part of the haunted trading post ruin? if true, stuff there will self destruct when this mob dies var/donk_ai_master = FALSE -// list of stuff tagged to self destruct when this mob dies -GLOBAL_LIST_EMPTY(selfdestructs_when_boss_dies) + /// the queue id for the stuff that selfdestructs when we die + var/selfdestruct_queue_id = "hauntedtradingpost_sd" /mob/living/basic/cybersun_ai_core/Initialize(mapload) . = ..() @@ -45,21 +45,20 @@ GLOBAL_LIST_EMPTY(selfdestructs_when_boss_dies) BARRAGE_ABILITY_TYPEPATH = BB_CYBERSUN_CORE_BARRAGE, ) grant_actions_by_list(innate_actions) + if(mapload && donk_ai_master) + return INITIALIZE_HINT_LATELOAD + +/mob/living/basic/cybersun_ai_core/LateInitialize() + SSqueuelinks.add_to_queue(src, selfdestruct_queue_id) + SSqueuelinks.pop_link(selfdestruct_queue_id) + +/mob/living/basic/cybersun_ai_core/MatchedLinks(id, list/partners) // id == queue id (for multiple queue objects) + if(id != selfdestruct_queue_id) + return + for(var/datum/partner as anything in partners) // all our partners in the selfdestruct queue are now registered to qdel if I die + partner.RegisterSignal(src, COMSIG_QDELETING, TYPE_PROC_REF(/datum, selfdelete)) /mob/living/basic/cybersun_ai_core/death(gibbed) - if(donk_ai_master == TRUE) - //disable all the tripwire traps - for (var/obj/item/pressure_plate/puzzle/invisible_tripwire as anything in GLOB.selfdestructs_when_boss_dies) - qdel(invisible_tripwire) - //and the electric overload traps - for (var/obj/effect/overloader_trap as anything in GLOB.selfdestructs_when_boss_dies) - qdel(overloader_trap) - //then disable the AI defence holograms - for (var/obj/structure/holosign/barrier/cyborg/cybersun_ai_shield as anything in GLOB.selfdestructs_when_boss_dies) - qdel(cybersun_ai_shield) - //then the power generator - for (var/obj/machinery/power/smes/magical/cybersun as anything in GLOB.selfdestructs_when_boss_dies) - qdel(cybersun) do_sparks(number = 5, source = src) return ..() @@ -78,7 +77,7 @@ GLOBAL_LIST_EMPTY(selfdestructs_when_boss_dies) ///dramatic death animations var/turf/my_turf = get_turf(src) new /obj/effect/gibspawner/robot(my_turf) - playsound(loc, 'sound/effects/explosion2.ogg', vol = 75, vary = TRUE, pressure_affected = FALSE) + playsound(loc, 'sound/effects/explosion/explosion2.ogg', vol = 75, vary = TRUE, pressure_affected = FALSE) for (var/mob/witness in range(10, src)) if (!witness.client || !isliving(witness)) continue @@ -120,7 +119,7 @@ GLOBAL_LIST_EMPTY(selfdestructs_when_boss_dies) . = ..() //this is where the spell will hit. it will not move even if the target does, allowing the spell to be dodged. new/obj/effect/temp_visual/lightning_strike(get_turf(target)) - playsound(owner, 'sound/effects/sparks1.ogg', vol = 120, vary = TRUE) + playsound(owner, 'sound/effects/sparks/sparks1.ogg', vol = 120, vary = TRUE) /obj/effect/temp_visual/lightning_strike name = "lightning strike" @@ -143,7 +142,7 @@ GLOBAL_LIST_EMPTY(selfdestructs_when_boss_dies) /obj/effect/temp_visual/lightning_strike/proc/zap() new/obj/effect/temp_visual/lightning_strike_zap(loc) - playsound(src, 'sound/magic/lightningbolt.ogg', vol = 70, vary = TRUE) + playsound(src, 'sound/effects/magic/lightningbolt.ogg', vol = 70, vary = TRUE) if (!isturf(loc)) return for(var/mob/living/victim in loc) @@ -189,7 +188,7 @@ GLOBAL_LIST_EMPTY(selfdestructs_when_boss_dies) if(lockon_zone == my_turf) return my_turf.Beam(lockon_zone, icon_state = "1-full", beam_color = COLOR_MEDIUM_DARK_RED, time = barrage_delay) - playsound(lockon_zone, 'sound/machines/terminal_prompt_deny.ogg', vol = 60, vary = TRUE) + playsound(lockon_zone, 'sound/machines/terminal/terminal_prompt_deny.ogg', vol = 60, vary = TRUE) StartCooldown(cooldown_time) return ..() diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm index 359705ecff2bd..c5ff2fb90e740 100644 --- a/code/modules/mob/living/basic/ruin_defender/flesh.dm +++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm @@ -25,7 +25,7 @@ melee_damage_upper = 10 health = 20 maxHealth = 20 - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE attack_verb_continuous = "tries desperately to attach to" attack_verb_simple = "try to attach to" @@ -83,7 +83,7 @@ victim.visible_message(span_warning("[victim]'s [current_bodypart.name] instinctively starts feeling [candidate]!")) if (!victim.anchored && !prob(victim.combat_mode ? LIVING_FLESH_COMBAT_TOUCH_CHANCE : LIVING_FLESH_TOUCH_CHANCE)) - victim.start_pulling(candidate, supress_message = TRUE) + INVOKE_ASYNC(victim, TYPE_PROC_REF(/atom/movable, start_pulling), candidate, supress_message = TRUE) return var/active_hand = victim.active_hand_index 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 105838f0c55dd..7a9b6ae59f18a 100644 --- a/code/modules/mob/living/basic/ruin_defender/living_floor.dm +++ b/code/modules/mob/living/basic/ruin_defender/living_floor.dm @@ -26,7 +26,7 @@ icon_living = "floor" mob_size = MOB_SIZE_HUGE mob_biotypes = MOB_SPECIAL - status_flags = GODMODE //nothing but crowbars may kill us + status_flags = NONE death_message = "" unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 @@ -40,7 +40,7 @@ faction = list(FACTION_HOSTILE) melee_damage_lower = 20 melee_damage_upper = 40 //pranked..... - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE attack_verb_continuous = "bites" attack_verb_simple = "bite" @@ -52,7 +52,7 @@ /mob/living/basic/living_floor/Initialize(mapload) . = ..() - ADD_TRAIT(src, TRAIT_IMMOBILIZED, INNATE_TRAIT) + add_traits(list(TRAIT_GODMODE, TRAIT_IMMOBILIZED), INNATE_TRAIT) //nothing but crowbars may kill us var/static/list/connections = list(COMSIG_ATOM_ENTERED = PROC_REF(look_aggro), COMSIG_ATOM_EXITED = PROC_REF(look_deaggro)) AddComponent(/datum/component/connect_range, tracked = src, connections = connections, range = 1, works_in_containers = FALSE) @@ -84,7 +84,7 @@ if(weapon.tool_behaviour != TOOL_CROWBAR) return ..() balloon_alert(user, "prying...") - playsound(src, 'sound/items/crowbar.ogg', 45, TRUE) + playsound(src, 'sound/items/tools/crowbar.ogg', 45, TRUE) if(!do_after(user, 5 SECONDS, src)) return new /obj/effect/gibspawner/generic(loc) diff --git a/code/modules/mob/living/basic/ruin_defender/skeleton.dm b/code/modules/mob/living/basic/ruin_defender/skeleton.dm index fbe3b74c43f27..e6754a80a22da 100644 --- a/code/modules/mob/living/basic/ruin_defender/skeleton.dm +++ b/code/modules/mob/living/basic/ruin_defender/skeleton.dm @@ -15,7 +15,7 @@ unsuitable_heat_damage = 0 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/slash.ogg' + attack_sound = 'sound/items/weapons/slash.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW faction = list(FACTION_SKELETON) // Going for a sort of pale bluegreen here, shooting for boneish @@ -63,7 +63,7 @@ melee_damage_upper = 20 attack_verb_continuous = "jabs" attack_verb_simple = "jab" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH death_message = "collapses into a pile of bones, its gear falling to the floor!" loot = list( @@ -92,7 +92,7 @@ melee_damage_upper = 30 attack_verb_continuous = "slices" attack_verb_simple = "slice" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH death_message = "collapses into a pile of bones, its gear clanging as it hits the ground!" loot = list( @@ -146,7 +146,7 @@ melee_damage_upper = 25 attack_verb_continuous = "blasts" attack_verb_simple = "blast" - attack_sound = 'sound/weapons/sonic_jackhammer.ogg' + attack_sound = 'sound/items/weapons/sonic_jackhammer.ogg' attack_vis_effect = null loot = list(/obj/effect/decal/remains/plasma, /obj/item/pickaxe/drill/jackhammer) held_item = /obj/item/pickaxe/drill/jackhammer diff --git a/code/modules/mob/living/basic/ruin_defender/stickman.dm b/code/modules/mob/living/basic/ruin_defender/stickman.dm index 588a75c634643..3435f873ea35f 100644 --- a/code/modules/mob/living/basic/ruin_defender/stickman.dm +++ b/code/modules/mob/living/basic/ruin_defender/stickman.dm @@ -14,7 +14,7 @@ melee_damage_lower = 10 melee_damage_upper = 10 melee_attack_cooldown = 1.5 SECONDS - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' combat_mode = TRUE faction = list(FACTION_STICKMAN) unsuitable_atmos_damage = 7.5 @@ -54,7 +54,7 @@ attack_vis_effect = ATTACK_EFFECT_BITE sharpness = SHARP_POINTY mob_biotypes = MOB_BEAST - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' /mob/living/basic/stickman/ranged name = "Angry Stick Gunman" @@ -65,7 +65,7 @@ attack_verb_simple = "whack" melee_damage_lower = 5 melee_damage_upper = 5 - attack_sound = 'sound/weapons/genhit1.ogg' + attack_sound = 'sound/items/weapons/genhit1.ogg' ai_controller = /datum/ai_controller/basic_controller/stickman/ranged diff --git a/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm b/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm index 7c35184af3717..48dca2eea60f0 100644 --- a/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm +++ b/code/modules/mob/living/basic/ruin_defender/wizard/wizard.dm @@ -14,7 +14,7 @@ melee_damage_upper = 5 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/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 diff --git a/code/modules/mob/living/basic/slime/ai/behaviours.dm b/code/modules/mob/living/basic/slime/ai/behaviours.dm index 35fe1a60c91a1..fe8102eee112f 100644 --- a/code/modules/mob/living/basic/slime/ai/behaviours.dm +++ b/code/modules/mob/living/basic/slime/ai/behaviours.dm @@ -54,9 +54,9 @@ //We are not THAT hungry return FALSE -/datum/ai_behavior/hunt_target/unarmed_attack_target/slime +/datum/ai_behavior/hunt_target/interact_with_target/slime -/datum/ai_behavior/hunt_target/unarmed_attack_target/slime/target_caught(mob/living/basic/slime/hunter, mob/living/hunted) +/datum/ai_behavior/hunt_target/interact_with_target/slime/target_caught(mob/living/basic/slime/hunter, mob/living/hunted) if (!hunter.can_feed_on(hunted)) // Target is no longer edible hunter.UnarmedAttack(hunted, TRUE) return @@ -71,7 +71,7 @@ hunter.start_feeding(hunted) -/datum/ai_behavior/hunt_target/unarmed_attack_target/slime/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) +/datum/ai_behavior/hunt_target/interact_with_target/slime/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) . = ..() var/mob/living/basic/slime/slime_pawn = controller.pawn var/atom/target = controller.blackboard[hunting_target_key] diff --git a/code/modules/mob/living/basic/slime/ai/pet_command.dm b/code/modules/mob/living/basic/slime/ai/pet_command.dm index 42d6b28993728..33484e360fbed 100644 --- a/code/modules/mob/living/basic/slime/ai/pet_command.dm +++ b/code/modules/mob/living/basic/slime/ai/pet_command.dm @@ -4,7 +4,7 @@ pointed_reaction = "and blorbles" refuse_reaction = "jiggles sadly" - var/hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/slime + var/hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/slime /datum/pet_command/point_targeting/attack/slime/execute_action(datum/ai_controller/controller) diff --git a/code/modules/mob/living/basic/slime/ai/subtrees.dm b/code/modules/mob/living/basic/slime/ai/subtrees.dm index 056befece5d4b..08886f98365a6 100644 --- a/code/modules/mob/living/basic/slime/ai/subtrees.dm +++ b/code/modules/mob/living/basic/slime/ai/subtrees.dm @@ -24,7 +24,7 @@ // Slime subtree for hunting down people to drain /datum/ai_planning_subtree/find_and_hunt_target/find_slime_food finding_behavior = /datum/ai_behavior/find_hunt_target/find_slime_food - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/slime + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/slime hunt_targets = list(/mob/living) hunt_range = 7 diff --git a/code/modules/mob/living/basic/slime/defense.dm b/code/modules/mob/living/basic/slime/defense.dm index a3242525170c7..19507b4cd029d 100644 --- a/code/modules/mob/living/basic/slime/defense.dm +++ b/code/modules/mob/living/basic/slime/defense.dm @@ -15,11 +15,11 @@ if(buckled == attacker ? prob(60) : prob(30)) //its easier to remove the slime from yourself attacker.visible_message(span_warning("[attacker] attempts to wrestle \the [defender_slime.name] off [buckled == attacker ? "" : buckled] !"), \ span_danger("[buckled == attacker ? "You attempt" : "[attacker] attempts" ] to wrestle \the [defender_slime.name] off [buckled == attacker ? "" : buckled]!")) - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/punchmiss.ogg', 25, TRUE, -1) return attacker.visible_message(span_warning("[attacker] manages to wrestle \the [defender_slime.name] off!"), span_notice("You manage to wrestle \the [defender_slime.name] off!")) - playsound(loc, 'sound/weapons/shove.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/shove.ogg', 50, TRUE, -1) defender_slime.discipline_slime() @@ -87,7 +87,7 @@ 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) + playsound(src, 'sound/effects/blob/attackblob.ogg', 50, TRUE) spawn_corecross() has_output = TRUE break @@ -99,7 +99,7 @@ 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) + playsound(src, 'sound/effects/blob/attackblob.ogg', 50, TRUE) ///Handles the adverse effects of water on slimes /mob/living/basic/slime/proc/apply_water() diff --git a/code/modules/mob/living/basic/slime/slime.dm b/code/modules/mob/living/basic/slime/slime.dm index 6adf4e35f3582..010913f44258b 100644 --- a/code/modules/mob/living/basic/slime/slime.dm +++ b/code/modules/mob/living/basic/slime/slime.dm @@ -14,7 +14,7 @@ icon_living = "grey-baby" icon_dead = "grey-baby-dead" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' //Base physiology @@ -353,7 +353,7 @@ /mob/living/basic/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) + playsound(src, 'sound/effects/magic/smoke.ogg', 50, TRUE) var/selected_crossbreed_path for(var/crossbreed_path in crossbreeds) var/obj/item/slimecross/cross_item = crossbreed_path diff --git a/code/modules/mob/living/basic/space_fauna/ant.dm b/code/modules/mob/living/basic/space_fauna/ant.dm index 26a904340b7c5..7fbbe03e631cd 100644 --- a/code/modules/mob/living/basic/space_fauna/ant.dm +++ b/code/modules/mob/living/basic/space_fauna/ant.dm @@ -15,7 +15,7 @@ melee_damage_upper = 10 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE butcher_results = list(/obj/effect/decal/cleanable/ants = 3) //It's just a bunch of ants glued together into a larger ant response_help_continuous = "pets" 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 f4a1267e9db70..9b60f7f815998 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm @@ -26,7 +26,7 @@ sharpness = SHARP_EDGED attack_verb_continuous = "claws" attack_verb_simple = "claw" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW friendly_verb_continuous = "bear hugs" friendly_verb_simple = "bear hug" @@ -42,7 +42,7 @@ /mob/living/basic/bear/Initialize(mapload) . = ..() - add_traits(list(TRAIT_SPACEWALK, TRAIT_FENCE_CLIMBER), INNATE_TRAIT) + add_traits(list(TRAIT_SPACEWALK, TRAIT_FENCE_CLIMBER, TRAIT_SNOWSTORM_IMMUNE), INNATE_TRAIT) AddElement(/datum/element/ai_retaliate) AddComponent(/datum/component/tree_climber, climbing_distance = 15) AddElement(/datum/element/swabable, CELL_LINE_TABLE_BEAR, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) @@ -90,16 +90,16 @@ maxHealth = 250 health = 250 faction = list(FACTION_NEUTRAL) + status_flags = CANPUSH /mob/living/basic/bear/snow/ancient name = "ancient polar bear" desc = "A grizzled old polar bear, its hide thick enough to make it impervious to almost all weapons." - status_flags = CANPUSH | GODMODE gold_core_spawnable = NO_SPAWN -/mob/living/basic/bear/snow/Initialize(mapload) +/mob/living/basic/bear/snow/ancient/Initialize(mapload) . = ..() - ADD_TRAIT(src, TRAIT_SNOWSTORM_IMMUNE, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_GODMODE, INNATE_TRAIT) /mob/living/basic/bear/russian name = "combat bear" @@ -135,7 +135,7 @@ attacked_sound = 'sound/items/eatfood.ogg' death_message = "loses its false life and collapses!" butcher_results = list(/obj/item/food/butter = 6, /obj/item/food/meat/slab = 3, /obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1) - attack_sound = 'sound/weapons/slap.ogg' + attack_sound = 'sound/items/weapons/slap.ogg' attack_vis_effect = ATTACK_EFFECT_DISARM attack_verb_simple = "slap" attack_verb_continuous = "slaps" 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 1d32b7809a89e..3461f5b104e98 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm @@ -27,7 +27,7 @@ obj_damage = 50 melee_damage_lower = 20 melee_damage_upper = 20 - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE attack_verb_continuous = "bites" attack_verb_simple = "bite" diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_abilities.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_abilities.dm index 322d4db193c21..24c5fb4ece2ec 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_abilities.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_abilities.dm @@ -9,7 +9,7 @@ button_icon = 'icons/obj/weapons/guns/projectiles.dmi' button_icon_state = "arcane_barrage" cooldown_time = 5 SECONDS - projectile_sound = 'sound/weapons/emitter.ogg' + projectile_sound = 'sound/items/weapons/emitter.ogg' melee_cooldown_time = 0 SECONDS // Without this they become extremely hesitant to bite anyone ever shared_cooldown = MOB_SHARED_COOLDOWN_2 @@ -140,8 +140,8 @@ var/turf/destination = pick(exit_locs) do_teleport(entered_atom, destination, channel = TELEPORT_CHANNEL_MAGIC) - playsound(src, 'sound/magic/wand_teleport.ogg', 50) - playsound(destination, 'sound/magic/wand_teleport.ogg', 50) + playsound(src, 'sound/effects/magic/wand_teleport.ogg', 50) + playsound(destination, 'sound/effects/magic/wand_teleport.ogg', 50) /// Doesn't actually do anything, just a visual marker /obj/effect/temp_visual/lesser_carp_rift/exit 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 02faf7c2cc9f2..246b025d559dc 100644 --- a/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm +++ b/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm @@ -19,7 +19,7 @@ melee_damage_upper = 15 attack_verb_continuous = "slashes at" attack_verb_simple = "slash at" - attack_sound = 'sound/weapons/circsawhit.ogg' + attack_sound = 'sound/items/weapons/circsawhit.ogg' combat_mode = TRUE mob_biotypes = MOB_ORGANIC|MOB_HUMANOID sentience_type = SENTIENCE_HUMANOID 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 80e1768c90eba..844535c01e9ba 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 @@ -28,7 +28,7 @@ melee_attack_cooldown = CLICK_CD_MELEE attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE unsuitable_cold_damage = 4 unsuitable_heat_damage = 4 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 27a9f7d07ae1e..d7aa8903398a6 100644 --- a/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm +++ b/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm @@ -16,7 +16,7 @@ melee_damage_upper = 5 attack_verb_continuous = "chomps" attack_verb_simple = "chomp" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE mob_biotypes = MOB_ORGANIC|MOB_SPECIAL faction = list(FACTION_CREATURE) diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon.dm b/code/modules/mob/living/basic/space_fauna/demon/demon.dm index 21eaf66a3e869..f61591a10c7e7 100644 --- a/code/modules/mob/living/basic/space_fauna/demon/demon.dm +++ b/code/modules/mob/living/basic/space_fauna/demon/demon.dm @@ -23,7 +23,7 @@ status_flags = CANPUSH combat_mode = TRUE - attack_sound = 'sound/magic/demon_attack1.ogg' + attack_sound = 'sound/effects/magic/demon_attack1.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW faction = list(FACTION_HELL) @@ -34,7 +34,7 @@ melee_damage_upper = 15 melee_attack_cooldown = CLICK_CD_MELEE death_message = "screams in agony as it sublimates into a sulfurous smoke." - death_sound = 'sound/magic/demon_dies.ogg' + death_sound = 'sound/effects/magic/demon_dies.ogg' habitable_atmos = null minimum_survivable_temperature = T0C - 25 //Weak to cold @@ -66,9 +66,9 @@ if(isnull(antag_type) || mind.has_antag_datum(antag_type)) return // we weren't built for this proc to run - mind.set_assigned_role(SSjob.GetJobType(/datum/job/slaughter_demon)) + mind.set_assigned_role(SSjob.get_job_type(/datum/job/slaughter_demon)) mind.special_role = ROLE_SLAUGHTER_DEMON mind.add_antag_datum(antag_type) - SEND_SOUND(src, 'sound/magic/demon_dies.ogg') + SEND_SOUND(src, 'sound/effects/magic/demon_dies.ogg') to_chat(src, span_bold("You are currently not currently in the same plane of existence as the station. Use your Blood Crawl ability near a pool of blood to manifest and wreak havoc.")) 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 1cc7549f0ea3b..811186d43ad9a 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 @@ -18,7 +18,7 @@ span_warning("[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!"), span_danger("An unnatural hunger consumes you. You raise [src] your mouth and devour it!"), ) - playsound(user, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(user, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) if(locate(/datum/action/cooldown/spell/jaunt/bloodcrawl) in user.actions) to_chat(user, span_warning("...and you don't feel any different.")) 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 6ad7ff77f1dd4..c036fe461690e 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm @@ -24,7 +24,7 @@ attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE faction = list(FACTION_SPOOKY) diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm index f50fca8c559da..5051f8153714d 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm @@ -83,6 +83,6 @@ else return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED -/datum/ai_behavior/hunt_target/unarmed_attack_target/carrot +/datum/ai_behavior/hunt_target/interact_with_target/carrot hunt_cooldown = 2 SECONDS always_reset_target = TRUE 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 29ea1dfc352ea..17b260d03ed72 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 @@ -47,6 +47,6 @@ /datum/ai_planning_subtree/find_and_hunt_target/carrot target_key = BB_LOW_PRIORITY_HUNTING_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/carrot + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/carrot hunt_targets = list(/obj/item/food/grown/carrot) hunt_range = 6 diff --git a/code/modules/mob/living/basic/space_fauna/faithless.dm b/code/modules/mob/living/basic/space_fauna/faithless.dm index 39f5652d1a0a4..1cf8218a0fced 100644 --- a/code/modules/mob/living/basic/space_fauna/faithless.dm +++ b/code/modules/mob/living/basic/space_fauna/faithless.dm @@ -17,7 +17,7 @@ melee_damage_upper = 15 attack_verb_continuous = "grips" attack_verb_simple = "grip" - attack_sound = 'sound/hallucinations/growl1.ogg' + attack_sound = 'sound/effects/hallucinations/growl1.ogg' melee_attack_cooldown = 1 SECONDS speak_emote = list("growls") 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 6608867f2a391..08e4cc7d2c0ff 100644 --- a/code/modules/mob/living/basic/space_fauna/garden_gnome.dm +++ b/code/modules/mob/living/basic/space_fauna/garden_gnome.dm @@ -16,7 +16,7 @@ melee_damage_upper = 10 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' melee_attack_cooldown = 1.2 SECONDS damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) speak_emote = list("announces") diff --git a/code/modules/mob/living/basic/space_fauna/ghost.dm b/code/modules/mob/living/basic/space_fauna/ghost.dm index 728c5ead9f4a8..00bcc45445e29 100644 --- a/code/modules/mob/living/basic/space_fauna/ghost.dm +++ b/code/modules/mob/living/basic/space_fauna/ghost.dm @@ -19,7 +19,7 @@ unsuitable_atmos_damage = 0 unsuitable_cold_damage = 0 unsuitable_heat_damage = 0 - attack_sound = 'sound/hallucinations/growl1.ogg' + attack_sound = 'sound/effects/hallucinations/growl1.ogg' death_message = "wails, disintegrating into a pile of ectoplasm!" gold_core_spawnable = NO_SPAWN //too spooky for science light_system = OVERLAY_LIGHT 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 c9e155d2bdaed..6b72f1f09757e 100644 --- a/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm +++ b/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm @@ -16,7 +16,7 @@ attack_verb_continuous = "claws" attack_verb_simple = "claw" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW verb_say = "states" verb_ask = "queries" 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 c859289b56d7d..a784f57763247 100644 --- a/code/modules/mob/living/basic/space_fauna/killer_tomato.dm +++ b/code/modules/mob/living/basic/space_fauna/killer_tomato.dm @@ -26,7 +26,7 @@ melee_damage_upper = 12 attack_verb_continuous = "slams" attack_verb_simple = "slam" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' faction = list(FACTION_PLANTS) habitable_atmos = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/chasing_spikes.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/chasing_spikes.dm index a0f9d2fb51be7..b50b089b0ffa4 100644 --- a/code/modules/mob/living/basic/space_fauna/meteor_heart/chasing_spikes.dm +++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/chasing_spikes.dm @@ -12,7 +12,7 @@ /datum/action/cooldown/mob_cooldown/chasing_spikes/Activate(atom/target) . = ..() - playsound(owner, 'sound/magic/demon_attack1.ogg', vol = 100, vary = TRUE, pressure_affected = FALSE) + playsound(owner, 'sound/effects/magic/demon_attack1.ogg', vol = 100, vary = TRUE, pressure_affected = FALSE) var/obj/effect/temp_visual/effect_trail/spike_chaser/chaser = new(get_turf(owner), target) LAZYADD(active_chasers, WEAKREF(chaser)) RegisterSignal(chaser, COMSIG_QDELETING, PROC_REF(on_chaser_destroyed)) @@ -75,6 +75,6 @@ var/target_zone = victim.resting ? BODY_ZONE_CHEST : pick_weight(standing_damage_zones) victim.apply_damage(impale_damage, damagetype = BRUTE, def_zone = target_zone, sharpness = SHARP_POINTY) if (hit_someone) - playsound(src, 'sound/weapons/slice.ogg', vol = 50, vary = TRUE, pressure_affected = FALSE) + playsound(src, 'sound/items/weapons/slice.ogg', vol = 50, vary = TRUE, pressure_affected = FALSE) else playsound(src, 'sound/misc/splort.ogg', vol = 25, vary = TRUE, pressure_affected = FALSE) 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 7a46e84435555..ae66369dd9328 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 @@ -102,7 +102,7 @@ /obj/effect/temp_visual/meteor_heart_death/Initialize(mapload) . = ..() - playsound(src, 'sound/magic/demon_dies.ogg', vol = 100, vary = TRUE, pressure_affected = FALSE) + playsound(src, 'sound/effects/magic/demon_dies.ogg', vol = 100, vary = TRUE, pressure_affected = FALSE) Shake(2, 0, 3 SECONDS) addtimer(CALLBACK(src, PROC_REF(gib)), duration - 1, TIMER_DELETE_ME) soundloop = new(src, start_immediately = FALSE) @@ -116,7 +116,7 @@ /// Make this place a mess /obj/effect/temp_visual/meteor_heart_death/proc/gib() - playsound(loc, 'sound/effects/attackblob.ogg', vol = 100, vary = TRUE, pressure_affected = FALSE) + playsound(loc, 'sound/effects/blob/attackblob.ogg', vol = 100, vary = TRUE, pressure_affected = FALSE) var/turf/my_turf = get_turf(src) new /obj/effect/gibspawner/human(my_turf) for (var/obj/structure/eyeball as anything in GLOB.meteor_eyeballs) 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 8ddcc1ed9e401..e41fa80a15b1c 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 @@ -17,7 +17,7 @@ /datum/action/cooldown/mob_cooldown/spine_traps/Activate(atom/target) . = ..() - playsound(owner, 'sound/magic/demon_consume.ogg', vol = 100, falloff_exponent = 2, vary = TRUE, pressure_affected = FALSE) + playsound(owner, 'sound/effects/magic/demon_consume.ogg', vol = 100, falloff_exponent = 2, vary = TRUE, pressure_affected = FALSE) var/list/valid_turfs = list() var/turf/our_turf = get_turf(owner) for (var/turf/zone_turf in orange(range, our_turf)) @@ -92,7 +92,7 @@ return COOLDOWN_START(src, thrust_delay, 0.7 SECONDS) - playsound(src, 'sound/weapons/pierce.ogg', vol = 50, vary = TRUE, pressure_affected = FALSE) + playsound(src, 'sound/items/weapons/pierce.ogg', vol = 50, vary = TRUE, pressure_affected = FALSE) var/mob/living/victim = arrived flick("spikes_stabbing", src) var/target_zone = victim.resting ? BODY_ZONE_CHEST : pick_weight(standing_damage_zones) diff --git a/code/modules/mob/living/basic/space_fauna/morph.dm b/code/modules/mob/living/basic/space_fauna/morph.dm index 8b4fe3802d73e..f1f568a261b01 100644 --- a/code/modules/mob/living/basic/space_fauna/morph.dm +++ b/code/modules/mob/living/basic/space_fauna/morph.dm @@ -30,7 +30,7 @@ attack_verb_continuous = "glomps" attack_verb_simple = "glomp" - attack_sound = 'sound/effects/blobattack.ogg' + attack_sound = 'sound/effects/blob/blobattack.ogg' attack_vis_effect = ATTACK_EFFECT_BITE //nom nom nom butcher_results = list(/obj/item/food/meat/slab = 2) diff --git a/code/modules/mob/living/basic/space_fauna/mushroom.dm b/code/modules/mob/living/basic/space_fauna/mushroom.dm index b45c2714d4ab4..de501eaea2ee1 100644 --- a/code/modules/mob/living/basic/space_fauna/mushroom.dm +++ b/code/modules/mob/living/basic/space_fauna/mushroom.dm @@ -19,7 +19,7 @@ maxHealth = 60 attack_verb_continuous = "chomps" attack_verb_simple = "chomp" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE faction = list(FACTION_MUSHROOM) @@ -78,15 +78,10 @@ /datum/ai_planning_subtree/find_and_hunt_target/mushroom_food target_key = BB_LOW_PRIORITY_HUNTING_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/mushroom_food + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target hunt_targets = list(/obj/item/food/grown/mushroom) hunt_range = 6 - -/datum/ai_behavior/hunt_target/unarmed_attack_target/mushroom_food - hunt_cooldown = 15 SECONDS - always_reset_target = TRUE - /mob/living/basic/mushroom/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) . = ..() if(!.) diff --git a/code/modules/mob/living/basic/space_fauna/netherworld/blankbody.dm b/code/modules/mob/living/basic/space_fauna/netherworld/blankbody.dm index d49932fb70465..474c2cf77d0e5 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/blankbody.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/blankbody.dm @@ -12,7 +12,7 @@ speed = 1 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH melee_attack_cooldown = 1 SECONDS faction = list(FACTION_NETHER) 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 4fb7282e4443b..0fe732554b286 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm @@ -13,7 +13,7 @@ attack_verb_continuous = "slashes" attack_verb_simple = "slash" gold_core_spawnable = HOSTILE_SPAWN - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE melee_attack_cooldown = 1 SECONDS faction = list(FACTION_NETHER) @@ -55,7 +55,7 @@ // This loop will, at most, loop twice. for(var/atom/check in check_list) for(var/mob/living/mob_target in oview(src, 7)) // They probably cannot see us if we cannot see them... can they? - if(mob_target.client && !mob_target.is_blind() && !mob_target.has_unlimited_silicon_privilege) + if(mob_target.client && !mob_target.is_blind() && !HAS_TRAIT(mob_target, TRAIT_UNOBSERVANT)) return mob_target for(var/obj/vehicle/sealed/mecha/mecha_mob_target in oview(src, 7)) for(var/mob/mechamob_target as anything in mecha_mob_target.occupants) 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 d5fd008a1866f..3f7adc2272252 100644 --- a/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm +++ b/code/modules/mob/living/basic/space_fauna/netherworld/migo.dm @@ -1,6 +1,6 @@ /mob/living/basic/migo name = "mi-go" - desc = "A pinkish, fungoid crustacean-like creature with numerous pairs of clawed appendages and a head covered with waving antennae." + desc = "A pinkish, fungoid crustacean-like creature with clawed appendages and a head covered with waving antennae." icon_state = "mi-go" icon_living = "mi-go" icon_dead = "mi-go-dead" @@ -14,12 +14,12 @@ attack_verb_simple = "lacerate" melee_attack_cooldown = 1 SECONDS gold_core_spawnable = HOSTILE_SPAWN - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH faction = list(FACTION_NETHER) speak_emote = list("screams", "clicks", "chitters", "barks", "moans", "growls", "meows", "reverberates", "roars", "squeaks", "rattles", "exclaims", "yells", "remarks", "mumbles", "jabbers", "stutters", "seethes") death_message = "wails as its form turns into a pulpy mush." - death_sound = 'sound/voice/hiss6.ogg' + death_sound = 'sound/mobs/non-humanoids/hiss/hiss6.ogg' unsuitable_atmos_damage = 0 unsuitable_cold_damage = 0 unsuitable_heat_damage = 0 @@ -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/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 + migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/tools/change_jaws.ogg', 'sound/items/tools/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/carhorn.ogg', 'sound/items/tools/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/megaphone.ogg', 'sound/items/tools/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/tools/wirecutter.ogg', 'sound/items/tools/welder.ogg', 'sound/items/zip/zip.ogg', 'sound/items/tools/rped.ogg', 'sound/items/tools/ratchet.ogg', 'sound/items/polaroid/polaroid1.ogg', 'sound/items/pshoom/pshoom.ogg', 'sound/items/airhorn/airhorn.ogg', 'sound/items/geiger/high1.ogg', 'sound/items/geiger/high2.ogg', 'sound/mobs/non-humanoids/beepsky/creep.ogg', 'sound/mobs/non-humanoids/beepsky/iamthelaw.ogg', 'sound/mobs/non-humanoids/ed209/ed209_20sec.ogg', 'sound/mobs/non-humanoids/hiss/hiss3.ogg', 'sound/mobs/non-humanoids/hiss/hiss6.ogg', 'sound/mobs/non-humanoids/medbot/patchedup.ogg', 'sound/mobs/non-humanoids/medbot/feelbetter.ogg', 'sound/mobs/humanoids/human/laugh/manlaugh1.ogg', 'sound/mobs/humanoids/human/laugh/womanlaugh.ogg', 'sound/items/weapons/sear.ogg', 'sound/music/antag/clockcultalr.ogg', 'sound/music/antag/ling_alert.ogg', 'sound/music/antag/traitor/tatoralert.ogg', 'sound/music/antag/monkey.ogg', 'sound/vehicles/mecha/nominal.ogg', 'sound/vehicles/mecha/weapdestr.ogg', 'sound/vehicles/mecha/critdestr.ogg', 'sound/vehicles/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/blob/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blob/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles/bubbles.ogg', 'sound/effects/bubbles/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clockcult_gateway_disrupted.ogg', 'sound/effects/footstep/clownstep2.ogg', 'sound/effects/curse/curse1.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosion/explosion_distant.ogg', 'sound/effects/explosion/explosionfar.ogg', 'sound/effects/explosion/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/his_grace_awaken.ogg', 'sound/effects/pai_boot.ogg', 'sound/effects/phasein.ogg', 'sound/effects/pickaxe/picaxe1.ogg', 'sound/effects/sparks/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/effects/desecration/desecration-01.ogg', 'sound/effects/desecration/desecration-02.ogg', 'sound/effects/desecration/desecration-03.ogg', 'sound/announcer/alarm/bloblarm.ogg', 'sound/announcer/alarm/airraid.ogg', 'sound/misc/bang.ogg','sound/misc/highlander.ogg', 'sound/misc/interference.ogg', 'sound/announcer/notice/notice1.ogg', 'sound/announcer/notice/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/misc/splort.ogg', 'sound/items/weapons/armbomb.ogg', 'sound/items/weapons/beam_sniper.ogg', 'sound/items/weapons/chainsawhit.ogg', 'sound/items/weapons/emitter.ogg', 'sound/items/weapons/emitter2.ogg', 'sound/items/weapons/blade1.ogg', 'sound/items/weapons/bladeslice.ogg', 'sound/items/weapons/blastcannon.ogg', 'sound/items/weapons/blaster.ogg', 'sound/items/weapons/bulletflyby3.ogg', 'sound/items/weapons/circsawhit.ogg', 'sound/items/weapons/cqchit2.ogg', 'sound/items/weapons/drill.ogg', 'sound/items/weapons/genhit1.ogg', 'sound/items/weapons/gun/pistol/shot_suppressed.ogg', 'sound/items/weapons/gun/pistol/shot.ogg', 'sound/items/weapons/handcuffs.ogg', 'sound/items/weapons/homerun.ogg', 'sound/items/weapons/kinetic_accel.ogg', 'sound/machines/clockcult/steam_whoosh.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock/airlock.ogg', 'sound/machines/airlock/airlock_alien_prying.ogg', 'sound/machines/airlock/airlockclose.ogg', 'sound/machines/airlock/airlockforced.ogg', 'sound/machines/airlock/airlockopen.ogg', 'sound/announcer/alarm/nuke_alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/airlock/boltsdown.ogg', 'sound/machines/airlock/boltsup.ogg', 'sound/machines/buzz/buzz-sigh.ogg', 'sound/machines/buzz/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/cryo_warning.ogg', 'sound/machines/defib/defib_charge.ogg', 'sound/machines/defib/defib_failed.ogg', 'sound/machines/defib/defib_ready.ogg', 'sound/machines/defib/defib_zap.ogg', 'sound/machines/beep/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door/door_close.ogg', 'sound/machines/door/door_open.ogg', 'sound/machines/engine_alert/engine_alert1.ogg', 'sound/machines/engine_alert/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/ambience/misc/signal.ogg', 'sound/machines/synth/synth_no.ogg', 'sound/machines/synth/synth_yes.ogg', 'sound/machines/terminal/terminal_alert.ogg', 'sound/machines/beep/triple_beep.ogg', 'sound/machines/beep/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/announcer/default/outbreak5.ogg', 'sound/announcer/default/outbreak7.ogg', 'sound/announcer/default/poweroff.ogg', 'sound/announcer/default/radiation.ogg', 'sound/announcer/default/shuttlecalled.ogg', 'sound/announcer/default/shuttledock.ogg', 'sound/announcer/default/shuttlerecalled.ogg', 'sound/announcer/default/aimalf.ogg') //hahahaha fuck you code divers if(!istype(src, /mob/living/basic/migo/hatsune) && prob(0.1)) // chance on-load mi-gos will spawn with a miku wig on (shiny variant) new /mob/living/basic/migo/hatsune(get_turf(loc), mapload) @@ -90,7 +90,7 @@ faction = list(FACTION_NEUTRAL) /mob/living/basic/migo/hatsune/make_migo_sound() - playsound(src, 'sound/creatures/tourist/tourist_talk_japanese1.ogg', 50, TRUE) + playsound(src, 'sound/mobs/non-humanoids/tourist/tourist_talk_japanese1.ogg', 50, TRUE) /mob/living/basic/migo/hatsune/Initialize(mapload) . = ..() 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 720e0c031c0a3..cf76f347be3f3 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 @@ -18,7 +18,7 @@ melee_damage_lower = 10 melee_damage_upper = 20 obj_damage = 50 - attack_sound = 'sound/hallucinations/growl1.ogg' + attack_sound = 'sound/effects/hallucinations/growl1.ogg' ai_controller = /datum/ai_controller/basic_controller/paper_wizard ///spell to summon minions var/datum/action/cooldown/spell/conjure/wizard_summon_minions/summon @@ -161,8 +161,8 @@ /obj/effect/temp_visual/paperwiz_dying/Initialize(mapload) . = ..() visible_message(span_boldannounce("The wizard cries out in pain as a gate appears behind him, sucking him in!")) - playsound(get_turf(src), 'sound/magic/mandswap.ogg', 50, vary = TRUE, pressure_affected = TRUE) - playsound(get_turf(src), 'sound/hallucinations/wail.ogg', 50, vary = TRUE, pressure_affected = TRUE) + playsound(get_turf(src), 'sound/effects/magic/mandswap.ogg', 50, vary = TRUE, pressure_affected = TRUE) + playsound(get_turf(src), 'sound/effects/hallucinations/wail.ogg', 50, vary = TRUE, pressure_affected = TRUE) RegisterSignal(src, COMSIG_PREQDELETED, PROC_REF(on_delete)) /obj/effect/temp_visual/paperwiz_dying/proc/on_delete() @@ -171,7 +171,7 @@ for(var/mob/nearby in range(7, src)) shake_camera(nearby, duration = 7 SECONDS, strength = 1) var/turf/current_turf = get_turf(src) - playsound(current_turf,'sound/magic/summon_magic.ogg', 50, vary = TRUE, vary = TRUE) + playsound(current_turf,'sound/effects/magic/summon_magic.ogg', 50, vary = TRUE, vary = TRUE) new /obj/effect/temp_visual/paper_scatter(current_turf) new /obj/item/clothing/suit/wizrobe/paper(current_turf) new /obj/item/clothing/head/collectable/paper(current_turf) 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 c0fb9b67e7f73..9f9598b11ae20 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 @@ -27,7 +27,7 @@ melee_attack_cooldown = CLICK_CD_MELEE attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' // Slightly brown red, for the eyes lighting_cutoff_red = 22 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 a154ba9da0c65..615f314bf2e4b 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -125,7 +125,7 @@ return TRUE generated_objectives_and_spells = TRUE - mind.set_assigned_role(SSjob.GetJobType(/datum/job/revenant)) + mind.set_assigned_role(SSjob.get_job_type(/datum/job/revenant)) mind.special_role = ROLE_REVENANT SEND_SOUND(src, sound('sound/effects/ghost.ogg')) mind.add_antag_datum(/datum/antagonist/revenant) @@ -235,7 +235,7 @@ var/list/icon_dimensions = get_icon_dimensions(target.icon) var/orbitsize = (icon_dimensions["width"] + icon_dimensions["height"]) * 0.5 - orbitsize -= (orbitsize / world.icon_size) * (world.icon_size * 0.25) + orbitsize -= (orbitsize / ICON_SIZE_ALL) * (ICON_SIZE_ALL * 0.25) orbit(target, orbitsize) /mob/living/basic/revenant/adjust_health(amount, updating_health = TRUE, forced = FALSE) 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 7dd7f13f5eece..27176ee48a80a 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 @@ -135,7 +135,7 @@ human_mob.electrocute_act(shock_damage, to_shock, flags = SHOCK_NOGLOVES) do_sparks(4, FALSE, human_mob) - playsound(human_mob, 'sound/machines/defib_zap.ogg', 50, TRUE, -1) + playsound(human_mob, 'sound/machines/defib/defib_zap.ogg', 50, TRUE, -1) //Defile: Corrupts nearby stuff, unblesses floor tiles. /datum/action/cooldown/spell/aoe/revenant/defile 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 d526189c5626b..78f7d86e0db3f 100644 --- a/code/modules/mob/living/basic/space_fauna/snake/snake.dm +++ b/code/modules/mob/living/basic/space_fauna/snake/snake.dm @@ -18,7 +18,7 @@ attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE response_help_continuous = "pets" diff --git a/code/modules/mob/living/basic/space_fauna/snake/snake_ai.dm b/code/modules/mob/living/basic/space_fauna/snake/snake_ai.dm index 3eb404761c522..189a7fb2eb097 100644 --- a/code/modules/mob/living/basic/space_fauna/snake/snake_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/snake/snake_ai.dm @@ -1,6 +1,6 @@ /datum/ai_planning_subtree/random_speech/snake speech_chance = 5 speak = list("hsssss","sssSSsssss...","hiisssss") - sound = list('sound/creatures/snake_hissing1.ogg', 'sound/creatures/snake_hissing2.ogg') + sound = list('sound/mobs/non-humanoids/snake/snake_hissing1.ogg', 'sound/mobs/non-humanoids/snake/snake_hissing2.ogg') emote_hear = list("hisses.") emote_see = list("slithers around.", "glances.", "stares.") 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 1776e69358139..f672e60ee2940 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 @@ -30,7 +30,7 @@ speed = 0 attack_verb_continuous = "chomps" attack_verb_simple = "chomp" - attack_sound = 'sound/magic/demon_attack1.ogg' + attack_sound = 'sound/effects/magic/demon_attack1.ogg' attack_vis_effect = ATTACK_EFFECT_BITE obj_damage = 50 melee_damage_upper = 35 @@ -43,7 +43,7 @@ maptext_height = 64 maptext_width = 64 mouse_opacity = MOUSE_OPACITY_ICON - death_sound = 'sound/creatures/space_dragon_roar.ogg' + death_sound = 'sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg' death_message = "screeches in agony as it collapses to the floor, its life extinguished." butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) can_buckle_to = FALSE @@ -176,7 +176,7 @@ adjust_health(-food.maxHealth * 0.25) if (QDELETED(food) || food.loc == src) return FALSE - playsound(src, 'sound/magic/demon_attack1.ogg', 60, TRUE) + playsound(src, 'sound/effects/magic/demon_attack1.ogg', 60, TRUE) visible_message(span_boldwarning("[src] swallows [food] whole!")) food.extinguish_mob() // It's wet in there, and our food is likely to be on fire. Let's be decent and not husk them. food.forceMove(src) diff --git a/code/modules/mob/living/basic/space_fauna/spaceman.dm b/code/modules/mob/living/basic/space_fauna/spaceman.dm index 8a9ba36287ae3..42f28a74960bf 100644 --- a/code/modules/mob/living/basic/space_fauna/spaceman.dm +++ b/code/modules/mob/living/basic/space_fauna/spaceman.dm @@ -21,7 +21,7 @@ melee_damage_upper = 10 attack_verb_continuous = "hits" attack_verb_simple = "hit" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE ai_controller = /datum/ai_controller/basic_controller/spaceman 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 b9a3b24f14688..f293f1dcbaacd 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 @@ -110,10 +110,6 @@ . = ..() AddElement(/datum/element/web_walker, /datum/movespeed_modifier/fast_web) -/mob/living/basic/spider/giant/hunter/mold //skyrat edit: exists to make molds not spam the world with simple mobs - basic_mob_flags = DEL_ON_DEATH - habitable_atmos = null - ///Used in the caves away mission. /mob/living/basic/spider/giant/hunter/away_caves minimum_survivable_temperature = 0 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 b9938631ec5d5..118487f038392 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spider.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spider.dm @@ -24,7 +24,7 @@ pass_flags = PASSTABLE attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE unique_name = TRUE lighting_cutoff_red = 22 diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm index 790879b0de2c1..8fc79080cac84 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm @@ -18,7 +18,7 @@ var/current_directive = "" /datum/action/cooldown/mob_cooldown/set_spider_directive/Activate(atom/target) - var/new_directive = tgui_input_text(owner, "Enter the new directive", "Create directive", "[current_directive]") + var/new_directive = tgui_input_text(owner, "Enter the new directive", "Create directive", "[current_directive]", max_length = MAX_MESSAGE_LEN) if(isnull(new_directive) || QDELETED(src) || QDELETED(owner) || !IsAvailable(feedback = TRUE)) return @@ -44,7 +44,7 @@ click_to_activate = FALSE /datum/action/cooldown/mob_cooldown/command_spiders/Activate(trigger_flags) - var/input = tgui_input_text(owner, "Input a command for your legions to follow.", "Command") + var/input = tgui_input_text(owner, "Input a command for your legions to follow.", "Command", max_length = MAX_MESSAGE_LEN) if(!input || QDELETED(src) || QDELETED(owner) || !IsAvailable(feedback = TRUE)) return spider_command(owner, input) diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm index e7771f075a871..088905a5ae2f3 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm @@ -26,7 +26,7 @@ /datum/action/cooldown/mob_cooldown/wrap/IsAvailable(feedback = FALSE) . = ..() - if(!. || owner.incapacitated()) + if(!. || owner.incapacitated) return FALSE if(DOING_INTERACTION(owner, DOAFTER_SOURCE_SPIDER)) if (feedback) 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 3ddbc2364e81c..3bd308f34a609 100644 --- a/code/modules/mob/living/basic/space_fauna/statue/statue.dm +++ b/code/modules/mob/living/basic/space_fauna/statue/statue.dm @@ -25,7 +25,7 @@ melee_damage_upper = 83 attack_verb_continuous = "claws" attack_verb_simple = "claw" - attack_sound = 'sound/hallucinations/growl1.ogg' + attack_sound = 'sound/effects/hallucinations/growl1.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW melee_attack_cooldown = 1 SECONDS 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 bba6e0eb460c6..a25b3c52ad8fc 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,13 +58,12 @@ return FALSE 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.add_traits(list(TRAIT_FUGU_GLANDED, TRAIT_GODMODE), TRAIT_STATUS_EFFECT(id)) fugu.AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) fugu.mob_size = MOB_SIZE_LARGE fugu.icon_state = "Fugu1" fugu.melee_damage_lower = 15 fugu.melee_damage_upper = 20 - fugu.status_flags |= GODMODE fugu.obj_damage = 60 fugu.ai_controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, TRUE) fugu.ai_controller.CancelActions() @@ -76,12 +75,11 @@ return // Check again in case you changed mob after application but somehow kept the status effect 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.remove_traits(list(TRAIT_FUGU_GLANDED, TRAIT_GODMODE), TRAIT_STATUS_EFFECT(id)) 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 - fugu.status_flags &= ~GODMODE if (fugu.stat != DEAD) fugu.icon_state = "Fugu0" fugu.obj_damage = 0 diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_fugu.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_fugu.dm index 675b32c84b55d..a3670c6e5ac56 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_fugu.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_fugu.dm @@ -27,7 +27,7 @@ obj_damage = 0 melee_damage_lower = 0 melee_damage_upper = 0 - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' attack_vis_effect = ATTACK_EFFECT_BITE melee_attack_cooldown = 2.5 SECONDS attack_verb_continuous = "chomps" diff --git a/code/modules/mob/living/basic/trader/trader.dm b/code/modules/mob/living/basic/trader/trader.dm index 29a2bda419930..9b01261fa51a4 100644 --- a/code/modules/mob/living/basic/trader/trader.dm +++ b/code/modules/mob/living/basic/trader/trader.dm @@ -9,7 +9,7 @@ melee_damage_upper = 10 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' basic_mob_flags = DEL_ON_DEATH unsuitable_atmos_damage = 2.5 combat_mode = FALSE @@ -33,7 +33,7 @@ ///Casing used to shoot during retaliation var/ranged_attack_casing = /obj/item/ammo_casing/shotgun/buckshot ///Sound to make while doing a retalitory attack - var/ranged_attack_sound = 'sound/weapons/gun/pistol/shot.ogg' + var/ranged_attack_sound = 'sound/items/weapons/gun/pistol/shot.ogg' ///Weapon path, for visuals var/held_weapon_visual = /obj/item/gun/ballistic/shotgun @@ -69,7 +69,7 @@ ai_controller = /datum/ai_controller/basic_controller/trader/jumpscare - sell_sound = 'sound/voice/hiss2.ogg' + sell_sound = 'sound/mobs/non-humanoids/hiss/hiss2.ogg' species_path = /datum/species/skeleton spawner_path = /obj/effect/mob_spawn/corpse/human/skeleton/mrbones loot = list(/obj/effect/decal/remains/human) diff --git a/code/modules/mob/living/basic/trader/trader_data.dm b/code/modules/mob/living/basic/trader/trader_data.dm index 9762dc02be500..c47e200154f28 100644 --- a/code/modules/mob/living/basic/trader/trader_data.dm +++ b/code/modules/mob/living/basic/trader/trader_data.dm @@ -85,7 +85,7 @@ /datum/trader_data/mr_bones shop_spot_type = /obj/structure/chair/wood/wings sign_type = /obj/structure/trader_sign/mrbones - sell_sound = 'sound/voice/hiss2.ogg' + sell_sound = 'sound/mobs/non-humanoids/hiss/hiss2.ogg' initial_products = list( /obj/item/clothing/head/helmet/skull = list(PAYCHECK_CREW * 3, INFINITY), diff --git a/code/modules/mob/living/basic/tree.dm b/code/modules/mob/living/basic/tree.dm index 3f3894f190b5e..b6f7e5ca4eb41 100644 --- a/code/modules/mob/living/basic/tree.dm +++ b/code/modules/mob/living/basic/tree.dm @@ -28,7 +28,7 @@ melee_damage_upper = 12 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE faction = list(FACTION_HOSTILE) diff --git a/code/modules/mob/living/basic/trooper/abductor.dm b/code/modules/mob/living/basic/trooper/abductor.dm index fdb8b41cc5ec5..8163fb72c5af6 100644 --- a/code/modules/mob/living/basic/trooper/abductor.dm +++ b/code/modules/mob/living/basic/trooper/abductor.dm @@ -12,7 +12,7 @@ loot = list(/obj/effect/gibspawner/human) attack_verb_continuous = "beats" attack_verb_simple = "beat" - attack_sound = 'sound/weapons/egloves.ogg' + attack_sound = 'sound/items/weapons/egloves.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH r_hand = /obj/item/melee/baton/abductor var/projectile_deflect_chance = 0 @@ -24,7 +24,7 @@ /// 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' + var/projectilesound = 'sound/items/weapons/laser2.ogg' /// number of burst shots var/burst_shots = 1 /// Time between taking shots diff --git a/code/modules/mob/living/basic/trooper/nanotrasen.dm b/code/modules/mob/living/basic/trooper/nanotrasen.dm index af32edde7e3f7..6d285b871d83e 100644 --- a/code/modules/mob/living/basic/trooper/nanotrasen.dm +++ b/code/modules/mob/living/basic/trooper/nanotrasen.dm @@ -21,7 +21,7 @@ /// Type of bullet we use var/casingtype = /obj/item/ammo_casing/c45 /// Sound to play when firing weapon - var/projectilesound = 'sound/weapons/gun/pistol/shot_alt.ogg' + var/projectilesound = 'sound/items/weapons/gun/pistol/shot_alt.ogg' /// number of burst shots var/burst_shots /// Time between taking shots @@ -42,7 +42,7 @@ /mob/living/basic/trooper/nanotrasen/ranged/smg ai_controller = /datum/ai_controller/basic_controller/trooper/ranged/burst casingtype = /obj/item/ammo_casing/c46x30mm - projectilesound = 'sound/weapons/gun/smg/shot.ogg' + projectilesound = 'sound/items/weapons/gun/smg/shot.ogg' r_hand = /obj/item/gun/ballistic/automatic/wt550 burst_shots = 3 ranged_cooldown = 3 SECONDS @@ -54,7 +54,7 @@ casingtype = /obj/item/ammo_casing/a223/weak burst_shots = 4 ranged_cooldown = 3 SECONDS - projectilesound = 'sound/weapons/gun/smg/shot.ogg' + projectilesound = 'sound/items/weapons/gun/smg/shot.ogg' r_hand = /obj/item/gun/ballistic/automatic/ar loot = list(/obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier) mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier @@ -68,7 +68,7 @@ unsuitable_cold_damage = 0 casingtype = /obj/item/ammo_casing/energy/laser burst_shots = 3 - projectilesound = 'sound/weapons/laser.ogg' + projectilesound = 'sound/items/weapons/laser.ogg' ranged_cooldown = 5 SECONDS faction = list(ROLE_DEATHSQUAD) loot = list(/obj/effect/gibspawner/human) diff --git a/code/modules/mob/living/basic/trooper/pirate.dm b/code/modules/mob/living/basic/trooper/pirate.dm index 6a51b901ebc4d..0af2f2aa6973a 100644 --- a/code/modules/mob/living/basic/trooper/pirate.dm +++ b/code/modules/mob/living/basic/trooper/pirate.dm @@ -23,7 +23,7 @@ armour_penetration = 35 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/blade1.ogg' + attack_sound = 'sound/items/weapons/blade1.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH loot = list(/obj/effect/mob_spawn/corpse/human/pirate/melee) light_range = 2 @@ -57,7 +57,7 @@ /// Type of bullet we use var/projectiletype = /obj/projectile/beam/laser /// Sound to play when firing weapon - var/projectilesound = 'sound/weapons/laser.ogg' + var/projectilesound = 'sound/items/weapons/laser.ogg' /// number of burst shots var/burst_shots = 2 /// Time between taking shots diff --git a/code/modules/mob/living/basic/trooper/russian.dm b/code/modules/mob/living/basic/trooper/russian.dm index 6c8ff52c019a9..e3334ddddbd39 100644 --- a/code/modules/mob/living/basic/trooper/russian.dm +++ b/code/modules/mob/living/basic/trooper/russian.dm @@ -10,7 +10,7 @@ faction = list(FACTION_RUSSIAN) attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH mob_spawner = /obj/effect/mob_spawn/corpse/human/russian @@ -29,7 +29,7 @@ /obj/item/gun/ballistic/revolver/nagant, ) var/casingtype = /obj/item/ammo_casing/n762 - var/projectilesound = 'sound/weapons/gun/revolver/shot.ogg' + var/projectilesound = 'sound/items/weapons/gun/revolver/shot.ogg' /mob/living/basic/trooper/russian/ranged/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/basic/trooper/syndicate.dm b/code/modules/mob/living/basic/trooper/syndicate.dm index 8f8d564693b66..6d4766db8cd07 100644 --- a/code/modules/mob/living/basic/trooper/syndicate.dm +++ b/code/modules/mob/living/basic/trooper/syndicate.dm @@ -32,7 +32,7 @@ loot = list(/obj/effect/gibspawner/human) attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH r_hand = /obj/item/knife/combat/survival var/projectile_deflect_chance = 0 @@ -67,7 +67,7 @@ melee_damage_upper = 30 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/blade1.ogg' + attack_sound = 'sound/items/weapons/blade1.ogg' armour_penetration = 35 projectile_deflect_chance = 50 light_range = 2 @@ -105,7 +105,7 @@ /// Type of bullet we use var/casingtype = /obj/item/ammo_casing/c9mm /// Sound to play when firing weapon - var/projectilesound = 'sound/weapons/gun/pistol/shot.ogg' + var/projectilesound = 'sound/items/weapons/gun/pistol/shot.ogg' /// number of burst shots var/burst_shots /// Time between taking shots @@ -124,7 +124,7 @@ 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' + projectilesound = 'sound/items/weapons/gun/smg/shot_suppressed.ogg' loot = list(/obj/effect/mob_spawn/corpse/human/syndicatesoldier) /mob/living/basic/trooper/syndicate/ranged/space @@ -148,7 +148,7 @@ /mob/living/basic/trooper/syndicate/ranged/smg casingtype = /obj/item/ammo_casing/c45 - projectilesound = 'sound/weapons/gun/smg/shot.ogg' + projectilesound = 'sound/items/weapons/gun/smg/shot.ogg' ai_controller = /datum/ai_controller/basic_controller/trooper/ranged/burst burst_shots = 3 ranged_cooldown = 3 SECONDS @@ -236,7 +236,7 @@ obj_damage = 0 attack_verb_continuous = "cuts" attack_verb_simple = "cut" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH faction = list(ROLE_SYNDICATE) mob_size = MOB_SIZE_TINY diff --git a/code/modules/mob/living/basic/trooper/trooper.dm b/code/modules/mob/living/basic/trooper/trooper.dm index 1886c8fc2ff5e..7c9fd698d0895 100644 --- a/code/modules/mob/living/basic/trooper/trooper.dm +++ b/code/modules/mob/living/basic/trooper/trooper.dm @@ -10,7 +10,7 @@ melee_damage_upper = 10 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' melee_attack_cooldown = 1.2 SECONDS combat_mode = TRUE unsuitable_atmos_damage = 7.5 diff --git a/code/modules/mob/living/basic/vermin/cockroach.dm b/code/modules/mob/living/basic/vermin/cockroach.dm index 0680de631cbae..c6eead9a16661 100644 --- a/code/modules/mob/living/basic/vermin/cockroach.dm +++ b/code/modules/mob/living/basic/vermin/cockroach.dm @@ -145,7 +145,7 @@ obj_damage = 10 melee_attack_cooldown = 1 SECONDS gold_core_spawnable = HOSTILE_SPAWN - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH faction = list(FACTION_HOSTILE, FACTION_MAINT_CREATURES) sharpness = SHARP_POINTY diff --git a/code/modules/mob/living/basic/vermin/crab.dm b/code/modules/mob/living/basic/vermin/crab.dm index 3c1c9146a064d..26eca65b97209 100644 --- a/code/modules/mob/living/basic/vermin/crab.dm +++ b/code/modules/mob/living/basic/vermin/crab.dm @@ -23,7 +23,7 @@ ///In the case 'melee_damage_upper' is somehow raised above 0 attack_verb_continuous = "snips" attack_verb_simple = "snip" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE ai_controller = /datum/ai_controller/basic_controller/crab diff --git a/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm index a0079065de437..9659408b8b1aa 100644 --- a/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm +++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm @@ -59,14 +59,14 @@ if(src.stat == DEAD) return else - playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE) + playsound(loc, 'sound/mobs/humanoids/moth/scream_moth.ogg', 50, TRUE) /mob/living/basic/mothroach/attackby(obj/item/attacking_item, mob/living/user, params) . = ..() if(src.stat == DEAD) return else - playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE) + playsound(loc, 'sound/mobs/humanoids/moth/scream_moth.ogg', 50, TRUE) /mob/living/basic/mothroach/bar name = "mothroach bartender" diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index 7361e4be7b310..cb62ad956f95c 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -1,6 +1,6 @@ /mob/living/basic/mouse name = "mouse" - desc = "This cute little guy just loves the taste of uninsulated electrical cables. Isn't he adorable?" + desc = "This cute little guy just loves the taste of insulated electrical cables. Isn't he adorable?" icon_state = "mouse_gray" icon_living = "mouse_gray" icon_dead = "mouse_gray_dead" @@ -51,7 +51,7 @@ held_state = "mouse_[body_color]" // not handled by variety element AddElement(/datum/element/animal_variety, "mouse", body_color, FALSE) AddElement(/datum/element/swabable, CELL_LINE_TABLE_MOUSE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 10) - AddComponent(/datum/component/squeak, list('sound/creatures/mousesqueek.ogg' = 1), 100, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) //as quiet as a mouse or whatever + AddComponent(/datum/component/squeak, list('sound/mobs/non-humanoids/mouse/mousesqueek.ogg' = 1), 100, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) //as quiet as a mouse or whatever var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) @@ -232,7 +232,7 @@ span_notice("You chew through \the [cable]."), ) - playsound(cable, 'sound/effects/sparks2.ogg', 100, TRUE) + playsound(cable, 'sound/effects/sparks/sparks2.ogg', 100, TRUE) cable.deconstruct() /mob/living/basic/mouse/white diff --git a/code/modules/mob/living/basic/vermin/space_bat.dm b/code/modules/mob/living/basic/vermin/space_bat.dm index 53f367f448727..07bce71f2f587 100644 --- a/code/modules/mob/living/basic/vermin/space_bat.dm +++ b/code/modules/mob/living/basic/vermin/space_bat.dm @@ -24,7 +24,7 @@ butcher_results = list(/obj/item/food/meat/slab = 1) pass_flags = PASSTABLE - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE environment_smash = ENVIRONMENT_SMASH_NONE mob_size = MOB_SIZE_TINY diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 7d5d6bec936a7..5d4cf831f9075 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -122,7 +122,7 @@ //Makes a blood drop, leaking amt units of blood from the mob /mob/living/carbon/proc/bleed(amt) - if(!blood_volume || (status_flags & GODMODE)) + if(!blood_volume || HAS_TRAIT(src, TRAIT_GODMODE)) return blood_volume = max(blood_volume - amt, 0) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 1963e13dbf552..7ae89e8d0ae1d 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -88,10 +88,10 @@ brainmob.set_stat(CONSCIOUS) //we manually revive the brain mob else if(!fubar_brain && newbrain.organ_flags & ORGAN_FAILING) // the brain is damaged, but not from a suicider to_chat(user, span_warning("[src]'s indicator light turns yellow and its brain integrity alarm beeps softly. Perhaps you should check [newbrain] for damage.")) - playsound(src, 'sound/machines/synth_no.ogg', 5, TRUE) + playsound(src, 'sound/machines/synth/synth_no.ogg', 5, TRUE) else to_chat(user, span_warning("[src]'s indicator light turns red and its brainwave activity alarm beeps softly. Perhaps you should check [newbrain] again.")) - playsound(src, 'sound/machines/triple_beep.ogg', 5, TRUE) + playsound(src, 'sound/machines/beep/triple_beep.ogg', 5, TRUE) brainmob.reset_perspective() brain = newbrain diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 46419d70e6dee..ced02095e410b 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -8,7 +8,7 @@ layer = ABOVE_MOB_LAYER zone = BODY_ZONE_HEAD slot = ORGAN_SLOT_BRAIN - organ_flags = ORGAN_ORGANIC | ORGAN_VITAL + organ_flags = ORGAN_ORGANIC | ORGAN_VITAL | ORGAN_PROMINENT attack_verb_continuous = list("attacks", "slaps", "whacks") attack_verb_simple = list("attack", "slap", "whack") @@ -258,6 +258,26 @@ else return span_info("This one is completely devoid of life.") +/obj/item/organ/internal/brain/get_status_appendix(advanced, add_tooltips) + var/list/trauma_text + for(var/datum/brain_trauma/trauma as anything in traumas) + var/trauma_desc = "" + switch(trauma.resilience) + if(TRAUMA_RESILIENCE_BASIC) + trauma_desc = conditional_tooltip("Mild ", "Repair via brain surgery or medication such as [/datum/reagent/medicine/neurine::name].", add_tooltips) + if(TRAUMA_RESILIENCE_SURGERY) + trauma_desc = conditional_tooltip("Severe ", "Repair via brain surgery.", add_tooltips) + if(TRAUMA_RESILIENCE_LOBOTOMY) + trauma_desc = conditional_tooltip("Deep-rooted ", "Repair via Lobotomy.", add_tooltips) + if(TRAUMA_RESILIENCE_WOUND) + trauma_desc = conditional_tooltip("Fracture-derived ", "Repair via treatment of wounds afflicting the head.", add_tooltips) + if(TRAUMA_RESILIENCE_MAGIC, TRAUMA_RESILIENCE_ABSOLUTE) + trauma_desc = conditional_tooltip("Permanent ", "Irreparable under normal circumstances.", add_tooltips) + trauma_desc += capitalize(trauma.scan_desc) + LAZYADD(trauma_text, trauma_desc) + if(LAZYLEN(trauma_text)) + return "Mental trauma: [english_list(trauma_text, and_text = ", and ")]." + /obj/item/organ/internal/brain/attack(mob/living/carbon/C, mob/user) if(!istype(C)) return ..() diff --git a/code/modules/mob/living/brain/brain_say.dm b/code/modules/mob/living/brain/brain_say.dm index 6781325b9ba87..df3601c1bef94 100644 --- a/code/modules/mob/living/brain/brain_say.dm +++ b/code/modules/mob/living/brain/brain_say.dm @@ -15,16 +15,6 @@ if(prob(10)) //10% chance to drop the message entirely return message = Gibberish(message, emp_damage >= 12)//scrambles the message, gets worse when emp_damage is higher - // BUBBER CHANGE: funny talking head - var/datum/antagonist/bloodsucker/spooky_vampire_head = mind?.has_antag_datum(/datum/antagonist/bloodsucker) - if(!container && spooky_vampire_head) - var/obj/head = spooky_vampire_head.is_head(src) - if(!head) - return - var/animation_time = max(2, length_char(message) * 0.5) - head.Shake(duration = animation_time) - ..() - // BUBBER CHANGE END return ..() diff --git a/code/modules/mob/living/brain/life.dm b/code/modules/mob/living/brain/life.dm index 9bebeac70ec83..7ffe49951ec26 100644 --- a/code/modules/mob/living/brain/life.dm +++ b/code/modules/mob/living/brain/life.dm @@ -14,7 +14,7 @@ handle_emp_damage(seconds_per_tick, times_fired) /mob/living/brain/update_stat() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return if(health > HEALTH_THRESHOLD_DEAD) return diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index d180629b083dd..d32c17c4d699d 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -11,17 +11,17 @@ GLOBAL_VAR(posibrain_notify_cooldown) braintype = "Android" ///Message sent to the user when polling ghosts - var/begin_activation_message = "You carefully locate the manual activation switch and start the positronic brain's boot process." + var/begin_activation_message = span_notice("You carefully locate the manual activation switch and start the positronic brain's boot process.") ///Message sent as a visible message on success - var/success_message = "The positronic brain pings, and its lights start flashing. Success!" + var/success_message = span_notice("The positronic brain pings, and its lights start flashing. Success!") ///Message sent as a visible message on failure - var/fail_message = "The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?" + var/fail_message = span_notice("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") ///Visible message sent when a player possesses the brain - var/new_mob_message = "The positronic brain chimes quietly." + var/new_mob_message = span_notice("The positronic brain chimes quietly.") ///Examine message when the posibrain has no mob - var/dead_message = "It appears to be completely inactive. The reset light is blinking." + var/dead_message = span_deadsay("It appears to be completely inactive. The reset light is blinking.") ///Examine message when the posibrain cannot poll ghosts due to cooldown - var/recharge_message = "The positronic brain isn't ready to activate again yet! Give it some time to recharge." + var/recharge_message = span_warning("The positronic brain isn't ready to activate again yet! Give it some time to recharge.") ///Can be set to tell ghosts what the brain will be used for var/ask_role = "" @@ -76,7 +76,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) addtimer(CALLBACK(src, PROC_REF(check_success)), ask_delay) /obj/item/mmi/posibrain/click_alt(mob/living/user) - var/input_seed = tgui_input_text(user, "Enter a personality seed", "Enter seed", ask_role, MAX_NAME_LEN) + var/input_seed = tgui_input_text(user, "Enter a personality seed", "Enter seed", ask_role, max_length = MAX_NAME_LEN) if(isnull(input_seed)) return CLICK_ACTION_BLOCKING if(!user.can_perform_action(src)) @@ -143,7 +143,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) brainmob.timeofdeath = transferred_user.timeofdeath brainmob.set_stat(CONSCIOUS) if(brainmob.mind) - brainmob.mind.set_assigned_role(SSjob.GetJobType(posibrain_job_path)) + brainmob.mind.set_assigned_role(SSjob.get_job_type(posibrain_job_path)) if(transferred_user.mind) transferred_user.mind.transfer_to(brainmob) @@ -166,7 +166,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) var/policy = get_policy(ROLE_POSIBRAIN) if(policy) to_chat(brainmob, policy) - brainmob.mind.set_assigned_role(SSjob.GetJobType(posibrain_job_path)) + brainmob.mind.set_assigned_role(SSjob.get_job_type(posibrain_job_path)) brainmob.set_stat(CONSCIOUS) visible_message(new_mob_message) diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index ad005888178ac..ce95c0e6ce5a7 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult.dm @@ -14,7 +14,7 @@ var/leap_on_click = 0 var/pounce_cooldown = 0 var/pounce_cooldown_time = 30 - death_sound = 'sound/voice/hiss6.ogg' + death_sound = 'sound/mobs/non-humanoids/hiss/hiss6.ogg' bodyparts = list( /obj/item/bodypart/chest/alien, /obj/item/bodypart/head/alien, @@ -41,7 +41,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( return ..() /mob/living/carbon/alien/adult/cuff_resist(obj/item/I) - playsound(src, 'sound/voice/hiss5.ogg', 40, TRUE, TRUE) //Alien roars when starting to break free + playsound(src, 'sound/mobs/non-humanoids/hiss/hiss5.ogg', 40, TRUE, TRUE) //Alien roars when starting to break free ..(I, cuff_break = INSTANT_CUFFBREAK) /mob/living/carbon/alien/adult/resist_grab(moving_resist) @@ -67,7 +67,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( /mob/living/carbon/alien/adult/check_breath(datum/gas_mixture/breath) if(breath?.total_moles() > 0 && !HAS_TRAIT(src, TRAIT_SNEAK)) - playsound(get_turf(src), pick('sound/voice/lowHiss2.ogg', 'sound/voice/lowHiss3.ogg', 'sound/voice/lowHiss4.ogg'), 50, FALSE, -5) + playsound(get_turf(src), pick('sound/mobs/non-humanoids/hiss/lowHiss2.ogg', 'sound/mobs/non-humanoids/hiss/lowHiss3.ogg', 'sound/mobs/non-humanoids/hiss/lowHiss4.ogg'), 50, FALSE, -5) return ..() /mob/living/carbon/alien/adult/setGrabState(newstate) @@ -78,6 +78,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( SEND_SIGNAL(src, COMSIG_MOVABLE_SET_GRAB_STATE, newstate) . = grab_state grab_state = newstate + update_incapacitated() switch(grab_state) // Current state. if(GRAB_PASSIVE) REMOVE_TRAIT(pulling, TRAIT_IMMOBILIZED, CHOKEHOLD_TRAIT) @@ -101,7 +102,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( /mob/living/carbon/alien/adult/proc/can_consume(atom/movable/poor_soul) if(!isliving(poor_soul) || pulling != poor_soul) return FALSE - if(incapacitated() || grab_state < GRAB_AGGRESSIVE || stat != CONSCIOUS) + if(incapacitated || grab_state < GRAB_AGGRESSIVE || stat != CONSCIOUS) return FALSE if(get_dir(src, poor_soul) != dir) // Gotta face em 4head return FALSE @@ -120,7 +121,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( lucky_winner.visible_message(span_danger("[src] is attempting to devour [lucky_winner]!"), \ span_userdanger("[src] is attempting to devour you!")) - playsound(lucky_winner, 'sound/creatures/alien_eat.ogg', 100) + playsound(lucky_winner, 'sound/mobs/non-humanoids/alien/alien_eat.ogg', 100) if(!do_after(src, devour_time, lucky_winner, extra_checks = CALLBACK(src, PROC_REF(can_consume), lucky_winner))) return TRUE if(!can_consume(lucky_winner)) diff --git a/code/modules/mob/living/carbon/alien/adult/adult_defense.dm b/code/modules/mob/living/carbon/alien/adult/adult_defense.dm index d89f6de30d6e7..3b65549d6d9c0 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult_defense.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult_defense.dm @@ -33,7 +33,7 @@ apply_damage(damage, BRUTE, affecting) log_combat(user, src, "attacked") else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/punchmiss.ogg', 25, TRUE, -1) visible_message(span_danger("[user]'s punch misses [src]!"), \ span_danger("You avoid [user]'s punch!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_warning("Your punch misses [src]!")) 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 2da7974318a10..bb219c0a5db59 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -134,7 +134,7 @@ Doesn't work on other aliens/AI.*/ if(!chosen_recipient) return FALSE - var/to_whisper = tgui_input_text(owner, title = "Alien Whisper") + var/to_whisper = tgui_input_text(owner, title = "Alien Whisper", max_length = MAX_MESSAGE_LEN) if(QDELETED(chosen_recipient) || QDELETED(src) || QDELETED(owner) || !IsAvailable(feedback = TRUE) || !to_whisper) return FALSE if(chosen_recipient.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0)) @@ -298,7 +298,7 @@ Doesn't work on other aliens/AI.*/ neurotoxin.preparePixelProjectile(target, caller, modifiers) neurotoxin.firer = caller neurotoxin.fire() - caller.newtonian_move(get_dir(target, caller)) + caller.newtonian_move(get_angle(target, caller)) return TRUE // Has to return TRUE, otherwise is skipped. @@ -382,7 +382,7 @@ Doesn't work on other aliens/AI.*/ owner.visible_message(span_danger("[owner] hurls out the contents of their stomach!")) var/dir_angle = dir2angle(owner.dir) - playsound(owner, 'sound/creatures/alien_york.ogg', 100) + playsound(owner, 'sound/mobs/non-humanoids/alien/alien_york.ogg', 100) melting_pot.eject_stomach(slice_off_turfs(owner, border_diamond_range_turfs(owner, 9), dir_angle - angle_delta, dir_angle + angle_delta), 4, mob_speed, spit_speed) /// Gets the plasma level of this carbon's plasma vessel, or -1 if they don't have one @@ -406,4 +406,3 @@ Doesn't work on other aliens/AI.*/ /mob/living/carbon/alien/adjustPlasma(amount) . = ..() updatePlasmaDisplay() - diff --git a/code/modules/mob/living/carbon/alien/adult/queen.dm b/code/modules/mob/living/carbon/alien/adult/queen.dm index 4387f7db3eca0..a925b4c5460ea 100644 --- a/code/modules/mob/living/carbon/alien/adult/queen.dm +++ b/code/modules/mob/living/carbon/alien/adult/queen.dm @@ -168,10 +168,9 @@ span_noticealien("The queen has granted you a promotion to Praetorian!"), ) - var/mob/living/carbon/alien/adult/royal/praetorian/new_prae = new(to_promote.loc) - to_promote.mind.transfer_to(new_prae) - - qdel(to_promote) + var/mob/living/carbon/alien/lucky_winner = to_promote + var/mob/living/carbon/alien/adult/royal/praetorian/new_prae = new(lucky_winner.loc) + lucky_winner.alien_evolve(new_prae) qdel(src) return TRUE diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index f9d4c7c03cd7c..9744bcbada7e5 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -23,6 +23,13 @@ unique_name = TRUE var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?") + var/static/list/xeno_allowed_items = typecacheof(list( + /obj/item/clothing/mask/facehugger, + /obj/item/toy/basketball, // playing ball against a xeno is rigged since they cannot be disarmed, their game is out of this world + /obj/item/toy/toy_xeno, + /obj/item/sticker, //funny ~Jimmyl + /obj/item/toy/plush/rouny, + )) /mob/living/carbon/alien/Initialize(mapload) add_verb(src, /mob/living/proc/mob_sleep) @@ -37,6 +44,11 @@ . = ..() if(alien_speed) update_alien_speed() + LoadComponent( \ + /datum/component/itempicky, \ + xeno_allowed_items, \ + span_alien("Your claws lack the dexterity to hold %TARGET."), \ + CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_has_trait), src, TRAIT_ADVANCEDTOOLUSER)) /mob/living/carbon/alien/create_internal_organs() organs += new /obj/item/organ/internal/brain/alien @@ -112,6 +124,12 @@ Des: Removes all infected images from the alien. return FALSE return TRUE +/mob/living/carbon/alien/get_visible_suicide_message() + return "[src] is thrashing wildly! It looks like [p_theyre()] trying to commit suicide." + +/mob/living/carbon/alien/get_blind_suicide_message() + return "You hear thrashing." + /mob/living/carbon/alien/proc/alien_evolve(mob/living/carbon/alien/new_xeno) visible_message( span_alertalien("[src] begins to twist and contort!"), @@ -125,6 +143,11 @@ Des: Removes all infected images from the alien. mind.name = new_xeno.real_name mind.transfer_to(new_xeno) + var/obj/item/organ/internal/stomach/alien/melting_pot = get_organ_slot(ORGAN_SLOT_STOMACH) + var/obj/item/organ/internal/stomach/alien/frying_pan = new_xeno.get_organ_slot(ORGAN_SLOT_STOMACH) + if(istype(melting_pot) && istype(frying_pan)) + for (var/atom/movable/poor_sod as anything in melting_pot.stomach_contents) + frying_pan.consume_thing(poor_sod) qdel(src) /// Changes the name of the xeno we are evolving into in order to keep the same numerical identifier the old xeno had. @@ -143,9 +166,6 @@ Des: Removes all infected images from the alien. set_name() -/mob/living/carbon/alien/can_hold_items(obj/item/I) - return (I && (I.item_flags & XENOMORPH_HOLDABLE || ISADVANCEDTOOLUSER(src)) && ..()) - /mob/living/carbon/alien/on_lying_down(new_lying_angle) . = ..() update_icons() diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 630171ba2c15d..0217a99fa04be 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -27,7 +27,7 @@ In all, this is a lot like the monkey code. /N visible_message(span_notice("[user.name] nuzzles [src] trying to wake [p_them()] up!")) else if(health > 0) user.do_attack_animation(src, ATTACK_EFFECT_BITE) - playsound(loc, 'sound/weapons/bite.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/bite.ogg', 50, TRUE, -1) visible_message(span_danger("[user.name] bites [src]!"), \ span_userdanger("[user.name] bites you!"), span_hear("You hear a chomp!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You bite [src]!")) diff --git a/code/modules/mob/living/carbon/alien/emote.dm b/code/modules/mob/living/carbon/alien/emote.dm index 10d7550bb78fc..717e18c9b3166 100644 --- a/code/modules/mob/living/carbon/alien/emote.dm +++ b/code/modules/mob/living/carbon/alien/emote.dm @@ -27,4 +27,4 @@ /datum/emote/living/alien/roar/get_sound(mob/living/user) if(isalienadult(user)) - return 'sound/voice/hiss5.ogg' + return 'sound/mobs/non-humanoids/hiss/hiss5.ogg' diff --git a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm index 62dd4f88b2177..8f2446d000fde 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm @@ -17,7 +17,7 @@ var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(user.zone_selected)) apply_damage(damage, BRUTE, affecting) else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/punchmiss.ogg', 25, TRUE, -1) visible_message(span_danger("[user]'s kick misses [src]!"), \ span_danger("You avoid [user]'s kick!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_warning("Your kick misses [src]!")) diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 147079ae720c3..52f7b8dfc4789 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -11,7 +11,7 @@ /mob/living/carbon/alien/larva/update_stat() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return if(stat != DEAD) if(health <= -maxHealth || !get_organ_by_type(/obj/item/organ/internal/brain)) diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index f7ecd3075171e..7bd7d7aec49af 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -3,7 +3,7 @@ return..() /mob/living/carbon/alien/check_breath(datum/gas_mixture/breath) - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return if(!breath || (breath.total_moles() == 0)) diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index 9303cd2347413..6335326a1ad6a 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -291,7 +291,7 @@ // At 100% damage, the stomach burts // Otherwise, we give them a -50% -> 50% chance scaling with damage dealt if(!prob((damage_ratio * 100) - 50) && damage_ratio != 1) - playsound(play_from, 'sound/creatures/alien_organ_cut.ogg', 100, 1) + playsound(play_from, 'sound/mobs/non-humanoids/alien/alien_organ_cut.ogg', 100, 1) // We try and line up the "jump" here with the sound of the hit var/oldx = play_from.pixel_x var/oldy = play_from.pixel_y @@ -319,7 +319,7 @@ play_from.visible_message(span_danger("[user] blows a hole in [stomach_text] and escapes!"), \ span_userdanger("[user] escapes from your [stomach_text]. Hell, that hurts.")) - playsound(get_turf(play_from), 'sound/creatures/alien_explode.ogg', 100, extrarange = 4) + playsound(get_turf(play_from), 'sound/mobs/non-humanoids/alien/alien_explode.ogg', 100, extrarange = 4) eject_stomach(border_diamond_range_turfs(play_from, 6), 5, 1.5, 1, 8) shake_camera(user, 1 SECONDS, 3) if(owner) 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 9aeb31a4f554a..428d01608ae27 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -120,7 +120,7 @@ var/atom/xeno_loc = get_turf(owner) var/mob/living/carbon/alien/larva/new_xeno = new(xeno_loc) new_xeno.key = ghost.key - SEND_SOUND(new_xeno, sound('sound/voice/hiss5.ogg',0,0,0,100)) //To get the player's attention + SEND_SOUND(new_xeno, sound('sound/mobs/non-humanoids/hiss/hiss5.ogg',0,0,0,100)) //To get the player's attention new_xeno.add_traits(list(TRAIT_HANDS_BLOCKED, TRAIT_IMMOBILIZED, TRAIT_NO_TRANSFORM), type) //so we don't move during the bursting animation new_xeno.SetInvisibility(INVISIBILITY_MAXIMUM, id=type) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index e4a173343749d..98faada528f17 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -300,13 +300,13 @@ /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." + sterile = TRUE + slowdown = 1.5 //lamarr is too fat after being fed in captivity to effectively slow people down or something // SKYRAT EDIT ADDITION START: job-restricted examine text special_desc_requirement = EXAMINE_CHECK_ROLE special_desc_roles = list("ROLE_ALIEN") special_desc = "This young one has been cruelly mutilated. It lacks the capability to fill a host with our sisters." // SKYRAT EDIT ADDITION END - sterile = TRUE - slowdown = 1.5 //lamarr is too fat after being fed in captivity to effectively slow people down or something /obj/item/clothing/mask/facehugger/dead icon_state = "facehugger_dead" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index d0af382f1b771..5eed62db37f7e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -99,7 +99,7 @@ log_combat(src, victim, "crashed into") if(oof_noise) - playsound(src,'sound/weapons/punch1.ogg',50,TRUE) + playsound(src,'sound/items/weapons/punch1.ogg',50,TRUE) //Throwing stuff /mob/living/carbon/proc/toggle_throw_mode() @@ -188,13 +188,13 @@ if(thrown_item.throw_verb) verb_text = thrown_item.throw_verb do_attack_animation(target, no_effect = 1) - var/sound/throwsound = 'sound/weapons/throw.ogg' + var/sound/throwsound = 'sound/items/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' + throwsound = 'sound/items/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' + throwsound = 'sound/items/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. @@ -208,7 +208,12 @@ if(istype(potential_spine)) extra_throw_range += potential_spine.added_throw_range - newtonian_move(get_dir(target, src)) + var/drift_force = max(0.5 NEWTONS, 1 NEWTONS + power_throw) + if (isitem(thrown_thing)) + var/obj/item/thrown_item = thrown_thing + drift_force *= WEIGHT_TO_NEWTONS(thrown_item.w_class) + + newtonian_move(get_angle(target, src), drift_force = drift_force) 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) /mob/living/carbon/proc/canBeHandcuffed() @@ -556,7 +561,7 @@ //Updates the mob's health from bodyparts and mob damage variables /mob/living/carbon/updatehealth() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return var/total_burn = 0 var/total_brute = 0 @@ -841,7 +846,7 @@ /mob/living/carbon/update_stat() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return if(stat != DEAD) if(health <= HEALTH_THRESHOLD_DEAD && !HAS_TRAIT(src, TRAIT_NODEATH)) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 98e9e7e0fbb1a..734167fae6a11 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -295,7 +295,7 @@ Knockdown(stun_duration) /mob/living/carbon/proc/help_shake_act(mob/living/carbon/helper, force_friendly) - var/nosound = FALSE //SKYRATEDIT ADDITION - EMOTES + var/nosound = FALSE //SKYRAT EDIT ADDITION - EMOTES if(on_fire) to_chat(helper, span_warning("You can't put [p_them()] out with just your bare hands!")) return @@ -318,7 +318,7 @@ //SKYRAT EDIT ADDITION BEGIN - EMOTES -- SENSITIVE SNOUT TRAIT ADDITION else if(helper.zone_selected == BODY_ZONE_PRECISE_MOUTH) nosound = TRUE - if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && !(HAS_TRAIT(src, TRAIT_SENSITIVESNOUT) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS))) // Bubberstation Edit + if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !INCAPACITATED_IGNORING(src, INCAPABLE_RESTRAINTS) && !(HAS_TRAIT(src, TRAIT_SENSITIVESNOUT))) // Bubberstation Edit - Sensitive snoot check visible_message(span_warning("[helper] tries to boop [src] on the nose, but [p_they()] move[p_s()] out of the way.")) return else @@ -334,7 +334,7 @@ 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 - else if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS)) + else if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !INCAPACITATED_IGNORING(src, INCAPABLE_RESTRAINTS)) visible_message(span_warning("[helper] tries to pat [src] on the head, but [p_they()] move[p_s()] out of the way.")) return //SKYRAT EDIT ADDITION END @@ -381,7 +381,7 @@ to_chat(src, span_notice("[helper] squeezes you super tightly in a firm bear hug!")) else // SKYRAT EDIT ADDITION START - if (HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS)) + if (HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !INCAPACITATED_IGNORING(src, INCAPABLE_RESTRAINTS)) visible_message(span_warning("[helper] tries to hug [src], but [p_they()] move[p_s()] out of the way.")) return // SKYRAT EDIT ADDITION END @@ -438,10 +438,10 @@ get_up(TRUE) if(!nosound) // SKYRAT EDIT ADDITION - EMOTES - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) // SKYRAT EDIT CHANGE - EMOTES - Original was unindented but otherwise the same + playsound(loc, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) // SKYRAT EDIT CHANGE - EMOTES - Original was unindented but otherwise the same // Shake animation - if (incapacitated()) + if (incapacitated) shake_up_animation() /mob/proc/shake_up_animation() @@ -545,7 +545,7 @@ ears.set_organ_damage(ears.maxHealth) else if(ears.damage >= 5) to_chat(src, span_warning("Your ears start to ring!")) - SEND_SOUND(src, sound('sound/weapons/flash_ring.ogg',0,1,0,250)) + SEND_SOUND(src, sound('sound/items/weapons/flash_ring.ogg',0,1,0,250)) return effect_amount //how soundbanged we are @@ -691,11 +691,17 @@ var/bleed_rate = grasped_part.get_modified_bleed_rate() var/bleeding_text = (bleed_rate ? ", trying to stop the bleeding" : "") user.visible_message(span_danger("[user] grasps at [user.p_their()] [grasped_part.name][bleeding_text]."), span_notice("You grab hold of your [grasped_part.name] tightly."), vision_distance=COMBAT_MESSAGE_RANGE) - playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(get_turf(src), 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) return TRUE /// Randomise a body part and organ of this mob /mob/living/carbon/proc/bioscramble(scramble_source) + if(!(mob_biotypes & MOB_ORGANIC)) + return FALSE + + if (HAS_TRAIT(src, TRAIT_GENELESS)) + return FALSE + if (run_armor_check(attack_flag = BIO, absorb_text = "Your armor protects you from [scramble_source]!") >= 100) return FALSE diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 0ee71842400fd..612d5e15a54fb 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -126,5 +126,4 @@ COOLDOWN_DECLARE(bleeding_message_cd) - var/next_smell = 0 //SKYRAT EDIT ADDITION /// Cooldown for the next smell diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index 83b46801aa8f1..05192c8918aaa 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -428,7 +428,7 @@ /mob/living/carbon/update_worn_handcuffs(update_obscured = TRUE) remove_overlay(HANDCUFF_LAYER) - if(handcuffed && !(handcuffed.item_flags & ABSTRACT)) //SKYRAT EDIT ADDED !(handcuffed.item_flags & ABSTRACT) + if(handcuffed && !(handcuffed.item_flags & ABSTRACT)) //SKYRAT EDIT - ADDED !(handcuffed.item_flags & ABSTRACT) if(update_obscured) update_obscured_slots(handcuffed.flags_inv) var/mutable_appearance/handcuff_overlay = mutable_appearance('icons/mob/simple/mob.dmi', "handcuff1", -HANDCUFF_LAYER) diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index b781b296bc882..ccbf735bd85aa 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -10,6 +10,7 @@ sharpness = NONE, attack_direction = null, attacking_item, + wound_clothing = TRUE, ) // Spread damage should always have def zone be null if(spread_damage) @@ -46,6 +47,7 @@ sharpness = NONE, attack_direction = null, attacking_item, + wound_clothing = TRUE, ) // Add relevant DR modifiers into blocked value to pass to parent @@ -103,7 +105,7 @@ . = heal_overall_damage(brute = abs(amount), required_bodytype = required_bodytype, updating_health = updating_health, forced = forced) /mob/living/carbon/setBruteLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype) - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE var/current = getBruteLoss() var/diff = amount - current @@ -120,7 +122,7 @@ . = heal_overall_damage(burn = abs(amount), required_bodytype = required_bodytype, updating_health = updating_health, forced = forced) /mob/living/carbon/setFireLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype) - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE var/current = getFireLoss() var/diff = amount - current @@ -150,7 +152,7 @@ apply_status_effect(/datum/status_effect/incapacitating/stamcrit) /** - * If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the damage proc on that organ. + * If an organ exists in the slot requested, and we are capable of taking damage (we don't have TRAIT_GODMODE), call the damage proc on that organ. * * Arguments: * * slot - organ slot, like [ORGAN_SLOT_HEART] @@ -162,14 +164,14 @@ */ /mob/living/carbon/adjustOrganLoss(slot, amount, maximum, required_organ_flag = NONE) var/obj/item/organ/affected_organ = get_organ_slot(slot) - if(!affected_organ || (status_flags & GODMODE)) + if(!affected_organ || HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE if(required_organ_flag && !(affected_organ.organ_flags & required_organ_flag)) return FALSE return affected_organ.apply_organ_damage(amount, maximum) /** - * If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the set damage proc on that organ, which can + * If an organ exists in the slot requested, and we are capable of taking damage (we don't have TRAIT_GODMODE), call the set damage proc on that organ, which can * set or clear the failing variable on that organ, making it either cease or start functions again, unlike adjustOrganLoss. * * Arguments: @@ -181,7 +183,7 @@ */ /mob/living/carbon/setOrganLoss(slot, amount, required_organ_flag = NONE) var/obj/item/organ/affected_organ = get_organ_slot(slot) - if(!affected_organ || (status_flags & GODMODE)) + if(!affected_organ || HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE if(required_organ_flag && !(affected_organ.organ_flags & required_organ_flag)) return FALSE @@ -267,7 +269,7 @@ */ /mob/living/carbon/take_bodypart_damage(brute = 0, burn = 0, updating_health = TRUE, required_bodytype, check_armor = FALSE, wound_bonus = 0, bare_wound_bonus = 0, sharpness = NONE) . = FALSE - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return var/list/obj/item/bodypart/parts = get_damageable_bodyparts(required_bodytype) if(!parts.len) @@ -314,7 +316,7 @@ /mob/living/carbon/take_overall_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, forced = FALSE, required_bodytype) . = FALSE - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return // treat negative args as positive brute = abs(brute) diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index bfa097b07a938..cc1043587a21e 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -28,15 +28,13 @@ vary = TRUE /datum/emote/living/carbon/clap/get_sound(mob/living/user) - if(!ishuman(user)) - return if(!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM)) return return pick( - 'sound/misc/clap1.ogg', - 'sound/misc/clap2.ogg', - 'sound/misc/clap3.ogg', - 'sound/misc/clap4.ogg', + 'sound/mobs/humanoids/human/clap/clap1.ogg', + 'sound/mobs/humanoids/human/clap/clap2.ogg', + 'sound/mobs/humanoids/human/clap/clap3.ogg', + 'sound/mobs/humanoids/human/clap/clap4.ogg', ) */ //SKYRAT EDIT REMOVAL END @@ -45,7 +43,7 @@ key = "crack" key_third_person = "cracks" message = "cracks their knuckles." - sound = 'sound/misc/knuckles.ogg' + sound = 'sound/mobs/humanoids/human/knuckle_crack/knuckles.ogg' hands_use_check = TRUE cooldown = 6 SECONDS @@ -186,7 +184,7 @@ /datum/emote/living/carbon/snap/get_sound(mob/living/user) if(ishuman(user)) - return pick('sound/misc/fingersnap1.ogg', 'sound/misc/fingersnap2.ogg') + return pick('sound/mobs/humanoids/human/snap/fingersnap1.ogg', 'sound/mobs/humanoids/human/snap/fingersnap2.ogg') return null Bubber removal end */ diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index c71962eb034d7..c3a4544e50718 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -1,4 +1,19 @@ +/// Adds a newline to the examine list if the above entry is not empty and it is not the first element in the list +#define ADD_NEWLINE_IF_NECESSARY(list) if(length(list) > 0 && list[length(list)]) { list += "" } + +/mob/living/carbon/human/get_examine_name(mob/user) + if(!HAS_TRAIT(user, TRAIT_PROSOPAGNOSIA)) + return ..() + + return "Unknown" + +/mob/living/carbon/human/get_examine_icon(mob/user) + return null + /mob/living/carbon/examine(mob/user) + if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + return list(span_warning("You're struggling to make out any details...")) + var/t_He = p_They() var/t_His = p_Their() var/t_his = p_their() @@ -6,160 +21,617 @@ 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 - var/obscured = check_obscured_slots() + . = list() + . += get_clothing_examine_info(user) + // give us some space between clothing examine and the rest + ADD_NEWLINE_IF_NECESSARY(.) - if (handcuffed) - . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!") - if (head) - . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head. " - if(wear_mask && !(obscured & ITEM_SLOT_MASK)) - . += "[t_He] [t_is] wearing [wear_mask.get_examine_string(user)] on [t_his] face." - if(wear_neck && !(obscured & ITEM_SLOT_NECK)) - . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck." + var/appears_dead = FALSE + var/just_sleeping = FALSE - for(var/obj/item/held_thing in held_items) - if(held_thing.item_flags & (ABSTRACT|EXAMINE_SKIP|HAND_ITEM)) - continue - . += "[t_He] [t_is] holding [held_thing.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(held_thing))]." + if(!appears_alive()) + appears_dead = TRUE - if (back) - . += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back." + var/obj/item/clothing/glasses/shades = get_item_by_slot(ITEM_SLOT_EYES) + var/are_we_in_weekend_at_bernies = shades?.tint && buckled && istype(buckled, /obj/vehicle/ridden/wheelchair) - . += EXAMINE_SECTION_BREAK // SKYRAT EDIT ADDITION - hr sections + if(isliving(user) && (HAS_MIND_TRAIT(user, TRAIT_NAIVE) || are_we_in_weekend_at_bernies)) + just_sleeping = TRUE - var/appears_dead = FALSE - if (stat == DEAD) - appears_dead = TRUE - if(get_organ_by_type(/obj/item/organ/internal/brain)) - . += span_deadsay("[t_He] [t_is] limp and unresponsive, with no signs of life.") - else if(get_bodypart(BODY_ZONE_HEAD)) - . += span_deadsay("It appears that [t_his] brain is missing...") - - var/list/msg = list("") - for(var/obj/item/bodypart/bodypart as anything in bodyparts) - for(var/obj/item/embedded_item as anything in bodypart.embedded_objects) - if(embedded_item.is_embed_harmless()) - msg += "[t_He] [t_has] [icon2html(embedded_item, user)] \a [embedded_item] stuck to [t_his] [bodypart.name]!\n" - else - msg += "[t_He] [t_has] [icon2html(embedded_item, user)] \a [embedded_item] embedded in [t_his] [bodypart.name]!\n" - for(var/datum/wound/bodypart_wound as anything in bodypart.wounds) - msg += "[bodypart_wound.get_examine_description(user)]\n" + if(!just_sleeping) + // since this is relatively important and giving it space makes it easier to read + ADD_NEWLINE_IF_NECESSARY(.) + if(HAS_TRAIT(src, TRAIT_SUICIDED)) + . += span_warning("[t_He] appear[p_s()] to have committed suicide... there is no hope of recovery.") + + . += generate_death_examine_text() + + //Status effects + var/list/status_examines = get_status_effect_examinations() + if (length(status_examines)) + . += status_examines + + if(get_bodypart(BODY_ZONE_HEAD) && !get_organ_by_type(/obj/item/organ/internal/brain)) + . += span_deadsay("It appears that [t_his] brain is missing...") - for(var/obj/item/bodypart/disabled_limb as anything in get_disabled_limbs()) + var/list/missing = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + var/list/disabled = list() + for(var/obj/item/bodypart/body_part as anything in bodyparts) + if(body_part.bodypart_disabled) + disabled += body_part + missing -= body_part.body_zone + for(var/obj/item/embedded as anything in body_part.embedded_objects) + var/stuck_wordage = embedded.is_embed_harmless() ? "stuck to" : "embedded in" + . += span_boldwarning("[t_He] [t_has] [icon2html(embedded, user)] \a [embedded] [stuck_wordage] [t_his] [body_part.plaintext_zone]!") + + for(var/datum/wound/iter_wound as anything in body_part.wounds) + . += span_danger(iter_wound.get_examine_description(user)) + + for(var/obj/item/bodypart/body_part as anything in disabled) var/damage_text - damage_text = (disabled_limb.brute_dam >= disabled_limb.burn_dam) ? disabled_limb.heavy_brute_msg : disabled_limb.heavy_burn_msg - msg += "[t_His] [disabled_limb.name] is [damage_text]!\n" + if(HAS_TRAIT(body_part, TRAIT_DISABLED_BY_WOUND)) + continue // skip if it's disabled by a wound (cuz we'll be able to see the bone sticking out!) + if(body_part.get_damage() < body_part.max_damage) //we don't care if it's stamcritted + damage_text = "limp and lifeless" + else + damage_text = (body_part.brute_dam >= body_part.burn_dam) ? body_part.heavy_brute_msg : body_part.heavy_burn_msg + . += span_boldwarning("[capitalize(t_his)] [body_part.plaintext_zone] is [damage_text]!") - for(var/obj/item/bodypart/missing_limb as anything in get_missing_limbs()) - if(missing_limb == BODY_ZONE_HEAD) - msg += "[span_deadsay("[t_His] [parse_zone(missing_limb)] is missing!")]\n" + //stores missing limbs + var/l_limbs_missing = 0 + var/r_limbs_missing = 0 + for(var/gone in missing) + if(gone == BODY_ZONE_HEAD) + . += span_deadsay("[t_His] [parse_zone(gone)] is missing!") continue - msg += "[span_warning("[t_His] [parse_zone(missing_limb)] is missing!")]\n" + if(gone == BODY_ZONE_L_ARM || gone == BODY_ZONE_L_LEG) + l_limbs_missing++ + else if(gone == BODY_ZONE_R_ARM || gone == BODY_ZONE_R_LEG) + r_limbs_missing++ + + . += span_boldwarning("[capitalize(t_his)] [parse_zone(gone)] is missing!") + if(l_limbs_missing >= 2 && r_limbs_missing == 0) + . += span_tinydanger("[t_He] look[p_s()] all right now...") + else if(l_limbs_missing == 0 && r_limbs_missing >= 2) + . += span_tinydanger("[t_He] really keep[p_s()] to the left...") + else if(l_limbs_missing >= 2 && r_limbs_missing >= 2) + . += span_tinydanger("[t_He] [p_do()]n't seem all there...") - var/temp = getBruteLoss() if(!(user == src && has_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy))) //fake healthy + var/temp + if(user == src && has_status_effect(/datum/status_effect/grouped/screwy_hud/fake_crit))//fake damage + temp = 50 + else + temp = getBruteLoss() + var/list/damage_desc = get_majority_bodypart_damage_desc() if(temp) - if (temp < 25) - msg += "[t_He] [t_has] minor bruising.\n" - else if (temp < 50) - msg += "[t_He] [t_has] moderate bruising!\n" + if(temp < 25) + . += span_danger("[t_He] [t_has] minor [damage_desc[BRUTE]].") + else if(temp < 50) + . += span_danger("[t_He] [t_has] moderate [damage_desc[BRUTE]]!") else - msg += "[t_He] [t_has] severe bruising!\n" + . += span_bolddanger("[t_He] [t_has] severe [damage_desc[BRUTE]]!") temp = getFireLoss() if(temp) - if (temp < 25) - msg += "[t_He] [t_has] minor burns.\n" + if(temp < 25) + . += span_danger("[t_He] [t_has] minor [damage_desc[BURN]].") else if (temp < 50) - msg += "[t_He] [t_has] moderate burns!\n" + . += span_danger("[t_He] [t_has] moderate [damage_desc[BURN]]!") else - msg += "[t_He] [t_has] severe burns!\n" + . += span_bolddanger("[t_He] [t_has] severe [damage_desc[BURN]]!") - if(HAS_TRAIT(src, TRAIT_DUMB)) - msg += "[t_He] seem[p_s()] to be clumsy and unable to think.\n" + if(pulledby?.grab_state) + . += span_warning("[t_He] [t_is] restrained by [pulledby]'s grip.") - 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)) - msg += "[t_He] look[p_s()] a little soaked.\n" + if(nutrition < NUTRITION_LEVEL_STARVING - 50) + . += span_warning("[t_He] [t_is] severely malnourished.") + else if(nutrition >= NUTRITION_LEVEL_FAT) + if(user.nutrition < NUTRITION_LEVEL_STARVING - 50) + . += span_hypnophrase("[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.") + else + . += "[t_He] [t_is] quite chubby." + switch(disgust) + if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) + . += "[t_He] look[p_s()] a bit grossed out." + if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) + . += "[t_He] look[p_s()] really grossed out." + if(DISGUST_LEVEL_DISGUSTED to INFINITY) + . += "[t_He] look[p_s()] extremely disgusted." - if(pulledby?.grab_state) - msg += "[t_He] [t_is] restrained by [pulledby]'s grip.\n" + var/apparent_blood_volume = blood_volume + if(HAS_TRAIT(src, TRAIT_USES_SKINTONES) && ishuman(src)) + var/mob/living/carbon/human/husrc = src // gross istypesrc but easier than refactoring even further for now + if(husrc.skin_tone == "albino") + apparent_blood_volume -= (BLOOD_VOLUME_NORMAL * 0.25) // knocks you down a few pegs + switch(apparent_blood_volume) + if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) + . += span_warning("[t_He] [t_has] pale skin.") + if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) + . += span_boldwarning("[t_He] look[p_s()] like pale death.") + if(-INFINITY to BLOOD_VOLUME_BAD) + . += span_deadsay("[t_He] resemble[p_s()] a crushed, empty juice pouch.") + + if(is_bleeding()) + var/list/obj/item/bodypart/bleeding_limbs = list() + var/list/obj/item/bodypart/grasped_limbs = list() + + for(var/obj/item/bodypart/body_part as anything in bodyparts) + if(body_part.get_modified_bleed_rate()) + bleeding_limbs += body_part.plaintext_zone + if(body_part.grasped_by) + grasped_limbs += body_part.plaintext_zone + + if(LAZYLEN(bleeding_limbs)) + var/bleed_text = "" + if(appears_dead) + bleed_text += "" + bleed_text += "Blood is visible in [t_his] open" + else + bleed_text += "" + bleed_text += "[t_He] [t_is] bleeding from [t_his] " + + bleed_text += english_list(bleeding_limbs, and_text = " and ") + + if(appears_dead) + bleed_text += ", but it has pooled and is not flowing." + else + if(HAS_TRAIT(src, TRAIT_BLOODY_MESS)) + bleed_text += " incredibly quickly" + bleed_text += "!" + + if(appears_dead) + bleed_text += "" + else + bleed_text += "" + bleed_text += "" + + . += bleed_text + if(LAZYLEN(grasped_limbs)) + for(var/grasped_part in grasped_limbs) + . += "[t_He] [t_is] holding [t_his] [grasped_part] to slow the bleeding!" + + if(reagents.has_reagent(/datum/reagent/teslium, needs_metabolizing = TRUE)) + . += span_smallnoticeital("[t_He] [t_is] emitting a gentle blue glow!") // this should be signalized + + if(just_sleeping) + . += span_notice("[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.") + + else if(!appears_dead) + var/mob/living/living_user = user + if(src != user) + if(HAS_TRAIT(user, TRAIT_EMPATH)) + if (combat_mode) + . += "[t_He] seem[p_s()] to be on guard." + if (getOxyLoss() >= 10) + . += "[t_He] seem[p_s()] winded." + if (getToxLoss() >= 10) + . += "[t_He] seem[p_s()] sickly." + if(mob_mood.sanity <= SANITY_DISTURBED) + . += "[t_He] seem[p_s()] distressed." + living_user.add_mood_event("empath", /datum/mood_event/sad_empath, src) + if(is_blind()) + . += "[t_He] appear[p_s()] to be staring off into space." + if (HAS_TRAIT(src, TRAIT_DEAF)) + . += "[t_He] appear[p_s()] to not be responding to noises." + if (bodytemperature > dna.species.bodytemp_heat_damage_limit) + . += "[t_He] [t_is] flushed and wheezing." + if (bodytemperature < dna.species.bodytemp_cold_damage_limit) + . += "[t_He] [t_is] shivering." + + if(HAS_TRAIT(user, TRAIT_SPIRITUAL) && mind?.holy_role) + . += "[t_He] [t_has] a holy aura about [t_him]." + living_user.add_mood_event("religious_comfort", /datum/mood_event/religiously_comforted) - var/scar_severity = 0 - for(var/i in all_scars) - var/datum/scar/S = i - if(S.is_visible(user)) - scar_severity += S.severity - - switch(scar_severity) - if(1 to 4) - msg += "[span_tinynoticeital("[t_He] [t_has] visible scarring, you can look again to take a closer look...")]\n" - if(5 to 8) - msg += "[span_smallnoticeital("[t_He] [t_has] several bad scars, you can look again to take a closer look...")]\n" - if(9 to 11) - msg += "[span_notice("[t_He] [t_has] significantly disfiguring scarring, you can look again to take a closer look...")]\n" - if(12 to INFINITY) - msg += "[span_notice("[t_He] [t_is] just absolutely fucked up, you can look again to take a closer look...")]\n" - - msg += "" - - . += msg.Join("") - - if(!appears_dead) switch(stat) - if(SOFT_CRIT) - . += "[t_His] breathing is shallow and labored." if(UNCONSCIOUS, HARD_CRIT) - . += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep." - - var/trait_exam = common_trait_examine() - if (!isnull(trait_exam)) - . += trait_exam - - if(mob_mood) - switch(mob_mood.shown_mood) - if(-INFINITY to MOOD_SAD4) - . += "[t_He] look[p_s()] depressed." - if(MOOD_SAD4 to MOOD_SAD3) - . += "[t_He] look[p_s()] very sad." - if(MOOD_SAD3 to MOOD_SAD2) - . += "[t_He] look[p_s()] a bit down." - if(MOOD_HAPPY2 to MOOD_HAPPY3) - . += "[t_He] look[p_s()] quite happy." - if(MOOD_HAPPY3 to MOOD_HAPPY4) - . += "[t_He] look[p_s()] very happy." - if(MOOD_HAPPY4 to INFINITY) - . += "[t_He] look[p_s()] ecstatic." - . += "" + . += span_notice("[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.") + if(SOFT_CRIT) + . += span_notice("[t_He] [t_is] barely conscious.") + if(CONSCIOUS) + if(HAS_TRAIT(src, TRAIT_DUMB)) + . += "[t_He] [t_has] a stupid expression on [t_his] face." + if(get_organ_by_type(/obj/item/organ/internal/brain) && isnull(ai_controller)) + var/npc_message = "" + if(!key) + npc_message = "[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." + else if(!client) + npc_message = "[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." // BUBBER EDIT CHANGE - SSD_INDICATOR - ORIGINAL: npc_message ="[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon." + if(npc_message) + // give some space since this is usually near the end + ADD_NEWLINE_IF_NECESSARY(.) + . += span_deadsay(npc_message) + + var/scar_severity = 0 + for(var/datum/scar/scar as anything in all_scars) + if(scar.is_visible(user)) + scar_severity += scar.severity + + if(scar_severity >= 1) + // give some space since this is even more usually near the end + ADD_NEWLINE_IF_NECESSARY(.) + switch(scar_severity) + if(1 to 4) + . += span_tinynoticeital("[t_He] [t_has] visible scarring, you can look again to take a closer look...") + if(5 to 8) + . += span_smallnoticeital("[t_He] [t_has] several bad scars, you can look again to take a closer look...") + if(9 to 11) + . += span_notice("[t_He] [t_has] significantly disfiguring scarring, you can look again to take a closer look...") + if(12 to INFINITY) + . += span_notice("[t_He] [t_is] just absolutely fucked up, you can look again to take a closer look...") + + if(HAS_TRAIT(src, TRAIT_HUSK)) + . += span_warning("This body has been reduced to a grotesque husk.") + if(HAS_MIND_TRAIT(user, TRAIT_MORBID)) + if(HAS_TRAIT(src, TRAIT_DISSECTED)) + . += span_notice("[user.p_They()] appear[user.p_s()] to have been dissected. Useless for examination... for now.") + if(HAS_TRAIT(src, TRAIT_SURGICALLY_ANALYZED)) + . += span_notice("A skilled hand has mapped this one's internal intricacies. It will be far easier to perform future experimentations upon [user.p_them()]. Exquisite.") + if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FITNESS)) + . += compare_fitness(user) + + var/hud_info = get_hud_examine_info(user) + if(length(hud_info)) + . += hud_info + + if(isobserver(user)) + ADD_NEWLINE_IF_NECESSARY(.) + . += "Quirks: [get_quirk_string(FALSE, CAT_QUIRK_ALL)]" + + //SKYRAT 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 BEGIN - CUSTOMIZATION + for(var/genital in GLOB.possible_genitals) + if(dna.species.mutant_bodyparts[genital]) + var/datum/sprite_accessory/genital/G = SSaccessories.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...\]" + break + + var/flavor_text_link + /// The first 1-FLAVOR_PREVIEW_LIMIT characters in the mob's "flavor_text" DNA feature. FLAVOR_PREVIEW_LIMIT is defined in flavor_defines.dm. + var/preview_text = copytext_char((dna.features["flavor_text"]), 1, FLAVOR_PREVIEW_LIMIT) + // What examine_tgui.dm uses to determine if flavor text appears as "Obscured". + var/obscurity_examine_pref = (client?.prefs?.read_preference(/datum/preference/toggle/obscurity_examine)) //BUBBERSTATION EDIT + var/face_obscured = (wear_mask && (wear_mask.flags_inv & HIDEFACE) && obscurity_examine_pref) || (head && (head.flags_inv & HIDEFACE) && obscurity_examine_pref) // BUBBERSTATION EDIT + + if (!(face_obscured)) + flavor_text_link = span_notice("[preview_text]... \[Look closer?\]") + else + flavor_text_link = span_notice("\[Examine closely...\]") + if (flavor_text_link) + . += flavor_text_link + + //Temporary flavor text addition: + if(temporary_flavor_text) + if(length_char(temporary_flavor_text) < TEMPORARY_FLAVOR_PREVIEW_LIMIT) + . += span_revennotice("
        They look different than usual: [temporary_flavor_text]") + else + . += span_revennotice("
        They look different than usual: [copytext_char(temporary_flavor_text, 1, TEMPORARY_FLAVOR_PREVIEW_LIMIT)]... More...") + + if(client) + var/erp_status_pref = client.prefs.read_preference(/datum/preference/choiced/erp_status) + if(erp_status_pref && !CONFIG_GET(flag/disable_erp_preferences)) + . += EXAMINE_SECTION_BREAK + . += span_info("ERP Status: [span_revenboldnotice(erp_status_pref)]") + // SKYRAT EDIT END SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) + if(length(.)) + .[1] = "" + .[1] + .[length(.)] += "" + return . -/mob/living/carbon/examine_more(mob/user) - . = ..() - . += span_notice("You examine [src] closer, and note the following...") - - 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) - . += "[span_info("[p_They()] [p_have()] \an [part.name].")]" - - var/list/visible_scars - for(var/i in all_scars) - var/datum/scar/S = i - if(S.is_visible(user)) - LAZYADD(visible_scars, S) - - for(var/i in visible_scars) - var/datum/scar/S = i - var/scar_text = S.get_examine_description(user) - if(scar_text) - . += "[scar_text]" +/** + * Shows any and all examine text related to any status effects the user has. + */ +/mob/living/proc/get_status_effect_examinations() + var/list/examine_list = list() + + for(var/datum/status_effect/effect as anything in status_effects) + var/effect_text = effect.get_examine_text() + if(!effect_text) + continue + + examine_list += effect_text + + if(!length(examine_list)) + return + + return examine_list.Join("
        ") + +/// Returns death message for mob examine text +/mob/living/carbon/proc/generate_death_examine_text() + var/mob/dead/observer/ghost = get_ghost(TRUE, TRUE) + var/t_He = p_They() + var/t_his = p_their() + var/t_is = p_are() + //This checks to see if the body is revivable + 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...") + +/// Returns a list of "damtype" => damage description based off of which bodypart description is most common +/mob/living/carbon/proc/get_majority_bodypart_damage_desc() + var/list/seen_damage = list() // This looks like: ({Damage type} = list({Damage description for that damage type} = {number of times it has appeared}, ...), ...) + var/list/most_seen_damage = list() // This looks like: ({Damage type} = {Frequency of the most common description}, ...) + var/list/final_descriptions = list() // This looks like: ({Damage type} = {Most common damage description for that type}, ...) + for(var/obj/item/bodypart/part as anything in bodyparts) + for(var/damage_type in part.damage_examines) + var/damage_desc = part.damage_examines[damage_type] + if(!seen_damage[damage_type]) + seen_damage[damage_type] = list() + + if(!seen_damage[damage_type][damage_desc]) + seen_damage[damage_type][damage_desc] = 1 + else + seen_damage[damage_type][damage_desc] += 1 + + if(seen_damage[damage_type][damage_desc] > most_seen_damage[damage_type]) + most_seen_damage[damage_type] = seen_damage[damage_type][damage_desc] + final_descriptions[damage_type] = damage_desc + return final_descriptions + +/// Coolects examine information about the mob's clothing and equipment +/mob/living/carbon/proc/get_clothing_examine_info(mob/living/user) + . = list() + var/obscured = check_obscured_slots() + var/t_He = p_They() + var/t_His = p_Their() + var/t_his = p_their() + var/t_has = p_have() + var/t_is = p_are() + //head + if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [head.examine_title(user)] on [t_his] head." + //back + if(back && !(back.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [back.examine_title(user)] on [t_his] back." + //Hands + for(var/obj/item/held_thing in held_items) + if(held_thing.item_flags & (ABSTRACT|EXAMINE_SKIP|HAND_ITEM)) + continue + . += "[t_He] [t_is] holding [held_thing.examine_title(user)] in [t_his] [get_held_index_name(get_held_index_of_item(held_thing))]." + //gloves + if(gloves && !(obscured & ITEM_SLOT_GLOVES) && !(gloves.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [gloves.examine_title(user)] on [t_his] hands." + else if(GET_ATOM_BLOOD_DNA_LENGTH(src)) + if(num_hands) + . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a "]blood-stained hand[num_hands > 1 ? "s" : ""]!") + //handcuffed? + if(handcuffed) + var/cables_or_cuffs = istype(handcuffed, /obj/item/restraints/handcuffs/cable) ? "restrained with cable" : "handcuffed" + . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] [cables_or_cuffs]!") + //shoes + if(shoes && !(obscured & ITEM_SLOT_FEET) && !(shoes.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [shoes.examine_title(user)] on [t_his] feet." + //mask + if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !(wear_mask.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [wear_mask.examine_title(user)] on [t_his] face." + if(wear_neck && !(obscured & ITEM_SLOT_NECK) && !(wear_neck.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [wear_neck.examine_title(user)] around [t_his] neck." + //eyes + if(!(obscured & ITEM_SLOT_EYES) ) + if(glasses && !(glasses.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [glasses.examine_title(user)] covering [t_his] eyes." + else if(HAS_TRAIT(src, TRAIT_UNNATURAL_RED_GLOWY_EYES)) + . += span_warning("[t_His] eyes are glowing with an unnatural red aura!") + else if(HAS_TRAIT(src, TRAIT_BLOODSHOT_EYES)) + . += span_warning("[t_His] eyes are bloodshot!") + //ears + if(ears && !(obscured & ITEM_SLOT_EARS) && !(ears.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [ears.examine_title(user)] on [t_his] ears." + +// Yes there's a lot of copypasta here, we can improve this later when carbons are less dumb in general +/mob/living/carbon/human/get_clothing_examine_info(mob/living/user) + . = list() + var/obscured = check_obscured_slots() + var/t_He = p_They() + var/t_His = p_Their() + var/t_his = p_their() + var/t_has = p_have() + var/t_is = p_are() + + //uniform + if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && !(w_uniform.item_flags & EXAMINE_SKIP)) + //accessory + var/accessory_message = "" + if(istype(w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/undershirt = w_uniform + var/list/accessories = undershirt.list_accessories_with_icon(user) + if(length(accessories)) + accessory_message = " with [english_list(accessories)] attached" + + . += "[t_He] [t_is] wearing [w_uniform.examine_title(user)][accessory_message]." + //SPLURT EDIT - shirt + if(w_shirt && !undershirt_hidden() && !(w_shirt.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [w_shirt.examine_title(user)]." + //SPLURT EDIT - bra + if(w_bra && !bra_hidden() && !(w_bra.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [w_bra.examine_title(user)]." + //SPLURT EDIT - underwear + if(w_underwear && !underwear_hidden() && !(w_underwear.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [w_underwear.examine_title(user)]." + //head + if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [head.examine_title(user)] on [t_his] head." + //mask + if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !(wear_mask.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [wear_mask.examine_title(user)] on [t_his] face." + //neck + if(wear_neck && !(obscured & ITEM_SLOT_NECK) && !(wear_neck.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [wear_neck.examine_title(user)] around [t_his] neck." + //eyes + if(!(obscured & ITEM_SLOT_EYES) ) + if(glasses && !(glasses.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [glasses.examine_title(user)] covering [t_his] eyes." + else if(HAS_TRAIT(src, TRAIT_UNNATURAL_RED_GLOWY_EYES)) + . += span_warning("[t_His] eyes are glowing with an unnatural red aura!") + else if(HAS_TRAIT(src, TRAIT_BLOODSHOT_EYES)) + . += span_warning("[t_His] eyes are bloodshot!") + //ears + if(ears && !(obscured & ITEM_SLOT_EARS) && !(ears.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [ears.examine_title(user)] on [t_his] ears." + //SPLURT EDIT - ears extra + if(ears_extra && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [ears_extra.examine_title(user)] on [t_his] right ear." + //SPLURT EDIT - ears extra + //wearing two ear items makes you look like an idiot + if((istype(ears, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_LEFT) && !(ears.item_flags & EXAMINE_SKIP)) && (istype(ears_extra, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP))) + . += span_warning("[t_He] looks quite tacky wearing both \an [ears.name] and \an [ears_extra.name] on [t_his] head.") + //suit/armor + if(wear_suit && !(wear_suit.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [wear_suit.examine_title(user)]." + //suit/armor storage + if(s_store && !(obscured & ITEM_SLOT_SUITSTORE) && !(s_store.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] carrying [s_store.examine_title(user)] on [t_his] [wear_suit.name]." + //back + if(back && !(back.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [back.examine_title(user)] on [t_his] back." + //ID + if(wear_id && !(wear_id.item_flags & EXAMINE_SKIP)) + var/obj/item/card/id/id = wear_id.GetID() + if(id && get_dist(user, src) <= ID_EXAMINE_DISTANCE) + var/id_href = "[wear_id.examine_title(user)]" + . += "[t_He] [t_is] wearing [id_href]." + + else + . += "[t_He] [t_is] wearing [wear_id.examine_title(user)]." + //Hands + for(var/obj/item/held_thing in held_items) + if(held_thing.item_flags & (ABSTRACT|EXAMINE_SKIP|HAND_ITEM)) + continue + . += "[t_He] [t_is] holding [held_thing.examine_title(user)] in [t_his] [get_held_index_name(get_held_index_of_item(held_thing))]." + //gloves + if(gloves && !(obscured & ITEM_SLOT_GLOVES) && !(gloves.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [gloves.examine_title(user)] on [t_his] hands." + else if(GET_ATOM_BLOOD_DNA_LENGTH(src) || blood_in_hands) + if(num_hands) + . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a "]blood-stained hand[num_hands > 1 ? "s" : ""]!") + //SPLURT EDIT - wrists + if(wrists && !wrists_hidden() && !(wrists.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [wrists.examine_title(user)]." + //handcuffed? + if(handcuffed) + var/cables_or_cuffs = istype(handcuffed, /obj/item/restraints/handcuffs/cable) ? "restrained with cable" : "handcuffed" + . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] [cables_or_cuffs]!") + //belt + if(belt && !(belt.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_has] [belt.examine_title(user)] about [t_his] waist." + //shoes + if(shoes && !(obscured & ITEM_SLOT_FEET) && !(shoes.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [shoes.examine_title(user)] on [t_his] feet." + //SPLURT EDIT - socks + if(w_socks && !socks_hidden() && !(w_socks.item_flags & EXAMINE_SKIP)) + . += "[t_He] [t_is] wearing [w_socks.examine_title(user)] on [t_his] feet." + +/// Collects info displayed about any HUDs the user has when examining src +/mob/living/carbon/proc/get_hud_examine_info(mob/living/user) + return +/mob/living/carbon/human/get_hud_examine_info(mob/living/user) + . = list() + + var/perpname = get_face_name(get_id_name("")) + var/title = "" + if(perpname && (HAS_TRAIT(user, TRAIT_SECURITY_HUD) || HAS_TRAIT(user, TRAIT_MEDICAL_HUD)) && (user.stat == CONSCIOUS || isobserver(user)) && user != src) + var/datum/record/crew/target_record = find_record(perpname) + if(target_record) + . += "Rank: [target_record.rank]" + . += "\[Front photo\]\[Side photo\]" + if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD) && HAS_TRAIT(user, TRAIT_SECURITY_HUD)) + title = separator_hr("Medical & Security Analysis") + . += get_medhud_examine_info(user, target_record) + . += get_sechud_examine_info(user, target_record) + + else if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD)) + title = separator_hr("Medical Analysis") + . += get_medhud_examine_info(user, target_record) + + else if(HAS_TRAIT(user, TRAIT_SECURITY_HUD)) + title = separator_hr("Security Analysis") + . += get_sechud_examine_info(user, target_record) + + // applies the separator correctly without an extra line break + if(title && length(.)) + .[1] = title + .[1] return . + +/// Collects information displayed about src when examined by a user with a medical HUD. +/mob/living/carbon/proc/get_medhud_examine_info(mob/living/user, datum/record/crew/target_record) + . = list() + + var/list/cybers = list() + for(var/obj/item/organ/internal/cyberimp/cyberimp in organs) + if(IS_ROBOTIC_ORGAN(cyberimp) && !(cyberimp.organ_flags & ORGAN_HIDDEN)) + cybers += cyberimp.examine_title(user) + if(length(cybers)) + . += "Detected cybernetic modifications:" + . += "[english_list(cybers, and_text = ", and")]" + if(target_record) + . += "\[[target_record.physical_status]\]" + . += "\[[target_record.mental_status]\]" + else + . += "\[Record Missing\]" + . += "\[Record Missing\]" + . += "\[Medical evaluation\]" + . += "\[See quirks\]" + +/// Collects information displayed about src when examined by a user with a security HUD. +/mob/living/carbon/proc/get_sechud_examine_info(mob/living/user, datum/record/crew/target_record) + . = list() + + var/wanted_status = WANTED_NONE + var/security_note = "None." + + if(target_record) + wanted_status = target_record.wanted_status + if(target_record.security_note) + security_note = target_record.security_note + if(ishuman(user)) + . += "Criminal status: \[[wanted_status]\]" + else + . += "Criminal status: [wanted_status]" + . += "Important Notes: [security_note]" + . += "Security record: \[View\]" + if(ishuman(user)) + . += "\[Add citation\]\ + \[Add crime\]\ + \[Add note\]" + +/mob/living/carbon/human/examine_more(mob/user) + . = ..() + if((wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))) + return + if(HAS_TRAIT(src, TRAIT_UNKNOWN) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) + return + var/age_text + switch(age) + if(-INFINITY to 17) // SKYRAT EDIT ADD START -- AGE EXAMINE + age_text = "too young to be here" + if(18 to 25) + age_text = "a young adult" // SKYRAT EDIT END + if(36 to 55) + age_text = "middle-aged" + if(56 to 75) + age_text = "rather old" + if(76 to 100) + age_text = "very old" + if(101 to INFINITY) + age_text = "withering away" + . += list(span_notice("[p_They()] appear[p_s()] to be [age_text].")) + + if(istype(w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/undershirt = w_uniform + if(undershirt.has_sensor == BROKEN_SENSORS) + . += list(span_notice("The [undershirt]'s medical sensors are sparking.")) + +#undef ADD_NEWLINE_IF_NECESSARY diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index dc9c6bec5a931..dc84ecb259943 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -56,10 +56,6 @@ GLOBAL_LIST_EMPTY(features_by_species) var/skinned_type ///flags for inventory slots the race can't equip stuff to. Golems cannot wear jumpsuits, for example. var/no_equip_flags - /// Allows the species to equip items that normally require a jumpsuit without having one equipped. Used by golems. - var/nojumpsuit = FALSE - ///Affects the speech message, for example: Motharula flutters, "My speech message is flutters!" - var/say_mod = "says" /// What languages this species can understand and say. /// Use a [language holder datum][/datum/language_holder] typepath in this var. /// Should never be null. @@ -547,38 +543,6 @@ GLOBAL_LIST_EMPTY(features_by_species) SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src) -/** - * Proc called when mail goodies need to be updated for this species. - * - * Updates the mail goodies if that is required. e.g. for the blood deficiency quirk, which sends bloodbags to quirk holders, update the sent bloodpack to match the species' exotic blood. - * This is currently only used for the blood deficiency quirk but more can be added as needed. - * Arguments: - * * mob/living/carbon/human/recipient - the mob receiving the mail goodies - */ -/datum/species/proc/update_mail_goodies(mob/living/carbon/human/recipient) - update_quirk_mail_goodies(recipient, recipient.get_quirk(/datum/quirk/blooddeficiency)) - -/** - * Updates the mail goodies of a specific quirk. - * - * Updates the mail goodies belonging to a specific quirk. - * Add implementation as needed for each individual species. The base species proc should give the species the 'default' version of whatever mail goodies are required. - * Arguments: - * * mob/living/carbon/human/recipient - the mob receiving the mail goodies - * * datum/quirk/quirk - the quirk to update the mail goodies of. Use get_quirk(datum/quirk/some_quirk) to get the actual mob's quirk to pass. - * * list/mail_goodies - a list of mail goodies. Generally speaking you should not be using this argument on the initial function call. You should instead add to the species' implementation of this proc. - */ -/datum/species/proc/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies) - if(isnull(quirk)) - return - if(length(mail_goodies)) - quirk.mail_goodies = mail_goodies - return - if(istype(quirk, /datum/quirk/blooddeficiency)) - if(HAS_TRAIT(recipient, TRAIT_NOBLOOD) && isnull(recipient.dna.species.exotic_blood)) // TRAIT_NOBLOOD and no exotic blood (yes we have to check for both, jellypeople exist) - quirk.mail_goodies = list() // means no blood pack gets sent to them. - return - /** * Handles the body of a human * @@ -611,7 +575,7 @@ GLOBAL_LIST_EMPTY(features_by_species) var/mutable_appearance/underwear_overlay if(underwear) if(species_human.dna.species.sexes && species_human.physique == FEMALE && (underwear.gender == MALE)) - underwear_overlay = wear_female_version(underwear.icon_state, underwear.icon, BODY_LAYER, FEMALE_UNIFORM_FULL) + underwear_overlay = mutable_appearance(wear_female_version(underwear.icon_state, underwear.icon, FEMALE_UNIFORM_FULL), layer = -BODY_LAYER) else underwear_overlay = mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) if(!underwear.use_static) @@ -623,9 +587,9 @@ GLOBAL_LIST_EMPTY(features_by_species) if(undershirt) var/mutable_appearance/working_shirt if(species_human.dna.species.sexes && species_human.physique == FEMALE) - working_shirt = wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) + working_shirt = mutable_appearance(wear_female_version(undershirt.icon_state, undershirt.icon), layer = -BODY_LAYER) else - working_shirt = mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) + working_shirt = mutable_appearance(undershirt.icon, undershirt.icon_state, layer = -BODY_LAYER) standing += working_shirt if(species_human.socks && species_human.num_legs >= 2 && !(species_human.bodyshape & BODYSHAPE_DIGITIGRADE)) @@ -639,8 +603,7 @@ GLOBAL_LIST_EMPTY(features_by_species) species_human.apply_overlay(BODY_LAYER) handle_mutant_bodyparts(species_human) -*/ -//SKYRAT EDIT REMOVAL END + /** * Handles the mutant bodyparts of a human @@ -651,8 +614,6 @@ 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) -/* /datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/source, forced_colour) var/list/bodyparts_to_add = mutant_bodyparts.Copy() var/list/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER) @@ -825,7 +786,7 @@ GLOBAL_LIST_EMPTY(features_by_species) // Anything that's small or smaller can fit into a pocket by default if((slot & (ITEM_SLOT_RPOCKET|ITEM_SLOT_LPOCKET)) && I.w_class <= POCKET_WEIGHT_CLASS) excused = TRUE - else if(slot & (ITEM_SLOT_SUITSTORE|ITEM_SLOT_BACKPACK|ITEM_SLOT_HANDS)) + else if(slot & (ITEM_SLOT_SUITSTORE|ITEM_SLOT_BACKPACK|ITEM_SLOT_BELTPACK|ITEM_SLOT_HANDS)) excused = TRUE if(!excused) return FALSE @@ -854,7 +815,7 @@ GLOBAL_LIST_EMPTY(features_by_species) return FALSE /* SKYRAT EDIT REMOVAL if((H.bodyshape & BODYSHAPE_DIGITIGRADE) && !(I.item_flags & IGNORE_DIGITIGRADE)) - if(!(I.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) + if(!(I.supports_variations_flags & DIGITIGRADE_VARIATIONS)) if(!disable_warning) to_chat(H, span_warning("The footwear around here isn't compatible with your feet!")) return FALSE @@ -868,6 +829,10 @@ GLOBAL_LIST_EMPTY(features_by_species) to_chat(H, span_warning("You need a jumpsuit before you can attach this [I.name]!")) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) + if(ITEM_SLOT_BELTPACK) + if(H.belt && H.belt.atom_storage?.can_insert(I, H, messages = TRUE, force = indirect_action ? STORAGE_SOFT_LOCKED : STORAGE_NOT_LOCKED)) + return TRUE + return FALSE if(ITEM_SLOT_EYES) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE @@ -958,7 +923,6 @@ GLOBAL_LIST_EMPTY(features_by_species) if(H.back && H.back.atom_storage?.can_insert(I, H, messages = TRUE, force = indirect_action ? STORAGE_SOFT_LOCKED : STORAGE_NOT_LOCKED)) return TRUE return FALSE - return FALSE //Unsupported slot /datum/species/proc/equip_delay_self_check(obj/item/I, mob/living/carbon/human/H, bypass_equip_delay_self) @@ -1340,7 +1304,7 @@ GLOBAL_LIST_EMPTY(features_by_species) humi.adjust_coretemperature(skin_core_change) // get the enviroment details of where the mob is standing - var/datum/gas_mixture/environment = humi.loc.return_air() + var/datum/gas_mixture/environment = humi.loc?.return_air() if(!environment) // if there is no environment (nullspace) drop out here. return @@ -1478,10 +1442,10 @@ GLOBAL_LIST_EMPTY(features_by_species) // 40% for level 3 damage on humans to scream in pain if (humi.stat < UNCONSCIOUS && (prob(burn_damage) * 10) / 4) - humi.emote("scream") + INVOKE_ASYNC(humi, TYPE_PROC_REF(/mob, emote), "scream") // Apply the damage to all body parts - humi.apply_damage(burn_damage, BURN, spread_damage = TRUE) + humi.apply_damage(burn_damage, BURN, spread_damage = TRUE, wound_clothing = FALSE) // For cold damage, we cap at the threshold if you're dead if(humi.getFireLoss() >= abs(HEALTH_THRESHOLD_DEAD) && humi.stat == DEAD) @@ -1497,11 +1461,11 @@ GLOBAL_LIST_EMPTY(features_by_species) var/damage_mod = coldmod * humi.physiology.cold_mod * (is_hulk ? HULK_COLD_DAMAGE_MOD : 1) // Can't be a switch due to http://www.byond.com/forum/post/2750423 if(humi.coretemperature in 201 to cold_damage_limit) - humi.apply_damage(COLD_DAMAGE_LEVEL_1 * damage_mod * seconds_per_tick, damage_type) + humi.apply_damage(COLD_DAMAGE_LEVEL_1 * damage_mod * seconds_per_tick, damage_type, wound_clothing = FALSE) else if(humi.coretemperature in 120 to 200) - humi.apply_damage(COLD_DAMAGE_LEVEL_2 * damage_mod * seconds_per_tick, damage_type) + humi.apply_damage(COLD_DAMAGE_LEVEL_2 * damage_mod * seconds_per_tick, damage_type, wound_clothing = FALSE) else - humi.apply_damage(COLD_DAMAGE_LEVEL_3 * damage_mod * seconds_per_tick, damage_type) + humi.apply_damage(COLD_DAMAGE_LEVEL_3 * damage_mod * seconds_per_tick, damage_type, wound_clothing = FALSE) /** * Used to apply burn wounds on random limbs @@ -1550,7 +1514,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(humi.bodytemperature > BODYTEMP_HEAT_WOUND_LIMIT + 2800) burn_damage = HEAT_DAMAGE_LEVEL_3 - humi.apply_damage(burn_damage * seconds_per_tick, BURN, bodypart) + humi.apply_damage(burn_damage * seconds_per_tick, BURN, bodypart, wound_clothing = FALSE) /// Handle the air pressure of the environment /datum/species/proc/handle_environment_pressure(mob/living/carbon/human/H, datum/gas_mixture/environment, seconds_per_tick, times_fired) @@ -1646,11 +1610,15 @@ GLOBAL_LIST_EMPTY(features_by_species) for (var/preference_type in GLOB.preference_entries) var/datum/preference/preference = GLOB.preference_entries[preference_type] - if ( \ +// BUBBER EDIT OR BEGIN (preference.relevant_mutant_bodypart in mutant_bodyparts) \ || (preference.relevant_inherent_trait in inherent_traits) \ || (preference.relevant_external_organ in external_organs) \ +// NEW + (preference.relevant_inherent_trait in inherent_traits) \ + || (preference.relevant_external_organ in get_mut_organs()) \ +// BUBBER EDIT OR END || (preference.relevant_head_flag && check_head_flags(preference.relevant_head_flag)) \ || (preference.relevant_body_markings in body_markings) \ ) @@ -1699,24 +1667,35 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/get_sneeze_sound(mob/living/carbon/human/human) return +// BUBBER EDIT - OR BEGIN /datum/species/proc/get_types_to_preload() var/list/to_store = list() to_store += mutant_organs for(var/obj/item/organ/external/horny as anything in external_organs) to_store += horny //Haha get it? - - //Don't preload brains, cause reuse becomes a horrible headache - to_store += mutantheart - to_store += mutantlungs - to_store += mutanteyes - to_store += mutantears - to_store += mutanttongue - to_store += mutantliver - to_store += mutantstomach - to_store += mutantappendix - //We don't cache mutant hands because it's not constrained enough, too high a potential for failure return to_store +/* +/datum/species/proc/get_mut_organs(include_brain = TRUE) + var/list/mut_organs = list() + mut_organs += mutant_organs + if (include_brain) + mut_organs += mutantbrain + mut_organs += mutantheart + mut_organs += mutantlungs + mut_organs += mutanteyes + mut_organs += mutantears + mut_organs += mutanttongue + mut_organs += mutantliver + mut_organs += mutantstomach + mut_organs += mutantappendix + list_clear_nulls(mut_organs) + return mut_organs + + +/datum/species/proc/get_types_to_preload() + return get_mut_organs(FALSE) +*/ // BUBBER EDIT - OR END /** * Owner login @@ -1749,7 +1728,7 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/get_species_description() SHOULD_CALL_PARENT(FALSE) - //stack_trace("Species [name] ([type]) did not have a description set, and is a selectable roundstart race! Override get_species_description.") + //stack_trace("Species [name] ([type]) did not have a description set, and is a selectable roundstart race! Override get_species_description.") // SKYRAT EDIT REMOVAL return "No species description set, file a bug report!" /** @@ -1763,7 +1742,7 @@ GLOBAL_LIST_EMPTY(features_by_species) SHOULD_CALL_PARENT(FALSE) RETURN_TYPE(/list) - //stack_trace("Species [name] ([type]) did not have lore set, and is a selectable roundstart race! Override get_species_lore.") + //stack_trace("Species [name] ([type]) did not have lore set, and is a selectable roundstart race! Override get_species_lore.") // SKYRAT EDIT REMOVAL return list("No species lore set, file a bug report!") /** diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index b3951731a8fd0..32048b5bd0025 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -1,13 +1,16 @@ /mob/living/carbon/human/dummy real_name = "Test Dummy" - status_flags = GODMODE|CANPUSH mouse_drag_pointer = MOUSE_INACTIVE_POINTER visual_only_organs = TRUE var/in_use = FALSE INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) +/mob/living/carbon/human/dummy/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_GODMODE, INNATE_TRAIT) + /mob/living/carbon/human/dummy/Destroy() in_use = FALSE return ..() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 501f3c782f29b..325abea10d66d 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -63,7 +63,7 @@ message = "screams!" message_mime = "acts out a scream!" emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE - only_forced_audio = TRUE + audio_cooldown = 5 SECONDS vary = TRUE /datum/emote/living/carbon/human/scream/can_run_emote(mob/user, status_check = TRUE , intentional, params) @@ -105,7 +105,7 @@ message = "salutes." message_param = "salutes to %t." hands_use_check = TRUE - sound = 'sound/misc/salute.ogg' + sound = 'sound/mobs/humanoids/human/salute/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 68d4c211f6b31..04a056e0011de 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -1,586 +1,9 @@ -/mob/living/carbon/human/examine(mob/user) -//this is very slightly better than it was because you can use it more places. still can't do \his[src] though. - var/t_He = p_They() - var/t_His = p_Their() - var/t_his = p_their() - var/t_him = p_them() - var/t_has = p_have() - var/t_is = p_are() - var/obscure_name - var/obscure_examine - - // SKYRAT EDIT START - var/obscured = check_obscured_slots() - var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - // SKYRAT EDIT END - - if(isliving(user)) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_PROSOPAGNOSIA) || HAS_TRAIT(L, TRAIT_INVISIBLE_MAN)) - obscure_name = TRUE - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) - obscure_name = TRUE - obscure_examine = TRUE - - //SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION - var/species_visible - var/species_name_string - if(skipface || get_visible_name() == "Unknown") - species_visible = FALSE - else - species_visible = TRUE - - if(obscure_examine) - return list("You're struggling to make out any details...") - - if(!species_visible) - species_name_string = "!" - else if (!dna.species.lore_protected && dna.features?["custom_species"]) - species_name_string = ", [prefix_a_or_an(dna.features["custom_species"])] [dna.features["custom_species"]]!" - 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 - 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 - - /* SKYRAT EDIT REMOVAL - var/apparent_species - if(dna?.species && !skipface) - apparent_species = ", \an [dna.species.name]" - . = list("*---------*\nThis is [!obscure_name ? name : "Unknown"][apparent_species]!") - - . = list("*---------*\nThis is [!obscure_name ? name : "Unknown"]!") - - if(obscure_examine) - return list("You're struggling to make out any details...") - - var/obscured = check_obscured_slots() - var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - */ //SKYRAT EDIT END - - //uniform - if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && !(w_uniform.item_flags & EXAMINE_SKIP)) - //accessory - var/accessory_message = "" - if(istype(w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/undershirt = w_uniform - var/list/accessories = undershirt.list_accessories_with_icon(user) - if(length(accessories)) - accessory_message = " with [english_list(accessories)] attached" - - . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_message]." - //SPLURT EDIT - shirt - if(w_shirt && !undershirt_hidden() && !(w_shirt.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [w_shirt.get_examine_string(user)]." - //SPLURT EDIT - bra - if(w_bra && !bra_hidden() && !(w_bra.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [w_bra.get_examine_string(user)]." - //SPLURT EDIT - underwear - if(w_underwear && !underwear_hidden() && !(w_underwear.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [w_underwear.get_examine_string(user)]." - //head - if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." - //suit/armor - if(wear_suit && !(wear_suit.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]." - //suit/armor storage - if(s_store && !(obscured & ITEM_SLOT_SUITSTORE) && !(s_store.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name]." - //back - if(back && !(back.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back." - - //Hands - for(var/obj/item/held_thing in held_items) - if(held_thing.item_flags & (ABSTRACT|EXAMINE_SKIP|HAND_ITEM)) - continue - . += "[t_He] [t_is] holding [held_thing.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(held_thing))]." - - //gloves - if(gloves && !(obscured & ITEM_SLOT_GLOVES) && !(gloves.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands." - else if(GET_ATOM_BLOOD_DNA_LENGTH(src)) - if(num_hands) - . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a "]blood-stained hand[num_hands > 1 ? "s" : ""]!") - - //SPLURT EDIT - wrists - if(wrists && !wrists_hidden() && !(wrists.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [wrists.get_examine_string(user)]." - - //handcuffed? - if(handcuffed) - if(istype(handcuffed, /obj/item/restraints/handcuffs/cable)) - . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!") - else - . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!") - - //belt - if(belt && !(belt.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist." - - //shoes - if(shoes && !(obscured & ITEM_SLOT_FEET) && !(shoes.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet." - - //SPLURT EDIT - socks - if(w_socks && !socks_hidden() && !(w_socks.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [w_socks.get_examine_string(user)] on [t_his] feet." - - //mask - if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !(wear_mask.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face." - - if(wear_neck && !(obscured & ITEM_SLOT_NECK) && !(wear_neck.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck." - - //eyes - if(!(obscured & ITEM_SLOT_EYES) ) - if(glasses && !(glasses.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." - else if(HAS_TRAIT(src, TRAIT_UNNATURAL_RED_GLOWY_EYES)) - . += "[t_His] eyes are glowing with an unnatural red aura!" - else if(HAS_TRAIT(src, TRAIT_BLOODSHOT_EYES)) - . += "[t_His] eyes are bloodshot!" - - //ears - if(ears && !(obscured & ITEM_SLOT_EARS_LEFT) && !(ears.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] left ear." // extra inventory - - //SPLURT EDIT - ears extra - if(ears_extra && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [ears_extra.get_examine_string(user)] on [t_his] right ear." - - //SPLURT EDIT - ears extra - //wearing two ear items makes you look like an idiot - if((istype(ears, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_LEFT) && !(ears.item_flags & EXAMINE_SKIP)) && (istype(ears_extra, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP))) - . += span_warning("[t_He] looks quite tacky wearing both \an [ears.name] and \an [ears_extra.name] on [t_his] head.") - - // - - //ID - if(wear_id && !(wear_id.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)]." - - . += wear_id.get_id_examine_strings(user) - - . += EXAMINE_SECTION_BREAK // SKYRAT EDIT ADDITION - hr sections - - //Status effects - var/list/status_examines = get_status_effect_examinations() - if (length(status_examines)) - . += status_examines - - var/appears_dead = FALSE - var/just_sleeping = FALSE - - if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) - appears_dead = TRUE - - var/obj/item/clothing/glasses/G = get_item_by_slot(ITEM_SLOT_EYES) - var/are_we_in_weekend_at_bernies = G?.tint && buckled && istype(buckled, /obj/vehicle/ridden/wheelchair) - - if(isliving(user) && (HAS_MIND_TRAIT(user, TRAIT_NAIVE) || are_we_in_weekend_at_bernies)) - just_sleeping = TRUE - - if(!just_sleeping) - if(HAS_TRAIT(src, TRAIT_SUICIDED)) - . += span_warning("[t_He] appear[p_s()] to have committed suicide... there is no hope of recovery.") - - . += generate_death_examine_text() - - if(get_bodypart(BODY_ZONE_HEAD) && !get_organ_by_type(/obj/item/organ/internal/brain)) - . += span_deadsay("It appears that [t_his] brain is missing...") - - var/list/msg = list() - - var/list/missing = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - var/list/disabled = list() - for(var/X in bodyparts) - var/obj/item/bodypart/body_part = X - if(body_part.bodypart_disabled) - disabled += body_part - missing -= body_part.body_zone - for(var/obj/item/I in body_part.embedded_objects) - if(I.is_embed_harmless()) - msg += "[t_He] [t_has] [icon2html(I, user)] \a [I] stuck to [t_his] [body_part.name]!\n" - else - msg += "[t_He] [t_has] [icon2html(I, user)] \a [I] embedded in [t_his] [body_part.name]!\n" - - for(var/i in body_part.wounds) - var/datum/wound/iter_wound = i - msg += "[iter_wound.get_examine_description(user)]\n" - - for(var/X in disabled) - var/obj/item/bodypart/body_part = X - var/damage_text - if(HAS_TRAIT(body_part, TRAIT_DISABLED_BY_WOUND)) - continue // skip if it's disabled by a wound (cuz we'll be able to see the bone sticking out!) - if(!(body_part.get_damage() >= body_part.max_damage)) //we don't care if it's stamcritted - damage_text = "limp and lifeless" - else - damage_text = (body_part.brute_dam >= body_part.burn_dam) ? body_part.heavy_brute_msg : body_part.heavy_burn_msg - msg += "[capitalize(t_his)] [body_part.name] is [damage_text]!\n" - - //stores missing limbs - var/l_limbs_missing = 0 - var/r_limbs_missing = 0 - for(var/t in missing) - if(t == BODY_ZONE_HEAD) - msg += "[t_His] [parse_zone(t)] is missing!\n" - continue - if(t == BODY_ZONE_L_ARM || t == BODY_ZONE_L_LEG) - l_limbs_missing++ - else if(t == BODY_ZONE_R_ARM || t == BODY_ZONE_R_LEG) - r_limbs_missing++ - - msg += "[capitalize(t_his)] [parse_zone(t)] is missing!\n" - - if(l_limbs_missing >= 2 && r_limbs_missing == 0) - msg += "[t_He] look[p_s()] all right now.\n" - else if(l_limbs_missing == 0 && r_limbs_missing >= 2) - msg += "[t_He] really keep[p_s()] to the left.\n" - else if(l_limbs_missing >= 2 && r_limbs_missing >= 2) - msg += "[t_He] [p_do()]n't seem all there.\n" - - if(!(user == src && has_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy))) //fake healthy - var/temp - if(user == src && has_status_effect(/datum/status_effect/grouped/screwy_hud/fake_crit))//fake damage - temp = 50 - else - temp = getBruteLoss() - var/list/damage_desc = get_majority_bodypart_damage_desc() - if(temp) - if(temp < 25) - msg += "[t_He] [t_has] minor [damage_desc[BRUTE]].\n" - else if(temp < 50) - msg += "[t_He] [t_has] moderate [damage_desc[BRUTE]]!\n" - else - msg += "[t_He] [t_has] severe [damage_desc[BRUTE]]!\n" - - temp = getFireLoss() - if(temp) - if(temp < 25) - msg += "[t_He] [t_has] minor [damage_desc[BURN]].\n" - else if (temp < 50) - msg += "[t_He] [t_has] moderate [damage_desc[BURN]]!\n" - else - msg += "[t_He] [t_has] severe [damage_desc[BURN]]!\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)) - msg += "[t_He] look[p_s()] a little soaked.\n" - - - if(pulledby?.grab_state) - msg += "[t_He] [t_is] restrained by [pulledby]'s grip.\n" - - if(nutrition < NUTRITION_LEVEL_STARVING - 50) - msg += "[t_He] [t_is] severely malnourished.\n" - else if(nutrition >= NUTRITION_LEVEL_FAT) - if(user.nutrition < NUTRITION_LEVEL_STARVING - 50) - msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n" - else - msg += "[t_He] [t_is] quite chubby.\n" - switch(disgust) - if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) - msg += "[t_He] look[p_s()] a bit grossed out.\n" - if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) - msg += "[t_He] look[p_s()] really grossed out.\n" - if(DISGUST_LEVEL_DISGUSTED to INFINITY) - msg += "[t_He] look[p_s()] extremely disgusted.\n" - - var/apparent_blood_volume = blood_volume - if(HAS_TRAIT(src, TRAIT_USES_SKINTONES) && (skin_tone == "albino")) - apparent_blood_volume -= 150 // enough to knock you down one tier - switch(apparent_blood_volume) - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - msg += "[t_He] [t_has] pale skin.\n" - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - msg += "[t_He] look[p_s()] like pale death.\n" - if(-INFINITY to BLOOD_VOLUME_BAD) - msg += "[span_deadsay("[t_He] resemble[p_s()] a crushed, empty juice pouch.")]\n" - - if(is_bleeding()) - var/list/obj/item/bodypart/bleeding_limbs = list() - var/list/obj/item/bodypart/grasped_limbs = list() - - for(var/obj/item/bodypart/body_part as anything in bodyparts) - if(body_part.get_modified_bleed_rate()) - bleeding_limbs += body_part - if(body_part.grasped_by) - grasped_limbs += body_part - - var/num_bleeds = LAZYLEN(bleeding_limbs) - - var/list/bleed_text - if(appears_dead) - bleed_text = list("Blood is visible in [t_his] open") - else - bleed_text = list("[t_He] [t_is] bleeding from [t_his]") - - switch(num_bleeds) - if(1 to 2) - bleed_text += " [bleeding_limbs[1].name][num_bleeds == 2 ? " and [bleeding_limbs[2].name]" : ""]" - if(3 to INFINITY) - for(var/i in 1 to (num_bleeds - 1)) - var/obj/item/bodypart/body_part = bleeding_limbs[i] - bleed_text += " [body_part.name]," - bleed_text += " and [bleeding_limbs[num_bleeds].name]" - - if(appears_dead) - bleed_text += ", but it has pooled and is not flowing.\n" - else - if(reagents.has_reagent(/datum/reagent/toxin/heparin, needs_metabolizing = TRUE)) - bleed_text += " incredibly quickly" - - bleed_text += "!\n" - - for(var/i in grasped_limbs) - var/obj/item/bodypart/grasped_part = i - bleed_text += "[t_He] [t_is] holding [t_his] [grasped_part.name] to slow the bleeding!\n" - - msg += bleed_text.Join() - - if(reagents.has_reagent(/datum/reagent/teslium, needs_metabolizing = TRUE)) - msg += "[t_He] [t_is] emitting a gentle blue glow!\n" - - if(just_sleeping) - msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.\n" - - if(!appears_dead) - var/mob/living/living_user = user - if(src != user) - if(HAS_TRAIT(user, TRAIT_EMPATH)) - if (combat_mode) - msg += "[t_He] seem[p_s()] to be on guard.\n" - if (getOxyLoss() >= 10) - msg += "[t_He] seem[p_s()] winded.\n" - if (getToxLoss() >= 10) - msg += "[t_He] seem[p_s()] sickly.\n" - if(mob_mood.sanity <= SANITY_DISTURBED) - msg += "[t_He] seem[p_s()] distressed.\n" - living_user.add_mood_event("empath", /datum/mood_event/sad_empath, src) - if(is_blind()) - msg += "[t_He] appear[p_s()] to be staring off into space.\n" - if (HAS_TRAIT(src, TRAIT_DEAF)) - msg += "[t_He] appear[p_s()] to not be responding to noises.\n" - if (bodytemperature > dna.species.bodytemp_heat_damage_limit) - msg += "[t_He] [t_is] flushed and wheezing.\n" - if (bodytemperature < dna.species.bodytemp_cold_damage_limit) - msg += "[t_He] [t_is] shivering.\n" - - msg += "" - - if(HAS_TRAIT(user, TRAIT_SPIRITUAL) && mind?.holy_role) - msg += "[t_He] [t_has] a holy aura about [t_him].\n" - living_user.add_mood_event("religious_comfort", /datum/mood_event/religiously_comforted) - - switch(stat) - if(UNCONSCIOUS, HARD_CRIT) - msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.\n" - if(SOFT_CRIT) - msg += "[t_He] [t_is] barely conscious.\n" - if(CONSCIOUS) - if(HAS_TRAIT(src, TRAIT_DUMB)) - msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - if(get_organ_by_type(/obj/item/organ/internal/brain) && isnull(ai_controller)) - 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 += "[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" // SKYRAT 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) - var/datum/scar/S = i - if(S.is_visible(user)) - scar_severity += S.severity - - switch(scar_severity) - if(1 to 4) - msg += "[span_tinynoticeital("[t_He] [t_has] visible scarring, you can look again to take a closer look...")]\n" - if(5 to 8) - msg += "[span_smallnoticeital("[t_He] [t_has] several bad scars, you can look again to take a closer look...")]\n" - if(9 to 11) - msg += "[span_notice("[t_He] [t_has] significantly disfiguring scarring, you can look again to take a closer look...")]\n" - if(12 to INFINITY) - msg += "[span_notice("[t_He] [t_is] just absolutely fucked up, you can look again to take a closer look...")]\n" - msg += "" // closes info class - - if (length(msg)) - . += span_warning("[msg.Join("")]") - - var/trait_exam = common_trait_examine() - if (!isnull(trait_exam)) - . += trait_exam - - if(isliving(user)) - var/mob/living/privacy_invader = user - if(HAS_MIND_TRAIT(privacy_invader, TRAIT_MORBID)) - if(HAS_TRAIT(src, TRAIT_DISSECTED)) - msg += "[span_notice("[t_He] appears to have been dissected. Useless for examination... for now.")]\n" - if(HAS_TRAIT(src, TRAIT_SURGICALLY_ANALYZED)) - msg += "[span_notice("A skilled hand has mapped this one's internal intricacies. It will be far easier to perform future experimentations upon [t_him]. Exquisite.")]\n" - if(HAS_MIND_TRAIT(privacy_invader, TRAIT_EXAMINE_FITNESS)) - . += compare_fitness(user) - - var/perpname = get_face_name(get_id_name("")) - if(perpname && (HAS_TRAIT(user, TRAIT_SECURITY_HUD) || HAS_TRAIT(user, TRAIT_MEDICAL_HUD))) - var/datum/record/crew/target_record = find_record(perpname) - if(target_record) - . += "Rank: [target_record.rank]\n\[Front photo\]\[Side photo\]" - if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD)) - var/cyberimp_detect - for(var/obj/item/organ/internal/cyberimp/cyberimp in organs) - if(IS_ROBOTIC_ORGAN(cyberimp) && !(cyberimp.organ_flags & ORGAN_HIDDEN)) - cyberimp_detect += "[!cyberimp_detect ? "[cyberimp.get_examine_string(user)]" : ", [cyberimp.get_examine_string(user)]"]" - if(cyberimp_detect) - . += "Detected cybernetic modifications:" - . += "[cyberimp_detect]" - if(target_record) - var/health_record = target_record.physical_status - . += "\[[health_record]\]" - health_record = target_record.mental_status - . += "\[[health_record]\]" - target_record = find_record(perpname) - if(target_record) - . += "\[Medical evaluation\]
        " - . += "\[See quirks\]" - //SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS - if(target_record && length(target_record.past_medical_records) > RECORDS_INVISIBLE_THRESHOLD) - . += "\[View medical records\]" - //SKYRAT EDIT END - - if(HAS_TRAIT(user, TRAIT_SECURITY_HUD)) - 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." - - target_record = find_record(perpname) - if(target_record) - wanted_status = target_record.wanted_status - if(target_record.security_note) - security_note = target_record.security_note - if(ishuman(user)) - . += "Criminal status: \[[wanted_status]\]" - else - . += "Criminal status: [wanted_status]" - . += "Important Notes: [security_note]" - . += "Security record: \[View\]" - if(ishuman(user)) - . += jointext(list("\[Add citation\]", - "\[Add crime\]", - "\[Add note\]"), "") - // SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS - if(target_record && length(target_record.past_security_records) > RECORDS_INVISIBLE_THRESHOLD) - . += "\[View past security records\]" - - if (target_record && length(target_record.past_general_records) > RECORDS_INVISIBLE_THRESHOLD) - . += "\[View general records\]" - if(isobserver(user)) - . += span_info("\nQuirks: [get_quirk_string(FALSE, CAT_QUIRK_ALL)]") - - 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) - var/background_text = target_records.background_information - var/exploitable_text = target_records.exploitable_information - if((length(background_text) > RECORDS_INVISIBLE_THRESHOLD)) - . += "\[View background info\]" - if((length(exploitable_text) > RECORDS_INVISIBLE_THRESHOLD) && ((exploitable_text) != EXPLOITABLE_DEFAULT_TEXT)) - . += "\[View exploitable info\]" - - . += EXAMINE_SECTION_BREAK - //SKYRAT EDIT END - //SKYRAT 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 - - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION - for(var/genital in GLOB.possible_genitals) - if(dna.species.mutant_bodyparts[genital]) - var/datum/sprite_accessory/genital/G = SSaccessories.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...\]" - break - - var/flavor_text_link - /// The first 1-FLAVOR_PREVIEW_LIMIT characters in the mob's "flavor_text" DNA feature. FLAVOR_PREVIEW_LIMIT is defined in flavor_defines.dm. - var/preview_text = copytext_char((dna.features["flavor_text"]), 1, FLAVOR_PREVIEW_LIMIT) - // What examine_tgui.dm uses to determine if flavor text appears as "Obscured". - var/obscurity_examine_pref = (client?.prefs?.read_preference(/datum/preference/toggle/obscurity_examine)) //BUBBERSTATION EDIT - var/face_obscured = (wear_mask && (wear_mask.flags_inv & HIDEFACE) && obscurity_examine_pref) || (head && (head.flags_inv & HIDEFACE) && obscurity_examine_pref) // BUBBERSTATION EDIT - - if (!(face_obscured)) - flavor_text_link = span_notice("[preview_text]... \[Look closer?\]") - else - flavor_text_link = span_notice("\[Examine closely...\]") - if (flavor_text_link) - . += flavor_text_link - - //Temporary flavor text addition: - if(temporary_flavor_text) - if(length_char(temporary_flavor_text) < TEMPORARY_FLAVOR_PREVIEW_LIMIT) - . += span_revennotice("
        They look different than usual: [temporary_flavor_text]") - else - . += span_revennotice("
        They look different than usual: [copytext_char(temporary_flavor_text, 1, TEMPORARY_FLAVOR_PREVIEW_LIMIT)]... More...") - - if(client) - var/erp_status_pref = client.prefs.read_preference(/datum/preference/choiced/erp_status) - if(erp_status_pref && !CONFIG_GET(flag/disable_erp_preferences)) - . += EXAMINE_SECTION_BREAK - . += span_info("ERP Status: [span_revenboldnotice(erp_status_pref)]") - - SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE, user, .) - -/** - * Shows any and all examine text related to any status effects the user has. - */ -/mob/living/proc/get_status_effect_examinations() - var/list/examine_list = list() - - for(var/datum/status_effect/effect as anything in status_effects) - var/effect_text = effect.get_examine_text() - if(!effect_text) - continue - - examine_list += effect_text - - if(!length(examine_list)) - return - - return examine_list.Join("\n") - -/mob/living/carbon/human/examine_more(mob/user) +/// Collects information displayed about src when examined by a user with a medical HUD. +/mob/living/carbon/human/get_medhud_examine_info(mob/living/user, datum/record/crew/target_record) . = ..() - if ((wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))) - return - var/age_text - switch(age) - if(-INFINITY to 17) // SKYRAT EDIT ADD START -- AGE EXAMINE - age_text = "too young to be here" - if(18 to 25) - age_text = "a young adult" // SKYRAT EDIT END - if(26 to 35) - age_text = "of adult age" - if(36 to 55) - age_text = "middle-aged" - if(56 to 75) - age_text = "rather old" - if(76 to 100) - age_text = "very old" - if(101 to INFINITY) - age_text = "withering away" - . += list(span_notice("[p_They()] appear[p_s()] to be [age_text].")) + + if(istype(w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/undershirt = w_uniform + var/sensor_text = undershirt.get_sensor_text() + if(sensor_text) + . += "Sensor Status: [sensor_text]" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 717762a408d12..b0d240199fb2e 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, 1, -6) AddComponent(/datum/component/bloodysoles/feet, FOOTPRINT_SPRITE_SHOES) AddElement(/datum/element/ridable, /datum/component/riding/creature/human) AddElement(/datum/element/strippable, GLOB.strippable_human_items, TYPE_PROC_REF(/mob/living/carbon/human/, should_strip)) @@ -34,7 +34,6 @@ ) AddElement(/datum/element/connect_loc, loc_connections) GLOB.human_list += src - SSopposing_force.give_opfor_button(src) //SKYRAT EDIT - OPFOR SYSTEM /mob/living/carbon/human/proc/setup_physiology() physiology = new() @@ -89,6 +88,59 @@ /mob/living/carbon/human/Topic(href, href_list) + if(href_list["see_id"]) + var/mob/viewer = usr + var/can_see_still = (viewer in viewers(src)) + + var/obj/item/card/id/id = wear_id?.GetID() + var/same_id = id && (href_list["id_ref"] == REF(id) || href_list["id_name"] == id.registered_name) + if(!same_id && can_see_still) + to_chat(viewer, span_notice("[p_They()] [p_are()] no longer wearing that ID card.")) + return + + var/viable_time = can_see_still ? 3 MINUTES : 1 MINUTES // assuming 3min is the length of a hop line visit - give some leeway if they're still in sight + if(!same_id || (text2num(href_list["examine_time"]) + viable_time) < world.time) + to_chat(viewer, span_notice("You don't have that good of a memory. Examine [p_them()] again.")) + return + if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + to_chat(viewer, span_notice("You can't make out that ID anymore.")) + return + if(get_dist(viewer, src) > ID_EXAMINE_DISTANCE + 1) // leeway + to_chat(viewer, span_notice("You can't make out that ID from here.")) + return + + var/id_name = id.registered_name + var/id_age = id.registered_age + var/id_job = id.assignment + // Should probably be recorded on the ID, but this is easier (albiet more restrictive) on chameleon ID users + var/datum/record/crew/record = find_record(id_name) + var/id_blood_type = record?.blood_type + var/id_gender = record?.gender + var/id_species = record?.species + var/id_icon = jointext(id.get_id_examine_strings(viewer), "") + // Fill in some blanks for chameleon IDs to maintain the illusion of a real ID + if(istype(id, /obj/item/card/id/advanced/chameleon)) + id_gender ||= gender + id_species ||= dna.species.name + id_blood_type ||= dna.blood_type + + var/id_examine = span_slightly_larger(separator_hr("This is [src]'s ID card.")) + id_examine += "
        " + id_examine += "[id_icon]" + id_examine += "
        " + id_examine += jointext(list( + "• Name: [id_name || "Unknown"]", + "• Job: [id_job || "Unassigned"]", + "• Age: [id_age || "Unknown"]", + "• Gender: [id_gender || "Unknown"]", + "• Blood Type: [id_blood_type || "?"]", + "• Species: [id_species || "Unknown"]", + ), "
        ") + id_examine += "
        " // container + id_examine += "
        " // text + + to_chat(viewer, examine_block(span_info(id_examine))) + ///////HUDs/////// if(href_list["hud"]) if(!ishuman(usr) && !isobserver(usr)) @@ -98,7 +150,7 @@ 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_or_ghost_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"]) @@ -276,7 +328,7 @@ var/mob/living/carbon/human/human_user = human_or_ghost_user 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/citation_name = tgui_input_text(human_user, "Citation crime", "Security HUD", max_length = MAX_MESSAGE_LEN) 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 @@ -306,7 +358,7 @@ //SKYRAT EDIT END if(href_list["add_crime"]) - var/crime_name = tgui_input_text(human_user, "Crime name", "Security HUD") + var/crime_name = tgui_input_text(human_user, "Crime name", "Security HUD", max_length = MAX_MESSAGE_LEN) if(!target_record || !crime_name || !allowed_access || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) return @@ -319,7 +371,7 @@ return if(href_list["add_note"]) - var/new_note = tgui_input_text(human_user, "Security note", "Security Records", multiline = TRUE) + var/new_note = tgui_input_text(human_user, "Security note", "Security Records", max_length = MAX_MESSAGE_LEN, multiline = TRUE) if(!target_record || !new_note || !allowed_access || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) return @@ -447,7 +499,7 @@ /* SKYRAT EDIT - REMOVAL //Check for nonhuman scum - if(dna && dna.species.id && dna.species.id != "human") + if(dna && dna.species.id && dna.species.id != SPECIES_HUMAN) threatcount += 1 */ @@ -973,7 +1025,7 @@ return ishuman(target) && target.body_position == LYING_DOWN /mob/living/carbon/human/proc/fireman_carry(mob/living/carbon/target) - if(!can_be_firemanned(target) || incapacitated(IGNORE_GRAB)) + if(!can_be_firemanned(target) || INCAPACITATED_IGNORING(src, INCAPABLE_GRAB)) to_chat(src, span_warning("You can't fireman carry [target] while [target.p_they()] [target.p_are()] standing!")) return @@ -1008,7 +1060,7 @@ return //Second check to make sure they're still valid to be carried - if(!can_be_firemanned(target) || incapacitated(IGNORE_GRAB) || target.buckled) + if(!can_be_firemanned(target) || INCAPACITATED_IGNORING(src, INCAPABLE_GRAB) || target.buckled) visible_message(span_warning("[src] fails to fireman carry [target]!")) return @@ -1024,7 +1076,8 @@ visible_message(span_warning("[target] fails to climb onto [src]!")) return - if(target.incapacitated(IGNORE_GRAB) || incapacitated(IGNORE_GRAB)) + + if(INCAPACITATED_IGNORING(target, INCAPABLE_GRAB) || INCAPACITATED_IGNORING(src, INCAPABLE_GRAB)) target.visible_message(span_warning("[target] can't hang onto [src]!")) return //SKYRAT EDIT START @@ -1108,10 +1161,22 @@ 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 + . = ..() if(use_random_name) fully_replace_character_name(real_name, generate_random_mob_name()) +///Proc used to prevent syndicate monkeys and player-selectable Pun Pun able to use objects while stuck in monkey mode. +/mob/living/carbon/human/proc/make_clever_and_no_dna_scramble() + dna.add_mutation(/datum/mutation/human/clever) + // Can't make them human or nonclever. At least not with the easy and boring way out. + for(var/datum/mutation/human/mutation as anything in dna.mutations) + mutation.mutadone_proof = TRUE + mutation.instability = 0 + + // Extra backup! + ADD_TRAIT(src, TRAIT_NO_DNA_SCRAMBLE, SPECIES_TRAIT) + /mob/living/carbon/human/species/abductor race = /datum/species/abductor diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 41c129dc4ab3d..4a1ef86789c5c 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -163,12 +163,12 @@ if(LAZYACCESS(modifiers, RIGHT_CLICK)) //Always drop item in hand, if no item, get stunned instead. var/obj/item/I = get_active_held_item() if(I && !(I.item_flags & ABSTRACT) && dropItemToGround(I)) - playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/slash.ogg', 25, TRUE, -1) visible_message(span_danger("[user] disarmed [src]!"), \ span_userdanger("[user] disarmed you!"), span_hear("You hear aggressive shuffling!"), null, user) to_chat(user, span_danger("You disarm [src]!")) else if(!user.client || prob(5)) // only natural monkeys get to stun reliably, (they only do it occasionaly) - playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/pierce.ogg', 25, TRUE, -1) if (src.IsKnockdown() && !src.IsParalyzed()) Paralyze(40) log_combat(user, src, "pinned") @@ -211,25 +211,25 @@ if(LAZYACCESS(modifiers, RIGHT_CLICK)) //Always drop item in hand if there is one. If there's no item, shove the target. If the target is incapacitated, slam them into the ground to stun them. var/obj/item/I = get_active_held_item() if(I && dropItemToGround(I)) - playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/slash.ogg', 25, TRUE, -1) visible_message(span_danger("[user] disarms [src]!"), \ span_userdanger("[user] disarms you!"), span_hear("You hear aggressive shuffling!"), null, user) to_chat(user, span_danger("You disarm [src]!")) else if(!HAS_TRAIT(src, TRAIT_INCAPACITATED)) - playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/pierce.ogg', 25, TRUE, -1) var/shovetarget = get_edge_target_turf(user, get_dir(user, get_step_away(src, user))) adjustStaminaLoss(35) throw_at(shovetarget, 4, 2, user, force = MOVE_FORCE_OVERPOWERING) log_combat(user, src, "shoved") - visible_message("[user] tackles [src] down!", \ - "[user] shoves you with great force!", "You hear aggressive shuffling followed by a loud thud!", null, user) - to_chat(user, "You shove [src] with great force!") + visible_message(span_danger("[user] tackles [src] down!"), \ + span_userdanger("[user] shoves you with great force!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), null, user) + to_chat(user, span_danger("You shove [src] with great force!")) else Paralyze(5 SECONDS) - playsound(loc, 'sound/weapons/punch3.ogg', 25, TRUE, -1) - visible_message("[user] slams [src] into the floor!", \ - "[user] slams you into the ground!", "You hear something slam loudly onto the floor!", null, user) - to_chat(user, "You slam [src] into the floor beneath you!") + playsound(loc, 'sound/items/weapons/punch3.ogg', 25, TRUE, -1) + visible_message(span_danger("[user] slams [src] into the floor!"), \ + span_userdanger("[user] slams you into the ground!"), span_hear("You hear something slam loudly onto the floor!"), null, user) + to_chat(user, span_danger("You slam [src] into the floor beneath you!")) log_combat(user, src, "slammed into the ground") return TRUE @@ -238,7 +238,7 @@ w_uniform.add_fingerprint(user) var/damage = prob(90) ? rand(user.melee_damage_lower, user.melee_damage_upper) : 0 if(!damage) - playsound(loc, 'sound/weapons/slashmiss.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/slashmiss.ogg', 50, TRUE, -1) visible_message(span_danger("[user] lunges at [src]!"), \ span_userdanger("[user] lunges at you!"), span_hear("You hear a swoosh!"), null, user) to_chat(user, span_danger("You lunge at [src]!")) @@ -246,7 +246,7 @@ var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(user.zone_selected)) var/armor_block = run_armor_check(affecting, MELEE,"","",10) - playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/slice.ogg', 25, TRUE, -1) visible_message(span_danger("[user] slashes at [src]!"), \ span_userdanger("[user] slashes at you!"), span_hear("You hear a sickening sound of a slice!"), null, user) to_chat(user, span_danger("You slash at [src]!")) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 1e6db319eaa03..d29f8eadf9c60 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -63,7 +63,7 @@ var/backpack = DBACKPACK //Which backpack type the player has chosen. var/jumpsuit_style = PREF_SUIT //suit/skirt - var/datum/scream_type/selected_scream //SKRYAT EDIT ADDITION + var/datum/scream_type/selected_scream //SKYRAT EDIT ADDITION var/datum/laugh_type/selected_laugh //SKYRAT EDIT ADDITION //Equipment slots diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index e74b0dda69082..d0fa04b9689ac 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -4,28 +4,6 @@ return FALSE return TRUE -///returns a list of "damtype" => damage description based off of which bodypart description is most common -///used in human examines -/mob/living/carbon/human/proc/get_majority_bodypart_damage_desc() - var/list/seen_damage = list() // This looks like: ({Damage type} = list({Damage description for that damage type} = {number of times it has appeared}, ...), ...) - var/list/most_seen_damage = list() // This looks like: ({Damage type} = {Frequency of the most common description}, ...) - var/list/final_descriptions = list() // This looks like: ({Damage type} = {Most common damage description for that type}, ...) - for(var/obj/item/bodypart/part as anything in bodyparts) - for(var/damage_type in part.damage_examines) - var/damage_desc = part.damage_examines[damage_type] - if(!seen_damage[damage_type]) - seen_damage[damage_type] = list() - - if(!seen_damage[damage_type][damage_desc]) - seen_damage[damage_type][damage_desc] = 1 - else - seen_damage[damage_type][damage_desc] += 1 - - if(seen_damage[damage_type][damage_desc] > most_seen_damage[damage_type]) - most_seen_damage[damage_type] = seen_damage[damage_type][damage_desc] - final_descriptions[damage_type] = damage_desc - return final_descriptions - //gets assignment from ID or ID inside PDA or PDA itself //Useful when player do something with computers /mob/living/carbon/human/proc/get_assignment(if_no_id = "No id", if_no_job = "No job", hand_first = TRUE) @@ -76,10 +54,10 @@ fake_name = "[fake_name]/[id_name]" else fake_name = id_name - if (HAS_TRAIT(src, TRAIT_UNKNOWN) || (!face_name && !id_name)) + if (HAS_TRAIT(src, TRAIT_UNKNOWN) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN) || (!face_name && !id_name)) fake_name = "Unknown" return "[real_name][fake_name ? " (as [fake_name])" : ""]" - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + if(HAS_TRAIT(src, TRAIT_UNKNOWN) || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) return "Unknown" if(face_name) if(add_id_name && id_name && (id_name != face_name)) @@ -89,8 +67,12 @@ return id_name return "Unknown" -//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when Fluacided or when updating a human's name variable -/mob/living/carbon/human/proc/get_face_name(if_no_face = "Unknown") +/// Returns "Unknown" if facially disfigured and real_name if not. +/// Useful for setting name when Fluacided or when updating a human's name variable +/mob/living/carbon/proc/get_face_name(if_no_face = "Unknown") + return real_name + +/mob/living/carbon/human/get_face_name(if_no_face = "Unknown") if(HAS_TRAIT(src, TRAIT_UNKNOWN)) return if_no_face //We're Unknown, no face information for you for(var/obj/item/worn_item in get_equipped_items()) @@ -104,7 +86,10 @@ //gets name from ID or PDA itself, ID inside PDA doesn't matter //Useful when player is being seen by other mobs -/mob/living/carbon/human/proc/get_id_name(if_no_id = "Unknown") +/mob/living/carbon/proc/get_id_name(if_no_id = "Unknown") + return + +/mob/living/carbon/human/get_id_name(if_no_id = "Unknown") var/obj/item/storage/wallet/wallet = wear_id var/obj/item/modular_computer/pda = wear_id var/obj/item/card/id/id = wear_id @@ -247,18 +232,6 @@ WRITE_FILE(F["scar[char_index]-[scar_index]"], sanitize_text(valid_scars)) WRITE_FILE(F["current_scar_index"], sanitize_integer(scar_index)) -///Returns death message for mob examine text -/mob/living/carbon/human/proc/generate_death_examine_text() - var/mob/dead/observer/ghost = get_ghost(TRUE, TRUE) - var/t_He = p_They() - var/t_his = p_their() - var/t_is = p_are() - //This checks to see if the body is revivable - 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...") - ///copies over clothing preferences like underwear to another human /mob/living/carbon/human/proc/copy_clothing_prefs(mob/living/carbon/human/destination) destination.underwear = underwear @@ -343,7 +316,7 @@ clone.pitch = pitch dna.transfer_identity(clone, transfer_SE = TRUE, transfer_species = TRUE) - clone.dress_up_as_job(SSjob.GetJob(job)) + clone.dress_up_as_job(SSjob.get_job(job)) for(var/datum/quirk/original_quircks as anything in quirks) clone.add_quirk(original_quircks.type, override_client = client) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index fda6d7a9142ea..52e59e098c1b7 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -30,7 +30,3 @@ if((. && !moving_diagonally) || (!. && moving_diagonally == SECOND_DIAG_STEP)) SEND_SIGNAL(shoes, COMSIG_SHOES_STEP_ACTION) -/mob/living/carbon/human/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) - if(movement_type & FLYING || HAS_TRAIT(src, TRAIT_FREE_FLOAT_MOVEMENT)) - return TRUE - return ..() diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index f6e96865e5581..95fb7c728813b 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -72,7 +72,7 @@ var/area/our_area = get_area(src) if(our_area.area_flags & BINARY_JAMMING) return FALSE - return dongle.translate_binary + return (dongle.special_channels & RADIO_SPECIAL_BINARY) /mob/living/carbon/human/radio(message, list/message_mods = list(), list/spans, language) //Poly has a copy of this, lazy bastard . = ..() 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 fd07f45ad1b8d..20f1185d2537e 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -1138,11 +1138,12 @@ mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // SKYRAT E "params" = displacement_map_filter(lenghten_legs_mask, x = 0, y = 0, size = 2), ), )) + // Kinda gross but because many humans overlays do not use KEEP_TOGETHER we need to manually propogate the filter // Otherwise overlays, such as worn overlays on icons, won't have the filter "applied", and the effect kinda breaks if(!(appearance.appearance_flags & KEEP_TOGETHER)) for(var/image/overlay in list() + appearance.underlays + appearance.overlays) apply_height_filters(overlay) - return appearance + return appearance #undef RESOLVE_ICON_STATE diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index d64268735689f..53a8d6da38b70 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -45,12 +45,16 @@ return r_store if(ITEM_SLOT_SUITSTORE) return s_store + return ..() /mob/living/carbon/human/get_slot_by_item(obj/item/looking_for) if(looking_for == belt) return ITEM_SLOT_BELT + if(belt && (looking_for in belt)) + return ITEM_SLOT_BELTPACK + if(looking_for == wear_id) return ITEM_SLOT_ID @@ -243,7 +247,9 @@ return s_store = equipping update_suit_storage() - + if(ITEM_SLOT_BELTPACK) + if(!belt || !belt.atom_storage?.attempt_insert(equipping, src, override = TRUE, force = indirect_action ? STORAGE_SOFT_LOCKED : STORAGE_NOT_LOCKED)) + not_handled = TRUE else to_chat(src, span_danger("You are trying to equip this item to an unsupported inventory slot. Report this to a coder!")) @@ -449,7 +455,7 @@ /// take the most recent item out of a slot or place held item in a slot /mob/living/carbon/human/proc/smart_equip_targeted(slot_type = ITEM_SLOT_BELT, slot_item_name = "belt") - if(incapacitated()) + if(incapacitated) return var/obj/item/thing = get_active_held_item() var/obj/item/equipped_item = get_item_by_slot(slot_type) diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm index ec384347ec5ab..6e6dd578967cc 100644 --- a/code/modules/mob/living/carbon/human/login.dm +++ b/code/modules/mob/living/carbon/human/login.dm @@ -4,6 +4,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) + 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 e63b35ab42af4..de7eb94f39f3f 100644 --- a/code/modules/mob/living/carbon/human/monkey.dm +++ b/code/modules/mob/living/carbon/human/monkey.dm @@ -48,6 +48,11 @@ GLOBAL_DATUM(the_one_and_only_punpun, /mob/living/carbon/human/species/monkey/pu var/memory_saved = FALSE /mob/living/carbon/human/species/monkey/punpun/Initialize(mapload) + // 1 Pun Pun should exist + REGISTER_REQUIRED_MAP_ITEM(1, 1) + if(mapload && (locate(/datum/station_trait/job/pun_pun) in SSstation.station_traits)) + new /obj/effect/landmark/start/pun_pun(loc) //Pun Pun is a crewmember, and may late-join. + return INITIALIZE_HINT_QDEL Read_Memory() var/name_to_use = name @@ -65,8 +70,8 @@ GLOBAL_DATUM(the_one_and_only_punpun, /mob/living/carbon/human/species/monkey/pu if(!GLOB.the_one_and_only_punpun && mapload) GLOB.the_one_and_only_punpun = src - // 1 Pun Pun should exist - REGISTER_REQUIRED_MAP_ITEM(1, 1) + else if(GLOB.the_one_and_only_punpun) + ADD_TRAIT(src, TRAIT_DONT_WRITE_MEMORY, INNATE_TRAIT) //faaaaaaake! fully_replace_character_name(real_name, name_to_use) 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 85dda19024ce8..1d7c328f88232 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -292,4 +292,3 @@ owner.gib(DROP_ALL_REMAINS) owner = null return ..() - 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 9fa1fb1ea5320..64ebf1594ca54 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -54,12 +54,11 @@ default_color = new_ethereal.dna.features["ethcolor"] 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_ATOM_SABOTEUR_ACT, PROC_REF(hit_by_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) - 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 @@ -72,7 +71,7 @@ UnregisterSignal(former_ethereal, list( COMSIG_ATOM_EMAG_ACT, COMSIG_ATOM_EMP_ACT, - COMSIG_HIT_BY_SABOTEUR, + COMSIG_ATOM_SABOTEUR_ACT, COMSIG_LIGHT_EATER_ACT, COMSIG_LIVING_HEALTH_UPDATE, )) @@ -125,14 +124,13 @@ if(EMP_HEAVY) 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(mob/living/carbon/human/source, disrupt_duration) - SIGNAL_HANDLER +/datum/species/ethereal/proc/hit_by_saboteur(mob/living/carbon/human/source, disrupt_duration) EMPeffect = TRUE 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 + return TRUE /datum/species/ethereal/proc/on_emag_act(mob/living/carbon/human/source, mob/user) SIGNAL_HANDLER @@ -178,9 +176,9 @@ /datum/species/ethereal/get_scream_sound(mob/living/carbon/human/ethereal) return pick( - 'sound/voice/ethereal/ethereal_scream_1.ogg', - 'sound/voice/ethereal/ethereal_scream_2.ogg', - 'sound/voice/ethereal/ethereal_scream_3.ogg', + 'sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg', + 'sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg', + 'sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg', ) /datum/species/ethereal/get_physical_attributes() @@ -269,9 +267,9 @@ /datum/species/ethereal/lustrous/get_scream_sound(mob/living/carbon/human/ethereal) return pick( - 'sound/voice/ethereal/lustrous_scream_1.ogg', - 'sound/voice/ethereal/lustrous_scream_2.ogg', - 'sound/voice/ethereal/lustrous_scream_3.ogg', + 'sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg', + 'sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg', + 'sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg', ) /datum/species/ethereal/lustrous/on_species_gain(mob/living/carbon/new_lustrous, datum/species/old_species, pref_load) 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 f00ba9dbe8a5c..ebee5b5949814 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -64,60 +64,60 @@ /datum/species/human/felinid/get_laugh_sound(mob/living/carbon/human/felinid) if(felinid.physique == FEMALE) - return 'sound/voice/human/womanlaugh.ogg' + return 'sound/mobs/humanoids/human/laugh/womanlaugh.ogg' return pick( - 'sound/voice/human/manlaugh1.ogg', - 'sound/voice/human/manlaugh2.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh1.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh2.ogg', ) /datum/species/human/felinid/get_cough_sound(mob/living/carbon/human/felinid) if(felinid.physique == FEMALE) return pick( - 'sound/voice/human/female_cough1.ogg', - 'sound/voice/human/female_cough2.ogg', - 'sound/voice/human/female_cough3.ogg', - 'sound/voice/human/female_cough4.ogg', - 'sound/voice/human/female_cough5.ogg', - 'sound/voice/human/female_cough6.ogg', + 'sound/mobs/humanoids/human/cough/female_cough1.ogg', + 'sound/mobs/humanoids/human/cough/female_cough2.ogg', + 'sound/mobs/humanoids/human/cough/female_cough3.ogg', + 'sound/mobs/humanoids/human/cough/female_cough4.ogg', + 'sound/mobs/humanoids/human/cough/female_cough5.ogg', + 'sound/mobs/humanoids/human/cough/female_cough6.ogg', ) return pick( - 'sound/voice/human/male_cough1.ogg', - 'sound/voice/human/male_cough2.ogg', - 'sound/voice/human/male_cough3.ogg', - 'sound/voice/human/male_cough4.ogg', - 'sound/voice/human/male_cough5.ogg', - 'sound/voice/human/male_cough6.ogg', + 'sound/mobs/humanoids/human/cough/male_cough1.ogg', + 'sound/mobs/humanoids/human/cough/male_cough2.ogg', + 'sound/mobs/humanoids/human/cough/male_cough3.ogg', + 'sound/mobs/humanoids/human/cough/male_cough4.ogg', + 'sound/mobs/humanoids/human/cough/male_cough5.ogg', + 'sound/mobs/humanoids/human/cough/male_cough6.ogg', ) /datum/species/human/felinid/get_cry_sound(mob/living/carbon/human/felinid) if(felinid.physique == FEMALE) return pick( - 'sound/voice/human/female_cry1.ogg', - 'sound/voice/human/female_cry2.ogg', + 'sound/mobs/humanoids/human/cry/female_cry1.ogg', + 'sound/mobs/humanoids/human/cry/female_cry2.ogg', ) return pick( - 'sound/voice/human/male_cry1.ogg', - 'sound/voice/human/male_cry2.ogg', - 'sound/voice/human/male_cry3.ogg', + 'sound/mobs/humanoids/human/cry/male_cry1.ogg', + 'sound/mobs/humanoids/human/cry/male_cry2.ogg', + 'sound/mobs/humanoids/human/cry/male_cry3.ogg', ) /datum/species/human/felinid/get_sneeze_sound(mob/living/carbon/human/felinid) if(felinid.physique == FEMALE) - return 'sound/voice/human/female_sneeze1.ogg' - return 'sound/voice/human/male_sneeze1.ogg' + return 'sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg' + return 'sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg' /datum/species/human/felinid/get_sigh_sound(mob/living/carbon/human/felinid) if(felinid.physique == FEMALE) - return 'sound/voice/human/female_sigh.ogg' - return 'sound/voice/human/male_sigh.ogg' + return 'sound/mobs/humanoids/human/sigh/female_sigh.ogg' + return 'sound/mobs/humanoids/human/sigh/male_sigh.ogg' /datum/species/human/felinid/get_sniff_sound(mob/living/carbon/human/felinid) if(felinid.physique == FEMALE) - return 'sound/voice/human/female_sniff.ogg' - return 'sound/voice/human/male_sniff.ogg' + return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' + return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' 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 d593f90ec7f4a..13471b2872b98 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -27,7 +27,6 @@ payday_modifier = 1.0 siemens_coeff = 0 no_equip_flags = ITEM_SLOT_MASK | ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_ICLOTHING | ITEM_SLOT_SUITSTORE - nojumpsuit = 1 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC sexes = FALSE meat = /obj/item/food/meat/slab/human/mutant/golem 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 f888aba894596..c42945795aaf6 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -16,78 +16,78 @@ /datum/species/human/get_scream_sound(mob/living/carbon/human/human) if(human.physique == MALE) if(prob(1)) - return 'sound/voice/human/wilhelm_scream.ogg' + return 'sound/mobs/humanoids/human/scream/wilhelm_scream.ogg' return pick( - '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', + 'sound/mobs/humanoids/human/scream/malescream_1.ogg', + 'sound/mobs/humanoids/human/scream/malescream_2.ogg', + 'sound/mobs/humanoids/human/scream/malescream_3.ogg', + 'sound/mobs/humanoids/human/scream/malescream_4.ogg', + 'sound/mobs/humanoids/human/scream/malescream_5.ogg', + 'sound/mobs/humanoids/human/scream/malescream_6.ogg', ) return pick( - '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', + 'sound/mobs/humanoids/human/scream/femalescream_1.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_2.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_3.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_4.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_5.ogg', ) /datum/species/human/get_cough_sound(mob/living/carbon/human/human) if(human.gender == FEMALE) // SKYRAT EDIT CHANGE return pick( - 'sound/voice/human/female_cough1.ogg', - 'sound/voice/human/female_cough2.ogg', - 'sound/voice/human/female_cough3.ogg', - 'sound/voice/human/female_cough4.ogg', - 'sound/voice/human/female_cough5.ogg', - 'sound/voice/human/female_cough6.ogg', + 'sound/mobs/humanoids/human/cough/female_cough1.ogg', + 'sound/mobs/humanoids/human/cough/female_cough2.ogg', + 'sound/mobs/humanoids/human/cough/female_cough3.ogg', + 'sound/mobs/humanoids/human/cough/female_cough4.ogg', + 'sound/mobs/humanoids/human/cough/female_cough5.ogg', + 'sound/mobs/humanoids/human/cough/female_cough6.ogg', ) return pick( - 'sound/voice/human/male_cough1.ogg', - 'sound/voice/human/male_cough2.ogg', - 'sound/voice/human/male_cough3.ogg', - 'sound/voice/human/male_cough4.ogg', - 'sound/voice/human/male_cough5.ogg', - 'sound/voice/human/male_cough6.ogg', + 'sound/mobs/humanoids/human/cough/male_cough1.ogg', + 'sound/mobs/humanoids/human/cough/male_cough2.ogg', + 'sound/mobs/humanoids/human/cough/male_cough3.ogg', + 'sound/mobs/humanoids/human/cough/male_cough4.ogg', + 'sound/mobs/humanoids/human/cough/male_cough5.ogg', + 'sound/mobs/humanoids/human/cough/male_cough6.ogg', ) /datum/species/human/get_cry_sound(mob/living/carbon/human/human) if(human.gender == FEMALE) // SKYRAT EDIT CHANGE return pick( - 'sound/voice/human/female_cry1.ogg', - 'sound/voice/human/female_cry2.ogg', + 'sound/mobs/humanoids/human/cry/female_cry1.ogg', + 'sound/mobs/humanoids/human/cry/female_cry2.ogg', ) return pick( - 'sound/voice/human/male_cry1.ogg', - 'sound/voice/human/male_cry2.ogg', - 'sound/voice/human/male_cry3.ogg', + 'sound/mobs/humanoids/human/cry/male_cry1.ogg', + 'sound/mobs/humanoids/human/cry/male_cry2.ogg', + 'sound/mobs/humanoids/human/cry/male_cry3.ogg', ) /datum/species/human/get_sneeze_sound(mob/living/carbon/human/human) if(human.physique == FEMALE) - return 'sound/voice/human/female_sneeze1.ogg' - return 'sound/voice/human/male_sneeze1.ogg' + return 'sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg' + return 'sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg' /datum/species/human/get_laugh_sound(mob/living/carbon/human/human) if(human.physique == FEMALE) - return 'sound/voice/human/womanlaugh.ogg' + return 'sound/mobs/humanoids/human/laugh/womanlaugh.ogg' return pick( - 'sound/voice/human/manlaugh1.ogg', - 'sound/voice/human/manlaugh2.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh1.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh2.ogg', ) /datum/species/human/get_sigh_sound(mob/living/carbon/human/human) if(human.physique == FEMALE) - return 'sound/voice/human/female_sigh.ogg' - return 'sound/voice/human/male_sigh.ogg' + return 'sound/mobs/humanoids/human/sigh/female_sigh.ogg' + return 'sound/mobs/humanoids/human/sigh/male_sigh.ogg' /datum/species/human/get_sniff_sound(mob/living/carbon/human/human) if(human.physique == FEMALE) - return 'sound/voice/human/female_sniff.ogg' - return 'sound/voice/human/male_sniff.ogg' + return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' + return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' /datum/species/human/get_species_description() return "Humans are the dominant species in the known galaxy. \ 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 be149ff95377f..cee19ae813759 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -49,7 +49,6 @@ if(ishuman(new_jellyperson)) regenerate_limbs = new regenerate_limbs.Grant(new_jellyperson) - update_mail_goodies(new_jellyperson) alter_form = new //SKYRAT EDIT CUSTOMIZATION alter_form.Grant(new_jellyperson) //SKYRAT EDIT CUSTOMIZATION @@ -421,7 +420,7 @@ return data -/datum/action/innate/swap_body/ui_act(action, params) +/datum/action/innate/swap_body/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -471,16 +470,13 @@ if(!can_swap(dupe)) //sanity check return if(M.current.stat == CONSCIOUS) - M.current.visible_message("[M.current] \ - stops moving and starts staring vacantly into space.", + M.current.visible_message(span_notice("[M.current] stops moving and starts staring vacantly into space."), span_notice("You stop moving this body...")) else to_chat(M.current, span_notice("You abandon this body...")) M.current.transfer_quirk_datums(dupe) M.transfer_to(dupe) - dupe.visible_message("[dupe] blinks and looks \ - around.", - span_notice("...and move this one instead.")) + dupe.visible_message(span_notice("[dupe] blinks and looks around."), span_notice("...and move this one instead.")) ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// @@ -733,7 +729,7 @@ var/mob/living/recipient = tgui_input_list(telepath, "Choose a telepathic message recipient", "Telepathy", sort_names(recipient_options)) if(isnull(recipient) || telepath.stat == DEAD || !is_species(telepath, /datum/species/jelly/stargazer)) return - var/msg = tgui_input_text(telepath, title = "Telepathy") + var/msg = tgui_input_text(telepath, title = "Telepathy", max_length = MAX_MESSAGE_LEN) if(isnull(msg) || telepath.stat == DEAD || !is_species(telepath, /datum/species/jelly/stargazer)) return if(!(recipient in oview(telepath))) 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 5840740be1b92..e179deac61fcb 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -26,7 +26,7 @@ skinned_type = /obj/item/stack/sheet/animalhide/lizard exotic_bloodtype = "L" inert_mutation = /datum/mutation/human/firebreath - death_sound = 'sound/voice/lizard/deathsound.ogg' + death_sound = 'sound/mobs/humanoids/lizard/deathsound.ogg' species_language_holder = /datum/language_holder/lizard digitigrade_customization = DIGITIGRADE_OPTIONAL @@ -47,72 +47,75 @@ /datum/species/lizard/body_temperature_core(mob/living/carbon/human/humi, seconds_per_tick, times_fired) return + //SKYRAT EDIT REMOVAL BEGIN /* /datum/species/lizard/randomize_features() var/list/features = ..() features["lizard_markings"] = pick(SSaccessories.lizard_markings_list) return features + */ //SKYRAT EDIT REMOVAL END + /datum/species/lizard/get_scream_sound(mob/living/carbon/human/lizard) return pick( - 'sound/voice/lizard/lizard_scream_1.ogg', - 'sound/voice/lizard/lizard_scream_2.ogg', - 'sound/voice/lizard/lizard_scream_3.ogg', + 'sound/mobs/humanoids/lizard/lizard_scream_1.ogg', + 'sound/mobs/humanoids/lizard/lizard_scream_2.ogg', + 'sound/mobs/humanoids/lizard/lizard_scream_3.ogg', ) /datum/species/lizard/get_cough_sound(mob/living/carbon/human/lizard) if(lizard.physique == FEMALE) return pick( - 'sound/voice/human/female_cough1.ogg', - 'sound/voice/human/female_cough2.ogg', - 'sound/voice/human/female_cough3.ogg', - 'sound/voice/human/female_cough4.ogg', - 'sound/voice/human/female_cough5.ogg', - 'sound/voice/human/female_cough6.ogg', + 'sound/mobs/humanoids/human/cough/female_cough1.ogg', + 'sound/mobs/humanoids/human/cough/female_cough2.ogg', + 'sound/mobs/humanoids/human/cough/female_cough3.ogg', + 'sound/mobs/humanoids/human/cough/female_cough4.ogg', + 'sound/mobs/humanoids/human/cough/female_cough5.ogg', + 'sound/mobs/humanoids/human/cough/female_cough6.ogg', ) return pick( - 'sound/voice/human/male_cough1.ogg', - 'sound/voice/human/male_cough2.ogg', - 'sound/voice/human/male_cough3.ogg', - 'sound/voice/human/male_cough4.ogg', - 'sound/voice/human/male_cough5.ogg', - 'sound/voice/human/male_cough6.ogg', + 'sound/mobs/humanoids/human/cough/male_cough1.ogg', + 'sound/mobs/humanoids/human/cough/male_cough2.ogg', + 'sound/mobs/humanoids/human/cough/male_cough3.ogg', + 'sound/mobs/humanoids/human/cough/male_cough4.ogg', + 'sound/mobs/humanoids/human/cough/male_cough5.ogg', + 'sound/mobs/humanoids/human/cough/male_cough6.ogg', ) /datum/species/lizard/get_cry_sound(mob/living/carbon/human/lizard) if(lizard.physique == FEMALE) return pick( - 'sound/voice/human/female_cry1.ogg', - 'sound/voice/human/female_cry2.ogg', + 'sound/mobs/humanoids/human/cry/female_cry1.ogg', + 'sound/mobs/humanoids/human/cry/female_cry2.ogg', ) return pick( - 'sound/voice/human/male_cry1.ogg', - 'sound/voice/human/male_cry2.ogg', - 'sound/voice/human/male_cry3.ogg', + 'sound/mobs/humanoids/human/cry/male_cry1.ogg', + 'sound/mobs/humanoids/human/cry/male_cry2.ogg', + 'sound/mobs/humanoids/human/cry/male_cry3.ogg', ) /datum/species/lizard/get_sneeze_sound(mob/living/carbon/human/lizard) if(lizard.physique == FEMALE) - return 'sound/voice/human/female_sneeze1.ogg' - return 'sound/voice/human/male_sneeze1.ogg' + return 'sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg' + return 'sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg' /datum/species/lizard/get_laugh_sound(mob/living/carbon/human/lizard) - return 'sound/voice/lizard/lizard_laugh1.ogg' + return 'sound/mobs/humanoids/lizard/lizard_laugh1.ogg' /datum/species/lizard/get_sigh_sound(mob/living/carbon/human/lizard) if(lizard.physique == FEMALE) - return 'sound/voice/human/female_sigh.ogg' - return 'sound/voice/human/male_sigh.ogg' + return 'sound/mobs/humanoids/human/sigh/female_sigh.ogg' + return 'sound/mobs/humanoids/human/sigh/male_sigh.ogg' /datum/species/lizard/get_sniff_sound(mob/living/carbon/human/lizard) if(lizard.physique == FEMALE) - return 'sound/voice/human/female_sniff.ogg' - return 'sound/voice/human/male_sniff.ogg' + return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' + return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' /datum/species/lizard/get_physical_attributes() return "Lizardpeople can withstand slightly higher temperatures than most species, but they are very vulnerable to the cold \ 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 7c0910ba989d0..794621cf874eb 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -11,7 +11,7 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT species_cookie = /obj/item/food/muffin/moffin species_language_holder = /datum/language_holder/moth - death_sound = 'sound/voice/moth/moth_death.ogg' + death_sound = 'sound/mobs/humanoids/moth/moth_death.ogg' payday_modifier = 1.0 family_heirlooms = list(/obj/item/flashlight/lantern/heirloom_moth) @@ -50,59 +50,59 @@ return features /datum/species/moth/get_scream_sound(mob/living/carbon/human/moth) - return 'sound/voice/moth/scream_moth.ogg' + return 'sound/mobs/humanoids/moth/scream_moth.ogg' /datum/species/moth/get_cough_sound(mob/living/carbon/human/moth) if(moth.physique == FEMALE) return pick( - 'sound/voice/human/female_cough1.ogg', - 'sound/voice/human/female_cough2.ogg', - 'sound/voice/human/female_cough3.ogg', - 'sound/voice/human/female_cough4.ogg', - 'sound/voice/human/female_cough5.ogg', - 'sound/voice/human/female_cough6.ogg', + 'sound/mobs/humanoids/human/cough/female_cough1.ogg', + 'sound/mobs/humanoids/human/cough/female_cough2.ogg', + 'sound/mobs/humanoids/human/cough/female_cough3.ogg', + 'sound/mobs/humanoids/human/cough/female_cough4.ogg', + 'sound/mobs/humanoids/human/cough/female_cough5.ogg', + 'sound/mobs/humanoids/human/cough/female_cough6.ogg', ) return pick( - 'sound/voice/human/male_cough1.ogg', - 'sound/voice/human/male_cough2.ogg', - 'sound/voice/human/male_cough3.ogg', - 'sound/voice/human/male_cough4.ogg', - 'sound/voice/human/male_cough5.ogg', - 'sound/voice/human/male_cough6.ogg', + 'sound/mobs/humanoids/human/cough/male_cough1.ogg', + 'sound/mobs/humanoids/human/cough/male_cough2.ogg', + 'sound/mobs/humanoids/human/cough/male_cough3.ogg', + 'sound/mobs/humanoids/human/cough/male_cough4.ogg', + 'sound/mobs/humanoids/human/cough/male_cough5.ogg', + 'sound/mobs/humanoids/human/cough/male_cough6.ogg', ) /datum/species/moth/get_cry_sound(mob/living/carbon/human/moth) if(moth.physique == FEMALE) return pick( - 'sound/voice/human/female_cry1.ogg', - 'sound/voice/human/female_cry2.ogg', + 'sound/mobs/humanoids/human/cry/female_cry1.ogg', + 'sound/mobs/humanoids/human/cry/female_cry2.ogg', ) return pick( - 'sound/voice/human/male_cry1.ogg', - 'sound/voice/human/male_cry2.ogg', - 'sound/voice/human/male_cry3.ogg', + 'sound/mobs/humanoids/human/cry/male_cry1.ogg', + 'sound/mobs/humanoids/human/cry/male_cry2.ogg', + 'sound/mobs/humanoids/human/cry/male_cry3.ogg', ) /datum/species/moth/get_sneeze_sound(mob/living/carbon/human/moth) if(moth.physique == FEMALE) - return 'sound/voice/human/female_sneeze1.ogg' - return 'sound/voice/human/male_sneeze1.ogg' + return 'sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg' + return 'sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg' /datum/species/moth/get_laugh_sound(mob/living/carbon/human/moth) - return 'sound/voice/moth/moth_laugh1.ogg' + return 'sound/mobs/humanoids/moth/moth_laugh1.ogg' /datum/species/moth/get_sigh_sound(mob/living/carbon/human/moth) if(moth.physique == FEMALE) - return 'sound/voice/human/female_sigh.ogg' - return 'sound/voice/human/male_sigh.ogg' + return 'sound/mobs/humanoids/human/sigh/female_sigh.ogg' + return 'sound/mobs/humanoids/human/sigh/male_sigh.ogg' /datum/species/moth/get_sniff_sound(mob/living/carbon/human/moth) if(moth.physique == FEMALE) - return 'sound/voice/human/female_sniff.ogg' - return 'sound/voice/human/male_sniff.ogg' + return 'sound/mobs/humanoids/human/sniff/female_sniff.ogg' + return 'sound/mobs/humanoids/human/sniff/male_sniff.ogg' /datum/species/moth/get_physical_attributes() return "Moths have large and fluffy wings, which help them navigate the station if gravity is offline by pushing the air around them. \ @@ -142,7 +142,7 @@ SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, SPECIES_PERK_ICON = "tshirt", SPECIES_PERK_NAME = "Meal Plan", - SPECIES_PERK_DESC = "Moths can eat clothes for nourishment.", + SPECIES_PERK_DESC = "Moths can eat clothes for temporary nourishment.", ), list( SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, 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 9c1649d0eddaf..99eb0d756c897 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -6,6 +6,8 @@ fixed_mut_color = "#DBBF92" + external_organs = list(/obj/item/organ/external/mushroom_cap = "Round") + inherent_traits = list( TRAIT_MUTANT_COLORS, TRAIT_NOBREATH, 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 307d2d677c557..bcbdf0276df6f 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -16,7 +16,6 @@ TRAIT_UNHUSKABLE, ) - inherent_biotypes = MOB_HUMANOID|MOB_MINERAL inherent_respiration_type = RESPIRATION_PLASMA mutantlungs = /obj/item/organ/internal/lungs/plasmaman @@ -133,9 +132,9 @@ /datum/species/plasmaman/get_scream_sound(mob/living/carbon/human) return pick( - 'sound/voice/plasmaman/plasmeme_scream_1.ogg', - 'sound/voice/plasmaman/plasmeme_scream_2.ogg', - 'sound/voice/plasmaman/plasmeme_scream_3.ogg', + 'sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg', + 'sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg', + 'sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg', ) /datum/species/plasmaman/get_physical_attributes() 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 f5c849cc21591..4718645b56346 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -5,7 +5,6 @@ sexes = FALSE meat = /obj/item/food/meat/slab/human/mutant/skeleton inherent_traits = list( - TRAIT_NO_UNDERWEAR, TRAIT_EASYDISMEMBER, TRAIT_FAKEDEATH, TRAIT_GENELESS, 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 2c6d27a18866c..4fe671dc24a81 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -115,6 +115,7 @@ max_integrity = 200 resistance_flags = FIRE_PROOF | ACID_PROOF + // SKYRAT EDIT ADDITION - 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. /datum/armor/backpack_snail melee = 40 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 b685e18b01812..404224200d9e0 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -2,7 +2,7 @@ // 1spooky name = "High-Functioning Zombie" id = SPECIES_ZOMBIE - sexes = FALSE + sexes = TRUE //BUBBER EDIT - WHY THE HELL WAS THIS SET TO FALSE??? meat = /obj/item/food/meat/slab/human/mutant/zombie mutanttongue = /obj/item/organ/internal/tongue/zombie inherent_traits = list( @@ -48,11 +48,11 @@ /// Spooky growls we sometimes play while alive var/static/list/spooks = list( - 'sound/hallucinations/growl1.ogg', - 'sound/hallucinations/growl2.ogg', - 'sound/hallucinations/growl3.ogg', - 'sound/hallucinations/veryfar_noise.ogg', - 'sound/hallucinations/wail.ogg', + 'sound/effects/hallucinations/growl1.ogg', + 'sound/effects/hallucinations/growl2.ogg', + 'sound/effects/hallucinations/growl3.ogg', + 'sound/effects/hallucinations/veryfar_noise.ogg', + 'sound/effects/hallucinations/wail.ogg', ) /// Zombies do not stabilize body temperature they are the walking dead and are cold blooded @@ -97,6 +97,7 @@ damage_modifier = 20 // 120 damage to KO a zombie, which kills it mutanteyes = /obj/item/organ/internal/eyes/zombie mutantbrain = /obj/item/organ/internal/brain/zombie + mutanttongue = /obj/item/organ/internal/tongue/zombie changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN inherent_traits = list( diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 42a5d61992601..5db14db811690 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -183,7 +183,7 @@ /mob/living/carbon/proc/check_breath(datum/gas_mixture/breath) . = TRUE - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) failed_last_breath = FALSE clear_alert(ALERT_NOT_ENOUGH_OXYGEN) return @@ -711,6 +711,8 @@ * * capped (optional) default True used to cap step mode */ /mob/living/carbon/adjust_bodytemperature(amount, min_temp=0, max_temp=INFINITY, use_insulation=FALSE, use_steps=FALSE, capped=TRUE) + if(HAS_TRAIT(src, TRAIT_HYPOTHERMIC) && amount > 0) //Prevent warming up + return // apply insulation to the amount of change if(use_insulation) amount *= (1 - get_insulation_protection(bodytemperature + amount)) diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 3bdff375e22fc..f49b8e21951a4 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -16,6 +16,7 @@ * * sharpness - Sharpness of the weapon. * * attack_direction - Direction of the attack from the attacker to [src]. * * attacking_item - Item that is attacking [src]. + * * wound_clothing - If this should cause damage to clothing. * * Returns the amount of damage dealt. */ @@ -31,6 +32,7 @@ sharpness = NONE, attack_direction = null, attacking_item, + wound_clothing = TRUE, ) SHOULD_CALL_PARENT(TRUE) var/damage_amount = damage @@ -40,7 +42,7 @@ if(damage_amount <= 0) return 0 - SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMAGE, damage_amount, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, attacking_item) + SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMAGE, damage_amount, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, attacking_item, wound_clothing) var/damage_dealt = 0 switch(damagetype) @@ -57,6 +59,7 @@ sharpness = sharpness, attack_direction = attack_direction, damage_source = attacking_item, + wound_clothing = wound_clothing, )) update_damage_overlays() damage_dealt = actual_hit.get_damage() - delta // Unfortunately bodypart receive_damage doesn't return damage dealt so we do it manually @@ -76,6 +79,7 @@ sharpness = sharpness, attack_direction = attack_direction, damage_source = attacking_item, + wound_clothing = wound_clothing, )) update_damage_overlays() damage_dealt = actual_hit.get_damage() - delta // See above @@ -91,7 +95,7 @@ if(BRAIN) damage_dealt = -1 * adjustOrganLoss(ORGAN_SLOT_BRAIN, damage_amount) - SEND_SIGNAL(src, COMSIG_MOB_AFTER_APPLY_DAMAGE, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, attacking_item) + SEND_SIGNAL(src, COMSIG_MOB_AFTER_APPLY_DAMAGE, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus,sharpness, attack_direction, attacking_item, wound_clothing) return damage_dealt /** @@ -268,7 +272,7 @@ return bruteloss /mob/living/proc/can_adjust_brute_loss(amount, forced, required_bodytype) - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_BRUTE_DAMAGE, BRUTE, amount, forced) & COMPONENT_IGNORE_CHANGE) return FALSE @@ -287,7 +291,7 @@ /mob/living/proc/setBruteLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype = ALL) - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE . = bruteloss bruteloss = amount @@ -303,7 +307,7 @@ /mob/living/proc/can_adjust_oxy_loss(amount, forced, required_biotype, required_respiration_type) if(!forced) - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE if (required_respiration_type) var/obj/item/organ/internal/lungs/affected_lungs = get_organ_slot(ORGAN_SLOT_LUNGS) @@ -330,7 +334,7 @@ /mob/living/proc/setOxyLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL, required_respiration_type = ALL) if(!forced) - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE var/obj/item/organ/internal/lungs/affected_lungs = get_organ_slot(ORGAN_SLOT_LUNGS) @@ -352,7 +356,7 @@ return toxloss /mob/living/proc/can_adjust_tox_loss(amount, forced, required_biotype = ALL) - if(!forced && ((status_flags & GODMODE) || !(mob_biotypes & required_biotype))) + if(!forced && (HAS_TRAIT(src, TRAIT_GODMODE) || !(mob_biotypes & required_biotype))) return FALSE if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_TOX_DAMAGE, TOX, amount, forced) & COMPONENT_IGNORE_CHANGE) return FALSE @@ -387,7 +391,7 @@ /mob/living/proc/setToxLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL) - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE if(!forced && !(mob_biotypes & required_biotype)) return FALSE @@ -403,7 +407,7 @@ return fireloss /mob/living/proc/can_adjust_fire_loss(amount, forced, required_bodytype) - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return FALSE if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_BURN_DAMAGE, BURN, amount, forced) & COMPONENT_IGNORE_CHANGE) return FALSE @@ -421,7 +425,7 @@ updatehealth() /mob/living/proc/setFireLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype = ALL) - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return 0 . = fireloss fireloss = amount @@ -444,7 +448,7 @@ return staminaloss /mob/living/proc/can_adjust_stamina_loss(amount, forced, required_biotype = ALL) - if(!forced && (!(mob_biotypes & required_biotype) || status_flags & GODMODE)) + if(!forced && (!(mob_biotypes & required_biotype) || HAS_TRAIT(src, TRAIT_GODMODE))) return FALSE if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_STAMINA_DAMAGE, STAMINA, amount, forced) & COMPONENT_IGNORE_CHANGE) return FALSE @@ -466,7 +470,7 @@ return delta /mob/living/proc/setStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype = ALL) - if(!forced && (status_flags & GODMODE)) + if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) return 0 if(!forced && !(mob_biotypes & required_biotype)) return 0 diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index abd29622fbcab..e58711f488b72 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -4,6 +4,16 @@ mob_type_allowed_typecache = /mob/living mob_type_blacklist_typecache = list(/mob/living/brain) +/datum/emote/living/taunt + key = "taunt" + key_third_person = "taunts" + message = "taunts!" + cooldown = 1.6 SECONDS //note when changing this- this is used by the matrix taunt to block projectiles. + +/datum/emote/living/taunt/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + user.spin(TAUNT_EMOTE_DURATION, 0.1 SECONDS) + /datum/emote/living/blush key = "blush" key_third_person = "blushes" @@ -183,8 +193,8 @@ var/mob/living/carbon/human/human_user = user if(human_user.gender == FEMALE) // SKYRAT EDIT CHANGE - return pick('sound/voice/human/gasp_female1.ogg', 'sound/voice/human/gasp_female2.ogg', 'sound/voice/human/gasp_female3.ogg') - return pick('sound/voice/human/gasp_male1.ogg', 'sound/voice/human/gasp_male2.ogg') + return pick('sound/mobs/humanoids/human/gasp/gasp_female1.ogg', 'sound/mobs/humanoids/human/gasp/gasp_female2.ogg', 'sound/mobs/humanoids/human/gasp/gasp_female3.ogg') + return pick('sound/mobs/humanoids/human/gasp/gasp_male1.ogg', 'sound/mobs/humanoids/human/gasp/gasp_male2.ogg') /datum/emote/living/gasp/shock key = "gaspshock" @@ -225,25 +235,11 @@ key_third_person = "grimaces" message = "grimaces." -/datum/emote/living/jump - key = "jump" - key_third_person = "jumps" - message = "jumps!" - hands_use_check = TRUE - -/datum/emote/living/jump/run_emote(mob/living/user, params, type_override, intentional) - . = ..() - animate(user, pixel_y = user.pixel_y + 4, time = 0.1 SECONDS) - animate(pixel_y = user.pixel_y - 4, time = 0.1 SECONDS) - -/datum/emote/living/jump/get_sound(mob/living/user) - return 'sound/weapons/thudswoosh.ogg' - /datum/emote/living/kiss key = "kiss" key_third_person = "kisses" cooldown = 3 SECONDS - +/* BUBBER EDIT modularized - modular_zubbers\code\modules\mob\living\emote.dm /datum/emote/living/kiss/run_emote(mob/living/user, params, type_override, intentional) . = ..() var/kiss_type = /obj/item/hand_item/kisser @@ -260,7 +256,7 @@ else qdel(kiss_blower) to_chat(user, span_warning("You're incapable of blowing a kiss in your current state.")) - +*/ /datum/emote/living/laugh key = "laugh" key_third_person = "laughs" @@ -441,7 +437,6 @@ return user.dna.species.get_sniff_sound(user) - /datum/emote/living/snore key = "snore" key_third_person = "snores" @@ -749,4 +744,4 @@ emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE /datum/emote/living/carbon/whistle/get_sound(mob/living/user) - return 'sound/voice/human/whistle1.ogg' + return 'sound/mobs/humanoids/human/whistle/whistle1.ogg' diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index 4bf0407c4670a..0797f77c08210 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -40,6 +40,8 @@ RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_DEAF), PROC_REF(on_hearing_loss)) RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_DEAF), PROC_REF(on_hearing_regain)) + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_STASIS), PROC_REF(on_stasis_trait_gain)) + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_STASIS), PROC_REF(on_stasis_trait_loss)) RegisterSignals(src, list( SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION), @@ -187,24 +189,36 @@ SIGNAL_HANDLER add_traits(list(TRAIT_UI_BLOCKED, TRAIT_PULL_BLOCKED), TRAIT_INCAPACITATED) update_appearance() + update_incapacitated() /// Called when [TRAIT_INCAPACITATED] is removed from the mob. /mob/living/proc/on_incapacitated_trait_loss(datum/source) SIGNAL_HANDLER remove_traits(list(TRAIT_UI_BLOCKED, TRAIT_PULL_BLOCKED), TRAIT_INCAPACITATED) update_appearance() - + update_incapacitated() /// Called when [TRAIT_RESTRAINED] is added to the mob. /mob/living/proc/on_restrained_trait_gain(datum/source) SIGNAL_HANDLER ADD_TRAIT(src, TRAIT_HANDS_BLOCKED, TRAIT_RESTRAINED) + update_incapacitated() /// Called when [TRAIT_RESTRAINED] is removed from the mob. /mob/living/proc/on_restrained_trait_loss(datum/source) SIGNAL_HANDLER REMOVE_TRAIT(src, TRAIT_HANDS_BLOCKED, TRAIT_RESTRAINED) + update_incapacitated() + +/// Called when [TRAIT_STASIS] is added to the mob +/mob/living/proc/on_stasis_trait_gain(datum/source) + SIGNAL_HANDLER + update_incapacitated() +/// Called when [TRAIT_STASIS] is removed from the mob +/mob/living/proc/on_stasis_trait_loss(datum/source) + SIGNAL_HANDLER + update_incapacitated() /** * Called when traits that alter succumbing are added/removed. diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 7c2af9a15724e..59bc1a9f4d8ed 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -11,6 +11,7 @@ */ /mob/living/proc/Life(seconds_per_tick = SSMOBS_DT, times_fired) set waitfor = FALSE + SHOULD_NOT_SLEEP(TRUE) var/signal_result = SEND_SIGNAL(src, COMSIG_LIVING_LIFE, seconds_per_tick, times_fired) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b0cf90334bec5..d7564c4d3ed06 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -75,7 +75,7 @@ return //SKYRAT EDIT ADDITION END // If you are incapped, you probably can't brace yourself - var/can_help_themselves = !incapacitated(IGNORE_RESTRAINTS) + var/can_help_themselves = !INCAPACITATED_IGNORING(src, INCAPABLE_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 @@ -101,7 +101,7 @@ 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))) // SKYRAT EDIT CHANGE - ORIGINAL: if(small_surface_area) + if(small_surface_area || isfeline(src)) // SKYRAT 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!"), @@ -438,7 +438,7 @@ SEND_SIGNAL(src, COMSIG_LIVING_START_PULL, AM, state, force) if(!supress_message) - var/sound_to_play = 'sound/weapons/thudswoosh.ogg' + var/sound_to_play = 'sound/items/weapons/thudswoosh.ogg' if(ishuman(src)) var/mob/living/carbon/human/H = src if(H.dna.species.grab_sound) @@ -554,7 +554,7 @@ //same as above /mob/living/pointed(atom/A as mob|obj|turf in view(client.view, src)) - if(incapacitated()) + if(incapacitated) return FALSE return ..() @@ -563,7 +563,7 @@ if(!..()) return FALSE log_message("points at [pointing_at]", LOG_EMOTE) - visible_message("[span_name("[src]")] points at [pointing_at].", span_notice("You point at [pointing_at].")) + visible_message(span_infoplain("[span_name("[src]")] points at [pointing_at]."), span_notice("You point at [pointing_at].")) /mob/living/verb/succumb(whispered as num|null) set hidden = TRUE @@ -583,31 +583,21 @@ investigate_log("has succumbed to death.", INVESTIGATE_DEATHS) death() -/** - * Checks if a mob is incapacitated - * - * Normally being restrained, agressively grabbed, or in stasis counts as incapacitated - * unless there is a flag being used to check if it's ignored - * - * args: - * * flags (optional) bitflags that determine if special situations are exempt from being considered incapacitated - * - * bitflags: (see code/__DEFINES/status_effects.dm) - * * IGNORE_RESTRAINTS - mob in a restraint (handcuffs) is not considered incapacitated - * * IGNORE_STASIS - mob in stasis (stasis bed, etc.) is not considered incapacitated - * * IGNORE_GRAB - mob that is agressively grabbed is not considered incapacitated -**/ -/mob/living/incapacitated(flags) +// Remember, anything that influences this needs to call update_incapacitated somehow when it changes +// Most often best done in [code/modules/mob/living/init_signals.dm] +/mob/living/build_incapacitated(flags) + // Holds a set of flags that describe how we are currently incapacitated + var/incap_status = NONE if(HAS_TRAIT(src, TRAIT_INCAPACITATED)) - return TRUE + incap_status |= TRADITIONAL_INCAPACITATED + if(HAS_TRAIT(src, TRAIT_RESTRAINED)) + incap_status |= INCAPABLE_RESTRAINTS + if(pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE) + incap_status |= INCAPABLE_GRAB + if(HAS_TRAIT(src, TRAIT_STASIS)) + incap_status |= INCAPABLE_STASIS - if(!(flags & IGNORE_RESTRAINTS) && HAS_TRAIT(src, TRAIT_RESTRAINED)) - return TRUE - if(!(flags & IGNORE_GRAB) && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE) - return TRUE - if(!(flags & IGNORE_STASIS) && HAS_TRAIT(src, TRAIT_STASIS)) - return TRUE - return FALSE + return incap_status /mob/living/canUseStorage() if (usable_hands <= 0) @@ -866,7 +856,7 @@ /mob/living/proc/updatehealth() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return set_health(maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()) update_stat() @@ -900,7 +890,7 @@ if(!livingdoll.filtered) livingdoll.filtered = TRUE var/icon/mob_mask = icon(icon, icon_state) - if(mob_mask.Height() > world.icon_size || mob_mask.Width() > world.icon_size) + if(mob_mask.Height() > ICON_SIZE_Y || mob_mask.Width() > ICON_SIZE_X) var/health_doll_icon_state = health_doll_icon ? health_doll_icon : "megasprite" mob_mask = icon('icons/hud/screen_gen.dmi', health_doll_icon_state) //swap to something generic if they have no special doll livingdoll.add_filter("mob_shape_mask", 1, alpha_mask_filter(icon = mob_mask)) @@ -1182,7 +1172,7 @@ /mob/living/proc/itch(obj/item/bodypart/target_part = null, damage = 0.5, can_scratch = TRUE, silent = FALSE) if ((mob_biotypes & (MOB_ROBOTIC | MOB_SPIRIT))) return FALSE - var/will_scratch = can_scratch && !incapacitated() + var/will_scratch = can_scratch && !incapacitated var/applied_damage = 0 if (will_scratch && damage) applied_damage = apply_damage(damage, damagetype = BRUTE, def_zone = target_part) @@ -1269,7 +1259,6 @@ . = TRUE //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) && (getFireLoss()*0.5 + getBruteLoss()*0.5) >= 40) - var/altered_grab_state = pulledby.grab_state 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++ @@ -1443,11 +1432,11 @@ if(!(interaction_flags_atom & INTERACT_ATOM_IGNORE_INCAPACITATED)) var/ignore_flags = NONE if(interaction_flags_atom & INTERACT_ATOM_IGNORE_RESTRAINED) - ignore_flags |= IGNORE_RESTRAINTS + ignore_flags |= INCAPABLE_RESTRAINTS if(!(interaction_flags_atom & INTERACT_ATOM_CHECK_GRAB)) - ignore_flags |= IGNORE_GRAB + ignore_flags |= INCAPABLE_GRAB - if(incapacitated(ignore_flags)) + if(INCAPACITATED_IGNORING(src, ignore_flags)) to_chat(src, span_warning("You are incapacitated at the moment!")) return FALSE @@ -1537,7 +1526,7 @@ * Returns a mob (what our mob turned into) or null (if we failed). */ /mob/living/proc/wabbajack(what_to_randomize, change_flags = WABBAJACK) - if(stat == DEAD || (GODMODE & status_flags) || HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) + if(stat == DEAD || HAS_TRAIT(src, TRAIT_GODMODE) || HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return if(SEND_SIGNAL(src, COMSIG_LIVING_PRE_WABBAJACKED, what_to_randomize) & STOP_WABBAJACK) @@ -1562,6 +1551,7 @@ if(!dropItemToGround(item)) if(!(item.item_flags & ABSTRACT)) qdel(item) + continue item_contents += item var/mob/living/new_mob @@ -1887,13 +1877,13 @@ GLOBAL_LIST_EMPTY(fire_appearances) // used by secbot and monkeys Crossed /mob/living/proc/knockOver(mob/living/carbon/C) if(C.key) //save us from monkey hordes - C.visible_message("[pick( \ + C.visible_message(span_warning(pick( \ "[C] dives out of [src]'s way!", \ "[C] stumbles over [src]!", \ "[C] jumps out of [src]'s path!", \ "[C] trips over [src] and falls!", \ "[C] topples over [src]!", \ - "[C] leaps out of [src]'s way!")]") + "[C] leaps out of [src]'s way!"))) C.Paralyze(40) /mob/living/can_be_pulled() @@ -1973,7 +1963,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/mob_try_pickup(mob/living/user, instant=FALSE) if(!ishuman(user)) - return FALSE + return if(!user.get_empty_held_indexes()) to_chat(user, span_warning("Your hands are full!")) return FALSE @@ -2239,10 +2229,9 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/can_look_up() if(next_move > world.time) return FALSE - if(incapacitated(IGNORE_RESTRAINTS)) + if(INCAPACITATED_IGNORING(src, INCAPABLE_RESTRAINTS)) return FALSE return TRUE - /** * look_up Changes the perspective of the mob to any openspace turf above the mob * @@ -2352,6 +2341,9 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(isnull(.)) return + if(. <= UNCONSCIOUS || new_stat >= UNCONSCIOUS) + update_body() // to update eyes + switch(.) //Previous stat. if(CONSCIOUS) if(stat >= UNCONSCIOUS) @@ -2376,12 +2368,14 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(. >= UNCONSCIOUS) REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT) remove_traits(list(TRAIT_HANDS_BLOCKED, TRAIT_INCAPACITATED, TRAIT_FLOORED, TRAIT_CRITICAL_CONDITION), STAT_TRAIT) + log_combat(src, src, "regained consciousness") if(SOFT_CRIT) if(pulledby) ADD_TRAIT(src, TRAIT_IMMOBILIZED, PULLED_WHILE_SOFTCRIT_TRAIT) //adding trait sources should come before removing to avoid unnecessary updates if(. >= UNCONSCIOUS) REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT) ADD_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT) + log_combat(src, src, "entered soft crit") if(UNCONSCIOUS) if(. != HARD_CRIT) become_blind(UNCONSCIOUS_TRAIT) @@ -2389,14 +2383,17 @@ GLOBAL_LIST_EMPTY(fire_appearances) ADD_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT) else REMOVE_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT) + log_combat(src, src, "lost consciousness") if(HARD_CRIT) if(. != UNCONSCIOUS) become_blind(UNCONSCIOUS_TRAIT) ADD_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT) + log_combat(src, src, "entered hard crit") if(DEAD) REMOVE_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT) remove_from_alive_mob_list() add_to_dead_mob_list() + log_combat(src, src, "died") if(!can_hear()) stop_sound_channel(CHANNEL_AMBIENCE) refresh_looping_ambience() @@ -2433,6 +2430,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/set_pulledby(new_pulledby) . = ..() + update_incapacitated() if(. == FALSE) //null is a valid value here, we only want to return if FALSE is explicitly passed. return if(pulledby) @@ -2835,7 +2833,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) 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 - var/picked_name = tgui_input_text(admin, "Name the guardian, leave empty to let player name it.", "Guardian Controller") + var/picked_name = tgui_input_text(admin, "Name the guardian, leave empty to let player name it.", "Guardian Controller", max_length = MAX_NAME_LEN) 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 @@ -2910,3 +2908,25 @@ GLOBAL_LIST_EMPTY(fire_appearances) return "[span_notice("You'd estimate [p_their()] fitness level at about...")] [span_boldwarning("What?!? [our_fitness_level]???")]" return span_notice("You'd estimate [p_their()] fitness level at about [our_fitness_level]. [comparative_fitness <= 0.33 ? "Pathetic." : ""]") + +///Performs the aftereffects of blocking a projectile. +/mob/living/proc/block_projectile_effects() + var/static/list/icon/blocking_overlay + if(isnull(blocking_overlay)) + blocking_overlay = list( + mutable_appearance('icons/mob/effects/blocking.dmi', "wow"), + mutable_appearance('icons/mob/effects/blocking.dmi', "nice"), + mutable_appearance('icons/mob/effects/blocking.dmi', "good"), + ) + ADD_TRAIT(src, TRAIT_BLOCKING_PROJECTILES, BLOCKING_TRAIT) + var/icon/selected_overlay = pick(blocking_overlay) + add_overlay(selected_overlay) + playsound(src, 'sound/items/weapons/fwoosh.ogg', 90, FALSE, frequency = 0.7) + update_transform(1.25) + addtimer(CALLBACK(src, PROC_REF(end_block_effects), selected_overlay), 0.6 SECONDS) + +///Remoevs the effects of blocking a projectile and allows the user to block another. +/mob/living/proc/end_block_effects(selected_overlay) + REMOVE_TRAIT(src, TRAIT_BLOCKING_PROJECTILES, BLOCKING_TRAIT) + cut_overlay(selected_overlay) + update_transform(0.8) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 63d2d20ab9000..8243a27ad6396 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -182,7 +182,7 @@ skipcatch = TRUE blocked = TRUE else - playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) //Item sounds are handled in the item itself + playsound(loc, 'sound/items/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]!")) @@ -284,13 +284,14 @@ return FALSE grippedby(user) + update_incapacitated() //proc to upgrade a simple pull into a more aggressive grab. /mob/living/proc/grippedby(mob/living/user, instant = FALSE) if(user.grab_state >= user.max_grab) return user.changeNext_move(CLICK_CD_GRABBING) - var/sound_to_play = 'sound/weapons/thudswoosh.ogg' + var/sound_to_play = 'sound/items/weapons/thudswoosh.ogg' if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.dna.species.grab_sound) @@ -437,7 +438,7 @@ user.do_attack_animation(src, ATTACK_EFFECT_BITE) if (HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || prob(75)) log_combat(user, src, "attacked") - playsound(loc, 'sound/weapons/bite.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/bite.ogg', 50, TRUE, -1) visible_message(span_danger("[user.name] bites [src]!"), \ span_userdanger("[user.name] bites you!"), span_hear("You hear a chomp!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You bite [src]!")) @@ -464,7 +465,7 @@ visible_message(span_danger("[L.name] bites [src]!"), \ span_userdanger("[L.name] bites you!"), span_hear("You hear a chomp!"), COMBAT_MESSAGE_RANGE, L) to_chat(L, span_danger("You bite [src]!")) - playsound(loc, 'sound/weapons/bite.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/bite.ogg', 50, TRUE, -1) return TRUE else visible_message(span_danger("[L.name]'s bite misses [src]!"), \ @@ -553,7 +554,7 @@ return 20 /mob/living/narsie_act() - if(status_flags & GODMODE || QDELETED(src)) + if(HAS_TRAIT(src, TRAIT_GODMODE) || QDELETED(src)) return if(GLOB.cult_narsie && GLOB.cult_narsie.souls_needed[src]) @@ -561,7 +562,7 @@ GLOB.cult_narsie.souls += 1 if((GLOB.cult_narsie.souls == GLOB.cult_narsie.soul_goal) && (GLOB.cult_narsie.resolved == FALSE)) GLOB.cult_narsie.resolved = TRUE - sound_to_playing_players('sound/machines/alarm.ogg') + sound_to_playing_players('sound/announcer/alarm/nuke_alarm.ogg', 70) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), CULT_VICTORY_MASS_CONVERSION), 12 SECONDS) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ending_helper)), 27 SECONDS) if(client) @@ -672,10 +673,10 @@ var/shove_flags = target.get_shove_flags(src, weapon) if(weapon) do_attack_animation(target, used_item = weapon) - playsound(target, 'sound/effects/glassbash.ogg', 50, TRUE, -1) + playsound(target, 'sound/effects/glass/glassbash.ogg', 50, TRUE, -1) else do_attack_animation(target, ATTACK_EFFECT_DISARM) - playsound(target, 'sound/weapons/shove.ogg', 50, TRUE, -1) + playsound(target, 'sound/items/weapons/shove.ogg', 50, TRUE, -1) if (ishuman(target) && isnull(weapon)) var/mob/living/carbon/human/human_target = target human_target.w_uniform?.add_fingerprint(src) diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index 79cb96c90c3ce..99c795ec09da5 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -129,7 +129,7 @@ return ..() /mob/living/can_z_move(direction, turf/start, turf/destination, z_move_flags = ZMOVE_FLIGHT_FLAGS, mob/living/rider) - if(z_move_flags & ZMOVE_INCAPACITATED_CHECKS && incapacitated()) + if(z_move_flags & ZMOVE_INCAPACITATED_CHECKS && incapacitated) if(z_move_flags & ZMOVE_FEEDBACK) to_chat(rider || src, span_warning("[rider ? src : "You"] can't do that right now!")) return FALSE diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index c2b5809242510..80ee7506c9ded 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -33,6 +33,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( // Misc RADIO_KEY_AI_PRIVATE = RADIO_CHANNEL_AI_PRIVATE, // AI Upload channel + RADIO_KEY_ENTERTAINMENT = RADIO_CHANNEL_ENTERTAINMENT, // Entertainment monitors //kinda localization -- rastaf0 @@ -61,7 +62,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list( "в" = MODE_KEY_DEADMIN, // Misc - "щ" = RADIO_CHANNEL_AI_PRIVATE + "щ" = RADIO_CHANNEL_AI_PRIVATE, + "з" = RADIO_CHANNEL_ENTERTAINMENT, )) /** @@ -295,21 +297,43 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( if(raw_message != untranslated_raw_message) understood = FALSE + var/speaker_is_signing = HAS_TRAIT(speaker, TRAIT_SIGN_LANG) + + // if someone is whispering we make an extra type of message that is obfuscated for people out of range // Less than or equal to 0 means normal hearing. More than 0 and less than or equal to EAVESDROP_EXTRA_RANGE means // partial hearing. More than EAVESDROP_EXTRA_RANGE means no hearing. Exception for GOOD_HEARING trait 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 (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 + if(message_range != INFINITY && dist > EAVESDROP_EXTRA_RANGE && !HAS_TRAIT(src, TRAIT_GOOD_HEARING) && !isobserver(src)) + // Too far away and don't have good hearing, you can't hear anything + if(is_blind() || HAS_TRAIT(speaker, TRAIT_INVISIBLE_MAN)) // Can't see them speak either + return FALSE + if(!isturf(speaker.loc)) // If they're inside of something, probably can't see them speak + return FALSE + + // But we can still see them speak + if(speaker_is_signing) + deaf_message = "[span_name("[speaker]")] [speaker.get_default_say_verb()] something, but the motions are too subtle to make out from afar." + else if(can_hear()) // If we can't hear we want to continue to the default deaf message + var/mob/living/living_speaker = speaker + if(istype(living_speaker) && living_speaker.is_mouth_covered()) // Can't see them speak if their mouth is covered + return FALSE + deaf_message = "[span_name("[speaker]")] [speaker.verb_whisper] something, but you are too far away to hear [speaker.p_them()]." + + if(deaf_message) + deaf_type = MSG_VISUAL + message = deaf_message + return show_message(message, MSG_VISUAL, deaf_message, deaf_type, avoid_highlight) + // we need to send this signal before compose_message() is used since other signals need to modify // the raw_message first. After the raw_message is passed through the various signals, it's ready to be formatted // by compose_message() to be displayed in chat boxes for to_chat or runechat SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, args) - if(HAS_TRAIT(speaker, TRAIT_SIGN_LANG)) //Checks if speaker is using sign language + if(speaker_is_signing) //Checks if speaker is using sign language deaf_message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mods, TRUE) if(speaker != src) @@ -369,6 +393,9 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( if(!(listening_movable in in_view) && !HAS_TRAIT(listening_movable, TRAIT_XRAY_HEARING)) listening.Remove(listening_movable) + if(imaginary_group) + listening |= imaginary_group + if(client) //client is so that ghosts don't have to listen to mice for(var/mob/player_mob as anything in GLOB.player_list) if(QDELETED(player_mob)) //Some times nulls and deleteds stay in this list. This is a workaround to prevent ic chat breaking for everyone when they do. diff --git a/code/modules/mob/living/living_update_icons.dm b/code/modules/mob/living/living_update_icons.dm index a9e1a136800b0..4e8b809e047f9 100644 --- a/code/modules/mob/living/living_update_icons.dm +++ b/code/modules/mob/living/living_update_icons.dm @@ -58,7 +58,8 @@ if(!changed) //Nothing has been changed, nothing has to be done. return - SEND_SIGNAL(src, COMSIG_PAUSE_FLOATING_ANIM, 0.3 SECONDS) + ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, UPDATE_TRANSFORM_TRAIT) + addtimer(TRAIT_CALLBACK_REMOVE(src, TRAIT_NO_FLOATING_ANIM, UPDATE_TRANSFORM_TRAIT), 0.3 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //if true, we want to avoid any animation time, it'll tween and not rotate at all otherwise. var/is_opposite_angle = SIMPLIFY_DEGREES(lying_angle+180) == lying_prev animate(src, transform = ntransform, time = is_opposite_angle ? 0 : UPDATE_TRANSFORM_ANIMATION_TIME, pixel_y = final_pixel_y, dir = final_dir, easing = (EASE_IN|EASE_OUT)) diff --git a/code/modules/mob/living/navigation.dm b/code/modules/mob/living/navigation.dm index 3096efb3a7c47..a18342c445616 100644 --- a/code/modules/mob/living/navigation.dm +++ b/code/modules/mob/living/navigation.dm @@ -12,7 +12,7 @@ set name = "Navigate" set category = "IC" - if(incapacitated()) + if(incapacitated) return if(length(client.navigation_images)) addtimer(CALLBACK(src, PROC_REF(cut_navigation)), world.tick_lag) @@ -46,7 +46,7 @@ if(isnull(navigate_target)) return - if(incapacitated()) + if(incapacitated) return COOLDOWN_START(src, navigate_cooldown, 15 SECONDS) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d5d4273f1be8b..8556bfb1450e6 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -181,7 +181,7 @@ RegisterSignal(ai_tracking_tool, COMSIG_TRACKABLE_TRACKING_TARGET, PROC_REF(on_track_target)) RegisterSignal(ai_tracking_tool, COMSIG_TRACKABLE_GLIDE_CHANGED, PROC_REF(tracked_glidesize_changed)) - add_traits(list(TRAIT_PULL_BLOCKED, TRAIT_HANDS_BLOCKED), ROUNDSTART_TRAIT) + add_traits(list(TRAIT_PULL_BLOCKED, TRAIT_AI_ACCESS, TRAIT_HANDS_BLOCKED), INNATE_TRAIT) alert_control = new(src, list(ALARM_ATMOS, ALARM_FIRE, ALARM_POWER, ALARM_CAMERA, ALARM_BURGLAR, ALARM_MOTION), list(z), camera_view = TRUE) RegisterSignal(alert_control.listener, COMSIG_ALARM_LISTENER_TRIGGERED, PROC_REF(alarm_triggered)) @@ -288,7 +288,7 @@ /mob/living/silicon/ai/verb/pick_icon() set category = "AI Commands" set name = "Set AI Core Display" - if(incapacitated()) + if(incapacitated) return icon = initial(icon) icon_state = "ai" @@ -306,7 +306,7 @@ view_core() var/ai_core_icon = show_radial_menu(src, src , iconstates, radius = 42) - if(!ai_core_icon || incapacitated()) + if(!ai_core_icon || incapacitated) return display_icon_override = ai_core_icon @@ -345,9 +345,14 @@ to_chat(usr, span_alert("[can_evac_or_fail_reason]")) return - var/reason = tgui_input_text(src, "What is the nature of your emergency? ([CALL_SHUTTLE_REASON_LENGTH] characters required.)", "Confirm Shuttle Call") + var/reason = tgui_input_text( + src, + "What is the nature of your emergency? ([CALL_SHUTTLE_REASON_LENGTH] characters required.)", + "Confirm Shuttle Call", + max_length = MAX_MESSAGE_LEN, + ) - if(incapacitated()) + if(incapacitated) return if(trim(reason)) @@ -409,7 +414,7 @@ return // stop if(stat == DEAD) return - if(incapacitated()) + if(incapacitated) if(battery < 50) to_chat(src, span_warning("Insufficient backup power!")) return @@ -481,14 +486,14 @@ if(usr != src) return - if(href_list["emergencyAPC"]) //This check comes before incapacitated() because the only time it would be useful is when we have no power. + if(href_list["emergencyAPC"]) //This check comes before incapacitated because the only time it would be useful is when we have no power. if(!apc_override) to_chat(src, span_notice("APC backdoor is no longer available.")) return apc_override.ui_interact(src) return - if(incapacitated()) + if(incapacitated) return if (href_list["switchcamera"]) @@ -639,7 +644,7 @@ ai_tracking_tool.reset_tracking() var/cameralist[0] - if(incapacitated()) + if(incapacitated) return var/mob/living/silicon/ai/U = usr @@ -681,7 +686,7 @@ set desc = "Change the default hologram available to AI to something else." set category = "AI Commands" - if(incapacitated()) + if(incapacitated) return var/input switch(tgui_input_list(usr, "Would you like to select a hologram based on a custom character, an animal, or switch to a unique avatar?", "Customize", list("Custom Character","Unique","Animal"))) @@ -779,12 +784,26 @@ button_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "ai_malf_core" +/datum/action/innate/core_return/Grant(mob/new_owner) + . = ..() + RegisterSignal(new_owner, COMSIG_SILICON_AI_VACATE_APC, PROC_REF(returned_to_core)) + +/datum/action/innate/core_return/proc/returned_to_core(datum/source) + SIGNAL_HANDLER + + Remove(source) + UnregisterSignal(source, COMSIG_SILICON_AI_VACATE_APC) + /datum/action/innate/core_return/Activate() var/obj/machinery/power/apc/apc = owner.loc if(!istype(apc)) to_chat(owner, span_notice("You are already in your Main Core.")) return - apc.malfvacate() + if(SEND_SIGNAL(owner, COMSIG_SILICON_AI_CORE_STATUS) & COMPONENT_CORE_ALL_GOOD) + apc.malfvacate() + else + to_chat(owner, span_danger("Linked core not detected!")) + return qdel(src) /mob/living/silicon/ai/proc/toggle_camera_light() @@ -831,7 +850,7 @@ set desc = "Allows you to change settings of your radio." set category = "AI Commands" - if(incapacitated()) + if(incapacitated) return to_chat(src, "Accessing Subspace Transceiver control...") @@ -847,7 +866,7 @@ set desc = "Modify the default radio setting for your automatic announcements." set category = "AI Commands" - if(incapacitated()) + if(incapacitated) return set_autosay() @@ -1012,16 +1031,16 @@ if(!istype(apc) || QDELETED(apc) || apc.machine_stat & BROKEN) to_chat(src, span_danger("Hack aborted. The designated APC no longer exists on the power network.")) - playsound(get_turf(src), 'sound/machines/buzz-two.ogg', 50, TRUE, ignore_walls = FALSE) + playsound(get_turf(src), 'sound/machines/buzz/buzz-two.ogg', 50, TRUE, ignore_walls = FALSE) return if(apc.aidisabled) to_chat(src, span_danger("Hack aborted. [apc] is no longer responding to our systems.")) - playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 50, TRUE, ignore_walls = FALSE) + playsound(get_turf(src), 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE, ignore_walls = FALSE) return malf_picker.processing_time += 10 var/area/apcarea = apc.area - var/datum/ai_module/destructive/nuke_station/doom_n_boom = locate(/datum/ai_module/destructive/nuke_station) in malf_picker.possible_modules["Destructive Modules"] + var/datum/ai_module/malf/destructive/nuke_station/doom_n_boom = locate(/datum/ai_module/malf/destructive/nuke_station) in malf_picker.possible_modules["Destructive Modules"] if(doom_n_boom && (is_type_in_list (apcarea, doom_n_boom.discount_areas)) && !(is_type_in_list (apcarea, doom_n_boom.hacked_command_areas))) doom_n_boom.hacked_command_areas += apcarea doom_n_boom.cost = max(50, 130 - (length(doom_n_boom.hacked_command_areas) * 20)) @@ -1047,7 +1066,7 @@ set category = "AI Commands" set name = "Deploy to Shell" - if(incapacitated()) + if(incapacitated) return if(control_disabled) to_chat(src, span_warning("Wireless networking module is offline.")) @@ -1173,7 +1192,7 @@ /mob/living/silicon/ai/get_exp_list(minutes) . = ..() - var/datum/job/ai/ai_job_ref = SSjob.GetJobType(/datum/job/ai) + var/datum/job/ai/ai_job_ref = SSjob.get_job_type(/datum/job/ai) .[ai_job_ref.title] = minutes diff --git a/code/modules/mob/living/silicon/ai/ai_actions/remote_power.dm b/code/modules/mob/living/silicon/ai/ai_actions/remote_power.dm new file mode 100644 index 0000000000000..fd45ed3d68795 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_actions/remote_power.dm @@ -0,0 +1,41 @@ +/datum/ai_module/power_apc + name = "Remote Power" + description = "remotely powers an APC from a distance" + one_purchase = TRUE + power_type = /datum/action/innate/ai/ranged/power_apc + unlock_text = span_notice("Remote APC power systems online.") + +/datum/action/innate/ai/ranged/power_apc + name = "remotely power APC" + desc = "Use to remotely power an APC." + button_icon = 'icons/obj/machines/wallmounts.dmi' + button_icon_state = "apc0" + ranged_mousepointer = 'icons/effects/mouse_pointers/supplypod_target.dmi' + enable_text = span_notice("You prepare to power any APC you see.") + disable_text = span_notice("You stop focusing on powering APCs.") + +/datum/action/innate/ai/ranged/power_apc/do_ability(mob/living/caller, atom/clicked_on) + + if (!isAI(caller)) + return FALSE + var/mob/living/silicon/ai/ai_caller = caller + + if(caller.incapacitated) + unset_ranged_ability(caller) + return FALSE + + if(!isapc(clicked_on)) + clicked_on.balloon_alert(ai_caller, "not an APC!") + return FALSE + + if(ai_caller.battery - 50 <= 0) + to_chat(ai_caller, span_warning("You do not have the battery to charge an APC!")) + return FALSE + + var/obj/machinery/power/apc/apc = clicked_on + var/obj/item/stock_parts/power_store/cell = apc.get_cell() + cell.give(STANDARD_BATTERY_CHARGE) + ai_caller.battery -= 50 + + + diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 0c5eb6ec164b2..55a00a6ffc0bc 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -63,7 +63,7 @@ . = ..() if(user.combat_mode) return - if(stat != DEAD && !incapacitated() && (client || deployed_shell?.client)) + if(stat != DEAD && !incapacitated && (client || deployed_shell?.client)) // alive and well AIs control their floor bolts balloon_alert(user, "the AI's bolt motors resist.") return ITEM_INTERACT_SUCCESS diff --git a/code/modules/mob/living/silicon/ai/ai_portrait_picker.dm b/code/modules/mob/living/silicon/ai/ai_portrait_picker.dm index 2d099ea8bb00a..5415b7b1931b7 100644 --- a/code/modules/mob/living/silicon/ai/ai_portrait_picker.dm +++ b/code/modules/mob/living/silicon/ai/ai_portrait_picker.dm @@ -47,7 +47,7 @@ data["search_mode"] = search_mode == PAINTINGS_FILTER_SEARCH_TITLE ? "Title" : "Author" return data -/datum/portrait_picker/ui_act(action, params) +/datum/portrait_picker/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index 4eb56b4238433..0f11fd7814ca9 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -6,7 +6,7 @@ /mob/living/silicon/ai/compose_job(atom/movable/speaker, message_langs, raw_message, radio_freq) //Also includes the for AI hrefs, for convenience. - return "[radio_freq ? " (" + speaker.GetJob() + ")" : ""]" + "[speaker.GetSource() ? "" : ""]" + return "[radio_freq ? " (" + speaker.get_job() + ")" : ""]" + "[speaker.GetSource() ? "" : ""]" /mob/living/silicon/ai/try_speak(message, ignore_spam = FALSE, forced = null, filterproof = FALSE) // AIs cannot speak if silent AI is on. @@ -18,12 +18,23 @@ return ..() /mob/living/silicon/ai/radio(message, list/message_mods = list(), list/spans, language) - if(incapacitated()) + if(incapacitated) return FALSE if(!radio_enabled) //AI cannot speak if radio is disabled (via intellicard) or depowered. to_chat(src, span_danger("Your radio transmitter is offline!")) return FALSE - ..() + . = ..() + if(.) + return . + if(message_mods[MODE_HEADSET]) + if(radio) + radio.talk_into(src, message, , spans, language, message_mods) + return NOPASS + else if(message_mods[RADIO_EXTENSION] in GLOB.radiochannels) + if(radio) + radio.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) + return NOPASS + return FALSE //For holopads only. Usable by AI. /mob/living/silicon/ai/proc/holopad_talk(message, language) @@ -56,7 +67,7 @@ set desc = "Display a list of vocal words to announce to the crew." set category = "AI Commands" - if(incapacitated()) + if(incapacitated) return var/dat = {" @@ -88,14 +99,20 @@ to_chat(src, span_notice("Please wait [DisplayTimeText(announcing_vox - world.time)].")) return - var/message = tgui_input_text(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", src.last_announcement) + var/message = tgui_input_text( + src, + "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", + "Announcement", + src.last_announcement, + max_length = MAX_MESSAGE_LEN, + ) if(!message || announcing_vox > world.time) return last_announcement = message - if(incapacitated()) + if(incapacitated) return if(control_disabled) diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index e4a98f5f36680..e51382acc7e9e 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -32,6 +32,3 @@ . += "
        " . += ..() - -/mob/living/silicon/ai/get_examine_string(mob/user, thats = FALSE) - return null diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 98a2e629776b1..2f29fdd7bc6d1 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -179,7 +179,7 @@ // I'd like to make this scale with the steps we take, but it like, just can't // So we're doin this instead - eyeobj.glide_size = world.icon_size + eyeobj.glide_size = ICON_SIZE_ALL last_moved = world.timeofday if(acceleration) @@ -235,7 +235,7 @@ set category = "AI Commands" set name = "Toggle Camera Acceleration" - if(incapacitated()) + if(incapacitated) return acceleration = !acceleration to_chat(usr, "Camera acceleration has been toggled [acceleration ? "on" : "off"].") diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index b11f125d38ce4..4adfe057c59fb 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -13,13 +13,13 @@ view_core() // Handle power damage (oxy) + if (battery <= 0) + to_chat(src, span_warning("Your backup battery's output drops below usable levels. It takes only a moment longer for your systems to fail, corrupted and unusable.")) + adjustOxyLoss(200) + if(aiRestorePowerRoutine) // Lost power - if (!battery) - to_chat(src, span_warning("Your backup battery's output drops below usable levels. It takes only a moment longer for your systems to fail, corrupted and unusable.")) - adjustOxyLoss(200) - else - battery-- + battery-- else // Gain Power if (battery < 200) @@ -47,7 +47,7 @@ return !T || !A || ((!A.power_equip || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/vehicle/sealed/mecha))) /mob/living/silicon/ai/updatehealth() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return var/old_health = health @@ -63,7 +63,7 @@ SEND_SIGNAL(src, COMSIG_LIVING_HEALTH_UPDATE) /mob/living/silicon/ai/update_stat() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return if(stat != DEAD) if(health <= HEALTH_THRESHOLD_DEAD) diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 97ea9ebedc9e4..4ef437a53036a 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -32,7 +32,7 @@ if((width > 0) && (height > 0)) var/matrix/M = matrix() M.Scale(width + 0.5, height + 0.5) - M.Translate((width-1)/2 * world.icon_size, (height-1)/2 * world.icon_size) + M.Translate((width-1)/2 * ICON_SIZE_X, (height-1)/2 * ICON_SIZE_Y) highlighted_background.transform = M standard_background.transform = M add_overlay(highlighted ? highlighted_background : standard_background) diff --git a/code/modules/mob/living/silicon/ai/robot_control.dm b/code/modules/mob/living/silicon/ai/robot_control.dm index d963fc77be62f..a04d1c3af75c4 100644 --- a/code/modules/mob/living/silicon/ai/robot_control.dm +++ b/code/modules/mob/living/silicon/ai/robot_control.dm @@ -7,7 +7,7 @@ owner = new_owner /datum/robot_control/proc/is_interactable(mob/user) - if(user != owner || owner.incapacitated()) + if(user != owner || owner.incapacitated) return FALSE if(owner.control_disabled) to_chat(user, span_warning("Wireless control is disabled.")) diff --git a/code/modules/mob/living/silicon/ai/vox_sounds.dm b/code/modules/mob/living/silicon/ai/vox_sounds.dm index d69bb2e1cc3b8..79c0d31029022 100644 --- a/code/modules/mob/living/silicon/ai/vox_sounds.dm +++ b/code/modules/mob/living/silicon/ai/vox_sounds.dm @@ -8,1296 +8,1296 @@ // For vim // :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox_fem\/\1',/g GLOBAL_LIST_INIT(vox_sounds, list( - "," = 'sound/vox_fem/,.ogg', - "." = 'sound/vox_fem/..ogg', - "a" = 'sound/vox_fem/a.ogg', - "abduction" = 'sound/vox_fem/abduction.ogg', - "abortions" = 'sound/vox_fem/abortions.ogg', - "above" = 'sound/vox_fem/above.ogg', - "absorb" = 'sound/vox_fem/absorb.ogg', - "absorbed" = 'sound/vox_fem/absorbed.ogg', - "absorbing" = 'sound/vox_fem/absorbing.ogg', - "abstain" = 'sound/vox_fem/abstain.ogg', - "accelerating" = 'sound/vox_fem/accelerating.ogg', - "accelerator" = 'sound/vox_fem/accelerator.ogg', - "accepted" = 'sound/vox_fem/accepted.ogg', - "access" = 'sound/vox_fem/access.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', - "activate" = 'sound/vox_fem/activate.ogg', - "activated" = 'sound/vox_fem/activated.ogg', - "activating" = 'sound/vox_fem/activating.ogg', - "activation" = 'sound/vox_fem/activation.ogg', - "active" = 'sound/vox_fem/active.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', - "affect" = 'sound/vox_fem/affect.ogg', - "affected" = 'sound/vox_fem/affected.ogg', - "affecting" = 'sound/vox_fem/affecting.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', - "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', - "alcohol" = 'sound/vox_fem/alcohol.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', - "align" = 'sound/vox_fem/align.ogg', - "aligned" = 'sound/vox_fem/aligned.ogg', - "all" = 'sound/vox_fem/all.ogg', - "allow" = 'sound/vox_fem/allow.ogg', - "alongside" = 'sound/vox_fem/alongside.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', - "amount" = 'sound/vox_fem/amount.ogg', - "an" = 'sound/vox_fem/an.ogg', - "and" = 'sound/vox_fem/and.ogg', - "animal" = 'sound/vox_fem/animal.ogg', - "annihilate" = 'sound/vox_fem/annihilate.ogg', - "annihilated" = 'sound/vox_fem/annihilated.ogg', - "annihilating" = 'sound/vox_fem/annihilating.ogg', - "annihilation" = 'sound/vox_fem/annihilation.ogg', - "announcement" = 'sound/vox_fem/announcement.ogg', - "anomalous" = 'sound/vox_fem/anomalous.ogg', - "answer" = 'sound/vox_fem/answer.ogg', - "antenna" = 'sound/vox_fem/antenna.ogg', - "anti-noblium" = 'sound/vox_fem/anti-noblium.ogg', - "any" = 'sound/vox_fem/any.ogg', - "apc" = 'sound/vox_fem/apc.ogg', - "apprehend" = 'sound/vox_fem/apprehend.ogg', - "approach" = 'sound/vox_fem/approach.ogg', - "arc" = 'sound/vox_fem/arc.ogg', - "arcs" = 'sound/vox_fem/arcs.ogg', - "are" = 'sound/vox_fem/are.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', - "around" = 'sound/vox_fem/around.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', - "ask" = 'sound/vox_fem/ask.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', - "at" = 'sound/vox_fem/at.ogg', - "ate" = 'sound/vox_fem/ate.ogg', - "atmosphere" = 'sound/vox_fem/atmosphere.ogg', - "atmospheric" = 'sound/vox_fem/atmospheric.ogg', - "atmospherics" = 'sound/vox_fem/atmospherics.ogg', - "atomic" = 'sound/vox_fem/atomic.ogg', - "attention" = 'sound/vox_fem/attention.ogg', - "authentication" = 'sound/vox_fem/authentication.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', - "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', - "bar" = 'sound/vox_fem/bar.ogg', - "barracks" = 'sound/vox_fem/barracks.ogg', - "bartender" = 'sound/vox_fem/bartender.ogg', - "base" = 'sound/vox_fem/base.ogg', - "bay" = 'sound/vox_fem/bay.ogg', - "be" = 'sound/vox_fem/be.ogg', - "beaker" = 'sound/vox_fem/beaker.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', - "began" = 'sound/vox_fem/began.ogg', - "begin" = 'sound/vox_fem/begin.ogg', - "begins" = 'sound/vox_fem/begins.ogg', - "below" = 'sound/vox_fem/below.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', - "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', - "blob" = 'sound/vox_fem/blob.ogg', - "blocked" = 'sound/vox_fem/blocked.ogg', - "blood" = 'sound/vox_fem/blood.ogg', - "bloop" = 'sound/vox_fem/bloop.ogg', - "blue" = 'sound/vox_fem/blue.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', - "bottle" = 'sound/vox_fem/bottle.ogg', - "bottom" = 'sound/vox_fem/bottom.ogg', - "bravo" = 'sound/vox_fem/bravo.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', - "broke" = 'sound/vox_fem/broke.ogg', - "broken" = 'sound/vox_fem/broken.ogg', - "bump" = 'sound/vox_fem/bump.ogg', - "bumped" = 'sound/vox_fem/bumped.ogg', - "bumps" = 'sound/vox_fem/bumps.ogg', - "bust" = 'sound/vox_fem/bust.ogg', - "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', - "call" = 'sound/vox_fem/call.ogg', - "called" = 'sound/vox_fem/called.ogg', - "can" = 'sound/vox_fem/can.ogg', - "canal" = 'sound/vox_fem/canal.ogg', - "canister" = 'sound/vox_fem/canister.ogg', - "cap" = 'sound/vox_fem/cap.ogg', - "captain" = 'sound/vox_fem/captain.ogg', - "capture" = 'sound/vox_fem/capture.ogg', - "carbon" = 'sound/vox_fem/carbon.ogg', - "cargo" = 'sound/vox_fem/cargo.ogg', - "cascade" = 'sound/vox_fem/cascade.ogg', - "cat" = 'sound/vox_fem/cat.ogg', - "cause" = 'sound/vox_fem/cause.ogg', - "caused" = 'sound/vox_fem/caused.ogg', - "causes" = 'sound/vox_fem/causes.ogg', - "causing" = 'sound/vox_fem/causing.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', - "centcom" = 'sound/vox_fem/centcom.ogg', - "center" = 'sound/vox_fem/center.ogg', - "centi" = 'sound/vox_fem/centi.ogg', - "central" = 'sound/vox_fem/central.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', - "chapel" = 'sound/vox_fem/chapel.ogg', - "chaplain" = 'sound/vox_fem/chaplain.ogg', - "charge" = 'sound/vox_fem/charge.ogg', - "charlie" = 'sound/vox_fem/charlie.ogg', - "check" = 'sound/vox_fem/check.ogg', - "checkpoint" = 'sound/vox_fem/checkpoint.ogg', - "chemical" = 'sound/vox_fem/chemical.ogg', - "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', - "clear" = 'sound/vox_fem/clear.ogg', - "clearance" = 'sound/vox_fem/clearance.ogg', - "clockwork" = 'sound/vox_fem/clockwork.ogg', - "clog" = 'sound/vox_fem/clog.ogg', - "close" = 'sound/vox_fem/close.ogg', - "closed" = 'sound/vox_fem/closed.ogg', - "closing" = 'sound/vox_fem/closing.ogg', - "clothing" = 'sound/vox_fem/clothing.ogg', - "clown" = 'sound/vox_fem/clown.ogg', - "clowning" = 'sound/vox_fem/clowning.ogg', - "cmo" = 'sound/vox_fem/cmo.ogg', - "code" = 'sound/vox_fem/code.ogg', - "coded" = 'sound/vox_fem/coded.ogg', - "coil" = 'sound/vox_fem/coil.ogg', - "coils" = 'sound/vox_fem/coils.ogg', - "cold" = 'sound/vox_fem/cold.ogg', - "collider" = 'sound/vox_fem/collider.ogg', - "combat" = 'sound/vox_fem/combat.ogg', - "combatant" = 'sound/vox_fem/combatant.ogg', - "come" = 'sound/vox_fem/come.ogg', - "command" = 'sound/vox_fem/command.ogg', - "communication" = 'sound/vox_fem/communication.ogg', - "complete" = 'sound/vox_fem/complete.ogg', - "completed" = 'sound/vox_fem/completed.ogg', - "completion" = 'sound/vox_fem/completion.ogg', - "complex" = 'sound/vox_fem/complex.ogg', - "comply" = 'sound/vox_fem/comply.ogg', - "computer" = 'sound/vox_fem/computer.ogg', - "condition" = 'sound/vox_fem/condition.ogg', - "conditions" = 'sound/vox_fem/conditions.ogg', - "condom" = 'sound/vox_fem/condom.ogg', - "configure" = 'sound/vox_fem/configure.ogg', - "configured" = 'sound/vox_fem/configured.ogg', - "configuring" = 'sound/vox_fem/configuring.ogg', - "confirmed" = 'sound/vox_fem/confirmed.ogg', - "connor" = 'sound/vox_fem/connor.ogg', - "console" = 'sound/vox_fem/console.ogg', - "console2" = 'sound/vox_fem/console2.ogg', - "construct" = 'sound/vox_fem/construct.ogg', - "container" = 'sound/vox_fem/container.ogg', - "containment" = 'sound/vox_fem/containment.ogg', - "contamination" = 'sound/vox_fem/contamination.ogg', - "contraband" = 'sound/vox_fem/contraband.ogg', - "control" = 'sound/vox_fem/control.ogg', - "cook" = 'sound/vox_fem/cook.ogg', - "cool" = 'sound/vox_fem/cool.ogg', - "coolant" = 'sound/vox_fem/coolant.ogg', - "cooling" = 'sound/vox_fem/cooling.ogg', - "coomer" = 'sound/vox_fem/coomer.ogg', - "core" = 'sound/vox_fem/core.ogg', - "corgi" = 'sound/vox_fem/corgi.ogg', - "corporation" = 'sound/vox_fem/corporation.ogg', - "correct" = 'sound/vox_fem/correct.ogg', - "corridor" = 'sound/vox_fem/corridor.ogg', - "corridors" = 'sound/vox_fem/corridors.ogg', - "could" = 'sound/vox_fem/could.ogg', - "couldnt" = 'sound/vox_fem/couldnt.ogg', - "countdown" = 'sound/vox_fem/countdown.ogg', - "coward" = 'sound/vox_fem/coward.ogg', - "cowards" = 'sound/vox_fem/cowards.ogg', - "crate" = 'sound/vox_fem/crate.ogg', - "create" = 'sound/vox_fem/create.ogg', - "created" = 'sound/vox_fem/created.ogg', - "creating" = 'sound/vox_fem/creating.ogg', - "creature" = 'sound/vox_fem/creature.ogg', - "crew" = 'sound/vox_fem/crew.ogg', - "critical" = 'sound/vox_fem/critical.ogg', - "cross" = 'sound/vox_fem/cross.ogg', - "cryogenic" = 'sound/vox_fem/cryogenic.ogg', - "crystal" = 'sound/vox_fem/crystal.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', - "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', - "deactivated" = 'sound/vox_fem/deactivated.ogg', - "dead" = 'sound/vox_fem/dead.ogg', - "death" = 'sound/vox_fem/death.ogg', - "decompression" = 'sound/vox_fem/decompression.ogg', - "decontamination" = 'sound/vox_fem/decontamination.ogg', - "deeoo" = 'sound/vox_fem/deeoo.ogg', - "defense" = 'sound/vox_fem/defense.ogg', - "degrees" = 'sound/vox_fem/degrees.ogg', - "delaminating" = 'sound/vox_fem/delaminating.ogg', - "delamination" = 'sound/vox_fem/delamination.ogg', - "delta" = 'sound/vox_fem/delta.ogg', - "demon" = 'sound/vox_fem/demon.ogg', - "denied" = 'sound/vox_fem/denied.ogg', - "deny" = 'sound/vox_fem/deny.ogg', - "departures" = 'sound/vox_fem/departures.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', - "destroy" = 'sound/vox_fem/destroy.ogg', - "destroyed" = 'sound/vox_fem/destroyed.ogg', - "destruction" = 'sound/vox_fem/destruction.ogg', - "detain" = 'sound/vox_fem/detain.ogg', - "detect" = 'sound/vox_fem/detect.ogg', - "detected" = 'sound/vox_fem/detected.ogg', - "detecting" = 'sound/vox_fem/detecting.ogg', - "detective" = 'sound/vox_fem/detective.ogg', - "detonation" = 'sound/vox_fem/detonation.ogg', - "device" = 'sound/vox_fem/device.ogg', - "devil" = 'sound/vox_fem/devil.ogg', - "did" = 'sound/vox_fem/did.ogg', - "die" = 'sound/vox_fem/die.ogg', - "died" = 'sound/vox_fem/died.ogg', - "different" = 'sound/vox_fem/different.ogg', - "dimensional" = 'sound/vox_fem/dimensional.ogg', - "dioxide" = 'sound/vox_fem/dioxide.ogg', - "direct" = 'sound/vox_fem/direct.ogg', - "director" = 'sound/vox_fem/director.ogg', - "dirt" = 'sound/vox_fem/dirt.ogg', - "disabled" = 'sound/vox_fem/disabled.ogg', - "disease" = 'sound/vox_fem/disease.ogg', - "disengaged" = 'sound/vox_fem/disengaged.ogg', - "dish" = 'sound/vox_fem/dish.ogg', - "disk" = 'sound/vox_fem/disk.ogg', - "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', - "dog" = 'sound/vox_fem/dog.ogg', - "dont" = 'sound/vox_fem/dont.ogg', - "doomsday" = 'sound/vox_fem/doomsday.ogg', - "doop" = 'sound/vox_fem/doop.ogg', - "door" = 'sound/vox_fem/door.ogg', - "dormitory" = 'sound/vox_fem/dormitory.ogg', - "dot" = 'sound/vox_fem/dot.ogg', - "double" = 'sound/vox_fem/double.ogg', - "down" = 'sound/vox_fem/down.ogg', - "dress" = 'sound/vox_fem/dress.ogg', - "dressed" = 'sound/vox_fem/dressed.ogg', - "dressing" = 'sound/vox_fem/dressing.ogg', - "drone" = 'sound/vox_fem/drone.ogg', - "dual" = 'sound/vox_fem/dual.ogg', - "duct" = 'sound/vox_fem/duct.ogg', - "e" = 'sound/vox_fem/e.ogg', - "easily" = 'sound/vox_fem/easily.ogg', - "east" = 'sound/vox_fem/east.ogg', - "eat" = 'sound/vox_fem/eat.ogg', - "eaten" = 'sound/vox_fem/eaten.ogg', - "echo" = 'sound/vox_fem/echo.ogg', - "ed" = 'sound/vox_fem/ed.ogg', - "education" = 'sound/vox_fem/education.ogg', - "effect" = 'sound/vox_fem/effect.ogg', - "effects" = 'sound/vox_fem/effects.ogg', - "egress" = 'sound/vox_fem/egress.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', - "electrical" = 'sound/vox_fem/electrical.ogg', - "electromagnetic" = 'sound/vox_fem/electromagnetic.ogg', - "elevator" = 'sound/vox_fem/elevator.ogg', - "eleven" = 'sound/vox_fem/eleven.ogg', - "eliminate" = 'sound/vox_fem/eliminate.ogg', - "emergency" = 'sound/vox_fem/emergency.ogg', - "emitted" = 'sound/vox_fem/emitted.ogg', - "emitter" = 'sound/vox_fem/emitter.ogg', - "emitting" = 'sound/vox_fem/emitting.ogg', - "enabled" = 'sound/vox_fem/enabled.ogg', - "end" = 'sound/vox_fem/end.ogg', - "ends" = 'sound/vox_fem/ends.ogg', - "energy" = 'sound/vox_fem/energy.ogg', - "engage" = 'sound/vox_fem/engage.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', - "enough" = 'sound/vox_fem/enough.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', - "epic" = 'sound/vox_fem/epic.ogg', - "equipment" = 'sound/vox_fem/equipment.ogg', - "error" = 'sound/vox_fem/error.ogg', - "escape" = 'sound/vox_fem/escape.ogg', - "ethereal" = 'sound/vox_fem/ethereal.ogg', - "eva" = 'sound/vox_fem/eva.ogg', - "evacuate" = 'sound/vox_fem/evacuate.ogg', - "even" = 'sound/vox_fem/even.ogg', - "ever" = 'sound/vox_fem/ever.ogg', - "every" = 'sound/vox_fem/every.ogg', - "everybody" = 'sound/vox_fem/everybody.ogg', - "everyone" = 'sound/vox_fem/everyone.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', - "experiment" = 'sound/vox_fem/experiment.ogg', - "experimental" = 'sound/vox_fem/experimental.ogg', - "explode" = 'sound/vox_fem/explode.ogg', - "exploded" = 'sound/vox_fem/exploded.ogg', - "exploding" = 'sound/vox_fem/exploding.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', - "external" = 'sound/vox_fem/external.ogg', - "extinguish" = 'sound/vox_fem/extinguish.ogg', - "extinguisher" = 'sound/vox_fem/extinguisher.ogg', - "extra" = 'sound/vox_fem/extra.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', - "failed" = 'sound/vox_fem/failed.ogg', - "failure" = 'sound/vox_fem/failure.ogg', - "false" = 'sound/vox_fem/false.ogg', - "farthest" = 'sound/vox_fem/farthest.ogg', - "fast" = 'sound/vox_fem/fast.ogg', - "fauna" = 'sound/vox_fem/fauna.ogg', - "feature" = 'sound/vox_fem/feature.ogg', - "featured" = 'sound/vox_fem/featured.ogg', - "features" = 'sound/vox_fem/features.ogg', - "featuring" = 'sound/vox_fem/featuring.ogg', - "feet" = 'sound/vox_fem/feet.ogg', - "felinid" = 'sound/vox_fem/felinid.ogg', - "few" = 'sound/vox_fem/few.ogg', - "field" = 'sound/vox_fem/field.ogg', - "fifteen" = 'sound/vox_fem/fifteen.ogg', - "fifth" = 'sound/vox_fem/fifth.ogg', - "fifty" = 'sound/vox_fem/fifty.ogg', - "filter" = 'sound/vox_fem/filter.ogg', - "filters" = 'sound/vox_fem/filters.ogg', - "final" = 'sound/vox_fem/final.ogg', - "fine" = 'sound/vox_fem/fine.ogg', - "fire" = 'sound/vox_fem/fire.ogg', - "first" = 'sound/vox_fem/first.ogg', - "five" = 'sound/vox_fem/five.ogg', - "fix" = 'sound/vox_fem/fix.ogg', - "flooding" = 'sound/vox_fem/flooding.ogg', - "floor" = 'sound/vox_fem/floor.ogg', - "flyman" = 'sound/vox_fem/flyman.ogg', - "fool" = 'sound/vox_fem/fool.ogg', - "foolish" = 'sound/vox_fem/foolish.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', - "form" = 'sound/vox_fem/form.ogg', - "formed" = 'sound/vox_fem/formed.ogg', - "forms" = 'sound/vox_fem/forms.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', - "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', - "freon" = 'sound/vox_fem/freon.ogg', - "from" = 'sound/vox_fem/from.ogg', - "front" = 'sound/vox_fem/front.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', - "gases" = 'sound/vox_fem/gases.ogg', - "gave" = 'sound/vox_fem/gave.ogg', - "gear" = 'sound/vox_fem/gear.ogg', - "geared" = 'sound/vox_fem/geared.ogg', - "gearing" = 'sound/vox_fem/gearing.ogg', - "generate" = 'sound/vox_fem/generate.ogg', - "generated" = 'sound/vox_fem/generated.ogg', - "generating" = 'sound/vox_fem/generating.ogg', - "generator" = 'sound/vox_fem/generator.ogg', - "geneticist" = 'sound/vox_fem/geneticist.ogg', - "get" = 'sound/vox_fem/get.ogg', - "give" = 'sound/vox_fem/give.ogg', - "given" = 'sound/vox_fem/given.ogg', - "glory" = 'sound/vox_fem/glory.ogg', - "go" = 'sound/vox_fem/go.ogg', - "god" = 'sound/vox_fem/god.ogg', - "going" = 'sound/vox_fem/going.ogg', - "golem" = 'sound/vox_fem/golem.ogg', - "good" = 'sound/vox_fem/good.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', - "granted" = 'sound/vox_fem/granted.ogg', - "gravity" = 'sound/vox_fem/gravity.ogg', - "gray" = 'sound/vox_fem/gray.ogg', - "great" = 'sound/vox_fem/great.ogg', - "green" = 'sound/vox_fem/green.ogg', - "grenade" = 'sound/vox_fem/grenade.ogg', - "guard" = 'sound/vox_fem/guard.ogg', - "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', - "halon" = 'sound/vox_fem/halon.ogg', - "handling" = 'sound/vox_fem/handling.ogg', - "hangar" = 'sound/vox_fem/hangar.ogg', - "hard" = 'sound/vox_fem/hard.ogg', - "hardly" = 'sound/vox_fem/hardly.ogg', - "harm" = 'sound/vox_fem/harm.ogg', - "harmful" = 'sound/vox_fem/harmful.ogg', - "harness" = 'sound/vox_fem/harness.ogg', - "harnessed" = 'sound/vox_fem/harnessed.ogg', - "harnessing" = 'sound/vox_fem/harnessing.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', - "heal" = 'sound/vox_fem/heal.ogg', - "healed" = 'sound/vox_fem/healed.ogg', - "healing" = 'sound/vox_fem/healing.ogg', - "healium" = 'sound/vox_fem/healium.ogg', - "health" = 'sound/vox_fem/health.ogg', - "heat" = 'sound/vox_fem/heat.ogg', - "heated" = 'sound/vox_fem/heated.ogg', - "heating" = 'sound/vox_fem/heating.ogg', - "helicopter" = 'sound/vox_fem/helicopter.ogg', - "helium" = 'sound/vox_fem/helium.ogg', - "hello" = 'sound/vox_fem/hello.ogg', - "help" = 'sound/vox_fem/help.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', - "high" = 'sound/vox_fem/high.ogg', - "highest" = 'sound/vox_fem/highest.ogg', - "him" = 'sound/vox_fem/him.ogg', - "hit" = 'sound/vox_fem/hit.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', - "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', - "human" = 'sound/vox_fem/human.ogg', - "humanoid" = 'sound/vox_fem/humanoid.ogg', - "humans" = 'sound/vox_fem/humans.ogg', - "hundred" = 'sound/vox_fem/hundred.ogg', - "hunger" = 'sound/vox_fem/hunger.ogg', - "hurt" = 'sound/vox_fem/hurt.ogg', - "hydro" = 'sound/vox_fem/hydro.ogg', - "hydrogen" = 'sound/vox_fem/hydrogen.ogg', - "hydroponics" = 'sound/vox_fem/hydroponics.ogg', - "hyper-noblium" = 'sound/vox_fem/hyper-noblium.ogg', - "i" = 'sound/vox_fem/i.ogg', - "ian" = 'sound/vox_fem/ian.ogg', - "idiot" = 'sound/vox_fem/idiot.ogg', - "if" = 'sound/vox_fem/if.ogg', - "if2" = 'sound/vox_fem/if2.ogg', - "illegal" = 'sound/vox_fem/illegal.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', - "inert" = 'sound/vox_fem/inert.ogg', - "ing" = 'sound/vox_fem/ing.ogg', - "inoperative" = 'sound/vox_fem/inoperative.ogg', - "inside" = 'sound/vox_fem/inside.ogg', - "inspection" = 'sound/vox_fem/inspection.ogg', - "inspector" = 'sound/vox_fem/inspector.ogg', - "interchange" = 'sound/vox_fem/interchange.ogg', - "internal" = 'sound/vox_fem/internal.ogg', - "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', - "irradiate" = 'sound/vox_fem/irradiate.ogg', - "is" = 'sound/vox_fem/is.ogg', - "it" = 'sound/vox_fem/it.ogg', - "its" = 'sound/vox_fem/its.ogg', - "j" = 'sound/vox_fem/j.ogg', - "janitor" = 'sound/vox_fem/janitor.ogg', - "jesus" = 'sound/vox_fem/jesus.ogg', - "job" = 'sound/vox_fem/job.ogg', - "jobs" = 'sound/vox_fem/jobs.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', - "kelvin" = 'sound/vox_fem/kelvin.ogg', - "key" = 'sound/vox_fem/key.ogg', - "kidnapped" = 'sound/vox_fem/kidnapped.ogg', - "kidnapping" = 'sound/vox_fem/kidnapping.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', - "kit" = 'sound/vox_fem/kit.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', - "lavaland" = 'sound/vox_fem/lavaland.ogg', - "law" = 'sound/vox_fem/law.ogg', - "laws" = 'sound/vox_fem/laws.ogg', - "lawyer" = 'sound/vox_fem/lawyer.ogg', - "leak" = 'sound/vox_fem/leak.ogg', - "leave" = 'sound/vox_fem/leave.ogg', - "left" = 'sound/vox_fem/left.ogg', - "legal" = 'sound/vox_fem/legal.ogg', - "level" = 'sound/vox_fem/level.ogg', - "lever" = 'sound/vox_fem/lever.ogg', - "library" = 'sound/vox_fem/library.ogg', - "lie" = 'sound/vox_fem/lie.ogg', - "lieutenant" = 'sound/vox_fem/lieutenant.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', - "limit" = 'sound/vox_fem/limit.ogg', - "limited" = 'sound/vox_fem/limited.ogg', - "liquid" = 'sound/vox_fem/liquid.ogg', - "list" = 'sound/vox_fem/list.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', - "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', - "lockout" = 'sound/vox_fem/lockout.ogg', - "long" = 'sound/vox_fem/long.ogg', - "look" = 'sound/vox_fem/look.ogg', - "loop" = 'sound/vox_fem/loop.ogg', - "loose" = 'sound/vox_fem/loose.ogg', - "lot" = 'sound/vox_fem/lot.ogg', - "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', - "made" = 'sound/vox_fem/made.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', - "making" = 'sound/vox_fem/making.ogg', - "malfunction" = 'sound/vox_fem/malfunction.ogg', - "man" = 'sound/vox_fem/man.ogg', - "many" = 'sound/vox_fem/many.ogg', - "mass" = 'sound/vox_fem/mass.ogg', - "materials" = 'sound/vox_fem/materials.ogg', - "maximum" = 'sound/vox_fem/maximum.ogg', - "may" = 'sound/vox_fem/may.ogg', - "me" = 'sound/vox_fem/me.ogg', - "mean" = 'sound/vox_fem/mean.ogg', - "means" = 'sound/vox_fem/means.ogg', - "meat" = 'sound/vox_fem/meat.ogg', - "medbay" = 'sound/vox_fem/medbay.ogg', - "medical" = 'sound/vox_fem/medical.ogg', - "medium" = 'sound/vox_fem/medium.ogg', - "megafauna" = 'sound/vox_fem/megafauna.ogg', - "men" = 'sound/vox_fem/men.ogg', - "mercy" = 'sound/vox_fem/mercy.ogg', - "mesa" = 'sound/vox_fem/mesa.ogg', - "meson" = 'sound/vox_fem/meson.ogg', - "message" = 'sound/vox_fem/message.ogg', - "meter" = 'sound/vox_fem/meter.ogg', - "method" = 'sound/vox_fem/method.ogg', - "miasma" = 'sound/vox_fem/miasma.ogg', - "micro" = 'sound/vox_fem/micro.ogg', - "middle" = 'sound/vox_fem/middle.ogg', - "mike" = 'sound/vox_fem/mike.ogg', - "miles" = 'sound/vox_fem/miles.ogg', - "military" = 'sound/vox_fem/military.ogg', - "milli" = 'sound/vox_fem/milli.ogg', - "million" = 'sound/vox_fem/million.ogg', - "mime" = 'sound/vox_fem/mime.ogg', - "minefield" = 'sound/vox_fem/minefield.ogg', - "miner" = 'sound/vox_fem/miner.ogg', - "minimum" = 'sound/vox_fem/minimum.ogg', - "minor" = 'sound/vox_fem/minor.ogg', - "minute" = 'sound/vox_fem/minute.ogg', - "minutes" = 'sound/vox_fem/minutes.ogg', - "mister" = 'sound/vox_fem/mister.ogg', - "mixture" = 'sound/vox_fem/mixture.ogg', - "mode" = 'sound/vox_fem/mode.ogg', - "modification" = 'sound/vox_fem/modification.ogg', - "money" = 'sound/vox_fem/money.ogg', - "monkey" = 'sound/vox_fem/monkey.ogg', - "most" = 'sound/vox_fem/most.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', - "moved" = 'sound/vox_fem/moved.ogg', - "moving" = 'sound/vox_fem/moving.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', - "near" = 'sound/vox_fem/near.ogg', - "nearest" = 'sound/vox_fem/nearest.ogg', - "nearly" = 'sound/vox_fem/nearly.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', - "no" = 'sound/vox_fem/no.ogg', - "nominal" = 'sound/vox_fem/nominal.ogg', - "none" = 'sound/vox_fem/none.ogg', - "normal" = 'sound/vox_fem/normal.ogg', - "normally" = 'sound/vox_fem/normally.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', - "notably" = 'sound/vox_fem/notably.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', - "object" = 'sound/vox_fem/object.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', - "oh" = 'sound/vox_fem/oh.ogg', - "ok" = 'sound/vox_fem/ok.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', - "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', - "ordered" = 'sound/vox_fem/ordered.ogg', - "ordering" = 'sound/vox_fem/ordering.ogg', - "organic" = 'sound/vox_fem/organic.ogg', - "oscar" = 'sound/vox_fem/oscar.ogg', - "out" = 'sound/vox_fem/out.ogg', - "output" = 'sound/vox_fem/output.ogg', - "outside" = 'sound/vox_fem/outside.ogg', - "over" = 'sound/vox_fem/over.ogg', - "overload" = 'sound/vox_fem/overload.ogg', - "override" = 'sound/vox_fem/override.ogg', - "own" = 'sound/vox_fem/own.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', - "pal" = 'sound/vox_fem/pal.ogg', - "panel" = 'sound/vox_fem/panel.ogg', - "panting" = 'sound/vox_fem/panting.ogg', - "pathetic" = 'sound/vox_fem/pathetic.ogg', - "pda" = 'sound/vox_fem/pda.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', - "personnel" = 'sound/vox_fem/personnel.ogg', - "pipe" = 'sound/vox_fem/pipe.ogg', - "piping" = 'sound/vox_fem/piping.ogg', - "piss" = 'sound/vox_fem/piss.ogg', - "plant" = 'sound/vox_fem/plant.ogg', - "plasma" = 'sound/vox_fem/plasma.ogg', - "plasmaman" = 'sound/vox_fem/plasmaman.ogg', - "platform" = 'sound/vox_fem/platform.ogg', - "plating" = 'sound/vox_fem/plating.ogg', - "plausible" = 'sound/vox_fem/plausible.ogg', - "please" = 'sound/vox_fem/please.ogg', - "pluoxium" = 'sound/vox_fem/pluoxium.ogg', - "point" = 'sound/vox_fem/point.ogg', - "port" = 'sound/vox_fem/port.ogg', - "portal" = 'sound/vox_fem/portal.ogg', - "portion" = 'sound/vox_fem/portion.ogg', - "possible" = 'sound/vox_fem/possible.ogg', - "power" = 'sound/vox_fem/power.ogg', - "powered" = 'sound/vox_fem/powered.ogg', - "powering" = 'sound/vox_fem/powering.ogg', - "premature" = 'sound/vox_fem/premature.ogg', - "prematurely" = 'sound/vox_fem/prematurely.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', - "priority" = 'sound/vox_fem/priority.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', - "projectile" = 'sound/vox_fem/projectile.ogg', - "proper" = 'sound/vox_fem/proper.ogg', - "propulsion" = 'sound/vox_fem/propulsion.ogg', - "prosecute" = 'sound/vox_fem/prosecute.ogg', - "protect" = 'sound/vox_fem/protect.ogg', - "protected" = 'sound/vox_fem/protected.ogg', - "protection" = 'sound/vox_fem/protection.ogg', - "protective" = 'sound/vox_fem/protective.ogg', - "proto-nitrate" = 'sound/vox_fem/proto-nitrate.ogg', - "pull" = 'sound/vox_fem/pull.ogg', - "pulled" = 'sound/vox_fem/pulled.ogg', - "pulling" = 'sound/vox_fem/pulling.ogg', - "pump" = 'sound/vox_fem/pump.ogg', - "pumps" = 'sound/vox_fem/pumps.ogg', - "push" = 'sound/vox_fem/push.ogg', - "put" = 'sound/vox_fem/put.ogg', - "q" = 'sound/vox_fem/q.ogg', - "quantum" = 'sound/vox_fem/quantum.ogg', - "quarantine" = 'sound/vox_fem/quarantine.ogg', - "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', - "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', - "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', - "release" = 'sound/vox_fem/release.ogg', - "released" = 'sound/vox_fem/released.ogg', - "releasing" = 'sound/vox_fem/releasing.ogg', - "remaining" = 'sound/vox_fem/remaining.ogg', - "removal" = 'sound/vox_fem/removal.ogg', - "remove" = 'sound/vox_fem/remove.ogg', - "removed" = 'sound/vox_fem/removed.ogg', - "removing" = 'sound/vox_fem/removing.ogg', - "renegade" = 'sound/vox_fem/renegade.ogg', - "repair" = 'sound/vox_fem/repair.ogg', - "report" = 'sound/vox_fem/report.ogg', - "reports" = 'sound/vox_fem/reports.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', - "resistant" = 'sound/vox_fem/resistant.ogg', - "resisting" = 'sound/vox_fem/resisting.ogg', - "resonance" = 'sound/vox_fem/resonance.ogg', - "rest" = 'sound/vox_fem/rest.ogg', - "restoration" = 'sound/vox_fem/restoration.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', - "rogue" = 'sound/vox_fem/rogue.ogg', - "romeo" = 'sound/vox_fem/romeo.ogg', - "room" = 'sound/vox_fem/room.ogg', - "round" = 'sound/vox_fem/round.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', - "sabotaged" = 'sound/vox_fem/sabotaged.ogg', - "sabotaging" = 'sound/vox_fem/sabotaging.ogg', - "safe" = 'sound/vox_fem/safe.ogg', - "safety" = 'sound/vox_fem/safety.ogg', - "sairhorn" = 'sound/vox_fem/sairhorn.ogg', - "same" = 'sound/vox_fem/same.ogg', - "sarah" = 'sound/vox_fem/sarah.ogg', - "sargeant" = 'sound/vox_fem/sargeant.ogg', - "satellite" = 'sound/vox_fem/satellite.ogg', - "save" = 'sound/vox_fem/save.ogg', - "saw" = 'sound/vox_fem/saw.ogg', - "scan" = 'sound/vox_fem/scan.ogg', - "scanned" = 'sound/vox_fem/scanned.ogg', - "scanner" = 'sound/vox_fem/scanner.ogg', - "scanners" = 'sound/vox_fem/scanners.ogg', - "scanning" = 'sound/vox_fem/scanning.ogg', - "scensor" = 'sound/vox_fem/scensor.ogg', - "science" = 'sound/vox_fem/science.ogg', - "scientist" = 'sound/vox_fem/scientist.ogg', - "scream" = 'sound/vox_fem/scream.ogg', - "screen" = 'sound/vox_fem/screen.ogg', - "screw" = 'sound/vox_fem/screw.ogg', - "search" = 'sound/vox_fem/search.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', - "secure" = 'sound/vox_fem/secure.ogg', - "secured" = 'sound/vox_fem/secured.ogg', - "security" = 'sound/vox_fem/security.ogg', - "seen" = 'sound/vox_fem/seen.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', - "service" = 'sound/vox_fem/service.ogg', - "set" = 'sound/vox_fem/set.ogg', - "seven" = 'sound/vox_fem/seven.ogg', - "seventeen" = 'sound/vox_fem/seventeen.ogg', - "seventy" = 'sound/vox_fem/seventy.ogg', - "sever" = 'sound/vox_fem/sever.ogg', - "severe" = 'sound/vox_fem/severe.ogg', - "severed" = 'sound/vox_fem/severed.ogg', - "severing" = 'sound/vox_fem/severing.ogg', - "sewage" = 'sound/vox_fem/sewage.ogg', - "sewer" = 'sound/vox_fem/sewer.ogg', - "shaft" = 'sound/vox_fem/shaft.ogg', - "shame" = 'sound/vox_fem/shame.ogg', - "shameful" = 'sound/vox_fem/shameful.ogg', - "shameless" = 'sound/vox_fem/shameless.ogg', - "shard" = 'sound/vox_fem/shard.ogg', - "she" = 'sound/vox_fem/she.ogg', - "shield" = 'sound/vox_fem/shield.ogg', - "shift" = 'sound/vox_fem/shift.ogg', - "shifts" = 'sound/vox_fem/shifts.ogg', - "shipment" = 'sound/vox_fem/shipment.ogg', - "shirt" = 'sound/vox_fem/shirt.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', - "shonk" = 'sound/vox_fem/shonk.ogg', - "shoot" = 'sound/vox_fem/shoot.ogg', - "shower" = 'sound/vox_fem/shower.ogg', - "shut" = 'sound/vox_fem/shut.ogg', - "shuttle" = 'sound/vox_fem/shuttle.ogg', - "sick" = 'sound/vox_fem/sick.ogg', - "side" = 'sound/vox_fem/side.ogg', - "sides" = 'sound/vox_fem/sides.ogg', - "sierra" = 'sound/vox_fem/sierra.ogg', - "sight" = 'sound/vox_fem/sight.ogg', - "silicon" = 'sound/vox_fem/silicon.ogg', - "silo" = 'sound/vox_fem/silo.ogg', - "single" = 'sound/vox_fem/single.ogg', - "singularity" = 'sound/vox_fem/singularity.ogg', - "siphon" = 'sound/vox_fem/siphon.ogg', - "siphoning" = 'sound/vox_fem/siphoning.ogg', - "six" = 'sound/vox_fem/six.ogg', - "sixteen" = 'sound/vox_fem/sixteen.ogg', - "sixty" = 'sound/vox_fem/sixty.ogg', - "skeleton" = 'sound/vox_fem/skeleton.ogg', - "slaughter" = 'sound/vox_fem/slaughter.ogg', - "slime" = 'sound/vox_fem/slime.ogg', - "slip" = 'sound/vox_fem/slip.ogg', - "slippery" = 'sound/vox_fem/slippery.ogg', - "slow" = 'sound/vox_fem/slow.ogg', - "sm" = 'sound/vox_fem/sm.ogg', - "small" = 'sound/vox_fem/small.ogg', - "sockmuncher" = 'sound/vox_fem/sockmuncher.ogg', - "soft" = 'sound/vox_fem/soft.ogg', - "solar" = 'sound/vox_fem/solar.ogg', - "solars" = 'sound/vox_fem/solars.ogg', - "soldier" = 'sound/vox_fem/soldier.ogg', - "some" = 'sound/vox_fem/some.ogg', - "someone" = 'sound/vox_fem/someone.ogg', - "something" = 'sound/vox_fem/something.ogg', - "son" = 'sound/vox_fem/son.ogg', - "sorry" = 'sound/vox_fem/sorry.ogg', - "source" = 'sound/vox_fem/source.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', - "special" = 'sound/vox_fem/special.ogg', - "spew" = 'sound/vox_fem/spew.ogg', - "squad" = 'sound/vox_fem/squad.ogg', - "square" = 'sound/vox_fem/square.ogg', - "ss13" = 'sound/vox_fem/ss13.ogg', - "stairway" = 'sound/vox_fem/stairway.ogg', - "starboard" = 'sound/vox_fem/starboard.ogg', - "start" = 'sound/vox_fem/start.ogg', - "starts" = 'sound/vox_fem/starts.ogg', - "station" = 'sound/vox_fem/station.ogg', - "stations" = 'sound/vox_fem/stations.ogg', - "stationwide" = 'sound/vox_fem/stationwide.ogg', - "status" = 'sound/vox_fem/status.ogg', - "stay" = 'sound/vox_fem/stay.ogg', - "sterile" = 'sound/vox_fem/sterile.ogg', - "sterilization" = 'sound/vox_fem/sterilization.ogg', - "stop" = 'sound/vox_fem/stop.ogg', - "storage" = 'sound/vox_fem/storage.ogg', - "strong" = 'sound/vox_fem/strong.ogg', - "stuck" = 'sound/vox_fem/stuck.ogg', - "sub" = 'sound/vox_fem/sub.ogg', - "subsurface" = 'sound/vox_fem/subsurface.ogg', - "such" = 'sound/vox_fem/such.ogg', - "sudden" = 'sound/vox_fem/sudden.ogg', - "suffer" = 'sound/vox_fem/suffer.ogg', - "suit" = 'sound/vox_fem/suit.ogg', - "suited" = 'sound/vox_fem/suited.ogg', - "super" = 'sound/vox_fem/super.ogg', - "superconducting" = 'sound/vox_fem/superconducting.ogg', - "supercooled" = 'sound/vox_fem/supercooled.ogg', - "supermatter" = 'sound/vox_fem/supermatter.ogg', - "supply" = 'sound/vox_fem/supply.ogg', - "surface" = 'sound/vox_fem/surface.ogg', - "surrender" = 'sound/vox_fem/surrender.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', - "tango" = 'sound/vox_fem/tango.ogg', - "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', - "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', - "tesla" = 'sound/vox_fem/tesla.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', - "there" = 'sound/vox_fem/there.ogg', - "they" = 'sound/vox_fem/they.ogg', - "third" = 'sound/vox_fem/third.ogg', - "thirteen" = 'sound/vox_fem/thirteen.ogg', - "thirty" = 'sound/vox_fem/thirty.ogg', - "this" = 'sound/vox_fem/this.ogg', - "those" = 'sound/vox_fem/those.ogg', - "thousand" = 'sound/vox_fem/thousand.ogg', - "threat" = 'sound/vox_fem/threat.ogg', - "three" = 'sound/vox_fem/three.ogg', - "through" = 'sound/vox_fem/through.ogg', - "tick" = 'sound/vox_fem/tick.ogg', - "tide" = 'sound/vox_fem/tide.ogg', - "tile" = 'sound/vox_fem/tile.ogg', - "time" = 'sound/vox_fem/time.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', - "touch" = 'sound/vox_fem/touch.ogg', - "touched" = 'sound/vox_fem/touched.ogg', - "touching" = 'sound/vox_fem/touching.ogg', - "towards" = 'sound/vox_fem/towards.ogg', - "toxins" = 'sound/vox_fem/toxins.ogg', - "track" = 'sound/vox_fem/track.ogg', - "train" = 'sound/vox_fem/train.ogg', - "traitor" = 'sound/vox_fem/traitor.ogg', - "transportation" = 'sound/vox_fem/transportation.ogg', - "trigger" = 'sound/vox_fem/trigger.ogg', - "triggered" = 'sound/vox_fem/triggered.ogg', - "triggering" = 'sound/vox_fem/triggering.ogg', - "triple" = 'sound/vox_fem/triple.ogg', - "tritium" = 'sound/vox_fem/tritium.ogg', - "truck" = 'sound/vox_fem/truck.ogg', - "true" = 'sound/vox_fem/true.ogg', - "tunnel" = 'sound/vox_fem/tunnel.ogg', - "turn" = 'sound/vox_fem/turn.ogg', - "turned" = 'sound/vox_fem/turned.ogg', - "turret" = 'sound/vox_fem/turret.ogg', - "twelve" = 'sound/vox_fem/twelve.ogg', - "twenty" = 'sound/vox_fem/twenty.ogg', - "two" = 'sound/vox_fem/two.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', - "uniform" = 'sound/vox_fem/uniform.ogg', - "unique" = 'sound/vox_fem/unique.ogg', - "unknown" = 'sound/vox_fem/unknown.ogg', - "unlocked" = 'sound/vox_fem/unlocked.ogg', - "unsafe" = 'sound/vox_fem/unsafe.ogg', - "until" = 'sound/vox_fem/until.ogg', - "unwrench" = 'sound/vox_fem/unwrench.ogg', - "unwrenching" = 'sound/vox_fem/unwrenching.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', - "upper" = 'sound/vox_fem/upper.ogg', - "uranium" = 'sound/vox_fem/uranium.ogg', - "us" = 'sound/vox_fem/us.ogg', - "usa" = 'sound/vox_fem/usa.ogg', - "use" = 'sound/vox_fem/use.ogg', - "used" = 'sound/vox_fem/used.ogg', - "useful" = 'sound/vox_fem/useful.ogg', - "useless" = 'sound/vox_fem/useless.ogg', - "user" = 'sound/vox_fem/user.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', - "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', - "violation" = 'sound/vox_fem/violation.ogg', - "virologist" = 'sound/vox_fem/virologist.ogg', - "virology" = 'sound/vox_fem/virology.ogg', - "virus" = 'sound/vox_fem/virus.ogg', - "vitals" = 'sound/vox_fem/vitals.ogg', - "voltage" = 'sound/vox_fem/voltage.ogg', - "vox" = 'sound/vox_fem/vox.ogg', - "voxtest" = 'sound/vox_fem/voxtest.ogg', - "vox_login" = 'sound/vox_fem/vox_login.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', - "want" = 'sound/vox_fem/want.ogg', - "wanted" = 'sound/vox_fem/wanted.ogg', - "warden" = 'sound/vox_fem/warden.ogg', - "warm" = 'sound/vox_fem/warm.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', - "way" = 'sound/vox_fem/way.ogg', - "ways" = 'sound/vox_fem/ways.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', - "weld" = 'sound/vox_fem/weld.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', - "which" = 'sound/vox_fem/which.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', - "wilco" = 'sound/vox_fem/wilco.ogg', - "will" = 'sound/vox_fem/will.ogg', - "wing" = 'sound/vox_fem/wing.ogg', - "wire" = 'sound/vox_fem/wire.ogg', - "with" = 'sound/vox_fem/with.ogg', - "without" = 'sound/vox_fem/without.ogg', - "wizard" = 'sound/vox_fem/wizard.ogg', - "wood" = 'sound/vox_fem/wood.ogg', - "woody" = 'sound/vox_fem/woody.ogg', - "woop" = 'sound/vox_fem/woop.ogg', - "work" = 'sound/vox_fem/work.ogg', - "worked" = 'sound/vox_fem/worked.ogg', - "working" = 'sound/vox_fem/working.ogg', - "works" = 'sound/vox_fem/works.ogg', - "would" = 'sound/vox_fem/would.ogg', - "wouldnt" = 'sound/vox_fem/wouldnt.ogg', - "wow" = 'sound/vox_fem/wow.ogg', - "wrench" = 'sound/vox_fem/wrench.ogg', - "wrenching" = 'sound/vox_fem/wrenching.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', - "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', - "you" = 'sound/vox_fem/you.ogg', - "your" = 'sound/vox_fem/your.ogg', - "yourself" = 'sound/vox_fem/yourself.ogg', - "z" = 'sound/vox_fem/z.ogg', - "zap" = 'sound/vox_fem/zap.ogg', - "zauker" = 'sound/vox_fem/zauker.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', + "," = 'sound/announcer/vox_fem/,.ogg', + "." = 'sound/announcer/vox_fem/..ogg', + "a" = 'sound/announcer/vox_fem/a.ogg', + "abduction" = 'sound/announcer/vox_fem/abduction.ogg', + "abortions" = 'sound/announcer/vox_fem/abortions.ogg', + "above" = 'sound/announcer/vox_fem/above.ogg', + "absorb" = 'sound/announcer/vox_fem/absorb.ogg', + "absorbed" = 'sound/announcer/vox_fem/absorbed.ogg', + "absorbing" = 'sound/announcer/vox_fem/absorbing.ogg', + "abstain" = 'sound/announcer/vox_fem/abstain.ogg', + "accelerating" = 'sound/announcer/vox_fem/accelerating.ogg', + "accelerator" = 'sound/announcer/vox_fem/accelerator.ogg', + "accepted" = 'sound/announcer/vox_fem/accepted.ogg', + "access" = 'sound/announcer/vox_fem/access.ogg', + "acknowledge" = 'sound/announcer/vox_fem/acknowledge.ogg', + "acknowledged" = 'sound/announcer/vox_fem/acknowledged.ogg', + "acquired" = 'sound/announcer/vox_fem/acquired.ogg', + "acquisition" = 'sound/announcer/vox_fem/acquisition.ogg', + "across" = 'sound/announcer/vox_fem/across.ogg', + "activate" = 'sound/announcer/vox_fem/activate.ogg', + "activated" = 'sound/announcer/vox_fem/activated.ogg', + "activating" = 'sound/announcer/vox_fem/activating.ogg', + "activation" = 'sound/announcer/vox_fem/activation.ogg', + "active" = 'sound/announcer/vox_fem/active.ogg', + "activity" = 'sound/announcer/vox_fem/activity.ogg', + "adios" = 'sound/announcer/vox_fem/adios.ogg', + "administration" = 'sound/announcer/vox_fem/administration.ogg', + "advanced" = 'sound/announcer/vox_fem/advanced.ogg', + "advised" = 'sound/announcer/vox_fem/advised.ogg', + "affect" = 'sound/announcer/vox_fem/affect.ogg', + "affected" = 'sound/announcer/vox_fem/affected.ogg', + "affecting" = 'sound/announcer/vox_fem/affecting.ogg', + "aft" = 'sound/announcer/vox_fem/aft.ogg', + "after" = 'sound/announcer/vox_fem/after.ogg', + "agent" = 'sound/announcer/vox_fem/agent.ogg', + "ai" = 'sound/announcer/vox_fem/ai.ogg', + "air" = 'sound/announcer/vox_fem/air.ogg', + "airlock" = 'sound/announcer/vox_fem/airlock.ogg', + "alarm" = 'sound/announcer/vox_fem/alarm.ogg', + "alarmed" = 'sound/announcer/vox_fem/alarmed.ogg', + "alarming" = 'sound/announcer/vox_fem/alarming.ogg', + "alcohol" = 'sound/announcer/vox_fem/alcohol.ogg', + "alert" = 'sound/announcer/vox_fem/alert.ogg', + "alerted" = 'sound/announcer/vox_fem/alerted.ogg', + "alerting" = 'sound/announcer/vox_fem/alerting.ogg', + "alien" = 'sound/announcer/vox_fem/alien.ogg', + "align" = 'sound/announcer/vox_fem/align.ogg', + "aligned" = 'sound/announcer/vox_fem/aligned.ogg', + "all" = 'sound/announcer/vox_fem/all.ogg', + "allow" = 'sound/announcer/vox_fem/allow.ogg', + "alongside" = 'sound/announcer/vox_fem/alongside.ogg', + "alpha" = 'sound/announcer/vox_fem/alpha.ogg', + "also" = 'sound/announcer/vox_fem/also.ogg', + "am" = 'sound/announcer/vox_fem/am.ogg', + "amigo" = 'sound/announcer/vox_fem/amigo.ogg', + "ammunition" = 'sound/announcer/vox_fem/ammunition.ogg', + "amount" = 'sound/announcer/vox_fem/amount.ogg', + "an" = 'sound/announcer/vox_fem/an.ogg', + "and" = 'sound/announcer/vox_fem/and.ogg', + "animal" = 'sound/announcer/vox_fem/animal.ogg', + "annihilate" = 'sound/announcer/vox_fem/annihilate.ogg', + "annihilated" = 'sound/announcer/vox_fem/annihilated.ogg', + "annihilating" = 'sound/announcer/vox_fem/annihilating.ogg', + "annihilation" = 'sound/announcer/vox_fem/annihilation.ogg', + "announcement" = 'sound/announcer/vox_fem/announcement.ogg', + "anomalous" = 'sound/announcer/vox_fem/anomalous.ogg', + "answer" = 'sound/announcer/vox_fem/answer.ogg', + "antenna" = 'sound/announcer/vox_fem/antenna.ogg', + "anti-noblium" = 'sound/announcer/vox_fem/anti-noblium.ogg', + "any" = 'sound/announcer/vox_fem/any.ogg', + "apc" = 'sound/announcer/vox_fem/apc.ogg', + "apprehend" = 'sound/announcer/vox_fem/apprehend.ogg', + "approach" = 'sound/announcer/vox_fem/approach.ogg', + "arc" = 'sound/announcer/vox_fem/arc.ogg', + "arcs" = 'sound/announcer/vox_fem/arcs.ogg', + "are" = 'sound/announcer/vox_fem/are.ogg', + "area" = 'sound/announcer/vox_fem/area.ogg', + "arm" = 'sound/announcer/vox_fem/arm.ogg', + "armed" = 'sound/announcer/vox_fem/armed.ogg', + "armor" = 'sound/announcer/vox_fem/armor.ogg', + "armory" = 'sound/announcer/vox_fem/armory.ogg', + "around" = 'sound/announcer/vox_fem/around.ogg', + "array" = 'sound/announcer/vox_fem/array.ogg', + "arrest" = 'sound/announcer/vox_fem/arrest.ogg', + "artillery" = 'sound/announcer/vox_fem/artillery.ogg', + "asimov" = 'sound/announcer/vox_fem/asimov.ogg', + "ask" = 'sound/announcer/vox_fem/ask.ogg', + "ass" = 'sound/announcer/vox_fem/ass.ogg', + "asshole" = 'sound/announcer/vox_fem/asshole.ogg', + "assholes" = 'sound/announcer/vox_fem/assholes.ogg', + "assistance" = 'sound/announcer/vox_fem/assistance.ogg', + "assistant" = 'sound/announcer/vox_fem/assistant.ogg', + "at" = 'sound/announcer/vox_fem/at.ogg', + "ate" = 'sound/announcer/vox_fem/ate.ogg', + "atmosphere" = 'sound/announcer/vox_fem/atmosphere.ogg', + "atmospheric" = 'sound/announcer/vox_fem/atmospheric.ogg', + "atmospherics" = 'sound/announcer/vox_fem/atmospherics.ogg', + "atomic" = 'sound/announcer/vox_fem/atomic.ogg', + "attention" = 'sound/announcer/vox_fem/attention.ogg', + "authentication" = 'sound/announcer/vox_fem/authentication.ogg', + "authorize" = 'sound/announcer/vox_fem/authorize.ogg', + "authorized" = 'sound/announcer/vox_fem/authorized.ogg', + "automatic" = 'sound/announcer/vox_fem/automatic.ogg', + "away" = 'sound/announcer/vox_fem/away.ogg', + "awful" = 'sound/announcer/vox_fem/awful.ogg', + "b" = 'sound/announcer/vox_fem/b.ogg', + "back" = 'sound/announcer/vox_fem/back.ogg', + "backman" = 'sound/announcer/vox_fem/backman.ogg', + "bad" = 'sound/announcer/vox_fem/bad.ogg', + "bag" = 'sound/announcer/vox_fem/bag.ogg', + "bailey" = 'sound/announcer/vox_fem/bailey.ogg', + "bar" = 'sound/announcer/vox_fem/bar.ogg', + "barracks" = 'sound/announcer/vox_fem/barracks.ogg', + "bartender" = 'sound/announcer/vox_fem/bartender.ogg', + "base" = 'sound/announcer/vox_fem/base.ogg', + "bay" = 'sound/announcer/vox_fem/bay.ogg', + "be" = 'sound/announcer/vox_fem/be.ogg', + "beaker" = 'sound/announcer/vox_fem/beaker.ogg', + "beam" = 'sound/announcer/vox_fem/beam.ogg', + "been" = 'sound/announcer/vox_fem/been.ogg', + "beep" = 'sound/announcer/vox_fem/beep.ogg', + "before" = 'sound/announcer/vox_fem/before.ogg', + "began" = 'sound/announcer/vox_fem/began.ogg', + "begin" = 'sound/announcer/vox_fem/begin.ogg', + "begins" = 'sound/announcer/vox_fem/begins.ogg', + "below" = 'sound/announcer/vox_fem/below.ogg', + "beside" = 'sound/announcer/vox_fem/beside.ogg', + "beware" = 'sound/announcer/vox_fem/beware.ogg', + "beyond" = 'sound/announcer/vox_fem/beyond.ogg', + "big" = 'sound/announcer/vox_fem/big.ogg', + "billion" = 'sound/announcer/vox_fem/billion.ogg', + "biohazard" = 'sound/announcer/vox_fem/biohazard.ogg', + "biological" = 'sound/announcer/vox_fem/biological.ogg', + "birdwell" = 'sound/announcer/vox_fem/birdwell.ogg', + "bitch" = 'sound/announcer/vox_fem/bitch.ogg', + "bitches" = 'sound/announcer/vox_fem/bitches.ogg', + "bitcoin" = 'sound/announcer/vox_fem/bitcoin.ogg', + "bitrun" = 'sound/announcer/vox_fem/bitrun.ogg', + "bitrunner" = 'sound/announcer/vox_fem/bitrunner.ogg', + "bitrunning" = 'sound/announcer/vox_fem/bitrunning.ogg', + "black" = 'sound/announcer/vox_fem/black.ogg', + "blast" = 'sound/announcer/vox_fem/blast.ogg', + "bleed" = 'sound/announcer/vox_fem/bleed.ogg', + "blob" = 'sound/announcer/vox_fem/blob.ogg', + "blocked" = 'sound/announcer/vox_fem/blocked.ogg', + "blood" = 'sound/announcer/vox_fem/blood.ogg', + "bloop" = 'sound/announcer/vox_fem/bloop.ogg', + "blue" = 'sound/announcer/vox_fem/blue.ogg', + "bluespace" = 'sound/announcer/vox_fem/bluespace.ogg', + "bomb" = 'sound/announcer/vox_fem/bomb.ogg', + "bone" = 'sound/announcer/vox_fem/bone.ogg', + "botanist" = 'sound/announcer/vox_fem/botanist.ogg', + "botany" = 'sound/announcer/vox_fem/botany.ogg', + "bottle" = 'sound/announcer/vox_fem/bottle.ogg', + "bottom" = 'sound/announcer/vox_fem/bottom.ogg', + "bravo" = 'sound/announcer/vox_fem/bravo.ogg', + "breach" = 'sound/announcer/vox_fem/breach.ogg', + "breached" = 'sound/announcer/vox_fem/breached.ogg', + "break" = 'sound/announcer/vox_fem/break.ogg', + "bridge" = 'sound/announcer/vox_fem/bridge.ogg', + "brig" = 'sound/announcer/vox_fem/brig.ogg', + "broke" = 'sound/announcer/vox_fem/broke.ogg', + "broken" = 'sound/announcer/vox_fem/broken.ogg', + "bump" = 'sound/announcer/vox_fem/bump.ogg', + "bumped" = 'sound/announcer/vox_fem/bumped.ogg', + "bumps" = 'sound/announcer/vox_fem/bumps.ogg', + "bust" = 'sound/announcer/vox_fem/bust.ogg', + "but" = 'sound/announcer/vox_fem/but.ogg', + "button" = 'sound/announcer/vox_fem/button.ogg', + "bypass" = 'sound/announcer/vox_fem/bypass.ogg', + "c" = 'sound/announcer/vox_fem/c.ogg', + "cable" = 'sound/announcer/vox_fem/cable.ogg', + "call" = 'sound/announcer/vox_fem/call.ogg', + "called" = 'sound/announcer/vox_fem/called.ogg', + "can" = 'sound/announcer/vox_fem/can.ogg', + "canal" = 'sound/announcer/vox_fem/canal.ogg', + "canister" = 'sound/announcer/vox_fem/canister.ogg', + "cap" = 'sound/announcer/vox_fem/cap.ogg', + "captain" = 'sound/announcer/vox_fem/captain.ogg', + "capture" = 'sound/announcer/vox_fem/capture.ogg', + "carbon" = 'sound/announcer/vox_fem/carbon.ogg', + "cargo" = 'sound/announcer/vox_fem/cargo.ogg', + "cascade" = 'sound/announcer/vox_fem/cascade.ogg', + "cat" = 'sound/announcer/vox_fem/cat.ogg', + "cause" = 'sound/announcer/vox_fem/cause.ogg', + "caused" = 'sound/announcer/vox_fem/caused.ogg', + "causes" = 'sound/announcer/vox_fem/causes.ogg', + "causing" = 'sound/announcer/vox_fem/causing.ogg', + "ce" = 'sound/announcer/vox_fem/ce.ogg', + "cease" = 'sound/announcer/vox_fem/cease.ogg', + "ceiling" = 'sound/announcer/vox_fem/ceiling.ogg', + "celsius" = 'sound/announcer/vox_fem/celsius.ogg', + "centcom" = 'sound/announcer/vox_fem/centcom.ogg', + "center" = 'sound/announcer/vox_fem/center.ogg', + "centi" = 'sound/announcer/vox_fem/centi.ogg', + "central" = 'sound/announcer/vox_fem/central.ogg', + "challenge" = 'sound/announcer/vox_fem/challenge.ogg', + "chamber" = 'sound/announcer/vox_fem/chamber.ogg', + "change" = 'sound/announcer/vox_fem/change.ogg', + "changed" = 'sound/announcer/vox_fem/changed.ogg', + "changeling" = 'sound/announcer/vox_fem/changeling.ogg', + "chapel" = 'sound/announcer/vox_fem/chapel.ogg', + "chaplain" = 'sound/announcer/vox_fem/chaplain.ogg', + "charge" = 'sound/announcer/vox_fem/charge.ogg', + "charlie" = 'sound/announcer/vox_fem/charlie.ogg', + "check" = 'sound/announcer/vox_fem/check.ogg', + "checkpoint" = 'sound/announcer/vox_fem/checkpoint.ogg', + "chemical" = 'sound/announcer/vox_fem/chemical.ogg', + "chemist" = 'sound/announcer/vox_fem/chemist.ogg', + "chief" = 'sound/announcer/vox_fem/chief.ogg', + "christ" = 'sound/announcer/vox_fem/christ.ogg', + "christmas" = 'sound/announcer/vox_fem/christmas.ogg', + "chuckle" = 'sound/announcer/vox_fem/chuckle.ogg', + "circuit" = 'sound/announcer/vox_fem/circuit.ogg', + "cleanup" = 'sound/announcer/vox_fem/cleanup.ogg', + "clear" = 'sound/announcer/vox_fem/clear.ogg', + "clearance" = 'sound/announcer/vox_fem/clearance.ogg', + "clockwork" = 'sound/announcer/vox_fem/clockwork.ogg', + "clog" = 'sound/announcer/vox_fem/clog.ogg', + "close" = 'sound/announcer/vox_fem/close.ogg', + "closed" = 'sound/announcer/vox_fem/closed.ogg', + "closing" = 'sound/announcer/vox_fem/closing.ogg', + "clothing" = 'sound/announcer/vox_fem/clothing.ogg', + "clown" = 'sound/announcer/vox_fem/clown.ogg', + "clowning" = 'sound/announcer/vox_fem/clowning.ogg', + "cmo" = 'sound/announcer/vox_fem/cmo.ogg', + "code" = 'sound/announcer/vox_fem/code.ogg', + "coded" = 'sound/announcer/vox_fem/coded.ogg', + "coil" = 'sound/announcer/vox_fem/coil.ogg', + "coils" = 'sound/announcer/vox_fem/coils.ogg', + "cold" = 'sound/announcer/vox_fem/cold.ogg', + "collider" = 'sound/announcer/vox_fem/collider.ogg', + "combat" = 'sound/announcer/vox_fem/combat.ogg', + "combatant" = 'sound/announcer/vox_fem/combatant.ogg', + "come" = 'sound/announcer/vox_fem/come.ogg', + "command" = 'sound/announcer/vox_fem/command.ogg', + "communication" = 'sound/announcer/vox_fem/communication.ogg', + "complete" = 'sound/announcer/vox_fem/complete.ogg', + "completed" = 'sound/announcer/vox_fem/completed.ogg', + "completion" = 'sound/announcer/vox_fem/completion.ogg', + "complex" = 'sound/announcer/vox_fem/complex.ogg', + "comply" = 'sound/announcer/vox_fem/comply.ogg', + "computer" = 'sound/announcer/vox_fem/computer.ogg', + "condition" = 'sound/announcer/vox_fem/condition.ogg', + "conditions" = 'sound/announcer/vox_fem/conditions.ogg', + "condom" = 'sound/announcer/vox_fem/condom.ogg', + "configure" = 'sound/announcer/vox_fem/configure.ogg', + "configured" = 'sound/announcer/vox_fem/configured.ogg', + "configuring" = 'sound/announcer/vox_fem/configuring.ogg', + "confirmed" = 'sound/announcer/vox_fem/confirmed.ogg', + "connor" = 'sound/announcer/vox_fem/connor.ogg', + "console" = 'sound/announcer/vox_fem/console.ogg', + "console2" = 'sound/announcer/vox_fem/console2.ogg', + "construct" = 'sound/announcer/vox_fem/construct.ogg', + "container" = 'sound/announcer/vox_fem/container.ogg', + "containment" = 'sound/announcer/vox_fem/containment.ogg', + "contamination" = 'sound/announcer/vox_fem/contamination.ogg', + "contraband" = 'sound/announcer/vox_fem/contraband.ogg', + "control" = 'sound/announcer/vox_fem/control.ogg', + "cook" = 'sound/announcer/vox_fem/cook.ogg', + "cool" = 'sound/announcer/vox_fem/cool.ogg', + "coolant" = 'sound/announcer/vox_fem/coolant.ogg', + "cooling" = 'sound/announcer/vox_fem/cooling.ogg', + "coomer" = 'sound/announcer/vox_fem/coomer.ogg', + "core" = 'sound/announcer/vox_fem/core.ogg', + "corgi" = 'sound/announcer/vox_fem/corgi.ogg', + "corporation" = 'sound/announcer/vox_fem/corporation.ogg', + "correct" = 'sound/announcer/vox_fem/correct.ogg', + "corridor" = 'sound/announcer/vox_fem/corridor.ogg', + "corridors" = 'sound/announcer/vox_fem/corridors.ogg', + "could" = 'sound/announcer/vox_fem/could.ogg', + "couldnt" = 'sound/announcer/vox_fem/couldnt.ogg', + "countdown" = 'sound/announcer/vox_fem/countdown.ogg', + "coward" = 'sound/announcer/vox_fem/coward.ogg', + "cowards" = 'sound/announcer/vox_fem/cowards.ogg', + "crate" = 'sound/announcer/vox_fem/crate.ogg', + "create" = 'sound/announcer/vox_fem/create.ogg', + "created" = 'sound/announcer/vox_fem/created.ogg', + "creating" = 'sound/announcer/vox_fem/creating.ogg', + "creature" = 'sound/announcer/vox_fem/creature.ogg', + "crew" = 'sound/announcer/vox_fem/crew.ogg', + "critical" = 'sound/announcer/vox_fem/critical.ogg', + "cross" = 'sound/announcer/vox_fem/cross.ogg', + "cryogenic" = 'sound/announcer/vox_fem/cryogenic.ogg', + "crystal" = 'sound/announcer/vox_fem/crystal.ogg', + "cult" = 'sound/announcer/vox_fem/cult.ogg', + "cultist" = 'sound/announcer/vox_fem/cultist.ogg', + "cunt" = 'sound/announcer/vox_fem/cunt.ogg', + "curator" = 'sound/announcer/vox_fem/curator.ogg', + "cyborg" = 'sound/announcer/vox_fem/cyborg.ogg', + "cyborgs" = 'sound/announcer/vox_fem/cyborgs.ogg', + "d" = 'sound/announcer/vox_fem/d.ogg', + "damage" = 'sound/announcer/vox_fem/damage.ogg', + "damaged" = 'sound/announcer/vox_fem/damaged.ogg', + "danger" = 'sound/announcer/vox_fem/danger.ogg', + "dangerous" = 'sound/announcer/vox_fem/dangerous.ogg', + "day" = 'sound/announcer/vox_fem/day.ogg', + "deactivated" = 'sound/announcer/vox_fem/deactivated.ogg', + "dead" = 'sound/announcer/vox_fem/dead.ogg', + "death" = 'sound/announcer/vox_fem/death.ogg', + "decompression" = 'sound/announcer/vox_fem/decompression.ogg', + "decontamination" = 'sound/announcer/vox_fem/decontamination.ogg', + "deeoo" = 'sound/announcer/vox_fem/deeoo.ogg', + "defense" = 'sound/announcer/vox_fem/defense.ogg', + "degrees" = 'sound/announcer/vox_fem/degrees.ogg', + "delaminating" = 'sound/announcer/vox_fem/delaminating.ogg', + "delamination" = 'sound/announcer/vox_fem/delamination.ogg', + "delta" = 'sound/announcer/vox_fem/delta.ogg', + "demon" = 'sound/announcer/vox_fem/demon.ogg', + "denied" = 'sound/announcer/vox_fem/denied.ogg', + "deny" = 'sound/announcer/vox_fem/deny.ogg', + "departures" = 'sound/announcer/vox_fem/departures.ogg', + "deploy" = 'sound/announcer/vox_fem/deploy.ogg', + "deployed" = 'sound/announcer/vox_fem/deployed.ogg', + "desire" = 'sound/announcer/vox_fem/desire.ogg', + "desist" = 'sound/announcer/vox_fem/desist.ogg', + "destroy" = 'sound/announcer/vox_fem/destroy.ogg', + "destroyed" = 'sound/announcer/vox_fem/destroyed.ogg', + "destruction" = 'sound/announcer/vox_fem/destruction.ogg', + "detain" = 'sound/announcer/vox_fem/detain.ogg', + "detect" = 'sound/announcer/vox_fem/detect.ogg', + "detected" = 'sound/announcer/vox_fem/detected.ogg', + "detecting" = 'sound/announcer/vox_fem/detecting.ogg', + "detective" = 'sound/announcer/vox_fem/detective.ogg', + "detonation" = 'sound/announcer/vox_fem/detonation.ogg', + "device" = 'sound/announcer/vox_fem/device.ogg', + "devil" = 'sound/announcer/vox_fem/devil.ogg', + "did" = 'sound/announcer/vox_fem/did.ogg', + "die" = 'sound/announcer/vox_fem/die.ogg', + "died" = 'sound/announcer/vox_fem/died.ogg', + "different" = 'sound/announcer/vox_fem/different.ogg', + "dimensional" = 'sound/announcer/vox_fem/dimensional.ogg', + "dioxide" = 'sound/announcer/vox_fem/dioxide.ogg', + "direct" = 'sound/announcer/vox_fem/direct.ogg', + "director" = 'sound/announcer/vox_fem/director.ogg', + "dirt" = 'sound/announcer/vox_fem/dirt.ogg', + "disabled" = 'sound/announcer/vox_fem/disabled.ogg', + "disease" = 'sound/announcer/vox_fem/disease.ogg', + "disengaged" = 'sound/announcer/vox_fem/disengaged.ogg', + "dish" = 'sound/announcer/vox_fem/dish.ogg', + "disk" = 'sound/announcer/vox_fem/disk.ogg', + "disposal" = 'sound/announcer/vox_fem/disposal.ogg', + "distance" = 'sound/announcer/vox_fem/distance.ogg', + "distortion" = 'sound/announcer/vox_fem/distortion.ogg', + "do" = 'sound/announcer/vox_fem/do.ogg', + "doctor" = 'sound/announcer/vox_fem/doctor.ogg', + "dog" = 'sound/announcer/vox_fem/dog.ogg', + "dont" = 'sound/announcer/vox_fem/dont.ogg', + "doomsday" = 'sound/announcer/vox_fem/doomsday.ogg', + "doop" = 'sound/announcer/vox_fem/doop.ogg', + "door" = 'sound/announcer/vox_fem/door.ogg', + "dormitory" = 'sound/announcer/vox_fem/dormitory.ogg', + "dot" = 'sound/announcer/vox_fem/dot.ogg', + "double" = 'sound/announcer/vox_fem/double.ogg', + "down" = 'sound/announcer/vox_fem/down.ogg', + "dress" = 'sound/announcer/vox_fem/dress.ogg', + "dressed" = 'sound/announcer/vox_fem/dressed.ogg', + "dressing" = 'sound/announcer/vox_fem/dressing.ogg', + "drone" = 'sound/announcer/vox_fem/drone.ogg', + "dual" = 'sound/announcer/vox_fem/dual.ogg', + "duct" = 'sound/announcer/vox_fem/duct.ogg', + "e" = 'sound/announcer/vox_fem/e.ogg', + "easily" = 'sound/announcer/vox_fem/easily.ogg', + "east" = 'sound/announcer/vox_fem/east.ogg', + "eat" = 'sound/announcer/vox_fem/eat.ogg', + "eaten" = 'sound/announcer/vox_fem/eaten.ogg', + "echo" = 'sound/announcer/vox_fem/echo.ogg', + "ed" = 'sound/announcer/vox_fem/ed.ogg', + "education" = 'sound/announcer/vox_fem/education.ogg', + "effect" = 'sound/announcer/vox_fem/effect.ogg', + "effects" = 'sound/announcer/vox_fem/effects.ogg', + "egress" = 'sound/announcer/vox_fem/egress.ogg', + "eight" = 'sound/announcer/vox_fem/eight.ogg', + "eighteen" = 'sound/announcer/vox_fem/eighteen.ogg', + "eighty" = 'sound/announcer/vox_fem/eighty.ogg', + "electric" = 'sound/announcer/vox_fem/electric.ogg', + "electrical" = 'sound/announcer/vox_fem/electrical.ogg', + "electromagnetic" = 'sound/announcer/vox_fem/electromagnetic.ogg', + "elevator" = 'sound/announcer/vox_fem/elevator.ogg', + "eleven" = 'sound/announcer/vox_fem/eleven.ogg', + "eliminate" = 'sound/announcer/vox_fem/eliminate.ogg', + "emergency" = 'sound/announcer/vox_fem/emergency.ogg', + "emitted" = 'sound/announcer/vox_fem/emitted.ogg', + "emitter" = 'sound/announcer/vox_fem/emitter.ogg', + "emitting" = 'sound/announcer/vox_fem/emitting.ogg', + "enabled" = 'sound/announcer/vox_fem/enabled.ogg', + "end" = 'sound/announcer/vox_fem/end.ogg', + "ends" = 'sound/announcer/vox_fem/ends.ogg', + "energy" = 'sound/announcer/vox_fem/energy.ogg', + "engage" = 'sound/announcer/vox_fem/engage.ogg', + "engaged" = 'sound/announcer/vox_fem/engaged.ogg', + "engine" = 'sound/announcer/vox_fem/engine.ogg', + "engineer" = 'sound/announcer/vox_fem/engineer.ogg', + "engineering" = 'sound/announcer/vox_fem/engineering.ogg', + "enormous" = 'sound/announcer/vox_fem/enormous.ogg', + "enough" = 'sound/announcer/vox_fem/enough.ogg', + "enter" = 'sound/announcer/vox_fem/enter.ogg', + "entity" = 'sound/announcer/vox_fem/entity.ogg', + "entry" = 'sound/announcer/vox_fem/entry.ogg', + "environment" = 'sound/announcer/vox_fem/environment.ogg', + "epic" = 'sound/announcer/vox_fem/epic.ogg', + "equipment" = 'sound/announcer/vox_fem/equipment.ogg', + "error" = 'sound/announcer/vox_fem/error.ogg', + "escape" = 'sound/announcer/vox_fem/escape.ogg', + "ethereal" = 'sound/announcer/vox_fem/ethereal.ogg', + "eva" = 'sound/announcer/vox_fem/eva.ogg', + "evacuate" = 'sound/announcer/vox_fem/evacuate.ogg', + "even" = 'sound/announcer/vox_fem/even.ogg', + "ever" = 'sound/announcer/vox_fem/ever.ogg', + "every" = 'sound/announcer/vox_fem/every.ogg', + "everybody" = 'sound/announcer/vox_fem/everybody.ogg', + "everyone" = 'sound/announcer/vox_fem/everyone.ogg', + "exchange" = 'sound/announcer/vox_fem/exchange.ogg', + "execute" = 'sound/announcer/vox_fem/execute.ogg', + "exit" = 'sound/announcer/vox_fem/exit.ogg', + "expect" = 'sound/announcer/vox_fem/expect.ogg', + "experiment" = 'sound/announcer/vox_fem/experiment.ogg', + "experimental" = 'sound/announcer/vox_fem/experimental.ogg', + "explode" = 'sound/announcer/vox_fem/explode.ogg', + "exploded" = 'sound/announcer/vox_fem/exploded.ogg', + "exploding" = 'sound/announcer/vox_fem/exploding.ogg', + "explosion" = 'sound/announcer/vox_fem/explosion.ogg', + "explosive" = 'sound/announcer/vox_fem/explosive.ogg', + "exposure" = 'sound/announcer/vox_fem/exposure.ogg', + "exterminate" = 'sound/announcer/vox_fem/exterminate.ogg', + "external" = 'sound/announcer/vox_fem/external.ogg', + "extinguish" = 'sound/announcer/vox_fem/extinguish.ogg', + "extinguisher" = 'sound/announcer/vox_fem/extinguisher.ogg', + "extra" = 'sound/announcer/vox_fem/extra.ogg', + "extreme" = 'sound/announcer/vox_fem/extreme.ogg', + "f" = 'sound/announcer/vox_fem/f.ogg', + "facility" = 'sound/announcer/vox_fem/facility.ogg', + "factory" = 'sound/announcer/vox_fem/factory.ogg', + "fahrenheit" = 'sound/announcer/vox_fem/fahrenheit.ogg', + "failed" = 'sound/announcer/vox_fem/failed.ogg', + "failure" = 'sound/announcer/vox_fem/failure.ogg', + "false" = 'sound/announcer/vox_fem/false.ogg', + "farthest" = 'sound/announcer/vox_fem/farthest.ogg', + "fast" = 'sound/announcer/vox_fem/fast.ogg', + "fauna" = 'sound/announcer/vox_fem/fauna.ogg', + "feature" = 'sound/announcer/vox_fem/feature.ogg', + "featured" = 'sound/announcer/vox_fem/featured.ogg', + "features" = 'sound/announcer/vox_fem/features.ogg', + "featuring" = 'sound/announcer/vox_fem/featuring.ogg', + "feet" = 'sound/announcer/vox_fem/feet.ogg', + "felinid" = 'sound/announcer/vox_fem/felinid.ogg', + "few" = 'sound/announcer/vox_fem/few.ogg', + "field" = 'sound/announcer/vox_fem/field.ogg', + "fifteen" = 'sound/announcer/vox_fem/fifteen.ogg', + "fifth" = 'sound/announcer/vox_fem/fifth.ogg', + "fifty" = 'sound/announcer/vox_fem/fifty.ogg', + "filter" = 'sound/announcer/vox_fem/filter.ogg', + "filters" = 'sound/announcer/vox_fem/filters.ogg', + "final" = 'sound/announcer/vox_fem/final.ogg', + "fine" = 'sound/announcer/vox_fem/fine.ogg', + "fire" = 'sound/announcer/vox_fem/fire.ogg', + "first" = 'sound/announcer/vox_fem/first.ogg', + "five" = 'sound/announcer/vox_fem/five.ogg', + "fix" = 'sound/announcer/vox_fem/fix.ogg', + "flooding" = 'sound/announcer/vox_fem/flooding.ogg', + "floor" = 'sound/announcer/vox_fem/floor.ogg', + "flyman" = 'sound/announcer/vox_fem/flyman.ogg', + "fool" = 'sound/announcer/vox_fem/fool.ogg', + "foolish" = 'sound/announcer/vox_fem/foolish.ogg', + "for" = 'sound/announcer/vox_fem/for.ogg', + "forbidden" = 'sound/announcer/vox_fem/forbidden.ogg', + "force" = 'sound/announcer/vox_fem/force.ogg', + "fore" = 'sound/announcer/vox_fem/fore.ogg', + "form" = 'sound/announcer/vox_fem/form.ogg', + "formed" = 'sound/announcer/vox_fem/formed.ogg', + "forms" = 'sound/announcer/vox_fem/forms.ogg', + "forty" = 'sound/announcer/vox_fem/forty.ogg', + "found" = 'sound/announcer/vox_fem/found.ogg', + "four" = 'sound/announcer/vox_fem/four.ogg', + "fourteen" = 'sound/announcer/vox_fem/fourteen.ogg', + "fourth" = 'sound/announcer/vox_fem/fourth.ogg', + "fourty" = 'sound/announcer/vox_fem/fourty.ogg', + "foxtrot" = 'sound/announcer/vox_fem/foxtrot.ogg', + "free" = 'sound/announcer/vox_fem/free.ogg', + "freeman" = 'sound/announcer/vox_fem/freeman.ogg', + "freeze" = 'sound/announcer/vox_fem/freeze.ogg', + "freezer" = 'sound/announcer/vox_fem/freezer.ogg', + "freezing" = 'sound/announcer/vox_fem/freezing.ogg', + "freon" = 'sound/announcer/vox_fem/freon.ogg', + "from" = 'sound/announcer/vox_fem/from.ogg', + "front" = 'sound/announcer/vox_fem/front.ogg', + "froze" = 'sound/announcer/vox_fem/froze.ogg', + "frozen" = 'sound/announcer/vox_fem/frozen.ogg', + "fuck" = 'sound/announcer/vox_fem/fuck.ogg', + "fucking" = 'sound/announcer/vox_fem/fucking.ogg', + "fucks" = 'sound/announcer/vox_fem/fucks.ogg', + "fuel" = 'sound/announcer/vox_fem/fuel.ogg', + "g" = 'sound/announcer/vox_fem/g.ogg', + "gas" = 'sound/announcer/vox_fem/gas.ogg', + "gases" = 'sound/announcer/vox_fem/gases.ogg', + "gave" = 'sound/announcer/vox_fem/gave.ogg', + "gear" = 'sound/announcer/vox_fem/gear.ogg', + "geared" = 'sound/announcer/vox_fem/geared.ogg', + "gearing" = 'sound/announcer/vox_fem/gearing.ogg', + "generate" = 'sound/announcer/vox_fem/generate.ogg', + "generated" = 'sound/announcer/vox_fem/generated.ogg', + "generating" = 'sound/announcer/vox_fem/generating.ogg', + "generator" = 'sound/announcer/vox_fem/generator.ogg', + "geneticist" = 'sound/announcer/vox_fem/geneticist.ogg', + "get" = 'sound/announcer/vox_fem/get.ogg', + "give" = 'sound/announcer/vox_fem/give.ogg', + "given" = 'sound/announcer/vox_fem/given.ogg', + "glory" = 'sound/announcer/vox_fem/glory.ogg', + "go" = 'sound/announcer/vox_fem/go.ogg', + "god" = 'sound/announcer/vox_fem/god.ogg', + "going" = 'sound/announcer/vox_fem/going.ogg', + "golem" = 'sound/announcer/vox_fem/golem.ogg', + "good" = 'sound/announcer/vox_fem/good.ogg', + "goodbye" = 'sound/announcer/vox_fem/goodbye.ogg', + "gordon" = 'sound/announcer/vox_fem/gordon.ogg', + "got" = 'sound/announcer/vox_fem/got.ogg', + "government" = 'sound/announcer/vox_fem/government.ogg', + "granted" = 'sound/announcer/vox_fem/granted.ogg', + "gravity" = 'sound/announcer/vox_fem/gravity.ogg', + "gray" = 'sound/announcer/vox_fem/gray.ogg', + "great" = 'sound/announcer/vox_fem/great.ogg', + "green" = 'sound/announcer/vox_fem/green.ogg', + "grenade" = 'sound/announcer/vox_fem/grenade.ogg', + "guard" = 'sound/announcer/vox_fem/guard.ogg', + "gulf" = 'sound/announcer/vox_fem/gulf.ogg', + "gun" = 'sound/announcer/vox_fem/gun.ogg', + "guthrie" = 'sound/announcer/vox_fem/guthrie.ogg', + "h" = 'sound/announcer/vox_fem/h.ogg', + "hacker" = 'sound/announcer/vox_fem/hacker.ogg', + "hackers" = 'sound/announcer/vox_fem/hackers.ogg', + "had" = 'sound/announcer/vox_fem/had.ogg', + "hall" = 'sound/announcer/vox_fem/hall.ogg', + "hallway" = 'sound/announcer/vox_fem/hallway.ogg', + "halon" = 'sound/announcer/vox_fem/halon.ogg', + "handling" = 'sound/announcer/vox_fem/handling.ogg', + "hangar" = 'sound/announcer/vox_fem/hangar.ogg', + "hard" = 'sound/announcer/vox_fem/hard.ogg', + "hardly" = 'sound/announcer/vox_fem/hardly.ogg', + "harm" = 'sound/announcer/vox_fem/harm.ogg', + "harmful" = 'sound/announcer/vox_fem/harmful.ogg', + "harness" = 'sound/announcer/vox_fem/harness.ogg', + "harnessed" = 'sound/announcer/vox_fem/harnessed.ogg', + "harnessing" = 'sound/announcer/vox_fem/harnessing.ogg', + "has" = 'sound/announcer/vox_fem/has.ogg', + "have" = 'sound/announcer/vox_fem/have.ogg', + "hazard" = 'sound/announcer/vox_fem/hazard.ogg', + "he" = 'sound/announcer/vox_fem/he.ogg', + "head" = 'sound/announcer/vox_fem/head.ogg', + "heal" = 'sound/announcer/vox_fem/heal.ogg', + "healed" = 'sound/announcer/vox_fem/healed.ogg', + "healing" = 'sound/announcer/vox_fem/healing.ogg', + "healium" = 'sound/announcer/vox_fem/healium.ogg', + "health" = 'sound/announcer/vox_fem/health.ogg', + "heat" = 'sound/announcer/vox_fem/heat.ogg', + "heated" = 'sound/announcer/vox_fem/heated.ogg', + "heating" = 'sound/announcer/vox_fem/heating.ogg', + "helicopter" = 'sound/announcer/vox_fem/helicopter.ogg', + "helium" = 'sound/announcer/vox_fem/helium.ogg', + "hello" = 'sound/announcer/vox_fem/hello.ogg', + "help" = 'sound/announcer/vox_fem/help.ogg', + "her" = 'sound/announcer/vox_fem/her.ogg', + "here" = 'sound/announcer/vox_fem/here.ogg', + "heretic" = 'sound/announcer/vox_fem/heretic.ogg', + "hide" = 'sound/announcer/vox_fem/hide.ogg', + "high" = 'sound/announcer/vox_fem/high.ogg', + "highest" = 'sound/announcer/vox_fem/highest.ogg', + "him" = 'sound/announcer/vox_fem/him.ogg', + "hit" = 'sound/announcer/vox_fem/hit.ogg', + "hole" = 'sound/announcer/vox_fem/hole.ogg', + "honk" = 'sound/announcer/vox_fem/honk.ogg', + "hop" = 'sound/announcer/vox_fem/hop.ogg', + "hos" = 'sound/announcer/vox_fem/hos.ogg', + "hostile" = 'sound/announcer/vox_fem/hostile.ogg', + "hot" = 'sound/announcer/vox_fem/hot.ogg', + "hotel" = 'sound/announcer/vox_fem/hotel.ogg', + "hour" = 'sound/announcer/vox_fem/hour.ogg', + "hours" = 'sound/announcer/vox_fem/hours.ogg', + "how" = 'sound/announcer/vox_fem/how.ogg', + "human" = 'sound/announcer/vox_fem/human.ogg', + "humanoid" = 'sound/announcer/vox_fem/humanoid.ogg', + "humans" = 'sound/announcer/vox_fem/humans.ogg', + "hundred" = 'sound/announcer/vox_fem/hundred.ogg', + "hunger" = 'sound/announcer/vox_fem/hunger.ogg', + "hurt" = 'sound/announcer/vox_fem/hurt.ogg', + "hydro" = 'sound/announcer/vox_fem/hydro.ogg', + "hydrogen" = 'sound/announcer/vox_fem/hydrogen.ogg', + "hydroponics" = 'sound/announcer/vox_fem/hydroponics.ogg', + "hyper-noblium" = 'sound/announcer/vox_fem/hyper-noblium.ogg', + "i" = 'sound/announcer/vox_fem/i.ogg', + "ian" = 'sound/announcer/vox_fem/ian.ogg', + "idiot" = 'sound/announcer/vox_fem/idiot.ogg', + "if" = 'sound/announcer/vox_fem/if.ogg', + "if2" = 'sound/announcer/vox_fem/if2.ogg', + "illegal" = 'sound/announcer/vox_fem/illegal.ogg', + "immediate" = 'sound/announcer/vox_fem/immediate.ogg', + "immediately" = 'sound/announcer/vox_fem/immediately.ogg', + "immortal" = 'sound/announcer/vox_fem/immortal.ogg', + "impossible" = 'sound/announcer/vox_fem/impossible.ogg', + "in" = 'sound/announcer/vox_fem/in.ogg', + "inches" = 'sound/announcer/vox_fem/inches.ogg', + "india" = 'sound/announcer/vox_fem/india.ogg', + "inert" = 'sound/announcer/vox_fem/inert.ogg', + "ing" = 'sound/announcer/vox_fem/ing.ogg', + "inoperative" = 'sound/announcer/vox_fem/inoperative.ogg', + "inside" = 'sound/announcer/vox_fem/inside.ogg', + "inspection" = 'sound/announcer/vox_fem/inspection.ogg', + "inspector" = 'sound/announcer/vox_fem/inspector.ogg', + "interchange" = 'sound/announcer/vox_fem/interchange.ogg', + "internal" = 'sound/announcer/vox_fem/internal.ogg', + "internals" = 'sound/announcer/vox_fem/internals.ogg', + "intruder" = 'sound/announcer/vox_fem/intruder.ogg', + "invalid" = 'sound/announcer/vox_fem/invalid.ogg', + "invalidate" = 'sound/announcer/vox_fem/invalidate.ogg', + "invasion" = 'sound/announcer/vox_fem/invasion.ogg', + "irradiate" = 'sound/announcer/vox_fem/irradiate.ogg', + "is" = 'sound/announcer/vox_fem/is.ogg', + "it" = 'sound/announcer/vox_fem/it.ogg', + "its" = 'sound/announcer/vox_fem/its.ogg', + "j" = 'sound/announcer/vox_fem/j.ogg', + "janitor" = 'sound/announcer/vox_fem/janitor.ogg', + "jesus" = 'sound/announcer/vox_fem/jesus.ogg', + "job" = 'sound/announcer/vox_fem/job.ogg', + "jobs" = 'sound/announcer/vox_fem/jobs.ogg', + "johnson" = 'sound/announcer/vox_fem/johnson.ogg', + "jolly" = 'sound/announcer/vox_fem/jolly.ogg', + "juliet" = 'sound/announcer/vox_fem/juliet.ogg', + "k" = 'sound/announcer/vox_fem/k.ogg', + "kelvin" = 'sound/announcer/vox_fem/kelvin.ogg', + "key" = 'sound/announcer/vox_fem/key.ogg', + "kidnapped" = 'sound/announcer/vox_fem/kidnapped.ogg', + "kidnapping" = 'sound/announcer/vox_fem/kidnapping.ogg', + "kill" = 'sound/announcer/vox_fem/kill.ogg', + "killed" = 'sound/announcer/vox_fem/killed.ogg', + "killer" = 'sound/announcer/vox_fem/killer.ogg', + "kilo" = 'sound/announcer/vox_fem/kilo.ogg', + "kit" = 'sound/announcer/vox_fem/kit.ogg', + "kitchen" = 'sound/announcer/vox_fem/kitchen.ogg', + "l" = 'sound/announcer/vox_fem/l.ogg', + "lab" = 'sound/announcer/vox_fem/lab.ogg', + "lambda" = 'sound/announcer/vox_fem/lambda.ogg', + "large" = 'sound/announcer/vox_fem/large.ogg', + "laser" = 'sound/announcer/vox_fem/laser.ogg', + "last" = 'sound/announcer/vox_fem/last.ogg', + "launch" = 'sound/announcer/vox_fem/launch.ogg', + "lavaland" = 'sound/announcer/vox_fem/lavaland.ogg', + "law" = 'sound/announcer/vox_fem/law.ogg', + "laws" = 'sound/announcer/vox_fem/laws.ogg', + "lawyer" = 'sound/announcer/vox_fem/lawyer.ogg', + "leak" = 'sound/announcer/vox_fem/leak.ogg', + "leave" = 'sound/announcer/vox_fem/leave.ogg', + "left" = 'sound/announcer/vox_fem/left.ogg', + "legal" = 'sound/announcer/vox_fem/legal.ogg', + "level" = 'sound/announcer/vox_fem/level.ogg', + "lever" = 'sound/announcer/vox_fem/lever.ogg', + "library" = 'sound/announcer/vox_fem/library.ogg', + "lie" = 'sound/announcer/vox_fem/lie.ogg', + "lieutenant" = 'sound/announcer/vox_fem/lieutenant.ogg', + "life" = 'sound/announcer/vox_fem/life.ogg', + "lifeform" = 'sound/announcer/vox_fem/lifeform.ogg', + "light" = 'sound/announcer/vox_fem/light.ogg', + "lightbulb" = 'sound/announcer/vox_fem/lightbulb.ogg', + "lima" = 'sound/announcer/vox_fem/lima.ogg', + "limit" = 'sound/announcer/vox_fem/limit.ogg', + "limited" = 'sound/announcer/vox_fem/limited.ogg', + "liquid" = 'sound/announcer/vox_fem/liquid.ogg', + "list" = 'sound/announcer/vox_fem/list.ogg', + "live" = 'sound/announcer/vox_fem/live.ogg', + "live2" = 'sound/announcer/vox_fem/live2.ogg', + "lizard" = 'sound/announcer/vox_fem/lizard.ogg', + "lizardperson" = 'sound/announcer/vox_fem/lizardperson.ogg', + "loading" = 'sound/announcer/vox_fem/loading.ogg', + "locate" = 'sound/announcer/vox_fem/locate.ogg', + "located" = 'sound/announcer/vox_fem/located.ogg', + "location" = 'sound/announcer/vox_fem/location.ogg', + "lock" = 'sound/announcer/vox_fem/lock.ogg', + "locked" = 'sound/announcer/vox_fem/locked.ogg', + "locker" = 'sound/announcer/vox_fem/locker.ogg', + "lockout" = 'sound/announcer/vox_fem/lockout.ogg', + "long" = 'sound/announcer/vox_fem/long.ogg', + "look" = 'sound/announcer/vox_fem/look.ogg', + "loop" = 'sound/announcer/vox_fem/loop.ogg', + "loose" = 'sound/announcer/vox_fem/loose.ogg', + "lot" = 'sound/announcer/vox_fem/lot.ogg', + "lower" = 'sound/announcer/vox_fem/lower.ogg', + "lowest" = 'sound/announcer/vox_fem/lowest.ogg', + "lusty" = 'sound/announcer/vox_fem/lusty.ogg', + "m" = 'sound/announcer/vox_fem/m.ogg', + "machine" = 'sound/announcer/vox_fem/machine.ogg', + "made" = 'sound/announcer/vox_fem/made.ogg', + "magic" = 'sound/announcer/vox_fem/magic.ogg', + "magnetic" = 'sound/announcer/vox_fem/magnetic.ogg', + "main" = 'sound/announcer/vox_fem/main.ogg', + "maintainer" = 'sound/announcer/vox_fem/maintainer.ogg', + "maintenance" = 'sound/announcer/vox_fem/maintenance.ogg', + "major" = 'sound/announcer/vox_fem/major.ogg', + "making" = 'sound/announcer/vox_fem/making.ogg', + "malfunction" = 'sound/announcer/vox_fem/malfunction.ogg', + "man" = 'sound/announcer/vox_fem/man.ogg', + "many" = 'sound/announcer/vox_fem/many.ogg', + "mass" = 'sound/announcer/vox_fem/mass.ogg', + "materials" = 'sound/announcer/vox_fem/materials.ogg', + "maximum" = 'sound/announcer/vox_fem/maximum.ogg', + "may" = 'sound/announcer/vox_fem/may.ogg', + "me" = 'sound/announcer/vox_fem/me.ogg', + "mean" = 'sound/announcer/vox_fem/mean.ogg', + "means" = 'sound/announcer/vox_fem/means.ogg', + "meat" = 'sound/announcer/vox_fem/meat.ogg', + "medbay" = 'sound/announcer/vox_fem/medbay.ogg', + "medical" = 'sound/announcer/vox_fem/medical.ogg', + "medium" = 'sound/announcer/vox_fem/medium.ogg', + "megafauna" = 'sound/announcer/vox_fem/megafauna.ogg', + "men" = 'sound/announcer/vox_fem/men.ogg', + "mercy" = 'sound/announcer/vox_fem/mercy.ogg', + "mesa" = 'sound/announcer/vox_fem/mesa.ogg', + "meson" = 'sound/announcer/vox_fem/meson.ogg', + "message" = 'sound/announcer/vox_fem/message.ogg', + "meter" = 'sound/announcer/vox_fem/meter.ogg', + "method" = 'sound/announcer/vox_fem/method.ogg', + "miasma" = 'sound/announcer/vox_fem/miasma.ogg', + "micro" = 'sound/announcer/vox_fem/micro.ogg', + "middle" = 'sound/announcer/vox_fem/middle.ogg', + "mike" = 'sound/announcer/vox_fem/mike.ogg', + "miles" = 'sound/announcer/vox_fem/miles.ogg', + "military" = 'sound/announcer/vox_fem/military.ogg', + "milli" = 'sound/announcer/vox_fem/milli.ogg', + "million" = 'sound/announcer/vox_fem/million.ogg', + "mime" = 'sound/announcer/vox_fem/mime.ogg', + "minefield" = 'sound/announcer/vox_fem/minefield.ogg', + "miner" = 'sound/announcer/vox_fem/miner.ogg', + "minimum" = 'sound/announcer/vox_fem/minimum.ogg', + "minor" = 'sound/announcer/vox_fem/minor.ogg', + "minute" = 'sound/announcer/vox_fem/minute.ogg', + "minutes" = 'sound/announcer/vox_fem/minutes.ogg', + "mister" = 'sound/announcer/vox_fem/mister.ogg', + "mixture" = 'sound/announcer/vox_fem/mixture.ogg', + "mode" = 'sound/announcer/vox_fem/mode.ogg', + "modification" = 'sound/announcer/vox_fem/modification.ogg', + "money" = 'sound/announcer/vox_fem/money.ogg', + "monkey" = 'sound/announcer/vox_fem/monkey.ogg', + "most" = 'sound/announcer/vox_fem/most.ogg', + "moth" = 'sound/announcer/vox_fem/moth.ogg', + "mothperson" = 'sound/announcer/vox_fem/mothperson.ogg', + "motor" = 'sound/announcer/vox_fem/motor.ogg', + "motorpool" = 'sound/announcer/vox_fem/motorpool.ogg', + "move" = 'sound/announcer/vox_fem/move.ogg', + "moved" = 'sound/announcer/vox_fem/moved.ogg', + "moving" = 'sound/announcer/vox_fem/moving.ogg', + "multitude" = 'sound/announcer/vox_fem/multitude.ogg', + "murder" = 'sound/announcer/vox_fem/murder.ogg', + "murderer" = 'sound/announcer/vox_fem/murderer.ogg', + "must" = 'sound/announcer/vox_fem/must.ogg', + "my" = 'sound/announcer/vox_fem/my.ogg', + "mythic" = 'sound/announcer/vox_fem/mythic.ogg', + "n" = 'sound/announcer/vox_fem/n.ogg', + "nanotrasen" = 'sound/announcer/vox_fem/nanotrasen.ogg', + "near" = 'sound/announcer/vox_fem/near.ogg', + "nearest" = 'sound/announcer/vox_fem/nearest.ogg', + "nearly" = 'sound/announcer/vox_fem/nearly.ogg', + "need" = 'sound/announcer/vox_fem/need.ogg', + "never" = 'sound/announcer/vox_fem/never.ogg', + "nice" = 'sound/announcer/vox_fem/nice.ogg', + "night" = 'sound/announcer/vox_fem/night.ogg', + "nine" = 'sound/announcer/vox_fem/nine.ogg', + "nineteen" = 'sound/announcer/vox_fem/nineteen.ogg', + "ninety" = 'sound/announcer/vox_fem/ninety.ogg', + "nitrogen" = 'sound/announcer/vox_fem/nitrogen.ogg', + "no" = 'sound/announcer/vox_fem/no.ogg', + "nominal" = 'sound/announcer/vox_fem/nominal.ogg', + "none" = 'sound/announcer/vox_fem/none.ogg', + "normal" = 'sound/announcer/vox_fem/normal.ogg', + "normally" = 'sound/announcer/vox_fem/normally.ogg', + "north" = 'sound/announcer/vox_fem/north.ogg', + "northeast" = 'sound/announcer/vox_fem/northeast.ogg', + "northwest" = 'sound/announcer/vox_fem/northwest.ogg', + "not" = 'sound/announcer/vox_fem/not.ogg', + "notably" = 'sound/announcer/vox_fem/notably.ogg', + "november" = 'sound/announcer/vox_fem/november.ogg', + "now" = 'sound/announcer/vox_fem/now.ogg', + "nuclear" = 'sound/announcer/vox_fem/nuclear.ogg', + "nuke" = 'sound/announcer/vox_fem/nuke.ogg', + "number" = 'sound/announcer/vox_fem/number.ogg', + "o" = 'sound/announcer/vox_fem/o.ogg', + "object" = 'sound/announcer/vox_fem/object.ogg', + "objective" = 'sound/announcer/vox_fem/objective.ogg', + "obliterate" = 'sound/announcer/vox_fem/obliterate.ogg', + "obliterated" = 'sound/announcer/vox_fem/obliterated.ogg', + "obliterating" = 'sound/announcer/vox_fem/obliterating.ogg', + "observation" = 'sound/announcer/vox_fem/observation.ogg', + "obtain" = 'sound/announcer/vox_fem/obtain.ogg', + "of" = 'sound/announcer/vox_fem/of.ogg', + "off" = 'sound/announcer/vox_fem/off.ogg', + "office" = 'sound/announcer/vox_fem/office.ogg', + "officer" = 'sound/announcer/vox_fem/officer.ogg', + "oh" = 'sound/announcer/vox_fem/oh.ogg', + "ok" = 'sound/announcer/vox_fem/ok.ogg', + "okay" = 'sound/announcer/vox_fem/okay.ogg', + "on" = 'sound/announcer/vox_fem/on.ogg', + "once" = 'sound/announcer/vox_fem/once.ogg', + "one" = 'sound/announcer/vox_fem/one.ogg', + "oof" = 'sound/announcer/vox_fem/oof.ogg', + "open" = 'sound/announcer/vox_fem/open.ogg', + "opened" = 'sound/announcer/vox_fem/opened.ogg', + "opening" = 'sound/announcer/vox_fem/opening.ogg', + "operating" = 'sound/announcer/vox_fem/operating.ogg', + "operations" = 'sound/announcer/vox_fem/operations.ogg', + "operative" = 'sound/announcer/vox_fem/operative.ogg', + "option" = 'sound/announcer/vox_fem/option.ogg', + "or" = 'sound/announcer/vox_fem/or.ogg', + "order" = 'sound/announcer/vox_fem/order.ogg', + "ordered" = 'sound/announcer/vox_fem/ordered.ogg', + "ordering" = 'sound/announcer/vox_fem/ordering.ogg', + "organic" = 'sound/announcer/vox_fem/organic.ogg', + "oscar" = 'sound/announcer/vox_fem/oscar.ogg', + "out" = 'sound/announcer/vox_fem/out.ogg', + "output" = 'sound/announcer/vox_fem/output.ogg', + "outside" = 'sound/announcer/vox_fem/outside.ogg', + "over" = 'sound/announcer/vox_fem/over.ogg', + "overload" = 'sound/announcer/vox_fem/overload.ogg', + "override" = 'sound/announcer/vox_fem/override.ogg', + "own" = 'sound/announcer/vox_fem/own.ogg', + "oxygen" = 'sound/announcer/vox_fem/oxygen.ogg', + "p" = 'sound/announcer/vox_fem/p.ogg', + "pacification" = 'sound/announcer/vox_fem/pacification.ogg', + "pacify" = 'sound/announcer/vox_fem/pacify.ogg', + "pain" = 'sound/announcer/vox_fem/pain.ogg', + "pal" = 'sound/announcer/vox_fem/pal.ogg', + "panel" = 'sound/announcer/vox_fem/panel.ogg', + "panting" = 'sound/announcer/vox_fem/panting.ogg', + "pathetic" = 'sound/announcer/vox_fem/pathetic.ogg', + "pda" = 'sound/announcer/vox_fem/pda.ogg', + "percent" = 'sound/announcer/vox_fem/percent.ogg', + "perfect" = 'sound/announcer/vox_fem/perfect.ogg', + "perhaps" = 'sound/announcer/vox_fem/perhaps.ogg', + "perimeter" = 'sound/announcer/vox_fem/perimeter.ogg', + "permitted" = 'sound/announcer/vox_fem/permitted.ogg', + "personal" = 'sound/announcer/vox_fem/personal.ogg', + "personnel" = 'sound/announcer/vox_fem/personnel.ogg', + "pipe" = 'sound/announcer/vox_fem/pipe.ogg', + "piping" = 'sound/announcer/vox_fem/piping.ogg', + "piss" = 'sound/announcer/vox_fem/piss.ogg', + "plant" = 'sound/announcer/vox_fem/plant.ogg', + "plasma" = 'sound/announcer/vox_fem/plasma.ogg', + "plasmaman" = 'sound/announcer/vox_fem/plasmaman.ogg', + "platform" = 'sound/announcer/vox_fem/platform.ogg', + "plating" = 'sound/announcer/vox_fem/plating.ogg', + "plausible" = 'sound/announcer/vox_fem/plausible.ogg', + "please" = 'sound/announcer/vox_fem/please.ogg', + "pluoxium" = 'sound/announcer/vox_fem/pluoxium.ogg', + "point" = 'sound/announcer/vox_fem/point.ogg', + "port" = 'sound/announcer/vox_fem/port.ogg', + "portal" = 'sound/announcer/vox_fem/portal.ogg', + "portion" = 'sound/announcer/vox_fem/portion.ogg', + "possible" = 'sound/announcer/vox_fem/possible.ogg', + "power" = 'sound/announcer/vox_fem/power.ogg', + "powered" = 'sound/announcer/vox_fem/powered.ogg', + "powering" = 'sound/announcer/vox_fem/powering.ogg', + "premature" = 'sound/announcer/vox_fem/premature.ogg', + "prematurely" = 'sound/announcer/vox_fem/prematurely.ogg', + "presence" = 'sound/announcer/vox_fem/presence.ogg', + "present" = 'sound/announcer/vox_fem/present.ogg', + "presents" = 'sound/announcer/vox_fem/presents.ogg', + "press" = 'sound/announcer/vox_fem/press.ogg', + "pressure" = 'sound/announcer/vox_fem/pressure.ogg', + "primary" = 'sound/announcer/vox_fem/primary.ogg', + "priority" = 'sound/announcer/vox_fem/priority.ogg', + "prison" = 'sound/announcer/vox_fem/prison.ogg', + "prisoner" = 'sound/announcer/vox_fem/prisoner.ogg', + "proceed" = 'sound/announcer/vox_fem/proceed.ogg', + "processing" = 'sound/announcer/vox_fem/processing.ogg', + "progress" = 'sound/announcer/vox_fem/progress.ogg', + "projectile" = 'sound/announcer/vox_fem/projectile.ogg', + "proper" = 'sound/announcer/vox_fem/proper.ogg', + "propulsion" = 'sound/announcer/vox_fem/propulsion.ogg', + "prosecute" = 'sound/announcer/vox_fem/prosecute.ogg', + "protect" = 'sound/announcer/vox_fem/protect.ogg', + "protected" = 'sound/announcer/vox_fem/protected.ogg', + "protection" = 'sound/announcer/vox_fem/protection.ogg', + "protective" = 'sound/announcer/vox_fem/protective.ogg', + "proto-nitrate" = 'sound/announcer/vox_fem/proto-nitrate.ogg', + "pull" = 'sound/announcer/vox_fem/pull.ogg', + "pulled" = 'sound/announcer/vox_fem/pulled.ogg', + "pulling" = 'sound/announcer/vox_fem/pulling.ogg', + "pump" = 'sound/announcer/vox_fem/pump.ogg', + "pumps" = 'sound/announcer/vox_fem/pumps.ogg', + "push" = 'sound/announcer/vox_fem/push.ogg', + "put" = 'sound/announcer/vox_fem/put.ogg', + "q" = 'sound/announcer/vox_fem/q.ogg', + "quantum" = 'sound/announcer/vox_fem/quantum.ogg', + "quarantine" = 'sound/announcer/vox_fem/quarantine.ogg', + "quartermaster" = 'sound/announcer/vox_fem/quartermaster.ogg', + "quebec" = 'sound/announcer/vox_fem/quebec.ogg', + "queen" = 'sound/announcer/vox_fem/queen.ogg', + "question" = 'sound/announcer/vox_fem/question.ogg', + "questionable" = 'sound/announcer/vox_fem/questionable.ogg', + "questioning" = 'sound/announcer/vox_fem/questioning.ogg', + "quick" = 'sound/announcer/vox_fem/quick.ogg', + "quit" = 'sound/announcer/vox_fem/quit.ogg', + "r" = 'sound/announcer/vox_fem/r.ogg', + "radiation" = 'sound/announcer/vox_fem/radiation.ogg', + "radioactive" = 'sound/announcer/vox_fem/radioactive.ogg', + "rads" = 'sound/announcer/vox_fem/rads.ogg', + "raider" = 'sound/announcer/vox_fem/raider.ogg', + "raiders" = 'sound/announcer/vox_fem/raiders.ogg', + "rapid" = 'sound/announcer/vox_fem/rapid.ogg', + "reach" = 'sound/announcer/vox_fem/reach.ogg', + "reached" = 'sound/announcer/vox_fem/reached.ogg', + "reactor" = 'sound/announcer/vox_fem/reactor.ogg', + "red" = 'sound/announcer/vox_fem/red.ogg', + "relay" = 'sound/announcer/vox_fem/relay.ogg', + "release" = 'sound/announcer/vox_fem/release.ogg', + "released" = 'sound/announcer/vox_fem/released.ogg', + "releasing" = 'sound/announcer/vox_fem/releasing.ogg', + "remaining" = 'sound/announcer/vox_fem/remaining.ogg', + "removal" = 'sound/announcer/vox_fem/removal.ogg', + "remove" = 'sound/announcer/vox_fem/remove.ogg', + "removed" = 'sound/announcer/vox_fem/removed.ogg', + "removing" = 'sound/announcer/vox_fem/removing.ogg', + "renegade" = 'sound/announcer/vox_fem/renegade.ogg', + "repair" = 'sound/announcer/vox_fem/repair.ogg', + "report" = 'sound/announcer/vox_fem/report.ogg', + "reports" = 'sound/announcer/vox_fem/reports.ogg', + "request" = 'sound/announcer/vox_fem/request.ogg', + "requested" = 'sound/announcer/vox_fem/requested.ogg', + "requesting" = 'sound/announcer/vox_fem/requesting.ogg', + "require" = 'sound/announcer/vox_fem/require.ogg', + "required" = 'sound/announcer/vox_fem/required.ogg', + "research" = 'sound/announcer/vox_fem/research.ogg', + "resevoir" = 'sound/announcer/vox_fem/resevoir.ogg', + "resistance" = 'sound/announcer/vox_fem/resistance.ogg', + "resistant" = 'sound/announcer/vox_fem/resistant.ogg', + "resisting" = 'sound/announcer/vox_fem/resisting.ogg', + "resonance" = 'sound/announcer/vox_fem/resonance.ogg', + "rest" = 'sound/announcer/vox_fem/rest.ogg', + "restoration" = 'sound/announcer/vox_fem/restoration.ogg', + "revolution" = 'sound/announcer/vox_fem/revolution.ogg', + "revolutionary" = 'sound/announcer/vox_fem/revolutionary.ogg', + "right" = 'sound/announcer/vox_fem/right.ogg', + "riot" = 'sound/announcer/vox_fem/riot.ogg', + "roboticist" = 'sound/announcer/vox_fem/roboticist.ogg', + "rocket" = 'sound/announcer/vox_fem/rocket.ogg', + "roger" = 'sound/announcer/vox_fem/roger.ogg', + "rogue" = 'sound/announcer/vox_fem/rogue.ogg', + "romeo" = 'sound/announcer/vox_fem/romeo.ogg', + "room" = 'sound/announcer/vox_fem/room.ogg', + "round" = 'sound/announcer/vox_fem/round.ogg', + "run" = 'sound/announcer/vox_fem/run.ogg', + "rune" = 'sound/announcer/vox_fem/rune.ogg', + "runtime" = 'sound/announcer/vox_fem/runtime.ogg', + "s" = 'sound/announcer/vox_fem/s.ogg', + "sabotage" = 'sound/announcer/vox_fem/sabotage.ogg', + "sabotaged" = 'sound/announcer/vox_fem/sabotaged.ogg', + "sabotaging" = 'sound/announcer/vox_fem/sabotaging.ogg', + "safe" = 'sound/announcer/vox_fem/safe.ogg', + "safety" = 'sound/announcer/vox_fem/safety.ogg', + "sairhorn" = 'sound/announcer/vox_fem/sairhorn.ogg', + "same" = 'sound/announcer/vox_fem/same.ogg', + "sarah" = 'sound/announcer/vox_fem/sarah.ogg', + "sargeant" = 'sound/announcer/vox_fem/sargeant.ogg', + "satellite" = 'sound/announcer/vox_fem/satellite.ogg', + "save" = 'sound/announcer/vox_fem/save.ogg', + "saw" = 'sound/announcer/vox_fem/saw.ogg', + "scan" = 'sound/announcer/vox_fem/scan.ogg', + "scanned" = 'sound/announcer/vox_fem/scanned.ogg', + "scanner" = 'sound/announcer/vox_fem/scanner.ogg', + "scanners" = 'sound/announcer/vox_fem/scanners.ogg', + "scanning" = 'sound/announcer/vox_fem/scanning.ogg', + "scensor" = 'sound/announcer/vox_fem/scensor.ogg', + "science" = 'sound/announcer/vox_fem/science.ogg', + "scientist" = 'sound/announcer/vox_fem/scientist.ogg', + "scream" = 'sound/announcer/vox_fem/scream.ogg', + "screen" = 'sound/announcer/vox_fem/screen.ogg', + "screw" = 'sound/announcer/vox_fem/screw.ogg', + "search" = 'sound/announcer/vox_fem/search.ogg', + "second" = 'sound/announcer/vox_fem/second.ogg', + "secondary" = 'sound/announcer/vox_fem/secondary.ogg', + "seconds" = 'sound/announcer/vox_fem/seconds.ogg', + "section" = 'sound/announcer/vox_fem/section.ogg', + "sector" = 'sound/announcer/vox_fem/sector.ogg', + "secure" = 'sound/announcer/vox_fem/secure.ogg', + "secured" = 'sound/announcer/vox_fem/secured.ogg', + "security" = 'sound/announcer/vox_fem/security.ogg', + "seen" = 'sound/announcer/vox_fem/seen.ogg', + "select" = 'sound/announcer/vox_fem/select.ogg', + "selected" = 'sound/announcer/vox_fem/selected.ogg', + "self" = 'sound/announcer/vox_fem/self.ogg', + "sensors" = 'sound/announcer/vox_fem/sensors.ogg', + "server" = 'sound/announcer/vox_fem/server.ogg', + "service" = 'sound/announcer/vox_fem/service.ogg', + "set" = 'sound/announcer/vox_fem/set.ogg', + "seven" = 'sound/announcer/vox_fem/seven.ogg', + "seventeen" = 'sound/announcer/vox_fem/seventeen.ogg', + "seventy" = 'sound/announcer/vox_fem/seventy.ogg', + "sever" = 'sound/announcer/vox_fem/sever.ogg', + "severe" = 'sound/announcer/vox_fem/severe.ogg', + "severed" = 'sound/announcer/vox_fem/severed.ogg', + "severing" = 'sound/announcer/vox_fem/severing.ogg', + "sewage" = 'sound/announcer/vox_fem/sewage.ogg', + "sewer" = 'sound/announcer/vox_fem/sewer.ogg', + "shaft" = 'sound/announcer/vox_fem/shaft.ogg', + "shame" = 'sound/announcer/vox_fem/shame.ogg', + "shameful" = 'sound/announcer/vox_fem/shameful.ogg', + "shameless" = 'sound/announcer/vox_fem/shameless.ogg', + "shard" = 'sound/announcer/vox_fem/shard.ogg', + "she" = 'sound/announcer/vox_fem/she.ogg', + "shield" = 'sound/announcer/vox_fem/shield.ogg', + "shift" = 'sound/announcer/vox_fem/shift.ogg', + "shifts" = 'sound/announcer/vox_fem/shifts.ogg', + "shipment" = 'sound/announcer/vox_fem/shipment.ogg', + "shirt" = 'sound/announcer/vox_fem/shirt.ogg', + "shit" = 'sound/announcer/vox_fem/shit.ogg', + "shitlord" = 'sound/announcer/vox_fem/shitlord.ogg', + "shits" = 'sound/announcer/vox_fem/shits.ogg', + "shitting" = 'sound/announcer/vox_fem/shitting.ogg', + "shock" = 'sound/announcer/vox_fem/shock.ogg', + "shonk" = 'sound/announcer/vox_fem/shonk.ogg', + "shoot" = 'sound/announcer/vox_fem/shoot.ogg', + "shower" = 'sound/announcer/vox_fem/shower.ogg', + "shut" = 'sound/announcer/vox_fem/shut.ogg', + "shuttle" = 'sound/announcer/vox_fem/shuttle.ogg', + "sick" = 'sound/announcer/vox_fem/sick.ogg', + "side" = 'sound/announcer/vox_fem/side.ogg', + "sides" = 'sound/announcer/vox_fem/sides.ogg', + "sierra" = 'sound/announcer/vox_fem/sierra.ogg', + "sight" = 'sound/announcer/vox_fem/sight.ogg', + "silicon" = 'sound/announcer/vox_fem/silicon.ogg', + "silo" = 'sound/announcer/vox_fem/silo.ogg', + "single" = 'sound/announcer/vox_fem/single.ogg', + "singularity" = 'sound/announcer/vox_fem/singularity.ogg', + "siphon" = 'sound/announcer/vox_fem/siphon.ogg', + "siphoning" = 'sound/announcer/vox_fem/siphoning.ogg', + "six" = 'sound/announcer/vox_fem/six.ogg', + "sixteen" = 'sound/announcer/vox_fem/sixteen.ogg', + "sixty" = 'sound/announcer/vox_fem/sixty.ogg', + "skeleton" = 'sound/announcer/vox_fem/skeleton.ogg', + "slaughter" = 'sound/announcer/vox_fem/slaughter.ogg', + "slime" = 'sound/announcer/vox_fem/slime.ogg', + "slip" = 'sound/announcer/vox_fem/slip.ogg', + "slippery" = 'sound/announcer/vox_fem/slippery.ogg', + "slow" = 'sound/announcer/vox_fem/slow.ogg', + "sm" = 'sound/announcer/vox_fem/sm.ogg', + "small" = 'sound/announcer/vox_fem/small.ogg', + "sockmuncher" = 'sound/announcer/vox_fem/sockmuncher.ogg', + "soft" = 'sound/announcer/vox_fem/soft.ogg', + "solar" = 'sound/announcer/vox_fem/solar.ogg', + "solars" = 'sound/announcer/vox_fem/solars.ogg', + "soldier" = 'sound/announcer/vox_fem/soldier.ogg', + "some" = 'sound/announcer/vox_fem/some.ogg', + "someone" = 'sound/announcer/vox_fem/someone.ogg', + "something" = 'sound/announcer/vox_fem/something.ogg', + "son" = 'sound/announcer/vox_fem/son.ogg', + "sorry" = 'sound/announcer/vox_fem/sorry.ogg', + "source" = 'sound/announcer/vox_fem/source.ogg', + "south" = 'sound/announcer/vox_fem/south.ogg', + "southeast" = 'sound/announcer/vox_fem/southeast.ogg', + "southwest" = 'sound/announcer/vox_fem/southwest.ogg', + "space" = 'sound/announcer/vox_fem/space.ogg', + "special" = 'sound/announcer/vox_fem/special.ogg', + "spew" = 'sound/announcer/vox_fem/spew.ogg', + "squad" = 'sound/announcer/vox_fem/squad.ogg', + "square" = 'sound/announcer/vox_fem/square.ogg', + "ss13" = 'sound/announcer/vox_fem/ss13.ogg', + "stairway" = 'sound/announcer/vox_fem/stairway.ogg', + "starboard" = 'sound/announcer/vox_fem/starboard.ogg', + "start" = 'sound/announcer/vox_fem/start.ogg', + "starts" = 'sound/announcer/vox_fem/starts.ogg', + "station" = 'sound/announcer/vox_fem/station.ogg', + "stations" = 'sound/announcer/vox_fem/stations.ogg', + "stationwide" = 'sound/announcer/vox_fem/stationwide.ogg', + "status" = 'sound/announcer/vox_fem/status.ogg', + "stay" = 'sound/announcer/vox_fem/stay.ogg', + "sterile" = 'sound/announcer/vox_fem/sterile.ogg', + "sterilization" = 'sound/announcer/vox_fem/sterilization.ogg', + "stop" = 'sound/announcer/vox_fem/stop.ogg', + "storage" = 'sound/announcer/vox_fem/storage.ogg', + "strong" = 'sound/announcer/vox_fem/strong.ogg', + "stuck" = 'sound/announcer/vox_fem/stuck.ogg', + "sub" = 'sound/announcer/vox_fem/sub.ogg', + "subsurface" = 'sound/announcer/vox_fem/subsurface.ogg', + "such" = 'sound/announcer/vox_fem/such.ogg', + "sudden" = 'sound/announcer/vox_fem/sudden.ogg', + "suffer" = 'sound/announcer/vox_fem/suffer.ogg', + "suit" = 'sound/announcer/vox_fem/suit.ogg', + "suited" = 'sound/announcer/vox_fem/suited.ogg', + "super" = 'sound/announcer/vox_fem/super.ogg', + "superconducting" = 'sound/announcer/vox_fem/superconducting.ogg', + "supercooled" = 'sound/announcer/vox_fem/supercooled.ogg', + "supermatter" = 'sound/announcer/vox_fem/supermatter.ogg', + "supply" = 'sound/announcer/vox_fem/supply.ogg', + "surface" = 'sound/announcer/vox_fem/surface.ogg', + "surrender" = 'sound/announcer/vox_fem/surrender.ogg', + "surround" = 'sound/announcer/vox_fem/surround.ogg', + "surrounded" = 'sound/announcer/vox_fem/surrounded.ogg', + "sweating" = 'sound/announcer/vox_fem/sweating.ogg', + "swhitenoise" = 'sound/announcer/vox_fem/swhitenoise.ogg', + "switch" = 'sound/announcer/vox_fem/switch.ogg', + "syndicate" = 'sound/announcer/vox_fem/syndicate.ogg', + "system" = 'sound/announcer/vox_fem/system.ogg', + "systems" = 'sound/announcer/vox_fem/systems.ogg', + "t" = 'sound/announcer/vox_fem/t.ogg', + "table" = 'sound/announcer/vox_fem/table.ogg', + "tactical" = 'sound/announcer/vox_fem/tactical.ogg', + "taildragger" = 'sound/announcer/vox_fem/taildragger.ogg', + "take" = 'sound/announcer/vox_fem/take.ogg', + "talk" = 'sound/announcer/vox_fem/talk.ogg', + "tampered" = 'sound/announcer/vox_fem/tampered.ogg', + "tango" = 'sound/announcer/vox_fem/tango.ogg', + "tank" = 'sound/announcer/vox_fem/tank.ogg', + "target" = 'sound/announcer/vox_fem/target.ogg', + "team" = 'sound/announcer/vox_fem/team.ogg', + "tech" = 'sound/announcer/vox_fem/tech.ogg', + "technician" = 'sound/announcer/vox_fem/technician.ogg', + "technology" = 'sound/announcer/vox_fem/technology.ogg', + "teleporter" = 'sound/announcer/vox_fem/teleporter.ogg', + "temperature" = 'sound/announcer/vox_fem/temperature.ogg', + "temporal" = 'sound/announcer/vox_fem/temporal.ogg', + "ten" = 'sound/announcer/vox_fem/ten.ogg', + "terminal" = 'sound/announcer/vox_fem/terminal.ogg', + "terminate" = 'sound/announcer/vox_fem/terminate.ogg', + "terminated" = 'sound/announcer/vox_fem/terminated.ogg', + "termination" = 'sound/announcer/vox_fem/termination.ogg', + "tesla" = 'sound/announcer/vox_fem/tesla.ogg', + "test" = 'sound/announcer/vox_fem/test.ogg', + "text" = 'sound/announcer/vox_fem/text.ogg', + "thank" = 'sound/announcer/vox_fem/thank.ogg', + "thanks" = 'sound/announcer/vox_fem/thanks.ogg', + "that" = 'sound/announcer/vox_fem/that.ogg', + "the" = 'sound/announcer/vox_fem/the.ogg', + "theater" = 'sound/announcer/vox_fem/theater.ogg', + "them" = 'sound/announcer/vox_fem/them.ogg', + "then" = 'sound/announcer/vox_fem/then.ogg', + "there" = 'sound/announcer/vox_fem/there.ogg', + "they" = 'sound/announcer/vox_fem/they.ogg', + "third" = 'sound/announcer/vox_fem/third.ogg', + "thirteen" = 'sound/announcer/vox_fem/thirteen.ogg', + "thirty" = 'sound/announcer/vox_fem/thirty.ogg', + "this" = 'sound/announcer/vox_fem/this.ogg', + "those" = 'sound/announcer/vox_fem/those.ogg', + "thousand" = 'sound/announcer/vox_fem/thousand.ogg', + "threat" = 'sound/announcer/vox_fem/threat.ogg', + "three" = 'sound/announcer/vox_fem/three.ogg', + "through" = 'sound/announcer/vox_fem/through.ogg', + "tick" = 'sound/announcer/vox_fem/tick.ogg', + "tide" = 'sound/announcer/vox_fem/tide.ogg', + "tile" = 'sound/announcer/vox_fem/tile.ogg', + "time" = 'sound/announcer/vox_fem/time.ogg', + "tiny" = 'sound/announcer/vox_fem/tiny.ogg', + "to" = 'sound/announcer/vox_fem/to.ogg', + "top" = 'sound/announcer/vox_fem/top.ogg', + "topside" = 'sound/announcer/vox_fem/topside.ogg', + "touch" = 'sound/announcer/vox_fem/touch.ogg', + "touched" = 'sound/announcer/vox_fem/touched.ogg', + "touching" = 'sound/announcer/vox_fem/touching.ogg', + "towards" = 'sound/announcer/vox_fem/towards.ogg', + "toxins" = 'sound/announcer/vox_fem/toxins.ogg', + "track" = 'sound/announcer/vox_fem/track.ogg', + "train" = 'sound/announcer/vox_fem/train.ogg', + "traitor" = 'sound/announcer/vox_fem/traitor.ogg', + "transportation" = 'sound/announcer/vox_fem/transportation.ogg', + "trigger" = 'sound/announcer/vox_fem/trigger.ogg', + "triggered" = 'sound/announcer/vox_fem/triggered.ogg', + "triggering" = 'sound/announcer/vox_fem/triggering.ogg', + "triple" = 'sound/announcer/vox_fem/triple.ogg', + "tritium" = 'sound/announcer/vox_fem/tritium.ogg', + "truck" = 'sound/announcer/vox_fem/truck.ogg', + "true" = 'sound/announcer/vox_fem/true.ogg', + "tunnel" = 'sound/announcer/vox_fem/tunnel.ogg', + "turn" = 'sound/announcer/vox_fem/turn.ogg', + "turned" = 'sound/announcer/vox_fem/turned.ogg', + "turret" = 'sound/announcer/vox_fem/turret.ogg', + "twelve" = 'sound/announcer/vox_fem/twelve.ogg', + "twenty" = 'sound/announcer/vox_fem/twenty.ogg', + "two" = 'sound/announcer/vox_fem/two.ogg', + "u" = 'sound/announcer/vox_fem/u.ogg', + "ugh" = 'sound/announcer/vox_fem/ugh.ogg', + "ughh" = 'sound/announcer/vox_fem/ughh.ogg', + "unable" = 'sound/announcer/vox_fem/unable.ogg', + "unauthorized" = 'sound/announcer/vox_fem/unauthorized.ogg', + "under" = 'sound/announcer/vox_fem/under.ogg', + "uniform" = 'sound/announcer/vox_fem/uniform.ogg', + "unique" = 'sound/announcer/vox_fem/unique.ogg', + "unknown" = 'sound/announcer/vox_fem/unknown.ogg', + "unlocked" = 'sound/announcer/vox_fem/unlocked.ogg', + "unsafe" = 'sound/announcer/vox_fem/unsafe.ogg', + "until" = 'sound/announcer/vox_fem/until.ogg', + "unwrench" = 'sound/announcer/vox_fem/unwrench.ogg', + "unwrenching" = 'sound/announcer/vox_fem/unwrenching.ogg', + "up" = 'sound/announcer/vox_fem/up.ogg', + "update" = 'sound/announcer/vox_fem/update.ogg', + "updated" = 'sound/announcer/vox_fem/updated.ogg', + "updating" = 'sound/announcer/vox_fem/updating.ogg', + "upload" = 'sound/announcer/vox_fem/upload.ogg', + "upper" = 'sound/announcer/vox_fem/upper.ogg', + "uranium" = 'sound/announcer/vox_fem/uranium.ogg', + "us" = 'sound/announcer/vox_fem/us.ogg', + "usa" = 'sound/announcer/vox_fem/usa.ogg', + "use" = 'sound/announcer/vox_fem/use.ogg', + "used" = 'sound/announcer/vox_fem/used.ogg', + "useful" = 'sound/announcer/vox_fem/useful.ogg', + "useless" = 'sound/announcer/vox_fem/useless.ogg', + "user" = 'sound/announcer/vox_fem/user.ogg', + "v" = 'sound/announcer/vox_fem/v.ogg', + "vacate" = 'sound/announcer/vox_fem/vacate.ogg', + "vacuum" = 'sound/announcer/vox_fem/vacuum.ogg', + "valid" = 'sound/announcer/vox_fem/valid.ogg', + "validate" = 'sound/announcer/vox_fem/validate.ogg', + "vapor" = 'sound/announcer/vox_fem/vapor.ogg', + "vendor" = 'sound/announcer/vox_fem/vendor.ogg', + "vent" = 'sound/announcer/vox_fem/vent.ogg', + "ventilation" = 'sound/announcer/vox_fem/ventilation.ogg', + "very" = 'sound/announcer/vox_fem/very.ogg', + "victor" = 'sound/announcer/vox_fem/victor.ogg', + "violated" = 'sound/announcer/vox_fem/violated.ogg', + "violation" = 'sound/announcer/vox_fem/violation.ogg', + "virologist" = 'sound/announcer/vox_fem/virologist.ogg', + "virology" = 'sound/announcer/vox_fem/virology.ogg', + "virus" = 'sound/announcer/vox_fem/virus.ogg', + "vitals" = 'sound/announcer/vox_fem/vitals.ogg', + "voltage" = 'sound/announcer/vox_fem/voltage.ogg', + "vox" = 'sound/announcer/vox_fem/vox.ogg', + "voxtest" = 'sound/announcer/vox_fem/voxtest.ogg', + "vox_login" = 'sound/announcer/vox_fem/vox_login.ogg', + "w" = 'sound/announcer/vox_fem/w.ogg', + "walk" = 'sound/announcer/vox_fem/walk.ogg', + "wall" = 'sound/announcer/vox_fem/wall.ogg', + "wanker" = 'sound/announcer/vox_fem/wanker.ogg', + "want" = 'sound/announcer/vox_fem/want.ogg', + "wanted" = 'sound/announcer/vox_fem/wanted.ogg', + "warden" = 'sound/announcer/vox_fem/warden.ogg', + "warm" = 'sound/announcer/vox_fem/warm.ogg', + "warn" = 'sound/announcer/vox_fem/warn.ogg', + "warning" = 'sound/announcer/vox_fem/warning.ogg', + "was" = 'sound/announcer/vox_fem/was.ogg', + "waste" = 'sound/announcer/vox_fem/waste.ogg', + "water" = 'sound/announcer/vox_fem/water.ogg', + "way" = 'sound/announcer/vox_fem/way.ogg', + "ways" = 'sound/announcer/vox_fem/ways.ogg', + "we" = 'sound/announcer/vox_fem/we.ogg', + "weak" = 'sound/announcer/vox_fem/weak.ogg', + "weapon" = 'sound/announcer/vox_fem/weapon.ogg', + "welcome" = 'sound/announcer/vox_fem/welcome.ogg', + "weld" = 'sound/announcer/vox_fem/weld.ogg', + "west" = 'sound/announcer/vox_fem/west.ogg', + "wew" = 'sound/announcer/vox_fem/wew.ogg', + "what" = 'sound/announcer/vox_fem/what.ogg', + "when" = 'sound/announcer/vox_fem/when.ogg', + "where" = 'sound/announcer/vox_fem/where.ogg', + "which" = 'sound/announcer/vox_fem/which.ogg', + "while" = 'sound/announcer/vox_fem/while.ogg', + "whiskey" = 'sound/announcer/vox_fem/whiskey.ogg', + "white" = 'sound/announcer/vox_fem/white.ogg', + "why" = 'sound/announcer/vox_fem/why.ogg', + "wilco" = 'sound/announcer/vox_fem/wilco.ogg', + "will" = 'sound/announcer/vox_fem/will.ogg', + "wing" = 'sound/announcer/vox_fem/wing.ogg', + "wire" = 'sound/announcer/vox_fem/wire.ogg', + "with" = 'sound/announcer/vox_fem/with.ogg', + "without" = 'sound/announcer/vox_fem/without.ogg', + "wizard" = 'sound/announcer/vox_fem/wizard.ogg', + "wood" = 'sound/announcer/vox_fem/wood.ogg', + "woody" = 'sound/announcer/vox_fem/woody.ogg', + "woop" = 'sound/announcer/vox_fem/woop.ogg', + "work" = 'sound/announcer/vox_fem/work.ogg', + "worked" = 'sound/announcer/vox_fem/worked.ogg', + "working" = 'sound/announcer/vox_fem/working.ogg', + "works" = 'sound/announcer/vox_fem/works.ogg', + "would" = 'sound/announcer/vox_fem/would.ogg', + "wouldnt" = 'sound/announcer/vox_fem/wouldnt.ogg', + "wow" = 'sound/announcer/vox_fem/wow.ogg', + "wrench" = 'sound/announcer/vox_fem/wrench.ogg', + "wrenching" = 'sound/announcer/vox_fem/wrenching.ogg', + "x" = 'sound/announcer/vox_fem/x.ogg', + "xeno" = 'sound/announcer/vox_fem/xeno.ogg', + "xenobiology" = 'sound/announcer/vox_fem/xenobiology.ogg', + "xenomorph" = 'sound/announcer/vox_fem/xenomorph.ogg', + "xenomorphs" = 'sound/announcer/vox_fem/xenomorphs.ogg', + "y" = 'sound/announcer/vox_fem/y.ogg', + "yankee" = 'sound/announcer/vox_fem/yankee.ogg', + "yards" = 'sound/announcer/vox_fem/yards.ogg', + "year" = 'sound/announcer/vox_fem/year.ogg', + "yellow" = 'sound/announcer/vox_fem/yellow.ogg', + "yes" = 'sound/announcer/vox_fem/yes.ogg', + "you" = 'sound/announcer/vox_fem/you.ogg', + "your" = 'sound/announcer/vox_fem/your.ogg', + "yourself" = 'sound/announcer/vox_fem/yourself.ogg', + "z" = 'sound/announcer/vox_fem/z.ogg', + "zap" = 'sound/announcer/vox_fem/zap.ogg', + "zauker" = 'sound/announcer/vox_fem/zauker.ogg', + "zero" = 'sound/announcer/vox_fem/zero.ogg', + "zombie" = 'sound/announcer/vox_fem/zombie.ogg', + "zone" = 'sound/announcer/vox_fem/zone.ogg', + "zulu" = 'sound/announcer/vox_fem/zulu.ogg', )) #endif diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 229ad70bb8471..85e749d276541 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -9,3 +9,9 @@ diag_hud_set_health() update_health_hud() return ..() + +/mob/living/silicon/get_visible_suicide_message() + return "[src] is powering down. It looks like [p_theyre()] trying to commit suicide." + +/mob/living/silicon/get_blind_suicide_message() + return "You hear a long, hissing electronic whine." diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index 2215864782325..f304cbbc400dc 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -13,7 +13,7 @@ message = "beeps." message_param = "beeps at %t." emote_type = EMOTE_AUDIBLE - sound = 'sound/machines/twobeep.ogg' + sound = 'sound/machines/beep/twobeep.ogg' /datum/emote/silicon/buzz key = "buzz" @@ -21,13 +21,13 @@ message = "buzzes." message_param = "buzzes at %t." emote_type = EMOTE_AUDIBLE - sound = 'sound/machines/buzz-sigh.ogg' + sound = 'sound/machines/buzz/buzz-sigh.ogg' /datum/emote/silicon/buzz2 key = "buzz2" message = "buzzes twice." emote_type = EMOTE_AUDIBLE - sound = 'sound/machines/buzz-two.ogg' + sound = 'sound/machines/buzz/buzz-two.ogg' /datum/emote/silicon/chime key = "chime" diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index 68ee438dc1239..b6c45f37f4f9b 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -1,10 +1,10 @@ /mob/living/silicon/robot/examine(mob/user) - . = list("This is [icon2html(src, user)] [src]!") + . = list() if(desc) . += "[desc]" var/model_name = model ? "\improper [model.name]" : "\improper Default" - . += "\nIt is currently \a \"[span_bold("[model_name]")]\"-type cyborg.\n" + . += "It is currently \a [model_name]-type cyborg." var/obj/act_module = get_active_held_item() if(act_module) @@ -14,13 +14,13 @@ if (getBruteLoss() < maxHealth*0.5) . += span_warning("It looks slightly dented.") else - . += span_warning("It looks severely dented!") + . += span_boldwarning("It looks severely dented!") if (getFireLoss() || getToxLoss()) var/overall_fireloss = getFireLoss() + getToxLoss() if (overall_fireloss < maxHealth * 0.5) . += span_warning("It looks slightly charred.") else - . += span_warning("It looks severely burnt and heat-warped!") + . += span_boldwarning("It looks severely burnt and heat-warped!") if (health < -maxHealth*0.5) . += span_warning("It looks barely operational.") if (fire_stacks < 0) @@ -52,6 +52,3 @@ . += "" . += ..() - -/mob/living/silicon/robot/get_examine_string(mob/user, thats = FALSE) - return null diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 20e1be9823af1..d00f0fd020734 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -20,7 +20,6 @@ AddElement(/datum/element/ridable, /datum/component/riding/creature/cyborg) RegisterSignal(src, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(charge)) RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) robot_modules_background = new() robot_modules_background.icon_state = "block" @@ -399,7 +398,7 @@ return ..() /mob/living/silicon/robot/execute_mode() - if(incapacitated()) + if(incapacitated) return var/obj/item/W = get_active_held_item() if(W) @@ -462,12 +461,13 @@ return COMPONENT_BLOCK_LIGHT_EATER /// special handling for getting shot with a light disruptor/saboteur e.g. the fisher -/mob/living/silicon/robot/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/mob/living/silicon/robot/on_saboteur(datum/source, disrupt_duration) + . = ..() if(lamp_enabled) toggle_headlamp(TRUE) balloon_alert(src, "headlamp off!") - return COMSIG_SABOTEUR_SUCCESS + COOLDOWN_START(src, disabled_time, disrupt_duration) + return TRUE /** * Handles headlamp smashing @@ -499,6 +499,9 @@ */ /mob/living/silicon/robot/proc/toggle_headlamp(turn_off = FALSE, update_color = FALSE) //if both lamp is enabled AND the update_color flag is on, keep the lamp on. Otherwise, if anything listed is true, disable the lamp. + if(!COOLDOWN_FINISHED(src, disabled_time)) + balloon_alert(src, "disrupted!") + return FALSE //BUBBER EDIT - Disables flashlight when held if(!(update_color && lamp_enabled) && (turn_off || lamp_enabled || update_color || !lamp_functional || stat || low_power_mode || istype(loc, /obj/item/clothing/head/mob_holder))) set_light_on(lamp_functional && stat != DEAD && lamp_doom) //If the lamp isn't broken and borg isn't dead, doomsday borgs cannot disable their light fully. @@ -508,21 +511,26 @@ lampButton?.update_appearance() update_icons() return - set_light_range(lamp_intensity) - set_light_color(lamp_doom? COLOR_RED : lamp_color) //Red for doomsday killborgs, borg's choice otherwise + set_light_range(max(MINIMUM_USEFUL_LIGHT_RANGE, lamp_intensity)) + set_light_color(lamp_doom ? COLOR_RED : lamp_color) //Red for doomsday killborgs, borg's choice otherwise set_light_on(TRUE) lamp_enabled = TRUE lampButton?.update_appearance() update_icons() +///Completely deconstructs the borg, dropping the MMI/posibrain, removing applied upgrades and stripping the exoskeleton of all limbs, +///while also burning out the flashes and prying out the cabling and the cell used in construction /mob/living/silicon/robot/proc/cyborg_deconstruct() SEND_SIGNAL(src, COMSIG_BORG_SAFE_DECONSTRUCT) if(shell) undeploy() var/turf/drop_to = drop_location() - if (robot_suit) + //remove installed upgrades + for(var/obj/item/borg/upgrade/upgrade_to_remove in upgrades) + upgrade_to_remove.forceMove(drop_to) + if(robot_suit) robot_suit.drop_all_parts(drop_to) - + robot_suit.forceMove(drop_to) else new /obj/item/robot_suit(drop_to) new /obj/item/bodypart/leg/left/robot(drop_to) @@ -669,7 +677,7 @@ return ..() /mob/living/silicon/robot/update_stat() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return if(stat != DEAD) if(health <= -maxHealth) //die only once @@ -727,7 +735,7 @@ if (hasExpanded) hasExpanded = FALSE //update_transform(0.5) // Original - update_transform(0.8) // SKYRAT EDIT CHANGE + update_transform(0.6) // SKYRAT EDIT CHANGE //SKYRAT EDIT ADDITION BEGIN - CYBORG if (hasShrunk) @@ -893,7 +901,7 @@ lawupdate = TRUE lawsync() if(radio && AI.radio) //AI keeps all channels, including Syndie if it is a Traitor - if(AI.radio.syndie) + if((AI.radio.special_channels & RADIO_SPECIAL_SYNDIE)) radio.make_syndie() radio.subspace_transmission = TRUE radio.channels = AI.radio.channels @@ -955,7 +963,7 @@ M.visible_message(span_warning("[M] really can't seem to mount [src]...")) return - if(stat || incapacitated()) + if(stat || incapacitated) return if(model && !model.allow_riding) M.visible_message(span_boldwarning("Unfortunately, [M] just can't seem to hold onto [src]!")) @@ -1026,7 +1034,7 @@ /mob/living/silicon/robot/get_exp_list(minutes) . = ..() - var/datum/job/cyborg/cyborg_job_ref = SSjob.GetJobType(/datum/job/cyborg) + var/datum/job/cyborg/cyborg_job_ref = SSjob.get_job_type(/datum/job/cyborg) .[cyborg_job_ref.title] = minutes diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 6273f1c06305b..b40d6ae579f00 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -248,7 +248,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real log_combat(user, src, "pushed") visible_message(span_danger("[user] forces back [src]!"), \ span_userdanger("[user] forces back [src]!"), null, COMBAT_MESSAGE_RANGE) - playsound(loc, 'sound/weapons/pierce.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/pierce.ogg', 50, TRUE, -1) else ..() return @@ -287,7 +287,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real if (!getBruteLoss()) to_chat(user, span_warning("[src] is already in good condition!")) return - if (!tool.tool_start_check(user, amount=1)) //The welder has 1u of fuel consumed by its afterattack, so we don't need to worry about taking any away. + if (!tool.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) //The welder has 1u of fuel consumed by its afterattack, so we don't need to worry about taking any away. return if(src == user) to_chat(user, span_notice("You start fixing yourself...")) diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index f41f4bd8ffcc2..aa9f8eac85d86 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -42,6 +42,8 @@ ///If this is a path, this gets created as an object in Initialize. var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high + ///If we've been forcibly disabled for a temporary amount of time. + COOLDOWN_DECLARE(disabled_time) ///If the lamp isn't broken. var/lamp_functional = TRUE ///If the lamp is turned on diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 09222ca5368a1..b3f458f749d6c 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -213,7 +213,7 @@ storage_datum.energy += charger.materials.use_materials(list(GET_MATERIAL_REF(storage_datum.mat_type) = to_stock), action = "resupplied", name = "units") charger.balloon_alert(robot, "+ [to_stock]u [initial(storage_datum.mat_type.name)]") - playsound(charger, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 50, vary = FALSE) + playsound(charger, 'sound/items/weapons/gun/general/mag_bullet_insert.ogg', 50, vary = FALSE) return charger.balloon_alert(robot, "restock process complete") charger.sendmats = FALSE @@ -337,7 +337,7 @@ cyborg.logevent("Chassis model has been set to [name].") sleep(0.1 SECONDS) for(var/i in 1 to 4) - playsound(cyborg, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, TRUE, -1) + playsound(cyborg, pick('sound/items/tools/drill_use.ogg', 'sound/items/tools/jaws_cut.ogg', 'sound/items/tools/jaws_pry.ogg', 'sound/items/tools/welder.ogg', 'sound/items/tools/ratchet.ogg'), 80, TRUE, -1) sleep(0.7 SECONDS) cyborg.SetLockdown(FALSE) cyborg.ai_lockdown = FALSE @@ -361,7 +361,7 @@ /obj/item/robot_model/proc/check_menu(mob/living/silicon/robot/user, obj/item/robot_model/old_model) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE if(user.model != old_model) return FALSE @@ -795,8 +795,8 @@ /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 + to_chat(loc, span_userdanger("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 /obj/item/robot_model/security name = "Security" @@ -819,8 +819,8 @@ /obj/item/robot_model/security/do_transform_animation() ..() - to_chat(loc, "While you have picked the security model, you still have to follow your laws, NOT Space Law. \ - For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.") + to_chat(loc, span_userdanger("While you have picked the security model, you still have to follow your laws, NOT Space Law. \ + For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.")) /obj/item/robot_model/security/respawn_consumable(mob/living/silicon/robot/cyborg, coeff = 1) ..() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 69703a022d07e..404912e11acfc 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -1,6 +1,5 @@ /mob/living/silicon gender = NEUTER - has_unlimited_silicon_privilege = TRUE verb_say = "states" verb_ask = "queries" verb_exclaim = "declares" @@ -8,7 +7,7 @@ initial_language_holder = /datum/language_holder/synthetic bubble_icon = "machine" mob_biotypes = MOB_ROBOTIC - death_sound = 'sound/voice/borg_deathsound.ogg' + death_sound = 'sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg' speech_span = SPAN_ROBOT flags_1 = PREVENT_CONTENTS_EXPLOSION_1 examine_cursor_icon = null @@ -75,6 +74,9 @@ TRAIT_NOFIRE_SPREAD, TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, TRAIT_FENCE_CLIMBER, + TRAIT_SILICON_ACCESS, + TRAIT_REAGENT_SCANNER, + TRAIT_UNOBSERVANT, ) add_traits(traits_to_apply, ROUNDSTART_TRAIT) @@ -400,7 +402,7 @@ silicon_hud.show_to(src) /mob/living/silicon/proc/toggle_sensors() - if(incapacitated()) + if(incapacitated) return sensors_on = !sensors_on if (!sensors_on) diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index b7e6bd6a8ed38..8c687441900b4 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -10,7 +10,7 @@ var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) if (prob(90)) log_combat(user, src, "attacked") - playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/slash.ogg', 25, TRUE, -1) visible_message(span_danger("[user] slashes at [src]!"), \ span_userdanger("[user] slashes at you!"), null, null, user) to_chat(user, span_danger("You slash at [src]!")) @@ -19,7 +19,7 @@ log_combat(user, src, "attacked") adjustBruteLoss(damage) else - playsound(loc, 'sound/weapons/slashmiss.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/slashmiss.ogg', 25, TRUE, -1) visible_message(span_danger("[user]'s swipe misses [src]!"), \ span_danger("You avoid [user]'s swipe!"), null, null, user) to_chat(user, span_warning("Your swipe misses [src]!")) @@ -76,7 +76,7 @@ return TRUE else // SKYRAT EDIT ADDITION START - if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS)) + if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !INCAPACITATED_IGNORING(src, INCAPABLE_RESTRAINTS)) visible_message(span_warning("[user] tries to pet [src], but it moves out of the way.")) return TRUE // SKYRAT EDIT ADDITION END diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm index 9310211aa0e6d..824bba98dc070 100644 --- a/code/modules/mob/living/silicon/silicon_say.dm +++ b/code/modules/mob/living/silicon/silicon_say.dm @@ -82,10 +82,10 @@ if(message_mods[MODE_HEADSET]) if(radio) radio.talk_into(src, message, , spans, language, message_mods) - return REDUCE_RANGE + return NOPASS else if(message_mods[RADIO_EXTENSION] in GLOB.radiochannels) if(radio) radio.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) - return ITALICS | REDUCE_RANGE + return NOPASS return FALSE diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index baaf1b39b3c56..2c7bc4583e2cf 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -13,7 +13,7 @@ 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) + playsound(loc, 'sound/items/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]!")) @@ -61,13 +61,13 @@ visible_message(span_notice("[user.name] [response_help_continuous] [src]."), \ span_notice("[user.name] [response_help_continuous] you."), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_notice("You [response_help_simple] [src].")) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) /mob/living/simple_animal/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) if(..()) //if harm or disarm intent. if(LAZYACCESS(modifiers, RIGHT_CLICK)) - playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/pierce.ogg', 25, TRUE, -1) visible_message(span_danger("[user] [response_disarm_continuous] [name]!"), \ span_userdanger("[user] [response_disarm_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You [response_disarm_simple] [name]!")) @@ -77,7 +77,7 @@ visible_message(span_danger("[user] slashes at [src]!"), \ 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) + playsound(loc, 'sound/items/weapons/slice.ogg', 25, TRUE, -1) apply_damage(damage) log_combat(user, src, "attacked") return 1 diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm index f09361e9bdf48..eefc3389e87c9 100644 --- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm +++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm @@ -31,14 +31,14 @@ return NONE visible_message(span_warning("[source] deflects [hitting_projectile] with its energy swords!")) - playsound(source, 'sound/weapons/blade1.ogg', 50, TRUE) + playsound(source, 'sound/items/weapons/blade1.ogg', 50, TRUE) return COMPONENT_BULLET_BLOCKED /mob/living/simple_animal/bot/secbot/grievous/on_entered(datum/source, atom/movable/AM) . = ..() if(ismob(AM) && AM == target) visible_message(span_warning("[src] flails his swords and cuts [AM]!")) - playsound(src,'sound/effects/beepskyspinsabre.ogg',100,TRUE,-1) + playsound(src,'sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg',100,TRUE,-1) INVOKE_ASYNC(src, PROC_REF(stun_attack), AM) /mob/living/simple_animal/bot/secbot/grievous/Initialize(mapload) @@ -54,12 +54,12 @@ return if(prob(block_chance)) visible_message(span_warning("[src] deflects [user]'s attack with his energy swords!")) - playsound(src, 'sound/weapons/blade1.ogg', 50, TRUE, -1) + playsound(src, 'sound/items/weapons/blade1.ogg', 50, TRUE, -1) return TRUE /mob/living/simple_animal/bot/secbot/grievous/stun_attack(mob/living/carbon/C) //Criminals don't deserve to live weapon.attack(C, src) - playsound(src, 'sound/weapons/blade1.ogg', 50, TRUE, -1) + playsound(src, 'sound/items/weapons/blade1.ogg', 50, TRUE, -1) if(C.stat == DEAD) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), 0.2 SECONDS) back_to_idle() @@ -77,7 +77,7 @@ mode = BOT_START_PATROL // switch to patrol mode if(BOT_HUNT) // hunting for perp update_appearance() - playsound(src,'sound/effects/beepskyspinsabre.ogg',100,TRUE,-1) + playsound(src,'sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg',100,TRUE,-1) // general beepsky doesn't give up so easily, jedi scum if(frustration >= 20) GLOB.move_manager.stop_looping(src) @@ -124,8 +124,8 @@ 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) + playsound(src, pick('sound/mobs/non-humanoids/beepsky/criminal.ogg', 'sound/mobs/non-humanoids/beepsky/justice.ogg', 'sound/mobs/non-humanoids/beepsky/freeze.ogg'), 50, FALSE) + playsound(src,'sound/items/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]!") diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index f48d542ba191d..2c5d4c6aa91bd 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -12,7 +12,6 @@ hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_PATH_HUD = HUD_LIST_LIST) maxbodytemp = INFINITY minbodytemp = 0 - has_unlimited_silicon_privilege = TRUE sentience_type = SENTIENCE_ARTIFICIAL status_flags = NONE //no default canpush pass_flags = PASSFLAPS @@ -118,8 +117,8 @@ 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 paicard ? "pAI Controlled" : "Autonomous" if(!(bot_mode_flags & BOT_MODE_ON)) - return "Inactive" - return "[mode]" + 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. @@ -163,6 +162,7 @@ /mob/living/simple_animal/bot/Initialize(mapload) . = ..() + add_traits(list(TRAIT_SILICON_ACCESS, TRAIT_REAGENT_SCANNER, TRAIT_UNOBSERVANT), INNATE_TRAIT) GLOB.bots_list += src path_hud = new /datum/atom_hud/data/bot_path/private() @@ -976,13 +976,13 @@ Pass a positive integer as an argument to override a bot's default speed. return data // Actions received from TGUI -/mob/living/simple_animal/bot/ui_act(action, params) +/mob/living/simple_animal/bot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - var/mob/user = usr + var/mob/user = ui.user if(!allowed(user)) - to_chat(usr, span_warning("Access denied.")) + to_chat(user, span_warning("Access denied.")) return if(action == "lock") @@ -1002,38 +1002,38 @@ Pass a positive integer as an argument to override a bot's default speed. if("airplane") bot_mode_flags ^= BOT_MODE_REMOTE_ENABLED if("hack") - if(!HAS_SILICON_ACCESS(usr)) + if(!HAS_SILICON_ACCESS(user)) return if(!(bot_cover_flags & BOT_COVER_EMAGGED)) bot_cover_flags |= (BOT_COVER_EMAGGED|BOT_COVER_HACKED|BOT_COVER_LOCKED) - to_chat(usr, span_warning("You overload [src]'s [hackables].")) - message_admins("Safety lock of [ADMIN_LOOKUPFLW(src)] was disabled by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_VERBOSEJMP(src)]") - usr.log_message("disabled safety lock of [src]", LOG_GAME) + to_chat(user, span_warning("You overload [src]'s [hackables].")) + message_admins("Safety lock of [ADMIN_LOOKUPFLW(src)] was disabled by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]") + user.log_message("disabled safety lock of [src]", LOG_GAME) bot_reset() to_chat(src, span_userdanger("(#$*#$^^( OVERRIDE DETECTED")) to_chat(src, span_boldnotice(get_emagged_message())) return if(!(bot_cover_flags & BOT_COVER_HACKED)) - to_chat(usr, span_boldannounce("You fail to repair [src]'s [hackables].")) + to_chat(user, span_boldannounce("You fail to repair [src]'s [hackables].")) return bot_cover_flags &= ~(BOT_COVER_EMAGGED|BOT_COVER_HACKED) - to_chat(usr, span_notice("You reset the [src]'s [hackables].")) - usr.log_message("re-enabled safety lock of [src]", LOG_GAME) + to_chat(user, span_notice("You reset the [src]'s [hackables].")) + 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(usr, span_notice("You eject [paicard] from [initial(src.name)].")) - ejectpai(usr) + to_chat(user, span_notice("You eject [paicard] from [initial(src.name)].")) + ejectpai(user) if("toggle_personality") if (can_be_possessed) - disable_possession(usr) + disable_possession(user) else - enable_possession(usr) + enable_possession(user) if("rename") - rename(usr) + rename(user) /mob/living/simple_animal/bot/update_icon_state() icon_state = "[isnull(base_icon_state) ? initial(icon_state) : base_icon_state][get_bot_flag(bot_mode_flags, BOT_MODE_ON)]" diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 6c0cd6d16ab55..c2ff78cb76bf7 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -13,11 +13,11 @@ bot_type = ADVANCED_SEC_BOT hackables = "combat inhibitors" - automated_announcements = list(ED209_VOICED_DOWN_WEAPONS = 'sound/voice/ed209_20sec.ogg') + automated_announcements = list(ED209_VOICED_DOWN_WEAPONS = 'sound/mobs/non-humanoids/ed209/ed209_20sec.ogg') var/lastfired = 0 var/shot_delay = 15 - var/shoot_sound = 'sound/weapons/laser.ogg' + var/shoot_sound = 'sound/items/weapons/laser.ogg' var/projectile = /obj/projectile/beam/disabler var/fair_market_projectile = /obj/projectile/bullet/c38 // For shooting the worst scumbags of all: the poor @@ -42,7 +42,7 @@ var/list/targets = list() for(var/mob/living/carbon/nearby_carbon in view(7, src)) //Let's find us a target var/threatlevel = 0 - if(nearby_carbon.incapacitated()) + if(nearby_carbon.incapacitated) continue threatlevel = nearby_carbon.assess_threat(judgement_criteria) if(threatlevel < THREAT_ASSESS_DANGEROUS) @@ -59,10 +59,10 @@ /mob/living/simple_animal/bot/secbot/ed209/threat_react(threatlevel) speak("Level [threatlevel] infraction alert!") - playsound(src, pick('sound/voice/ed209_20sec.ogg', 'sound/voice/edplaceholder.ogg'), 50, FALSE) + playsound(src, pick('sound/mobs/non-humanoids/ed209/ed209_20sec.ogg', 'sound/mobs/non-humanoids/ed209/edplaceholder.ogg'), 50, FALSE) /mob/living/simple_animal/bot/secbot/ed209/proc/set_weapon() //used to update the projectile type and firing sound - shoot_sound = 'sound/weapons/laser.ogg' + shoot_sound = 'sound/items/weapons/laser.ogg' if(bot_cover_flags & BOT_COVER_EMAGGED) projectile = /obj/projectile/beam else diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 4bedf0d3d621b..ae17e58686c65 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -142,7 +142,8 @@ // Actions received from TGUI /mob/living/simple_animal/bot/floorbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(usr))) + var/mob/user = ui.user + if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(user))) return switch(action) @@ -160,7 +161,7 @@ if(tilestack) tilestack.forceMove(drop_location()) if("line_mode") - var/setdir = tgui_input_list(usr, "Select construction direction", "Direction", list("north", "east", "south", "west", "disable")) + var/setdir = tgui_input_list(user, "Select construction direction", "Direction", list("north", "east", "south", "west", "disable")) if(isnull(setdir) || QDELETED(ui) || ui.status != UI_INTERACTIVE) return switch(setdir) @@ -315,7 +316,7 @@ if(check_bot_working(target_turf)) add_to_ignore(target_turf) target = null - playsound(src, 'sound/effects/whistlereset.ogg', 50, TRUE) + playsound(src, 'sound/mobs/non-humanoids/floorbot/whistlereset.ogg', 50, TRUE) return if(isspaceturf(target_turf)) //Must be a hull breach or in line mode to continue. diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index f3194e88b1862..dd3303f35230d 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -286,29 +286,30 @@ data["paiInserted"] = !!paicard return data -/mob/living/simple_animal/bot/mulebot/ui_act(action, params) +/mob/living/simple_animal/bot/mulebot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(usr))) + var/mob/user = ui.user + if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(user))) return switch(action) if("lock") - if(HAS_SILICON_ACCESS(usr)) + if(HAS_SILICON_ACCESS(user)) bot_cover_flags ^= BOT_COVER_LOCKED return TRUE if("on") if(bot_mode_flags & BOT_MODE_ON) turn_off() else if(bot_cover_flags & BOT_COVER_MAINTS_OPEN) - to_chat(usr, span_warning("[name]'s maintenance panel is open!")) + to_chat(user, span_warning("[name]'s maintenance panel is open!")) return else if(cell) if(!turn_on()) - to_chat(usr, span_warning("You can't switch on [src]!")) + to_chat(user, span_warning("You can't switch on [src]!")) return return TRUE else - bot_control(action, usr, params) // Kill this later. // Kill PDAs in general please + bot_control(action, user, params) // Kill this later. // Kill PDAs in general please return TRUE /mob/living/simple_animal/bot/mulebot/bot_control(command, mob/user, list/params = list(), pda = FALSE) @@ -334,7 +335,7 @@ if(new_dest) set_destination(new_dest) if("setid") - var/new_id = tgui_input_text(user, "Enter ID", "ID Assignment", id, MAX_NAME_LEN) + var/new_id = tgui_input_text(user, "Enter ID", "ID Assignment", id, max_length = MAX_NAME_LEN) if(new_id) set_id(new_id) name = "\improper MULEbot [new_id]" @@ -359,10 +360,10 @@ switch(type) if(SIGH) audible_message(span_hear("[src] makes a sighing buzz.")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) if(ANNOYED) audible_message(span_hear("[src] makes an annoyed buzzing sound.")) - playsound(src, 'sound/machines/buzz-two.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, FALSE) if(DELIGHT) audible_message(span_hear("[src] makes a delighted ping!")) playsound(src, 'sound/machines/ping.ogg', 50, FALSE) @@ -711,7 +712,7 @@ // player on mulebot attempted to move /mob/living/simple_animal/bot/mulebot/relaymove(mob/living/user, direction) - if(user.incapacitated()) + if(user.incapacitated) return if(load == user) unload(0) @@ -805,7 +806,7 @@ /mob/living/simple_animal/bot/mulebot/paranormal/mouse_drop_receive(atom/movable/AM, mob/user, params) var/mob/living/L = user - if(user.incapacitated() || (istype(L) && L.body_position == LYING_DOWN)) + if(user.incapacitated || (istype(L) && L.body_position == LYING_DOWN)) return if(!istype(AM) || iscameramob(AM) || istype(AM, /obj/effect/dummy/phased_mob)) //allows ghosts! diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index ea80883391270..79765c76639c2 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -25,12 +25,12 @@ possessed_message = "You are a securitron! Guard the station to the best of your ability!" automated_announcements = list( - BEEPSKY_VOICED_CRIMINAL_DETECTED = 'sound/voice/beepsky/criminal.ogg', - BEEPSKY_VOICED_FREEZE = 'sound/voice/beepsky/freeze.ogg', - BEEPSKY_VOICED_JUSTICE = 'sound/voice/beepsky/justice.ogg', - BEEPSKY_VOICED_YOUR_MOVE = 'sound/voice/beepsky/creep.ogg', - BEEPSKY_VOICED_I_AM_THE_LAW = 'sound/voice/beepsky/iamthelaw.ogg', - BEEPSKY_VOICED_SECURE_DAY = 'sound/voice/beepsky/secureday.ogg', + BEEPSKY_VOICED_CRIMINAL_DETECTED = 'sound/mobs/non-humanoids/beepsky/criminal.ogg', + BEEPSKY_VOICED_FREEZE = 'sound/mobs/non-humanoids/beepsky/freeze.ogg', + BEEPSKY_VOICED_JUSTICE = 'sound/mobs/non-humanoids/beepsky/justice.ogg', + BEEPSKY_VOICED_YOUR_MOVE = 'sound/mobs/non-humanoids/beepsky/creep.ogg', + BEEPSKY_VOICED_I_AM_THE_LAW = 'sound/mobs/non-humanoids/beepsky/iamthelaw.ogg', + BEEPSKY_VOICED_SECURE_DAY = 'sound/mobs/non-humanoids/beepsky/secureday.ogg', ) ///Whether this secbot is considered 'commissioned' and given the trait on Initialize. @@ -143,7 +143,6 @@ ) AddElement(/datum/element/connect_loc, loc_connections) AddComponent(/datum/component/security_vision, judgement_criteria = NONE, update_judgement_criteria = CALLBACK(src, PROC_REF(judgement_criteria))) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /mob/living/simple_animal/bot/secbot/Destroy() QDEL_NULL(weapon) @@ -167,12 +166,12 @@ GLOB.move_manager.stop_looping(src) last_found = world.time -/mob/living/simple_animal/bot/secbot/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/mob/living/simple_animal/bot/secbot/on_saboteur(datum/source, disrupt_duration) + . = ..() if(!(security_mode_flags & SECBOT_SABOTEUR_AFFECTED)) security_mode_flags |= SECBOT_SABOTEUR_AFFECTED addtimer(CALLBACK(src, PROC_REF(remove_saboteur_effect)), disrupt_duration) - return COMSIG_SABOTEUR_SUCCESS + return TRUE /mob/living/simple_animal/bot/secbot/proc/remove_saboteur_effect() security_mode_flags &= ~SECBOT_SABOTEUR_AFFECTED @@ -181,7 +180,7 @@ if(base_speed < initial(base_speed) + 3) base_speed += 3 addtimer(VARSET_CALLBACK(src, base_speed, base_speed - 3), 6 SECONDS) - playsound(src, 'sound/machines/defib_zap.ogg', 50) + playsound(src, 'sound/machines/defib/defib_zap.ogg', 50) visible_message(span_warning("[src] shakes and speeds up!")) /mob/living/simple_animal/bot/secbot/Exited(atom/movable/gone, direction) @@ -202,9 +201,10 @@ return data // Actions received from TGUI -/mob/living/simple_animal/bot/secbot/ui_act(action, params) +/mob/living/simple_animal/bot/secbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(usr))) + var/mob/user = ui.user + if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(user))) return switch(action) @@ -289,7 +289,7 @@ if(bot_type == HONK_BOT) audible_message(span_danger("[src] gives out an evil laugh!")) - playsound(src, 'sound/machines/honkbot_evil_laugh.ogg', 75, TRUE, -1) // evil laughter + playsound(src, 'sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg', 75, TRUE, -1) // evil laughter else audible_message(span_danger("[src] buzzes oddly!")) @@ -334,7 +334,7 @@ /mob/living/simple_animal/bot/secbot/proc/start_handcuffing(mob/living/carbon/current_target) mode = BOT_ARREST - playsound(src, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2) + playsound(src, 'sound/items/weapons/cablecuff.ogg', 30, TRUE, -2) current_target.visible_message(span_danger("[src] is trying to put zipties on [current_target]!"),\ span_userdanger("[src] is trying to put zipties on you!")) addtimer(CALLBACK(src, PROC_REF(handcuff_target), current_target), 6 SECONDS) @@ -354,7 +354,7 @@ /mob/living/simple_animal/bot/secbot/proc/stun_attack(mob/living/carbon/current_target, harm = FALSE) var/judgement_criteria = judgement_criteria() - playsound(src, 'sound/weapons/egloves.ogg', 50, TRUE, -1) + playsound(src, 'sound/items/weapons/egloves.ogg', 50, TRUE, -1) icon_state = "[initial(icon_state)]-c" addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance)), 0.2 SECONDS) var/threat = 5 @@ -509,7 +509,7 @@ /// 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) + playsound(src, pick('sound/mobs/non-humanoids/beepsky/criminal.ogg', 'sound/mobs/non-humanoids/beepsky/justice.ogg', 'sound/mobs/non-humanoids/beepsky/freeze.ogg'), 50, FALSE) /mob/living/simple_animal/bot/secbot/explode() var/atom/Tsec = drop_location() diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm index 7a8a2fcb63b91..075b40afeeba7 100644 --- a/code/modules/mob/living/simple_animal/damage_procs.dm +++ b/code/modules/mob/living/simple_animal/damage_procs.dm @@ -4,11 +4,11 @@ * Arguments: * * amount The amount that will be used to adjust the mob's health * * updating_health If the mob's health should be immediately updated to the new value - * * forced If we should force update the adjustment of the mob's health no matter the restrictions, like GODMODE + * * forced If we should force update the adjustment of the mob's health no matter the restrictions, like TRAIT_GODMODE */ /mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE) . = FALSE - if(forced || !(status_flags & GODMODE)) + if(forced || !HAS_TRAIT(src, TRAIT_GODMODE)) bruteloss = round(clamp(bruteloss + amount, 0, maxHealth * 2), DAMAGE_PRECISION) if(updating_health) updatehealth() diff --git a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm b/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm index ca1ae3b70d612..e2c2aca2693ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm @@ -6,7 +6,7 @@ icon_living = "dark_wizard" move_to_delay = 10 projectiletype = /obj/projectile/temp/earth_bolt - projectilesound = 'sound/magic/ethereal_enter.ogg' + projectilesound = 'sound/effects/magic/ethereal_enter.ogg' ranged = TRUE ranged_message = "earth bolts" ranged_cooldown_time = 20 @@ -19,7 +19,7 @@ attack_verb_continuous = "staves" combat_mode = TRUE speak_emote = list("chants") - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' aggro_vision_range = 9 turns_per_move = 5 mob_biotypes = MOB_ORGANIC|MOB_HUMANOID diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 4bba53270e56f..a077d94725507 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -254,8 +254,8 @@ return FALSE if(ismob(the_target)) //Target is in godmode, ignore it. - var/mob/M = the_target - if(M.status_flags & GODMODE) + var/mob/mob = the_target + if(HAS_TRAIT(mob, TRAIT_GODMODE)) return FALSE if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it @@ -320,7 +320,7 @@ /mob/living/simple_animal/hostile/proc/CheckAndAttack() var/atom/target_from = GET_TARGETS_FROM(src) - if(target && isturf(target_from.loc) && target.Adjacent(target_from) && !incapacitated()) + if(target && isturf(target_from.loc) && target.Adjacent(target_from) && !incapacitated) AttackingTarget(target) /mob/living/simple_animal/hostile/proc/MoveToTarget(list/possible_targets)//Step 5, handle movement between us and our target @@ -484,7 +484,7 @@ if(projectiletype) fire_projectile(projectiletype, targeted_atom, projectilesound) if(AIStatus != AI_ON)//Don't want mindless mobs to have their movement screwed up firing in space - newtonian_move(get_dir(targeted_atom, target_from)) + newtonian_move(get_angle(targeted_atom, target_from)) /mob/living/simple_animal/hostile/proc/CanSmashTurfs(turf/T) 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 935ed7a7215b0..ae3b10b11990a 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 @@ -76,7 +76,7 @@ Difficulty: Medium dash_attack.Grant(src) transform_weapon.Grant(src) - AddComponent(/datum/component/boss_music, 'sound/lavaland/bdm_boss.ogg', 167 SECONDS) + AddComponent(/datum/component/boss_music, 'sound/music/boss/bdm_boss.ogg', 167 SECONDS) /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Destroy() dash = null 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 00cc37fe618cb..70d27f023f188 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -34,7 +34,7 @@ Difficulty: Hard maxHealth = 2500 attack_verb_continuous = "rends" attack_verb_simple = "rend" - attack_sound = 'sound/magic/demon_attack1.ogg' + attack_sound = 'sound/effects/magic/demon_attack1.ogg' icon_state = "bubblegum" icon_living = "bubblegum" icon_dead = "" @@ -66,7 +66,7 @@ Difficulty: Hard crusher_achievement_type = /datum/award/achievement/boss/bubblegum_crusher score_achievement_type = /datum/award/score/bubblegum_score death_message = "sinks into a pool of blood, fleeing the battle. You've won, for now... " - death_sound = 'sound/magic/enter_blood.ogg' + death_sound = 'sound/effects/magic/enter_blood.ogg' faction = list(FACTION_MINING, FACTION_BOSS, FACTION_HELL) summon_line = "GRAAAAAAAHHHHHHHHH!" /// Check to see if we should spawn blood @@ -221,10 +221,10 @@ Difficulty: Hard if(!faction_check_atom(L)) if(L.stat != CONSCIOUS) to_chat(L, span_userdanger("[src] drags you through the blood!")) - playsound(T, 'sound/magic/enter_blood.ogg', 100, TRUE, -1) + playsound(T, 'sound/effects/magic/enter_blood.ogg', 100, TRUE, -1) var/turf/targetturf = get_step(src, dir) L.forceMove(targetturf) - playsound(targetturf, 'sound/magic/exit_blood.ogg', 100, TRUE, -1) + playsound(targetturf, 'sound/effects/magic/exit_blood.ogg', 100, TRUE, -1) addtimer(CALLBACK(src, PROC_REF(devour), L), 0.2 SECONDS) SLEEP_CHECK_DEATH(1, src) @@ -300,7 +300,7 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum/bullet_act(obj/projectile/P) if(BUBBLEGUM_IS_ENRAGED) visible_message(span_danger("[src] deflects the projectile; [p_they()] can't be hit with ranged weapons while enraged!"), span_userdanger("You deflect the projectile!")) - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 300, TRUE) + playsound(src, pick('sound/items/weapons/bulletflyby.ogg', 'sound/items/weapons/bulletflyby2.ogg', 'sound/items/weapons/bulletflyby3.ogg'), 300, TRUE) return BULLET_ACT_BLOCK return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/clockwork_knight.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/clockwork_knight.dm index d7e82507f747c..cba3de73669c8 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/clockwork_knight.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/clockwork_knight.dm @@ -16,7 +16,7 @@ I'd rather there be something than the clockwork ruin be entirely empty though s icon = 'icons/mob/simple/icemoon/icemoon_monsters.dmi' attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH weather_immunities = list(TRAIT_SNOWSTORM_IMMUNE) speak_emote = list("roars") 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 5047dd9b1715e..4b57bfa24073f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -27,7 +27,7 @@ maxHealth = 2500 attack_verb_continuous = "judges" attack_verb_simple = "judge" - attack_sound = 'sound/magic/clockwork/ratvar_attack.ogg' + attack_sound = 'sound/effects/magic/clockwork/ratvar_attack.ogg' icon_state = "eva" icon_living = "eva" icon_dead = "" @@ -54,7 +54,7 @@ crusher_loot = list(/obj/structure/closet/crate/necropolis/colossus/crusher) loot = list(/obj/structure/closet/crate/necropolis/colossus) death_message = "disintegrates, leaving a glowing core in its wake." - death_sound = 'sound/magic/demon_dies.ogg' + death_sound = 'sound/effects/magic/demon_dies.ogg' summon_line = "Your trial begins now." /// Spiral shots ability var/datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/colossus/spiral_shots @@ -134,7 +134,7 @@ if(viewer.client) flash_color(viewer.client, "#C80000", 1) shake_camera(viewer, 4, 3) - playsound(src, 'sound/magic/clockwork/narsie_attack.ogg', 200, TRUE) + playsound(src, 'sound/effects/magic/clockwork/narsie_attack.ogg', 200, TRUE) /mob/living/simple_animal/hostile/megafauna/colossus/proc/start_attack(mob/living/owner, datum/action/cooldown/activated) SIGNAL_HANDLER @@ -317,7 +317,7 @@ active = TRUE set_anchored(TRUE) balloon_alert_to_viewers("charging...") - playsound(src, 'sound/magic/disable_tech.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/disable_tech.ogg', 50, TRUE) sleep(use_time) icon_state = initial(icon_state) active = FALSE @@ -367,7 +367,7 @@ 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)) + new_clown.dress_up_as_job(SSjob.get_job_type(/datum/job/clown)) clowned_mob_refs += clown_ref return TRUE @@ -423,7 +423,7 @@ /obj/machinery/anomalous_crystal/dark_reprise //Revives anyone nearby, but turns them into shadowpeople and renders them uncloneable, so the crystal is your only hope of getting up again if you go down. observer_desc = "When activated, this crystal revives anyone nearby, but turns them into Shadowpeople and makes them unclonable, making the crystal their only hope of getting up again." activation_method = ACTIVATE_TOUCH - activation_sound = 'sound/hallucinations/growl1.ogg' + activation_sound = 'sound/effects/hallucinations/growl1.ogg' use_time = 3 SECONDS /obj/machinery/anomalous_crystal/dark_reprise/ActivationReaction(mob/user, method) @@ -538,8 +538,7 @@ . = ..() if(isliving(arrived) && holder_animal) var/mob/living/possessor = arrived - possessor.add_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), STASIS_MUTE) - possessor.status_flags |= GODMODE + possessor.add_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM, TRAIT_GODMODE), STASIS_MUTE) possessor.mind.transfer_to(holder_animal) var/datum/action/exit_possession/escape = new(holder_animal) escape.Grant(holder_animal) @@ -547,8 +546,7 @@ /obj/structure/closet/stasis/dump_contents(kill = TRUE) for(var/mob/living/possessor in src) - possessor.remove_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), STASIS_MUTE) - possessor.status_flags &= ~GODMODE + possessor.remove_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM, TRAIT_GODMODE), STASIS_MUTE) if(kill || !isanimal_or_basicmob(loc)) possessor.investigate_log("has died from [src].", INVESTIGATE_DEATHS) possessor.death(FALSE) 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 448896e3700de..350a1a68fd8e3 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 @@ -17,7 +17,7 @@ Difficulty: Extremely Hard icon = 'icons/mob/simple/icemoon/icemoon_monsters.dmi' attack_verb_continuous = "pummels" attack_verb_simple = "pummels" - attack_sound = 'sound/weapons/sonic_jackhammer.ogg' + attack_sound = 'sound/items/weapons/sonic_jackhammer.ogg' mob_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_SPECIAL light_color = COLOR_LIGHT_GRAYISH_RED movement_type = GROUND @@ -81,7 +81,7 @@ Difficulty: Extremely Hard AddElement(/datum/element/knockback, 7, FALSE, TRUE) AddElement(/datum/element/lifesteal, 50) ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) - AddComponent(/datum/component/boss_music, 'sound/lavaland/bdm_boss.ogg', 167 SECONDS) + AddComponent(/datum/component/boss_music, 'sound/music/boss/bdm_boss.ogg', 167 SECONDS) /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner/Destroy() frost_orbs = null @@ -143,7 +143,7 @@ Difficulty: Extremely Hard animate(src, pixel_y = pixel_y + 96, time = 100, easing = ELASTIC_EASING) spin(100, 10) SLEEP_CHECK_DEATH(60, src) - playsound(src, 'sound/effects/explosion3.ogg', 100, TRUE) + playsound(src, 'sound/effects/explosion/explosion3.ogg', 100, TRUE) icon_state = "demonic_miner_phase2" animate(src, pixel_y = pixel_y - 96, time = 8, flags = ANIMATION_END_NOW) spin(8, 2) 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 7c68d760f4399..07c33265f94ed 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -36,7 +36,7 @@ maxHealth = 2500 attack_verb_continuous = "chomps" attack_verb_simple = "chomp" - attack_sound = 'sound/magic/demon_attack1.ogg' + attack_sound = 'sound/effects/magic/demon_attack1.ogg' attack_vis_effect = ATTACK_EFFECT_BITE icon = 'icons/mob/simple/lavaland/96x96megafauna.dmi' icon_state = "dragon" @@ -67,7 +67,7 @@ crusher_achievement_type = /datum/award/achievement/boss/drake_crusher score_achievement_type = /datum/award/score/drake_score death_message = "collapses into a pile of bones, its flesh sloughing away." - death_sound = 'sound/magic/demon_dies.ogg' + death_sound = 'sound/effects/magic/demon_dies.ogg' footstep_type = FOOTSTEP_MOB_HEAVY summon_line = "ROOOOOOOOAAAAAAAAAAAR!" /// Fire cone ability @@ -212,9 +212,9 @@ /obj/effect/temp_visual/lava_warning/proc/fall(reset_time) var/turf/T = get_turf(src) - playsound(T,'sound/magic/fleshtostone.ogg', 80, TRUE) + playsound(T,'sound/effects/magic/fleshtostone.ogg', 80, TRUE) sleep(duration) - playsound(T,'sound/magic/fireball.ogg', 200, TRUE) + playsound(T,'sound/effects/magic/fireball.ogg', 200, TRUE) for(var/mob/living/L in T.contents - owner) if(istype(L, /mob/living/simple_animal/hostile/megafauna/dragon)) @@ -281,7 +281,7 @@ /obj/effect/temp_visual/target/proc/fall(list/flame_hit) var/turf/T = get_turf(src) - playsound(T,'sound/magic/fleshtostone.ogg', 80, TRUE) + playsound(T,'sound/effects/magic/fleshtostone.ogg', 80, TRUE) new /obj/effect/temp_visual/fireball(T) sleep(duration) if(ismineralturf(T)) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 6bf09bc5a490e..9383718e7bd30 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -41,7 +41,7 @@ Difficulty: Hard maxHealth = 2500 attack_verb_continuous = "clubs" attack_verb_simple = "club" - attack_sound = 'sound/weapons/sonic_jackhammer.ogg' + attack_sound = 'sound/items/weapons/sonic_jackhammer.ogg' icon_state = "hierophant" icon_living = "hierophant" health_doll_icon = "hierophant" @@ -66,72 +66,83 @@ Difficulty: Hard crusher_achievement_type = /datum/award/achievement/boss/hierophant_crusher score_achievement_type = /datum/award/score/hierophant_score del_on_death = TRUE - death_sound = 'sound/magic/repulse.ogg' + death_sound = 'sound/effects/magic/repulse.ogg' attack_action_types = list(/datum/action/innate/megafauna_attack/blink, /datum/action/innate/megafauna_attack/chaser_swarm, /datum/action/innate/megafauna_attack/cross_blasts, /datum/action/innate/megafauna_attack/blink_spam) - var/burst_range = 3 //range on burst aoe - var/beam_range = 5 //range on cross blast beams - var/chaser_speed = 3 //how fast chasers are currently - var/major_attack_cooldown = 6 SECONDS //base cooldown for major attacks - var/chaser_cooldown_time = 10.1 SECONDS //base cooldown for spawning chasers - var/chaser_cooldown = 0 - var/arena_cooldown_time = 20 SECONDS //base cooldown for making arenas - var/arena_cooldown = 0 - var/blinking = FALSE //if we're doing something that requires us to stand still and not attack - var/obj/effect/hierophant/spawned_beacon //the beacon we teleport back to - var/timeout_time = 15 //after this many Life() ticks with no target, we return to our beacon - var/did_reset = TRUE //if we timed out, returned to our beacon, and healed some + /// range on burst aoe + var/burst_range = 3 + /// range on cross blast beams + var/beam_range = 5 + /// how fast chasers are currently + var/chaser_speed = 3 + /// base delay for major attacks + var/major_attack_cooldown = 6 SECONDS + /// base delay for spawning chasers + var/chaser_cooldown_time = 10.1 SECONDS + /// the current chaser cooldown + COOLDOWN_DECLARE(chaser_cooldown) + /// base delay for making arenas + var/arena_cooldown_time = 20 SECONDS + COOLDOWN_DECLARE(arena_cooldown) + /// if we're doing something that requires us to stand still and not attack + var/blinking = FALSE + /// weakref to our "home base" beacon + var/datum/weakref/spawned_beacon_ref + /// If we are sitting at home base and not doing anything + var/sitting_at_center = TRUE + /// timer id for any active attempts to "go home" + var/respawn_timer_id = null var/list/kill_phrases = list("Wsyvgi sj irivkc xettih. Vitemvmrk...", "Irivkc wsyvgi jsyrh. Vitemvmrk...", "Jyip jsyrh. Egxmzexmrk vitemv gcgpiw...", "Kix fiex. Liepmrk...") var/list/target_phrases = list("Xevkix psgexih.", "Iriqc jsyrh.", "Eguymvih xevkix.") /mob/living/simple_animal/hostile/megafauna/hierophant/Initialize(mapload) . = ..() - spawned_beacon = new(loc) - AddComponent(/datum/component/boss_music, 'sound/lavaland/hiero_boss.ogg', 145 SECONDS) + spawned_beacon_ref = WEAKREF(new /obj/effect/hierophant(loc)) + AddComponent(/datum/component/boss_music, 'sound/music/boss/hiero_boss.ogg', 145 SECONDS) /mob/living/simple_animal/hostile/megafauna/hierophant/Destroy() - QDEL_NULL(spawned_beacon) - . = ..() + QDEL_NULL(spawned_beacon_ref) + return ..() /datum/action/innate/megafauna_attack/blink name = "Blink To Target" button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "sniper_zoom" - chosen_message = "You are now blinking to your target." + chosen_message = span_colossus("You are now blinking to your target.") chosen_attack_num = 1 /datum/action/innate/megafauna_attack/chaser_swarm name = "Chaser Swarm" button_icon = 'icons/effects/effects.dmi' button_icon_state = "hierophant_squares_indefinite" - chosen_message = "You are firing a chaser swarm at your target." + chosen_message = span_colossus("You are firing a chaser swarm at your target.") chosen_attack_num = 2 /datum/action/innate/megafauna_attack/cross_blasts name = "Cross Blasts" button_icon = 'icons/effects/effects.dmi' button_icon_state = "hierophant_blast_indefinite" - chosen_message = "You are now firing cross blasts at your target." + chosen_message = span_colossus("You are now firing cross blasts at your target.") chosen_attack_num = 3 /datum/action/innate/megafauna_attack/blink_spam name = "Blink Chase" button_icon = 'icons/obj/mining_zones/artefacts.dmi' button_icon_state = "hierophant_club_ready_beacon" - chosen_message = "You are now repeatedly blinking at your target." + chosen_message = span_colossus("You are now repeatedly blinking at your target.") chosen_attack_num = 4 /mob/living/simple_animal/hostile/megafauna/hierophant/update_cooldowns(list/cooldown_updates, ignore_staggered = FALSE) . = ..() if(cooldown_updates[COOLDOWN_UPDATE_SET_CHASER]) - chaser_cooldown = world.time + cooldown_updates[COOLDOWN_UPDATE_SET_CHASER] + COOLDOWN_START(src, chaser_cooldown, cooldown_updates[COOLDOWN_UPDATE_SET_CHASER]) if(cooldown_updates[COOLDOWN_UPDATE_ADD_CHASER]) chaser_cooldown += cooldown_updates[COOLDOWN_UPDATE_ADD_CHASER] if(cooldown_updates[COOLDOWN_UPDATE_SET_ARENA]) - arena_cooldown = world.time + cooldown_updates[COOLDOWN_UPDATE_SET_ARENA] + COOLDOWN_START(src, arena_cooldown, cooldown_updates[COOLDOWN_UPDATE_SET_ARENA]) if(cooldown_updates[COOLDOWN_UPDATE_ADD_ARENA]) arena_cooldown += cooldown_updates[COOLDOWN_UPDATE_ADD_ARENA] @@ -179,7 +190,7 @@ Difficulty: Hard possibilities += "cross_blast_spam" if(get_dist(src, target) > 2) possibilities += "blink_spam" - if(chaser_cooldown < world.time) + if(COOLDOWN_FINISHED(src, chaser_cooldown)) if(prob(anger_modifier * 2)) possibilities = list("chaser_swarm") else @@ -194,7 +205,7 @@ Difficulty: Hard chaser_swarm(blink_counter, target_slowness, cross_counter) return - if(chaser_cooldown < world.time) //if chasers are off cooldown, fire some! + if(COOLDOWN_FINISHED(src, chaser_cooldown)) //if chasers are off cooldown, fire some! var/obj/effect/temp_visual/hierophant/chaser/C = new /obj/effect/temp_visual/hierophant/chaser(loc, src, target, chaser_speed, FALSE) update_cooldowns(list(COOLDOWN_UPDATE_SET_CHASER = chaser_cooldown_time)) if((prob(anger_modifier) || target.Adjacent(src)) && target != src) @@ -294,7 +305,7 @@ Difficulty: Hard new /obj/effect/temp_visual/hierophant/telegraph/diagonal(T, src) else new /obj/effect/temp_visual/hierophant/telegraph(T, src) - playsound(T, 'sound/effects/bin_close.ogg', 75, TRUE) + playsound(T, 'sound/effects/bin/bin_close.ogg', 75, TRUE) SLEEP_CHECK_DEATH(2, src) new /obj/effect/temp_visual/hierophant/blast/damaging(T, src, FALSE) for(var/d in directions) @@ -311,7 +322,7 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/hierophant/proc/arena_trap(mob/victim) //trap a target in an arena var/turf/T = get_turf(victim) - if(!istype(victim) || victim.stat == DEAD || !T || arena_cooldown > world.time) + if(!istype(victim) || victim.stat == DEAD || !T || !COOLDOWN_FINISHED(src, arena_cooldown)) return if((istype(get_area(T), /area/ruin/unpowered/hierophant) || istype(get_area(src), /area/ruin/unpowered/hierophant)) && victim != src) return @@ -342,8 +353,8 @@ Difficulty: Hard var/turf/source = get_turf(src) new /obj/effect/temp_visual/hierophant/telegraph(T, src) new /obj/effect/temp_visual/hierophant/telegraph(source, src) - playsound(T,'sound/magic/wand_teleport.ogg', 80, TRUE) - playsound(source,'sound/machines/airlockopen.ogg', 80, TRUE) + playsound(T,'sound/effects/magic/wand_teleport.ogg', 80, TRUE) + playsound(source,'sound/machines/airlock/airlockopen.ogg', 80, TRUE) blinking = TRUE SLEEP_CHECK_DEATH(2, src) //short delay before we start... new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src) @@ -375,14 +386,14 @@ Difficulty: Hard if(!T) return new /obj/effect/temp_visual/hierophant/telegraph(T, src) - playsound(T,'sound/effects/bin_close.ogg', 75, TRUE) + playsound(T,'sound/effects/bin/bin_close.ogg', 75, TRUE) SLEEP_CHECK_DEATH(2, src) for(var/t in RANGE_TURFS(1, T)) new /obj/effect/temp_visual/hierophant/blast/damaging(t, src, FALSE) //expanding square /proc/hierophant_burst(mob/caster, turf/original, burst_range, spread_speed = 0.5) - playsound(original,'sound/machines/airlockopen.ogg', 750, TRUE) + playsound(original,'sound/machines/airlock/airlockopen.ogg', 750, TRUE) var/last_dist = 0 for(var/t in spiral_range_turfs(burst_range, original)) var/turf/T = t @@ -397,23 +408,30 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/hierophant/proc/burst(turf/original, spread_speed) hierophant_burst(src, original, burst_range, spread_speed) -/mob/living/simple_animal/hostile/megafauna/hierophant/Life(seconds_per_tick = SSMOBS_DT, times_fired) +/mob/living/simple_animal/hostile/megafauna/hierophant/GiveTarget(new_target) . = ..() - if(. && spawned_beacon && !QDELETED(spawned_beacon) && !client) - if(target || loc == spawned_beacon.loc) - timeout_time = initial(timeout_time) - else - timeout_time-- - if(timeout_time <= 0 && !did_reset) - did_reset = TRUE - visible_message(span_hierophant_warning("\"Vixyvrmrk xs fewi...\"")) - blink(spawned_beacon) - adjustHealth(min((health - maxHealth) * 0.5, -250)) //heal for 50% of our missing health, minimum 10% of maximum health - wander = FALSE - if(health > maxHealth * 0.9) - visible_message(span_hierophant("\"Vitemvw gsqtpixi. Stivexmrk ex qebmqyq ijjmgmirgc.\"")) - else - visible_message(span_hierophant("\"Vitemvw gsqtpixi. Stivexmsrep ijjmgmirgc gsqtvsqmwih.\"")) + if(!isnull(new_target)) + deltimer(respawn_timer_id) + respawn_timer_id = null + return + if(respawn_timer_id || client || !spawned_beacon_ref) + return + respawn_timer_id = addtimer(CALLBACK(src, PROC_REF(send_me_home)), 30 SECONDS, flags = TIMER_STOPPABLE|TIMER_DELETE_ME) + +/mob/living/simple_animal/hostile/megafauna/hierophant/proc/send_me_home() + respawn_timer_id = null + var/obj/effect/hierophant/beacon = spawned_beacon_ref.resolve() + if(!beacon || client) + return + sitting_at_center = TRUE + visible_message(span_hierophant_warning("\"Vixyvrmrk xs fewi...\"")) + blink(beacon) + adjustHealth(min((health - maxHealth) * 0.5, -250)) //heal for 50% of our missing health, minimum 10% of maximum health + wander = FALSE + if(health > maxHealth * 0.9) + visible_message(span_hierophant("\"Vitemvw gsqtpixi. Stivexmrk ex qebmqyq ijjmgmirgc.\"")) + else + visible_message(span_hierophant("\"Vitemvw gsqtpixi. Stivexmsrep ijjmgmirgc gsqtvsqmwih.\"")) /mob/living/simple_animal/hostile/megafauna/hierophant/death() if(health > 0 || stat == DEAD) @@ -444,14 +462,15 @@ Difficulty: Hard . = ..() if(. && target && !targets_the_same) visible_message(span_hierophant_warning("\"[pick(target_phrases)]\"")) - if(spawned_beacon && loc == spawned_beacon.loc && did_reset) + var/obj/effect/hierophant/beacon = spawned_beacon_ref.resolve() + if(beacon && loc == beacon.loc && sitting_at_center) arena_trap(src) /mob/living/simple_animal/hostile/megafauna/hierophant/adjustHealth(amount, updating_health = TRUE, forced = FALSE) . = ..() if(src && . && !blinking) wander = TRUE - did_reset = FALSE + sitting_at_center = FALSE /mob/living/simple_animal/hostile/megafauna/hierophant/AttackingTarget(atom/attacked_target) if(!blinking) @@ -486,7 +505,7 @@ Difficulty: Hard if(!stat && .) var/obj/effect/temp_visual/hierophant/squares/HS = new(old_loc) HS.setDir(movement_dir) - playsound(src, 'sound/mecha/mechmove04.ogg', 80, TRUE, -4) + playsound(src, 'sound/vehicles/mecha/mechmove04.ogg', 80, TRUE, -4) if(target) arena_trap(target) @@ -496,7 +515,7 @@ Difficulty: Hard ..() /mob/living/simple_animal/hostile/megafauna/hierophant/proc/calculate_rage() //how angry we are overall - did_reset = FALSE //oh hey we're doing SOMETHING, clearly we might need to heal if we recall + sitting_at_center = FALSE //oh hey we're doing SOMETHING, clearly we might need to heal if we recall anger_modifier = clamp(((maxHealth - health) / 42),0,50) burst_range = initial(burst_range) + round(anger_modifier * 0.08) beam_range = initial(beam_range) + round(anger_modifier * 0.12) @@ -678,7 +697,7 @@ Difficulty: Hard var/turf/T = get_turf(src) if(!T) return - playsound(T,'sound/magic/blind.ogg', 65, TRUE, -5) //make a sound + playsound(T,'sound/effects/magic/blind.ogg', 65, TRUE, -5) //make a sound sleep(0.6 SECONDS) //wait a little bursting = TRUE do_damage(T) //do damage and mark us as bursting @@ -699,7 +718,7 @@ Difficulty: Hard continue if(L.client) flash_color(L.client, "#660099", 1) - playsound(L,'sound/weapons/sear.ogg', 50, TRUE, -4) + playsound(L,'sound/items/weapons/sear.ogg', 50, TRUE, -4) to_chat(L, span_userdanger("You're struck by a [name]!")) var/limb_to_hit = L.get_bodypart(L.get_random_valid_zone(even_weights = TRUE)) var/armor = L.run_armor_check(limb_to_hit, MELEE, "Your armor absorbs [src]!", "Your armor blocks part of [src]!", FALSE, 50, "Your armor was penetrated by [src]!") @@ -723,7 +742,7 @@ Difficulty: Hard if(friendly_fire_check && caster?.faction_check_atom(occupant)) continue to_chat(occupant, span_userdanger("Your [M.name] is struck by a [name]!")) - playsound(M,'sound/weapons/sear.ogg', 50, TRUE, -4) + playsound(M,'sound/items/weapons/sear.ogg', 50, TRUE, -4) M.take_damage(damage, BURN, 0, 0) /obj/effect/temp_visual/hierophant/blast/visual @@ -737,7 +756,7 @@ Difficulty: Hard /obj/effect/temp_visual/hierophant/blast/visual/Initialize(mapload, new_caster) . = ..() var/turf/src_turf = get_turf(src) - playsound(src_turf,'sound/magic/blind.ogg', 65, TRUE, -5) + playsound(src_turf,'sound/effects/magic/blind.ogg', 65, TRUE, -5) /obj/effect/hierophant name = "hierophant beacon" @@ -754,7 +773,7 @@ Difficulty: Hard if(club.beacon == src) to_chat(user, span_notice("You start removing your hierophant beacon...")) if(do_after(user, 5 SECONDS, target = src)) - playsound(src,'sound/magic/blind.ogg', 100, TRUE, -4) + playsound(src,'sound/effects/magic/blind.ogg', 100, TRUE, -4) new /obj/effect/temp_visual/hierophant/telegraph/teleport(get_turf(src), user) to_chat(user, span_hierophant_warning("You collect [src], reattaching it to the club!")) club.beacon = null diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 5077b3781e6a2..bb2f1025b00ee 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -32,7 +32,7 @@ icon = 'icons/mob/simple/lavaland/96x96megafauna.dmi' attack_verb_continuous = "chomps" attack_verb_simple = "chomp" - attack_sound = 'sound/magic/demon_attack1.ogg' + attack_sound = 'sound/effects/magic/demon_attack1.ogg' attack_vis_effect = ATTACK_EFFECT_BITE speak_emote = list("echoes") armour_penetration = 50 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 f892c7d05e913..7d5f38f9597a9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -17,7 +17,7 @@ Difficulty: Hard icon = 'icons/mob/simple/icemoon/64x64megafauna.dmi' attack_verb_continuous = "claws" attack_verb_simple = "claw" - attack_sound = 'sound/magic/demon_attack1.ogg' + attack_sound = 'sound/effects/magic/demon_attack1.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW weather_immunities = list(TRAIT_SNOWSTORM_IMMUNE) speak_emote = list("roars") @@ -149,7 +149,7 @@ Difficulty: Hard /proc/wendigo_scream(mob/owner) SLEEP_CHECK_DEATH(5, owner) - playsound(owner.loc, 'sound/magic/demon_dies.ogg', 600, FALSE, 10) + playsound(owner.loc, 'sound/effects/magic/demon_dies.ogg', 600, FALSE, 10) var/pixel_shift = rand(5, 15) animate(owner, pixel_z = pixel_shift, time = 1, loop = 20, flags = ANIMATION_RELATIVE) animate(pixel_z = -pixel_shift, time = 1, flags = ANIMATION_RELATIVE) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 78bd8a9c5b648..253fe799bfd2c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -27,7 +27,7 @@ GLOBAL_LIST_INIT(animatable_blacklist, typecacheof(list( harm_intent_damage = 5 melee_damage_lower = 8 melee_damage_upper = 12 - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' emote_taunt = list("growls") speak_emote = list("creaks") taunt_chance = 30 @@ -298,10 +298,10 @@ GLOBAL_LIST_INIT(animatable_blacklist, typecacheof(list( speak_emote = list("clatters") gold_core_spawnable = HOSTILE_SPAWN var/opened = FALSE - var/open_sound = 'sound/machines/crate_open.ogg' - var/close_sound = 'sound/machines/crate_close.ogg' + var/open_sound = 'sound/machines/crate/crate_open.ogg' + var/close_sound = 'sound/machines/crate/crate_close.ogg' ///sound played when the mimic attempts to eat more items than it can - var/full_sound = 'sound/items/trayhit2.ogg' + var/full_sound = 'sound/items/trayhit/trayhit2.ogg' var/max_mob_size = MOB_SIZE_HUMAN var/locked = FALSE var/datum/action/innate/mimic/lock/lock 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 95744d0a2d310..03d79c108d60d 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 @@ -16,7 +16,7 @@ melee_damage_type = BURN attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/effects/curseattack.ogg' + attack_sound = 'sound/effects/curse/curseattack.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH throw_message = "passes through the smokey body of" obj_damage = 0 @@ -30,7 +30,7 @@ . = ..() QDEL_IN(src, 60 SECONDS) AddElement(/datum/element/simple_flying) - playsound(src, 'sound/effects/curse1.ogg', 100, TRUE, -1) + playsound(src, 'sound/effects/curse/curse1.ogg', 100, TRUE, -1) /mob/living/simple_animal/hostile/asteroid/curseblob/Destroy() new /obj/effect/temp_visual/dir_setting/curse/blob(loc, dir) 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 ae0011f998a68..b40a793f0fc74 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 @@ -353,7 +353,7 @@ While using this makes the system rely on OnFire, it still gives options for tim to_chat(mychild, "Your max health has been halved, but can now heal by standing on your tumor. Note, it's your only way to heal.\n\ Bear in mind, if anyone interacts with your tumor, you'll be resummoned here to carry out another fight. In such a case, you will regain your full max health.\n\ Also, be weary of your fellow inhabitants, they likely won't be happy to see you!") - to_chat(mychild, "Note that you are a lavaland monster, and thus not allied to the station. You should not cooperate or act friendly with any station crew unless under extreme circumstances!") + to_chat(mychild, span_boldbig("Note that you are a lavaland monster, and thus not allied to the station. You should not cooperate or act friendly with any station crew unless under extreme circumstances!")) /obj/item/tumor_shard name = "tumor shard" @@ -380,8 +380,8 @@ While using this makes the system rely on OnFire, it still gives options for tim E.revive(HEAL_ALL) user.visible_message(span_notice("[user] stabs [E] with [src], reviving it.")) E.playsound_local(get_turf(E), 'sound/effects/magic.ogg', 40, 0) - to_chat(E, "You have been revived by [user]. While you can't speak to them, you owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk.") - to_chat(E, "Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!") + to_chat(E, span_userdanger("You have been revived by [user]. While you can't speak to them, you owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk.")) + to_chat(E, span_boldbig("Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!")) E.maxHealth = E.maxHealth * 0.4 E.health = E.maxHealth E.desc = "[E.desc] However, this one appears to be less wild in nature, and calmer around people." diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index bb3b6874f043c..e3cccde2bc6d6 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -36,7 +36,7 @@ armour_penetration = 30 attack_verb_continuous = "beats down on" attack_verb_simple = "beat down on" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' throw_message = "does nothing to the rocky hide of the" speed = 2 move_to_delay = 5 @@ -50,7 +50,7 @@ /datum/action/innate/elite_attack/rage, /datum/action/innate/elite_attack/call_children) - var/rand_tent = 0 + COOLDOWN_DECLARE(random_tentacle) var/list/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/children_list = list() /mob/living/simple_animal/hostile/asteroid/elite/broodmother/Initialize(mapload) @@ -60,25 +60,25 @@ /datum/action/innate/elite_attack/tentacle_patch name = "Tentacle Patch" button_icon_state = "tentacle_patch" - chosen_message = "You are now attacking with a patch of tentacles." + chosen_message = span_boldwarning("You are now attacking with a patch of tentacles.") chosen_attack_num = TENTACLE_PATCH /datum/action/innate/elite_attack/spawn_children name = "Spawn Children" button_icon_state = "spawn_children" - chosen_message = "You will spawn two children at your location to assist you in combat. You can have up to 8." + chosen_message = span_boldwarning("You will spawn two children at your location to assist you in combat. You can have up to 8.") chosen_attack_num = SPAWN_CHILDREN /datum/action/innate/elite_attack/rage name = "Rage" button_icon_state = "rage" - chosen_message = "You will temporarily increase your movement speed." + chosen_message = span_boldwarning("You will temporarily increase your movement speed.") chosen_attack_num = RAGE /datum/action/innate/elite_attack/call_children name = "Call Children" button_icon_state = "call_children" - chosen_message = "You will summon your children to your location." + chosen_message = span_boldwarning("You will summon your children to your location.") chosen_attack_num = CALL_CHILDREN /mob/living/simple_animal/hostile/asteroid/elite/broodmother/OpenFire() @@ -108,15 +108,16 @@ . = ..() if(!.) //Checks if they are dead as a rock. return - if(health < maxHealth * 0.5 && rand_tent < world.time) - rand_tent = world.time + 30 - var/tentacle_amount = 5 - if(health < maxHealth * 0.25) - tentacle_amount = 10 - var/tentacle_loc = spiral_range_turfs(5, get_turf(src)) - for(var/i in 1 to tentacle_amount) - var/turf/t = pick_n_take(tentacle_loc) - new /obj/effect/goliath_tentacle/broodmother(t, src) + if(health >= maxHealth * 0.5 || !COOLDOWN_FINISHED(src, random_tentacle)) + return + COOLDOWN_START(src, random_tentacle, 3 SECONDS) + var/tentacle_amount = 5 + if(health < maxHealth * 0.25) + tentacle_amount = 10 + var/list/possible_turfs = RANGE_TURFS(5, get_turf(src)) + for(var/i in 1 to tentacle_amount) + var/turf/innsmouth = pick_n_take(possible_turfs) + new /obj/effect/goliath_tentacle/broodmother(innsmouth, src) /mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/tentacle_patch(target) ranged_cooldown = world.time + 15 @@ -141,7 +142,7 @@ /mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/rage() ranged_cooldown = world.time + 100 - playsound(src,'sound/voice/insane_low_laugh.ogg', 200, 1) + playsound(src,'sound/misc/insane_low_laugh.ogg', 200, 1) visible_message(span_warning("[src] starts picking up speed!")) color = COLOR_RED set_varspeed(0) @@ -180,7 +181,7 @@ melee_damage_upper = 5 attack_verb_continuous = "bashes against" attack_verb_simple = "bash against" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' throw_message = "does nothing to the rocky hide of the" speed = 2 move_to_delay = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm index 0a01777fb1fd7..b12be32587e3d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm @@ -34,12 +34,12 @@ melee_damage_upper = 20 attack_verb_continuous = "preaches to" attack_verb_simple = "preach to" - attack_sound = 'sound/magic/clockwork/ratvar_attack.ogg' + attack_sound = 'sound/effects/magic/clockwork/ratvar_attack.ogg' throw_message = "doesn't affect the purity of" speed = 2 move_to_delay = 10 mouse_opacity = MOUSE_OPACITY_ICON - death_sound = 'sound/magic/demon_dies.ogg' + death_sound = 'sound/effects/magic/demon_dies.ogg' death_message = "begins to shudder as it becomes transparent..." loot_drop = /obj/item/clothing/neck/cloak/herald_cloak @@ -67,30 +67,30 @@ . = ..() if(stat != CONSCIOUS) return - playsound(src, 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + playsound(src, 'sound/effects/magic/clockwork/invoke_general.ogg', 20, TRUE) /datum/action/innate/elite_attack/herald_trishot name = "Triple Shot" button_icon_state = "herald_trishot" - chosen_message = "You are now firing three shots in your chosen direction." + chosen_message = span_boldwarning("You are now firing three shots in your chosen direction.") chosen_attack_num = HERALD_TRISHOT /datum/action/innate/elite_attack/herald_directionalshot name = "Circular Shot" button_icon_state = "herald_directionalshot" - chosen_message = "You are firing projectiles in all directions." + chosen_message = span_boldwarning("You are firing projectiles in all directions.") chosen_attack_num = HERALD_DIRECTIONALSHOT /datum/action/innate/elite_attack/herald_teleshot name = "Teleport Shot" button_icon_state = "herald_teleshot" - chosen_message = "You will now fire a shot which teleports you where it lands." + chosen_message = span_boldwarning("You will now fire a shot which teleports you where it lands.") chosen_attack_num = HERALD_TELESHOT /datum/action/innate/elite_attack/herald_mirror name = "Summon Mirror" button_icon_state = "herald_mirror" - chosen_message = "You will spawn a mirror which duplicates your attacks." + chosen_message = span_boldwarning("You will spawn a mirror which duplicates your attacks.") chosen_attack_num = HERALD_MIRROR /mob/living/simple_animal/hostile/asteroid/elite/herald/OpenFire() @@ -146,14 +146,14 @@ /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_trishot(target) ranged_cooldown = world.time + 30 - playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + playsound(get_turf(src), 'sound/effects/magic/clockwork/invoke_general.ogg', 20, TRUE) var/target_turf = get_turf(target) var/angle_to_target = get_angle(src, target_turf) shoot_projectile(target_turf, angle_to_target, FALSE, TRUE) addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE, TRUE), 0.2 SECONDS) addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE, TRUE), 0.4 SECONDS) if(health < maxHealth * 0.5 && !is_mirror) - playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + playsound(get_turf(src), 'sound/effects/magic/clockwork/invoke_general.ogg', 20, TRUE) addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE, TRUE), 1 SECONDS) addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE, TRUE), 1.2 SECONDS) addtimer(CALLBACK(src, PROC_REF(shoot_projectile), target_turf, angle_to_target, FALSE, TRUE), 1.4 SECONDS) @@ -172,23 +172,23 @@ ranged_cooldown = world.time + 3 SECONDS if(!is_mirror) icon_state = "herald_enraged" - playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + playsound(get_turf(src), 'sound/effects/magic/clockwork/invoke_general.ogg', 20, TRUE) addtimer(CALLBACK(src, PROC_REF(herald_circleshot), 0), 0.5 SECONDS) if(health < maxHealth * 0.5 && !is_mirror) - playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + playsound(get_turf(src), 'sound/effects/magic/clockwork/invoke_general.ogg', 20, TRUE) addtimer(CALLBACK(src, PROC_REF(herald_circleshot), 22.5), 1.5 SECONDS) addtimer(CALLBACK(src, PROC_REF(unenrage)), 2 SECONDS) /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_teleshot(target) ranged_cooldown = world.time + 30 - playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + playsound(get_turf(src), 'sound/effects/magic/clockwork/invoke_general.ogg', 20, TRUE) var/target_turf = get_turf(target) var/angle_to_target = get_angle(src, target_turf) shoot_projectile(target_turf, angle_to_target, TRUE, FALSE) /mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_mirror() ranged_cooldown = world.time + 4 SECONDS - playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + playsound(get_turf(src), 'sound/effects/magic/clockwork/invoke_general.ogg', 20, TRUE) if(my_mirror != null) qdel(my_mirror) my_mirror = null @@ -207,7 +207,7 @@ pixel_x = -16 base_pixel_x = -16 death_message = "shatters violently!" - death_sound = 'sound/effects/glassbr1.ogg' + death_sound = 'sound/effects/glass/glassbr1.ogg' del_on_death = TRUE is_mirror = TRUE move_resist = MOVE_FORCE_OVERPOWERING // no dragging your mirror around @@ -286,7 +286,7 @@ return owner.visible_message(span_danger("[owner]'s [src] emits a loud noise as [owner] is struck!")) var/static/list/directional_shot_angles = list(0, 45, 90, 135, 180, 225, 270, 315) - playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE) + playsound(get_turf(owner), 'sound/effects/magic/clockwork/invoke_general.ogg', 20, TRUE) addtimer(CALLBACK(src, PROC_REF(reactionshot), owner), 1 SECONDS) #undef HERALD_TRISHOT diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm index ba9e8daa99621..4853e0f3d019b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm @@ -31,13 +31,13 @@ melee_damage_upper = 35 attack_verb_continuous = "slashes its arms at" attack_verb_simple = "slash your arms at" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH throw_message = "doesn't affect the sturdiness of" speed = 1 move_to_delay = 3 mouse_opacity = MOUSE_OPACITY_ICON - death_sound = 'sound/magic/curse.ogg' + death_sound = 'sound/effects/magic/curse.ogg' death_message = "'s arms reach out before it falls apart onto the floor, lifeless." loot_drop = /obj/item/crusher_trophy/legionnaire_spine @@ -55,25 +55,25 @@ /datum/action/innate/elite_attack/legionnaire_charge name = "Legionnaire Charge" button_icon_state = "legionnaire_charge" - chosen_message = "You will attempt to grab your opponent and throw them." + chosen_message = span_boldwarning("You will attempt to grab your opponent and throw them.") chosen_attack_num = LEGIONNAIRE_CHARGE /datum/action/innate/elite_attack/head_detach name = "Release Head" button_icon_state = "head_detach" - chosen_message = "You will now detach your head or kill it if it is already released." + chosen_message = span_boldwarning("You will now detach your head or kill it if it is already released.") chosen_attack_num = HEAD_DETACH /datum/action/innate/elite_attack/bonfire_teleport name = "Bonfire Teleport" button_icon_state = "bonfire_teleport" - chosen_message = "You will leave a bonfire. Second use will let you swap positions with it indefintiely. Using this move on the same tile as your active bonfire removes it." + chosen_message = span_boldwarning("You will leave a bonfire. Second use will let you swap positions with it indefintiely. Using this move on the same tile as your active bonfire removes it.") chosen_attack_num = BONFIRE_TELEPORT /datum/action/innate/elite_attack/spew_smoke name = "Spew Smoke" button_icon_state = "spew_smoke" - chosen_message = "Your head will spew smoke in an area, wherever it may be." + chosen_message = span_boldwarning("Your head will spew smoke in an area, wherever it may be.") chosen_attack_num = SPEW_SMOKE /mob/living/simple_animal/hostile/asteroid/elite/legionnaire/OpenFire() @@ -121,7 +121,7 @@ for(var/i in 1 to 6) new /obj/effect/temp_visual/dragon_swoop/legionnaire(T) T = get_step(T, dir_to_target) - playsound(src,'sound/magic/demon_attack1.ogg', 200, 1) + playsound(src,'sound/effects/magic/demon_attack1.ogg', 200, 1) visible_message(span_boldwarning("[src] prepares to charge!")) addtimer(CALLBACK(src, PROC_REF(legionnaire_charge_2), dir_to_target, 0), 0.4 SECONDS) @@ -200,7 +200,7 @@ var/obj/structure/legionnaire_bonfire/newpile = new /obj/structure/legionnaire_bonfire(loc) mypile = newpile mypile.myowner = src - playsound(get_turf(src),'sound/items/fultext_deploy.ogg', 200, 1) + playsound(get_turf(src),'sound/items/fulton/fultext_deploy.ogg', 200, 1) visible_message(span_boldwarning("[src] summons a bonfire on [get_turf(src)]!")) return else @@ -210,8 +210,8 @@ mypile.take_damage(100) mypile = null return - playsound(pileturf,'sound/items/fultext_deploy.ogg', 200, 1) - playsound(legionturf,'sound/items/fultext_deploy.ogg', 200, 1) + playsound(pileturf,'sound/items/fulton/fultext_deploy.ogg', 200, 1) + playsound(legionturf,'sound/items/fulton/fultext_deploy.ogg', 200, 1) visible_message(span_boldwarning("[src] melts down into a burning pile of bones!")) forceMove(pileturf) visible_message(span_boldwarning("[src] forms from the bonfire!")) @@ -249,7 +249,7 @@ melee_damage_upper = 20 attack_verb_continuous = "bites at" attack_verb_simple = "bite at" - attack_sound = 'sound/effects/curse1.ogg' + attack_sound = 'sound/effects/curse/curse1.ogg' attack_vis_effect = ATTACK_EFFECT_BITE throw_message = "simply misses" speed = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm index 33bcb4dc9d704..e865c40c1f71a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -31,12 +31,12 @@ melee_damage_upper = 15 attack_verb_continuous = "smashes into the side of" attack_verb_simple = "smash into the side of" - attack_sound = 'sound/weapons/sonic_jackhammer.ogg' + attack_sound = 'sound/items/weapons/sonic_jackhammer.ogg' throw_message = "merely dinks off of the" speed = 3 move_to_delay = 10 mouse_opacity = MOUSE_OPACITY_ICON - death_sound = 'sound/magic/repulse.ogg' + death_sound = 'sound/effects/magic/repulse.ogg' death_message = "'s lights flicker, before its top part falls down." loot_drop = /obj/item/clothing/accessory/pandora_hope @@ -51,25 +51,25 @@ /datum/action/innate/elite_attack/singular_shot name = "Singular Shot" button_icon_state = "singular_shot" - chosen_message = "You are now creating a single linear magic square." + chosen_message = span_boldwarning("You are now creating a single linear magic square.") chosen_attack_num = SINGULAR_SHOT /datum/action/innate/elite_attack/magic_box name = "Magic Box" button_icon_state = "magic_box" - chosen_message = "You are now attacking with a box of magic squares." + chosen_message = span_boldwarning("You are now attacking with a box of magic squares.") chosen_attack_num = MAGIC_BOX /datum/action/innate/elite_attack/pandora_teleport name = "Line Teleport" button_icon_state = "pandora_teleport" - chosen_message = "You will now teleport to your target." + chosen_message = span_boldwarning("You will now teleport to your target.") chosen_attack_num = PANDORA_TELEPORT /datum/action/innate/elite_attack/aoe_squares name = "AOE Blast" button_icon_state = "aoe_squares" - chosen_message = "Your attacks will spawn an AOE blast at your target location." + chosen_message = span_boldwarning("Your attacks will spawn an AOE blast at your target location.") chosen_attack_num = AOE_SQUARES /mob/living/simple_animal/hostile/asteroid/elite/pandora/OpenFire() @@ -135,7 +135,7 @@ var/turf/source = get_turf(src) new /obj/effect/temp_visual/hierophant/telegraph(turf_target, src) new /obj/effect/temp_visual/hierophant/telegraph(source, src) - playsound(source,'sound/machines/airlockopen.ogg', 200, 1) + playsound(source,'sound/machines/airlock/airlockopen.ogg', 200, 1) addtimer(CALLBACK(src, PROC_REF(pandora_teleport_2), turf_target, source), 0.2 SECONDS) /mob/living/simple_animal/hostile/asteroid/elite/pandora/proc/pandora_teleport_2(turf/T, turf/source) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm index ba2752dd0e45e..6e422848b4436 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm @@ -19,7 +19,7 @@ melee_damage_upper = 25 attack_verb_continuous = "claws" attack_verb_simple = "claw" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW vision_range = 2 // don't aggro unless you basically antagonize it, though they will kill you worse than a goliath will aggro_vision_range = 9 diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm index f25fd4dc0fe2d..ff33a54337544 100644 --- a/code/modules/mob/living/simple_animal/hostile/ooze.dm +++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm @@ -21,7 +21,7 @@ maxHealth = 200 attack_verb_continuous = "slimes" attack_verb_simple = "slime" - attack_sound = 'sound/effects/blobattack.ogg' + attack_sound = 'sound/effects/blob/blobattack.ogg' combat_mode = TRUE environment_smash = ENVIRONMENT_SMASH_STRUCTURES mob_size = MOB_SIZE_LARGE @@ -196,7 +196,7 @@ ///This action lets you consume the mob you're currently pulling. I'M GONNA CONSUUUUUME (this is considered one of the funny memes in the 2019-2020 era) /datum/action/consume name = "Consume" - desc = "Consume a mob that you are dragging to gain nutrition from them" + desc = "Consume a mob that you are dragging to gain nutrition from them." background_icon_state = "bg_hive" overlay_icon_state = "bg_hive_border" button_icon = 'icons/mob/actions/actions_slime.dmi' @@ -216,16 +216,16 @@ if(!.) return var/mob/living/simple_animal/hostile/ooze/gelatinous/ooze = owner + if(vored_mob) //one happy meal at a time, buddy + stop_consuming() + return FALSE if(!isliving(ooze.pulling)) to_chat(src, span_warning("You need to be pulling a creature for this to work!")) return FALSE - if(vored_mob) - to_chat(src, span_warning("You are already consuming another creature!")) - return FALSE - owner.visible_message(span_warning("[ooze] starts attempting to devour [target]!"), span_notice("You start attempting to devour [target].")) - if(!do_after(ooze, 1.5 SECONDS, target = ooze.pulling)) - return FALSE var/mob/living/eat_target = ooze.pulling + owner.visible_message(span_warning("[ooze] starts attempting to devour [eat_target]!"), span_notice("You start attempting to devour [eat_target].")) + if(!do_after(ooze, 1.5 SECONDS, eat_target)) + return FALSE if(!(eat_target.mob_biotypes & MOB_ORGANIC) || eat_target.stat == DEAD) to_chat(src, span_warning("This creature isn't to my tastes!")) @@ -240,6 +240,7 @@ playsound(owner,'sound/items/eatfood.ogg', rand(30,50), TRUE) owner.visible_message(span_warning("[src] devours [target]!"), span_notice("You devour [target].")) START_PROCESSING(SSprocessing, src) + build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) ///Stop consuming the mob; dump them on the floor /datum/action/consume/proc/stop_consuming() @@ -252,6 +253,7 @@ owner.visible_message(span_warning("[owner] pukes out [vored_mob]!"), span_notice("You puke out [vored_mob].")) UnregisterSignal(vored_mob, COMSIG_QDELETING) vored_mob = null + build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) ///Gain health for the consumption and dump some brute loss on the target. /datum/action/consume/process() @@ -260,14 +262,26 @@ 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 bruteloss. - if(vored_mob.getBruteLoss() >= 200) + ///Dump 'em if they're dead. + if(vored_mob.stat == DEAD) stop_consuming() /datum/action/consume/Remove(mob/remove_from) stop_consuming() return ..() +/datum/action/consume/update_button_name(atom/movable/screen/movable/action_button/button, force) + if(vored_mob) + name = "Eject Mob" + desc = "Eject the mob you're currently consuming." + else + name = "Consume" + desc = "Consume a mob that you are dragging to gain nutrition from them." + return ..() + +/datum/action/consume/apply_button_icon(atom/movable/screen/movable/action_button/current_button, force) + button_icon_state = vored_mob ? "eject" : "consume" + return ..() ///* Gelatinious Grapes code below *\\\\ diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm index 30afc69c8b3e9..b177cc651ecaa 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm @@ -158,10 +158,11 @@ /mob/living/simple_animal/hostile/retaliate/goose/Life(seconds_per_tick = SSMOBS_DT, times_fired) . = ..() - if(choking && !stat) - do_jitter_animation(50) - if(SPT_PROB(10, seconds_per_tick)) - emote("gasp") + if(!choking || stat) + return + do_jitter_animation(50) + if(SPT_PROB(10, seconds_per_tick)) + INVOKE_ASYNC(src, PROC_REF(emote), "gasp") /mob/living/simple_animal/hostile/retaliate/goose/proc/suffocate() if(!choking) diff --git a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm index fb7ac24da657f..d77649562430c 100644 --- a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm +++ b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm @@ -22,7 +22,7 @@ lighting_cutoff_red = 10 lighting_cutoff_green = 25 lighting_cutoff_blue = 20 - attack_sound = 'sound/weapons/punch3.ogg' + attack_sound = 'sound/items/weapons/punch3.ogg' attack_verb_continuous = "slaps" attack_verb_simple = "slap" @@ -108,7 +108,7 @@ span_warning("[owner] slaps [to_slap] with its tentacle!"), span_notice("You slap [to_slap] with your tentacle."), ) - playsound(owner, 'sound/effects/assslap.ogg', 90) + playsound(owner, 'sound/effects/emotes/assslap.ogg', 90) var/atom/throw_target = get_edge_target_turf(to_slap, owner.dir) living_to_slap.throw_at(throw_target, 6, 4, owner) living_to_slap.apply_damage(30, BRUTE) diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/zombie.dm index 6bcb7afbd5402..45bcf6cd3acd7 100644 --- a/code/modules/mob/living/simple_animal/hostile/zombie.dm +++ b/code/modules/mob/living/simple_animal/hostile/zombie.dm @@ -13,7 +13,7 @@ melee_damage_upper = 21 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/hallucinations/growl1.ogg' + attack_sound = 'sound/effects/hallucinations/growl1.ogg' attack_vis_effect = ATTACK_EFFECT_BITE combat_mode = TRUE atmos_requirements = null diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 3a297b400eba0..7f6d8bdca2765 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -234,7 +234,7 @@ . += "There appears to be [icon2html(access_card, user)] \a [access_card] pinned to [p_them()]." /mob/living/simple_animal/update_stat() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return if(stat != DEAD) if(health <= 0) @@ -389,8 +389,8 @@ if(see_invisible < the_target.invisibility) return FALSE if(ismob(the_target)) - var/mob/M = the_target - if(M.status_flags & GODMODE) + var/mob/mob = the_target + if(HAS_TRAIT(mob, TRAIT_GODMODE)) return FALSE if (isliving(the_target)) var/mob/living/L = the_target @@ -495,7 +495,7 @@ //ANIMAL RIDING /mob/living/simple_animal/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) - if(user.incapacitated()) + if(user.incapacitated) return for(var/atom/movable/A in get_turf(src)) if(A != src && A != M && A.density) @@ -521,7 +521,7 @@ return /mob/living/simple_animal/relaymove(mob/living/user, direction) - if(user.incapacitated()) + if(user.incapacitated) return return relaydrive(user, direction) @@ -561,7 +561,7 @@ if(isliving(hunted)) // Are we hunting a living mob? var/mob/living/prey = hunted if(inept_hunter) // Make your hunter inept to have them unable to catch their prey. - visible_message("[src] chases [prey] around, to no avail!") + visible_message(span_warning("[src] chases [prey] around, to no avail!")) step(prey, pick(GLOB.cardinals)) COOLDOWN_START(src, emote_cooldown, 1 MINUTES) return diff --git a/code/modules/mob/living/sneeze.dm b/code/modules/mob/living/sneeze.dm index 4c38027fda0d8..ebf6162083482 100644 --- a/code/modules/mob/living/sneeze.dm +++ b/code/modules/mob/living/sneeze.dm @@ -30,8 +30,8 @@ if(catcher && catcher.given_turf) catcher.calculate_params() /// Take the target and subtract self for relative grid position. Then take the pixel x on the tile and divide by the tiles pixel size, and add 0.5 so it's fired from the center - var/sneeze_x = catcher.given_turf.x - x + catcher.given_x / world.icon_size - 0.5 - var/sneeze_y = catcher.given_turf.y - y + catcher.given_y / world.icon_size - 0.5 + var/sneeze_x = catcher.given_turf.x - x + catcher.given_x / ICON_SIZE_X - 0.5 + var/sneeze_y = catcher.given_turf.y - y + catcher.given_y / ICON_SIZE_Y - 0.5 angle = ATAN2(sneeze_y, sneeze_x) // Check if we're within the sneeze cone, otherwise just sneeze straight diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 447031dc1c805..5c76831cbce87 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -10,7 +10,7 @@ /mob/living/proc/check_stun_immunity(check_flags = CANSTUN, force_stun = FALSE) SHOULD_CALL_PARENT(TRUE) - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return TRUE if(force_stun) // Does not take priority over god mode? I guess @@ -385,7 +385,7 @@ /mob/living/proc/Sleeping(amount) //Can't go below remaining duration if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, amount) & COMPONENT_NO_STUN) return - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return var/datum/status_effect/incapacitating/sleeping/S = IsSleeping() if(S) @@ -397,7 +397,7 @@ /mob/living/proc/SetSleeping(amount) //Sets remaining duration if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, amount) & COMPONENT_NO_STUN) return - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return var/datum/status_effect/incapacitating/sleeping/S = IsSleeping() if(amount <= 0) @@ -412,7 +412,7 @@ /mob/living/proc/AdjustSleeping(amount) //Adds to remaining duration if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, amount) & COMPONENT_NO_STUN) return - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return var/datum/status_effect/incapacitating/sleeping/S = IsSleeping() if(S) @@ -425,7 +425,7 @@ /mob/living/proc/PermaSleeping() if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, -1) & COMPONENT_NO_STUN) return - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return var/datum/status_effect/incapacitating/sleeping/S = IsSleeping() if(S) diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm index 72adcbb43df8b..28dbbc078c5af 100644 --- a/code/modules/mob/living/taste.dm +++ b/code/modules/mob/living/taste.dm @@ -52,27 +52,31 @@ return NONE /mob/living/carbon/get_liked_foodtypes() - var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) - // No tongue, no tastin' - if(!tongue?.sense_of_taste || HAS_TRAIT(src, TRAIT_AGEUSIA)) + if(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 + var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) + . = tongue.liked_foodtypes + if(HAS_TRAIT(src, TRAIT_VEGETARIAN)) + . &= ~MEAT /** * Gets food flags that this mob dislikes **/ /mob/living/proc/get_disliked_foodtypes() + if(HAS_TRAIT(src, TRAIT_VEGETARIAN)) + return MEAT return NONE /mob/living/carbon/get_disliked_foodtypes() - var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) - // No tongue, no tastin' - if(!tongue?.sense_of_taste || HAS_TRAIT(src, TRAIT_AGEUSIA)) + if(HAS_TRAIT(src, TRAIT_AGEUSIA)) return NONE - return tongue.disliked_foodtypes + var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) + . = tongue.disliked_foodtypes + if(HAS_TRAIT(src, TRAIT_VEGETARIAN)) + . |= MEAT /** * Gets food flags that this mob hates @@ -83,9 +87,8 @@ /mob/living/carbon/get_toxic_foodtypes() var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) - // No tongue, no tastin' if(!tongue) - return TOXIC + return ..() 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 d017a2acca1be..17e929ba42290 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -91,11 +91,9 @@ sync_mind() //Reload alternate appearances - for(var/v in GLOB.active_alternate_appearances) - if(!v) - continue - var/datum/atom_hud/alternate_appearance/AA = v - AA.onNewMob(src) + for(var/datum/atom_hud/alternate_appearance/alt_hud as anything in GLOB.active_alternate_appearances) + if(!alt_hud.apply_to_new_mob(src)) + alt_hud.hide_from(src, absolute = TRUE) update_client_colour() update_mouse_pointer() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 4f8ef0ade9815..138ab0269891e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -83,13 +83,12 @@ add_to_dead_mob_list() else add_to_alive_mob_list() + update_incapacitated() set_focus(src) prepare_huds() - for(var/v in GLOB.active_alternate_appearances) - if(!v) - continue - var/datum/atom_hud/alternate_appearance/AA = v - AA.onNewMob(src) + for(var/datum/atom_hud/alternate_appearance/alt_hud as anything in GLOB.active_alternate_appearances) + alt_hud.apply_to_new_mob(src) + set_nutrition(rand(NUTRITION_LEVEL_START_MIN, NUTRITION_LEVEL_START_MAX)) . = ..() setup_hud_traits() @@ -293,7 +292,7 @@ var/raw_msg = message if(visible_message_flags & EMOTE_MESSAGE) - message = "[src][separation][message]" // SKYRAT EDIT - Better emotes + message = span_emote("[src][separation][message]") // SKYRAT EDIT - Better emotes for(var/mob/M in hearers) if(!M.client) @@ -340,7 +339,7 @@ var/raw_self_message = self_message var/self_runechat = FALSE if(visible_message_flags & EMOTE_MESSAGE) - self_message = "[src] [self_message]" // May make more sense as "You do x" + self_message = span_emote("[src] [self_message]") // May make more sense as "You do x" if(visible_message_flags & ALWAYS_SHOW_SELF_MESSAGE) to_chat(src, self_message) @@ -382,7 +381,7 @@ hearers -= src var/raw_msg = message if(audible_message_flags & EMOTE_MESSAGE) - message = "[src][separation][message]" //SKYRAT EDIT CHANGE + message = span_emote("[src][separation][message]") //SKYRAT EDIT CHANGE for(var/mob/M in hearers) // SKYRAT EDIT ADDITION - Emote pref checks if(pref_to_check && !M.client?.prefs.read_preference(pref_to_check)) @@ -410,7 +409,7 @@ var/raw_self_message = self_message var/self_runechat = FALSE if(audible_message_flags & EMOTE_MESSAGE) - self_message = "[src] [self_message]" + self_message = span_emote("[src] [self_message]") if(audible_message_flags & ALWAYS_SHOW_SELF_MESSAGE) to_chat(src, self_message) self_runechat = TRUE @@ -451,9 +450,21 @@ return null -///Is the mob incapacitated -/mob/proc/incapacitated(flags) - return +/// Called whenever anything that modifes incapacitated is ran, updates it and sends a signal if it changes +/// Returns TRUE if anything changed, FALSE otherwise +/mob/proc/update_incapacitated() + SIGNAL_HANDLER + var/old_incap = incapacitated + incapacitated = build_incapacitated() + if(old_incap == incapacitated) + return FALSE + + SEND_SIGNAL(src, COMSIG_MOB_INCAPACITATE_CHANGED, old_incap, incapacitated) + return TRUE + +/// Returns an updated incapacitated bitflag. If a flag is set it means we're incapacitated in that case +/mob/proc/build_incapacitated() + return NONE /** * This proc is called whenever someone clicks an inventory ui slot. @@ -549,37 +560,31 @@ return face_atom(examinify) - var/list/result + var/result_combined if(client) LAZYINITLIST(client.recent_examines) - var/ref_to_atom = ref(examinify) + var/ref_to_atom = REF(examinify) var/examine_time = client.recent_examines[ref_to_atom] if(examine_time && (world.time - examine_time < EXAMINE_MORE_WINDOW)) - result = examinify.examine_more(src) + var/list/result = examinify.examine_more(src) if(!length(result)) result += span_notice("You examine [examinify] closer, but find nothing of interest...") + result_combined = jointext(result, "
        ") + result_combined = replacetext(result_combined, "

        ", "
        ") // BUBBER EDIT ADDITION - bit of a hack here to make sure we don't get linebreaks coming after headers + 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 - if(result.len) - for(var/i = 1; i <= length(result); i++) - if(result[i] != EXAMINE_SECTION_BREAK) - result[i] += "\n" - else - // remove repeated and ones on the ends. - if((i == 1) || (i == length(result)) || (result[i - 1] == EXAMINE_SECTION_BREAK)) - result.Cut(i, i + 1) - i-- - //SKYRAT EDIT END + if(!result_combined) + var/list/result = examinify.examine(src) + var/atom_title = examinify.examine_title(src, thats = TRUE) + SEND_SIGNAL(src, COMSIG_MOB_EXAMINING, examinify, result) + result_combined = (atom_title ? "[span_slightly_larger("[atom_title][ismob(examinify) ? "!" :"."][EXAMINE_SECTION_BREAK]")]" : "") + jointext(result, "
        ") // BUBBER EDIT CHANGE - No centered title + exclamation point for mobs - ORIGINAL: result_combined = (atom_title ? fieldset_block("[span_slightly_larger(atom_title)].", jointext(result, "
        "), "examine_block") : examine_block(jointext(result, "
        "))) + result_combined = examine_block(replacetext(result_combined, "

        ", "
        ")) // BUBBER EDIT ADDITION - bit of a hack here to make sure we don't get linebreaks coming after headers, as well as properly adding the examine_block - to_chat(src, examine_block("[result.Join()]")) + to_chat(src, span_infoplain(result_combined)) SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, examinify) /mob/proc/blind_examine_check(atom/examined_thing) @@ -588,7 +593,7 @@ /mob/living/blind_examine_check(atom/examined_thing) //need to be next to something and awake - if(!Adjacent(examined_thing) || incapacitated()) + if(!Adjacent(examined_thing) || incapacitated) to_chat(src, span_warning("Something is there, but you can't see it!")) return FALSE @@ -675,7 +680,7 @@ // check to see if their face is blocked or, if not, a signal blocks it if(examined_mob.is_face_visible() && SEND_SIGNAL(src, COMSIG_MOB_EYECONTACT, examined_mob, TRUE) != COMSIG_BLOCK_EYECONTACT) var/msg = span_smallnotice("You make eye contact with [examined_mob].") - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), src, msg), 3) // so the examine signal has time to fire and this will print after + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), src, msg), 0.3 SECONDS) // so the examine signal has time to fire and this will print after if(!imagined_eye_contact && is_face_visible() && SEND_SIGNAL(examined_mob, COMSIG_MOB_EYECONTACT, src, FALSE) != COMSIG_BLOCK_EYECONTACT) var/msg = span_smallnotice("[src] makes eye contact with you.") @@ -747,7 +752,7 @@ if(ismecha(loc)) return - if(incapacitated()) + if(incapacitated) return var/obj/item/I = get_active_held_item() @@ -1028,7 +1033,7 @@ ) antimagic_effect = mutable_appearance('icons/effects/effects.dmi', "shield-red", MOB_SHIELD_LAYER) antimagic_color = LIGHT_COLOR_BLOOD_MAGIC - playsound(src, 'sound/magic/magic_block.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/magic_block.ogg', 50, TRUE) else if(magic_flags & MAGIC_RESISTANCE_HOLY) visible_message( @@ -1037,7 +1042,7 @@ ) antimagic_effect = mutable_appearance('icons/mob/effects/genetics.dmi', "servitude", -MUTATIONS_LAYER) antimagic_color = LIGHT_COLOR_HOLY_MAGIC - playsound(src, 'sound/magic/magic_block_holy.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/magic_block_holy.ogg', 50, TRUE) else if(magic_flags & MAGIC_RESISTANCE_MIND) visible_message( @@ -1046,7 +1051,7 @@ ) antimagic_effect = mutable_appearance('icons/mob/effects/genetics.dmi', "telekinesishead", MOB_SHIELD_LAYER) antimagic_color = LIGHT_COLOR_DARK_BLUE - playsound(src, 'sound/magic/magic_block_mind.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/magic_block_mind.ogg', 50, TRUE) mob_light(range = 2, power = 2, color = antimagic_color, duration = 5 SECONDS) add_overlay(antimagic_effect) @@ -1207,11 +1212,13 @@ // 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 + // SKYRAT EDIT BEGIN - Update the mob chat color list, removing the old name + if(client) + GLOB.chat_colors_by_mob_name -= oldname - 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 + if(client) + GLOB.chat_colors_by_mob_name[name] = list(chat_color, chat_color_darkened) + // SKYRAT EDIT END log_mob_tag("TAG: [tag] RENAMED: [key_name(src)]") return TRUE @@ -1394,7 +1401,6 @@ VV_DROPDOWN_OPTION(VV_HK_OFFER_GHOSTS, "Offer Control to Ghosts") VV_DROPDOWN_OPTION(VV_HK_VIEW_PLANES, "View/Edit Planes") - /mob/vv_do_topic(list/href_list) . = ..() @@ -1455,7 +1461,6 @@ if(!check_rights(R_DEBUG)) return usr.client.edit_plane_masters(src) - /** * extra var handling for the logging var */ diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 2206efd0e13ce..7f439db6bc9ac 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -66,6 +66,20 @@ /// Whether a mob is alive or dead. TODO: Move this to living - Nodrak (2019, still here) var/stat = CONSCIOUS + /** + * Whether and how a mob is incapacitated + * + * Normally being restrained, agressively grabbed, or in stasis counts as incapacitated + * unless there is a flag being used to check if it's ignored + * + * * bitflags: (see code/__DEFINES/status_effects.dm) + * * INCAPABLE_RESTRAINTS - if our mob is in a restraint (handcuffs) + * * INCAPABLE_STASIS - if our mob is in stasis (stasis bed, etc.) + * * INCAPABLE_GRAB - if our mob is being agressively grabbed + * + **/ + VAR_FINAL/incapacitated = NONE + /* A bunch of this stuff really needs to go under their own defines instead of being globally attached to mob. A variable should only be globally attached to turfs/objects/whatever, when it is in fact needed as such. The current method unnecessarily clusters up the variable list, especially for humans (although rearranging won't really clean it up a lot but the difference will be noticable for other mobs). diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 9f53eff52a60b..03277f763e4ff 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -167,19 +167,21 @@ var/client/C = M.client var/oldx = C.pixel_x var/oldy = C.pixel_y - var/max = strength*world.icon_size - var/min = -(strength*world.icon_size) + var/max_x = strength*ICON_SIZE_X + var/max_y = strength*ICON_SIZE_Y + var/min_x = -(strength*ICON_SIZE_X) + var/min_y = -(strength*ICON_SIZE_Y) //How much time to allot for each pixel moved - var/time_scalar = (1 / world.icon_size) * TILES_PER_SECOND + var/time_scalar = (1 / ICON_SIZE_ALL) * TILES_PER_SECOND var/last_x = oldx var/last_y = oldy var/time_spent = 0 while(time_spent < duration) //Get a random pos in our box - var/x_pos = rand(min, max) + oldx - var/y_pos = rand(min, max) + oldy + var/x_pos = rand(min_x, max_x) + oldx + var/y_pos = rand(min_y, max_y) + oldy //We take the smaller of our two distances so things still have the propencity to feel somewhat jerky var/time = round(max(min(abs(last_x - x_pos), abs(last_y - y_pos)) * time_scalar, 1)) @@ -345,12 +347,14 @@ return return TRUE -///Is the passed in mob an admin ghost WITH AI INTERACT enabled +///Returns TRUE/FALSE on whether the mob is an Admin Ghost AI. +///This requires this snowflake check because AI interact gives the access to the mob's client, rather +///than the mob like everyone else, and we keep it that way so they can't accidentally give someone Admin AI access. /proc/isAdminGhostAI(mob/user) if(!isAdminObserver(user)) - return - if(!user.client.AI_Interact) // Do they have it enabled? - return + return FALSE + if(!HAS_TRAIT_FROM(user.client, TRAIT_AI_ACCESS, ADMIN_TRAIT)) // Do they have it enabled? + return FALSE return TRUE /** @@ -400,15 +404,6 @@ /mob/proc/can_hear() return !HAS_TRAIT(src, TRAIT_DEAF) -/** - * Examine text for traits shared by multiple types. - * - * I wish examine was less copypasted. (oranges say, be the change you want to see buddy) - */ -/mob/proc/common_trait_examine() - if(HAS_TRAIT(src,TRAIT_HUSK)) - . += span_warning("This body has been reduced to a grotesque husk.") - /** * Get the list of keywords for policy config * @@ -428,7 +423,7 @@ ///Can the mob see reagents inside of containers? /mob/proc/can_see_reagents() - return stat == DEAD || has_unlimited_silicon_privilege || HAS_TRAIT(src, TRAIT_REAGENT_SCANNER) //Dead guys and silicons can always see reagents + return stat == DEAD || HAS_TRAIT(src, TRAIT_REAGENT_SCANNER) //Dead guys and silicons can always see reagents ///Can this mob hold items /mob/proc/can_hold_items(obj/item/I) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 2e2f5c85b535d..d3df8f771cfe3 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -93,6 +93,7 @@ return loc_atom.relaymove(mob, direct) if(!mob.Process_Spacemove(direct)) + SEND_SIGNAL(mob, COMSIG_MOB_CLIENT_MOVE_NOGRAV, args) return FALSE if(SEND_SIGNAL(mob, COMSIG_MOB_CLIENT_PRE_MOVE, args) & COMSIG_MOB_CLIENT_BLOCK_PRE_MOVE) @@ -264,19 +265,29 @@ if(. || HAS_TRAIT(src, TRAIT_SPACEWALK)) return TRUE - // FUCK OFF if(buckled) return TRUE + if(movement_type & FLYING || HAS_TRAIT(src, TRAIT_FREE_FLOAT_MOVEMENT)) + return TRUE + + if (HAS_TRAIT(src, TRAIT_NOGRAV_ALWAYS_DRIFT)) + return FALSE + var/atom/movable/backup = get_spacemove_backup(movement_dir, continuous_move) if(!backup) return FALSE + + if (SEND_SIGNAL(src, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, movement_dir, continuous_move, backup) & COMPONENT_PREVENT_SPACEMOVE_HALT) + return FALSE + if(continuous_move || !istype(backup) || !movement_dir || backup.anchored) return TRUE + // last pushoff exists for one reason // to ensure pushing a mob doesn't just lead to it considering us as backup, and failing last_pushoff = world.time - if(backup.newtonian_move(REVERSE_DIR(movement_dir), instant = TRUE)) //You're pushing off something movable, so it moves + if(backup.newtonian_move(dir2angle(REVERSE_DIR(movement_dir)), instant = TRUE)) //You're pushing off something movable, so it moves // We set it down here so future calls to Process_Spacemove by the same pair in the same tick don't lead to fucky backup.last_pushoff = world.time to_chat(src, span_info("You push off of [backup] to propel yourself.")) @@ -287,6 +298,8 @@ * Takes the intended movement direction as input, alongside if the context is checking if we're allowed to continue drifting */ /mob/get_spacemove_backup(moving_direction, continuous_move) + var/atom/secondary_backup + var/list/priority_dirs = (moving_direction in GLOB.cardinals) ? GLOB.cardinals : GLOB.diagonals for(var/atom/pushover as anything in range(1, get_turf(src))) if(pushover == src) continue @@ -298,7 +311,10 @@ continue if(!turf.density && !mob_negates_gravity()) continue - return pushover + if (get_dir(src, pushover) in priority_dirs) + return pushover + secondary_backup = pushover + continue var/atom/movable/rebound = pushover if(rebound == buckled) @@ -315,7 +331,7 @@ if(rebound.last_pushoff == world.time) continue if(continuous_move && !pass_allowed) - var/datum/move_loop/move/rebound_engine = GLOB.move_manager.processing_on(rebound, SSspacedrift) + var/datum/move_loop/move/rebound_engine = GLOB.move_manager.processing_on(rebound, SSnewtonian_movement) // If you're moving toward it and you're both going the same direction, stop if(moving_direction == get_dir(src, pushover) && rebound_engine && moving_direction == rebound_engine.direction) continue @@ -323,10 +339,16 @@ if(moving_direction == get_dir(src, pushover)) // Can't push "off" of something that you're walking into continue if(rebound.anchored) - return rebound + if (get_dir(src, rebound) in priority_dirs) + return rebound + secondary_backup = rebound + continue if(pulling == rebound) continue - return rebound + if (get_dir(src, rebound) in priority_dirs) + return rebound + secondary_backup = rebound + return secondary_backup /mob/has_gravity(turf/gravity_turf) return mob_negates_gravity() || ..() @@ -526,28 +548,17 @@ return remote_control.relaymove(src, UP) var/turf/current_turf = get_turf(src) - var/turf/above_turf = GET_TURF_ABOVE(current_turf) - - if(!above_turf) - to_chat(src, span_warning("There's nowhere to go in that direction!")) - return if(ismovable(loc)) //Inside an object, tell it we moved 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.")) - else - to_chat(src, span_warning("You are not Superman.")) + if(!can_z_move(UP, current_turf, null, ZMOVE_CAN_FLY_CHECKS|ZMOVE_FEEDBACK)) return balloon_alert(src, "moving up...") if(!do_after(src, 1 SECONDS, hidden = TRUE)) return - if(zMove(UP, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag)) + if(zMove(UP, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK)) to_chat(src, span_notice("You move upwards.")) ///Moves a mob down a z level @@ -559,21 +570,17 @@ 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 if(ismovable(loc)) //Inside an object, tell it we moved var/atom/loc_atom = loc return loc_atom.relaymove(src, DOWN) - var/ventcrawling_flag = HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) ? ZMOVE_VENTCRAWLING : 0 + if(!can_z_move(DOWN, current_turf, null, ZMOVE_CAN_FLY_CHECKS|ZMOVE_FEEDBACK)) + return balloon_alert(src, "moving down...") if(!do_after(src, 1 SECONDS, hidden = TRUE)) return - if(zMove(DOWN, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag)) + if(zMove(DOWN, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK)) to_chat(src, span_notice("You move down.")) return FALSE diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 28de95ff94dd5..45e54a8475ca8 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -311,7 +311,7 @@ qdel(src) return new_crab -/mob/living/carbon/proc/gorillize() +/mob/living/carbon/proc/gorillize(genetics_gorilla = FALSE) if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) @@ -327,7 +327,8 @@ regenerate_icons() icon = null SetInvisibility(INVISIBILITY_MAXIMUM) - var/mob/living/basic/gorilla/new_gorilla = new (get_turf(src)) + var/gorilla_type = genetics_gorilla ? /mob/living/basic/gorilla/genetics : /mob/living/basic/gorilla + var/mob/living/basic/gorilla/new_gorilla = new gorilla_type(get_turf(src)) new_gorilla.set_combat_mode(TRUE) if(mind) mind.transfer_to(new_gorilla) diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm index 33d388b4862d7..16a5f8eaaa46d 100644 --- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -186,12 +186,12 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE) + playsound(loc, 'sound/effects/blob/attackblob.ogg', 100, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) if(damage_amount) - playsound(loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/ash_walker_eggshell/attack_ghost(mob/user) //Pass on ghost clicks to the mob spawner if(egg) diff --git a/code/modules/mob_spawn/ghost_roles/space_roles.dm b/code/modules/mob_spawn/ghost_roles/space_roles.dm index 79d028bdbcb27..411f6bfd970ff 100644 --- a/code/modules/mob_spawn/ghost_roles/space_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/space_roles.dm @@ -160,6 +160,8 @@ l_pocket = /obj/item/uplink/nuclear r_pocket = /obj/item/modular_computer/pda/nukeops + skillchips = list(/obj/item/skillchip/disk_verifier) + /obj/effect/mob_spawn/ghost_role/human/syndicate/battlecruiser/captain name = "Syndicate Battlecruiser Captain" you_are_text = "You are the captain aboard the syndicate flagship: the SBC Starfury." diff --git a/code/modules/mob_spawn/ghost_roles/unused_roles.dm b/code/modules/mob_spawn/ghost_roles/unused_roles.dm index 102501f9b39ef..18829187b175b 100644 --- a/code/modules/mob_spawn/ghost_roles/unused_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/unused_roles.dm @@ -167,7 +167,7 @@ message = "You wished for power. Little good it did you, cast out of the light. You are the [gender == MALE ? "king" : "queen"] of a hell that holds no subjects. You feel only remorse." if(4) message = "You wished for immortality, even as your friends lay dying behind you. No matter how many times you cast yourself into the lava, you awaken in this room again within a few days. There is no escape." - to_chat(new_spawn, "[message]") + to_chat(new_spawn, span_infoplain("[message]")) /obj/effect/mob_spawn/ghost_role/human/nanotrasensoldier name = "sleeper" @@ -273,7 +273,7 @@ /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) - var/datum/job/spawn_job = SSjob.GetJobType(spawner_job_path) + var/datum/job/spawn_job = SSjob.get_job_type(spawner_job_path) var/policy = get_policy(spawn_job.policy_index) if(policy) to_chat(new_spawn, span_bold("[policy]")) diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm index 32836bf7c5e44..4dc4b103e7d85 100644 --- a/code/modules/mob_spawn/mob_spawn.dm +++ b/code/modules/mob_spawn/mob_spawn.dm @@ -38,6 +38,12 @@ if(faction) faction = string_list(faction) +/obj/effect/mob_spawn/Destroy() + spawned_mob_ref = null + if(istype(outfit)) + QDEL_NULL(outfit) + return ..() + /// Creates whatever mob the spawner makes. Return FALSE if we want to exit from here without doing that, returning NULL will be logged to admins. /obj/effect/mob_spawn/proc/create(mob/mob_possessor, newname) var/mob/living/spawned_mob = new mob_type(get_turf(src)) //living mobs only @@ -137,7 +143,7 @@ SSpoints_of_interest.make_point_of_interest(src) LAZYADD(GLOB.mob_spawners[name], src) -/obj/effect/mob_spawn/Destroy() +/obj/effect/mob_spawn/ghost_role/Destroy() var/list/spawners = GLOB.mob_spawners[name] LAZYREMOVE(spawners, src) if(!LAZYLEN(spawners)) @@ -253,11 +259,11 @@ spawned_mob.key = mob_possessor.key var/datum/mind/spawned_mind = spawned_mob.mind if(spawned_mind) - spawned_mob.mind.set_assigned_role_with_greeting(SSjob.GetJobType(spawner_job_path)) + spawned_mob.mind.set_assigned_role_with_greeting(SSjob.get_job_type(spawner_job_path)) spawned_mind.name = spawned_mob.real_name if(show_flavor) - var/output_message = "[you_are_text]" + var/output_message = span_infoplain("[you_are_text]") if(flavour_text != "") output_message += "\n[flavour_text]" if(important_text != "") @@ -275,6 +281,7 @@ ///these mob spawn subtypes trigger immediately (New or Initialize) and are not player controlled... since they're dead, you know? /obj/effect/mob_spawn/corpse + density = FALSE //these are pretty much abstract objects that leave a corpse in their place. ///when this mob spawn should auto trigger. var/spawn_when = CORPSE_INSTANT diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm index 3b0795be789ff..b45be6c855f1d 100644 --- a/code/modules/mod/mod_activation.dm +++ b/code/modules/mod/mod_activation.dm @@ -17,12 +17,12 @@ if(!pick) return var/part_reference = display_names[pick] - var/obj/item/part = locate(part_reference) in parts - if(!istype(part) || user.incapacitated()) + var/obj/item/part = locate(part_reference) in get_parts() + if(!istype(part) || user.incapacitated) return if(activating) // SKYRAT EDIT - RETRACTABLE EVERYTHING balloon_alert(user, "deactivate the suit first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return var/parts_to_check = parts - part if(part.loc == src) @@ -46,7 +46,7 @@ /obj/item/mod/control/proc/quick_deploy(mob/user) if(activating) // SKYRAT EDIT - RETRACTABLE EVERYTHING balloon_alert(user, "deactivate the suit first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE var/deploy = TRUE for(var/obj/item/part as anything in get_parts()) @@ -62,7 +62,7 @@ wearer.visible_message(span_notice("[wearer]'s [src] [deploy ? "deploys" : "retracts"] its parts with a mechanical hiss."), span_notice("[src] [deploy ? "deploys" : "retracts"] its parts with a mechanical hiss."), span_hear("You hear a mechanical hiss.")) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(deploy) SEND_SIGNAL(src, COMSIG_MOD_DEPLOYED, user) else @@ -73,13 +73,13 @@ /obj/item/mod/control/proc/deploy(mob/user, obj/item/part) var/datum/mod_part/part_datum = get_part_datum(part) if(!wearer) - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE // pAI is trying to deploy it from your hands if(part.loc != src) if(!user) return FALSE balloon_alert(user, "[part.name] already deployed!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) if(part_datum.can_overslot) var/obj/item/overslot = wearer.get_item_by_slot(part.slot_flags) if(overslot) @@ -93,14 +93,14 @@ wearer.visible_message(span_notice("[wearer]'s [part.name] deploy[part.p_s()] with a mechanical hiss."), span_notice("[part] deploy[part.p_s()] with a mechanical hiss."), span_hear("You hear a mechanical hiss.")) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) SEND_SIGNAL(src, COMSIG_MOD_PART_DEPLOYED, user, part) return TRUE else if(!user) return FALSE balloon_alert(user, "bodypart clothed!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE /// Retract a part of the suit from the user. @@ -110,7 +110,7 @@ if(!user) return FALSE balloon_alert(user, "[part.name] already retracted!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) REMOVE_TRAIT(part, TRAIT_NODROP, MOD_TRAIT) wearer.transferItemToLoc(part, src, force = TRUE) if(part_datum.overslotting) @@ -130,39 +130,39 @@ wearer.visible_message(span_notice("[wearer]'s [part.name] retract[part.p_s()] back into [src] with a mechanical hiss."), span_notice("[part] retract[part.p_s()] back into [src] with a mechanical hiss."), span_hear("You hear a mechanical hiss.")) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) /// Starts the activation sequence, where parts of the suit activate one by one until the whole suit is on. /obj/item/mod/control/proc/toggle_activate(mob/user, force_deactivate = FALSE) if(!wearer) if(!force_deactivate) balloon_alert(user, "equip suit first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE if(!force_deactivate && (SEND_SIGNAL(src, COMSIG_MOD_ACTIVATE, user) & MOD_CANCEL_ACTIVATE)) - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE for(var/obj/item/part as anything in get_parts()) if(!force_deactivate && part.loc == src) balloon_alert(user, "deploy all parts first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE if(locked && !active && !allowed(user) && !force_deactivate) balloon_alert(user, "access insufficient!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE if(!get_charge() && !force_deactivate) balloon_alert(user, "suit not powered!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE if(open && !force_deactivate) balloon_alert(user, "close the suit panel!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE if(activating) if(!force_deactivate) balloon_alert(user, "suit already [active ? "shutting down" : "starting up"]!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE for(var/obj/item/mod/module/module as anything in modules) if(!module.active || (module.allow_flags & MODULE_ALLOW_INACTIVE)) @@ -175,7 +175,7 @@ var/datum/mod_part/part_datum = get_part_datum(part) if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE)) to_chat(wearer, span_notice("[part] [active ? part_datum.unsealed_message : part_datum.sealed_message].")) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) seal_part(part, is_sealed = !active) if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE)) to_chat(wearer, span_notice("Systems [active ? "shut down. Parts unsealed. Goodbye" : "started up. Parts sealed. Welcome"], [wearer].")) @@ -183,11 +183,11 @@ to_chat(ai_assistant, span_notice("SYSTEMS [active ? "DEACTIVATED. GOODBYE" : "ACTIVATED. WELCOME"]: \"[ai_assistant]\"")) finish_activation(is_on = !active) if(active) - playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000) + playsound(src, 'sound/machines/synth/synth_yes.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000) if(!malfunctioning) - wearer.playsound_local(get_turf(src), 'sound/mecha/nominal.ogg', 50) + wearer.playsound_local(get_turf(src), 'sound/vehicles/mecha/nominal.ogg', 50) else - playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000) + playsound(src, 'sound/machines/synth/synth_no.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000) activating = FALSE SEND_SIGNAL(src, COMSIG_MOD_TOGGLED, user) return TRUE diff --git a/code/modules/mod/mod_ai.dm b/code/modules/mod/mod_ai.dm index a78c7be77b610..eadcc6a3172cc 100644 --- a/code/modules/mod/mod_ai.dm +++ b/code/modules/mod/mod_ai.dm @@ -155,7 +155,7 @@ return FALSE COOLDOWN_START(src, cooldown_mod_move, movedelay * timemodifier + slowdown_active) subtract_charge(CHARGE_PER_STEP) - playsound(src, 'sound/mecha/mechmove01.ogg', 25, TRUE) + playsound(src, 'sound/vehicles/mecha/mechmove01.ogg', 25, TRUE) if(ismovable(wearer?.loc)) return wearer.loc.relaymove(wearer, direction) else if(wearer) @@ -221,4 +221,5 @@ 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 + +#undef AI_FALL_TIME diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 96efa91f1b41a..162f5fc63b52f 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -159,7 +159,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 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.") @@ -223,7 +223,7 @@ for(var/obj/item/part as anything in get_parts()) if(part.loc != src) balloon_alert(user, "retract parts first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) return FALSE /obj/item/mod/control/mouse_drop_dragged(atom/over_object, mob/user) @@ -232,19 +232,19 @@ for(var/obj/item/part as anything in get_parts()) if(part.loc != src) balloon_alert(wearer, "retract parts first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/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) if(active) - if(!wearer.incapacitated()) + if(!wearer.incapacitated) balloon_alert(wearer, "deactivate first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) return // SKYRAT EDIT ADDITION END - if(!wearer.incapacitated()) + if(!wearer.incapacitated) var/atom/movable/screen/inventory/hand/ui_hand = over_object if(wearer.putItemFromInventoryInHandIfPossible(src, ui_hand.held_index)) add_fingerprint(user) @@ -270,7 +270,7 @@ /obj/item/mod/control/screwdriver_act(mob/living/user, obj/item/screwdriver) if(active || activating || ai_controller) balloon_alert(user, "deactivate suit first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING balloon_alert(user, "[open ? "closing" : "opening"] cover...") screwdriver.play_tool_sound(src, 100) @@ -287,14 +287,14 @@ /obj/item/mod/control/crowbar_act(mob/living/user, obj/item/crowbar) if(!open) balloon_alert(user, "open the cover first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING if(!allowed(user)) balloon_alert(user, "insufficient access!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING if(SEND_SIGNAL(src, COMSIG_MOD_MODULE_REMOVAL, user) & MOD_CANCEL_REMOVAL) - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING if(length(modules)) var/list/removable_modules = list() @@ -311,25 +311,15 @@ SEND_SIGNAL(src, COMSIG_MOD_MODULE_REMOVED, user) return ITEM_INTERACT_SUCCESS balloon_alert(user, "no modules!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING -/obj/item/mod/control/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) - // Hack. revisit later - if(istype(inserted, /obj/item/aicard)) - var/obj/item/aicard/ai_card = inserted - if(ai_card.AI) - return FALSE // we want to get an AI assistant, try uploading instead of insertion - if(ai_assistant) - return FALSE // we already have an AI assistant, try withdrawing instead of insertion - return TRUE - // Makes use of tool act to prevent shoving stuff into our internal storage /obj/item/mod/control/tool_act(mob/living/user, obj/item/tool, list/modifiers) if(istype(tool, /obj/item/pai_card)) if(!open) balloon_alert(user, "open the cover first!") - return ITEM_INTERACT_BLOCKING + return NONE // shoves the card in the storage anyways insert_pai(user, tool) return ITEM_INTERACT_SUCCESS if(istype(tool, /obj/item/mod/paint)) @@ -355,7 +345,7 @@ if(istype(tool, /obj/item/mod/module)) if(!open) balloon_alert(user, "open the cover first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING install(tool, user) SEND_SIGNAL(src, COMSIG_MOD_MODULE_ADDED, user) @@ -363,11 +353,11 @@ if(istype(tool, /obj/item/mod/core)) if(!open) balloon_alert(user, "open the cover first!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING if(core) balloon_alert(user, "core already installed!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING var/obj/item/mod/core/attacking_core = tool attacking_core.install(src) @@ -569,19 +559,24 @@ if(is_type_in_list(new_module, old_module.incompatible_modules) || is_type_in_list(old_module, new_module.incompatible_modules)) if(user) balloon_alert(user, "[new_module] incompatible with [old_module]!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return var/complexity_with_module = complexity complexity_with_module += new_module.complexity if(complexity_with_module > complexity_max) if(user) balloon_alert(user, "[new_module] would make [src] too complex!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return if(!new_module.has_required_parts(mod_parts)) if(user) balloon_alert(user, "[new_module] incompatible with [src]'s parts!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return + if(!new_module.can_install(src)) + if(user) + balloon_alert(user, "[new_module] cannot be installed into [src]!") + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return new_module.forceMove(src) modules += new_module @@ -618,7 +613,7 @@ /obj/item/mod/control/proc/update_access(mob/user, obj/item/card/id/card) if(!allowed(user)) balloon_alert(user, "insufficient access!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return req_access = card.access.Copy() balloon_alert(user, "access updated") diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index 5f93427f53277..791c5347722b6 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -97,7 +97,6 @@ install_cell(cell) RegisterSignal(mod, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(mod, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand)) - RegisterSignal(mod, COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, PROC_REF(on_mod_storage_insert)) RegisterSignal(mod, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_mod_interaction)) RegisterSignal(mod, COMSIG_MOD_WEARER_SET, PROC_REF(on_wearer_set)) if(mod.wearer) @@ -109,7 +108,6 @@ UnregisterSignal(mod, list( COMSIG_ATOM_EXAMINE, COMSIG_ATOM_ATTACK_HAND, - COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, COMSIG_ATOM_ITEM_INTERACTION, COMSIG_MOD_WEARER_SET, )) @@ -212,17 +210,9 @@ cell_to_move.forceMove(drop_location()) user.put_in_hands(cell_to_move) -/obj/item/mod/core/standard/proc/on_mod_storage_insert(datum/source, obj/item/thing, mob/living/user) - SIGNAL_HANDLER - - return replace_cell(thing, user) ? BLOCK_STORAGE_INSERT : NONE - /obj/item/mod/core/standard/proc/on_mod_interaction(datum/source, mob/living/user, obj/item/thing) SIGNAL_HANDLER - if(mod.atom_storage) // handled by the storage signal - return NONE - return item_interaction(user, thing) /obj/item/mod/core/standard/item_interaction(mob/living/user, obj/item/tool, list/modifiers) @@ -233,11 +223,11 @@ return FALSE if(!mod.open) mod.balloon_alert(user, "open the cover first!") - playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(mod, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE if(cell) mod.balloon_alert(user, "cell already installed!") - playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(mod, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return FALSE install_cell(attacking_item) mod.balloon_alert(user, "cell installed") @@ -323,11 +313,10 @@ /obj/item/mod/core/plasma/install(obj/item/mod/control/mod_unit) . = ..() - RegisterSignal(mod, COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, PROC_REF(on_mod_storage_insert)) RegisterSignal(mod, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_mod_interaction)) /obj/item/mod/core/plasma/uninstall() - UnregisterSignal(mod, list(COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, COMSIG_ATOM_ITEM_INTERACTION)) + UnregisterSignal(mod, COMSIG_ATOM_ITEM_INTERACTION) return ..() /obj/item/mod/core/plasma/charge_source() @@ -366,18 +355,10 @@ return "empty" -/obj/item/mod/core/plasma/proc/on_mod_storage_insert(datum/source, obj/item/thing, mob/living/user) - SIGNAL_HANDLER - - return charge_plasma(thing, user) ? BLOCK_STORAGE_INSERT : NONE - /obj/item/mod/core/plasma/proc/on_mod_interaction(datum/source, mob/living/user, obj/item/thing) SIGNAL_HANDLER - if(mod.atom_storage) // handled by the storage signal - return NONE - - return item_interaction(thing, user) + return item_interaction(user, thing) /obj/item/mod/core/plasma/item_interaction(mob/living/user, obj/item/tool, list/modifiers) return charge_plasma(tool, user) ? ITEM_INTERACT_SUCCESS : NONE diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index e5c7195bd8cb0..31497a2593caa 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -15,7 +15,7 @@ /proc/get_link_visual_generic(datum/mod_link/mod_link, atom/movable/visuals, proc_path) var/mob/living/user = mod_link.get_user_callback.Invoke() - playsound(mod_link.holder, 'sound/machines/terminal_processing.ogg', 50, vary = TRUE) + playsound(mod_link.holder, 'sound/machines/terminal/terminal_processing.ogg', 50, vary = TRUE) visuals.add_overlay(mutable_appearance('icons/effects/effects.dmi', "static_base", ABOVE_NORMAL_TURF_LAYER)) visuals.add_overlay(mutable_appearance('icons/effects/effects.dmi', "modlink", ABOVE_ALL_MOB_LAYER)) visuals.add_filter("crop_square", 1, alpha_mask_filter(icon = icon('icons/effects/effects.dmi', "modlink_filter"))) @@ -30,7 +30,7 @@ /proc/delete_link_visual_generic(datum/mod_link/mod_link) var/mob/living/user = mod_link.get_user_callback.Invoke() - playsound(mod_link.get_other().holder, 'sound/machines/terminal_processing.ogg', 50, vary = TRUE, frequency = -1) + playsound(mod_link.get_other().holder, 'sound/machines/terminal/terminal_processing.ogg', 50, vary = TRUE, frequency = -1) LAZYREMOVE(mod_link.holder.update_on_z, mod_link.visual) mod_link.holder.lose_hearing_sensitivity(REF(mod_link)) mod_link.holder.UnregisterSignal(user, list(COMSIG_CARBON_APPLY_OVERLAY, COMSIG_CARBON_REMOVE_OVERLAY, COMSIG_ATOM_DIR_CHANGE)) @@ -425,7 +425,7 @@ if(!can_call_callback.Invoke() || !called.can_call_callback.Invoke()) holder.balloon_alert(user, "can't call!") return - link_target.playsound_local(get_turf(called.holder), 'sound/weapons/ring.ogg', 15, vary = TRUE) + link_target.playsound_local(get_turf(called.holder), 'sound/items/weapons/ring.ogg', 15, vary = TRUE) var/atom/movable/screen/alert/modlink_call/alert = link_target.throw_alert("[REF(src)]_modlink", /atom/movable/screen/alert/modlink_call) alert.desc = "[holder] ([id]) is calling you! Left-click this to accept the call. Right-click to deny it." alert.caller_ref = WEAKREF(src) diff --git a/code/modules/mod/mod_paint.dm b/code/modules/mod/mod_paint.dm index b37be06cd2b7d..0693b05a34854 100644 --- a/code/modules/mod/mod_paint.dm +++ b/code/modules/mod/mod_paint.dm @@ -55,7 +55,7 @@ data["currentColor"] = current_color return data -/obj/item/mod/paint/ui_act(action, list/params) +/obj/item/mod/paint/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -124,9 +124,9 @@ balloon_alert(user, "no skin picked!") return mod.theme.set_skin(mod, pick) - + /obj/item/mod/paint/proc/check_menu(obj/item/mod/control/mod, mob/user) - if(user.incapacitated() || !user.is_holding(src) || !mod || mod.active || mod.activating) + if(user.incapacitated || !user.is_holding(src) || !mod || mod.active || mod.activating) return FALSE return TRUE diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 33e8e2f0a5b8e..419ddb89053fa 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -201,6 +201,8 @@ UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, SEALED_MESSAGE = HELMET_SEAL_MESSAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEEYES|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSEYES, ), /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, @@ -1369,7 +1371,7 @@ /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, - SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, + SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT|HIDEANTENNAE, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, CAN_OVERSLOT = TRUE, UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, @@ -1377,7 +1379,7 @@ ), /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, - SEALED_INVISIBILITY = HIDEJUMPSUIT, + SEALED_INVISIBILITY = HIDEJUMPSUIT|HIDEMUTWINGS, CAN_OVERSLOT = TRUE, UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index b20efa4c66641..626144bf3e114 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -98,11 +98,13 @@ /obj/item/mod/module/flashlight, /obj/item/mod/module/jetpack, /obj/item/mod/module/headprotector, + /obj/item/mod/module/tether, ) default_pins = list( /obj/item/mod/module/magboot/advanced, /obj/item/mod/module/flashlight, /obj/item/mod/module/jetpack, + /obj/item/mod/module/tether, ) /obj/item/mod/control/pre_equipped/loader @@ -208,13 +210,13 @@ /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/hat_stabilizer, /obj/item/mod/module/magnetic_harness, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/pathfinder, /obj/item/mod/module/quick_cuff, /obj/item/mod/module/headprotector, ) default_pins = list( - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, ) /obj/item/mod/control/pre_equipped/cosmohonk @@ -256,7 +258,7 @@ /obj/item/mod/module/shock_absorber, /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet, /obj/item/mod/module/flashlight, /obj/item/mod/module/dna_lock, @@ -265,7 +267,7 @@ ) default_pins = list( /obj/item/mod/module/armor_booster, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet, ) @@ -279,7 +281,7 @@ /obj/item/mod/module/shock_absorber, /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet, /obj/item/mod/module/flashlight, /obj/item/mod/module/hat_stabilizer/syndicate, @@ -287,14 +289,14 @@ ) default_pins = list( /obj/item/mod/module/armor_booster, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet, ) /obj/item/mod/control/pre_equipped/nuclear/no_jetpack /obj/item/mod/control/pre_equipped/nuclear/no_jetpack/Initialize(mapload, new_theme, new_skin, new_core) - applied_modules -= list(/obj/item/mod/module/jetpack, /obj/item/mod/module/jump_jet) + applied_modules -= list(/obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet) return ..() /obj/item/mod/control/pre_equipped/nuclear/plasmaman @@ -316,7 +318,7 @@ /obj/item/mod/module/shock_absorber, /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet, /obj/item/mod/module/flashlight, /obj/item/mod/module/hat_stabilizer/syndicate, @@ -324,7 +326,7 @@ ) default_pins = list( /obj/item/mod/module/armor_booster, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet, ) @@ -335,7 +337,7 @@ /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/thermal_regulator, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet, /obj/item/mod/module/flashlight, /obj/item/mod/module/hat_stabilizer/syndicate, @@ -344,7 +346,7 @@ ) default_pins = list( /obj/item/mod/module/armor_booster, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet, /obj/item/mod/module/flamethrower, ) @@ -440,13 +442,13 @@ applied_modules = list( /obj/item/mod/module/storage, /obj/item/mod/module/magnetic_harness, - /obj/item/mod/module/jetpack, + /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, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/jump_jet, ) @@ -637,7 +639,7 @@ /obj/item/mod/module/stealth/ninja, /obj/item/mod/module/quick_carry/advanced, /obj/item/mod/module/magboot/advanced, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/anomaly_locked/kinesis/admin, /obj/item/mod/module/shove_blocker, /obj/item/mod/module/quick_cuff, @@ -645,7 +647,7 @@ default_pins = list( /obj/item/mod/module/stealth/ninja, /obj/item/mod/module/magboot/advanced, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/anomaly_locked/kinesis/admin, ) diff --git a/code/modules/mod/mod_ui.dm b/code/modules/mod/mod_ui.dm index f994b91060fea..2a8ccf7b4bf94 100644 --- a/code/modules/mod/mod_ui.dm +++ b/code/modules/mod/mod_ui.dm @@ -92,7 +92,7 @@ balloon_alert(ui.user, "[locked ? "locked" : "unlocked"]!") else balloon_alert(ui.user, "access insufficent!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) if("call") if(!mod_link.link_call) call_link(ui.user, mod_link) diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index 2f0465757ca4d..66afe1108f36e 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -94,6 +94,10 @@ needed_slots -= needed_slot return !length(needed_slots) +/// Additional checks for whenever a module can be installed into a suit or not +/obj/item/mod/module/proc/can_install(obj/item/mod/control/mod) + return TRUE + /// Called when the module is selected from the TGUI, radial or the action button /obj/item/mod/module/proc/on_select() if(!mod.wearer) @@ -219,7 +223,7 @@ /// Called when an activated module without a device is used /obj/item/mod/module/proc/on_select_use(atom/target) - if(!(allow_flags & MODULE_ALLOW_INCAPACITATED) && mod.wearer.incapacitated(IGNORE_GRAB)) + if(!(allow_flags & MODULE_ALLOW_INCAPACITATED) && INCAPACITATED_IGNORING(mod.wearer, INCAPABLE_GRAB)) return FALSE mod.wearer.face_atom(target) if(!used()) diff --git a/code/modules/mod/modules/module_kinesis.dm b/code/modules/mod/modules/module_kinesis.dm index 9048701f1d017..3c9ae3310b755 100644 --- a/code/modules/mod/modules/module_kinesis.dm +++ b/code/modules/mod/modules/module_kinesis.dm @@ -67,7 +67,7 @@ clear_grab(playsound = !deleting) /obj/item/mod/module/anomaly_locked/kinesis/process(seconds_per_tick) - if(!mod.wearer.client || mod.wearer.incapacitated(IGNORE_GRAB)) + if(!mod.wearer.client || INCAPACITATED_IGNORING(mod.wearer, INCAPABLE_GRAB)) clear_grab() return if(!range_check(grabbed_atom)) @@ -81,12 +81,12 @@ return mod.wearer.setDir(get_dir(mod.wearer, grabbed_atom)) if(grabbed_atom.loc == kinesis_catcher.given_turf) - if(grabbed_atom.pixel_x == kinesis_catcher.given_x - world.icon_size/2 && grabbed_atom.pixel_y == kinesis_catcher.given_y - world.icon_size/2) + if(grabbed_atom.pixel_x == kinesis_catcher.given_x - ICON_SIZE_X/2 && grabbed_atom.pixel_y == kinesis_catcher.given_y - ICON_SIZE_Y/2) return //spare us redrawing if we are standing still - animate(grabbed_atom, 0.2 SECONDS, pixel_x = grabbed_atom.base_pixel_x + kinesis_catcher.given_x - world.icon_size/2, pixel_y = grabbed_atom.base_pixel_y + kinesis_catcher.given_y - world.icon_size/2) + animate(grabbed_atom, 0.2 SECONDS, pixel_x = grabbed_atom.base_pixel_x + kinesis_catcher.given_x - ICON_SIZE_X/2, pixel_y = grabbed_atom.base_pixel_y + kinesis_catcher.given_y - ICON_SIZE_Y/2) kinesis_beam.redrawing() return - animate(grabbed_atom, 0.2 SECONDS, pixel_x = grabbed_atom.base_pixel_x + kinesis_catcher.given_x - world.icon_size/2, pixel_y = grabbed_atom.base_pixel_y + kinesis_catcher.given_y - world.icon_size/2) + animate(grabbed_atom, 0.2 SECONDS, pixel_x = grabbed_atom.base_pixel_x + kinesis_catcher.given_x - ICON_SIZE_X/2, pixel_y = grabbed_atom.base_pixel_y + kinesis_catcher.given_y - ICON_SIZE_Y/2) kinesis_beam.redrawing() var/turf/next_turf = get_step_towards(grabbed_atom, kinesis_catcher.given_turf) if(grabbed_atom.Move(next_turf, get_dir(grabbed_atom, next_turf), 8)) @@ -100,13 +100,13 @@ var/pixel_y_change = 0 var/direction = get_dir(grabbed_atom, next_turf) if(direction & NORTH) - pixel_y_change = world.icon_size/2 + pixel_y_change = ICON_SIZE_Y/2 else if(direction & SOUTH) - pixel_y_change = -world.icon_size/2 + pixel_y_change = -ICON_SIZE_Y/2 if(direction & EAST) - pixel_x_change = world.icon_size/2 + pixel_x_change = ICON_SIZE_X/2 else if(direction & WEST) - pixel_x_change = -world.icon_size/2 + pixel_x_change = -ICON_SIZE_X/2 animate(grabbed_atom, 0.2 SECONDS, pixel_x = grabbed_atom.base_pixel_x + pixel_x_change, pixel_y = grabbed_atom.base_pixel_y + pixel_y_change) kinesis_beam.redrawing() if(!isitem(grabbed_atom) || !COOLDOWN_FINISHED(src, hit_cooldown)) @@ -161,7 +161,7 @@ RegisterSignal(grabbed_atom, COMSIG_MOB_STATCHANGE, PROC_REF(on_statchange)) ADD_TRAIT(grabbed_atom, TRAIT_NO_FLOATING_ANIM, REF(src)) RegisterSignal(grabbed_atom, COMSIG_MOVABLE_SET_ANCHORED, PROC_REF(on_setanchored)) - playsound(grabbed_atom, 'sound/effects/contractorbatonhit.ogg', 75, TRUE) + playsound(grabbed_atom, 'sound/items/weapons/contractor_baton/contractorbatonhit.ogg', 75, TRUE) kinesis_icon = mutable_appearance(icon = 'icons/effects/effects.dmi', icon_state = "kinesis", layer = grabbed_atom.layer - 0.1) kinesis_icon.appearance_flags = RESET_ALPHA|RESET_COLOR|RESET_TRANSFORM kinesis_icon.overlays += emissive_appearance(icon = 'icons/effects/effects.dmi', icon_state = "kinesis", offset_spokesman = grabbed_atom) @@ -223,7 +223,7 @@ clear_grab() /obj/item/mod/module/anomaly_locked/kinesis/proc/launch(atom/movable/launched_object) - playsound(launched_object, 'sound/magic/repulse.ogg', 100, TRUE) + playsound(launched_object, 'sound/effects/magic/repulse.ogg', 100, TRUE) RegisterSignal(launched_object, COMSIG_MOVABLE_IMPACT, PROC_REF(launch_impact)) var/turf/target_turf = get_turf_in_angle(get_angle(mod.wearer, launched_object), get_turf(src), 10) launched_object.throw_at(target_turf, range = grab_range, speed = launched_object.density ? 3 : 4, thrower = mod.wearer, spin = isitem(launched_object)) diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index 8ae22e435839b..8fa2670c76091 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -49,7 +49,7 @@ head_cover.flash_protect = initial(head_cover.flash_protect) /obj/item/mod/module/armor_booster/on_activation() - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/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 @@ -68,7 +68,7 @@ /obj/item/mod/module/armor_booster/on_deactivation(display_message = TRUE, deleting = FALSE) if(!deleting) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/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() @@ -517,18 +517,31 @@ /obj/item/mod/module/infiltrator/on_suit_activation() mod.wearer.add_traits(traits_to_add, MOD_TRAIT) + RegisterSignal(mod.wearer, COMSIG_TRY_MODIFY_SPEECH, PROC_REF(on_speech_modification)) + var/obj/item/organ/internal/tongue/user_tongue = mod.wearer.get_organ_slot(ORGAN_SLOT_TONGUE) + user_tongue.temp_say_mod = "states" var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) if(istype(head_cover)) head_cover.flash_protect = FLASH_PROTECTION_WELDER_HYPER_SENSITIVE /obj/item/mod/module/infiltrator/on_suit_deactivation(deleting = FALSE) mod.wearer.remove_traits(traits_to_add, MOD_TRAIT) + UnregisterSignal(mod.wearer, COMSIG_TRY_MODIFY_SPEECH) + var/obj/item/organ/internal/tongue/user_tongue = mod.wearer.get_organ_slot(ORGAN_SLOT_TONGUE) + user_tongue.temp_say_mod = initial(user_tongue.temp_say_mod) if(deleting) return var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) if(istype(head_cover)) head_cover.flash_protect = initial(head_cover.flash_protect) +/obj/item/mod/module/infiltrator/proc/on_speech_modification(datum/source) + SIGNAL_HANDLER + if(!mod.active) + return + //Prevent speech modifications if the suit is active + return PREVENT_MODIFY_SPEECH + ///Medbeam - Medbeam but built into a modsuit /obj/item/mod/module/medbeam name = "MOD medical beamgun module" @@ -545,3 +558,63 @@ /obj/item/gun/medbeam/mod name = "MOD medbeam" + +/obj/item/mod/module/stealth/wraith + name = "MOD Wraith Cloaking Module" + desc = "A more destructive adaptation of the stealth module." + icon_state = "cloak_traitor" + stealth_alpha = 30 + module_type = MODULE_ACTIVE + cooldown_time = 2 SECONDS + +/obj/item/mod/module/stealth/wraith/on_select_use(atom/target) + . = ..() + if(!. || target == mod.wearer) + return + if(get_dist(mod.wearer, target) > 6) + balloon_alert(mod.wearer, "can't reach that!") + return + if(istype(target, /obj/machinery/power/apc)) //Bit too strong for a module so this is blacklisted + balloon_alert(mod.wearer, "cant disable apc!") + return + + var/list/things_to_disrupt = list(target) + if(isliving(target)) + var/mob/living/live_target = target + things_to_disrupt += live_target.get_all_gear() + + for(var/atom/disrupted as anything in things_to_disrupt) + if(disrupted.on_saboteur(src, 1 MINUTES)) + mod.add_charge(DEFAULT_CHARGE_DRAIN * 250) + +/obj/item/mod/module/stealth/wraith/on_suit_activation() + if(bumpoff) + RegisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP, PROC_REF(unstealth)) + RegisterSignal(mod.wearer, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) + RegisterSignal(mod.wearer, COMSIG_ATOM_BULLET_ACT, PROC_REF(on_bullet_act)) + RegisterSignals(mod.wearer, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED), PROC_REF(unstealth)) + animate(mod.wearer, alpha = stealth_alpha, time = 1.5 SECONDS) + drain_power(use_energy_cost) + +/obj/item/mod/module/stealth/wraith/on_suit_deactivation(deleting) + if(bumpoff) + UnregisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP) + UnregisterSignal(mod.wearer, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED)) + animate(mod.wearer, alpha = 255, time = 1.5 SECONDS) + +/obj/item/mod/module/stealth/wraith/unstealth(datum/source) + . = ..() + if(mod.active) + addtimer(CALLBACK(src, PROC_REF(on_suit_activation)), 5 SECONDS) + +/obj/item/mod/module/stealth/wraith/examine_more(mob/user) + . = ..() + . += span_info( \ + "The Wraith Module does not simply bend light around the user to obscure their visual pattern, \ + but actively attacks and overloads surrounding light emitting objects, repurposing this energy to power the suit. \ + It is possible that this technology has its origins in Spider Clan advancements, \ + but the exact source of the Wraith Module is highly disputed. \ + No group has stepped forward to claim it as their handiwork due to the political consequences of having stolen Spider Clan tech and their inevitable retaliation for such transgressions. \ + Most point fingers at Cybersun Industries, but murmurs suggest it could even be even more clandestine organizations amongst the Syndicate branches. \ + Whatever the case, if you are looking at one of these right now, don't show it to a space ninja." \ + ) diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index 40e1889efd968..dffa66e3931b5 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -93,13 +93,6 @@ cooldown_time = 1.5 SECONDS required_slots = list(ITEM_SLOT_GLOVES) -/obj/item/mod/module/tether/used() - if(mod.wearer.has_gravity(get_turf(src))) - balloon_alert(mod.wearer, "too much gravity!") - playsound(src, 'sound/weapons/gun/general/dry_fire.ogg', 25, TRUE) - return FALSE - return ..() - /obj/item/mod/module/tether/on_select_use(atom/target) . = ..() if(!.) @@ -107,7 +100,7 @@ var/obj/projectile/tether = new /obj/projectile/tether(mod.wearer.loc) tether.preparePixelProjectile(target, mod.wearer) tether.firer = mod.wearer - playsound(src, 'sound/weapons/batonextend.ogg', 25, TRUE) + playsound(src, 'sound/items/weapons/batonextend.ogg', 25, TRUE) INVOKE_ASYNC(tether, TYPE_PROC_REF(/obj/projectile, fire)) drain_power(use_energy_cost) @@ -117,12 +110,30 @@ icon = 'icons/obj/clothing/modsuit/mod_modules.dmi' damage = 0 range = 10 - hitsound = 'sound/weapons/batonextend.ogg' - hitsound_wall = 'sound/weapons/batonextend.ogg' + hitsound = 'sound/items/weapons/batonextend.ogg' + hitsound_wall = 'sound/items/weapons/batonextend.ogg' suppressed = SUPPRESSED_VERY hit_threshhold = ABOVE_NORMAL_TURF_LAYER + embed_type = /datum/embed_data/tether_projectile + shrapnel_type = /obj/item/tether_anchor /// Reference to the beam following the projectile. var/line + /// Last turf that we passed before impact + var/turf/open/last_turf + +/obj/projectile/tether/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_PROJECTILE_ON_EMBEDDED, PROC_REF(on_embedded)) + +/obj/projectile/tether/proc/on_embedded(datum/source, obj/item/payload, atom/hit) + SIGNAL_HANDLER + + firer.AddComponent(/datum/component/tether, hit, 7, "MODtether", payload) + +/obj/projectile/tether/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + if (isopenturf(loc)) + last_turf = loc /obj/projectile/tether/fire(setAngle) if(firer) @@ -131,13 +142,102 @@ /obj/projectile/tether/on_hit(atom/target, blocked = 0, pierce_hit) . = ..() - if(firer) - firer.throw_at(target, 10, 1, firer, FALSE, FALSE, null, MOVE_FORCE_NORMAL, TRUE) + if (!firer) + return + + // Funni is handled separately + if (ismob(target)) + return + + if (istype(target, /obj/item/tether_anchor) || isstructure(target) || ismachinery(target)) + firer.AddComponent(/datum/component/tether, target, 7, "MODtether") + return + + var/hitx + var/hity + if(target == original) + hitx = target.pixel_x + p_x - 16 + hity = target.pixel_y + p_y - 16 + else + hitx = target.pixel_x + rand(-8, 8) + hity = target.pixel_y + rand(-8, 8) + + if (!isnull(last_turf) && last_turf != target && last_turf != target.loc) + var/turf_dir = get_dir(last_turf, get_turf(target)) + if (turf_dir & NORTH) + hity += 32 + if (turf_dir & SOUTH) + hity -= 32 + if (turf_dir & EAST) + hitx += 32 + if (turf_dir & WEST) + hitx -= 32 + + var/obj/item/tether_anchor/anchor = new(last_turf || get_turf(target)) + anchor.pixel_x = hitx + anchor.pixel_y = hity + anchor.anchored = TRUE + firer.AddComponent(/datum/component/tether, anchor, 7, "MODtether") /obj/projectile/tether/Destroy() QDEL_NULL(line) return ..() +/obj/item/tether_anchor + name = "tether anchor" + desc = "A reinforced anchor with a tether attachment point. A centuries old EVA tool which saved countless engineers' lives." + icon_state = "tether_latched" + icon = 'icons/obj/clothing/modsuit/mod_modules.dmi' + max_integrity = 60 + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT + +/obj/item/tether_anchor/examine(mob/user) + . = ..() + . += span_info("It can be secured by using a wrench on it. Use right-click to tether yourself to [src].") + +/obj/item/tether_anchor/wrench_act(mob/living/user, obj/item/tool) + . = ..() + default_unfasten_wrench(user, tool) + return ITEM_INTERACT_SUCCESS + +/obj/item/tether_anchor/attack_hand_secondary(mob/user, list/modifiers) + if (!can_interact(user) || !user.CanReach(src) || !isturf(loc)) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + balloon_alert(user, "attached tether") + user.AddComponent(/datum/component/tether, src, 7, "tether") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/item/tether_anchor/mouse_drop_receive(atom/target, mob/user, params) + if (!can_interact(user) || !user.CanReach(src) || !isturf(loc)) + return + + if (!isliving(target) || !target.CanReach(src)) + return + + if (target == user) + balloon_alert(user, "attached tether") + user.AddComponent(/datum/component/tether, src, 7, "tether") + return + + balloon_alert(user, "attaching tether...") + to_chat(target, span_userdanger("[user] is trying to attach a tether to you!")) + if (!do_after(user, 5 SECONDS, target)) + return + + balloon_alert(user, "attached tether") + to_chat(target, span_userdanger("[user] attaches a tether to you!")) + target.AddComponent(/datum/component/tether, src, 7, "tether") + +/datum/embed_data/tether_projectile + embed_chance=65 // spiky + fall_chance=2 + ignore_throwspeed_threshold=TRUE + pain_stam_pct=0.4 + pain_mult=3 + jostle_pain_mult=2 + rip_time=1 SECONDS + ///Radiation Protection - Protects the user from radiation, gives them a geiger counter and rad info in the panel. /obj/item/mod/module/rad_protection name = "MOD radiation protection module" diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 2ab0b0a1fd269..3faf44fe2f088 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -112,6 +112,10 @@ var/stabilize = TRUE /// Callback to see if we can thrust the user. var/thrust_callback + /// How much force this module can apply per tick + var/drift_force = 1.5 NEWTONS + /// How much force this module's stabilizier can put out + var/stabilizer_force = 1.2 NEWTONS /obj/item/mod/module/jetpack/Initialize(mapload) . = ..() @@ -134,13 +138,21 @@ AddComponent( \ /datum/component/jetpack, \ src.stabilize, \ + drift_force, \ + stabilizer_force, \ COMSIG_MODULE_TRIGGERED, \ COMSIG_MODULE_DEACTIVATED, \ MOD_ABORT_USE, \ thrust_callback, \ - /datum/effect_system/trail_follow/ion/grav_allowed \ + /datum/effect_system/trail_follow/ion/grav_allowed, \ ) + if (!isnull(mod) && !isnull(mod.wearer) && mod.wearer.get_item_by_slot(slot_flags) == src) + if (!stabilize) + ADD_TRAIT(mod.wearer, TRAIT_NOGRAV_ALWAYS_DRIFT, MOD_TRAIT) + else + REMOVE_TRAIT(mod.wearer, TRAIT_NOGRAV_ALWAYS_DRIFT, MOD_TRAIT) + /obj/item/mod/module/jetpack/get_configuration() . = ..() .["stabilizers"] = add_ui_configuration("Stabilizers", "bool", stabilize) @@ -157,6 +169,25 @@ return FALSE return TRUE +/obj/item/mod/module/jetpack/on_activation() + mod.wearer.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/full_speed) + if (!stabilize) + ADD_TRAIT(mod.wearer, TRAIT_NOGRAV_ALWAYS_DRIFT, MOD_TRAIT) + +/obj/item/mod/module/jetpack/on_deactivation(display_message = TRUE, deleting = FALSE) + mod.wearer.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/full_speed) + REMOVE_TRAIT(mod.wearer, TRAIT_NOGRAV_ALWAYS_DRIFT, MOD_TRAIT) + +/obj/item/mod/module/jetpack/advanced + name = "MOD advanced ion jetpack module" + desc = "An improvement on the previous model of electric thrusters. This one achieves higher precision \ + and spartial stability through mounting of more jets and application of red paint." + icon_state = "jetpack_advanced" + overlay_state_inactive = "module_jetpackadv" + overlay_state_active = "module_jetpackadv_on" + drift_force = 2 NEWTONS + stabilizer_force = 2 NEWTONS + /// Cooldown to use if we didn't actually launch a jump jet #define FAILED_ACTIVATION_COOLDOWN 3 SECONDS @@ -310,6 +341,15 @@ mask.flags_cover &= ~(MASKCOVERSMOUTH |PEPPERPROOF) mask.visor_flags_cover &= ~(MASKCOVERSMOUTH |PEPPERPROOF) +/obj/item/mod/module/mouthhole/can_install(obj/item/mod/control/mod) + var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD) + var/obj/item/clothing/mask = mod.get_part_from_slot(ITEM_SLOT_MASK) + if(istype(helmet) && ((helmet.flags_cover|helmet.visor_flags_cover) & (HEADCOVERSMOUTH|PEPPERPROOF))) + return ..() + if(istype(mask) && ((mask.flags_cover|mask.visor_flags_cover) & (MASKCOVERSMOUTH|PEPPERPROOF))) + return ..() + return FALSE + /obj/item/mod/module/mouthhole/on_uninstall(deleting = FALSE) if(deleting) return @@ -379,12 +419,6 @@ /// Maximum range we can set. var/max_range = 5 -/obj/item/mod/module/flashlight/on_suit_activation() - RegisterSignal(mod.wearer, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) - -/obj/item/mod/module/flashlight/on_suit_deactivation(deleting = FALSE) - UnregisterSignal(mod.wearer, COMSIG_HIT_BY_SABOTEUR) - /obj/item/mod/module/flashlight/on_activation() set_light_flags(light_flags | LIGHT_ATTACHED) set_light_on(active) @@ -394,11 +428,11 @@ set_light_flags(light_flags & ~LIGHT_ATTACHED) set_light_on(active) -/obj/item/mod/module/flashlight/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/item/mod/module/flashlight/on_saboteur(datum/source, disrupt_duration) + . = ..() if(active) on_deactivation() - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/item/mod/module/flashlight/on_process(seconds_per_tick) active_power_cost = base_power * light_range @@ -917,7 +951,7 @@ playsound(src, 'sound/machines/microwave/microwave-end.ogg', 50, TRUE) return balloon_alert(mod.wearer, "not enough material") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) /obj/item/mod/module/recycler/proc/InsertSheets(obj/item/recycler, obj/item/stack/sheets, atom/context) SIGNAL_HANDLER @@ -946,13 +980,86 @@ /obj/item/mod/module/recycler/donk/dispense(atom/target) if(!container.use_amount_mat(required_amount, /datum/material/iron)) balloon_alert(mod.wearer, "not enough material") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return var/obj/item/ammo_box/product = new ammobox_type(target) attempt_insert_storage(product) balloon_alert(mod.wearer, "ammo box dispensed.") playsound(src, 'sound/machines/microwave/microwave-end.ogg', 50, TRUE) +/obj/item/mod/module/fishing_glove + name = "MOD fishing glove module" + desc = "A MOD module that takes in an external fishing rod to enable the user to fish without having to hold one, while also making it slightly easier." + icon_state = "fishing_glove" + complexity = 1 + overlay_state_inactive = "fishing_glove" + incompatible_modules = (/obj/item/mod/module/fishing_glove) + required_slots = list(ITEM_SLOT_GLOVES) + var/obj/item/fishing_rod/equipped + +/obj/item/mod/module/fishing_glove/Initialize(mapload) + . = ..() + register_context() + +/obj/item/mod/module/fishing_glove/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(!held_item && equipped) + context[SCREENTIP_CONTEXT_RMB] = "Remove rod" + return CONTEXTUAL_SCREENTIP_SET + if(istype(held_item, /obj/item/fishing_rod)) + context[SCREENTIP_CONTEXT_LMB] = "Insert rod" + return CONTEXTUAL_SCREENTIP_SET + +/obj/item/mod/module/fishing_glove/examine(mob/user) + . = ..() + . += span_info("You can [EXAMINE_HINT("right-click")] the modsuit gloves to open the fishing rod interface once attached and activated.") + if(equipped) + . += span_info("it has a [icon2html(equipped, user)] installed. [EXAMINE_HINT("Right-Click")] to remove it.") + +/obj/item/mod/module/fishing_glove/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/fishing_rod)) + return ..() + if(equipped) + balloon_alert(user, "remove current rod first!") + if(!user.transferItemToLoc(tool, src)) + user.balloon_alert(user, "it's stuck!") + equipped = tool + balloon_alert(user, "rod inserted") + playsound(src, 'sound/items/click.ogg', 50, TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/item/mod/module/fishing_glove/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return + if(!equipped) + return + user.put_in_hands(equipped) + balloon_alert(user, "rod removed") + playsound(src, 'sound/items/click.ogg', 50, TRUE) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/item/mod/module/fishing_glove/Exited(atom/movable/gone) + if(gone == equipped) + equipped = null + var/obj/item/gloves = mod?.get_part_from_slot(ITEM_SLOT_GLOVES) + if(gloves && !QDELETED(mod)) + qdel(gloves.GetComponent(/datum/component/profound_fisher)) + return ..() + +/obj/item/mod/module/fishing_glove/on_suit_activation() + var/obj/item/gloves = mod.get_part_from_slot(ITEM_SLOT_GLOVES) + if(!gloves) + return + gloves.AddComponent(/datum/component/adjust_fishing_difficulty, 5) + if(equipped) + gloves.AddComponent(/datum/component/profound_fisher, equipped) + +/obj/item/mod/module/fishing_glove/on_suit_deactivation(deleting = FALSE) + var/obj/item/gloves = mod.get_part_from_slot(ITEM_SLOT_GLOVES) + if(gloves && !deleting) + qdel(gloves.GetComponent(/datum/component/adjust_fishing_difficulty)) + qdel(gloves.GetComponent(/datum/component/profound_fisher)) + /obj/item/mod/module/shock_absorber name = "MOD shock absorption module" desc = "A module that makes the user resistant to the knockdown inflicted by Stun Batons." diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm index 531bc5b32fd0a..3917b961e06f3 100644 --- a/code/modules/mod/modules/modules_maint.dm +++ b/code/modules/mod/modules/modules_maint.dm @@ -108,7 +108,7 @@ QDEL_NULL(music_player) if(deleting) return - SEND_SOUND(mod.wearer, sound('sound/machines/terminal_off.ogg', volume = 50, channel = CHANNEL_JUKEBOX)) + SEND_SOUND(mod.wearer, sound('sound/machines/terminal/terminal_off.ogg', volume = 50, channel = CHANNEL_JUKEBOX)) /obj/item/mod/module/visor/rave/generate_worn_overlay(mutable_appearance/standing) . = ..() @@ -271,7 +271,7 @@ SKYRAT EDIT END */ var/you_fucked_up = FALSE /obj/item/mod/module/atrocinator/on_activation() - playsound(src, 'sound/effects/curseattack.ogg', 50) + playsound(src, 'sound/effects/curse/curseattack.ogg', 50) mod.wearer.AddElement(/datum/element/forced_gravity, NEGATIVE_GRAVITY) RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(check_upstairs)) RegisterSignal(mod.wearer, COMSIG_MOB_SAY, PROC_REF(on_talk)) @@ -287,7 +287,7 @@ SKYRAT EDIT END */ /obj/item/mod/module/atrocinator/on_deactivation(display_message = TRUE, deleting = FALSE) if(!deleting) - playsound(src, 'sound/effects/curseattack.ogg', 50) + playsound(src, 'sound/effects/curse/curseattack.ogg', 50) qdel(mod.wearer.RemoveElement(/datum/element/forced_gravity, NEGATIVE_GRAVITY)) UnregisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED) UnregisterSignal(mod.wearer, COMSIG_MOB_SAY) diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index 7a802cf0f6cda..fe7e84f793907 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -160,7 +160,7 @@ organ_list += organ organ.forceMove(src) balloon_alert(mod.wearer, "picked up [organ]") - playsound(src, 'sound/mecha/hydraulic.ogg', 25, TRUE) + playsound(src, 'sound/vehicles/mecha/hydraulic.ogg', 25, TRUE) drain_power(use_energy_cost) return if(!length(organ_list)) @@ -169,15 +169,15 @@ var/obj/projectile/organ/projectile = new /obj/projectile/organ(mod.wearer.loc, fired_organ) projectile.preparePixelProjectile(target, mod.wearer) projectile.firer = mod.wearer - playsound(src, 'sound/mecha/hydraulic.ogg', 25, TRUE) + playsound(src, 'sound/vehicles/mecha/hydraulic.ogg', 25, TRUE) INVOKE_ASYNC(projectile, TYPE_PROC_REF(/obj/projectile, fire)) drain_power(use_energy_cost) /obj/projectile/organ name = "organ" damage = 0 - hitsound = 'sound/effects/attackblob.ogg' - hitsound_wall = 'sound/effects/attackblob.ogg' + hitsound = 'sound/effects/blob/attackblob.ogg' + hitsound_wall = 'sound/effects/blob/attackblob.ogg' /// A reference to the organ we "are". var/obj/item/organ/organ @@ -195,7 +195,7 @@ /obj/projectile/organ/on_hit(atom/target, blocked = 0, pierce_hit) . = ..() - if(!ishuman(target)) + if(!isliving(target)) organ.forceMove(drop_location()) organ = null return @@ -339,7 +339,7 @@ balloon_alert(mod.wearer, "already ripped!") return balloon_alert(mod.wearer, "ripping clothing...") - playsound(src, 'sound/items/zip.ogg', 25, TRUE, frequency = -1) + playsound(src, 'sound/items/zip/zip.ogg', 25, TRUE, frequency = -1) if(!do_after(mod.wearer, 1.5 SECONDS, target = carbon_target)) balloon_alert(mod.wearer, "interrupted!") return @@ -370,7 +370,7 @@ clothing.body_parts_covered |= ripped_clothing[clothing] ripped_clothing -= clothing if(zipped) - playsound(src, 'sound/items/zip.ogg', 25, TRUE) + playsound(src, 'sound/items/zip/zip.ogg', 25, TRUE) balloon_alert(mod.wearer, "clothing mended") /obj/item/mod/module/thread_ripper/on_suit_deactivation(deleting = FALSE) @@ -383,7 +383,7 @@ clothing.body_parts_covered |= ripped_clothing[clothing] ripped_clothing = list() if(!deleting) - playsound(src, 'sound/items/zip.ogg', 25, TRUE) + playsound(src, 'sound/items/zip/zip.ogg', 25, TRUE) ///Surgical Processor - Lets you do advanced surgeries portably. /obj/item/mod/module/surgical_processor @@ -429,3 +429,22 @@ /datum/surgery/advanced/bioware/cortex_folding, /datum/surgery/advanced/bioware/cortex_folding/mechanic, ) + +/obj/item/mod/module/surgical_processor/emergency + desc = "A module using an onboard surgical computer which can be connected to other computers to download and \ + perform advanced surgeries on the go. This one came pre-loaded with some emergency surgeries." + device = /obj/item/surgical_processor/mod/emergency + +/obj/item/surgical_processor/mod/emergency + loaded_surgeries = list( + /datum/surgery/healing/combo/upgraded/femto, + /datum/surgery/blood_filter, + /datum/surgery/brain_surgery, + /datum/surgery/coronary_bypass, + /datum/surgery/ear_surgery, + /datum/surgery/eye_surgery, + /datum/surgery/hepatectomy, + /datum/surgery/revival, + /datum/surgery/stomach_pump, + /datum/surgery/advanced/wing_reconstruction, + ) diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index a5215341a06d2..bce377c71e935 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -325,7 +325,7 @@ var/obj/projectile/net = new /obj/projectile/energy_net(mod.wearer.loc, src) net.preparePixelProjectile(target, mod.wearer) net.firer = mod.wearer - playsound(src, 'sound/weapons/punchmiss.ogg', 25, TRUE) + playsound(src, 'sound/items/weapons/punchmiss.ogg', 25, TRUE) INVOKE_ASYNC(net, TYPE_PROC_REF(/obj/projectile, fire)) drain_power(use_energy_cost) @@ -343,8 +343,8 @@ icon = 'icons/obj/clothing/modsuit/mod_modules.dmi' damage = 0 range = 9 - hitsound = 'sound/items/fultext_deploy.ogg' - hitsound_wall = 'sound/items/fultext_deploy.ogg' + hitsound = 'sound/items/fulton/fultext_deploy.ogg' + hitsound_wall = 'sound/items/fulton/fultext_deploy.ogg' /// Reference to the beam following the projectile. var/line /// Reference to the energy net module. diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index a35ab16eba280..87a167c5cff02 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -128,10 +128,10 @@ if(mod.wearer.transferItemToLoc(holding, src, force = FALSE, silent = TRUE)) holstered = holding balloon_alert(mod.wearer, "weapon holstered") - playsound(src, 'sound/weapons/gun/revolver/empty.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/gun/revolver/empty.ogg', 100, TRUE) else if(mod.wearer.put_in_active_hand(holstered, forced = FALSE, ignore_animation = TRUE)) balloon_alert(mod.wearer, "weapon drawn") - playsound(src, 'sound/weapons/gun/revolver/empty.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/gun/revolver/empty.ogg', 100, TRUE) else balloon_alert(mod.wearer, "holster full!") @@ -232,14 +232,14 @@ return linked_bodybag = new bodybag_type(target_turf) linked_bodybag.take_contents() - playsound(linked_bodybag, 'sound/weapons/egloves.ogg', 80, TRUE) + playsound(linked_bodybag, 'sound/items/weapons/egloves.ogg', 80, TRUE) RegisterSignal(linked_bodybag, COMSIG_MOVABLE_MOVED, PROC_REF(check_range)) RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(check_range)) /obj/item/mod/module/criminalcapture/proc/packup() if(!linked_bodybag) return - playsound(linked_bodybag, 'sound/weapons/egloves.ogg', 80, TRUE) + playsound(linked_bodybag, 'sound/items/weapons/egloves.ogg', 80, TRUE) apply_wibbly_filters(linked_bodybag) animate(linked_bodybag, 0.5 SECONDS, alpha = 50, flags = ANIMATION_PARALLEL) addtimer(CALLBACK(src, PROC_REF(delete_bag), linked_bodybag), 0.5 SECONDS) @@ -452,7 +452,7 @@ /obj/item/mod/module/active_sonar/on_use() balloon_alert(mod.wearer, "readying sonar...") - playsound(mod.wearer, 'sound/mecha/skyfall_power_up.ogg', vol = 20, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(mod.wearer, 'sound/vehicles/mecha/skyfall_power_up.ogg', vol = 20, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) if(!do_after(mod.wearer, 1.1 SECONDS, target = mod)) return playsound(mod.wearer, 'sound/effects/ping_hit.ogg', vol = 75, vary = TRUE) // Should be audible for the radius of the sonar @@ -503,7 +503,7 @@ return if(new_mode != SHOOTING_ASSISTANT_OFF && !mod.get_charge()) balloon_alert(mod.wearer, "no charge!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return //Remove the effects of the previously selected mode @@ -568,7 +568,7 @@ projectile.ricochets_max += 1 projectile.min_ricochets += 1 projectile.ricochet_incidence_leeway = 0 //allows the projectile to bounce at any angle. - ADD_TRAIT(projectile, TRAIT_ALWAYS_HIT_ZONE, MOD_TRAIT) + projectile.accuracy_falloff = 0 #undef SHOOTING_ASSISTANT_OFF #undef STORMTROOPER_MODE diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index 87bbcfd88a48b..1ce0a2f316d49 100644 --- a/code/modules/mod/modules/modules_supply.dm +++ b/code/modules/mod/modules/modules_supply.dm @@ -53,7 +53,7 @@ var/atom/movable/picked_crate = target if(!check_crate_pickup(picked_crate)) return - playsound(src, 'sound/mecha/hydraulic.ogg', 25, TRUE) + playsound(src, 'sound/vehicles/mecha/hydraulic.ogg', 25, TRUE) if(!do_after(mod.wearer, load_time, target = target)) balloon_alert(mod.wearer, "interrupted!") return @@ -67,7 +67,7 @@ var/turf/target_turf = get_turf(target) if(target_turf.is_blocked_turf()) return - playsound(src, 'sound/mecha/hydraulic.ogg', 25, TRUE) + playsound(src, 'sound/vehicles/mecha/hydraulic.ogg', 25, TRUE) if(!do_after(mod.wearer, load_time, target = target)) balloon_alert(mod.wearer, "interrupted!") return @@ -80,7 +80,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) if(deleting) return for(var/atom/movable/crate as anything in stored_crates) @@ -154,7 +154,7 @@ var/turf/closed/mineral/mineral_turf = bumped_into var/turf/closed/mineral/gibtonite/giberal_turf = mineral_turf if(istype(giberal_turf) && giberal_turf.stage != GIBTONITE_UNSTRUCK) - playsound(bumper, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(bumper, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) to_chat(bumper, span_warning("[icon2html(src, bumper)] Unstable gibtonite ore deposit detected! Drills disabled.")) on_deactivation() return @@ -442,7 +442,7 @@ balloon_alert(mod.wearer, "fully ash covered") mod.wearer.color = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,3) //make them super light animate(mod.wearer, 1 SECONDS, color = null, flags = ANIMATION_PARALLEL) - playsound(src, 'sound/effects/sparks1.ogg', 100, TRUE) + playsound(src, 'sound/effects/sparks/sparks1.ogg', 100, TRUE) actual_speed_added = max(0, min(mod.slowdown_active, speed_added)) mod.slowdown -= actual_speed_added mod.wearer.update_equipment_speed_mods() @@ -519,7 +519,7 @@ /obj/item/mod/module/sphere_transform/used() if(!lavaland_equipment_pressure_check(get_turf(src))) balloon_alert(mod.wearer, "too much pressure!") - playsound(src, 'sound/weapons/gun/general/dry_fire.ogg', 25, TRUE) + playsound(src, 'sound/items/weapons/gun/general/dry_fire.ogg', 25, TRUE) return FALSE return ..() @@ -530,7 +530,7 @@ var/obj/projectile/bomb = new /obj/projectile/bullet/mining_bomb(mod.wearer.loc) bomb.preparePixelProjectile(target, mod.wearer) bomb.firer = mod.wearer - playsound(src, 'sound/weapons/gun/general/grenade_launch.ogg', 75, TRUE) + playsound(src, 'sound/items/weapons/gun/general/grenade_launch.ogg', 75, TRUE) INVOKE_ASYNC(bomb, TYPE_PROC_REF(/obj/projectile, fire)) drain_power(use_energy_cost) @@ -617,7 +617,7 @@ /obj/structure/mining_bomb/proc/boom(atom/movable/firer) visible_message(span_danger("[src] explodes!")) - playsound(src, 'sound/magic/magic_missile.ogg', 200, vary = TRUE) + playsound(src, 'sound/effects/magic/magic_missile.ogg', 200, vary = TRUE) for(var/turf/closed/mineral/rock in circle_range_turfs(src, 2)) rock.gets_drilled() for(var/mob/living/mob in range(1, src)) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 238cc8757f8fe..5707dc538215b 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -139,7 +139,6 @@ UpdateDisplay() if(has_light) add_item_action(/datum/action/item_action/toggle_computer_light) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) if(inserted_disk) inserted_disk = new inserted_disk(src) if(internal_cell) @@ -197,7 +196,7 @@ /obj/item/modular_computer/pre_attack_secondary(atom/A, mob/living/user, params) if(active_program?.tap(A, user, params)) user.do_attack_animation(A) //Emulate this animation since we kill the attack in three lines - playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), TRUE, -1) //Likewise for the tap sound + playsound(loc, 'sound/items/weapons/tap.ogg', get_clamped_volume(), TRUE, -1) //Likewise for the tap sound addtimer(CALLBACK(src, PROC_REF(play_ping)), 0.5 SECONDS, TIMER_UNIQUE) //Slightly delayed ping to indicate success return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() @@ -251,7 +250,7 @@ /obj/item/modular_computer/get_id_examine_strings(mob/user) . = ..() if(computer_id_slot) - . += "\The [src] is displaying [computer_id_slot]." + . += "[src] is displaying [computer_id_slot]:" . += computer_id_slot.get_id_examine_strings(user) /obj/item/modular_computer/proc/print_text(text_to_print, paper_title = "") @@ -289,7 +288,7 @@ to_chat(user, span_notice("You insert \the [inserting_id] into the card slot.")) balloon_alert(user, "inserted ID") - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) if(ishuman(loc)) var/mob/living/carbon/human/human_wearer = loc @@ -323,7 +322,7 @@ if(!silent && !isnull(user)) to_chat(user, span_notice("You remove the card from the card slot.")) - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) balloon_alert(user, "removed ID") if(ishuman(loc)) @@ -550,7 +549,7 @@ * The program calling this proc. * The message that the program wishes to display. */ -/obj/item/modular_computer/proc/alert_call(datum/computer_file/program/caller, alerttext, sound = 'sound/machines/twobeep_high.ogg') +/obj/item/modular_computer/proc/alert_call(datum/computer_file/program/caller, alerttext, sound = 'sound/machines/beep/twobeep_high.ogg') if(!caller || !caller.alert_able || caller.alert_silenced || !alerttext) //Yeah, we're checking alert_able. No, you don't get to make alerts that the user can't silence. return FALSE playsound(src, sound, 50, TRUE) @@ -560,13 +559,13 @@ if(!use_energy()) return if(HAS_TRAIT(SSstation, STATION_TRAIT_PDA_GLITCHED)) - playsound(src, pick('sound/machines/twobeep_voice1.ogg', 'sound/machines/twobeep_voice2.ogg'), 50, TRUE) + playsound(src, pick('sound/machines/beep/twobeep_voice1.ogg', 'sound/machines/beep/twobeep_voice2.ogg'), 50, TRUE) else - playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE) + playsound(src, 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) audible_message("*[ringtone]*") /obj/item/modular_computer/proc/send_sound() - playsound(src, 'sound/machines/terminal_success.ogg', 15, TRUE) + playsound(src, 'sound/machines/terminal/terminal_success.ogg', 15, TRUE) // Function used by NanoUI's to obtain data for header. All relevant entries begin with "PC_" /obj/item/modular_computer/proc/get_header_data() @@ -753,20 +752,16 @@ update_item_action_buttons(force = TRUE) //force it because we added an overlay, not changed its icon return TRUE -/** - * Disables the computer's flashlight/LED light, if it has one, for a given disrupt_duration. - * - * Called when sent COMSIG_HIT_BY_SABOTEUR. - */ -/obj/item/modular_computer/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +//Disables the computer's flashlight/LED light, if it has one, for a given disrupt_duration. +/obj/item/modular_computer/on_saboteur(datum/source, disrupt_duration) + . = ..() if(!has_light) return set_light_on(FALSE) update_appearance() update_item_action_buttons(force = TRUE) //force it because we added an overlay, not changed its icon COOLDOWN_START(src, disabled_time, disrupt_duration) - return COMSIG_SABOTEUR_SUCCESS + return TRUE /** * Sets the computer's light color, if it has a light. diff --git a/code/modules/modular_computers/computers/item/computer_power.dm b/code/modules/modular_computers/computers/item/computer_power.dm index edce55c17a614..0b18bf47bdc47 100644 --- a/code/modules/modular_computers/computers/item/computer_power.dm +++ b/code/modules/modular_computers/computers/item/computer_power.dm @@ -43,7 +43,6 @@ ///Charge depends on whether the PC is on, and what programs are running/idle on it. /obj/item/modular_computer/proc/handle_power(seconds_per_tick) var/power_usage = screen_on ? base_active_power_usage : base_idle_power_usage - if(light_on) power_usage *= FLASHLIGHT_DRAIN_MULTIPLIER if(active_program) diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index 4313bf2efbd08..d8b97c523019d 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -211,7 +211,7 @@ if("PC_Imprint_ID") imprint_id() UpdateDisplay() - playsound(src, 'sound/machines/terminal_processing.ogg', 15, TRUE) + playsound(src, 'sound/machines/terminal/terminal_processing.ogg', 15, TRUE) if("PC_Pai_Interact") switch(params["option"]) diff --git a/code/modules/modular_computers/computers/item/disks/role_disks.dm b/code/modules/modular_computers/computers/item/disks/role_disks.dm index f7f20efb70b43..2191aaccdff1d 100644 --- a/code/modules/modular_computers/computers/item/disks/role_disks.dm +++ b/code/modules/modular_computers/computers/item/disks/role_disks.dm @@ -6,7 +6,6 @@ max_capacity = 32 ///Static list of programss ALL command tablets have. var/static/list/datum/computer_file/command_programs = list( - /datum/computer_file/program/crew_manifest, /datum/computer_file/program/science, /datum/computer_file/program/status, ) @@ -74,7 +73,6 @@ icon_state = "datadisk9" starting_programs = list( /datum/computer_file/program/records/security, - /datum/computer_file/program/crew_manifest, ) /** 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 1fd31957befca..a5e9d9750f3ea 100644 --- a/code/modules/modular_computers/computers/item/disks/unique_disks.dm +++ b/code/modules/modular_computers/computers/item/disks/unique_disks.dm @@ -23,7 +23,6 @@ /datum/computer_file/program/supermatter_monitor, /datum/computer_file/program/newscaster, /datum/computer_file/program/secureye, - /datum/computer_file/program/crew_manifest, /datum/computer_file/program/status, ) potential_programs += subtypesof(/datum/computer_file/program/maintenance) - /datum/computer_file/program/maintenance/theme diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index ec67185314d98..2691c91275c0c 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -39,9 +39,9 @@ /datum/computer_file/program/nt_pay, /datum/computer_file/program/notepad, // SKYRAT 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 + /datum/computer_file/program/maintenance/camera, // Adds camera to all base tablets // SKRAT EDIT ADDITION END + /datum/computer_file/program/crew_manifest ) ///List of items that can be stored in a PDA var/static/list/contained_item = list( @@ -165,7 +165,7 @@ else balloon_alert(user, "inserted [tool]") inserted_item = tool - playsound(src, 'sound/machines/pda_button1.ogg', 50, TRUE) + playsound(src, 'sound/machines/pda_button/pda_button1.ogg', 50, TRUE) return ITEM_INTERACT_SUCCESS @@ -184,7 +184,7 @@ /obj/item/modular_computer/pda/proc/remove_pen(mob/user) - if(issilicon(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) //TK doesn't work even with this removed but here for readability + if(issilicon(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH | NEED_DEXTERITY)) //TK doesn't work even with this removed but here for readability return if(inserted_item) @@ -192,7 +192,7 @@ user.put_in_hands(inserted_item) inserted_item = null update_appearance() - playsound(src, 'sound/machines/pda_button2.ogg', 50, TRUE) + playsound(src, 'sound/machines/pda_button/pda_button2.ogg', 50, TRUE) /obj/item/modular_computer/pda/proc/swap_pen(mob/user, obj/item/tool) if(inserted_item) @@ -200,7 +200,7 @@ user.put_in_hands(inserted_item) inserted_item = tool update_appearance() - playsound(src, 'sound/machines/pda_button1.ogg', 50, TRUE) + playsound(src, 'sound/machines/pda_button/pda_button1.ogg', 50, TRUE) /obj/item/modular_computer/pda/proc/explode(mob/target, mob/bomber, from_message_menu = FALSE) var/turf/current_turf = get_turf(src) @@ -325,12 +325,21 @@ ///Ref to the silicon we're installed in. Set by the silicon itself during its creation. var/mob/living/silicon/silicon_owner +/obj/item/modular_computer/pda/silicon/pai + starting_programs = list( + /datum/computer_file/program/messenger, + /datum/computer_file/program/chatclient, + ) + /obj/item/modular_computer/pda/silicon/cyborg 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/borg_monitor, + /datum/computer_file/program/atmosscan, + /datum/computer_file/program/crew_manifest, ) /obj/item/modular_computer/pda/silicon/Initialize(mapload) @@ -425,7 +434,7 @@ return TRUE /obj/item/modular_computer/pda/silicon/ui_state(mob/user) - return GLOB.reverse_contained_state + return GLOB.deep_inventory_state /obj/item/modular_computer/pda/silicon/cyborg/syndicate icon_state = "tablet-silicon-syndicate" diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index 5c7f95d54e916..6261b52c64181 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -7,7 +7,6 @@ greyscale_colors = "#67A364#a92323" max_capacity = parent_type::max_capacity * 2 var/static/list/datum/computer_file/head_programs = list( - /datum/computer_file/program/crew_manifest, /datum/computer_file/program/status, /datum/computer_file/program/science, /datum/computer_file/program/robocontrol, @@ -105,7 +104,6 @@ inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/records/security, - /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, ) @@ -115,7 +113,6 @@ inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/records/security, - /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, ) @@ -126,7 +123,6 @@ inserted_item = /obj/item/pen/red/security starting_programs = list( /datum/computer_file/program/records/security, - /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, ) @@ -220,7 +216,6 @@ greyscale_colors = "#FAFAFA#000099#1f2026" starting_programs = list( /datum/computer_file/program/records/medical, - /datum/computer_file/program/crew_manifest, ) /** @@ -383,7 +378,6 @@ greyscale_colors = "#333333#000099#3F96CC" starting_programs = list( /datum/computer_file/program/records/medical, - /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, ) @@ -400,7 +394,6 @@ name = "bridge assistant PDA" greyscale_colors = "#374f7e#a92323" starting_programs = list( - /datum/computer_file/program/crew_manifest, /datum/computer_file/program/status, ) @@ -410,7 +403,6 @@ inserted_item = /obj/item/pen/fountain starting_programs = list( /datum/computer_file/program/records/security, - /datum/computer_file/program/crew_manifest, /datum/computer_file/program/coupon, //veteran discount /datum/computer_file/program/skill_tracker, ) @@ -435,6 +427,14 @@ /datum/computer_file/program/borg_monitor, ) +/obj/item/modular_computer/pda/pun_pun + name = "monkey PDA" + greyscale_colors = "#ffcc66#914800" + starting_programs = list( + /datum/computer_file/program/bounty_board, + /datum/computer_file/program/emojipedia, + ) + /** * Non-roles */ diff --git a/code/modules/modular_computers/documentation.md b/code/modules/modular_computers/documentation.md deleted file mode 100644 index ba11790f2fde8..0000000000000 --- a/code/modules/modular_computers/documentation.md +++ /dev/null @@ -1,57 +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. - run_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. - download_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_PDA 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/programs/antagonist/contractor_program.dm b/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm index d357d0f12f7de..5d77be0250018 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm @@ -54,7 +54,7 @@ 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) + user.playsound_local(user, 'sound/music/antag/contractstartup.ogg', 100, FALSE) program_open_overlay = "contractor-contractlist" return TRUE @@ -66,10 +66,10 @@ program_open_overlay = "contractor-extracted" else - user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50) + user.playsound_local(user, 'sound/machines/uplink/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) + user.playsound_local(user, 'sound/machines/uplink/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 @@ -96,7 +96,7 @@ traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem = 0 return TRUE else - user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50) + user.playsound_local(user, 'sound/machines/uplink/uplinkerror.ogg', 50) return TRUE if ("PRG_clear_error") error = "" diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm index fd52792bc8bdc..a731e95a94423 100644 --- a/code/modules/modular_computers/file_system/programs/arcade.dm +++ b/code/modules/modular_computers/file_system/programs/arcade.dm @@ -42,7 +42,7 @@ user?.mind?.adjust_experience(/datum/skill/gaming, 1) if(boss_hp <= 0) heads_up = "You have crushed [boss_name]! Rejoice!" - playsound(computer.loc, 'sound/arcade/win.ogg', 50) + playsound(computer.loc, 'sound/machines/arcade/win.ogg', 50) game_active = FALSE program_open_overlay = "arcade_off" if(istype(computer)) @@ -53,7 +53,7 @@ sleep(1 SECONDS) else if(player_hp <= 0 || player_mp <= 0) heads_up = "You have been defeated... how will the station survive?" - playsound(computer.loc, 'sound/arcade/lose.ogg', 50) + playsound(computer.loc, 'sound/machines/arcade/lose.ogg', 50) game_active = FALSE program_open_overlay = "arcade_off" if(istype(computer)) @@ -74,17 +74,17 @@ return if (boss_mp <= 5) heads_up = "[boss_mpamt] magic power has been stolen from you!" - playsound(computer.loc, 'sound/arcade/steal.ogg', 50, TRUE) + playsound(computer.loc, 'sound/machines/arcade/steal.ogg', 50, TRUE) player_mp -= boss_mpamt boss_mp += boss_mpamt else if(boss_mp > 5 && boss_hp <12) heads_up = "[boss_name] heals for [bossheal] health!" - playsound(computer.loc, 'sound/arcade/heal.ogg', 50, TRUE) + playsound(computer.loc, 'sound/machines/arcade/heal.ogg', 50, TRUE) boss_hp += bossheal boss_mp -= boss_mpamt else heads_up = "[boss_name] attacks you for [boss_attackamt] damage!" - playsound(computer.loc, 'sound/arcade/hit.ogg', 50, TRUE) + playsound(computer.loc, 'sound/machines/arcade/hit.ogg', 50, TRUE) player_hp -= boss_attackamt pause_state = FALSE @@ -122,7 +122,7 @@ attackamt = rand(2,6) + rand(0, gamerSkill) pause_state = TRUE heads_up = "You attack for [attackamt] damage." - playsound(computer.loc, 'sound/arcade/hit.ogg', 50, TRUE) + playsound(computer.loc, 'sound/machines/arcade/hit.ogg', 50, TRUE) boss_hp -= attackamt sleep(1 SECONDS) game_check() @@ -139,7 +139,7 @@ healcost = rand(1, maxPointCost) pause_state = TRUE heads_up = "You heal for [healamt] damage." - playsound(computer.loc, 'sound/arcade/heal.ogg', 50, TRUE) + playsound(computer.loc, 'sound/machines/arcade/heal.ogg', 50, TRUE) player_hp += healamt player_mp -= healcost sleep(1 SECONDS) @@ -152,7 +152,7 @@ rechargeamt = rand(4,7) + rand(0, gamerSkill) pause_state = TRUE heads_up = "You regain [rechargeamt] magic power." - playsound(computer.loc, 'sound/arcade/mana.ogg', 50, TRUE) + playsound(computer.loc, 'sound/machines/arcade/mana.ogg', 50, TRUE) player_mp += rechargeamt sleep(1 SECONDS) game_check() 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 6f5b116a930c0..90213963e3e64 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -122,7 +122,7 @@ if(robot.stat == DEAD) //Dead borgs will listen to you no longer to_chat(user, span_warning("Error -- Could not open a connection to unit:[robot]")) return FALSE - var/message = tgui_input_text(user, "Message to be sent to remote cyborg", "Send Message") + var/message = tgui_input_text(user, "Message to be sent to remote cyborg", "Send Message", max_length = MAX_MESSAGE_LEN) if(!message) return FALSE send_message(message, robot, user) @@ -139,10 +139,10 @@ if(user) to_chat(user, "Message sent to [robot]: [message]") robot.logevent("Message from [ID] -- \"[message]\"") - SEND_SOUND(robot, 'sound/machines/twobeep_high.ogg') + SEND_SOUND(robot, 'sound/machines/beep/twobeep_high.ogg') if(robot.connected_ai) to_chat(robot.connected_ai, "

        [span_notice("Message from [ID] to [robot] -- \"[message]\"")]
        ") - SEND_SOUND(robot.connected_ai, 'sound/machines/twobeep_high.ogg') + SEND_SOUND(robot.connected_ai, 'sound/machines/beep/twobeep_high.ogg') user?.log_talk(message, LOG_PDA, tag = "Cyborg Monitor Program: ID name \"[ID]\" to [robot]") return TRUE 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 86590192041ce..da86b112689c0 100644 --- a/code/modules/modular_computers/file_system/programs/bounty_board.dm +++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm @@ -75,7 +75,7 @@ switch(action) if("createBounty") if(!current_user || !bounty_text) - playsound(src, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 20, TRUE) return TRUE for(var/datum/station_request/i in GLOB.request_list) if("[i.req_number]" == "[current_user.account_id]") @@ -92,14 +92,14 @@ computer.say("Please swipe a valid ID first.") return TRUE if(current_user.account_holder == active_request.owner) - playsound(computer, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 20, TRUE) return TRUE active_request.applicants += list(current_user) if("payApplicant") if(!current_user) return if(!current_user.has_money(active_request.value) || (current_user.account_holder != active_request.owner)) - playsound(computer, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return request_target.transfer_money(current_user, active_request.value, "Bounties: Request Completed") computer.say("Paid out [active_request.value] credits.") @@ -112,10 +112,10 @@ return TRUE if("deleteRequest") if(!current_user) - playsound(computer, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 20, TRUE) return TRUE if(active_request.owner != current_user.account_holder) - playsound(computer, 'sound/machines/buzz-sigh.ogg', 20, TRUE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 20, TRUE) return TRUE computer.say("Deleted current request.") GLOB.request_list.Remove(active_request) diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index 966bb1c80edcb..8365ac59e198d 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -240,17 +240,17 @@ var/reason = "" if((requestonly && !self_paid) || !(computer.computer_id_slot?.GetID())) - reason = tgui_input_text(usr, "Reason", name) + reason = tgui_input_text(usr, "Reason", name, max_length = MAX_MESSAGE_LEN) if(isnull(reason) || ..()) return if(pack.goody && !self_paid) - playsound(computer, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) computer.say("ERROR: Small crates may only be purchased by private accounts.") return if(SSshuttle.supply.get_order_count(pack) == OVER_ORDER_LIMIT) - playsound(computer, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) computer.say("ERROR: No more then [CARGO_MAX_ORDER] of any pack may be ordered at once") return diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index ca09f45250074..570444029d6cc 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -99,16 +99,16 @@ // Log in. if("PRG_authenticate") if(!computer || !inserted_auth_card) - playsound(computer, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_prompt_deny.ogg', 50, FALSE) return TRUE if(authenticate(user, inserted_auth_card)) - playsound(computer, 'sound/machines/terminal_on.ogg', 50, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_on.ogg', 50, FALSE) return TRUE // Log out. if("PRG_logout") authenticated_card = null authenticated_user = null - playsound(computer, 'sound/machines/terminal_off.ogg', 50, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_off.ogg', 50, FALSE) return TRUE // Print a report. if("PRG_print") @@ -133,7 +133,7 @@ to_chat(usr, span_notice("Printer is out of paper.")) return TRUE else - playsound(computer, 'sound/machines/terminal_on.ogg', 50, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_on.ogg', 50, FALSE) computer.visible_message(span_notice("\The [computer] prints out a paper.")) return TRUE if("PRG_eject_id") @@ -157,7 +157,7 @@ inserted_auth_card.assignment = is_centcom ? "Fired" : "Demoted" SSid_access.remove_trim_from_card(inserted_auth_card) - playsound(computer, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_prompt_deny.ogg', 50, FALSE) return TRUE // Change ID card assigned name. if("PRG_edit") diff --git a/code/modules/modular_computers/file_system/programs/cargoship.dm b/code/modules/modular_computers/file_system/programs/cargoship.dm index fa73149dc850a..9df7bbd56d3b5 100644 --- a/code/modules/modular_computers/file_system/programs/cargoship.dm +++ b/code/modules/modular_computers/file_system/programs/cargoship.dm @@ -36,7 +36,7 @@ computer.RemoveID(usr) if("selectid") if(!computer.computer_id_slot.registered_account) - playsound(get_turf(computer.ui_host()), 'sound/machines/buzz-sigh.ogg', 50, TRUE, -1) + playsound(get_turf(computer.ui_host()), 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE, -1) return TRUE payments_acc = computer.computer_id_slot.registered_account playsound(get_turf(computer.ui_host()), 'sound/machines/ping.ogg', 50, TRUE, -1) diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm index 39a9d8c3c7fe5..d0dcf0ae873fe 100644 --- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm +++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm @@ -1,15 +1,13 @@ /datum/computer_file/program/crew_manifest filename = "plexagoncrew" filedesc = "Plexagon Crew List" - downloader_category = PROGRAM_CATEGORY_SECURITY + downloader_category = PROGRAM_CATEGORY_DEVICE program_open_overlay = "id" extended_desc = "Program for viewing and printing the current crew manifest" - download_access = list(ACCESS_SECURITY, ACCESS_COMMAND) program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET - size = 4 + size = 0 tgui_id = "NtosCrewManifest" program_icon = "clipboard-list" - detomatix_resistance = DETOMATIX_RESIST_MAJOR /datum/computer_file/program/crew_manifest/ui_static_data(mob/user) var/list/data = list() diff --git a/code/modules/modular_computers/file_system/programs/dept_order.dm b/code/modules/modular_computers/file_system/programs/dept_order.dm index 2229628d3921e..405e202e30949 100644 --- a/code/modules/modular_computers/file_system/programs/dept_order.dm +++ b/code/modules/modular_computers/file_system/programs/dept_order.dm @@ -156,7 +156,7 @@ var/new_dept_type = find_department_to_link(computer.computer_id_slot) if(isnull(new_dept_type)) computer.physical.balloon_alert(orderer, "no department found!") - playsound(computer, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) else computer.physical.balloon_alert(orderer, "linked") playsound(computer, 'sound/machines/ping.ogg', 30, TRUE) @@ -171,7 +171,7 @@ if(length(use_access & id_card_access) <= 0) computer.physical.balloon_alert(orderer, "access denied!") - playsound(computer, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return TRUE if(action == "override_order") @@ -179,7 +179,7 @@ return TRUE if(length(download_access & id_card_access) <= 0) computer.physical.balloon_alert(orderer, "requires head of staff access!") - playsound(computer, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return TRUE department_cooldowns[linked_department] = 0 @@ -222,7 +222,7 @@ break if(SSshuttle.supply.get_order_count(pack) == OVER_ORDER_LIMIT) - playsound(computer, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(computer, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) computer.physical.say("ERROR: No more then [CARGO_MAX_ORDER] of any pack may be ordered at once!") return 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 74af88ac87045..5c5d29d6672d0 100644 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/file_browser.dm @@ -35,7 +35,7 @@ return var/newname = reject_bad_name(params["new_name"]) if(!newname || newname != params["new_name"]) - playsound(computer, 'sound/machines/terminal_error.ogg', 25, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_error.ogg', 25, FALSE) return file.filename = newname return TRUE @@ -47,7 +47,7 @@ return var/newname = reject_bad_name(params["new_name"]) if(!newname || newname != params["new_name"]) - playsound(computer, 'sound/machines/terminal_error.ogg', 25, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_error.ogg', 25, FALSE) return file.filename = newname return TRUE diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index 04e902a5e8d4c..53d13008bc1f2 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -222,7 +222,7 @@ computer.say("Purchase succesful.") playsound(computer, 'sound/machines/ping.ogg', 25) return TRUE - playsound(computer, 'sound/machines/terminal_error.ogg', 25) + playsound(computer, 'sound/machines/terminal/terminal_error.ogg', 25) return TRUE /// Publication and adding points. @@ -235,5 +235,5 @@ SStgui.update_uis(src) playsound(computer, 'sound/machines/ping.ogg', 25) return TRUE - playsound(computer, 'sound/machines/terminal_error.ogg', 25) + playsound(computer, 'sound/machines/terminal/terminal_error.ogg', 25) return FALSE diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index 8d4db5ffb08d4..fefb76c7f84e9 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -62,7 +62,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) switch(action) if("PRG_open_job") var/edit_job_target = params["target"] - var/datum/job/j = SSjob.GetJob(edit_job_target) + var/datum/job/j = SSjob.get_job(edit_job_target) if(!can_edit_job(j) || !can_open_job(j)) return TRUE if(opened_positions[edit_job_target] >= 0) @@ -70,11 +70,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) j.total_positions++ opened_positions[edit_job_target]++ log_job_debug("[key_name(usr)] opened a [j.title] job position, for a total of [j.total_positions] open job slots.") - playsound(computer, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) return TRUE if("PRG_close_job") var/edit_job_target = params["target"] - var/datum/job/j = SSjob.GetJob(edit_job_target) + var/datum/job/j = SSjob.get_job(edit_job_target) if(!can_edit_job(j) || !can_close_job(j)) return TRUE //Allow instant closing without cooldown if a position has been opened before @@ -83,11 +83,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) j.total_positions-- opened_positions[edit_job_target]-- log_job_debug("[key_name(usr)] closed a [j.title] job position, leaving [j.total_positions] open job slots.") - playsound(computer, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) return TRUE if("PRG_priority") var/priority_target = params["target"] - var/datum/job/j = SSjob.GetJob(priority_target) + var/datum/job/j = SSjob.get_job(priority_target) if(!can_edit_job(j)) return TRUE if(j.total_positions <= j.current_positions) @@ -99,7 +99,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) SSjob.prioritized_jobs += j else computer.say("Error: CentCom employment protocols restrict prioritising more than 5 jobs.") - playsound(computer, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) return TRUE diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_data.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_data.dm index 0b1514d4c04e5..d1ead35172a94 100644 --- a/code/modules/modular_computers/file_system/programs/messenger/messenger_data.dm +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_data.dm @@ -133,13 +133,16 @@ GLOBAL_LIST_EMPTY_TYPED(pda_messengers, /datum/computer_file/program/messenger) var/everyone /// The station time at which this message was made. var/timestamp + /// Whether or not the message is hidden from ghostchat + var/subtle // BUBBER EDIT ADDITION - SUBTLE MESSAGES -/datum/pda_message/New(message, outgoing, timestamp, photo_name = null, everyone = FALSE) +/datum/pda_message/New(message, outgoing, timestamp, photo_name = null, everyone = FALSE, subtle = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: /datum/pda_message/New(message, outgoing, timestamp, photo_name = null, everyone = FALSE) src.message = message src.outgoing = outgoing src.timestamp = timestamp src.photo_name = photo_name src.everyone = everyone + src.subtle = subtle // BUBBER EDIT ADDITION - SUBTLE MESSAGES /// Returns an associative list of the message's data, used for ui_data calls. /datum/pda_message/proc/get_ui_data(mob/user) @@ -149,4 +152,5 @@ GLOBAL_LIST_EMPTY_TYPED(pda_messengers, /datum/computer_file/program/messenger) data["photo_path"] = photo_name ? SSassets.transport.get_asset_url(photo_name) : null data["everyone"] = everyone data["timestamp"] = timestamp + data["subtle"] = subtle // BUBBER EDIT ADDITION - SUBTLE MESSAGES return data 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 ae0dc9ea58678..97cb3dca59c92 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 @@ -157,7 +157,7 @@ /datum/computer_file/program/messenger/ui_state(mob/user) if(issilicon(user)) - return GLOB.reverse_contained_state + return GLOB.deep_inventory_state return GLOB.default_state /datum/computer_file/program/messenger/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) @@ -165,7 +165,7 @@ switch(action) if("PDA_ringSet") var/mob/living/user = usr - var/new_ringtone = tgui_input_text(user, "Enter a new ringtone", "Ringtone", ringtone, encode = FALSE) + var/new_ringtone = tgui_input_text(user, "Enter a new ringtone", "Ringtone", ringtone, max_length = MAX_MESSAGE_LEN, encode = FALSE) if(!computer.can_interact(user)) computer.balloon_alert(user, "can't reach!") return FALSE @@ -294,7 +294,7 @@ return disk.send_virus(computer, target_messenger.computer, usr, params["message"]) - return send_message(usr, params["message"], list(target)) + return send_message(usr, params["message"], list(target), subtle = params["subtle"]) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: return send_message(usr, params["message"], list(target)) if("PDA_clearPhoto") selected_image = null @@ -391,7 +391,7 @@ ////////////////////// /// Brings up the quick reply prompt to send a message. -/datum/computer_file/program/messenger/proc/quick_reply_prompt(mob/living/user, datum/pda_chat/chat) +/datum/computer_file/program/messenger/proc/quick_reply_prompt(mob/living/user, datum/pda_chat/chat, subtle = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: /datum/computer_file/program/messenger/proc/quick_reply_prompt(mob/living/user, datum/pda_chat/chat) if(!istype(chat)) return var/datum/computer_file/program/messenger/target = chat.recipient?.resolve() @@ -401,8 +401,8 @@ chat.can_reply = FALSE return var/target_name = target.computer.saved_identification - var/input_message = tgui_input_text(user, "Enter [mime_mode ? "emojis":"a message"]", "NT Messaging[target_name ? " ([target_name])" : ""]", encode = FALSE) - send_message(user, input_message, list(chat)) + var/input_message = tgui_input_text(user, "Enter [mime_mode ? "emojis":"a message"]. Start with # for subtle.", "NT Messaging[target_name ? " ([target_name])" : ""]", max_length = MAX_MESSAGE_LEN, encode = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES + send_message(user, input_message, list(chat), subtle = subtle) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: send_message(user, input_message, list(chat)) /// Helper proc that sends a message to everyone /datum/computer_file/program/messenger/proc/send_message_to_all(mob/living/user, message) @@ -471,7 +471,7 @@ return emoji_parse(message) /// Sends a message to targets via PDA. When sending to everyone, set `everyone` to true so the message is formatted accordingly -/datum/computer_file/program/messenger/proc/send_message(atom/source, message, list/targets, everyone = FALSE) +/datum/computer_file/program/messenger/proc/send_message(atom/source, message, list/targets, everyone = FALSE, subtle = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: /datum/computer_file/program/messenger/proc/send_message(atom/source, message, list/targets, everyone = FALSE) var/mob/living/sender if(isliving(source)) sender = source @@ -479,6 +479,14 @@ if(!message) return FALSE + // BUBBER EDIT ADDITION BEGIN - SUBTLE MESSAGES + // If "subtle" it wont be sent to ghostchats. + // A message is "subtle" if it begins with "#", the below code also removes it from the sent message. + if(findtext(message,"#", 1) == TRUE) + subtle = TRUE + message = copytext(message, 2, 0) + // BUBBER EDIT ADDITION END - SUBTLE MESSAGES + // upgrade the image asset to a permanent key var/photo_asset_key = selected_image @@ -540,11 +548,11 @@ target_chats += target_chat target_messengers += target_messenger - if(!send_message_signal(source, message, target_messengers, photo_asset_key, everyone)) + if(!send_message_signal(source, message, target_messengers, photo_asset_key, everyone, FALSE, null, null, subtle)) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: if(!send_message_signal(source, message, target_messengers, photo_asset_key, everyone)) return FALSE // Log it in our logs - var/datum/pda_message/message_datum = new(message, TRUE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), photo_asset_key, everyone) + var/datum/pda_message/message_datum = new(message, TRUE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), photo_asset_key, everyone, subtle = subtle) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: var/datum/pda_message/message_datum = new(message, TRUE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), photo_asset_key, everyone) for(var/datum/pda_chat/target_chat as anything in target_chats) target_chat.add_message(message_datum, show_in_recents = !everyone) target_chat.unread_messages = 0 @@ -570,7 +578,7 @@ return send_message_signal(sender, message, targets, fake_photo, FALSE, TRUE, fake_name, fake_job) -/datum/computer_file/program/messenger/proc/send_message_signal(atom/source, message, list/datum/computer_file/program/messenger/targets, photo_path = null, everyone = FALSE, rigged = FALSE, fake_name = null, fake_job = null) +/datum/computer_file/program/messenger/proc/send_message_signal(atom/source, message, list/datum/computer_file/program/messenger/targets, photo_path = null, everyone = FALSE, rigged = FALSE, fake_name = null, fake_job = null, subtle = FALSE) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: /datum/computer_file/program/messenger/proc/send_message_signal(atom/source, message, list/datum/computer_file/program/messenger/targets, photo_path = null, everyone = FALSE, rigged = FALSE, fake_name = null, fake_job = null) var/mob/sender if(ismob(source)) sender = source @@ -589,7 +597,7 @@ if(sender) to_chat(sender, span_notice("ERROR: Network unavailable, please try again later.")) if(alert_able && !alert_silenced) - playsound(computer, 'sound/machines/terminal_error.ogg', 15, TRUE) + playsound(computer, 'sound/machines/terminal/terminal_error.ogg', 15, TRUE) return FALSE // used for logging @@ -606,6 +614,7 @@ "everyone" = everyone, "photo" = photo_path, "automated" = FALSE, + "subtle" = subtle, // BUBBER EDIT ADDITION - SUBTLE MESSAGES )) if(rigged) //Will skip the message server and go straight to the hub so it can't be cheesed by disabling the message server machine signal.data["fakename"] = fake_name @@ -620,7 +629,7 @@ if(sender) to_chat(sender, span_notice("ERROR: Server is not responding.")) if(alert_able && !alert_silenced) - playsound(computer, 'sound/machines/terminal_error.ogg', 15, TRUE) + playsound(computer, 'sound/machines/terminal/terminal_error.ogg', 15, TRUE) return FALSE // SKYRAT EDIT BEGIN - PDA messages show a visible message; again! @@ -633,20 +642,36 @@ shell_addendum = "[circuit.parent.get_creator()] " // Log in the talk log - source.log_talk(message, LOG_PDA, tag="[shell_addendum][rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]") + source.log_talk(message, subtle ? LOG_SUBTLER : LOG_PDA, tag="[shell_addendum][rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]") // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: source.log_talk(message, LOG_PDA, tag="[shell_addendum][rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]") if(rigged) log_bomber(sender, "sent a rigged PDA message (Name: [fake_name]. Job: [fake_job]) to [english_list(stringified_targets)] [!is_special_character(sender) ? "(SENT BY NON-ANTAG)" : ""]") + /** BUBBER EDIT CHANGE BEGIN - SUBTLE MESSAGES - Original: + * var/ghost_message = span_game_say("[span_name(signal.format_sender())] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"") + * var/list/message_listeners = GLOB.dead_player_list + GLOB.current_observers_list + * for(var/mob/listener as anything in message_listeners) + * if(!(get_chat_toggles(listener) & CHAT_GHOSTPDA)) + * continue + * to_chat(listener, "[FOLLOW_LINK(listener, source)] [ghost_message]") + */ // Show it to ghosts - var/ghost_message = span_game_say("[span_name(signal.format_sender())] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"") + var/public_message = "[span_name(signal.format_sender())] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"" + var/ghost_message = span_game_say(public_message) var/list/message_listeners = GLOB.dead_player_list + GLOB.current_observers_list - for(var/mob/listener as anything in message_listeners) - if(!(get_chat_toggles(listener) & CHAT_GHOSTPDA)) - continue - to_chat(listener, "[FOLLOW_LINK(listener, source)] [ghost_message]") + if(!subtle) + for(var/mob/listener as anything in message_listeners) + if(!(get_chat_toggles(listener) & CHAT_GHOSTPDA)) + continue + to_chat(listener, "[FOLLOW_LINK(listener, source)] [ghost_message]") + // Log to public log + log_public_file(public_message) if(sender) - to_chat(sender, span_info("PDA message sent to [signal.format_target()]: \"[message]\"")) + if(subtle) + to_chat(sender, span_subtlepda("Subtle PDA message sent to [signal.format_target()]: \"[message]\"")) + else + to_chat(sender, span_info("PDA message sent to [signal.format_target()]: \"[message]\"")) + // BUBBER EDIT CHANGE END if (alert_able && !alert_silenced) computer.send_sound() @@ -666,13 +691,14 @@ var/is_fake_user = is_rigged || is_automated || isnull(signal.data["ref"]) var/fake_name = is_fake_user ? signal.data["fakename"] : null var/fake_job = is_fake_user ? signal.data["fakejob"] : null + var/is_subtle = signal.data["subtle"] // BUBBER EDIT ADDITION - SUBTLE MESSAGES var/sender_ref = signal.data["ref"] // don't create a new chat for rigged messages, make it a one off notif if(!is_rigged) - var/datum/pda_message/message = new(signal.data["message"], FALSE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), signal.data["photo"], signal.data["everyone"]) + var/datum/pda_message/message = new(signal.data["message"], FALSE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), signal.data["photo"], signal.data["everyone"], signal.data["subtle"]) // BUBBER EDIT CHANGE - SUBTLE MESSAGES - Original: var/datum/pda_message/message = new(signal.data["message"], FALSE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), signal.data["photo"], signal.data["everyone"]) chat = find_chat_by_recipient(is_fake_user ? fake_name : sender_ref, is_fake_user) if(!istype(chat)) @@ -717,7 +743,12 @@ var/inbound_message = "[signal.format_message()]" var/photo_message = signal.data["photo"] ? " (Photo Attached)" : "" - to_chat(messaged_mob, span_infoplain("[icon2html(computer, messaged_mob)] PDA message from [sender_title], \"[inbound_message]\"[photo_message] [reply]")) + // BUBBER EDIT CHANGE BEGIN - SUBTLE MESSAGES + if(is_subtle) + to_chat(messaged_mob, span_subtlepda("[icon2html(computer, messaged_mob)] Subtle PDA message from [sender_title], \"[inbound_message]\"[photo_message] [reply]")) + else + to_chat(messaged_mob, span_infoplain("[icon2html(computer, messaged_mob)] PDA message from [sender_title], \"[inbound_message]\"[photo_message] [reply]")) + // BUBBER EDIT CHANGE END - SUBTLE MESSAGES SEND_SIGNAL(computer, COMSIG_COMPUTER_RECEIVED_MESSAGE, sender_title, inbound_message, photo_message) 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 0e69dd4969da7..5285bbc09bd1d 100644 --- a/code/modules/modular_computers/file_system/programs/portrait_printer.dm +++ b/code/modules/modular_computers/file_system/programs/portrait_printer.dm @@ -96,6 +96,6 @@ printed_canvas.no_save = TRUE printed_canvas.update_icon() to_chat(usr, span_notice("You have printed [chosen_portrait.title] onto a new canvas.")) - playsound(computer.physical, 'sound/items/poster_being_created.ogg', 100, TRUE) + playsound(computer.physical, 'sound/items/poster/poster_being_created.ogg', 100, TRUE) #undef CANVAS_PAPER_COST diff --git a/code/modules/modular_computers/file_system/programs/records.dm b/code/modules/modular_computers/file_system/programs/records.dm index 3effdbd5b803d..0aab001db042d 100644 --- a/code/modules/modular_computers/file_system/programs/records.dm +++ b/code/modules/modular_computers/file_system/programs/records.dm @@ -29,6 +29,7 @@ download_access = list(ACCESS_SECURITY, ACCESS_FLAG_COMMAND) program_flags = PROGRAM_ON_NTNET_STORE mode = "security" + detomatix_resistance = DETOMATIX_RESIST_MINOR /datum/computer_file/program/records/proc/GetRecordsReadable() var/list/all_records = list() diff --git a/code/modules/modular_computers/file_system/programs/robocontrol.dm b/code/modules/modular_computers/file_system/programs/robocontrol.dm index 694c84eaeea4d..75c6bb545f289 100644 --- a/code/modules/modular_computers/file_system/programs/robocontrol.dm +++ b/code/modules/modular_computers/file_system/programs/robocontrol.dm @@ -122,7 +122,7 @@ GLOB.manifest.modify(id_card.registered_name, id_card.assignment, id_card.get_trim_assignment()) computer.RemoveID(usr) else - playsound(get_turf(computer.ui_host()) , 'sound/machines/buzz-sigh.ogg', 25, FALSE) + playsound(get_turf(computer.ui_host()) , 'sound/machines/buzz/buzz-sigh.ogg', 25, FALSE) if("changedroneaccess") if(!computer || !computer.computer_id_slot || !id_card) to_chat(current_user, span_notice("No ID found, authorization failed.")) @@ -143,4 +143,4 @@ var/msg = span_boldnotice("NON-DRONE PING: [current_user.name]: [params["ping_type"]] priority alert in [current_area.name]!") _alert_drones(msg, TRUE, current_user) to_chat(current_user, msg) - playsound(src, 'sound/machines/terminal_success.ogg', 15, TRUE) + playsound(src, 'sound/machines/terminal/terminal_success.ogg', 15, TRUE) diff --git a/code/modules/modular_computers/file_system/programs/robotact.dm b/code/modules/modular_computers/file_system/programs/robotact.dm index 1738943b53399..c213790b80a80 100644 --- a/code/modules/modular_computers/file_system/programs/robotact.dm +++ b/code/modules/modular_computers/file_system/programs/robotact.dm @@ -111,7 +111,7 @@ if(!cyborg.cell || !cyborg.cell.charge) cyborg.visible_message(span_notice("The power warning light on [span_name("[cyborg]")] flashes urgently."), \ "You announce you are operating in low power mode.") - playsound(cyborg, 'sound/machines/buzz-two.ogg', 50, FALSE) + playsound(cyborg, 'sound/machines/buzz/buzz-two.ogg', 50, FALSE) if("toggleSensors") cyborg.toggle_sensors() diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index c7a24a6e8b7b9..b38200cfce185 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -198,7 +198,7 @@ camera_ref = null last_camera_turf = null if(!spying) - playsound(computer, 'sound/machines/terminal_off.ogg', 25, FALSE) + playsound(computer, 'sound/machines/terminal/terminal_off.ogg', 25, FALSE) /datum/computer_file/program/secureye/proc/update_active_camera_screen() var/obj/machinery/camera/active_camera = camera_ref?.resolve() diff --git a/code/modules/modular_computers/file_system/programs/statusdisplay.dm b/code/modules/modular_computers/file_system/programs/statusdisplay.dm index fa844215b93b9..a57940d99c1fa 100644 --- a/code/modules/modular_computers/file_system/programs/statusdisplay.dm +++ b/code/modules/modular_computers/file_system/programs/statusdisplay.dm @@ -11,6 +11,7 @@ can_run_on_flags = PROGRAM_ALL program_flags = PROGRAM_REQUIRES_NTNET + detomatix_resistance = DETOMATIX_RESIST_MAJOR var/upper_text = "" var/lower_text = "" diff --git a/code/modules/modular_computers/file_system/programs/virtual_pet.dm b/code/modules/modular_computers/file_system/programs/virtual_pet.dm index 78a9148b013fe..eacdb1323b368 100644 --- a/code/modules/modular_computers/file_system/programs/virtual_pet.dm +++ b/code/modules/modular_computers/file_system/programs/virtual_pet.dm @@ -54,22 +54,47 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) var/static/list/hat_selections = list( /obj/item/clothing/head/hats/tophat = 1, /obj/item/clothing/head/fedora = 1, + /obj/item/clothing/head/soft/fishing_hat = 1, + /obj/item/cigarette/dart = 1, /obj/item/clothing/head/hats/bowler = 2, /obj/item/clothing/head/hats/warden/police = 2, + /obj/item/clothing/head/wizard/tape = 2, + /obj/item/clothing/head/utility/hardhat/cakehat/energycake = 2, + /obj/item/clothing/head/cowboy/bounty = 2, /obj/item/clothing/head/hats/warden/red = 3, /obj/item/clothing/head/hats/caphat = 3, + /obj/item/clothing/head/costume/crown/fancy = 3, + ) + ///hat options that are locked behind achievements + var/static/list/cheevo_hats = list( + /obj/item/clothing/head/soft/fishing_hat = /datum/award/achievement/skill/legendary_fisher, + /obj/item/cigarette/dart = /datum/award/achievement/misc/cigarettes, + /obj/item/clothing/head/wizard/tape = /datum/award/achievement/misc/grand_ritual_finale, + /obj/item/clothing/head/utility/hardhat/cakehat/energycake = /datum/award/achievement/misc/cayenne_disk, + /obj/item/clothing/head/cowboy/bounty = /datum/award/achievement/misc/hot_damn, + /obj/item/clothing/head/costume/crown/fancy = /datum/award/achievement/misc/debt_extinguished, + ) + ///A list of hats that override the hat offsets and transform variable + var/static/list/special_hat_placement = list( + /obj/item/cigarette/dart = list( + "west" = list(2,-1), + "east" = list(-2,-1), + "north" = list(0,0), + "south" = list(0, -3), + "transform" = list(1, 1), + ), ) ///hologram hat we have selected for our pet var/list/selected_hat = list() - ///area we have picked as dropoff location for petfeed - var/area/selected_area ///manage hat offsets for when we turn directions var/static/list/hat_offsets = list( "west" = list(0,1), "east" = list(0,1), "north" = list(1,1), - "south" = list(0,1), + "south" = list(1,1), ) + ///area we have picked as dropoff location for petfeed + var/area/selected_area ///possible colors our pet can have var/static/list/possible_colors= list( "white" = null, //default color state @@ -171,12 +196,11 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) /datum/computer_file/program/virtual_pet/proc/set_hat_offsets(new_dir) var/direction_text = dir2text(new_dir) - var/list/offsets_list = hat_offsets[direction_text] - if(isnull(offsets_list)) - return + var/hat_type = selected_hat["type"] + var/list/offsets_list = special_hat_placement[hat_type]?[direction_text] || hat_offsets[direction_text] var/mutable_appearance/hat_appearance = selected_hat["appearance"] - hat_appearance.pixel_x = offsets_list[1] - hat_appearance.pixel_y = offsets_list[2] + hat_appearance.pixel_w = offsets_list[1] + hat_appearance.pixel_z = offsets_list[2] + selected_hat["worn_offset"] pet.update_appearance(UPDATE_OVERLAYS) ///give our pet his hologram hat @@ -195,10 +219,15 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) if(length(selected_hat)) var/mutable_appearance/our_selected_hat = selected_hat["appearance"] var/mutable_appearance/hat_preview = mutable_appearance(our_selected_hat.icon, our_selected_hat.icon_state) - hat_preview.pixel_y = -9 + hat_preview.pixel_y = -9 + selected_hat["worn_offset"] + var/list/spec_hat = special_hat_placement[selected_hat["type"]]?["south"] + if(spec_hat) + hat_preview.pixel_w += spec_hat[1] + hat_preview.pixel_z += spec_hat[2] + hat_preview.appearance_flags = RESET_COLOR pet_preview.add_overlay(hat_preview) - profile_picture = getFlatIcon(pet_preview) + profile_picture = getFlatIcon(pet_preview, no_anim = TRUE) COOLDOWN_START(src, alter_appearance_cooldown, 10 SECONDS) @@ -281,7 +310,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) level++ grant_level_abilities() pet.ai_controller?.set_blackboard_key(BB_VIRTUAL_PET_LEVEL, level) - playsound(computer.loc, 'sound/items/orbie_level_up.ogg', 50) + playsound(computer.loc, 'sound/mobs/non-humanoids/orbie/orbie_level_up.ogg', 50) to_next_level += (level**2) + 500 SEND_SIGNAL(pet, COMSIG_VIRTUAL_PET_LEVEL_UP, level) //its a signal so different path types of virtual pets can handle leveling up differently announce_global_updates(message = "has reached level [level]!") @@ -312,7 +341,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) GLOB.global_pet_updates.Cut(1,2) GLOB.global_pet_updates += list(message_to_announce) - playsound(computer.loc, 'sound/items/orbie_notification_sound.ogg', 50) + playsound(computer.loc, 'sound/mobs/non-humanoids/orbie/orbie_notification_sound.ogg', 50) /datum/computer_file/program/virtual_pet/proc/remove_pet(datum/source) SIGNAL_HANDLER @@ -344,12 +373,13 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) /datum/computer_file/program/virtual_pet/ui_data(mob/user) var/list/data = list() + var/obj/item/hat_type = selected_hat?["type"] data["currently_summoned"] = (pet.loc != computer) data["selected_area"] = (selected_area ? selected_area.name : "No location set") data["pet_state"] = get_pet_state() data["hunger"] = hunger data["maximum_hunger"] = max_hunger - data["pet_hat"] = (length(selected_hat) ? selected_hat["name"] : "none") + data["pet_hat"] = (hat_type ? initial(hat_type.name) : "none") data["can_reroll"] = COOLDOWN_FINISHED(src, area_reroll) data["can_summon"] = COOLDOWN_FINISHED(src, summon_cooldown) data["can_alter_appearance"] = COOLDOWN_FINISHED(src, alter_appearance_cooldown) @@ -415,9 +445,14 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) for(var/type_index as anything in hat_selections) if(level >= hat_selections[type_index]) var/obj/item/hat = type_index + var/obj/item/hat_name = initial(hat.name) + if(length(SSachievements.achievements)) // The Achievements subsystem is active. + var/datum/award/required_cheevo = cheevo_hats[hat] + if(required_cheevo && !user.client.get_award_status(required_cheevo)) + hat_name = "LOCKED" data["hat_selections"] += list(list( "hat_id" = type_index, - "hat_name" = initial(hat.name), + "hat_name" = hat_name, )) data["possible_colors"] = list() @@ -429,7 +464,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) var/static/list/possible_emotes = list( /datum/emote/flip, - /datum/emote/living/jump, + /datum/emote/jump, /datum/emote/living/shiver, /datum/emote/spin, /datum/emote/silicon/beep, @@ -461,12 +496,22 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) if(isnull(chosen_type)) selected_hat.Cut() - else if((chosen_type in hat_selections)) - selected_hat["name"] = initial(chosen_type.name) - var/mutable_appearance/selected_hat_appearance = mutable_appearance(icon = initial(chosen_type.worn_icon), icon_state = initial(chosen_type.icon_state), layer = ABOVE_ALL_MOB_LAYER) - selected_hat_appearance.transform = selected_hat_appearance.transform.Scale(0.8, 1) - selected_hat["appearance"] = selected_hat_appearance - set_hat_offsets(pet.dir) + else if(hat_selections[chosen_type]) + var/datum/award/required_cheevo = cheevo_hats[chosen_type] + if(length(SSachievements.achievements) && required_cheevo && !ui.user.client.get_award_status(required_cheevo)) + to_chat(ui.user, span_info("This customization requires the \"[span_bold(initial(required_cheevo.name))]\ achievement to be unlocked.")) + else + selected_hat["type"] = chosen_type + var/state_to_use = initial(chosen_type.worn_icon_state) || initial(chosen_type.icon_state) + var/mutable_appearance/selected_hat_appearance = mutable_appearance(initial(chosen_type.worn_icon), state_to_use, appearance_flags = RESET_COLOR) + selected_hat["worn_offset"] = initial(chosen_type.worn_y_offset) + var/list/scale_list = special_hat_placement[chosen_type]?["scale"] + if(scale_list) + selected_hat_appearance.transform = selected_hat_appearance.transform.Scale(scale_list[1], scale_list[2]) + else + selected_hat_appearance.transform = selected_hat_appearance.transform.Scale(0.8, 1) + selected_hat["appearance"] = selected_hat_appearance + set_hat_offsets(pet.dir) var/chosen_color = params["chosen_color"] if(isnull(chosen_color)) @@ -515,7 +560,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) if(!isnull(trick_name)) pet.ai_controller.set_blackboard_key(BB_TRICK_NAME, trick_name) pet.ai_controller.override_blackboard_key(BB_TRICK_SEQUENCE, trick_sequence) - playsound(computer.loc, 'sound/items/orbie_trick_learned.ogg', 50) + playsound(computer.loc, 'sound/mobs/non-humanoids/orbie/orbie_trick_learned.ogg', 50) return TRUE @@ -553,7 +598,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) pet.befriend(our_user) //befriend whoever set us out animate(pet, transform = matrix(), time = 1.5 SECONDS) pet.forceMove(final_turf) - playsound(computer.loc, 'sound/items/orbie_send_out.ogg', 20) + playsound(computer.loc, 'sound/mobs/non-humanoids/orbie/orbie_send_out.ogg', 20) new /obj/effect/temp_visual/guardian/phase(pet.loc) #undef PET_MAX_LEVEL diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm index 601ecc2289261..1f988f50c57ac 100644 --- a/code/modules/movespeed/modifiers/items.dm +++ b/code/modules/movespeed/modifiers/items.dm @@ -3,7 +3,13 @@ movetypes = FLOATING /datum/movespeed_modifier/jetpack/cybernetic - multiplicative_slowdown = -0.5 + multiplicative_slowdown = -0.3 + +/datum/movespeed_modifier/jetpack/full_speed + multiplicative_slowdown = -0.3 + +/datum/movespeed_modifier/jetpack/wings + multiplicative_slowdown = -0.3 /datum/movespeed_modifier/die_of_fate multiplicative_slowdown = 1 diff --git a/code/modules/pai/camera.dm b/code/modules/pai/camera.dm index 319f20e369990..a30601e41547e 100644 --- a/code/modules/pai/camera.dm +++ b/code/modules/pai/camera.dm @@ -6,7 +6,7 @@ var/number = length(stored) picture.picture_name = "Image [number] (taken by [loc.name])" stored[picture] = TRUE - playsound(src, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, TRUE, -3) + playsound(src, pick('sound/items/polaroid/polaroid1.ogg', 'sound/items/polaroid/polaroid2.ogg'), 75, TRUE, -3) balloon_alert(user, "image recorded") /** diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index ccf0bae5f042b..35d707ec0f2ac 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -27,7 +27,6 @@ update_appearance() SSpai.pai_card_list += src ADD_TRAIT(src, TRAIT_CASTABLE_LOC, INNATE_TRAIT) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /obj/item/pai_card/attackby(obj/item/used, mob/user, params) if(pai && istype(used, /obj/item/encryptionkey)) @@ -71,8 +70,8 @@ emotion_icon = initial(emotion_icon) update_appearance() -/obj/item/pai_card/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/item/pai_card/on_saboteur(datum/source, disrupt_duration) + . = ..() if(pai) return pai.on_saboteur(source, disrupt_duration) diff --git a/code/modules/pai/door_jack.dm b/code/modules/pai/door_jack.dm index 36220ecfaced8..cd8073a9f2c74 100644 --- a/code/modules/pai/door_jack.dm +++ b/code/modules/pai/door_jack.dm @@ -107,7 +107,7 @@ if(!hacking_cable.hacking_machine) balloon_alert(src, "nothing connected") return FALSE - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 50, TRUE) + playsound(src, 'sound/machines/airlock/airlock_alien_prying.ogg', 50, TRUE) balloon_alert(src, "overriding...") // Now begin hacking if(!do_after(src, 15 SECONDS, hacking_cable.hacking_machine, timed_action_flags = NONE, progress = TRUE)) diff --git a/code/modules/pai/hud.dm b/code/modules/pai/hud.dm index b104c7b90eab4..77bcafefc82d2 100644 --- a/code/modules/pai/hud.dm +++ b/code/modules/pai/hud.dm @@ -5,7 +5,7 @@ var/required_software /atom/movable/screen/pai/Click() - if(isobserver(usr) || usr.incapacitated()) + if(isobserver(usr) || usr.incapacitated) return FALSE var/mob/living/silicon/pai/user = usr if(required_software && !user.installed_software.Find(required_software)) diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index 83adc05919a11..8df009c858894 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -166,6 +166,17 @@ card = null return ..() +// Need to override parent here because the message we dispatch is turf-based, not based on the location of the object because that could be fuckin anywhere +/mob/living/silicon/pai/send_applicable_messages() + var/turf/location = get_turf(src) + location.visible_message(span_danger(get_visible_suicide_message()), null, span_hear(get_blind_suicide_message())) // null in the second arg here because we're sending from the turf + +/mob/living/silicon/pai/get_visible_suicide_message() + return "[src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"" + +/mob/living/silicon/pai/get_blind_suicide_message() + return "[src] bleeps electronically." + /mob/living/silicon/pai/emag_act(mob/user) return handle_emag(user) @@ -231,7 +242,11 @@ RegisterSignal(src, COMSIG_LIVING_CULT_SACRIFICED, PROC_REF(on_cult_sacrificed)) RegisterSignals(src, list(COMSIG_LIVING_ADJUST_BRUTE_DAMAGE, COMSIG_LIVING_ADJUST_BURN_DAMAGE), PROC_REF(on_shell_damaged)) RegisterSignal(src, COMSIG_LIVING_ADJUST_STAMINA_DAMAGE, PROC_REF(on_shell_weakened)) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) + +/mob/living/silicon/pai/create_modularInterface() + if(!modularInterface) + modularInterface = new /obj/item/modular_computer/pda/silicon/pai(src) + return ..() /mob/living/silicon/pai/make_laws() laws = new /datum/ai_laws/pai() @@ -252,7 +267,7 @@ return radio.screwdriver_act(user, tool) /mob/living/silicon/pai/updatehealth() - if(status_flags & GODMODE) + if(HAS_TRAIT(src, TRAIT_GODMODE)) return set_health(maxHealth - getBruteLoss() - getFireLoss()) update_stat() @@ -345,11 +360,11 @@ to_chat(src, span_danger("WARN: Holochasis range restrictions disabled.")) return TRUE -/mob/living/silicon/pai/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/mob/living/silicon/pai/on_saboteur(datum/source, disrupt_duration) + . = ..() set_silence_if_lower(disrupt_duration) balloon_alert(src, "muted!") - return COMSIG_SABOTEUR_SUCCESS + return TRUE /** * Resets the pAI and any emagged status. @@ -400,7 +415,13 @@ if(!master_ref) balloon_alert(user, "access denied: no master") return FALSE - var/new_laws = tgui_input_text(user, "Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", laws.supplied[1], 300) + var/new_laws = tgui_input_text( + user, + "Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", + "pAI Directive Configuration", + laws.supplied[1], + max_length = 300, + ) if(!new_laws || !master_ref) return FALSE add_supplied_law(0, new_laws) @@ -450,7 +471,7 @@ to_chat(src, span_userdanger("Your mental faculties leave you.")) to_chat(src, span_rose("oblivion... ")) balloon_alert(user, "personality wiped") - playsound(src, 'sound/machines/buzz-two.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 30, TRUE) qdel(src) return TRUE diff --git a/code/modules/pai/say.dm b/code/modules/pai/say.dm index b35abfe7f9d80..c7ed1a566d883 100644 --- a/code/modules/pai/say.dm +++ b/code/modules/pai/say.dm @@ -1,2 +1,2 @@ /mob/living/silicon/pai/binarycheck() - return radio?.translate_binary + return (radio?.special_channels & RADIO_SPECIAL_BINARY) diff --git a/code/modules/pai/shell.dm b/code/modules/pai/shell.dm index 2ef3cf3d8e2dd..6a8a8e709c82b 100644 --- a/code/modules/pai/shell.dm +++ b/code/modules/pai/shell.dm @@ -30,7 +30,7 @@ * FALSE otherwise. */ /mob/living/silicon/pai/proc/check_menu(atom/anchor) - if(incapacitated()) + if(incapacitated) return FALSE if(get_turf(src) != get_turf(anchor)) return FALSE diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index d94993c2d3880..48e2a9a049f59 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -158,7 +158,7 @@ return data -/obj/item/clipboard/ui_act(action, params) +/obj/item/clipboard/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm index c3964b7292c0b..7c2b96f32175e 100644 --- a/code/modules/paperwork/desk_bell.dm +++ b/code/modules/paperwork/desk_bell.dm @@ -67,7 +67,7 @@ tool.play_tool_sound(src) if(tool.use_tool(src, user, 5 SECONDS)) balloon_alert_to_viewers("repaired") - playsound(user, 'sound/items/change_drill.ogg', 50, vary = TRUE) + playsound(user, 'sound/items/tools/change_drill.ogg', 50, vary = TRUE) broken_ringer = FALSE times_rang = 0 return ITEM_INTERACT_SUCCESS diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index e652b92e97805..6ad571896974f 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -43,6 +43,9 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department /obj/item/card, /obj/item/folder/biscuit, /obj/item/food/breadslice, + /obj/item/food/chapslice, + /obj/item/food/cookie, + /obj/item/food/grilled_chapslice, /obj/item/food/pizza/flatbread, /obj/item/food/pizzaslice, /obj/item/food/root_flatbread, @@ -66,6 +69,27 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department fax_name = "[current_area.name]" return ..() +/obj/machinery/fax/admin/syndicate + name = "Syndicate Fax Machine" + +/obj/machinery/fax/admin/syndicate/Initialize(mapload) + fax_name = "[special_networks["syndicate"]["fax_name"]]" + fax_id = special_networks["syndicate"]["fax_id"] + syndicate_network = TRUE + return ..() + +/obj/machinery/fax/admin + name = "CentCom Fax Machine" + +/obj/machinery/fax/admin/Initialize(mapload) + if (!fax_name) + fax_name = "[GLOB.nt_fax_department]" + if(!fax_id) + fax_id = special_networks["nanotrasen"]["fax_id"] + name = "[fax_name] Fax Machine" + visible_to_network = FALSE + return ..() + /obj/machinery/fax/Initialize(mapload) . = ..() if (!fax_id) @@ -120,7 +144,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department return FALSE if (!(obj_flags & EMAGGED)) obj_flags |= EMAGGED - playsound(src, 'sound/creatures/dog/growl2.ogg', 50, FALSE) + playsound(src, 'sound/mobs/non-humanoids/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.")) return TRUE @@ -146,7 +170,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department /obj/machinery/fax/multitool_act(mob/living/user, obj/item/I) if (panel_open) return - var/new_fax_name = tgui_input_text(user, "Enter a new name for the fax machine.", "New Fax Name", , 128) + var/new_fax_name = tgui_input_text(user, "Enter a new name for the fax machine.", "New Fax Name", max_length = 128) if (!new_fax_name) return ITEM_INTERACT_SUCCESS if (new_fax_name != fax_name) @@ -232,7 +256,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department var/list/data = list() //Record a list of all existing faxes. for(var/obj/machinery/fax/FAX as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/fax)) - if(FAX.fax_id == fax_id || is_centcom_level(FAX.z)) //skip yourself and the centcom fax machine. + if(FAX.fax_id == fax_id) //skip yourself continue var/list/fax_data = list() fax_data["fax_name"] = FAX.fax_name @@ -253,11 +277,13 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department data["fax_history"] = fax_history var/list/special_networks_data = list() for(var/key in special_networks) + if(special_networks[key]["fax_id"] == fax_id) + continue special_networks_data += list(special_networks[key]) data["special_faxes"] = special_networks_data return data -/obj/machinery/fax/ui_act(action, list/params) +/obj/machinery/fax/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -300,7 +326,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department history_add("Send", params["name"]) GLOB.requests.fax_request(usr.client, "sent a fax message from [fax_name]/[fax_id] to [params["name"]]", fax_paper) - to_chat(GLOB.admins, span_adminnotice("[icon2html(src.icon, GLOB.admins)]FAX REQUEST: [ADMIN_FULLMONTY(usr)]: [span_linkify("sent a fax message from [fax_name]/[fax_id][ADMIN_FLW(src)] to [html_encode(params["name"])]")] [ADMIN_SHOW_PAPER(fax_paper)] [ADMIN_PRINT_FAX(fax_paper, fax_name)]"), confidential = TRUE) + to_chat(GLOB.admins, span_adminnotice("[icon2html(src.icon, GLOB.admins)]FAX REQUEST: [ADMIN_FULLMONTY(usr)]: [span_linkify("sent a fax message from [fax_name]/[fax_id][ADMIN_FLW(src)] to [html_encode(params["name"])]")] [ADMIN_SHOW_PAPER(fax_paper)] [ADMIN_PRINT_FAX(fax_paper, fax_name, params["id"])]"), confidential = TRUE) for(var/client/staff as anything in GLOB.admins) if(staff?.prefs.read_preference(/datum/preference/toggle/comms_notification)) SEND_SOUND(staff, sound('sound/misc/server-ready.ogg')) @@ -343,7 +369,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department if (FAX.jammed) do_sparks(5, TRUE, src) balloon_alert(usr, "destination port jammed") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) return FALSE FAX.receive(loaded, fax_name) history_add("Send", FAX.fax_name) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 46b9b8f31fdd2..f297d76b9e0fe 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -56,7 +56,7 @@ icon_state = "[initial(icon_state)]-open" sleep(0.5 SECONDS) icon_state = initial(icon_state) - else if(!user.combat_mode) + else if(!user.combat_mode || (P.item_flags & NOBLUDGEON)) to_chat(user, span_warning("You can't put [P] in [src]!")) else return ..() @@ -83,7 +83,7 @@ return data -/obj/structure/filingcabinet/ui_act(action, params) +/obj/structure/filingcabinet/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 3ee556b3adf4f..50c833ca89fd5 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -106,7 +106,7 @@ return data -/obj/item/folder/ui_act(action, params) +/obj/item/folder/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 65f5a29b40510..938d41da51c28 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -1,5 +1,5 @@ /// A mini-tool used to apply label items onto something to modify its name. -/obj/item/hand_labeler //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE +/obj/item/hand_labeler 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' @@ -116,9 +116,6 @@ labels_left = initial(labels_left) //Yes, it's capped at its initial value return ITEM_INTERACT_SUCCESS -/obj/item/hand_labeler/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) - return !mode - /obj/item/hand_labeler/borg name = "cyborg-hand labeler" @@ -214,7 +211,7 @@ return ..() -/obj/item/label/proc/stick_to_atom(atom/applying_to, stick_px = world.icon_size / 2, stick_py = world.icon_size / 2) +/obj/item/label/proc/stick_to_atom(atom/applying_to, stick_px = ICON_SIZE_X / 2, stick_py = ICON_SIZE_Y / 2) applying_to.AddComponent( \ /datum/component/sticker, \ stickering_atom = src, \ @@ -290,7 +287,7 @@ playsound(sticking_to, 'sound/items/handling/component_pickup.ogg', 20, TRUE) sticking_to.balloon_alert(user, "label renamed") else - playsound(sticking_to, 'sound/items/poster_ripped.ogg', 20, TRUE) + playsound(sticking_to, 'sound/items/poster/poster_ripped.ogg', 20, TRUE) sticking_to.balloon_alert(user, "label removed") qdel(src) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index fe2de7e752030..14202b1bf3b36 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -64,6 +64,9 @@ ///If TRUE, staff can read paper everywhere, but usually from requests panel. var/request_state = FALSE + ///If this paper can be selected as a candidate for a future message in a bottle when spawned outside of mapload. Doesn't affect manually doing that. + var/can_become_message_in_bottle = TRUE + /obj/item/paper/Initialize(mapload) . = ..() pixel_x = base_pixel_x + rand(-9, 9) @@ -74,10 +77,14 @@ update_appearance() + if(can_become_message_in_bottle && !mapload && prob(MESSAGE_BOTTLE_CHANCE)) + LAZYADD(SSpersistence.queued_message_bottles, src) + /obj/item/paper/Destroy() - . = ..() camera_holder = null clear_paper() + LAZYREMOVE(SSpersistence.queued_message_bottles, src) + return ..() /// Determines whether this paper has been written or stamped to. /obj/item/paper/proc/is_empty() @@ -306,7 +313,7 @@ set category = "Object" set src in usr - if(!usr.can_read(src) || usr.is_blind() || usr.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB) || (isobserver(usr) && !isAdminGhostAI(usr))) + if(!usr.can_read(src) || usr.is_blind() || INCAPACITATED_IGNORING(usr, INCAPABLE_RESTRAINTS|INCAPABLE_GRAB) || (isobserver(usr) && !isAdminGhostAI(usr))) return if(ishuman(usr)) var/mob/living/carbon/human/H = usr @@ -351,7 +358,7 @@ return UI_UPDATE if(!in_range(user, src) && !isobserver(user)) return UI_CLOSE - if(user.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB) || (isobserver(user) && !isAdminGhostAI(user))) + if(INCAPACITATED_IGNORING(user, INCAPABLE_RESTRAINTS|INCAPABLE_GRAB) || (isobserver(user) && !isAdminGhostAI(user))) return UI_UPDATE // Even harder to read if your blind...braile? humm // .. or if you cannot read @@ -527,22 +534,10 @@ static_data["user_name"] = user.real_name - static_data["raw_text_input"] = list() - for(var/datum/paper_input/text_input as anything in raw_text_inputs) - static_data["raw_text_input"] += list(text_input.to_list()) - - static_data["raw_field_input"] = list() - for(var/datum/paper_field/field_input as anything in raw_field_input_data) - static_data["raw_field_input"] += list(field_input.to_list()) - - static_data["raw_stamp_input"] = list() - for(var/datum/paper_stamp/stamp_input as anything in raw_stamp_data) - static_data["raw_stamp_input"] += list(stamp_input.to_list()) + static_data += convert_to_data() static_data["max_length"] = MAX_PAPER_LENGTH static_data["max_input_field_length"] = MAX_PAPER_INPUT_FIELD_LENGTH - static_data["paper_color"] = color ? color : COLOR_WHITE - static_data["paper_name"] = name static_data["default_pen_font"] = PEN_FONT static_data["default_pen_color"] = COLOR_BLACK @@ -550,6 +545,43 @@ return static_data; +/obj/item/paper/proc/convert_to_data() + var/list/data = list() + + data[LIST_PAPER_RAW_TEXT_INPUT] = list() + for(var/datum/paper_input/text_input as anything in raw_text_inputs) + data[LIST_PAPER_RAW_TEXT_INPUT] += list(text_input.to_list()) + + data[LIST_PAPER_RAW_FIELD_INPUT] = list() + for(var/datum/paper_field/field_input as anything in raw_field_input_data) + data[LIST_PAPER_RAW_FIELD_INPUT] += list(field_input.to_list()) + + data[LIST_PAPER_RAW_STAMP_INPUT] = list() + for(var/datum/paper_stamp/stamp_input as anything in raw_stamp_data) + data[LIST_PAPER_RAW_STAMP_INPUT] += list(stamp_input.to_list()) + + data[LIST_PAPER_COLOR] = color ? color : COLOR_WHITE + data[LIST_PAPER_NAME] = name + + return data + +/obj/item/paper/proc/write_from_data(list/data) + for(var/list/input as anything in data[LIST_PAPER_RAW_TEXT_INPUT]) + add_raw_text(input[LIST_PAPER_RAW_TEXT], input[LIST_PAPER_FONT], input[LIST_PAPER_FIELD_COLOR], input[LIST_PAPER_BOLD], input[LIST_PAPER_ADVANCED_HTML]) + + for(var/list/field as anything in data[LIST_PAPER_RAW_FIELD_INPUT]) + var/list/input = field[LIST_PAPER_FIELD_DATA] + add_field_input(field[LIST_PAPER_FIELD_INDEX], input[LIST_PAPER_RAW_TEXT], input[LIST_PAPER_FONT], input[LIST_PAPER_FIELD_COLOR], input[LIST_PAPER_BOLD], field[LIST_PAPER_IS_SIGNATURE]) + + for(var/list/stamp as anything in data[LIST_PAPER_RAW_STAMP_INPUT]) + add_stamp(stamp[LIST_PAPER_CLASS], stamp[LIST_PAPER_STAMP_X], stamp[LIST_PAPER_STAMP_Y], stamp[LIST_PAPER_ROTATION]) + + var/new_color = data[LIST_PAPER_COLOR] + if(new_color != COLOR_WHITE) + add_atom_colour(new_color, FIXED_COLOUR_PRIORITY) + + name = data[LIST_PAPER_NAME] + /obj/item/paper/ui_data(mob/user) var/list/data = list() @@ -753,11 +785,11 @@ /datum/paper_input/proc/to_list() return list( - raw_text = raw_text, - font = font, - color = colour, - bold = bold, - advanced_html = advanced_html, + LIST_PAPER_RAW_TEXT = raw_text, + LIST_PAPER_FONT = font, + LIST_PAPER_FIELD_COLOR = colour, + LIST_PAPER_BOLD = bold, + LIST_PAPER_ADVANCED_HTML = advanced_html, ) /// Returns the raw contents of the input as html, with **ZERO SANITIZATION** @@ -793,10 +825,10 @@ /datum/paper_stamp/proc/to_list() return list( - class = class, - x = stamp_x, - y = stamp_y, - rotation = rotation, + LIST_PAPER_CLASS = class, + LIST_PAPER_STAMP_X = stamp_x, + LIST_PAPER_STAMP_Y = stamp_y, + LIST_PAPER_ROTATION = rotation, ) /// A reference to some data that replaces a modifiable input field at some given index in paper raw input parsing. @@ -818,9 +850,9 @@ /datum/paper_field/proc/to_list() return list( - field_index = field_index, - field_data = field_data.to_list(), - is_signature = is_signature, + LIST_PAPER_FIELD_INDEX = field_index, + LIST_PAPER_FIELD_DATA = field_data.to_list(), + LIST_PAPER_IS_SIGNATURE = is_signature, ) /obj/item/paper/construction diff --git a/code/modules/paperwork/paper_biscuit.dm b/code/modules/paperwork/paper_biscuit.dm index bac859e029f4f..d98eb234c95fb 100644 --- a/code/modules/paperwork/paper_biscuit.dm +++ b/code/modules/paperwork/paper_biscuit.dm @@ -136,7 +136,7 @@ cracked = FALSE has_been_sealed = TRUE contents_hidden = TRUE - playsound(get_turf(user), 'sound/items/duct_tape_snap.ogg', 60) + playsound(get_turf(user), 'sound/items/duct_tape/duct_tape_snap.ogg', 60) icon_state = "[sealed_icon]" update_appearance() diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index 1315ca3a81d23..10aad59001a24 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -163,7 +163,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/papercutter/proc/cut_paper(mob/user) - playsound(src.loc, 'sound/weapons/slash.ogg', 50, TRUE) + playsound(src.loc, 'sound/items/weapons/slash.ogg', 50, TRUE) var/clumsy = (iscarbon(user) && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(cut_self_chance)) to_chat(user, span_userdanger("You neatly cut [stored_paper][clumsy ? "... and your finger in the process!" : "."]")) if(clumsy) diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index fdcf53457c611..7e178addec676 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -102,7 +102,7 @@ /obj/item/paperplane/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(iscarbon(hit_atom) && HAS_TRAIT(hit_atom, TRAIT_PAPER_MASTER)) var/mob/living/carbon/hit_carbon = hit_atom - if(hit_carbon.can_catch_item(TRUE)) + if(hit_carbon.can_catch_item(src, skip_throw_mode_check = TRUE)) hit_carbon.throw_mode_on(THROW_MODE_TOGGLE) . = ..() diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 7be0e3548ad2b..60c6aeb4dfef5 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -327,7 +327,7 @@ . = ..() AddComponent(/datum/component/butchering, \ speed = 6 SECONDS, \ - butcher_sound = 'sound/weapons/blade1.ogg', \ + butcher_sound = 'sound/items/weapons/blade1.ogg', \ ) RegisterSignal(src, COMSIG_DETECTIVE_SCANNED, PROC_REF(on_scan)) @@ -368,14 +368,14 @@ /obj/item/pen/edagger/proc/on_containing_dart_fired(obj/projectile/source) SIGNAL_HANDLER - playsound(source, 'sound/weapons/saberon.ogg', 5, TRUE) + playsound(source, 'sound/items/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) + playsound(new_casing, 'sound/items/weapons/saberoff.ogg', 5, TRUE) /obj/item/pen/edagger/proc/on_containing_dart_embedded(datum/source, obj/item/ammo_casing/new_casing) SIGNAL_HANDLER @@ -384,12 +384,12 @@ /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) + playsound(source, 'sound/items/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) + playsound(source, 'sound/items/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]!"), @@ -432,7 +432,7 @@ if(user) balloon_alert(user, "[hidden_name] [active ? "active" : "concealed"]") - playsound(src, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 5, TRUE) + playsound(src, active ? 'sound/items/weapons/saberon.ogg' : 'sound/items/weapons/saberoff.ogg', 5, TRUE) set_light_on(active) return COMPONENT_NO_DEFAULT_MESSAGE @@ -514,7 +514,7 @@ /obj/item/pen/screwdriver/on_transform(obj/item/source, mob/user, active) if(user) balloon_alert(user, active ? "extended" : "retracted") - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/batonextend.ogg', 50, TRUE) if(!active) tool_behaviour = initial(tool_behaviour) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index b72a232017029..1c54aefa269dc 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -179,7 +179,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) return data -/obj/machinery/photocopier/ui_act(action, list/params) +/obj/machinery/photocopier/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index b4e97615a923a..5b3d4911f522a 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -87,7 +87,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32) if(LAZYLEN(tickets)) current_ticket = tickets[1] current_number++ //Increment the one we're serving. - playsound(src, 'sound/misc/announce_dig.ogg', 50, FALSE) + playsound(src, 'sound/announcer/announcement/announce_dig.ogg', 50, FALSE) say("Now serving [current_ticket]!") if(!(obj_flags & EMAGGED)) current_ticket.audible_message(span_notice("\the [current_ticket] vibrates!"), hearing_distance = SAMETILE_MESSAGE_RANGE) @@ -213,7 +213,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32) if((user_ref in ticket_holders) && !(obj_flags & EMAGGED)) to_chat(user, span_warning("You already have a ticket!")) return - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 100, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 100, FALSE) ticket_number++ to_chat(user, span_notice("You take a ticket from [src], looks like you're number [ticket_number] in queue...")) var/obj/item/ticket_machine_ticket/theirticket = new (get_turf(src), ticket_number) diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 5814750dab168..5e9d8443408d8 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -30,7 +30,6 @@ var/blending = FALSE //lets not take pictures while the previous is still processing! var/see_ghosts = CAMERA_NO_GHOSTS //for the spoop of it var/obj/item/disk/holodisk/disk - var/sound/custom_sound var/silent = FALSE var/picture_size_x = 2 var/picture_size_y = 2 @@ -118,7 +117,7 @@ return FALSE else if(user.client && !(get_turf(target) in get_hear(user.client.view, user))) return FALSE - else if(!(get_turf(target) in get_hear(world.view, user))) + else if(!(get_turf(target) in get_hear(CONFIG_GET(string/default_view), user))) return FALSE else if(isliving(loc)) if(!(get_turf(target) in view(world.view, loc))) @@ -129,6 +128,10 @@ return TRUE /obj/item/camera/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + // Always skip on storage and tables + if(HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) /obj/item/camera/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) @@ -223,8 +226,8 @@ dead_spotted += mob desc += mob.get_photo_description(src) - var/psize_x = (size_x * 2 + 1) * world.icon_size - var/psize_y = (size_y * 2 + 1) * world.icon_size + var/psize_x = (size_x * 2 + 1) * ICON_SIZE_X + var/psize_y = (size_y * 2 + 1) * ICON_SIZE_Y var/icon/get_icon = camera_get_icon(turfs, target_turf, psize_x, psize_y, clone_area, size_x, size_y, (size_x * 2 + 1), (size_y * 2 + 1)) qdel(clone_area) get_icon.Blend("#000", ICON_UNDERLAY) @@ -248,6 +251,9 @@ if(print_picture_on_snap) printpicture(user, picture) + if(!silent) + playsound(loc, pick('sound/items/polaroid/polaroid1.ogg', 'sound/items/polaroid/polaroid2.ogg'), 75, TRUE, -3) + /obj/item/camera/proc/printpicture(mob/user, datum/picture/picture) //Normal camera proc for creating photos pictures_left-- var/obj/item/photo/new_photo = new(get_turf(src), picture) diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm index 64eeb192a2286..90afaaff2ad22 100644 --- a/code/modules/photography/camera/camera_image_capturing.dm +++ b/code/modules/photography/camera/camera_image_capturing.dm @@ -10,7 +10,7 @@ step_y = AM.step_y . = ..() -#define PHYSICAL_POSITION(atom) ((atom.y * world.icon_size) + (atom.pixel_y)) +#define PHYSICAL_POSITION(atom) ((atom.y * ICON_SIZE_Y) + (atom.pixel_y)) /obj/item/camera/proc/camera_get_icon(list/turfs, turf/center, psize_x = 96, psize_y = 96, datum/turf_reservation/clone_area, size_x, size_y, total_x, total_y) var/list/atoms = list() @@ -99,8 +99,8 @@ if(!skip_normal) //these are not clones for(var/atom/A in sorted) - var/xo = (A.x - center.x) * world.icon_size + A.pixel_x + xcomp - var/yo = (A.y - center.y) * world.icon_size + A.pixel_y + ycomp + var/xo = (A.x - center.x) * ICON_SIZE_X + A.pixel_x + xcomp + var/yo = (A.y - center.y) * ICON_SIZE_Y + A.pixel_y + ycomp if(ismovable(A)) var/atom/movable/AM = A xo += AM.step_x @@ -116,9 +116,9 @@ CHECK_TICK continue // Center of the image in X - var/xo = (clone.x - center.x) * world.icon_size + clone.pixel_x + xcomp + clone.step_x + var/xo = (clone.x - center.x) * ICON_SIZE_X + clone.pixel_x + xcomp + clone.step_x // Center of the image in Y - var/yo = (clone.y - center.y) * world.icon_size + clone.pixel_y + ycomp + clone.step_y + var/yo = (clone.y - center.y) * ICON_SIZE_Y + clone.pixel_y + ycomp + clone.step_y if(clone.transform) // getFlatIcon doesn't give a snot about transforms. var/datum/decompose_matrix/decompose = clone.transform.decompose() @@ -142,12 +142,6 @@ res.Blend(img, blendMode2iconMode(clone.blend_mode), xo, yo) CHECK_TICK - if(!silent) - if(istype(custom_sound)) //This is where the camera actually finishes its exposure. - playsound(loc, custom_sound, 75, TRUE, -3) - else - playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, TRUE, -3) - if(wipe_atoms) QDEL_LIST(atoms) else diff --git a/code/modules/photography/camera/other.dm b/code/modules/photography/camera/other.dm index 166517d055fba..149d69252a6ac 100644 --- a/code/modules/photography/camera/other.dm +++ b/code/modules/photography/camera/other.dm @@ -25,7 +25,13 @@ see_ghosts = CAMERA_SEE_GHOSTS_ORBIT /obj/item/camera/detective - name = "Detective's camera" - desc = "A polaroid camera with extra capacity for crime investigations." + name = "detective's camera" + desc = "A silent polaroid camera with extra capacity for crime investigations." + flash_enabled = FALSE + silent = TRUE pictures_max = 30 pictures_left = 30 + +/obj/item/camera/detective/after_picture(mob/user, datum/picture/picture) + . = ..() + user.playsound_local(get_turf(src), pick('sound/items/polaroid/polaroid1.ogg', 'sound/items/polaroid/polaroid2.ogg'), 35, TRUE) diff --git a/code/modules/photography/camera/silicon_camera.dm b/code/modules/photography/camera/silicon_camera.dm index 9cdbee1bc2b7a..fdc390fe0615a 100644 --- a/code/modules/photography/camera/silicon_camera.dm +++ b/code/modules/photography/camera/silicon_camera.dm @@ -7,7 +7,7 @@ /// Checks if we can take a picture at this moment. Returns TRUE if we can, FALSE if we can't. /obj/item/camera/siliconcam/proc/can_take_picture(mob/living/silicon/clicker) - if(clicker.stat != CONSCIOUS || clicker.incapacitated()) + if(clicker.stat != CONSCIOUS || clicker.incapacitated) return FALSE return TRUE @@ -31,11 +31,11 @@ // Trying to turn on camera mode while you have another click intercept active, such as malf abilities if(sound) balloon_alert(user, "can't enable camera mode!") - playsound(user, 'sound/machines/buzz-sigh.ogg', 25, TRUE) + playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 25, TRUE) return if(sound) - playsound(user, 'sound/items/wirecutter.ogg', 50, TRUE) + playsound(user, 'sound/items/tools/wirecutter.ogg', 50, TRUE) balloon_alert(user, "camera mode [user.click_intercept == src ? "activated" : "deactivated"]") /obj/item/camera/siliconcam/proc/selectpicture(mob/user) @@ -80,7 +80,7 @@ picture.picture_name = "Image [number] (taken by [loc.name])" stored[picture] = TRUE balloon_alert(user, "image recorded") - user.playsound_local(get_turf(user), pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 50, TRUE, -3) + user.playsound_local(get_turf(user), pick('sound/items/polaroid/polaroid1.ogg', 'sound/items/polaroid/polaroid2.ogg'), 50, TRUE, -3) /obj/item/camera/siliconcam/robot_camera name = "Cyborg photo camera" @@ -102,7 +102,7 @@ picture.picture_name = "Image [number] (taken by [loc.name])" stored[picture] = TRUE balloon_alert(user, "image recorded and saved locally") - playsound(src, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, TRUE, -3) + playsound(src, pick('sound/items/polaroid/polaroid1.ogg', 'sound/items/polaroid/polaroid2.ogg'), 75, TRUE, -3) /obj/item/camera/siliconcam/robot_camera/selectpicture(mob/living/silicon/robot/user) if(istype(user) && user.connected_ai) diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm index 9efde283e0767..989fbb596c6df 100644 --- a/code/modules/photography/photos/frame.dm +++ b/code/modules/photography/photos/frame.dm @@ -278,6 +278,6 @@ ///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) - if(SSmapping.config.map_path != CUSTOM_MAP_PATH) //skip adminloaded custom maps. - persistence_id = "frame_bar_[SSmapping.config.map_name]" + if(SSmapping.current_map.map_path != CUSTOM_MAP_PATH) //skip adminloaded custom maps. + persistence_id = "frame_bar_[SSmapping.current_map.map_name]" return ..() diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index b009c5b2e7913..e240e94292ddc 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -9,12 +9,21 @@ w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE max_integrity = 50 + drop_sound = 'sound/items/handling/paper_drop.ogg' + pickup_sound = 'sound/items/handling/paper_pickup.ogg' grind_results = list(/datum/reagent/iodine = 4) var/datum/picture/picture var/scribble //Scribble on the back. /obj/item/photo/Initialize(mapload, datum/picture/P, datum_name = TRUE, datum_desc = TRUE) set_picture(P, datum_name, datum_desc, TRUE) + //Photos are quite rarer than papers, so they're more likely to be added to the queue to make things even. + if(!mapload && prob(MESSAGE_BOTTLE_CHANCE * 5) && picture?.id) + LAZYADD(SSpersistence.queued_message_bottles, src) + return ..() + +/obj/item/photo/Destroy() + LAZYREMOVE(SSpersistence.queued_message_bottles, src) return ..() /obj/item/photo/proc/set_picture(datum/picture/P, setname, setdesc, name_override = FALSE) @@ -57,9 +66,9 @@ /obj/item/photo/suicide_act(mob/living/carbon/human/user) user.visible_message(span_suicide("[user] is taking one last look at \the [src]! It looks like [user.p_theyre()] giving in to death!"))//when you wanna look at photo of waifu one last time before you die... if (!ishuman(user) || user.physique == MALE) - playsound(user, 'sound/voice/human/manlaugh1.ogg', 50, TRUE)//EVERY TIME I DO IT MAKES ME LAUGH + playsound(user, 'sound/mobs/humanoids/human/laugh/manlaugh1.ogg', 50, TRUE)//EVERY TIME I DO IT MAKES ME LAUGH else - playsound(user, 'sound/voice/human/womanlaugh.ogg', 50, TRUE) + playsound(user, 'sound/mobs/humanoids/human/laugh/womanlaugh.ogg', 50, TRUE) return OXYLOSS /obj/item/photo/attack_self(mob/user) @@ -104,7 +113,7 @@ var/n_name = tgui_input_text(usr, "What would you like to label the photo?", "Photo Labelling", max_length = MAX_NAME_LEN) //loc.loc check is for making possible renaming photos in clipboards - if(n_name && (loc == usr || loc.loc && loc.loc == usr) && usr.stat == CONSCIOUS && !usr.incapacitated()) + if(n_name && (loc == usr || loc.loc && loc.loc == usr) && usr.stat == CONSCIOUS && !usr.incapacitated) name = "photo[(n_name ? "- '[n_name]'" : null)]" add_fingerprint(usr) diff --git a/code/modules/plumbing/plumbers/acclimator.dm b/code/modules/plumbing/plumbers/acclimator.dm index 014ff8499018d..51300af110b01 100644 --- a/code/modules/plumbing/plumbers/acclimator.dm +++ b/code/modules/plumbing/plumbers/acclimator.dm @@ -88,7 +88,7 @@ data["emptying"] = emptying return data -/obj/machinery/plumbing/acclimator/ui_act(action, params) +/obj/machinery/plumbing/acclimator/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index 050402f79f5af..f1be4f730a114 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -146,7 +146,7 @@ return data -/obj/machinery/plumbing/pill_press/ui_act(action, params) +/obj/machinery/plumbing/pill_press/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/plumbing/plumbers/pumps.dm b/code/modules/plumbing/plumbers/pumps.dm index 79374fcf38c93..5aa1dc707e376 100644 --- a/code/modules/plumbing/plumbers/pumps.dm +++ b/code/modules/plumbing/plumbers/pumps.dm @@ -41,7 +41,7 @@ if(!geyser) //we didnt find one, abort geyserless = TRUE visible_message(span_warning("The [name] makes a sad beep!")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50) return pump(seconds_per_tick) diff --git a/code/modules/plumbing/plumbers/splitters.dm b/code/modules/plumbing/plumbers/splitters.dm index b87a07d694cc4..c2f9216c92b90 100644 --- a/code/modules/plumbing/plumbers/splitters.dm +++ b/code/modules/plumbing/plumbers/splitters.dm @@ -32,7 +32,7 @@ data["max_transfer"] = max_transfer return data -/obj/machinery/plumbing/splitter/ui_act(action, params) +/obj/machinery/plumbing/splitter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/plumbing/plumbers/synthesizer.dm b/code/modules/plumbing/plumbers/synthesizer.dm index 0399ad85f3c04..ed4121d6ad02a 100644 --- a/code/modules/plumbing/plumbers/synthesizer.dm +++ b/code/modules/plumbing/plumbers/synthesizer.dm @@ -89,7 +89,7 @@ .["current_reagent"] = initial(reagent_id.name) -/obj/machinery/plumbing/synthesizer/ui_act(action, params) +/obj/machinery/plumbing/synthesizer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/point/point.dm b/code/modules/point/point.dm index 6e61b1154d59c..ae7d9f78cb91a 100644 --- a/code/modules/point/point.dm +++ b/code/modules/point/point.dm @@ -7,22 +7,30 @@ * * Not intended as a replacement for the mob verb */ -/atom/movable/proc/point_at(atom/pointed_atom) +/atom/movable/proc/point_at(atom/pointed_atom, intentional = FALSE) if(!isturf(loc)) - return + return FALSE if (pointed_atom in src) create_point_bubble(pointed_atom) - return + return FALSE var/turf/tile = get_turf(pointed_atom) if (!tile) - return + return FALSE var/turf/our_tile = get_turf(src) var/obj/visual = new /obj/effect/temp_visual/point(our_tile, invisibility) - animate(visual, pixel_x = (tile.x - our_tile.x) * world.icon_size + pointed_atom.pixel_x, pixel_y = (tile.y - our_tile.y) * world.icon_size + pointed_atom.pixel_y, time = 1.7, easing = EASE_OUT) + SEND_SIGNAL(src, COMSIG_MOVABLE_POINTED, pointed_atom, visual, intentional) + + animate(visual, pixel_x = (tile.x - our_tile.x) * ICON_SIZE_X + pointed_atom.pixel_x, pixel_y = (tile.y - our_tile.y) * ICON_SIZE_Y + pointed_atom.pixel_y, time = 1.7, easing = EASE_OUT) + return TRUE + +/mob/point_at(atom/pointed_atom, intentional = FALSE) + . = ..() + if(.) + face_atom(pointed_atom) /atom/movable/proc/create_point_bubble(atom/pointed_atom) var/mutable_appearance/thought_bubble = mutable_appearance( @@ -109,7 +117,6 @@ if(client && !(pointing_at in view(client.view, src))) return FALSE - point_at(pointing_at) + point_at(pointing_at, TRUE) - SEND_SIGNAL(src, COMSIG_MOB_POINTED, pointing_at) return TRUE diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm index 2752ae3c2bfdf..a40af34fc2a85 100644 --- a/code/modules/power/apc/apc_attack.dm +++ b/code/modules/power/apc/apc_attack.dm @@ -1,3 +1,9 @@ +// Ethereals: +/// How long it takes an ethereal to drain or charge APCs. Also used as a spam limiter. +#define ETHEREAL_APC_DRAIN_TIME (7.5 SECONDS) +/// How much power ethereals gain/drain from APCs. +#define ETHEREAL_APC_POWER_GAIN (0.2 * STANDARD_BATTERY_CHARGE) + /obj/machinery/power/apc/attack_hand_secondary(mob/user, list/modifiers) . = ..() if(!can_interact(user)) @@ -27,7 +33,7 @@ if(!istype(maybe_stomach, /obj/item/organ/internal/stomach/ethereal)) return - var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - APC_POWER_GAIN + var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - ETHEREAL_APC_POWER_GAIN var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach var/obj/item/stock_parts/power_store/stomach_cell = stomach.cell if(!((stomach?.drain_time < world.time) && LAZYACCESS(modifiers, RIGHT_CLICK))) @@ -39,33 +45,33 @@ if(stomach_cell.charge() > charge_limit) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "charge is full!"), alert_timer_duration) return - stomach.drain_time = world.time + APC_DRAIN_TIME + stomach.drain_time = world.time + ETHEREAL_APC_DRAIN_TIME addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "draining power"), alert_timer_duration) - while(do_after(user, APC_DRAIN_TIME, target = src)) + while(do_after(user, ETHEREAL_APC_DRAIN_TIME, target = src)) if(cell.charge <= (cell.maxcharge / 2) || (stomach_cell.charge() > charge_limit)) return balloon_alert(ethereal, "received charge") - stomach.adjust_charge(APC_POWER_GAIN) - cell.use(APC_POWER_GAIN) + stomach.adjust_charge(ETHEREAL_APC_POWER_GAIN) + cell.use(ETHEREAL_APC_POWER_GAIN) return - if(cell.charge >= cell.maxcharge - APC_POWER_GAIN) + if(cell.charge >= cell.maxcharge - ETHEREAL_APC_POWER_GAIN) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "APC can't receive more power!"), alert_timer_duration) return - if(stomach_cell.charge() < APC_POWER_GAIN) + if(stomach_cell.charge() < ETHEREAL_APC_POWER_GAIN) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "charge is too low!"), alert_timer_duration) return - stomach.drain_time = world.time + APC_DRAIN_TIME + stomach.drain_time = world.time + ETHEREAL_APC_DRAIN_TIME addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, balloon_alert), ethereal, "transfering power"), alert_timer_duration) - if(!do_after(user, APC_DRAIN_TIME, target = src)) + if(!do_after(user, ETHEREAL_APC_DRAIN_TIME, target = src)) return - if((cell.charge >= (cell.maxcharge - APC_POWER_GAIN)) || (stomach_cell.charge() < APC_POWER_GAIN)) + if((cell.charge >= (cell.maxcharge - ETHEREAL_APC_POWER_GAIN)) || (stomach_cell.charge() < ETHEREAL_APC_POWER_GAIN)) balloon_alert(ethereal, "can't transfer power!") return if(istype(stomach)) - while(do_after(user, APC_DRAIN_TIME, target = src)) + while(do_after(user, ETHEREAL_APC_DRAIN_TIME, target = src)) balloon_alert(ethereal, "transferred power") - cell.give(-stomach.adjust_charge(-APC_POWER_GAIN)) + cell.give(-stomach.adjust_charge(-ETHEREAL_APC_POWER_GAIN)) else balloon_alert(ethereal, "can't transfer power!") @@ -125,3 +131,6 @@ return TRUE else return FALSE + +#undef ETHEREAL_APC_DRAIN_TIME +#undef ETHEREAL_APC_POWER_GAIN diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 7a487a009b26e..ee4054d13ba79 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -8,9 +8,9 @@ ///Cap for how fast cells charge, as a percentage per second (.01 means cellcharge is capped to 1% per second) #define CHARGELEVEL 0.01 ///Charge percentage at which the lights channel stops working -#define APC_CHANNEL_LIGHT_TRESHOLD 10 //SKYRAT EDIT CHANGE - Original: 15 +#define APC_CHANNEL_LIGHT_TRESHOLD 15 ///Charge percentage at which the equipment channel stops working -#define APC_CHANNEL_EQUIP_TRESHOLD 20 //SKYRAT EDIT CHANGE - Original: 30 +#define APC_CHANNEL_EQUIP_TRESHOLD 30 ///Charge percentage at which the APC icon indicates discharging #define APC_CHANNEL_ALARM_TRESHOLD 75 @@ -223,7 +223,6 @@ register_context() addtimer(CALLBACK(src, PROC_REF(update)), 0.5 SECONDS) RegisterSignal(SSdcs, COMSIG_GLOB_GREY_TIDE, PROC_REF(grey_tide)) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) update_appearance() var/static/list/hovering_mob_typechecks = list( @@ -255,12 +254,11 @@ disconnect_terminal() return ..() -/obj/machinery/power/apc/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER - +/obj/machinery/power/apc/on_saboteur(datum/source, disrupt_duration) + . = ..() disrupt_duration *= 0.1 // so, turns out, failure timer is in seconds, not deciseconds; without this, disruptions last 10 times as long as they probably should energy_fail(disrupt_duration) - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/machinery/power/apc/on_set_is_operational(old_value) update_area_power_usage(!old_value) @@ -422,9 +420,9 @@ say("Remote access detected.[locked ? " Interface unlocked." : ""]") to_chat(remote_control_user, span_danger("[icon2html(src, remote_control_user)] Connected to [src].")) if(locked) - playsound(src, 'sound/machines/terminal_on.ogg', 25, FALSE) + playsound(src, 'sound/machines/terminal/terminal_on.ogg', 25, FALSE) locked = FALSE - playsound(src, 'sound/machines/terminal_alert.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 50, FALSE) update_appearance() /obj/machinery/power/apc/proc/disconnect_remote_access() @@ -434,8 +432,8 @@ locked = TRUE say("Remote access canceled. Interface locked.") to_chat(remote_control_user, span_danger("[icon2html(src, remote_control_user)] Disconnected from [src].")) - playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE) - playsound(src, 'sound/machines/terminal_alert.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 25, FALSE) + playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 50, FALSE) update_appearance() remote_control_user = null @@ -444,16 +442,17 @@ if(!QDELETED(remote_control_user) && user == remote_control_user) . = UI_INTERACTIVE -/obj/machinery/power/apc/ui_act(action, params) +/obj/machinery/power/apc/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() + var/mob/user = ui.user - if(. || !can_use(usr, 1) || (locked && !HAS_SILICON_ACCESS(usr) && !failure_timer && action != "toggle_nightshift")) + if(. || !can_use(user, 1) || (locked && !HAS_SILICON_ACCESS(user) && !failure_timer && action != "toggle_nightshift")) return switch(action) if("lock") - if(HAS_SILICON_ACCESS(usr)) + if(HAS_SILICON_ACCESS(user)) if((obj_flags & EMAGGED) || (machine_stat & (BROKEN|MAINT)) || remote_control_user) - to_chat(usr, span_warning("The APC does not respond to the command!")) + to_chat(user, span_warning("The APC does not respond to the command!")) else locked = !locked update_appearance() @@ -462,10 +461,10 @@ coverlocked = !coverlocked . = TRUE if("breaker") - toggle_breaker(usr) + toggle_breaker(user) . = TRUE if("toggle_nightshift") - toggle_nightshift_lights(usr) + toggle_nightshift_lights(user) . = TRUE if("charge") chargemode = !chargemode @@ -488,17 +487,17 @@ update() . = TRUE if("overload") - if(HAS_SILICON_ACCESS(usr)) + if(HAS_SILICON_ACCESS(user)) overload_lighting() . = TRUE if("hack") - if(get_malf_status(usr)) - malfhack(usr) + if(get_malf_status(user)) + malfhack(user) if("occupy") - if(get_malf_status(usr)) - malfoccupy(usr) + if(get_malf_status(user)) + malfoccupy(user) if("deoccupy") - if(get_malf_status(usr)) + if(get_malf_status(user)) malfvacate() if("reboot") failure_timer = 0 @@ -526,20 +525,24 @@ * This adds up the total static power usage for the apc's area, then draw that power usage from the grid or APC cell. */ /obj/machinery/power/apc/proc/early_process() - if(cell && cell.charge < cell.maxcharge) + if(!QDELETED(cell) && cell.charge < cell.maxcharge) last_charging = charging charging = APC_NOT_CHARGING if(isnull(area)) return var/total_static_energy_usage = 0 - total_static_energy_usage += APC_CHANNEL_IS_ON(lighting) * area.energy_usage[AREA_USAGE_STATIC_LIGHT] - total_static_energy_usage += APC_CHANNEL_IS_ON(equipment) * area.energy_usage[AREA_USAGE_STATIC_EQUIP] - total_static_energy_usage += APC_CHANNEL_IS_ON(environ) * area.energy_usage[AREA_USAGE_STATIC_ENVIRON] + if(operating) + total_static_energy_usage += APC_CHANNEL_IS_ON(lighting) * area.energy_usage[AREA_USAGE_STATIC_LIGHT] + total_static_energy_usage += APC_CHANNEL_IS_ON(equipment) * area.energy_usage[AREA_USAGE_STATIC_EQUIP] + total_static_energy_usage += APC_CHANNEL_IS_ON(environ) * area.energy_usage[AREA_USAGE_STATIC_ENVIRON] area.clear_usage() if(total_static_energy_usage) //Use power from static power users. - draw_energy(total_static_energy_usage) + var/grid_used = min(terminal?.surplus(), total_static_energy_usage) + terminal?.add_load(grid_used) + if(total_static_energy_usage > grid_used && !QDELETED(cell)) + cell.use(total_static_energy_usage - grid_used, force = TRUE) /obj/machinery/power/apc/proc/late_process(seconds_per_tick) if(icon_update_needed) @@ -559,9 +562,15 @@ 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.energy_usage[AREA_USAGE_LIGHT] + area.energy_usage[AREA_USAGE_STATIC_LIGHT] : 0 - lastused_equip = APC_CHANNEL_IS_ON(equipment) ? area.energy_usage[AREA_USAGE_EQUIP] + area.energy_usage[AREA_USAGE_STATIC_EQUIP] : 0 - lastused_environ = APC_CHANNEL_IS_ON(environ) ? area.energy_usage[AREA_USAGE_ENVIRON] + area.energy_usage[AREA_USAGE_STATIC_ENVIRON] : 0 + if(operating) + lastused_light = APC_CHANNEL_IS_ON(lighting) ? area.energy_usage[AREA_USAGE_LIGHT] + area.energy_usage[AREA_USAGE_STATIC_LIGHT] : 0 + lastused_equip = APC_CHANNEL_IS_ON(equipment) ? area.energy_usage[AREA_USAGE_EQUIP] + area.energy_usage[AREA_USAGE_STATIC_EQUIP] : 0 + lastused_environ = APC_CHANNEL_IS_ON(environ) ? area.energy_usage[AREA_USAGE_ENVIRON] + area.energy_usage[AREA_USAGE_STATIC_ENVIRON] : 0 + else + lastused_light = 0 + lastused_equip = 0 + lastused_environ = 0 + lastused_charge = charging == APC_CHARGING ? area.energy_usage[AREA_USAGE_APC_CHARGE] : 0 lastused_total = lastused_light + lastused_equip + lastused_environ + lastused_charge @@ -597,9 +606,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() < APC_CHANNEL_EQUIP_TRESHOLD) - equipment = autoset(equipment, AUTOSET_ON) // SKYRAT EDIT CHANGE - ORIGINAL: AUTOSET_OFF - lighting = autoset(lighting, AUTOSET_OFF) // SKYRAT EDIT CHANGE - ORIGINAL: AUTOSET_ON + else if(cell.percent() < APC_CHANNEL_EQUIP_TRESHOLD) // turn off equipment // BUBBER EDIT COMMENT - Changed to turn off lighting instead + equipment = autoset(equipment, AUTOSET_ON) // BUBBER EDIT CHANGE - Original: equipment = autoset(equipment, AUTOSET_OFF) + lighting = autoset(lighting, AUTOSET_OFF) // BUBBER EDIT CHANGE - Original: lighting = autoset(lighting, AUTOSET_ON) environ = autoset(environ, AUTOSET_ON) alarm_manager.send_alarm(ALARM_POWER) if(!nightshift_lights || (nightshift_lights && !low_power_nightshift_lights)) @@ -692,7 +701,7 @@ /obj/machinery/power/apc/proc/overload_lighting() if(!operating || shorted) return - if(cell && cell.use(0.02 * STANDARD_CELL_CHARGE)) + if(cell && cell.use(0.02 * STANDARD_BATTERY_CHARGE)) INVOKE_ASYNC(src, PROC_REF(break_lights)) /obj/machinery/power/apc/proc/break_lights() @@ -759,21 +768,6 @@ /obj/machinery/power/apc/proc/charge() return cell.charge -/// Draws energy from the connected grid. When there isn't enough surplus energy from the grid, draws the rest of the demand from its cell. Returns the energy used. -/obj/machinery/power/apc/proc/draw_energy(amount) - var/grid_used = min(terminal?.surplus(), amount) - terminal?.add_load(grid_used) - if(QDELETED(cell)) - return grid_used - var/cell_used = 0 - if(amount > grid_used) - cell_used += cell.use(amount - grid_used, force = TRUE) - return grid_used + cell_used - -/// Draws power from the connected grid. When there isn't enough surplus energy from the grid, draws the rest of the demand from its cell. Returns the energy used. -/obj/machinery/power/apc/proc/draw_power(amount) - return draw_energy(power_to_energy(amount)) - /*Power module, used for APC construction*/ /obj/item/electronics/apc name = "power control module" diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm index 1419e12c46be3..3f7d23244ece9 100644 --- a/code/modules/power/apc/apc_malf.dm +++ b/code/modules/power/apc/apc_malf.dm @@ -45,7 +45,7 @@ malf.ShutOffDoomsdayDevice() occupier = malf if (isturf(malf.loc)) // create a deactivated AI core if the AI isn't coming from an emergency mech shunt - malf.linked_core = new /obj/structure/ai_core/deactivated + malf.linked_core = new /obj/structure/ai_core/deactivated(malf.loc) malf.linked_core.remote_ai = malf // note that we do not set the deactivated core's core_mmi.brainmob malf.forceMove(src) // move INTO the APC, not to its tile if(!findtext(occupier.name, "APC Copy")) @@ -57,22 +57,29 @@ disk_pinpointers.switch_mode_to(TRACK_MALF_AI) //Pinpointer will track the shunted AI var/datum/action/innate/core_return/return_action = new return_action.Grant(occupier) + SEND_SIGNAL(src, COMSIG_SILICON_AI_OCCUPY_APC, occupier) + SEND_SIGNAL(occupier, COMSIG_SILICON_AI_OCCUPY_APC, occupier) occupier.cancel_camera() /obj/machinery/power/apc/proc/malfvacate(forced) if(!occupier) return + SEND_SIGNAL(occupier, COMSIG_SILICON_AI_VACATE_APC, occupier) + SEND_SIGNAL(src, COMSIG_SILICON_AI_VACATE_APC, occupier) + if(forced) + occupier.forceMove(drop_location()) + INVOKE_ASYNC(occupier, TYPE_PROC_REF(/mob/living, death)) + occupier.gib(DROP_ALL_REMAINS) + occupier = null + return if(occupier.linked_core) occupier.shunted = FALSE occupier.forceMove(occupier.linked_core.loc) qdel(occupier.linked_core) occupier.cancel_camera() - return - to_chat(occupier, span_danger("Primary core damaged, unable to return core processes.")) - if(forced) - occupier.forceMove(drop_location()) - INVOKE_ASYNC(occupier, TYPE_PROC_REF(/mob/living, death)) - occupier.gib(DROP_ALL_REMAINS) + occupier = null + else + stack_trace("An AI: [occupier] has vacated an APC with no linked core and without being gibbed.") if(!occupier.nuking) //Pinpointers go back to tracking the nuke disk, as long as the AI (somehow) isn't mid-nuking. for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list) @@ -106,10 +113,10 @@ transfer_in_progress = TRUE user.visible_message(span_notice("[user] slots [card] into [src]..."), span_notice("Transfer process initiated. Sending request for AI approval...")) playsound(src, 'sound/machines/click.ogg', 50, TRUE) - SEND_SOUND(occupier, sound('sound/misc/notice2.ogg')) //To alert the AI that someone's trying to card them if they're tabbed out + SEND_SOUND(occupier, sound('sound/announcer/notice/notice2.ogg')) //To alert the AI that someone's trying to card them if they're tabbed out if(tgui_alert(occupier, "[user] is attempting to transfer you to \a [card.name]. Do you consent to this?", "APC Transfer", list("Yes - Transfer Me", "No - Keep Me Here")) == "No - Keep Me Here") to_chat(user, span_danger("AI denied transfer request. Process terminated.")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) transfer_in_progress = FALSE return FALSE if(user.loc != user_turf) diff --git a/code/modules/power/apc/apc_power_proc.dm b/code/modules/power/apc/apc_power_proc.dm index ba60ec723b6a1..2f1182d01a52a 100644 --- a/code/modules/power/apc/apc_power_proc.dm +++ b/code/modules/power/apc/apc_power_proc.dm @@ -30,12 +30,12 @@ area.power_light = (lighting > APC_CHANNEL_AUTO_OFF) area.power_equip = (equipment > APC_CHANNEL_AUTO_OFF) area.power_environ = (environ > APC_CHANNEL_AUTO_OFF) - playsound(src.loc, 'sound/machines/terminal_on.ogg', 50, FALSE) + playsound(src.loc, 'sound/machines/terminal/terminal_on.ogg', 50, FALSE) else area.power_light = FALSE area.power_equip = FALSE area.power_environ = FALSE - playsound(src.loc, 'sound/machines/terminal_off.ogg', 50, FALSE) + playsound(src.loc, 'sound/machines/terminal/terminal_off.ogg', 50, FALSE) area.power_change() /obj/machinery/power/apc/proc/toggle_breaker(mob/user) diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm index 8e4d51a703da6..9d7c008c6165c 100644 --- a/code/modules/power/apc/apc_tool_act.dm +++ b/code/modules/power/apc/apc_tool_act.dm @@ -110,7 +110,7 @@ if(isnull(choice) \ || !user.is_holding(installing_cable) \ || !user.Adjacent(src) \ - || user.incapacitated() \ + || user.incapacitated \ || !can_place_terminal(user, installing_cable, silent = TRUE) \ ) return ITEM_INTERACT_BLOCKING diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index af13cadf36199..d36dc86ea0f28 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -69,7 +69,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri if(avail()) king.apply_damage(10) - playsound(king, 'sound/effects/sparks2.ogg', 100, TRUE) + playsound(king, 'sound/effects/sparks/sparks2.ogg', 100, TRUE) deconstruct() return COMPONENT_RAT_INTERACTED @@ -497,7 +497,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri if(!ISADVANCEDTOOLUSER(user)) to_chat(user, span_warning("You don't have the dexterity to do this!")) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE @@ -577,6 +577,10 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri /obj/item/stack/cable_coil/proc/try_heal_loop(atom/interacting_with, mob/living/user, repeating = FALSE) var/mob/living/carbon/human/attacked_humanoid = interacting_with + var/obj/item/clothing/under/uniform = attacked_humanoid.w_uniform + if(uniform?.repair_sensors(src, user)) + return ITEM_INTERACT_SUCCESS + var/obj/item/bodypart/affecting = attacked_humanoid.get_bodypart(check_zone(user.zone_selected)) if(isnull(affecting) || !IS_ROBOTIC_LIMB(affecting)) return NONE @@ -605,6 +609,8 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri if (use(1) && amount > 0) INVOKE_ASYNC(src, PROC_REF(try_heal_loop), interacting_with, user, TRUE) + return ITEM_INTERACT_SUCCESS + /////////////////////////////////////////////// // Cable laying procedures ////////////////////////////////////////////// @@ -622,7 +628,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri to_chat(user, span_warning("There is no cable left!")) return - if(get_dist(T,user) > 1) + if(get_dist(T,user) > 1) // Too far to_chat(user, span_warning("You can't lay cable at a place that far away!")) return @@ -769,7 +775,7 @@ GLOBAL_LIST(hub_radial_layer_list) if(!ISADVANCEDTOOLUSER(user)) to_chat(user, span_warning("You don't have the dexterity to do this!")) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index a168150c7dac8..addb8cdb6b835 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -20,6 +20,11 @@ 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) +/obj/item/stock_parts/power_store/cell/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_FISHING_BAIT, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_POISONOUS_BAIT, INNATE_TRAIT) //bro is fishing using lithium... + /* Cell variants*/ /obj/item/stock_parts/power_store/cell/empty empty = TRUE diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm index 38354241f9a4b..5b9d983cf1dd6 100644 --- a/code/modules/power/floodlight.dm +++ b/code/modules/power/floodlight.dm @@ -69,33 +69,34 @@ if(state == FLOODLIGHT_NEEDS_SECURING) icon_state = "floodlight_c3" state = FLOODLIGHT_NEEDS_LIGHTS - return TRUE + return ITEM_INTERACT_SUCCESS else if(state == FLOODLIGHT_NEEDS_LIGHTS) icon_state = "floodlight_c2" state = FLOODLIGHT_NEEDS_SECURING - return TRUE - return FALSE + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /obj/structure/floodlight_frame/wrench_act(mob/living/user, obj/item/tool) if(state != FLOODLIGHT_NEEDS_WIRES) - return FALSE + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "deconstructing...") if(!tool.use_tool(src, user, 30, volume=50)) - return TRUE + return ITEM_INTERACT_BLOCKING new /obj/item/stack/sheet/iron(loc, 5) qdel(src) - return TRUE + return ITEM_INTERACT_SUCCESS /obj/structure/floodlight_frame/wirecutter_act(mob/living/user, obj/item/tool) if(state != FLOODLIGHT_NEEDS_SECURING) - return FALSE + return ITEM_INTERACT_BLOCKING icon_state = "floodlight_c1" state = FLOODLIGHT_NEEDS_WIRES new /obj/item/stack/cable_coil(loc, 5) - return TRUE + return ITEM_INTERACT_SUCCESS /obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/stack/cable_coil) && state == FLOODLIGHT_NEEDS_WIRES) @@ -109,8 +110,11 @@ return if(istype(O, /obj/item/light/tube)) + if(state != FLOODLIGHT_NEEDS_LIGHTS) + balloon_alert(user, "construction not completed!") + return var/obj/item/light/tube/L = O - if(state == FLOODLIGHT_NEEDS_LIGHTS && L.status != 2) //Ready for a light tube, and not broken. + if(L.status != LIGHT_BROKEN) // light tube not broken. new /obj/machinery/power/floodlight(loc) qdel(src) qdel(O) @@ -150,7 +154,6 @@ /obj/machinery/power/floodlight/Initialize(mapload) . = ..() RegisterSignal(src, COMSIG_OBJ_PAINTED, TYPE_PROC_REF(/obj/machinery/power/floodlight, on_color_change)) //update light color when color changes - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) register_context() /obj/machinery/power/floodlight/proc/on_color_change(obj/machinery/power/flood_light, mob/user, obj/item/toy/crayon/spraycan/spraycan, is_dark_color) @@ -296,16 +299,16 @@ /obj/machinery/power/floodlight/attack_ai(mob/user) return attack_hand(user) -/obj/machinery/power/floodlight/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/machinery/power/floodlight/on_saboteur(datum/source, disrupt_duration) + . = ..() atom_break(ENERGY) // technically, - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/machinery/power/floodlight/atom_break(damage_flag) . = ..() if(!.) return - playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) + playsound(loc, 'sound/effects/glass/glassbr3.ogg', 100, TRUE) var/obj/structure/floodlight_frame/floodlight_frame = new(loc) floodlight_frame.state = FLOODLIGHT_NEEDS_LIGHTS @@ -315,7 +318,7 @@ qdel(src) /obj/machinery/power/floodlight/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - playsound(src, 'sound/effects/glasshit.ogg', 75, TRUE) + playsound(src, 'sound/effects/glass/glasshit.ogg', 75, TRUE) #undef FLOODLIGHT_OFF #undef FLOODLIGHT_LOW diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 23fc78cc253e6..451eb13cd3cfd 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -289,7 +289,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) return data -/obj/machinery/gravity_generator/main/ui_act(action, params) +/obj/machinery/gravity_generator/main/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -407,7 +407,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) /// Shake everyone on the z level to let them know that gravity was enagaged/disengaged. /obj/machinery/gravity_generator/main/proc/shake_everyone() var/turf/T = get_turf(src) - var/sound/alert_sound = sound('sound/effects/alert.ogg') + var/sound/alert_sound = on ? 'modular_zubbers/sound/machines/gravgen_up.ogg' : 'modular_zubbers/sound/machines/gravgen_down.ogg' // BUBBER EDIT CHANGE - GRAVGEN SOUNDS for(var/mob/mobs as anything in GLOB.mob_list) var/turf/mob_turf = get_turf(mobs) if(!istype(mob_turf)) @@ -417,9 +417,20 @@ GLOBAL_LIST_EMPTY(gravity_generators) if(isliving(mobs)) var/mob/living/grav_update = mobs grav_update.refresh_gravity() + /* BUBBER EDIT CHANGE BEGIN - GRAVGEN SOUNDS - Original: if(mobs.client) shake_camera(mobs, 15, 1) mobs.playsound_local(T, null, 100, 1, 0.5, sound_to_use = alert_sound) + */ + if(mobs.client) + shake_camera(M = mobs, duration = 3.2 SECONDS, strength = 0.5) + mobs.playsound_local( + turf_source = mob_turf, + soundin = alert_sound, + vol = 90, + vary = FALSE, + ) + /* Shut up Skyrat priority announcer //SKYRAT EDIT ADDITON BEGIN if(!SSmapping.level_has_any_trait(z, ZTRAIT_STATION)) // SHUT THE FUCK UP ABANDONED STATIONS, I DON'T CARE return @@ -428,6 +439,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) else priority_announce("A gravity generator has lost its graviton field integrity ballast, artificial gravity is offline.", "Gravity Generator", ANNOUNCER_GRAVGENOFF) //SKYRAT EDIT END + */// BUBBER EDIT CHANGE END - GRAVGEN SOUNDS /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 2914a9edec53f..3903e6ce2ce31 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -116,7 +116,6 @@ // Light projects out backwards from the dir of the light set_light(l_dir = REVERSE_DIR(dir)) RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) AddElement(/datum/element/atmos_sensitive, mapload) AddElement(/datum/element/contextual_screentip_bare_hands, rmb_text = "Remove bulb") if(break_if_moved) @@ -492,19 +491,19 @@ if(BRUTE) switch(status) if(LIGHT_EMPTY) - playsound(loc, 'sound/weapons/smash.ogg', 50, TRUE) + playsound(loc, 'sound/items/weapons/smash.ogg', 50, TRUE) if(LIGHT_BROKEN) playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, TRUE) else - playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE) + playsound(loc, 'sound/effects/glass/glasshit.ogg', 90, TRUE) if(BURN) - playsound(loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 100, TRUE) // 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() - return !local_area.lightswitch && local_area.power_light || flickering || constant_flickering //SKYRAT EDIT CHANGE - ORIGINAL : return !local_area.lightswitch && local_area.power_light || flickering + return !local_area.lightswitch && local_area.power_light || flickering // returns whether this light has power // true if area has power and lightswitch is on @@ -561,7 +560,7 @@ on = (status == LIGHT_OK) else on = FALSE - update(FALSE, TRUE) // SKYRAT EDIT CHANGE + update(FALSE, TRUE) //SKYRAT EDIT CHANGE . = TRUE //did we actually flicker? flickering = FALSE @@ -690,7 +689,7 @@ if(!skip_sound_and_sparks) if(status == LIGHT_OK || status == LIGHT_BURNED) - playsound(loc, 'sound/effects/glasshit.ogg', 75, TRUE) + playsound(loc, 'sound/effects/glass/glasshit.ogg', 75, TRUE) if(on) do_sparks(3, TRUE, src) status = LIGHT_BROKEN @@ -729,17 +728,13 @@ /obj/machinery/light/proc/on_light_eater(obj/machinery/light/source, datum/light_eater) SIGNAL_HANDLER - . = COMPONENT_BLOCK_LIGHT_EATER - if(status == LIGHT_EMPTY) - return - var/obj/item/light/tube = drop_light_tube() - tube?.burn() - return + break_light_tube() + return COMPONENT_BLOCK_LIGHT_EATER -/obj/machinery/light/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/machinery/light/on_saboteur(datum/source, disrupt_duration) + . = ..() break_light_tube() - return COMSIG_SABOTEUR_SUCCESS + return TRUE /obj/machinery/light/proc/grey_tide(datum/source, list/grey_tide_areas) SIGNAL_HANDLER diff --git a/code/modules/power/lighting/light_items.dm b/code/modules/power/lighting/light_items.dm index 5e9df6ee432ee..357507d0aa4f9 100644 --- a/code/modules/power/lighting/light_items.dm +++ b/code/modules/power/lighting/light_items.dm @@ -135,7 +135,7 @@ status = LIGHT_BROKEN force = 5 sharpness = SHARP_POINTY - playsound(loc, 'sound/effects/glasshit.ogg', 75, TRUE) + playsound(loc, 'sound/effects/glass/glasshit.ogg', 75, TRUE) if(length(reagents.reagent_list)) visible_message(span_danger("The contents of [src] splash onto you as you step on it!"),span_hear("You feel the contents of [src] splash onto you as you step on it!.")) reagents.expose(target, TOUCH) diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm index 4c91301978940..4700004904796 100644 --- a/code/modules/power/pipecleaners.dm +++ b/code/modules/power/pipecleaners.dm @@ -233,7 +233,7 @@ By design, d1 is the smallest direction and d2 is the highest return FALSE if(!user.is_holding(src)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 715a1a118c93d..e27ea98f8ca5f 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -246,7 +246,7 @@ data["current_heat"] = current_heat . = data -/obj/machinery/power/port_gen/pacman/ui_act(action, params) +/obj/machinery/power/port_gen/pacman/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index c31870f2ad080..3fb98970ba4d6 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -167,7 +167,7 @@ return amount //Shuttles get free power, don't ask why var/obj/machinery/power/apc/local_apc = home.apc - if(isnull(local_apc)) + if(isnull(local_apc) || !local_apc.operating) return FALSE // Surplus from the grid. @@ -202,7 +202,7 @@ return amount var/obj/machinery/power/apc/my_apc = my_area.apc - if(isnull(my_apc) || QDELETED(my_apc.cell)) + if(isnull(my_apc) || !my_apc.operating || QDELETED(my_apc.cell)) return FALSE return my_apc.cell.use(amount, force = force) @@ -228,8 +228,9 @@ return amount //Shuttles get free power, don't ask why var/obj/machinery/power/apc/local_apc = home.apc - if(!local_apc) + if(isnull(local_apc) || !local_apc.operating) return FALSE + var/surplus = local_apc.surplus() if(surplus <= 0) //I don't know if powernet surplus can ever end up negative, but I'm just gonna failsafe it return FALSE diff --git a/code/modules/power/power_store.dm b/code/modules/power/power_store.dm index d1118b929ed0b..5756cbc8ff2bd 100644 --- a/code/modules/power/power_store.dm +++ b/code/modules/power/power_store.dm @@ -266,7 +266,7 @@ if(!eating_success || QDELETED(src) || charge == 0) user.visible_message(span_suicide("[user] chickens out!")) return SHAME - playsound(user, 'sound/effects/sparks1.ogg', charge / maxcharge) + playsound(user, 'sound/effects/sparks/sparks1.ogg', charge / maxcharge) var/damage = charge / (1 KILO JOULES) user.electrocute_act(damage, src, 1, SHOCK_IGNORE_IMMUNITY|SHOCK_DELAY_STUN|SHOCK_NOGLOVES) charge = 0 @@ -284,7 +284,7 @@ return user.dropItemToGround(src) user.dust(just_ash = TRUE) - playsound(src, 'sound/magic/lightningshock.ogg', 50, TRUE, 10) + playsound(src, 'sound/effects/magic/lightningshock.ogg', 50, TRUE, 10) tesla_zap(source = src, zap_range = 10, power = discharged_energy) /obj/item/stock_parts/power_store/attack_self(mob/user) @@ -311,7 +311,7 @@ if((charge < CELL_POWER_DRAIN) || (stomach_cell.charge() > charge_limit)) return if(istype(stomach)) - to_chat(H, span_purple("You receive some charge from [src], wasting some in the process.")) // SKYRAT EDIT CHANGE - Ethereal Rework 2024 - Original: to_chat(H, span_notice("You receive some charge from [src], wasting some in the process.")) + to_chat(H, span_notice("You receive some charge from [src], wasting some in the process.")) stomach.adjust_charge(CELL_POWER_GAIN) charge -= CELL_POWER_DRAIN //you waste way more than you receive, so that ethereals cant just steal one cell and forget about hunger else diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index 657263b3de415..dff4a732b9312 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -69,7 +69,7 @@ going_kaboom = TRUE visible_message(span_danger("\The [src] lets out a shower of sparks as it starts to lose stability!"),\ span_hear("You hear a loud electrical crack!")) - playsound(src.loc, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) + playsound(src.loc, 'sound/effects/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) tesla_zap(source = src, zap_range = 5, power = power_gen * 20) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), src, 2, 3, 4, null, 8), 10 SECONDS) // Not a normal explosion. diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 52f40537144e6..22682471d1359 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 OVERRIDDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/machines/engine/singularity.dmi' icon_state = "Contain_F" density = FALSE move_resist = INFINITY diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 414baedec347e..9d8e8413b17db 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -40,7 +40,7 @@ ///What projectile type are we shooting? var/projectile_type = /obj/projectile/beam/emitter/hitscan ///What's the projectile sound? - var/projectile_sound = 'sound/weapons/emitter.ogg' + var/projectile_sound = 'sound/items/weapons/emitter.ogg' ///Sparks emitted with every shot var/datum/effect_system/spark_spread/sparks ///Stores the type of gun we are using inside the emitter @@ -353,7 +353,7 @@ 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 + return if(!user.transferItemToLoc(energy_gun, src)) return gun = energy_gun @@ -409,7 +409,7 @@ //BUCKLE HOOKS /obj/machinery/power/emitter/prototype/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE) - playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(src,'sound/vehicles/mecha/mechmove01.ogg', 50, TRUE) manual = FALSE for(var/obj/item/item in buckled_mob.held_items) if(istype(item, /obj/item/turret_control)) @@ -423,14 +423,14 @@ . = ..() /obj/machinery/power/emitter/prototype/user_buckle_mob(mob/living/buckled_mob, mob/user, check_loc = TRUE) - if(user.incapacitated() || !istype(user)) + if(user.incapacitated || !istype(user)) return for(var/atom/movable/atom in get_turf(src)) if(atom.density && (atom != src && atom != buckled_mob)) return buckled_mob.forceMove(get_turf(src)) ..() - playsound(src, 'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(src, 'sound/vehicles/mecha/mechmove01.ogg', 50, TRUE) buckled_mob.pixel_y = 14 layer = 4.1 if(buckled_mob.client) @@ -463,7 +463,7 @@ /datum/action/innate/proto_emitter/firing/Activate() if(proto_emitter.manual) - playsound(proto_emitter,'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(proto_emitter,'sound/vehicles/mecha/mechmove01.ogg', 50, TRUE) proto_emitter.manual = FALSE name = "Switch to Manual Firing" desc = "The emitter will only fire on your command and at your designated target" @@ -473,7 +473,7 @@ qdel(item) build_all_button_icons() return - playsound(proto_emitter,'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(proto_emitter,'sound/vehicles/mecha/mechmove01.ogg', 50, TRUE) name = "Switch to Automatic Firing" desc = "Emitters will switch to periodic firing at your last target" button_icon_state = "mech_zoom_off" @@ -506,6 +506,8 @@ ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) /obj/item/turret_control/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return NONE return ranged_interact_with_atom(interacting_with, user, modifiers) /obj/item/turret_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) @@ -553,7 +555,7 @@ emitter.fire_beam(user) delay = world.time + 10 else if (emitter.charge < 10) - playsound(src,'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src,'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return ITEM_INTERACT_SUCCESS /obj/machinery/power/emitter/ctf diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 73801e0d7d01a..4859bb547abaa 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -68,7 +68,7 @@ )) send_to_playing_players(span_narsie("NAR'SIE HAS RISEN")) - sound_to_playing_players('sound/creatures/narsie_rises.ogg') + sound_to_playing_players('sound/music/antag/bloodcult/narsie_rises.ogg') var/area/area = get_area(src) if(area) @@ -124,7 +124,7 @@ summon_objective.killed = TRUE 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) + sound_to_playing_players('sound/effects/magic/demon_dies.ogg', 50) /obj/narsie/vv_get_dropdown() . = ..() @@ -253,21 +253,21 @@ ///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.","[command_name()] 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/announcer/notice/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( 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', + sound = 'sound/announcer/alarm/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.","[command_name()] 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/announcer/notice/notice1.ogg') GLOB.cult_narsie = null addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), CULT_FAILURE_NARSIE_KILLED), 2 SECONDS) return @@ -284,14 +284,14 @@ ///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!","[command_name()] Higher Dimensional Affairs", 'sound/misc/notice1.ogg') + priority_announce("Normalization detected! Abort the solution package!","[command_name()] Higher Dimensional Affairs", 'sound/announcer/notice/notice1.ogg') SSshuttle.clearHostileEnvironment(GLOB.cult_narsie) GLOB.cult_narsie = null addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_last_second_win)), 2 SECONDS) return if(GLOB.cult_narsie.resolved == FALSE) GLOB.cult_narsie.resolved = TRUE - sound_to_playing_players('sound/machines/alarm.ogg') + sound_to_playing_players('sound/announcer/alarm/nuke_alarm.ogg', 70) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper)), 12 SECONDS) ///Called only if the crew managed to destroy narsie at the very last second for [/proc/begin_the_end()] diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index e73b2cbf54b27..55b3063831b6b 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -40,12 +40,15 @@ var/output_level_max = 200 KILO WATTS // cap on output_level var/output_used = 0 // amount of power actually outputted. may be less than output_level if the powernet returns excess power + /// does this SMES show its input/output lights? + var/show_display_lights = TRUE + var/obj/machinery/power/terminal/terminal = null /obj/machinery/power/smes/examine(user) . = ..() if(!terminal) - . += span_warning("This SMES has no power terminal!") + . += span_warning("This [src] has no power terminal!") /obj/machinery/power/smes/Initialize(mapload) . = ..() @@ -70,15 +73,7 @@ var/new_charge = 0 for(var/datum/stock_part/capacitor/capacitor in component_parts) // SKYRAT EDIT CHANGE START - Original: power_coefficient += capacitor.tier - switch(capacitor.tier) - if(1) - power_coefficient = 1 - if(2) - power_coefficient = 2 - if(3) - power_coefficient = 4 - else - power_coefficient = 8 + power_coefficient = 2 ** (capacitor.tier - 1) // SKYRAT EDIT CHANGE END input_level_max = initial(input_level_max) * power_coefficient output_level_max = initial(output_level_max) * power_coefficient @@ -92,20 +87,32 @@ /obj/machinery/power/smes/should_have_node() return TRUE +// adapted from APC item interacts for cable act handling +/obj/machinery/power/smes/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = NONE + if(istype(tool, /obj/item/stack/cable_coil)) + . = cable_act(user, tool, LAZYACCESS(modifiers, RIGHT_CLICK)) + if(.) + return . + return . + /obj/machinery/power/smes/cable_layer_act(mob/living/user, obj/item/tool) if(!QDELETED(terminal)) balloon_alert(user, "cut the terminal first!") return ITEM_INTERACT_BLOCKING return ..() -/obj/machinery/power/smes/attackby(obj/item/item, mob/user, params) - //opening using screwdriver - if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), item)) +//opening using screwdriver +/obj/machinery/power/smes/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), tool)) update_appearance() - return + return ITEM_INTERACT_SUCCESS - //changing direction using wrench - if(default_change_direction_wrench(user, item)) +//changing direction using wrench +/obj/machinery/power/smes/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_change_direction_wrench(user, tool)) terminal = null var/turf/turf = get_step(src, dir) for(var/obj/machinery/power/terminal/term in turf) @@ -116,62 +123,59 @@ break if(!terminal) to_chat(user, span_alert("No power terminal found.")) - return + return ITEM_INTERACT_SUCCESS set_machine_stat(machine_stat & ~BROKEN) update_appearance() - return + return ITEM_INTERACT_SUCCESS - //building and linking a terminal - if(istype(item, /obj/item/stack/cable_coil)) - if(!can_place_terminal(user, item, silent = FALSE)) - return - - var/terminal_cable_layer - if(LAZYACCESS(params2list(params), RIGHT_CLICK)) - var/choice = tgui_input_list(user, "Select Power Input Cable Layer", "Select Cable Layer", GLOB.cable_name_to_layer) - if(isnull(choice) \ - || !user.is_holding(item) \ - || !user.Adjacent(src) \ - || user.incapacitated() \ - || !can_place_terminal(user, item, silent = TRUE) \ - ) - return - terminal_cable_layer = GLOB.cable_name_to_layer[choice] - - user.visible_message(span_notice("[user.name] starts adding cables to [src].")) - balloon_alert(user, "adding cables...") - playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) - - if(!do_after(user, 2 SECONDS, target = src)) - return - if(!can_place_terminal(user, item, silent = TRUE)) - return - var/obj/item/stack/cable_coil/cable = item - var/turf/turf = get_turf(user) - var/obj/structure/cable/connected_cable = turf.get_cable_node(terminal_cable_layer) //get the connecting node cable, if there's one - if (prob(50) && electrocute_mob(user, connected_cable, connected_cable, 1, TRUE)) //animate the electrocution if uncautious and unlucky - do_sparks(5, TRUE, src) - return - cable.use(10) - user.visible_message(span_notice("[user.name] adds cables to [src]")) - balloon_alert(user, "cables added") - //build the terminal and link it to the network - make_terminal(turf, terminal_cable_layer) - terminal.connect_to_network() - connect_to_network() +//building and linking a terminal +/obj/machinery/power/smes/proc/cable_act(mob/living/user, obj/item/stack/cable_coil/installing_cable, is_right_clicking) + . = ITEM_INTERACT_BLOCKING + if(!can_place_terminal(user, installing_cable, silent = FALSE)) + return ITEM_INTERACT_BLOCKING + var/terminal_cable_layer + if(is_right_clicking) + var/choice = tgui_input_list(user, "Select Power Input Cable Layer", "Select Cable Layer", GLOB.cable_name_to_layer) + if(isnull(choice) \ + || !user.is_holding(installing_cable) \ + || !user.Adjacent(src) \ + || user.incapacitated \ + || !can_place_terminal(user, installing_cable, silent = TRUE) \ + ) + return ITEM_INTERACT_BLOCKING + terminal_cable_layer = GLOB.cable_name_to_layer[choice] + user.visible_message(span_notice("[user.name] starts adding cables to [src].")) + balloon_alert(user, "adding cables...") + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) + + if(!do_after(user, 2 SECONDS, target = src)) + return ITEM_INTERACT_BLOCKING + if(!can_place_terminal(user, installing_cable, silent = TRUE)) + return ITEM_INTERACT_BLOCKING + var/obj/item/stack/cable_coil/cable = installing_cable + var/turf/turf = get_turf(user) + var/obj/structure/cable/connected_cable = turf.get_cable_node(terminal_cable_layer) //get the connecting node cable, if there's one + if (prob(50) && electrocute_mob(user, connected_cable, connected_cable, 1, TRUE)) //animate the electrocution if uncautious and unlucky + do_sparks(5, TRUE, src) + return ITEM_INTERACT_BLOCKING + cable.use(10) + user.visible_message(span_notice("[user.name] adds cables to [src].")) + balloon_alert(user, "cables added") + //build the terminal and link it to the network + make_terminal(turf, terminal_cable_layer) + terminal.connect_to_network() + return ITEM_INTERACT_SUCCESS + +//crowbarring it! +/obj/machinery/power/smes/crowbar_act(mob/living/user, obj/item/tool) + if(!panel_open) return - - //crowbarring it ! var/turf/turf = get_turf(src) - if(default_deconstruction_crowbar(item)) + if(default_deconstruction_crowbar(tool)) message_admins("[src] has been deconstructed by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(turf)].") user.log_message("deconstructed [src]", LOG_GAME) investigate_log("deconstructed by [key_name(user)] at [AREACOORD(src)].", INVESTIGATE_ENGINE) return - else if(panel_open && item.tool_behaviour == TOOL_CROWBAR) - return - - return ..() /// Checks if we're in a valid state to place a terminal /obj/machinery/power/smes/proc/can_place_terminal(mob/living/user, obj/item/stack/cable_coil/installing_cable, silent = TRUE) @@ -208,7 +212,7 @@ /obj/machinery/power/smes/default_deconstruction_crowbar(obj/item/crowbar/crowbar) if(istype(crowbar) && terminal) - to_chat(usr, span_warning("You must first remove the power terminal!")) + balloon_alert(usr, "remove the power terminal!") return FALSE return ..() @@ -242,24 +246,31 @@ terminal = null atom_break() +/// is this SMES in a suitable state to display overlays? +/obj/machinery/power/smes/proc/display_ready() + if(machine_stat & BROKEN) + return FALSE + if(panel_open) + return FALSE + return TRUE /obj/machinery/power/smes/update_overlays() . = ..() - if(machine_stat & BROKEN) - return - - if(panel_open) + if(!display_ready()) return - . += "smes-op[outputting ? 1 : 0]" - . += "smes-oc[inputting ? 1 : 0]" + if(show_display_lights) + . += "smes-op[outputting ? 1 : 0]" + . += "smes-oc[inputting ? 1 : 0]" - var/clevel = chargedisplay() - if(clevel > 0) - . += "smes-og[clevel]" + var/clevel = chargedisplay() + if(clevel > 0) + . += "smes-og[clevel]" /obj/machinery/power/smes/proc/chargedisplay() + if(capacity <= 0) + return 0 return clamp(round(5.5*charge/capacity),0,5) /obj/machinery/power/smes/process(seconds_per_tick) @@ -279,7 +290,7 @@ output_used = min(charge, output_energy) //limit output to that stored if (add_avail(output_used)) // add output to powernet if it exists (smes side) - charge -= output_used // reduce the storage (may be recovered in /restore() if excessive) + adjust_charge(-output_used) // reduce the storage (may be recovered in /restore() if excessive) else outputting = FALSE @@ -302,7 +313,7 @@ var/load = min((capacity-charge), input_energy, input_available) // charge at set rate, limited to spare capacity - charge += load // increase the charge + adjust_charge(load) // increase the charge terminal.add_load(load) // add the load to the terminal side network @@ -319,7 +330,13 @@ if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting) update_appearance() +/// Adjusts the charge in this SMES, used instead of directly adjusting the charge value. Mainly for the benefit of the power connector/portable SMES system. +/obj/machinery/power/smes/proc/adjust_charge(charge_adjust) + charge += charge_adjust +/// Sets the charge in this SMES, used instead of directly adjusting the charge value. Mainly for the benefit of the power connector/portable SMES system. +/obj/machinery/power/smes/proc/set_charge(charge_set) + charge = charge_set // called after all power processes are finished // restores charge level to smes if there was excess this ptick @@ -341,7 +358,7 @@ var/clev = chargedisplay() - charge += excess // restore unused power + adjust_charge(excess) // restore unused power powernet.netexcess -= excess // remove the excess from the powernet, so later SMESes don't try to use it output_used -= excess @@ -377,7 +394,7 @@ ) return data -/obj/machinery/power/smes/ui_act(action, params) +/obj/machinery/power/smes/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -432,7 +449,6 @@ /obj/machinery/power/smes/proc/log_smes(mob/user) investigate_log("Input/Output: [input_level]/[output_level] | Charge: [charge] | Output-mode: [output_attempt?"ON":"OFF"] | Input-mode: [input_attempt?"AUTO":"OFF"] by [user ? key_name(user) : "outside forces"]", INVESTIGATE_ENGINE) - /obj/machinery/power/smes/emp_act(severity) . = ..() if(. & EMP_PROTECT_SELF) @@ -443,9 +459,9 @@ outputting = output_attempt output_level = rand(0, output_level_max) input_level = rand(0, input_level_max) - charge -= STANDARD_BATTERY_CHARGE/severity + adjust_charge(-STANDARD_BATTERY_CHARGE/severity) if (charge < 0) - charge = 0 + set_charge(0) update_appearance() log_smes() @@ -478,7 +494,6 @@ charge = INFINITY ..() - #undef SMES_CLEVEL_1 #undef SMES_CLEVEL_2 #undef SMES_CLEVEL_3 diff --git a/code/modules/power/smes_portable.dm b/code/modules/power/smes_portable.dm new file mode 100644 index 0000000000000..3b2d61669594b --- /dev/null +++ b/code/modules/power/smes_portable.dm @@ -0,0 +1,280 @@ +// idea inspired by vgstation, original pr on github vgstation-coders/vgstation13#4555 + +/obj/machinery/power/smes/connector + name = "power connector" + desc = "A user-safe high-current contact port, used for connecting and interfacing with portable power storage units. Practically useless without one." + icon_state = "battery_port" + circuit = /obj/item/circuitboard/machine/smes/connector + density = FALSE + input_attempt = FALSE + output_attempt = FALSE + + show_display_lights = FALSE + + capacity = 1 // solely to avoid div by zero + charge = 0 + var/obj/machinery/power/smesbank/connected_smes + +/obj/machinery/power/smes/connector/RefreshParts() + SHOULD_CALL_PARENT(FALSE) + var/power_coefficient = 0 + for(var/datum/stock_part/capacitor/capacitor in component_parts) + power_coefficient += capacitor.tier + input_level_max = initial(input_level_max) * power_coefficient + output_level_max = initial(output_level_max) * power_coefficient + +/obj/machinery/power/smes/connector/ui_act(action, params) + // prevent UI interactions if there's no SMES + if(!connected_smes) + balloon_alert(usr, "needs a connected SMES!") + return FALSE + return ..() + +/obj/machinery/power/smes/connector/display_ready() + if(!connected_smes) + return FALSE + return ..() + +/obj/machinery/power/smes/connector/update_appearance(updates) + . = ..() + connected_smes?.update_appearance(updates) + +/obj/machinery/power/smes/connector/update_overlays() + . = ..() + if(connected_smes && inputting) + . += "bp-c" + else + if(connected_smes) + if(charge > 0) + . += "bp-o" + else + . += "bp-d" + connected_smes?.update_appearance(UPDATE_OVERLAYS) + +/obj/machinery/power/smes/connector/crowbar_act(mob/living/user, obj/item/tool) + if(!connector_free(user)) + return ITEM_INTERACT_BLOCKING + return ..() + +/obj/machinery/power/smes/connector/wrench_act(mob/living/user, obj/item/tool) + if(!connector_free(user)) + return ITEM_INTERACT_BLOCKING + return ..() + +/obj/machinery/power/smes/connector/screwdriver_act(mob/living/user, obj/item/tool) + if(!connector_free(user)) + return ITEM_INTERACT_BLOCKING + return ..() + +/// checks if the connector is free; if not, alerts a user and returns FALSE +/obj/machinery/power/smes/connector/proc/connector_free(mob/living/user) + if(connected_smes) + balloon_alert(user, "disconnect SMES first!") + return FALSE + return TRUE + +/// connects the actual portable SMES once it's assigned, adjusting charge/maxcharge +/obj/machinery/power/smes/connector/proc/on_connect_smes() + charge = connected_smes.charge + capacity = connected_smes.capacity + update_appearance() + +/// disconnects the portable SMES, resetting internal charge + capacity +/obj/machinery/power/smes/connector/proc/on_disconnect_smes() + input_attempt = FALSE + output_attempt = FALSE + charge = initial(charge) + capacity = initial(capacity) + update_appearance() + +// we really should only be adjusting charge when there's a connected SMES bank. +/obj/machinery/power/smes/connector/adjust_charge(charge_adjust) + . = ..() + connected_smes?.charge += charge_adjust + +// same as above - if we have to set charge, affect the connected SMES bank as well +/obj/machinery/power/smes/connector/set_charge(charge_set) + . = ..() + connected_smes?.charge = charge_set + +/obj/machinery/power/smes/connector/Destroy() + connected_smes?.disconnect_port() // in the unlikely but possible case a SMES is connected and this explodes + return ..() + +/// The actual portable part of the portable SMES system. Pretty useless without an actual connector. +/obj/machinery/power/smesbank + name = "portable power storage unit" + desc = "A portable, high-capacity superconducting magnetic energy storage (SMES) unit. Requires a separate power connector port to actually interface with power networks." + icon_state = "port_smes" + circuit = /obj/item/circuitboard/machine/smesbank + use_power = NO_POWER_USE // well, technically + density = TRUE + anchored = FALSE + can_change_cable_layer = FALSE // cable layering is handled via connector port + /// The charge capacity. + var/capacity = 50 * STANDARD_BATTERY_CHARGE // The board defaults with 5 high capacity batteries. + /// The current charge. + var/charge = 0 + /// The port this is connected to. + var/obj/machinery/power/smes/connector/connected_port + +/obj/machinery/power/smesbank/on_construction(mob/user) + . = ..() + set_anchored(FALSE) + +/obj/machinery/power/smesbank/Initialize(mapload) + . = ..() + if(mapload) + mapped_setup() + +/obj/machinery/power/smesbank/interact(mob/user) + . = ..() + connected_port?.interact(user) + +/obj/machinery/power/smesbank/examine(user) + . = ..() + if(!connected_port) + . += span_warning("This SMES has no connector port!") + +//opening using screwdriver +/obj/machinery/power/smesbank/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", initial(icon_state), tool)) + update_appearance() + return ITEM_INTERACT_SUCCESS + +/obj/machinery/power/smesbank/RefreshParts() + SHOULD_CALL_PARENT(FALSE) + var/max_charge = 0 + var/new_charge = 0 + for(var/obj/item/stock_parts/power_store/power_cell in component_parts) + max_charge += power_cell.maxcharge + new_charge += power_cell.charge + capacity = max_charge + if(!initial(charge) && !charge) + charge = new_charge + +/obj/machinery/power/smesbank/update_overlays() + . = ..() + if(machine_stat & BROKEN) + return + + if(panel_open) + return + + . += "smes-op[connected_port?.outputting ? 1 : 0]" + . += "smes-oc[connected_port?.inputting ? 1 : 0]" + var/clevel = chargedisplay() + if(clevel > 0) + . += "smes-og[clevel]" + +/obj/machinery/power/smesbank/proc/chargedisplay() + return clamp(round(5.5*charge/capacity),0,5) + +/obj/machinery/power/smesbank/default_deconstruction_crowbar(obj/item/crowbar/crowbar) + if(istype(crowbar) && connected_port) + balloon_alert(usr, "disconnect from [connected_port] first!") + return FALSE + return ..() + +// adapted from portable atmos connection code +/obj/machinery/power/smesbank/wrench_act(mob/living/user, obj/item/wrench) + if(connected_port) + wrench.play_tool_sound(src) + if(!wrench.use_tool(src, user, 8 SECONDS)) + return ITEM_INTERACT_BLOCKING + user.visible_message( \ + "[user] disconnects [src].", \ + span_notice("You unfasten [src] from [connected_port]."), \ + span_hear("You hear a ratchet.")) + investigate_log("was disconnected from [connected_port] by [key_name(user)].", INVESTIGATE_ENGINE) + disconnect_port() + update_appearance() + return ITEM_INTERACT_SUCCESS + + var/obj/machinery/power/smes/connector/possible_connector = locate(/obj/machinery/power/smes/connector) in loc + if(!possible_connector) + to_chat(user, span_notice("There's no power connector to connect to.")) + return ITEM_INTERACT_BLOCKING + wrench.play_tool_sound(src) + if(!wrench.use_tool(src, user, 4 SECONDS)) + return ITEM_INTERACT_BLOCKING + if(!connect_port(possible_connector)) + to_chat(user, span_notice("[src] failed to connect to [possible_connector].")) + return ITEM_INTERACT_BLOCKING + user.visible_message( \ + "[user] connects [src].", \ + span_notice("You fasten [src] to [possible_connector]."), \ + span_hear("You hear a ratchet.")) + update_appearance() + investigate_log("was connected to [possible_connector] by [key_name(user)].", INVESTIGATE_ENGINE) + return ITEM_INTERACT_SUCCESS + +/// Attempt to connect the portable SMES to a given connector. Adapted from portable atmos connection code. +/obj/machinery/power/smesbank/proc/connect_port(obj/machinery/power/smes/connector/possible_connector) + //Make sure not already connected to something else + if(connected_port || !possible_connector || possible_connector.connected_smes || possible_connector.panel_open) + return FALSE + + //Make sure are close enough for a valid connection + if(possible_connector.loc != get_turf(src)) + return FALSE + + //Perform the connection + connected_port = possible_connector + connected_port.connected_smes = src + possible_connector.on_connect_smes() + set_anchored(TRUE) //Prevent movement + connected_port.update_appearance() + update_appearance() + return TRUE + +/// Disconnects the portable SMES from its assigned connector, if it has any. Also adapted from portable atmos connection code. +/obj/machinery/power/smesbank/proc/disconnect_port() + if(!connected_port) + return + connected_port.on_disconnect_smes() + connected_port.connected_smes = null + connected_port = null + set_anchored(FALSE) + update_appearance() + +/obj/machinery/power/smesbank/Destroy() + disconnect_port() + return ..() + +/// Adjusts the charge of the portable SMES. See SMES code. +/obj/machinery/power/smesbank/proc/adjust_charge(charge_adjust) + charge += charge_adjust + +/// Sets the charge of the portable SMES. See SMES code. +/obj/machinery/power/smesbank/proc/set_charge(charge_set) + charge = charge_set + +/obj/machinery/power/smesbank/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + adjust_charge(-STANDARD_BATTERY_CHARGE/severity) // EMP'd banks double-dip on draining if connected. too bad, i guess + if (charge < 0) + set_charge(0) + update_appearance() + +/// Attempt to locate, connect to, and activate a portable connector, for pre-mapped portable SMESes. +/obj/machinery/power/smesbank/proc/mapped_setup() + var/obj/machinery/power/smes/connector/possible_connector = locate(/obj/machinery/power/smes/connector) in loc + if(!possible_connector) + return + if(!connect_port(possible_connector)) + return + possible_connector.input_attempt = TRUE + possible_connector.output_attempt = TRUE + +/obj/machinery/power/smesbank/super + name = "super capacity power storage unit" + desc = "A portable, super-capacity, superconducting magnetic energy storage (SMES) unit. Relatively rare, and typically installed in long-range outposts where minimal maintenance is expected." + circuit = /obj/item/circuitboard/machine/smesbank/super + capacity = 100 * STANDARD_BATTERY_CHARGE + +/obj/machinery/power/smesbank/super/full + charge = 100 * STANDARD_BATTERY_CHARGE diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 80280e4b45aae..2c075d758c0e3 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -108,15 +108,15 @@ if(machine_stat & BROKEN) playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 60, TRUE) else - playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE) + playsound(loc, 'sound/effects/glass/glasshit.ogg', 90, TRUE) if(BURN) - playsound(loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/machinery/power/solar/atom_break(damage_flag) . = ..() if(.) - playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) + playsound(loc, 'sound/effects/glass/glassbr3.ogg', 100, TRUE) unset_control() // Make sure user can see it's broken var/new_angle = rand(160, 200) @@ -170,7 +170,7 @@ // actually flip to other direction? if(abs(angle - azimuth_current) > 180) - mid_azimuth = (mid_azimuth + 180) % 360 + mid_azimuth = reverse_angle(mid_azimuth) // Split into 2 parts so it doesn't distort on large changes animate(part, @@ -486,7 +486,7 @@ data["history"] = history return data -/obj/machinery/power/solar_control/ui_act(action, params) +/obj/machinery/power/solar_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -559,14 +559,14 @@ if(machine_stat & BROKEN) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE) else - playsound(src.loc, 'sound/effects/glasshit.ogg', 75, TRUE) + playsound(src.loc, 'sound/effects/glass/glasshit.ogg', 75, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/machinery/power/solar_control/atom_break(damage_flag) . = ..() if(.) - playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) + playsound(loc, 'sound/effects/glass/glassbr3.ogg', 100, TRUE) /obj/machinery/power/solar_control/process() lastgen = gen diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index eb359c78a9041..f5c5076743d76 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -300,7 +300,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) zap_factors = calculate_zap_transmission_rate() var/delta_time = (SSmachines.times_fired - last_power_zap_perspective_machines) * SSmachines.wait / (1 SECONDS) if(delta_time && internal_energy && (last_power_zap + (4 - internal_energy * 0.001) SECONDS) < world.time) - playsound(src, 'sound/weapons/emitter2.ogg', 70, TRUE) + playsound(src, 'sound/items/weapons/emitter2.ogg', 70, TRUE) hue_angle_shift = clamp(903 * log(10, (internal_energy + 8000)) - 3590, -50, 240) var/zap_color = color_matrix_rotate_hue(hue_angle_shift) supermatter_zap( @@ -898,6 +898,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /obj/machinery/proc/supermatter_zap(atom/zapstart = src, range = 5, zap_str = 3.2 MEGA JOULES, zap_flags = ZAP_SUPERMATTER_FLAGS, list/targets_hit = list(), zap_cutoff = 1.2 MEGA JOULES, power_level = 0, zap_icon = DEFAULT_ZAP_ICON_STATE, color = null) if(QDELETED(zapstart)) return + if(zap_cutoff <= 0) + stack_trace("/obj/machinery/supermatter_zap() was called with a non-positive value") + return + if(zap_str <= 0) // Just in case something scales zap_str and zap_cutoff to 0. + return . = zapstart.dir //If the strength of the zap decays past the cutoff, we stop if(zap_str < zap_cutoff) diff --git a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm index 76249306571b9..aaed210b1bd72 100644 --- a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm +++ b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm @@ -52,7 +52,7 @@ GLOBAL_LIST_INIT(sm_delam_list, list( sm.radio.talk_into(sm,"Crystalline hyperstructure returning to safe operating parameters. Integrity: [round(sm.get_integrity_percent(), 0.01)]%", sm.emergency_channel) else sm.radio.talk_into(sm,"Crystalline hyperstructure returning to safe operating parameters. Integrity: [round(sm.get_integrity_percent(), 0.01)]%", sm.warning_channel) - playsound(sm, 'sound/machines/terminal_alert.ogg', 75) + playsound(sm, 'sound/machines/terminal/terminal_alert.ogg', 75) return FALSE switch(sm.get_status()) @@ -61,17 +61,15 @@ GLOBAL_LIST_INIT(sm_delam_list, list( alert_sound_to_playing('modular_skyrat/master_files/sound/effects/reactor/meltdown.ogg', override_volume = TRUE) alert_sound_to_playing('sound/effects/alert.ogg', override_volume = TRUE) // SKYRAT 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) - alert_sound_to_playing('sound/misc/notice1.ogg', override_volume = TRUE) + alert_sound_to_playing('sound/announcer/notice/notice1.ogg', override_volume = TRUE) // SKYRAT 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) + playsound(sm, 'sound/machines/engine_alert/engine_alert2.ogg', 100, FALSE, 30, 30, falloff_distance = 10) if(SUPERMATTER_WARNING) - playsound(sm, 'sound/machines/terminal_alert.ogg', 75) + playsound(sm, 'sound/machines/terminal/terminal_alert.ogg', 75) if(sm.damage >= sm.emergency_point) // In emergency sm.radio.talk_into(sm, "CRYSTAL DELAMINATION IMMINENT! Integrity: [round(sm.get_integrity_percent(), 0.01)]%", sm.emergency_channel) diff --git a/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm b/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm index a9c7a87045da3..abcc6a3a50ea3 100644 --- a/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm +++ b/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm @@ -89,7 +89,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') + "Nanotrasen Star Observation Association", 'sound/announcer/alarm/airraid.ogg') return TRUE /// Signal calls cant sleep, we gotta do this. diff --git a/code/modules/power/supermatter/supermatter_delamination/cascade_delam_objects.dm b/code/modules/power/supermatter/supermatter_delamination/cascade_delam_objects.dm index d19d17452e221..c07ec7bbe89f7 100644 --- a/code/modules/power/supermatter/supermatter_delamination/cascade_delam_objects.dm +++ b/code/modules/power/supermatter/supermatter_delamination/cascade_delam_objects.dm @@ -64,7 +64,7 @@ span_userdanger("The crystal mass lunges on you and hits you in the chest. As your vision is filled with a blinding light, you think to yourself \"Damn it.\"")) else if(istype(checked_atom, /obj/cascade_portal)) checked_atom.visible_message(span_userdanger("\The [checked_atom] screeches and closes away as it is hit by \a [src]! Too late!")) - playsound(get_turf(checked_atom), 'sound/magic/charge.ogg', 50, TRUE) + playsound(get_turf(checked_atom), 'sound/effects/magic/charge.ogg', 50, TRUE) playsound(get_turf(checked_atom), 'sound/effects/supermatter.ogg', 50, TRUE) qdel(checked_atom) else if(isitem(checked_atom)) diff --git a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm index cbe3f3dab036c..1d7cec3dd09cb 100644 --- a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm +++ b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm @@ -32,9 +32,15 @@ var/turf/victim_turf = get_turf(victim) if(!is_valid_z_level(victim_turf, sm_turf)) continue - victim.playsound_local(victim_turf, 'sound/magic/charge.ogg') + victim.playsound_local(victim_turf, 'sound/effects/magic/charge.ogg') if(victim.z == 0) //victim is inside an object, this is to maintain an old bug turned feature with lockers n shit i guess. tg issue #69687 - to_chat(victim, span_boldannounce("You hold onto \the [victim.loc] as hard as you can, as reality distorts around you. You feel safe.")) + var/message = "" + var/location = victim.loc + if(istype(location, /obj/structure/disposalholder)) // sometimes your loc can be a disposalsholder when you're inside a disposals type, so let's just pass a message that makes sense. + message = "You hear a lot of rattling in the disposal pipes around you as reality itself distorts. Yet, you feel safe." + else + message = "You hold onto \the [victim.loc] as hard as you can, as reality distorts around you. You feel safe." + to_chat(victim, span_boldannounce(message)) continue to_chat(victim, span_boldannounce("You feel reality distort for a moment...")) if (isliving(victim)) @@ -134,7 +140,7 @@ priority_announce( text = "Fatal error occurred in emergency shuttle uplink during transit. Unable to reestablish connection.", title = "Shuttle Failure", - sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg', + sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/announcer/announcement/announce_dig.ogg', sender_override = "Emergency Shuttle Uplink Alert", color_override = "grey", ) @@ -157,7 +163,7 @@ var/mob/living/living_player = player to_chat(player, span_boldannounce("Everything around you is resonating with a powerful energy. This can't be good.")) living_player.add_mood_event("cascade", /datum/mood_event/cascade) - SEND_SOUND(player, 'sound/magic/charge.ogg') + SEND_SOUND(player, 'sound/effects/magic/charge.ogg') /datum/sm_delam/proc/effect_emergency_state() if(SSsecurity_level.get_current_level_as_number() != SEC_LEVEL_DELTA) diff --git a/code/modules/power/supermatter/supermatter_extra_effects.dm b/code/modules/power/supermatter/supermatter_extra_effects.dm index b6cc1b792bdcf..a21a5ee728739 100644 --- a/code/modules/power/supermatter/supermatter_extra_effects.dm +++ b/code/modules/power/supermatter/supermatter_extra_effects.dm @@ -128,11 +128,12 @@ zap_count += 1 if(zap_count >= 1) - playsound(loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) + playsound(loc, 'sound/items/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) var/delta_time = (SSmachines.times_fired - last_high_energy_zap_perspective_machines) * SSmachines.wait / (1 SECONDS) - for(var/i in 1 to zap_count) - supermatter_zap(src, range, clamp(internal_energy * 3200, 6.4e6, 3.2e7) * delta_time, flags, zap_cutoff = src.zap_cutoff * delta_time, power_level = internal_energy, zap_icon = src.zap_icon) - last_high_energy_zap_perspective_machines = SSmachines.times_fired + if(delta_time) + for(var/i in 1 to zap_count) + supermatter_zap(src, range, clamp(internal_energy * 3200, 6.4e6, 3.2e7) * delta_time, flags, zap_cutoff = src.zap_cutoff * delta_time, power_level = internal_energy, zap_icon = src.zap_icon) + last_high_energy_zap_perspective_machines = SSmachines.times_fired if(prob(5)) supermatter_anomaly_gen(src, FLUX_ANOMALY, rand(5, 10)) if(prob(5)) @@ -143,7 +144,7 @@ supermatter_anomaly_gen(src, PYRO_ANOMALY, rand(5, 10)) /obj/machinery/power/supermatter_crystal/proc/supermatter_pull(turf/center, pull_range = 3) - playsound(center, 'sound/weapons/marauder.ogg', 100, TRUE, extrarange = pull_range - world.view) + playsound(center, 'sound/items/weapons/marauder.ogg', 100, TRUE, extrarange = pull_range - world.view) for(var/atom/movable/movable_atom in orange(pull_range,center)) if((movable_atom.anchored || movable_atom.move_resist >= MOVE_FORCE_EXTREMELY_STRONG)) //move resist memes. if(istype(movable_atom, /obj/structure/closet)) diff --git a/code/modules/power/supermatter/supermatter_gas.dm b/code/modules/power/supermatter/supermatter_gas.dm index fe0ed388148b5..b6eb2804c28ab 100644 --- a/code/modules/power/supermatter/supermatter_gas.dm +++ b/code/modules/power/supermatter/supermatter_gas.dm @@ -218,7 +218,7 @@ GLOBAL_LIST_INIT(sm_gas_behavior, init_sm_gas()) /datum/sm_gas/zauker/extra_effects(obj/machinery/power/supermatter_crystal/sm) if(!prob(sm.gas_percentage[/datum/gas/zauker] * 100)) return - playsound(sm.loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) + playsound(sm.loc, 'sound/items/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) sm.supermatter_zap( sm, range = 6, diff --git a/code/modules/power/supermatter/supermatter_hit_procs.dm b/code/modules/power/supermatter/supermatter_hit_procs.dm index 6f01b5ff7e3f4..57c86303a0ad6 100644 --- a/code/modules/power/supermatter/supermatter_hit_procs.dm +++ b/code/modules/power/supermatter/supermatter_hit_procs.dm @@ -13,11 +13,11 @@ return NONE var/kiss_power = 0 - switch(projectile.type) - if(/obj/projectile/kiss) - kiss_power = 60 - if(/obj/projectile/kiss/death) - kiss_power = 20000 + if (istype(projectile, /obj/projectile/kiss/death)) + kiss_power = 20000 + else if (istype(projectile, /obj/projectile/kiss)) + kiss_power = 60 + if(!istype(projectile.firer, /obj/machinery/power/emitter)) investigate_log("has been hit by [projectile] fired by [key_name(projectile.firer)]", INVESTIGATE_ENGINE) diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index a3bdd2b55bd79..db10c6da9f9d1 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -116,7 +116,7 @@ var/power = (powernet.avail) * 0.2 * input_power_multiplier //Always always always use more then you output for the love of god power = min(surplus(), power) //Take the smaller of the two add_load(power) - playsound(src.loc, 'sound/magic/lightningshock.ogg', zap_sound_volume, TRUE, zap_sound_range) + playsound(src.loc, 'sound/effects/magic/lightningshock.ogg', zap_sound_volume, TRUE, zap_sound_range) tesla_zap(source = src, zap_range = 10, power = power, cutoff = 1e3, zap_flags = zap_flags) zap_buckle_check(power) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 0e41a7d6e86c3..5437ee0afd93c 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -24,8 +24,8 @@ light_range = 6 move_resist = INFINITY obj_flags = CAN_BE_HIT | DANGEROUS_POSSESSION - pixel_x = -32 - pixel_y = -32 + pixel_x = -ICON_SIZE_X + pixel_y = -ICON_SIZE_Y resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF | SHUTTLE_CRUSH_PROOF flags_1 = SUPERMATTER_IGNORES_1 @@ -50,7 +50,7 @@ var/turf/spawned_turf = get_turf(src) message_admins("A tesla has been created at [ADMIN_VERBOSEJMP(spawned_turf)].") - investigate_log("(tesla) was created at [AREACOORD(spawned_turf)].", INVESTIGATE_ENGINE) + investigate_log("was created at [AREACOORD(spawned_turf)].", INVESTIGATE_ENGINE) /obj/energy_ball/Destroy() if(orbiting && istype(orbiting.parent, /obj/energy_ball)) @@ -70,7 +70,7 @@ move(4 + orbiting_balls.len * 1.5) - playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, TRUE, extrarange = 30) + playsound(src.loc, 'sound/effects/magic/lightningbolt.ogg', 100, TRUE, extrarange = 30) pixel_x = 0 pixel_y = 0 @@ -78,8 +78,8 @@ var/list/shocking_info = list() tesla_zap(source = src, zap_range = 3, power = TESLA_DEFAULT_ENERGY, shocked_targets = shocking_info) - pixel_x = -32 - pixel_y = -32 + pixel_x = -ICON_SIZE_X + pixel_y = -ICON_SIZE_Y for (var/ball in orbiting_balls) var/range = rand(1, clamp(orbiting_balls.len, 2, 3)) var/list/temp_shock = list() @@ -126,7 +126,7 @@ energy_to_lower = energy_to_raise - 20 energy_to_raise = energy_to_raise * 1.25 - playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, TRUE, extrarange = 30) + playsound(src.loc, 'sound/effects/magic/lightning_chargeup.ogg', 100, TRUE, extrarange = 30) addtimer(CALLBACK(src, PROC_REF(new_mini_ball)), 10 SECONDS) else if(energy < energy_to_lower && orbiting_balls.len) energy_to_raise = energy_to_raise / 1.25 @@ -149,7 +149,7 @@ var/list/icon_dimensions = get_icon_dimensions(icon) var/orbitsize = (icon_dimensions["width"] + icon_dimensions["height"]) * pick(0.4, 0.5, 0.6, 0.7, 0.8) - orbitsize -= (orbitsize / world.icon_size) * (world.icon_size * 0.25) + orbitsize -= (orbitsize / ICON_SIZE_ALL) * (ICON_SIZE_ALL * 0.25) miniball.orbit(src, orbitsize, pick(FALSE, TRUE), rand(10, 25), pick(3, 4, 5, 6, 36)) /obj/energy_ball/Bump(atom/A) @@ -187,8 +187,8 @@ /obj/energy_ball/proc/dust_mobs(atom/A) if(isliving(A)) - var/mob/living/L = A - if(L.incorporeal_move || L.status_flags & GODMODE) + var/mob/living/living = A + if(living.incorporeal_move || HAS_TRAIT(living, TRAIT_GODMODE)) return if(!iscarbon(A)) return diff --git a/code/modules/power/thermoelectric_generator.dm b/code/modules/power/thermoelectric_generator.dm index e8e866a444363..48295914ef557 100644 --- a/code/modules/power/thermoelectric_generator.dm +++ b/code/modules/power/thermoelectric_generator.dm @@ -1,3 +1,4 @@ + /* Skyrat removal START, moved to modular file @@ -225,5 +226,6 @@ Skyrat removal START, moved to modular file #undef TEG_EFFICIENCY + Skyrat removal END */ diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index a6118e9ac093f..0855e63ed4bf9 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -90,7 +90,7 @@ // actually flip to other direction? if(abs(angle - azimuth_current) > 180) - mid_azimuth = (mid_azimuth + 180) % 360 + mid_azimuth = reverse_angle(mid_azimuth) // Split into 2 parts so it doesn't distort on large changes animate(part, @@ -134,7 +134,7 @@ /obj/machinery/power/tracker/atom_break(damage_flag) . = ..() if(.) - playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) + playsound(loc, 'sound/effects/glass/glassbr3.ogg', 100, TRUE) unset_control() /obj/machinery/power/tracker/on_deconstruction(disassembled) diff --git a/code/modules/power/turbine/turbine.dm b/code/modules/power/turbine/turbine.dm index dbf5d1848dd48..e839800158f63 100644 --- a/code/modules/power/turbine/turbine.dm +++ b/code/modules/power/turbine/turbine.dm @@ -648,7 +648,7 @@ return PROCESS_KILL 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) + playsound(src, 'sound/machines/engine_alert/engine_alert1.ogg', 100, FALSE, 30, 30, falloff_distance = 10) //================ROTOR WORKING============// //The Rotor moves the gases that expands from 1000 L to 3000 L, they cool down and both temperature and pressure lowers diff --git a/code/modules/power/turbine/turbine_computer.dm b/code/modules/power/turbine/turbine_computer.dm index f983e11c1f128..2ad777edd6228 100644 --- a/code/modules/power/turbine/turbine_computer.dm +++ b/code/modules/power/turbine/turbine_computer.dm @@ -68,7 +68,7 @@ return data -/obj/machinery/computer/turbine_computer/ui_act(action, params) +/obj/machinery/computer/turbine_computer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm index 505dc36f02c12..da086773591de 100644 --- a/code/modules/procedural_mapping/mapGenerators/repair.dm +++ b/code/modules/procedural_mapping/mapGenerators/repair.dm @@ -27,7 +27,7 @@ // changed to allow Z cropping and that's a mess var/z_offset = SSmapping.station_start var/list/bounds - for (var/path in SSmapping.config.GetFullMapPaths()) + for (var/path in SSmapping.current_map.GetFullMapPaths()) var/datum/parsed_map/parsed = load_map( file(path), 1, diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 42751441fca4f..4bf428f80c125 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -32,6 +32,9 @@ var/firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect ///pacifism check for boolet, set to FALSE if bullet is non-lethal var/harmful = TRUE + /// How much force is applied when fired in zero-G + var/newtonian_force = 1 + ///If set to true or false, this ammunition can or cannot misfire, regardless the gun can_misfire setting var/can_misfire = null ///This is how much misfire probability is added to the gun when it fires this casing. @@ -156,6 +159,6 @@ SpinAnimation(10, 1) var/turf/T = get_turf(src) if(still_warm && T?.bullet_sizzle) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, 'sound/items/welder.ogg', 20, 1), bounce_delay) //If the turf is made of water and the shell casing is still hot, make a sizzling sound when it's ejected. + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, 'sound/items/tools/welder.ogg', 20, 1), bounce_delay) //If the turf is made of water and the shell casing is still hot, make a sizzling sound when it's ejected. else if(T?.bullet_bounce_sound) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, T.bullet_bounce_sound, 20, 1), bounce_delay) //Soft / non-solid turfs that shouldn't make a sound when a shell casing is ejected over them. diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 1f5ac9a1df3ea..f22274036a82f 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -17,17 +17,17 @@ return FALSE AddComponent(/datum/component/pellet_cloud, projectile_type, pellets) - //var/next_delay = click_cooldown_override || CLICK_CD_RANGE // ORIGINAL + //var/next_delay = click_cooldown_override || CLICK_CD_RANGE // SKYRAT EDIT: ORIGINAL var/next_delay = click_cooldown_override || ((user.staminaloss <= STAMINA_THRESHOLD_TIRED_CLICK_CD) ? CLICK_CD_RANGE : CLICK_CD_RANGE_TIRED) // SKYRAT EDIT CHANGE if(HAS_TRAIT(user, TRAIT_DOUBLE_TAP)) next_delay = round(next_delay * 0.5) user.changeNext_move(next_delay) if(!tk_firing(user, fired_from)) - user.newtonian_move(get_dir(target, user)) + user.newtonian_move(get_angle(target, user), drift_force = newtonian_force) else if(ismovable(fired_from)) var/atom/movable/firer = fired_from - if(!firer.newtonian_move(get_dir(target, fired_from), instant = TRUE)) + if(!firer.newtonian_move(get_angle(target, fired_from), instant = TRUE, drift_force = newtonian_force)) var/throwtarget = get_step(fired_from, get_dir(target, fired_from)) firer.safe_throw_at(throwtarget, 1, 2) update_appearance() diff --git a/code/modules/projectiles/ammunition/ballistic/foam.dm b/code/modules/projectiles/ammunition/ballistic/foam.dm index 7ffa317897a83..f4496cf6c189b 100644 --- a/code/modules/projectiles/ammunition/ballistic/foam.dm +++ b/code/modules/projectiles/ammunition/ballistic/foam.dm @@ -8,6 +8,7 @@ base_icon_state = "foamdart" custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.1125) harmful = FALSE + newtonian_force = 0.5 var/modified = FALSE var/static/list/insertable_items_hint = list(/obj/item/pen) ///For colored magazine overlays. diff --git a/code/modules/projectiles/ammunition/ballistic/harpoon.dm b/code/modules/projectiles/ammunition/ballistic/harpoon.dm index 79590ccb97d10..b3c1dddd08513 100644 --- a/code/modules/projectiles/ammunition/ballistic/harpoon.dm +++ b/code/modules/projectiles/ammunition/ballistic/harpoon.dm @@ -4,6 +4,7 @@ icon_state = "magspear" base_icon_state = "magspear" projectile_type = /obj/projectile/bullet/harpoon + newtonian_force = 1.5 /obj/item/ammo_casing/harpoon/Initialize(mapload) . = ..() diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index bc25970e7c364..fc90f2d7bfdfb 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -5,6 +5,7 @@ desc = "A 10mm bullet casing." caliber = CALIBER_10MM projectile_type = /obj/projectile/bullet/c10mm + newtonian_force = 0.75 /obj/item/ammo_casing/c10mm/ap name = "10mm armor-piercing bullet casing" @@ -33,6 +34,7 @@ desc = "A 9mm bullet casing." caliber = CALIBER_9MM projectile_type = /obj/projectile/bullet/c9mm + newtonian_force = 0.75 /obj/item/ammo_casing/c9mm/ap name = "9mm armor-piercing bullet casing" diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 4c5c24a3eec89..c85be11686118 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -48,6 +48,7 @@ caliber = CALIBER_40MM icon_state = "40mmHE" projectile_type = /obj/projectile/bullet/a40mm + newtonian_force = 1.25 /obj/item/ammo_casing/a40mm/rubber name = "40mm rubber shell" @@ -61,6 +62,7 @@ icon_state = "rod_sharp" base_icon_state = "rod_sharp" projectile_type = /obj/projectile/bullet/rebar + newtonian_force = 1.5 /obj/item/ammo_casing/rebar/syndie name = "Jagged Iron Rod" @@ -109,6 +111,7 @@ icon_state = "paperball" base_icon_state = "paperball" projectile_type = /obj/projectile/bullet/paperball + newtonian_force = 0.5 /obj/item/ammo_casing/rebar/Initialize(mapload) . = ..() diff --git a/code/modules/projectiles/ammunition/ballistic/rocket.dm b/code/modules/projectiles/ammunition/ballistic/rocket.dm index 25f0bee11a672..d387ea5ac4a4e 100644 --- a/code/modules/projectiles/ammunition/ballistic/rocket.dm +++ b/code/modules/projectiles/ammunition/ballistic/rocket.dm @@ -5,6 +5,7 @@ icon_state = "srm-8" base_icon_state = "srm-8" projectile_type = /obj/projectile/bullet/rocket + newtonian_force = 2 /obj/item/ammo_casing/rocket/Initialize(mapload) . = ..() diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 84c75ed24935e..897e695fd4eb7 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -8,6 +8,7 @@ caliber = CALIBER_SHOTGUN custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*2) projectile_type = /obj/projectile/bullet/shotgun_slug + newtonian_force = 1.25 /obj/item/ammo_casing/shotgun/executioner name = "executioner slug" diff --git a/code/modules/projectiles/ammunition/ballistic/sniper.dm b/code/modules/projectiles/ammunition/ballistic/sniper.dm index 03deb0f2034b4..1b6e60cdef0e4 100644 --- a/code/modules/projectiles/ammunition/ballistic/sniper.dm +++ b/code/modules/projectiles/ammunition/ballistic/sniper.dm @@ -6,6 +6,7 @@ caliber = CALIBER_50BMG projectile_type = /obj/projectile/bullet/p50 icon_state = ".50" + newtonian_force = 1.5 /obj/item/ammo_casing/p50/surplus name = ".50 BMG surplus bullet casing" diff --git a/code/modules/projectiles/ammunition/energy/_energy.dm b/code/modules/projectiles/ammunition/energy/_energy.dm index bbf49e3fea9ba..ad79840a71658 100644 --- a/code/modules/projectiles/ammunition/energy/_energy.dm +++ b/code/modules/projectiles/ammunition/energy/_energy.dm @@ -6,6 +6,7 @@ slot_flags = null var/e_cost = LASER_SHOTS(12, STANDARD_CELL_CHARGE) //The amount of energy a cell needs to expend to create this shot. var/select_name = CALIBER_ENERGY - fire_sound = 'sound/weapons/laser.ogg' + fire_sound = 'sound/items/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 + newtonian_force = 0.5 diff --git a/code/modules/projectiles/ammunition/energy/ebow.dm b/code/modules/projectiles/ammunition/energy/ebow.dm index a6a928c25095d..9f22f31812335 100644 --- a/code/modules/projectiles/ammunition/energy/ebow.dm +++ b/code/modules/projectiles/ammunition/energy/ebow.dm @@ -2,7 +2,7 @@ projectile_type = /obj/projectile/energy/bolt select_name = "bolt" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) - fire_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' // Even for non-suppressed crossbows, this is the most appropriate sound + fire_sound = 'sound/items/weapons/gun/general/heavy_shot_suppressed.ogg' // Even for non-suppressed crossbows, this is the most appropriate sound firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect /obj/item/ammo_casing/energy/bolt/halloween diff --git a/code/modules/projectiles/ammunition/energy/gravity.dm b/code/modules/projectiles/ammunition/energy/gravity.dm index 6ad3a776475ce..076a586c26d3b 100644 --- a/code/modules/projectiles/ammunition/energy/gravity.dm +++ b/code/modules/projectiles/ammunition/energy/gravity.dm @@ -1,10 +1,11 @@ /obj/item/ammo_casing/energy/gravity e_cost = 0 // Not possible to use the macro - fire_sound = 'sound/weapons/wave.ogg' + fire_sound = 'sound/items/weapons/wave.ogg' select_name = "gravity" delay = 50 var/obj/item/gun/energy/gravity_gun/gun firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect + newtonian_force = 1 /obj/item/ammo_casing/energy/gravity/Initialize(mapload) if(istype(loc,/obj/item/gun/energy/gravity_gun)) diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 6ecb74c2f0666..2fa24dcc591bd 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -18,13 +18,13 @@ projectile_type = /obj/projectile/beam/laser/carbine e_cost = LASER_SHOTS(50, STANDARD_CELL_CHARGE) select_name = "kill" - fire_sound = 'sound/weapons/laser2.ogg' + fire_sound = 'sound/items/weapons/laser2.ogg' /obj/item/ammo_casing/energy/lasergun/carbine/cybersun projectile_type = /obj/projectile/beam/laser/carbine/cybersun e_cost = LASER_SHOTS(54, STANDARD_CELL_CHARGE) select_name = "rapid fire" - fire_sound = 'sound/weapons/laser2.ogg' + fire_sound = 'sound/items/weapons/laser2.ogg' /obj/item/ammo_casing/energy/lasergun/carbine/practice projectile_type = /obj/projectile/beam/laser/carbine/practice @@ -45,6 +45,8 @@ /obj/item/ammo_casing/energy/laser/musket/prime projectile_type = /obj/projectile/beam/laser/musket/prime + pellets = 3 + variance = 10 /obj/item/ammo_casing/energy/laser/practice projectile_type = /obj/projectile/beam/practice @@ -91,13 +93,13 @@ /obj/item/ammo_casing/energy/laser/heavy projectile_type = /obj/projectile/beam/laser/heavylaser select_name = "anti-vehicle" - fire_sound = 'sound/weapons/lasercannonfire.ogg' + fire_sound = 'sound/items/weapons/lasercannonfire.ogg' /obj/item/ammo_casing/energy/laser/pulse projectile_type = /obj/projectile/beam/pulse e_cost = LASER_SHOTS(200, STANDARD_CELL_CHARGE * 40) select_name = "DESTROY" - fire_sound = 'sound/weapons/pulse.ogg' + fire_sound = 'sound/items/weapons/pulse.ogg' firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/blue /obj/item/ammo_casing/energy/laser/bluetag @@ -119,12 +121,12 @@ /obj/item/ammo_casing/energy/xray projectile_type = /obj/projectile/beam/xray e_cost = LASER_SHOTS(20, STANDARD_CELL_CHARGE) - fire_sound = 'sound/weapons/laser3.ogg' + fire_sound = 'sound/items/weapons/laser3.ogg' /obj/item/ammo_casing/energy/mindflayer projectile_type = /obj/projectile/beam/mindflayer select_name = "MINDFUCK" - fire_sound = 'sound/weapons/laser.ogg' + fire_sound = 'sound/items/weapons/laser.ogg' /obj/item/ammo_casing/energy/laser/minigun select_name = "kill" @@ -135,7 +137,7 @@ projectile_type = /obj/projectile/bullet/c10mm //henk select_name = "bullet" e_cost = LASER_SHOTS(8, STANDARD_CELL_CHARGE) - fire_sound = 'sound/weapons/thermalpistol.ogg' + fire_sound = 'sound/items/weapons/thermalpistol.ogg' /obj/item/ammo_casing/energy/nanite/inferno projectile_type = /obj/projectile/energy/inferno @@ -155,7 +157,7 @@ base_icon_state = "s-casing-live" slot_flags = null projectile_type = /obj/projectile/beam - fire_sound = 'sound/weapons/laser.ogg' + fire_sound = 'sound/items/weapons/laser.ogg' firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/red /obj/item/ammo_casing/laser/Initialize(mapload) diff --git a/code/modules/projectiles/ammunition/energy/lmg.dm b/code/modules/projectiles/ammunition/energy/lmg.dm index e9a42dc31ddfa..01585e28b6c9d 100644 --- a/code/modules/projectiles/ammunition/energy/lmg.dm +++ b/code/modules/projectiles/ammunition/energy/lmg.dm @@ -1,6 +1,6 @@ /obj/item/ammo_casing/energy/c3dbullet projectile_type = /obj/projectile/bullet/c3d select_name = "spraydown" - fire_sound = 'sound/weapons/gun/smg/shot.ogg' - e_cost = LASER_SHOTS(40, STANDARD_CELL_CHARGE * 0.6) + fire_sound = 'sound/items/weapons/gun/smg/shot.ogg' + e_cost = LASER_SHOTS(30, STANDARD_CELL_CHARGE * 0.6) firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect diff --git a/code/modules/projectiles/ammunition/energy/plasma.dm b/code/modules/projectiles/ammunition/energy/plasma.dm index e660903bdc95d..f68879fc7577e 100644 --- a/code/modules/projectiles/ammunition/energy/plasma.dm +++ b/code/modules/projectiles/ammunition/energy/plasma.dm @@ -1,7 +1,7 @@ /obj/item/ammo_casing/energy/plasma projectile_type = /obj/projectile/plasma select_name = "plasma burst" - fire_sound = 'sound/weapons/plasma_cutter.ogg' + fire_sound = 'sound/items/weapons/plasma_cutter.ogg' delay = 15 e_cost = LASER_SHOTS(40, STANDARD_CELL_CHARGE) diff --git a/code/modules/projectiles/ammunition/energy/portal.dm b/code/modules/projectiles/ammunition/energy/portal.dm index 787f2e4eac76c..5aa21f5fcf677 100644 --- a/code/modules/projectiles/ammunition/energy/portal.dm +++ b/code/modules/projectiles/ammunition/energy/portal.dm @@ -2,7 +2,7 @@ projectile_type = /obj/projectile/beam/wormhole e_cost = 0 // Can't use the macro harmful = FALSE - fire_sound = 'sound/weapons/pulse3.ogg' + fire_sound = 'sound/items/weapons/pulse3.ogg' select_name = "blue" //Weakref to the gun that shot us var/datum/weakref/gun diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm index c42bcdc746e45..47940ad81c99c 100644 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ b/code/modules/projectiles/ammunition/energy/special.dm @@ -1,7 +1,7 @@ /obj/item/ammo_casing/energy/ion projectile_type = /obj/projectile/ion select_name = "ion" - fire_sound = 'sound/weapons/ionrifle.ogg' + fire_sound = 'sound/items/weapons/ionrifle.ogg' firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/blue /obj/item/ammo_casing/energy/ion/hos @@ -11,7 +11,7 @@ /obj/item/ammo_casing/energy/radiation projectile_type = /obj/projectile/energy/radiation select_name = "declone" - fire_sound = 'sound/weapons/pulse3.ogg' + fire_sound = 'sound/items/weapons/pulse3.ogg' /obj/item/ammo_casing/energy/radiation/weak projectile_type = /obj/projectile/energy/radiation/weak @@ -37,7 +37,7 @@ projectile_type = /obj/projectile/temp select_name = "freeze" e_cost = LASER_SHOTS(40, STANDARD_CELL_CHARGE * 10) - fire_sound = 'sound/weapons/pulse3.ogg' + fire_sound = 'sound/items/weapons/pulse3.ogg' firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/blue /obj/item/ammo_casing/energy/temp/hot @@ -48,6 +48,7 @@ /obj/item/ammo_casing/energy/meteor projectile_type = /obj/projectile/meteor select_name = "goddamn meteor" + newtonian_force = 3 /obj/item/ammo_casing/energy/net projectile_type = /obj/projectile/energy/net @@ -62,7 +63,7 @@ harmful = FALSE /obj/item/ammo_casing/energy/tesla_cannon - fire_sound = 'sound/magic/lightningshock.ogg' + fire_sound = 'sound/effects/magic/lightningshock.ogg' e_cost = LASER_SHOTS(33, STANDARD_CELL_CHARGE) select_name = "shock" projectile_type = /obj/projectile/energy/tesla_cannon @@ -77,18 +78,19 @@ projectile_type = /obj/projectile/bullet/marksman select_name = "marksman nanoshot" e_cost = 0 // Can't use the macro - fire_sound = 'sound/weapons/gun/revolver/shot_alt.ogg' + fire_sound = 'sound/items/weapons/gun/revolver/shot_alt.ogg' + newtonian_force = 1 /obj/item/ammo_casing/energy/fisher projectile_type = /obj/projectile/energy/fisher 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 + fire_sound = 'sound/items/weapons/gun/general/heavy_shot_suppressed.ogg' // fwip fwip fwip fwip // Used by /obj/item/gun/energy/photon /obj/item/ammo_casing/energy/photon - fire_sound = 'sound/weapons/lasercannonfire.ogg' + fire_sound = 'sound/items/weapons/lasercannonfire.ogg' e_cost = LASER_SHOTS(4, STANDARD_CELL_CHARGE) select_name = "flare" projectile_type = /obj/projectile/energy/photon diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm index a7c3f61ee750a..7fb22e42ef5a9 100644 --- a/code/modules/projectiles/ammunition/energy/stun.dm +++ b/code/modules/projectiles/ammunition/energy/stun.dm @@ -1,7 +1,7 @@ /obj/item/ammo_casing/energy/electrode projectile_type = /obj/projectile/energy/electrode select_name = "stun" - fire_sound = 'sound/weapons/taser.ogg' + fire_sound = 'sound/items/weapons/taser.ogg' e_cost = LASER_SHOTS(5, STANDARD_CELL_CHARGE) harmful = FALSE firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect @@ -10,7 +10,7 @@ e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) /obj/item/ammo_casing/energy/electrode/gun - fire_sound = 'sound/weapons/gun/pistol/shot.ogg' + fire_sound = 'sound/items/weapons/gun/pistol/shot.ogg' e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) /obj/item/ammo_casing/energy/electrode/old @@ -20,14 +20,14 @@ projectile_type = /obj/projectile/beam/disabler select_name = "disable" e_cost = LASER_SHOTS(20, STANDARD_CELL_CHARGE) - fire_sound = 'sound/weapons/taser2.ogg' + fire_sound = 'sound/items/weapons/taser2.ogg' harmful = FALSE firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/blue /obj/item/ammo_casing/energy/disabler/smg projectile_type = /obj/projectile/beam/disabler/weak e_cost = LASER_SHOTS(40, STANDARD_CELL_CHARGE) - fire_sound = 'sound/weapons/taser3.ogg' + fire_sound = 'sound/items/weapons/taser3.ogg' /obj/item/ammo_casing/energy/disabler/hos e_cost = LASER_SHOTS(20, STANDARD_CELL_CHARGE * 1.2) diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index 0ae053005c4d7..f1cbc1d9c14ed 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -4,6 +4,7 @@ slot_flags = null projectile_type = /obj/projectile/magic firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/magic + newtonian_force = 0.5 /obj/item/ammo_casing/magic/change projectile_type = /obj/projectile/magic/change diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 954e4d52793a4..c010111113c66 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -161,7 +161,7 @@ if(num_loaded) if(!silent) to_chat(user, span_notice("You load [num_loaded > 1 ? "[num_loaded] [casing_phrasing]s" : "a [casing_phrasing]"] into \the [src]!")) - playsound(src, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) + playsound(src, 'sound/items/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) update_appearance() return num_loaded @@ -174,7 +174,7 @@ A.forceMove(drop_location()) if(!user.is_holding(src) || !user.put_in_hands(A)) //incase they're using TK A.bounce_away(FALSE, NONE) - playsound(src, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) + playsound(src, 'sound/items/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) to_chat(user, span_notice("You remove a [casing_phrasing] from [src]!")) update_appearance() @@ -194,6 +194,7 @@ desc = "[initial(desc)] There [(shells_left == 1) ? "is" : "are"] [shells_left] [casing_phrasing]\s left!" /obj/item/ammo_box/update_icon_state() + . = ..() var/shells_left = LAZYLEN(stored_ammo) switch(multiple_sprites) if(AMMO_BOX_PER_BULLET) @@ -201,20 +202,19 @@ if(AMMO_BOX_FULL_EMPTY) icon_state = "[multiple_sprite_use_base ? base_icon_state : initial(icon_state)]-[shells_left ? "full" : "empty"]" +/obj/item/ammo_box/update_overlays() + . = ..() if(ammo_band_color && ammo_band_icon) - update_ammo_band() - - return ..() + . += update_ammo_band() /obj/item/ammo_box/proc/update_ammo_band() - overlays.Cut() var/band_icon = ammo_band_icon if(!(length(stored_ammo)) && ammo_band_icon_empty) band_icon = ammo_band_icon_empty var/image/ammo_band_image = image(icon, src, band_icon) ammo_band_image.color = ammo_band_color ammo_band_image.appearance_flags = RESET_COLOR|KEEP_APART - overlays += ammo_band_image + return ammo_band_image ///Count of number of bullets in the magazine /obj/item/ammo_box/magazine/proc/ammo_count(countempties = TRUE) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 1fb6cbbf94dc5..bbd89389eb809 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -4,6 +4,7 @@ icon_state = "357" ammo_type = /obj/item/ammo_casing/a357 max_ammo = 7 + caliber = CALIBER_357 multiple_sprites = AMMO_BOX_PER_BULLET item_flags = NO_MAT_REDEMPTION ammo_band_icon = "+357_ammo_band" @@ -35,6 +36,7 @@ icon_state = "38" ammo_type = /obj/item/ammo_casing/c38 max_ammo = 6 + caliber = CALIBER_38 multiple_sprites = AMMO_BOX_PER_BULLET custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*10) ammo_band_icon = "+38_ammo_band" diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index b092e207c10d6..b1f761831ee62 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -60,5 +60,5 @@ /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie max_ammo = 3 caliber = CALIBER_REBAR_SYNDIE - ammo_type = /obj/item/ammo_casing/rebar + ammo_type = /obj/item/ammo_casing/rebar/syndie diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm index 5331b5c92f8bc..6d7d922514282 100644 --- a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm @@ -53,7 +53,10 @@ ammo_type = /obj/item/ammo_casing/shotgun/incapacitate max_ammo = 3 -/obj/item/ammo_box/magazine/internal/shot/musket +/obj/item/ammo_box/magazine/internal/shot/single + name = "single-barrel shotgun internal magazine" + max_ammo = 1 + +/obj/item/ammo_box/magazine/internal/shot/single/musket name = "donk co musket internal magazine" ammo_type = /obj/item/ammo_casing/shotgun/fletchette - max_ammo = 1 diff --git a/code/modules/projectiles/boxes_magazines/internal/toy.dm b/code/modules/projectiles/boxes_magazines/internal/toy.dm index 639323f81d86d..395ad80972bb2 100644 --- a/code/modules/projectiles/boxes_magazines/internal/toy.dm +++ b/code/modules/projectiles/boxes_magazines/internal/toy.dm @@ -3,5 +3,11 @@ caliber = CALIBER_FOAM max_ammo = 4 +/obj/item/ammo_box/magazine/internal/shot/toy/riot + ammo_type = /obj/item/ammo_casing/foam_dart/riot + /obj/item/ammo_box/magazine/internal/shot/toy/crossbow max_ammo = 5 + +/obj/item/ammo_box/magazine/internal/shot/toy/crossbow/riot + ammo_type = /obj/item/ammo_casing/foam_dart/riot diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 2590609c73ba3..1595ae924dfd7 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -22,14 +22,14 @@ attack_verb_simple = list("strike", "hit", "bash") var/gun_flags = NONE - var/fire_sound = 'sound/weapons/gun/pistol/shot.ogg' + var/fire_sound = 'sound/items/weapons/gun/pistol/shot.ogg' var/vary_fire_sound = TRUE var/fire_sound_volume = 50 - var/dry_fire_sound = 'sound/weapons/gun/general/dry_fire.ogg' + var/dry_fire_sound = 'sound/items/weapons/gun/general/dry_fire.ogg' var/dry_fire_sound_volume = 30 var/suppressed = null //whether or not a message is displayed when fired var/can_suppress = FALSE - var/suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' + var/suppressed_sound = 'sound/items/weapons/gun/general/heavy_shot_suppressed.ogg' var/suppressed_volume = 60 var/can_unsuppress = TRUE /// whether a gun can be unsuppressed. for ballistics, also determines if it generates a suppressor overlay var/recoil = 0 //boom boom shake the room @@ -77,7 +77,7 @@ pin = new pin(src) add_seclight_point() -// give_gun_safeties() // SKYRAT EDIT ADDITION - GUN SAFETIES //BUBBER EDIT REMOVAL + give_gun_safeties() // SKYRAT EDIT ADDITION - GUN SAFETIES give_manufacturer_examine() // SKYRAT EDIT ADDITON - MANUFACTURER EXAMINE add_bayonet_point() @@ -220,7 +220,7 @@ ignored_mobs = user ) - if(chambered.integrity_damage) + if(chambered?.integrity_damage) take_damage(chambered.integrity_damage, sound_effect = FALSE) /obj/item/gun/atom_destruction(damage_flag) @@ -229,7 +229,7 @@ var/mob/living/holder = loc if(holder.is_holding(src) && holder.stat < UNCONSCIOUS) to_chat(holder, span_boldwarning("[src] breaks down!")) - holder.playsound_local(get_turf(src), 'sound/weapons/smash.ogg', 50, TRUE) + holder.playsound_local(get_turf(src), 'sound/items/weapons/smash.ogg', 50, TRUE) return ..() /obj/item/gun/emp_act(severity) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 9471051440ee7..27d63375474c4 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -5,43 +5,44 @@ name = "projectile gun" icon_state = "debug" w_class = WEIGHT_CLASS_NORMAL - pickup_sound = 'sound/items/gun_pick_up.ogg' - drop_sound = 'sound/items/gun_drop.ogg' + pickup_sound = 'sound/items/handling/gun/gun_pick_up.ogg' + drop_sound = 'sound/items/handling/gun/gun_drop.ogg' + sound_vary = TRUE ///sound when inserting magazine - var/load_sound = 'sound/weapons/gun/general/magazine_insert_full.ogg' + var/load_sound = 'sound/items/weapons/gun/general/magazine_insert_full.ogg' ///sound when inserting an empty magazine - var/load_empty_sound = 'sound/weapons/gun/general/magazine_insert_empty.ogg' + var/load_empty_sound = 'sound/items/weapons/gun/general/magazine_insert_empty.ogg' ///volume of loading sound var/load_sound_volume = 40 ///whether loading sound should vary var/load_sound_vary = TRUE ///sound of racking - var/rack_sound = 'sound/weapons/gun/general/bolt_rack.ogg' + var/rack_sound = 'sound/items/weapons/gun/general/bolt_rack.ogg' ///volume of racking var/rack_sound_volume = 60 ///whether racking sound should vary var/rack_sound_vary = TRUE ///sound of when the bolt is locked back manually - var/lock_back_sound = 'sound/weapons/gun/general/slide_lock_1.ogg' + var/lock_back_sound = 'sound/items/weapons/gun/general/slide_lock_1.ogg' ///volume of lock back var/lock_back_sound_volume = 60 ///whether lock back varies var/lock_back_sound_vary = TRUE ///Sound of ejecting a magazine - var/eject_sound = 'sound/weapons/gun/general/magazine_remove_full.ogg' + var/eject_sound = 'sound/items/weapons/gun/general/magazine_remove_full.ogg' ///sound of ejecting an empty magazine - var/eject_empty_sound = 'sound/weapons/gun/general/magazine_remove_empty.ogg' + var/eject_empty_sound = 'sound/items/weapons/gun/general/magazine_remove_empty.ogg' ///volume of ejecting a magazine var/eject_sound_volume = 40 ///whether eject sound should vary var/eject_sound_vary = TRUE ///sound of dropping the bolt or releasing a slide - var/bolt_drop_sound = 'sound/weapons/gun/general/bolt_drop.ogg' + var/bolt_drop_sound = 'sound/items/weapons/gun/general/bolt_drop.ogg' ///volume of bolt drop/slide release var/bolt_drop_sound_volume = 60 ///empty alarm sound (if enabled) - var/empty_alarm_sound = 'sound/weapons/gun/general/empty_alarm.ogg' + var/empty_alarm_sound = 'sound/items/weapons/gun/general/empty_alarm.ogg' ///empty alarm volume sound var/empty_alarm_volume = 70 ///whether empty alarm sound varies @@ -173,11 +174,11 @@ if(suppressed) playsound(src, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) if(play_click && click_on_low_ammo) - playsound(src, 'sound/weapons/gun/general/ballistic_click.ogg', suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0, frequency = click_frequency_to_use) + playsound(src, 'sound/items/weapons/gun/general/ballistic_click.ogg', suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0, frequency = click_frequency_to_use) else playsound(src, fire_sound, fire_sound_volume, vary_fire_sound) if(play_click && click_on_low_ammo) - playsound(src, 'sound/weapons/gun/general/ballistic_click.ogg', fire_sound_volume, vary_fire_sound, frequency = click_frequency_to_use) + playsound(src, 'sound/items/weapons/gun/general/ballistic_click.ogg', fire_sound_volume, vary_fire_sound, frequency = click_frequency_to_use) /** @@ -283,7 +284,7 @@ fire_delay = initial(fire_delay) balloon_alert(user, "switched to [burst_size]-round burst") - playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(user, 'sound/items/weapons/empty.ogg', 100, TRUE) update_appearance() update_item_action_buttons() @@ -397,7 +398,6 @@ balloon_alert(user, "[magazine_wording] unloaded") update_appearance() - /obj/item/gun/ballistic/can_shoot() return chambered?.loaded_projectile @@ -480,6 +480,8 @@ return ..() /obj/item/gun/ballistic/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) + if(isnull(chambered)) + return ..() if(can_misfire && chambered.can_misfire != FALSE) misfire_probability += misfire_percentage_increment misfire_probability = clamp(misfire_probability, 0, misfire_probability_cap) diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index a895cbe88e44f..f09f650aca73d 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -5,10 +5,10 @@ fire_delay = 2 actions_types = list(/datum/action/item_action/toggle_firemode) semi_auto = TRUE - fire_sound = 'sound/weapons/gun/smg/shot.ogg' + fire_sound = 'sound/items/weapons/gun/smg/shot.ogg' fire_sound_volume = 90 - rack_sound = 'sound/weapons/gun/smg/smgrack.ogg' - suppressed_sound = 'sound/weapons/gun/smg/shot_suppressed.ogg' + rack_sound = 'sound/items/weapons/gun/smg/smgrack.ogg' + suppressed_sound = 'sound/items/weapons/gun/smg/shot_suppressed.ogg' burst_fire_selection = TRUE /obj/item/gun/ballistic/automatic/proto @@ -105,9 +105,9 @@ click_on_low_ammo = FALSE /// List of the possible firing sounds var/list/firing_sound_list = list( - 'sound/weapons/gun/smartgun/smartgun_shoot_1.ogg', - 'sound/weapons/gun/smartgun/smartgun_shoot_2.ogg', - 'sound/weapons/gun/smartgun/smartgun_shoot_3.ogg', + 'sound/items/weapons/gun/smartgun/smartgun_shoot_1.ogg', + 'sound/items/weapons/gun/smartgun/smartgun_shoot_2.ogg', + 'sound/items/weapons/gun/smartgun/smartgun_shoot_3.ogg', ) /obj/item/gun/ballistic/automatic/smartgun/fire_sounds() @@ -123,7 +123,7 @@ bolt_type = BOLT_TYPE_OPEN show_bolt_icon = FALSE mag_display = TRUE - rack_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' + rack_sound = 'sound/items/weapons/gun/pistol/slide_lock.ogg' /** * Weak uzi for syndicate chimps. It comes in a 4 TC kit. @@ -153,7 +153,7 @@ pin = /obj/item/firing_pin/implant/pindicate mag_display = TRUE empty_indicator = TRUE - fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg' + fire_sound = 'sound/items/weapons/gun/smg/shot_alt.ogg' /obj/item/gun/ballistic/automatic/m90/Initialize(mapload) . = ..() @@ -254,9 +254,9 @@ mag_display = TRUE mag_display_ammo = TRUE tac_reloads = FALSE - fire_sound = 'sound/weapons/gun/l6/shot.ogg' - rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg' - suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' + fire_sound = 'sound/items/weapons/gun/l6/shot.ogg' + rack_sound = 'sound/items/weapons/gun/l6/l6_rack.ogg' + suppressed_sound = 'sound/items/weapons/gun/general/heavy_shot_suppressed.ogg' var/cover_open = FALSE /obj/item/gun/ballistic/automatic/l6_saw/unrestricted @@ -277,7 +277,7 @@ /obj/item/gun/ballistic/automatic/l6_saw/click_alt(mob/user) cover_open = !cover_open balloon_alert(user, "cover [cover_open ? "opened" : "closed"]") - playsound(src, 'sound/weapons/gun/l6/l6_door.ogg', 60, TRUE) + playsound(src, 'sound/items/weapons/gun/l6/l6_door.ogg', 60, TRUE) update_appearance() return CLICK_ACTION_SUCCESS @@ -319,7 +319,7 @@ // Old Semi-Auto Rifle // /obj/item/gun/ballistic/automatic/surplus - name = "Surplus Rifle" + name = "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_state = "surplus" worn_icon_state = null @@ -348,5 +348,5 @@ can_suppress = FALSE burst_size = 0 actions_types = list() - fire_sound = 'sound/weapons/laser.ogg' + fire_sound = 'sound/items/weapons/laser.ogg' casing_ejector = FALSE diff --git a/code/modules/projectiles/guns/ballistic/bows/_bow.dm b/code/modules/projectiles/guns/ballistic/bows/_bow.dm index 358e87929e2b4..5bcec2deeb7e2 100644 --- a/code/modules/projectiles/guns/ballistic/bows/_bow.dm +++ b/code/modules/projectiles/guns/ballistic/bows/_bow.dm @@ -8,8 +8,8 @@ icon_state = "bow" inhand_icon_state = "bow" base_icon_state = "bow" - load_sound = 'sound/weapons/gun/general/ballistic_click.ogg' - fire_sound = 'sound/weapons/gun/bow/bow_fire.ogg' + load_sound = 'sound/items/weapons/gun/general/ballistic_click.ogg' + fire_sound = 'sound/items/weapons/gun/bow/bow_fire.ogg' accepted_magazine_type = /obj/item/ammo_box/magazine/internal/bow force = 15 pinless = TRUE @@ -32,13 +32,7 @@ /obj/item/gun/ballistic/bow/update_overlays() . = ..() if(chambered) - // . += "[chambered.base_icon_state][drawn ? "_drawn" : ""]" SKYRAT EDIT REMOVAL - // SKYRAT EDIT START - var/icon_state = icon_exists(/obj/item/gun/ballistic/bow::icon, chambered.base_icon_state) ? chambered.base_icon_state : "arrow" - if(drawn) - icon_state += "_drawn" - . += icon(/obj/item/gun/ballistic/bow::icon, icon_state) - // SKYRAT EDIT END + . += "[chambered.base_icon_state][drawn ? "_drawn" : ""]" /obj/item/gun/ballistic/bow/click_alt(mob/user) if(isnull(chambered)) @@ -71,7 +65,7 @@ return balloon_alert(user, "[drawn ? "string released" : "string drawn"]") drawn = !drawn - playsound(src, 'sound/weapons/gun/bow/bow_draw.ogg', 25, TRUE) + playsound(src, 'sound/items/weapons/gun/bow/bow_draw.ogg', 25, TRUE) update_appearance() /obj/item/gun/ballistic/bow/try_fire_gun(atom/target, mob/living/user, params) @@ -93,7 +87,7 @@ if(slot != ITEM_SLOT_HANDS && chambered) balloon_alert(user, "the arrow falls out!") if(drawn) - playsound(src, 'sound/weapons/gun/bow/bow_fire.ogg', 25, TRUE) + playsound(src, 'sound/items/weapons/gun/bow/bow_fire.ogg', 25, TRUE) drop_arrow() @@ -105,7 +99,7 @@ if(ismob(loc) || !chambered) return if(drawn) - playsound(src, 'sound/weapons/gun/bow/bow_fire.ogg', 25, TRUE) + playsound(src, 'sound/items/weapons/gun/bow/bow_fire.ogg', 25, TRUE) drop_arrow() /obj/item/gun/ballistic/bow/shoot_with_empty_chamber(mob/living/user) diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index d3b74e217285e..49bc25818948d 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -7,7 +7,7 @@ icon_state = "dshotgun_sawn" inhand_icon_state = "gun" accepted_magazine_type = /obj/item/ammo_box/magazine/internal/grenadelauncher - fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' + fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg' w_class = WEIGHT_CLASS_NORMAL pin = /obj/item/firing_pin/implant/pindicate bolt_type = BOLT_TYPE_NO_BOLT @@ -35,7 +35,7 @@ name = "gyrojet pistol" desc = "A prototype pistol designed to fire self propelled rockets." icon_state = "gyropistol" - fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' + fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg' accepted_magazine_type = /obj/item/ammo_box/magazine/m75 burst_size = 1 fire_delay = 0 @@ -53,7 +53,7 @@ worn_icon_state = "rocketlauncher" SET_BASE_PIXEL(-8, 0) accepted_magazine_type = /obj/item/ammo_box/magazine/internal/rocketlauncher - fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' + fire_sound = 'sound/items/weapons/gun/general/rocket_launch.ogg' slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY can_suppress = FALSE diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 6d272dce34e71..5bf89d4876f19 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -10,16 +10,16 @@ fire_delay = 0 actions_types = list() bolt_type = BOLT_TYPE_LOCKING - fire_sound = 'sound/weapons/gun/pistol/shot.ogg' - dry_fire_sound = 'sound/weapons/gun/pistol/dry_fire.ogg' - suppressed_sound = 'sound/weapons/gun/pistol/shot_suppressed.ogg' - load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' - load_empty_sound = 'sound/weapons/gun/pistol/mag_insert.ogg' - eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg' - eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' - rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg' - lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg' - bolt_drop_sound = 'sound/weapons/gun/pistol/drop_small.ogg' + fire_sound = 'sound/items/weapons/gun/pistol/shot.ogg' + dry_fire_sound = 'sound/items/weapons/gun/pistol/dry_fire.ogg' + suppressed_sound = 'sound/items/weapons/gun/pistol/shot_suppressed.ogg' + load_sound = 'sound/items/weapons/gun/pistol/mag_insert.ogg' + load_empty_sound = 'sound/items/weapons/gun/pistol/mag_insert.ogg' + eject_sound = 'sound/items/weapons/gun/pistol/mag_release.ogg' + eject_empty_sound = 'sound/items/weapons/gun/pistol/mag_release.ogg' + rack_sound = 'sound/items/weapons/gun/pistol/rack_small.ogg' + lock_back_sound = 'sound/items/weapons/gun/pistol/lock_small.ogg' + bolt_drop_sound = 'sound/items/weapons/gun/pistol/drop_small.ogg' fire_sound_volume = 90 bolt_wording = "slide" suppressor_x_offset = 10 @@ -111,10 +111,10 @@ w_class = WEIGHT_CLASS_NORMAL accepted_magazine_type = /obj/item/ammo_box/magazine/m45 can_suppress = FALSE - fire_sound = 'sound/weapons/gun/pistol/shot_alt.ogg' - rack_sound = 'sound/weapons/gun/pistol/rack.ogg' - lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' - bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' + fire_sound = 'sound/items/weapons/gun/pistol/shot_alt.ogg' + rack_sound = 'sound/items/weapons/gun/pistol/rack.ogg' + lock_back_sound = 'sound/items/weapons/gun/pistol/slide_lock.ogg' + bolt_drop_sound = 'sound/items/weapons/gun/pistol/slide_drop.ogg' /** * Weak 1911 for syndicate chimps. It comes in a 4 TC kit. @@ -139,10 +139,10 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/m50 can_suppress = FALSE mag_display = TRUE - fire_sound = 'sound/weapons/gun/rifle/shot.ogg' - rack_sound = 'sound/weapons/gun/pistol/rack.ogg' - lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' - bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' + fire_sound = 'sound/items/weapons/gun/rifle/shot.ogg' + rack_sound = 'sound/items/weapons/gun/pistol/rack.ogg' + lock_back_sound = 'sound/items/weapons/gun/pistol/slide_lock.ogg' + bolt_drop_sound = 'sound/items/weapons/gun/pistol/slide_drop.ogg' /obj/item/gun/ballistic/automatic/pistol/deagle/contraband @@ -184,6 +184,20 @@ actions_types = list(/datum/action/item_action/toggle_firemode) obj_flags = UNIQUE_RENAME // if you did the sidequest, you get the customization +/obj/item/gun/ballistic/automatic/pistol/deagle/regal + name = "\improper Regal Condor" + desc = "Unlike the Desert Eagle, this weapon seems to utilize some kind of advanced internal stabilization system to significantly \ + reduce felt recoil and increase overall accuracy, at the cost of using a smaller caliber. \ + This does allow it to fire a very quick 2-round burst. Uses 10mm ammo." + icon_state = "reagle" + inhand_icon_state = "deagleg" + burst_size = 2 + fire_delay = 1 + projectile_damage_multiplier = 1.25 + accepted_magazine_type = /obj/item/ammo_box/magazine/r10mm + actions_types = list(/datum/action/item_action/toggle_firemode) + obj_flags = UNIQUE_RENAME // if you did the sidequest, you get the customization + /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 diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index cd7d75556727b..c073c6a6aafbc 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -3,11 +3,11 @@ desc = "A suspicious revolver. Uses .357 ammo." icon_state = "revolver" accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder - fire_sound = 'sound/weapons/gun/revolver/shot_alt.ogg' - load_sound = 'sound/weapons/gun/revolver/load_bullet.ogg' - eject_sound = 'sound/weapons/gun/revolver/empty.ogg' + fire_sound = 'sound/items/weapons/gun/revolver/shot_alt.ogg' + load_sound = 'sound/items/weapons/gun/revolver/load_bullet.ogg' + eject_sound = 'sound/items/weapons/gun/revolver/empty.ogg' fire_sound_volume = 90 - dry_fire_sound = 'sound/weapons/gun/revolver/dry_fire.ogg' + dry_fire_sound = 'sound/items/weapons/gun/revolver/dry_fire.ogg' casing_ejector = FALSE internal_magazine = TRUE bolt_type = BOLT_TYPE_NO_BOLT @@ -48,11 +48,11 @@ if(suppressed) playsound(src, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0) if(play_click) - playsound(src, 'sound/weapons/gun/general/ballistic_click.ogg', suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0, frequency = click_frequency_to_use) + playsound(src, 'sound/items/weapons/gun/general/ballistic_click.ogg', suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0, frequency = click_frequency_to_use) else playsound(src, fire_sound, fire_sound_volume, vary_fire_sound) if(play_click) - playsound(src, 'sound/weapons/gun/general/ballistic_click.ogg', fire_sound_volume, vary_fire_sound, frequency = click_frequency_to_use) + playsound(src, 'sound/items/weapons/gun/general/ballistic_click.ogg', fire_sound_volume, vary_fire_sound, frequency = click_frequency_to_use) /obj/item/gun/ballistic/revolver/verb/spin() @@ -107,7 +107,7 @@ desc = "A classic, if not outdated, lethal firearm. Uses .38 Special rounds." accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 icon_state = "c38" - fire_sound = 'sound/weapons/gun/revolver/shot.ogg' + fire_sound = 'sound/items/weapons/gun/revolver/shot.ogg' /obj/item/gun/ballistic/revolver/c38/detective name = "\improper Colt Detective Special" @@ -115,9 +115,9 @@ can_modify_ammo = TRUE initial_caliber = CALIBER_38 - initial_fire_sound = 'sound/weapons/gun/revolver/shot.ogg' + initial_fire_sound = 'sound/items/weapons/gun/revolver/shot.ogg' alternative_caliber = CALIBER_357 - alternative_fire_sound = 'sound/weapons/gun/revolver/shot_alt.ogg' + alternative_fire_sound = 'sound/items/weapons/gun/revolver/shot_alt.ogg' alternative_ammo_misfires = TRUE misfire_probability = 0 misfire_percentage_increment = 25 //about 1 in 4 rounds, which increases rapidly every shot @@ -160,7 +160,7 @@ name = "\improper Golden revolver" desc = "This ain't no game, ain't never been no show, And I'll gladly gun down the oldest lady you know. Uses .357 ammo." icon_state = "goldrevolver" - fire_sound = 'sound/weapons/resonator_blast.ogg' + fire_sound = 'sound/items/weapons/resonator_blast.ogg' recoil = 8 pin = /obj/item/firing_pin diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 024f8353ddb48..855547dd5f313 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -9,10 +9,10 @@ bolt_type = BOLT_TYPE_LOCKING semi_auto = FALSE internal_magazine = TRUE - fire_sound = 'sound/weapons/gun/rifle/shot_heavy.ogg' + fire_sound = 'sound/items/weapons/gun/rifle/shot_heavy.ogg' fire_sound_volume = 90 - rack_sound = 'sound/weapons/gun/rifle/bolt_out.ogg' - bolt_drop_sound = 'sound/weapons/gun/rifle/bolt_in.ogg' + rack_sound = 'sound/items/weapons/gun/rifle/bolt_out.ogg' + bolt_drop_sound = 'sound/items/weapons/gun/rifle/bolt_in.ogg' tac_reloads = FALSE /obj/item/gun/ballistic/rifle/rack(mob/user = null) @@ -83,7 +83,7 @@ else unjam_chance += 10 balloon_alert(user, "jammed!") - playsound(user,'sound/weapons/jammed.ogg', 75, TRUE) + playsound(user,'sound/items/weapons/jammed.ogg', 75, TRUE) return FALSE ..() @@ -126,7 +126,7 @@ inhand_icon_state = "speargun" worn_icon_state = "speargun" accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/harpoon - fire_sound = 'sound/weapons/gun/sniper/shot.ogg' + fire_sound = 'sound/items/weapons/gun/sniper/shot.ogg' can_be_sawn_off = FALSE SET_BASE_PIXEL(0, 0) @@ -192,19 +192,18 @@ spread = 50 /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. \ - Additionally, can fire specialty ammo made from the materials in the atmos crystalizer - zaukerite, metallic hydrogen, and healium crytals all work. \ - Very slow to reload - you can craft the crossbow with a crowbar to try loosen the crossbar, but risks a misfire, or worse..." + name = "heated rebar crossbow" + desc = "A handcrafted crossbow. \ + Aside from conventional sharpened iron rods, it can also fire specialty ammo made from the atmos crystalizer - zaukerite, metallic hydrogen, and healium rods all work. \ + Very slow to reload - you can craft the crossbow with a crowbar to loosen the crossbar, but risk 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 + rack_sound = 'sound/items/weapons/gun/sniper/rack.ogg' mag_display = FALSE empty_indicator = TRUE - bolt_type = BOLT_TYPE_LOCKING + bolt_type = BOLT_TYPE_OPEN semi_auto = FALSE internal_magazine = TRUE can_modify_ammo = FALSE @@ -212,7 +211,6 @@ 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 @@ -250,12 +248,24 @@ return FALSE return ..() +/obj/item/gun/ballistic/rifle/rebarxbow/shoot_with_empty_chamber(mob/living/user) + if(chambered || !magazine || !length(magazine.contents)) + return ..() + drop_bolt(user) + /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/update_overlays() + . = ..() + if(!magazine) + . += "[initial(icon_state)]" + "_empty" + if(!bolt_locked) + . += "[initial(icon_state)]" + "_bolt_locked" + /obj/item/gun/ballistic/rifle/rebarxbow/forced - name = "Stressed Rebar Crossbow" + name = "stressed rebar crossbow" desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a draw this crossbow a bit faster. 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 @@ -264,9 +274,9 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force /obj/item/gun/ballistic/rifle/rebarxbow/syndie - name = "Syndicate Rebar Crossbow" + 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. Compatable with all known crossbow ammunition." + Holds three shots without a chance of exploding, and features a built in scope. Compatible with all known crossbow ammunition." icon_state = "rebarxbowsyndie" inhand_icon_state = "rebarxbowsyndie" worn_icon_state = "rebarxbowsyndie" @@ -287,7 +297,7 @@ icon_state = "pipegun" inhand_icon_state = "pipegun" worn_icon_state = "pipegun" - fire_sound = 'sound/weapons/gun/sniper/shot.ogg' + fire_sound = 'sound/items/weapons/gun/sniper/shot.ogg' accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun projectile_damage_multiplier = 1.35 @@ -414,11 +424,11 @@ weapon_weight = WEAPON_HEAVY inhand_icon_state = "sniper" worn_icon_state = null - fire_sound = 'sound/weapons/gun/sniper/shot.ogg' + fire_sound = 'sound/items/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' + load_sound = 'sound/items/weapons/gun/sniper/mag_insert.ogg' + rack_sound = 'sound/items/weapons/gun/sniper/rack.ogg' + suppressed_sound = 'sound/items/weapons/gun/general/heavy_shot_suppressed.ogg' recoil = 2 accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds internal_magazine = FALSE diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 8ae17298afe11..6c722e5772d40 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -8,10 +8,10 @@ inhand_icon_state = "shotgun" inhand_x_dimension = 64 inhand_y_dimension = 64 - fire_sound = 'sound/weapons/gun/shotgun/shot.ogg' + fire_sound = 'sound/items/weapons/gun/shotgun/shot.ogg' fire_sound_volume = 90 - rack_sound = 'sound/weapons/gun/shotgun/rack.ogg' - load_sound = 'sound/weapons/gun/shotgun/insert_shell.ogg' + rack_sound = 'sound/items/weapons/gun/shotgun/rack.ogg' + load_sound = 'sound/items/weapons/gun/shotgun/insert_shell.ogg' w_class = WEIGHT_CLASS_BULKY force = 10 obj_flags = CONDUCTS_ELECTRICITY @@ -157,9 +157,9 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/m12g can_suppress = FALSE burst_size = 2 - fire_delay = 10 //Skyrat edit - Original: 1 + fire_delay = 5 //Skyrat edit - Original: 1 pin = /obj/item/firing_pin/implant/pindicate - fire_sound = 'sound/weapons/gun/shotgun/shot_alt.ogg' + fire_sound = 'sound/items/weapons/gun/shotgun/shot_alt.ogg' actions_types = list(/datum/action/item_action/toggle_firemode) mag_display = TRUE empty_indicator = TRUE @@ -287,7 +287,6 @@ can_be_sawn_off = TRUE pb_knockback = 3 // it's a super shotgun! - /obj/item/gun/ballistic/shotgun/doublebarrel/sawoff(mob/user) . = ..() if(.) @@ -322,7 +321,7 @@ sharpness = SHARP_POINTY //it does in fact, have a hook on it attack_verb_continuous = list("slashes", "hooks", "stabs") attack_verb_simple = list("slash", "hook", "stab") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' //our hook gun! var/obj/item/gun/magic/hook/bounty/hook @@ -343,6 +342,32 @@ return hook.try_fire_gun(target, user, params) return ..() +///An underpowered shotgun given to Pun Pun when the station job trait roll. +/obj/item/gun/ballistic/shotgun/monkey + name = "\improper Barback's Shot" + desc = "A chimp-sized, single-shot and break-action shotgun with an unpractical stock." + icon_state = "chimp_shottie" + inhand_icon_state = "shotgun" + lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' + inhand_x_dimension = 32 + inhand_y_dimension = 32 + force = 8 + obj_flags = CONDUCTS_ELECTRICITY + slot_flags = NONE + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/single + obj_flags = UNIQUE_RENAME + w_class = WEIGHT_CLASS_NORMAL + weapon_weight = WEAPON_MEDIUM + semi_auto = TRUE + bolt_type = BOLT_TYPE_NO_BOLT + spread = 10 + projectile_damage_multiplier = 0.5 + projectile_wound_bonus = -25 + recoil = 1 + pin = /obj/item/firing_pin/monkey + pb_knockback = 1 + /obj/item/gun/ballistic/shotgun/musket name = "\improper Donk Co. Musket" icon = 'icons/obj/weapons/guns/ballistic.dmi' @@ -356,4 +381,4 @@ bolt_type = BOLT_TYPE_LOCKING bolt_wording = "bolt" internal_magazine = TRUE - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/musket + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/single/musket diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index cb90438f56b4f..bd84e5f794188 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -15,9 +15,8 @@ gun_flags = TOY_FIREARM_OVERLAY | NOT_A_REAL_GUN casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/toy/unrestricted - pin = /obj/item/firing_pin - +/obj/item/gun/ballistic/automatic/toy/riot + spawn_magazine_type = /obj/item/ammo_box/magazine/toy/smg/riot /obj/item/gun/ballistic/automatic/pistol/toy name = "foam force pistol" desc = "A small, easily concealable toy handgun. Ages 8 and up." @@ -52,8 +51,8 @@ if(chambered && !chambered.loaded_projectile) qdel(chambered) -/obj/item/gun/ballistic/shotgun/toy/unrestricted - pin = /obj/item/firing_pin +/obj/item/gun/ballistic/shotgun/toy/riot + spawn_magazine_type = /obj/item/ammo_box/magazine/internal/shot/toy/riot /obj/item/gun/ballistic/shotgun/toy/crossbow name = "foam force crossbow" @@ -73,6 +72,9 @@ w_class = WEIGHT_CLASS_SMALL gun_flags = NONE +/obj/item/gun/ballistic/shotgun/toy/crossbow/riot + spawn_magazine_type = /obj/item/ammo_box/magazine/internal/shot/toy/crossbow/riot + /obj/item/gun/ballistic/automatic/c20r/toy //This is the syndicate variant with syndicate firing pin and riot darts. name = "donksoft SMG" desc = "A bullpup three-round burst toy SMG, designated 'C-20r'. Ages 8 and up." diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index e3b7cc44d5960..05d25cc289267 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -3,8 +3,9 @@ name = "energy gun" desc = "A basic energy-based gun." icon = 'icons/obj/weapons/guns/energy.dmi' - pickup_sound = 'sound/items/gun_pick_up.ogg' - drop_sound = 'sound/items/gun_drop.ogg' + pickup_sound = 'sound/items/handling/gun/gun_pick_up.ogg' + drop_sound = 'sound/items/handling/gun/gun_drop.ogg' + sound_vary = TRUE /// What type of power cell this uses var/obj/item/stock_parts/power_store/cell diff --git a/code/modules/projectiles/guns/energy/beam_rifle.dm b/code/modules/projectiles/guns/energy/beam_rifle.dm index c9550e0fc2d6f..ba28ecb7a03a5 100644 --- a/code/modules/projectiles/guns/energy/beam_rifle.dm +++ b/code/modules/projectiles/guns/energy/beam_rifle.dm @@ -6,7 +6,7 @@ icon_state = "esniper" inhand_icon_state = null worn_icon_state = null - fire_sound = 'sound/weapons/beam_sniper.ogg' + fire_sound = 'sound/items/weapons/beam_sniper.ogg' slot_flags = ITEM_SLOT_BACK force = 20 //This is maybe the sanest part of this weapon. custom_materials = null @@ -38,12 +38,12 @@ projectile_type = /obj/projectile/beam/event_horizon select_name = "doomsday" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE) - fire_sound = 'sound/weapons/beam_sniper.ogg' + fire_sound = 'sound/items/weapons/beam_sniper.ogg' /obj/projectile/beam/event_horizon name = "anti-existential beam" icon = null - hitsound = 'sound/effects/explosion3.ogg' + hitsound = 'sound/effects/explosion/explosion3.ogg' damage = 100 // Does it matter? damage_type = BURN armor_flag = ENERGY diff --git a/code/modules/projectiles/guns/energy/crank_guns.dm b/code/modules/projectiles/guns/energy/crank_guns.dm index fa56075990ec5..32aa65827cfb0 100644 --- a/code/modules/projectiles/guns/energy/crank_guns.dm +++ b/code/modules/projectiles/guns/energy/crank_guns.dm @@ -13,14 +13,14 @@ /obj/item/gun/energy/laser/musket/Initialize(mapload) . = ..() - AddComponent(/datum/component/two_handed, require_twohands = TRUE, force_wielded = 10) AddComponent( \ /datum/component/crank_recharge, \ charging_cell = get_cell(), \ charge_amount = STANDARD_CELL_CHARGE * 0.5, \ cooldown_time = 2 SECONDS, \ - charge_sound = 'sound/weapons/laser_crank.ogg', \ + charge_sound = 'sound/items/weapons/laser_crank.ogg', \ charge_sound_cooldown_time = 1.8 SECONDS, \ + charge_move = IGNORE_USER_LOC_CHANGE, \ ) /obj/item/gun/energy/laser/musket/update_icon_state() @@ -52,8 +52,9 @@ charging_cell = get_cell(), \ charge_amount = STANDARD_CELL_CHARGE, \ cooldown_time = 2 SECONDS, \ - charge_sound = 'sound/weapons/laser_crank.ogg', \ + charge_sound = 'sound/items/weapons/laser_crank.ogg', \ charge_sound_cooldown_time = 1.8 SECONDS, \ + charge_move = IGNORE_USER_LOC_CHANGE, \ ) /obj/item/gun/energy/disabler/smoothbore/add_seclight_point() @@ -99,7 +100,7 @@ spin_to_win = TRUE, \ charge_amount = LASER_SHOTS(8, STANDARD_CELL_CHARGE), \ cooldown_time = 0.8 SECONDS, \ - charge_sound = 'sound/weapons/kinetic_reload.ogg', \ + charge_sound = 'sound/items/weapons/kinetic_reload.ogg', \ charge_sound_cooldown_time = 0.8 SECONDS, \ ) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index b539c5a9d4d0e..d94e7c67d13fd 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -125,7 +125,7 @@ /obj/item/gun/energy/recharge/kinetic_accelerator/proc/check_menu(mob/living/carbon/human/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE @@ -175,7 +175,8 @@ projectile_type = /obj/projectile/kinetic select_name = "kinetic" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) - fire_sound = 'sound/weapons/kinetic_accel.ogg' + fire_sound = 'sound/items/weapons/kinetic_accel.ogg' + newtonian_force = 1 /obj/item/ammo_casing/energy/kinetic/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") ..() @@ -317,7 +318,7 @@ if(transfer_to_loc && !user.transferItemToLoc(src, KA)) return to_chat(user, span_notice("You install the modkit.")) - playsound(loc, 'sound/items/screwdriver.ogg', 100, TRUE) + playsound(loc, 'sound/items/tools/screwdriver.ogg', 100, TRUE) KA.modkits |= src else to_chat(user, span_notice("The modkit you're trying to install would conflict with an already installed modkit. Remove existing modkits first.")) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index be949e9e74957..c11a58cb20d96 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -141,7 +141,7 @@ /obj/item/ammo_casing/energy/laser/accelerator projectile_type = /obj/projectile/beam/laser/accelerator select_name = "accelerator" - fire_sound = 'sound/weapons/lasercannonfire.ogg' + fire_sound = 'sound/items/weapons/lasercannonfire.ogg' /obj/projectile/beam/laser/accelerator name = "accelerator laser" diff --git a/code/modules/projectiles/guns/energy/recharge.dm b/code/modules/projectiles/guns/energy/recharge.dm index 504dc5c9e0f4a..f7231847b2567 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/kinetic_reload.ogg' + var/recharge_sound = 'sound/items/weapons/kinetic_reload.ogg' /// An ID for our recharging timer. var/recharge_timerid /// Do we recharge slower with more of our type? diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index b3b3935a86c7d..a50ee36ae47a3 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -95,7 +95,7 @@ can_charge = FALSE gun_flags = NOT_A_REAL_GUN heat = 3800 - usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg') + usesound = list('sound/items/tools/welder.ogg', 'sound/items/tools/welder2.ogg') tool_behaviour = TOOL_WELDER toolspeed = 0.7 //plasmacutters can be used as welders, and are faster than standard welders @@ -106,7 +106,7 @@ speed = 2.5 SECONDS, \ effectiveness = 105, \ bonus_modifier = 0, \ - butcher_sound = 'sound/weapons/plasma_cutter.ogg', \ + butcher_sound = 'sound/items/weapons/plasma_cutter.ogg', \ ) AddElement(/datum/element/tool_flash, 1) @@ -141,7 +141,7 @@ // Can we weld? Plasma cutter does not use charge continuously. // Amount cannot be defaulted to 1: most of the code specifies 0 in the call. -/obj/item/gun/energy/plasmacutter/tool_use_check(mob/living/user, amount) +/obj/item/gun/energy/plasmacutter/tool_use_check(mob/living/user, amount, heat_required) if(QDELETED(cell)) balloon_alert(user, "no cell inserted!") return FALSE @@ -151,6 +151,9 @@ if(amount ? cell.charge < PLASMA_CUTTER_CHARGE_WELD * amount : cell.charge < PLASMA_CUTTER_CHARGE_WELD) balloon_alert(user, "not enough charge!") return FALSE + if(heat < heat_required) + to_chat(user, span_warning("[src] is not hot enough to complete this task!")) + return FALSE return TRUE @@ -376,7 +379,7 @@ icon = 'icons/obj/weapons/guns/ballistic.dmi' icon_state = "revolver" ammo_type = list(/obj/item/ammo_casing/energy/marksman) - fire_sound = 'sound/weapons/gun/revolver/shot_alt.ogg' + fire_sound = 'sound/items/weapons/gun/revolver/shot_alt.ogg' automatic_charge_overlays = FALSE /// How many coins we can have at a time. Set to 0 for infinite var/max_coins = 4 @@ -437,7 +440,7 @@ desc = "A competitive design to the tesla cannon, that instead of charging latent electrons, releases energy into photons. Eye protection is recommended." icon_state = "photon" inhand_icon_state = "tesla" - fire_sound = 'sound/weapons/lasercannonfire.ogg' + fire_sound = 'sound/items/weapons/lasercannonfire.ogg' ammo_type = list(/obj/item/ammo_casing/energy/photon) shaded_charge = TRUE weapon_weight = WEAPON_HEAVY diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 0c1c27c9c0759..44d50188eb76b 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -6,7 +6,7 @@ inhand_icon_state = "staff" 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' + fire_sound = 'sound/items/weapons/emitter.ogg' obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_HUGE ///what kind of magic is this diff --git a/code/modules/projectiles/guns/magic/arcane_barrage.dm b/code/modules/projectiles/guns/magic/arcane_barrage.dm index 08931d8c391f7..74be54a6323e6 100644 --- a/code/modules/projectiles/guns/magic/arcane_barrage.dm +++ b/code/modules/projectiles/guns/magic/arcane_barrage.dm @@ -1,7 +1,7 @@ /obj/item/gun/magic/wand/arcane_barrage name = "arcane barrage" desc = "Pew Pew Pew." - fire_sound = 'sound/weapons/emitter.ogg' + fire_sound = 'sound/items/weapons/emitter.ogg' icon = 'icons/obj/weapons/guns/ballistic.dmi' icon_state = "arcane_barrage" inhand_icon_state = "arcane_barrage" diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index 1183cbfe6535d..8cd172256bd70 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -33,7 +33,7 @@ /obj/item/gun/magic/staff/change name = "staff of change" desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - fire_sound = 'sound/magic/staff_change.ogg' + fire_sound = 'sound/effects/magic/staff_change.ogg' ammo_type = /obj/item/ammo_casing/magic/change icon_state = "staffofchange" inhand_icon_state = "staffofchange" @@ -64,7 +64,7 @@ /obj/item/gun/magic/staff/animate name = "staff of animation" desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." - fire_sound = 'sound/magic/staff_animation.ogg' + fire_sound = 'sound/effects/magic/staff_animation.ogg' ammo_type = /obj/item/ammo_casing/magic/animate icon_state = "staffofanimation" inhand_icon_state = "staffofanimation" @@ -73,7 +73,7 @@ /obj/item/gun/magic/staff/healing name = "staff of healing" desc = "An artefact that spits bolts of restoring magic which can remove ailments of all kinds and even raise the dead." - fire_sound = 'sound/magic/staff_healing.ogg' + fire_sound = 'sound/effects/magic/staff_healing.ogg' ammo_type = /obj/item/ammo_casing/magic/heal icon_state = "staffofhealing" inhand_icon_state = "staffofhealing" @@ -120,7 +120,7 @@ /obj/item/gun/magic/staff/chaos name = "staff of chaos" desc = "An artefact that spits bolts of chaotic magic that can potentially do anything." - fire_sound = 'sound/magic/staff_chaos.ogg' + fire_sound = 'sound/effects/magic/staff_chaos.ogg' ammo_type = /obj/item/ammo_casing/magic/chaos icon_state = "staffofchaos" inhand_icon_state = "staffofchaos" @@ -215,7 +215,7 @@ /obj/item/gun/magic/staff/door name = "staff of door creation" desc = "An artefact that spits bolts of transformative magic that can create doors in walls." - fire_sound = 'sound/magic/staff_door.ogg' + fire_sound = 'sound/effects/magic/staff_door.ogg' ammo_type = /obj/item/ammo_casing/magic/door icon_state = "staffofdoor" inhand_icon_state = "staffofdoor" @@ -227,7 +227,7 @@ /obj/item/gun/magic/staff/honk name = "staff of the honkmother" desc = "Honk." - fire_sound = 'sound/items/airhorn.ogg' + fire_sound = 'sound/items/airhorn/airhorn.ogg' ammo_type = /obj/item/ammo_casing/magic/honk icon_state = "honker" inhand_icon_state = "honker" @@ -238,14 +238,14 @@ /obj/item/gun/magic/staff/spellblade name = "spellblade" desc = "A deadly combination of laziness and bloodlust, this blade allows the user to dismember their enemies without all the hard work of actually swinging the sword." - fire_sound = 'sound/magic/fireball.ogg' + fire_sound = 'sound/effects/magic/fireball.ogg' ammo_type = /obj/item/ammo_casing/magic/spellblade icon_state = "spellblade" inhand_icon_state = "spellblade" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - hitsound = 'sound/weapons/rapierhit.ogg' - block_sound = 'sound/weapons/parry.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' + block_sound = 'sound/items/weapons/parry.ogg' force = 20 armour_penetration = 75 block_chance = 50 @@ -270,7 +270,7 @@ /obj/item/gun/magic/staff/locker name = "staff of the locker" desc = "An artefact that expells encapsulating bolts, for incapacitating thy enemy." - fire_sound = 'sound/magic/staff_change.ogg' + fire_sound = 'sound/effects/magic/staff_change.ogg' ammo_type = /obj/item/ammo_casing/magic/locker icon_state = "locker" inhand_icon_state = "locker" @@ -284,7 +284,7 @@ /obj/item/gun/magic/staff/flying name = "staff of flying" desc = "An artefact that spits bolts of graceful magic that can make something fly." - fire_sound = 'sound/magic/staff_healing.ogg' + fire_sound = 'sound/effects/magic/staff_healing.ogg' ammo_type = /obj/item/ammo_casing/magic/flying icon_state = "staffofflight" inhand_icon_state = "staffofchange" @@ -294,7 +294,7 @@ /obj/item/gun/magic/staff/babel name = "staff of babel" desc = "An artefact that spits bolts of confusion magic that can make something depressed and incoherent." - fire_sound = 'sound/magic/staff_change.ogg' + fire_sound = 'sound/effects/magic/staff_change.ogg' ammo_type = /obj/item/ammo_casing/magic/babel icon_state = "staffofbabel" inhand_icon_state = "staffofdoor" @@ -304,7 +304,7 @@ /obj/item/gun/magic/staff/necropotence name = "staff of necropotence" desc = "An artefact that spits bolts of death magic that can repurpose the soul." - fire_sound = 'sound/magic/staff_change.ogg' + fire_sound = 'sound/effects/magic/staff_change.ogg' ammo_type = /obj/item/ammo_casing/magic/necropotence icon_state = "staffofnecropotence" inhand_icon_state = "staffofchaos" @@ -314,7 +314,7 @@ /obj/item/gun/magic/staff/wipe name = "staff of possession" desc = "An artefact that spits bolts of mind-unlocking magic that can let ghosts invade the victim's mind." - fire_sound = 'sound/magic/staff_change.ogg' + fire_sound = 'sound/effects/magic/staff_change.ogg' ammo_type = /obj/item/ammo_casing/magic/wipe icon_state = "staffofwipe" inhand_icon_state = "pharoah_sceptre" @@ -324,7 +324,7 @@ /obj/item/gun/magic/staff/shrink name = "staff of shrinking" desc = "An artefact that spits bolts of tiny magic that makes things small. It's easily mistaken for a wand." - fire_sound = 'sound/magic/staff_shrink.ogg' + fire_sound = 'sound/effects/magic/staff_shrink.ogg' ammo_type = /obj/item/ammo_casing/magic/shrink icon_state = "shrinkstaff" inhand_icon_state = "staff" diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index b2fe293eae8c2..0a82f44318e79 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -65,7 +65,7 @@ name = "wand of death" desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail." school = SCHOOL_NECROMANCY - fire_sound = 'sound/magic/wandodeath.ogg' + fire_sound = 'sound/effects/magic/wandodeath.ogg' ammo_type = /obj/item/ammo_casing/magic/death icon_state = "deathwand" base_icon_state = "deathwand" @@ -83,9 +83,8 @@ user.revive(ADMIN_HEAL_ALL, force_grab_ghost = TRUE) // This heals suicides to_chat(user, span_notice("You feel great!")) return - to_chat(user, "You irradiate yourself with pure negative energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You die...","Do you want your possessions identified?")]\ - ") + to_chat(user, span_warning("You irradiate yourself with pure negative energy! \ + [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You die...","Do you want your possessions identified?")]")) user.death(FALSE) /obj/item/gun/magic/wand/death/debug @@ -105,7 +104,7 @@ desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason." school = SCHOOL_RESTORATION ammo_type = /obj/item/ammo_casing/magic/heal - fire_sound = 'sound/magic/staff_healing.ogg' + fire_sound = 'sound/effects/magic/staff_healing.ogg' icon_state = "revivewand" base_icon_state = "revivewand" max_charges = 10 //10, 5, 5, 4 @@ -119,9 +118,8 @@ if(isliving(user)) var/mob/living/L = user if(L.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead - to_chat(user, "You irradiate yourself with pure positive energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You die...","Do you want your possessions identified?")]\ - ") + to_chat(user, span_warning("You irradiate yourself with pure positive energy! \ + [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You die...","Do you want your possessions identified?")]")) user.investigate_log("has been killed by a bolt of resurrection.", INVESTIGATE_DEATHS) user.death(FALSE) return @@ -146,7 +144,7 @@ ammo_type = /obj/item/ammo_casing/magic/change icon_state = "polywand" base_icon_state = "polywand" - fire_sound = 'sound/magic/staff_change.ogg' + fire_sound = 'sound/effects/magic/staff_change.ogg' max_charges = 10 //10, 5, 5, 4 /obj/item/gun/magic/wand/polymorph/zap_self(mob/living/user) @@ -164,7 +162,7 @@ desc = "This wand will wrench targets through space and time to move them somewhere else." school = SCHOOL_TRANSLOCATION ammo_type = /obj/item/ammo_casing/magic/teleport - fire_sound = 'sound/magic/wand_teleport.ogg' + fire_sound = 'sound/effects/magic/wand_teleport.ogg' icon_state = "telewand" base_icon_state = "telewand" max_charges = 10 //10, 5, 5, 4 @@ -183,7 +181,7 @@ desc = "This wand will use the lightest of bluespace currents to gently place the target somewhere safe." school = SCHOOL_TRANSLOCATION ammo_type = /obj/item/ammo_casing/magic/safety - fire_sound = 'sound/magic/wand_teleport.ogg' + fire_sound = 'sound/effects/magic/wand_teleport.ogg' icon_state = "telewand" base_icon_state = "telewand" max_charges = 10 //10, 5, 5, 4 @@ -219,7 +217,7 @@ ammo_type = /obj/item/ammo_casing/magic/door icon_state = "doorwand" base_icon_state = "doorwand" - fire_sound = 'sound/magic/staff_door.ogg' + fire_sound = 'sound/effects/magic/staff_door.ogg' max_charges = 20 //20, 10, 10, 7 no_den_usage = 1 @@ -236,7 +234,7 @@ name = "wand of fireball" desc = "This wand shoots scorching balls of fire that explode into destructive flames." school = SCHOOL_EVOCATION - fire_sound = 'sound/magic/fireball.ogg' + fire_sound = 'sound/effects/magic/fireball.ogg' ammo_type = /obj/item/ammo_casing/magic/fireball icon_state = "firewand" base_icon_state = "firewand" @@ -267,7 +265,7 @@ ammo_type = /obj/item/ammo_casing/magic/shrink/wand icon_state = "shrinkwand" base_icon_state = "shrinkwand" - fire_sound = 'sound/magic/staff_shrink.ogg' + fire_sound = 'sound/effects/magic/staff_shrink.ogg' max_charges = 10 //10, 5, 5, 4 no_den_usage = TRUE w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/projectiles/guns/special/blastcannon.dm b/code/modules/projectiles/guns/special/blastcannon.dm index d867ca09c041a..a7c35c9122ec2 100644 --- a/code/modules/projectiles/guns/special/blastcannon.dm +++ b/code/modules/projectiles/guns/special/blastcannon.dm @@ -23,7 +23,7 @@ base_icon_state = "blastcannon" w_class = WEIGHT_CLASS_NORMAL force = 10 - fire_sound = 'sound/weapons/blastcannon.ogg' + fire_sound = 'sound/items/weapons/blastcannon.ogg' item_flags = NONE clumsy_check = FALSE randomspread = FALSE @@ -263,7 +263,7 @@ * - light: The light impact range of the blastwave. */ /obj/item/gun/blastcannon/proc/fire_dropped(heavy, medium, light) - src.visible_message("[src] suddenly goes off!") + src.visible_message(span_danger("[src] suddenly goes off!")) var/turf/target = get_edge_target_turf(src, dir) var/mob/firer = cached_firer.resolve() var/turf/start_turf = get_turf(src) diff --git a/code/modules/projectiles/guns/special/grenade_launcher.dm b/code/modules/projectiles/guns/special/grenade_launcher.dm index 830952dd769e6..e57a041e60a52 100644 --- a/code/modules/projectiles/guns/special/grenade_launcher.dm +++ b/code/modules/projectiles/guns/special/grenade_launcher.dm @@ -52,5 +52,5 @@ user.log_message("fired a grenade ([F.name]) with a grenade launcher ([src]) from [AREACOORD(user)] at [target] [AREACOORD(target)].", LOG_ATTACK, log_globally = FALSE) F.active = 1 F.icon_state = initial(F.icon_state) + "_active" - playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, TRUE, -3) + playsound(user.loc, 'sound/items/weapons/armbomb.ogg', 75, TRUE, -3) addtimer(CALLBACK(F, TYPE_PROC_REF(/obj/item/grenade, detonate)), 1.5 SECONDS) diff --git a/code/modules/projectiles/guns/special/hand_of_midas.dm b/code/modules/projectiles/guns/special/hand_of_midas.dm index e92ffe8d0bf22..598da68fde69f 100644 --- a/code/modules/projectiles/guns/special/hand_of_midas.dm +++ b/code/modules/projectiles/guns/special/hand_of_midas.dm @@ -9,7 +9,7 @@ worn_icon_state = "gun" lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - fire_sound = 'sound/weapons/gun/rifle/shot.ogg' + fire_sound = 'sound/items/weapons/gun/rifle/shot.ogg' pinless = TRUE max_charges = 1 can_charge = FALSE @@ -143,7 +143,7 @@ victim.visible_message(span_suicide("[victim] holds the barrel of [src] to [victim.p_their()] head, lighting the fuse. It looks like [user.p_theyre()] trying to commit suicide!")) if(!do_after(victim, 1.5 SECONDS)) return - playsound(src, 'sound/weapons/gun/rifle/shot.ogg', 75, TRUE) + playsound(src, 'sound/items/weapons/gun/rifle/shot.ogg', 75, TRUE) to_chat(victim, span_danger("You don't even have the time to register the gunshot by the time your body has completely converted into a golden statue.")) var/newcolors = list(rgb(206, 164, 50), rgb(146, 146, 139), rgb(28,28,28), rgb(0,0,0)) victim.petrify(statue_timer = INFINITY, save_brain = FALSE, colorlist = newcolors) diff --git a/code/modules/projectiles/guns/special/meat_hook.dm b/code/modules/projectiles/guns/special/meat_hook.dm index cfa932a654115..612435bbaf229 100644 --- a/code/modules/projectiles/guns/special/meat_hook.dm +++ b/code/modules/projectiles/guns/special/meat_hook.dm @@ -10,7 +10,7 @@ inhand_icon_state = "hook" lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - fire_sound = 'sound/weapons/batonextend.ogg' + fire_sound = 'sound/items/weapons/batonextend.ogg' pinless = TRUE max_charges = 1 item_flags = NEEDS_PERMIT | NOBLUDGEON @@ -36,7 +36,7 @@ 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) + playsound(get_turf(src), 'sound/items/weapons/bladeslice.ogg', 70) removable.dismember(silent = FALSE) return BRUTELOSS diff --git a/code/modules/projectiles/guns/special/syringe_gun.dm b/code/modules/projectiles/guns/special/syringe_gun.dm index caa51c590535a..00f06bc0df684 100644 --- a/code/modules/projectiles/guns/special/syringe_gun.dm +++ b/code/modules/projectiles/guns/special/syringe_gun.dm @@ -19,7 +19,7 @@ custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT) clumsy_check = FALSE fire_sound = 'sound/items/syringeproj.ogg' - var/load_sound = 'sound/weapons/gun/shotgun/insert_shell.ogg' + var/load_sound = 'sound/items/weapons/gun/shotgun/insert_shell.ogg' var/list/syringes = list() var/max_syringes = 1 ///The number of syringes it can store. var/has_syringe_overlay = TRUE ///If it has an overlay for inserted syringes. If true, the overlay is determined by the number of syringes inserted into it. diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index f41bccb5fa866..ad9124dd07583 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -208,11 +208,15 @@ var/wound_falloff_tile ///How much we want to drop the embed_chance value, if we can embed, per tile, for falloff purposes var/embed_falloff_tile - var/static/list/projectile_connections = list(COMSIG_ATOM_ENTERED = PROC_REF(on_entered)) // SKYRAT EDIT ADDITION START /// If this should be able to hit the target even on direct firing when `ignored_factions` applies var/ignore_direct_target = FALSE // SKYRAT EDIT ADDITION END + ///How much accuracy is lost for each tile travelled + var/accuracy_falloff = 7 + ///How much accuracy before falloff starts to matter. Formula is range - falloff * tiles travelled + var/accurate_range = 100 + var/static/list/projectile_connections = list(COMSIG_ATOM_ENTERED = PROC_REF(on_entered)) /// If true directly targeted turfs can be hit var/can_hit_turfs = FALSE @@ -223,6 +227,8 @@ AddElement(/datum/element/embed) AddElement(/datum/element/connect_loc, projectile_connections) + add_traits(list(TRAIT_FREE_HYPERSPACE_MOVEMENT, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT), INNATE_TRAIT) + /obj/projectile/proc/Range() range-- if(wound_bonus != CANT_WOUND) @@ -308,13 +314,12 @@ playsound(src, get_sfx_skyrat(impact_sound), vol_by_damage(), TRUE, -1) // SKYRAT EDIT ADDITION END - if(isturf(target_turf) && hitsound_wall) + 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) - if(damage > 0 && (damage_type == BRUTE || damage_type == BURN) && iswallturf(target_turf) && prob(75)) var/turf/closed/wall/target_wall = target_turf if(impact_effect_type && !hitscan) @@ -368,16 +373,15 @@ if(hit_limb_zone) organ_hit_text = " in \the [living_target.parse_zone_with_bodypart(hit_limb_zone)]" if(suppressed == SUPPRESSED_VERY) - //playsound(loc, hitsound, 5, TRUE, -1) SKYRAT EDIT REMOVAL - IMPACT SOUNDS else if(suppressed) - //playsound(loc, hitsound, 5, TRUE, -1) SKYRAT EDIT REMOVAL - IMPACT SOUNDS + playsound(loc, hitsound, 5, TRUE, -1) + else if(suppressed) to_chat(living_target, span_userdanger("You're shot by \a [src][organ_hit_text]!")) else - /* SKYRAT EDIT REMOVAL - IMPACT SOUNDS if(hitsound) var/volume = vol_by_damage() playsound(src, hitsound, volume, TRUE, -1) - SKYRAT 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()) @@ -475,9 +479,8 @@ store_hitscan_collision(point_cache) return TRUE - if(!HAS_TRAIT(src, TRAIT_ALWAYS_HIT_ZONE)) - var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations. - def_zone = ran_zone(def_zone, max(100-(7*distance), 5)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use. + var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations. + def_zone = ran_zone(def_zone, clamp(accurate_range - (accuracy_falloff * distance), 5, 100)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use. return process_hit(T, select_target(T, A, A), A) // SELECT TARGET FIRST! @@ -594,6 +597,9 @@ if((target.pass_flags_self & pass_flags) && !direct_target) return FALSE if(HAS_TRAIT(target, TRAIT_UNHITTABLE_BY_PROJECTILES)) + if(!HAS_TRAIT(target, TRAIT_BLOCKING_PROJECTILES) && isliving(target)) + var/mob/living/living_target = target + living_target.block_projectile_effects() return FALSE if(!ignore_source_check && firer) var/mob/M = firer @@ -1037,14 +1043,14 @@ */ /proc/calculate_projectile_angle_and_pixel_offsets(atom/source, atom/target, modifiers) var/angle = 0 - var/p_x = LAZYACCESS(modifiers, ICON_X) ? text2num(LAZYACCESS(modifiers, ICON_X)) : world.icon_size / 2 // ICON_(X|Y) are measured from the bottom left corner of the icon. - var/p_y = LAZYACCESS(modifiers, ICON_Y) ? text2num(LAZYACCESS(modifiers, ICON_Y)) : world.icon_size / 2 // This centers the target if modifiers aren't passed. + var/p_x = LAZYACCESS(modifiers, ICON_X) ? text2num(LAZYACCESS(modifiers, ICON_X)) : ICON_SIZE_X / 2 // ICON_(X|Y) are measured from the bottom left corner of the icon. + var/p_y = LAZYACCESS(modifiers, ICON_Y) ? text2num(LAZYACCESS(modifiers, ICON_Y)) : ICON_SIZE_Y / 2 // This centers the target if modifiers aren't passed. if(target) var/turf/source_loc = get_turf(source) var/turf/target_loc = get_turf(target) - var/dx = ((target_loc.x - source_loc.x) * world.icon_size) + (target.pixel_x - source.pixel_x) + (p_x - (world.icon_size / 2)) - var/dy = ((target_loc.y - source_loc.y) * world.icon_size) + (target.pixel_y - source.pixel_y) + (p_y - (world.icon_size / 2)) + var/dx = ((target_loc.x - source_loc.x) * ICON_SIZE_X) + (target.pixel_x - source.pixel_x) + (p_x - (ICON_SIZE_X / 2)) + var/dy = ((target_loc.y - source_loc.y) * ICON_SIZE_Y) + (target.pixel_y - source.pixel_y) + (p_y - (ICON_SIZE_Y / 2)) angle = ATAN2(dy, dx) return list(angle, p_x, p_y) @@ -1063,8 +1069,8 @@ //Split Y+Pixel_Y up into list(Y, Pixel_Y) var/list/screen_loc_Y = splittext(screen_loc_params[2],":") - var/tx = (text2num(screen_loc_X[1]) - 1) * world.icon_size + text2num(screen_loc_X[2]) - var/ty = (text2num(screen_loc_Y[1]) - 1) * world.icon_size + text2num(screen_loc_Y[2]) + var/tx = (text2num(screen_loc_X[1]) - 1) * ICON_SIZE_X + text2num(screen_loc_X[2]) + var/ty = (text2num(screen_loc_Y[1]) - 1) * ICON_SIZE_Y + text2num(screen_loc_Y[2]) //Calculate the "resolution" of screen based on client's view and world's icon size. This will work if the user can view more tiles than average. var/list/screenview = view_to_pixels(user.client.view) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 0046c0156a1db..d36b66eac7ffe 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -2,10 +2,10 @@ name = "laser" icon_state = "laser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 25 + damage = 20 damage_type = BURN - hitsound = 'sound/weapons/sear.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hitsound = 'sound/items/weapons/sear.ogg' + hitsound_wall = 'sound/items/weapons/effects/searwall.ogg' armor_flag = LASER eyeblur = 4 SECONDS impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser @@ -50,13 +50,11 @@ //overclocked laser, does a bit more damage but has much higher wound power (-0 vs -20) /obj/projectile/beam/laser/hellfire name = "hellfire laser" + icon_state = "hellfire" wound_bonus = 0 damage = 30 speed = 0.6 // higher power = faster, that's how light works right - -/obj/projectile/beam/laser/hellfire/Initialize(mapload) - . = ..() - transform *= 2 + light_color = "#FF969D" /obj/projectile/beam/laser/heavylaser name = "heavy laser" @@ -78,15 +76,15 @@ name = "low-power laser" icon_state = "laser_musket" impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser - damage = 25 - stamina = 40 + damage = 28 + stamina = 35 light_color = COLOR_STRONG_VIOLET weak_against_armour = TRUE /obj/projectile/beam/laser/musket/prime name = "mid-power laser" - damage = 30 - stamina = 45 + damage = 25 + stamina = 20 weak_against_armour = FALSE /obj/projectile/beam/weak @@ -137,7 +135,7 @@ damage = 30 damage_type = STAMINA armor_flag = ENERGY - hitsound = 'sound/weapons/sear_disabler.ogg' + hitsound = 'sound/items/weapons/sear_disabler.ogg' impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser light_color = LIGHT_COLOR_BLUE tracer_type = /obj/effect/projectile/tracer/disabler diff --git a/code/modules/projectiles/projectile/bullets/cannonball.dm b/code/modules/projectiles/projectile/bullets/cannonball.dm index 358a23eb63c90..167f61dfa2c87 100644 --- a/code/modules/projectiles/projectile/bullets/cannonball.dm +++ b/code/modules/projectiles/projectile/bullets/cannonball.dm @@ -10,7 +10,7 @@ stutter = 20 SECONDS embed_type = null hitsound = 'sound/effects/meteorimpact.ogg' - hitsound_wall = 'sound/weapons/sonic_jackhammer.ogg' + hitsound_wall = 'sound/items/weapons/sonic_jackhammer.ogg' /// If our cannonball hits something, it reduces the damage by this value. var/damage_decrease_on_hit = 10 /// This is the cutoff point of our cannonball, so that it stops piercing past this value. diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 6f14df2f4c8bd..2a80c366f0346 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -92,7 +92,7 @@ /obj/projectile/bullet/rebar/syndie name = "rebar" icon_state = "rebar" - damage = 55 + damage = 45 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. @@ -140,27 +140,37 @@ /obj/projectile/bullet/rebar/hydrogen name = "metallic hydrogen bolt" icon_state = "rebar_hydrogen" - damage = 40 + damage = 35 speed = 0.6 + projectile_piercing = PASSMOB|PASSVEHICLE + projectile_phasing = ~(PASSMOB|PASSVEHICLE) + phasing_ignore_direct_target = TRUE dismemberment = 0 //goes through clean. damage_type = BRUTE armour_penetration = 30 //very pointy. - projectile_piercing = PASSMOB //felt this might have been a nice compromise for the lower damage for the difficulty of getting it - wound_bonus = -15 - bare_wound_bonus = 10 + wound_bonus = -100 + bare_wound_bonus = 0 + shrapnel_type = /obj/item/ammo_casing/rebar/hydrogen embed_type = /datum/embed_data/rebar_hydrogen embed_falloff_tile = -3 - shrapnel_type = /obj/item/ammo_casing/rebar/hydrogen + accurate_range = 205 //15 tiles before falloff starts to kick in + +/obj/projectile/bullet/rebar/hydrogen/Impact(atom/A) + . = ..() + def_zone = ran_zone(def_zone, clamp(205-(7*get_dist(get_turf(A), starting)), 5, 100)) /datum/embed_data/rebar_hydrogen - embed_chance = 50 - fall_chance = 2 - jostle_chance = 3 - ignore_throwspeed_threshold = TRUE - pain_stam_pct = 0.6 - pain_mult = 4 - jostle_pain_mult = 2 - rip_time =18 + embed_chance = 0 + +/obj/projectile/bullet/rebar/hydrogen/on_hit(atom/target, blocked, pierce_hit) + if(isAI(target)) + return BULLET_ACT_FORCE_PIERCE + return ..() + +/obj/projectile/bullet/rebar/hydrogen/process_hit(turf/T, atom/target, atom/bumped, hit_something) + . = ..() + if(pierces >= 3) + qdel(src) /obj/projectile/bullet/rebar/healium name = "healium bolt" diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 215093c9f100e..a2c11f76d4789 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -141,6 +141,6 @@ /obj/projectile/bullet/shotgun_breaching name = "12g breaching round" desc = "A breaching round designed to destroy airlocks and windows with only a few shots. Ineffective against other targets." - hitsound = 'sound/weapons/sonic_jackhammer.ogg' + hitsound = 'sound/items/weapons/sonic_jackhammer.ogg' damage = 5 //does shit damage to everything except doors and windows demolition_mod = 200 //one shot to break a window or grille, or two shots to breach an airlock door diff --git a/code/modules/projectiles/projectile/energy/_energy.dm b/code/modules/projectiles/projectile/energy/_energy.dm index 86ec80b3b20ff..8527041e86006 100644 --- a/code/modules/projectiles/projectile/energy/_energy.dm +++ b/code/modules/projectiles/projectile/energy/_energy.dm @@ -6,9 +6,3 @@ armor_flag = ENERGY reflectable = REFLECT_NORMAL impact_effect_type = /obj/effect/temp_visual/impact_effect/energy - -/obj/projectile/energy/Initialize(mapload) - . = ..() - - ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_MOVEMENT, INNATE_TRAIT) - ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT, INNATE_TRAIT) diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm index ac35fb5503e68..ae05a9eb85d7e 100644 --- a/code/modules/projectiles/projectile/energy/net_snare.dm +++ b/code/modules/projectiles/projectile/energy/net_snare.dm @@ -3,7 +3,7 @@ icon_state = "e_netting" damage = 10 damage_type = STAMINA - hitsound = 'sound/weapons/taserhit.ogg' + hitsound = 'sound/items/weapons/taserhit.ogg' range = 10 /obj/projectile/energy/net/Initialize(mapload) @@ -118,7 +118,7 @@ /obj/projectile/energy/trap name = "energy snare" icon_state = "e_snare" - hitsound = 'sound/weapons/taserhit.ogg' + hitsound = 'sound/items/weapons/taserhit.ogg' range = 4 /obj/projectile/energy/trap/on_hit(atom/target, blocked = 0, pierce_hit) @@ -136,7 +136,7 @@ /obj/projectile/energy/trap/cyborg name = "Energy Bola" icon_state = "e_snare" - hitsound = 'sound/weapons/taserhit.ogg' + hitsound = 'sound/items/weapons/taserhit.ogg' range = 10 /obj/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = 0, pierce_hit) diff --git a/code/modules/projectiles/projectile/energy/nuclear_particle.dm b/code/modules/projectiles/projectile/energy/nuclear_particle.dm index 4cd2ea049e095..b82ff478a05b4 100644 --- a/code/modules/projectiles/projectile/energy/nuclear_particle.dm +++ b/code/modules/projectiles/projectile/energy/nuclear_particle.dm @@ -7,7 +7,7 @@ damage_type = TOX damage = 10 speed = 0.4 - hitsound = 'sound/weapons/emitter2.ogg' + hitsound = 'sound/items/weapons/emitter2.ogg' impact_type = /obj/effect/projectile/impact/xray var/static/list/particle_colors = list( "red" = COLOR_RED, diff --git a/code/modules/projectiles/projectile/energy/photon.dm b/code/modules/projectiles/projectile/energy/photon.dm index 62b5770fb441e..5210737a19801 100644 --- a/code/modules/projectiles/projectile/energy/photon.dm +++ b/code/modules/projectiles/projectile/energy/photon.dm @@ -50,7 +50,7 @@ /obj/projectile/energy/photon/on_range() do_sparks(rand(4, 9), FALSE, src) - playsound(loc, 'sound/weapons/solarflare.ogg', 100, FALSE, 8, 0.9) + playsound(loc, 'sound/items/weapons/solarflare.ogg', 100, FALSE, 8, 0.9) for(var/mob/living/flashed_mob in viewers(5, loc)) flashed_mob.flash_act() return ..() diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm index 5543b11d115b9..24da10c81f0cb 100644 --- a/code/modules/projectiles/projectile/energy/stun.dm +++ b/code/modules/projectiles/projectile/energy/stun.dm @@ -6,9 +6,8 @@ paralyze = 10 SECONDS stutter = 10 SECONDS jitter = 40 SECONDS - hitsound = 'sound/weapons/taserhit.ogg' - //range = 7 //ORIGINAL - range = 5 //SKYRAT EDIT CHANGE - COMBAT + hitsound = 'sound/items/weapons/taserhit.ogg' + range = 7 tracer_type = /obj/effect/projectile/tracer/stun muzzle_type = /obj/effect/projectile/muzzle/stun impact_type = /obj/effect/projectile/impact/stun diff --git a/code/modules/projectiles/projectile/energy/thermal.dm b/code/modules/projectiles/projectile/energy/thermal.dm index 0efb983eb3b69..7b1319e117a9e 100644 --- a/code/modules/projectiles/projectile/energy/thermal.dm +++ b/code/modules/projectiles/projectile/energy/thermal.dm @@ -21,7 +21,7 @@ if(how_cold_is_target < danger_zone) explosion(cold_target, devastation_range = -1, heavy_impact_range = -1, light_impact_range = 2, flame_range = 3) //maybe stand back a bit cold_target.bodytemperature = cold_target.dna.species.bodytemp_normal //avoids repeat explosions, maybe could be used to heat up again? - playsound(cold_target, 'sound/weapons/sear.ogg', 30, TRUE, -1) + playsound(cold_target, 'sound/items/weapons/sear.ogg', 30, TRUE, -1) /obj/projectile/energy/cryo name = "frozen nanite bullet" @@ -47,4 +47,4 @@ hot_target.Knockdown(100) hot_target.apply_damage(20, BURN) hot_target.bodytemperature = hot_target.dna.species.bodytemp_normal //avoids repeat knockdowns, maybe could be used to cool down again? - playsound(hot_target, 'sound/weapons/sonic_jackhammer.ogg', 30, TRUE, -1) + playsound(hot_target, 'sound/items/weapons/sonic_jackhammer.ogg', 30, TRUE, -1) diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 23930f3cca7d0..44404c15f14a6 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -192,7 +192,7 @@ icon_state = "arcane_barrage" damage = 20 damage_type = BURN - hitsound = 'sound/weapons/barragespellhit.ogg' + hitsound = 'sound/items/weapons/barragespellhit.ogg' /obj/projectile/magic/locker name = "locker bolt" @@ -522,7 +522,7 @@ trigger_range = 0 can_only_hit_target = TRUE paralyze = 6 SECONDS - hitsound = 'sound/magic/mm_hit.ogg' + hitsound = 'sound/effects/magic/mm_hit.ogg' trail = TRUE trail_lifespan = 0.5 SECONDS @@ -539,7 +539,7 @@ damage = 30 damage_type = BRUTE knockdown = 50 - hitsound = 'sound/weapons/punch3.ogg' + hitsound = 'sound/items/weapons/punch3.ogg' trigger_range = 0 antimagic_flags = MAGIC_RESISTANCE_HOLY ignored_factions = list(FACTION_CULT) @@ -550,7 +550,7 @@ /obj/projectile/magic/aoe/juggernaut/on_hit(atom/target, blocked = 0, pierce_hit) . = ..() var/turf/target_turf = get_turf(src) - playsound(target_turf, 'sound/weapons/resonator_blast.ogg', 100, FALSE) + playsound(target_turf, 'sound/items/weapons/resonator_blast.ogg', 100, FALSE) new /obj/effect/temp_visual/cult/sac(target_turf) for(var/obj/adjacent_object in range(1, src)) if(!adjacent_object.density) @@ -585,7 +585,7 @@ /obj/projectile/magic/shrink name = "shrink ray" icon_state = "blue_laser" - hitsound = 'sound/weapons/shrink_hit.ogg' + hitsound = 'sound/items/weapons/shrink_hit.ogg' damage = 0 damage_type = STAMINA armor_flag = ENERGY diff --git a/code/modules/projectiles/projectile/special/curse.dm b/code/modules/projectiles/projectile/special/curse.dm index 03b2e0feb53c4..1a786a2fb2f23 100644 --- a/code/modules/projectiles/projectile/special/curse.dm +++ b/code/modules/projectiles/projectile/special/curse.dm @@ -5,7 +5,7 @@ name = "curse hand" icon_state = "cursehand0" base_icon_state = "cursehand" - hitsound = 'sound/effects/curse4.ogg' + hitsound = 'sound/effects/curse/curse4.ogg' layer = LARGE_MOB_LAYER damage_type = BURN damage = 10 @@ -44,7 +44,7 @@ if(arm) QDEL_NULL(arm) if((movement_type & PHASING)) - playsound(src, 'sound/effects/curse3.ogg', 25, TRUE, -1) + playsound(src, 'sound/effects/curse/curse3.ogg', 25, TRUE, -1) var/turf/T = get_step(src, dir) var/obj/effect/temp_visual/dir_setting/curse/hand/leftover = new(T, dir) leftover.icon_state = icon_state diff --git a/code/modules/projectiles/projectile/special/gravity.dm b/code/modules/projectiles/projectile/special/gravity.dm index 5fbcbb98dd6d9..f76817cc00d5c 100644 --- a/code/modules/projectiles/projectile/special/gravity.dm +++ b/code/modules/projectiles/projectile/special/gravity.dm @@ -2,7 +2,7 @@ name = "repulsion bolt" icon = 'icons/effects/effects.dmi' icon_state = "chronofield" - hitsound = 'sound/weapons/wave.ogg' + hitsound = 'sound/items/weapons/wave.ogg' damage = 0 damage_type = BRUTE color = COLOR_BLUE_LIGHT @@ -36,7 +36,7 @@ name = "attraction bolt" icon = 'icons/effects/effects.dmi' icon_state = "chronofield" - hitsound = 'sound/weapons/wave.ogg' + hitsound = 'sound/items/weapons/wave.ogg' damage = 0 damage_type = BRUTE color = "#FF6600" @@ -69,7 +69,7 @@ name = "gravitational blast" icon = 'icons/effects/effects.dmi' icon_state = "chronofield" - hitsound = 'sound/weapons/wave.ogg' + hitsound = 'sound/items/weapons/wave.ogg' damage = 0 damage_type = BRUTE color = COLOR_FULL_TONER_BLACK diff --git a/code/modules/projectiles/projectile/special/saboteur.dm b/code/modules/projectiles/projectile/special/saboteur.dm index 46fcc136c0927..5e7249b7d54aa 100644 --- a/code/modules/projectiles/projectile/special/saboteur.dm +++ b/code/modules/projectiles/projectile/special/saboteur.dm @@ -1,3 +1,9 @@ +///Override on subtype to add behaviour. Whatever happens when we are sabotaged +/atom/proc/on_saboteur(datum/source, disrupt_duration) + SHOULD_CALL_PARENT(TRUE) + if(SEND_SIGNAL(src, COMSIG_ATOM_SABOTEUR_ACT, disrupt_duration) & COMSIG_SABOTEUR_SUCCESS) //Signal handles datums for the most part + return TRUE + /obj/projectile/energy/fisher name = "attenuated kinetic force" alpha = 0 @@ -19,7 +25,7 @@ var/success = FALSE for(var/atom/disrupted as anything in things_to_disrupt) - if(SEND_SIGNAL(disrupted, COMSIG_HIT_BY_SABOTEUR, disrupt_duration) & COMSIG_SABOTEUR_SUCCESS) + if(disrupted.on_saboteur(src, disrupt_duration)) success = TRUE if(success && ismob(firer)) diff --git a/code/modules/reagents/chemistry/chem_wiki_render.dm b/code/modules/reagents/chemistry/chem_wiki_render.dm index 2bb6bd7175bdc..34bc1e1a6f13e 100644 --- a/code/modules/reagents/chemistry/chem_wiki_render.dm +++ b/code/modules/reagents/chemistry/chem_wiki_render.dm @@ -9,7 +9,12 @@ ADMIN_VERB(generate_wikichem_list, R_DEBUG, "Parse Wikichems", "Parse and genera |- "} - var/input_text = tgui_input_text(user, "Input a name of a reagent, or a series of reagents split with a comma (no spaces) to get its wiki table entry", "Recipe") //95% of the time, the reagent type is a lowercase, no spaces / underscored version of the name + var/input_text = tgui_input_text( + user, + "Input a name of a reagent, or a series of reagents split with a comma (no spaces) to get its wiki table entry", + "Recipe", + max_length = MAX_MESSAGE_LEN, + ) //95% of the time, the reagent type is a lowercase, no spaces / underscored version of the name if(!input_text) to_chat(user, "Input was blank!") return diff --git a/code/modules/reagents/chemistry/equilibrium.dm b/code/modules/reagents/chemistry/equilibrium.dm index 435f4159ccbed..6b43e441d483c 100644 --- a/code/modules/reagents/chemistry/equilibrium.dm +++ b/code/modules/reagents/chemistry/equilibrium.dm @@ -368,9 +368,9 @@ #ifdef REAGENTS_TESTING //Kept in so that people who want to write fermireactions can contact me with this log so I can help them if(GLOB.Debug2) //I want my spans for my sanity - message_admins("Reaction step active for:[reaction.type]") - message_admins("|Reaction conditions| Temp: [holder.chem_temp], pH: [holder.ph], reactions: [length(holder.reaction_list)], awaiting reactions: [length(holder.failed_but_capable_reactions)], no. reagents:[length(holder.reagent_list)], no. prev reagents: [length(holder.previous_reagent_list)]") - message_admins("Reaction vars: PreReacted:[reacted_vol] of [step_target_vol] of total [target_vol]. delta_t [delta_t], multiplier [multiplier], delta_chem_factor [delta_chem_factor] Pfactor [product_ratio], purity of [purity] from a delta_ph of [delta_ph]. DeltaTime: [seconds_per_tick]") + message_admins(span_green("Reaction step active for:[reaction.type]")) + message_admins(span_notice("|Reaction conditions| Temp: [holder.chem_temp], pH: [holder.ph], reactions: [length(holder.reaction_list)], awaiting reactions: [length(holder.failed_but_capable_reactions)], no. reagents:[length(holder.reagent_list)], no. prev reagents: [length(holder.previous_reagent_list)]")) + message_admins(span_warning("Reaction vars: PreReacted:[reacted_vol] of [step_target_vol] of total [target_vol]. delta_t [delta_t], multiplier [multiplier], delta_chem_factor [delta_chem_factor] Pfactor [product_ratio], purity of [purity] from a delta_ph of [delta_ph]. DeltaTime: [seconds_per_tick]")) #endif //Apply thermal output of reaction to beaker diff --git a/code/modules/reagents/chemistry/holder/holder.dm b/code/modules/reagents/chemistry/holder/holder.dm index 11117142d70e5..593bc6d471092 100644 --- a/code/modules/reagents/chemistry/holder/holder.dm +++ b/code/modules/reagents/chemistry/holder/holder.dm @@ -204,11 +204,12 @@ * * * [list_reagents][list] - list to add. Format it like this: list(/datum/reagent/toxin = 10, "beer" = 15) * * [data][list] - additional data to add + * * [added_purity][number] - an override to the default purity for each reagent to add. */ -/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data = null) +/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data = null, added_purity = null) for(var/r_id in list_reagents) var/amt = list_reagents[r_id] - add_reagent(r_id, amt, data) + add_reagent(r_id, amt, data, added_purity = added_purity) /** * Removes a specific reagent. can supress reactions if needed @@ -344,26 +345,29 @@ stack_trace("invalid reagent path passed to convert reagent [source_reagent_typepath]") return FALSE - var/reagent_amount - var/reagent_purity - var/reagent_ph + var/reagent_amount = 0 + var/reagent_purity = 0 + var/reagent_ph = 0 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) + if(is_type_in_typecache(reagent, 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) + if(istype(source_reagent)) + reagent_amount = source_reagent.volume + reagent_purity = source_reagent.purity + reagent_ph = source_reagent.ph + remove_reagent(source_reagent_typepath, reagent_amount) + + if(reagent_amount > 0) + 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() @@ -586,10 +590,11 @@ */ /datum/reagents/proc/multiply_reagents(multiplier = 1) var/list/cached_reagents = reagent_list - if(!total_volume) + if(!total_volume || multiplier == 1) return var/change = (multiplier - 1) //Get the % change for(var/datum/reagent/reagent as anything in cached_reagents) + _multiply_reagent(reagent, change) if(change > 0) add_reagent(reagent.type, reagent.volume * change, added_purity = reagent.purity, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) else @@ -598,6 +603,28 @@ update_total() handle_reactions() +/** + * Multiplies a single inside this holder by a specific amount + * Arguments + * * reagent_path - The path of the reagent we want to multiply the volume of. + * * multiplier - the amount to multiply each reagent by + */ +/datum/reagents/proc/multiply_single_reagent(reagent_path, multiplier = 1) + var/datum/reagent/reagent = locate(reagent_path) in reagent_list + if(!reagent || multiplier == 1) + return + var/change = (multiplier - 1) //Get the % change + _multiply_reagent(reagent, change) + update_total() + handle_reactions() + +///Proc containing the operations called by both multiply_reagents() and multiply_single_reagent() +/datum/reagents/proc/_multiply_reagent(datum/reagent/reagent, change) + 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%) + /// Updates [/datum/reagents/var/total_volume] /datum/reagents/proc/update_total() var/list/cached_reagents = reagent_list diff --git a/code/modules/reagents/chemistry/holder/mob_life.dm b/code/modules/reagents/chemistry/holder/mob_life.dm index 0692d166d2c0a..528a7432b6fec 100644 --- a/code/modules/reagents/chemistry/holder/mob_life.dm +++ b/code/modules/reagents/chemistry/holder/mob_life.dm @@ -1,3 +1,8 @@ +#define HAS_SILENT_TOXIN 0 //don't provide a feedback message if this is the only toxin present +#define HAS_NO_TOXIN 1 +#define HAS_PAINFUL_TOXIN 2 +#define MAX_TOXIN_LIVER_DAMAGE 2 //the max damage the liver can receive per second (~1 min at max damage will destroy liver) + /** * Triggers metabolizing for all the reagents in this holder * @@ -16,16 +21,22 @@ 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 + var/liver_tolerance = 0 + var/liver_damage = 0 + var/provide_pain_message + var/amount if(liver) var/liver_health_percent = (liver.maxHealth - liver.damage) / liver.maxHealth liver_tolerance = liver.toxTolerance * liver_health_percent + provide_pain_message = HAS_NO_TOXIN for(var/datum/reagent/reagent as anything in cached_reagents) + var/datum/reagent/toxin/toxin + if(istype(reagent, /datum/reagent/toxin)) + toxin = reagent // 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(toxin && liver && !dead) + amount = toxin.volume if(belly) amount += belly.reagents.get_reagent_amount(toxin.type) @@ -35,10 +46,35 @@ need_mob_update += metabolize_reagent(owner, reagent, seconds_per_tick, times_fired, can_overdose, liverless, dead) + // If applicable, calculate any toxin-related liver damage + // Note: we have to do this AFTER metabolize_reagent, because we want handle_reagent to run before we make the determination. + // The order is really important unfortunately. + if(toxin && !liverless && liver && liver.filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER)) + if(toxin.affected_organ_flags && !(liver.organ_flags & toxin.affected_organ_flags)) //this particular toxin does not affect this type of organ + continue + + // a 15u syringe is a nice baseline to scale lethality by + liver_damage += ((amount/15) * toxin.toxpwr * toxin.liver_damage_multiplier) / liver.liver_resistance + + if(provide_pain_message != HAS_PAINFUL_TOXIN) + provide_pain_message = toxin.silent_toxin ? HAS_SILENT_TOXIN : HAS_PAINFUL_TOXIN + + // if applicable, apply our liver damage and display the accompanying pain message + if(liver_damage) + liver.apply_organ_damage(min(liver_damage * seconds_per_tick , MAX_TOXIN_LIVER_DAMAGE * seconds_per_tick)) + + if(provide_pain_message && liver.damage > 10 && SPT_PROB(liver.damage/6, seconds_per_tick)) //the higher the damage the higher the probability + to_chat(owner, span_warning("You feel a dull pain in your abdomen.")) + if(owner && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates. owner.updatehealth() update_total() +#undef HAS_SILENT_TOXIN +#undef HAS_NO_TOXIN +#undef HAS_PAINFUL_TOXIN +#undef MAX_TOXIN_LIVER_DAMAGE + /* * Metabolises a single reagent for a target owner carbon mob. See above. * diff --git a/code/modules/reagents/chemistry/holder/ui_data.dm b/code/modules/reagents/chemistry/holder/ui_data.dm index 97820c2fd6c0e..244b264721fd2 100644 --- a/code/modules/reagents/chemistry/holder/ui_data.dm +++ b/code/modules/reagents/chemistry/holder/ui_data.dm @@ -297,7 +297,7 @@ var/datum/chemical_reaction/reaction = sub_reactions[ui_reaction_index] return reaction.type -/datum/reagents/ui_act(action, params) +/datum/reagents/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/reagents/chemistry/items.dm b/code/modules/reagents/chemistry/items.dm index 0344971497b01..1e712db9c23ef 100644 --- a/code/modules/reagents/chemistry/items.dm +++ b/code/modules/reagents/chemistry/items.dm @@ -33,7 +33,7 @@ user.put_in_active_hand(page) to_chat(user, span_notice("You take [page] out of \the [src].")) number_of_pages-- - playsound(user.loc, 'sound/items/poster_ripped.ogg', 50, TRUE) + playsound(user.loc, 'sound/items/poster/poster_ripped.ogg', 50, TRUE) add_fingerprint(user) if(!number_of_pages) icon_state = "pHbooklet_empty" @@ -57,7 +57,7 @@ user.put_in_active_hand(P) to_chat(user, span_notice("You take [P] out of \the [src].")) number_of_pages-- - playsound(user.loc, 'sound/items/poster_ripped.ogg', 50, TRUE) + playsound(user.loc, 'sound/items/poster/poster_ripped.ogg', 50, TRUE) add_fingerprint(user) if(!number_of_pages) icon_state = "pHbookletEmpty" @@ -166,7 +166,7 @@ var/obj/item/reagent_containers/container = I container.reagents.expose_temperature(get_temperature()) to_chat(user, span_notice("You heat up the [I] with the [src].")) - playsound(user.loc, 'sound/chemistry/heatdam.ogg', 50, TRUE) + playsound(user.loc, 'sound/effects/chemistry/heatdam.ogg', 50, TRUE) return else if(I.is_drainable()) //Transfer FROM it TO us. Special code so it only happens when flame is off. var/obj/item/reagent_containers/container = I @@ -193,7 +193,7 @@ var/obj/item/reagent_containers/container = interacting_with container.reagents.expose_temperature(get_temperature()) user.visible_message(span_notice("[user] heats up [src]."), span_notice("You heat up [src].")) - playsound(user, 'sound/chemistry/heatdam.ogg', 50, TRUE) + playsound(user, 'sound/effects/chemistry/heatdam.ogg', 50, TRUE) return ITEM_INTERACT_SUCCESS else if(isitem(interacting_with)) @@ -216,7 +216,7 @@ if(lit) force = 5 damtype = BURN - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' attack_verb_continuous = string_list(list("burns", "singes")) attack_verb_simple = string_list(list("burn", "singe")) START_PROCESSING(SSobj, src) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 0d5fbeb18b608..48e3c25ecf0cc 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -175,9 +175,9 @@ if(panel_open) . += span_notice("[src]'s maintenance hatch is open!") if(in_range(user, src) || isobserver(user)) - . += "The status display reads:\n\ + . += span_notice("The status display reads:\n\ Recharge rate: [display_power(recharge_amount, convert = FALSE)].\n\ - Energy cost: [siunit(power_cost, "J/u", 3)]." + Energy cost: [siunit(power_cost, "J/u", 3)].") . += span_notice("Use RMB to eject a stored beaker.") /obj/machinery/chem_dispenser/on_set_is_operational(old_value) @@ -399,7 +399,7 @@ if("save_recording") if(!is_operational) return - var/name = tgui_input_text(ui.user, "What do you want to name this recipe?", "Recipe Name", MAX_NAME_LEN) + var/name = tgui_input_text(ui.user, "What do you want to name this recipe?", "Recipe Name", max_length = MAX_NAME_LEN) if(!ui.user.can_perform_action(src, ALLOW_SILICON_REACH)) return if(saved_recipes[name] && tgui_alert(ui.user, "\"[name]\" already exists, do you want to overwrite it?",, list("Yes", "No")) == "No") @@ -410,7 +410,7 @@ if(!dispensable_reagents.Find(reagent_id)) visible_message(span_warning("[src] buzzes."), span_hear("You hear a faint buzz.")) to_chat(ui.user, span_warning("[src] cannot find [reagent]!")) - playsound(src, 'sound/machines/buzz-two.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, TRUE) return saved_recipes[name] = recording_recipe recording_recipe = null diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 51adc8d68a5c3..57d4d27e49deb 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -486,11 +486,13 @@ if(ispath(selected_container, /obj/item/reagent_containers/cup/vial) || ispath(selected_container, /obj/item/reagent_containers/syringe/smartdart)) item_name_default = "[master_reagent.name] [item_name_default]" // SKYRAT EDIT ADDITION END - var/item_name = tgui_input_text(usr, + var/item_name = tgui_input_text( + usr, "Container name", "Name", item_name_default, - MAX_NAME_LEN) + max_length = MAX_NAME_LEN, + ) if(!item_name) return FALSE diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index 552bfe48650ca..f45eb89b8ebe9 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -7,9 +7,16 @@ amount = 10 resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF use_power = NO_POWER_USE + + ///The temperature of the added reagents + var/temperature = DEFAULT_REAGENT_TEMPERATURE ///The purity of the created reagent in % (purity uses 0-1 values) var/purity = 100 +/obj/machinery/chem_dispenser/chem_synthesizer/Destroy() + QDEL_NULL(beaker) + return ..() + /obj/machinery/chem_dispenser/chem_synthesizer/screwdriver_act(mob/living/user, obj/item/tool) return NONE @@ -22,6 +29,12 @@ ui = new(user, src, "ChemDebugSynthesizer", name) ui.open() + +/obj/machinery/chem_dispenser/chem_synthesizer/ui_data(mob/user) + . = ..() + .["purity"] = purity + .["temp"] = temperature + /obj/machinery/chem_dispenser/chem_synthesizer/handle_ui_act(action, params, datum/tgui/ui, datum/ui_state/state) switch(action) if("input") @@ -36,7 +49,7 @@ if(!input_reagent) return FALSE - beaker.reagents.add_reagent(input_reagent, amount, added_purity = (purity / 100)) + beaker.reagents.add_reagent(input_reagent, amount, reagtemp = temperature, added_purity = (purity / 100)) return TRUE if("makecup") @@ -58,6 +71,18 @@ amount = input return TRUE + if("temp") + var/input = params["amount"] + if(isnull(input)) + return FALSE + + input = text2num(input) + if(isnull(input)) + return FALSE + + temperature = input + return TRUE + if("purity") var/input = params["amount"] if(isnull(input)) @@ -71,11 +96,3 @@ return TRUE update_appearance() - -/obj/machinery/chem_dispenser/chem_synthesizer/Destroy() - QDEL_NULL(beaker) - return ..() - -/obj/machinery/chem_dispenser/chem_synthesizer/ui_data(mob/user) - . = ..() - .["purity"] = purity diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index dca2b603ca40f..c9ad2424b2de7 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -153,7 +153,7 @@ data["resistances"] = get_resistance_data(blood) return data -/obj/machinery/computer/pandemic/ui_act(action, params) +/obj/machinery/computer/pandemic/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm index 21f23a209b6b7..8071887f85260 100644 --- a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm +++ b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm @@ -100,18 +100,18 @@ /obj/item/storage/portable_chem_mixer/ex_act(severity, target) return severity > EXPLODE_LIGHT ? ..() : FALSE -/obj/item/storage/portable_chem_mixer/storage_insert_on_interacted_with(datum/storage, obj/item/weapon, mob/living/user) +/obj/item/storage/portable_chem_mixer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if (!atom_storage.locked || \ - (weapon.item_flags & ABSTRACT) || \ - (weapon.flags_1 & HOLOGRAM_1) || \ - !is_reagent_container(weapon) || \ - !weapon.is_open_container() \ + (tool.item_flags & ABSTRACT) || \ + (tool.flags_1 & HOLOGRAM_1) || \ + !is_reagent_container(tool) || \ + !tool.is_open_container() \ ) - return TRUE //continue with regular insertion + return NONE // continue with regular storage handling - replace_beaker(user, weapon) + replace_beaker(user, tool) update_appearance() - return FALSE //block insertion cause we handled it ourselves + return ITEM_INTERACT_SUCCESS /** * Replaces the beaker of the portable chemical mixer with another beaker, or simply adds the new beaker if none is in currently @@ -128,7 +128,7 @@ user.put_in_hands(beaker) if(!QDELETED(new_beaker)) - if(!user.transferItemToLoc(new_beaker, src)) + if(!user.transferItemToLoc(new_beaker, src, silent = FALSE)) return beaker = new_beaker diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 3b0272240b0df..141fb7c4e6fb0 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -394,7 +394,7 @@ if("mix") mix(50 DECISECONDS, user) if("examine") - to_chat(user, examine_block("[examine(user)]")) + to_chat(user, examine_block(span_infoplain("[examine(user)]"))) /** * Checks if the radial menu can interact with this machine diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm index f70ae995832b8..c9cac426efbc3 100644 --- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm @@ -534,12 +534,12 @@ carbies.add_mood_event("painful_medicine", /datum/mood_event/painful_medicine) 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 - 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 + carbies.visible_message(span_nicegreen("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 + 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(span_nicegreen("A rubbery liquid coats [carbies]'s tissues. [carbies] looks a lot healthier!")) + // SKYRAT EDIT ADDITION END /******ORGAN HEALING******/ /*Suffix: -rite*/ diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 83e6e023237c3..55f30e626585f 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -344,6 +344,7 @@ taste_description = "spiked butterscotch" ph = 6.5 default_container = /obj/item/reagent_containers/cup/glass/bottle/rum + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/consumable/ethanol/rum/aged name = "Aged Rum" @@ -513,7 +514,6 @@ atom.reagents.add_reagent(/datum/reagent/gold, convert_amount) return ..() - /datum/reagent/consumable/ethanol/patron name = "Patron" description = "Tequila with silver in it, a favorite of alcoholic women in the club scene." @@ -629,14 +629,14 @@ if(src == holder.get_master_reagent()) var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = holder.my_atom drink.tool_behaviour = TOOL_SCREWDRIVER - drink.usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg') + drink.usesound = list('sound/items/tools/screwdriver.ogg', 'sound/items/tools/screwdriver2.ogg') /datum/reagent/consumable/ethanol/screwdrivercocktail/proc/on_reagent_change(datum/reagents/reagents) SIGNAL_HANDLER var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = reagents.my_atom if(reagents.get_master_reagent() == src) drink.tool_behaviour = TOOL_SCREWDRIVER - drink.usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg') + drink.usesound = list('sound/items/tools/screwdriver.ogg', 'sound/items/tools/screwdriver2.ogg') else drink.tool_behaviour = initial(drink.tool_behaviour) drink.usesound = initial(drink.usesound) @@ -880,7 +880,7 @@ /datum/reagent/consumable/ethanol/b52/on_mob_metabolize(mob/living/drinker) . = ..() - playsound(drinker, 'sound/effects/explosion_distant.ogg', 100, FALSE) + playsound(drinker, 'sound/effects/explosion/explosion_distant.ogg', 100, FALSE) /datum/reagent/consumable/ethanol/irishcoffee name = "Irish Coffee" @@ -1258,7 +1258,7 @@ /datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) . = ..() if(SPT_PROB(2.5, seconds_per_tick)) - playsound(get_turf(drinker), 'sound/effects/explosionfar.ogg', 100, TRUE) + playsound(get_turf(drinker), 'sound/effects/explosion/explosionfar.ogg', 100, TRUE) /datum/reagent/consumable/ethanol/hiveminderaser name = "Hivemind Eraser" @@ -2637,6 +2637,7 @@ quality = DRINK_VERYGOOD taste_description = "light gin with sweet ginger and cucumber" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + glass_price = DRINK_PRICE_MEDIUM /datum/reagent/consumable/ethanol/gin_garden/on_mob_life(mob/living/carbon/doll, seconds_per_tick, times_fired) . = ..() @@ -2658,7 +2659,7 @@ var/mob/living/carbon/exposed_carbon = exposed_mob var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH) if(istype(stomach)) - stomach.adjust_charge(reac_volume * 0.003 * STANDARD_CELL_CHARGE) + stomach.adjust_charge(reac_volume * 0.003 * ETHEREAL_CHARGE_NORMAL) /datum/reagent/consumable/ethanol/telepole name = "Telepole" @@ -2678,7 +2679,7 @@ var/mob/living/carbon/exposed_carbon = exposed_mob var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH) if(istype(stomach)) - stomach.adjust_charge(reac_volume * 0.002 * STANDARD_CELL_CHARGE) + stomach.adjust_charge(reac_volume * 0.002 * ETHEREAL_CHARGE_NORMAL) /datum/reagent/consumable/ethanol/pod_tesla name = "Pod Tesla" @@ -2705,7 +2706,7 @@ var/mob/living/carbon/exposed_carbon = exposed_mob var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH) if(istype(stomach)) - stomach.adjust_charge(reac_volume * 0.005 * STANDARD_CELL_CHARGE) + stomach.adjust_charge(reac_volume * 0.005 * ETHEREAL_CHARGE_NORMAL) // Welcome to the Blue Room Bar and Grill, home to Mars' finest cocktails /datum/reagent/consumable/ethanol/rice_beer diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 20e7e51d52be4..208ffa6707e55 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -588,8 +588,8 @@ . = ..() if(exposed_mob?.mind?.get_skill_level(/datum/skill/gaming) >= SKILL_LEVEL_LEGENDARY && (methods & INGEST) && !HAS_TRAIT(exposed_mob, TRAIT_GAMERGOD)) ADD_TRAIT(exposed_mob, TRAIT_GAMERGOD, "pwr_game") - to_chat(exposed_mob, "As you imbibe the Pwr Game, your gamer third eye opens... \ - You feel as though a great secret of the universe has been made known to you...") + to_chat(exposed_mob, span_nicegreen("As you imbibe the Pwr Game, your gamer third eye opens... \ + You feel as though a great secret of the universe has been made known to you...")) /datum/reagent/consumable/pwr_game/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() @@ -1293,4 +1293,4 @@ var/mob/living/carbon/exposed_carbon = exposed_mob var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH) if(istype(stomach)) - stomach.adjust_charge(reac_volume * 0.003 * STANDARD_CELL_CHARGE) + stomach.adjust_charge(reac_volume * 0.003 * ETHEREAL_CHARGE_NORMAL) diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 15dc966ae3ee0..904d09db7334b 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -51,15 +51,15 @@ affected_mob.apply_status_effect(/datum/status_effect/stoned) if(SPT_PROB(1, seconds_per_tick)) var/smoke_message = pick("You feel relaxed.","You feel calmed.","Your mouth feels dry.","You could use some water.","Your heart beats quickly.","You feel clumsy.","You crave junk food.","You notice you've been moving more slowly.") - to_chat(affected_mob, "[smoke_message]") + to_chat(affected_mob, span_notice("[smoke_message]")) if(SPT_PROB(2, seconds_per_tick)) affected_mob.emote(pick("smile","laugh","giggle")) affected_mob.adjust_nutrition(-0.15 * REM * seconds_per_tick) //munchies if(SPT_PROB(4, seconds_per_tick) && affected_mob.body_position == LYING_DOWN && !affected_mob.IsSleeping()) //chance to fall asleep if lying down - to_chat(affected_mob, "You doze off...") + to_chat(affected_mob, span_warning("You doze off...")) affected_mob.Sleeping(10 SECONDS) if(SPT_PROB(4, seconds_per_tick) && affected_mob.buckled && affected_mob.body_position != LYING_DOWN && !affected_mob.IsParalyzed()) //chance to be couchlocked if sitting - to_chat(affected_mob, "It's too comfy to move...") + to_chat(affected_mob, span_warning("It's too comfy to move...")) affected_mob.Paralyze(10 SECONDS) /datum/reagent/drug/nicotine @@ -73,7 +73,7 @@ metabolization_rate = 0.125 * REAGENTS_METABOLISM ph = 8 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - addiction_types = list(/datum/addiction/nicotine = 18) // 7.2 per 2 seconds + addiction_types = list(/datum/addiction/nicotine = 15) // 6 per 2 seconds //Nicotine is used as a pesticide IRL. /datum/reagent/drug/nicotine/on_hydroponics_apply(obj/machinery/hydroponics/mytray, mob/user) @@ -694,7 +694,7 @@ /datum/reagent/drug/saturnx/on_mob_metabolize(mob/living/invisible_man) . = ..() - playsound(invisible_man, 'sound/chemistry/saturnx_fade.ogg', 40) + playsound(invisible_man, 'sound/effects/chemistry/saturnx_fade.ogg', 40) to_chat(invisible_man, span_nicegreen("You feel pins and needles all over your skin as your body suddenly becomes transparent!")) addtimer(CALLBACK(src, PROC_REF(turn_man_invisible), invisible_man), 1 SECONDS) //just a quick delay to synch up the sound. if(!invisible_man.hud_used) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 194ce35eebd37..b182f11367a3a 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -170,8 +170,8 @@ return exposed_obj.visible_message(span_warning("[exposed_obj] rapidly fries as it's splashed with hot oil! Somehow.")) - exposed_obj.AddElement(/datum/element/fried_item, volume) - exposed_obj.reagents.add_reagent(src.type, reac_volume) + exposed_obj.AddElement(/datum/element/fried_item, volume SECONDS) + exposed_obj.reagents.add_reagent(src.type, reac_volume, reagtemp = holder.chem_temp) /datum/reagent/consumable/nutriment/fat/expose_mob(mob/living/exposed_mob, methods = TOUCH, reac_volume, show_message = TRUE, touch_protection = 0) . = ..() @@ -953,7 +953,7 @@ var/mob/living/carbon/exposed_carbon = exposed_mob var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH) if(istype(stomach)) - stomach.adjust_charge(reac_volume * 0.03 * STANDARD_CELL_CHARGE) + stomach.adjust_charge(reac_volume * 0.03 * ETHEREAL_CHARGE_NORMAL) /datum/reagent/consumable/liquidelectricity/enriched/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() 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 8cfb482cd660f..7d2c0f64bd312 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 @@ -69,7 +69,7 @@ /datum/reagent/inverse/helgrasp/on_mob_add(mob/living/affected_mob, amount) . = ..() to_chat(affected_mob, span_hierophant("You hear laughter as malevolent hands apparate before you, eager to drag you down to hell...! Look out!")) - playsound(affected_mob.loc, 'sound/chemistry/ahaha.ogg', 80, TRUE, -1) //Very obvious tell so people can be ready + playsound(affected_mob.loc, 'sound/effects/chemistry/ahaha.ogg', 80, TRUE, -1) //Very obvious tell so people can be ready //Sends hands after you for your hubris /* @@ -230,7 +230,7 @@ Basically, we fill the time between now and 2s from now with hands based off the //Just the removed itching mechanism - omage to its origins. /datum/reagent/inverse/ichiyuri/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() - if(prob(resetting_probability) && !(HAS_TRAIT(affected_mob, TRAIT_RESTRAINED) || affected_mob.incapacitated())) + if(prob(resetting_probability) && !(HAS_TRAIT(affected_mob, TRAIT_RESTRAINED) || affected_mob.incapacitated)) . = TRUE if(spammer < world.time) to_chat(affected_mob,span_warning("You can't help but itch yourself.")) @@ -539,7 +539,7 @@ Basically, we fill the time between now and 2s from now with hands based off the affected_mob.grab_ghost(force = FALSE) //Shoves them back into their freshly reanimated corpse. back_from_the_dead = TRUE affected_mob.emote("gasp") - affected_mob.playsound_local(affected_mob, 'sound/health/fastbeat.ogg', 65) + affected_mob.playsound_local(affected_mob, 'sound/effects/health/fastbeat.ogg', 65) /datum/reagent/inverse/penthrite/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 2861fe995abf5..3089b7e931c71 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -133,7 +133,7 @@ if(SPT_PROB(10, seconds_per_tick)) to_chat(affected_mob, "You feel confused and disoriented.") if(prob(30)) - SEND_SOUND(affected_mob, sound('sound/weapons/flash_ring.ogg')) + SEND_SOUND(affected_mob, sound('sound/items/weapons/flash_ring.ogg')) /datum/reagent/medicine/cryoxadone name = "Cryoxadone" @@ -1349,6 +1349,9 @@ if (affected_mob.get_timed_status_effect_duration(/datum/status_effect/hallucination) >= 10 SECONDS) affected_mob.adjust_hallucinations(-10 SECONDS * REM * seconds_per_tick) + if(affected_mob.getStaminaLoss() >= 100) + affected_mob.reagents.remove_reagent(type, 2 * REM * seconds_per_tick) + var/need_mob_update = FALSE if(SPT_PROB(10, seconds_per_tick)) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1, 50, affected_organ_flags) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 13ce6e9dc8f53..0ff02d59d4d81 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -208,17 +208,6 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_CLEANS default_container = /obj/item/reagent_containers/cup/glass/waterbottle evaporates = TRUE //SKYRAT EDIT ADDITION - -/datum/glass_style/shot_glass/water - required_drink_type = /datum/reagent/water - icon_state = "shotglassclear" - -/datum/glass_style/drinking_glass/water - required_drink_type = /datum/reagent/water - name = "glass of water" - desc = "The father of all refreshments." - icon_state = "glass_clear" - /datum/glass_style/shot_glass/water required_drink_type = /datum/reagent/water icon_state = "shotglassclear" @@ -622,6 +611,7 @@ fallback_icon = 'icons/obj/drinks/drink_effects.dmi' fallback_icon_state = "spraytan_fallback" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + glass_price = DRINK_PRICE_HIGH /datum/reagent/spraytan/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE) . = ..() @@ -2989,7 +2979,7 @@ //This is intended to a be a scarce reagent to gate certain drugs and toxins with. Do not put in a synthesizer. Renewable sources of this reagent should be inefficient. /datum/reagent/lead name = "Lead" - description = "A dull metalltic element with a low melting point." + description = "A dull metallic element with a low melting point." taste_description = "metal" reagent_state = SOLID color = "#80919d" diff --git a/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm b/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm index e7cb222ac5837..eac83c5efc9eb 100644 --- a/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/reaction_agents_reagents.dm @@ -24,6 +24,7 @@ inverse_chem = null fallback_icon = 'icons/obj/drinks/drink_effects.dmi' fallback_icon_state = "acid_buffer_fallback" + glass_price = DRINK_PRICE_HIGH //Consumes self on addition and shifts ph /datum/reagent/reaction_agent/acidic_buffer/intercept_reagents_transfer(datum/reagents/target, amount) @@ -41,7 +42,7 @@ //give feedback & remove from holder because it's not transferred target.my_atom.audible_message(span_warning(message)) - playsound(target.my_atom, 'sound/chemistry/bufferadd.ogg', 50, TRUE) + playsound(target.my_atom, 'sound/effects/chemistry/bufferadd.ogg', 50, TRUE) holder.remove_reagent(type, amount) /datum/reagent/reaction_agent/basic_buffer @@ -52,6 +53,7 @@ inverse_chem = null fallback_icon = 'icons/obj/drinks/drink_effects.dmi' fallback_icon_state = "base_buffer_fallback" + glass_price = DRINK_PRICE_HIGH /datum/reagent/reaction_agent/basic_buffer/intercept_reagents_transfer(datum/reagents/target, amount) . = ..() @@ -68,7 +70,7 @@ //give feedback & remove from holder because it's not transferred target.my_atom.audible_message(span_warning(message)) - playsound(target.my_atom, 'sound/chemistry/bufferadd.ogg', 50, TRUE) + playsound(target.my_atom, 'sound/effects/chemistry/bufferadd.ogg', 50, TRUE) holder.remove_reagent(type, amount) //purity testor/reaction agent prefactors @@ -100,7 +102,7 @@ is_inverse = TRUE if(is_inverse) target.my_atom.audible_message(span_warning("The beaker bubbles violently as the reagent is added!")) - playsound(target.my_atom, 'sound/chemistry/bufferadd.ogg', 50, TRUE) + playsound(target.my_atom, 'sound/effects/chemistry/bufferadd.ogg', 50, TRUE) else target.my_atom.audible_message(span_warning("The added reagent doesn't seem to do much.")) holder.remove_reagent(type, amount) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 5e553fce962c5..95f73e552be34 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -326,6 +326,19 @@ else affected_mob.adjust_hallucinations(10 SECONDS * REM * seconds_per_tick) +/datum/reagent/toxin/mindbreaker/fish + name = "Jellyfish Hallucinogen" + description = "A hallucinogen structurally similar to the mindbreaker toxin, but with weaker molecular bonds, making it easily degradeable by heat." + +/datum/reagent/toxin/mindbreaker/fish/on_new(data) + . = ..() + if(holder?.my_atom) + RegisterSignals(holder.my_atom, list(COMSIG_ITEM_FRIED, TRAIT_FOOD_BBQ_GRILLED), PROC_REF(on_atom_cooked)) + +/datum/reagent/toxin/mindbreaker/fish/proc/on_atom_cooked(datum/source, cooking_time) + SIGNAL_HANDLER + holder.del_reagent(type) + /datum/reagent/toxin/plantbgone name = "Plant-B-Gone" description = "A harmful toxic mixture to kill plantlife. Do not ingest!" diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index b61a4d4d67cbc..6f561ba161529 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -25,7 +25,7 @@ ///The message shown to nearby people upon mixing, if applicable var/mix_message = "The solution begins to bubble." ///The sound played upon mixing, if applicable - var/mix_sound = 'sound/effects/bubbles.ogg' + var/mix_sound = 'sound/effects/bubbles/bubbles.ogg' /// Set to TRUE if you want the recipe to only react when it's BELOW the required temp. var/is_cold_recipe = FALSE @@ -409,7 +409,7 @@ var/turf/this_turf = get_turf(holder.my_atom) if(sound_and_text) holder.my_atom.audible_message("The [holder.my_atom] suddenly explodes, sending a shockwave rippling through the air!") - playsound(this_turf, 'sound/chemistry/shockwave_explosion.ogg', 80, TRUE) + playsound(this_turf, 'sound/effects/chemistry/shockwave_explosion.ogg', 80, TRUE) //Modified goonvortex for(var/atom/movable/movey as anything in orange(range, this_turf)) if(!istype(movey, /atom/movable)) diff --git a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm index ae6e616b20390..802d5a820e2f5 100644 --- a/code/modules/reagents/chemistry/recipes/cat2_medicines.dm +++ b/code/modules/reagents/chemistry/recipes/cat2_medicines.dm @@ -131,7 +131,7 @@ if(living_mob.flash_act(1, length = 5)) living_mob.set_eye_blur(20 SECONDS) holder.my_atom.audible_message(span_notice("[icon2html(holder.my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] The [holder.my_atom] lets out a loud bang!")) - playsound(holder.my_atom, 'sound/effects/explosion1.ogg', 50, 1) + playsound(holder.my_atom, 'sound/effects/explosion/explosion1.ogg', 50, 1) /datum/chemical_reaction/medicine/hercuri results = list(/datum/reagent/medicine/c2/hercuri = 5) @@ -154,7 +154,7 @@ /datum/chemical_reaction/medicine/hercuri/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added) if(off_cooldown(holder, equilibrium, 2, "hercuri_freeze")) return - playsound(holder.my_atom, 'sound/magic/ethereal_exit.ogg', 50, 1) + playsound(holder.my_atom, 'sound/effects/magic/ethereal_exit.ogg', 50, 1) holder.my_atom.visible_message("The reaction frosts over, releasing its chilly contents!") var/radius = max((equilibrium.step_target_vol/50), 1) freeze_radius(holder, equilibrium, 200, radius, 60 SECONDS) //drying agent exists @@ -345,10 +345,10 @@ . = ..() if(off_cooldown(holder, equilibrium, 1, "lub")) explode_shockwave(holder, equilibrium, 3, 2) - playsound(holder.my_atom, 'sound/health/slowbeat.ogg', 50, 1) // this is 2 mintues long (!) cut it up! + playsound(holder.my_atom, 'sound/effects/health/slowbeat.ogg', 50, 1) // this is 2 mintues long (!) cut it up! if(off_cooldown(holder, equilibrium, 1, "dub", 0.5)) explode_shockwave(holder, equilibrium, 3, 2, implosion = TRUE) - playsound(holder.my_atom, 'sound/health/slowbeat.ogg', 50, 1) + playsound(holder.my_atom, 'sound/effects/health/slowbeat.ogg', 50, 1) explode_fire_vortex(holder, equilibrium, 1, 1) //enabling hardmode diff --git a/code/modules/reagents/chemistry/recipes/catalysts.dm b/code/modules/reagents/chemistry/recipes/catalysts.dm index 7ef4a8a771cbe..bdad316f8f9f6 100644 --- a/code/modules/reagents/chemistry/recipes/catalysts.dm +++ b/code/modules/reagents/chemistry/recipes/catalysts.dm @@ -5,7 +5,7 @@ results = list(/datum/reagent/catalyst_agent/speed/medicine = 2) required_reagents = list(/datum/reagent/medicine/c2/libital = 3, /datum/reagent/medicine/c2/probital = 4, /datum/reagent/toxin/plasma = 2) mix_message = "The reaction evaporates slightly as the mixture solidifies" - mix_sound = 'sound/chemistry/catalyst.ogg' + mix_sound = 'sound/effects/chemistry/catalyst.ogg' reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_UNIQUE | REACTION_TAG_CHEMICAL required_temp = 200 optimal_temp = 500 diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 7b8a0655cb350..85a27d0f94f0a 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -38,6 +38,13 @@ results = list(/datum/reagent/consumable/salt = 2) required_reagents = list(/datum/reagent/sodium = 1, /datum/reagent/chlorine = 1) // That's what I said! Sodium Chloride! reaction_tags = REACTION_TAG_EASY | REACTION_TAG_FOOD + required_other = TRUE + +/datum/chemical_reaction/sodiumchloride/pre_reaction_other_checks(datum/reagents/holder) + . = ..() + if(holder.has_reagent(/datum/reagent/consumable/liquidelectricity) || holder.has_reagent(/datum/reagent/consumable/liquidelectricity/enriched)) + return FALSE + /datum/chemical_reaction/stable_plasma results = list(/datum/reagent/stable_plasma = 1) @@ -578,7 +585,7 @@ /datum/chemical_reaction/monkey required_reagents = list(/datum/reagent/monkey_powder = 50, /datum/reagent/water = 1) reaction_flags = REACTION_INSTANT - mix_message = "Expands into a brown mass before shaping itself into a monkey!." + mix_message = span_danger("Expands into a brown mass before shaping itself into a monkey!.") /datum/chemical_reaction/monkey/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) var/mob/living/carbon/M = holder.my_atom @@ -600,6 +607,18 @@ results = list(/datum/reagent/oxygen = 2.5, /datum/reagent/hydrogen = 5) required_reagents = list(/datum/reagent/consumable/liquidelectricity/enriched = 1, /datum/reagent/water = 5) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL + +//salt electrolysis +/datum/chemical_reaction/saltelectrolysis + results = list(/datum/reagent/chlorine = 2.5, /datum/reagent/sodium = 2.5) + required_reagents = list(/datum/reagent/consumable/salt = 5) + required_catalysts = list(/datum/reagent/consumable/liquidelectricity = 1) + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL + +/datum/chemical_reaction/saltelectrolysis/enriched + required_catalysts = list(/datum/reagent/consumable/liquidelectricity/enriched = 1) + + //butterflium /datum/chemical_reaction/butterflium required_reagents = list(/datum/reagent/colorful_reagent = 1, /datum/reagent/medicine/omnizine = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/consumable/nutriment = 1) @@ -621,18 +640,18 @@ /datum/chemical_reaction/scream/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) /// List of screams to play. var/static/list/screams = 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', - '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', - 'sound/voice/human/wilhelm_scream.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_1.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_2.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_3.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_4.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_5.ogg', + 'sound/mobs/humanoids/human/scream/malescream_1.ogg', + 'sound/mobs/humanoids/human/scream/malescream_2.ogg', + 'sound/mobs/humanoids/human/scream/malescream_3.ogg', + 'sound/mobs/humanoids/human/scream/malescream_4.ogg', + 'sound/mobs/humanoids/human/scream/malescream_5.ogg', + 'sound/mobs/humanoids/human/scream/malescream_6.ogg', + 'sound/mobs/humanoids/human/scream/wilhelm_scream.ogg', ) playsound(holder.my_atom, pick(screams), created_volume*5,TRUE) @@ -760,7 +779,7 @@ /datum/chemical_reaction/pentaerythritol results = list(/datum/reagent/pentaerythritol = 2) - required_reagents = list(/datum/reagent/acetaldehyde = 1, /datum/reagent/toxin/formaldehyde = 3, /datum/reagent/water = 1 ) + required_reagents = list(/datum/reagent/acetaldehyde = 1, /datum/reagent/toxin/formaldehyde = 3, /datum/reagent/lye = 1) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL /datum/chemical_reaction/acetaldehyde @@ -865,7 +884,7 @@ results = list(/datum/reagent/eigenstate = 1) required_reagents = list(/datum/reagent/bluespace = 1, /datum/reagent/stable_plasma = 1, /datum/reagent/consumable/caramel = 1) mix_message = "the reaction zaps suddenly!" - mix_sound = 'sound/chemistry/bluespace.ogg' + mix_sound = 'sound/effects/chemistry/bluespace.ogg' //FermiChem vars: required_temp = 350 optimal_temp = 600 @@ -971,3 +990,16 @@ var/location = get_turf(holder.my_atom) for(var/i in 1 to created_volume) new /obj/item/stack/sheet/hauntium(location) + +/datum/chemical_reaction/fish_hallucinogen_degradation + results = list(/datum/reagent/consumable/nutriment/protein = 0.1) + required_reagents = list(/datum/reagent/toxin/mindbreaker/fish = 1) + required_temp = 363.15 // 90° + optimal_temp = 450 + rate_up_lim = 8 + temp_exponent_factor = 1.5 + optimal_ph_min = 2 + optimal_ph_max = 10 + thermic_constant = 80 + H_ion_release = 2 + reaction_tags = REACTION_TAG_EASY diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 62a14ddc794be..69dda419d7cd3 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -196,7 +196,7 @@ required_temp = 474 strengthdiv = 10 modifier = 5 - mix_message = "Sparks start flying around the gunpowder!" + mix_message = span_boldnotice("Sparks start flying around the gunpowder!") /datum/chemical_reaction/reagent_explosion/gunpowder_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) addtimer(CALLBACK(src, PROC_REF(default_explode), holder, created_volume, modifier, strengthdiv), rand(5 SECONDS, 10 SECONDS)) @@ -226,9 +226,9 @@ /datum/chemical_reaction/beesplosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) var/location = holder.my_atom.drop_location() if(created_volume < 5) - playsound(location,'sound/effects/sparks1.ogg', 100, TRUE) + playsound(location,'sound/effects/sparks/sparks1.ogg', 100, TRUE) else - playsound(location,'sound/creatures/bee.ogg', 100, TRUE) + playsound(location,'sound/mobs/non-humanoids/bee/bee.ogg', 100, TRUE) var/list/beeagents = list() for(var/R in holder.reagent_list) if(required_reagents[R]) @@ -498,7 +498,7 @@ if(!cryostylane) return ..() var/turf/local_turf = get_turf(holder.my_atom) - playsound(local_turf, 'sound/magic/ethereal_exit.ogg', 50, 1) + playsound(local_turf, 'sound/effects/magic/ethereal_exit.ogg', 50, 1) local_turf.visible_message("The reaction frosts over, releasing its chilly contents!") freeze_radius(holder, null, holder.chem_temp*2, clamp(cryostylane.volume/30, 2, 6), 120 SECONDS, 2) clear_reactants(holder, 15) @@ -508,7 +508,7 @@ /datum/chemical_reaction/cryostylane/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) var/datum/reagent/cryostylane/cryostylane = holder.has_reagent(/datum/reagent/cryostylane) var/turf/local_turf = get_turf(holder.my_atom) - playsound(local_turf, 'sound/magic/ethereal_exit.ogg', 50, 1) + playsound(local_turf, 'sound/effects/magic/ethereal_exit.ogg', 50, 1) local_turf.visible_message("The reaction furiously freezes up as a snowman suddenly rises out of the [holder.my_atom.name]!") freeze_radius(holder, equilibrium, holder.chem_temp, clamp(cryostylane.volume/15, 3, 10), 180 SECONDS, 5) new /obj/structure/statue/snow/snowman(local_turf) @@ -564,22 +564,22 @@ /datum/chemical_reaction/teslium results = list(/datum/reagent/teslium = 3) required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/silver = 1, /datum/reagent/gunpowder = 1) - mix_message = "A jet of sparks flies from the mixture as it merges into a flickering slurry." + mix_message = span_danger("A jet of sparks flies from the mixture as it merges into a flickering slurry.") required_temp = 400 reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE /datum/chemical_reaction/energized_jelly results = list(/datum/reagent/teslium/energized_jelly = 2) required_reagents = list(/datum/reagent/toxin/slimejelly = 1, /datum/reagent/teslium = 1) - mix_message = "The slime jelly starts glowing intermittently." + mix_message = span_danger("The slime jelly starts glowing intermittently.") reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DANGEROUS | REACTION_TAG_HEALING | REACTION_TAG_OTHER /datum/chemical_reaction/reagent_explosion/teslium_lightning required_reagents = list(/datum/reagent/teslium = 1, /datum/reagent/water = 1) strengthdiv = 100 modifier = -100 - mix_message = "The teslium starts to spark as electricity arcs away from it!" - mix_sound = 'sound/machines/defib_zap.ogg' + mix_message = span_boldannounce("The teslium starts to spark as electricity arcs away from it!") + mix_sound = 'sound/machines/defib/defib_zap.ogg' var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN | ZAP_LOW_POWER_GEN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS @@ -603,7 +603,7 @@ if(QDELETED(holder_atom)) return tesla_zap(source = holder_atom, zap_range = 7, power = power, cutoff = 1 KILO JOULES, zap_flags = zap_flags) - playsound(holder_atom, 'sound/machines/defib_zap.ogg', 50, TRUE) + playsound(holder_atom, 'sound/machines/defib/defib_zap.ogg', 50, TRUE) /datum/chemical_reaction/reagent_explosion/teslium_lightning/heat required_temp = 474 @@ -640,4 +640,4 @@ /datum/chemical_reaction/reagent_explosion/patriotism_overload required_reagents = list(/datum/reagent/consumable/ethanol/planet_cracker = 1, /datum/reagent/consumable/ethanol/triumphal_arch = 1) strengthdiv = 20 - mix_message = "The two patriotic drinks instantly reject each other!" + mix_message = span_boldannounce("The two patriotic drinks instantly reject each other!") diff --git a/code/modules/reagents/chemistry/recipes/reaction_agents.dm b/code/modules/reagents/chemistry/recipes/reaction_agents.dm index f9292cf8c14b9..454a13aec5716 100644 --- a/code/modules/reagents/chemistry/recipes/reaction_agents.dm +++ b/code/modules/reagents/chemistry/recipes/reaction_agents.dm @@ -64,7 +64,7 @@ results = list(/datum/reagent/prefactor_b = 5) required_reagents = list(/datum/reagent/prefactor_a = 5) mix_message = "The solution's viscosity decreases." - mix_sound = 'sound/chemistry/bluespace.ogg' //Maybe use this elsewhere instead + mix_sound = 'sound/effects/chemistry/bluespace.ogg' //Maybe use this elsewhere instead required_temp = 50 optimal_temp = 500 overheat_temp = 500 diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 13eaffca3a898..21d076e949fd7 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -147,7 +147,7 @@ var/obj/item/food_item = new chosen(T) ADD_TRAIT(food_item, TRAIT_FOOD_SILVER, INNATE_TRAIT) if(prob(5))//Fry it! - food_item.AddElement(/datum/element/fried_item, rand(15, 60)) + food_item.AddElement(/datum/element/fried_item, rand(15, 60) SECONDS) if(prob(5))//Grill it! food_item.AddElement(/datum/element/grilled_item, rand(30 SECONDS, 100 SECONDS)) if(prob(50)) diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index 0fcae783d8993..256bc31be117e 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -309,7 +309,7 @@ /datum/chemical_reaction/heparin results = list(/datum/reagent/toxin/heparin = 3) required_reagents = list(/datum/reagent/toxin/formaldehyde = 1, /datum/reagent/consumable/salt = 1, /datum/reagent/lithium = 1) - mix_message = "The mixture thins and loses all color." + mix_message = span_danger("The mixture thins and loses all color.") is_cold_recipe = FALSE required_temp = 100 optimal_temp = 450 @@ -329,7 +329,7 @@ /datum/chemical_reaction/rotatium results = list(/datum/reagent/toxin/rotatium = 3) required_reagents = list(/datum/reagent/toxin/mindbreaker = 1, /datum/reagent/teslium = 1, /datum/reagent/toxin/fentanyl = 1) - mix_message = "After sparks, fire, and the smell of mindbreaker, the mix is constantly spinning with no stop in sight." + mix_message = span_danger("After sparks, fire, and the smell of mindbreaker, the mix is constantly spinning with no stop in sight.") is_cold_recipe = FALSE required_temp = 100 optimal_temp = 450 @@ -389,7 +389,7 @@ /datum/chemical_reaction/bonehurtingjuice results = list(/datum/reagent/toxin/bonehurtingjuice = 5) required_reagents = list(/datum/reagent/toxin/mutagen = 1, /datum/reagent/toxin/itching_powder = 3, /datum/reagent/consumable/milk = 1) - mix_message = "The mixture suddenly becomes clear and looks a lot like water. You feel a strong urge to drink it." + mix_message = span_danger("The mixture suddenly becomes clear and looks a lot like water. You feel a strong urge to drink it.") is_cold_recipe = FALSE required_temp = 100 optimal_temp = 450 diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 19b6b5d3bd829..f6cafb535d808 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -118,9 +118,6 @@ balloon_alert(user, "transferring [amount_per_transfer_from_this]u") mode_change_message(user) -/obj/item/reagent_containers/attack(mob/M, mob/living/user, def_zone) - if(user.combat_mode) - return ..() /obj/item/reagent_containers/pre_attack_secondary(atom/target, mob/living/user, params) if(HAS_TRAIT(target, TRAIT_DO_NOT_SPLASH)) return ..() @@ -258,7 +255,6 @@ reagents.expose(target, TOUCH) //SKYRAT EDIT END visible_message("[src] spills its contents all over [target].") - //reagents.expose(target, TOUCH) //SKYRAT EDIT REMOVAL if(QDELETED(src)) return diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 75fc8aef8920c..15c79e4c150b9 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -103,7 +103,7 @@ if (IS_WRITING_UTENSIL(tool)) if(!user.can_write(tool)) return - var/custom_label = tgui_input_text(user, "What would you like to label the blood pack?", "Blood Pack", name, MAX_NAME_LEN) + var/custom_label = tgui_input_text(user, "What would you like to label the blood pack?", "Blood Pack", name, max_length = MAX_NAME_LEN) if(!user.can_perform_action(src)) return if(user.get_active_held_item() != tool) diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index f7e3204e99bfa..cba2365040cce 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -118,7 +118,7 @@ return ITEM_INTERACT_BLOCKING var/trans = reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) - playsound(target.loc, pick('sound/effects/liquid_pour1.ogg', 'sound/effects/liquid_pour2.ogg', 'sound/effects/liquid_pour3.ogg'), 50) + playsound(target.loc, SFX_LIQUID_POUR, 50, TRUE) to_chat(user, span_notice("You transfer [trans] unit\s of the solution to [target].")) SEND_SIGNAL(src, COMSIG_REAGENTS_CUP_TRANSFER_TO, target) target.update_appearance() @@ -134,6 +134,7 @@ return ITEM_INTERACT_BLOCKING var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) + playsound(target.loc, SFX_LIQUID_POUR, 50, TRUE) to_chat(user, span_notice("You fill [src] with [trans] unit\s of the contents of [target].")) SEND_SIGNAL(src, COMSIG_REAGENTS_CUP_TRANSFER_FROM, target) target.update_appearance() @@ -143,11 +144,11 @@ /obj/item/reagent_containers/cup/interact_with_atom_secondary(atom/target, mob/living/user, list/modifiers) if(user.combat_mode) - return ITEM_INTERACT_SKIP_TO_ATTACK + return NONE if(!check_allowed_items(target, target_self = TRUE)) return NONE if(!spillable) - return ITEM_INTERACT_BLOCKING + return NONE if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. if(!target.reagents.total_volume) @@ -159,10 +160,13 @@ return ITEM_INTERACT_BLOCKING var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) + playsound(target.loc, SFX_LIQUID_POUR, 50, TRUE) to_chat(user, span_notice("You fill [src] with [trans] unit\s of the contents of [target].")) + SEND_SIGNAL(src, COMSIG_REAGENTS_CUP_TRANSFER_FROM, target) + target.update_appearance() + return ITEM_INTERACT_SUCCESS - target.update_appearance() - return ITEM_INTERACT_SUCCESS + return NONE /obj/item/reagent_containers/cup/attackby(obj/item/attacking_item, mob/user, params) var/hotness = attacking_item.get_temperature() @@ -233,6 +237,7 @@ drop_sound = 'sound/items/handling/beaker_place.ogg' volume = 60 //SKYRAT EDIT: Addition possible_transfer_amounts = list(5,10,15,20,30,60) //SKYRAT EDIT: Addition + sound_vary = TRUE /obj/item/reagent_containers/cup/beaker/Initialize(mapload) . = ..() @@ -349,6 +354,9 @@ /obj/item/reagent_containers/cup/beaker/synthflesh list_reagents = list(/datum/reagent/medicine/c2/synthflesh = 50) +/obj/item/reagent_containers/cup/beaker/synthflesh/named + name = "synthflesh beaker" + /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." diff --git a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm index 7441614682c06..fa3a53434bbcc 100644 --- a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm @@ -14,6 +14,7 @@ obj_flags = UNIQUE_RENAME drop_sound = 'sound/items/handling/drinkglass_drop.ogg' pickup_sound = 'sound/items/handling/drinkglass_pickup.ogg' + sound_vary = TRUE custom_price = PAYCHECK_LOWER //the screwdriver cocktail can make a drinking glass into the world's worst screwdriver. beautiful. toolspeed = 25 diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm index e58864a6a7097..c0882dbd30e18 100644 --- a/code/modules/reagents/reagent_containers/cups/drinks.dm +++ b/code/modules/reagents/reagent_containers/cups/drinks.dm @@ -264,7 +264,7 @@ cap_lost = TRUE else to_chat(user, span_notice("You remove the cap from [src].")) - playsound(loc, 'sound/effects/can_open1.ogg', 50, TRUE) + playsound(loc, 'sound/effects/can/can_open1.ogg', 50, TRUE) else cap_on = TRUE spillable = FALSE diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm index 7b2183b1f2269..67741748461c7 100644 --- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm +++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm @@ -39,11 +39,93 @@ var/bottle_knockdown_duration = BOTTLE_KNOCKDOWN_DEFAULT_DURATION tool_behaviour = TOOL_ROLLINGPIN // Used to knock out the Chef. toolspeed = 1.3 //it's a little awkward to use, but it's a cylinder alright. + /// A contained piece of paper, a photo, or space cash, that we can use as a message or gift to future spessmen. + var/obj/item/message_in_a_bottle /obj/item/reagent_containers/cup/glass/bottle/Initialize(mapload, vol) . = ..() var/static/list/recipes = list(/datum/crafting_recipe/molotov) AddElement(/datum/element/slapcrafting, recipes) + register_context() + register_item_context() + +/obj/item/reagent_containers/cup/glass/bottle/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(message_in_a_bottle) + return NONE + if(istype(held_item, /obj/item/paper) || istype(held_item, /obj/item/stack/spacecash) || istype(held_item, /obj/item/photo)) + context[SCREENTIP_CONTEXT_LMB] = "Insert message" + return CONTEXTUAL_SCREENTIP_SET + return NONE + +/obj/item/reagent_containers/cup/glass/bottle/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) + if(message_in_a_bottle && HAS_TRAIT(target, TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION)) + context[SCREENTIP_CONTEXT_RMB] = "Toss message" + return CONTEXTUAL_SCREENTIP_SET + return NONE + +/obj/item/reagent_containers/cup/glass/bottle/Exited(atom/movable/gone, atom/newloc) + if(gone == message_in_a_bottle) + message_in_a_bottle = null + if(!QDELETED(src)) + update_icon(UPDATE_OVERLAYS) + return ..() + +/obj/item/reagent_containers/cup/glass/bottle/CheckParts(list/parts_list) + . = ..() + var/obj/item/reagent_containers/cup/glass/bottle/bottle = locate() in contents + if(bottle.message_in_a_bottle) + message_in_a_bottle = bottle.message_in_a_bottle + bottle.message_in_a_bottle.forceMove(src) + +/obj/item/reagent_containers/cup/glass/bottle/examine(mob/user) + . = ..() + if(message_in_a_bottle) + . += span_info("there's \a [message_in_a_bottle] inside it. Break it to take it out, or find a beach or ocean and toss it with [EXAMINE_HINT("right-click")].") + else if(isGlass) + . += span_tinynoticeital("you could place a paper, photo or space cash inside it...") + +/obj/item/reagent_containers/cup/glass/bottle/update_overlays() + . = ..() + if(message_in_a_bottle) + var/overlay = add_message_overlay() + if(overlay) + . += overlay + +/obj/item/reagent_containers/cup/glass/bottle/interact_with_atom_secondary(atom/target, mob/living/user, list/modifiers) + if(user.combat_mode || !HAS_TRAIT(target, TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION)) + return ..() + if(!user.temporarilyRemoveItemFromInventory(src)) + balloon_alert(user, "it's stuck to your hand!") + return ITEM_INTERACT_BLOCKING + user.visible_message(span_notice("[user] tosses [src] in [target]"), span_notice("You toss [src] in [target]"), span_notice("you hear a splash.")) + SSpersistence.save_message_bottle(message_in_a_bottle, type) + playsound(target, 'sound/effects/bigsplash.ogg', 70) + qdel(src) + return ITEM_INTERACT_SUCCESS + +/obj/item/reagent_containers/cup/glass/bottle/item_interaction(mob/living/user, obj/item/item, list/modifiers) + if(!isGlass) + return NONE + if(!istype(item, /obj/item/paper) && !istype(item, /obj/item/stack/spacecash) && !istype(item, /obj/item/photo)) + return NONE + if(message_in_a_bottle) + balloon_alert(user, "has a message already!") + return ITEM_INTERACT_BLOCKING + if(!user.transferItemToLoc(item, src)) + balloon_alert(user, "it's stuck to your hand!") + return ITEM_INTERACT_BLOCKING + balloon_alert(user, "message inserted") + message_in_a_bottle = item + update_icon(UPDATE_OVERLAYS) + return ITEM_INTERACT_SUCCESS + +/obj/item/reagent_containers/cup/glass/bottle/proc/add_message_overlay() + if(istype(message_in_a_bottle, /obj/item/paper)) + return "paper_in_bottle" + if(istype(message_in_a_bottle, /obj/item/photo)) + return "photo_in_bottle" + if(istype(message_in_a_bottle, /obj/item/stack/spacecash)) + return "cash_in_bottle" /obj/item/reagent_containers/cup/glass/bottle/small name = "small glass bottle" @@ -56,14 +138,16 @@ if(bartender_check(target) && ranged) return SplashReagents(target, ranged, override_spillable = TRUE) - var/obj/item/broken_bottle/B = new(drop_location()) + var/obj/item/broken_bottle/broken = new(drop_location()) if(!ranged && thrower) - thrower.put_in_hands(B) - B.mimic_broken(src, target, break_top) - B.inhand_icon_state = broken_inhand_icon_state + thrower.put_in_hands(broken) + broken.mimic_broken(src, target, break_top) + broken.inhand_icon_state = broken_inhand_icon_state + if(message_in_a_bottle) + message_in_a_bottle.forceMove(drop_location()) qdel(src) - target.Bumped(B) + target.Bumped(broken) /obj/item/reagent_containers/cup/glass/bottle/try_splash(mob/living/user, atom/target) @@ -176,7 +260,7 @@ inhand_icon_state = "broken_beer" lefthand_file = 'icons/mob/inhands/items/drinks_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/drinks_righthand.dmi' - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("stabs", "slashes", "attacks") attack_verb_simple = list("stab", "slash", "attack") sharpness = SHARP_EDGED @@ -339,6 +423,9 @@ list_reagents = list(/datum/reagent/water/holywater = 100) drink_type = NONE +/obj/item/reagent_containers/cup/glass/bottle/holywater/add_message_overlay() + return //looks too weird... + /obj/item/reagent_containers/cup/glass/bottle/holywater/hell desc = "A flask of holy water...it's been sitting in the Necropolis a while though." icon_state = "unholyflask" @@ -501,7 +588,6 @@ list_reagents = list(/datum/reagent/consumable/ethanol/sake = 100) /obj/item/reagent_containers/cup/glass/bottle/sake/Initialize(mapload) - . = ..() if(prob(10)) name = "Fluffy Tail Sake" desc += " On the bottle is a picture of a kitsune with nine touchable tails." @@ -510,6 +596,12 @@ name = "Inubashiri's Home Brew" desc += " Awoo." icon_state = "sakebottle_i" + return ..() + +/obj/item/reagent_containers/cup/glass/bottle/sake/add_message_overlay() + if(icon_state == "sakebottle_k") //doesn't fit the sprite + return + return ..() /obj/item/reagent_containers/cup/glass/bottle/fernet name = "Fernet Bronca" @@ -530,6 +622,9 @@ icon_state = "curacao_bottle" list_reagents = list(/datum/reagent/consumable/ethanol/curacao = 100) +/obj/item/reagent_containers/cup/glass/bottle/curacao/add_message_overlay() + return //doesn't fit the sprite + /obj/item/reagent_containers/cup/glass/bottle/navy_rum name = "Pride of the Union Navy-Strength Rum" desc = "Ironically named, given it's made in Bermuda." @@ -574,6 +669,9 @@ ///Whether this bottle was a victim of a successful sabrage attempt var/sabraged = FALSE +/obj/item/reagent_containers/cup/glass/bottle/champagne/add_message_overlay() + return //doesn't stylistically fit the sprite + /obj/item/reagent_containers/cup/glass/bottle/champagne/cursed sabrage_success_percentile = 0 //force of the sharp item used to sabrage will not increase success chance @@ -683,7 +781,7 @@ name = "champagne cork" icon = 'icons/obj/drinks/drink_effects.dmi' icon_state = "champagne_cork" - hitsound = 'sound/weapons/genhit.ogg' + hitsound = 'sound/items/weapons/genhit.ogg' damage = 10 sharpness = NONE impact_effect_type = null @@ -733,12 +831,18 @@ icon_state = "hoochbottle" list_reagents = list(/datum/reagent/consumable/ethanol/hooch = 100) +/obj/item/reagent_containers/cup/glass/bottle/hooch/add_message_overlay() + return //doesn't fit the sprite + /obj/item/reagent_containers/cup/glass/bottle/moonshine name = "moonshine jug" desc = "It is said that the ancient Applalacians used these stoneware jugs to capture lightning in a bottle." icon_state = "moonshinebottle" list_reagents = list(/datum/reagent/consumable/ethanol/moonshine = 100) +/obj/item/reagent_containers/cup/glass/bottle/moonshine/add_message_overlay() + return //doesn't fit the sprite + /obj/item/reagent_containers/cup/glass/bottle/mushi_kombucha name = "Solzara Brewing Company Mushi Kombucha" desc = "Best drunk over ice to savour the mushroomy flavour." @@ -790,15 +894,15 @@ ) /obj/item/reagent_containers/cup/glass/bottle/molotov/CheckParts(list/parts_list) - ..() - var/obj/item/reagent_containers/cup/glass/bottle/B = locate() in contents - if(B) - icon_state = B.icon_state - B.reagents.copy_to(src, 100) - if(istype(B, /obj/item/reagent_containers/cup/glass/bottle/juice)) - desc += " You're not sure if making this out of a carton was the brightest idea." - isGlass = FALSE - return + . = ..() + var/obj/item/reagent_containers/cup/glass/bottle/bottle = locate() in contents + if(!bottle) + return + icon_state = bottle.icon_state + bottle.reagents.copy_to(src, 100) + if(istype(bottle, /obj/item/reagent_containers/cup/glass/bottle/juice)) + desc += " You're not sure if making this out of a carton was the brightest idea." + isGlass = FALSE /obj/item/reagent_containers/cup/glass/bottle/molotov/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum, do_splash = FALSE) ..(hit_atom, throwingdatum, do_splash = FALSE) @@ -901,7 +1005,7 @@ for (var/mob/living/M in view(2, get_turf(src))) // letting people and/or narcs know when the pruno is done if(HAS_TRAIT(M, TRAIT_ANOSMIA)) to_chat(M, span_info("A pungent smell emanates from [src], like fruit puking out its guts.")) - playsound(get_turf(src), 'sound/effects/bubbles2.ogg', 25, TRUE) + playsound(get_turf(src), 'sound/effects/bubbles/bubbles2.ogg', 25, TRUE) /** * Cartons diff --git a/code/modules/reagents/reagent_containers/cups/soda.dm b/code/modules/reagents/reagent_containers/cups/soda.dm index 2e85b2273f45e..7772a64f60e3d 100644 --- a/code/modules/reagents/reagent_containers/cups/soda.dm +++ b/code/modules/reagents/reagent_containers/cups/soda.dm @@ -69,7 +69,7 @@ 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) + playsound(M,'sound/items/weapons/pierce.ogg', rand(10,50), TRUE) var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(M.loc) crushed_can.icon_state = icon_state qdel(src) @@ -118,7 +118,7 @@ if(iter_mob != target) iter_mob.add_mood_event("observed_soda_spill", /datum/mood_event/observed_soda_spill, target, src) - playsound(src, 'sound/effects/can_pop.ogg', 80, TRUE) + playsound(src, 'sound/effects/can/can_pop.ogg', 80, TRUE) if(!hide_message) visible_message(span_danger("[src] spills over, fizzing its contents all over [target]!")) spillable = TRUE @@ -151,7 +151,7 @@ /obj/item/reagent_containers/cup/soda_cans/attack_self_secondary(mob/user) if(!is_drainable()) - playsound(src, 'sound/effects/can_shake.ogg', 50, TRUE) + playsound(src, 'sound/effects/can/can_shake.ogg', 50, TRUE) user.visible_message(span_danger("[user] shakes [src]!"), span_danger("You shake up [src]!"), vision_distance=2) fizziness += SODA_FIZZINESS_SHAKE return diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 62c9dfbb05c35..a1792a9670db3 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -35,6 +35,9 @@ // (because the desired effect will just work out of the box) if(istype(interacting_with, /obj/structure/sink) || istype(interacting_with, /obj/structure/mop_bucket/janitorialcart) || istype(interacting_with, /obj/machinery/hydroponics)) return NONE + // Always skip on storage and tables + if(HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return NONE return try_spray(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING @@ -66,7 +69,7 @@ playsound(src, spray_sound, 50, TRUE, -6) user.changeNext_move(CLICK_CD_RANGE * 2) - user.newtonian_move(get_dir(target, user)) + user.newtonian_move(get_angle(target, user)) return TRUE /// Handles creating a chem puff that travels towards the target atom, exposing reagents to everything it hits on the way. @@ -154,7 +157,7 @@ set name = "Empty Spray Bottle" set category = "Object" set src in usr - if(usr.incapacitated()) + if(usr.incapacitated) return if (tgui_alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", list("Yes", "No")) != "Yes") return @@ -229,8 +232,8 @@ stream_range = 4 amount_per_transfer_from_this = 5 list_reagents = list(/datum/reagent/consumable/condensedcapsaicin = 50) - pickup_sound = 'sound/items/pepper_spray_pick_up.ogg' - drop_sound = 'sound/items/pepper_spray_drop.ogg' + pickup_sound = 'sound/items/handling/pepper_spray/pepper_spray_pick_up.ogg' + drop_sound = 'sound/items/handling/pepper_spray/pepper_spray_drop.ogg' /obj/item/reagent_containers/spray/pepper/empty //for protolathe printing list_reagents = null @@ -397,6 +400,7 @@ current_range = 2 spray_range = 2 spray_sound = 'sound/effects/snap.ogg' + possible_transfer_amounts = list(5) /obj/item/reagent_containers/spray/chemsprayer/party/spray(atom/A, mob/user) . = ..() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index ab0aa7f153040..045f156a095d5 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -79,19 +79,16 @@ . = ..() if(. && atom_integrity > 0) if(tank_volume && (damage_flag == BULLET || damage_flag == LASER)) - //SKYRAT EDIT CHANGE - var/guaranteed_violent = (damage_flag == BULLET || damage_flag == LASER) - boom(damage_type, guaranteed_violent) - //SKYRAT EDIT END + boom() -/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params) - if(W.is_refillable()) +/obj/structure/reagent_dispensers/attackby(obj/item/attacking_item, mob/user, params) + if(attacking_item.is_refillable()) return FALSE //so we can refill them via their afterattack. - if(istype(W, /obj/item/assembly_holder) && accepts_rig) + if(istype(attacking_item, /obj/item/assembly_holder) && accepts_rig) if(rig) balloon_alert(user, "another device is in the way!") return ..() - var/obj/item/assembly_holder/holder = W + var/obj/item/assembly_holder/holder = attacking_item if(!(locate(/obj/item/assembly/igniter) in holder.assemblies)) return ..() @@ -112,8 +109,8 @@ user.balloon_alert_to_viewers("attached rig") return - if(istype(W, /obj/item/stack/sheet/iron) && can_be_tanked) - var/obj/item/stack/sheet/iron/metal_stack = W + if(istype(attacking_item, /obj/item/stack/sheet/iron) && can_be_tanked) + var/obj/item/stack/sheet/iron/metal_stack = attacking_item metal_stack.use(1) var/obj/structure/reagent_dispensers/plumbed/storage/new_tank = new /obj/structure/reagent_dispensers/plumbed/storage(drop_location()) new_tank.reagents.maximum_volume = reagents.maximum_volume @@ -304,27 +301,39 @@ // if this sucks, feel free to change it, but make sure the damn thing will log. thanks. return ..() -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params) - if(I.tool_behaviour == TOOL_WELDER) - if(!reagents.has_reagent(/datum/reagent/fuel)) - to_chat(user, span_warning("[src] is out of fuel!")) +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/attacking_item, mob/user, params) + if(attacking_item.tool_behaviour != TOOL_WELDER) + return ..() + + var/obj/item/weldingtool/refilling_welder = attacking_item + if(istype(refilling_welder) && !refilling_welder.welding) + if(refilling_welder.reagents.has_reagent(/datum/reagent/fuel, refilling_welder.max_fuel)) + to_chat(user, span_warning("Your [refilling_welder.name] is already full!")) return - var/obj/item/weldingtool/W = I - if(istype(W) && !W.welding) - if(W.reagents.has_reagent(/datum/reagent/fuel, W.max_fuel)) - to_chat(user, span_warning("Your [W.name] is already full!")) - return - reagents.trans_to(W, W.max_fuel, transferred_by = user) - user.visible_message(span_notice("[user] refills [user.p_their()] [W.name]."), span_notice("You refill [W].")) - playsound(src, 'sound/effects/refill.ogg', 50, TRUE) - W.update_appearance() - 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 + reagents.trans_to(refilling_welder, refilling_welder.max_fuel, transferred_by = user) + user.visible_message(span_notice("[user] refills [user.p_their()] [refilling_welder.name]."), span_notice("You refill [refilling_welder].")) + playsound(src, 'sound/effects/refill.ogg', 50, TRUE) + refilling_welder.update_appearance() return - return ..() + var/obj/item/lighter/refilling_lighter = attacking_item + if(istype(refilling_lighter) && !refilling_lighter.lit) + if(refilling_lighter.reagents.has_reagent(/datum/reagent/fuel, refilling_lighter.maximum_fuel)) + to_chat(user, span_warning("Your [refilling_lighter.name] is already full!")) + return + reagents.trans_to(refilling_lighter, refilling_lighter.maximum_fuel, transferred_by = user) + user.visible_message(span_notice("[user] refills [user.p_their()] [refilling_lighter.name]."), span_notice("You refill [refilling_lighter].")) + playsound(src, 'sound/effects/refill.ogg', 25, TRUE) + return + + if(!reagents.has_reagent(/datum/reagent/fuel)) + to_chat(user, span_warning("[src] is out of fuel!")) + return + user.visible_message( + span_danger("[user] catastrophically fails at refilling [user.p_their()] [attacking_item.name]!"), + span_userdanger("That was stupid of you.")) + log_bomber(user, "detonated a", src, "via [attacking_item.name]") + boom() /obj/structure/reagent_dispensers/fueltank/large name = "high capacity fuel tank" @@ -360,10 +369,10 @@ 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 OVERRIDDEN BY AESTHETICS - SEE MODULE +/obj/structure/reagent_dispensers/water_cooler name = "liquid cooler" desc = "A machine that dispenses liquid to drink." - icon = 'icons/obj/machines/vending.dmi' + icon = 'icons/obj/machines/vending.dmi' //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE icon_state = "water_cooler" anchored = TRUE tank_volume = 500 @@ -430,10 +439,10 @@ 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 OVERRIDDEN BY AESTHETICS - SEE MODULE +/obj/structure/reagent_dispensers/plumbed name = "stationary water tank" anchored = TRUE - icon_state = "water_stationary" + icon_state = "water_stationary" //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE desc = "A stationary, plumbed, water tank." can_be_tanked = FALSE diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index 21c5aa7a1a902..44d9631a60950 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -34,15 +34,18 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) var/flipped = FALSE /// Are we currently conveying items? var/conveying = FALSE - //Direction -> if we have a conveyor belt in that direction + ///Direction -> if we have a conveyor belt in that direction var/list/neighbors + /// are we operating in wire power mode + var/wire_mode = FALSE + /// weakref to attached cable if wire mode + var/datum/weakref/attached_wire_ref /obj/machinery/conveyor/Initialize(mapload, new_dir, new_id) . = ..() AddElement(/datum/element/footstep_override, priority = STEP_SOUND_CONVEYOR_PRIORITY) AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_TURF_IGNORE_SLOWDOWN))) register_context() - if(new_dir) setDir(new_dir) if(new_id) @@ -58,6 +61,9 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) AddElement(/datum/element/connect_loc, loc_connections) update_move_direction() LAZYADD(GLOB.conveyors_by_id[id], src) + if(wire_mode) + update_cable() + START_PROCESSING(SSmachines, src) /obj/machinery/conveyor/examine(mob/user) . = ..() @@ -66,6 +72,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) . += "\nLeft-click with a wrench to rotate." . += "Left-click with a screwdriver to invert its direction." . += "Right-click with a screwdriver to flip its belt around." + . += "Left-click with a multitool to toggle whether this conveyor receives power via cable. Toggling connects and disconnects." . += "Using another conveyor belt assembly on this will place a new conveyor belt in the direction this one is pointing." /obj/machinery/conveyor/add_context(atom/source, list/context, obj/item/held_item, mob/user) @@ -80,6 +87,9 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) context[SCREENTIP_CONTEXT_LMB] = "Invert conveyor belt" context[SCREENTIP_CONTEXT_RMB] = "Flip conveyor belt" return CONTEXTUAL_SCREENTIP_SET + if(held_item?.tool_behaviour == TOOL_MULTITOOL) + context[SCREENTIP_CONTEXT_LMB] = "Toggle conveyor belt wire mode" + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/conveyor/centcom_auto id = "round_end_belt" @@ -118,6 +128,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/Destroy() set_operating(FALSE) LAZYREMOVE(GLOB.conveyors_by_id[id], src) + attached_wire_ref = null return ..() /obj/machinery/conveyor/vv_edit_var(var_name, var_value) @@ -295,7 +306,16 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) inverted = !inverted update_move_direction() to_chat(user, span_notice("You set [src]'s direction [inverted ? "backwards" : "back to default"].")) - + else if(attacking_item.tool_behaviour == TOOL_MULTITOOL) + attacking_item.play_tool_sound(src) + wire_mode = !wire_mode + update_cable() + power_change() + if(wire_mode) + START_PROCESSING(SSmachines, src) + else + STOP_PROCESSING(SSmachines, src) + to_chat(user, span_notice("You set [src]'s wire mode [wire_mode ? "on" : "off"].")) else if(istype(attacking_item, /obj/item/stack/conveyor)) // We should place a new conveyor belt machine on the output turf the conveyor is pointing to. var/turf/target_turf = get_step(get_turf(src), forwards) @@ -309,7 +329,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) belt_item.use(1) new /obj/machinery/conveyor(target_turf, forwards, id) - else if(!user.combat_mode) + else if(!user.combat_mode || (attacking_item.item_flags & NOBLUDGEON)) user.transferItemToLoc(attacking_item, drop_location()) else return ..() @@ -334,10 +354,51 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) return user.Move_Pulled(src) +/obj/machinery/conveyor/powered(chan = power_channel, ignore_use_power = FALSE) + if(!wire_mode) + return ..() + var/datum/powernet/powernet = get_powernet() + if(!isnull(powernet)) + return clamp(powernet.avail-powernet.load, 0, powernet.avail) >= active_power_usage + return ..() + /obj/machinery/conveyor/power_change() . = ..() update() +/obj/machinery/conveyor/process() + if(!wire_mode) + return PROCESS_KILL + if(isnull(attached_wire_ref)) + update_cable() + return + var/datum/powernet/powernet = get_powernet() + if(isnull(powernet)) + return + if(powered()) + powernet.load += active_power_usage + else + power_change() + + +/obj/machinery/conveyor/proc/update_cable() + if(!wire_mode) + attached_wire_ref = null + return + var/turf/our_turf = get_turf(src) + attached_wire_ref = WEAKREF(locate(/obj/structure/cable) in our_turf) + if(attached_wire_ref) + return power_change() + +/obj/machinery/conveyor/proc/get_powernet() + if(!wire_mode) + return + var/obj/structure/cable/cable = attached_wire_ref.resolve() + if(isnull(cable)) + attached_wire_ref = null + return + return cable.powernet + // Conveyor switch /obj/machinery/conveyor_switch name = "conveyor switch" @@ -434,6 +495,8 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /// Updates the switch's `position` and `last_pos` variable. Useful so that the switch can properly cycle between the forwards, backwards and neutral positions. /obj/machinery/conveyor_switch/proc/update_position(direction) if(position == CONVEYOR_OFF) + playsound(src, 'sound/machines/lever/lever_start.ogg', 40, TRUE) + if(oneway) //is it a oneway switch position = oneway else @@ -442,6 +505,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) else position = CONVEYOR_BACKWARDS else + playsound(src, 'sound/machines/lever/lever_stop.ogg', 40, TRUE) position = CONVEYOR_OFF /obj/machinery/conveyor_switch/proc/on_user_activation(mob/user, direction) @@ -603,7 +667,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/item/stack/conveyor/use(used, transfer, check) . = ..() - playsound(src, 'sound/weapons/genhit.ogg', 30, TRUE) + playsound(src, 'sound/items/weapons/genhit.ogg', 30, TRUE) /obj/item/stack/conveyor/thirty amount = 30 diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index d9a32b700fabb..a6f3a7092971e 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -66,6 +66,7 @@ COMSIG_TURF_RECEIVE_SWEEPED_ITEMS = PROC_REF(ready_for_trash), ) AddElement(/datum/element/connect_loc, loc_connections) + ADD_TRAIT(src, TRAIT_COMBAT_MODE_SKIP_INTERACTION, INNATE_TRAIT) return INITIALIZE_HINT_LATELOAD //we need turfs to have air /// Checks if there a connecting trunk diposal pipe under the disposal @@ -119,7 +120,7 @@ to_chat(user, span_notice("You [panel_open ? "remove":"attach"] the screws around the power connection.")) return else if(I.tool_behaviour == TOOL_WELDER && panel_open) - if(!I.tool_start_check(user, amount=1)) + if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return to_chat(user, span_notice("You start slicing the floorweld off \the [src]...")) @@ -128,7 +129,7 @@ deconstruct() return - if(!user.combat_mode) + if(!user.combat_mode || (I.item_flags & NOBLUDGEON)) if((I.item_flags & ABSTRACT) || !user.temporarilyRemoveItemFromInventory(I)) return place_item_in_disposal(I, user) @@ -164,9 +165,11 @@ user.visible_message(span_notice("[user.name] places \the [I] into \the [src]."), span_notice("You place \the [I] into \the [src].")) /// Mouse drop another mob or self -/obj/machinery/disposal/mouse_drop_receive(mob/living/target, mob/living/user, params) - if(istype(target)) +/obj/machinery/disposal/mouse_drop_receive(atom/target, mob/living/user, params) + if(isliving(target)) stuff_mob_in(target, user) + if(istype(target, /obj/structure/closet/body_bag) && (user.mobility_flags & (MOBILITY_PICKUP|MOBILITY_STAND) == (MOBILITY_PICKUP|MOBILITY_STAND))) + stuff_bodybag_in(target, user) /// Handles stuffing a grabbed mob into the disposal /obj/machinery/disposal/proc/stuff_mob_in(mob/living/target, mob/living/user) @@ -175,33 +178,65 @@ if (iscyborg(user)) var/mob/living/silicon/robot/borg = user if (!borg.model || !borg.model.canDispose) - return + return FALSE else - return + return FALSE if(!isturf(user.loc)) //No magically doing it from inside closets - return + return FALSE if(target.buckled || target.has_buckled_mobs()) - return + return FALSE if(target.mob_size > MOB_SIZE_HUMAN) to_chat(user, span_warning("[target] doesn't fit inside [src]!")) - return + return FALSE add_fingerprint(user) if(user == target) user.visible_message(span_warning("[user] starts climbing into [src]."), span_notice("You start climbing into [src]...")) else target.visible_message(span_danger("[user] starts putting [target] into [src]."), span_userdanger("[user] starts putting you into [src]!")) - if(do_after(user, 2 SECONDS, target)) - if (!loc) - return - target.forceMove(src) - if(user == target) - user.visible_message(span_warning("[user] climbs into [src]."), span_notice("You climb into [src].")) - . = TRUE - else - target.visible_message(span_danger("[user] places [target] in [src]."), span_userdanger("[user] places you in [src].")) - log_combat(user, target, "stuffed", addition="into [src]") - . = TRUE - update_appearance() + if(!do_after(user, 2 SECONDS, target) || QDELETED(src)) + return FALSE + target.forceMove(src) + if(user == target) + user.visible_message(span_warning("[user] climbs into [src]."), span_notice("You climb into [src].")) + else + target.visible_message(span_danger("[user] places [target] in [src]."), span_userdanger("[user] places you in [src].")) + log_combat(user, target, "stuffed", addition="into [src]") + update_appearance() + return TRUE + +/obj/machinery/disposal/proc/stuff_bodybag_in(obj/structure/closet/body_bag/bag, mob/living/user) + if(!length(bag.contents)) + bag.undeploy_bodybag(src) + qdel(bag) + user.visible_message( + span_warning("[user] stuffs the empty [bag.name] into [src]."), + span_notice("You stuff the empty [bag.name] into [src].") + ) + return TRUE + + user.visible_message( + span_warning("[user] starts putting [bag] into [src]."), + span_notice("You start putting [bag] into [src]...") + ) + + if(!do_after(user, 4 SECONDS, bag) || QDELETED(src)) + return FALSE + + user.visible_message( + span_warning("[user] places [bag] in [src]."), + span_notice("You place [bag] in [src].") + ) + + if(!length(bag.contents)) + bag.undeploy_bodybag(src) + qdel(bag) + else + bag.add_fingerprint(user) + bag.forceMove(src) + + add_fingerprint(user) + update_appearance() + return TRUE /obj/machinery/disposal/relaymove(mob/living/user, direction) attempt_escape(user) @@ -416,7 +451,7 @@ data["isai"] = HAS_AI_ACCESS(user) return data -/obj/machinery/disposal/bin/ui_act(action, params) +/obj/machinery/disposal/bin/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -650,6 +685,6 @@ update_appearance() to_chat(user, span_notice("You sweep the pile of garbage into [src].")) - playsound(broom.loc, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1) + playsound(broom.loc, 'sound/items/weapons/thudswoosh.ogg', 30, TRUE, -1) #undef SEND_PRESSURE diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index 13f43b1f4a419..8e0f4dad6f40f 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -152,7 +152,7 @@ to_chat(user, span_warning("A disposals machine already exists here!")) return TRUE - if(!I.tool_start_check(user, amount=1)) + if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return TRUE to_chat(user, span_notice("You start welding the [pipename] in place...")) diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index b842a69413d7d..fb94e5ced5417 100644 --- a/code/modules/recycling/disposal/holder.dm +++ b/code/modules/recycling/disposal/holder.dm @@ -135,7 +135,7 @@ if(src in escapee.do_afters) return //already trying to escape to_chat(escapee, span_warning("You push against the thin pipe walls...")) - playsound(loc, 'sound/machines/airlock_alien_prying.ogg', vol = 30, vary = FALSE, extrarange = 3) //yeah I know but at least it sounds like metal being bent. + playsound(loc, 'sound/machines/airlock/airlock_alien_prying.ogg', vol = 30, vary = FALSE, extrarange = 3) //yeah I know but at least it sounds like metal being bent. if(!do_after(escapee, 20 SECONDS, get_turf(loc))) return @@ -195,7 +195,7 @@ // called when player tries to move while in a pipe /obj/structure/disposalholder/relaymove(mob/living/user, direction) - if(user.incapacitated()) + if(user.incapacitated) return for(var/mob/M in range(5, get_turf(src))) M.show_message("CLONG, clong!", MSG_AUDIBLE) diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm index 6773e574d3542..1ba4b450509a6 100644 --- a/code/modules/recycling/disposal/outlet.dm +++ b/code/modules/recycling/disposal/outlet.dm @@ -83,10 +83,10 @@ /obj/structure/disposaloutlet/welder_act(mob/living/user, obj/item/I) ..() - if(!I.tool_start_check(user, amount=1)) + if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return TRUE - playsound(src, 'sound/items/welder2.ogg', 100, TRUE) + playsound(src, 'sound/items/tools/welder2.ogg', 100, TRUE) to_chat(user, span_notice("You start slicing the floorweld off [src]...")) if(I.use_tool(src, user, 20)) to_chat(user, span_notice("You slice the floorweld off [src].")) diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index 9a1ad786e7220..b08323e66e4aa 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -156,7 +156,7 @@ if(!can_be_deconstructed(user)) return TRUE - if(!I.tool_start_check(user, amount=1)) + if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return TRUE to_chat(user, span_notice("You start slicing [src]...")) diff --git a/code/modules/recycling/disposal/pipe_sorting.dm b/code/modules/recycling/disposal/pipe_sorting.dm index 90cd583296636..08cb0ac21d6f9 100644 --- a/code/modules/recycling/disposal/pipe_sorting.dm +++ b/code/modules/recycling/disposal/pipe_sorting.dm @@ -66,7 +66,7 @@ else sortTypes |= O.currTag to_chat(user, span_notice("Added \"[GLOB.TAGGERLOCATIONS[O.currTag]]\" filter.")) - playsound(src, 'sound/machines/twobeep_high.ogg', 100, TRUE) + playsound(src, 'sound/machines/beep/twobeep_high.ogg', 100, TRUE) else return ..() diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index aedd8fc597d64..ddaa499999776 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -32,7 +32,7 @@ /obj/item/delivery/proc/post_unwrap_contents(mob/user, rip_open = TRUE) var/turf/turf_loc = get_turf(user || src) if(rip_open) - playsound(loc, 'sound/items/poster_ripped.ogg', 50, TRUE) + playsound(loc, 'sound/items/poster/poster_ripped.ogg', 50, TRUE) new /obj/effect/decal/cleanable/wrapping(turf_loc) else playsound(loc, 'sound/items/box_cut.ogg', 50, TRUE) @@ -111,7 +111,7 @@ var/tag = uppertext(GLOB.TAGGERLOCATIONS[dest_tagger.currTag]) to_chat(user, span_notice("*[tag]*")) sort_tag = dest_tagger.currTag - playsound(loc, 'sound/machines/twobeep_high.ogg', 100, TRUE) + playsound(loc, 'sound/machines/beep/twobeep_high.ogg', 100, TRUE) update_appearance() else if(IS_WRITING_UTENSIL(item)) if(!user.can_write(item)) @@ -216,6 +216,7 @@ layer = BELOW_OBJ_LAYER pass_flags_self = PASSSTRUCTURE interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND + w_class = WEIGHT_CLASS_GIGANTIC /obj/item/delivery/big/interact(mob/user) if(!attempt_pre_unwrap_contents(user)) @@ -279,7 +280,7 @@ to_chat(user, span_notice("*HELL*"))//lizard nerf else to_chat(user, span_notice("*HEAVEN*")) - playsound(src, 'sound/machines/twobeep_high.ogg', 100, TRUE) + playsound(src, 'sound/machines/beep/twobeep_high.ogg', 100, TRUE) return BRUTELOSS /** Standard TGUI actions */ @@ -309,7 +310,7 @@ return data /** User clicks a button on the tagger */ -/obj/item/dest_tagger/ui_act(action, params) +/obj/item/dest_tagger/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index 20f478c1af169..f111d04f93013 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -128,7 +128,7 @@ desc = "Holy smokes." icon_state = "lucky" force = 10 - fire_sound = 'sound/weapons/gun/revolver/shot.ogg' + fire_sound = 'sound/items/weapons/gun/revolver/shot.ogg' accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/revchap obj_flags = UNIQUE_RENAME custom_materials = null @@ -225,7 +225,7 @@ return user.say("#Oh great [GLOB.deity], give me the ammunition I need!", forced = "ammo prayer") magazine.top_off() - user.playsound_local(get_turf(src), 'sound/magic/magic_block_holy.ogg', 50, TRUE) + user.playsound_local(get_turf(src), 'sound/effects/magic/magic_block_holy.ogg', 50, TRUE) chamber_round() /datum/action/item_action/pray_refill @@ -254,11 +254,11 @@ wound_bonus = -10 embed_type = null -/obj/projectile/bullet/c38/holy/on_hit(atom/target, blocked = 0, pierce_hit) +/obj/projectile/bullet/c38/holy/on_hit(atom/target, blocked, pierce_hit) . = ..() var/roll_them_bones = rand(1,38) if(roll_them_bones == 1 && isliving(target)) - playsound(target, 'sound/machines/synth_yes.ogg', 50, TRUE) + playsound(target, 'sound/machines/synth/synth_yes.ogg', 50, TRUE) playsound(target, pick(list('sound/machines/coindrop.ogg', 'sound/machines/coindrop2.ogg')), 40, TRUE) new /obj/effect/temp_visual/crit(get_turf(target)) @@ -348,7 +348,7 @@ name = "Psychic Booster" desc = "Charge up your mind to shoot firearms faster and home in on your targets. Think smarter, not harder." button_icon_state = "projectile" - sound = 'sound/weapons/gun/shotgun/rack.ogg' + sound = 'sound/items/weapons/gun/shotgun/rack.ogg' school = SCHOOL_PSYCHIC cooldown_time = 1 MINUTES antimagic_flags = MAGIC_RESISTANCE_MIND diff --git a/code/modules/religion/pyre/pyre_rites.dm b/code/modules/religion/pyre/pyre_rites.dm index 79f95ad6af6ae..75aaf1c6286cd 100644 --- a/code/modules/religion/pyre/pyre_rites.dm +++ b/code/modules/religion/pyre/pyre_rites.dm @@ -33,7 +33,7 @@ for(var/obj/item/clothing/head/integrated_helmet in chosen_clothing.contents) //check if the clothing has a hood/helmet integrated and fireproof it if there is one. apply_fireproof(integrated_helmet) apply_fireproof(chosen_clothing) - playsound(get_turf(religious_tool), 'sound/magic/fireball.ogg', 50, TRUE) + playsound(get_turf(religious_tool), 'sound/effects/magic/fireball.ogg', 50, TRUE) chosen_clothing = null //our lord and savior no longer cares about this apparel return TRUE chosen_clothing = null @@ -110,7 +110,7 @@ var/altar_turf = get_turf(religious_tool) for(var/i in 1 to 5) new /obj/item/flashlight/flare/candle/infinite(altar_turf) - playsound(altar_turf, 'sound/magic/fireball.ogg', 50, TRUE) + playsound(altar_turf, 'sound/effects/magic/fireball.ogg', 50, TRUE) return TRUE /datum/religion_rites/blazing_star diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm index 0789cb2ac2086..b1c055ec9bddb 100644 --- a/code/modules/religion/religion_sects.dm +++ b/code/modules/religion/religion_sects.dm @@ -71,7 +71,7 @@ /datum/religion_sect/proc/can_sacrifice(obj/item/sacrifice, mob/living/chap) . = TRUE if(chap.mind.holy_role == HOLY_ROLE_DEACON) - to_chat(chap, "You are merely a deacon of [GLOB.deity], and therefore cannot perform rites.") + to_chat(chap, span_warning("You are merely a deacon of [GLOB.deity], and therefore cannot perform rites.")) return if(!is_type_in_typecache(sacrifice, desired_items_typecache)) return FALSE @@ -183,7 +183,7 @@ blessed.visible_message(span_notice("[chap] charges [blessed] with the power of [GLOB.deity]!")) to_chat(blessed, span_boldnotice("You feel charged by the power of [GLOB.deity]!")) blessed.add_mood_event("blessing", /datum/mood_event/blessing) - playsound(chap, 'sound/machines/synth_yes.ogg', 25, TRUE, -1) + playsound(chap, 'sound/machines/synth/synth_yes.ogg', 25, TRUE, -1) return TRUE //charge(?) and go diff --git a/code/modules/religion/sparring/ceremonial_gear.dm b/code/modules/religion/sparring/ceremonial_gear.dm index 08ab6940805ce..2c7e73b5a7540 100644 --- a/code/modules/religion/sparring/ceremonial_gear.dm +++ b/code/modules/religion/sparring/ceremonial_gear.dm @@ -12,7 +12,7 @@ greyscale_config_inhand_right = /datum/greyscale_config/ceremonial_blade_righthand greyscale_colors = COLOR_WHITE - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*6) //Defaults to an Iron blade. force = 2 //20 throwforce = 1 //10 @@ -21,7 +21,7 @@ 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 = 3 //30 - block_sound = 'sound/weapons/parry.ogg' + block_sound = 'sound/items/weapons/parry.ogg' sharpness = SHARP_EDGED max_integrity = 200 material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE //doesn't affect stats of the weapon as to avoid gamering your opponent with a dope weapon diff --git a/code/modules/religion/sparring/sparring_contract.dm b/code/modules/religion/sparring/sparring_contract.dm index c31be81f64945..8d6c34a90d724 100644 --- a/code/modules/religion/sparring/sparring_contract.dm +++ b/code/modules/religion/sparring/sparring_contract.dm @@ -65,7 +65,7 @@ area_names += key return area_names -/obj/item/sparring_contract/ui_act(action, list/params) +/obj/item/sparring_contract/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -84,7 +84,7 @@ if(!isnull(resolved)) resolved_opponents += resolved - if(user in resolved_opponents && params["stakes"] == STAKES_HOLY_MATCH) + if((user in resolved_opponents) && params["stakes"] == STAKES_HOLY_MATCH) to_chat(user, span_warning("This contract refuses to be signed up for a holy match by a previous holy match loser. Pick a different stake!")) //any updating of the terms should update the UI to display new terms diff --git a/code/modules/research/anomaly/anomaly_core.dm b/code/modules/research/anomaly/anomaly_core.dm index febb25add5301..9cf762e58d219 100644 --- a/code/modules/research/anomaly/anomaly_core.dm +++ b/code/modules/research/anomaly/anomaly_core.dm @@ -20,8 +20,9 @@ A.anomalyNeutralize() return TRUE -/obj/item/assembly/signaler/anomaly/manual_suicide(mob/living/carbon/user) - user.visible_message(span_suicide("[user]'s [src] is reacting to the radio signal, warping [user.p_their()] body!")) +/obj/item/assembly/signaler/anomaly/manual_suicide(datum/mind/suicidee) + var/mob/living/user = suicidee.current + user.visible_message(span_suicide("[user]'s [name] is reacting to the radio signal, warping [user.p_their()] body!")) user.set_suicide(TRUE) user.gib(DROP_ALL_REMAINS) diff --git a/code/modules/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm index bae2b4f116261..6caa03d6de57a 100644 --- a/code/modules/research/anomaly/anomaly_refinery.dm +++ b/code/modules/research/anomaly/anomaly_refinery.dm @@ -132,7 +132,7 @@ return obj_flags |= EMAGGED - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, vary = FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, vary = FALSE) say("ERROR: Unauthorized firmware access.") return TRUE @@ -315,7 +315,7 @@ ui = new(user, src, "AnomalyRefinery") ui.open() -/obj/machinery/research/anomaly_refinery/ui_act(action, list/params) +/obj/machinery/research/anomaly_refinery/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index c7916f035a749..3611a75a29ed5 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -112,7 +112,7 @@ other types of metals and chemistry for reagents). * Args: * - stored_research - The techweb that's storing us. */ -/obj/item/disk/design_disk/proc/on_upload(datum/techweb/stored_research) +/obj/item/disk/design_disk/proc/on_upload(datum/techweb/stored_research, atom/research_source) return /obj/item/disk/design_disk/bepis @@ -133,9 +133,9 @@ other types of metals and chemistry for reagents). blueprints += new_entry ///Unhide and research our node so we show up in the R&D console. -/obj/item/disk/design_disk/bepis/on_upload(datum/techweb/stored_research) +/obj/item/disk/design_disk/bepis/on_upload(datum/techweb/stored_research, atom/research_source) stored_research.hidden_nodes -= bepis_node.id - stored_research.research_node(bepis_node, force = TRUE, auto_adjust_cost = FALSE) + stored_research.research_node(bepis_node, force = TRUE, auto_adjust_cost = FALSE, research_source = research_source) /** * Subtype of Bepis tech disk diff --git a/code/modules/research/designs/autolathe/security_designs.dm b/code/modules/research/designs/autolathe/security_designs.dm index c3a0a082d280f..95a6abd4f6fe8 100644 --- a/code/modules/research/designs/autolathe/security_designs.dm +++ b/code/modules/research/designs/autolathe/security_designs.dm @@ -223,8 +223,7 @@ 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 (9x25mm Mk.12) (Lethal)" //SKYRAT EDIT: Calibre rename - Original: name = "Ammo Box (9mm)" id = "c9mm" build_type = AUTOLATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 300) diff --git a/code/modules/research/designs/autolathe/service_designs.dm b/code/modules/research/designs/autolathe/service_designs.dm index e7177037e522c..94772421b69ab 100644 --- a/code/modules/research/designs/autolathe/service_designs.dm +++ b/code/modules/research/designs/autolathe/service_designs.dm @@ -581,7 +581,7 @@ /datum/design/telescreen_entertainment name = "Entertainment Telescreen" id = "telescreen_entertainment" - build_type = PROTOLATHE + build_type = AUTOLATHE | PROTOLATHE materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, @@ -593,6 +593,21 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE +/datum/design/entertainment_radio + name = "Entertainment Radio" + id = "radio_entertainment" + build_type = AUTOLATHE | PROTOLATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT*0.75, + /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.25 + ) + build_path = /obj/item/radio/entertainment/speakers/physical + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE + /datum/design/barcode_scanner name = "Barcode Scanner" id = "barcode_scanner" diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index ce607639e22dc..b1da9f2c1c05d 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -33,7 +33,19 @@ id = "ai_cam_upgrade" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/gold = SHEET_MATERIAL_AMOUNT * 7.5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 7.5, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 10, /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 5) - build_path = /obj/item/surveillance_upgrade + build_path = /obj/item/aiupgrade/surveillance_upgrade + category = list( + RND_CATEGORY_AI + RND_SUBCATEGORY_AI_UPGRADES + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/ai_power_transfer + name = "AI Power Transfer Update" + desc = "An upgrade package that lets an AI charge an APC from a distance" + id = "ai_power_upgrade" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5) + build_path = /obj/item/aiupgrade/power_transfer category = list( RND_CATEGORY_AI + RND_SUBCATEGORY_AI_UPGRADES ) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index d07deca292691..15a5fed08eb08 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -21,6 +21,26 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING +/datum/design/board/power_connector + name = "Power Connector Board" + desc = "The circuit board for a portable SMES power connector." + id = "power_connector" + build_path = /obj/item/circuitboard/machine/smes/connector + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/board/smesbank + name = "Portable SMES Board" + desc = "The circuit board for a portable SMES, which requires a connector to use." + id = "portable_smes" + build_path = /obj/item/circuitboard/machine/smesbank + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + /datum/design/board/announcement_system name = "Automated Announcement System Board" desc = "The circuit board for an automated announcement system." @@ -1257,3 +1277,73 @@ RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SERVICE + +/datum/design/board/manulathe + name = "Manufacturing Lathe Board" + desc = "The circuit board for this machine." + id = "manulathe" + build_path = /obj/item/circuitboard/machine/manulathe + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO + +/datum/design/board/manucrafter + name = "Manufacturing Assembling Machine Board" + desc = "The circuit board for this machine." + id = "manucrafter" + build_path = /obj/item/circuitboard/machine/manucrafter + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO + +/datum/design/board/manucrusher + name = "Manufacturing Crusher Board" + desc = "The circuit board for this machine." + id = "manucrusher" + build_path = /obj/item/circuitboard/machine/manucrusher + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO + +/datum/design/board/manurouter + name = "Manufacturing Router Board" + desc = "The circuit board for this machine." + id = "manurouter" + build_path = /obj/item/circuitboard/machine/manurouter + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO + +/datum/design/board/manusorter + name = "Conveyor Sort-Router Board" + desc = "The circuit board for this machine." + id = "manusorter" + build_path = /obj/item/circuitboard/machine/manusorter + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO + +/datum/design/board/manuunloader + name = "Manufacturing Crate Unloader Board" + desc = "The circuit board for this machine." + id = "manuunloader" + build_path = /obj/item/circuitboard/machine/manuunloader + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO + +/datum/design/board/manusmelter + name = "Manufacturing Smelter Board" + desc = "The circuit board for this machine." + id = "manusmelter" + build_path = /obj/item/circuitboard/machine/manusmelter + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index dc778b141ec02..b422052b36fb3 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1595,6 +1595,20 @@ RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR ) +/datum/design/borg_upgrade_high_capacity_replacer + name = "High Capacity Light Replacer" + id = "borg_upgrade_high_capacity_replacer" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/high_capacity_light_replacer + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*1.125, + /datum/material/glass = SHEET_MATERIAL_AMOUNT*0.75, + ) + construction_time = 4 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR + ) + /datum/design/borg_upgrade_rolling_table name = "Rolling Table Dock" id = "borg_upgrade_rolling_table" @@ -2744,6 +2758,17 @@ RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING ) +/datum/design/module/fishing_glove + name = "MOD Fishing Glove Module" + id = "mod_fishing" + materials = list( + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/mod/module/fishing_glove + /datum/design/posisphere name = "Positronic Sphere" desc = "The latest in Artificial Pesterance." diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 4d80a09987a30..90b8acee031a9 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -986,6 +986,18 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE +/datum/design/fishing_gloves + name = "Athletic Fishing Gloves" + desc = "A pair of gloves to fish without a fishing rod and train your athletics with." + id = "fishing_gloves" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT) + build_path = /obj/item/clothing/gloves/fishing + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE + /datum/design/stabilized_hook name = "Gyro-Stabilized Hook" desc = "An advanced fishing hook that gives the user a tighter control on the fish when reeling in." @@ -1000,7 +1012,7 @@ /datum/design/auto_reel name = "Fishing Line Auto-Reel" - desc = "An advanced line reel which can be used speed up both fishing and casually snagging other items in your direction." + desc = "An advanced line reel which can be used speed up fishing or casually snag other items in your direction." id = "auto_reel" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3) diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm index 885e2e22273d7..f6f1a453a4c42 100644 --- a/code/modules/research/designs/stock_parts_designs.dm +++ b/code/modules/research/designs/stock_parts_designs.dm @@ -379,7 +379,7 @@ name = "Card Reader" desc = "A small magnetic card reader, used for devices that take and transmit holocredits." id = "c-reader" - build_type = PROTOLATHE | AWAY_LATHE + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.5, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.1) build_path = /obj/item/stock_parts/card_reader category = list( diff --git a/code/modules/research/designs/tool_designs.dm b/code/modules/research/designs/tool_designs.dm index 87362f4e30237..901bc304dc1d7 100644 --- a/code/modules/research/designs/tool_designs.dm +++ b/code/modules/research/designs/tool_designs.dm @@ -421,7 +421,7 @@ build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) build_path = /obj/item/wrench/bolter - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING category = list( RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 1412c0f0d8b29..f0e0978a6074a 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -102,7 +102,7 @@ autolathe_exportable = FALSE /datum/design/mag_autorifle - name = "WT-550 Autorifle Magazine (4.6x30mm)" + name = "WT-550 Autorifle Magazine (4.6x30mm) (Lethal)" desc = "A 20 round magazine for the out of date WT-550 Autorifle." id = "mag_autorifle" build_type = PROTOLATHE | AWAY_LATHE @@ -114,7 +114,7 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY /datum/design/mag_autorifle/ap_mag - name = "WT-550 Autorifle Armour Piercing Magazine (4.6x30mm AP)" + name = "WT-550 Autorifle Armour Piercing Magazine (4.6x30mm AP) (Lethal)" desc = "A 20 round armour piercing magazine for the out of date WT-550 Autorifle." id = "mag_autorifle_ap" materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 6) @@ -122,7 +122,7 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY /datum/design/mag_autorifle/ic_mag - name = "WT-550 Autorifle Incendiary Magazine (4.6x30mm IC)" + name = "WT-550 Autorifle Incendiary Magazine (4.6x30mm IC) (Lethal/Highly Destructive)" desc = "A 20 round armour piercing magazine for the out of date WT-550 Autorifle." id = "mag_autorifle_ic" materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 6, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 021c282958d89..a7edd804ff0da 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -139,7 +139,7 @@ /obj/machinery/rnd/destructive_analyzer/proc/unload_item() if(!loaded_item) return FALSE - playsound(loc, 'sound/machines/terminal_insert_disc.ogg', 30, FALSE) + playsound(loc, 'sound/machines/terminal/terminal_insert_disc.ogg', 30, FALSE) loaded_item.forceMove(drop_location()) loaded_item = null update_appearance(UPDATE_ICON) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 0c28fcab2bf6e..998995436ad52 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -166,7 +166,7 @@ return data -/obj/machinery/rnd/experimentor/ui_act(action, list/params) +/obj/machinery/rnd/experimentor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -758,7 +758,7 @@ /obj/item/relic/proc/scrambliticus(mob/user) new /obj/effect/temp_visual/circle_wave/bioscrambler/light(get_turf(src)) - playsound(src, 'sound/magic/cosmic_energy.ogg', vol = 50, vary = TRUE) + playsound(src, 'sound/effects/magic/cosmic_energy.ogg', vol = 50, vary = TRUE) for(var/mob/living/carbon/nearby in range(2, get_turf(src))) //needs get_turf() to work nearby.bioscramble(name) playsound(nearby, SFX_SPARKS, rand(25,50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE) diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 2f02301aeaa1a..40725c6f19888 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -123,7 +123,7 @@ if(design_delta > 0) say("Received [design_delta] new design[design_delta == 1 ? "" : "s"].") - playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE) + playsound(src, 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) update_static_data_for_all_viewers() diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm index 5e44c2dc703e4..34ecb6b10891b 100644 --- a/code/modules/research/ordnance/doppler_array.dm +++ b/code/modules/research/ordnance/doppler_array.dm @@ -89,7 +89,7 @@ if(inserted_disk.add_file(record_data)) playsound(src, 'sound/machines/ping.ogg', 25) else - playsound(src, 'sound/machines/terminal_error.ogg', 25) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 25) /** * Checks a specified tachyon record for fitting reactions, then returns a list with @@ -290,7 +290,7 @@ data["records"] += list(record_data) return data -/obj/machinery/doppler_array/ui_act(action, list/params) +/obj/machinery/doppler_array/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm index d0393d9e10374..dcaefc6ad3a98 100644 --- a/code/modules/research/ordnance/tank_compressor.dm +++ b/code/modules/research/ordnance/tank_compressor.dm @@ -201,7 +201,7 @@ if(inserted_disk.add_file(record_data)) playsound(src, 'sound/machines/ping.ogg', 25) else - playsound(src, 'sound/machines/terminal_error.ogg', 25) + playsound(src, 'sound/machines/terminal/terminal_error.ogg', 25) /// Ejecting a tank. Also called on insertion to clear previous tanks. /obj/machinery/atmospherics/components/binary/tank_compressor/proc/eject_tank(mob/user) @@ -275,7 +275,7 @@ ui = new(user, src, "TankCompressor") ui.open() -/obj/machinery/atmospherics/components/binary/tank_compressor/ui_act(action, list/params) +/obj/machinery/atmospherics/components/binary/tank_compressor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 91cf89582d369..517eb7c5b9ee4 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -123,7 +123,7 @@ Nothing else in the console has ID requirements. user.investigate_log("researched [id]([json_encode(price)]) on techweb id [stored_research.id].", INVESTIGATE_RESEARCH) if(istype(stored_research, /datum/techweb/science)) SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = TN.display_name, "price" = "[json_encode(price)]", "time" = ISOtime())) - if(stored_research.research_node_id(id)) + if(stored_research.research_node_id(id, research_source = src)) say("Successfully researched [TN.display_name].") var/logname = "Unknown" if(HAS_AI_ACCESS(user)) @@ -161,6 +161,9 @@ Nothing else in the console has ID requirements. balloon_alert(user, "security protocols disabled") playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) obj_flags |= EMAGGED + var/obj/item/circuitboard/computer/rdconsole/board = circuit + if(!(board.obj_flags & EMAGGED)) + board.silence_announcements = TRUE locked = FALSE return TRUE @@ -319,7 +322,7 @@ Nothing else in the console has ID requirements. "id_cache" = flat_id_cache, ) -/obj/machinery/computer/rdconsole/ui_act(action, list/params) +/obj/machinery/computer/rdconsole/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return @@ -362,7 +365,7 @@ Nothing else in the console has ID requirements. if(D) stored_research.add_design(D, TRUE) say("Uploading blueprints from disk.") - d_disk.on_upload(stored_research) + d_disk.on_upload(stored_research, src) return TRUE if (params["type"] == RND_TECH_DISK) if (QDELETED(t_disk)) diff --git a/code/modules/research/server_control.dm b/code/modules/research/server_control.dm index 24327a731a64e..73596925a2d78 100644 --- a/code/modules/research/server_control.dm +++ b/code/modules/research/server_control.dm @@ -61,7 +61,7 @@ return data -/obj/machinery/computer/rdservercontrol/ui_act(action, params) +/obj/machinery/computer/rdservercontrol/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return TRUE diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 2bc5546eb616f..60b2af5aaf478 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -11,7 +11,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' w_class = WEIGHT_CLASS_HUGE var/works_from_distance = FALSE - var/pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/rped.ogg' + var/pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/tools/rped.ogg' var/alt_sound = null /obj/item/storage/part_replacer/Initialize(mapload) @@ -70,8 +70,8 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good inhand_icon_state = "BS_RPED" w_class = WEIGHT_CLASS_NORMAL works_from_distance = TRUE - pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/pshoom.ogg' - alt_sound = 'sound/items/pshoom_2.ogg' + pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/pshoom/pshoom.ogg' + alt_sound = 'sound/items/pshoom/pshoom_2.ogg' /obj/item/storage/part_replacer/bluespace/Initialize(mapload) . = ..() diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 1a5a387551178..3da8fe4e1c957 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -317,11 +317,7 @@ var/points_rewarded if(completed_experiment.points_reward) add_point_list(completed_experiment.points_reward) - points_rewarded = ",[refund > 0 ? " and" : ""] rewarding " - var/list/english_list_keys = list() - for(var/points_type in completed_experiment.points_reward) - english_list_keys += "[completed_experiment.points_reward[points_type]] [points_type]" - points_rewarded += "[english_list(english_list_keys)] points" + points_rewarded = ",[refund > 0 ? " and" : ""] rewarding [completed_experiment.get_points_reward_text()]" result_text += points_rewarded result_text += "!" @@ -365,10 +361,10 @@ return TRUE -/datum/techweb/proc/research_node_id(id, force, auto_update_points, get_that_dosh_id) - return research_node(SSresearch.techweb_node_by_id(id), force, auto_update_points, get_that_dosh_id) +/datum/techweb/proc/research_node_id(id, force, auto_update_points, get_that_dosh_id, atom/research_source) + return research_node(SSresearch.techweb_node_by_id(id), force, auto_update_points, get_that_dosh_id, research_source) -/datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) +/datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE, atom/research_source) if(!istype(node)) return FALSE update_node_status(node) diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index 23ad6fd213dba..b6d3bd74d6979 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -42,6 +42,12 @@ var/show_on_wiki = TRUE /// Hidden Mech nodes unlocked when mech fabricator emaged. var/illegal_mech_node = FALSE + /** + * If set, the researched node will be announced on these channels by an announcement system + * with 'announce_research_node' set to TRUE when researched by the station. + * Not every node has to be announced if you want, some are best kept a little "subtler", like Illegal Weapons. + */ + var/list/announce_channels /datum/techweb_node/error_node id = "ERROR" @@ -109,5 +115,25 @@ return techweb_point_display_generic(get_price(TN)) ///Proc called when the Station (Science techweb specific) researches a node. -/datum/techweb_node/proc/on_station_research() - SHOULD_CALL_PARENT(FALSE) +/datum/techweb_node/proc/on_station_research(atom/research_source) + SHOULD_CALL_PARENT(TRUE) + var/channels_to_use = announce_channels + if(istype(research_source, /obj/machinery/computer/rdconsole)) + var/obj/machinery/computer/rdconsole/console = research_source + var/obj/item/circuitboard/computer/rdconsole/board = console.circuit + if(board.silence_announcements) + return + if(board.obj_flags & EMAGGED) + channels_to_use = list(RADIO_CHANNEL_COMMON) + if(!length(channels_to_use) || starting_node) + return + var/obj/machinery/announcement_system/system + var/list/available_machines = list() + for(var/obj/machinery/announcement_system/announce as anything in GLOB.announcement_systems) + if(announce.announce_research_node) + available_machines += announce + break + if(!length(available_machines)) + return + system = pick(available_machines) + system.announce(AUTO_ANNOUNCE_NODE, display_name, channels = channels_to_use) diff --git a/code/modules/research/techweb/nodes/alien_nodes.dm b/code/modules/research/techweb/nodes/alien_nodes.dm index 58e8dbfc68f1f..331b91bae61ff 100644 --- a/code/modules/research/techweb/nodes/alien_nodes.dm +++ b/code/modules/research/techweb/nodes/alien_nodes.dm @@ -30,6 +30,7 @@ hidden = TRUE /datum/techweb_node/alientech/on_station_research() + . = ..() SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ALIENTECH] = TRUE /datum/techweb_node/alien_engi @@ -59,6 +60,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) hidden = TRUE + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/alien_surgery id = TECHWEB_NODE_ALIEN_SURGERY @@ -99,3 +101,4 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/points/slime/hard = TECHWEB_TIER_5_POINTS) hidden = TRUE + announce_channels = list(RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/atmos_nodes.dm b/code/modules/research/techweb/nodes/atmos_nodes.dm index f1ec74b50f482..a61a6a6b094c1 100644 --- a/code/modules/research/techweb/nodes/atmos_nodes.dm +++ b/code/modules/research/techweb/nodes/atmos_nodes.dm @@ -48,6 +48,7 @@ /datum/experiment/ordnance/gaseous/bz, /datum/experiment/ordnance/gaseous/noblium, ) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/plasma_control id = TECHWEB_NODE_PLASMA_CONTROL @@ -63,6 +64,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/ordnance/gaseous/plasma) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/fusion id = TECHWEB_NODE_FUSION @@ -84,6 +86,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/nitrous_oxide = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/exp_tools id = TECHWEB_NODE_EXP_TOOLS @@ -105,6 +108,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/bz = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/rcd_upgrade id = TECHWEB_NODE_RCD_UPGRADE @@ -122,3 +126,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/noblium = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) diff --git a/code/modules/research/techweb/nodes/bepis_nodes.dm b/code/modules/research/techweb/nodes/bepis_nodes.dm index baefd8c11d048..f477569aea5a3 100644 --- a/code/modules/research/techweb/nodes/bepis_nodes.dm +++ b/code/modules/research/techweb/nodes/bepis_nodes.dm @@ -1,3 +1,5 @@ +//Nodes that are found inside Bepis Disks. + /datum/techweb_node/light_apps id = TECHWEB_NODE_LIGHT_APPS display_name = "Illumination Applications" @@ -10,6 +12,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/extreme_office id = TECHWEB_NODE_EXTREME_OFFICE @@ -22,6 +25,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/spec_eng id = TECHWEB_NODE_SPEC_ENG @@ -34,6 +38,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/aus_security id = TECHWEB_NODE_AUS_SECURITY @@ -46,6 +51,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/interrogation id = TECHWEB_NODE_INTERROGATION @@ -58,6 +64,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/sticky_advanced id = TECHWEB_NODE_STICKY_ADVANCED @@ -70,6 +77,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/tackle_advanced id = TECHWEB_NODE_TACKLE_ADVANCED @@ -83,6 +91,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/mod_experimental id = TECHWEB_NODE_MOD_EXPERIMENTAL @@ -97,6 +106,7 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/posisphere id = TECHWEB_NODE_POSITRONIC_SPHERE @@ -108,3 +118,4 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE + announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/biology_nodes.dm b/code/modules/research/techweb/nodes/biology_nodes.dm index 7b553445a9c2a..25f9163ab48c4 100644 --- a/code/modules/research/techweb/nodes/biology_nodes.dm +++ b/code/modules/research/techweb/nodes/biology_nodes.dm @@ -14,6 +14,7 @@ "mod_reagent_scanner", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cytology id = TECHWEB_NODE_CYTOLOGY @@ -60,6 +61,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/people/mutant = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) // Botany root node /datum/techweb_node/botany_equip @@ -88,6 +90,7 @@ "portaseeder", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/selection id = TECHWEB_NODE_SELECTION @@ -101,3 +104,4 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/random/plants/wild) discount_experiments = list(/datum/experiment/scanning/random/plants/traits = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm index 9c93405b2824a..eeeed268be552 100644 --- a/code/modules/research/techweb/nodes/cyborg_nodes.dm +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -44,6 +44,7 @@ "borg_upgrade_restart", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_service id = TECHWEB_NODE_BORG_SERVICES @@ -59,6 +60,7 @@ "borg_upgrade_service_cookbook", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_mining id = TECHWEB_NODE_BORG_MINING @@ -71,6 +73,7 @@ "borg_upgrade_diamonddrill", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_medical id = TECHWEB_NODE_BORG_MEDICAL @@ -87,6 +90,7 @@ "borg_upgrade_surgicalomnitool", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_utility id = TECHWEB_NODE_BORG_UTILITY @@ -99,11 +103,13 @@ "borg_upgrade_expand", "borg_upgrade_prt", "borg_upgrade_plunger", + "borg_upgrade_high_capacity_replacer", "borg_upgrade_selfrepair", "borg_upgrade_thrusters", "borg_upgrade_trashofholding", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_utility/New() . = ..() @@ -122,6 +128,7 @@ "borg_upgrade_inducer", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) // Implants root node /datum/techweb_node/passive_implants @@ -143,6 +150,7 @@ "c38_trac", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_implants id = TECHWEB_NODE_CYBER_IMPLANTS @@ -156,6 +164,7 @@ "ci-herculean", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/New() ..() @@ -173,6 +182,7 @@ "ci-antistun", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/integrated_toolsets id = TECHWEB_NODE_INTERGRATED_TOOLSETS @@ -185,6 +195,7 @@ "ci-surgery", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs id = TECHWEB_NODE_CYBER_ORGANS @@ -201,6 +212,7 @@ "cybernetic_heart_tier2", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs_upgraded id = TECHWEB_NODE_CYBER_ORGANS_UPGRADED @@ -220,6 +232,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/people/augmented_organs) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs_adv id = TECHWEB_NODE_CYBER_ORGANS_ADV @@ -235,3 +248,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/people/android = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/engi_nodes.dm b/code/modules/research/techweb/nodes/engi_nodes.dm index 949b880d1f23a..4ef55e21bc97a 100644 --- a/code/modules/research/techweb/nodes/engi_nodes.dm +++ b/code/modules/research/techweb/nodes/engi_nodes.dm @@ -42,6 +42,7 @@ "super_cell", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/parts_adv id = TECHWEB_NODE_PARTS_ADV @@ -59,6 +60,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/parts_bluespace @@ -78,6 +80,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/telecomms id = TECHWEB_NODE_TELECOMS @@ -145,6 +148,13 @@ "light_tube", "crossing_signal", "guideway_sensor", + "manuunloader", + "manusmelter", + "manucrusher", + "manucrafter", + "manulathe", + "manusorter", + "manurouter", ) /datum/techweb_node/energy_manipulation @@ -156,6 +166,8 @@ "apc_control", "powermonitor", "smes", + "portable_smes", + "power_connector", "emitter", "grounding_rod", "tesla_coil", @@ -167,6 +179,7 @@ "tray_goggles", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/holographics id = TECHWEB_NODE_HOLOGRAPHICS @@ -211,6 +224,7 @@ "ci-sechud", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/night_vision id = TECHWEB_NODE_NIGHT_VISION @@ -226,3 +240,4 @@ "security_hud_night", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/mech_nodes.dm b/code/modules/research/techweb/nodes/mech_nodes.dm index b09957076d712..82d6484bf0225 100644 --- a/code/modules/research/techweb/nodes/mech_nodes.dm +++ b/code/modules/research/techweb/nodes/mech_nodes.dm @@ -36,6 +36,7 @@ "mech_radio", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_clown id = TECHWEB_NODE_MECH_CLOWN @@ -60,6 +61,7 @@ "borg_transform_clown", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SECURITY) //The dread upon security when they hear this... /datum/techweb_node/mech_medical id = TECHWEB_NODE_MECH_MEDICAL @@ -96,6 +98,7 @@ "clarke_peri", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SUPPLY) /datum/techweb_node/mech_combat id = TECHWEB_NODE_MECH_COMBAT @@ -112,6 +115,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_assault id = TECHWEB_NODE_MECH_ASSAULT @@ -132,6 +136,7 @@ "durand_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_light id = TECHWEB_NODE_MECH_LIGHT @@ -152,6 +157,7 @@ "gygax_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_heavy id = TECHWEB_NODE_MECH_HEAVY @@ -172,6 +178,7 @@ "savannah_ivanov_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_infiltrator id = TECHWEB_NODE_MECH_INFILTRATOR @@ -192,6 +199,7 @@ "phazon_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/justice id = "mecha_justice" @@ -222,6 +230,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_firearms id = TECHWEB_NODE_MECH_FIREARMS @@ -237,6 +246,7 @@ "mech_carbine_ammo", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_heavy_arms id = TECHWEB_NODE_MECH_HEAVY_ARMS @@ -252,6 +262,7 @@ "mech_missile_rack_ammo", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_equip_bluespace id = TECHWEB_NODE_MECH_EQUIP_BLUESPACE @@ -264,3 +275,4 @@ "mech_wormhole_gen", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm index fababbc55e748..897a2edf18e43 100644 --- a/code/modules/research/techweb/nodes/medbay_nodes.dm +++ b/code/modules/research/techweb/nodes/medbay_nodes.dm @@ -60,6 +60,7 @@ "fluid_ducts", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/medbay_equip_adv id = TECHWEB_NODE_MEDBAY_EQUIP_ADV @@ -79,6 +80,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/reagent/haloperidol) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cryostasis id = TECHWEB_NODE_CRYOSTASIS @@ -94,3 +96,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/reagent/cryostylane = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/mining_nodes.dm b/code/modules/research/techweb/nodes/mining_nodes.dm index d8a6539caa3ff..1bfa3a9284ad5 100644 --- a/code/modules/research/techweb/nodes/mining_nodes.dm +++ b/code/modules/research/techweb/nodes/mining_nodes.dm @@ -48,6 +48,7 @@ "mesons", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/low_pressure_excavation id = TECHWEB_NODE_LOW_PRESSURE_EXCAVATION @@ -67,6 +68,7 @@ "borg_upgrade_hypermod", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/plasma_mining id = TECHWEB_NODE_PLASMA_MINING @@ -78,6 +80,7 @@ "plasmacutter_adv", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/bitrunning id = TECHWEB_NODE_BITRUNNING @@ -90,6 +93,7 @@ "netpod", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/mining_adv id = TECHWEB_NODE_MINING_ADV @@ -102,3 +106,4 @@ "mech_diamond_drill", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SUPPLY) diff --git a/code/modules/research/techweb/nodes/modsuit_nodes.dm b/code/modules/research/techweb/nodes/modsuit_nodes.dm index 955389f61aeba..cc31a1fc1ef77 100644 --- a/code/modules/research/techweb/nodes/modsuit_nodes.dm +++ b/code/modules/research/techweb/nodes/modsuit_nodes.dm @@ -36,6 +36,7 @@ "mod_sign_radio", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mod_entertainment id = TECHWEB_NODE_MOD_ENTERTAINMENT @@ -49,6 +50,7 @@ "mod_waddle", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SERVICE) /datum/techweb_node/mod_medical id = TECHWEB_NODE_MOD_MEDICAL @@ -63,6 +65,7 @@ "mod_patienttransport", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/mod_engi id = TECHWEB_NODE_MOD_ENGI @@ -77,6 +80,7 @@ "mod_mister_atmos", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/mod_security id = TECHWEB_NODE_MOD_SECURITY @@ -95,6 +99,7 @@ "mod_criminalcapture", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SECURITY) /datum/techweb_node/mod_medical_adv id = TECHWEB_NODE_MOD_MEDICAL_ADV @@ -108,6 +113,7 @@ "mod_statusreadout", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/mod_engi_adv id = TECHWEB_NODE_MOD_ENGI_ADV @@ -122,6 +128,7 @@ "mod_storage_expanded", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/mod_engi_adv/New() if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) //we'll really need the rad protection modsuit module @@ -139,3 +146,4 @@ "mod_kinesis", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/research_nodes.dm b/code/modules/research/techweb/nodes/research_nodes.dm index b70d9582681ce..f05199ab65e68 100644 --- a/code/modules/research/techweb/nodes/research_nodes.dm +++ b/code/modules/research/techweb/nodes/research_nodes.dm @@ -28,6 +28,7 @@ "bluespace_crystal", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/applied_bluespace id = TECHWEB_NODE_APPLIED_BLUESPACE @@ -49,6 +50,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/scanning/points/bluespace_crystal) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL, RADIO_CHANNEL_SERVICE, RADIO_CHANNEL_SUPPLY) /datum/techweb_node/bluespace_travel id = TECHWEB_NODE_BLUESPACE_TRAVEL @@ -67,6 +69,7 @@ "swapper", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/anomaly_research id = TECHWEB_NODE_ANOMALY_RESEARCH @@ -79,6 +82,7 @@ "reactive_armour", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/anomaly_shells id = TECHWEB_NODE_ANOMALY_SHELLS @@ -94,3 +98,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/points/anomalies = TECHWEB_TIER_5_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/robo_nodes.dm b/code/modules/research/techweb/nodes/robo_nodes.dm index ff018e85b7c9a..2b43ba0e4257c 100644 --- a/code/modules/research/techweb/nodes/robo_nodes.dm +++ b/code/modules/research/techweb/nodes/robo_nodes.dm @@ -51,6 +51,7 @@ "remove_module", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/ai/New() . = ..() @@ -68,7 +69,7 @@ /datum/techweb_node/ai_laws id = TECHWEB_NODE_AI_LAWS - display_name = "Advanced AI Laws" + display_name = "Advanced AI Upgrades" description = "Delving into sophisticated AI directives, with hopes that they won't lead to humanity's extinction." prereq_ids = list(TECHWEB_NODE_AI) design_ids = list( @@ -93,5 +94,7 @@ "freeformcore_module", "onehuman_module", "purge_module", + "ai_power_upgrade" ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_COMMAND) diff --git a/code/modules/research/techweb/nodes/security_nodes.dm b/code/modules/research/techweb/nodes/security_nodes.dm index 2d3dd63864f25..97d2036207c56 100644 --- a/code/modules/research/techweb/nodes/security_nodes.dm +++ b/code/modules/research/techweb/nodes/security_nodes.dm @@ -39,6 +39,8 @@ "electropack", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) + /datum/techweb_node/riot_supression id = TECHWEB_NODE_RIOT_SUPRESSION @@ -55,6 +57,7 @@ "bola_energy", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/explosives id = TECHWEB_NODE_EXPLOSIVES @@ -68,6 +71,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb) + announce_channels = list(RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/exotic_ammo id = TECHWEB_NODE_EXOTIC_AMMO @@ -81,6 +85,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/ordnance/explosive/highyieldbomb = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/electric_weapons id = TECHWEB_NODE_ELECTRIC_WEAPONS @@ -94,6 +99,7 @@ "lasershell", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/beam_weapons id = TECHWEB_NODE_BEAM_WEAPONS @@ -105,3 +111,4 @@ "nuclear_gun", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) diff --git a/code/modules/research/techweb/nodes/service_nodes.dm b/code/modules/research/techweb/nodes/service_nodes.dm index 9c0d68b6b2bae..a2f6b03007109 100644 --- a/code/modules/research/techweb/nodes/service_nodes.dm +++ b/code/modules/research/techweb/nodes/service_nodes.dm @@ -51,6 +51,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/consoles id = TECHWEB_NODE_CONSOLES @@ -78,6 +79,7 @@ "bounty_pad", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/gaming id = TECHWEB_NODE_GAMING @@ -145,6 +147,7 @@ "roastingstick", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(RADIO_CHANNEL_SERVICE) // Fishing root node /datum/techweb_node/fishing_equip @@ -165,6 +168,8 @@ prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP) design_ids = list( "fishing_rod_tech", + "fishing_gloves", + "mod_fishing", "stabilized_hook", "auto_reel", "fish_analyzer", diff --git a/code/modules/research/techweb/nodes/surgery_nodes.dm b/code/modules/research/techweb/nodes/surgery_nodes.dm index 4be7a3256ac70..7af1dacf1df91 100644 --- a/code/modules/research/techweb/nodes/surgery_nodes.dm +++ b/code/modules/research/techweb/nodes/surgery_nodes.dm @@ -20,6 +20,7 @@ "surgery_heal_burn_upgrade", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_adv id = TECHWEB_NODE_SURGERY_ADV @@ -37,6 +38,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/autopsy/human) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_exp id = TECHWEB_NODE_SURGERY_EXP @@ -67,6 +69,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/autopsy/nonhuman = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_tools id = TECHWEB_NODE_SURGERY_TOOLS @@ -80,3 +83,4 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/autopsy/xenomorph = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/techweb_types.dm b/code/modules/research/techweb/techweb_types.dm index f5532e9e53f9d..407008b284497 100644 --- a/code/modules/research/techweb/techweb_types.dm +++ b/code/modules/research/techweb/techweb_types.dm @@ -6,10 +6,10 @@ organization = "Nanotrasen" should_generate_points = TRUE -/datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) +/datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE, atom/research_source) . = ..() if(.) - node.on_station_research() + node.on_station_research(research_source) /datum/techweb/oldstation id = "CHARLIE" diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm index 9bd9e2d881b1c..89baa18720d7b 100644 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm @@ -151,7 +151,7 @@ Slimecrossing Armor var/hit_reflect_chance = 40 /obj/item/clothing/suit/armor/heavy/adamantine/IsReflect(def_zone) - if(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) && prob(hit_reflect_chance)) + if((def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) && prob(hit_reflect_chance)) return TRUE else return FALSE diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm index b07299813d612..c47ea89eaac5d 100644 --- a/code/modules/research/xenobiology/crossbreeding/_misc.dm +++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm @@ -154,12 +154,12 @@ Slimecrossing Items /obj/structure/ice_stasis/Initialize(mapload) . = ..() - playsound(src, 'sound/magic/ethereal_exit.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/ethereal_exit.ogg', 50, TRUE) /obj/structure/ice_stasis/Destroy() for(var/atom/movable/M in contents) M.forceMove(loc) - playsound(src, 'sound/effects/glassbr3.ogg', 50, TRUE) + playsound(src, 'sound/effects/glass/glassbr3.ogg', 50, TRUE) return ..() //Gold capture device - Chilling Gold diff --git a/code/modules/research/xenobiology/crossbreeding/_potions.dm b/code/modules/research/xenobiology/crossbreeding/_potions.dm index 16203cd3462fd..c33868e079711 100644 --- a/code/modules/research/xenobiology/crossbreeding/_potions.dm +++ b/code/modules/research/xenobiology/crossbreeding/_potions.dm @@ -170,6 +170,7 @@ Slimecrossing Potions if (isclothing(clothing)) var/obj/item/clothing/clothing_real = clothing clothing_real.clothing_flags |= LAVAPROTECT + clothing_real.resistance_flags |= FIRE_PROOF uses-- if(uses <= 0) qdel(src) diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 832d266723d13..227f1be5165dd 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -11,8 +11,7 @@ var/originalcolor /datum/status_effect/rainbow_protection/on_apply() - owner.status_flags |= GODMODE - ADD_TRAIT(owner, TRAIT_PACIFISM, /datum/status_effect/rainbow_protection) + owner.add_traits(list(TRAIT_GODMODE, TRAIT_PACIFISM), TRAIT_STATUS_EFFECT(id)) owner.visible_message(span_warning("[owner] shines with a brilliant rainbow light."), span_notice("You feel protected by an unknown force!")) originalcolor = owner.color @@ -23,9 +22,8 @@ return ..() /datum/status_effect/rainbow_protection/on_remove() - owner.status_flags &= ~GODMODE owner.color = originalcolor - REMOVE_TRAIT(owner, TRAIT_PACIFISM, /datum/status_effect/rainbow_protection) + owner.remove_traits(list(TRAIT_GODMODE, TRAIT_PACIFISM), TRAIT_STATUS_EFFECT(id)) owner.visible_message(span_notice("[owner] stops glowing, the rainbow light fading away."), span_warning("You no longer feel protected...")) @@ -106,7 +104,7 @@ RegisterSignal(owner, COMSIG_LIVING_RESIST, PROC_REF(breakCube)) cube = new /obj/structure/ice_stasis(get_turf(owner)) owner.forceMove(cube) - owner.status_flags |= GODMODE + ADD_TRAIT(owner, TRAIT_GODMODE, TRAIT_STATUS_EFFECT(id)) return ..() /datum/status_effect/frozenstasis/tick(seconds_between_ticks) @@ -121,7 +119,7 @@ /datum/status_effect/frozenstasis/on_remove() if(cube) qdel(cube) - owner.status_flags &= ~GODMODE + REMOVE_TRAIT(owner, TRAIT_GODMODE, TRAIT_STATUS_EFFECT(id)) UnregisterSignal(owner, COMSIG_LIVING_RESIST) /datum/status_effect/slime_clone diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index c5136baafb149..3cc46b9be32ec 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -32,15 +32,15 @@ Slimecrossing Weapons damtype = pick(BRUTE, BURN, TOX, OXY) switch(damtype) if(BRUTE) - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = string_list(list("slashes", "slices", "cuts")) attack_verb_simple = string_list(list("slash", "slice", "cut")) if(BURN) - hitsound = 'sound/weapons/sear.ogg' + hitsound = 'sound/items/weapons/sear.ogg' attack_verb_continuous = string_list(list("burns", "singes", "heats")) attack_verb_simple = string_list(list("burn", "singe", "heat")) if(TOX) - hitsound = 'sound/weapons/pierce.ogg' + hitsound = 'sound/items/weapons/pierce.ogg' attack_verb_continuous = string_list(list("poisons", "doses", "toxifies")) attack_verb_simple = string_list(list("poison", "dose", "toxify")) if(OXY) @@ -66,6 +66,7 @@ Slimecrossing Weapons attack_verb_simple = list("bash", "pound", "slam") item_flags = SLOWS_WHILE_IN_HAND breakable_by_damage = FALSE + shield_bash_sound = 'sound/effects/glass/glassknock.ogg' /datum/armor/shield_adamantineshield melee = 50 @@ -96,7 +97,7 @@ Slimecrossing Weapons max_charges = 1 //Recharging costs blood. recharge_rate = 1 ammo_type = /obj/item/ammo_casing/magic/bloodchill - fire_sound = 'sound/effects/attackblob.ogg' + fire_sound = 'sound/effects/blob/attackblob.ogg' /obj/item/gun/magic/bloodchill/Initialize(mapload) . = ..() diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index 72ee9d98516eb..c3eb811fa4270 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -19,8 +19,8 @@ Burning extracts: return 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) + playsound(src, 'sound/effects/bubbles/bubbles.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/fireball.ogg', 50, TRUE) do_effect(user) /obj/item/slimecross/burning/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..() @@ -93,7 +93,7 @@ Burning extracts: /obj/item/slimecross/burning/yellow/do_effect(mob/user) user.visible_message(span_danger("[src] explodes into an electrical field!")) - playsound(get_turf(src), 'sound/weapons/zapbang.ogg', 50, TRUE) + playsound(get_turf(src), 'sound/items/weapons/zapbang.ogg', 50, TRUE) for(var/mob/living/M in range(4,get_turf(user))) if(M != user) var/mob/living/carbon/C = M @@ -263,7 +263,7 @@ Burning extracts: /// Inflicts a blastwave upon every mob within a small radius. /obj/item/slimecross/burning/oil/proc/boom() var/turf/T = get_turf(src) - playsound(T, 'sound/effects/explosion2.ogg', 200, TRUE) + playsound(T, 'sound/effects/explosion/explosion2.ogg', 200, TRUE) for(var/mob/living/target in range(2, T)) new /obj/effect/temp_visual/explosion(get_turf(target)) SSexplosions.med_mov_atom += target diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index ca026ae9f33f7..bdc19a70405d8 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -20,7 +20,7 @@ Charged extracts: return 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/bubbles/bubbles.ogg', 50, TRUE) playsound(src, 'sound/effects/light_flicker.ogg', 50, TRUE) do_effect(user) diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index 70784f5b90f3e..0a22cd0380f5e 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -19,8 +19,8 @@ Chilling extracts: return 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) + playsound(src, 'sound/effects/bubbles/bubbles.ogg', 50, TRUE) + playsound(src, 'sound/effects/glass/glassbr1.ogg', 50, TRUE) do_effect(user) /obj/item/slimecross/chilling/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..() diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index 9d5ed59fcec0d..4f6135b65378e 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -40,12 +40,12 @@ Industrial extracts: plasmaabsorbed += 1 if(plasmaabsorbed >= plasmarequired) - playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE) + playsound(src, 'sound/effects/blob/attackblob.ogg', 50, TRUE) plasmaabsorbed -= plasmarequired for(var/i in 1 to itemamount) do_after_spawn(new itempath(get_turf(src))) else if(IsWorking) - playsound(src, 'sound/effects/bubbles.ogg', 5, TRUE) + playsound(src, 'sound/effects/bubbles/bubbles.ogg', 5, TRUE) if(IsWorking) icon_state = "industrial" else diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index d04838f79ec0d..6cf8d2745ce6c 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -228,7 +228,7 @@ Regenerative extracts: effect_desc = "Fully heals the target and flashes everyone in sight." /obj/item/slimecross/regenerative/oil/core_effect(mob/living/target, mob/user) - playsound(src, 'sound/weapons/flash.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/flash.ogg', 100, TRUE) for(var/mob/living/L in view(user,7)) L.flash_act() diff --git a/code/modules/research/xenobiology/vatgrowing/petri_dish.dm b/code/modules/research/xenobiology/vatgrowing/petri_dish.dm index 0187fa8eda359..df2fa619cc3d1 100644 --- a/code/modules/research/xenobiology/vatgrowing/petri_dish.dm +++ b/code/modules/research/xenobiology/vatgrowing/petri_dish.dm @@ -59,6 +59,7 @@ list(CELL_LINE_TABLE_COCKROACH, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 7), list(CELL_LINE_TABLE_BLOBBERNAUT, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) ) + name = "basic sample petri dish" /obj/item/petri_dish/random/Initialize(mapload) . = ..() diff --git a/code/modules/research/xenobiology/vatgrowing/vatgrower.dm b/code/modules/research/xenobiology/vatgrowing/vatgrower.dm index 5b35bd10edf5e..8d6d1904f85d6 100644 --- a/code/modules/research/xenobiology/vatgrowing/vatgrower.dm +++ b/code/modules/research/xenobiology/vatgrowing/vatgrower.dm @@ -116,7 +116,7 @@ biological_sample.sample_layers = petri.sample.sample_layers biological_sample.sample_color = petri.sample.sample_color balloon_alert(user, "added sample") - playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) + playsound(src, 'sound/effects/bubbles/bubbles.ogg', 50, TRUE) update_appearance() RegisterSignal(biological_sample, COMSIG_SAMPLE_GROWTH_COMPLETED, PROC_REF(on_sample_growth_completed)) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 6ec7fca37e362..1fc21eac65fae 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -81,7 +81,7 @@ target_slime.applied_crossbreed_amount++ qdel(src) 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) + playsound(target_slime, 'sound/effects/blob/attackblob.ogg', 50, TRUE) if(target_slime.applied_crossbreed_amount >= SLIME_EXTRACT_CROSSING_REQUIRED) target_slime.spawn_corecross() @@ -508,7 +508,7 @@ to_chat(user, span_warning("You feel your body vibrating...")) if(do_after(user, 2.5 SECONDS, target = user)) to_chat(user, span_warning("You teleport!")) - do_teleport(user, get_turf(user), 6, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) + do_teleport(user, get_turf(user), 6, asoundin = 'sound/items/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) return 300 if(SLIME_ACTIVATE_MAJOR) @@ -524,7 +524,7 @@ if(teleport_x && teleport_y && teleport_z) var/turf/T = locate(teleport_x, teleport_y, teleport_z) to_chat(user, span_notice("You snap back to your anchor point!")) - do_teleport(user, T, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) + do_teleport(user, T, asoundin = 'sound/items/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) return 450 @@ -700,7 +700,7 @@ return CONTEXTUAL_SCREENTIP_SET /obj/item/slimepotion/slime/sentience/click_alt(mob/living/user) - potion_reason = tgui_input_text(user, "Enter reason for offering potion", "Intelligence Potion", potion_reason, multiline = TRUE) + potion_reason = tgui_input_text(user, "Enter reason for offering potion", "Intelligence Potion", potion_reason, max_length = MAX_MESSAGE_LEN, multiline = TRUE) return CLICK_ACTION_SUCCESS /obj/item/slimepotion/slime/sentience/attack(mob/living/dumb_mob, mob/user) @@ -910,6 +910,8 @@ if(isitem(interacting_with)) var/obj/item/apply_to = interacting_with if(apply_to.slowdown <= 0 || (apply_to.item_flags & IMMUTABLE_SLOW)) + if(interacting_with.atom_storage) + return NONE // lets us put the potion in the bag to_chat(user, span_warning("The [apply_to] can't be made any faster!")) return ITEM_INTERACT_BLOCKING apply_to.slowdown = 0 @@ -920,15 +922,6 @@ qdel(src) return ITEM_INTERACT_SUCCESS -/obj/item/slimepotion/speed/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user) - if(!isitem(storage_holder)) - return TRUE - if(istype(storage_holder, /obj/item/mod/control)) - var/obj/item/mod/control/mod = storage_holder - return mod.slowdown_inactive <= 0 - var/obj/item/storage_item = storage_holder - return storage_item.slowdown <= 0 - /obj/item/slimepotion/fireproof name = "slime chill potion" desc = "A potent chemical mix that will fireproof any article of clothing. Has three uses." diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index cac8251eba793..2ec4c6b43ffc3 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -64,7 +64,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) return UI_CLOSE return ..() -/obj/machinery/keycard_auth/ui_act(action, params) +/obj/machinery/keycard_auth/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(. || waiting || !allowed(usr)) return @@ -192,6 +192,16 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth/wall_mounted, 26) MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth/wall_mounted, 26) +/obj/machinery/keycard_auth/wall_mounted/Initialize(mapload) + . = ..() + find_and_hang_on_wall() + +/// Subtype which is stuck to a wall +/obj/machinery/keycard_auth/wall_mounted + icon = 'icons/obj/machines/wallmounts.dmi' + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth/wall_mounted, 26) + /obj/machinery/keycard_auth/wall_mounted/Initialize(mapload) . = ..() find_and_hang_on_wall() diff --git a/code/modules/security_levels/security_level_datums.dm b/code/modules/security_levels/security_level_datums.dm index d5a2e74e8080e..4e0ed2473125f 100644 --- a/code/modules/security_levels/security_level_datums.dm +++ b/code/modules/security_levels/security_level_datums.dm @@ -49,7 +49,7 @@ /datum/security_level/green name = "green" announcement_color = "green" - sound = 'sound/misc/notice2.ogg' // Friendly beep + sound = 'sound/announcer/notice/notice2.ogg' // Friendly beep number_level = SEC_LEVEL_GREEN status_display_icon_state = "greenalert" fire_alarm_light_color = LIGHT_COLOR_BLUEGREEN @@ -64,7 +64,7 @@ /datum/security_level/blue name = "blue" announcement_color = "blue" - sound = 'sound/misc/notice1.ogg' // Angry alarm + sound = 'sound/announcer/notice/notice1.ogg' // Angry alarm number_level = SEC_LEVEL_BLUE status_display_icon_state = "bluealert" fire_alarm_light_color = LIGHT_COLOR_ELECTRIC_CYAN @@ -80,7 +80,7 @@ /datum/security_level/red name = "red" announcement_color = "red" - sound = 'sound/misc/notice3.ogg' // More angry alarm + sound = 'sound/announcer/notice/notice3.ogg' // More angry alarm number_level = SEC_LEVEL_RED status_display_icon_state = "redalert" fire_alarm_light_color = LIGHT_COLOR_FLARE @@ -96,7 +96,7 @@ /datum/security_level/delta name = "delta" announcement_color = "purple" - sound = 'sound/misc/airraid.ogg' // Air alarm to signify importance + sound = 'sound/announcer/alarm/airraid.ogg' // Air alarm to signify importance number_level = SEC_LEVEL_DELTA status_display_icon_state = "deltaalert" fire_alarm_light_color = LIGHT_COLOR_INTENSE_RED diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index d9a21cf5e2363..75baee5c39260 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -10,7 +10,7 @@ /obj/docking_port/mobile/assault_pod/initiate_docking(obj/docking_port/stationary/S1) . = ..() if(!istype(S1, /obj/docking_port/stationary/transit)) - playsound(get_turf(src.loc), 'sound/effects/explosion1.ogg',50,TRUE) + playsound(get_turf(src.loc), 'sound/effects/explosion/explosion1.ogg',50,TRUE) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index cf53fef368c1b..5ce62f8c04226 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -174,7 +174,7 @@ else return SHUTTLE_CONSOLE_ERROR -/obj/machinery/computer/shuttle/ui_act(action, params) +/obj/machinery/computer/shuttle/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 8905ff0438b12..c23c370f47e93 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -136,7 +136,7 @@ minor_announce("Early launch authorization revoked, [remaining] authorizations needed") acted_recently += user - ui_interact(user) + SStgui.update_user_uis(user, src) /obj/machinery/computer/emergency_shuttle/proc/authorize(mob/living/user, source) var/obj/item/card/id/ID = user.get_idcard(TRUE) @@ -159,7 +159,7 @@ /obj/machinery/computer/emergency_shuttle/proc/clear_recent_action(mob/user) acted_recently -= user if (!QDELETED(user)) - ui_interact(user) + SStgui.update_user_uis(user, src) /obj/machinery/computer/emergency_shuttle/process() // Launch check is in process in case auth_need changes for some reason @@ -544,6 +544,11 @@ areas += E hyperspace_sound(HYPERSPACE_LAUNCH, areas) enterTransit() + + //Tell the events we're starting, so they can time their spawns or do some other stuff + for(var/datum/shuttle_event/event as anything in event_list) + event.start_up_event(SSshuttle.emergency_escape_time * engine_coeff) + mode = SHUTTLE_ESCAPE launch_status = ENDGAME_LAUNCHED setTimer(SSshuttle.emergency_escape_time * engine_coeff) @@ -559,10 +564,6 @@ if(!is_reserved_level(z)) CRASH("Emergency shuttle did not move to transit z-level!") - //Tell the events we're starting, so they can time their spawns or do some other stuff - for(var/datum/shuttle_event/event as anything in event_list) - event.start_up_event(SSshuttle.emergency_escape_time * engine_coeff) - if(SHUTTLE_STRANDED, SHUTTLE_DISABLED) SSshuttle.checkHostileEnvironment() @@ -604,7 +605,7 @@ destination_dock = "emergency_syndicate" minor_announce("Corruption detected in \ shuttle navigation protocols. Please contact your \ - supervisor.", "SYSTEM ERROR:", sound_override = 'sound/misc/announce_syndi.ogg') + supervisor.", "SYSTEM ERROR:", sound_override = 'sound/announcer/announcement/announce_syndi.ogg') dock_id(destination_dock) unbolt_all_doors() //SKYRAT EDIT ADDITION @@ -631,7 +632,7 @@ var/list/names = list() for(var/datum/shuttle_event/event as anything in subtypesof(/datum/shuttle_event)) if(prob(initial(event.event_probability))) - event_list.Add(new event(src)) + add_shuttle_event(event) names += initial(event.name) if(LAZYLEN(names)) log_game("[capitalize(name)] has selected the following shuttle events: [english_list(names)].") @@ -774,6 +775,57 @@ name = "emergency disembarkation tool" desc = "For extracting yourself from rough landings." +/datum/storage/pod + max_slots = 14 + max_total_storage = WEIGHT_CLASS_BULKY * 14 + /// If TRUE, we unlock regardless of security level + var/always_unlocked = FALSE + +/datum/storage/pod/open_storage(mob/to_show) + if(isliving(to_show) && SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_RED) + to_chat(to_show, span_warning("The storage unit will only unlock during a Red or Delta security alert.")) + return FALSE + return ..() + +/datum/storage/pod/New(atom/parent, max_slots, max_specific_storage, max_total_storage) + . = ..() + // all of these are a type below what actually spawn with + // (IE all space suits instead of just the emergency ones) + // because an enterprising traitor might be able to hide things, + // like their syndicate toolbox or softsuit. may be fun? + var/static/list/exception_cache = typecacheof(list( + /obj/item/clothing/suit/space, + /obj/item/pickaxe, + /obj/item/storage/toolbox, + )) + src.exception_hold = exception_cache + RegisterSignal(SSsecurity_level, COMSIG_SECURITY_LEVEL_CHANGED, PROC_REF(update_lock)) + update_lock(new_level = SSsecurity_level.get_current_level_as_number()) + +/datum/storage/pod/set_parent(atom/new_parent) + . = ..() + RegisterSignal(parent, COMSIG_ATOM_AFTER_SHUTTLE_MOVE, PROC_REF(pod_launch)) + +/datum/storage/pod/proc/update_lock(datum/source, new_level) + SIGNAL_HANDLER + if(always_unlocked) + return + + locked = (new_level < SEC_LEVEL_RED) ? STORAGE_FULLY_LOCKED : STORAGE_NOT_LOCKED + parent.update_appearance(UPDATE_ICON_STATE) + if(locked) // future todo : make `locked` a setter so this behavior can be built in (avoids exploits) + close_all() + +/datum/storage/pod/proc/pod_launch(datum/source, turf/old_turf) + SIGNAL_HANDLER + // This check is to ignore the movement of the shuttle from the transit level to the station as it is loaded in. + if(old_turf && is_reserved_level(old_turf.z)) + return + // If the pod was launched, the storage will always open. + always_unlocked = TRUE + locked = STORAGE_NOT_LOCKED + parent.update_appearance(UPDATE_ICON_STATE) + /obj/item/storage/pod name = "emergency space suits" desc = "A wall mounted safe containing space suits. Will only open in emergencies." @@ -781,11 +833,11 @@ density = FALSE icon = 'icons/obj/storage/storage.dmi' icon_state = "wall_safe_locked" - var/unlocked = FALSE + storage_type = /datum/storage/pod /obj/item/storage/pod/update_icon_state() . = ..() - icon_state = "wall_safe[unlocked ? "" : "_locked"]" + icon_state = "wall_safe[atom_storage?.locked ? "_locked" : ""]" MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/pod, 32) @@ -805,30 +857,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/pod, 32) new /obj/item/bodybag/environmental(src) new /obj/item/bodybag/environmental(src) -/obj/item/storage/pod/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user) - return can_interact(user) - -/obj/item/storage/pod/attack_hand(mob/user, list/modifiers) - if (can_interact(user)) - atom_storage?.show_contents(user) - return TRUE - -/obj/item/storage/pod/attack_hand_secondary(mob/user, list/modifiers) - if(!can_interact(user)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - return ..() - -/obj/item/storage/pod/click_alt(mob/user) - return CLICK_ACTION_SUCCESS - -/obj/item/storage/pod/can_interact(mob/user) - if(!..()) - return FALSE - if(SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED || unlocked) - return TRUE - to_chat(user, "The storage unit will only unlock during a Red or Delta security alert.") - return FALSE - /obj/docking_port/mobile/emergency/backup name = "backup shuttle" shuttle_id = "backup" diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index d3184cc96c62f..88272f6727659 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -358,7 +358,7 @@ var/mob/camera/ai_eye/remote/remote_eye = owner.remote_control var/obj/machinery/computer/camera_advanced/shuttle_docker/console = remote_eye.origin - playsound(console, 'sound/machines/terminal_prompt_deny.ogg', 25, FALSE) + playsound(console, 'sound/machines/terminal/terminal_prompt_deny.ogg', 25, FALSE) var/list/L = list() for(var/V in SSshuttle.stationary_docking_ports) @@ -383,10 +383,10 @@ else L["([L.len]) [nav_beacon.name] locked"] = null - playsound(console, 'sound/machines/terminal_prompt.ogg', 25, FALSE) + playsound(console, 'sound/machines/terminal/terminal_prompt.ogg', 25, FALSE) var/selected = tgui_input_list(usr, "Choose location to jump to", "Locations", sort_list(L)) if(isnull(selected)) - playsound(console, 'sound/machines/terminal_prompt_deny.ogg', 25, FALSE) + playsound(console, 'sound/machines/terminal/terminal_prompt_deny.ogg', 25, FALSE) return if(QDELETED(src) || QDELETED(owner) || !isliving(owner)) return @@ -394,7 +394,7 @@ var/turf/T = get_turf(L[selected]) if(isnull(T)) return - playsound(console, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) + playsound(console, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 25, FALSE) remote_eye.setLoc(T) to_chat(owner, span_notice("Jumped to [selected].")) owner.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 7f763b29e3fbd..f91132ce663fe 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -69,6 +69,7 @@ All ShuttleMove procs go here newT.reasses_liquids() //SKYRAT EDIT END + newT.CopyOnTop(src, 1, shuttle_depth, TRUE) newT.blocks_air = TRUE newT.air_update_turf(TRUE, FALSE) @@ -126,7 +127,7 @@ All ShuttleMove procs go here // Called on atoms after everything has been moved /atom/movable/proc/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - SEND_SIGNAL(src, COMSIG_ATOM_AFTER_SHUTTLE_MOVE) + SEND_SIGNAL(src, COMSIG_ATOM_AFTER_SHUTTLE_MOVE, oldT) if(light) update_light() if(rotation) @@ -267,17 +268,6 @@ All ShuttleMove procs go here GLOB.deliverybeacons += src GLOB.deliverybeacontags += location -/************************************Item move procs************************************/ - -/obj/item/storage/pod/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - // If the pod was launched, the storage will always open. The reserved_level check - // ignores the movement of the shuttle from the transit level to - // the station as it is loaded in. - if (oldT && !is_reserved_level(oldT.z)) - unlocked = TRUE - update_appearance() - /************************************Mob move procs************************************/ /mob/onShuttleMove(turf/newT, turf/oldT, list/movement_force, move_dir, obj/docking_port/stationary/old_dock, obj/docking_port/mobile/moving_dock) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index d3e18f4f876ca..3bc21d52d358f 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -264,7 +264,7 @@ /obj/docking_port/stationary/proc/load_roundstart() if(json_key) - var/sid = SSmapping.config.shuttles[json_key] + var/sid = SSmapping.current_map.shuttles[json_key] roundstart_template = SSmapping.shuttle_templates[sid] if(!roundstart_template) CRASH("json_key:[json_key] value \[[sid]\] resulted in a null shuttle template for [src]") @@ -1220,6 +1220,13 @@ for(var/item in removees) event_list.Remove(item) +/// Give a typepath of a shuttle event to add to the shuttle. If added during endgame transit, will insta start the event +/obj/docking_port/mobile/proc/add_shuttle_event(typepath) + var/datum/shuttle_event/event = new typepath (src) + event_list.Add(event) + if(launch_status == ENDGAME_LAUNCHED) + event.start_up_event(0) + #ifdef TESTING #undef DOCKING_PORT_HIGHLIGHT #endif diff --git a/code/modules/shuttle/shuttle_events/_shuttle_events.dm b/code/modules/shuttle/shuttle_events/_shuttle_events.dm index f809e274dc601..3c6425018aa46 100644 --- a/code/modules/shuttle/shuttle_events/_shuttle_events.dm +++ b/code/modules/shuttle/shuttle_events/_shuttle_events.dm @@ -21,7 +21,11 @@ src.port = port /datum/shuttle_event/proc/start_up_event(evacuation_duration) - activate_at = world.time + evacuation_duration * activation_fraction + if(port.launch_status == ENDGAME_LAUNCHED) + active = TRUE //if added during endgame, instant activate + activate() + else + activate_at = world.time + evacuation_duration * activation_fraction ///We got activated /datum/shuttle_event/proc/activate() diff --git a/code/modules/shuttle/shuttle_events/carp.dm b/code/modules/shuttle/shuttle_events/carp.dm index 18529f1c02884..c54f3e44716e9 100644 --- a/code/modules/shuttle/shuttle_events/carp.dm +++ b/code/modules/shuttle/shuttle_events/carp.dm @@ -16,19 +16,6 @@ //Give the carp the goal to migrate in a straight line so they dont just idle in hyperspace carpee.migrate_to(list(WEAKREF(get_edge_target_turf(carpee.loc, angle2dir(dir2angle(port.preferred_direction) - 180))))) -///CARPTIDE! CARPTIDE! CARPTIDE! Magical carp will attack the shuttle! -/datum/shuttle_event/simple_spawner/carp/magic - name = "Magical Carp Nest! (Very Dangerous!)" - event_probability = 0 - activation_fraction = 0.2 - - spawning_list = list(/mob/living/basic/carp/magic = 12, /mob/living/basic/carp/magic/chaos = 1) - spawning_flags = SHUTTLE_EVENT_HIT_SHUTTLE | SHUTTLE_EVENT_MISS_SHUTTLE - spawn_probability_per_process = 20 - - remove_from_list_when_spawned = TRUE - self_destruct_when_empty = TRUE - ///Spawn a bunch of friendly carp to view from inside the shuttle! May occassionally pass through and nibble some windows, but are otherwise pretty harmless /datum/shuttle_event/simple_spawner/carp/friendly name = "Passive Carp Nest! (Mostly Harmless!)" @@ -60,3 +47,34 @@ spawn_probability_per_process = 100 remove_from_list_when_spawned = FALSE + +///CARPTIDE! CARPTIDE! CARPTIDE! Magical carp will attack the shuttle! +/datum/shuttle_event/simple_spawner/carp/magic + name = "Magical Carp Nest! (Very Dangerous!)" + spawning_list = list(/mob/living/basic/carp/magic = 12, /mob/living/basic/carp/magic/chaos = 3) + spawning_flags = SHUTTLE_EVENT_HIT_SHUTTLE | SHUTTLE_EVENT_MISS_SHUTTLE + + event_probability = 0 + activation_fraction = 0.2 + spawn_probability_per_process = 20 + + remove_from_list_when_spawned = TRUE + self_destruct_when_empty = TRUE + +/// Spawns some player controlled fire sharks +/datum/shuttle_event/simple_spawner/player_controlled/fire_shark + name = "Three player controlled fire sharks! (Dangerous!)" + spawning_list = list(/mob/living/basic/heretic_summon/fire_shark = 3) + spawning_flags = SHUTTLE_EVENT_HIT_SHUTTLE + + event_probability = 0 + activation_fraction = 0.2 + spawn_probability_per_process = 100 + spawns_per_spawn = 3 + + spawn_anyway_if_no_player = FALSE + ghost_alert_string = "Would you like to be a fire shark attacking the shuttle?" + remove_from_list_when_spawned = TRUE + self_destruct_when_empty = TRUE + + role_type = ROLE_SENTIENCE diff --git a/code/modules/shuttle/shuttle_events/humans.dm b/code/modules/shuttle/shuttle_events/humans.dm new file mode 100644 index 0000000000000..99f4006d5bb28 --- /dev/null +++ b/code/modules/shuttle/shuttle_events/humans.dm @@ -0,0 +1,122 @@ +/// Human spawning events, with the ability to give them outfits! +/datum/shuttle_event/simple_spawner/player_controlled/human + /// Outfits equipped to human mobs we send to the shuttle + var/datum/outfit/outfit = /datum/outfit/job/assistant + +/datum/shuttle_event/simple_spawner/player_controlled/human/post_spawn(atom/movable/spawnee) + ..() + + if(ishuman(spawnee)) + prepare_human(spawnee) + +/datum/shuttle_event/simple_spawner/player_controlled/human/proc/prepare_human(mob/living/carbon/human/human) + human.equipOutfit(new outfit ()) + +/datum/shuttle_event/simple_spawner/player_controlled/human/greytide + name = "Greytide! (10 assistants)" + spawning_list = list(/mob/living/carbon/human = 10) + spawning_flags = SHUTTLE_EVENT_HIT_SHUTTLE + outfit = /datum/outfit/job/assistant/breath_mask + + event_probability = 0.1 + spawn_probability_per_process = 5 + activation_fraction = 0.05 + spawns_per_spawn = 10 + + spawn_anyway_if_no_player = TRUE + ghost_alert_string = "Would you like to be an assistant shot at the shuttle?" + remove_from_list_when_spawned = TRUE + self_destruct_when_empty = TRUE + + role_type = ROLE_HERMIT + +/datum/outfit/job/assistant/breath_mask + name = "Assistant - Breathmask" + mask = /obj/item/clothing/mask/breath + l_pocket = /obj/item/tank/internals/emergency_oxygen + internals_slot = ITEM_SLOT_LPOCKET + +/datum/shuttle_event/simple_spawner/player_controlled/human/greytide/interns + name = "Intern Wave (Unarmed, 10 interns)" + event_probability = 0 + outfit = /datum/outfit/centcom/centcom_intern/unarmed + + spawn_anyway_if_no_player = FALSE + ghost_alert_string = "Would you like to be a centcom intern shot at the shuttle?" + +/datum/shuttle_event/simple_spawner/player_controlled/human/greytide/interns/activate() + ..() + + minor_announce("We're sending you our bravest interns, please let them in when they arrive.", + title = "Emergency Shuttle", alert = TRUE) + +/datum/shuttle_event/simple_spawner/player_controlled/human/greytide/interns/armed + name = "Intern Wave (Armed, 10 interns)" + event_probability = 0 + outfit = /datum/outfit/centcom/centcom_intern + + spawn_anyway_if_no_player = FALSE + ghost_alert_string = "Would you like to be a centcom intern shot at the shuttle?" + +/datum/shuttle_event/simple_spawner/player_controlled/human/hitchhiker + name = "Hitchhiker! (Harmless, single ghost spawn)" + spawning_list = list(/mob/living/carbon/human = 1) + spawning_flags = SHUTTLE_EVENT_HIT_SHUTTLE + outfit = /datum/outfit/job/assistant/hitchhiker + + event_probability = 1 + spawn_probability_per_process = 5 + activation_fraction = 0.2 + + spawn_anyway_if_no_player = TRUE + ghost_alert_string = "Would you like to be an assistant shot at the shuttle?" + remove_from_list_when_spawned = TRUE + self_destruct_when_empty = TRUE + + role_type = ROLE_HERMIT + +/datum/outfit/job/assistant/hitchhiker + name = "Assistant - Hitchhiker" + mask = /obj/item/clothing/mask/breath + suit = /obj/item/clothing/suit/space/eva + head = /obj/item/clothing/head/helmet/space/eva + l_pocket = /obj/item/tank/internals/emergency_oxygen + r_hand = /obj/item/storage/briefcase/hitchiker + internals_slot = ITEM_SLOT_LPOCKET + +/datum/shuttle_event/simple_spawner/player_controlled/human/nukie + name = "Nuclear Operative (Dangerous as heck)!" + spawning_list = list(/mob/living/carbon/human = 1) + spawning_flags = SHUTTLE_EVENT_HIT_SHUTTLE + outfit = /datum/outfit/deathmatch_loadout/nukie + + event_probability = 0 + spawn_probability_per_process = 100 + + spawn_anyway_if_no_player = FALSE + ghost_alert_string = "Would you like to be a nuclear operative to assault the shuttle?" + remove_from_list_when_spawned = TRUE + self_destruct_when_empty = TRUE + + role_type = ROLE_NUCLEAR_OPERATIVE + +/datum/outfit/shuttle_nukie + name = "Shuttle Nuclear Operative" + + uniform = /obj/item/clothing/under/syndicate/tacticool + back = /obj/item/mod/control/pre_equipped/nuclear + r_hand = /obj/item/gun/ballistic/shotgun/bulldog/unrestricted + belt = /obj/item/gun/ballistic/automatic/pistol/clandestine + r_pocket = /obj/item/reagent_containers/hypospray/medipen/stimulants + l_pocket = /obj/item/grenade/syndieminibomb + implants = list(/obj/item/implant/explosive) + suit_store = /obj/item/tank/internals/emergency_oxygen + + internals_slot = ITEM_SLOT_SUITSTORE + + backpack_contents = list( + /obj/item/ammo_box/c10mm, + /obj/item/ammo_box/magazine/m12g = 2, + /obj/item/pen/edagger, + /obj/item/reagent_containers/hypospray/medipen/atropine, + ) diff --git a/code/modules/shuttle/shuttle_events/meteors.dm b/code/modules/shuttle/shuttle_events/meteors.dm index ef0b6002e5774..ad3814186acd7 100644 --- a/code/modules/shuttle/shuttle_events/meteors.dm +++ b/code/modules/shuttle/shuttle_events/meteors.dm @@ -40,3 +40,15 @@ spawning_flags = SHUTTLE_EVENT_MISS_SHUTTLE spawning_list = list(/obj/effect/meteor/medium = 10, /obj/effect/meteor/big = 5, /obj/effect/meteor/flaming = 3, /obj/effect/meteor/cluster = 1, /obj/effect/meteor/irradiated = 3, /obj/effect/meteor/bluespace = 2) + +/datum/shuttle_event/simple_spawner/meteor/dust/meaty + name = "Meaty Meteors! (Mostly Safe)" + spawning_list = list(/obj/effect/meteor/meaty = 1) + spawning_flags = SHUTTLE_EVENT_MISS_SHUTTLE | SHUTTLE_EVENT_HIT_SHUTTLE + + event_probability = 0.1 + activation_fraction = 0.1 + spawn_probability_per_process = 100 + spawns_per_spawn = 3 + + hit_the_shuttle_chance = 2 diff --git a/code/modules/shuttle/shuttle_events/misc.dm b/code/modules/shuttle/shuttle_events/misc.dm index f65eddadf7cbf..4891d5af7998f 100644 --- a/code/modules/shuttle/shuttle_events/misc.dm +++ b/code/modules/shuttle/shuttle_events/misc.dm @@ -41,7 +41,7 @@ ///Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through /datum/shuttle_event/simple_spawner/black_hole - name = "Black Hole (Oh no!)" + name = "Black Hole (Oh no! Just one though!)" event_probability = 0 // only admin spawnable spawn_probability_per_process = 10 activation_fraction = 0.35 @@ -53,9 +53,10 @@ ///Kobayashi Maru version /datum/shuttle_event/simple_spawner/black_hole/adminbus - name = "Black Holes (OH GOD!)" + name = "Black Holes (OH GOD! Will literally kill everyone!)" event_probability = 0 spawn_probability_per_process = 50 activation_fraction = 0.2 spawning_list = list(/obj/singularity/shuttle_event = 10) remove_from_list_when_spawned = TRUE + diff --git a/code/modules/shuttle/shuttle_events/player_controlled.dm b/code/modules/shuttle/shuttle_events/player_controlled.dm index 86d134f29f727..6954a5eaa7879 100644 --- a/code/modules/shuttle/shuttle_events/player_controlled.dm +++ b/code/modules/shuttle/shuttle_events/player_controlled.dm @@ -17,12 +17,16 @@ /// 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/mob/chosen_one = 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, alert_pic = spawn_type, role_name_text = "shot at shuttle", amount_to_pick = 1) - if(isnull(chosen_one) && !spawn_anyway_if_no_player) - return - var/mob/living/new_mob = new spawn_type (get_turf(get_spawn_turf())) - new_mob.ckey = chosen_one.ckey + var/mob/living/new_mob = new spawn_type (null) + ADD_TRAIT(new_mob, TRAIT_STASIS, type) post_spawn(new_mob) + var/mob/chosen_one = 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, alert_pic = new_mob, role_name_text = "shot at shuttle", amount_to_pick = 1) + if(isnull(chosen_one) && !spawn_anyway_if_no_player || !isdead(chosen_one)) //we can get sniped if there's multiple spawns, so check if dead + qdel(new_mob) + return + new_mob.forceMove(get_turf(get_spawn_turf())) + REMOVE_TRAIT(new_mob, TRAIT_STASIS, type) + new_mob.ckey = chosen_one?.ckey ///BACK FOR REVENGE!!! /datum/shuttle_event/simple_spawner/player_controlled/alien_queen diff --git a/code/modules/shuttle/shuttle_events/projectile.dm b/code/modules/shuttle/shuttle_events/projectile.dm new file mode 100644 index 0000000000000..940dddb61a798 --- /dev/null +++ b/code/modules/shuttle/shuttle_events/projectile.dm @@ -0,0 +1,23 @@ +/// Spawn projectiles towards the shuttle +/datum/shuttle_event/simple_spawner/projectile + /// Spread of the fired projectiles, to add some flair to it + var/angle_spread = 0 + +/datum/shuttle_event/simple_spawner/projectile/post_spawn(atom/movable/spawnee) + . = ..() + + if(isprojectile(spawnee)) + var/obj/projectile/pew = spawnee + var/angle = dir2angle(REVERSE_DIR(port.preferred_direction)) + rand(-angle_spread, angle_spread) + pew.fire(angle) + +/datum/shuttle_event/simple_spawner/projectile/fireball //bap bap bapaba bap + name = "Fireball Burst (Surprisingly safe!)" + activation_fraction = 0.5 // this doesn't matter for hijack events but just in case its forced + + spawning_list = list(/obj/projectile/magic/fireball = 1) + angle_spread = 10 + spawns_per_spawn = 10 + spawning_flags = SHUTTLE_EVENT_HIT_SHUTTLE | SHUTTLE_EVENT_HIT_SHUTTLE + spawn_probability_per_process = 2 + self_destruct_when_empty = TRUE diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index cb7cad65b6ba1..15af6db6a4f6d 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -33,9 +33,9 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate //Owerride non zero bound_x, bound_y, pixel_x, pixel_y to zero. //Dont take in account starting bound_x, bound_y, pixel_x, pixel_y. //So it can unintentionally shift physical bounds of things that starts with non zero bound_x, bound_y. - if(((bound_height != world.icon_size) || (bound_width != world.icon_size)) && (bound_x == 0) && (bound_y == 0)) //Dont shift things that have non zero bound_x and bound_y, or it move somewhere. Now it BSA and Gateway. - pixel_x = dir & (NORTH|EAST) ? -bound_width+world.icon_size : 0 - pixel_y = dir & (NORTH|WEST) ? -bound_width+world.icon_size : 0 + if(((bound_height != ICON_SIZE_Y) || (bound_width != ICON_SIZE_X)) && (bound_x == 0) && (bound_y == 0)) //Dont shift things that have non zero bound_x and bound_y, or it move somewhere. Now it BSA and Gateway. + pixel_x = dir & (NORTH|EAST) ? -bound_width+ICON_SIZE_X : 0 + pixel_y = dir & (NORTH|WEST) ? -bound_width+ICON_SIZE_X : 0 //? bound_x = pixel_x bound_y = pixel_y diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 484fa32ac8777..3cbe494c8d0fb 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -153,9 +153,10 @@ /obj/structure/table/abductor/wabbajack/right desc = "It wakes so you may sleep." -// Bar staff, GODMODE mobs(as long as they stay in the shuttle) that just want to make sure people have drinks -// and a good time. - +/** + * Bar staff, mobs with the TRAIT_GODMODE trait (as long as they stay in the shuttle) + * that just want to make sure people have drinks and a good shuttle time. + */ /mob/living/basic/drone/snowflake/bardrone name = "Bardrone" desc = "A barkeeping drone, a robot built to tend bars." diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 08e0b0d269950..565655a441602 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -62,8 +62,8 @@ shuttlePortId = "syndicate_custom" jump_to_ports = list("syndicate_ne" = 1, "syndicate_nw" = 1, "syndicate_n" = 1, "syndicate_se" = 1, "syndicate_sw" = 1, "syndicate_s" = 1) view_range = 5.5 - x_offset = -7 - y_offset = -1 + x_offset = 7 //flip both offsets because the shuttle is mapped in facing SOUTH, not NORTH; the docking port is also rotated + y_offset = 1 whitelist_turfs = list(/turf/open/space, /turf/open/floor/plating, /turf/open/lava, /turf/closed/mineral, /turf/open/openspace, /turf/open/misc) see_hidden = TRUE circuit = /obj/item/circuitboard/computer/syndicate_shuttle_docker diff --git a/code/modules/spells/spell_types/aoe_spell/area_conversion.dm b/code/modules/spells/spell_types/aoe_spell/area_conversion.dm index a03b4c9ab21a4..ed3598d2fb5cc 100644 --- a/code/modules/spells/spell_types/aoe_spell/area_conversion.dm +++ b/code/modules/spells/spell_types/aoe_spell/area_conversion.dm @@ -19,5 +19,5 @@ return RANGE_TURFS(aoe_radius, center) /datum/action/cooldown/spell/aoe/area_conversion/cast_on_thing_in_aoe(turf/victim, atom/caster) - playsound(victim, 'sound/items/welder.ogg', 75, TRUE) + playsound(victim, 'sound/items/tools/welder.ogg', 75, TRUE) victim.narsie_act(FALSE, TRUE, 100 - (get_dist(victim, caster) * 25)) diff --git a/code/modules/spells/spell_types/aoe_spell/knock.dm b/code/modules/spells/spell_types/aoe_spell/knock.dm index ede1462633b03..8e4f453b5d646 100644 --- a/code/modules/spells/spell_types/aoe_spell/knock.dm +++ b/code/modules/spells/spell_types/aoe_spell/knock.dm @@ -3,7 +3,7 @@ desc = "This spell opens nearby doors and closets." button_icon_state = "knock" - sound = 'sound/magic/knock.ogg' + sound = 'sound/effects/magic/knock.ogg' school = SCHOOL_TRANSMUTATION cooldown_time = 10 SECONDS cooldown_reduction_per_rank = 2 SECONDS diff --git a/code/modules/spells/spell_types/aoe_spell/magic_missile.dm b/code/modules/spells/spell_types/aoe_spell/magic_missile.dm index 18278fb593a94..02f19f45323c2 100644 --- a/code/modules/spells/spell_types/aoe_spell/magic_missile.dm +++ b/code/modules/spells/spell_types/aoe_spell/magic_missile.dm @@ -2,7 +2,7 @@ name = "Magic Missile" desc = "This spell fires several, slow moving, magic projectiles at nearby targets." button_icon_state = "magicm" - sound = 'sound/magic/magic_missile.ogg' + sound = 'sound/effects/magic/magic_missile.ogg' school = SCHOOL_EVOCATION cooldown_time = 20 SECONDS diff --git a/code/modules/spells/spell_types/aoe_spell/repulse.dm b/code/modules/spells/spell_types/aoe_spell/repulse.dm index 259f20ee9ba0a..c56ffd1180b4c 100644 --- a/code/modules/spells/spell_types/aoe_spell/repulse.dm +++ b/code/modules/spells/spell_types/aoe_spell/repulse.dm @@ -73,7 +73,7 @@ name = "Repulse" desc = "This spell throws everything around the user away." button_icon_state = "repulse" - sound = 'sound/magic/repulse.ogg' + sound = 'sound/effects/magic/repulse.ogg' school = SCHOOL_EVOCATION invocation = "GITTAH WEIGH" @@ -91,7 +91,7 @@ button_icon = 'icons/mob/actions/actions_xeno.dmi' button_icon_state = "tailsweep" panel = "Alien" - sound = 'sound/magic/tail_swing.ogg' + sound = 'sound/effects/magic/tail_swing.ogg' cooldown_time = 15 SECONDS spell_requirements = NONE @@ -106,7 +106,7 @@ /datum/action/cooldown/spell/aoe/repulse/xeno/cast(atom/cast_on) if(iscarbon(cast_on)) var/mob/living/carbon/carbon_caster = cast_on - playsound(get_turf(carbon_caster), 'sound/voice/hiss5.ogg', 80, TRUE, TRUE) + playsound(get_turf(carbon_caster), 'sound/mobs/non-humanoids/hiss/hiss5.ogg', 80, TRUE, TRUE) carbon_caster.spin(6, 1) return ..() diff --git a/code/modules/spells/spell_types/aoe_spell/sacred_flame.dm b/code/modules/spells/spell_types/aoe_spell/sacred_flame.dm index 450544a7a1f66..e0041525839dd 100644 --- a/code/modules/spells/spell_types/aoe_spell/sacred_flame.dm +++ b/code/modules/spells/spell_types/aoe_spell/sacred_flame.dm @@ -2,7 +2,7 @@ name = "Sacred Flame" desc = "Makes everyone around you more flammable, and lights yourself on fire." button_icon_state = "sacredflame" - sound = 'sound/magic/fireball.ogg' + sound = 'sound/effects/magic/fireball.ogg' school = SCHOOL_EVOCATION cooldown_time = 6 SECONDS diff --git a/code/modules/spells/spell_types/charged/tesla_blast.dm b/code/modules/spells/spell_types/charged/tesla_blast.dm index efad0e4a69241..84f9cba8153bc 100644 --- a/code/modules/spells/spell_types/charged/tesla_blast.dm +++ b/code/modules/spells/spell_types/charged/tesla_blast.dm @@ -3,7 +3,7 @@ desc = "Charge up a tesla arc and release it at random nearby targets! \ You can move freely while it charges. The arc jumps between targets and can knock them down." button_icon_state = "lightning" - sound = 'sound/magic/lightningbolt.ogg' + sound = 'sound/effects/magic/lightningbolt.ogg' cooldown_time = 30 SECONDS cooldown_reduction_per_rank = 6.75 SECONDS @@ -15,7 +15,7 @@ channel_message = span_notice("You start gathering power...") charge_overlay_icon = 'icons/effects/effects.dmi' charge_overlay_state = "electricity" - charge_sound = 'sound/magic/lightning_chargeup.ogg' + charge_sound = 'sound/effects/magic/lightning_chargeup.ogg' target_radius = 7 max_beam_bounces = 5 @@ -27,7 +27,7 @@ /// Zaps a target, the bolt originating from origin. /datum/action/cooldown/spell/charged/beam/tesla/send_beam(atom/origin, mob/living/carbon/to_beam, bolt_energy = 30, bounces = 5) origin.Beam(to_beam, icon_state = "lightning[rand(1,12)]", time = 0.5 SECONDS) - playsound(get_turf(to_beam), 'sound/magic/lightningshock.ogg', 50, TRUE, -1) + playsound(get_turf(to_beam), 'sound/effects/magic/lightningshock.ogg', 50, TRUE, -1) if(to_beam.can_block_magic(antimagic_flags)) to_beam.visible_message( diff --git a/code/modules/spells/spell_types/conjure/_conjure.dm b/code/modules/spells/spell_types/conjure/_conjure.dm index 99f0c5af821d5..5501f1055ca2e 100644 --- a/code/modules/spells/spell_types/conjure/_conjure.dm +++ b/code/modules/spells/spell_types/conjure/_conjure.dm @@ -1,5 +1,5 @@ /datum/action/cooldown/spell/conjure - sound = 'sound/items/welder.ogg' + sound = 'sound/items/tools/welder.ogg' school = SCHOOL_CONJURATION /// The radius around the caster the items will appear. 0 = spawns on top of the caster. diff --git a/code/modules/spells/spell_types/conjure/bees.dm b/code/modules/spells/spell_types/conjure/bees.dm index 58062f1e8fe98..28636cde70967 100644 --- a/code/modules/spells/spell_types/conjure/bees.dm +++ b/code/modules/spells/spell_types/conjure/bees.dm @@ -4,7 +4,7 @@ instantly summoning a swarm of bees to your location. \ These bees are NOT friendly to anyone." button_icon_state = "bee" - sound = 'sound/voice/moth/scream_moth.ogg' + sound = 'sound/mobs/humanoids/moth/scream_moth.ogg' school = SCHOOL_CONJURATION cooldown_time = 1 MINUTES diff --git a/code/modules/spells/spell_types/conjure/carp.dm b/code/modules/spells/spell_types/conjure/carp.dm index 5411030e75cb1..8525791405108 100644 --- a/code/modules/spells/spell_types/conjure/carp.dm +++ b/code/modules/spells/spell_types/conjure/carp.dm @@ -1,7 +1,7 @@ /datum/action/cooldown/spell/conjure/carp name = "Summon Carp" desc = "This spell conjures a simple carp." - sound = 'sound/magic/summon_karp.ogg' + sound = 'sound/effects/magic/summon_karp.ogg' school = SCHOOL_CONJURATION cooldown_time = 2 MINUTES diff --git a/code/modules/spells/spell_types/conjure/cheese.dm b/code/modules/spells/spell_types/conjure/cheese.dm index d9c90d1dbac34..c017ebb6c2039 100644 --- a/code/modules/spells/spell_types/conjure/cheese.dm +++ b/code/modules/spells/spell_types/conjure/cheese.dm @@ -1,7 +1,7 @@ /datum/action/cooldown/spell/conjure/cheese name = "Summon Cheese" desc = "This spell conjures a bunch of cheese wheels. What the hell?" - sound = 'sound/magic/summonitems_generic.ogg' + sound = 'sound/effects/magic/summonitems_generic.ogg' button_icon_state = "cheese" school = SCHOOL_CONJURATION diff --git a/code/modules/spells/spell_types/conjure/constructs.dm b/code/modules/spells/spell_types/conjure/constructs.dm index 2af3034f07881..72381d0693a37 100644 --- a/code/modules/spells/spell_types/conjure/constructs.dm +++ b/code/modules/spells/spell_types/conjure/constructs.dm @@ -3,7 +3,7 @@ desc = "This spell conjures a construct which may be controlled by Shades." button_icon = 'icons/mob/actions/actions_cult.dmi' button_icon_state = "artificer" - sound = 'sound/magic/summonitems_generic.ogg' + sound = 'sound/effects/magic/summonitems_generic.ogg' school = SCHOOL_CONJURATION cooldown_time = 1 MINUTES diff --git a/code/modules/spells/spell_types/conjure/creatures.dm b/code/modules/spells/spell_types/conjure/creatures.dm index 9aeede68a6654..1fcd11c579db8 100644 --- a/code/modules/spells/spell_types/conjure/creatures.dm +++ b/code/modules/spells/spell_types/conjure/creatures.dm @@ -1,7 +1,7 @@ /datum/action/cooldown/spell/conjure/creature name = "Summon Creature Swarm" desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth." - sound = 'sound/magic/summonitems_generic.ogg' + sound = 'sound/effects/magic/summonitems_generic.ogg' school = SCHOOL_CONJURATION cooldown_time = 2 MINUTES diff --git a/code/modules/spells/spell_types/conjure/ed_swarm.dm b/code/modules/spells/spell_types/conjure/ed_swarm.dm index db122e4c846a7..3341f3a6aace6 100644 --- a/code/modules/spells/spell_types/conjure/ed_swarm.dm +++ b/code/modules/spells/spell_types/conjure/ed_swarm.dm @@ -19,4 +19,4 @@ summoned_bot.bot_mode_flags |= BOT_COVER_EMAGGED summoned_bot.projectile = /obj/projectile/beam/laser - summoned_bot.shoot_sound = 'sound/weapons/laser.ogg' + summoned_bot.shoot_sound = 'sound/items/weapons/laser.ogg' diff --git a/code/modules/spells/spell_types/conjure/link_worlds.dm b/code/modules/spells/spell_types/conjure/link_worlds.dm index f227fc1a13e9a..242227c4d0a1d 100644 --- a/code/modules/spells/spell_types/conjure/link_worlds.dm +++ b/code/modules/spells/spell_types/conjure/link_worlds.dm @@ -1,15 +1,14 @@ /datum/action/cooldown/spell/conjure/link_worlds name = "Link Worlds" desc = "A whole new dimension for you to play with! They won't be happy about it, though." - - sound = 'sound/weapons/marauder.ogg' + sound = 'sound/items/weapons/marauder.ogg' + button_icon = 'icons/mob/simple/lavaland/nest.dmi' + button_icon_state = "nether" cooldown_time = 1 MINUTES cooldown_reduction_per_rank = 10 SECONDS - - invocation = "WTF" + invocation = "FL'NT N' ST'L" invocation_type = INVOCATION_SHOUT spell_requirements = NONE - summon_radius = 1 summon_type = list(/obj/structure/spawner/nether) summon_amount = 1 diff --git a/code/modules/spells/spell_types/conjure/simian.dm b/code/modules/spells/spell_types/conjure/simian.dm index 9fef5629d0379..b64a34f847ea7 100644 --- a/code/modules/spells/spell_types/conjure/simian.dm +++ b/code/modules/spells/spell_types/conjure/simian.dm @@ -4,7 +4,7 @@ summons monkeys and gorillas that will promptly flip out and attack everything in sight. Fun! \ Their lesser, easily manipulable minds will be convinced you are one of their allies, but only for a minute. Unless you also are a monkey." button_icon_state = "simian" - sound = 'sound/ambience/antag/monkey.ogg' + sound = 'sound/music/antag/monkey.ogg' school = SCHOOL_CONJURATION cooldown_time = 1.5 MINUTES diff --git a/code/modules/spells/spell_types/jaunt/_jaunt.dm b/code/modules/spells/spell_types/jaunt/_jaunt.dm index 207a7ed8b5be4..c4255dc175be4 100644 --- a/code/modules/spells/spell_types/jaunt/_jaunt.dm +++ b/code/modules/spells/spell_types/jaunt/_jaunt.dm @@ -25,6 +25,11 @@ return ..() +/datum/action/cooldown/spell/jaunt/PreActivate(atom/target) + if(SEND_SIGNAL(target, COMSIG_MOB_PRE_JAUNT, target) & COMPONENT_BLOCK_JAUNT) + return FALSE + . = ..() + /datum/action/cooldown/spell/jaunt/before_cast(atom/cast_on) return ..() | SPELL_NO_FEEDBACK // Don't do the feedback until after we're jaunting diff --git a/code/modules/spells/spell_types/jaunt/bloodcrawl.dm b/code/modules/spells/spell_types/jaunt/bloodcrawl.dm index f61e48e889672..2795efc2b201b 100644 --- a/code/modules/spells/spell_types/jaunt/bloodcrawl.dm +++ b/code/modules/spells/spell_types/jaunt/bloodcrawl.dm @@ -101,7 +101,7 @@ jaunter.put_in_hands(right_hand) blood.visible_message(span_warning("[jaunter] sinks into [blood]!")) - playsound(jaunt_turf, 'sound/magic/enter_blood.ogg', 50, TRUE, -1) + playsound(jaunt_turf, 'sound/effects/magic/enter_blood.ogg', 50, TRUE, -1) jaunter.extinguish_mob() REMOVE_TRAIT(jaunter, TRAIT_NO_TRANSFORM, REF(src)) @@ -140,7 +140,7 @@ /// Adds an coloring effect to mobs which exit blood crawl. /datum/action/cooldown/spell/jaunt/bloodcrawl/proc/exit_blood_effect(mob/living/exited) var/turf/landing_turf = get_turf(exited) - playsound(landing_turf, 'sound/magic/exit_blood.ogg', 50, TRUE, -1) + playsound(landing_turf, 'sound/effects/magic/exit_blood.ogg', 50, TRUE, -1) // Make the mob have the color of the blood pool it came out of var/obj/effect/decal/cleanable/came_from = locate() in landing_turf @@ -161,7 +161,7 @@ desc = "Allows you to phase in and out of existance via pools of blood. If you are dragging someone in critical or dead, \ they will be consumed by you, fully healing you." /// The sound played when someone's consumed. - var/consume_sound = 'sound/magic/demon_consume.ogg' + var/consume_sound = 'sound/effects/magic/demon_consume.ogg' /// consume count (statistics and stuff) var/consume_count = 0 /// Apply damage every 20 seconds if we bloodcrawling diff --git a/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm b/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm index 43e1f9036ee43..e020ec1d5b16f 100644 --- a/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm @@ -2,14 +2,14 @@ name = "Ethereal Jaunt" desc = "This spell turns your form ethereal, temporarily making you invisible and able to pass through walls." button_icon_state = "jaunt" - sound = 'sound/magic/ethereal_enter.ogg' + sound = 'sound/effects/magic/ethereal_enter.ogg' cooldown_time = 30 SECONDS cooldown_reduction_per_rank = 5 SECONDS jaunt_type = /obj/effect/dummy/phased_mob/spell_jaunt - var/exit_jaunt_sound = 'sound/magic/ethereal_exit.ogg' + var/exit_jaunt_sound = 'sound/effects/magic/ethereal_exit.ogg' /// For how long are we jaunting? var/jaunt_duration = 5 SECONDS /// For how long we become immobilized after exiting the jaunt. diff --git a/code/modules/spells/spell_types/list_target/telepathy.dm b/code/modules/spells/spell_types/list_target/telepathy.dm index 9d512f5a0b9ac..9f3694c03b41b 100644 --- a/code/modules/spells/spell_types/list_target/telepathy.dm +++ b/code/modules/spells/spell_types/list_target/telepathy.dm @@ -22,7 +22,7 @@ if(. & SPELL_CANCEL_CAST) return - message = tgui_input_text(owner, "What do you wish to whisper to [cast_on]?", "[src]") + message = tgui_input_text(owner, "What do you wish to whisper to [cast_on]?", "[src]", max_length = MAX_MESSAGE_LEN) if(QDELETED(src) || QDELETED(owner) || QDELETED(cast_on) || !can_cast_spell()) return . | SPELL_CANCEL_CAST @@ -48,7 +48,7 @@ to_chat(cast_on, "You hear a voice in your head... [formatted_message]") else owner.balloon_alert(owner, "transmission blocked!") - to_chat(owner, "Something has blocked your transmission!") + to_chat(owner, span_warning("Something has blocked your transmission!")) failure_message_for_ghosts = " (blocked by antimagic)" for(var/mob/dead/ghost as anything in GLOB.dead_mob_list) diff --git a/code/modules/spells/spell_types/madness_curse.dm b/code/modules/spells/spell_types/madness_curse.dm index 91122b387bba9..d186756b1c10e 100644 --- a/code/modules/spells/spell_types/madness_curse.dm +++ b/code/modules/spells/spell_types/madness_curse.dm @@ -22,7 +22,7 @@ GLOBAL_VAR_INIT(curse_of_madness_triggered, FALSE) give_madness(to_curse, message) /proc/give_madness(mob/living/carbon/human/to_curse, message) - to_curse.playsound_local(get_turf(to_curse), 'sound/magic/curse.ogg', 40, 1) + to_curse.playsound_local(get_turf(to_curse), 'sound/effects/magic/curse.ogg', 40, 1) to_chat(to_curse, span_reallybig(span_hypnophrase(message))) to_chat(to_curse, span_warning("Your mind shatters!")) switch(rand(1, 10)) diff --git a/code/modules/spells/spell_types/pointed/_pointed.dm b/code/modules/spells/spell_types/pointed/_pointed.dm index edf3dab2179d4..9189106d87424 100644 --- a/code/modules/spells/spell_types/pointed/_pointed.dm +++ b/code/modules/spells/spell_types/pointed/_pointed.dm @@ -143,7 +143,7 @@ var/turf/caster_front_turf = get_step(owner, owner.dir) fire_projectile(cast_on) - owner.newtonian_move(get_dir(caster_front_turf, caster_turf)) + owner.newtonian_move(get_angle(caster_front_turf, caster_turf)) if(current_amount <= 0) unset_click_ability(owner, refund_cooldown = FALSE) diff --git a/code/modules/spells/spell_types/pointed/abyssal_gaze.dm b/code/modules/spells/spell_types/pointed/abyssal_gaze.dm index a7336ef7834aa..a117e577e463c 100644 --- a/code/modules/spells/spell_types/pointed/abyssal_gaze.dm +++ b/code/modules/spells/spell_types/pointed/abyssal_gaze.dm @@ -34,7 +34,7 @@ return FALSE to_chat(cast_on, span_userdanger("A freezing darkness surrounds you...")) - cast_on.playsound_local(get_turf(cast_on), 'sound/hallucinations/i_see_you1.ogg', 50, 1) + cast_on.playsound_local(get_turf(cast_on), 'sound/effects/hallucinations/i_see_you1.ogg', 50, 1) owner.playsound_local(get_turf(owner), 'sound/effects/ghost2.ogg', 50, 1) cast_on.adjust_temp_blindness(blind_duration) if(ishuman(cast_on)) diff --git a/code/modules/spells/spell_types/pointed/blind.dm b/code/modules/spells/spell_types/pointed/blind.dm index 982cb9be5346e..208564d250a84 100644 --- a/code/modules/spells/spell_types/pointed/blind.dm +++ b/code/modules/spells/spell_types/pointed/blind.dm @@ -4,7 +4,7 @@ button_icon_state = "blind" ranged_mousepointer = 'icons/effects/mouse_pointers/blind_target.dmi' - sound = 'sound/magic/blind.ogg' + sound = 'sound/effects/magic/blind.ogg' school = SCHOOL_TRANSMUTATION cooldown_time = 30 SECONDS cooldown_reduction_per_rank = 6.25 SECONDS diff --git a/code/modules/spells/spell_types/pointed/finger_guns.dm b/code/modules/spells/spell_types/pointed/finger_guns.dm index 24f51a0e90862..cf80489fc916a 100644 --- a/code/modules/spells/spell_types/pointed/finger_guns.dm +++ b/code/modules/spells/spell_types/pointed/finger_guns.dm @@ -33,7 +33,7 @@ return FALSE var/mob/living/carbon/human/human_invoker = invoker - if(human_invoker.incapacitated()) + if(human_invoker.incapacitated) if(feedback) to_chat(human_invoker, span_warning("You can't properly point your fingers while incapacitated.")) return FALSE diff --git a/code/modules/spells/spell_types/pointed/fireball.dm b/code/modules/spells/spell_types/pointed/fireball.dm index e818de97501db..52b80b8ad6411 100644 --- a/code/modules/spells/spell_types/pointed/fireball.dm +++ b/code/modules/spells/spell_types/pointed/fireball.dm @@ -3,7 +3,7 @@ desc = "This spell fires an explosive fireball at a target." button_icon_state = "fireball0" - sound = 'sound/magic/fireball.ogg' + sound = 'sound/effects/magic/fireball.ogg' school = SCHOOL_EVOCATION cooldown_time = 6 SECONDS cooldown_reduction_per_rank = 1 SECONDS // 1 second reduction per rank diff --git a/code/modules/spells/spell_types/pointed/lightning_bolt.dm b/code/modules/spells/spell_types/pointed/lightning_bolt.dm index 76d9665e71107..fcbc3f8c91d70 100644 --- a/code/modules/spells/spell_types/pointed/lightning_bolt.dm +++ b/code/modules/spells/spell_types/pointed/lightning_bolt.dm @@ -4,7 +4,7 @@ button_icon_state = "lightning" active_overlay_icon_state = "bg_spell_border_active_yellow" - sound = 'sound/magic/lightningbolt.ogg' + sound = 'sound/effects/magic/lightningbolt.ogg' school = SCHOOL_EVOCATION cooldown_time = 10 SECONDS cooldown_reduction_per_rank = 2 SECONDS diff --git a/code/modules/spells/spell_types/pointed/mind_transfer.dm b/code/modules/spells/spell_types/pointed/mind_transfer.dm index fa401c3b432f6..d779933b01acd 100644 --- a/code/modules/spells/spell_types/pointed/mind_transfer.dm +++ b/code/modules/spells/spell_types/pointed/mind_transfer.dm @@ -9,6 +9,7 @@ cooldown_reduction_per_rank = 10 SECONDS spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC|SPELL_REQUIRES_MIND|SPELL_CASTABLE_AS_BRAIN antimagic_flags = MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_PHASED|AB_CHECK_OPEN_TURF invocation = "GIN'YU CAPAN" invocation_type = INVOCATION_WHISPER @@ -137,7 +138,7 @@ // Only the caster and victim hear the sounds, // that way no one knows for sure if the swap happened - SEND_SOUND(caster, sound('sound/magic/mandswap.ogg')) - SEND_SOUND(to_swap, sound('sound/magic/mandswap.ogg')) + SEND_SOUND(caster, sound('sound/effects/magic/mandswap.ogg')) + SEND_SOUND(to_swap, sound('sound/effects/magic/mandswap.ogg')) return TRUE diff --git a/code/modules/spells/spell_types/pointed/swap.dm b/code/modules/spells/spell_types/pointed/swap.dm index 6b4a5e45e1437..884504efc8edc 100644 --- a/code/modules/spells/spell_types/pointed/swap.dm +++ b/code/modules/spells/spell_types/pointed/swap.dm @@ -82,12 +82,12 @@ do_teleport(second_target, owner.loc, no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC) do_teleport(cast_on, second_location, no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC) do_teleport(owner, target_location, no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC) - second_target.playsound_local(get_turf(second_target), 'sound/magic/swap.ogg', 50, 1) - cast_on.playsound_local(get_turf(cast_on), 'sound/magic/swap.ogg', 50, 1) - owner.playsound_local(get_turf(owner), 'sound/magic/swap.ogg', 50, 1) + second_target.playsound_local(get_turf(second_target), 'sound/effects/magic/swap.ogg', 50, 1) + cast_on.playsound_local(get_turf(cast_on), 'sound/effects/magic/swap.ogg', 50, 1) + owner.playsound_local(get_turf(owner), 'sound/effects/magic/swap.ogg', 50, 1) else do_teleport(cast_on, owner.loc, no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC) do_teleport(owner, target_location, no_effects = TRUE, channel = TELEPORT_CHANNEL_MAGIC) - cast_on.playsound_local(get_turf(cast_on), 'sound/magic/swap.ogg', 50, 1) - owner.playsound_local(get_turf(owner), 'sound/magic/swap.ogg', 50, 1) + cast_on.playsound_local(get_turf(cast_on), 'sound/effects/magic/swap.ogg', 50, 1) + owner.playsound_local(get_turf(owner), 'sound/effects/magic/swap.ogg', 50, 1) second_target = null diff --git a/code/modules/spells/spell_types/pointed/tie_shoes.dm b/code/modules/spells/spell_types/pointed/tie_shoes.dm index 5783717d0e72b..b8efafaf3ba92 100644 --- a/code/modules/spells/spell_types/pointed/tie_shoes.dm +++ b/code/modules/spells/spell_types/pointed/tie_shoes.dm @@ -63,7 +63,7 @@ cast_on.balloon_alert_to_viewers("magically tied!") else cast_on.balloon_alert(owner, "magically tied!") - playsound(cast_on, 'sound/magic/summonitems_generic.ogg', 50, TRUE) + playsound(cast_on, 'sound/effects/magic/summonitems_generic.ogg', 50, TRUE) return TRUE var/shoe_to_cast = /obj/item/clothing/shoes/sneakers/random @@ -86,7 +86,7 @@ return FALSE if(invocation_type != INVOCATION_NONE) - playsound(cast_on, 'sound/magic/summonitems_generic.ogg', 50, TRUE) + playsound(cast_on, 'sound/effects/magic/summonitems_generic.ogg', 50, TRUE) switch(shoes_to_tie.tied) if(SHOES_TIED) @@ -96,7 +96,7 @@ cast_on.balloon_alert(owner, "laced!") shoes_to_tie.can_be_tied = TRUE if(invocation_type != INVOCATION_NONE) - playsound(cast_on, 'sound/magic/summonitems_generic.ogg', 50, TRUE) + playsound(cast_on, 'sound/effects/magic/summonitems_generic.ogg', 50, TRUE) return TRUE else to_chat(owner, span_warning("[cast_on] is wearing laceless shoes!")) diff --git a/code/modules/spells/spell_types/projectile/juggernaut.dm b/code/modules/spells/spell_types/projectile/juggernaut.dm index 11a2cbb9a15f6..8d339298a3779 100644 --- a/code/modules/spells/spell_types/projectile/juggernaut.dm +++ b/code/modules/spells/spell_types/projectile/juggernaut.dm @@ -6,7 +6,7 @@ background_icon_state = "bg_demon" overlay_icon_state = "bg_demon_border" - sound = 'sound/weapons/resonator_blast.ogg' + sound = 'sound/items/weapons/resonator_blast.ogg' cooldown_time = 35 SECONDS spell_requirements = NONE diff --git a/code/modules/spells/spell_types/right_and_wrong.dm b/code/modules/spells/spell_types/right_and_wrong.dm index 90e64752f48bc..e8525f3aed8a1 100644 --- a/code/modules/spells/spell_types/right_and_wrong.dm +++ b/code/modules/spells/spell_types/right_and_wrong.dm @@ -125,7 +125,7 @@ GLOBAL_LIST_INIT(summoned_magic_objectives, list( var/obj/item/gun/spawned_gun = new gun_type(get_turf(to_equip)) if (istype(spawned_gun)) // The list may contain some non-gun type guns which do not have this proc spawned_gun.unlock() - playsound(get_turf(to_equip), 'sound/magic/summon_guns.ogg', 50, TRUE) + playsound(get_turf(to_equip), 'sound/effects/magic/summon_guns.ogg', 50, TRUE) var/in_hand = to_equip.put_in_hands(spawned_gun) // not always successful @@ -149,7 +149,7 @@ GLOBAL_LIST_INIT(summoned_magic_objectives, list( var/magic_type = prob(SPECIALIST_MAGIC_PROB) ? pick(GLOB.summoned_special_magic) : pick(GLOB.summoned_magic) var/obj/item/spawned_magic = new magic_type(get_turf(to_equip)) - playsound(get_turf(to_equip), 'sound/magic/summon_magic.ogg', 50, TRUE) + playsound(get_turf(to_equip), 'sound/effects/magic/summon_magic.ogg', 50, TRUE) var/in_hand = to_equip.put_in_hands(spawned_magic) diff --git a/code/modules/spells/spell_types/self/basic_heal.dm b/code/modules/spells/spell_types/self/basic_heal.dm index f68403ddeeb3f..d22b38cba8be8 100644 --- a/code/modules/spells/spell_types/self/basic_heal.dm +++ b/code/modules/spells/spell_types/self/basic_heal.dm @@ -3,7 +3,7 @@ name = "Lesser Heal" desc = "Heals a small amount of brute and burn damage to the caster." - sound = 'sound/magic/staff_healing.ogg' + sound = 'sound/effects/magic/staff_healing.ogg' school = SCHOOL_RESTORATION cooldown_time = 10 SECONDS cooldown_reduction_per_rank = 1.25 SECONDS diff --git a/code/modules/spells/spell_types/self/charge.dm b/code/modules/spells/spell_types/self/charge.dm index 87d7ae287d337..af345f8cb13b5 100644 --- a/code/modules/spells/spell_types/self/charge.dm +++ b/code/modules/spells/spell_types/self/charge.dm @@ -5,7 +5,7 @@ to grant magical power to a fellow magic user." button_icon_state = "charge" - sound = 'sound/magic/charge.ogg' + sound = 'sound/effects/magic/charge.ogg' school = SCHOOL_TRANSMUTATION cooldown_time = 60 SECONDS cooldown_reduction_per_rank = 5 SECONDS diff --git a/code/modules/spells/spell_types/self/disable_tech.dm b/code/modules/spells/spell_types/self/disable_tech.dm index 4a1ab1b0eda12..c357ef9a74963 100644 --- a/code/modules/spells/spell_types/self/disable_tech.dm +++ b/code/modules/spells/spell_types/self/disable_tech.dm @@ -2,7 +2,7 @@ name = "Emplosion" desc = "This spell causes an EMP in an area." button_icon_state = "emp" - sound = 'sound/weapons/zapbang.ogg' + sound = 'sound/items/weapons/zapbang.ogg' school = SCHOOL_EVOCATION @@ -18,7 +18,7 @@ /datum/action/cooldown/spell/emp/disable_tech name = "Disable Tech" desc = "This spell disables all weapons, cameras and most other technology in range." - sound = 'sound/magic/disable_tech.ogg' + sound = 'sound/effects/magic/disable_tech.ogg' cooldown_time = 40 SECONDS cooldown_reduction_per_rank = 5 SECONDS diff --git a/code/modules/spells/spell_types/self/forcewall.dm b/code/modules/spells/spell_types/self/forcewall.dm index 761860f4099f7..3bacb58e6a05b 100644 --- a/code/modules/spells/spell_types/self/forcewall.dm +++ b/code/modules/spells/spell_types/self/forcewall.dm @@ -3,7 +3,7 @@ desc = "Create a magical barrier that only you can pass through." button_icon_state = "shield" - sound = 'sound/magic/forcewall.ogg' + sound = 'sound/effects/magic/forcewall.ogg' school = SCHOOL_TRANSMUTATION cooldown_time = 10 SECONDS cooldown_reduction_per_rank = 1.25 SECONDS diff --git a/code/modules/spells/spell_types/self/mime_vow.dm b/code/modules/spells/spell_types/self/mime_vow.dm index d4e34880b534d..3d1c44dabd608 100644 --- a/code/modules/spells/spell_types/self/mime_vow.dm +++ b/code/modules/spells/spell_types/self/mime_vow.dm @@ -32,6 +32,6 @@ 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) + var/datum/job/mime/mime_job = SSjob.get_job(JOB_MIME) mime_job.total_positions += 1 qdel(src) diff --git a/code/modules/spells/spell_types/self/mutate.dm b/code/modules/spells/spell_types/self/mutate.dm index 7ebd9ab4d1bfe..cb976875decef 100644 --- a/code/modules/spells/spell_types/self/mutate.dm +++ b/code/modules/spells/spell_types/self/mutate.dm @@ -1,7 +1,7 @@ /// A spell type that adds mutations to the caster temporarily. /datum/action/cooldown/spell/apply_mutations button_icon_state = "mutate" - sound = 'sound/magic/mutate.ogg' + sound = 'sound/effects/magic/mutate.ogg' school = SCHOOL_TRANSMUTATION diff --git a/code/modules/spells/spell_types/self/rod_form.dm b/code/modules/spells/spell_types/self/rod_form.dm index 9989c4420c086..6f26ab167195f 100644 --- a/code/modules/spells/spell_types/self/rod_form.dm +++ b/code/modules/spells/spell_types/self/rod_form.dm @@ -138,8 +138,7 @@ our_wizard = WEAKREF(wizard) wizard.forceMove(src) - wizard.status_flags |= GODMODE - wizard.add_traits(list(TRAIT_MAGICALLY_PHASED, TRAIT_NO_TRANSFORM), REF(src)) + wizard.add_traits(list(TRAIT_GODMODE, TRAIT_MAGICALLY_PHASED, TRAIT_NO_TRANSFORM), REF(src)) /** * Eject our current wizard, removing them from the rod @@ -150,8 +149,7 @@ if(QDELETED(wizard)) return - wizard.status_flags &= ~GODMODE - wizard.remove_traits(list(TRAIT_MAGICALLY_PHASED, TRAIT_NO_TRANSFORM), REF(src)) + wizard.remove_traits(list(TRAIT_GODMODE, TRAIT_MAGICALLY_PHASED, TRAIT_NO_TRANSFORM), REF(src)) wizard.forceMove(get_turf(src)) our_wizard = null diff --git a/code/modules/spells/spell_types/self/sanguine_strike.dm b/code/modules/spells/spell_types/self/sanguine_strike.dm index 4c819a69690ab..64cb2a11d6a36 100644 --- a/code/modules/spells/spell_types/self/sanguine_strike.dm +++ b/code/modules/spells/spell_types/self/sanguine_strike.dm @@ -9,7 +9,7 @@ desc = "Enchants your next weapon strike to deal more damage, heal you for damage dealt, and refill blood." button_icon_state = "charge" - sound = 'sound/magic/charge.ogg' + sound = 'sound/effects/magic/charge.ogg' // makes this spell not take blood from splattercasting school = SCHOOL_SANGUINE cooldown_time = 60 SECONDS @@ -67,7 +67,7 @@ if(living_target.blood_volume < BLOOD_VOLUME_SURVIVE) return playsound(target, 'sound/effects/wounds/crackandbleed.ogg', 100) - playsound(target, 'sound/magic/charge.ogg', 100) + playsound(target, 'sound/effects/magic/charge.ogg', 100) var/attack_direction = get_dir(user, living_target) if(iscarbon(living_target)) var/mob/living/carbon/carbon_target = living_target diff --git a/code/modules/spells/spell_types/self/summonitem.dm b/code/modules/spells/spell_types/self/summonitem.dm index ab99f35271d3c..4165781c3668f 100644 --- a/code/modules/spells/spell_types/self/summonitem.dm +++ b/code/modules/spells/spell_types/self/summonitem.dm @@ -168,7 +168,7 @@ 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) + playsound(get_turf(item_to_retrieve), 'sound/effects/magic/summonitems_generic.ogg', 50, TRUE) /datum/action/cooldown/spell/summonitem/abductor name = "Baton Recall" diff --git a/code/modules/spells/spell_types/self/voice_of_god.dm b/code/modules/spells/spell_types/self/voice_of_god.dm index b1efaabd2a826..3db16f400811b 100644 --- a/code/modules/spells/spell_types/self/voice_of_god.dm +++ b/code/modules/spells/spell_types/self/voice_of_god.dm @@ -3,7 +3,7 @@ desc = "Speak with an incredibly compelling voice, forcing listeners to obey your commands." button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "voice_of_god" - sound = 'sound/magic/clockwork/invoke_general.ogg' + sound = 'sound/effects/magic/clockwork/invoke_general.ogg' cooldown_time = 120 SECONDS // Varies depending on command invocation = "" // Handled by the VOICE OF GOD itself @@ -25,7 +25,7 @@ if(. & SPELL_CANCEL_CAST) return - command = tgui_input_text(cast_on, "Speak with the Voice of God", "Command") + command = tgui_input_text(cast_on, "Speak with the Voice of God", "Command", max_length = MAX_MESSAGE_LEN) if(QDELETED(src) || QDELETED(cast_on) || !can_cast_spell()) return . | SPELL_CANCEL_CAST if(!command) diff --git a/code/modules/spells/spell_types/shapeshift/_shape_status.dm b/code/modules/spells/spell_types/shapeshift/_shape_status.dm index cffd9804ea588..2f8d53eeac203 100644 --- a/code/modules/spells/spell_types/shapeshift/_shape_status.dm +++ b/code/modules/spells/spell_types/shapeshift/_shape_status.dm @@ -174,7 +174,9 @@ var/damage_to_apply = owner.maxHealth * (caster_mob.get_total_damage() / caster_mob.maxHealth) owner.apply_damage(damage_to_apply, source_spell.convert_damage_type, forced = TRUE, spread_damage = TRUE, wound_bonus = CANT_WOUND) - owner.blood_volume = caster_mob.blood_volume + // Only transfer blood if both mobs are supposed to have a blood volume + if (initial(owner.blood_volume) > 0 && initial(caster_mob.blood_volume) > 0 && !HAS_TRAIT(owner, TRAIT_NOBLOOD) && !HAS_TRAIT(caster_mob, TRAIT_NOBLOOD)) + owner.blood_volume = caster_mob.blood_volume for(var/datum/action/bodybound_action as anything in caster_mob.actions) if(bodybound_action.target != caster_mob) @@ -212,8 +214,9 @@ caster_mob.fully_heal(HEAL_DAMAGE) // Remove all of our damage before setting our health to a proportion of the former transformed mob's health var/damage_to_apply = caster_mob.maxHealth * (owner.get_total_damage() / owner.maxHealth) caster_mob.apply_damage(damage_to_apply, source_spell.convert_damage_type, forced = TRUE, spread_damage = TRUE, wound_bonus = CANT_WOUND) - - caster_mob.blood_volume = owner.blood_volume + // Only transfer blood if both mobs are supposed to have a blood volume + if (initial(owner.blood_volume) > 0 && initial(caster_mob.blood_volume) > 0 && !HAS_TRAIT(owner, TRAIT_NOBLOOD) && !HAS_TRAIT(caster_mob, TRAIT_NOBLOOD)) + caster_mob.blood_volume = owner.blood_volume /datum/status_effect/shapechange_mob/from_spell/on_shape_death(datum/source, gibbed) var/datum/action/cooldown/spell/shapeshift/source_spell = source_weakref.resolve() diff --git a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm index 59c9ffdde3b0b..246247fff42f1 100644 --- a/code/modules/spells/spell_types/shapeshift/_shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift/_shapeshift.dm @@ -126,7 +126,7 @@ for(var/obj/machinery/atmospherics/components/unary/possible_vent in range(10, get_turf(cast_on))) if(length(possible_vent.parents) && possible_vent.parents[1] == our_pipeline) new gib_type(get_turf(possible_vent)) - playsound(possible_vent, 'sound/effects/reee.ogg', 75, TRUE) + playsound(possible_vent, 'sound/mobs/non-humanoids/frog/reee.ogg', 75, TRUE) 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 @@ -140,8 +140,8 @@ return FALSE if(QDELETED(caster)) return FALSE + return !caster.incapacitated - return !caster.incapacitated() /// Actually does the shapeshift, for the caster. /datum/action/cooldown/spell/shapeshift/proc/do_shapeshift(mob/living/caster) diff --git a/code/modules/spells/spell_types/teleport/_teleport.dm b/code/modules/spells/spell_types/teleport/_teleport.dm index fd6e02cdfb330..9262d21f3e29e 100644 --- a/code/modules/spells/spell_types/teleport/_teleport.dm +++ b/code/modules/spells/spell_types/teleport/_teleport.dm @@ -5,7 +5,7 @@ * Teleports the caster to a turf selected by get_destinations(). */ /datum/action/cooldown/spell/teleport - sound = 'sound/weapons/zapbang.ogg' + sound = 'sound/items/weapons/zapbang.ogg' school = SCHOOL_TRANSLOCATION @@ -16,7 +16,7 @@ /// A list of flags related to determining if our destination target is valid or not. var/destination_flags = NONE /// The sound played on arrival, after the teleport. - var/post_teleport_sound = 'sound/weapons/zapbang.ogg' + var/post_teleport_sound = 'sound/items/weapons/zapbang.ogg' /datum/action/cooldown/spell/teleport/cast(atom/cast_on) . = ..() diff --git a/code/modules/spells/spell_types/teleport/blink.dm b/code/modules/spells/spell_types/teleport/blink.dm index 04c17a0e77523..18531949a5312 100644 --- a/code/modules/spells/spell_types/teleport/blink.dm +++ b/code/modules/spells/spell_types/teleport/blink.dm @@ -2,7 +2,7 @@ name = "Blink" desc = "This spell randomly teleports you a short distance." button_icon_state = "blink" - sound = 'sound/magic/blink.ogg' + sound = 'sound/effects/magic/blink.ogg' school = SCHOOL_TRANSLOCATION cooldown_time = 2 SECONDS @@ -16,4 +16,4 @@ inner_tele_radius = 0 outer_tele_radius = 6 - post_teleport_sound = 'sound/magic/blink.ogg' + post_teleport_sound = 'sound/effects/magic/blink.ogg' diff --git a/code/modules/spells/spell_types/teleport/teleport.dm b/code/modules/spells/spell_types/teleport/teleport.dm index d486157204283..eaf7110980815 100644 --- a/code/modules/spells/spell_types/teleport/teleport.dm +++ b/code/modules/spells/spell_types/teleport/teleport.dm @@ -3,7 +3,7 @@ name = "Teleport" desc = "This spell teleports you to an area of your selection." button_icon_state = "teleport" - sound = 'sound/magic/teleport_diss.ogg' + sound = 'sound/effects/magic/teleport_diss.ogg' school = SCHOOL_TRANSLOCATION cooldown_time = 1 MINUTES @@ -16,7 +16,7 @@ smoke_type = /datum/effect_system/fluid_spread/smoke smoke_amt = 2 - post_teleport_sound = 'sound/magic/teleport_app.ogg' + post_teleport_sound = 'sound/effects/magic/teleport_app.ogg' // Santa's teleport, themed as such /datum/action/cooldown/spell/teleport/area_teleport/wizard/santa @@ -48,5 +48,5 @@ return var/mob/living/carbon/caster = cast_on - if(caster.incapacitated() || !caster.is_holding(target)) + if(caster.incapacitated || !caster.is_holding(target)) return . | SPELL_CANCEL_CAST diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index 5f0bc24255921..24eefe04d1020 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -19,8 +19,8 @@ * (generally) inadvisable unless you know what you're doing */ /datum/action/cooldown/spell/touch - check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED|AB_CHECK_INCAPACITATED - sound = 'sound/items/welder.ogg' + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED + sound = 'sound/items/tools/welder.ogg' invocation = "High Five!" invocation_type = INVOCATION_SHOUT @@ -170,10 +170,9 @@ SHOULD_NOT_OVERRIDE(TRUE) // DEFINITELY don't put effects here, put them in cast_on_hand_hit if(!can_hit_with_hand(target, caster)) - return + return NONE - INVOKE_ASYNC(src, PROC_REF(do_hand_hit), source, target, caster) - return ITEM_INTERACT_SUCCESS + return do_hand_hit(source, target, caster) /** * Signal proc for [COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY] from our attached hand. @@ -185,10 +184,9 @@ SHOULD_NOT_OVERRIDE(TRUE) if(!can_hit_with_hand(target, caster)) - return + return NONE - INVOKE_ASYNC(src, PROC_REF(do_secondary_hand_hit), source, target, caster) - return ITEM_INTERACT_SUCCESS + return do_secondary_hand_hit(source, target, caster) /// Checks if the passed victim can be cast on by the caster. /datum/action/cooldown/spell/touch/proc/can_hit_with_hand(atom/victim, mob/living/caster) @@ -220,14 +218,15 @@ on_antimagic_triggered(hand, victim, caster) else if(!cast_on_hand_hit(hand, victim, caster)) - return + return NONE log_combat(caster, victim, "cast the touch spell [name] on", hand) - spell_feedback(caster) + INVOKE_ASYNC(src, PROC_REF(spell_feedback), caster) caster.do_attack_animation(victim) caster.changeNext_move(CLICK_CD_MELEE) victim.add_fingerprint(caster) remove_hand(caster) + return ITEM_INTERACT_SUCCESS /** * Calls do_secondary_hand_hit() from the caster onto the victim. @@ -243,11 +242,12 @@ // Continue will remove the hand here and stop if(SECONDARY_ATTACK_CONTINUE_CHAIN) log_combat(caster, victim, "cast the touch spell [name] on", hand, "(secondary / alt cast)") - spell_feedback(caster) + INVOKE_ASYNC(src, PROC_REF(spell_feedback), caster) caster.do_attack_animation(victim) caster.changeNext_move(CLICK_CD_MELEE) victim.add_fingerprint(caster) remove_hand(caster) + return ITEM_INTERACT_SUCCESS // Call normal will call the normal cast proc if(SECONDARY_ATTACK_CALL_NORMAL) @@ -255,7 +255,7 @@ // Cancel chain will do nothing, if(SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return + return NONE /** * The actual process of casting the spell on the victim from the caster. diff --git a/code/modules/spells/spell_types/touch/duffelbag_curse.dm b/code/modules/spells/spell_types/touch/duffelbag_curse.dm index f5ac8a6961deb..c4882ba5365f4 100644 --- a/code/modules/spells/spell_types/touch/duffelbag_curse.dm +++ b/code/modules/spells/spell_types/touch/duffelbag_curse.dm @@ -3,7 +3,7 @@ name = "Bestow Cursed Duffel Bag" desc = "A spell that summons a duffel bag demon on the target, slowing them down and slowly eating them." button_icon_state = "duffelbag_curse" - sound = 'sound/magic/mm_hit.ogg' + sound = 'sound/effects/magic/mm_hit.ogg' school = SCHOOL_CONJURATION cooldown_time = 6 SECONDS diff --git a/code/modules/spells/spell_types/touch/flesh_to_stone.dm b/code/modules/spells/spell_types/touch/flesh_to_stone.dm index abc6066084236..dd4f622427f74 100644 --- a/code/modules/spells/spell_types/touch/flesh_to_stone.dm +++ b/code/modules/spells/spell_types/touch/flesh_to_stone.dm @@ -2,7 +2,7 @@ name = "Flesh to Stone" desc = "This spell charges your hand with the power to turn victims into inert statues for a long period of time." button_icon_state = "statue" - sound = 'sound/magic/fleshtostone.ogg' + sound = 'sound/effects/magic/fleshtostone.ogg' school = SCHOOL_TRANSMUTATION cooldown_time = 1 MINUTES diff --git a/code/modules/spells/spell_types/touch/smite.dm b/code/modules/spells/spell_types/touch/smite.dm index 7bef97c8a6582..5bf90dff443a4 100644 --- a/code/modules/spells/spell_types/touch/smite.dm +++ b/code/modules/spells/spell_types/touch/smite.dm @@ -3,7 +3,7 @@ desc = "This spell charges your hand with an unholy energy \ that can be used to cause a touched victim to violently explode." button_icon_state = "gib" - sound = 'sound/magic/disintegrate.ogg' + sound = 'sound/effects/magic/disintegrate.ogg' school = SCHOOL_EVOCATION cooldown_time = 1 MINUTES @@ -59,7 +59,7 @@ inhand_icon_state = "disintegrate" /obj/item/melee/touch_attack/smite/suicide_act(mob/living/user) - + user.visible_message(span_suicide("[user] spreads [user.p_their()] arms apart, lightning arcing between them! It looks like [user.p_theyre()] going out with a bang!")) user.say("SHIA KAZING!!", forced = "smite suicide") do_sparks(4, FALSE, get_turf(user)) diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 60799f546c80a..60d35a6415e3d 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -301,7 +301,7 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) data["target"] = get_target_name() return data -/obj/machinery/computer/bsa_control/ui_act(action, params) +/obj/machinery/computer/bsa_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -387,7 +387,6 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) QDEL_NULL(centerpiece.back_ref) qdel(centerpiece) return cannon - /obj/machinery/computer/bsa_control/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) return FALSE diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 6c2661bbe2237..5a14c0e16b66d 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -164,7 +164,7 @@ data["choiceB"] = initial(mutation2.name) return data -/obj/machinery/dna_vault/ui_act(action, params) +/obj/machinery/dna_vault/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm index 0bb9566306d64..315e7d54e9f12 100644 --- a/code/modules/surgery/advanced/brainwashing.dm +++ b/code/modules/surgery/advanced/brainwashing.dm @@ -5,6 +5,10 @@ special_desc_requirement = EXAMINE_CHECK_JOB // SKYRAT EDIT special_desc_jobs = list("Medical Doctor, Chief Medical Officer, Roboticist") // SKYRAT EDIT 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." + surgeries = list( + /datum/surgery/advanced/brainwashing, + /datum/surgery/advanced/brainwashing/mechanic, + ) /datum/surgery/advanced/brainwashing name = "Brainwashing" @@ -48,9 +52,9 @@ /obj/item/stack/package_wrap = 35, /obj/item/stack/cable_coil = 15) time = 200 - preop_sound = 'sound/surgery/hemostat1.ogg' - success_sound = 'sound/surgery/hemostat1.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/hemostat1.ogg' + success_sound = 'sound/items/handling/surgery/hemostat1.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' var/objective /datum/surgery_step/brainwash/mechanic @@ -65,7 +69,7 @@ success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' /datum/surgery_step/brainwash/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - objective = tgui_input_text(user, "Choose the objective to imprint on your victim's brain", "Brainwashing") + objective = tgui_input_text(user, "Choose the objective to imprint on your victim's brain", "Brainwashing", max_length = MAX_MESSAGE_LEN) if(!objective) return SURGERY_STEP_FAIL display_results( diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm index 1c82052fe98b1..5c528acae52fc 100644 --- a/code/modules/surgery/advanced/lobotomy.dm +++ b/code/modules/surgery/advanced/lobotomy.dm @@ -43,9 +43,9 @@ /obj/item = 20, ) time = 100 - preop_sound = 'sound/surgery/scalpel1.ogg' - success_sound = 'sound/surgery/scalpel2.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/scalpel1.ogg' + success_sound = 'sound/items/handling/surgery/scalpel2.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' surgery_effects_mood = TRUE /datum/surgery_step/lobotomize/mechanic diff --git a/code/modules/surgery/advanced/pacification.dm b/code/modules/surgery/advanced/pacification.dm index 6db290e1df715..6c2d990cb9624 100644 --- a/code/modules/surgery/advanced/pacification.dm +++ b/code/modules/surgery/advanced/pacification.dm @@ -38,9 +38,9 @@ /obj/item/pen = 15, ) time = 40 - preop_sound = 'sound/surgery/hemostat1.ogg' - success_sound = 'sound/surgery/hemostat1.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/hemostat1.ogg' + success_sound = 'sound/items/handling/surgery/hemostat1.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' /datum/surgery_step/pacify/mechanic name = "delete aggression programming (multitool)" diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index ab11ce0c20fad..90e902c3d909c 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -52,8 +52,8 @@ /obj/item/knife/butcher = 25, ) time = 64 - preop_sound = 'sound/surgery/scalpel1.ogg' - success_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/scalpel1.ogg' + success_sound = 'sound/items/handling/surgery/organ2.ogg' surgery_effects_mood = TRUE /datum/surgery_step/sever_limb/mechanic @@ -66,8 +66,8 @@ TOOL_SAW = 50, ) time = 20 //WAIT I NEED THAT!! - preop_sound = 'sound/items/ratchet.ogg' - preop_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' + preop_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/sever_limb/peg name = "detach limb (circular saw)" @@ -79,8 +79,8 @@ TOOL_SCALPEL = 25, ) time = 30 - preop_sound = 'sound/surgery/saw.ogg' - success_sound = 'sound/items/wood_drop.ogg' + preop_sound = 'sound/items/handling/surgery/saw.ogg' + success_sound = 'sound/items/handling/materials/wood_drop.ogg' /datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index ff25597e82483..5bdbc3dabfafa 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -174,8 +174,8 @@ /// 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 - var/sound/unarmed_attack_sound = 'sound/weapons/punch1.ogg' - var/sound/unarmed_miss_sound = 'sound/weapons/punchmiss.ogg' + var/sound/unarmed_attack_sound = 'sound/items/weapons/punch1.ogg' + var/sound/unarmed_miss_sound = 'sound/items/weapons/punchmiss.ogg' ///Lowest possible punch damage this bodypart can give. If this is set to 0, unarmed attacks will always miss. var/unarmed_damage_low = 1 ///Highest possible punch damage this bodypart can ive. @@ -404,7 +404,7 @@ if(!contents.len) to_chat(user, span_warning("There is nothing left inside [src]!")) return - playsound(loc, 'sound/weapons/slice.ogg', 50, TRUE, -1) + playsound(loc, 'sound/items/weapons/slice.ogg', 50, TRUE, -1) user.visible_message(span_warning("[user] begins to cut open [src]."),\ span_notice("You begin to cut open [src]...")) if(do_after(user, 5.4 SECONDS, target = src)) @@ -465,11 +465,12 @@ * required_bodytype - A bodytype flag requirement to get this damage (ex: BODYTYPE_ORGANIC) * wound_bonus - Additional bonus chance to get a wound. * bare_wound_bonus - Additional bonus chance to get a wound if the bodypart is naked. + * wound_clothing - If this should damage clothing. * sharpness - Flag on whether the attack is edged or pointy * attack_direction - The direction the bodypart is attacked from, used to send blood flying in the opposite direction. * damage_source - The source of damage, typically a weapon. */ -/obj/item/bodypart/proc/receive_damage(brute = 0, burn = 0, blocked = 0, updating_health = TRUE, forced = FALSE, required_bodytype = null, wound_bonus = 0, bare_wound_bonus = 0, sharpness = NONE, attack_direction = null, damage_source) +/obj/item/bodypart/proc/receive_damage(brute = 0, burn = 0, blocked = 0, updating_health = TRUE, forced = FALSE, required_bodytype = null, wound_bonus = 0, bare_wound_bonus = 0, sharpness = NONE, attack_direction = null, damage_source, wound_clothing = TRUE) SHOULD_CALL_PARENT(TRUE) var/hit_percent = forced ? 1 : (100-blocked)/100 @@ -477,7 +478,7 @@ return FALSE if (!forced) if(!isnull(owner)) - if (owner.status_flags & GODMODE) + if (HAS_TRAIT(owner, TRAIT_GODMODE)) return FALSE if (SEND_SIGNAL(owner, COMSIG_CARBON_LIMB_DAMAGED, src, brute, burn) & COMPONENT_PREVENT_LIMB_DAMAGE) return FALSE @@ -546,17 +547,17 @@ //SKYRAT 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) + /* if(wounding_dmg < DAMAGED_BODYPART_BONUS_WOUNDING_BONUS) // BUBBER EDIT REMOVAL var/damaged_percent = (brute_dam + burn_dam) / max_damage if(damaged_percent > DAMAGED_BODYPART_BONUS_WOUNDING_THRESHOLD) damaged_percent = DAMAGED_BODYPART_BONUS_WOUNDING_THRESHOLD wounding_dmg = min(DAMAGED_BODYPART_BONUS_WOUNDING_BONUS, wounding_dmg + (damaged_percent * DAMAGED_BODYPART_BONUS_WOUNDING_COEFF)) - + */// BUBBER EDIT REMOVAL 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 - check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, attack_direction, damage_source = damage_source) + check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, attack_direction, damage_source = damage_source, wound_clothing = wound_clothing) for(var/datum/wound/iter_wound as anything in wounds) iter_wound.receive_damage(wounding_type, wounding_dmg, wound_bonus, damage_source) @@ -991,7 +992,6 @@ aux_zone_markings = LAZYCOPY(owner_species.body_markings[aux_zone]) markings_alpha = owner_species.markings_alpha // SKYRAT EDIT END - recolor_external_organs() return TRUE diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index b118e28f266dd..74bad64085fd4 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -9,9 +9,7 @@ if(!owner || (bodypart_flags & BODYPART_UNREMOVABLE)) return FALSE var/mob/living/carbon/limb_owner = owner - if(limb_owner.status_flags & GODMODE) - return FALSE - if(HAS_TRAIT(limb_owner, TRAIT_NODISMEMBER)) + if(HAS_TRAIT(limb_owner, TRAIT_GODMODE) || HAS_TRAIT(limb_owner, TRAIT_NODISMEMBER)) return FALSE var/obj/item/bodypart/affecting = limb_owner.get_bodypart(BODY_ZONE_CHEST) @@ -276,7 +274,7 @@ return FALSE var/obj/item/bodypart/chest/mob_chest = new_limb_owner.get_bodypart(BODY_ZONE_CHEST) - if(mob_chest && !(mob_chest.acceptable_bodytype & bodytype) && !(mob_chest.acceptable_bodyshape & bodyshape) && !(mob_chest.acceptable_bodyshape & bodyshape) && !special) + if(mob_chest && !(mob_chest.acceptable_bodytype & bodytype) && !(mob_chest.acceptable_bodyshape & bodyshape) && !special) return FALSE return TRUE diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 00c21f13738cd..6f166e5a3e0a6 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -19,8 +19,8 @@ is_dimorphic = TRUE unarmed_attack_verbs = list("bite", "chomp") unarmed_attack_effect = ATTACK_EFFECT_BITE - unarmed_attack_sound = 'sound/weapons/bite.ogg' - unarmed_miss_sound = 'sound/weapons/bite.ogg' + unarmed_attack_sound = 'sound/items/weapons/bite.ogg' + unarmed_miss_sound = 'sound/items/weapons/bite.ogg' unarmed_damage_low = 1 // Yeah, biteing is pretty weak, blame the monkey super-nerf unarmed_damage_high = 3 unarmed_effectiveness = 0 @@ -196,10 +196,6 @@ worn_face_offset.apply_offset(eye_right) // SKYRAT EDIT ADDITION START - Customization (Emissives and synths) - if(eyes.eye_icon_state == "None") - eye_left.alpha = 0 - eye_right.alpha = 0 - if (eyes.is_emissive) // Because it was done all weird up there. var/mutable_appearance/emissive_left = emissive_appearance(eye_left.icon, eye_left.icon_state, src, -BODY_LAYER, eye_left.alpha) var/mutable_appearance/emissive_right = emissive_appearance(eye_right.icon, eye_right.icon_state, src, -BODY_LAYER, eye_right.alpha) diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index dadaee6ccb266..b76aa2d1ef28e 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -124,8 +124,8 @@ if (severity == EMP_HEAVY) knockdown_time *= 2 owner.Knockdown(knockdown_time) - if(owner.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB)) // So the message isn't duplicated. If they were stunned beforehand by something else, then the message not showing makes more sense anyways. - return FALSE + if(INCAPACITATED_IGNORING(owner, INCAPABLE_RESTRAINTS|INCAPABLE_GRAB)) // So the message isn't duplicated. If they were stunned beforehand by something else, then the message not showing makes more sense anyways. + return to_chat(owner, span_danger("As your [plaintext_zone] unexpectedly malfunctions, it causes you to fall to the ground!")) return @@ -173,8 +173,8 @@ if (severity == EMP_HEAVY) knockdown_time *= 2 owner.Knockdown(knockdown_time) - if(owner.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB)) // So the message isn't duplicated. If they were stunned beforehand by something else, then the message not showing makes more sense anyways. - return FALSE + if(INCAPACITATED_IGNORING(owner, INCAPABLE_RESTRAINTS|INCAPABLE_GRAB)) // So the message isn't duplicated. If they were stunned beforehand by something else, then the message not showing makes more sense anyways. + return to_chat(owner, span_danger("As your [plaintext_zone] unexpectedly malfunctions, it causes you to fall to the ground!")) return diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm index d97b00c58af68..756cda32fa327 100644 --- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm @@ -4,8 +4,8 @@ is_dimorphic = FALSE dmg_overlay_type = null attack_type = BURN // bish buzz - unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' - unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN @@ -39,8 +39,8 @@ attack_type = BURN //burn bish unarmed_attack_verbs = list("burn", "sear") grappled_attack_verb = "scorch" - unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' - unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage /obj/item/bodypart/arm/left/ethereal/update_limb(dropping_limb, is_creating) @@ -57,8 +57,8 @@ attack_type = BURN // bish buzz unarmed_attack_verbs = list("burn", "sear") grappled_attack_verb = "scorch" - unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' - unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage /obj/item/bodypart/arm/right/ethereal/update_limb(dropping_limb, is_creating) @@ -73,8 +73,8 @@ limb_id = SPECIES_ETHEREAL dmg_overlay_type = null attack_type = BURN // bish buzz - unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' - unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage /obj/item/bodypart/leg/left/ethereal/update_limb(dropping_limb, is_creating) @@ -89,8 +89,8 @@ limb_id = SPECIES_ETHEREAL dmg_overlay_type = null attack_type = BURN // bish buzz - unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' - unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/items/weapons/etherealmiss.ogg' brute_modifier = 1.25 //ethereal are weak to brute damage /obj/item/bodypart/leg/right/ethereal/update_limb(dropping_limb, is_creating) diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index 7e7f21073a999..00d71efd840e1 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -21,8 +21,8 @@ unarmed_attack_verbs = list("slash", "scratch", "claw") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW - unarmed_attack_sound = 'sound/weapons/slash.ogg' - unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' /obj/item/bodypart/arm/right/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' @@ -30,8 +30,8 @@ unarmed_attack_verbs = list("slash", "scratch", "claw") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW - unarmed_attack_sound = 'sound/weapons/slash.ogg' - unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' /obj/item/bodypart/arm/left/lizard/ashwalker bodypart_traits = list(TRAIT_CHUNKYFINGERS) @@ -56,24 +56,13 @@ /obj/item/bodypart/leg/left/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() - if(ishuman(owner)) - var/mob/living/carbon/human/human_owner = owner - var/obj/item/clothing/shoes/worn_shoes = human_owner.get_item_by_slot(ITEM_SLOT_FEET) - var/uniform_compatible = FALSE - var/suit_compatible = FALSE - var/shoes_compatible = FALSE - if(!(human_owner.w_uniform) || (human_owner.w_uniform.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) //Checks uniform compatibility - uniform_compatible = TRUE - if((!human_owner.wear_suit) || (human_owner.wear_suit.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON)) || !(human_owner.wear_suit.body_parts_covered & LEGS)) //Checks suit compatability - suit_compatible = TRUE - if((worn_shoes == null) || (worn_shoes.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) - shoes_compatible = TRUE - - if((uniform_compatible && suit_compatible && shoes_compatible) || (suit_compatible && shoes_compatible && human_owner.wear_suit?.flags_inv & HIDEJUMPSUIT)) //If the uniform is hidden, it doesnt matter if its compatible - limb_id = BODYPART_ID_DIGITIGRADE - - else - limb_id = SPECIES_LIZARD + var/old_id = limb_id + limb_id = owner?.is_digitigrade_squished() ? SPECIES_LIZARD : BODYPART_ID_DIGITIGRADE + if(old_id != limb_id) + // Something unsquished / squished us so we need to go through and update everything that is affected + for(var/obj/item/thing as anything in owner?.get_equipped_items()) + if(thing.supports_variations_flags & DIGITIGRADE_VARIATIONS) + thing.update_slot_icon() /obj/item/bodypart/leg/right/digitigrade icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' @@ -83,22 +72,11 @@ /obj/item/bodypart/leg/right/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() - if(ishuman(owner)) - var/mob/living/carbon/human/human_owner = owner - var/obj/item/clothing/shoes/worn_shoes = human_owner.get_item_by_slot(ITEM_SLOT_FEET) - var/uniform_compatible = FALSE - var/suit_compatible = FALSE - var/shoes_compatible = FALSE - if(!(human_owner.w_uniform) || (human_owner.w_uniform.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) //Checks uniform compatibility - uniform_compatible = TRUE - if((!human_owner.wear_suit) || (human_owner.wear_suit.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON)) || !(human_owner.wear_suit.body_parts_covered & LEGS)) //Checks suit compatability - suit_compatible = TRUE - if((worn_shoes == null) || (worn_shoes.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) - shoes_compatible = TRUE - - if((uniform_compatible && suit_compatible && shoes_compatible) || (suit_compatible && shoes_compatible && human_owner.wear_suit?.flags_inv & HIDEJUMPSUIT)) //If the uniform is hidden, it doesnt matter if its compatible - limb_id = BODYPART_ID_DIGITIGRADE - - else - limb_id = SPECIES_LIZARD + var/old_id = limb_id + limb_id = owner?.is_digitigrade_squished() ? SPECIES_LIZARD : BODYPART_ID_DIGITIGRADE + if(old_id != limb_id) + // Something unsquished / squished us so we need to go through and update everything that is affected + for(var/obj/item/thing as anything in owner?.get_equipped_items()) + if(thing.supports_variations_flags & DIGITIGRADE_VARIATIONS) + thing.update_slot_icon() */ diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 85f25dd7149f1..01b9b70565b55 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -226,8 +226,8 @@ unarmed_attack_verbs = list("slash", "lash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW - unarmed_attack_sound = 'sound/weapons/slice.ogg' - unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/slice.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' burn_modifier = 1.25 /obj/item/bodypart/arm/right/pod @@ -235,8 +235,8 @@ unarmed_attack_verbs = list("slash", "lash") grappled_attack_verb = "lacerate" unarmed_attack_effect = ATTACK_EFFECT_CLAW - unarmed_attack_sound = 'sound/weapons/slice.ogg' - unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/slice.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' burn_modifier = 1.25 /obj/item/bodypart/leg/left/pod diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm index c960d3b7a7bcf..5586ef3b6b5e7 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -32,8 +32,8 @@ unarmed_attack_verbs = list("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' + unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' /obj/item/bodypart/arm/right/moth icon = 'icons/mob/human/species/moth/bodyparts.dmi' @@ -44,8 +44,8 @@ unarmed_attack_verbs = list("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' + unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' /obj/item/bodypart/leg/left/moth icon = 'icons/mob/human/species/moth/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/wounds.dm b/code/modules/surgery/bodyparts/wounds.dm index 8d47b0704467d..ab1e1320f7f5b 100644 --- a/code/modules/surgery/bodyparts/wounds.dm +++ b/code/modules/surgery/bodyparts/wounds.dm @@ -1,8 +1,8 @@ /// Allows us to roll for and apply a wound without actually dealing damage. Used for aggregate wounding power with pellet clouds -/obj/item/bodypart/proc/painless_wound_roll(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, sharpness=NONE) +/obj/item/bodypart/proc/painless_wound_roll(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, sharpness=NONE, wound_clothing) SHOULD_CALL_PARENT(TRUE) - if(!owner || wounding_dmg <= WOUND_MINIMUM_DAMAGE || wound_bonus == CANT_WOUND || (owner.status_flags & GODMODE)) + if(!owner || wounding_dmg <= WOUND_MINIMUM_DAMAGE || wound_bonus == CANT_WOUND || HAS_TRAIT(owner, TRAIT_GODMODE)) return var/mangled_state = get_mangled_state() @@ -34,7 +34,7 @@ wounding_type = WOUND_BLUNT if ((dismemberable_by_wound() || dismemberable_by_total_damage()) && try_dismember(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus)) return - return check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus) + return check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, wound_clothing) /** * check_wounding() is where we handle rolling for, selecting, and applying a wound if we meet the criteria @@ -47,12 +47,13 @@ * * damage- How much damage is tied to this attack, since wounding potential scales with damage in an attack (see: WOUND_DAMAGE_EXPONENT) * * wound_bonus- The wound_bonus of an attack * * bare_wound_bonus- The bare_wound_bonus of an attack + * * wound_clothing- If this should damage clothing. */ -/obj/item/bodypart/proc/check_wounding(woundtype, damage, wound_bonus, bare_wound_bonus, attack_direction, damage_source) +/obj/item/bodypart/proc/check_wounding(woundtype, damage, wound_bonus, bare_wound_bonus, attack_direction, damage_source, wound_clothing) SHOULD_CALL_PARENT(TRUE) RETURN_TYPE(/datum/wound) - if(HAS_TRAIT(owner, TRAIT_NEVER_WOUNDED) || (owner.status_flags & GODMODE)) + if(HAS_TRAIT(owner, TRAIT_NEVER_WOUNDED) || HAS_TRAIT(owner, TRAIT_GODMODE)) return // note that these are fed into an exponent, so these are magnified @@ -72,7 +73,7 @@ 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) + injury_roll += check_woundings_mods(woundtype, damage, wound_bonus, bare_wound_bonus, wound_clothing) var/list/series_wounding_mods = check_series_wounding_mods() if(damage_source && injury_roll > WOUND_DISMEMBER_OUTRIGHT_THRESH && prob(get_damage() / max_damage * 100) && can_dismember()) //BUBBERSTATION CHANGE: You can only dismember with melee weapons. @@ -240,7 +241,7 @@ * Arguments: * * It's the same ones on [/obj/item/bodypart/proc/receive_damage] */ -/obj/item/bodypart/proc/check_woundings_mods(wounding_type, damage, wound_bonus, bare_wound_bonus) +/obj/item/bodypart/proc/check_woundings_mods(wounding_type, damage, wound_bonus, bare_wound_bonus, wound_clothing) SHOULD_CALL_PARENT(TRUE) var/armor_ablation = 0 @@ -252,10 +253,12 @@ for(var/obj/item/clothing/clothes as anything in clothing) // unlike normal armor checks, we tabluate these piece-by-piece manually so we can also pass on appropriate damage the clothing's limbs if necessary armor_ablation += clothes.get_armor_rating(WOUND) - if(wounding_type == WOUND_SLASH) - clothes.take_damage_zone(body_zone, damage, BRUTE) - else if(wounding_type == WOUND_BURN && damage >= 10) // lazy way to block freezing from shredding clothes without adding another var onto apply_damage() - clothes.take_damage_zone(body_zone, damage, BURN) + // Should attack also cause damage to the clothes? + if (wound_clothing) + if(wounding_type == WOUND_SLASH) + clothes.take_damage_zone(body_zone, damage, BRUTE) + else if(wounding_type == WOUND_BURN) + clothes.take_damage_zone(body_zone, damage, BURN) if(!armor_ablation) injury_mod += bare_wound_bonus diff --git a/code/modules/surgery/bone_mending.dm b/code/modules/surgery/bone_mending.dm index 73fdcba3fce6b..8afffb232fb9d 100644 --- a/code/modules/surgery/bone_mending.dm +++ b/code/modules/surgery/bone_mending.dm @@ -212,7 +212,7 @@ TOOL_SCREWDRIVER = 40, ) time = 2.4 SECONDS - preop_sound = 'sound/surgery/hemostat1.ogg' + preop_sound = 'sound/items/handling/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( diff --git a/code/modules/surgery/brain_surgery.dm b/code/modules/surgery/brain_surgery.dm index 879cbdf7bf59b..c3a9baafde10f 100644 --- a/code/modules/surgery/brain_surgery.dm +++ b/code/modules/surgery/brain_surgery.dm @@ -31,9 +31,9 @@ /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100 repeatable = TRUE time = 100 //long and complicated - preop_sound = 'sound/surgery/hemostat1.ogg' - success_sound = 'sound/surgery/hemostat1.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/hemostat1.ogg' + success_sound = 'sound/items/handling/surgery/hemostat1.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' /datum/surgery_step/fix_brain/mechanic name = "perform neural debugging (hemostat or multitool)" diff --git a/code/modules/surgery/burn_dressing.dm b/code/modules/surgery/burn_dressing.dm index 5f2bdb8048327..9ffeaef089553 100644 --- a/code/modules/surgery/burn_dressing.dm +++ b/code/modules/surgery/burn_dressing.dm @@ -41,9 +41,9 @@ TOOL_WIRECUTTER = 40) time = 30 repeatable = TRUE - preop_sound = 'sound/surgery/scalpel1.ogg' - success_sound = 'sound/surgery/retractor2.ogg' - failure_sound = 'sound/surgery/organ1.ogg' + preop_sound = 'sound/items/handling/surgery/scalpel1.ogg' + success_sound = 'sound/items/handling/surgery/retractor2.ogg' + failure_sound = 'sound/items/handling/surgery/organ1.ogg' surgery_effects_mood = TRUE /// How much sanitization is added per step var/sanitization_added = 0.5 diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index 3ec68f8db8858..1be5e1db8230a 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -18,8 +18,8 @@ GLOBAL_LIST_INIT(heavy_cavity_implants, typecacheof(list(/obj/item/transfer_valv implements = list(/obj/item = 100) repeatable = TRUE time = 32 - preop_sound = 'sound/surgery/organ1.ogg' - success_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/organ1.ogg' + success_sound = 'sound/items/handling/surgery/organ2.ogg' var/obj/item/item_for_cavity /datum/surgery_step/handle_cavity/tool_check(mob/user, obj/item/tool) diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index 593008b8eef8d..3f1e7b761cc57 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -13,7 +13,7 @@ ) /datum/surgery/gastrectomy/mechanic - name = "Engine Diagnostic (Heart)" // Nova Edit: Original name = "Engine Diagnostic" + name = "Engine Diagnostic (Heart Repair)" // SKYRAT EDIT: Original name = "Engine Diagnostic" requires_bodypart_type = BODYTYPE_ROBOTIC steps = list( /datum/surgery_step/mechanic_open, @@ -41,9 +41,9 @@ /obj/item/knife = 45, /obj/item/shard = 25) time = 16 - preop_sound = 'sound/surgery/scalpel1.ogg' - success_sound = 'sound/surgery/scalpel2.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/scalpel1.ogg' + success_sound = 'sound/items/handling/surgery/scalpel2.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' surgery_effects_mood = TRUE /datum/surgery_step/incise_heart/mechanic @@ -54,8 +54,8 @@ /obj/item/melee/energy/sword = 65, /obj/item/knife = 45, /obj/item/shard = 35) - preop_sound = 'sound/items/ratchet.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/incise_heart/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -107,9 +107,9 @@ /obj/item/stack/package_wrap = 15, /obj/item/stack/cable_coil = 5) time = 90 - preop_sound = 'sound/surgery/hemostat1.ogg' - success_sound = 'sound/surgery/hemostat1.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/hemostat1.ogg' + success_sound = 'sound/items/handling/surgery/hemostat1.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' /datum/surgery_step/coronary_bypass/mechanic name = "perform maintenance (hemostat or wrench)" @@ -119,8 +119,8 @@ TOOL_WIRECUTTER = 35, /obj/item/stack/package_wrap = 15, /obj/item/stack/cable_coil = 5) - preop_sound = 'sound/items/ratchet.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/coronary_bypass/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm index 95c952e7724d4..845f655009b7f 100644 --- a/code/modules/surgery/experimental_dissection.dm +++ b/code/modules/surgery/experimental_dissection.dm @@ -36,11 +36,11 @@ silicons_obey_prob = TRUE /datum/surgery_step/experimental_dissection/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] starts dissecting [target].", "You start dissecting [target].") + user.visible_message(span_notice("[user] starts dissecting [target]."), span_notice("You start dissecting [target].")) /datum/surgery_step/experimental_dissection/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) var/points_earned = check_value(target) - user.visible_message("[user] dissects [target], discovering [points_earned] point\s of data!", "You dissect [target], finding [points_earned] point\s worth of discoveries, you also write a few notes.") + user.visible_message(span_notice("[user] dissects [target], discovering [points_earned] point\s of data!"), span_notice("You dissect [target], finding [points_earned] point\s worth of discoveries, you also write a few notes.")) var/obj/item/research_notes/the_dossier = new /obj/item/research_notes(user.loc, points_earned, "biology") if(!user.put_in_hands(the_dossier) && istype(user.get_inactive_held_item(), /obj/item/research_notes)) @@ -54,8 +54,8 @@ /datum/surgery_step/experimental_dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/points_earned = round(check_value(target) * 0.01) user.visible_message( - "[user] dissects [target]!", - "You dissect [target], but do not find anything particularly interesting.", + span_notice("[user] dissects [target]!"), + span_notice("You dissect [target], but do not find anything particularly interesting."), ) var/obj/item/research_notes/the_dossier = new /obj/item/research_notes(user.loc, points_earned, "biology") diff --git a/code/modules/surgery/gastrectomy.dm b/code/modules/surgery/gastrectomy.dm index f498d220d2f2b..b72e01d0ecf7d 100644 --- a/code/modules/surgery/gastrectomy.dm +++ b/code/modules/surgery/gastrectomy.dm @@ -42,9 +42,9 @@ /obj/item/knife = 45, /obj/item/shard = 35) time = 52 - preop_sound = 'sound/surgery/scalpel1.ogg' - success_sound = 'sound/surgery/organ1.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/scalpel1.ogg' + success_sound = 'sound/items/handling/surgery/organ1.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' surgery_effects_mood = TRUE /datum/surgery_step/gastrectomy/mechanic @@ -55,8 +55,8 @@ /obj/item/melee/energy/sword = 65, /obj/item/knife = 45, /obj/item/shard = 35) - preop_sound = 'sound/items/ratchet.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/gastrectomy/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 a8c7c7825b624..c8b3f9924b341 100644 --- a/code/modules/surgery/healing.dm +++ b/code/modules/surgery/healing.dm @@ -42,8 +42,8 @@ /obj/item/pen = 55) repeatable = TRUE time = 25 - success_sound = 'sound/surgery/retractor2.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + success_sound = 'sound/items/handling/surgery/retractor2.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' var/brutehealing = 0 var/burnhealing = 0 var/brute_multiplier = 0 //multiplies the damage that the patient has. if 0 the patient wont get any additional healing from the damage he has. diff --git a/code/modules/surgery/hepatectomy.dm b/code/modules/surgery/hepatectomy.dm index 2216ac7ad69f7..c0d94abb69a99 100644 --- a/code/modules/surgery/hepatectomy.dm +++ b/code/modules/surgery/hepatectomy.dm @@ -41,9 +41,9 @@ /obj/item/knife = 45, /obj/item/shard = 35) time = 52 - preop_sound = 'sound/surgery/scalpel1.ogg' - success_sound = 'sound/surgery/organ1.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/scalpel1.ogg' + success_sound = 'sound/items/handling/surgery/organ1.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' surgery_effects_mood = TRUE /datum/surgery_step/hepatectomy/mechanic @@ -54,8 +54,8 @@ /obj/item/melee/energy/sword = 65, /obj/item/knife = 45, /obj/item/shard = 35) - preop_sound = 'sound/items/ratchet.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/hepatectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 66eaf6faf737f..51c279d32cd98 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -19,7 +19,7 @@ TOOL_CROWBAR = 65, /obj/item/kitchen/fork = 35) time = 64 - success_sound = 'sound/surgery/hemostat1.ogg' + success_sound = 'sound/items/handling/surgery/hemostat1.ogg' var/obj/item/implant/implant /datum/surgery_step/extract_implant/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 6cb3dc8f75708..975df4a8bdffa 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -40,8 +40,8 @@ time = 64 surgery_effects_mood = TRUE preop_sound = list( - /obj/item/circular_saw = 'sound/surgery/saw.ogg', - /obj/item = 'sound/surgery/scalpel1.ogg', + /obj/item/circular_saw = 'sound/items/handling/surgery/saw.ogg', + /obj/item = 'sound/items/handling/surgery/scalpel1.ogg', ) /datum/surgery_step/cut_fat/mechanic @@ -54,8 +54,8 @@ /obj/item/knife = 45, /obj/item/shard = 35, ) - preop_sound = 'sound/items/ratchet.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message(span_notice("[user] begins to cut away [target]'s excess fat."), span_notice("You begin to cut away [target]'s excess fat...")) @@ -88,8 +88,8 @@ TOOL_WIRECUTTER = 35, ) time = 32 - preop_sound = 'sound/surgery/retractor1.ogg' - success_sound = 'sound/surgery/retractor2.ogg' + preop_sound = 'sound/items/handling/surgery/retractor1.ogg' + success_sound = 'sound/items/handling/surgery/retractor2.ogg' /datum/surgery_step/remove_fat/mechanic name = "engage expulsion valve (screwdriver or wrench)" //gross @@ -99,8 +99,8 @@ TOOL_WIRECUTTER = 35, TOOL_RETRACTOR = 35, ) - preop_sound = 'sound/items/ratchet.ogg' - success_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' + success_sound = 'sound/items/handling/surgery/organ2.ogg' /datum/surgery_step/remove_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm index c34c87545054c..85a963953c68e 100644 --- a/code/modules/surgery/lobectomy.dm +++ b/code/modules/surgery/lobectomy.dm @@ -38,9 +38,9 @@ /obj/item/knife = 45, /obj/item/shard = 35) time = 42 - preop_sound = 'sound/surgery/scalpel1.ogg' - success_sound = 'sound/surgery/organ1.ogg' - failure_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/scalpel1.ogg' + success_sound = 'sound/items/handling/surgery/organ1.ogg' + failure_sound = 'sound/items/handling/surgery/organ2.ogg' surgery_effects_mood = TRUE /datum/surgery_step/lobectomy/mechanic @@ -51,8 +51,8 @@ /obj/item/melee/energy/sword = 65, /obj/item/knife = 45, /obj/item/shard = 35) - preop_sound = 'sound/items/ratchet.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/lobectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -68,8 +68,11 @@ if(ishuman(target)) var/mob/living/carbon/human/human_target = target var/obj/item/organ/internal/lungs/target_lungs = human_target.get_organ_slot(ORGAN_SLOT_LUNGS) - target_lungs.operated = TRUE human_target.setOrganLoss(ORGAN_SLOT_LUNGS, 60) + if(target_lungs) + target_lungs.operated = TRUE + if(target_lungs.organ_flags & ORGAN_EMP) //If our organ is failing due to an EMP, fix that + target_lungs.organ_flags &= ~ORGAN_EMP display_results( user, target, diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index e9bfcbe949015..44be32bc858a7 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -7,8 +7,8 @@ /obj/item/knife = 50, /obj/item = 10) // 10% success with any sharp item. time = 24 - preop_sound = 'sound/items/screwdriver.ogg' - success_sound = 'sound/items/screwdriver2.ogg' + preop_sound = 'sound/items/tools/screwdriver.ogg' + success_sound = 'sound/items/tools/screwdriver2.ogg' /datum/surgery_step/mechanic_open/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -37,8 +37,8 @@ /obj/item/knife = 50, /obj/item = 10) // 10% success with any sharp item. time = 24 - preop_sound = 'sound/items/screwdriver.ogg' - success_sound = 'sound/items/screwdriver2.ogg' + preop_sound = 'sound/items/tools/screwdriver.ogg' + success_sound = 'sound/items/tools/screwdriver2.ogg' /datum/surgery_step/mechanic_close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -85,7 +85,7 @@ TOOL_WRENCH = 100, TOOL_RETRACTOR = 75) time = 24 - preop_sound = 'sound/items/ratchet.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' /datum/surgery_step/mechanic_unwrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -110,7 +110,7 @@ TOOL_WRENCH = 100, TOOL_RETRACTOR = 75) time = 24 - preop_sound = 'sound/items/ratchet.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' /datum/surgery_step/mechanic_wrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -133,8 +133,8 @@ name = "open the hatch (hand)" accept_hand = TRUE time = 10 - preop_sound = 'sound/items/ratchet.ogg' - preop_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet.ogg' + preop_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/open_hatch/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 59e0ded0a6644..7e0f5c29b8ec3 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -85,6 +85,8 @@ if(isnull(step)) return FALSE var/obj/item/tool = user.get_active_held_item() + if(tool) + tool = tool.get_proxy_attacker_for(target, user) if(step.try_op(user, target, user.zone_selected, tool, src, try_to_fail)) return TRUE if(tool && tool.tool_behaviour) //Mechanic organ manipulation isn't done with just surgery tools @@ -135,8 +137,8 @@ implements = list( /obj/item/organ = 100, /obj/item/borg/apparatus/organ_storage = 100) - preop_sound = 'sound/surgery/organ2.ogg' - success_sound = 'sound/surgery/organ1.ogg' + preop_sound = 'sound/items/handling/surgery/organ2.ogg' + success_sound = 'sound/items/handling/surgery/organ1.ogg' var/implements_extract = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 55, /obj/item/kitchen/fork = 35) var/current_type @@ -163,8 +165,8 @@ tool = target_organ if(isorgan(tool)) current_type = "insert" - preop_sound = 'sound/surgery/hemostat1.ogg' - success_sound = 'sound/surgery/organ2.ogg' + preop_sound = 'sound/items/handling/surgery/hemostat1.ogg' + success_sound = 'sound/items/handling/surgery/organ2.ogg' target_organ = tool if(target_zone != target_organ.zone || target.get_organ_slot(target_organ.slot)) to_chat(user, span_warning("There is no room for [target_organ] in [target]'s [target.parse_zone_with_bodypart(target_zone)]!")) @@ -211,13 +213,24 @@ if(isnull(chosen_organ)) return SURGERY_STEP_FAIL target_organ = chosen_organ - if(user && target && user.Adjacent(target) && user.get_active_held_item() == tool) + + if(user && target && user.Adjacent(target)) + //tool check + var/obj/item/held_tool = user.get_active_held_item() + if(held_tool) + held_tool = held_tool.get_proxy_attacker_for(target, user) + if(held_tool != tool) + return SURGERY_STEP_FAIL + + //organ check target_organ = organs[target_organ] if(!target_organ) return SURGERY_STEP_FAIL if(target_organ.organ_flags & ORGAN_UNREMOVABLE) to_chat(user, span_warning("[target_organ] is too well connected to take out!")) return SURGERY_STEP_FAIL + + //start operation display_results( user, target, diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index ce9dec4543846..22d95c9afd512 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -9,8 +9,8 @@ /obj/item/shard = 45, /obj/item = 30) // 30% success with any sharp item. time = 16 - preop_sound = 'sound/surgery/scalpel1.ogg' - success_sound = 'sound/surgery/scalpel2.ogg' + preop_sound = 'sound/items/handling/surgery/scalpel1.ogg' + success_sound = 'sound/items/handling/surgery/scalpel2.ogg' surgery_effects_mood = TRUE /datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -64,7 +64,7 @@ /obj/item/stack/package_wrap = 35, /obj/item/stack/cable_coil = 15) time = 24 - preop_sound = 'sound/surgery/hemostat1.ogg' + preop_sound = 'sound/items/handling/surgery/hemostat1.ogg' /datum/surgery_step/clamp_bleeders/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -95,8 +95,8 @@ TOOL_WIRECUTTER = 35, /obj/item/stack/rods = 35) time = 24 - preop_sound = 'sound/surgery/retractor1.ogg' - success_sound = 'sound/surgery/retractor2.ogg' + preop_sound = 'sound/items/handling/surgery/retractor1.ogg' + success_sound = 'sound/items/handling/surgery/retractor2.ogg' /datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -117,8 +117,8 @@ TOOL_WELDER = 70, /obj/item = 30) // 30% success with any hot item. time = 24 - preop_sound = 'sound/surgery/cautery1.ogg' - success_sound = 'sound/surgery/cautery2.ogg' + preop_sound = 'sound/items/handling/surgery/cautery1.ogg' + success_sound = 'sound/items/handling/surgery/cautery2.ogg' /datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -161,14 +161,14 @@ /obj/item = 25) //20% success (sort of) with any sharp item with a force >= 10 time = 54 preop_sound = list( - /obj/item/circular_saw = 'sound/surgery/saw.ogg', - /obj/item/melee/arm_blade = 'sound/surgery/scalpel1.ogg', - /obj/item/fireaxe = 'sound/surgery/scalpel1.ogg', - /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', - /obj/item/knife/butcher = 'sound/surgery/scalpel1.ogg', - /obj/item = 'sound/surgery/scalpel1.ogg', + /obj/item/circular_saw = 'sound/items/handling/surgery/saw.ogg', + /obj/item/melee/arm_blade = 'sound/items/handling/surgery/scalpel1.ogg', + /obj/item/fireaxe = 'sound/items/handling/surgery/scalpel1.ogg', + /obj/item/hatchet = 'sound/items/handling/surgery/scalpel1.ogg', + /obj/item/knife/butcher = 'sound/items/handling/surgery/scalpel1.ogg', + /obj/item = 'sound/items/handling/surgery/scalpel1.ogg', ) - success_sound = 'sound/surgery/organ2.ogg' + success_sound = 'sound/items/handling/surgery/organ2.ogg' surgery_effects_mood = TRUE /datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index 98d947793efae..a0eabfd4b0387 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -318,27 +318,57 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) replacement.set_organ_damage(damage) /// Called by medical scanners to get a simple summary of how healthy the organ is. Returns an empty string if things are fine. -/obj/item/organ/proc/get_status_text(advanced) - if(advanced && (organ_flags & ORGAN_PROMINENT)) - return "Harmful Foreign Body" +/obj/item/organ/proc/get_status_text(advanced, add_tooltips) + if(advanced && (organ_flags & ORGAN_HAZARDOUS)) + return conditional_tooltip("Harmful Foreign Body", "Remove surgically.", add_tooltips) if(organ_flags & ORGAN_EMP) - return "EMP-Derived Failure Cascade in Progress" + return conditional_tooltip("EMP-Derived Failure", "Repair or replace surgically.", add_tooltips) + var/tech_text = "" if(owner.has_reagent(/datum/reagent/inverse/technetium)) - return "[round((damage/maxHealth)*100, 1)]% damaged." + tech_text = "[round((damage / maxHealth) * 100, 1)]% damaged" if(organ_flags & ORGAN_FAILING) - return "Non-Functional" + return conditional_tooltip("[tech_text || "Non-Functional"]", "Repair or replace surgically.", add_tooltips) if(damage > high_threshold) - return "Severely Damaged" + return conditional_tooltip("[tech_text || "Severely Damaged"]", "[healing_factor ? "Treat with rest or use specialty medication." : "Repair surgically or use specialty medication."]", add_tooltips && owner.stat != DEAD) - if (damage > low_threshold) - return "Mildly Damaged" + if(damage > low_threshold) + return conditional_tooltip("[tech_text || "Mildly Damaged"] ", "[healing_factor ? "Treat with rest." : "Use specialty medication."]", add_tooltips && owner.stat != DEAD) + + if(tech_text) + return "[tech_text]" return "" +/// Determines if this organ is shown when a user has condensed scans enabled +/obj/item/organ/proc/show_on_condensed_scans() + // We don't need to show *most* damaged organs as they have no effects associated + return (organ_flags & (ORGAN_PROMINENT|ORGAN_HAZARDOUS|ORGAN_FAILING|ORGAN_VITAL)) + +/// Similar to get_status_text, but appends the text after the damage report, for additional status info +/obj/item/organ/proc/get_status_appendix(advanced, add_tooltips) + return + /// 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) +// BUBBER EDIT - OR BEGIN return Insert(new_owner, special = TRUE, movement_flags = DELETE_IF_REPLACED) +/* + Insert(new_owner, special = TRUE, movement_flags = DELETE_IF_REPLACED) + + +/// Get all possible organ slots by checking every organ, and then store it and give it whenever needed +/proc/get_all_slots() + var/static/list/all_organ_slots = list() + + if(!all_organ_slots.len) + for(var/obj/item/organ/an_organ as anything in subtypesof(/obj/item/organ)) + if(!initial(an_organ.slot)) + continue + all_organ_slots |= initial(an_organ.slot) + + return all_organ_slots +*/ // BUBBER EDIT - OR END diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index 0bb8afc6ced52..59107666bfde5 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -93,7 +93,7 @@ stored_organ.Insert(target)//insert stored organ into the user stored_organ = null name = initial(name) //get rid of the organ in the name - playsound(target.loc, 'sound/weapons/circsawhit.ogg', 50, vary = TRUE) + playsound(target.loc, 'sound/items/weapons/circsawhit.ogg', 50, vary = TRUE) update_appearance() if(uses) diff --git a/code/modules/surgery/organs/external/_external_organ.dm b/code/modules/surgery/organs/external/_external_organ.dm index d7673eac76745..ee731bf9f62f5 100644 --- a/code/modules/surgery/organs/external/_external_organ.dm +++ b/code/modules/surgery/organs/external/_external_organ.dm @@ -30,7 +30,14 @@ ///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 +// BUBBER EDIT - OR BEGIN /**mob_sprite is optional if you havent set sprite_datums for the object, and is used mostly to generate sprite_datums from a persons DNA +// OR NEW BELOW + ///If not null, overrides the appearance with this sprite accessory datum + var/sprite_accessory_override + +/**accessory_type is optional if you haven't set sprite_datums for the object, and is used mostly to generate sprite_datums from a persons DNA +*/ // BUBBER EDIT - OR END * For _mob_sprite we make a distinction between "Round Snout" and "round". Round Snout is the name of the sprite datum, while "round" would be part of the sprite * I'm sorry */ @@ -336,6 +343,11 @@ /datum/bodypart_overlay/mutant/antennae/get_base_icon_state() return burnt ? burn_datum.icon_state : sprite_datum.icon_state +/datum/bodypart_overlay/mutant/antennae/can_draw_on_bodypart(mob/living/carbon/human/human) + if(!(human.head?.flags_inv & HIDEANTENNAE)) + return TRUE + return FALSE + ///The leafy hair of a podperson /obj/item/organ/external/pod_hair name = "podperson hair" diff --git a/code/modules/surgery/organs/external/restyling.dm b/code/modules/surgery/organs/external/restyling.dm index 7d6be1b6d58e3..0ae13b68c6ad2 100644 --- a/code/modules/surgery/organs/external/restyling.dm +++ b/code/modules/surgery/organs/external/restyling.dm @@ -1,4 +1,4 @@ -//Contains a bunch of procs for different types, but in the end it just lets you restyle external_organs so thats why its here +//Contains a bunch of procs for different types, but in the end it just lets you restyle the bodypart overlay so that's why it's here ///Helper proc to fetch a list of styles a player might want to restyle their features into during the round : returns list("Cabbage" = /datum/sprite_accessory/cabbage) /obj/item/organ/external/proc/get_valid_restyles() @@ -22,7 +22,7 @@ if(src.body_zone == body_zone) INVOKE_ASYNC(src, PROC_REF(attempt_feature_restyle), source, trimmer, original_target, body_zone, restyle_type, style_speed) -///Invoke async so we dont break signals +///Invoke async so we don't break signals /obj/item/bodypart/proc/on_attempt_feature_restyle(atom/source, mob/living/trimmer, atom/movable/original_target, body_zone, restyle_type, style_speed) SIGNAL_HANDLER @@ -41,8 +41,13 @@ target_organ = valid_features[1] if(2 to INFINITY) var/choose_options = list() + // BUBBER EDIT - OR BEGIN var/name_to_organ = list() //literally so I dont have to loop again after someones made their choice for(var/obj/item/organ/external/organ_choice as anything in valid_features) + /* + var/name_to_organ = list() //literally so I don't have to loop again after someone's made their choice + for(var/obj/item/organ/organ_choice as anything in valid_features) + */ // BUBBER EDIT - OR END choose_options[organ_choice.name] = image(organ_choice) name_to_organ[organ_choice.name] = organ_choice var/picked_option = show_radial_menu(trimmer, original_target, choose_options, radius = 38, require_near = TRUE) @@ -56,8 +61,13 @@ target_organ.attempt_feature_restyle(source, trimmer, original_target, body_zone, restyle_type, style_speed) +// BUBBER EDIT - OR BEGIN ///Invoke async so we dont break signals /obj/item/organ/external/proc/on_attempt_feature_restyle(atom/source, mob/living/trimmer, atom/movable/original_target, body_zone, restyle_type, style_speed) +/* +///Invoke async so we don't break signals +/obj/item/organ/proc/on_attempt_feature_restyle(atom/source, mob/living/trimmer, atom/movable/original_target, body_zone, restyle_type, style_speed) +*/ // BUBBER EDIT - OR END SIGNAL_HANDLER if(restyle_flags & restyle_type) diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 680226b859b0a..327fd8f7b5093 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -1,3 +1,6 @@ +#define FUNCTIONAL_WING_FORCE 2.25 NEWTONS +#define FUNCTIONAL_WING_STABILIZATION 1.2 NEWTONS + ///hud action for starting and stopping flight /datum/action/innate/flight name = "Toggle Flight" @@ -10,11 +13,6 @@ var/obj/item/organ/external/wings/functional/wings = human.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS) if(wings?.can_fly(human)) wings.toggle_flight(human) - if(!(human.movement_type & FLYING)) - to_chat(human, span_notice("You settle gently back onto the ground...")) - else - to_chat(human, span_notice("You beat your wings and begin to hover gently above the ground...")) - human.set_resting(FALSE, TRUE) ///The true wings that you can use to fly and shit (you cant actually shit with them) /obj/item/organ/external/wings/functional @@ -55,7 +53,7 @@ ///Called on_life(). Handle flight code and check if we're still flying /obj/item/organ/external/wings/functional/proc/handle_flight(mob/living/carbon/human/human) - if(!(human.movement_type & FLYING)) + if(!HAS_TRAIT_FROM(human, TRAIT_MOVE_FLOATING, SPECIES_FLIGHT_TRAIT)) return FALSE if(!can_fly(human)) toggle_flight(human) @@ -79,8 +77,7 @@ if(environment?.return_pressure() < HAZARD_LOW_PRESSURE + 10) to_chat(human, span_warning("The atmosphere is too thin for you to fly!")) return FALSE - else - return TRUE + return TRUE ///Slipping but in the air? /obj/item/organ/external/wings/functional/proc/fly_slip(mob/living/carbon/human/human) @@ -107,19 +104,48 @@ ///UNSAFE PROC, should only be called through the Activate or other sources that check for CanFly /obj/item/organ/external/wings/functional/proc/toggle_flight(mob/living/carbon/human/human) - if(!HAS_TRAIT_FROM(human, TRAIT_MOVE_FLYING, SPECIES_FLIGHT_TRAIT)) + if(!HAS_TRAIT_FROM(human, TRAIT_MOVE_FLOATING, SPECIES_FLIGHT_TRAIT)) human.physiology.stun_mod *= 2 - human.add_traits(list(TRAIT_NO_FLOATING_ANIM, TRAIT_MOVE_FLYING), SPECIES_FLIGHT_TRAIT) + human.add_traits(list(TRAIT_NO_FLOATING_ANIM, TRAIT_MOVE_FLOATING, TRAIT_IGNORING_GRAVITY, TRAIT_NOGRAV_ALWAYS_DRIFT), SPECIES_FLIGHT_TRAIT) + human.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/wings) + human.AddElement(/datum/element/forced_gravity, 0) passtable_on(human, SPECIES_FLIGHT_TRAIT) + RegisterSignal(human, COMSIG_MOB_CLIENT_MOVE_NOGRAV, PROC_REF(on_client_move)) + START_PROCESSING(SSnewtonian_movement, src) open_wings() - else - human.physiology.stun_mod *= 0.5 - human.remove_traits(list(TRAIT_NO_FLOATING_ANIM, TRAIT_MOVE_FLYING), SPECIES_FLIGHT_TRAIT) - passtable_off(human, SPECIES_FLIGHT_TRAIT) - close_wings() + to_chat(human, span_notice("You beat your wings and begin to hover gently above the ground...")) + human.set_resting(FALSE, TRUE) + human.refresh_gravity() + return + human.physiology.stun_mod *= 0.5 + human.remove_traits(list(TRAIT_NO_FLOATING_ANIM, TRAIT_MOVE_FLOATING, TRAIT_IGNORING_GRAVITY, TRAIT_NOGRAV_ALWAYS_DRIFT), SPECIES_FLIGHT_TRAIT) + human.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/wings) + human.RemoveElement(/datum/element/forced_gravity, 0) + passtable_off(human, SPECIES_FLIGHT_TRAIT) + UnregisterSignal(human, COMSIG_MOB_CLIENT_MOVE_NOGRAV) + STOP_PROCESSING(SSnewtonian_movement, src) + to_chat(human, span_notice("You settle gently back onto the ground...")) + close_wings() human.refresh_gravity() +/obj/item/organ/external/wings/functional/proc/on_client_move(mob/source, list/move_args) + SIGNAL_HANDLER + + if (!can_fly(source)) + return + + var/max_drift_force = (DEFAULT_INERTIA_SPEED / source.cached_multiplicative_slowdown - 1) / INERTIA_SPEED_COEF + 1 + source.newtonian_move(dir2angle(source.client.intended_direction), instant = TRUE, drift_force = FUNCTIONAL_WING_FORCE, controlled_cap = max_drift_force) + source.setDir(source.client.intended_direction) + +/obj/item/organ/external/wings/functional/process(seconds_per_tick) + if (!owner || !can_fly(owner) || isnull(owner.drift_handler)) + return + + var/max_drift_force = (DEFAULT_INERTIA_SPEED / owner.cached_multiplicative_slowdown - 1) / INERTIA_SPEED_COEF + 1 + owner.drift_handler.stabilize_drift(owner.client.intended_direction ? dir2angle(owner.client.intended_direction) : null, owner.client.intended_direction ? max_drift_force : 0, FUNCTIONAL_WING_STABILIZATION * (seconds_per_tick * 1 SECONDS)) + ///SPREAD OUR WINGS AND FLLLLLYYYYYY /obj/item/organ/external/wings/functional/proc/open_wings() var/datum/bodypart_overlay/mutant/wings/functional/overlay = bodypart_overlay @@ -202,7 +228,7 @@ sprite_accessory_override = /datum/sprite_accessory/wings/skeleton /obj/item/organ/external/wings/functional/moth/make_flap_sound(mob/living/carbon/wing_owner) - playsound(wing_owner, 'sound/voice/moth/moth_flutter.ogg', 50, TRUE) + playsound(wing_owner, 'sound/mobs/humanoids/moth/moth_flutter.ogg', 50, TRUE) ///mothra wings, which relate to moths. /obj/item/organ/external/wings/functional/moth/mothra @@ -227,3 +253,6 @@ name = "slime wings" desc = "How does something so squishy even fly?" sprite_accessory_override = /datum/sprite_accessory/wings/slime + +#undef FUNCTIONAL_WING_FORCE +#undef FUNCTIONAL_WING_STABILIZATION diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm index 3ddf98ee17be1..ab1f83e7adabb 100644 --- a/code/modules/surgery/organs/external/wings/moth_wings.dm +++ b/code/modules/surgery/organs/external/wings/moth_wings.dm @@ -1,3 +1,5 @@ +#define MOTH_WING_FORCE 1 NEWTONS + ///Moth wings! They can flutter in low-grav and burn off in heat /obj/item/organ/external/wings/moth name = "moth wings" @@ -18,30 +20,60 @@ . = ..() 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)) + RegisterSignal(receiver, COMSIG_MOB_CLIENT_MOVE_NOGRAV, PROC_REF(on_client_move)) + START_PROCESSING(SSnewtonian_movement, src) /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)) + UnregisterSignal(organ_owner, list(COMSIG_HUMAN_BURNING, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_MOB_CLIENT_MOVE_NOGRAV)) + STOP_PROCESSING(SSnewtonian_movement, src) /obj/item/organ/external/wings/moth/make_flap_sound(mob/living/carbon/wing_owner) - playsound(wing_owner, 'sound/voice/moth/moth_flutter.ogg', 50, TRUE) + playsound(wing_owner, 'sound/mobs/humanoids/moth/moth_flutter.ogg', 50, TRUE) /obj/item/organ/external/wings/moth/can_soften_fall() return !burnt -///Check if we can flutter around -/obj/item/organ/external/wings/moth/proc/update_float_move() +/obj/item/organ/external/wings/moth/proc/allow_flight() + if(!owner || !owner.client) + return FALSE + if(!isturf(owner.loc)) + return FALSE + if(!(owner.movement_type & FLOATING) || owner.buckled) + return FALSE + if(owner.pulledby) + return FALSE + if(owner.throwing) + return FALSE + if(owner.has_gravity()) + return FALSE + if(ishuman(owner)) + var/mob/living/carbon/human/human_owner = owner + if(human_owner.wear_suit?.flags_inv & HIDEMUTWINGS) + return FALSE //Can't fly with hidden wings + if(burnt) + return FALSE + var/datum/gas_mixture/current = owner.loc.return_air() + if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) + return TRUE + return FALSE + +/obj/item/organ/external/wings/moth/process(seconds_per_tick) + if (!owner || !allow_flight() || isnull(owner.drift_handler)) + return + + var/max_drift_force = (DEFAULT_INERTIA_SPEED / owner.cached_multiplicative_slowdown - 1) / INERTIA_SPEED_COEF + 1 + owner.drift_handler.stabilize_drift(owner.client.intended_direction ? dir2angle(owner.client.intended_direction) : null, owner.client.intended_direction ? max_drift_force : 0, MOTH_WING_FORCE * (seconds_per_tick * 1 SECONDS)) + +/obj/item/organ/external/wings/moth/proc/on_client_move(mob/source, list/move_args) SIGNAL_HANDLER - if(!isspaceturf(owner.loc) && !burnt) - var/datum/gas_mixture/current = owner.loc.return_air() - if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible - ADD_TRAIT(owner, TRAIT_FREE_FLOAT_MOVEMENT, REF(src)) - return + if (!allow_flight()) + return - REMOVE_TRAIT(owner, TRAIT_FREE_FLOAT_MOVEMENT, REF(src)) + var/max_drift_force = (DEFAULT_INERTIA_SPEED / source.cached_multiplicative_slowdown - 1) / INERTIA_SPEED_COEF + 1 + source.newtonian_move(dir2angle(source.client.intended_direction), instant = TRUE, drift_force = MOTH_WING_FORCE, controlled_cap = max_drift_force) + source.setDir(source.client.intended_direction) ///check if our wings can burn off ;_; /obj/item/organ/external/wings/moth/proc/try_burn_wings(mob/living/carbon/human/human) @@ -96,3 +128,5 @@ /datum/bodypart_overlay/mutant/wings/moth/get_base_icon_state() return burnt ? burn_datum.icon_state : sprite_datum.icon_state + +#undef MOTH_WING_FORCE diff --git a/code/modules/surgery/organs/internal/_internal_organ.dm b/code/modules/surgery/organs/internal/_internal_organ.dm index 9f67fb3d89914..8b7bd35493127 100644 --- a/code/modules/surgery/organs/internal/_internal_organ.dm +++ b/code/modules/surgery/organs/internal/_internal_organ.dm @@ -17,7 +17,7 @@ /obj/item/organ/internal/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE) . = ..() - if((organ_flags & ORGAN_VITAL) && !special && !(organ_owner.status_flags & GODMODE)) + if((organ_flags & ORGAN_VITAL) && !special && !HAS_TRAIT(organ_owner, TRAIT_GODMODE)) if(organ_owner.stat != DEAD) organ_owner.investigate_log("has been killed by losing a vital organ ([src]).", INVESTIGATE_DEATHS) organ_owner.death() diff --git a/code/modules/surgery/organs/internal/appendix/_appendix.dm b/code/modules/surgery/organs/internal/appendix/_appendix.dm index 83ed8da84aca0..f4fb4e3e49e42 100644 --- a/code/modules/surgery/organs/internal/appendix/_appendix.dm +++ b/code/modules/surgery/organs/internal/appendix/_appendix.dm @@ -14,8 +14,8 @@ healing_factor = STANDARD_ORGAN_HEALING decay_factor = STANDARD_ORGAN_DECAY - now_failing = "An explosion of pain erupts in your lower right abdomen!" - now_fixed = "The pain in your abdomen has subsided." + now_failing = span_warning("An explosion of pain erupts in your lower right abdomen!") + now_fixed = span_info("The pain in your abdomen has subsided.") var/inflamation_stage = 0 @@ -87,11 +87,10 @@ ADD_TRAIT(organ_owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type) organ_owner.med_hud_set_status() -/obj/item/organ/internal/appendix/get_status_text(advanced) - if((!(organ_flags & ORGAN_FAILING)) && inflamation_stage) - return "Inflamed" - else - return ..() +/obj/item/organ/internal/appendix/get_status_text(advanced, add_tooltips) + if(!(organ_flags & ORGAN_FAILING) && inflamation_stage) + return conditional_tooltip("Inflamed", "Remove surgically.", add_tooltips) + return ..() #undef APPENDICITIS_PROB #undef INFLAMATION_ADVANCEMENT_PROB diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm index 4a7dcab80f259..0946d1441039c 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm @@ -14,9 +14,9 @@ /// You can use this var for item path, it would be converted into an item on New(). var/obj/item/active_item /// Sound played when extending - var/extend_sound = 'sound/mecha/mechmove03.ogg' + var/extend_sound = 'sound/vehicles/mecha/mechmove03.ogg' /// Sound played when retracting - var/retract_sound = 'sound/mecha/mechmove03.ogg' + var/retract_sound = 'sound/vehicles/mecha/mechmove03.ogg' /// Organ slot that the implant occupies for the right arm var/right_arm_organ_slot = ORGAN_SLOT_RIGHT_ARM_AUG /// Organ slot that the implant occupies for the left arm @@ -235,7 +235,7 @@ if(prob(30/severity) && owner && !(organ_flags & ORGAN_FAILING)) Retract() owner.visible_message(span_danger("A loud bang comes from [owner]\'s [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm!")) - playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, TRUE) + playsound(get_turf(owner), 'sound/items/weapons/flashbang.ogg', 100, TRUE) to_chat(owner, span_userdanger("You feel an explosion erupt inside your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm as your implant breaks!")) owner.adjust_fire_stacks(20) owner.ignite_mob() @@ -467,7 +467,7 @@ var/mob/living/carbon/human/human_target = target 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) + playsound(living_target.loc, 'sound/items/weapons/punchmiss.ogg', 25, TRUE, -1) log_combat(source, target, "attempted to [picked_hit_type]", "muscle implant") return COMPONENT_CANCEL_ATTACK_CHAIN @@ -480,7 +480,7 @@ potential_damage += biotype_bonus_damage source.do_attack_animation(target, ATTACK_EFFECT_SMASH) - playsound(living_target.loc, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + playsound(living_target.loc, 'sound/items/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, armour_penetration = attacking_bodypart.unarmed_effectiveness) diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm index 060499936d53d..c9cbfbe445bdf 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm @@ -117,7 +117,7 @@ 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) + playsound(owner, 'sound/machines/defib/defib_zap.ogg', 75, TRUE, -1) owner.set_heartattack(FALSE) owner.revive() owner.emote("gasp") @@ -169,11 +169,13 @@ AddComponent( \ /datum/component/jetpack, \ FALSE, \ + 1.5 NEWTONS, \ + 1.2 NEWTONS, \ COMSIG_THRUSTER_ACTIVATED, \ COMSIG_THRUSTER_DEACTIVATED, \ THRUSTER_ACTIVATION_FAILED, \ CALLBACK(src, PROC_REF(allow_thrust), 0.01), \ - /datum/effect_system/trail_follow/ion \ + /datum/effect_system/trail_follow/ion, \ ) /obj/item/organ/internal/cyberimp/chest/thrusters/Remove(mob/living/carbon/thruster_owner, special, movement_flags) diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index 6bdf093dd471c..ae8e8dd7bd213 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -10,10 +10,10 @@ healing_factor = STANDARD_ORGAN_HEALING decay_factor = STANDARD_ORGAN_DECAY - low_threshold_passed = "Your ears begin to resonate with an internal ring sometimes." - now_failing = "You are unable to hear at all!" - now_fixed = "Noise slowly begins filling your ears once more." - low_threshold_cleared = "The ringing in your ears has died down." + low_threshold_passed = span_info("Your ears begin to resonate with an internal ring sometimes.") + now_failing = span_warning("You are unable to hear at all!") + now_fixed = span_info("Noise slowly begins filling your ears once more.") + low_threshold_cleared = span_info("The ringing in your ears has died down.") /// `deaf` measures "ticks" of deafness. While > 0, the person is unable to hear anything. var/deaf = 0 @@ -43,7 +43,7 @@ adjustEarDamage(0, -0.5 * seconds_per_tick) if((damage > low_threshold) && SPT_PROB(damage / 60, seconds_per_tick)) adjustEarDamage(0, 4) - SEND_SOUND(owner, sound('sound/weapons/flash_ring.ogg')) + SEND_SOUND(owner, sound('sound/items/weapons/flash_ring.ogg')) /obj/item/organ/internal/ears/apply_organ_damage(damage_amount, maximum, required_organ_flag) . = ..() @@ -58,6 +58,22 @@ UnregisterSignal(organ_owner, COMSIG_MOB_SAY) REMOVE_TRAIT(organ_owner, TRAIT_DEAF, EAR_DAMAGE) +/obj/item/organ/internal/ears/get_status_appendix(advanced, add_tooltips) + if(owner.stat == DEAD || !HAS_TRAIT(owner, TRAIT_DEAF)) + return + if(advanced) + if(HAS_TRAIT_FROM(owner, TRAIT_DEAF, QUIRK_TRAIT)) + return conditional_tooltip("Subject is permanently deaf.", "Irreparable under normal circumstances.", add_tooltips) + if(HAS_TRAIT_FROM(owner, TRAIT_DEAF, GENETIC_MUTATION)) + return conditional_tooltip("Subject is genetically deaf.", "Use medication such as [/datum/reagent/medicine/mutadone::name].", add_tooltips) + if(HAS_TRAIT_FROM(owner, TRAIT_DEAF, EAR_DAMAGE)) + return conditional_tooltip("Subject is [(organ_flags & ORGAN_FAILING) ? "permanently": "temporarily"] deaf from ear damage.", "Repair surgically, use medication such as [/datum/reagent/medicine/inacusiate::name], or protect ears with earmuffs.", add_tooltips) + return "Subject is deaf." + +/obj/item/organ/internal/ears/show_on_condensed_scans() + // Always show if we have an appendix + return ..() || (owner.stat != DEAD && HAS_TRAIT(owner, TRAIT_DEAF)) + /** * Snowflake proc to handle temporary deafness * @@ -65,7 +81,7 @@ * * ddeaf: Handles temporary deafness, 1 ddeaf = 2 seconds of deafness, by default (with no multiplier) */ /obj/item/organ/internal/ears/proc/adjustEarDamage(ddmg = 0, ddeaf = 0) - if(owner.status_flags & GODMODE) + if(HAS_TRAIT(owner, TRAIT_GODMODE)) update_temp_deafness() return @@ -86,7 +102,7 @@ if(isnull(owner)) return - if(owner.status_flags & GODMODE) + if(HAS_TRAIT(owner, TRAIT_GODMODE)) deaf = 0 if(deaf > 0) @@ -129,6 +145,7 @@ /obj/item/organ/internal/ears/invincible damage_multiplier = 0 + /obj/item/organ/internal/ears/cat name = "cat ears" icon = 'icons/obj/clothing/head/costume.dmi' @@ -154,6 +171,7 @@ ear_owner.dna.update_uf_block(DNA_EARS_BLOCK) ear_owner.update_body() +// BUBBER EDIT - OR BEGIN /obj/item/organ/internal/ears/cat/on_mob_remove(mob/living/carbon/human/ear_owner) . = ..() if(istype(ear_owner) && ear_owner.dna) @@ -162,6 +180,42 @@ ear_owner.update_body() */ //SKYRAT EDIT REMOVAL END +/* + bodypart_overlay = /datum/bodypart_overlay/mutant/cat_ears + +/// Bodypart overlay for the horrible cat ears +/datum/bodypart_overlay/mutant/cat_ears + layers = EXTERNAL_FRONT | EXTERNAL_BEHIND + color_source = ORGAN_COLOR_HAIR + feature_key = "ears" + + /// Layer upon which we add the inner ears overlay + var/inner_layer = EXTERNAL_FRONT + +/datum/bodypart_overlay/mutant/cat_ears/get_global_feature_list() + return SSaccessories.ears_list + +/datum/bodypart_overlay/mutant/cat_ears/can_draw_on_bodypart(mob/living/carbon/human/human) + if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) + return FALSE + return TRUE + +/datum/bodypart_overlay/mutant/cat_ears/get_image(image_layer, obj/item/bodypart/limb) + var/mutable_appearance/base_ears = ..() + + // Only add inner ears on the inner layer + if(image_layer != bitflag_to_layer(inner_layer)) + return base_ears + + // Construct image of inner ears, apply to base ears as an overlay + feature_key += "inner" + var/mutable_appearance/inner_ears = ..() + inner_ears.appearance_flags = RESET_COLOR + feature_key = initial(feature_key) + + base_ears.overlays += inner_ears + return base_ears +*/ // // BUBBER EDIT - OR END /obj/item/organ/internal/ears/penguin name = "penguin ears" diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 7ab37382a55b3..08abceb92e2fb 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -13,12 +13,12 @@ high_threshold = 0.3 * STANDARD_ORGAN_THRESHOLD //threshold at 30 low_threshold = 0.2 * STANDARD_ORGAN_THRESHOLD //threshold at 20 - low_threshold_passed = "Distant objects become somewhat less tangible." - high_threshold_passed = "Everything starts to look a lot less clear." - now_failing = "Darkness envelopes you, as your eyes go blind!" - now_fixed = "Color and shapes are once again perceivable." - high_threshold_cleared = "Your vision functions passably once more." - low_threshold_cleared = "Your vision is cleared of any ailment." + low_threshold_passed = span_info("Distant objects become somewhat less tangible.") + high_threshold_passed = span_info("Everything starts to look a lot less clear.") + now_failing = span_warning("Darkness envelopes you, as your eyes go blind!") + now_fixed = span_info("Color and shapes are once again perceivable.") + high_threshold_cleared = span_info("Your vision functions passably once more.") + low_threshold_cleared = span_info("Your vision is cleared of any ailment.") /// Sight flags this eye pair imparts on its user. var/sight_flags = NONE @@ -50,7 +50,8 @@ /// 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 = FOV_180_DEGREES //SKYRAT EDIT CHANGE - Original FOV_90_DEGREES + /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 @@ -129,12 +130,42 @@ #define OFFSET_X 1 #define OFFSET_Y 2 +/// Similar to get_status_text, but appends the text after the damage report, for additional status info +/obj/item/organ/internal/eyes/get_status_appendix(advanced, add_tooltips) + if(owner.stat == DEAD || HAS_TRAIT(owner, TRAIT_KNOCKEDOUT)) + return + if(owner.is_blind()) + if(advanced) + if(owner.is_blind_from(QUIRK_TRAIT)) + return conditional_tooltip("Subject is permanently blind.", "Irreparable under normal circumstances.", add_tooltips) + if(owner.is_blind_from(TRAUMA_TRAIT)) + return conditional_tooltip("Subject is blind from mental trauma.", "Repair via treatment of associated trauma.", add_tooltips) + if(owner.is_blind_from(GENETIC_MUTATION)) + return conditional_tooltip("Subject is genetically blind.", "Use medication such as [/datum/reagent/medicine/mutadone::name].", add_tooltips) + if(owner.is_blind_from(EYE_DAMAGE)) + return conditional_tooltip("Subject is blind from eye damage.", "Repair surgically, use medication such as [/datum/reagent/medicine/oculine::name], or protect eyes with a blindfold.", add_tooltips) + return "Subject is blind." + if(owner.is_nearsighted()) + if(advanced) + if(owner.is_nearsighted_from(QUIRK_TRAIT)) + return conditional_tooltip("Subject is permanently nearsighted.", "Irreparable under normal circumstances. Prescription glasses will assuage the effects.", add_tooltips) + if(owner.is_nearsighted_from(GENETIC_MUTATION)) + return conditional_tooltip("Subject is genetically nearsighted.", "Use medication such as [/datum/reagent/medicine/mutadone::name]. Prescription glasses will assuage the effects.", add_tooltips) + if(owner.is_nearsighted_from(EYE_DAMAGE)) + return conditional_tooltip("Subject is nearsighted from eye damage.", "Repair surgically or use medication such as [/datum/reagent/medicine/oculine::name]. Prescription glasses will assuage the effects.", add_tooltips) + return "Subject is nearsighted." + return "" + +/obj/item/organ/internal/eyes/show_on_condensed_scans() + // Always show if we have an appendix + return ..() || (owner.stat != DEAD && !HAS_TRAIT(owner, TRAIT_KNOCKEDOUT) && (owner.is_blind() || owner.is_nearsighted())) + /// This proc generates a list of overlays that the eye should be displayed using for the given parent /obj/item/organ/internal/eyes/proc/generate_body_overlay(mob/living/carbon/human/parent) if(!istype(parent) || parent.get_organ_by_type(/obj/item/organ/internal/eyes) != src) CRASH("Generating a body overlay for [src] targeting an invalid parent '[parent]'.") - if(isnull(eye_icon_state)) + if(isnull(eye_icon_state) || eye_icon_state == "None") // SKYRAT EDIT - Synths, adds eye_icon_state == "None" return list() var/eye_icon = parent.dna?.species.eyes_icon || 'icons/mob/human/human_face.dmi' // SKYRAT EDIT ADDITION @@ -150,17 +181,24 @@ var/obj/item/bodypart/head/my_head = parent.get_bodypart(BODY_ZONE_HEAD) if(my_head) if(my_head.head_flags & HEAD_EYECOLOR) - eye_right.color = eye_color_right - eye_left.color = eye_color_left + if(IS_ROBOTIC_ORGAN(src) || !my_head.draw_color || (parent.appears_alive() && !HAS_TRAIT(parent, TRAIT_KNOCKEDOUT))) + // show the eyes as open + eye_right.color = eye_color_right + eye_left.color = eye_color_left + else + // show the eyes as closed, and as such color them like eyelids wound be colored + var/list/base_color = rgb2num(my_head.draw_color, COLORSPACE_HSL) + base_color[2] *= 0.85 + base_color[3] *= 0.85 + var/eyelid_color = rgb(base_color[1], base_color[2], base_color[3], (length(base_color) >= 4 ? base_color[4] : null), COLORSPACE_HSL) + eye_right.color = eyelid_color + eye_left.color = eyelid_color + if(my_head.worn_face_offset) my_head.worn_face_offset.apply_offset(eye_left) my_head.worn_face_offset.apply_offset(eye_right) - // SKYRAT EDIT START - Customization (Synths + Emissives) - if(eye_icon_state == "None") - eye_left.alpha = 0 - eye_right.alpha = 0 - + // SKYRAT EDIT START - Customization Emissives) if (is_emissive) // Because it was done all weird up there. var/mutable_appearance/emissive_left = emissive_appearance_copy(eye_left, owner) var/mutable_appearance/emissive_right = emissive_appearance_copy(eye_right, owner) diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm index b0fac316ad3e3..3f3e816584481 100644 --- a/code/modules/surgery/organs/internal/heart/_heart.dm +++ b/code/modules/surgery/organs/internal/heart/_heart.dm @@ -92,6 +92,15 @@ /obj/item/organ/internal/heart/proc/is_beating() return beating +/obj/item/organ/internal/heart/get_status_text(advanced, add_tooltips) + if(!beating && !(organ_flags & ORGAN_FAILING) && owner.needs_heart() && owner.stat != DEAD) + return conditional_tooltip("Cardiac Arrest", "Apply defibrillation immediately. Similar electric shocks may work in emergencies.", add_tooltips) + return ..() + +/obj/item/organ/internal/heart/show_on_condensed_scans() + // Always show if the guy needs a heart (so its status can be monitored) + return ..() || owner.needs_heart() + /obj/item/organ/internal/heart/on_life(seconds_per_tick, times_fired) ..() @@ -115,11 +124,11 @@ if(beat != BEAT_SLOW) beat = BEAT_SLOW to_chat(owner, span_notice("You feel your heart slow down...")) - SEND_SOUND(owner, sound('sound/health/slowbeat.ogg', repeat = TRUE, channel = CHANNEL_HEARTBEAT, volume = 40)) + SEND_SOUND(owner, sound('sound/effects/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)) + SEND_SOUND(owner, sound('sound/effects/health/fastbeat.ogg', repeat = TRUE, channel = CHANNEL_HEARTBEAT, volume = 40)) beat = BEAT_FAST else if(beat != BEAT_NONE) diff --git a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm index 5cdb27942358b..31e9e64750c92 100644 --- a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm +++ b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm @@ -4,7 +4,7 @@ #define DOAFTER_IMPLANTING_HEART "implanting" /obj/item/organ/internal/heart/cybernetic/anomalock - name = "Voltaic Combat Cyberheart" + name = "voltaic combat cyberheart" desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Requires a refined Flux core as a power source." icon_state = "anomalock_heart" bleed_prevention = TRUE @@ -59,7 +59,7 @@ to_chat(user, span_userdanger("Black cyberveins tear your skin apart, pulling the heart into your ribcage. This feels unwise..")) if(!do_after(user, 5 SECONDS, interaction_key = DOAFTER_IMPLANTING_HEART)) return ..() - playsound(target_mob, 'sound/weapons/slice.ogg', 100, TRUE) + playsound(target_mob, 'sound/items/weapons/slice.ogg', 100, TRUE) user.temporarilyRemoveItemFromInventory(src, TRUE) Insert(user) user.apply_damage(100, BRUTE, BODY_ZONE_CHEST) diff --git a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm index d6d0f5f4024dc..ff2db562d95d9 100644 --- a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm +++ b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm @@ -188,7 +188,7 @@ src.ethereal_heart = ethereal_heart ethereal_heart.owner.visible_message(span_notice("The crystals fully encase [ethereal_heart.owner]!")) to_chat(ethereal_heart.owner, span_notice("You are encased in a huge crystal!")) - playsound(get_turf(src), 'sound/effects/ethereal_crystalization.ogg', 50) + playsound(get_turf(src), 'sound/mobs/humanoids/ethereal/ethereal_crystalization.ogg', 50) var/atom/movable/possible_chair = ethereal_heart.owner.buckled possible_chair?.unbuckle_mob(ethereal_heart.owner, force = TRUE) ethereal_heart.owner.forceMove(src) //put that ethereal in @@ -204,7 +204,7 @@ 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) + playsound(get_turf(ethereal_heart.owner), 'sound/mobs/humanoids/ethereal/ethereal_revive_fail.ogg', 100) return ..() /obj/structure/ethereal_crystal/Destroy() @@ -237,7 +237,7 @@ // revive will regenerate organs, so our heart refence is going to be null'd. Unreliable var/mob/living/carbon/regenerating = ethereal_heart.owner - playsound(get_turf(regenerating), 'sound/effects/ethereal_revive.ogg', 100) + playsound(get_turf(regenerating), 'sound/mobs/humanoids/ethereal/ethereal_revive.ogg', 100) to_chat(regenerating, span_notice("You burst out of the crystal with vigour... But at a cost.")) regenerating.gain_trauma(picked_trauma, TRAUMA_RESILIENCE_MAGIC) //BUBBER EDIT regenerating.revive(HEAL_ALL & ~HEAL_REFRESH_ORGANS) diff --git a/code/modules/surgery/organs/internal/liver/_liver.dm b/code/modules/surgery/organs/internal/liver/_liver.dm index 9f933b6a2a859..9b0f3a7162f64 100644 --- a/code/modules/surgery/organs/internal/liver/_liver.dm +++ b/code/modules/surgery/organs/internal/liver/_liver.dm @@ -1,7 +1,6 @@ #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 receive per second (~1 min at max damage will destroy liver) +#define LIVER_FAILURE_STAGE_SECONDS 60 //amount of seconds before liver failure reaches a new stage /obj/item/organ/internal/liver name = "liver" @@ -124,10 +123,6 @@ continue ADD_TRAIT(replacement, readded_trait, JOB_TRAIT) -#define HAS_SILENT_TOXIN 0 //don't provide a feedback message if this is the only toxin present -#define HAS_NO_TOXIN 1 -#define HAS_PAINFUL_TOXIN 2 - /obj/item/organ/internal/liver/on_life(seconds_per_tick, times_fired) . = ..() //If your liver is failing, then we use the liverless version of metabolize @@ -136,34 +131,8 @@ owner.reagents.metabolize(owner, seconds_per_tick, times_fired, can_overdose = TRUE, liverless = TRUE) return - var/obj/belly = owner.get_organ_slot(ORGAN_SLOT_STOMACH) - var/list/cached_reagents = owner.reagents?.reagent_list - var/liver_damage = 0 - var/provide_pain_message = HAS_NO_TOXIN - - if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER)) - 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 = toxin.volume - if(belly) - amount += belly.reagents.get_reagent_amount(toxin.type) - - // a 15u syringe is a nice baseline to scale lethality by - liver_damage += ((amount/15) * toxin.toxpwr * toxin.liver_damage_multiplier) / liver_resistance - - 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) - if(liver_damage) - apply_organ_damage(min(liver_damage * seconds_per_tick , MAX_TOXIN_LIVER_DAMAGE * seconds_per_tick)) - - if(provide_pain_message && damage > 10 && SPT_PROB(damage/6, seconds_per_tick)) //the higher the damage the higher the probability - to_chat(owner, span_warning("You feel a dull pain in your abdomen.")) - - /obj/item/organ/internal/liver/handle_failing_organs(seconds_per_tick) if(HAS_TRAIT(owner, TRAIT_STABLELIVER) || HAS_TRAIT(owner, TRAIT_LIVERLESS_METABOLISM)) return @@ -303,10 +272,6 @@ . = ..() AddElement(/datum/element/dangerous_surgical_removal) -#undef HAS_SILENT_TOXIN -#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_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 8edf65d6755c5..4d7f244b7941a 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -12,11 +12,11 @@ healing_factor = STANDARD_ORGAN_HEALING decay_factor = STANDARD_ORGAN_DECAY * 0.9 // fails around 16.5 minutes, lungs are one of the last organs to die (of the ones we have) - low_threshold_passed = "You feel short of breath." - high_threshold_passed = "You feel some sort of constriction around your chest as your breathing becomes shallow and rapid." - now_fixed = "Your lungs seem to once again be able to hold air." - low_threshold_cleared = "You can breathe normally again." - high_threshold_cleared = "The constriction around your chest loosens as your breathing calms down." + low_threshold_passed = span_warning("You feel short of breath.") + high_threshold_passed = span_warning("You feel some sort of constriction around your chest as your breathing becomes shallow and rapid.") + now_fixed = span_warning("Your lungs seem to once again be able to hold air.") + low_threshold_cleared = span_info("You can breathe normally again.") + high_threshold_cleared = span_info("The constriction around your chest loosens as your breathing calms down.") var/failed = FALSE var/operated = FALSE //whether we can still have our damages fixed through surgery @@ -548,7 +548,7 @@ if((prob(nitrium_pp) && (nitrium_pp > 15))) // Nitrium side-effect. breather.adjustOrganLoss(ORGAN_SLOT_LUNGS, nitrium_pp * 0.1) - to_chat(breather, "You feel a burning sensation in your chest") + to_chat(breather, span_notice("You feel a burning sensation in your chest")) // Metabolize to reagents. if (nitrium_pp > 5) var/existing = breather.reagents.get_reagent_amount(/datum/reagent/nitrium_low_metabolization) @@ -593,7 +593,7 @@ * * breather: A carbon mob that is using the lungs to breathe. */ /obj/item/organ/internal/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather) - if(breather.status_flags & GODMODE) + if(HAS_TRAIT(breather, TRAIT_GODMODE)) breather.failed_last_breath = FALSE breather.clear_alert(ALERT_NOT_ENOUGH_OXYGEN) return FALSE diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm index db7134f48e677..888d099faa270 100644 --- a/code/modules/surgery/organs/internal/stomach/_stomach.dm +++ b/code/modules/surgery/organs/internal/stomach/_stomach.dm @@ -15,10 +15,10 @@ healing_factor = STANDARD_ORGAN_HEALING decay_factor = STANDARD_ORGAN_DECAY * 1.15 // ~13 minutes, the stomach is one of the first organs to die - low_threshold_passed = "Your stomach flashes with pain before subsiding. Food doesn't seem like a good idea right now." - high_threshold_passed = "Your stomach flares up with constant pain- you can hardly stomach the idea of food right now!" - high_threshold_cleared = "The pain in your stomach dies down for now, but food still seems unappealing." - low_threshold_cleared = "The last bouts of pain in your stomach have died out." + low_threshold_passed = span_info("Your stomach flashes with pain before subsiding. Food doesn't seem like a good idea right now.") + high_threshold_passed = span_warning("Your stomach flares up with constant pain- you can hardly stomach the idea of food right now!") + high_threshold_cleared = span_info("The pain in your stomach dies down for now, but food still seems unappealing.") + low_threshold_cleared = span_info("The last bouts of pain in your stomach have died out.") food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5) //This is a reagent user and needs more then the 10u from edible component diff --git a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm index 5b117017ae99b..886a8f2deb7e8 100644 --- a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm +++ b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm @@ -10,7 +10,7 @@ /obj/item/organ/internal/stomach/ethereal/Initialize(mapload) . = ..() - cell = new /obj/item/stock_parts/power_store/cell/ethereal(null) + cell = new /obj/item/stock_parts/power_store/cell/ethereal(src) /obj/item/organ/internal/stomach/ethereal/Destroy() QDEL_NULL(cell) @@ -105,7 +105,7 @@ //fixed_mut_color is also ethereal color (for some reason) carbon.flash_lighting_fx(5, 7, human.dna.species.fixed_mut_color ? human.dna.species.fixed_mut_color : human.dna.features["mcolor"]) - playsound(carbon, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) + playsound(carbon, 'sound/effects/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) carbon.cut_overlay(overcharge) // Only a small amount of the energy gets discharged as the zap. The rest dissipates as heat. Keeps the damage and energy from the zap the same regardless of what STANDARD_CELL_CHARGE is. var/discharged_energy = -adjust_charge(ETHEREAL_CHARGE_FULL - cell.charge()) * min(7500 / STANDARD_CELL_CHARGE, 1) diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 6467beac078de..a8bc5b61d8525 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -137,8 +137,6 @@ * ageusia from having a non-tasting tongue. */ REMOVE_TRAIT(tongue_owner, TRAIT_AGEUSIA, NO_TONGUE_TRAIT) - if(!sense_of_taste || (organ_flags & ORGAN_FAILING)) - ADD_TRAIT(tongue_owner, TRAIT_AGEUSIA, ORGAN_TRAIT) apply_tongue_effects() /obj/item/organ/internal/tongue/Remove(mob/living/carbon/tongue_owner, special, movement_flags) @@ -159,7 +157,6 @@ /// Applies effects to our owner based on how damaged our tongue is /obj/item/organ/internal/tongue/proc/apply_tongue_effects() - //tongues can't taste food when they are failing if(sense_of_taste) //tongues can't taste food when they are failing if(organ_flags & ORGAN_FAILING) @@ -410,7 +407,7 @@ var/message = speech_args[SPEECH_MESSAGE] var/mob/living/carbon/human/user = source var/rendered = span_abductor("[user.real_name]: [message]") - user.log_talk(message, LOG_SAY, tag="abductor") + user.log_talk(message, LOG_SAY, tag=SPECIES_ABDUCTOR) for(var/mob/living/carbon/human/living_mob in GLOB.alive_mob_list) var/obj/item/organ/internal/tongue/abductor/tongue = living_mob.get_organ_slot(ORGAN_SLOT_TONGUE) if(!istype(tongue)) @@ -620,7 +617,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) say_mod = "meows" liked_foodtypes = SEAFOOD | ORANGES | BUGS | GORE disliked_foodtypes = GROSS | CLOTH | RAW - organ_traits = list(TRAIT_WOUND_LICKER) + organ_traits = list(TRAIT_WOUND_LICKER, TRAIT_FISH_EATER) /obj/item/organ/internal/tongue/jelly name = "jelly tongue" diff --git a/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm b/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm index 9183c7eb80944..2ef245894bd23 100644 --- a/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm +++ b/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm @@ -61,7 +61,7 @@ . = ..() if(!.) return - var/command = tgui_input_text(owner, "Speak with the Voice of God", "Command") + var/command = tgui_input_text(owner, "Speak with the Voice of God", "Command", max_length = MAX_MESSAGE_LEN) if(!command) return if(QDELETED(src) || QDELETED(owner)) @@ -79,7 +79,7 @@ return owner.can_speak() /obj/item/organ/internal/vocal_cords/colossus/handle_speech(message) - playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 300, TRUE, 5) + playsound(get_turf(owner), 'sound/effects/magic/clockwork/invoke_general.ogg', 300, TRUE, 5) return //voice of god speaks for us /obj/item/organ/internal/vocal_cords/colossus/speak_with(message) @@ -103,7 +103,7 @@ /datum/action/item_action/organ_action/use/adamantine_vocal_cords/Trigger(trigger_flags) if(!IsAvailable(feedback = TRUE)) return - var/message = tgui_input_text(owner, "Resonate a message to all nearby golems", "Resonate") + var/message = tgui_input_text(owner, "Resonate a message to all nearby golems", "Resonate", max_length = MAX_MESSAGE_LEN) if(!message) return if(QDELETED(src) || QDELETED(owner)) diff --git a/code/modules/surgery/organs/organ_movement.dm b/code/modules/surgery/organs/organ_movement.dm index ff9f753ce18a1..bcd85ed39ff2b 100644 --- a/code/modules/surgery/organs/organ_movement.dm +++ b/code/modules/surgery/organs/organ_movement.dm @@ -210,6 +210,7 @@ item_flags &= ~ABSTRACT REMOVE_TRAIT(src, TRAIT_NODROP, ORGAN_INSIDE_BODY_TRAIT) interaction_flags_item |= INTERACT_ITEM_ATTACK_HAND_PICKUP + SEND_SIGNAL(src, COMSIG_ORGAN_BODYPART_REMOVED, limb, movement_flags) // BUBBER CHANGE, added COMSIG_ORGAN_BODYPART_REMOVED to on_bodypart_remove /// In space station videogame, nothing is sacred. If somehow an organ is removed unexpectedly, handle it properly /obj/item/organ/proc/forced_removal() @@ -223,7 +224,7 @@ 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 + * Proc that gets called when the organ is surgic d for special effects */ /obj/item/organ/proc/on_surgical_removal(mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool) SHOULD_CALL_PARENT(TRUE) diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 0d452d851f266..a9905513e8c65 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -34,9 +34,9 @@ /obj/item/stack/sheet/plastic = 100, /obj/item/stack/sheet/meat = 100) time = 3.2 SECONDS - preop_sound = 'sound/effects/blobattack.ogg' - success_sound = 'sound/effects/attackblob.ogg' - failure_sound = 'sound/effects/blobattack.ogg' + preop_sound = 'sound/effects/blob/blobattack.ogg' + success_sound = 'sound/effects/blob/attackblob.ogg' + failure_sound = 'sound/effects/blob/blobattack.ogg' /datum/surgery_step/insert_plastic/preop(mob/user, mob/living/target, target_zone, obj/item/stack/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/repair_puncture.dm b/code/modules/surgery/repair_puncture.dm index 0d2e2d3123ca4..b916668433f08 100644 --- a/code/modules/surgery/repair_puncture.dm +++ b/code/modules/surgery/repair_puncture.dm @@ -45,7 +45,7 @@ TOOL_SCALPEL = 85, TOOL_WIRECUTTER = 40) time = 3 SECONDS - preop_sound = 'sound/surgery/hemostat1.ogg' + preop_sound = 'sound/items/handling/surgery/hemostat1.ogg' surgery_effects_mood = TRUE /datum/surgery_step/repair_innards/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -106,8 +106,8 @@ TOOL_WELDER = 70, /obj/item = 30) time = 4 SECONDS - preop_sound = 'sound/surgery/cautery1.ogg' - success_sound = 'sound/surgery/cautery2.ogg' + preop_sound = 'sound/items/handling/surgery/cautery1.ogg' + success_sound = 'sound/items/handling/surgery/cautery2.ogg' /datum/surgery_step/seal_veins/tool_check(mob/user, obj/item/tool) if(implement_type == TOOL_WELDER || implement_type == /obj/item) diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm index 7dfb4ccd04003..aeade07ef2009 100644 --- a/code/modules/surgery/revival.dm +++ b/code/modules/surgery/revival.dm @@ -47,6 +47,13 @@ return FALSE return TRUE +/datum/surgery/revival/mechanic/is_valid_target(mob/living/patient) + if (iscarbon(patient)) + return FALSE + if (!(patient.mob_biotypes & (MOB_ROBOTIC|MOB_HUMANOID))) + return FALSE + return TRUE + /datum/surgery_step/revive name = "shock brain (defibrillator)" implements = list( @@ -56,8 +63,8 @@ /obj/item/gun/energy = 60) repeatable = TRUE time = 5 SECONDS - success_sound = 'sound/magic/lightningbolt.ogg' - failure_sound = 'sound/magic/lightningbolt.ogg' + success_sound = 'sound/effects/magic/lightningbolt.ogg' + failure_sound = 'sound/effects/magic/lightningbolt.ogg' /datum/surgery_step/revive/tool_check(mob/user, obj/item/tool) . = TRUE @@ -91,7 +98,7 @@ /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)) - playsound(tool, 'sound/machines/defib_charge.ogg', 75, 0) + playsound(tool, 'sound/machines/defib/defib_charge.ogg', 75, 0) else ..() diff --git a/code/modules/surgery/sleeper_protocol.dm b/code/modules/surgery/sleeper_protocol.dm index 277a8c170d6d3..23b02aeda801d 100644 --- a/code/modules/surgery/sleeper_protocol.dm +++ b/code/modules/surgery/sleeper_protocol.dm @@ -67,8 +67,8 @@ TOOL_WIRECUTTER = 50, /obj/item/stack/package_wrap = 35, /obj/item/stack/cable_coil = 15) - preop_sound = 'sound/surgery/hemostat1.ogg' - success_sound = 'sound/surgery/hemostat1.ogg' + preop_sound = 'sound/items/handling/surgery/hemostat1.ogg' + success_sound = 'sound/items/handling/surgery/hemostat1.ogg' /datum/surgery_step/brainwash/sleeper_agent/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) objective = pick(possible_objectives) diff --git a/code/modules/surgery/stomachpump.dm b/code/modules/surgery/stomachpump.dm index 4d6dca105dacf..4880f9329646f 100644 --- a/code/modules/surgery/stomachpump.dm +++ b/code/modules/surgery/stomachpump.dm @@ -36,7 +36,7 @@ accept_hand = TRUE repeatable = TRUE time = 20 - success_sound = 'sound/surgery/organ2.ogg' + success_sound = 'sound/items/handling/surgery/organ2.ogg' /datum/surgery_step/stomach_pump/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index a555548e43268..d23267fa326bd 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -124,6 +124,8 @@ if(isnull(step)) return FALSE var/obj/item/tool = user.get_active_held_item() + if(tool) + tool = tool.get_proxy_attacker_for(target, user) if(step.try_op(user, target, user.zone_selected, tool, src, try_to_fail)) return TRUE if(tool && tool.item_flags & SURGICAL_TOOL) //Just because you used the wrong tool it doesn't mean you meant to whack the patient with it diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index b1bae3944d0a4..c1891d4f18898 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -181,6 +181,7 @@ surgery.step_in_progress = FALSE return advance #undef SURGERY_SPEEDUP_AREA // SKYRAT EDIT ADDITION + /** * Handles updating the mob's mood depending on the surgery states. * * surgery_state = SURGERY_STATE_STARTED, SURGERY_STATE_FAILURE, SURGERY_STATE_SUCCESS @@ -195,7 +196,7 @@ target.clear_mood_event(SURGERY_MOOD_CATEGORY) //incase they gained the trait mid-surgery. has the added side effect that if someone has a bad surgical memory/mood and gets drunk & goes back to surgery, they'll forget they hated it, which is kinda funny imo. return if(target.stat >= UNCONSCIOUS) - var/datum/mood_event/surgery/target_mood_event = target.mob_mood.mood_events[SURGERY_MOOD_CATEGORY] + var/datum/mood_event/surgery/target_mood_event = target.mob_mood?.mood_events[SURGERY_MOOD_CATEGORY] if(!target_mood_event || target_mood_event.surgery_completed) //don't give sleeping mobs trauma. that said, if they fell asleep mid-surgery after already getting the bad mood, lets make sure they wake up to a (hopefully) happy memory. return switch(surgery_state) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 2bd8f485887f8..fc6480e923908 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -100,7 +100,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, /datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/plasma =SHEET_MATERIAL_AMOUNT, /datum/material/uranium = SHEET_MATERIAL_AMOUNT*1.5, /datum/material/titanium = SHEET_MATERIAL_AMOUNT*1.5) - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' w_class = WEIGHT_CLASS_NORMAL toolspeed = 0.7 light_system = OVERLAY_LIGHT @@ -139,7 +139,7 @@ set_light_color(LIGHT_COLOR_ORANGE) balloon_alert(user, "lenses set to [active ? "drill" : "mend"]") - playsound(user ? user : src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(user ? user : src, 'sound/items/weapons/tap.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/cautery/advanced/examine() @@ -154,7 +154,7 @@ inhand_icon_state = "drill" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - hitsound = 'sound/weapons/circsawhit.ogg' + hitsound = 'sound/items/weapons/circsawhit.ogg' custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*3) obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL @@ -191,7 +191,7 @@ /obj/item/surgicaldrill/augment desc = "Effectively a small power drill contained within your arm. May or may not pierce the heavens." - hitsound = 'sound/weapons/circsawhit.ogg' + hitsound = 'sound/items/weapons/circsawhit.ogg' w_class = WEIGHT_CLASS_SMALL toolspeed = 0.5 @@ -214,7 +214,7 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) 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") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED tool_behaviour = TOOL_SCALPEL toolspeed = 1 @@ -255,8 +255,8 @@ inhand_icon_state = "saw" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' - hitsound = 'sound/weapons/circsawhit.ogg' - mob_throw_hit_sound = 'sound/weapons/pierce.ogg' + hitsound = 'sound/items/weapons/circsawhit.ogg' + mob_throw_hit_sound = 'sound/items/weapons/pierce.ogg' obj_flags = CONDUCTS_ELECTRICITY item_flags = SURGICAL_TOOL force = 15 @@ -281,7 +281,7 @@ speed = 4 SECONDS * toolspeed, \ effectiveness = 100, \ bonus_modifier = 5, \ - butcher_sound = 'sound/weapons/circsawhit.ogg', \ + butcher_sound = 'sound/items/weapons/circsawhit.ogg', \ ) //saws are very accurate and fast at butchering var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/chainsaw) @@ -372,7 +372,7 @@ if(!istype(design_holder, /obj/item/disk/surgery) && !istype(design_holder, /obj/machinery/computer/operating)) return NONE balloon_alert(user, "copying designs...") - playsound(src, 'sound/machines/terminal_processing.ogg', 25, TRUE) + playsound(src, 'sound/machines/terminal/terminal_processing.ogg', 25, TRUE) if(do_after(user, 1 SECONDS, target = design_holder)) if(istype(design_holder, /obj/item/disk/surgery)) var/obj/item/disk/surgery/surgery_disk = design_holder @@ -380,7 +380,7 @@ else var/obj/machinery/computer/operating/surgery_computer = design_holder loaded_surgeries |= surgery_computer.advanced_surgeries - playsound(src, 'sound/machines/terminal_success.ogg', 25, TRUE) + playsound(src, 'sound/machines/terminal/terminal_success.ogg', 25, TRUE) downloaded = TRUE update_appearance(UPDATE_OVERLAYS) return ITEM_INTERACT_SUCCESS @@ -408,7 +408,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 =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =SHEET_MATERIAL_AMOUNT, /datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/diamond =SMALL_MATERIAL_AMOUNT * 2, /datum/material/titanium = SHEET_MATERIAL_AMOUNT*2) - hitsound = 'sound/weapons/blade1.ogg' + hitsound = 'sound/items/weapons/blade1.ogg' force = 16 w_class = WEIGHT_CLASS_NORMAL toolspeed = 0.7 @@ -496,7 +496,7 @@ tool_behaviour = (active ? TOOL_HEMOSTAT : TOOL_RETRACTOR) balloon_alert(user, "gears set to [active ? "clamp" : "retract"]") - playsound(user ? user : src, 'sound/items/change_drill.ogg', 50, TRUE) + playsound(user ? user : src, 'sound/items/tools/change_drill.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/retractor/advanced/examine() @@ -556,14 +556,14 @@ var/amputation_speed_mod = 1 patient.visible_message(span_danger("[user] begins to secure [src] around [patient]'s [candidate_name]."), span_userdanger("[user] begins to secure [src] around your [candidate_name]!")) - playsound(get_turf(patient), 'sound/items/ratchet.ogg', 20, TRUE) + playsound(get_turf(patient), 'sound/items/tools/ratchet.ogg', 20, TRUE) if(patient.stat >= UNCONSCIOUS || HAS_TRAIT(patient, TRAIT_INCAPACITATED)) //if you're incapacitated (due to paralysis, a stun, being in staminacrit, etc.), critted, unconscious, or dead, it's much easier to properly line up a snip amputation_speed_mod *= 0.5 if(patient.stat != DEAD && patient.has_status_effect(/datum/status_effect/jitter)) //jittering will make it harder to secure the shears, even if you can't otherwise move amputation_speed_mod *= 1.5 //15*0.5*1.5=11.25, so staminacritting someone who's jittering (from, say, a stun baton) won't give you enough time to snip their head off, but staminacritting someone who isn't jittering will if(do_after(user, toolspeed * 15 SECONDS * amputation_speed_mod, target = patient)) - playsound(get_turf(patient), 'sound/weapons/bladeslice.ogg', 250, TRUE) + playsound(get_turf(patient), 'sound/items/weapons/bladeslice.ogg', 250, TRUE) if(user.zone_selected == BODY_ZONE_PRECISE_GROIN) //OwO tail_snip_candidate.Remove(patient) tail_snip_candidate.forceMove(get_turf(patient)) @@ -583,7 +583,7 @@ if(thing.body_part == CHEST) continue addtimer(CALLBACK(thing, TYPE_PROC_REF(/obj/item/bodypart/, dismember)), timer) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), user, 'sound/weapons/bladeslice.ogg', 70), timer) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), user, 'sound/items/weapons/bladeslice.ogg', 70), timer) timer += 1 SECONDS sleep(timer) return BRUTELOSS @@ -644,7 +644,7 @@ for(var/key in whitelist) .["whitelist"] += whitelist[key] -/obj/item/blood_filter/ui_act(action, params) +/obj/item/blood_filter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index f4806f7adb97c..29ea239ad84db 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.9.0" +"5.10.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index 92c7a8388a711..a47bfd78000bc 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -95,6 +95,7 @@ #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" #define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage" +#define DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT "clientCount" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" #define DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES "chatResponses" diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index e1f2cb6385789..59e5e63e5cd42 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -149,7 +149,9 @@ if(DMAPI5_TOPIC_COMMAND_HEALTHCHECK) if(event_handler && event_handler.receive_health_checks) event_handler.HandleEvent(TGS_EVENT_HEALTH_CHECK) - return TopicResponse() + var/list/health_check_response = TopicResponse() + health_check_response[DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT] = TGS_CLIENT_COUNT + return health_check_response; if(DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH) detached = FALSE diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index 237207fdfd056..acd19dfa6411c 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -18,7 +18,6 @@ #undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER #undef DMAPI5_PARAMETER_CUSTOM_COMMANDS -#undef DMAPI5_PARAMETER_TOPIC_PORT #undef DMAPI5_CHUNK #undef DMAPI5_CHUNK_PAYLOAD @@ -95,6 +94,7 @@ #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION #undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE +#undef DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm index dc3d543f14364..a29279457a04a 100644 --- a/code/modules/tgui/states.dm +++ b/code/modules/tgui/states.dm @@ -67,7 +67,7 @@ else if(stat) return UI_DISABLED // Update UIs if incapicitated but concious. - else if(incapacitated()) + else if(incapacitated) return UI_UPDATE return UI_INTERACTIVE diff --git a/code/modules/tgui/states/not_incapacitated.dm b/code/modules/tgui/states/not_incapacitated.dm index f7278c86de473..ab8cd5f6246fd 100644 --- a/code/modules/tgui/states/not_incapacitated.dm +++ b/code/modules/tgui/states/not_incapacitated.dm @@ -29,6 +29,6 @@ GLOBAL_DATUM_INIT(not_incapacitated_turf_state, /datum/ui_state/not_incapacitate /datum/ui_state/not_incapacitated_state/can_use_topic(src_object, mob/user) if(user.stat != CONSCIOUS) return UI_CLOSE - if(HAS_TRAIT(src, TRAIT_UI_BLOCKED) || user.incapacitated() || (turf_check && !isturf(user.loc))) + if(HAS_TRAIT(src, TRAIT_UI_BLOCKED) || user.incapacitated || (turf_check && !isturf(user.loc))) return UI_DISABLED return UI_INTERACTIVE diff --git a/code/modules/tgui_input/alert.dm b/code/modules/tgui_input/alert.dm index 4749ef278725e..0b12184ba7a88 100644 --- a/code/modules/tgui_input/alert.dm +++ b/code/modules/tgui_input/alert.dm @@ -120,7 +120,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_alert/ui_act(action, list/params) +/datum/tgui_alert/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/checkboxes.dm b/code/modules/tgui_input/checkboxes.dm index 53b264038dc20..9e548b9c13640 100644 --- a/code/modules/tgui_input/checkboxes.dm +++ b/code/modules/tgui_input/checkboxes.dm @@ -115,7 +115,7 @@ return data -/datum/tgui_checkbox_input/ui_act(action, list/params) +/datum/tgui_checkbox_input/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/keycombo.dm b/code/modules/tgui_input/keycombo.dm index 948dbaea234a8..7a9e8399a8cfb 100644 --- a/code/modules/tgui_input/keycombo.dm +++ b/code/modules/tgui_input/keycombo.dm @@ -8,7 +8,7 @@ * * user - The user to show the number input to. * * message - The content of the number input, shown in the body of the TGUI window. * * title - The title of the number input modal, shown on the top of the TGUI window. - * * default - The default (or current) key, shown as a placeholder. + * * default - The default (or current) key, shown as a placeholder. */ /proc/tgui_input_keycombo(mob/user = usr, message, title = "Key Input", default = 0, timeout = 0, ui_state = GLOB.always_state) if (!istype(user)) @@ -107,7 +107,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_input_keycombo/ui_act(action, list/params) +/datum/tgui_input_keycombo/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm index 22c6d48edfc5a..fcee265e5a8b4 100644 --- a/code/modules/tgui_input/list.dm +++ b/code/modules/tgui_input/list.dm @@ -137,7 +137,7 @@ data["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) return data -/datum/tgui_list_input/ui_act(action, list/params) +/datum/tgui_list_input/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/number.dm b/code/modules/tgui_input/number.dm index 68998acb0331f..0266610b84c99 100644 --- a/code/modules/tgui_input/number.dm +++ b/code/modules/tgui_input/number.dm @@ -136,7 +136,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_input_number/ui_act(action, list/params) +/datum/tgui_input_number/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm index 806696dcf4f44..2476ec163422c 100644 --- a/code/modules/tgui_input/text.dm +++ b/code/modules/tgui_input/text.dm @@ -15,7 +15,7 @@ * * encode - Toggling this determines if input is filtered via html_encode. Setting this to FALSE gives raw input. * * timeout - The timeout of the textbox, after which the modal will close and qdel itself. Set to zero for no timeout. */ -/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0, ui_state = GLOB.always_state) +/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = INFINITY, multiline = FALSE, encode = TRUE, timeout = 0, ui_state = GLOB.always_state) if (!user) user = usr if (!istype(user)) @@ -133,7 +133,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_input_text/ui_act(action, list/params) +/datum/tgui_input_text/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm index 9fb8b02b0196c..a680056b0e5e7 100644 --- a/code/modules/tgui_panel/tgui_panel.dm +++ b/code/modules/tgui_panel/tgui_panel.dm @@ -61,7 +61,7 @@ */ /datum/tgui_panel/proc/on_initialize_timed_out() // Currently does nothing but sending a message to old chat. - SEND_TEXT(client, "Failed to load fancy chat, click HERE to attempt to reload it.") + SEND_TEXT(client, span_userdanger("Failed to load fancy chat, click HERE to attempt to reload it.")) /** * private diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index 9956305db26e0..f3c691ce3e953 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -37,7 +37,7 @@ Notes: /datum/tooltip/proc/show(atom/movable/thing, params = null, title = null, content = null, theme = "default", special = "none") - if (!thing || !params || (!title && !content) || !owner || !isnum(world.icon_size)) + if (!thing || !params || (!title && !content) || !owner || !isnum(ICON_SIZE_ALL)) return FALSE if (!isnull(last_target)) @@ -50,7 +50,7 @@ Notes: if (!init) //Initialize some vars init = 1 - owner << output(list2params(list(world.icon_size, control)), "[control]:tooltip.init") + owner << output(list2params(list(ICON_SIZE_ALL, control)), "[control]:tooltip.init") showing = 1 diff --git a/code/modules/transport/_transport_machinery.dm b/code/modules/transport/_transport_machinery.dm index a51d6d840d372..6028510293815 100644 --- a/code/modules/transport/_transport_machinery.dm +++ b/code/modules/transport/_transport_machinery.dm @@ -125,7 +125,7 @@ machine.balloon_alert(user, "interrupted!") return FALSE - playsound(src, 'sound/machines/synth_yes.ogg', 75, use_reverb = TRUE) + playsound(src, 'sound/machines/synth/synth_yes.ogg', 75, use_reverb = TRUE) machine.balloon_alert(user, "success!") UnregisterSignal(src, repair_signals) LAZYNULL(repair_signals) diff --git a/code/modules/transport/elevator/elev_controller.dm b/code/modules/transport/elevator/elev_controller.dm index 870211ecb56d9..ce49efafe4bd8 100644 --- a/code/modules/transport/elevator/elev_controller.dm +++ b/code/modules/transport/elevator/elev_controller.dm @@ -106,7 +106,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/elevator, 32) // Actually try to call the elevator - this sleeps. // If we failed to call it, play a buzz sound. if(!call_elevator(activator)) - playsound(loc, 'sound/machines/buzz-two.ogg', 50, TRUE) + playsound(loc, 'sound/machines/buzz/buzz-two.ogg', 50, TRUE) // Finally, give people a chance to get off after it's done before going back off cooldown COOLDOWN_START(src, elevator_cooldown, 2 SECONDS) @@ -154,7 +154,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/elevator, 32) if(!QDELETED(prime_lift) && prime_lift.z != loc.z) if(!QDELETED(activator)) loc.balloon_alert(activator, "elevator out of service!") - playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(loc, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return TRUE // Everything went according to plan diff --git a/code/modules/transport/elevator/elev_panel.dm b/code/modules/transport/elevator/elev_panel.dm index 0b5e99bdbb059..659049a7448ca 100644 --- a/code/modules/transport/elevator/elev_panel.dm +++ b/code/modules/transport/elevator/elev_panel.dm @@ -299,7 +299,7 @@ return data -/obj/machinery/elevator_control_panel/ui_act(action, list/params) +/obj/machinery/elevator_control_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/transport/linear_controller.dm b/code/modules/transport/linear_controller.dm index 1b3ffd30c148f..0388fe11482f3 100644 --- a/code/modules/transport/linear_controller.dm +++ b/code/modules/transport/linear_controller.dm @@ -345,7 +345,7 @@ var/obj/structure/transport/linear/prime_lift = return_closest_platform_to_z(direction == UP ? world.maxz : 0) // ...because we use the duration of the sound effect to make it last for roughly the duration of the lift travel - playsound(prime_lift, 'sound/mecha/hydraulic.ogg', 25, vary = TRUE, frequency = clamp(HYDRAULIC_SFX_DURATION / lift_move_duration, 0.33, 3)) + playsound(prime_lift, 'sound/vehicles/mecha/hydraulic.ogg', 25, vary = TRUE, frequency = clamp(HYDRAULIC_SFX_DURATION / lift_move_duration, 0.33, 3)) // Move the platform after a timer addtimer(CALLBACK(src, PROC_REF(move_lift_vertically), direction, user), lift_move_duration, TIMER_UNIQUE) diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index 955c2ef0ac007..3597a13b76416 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -256,7 +256,7 @@ set_status_code(PRE_DEPARTURE, FALSE) if(controller_status & EMERGENCY_STOP) set_status_code(EMERGENCY_STOP, FALSE) - playsound(paired_cabinet, 'sound/machines/synth_yes.ogg', 40, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(paired_cabinet, 'sound/machines/synth/synth_yes.ogg', 40, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) paired_cabinet.say("Controller reset.") if(malf_active) @@ -346,7 +346,7 @@ addtimer(CALLBACK(src, PROC_REF(unlock_controls)), 2 SECONDS) if((controller_status & SYSTEM_FAULT) && (nav_beacon.loc == destination_platform.loc)) //position matches between controller and tram, we're back on track set_status_code(SYSTEM_FAULT, FALSE) - playsound(paired_cabinet, 'sound/machines/synth_yes.ogg', 40, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(paired_cabinet, 'sound/machines/synth/synth_yes.ogg', 40, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) paired_cabinet.say("Controller reset.") log_transport("TC: [specific_transport_id] position data successfully reset.") speed_limiter = initial(speed_limiter) @@ -366,7 +366,7 @@ addtimer(CALLBACK(src, PROC_REF(unlock_controls)), 4 SECONDS) if(controller_status & SYSTEM_FAULT) set_status_code(SYSTEM_FAULT, FALSE) - playsound(paired_cabinet, 'sound/machines/synth_yes.ogg', 40, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(paired_cabinet, 'sound/machines/synth/synth_yes.ogg', 40, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) paired_cabinet.say("Controller reset.") log_transport("TC: [specific_transport_id] position data successfully reset. ") speed_limiter = initial(speed_limiter) @@ -375,7 +375,7 @@ addtimer(CALLBACK(src, PROC_REF(cycle_doors), CYCLE_OPEN), 2 SECONDS) malf_active = FALSE throw_chance = initial(throw_chance) - playsound(paired_cabinet, 'sound/machines/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(paired_cabinet, 'sound/machines/buzz/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) paired_cabinet.say("Controller error. Please contact your engineering department.") idle_platform = destination_platform tram_registration.distance_travelled += (travel_trip_length - travel_remaining) @@ -393,7 +393,7 @@ /datum/transport_controller/linear/tram/proc/halt_and_catch_fire() if(controller_status & SYSTEM_FAULT) if(!isnull(paired_cabinet)) - playsound(paired_cabinet, 'sound/machines/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(paired_cabinet, 'sound/machines/buzz/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) paired_cabinet.say("Controller error. Please contact your engineering department.") log_transport("TC: [specific_transport_id] Transport Controller failed!") @@ -421,7 +421,7 @@ if(get_turf(idle_platform) == get_turf(nav_beacon)) set_status_code(SYSTEM_FAULT, FALSE) set_status_code(EMERGENCY_STOP, FALSE) - playsound(paired_cabinet, 'sound/machines/synth_yes.ogg', 40, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(paired_cabinet, 'sound/machines/synth/synth_yes.ogg', 40, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) paired_cabinet.say("Controller reset.") log_transport("TC: [specific_transport_id] Transport Controller reset was requested, but the tram nav data seems correct. Info: nav_pos ([nav_beacon.x], [nav_beacon.y], [nav_beacon.z]) idle_pos ([idle_platform.x], [idle_platform.y], [idle_platform.z]).") return @@ -436,7 +436,7 @@ var/reset_beacon = closest_nav_in_travel_dir(nav_beacon, tram_velocity_sign, specific_transport_id) if(!reset_beacon) - playsound(paired_cabinet, 'sound/machines/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(paired_cabinet, 'sound/machines/buzz/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) paired_cabinet.say("Controller reset failed. Contact manufacturer.") // If you screwed up the tram this bad, I don't even log_transport("TC: [specific_transport_id] non-recoverable error! Tram is at ([nav_beacon.x], [nav_beacon.y], [nav_beacon.z] [tram_velocity_sign ? "OUTBOUND" : "INBOUND"]) and can't find a reset beacon.") message_admins("Tram ID [specific_transport_id] is in a non-recoverable error state at [ADMIN_JMP(nav_beacon)]. If it's causing problems, delete the controller datum from the 'Reset Tram' proc in the Debug tab.") @@ -457,7 +457,7 @@ log_transport("TC: [specific_transport_id] trying to reset at [destination_platform].") /datum/transport_controller/linear/tram/proc/estop() - playsound(paired_cabinet, 'sound/machines/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(paired_cabinet, 'sound/machines/buzz/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) paired_cabinet.say("Emergency stop activated!") set_status_code(EMERGENCY_STOP, TRUE) log_transport("TC: [specific_transport_id] requested emergency stop.") @@ -887,9 +887,9 @@ /obj/machinery/transport/tram_controller/proc/toggle_door() if(!cover_open) - playsound(loc, 'sound/machines/closet_open.ogg', 35, TRUE, -3) + playsound(loc, 'sound/machines/closet/closet_open.ogg', 35, TRUE, -3) else - playsound(loc, 'sound/machines/closet_close.ogg', 50, TRUE, -3) + playsound(loc, 'sound/machines/closet/closet_close.ogg', 50, TRUE, -3) cover_open = !cover_open update_appearance() @@ -1096,7 +1096,7 @@ return data -/obj/machinery/transport/tram_controller/ui_act(action, params) +/obj/machinery/transport/tram_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/transport/tram/tram_controls.dm b/code/modules/transport/tram/tram_controls.dm index 0bfce56aa5c96..308e58cf5f049 100644 --- a/code/modules/transport/tram/tram_controls.dm +++ b/code/modules/transport/tram/tram_controls.dm @@ -130,7 +130,7 @@ this_destination["id"] = destination.platform_code . += list(this_destination) -/obj/machinery/computer/tram_controls/ui_act(action, params) +/obj/machinery/computer/tram_controls/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/transport/tram/tram_doors.dm b/code/modules/transport/tram/tram_doors.dm index 653b5cbabb527..6e1680bcb4c15 100644 --- a/code/modules/transport/tram/tram_doors.dm +++ b/code/modules/transport/tram/tram_doors.dm @@ -14,8 +14,8 @@ air_tight = TRUE req_access = list(ACCESS_TCOMMS) transport_linked_id = TRAMSTATION_LINE_1 - doorOpen = 'sound/machines/tramopen.ogg' - doorClose = 'sound/machines/tramclose.ogg' + doorOpen = 'sound/machines/tram/tramopen.ogg' + doorClose = 'sound/machines/tram/tramclose.ogg' autoclose = FALSE /// Weakref to the tram we're attached var/datum/weakref/transport_ref @@ -43,7 +43,7 @@ update_icon(ALL, AIRLOCK_OPENING, TRUE) if(forced >= BYPASS_DOOR_CHECKS) - playsound(src, 'sound/machines/airlockforced.ogg', vol = 40, vary = FALSE) + playsound(src, 'sound/machines/airlock/airlockforced.ogg', vol = 40, vary = FALSE) sleep(TRAM_DOOR_CYCLE_TIME) else playsound(src, doorOpen, vol = 40, vary = FALSE) @@ -101,7 +101,7 @@ for(var/atom/movable/blocker in checked_turf) if(blocker.density && blocker != src) //something is blocking the door say("Please stand clear of the doors!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) layer = OPEN_DOOR_LAYER update_icon(ALL, AIRLOCK_OPEN, 1) operating = FALSE @@ -167,7 +167,7 @@ close() return - playsound(src, 'sound/machines/buzz-two.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 60, vary = FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) say("YOU'RE HOLDING UP THE TRAM, ASSHOLE!") close(forced = BYPASS_DOOR_CHECKS) @@ -211,7 +211,7 @@ if(!hasPower() && density) balloon_alert(user, "pulling emergency exit...") if(do_after(user, 4 SECONDS, target = src)) - try_to_crowbar(null, user, TRUE) + try_to_crowbar(src, user, TRUE) return TRUE /** diff --git a/code/modules/transport/tram/tram_floors.dm b/code/modules/transport/tram/tram_floors.dm index f267ccf5cdc84..ca3d018b48fe3 100644 --- a/code/modules/transport/tram/tram_floors.dm +++ b/code/modules/transport/tram/tram_floors.dm @@ -266,7 +266,7 @@ if(atom_integrity >= max_integrity) to_chat(user, span_warning("[src] is already in good condition!")) return ITEM_INTERACT_SUCCESS - if(!tool.tool_start_check(user, amount = 0)) + if(!tool.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) return FALSE to_chat(user, span_notice("You begin repairing [src]...")) var/integrity_to_repair = max_integrity - atom_integrity diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index faf4a46e11e28..7f0da9331d613 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -150,8 +150,8 @@ . += span_notice("The orange [EXAMINE_HINT("remote warning")] light is on.") . += span_notice("The status display reads: Check track sensor.") if(TRANSPORT_REMOTE_FAULT) - . += span_notice("The blue [EXAMINE_HINT("remote fault")] light is on.") - . += span_notice("The status display reads: Check tram controller.") + . += span_notice("The blue [EXAMINE_HINT("telecoms failure")] light is on.") + . += span_notice("The status display reads: Check telecommunications network.") if(TRANSPORT_LOCAL_FAULT) . += span_notice("The red [EXAMINE_HINT("local fault")] light is on.") . += span_notice("The status display reads: Repair required.") @@ -246,10 +246,10 @@ operating_status = TRANSPORT_REMOTE_FAULT else operating_status = TRANSPORT_SYSTEM_NORMAL + if(isnull(linked_sensor)) + link_sensor() + wake_sensor() - if(isnull(linked_sensor)) - link_sensor() - wake_sensor() update_operating() /obj/machinery/transport/crossing_signal/on_set_machine_stat() @@ -304,6 +304,8 @@ // degraded signal operating conditions of any type show blue var/idle_aspect = operating_status == TRANSPORT_SYSTEM_NORMAL ? XING_STATE_GREEN : XING_STATE_MALF var/datum/transport_controller/linear/tram/tram = transport_ref?.resolve() + if(tram.controller_status & COMM_ERROR) + idle_aspect = XING_STATE_MALF // Check for stopped states. Will kill the process since tram starting up will restart process. if(!tram || !tram.controller_operational || !tram.controller_active || !is_operational || !inbound || !outbound) @@ -560,7 +562,7 @@ new_partner.paired_sensor = WEAKREF(src) new_partner.set_machine_stat(machine_stat & ~MAINT) new_partner.update_appearance() - playsound(src, 'sound/machines/synth_yes.ogg', 75, vary = FALSE, use_reverb = TRUE) + playsound(src, 'sound/machines/synth/synth_yes.ogg', 75, vary = FALSE, use_reverb = TRUE) /obj/machinery/transport/guideway_sensor/Destroy() SStransport.sensors -= src @@ -569,7 +571,7 @@ divorcee.set_machine_stat(machine_stat & ~MAINT) divorcee.paired_sensor = null divorcee.update_appearance() - playsound(src, 'sound/machines/synth_no.ogg', 75, vary = FALSE, use_reverb = TRUE) + playsound(src, 'sound/machines/synth/synth_no.ogg', 75, vary = FALSE, use_reverb = TRUE) paired_sensor = null . = ..() diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm index 368223d11653b..bdea433a9c925 100644 --- a/code/modules/transport/tram/tram_structures.dm +++ b/code/modules/transport/tram/tram_structures.dm @@ -55,9 +55,9 @@ /// Sound when it breaks var/break_sound = SFX_SHATTER /// Sound when hit without combat mode - var/knock_sound = 'sound/effects/glassknock.ogg' + var/knock_sound = 'sound/effects/glass/glassknock.ogg' /// Sound when hit with combat mode - var/bash_sound = 'sound/effects/glassbash.ogg' + var/bash_sound = 'sound/effects/glass/glassbash.ogg' /obj/structure/tram/split base_icon_state = "tram-split" @@ -155,7 +155,7 @@ if(atom_integrity >= max_integrity) to_chat(user, span_warning("[src] is already in good condition!")) return ITEM_INTERACT_SUCCESS - if(!tool.tool_start_check(user, amount = 0)) + if(!tool.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) return FALSE to_chat(user, span_notice("You begin repairing [src]...")) if(tool.use_tool(src, user, 4 SECONDS, volume = 50)) @@ -579,7 +579,7 @@ return FALSE /obj/structure/tram/spoiler/welder_act(mob/living/user, obj/item/tool) - if(!tool.tool_start_check(user, amount = 1)) + if(!tool.tool_start_check(user, amount = 1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return FALSE if(atom_integrity >= max_integrity) diff --git a/code/modules/transport/transport_module.dm b/code/modules/transport/transport_module.dm index af8f4199438db..3e4a5be979fb3 100644 --- a/code/modules/transport/transport_module.dm +++ b/code/modules/transport/transport_module.dm @@ -225,11 +225,11 @@ for(var/y in first_y to last_y) - var/y_pixel_offset = world.icon_size * y + var/y_pixel_offset = ICON_SIZE_Y * y for(var/x in first_x to last_x) - var/x_pixel_offset = world.icon_size * x + var/x_pixel_offset = ICON_SIZE_X * x var/turf/set_turf = locate(x + min_x, y + min_y, z) @@ -294,8 +294,8 @@ destination = travel_direction travel_direction = get_dir_multiz(loc, travel_direction) - var/x_offset = ROUND_UP(bound_width / 32) - 1 //how many tiles our horizontally farthest edge is from us - var/y_offset = ROUND_UP(bound_height / 32) - 1 //how many tiles our vertically farthest edge is from us + var/x_offset = ROUND_UP(bound_width / ICON_SIZE_X) - 1 //how many tiles our horizontally farthest edge is from us + var/y_offset = ROUND_UP(bound_height / ICON_SIZE_Y) - 1 //how many tiles our vertically farthest edge is from us //the x coordinate of the edge furthest from our future destination, which would be our right hand side var/back_edge_x = destination.x + x_offset//if we arent multitile this should just be destination.x @@ -612,7 +612,7 @@ if(!isliving(user)) return FALSE // Gotta be awake and aware - if(user.incapacitated()) + if(user.incapacitated) return FALSE // Maintain the god given right to fight an elevator if(user.combat_mode) @@ -704,7 +704,7 @@ * * boolean, FALSE if the menu should be closed, TRUE if the menu is clear to stay opened. */ /obj/structure/transport/linear/proc/check_menu(mob/user, starting_loc) - if(user.incapacitated() || !user.Adjacent(src) || starting_loc != src.loc) + if(user.incapacitated || !user.Adjacent(src) || starting_loc != src.loc) return FALSE return TRUE diff --git a/code/modules/tutorials/_tutorial.dm b/code/modules/tutorials/_tutorial.dm index 1211f8e299355..97274a2e32d10 100644 --- a/code/modules/tutorials/_tutorial.dm +++ b/code/modules/tutorials/_tutorial.dm @@ -135,11 +135,11 @@ var/list/origin_offsets = screen_loc_to_offset(initial_screen_loc, view) // A little offset to the right - var/matrix/origin_transform = TRANSLATE_MATRIX(origin_offsets[1] - world.icon_size * 0.5, origin_offsets[2] - world.icon_size * 1.5) + var/matrix/origin_transform = TRANSLATE_MATRIX(origin_offsets[1] - ICON_SIZE_X * 0.5, origin_offsets[2] - ICON_SIZE_Y * 1.5) var/list/target_offsets = screen_loc_to_offset(target_screen_loc, view) // `- world.icon_Size * 0.5` to patch over a likely bug in screen_loc_to_offset with CENTER, needs more looking at - var/matrix/animate_to_transform = TRANSLATE_MATRIX(target_offsets[1] - world.icon_size * 1.5, target_offsets[2] - world.icon_size) + var/matrix/animate_to_transform = TRANSLATE_MATRIX(target_offsets[1] - ICON_SIZE_X * 1.5, target_offsets[2] - ICON_SIZE_Y) preview.transform = origin_transform diff --git a/code/modules/tutorials/tutorial_instruction.dm b/code/modules/tutorials/tutorial_instruction.dm index 0ad9ce6f2e0fe..d5a1734978a37 100644 --- a/code/modules/tutorials/tutorial_instruction.dm +++ b/code/modules/tutorials/tutorial_instruction.dm @@ -38,7 +38,7 @@ var/view = client?.view_size.getView() maptext_width = view ? view_to_pixels(view)[1] : 480 - pixel_x = (maptext_width - world.icon_size) * -0.5 + pixel_x = (maptext_width - ICON_SIZE_X) * -0.5 change_message(message) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index bba964617b107..234e810bc2282 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -107,6 +107,7 @@ #include "breath.dm" #include "burning.dm" #include "cable_powernets.dm" +#include "can_see.dm" #include "card_mismatch.dm" #include "cardboard_cutouts.dm" #include "cargo_dep_order_locations.dm" diff --git a/code/modules/unit_tests/anonymous_themes.dm b/code/modules/unit_tests/anonymous_themes.dm index a58f60eab3bd7..99cd4f82802ac 100644 --- a/code/modules/unit_tests/anonymous_themes.dm +++ b/code/modules/unit_tests/anonymous_themes.dm @@ -12,7 +12,7 @@ client.prefs.write_preference(GLOB.preference_entries[/datum/preference/name/real_name], "Prefs Biddle") - human.apply_prefs_job(client, SSjob.GetJobType(/datum/job/assistant)) + human.apply_prefs_job(client, SSjob.get_job_type(/datum/job/assistant)) TEST_ASSERT_NOTEQUAL(human.real_name, "Prefs Biddle", "apply_prefs_job didn't randomize human name with an anonymous theme") TEST_ASSERT_EQUAL(client.prefs.read_preference(/datum/preference/name/real_name), "Prefs Biddle", "Anonymous theme overrode original prefs") diff --git a/code/modules/unit_tests/can_see.dm b/code/modules/unit_tests/can_see.dm new file mode 100644 index 0000000000000..cb7f7bef047ee --- /dev/null +++ b/code/modules/unit_tests/can_see.dm @@ -0,0 +1,7 @@ +/// Unit test to make sure can_see is working properly +/datum/unit_test/can_see_test + +/datum/unit_test/can_see_test/Run() + var/mob/living/carbon/human/observer = allocate(/mob/living/carbon/human/consistent, run_loc_floor_bottom_left) //make sure they're both apart + var/mob/living/carbon/human/to_be_seen = allocate(/mob/living/carbon/human/consistent, run_loc_floor_top_right) + TEST_ASSERT(can_see(observer, to_be_seen, get_dist(observer, to_be_seen)), "can_see returned false despite dummies being able to see one another!") diff --git a/code/modules/unit_tests/dummy_spawn.dm b/code/modules/unit_tests/dummy_spawn.dm index ed359f962b7d0..6ec59eaaa506c 100644 --- a/code/modules/unit_tests/dummy_spawn.dm +++ b/code/modules/unit_tests/dummy_spawn.dm @@ -16,7 +16,7 @@ /datum/unit_test/dummy_spawn_outfit/Run() var/mob/living/carbon/human/dummy/lad = allocate(/mob/living/carbon/human/dummy) for(var/datum/job/one_two_three as anything in subtypesof(/datum/job)) - var/datum/job/can_you_hear_this = SSjob.GetJobType(one_two_three) + var/datum/job/can_you_hear_this = SSjob.get_job_type(one_two_three) if(!can_you_hear_this) log_test("\tJob type [one_two_three] could not be retrieved from SSjob") continue diff --git a/code/modules/unit_tests/embedding.dm b/code/modules/unit_tests/embedding.dm index a163a55c36479..05e8cc8b8aa27 100644 --- a/code/modules/unit_tests/embedding.dm +++ b/code/modules/unit_tests/embedding.dm @@ -8,9 +8,7 @@ TEST_ASSERT_EQUAL(bullet.get_embed().embed_chance, 100, "embed_chance failed to modify") bullet.preparePixelProjectile(victim, firer) bullet.fire(get_angle(firer, victim), victim) - // SKYRAT EDIT REMOVAL START - TODO - Figure out why it's not embedding during the unit test and fix it. var/list/components = victim.GetComponents(/datum/component/embedded) TEST_ASSERT_EQUAL(components.len, 1, "Projectile with 100% embed chance didn't embed, or embedded multiple times") var/datum/component/embedded/comp = components[1] TEST_ASSERT_EQUAL(comp.weapon.get_embed().embed_chance, 100, "embed_chance modification did not transfer to shrapnel") - // SKYRATEDIT REMOVAL END diff --git a/code/modules/unit_tests/fish_unit_tests.dm b/code/modules/unit_tests/fish_unit_tests.dm index 5cb582ca9694a..1bda9875c2648 100644 --- a/code/modules/unit_tests/fish_unit_tests.dm +++ b/code/modules/unit_tests/fish_unit_tests.dm @@ -1,14 +1,46 @@ #define TRAIT_FISH_TESTING "made_you_read_this" +#define FISH_REAGENT_AMOUNT (10 * FISH_WEIGHT_GRIND_TO_BITE_MULT) + +///Ensures that all fish have an aquarium icon state and that sprite_width and sprite_height have been set. +/datum/unit_test/fish_aquarium_icons + +/datum/unit_test/fish_aquarium_icons/Run() + for(var/obj/item/fish/fish as anything in subtypesof(/obj/item/fish)) + if(ispath(fish, /obj/item/fish/testdummy)) //We don't care about unit test fish. + continue + var/init_icon = fish::dedicated_in_aquarium_icon + var/init_icon_state = fish::dedicated_in_aquarium_icon_state || "[fish::icon_state]_small" + if(!icon_exists(init_icon, init_icon_state)) + TEST_FAIL("[fish] with doesn't have a \"[init_icon_state]\" aquarium icon state in [init_icon]. Please make one.") + if(!fish::sprite_width) + TEST_FAIL("[fish] doesn't have a set sprite_width.") + if(!fish::sprite_height) + TEST_FAIL("[fish] doesn't have a set sprite_height.") ///Checks that things associated with fish size and weight work correctly. /datum/unit_test/fish_size_weight /datum/unit_test/fish_size_weight/Run() - var/obj/item/fish/fish = allocate(/obj/item/fish/testdummy) - TEST_ASSERT_EQUAL(fish.grind_results[/datum/reagent], 20, "the test fish has [fish.grind_results[/datum/reagent]] units of reagent when it should have 20") + + var/obj/structure/table/table = allocate(/obj/structure/table) + var/obj/item/fish/testdummy/fish = new /obj/item/fish/testdummy (table.loc) + allocated += fish + var/datum/reagent/reagent = fish.reagents?.has_reagent(/datum/reagent/fishdummy) + TEST_ASSERT(reagent, "the test fish doesn't have the test reagent.[fish.reagents ? "" : " It doesn't even have a reagent holder."]") + var/expected_units = FISH_REAGENT_AMOUNT * fish.weight / FISH_WEIGHT_BITE_DIVISOR + TEST_ASSERT_EQUAL(reagent.volume, expected_units, "the test fish has [reagent.volume] units of the test reagent when it should have [expected_units]") TEST_ASSERT_EQUAL(fish.w_class, WEIGHT_CLASS_BULKY, "the test fish has w_class of [fish.w_class] when it should have been [WEIGHT_CLASS_BULKY]") - var/expected_num_fillets = round(FISH_SIZE_BULKY_MAX / FISH_FILLET_NUMBER_SIZE_DIVISOR * 2, 1) - TEST_ASSERT_EQUAL(fish.num_fillets, expected_num_fillets, "the test fish has [fish.num_fillets] number of fillets when it should have [expected_num_fillets]") + var/mob/living/carbon/human/consistent/chef = allocate(/mob/living/carbon/human/consistent) + var/obj/item/knife/kitchen/blade = allocate(/obj/item/knife/kitchen) + var/fish_fillet_type = fish.fillet_type + var/expected_num_fillets = fish.expected_num_fillets + blade.melee_attack_chain(chef, fish) + var/counted_fillets = 0 + for(var/atom/movable/content as anything in table.loc.contents) + if(istype(content, fish_fillet_type)) + counted_fillets++ + allocated += content + TEST_ASSERT_EQUAL(counted_fillets, expected_num_fillets, "the test fish yielded [counted_fillets] fillets when it should have been [expected_num_fillets]") ///Checks that fish breeding works correctly. /datum/unit_test/fish_breeding @@ -51,7 +83,7 @@ /datum/unit_test/fish_scanning/Run() var/scannable_fishes = 0 for(var/obj/item/fish/fish_prototype as anything in subtypesof(/obj/item/fish)) - if(initial(fish_prototype.experisci_scannable)) + if(initial(fish_prototype.fish_flags) & FISH_FLAG_EXPERIMENT_SCANNABLE) scannable_fishes++ for(var/datum/experiment/scanning/fish/fish_scan as anything in typesof(/datum/experiment/scanning/fish)) fish_scan = new fish_scan @@ -68,6 +100,12 @@ fish_traits = list(/datum/fish_trait/dummy) stable_population = INFINITY breeding_timeout = 0 + fish_flags = parent_type::fish_flags & ~(FISH_FLAG_SHOW_IN_CATALOG|FISH_FLAG_EXPERIMENT_SCANNABLE) + var/expected_num_fillets = 0 //used to know how many fillets should be gotten out of this fish + +/obj/item/fish/testdummy/add_fillet_type() + expected_num_fillets = ..() + return expected_num_fillets /obj/item/fish/testdummy/two fish_traits = list(/datum/fish_trait/dummy/two) @@ -76,16 +114,21 @@ incompatible_traits = list(/datum/fish_trait/dummy/two) inheritability = 100 diff_traits_inheritability = 100 + reagents_to_add = list(/datum/reagent/fishdummy = FISH_REAGENT_AMOUNT) /datum/fish_trait/dummy/apply_to_fish(obj/item/fish/fish) + . = ..() ADD_TRAIT(fish, TRAIT_FISH_TESTING, FISH_TRAIT_DATUM) - fish.grind_results[/datum/reagent] = 10 /datum/fish_trait/dummy/two incompatible_traits = list(/datum/fish_trait/dummy) +/datum/reagent/fishdummy + name = "fish test reagent" + description = "It smells fishy." + /obj/structure/aquarium/traits - allow_breeding = TRUE + reproduction_and_growth = TRUE var/obj/item/fish/testdummy/crossbreeder/crossbreeder var/obj/item/fish/testdummy/cloner/cloner var/obj/item/fish/testdummy/sterile/sterile @@ -112,7 +155,7 @@ fish_traits = list(/datum/fish_trait/no_mating) /obj/structure/aquarium/evolution - allow_breeding = TRUE + reproduction_and_growth = TRUE var/obj/item/fish/testdummy/evolve/evolve var/obj/item/fish/testdummy/evolve_two/evolve_two @@ -139,7 +182,9 @@ new_fish_type = /obj/item/fish/clownfish new_traits = list(/datum/fish_trait/dummy/two) removed_traits = list(/datum/fish_trait/dummy) + show_on_wiki = FALSE +///This is used by both fish_evolution and fish_growth unit tests. /datum/fish_evolution/dummy/two new_fish_type = /obj/item/fish/goldfish @@ -147,6 +192,60 @@ . = ..() probability = 0 //works around the global list initialization skipping abstract/impossible evolutions. +///During the fish_growth unit test, we spawn a fish outside of the aquarium and check that this actually stops it from growing +/datum/fish_evolution/dummy/two/growth_checks(obj/item/fish/source, seconds_per_tick, growth) + . = ..() + if(!isaquarium(source.loc)) + return COMPONENT_DONT_GROW + +///A test that checks that fishing portals can be linked and function as expected +/datum/unit_test/fish_portal_gen_linking + +/datum/unit_test/fish_portal_gen_linking/Run() + var/mob/living/carbon/human/consistent/user = allocate(/mob/living/carbon/human/consistent) + var/obj/machinery/fishing_portal_generator/portal = allocate(/obj/machinery/fishing_portal_generator/no_power) + var/obj/structure/toilet/unit_test/fishing_spot = new(get_turf(user)) //This is deleted during the test + var/obj/structure/moisture_trap/extra_spot = allocate(/obj/structure/moisture_trap) + var/obj/machinery/hydroponics/constructable/inaccessible = allocate(/obj/machinery/hydroponics/constructable) + ADD_TRAIT(inaccessible, TRAIT_UNLINKABLE_FISHING_SPOT, INNATE_TRAIT) + var/obj/item/multitool/tool = allocate(/obj/item/multitool) + var/datum/fish_source/toilet/fish_source = GLOB.preset_fish_sources[/datum/fish_source/toilet] + + portal.max_fishing_spots = 1 //We've no scrying orb to know if it'll be buffed or nerfed this in the future. We only have space for one here. + portal.activate(fish_source, user) + TEST_ASSERT(!portal.active, "[portal] was activated with a fish source from an unlinked fishing spot") + portal.multitool_act(user, tool) + TEST_ASSERT_EQUAL(tool.buffer, portal, "[portal] wasn't set as buffer for [tool]") + tool.melee_attack_chain(user, fishing_spot) + TEST_ASSERT_EQUAL(LAZYACCESS(portal.linked_fishing_spots, fishing_spot), fish_source, "We tried linking [portal] to the fishing spot but didn't succeed.") + portal.activate(fish_source, user) + TEST_ASSERT(portal.active?.fish_source == fish_source, "[portal] can't acces a fish source from a linked fishing spot") + //Let's move the fishing spot away. This is fine as long as the portal moves to another z level, away from the toilet + var/turf/other_z_turf = pick(GLOB.newplayer_start) + portal.forceMove(other_z_turf) + TEST_ASSERT(!portal.active, "[portal] (not upgraded) is still active though the fishing spot is on another z-level.[portal.z == fishing_spot.z ? " Actually they're still on the same level!" : ""]") + portal.long_range_link = TRUE + portal.activate(fish_source, user) + TEST_ASSERT(portal.active?.fish_source == fish_source, "[portal] can't acces a fish source from a linked fishing spot on a different z-level despite being upgraded") + fishing_spot.forceMove(other_z_turf) + portal.forceMove(get_turf(user)) + TEST_ASSERT(portal.active?.fish_source == fish_source, "[portal] (upgraded) deactivated while changing z-level") + tool.melee_attack_chain(user, extra_spot) + TEST_ASSERT_EQUAL(length(portal.linked_fishing_spots), 1, "We managed to link to another fishing spot when there's only space for one") + TEST_ASSERT_EQUAL(LAZYACCESS(portal.linked_fishing_spots, fishing_spot), fish_source, "linking to another fishing spot fouled up the other linked spots") + QDEL_NULL(fishing_spot) + TEST_ASSERT(!portal.active, "[portal] is still linked to the fish source of the deleted fishing spot it's associated to") + tool.melee_attack_chain(user, inaccessible) + TEST_ASSERT(!length(portal.linked_fishing_spots), "We managed to link to an unlinkable fishing spot") + +/obj/machinery/fishing_portal_generator/no_power + use_power = NO_POWER_USE + +/obj/structure/toilet/unit_test/Initialize(mapload) + . = ..() + if(!HAS_TRAIT(src, TRAIT_FISHING_SPOT)) //Ensure this toilet has a fishing spot because only maploaded ones have it. + AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/toilet) + // we want no default spawns in this unit test /datum/chasm_detritus/restricted/bodies/no_defaults default_contents_chance = 0 @@ -221,29 +320,49 @@ run_loc_floor_bottom_left.ChangeTurf(original_turf_type, original_turf_baseturfs) return ..() -///Check that you can actually raise a chasm crab without errors. -/datum/unit_test/raise_a_chasm_crab +///Check that the fish growth component works. +/datum/unit_test/fish_growth -/datum/unit_test/raise_a_chasm_crab/Run() +/datum/unit_test/fish_growth/Run() var/obj/structure/aquarium/crab/aquarium = allocate(/obj/structure/aquarium/crab) - SEND_SIGNAL(aquarium.crabbie, COMSIG_FISH_LIFE, 1) //give the fish growth component a small push. + var/list/growth_comps = aquarium.crabbie.GetComponents(/datum/component/fish_growth) //Can't use GetComponent() without s because the comp is dupe-selective + var/datum/component/fish_growth/crab_growth = growth_comps[1] + + crab_growth.on_fish_life(aquarium.crabbie, seconds_per_tick = 1) //give the fish growth component a small push. + var/mob/living/basic/mining/lobstrosity/juvenile/lobster = locate() in aquarium.loc + TEST_ASSERT(lobster, "The lobstrosity didn't spawn at all. chasm crab maturation: [crab_growth.maturation]%.") TEST_ASSERT_EQUAL(lobster.loc, get_turf(aquarium), "The lobstrosity didn't spawn on the aquarium's turf") TEST_ASSERT(QDELETED(aquarium.crabbie), "The test aquarium's chasm crab didn't delete itself.") + TEST_ASSERT_EQUAL(lobster.name, "Crabbie", "The lobstrosity didn't inherit the aquarium chasm crab's custom name") allocated |= lobster //make sure it's allocated and thus properly deleted when the test is over + //While ideally impossible to have all traits because of incompatible ones, I want to be sure they don't error out. for(var/trait_type in GLOB.fish_traits) var/datum/fish_trait/trait = GLOB.fish_traits[trait_type] trait.apply_to_mob(lobster) + var/obj/item/fish/testdummy/dummy = allocate(/obj/item/fish/testdummy) + var/datum/component/fish_growth/dummy_growth = dummy.AddComponent(/datum/component/fish_growth, /datum/fish_evolution/dummy/two, 1 SECONDS, use_drop_loc = FALSE) + dummy.last_feeding = world.time + dummy_growth.on_fish_life(dummy, seconds_per_tick = 1) + TEST_ASSERT(!QDELETED(dummy), "The fish has grown when it shouldn't have") + dummy.forceMove(aquarium) + dummy_growth.on_fish_life(dummy, seconds_per_tick = 1) + var/obj/item/fish/dummy_boogaloo = locate(/datum/fish_evolution/dummy/two::new_fish_type) in aquarium + TEST_ASSERT(dummy_boogaloo, "The new fish type cannot be found inside the aquarium") + /obj/structure/aquarium/crab - allow_breeding = TRUE //needed for growing up + reproduction_and_growth = TRUE //needed for growing up ///Our test subject var/obj/item/fish/chasm_crab/instant_growth/crabbie /obj/structure/aquarium/crab/Initialize(mapload) . = ..() crabbie = new(src) + crabbie.name = "Crabbie" + crabbie.last_feeding = world.time + crabbie.AddComponent(/datum/component/fish_growth, crabbie.lob_type, 1 SECONDS) /obj/structure/aquarium/crab/Exited(atom/movable/gone) . = ..() @@ -251,24 +370,122 @@ crabbie = null /obj/item/fish/chasm_crab/instant_growth - growth_rate = 100 fish_traits = list() //We don't want to end up applying traits twice on the resulting lobstrosity -/datum/unit_test/explosive_fishing +/datum/unit_test/fish_sources -/datum/unit_test/explosive_fishing/Run() - var/datum/fish_source/source = GLOB.preset_fish_sources[/datum/fish_source/unit_test] +/datum/unit_test/fish_sources/Run() + var/datum/fish_source/source = GLOB.preset_fish_sources[/datum/fish_source/unit_test_explosive] source.spawn_reward_from_explosion(run_loc_floor_bottom_left, 1) - if(length(source.fish_table)) + if(source.fish_counts[/obj/item/wrench]) TEST_FAIL("The unit test item wasn't removed/spawned from fish_table during 'spawn_reward_from_explosion'.") -/datum/fish_source/unit_test + ///From here, we check that the profound_fisher as well as fish source procs for rolling rewards don't fail. + source = GLOB.preset_fish_sources[/datum/fish_source/unit_test_profound_fisher] + run_loc_floor_bottom_left.AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/unit_test_profound_fisher) + var/mob/living/basic/fisher = allocate(/mob/living/basic) + fisher.AddComponent(/datum/component/profound_fisher) + fisher.set_combat_mode(FALSE) + fisher.melee_attack(run_loc_floor_bottom_left, ignore_cooldown = TRUE) + if(source.fish_counts[/obj/item/fish/testdummy] != 1) + TEST_FAIL("The unit test profound fisher didn't catch the test fish on a lazy fishing spot (element)") + + ///For good measure, let's try it again, but with the component this time, and a human mob and gloves + run_loc_floor_bottom_left.RemoveElement(/datum/element/lazy_fishing_spot, /datum/fish_source/unit_test_profound_fisher) + var/datum/component/comp = run_loc_floor_bottom_left.AddComponent(/datum/component/fishing_spot, source) + var/mob/living/carbon/human/consistent/angler = allocate(/mob/living/carbon/human/consistent) + var/obj/item/clothing/gloves/noodling = allocate(/obj/item/clothing/gloves) + noodling.AddComponent(/datum/component/profound_fisher) + angler.equip_to_slot(noodling, ITEM_SLOT_GLOVES) + + angler.UnarmedAttack(run_loc_floor_bottom_left, proximity_flag = TRUE) + if(source.fish_counts[/obj/item/fish/testdummy]) + TEST_FAIL("The unit test profound fisher didn't catch the test fish on a fishing spot (component)") + qdel(comp) + + ///As a final test, let's see how it goes with a fish source containing every single fish subtype. + comp = run_loc_floor_bottom_left.AddComponent(/datum/component/fishing_spot, GLOB.preset_fish_sources[/datum/fish_source/unit_test_all_fish]) + fisher.melee_attack(run_loc_floor_bottom_left, ignore_cooldown = TRUE) + qdel(comp) + +/datum/fish_source/unit_test_explosive fish_table = list( /obj/item/wrench = 1, + /obj/item/screwdriver = INFINITY, //infinite weight, so if fish counts doesn't work as intended, this'll be always picked. ) fish_counts = list( /obj/item/wrench = 1, + /obj/item/screwdriver = 0, //this should never be picked. ) -#undef TRAIT_FISH_TESTING +/datum/fish_source/unit_test_profound_fisher + fish_table = list(/obj/item/fish/testdummy = 1) + fish_counts = list(/obj/item/fish/testdummy = 2) + +/datum/fish_source/unit_test_all_fish + +/datum/fish_source/unit_test_all_fish/New() + for(var/fish_type as anything in subtypesof(/obj/item/fish)) + fish_table[fish_type] = 10 + return ..() +/datum/unit_test/edible_fish + +/datum/unit_test/edible_fish/Run() + var/obj/item/fish/fish = allocate(/obj/item/fish/testdummy/food) + var/datum/component/edible/edible = fish.GetComponent(/datum/component/edible) + TEST_ASSERT(edible, "Fish is not edible") + edible.eat_time = 0 + TEST_ASSERT(fish.GetComponent(/datum/component/infective), "Fish doesn't have the infective component") + var/bite_size = edible.bite_consumption + + var/mob/living/carbon/human/consistent/gourmet = allocate(/mob/living/carbon/human/consistent) + + var/food_quality = edible.get_perceived_food_quality(gourmet) + TEST_ASSERT(food_quality < 0, "Humans don't seem to dislike raw, unprocessed fish when they should") + ADD_TRAIT(gourmet, TRAIT_FISH_EATER, TRAIT_FISH_TESTING) + food_quality = edible.get_perceived_food_quality(gourmet) + TEST_ASSERT(food_quality >= LIKED_FOOD_QUALITY_CHANGE, "mobs with the TRAIT_FISH_EATER traits don't seem to like fish when they should") + REMOVE_TRAIT(gourmet, TRAIT_FISH_EATER, TRAIT_FISH_TESTING) + + fish.attack(gourmet, gourmet) + TEST_ASSERT(gourmet.has_reagent(/datum/reagent/consumable/nutriment/protein), "Human doesn't have ingested protein after eating fish") + TEST_ASSERT(gourmet.has_reagent(/datum/reagent/blood), "Human doesn't have ingested blood after eating fish") + TEST_ASSERT(gourmet.has_reagent(/datum/reagent/fishdummy), "Human doesn't have the reagent from /datum/fish_trait/dummy after eating fish") + + TEST_ASSERT_EQUAL(fish.status, FISH_DEAD, "The fish is not dead, despite having sustained enough damage that it should. health: [fish.health]") + + var/obj/item/organ/internal/stomach/belly = gourmet.get_organ_slot(ORGAN_SLOT_STOMACH) + belly.reagents.clear_reagents() + + fish.set_status(FISH_ALIVE) + TEST_ASSERT(!fish.bites_amount, "bites_amount wasn't reset after the fish revived") + + fish.update_size_and_weight(fish.size, FISH_WEIGHT_BITE_DIVISOR) + fish.AddElement(/datum/element/fried_item, FISH_SAFE_COOKING_DURATION) + TEST_ASSERT_EQUAL(fish.status, FISH_DEAD, "The fish didn't die after being cooked") + TEST_ASSERT(bite_size < edible.bite_consumption, "The bite_consumption value hasn't increased after being cooked (it removes blood but doubles protein). Value: [bite_size]") + TEST_ASSERT(!(edible.foodtypes & (RAW|GORE)), "Fish still has the GORE and/or RAW foodtypes flags after being cooked") + TEST_ASSERT(!fish.GetComponent(/datum/component/infective), "Fish still has the infective component after being cooked for long enough") + + + food_quality = edible.get_perceived_food_quality(gourmet) + TEST_ASSERT(food_quality >= 0, "Humans still dislike fish, even when it's cooked") + fish.attack(gourmet, gourmet) + TEST_ASSERT(!gourmet.has_reagent(/datum/reagent/blood), "Human has ingested blood from eating a fish when it shouldn't since the fish has been cooked") + + TEST_ASSERT(QDELETED(fish), "The fish is not being deleted, despite having sustained enough bites. Reagents volume left: [fish.reagents.total_volume]") + +/obj/item/fish/testdummy/food + average_weight = FISH_WEIGHT_BITE_DIVISOR * 2 //One bite, it's death; the other, it's gone. + +///Check that nothing wrong happens when randomizing size and weight of a fish +/datum/unit_test/fish_randomize_size_weight + +/datum/unit_test/fish_randomize_size_weight/Run() + var/obj/item/storage/box/fish_debug/box = allocate(/obj/item/storage/box/fish_debug) + for(var/obj/item/fish/fish as anything in box) + fish.randomize_size_and_weight() + +#undef FISH_REAGENT_AMOUNT +#undef TRAIT_FISH_TESTING diff --git a/code/modules/unit_tests/mob_damage.dm b/code/modules/unit_tests/mob_damage.dm index 64b12b8f477e8..7496eb644344c 100644 --- a/code/modules/unit_tests/mob_damage.dm +++ b/code/modules/unit_tests/mob_damage.dm @@ -289,8 +289,8 @@ /datum/unit_test/mob_damage/proc/test_godmode(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) - // flip godmode bit to 1 - dummy.status_flags ^= GODMODE + // add godmode + ADD_TRAIT(dummy, TRAIT_GODMODE, TRAIT_GENERIC) // Apply 9 damage and then heal it if(!test_apply_damage(dummy, amount = 9, expected = 0)) @@ -306,8 +306,8 @@ if(!test_apply_damage(dummy, amount = -11, forced = TRUE)) TEST_FAIL("ABOVE FAILURE: failed test_godmode! godmode did not respect forced = TRUE") - // flip godmode bit back to 0 - dummy.status_flags ^= GODMODE + // remove godmode + REMOVE_TRAIT(dummy, TRAIT_GODMODE, TRAIT_GENERIC) /// Testing biotypes /datum/unit_test/mob_damage/proc/test_biotypes(mob/living/carbon/human/consistent/dummy) diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm index 07ea54b3b22df..6cb7dad0a1b41 100644 --- a/code/modules/unit_tests/outfit_sanity.dm +++ b/code/modules/unit_tests/outfit_sanity.dm @@ -87,4 +87,13 @@ if (!H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BACKPACK, TRUE, indirect_action = TRUE)) TEST_FAIL("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") + if (outfit.belt_contents) + var/list/belt_contents = outfit.belt_contents?.Copy() + for (var/path in belt_contents) + var/number = belt_contents[path] || 1 + for (var/_ in 1 to number) + if (!H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BELTPACK, TRUE, indirect_action = TRUE)) + TEST_FAIL("[outfit.name]'s belt_contents are invalid! Couldn't add [path] to backpack.") + + #undef CHECK_OUTFIT_SLOT diff --git a/code/modules/unit_tests/say.dm b/code/modules/unit_tests/say.dm index 375857459258b..c5bcb061b1f6c 100644 --- a/code/modules/unit_tests/say.dm +++ b/code/modules/unit_tests/say.dm @@ -237,9 +237,9 @@ // Normally speaking, if there isn't a functional telecomms array on the same z-level, then handheld radios // have a short delay before sending the message. We use the centcom frequency to get around this. speaker_radio.set_frequency(FREQ_CENTCOM) - speaker_radio.independent = TRUE + speaker_radio.special_channels = RADIO_SPECIAL_CENTCOM listener_radio.set_frequency(FREQ_CENTCOM) - listener_radio.independent = TRUE + listener_radio.special_channels = RADIO_SPECIAL_CENTCOM var/pangram_quote = "The quick brown fox jumps over the lazy dog." // SKYRAT EDIT CHANGE - account for autopunct in living_say.dm - ORIGINAL: var/pangram_quote = "The quick brown fox jumps over the lazy dog" diff --git a/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm b/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm index 4b0c3a986f122..1e2c10c2f2952 100644 --- a/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm +++ b/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm @@ -57,7 +57,7 @@ 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) + final_icon.Blend(get_flat_icon_for_all_directions(light_underlay, no_anim = FALSE), ICON_UNDERLAY, -ICON_SIZE_X + 1, -ICON_SIZE_Y + 1) return final_icon #undef UPDATE_EYES_LEFT diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_sentientdisease.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_sentientdisease.png new file mode 100644 index 0000000000000..e7e1cbd661fcb Binary files /dev/null and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_sentientdisease.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_dynamic_human_icons_syndicate_commando.png b/code/modules/unit_tests/screenshots/screenshot_dynamic_human_icons_syndicate_commando.png index adc462ace50d1..c29a1e742f1f4 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_dynamic_human_icons_syndicate_commando.png and b/code/modules/unit_tests/screenshots/screenshot_dynamic_human_icons_syndicate_commando.png differ diff --git a/code/modules/unit_tests/security_officer_distribution.dm b/code/modules/unit_tests/security_officer_distribution.dm index e268aab709f38..05d62eeab351c 100644 --- a/code/modules/unit_tests/security_officer_distribution.dm +++ b/code/modules/unit_tests/security_officer_distribution.dm @@ -68,7 +68,7 @@ var/mob/living/carbon/human/new_character = allocate(/mob/living/carbon/human/consistent) new_character.mind_initialize() - new_character.mind.set_assigned_role(SSjob.GetJobType(/datum/job/security_officer)) + new_character.mind.set_assigned_role(SSjob.get_job_type(/datum/job/security_officer)) new_player.new_character = new_character new_player.mock_client = mock_client diff --git a/code/modules/unit_tests/stack_singular_name.dm b/code/modules/unit_tests/stack_singular_name.dm index 739efb54d6a4b..0d043c588e6ee 100644 --- a/code/modules/unit_tests/stack_singular_name.dm +++ b/code/modules/unit_tests/stack_singular_name.dm @@ -1,12 +1,12 @@ /** * Goes through every subtype of /obj/item/stack to check for a singular name, var/singular_name. - * Everything within the blacklist does not need to be tested because it exists to be overriden. + * Everything within the blacklist does not need to be tested because it exists to be overridden. * This test will fail if a subtype of /obj/item/stack is missing a singular name. */ /datum/unit_test/stack_singular_name /datum/unit_test/stack_singular_name/Run() - var/list/blacklist = list( // all of these are generally parents that exist to be overriden; ex. /obj/item/stack/license_plates exists to branch into /filled and /empty + var/list/blacklist = list( // all of these are generally parents that exist to be overridden; ex. /obj/item/stack/license_plates exists to branch into /filled and /empty /obj/item/stack/sheet, /obj/item/stack/sheet/mineral, /obj/item/stack/license_plates, diff --git a/code/modules/unit_tests/storage.dm b/code/modules/unit_tests/storage.dm index 82ac035ed7ea6..cadf2261682b5 100644 --- a/code/modules/unit_tests/storage.dm +++ b/code/modules/unit_tests/storage.dm @@ -20,3 +20,24 @@ small_thing.update_weight_class(WEIGHT_CLASS_BULKY) TEST_ASSERT_NOTEQUAL(small_thing.loc, storage_item, "A small item changed back into bulky size should have ejected from the backpack") + +/datum/unit_test/common_item_inserting + +/datum/unit_test/common_item_inserting/Run() + var/obj/item/storage/backpack/bag = allocate(__IMPLIED_TYPE__, run_loc_floor_bottom_left) + var/mob/living/carbon/human/consistent/dummy = allocate(__IMPLIED_TYPE__, run_loc_floor_bottom_left) + bag.atom_storage.max_slots = INFINITY + bag.atom_storage.max_total_storage = INFINITY + + var/list/common_noncombat_insertion_items = list( + /obj/item/reagent_containers/cup/rag, + /obj/item/soap, + /obj/item/card/emag, + /obj/item/detective_scanner, + ) + + dummy.set_combat_mode(TRUE) + for(var/item_type in common_noncombat_insertion_items) + var/obj/item/item = allocate(item_type, run_loc_floor_bottom_left) + item.melee_attack_chain(dummy, bag) + TEST_ASSERT_EQUAL(item.loc, bag, "[item_type] was unable to be inserted into a backpack on click while off combat mode") diff --git a/code/modules/unit_tests/strange_reagent.dm b/code/modules/unit_tests/strange_reagent.dm index e5e385b86fd6d..bcdf89f0a9c8c 100644 --- a/code/modules/unit_tests/strange_reagent.dm +++ b/code/modules/unit_tests/strange_reagent.dm @@ -24,7 +24,7 @@ var/is_basic = istype(target, /mob/living/basic) var/is_simple = istype(target, /mob/living/simple_animal) // check some basic stuff - if(target.status_flags & GODMODE) + if(HAS_TRAIT(target, TRAIT_GODMODE)) continue if(!(target.mob_biotypes & MOB_ORGANIC)) continue diff --git a/code/modules/unit_tests/strippable.dm b/code/modules/unit_tests/strippable.dm index 18f521929cd54..47a76a1ca75b6 100644 --- a/code/modules/unit_tests/strippable.dm +++ b/code/modules/unit_tests/strippable.dm @@ -8,8 +8,6 @@ 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. - var/ui_state = strip_menu.ui_state(user) TEST_ASSERT_EQUAL(strip_menu.ui_status(user, ui_state), UI_INTERACTIVE, "Perfect conditions were not interactive.") diff --git a/code/modules/unit_tests/traitor.dm b/code/modules/unit_tests/traitor.dm index 012370d935643..974888b3a0df4 100644 --- a/code/modules/unit_tests/traitor.dm +++ b/code/modules/unit_tests/traitor.dm @@ -11,7 +11,7 @@ possible_jobs += rank for(var/job_name in possible_jobs) - var/datum/job/job = SSjob.GetJob(job_name) + var/datum/job/job = SSjob.get_job(job_name) var/mob/living/player = allocate(job.spawn_type) player.mind_initialize() var/datum/mind/mind = player.mind diff --git a/code/modules/unit_tests/traitor_mail_content_check.dm b/code/modules/unit_tests/traitor_mail_content_check.dm index 6d14d9d1428d3..b2ecfe2ef24a2 100644 --- a/code/modules/unit_tests/traitor_mail_content_check.dm +++ b/code/modules/unit_tests/traitor_mail_content_check.dm @@ -5,6 +5,6 @@ var/mob/living/carbon/human/person = allocate(/mob/living/carbon/human/consistent) person.mind_initialize() var/obj/item/mail/traitor/test_mail = allocate(/obj/item/mail/traitor) - person.mind.set_assigned_role(SSjob.GetJobType(/datum/job/captain)) + person.mind.set_assigned_role(SSjob.get_job_type(/datum/job/captain)) test_mail.initialize_for_recipient(person.mind) TEST_ASSERT_EQUAL(test_mail.contents.len, 0, "/obj/item/mail/traitor should not have items after initialize_for_recipient proc!") diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index e2902be122891..878cf1ecb3dc6 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -158,7 +158,7 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) /// Logs a test message. Will use GitHub action syntax found at https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions /datum/unit_test/proc/log_for_test(text, priority, file, line) - var/map_name = SSmapping.config.map_name + var/map_name = SSmapping.current_map.map_name // Need to escape the text to properly support newlines. var/annotation_text = replacetext(text, "%", "%25") @@ -177,14 +177,14 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) GLOB.current_test = test var/duration = REALTIMEOFDAY - var/skip_test = (test_path in SSmapping.config.skipped_tests) + var/skip_test = (test_path in SSmapping.current_map.skipped_tests) var/test_output_desc = "[test_path]" var/message = "" log_world("::group::[test_path]") if(skip_test) - log_world("[TEST_OUTPUT_YELLOW("SKIPPED")] Skipped run on map [SSmapping.config.map_name].") + log_world("[TEST_OUTPUT_YELLOW("SKIPPED")] Skipped run on map [SSmapping.current_map.map_name].") else @@ -354,7 +354,6 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) // 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 - return returnable_list /proc/RunUnitTests() diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm index decd67e17422b..0124616879825 100644 --- a/code/modules/uplink/uplink_devices.dm +++ b/code/modules/uplink/uplink_devices.dm @@ -114,12 +114,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) //SKYRAT EDIT CHANGE. Original tc_amount = 20 . = ..() 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) //SKYRAT EDIT CHANGE. Original tc_amount = 20 . = ..() 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 7e501217eb68c..0d347709536ee 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -172,6 +172,8 @@ ADD_TRAIT(created, TRAIT_CONTRABAND, INNATE_TRAIT) for(var/obj/contained as anything in created.get_all_contents()) ADD_TRAIT(contained, TRAIT_CONTRABAND, INNATE_TRAIT) + + if(isgun(created)) replace_pin(created) else if(istype(created, /obj/item/storage/toolbox/guncase)) for(var/obj/item/gun/gun in created) diff --git a/code/modules/uplink/uplink_items/badass.dm b/code/modules/uplink/uplink_items/badass.dm index 08cf3affe0741..5c5e0390b5046 100644 --- a/code/modules/uplink/uplink_items/badass.dm +++ b/code/modules/uplink/uplink_items/badass.dm @@ -91,7 +91,7 @@ /datum/uplink_item/badass/stickers name = "Syndicate Sticker Pack" desc = "Contains 8 random stickers precisely engineered to resemble suspicious objects, which may or may not be useful for fooling crew." - item = /obj/item/storage/box/syndie_kit/stickers + item = /obj/item/storage/box/stickers/syndie_kit cost = 1 /datum/uplink_item/badass/demotivational_posters diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm index dca3d12538f04..c6d914d45ac62 100644 --- a/code/modules/uplink/uplink_items/job.dm +++ b/code/modules/uplink/uplink_items/job.dm @@ -150,7 +150,7 @@ name = "Syndicate Rebar Crossbow" desc = "A much more professional 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 + cost = 12 restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN) /datum/uplink_item/role_restricted/magillitis_serum @@ -367,7 +367,7 @@ BUBBER REMOVE END*/ Please note that these are free-range monkeys that don't react with Mutadone." item = /obj/item/antag_spawner/loadout/monkey_man cost = 6 - restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_GENETICIST, JOB_ASSISTANT, JOB_MIME, JOB_CLOWN) + restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_GENETICIST, JOB_ASSISTANT, JOB_MIME, JOB_CLOWN, JOB_PUN_PUN) restricted = TRUE refundable = TRUE @@ -378,7 +378,7 @@ BUBBER REMOVE END*/ item = /obj/item/storage/toolbox/guncase/monkeycase cost = 4 limited_stock = 3 - restricted_roles = list(JOB_ASSISTANT, JOB_MIME, JOB_CLOWN) + restricted_roles = list(JOB_ASSISTANT, JOB_MIME, JOB_CLOWN, JOB_PUN_PUN) restricted = TRUE refundable = FALSE diff --git a/code/modules/uplink/uplink_items/suits.dm b/code/modules/uplink/uplink_items/suits.dm index b66cce4eaece7..2839a6d2d1eff 100644 --- a/code/modules/uplink/uplink_items/suits.dm +++ b/code/modules/uplink/uplink_items/suits.dm @@ -80,3 +80,9 @@ progression_minimum = 90 MINUTES cost = 16 cant_discount = TRUE + +/datum/uplink_item/suits/modsuit/Wraith + name = "MODsuit wraith cloaking module" + desc = "A MODsuit module that grants to the user Optical camouflage and the ability to overload light sources to recharge suit power." + item = /obj/item/mod/module/stealth/wraith + cost = 3 diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index 155ef2b457006..1098f89b691c0 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -138,6 +138,7 @@ remove_control_flags(M, ALL) remove_passenger_actions(M) LAZYREMOVE(occupants, M) +// LAZYREMOVE(contents, M) cleanup_actions_for_mob(M) after_remove_occupant(M) return TRUE diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index aa9a963a1013c..4aa28d6fe5a47 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -82,7 +82,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1)) + if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm index cc0643be02601..cc40b7d80ef06 100644 --- a/code/modules/vehicles/bicycle.dm +++ b/code/modules/vehicles/bicycle.dm @@ -33,7 +33,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1)) + if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index 2cd85f786fc48..6a2fd57821fc1 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -127,7 +127,7 @@ "[WOUND_PICK_HIGHEST_SEVERITY]" ))) carbon_occupant.cause_wound_of_type_and_severity(WOUND_BLUNT, head_to_wound, WOUND_SEVERITY_MODERATE, WOUND_SEVERITY_SEVERE, pick_mode) - carbon_occupant.playsound_local(src, 'sound/weapons/flash_ring.ogg', 50) + carbon_occupant.playsound_local(src, 'sound/items/weapons/flash_ring.ogg', 50) carbon_occupant.set_eye_blur_if_lower(rand(10 SECONDS, 20 SECONDS)) hittarget_living.adjustBruteLoss(200) @@ -168,7 +168,7 @@ target_pancake.visible_message(span_warning("[src] runs over [target_pancake], flattening [target_pancake.p_them()] like a pancake!")) target_pancake.AddElement(/datum/element/squish, 5 SECONDS) target_pancake.Paralyze(2 SECONDS) - playsound(target_pancake, 'sound/effects/cartoon_splat.ogg', 75) + playsound(target_pancake, 'sound/effects/cartoon_sfx/cartoon_splat.ogg', 75) log_combat(src, crossed, "ran over") /obj/vehicle/sealed/car/clowncar/emag_act(mob/user, obj/item/card/emag/emag_card) diff --git a/code/modules/vehicles/cars/vim.dm b/code/modules/vehicles/cars/vim.dm index dfcd604ef144d..e2d9c50e5d66c 100644 --- a/code/modules/vehicles/cars/vim.dm +++ b/code/modules/vehicles/cars/vim.dm @@ -68,7 +68,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1)) + if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) @@ -90,7 +90,7 @@ update_appearance() playsound(src, 'sound/machines/windowdoor.ogg', 50, TRUE) if(atom_integrity == max_integrity) - SEND_SOUND(newoccupant, sound('sound/mecha/nominal.ogg',volume=50)) + SEND_SOUND(newoccupant, sound('sound/vehicles/mecha/nominal.ogg',volume=50)) /obj/vehicle/sealed/car/vim/mob_try_exit(mob/pilot, mob/user, silent = FALSE, randomstep = FALSE) . = ..() diff --git a/code/modules/vehicles/lavaboat.dm b/code/modules/vehicles/lavaboat.dm index 0336ff486dd47..fbe130d969709 100644 --- a/code/modules/vehicles/lavaboat.dm +++ b/code/modules/vehicles/lavaboat.dm @@ -67,7 +67,7 @@ /obj/item/ship_in_a_bottle/attack_self(mob/user) to_chat(user, span_notice("You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out.")) - playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, TRUE) + playsound(user.loc, 'sound/effects/glass/glassbr1.ogg', 100, TRUE) new /obj/vehicle/ridden/lavaboat/dragon(get_turf(src)) qdel(src) diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index d28b510328a98..ccb211a2a6678 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -35,6 +35,8 @@ generic_canpass = FALSE hud_possible = list(DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD, DIAG_CAMERA_HUD) mouse_pointer = 'icons/effects/mouse_pointers/mecha_mouse.dmi' + /// Significantly heavier than humans + inertia_force_weight = 5 ///How much energy the mech will consume each time it moves. this is the current active energy consumed var/step_energy_drain = 0.008 * STANDARD_CELL_CHARGE ///How much energy we drain each time we mechpunch someone @@ -134,12 +136,12 @@ ///Whether our steps are silent due to no gravity var/step_silent = FALSE ///Sound played when the mech moves - var/stepsound = 'sound/mecha/mechstep.ogg' + var/stepsound = 'sound/vehicles/mecha/mechstep.ogg' ///Sound played when the mech walks - var/turnsound = 'sound/mecha/mechturn.ogg' + var/turnsound = 'sound/vehicles/mecha/mechturn.ogg' ///Sounds for types of melee attack - var/brute_attack_sound = 'sound/weapons/punch4.ogg' - var/burn_attack_sound = 'sound/items/welder.ogg' + var/brute_attack_sound = 'sound/items/weapons/punch4.ogg' + var/burn_attack_sound = 'sound/items/tools/welder.ogg' var/tox_attack_sound = 'sound/effects/spray2.ogg' ///Sound on wall destroying var/destroy_wall_sound = 'sound/effects/meteorimpact.ogg' @@ -229,7 +231,6 @@ ui_view.generate_view("mech_view_[REF(src)]") RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) spark_system = new spark_system.set_up(2, 0, src) @@ -340,11 +341,12 @@ ai.investigate_log("has been gibbed by having their mech destroyed.", INVESTIGATE_DEATHS) ai.gib(DROP_ALL_REMAINS) //No wreck, no AI to recover else - mob_exit(ai,silent = TRUE, forced = TRUE) // so we dont ghost the AI + mob_exit(ai, silent = TRUE, forced = TRUE) // so we dont ghost the AI continue - mob_exit(occupant, forced = TRUE) - if(!isbrain(occupant)) // who would win.. 1 brain vs 1 sleep proc.. - occupant.SetSleeping(destruction_sleep_duration) + else + mob_exit(occupant, forced = TRUE) + if(!isbrain(occupant)) // who would win.. 1 brain vs 1 sleep proc.. + occupant.SetSleeping(destruction_sleep_duration) if(wreckage) var/obj/structure/mecha_wreckage/WR = new wreckage(loc, unlucky_ai) @@ -376,7 +378,7 @@ /obj/vehicle/sealed/mecha/proc/set_safety(mob/user) weapons_safety = !weapons_safety if(!safety_sound_custom) - SEND_SOUND(user, sound('sound/machines/beep.ogg', volume = 25)) + SEND_SOUND(user, sound('sound/machines/beep/beep.ogg', volume = 25)) balloon_alert(user, "equipment [weapons_safety ? "safe" : "ready"]") set_mouse_pointer() SEND_SIGNAL(src, COMSIG_MECH_SAFETIES_TOGGLE, user, weapons_safety) @@ -586,7 +588,7 @@ /obj/vehicle/sealed/mecha/proc/process_occupants(seconds_per_tick) for(var/mob/living/occupant as anything in occupants) - if(!(mecha_flags & IS_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 && cell.maxcharge) @@ -658,7 +660,7 @@ if(phasing) balloon_alert(user, "not while [phasing]!") return - if(user.incapacitated()) + if(user.incapacitated) return if(!get_charge()) return @@ -819,7 +821,7 @@ balloon_alert(occupant, "cabin [cabin_sealed ? "sealed" : "unsealed"]") log_message("Cabin [cabin_sealed ? "sealed" : "unsealed"].", LOG_MECHA) - playsound(src, 'sound/machines/airlock.ogg', 50, TRUE) + playsound(src, 'sound/machines/airlock/airlock.ogg', 50, TRUE) /// Special light eater handling /obj/vehicle/sealed/mecha/proc/on_light_eater(obj/vehicle/sealed/source, datum/light_eater) @@ -832,11 +834,11 @@ remove_action_type_from_mob(/datum/action/vehicle/sealed/mecha/mech_toggle_lights, occupant) return COMPONENT_BLOCK_LIGHT_EATER -/obj/vehicle/sealed/mecha/proc/on_saboteur(datum/source, disrupt_duration) - SIGNAL_HANDLER +/obj/vehicle/sealed/mecha/on_saboteur(datum/source, disrupt_duration) + . = ..() if(mecha_flags &= HAS_LIGHTS && light_on) set_light_on(FALSE) - return COMSIG_SABOTEUR_SUCCESS + return TRUE /// Apply corresponding accesses /obj/vehicle/sealed/mecha/proc/update_access() diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index a466bc30d2245..0e1ab1302db91 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -236,13 +236,13 @@ own integrity back to max. Shield is automatically dropped if we run out of powe if(chassis.defense_mode) SetInvisibility(INVISIBILITY_NONE, id=type) flick("shield_raise", src) - playsound(src, 'sound/mecha/mech_shield_raise.ogg', 50, FALSE) + playsound(src, 'sound/vehicles/mecha/mech_shield_raise.ogg', 50, FALSE) icon_state = "shield" resetdir(chassis, dir, dir) // to set the plane for the shield properly when it's turned on RegisterSignal(chassis, COMSIG_ATOM_DIR_CHANGE, PROC_REF(resetdir)) else flick("shield_drop", src) - playsound(src, 'sound/mecha/mech_shield_drop.ogg', 50, FALSE) + playsound(src, 'sound/vehicles/mecha/mech_shield_drop.ogg', 50, FALSE) icon_state = "shield_null" addtimer(CALLBACK(src, PROC_REF(make_invisible)), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) UnregisterSignal(chassis, COMSIG_ATOM_DIR_CHANGE) @@ -283,7 +283,7 @@ own integrity back to max. Shield is automatically dropped if we run out of powe atom_integrity = 10000 /obj/durand_shield/play_attack_sound() - playsound(src, 'sound/mecha/mech_shield_deflect.ogg', 100, TRUE) + playsound(src, 'sound/vehicles/mecha/mech_shield_deflect.ogg', 100, TRUE) /obj/durand_shield/bullet_act() play_attack_sound() diff --git a/code/modules/vehicles/mecha/combat/justice.dm b/code/modules/vehicles/mecha/combat/justice.dm index 00b0543dbd865..5dbe4ac890e98 100644 --- a/code/modules/vehicles/mecha/combat/justice.dm +++ b/code/modules/vehicles/mecha/combat/justice.dm @@ -23,8 +23,8 @@ mech_type = EXOSUIT_MODULE_JUSTICE resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF mecha_flags = ID_LOCK_ON | QUIET_STEPS | QUIET_TURNS | CAN_STRAFE | HAS_LIGHTS | MMI_COMPATIBLE | IS_ENCLOSED - destroy_wall_sound = 'sound/mecha/mech_blade_break_wall.ogg' - brute_attack_sound = 'sound/mecha/mech_blade_attack.ogg' + destroy_wall_sound = 'sound/vehicles/mecha/mech_blade_break_wall.ogg' + brute_attack_sound = 'sound/vehicles/mecha/mech_blade_attack.ogg' attack_verbs = list("cut", "cuts", "cutting") weapons_safety = TRUE safety_sound_custom = TRUE @@ -70,7 +70,7 @@ else movedelay = MOVEDELAY_ANGRY - playsound(src, 'sound/mecha/mech_blade_safty.ogg', 75, FALSE) //everyone need to hear this sound + playsound(src, 'sound/vehicles/mecha/mech_blade_safty.ogg', 75, FALSE) //everyone need to hear this sound update_appearance(UPDATE_ICON_STATE) @@ -106,7 +106,7 @@ */ /obj/vehicle/sealed/mecha/justice/proc/finish_him(obj/vehicle/sealed/mecha/my_mech, mob/finisher, mob/living/him) say(pick("Take my Justice-Slash!", "A falling leaf...", "Justice is quite a lonely path"), forced = "Justice Mech") - playsound(src, 'sound/mecha/mech_stealth_pre_attack.ogg', 75, FALSE) + playsound(src, 'sound/vehicles/mecha/mech_stealth_pre_attack.ogg', 75, FALSE) if(!do_after(finisher, 1 SECONDS, him)) return if(QDELETED(finisher)) @@ -140,13 +140,13 @@ if(alpha == 255) return animate(src, alpha = 255, time = 0.5 SECONDS) - playsound(src, 'sound/mecha/mech_stealth_effect.ogg' , 75, FALSE) + playsound(src, 'sound/vehicles/mecha/mech_stealth_effect.ogg' , 75, FALSE) /obj/vehicle/sealed/mecha/justice/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) if(LAZYLEN(occupants)) if(prob(60)) new /obj/effect/temp_visual/mech_sparks(get_turf(src)) - playsound(src, 'sound/mecha/mech_stealth_effect.ogg' , 75, FALSE) + playsound(src, 'sound/vehicles/mecha/mech_stealth_effect.ogg' , 75, FALSE) return return ..() @@ -162,9 +162,9 @@ /// Energy cost to become invisibile var/energy_cost = 200 /// Aoe pre attack sound. - var/stealth_pre_attack_sound = 'sound/mecha/mech_stealth_pre_attack.ogg' + var/stealth_pre_attack_sound = 'sound/vehicles/mecha/mech_stealth_pre_attack.ogg' /// Aoe attack sound. - var/stealth_attack_sound = 'sound/mecha/mech_stealth_attack.ogg' + var/stealth_attack_sound = 'sound/vehicles/mecha/mech_stealth_attack.ogg' /datum/action/vehicle/sealed/mecha/invisibility/set_chassis(passed_chassis) . = ..() @@ -208,7 +208,7 @@ ///Called when invisibility activated. /datum/action/vehicle/sealed/mecha/invisibility/proc/invisibility_on() new /obj/effect/temp_visual/mech_sparks(get_turf(chassis)) - playsound(chassis, 'sound/mecha/mech_stealth_effect.ogg' , 75, FALSE) + playsound(chassis, 'sound/vehicles/mecha/mech_stealth_effect.ogg' , 75, FALSE) check_charge_attack() animate(chassis, alpha = 0, time = 0.5 SECONDS) button_icon_state = "mech_stealth_on" @@ -223,7 +223,7 @@ ///Called when invisibility deactivated. /datum/action/vehicle/sealed/mecha/invisibility/proc/invisibility_off() new /obj/effect/temp_visual/mech_sparks(get_turf(chassis)) - playsound(chassis, 'sound/mecha/mech_stealth_effect.ogg' , 75, FALSE) + playsound(chassis, 'sound/vehicles/mecha/mech_stealth_effect.ogg' , 75, FALSE) invisibility_timer = null charge = FALSE addtimer(CALLBACK(src, PROC_REF(charge)), 5 SECONDS) @@ -369,7 +369,7 @@ /// Maximum range of charge attack. var/max_charge_range = 7 /// Sound when mech do charge attack. - var/charge_attack_sound = 'sound/mecha/mech_charge_attack.ogg' + var/charge_attack_sound = 'sound/vehicles/mecha/mech_charge_attack.ogg' /datum/action/vehicle/sealed/mecha/charge_attack/set_chassis(passed_chassis) . = ..() diff --git a/code/modules/vehicles/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm index 48e2d60cbd68e..32fd0627c6fb8 100644 --- a/code/modules/vehicles/mecha/combat/marauder.dm +++ b/code/modules/vehicles/mecha/combat/marauder.dm @@ -79,7 +79,7 @@ to_chat(owner, "[icon2html(chassis, owner)]Zoom mode [chassis.zoom_mode?"en":"dis"]abled.") if(chassis.zoom_mode) owner.client.view_size.setTo(4.5) - SEND_SOUND(owner, sound('sound/mecha/imag_enh.ogg', volume=50)) + SEND_SOUND(owner, sound('sound/vehicles/mecha/imag_enh.ogg', volume=50)) else owner.client.view_size.resetToDefault() build_all_button_icons() diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm index cacfa7743dfbb..8f37b0945ec20 100644 --- a/code/modules/vehicles/mecha/combat/phazon.dm +++ b/code/modules/vehicles/mecha/combat/phazon.dm @@ -57,7 +57,7 @@ chassis.balloon_alert(owner,"your punches will now deal toxin damage") chassis.damtype = new_damtype button_icon_state = "mech_damtype_[new_damtype]" - playsound(chassis, 'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(chassis, 'sound/vehicles/mecha/mechmove01.ogg', 50, TRUE) build_all_button_icons() /datum/action/vehicle/sealed/mecha/mech_toggle_phasing diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm index 123cfef903581..dfcf2896b5b74 100644 --- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm +++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm @@ -110,7 +110,7 @@ switch(skyfall_charge_level) if(1) chassis.visible_message(span_warning("[chassis] clicks and whirrs for a moment, with a low hum emerging from the legs.")) - playsound(chassis, 'sound/items/rped.ogg', 50, TRUE) + playsound(chassis, 'sound/items/tools/rped.ogg', 50, TRUE) if(2) chassis.visible_message(span_warning("[chassis] begins to shake, the sounds of electricity growing louder.")) chassis.Shake(1, 1, SKYFALL_SINGLE_CHARGE_TIME-1) // -1 gives space between the animates, so they don't interrupt eachother @@ -121,12 +121,12 @@ chassis.update_appearance(UPDATE_ICON_STATE) if(4) chassis.visible_message(span_warning("[chassis] sparks and shutters as it finalizes preparation.")) - playsound(chassis, 'sound/mecha/skyfall_power_up.ogg', 50, TRUE) + playsound(chassis, 'sound/vehicles/mecha/skyfall_power_up.ogg', 50, TRUE) chassis.Shake(3, 3, SKYFALL_SINGLE_CHARGE_TIME-1) // -1 gives space between the animates, so they don't interrupt eachother chassis.spark_system.start() if(SKYFALL_CHARGELEVEL_LAUNCH) chassis.visible_message(span_danger("[chassis] leaps into the air!")) - playsound(chassis, 'sound/weapons/gun/general/rocket_launch.ogg', 50, TRUE) + playsound(chassis, 'sound/items/weapons/gun/general/rocket_launch.ogg', 50, TRUE) if(skyfall_charge_level != SKYFALL_CHARGELEVEL_LAUNCH) skyfall_charge_loop() return @@ -171,7 +171,7 @@ /datum/action/vehicle/sealed/mecha/skyfall/proc/land() var/turf/landed_on = get_turf(chassis) chassis.visible_message(span_danger("[chassis] lands from above!")) - playsound(chassis, 'sound/effects/explosion1.ogg', 50, 1) + playsound(chassis, 'sound/effects/explosion/explosion1.ogg', 50, 1) chassis.resistance_flags &= ~INDESTRUCTIBLE chassis.mecha_flags &= ~(QUIET_STEPS|QUIET_TURNS|CANNOT_INTERACT) chassis.phasing = initial(chassis.phasing) @@ -286,7 +286,7 @@ owner.client.mouse_override_icon = 'icons/effects/mouse_pointers/supplypod_down_target.dmi' owner.update_mouse_pointer() owner.overlay_fullscreen("ivanov", /atom/movable/screen/fullscreen/ivanov_display, 1) - SEND_SOUND(owner, 'sound/machines/terminal_on.ogg') //spammable so I don't want to make it audible to anyone else + SEND_SOUND(owner, 'sound/machines/terminal/terminal_on.ogg') //spammable so I don't want to make it audible to anyone else /** * ## end_missile_targeting @@ -328,7 +328,7 @@ rockets_left-- if(rockets_left <= 0) end_missile_targeting() - SEND_SOUND(owner, 'sound/machines/triple_beep.ogg') + SEND_SOUND(owner, 'sound/machines/beep/triple_beep.ogg') S_TIMER_COOLDOWN_START(chassis, COOLDOWN_MECHA_MISSILE_STRIKE, strike_cooldown_time) podspawn(list( "target" = target_turf, diff --git a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm index b2bd59fb74d20..09ccf46aa9e46 100644 --- a/code/modules/vehicles/mecha/equipment/mecha_equipment.dm +++ b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm @@ -33,7 +33,7 @@ ///Boolean: whether a pacifist can use this equipment var/harmful = FALSE ///Sound file: Sound to play when this equipment is destroyed while still attached to the mech - var/destroy_sound = 'sound/mecha/critdestr.ogg' + var/destroy_sound = 'sound/vehicles/mecha/critdestr.ogg' /obj/item/mecha_parts/mecha_equipment/Destroy() if(chassis) @@ -201,7 +201,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto) moveto = moveto || get_turf(chassis) forceMove(moveto) - playsound(chassis, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(chassis, 'sound/items/weapons/tap.ogg', 50, TRUE) LAZYREMOVE(chassis.flat_equipment, src) var/to_unequip_slot = equipment_slot if(equipment_slot == MECHA_WEAPON) diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm index 95def3ef9b07c..bcf6d9a86ae81 100644 --- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm @@ -74,7 +74,7 @@ if(istype(target, /turf/closed/mineral/gibtonite)) var/turf/closed/mineral/gibtonite/giberal_turf = target if(giberal_turf.stage != GIBTONITE_UNSTRUCK) - playsound(chassis, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(chassis, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) to_chat(source, span_warning("[icon2html(src, source)] Active gibtonite ore deposit detected! Safety protocols preventing continued drilling.")) return @@ -115,7 +115,7 @@ while(do_after_mecha(target, source, drill_delay)) if(isliving(target)) drill_mob(target, source) - playsound(src,'sound/weapons/drill.ogg',40,TRUE) + playsound(src,'sound/items/weapons/drill.ogg',40,TRUE) else if(isobj(target)) var/obj/obj_target = target if(istype(obj_target, /obj/item/boulder)) @@ -123,7 +123,7 @@ nu_boulder.manual_process(src, source) else obj_target.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target)) - playsound(src,'sound/weapons/drill.ogg', 40, TRUE) + playsound(src,'sound/items/weapons/drill.ogg', 40, TRUE) // If we caused a qdel drilling the target, we can stop drilling them. // Prevents starting a do_after on a qdeleted target. diff --git a/code/modules/vehicles/mecha/equipment/tools/radio.dm b/code/modules/vehicles/mecha/equipment/tools/radio.dm index 33a113a8274f5..18740fc22b9bd 100644 --- a/code/modules/vehicles/mecha/equipment/tools/radio.dm +++ b/code/modules/vehicles/mecha/equipment/tools/radio.dm @@ -36,7 +36,7 @@ return TRUE if("set_frequency") var/new_frequency = text2num(params["new_frequency"]) - radio.set_frequency(sanitize_frequency(new_frequency, radio.freerange, radio.syndie)) + radio.set_frequency(sanitize_frequency(new_frequency, radio.freerange, (radio.special_channels & RADIO_SPECIAL_SYNDIE))) return TRUE return FALSE diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index cca0a832d5c15..c30e67a274633 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -14,13 +14,11 @@ 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 = TRUE + var/killer_clamp = FALSE ///How much base damage this clamp does 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' + var/clampsound = 'sound/vehicles/mecha/hydraulic.ogg' ///Chassis but typed for the cargo_hold var var/obj/vehicle/sealed/mecha/ripley/workmech @@ -34,6 +32,15 @@ workmech = null return ..() +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/use_tool(atom/target, mob/living/user, delay, amount, volume, datum/callback/extra_checks) + return do_after_mecha(target, user, delay) + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/do_after_checks(atom/target) + // Gotta be close to the target + if(!loc.Adjacent(target)) + return FALSE + return ..() + /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(mob/living/source, atom/target, list/modifiers) if(!action_checks(target)) return @@ -173,7 +180,7 @@ /** - * Handles attemted refills of the extinguisher. + * Handles attempted refills of the extinguisher. * * The mech can only refill an extinguisher that is in front of it. * Only water tank objects can be used. @@ -312,7 +319,7 @@ if(!(mecha.mecha_flags & PANEL_OPEN)) //non-removable upgrade, so lets make sure the pilot or owner has their say. to_chat(user, span_warning("[mecha] panel must be open in order to allow this conversion kit.")) return FALSE - if(LAZYLEN(mecha.occupants)) //We're actualy making a new mech and swapping things over, it might get weird if players are involved + if(LAZYLEN(mecha.occupants)) //We're actually making a new mech and swapping things over, it might get weird if players are involved to_chat(user, span_warning("[mecha] must be unoccupied before this conversion kit can be applied.")) return FALSE if(!mecha.cell) //Turns out things break if the cell is missing @@ -363,7 +370,7 @@ if(HAS_TRAIT(markone, TRAIT_MECHA_CREATED_NORMALLY)) ADD_TRAIT(newmech, TRAIT_MECHA_CREATED_NORMALLY, newmech) qdel(markone) - playsound(get_turf(newmech),'sound/items/ratchet.ogg',50,TRUE) + playsound(get_turf(newmech),'sound/items/tools/ratchet.ogg',50,TRUE) /obj/item/mecha_parts/mecha_equipment/ripleyupgrade/paddy name = "Paddy Conversion Kit" diff --git a/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm b/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm index 828bb6f152cea..ae78558bab6fa 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm @@ -8,7 +8,7 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' var/rounds = 0 var/direct_load //For weapons where we re-load the weapon itself rather than adding to the ammo storage. - var/load_audio = 'sound/weapons/gun/general/mag_bullet_insert.ogg' + var/load_audio = 'sound/items/weapons/gun/general/mag_bullet_insert.ogg' var/ammo_type /// whether to qdel this mecha_ammo when it becomes empty var/qdel_on_empty = FALSE @@ -75,7 +75,7 @@ icon_state = "missile_he" rounds = 8 direct_load = TRUE - load_audio = 'sound/weapons/gun/general/mag_bullet_insert.ogg' + load_audio = 'sound/items/weapons/gun/general/mag_bullet_insert.ogg' ammo_type = MECHA_AMMO_MISSILE_SRM /// PEP-6 Missile type - Used by Robotics @@ -86,7 +86,7 @@ custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*4,/datum/material/gold=SMALL_MATERIAL_AMOUNT*5) rounds = 6 direct_load = TRUE - load_audio = 'sound/weapons/gun/general/mag_bullet_insert.ogg' + load_audio = 'sound/items/weapons/gun/general/mag_bullet_insert.ogg' ammo_type = MECHA_AMMO_MISSILE_PEP /obj/item/mecha_ammo/flashbang diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm index 0bb691160b373..287c9e3cf0e20 100644 --- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -2,7 +2,7 @@ name = "mecha weapon" range = MECHA_RANGED equipment_slot = MECHA_WEAPON - destroy_sound = 'sound/mecha/weapdestr.ogg' + destroy_sound = 'sound/vehicles/mecha/weapdestr.ogg' mech_flags = EXOSUIT_MODULE_COMBAT /// The type of bullet generated by the mecha weapon. var/projectile @@ -53,7 +53,7 @@ return FALSE /// Find our mecha, find the opposite direction. Used for kickback while the mecha is drifting in zero-g to launch us in this direction. - var/newtonian_target = REVERSE_DIR(chassis.dir) + var/newtonian_target = dir2angle(REVERSE_DIR(chassis.dir)) . = ..()//start the cooldown early because of sleeps for(var/projectiles_to_shoot in 1 to projectiles_per_shot) if(energy_drain && !chassis.has_charge(energy_drain))//in case we run out of energy mid-burst, such as emp @@ -97,7 +97,7 @@ icon_state = "mecha_laser" energy_drain = 30 projectile = /obj/projectile/beam/laser - fire_sound = 'sound/weapons/laser.ogg' + fire_sound = 'sound/items/weapons/laser.ogg' harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler @@ -109,7 +109,7 @@ projectile = /obj/projectile/beam/disabler/weak variance = 25 projectiles_per_shot = 5 - fire_sound = 'sound/weapons/taser2.ogg' + fire_sound = 'sound/items/weapons/taser2.ogg' firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/blue /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy @@ -119,7 +119,7 @@ icon_state = "mecha_laser" energy_drain = 60 projectile = /obj/projectile/beam/laser/heavylaser - fire_sound = 'sound/weapons/lasercannonfire.ogg' + fire_sound = 'sound/items/weapons/lasercannonfire.ogg' /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion equip_cooldown = 20 @@ -128,7 +128,7 @@ icon_state = "mecha_ion" energy_drain = 120 projectile = /obj/projectile/ion - fire_sound = 'sound/weapons/laser.ogg' + fire_sound = 'sound/items/weapons/laser.ogg' /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla equip_cooldown = 35 @@ -137,7 +137,7 @@ icon_state = "mecha_ion" energy_drain = 500 projectile = /obj/projectile/energy/tesla/cannon - fire_sound = 'sound/magic/lightningbolt.ogg' + fire_sound = 'sound/effects/magic/lightningbolt.ogg' harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse @@ -147,7 +147,7 @@ icon_state = "mecha_pulse" energy_drain = 120 projectile = /obj/projectile/beam/pulse/heavy - fire_sound = 'sound/weapons/marauder.ogg' + fire_sound = 'sound/items/weapons/marauder.ogg' harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma @@ -160,7 +160,7 @@ righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' energy_drain = 30 projectile = /obj/projectile/plasma/adv/mech - fire_sound = 'sound/weapons/plasma_cutter.ogg' + fire_sound = 'sound/items/weapons/plasma_cutter.ogg' harmful = TRUE mech_flags = EXOSUIT_MODULE_COMBAT | EXOSUIT_MODULE_WORKING @@ -172,7 +172,7 @@ icon_state = "mecha_kineticgun" energy_drain = 30 projectile = /obj/projectile/kinetic/mech - fire_sound = 'sound/weapons/kinetic_accel.ogg' + fire_sound = 'sound/items/weapons/kinetic_accel.ogg' harmful = TRUE mech_flags = EXOSUIT_MODULE_COMBAT | EXOSUIT_MODULE_WORKING @@ -183,7 +183,7 @@ energy_drain = 20 equip_cooldown = 8 projectile = /obj/projectile/energy/electrode - fire_sound = 'sound/weapons/taser.ogg' + fire_sound = 'sound/items/weapons/taser.ogg' firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect @@ -200,7 +200,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/honker/action(mob/source, atom/target, list/modifiers) if(!action_checks(target)) return - playsound(chassis, 'sound/items/airhorn.ogg', 100, TRUE) + playsound(chassis, 'sound/items/airhorn/airhorn.ogg', 100, TRUE) to_chat(source, "[icon2html(src, source)]HONK") for(var/mob/living/carbon/M in ohearers(6, chassis)) if(!M.can_hear()) @@ -232,7 +232,7 @@ //Base ballistic weapon type /obj/item/mecha_parts/mecha_equipment/weapon/ballistic name = "general ballistic weapon" - fire_sound = 'sound/weapons/gun/smg/shot.ogg' + fire_sound = 'sound/items/weapons/gun/smg/shot.ogg' var/projectiles var/projectiles_cache //ammo to be loaded in, if possible. var/projectiles_cache_max @@ -301,7 +301,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced name = "\improper S.H.H. \"Quietus\" Carbine" desc = "A weapon for combat exosuits. A mime invention, field tests have shown that targets cannot even scream before going down." - fire_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' + fire_sound = 'sound/items/weapons/gun/general/heavy_shot_suppressed.ogg' icon_state = "mecha_mime" equip_cooldown = 30 projectile = /obj/projectile/bullet/mime @@ -347,7 +347,7 @@ desc = "A weapon for combat exosuits. Launches short range missiles." icon_state = "mecha_missilerack" projectile = /obj/projectile/bullet/rocket/srm - fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' + fire_sound = 'sound/items/weapons/gun/general/rocket_launch.ogg' projectiles = 8 projectiles_cache = 0 projectiles_cache_max = 0 @@ -362,7 +362,7 @@ desc = "A weapon for combat exosuits. Launches precision explosive projectiles designed to explode only when striking a structured target, including walls, exosuits and cyborgs." icon_state = "mecha_missilerack_six" projectile = /obj/projectile/bullet/rocket/pep - fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' + fire_sound = 'sound/items/weapons/gun/general/rocket_launch.ogg' projectiles = 6 projectiles_cache = 0 projectiles_cache_max = 0 @@ -381,7 +381,7 @@ return TIMER_COOLDOWN_START(chassis, COOLDOWN_MECHA_EQUIPMENT(type), equip_cooldown) chassis.use_energy(energy_drain) - var/newtonian_target = turn(chassis.dir,180) + var/newtonian_target = dir2angle(REVERSE_DIR(chassis.dir)) var/obj/O = new projectile(chassis.loc) playsound(chassis, fire_sound, 50, TRUE) log_message("Launched a [O.name] from [name], targeting [target].", LOG_MECHA) @@ -403,7 +403,7 @@ desc = "A weapon for combat exosuits. Launches primed flashbangs." icon_state = "mecha_grenadelnchr" projectile = /obj/item/grenade/flashbang - fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' + fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg' projectiles = 6 projectiles_cache = 6 projectiles_cache_max = 24 @@ -543,7 +543,7 @@ desc = "A weapon for combat exosuits. Launches primed tear-stache grenades." icon_state = "mecha_grenadelnchr" projectile = /obj/item/grenade/chem_grenade/teargas/moustache - fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' + fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg' projectiles = 6 missile_speed = 1.5 projectiles_cache = 999 @@ -566,7 +566,7 @@ ///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/clampsound = 'sound/vehicles/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. diff --git a/code/modules/vehicles/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm index 5166b9c5fdfc5..c9f0aa20fa736 100644 --- a/code/modules/vehicles/mecha/mech_bay.dm +++ b/code/modules/vehicles/mecha/mech_bay.dm @@ -114,7 +114,7 @@ ui = new(user, src, "MechBayPowerConsole", name) ui.open() -/obj/machinery/computer/mech_bay_power_console/ui_act(action, params) +/obj/machinery/computer/mech_bay_power_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index b4c292202542e..54f8cee9ed4c5 100644 --- a/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/code/modules/vehicles/mecha/mech_fabricator.dm @@ -163,7 +163,7 @@ illegal_local_designs |= illegal_mech_design cached_designs |= illegal_mech_design say("R$c!i&ed ERROR de#i$ns. C@n%ec$%ng to ~NULL~ se%ve$s.") - playsound(src, 'sound/machines/uplinkerror.ogg', 50, TRUE) + playsound(src, 'sound/machines/uplink/uplinkerror.ogg', 50, TRUE) update_static_data_for_all_viewers() return TRUE @@ -187,7 +187,7 @@ if(design_delta > 0) say("Received [design_delta] new design[design_delta == 1 ? "" : "s"].") - playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE) + playsound(src, 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) update_static_data_for_all_viewers() @@ -427,7 +427,7 @@ return data -/obj/machinery/mecha_part_fabricator/ui_act(action, list/params) +/obj/machinery/mecha_part_fabricator/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) diff --git a/code/modules/vehicles/mecha/mech_melee_attack.dm b/code/modules/vehicles/mecha/mech_melee_attack.dm index f37d092b83f32..0d25c21bb4e3c 100644 --- a/code/modules/vehicles/mecha/mech_melee_attack.dm +++ b/code/modules/vehicles/mecha/mech_melee_attack.dm @@ -42,9 +42,9 @@ mecha_attacker.do_attack_animation(src) switch(mecha_attacker.damtype) if(BRUTE) - playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/punch4.ogg', 50, TRUE) if(BURN) - playsound(src, 'sound/items/welder.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 50, TRUE) else return mecha_attacker.visible_message(span_danger("[mecha_attacker] hits [src]!"), span_danger("You hit [src]!"), null, COMBAT_MESSAGE_RANGE) @@ -79,9 +79,9 @@ mecha_attacker.do_attack_animation(src) switch(mecha_attacker.damtype) if(BRUTE) - playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/punch4.ogg', 50, TRUE) if(BURN) - playsound(src, 'sound/items/welder.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/welder.ogg', 50, TRUE) else return mecha_attacker.visible_message(span_danger("[mecha_attacker] hits [src]!"), span_danger("You hit [src]!"), null, COMBAT_MESSAGE_RANGE) diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm index 322a1189053b8..5e3c658a525e2 100644 --- a/code/modules/vehicles/mecha/mecha_actions.dm +++ b/code/modules/vehicles/mecha/mecha_actions.dm @@ -101,7 +101,7 @@ for(var/mob/occupant in occupants) balloon_alert(occupant, "strafing [strafe?"on":"off"]") - occupant.playsound_local(src, 'sound/machines/terminal_eject.ogg', 50, TRUE) + occupant.playsound_local(src, 'sound/machines/terminal/terminal_eject.ogg', 50, TRUE) log_message("Toggled strafing mode [strafe?"on":"off"].", LOG_MECHA) for(var/occupant in occupants) diff --git a/code/modules/vehicles/mecha/mecha_ai_interaction.dm b/code/modules/vehicles/mecha/mecha_ai_interaction.dm index cec3d867e2b6a..4259dff5c3426 100644 --- a/code/modules/vehicles/mecha/mecha_ai_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_ai_interaction.dm @@ -102,7 +102,6 @@ AI.eyeobj?.RegisterSignal(src, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/camera/ai_eye, update_visibility)) AI.controlled_equipment = src AI.remote_control = src - AI.ShutOffDoomsdayDevice() add_occupant(AI) to_chat(AI, AI.can_dominate_mechs ? span_greenannounce("Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!") :\ span_notice("You have been uploaded to a mech's onboard computer.")) diff --git a/code/modules/vehicles/mecha/mecha_control_console.dm b/code/modules/vehicles/mecha/mecha_control_console.dm index 3b465994e9e02..a9dbca0e07db0 100644 --- a/code/modules/vehicles/mecha/mecha_control_console.dm +++ b/code/modules/vehicles/mecha/mecha_control_console.dm @@ -45,7 +45,7 @@ return data -/obj/machinery/computer/mecha/ui_act(action, params) +/obj/machinery/computer/mecha/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -55,7 +55,7 @@ var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["tracker_ref"]) if(!istype(MT)) return - var/message = tgui_input_text(usr, "Input message", "Transmit message") + var/message = tgui_input_text(usr, "Input message", "Transmit message", max_length = MAX_MESSAGE_LEN) var/obj/vehicle/sealed/mecha/M = MT.chassis if(trim(message) && M) to_chat(M.occupants, message) diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index 1237c931b33a5..f0fdc3997a39d 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -63,7 +63,7 @@ return user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - playsound(loc, 'sound/weapons/tap.ogg', 40, TRUE, -1) + playsound(loc, 'sound/items/weapons/tap.ogg', 40, TRUE, -1) user.visible_message(span_danger("[user] hits [src]. Nothing happens."), null, null, COMBAT_MESSAGE_RANGE) log_message("Attack by hand/paw (no damage). Attacker - [user].", LOG_MECHA, color="red") @@ -72,7 +72,7 @@ /obj/vehicle/sealed/mecha/attack_alien(mob/living/user, list/modifiers) log_message("Attack by alien. Attacker - [user].", LOG_MECHA, color="red") - playsound(loc, 'sound/weapons/slash.ogg', 100, TRUE) + playsound(loc, 'sound/items/weapons/slash.ogg', 100, TRUE) attack_generic(user, rand(user.melee_damage_lower, user.melee_damage_upper), BRUTE, MELEE, 0) /obj/vehicle/sealed/mecha/attack_animal(mob/living/simple_animal/user, list/modifiers) @@ -268,7 +268,7 @@ cell = weapon balloon_alert(user, "installed power cell") diag_hud_set_mechcell() - playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE) + playsound(src, 'sound/items/tools/screwdriver2.ogg', 50, FALSE) log_message("Power cell installed", LOG_MECHA) else balloon_alert(user, "already installed!") @@ -280,7 +280,7 @@ return scanmod = weapon balloon_alert(user, "installed scanning module") - playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE) + playsound(src, 'sound/items/tools/screwdriver2.ogg', 50, FALSE) log_message("[weapon] installed", LOG_MECHA) update_part_values() else @@ -293,7 +293,7 @@ return capacitor = weapon balloon_alert(user, "installed capacitor") - playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE) + playsound(src, 'sound/items/tools/screwdriver2.ogg', 50, FALSE) log_message("[weapon] installed", LOG_MECHA) update_part_values() else @@ -306,7 +306,7 @@ return servo = weapon balloon_alert(user, "installed servo") - playsound(src, 'sound/items/screwdriver2.ogg', 50, FALSE) + playsound(src, 'sound/items/tools/screwdriver2.ogg', 50, FALSE) log_message("[weapon] installed", LOG_MECHA) update_part_values() else @@ -406,7 +406,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1)) + if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index 7a9141e80c1a7..53ad199cc0be7 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -20,7 +20,7 @@ moved_inside(M) /obj/vehicle/sealed/mecha/enter_checks(mob/M) - if(M.incapacitated()) + if(M.incapacitated) return FALSE if(atom_integrity <= 0) to_chat(M, span_warning("You cannot get in the [src], it has been destroyed!")) @@ -50,7 +50,7 @@ playsound(src, 'sound/machines/windowdoor.ogg', 50, TRUE) set_mouse_pointer() if(!internal_damage) - SEND_SOUND(newoccupant, sound('sound/mecha/nominal.ogg',volume=50)) + SEND_SOUND(newoccupant, sound('sound/vehicles/mecha/nominal.ogg',volume=50)) return TRUE ///proc called when a new mmi mob tries to enter this mech @@ -100,7 +100,7 @@ setDir(SOUTH) log_message("[brain_obj] moved in as pilot.", LOG_MECHA) if(!internal_damage) - SEND_SOUND(brain_obj, sound('sound/mecha/nominal.ogg',volume=50)) + SEND_SOUND(brain_obj, sound('sound/vehicles/mecha/nominal.ogg',volume=50)) user.log_message("has put the MMI/posibrain of [key_name(brain_mob)] into [src]", LOG_GAME) brain_mob.log_message("was put into [src] by [key_name(user)]", LOG_GAME, log_globally = FALSE) return TRUE @@ -115,12 +115,13 @@ mob_container = brain.container else if(isAI(M)) var/mob/living/silicon/ai/AI = M + mob_container = AI //stop listening to this signal, as the static update is now handled by the eyeobj's setLoc AI.eyeobj?.UnregisterSignal(src, COMSIG_MOVABLE_MOVED) AI.eyeobj?.forceMove(newloc) //kick the eye out as well + AI.controlled_equipment = null + AI.remote_control = null if(forced) - AI.controlled_equipment = null - AI.remote_control = null if(!AI.linked_core) //if the victim AI has no core if (!AI.can_shunt || !length(AI.hacked_apcs)) AI.investigate_log("has been gibbed by being forced out of their mech.", INVESTIGATE_DEATHS) @@ -130,31 +131,30 @@ AI.gib(DROP_ALL_REMAINS) AI = null mecha_flags &= ~SILICON_PILOT - return + return ..() else var/obj/machinery/power/apc/emergency_shunt_apc = pick(AI.hacked_apcs) emergency_shunt_apc.malfoccupy(AI) //get shunted into a random APC (you don't get to choose which) AI = null mecha_flags &= ~SILICON_PILOT - return - newloc = get_turf(AI.linked_core) - qdel(AI.linked_core) - AI.forceMove(newloc) - else - if(!silent) - to_chat(AI, span_notice("Returning to core...")) - AI.controlled_equipment = null - AI.remote_control = null - mob_container = AI - newloc = get_turf(AI.linked_core) - qdel(AI.linked_core) - AI.forceMove(newloc) + return ..() + if(!forced && !silent) + to_chat(AI, span_notice("Returning to core...")) + mecha_flags &= ~SILICON_PILOT + newloc = get_turf(AI.linked_core) + qdel(AI.linked_core) + AI.forceMove(newloc) + if(forced) + to_chat(AI, span_danger("ZZUZULU.ERR--ERRR-NEUROLOG-- PERCEP--- DIST-B**@")) + for(var/count in 1 to 5) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(do_sparks), rand(10, 20), FALSE, AI), count SECONDS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(empulse), get_turf(AI), /*heavy_range = */10, /*light_range = */20), 10 SECONDS) + return ..() else if(isliving(M)) mob_container = M else return ..() var/mob/living/ejector = M - mecha_flags &= ~SILICON_PILOT mob_container.forceMove(newloc)//ejecting mob container log_message("[mob_container] moved out.", LOG_MECHA) SStgui.close_user_uis(M, src) diff --git a/code/modules/vehicles/mecha/mecha_movement.dm b/code/modules/vehicles/mecha/mecha_movement.dm index 3c743bd7fb357..dcd6f47c4fc05 100644 --- a/code/modules/vehicles/mecha/mecha_movement.dm +++ b/code/modules/vehicles/mecha/mecha_movement.dm @@ -42,7 +42,7 @@ if(!istype(backup) || !movement_dir || backup.anchored || continuous_move) //get_spacemove_backup() already checks if a returned turf is solid, so we can just go return TRUE last_pushoff = world.time - if(backup.newtonian_move(REVERSE_DIR(movement_dir), instant = TRUE)) + if(backup.newtonian_move(dir2angle(REVERSE_DIR(movement_dir)), instant = TRUE)) backup.last_pushoff = world.time step_silent = TRUE if(return_drivers()) diff --git a/code/modules/vehicles/mecha/mecha_ui.dm b/code/modules/vehicles/mecha/mecha_ui.dm index 1113a85381361..3c06c901e4e1f 100644 --- a/code/modules/vehicles/mecha/mecha_ui.dm +++ b/code/modules/vehicles/mecha/mecha_ui.dm @@ -121,26 +121,26 @@ )) if(ui_selected_module_index == module_index) ui_selected_module_index = null - continue - var/obj/item/mecha_parts/mecha_equipment/module = islist(equipment) ? equipment[i] : equipment - data += list(list( - "slot" = category, - "icon" = module.icon_state, - "name" = module.name, - "desc" = module.desc, - "detachable" = module.detachable, - "integrity" = (module.get_integrity()/module.max_integrity), - "can_be_toggled" = module.can_be_toggled, - "can_be_triggered" = module.can_be_triggered, - "active" = module.active, - "active_label" = module.active_label, - "equip_cooldown" = module.equip_cooldown && DisplayTimeText(module.equip_cooldown), - "energy_per_use" = module.energy_drain, - "snowflake" = module.get_snowflake_data(), - "ref" = REF(module), - )) - if(isnull(ui_selected_module_index)) - ui_selected_module_index = module_index + else + var/obj/item/mecha_parts/mecha_equipment/module = islist(equipment) ? equipment[i] : equipment + data += list(list( + "slot" = category, + "icon" = module.icon_state, + "name" = module.name, + "desc" = module.desc, + "detachable" = module.detachable, + "integrity" = (module.get_integrity()/module.max_integrity), + "can_be_toggled" = module.can_be_toggled, + "can_be_triggered" = module.can_be_triggered, + "active" = module.active, + "active_label" = module.active_label, + "equip_cooldown" = module.equip_cooldown && DisplayTimeText(module.equip_cooldown), + "energy_per_use" = module.energy_drain, + "snowflake" = module.get_snowflake_data(), + "ref" = REF(module), + )) + if(isnull(ui_selected_module_index)) + ui_selected_module_index = module_index module_index++ return data diff --git a/code/modules/vehicles/mecha/working/clarke.dm b/code/modules/vehicles/mecha/working/clarke.dm index 8b0c71b91ca31..8ccee945ed26e 100644 --- a/code/modules/vehicles/mecha/working/clarke.dm +++ b/code/modules/vehicles/mecha/working/clarke.dm @@ -96,7 +96,7 @@ ) return data -/obj/item/mecha_parts/mecha_equipment/orebox_manager/ui_act(action, list/params) +/obj/item/mecha_parts/mecha_equipment/orebox_manager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return TRUE @@ -105,7 +105,7 @@ if(isnull(cached_ore_box)) return FALSE cached_ore_box.dump_box_contents() - playsound(chassis, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(chassis, 'sound/items/weapons/tap.ogg', 50, TRUE) log_message("Dumped [cached_ore_box].", LOG_MECHA) return TRUE diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm index 754a6b820d721..a2aaa53784f45 100644 --- a/code/modules/vehicles/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -25,8 +25,8 @@ 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) - stepsound = 'sound/mecha/powerloader_step.ogg' - turnsound = 'sound/mecha/powerloader_turn2.ogg' + stepsound = 'sound/vehicles/mecha/powerloader_step.ogg' + turnsound = 'sound/vehicles/mecha/powerloader_turn2.ogg' equip_by_category = list( MECHA_L_ARM = null, MECHA_R_ARM = null, @@ -338,7 +338,7 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) )) return data -/obj/item/mecha_parts/mecha_equipment/ejector/ui_act(action, list/params) +/obj/item/mecha_parts/mecha_equipment/ejector/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return TRUE @@ -350,7 +350,7 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) crate.forceMove(drop_location()) if(crate == chassis.ore_box) chassis.ore_box = null - playsound(chassis, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(chassis, 'sound/items/weapons/tap.ogg', 50, TRUE) log_message("Unloaded [crate]. Cargo compartment capacity: [cargo_capacity - contents.len]", LOG_MECHA) return TRUE @@ -382,7 +382,7 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) 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) +/obj/item/mecha_parts/mecha_equipment/ejector/seccage/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(action == "eject") var/mob/passenger = locate(params["cargoref"]) in contents if(!passenger) @@ -390,7 +390,7 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) 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) + playsound(chassis, 'sound/items/weapons/tap.ogg', 50, TRUE) log_message("Unloaded [passenger]. Cargo compartment capacity: [cargo_capacity - contents.len]", LOG_MECHA) return TRUE return ..() @@ -405,7 +405,7 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo) if(!do_after(user, breakout_time, target = chassis)) return to_chat(user, span_notice("You break out of the [src].")) - playsound(chassis, 'sound/items/crowbar.ogg', 100, TRUE) + playsound(chassis, 'sound/items/tools/crowbar.ogg', 100, TRUE) cheese_it(user) for(var/mob/freebird in contents) if(user != freebird) diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 82146976ad1f8..392c890ca8fd2 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -154,7 +154,7 @@ sparks.start() //the most radical way to start plasma fires for(var/mob/living/carbon/victim in location) if(victim.body_position == LYING_DOWN) - playsound(location, 'sound/items/trayhit2.ogg', 40) + playsound(location, 'sound/items/trayhit/trayhit2.ogg', 40) victim.apply_damage(damage = 25, damagetype = BRUTE, def_zone = victim.get_random_valid_zone(even_weights = TRUE), wound_bonus = 20) victim.Paralyze(1.5 SECONDS) skater.adjustStaminaLoss(instability) @@ -169,7 +169,7 @@ pick_up_board(skater) /obj/vehicle/ridden/scooter/skateboard/proc/pick_up_board(mob/living/carbon/skater) - if (skater.incapacitated() || !Adjacent(skater)) + if (skater.incapacitated || !Adjacent(skater)) return if(has_buckled_mobs()) to_chat(skater, span_warning("You can't lift this up when somebody's on it.")) diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 821a69d8f8269..1c96c90ae68ef 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -92,8 +92,10 @@ if(!istype(M)) return FALSE remove_occupant(M) - if(!isAI(M))//This is the ONE mob we dont want to be moved to the vehicle that should be handeled when used + if(!isAI(M))//This is the ONE mob we don't want to be moved to the vehicle that should be handled when used M.forceMove(exit_location(M)) + else + return TRUE if(randomstep) var/turf/target_turf = get_step(exit_location(M), pick(GLOB.cardinals)) M.throw_at(target_turf, 5, 10) @@ -169,4 +171,5 @@ /obj/vehicle/sealed/proc/on_entered_supermatter(atom/movable/vehicle, atom/movable/supermatter) SIGNAL_HANDLER for (var/mob/passenger as anything in occupants) - passenger.Bump(supermatter) + if(!isAI(passenger)) + passenger.Bump(supermatter) diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm index c8cab1a7dc1cd..6726fb02ef150 100644 --- a/code/modules/vehicles/secway.dm +++ b/code/modules/vehicles/secway.dm @@ -44,7 +44,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1)) + if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) diff --git a/code/modules/vehicles/vehicle_actions.dm b/code/modules/vehicles/vehicle_actions.dm index c378009996618..b5249c216a742 100644 --- a/code/modules/vehicles/vehicle_actions.dm +++ b/code/modules/vehicles/vehicle_actions.dm @@ -252,7 +252,7 @@ vehicle_entered_target.headlights_toggle = !vehicle_entered_target.headlights_toggle vehicle_entered_target.set_light_on(vehicle_entered_target.headlights_toggle) vehicle_entered_target.update_appearance() - playsound(owner, vehicle_entered_target.headlights_toggle ? 'sound/weapons/magin.ogg' : 'sound/weapons/magout.ogg', 40, TRUE) + playsound(owner, vehicle_entered_target.headlights_toggle ? 'sound/items/weapons/magin.ogg' : 'sound/items/weapons/magout.ogg', 40, TRUE) /datum/action/vehicle/sealed/dump_kidnapped_mobs name = "Dump Kidnapped Mobs" @@ -444,7 +444,7 @@ name = "Buzz." desc = "Negative!" button_icon_state = "vim_buzz" - sound_path = 'sound/machines/buzz-sigh.ogg' + sound_path = 'sound/machines/buzz/buzz-sigh.ogg' sound_message = "buzzes." /datum/action/vehicle/sealed/noise/buzz/Trigger(trigger_flags) diff --git a/code/modules/vehicles/vehicle_key.dm b/code/modules/vehicles/vehicle_key.dm index 5f57895d8ac81..2bcc17115b060 100644 --- a/code/modules/vehicles/vehicle_key.dm +++ b/code/modules/vehicles/vehicle_key.dm @@ -63,7 +63,7 @@ if(SKILL_LEVEL_LEGENDARY to INFINITY) //Holy shit, look at that janny go! user.visible_message(span_suicide("[user] is putting \the [src] in [user.p_their()] mouth and has epically become one with the janicart, and they're even in overdrive mode! It looks like [user.p_theyre()] trying to commit suicide!")) user.AddElement(/datum/element/cleaning) - playsound(src, 'sound//magic/lightning_chargeup.ogg', 50, TRUE, -1) + playsound(src, 'sound/effects/magic/lightning_chargeup.ogg', 50, TRUE, -1) user.reagents.add_reagent(/datum/reagent/drug/methamphetamine, 10) //Gotta go fast! for(var/i in 1 to 150) addtimer(CALLBACK(user, TYPE_PROC_REF(/atom, add_atom_colour), (i % 2)? "#a245bb" : "#7a7d82", ADMIN_COLOUR_PRIORITY), i) @@ -90,5 +90,5 @@ righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' attack_verb_continuous = list("flogs", "whips", "lashes", "disciplines") attack_verb_simple = list("flog", "whip", "lash", "discipline") - hitsound = 'sound/weapons/whip.ogg' + hitsound = 'sound/items/weapons/whip.ogg' slot_flags = ITEM_SLOT_BELT diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 4fef2f626c152..074620694ceb8 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -187,16 +187,23 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) /** * Is this item on station or not * - * if it doesn't originate from off-station during mapload, everything is free + * if it doesn't originate from off-station during mapload, all_products_free gets automatically set to TRUE if it was unset previously. * if it's off-station during mapload, it's also safe from the brand intelligence event */ var/onstation = TRUE /** - * A variable to change on a per instance basis on the map that allows the instance - * to ignore whether it's on the station or not. - * Useful to force cost and ID requirements. DO NOT APPLY THIS GLOBALLY. + * DO NOT APPLY THIS GLOBALLY. For mapping var edits only. + * A variable to change on a per instance basis that allows the instance to avoid having onstation set for them during mapload. + * Setting this to TRUE means that the vending machine is treated as if it were still onstation if it spawns off-station during mapload. + * Useful to specify an off-station machine that will be affected by machine-brand intelligence for whatever reason. */ var/onstation_override = FALSE + /** + * If this is set to TRUE, all products sold by the vending machine are free (cost nothing). + * If unset, this will get automatically set to TRUE during init if the machine originates from off-station during mapload. + * Defaults to null, set it to TRUE or FALSE explicitly on a per-machine basis if you want to force it to be a certain value. + */ + var/all_products_free ///Items that the players have loaded into the vendor var/list/vending_machine_input = list() @@ -260,8 +267,10 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(!is_station_level(z)) if(!onstation_override) onstation = FALSE + if(isnull(all_products_free)) // Only auto-set the free products var if we haven't explicitly assigned a value to it yet. + all_products_free = TRUE if(circuit) - circuit.onstation = onstation //sync up the circuit so the pricing schema is carried over if it's reconstructed. + circuit.all_products_free = all_products_free //sync up the circuit so the pricing schema is carried over if it's reconstructed. else if(HAS_TRAIT(SSstation, STATION_TRAIT_VENDING_SHORTAGE)) for (var/datum/data/vending_product/product_record as anything in product_records + coin_records + hidden_records) @@ -275,9 +284,9 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(tiltable && prob(6)) // 1 in 17 chance to start tilted (as an additional hint to the station trait behind it) INVOKE_ASYNC(src, PROC_REF(tilt), loc) credits_contained = 0 // If it's tilted, it's been looted, so no credits for you. - else if(circuit && (circuit.onstation != onstation)) //check if they're not the same to minimize the amount of edited values. - onstation = circuit.onstation //if it was constructed outside mapload, sync the vendor up with the circuit's var so you can't bypass price requirements by moving / reconstructing it off station. - if(onstation && !onstation_override) + else if(circuit) + all_products_free = circuit.all_products_free //if it was constructed outside mapload, sync the vendor up with the circuit's var so you can't bypass price requirements by moving / reconstructing it off station. + if(!all_products_free) AddComponent(/datum/component/payment, 0, SSeconomy.get_dep_account(payment_department), PAYMENT_VENDING) GLOB.vending_machines_to_restock += src //We need to keep track of the final onstation vending machines so we can keep them restocked. register_context() @@ -887,7 +896,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) living_target.Paralyze(paralyze_time) living_target.emote("scream") - playsound(living_target, 'sound/effects/blobattack.ogg', 40, TRUE) + playsound(living_target, 'sound/effects/blob/blobattack.ogg', 40, TRUE) playsound(living_target, 'sound/effects/splat.ogg', 50, TRUE) post_crush_living(living_target, was_alive) flags_to_return |= (SUCCESSFULLY_CRUSHED_MOB|SUCCESSFULLY_CRUSHED_ATOM) @@ -988,7 +997,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) var/list/weighted_crits = list() weighted_crits[CRUSH_CRIT_SHATTER_LEGS] = 100 - weighted_crits[CRUSH_CRIT_PARAPALEGIC] = 80 + weighted_crits[CRUSH_CRIT_PARAPLEGIC] = 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 @@ -1027,7 +1036,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(left_leg || right_leg) carbon_target.visible_message(span_danger("[carbon_target]'s legs shatter with a sickening crunch!"), span_userdanger("Your legs shatter with a sickening crunch!")) return TRUE - if(CRUSH_CRIT_PARAPALEGIC) // paralyze this binch + if(CRUSH_CRIT_PARAPLEGIC) // paralyze this binch // the new paraplegic gets like 4 lines of losing their legs so skip them if (!iscarbon(atom_target)) return FALSE @@ -1184,17 +1193,19 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) return TRUE /obj/machinery/vending/interact(mob/user) - if (!HAS_AI_ACCESS(user)) - if(seconds_electrified && !(machine_stat & NOPOWER)) - if(shock(user, 100)) - return + if (HAS_AI_ACCESS(user)) + return ..() - if(tilted && !user.buckled && !isAdminGhostAI(user)) - to_chat(user, span_notice("You begin righting [src].")) - if(do_after(user, 5 SECONDS, target=src)) - untilt(user) + if(seconds_electrified && !(machine_stat & NOPOWER)) + if(shock(user, 100)) return + if(tilted && !user.buckled) + to_chat(user, span_notice("You begin righting [src].")) + if(do_after(user, 5 SECONDS, target=src)) + untilt(user) + return + return ..() /obj/machinery/vending/attack_robot_secondary(mob/user, list/modifiers) @@ -1216,6 +1227,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) /obj/machinery/vending/ui_static_data(mob/user) var/list/data = list() data["onstation"] = onstation + data["all_products_free"] = all_products_free data["department"] = payment_department data["jobDiscount"] = DEPARTMENT_DISCOUNT data["product_records"] = list() @@ -1317,7 +1329,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) .["extended_inventory"] = extended_inventory -/obj/machinery/vending/ui_act(action, params) +/obj/machinery/vending/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -1766,7 +1778,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) ) .["vending_machine_input"] += list(data) -/obj/machinery/vending/custom/ui_act(action, params) +/obj/machinery/vending/custom/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -1787,9 +1799,9 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(compartmentLoadAccessCheck(user)) if(IS_WRITING_UTENSIL(attack_item)) - name = tgui_input_text(user, "Set name", "Name", name, 20) - desc = tgui_input_text(user, "Set description", "Description", desc, 60) - slogan_list += tgui_input_text(user, "Set slogan", "Slogan", "Epic", 60) + name = tgui_input_text(user, "Set name", "Name", name, max_length = 20) + desc = tgui_input_text(user, "Set description", "Description", desc, max_length = 60) + slogan_list += tgui_input_text(user, "Set slogan", "Slogan", "Epic", max_length = 60) last_slogan = world.time + rand(0, slogan_delay) return diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index 8211b05553d8b..e0e079b6e8cc6 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -224,7 +224,6 @@ GLOBAL_VAR_INIT(all_autodrobe_items, (autodrobe_costumes_items +\ icon_state = "theater" icon_deny = "theater-deny" panel_type = "panel16" - req_access = list(ACCESS_THEATRE) product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!" vend_reply = "Thank you for using AutoDrobe!" @@ -236,7 +235,7 @@ GLOBAL_VAR_INIT(all_autodrobe_items, (autodrobe_costumes_items +\ default_price = PAYCHECK_CREW * 0.8 //Default of 40. extra_price = PAYCHECK_COMMAND payment_department = ACCOUNT_SRV - light_mask="theater-light-mask" + light_mask = "theater-light-mask" /obj/machinery/vending/autodrobe/Initialize(mapload) product_categories = list( @@ -281,9 +280,6 @@ GLOBAL_VAR_INIT(all_autodrobe_items, (autodrobe_costumes_items +\ . = ..() -/obj/machinery/vending/autodrobe/all_access - desc = "A vending machine for costumes. This model appears to have no access restrictions." - req_access = null /obj/item/vending_refill/autodrobe machine_name = "AutoDrobe" icon_state = "refill_costume" diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index 791b1c6f71562..f05dcb3e9f17f 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -85,19 +85,13 @@ product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" - req_access = list(ACCESS_BAR) refill_canister = /obj/item/vending_refill/boozeomat default_price = PAYCHECK_CREW * 0.9 extra_price = PAYCHECK_COMMAND payment_department = ACCOUNT_SRV light_mask = "boozeomat-light-mask" -/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. This model appears to have no access restrictions." - req_access = null - -/obj/machinery/vending/boozeomat/syndicate_access - req_access = list(ACCESS_SYNDICATE) +/obj/machinery/vending/boozeomat/syndicate age_restrictions = FALSE initial_language_holder = /datum/language_holder/syndicate diff --git a/code/modules/vending/cartridge.dm b/code/modules/vending/cartridge.dm index 7c4a2c9578d70..ccc13b7de720a 100644 --- a/code/modules/vending/cartridge.dm +++ b/code/modules/vending/cartridge.dm @@ -19,7 +19,7 @@ default_price = PAYCHECK_COMMAND extra_price = PAYCHECK_COMMAND * 2.5 payment_department = ACCOUNT_SRV - light_mask="cart-light-mask" + light_mask = "cart-light-mask" /obj/item/vending_refill/cart machine_name = "PTech" diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index 61379e5635468..450c8e74100c6 100644 --- a/code/modules/vending/cigarette.dm +++ b/code/modules/vending/cigarette.dm @@ -18,6 +18,7 @@ ) contraband = list( /obj/item/vape = 5, + /obj/item/cigarette/dart = 1, ) premium = list( /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 3, @@ -75,7 +76,7 @@ machine_name = "ShadyCigs Deluxe" icon_state = "refill_smoke" -/obj/machinery/vending/cigarette/pre_throw(obj/item/I) - if(istype(I, /obj/item/lighter)) - var/obj/item/lighter/L = I - L.set_lit(TRUE) +/obj/machinery/vending/cigarette/pre_throw(obj/item/thrown_item) + if(istype(thrown_item, /obj/item/lighter)) + var/obj/item/lighter/thrown_lighter = thrown_item + thrown_lighter.set_lit(TRUE) diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index dd4a4dd4b99b5..d9fddd07f1731 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -36,7 +36,6 @@ extra_price = PAYCHECK_CREW payment_department = ACCOUNT_SRV - /obj/item/vending_refill/cola machine_name = "Robust Softdrinks" icon_state = "refill_cola" diff --git a/code/modules/vending/cytopro.dm b/code/modules/vending/cytopro.dm new file mode 100644 index 0000000000000..ce351be7769da --- /dev/null +++ b/code/modules/vending/cytopro.dm @@ -0,0 +1,35 @@ +/obj/machinery/vending/cytopro + name = "\improper CytoPro" + desc = "For all your cytology needs!" + product_slogans = "Cloning? Don't be ridiculous.;Don't be uncultured, get some cells growing!;Who needs farms when we got vats?" + product_ads = "Grow your own little creatures!;Biology, at your fingertips!" + icon_state = "cytopro" + icon_deny = "cytopro-deny" + panel_type = "panel2" + light_mask = "cytopro-light-mask" + products = list( + /obj/item/storage/bag/xeno = 5, + /obj/item/reagent_containers/condiment/protein = 10, + /obj/item/storage/box/swab = 3, + /obj/item/storage/box/petridish = 3, + /obj/item/storage/box/monkeycubes = 3, + /obj/item/biopsy_tool = 3, + /obj/item/clothing/under/rank/rnd/scientist = 5, + /obj/item/clothing/suit/toggle/labcoat/science = 5, + /obj/item/clothing/suit/bio_suit/scientist = 3, + /obj/item/clothing/head/bio_hood/scientist = 3, + /obj/item/reagent_containers/dropper = 5, + /obj/item/reagent_containers/syringe = 5, + /obj/item/petri_dish/random = 6, + ) + contraband = list( + /obj/item/knife/kitchen = 3, + ) + refill_canister = /obj/item/vending_refill/cytopro + default_price = PAYCHECK_CREW * 1 + extra_price = PAYCHECK_COMMAND * 0.5 + payment_department = ACCOUNT_SCI + +/obj/item/vending_refill/cytopro + machine_name = "CytoPro" + icon_state = "refill_plant" diff --git a/code/modules/vending/engineering.dm b/code/modules/vending/engineering.dm index 48da7e27b1286..f360b89a07fae 100644 --- a/code/modules/vending/engineering.dm +++ b/code/modules/vending/engineering.dm @@ -5,7 +5,6 @@ icon_state = "engi" icon_deny = "engi-deny" panel_type = "panel10" - req_access = list(ACCESS_ENGINE_EQUIP) products = list( /obj/item/clothing/under/rank/engineering/chief_engineer = 4, /obj/item/clothing/under/rank/engineering/engineer = 4, diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index f7fca7e017b47..3a415f3fa9ce4 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -4,7 +4,6 @@ icon_state = "engivend" icon_deny = "engivend-deny" panel_type = "panel10" - req_access = list(ACCESS_ENGINE_EQUIP) products = list( /obj/item/clothing/glasses/meson/engine = 2, /obj/item/clothing/glasses/welding = 3, diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index 969ba6add455a..98a77c7f40c3d 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -45,6 +45,19 @@ /obj/item/stack/pipe_cleaner_coil/random = 10, ), ), + list( + "name" = "Fishing", + "icon" = "fish", + "products" = list( + /obj/item/storage/toolbox/fishing = 2, + /obj/item/storage/box/fishing_hooks = 2, + /obj/item/storage/box/fishing_lines = 2, + /obj/item/storage/box/fishing_lures = 2, + /obj/item/book/manual/fish_catalog = 5, + /obj/item/fish_analyzer = 2, + /obj/item/fishing_rod/telescopic = 1, + ), + ), list( "name" = "Skillchips", "icon" = "floppy-disk", @@ -58,6 +71,7 @@ /obj/item/skillchip/sabrage = 2, /obj/item/skillchip/useless_adapter = 5, /obj/item/skillchip/wine_taster = 2, + /obj/item/skillchip/big_pointer = 2, ), ), list( diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 0bfb2e6c2dfdc..e569779370303 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -8,31 +8,34 @@ vend_reply = "Come back for more!" circuit = /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor products = list( - /obj/item/gun/ballistic/automatic/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/pistol/toy = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, - /obj/item/toy/sword = 10, + /obj/item/card/emagfake = 4, + /obj/item/hot_potato/harmless/toy = 4, + /obj/item/toy/sword = 12, + /obj/item/dualsaber/toy = 12, + /obj/item/toy/foamblade = 12, + /obj/item/gun/ballistic/automatic/pistol/toy/riot = 8, + /obj/item/gun/ballistic/automatic/toy/riot = 8, + /obj/item/gun/ballistic/shotgun/toy/riot = 8, /obj/item/ammo_box/foambox = 20, - /obj/item/toy/foamblade = 10, - /obj/item/toy/balloon/syndicate = 10, - /obj/item/clothing/suit/syndicatefake = 5, - /obj/item/clothing/head/syndicatefake = 5, //OPS IN DORMS oh wait it's just an assistant ) contraband = list( - /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, //Congrats, you unlocked the +18 setting! - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot = 10, + /obj/item/toy/balloon/syndicate = 1, + /obj/item/gun/ballistic/shotgun/toy/crossbow/riot = 8, + /obj/item/toy/katana = 12, + ) + premium = list( + /obj/item/toy/cards/deck/syndicate = 12, + /obj/item/storage/box/fakesyndiesuit = 4, + /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot = 4, + /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot = 4, /obj/item/ammo_box/foambox/riot = 20, - /obj/item/toy/katana = 10, - /obj/item/dualsaber/toy = 5, - /obj/item/toy/cards/deck/syndicate = 10, //Gambling and it hurts, making it a +18 item ) armor_type = /datum/armor/vending_toyliberationstation resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/donksoft - default_price = PAYCHECK_COMMAND + default_price = PAYCHECK_CREW extra_price = PAYCHECK_COMMAND - payment_department = ACCOUNT_SRV + payment_department = NO_FREEBIES light_mask = "donksoft-light-mask" /datum/armor/vending_toyliberationstation diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index 2209f550fce28..d7dd8f83cfd8f 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -5,7 +5,6 @@ icon_deny = "med-deny" panel_type = "panel11" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" - req_access = list(ACCESS_MEDICAL) products = list( /obj/item/stack/medical/gauze = 8, /obj/item/reagent_containers/syringe = 12, @@ -34,6 +33,7 @@ /obj/item/storage/medkit/advanced = 2, /obj/item/shears = 1, /obj/item/storage/organbox = 1, + /obj/item/storage/medkit/surgery = 1, // BUBBER EDIT ADDITION ) refill_canister = /obj/item/vending_refill/medical default_price = PAYCHECK_CREW @@ -45,13 +45,11 @@ machine_name = "NanoMed Plus" icon_state = "refill_medical" -/obj/machinery/vending/medical/syndicate_access +/obj/machinery/vending/medical/syndicate name = "\improper SyndiMed Plus" - req_access = list(ACCESS_SYNDICATE) initial_language_holder = /datum/language_holder/syndicate /obj/machinery/vending/medical/infested_frigate - req_access = list("theatre") products = list( /obj/item/stack/medical/gauze = 0, /obj/item/reagent_containers/syringe = 7, @@ -75,7 +73,6 @@ icon_deny = "drug-deny" panel_type = "panel11" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" - req_access = list(ACCESS_MEDICAL) products = list( /obj/item/reagent_containers/pill/patch/libital = 5, /obj/item/reagent_containers/pill/patch/aiuri = 5, @@ -93,17 +90,17 @@ /obj/item/reagent_containers/medigel/libital = 2, /obj/item/reagent_containers/medigel/aiuri = 2, /obj/item/reagent_containers/medigel/sterilizine = 1, - ) + ) contraband = list( /obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/pill/morphine = 4, /obj/item/reagent_containers/pill/multiver = 6, - ) + ) premium = list( /obj/item/reagent_containers/medigel/synthflesh = 2, /obj/item/storage/pill_bottle/psicodine = 2, /obj/item/storage/pill_bottle/sansufentanyl = 1, - ) + ) default_price = 50 extra_price = 100 payment_department = ACCOUNT_MED diff --git a/code/modules/vending/robotics.dm b/code/modules/vending/robotics.dm index 8796e8d756192..8496404195386 100644 --- a/code/modules/vending/robotics.dm +++ b/code/modules/vending/robotics.dm @@ -6,7 +6,6 @@ icon_deny = "robotics-deny" panel_type = "panel14" light_mask = "robotics-light-mask" - req_access = list(ACCESS_ROBOTICS) products = list( /obj/item/clothing/suit/toggle/labcoat = 4, /obj/item/clothing/under/rank/rnd/roboticist = 4, diff --git a/code/modules/vending/runic_vendor.dm b/code/modules/vending/runic_vendor.dm index f338340c8b1d8..3e6d21c708fe1 100644 --- a/code/modules/vending/runic_vendor.dm +++ b/code/modules/vending/runic_vendor.dm @@ -65,7 +65,7 @@ SHOULD_NOT_OVERRIDE(TRUE) visible_message(span_warning("[src] flickers and disappears!")) - playsound(src,'sound/weapons/resonator_blast.ogg',25,TRUE) + playsound(src,'sound/items/weapons/resonator_blast.ogg',25,TRUE) return ..() /obj/machinery/vending/runic_vendor/proc/runic_explosion() diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 7bed3ccec0645..a86f5562862d9 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -6,7 +6,6 @@ icon_deny = "sec-deny" panel_type = "panel6" light_mask = "sec-light-mask" - req_access = list(ACCESS_SECURITY) products = list( /obj/item/restraints/handcuffs = 8, /obj/item/restraints/handcuffs/cable/zipties = 10, @@ -38,14 +37,14 @@ extra_price = PAYCHECK_COMMAND * 1.5 payment_department = ACCOUNT_SEC -/obj/machinery/vending/security/pre_throw(obj/item/I) - if(isgrenade(I)) - var/obj/item/grenade/G = I - G.arm_grenade() - else if(istype(I, /obj/item/flashlight)) - var/obj/item/flashlight/F = I - F.set_light_on(TRUE) - F.update_brightness() +/obj/machinery/vending/security/pre_throw(obj/item/thrown_item) + if(isgrenade(thrown_item)) + var/obj/item/grenade/thrown_grenade = thrown_item + thrown_grenade.arm_grenade() + else if(istype(thrown_item, /obj/item/flashlight)) + var/obj/item/flashlight/thrown_flashlight = thrown_item + thrown_flashlight.set_light_on(TRUE) + thrown_flashlight.update_brightness() /obj/item/vending_refill/security machine_name = "SecTech" diff --git a/code/modules/vending/subtype.dm b/code/modules/vending/subtype.dm index 3a1a04ff6e764..360eb46defd31 100644 --- a/code/modules/vending/subtype.dm +++ b/code/modules/vending/subtype.dm @@ -10,7 +10,7 @@ circuit = null product_slogans = "Spawn \" too annoying? Too lazy to open game panel? This one's for you!;Subtype vendor, for all your debugging woes!" default_price = 0 - onstation = FALSE + all_products_free = TRUE /// Spawns coders by default var/type_to_vend = /obj/item/food/grown/citrus diff --git a/code/modules/vending/sustenance.dm b/code/modules/vending/sustenance.dm index a1d11c307277e..5b54b6bbca464 100644 --- a/code/modules/vending/sustenance.dm +++ b/code/modules/vending/sustenance.dm @@ -36,7 +36,7 @@ desc = "A vending machine which vends food, as required by section 47-C of the NT's Prisoner Ethical Treatment Agreement. \ This one, however, processes labor points for its products if the user is incarcerated." icon_state = "sustenance_labor" - onstation_override = TRUE + all_products_free = FALSE displayed_currency_icon = "digging" displayed_currency_name = " LP" diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index e3f3b3316f244..8f92e438b5149 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -9,27 +9,31 @@ light_mask = "donksoft-light-mask" circuit = /obj/item/circuitboard/machine/vending/donksofttoyvendor products = list( - /obj/item/gun/ballistic/automatic/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/pistol/toy = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, - /obj/item/toy/sword = 10, - /obj/item/ammo_box/foambox = 20, - /obj/item/toy/foamblade = 10, - /obj/item/toy/balloon/syndicate = 10, - /obj/item/clothing/suit/syndicatefake = 5, - /obj/item/clothing/head/syndicatefake = 5, + /obj/item/card/emagfake = 4, + /obj/item/hot_potato/harmless/toy = 4, + /obj/item/toy/sword = 12, + /obj/item/toy/foamblade = 12, + /obj/item/gun/ballistic/automatic/pistol/toy = 8, + /obj/item/gun/ballistic/automatic/toy = 8, + /obj/item/gun/ballistic/shotgun/toy = 8, + /obj/item/ammo_box/foambox/mini = 20, ) contraband = list( - /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, - /obj/item/toy/katana = 10, - /obj/item/dualsaber/toy = 5, + /obj/item/toy/balloon/syndicate = 1, + /obj/item/gun/ballistic/shotgun/toy/crossbow = 8, + /obj/item/toy/katana = 12, + /obj/item/ammo_box/foambox/riot/mini = 20, + ) + premium = list( + /obj/item/dualsaber/toy = 4, + /obj/item/storage/box/fakesyndiesuit = 4, + /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 4, + /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 4, ) refill_canister = /obj/item/vending_refill/donksoft default_price = PAYCHECK_CREW extra_price = PAYCHECK_COMMAND - payment_department = ACCOUNT_SRV + payment_department = NO_FREEBIES /obj/item/vending_refill/donksoft machine_name = "Donksoft Toy Vendor" diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index 21b1dc96296f8..4d37e2eb6468a 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -333,7 +333,7 @@ GLOBAL_VAR_INIT(roaches_deployed, FALSE) /obj/item/storage/backpack/satchel/explorer = 1, /obj/item/storage/backpack/messenger/explorer = 1, /obj/item/storage/bag/books = 1, - /obj/item/radio/headset/headset_srv = 2, + /obj/item/radio/headset/headset_srvent = 2, ) refill_canister = /obj/item/vending_refill/wardrobe/curator_wardrobe payment_department = ACCOUNT_SRV diff --git a/code/modules/wiremod/components/abstract/module.dm b/code/modules/wiremod/components/abstract/module.dm index 4dd144b4c80e3..e43cba9b239df 100644 --- a/code/modules/wiremod/components/abstract/module.dm +++ b/code/modules/wiremod/components/abstract/module.dm @@ -236,8 +236,7 @@ return ..() #define WITHIN_RANGE(id, table) (id >= 1 && id <= length(table)) - -/obj/item/circuit_component/module/ui_act(action, list/params) +/obj/item/circuit_component/module/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/wiremod/components/action/soundemitter.dm b/code/modules/wiremod/components/action/soundemitter.dm index 44b9cbae8ab05..676ce8744385f 100644 --- a/code/modules/wiremod/components/action/soundemitter.dm +++ b/code/modules/wiremod/components/action/soundemitter.dm @@ -47,26 +47,26 @@ /obj/item/circuit_component/soundemitter/populate_options() var/static/component_options = list( - "Buzz" = 'sound/machines/buzz-sigh.ogg', - "Buzz Twice" = 'sound/machines/buzz-two.ogg', + "Buzz" = 'sound/machines/buzz/buzz-sigh.ogg', + "Buzz Twice" = 'sound/machines/buzz/buzz-two.ogg', "Chime" = 'sound/machines/chime.ogg', "Honk" = 'sound/items/bikehorn.ogg', "Ping" = 'sound/machines/ping.ogg', "Sad Trombone" = 'sound/misc/sadtrombone.ogg', "Warn" = 'sound/machines/warning-buzzer.ogg', "Slow Clap" = 'sound/machines/slowclap.ogg', - "Moth Buzz" = 'sound/voice/moth/scream_moth.ogg', - "Squeak" = 'sound/items/toysqueak1.ogg', - "Rip" = 'sound/items/poster_ripped.ogg', + "Moth Buzz" = 'sound/mobs/humanoids/moth/scream_moth.ogg', + "Squeak" = 'sound/items/toy_squeak/toysqueak1.ogg', + "Rip" = 'sound/items/poster/poster_ripped.ogg', "Coinflip" = 'sound/items/coinflip.ogg', "Megaphone" = 'sound/items/megaphone.ogg', - "Warpwhistle" = 'sound/magic/warpwhistle.ogg', - "Hiss" = 'sound/voice/hiss1.ogg', - "Lizard" = 'sound/voice/lizard/lizard_scream_1.ogg', - "Flashbang" = 'sound/weapons/flashbang.ogg', - "Flash" = 'sound/weapons/flash.ogg', - "Whip" = 'sound/weapons/whip.ogg', - "Laugh Track" = 'sound/items/SitcomLaugh1.ogg', + "Warpwhistle" = 'sound/effects/magic/warpwhistle.ogg', + "Hiss" = 'sound/mobs/non-humanoids/hiss/hiss1.ogg', + "Lizard" = 'sound/mobs/humanoids/lizard/lizard_scream_1.ogg', + "Flashbang" = 'sound/items/weapons/flashbang.ogg', + "Flash" = 'sound/items/weapons/flash.ogg', + "Whip" = 'sound/items/weapons/whip.ogg', + "Laugh Track" = 'sound/items/sitcom_laugh/sitcomLaugh1.ogg', "Gavel" = 'sound/items/gavel.ogg', ) sound_file = add_option_port("Sound Option", component_options) diff --git a/code/modules/wiremod/components/admin/input_request.dm b/code/modules/wiremod/components/admin/input_request.dm index 13dfacba35784..3961003d43ac5 100644 --- a/code/modules/wiremod/components/admin/input_request.dm +++ b/code/modules/wiremod/components/admin/input_request.dm @@ -59,7 +59,7 @@ var/new_option = input_options.value switch(new_option) if(COMP_INPUT_STRING) - var/player_input = tgui_input_text(player, "Input a value", "Input value") + var/player_input = tgui_input_text(player, "Input a value", "Input value", max_length = MAX_MESSAGE_LEN) if(isnull(player_input)) return input_response.set_output(player_input) diff --git a/code/modules/wiremod/components/admin/proccall.dm b/code/modules/wiremod/components/admin/proccall.dm index b86e05e6c8a8b..594c0a6e7d1b6 100644 --- a/code/modules/wiremod/components/admin/proccall.dm +++ b/code/modules/wiremod/components/admin/proccall.dm @@ -114,7 +114,7 @@ arguments += add_input_port(data["name"], data["datatype"]) return ..() -/obj/item/circuit_component/proccall/ui_act(action, list/params) +/obj/item/circuit_component/proccall/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/wiremod/components/atom/direction.dm b/code/modules/wiremod/components/atom/direction.dm index c2bbd5026c8c8..1b14e6505a443 100644 --- a/code/modules/wiremod/components/atom/direction.dm +++ b/code/modules/wiremod/components/atom/direction.dm @@ -13,6 +13,7 @@ /// The result from the output var/datum/port/output/output + var/datum/port/output/distance // Directions outputs var/datum/port/output/north @@ -30,9 +31,10 @@ . += create_ui_notice("Maximum Range: [max_range] tiles", "orange", "info") /obj/item/circuit_component/direction/populate_ports() - input_port = add_input_port("Organism", PORT_TYPE_ATOM) + input_port = add_input_port("Targeted Entity", PORT_TYPE_ATOM) output = add_output_port("Direction", PORT_TYPE_STRING) + distance = add_output_port("Distance", PORT_TYPE_NUMBER) north = add_output_port("North", PORT_TYPE_SIGNAL) east = add_output_port("East", PORT_TYPE_SIGNAL) @@ -45,8 +47,9 @@ if(!object) return var/turf/location = get_location() + var/measured_distance = get_dist(location, object) - if(object.z != location.z || get_dist(location, object) > max_range) + if(object.z != location.z || measured_distance > max_range) output.set_output(null) return @@ -61,3 +64,6 @@ east.set_output(COMPONENT_SIGNAL) if(direction & WEST) west.set_output(COMPONENT_SIGNAL) + + distance.set_output(measured_distance) + diff --git a/code/modules/wiremod/components/bci/thought_listener.dm b/code/modules/wiremod/components/bci/thought_listener.dm index aa788b1a4be88..ed6226a4e491f 100644 --- a/code/modules/wiremod/components/bci/thought_listener.dm +++ b/code/modules/wiremod/components/bci/thought_listener.dm @@ -56,7 +56,7 @@ ready = FALSE /obj/item/circuit_component/thought_listener/proc/thought_listen(mob/living/owner) - var/message = tgui_input_text(owner, input_desc.value ? input_desc.value : "", input_name.value ? input_name.value : "Thought Listener", "") + var/message = tgui_input_text(owner, input_desc.value ? input_desc.value : "", input_name.value ? input_name.value : "Thought Listener", "", max_length = MAX_MESSAGE_LEN) if(QDELETED(owner) || owner.stat >= SOFT_CRIT) return output.set_output(message) diff --git a/code/modules/wiremod/components/id/access_checker.dm b/code/modules/wiremod/components/id/access_checker.dm index 038f4078ecb11..1644d12cba508 100644 --- a/code/modules/wiremod/components/id/access_checker.dm +++ b/code/modules/wiremod/components/id/access_checker.dm @@ -87,7 +87,7 @@ data["oneAccess"] = check_any.value return data -/obj/item/circuit_component/compare/access/ui_act(action, params) +/obj/item/circuit_component/compare/access/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/wiremod/components/math/binary_conversion.dm b/code/modules/wiremod/components/math/binary_conversion.dm index 8d90019b28c89..8ef4067b955fe 100644 --- a/code/modules/wiremod/components/math/binary_conversion.dm +++ b/code/modules/wiremod/components/math/binary_conversion.dm @@ -37,6 +37,15 @@ if(!length(bit_array)) return - for(var/iteration in 1 to length(bit_array)) + var/to_convert = number.value + var/is_negative + if(number.value < 0) + is_negative = TRUE + to_convert = -to_convert + var/len = length(bit_array) + for(var/iteration in 1 to len) var/datum/port/output/bit = bit_array[iteration] - bit.set_output(number.value & (2 ** (iteration - 1))) + if(iteration == 1 && is_negative) + bit.set_output(1) + continue + bit.set_output(!!(to_convert & (1<< (len - iteration)))) diff --git a/code/modules/wiremod/core/component.dm b/code/modules/wiremod/core/component.dm index 02e88e53c2381..07f3a5b55a379 100644 --- a/code/modules/wiremod/core/component.dm +++ b/code/modules/wiremod/core/component.dm @@ -15,6 +15,7 @@ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' custom_materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) + w_class = WEIGHT_CLASS_TINY /// The name of the component shown on the UI var/display_name = "Generic" diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm index 45f71ceb61749..cb51a0e8ab786 100644 --- a/code/modules/wiremod/core/component_printer.dm +++ b/code/modules/wiremod/core/component_printer.dm @@ -117,7 +117,7 @@ materials.use_materials(design.materials, efficiency_coeff, 1, "printed", "[design.name]") return new design.build_path(drop_location()) -/obj/machinery/component_printer/ui_act(action, list/params) +/obj/machinery/component_printer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return @@ -276,7 +276,7 @@ get_asset_datum(/datum/asset/spritesheet/research_designs) ) -/obj/machinery/debug_component_printer/ui_act(action, list/params) +/obj/machinery/debug_component_printer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return @@ -364,7 +364,7 @@ update_static_data_for_all_viewers() -/obj/machinery/module_duplicator/ui_act(action, list/params) +/obj/machinery/module_duplicator/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm index 29f8d42b4894f..b41a5c524300d 100644 --- a/code/modules/wiremod/core/integrated_circuit.dm +++ b/code/modules/wiremod/core/integrated_circuit.dm @@ -16,6 +16,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) 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_TINY /// The name that appears on the shell. var/display_name = "" diff --git a/code/modules/wiremod/core/marker.dm b/code/modules/wiremod/core/marker.dm index 65ed029213e30..f4f36af427b63 100644 --- a/code/modules/wiremod/core/marker.dm +++ b/code/modules/wiremod/core/marker.dm @@ -45,7 +45,7 @@ RegisterSignal(marked_atom, COMSIG_QDELETING, PROC_REF(cleanup_marked_atom)) update_icon() flick("multitool_circuit_flick", src) - playsound(src.loc, 'sound/misc/compiler-stage2.ogg', 30, TRUE) + playsound(src.loc, 'sound/machines/compiler/compiler-stage2.ogg', 30, TRUE) return TRUE /// Allow users to mark items equipped by the target that are visible. diff --git a/code/modules/wiremod/core/usb_cable.dm b/code/modules/wiremod/core/usb_cable.dm index 23683bf0ee81d..5197403c9e693 100644 --- a/code/modules/wiremod/core/usb_cable.dm +++ b/code/modules/wiremod/core/usb_cable.dm @@ -53,7 +53,7 @@ CRASH("Producers of COMSIG_USB_CABLE_CONNECTED_TO_CIRCUIT must set attached_circuit") balloon_alert(user, "connected to circuit\nconnect to a port") - playsound(src, 'sound/machines/pda_button1.ogg', 20, TRUE) + playsound(src, 'sound/machines/pda_button/pda_button1.ogg', 20, TRUE) if (last_attached_circuit != attached_circuit) if (!isnull(last_attached_circuit)) @@ -73,7 +73,7 @@ connection_description = "machine" balloon_alert(user, "connected to [connection_description]") - playsound(src, 'sound/items/screwdriver2.ogg', 20, TRUE) + playsound(src, 'sound/items/tools/screwdriver2.ogg', 20, TRUE) return TRUE diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index 67a3a41a48828..b3a028411c323 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -461,7 +461,7 @@ var/obj/item/organ/internal/cyberimp/bci/bci_organ = carbon_occupant.get_organ_by_type(/obj/item/organ/internal/cyberimp/bci) if (isnull(bci_organ) && isnull(bci_to_implant)) say("No brain-computer interface inserted, and occupant does not have one. Insert a BCI to implant one.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) return FALSE addtimer(CALLBACK(src, PROC_REF(start_process)), 1 SECONDS) diff --git a/code/modules/wiremod/shell/compact_remote.dm b/code/modules/wiremod/shell/compact_remote.dm index 0697a449dbeba..3bf216a4c326e 100644 --- a/code/modules/wiremod/shell/compact_remote.dm +++ b/code/modules/wiremod/shell/compact_remote.dm @@ -13,6 +13,7 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE + w_class = WEIGHT_CLASS_TINY /obj/item/compact_remote/Initialize(mapload) . = ..() diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm index ae0eb01b36763..f68dd0c50b200 100644 --- a/code/modules/wiremod/shell/controller.dm +++ b/code/modules/wiremod/shell/controller.dm @@ -14,6 +14,7 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE + w_class = WEIGHT_CLASS_SMALL /obj/item/controller/Initialize(mapload) . = ..() diff --git a/code/modules/wiremod/shell/gun.dm b/code/modules/wiremod/shell/gun.dm index 7115c3b548bee..9bfa8764f41df 100644 --- a/code/modules/wiremod/shell/gun.dm +++ b/code/modules/wiremod/shell/gun.dm @@ -21,7 +21,7 @@ projectile_type = /obj/projectile/energy/wiremod_gun harmful = FALSE select_name = "circuit" - fire_sound = 'sound/weapons/blaster.ogg' + fire_sound = 'sound/items/weapons/blaster.ogg' /obj/projectile/energy/wiremod_gun name = "scanning beam" diff --git a/code/modules/wiremod/shell/keyboard.dm b/code/modules/wiremod/shell/keyboard.dm index 0b28959aa9c69..505c89e0dde54 100644 --- a/code/modules/wiremod/shell/keyboard.dm +++ b/code/modules/wiremod/shell/keyboard.dm @@ -8,6 +8,7 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE + w_class = WEIGHT_CLASS_SMALL /obj/item/keyboard_shell/Initialize(mapload) . = ..() @@ -48,7 +49,7 @@ to_chat(user, span_warning("You start mashing keys at random!")) return - var/message = tgui_input_text(user, "Input your text", "Keyboard") + var/message = tgui_input_text(user, "Input your text", "Keyboard", max_length = MAX_MESSAGE_LEN) entity.set_output(user) output.set_output(message) signal.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/wiremod/shell/scanner.dm b/code/modules/wiremod/shell/scanner.dm index f32f91fa76f2e..29a061a535a28 100644 --- a/code/modules/wiremod/shell/scanner.dm +++ b/code/modules/wiremod/shell/scanner.dm @@ -13,6 +13,7 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE + w_class = WEIGHT_CLASS_SMALL /obj/item/wiremod_scanner/Initialize(mapload) . = ..() diff --git a/code/modules/wiremod/shell/shell_items.dm b/code/modules/wiremod/shell/shell_items.dm index 06929e3a04c8e..bad787033f967 100644 --- a/code/modules/wiremod/shell/shell_items.dm +++ b/code/modules/wiremod/shell/shell_items.dm @@ -39,6 +39,7 @@ name = "drone assembly" icon_state = "setup_medium_med-open" shell_to_spawn = /mob/living/circuit_drone + w_class = WEIGHT_CLASS_SMALL /obj/item/shell/server name = "server assembly" @@ -52,6 +53,7 @@ icon_state = "construction" shell_to_spawn = /obj/machinery/door/airlock/shell screw_delay = 10 SECONDS + w_class = WEIGHT_CLASS_BULKY /obj/item/shell/dispenser name = "circuit dispenser assembly" @@ -62,6 +64,7 @@ name = "brain-computer interface assembly" icon_state = "bci-open" shell_to_spawn = /obj/item/organ/internal/cyberimp/bci + w_class = WEIGHT_CLASS_TINY /obj/item/shell/scanner_gate name = "scanner gate assembly" diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index 14dc6edee1118..894eeeeeb2183 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -5,7 +5,7 @@ sustain the zombie, smashing open airlock doors and opening \ child-safe caps on bottles." - hitsound = 'sound/hallucinations/growl1.ogg' + hitsound = 'sound/effects/hallucinations/growl1.ogg' force = 21 // Just enough to break airlocks with melee attacks wound_bonus = -30 bare_wound_bonus = 15 diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 2ed2bf541d88c..bd8646ccb780d 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -70,9 +70,9 @@ if(owner.stat != DEAD && !converts_living) return if(!iszombie(owner)) - to_chat(owner, "You can feel your heart stopping, but something isn't right... \ + to_chat(owner, span_cult_large("You can feel your heart stopping, but something isn't right... \ life has not abandoned your broken form. You can only feel a deep and immutable hunger that \ - not even death can stop, you will rise again!") + not even death can stop, you will rise again!")) var/revive_time = rand(revive_time_min, revive_time_max) var/flags = TIMER_STOPPABLE timer_id = addtimer(CALLBACK(src, PROC_REF(zombify), owner), revive_time, flags) @@ -95,7 +95,7 @@ to_chat(target, span_alien("You HUNGER!")) to_chat(target, span_alertalien("You are now a zombie! Do not seek to be cured, do not help any non-zombies in any way, do not harm your zombie brethren and spread the disease by killing others. You are a creature of hunger and violence.")) - playsound(target, 'sound/hallucinations/far_noise.ogg', 50, 1) + playsound(target, 'sound/effects/hallucinations/far_noise.ogg', 50, 1) target.do_jitter_animation(living_transformation_time) target.Stun(living_transformation_time) diff --git a/code/world.dm b/code/world.dm index 4f0b46c815ac4..31437dda2f539 100644 --- a/code/world.dm +++ b/code/world.dm @@ -18,7 +18,7 @@ name = "/tg/ Station 13" fps = 20 cache_lifespan = 0 - //map_format = SIDE_MAP // SKYRAT EDIT - TODO: WALLENING - REMOVE THIS (hopefully the visual z-fighting issues will have been ironed out by then + map_format = SIDE_MAP #ifdef FIND_REF_NO_CHECK_TICK loop_checks = FALSE #endif diff --git a/config/antag_rep.txt b/config/antag_rep.txt deleted file mode 100644 index a3e9ef2ab7a10..0000000000000 --- a/config/antag_rep.txt +++ /dev/null @@ -1,5 +0,0 @@ -## Custom antag reputation values -## List of job titles followed by antag rep value, all prefixed with ANTAG_REP. See code/modules/jobs/job_types for titles -## e.g. -## ANTAG_REP Captain 10 -## ANTAG_REP Assistant 0 diff --git a/config/config.txt b/config/config.txt index 2c6798bf5d2a9..5aa4b1073493e 100644 --- a/config/config.txt +++ b/config/config.txt @@ -283,7 +283,7 @@ NOTE_FRESH_DAYS 91.31055 ## Notes older then this will be completely faded out. NOTE_STALE_DAYS 365.2422 -## Uncomment to allow drastic performence enhancemet measures to turn on automatically once there are equal or more clients than the configured amount (will also prompt admin for veto) +## Uncomment to allow drastic performance enhancement measures to turn on automatically once there are equal or more clients than the configured amount (will also prompt admin for veto) #AUTO_LAG_SWITCH_POP 75 ##Note: all population caps can be used with each other if desired. @@ -310,7 +310,7 @@ EXTREME_POPCAP_MESSAGE The server is currently serving a high number of users, f BYOND_MEMBER_BYPASS_POPCAP ## Notify admins when a new player connects for the first x days a player's been around. (0 for first connection only, -1 for never) -## Requres database +## Requires database NOTIFY_NEW_PLAYER_AGE 0 ## Notify admins when a player connects if their byond account was created in the last X days @@ -318,7 +318,7 @@ NOTIFY_NEW_PLAYER_AGE 0 NOTIFY_NEW_PLAYER_ACCOUNT_AGE 1 ## Notify the irc channel when a new player makes their first connection -## Requres database +## Requires database #IRC_FIRST_CONNECTION_ALERT ## Discord ID of a role that should be pinged when a new player makes their first connection @@ -425,13 +425,13 @@ SECOND_CLICK_LIMIT 15 MINUTE_CLICK_LIMIT 400 ##Error handling related options -## The "cooldown" time for each occurence of a unique error +## The "cooldown" time for each occurrence of a unique error #ERROR_COOLDOWN 600 -## How many occurences before the next will silence them +## How many occurrences before the next will silence them #ERROR_LIMIT 90 ## How long a unique error will be silenced for #ERROR_SILENCE_TIME 6000 -##How long to wait between messaging admins about occurences of a unique error +##How long to wait between messaging admins about occurrences of a unique error #ERROR_MSG_DELAY 50 diff --git a/config/game_options.txt b/config/game_options.txt index ea5a9543afb12..21adea44b938a 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -145,11 +145,11 @@ ALLOW_RANDOM_EVENTS #FORBID_STATION_TRAITS ## Multiplier for earliest start time of dangerous events. -## Set to 0 to make dangerous events avaliable from round start. +## Set to 0 to make dangerous events available from round start. 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. +## Set to 0 to make dangerous events available for all populations. EVENTS_MIN_PLAYERS_MUL 1 ## The lower bound, in deciseconds, for how soon another random event can be scheduled. @@ -195,7 +195,7 @@ CONFIG_GATEWAY_CHANCE 0 ## ACCESS ### ## If the number of players ready at round starts exceeds this threshold, JOBS_HAVE_MINIMAL_ACCESS will automatically be enabled. Otherwise, it will be disabled. -## This is useful for accomodating both low and high population rounds on the same server. +## This is useful for accommodating both low and high population rounds on the same server. ## Comment this out or set to 0 to disable this automatic toggle. MINIMAL_ACCESS_THRESHOLD 10 @@ -208,7 +208,7 @@ MINIMAL_ACCESS_THRESHOLD 10 ## Uncomment to give assistants maint access. #ASSISTANTS_HAVE_MAINT_ACCESS -## Uncoment to give security maint access. Note that if you dectivate JOBS_HAVE_MINIMAL_ACCESS security already gets maint from that. +## Uncoment to give security maint access. Note that if you deactivate JOBS_HAVE_MINIMAL_ACCESS security already gets maint from that. #SECURITY_HAS_MAINT_ACCESS ## Uncomment to give everyone maint access. @@ -242,7 +242,7 @@ NEAR_DEATH_EXPERIENCE ## Set to 0/commented out for "off", silicons will just start with Asimov. ## Set to 1 for "custom", silicons will start with the custom laws defined in silicon_laws.txt. (If silicon_laws.txt is empty, the AI will spawn with asimov and Custom boards will auto-delete.) ## Set to 2 for "random", silicons will start with a random lawset picked from random laws specified below. -## Set to 3 for "weighted random", using values in "silicon_weights.txt", a law will be selected, with weights specifed in that file. +## Set to 3 for "weighted random", using values in "silicon_weights.txt", a law will be selected, with weights specified in that file. ## Set to 4 for "specified", silicons will start with an existing lawset. (If no specified lawset is identified, the AI will spawn with asimov.) @@ -357,7 +357,7 @@ SILICON_MAX_LAW_AMOUNT 12 ## Roundstart Races ##------------------------------------------------------------------------------------------- -## Uncommenting races will allow them to be choosen at roundstart while join_with_muntant_race is on. You'll need at least one. +## Uncommenting races will allow them to be chosen at roundstart while join_with_muntant_race is on. You'll need at least one. ## See code/__DEFINES/DNA.dm for more options than the ones below. @@ -504,7 +504,7 @@ ARRIVALS_SHUTTLE_DOCK_WINDOW 55 ## Uncomment to prevent late join players from spawning if the arrivals shuttle is depressurized #ARRIVALS_SHUTTLE_REQUIRE_SAFE_LATEJOIN -## How many wirechewing rodents you want to spawn on exposed maintenane wires at the start of the round. You may wish to set this to 0 if you're testing powernets. +## How many wirechewing rodents you want to spawn on exposed maintenance wires at the start of the round. You may wish to set this to 0 if you're testing powernets. MICE_ROUNDSTART 10 @@ -605,29 +605,29 @@ RANDOM_LOOT_WEIGHT_MODIFIER 1 MUNDANE_POINT_GAIN_MULTIPLIER 1 MODERATE_POINT_GAIN_MULTIPLIER 1 MAJOR_POINT_GAIN_MULTIPLIER 1 -ROLESET_POINT_GAIN_MULTIPLIER 1 -OBJECTIVES_POINT_GAIN_MULTIPLIER 1 +CREWSET_POINT_GAIN_MULTIPLIER 1 +GHOSTSET_POINT_GAIN_MULTIPLIER 1 ## Multipliers for points to spend on roundstart events. MUNDANE_ROUNDSTART_POINT_MULTIPLIER 1 MODERATE_ROUNDSTART_POINT_MULTIPLIER 1 MAJOR_ROUNDSTART_POINT_MULTIPLIER 1 -ROLESET_ROUNDSTART_POINT_MULTIPLIER 1 -OBJECTIVES_ROUNDSTART_POINT_MULTIPLIER 1 +CREWSET_ROUNDSTART_POINT_MULTIPLIER 1 +GHOSTSET_ROUNDSTART_POINT_MULTIPLIER 1 ## Minimum population caps for event tracks to run their events. MUNDANE_MIN_POP 0 MODERATE_MIN_POP 0 -MAJOR_MIN_POP 0 -ROLESET_MIN_POP 0 -OBJECTIVES_MIN_POP 0 +MAJOR_MIN_POP 20 +CREWSET_MIN_POP 0 +GHOSTSET_MIN_POP 0 -## Point thresholds for tracks to run events. The lesser the more frequent events will be. -MUNDANE_POINT_THRESHOLD 25 -MODERATE_POINT_THRESHOLD 50 -MAJOR_POINT_THRESHOLD 90 -ROLESET_POINT_THRESHOLD 120 -OBJECTIVES_POINT_THRESHOLD 130 +## Point threshold multipliers for tracks to run events. The lesser the more frequent events will be. +MUNDANE_POINT_THRESHOLD 1 +MODERATE_POINT_THRESHOLD 1 +MAJOR_POINT_THRESHOLD 1 +CREWSET_POINT_THRESHOLD 1 +GHOSTSET_POINT_THRESHOLD 1 ## Allows the storyteller to scale event frequencies based on population ALLOW_STORYTELLER_POP_SCALING @@ -636,12 +636,12 @@ ALLOW_STORYTELLER_POP_SCALING MUNDANE_POP_SCALE_THRESHOLD 10 MODERATE_POP_SCALE_THRESHOLD 15 MAJOR_POP_SCALE_THRESHOLD 40 -ROLESET_POP_SCALE_THRESHOLD 45 -OBJECTIVES_POP_SCALE_THRESHOLD 40 +CREWSET_POP_SCALE_THRESHOLD 45 +GHOSTSET_POP_SCALE_THRESHOLD 40 ## The maximum penalties population scalling will apply to the tracks for having less pop than POP_SCALE_THRESHOLD. This is treated as percentages MUNDANE_POP_SCALE_PENALTY 30 MODERATE_POP_SCALE_PENALTY 30 MAJOR_POP_SCALE_PENALTY 30 -ROLESET_POP_SCALE_PENALTY 30 -OBJECTIVES_POP_SCALE_PENALTY 30 +CREWSET_POP_SCALE_PENALTY 30 +GHOSTSET_POP_SCALE_PENALTY 30 diff --git a/config/iceruinblacklist.txt b/config/iceruinblacklist.txt index 1a6663f34f010..f617b78e30544 100644 --- a/config/iceruinblacklist.txt +++ b/config/iceruinblacklist.txt @@ -5,30 +5,35 @@ ##RESPAWN #_maps/RandomRuins/AnywhereRuins/golem_ship.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm #modular_skyrat/modules/mapping/_maps/RandomRuins/IceRuins/icemoon_underground_syndicate_base1_skyrat.dmm #_maps/RandomRuins/IceRuins/bubberstation/icemoon_interdyne.dmm ##MEGAFAUNA #_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_mining_site.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm ##MISC -#_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm -#_maps/RandomRuins/IceRuins/icemoon_surface_lust.dmm +#_maps/RandomRuins/AnywhereRuins/fountain_hall.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm +#_maps/RandomRuins/IceRuins/icemoon_surface_bughabitat.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm +#_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm +#_maps/RandomRuins/IceRuins/icemoon_surface_lust.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_puzzle.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_wrath.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_bathhouse.dmm -#_maps/RandomRuins/AnywhereRuins/fountain_hall.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_hotsprings.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_bathhouse.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_hotsprings.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_puzzle.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_wrath.dmm diff --git a/config/jobs.txt b/config/jobs.txt deleted file mode 100644 index 5b65062cd2d3e..0000000000000 --- a/config/jobs.txt +++ /dev/null @@ -1,90 +0,0 @@ -#This allows easy configuration of the number of positions allowed for each job -#Format is: [Job name]=[total positions],[spawn positions] -#Job names must be identical to the title var of each job datum -#Positions can be set to -1 to allow unlimited slots - - -# Station Command - -Captain=1,1 -Head of Personnel=1,1 -Head of Security=1,1 -Chief Engineer=1,1 -Research Director=1,1 -Chief Medical Officer=1,1 -Quartermaster=1,1 - - -# Central Command - -Nanotrasen Consultant=1,1 -Blueshield=1,1 - - -# Cargo - -Cargo Technician=4,2 -Shaft Miner=4,4 -Customs Agent=2,2 -Blacksmith=1,1 - -# 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 - - -# Engineering - -Station Engineer=5,5 -Atmospheric Technician=3,2 -Engineering Guard=2,2 - - -# Medical - -Medical Doctor=5,3 -Paramedic=3,2 -Chemist=2,2 -Geneticist=2,2 -Virologist=1,1 -Orderly=2,2 - - -# Science - -Scientist=5,5 -Roboticist=3,2 -Vanguard Operative=0,0 -Science Guard=2,2 - - -# Security - -Warden=1,1 -Detective=2,2 -Security Officer=6,6 -Security Medic=1,1 -Corrections Officer=2,1 - - -# Silicons - -AI=1,1 -Cyborg=3,3 - - -# Misc. - -Assistant=-1,-1 -Prisoner=12,12 diff --git a/config/jukebox_music/LICENSE.txt b/config/jukebox_music/LICENSE.txt index 8a9d5dd3739bc..b7335a9ba634c 100644 --- a/config/jukebox_music/LICENSE.txt +++ b/config/jukebox_music/LICENSE.txt @@ -19,10 +19,10 @@ Do not remove this notice. ---EXAMPLES (NOT PART OF ANY LICENSE)--- -These are examples of properly attrubuted and licensed sounds. +These are examples of properly attributed and licensed sounds. They are not an actual part of any license under any circumstance. -title5.ogg was created by Mya Quinn on Feburary 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). +title5.ogg was created by Mya Quinn on February 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). Unless otherwise noted all sounds were created by Cuban Pete on July 26, 2555. They are licensed under the RUMBABEAT Public License.(http://example.com/license/url/). diff --git a/config/map_vote.txt b/config/map_vote.txt new file mode 100644 index 0000000000000..edc5629df95d9 --- /dev/null +++ b/config/map_vote.txt @@ -0,0 +1,12 @@ + +## A flat bonus to give to all maps after a map vote is concluded. +MAP_VOTE_FLAT_BONUS 5 + +## The minimum number of tallies a map can have for purposes of map rotation. +MAP_VOTE_MINIMUM_TALLIES 1 + +## The maximum number of tallies a map can have for purposes of keeping things sane. +MAP_VOTE_MAXIMUM_TALLIES 200 + +## The percentage of tallies that are carried over between rounds. +MAP_VOTE_TALLY_CARRYOVER_PERCENTAGE 100 diff --git a/config/policy.json b/config/policy.json index ade2a200f5c7c..a21428f65182c 100644 --- a/config/policy.json +++ b/config/policy.json @@ -1,5 +1,5 @@ { "How do I set policy?": "Policy is set in this file. It's simply setting the key to the text to show up.", - "Where is policy shown?": "Most, but not all policy text, is displayed when releveant, such as on gaining a role.", + "Where is policy shown?": "Most, but not all policy text, is displayed when relevant, such as on gaining a role.", "What can I all set policy of?": "Antagonist typepaths, mob typepaths, species typepaths, special roles, and some extra special policy keys are all valid. Consult the code." } diff --git a/config/resources.txt b/config/resources.txt index 6a053d8cbba57..318730caa55d1 100644 --- a/config/resources.txt +++ b/config/resources.txt @@ -1,6 +1,6 @@ # External resources # Set this to the location of a .zip with the server's .rsc inside of it. -# If you set this mutiple times, the server will rotate between the links. +# If you set this multiple times, the server will rotate between the links. # To use this, the compile option PRELOAD_RSC must be set to 0 to keep byond from preloading resources # Resource urls can not be encrypted (https://), as they are downloaded by byond, not IE, and byond can't into encryption diff --git a/config/title_music/LICENSE.txt b/config/title_music/LICENSE.txt index 3f1576d19dfbb..9f331a4e72b23 100644 --- a/config/title_music/LICENSE.txt +++ b/config/title_music/LICENSE.txt @@ -19,10 +19,10 @@ Do not remove this notice. ---EXAMPLES (NOT PART OF ANY LICENSE)--- -These are examples of properly attrubuted and licensed sounds. +These are examples of properly attributed and licensed sounds. They are not an actual part of any license under any circumstance. -title5.ogg was created by Mya Quinn on Feburary 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). +title5.ogg was created by Mya Quinn on February 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). Unless otherwise noted all sounds were created by Cuban Pete on July 26, 2555. They are licensed under the RUMBABEAT Public License.(http://example.com/license/url/). diff --git a/config/title_screens/LICENSE.txt b/config/title_screens/LICENSE.txt index f137cde825a73..7b1ee62f7d3da 100644 --- a/config/title_screens/LICENSE.txt +++ b/config/title_screens/LICENSE.txt @@ -19,10 +19,10 @@ Do not remove this notice. ---EXAMPLES (NOT PART OF ANY LICENSE)--- -These are examples of properly attrubuted and licensed images. +These are examples of properly attributed and licensed images. They are not an actual part of any license under any circumstance. -rare+foobar.png was created by Mya Quinn on Feburary 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). +rare+foobar.png was created by Mya Quinn on February 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). Unless otherwise noted all images were created by Cuban Pete on July 26, 2555. They are licensed under the RUMBABEAT Public License.(http://example.com/license/url/). diff --git a/config/word_filter.toml b/config/word_filter.toml index e2a5f1c05b93c..90397231aecc1 100644 --- a/config/word_filter.toml +++ b/config/word_filter.toml @@ -23,6 +23,6 @@ [soft_ic] "testsofterblocks" = "This term is commonly considered OOC, only use it with context." -# Anything in here will warn the player if said ICly *except* PDAs, the player must approve their message to send it +# Anything in here will warn the player if said ICly *except* PDAs. the player must approve their message to send it [soft_ic_outside_pda] "testsoftestblocks" = "Stop saying debug phrases ICly." diff --git a/dependencies.sh b/dependencies.sh index 3d9933d8f4733..8319e5edd33d2 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -11,9 +11,9 @@ export BYOND_MINOR=1637 export RUST_G_VERSION=3.3.0 #node version -export NODE_VERSION=14 -export NODE_VERSION_LTS=20.12.0 -export NODE_VERSION_COMPAT=14.16.1 +export NODE_VERSION_LTS=20.13.0 +# compatiblility mode MUST work with windows 7 +export NODE_VERSION_COMPAT=20.2.0 # SpacemanDMM git tag export SPACEMAN_DMM_VERSION=suite-1.9 @@ -21,14 +21,14 @@ export SPACEMAN_DMM_VERSION=suite-1.9 # Python version for mapmerge and other tools export PYTHON_VERSION=3.9.0 -#auxlua repo -export AUXLUA_REPO=tgstation/auxlua +#dreamluau repo +export DREAMLUAU_REPO="tgstation/dreamluau" -#auxlua git tag -export AUXLUA_VERSION=1.4.4 +#dreamluau git tag +export DREAMLUAU_VERSION=0.1.2 #hypnagogic repo export CUTTER_REPO=spacestation13/hypnagogic #hypnagogic git tag -export CUTTER_VERSION=v3.1.0 +export CUTTER_VERSION=v4.0.0 diff --git a/dreamluau.dll b/dreamluau.dll new file mode 100644 index 0000000000000..cc2d56d2d1e40 Binary files /dev/null and b/dreamluau.dll differ diff --git a/html/changelogs/AutoChangeLog-pr-1980.yml b/html/changelogs/AutoChangeLog-pr-1980.yml deleted file mode 100644 index e4e9a04ad4ae1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-1980.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "BurgerBB" -delete-after: True -changes: - - balance: "Reworks (mostly) and renames all the storytellers and improves the code." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2254.yml b/html/changelogs/AutoChangeLog-pr-2254.yml new file mode 100644 index 0000000000000..34e097d7fca49 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2254.yml @@ -0,0 +1,5 @@ +author: "CydiaButt13" +delete-after: True +changes: + - rscadd: "*yip" + - rscadd: "*yipyip" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2269.yml b/html/changelogs/AutoChangeLog-pr-2269.yml new file mode 100644 index 0000000000000..f35ce180b724c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2269.yml @@ -0,0 +1,4 @@ +author: "xPokee" +delete-after: True +changes: + - rscadd: "added a GAGSified miniskirt to the loadout menu" \ No newline at end of file diff --git a/html/changelogs/archive/2018-04.yml b/html/changelogs/archive/2018-04.yml index cc47dfc36bbb3..c75868fd21356 100644 --- a/html/changelogs/archive/2018-04.yml +++ b/html/changelogs/archive/2018-04.yml @@ -409,7 +409,7 @@ flags are removed. - code_imp: New stationloving component replaces all of this. - code_imp: 'Added new signals: COMSIG_MOVABLE_Z_CHANGED is now sent when a movable - changes Z level, COMSIG_PREQDELETED is sent before the object''s Destroy() + changes Z level, COMSIG_PARENT_PREQDELETED is sent before the object''s Destroy() is called and allows interrupting the deletion, COMSIG_ITEM_IMBUE_SOUL is sent when a wizard attempts to make a thing their phylactery' - bugfix: slime pressurization potions are no longer consumed when attempting to diff --git a/html/changelogs/archive/2018-08.yml b/html/changelogs/archive/2018-08.yml index adf61a4b58f34..3ee21a1a6f651 100644 --- a/html/changelogs/archive/2018-08.yml +++ b/html/changelogs/archive/2018-08.yml @@ -63,7 +63,7 @@ the vault contains a set of valuable Syndicate documents.' - tweak: Added a scrubber pipenet to the Lavaland mining base. Garen: - - bugfix: mobs now call COMSIG_ATOM_ATTACKBY + - bugfix: mobs now call COMSIG_PARENT_ATTACKBY JJRcop: - rscadd: Deadchat can use emoji now, be sure to freak out scrying orb users. Kmc2000: diff --git a/html/changelogs/archive/2021-05.yml b/html/changelogs/archive/2021-05.yml index 7a162ba199019..7aa13a74c972a 100644 --- a/html/changelogs/archive/2021-05.yml +++ b/html/changelogs/archive/2021-05.yml @@ -748,6 +748,47 @@ - rscadd: From June 23rd to June 29th, celebrates pride week w/ rainbow floor tiles. - rscdel: Removed the toggle intent selection style preference - bugfix: Fixes the jumpskirt in hand icon displaying an error + tralezab: + - refactor: tamable component + egg layer component, animal variety element +2021-05-25: + AnturK: + - config: Explorer drone adventures are now stored in the db instead of config + Fikou: + - code_imp: ai upload now doesnt lag you as much + InsaneRed: + - qol: Converts most of the equipment on mechs into ballons + JohnFulpWillard: + - spellcheck: The Research Director's plasmaman envirosuit is now labelled as belonging + to the Research Director rather than the Chief Engineer. + Melbert: + - bugfix: Fixes being unable to feed chickens for eggs + Mothblocks: + - rscadd: From June 23rd to June 29th, celebrates pride week w/ rainbow floor tiles. + SgtHunk: + - qol: Slaughter demons now slam their targets with right-click rather than with + ctrl+shift+click. + Watermelon914: + - bugfix: Fixed being able to noogie harm people as a pacifist. + - bugfix: Fixed borgs dropping their equipment when cryo'd. + ninjanomnom: + - bugfix: Fixes the pda alert using the wrong overlay and displaying an error state + - bugfix: Water vapor can be purchased instead of shipping an empty crate + - bugfix: The express console can purchase gas canisters again + - bugfix: Gas canisters come in a large crate again + norill: + - bugfix: fixed backpack firefighter tank nozzle refilling not working in extinguisher + mode + - qol: Made the action of holding firelocks open by left clicking with a crowbar + less confusing by adding balloon messages describing what is happening. Changed + the firelock examine text to explain that right-click opens it permanently and + left-click opens it temporarily +2021-05-26: + FlamingLily: + - bugfix: Muscled Veins is now correctly labelled as muscled veins, and not threaded + veins. + - bugfix: Gastrectomy now correctly has a surgery failure message + RandomGamer123: + - rscdel: Removed the toggle intent selection style preference Waltermeldron: - rscadd: Adds Integrated Circuits back to science. Circuit Components can be printed off and placed onto these circuits. These circuits can be placed into shells @@ -784,6 +825,21 @@ - bugfix: Jatum handles better non-assoc list - bugfix: Fixed UIs like the cargo chatroom console and the genetics console not opening. + dragomagol: + - qol: door remotes now use balloon alerts instead of chat messages + ninjanomnom: + - bugfix: Certain objects that were migrated to a new greyscale system could no + longer be colored via washing machine. This has been fixed. + - bugfix: You can select the config again in the greyscale debug menu with admin + controls enabled + - balance: Canister leaks are more consistent rather than jittery, but slower. + - bugfix: Fixes the jumpskirt in hand icon displaying an error + vincentiusvin: + - bugfix: Fixed multiple piping mistakes in Delta, Meta, and Icebox. +2021-05-27: + BraveMole: + - bugfix: Jatum handles better non-assoc list + Mickyan: - bugfix: you can knock cigarettes out of people's mouths again, hooray! - balance: objects that can be knocked off now have a chance to fall whenever the wearer is knocked down @@ -862,3 +918,90 @@ - bugfix: Fixed duplicate PunPun in Tramstation bar - bugfix: Fixed duplicated chemistry locker embedded in the Tramstation HPLC machine - bugfix: Organs without owner no longer runtime + PositiveEntropy, Twaticus, AdipemDragon: + - imageadd: Replaces the old stool sprites with new and improved ones made by Twaticus + and AdipemDragon! + - imageadd: Ports new and improved Tau Ceti bookshelf sprites! + Watermelon914: + - bugfix: Fixed UIs like the cargo chatroom console and the genetics console not + opening. + norill: + - bugfix: fixed check plumbing admin verb +2021-05-28: + Fikou: + - qol: the borg disabler cooler only is in tech places if secborgs arent disabled + InsaneRed: + - bugfix: the extra vent on deltastations incinerator has been removed + - bugfix: Deltastations kitchen's privacy shutters work again + - bugfix: Thermomachines across all maps have now been properly linked to waste + and will work properly now. Trit huffers rejoice + - bugfix: The SM pipe on metastation will no longer connect to waste and burn up + the entire mix if your newly-chosen engineer friend accidently uses a grey pipe. + - bugfix: Box whiteship now has a proper thermomachine setup for its cryo. + - bugfix: Metastations xenobiology freezer is now properly connected. + - bugfix: Icebox Supermatter setup's thermomachines are no longer connected to the + injector and should no longer empty all of waste. + - bugfix: Fixes up some randomly visible adaptors on metastation toxins and connects + its freezer to waste. + - bugfix: Kilostation's toxin freezers are now connected properly. + - bugfix: Deltastation's supply freezer is now connected properly. + - bugfix: Metastation's supply freezer is now connected properly. + - bugfix: Tramstation's toxin freezers are now linked up to waste correctly + - bugfix: Icebox N2 to pure pipe is now named correctly + - bugfix: Fixed the duplicate piping infront of the n2 pipe on icebox + Maurukas: + - bugfix: Some debris leftover from extending Kilostation have been cleared + Melbert: + - rscadd: GAGS Lizard Plushes. Now, lizard plushes get a randomly generated lizard + color when they're made. + Ryll/Shaps: + - bugfix: Embeddable items like ninja stars can once again embed in people + Skoglol: + - balance: Powersinks now generate heat when absorbing energy, and are a lot easier + to counter with the SM than before. + - bugfix: Organ damage messages are now only sent if you are conscious. + Watermelon914: + - bugfix: Blob camera no longer falls through zlevels. + - code_imp: Added an optimization to the input subsystem. + cacogen: + - bugfix: Human burgers can name themselves after their ingredient sources again + vincentiusvin: + - bugfix: Some duplicate pipes in kilo atmospherics have been fixed. + - qol: Various piping improvements in kilo atmospherics. +2021-05-29: + antropod: + - bugfix: Fixed reagent multiplication exploit with 1u foam + ninjanomnom: + - bugfix: Some screwdriver inhand icons have been fixed to not show an error + - bugfix: Some prison jumpsuit inhand icons have been fixed to not show an error +2021-05-30: + Mickyan: + - bugfix: Smoking no longer spills spaghetti from your pockets + - bugfix: Lit cigarettes no longer keep falling off + - spellcheck: Removed extra "the" from item knockdown messages + RandomGamer123: + - bugfix: Starlight condensation now heals you on glass tiles exposed to space, + multi-z stations, lavaland, and unroofed structures correctly. + RaveRadbury: + - bugfix: Mime crayons don't make you multicolored when you eat them. + Watermelon914: + - bugfix: Fixes AND/OR gates not properly functioning because of null inputs. + norill: + - bugfix: Fixed not being able to add telecomms frequency filters + - bugfix: Changed the color of command frequency in telecomms and headset GUI from + blue to yellow to match chat color +2021-05-31: + Gamer025: + - bugfix: Fixed some incorrect uses of UnregisterSignal + - bugfix: Organs without owner no longer runtime + Maurukas: + - qol: adds a substantial number of fire alarms to Tramstation areas that had few/none + - bugfix: Fixed duplicate PunPun in Tramstation bar + - bugfix: Fixed duplicated chemistry locker embedded in the Tramstation HPLC machine + - bugfix: The Cryopod bays on Icebox, Metastation and Deltastation have been wired + into the station's power grid + Melbert: + - rscadd: GAGS flowers (Rainbow bunch flowers now look prettier!) + - refactor: Rainbow bunch flowers now use GAGS instead of their old method of greyscaling + ninjanomnom: + - bugfix: Screwdrivers no longer cause an error icon while in the belt diff --git a/html/changelogs/archive/2021-06.yml b/html/changelogs/archive/2021-06.yml index 8f41d959021d6..0bbef2f594dfe 100644 --- a/html/changelogs/archive/2021-06.yml +++ b/html/changelogs/archive/2021-06.yml @@ -150,6 +150,94 @@ instant mozi_h: - bugfix: Fixed a small icon inconsistency with the notice board. + FlamingLily: + - qol: Surgery masks no longer block surgery. + Gamer025: + - bugfix: Offering an item multiple times no longer causes runtimes + - bugfix: Chairs no longer runtime when being deconstructed + Inept: + - rscadd: Some new holidays have been added. + JohnFulpWillard: + - qol: Microwaves now use Right Click instead of Alt click to turn on. + Krysonism: + - imageadd: The desk, green and banana lamps have been resprited. + Mothblocks: + - bugfix: Fixed dynamic latejoins. + Timberpoes: + - bugfix: Fix oversight where Dynamic can assign antag datums to the minds of players + who will be forcefully returned to the lobby. + ninjanomnom: + - imageadd: Better greyscale support has been added to datum materials allowing + objects to have more complex compositions of sprites. The golden cleric mace + is extra shiny now. + - bugfix: Mime shoes no longer runtime when generating their icon. This may fix + some graphical oddity or do nothing at all since they get colored pure white + anyway. + rasepretep: + - code_imp: removed the piece of code that causes carpotoxin to qdel temporal scars + (hopefully I identified it correctly) +2021-06-02: + FernandoJ8: + - bugfix: RD's liver now has the TRAIT_ROYAL_METABOLISM trait. + ModDownloading: + - qol: 'You can be your own character in Mafia again. Don''t worry plasmamen: you + don''t die from fire or lack of plasma in the mafia game, so you can be a funny + purple skeleton in relative peace.' + RandomGamer123: + - bugfix: Heretic's reality phase ability is no longer affected by the bag of holding + dragomagol: + - bugfix: railings drop rods on deconstruction + - bugfix: connected the kilo medbay lobby apc to the grid +2021-06-03: + Mordent: + - refactor: Split DnaConsole interface into separate files. + RandomGamer123: + - bugfix: Removes random camera and railing in space near xenobio on metastation + - bugfix: Switchblades' blades now actually pop out like intended + SpaceDragon00: + - bugfix: Large energy crossbow now sounds like an energy crossbow + carshalash: + - qol: Makes fish affordable to common workers. + dragomagol: + - qol: newly-resprited stools and barstools are now facing tables + zxaber: + - bugfix: AIs should no longer occasionally have their lawset randomly and silently + returned to Asimov. +2021-06-04: + GoldenAlpharex: + - bugfix: Custom outfits will now save their ID trim. + JJRcop: + - bugfix: Drone tools can no longer be inserted into an autolathe. + JohnFulpWillard: + - bugfix: Shaft Miners can now access Cargo on Tramstation + Mothblocks: + - qol: Controllers for circuits now use right-click instead of alt-right-click. + SmArtKar: + - bugfix: Attacking something as morph no longer floods your chat with "You're already + in your normal form!" + - bugfix: Fixed banana juice having x2 chance of appearing in mystery soup + - bugfix: Fixes AI screen blur not disappearing after getting creampied + Y0SH1M4S73R: + - bugfix: Local insurance providers have realized that they should advertise their + services BEFORE the occurrence of the very accidents they are supposed to insure + against. +2021-06-05: + Mothblocks: + - balance: Increased the minimum pop for heretics to 18 players. + RandomGamer123: + - bugfix: Reaction chambers no longer drop beakers when deconstructed + - bugfix: Fixes split personality sometimes switching to other person upon death + - bugfix: Gun scopes no longer work if you don't have the gun in your hands + SmArtKar: + - bugfix: Coniine no longer makes you suffocate even after it leaves your system + Y0SH1M4S73R: + - bugfix: dynamic will no longer spawn abductors if there aren't enough applicants + for a proper 2-person abductor team + mozi_h: + - bugfix: Fixed a small icon inconsistency with the notice board. + peptron1: + - rscadd: Ghosts can now find out how much power is in the network by examining + cables 2021-06-07: 'ArcaneMusic, Celotajs: ft PowerfulBacon': - rscadd: Modular, GAGS winter coats and sprites. @@ -158,106 +246,87 @@ - rscadd: Added the ability to dye your hair with gradients by using a hair dye spray. - rscadd: The new Colorist quirk, allowing you to spawn with a hair dye spray. - FlamingLily: - - bugfix: Internals activating in stripping menu - - bugfix: Stasis units exist again - - bugfix: "\U0001F633 machines exist again" - - bugfix: Holobadge boxes exist again - - bugfix: Gas Miners exist again (and atmos now uses sexy decals like Journey instead - of canisters to indicate their contents) - SkyratBot: + Gamer025: + - bugfix: The message for new duplicate keybinds should only appear once now + - bugfix: Resetting your keybinds to classic mode works correctly now + - bugfix: Hotkey mode is now actually used when new hotkeys with a default setting + are added + - bugfix: You will no longer get a duplicate keybinding conflict message for new + hotkeys with no default key, they will just be silently set to unbound + Ghilker: + - bugfix: fix temperature pump exploit that allows the users to go over 1e8 limiter. + This is done by a power usage equation that become exponential upon reaching + 3e7 and will eat through the room APC charge (so no makeshift power drain). + Krysonism: - imageadd: The circuit multitool has a new sprite. - thestubborn: - - rscadd: poly clothing to the keff and cowbell collar - - rscdel: unused sprites - - bugfix: detective can now use his badge - unit0016: - - bugfix: Metastation perma should FINALLY. FINALLY. No longer be spaced roundstart. -2021-06-08: - SkyratBot: - - bugfix: Fixed the unbearable lag on the R&D consoles. -2021-06-09: - KathrinBailey: - - rscadd: New prison for Deltastation - - rscadd: Security protolathe for Deltastation - - rscadd: 'qol: Improvements and minor bugfixes for Deltastation security' - Melbert: - - bugfix: Fixes self-use sleepers like syndie-sleepers so you can actually use them - by yourself when you're inside them. - ORCACommander,Azarak: - - bugfix: Run time in Gags caused by Peacekeeper Uniforms - - bugfix: GAGS shoes failing to render - - bugfix: GAGS jumpsuits - - code_imp: fixed silent syntax error - SkyratBot: - - rscadd: Robotics Two Person Mecha! - - bugfix: Swarmer traps are functional again + ModDownloading: - rscadd: audio_cooldown, a var for coders to use in new emotes to add a cooldown for sounds when the emote is used voluntarily. - rscadd: Clapping and laughing now have 5-second audio cooldowns. - - bugfix: The heroine bud can no longer be removed by click-dragging - - bugfix: Straight jackets and cargo gauntlets no longer pretend they're trying - to equip themselves when you hold them in your hand and mouse over an inventory - slot they can be equipped to. - - bugfix: The drive-by landing station trait can no longer send players to space. + NamelessFairy: + - bugfix: DeusVend's name is now consistent across both the vendor and restocking + unit + SmArtKar: + - bugfix: Fixed wrong icons in Orion Trail general market event + Watermelon914: + - rscadd: Added the Internal GPS, Direction, Health, Pull and Signal Combiner circuit + components. + - rscadd: Added the Money Bot shell which can dispense and receive money and also + added the ability to lock shells by scanning your ID over the circuit and then + over the shell once inside the shell. + - rscadd: You can now rename integrated circuits so that they appear on the attached + shell. + - code_imp: Restructured the circuit components folder to be more organised. + Y0SH1M4S73R: + - spellcheck: The text for the surrender emote is now grammatically consistent. + ninjanomnom: + - qol: Additional information was added to the greyscale configuration menu in the + form of tooltips. + - qol: You can now randomize the colors in the greyscale configuration menu. + - qol: The configuration that a layer is from is now displayed in the full version + of the greyscale configuration menu. + - bugfix: The full version of the greyscale configuration menu now properly displays + all layer steps again. + tralezab: + - admin: Sorted the traitor panel a bit. + - rscadd: anonymous names feature content + - spellcheck: any reference to ai triumvirate as "tripAI" has been obliterated. + use the right case next time, jagoff + - code_imp: Moved ai triumvirate off SSTicker + - refactor: ai triumvirate is now a singleton datum controller + - admin: anonymous names has two new themes and some optional enabled theme features + vincentiusvin: + - qol: Ghosts can open NT CIMS (SM monitor) by clicking the Supermatter Crystal. + - rscdel: Removed the EER from the examine text +2021-06-08: + Mothblocks: + - qol: The "your fingers are too big" message for shooting a gun (such as with insulated + gloves on) is now a balloon alert. + Watermelon914: + - bugfix: Fixed the unbearable lag on the R&D consoles. + bobbahbrown: + - bugfix: Players with zero living time will now be caught as expected by a default + config soft panic bunker. + interestingusernam3: - rscadd: Fake N-spect scanners, buyable via black market uplink (Tools section). - rscadd: Bananium HONK-spect scanners, craftable from fake N-spect scanners (Crafting menu, misc section). - rscadd: The N-spect scanner now draws power from a removable power cell when printing reports. The cell it starts with has enough power for 100 reports. + tralezab: + - rscadd: Robotics Two Person Mecha! +2021-06-09: + Fhaxaris: - bugfix: Telekinesis throwing is now logged even if you don't hit someone. - bobbahbrown: - - bugfix: Players with zero living time will now be caught as expected by a default - config soft panic bunker. - cacogen: - - code_imp: Mauna mug uses ctrl+click instead of attack_self() to toggle power - - code_imp: Resetting an object's name and description with a pen will return them - to what they were before being changed, instead of their initial values - - bugfix: Resetting a sculpture's description will no longer result in a description - telling you to yell at Firecage - linnpap: - - bugfix: Fixed the reproductive reagent emote - tf-4: - - bugfix: Various space hotel fixes - - bugfix: Doubled up lattices have been halved. - - bugfix: The security voidsuit helmet worn and object icons are now once again - present. - unit0016: - - imageadd: Stasis units now only light up when a body is inside. -2021-06-10: - FlamingLily: - - bugfix: Delta station's plasma tank is no longer labelled as safe to breathe O2. - - bugfix: The thief who's stolen Ice box's stasis units has not been caught. Insurance - has provided a replacement set. - SkyratBot: - - bugfix: Fixed race condition in creation of z-levels. - - spellcheck: The remaining damage message when tending burns no longer calls it - brute damage. - - bugfix: Input system won't request in-place movements constantly anymore. - tf-4: - - bugfix: The Vox ponytail hairstyle no longer gives you a massive fuck off square - over your face - - code_imp: Added SIGNAL_HANDLER to a bunch of procs that didn't use it - thestubborn: - - bugfix: vendors now get a bunch of loadout job locked stuff - unit0016: - - bugfix: Circuit Multitool is no longer invisible - - imagedel: "Duplicate SM sprite and worse codersprites are gone \U0001F980" -2021-06-11: - KasparoVy: - - rscdel: The borg shinker module will no longer work on certain compact chassis - models, providing a feedback message. This includes the peacekeeper-ball, vroomba, - eyeborg, mining drone and some others. - - tweak: SkyRat Altborg code's been refactored - indicating that a model is small, - is a dogborg or has unique wreck sprites is now done in a features list. - SkyratBot: - - bugfix: '*me should no longer force someone else''s message on your emote.' - - bugfix: fixed the 2person mech crushing it's own parts - - bugfix: The chemistry diamond is now NFPA compliant - - bugfix: Durathread strangling caused by golems can now be cut off with jaws of - life as well. - - rscadd: 'New emote: *tilt "tilts their head to the side."' - - admin: Added the ability to enforce two-factor authentication onto admins. + Melbert: + - bugfix: Fixes self-use sleepers like syndie-sleepers so you can actually use them + by yourself when you're inside them. + RandomGamer123: + - bugfix: The heroine bud can no longer be removed by click-dragging + Thunder12345: + - bugfix: The drive-by landing station trait can no longer send players to space. + - bugfix: Swarmer traps are functional again + Timberpoes: - admin: Admins will no longer accidentally toggle delaying the end of the shift off when multiple admins attempt to delay at the same time. - admin: When a round end delay goes past the ordinary server restart time, admins @@ -287,6 +356,62 @@ unit0016: - bugfix: Xenobiology on NSS Journey no longer generates roundstart atmos diffs. - rscadd: Interdyne has been remapped from the ground up. + - bugfix: Straight jackets and cargo gauntlets no longer pretend they're trying + to equip themselves when you hold them in your hand and mouse over an inventory + slot they can be equipped to. + cacogen: + - qol: Right-clicking a reagent container in your active hand will pick the previous + transfer amount instead of the next + - code_imp: Mauna mug uses ctrl+click instead of attack_self() to toggle power + - code_imp: Resetting an object's name and description with a pen will return them + to what they were before being changed, instead of their initial values + - bugfix: Resetting a sculpture's description will no longer result in a description + telling you to yell at Firecage + - qol: All custom names in Character Settings can now either be reset to the default + or randomised by leaving the text box blank + - qol: You can now pick a random religion in Character Settings by leaving the text + box blank. Setting a religion will also set the bible name and deity if applicable +2021-06-10: + Mothblocks: + - admin: Added the ability to enforce two-factor authentication onto admins. + Thunder12345: + - spellcheck: The remaining damage message when tending burns no longer calls it + brute damage. + fira: + - bugfix: Fixed race condition in creation of z-levels. + - bugfix: Input system won't request in-place movements constantly anymore. +2021-06-11: + Arkatos: + - qol: Midround alien larvas start the game already in a vent instead of just on + top of it. Fair chance for everyone! + GoldenAlpharex: + - bugfix: '*me should no longer force someone else''s message on your emote.' + Melbert: + - qol: You can now quick-swap beakers in and out of the bio-generator (Insert a + new beaker without needing to eject the old one). + RandomGamer123: + - bugfix: Replaces unusable TEG board on derelict with boards for a turbine setup + instead. + - bugfix: The tram control console now displays an icon for science correctly. + - qol: You can now examine people to see if they are being strangled with durathread. + - qol: Cutting durathread off of someone else now produces a public message for + everyone to know. + - bugfix: Durathread strangling caused by golems can now be cut off with jaws of + life as well. + RaveRadbury: + - rscadd: 'New emote: *tilt "tilts their head to the side."' + TJatPBnJ: + - qol: Storage items open on right-click, instead of alt-click + Wallem: + - bugfix: Matchbox sprite properly empties. + norill: + - bugfix: Fixed defibrillator paddles and wall mounts not detecting charge changes. + - qol: Examining defibrillators now tell you if there is a power cell inside and + how to remove it + tf-4: + - bugfix: The chemistry diamond is now NFPA compliant + vincentiusvin: + - bugfix: fixed the 2person mech crushing it's own parts 2021-06-12: Arkatos: - bugfix: Fixed a case where slip mood debuff was not triggering at all. You should @@ -313,6 +438,15 @@ GoldenAlpharex, but actually Mothblocks: - bugfix: Looking at the images in the Color Customization of the GAGS menu will no longer make you feel like you dropped your glasses. + JohnFulpWillard: + - admin: Opening and closing job slots is now logged. + Thunder12345: + - imageadd: Three new hair gradients, a pair of shorter fades and a spiky wave. + Watermelon914: + - bugfix: Fixed a runtime with the comparison components. + vincentiusvin: + - bugfix: stimformation should not be called if no gas is actually being formed. +2021-06-13: Inept, Coiax, AdipemDragon, YakumoChen: - 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, @@ -401,6 +535,25 @@ un-graftable, un-shearable, un-mutatable plant traits that show up on the plant analyzer now. qol: The plant analyzer now differentiates between traits you can mess with and traits you cannot.' + JohnFulpWillard: + - qol: Sloths can now be picked up. +2021-06-14: + Arkatos: + - bugfix: Cayenne will no longer keep flickering an error sign when carrying a disk. + - bugfix: Radial info boxes will now layer properly over the radial button, so it + is actually visible and clickable. + Bluetshirtguy, RaveRadbury: + - expansion: Mimes have more picture words for their PDAs + - imageadd: New emojis for OOC chat and Mime PDAs + GoldenAlpharex, but actually Mothblocks: + - bugfix: Looking at the images in the Color Customization of the GAGS menu will + no longer make you feel like you dropped your glasses. + Melbert: + - rscadd: There are now over a dozen new plant traits, but they're not really new. + A bunch of unique plant behaviors (like holymelon's anti-magic) are now un-graftable, + un-shearable, un-mutatable plant traits that show up on the plant analyzer now. + - qol: The plant analyzer now differentiates between traits you can mess with and + traits you cannot. - balance: Killer Tomatos no longer have liquid contents naturally. - balance: Liquid Contents and Hypodermic Prickles are no longer compatible with one another. They already didn't work together in most cases, this just makes @@ -445,38 +598,138 @@ - bugfix: countess, karn, and formal red now hide shoes 2021-06-20: Arkatos: + Mothblocks: + - rscadd: When a midround ghost event doesn't get any applicants, a sleeper agent/syndicate + infiltrator will roll in its place. + Mqiib's spritework: + - imageadd: Skeletons and Robots now have unique wing sprites + RandomGamer123: + - bugfix: The Enhanced Interrogation Chamber's mid-interrogation messages will now + actually be received. + - bugfix: The hypnoflash (and flashes in general) now work on sleeping people. + RaveRadbury: + - qol: You can select wrapping paper colors by right clicking them. + Ryll/Shaps: + - admin: The Modify Transform -> Translate option in the VV dropdown will now remind + you which way positive or negative numbers will move the sprite in question. + For those of you wondering, on the Y-axis, positive moves you up and negative + moves you down. + - bugfix: Dogs are now properly restricted to being able to fetch/pick up items + only, and can no longer fetch you lockers and full size cars + TemporalOroboros: + - rscadd: Neon carpets exists. Bug your local chemist or quartermaster for a supply. + - code_imp: Decals support user-defined planes and some forms of smoothing. + Timberpoes: + - admin: Adding and removing quirks using the VV dropdown is now more reliable in + adding or removing the effects of quirks. + - code_imp: Refactors quirks and (hopefully) improves their code, squashing some + runtimes associated with quirks on deleted mobs and increasing the performance + of some quirks. There should be no player-facing changes, however any problems + with quirks should be reported on the Github issue tracker since they may stem + from this PR. + Watermelon914: + - bugfix: Fixed wrap and charge abilities for tarantula and broodmother spiders + - bugfix: Fixed moneybots dispensing 0 credits and added a failure signal if it + tries to dispense 0 credits. + - refactor: Refactored tram code to be more robust and easier to read. + Y0SH1M4S73R: + - spellcheck: fixed a typo in disembowelment + bobbahbrown: + - admin: The interview system has been improved with in-chat clickable links for + interviews and ability to include links in interview questions. + fira: + - bugfix: Made statpanel relay used mouse button when clicking on turf contents. + vincentiusvin: + - qol: Most alt-click atmospheric interactions changed to use balloon alerts. + zxaber: + - sounddel: The space-jam ambient sound will no longer play inside the AI's core. +2021-06-15: + Watermelon914: + - refactor: Refactors how spans are done in code. +2021-06-16: + ArcaneDefence: + - expansion: Poutine can be made via the crafting menu in the misc foods category + again. + DuffCreeper: + - rscadd: Allows people to now examine fire alarms to detect their thermal sensor + state. Silicons can now also Ctrl+Click to enable and disable at the sensor + at a whim + - code_imp: Cleaned up single letter variables in firealarm.dm + JohnFulpWillard: + - bugfix: Flipping a gun will no longer unload all its bullets. + - balance: Bartenders now properly have a weapon's permit for their gun. + Mothblocks, ArcaneMusic for sprites: + - rscadd: Bot circuits can now use USB cables to connect to computers and machines + that support it. Currently, only the tram controls computer supports this, but + support should roll out for other systems. + - rscadd: Bot shells now have a button that you can register to. + TemporalOroboros: + - bugfix: Wigs work when on your head again. + Watermelon914: + - bugfix: Fixed the RAM component retaining its output type after the input port + is cleared. + tralezab: + - bugfix: carbon roses can no longer mutate into carbon roses +2021-06-17: + Arkatos: + - qol: Swarmers now have a generic living healthdoll and pull icon. + - qol: Swarmers will now show severity of their injuries as a red screen overlay + to the user. + - qol: Swarmer's abilities now have tooltips to clarify their use upon mouse hover. - bugfix: Smartfridges will now show an approximate number of their stored items correctly on their sprite. - bugfix: Smartfridges will now count maximum number of allowed items correctly. - bugfix: Smartfridges will now show their UI only when directly interacted with. - Cheshify: - - balance: Mothership Astrum has been entirely rebalanced again. - - 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 - for departments with common hazards! - - bugfix: To avoid a pending lawsuit, Nanotrasen 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: + EOBGames: + - rscadd: Metastation's medbay has received another revision. Stop by the next time + you get hurt, and marvel at the new design! + Maurukas: - bugfix: Metastation has received the correct health HUDs for its new medbay - bugfix: Camera coverage has been improved in Metastation's medbay + RandomGamer123: + - bugfix: Amanitin (destroying angel toxin) is now back to its original amount of + deadliness prior to human metabolisation changes. + Wayland-Smithy: + - bugfix: Fixed the tgui changelog dates sometimes being inaccurate to the source + files. + tralezab: + - expansion: dullahans are now considered undead +2021-06-18: + RandomGamer123: + - bugfix: Power fist no longer occasionally and randomly says it does not have enough + gas when it has enough + - bugfix: Connects Delta's cryopod room to the station's power grid +2021-06-19: + Maurukas: + - bugfix: Nitrile gloves have been restocked on Metastation. + - bugfix: Disconnected scrubber pipe on Metastation + - bugfix: Batteries are now included with defibrillators on Metastation + - bugfix: Broken power cable on metastation + - qol: KiloStation's fire safety budget has been reduced, resulting in the removal + of some redundant firelocks - bugfix: Restores drug vendor to Kilostation Medbay - bugfix: Restores Crew Health Monitor to to the Kilostation medbay - - bugfix: 'Additional scrubbers/vents to some areas on Kilo that had inadequate - coverage qol: Declutter pass of Kilo medbay, holodeck area' + - bugfix: Additional scrubbers/vents to some areas on Kilo that had inadequate coverage + - qol: Declutter pass of Kilo medbay, holodeck area - bugfix: Some cameras in Kilostation now have better names - bugfix: Misc. piping and wiring issues on Kilostation have been repaired - bugfix: Missing air alarm added to Kilostation Botany - bugfix: The water tank stuck in a door in Kilostation engineering has been released back into its natural maintenance habitat - - bugfix: Chat feedback is improved when setting down briefcase launchpads. - - bugfix: Urinals no longer alert you about the letter "i" being stuck to your hand - in certain edge cases. + Timberpoes: + - rscdel: Removed the fake error texture floor tiles. +2021-06-20: + Krysonism: - rscadd: Added a new machine to the robotics lab; the ectoscopic sniffer. - - bugfix: Fixed being unable to add extra circuit components when an integrated - circuit was removed. + OHJ4Y: + - qol: Surgical aprons can now hold more medical-related items in their storage + slot. + Ryll/Shaps: + - bugfix: OOC heart commendations should once again function and poll people as + it should during the shuttle's return trip. + SmArtKar: + - bugfix: Luminescents once again use slime extracts + SpaceDragon00: - bugfix: Combat defibs no longer enable their safeties when being EMPed - bugfix: Visible message sends its message to mobs that are also its location - bugfix: shock_touching (Renamed to shock_pulling) now actually uses the damage @@ -484,37 +737,23 @@ - code_imp: Removed useless mob/user input for cooldowncheck - code_imp: Added recharge_time variable to paddles for variable charge times - code_imp: Added can_hurt, do_success, and do_cancel to reduce code duplication - - bugfix: Luminescents once again use slime extracts - ZephyrTFA: - - balance: Medibots are no longer able to be upgraded - sasichkamega: - - rscadd: added a small heal to those on the same tile as felinid while purring. + Timberpoes: + - bugfix: Chat feedback is improved when setting down briefcase launchpads. + - bugfix: Urinals no longer alert you about the letter "i" being stuck to your hand + in certain edge cases. + Watermelon914: + - bugfix: Fixed being unable to add extra circuit components when an integrated + circuit was removed. 2021-06-21: - Cheshify: - - 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: More explosion sound effects! + ArcaneMusic: + - qol: Suspenders now uses a GAGS setup, allowing for custom recolors. 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 - is now also welcome to a selection of these uniforms. - Ryll/Shaps: - - bugfix: OOC heart commendations should once again function and poll people as - it should during the shuttle's return trip. - SkyratBot: - - bugfix: tgui input lists no longer break when duplicate keys are passed - - bugfix: H.A.U.L. gauntlets no longer output a message about losing their grip - power when you drop them to the floor. - - bugfix: Removing the H.A.U.L. gauntlets while pulling something will now stop - the enhanced pulling effect. - - bugfix: Fixed signal ports receiving signals when a signal is not actually sent - - bugfix: Some overlays missing from variant defibs are now properly applied. - - spellcheck: multiple projectiles are now pluralized correctly + - bugfix: Fixed nuke ops lobby meta exploit + RandomGamer123: + - bugfix: Makes roleblocks in mafia actually end properly + - bugfix: Tachyon-doppler arrays now connect with servers on different z-levels. + SpaceDragon00: - bugfix: People with digitigrade legs are now properly paralyzed by the Paraplegic perk - bugfix: Usable_limbs can no longer be set below 0, which let people walk when @@ -525,6 +764,30 @@ - bugfix: Cryo Storage now silences PDAs that it hoovers. 2021-06-22: ATHATH: + Timberpoes: + - bugfix: H.A.U.L. gauntlets no longer output a message about losing their grip + power when you drop them to the floor. + - bugfix: Removing the H.A.U.L. gauntlets while pulling something will now stop + the enhanced pulling effect. + - bugfix: Fix some runtimes with quirks and equipping silicons. + Watermelon914: + - bugfix: Fixed signal ports receiving signals when a signal is not actually sent + Y0SH1M4S73R: + - expansion: The DNA console can now edit the nonhuman features of its occupants, + as well as allowing injectors to apply those features. Look for the "Features" + tab in the DNA console. + dragomagol: + - spellcheck: multiple projectiles are now pluralized correctly + jupyterkat: + - qol: you can now press space or enter to select in tgui input lists + - bugfix: tgui input lists no longer break when duplicate keys are passed + ninjanomnom: + - bugfix: Some overlays missing from variant defibs are now properly applied. +2021-06-22: + ATHATH: + - qol: Contractor batons will now stun cyborgs on a left click and harmbaton them + on a right click, instead of stunning cyborgs if you're NOT in combat mode and + harmbatonning them if you are. - bugfix: Stunning a cyborg with a contractor baton now puts your contractor baton on cooldown, just like knocking a human down does. Don't worry, you can still easily chainstun/baton 'n' bash borgs with contractor batons. @@ -537,9 +800,7 @@ wield a classic baton have been accounted for. This shouldn't affect normal gameplay unless an admin tries some REALLY weird stuff. Like, clumsy contractor cyborg level weird. - SkyratBot: - - bugfix: Fix some runtimes with quirks and equipping silicons. - - bugfix: Eggs now give 5u yolk no matter what it is cracked in + Timberpoes: - balance: The traitor's Agent ID card has a new option available during forging called Wallet ID Spoofing. Selecting this option will automatically snap the Agent ID card to the front of any wallet, allowing the traitor to hide more @@ -553,82 +814,108 @@ - bugfix: Anthromorphs can now wear chaplain stuff. Gandalf2k15: - rscadd: Synthetics can now suffer moderate to severe wounds, watch out! + Watermelon914: + - refactor: Refactors dbcore.dm to possibly resolve the crashes that happen on Terry. + carshalash: + - bugfix: Eggs now give 5u yolk no matter what it is cracked in +2021-06-23: + Fikou: + - expansion: new mech action figures and job action figures + - bugfix: Intento leaderboard works good + - imageadd: new sprites for mech action figures + Greniza: + - imageadd: New turf decals for alternative tiletypes MMMiracles: - rscadd: Tramstation's Tram is now more capable of making things regret being in the way of it - bugfix: Tramstation's Tram is now less likely to unintentionally explode + RandomGamer123: + - bugfix: Cigarettes with the smoke_all property actually let you smoke in everything + the cigarette contains now. + - qol: Adds more intercoms and a new fire extinguisher to Metastation's new medbay. + - bugfix: Replaces broken valueless space cash item in old AI sat ruin with a 200 + credit one Semoro and azizonkg: - bugfix: Ported fixes of SStimer subsystem from RU SS220 Paradise - config: 'Added a new config var: flag/log_timers_on_bucket_reset' - SkyratBot: + TemporalOroboros: - bugfix: Specific chem dispenser recipes no longer create fonts of infinite power. + Watermelon914: - bugfix: Fixed explosions delimbing you if they're weaker - - bugfix: Cigarettes with the smoke_all property actually let you smoke in everything - the cigarette contains now. - - bugfix: Intento leaderboard works good - - imageadd: new sprites for mech action figures - - bugfix: Replaces broken valueless space cash item in old AI sat ruin with a 200 - credit one - - imageadd: New turf decals for alternative tiletypes - linnpap: - - soundadd: Replaced the *woof sound 2021-06-24: - DuffCreeper: - - balance: Removes 'Lick' and 'Boop' to be an upgrade at robotics for borgs - - code_imp: Removed icky single letter vars - Gandalf2k15: - - rscdel: The duplicate *awoo2 has been removed from the pool of available emotes. - Melbert: - - refactor: Cow tipping and medibot tipping is now a component. - SkyratBot: + Ed640: - bugfix: Paper bins after being stacked too high to fall over or getting burnt will no longer void your "important" paper forms when trying to add more paper afterwards. - SpaceVampire: - - balance: Late-Join cyborgs not being linked to the AI correctly. + Melbert: + - refactor: Cow tipping and medibot tipping is now a component. + Ryll/Shaps: + - qol: Admin ghosts can now use the :j speech prefix to relay messages from deadchat + to their current linked body, if one exists. Perfect for keeping in touch with + your deployed ERT via headset without needing to stay in your body back at Centcom! + Watermelon914: + - expansion: Adds the multiplexer circuit component. + - expansion: Changed the drone circuit to have a lower movement delay. + - qol: Circuit components can now be directly inserted into shells. + - qol: Added the description and special details to each circuit component that + can be accessed when it is inside an integrated circuit. These will have specific + details, such as power usage, distance effectiveness and more. YakumoChen: - bugfix: Dynamic will no longer create malf humans for players for never play silicon in the first place. - ZephyrTFA: - - bugfix: A lot of icon states were missing - - code_imp: Electric Welders are much cleaner under the hood - capsaicinz: - - rscadd: Added a new space ruin, "Shuttle 8532" - thestubborn: - - rscadd: a full engineer ert and one for plants - - bugfix: the brig skirt works now 2021-06-25: - DuffCreeper: - - bugfix: Fixed up 'Affection' module being abled to be added to a borg multiple - times. Also restricted it to dogborgs only - - bugfix: Fixed an exploit relating to the shrink module - Elli-Skala: - - bugfix: fixed space vine gases being freezing cold - OrionTheFox: - - bugfix: Hazard tapes now block running instead of walking. They're like holobarriers - lite. - SkyratBot: - - bugfix: 'Fixed heretic ghouls having reduced max health after being revived after - deghouled qol: heretic ghouls now have a little moodlet tooltip' - - refactor: Refactors USB code to be easier to use for less experienced coders. - - bugfix: Bodybags can once again be closed. - - 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 - modular computers to order things remotely. qol: All people may now download - the Nanotrasen Internal Requisition Network program on modular computers to - request to order things remotely.' + Cheshify: - balance: The Forcefield Projector takes a second to put a forcefield down. + RandomGamer123: + - bugfix: QMs can now use the Nanotrasen 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 request to order things remotely. + SpaceVampire: - bugfix: The spare Codex Cicatrix created by the ritual, no longer comes with free charges. - thestubborn: - - bugfix: battered sausage now shows up + Timberpoes: + - qol: Right clicking containers such as backpacks with certain items may now perform + that item's action instead of opening the backpack. The behaviour has been implemented + with the forensic scanner, which can now scan objects it was previously unable + to in melee range, such as backpacks, by right clicking. Any items you'd want + to use againt backpacks without inserting the item or opening the backpack should + be reported as issues so they can be implemented. + Watermelon914: + - expansion: Adds the MMI circuit component. + - qol: Allows inputting signals into signal ports. + - expansion: Adds the airlock shell. The circuit has full control over the airlock. + - expansion: Implements USB cables for the binary valve to be able to open/close + the valve. + - expansion: Adds a private channel for radios that only lets circuits with the + same owner's ID to interact with it. + - refactor: Refactors USB code to be easier to use for less experienced coders. + eeSPee: + - bugfix: Fixed heretic ghouls having reduced max health after being revived after + deghouled + - qol: heretic ghouls now have a little moodlet tooltip 2021-06-26: - OrionTheFox: - - bugfix: Delta/Meta's windows overlooking the ERT hangar no longer have grilles - covering all the furniture. Whoops. - SkyratBot: + Arkatos: + - qol: Improved radial info messages for some spider variants to better reflect + their strengths and weaknesses. + - bugfix: Spider egg clusters now stop processing when they mature to improve performance. + - refactor: Spider egg clusters were integrated into the mob spawner system. This + means you will now see grown spider eggs in the ghost spawners interface. + - admin: Alien-banned players are no longer allowed to spawn from the spider egg + clusters. + Sheits: + - bugfix: Made android and skeleton wings work instead of telling the user "you + feel nothing but a terrible aftertaste" when they drink strange elixir + - bugfix: Made android and skeleton wings not use a mutant colour overlay like lizard + wings + - imageadd: Fly wings :) + - code_imp: Added android species check + TemporalOroboros: + - rscadd: Cigarettes heat their contents while they are lit. + - balance: Candy cigarettes now caramelize their own sugar. Their temperature has + been reduced to ensure they don't charcoalize it too. + - code_imp: Cleaned up cigarette code a bit. + Timberpoes: - balance: Agent ID cards can now steal accesses wirelessly from other players by right click slapping them with the agent ID card. This operation is completely covert, minus the fact you have to hold your ID card in your hand to initiate @@ -706,6 +993,15 @@ - rscadd: Added funtionality so free golems get an alert from policy.json. - rscdel: Deleted a line of text for Free golem's flavor text. Since in my opinion the spawn-in text, with the addition of the policy.json text was a bit too much. + carshalash: + - bugfix: fixed inaccurate foodtypes/taste tags +2021-06-27: + Fikou: + - bugfix: fixes not being able to upload mutations from disk to dna console + LemonInTheDark: + - bugfix: Fixes passive vents on space tiles flooding space with whatever was being + vented + SpaceDragon00: - bugfix: 'Reverted the normal blob''s max HP and initial HP values, which were accidentally modified (Old: 30 and 30, New: 25 and 21)' - bugfix: Fixed an issue where certain strains with bonus core regeneration were @@ -716,10 +1012,29 @@ upon Initialize - refactor: 'hunger mechanics are now inherent to stomaches expansion: ethereal charge mechanic is now unique to their stomache and can be transferred freely' + Timberpoes: - rscadd: Baseball bats can now be used to break kneecaps with their right click attack. This requires the target to be one of either prone, immobilised or buckled to something. If you aim for the legs and right click, you'll wind up a swing for the kneecaps. Research indicates that this isn't good for the target's legs. + - bugfix: Fixes an issue where right clicking on an ID-secured locker would unintentionally + trigger twice, locking then unlocking the locker. Right clicking now correctly + attempts to lock and unlock a locker only once. +2021-06-28: + Coconutwarrior97: + - rscadd: Added funtionality so free golems get an alert from policy.json. + - rscdel: Deleted a line of text for Free golem's flavor text. Since in my opinion + the spawn-in text, with the addition of the policy.json text was a bit too much. + MrStonedOne: + - server: Added configs to disable laggy hard deletes once they lag the server too + much. + - admin: laggy hard deletes only output once per type path. + Time-Green: + - refactor: hunger mechanics are now inherent to stomaches + - expansion: ethereal charge mechanic is now unique to their stomache and can be + transferred freely + dragomagol: + - imagedel: removes the yellow siding tiles at Centcom ninjanomnom & Trina (Sprites): - rscadd: Stationary tanks can now be constructed using most materials. Start the frame with a stack of plasteel. @@ -729,73 +1044,41 @@ - balance: Stationary tanks share behavior with canisters and can over-pressurize and explode in the same fashion. 2021-06-29: - Cheshify: - - rscadd: A new Station Announcer can sometimes show up! - - bugfix: Astrum's returning gateway is fixed. - - balance: A new strain of Cordyceps has been found, requiring Neurine and Modafinil - to cure. - DuffCreeper: - - rscdel: Removed Stock Market - Gandalf2k15: - - rscadd: A subsystem has been added that allows the station to start dirty. - OrionTheFox: - - rscadd: Added 2 new space ruins! - - rscadd: Spaceship Walls are now NT-approved, the plating/glass of which can be - gotten by crafting Titanium Sheets/Titanium Glass in-hand. - - rscadd: Vague Metal Pole decor items for mapping purposes + Arokha: + - bugfix: async modal message/title swapped + - bugfix: async modal not firing callbacks RandomGamer123 and IndieanaJones: + - qol: Offering a cyborg on a cult rune now allows the cultist to transform the + cyborg into a construct of their choosing. - bugfix: Offering a cyborg on a cult offer rune no longer creates an empty soulstone and round removes the cyborg. - SkyratBot: - - bugfix: RD consoles now have hardware supporting ID changes by default. - - bugfix: Obsessed antags will now recieve a chat message stating the antag's policy - flavour text, if any such policy exists in config. - - server: Added configs to disable laggy hard deletes once they lag the server too - much. - - admin: laggy hard deletes only output once per type path. - - rscadd: Cigarettes heat their contents while they are lit. - - balance: Candy cigarettes now caramelize their own sugar. Their temperature has - been reduced to ensure they don't charcoalize it too. - - code_imp: Cleaned up cigarette code a bit. - - bugfix: async modal message/title swapped - - bugfix: async modal not firing callbacks - SpookyTheFox: - - bugfix: prevented ghosts from un-flipping tables - theOOZ: - - rscadd: Adds a donator item to the mask page for CKEY 'TheOOZ'. -2021-06-30: - Azarak: - - rscadd: Adds advanced botany equipment to Ghost Cafe botany and an Enhanced Interrogation - Chamber to the showroom. - - rscadd: Warning strips in Ghost Cafe botany are no longer annoying, and pool updated - to the new liquids system. Ryll/Shaps: - balance: Knives (such as the kitchen knife, hunting knife, combat knife, etc...) are generally more effective at causing slashing wounds now. The butcher's cleaver in particular is now equal to a circular saw in terms of wounding. - balance: Scalpels are an eensy bit less effective at wounding enemies wearing armor, though they are still very effective at causing bleeding. - SkyratBot: - - imagedel: removes the yellow siding tiles at Centcom - - bugfix: Fixed issue which made cooked steaks inedible. You should now be able - to eat griddled steaks again. + Sheits: - balance: Reduces the maximum weight paradox bags can hold - imageadd: Adds paradox bag icon and belt sprites - - bugfix: fixes singularity beacons + Timberpoes: + - bugfix: Fixed issue which made cooked steaks inedible. You should now be able + to eat griddled steaks again. + - bugfix: Obsessed antags will now recieve a chat message stating the antag's policy + flavour text, if any such policy exists in config. + cacogen: + - balance: Cannabis has more believable effects + zxaber: + - bugfix: RD consoles now have hardware supporting ID changes by default. - balance: Jaunting spells of all types (except for Nightmare) no longer allow for the user to end up inside a wall or most other dense objects. Instead, you will be moved to a valid spot on the path you took, or returned to your start location. - ZephyrTFA: - - bugfix: Ambitions no longer instantly give you your gear when you request admin - approval - - admin: Ambitions now require admin approval; however they will be automatically - approved if you dont even open them. - capsaicinz: - - rscadd: Adds a new space ruin, ARBORLINK Vault Tango. - thestubborn: - - bugfix: makes the headphones show up - - bugfix: makes the poly clown mask work - - bugfix: made the westerner outfit obj one state - unit0016: - - rscadd: DS-2. - - rscdel: DS-1. +2021-06-30: + Fikou: + - bugfix: fixes singularity beacons + Watermelon914: + - expansion: Adds several list circuit components to manipulate lists. + - expansion: Adds the table datatype that can have queries performed on it with + components. + - expansion: Adds USB connections for the arrest console. + - bugfix: Fixed race conditions happening with circuits. diff --git a/html/changelogs/archive/2021-07.yml b/html/changelogs/archive/2021-07.yml index a6507e9b2e833..0edd094e33cd8 100644 --- a/html/changelogs/archive/2021-07.yml +++ b/html/changelogs/archive/2021-07.yml @@ -3,47 +3,48 @@ - bugfix: Fixed a case where a relic war hammer was not able to do kneejerk action. - bugfix: Fixed a case where a radial menu for the null rod reskin variant selection was showing one duplicate option. - SkyratBot: - - imageadd: new riot armor sprites - - admin: Adds logging for impacted cyborgs during law changes - - admin: Adds additional cyborg logging + - qol: Updated radial menu for a null rod reskin variant selection. It will now + include a small button for showing additional information about each given null + rod variant. + KubeRoot: - rscadd: Transit tube dispenser stations are now buildable via RPD - bugfix: Transit tube dispenser station sprite errors have been fixed. The sprites themselves have not been changed, but the names and orientation has been corrected. - - bugfix: Fixed cyborg locker right click to lock - - bugfix: Fixed race conditions happening with circuits. + LemonInTheDark: + - server: Hello people who parse performance log files (yes all two of you). Empty + entries will no longer cause errors, they will instead be properly represented + by a 0 + Malgover: + - imageadd: new riot armor sprites + Time-Green: - balance: Debriding surgery efficiency has been multiplied by 8 + Watermelon914: + - expansion: Adds the sound emitter circuit component. + Wayland-Smithy: + - bugfix: Fixed cyborg locker right click to lock - bugfix: Fixed an infinite loop bug with portal teleports. The cake is a stack overflow. - bugfix: Fixed portals layer so they appear over most other objects. - - bugfix: 'Fixed hand teleporter portals moving in zero gravity. qol: Portals on - dense objects no longer require clicking to enter and can be walked into. qol: - Portals you are standing on may be entered by clicking even with a tool in hand.' + - bugfix: Fixed hand teleporter portals moving in zero gravity. + - qol: Portals on dense objects no longer require clicking to enter and can be walked + into. + - qol: Portals you are standing on may be entered by clicking even with a tool in + hand. - code_imp: Removed an unused teleport arg that may cause issues with new portal code. - - bugfix: fixes buying shuttle insurance while the shuttle is docked - ZephyrTFA: - - bugfix: Use the correct timer flags for it to actually hash correctly - - bugfix: Actually call submit when it auto approves so they get their gear. + bloons3: + - admin: Adds logging for impacted cyborgs during law changes + - admin: Adds additional cyborg logging bobbahbrown: - admin: Added other tickets opened by a user to the adminhelp dialogue - server: Added the $reset directive to reset a configuration entry's values to its default - cacogen: - - balance: Cannabis has more believable effects - jjpark-kb: - - rscadd: Added reagent forging (check PR) - - soundadd: added hammer hit and water hiss - - imageadd: added icons for all new items/structures - - rscadd: added two wirebrushes (basic and advanced) - - soundadd: added a wirebrush sound - - imageadd: added two wirebrush icons (basic and advanced) - unit0016: - - bugfix: DO is now a head of cargo, instead of the CL. And while being a head he's - also command and all that stuff. + tralezab: + - bugfix: fixes buying shuttle insurance while the shuttle is docked + - expansion: added barticles to bonfires 2021-07-02: - Gandalf2k15: - - rscadd: Sentient firelocks. + Cheshify: + - bugfix: The flashlight pens are now actually pen-sized Melbert: - bugfix: Glowshrooms created from spread now should behave like things that actually exist again. @@ -56,67 +57,79 @@ breaking the windows into sci halls - bugfix: Tramstation Kitchen Freezer now uses the proper area so the kitchen and freezer air alarms dont control the same vents + RandomGamer123: + - bugfix: Nuclear operatives' uplink implants now properly only show items they + are allowed to buy, preventing them bypassing uplink restrictions. Ryll/Shaps: - - bugfix: You can no longer sacrifice pAI shells as a cultist - bugfix: OOC heart commendations once again properly save and persist between rounds! - SkyratBot: - - bugfix: The flashlight pens are now actually pen-sized - - bugfix: Some greyscale icons like the sombrero have had their errors fixed. + - bugfix: You can no longer sacrifice pAI shells as a cultist + Seris02: + - bugfix: changeling legs now copy digitigrade/normal legs + Sparkezel: + - balance: Bats no longer stunlock people. Increased bat damage by 2. + Timberpoes: - bugfix: The detective's scanner should now always properly output the correct data for scans and should no longer print out blank entries erroneously. - - bugfix: Nuclear operatives' uplink implants now properly only show items they - are allowed to buy, preventing them bypassing uplink restrictions. + Wayland-Smithy: - bugfix: Fixed rogue vending machines targeting incorporeal. - - bugfix: changeling legs now copy digitigrade/normal legs - Swiftfeather: - - bugfix: Robohand bundle now costs what it is worth bobbahbrown: - bugfix: You may no longer circumvent config VAS protections by proxying proc calls. - softcerv: - - rscadd: Added plushies based of a familiar shark and deer. - thestubborn: - - rscadd: all maps now have a locker for the second detective + ninjanomnom: + - bugfix: Some greyscale icons like the sombrero have had their errors fixed. +2021-07-03: + Watermelon914: + - rscadd: Adds a midround ruleset that allows living players to become the blob + if they are randomly selected. + aaaa1023: + - bugfix: Sink frames are now deconstructable with a wrench. + dragomagol: + - spellcheck: updated outdated references to intents in martial arts instructions + interestingusernam3: + - bugfix: Killing and reviving polar bears no longer makes them easier to move. + tralezab: + - rscadd: catwalk flooring! 2021-07-04: Arkatos: - bugfix: Large cardboard boxes will now show a proper icon when they are open. - Cheshify: - - bugfix: Anthromorphs can wear armor + Ghommie: + - bugfix: The "Is This Thing On?" explosion calibration experiment will now accept + explosions with negative devastation or heavy strength because, once again, + any explosion will do! MMMiracles: - bugfix: Fixed a few errant pipe issues in Tramstation Atmospherics - SkyratBot: - - bugfix: Fixed fully_heal proc curing blindness from quirks and blindfolds. - - bugfix: Fixed cooldowns for speech and soundemitter circuit components. - - code_imp: Brought the speech component more in line with other components. - - code_imp: Made the any datatype for circuit components much easier to read in - code. - - bugfix: Inhand sprites for hydrogen fire axes now face the right way - - bugfix: Fixed incorporeal movers procing containment field effects. - - spellcheck: updated outdated references to intents in martial arts instructions + RandomGamer123: - spellcheck: Ion carbine gun parts kits are no longer called "generic gun parts kit". - spellcheck: The "advanced" in advanced energy gun parts kit is no longer misspelled. + - qol: Examining stationary tanks now tells you their pressure limits. + - bugfix: Analyzing stationary tanks no longer gives you the same thing four times. + Sheits: + - bugfix: Inhand sprites for hydrogen fire axes now face the right way + Urumasi: + - bugfix: The turbine now behaves correctly if the intake is blocked. + Watermelon914: - bugfix: Fixed carps not properly being tameable. - bugfix: Fixed the tameable component not properly being removed from a mob. - - bugfix: The turbine now behaves correctly if the intake is blocked. - - bugfix: Fixed Create Command Report UI lacking an option derived from command_name(). + - qol: The RAM circuit component now allows you to select the type instead of trying + to interpret it, allowing it to be used as a constant value component. + - code_imp: Made the any datatype for circuit components much easier to read in + code. + - expansion: Adds crew monitor usb connections - bugfix: Fixed the sound emitter's frequency port - - bugfix: The "Is This Thing On?" explosion calibration experiment will now accept - explosions with negative devastation or heavy strength because, once again, - any explosion will do! - - bugfix: Fixed Cross Server messages containing HTML garbage. - - bugfix: Analyzing stationary tanks no longer gives you the same thing four times. + - bugfix: Fixed cooldowns for speech and soundemitter circuit components. + - code_imp: Brought the speech component more in line with other components. - bugfix: Limited the maximum string length of a circuit component port to 5K characters to fix exploits that can create strings that duplicate in size each iteration. - bugfix: Fixed being able to insert an infinite amount of components into a shell because of an oversight. - bugfix: Fixed being able to interact the circuit of a locked shell. - - rscadd: Adds a midround ruleset that allows living players to become the blob - if they are randomly selected. - - rscadd: catwalk flooring! - - bugfix: Killing and reviving polar bears no longer makes them easier to move. - Superlagg: - - rscadd: PDA customization is now set and saved per character. - - rscadd: PDA ring messages can now be set in character preferences. + Wayland-Smithy: + - bugfix: Fixed incorporeal movers procing containment field effects. + - bugfix: Fixed fully_heal proc curing blindness from quirks and blindfolds. + - bugfix: Fixed Create Command Report UI lacking an option derived from command_name(). + - bugfix: Fixed Cross Server messages containing HTML garbage. + YakumoChen: + - expansion: Adds a contraband flavor of Gallery's Peanuts to Getmore vendor bobbahbrown: - rscadd: Added a brand new upgrade to janicarts, the vacuum upgrade, which you can procure from RnD. This upgrade vacuums items from under the janicart directly @@ -126,23 +139,17 @@ to insert a key with a trashbag attached. - rscadd: You can now right-click while riding a janicart to remove the bag without unbuckling yourself, neato! - jjpark-kb: - - bugfix: fix light replacers breaking lights after replacing - tf-4, theOOZ: - - rscadd: Hairbrushes - now you can brush people's hair for a small mood boost. - unit0016: - - rscadd: NSS Journey now has a drone bay. - - bugfix: The catwalks are no longer non-existent on DS-2 and Interdyne. + thestubborn: + - expansion: Bananas can be holstered + tralezab: + - expansion: PDAs now include round time. 2021-07-05: - Nari Harimoto: - - bugfix: the autolathe shockwire is properly defined again, autolathes may now - potentially shock you when hacking - SkyratBot: - - bugfix: Mafia psychologist couldn't reveal role + Fikou: + - qol: The Nightmare's light eater can now break rocks. - imagedel: removes the weird light from the upgraded mining hardsuit helmet sprite - - bugfix: Borgs can now click on adjacent portals (with no module slot active) to - use them like humans. - - balance: nuke op and detective holsters can now be placed in armor best suit storage + - qol: commission plaques will no longer hide items you dropped below them + - balance: hierophant club dash now doesnt work on blocked turfs + Greniza: - rscadd: Environment protection bags, which protect their occupants from weather, and give protection from temperature and pressure. The rare variants even have the same protection effects as a space suit. @@ -157,18 +164,41 @@ - bugfix: Using wirecutters on an unlabeled bodybag no longer sends the "You cut the tag off of the bodybag" message. - bugfix: Allows bodybags to be picked up again. - - balance: mmis can no longer possess savannah ivanovs + KIBORG04: + - bugfix: Mafia psychologist couldn't reveal role + Nari Harimoto: + - bugfix: the autolathe shockwire is properly defined again, autolathes may now + potentially shock you when hacking + Paxilmaniac: + - balance: nuke op and detective holsters can now be placed in armor best suit storage - bugfix: the single missing pipe in library maintenance isn't missing anymore - theOOZ: - - rscadd: Adds a uni-horn - thestubborn: - - bugfix: kills akimbo reps in the womb + RandomGamer123: + - bugfix: Stationary pressure tanks now properly have their base pressure at 20000kPa. + - bugfix: Stationary pressure tanks now do not name themselves as "plasteel plasteel + pressure tank". + TheSmallBlue: + - expansion: Added the "Split" circuitry component. + Wayland-Smithy: + - bugfix: Borgs can now click on adjacent portals (with no module slot active) to + use them like humans. + coiax, Timberpoes: + - expansion: Adds the new Wallets! station trait. Makes everyone start with wallets + with their ID card inside, along with their starting budget. Might also include + a little surprise. + - expansion: Wallets that spawn inside dorm wardrobes also have little surprises + in them. + - expansion: Wallets can now hold pills. + read-0nly: + - rscadd: Added temperature and pressure sensors to circuits + spessbro: + - bugfix: carnivory trait shows up on the plant analyzer + tralezab: + - balance: mmis can no longer possess savannah ivanovs 2021-07-06: - 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! + Fikou: + - bugfix: switchblade can now be used to butcher and slice necks + - bugfix: fixes voice of god not giving you large text + - bugfix: wisps no longer fall in chasms Melbert: - bugfix: Changelings birthed from headslugs that weren't already changelings (for example, from the icebox mutation pool) are no longer full changeling antagonists, @@ -176,147 +206,81 @@ the past). MeyHaZah: - imageadd: Concussive Gauntlets Resprite - SkyratBot: - - balance: hierophant club dash now doesnt work on blocked turfs - - rscadd: Added temperature and pressure sensors to circuits - - bugfix: carnivory trait shows up on the plant analyzer - - bugfix: switchblade can now be used to butcher and slice necks - - bugfix: wisps no longer fall in chasms + Wayland-Smithy: - bugfix: Fixed the cursed spring water double teleport polymorph machine. - - bugfix: Stationary pressure tanks now properly have their base pressure at 20000kPa. - - bugfix: Stationary pressure tanks now do not name themselves as "plasteel plasteel - pressure tank". bobbahbrown: - bugfix: Buckling to a vehicle will no longer wait until you move to set your position on the vehicle properly. 2021-07-07: - Gandalf2k15: - - rscadd: Closets are now animated. - - rscadd: You can now be banned from EORG, do not EORG prep. + ArcaneMusic: + - expansion: A new ruin has surfaced on icebox. Signal pings indicated that may + have been a post office, once. + - bugfix: Hologrids once again cannot be picked up, as is intended. + EuSouAFazer: + - bugfix: Inaccessible medkit in Kilostation dorms is now reachable + InsaneRed: + - qol: Cleaned up waste and distro pipes near sms on most maps so they dont automatically + link up to sm cooling pipeline Nari Harimoto: - - bugfix: tram pharmacy now has medic access for when skeleton access is lifted + - bugfix: meta medbay sec posts air vents are now actually connected, trimmed a + line of cable that led nowhere from pharmacy + - bugfix: meta pharmacy now has medic access again, but no access anywhere for chem + factory except for chemist + - bugfix: an intercom in meta-med delivery shared the same wall as an APC, moved + the intercom to the top left of the room + - qol: Meta-station Xenobio slime computer camera can now move up and down between + the left most cells, as well as drop slimes in the work area between the consoles - bugfix: Deltastation bar's atmos alarm now correctly placed, and nudged a pipe nearby to no longer have a redundant loop - SkyratBot: - - bugfix: Hologrids once again cannot be picked up, as is intended. - - bugfix: fixes voice of god not giving you large text + - bugfix: tram pharmacy now has medic access for when skeleton access is lifted + Paxilmaniac: + - rscadd: New ERT type, marines, for whatever you might want them for. + - rscadd: Tacticool armor from tgmc to compliment. + Wayland-Smithy: - bugfix: Fixed unplaced blob overmind spawning in places it can not move. - Varoxus: - - rscadd: Flask of holy water to chaplain's room, closet for their things in their - office. - - rscadd: Altar to the chapel, lighter and a poppy to the same room. - - rscadd: Body bags and burial garments to the chapel back room. - - rscadd: Table with a linen bin to the dorms hallway. - - rscadd: Buttons to the dorm rooms to bolt the doors. Praise be. - - rscadd: Changed out two of the changing rooms for restrooms, each has a door bolt - button. - - rscadd: Water cooler to the fitness room so you can stay hydrated while you get - SWOLE. - - rscadd: Benches, chairs and 'lounging chairs' (beds) to the pool area to liven - up the space a bit. Also added a light to a darkened area of the pool. - - rscadd: Art area to the library, expanded the librarian's desk and added a curator - vendor behind it. - - rscadd: Autosurgeon to the medical cabinet in the medbay. - - rscadd: General medical supplies to the medbay such as body bags, medipens, latex - gloves and sterile masks. - - rscadd: Plumbing constructor to the chem room. - - rscadd: Medical and Chem drobes to the medical area. - - rscadd: 'A few items to the maint bar: Bar sign, wet rag, bartender drobe, syndicate - lantern.' - - rscadd: A waste disposal room complete with a recycler and a mass driver. Dirt, - grime, and trash included. - - rscadd: Fully functional and stocked Xenobio/cytology room to the science area. - - rscadd: Science skillchips to the nanite room. - - rscadd: Genetics console and scanner to the science area. - - rscadd: Replaced the circuitry machines and tools with an Exofab and related equipment - such as a surgery table and duffel bag, autosugeron, cells, and a computer frame - for an eventual OR table. - - rscadd: Placed the circuitry machines into the maint science area and added a - bit of oil and grime along with it. - - rscadd: An oxygen tank to the mining bay and some survival knives to the mining - bay lockers. - - rscadd: A turret control panel to the hangar bay near the entrance to science. - - rscadd: Hangar bay blast doors that are closed by default, buttons to either side - of the blast doors to open them if needed. - - rscadd: Janidrobe to the maint janitor's closet. - - rscadd: Another set of BR-magboots to the maint EVA room. - - rscadd: A pair of space heaters to the old... stripper area? - - rscadd: 'Added some more space to the engineering room and added a lot of tools - and equipment to it: Portable air pumps, portable scrubbers, engineering lockers, - power monitoring console, oxygen tanks, RPDs, cell charger and batteries, spare - materials, light replacer/RLD and bulbs, engi skillchips, toolbelts.' - - rscadd: Replaced maint garden area with an old sauna, complete with blood, dust, - and grime, broken lights for extra flair. - - rscadd: Interdyne comms keys to the Admiral and corporate liaison lockers. - - rscadd: Replaced the syndicate tome in the safe with a CQC manual. - - rscadd: Another door to the quantum pad room that leads out into the science hall, - both doors made unusable by AI. - - rscadd: Some decorative rocks to the hallway between the pool and the dorms area. - - rscadd: 'Signage all around the station: Medical signs near medical, hydro sign - to botany, EVA signs near the EVA exits, jani sign near the jani closet, docking - area signs near the hangar bay.' - - rscadd: Changed the turret armor values to better match those on the syndicate - forgotten ship, less armored in some areas, more armored in others, made the - fire rate the same. - - rscadd: Eggs to the kitchen fridges. - - rscadd: A few more maint loot and trash spawners. - - rscadd: Air alarms to Engi, sci, and disposals areas. - capsaicinz: - - rscadd: lattices under grilles. grilles on lattices. lattices where it makes sense, - and those under grilles, too! nss journey. - theOOZ: - - rscadd: Moth sparkle quirk. - thestubborn: - - rscadd: A Xeno hybrid language! Someone somewhere is gonna hate this! - - rscadd: But they may also love it! + spessbro: + - qol: made portaseeder use ctrl-click instead of a verb + unit0016 / Melbert: + - expansion: Many more antagonists now shout special phrases when suiciding with + C4/X4, including Heretics, Centcom Interns, Obsessed, Clown Ops, and Santa Clause. 2021-07-08: - SkyratBot: + AnCopper: + - rscadd: Added a name to clown.txt + Fikou: + - bugfix: properly updates the light color of the mining hardsuit helmet + Greniza: + - bugfix: runtime errors from weather + - bugfix: Environmental Protection Bags protect from ash storms + Iamgoofball: - balance: Removes stuns from Voice of God. - - rscadd: New ERT type, marines, for whatever you might want them for. - - rscadd: Tacticool armor from tgmc to compliment. -2021-07-09: - Gandalf2k15: - - rscadd: Prisoner transports - GoldenAlpharex: - - bugfix: Submitted ambitions will no longer sound like ducks. - - code_imp: Minor code improvements to ambitions. + InsaneRed: + - rscadd: Chaplains who worship the machine gods can now trade in 2000 favor to + receive a random cybernetic implant Nari Harimoto: - bugfix: the examine text on the Seed Extractor now accurately displays the amount of seeds you may potentially get - SkyratBot: - - code_imp: Rust is now a component - - 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 + Spookuni: - balance: Nanotrasen 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 - - rscadd: Chaplains who worship the machine gods can now trade in 2000 favor to - receive a random cybernetic implant - - bugfix: runtime errors from weather - - bugfix: Environmental Protection Bags protect from ash storms - - bugfix: properly updates the light color of the mining hardsuit helmet + Wayland-Smithy: - code_imp: Introduces the Lag Switch subsystem for when a smoother experience is worth trading a few bells and whistles for. Performance enhancement measures can be togged by admins with the Show Lag Switches admin verb or enabled automatically at a pop amount set via config. - config: 'Added a new config var: number/auto_lag_switch_pop' - - balance: Bats no longer stunlock people. Increased bat damage by 2. - YakumoChen: - - imageadd: Human skin hats, touched up by Krysonism ZephyrTFA: - - bugfix: Mentors once again load into the game correctly - - bugfix: Cultures no longer runtime - lyricalpaws: - - rscadd: Demonic core - softcerv: - - bugfix: Removes stray pixels in the object icon for the flower pin. - - balance: Makes the flower pin a small item. -2021-07-10: + - code_imp: Rust is now a component + - refactor: refactor almost all of the rust heretic atom procs + - rscadd: Wirebrush for advanced rust removal +2021-07-09: Arkatos: + - qol: Observers can now interact with the engraved messages from any distance. + Rate them! - bugfix: Fixed a case where you could make more engraved messages than your soapstone had uses by queing them fast enough. + Ghilker: + - bugfix: fix issue with the thermomachine rotation when pulled/pushed Nari Harimoto: - bugfix: Removing the Thermal Vision mutation will now remove the active vision as well @@ -379,6 +343,95 @@ SkyratBot: - bugfix: restraints now use equip_to_slot() instead of snowflake code when applied, thus fixing issues such as cuffs not falling off when hit by a shrink ray. + Time-Green: + - refactor: "A majority of species features have been turned into organs. Soon you\ + \ will be able to combine a moth and a lizard into one \xFCber being" + - bugfix: Dropped limbs will now display horns, frills etc instead of just naked + and ugly + - bugfix: Swapping limbs will now transfer those limbs features, so putting a lizard + head onto a human will actually mean they get a snout and horns and everything + instead of just being an awkward colored human head + Watermelon914: + - bugfix: Fixed the component printer's layout being broken. + Wayland-Smithy: + - qol: Orbiters now transfer to changeling headslugs at birth. + YakumoChen: + - expansion: You can now wear the suffering of others on your head with just a sheet + of human skin! + - imageadd: Human skin hats, touched up by Krysonism +2021-07-10: + Nari Harimoto: + - bugfix: AI intellicards can no longer be teleported out of intellicard slots on + consoles using telekinesis or silicon access range + Paxilmaniac: + - bugfix: two floor decals that were on a wall in delta xenobio are no longer + ProtivogaSpriter: + - imageadd: Replaced old Mjolnir sprites with new Mjolnir sprites. + Time-Green: + - bugfix: fixes a plumbing harddel + Watermelon914: + - bugfix: Fixed CQC sometimes not registering attacks and grabs properly. + Wayland-Smithy: + - bugfix: Fixed and improved wabbajack polymorph logging. + - bugfix: Silicons can now toggle emitter locks with secondary attack. + - bugfix: Fixed Tram ghost magnet and other cases of observer forceMove. + - code_imp: Renamed some observer code vars for better readability. Portals check + types less. + - bugfix: Fixed all clients being forced to Fit Viewport regardless of their Auto + Fit Viewport preference being set to manual. + Zytolg: + - qol: There's some eye candy in the Abandoned Medbay that now suggests that it + was at some point a medbay. + - balance: Downgrades the Chem Dispenser and Heater to their Ghetto Counterparts + read-0nly: + - qol: adds random number to carp spawned from space dragon rifts +2021-07-11: + '@Azarak': + - bugfix: pipes sprite fix + - refactor: pipe sprites now uses bitmasks + KubeRoot: + - bugfix: Flash implant now displays its message instead of runtiming when used + on cooldown + Mothblocks: + - bugfix: Fixed moth wings not showing up when you have a suit on. + Nari Harimoto: + - qol: Stunbatons will now harm-baton on left-click if you are in combat mode and + the baton is off + Paxilmaniac: + - bugfix: energy guns now have the correct icon, and no longer look like nanotrasen + brand super soakers + - bugfix: the set of duplicate icons for energy guns that caused the guns to look + different in map editors is no longer + Timberpoes: + - balance: The Bluespace RPED can no longer teleport chems in reagent containers, + instead emptying any reagents from containers inserted into it. + Wayland-Smithy: + - bugfix: 'Fixed some station name html encoding for plaintext handlers like: Station + Charter announcements, the World Name (SS13 window title), and in Cross Server + Messages both custom and news about the crews ultimate fate.' + carshalash: + - expansion: Splits eggs into two reagents. Introduces Pavlova, THE great Oceanic + dessert. Whipped cream is also added. +2021-07-12: + Ghommie: + - balance: Railings integrity has been lowered from 300 (default for structures) + to 75 (grilles integrity times 1.5) and their armor changed to match that of + grilles. + - bugfix: Hostile critters such as lobstrosities and giant tarantulas won't throw + themselves at you after dying while charging their attack. + - bugfix: Fixes the mech mounted teleporter. + - bugfix: Fixes intrinsically paralytic mobs being cured from their paralysis just + because they got a brand new (prosthetic) limb. + Kylerace: + - bugfix: you can no longer get infinite chems from holodeck bees + Mokiros: + - spellcheck: Circuit board for All-In-One Grinder is now named appropriately + Paxilmaniac: + - bugfix: marine ert engineers spawn with welding goggles instead of nvgs so they + can actually weld + - bugfix: the metastation genetics monkey pen no longer has a ' in front of its + name + SpaceDragon00: - bugfix: Secure safes no longer show up as weapons (I'm labelling this as a fix because I don't know any scenarios where you'd even be able to use a secure safe as an item, so its force value seemed unnecessary) @@ -444,6 +497,15 @@ - spellcheck: Circuit board for All-In-One Grinder is now named appropriately - bugfix: The Tram whiteship now has a chance to spawn! - bugfix: latejoin arrivals are less likely to spawn on top of each other now. + - code_imp: Improved the clarity of some comments, along with adding some where + they were previously missing + - qol: A gun's weapon notes now gives you the notes of its magazine, which gives + you the notes of its ammo, making it so you don't need to take out ammo to see + its damage. + Time-Green: + - bugfix: glasses arent horribly embedded in lizard snouts anymore + Watermelon914: + - bugfix: Fixed admins getting spammy logs from arrest console circuits. coiax: - balance: Ashwalkers now have lungs adapted for the atmosphere of Indecipheres, and now breathe. However, if the Indecipheres atmosphere has miasma, they are @@ -466,6 +528,78 @@ - bugfix: Packages sent through disposals to Virology on Icebox won't end up at Xenobio anymore. - admin: Adds a safety check to the "Release Obj" admin proc + dragomagol: + - bugfix: The Tram whiteship now has a chance to spawn! + itseasytosee: + - bugfix: Syndicate hardsuit helmet sprites will now properly update when combat + mode is activated. + tf-4: + - bugfix: When someone ties a neckerchief near you, it no longer tells you you did + it. +2021-07-13: + Ghommie: + - bugfix: latejoin arrivals are less likely to spawn on top of each other now. + - bugfix: Cannon balls should no longer destroy "indestructible" walls. + - bugfix: Fixes being able to simultaneously perform an attack and a tackle as a + xeno or monkey with right click and combat mode on. + - bugfix: Venus human traps and swarmers' names are now numbered. + - bugfix: Deletes a duplicate chat feedback on [mob/carbon/proc/swap_hand()] + - bugfix: Fixed ai monkeys appearing as catatonic on examine() + - bugfix: Monkeys and dogs no longer yoink items they can't reach. + - bugfix: Fixed morph speed being slower while undisguised and some old code related + to it. + - bugfix: fixed the blackout station trait affecting unrelated areas like CentCom + quarters. + - qol: Stops (blob and otherwise) mobs from falling through blob tiles on open space. + - bugfix: fixes the equipment menu lacking from the honker mech html UI because + of bad copypasta. + - bugfix: restraints now use equip_to_slot() instead of snowflake code when applied, + thus fixing issues such as cuffs not falling off when hit by a shrink ray. + - bugfix: Fixes inhand holder jank separating pAIs holoforms from their shells in + some occasions. + InsaneRed: + - bugfix: fixed metastation's xenobiology's disposal piping and adds it its own + cooling loop for freezers + Krysonism: + - expansion: You can now carve blumpkins. + - imageadd: The pumpkin, blumpkin and their carved varieties have new sprites. + Nari Harimoto: + - bugfix: anti-magic now prevents you slipping from the magic flying incorporeal + bananas fired by the honks staff + Putnam3145: + - bugfix: Watchers no longer search 9 tiles away for stuff then throw the result + away if it's more than 1 tile away + RandomGamer123: + - bugfix: Fixes lone stationary tanks having 5000L instead of 2500L volume. + - bugfix: Roundstart stationary air tanks now have the proper 21:79 oxygen:nitrogen + gas mix that is used throughout the station. + Time-Green: + - bugfix: fix some moth and lizard preferences missing + - bugfix: apparently mothwings were supposed to go above spacesuits, oops + Wayland-Smithy: + - qol: Chat Highlighting now works with more symbols and can be case sensitive and/or + match whole words only. + - bugfix: Fixed Chat Highlighting only working for the first comma separated entry. + - bugfix: Your own messages sent over a radio and dchat now properly avoid_highlighting. + - bugfix: Fixed admin observer special radio keys double sanitizing input. +2021-07-14: + Ghommie: + - bugfix: Fixed the rat king's abilities being usable while dead. + - bugfix: Fixed the rat king's Domain ability being usable on cooldown. + - admin: Adds a safety check to the "Release Obj" admin proc + - bugfix: fixed the charge moodlet lingering after a ethereal stomach removal. + Guestify: + - qol: replaced a couple of windows with walls in kilo and delta medbay, added a + couple of defib holders that can be easily accessed + RandomGamer123: + - qol: Icebox atmospherics now has a small project room with some resources. + - bugfix: Packages sent through disposals to Virology on Icebox won't end up at + Xenobio anymore. + Watermelon914: + - balance: Removes the refresher crystal from lavaland loot. + Wayland-Smithy: + - qol: Holopad incoming calls can now be rejected. + - qol: AI secondary attack now opens Holopad UIs. - bugfix: Fixed connected Holopad callers not seeing their own runechat text. - bugfix: Fixed AI hologram transmit runechat text. - bugfix: Fixed the AI radio help message giving false info about the generic department @@ -518,8 +652,23 @@ lyricalpaws: - bugfix: Brushing someone's hair no longer tells them they brushed their name's hair -2021-07-16: - ATHATH: +2021-07-15: + Wayland-Smithy: + - qol: Revenants can orbit adjacent people and things with Right Click, unless they + are stunned, revealed, blocked by salt etc.. + - code_imp: Improved Jaunt Move checks a little bit. + Y0SH1M4S73R: + - spellcheck: The notification that ghosts receive when someone raises a spectral + blade no longer contains an incorrect usage of the word "the" + ZephyrTFA: + - bugfix: Resolves my sanity as truncate now returns a valid value when it does + nothing + carshalash: + - bugfix: Eggs now work when cracked into glasses + tralezab: + - balance: space dragons are rarer +2021-07-16: + ATHATH: - spellcheck: The grammar of the box and organ box suicides has been slightly improved. - rscadd: Attempting to performing an organ box suicide while you're immune to cold now makes you perform a box suicide with it instead. @@ -532,46 +681,33 @@ Mordent: - bugfix: Hover effect on tgui Tabs made less visually laggy. SkyratBot: + Mordent: + - bugfix: Hover effect on tgui Tabs made less visually laggy. + Watermelon914: - rscadd: Added a more complex AI to carps that allow you to tell them to attack people or to follow you. These carps can be tamed with raw meat, which'll then give you control over them if you succeed in taming them. A carp will only be tamed to 1 person. - capsaicinz: - - rscadd: syndicate simplemobs to arborlink vault space ruin. makarov and magazines. - - rscdel: arborlink vault space ruin turrets. - lyricalpaws: - - bugfix: Stops vanguards rolling antags - - server: dynamic.json edited, mirror required 2021-07-17: - GoldenAlpharex: - - bugfix: Turnstiles are no longer scared of flashlights - SkyratBot: - - bugfix: You can now put people in coffins again after fireman carrying them. - - bugfix: slippery things, among others will no longer stop working forever after - throwing them into hyperspace - - bugfix: grav anomalies will no longer permanently make you unclickable - - 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. - 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 - Yawet330: - - bugfix: Math fixed - coiax: - - bugfix: Ethereal players cannot erroneously revive during mafia games. -2021-07-20: Arkatos: - bugfix: Fixed a case where a PDA's action button icon did not properly update upon light toggle. - Cheshify: - - rscadd: Borgs have access to Lidocaine, a numbing agent for surgeries! - Gandalf2k15: - - rscadd: You can now empty showers using a plunger! - - bugfix: Showers no longer defy the laws of physics and once again require plumbing. + Fikou: + - bugfix: grav anomalies will no longer permanently make you unclickable + - rscdel: deletes a door from deltastation mining shuttle + JohnFulpWillard: + - bugfix: You can now put people in coffins again after fireman carrying them. + Kylerace: + - bugfix: slippery things, among others will no longer stop working forever after + throwing them into hyperspace + Maurukas: + - bugfix: A rogue decal has been purged from Deltastation + - bugfix: The toxins airlocks on Delta, Tram, Meta and Kilo can now be opened from + inside the airlock Nari Harimoto: + - qol: AI now opens the holopad with left click, and projects a hologram with right + click. AI's right clicking the holopad will immediately project, no more double + clicking - rscadd: AI's right clicking any holopad while projected via the "Project Hologram?" button when presence is requested, will cancel the projection and put their camera back to where they started (moving far away from the pad will not do @@ -580,68 +716,103 @@ that has two options, jump to the location, works as it does currently, and "Project Hologram" which will immediately project a hologram there, right clicking the pad will move you back to where you were - - rscadd: 'Ctrl+leftclicking on the holopad will end the holopad call directly without + - rscadd: Ctrl+leftclicking on the holopad will end the holopad call directly without jumping you back to your last location (it does nothing if you are not already - a hologram) qol: AI''s can now examine a holopad to see the AI specific controls - for the pads (need to shift+right click and examine from the menu, cant shift-click - examine, issue with how the AI itself functions.) qol: when you jump to someone - from their name in chat, or a location from chat such as when presence is requested, - you can hit "~" or "0" to jump back qol: when you jump back to your previous - location with the "Jump Back" key or to a saved location with "1-9" it stops - all following, so you can jump back or jump to a location and you wont jump - back to the person you tracked' - PositiveEntropy, Meyhazah: - - imageadd: Adds new fire extinguisher sprites based on Tau Ceti's! - SkyratBot: - - imageadd: Replaces the old aquarium sprites - - bugfix: The implant pad will no longer incorrectly describe TRAC implants as being - usable as teleporter beacons. - - balance: Wizard gets bonus points for choosing the randomized options in their - spellbook. They will get 15 points worth of spells if they choose "Full random" - 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 - to theoretically hear nearby sounds again if they existed, which they don't. - - refactor: Directional lights might seem more smooth now + a hologram) + - qol: AI's can now examine a holopad to see the AI specific controls for the pads + (need to shift+right click and examine from the menu, cant shift-click examine, + issue with how the AI itself functions.) + - qol: when you jump to someone from their name in chat, or a location from chat + such as when presence is requested, you can hit "~" or "0" to jump back + - qol: when you jump back to your previous location with the "Jump Back" key or + to a saved location with "1-9" it stops all following, so you can jump back + or jump to a location and you wont jump back to the person you tracked + Sheits: - 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 - 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 - office. - - bugfix: fixed sentient diseases reinfecting when dead - - balance: space dragons are rarer + Wallem, based off of work done by Keelin: + - bugfix: Lets people wash the ant debuff off of themselves, as intended. + - 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. + 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 + Wayland-Smithy: + - bugfix: Fixed HTML encoding of automatic evac news alerts emergency_reason. + - qol: Admin Supplypod Presets can now also be loaded by double clicking their label. + - qol: Holopad call Holograms now move in sync with their receiver pad. - bugfix: Fixed a Holodisk replay Hologram bug, and Hologram Rays not updating when the pad is moved. + aaaa1023: + - spellcheck: adds a missing space in the description of the ERT Medical Officer's + plushie box. + coiax: + - bugfix: Ethereal players cannot erroneously revive during mafia games. + interestingusernam3: - bugfix: A Charlie station fluff paper about the Supermatter is no longer misnamed "singularity generator". THERE WAS NEVER SUCH A THING AS A SINGULARITY GENERATOR. OCEANIA HAD ALWAYS BEEN AT WAR WITH EASTASIA. - - bugfix: Fixed carps losing track of who they're following if they take a path - that obstructs their vision +2021-07-18: + Helianthus00: + - qol: Far explosions now cause far less shake and near explosions have been reduced + slightly to scale with this change. + IndieanaJones: - balance: Space Dragon has received some nerfs to make fighting it and its carps fairer to the crew. - bugfix: Fixed a bug where carp rifts without an owner could spawn infinite carp. + InsaneRed: + - bugfix: fixed up some issues with the ski shoes vehicle description + Kylerace: + - bugfix: NanoTrasen has pushed a fix for nonexistent ghost ears, allowing them + to theoretically hear nearby sounds again if they existed, which they don't. + Maurukas: + - bugfix: One standard moth plushie has been issued to the tramstation psychologist's + office. + PositiveEntropy, Meyhazah: + - imageadd: Adds new fire extinguisher sprites based on Tau Ceti's! + Sheits: + - imageadd: Replaces the old aquarium sprites + TiviPlus: + - refactor: Directional lights might seem more smooth now + Watermelon914: + - qol: Allows charging circuit shells by using inducers. + - qol: Allows setting the owner ID of a circuit through a shell. + - bugfix: Fixed carps losing track of who they're following if they take a path + that obstructs their vision + - expansion: Adds the module circuit component. + - bugfix: Fixed carrying being broken. - bugfix: Fixed light explosions having 0 chance to delimb someone if they have no bomb resist. + interestingusernam3: + - bugfix: The implant pad will no longer incorrectly describe TRAC implants as being + usable as teleporter beacons. +2021-07-19: + Arkatos: + - qol: You can now load equipment outright by double clicking the corresponding + equipment button in the Select Equipment UI. + Fikou: + - expansion: During moth week, teleporter accidents make you Moths + InsaneRed: - balance: Elder Atmosian armor now takes less metallic hydrogen to craft and is better armored. - - bugfix: A rogue decal has been purged from Deltastation - - bugfix: The toxins airlocks on Delta, Tram, Meta and Kilo can now be opened from - inside the airlock - Wallem, based off of work done by Keelin: - - bugfix: Lets people wash the ant debuff off of themselves, as intended. - unit0016: - - rscadd: 'Posters! Several posters referencing more ''historic'' events of the - frontier. There may also be a holodisk somewhere in the depths of maintenance... - expansion: Two new space ruins are on the prowl. One may look familiar...' -2021-07-21: - BurgerBB: - - bugfix: Fixes closets/lockers/crates/ect being subject to ant decompisition. - FlamingLily: - - code_imp: All indicators are now within a single indicators module - - rscadd: Surrender button when in CI + - qol: Most advanced tools now use balloon alert + Kylerace: + - 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 + has fixed its mistake. + Melbert: + - qol: Energy Guns use balloon alerts when swapping mode + Mothblocks: + - expansion: Added a box of silver IDs to the HoP office on TramStation. + Seris02: + - bugfix: fixed sentient diseases reinfecting when dead + TheSmallBlue: + - expansion: Added USB cable support to bluespace launchpad consoles to use with + integrated circuits. +2021-07-20: + Ghilker: + - expansion: added downsides to shoving too much fuel/moderator inside the machine, + the cooling volume can be adjusted in the GUI to make it stronger/weaker based + on the user needs Nari Harimoto: - bugfix: Fixes a bug where emotes such as a carp gnash will mess up a name if the name contains a pronoun within it @@ -655,313 +826,357 @@ Ryll/Shaps: - bugfix: You should no longer lose deathnettle durability when clicking on floors or walls - SkyratBot: - - bugfix: Deltastation's HoP line now has a flasher. - - bugfix: Deltastation's Atmos waste now sends external connectors to waste, rather - than the other way around. + TheSmallBlue: + - expansion: Added the To Number circuit component. + Time-Green: - bugfix: cutting open heads wont drop horns, frills etc on the ground (you could literally stick it into a human to give them frills but nooooooo you wanted to report the bug) - - bugfix: Hulks and larvas can no longer just punch the SM with no consequences + TiviPlus: - bugfix: Fixed weather being opaque + Watermelon914: + - bugfix: Fixed the duffelbag curse and curse of hunger code in general. + - balance: Wizard gets bonus points for choosing the randomized options in their + spellbook. They will get 15 points worth of spells if they choose "Full random" + and they will get 12 points worth of spells if they choose "Semi random". +2021-07-21: + BurgerBB: + - bugfix: Fixes closets/lockers/crates/ect being subject to ant decompisition. + InsaneRed: + - qol: Adds electrolizers to atmos storage across maps for quality of life purposes + and removes the useless turbine to ai sat pipeline in icebox. + JohnFulpWillard: + - bugfix: Deltastation's HoP line now has a flasher. + - bugfix: Deltastation's Atmos waste now sends external connectors to waste, rather + than the other way around. + Kubisopplay: + - bugfix: A CABAL of syndicate hackers broke Nanotrasen protections, allowing malfunctions + in AI to finally happen again + Malgover: + - rscadd: Adds ANTI-TIDER-2500 to the SecTech vendor + Seris02: + - bugfix: classic baton can stamcrit again + TheSmallBlue: + - bugfix: Hulks and larvas can no longer just punch the SM with no consequences Wallem: - bugfix: ants have a higher tolerance to extreme ph levels when breeding. New ant desc. + Watermelon914: + - expansion: Adds the scanner shell that lets you scan objects. + aaaa1023: + - bugfix: Icebox interrogation room is connected to the main power grid again. + - bugfix: Icebox security atmos goes through the atmos maintenance room again rather + than just bypassing it. + coiax: + - rscadd: Appendicitis is now no longer a disease. It has the same effects, although + shows up slightly differently on health scanners. It also is no longer caused + by the event system, and can happen to any appendix inside a person. + dragomagol: + - qol: changed the links for the bartender and cook guides to the appropriate new + wiki pages 2021-07-22: - OrionTheFox: - - 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 - 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. + Ghommie: + - bugfix: fixed some oddities with the wheelchair wheels overlay. + Guestify: + - qol: Added nanodrug vend to tramstation + Watermelon914: + - bugfix: Fixed Index Table outputting a table instead of a list. + timothymtorres: + - qol: Gas meters, freezers, and air alarms all now use GAGS coloring to display + colors based on temperature. (red is hot, green is room temp, and purple is + cold) + vincentiusvin: + - bugfix: fixed cryocells and hfr runtiming on quick consecutive wrench actions. 2021-07-23: - OrionTheFox: - - rscadd: Added the HoP's Parade Uniform and Jacket, both male and female versions! - ZephyrTFA: - - balance: Immovable rods are nicer to people who are resting. - tf-4: - - spellcheck: Cowboy clothing now speaks proper-like - thestubborn: - - bugfix: fixed area error with the delta det office - unit0016: - - bugfix: Xenobio on NSS Journey now no longer has a horribly accursed scrubber - line (And the 'storage room' has been repurposed to not just be a "Throw bodies - here" room) -2021-07-24: - BurgerBB: - - rscdel: Removes Vatbeast/Slime nests, snake nests, and toxic bee nests from maint. - - balance: Reduces the health of nests from 150 to 100. - BurgerLUA: - - balance: Nerfs ant decomposition times. - FlamingLily: - - bugfix: Alt titles for skyrat jobs now work as intended on the manifest - RatFromTheJungle: - - rscadd: Added laserguns & the CFA wildcat to cargo. - - bugfix: put THC back into weed, removed tg's "Cannabis" chem from them - Seris02: - - bugfix: fixed extra job icons not showing on the sechud - - imageadd: added vanguard, NT rep, civil dispute officer, corrections officer and - security medic HUD icons - lyricalpaws: - - tweak: 'Removes robohand from uplink (but not code) qol: So long, space cowboy' - softcerv: - - rscadd: Adds the Draconic necklace, an item craftable by ashwalkers through tribal - materials that allows the user to speak Draconic so that they can communicate - with Ash Walkers. - - imageadd: added Obj and Mob textures for the Draconic necklace. -2021-07-25: - FlamingLily: - - bugfix: Suit sensor tracking for job changes. - - bugfix: QM head status. again. -2021-07-26: - tf-4: - - bugfix: hairbrush mood events now have a linebreak -2021-07-28: - Domitius: - - bugfix: One spraycan can no longer colour every light on the station. - FlamingLily: - - bugfix: sartge disabler - Gandalf2k15: - - balance: Guns now start in the armory instead of tokens. - GoldenAlpharex: - - bugfix: Magic mirrors are no longer scared of colorful ears and tails and will - finally change their colors when they're meant to. - Intergalatic language police, Neko division.: - - bugfix: Instead of saying gato, those fucking cats now say Gatto, as intended. - Probably + ATHATH: + - bugfix: Classic batons (and their subtypes) no longer spread their stamina damage + across multiple body parts. + Fikou: + - bugfix: You can no longer be the living dead by having adminordrazine when you + die + Ghilker: + - 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) + Ghommie: + - bugfix: toggling combat mode will now send a sound to the player even if the character + is deafened. + Krysonism: + - bugfix: Vatbeasts can use their powerful tentacle slap ability again. Melbert: - - bugfix: Roses in mask slot now have their correct worn sprite again. - Nari Harimoto: - - bugfix: AI can now no longer be pushed even when anchored, only when dead or unanchored - can it be pushed (grab a dead core to swap places) - - bugfix: borgs can now no longer be pushed when in combat mode and alive, you will - always swap places with dead borg corpses. - RatFromTheJungle: - - 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 - defensive protocols of cyborgs slaved to malfunctioning ais, once again letting - them defend against emags + - bugfix: Plant Analyzer's readout should look less weird and more consistent again. + Mothblocks: + - bugfix: Fixed item quirks like photographer putting their items in the wrong spot. + Thunder12345: + - bugfix: Orange shoes no longer turn into errors when detaching handcuffs + bobbahbrown: - bugfix: Research consoles now correctly show GAGS-ified icons properly. No more missing janicart upgrades! - - bugfix: Orange shoes no longer turn into errors when detaching handcuffs - - spellcheck: Made the Doppler Array explosive sale message less wordy. + tralezab: - code_imp: killed the grown misc file! - - rscadd: Added brain-computer interface circuit shells. + - expansion: Roboticists can now construct critter-sized mechas, start with an EVA + helmet and a leg! + - code_imp: killed the aquarium misc file! + - rscadd: traitors now get some extra flavor. doesn't mean anything mechanically + or ruleswise right now, but maybe it will inspire some more creative traitoring? + - rscadd: a few antags now have a tgui menu instead of a greet. spiffy! they include + antag info you need. +2021-07-24: + GoldenAlpharex, with some help of Imaginos (PositiveEntropy): + - imageadd: Added a new badge to display on future berets. + - expansion: Nanotrasen'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 + and greater consistancy between the sprites. + - code_imp: Not all GAGS sprites can be recolored in vendors by default anymore. + Kubisopplay: + - bugfix: Syndicate hackers outsmarted another group of syndicate hackers, and updated + defensive protocols of cyborgs slaved to malfunctioning ais, once again letting + them defend against emags + Melbert: + - qol: Ctrl-click now activates the porta-seeder. + Thunder12345: - rscadd: Added class mechanics to Capture The Flag, with two new classes. - rscadd: The Assaulter class is a fast skirmisher armed with a shotgun and rocket gloves, but a very fragile energy shield. - rscadd: The Marksman class is a sniper armed with a hitscan rifle doing lower than standard damage. - - imageadd: Added a bunch of icons for Assaulter and Marksman gear. - - tweak: The fair maidens on the medieval simulation shuttle are no longer weapons - of mass destruction + - imageadd: 'Added a bunch of icons for Assaulter and Marksman gear. tweak: The + fair maidens on the medieval simulation shuttle are no longer weapons of mass + destruction' - bugfix: You can no longer spawn outside of CTF matches when multiple classes are available. - refactor: Rewritten the multi-class part of CTF spawning to use radial menus. - refactor: Medieval simulation has been refactored to bring it fully under the CTF framework - - balance: Add musical instruments to maint loot list - - bugfix: fixed cryocells and hfr runtiming on quick consecutive wrench actions. - - bugfix: Fixed Index Table outputting a table instead of a list. - - bugfix: toggling combat mode will now send a sound to the player even if the character - is deafened. - - bugfix: Fixed Chat Highlighting working on your own Binary messages. - - 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 - in AI to finally happen again + TiviPlus: + - bugfix: fixed normal panic bunker sometimes rejecting when it shouldnt + aaaa1023: + - spellcheck: Bloodspider directive now calls Changelings "Vicious" and not "Visicious" + - spellcheck: Added missing space in the happiness gum box's description. + - bugfix: There are no longer maintenance zone tiles inside the circuits lab on + icebox. + interestingusernam3: + - admin: Admins can't make it possible to deconstruct a hedge by wrenching with + a single var edit anymore. + vincentiusvin: - bugfix: fixed hfr crate having the wrong parts - - bugfix: lavaland syndie base and seed vault no longer explode into green tiles +2021-07-25: + tralezab: - bugfix: Nightmares were getting a broken ui panel, now they don't! +2021-07-26: + Ghommie: - bugfix: Fixes some hardships with placing lattice on multiz maps. - - bugfix: High Volume Vent Pump Layer 3 icon state to be correct - - bugfix: You can no longer be the living dead by having adminordrazine when you - die - - code_imp: killed the aquarium misc file! - - spellcheck: Tiger Cooperative Traitors now have a slightly better uplink information - flavor text + Melbert: + - bugfix: Roses in mask slot now have their correct worn sprite again. + Wayland-Smithy: - bugfix: Fixed Chat Highlighting working on your own OOC messages. - - rscadd: Adds ANTI-TIDER-2500 to the SecTech vendor - Spc-Dragonfruits: - - balance: Despite their age, rifles and their respective calibers are able to massively - outperform a modern pistol. - - rscadd: Added a new AK magazine variant, the RPK magazine. It holds 45 rounds - instead of 30. + timothymtorres: + - bugfix: High Volume Vent Pump Layer 3 icon state to be correct + - balance: Add musical instruments to maint loot list +2021-07-27: + Domitius: + - bugfix: One spraycan can no longer colour every light on the station. + Fikou: + - code_imp: bless aware hud is no longer hardcoded for chaplains + Ghommie: + - bugfix: Sentient monkeys are no longer subsceptible to being knocked over by mobs + in their way. + JohnFulpWillard: + - bugfix: Zombies no longer get permanently hungry. + Mothblocks: + - rscadd: Added brain-computer interface circuit shells. + Nari Harimoto: + - bugfix: AI can now no longer be pushed even when anchored, only when dead or unanchored + can it be pushed (grab a dead core to swap places) + - bugfix: borgs can now no longer be pushed when in combat mode and alive, you will + always swap places with dead borg corpses. + PositiveEntropy, tf-4: + - imageadd: Thanks to a collaboration between the frontier sector and the core sector, + the parade jackets now boast new and varied apperances for all to enjoy, with + a new parade jacket releasing for the Head of Security! + - imageadd: In no short effort than the finest of tailors, the captain's hat, the + centcom hat, the captain's jumpsuit and the captain's carapace now have finer + gold trims and the finest quality leather available, making them more vibrant + for all! + - expansion: To utilize the new variants, simply alt-click a parade jacket, or a + centcom commander coat. You can also obtain a Head of Security parade jacket + by simply accessing the Head of Security's closet! + TheSmallBlue: + - expansion: Adds the pathfinding component. + Thunder12345: + - code_imp: Killed the miscellaneous items file! Wallem: - bugfix: Only foods which are created at mapload require player interaction in order to decompose. - ZephyrTFA: - - rscadd: Engineering cyborgs can now install an advanced materials upgrade - - balance: Events now roll roughly half as often - capsaicinz: - - rscadd: adds the sneed plushie. - coiax: - - rscadd: Appendicitis is now no longer a disease. It has the same effects, although - shows up slightly differently on health scanners. It also is no longer caused - by the event system, and can happen to any appendix inside a person. -2021-07-29: - BurgerLUA: - - rscadd: Plumbing units are now researchable and obtained via Advanced Engineering - research. - - rscadd: Adds the mining Plumbing device. - Edgar-Allan-ShitPoest: - - rscadd: Added weak curator katana - - rscadd: Added ronin kit to curator's heroic beacon - FlamingLily: - - rscdel: Nanotrasen 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 - 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 - and greater consistancy between the sprites. - - code_imp: Not all GAGS sprites can be recolored in vendors by default anymore. + Wayland-Smithy: + - spellcheck: Made the Doppler Array explosive sale message less wordy. + - bugfix: Fixed Chat Highlighting working on your own Binary messages. + dragomagol: + - bugfix: lavaland syndie base and seed vault no longer explode into green tiles + timothymtorres: + - expansion: Added xeno plasma statue + tralezab: + - spellcheck: Tiger Cooperative Traitors now have a slightly better uplink information + flavor text + - code_imp: killed the global vars misc file! +2021-07-28: + Cyberboss: + - bugfix: Fixed APC's using extreme amounts of power instantly + EuSouAFazer: + - expansion: Kilostation Medbay's solar now starts with a Space Carp that cannot + destroy stuff. + - expansion: Kilostation Security's solar now doesn't have a solar computer, instead + having an empty computer frame and the circuitboard nearby. There is also 2 + glass nearby as well. + - expansion: Kilostation Engineering's solar now starts partially built, with a + box with assembly and glass nearby. + Fikou: + - bugfix: the elite syndie suit now has the proper icons on its first equip Guestify: - bugfix: Replaces security newscasters with non security ones in non security rooms on Tramstation + Kylerace: + - balance: tram is now twice as fast, pray it doesnt get faster + Wayland-Smithy: + - qol: Poll Candidates alerts no longer steal window focus, like ghost role rolls + and cult leadership votes. + - code_imp: Added an autofocus argument to tgui_alert, defaults on, that can be + used to prevent accidental inputs from surprise alerts when used. + ZephyrTFA: + - bugfix: Rust Heretics can once again benefit from rust + aaaa1023: + - bugfix: Removes stray coldroom area tile in cryogenics, medbay central tiles under + medical and snaking chapel office line on chapel walls on Metastation. + timothymtorres: + - bugfix: Fixed wallets not granting access for ID cards inside them. + timothymtorres, SomeoneYouProbablyKnow: + - expansion: Added a referee costume to autodrope and costume spawners + - imageadd: Added referee costume +2021-07-29: + EuSouAFazer: + - bugfix: Removed the duplicate QM stamp on Icebox + Fikou: + - admin: default instakill rifle doesnt delete itself + Ghilker: + - bugfix: HFR now properly take damage when overfilled with fuel + Ghommie: + - bugfix: Fixes ridden skateboards crashing back-to-back when bumping a dense atom + while another is behind them. + Greniza: + - bugfix: prisoner transport bags can now be cinched properly + - bugfix: syndicate prisoner transport bags now expel the expected amount of gas + due to an occupant's exhale + - spellcheck: makes cinching a PTB have proper pronouns according to an onlooker Improvedname: - balance: Construction bags fit once more in your pockets + Itseasytosee: + - qol: ghosts will no longer get fake virus alerts Melbert: - - bugfix: The mapped sprite for GAGS Lizard Plushes works, now. Mappers rejoice. - - admin: Tray planted kudzu will now log in investigate -> botany instead of its - own file. - bugfix: Some things that wouldn't dispense themselves from smartfridges now will properly give themselves up. Some examples include Roses, Nettles / Deathnettles, and Salad of Edens. - - bugfix: Plant Analyzer's readout should look less weird and more consistent again. + - bugfix: The mapped sprite for GAGS Lizard Plushes works, now. Mappers rejoice. + - admin: Tray planted kudzu will now log in investigate -> botany instead of its + own file. Mey-Ha-Zah, Fikou: - imageadd: new sprites for the ash walker egg - OrionTheFox: - - bugfix: Lea's Cowboy Poncho, specifically it's Toggle Component, works properly - now - PositiveEntropy, tf-4: - - imageadd: Thanks to a collaboration between the frontier sector and the core sector, - the parade jackets now boast new and varied apperances for all to enjoy, with - a new parade jacket releasing for the Head of Security! - - imageadd: 'In no short effort than the finest of tailors, the captain''s hat, - the centcom hat, the captain''s jumpsuit and the captain''s carapace now have - finer gold trims and the finest quality leather available, making them more - vibrant for all! expansion: To utilize the new variants, simply alt-click a - parade jacket, or a centcom commander coat. You can also obtain a Head of Security - parade jacket by simply accessing the Head of Security''s closet!' - RatFromTheJungle: - - balance: Cuts biorecons healing power in half. - - balance: Cuts the armor granted by dermal hardening by about half. - SkyratBot: - - bugfix: Meta medbay now has all its areas set correctly - - bugfix: Fixed item quirks like photographer putting their items in the wrong spot. - - bugfix: HFR now properly take damage when overfilled with fuel - - admin: Added the ability to save/load integrated circuits. - - bugfix: the elite syndie suit now has the proper icons on its first equip + Mothblocks: + - rscdel: Nanites have been removed. + Shroopy: - bugfix: robots now work properly - - bugfix: Sentient monkeys are no longer subsceptible to being knocked over by mobs - in their way. - - code_imp: Killed the miscellaneous items file! - - bugfix: Fixed carps being given orders without a friend via radial menu. - - bugfix: Fixed sentient carps being unridable because of the ai datum. - - bugfix: Fixed spectral instruments spawn probability - - rscadd: traitors now get some extra flavor. doesn't mean anything mechanically - or ruleswise right now, but maybe it will inspire some more creative traitoring? - - rscadd: a few antags now have a tgui menu instead of a greet. spiffy! they include - antag info you need. - - bugfix: Fixed APC's using extreme amounts of power instantly + Thunder12345: - code_imp: Removes all misc files/folders from the projectiles module - - code_imp: killed the global vars misc file! - - code_imp: Added an autofocus argument to tgui_alert, defaults on, that can be - used to prevent accidental inputs from surprise alerts when used. - - bugfix: Fixes ridden skateboards crashing back-to-back when bumping a dense atom - while another is behind them. - - bugfix: Fixed the launchpad usb connection not working with null x/y offset inputs. - - admin: default instakill rifle doesnt delete itself - - admin: Admins can't make it possible to deconstruct a hedge by wrenching with - a single var edit anymore. - - bugfix: fixed normal panic bunker sometimes rejecting when it shouldnt - - bugfix: Zombies no longer get permanently hungry. - - bugfix: Fixed wallets not granting access for ID cards inside them. - - balance: tram is now twice as fast, pray it doesnt get faster - - code_imp: bless aware hud is no longer hardcoded for chaplains - - rscdel: Nanites have been removed. - - bugfix: prisoner transport bags can now be cinched properly - - bugfix: syndicate prisoner transport bags now expel the expected amount of gas - due to an occupant's exhale - - spellcheck: makes cinching a PTB have proper pronouns according to an onlooker - - bugfix: Rust Heretics can once again benefit from rust - - bugfix: Vatbeasts can use their powerful tentacle slap ability again. - - bugfix: Removed the duplicate QM stamp on Icebox - Snakebittenn: - - rscadd: Adds Japanese language. - - rscadd: Slightly lowers space chance on Zolmach. Wallem: - bugfix: Flowers now have a Natrual Insecticide gene which protects them from decomposition upon harvest. - Yawet330: - - rscadd: Syndiborgs to uplink + Watermelon914: + - expansion: Adds the module duplicator that allows people to duplicate their module + components so that they don't have to recreate the entire code again. + - admin: Added the ability to save/load integrated circuits. + - bugfix: Fixed carps being given orders without a friend via radial menu. + - bugfix: Fixed sentient carps being unridable because of the ai datum. + - bugfix: Fixed the launchpad usb connection not working with null x/y offset inputs. itseasytosee: + - soundadd: There are now sounds for adjusting the pressure on a pneumatic cannon. + - qol: attacking disembodied brains now has animations and sounds. + - bugfix: constructs examine text color matches the rest of their theme. + - qol: Your gun will now actually spin around in your hand while gun-spinning - bugfix: Certain non-magic ranged weapons will no longer "appear to have a magic crystal installed" - - bugfix: constructs examine text color matches the rest of their theme. - - soundadd: There are now sounds for adjusting the pressure on a pneumatic cannon. - softcerv: - - imageadd: Adds in textures for mediguns and medicells. - - rscadd: Adds mediguns, upgradeable healing guns, orderable via cargo. - - rscadd: Adds medicells, upgrades to mediguns that unlock new healing types. + - qol: Adds some on examine instructions for constructing a turret tf-4: - - bugfix: Monkeys on the interlink will no longer slowly burn themselves to death - in their attempts to grab the light in their pen. - timothymtorres, SomeoneYouProbablyKnow: - - imageadd: Added referee costume - unit0016: - - bugfix: Interdyne having half a base most rounds, and also the FREE ROUNDSTART - (BASE /TG/) SECURITY EQUIPMENT ON ROCKPLANET. - - rscdel: Cybersun has been disabled. + - qol: dash items like the ninja katana now give a balloon alert instead of a chat + message + - bugfix: Meta medbay now has all its areas set correctly + timothymtorres: + - bugfix: Fixed spectral instruments spawn probability 2021-07-30: + AlinaStarkova: + - bugfix: Deltastations chapel disposals chute no longer chucks trash into departures + EuSouAFazer: + - bugfix: Changed the computer in Kilo's mining office. + - bugfix: A small issue on the tiling in the mining dock. + Fikou: + - qol: tcg flippers no longer have the scaling element + - qol: ski shoes arent as limiting anymore + Ghommie: + - bugfix: Icebox and Tram chemistry smartfridges are now preloaded. + - expansion: Monkeys can now retaliate against xenomorph and animal attacks. + IndieanaJones: + - refactor: Revenant, Sentient Disease, Space Pirates, and Obsessed have been registered + into dynamic mode. + InvalidArgument3: + - rscadd: Exosuit-mounted kinetic accelerator equipment. Unlocked through Mining + Technology. JustANormalHooman, Nari Harimoto: - bugfix: Biobags can feed reproductive extracts again, and can be fed multiple cubes from a bag with one click - refactor: reproductive extracts now have a storage component for the purposes of being fed - SkyratBot: - - bugfix: Adds APC electronics and replaces uranium with plasma in donut whiteship + LemonInTheDark: + - rscadd: Getting hit point blank by an explosion will shake your screen a good + bit more then before + - qol: '"Shakes" from explosions or hitting things really hard will look a bit smoother + now' + Mothblocks: + - qol: Ghosts can now examine BCIs inside hosts. + Thunder12345: + - code_imp: Removes the misc ID trims file. + Watermelon914: - code_imp: Removes some unnecessary code bloat from the circuit component files. - - rscadd: Exosuit-mounted kinetic accelerator equipment. Unlocked through Mining - Technology. - - bugfix: Fixed pAI loudness booster to work when not in holoform + godspeedfunnyman: + - bugfix: Adds APC electronics and replaces uranium with plasma in donut whiteship + timothymtorres: - bugfix: Fixed gas meters showing error icons before round starts and right before they are created - - code_imp: Removes the misc ID trims file. - - rscadd: 'Getting hit point blank by an explosion will shake your screen a good - bit more then before qol: "Shakes" from explosions or hitting things really - hard will look a bit smoother now' - YakumoChen: - - bugfix: being on fire wih a fireproof SEVA suit no longer somehow burns my jumpsuit - off anyway - softcerv: - - balance: Medigun Crates now cost 2x more. - - bugfix: Charge rate is closer to what I intended. - unit0016: - - bugfix: Interdyne and DS-2 no longer have empty alcoves where nanites used to - be. + - bugfix: Fixed pAI loudness booster to work when not in holoform + tralezab code, paxilmaniac sprites: + - expansion: Added Trash Cannons. Find the recipe in maint! 2021-07-31: - GoldenAlpharex: - - imageadd: More badges have made their way in Nanotrasen's Beret Production Line, - resulting in a wider variety of berets being possible! - - refactor: Nanotrasen'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: + DAKKA-WAAAGH: - rscadd: Casino emergency shuttle - - admin: Adds logging for cult reaching red eye and halo milestones - - bugfix: rev art now works correctly! - - refactor: 'Refactors the UI code of integrated circuits to be a lot less messy - and much more organised and to use much better practices to allow for better - features to be added. qol: Adds dragndrop functionality to integrated circuits - so that you no longer have to click to connect ports, you can drag instead.' + Fikou: - bugfix: reactive armor now properly updates its sprite on the mob + Ghommie: + - bugfix: Fixed e-bolas being unblockable, and not being able to ensnare flying/floating + mobs (though kinda pointless because they ignore the slowdown). + - bugfix: fixes being able to mind transfer into someone protected against it by + targetting their holoparasite/guardian. + - bugfix: All cargo manifest exports should now work as expected. No more gaining + money from selling erroneously denied manifests and not gaining/losing money + from incorrect manifests. + - bugfix: Fixes martial grab combos working while inside objects. + SmArtKar: + - bugfix: Fixes unremovable components counting towards overall capacity. BCIs are + no longer 6 slot instead of 10 + Watermelon914: + - refactor: Refactors the UI code of integrated circuits to be a lot less messy + and much more organised and to use much better practices to allow for better + features to be added. + - qol: Adds dragndrop functionality to integrated circuits so that you no longer + have to click to connect ports, you can drag instead. + tralezab: + - bugfix: rev art now works correctly! + wesoda25: + - admin: Adds logging for cult reaching red eye and halo milestones diff --git a/html/changelogs/archive/2021-08.yml b/html/changelogs/archive/2021-08.yml index 55620b041eb0d..6aad056b7281c 100644 --- a/html/changelogs/archive/2021-08.yml +++ b/html/changelogs/archive/2021-08.yml @@ -1,14 +1,27 @@ +2021-08-01: + SmArtKar: + - imageadd: Added new sprites and animations for module duplicator + ma44: + - rscadd: Weapon rechargers will now be more noticeable when it has finished recharging + something. 2021-08-02: - FlamingLily: - - rscadd: sex - - rscadd: gas miners - - rscdel: Stasis beds. Again. Fuck you. (Is this too much? Idk, /j anyway) - - rscadd: NTR Rooms - GoldenAlpharex: - - bugfix: You can now speak again. - Lyroy: - - bugfix: Added some of the new jobs to the list of jobs allowed to take certain - job-related items in the loadout menu. + Ghilker: + - bugfix: fixed issue where plasmaman clown and mime would die to the filtered plasma, + clown and mime masks no longer have filters roundstart + - qol: filters can be removed with rclick + Ghommie: + - bugfix: Fixed copies of stamped papers sharing the same `stamps` list. + - rscadd: People with the phobia of falling are now afraid of open space turfs. + Gurkenglas: + - qol: Circuit component descriptions and module names are now visible to the naked + eye. + InsaneRed: + - qol: Metastation's toxins has been reworked a bit to fit better with thermomachinery + and better piping + Jackraxxus: + - bugfix: The wisdom cow no longer spawns in space. + NamelessFairy: + - bugfix: Adds a missing wall to delta maint Nari Harimoto: - bugfix: Tram's RD telescreen can now view their dept cameras again - bugfix: Delta and Meta RD offices now have a RD telescreen again @@ -158,6 +171,74 @@ - imageadd: icons for the new items and enemies. - code_imp: added code and items for the prison, such as jumpsuits, enemies, and the ghost roles. + Ryll/Shaps: + - qol: Adds a new preference for photosensitive players in the OOC preferences menu + to replace the bright white flash from things like flashes/flashbangs with a + solid black screen. + SmArtKar: + - qol: Servers now have USB ports + TheSmallBlue: + - bugfix: The outputs on the Launchpad USB component now work as they should. + TiviPlus: + - bugfix: riding offsets actually work now + Wayland-Smithy: + - qol: Improved the COMMS_KEY config documentation. + maxymax13: + - spellcheck: You no longer "accidently" shoot yourself spinning a gun + tf-4: + - bugfix: Clumsily hitting yourself with the classic baton now gives you the message + with the appropriate perspective + tralezab: + - bugfix: cannons lost their sprites in the last feature addition for them... now + they have those back! +2021-08-03: + Fikou, sprites from /vg/: + - expansion: reinforced rock for mapping use + Ghommie: + - expansion: Picked up bees and mice can now fit in boxes. + Gurkenglas: + - expansion: Signals now fire a timestamp. + JohnFulpWillard: + - bugfix: Cultists using Twisted Construction on a Cyborg will no longer spawn 2 + constructs. + KittyNoodle: + - bugfix: ethereal hair will now change with ethereal color without an external + update + SmArtKar: + - expansion: You can make BCI overlay and click interceptor circutry now! + - balance: BCI now has it's own research node. + - bugfix: You no longer can remove BCI core and actions from BCIs and insert them + into other circutry. + Thunder12345: + - code_imp: Removes (almost) all misc files from the clothing module + Watermelon914: + - admin: Adds admin components that allow admins to set variables, get variables, + call procs and execute sdql via circuits. To enable these components to function, + an admin needs to enable the admin_only variable on a circuit. + - qol: Adds more entity information to shell outputs to allow circuits to identify + who used the shell. + - expansion: Adds list literals. + - bugfix: CTF will no longer delete objects on CTF maps that shouldn't be deleted + and it'll also successfully regenerate the map once a CTF round ends. + - bugfix: Fixed phantom slipping caused by synthesized banana peels. + - bugfix: Fixed the metabolism unit test randomly failing because of neurowhine + carshalash: + - bugfix: Eggs now work when cracked into glasses +2021-08-04: + Fikou: + - admin: adds list getter and text2num to sdql wrappers + Greniza: + - bugfix: The pip count, layout, and orientation of standard D6s has been brought + in line with a standard casino D6. + Gurkenglas: + - expansion: The multiplexer component, now router, also demultiplexes across multiple + outputs. Also, the indices now wrap instead of clamp. + Improvedname: + - bugfix: Anti-tider mister is no longer invinsible inhand + InsaneRed: + - bugfix: Cultists can once again draw runes in lavaland mining station + JohnFulpWillard: + - bugfix: Using Twisted Construction on an AI shell no longer ghosts the AI MMMiracles: - rscadd: Tramstation's service wing has been revamped! - rscadd: The Kitchen and Hydroponics has been redesigned entirely with small adjustments @@ -278,6 +359,123 @@ an existing thing qol: made something easier to use' - bugfix: railings can now be vaulted/climbed over from both sides. - admin: Admins now have a "View All Circuits" button to investigate circuits easier. + Mothblocks: + - bugfix: Fixed medical HUDs not showing the defib icon. + SmArtKar: + - expansion: You can control air alarms using USB now + - bugfix: Phazon microtool arrays no longer have an error sprite + TemporalOroboros: + - bugfix: Fixed rad collectors ignoring letting anyone (un)lock them with their + ID. + - bugfix: Beef wellingtons cannot be sliced to produce beef wellington slices that + can be sliced to produce beef wellington slices that can be sliced to produce + beef wellington slices... + Timberpoes: + - bugfix: Fixed a bug preventing the Plexagon HR Core app from de-prioritising jobs + when 5 or more jobs were prioritised. + Triiodine: + - bugfix: NT engineers have repaired a malfunctioning external airlock set at Kilostation + disposals. It should cycle properly now. + Watermelon914: + - bugfix: Vehicles can now be buckled to again. + - code_imp: Improves BCI code by removing an easily bypassable `add_to` check for + circuit components and implementing proper typechecking in the addable BCI components + - bugfix: Fixed the UI notices about the supported types not showing up on all BCI + components + Zytolg: + - rscadd: Makes Icebox Service Multi-Z through retroaction. + - rscadd: The first Multi-Z kitchen on /tgstation/ + - bugfix: Tosses out the non Multi-Z aspects of the previous service + - qol: You can now use stairs to visit the various areas of Icebox Service + - bugfix: This should force ruin spawns out and away from the center of the station. + Next step is to actually add icebox ruins that are small but help force that + spawn condition. + interestingusernam3: + - bugfix: Being clumsy no longer protects you from grenades sticking to your hands. + tralezab: + - code_imp: Pavlova has better code :) + - spellcheck: Pavlova has a different description now + - bugfix: fixes soulstones granting themselves every language... instead of the + spirit inside. lol. + - refactor: refactored spirit possession used in the possessed blade into a component. + now ANYTHING could be possessed if you so desire! +2021-08-05: + Ghommie: + - balance: Standard bananium floor is now viable for clown decoration and isn't + slippery. Custom bananium floor tiles can be used to slip people though. + IndieanaJones: + - bugfix: Dynamic's Pirate spawn will now properly trigger. + InsaneRed: + - bugfix: You no longer need to unbuckle twice from xenomorph nests to be free + JohnFulpWillard: + - bugfix: Dead Cyborgs are thrown back into their body when turned into a Cultist + construct. + Melbert: + - code_imp: Uncomments the code that makes chaplains enjoy holymelons. Chaplains + will now gain positive moodlets from eating holy melons once again. + Mothblocks: + - admin: Admins now have a "View All Circuits" button to investigate circuits easier. + Paxilmaniac: + - expansion: hmg turret making use of newly fixed manned turret code, and the deployable + component + - bugfix: manned turret projectiles now actually go towards where you aim + - soundadd: new heavy machinegun sound from tgmc + - code_imp: deployable component, for deploying things from other things + SmArtKar: + - expansion: Conveyor switch and quantum pad can now be connected through USB cables + TemporalOroboros: + - bugfix: The chasm hallucination now visibly indicates the turfs it's effecting + again. + Watermelon914: + - refactor: Refactors datatype code completely for integrated circuits. + - refactor: Options have been moved to their own input port with their own special + type known as the "Option" type. + - bugfix: Fixed CTF breaking when it restarts. + Y0SH1M4S73R: + - bugfix: List literal components no longer append their output with garbage data. + antropod: + - bugfix: Custom vendor bluescreen + interestingusernam3: + - spellcheck: Gutlunches no longer eat through their nutrient sacs. +2021-08-06: + Gandalf2k15: + - bugfix: Reinforced walls should now smooth properly. + Ghommie: + - refactor: refactored the thrownthing datum a little. + - qol: you can now throw stuff at movables with no density, such as mobs lying on + the floor, mice, APCs, light bulbs etcetera etcetera. + - bugfix: Contractor pods won't land on groundless turfs such as chasms, lava or + open space anymore. + KubeRoot: + - bugfix: Tailored winter suit hoods are now colored correctly + Melbert: + - bugfix: Rust Heretics now need to stand on Rust to heal again, instead of passive + free healing + SmArtKar: + - balance: Doubles capacity for most shells + - expansion: Added scanner gate shells + dragomagol: + - admin: adds an additional log file, mob_tags, for referencing mob numbers in logs + timothymtorres: + - bugfix: Fixed being able to polymorph pAIs into other mobs. It changes their + holoform now instead. + - bugfix: Fixed being able to polymorph mimics spawned from a staff of animate +2021-08-07: + ArcaneMusic: + - bugfix: Wirecutters have their correct belt slot icon again. + Ghommie: + - bugfix: railings can now be vaulted/climbed over from both sides. + - bugfix: Folded gold wheelchairs are now actually made of gold. + NamelessFairy: + - bugfix: Adds a missing wall on CentCom in the supplypod facility + - bugfix: Most if not all CentCom windows should now be on plating + Nari Harimoto: + - bugfix: chapel areas now work properly, no more APCs thinking its in space on + tram + Thunder12345: + - code_imp: Made the Occupational Corruption Device's deadchat message less cryptic, + and repathed it to something more descriptive + Zytolg: - bugfix: Missing APC in Icebox Bar Maint - bugfix: Changes icebox apiary to the correct type - bugfix: Icebox Disposals was unlinked under the bar table. This should fix that. @@ -359,6 +557,18 @@ BurgerLUA: - balance: Nicotine addiction is now more realistic and has additional side effects from a pool of possible side effects. +2021-08-08: + Mokiros: + - bugfix: added parentheses to properly calculate days in round time + Seris02: + - bugfix: pais will no longer get hurt by the rod of asclepius + Watermelon914: + - bugfix: Fixed circuit component options + - code_imp: Moves most circuit component defines to their appropriate files +2021-08-09: + ArcaneMusic: + - bugfix: Accounting machines now assign the job to the bank account, meaning that + new accounts can buy things without being considered budget cards. Fikou, MeyHaZah, some sprites from /vg/station: - balance: mining soulstone can no longer grab sleeping/unconscious people - balance: voice of god can immobilize in addition to knocking down @@ -378,6 +588,44 @@ - balance: winter biodome is a bit harder, its antique laser has now been replaced with a freeze cube in a vault - balance: spellblade from bubblegum is replaced with a soulscythe + TheSmallBlue: + - bugfix: Pathfinding component should now properly go around walls every time. + Time-Green: + - bugfix: draws moth antennae when you're wearing helmets again (oops) + aaaa1023: + - bugfix: fixed an error caused by toilets taking damage after they were deconstructed +2021-08-10: + ArchPigeon: + - bugfix: fix reattaching of monkey bodyparts + Krysonism: + - expansion: Adds a new illicit drug; bLasToFF, perfect for when you want to dance. + - expansion: Adds a new illicit drug; SaturnX, perfect for when you just want to + disappear. + - expansion: Adds a new illicit drug; Kroncaine, perfect for when you need to get + shit done. + - expansion: The seeds of a rare plant; the kronkus vine can now spawn in maint. + - expansion: Lead batteries and pipes can now spawn in maint. + - rscdel: Removed crank. + - balance: Mushroom hallucinogen has a new trippy effect, but no longer makes you + druggy or dizzy. + Mothblocks: + - qol: Observers can now read circuits from anywhere. + - expansion: Added USB support to teleporter control consoles. + Nari Harimoto: + - bugfix: Nanotrasen architects realized they cut too many corners and left out + a number of airlock cycle controls on Tramstation, they have since returned + and fixed their mistakes + - bugfix: Icebox service disposals has now been professionally connected + - bugfix: Icebox service has now been tweaked to be up to NT standards + - bugfix: Pete has now been assigned to icebox freezer again + Triiodine: + - qol: NanoTrasen sent some engineers in and revised the Virology Module on Ice + box Station, and have also supplied standard equipment available on other station + labs that Ice Box had been missing. The structure changes have caused maintenance + to expand slightly. +2021-08-11: + InsaneRed: + - bugfix: Fixed up distro pipes on botany of tramstation, adds 2 extra water tanks Ryll/Shaps: - bugfix: Default AI behavior cooldowns have been returned back to 0,8 seconds instead of 0.1 seconds, meaning Ian will no longer disembowel you with 20 attacks in @@ -402,10 +650,26 @@ - bugfix: Mediguns now eject Medicells into the user's hands instead of always on the floor. 2021-08-12: +2021-08-12: + EricZilla: + - imageadd: Centcom finally sent us new PDAs. The uh, clown one keeps looking at + me. + Fikou: + - bugfix: fixes cannons not working Gamer025: - code_imp: url_encode and decode now try to stringify inputs Gamer025 & Wayland-Smithy: - bugfix: Submenus like Sound and Ghost inside Settings are no longer gone + + Gurkenglas: + - qol: All circuit component input ports act as a combiner. + - refactor: 'Circuits: set_input and set_output are now put. input_value and output_value + are now value.' + InsaneRed: + - rscadd: the crystallizer can now produce crystalized hyper noblium that makes + your clothes pressure proof! not dying to pressure from other people is not + guaranteed. + MMMiracles: - bugfix: Spider midwives can no longer send commands while dead - bugfix: Nurse spiders can no longer heal dead spiders and get a message when trying @@ -485,6 +749,32 @@ - balance: removed some loot left over as an oversight and nerfed the Warden boss fight a bit. - bugfix: removed and replaced some zombies that spawned invisible + Whoneedspacee: + - bugfix: Megafauna are no longer stopped by corpses and chairs. + sqnztb: + - bugfix: Navigation computers can now arbitrarily land on top z-level openspace. +2021-08-13: + AMonkeyThatCodes: + - spellcheck: Areas where it makes sense now have \improper pre-fixed to them + Fikou: + - bugfix: fixes some megafauna shooting too fast + Ghommie: + - bugfix: Food preference quirks are no longer broken by species change. + Jordie0608: + - admin: Round id when a note was made in now displayed in the notes panel + Seris02: + - bugfix: dchat clogging of clientless mobs is gone + Wayland-Smithy: + - admin: Improved invisimin toggle messages. + - bugfix: Fixed Oingo Boingo Punch-face! not displacing airlocks. + - bugfix: Fixed shotgun meteorslugs not displacing airlocks. + - bugfix: Fixed chocolate surprise easter eggs being edible before they are unwrapped + and tasting like egg. +2021-08-14: + FireFlashie: + - bugfix: Fixes changelogs parsing on linux enviroments + Ghilker: + - bugfix: HFR fuel mixes now properly consume the correct amounts GoldenAlpharex: - bugfix: Paper that's on a clipboard doesn't need to be poked to realise that its appearance has changed and to properly display it on a clipboard. @@ -583,130 +873,183 @@ GoldenAlpharex: - bugfix: Space-proof beret now actually appears to have been made into a beret, instead of a reality-bending bunch of letters. + JohnFulpWillard: + - spellcheck: DNA activators will now become expended once used, even if it hasn't + activated anything. + - spellcheck: Removed a space when recycling an activator at a DNA console. + Krysonism: + - balance: liquid electricity grants more charge to ethereals. + - balance: Ethereal racial foods contain more liquid electricity. + SmArtKar: + - expansion: Adds 3 new NTNet components for circuits + Timberpoes: + - config: Added a config flag for mirroring the logging of certain failed logins + to their own file. + Watermelon914: + - expansion: Adds circuit variables, which replace the RAM component. A cog icon + has been added to the top of the integrated circuit UI to access these variables. + - code_imp: Moved all the integrated circuit core files into a new subfolder called + core +2021-08-15: + Ghilker: + - bugfix: constructed atmos devices now show the correct color in the name (no longer + all grey) + - qol: the healium crystal now fix the air instead of refilling it (that role is + still available with the proto nitrate one), the crystal is not made with O2 + instead of freon + - expansion: Add crystal foam recipe to crystallizer, a crystal that when broken + will release a tick foam that closes any and all breaches that it encounters + (it won't refill the air tho) + Rohesie: + - bugfix: Buckling to nearby objects and roundstart shuttle buckling now result + in the proper facing direction. + Wayland-Smithy: + - bugfix: Fixed new ticket ahelp message double sanitizing. +2021-08-16: + Colovorat: + - bugfix: Cyborg emergency reboot module now is no longer dropped if revive is succesful + - bugfix: Controller shell extra button now works properly + Couls: + - bugfix: bright white spheres when attacking things with an item that has a light + source attached + - bugfix: inventory and action buttons creating light sources + Ghommie: + - bugfix: freezers will now actually protect their contents from explosions once + like iamgoofball intended almost 4 years ago. + Time-Green: + - bugfix: moths will burn +2021-08-17: + Ghommie: + - qol: Wormhole projectors now fire blue wormholes with left mouse btton and orange + ones with right mouse button. + GreatKingWombat: + - bugfix: Defined the in-hand state for the chaplains' unholy pitchfork. The in-hand + sprites will now actually appear. + SmArtKar: + - bugfix: NTNet Transmitter now works + Timberpoes: + - admin: Admins can now find "banned account in connection history" admin alerts + mirrored to the suspicious logins log file. + Watermelon914: + - bugfix: Fixed freezers protecting their contents after being exploded. +2021-08-18: + Cyberboss: + - bugfix: The insufficient black market credits message now properly displays. + EOBGames: + - code_imp: Management would like to announce that in accordance with new company + policy, the Toxins Lab will henceforth be known as the Ordnance Lab. In addition, + a number of company protocols have been rewritten with this in mind. + Watermelon914: + - refactor: Refactors connect_loc_behalf and caltrops to both be components. This + will likely solve a lot of current issues with connect_loc_behalf as storing + states will be much more stable on it. +2021-08-19: + GoldenAlpharex: + - bugfix: Space-proof beret now actually appears to have been made into a beret, + instead of a reality-bending bunch of letters. + Maurukas: + - bugfix: The intercom in Deltastation's toxin range has been relocated closer to + the implosion compressor + Moltovz: + - bugfix: fixed a broken bee in botany. + Potato-Masher: + - bugfix: Fixes the Deltastation Engineering console being wired to the wrong powernet, + allowing the Ampcheck program to function as intended. + - bugfix: Added a missing length of cable to the tramstation kitchen, as well as + the absent salt/pepper shakers. + SmArtKar: + - bugfix: Beach Biodome now has an oven and a griddle + jughu: + - bugfix: fixes wizard failing to spawn without a spellbook when you roll a d20 +2021-08-20: + BarrelOfNapkins: + - bugfix: if a character is blind, they can feel how full they feel while eating + Fikou: + - bugfix: fixes service achievements + Ghilker: + - bugfix: fixes thermomachine abuse by slowing the exchange ratio based on the moles + amount on the ports (both if cooling, only main if not) + Gurkenglas: + - bugfix: The intern responsible for NTNet circuit components not working has been + sacked. + Improvedname: + - bugfix: Auto rifle ammo crates have a name now + Krysonism: + - bugfix: Fixed an exploit that allowed SaturnX enjoyers to become permanently invisible. Pepsiman0: - bugfix: 'the chem mass spectrometer is now a proper machine that is now: buildable, deconstructable, movable and upgradable. (the research for the board is in the basic bio tech node)' - SkyratBot: - - bugfix: Fixed the circuit duplicator not working. - - bugfix: if a character is blind, they can feel how full they feel while eating - - bugfix: Fixed an exploit that allowed SaturnX enjoyers to become permanently invisible. - - bugfix: fixes wizard failing to spawn without a spellbook when you roll a d20 - - bugfix: The intern responsible for NTNet circuit components not working has been - sacked. - - bugfix: Player controlled mulebot mobility is now affected by motor wires. - Spc-Dragonfruits: - - rscadd: Added ARG-75 rifle and 7.62mm rifle magazine - - rscadd: Added CMG-1 smg -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 - less pain involved. - MMMiracles: - - bugfix: Solar assemblies can no longer be built on top of existing solar panels. - SkyratBot: + PositiveEntropy, Kryson, TetraZeta: + - imageadd: Ports new Hypospray, Combat Autoinjector, Pestle, Mortar and Dropper + sprites from Shiptest! + - imageadd: Adds a new sprite for pill bottles! + ViktorKoL: - bugfix: corrected Fiery Rebirth's and Curse of Corrosion's heretic research descriptions - bugfix: fixed heretic research progression after unlocking the Lonely Ritual - - bugfix: fix crystallizer from getting stuck on same amount of gases, limits the - allowed amount of allowed gas inside by double the recipe amount per type + Watermelon914: + - bugfix: Fixed the circuit duplicator not working. + Wayland-Smithy: - bugfix: Fixed microwave's attack_hand_secondary return value. + timothymtorres: + - qol: Mulebots no longer turn off power when the panel is opened with a screwdriver. + - bugfix: Player controlled mulebot mobility is now affected by motor wires. + - bugfix: Fix fire being extinguished by pAIs, borgs, or simple animals by walking + over the mob. +2021-08-21: + BraveMole: + - code_imp: prevent possible QDEL_IN harddel + Gamer025: - code_imp: Failsafe is more robust now and the game can actually recover from an deleted MC + Ghilker: + - bugfix: fix crystallizer from getting stuck on same amount of gases, limits the + allowed amount of allowed gas inside by double the recipe amount per type + MMMiracles: + - bugfix: Solar assemblies can no longer be built on top of existing solar panels. + SpookyTheFox: + - bugfix: tweaked soda dispenser reagent temperatures + Thunder12345: - admin: The add component option in view variables now uses a tgui list that can be searched. - - bugfix: fixes thermomachine abuse by slowing the exchange ratio based on the moles - amount on the ports (both if cooling, only main if not) - - bugfix: Fix fire being extinguished by pAIs, borgs, or simple animals by walking - over the mob. - - bugfix: fixes service achievements + Time-Green: + - bugfix: lowered mothwings are now visible again + aaaa1023: + - spellcheck: fixed a few typos in sleeping carp "recall teachings" text. Also changed + a line in it to be less awkward. 2021-08-22: + AMonkeyThatCodes: + - bugfix: Moving aside your mask will no longer make you impervious to disease Arkatos: - bugfix: Fixed several messages which were not showing properly about finding a rabbit in a hat, rattling your bones, denying sect membership or cooking sausages. - Deek-Za: - - bugfix: Fixed a small error in Access Code. - - balance: Prevents security and their respective tokens from potentially being - taken entirely out of the fight in the event of a bombing. - FlamingLily: - - balance: NT Reps offices are all with maintenance doors, now. - Gandalf2k15: - - balance: Mold cores are no longer the Achilles heel of mold, mold no longer slips. - GoldenAlpharex: - - bugfix: Ghost Cafe Visitors are now always eligible to a free box of chameleon - clothes, and as such will always receive one in their left hand upon joining - the Ghost Cafe! - - bugfix: Admins are now the one that decide how you spawn when they quick-spawn - you, instead of having to awkwardly wait for you to do it yourself. - LeonY24: - - soundadd: M16, MP40 and AKM now have their interaction sounds. Melbert: - bugfix: Some mask slot items won't prevent you from breathing properly due to a runtime error - Seris02: - - bugfix: AIs will no longer hear all emotes from all ai_eye cameras - SkyratBot: + Watermelon914: - admin: Adds component removals and mass component removals to the VV menu. - - bugfix: Moving aside your mask will no longer make you impervious to disease - - code_imp: prevent possible QDEL_IN harddel - - bugfix: tweaked soda dispenser reagent temperatures - Yawet330: - - tweak: The syndicate advanced card can now hold infinite syndicate and captain - access, along with two CC accesses. Bruh. - axietheaxolotl: - - rscadd: Added double beds - - imageadd: added double bedsheets - - bugfix: fixed e_gun subtypes using the AC-2 worn icon - - rscadd: Added Command and CC budgets - - rscadd: Added Captain to Command Budget - - rscadd: Added the Titan Crew, Blueshield, NT Rep to CC budget. - goatking-ss13: - - bugfix: Latejoin prisoners will now spawn in the permabrig, as intended. - jjpark-kb: - - rscadd: added the ability to grow plants on basalt turfs - softcerv: - - balance: 'see #7628' - - rscdel: 'Removed small hypovials from the autolathe qol: Hypovials can now be - produced by ChemMasters and pill presses, like on oldbase.' - - balance: Pill presses now have a buffer of 60 to accommodate for hypovials. - - bugfix: incubus draft recipe now makes incubus draft instead of succubus milk - thestubborn: - - bugfix: hopefully fixes headphone off state 2021-08-23: - CandleJaxx: - - rscadd: Added Vox clothing sprites that fit on their newly-adjusted sprite - - rscadd: vox suit / helmet additions to better fit their new sprites - - rscadd: vox-specific GAGS jumpsuits, skirts, shoes, berets, prison suits - - rscadd: gloves for vox-fucked-up-hands - - rscadd: 'modular species specific clothing section for future utilization on broader - scope projects qol: made something easier to use change: Vox species parts and - markings have been edited to appear more alien. - - More to be posted as the PR progresses' - Gandalf2k15: - - balance: Be antag now starts set to off. - - bugfix: Be antag now actually works. - 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 - in the station's standard-issue glass boxes. - SkyratBot: - - bugfix: fixes hot ice igniting using 100x the actual number of the sheets - - bugfix: fixes hot ice being ignitable with a condenser + Timberpoes: - bugfix: Fixed runtime in monkey AI which would prevent monkey from pickpocketing weapons or picking weapons off the ground. - Snakebittenn: - - rscadd: Adds a Medical bandolier for vials/beakers/medicells/etc. - - bugfix: Fixes Crusader bandolier sprite. - sqnztb: - - balance: Head roles and security cannot have nymphomania. NT fleet now under same - head role quirk restrictions. + vincentiusvin: + - bugfix: fixes hot ice igniting using 100x the actual number of the sheets + - bugfix: fixes hot ice being ignitable with a condenser 2021-08-24: - CandleJaxx: - - bugfix: Adds missing Vox icons for their mining gear. - SkyratBot: + Fikou: + - bugfix: fixes stun baton switching exploit + Melbert: + - refactor: Various toggle/transforming items (energy swords / shields, the cleaving + saw, switchblades - to name a few) are now handled via component (the transforming + component). + - code_imp: Slightly cleaned up the code surrounding various transforming items. + Comments, better vars, etc. + - bugfix: The Syndicate Jaws of Life no longer become normal Jaws of Life on use + Pepsiman0: + - bugfix: you can now smash a bottle of beer or ale on someone's head + Wayland-Smithy: + - bugfix: Fixed dash abilities, like from Hiero Club, null owner refs. + esainane: - bugfix: The HFR now places its side components in the correct orientation when constructed by using a Multitool on the rapid HFR boxes. The core still needs rotating if your design requires it, and is best done before you step away unless @@ -828,6 +1171,72 @@ - code_imp: added a stack trace to job list initialization from text file - config: Reorganized jobs.txt and added missing entries SkyratBot: + Colovorat: + - bugfix: Cables from protolathe and autolathe should merge just fine now + Ghommie: + - bugfix: roundstart offstation antagonists such as wizards and nuke ops no longer + have quirks (either from preferences or hardcore random) assigned to them or + count toward the hardcore random score. + - bugfix: Fixes the lone operative event hardly ever rolling even if the disk is + left on the same place for hours because of dynamic. + Kryson, AMonkeyThatCodes: + - imageadd: Replaces the lobby menu with sprites instead of HTML + softcerv: + - bugfix: stargazers can now form slime links again. +2021-08-26: + Ghommie: + - bugfix: Fixes monkey being unable to access right click functions on several objects + such as stacks and storages. + - bugfix: Outgoing comms console messages to allied stations will not be shown again + as incoming messages. + - bugfix: Fixes traits added by quirks not being removed when those are deleted + (like from eigenstasium). + Krysonism: + - expansion: 'The spores of a new rare mushroom occasionally spawns in maint: the + odious puffball! Gross.' + Nari Harimoto: + - bugfix: smart pipes will no longer occassionally be buggy when placing atmos pipes + across roundstart pipes + TiviPlus: + - refactor: Area based lighting can be varedited and changed now + Watermelon914: + - admin: Made admin only shells not interactable to non-admins + tralezab: + - imageadd: better fish and fish food sprites + wesoda25: + - bugfix: Repairing clothing now immediately updates the sprite +2021-08-27: + Nari Harimoto: + - bugfix: minor edits to some walls in icebox maint so all edges touch + Sealed101: + - bugfix: The long-presumed-missing CMO's rubber stamp has been returned to Delta + station's CMO office. Hail bureaucracy! + TiviPlus: + - bugfix: Fixed an exploit + bobbahbrown: + - admin: Add Requests Manager to view all prayers/centcom and syndicate requests/and + nuke code requests within a round. + esainane: + - spellcheck: The HFR now correctly describes the recipe cooling modifier as adjusting + the maximum cooling, rather than the minimum cooling. + - bugfix: Temperature Control Units now display their color when set or changed, + rather than always displaying as grey. + mokulus: + - code_imp: Treat DreamMaker warnings as errors in CI + timothymtorres: + - bugfix: Fixed crayon and spraycan text input to behave properly + tralezab: + - bugfix: Honorbound followers can now perform surgery. + - bugfix: Honorbound followers can no longer punch the innocents. + - bugfix: fixes heart attack message spam for synthetic organs! +2021-08-28: + Couls: + - rscadd: TGUI autolathe + - expansion: You can now input a custom amount to print(hard limit at 50 or maximum + stack size) + - expansion: Can now search and change categories while the autolathe is busy, line + up those designs! + Ghilker: - bugfix: error when typing the mole efficiency (instead of 0.1 it was 0.001, didn't push the change) - bugfix: infinite power consumption (capped) @@ -893,24 +1302,86 @@ lay eggs as opposed to 10 seconds. qol: Spiders can see further in the dark now.' - spellcheck: Changed the wording on antag panel policy a little bit. + tralezab: + - bugfix: fixes field generators not being interactable +2021-08-29: + Fikou: + - bugfix: colossus bolts no longer instantly explode you if youre in a car/mech +2021-08-30: + Arkatos: + - refactor: Cyborg Station Alerts UI now uses tgui. + - refactor: AI Station Alerts UI now uses tgui. + IndieanaJones: + - expansion: Spider nurses and broodmothers can now place down sealed webs by webbing + an already webbed tile, allowing them to make weak walls. + - qol: Tarantulas now use right-click to charge as opposed to a button ability. Said + button ability is now removed. + - balance: Spiders have received some slight balance changes to make them less oppressive + when they have the upper hand whilst letting them slightly handle atmos changes. One + major change is that broodmothers now take 15 seconds to lay eggs as opposed + to 10 seconds. + - qol: Spiders can see further in the dark now. + Y0SH1M4S73R: - bugfix: Variables within an SDQL spell list variable can have their names changed without causing a cascade of errors - refactor: SDQL spell query execution has been moved to a component - admin: The parse error handling for SDQL spells has been improved significantly - admin: Projectile SDQL spells can now fire any projectile - admin: Touch SDQL spells can now use any touch attack item - jjpark-kb: - - bugfix: ashwalking should work for all of the plants now... not just plants with - mutations - softcerv: - - code_imp: replaced some usage of span_class with the newer standard. + esainane: + - bugfix: Smart pipes now calculate their direction properly, and construction code + checks direction logic properly. This fixes many problems with atmospherics + construction. + - bugfix: Smart pipe construction now no longer tries to work around irrelevant + pipes which are on completely different layers and do not interact with the + new pipe in any way. + - bugfix: Smart pipes with less than two allowed directions can no longer be built. + The pipe would be invisible, but still interact in weird ways. + - bugfix: One tile can no longer have more than one atmospheric component ready + to connect in the same direction and layer. This prevents the scenario where + a temperature pump is placed in a manner which looks like it's going to connect + to a horizontal bridge pipe, but actually turns the vertical plasma input pipe + behind it into a manifold, ruptures the connected plasma canister, and sets + Toxins on fire. + - qol: Smart pipes are now much, much smarter. During construction, if a smart pipe + would block placement of a component, it will see if permitted connectivity + can be reconfigured to make room for other components. This includes negotiation + with other smart pipes, preferring to create pipe crossings where available, + or create an opposing corner pipe if not. The RPD can now also reconfigure allowed + connectivity for existing smart pipes manually. Smart pipes can never be reconfigured + to have less than two allowed directions, and active connections cannot be reconfigured. + Automatic reconfiguration will never cause a smart pipe to permit connectivity + that was not previously permitted. + - bugfix: Multi-layer pipe components can trigger smart pipe negotiation where relevant. + - refactor: Rearranged some atmospherics pipe code. Fewer redundant loops, add and + use documented and centralized helpers for bit manipulation where sensible. + Make bitfield assumptions explicit. + - code_imp: made a small part of the documentation in the area less wrong dear god + my eyes the goggles do nothing + tralezab: + - spellcheck: Changed the wording on antag panel policy a little bit. 2021-08-31: - Foxtrot (Funce): - - balance: Spacevines only occur once in a round now. - - balance: Spacevine event only happens at 60 players or more. No more lowpop plant - stations. - SkyratBot: + AMonekyThatCodes: + - refactor: Adds basic mobs, a replacement for simple mobs that will hopefully destroy + the subtype. This is so far applied to cockroaches (and their variants) + JohnFulpWillard: + - bugfix: Hardcore random traitors now get their hardcore random points for greentexting. + Mothblocks: + - admin: Admins can now give players a popup if they are not responding to tickets. + Shroopy: + - bugfix: Female uniforms now update color correctly. + - code_imp: Female clothing generation now takes greyscale_colors as an arg, which + is null by default if the clothing item doesn't use GAGS. + Y0SH1M4S73R: + - bugfix: Traitors that are unable to receive equipment required for specific objectives + will be able to order that equipment from the uplink. Other antagonists that + are unable to receive such equipment can call in a pod containing that equipment, + unless they somehow have an unlocked uplink on their person, in which case they + can order it from the uplink. + YakumoChen: - bugfix: Naive clowns now worry less about their "sleeping" pets. - jjpark-kb: - - rscadd: added spacevine spacewalking mutation - - rscadd: spacevines allow you to spacewalk, similar to lattices + aaaa1023: + - spellcheck: fixed misspellings of "aggression" in the descriptions of Gelatinous + Ooze, NT combat defib and misspelling in heretic rust spell. + dragomagol: + - admin: gives brainwash victims a hud icon diff --git a/html/changelogs/archive/2021-09.yml b/html/changelogs/archive/2021-09.yml index 8c766bb83ca56..526ef9b04cc73 100644 --- a/html/changelogs/archive/2021-09.yml +++ b/html/changelogs/archive/2021-09.yml @@ -4,6 +4,23 @@ speaks at the beginning of a shift, with a few rare exceptions. - code_imp: Changed the Neo-Russkya and the Yangyu's typepaths to reflect their actual name. + AlinaStarkova: + - bugfix: Maint areas have been cleaned up to properly cover maint, minor tiles + and airlocks which had space areas were fixed to have an actual maint area + ArcaneMusic: + - bugfix: Meat steaks now have protein as expected. + Ghommie: + - bugfix: fixes people catching fire when using jump or rocket boots to leap over + a gap of lava. + - refactor: refactored lava burn and weather immunities code. + - bugfix: Fixed the anti-drop implant not removing the nodrop trait on held items + if they're somehow dropped. + - bugfix: fixes wormhole jaunter portals floating in space. + - bugfix: balloon alerts no longer become transparent, scale up/down or get colored + alongside their holder. + - bugfix: Hostile mobs will always face their targets when shooting. + - spellcheck: Corrected a possessive case in the text of the ancient note found + in the ice library ruin. Nari Harimoto: - bugfix: Nanotrasen expert roboticists have found an error in cyborg programming which allows them to interact with things farther than they are supposed to. @@ -12,29 +29,962 @@ checks for range such. and hotkeys are also now respected with can_interact() - bugfix: the emitter area around the SM chamber now has APCs, so no more infinate power for the thermomachines and other equipment - SkyratBot: - - spellcheck: Corrected a possessive case in the text of the ancient note found - in the ice library ruin. - - bugfix: trash cannons now accept any oxygen tank, not just red ones - - admin: gives brainwash victims a hud icon - - bugfix: fixes wormhole jaunter portals floating in space. - - bugfix: Meat steaks now have protein as expected. + Sealed101: + - bugfix: 'Tramstation: Restored the missing law office stamp. Hail bureaucracy!' + - bugfix: 'Tramstation: Replaced the Core AI module in RD''s office with an AI Core + circuitboard. You can actually build a new AI with this!' + - bugfix: 'Tramstation: RnD now comes with three Experi-scanners. You no longer + have an excuse for not scanning those toilets.' + - bugfix: 'Tramstation: Fixed a non-functional shutters button in left-side tram + underpass.' + - rscadd: 'Tramstation: Book manuals have been shipped to Robotics and Medbay Treatment + Center.' + SpaceDragon00: - admin: Admins can click a category in the banning panel to toggle all checkboxes within that category - - bugfix: Fixed the anti-drop implant not removing the nodrop trait on held items - if they're somehow dropped. - - bugfix: Female uniforms now update color correctly. - - code_imp: Female clothing generation now takes greyscale_colors as an arg, which - is null by default if the clothing item doesn't use GAGS. - - bugfix: Fix staff of lava not terraforming lava properly - - bugfix: Hardcore random traitors now get their hardcore random points for greentexting. - - spellcheck: Fix typo in Sparkler description + esainane: - spellcheck: Fix grammar when attacked by an unknown assailant + - spellcheck: Fix typo in Sparkler description + timothymtorres: + - bugfix: Fix staff of lava not terraforming lava properly + tralezab: - bugfix: fixes a broken antag panel that rarely showed up - - bugfix: balloon alerts no longer become transparent, scale up/down or get colored - alongside their holder. + - bugfix: trash cannons now accept any oxygen tank, not just red ones - bugfix: Any instance where you'd see "illusion" as a school of magic is now "translocation". the illusion school has been dead for awhile now! - - bugfix: Hostile mobs will always face their targets when shooting. - YakumoChen: - - balance: Lowered the Brainwash Disk back to 5 TC +2021-09-02: + ArcaneDefence: + - bugfix: Plasmamen that have all of their limbs replaced with non-plasma alternatives + will not autoignite in flammable environments. + - bugfix: Moths have finally figured out how to finish eating clothes again, rather + than infinitely eating a singular sock. + GoblinBackwards: + - bugfix: Doors, reinforced windows, lockers, mass spectrometers and lockers can + now be attacked with right click + Timberpoes: + - bugfix: Fixes a logic error in ID cards which could cause their accesses to be + unintentionally overwritten. + - bugfix: Fix oversight allowing players to spam observers with notifications for + ghost roles. + magatsuchi: + - spellcheck: fixed a single typo + tralezab: + - spellcheck: going postal now uses the correct ui theme and isn't confused with + tiger cooperative +2021-09-03: + ArcaneDefence: + - bugfix: Opening a toilet's cistern will no longer strike the toilet with the crowbar. + BraveMole: + - bugfix: Fix dir delay when riding something and turning + CRITAWAKETS: + - rscadd: Added in a new sock type, Thigh-high and Knee-high ace socks. + - bugfix: Bee socks are now properly ordered in the code. + Fikou: + - bugfix: fixed non-combat mechs doing 0 damage + Fikou, PositiveEntropy: + - expansion: adds a gun circuit shell + - qol: to string circuit component should now see everything in normal view range + Ghilker: + - qol: RPD defaul pipe color is now green, grey has been renamed to omni and the + two colors are moved to the first and last places of the RPD ui + Ghommie: + - bugfix: Using a soulstone on a construct shell no longer destroys it and the shade + if no option for the construct mob type is taken. + - bugfix: Fixed the Bloodcrawl spell not ejecting users if somehow lost. + JohnFulpWillard: + - bugfix: traitors now get objectives again. + - qol: Cayenne can once again strip people. + - bugfix: Cayenne no longer deletes the nuke disk when putting it back down. + Krysonism: + - bugfix: fixed a few small sprites issues with the lobby menu. + TiviPlus: + - bugfix: Mechs with no damage will no longer punch + - bugfix: Fix atv covers not appearing + Watermelon914: + - bugfix: Fixed scanner gates not functioning when anchored and also fixed their + examine text not saying they need to be anchored. + esainane: + - bugfix: Vent and scrubber names once again contain their unique ID tags + - bugfix: When something is disconnected from a smart pipe, the smart pipe now immediately + frees up connectivity in that direction for other pipes or components to use. + maxymax13: + - imageadd: resprited pens and paper bins + - imageadd: four color pen now has a sprite +2021-09-04: + Ghommie: + - bugfix: bees, hivelord, its brood and legion skulls no longer use the MOUSE_OPACITY_OPAQUE + setting that makes the invisible portions of their icons count toward mouse + clicks, which can get in the way of players trying to click stuff below their + layer. Instead, to be easier to click on, they use a component that gives them + a near-invisible underlay. + - bugfix: Fixed the protect objective always failing. + TiviPlus: + - bugfix: patched mechs being slow randomly after phasing + Watermelon914: + - refactor: Refactored how components are triggered and how ports can now be ordered. + aaaa1023: + - bugfix: Mice no longer become invisible when splatted by a mousetrap. +2021-09-05: + Ghommie: + - code_imp: Replaced the MATERIAL_NO_EFFECTS material flag with MATERIAL_EFFECTS. + - bugfix: No more gazillions of atoms having the beauty element. + - bugfix: Fixed mindshield implants not retroactively working against slime or mansus + links. + - bugfix: Fixed stargazers that were either mindshielded, dead or protected against + psych magick by the time they became what they are not receiving the slime link + speech ability. + - bugfix: Stargazers will no permanently longer lose their slime link speech ability + upon death. + - bugfix: Fixed a regression that removed easy access to milk cartons from skeleton + pirates. + GoldenAlpharex: + - qol: The pAI signaler is now a proper internal signaler and will feel much easier + to use. + - bugfix: Fixed the pAI Host Scan being unable to work from within a PDA or anywhere + that wasn't your hands or your pockets. + - spellcheck: Fixed typoes in the pAI interface related to signaler being written + "signaller" + - code_imp: Improved the pAI code, mostly around the softwares. + MrStonedOne: + - bugfix: Discord new round notifications will no longer come shortly before the + round starts. You should now have enough time to actually ready up before round + start. + Nari Harimoto: + - bugfix: Emergency Access can no longer be spammed to cause sound and text pain + - bugfix: you can no longer print from a protolathe at a distance, and the operating + computer tgui will grey out if you walk away again + - bugfix: Admins can now use their godly powers of AdminGhostAI to interact with + every machine again + Sealed101: + - bugfix: Detective vests can store detective's (and nukeops agent) holsters. + Timberpoes: + - bugfix: Maint sect night vision eyes trait now correctly make your eyes show as + glowing an unnatural red when examined instead of doing nothing. + - qol: Tweaks the logic for the cultist glowy red eye trait, allowing admins to + add this to players to make them appear as if they were cultists when examined, + without actually forcing them to make that person a full blown cultist. The + cultist glowy red eye message has been modified as a result, and now examines + as "... glowing with an unnatural red aura!" + aaaa1023: + - qol: Defib mounts are now removed from the wall by right clicking with a wrench + while not on combat mode. + - bugfix: You will no longer smack defib mounts when removing them from the wall. + tralezab: + - rscdel: You can no longer store dice in pill bottles and pills in dice bags. + - bugfix: fixes getting scared of dice bags if you have a medical phobia. +2021-09-06: + ArcaneDefence: + - balance: Projectiles fired by the watchers on lavaland will now deal damage and + apply a short slowdown to carbons. + EOBGames: + - balance: Ethereals can taste again. + Fikou: + - admin: ticket panel is wider, resolve button should now stay on the same line + Ghilker: + - qol: better hfr ui + - bugfix: rclick on gasmasks removes filters + Ghommie: + - expansion: Space pirates now speak Piratespeak. + - bugfix: The transparent area of the image used by imaginary friend mobs should + no longer catch clicks. + - spellcheck: Rectifies the name and description of the cryostylane inverse chem. + Imaginos16: + - imageadd: Improves the Display Case sprite, giving it a fresh new 3/4ths perspective! + Improvedname: + - rscadd: You can now easels with 5 wood + - rscadd: RD/Roboticists/Cmo/Doctors can now buy a syndi brand MMi from their uplink + for 2 tc + - bugfix: Gibbers now produce 3 pieces of meat at tier 1 again + Melbert: + - bugfix: Some invisible chaplain weapons are now visible again + - bugfix: Durathread, Jupiter Cups, Fairy Grass, and a few other plants can no longer + hard species mutate into themselves. + Ryll/Shaps: + - qol: Most of the byond donator ghosts that don't drastically change the ghost + shape can now have hair and accessories like the plain white ghosts + Sealed101: + - bugfix: Better tools now deconstruct blast doors and shutters quicker like they + actually should. Each deconstruction step now provides a message upon completion + as well as uses the tool's sounds! + Seris02: + - bugfix: fixed fake artefacts so they look real + Timberpoes: + - admin: Added a new smite for admins that allows them to give any mob a permanent + imaginary friend of the admin's choosing, including additional customisation + for the looks allowing the imaginary friend to take on the appearance of the + player inserted into it. + Wallem: + - rscadd: You can now pour ants back onto the ground, with the more ants you pour + leading to more damage! + - balance: Ants now do more damage, however they require more sugar in order to + breed. + - imageadd: The ant decal now has a couple shiny new sprites! + timothymtorres: + - bugfix: Fixed xenos will now take damage while in crit state + tralezab: + - bugfix: fixed traitors randomly spawning incredibly bugged. +2021-09-07: + AlinaStarkova: + - expansion: You can now set an Airlocks name and cycle ID in the RCD airlock settings + menu, or by clicking on an airlock control board and making an airlock manually, + this allows you to make airlocks that can cycle with each other. examine an + airlock to see what, if any, ID they are set to cycle on (linear 1x3 airlocks + to space currently do not use cycleIDs) + Ghilker: + - expansion: HFR - different fuel mixes will have different meltdowns (higher the + effort, bigger and badder the result) + Nari Harimoto: + - qol: Disposals mapped into every map have been redone from the ground up to be + fully functional and usable + - bugfix: All of Disposals now works, no infinate loops, no random pipes shooting + into a room, no sections inaccessible due to a wrong junction + QuarianCommando: + - expansion: Added five new table variants - Plasmaglass, Reinforced Plasmaglass, + Reinforced Glass, Plastitanium Glass, and Titaniumglass. + - bugfix: Attempting to create a table with the aforementioned materials will no + longer result in a normal metal table. + Ryll/Shaps: + - bugfix: Disposal outlets no longer constantly shoot you out at an incredibly dangerous + speed, and no longer deal a base 35 damage + guaranteed dislocation/likely hairline + fracture when you hit a wall or other person. Instead, they're back to the old + 10 brute damage they were at last year, though you can still multitool/emag + them to make them shoot out things faster.... + SpaceDragon00: + - bugfix: Firelance can no longer be used when out of battery + Watermelon914: + - expansion: Adds instant circuit components that execute instantly and are colour-coded + orange to be used in handling events. Adds an airlock access event to determine + who is able to open a door. + Y0SH1M4S73R: + - bugfix: Admins will no longer receive erroneous SDQL spell parse errors when loading + a json file that contains projectile var overrides or touch attack var overrides + tralezab: + - rscadd: Pig Latin mutation +2021-09-08: + CodeMonkey: + - bugfix: Robot tourists now stop attacking you after they show you who's boss. + Colovorat: + - expansion: You can place hats on plasmaman helmets! + Couls: + - admin: individual logging now displays things that happened to the individual + again + ExcessiveUseOfCobblestone: + - admin: you can now customize what udders produce using `reagent_produced_typepath` + or by using the `custom_milk_reagent` argument when adding the component + Fikou: + - admin: individual logging is now visible even with client logged out + Ghilker: + - qol: HFR moderator injection and fuel injection are now controlled separately + - qol: 'HFR : now you can choose multiple gases to filter from the moderators instead + of just one and also the rate of filtering and you can filter even at power + level 6. The rate is tied to the numbers of gases, so if you scrub at 200 moles/tick, + and you have 5 gases selected, you''ll be actually filtering at 40 moles/tick + so be aware.' + Mickyan: + - qol: Double examining someone will show their age, provided their face is visible + Nari Harimoto: + - bugfix: Slime console can now use its hotkey to scan slimes and drop/pickup monkies + TemporalOroboros: + - bugfix: Jack-o-lantern helmets now glow in the dark when they are worn. + Watermelon914: + - balance: Disables wrenching on money bot and scannter gate shells when they are + locked. + aaaa1023: + - rscadd: Penthrite now has Balloon alerts for when it first starts processing and + when it finishes processing. + tralezab: + - refactor: refactored some behavior in pride hammer and carp'sie plushie, you may + notice a few more examines and error messages for fail cases but otherwise it's + all the same +2021-09-09: + Ghommie: + - bugfix: Fixed the chat messages for stepping on objects with the caltrop component. + No more "You step on the floor!". + Nari Harimoto: + - bugfix: machines can be dragged with CtrlClick again + Sealed101: + - bugfix: RnD discount experiments now reduce the proper amount of points needed + instead of gradually growing into a 100% free tech node. + - bugfix: Basic Cytology Scan Experiments no longer ask for Unknown fluids instead + of mice. + TiviPlus: + - admin: /area/var/static_lighting proper varedit support + esainane: + - bugfix: When reprogramming a smart pipe to permit more directions, the smart pipe + will now immediately connect in any newly allowed direction, rather than only + connecting when a component is newly placed. + - bugfix: The RPD now correctly reprograms smart pipes to more restrictive states. + tralezab: + - rscadd: You now store some events as mini stories in your head! + - rscadd: You can engrave said memories onto walls with a chisel! +2021-09-10: + Ghommie: + - refactor: Refactored batons and stunbatons code. Stunbatons are now a subtype + of batons. + - code_imp: Removed some batons copypasta. All batons share the same anti-dual wielding + abuse code now. Replaced some old anchored checks for teleprods with move_resist + ones. + - bugfix: Fixed clumsy checks for teleprods stunning the user twice. + - bugfix: Fixed teleprods not teleporting living mobs that aren't xenos or humans. + - balance: TRAIT_STUNRESISTANCE now affects all batons and not just stun batons. + - bugfix: Fixed a money generation exploit with the roulette machine. + ORCACommander: + - bugfix: fixed as slew of failed to validate config setting errors + - rscdel: Removed deprecated config flags + - server: game_options.txt has been updated + esainane: + - bugfix: The tgui color helper now properly handles partially transparent values. + stylemistake: + - refactor: Performance of core tgui components was improved (Button, Icon, Flex, + Stack). UI should feel a tiny bit faster. + timothymtorres: + - bugfix: Fixed wormhole jaunter to trigger when falling into a chasm + - bugfix: Fixed wormhole jaunter to be affected by EMP +2021-09-11: + ArcaneDefence: + - bugfix: Full tile windows that have become opaque from being painted a dark color + will now lose their opacity when repainted with a light enough color + Gamer025: + - bugfix: Crafting stackable items while already holding an existing stack of them + no longer causes runtimes + Ghommie: + - bugfix: Fixed a small irregularity in the outline glow of the `p` of the character + setup button when highligthed or pressed + Guillaume Prata: + - qol: You can now use the shock touch mutation as a ghetto alternative for revival + surgery. Just like stun batons! + - qol: The analyzer was renamed to gas analyzer and it can be printed at the Engineering/Science + protolathes now. + Sealed101: + - bugfix: Fixes screwdrivers not being recycle-friendly in the autolathe. + - qol: Moves screwdrivering an autolathe's maintenance panel open to right click. + - bugfix: Fixes being able to feed the autolathe when its maintenance panel is open. + carrotattacker, Sampslig: + - rscadd: Adds the juice, a drink that lets you see bluespace rifts and travel through + them + esainane: + - bugfix: Round setup hints and circuit board descriptions that mention production + of research points through power generation no longer appear. This functionality + was removed a long time ago. + timothymtorres: + - expansion: Supernatural phobia now includes more wizard objects, spooky mobs, + and haunted objects. + - expansion: Clown phobia now includes bananium objects and honk related simple + mobs. + - expansion: Phobias can be triggered from related stamps, toys, statues, and megaphones. + tralezab: + - qol: TGUI-ifies apprentice contracts. Yummy! + - bugfix: soul shards now properly remove antag when exorcised +2021-09-12: + ATHATH: + - bugfix: Dreaming is now less rare. + CodeMonkey: + - bugfix: Fixes parallax animations + Fikou: + - admin: adds infinity to vv classes + Mothblocks: + - bugfix: The R&D console has been given back its tooltips + - bugfix: Fixed RPD arrows, strip menu eyes, etc not being styled properly. + Nari Harimoto: + - bugfix: you no longer hit space heaters when wrenching or screwdrivering them + dragomagol: + - qol: removed reinforced walls under grilles in space on Meta and Delta + esainane: + - bugfix: The HFR no longer yeets all iron content given scraps of Oxygen. + - bugfix: The HFR now burns Oxygen proportionally to the amount of iron content + removed when appropriate. + - bugfix: The HFR using Oxygen to mitigate iron content buildup now properly respects + delta time. + - qol: The HFR interface now lists recipes in a more sensible order. This is sorted + by maximum temperature, which also roughly approximates difficulty and desirability. + - bugfix: The HFR interface now lets you toggle waste removal at power level 6, + rather than merely having it permitted in the backend. +2021-09-13: + Fikou: + - bugfix: server restarting stuff uses alert instead of tgui alert + kopoba: + - spellcheck: Nanotrasen recount blood packs in cargo order now its match reality +2021-09-14: + Ghilker: + - spellcheck: fixed airlocks id from entrence to entrance + Nari Harimoto: + - bugfix: kilostation now has an unlocked mix chamber air alarm, 3 cores in the + launch room, the telescreen can see the test site, and a fancy launch controller + - bugfix: icebox disposals no longer spits trash on the mailroom floor +2021-09-15: + 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. +2021-09-16: + AMonkeyThatCodes: + - admin: Admin only menus now have a new SVG background + ATHATH: + - bugfix: The negative moodlet from being held at gunpoint will no longer last indefinitely + under certain conditions. + AccountName5: + - balance: Temperature pump power consumption no longer increases exponentially. + Removes maximum operational temperature as it is now obsolete. + - bugfix: Fixed temperature pump exploit. It should no longer treat output as having + a much lower heat capacity than it actually has. + ArcaneDefence: + - bugfix: Magmawing watchers do not apply a slowdown any more. + Burgerman, tralezab: + - bugfix: You can now see the nuke code in your memories + Burgermancoding: + - expansion: Adds plates to the autolathe + Couls: + - bugfix: restored lighting to areas that were supposed to have it + Fikou: + - refactor: turns stickmen into basic mobs + - balance: wizard paper robe now makes stickmen hostile to things that arent stickmen + and arent you + - bugfix: observe button now works even if your tgui doesnt + FlamingLily: + - bugfix: Narsie no longer stops the shuttle leaving from beyond the eldritch grave. + - bugfix: RPDs now have four different directions to choose from once again + - expansion: You can now feel pain when having surgery done on you while you're + conscious. Oh god. + Gamer025: + - bugfix: RCDs end their attack chain early now + Ghommie: + - admin: Fixed the Everyone Is A Traitor admin button not affecting latejoins. + - balance: Lowered the cost of the obsessed midround ruleset from 10 to 3. + Guillaume Prata: + - bugfix: Removes some of the odd items that didn't have an icon from the Janitor's + winter coat suit store and fixes Security's ones being unable to hold the base + items like internals. + - qol: You can now toggle a space heater on/off with right click. + JohnFulpWillard: + - spellcheck: Being shoved into a disposal unit tells you who shoved you in, rather + than saying you shoved yourself. + KRVH: + - spellcheck: Removed the extra 's' in the food/drug eating verb. + Mooshimi: + - admin: admins are now alerted when miasma, freon, and co2 canisters are opened, + and are informed of the contents of canisters containing dangerous gases in + general, not just the spooky gas on its own. + - code_imp: added overall logging for all canisters opened + - balance: lowered disco ball's max volume + Nari Harimoto: + - bugfix: the aux base console now wont block an empty tile + SishTis: + - rscadd: If a human mob speaks with a language their tongue counts as native one + (like draconic for forked tongue), their speech will sound normally. + TemporalOroboros: + - balance: Tank explosions (the kind used by TTVs and singlecaps) now take tank + volume into account as well as scale faster at low pressures and much, much + slower at high pressures. + - balance: The research doppler array in toxins now grants more points at lower + explosion ranges. The maximum cash generation is practically unchanged though. + - balance: The blastcannon has experienced negligible net change to its range given + bog-standard TTVs. + TheSmallBlue: + - bugfix: pressing the close button while entering a mob as a ghost will no longer + force you to become that mob. + - bugfix: you can no longer ghost and re-enter posibrains indefinitely. + Timberpoes: + - bugfix: Attacking something after you've deactivated the Chameleon mutation or + changeling Chameleon Skin power should no longer turn you partially transparent. + - bugfix: Fixed an issue with ping display that could cause display and chat errors + on exceptionally long shifts. + - balance: The Odysseus no longer fires magical syringes that only react their contents + when the target is hit. It now fires syringes that react as soon as your fire + your Ody's syringe gun. You have been warned. + TiviPlus: + - bugfix: Fix space lighting with lattices + Wallem: + - bugfix: Flyswatter can now swat ants + esainane: + - bugfix: The HFR will now once again use warning colors on the iron content indicator + when dangerous levels of iron content are present. + - qol: When configuring smart pipes, the RPD will now only spark if the configuration + actually changed, and the RPD now provides feedback if configuration couldn't + change. + - bugfix: The HFR interface now uses correct units, and avoids references to tickrate. + - bugfix: The HFR no longer rapidly absorbs all available fuel from the fuel port + at rates far exceeding the fuel injection rate. + - bugfix: You can no longer leave HFR moderator injection uninteractably on with + cooling disabled. + - spellcheck: Fix truely -> truly in a tip of the round + lyricalpaws: + - qol: Adds a new mention to the epinephrine pens about allergies + oranges: + - rscadd: Added french kissing to the game + sqnztb: + - bugfix: Fluid ducts now properly start as "omni" instead of "grey." + - bugfix: fixes a bad icon state for filled mid_joiners + zxaber: + - balance: 'The cyborg emergency reboot module is now reusable. sound: The cyborg + emergency reboot module will now make a different sound when rebooting AI shells + or borgs without a ghost.' +2021-09-17: + JohnFulpWillard: + - bugfix: Malf AI's who shunt onto an APC can once again be tracked by the nuke + disk pinpointer. + Watermelon914: + - admin: Adds the signal handler circuit component. + - qol: Big dropdowns on the integrated circuit ui will now expand when opened. + - bugfix: Fixed any ports returning a string if set to the value of 0. + - admin: Admins can now save custom shells from integrated circuits. + Zytolg: + - bugfix: Removes the spare stool from the Icebox Theater. + ninjanomnom: + - bugfix: Shamebrero and maybe some other greyscale icons flashing have been fixed +2021-09-18: + AccountName5: + - admin: Revenant emag now logs correctly. + - bugfix: 'Roulette: You no longer win when betting on even and rolling 0.' + Arkatos: + - bugfix: Station alert console will now always show a correct icon when an alert + is added or cleared. + - bugfix: Station alert console and Canary application icons will no longer get + stuck in an alert mode forever. + Ghommie: + - bugfix: Fixed betting on singles never paying out if the chosen number is 0. + Guillaume Prata: + - qol: Engineering, Atmos and the CE's tablets come preinstalled with Canary (Alarm + monitor) now. + JohnFulpWillard: + - qol: Clown operatives have been split from Nuclear operatives in the antagonist + preferences menu. + - qol: The nukie preference icon's background nukies no longer overlap with the + main nukie, and a nuke has been added. + - bugfix: Agent IDs and other similar Chameleon gear can no longer be used/forged + while you have your hand blocked and/or are in critical condition. + LemonInTheDark: + - admin: Putting pdas/paper up against cameras is now logged. Not what is actually + written, I'm too scared of people injecting war and peace into the game logs + section of a log panel, but you'll be able to tell em off for spamming the poor + ai with messages + Melbert: + - rscadd: Icebox Chemistry Lab is now multi-z'd, with maintenance changes to match. + - bugfix: fixed a maintenance door in the icebox HFR room that had the wrong access + / name + Mooshimi: + - bugfix: GODMODE dummies can no longer be deafened by flashbangs + - rscadd: added disposals blast door at the end of tram disposals + Pepsilawn: + - admin: Mobs being forced to say things through ingame sources or admin magic will + now show up correctly in logs if whispered. + Sealed101: + - bugfix: Liquid Electricity blood packs in blood freezers now have proper labeling. + - bugfix: Donating Ethereal blood to a new bag now also properly labels it. + - qol: Balloon message upon labeling your blood pack with a pen for more clarity + Seris02: + - bugfix: hopefully fixes pellet clouds only spawning one projectile + Watermelon914: + - admin: Adds admin input requests circuit component + esainane: + - bugfix: The HFR now actually consumes oxygen used to mitigate iron content + tralezab: + - qol: Converted slaughter demons (and their friends) to antagonist panels + - expansion: Adds the Sparring God as a new sect! + - rscadd: MOONICORNS. Watch out for their horn! + - refactor: during a code refactor for cow, they may be SLIGHTLY faster or SLIGHTLY + slower as an accidental result +2021-09-19: + Ghommie: + - balance: 'Replaces the hardcoded material restriction for exporting protolathe + designs to autolathes with a variable that does the same when set FALSE. Energy + bolas, gun part kits, tele shield, enegy bolas and jaws of life currently have + it set FALSE. TL;DR: You can export designs like bluespace cells to autolathes.' + - qol: Added a chat feedback when unable to import designs to autolathes. + Ryll/Shaps: + - balance: Bone wounds in general have been made less obnoxious, especially when + suffered on the legs. Instead of limping every step with that leg, you now have + a chance to limp each step with that leg that scales with the severity of the + wound. Putting your leg in a sling also reduces this limp chance per step, in + addition to reducing the delay the limp adds. + - balance: Skeletons and plasmamen can now apply bone gel directly to fractured + limbs, take no damage from applying this fix, don't need surgical tape, and + recover 4x as fast as fleshy humans do from these improvised fixes. Shine on, + you crazy bone-bags! + - balance: Sticky tape (and especially surgical tape) makef for much more effective + slings than before, with surgical tape even outshining gauze. + - spellcheck: Adjusted some bone wound examine descriptions to be more obvious what + they represent + Timberpoes: + - bugfix: Fixed an oversight/exploit allowing the nuke disk to be removed from station + z-levels. + - admin: Improved the warnings for when stationloving objects such as the nuke disk + get relocated. + - admin: Expanded explosion logging should now make your day a little bit brighter. + Watermelon914: + - qol: Heretic now has an antagonist panel + necromanceranne: + - code_imp: Added an argument for the decomposition component that allows for specifying + what kind of item something decomposes into. + - bugfix: Space ants no longer prey upon chickens and their produce. + - rscadd: Includes some examples from existing food and a new kind of food. Moldy + bread, moldy pizza slices, rotten eggs and moldy dead mice. + tralezab: + - bugfix: fixed one small runtime with sparring sect +2021-09-20: + JohnFulpWillard: + - bugfix: Maintenance sect's adapted eyes will no longer render you permanently + blind despite having them repaired via the darkness. + Kevinz for Citadel, who was ported to TGMC by XSlayer300, now ported to tg by Ryll/Shaps: + - rscadd: Text modifiers have been added! You can now |italicize| _underline_ and + +bold+ your messages. + LemonInTheDark: + - bugfix: Imaginary friends will show up properly again + Mothblocks: + - bugfix: Fixed FPS preference not applying after reconnect. + Pepsiman0: + - bugfix: holosword doesnt have blockchance + TiviPlus: + - bugfix: fixed lighting bug + Watermelon914: + - qol: BCIs only come with 1 bci action component and it is now removable. + - balance: Devastating explosions will now deal damage equivalent to 40% to 75% + of a dragon's max health. + - balance: Carp rifts will no longer be instantly destroyed to devastating explosions. + - qol: Allows you to interrupt delay components and makes it so that it cannot queue + multiple delays. + carshalash: + - bugfix: adjusted arnold palmer recipe to be made with iced tea instead of hot + tea. + esainane: + - code_imp: The tgui ProgressBar can now accept color specifications in hexademical, + rgb/rgba, color-\ class, and base CSS named colors. + - bugfix: Add missing gas color mappings to tgui, and disambiguate old mappings. + Exotic (and mundane) gases in the SM monitor and HFR interfaces have never been + more colorful! + - bugfix: The HFR now actually produces T3 gas at Fusion Level 2, provided you have + enough plasma in the moderator + tralezab: + - bugfix: some small critters that should have been able to fit in the vim but couldn't, + now can +2021-09-21: + Ghommie: + - bugfix: Certain memories should no longer be added to mobs that are unaware of + them (almost always unconsciousness, in some cases blindness and/or deafness). + - bugfix: stun-harm-batoning for stunbatons has been fixed. + GoldenAlpharex: + - bugfix: Flowers now properly display on people with mutant ears, meaning that + they no longer hide within cat ears anymore. + - bugfix: Welding goggles no longer hide in your hair when you pull them up, they + will now properly display above your hair (and mutant body features if you have + any). + - code_imp: Glasses and headwear can now appear over hair and all mutant body features, + meaning that they shouldn't get wrongly hidden anymore. + Guillaume Prata: + - qol: The atmos holofan barrier has a new animation and is slightly transparent + to easily convey that you can move through it. + Krysonism: + - bugfix: Mega arachnids can snare people again. + Mooshimi: + - bugfix: Fixes a missing piece of pipe on Icebox + Timberpoes: + - bugfix: Things pushed via bumping into them now get fingerprints and admin-viewable + hiddenprints added to them. + TiviPlus: + - code_imp: changed some turf changing code remember to report bugs + Zytolg: + - bugfix: The Icebox Mining Basement Levels now utilize power and air provided by + the main station. Some areas were changed to accomplish this. + - bugfix: The Icebox Mining Basement Levels now utilize pipe layers 2 and 4 instead + of the improper 3, and 4. + - bugfix: You can now use the B-2 level of Icebox mining safely and reliably, a + new, quaint layout affords miners easy access to the B-2 exploration Z. + - bugfix: Due to the extent of the alterations on for mining's B-2 level, the B-1 + level has received some upgrades as well. Please look forwards to them. +2021-09-22: + Fikou: + - balance: If you are on Combat Mode, your bullets no longer pass through prone + people + Ghommie: + - bugfix: Fixes evolved xenos deaths being broadcasted in dchat with the old larva + name . + - bugfix: Fixed hitting people accidentally with food if their mouth is covered + or if they can't otherwise consume food. + Guillaume Prata: + - bugfix: Space heater actually turns On with right click now, for reals this time! + Krysonism: + - imageadd: The mega arachnid's flesh snare now has a visible sprite. + Mothblocks: + - server: MOTD is now read sequentially in configuration, allowing for multiple + MOTD files. + - bugfix: Quirks being removed/renamed/rebalanced will no longer break your quirks + menu + MrZoraman: + - spellcheck: Fix the grammar for the message shown when appraising great art. + Watermelon914: + - expansion: Adds the "speaker name" port to the voice activator circuit component + - admin: Admins are no longer able to bypass proccall protections using remote methods + of proccalling. + - bugfix: Ntnets are now type safe again. + - bugfix: Fixed progress bars appearing white. + axietheaxolotl: + - rscadd: Added new CC armour suit, with accompanying helmet and gasmask + - rscadd: Added suit storage that contains this new armour and gasmask. + - expansion: Expands on the old CC armour suit + - imageadd: added some sprites for da drip + necromanceranne: + - bugfix: Fixes pizzas not being able to be processed. + remuluson2: + - rscadd: Electric razors can now be printed at any lathe. Its in medical section. + - rscadd: Electric razor can be bought from the library vendor. + stylemistake: + - bugfix: 'tgui: IE8: Removed "iefix" css classes from Flex elements which resulted + in unusable layout in complex UIs, such as tgui prefs.' + - bugfix: 'tgui: IE8: Fixed button clicks.' +2021-09-23: + EricZilla: + - expansion: Updated old GAGS colors for the PDAs based on user feedback + - imageadd: Updated appearance of the Survival Pen + - expansion: The Quartermaster now starts with a Survival Pen because its flavorful. + Survival Pen has also been updated to use the fancy font, since, its fancy. + Ghilker: + - bugfix: fix scrubbers/vents/injectors/etc from being able to be placed on all + layer on the same turf + Ghommie: + - bugfix: The weapons authorization setting for turrets will now check for weapons + on targets without a chameleon identification card instead of those with either + a chameleon ID or no ID at all. + Krysonism: + - expansion: Leapers, mega arachnids, queen bees, frogs and walking mushrooms can + now be grown using cytology. + - expansion: A neglected fern, once collected on nearby jungle planet, can sometimes + be found in maintenance + LemonInTheDark: + - bugfix: Fixes a rare case of new players being unable to move + MMMiracles: + - rscadd: Tramstation's Security and Service wing has been flipped around. + - rscadd: Tramstation's commissary has been placed above in the central wing beside + the kitchen. + - rscadd: Tramstation's EVA and Gateway rooms have been adjusted. EVA now has one + extra suit storage unit. + - rscadd: Tramstation's maintenance near the Service and Security wing has had reworked + layouts. + - rscadd: Tramstation's asteroid now leaves behind breathable turfs so digging out + a room isn't as tedious. + Mothblocks: + - bugfix: You can now bind Ctrl/Alt again. + - bugfix: Fixed the quirks list in the preferences menu sometimes being empty. + - admin: Added a panel for editing station traits. + TheSmallBlue: + - rscadd: Added the Proximity Pinpointer component, get the coordinates of any entity! + (As long as its in view) + Timberpoes: + - admin: Adds a couple of missing traits relating to cult and bloodshot eyes to + the Modify Traits VV dropdown menu for mobs. + Y0SH1M4S73R: + - admin: The Set Var, Get Var, Proc Call, and Signal Handler admin circuit components + now use a "datum" datatype for their "Target" port. The "datum" datatype can + accept inputs from "atom" ports, and can be safely cast to the "atom" datatype + using the typecasting component when necessary. + - admin: The Get Var component now has an option port used to select the expected + datatype of the obtained var. Similarly, the Proc Call component now has an + option port used to select the expected datatype of the proc's return value. + Both of these options default to "any" + grimm-hollowknight, ported by tralezab with a few overlays: + - imageadd: New borg sprite, from Yogstation! + necromanceranne: + - bugfix: Stickmen flatguns now properly drop out of your hands when picked up, + as intended. +2021-09-25: + Fikou: + - bugfix: The Qualified Doctor skin for medborgs is now not the only option + Iamgoofball: + - bugfix: Fixes the logging text on respawn to correctly say it's respawn instead + of "abandon mob" + Maurukas: + - bugfix: Mapped in atmospheric tanks will now connect to pipenets in the appropriate + direction + - bugfix: Icebox, Runtime, and a number of ruins have had their gas tanks rotated + or repiped + Qustinnus: + - bugfix: Oozes can now eat food again + tralezab: + - bugfix: Fixes malfunctioning bots breaking when they ordered from the bar. Uh... + oops! + - expansion: Admin fully immerse smite now reminds the victim to roleplay correctly +2021-09-26: + Guillaume Prata: + - bugfix: Huge scrubbers will use their own sprite instead of their little brother + one. + Krysonism: + - bugfix: The crate spawner spawns full crates rather than empty ones again. fix:The + neglected fern can actually spawn now + - bugfix: The neglected fern now has the standard 2-4 cell ines per sample rather + than 1. + Melbert: + - bugfix: Telescopic shields are bulky again when extended, and the balloon alerts + are shorter + MetalClone: + - rscadd: Added the handlebar moustache, available in the character setup + - rscadd: Added the handlebar moustache 2, available in the character setup + - imageadd: added both handlebar moustache icons + Mothblocks: + - bugfix: Fixed not being able to disable specific antagonists randomly. + Timberpoes: + - bugfix: Players can once again select AI eyes and blob eyes from the various orbit, + observe and jump menus. + - rscdel: Removed the research note download objective. + - rscadd: Added new master R&D servers to science departmental server rooms. This + server cannot be deconstructed via ordinary methods. This server cannot be rebuilt + if destroyed and cannot be repaired if sabotaged. If destroyed or sabotaged, + research point gain is halved for the rest of the shift. + - rscadd: Added a new antag objective for traitors and lings to steal the hard drive + from a master R&D server. Any other antag can steal it too, for fun. But only + traitors and lings and things that get traitor or ling objectives can get it + as a dedicated steal objective. + - rscadd: Added a new objective for the space ninja and interactions allowing them + to destroy the drive in the master R&D server or set the current research points + back to 0. Both of these interactions alert the AI and are performed by using + the gloves on an appropriate R&D server. + Watermelon914: + - qol: List Literal can now increase/decrease the amount of input ports from within + the UI now. + - qol: Module components can now have their integrated circuit and UI accessed from + within the integrated circuit. To add circuit components, the module still needs + to be disconnected. + - qol: Connecting ports together will feel more responsive especially if you have + bad internet speeds. + - qol: Circuit variables UI has been revamped and made better. You can now drag + and drop the setters and getters for each circuit variable and it will no longer + automatically close when you move the background. It also takes up less of the + screen. + - qol: The integrated circuits UI when initially opened will now be bigger. + - qol: You can now click to connect ports again + necromanceranne: + - admin: Meteor guns do damage once again. + tralezab: + - rscadd: Hauntium can now be worn by the undead! +2021-09-27: + CRITAWAKETS: + - bugfix: Gets rid of the placeholder alien bed and replaces its appearance in Snowdin + with the proper alien bed. + JohnFulpWillard: + - bugfix: Traitors who aren't given codewords will no longer notice them when said + or have them in their antag menu. + Mothblocks: + - server: 'Added a new word filter configuration: word_filter.toml, which can specify + *why* words are banned.' + - bugfix: Emotes are now properly filtered. + - qol: For players, you will now see which word you said was filtered. + PositiveEntropy: + - imageadd: All folders are now resprited! + Ryll/Shaps: + - rscadd: Added a new achievement for cultists who like to mess with NT's shuttle + corps, "WHAT JUST HAPPENED". + Sheits: + - imageadd: resprites the smoke, forcewall, lightning and blind spells + Superlagg: + - qol: Paper bins now can directly insert their contents into computers. + - qol: Greatly reduced click cooldown on paper bins. + - qol: Paper bins can now pick up papers by clicking on them. + remove32: + - admin: now logging when you update available jobs! +2021-09-28: + Fikou: + - rscadd: Secret Gateways can now be a thing enabled by config. They are not on + the repository, instead, loaded from a config folder. + - rscadd: Adds the secret and anti-phasing z level traits used by Secret Gateways, + secret prevents observers from looking at the z level in any way other than + observing through another player's eyes + - admin: admin loaded away missions can be secret as well + Ghilker: + - bugfix: fix gases not having an overlay + Ghommie: + - qol: You can now use backslashes to escape say text modifiers (e.g. a\\+b\\+c + = d will be outputted as a+b+c instead of abc with the middle letter b bolded). + - qol: Two new tips of the round, both concerning say"" syntax. + JohnFulpWillard: + - admin: Admins can now cancel out of sending an announcement. + JosephJomama: + - qol: You can now adjust shaft miners' jumpsuits to expose their chest. + - imageadd: New sprites for adjusted shaft miner's jumpsuit. + - spellcheck: The cargo tech jumpskirt now has correct punctuation. + Mothblocks: + - balance: The minimum threat for traitor related rulesets to be considered running + has been lowered to their cost. + Ryll/Shaps: + - admin: You can now ping other admins (or whatever other roles) in asay by using + @theirckey in your message + tralezab: + - rscadd: Hand a monkey an instrument. It'll play a cool song! + - qol: sparring sect now has an info button in the top right of the contract menu +2021-09-29: + Arkatos: + - bugfix: Templates in the Plexagon Access Management app will now show correctly. + CRITAWAKETS: + - bugfix: Auxiliary base construction consoles now work, instead of deleting the + drone before it exists. + Fikou: + - bugfix: secret recipes are now actually secret + - admin: renames enable debug verbs to enable mapping verbs + Krysonism: + - expansion: Added new food, envirochow; it permanently increases the max hp of + animals. + Mooshimi: + - rscadd: shuttle windows can now be deconstructed + Mothblocks: + - bugfix: Fixed the beginning of words being filtered "e.g. lol filtering lollipop" + - admin: Check AI laws will no longer collapse the laws, making them unreadable. + NamelessFairy: + - bugfix: Gets rid of a genturf on icebox underground + Ported by Dragomagol, original PR by monster860: + - rscadd: Locker doors are now animated! + PositiveEntropy: + - imageadd: Adds new colo cup sprites, originally from the lean cup sprite. The + description of the colo cup item is also changed for only a single, mildly rare + variant. + Thunder12345: + - imageadd: CTF armour has a shiny new look + - code_imp: CTF shielded armour has been changed from a hardsuit to a vest to clear + the way for modsuits (coming 2021 by Fikou) + - code_imp: Any item of clothing can now be given an energy shield, not only hardsuits + - bugfix: CTF marksman outfits are now named correctly + Timberpoes: + - bugfix: Contractor drop pods are now actually clickable and you can place your + target into them without having to drag them to the tiny bit of pod where the + rubble overlaps it. + TiviPlus: + - bugfix: fixed some phasing things getting stuck on some objects + - bugfix: fixed changing a turf sometimes making an area dark + Zytolg: + - expansion: Adds the Homestead, Comms Outpost, and Plasma Facility to the Icewastes + Ruins Roster. + - code_imp: Adds area support for the Plasma Facility ruin. + twilightwanderer: + - rscadd: Adding the ability to use a large number of characters in the chat client. + - code_imp: In the chat client code, the standard text checking procedures have + been replaced by special chat text checking procedures. +2021-09-30: + 567Turtle: + - expansion: Filing cabinets can be constructed for 2 iron sheets + Arkatos: + - spellcheck: Fixed a few grammar mistakes in the nullrod radial menu descriptions + and better clarified some block chances of the certain nullrod variants. + - spellcheck: Fixed a misspelling of the word "availability" in the Plexagon HR + Core app description. + Iamgoofball: + - spellcheck: Fixed the Popularity Contest theme having references to Grove Street + Families, a long since removed Gang. + Mooshimi: + - code_imp: vendor code has less spaces and more tabs + Mothblocks: + - bugfix: New photographs taken will now properly save. + PositiveEntropy, Kryson, maxymax13, Salla: + - imageadd: Resprites iron and material chairs into new ones, originally from Yogstation! + TiviPlus: + - qol: grav anomalies now have a pretty effect + - refactor: Rendering has been refactored, remember to report bugs + Zytolg: + - bugfix: Monkies no longer play with the firelock switch in Kilostation Genetics + via the power of uninstallation. + - bugfix: Removes a duplicate table and pipes and cable from the Metastation Eng + Foyer. + carshalash: + - bugfix: thirteen look no longer puts you to sleep + esainane: + - bugfix: The Derelict now has one APC per area. Weird behavior as two APCs fight + for control over the same region should no longer be seen. + vincentiusvin: + - bugfix: fixed holosigns not counting towards the max limit and not being deleted + when clicking the creator. + - bugfix: NanoTrasen 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. diff --git a/html/changelogs/archive/2021-10.yml b/html/changelogs/archive/2021-10.yml index d3d8f59299698..463548c4012be 100644 --- a/html/changelogs/archive/2021-10.yml +++ b/html/changelogs/archive/2021-10.yml @@ -197,6 +197,28 @@ Kush1Push1: - rscadd: Russian players can use unique races text formation (from lizardmen and fly persons tongues) with their language. +2021-10-01: + Mooshimi: + - code_imp: AIs will no longer get the asimov lawset on unique-lawset station trait + rounds + Timberpoes: + - bugfix: Spawners Menu buttons once again work to jump or spawn as ghost roles. + Watermelon914: + - bugfix: Fixed module circuit size not taking up capacity equal to the amount of + circuit components inside of it. +2021-10-02: + Arkatos: + - qol: Vending machines now use their name as a title for their UI. + InvalidArgument3: + - bugfix: durand shield will no longer burn forever or take fire/acid damage from + the environment + - bugfix: burning vehicles can now be extinguished. + - bugfix: you can now properly toggle on/off exosuit modules such as the generators, + repair droid, tesla energy relays, and RCS + JohnFulpWillard: + - spellcheck: The NT IRN app will properly tell you that it cannot be used with + department budget cards, who is this 'budgetorders' fellow anyways? + - bugfix: Oven boards can now be researched with the rest of the kitchen's machinery. MMMiracles: - rscadd: Tramstation's cargo crates now spawn with some maintenance loot at roundstart. - bugfix: Fixed a singular rogue corner decal in Tramstation's cargo @@ -301,6 +323,69 @@ them to make them shoot out things faster.... - admin: "You can now ping other admins (or whatever other roles) in asay by using\ \ @\_theirckey in your message" + Melbert: + - balance: The firebreath Mutation is now a cone of fire, instead of a real fireball. + Mooshimi: + - bugfix: you will no longer spawn behind the arrivals shuttle on kilo or on ice + wastes for icebox, when the stations has the random spawn trait + Mothblocks: + - admin: You can now cancel incoming and outgoing cross comms console messages. + - bugfix: The species list will now scroll properly when there are too many. This + has meant nothing up until this point, but will when Halloween races are enabled + again. + - admin: Added a preference to disable your usual deadmin preferences when you are + spawned in CentCom. This is on by default. + - bugfix: UI with tooltips will now be much faster to create them, such as R&D console + searching or preferences menu tab switching. + Sealed101: + - expansion: 'There is a new type of experiment provided by Nanotrasen: Machinery + scanning!' + Y0SH1M4S73R: + - admin: Circuit components to perform animations and manipulate filters have been + added. These components are the "Begin Animation", "Animation Step", "Add Filter", + "Filter Remover", "Filter Parameter Helper", and "Animation & Filter Bitflag + Helper" components. Refer to their descriptions for more information. +2021-10-03: + Ghilker: + - qol: 'Allow players to build a girder on a turf by r-clicking the turf with a + sheet of iron with enough material in it remove: Removed wall girder building + from iron sheet construction recipe UI' + - qol: added an examine text on iron sheets to inform players about the new method + of building girders + - expansion: Add USB port to the atmos pumps + Hulkamania: + - expansion: You can now proclaim yourself a Mime Fan or a Clown Enjoyer. + InvalidArgument3: + - expansion: 'directional floodlights for exosuits sound: sound effects for switching + exosuit equipment' + JohnFulpWillard: + - bugfix: Midround Nightmares will once again spawn. + KathyRyals: + - bugfix: Fixed the hair dye spray to be tiny, as it was intended. + KittyCatMeowMeow: + - bugfix: Fixes access on Maint airlocks on the tramstation bar + Maurukas: + - bugfix: The Metastation gravity generator is now properly connected to the power + grid again + - bugfix: A large number of doubled power cables have been fixed across on all stations + - bugfix: A large number of broken, disconnected or doubled up atmospherics pipes + have been fixed across all stations + - bugfix: Multiple disconnected vents and scrubbers have been reconnected to the + atmos network on Tram and Meta + - bugfix: A large number of improperly named and networked cameras have been fixed + across all stations + - bugfix: Doubled tiles, decals, disposals, pipes and wires from the great map merge + incident have been removed + Mooshimi: + - spellcheck: was/were grammar fix on items being knocked off + Mothblocks: + - bugfix: Midround wizard is now selectable. + Pickle-Coding: + - bugfix: Reactions will now properly fully react when it has moles to consume. + Instead of the reaction stopping when one of the gasses is lower than reaction + rate, it will instead adjust the reaction rate so that it consumes all of the + gas. + Ryll/Shaps: - balance: Getting hit by the tram and landing on lattice or unplated flooring (on the upper z-level) will now cause you to smash through it and fall to the z-level below at the cost of taking some extra damage. Note that floors with plating @@ -494,6 +579,25 @@ - refactor: Refactor spawner code to make it clean and unison. All of the random spawners now follow the same formatting. - spellcheck: fixed airlocks id from entrence to entrance + esainane: + - bugfix: The Space Hotel ruin's Staff Room and Staff Store now use distinct areas, + and no longer have APCs fighting each other for control. + - code_imp: /area now retains a local reference to the APC in the area, if any + - bugfix: The SM/HFR will now always play harsh accent sounds when they should + tralezab: + - bugfix: spirit holder exorcisms now make sounds + - bugfix: fixes possessed blade not actually being able to be possessed + - refactor: null rod's subtype picking is now an element +2021-10-04: + Ghilker: + - bugfix: fix pod emergency storage exploit + KittyCatMeowMeow: + - bugfix: Added a few cables to Lavaland Mining for charging + Mooshimi: + - code_imp: moved some ai law defines to the proper file + Wayland-Smithy: + - bugfix: Fixed many Tramstation department sign arrows pointing to upload and vault. + esainane: - refactor: Completely restructure HFR main processes, fixing many unusual edge cases when the HFR was unpowered, out of fuel, interacted with other subsystems poorly, etc. @@ -541,680 +645,203 @@ modifier and the gas production modifier. This means the top tier Hypernoblium/Anti-noblium recipe is now worth using, providing a production bonus of 3x rather than a penalty of x0.03. This recipe is still just as hard to operate safely. - - bugfix: Fix dir delay when riding something and turning - - bugfix: fixed fake artefacts so they look real - - bugfix: Discord new round notifications will no longer come shortly before the - round starts. You should now have enough time to actually ready up before round - start. - - admin: Admins should no longer get trolled by URL keys creating clickable links - that look the same as admin PM shortcuts. - - bugfix: Fixes a logic error in ID cards which could cause their accesses to be - unintentionally overwritten. - - bugfix: Quirks being removed/renamed/rebalanced will no longer break your quirks - menu - - admin: Admins can now save custom shells from integrated circuits. - - rscadd: You now store some events as mini stories in your head! - - rscadd: You can engrave said memories onto walls with a chisel! - - bugfix: Using a soulstone on a construct shell no longer destroys it and the shade - if no option for the construct mob type is taken. - - rscadd: Electric razors can now be printed at any lathe. Its in medical section. - - rscadd: Electric razor can be bought from the library vendor. - - bugfix: Fixes pizzas not being able to be processed. - - bugfix: you can now properly toggle on/off exosuit modules such as the generators, - repair droid, tesla energy relays, and RCS - - bugfix: 'Maint sect night vision eyes trait now correctly make your eyes show - as glowing an unnatural red when examined instead of doing nothing. qol: Tweaks - the logic for the cultist glowy red eye trait, allowing admins to add this to - players to make them appear as if they were cultists when examined, without - actually forcing them to make that person a full blown cultist. The cultist - glowy red eye message has been modified as a result, and now examines as "... - glowing with an unnatural red aura!"' - - admin: Expanded explosion logging should now make your day a little bit brighter. - - bugfix: Fixed the beginning of words being filtered "e.g. lol filtering lollipop" - - bugfix: Detective vests can store detective's (and nukeops agent) holsters. - - spellcheck: was/were grammar fix on items being knocked off - - bugfix: The transparent area of the image used by imaginary friend mobs should - no longer catch clicks. - - balance: Lowered the cost of the obsessed midround ruleset from 10 to 3. - - bugfix: The HFR now actually consumes oxygen used to mitigate iron content - - bugfix: Fix oversight allowing players to spam observers with notifications for - ghost roles. - - bugfix: Fixed xenos will now take damage while in crit state - - bugfix: Fixed wormhole jaunter to trigger when falling into a chasm - - bugfix: Fixed wormhole jaunter to be affected by EMP - - admin: Adds admin input requests circuit component - - bugfix: machines no longer duplicate themself and robots interaction is not messed - up anymore - - rscadd: Added in a new sock type, Thigh-high and Knee-high ace socks. - - bugfix: Bee socks are now properly ordered in the code. - - rscadd: Hauntium can now be worn by the undead! - - bugfix: Mechs with no damage will no longer punch - - bugfix: The Qualified Doctor skin for medborgs is now not the only option - - admin: 'Adds the signal handler circuit component. qol: Big dropdowns on the integrated - circuit ui will now expand when opened.' - - bugfix: Fixed any ports returning a string if set to the value of 0. - - bugfix: fixed lighting bug - - bugfix: Fixes malfunctioning bots breaking when they ordered from the bar. Uh... - oops! - - bugfix: The Derelict now has one APC per area. Weird behavior as two APCs fight - for control over the same region should no longer be seen. - - bugfix: 'Fixes screwdrivers not being recycle-friendly in the autolathe. qol: - Moves screwdrivering an autolathe''s maintenance panel open to right click.' - - bugfix: Fixes being able to feed the autolathe when its maintenance panel is open. - - bugfix: Fixed the hair dye spray to be tiny, as it was intended. - - rscadd: Pig Latin mutation - - balance: Due to their newfound love for seafood, felinids have developed an immunity - to carpotoxin. - - code_imp: The maximum entries in a bitfield2list has been raised from 16 to 24. - - spellcheck: The NT IRN app will properly tell you that it cannot be used with - department budget cards, who is this 'budgetorders' fellow anyways? - - bugfix: Ntnets are now type safe again. - - bugfix: patched mechs being slow randomly after phasing - - imageadd: Improves the Display Case sprite, giving it a fresh new 3/4ths perspective! - - bugfix: Fixed many Tramstation department sign arrows pointing to upload and vault. - - bugfix: Swarmers-banned ghosts can no longer create Swarmer bodies from the beacon. - - bugfix: Liquid Electricity blood packs in blood freezers now have proper labeling. - - bugfix: 'Donating Ethereal blood to a new bag now also properly labels it. qol: - Balloon message upon labeling your blood pack with a pen for more clarity' - - admin: you can now customize what udders produce using `reagent_produced_typepath` - or by using the `custom_milk_reagent` argument when adding the component - - bugfix: Contractor drop pods are now actually clickable and you can place your - target into them without having to drag them to the tiny bit of pod where the - rubble overlaps it. - - admin: now logging when you update available jobs! - - bugfix: Old photos from persistent photo albums will now no longer be lost. - - bugfix: The HFR interface now lets you toggle waste removal at power level 6, - rather than merely having it permitted in the backend. - - bugfix: Maintenance sect's adapted eyes will no longer render you permanently - blind despite having them repaired via the darkness. - - spellcheck: Fix the grammar for the message shown when appraising great art. - - bugfix: Fixed mindshield implants not retroactively working against slime or mansus - links. - - bugfix: Fixed stargazers that were either mindshielded, dead or protected against - psych magick by the time they became what they are not receiving the slime link - speech ability. - - bugfix: Stargazers will no permanently longer lose their slime link speech ability - upon death. - - bugfix: Full tile windows that have become opaque from being painted a dark color - will now lose their opacity when repainted with a light enough color - - bugfix: server restarting stuff uses alert instead of tgui alert - - bugfix: Gets rid of the placeholder alien bed and replaces its appearance in Snowdin - with the proper alien bed. - - bugfix: Stickmen flatguns now properly drop out of your hands when picked up, - as intended. - - balance: The minimum threat for traitor related rulesets to be considered running - has been lowered to their cost. - - bugfix: Fixed a regression that removed easy access to milk cartons from skeleton - pirates. - - bugfix: Jack-o-lantern helmets now glow in the dark when they are worn. - - bugfix: Admins will no longer receive erroneous SDQL spell parse errors when loading - a json file that contains projectile var overrides or touch attack var overrides - - bugfix: Fixed an issue with ping display that could cause display and chat errors - on exceptionally long shifts. - - code_imp: Added an argument for the decomposition component that allows for specifying - what kind of item something decomposes into. - - bugfix: Space ants no longer prey upon chickens and their produce. - - rscadd: Includes some examples from existing food and a new kind of food. Moldy - bread, moldy pizza slices, rotten eggs and moldy dead mice. - - code_imp: The tgui ProgressBar can now accept color specifications in hexademical, - rgb/rgba, color-\ class, and base CSS named colors. - - bugfix: Add missing gas color mappings to tgui, and disambiguate old mappings. - Exotic (and mundane) gases in the SM monitor and HFR interfaces have never been - more colorful! - - bugfix: 'tgui: IE8: Removed "iefix" css classes from Flex elements which resulted - in unusable layout in complex UIs, such as tgui prefs.' - - bugfix: 'tgui: IE8: Fixed button clicks.' - - 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 - - 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 - of batons. - - code_imp: Removed some batons copypasta. All batons share the same anti-dual wielding - abuse code now. Replaced some old anchored checks for teleprods with move_resist - ones. - - bugfix: Fixed clumsy checks for teleprods stunning the user twice. - - bugfix: Fixed teleprods not teleporting living mobs that aren't xenos or humans. - - balance: TRAIT_STUNRESISTANCE now affects all batons and not just stun batons. - - rscadd: Added the Proximity Pinpointer component, get the coordinates of any entity! - (As long as its in view) - - bugfix: Surgeries that repair organs will once again repair the organ. - - bugfix: fixed some phasing things getting stuck on some objects - - bugfix: Fixed the protect objective always failing. - - bugfix: Fixed hitting people accidentally with food if their mouth is covered - or if they can't otherwise consume food. - - admin: Mobs being forced to say things through ingame sources or admin magic will - now show up correctly in logs if whispered. - - code_imp: AIs will no longer get the asimov lawset on unique-lawset station trait - rounds - - bugfix: durand shield will no longer burn forever or take fire/acid damage from - the environment - - bugfix: secret recipes are now actually secret - - bugfix: Agent IDs and other similar Chameleon gear can no longer be used/forged - while you have your hand blocked and/or are in critical condition. - - bugfix: soul shards now properly remove antag when exorcised - - code_imp: vendor code has less spaces and more tabs - - bugfix: Removes a duplicate table and pipes and cable from the Metastation Eng - Foyer. - - bugfix: fixed changing a turf sometimes making an area dark - - bugfix: Reactions will now properly fully react when it has moles to consume. - Instead of the reaction stopping when one of the gasses is lower than reaction - rate, it will instead adjust the reaction rate so that it consumes all of the - gas. - - bugfix: Moths have finally figured out how to finish eating clothes again, rather - than infinitely eating a singular sock. - - bugfix: Traitors who aren't given codewords will no longer notice them when said - or have them in their antag menu. - - bugfix: restored lighting to areas that were supposed to have it - - bugfix: fix ebow was able to accept pka modkits with 0 cost - - bugfix: Fixes door welding and crowbarring secondary attack calling the primary - attack. - - balance: Projectiles fired by the watchers on lavaland will now deal damage and - apply a short slowdown to carbons. - - server: MOTD is now read sequentially in configuration, allowing for multiple - MOTD files. - - bugfix: shield wall generators in space now start unlocked, previously only usable - by the odd RD or cyborg. - - bugfix: Shamebrero and maybe some other greyscale icons flashing have been fixed - - bugfix: GODMODE dummies can no longer be deafened by flashbangs - - bugfix: Magmawing watchers do not apply a slowdown any more. - - code_imp: Adds area support for the Plasma Facility ruin. - - admin: The Set Var, Get Var, Proc Call, and Signal Handler admin circuit components - now use a "datum" datatype for their "Target" port. The "datum" datatype can - accept inputs from "atom" ports, and can be safely cast to the "atom" datatype - using the typecasting component when necessary. - - admin: The Get Var component now has an option port used to select the expected - datatype of the obtained var. Similarly, the Proc Call component now has an - option port used to select the expected datatype of the proc's return value. - Both of these options default to "any" - - bugfix: Vent and scrubber names once again contain their unique ID tags - - bugfix: Fixed a small irregularity in the outline glow of the `p` of the character - setup button when highligthed or pressed - - rscdel: Removed the research note download objective. - - rscadd: Added new master R&D servers to science departmental server rooms. This - server cannot be deconstructed via ordinary methods. This server cannot be rebuilt - if destroyed and cannot be repaired if sabotaged. If destroyed or sabotaged, - research point gain is halved for the rest of the shift. - - rscadd: Added a new antag objective for traitors and lings to steal the hard drive - from a master R&D server. Any other antag can steal it too, for fun. But only - traitors and lings and things that get traitor or ling objectives can get it - as a dedicated steal objective. - - rscadd: Added a new objective for the space ninja and interactions allowing them - to destroy the drive in the master R&D server or set the current research points - back to 0. Both of these interactions alert the AI and are performed by using - the gloves on an appropriate R&D server. - - bugfix: fixed a few small sprites issues with the lobby menu. - - 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 - 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 - - bugfix: RnD discount experiments now reduce the proper amount of points needed - instead of gradually growing into a 100% free tech node. - - admin: adds infinity to vv classes - - code_imp: moved some ai law defines to the proper file - - bugfix: The HFR no longer yeets all iron content given scraps of Oxygen. - - bugfix: The HFR now burns Oxygen proportionally to the amount of iron content - removed when appropriate. - - bugfix: The HFR using Oxygen to mitigate iron content buildup now properly respects - delta time. - - bugfix: When reprogramming a smart pipe to permit more directions, the smart pipe - will now immediately connect in any newly allowed direction, rather than only - connecting when a component is newly placed. - - bugfix: The RPD now correctly reprograms smart pipes to more restrictive states. - - balance: Disables wrenching on money bot and scannter gate shells when they are - locked. - - spellcheck: Rectifies the name and description of the cryostylane inverse chem. - - bugfix: Malf AI's who shunt onto an APC can once again be tracked by the nuke - disk pinpointer. - - bugfix: Plasmamen that have all of their limbs replaced with non-plasma alternatives - will not autoignite in flammable environments. - - admin: admins are now alerted when miasma, freon, and co2 canisters are opened, - and are informed of the contents of canisters containing dangerous gases in - general, not just the spooky gas on its own. - - code_imp: added overall logging for all canisters opened - - rscadd: Added new CC armour suit, with accompanying helmet and gasmask - - rscadd: 'Added suit storage that contains this new armour and gasmask. expansion: - Expands on the old CC armour suit' - - imageadd: added some sprites for da drip - - bugfix: The species list will now scroll properly when there are too many. This - has meant nothing up until this point, but will when Halloween races are enabled - again. - - bugfix: Doors, reinforced windows, lockers, mass spectrometers and lockers can - now be attacked with right click + - bugfix: The Abandoned Zoo ruin no longer has duplicate copies of an APC, power + cable, and rack on the same tile. + tralezab: + - bugfix: You can now hold people at gunpoint from range! +2021-10-05: + Iamgoofball: + - server: Dynamic now has an extra configuration value, max_threat_level. Defaults + to 100 threat. + Krysonism: - bugfix: Shark biopsy samples are now clean and don't contain a duplicate shark cell line. - - spellcheck: Fix truely -> truly in a tip of the round - - bugfix: fix pod emergency storage exploit - - bugfix: You can now bind Ctrl/Alt again. - - bugfix: you will no longer spawn behind the arrivals shuttle on kilo or on ice - wastes for icebox, when the stations has the random spawn trait - - bugfix: Cayenne no longer deletes the nuke disk when putting it back down. - - bugfix: pressing the close button while entering a mob as a ghost will no longer - force you to become that mob. - - bugfix: you can no longer ghost and re-enter posibrains indefinitely. - - imageadd: 'Updated appearance of the Survival Pen expansion: The Quartermaster - now starts with a Survival Pen because its flavorful. Survival Pen has also - been updated to use the fancy font, since, its fancy.' - - admin: individual logging now displays things that happened to the individual - again - - admin: Putting pdas/paper up against cameras is now logged. Not what is actually - written, I'm too scared of people injecting war and peace into the game logs - section of a log panel, but you'll be able to tell em off for spamming the poor - ai with messages - - bugfix: Fixed the quirks list in the preferences menu sometimes being empty. - - bugfix: The R&D console has been given back its tooltips - - bugfix: Fixed an oversight/exploit allowing the nuke disk to be removed from station - z-levels. - - admin: Improved the warnings for when stationloving objects such as the nuke disk - get relocated. - - bugfix: Players can once again select AI eyes and blob eyes from the various orbit, - observe and jump menus. - - bugfix: Mapped in atmospheric tanks will now connect to pipenets in the appropriate - direction - - bugfix: Icebox, Runtime, and a number of ruins have had their gas tanks rotated - or repiped - - bugfix: Opening a toilet's cistern will no longer strike the toilet with the crowbar. - - rscdel: You can no longer store dice in pill bottles and pills in dice bags. - - bugfix: fixes getting scared of dice bags if you have a medical phobia. - - admin: Meteor guns do damage once again. - - bugfix: observe button now works even if your tgui doesnt - - bugfix: The Metastation gravity generator is now properly connected to the power - grid again - - bugfix: A large number of doubled power cables have been fixed across on all stations - - bugfix: A large number of broken, disconnected or doubled up atmospherics pipes - have been fixed across all stations - - bugfix: Multiple disconnected vents and scrubbers have been reconnected to the - atmos network on Tram and Meta - - bugfix: A large number of improperly named and networked cameras have been fixed - across all stations - - bugfix: Doubled tiles, decals, disposals, pipes and wires from the great map merge - incident have been removed - - bugfix: Oven boards can now be researched with the rest of the kitchen's machinery. - - bugfix: adjusted arnold palmer recipe to be made with iced tea instead of hot - tea. - - rscadd: added disposals blast door at the end of tram disposals - - bugfix: Mega arachnids can snare people again. - - rscadd: Adding the ability to use a large number of characters in the chat client. - - code_imp: In the chat client code, the standard text checking procedures have - been replaced by special chat text checking procedures. - - rscadd: Secret Gateways can now be a thing enabled by config. They are not on - the repository, instead, loaded from a config folder. - - rscadd: Adds the secret and anti-phasing z level traits used by Secret Gateways, - secret prevents observers from looking at the z level in any way other than - observing through another player's eyes - - admin: admin loaded away missions can be secret as well - - bugfix: When something is disconnected from a smart pipe, the smart pipe now immediately - frees up connectivity in that direction for other pipes or components to use. - - bugfix: Fluid ducts now properly start as "omni" instead of "grey." - - spellcheck: Fixed the Popularity Contest theme having references to Grove Street - Families, a long since removed Gang. - - balance: Spiders and space carp (from dragons) will now pull and move dispensers, - such as water and fuel tanks, as well as canisters slower. - - balance: Spiders and space carp (from dragons) can no longer attack stationary - atmospherics equipment, such as pipes or air alarms, as well as APCs. - - bugfix: Better tools now deconstruct blast doors and shutters quicker like they - actually should. Each deconstruction step now provides a message upon completion - as well as uses the tool's sounds! - - refactor: Performance of core tgui components was improved (Button, Icon, Flex, - Stack). UI should feel a tiny bit faster. - - rscadd: shuttle windows can now be deconstructed - - admin: renames enable debug verbs to enable mapping verbs - - admin: individual logging is now visible even with client logged out - - code_imp: /area now retains a local reference to the APC in the area, if any - - bugfix: The weapons authorization setting for turrets will now check for weapons - on targets without a chameleon identification card instead of those with either - a chameleon ID or no ID at all. - - bugfix: The tgui color helper now properly handles partially transparent values. - - bugfix: Things pushed via bumping into them now get fingerprints and admin-viewable - hiddenprints added to them. - - code_imp: Treat DreamMaker warnings as errors in CI - - admin: Added a panel for editing station traits. - - admin: Admins can now cancel out of sending an announcement. - - bugfix: Fixed the chat messages for stepping on objects with the caltrop component. - No more "You step on the floor!". - - bugfix: Crafting stackable items while already holding an existing stack of them - no longer causes runtimes - - bugfix: Traitors that are unable to receive equipment required for specific objectives - will be able to order that equipment from the uplink. Other antagonists that - are unable to receive such equipment can call in a pod containing that equipment, - unless they somehow have an unlocked uplink on their person, in which case they - can order it from the uplink. - - admin: Added a preference to disable your usual deadmin preferences when you are - spawned in CentCom. This is on by default. - - bugfix: Certain memories should no longer be added to mobs that are unaware of - them (almost always unconsciousness, in some cases blindness and/or deafness). - - bugfix: Fixes a rare case of new players being unable to move - - admin: Check AI laws will no longer collapse the laws, making them unreadable. - - bugfix: Fixes the logging text on respawn to correctly say it's respawn instead - of "abandon mob" - - spellcheck: fixed a single typo - - bugfix: fixed traitors randomly spawning incredibly bugged. - - bugfix: RCDs end their attack chain early now - - refactor: Refactored how components are triggered and how ports can now be ordered. - - bugfix: Added a few cables to Lavaland Mining for charging - - bugfix: Midround Nightmares will once again spawn. - - bugfix: rclick on gasmasks removes filters - - bugfix: The HFR now actually produces T3 gas at Fusion Level 2, provided you have - enough plasma in the moderator - - admin: Admins can now give players a popup if they are not responding to tickets. - - admin: /area/var/static_lighting proper varedit support - - admin: ticket panel is wider, resolve button should now stay on the same line - - bugfix: Smart pipes now calculate their direction properly, and construction code - checks direction logic properly. This fixes many problems with atmospherics - construction. - - bugfix: Smart pipe construction now no longer tries to work around irrelevant - pipes which are on completely different layers and do not interact with the - new pipe in any way. - - bugfix: Smart pipes with less than two allowed directions can no longer be built. - The pipe would be invisible, but still interact in weird ways. - - bugfix: 'One tile can no longer have more than one atmospheric component ready - to connect in the same direction and layer. This prevents the scenario where - a temperature pump is placed in a manner which looks like it''s going to connect - to a horizontal bridge pipe, but actually turns the vertical plasma input pipe - behind it into a manifold, ruptures the connected plasma canister, and sets - Toxins on fire. qol: Smart pipes are now much, much smarter. During construction, - if a smart pipe would block placement of a component, it will see if permitted - connectivity can be reconfigured to make room for other components. This includes - negotiation with other smart pipes, preferring to create pipe crossings where - available, or create an opposing corner pipe if not. The RPD can now also reconfigure - allowed connectivity for existing smart pipes manually. Smart pipes can never - be reconfigured to have less than two allowed directions, and active connections - cannot be reconfigured. Automatic reconfiguration will never cause a smart pipe - to permit connectivity that was not previously permitted.' - - bugfix: Multi-layer pipe components can trigger smart pipe negotiation where relevant. - - refactor: Rearranged some atmospherics pipe code. Fewer redundant loops, add and - use documented and centralized helpers for bit manipulation where sensible. - Make bitfield assumptions explicit. - - code_imp: made a small part of the documentation in the area less wrong dear god - my eyes the goggles do nothing - - bugfix: Fixed the Bloodcrawl spell not ejecting users if somehow lost. - Snakebittenn: - - rscadd: Chameleon mutation can now be toggled on and off. - - balance: Chameleon mutation instability raised to 35. - - bugfix: Fixes a minor bug with chameleon mutation and transparency. - Spc-Dragonfruits: - - balance: '"Yangyu" renamed to "Japanese" as its description suggests, for consistency''s - sake.' - - balance: '"Neo-Russkye" renamed to "Pan-Slavic" for RP flavor.' - Superlagg: - - bugfix: breastmilk production no longer makes you fat. - - rscadd: 'A new ''musical'' toy has been added to the LustWish machines! qol: Lustwish - gags can now be customized more than once!' - - refactor: ballgag.dm should now be a lot easier to work with. - TiviPlus: - - bugfix: fixed pollution making all world objects unclickable - - bugfix: fixed rendering not working on poluttion affected areas - Wallem: - - rscadd: You can now pour ants back onto the ground, with the more ants you pour - leading to more damage! - - balance: Ants now do more damage, however they require more sugar in order to - breed. - - imageadd: The ant decal now has a couple shiny new sprites! - - bugfix: Flyswatter can now swat ants - axietheaxolotl: - - imageadd: added ID icons/HUD icons for upcoming department guards - - rscdel: Removed M45A5 Screenshake - - rscadd: added actual locker for BS and added mantles to vendor - - imageadd: added le icon for BS locker - - rscadd: fuck fuck fuck - capsaicinz: - - bugfix: fixes the GPS computer's sprite. - carrotattacker, Sampslig: - - rscadd: Adds the juice, a drink that lets you see bluespace rifts and travel through - them - cheapcents: - - rscadd: Completely changed Icebox's brig. - cowsLUL: - - bugfix: re-added pink tutu to loadouts - dankmemerino147: - - balance: Rebalanced sec webbing vs belt; the webbing still gets the extra two - slots, but the belt can now hold disablers - - spellcheck: peackeeper - faaaay: - - rscadd: Added generic "conversion kits". In the future, these may be used to implement - certain custom items. - fighterslam: - - bugfix: Fixes a misplaced wire in the Cytology lab on the NSS Journey map. - grimm-hollowknight, ported by tralezab with a few overlays: - - imageadd: New borg sprite, from Yogstation! - ihavenoideahowtonamemyaccount: - - rscadd: more halloween costumes options in the loadout - jjpark-kb: - - rscadd: added back handheld scanners for xenoarch - - rscadd: added a handheld recoverer for xenoarch - - rscadd: added clothing relic, if recovered gives ashwalker clothing - - rscadd: added animal relic, which is swab-able, and if recovered gives materials - - rscadd: added 10 new plants (for xenoarch plant relic) - - balance: borers will only output pure versions of the chemicals - - rscadd: added power armor - - rscadd: added power armor upgrades - - rscadd: added the staff of the ashlands, an ashwalker staff that converts turfs - to lava/basalt - - rscadd: added primitive (bone, goliath hide, sinew) tools for surgery and construction - - rscadd: added 5 clothing for ashwalkers - - rscadd: added fishing - - bugfix: removed speed upgrade (power armor) from the techweb - - rscadd: rodstoppers now give you 5 seconds to evacuate the area - - balance: rodstopper is not so destructive - - balance: borers can have multiple focuses - - balance: borers generate evolution points faster - - rscadd: added upgrade cost to examine for power armor upgrades - - balance: half the increase of speed for speed upgrades - - balance: storage upgrade for power armor costs more now - - bugfix: you must be wearing the power armor to get the benefits - - rscdel: removed the speed upgrade from power armor - - rscadd: added primitive centrifuge - - bugfix: you can make clay in sinks now - - bugfix: fixed cortical borer logs - - rscadd: added ceramics and glassblowing - - balance: xenoarch sold items dont have elasticity - - bugfix: 'delta_skyrat: fixes the pipe and wires at arrivals' - - rscadd: you can now examine the forge to see the upgrade count - - rscadd: added hurtsposal (disposals now can hurt you) - - bugfix: added one more in_use = false to the forge - - bugfix: forge gives back goliath hides upon deconstruction - - bugfix: forge actually gives the amount of ore it should have been - lyricalpaws: - - rscadd: Bright Cosmos holocigars - - rscadd: Holocigarettes - nikothedude: - - rscadd: Security HUDs and medical HUDs can now view sec/medical records on examine, - respectively, and can also view general records. - - rscadd: Certain antagonists (such as traitors, heretics, wizards, etc.) are now - able to view exploitables by examining someone. - - bugfix: Exploitables now finally have a way to be accessed. - oranges: - - rscadd: Added french kissing to the game - sheetofseaweed: - - bugfix: brought fishnet socks back - softcerv: - - spellcheck: capitalizes the names of the Temperature and Clotting Medicells. - - balance: Mediguns can now fit within the suit storage of the CMO winter coat and - labcoat along with the medical hardsuit. Medicells can now also fit inside of - medical belts. - sqnztb: - - bugfix: libital, lenturi, and meth work in plumbing machines again. - tf-4: - - imageadd: Resprites glue - thestubborn: - - bugfix: restores stuff we lost in the map reset - - bugfix: sec ushankas now show hair - - bugfix: you can wear the ushanka in the loadout now - - bugfix: stop rolling up your cardigan sleeves you fucks - twilightwanderer: - - bugfix: Restoring the usual Borg tools. -2021-10-07: - GoldenAlpharex: - - bugfix: By default, you will now receive your loadout clothes in your backpack, - instead of a suitcase. - SkyratBot: - - rscdel: The augment painter has been removed from the game. - - rscadd: Spraycans can now change the visual style of robotic augments via right-click. - - bugfix: ice reaction oversight, now freezes at the proper 274k instead of 245k - - bugfix: Kitchen cold rooms which are cold (that is, those on Ice, Meta, and Tram) - now have their air alarms configured to expect this. - - bugfix: fixed dropped arrows being controllable with the bow - - bugfix: The Space Hotel ruin's Staff Room and Staff Store now use distinct areas, - and no longer have APCs fighting each other for control. - - bugfix: The Kilostation Art Closet now provides station sevants with the necessary - art supplies. + Melbert: + - bugfix: Fixes people getting rejected by the panic bunker when they probably shouldn't + have been (if you can read this, it probably doesn't affect you anymore) + Mothblocks: + - bugfix: Old photos from persistent photo albums will now no longer be lost. + Timberpoes: + - bugfix: Captains can sleep tight at night knowing that Disky no longer fears escape + shuttle rides at the end of the shift. The nuke disk will no longer teleport + itself back to the station from the emergency shuttle when the emergency shuttle + departs. + - admin: Admins should no longer get trolled by URL keys creating clickable links + that look the same as admin PM shortcuts. + Zytolg: - bugfix: The new mining base on Icebox will now fully load its surrounding plasma lake area. - - code_imp: Indestructible paper wall support. It's better than the alternative. - - bugfix: Borg lights are now visible again. + - bugfix: The Kilostation Art Closet now provides station sevants with the necessary + art supplies. + esainane: - bugfix: The airlock to MetaStation's Medical Cold Room is now properly named and requires Medbay General access. - capsaicinz: - - rscadd: added odd lizzy plushie. + - bugfix: Kitchen cold rooms which are cold (that is, those on Ice, Meta, and Tram) + now have their air alarms configured to expect this. +2021-10-06: + JohnFulpWillard: + - bugfix: Surgeries that repair organs will once again repair the organ. + - bugfix: Swarmers-banned ghosts can no longer create Swarmer bodies from the beacon. + Zytolg: + - expansion: Remaps the Holding Facility into 2021 Standards + - code_imp: Indestructible paper wall support. It's better than the alternative. + kopoba: + - bugfix: fix ebow was able to accept pka modkits with 0 cost +2021-10-07: + PeterMorrison1: + - bugfix: fixed dropped arrows being controllable with the bow + Watermelon914: + - qol: Refactored tgui list inputs to be a lot more user-friendly. + lovegreenstuff: + - bugfix: ice reaction oversight, now freezes at the proper 274k instead of 245k tralezab code, melbert idea!: - rscadd: There's a new wizard event, RPG titles. Summon the star duke! + zxaber: + - rscdel: The augment painter has been removed from the game. + - rscadd: Spraycans can now change the visual style of robotic augments via right-click. + - bugfix: Borg lights are now visible again. 2021-10-08: + InvalidArgument3: + - bugfix: penetrator rounds will no longer ignore vehicles + JohnFulpWillard: + - qol: Choice beacons now use a TGUI menu Melbert: + - bugfix: The huds for clown and mime fan are back + - bugfix: You can no longer be a simultaneous clown and mime fan, pick a side coward - bugfix: Quirks that once were not compatible are now incompatible again NamelessFairy & Mothblocks: + - expansion: Replaces the ghost mafia button with a minigames button which opens + the new minigames panel. + - qol: CTF is now accessible through the new minigames menu - rscadd: CTF can now be played through the CTF menu, accessible through the minigames menu - SkyratBot: + TiviPlus: + - bugfix: fixed ambient occlusion stacking sometimes + Watermelon914: + - expansion: Adds the dispenser shell, which accepts normal-sized items and lets + you dispense them at any time. + - expansion: Adds the For Each component and the Filter List component. + - refactor: Refactored the circuit list datatype to support composite types (i.e. + entity list, any list, number list), which are lists that can only contain values + of the specified datatype. This also refactors anything that uses the list datatype + to use composite lists. + - qol: NTNet components now use composite lists to send and receive data + - bugfix: Prevented people from infinitely making lists with the list literal component. + tralezab: - bugfix: Fixes catwalks not working at all! - - bugfix: penetrator rounds will no longer ignore vehicles - Tristrian: - - bugfix: BZ Metabolizes drains Changeling's chemicals again. - thestubborn: - - balance: you can no longer instantly weld as any job - - bugfix: oh yeah also a digi cap kilt now + zxaber: + - rscadd: Emagged and Syndicate borgs can now self-detonate. For emagged borgs, + this destroys the MMI, so know what you're signing up for. 2021-10-09: + Burgermancoding: + - qol: you can orbit people who send messages using the gangster cellphone from + families Colovorat: + - expansion: Adds catwalk floor crafting recipe - imageadd: catwalk floor tile object sprite and inhand sprites - Deek-Za: - - bugfix: Decal Painter now paints decals once again - - rscdel: 'Disabled Tail Trauma qol: Less troubling start for tailed individuals.' - GoldenAlpharex: - - bugfix: Quirks will no longer be in a weird state where they reset and you don't - know why anymore. Check your Augments+ tab if that was happening to you, and - remove the augments you don't want. - - bugfix: The Limbs Augmentations And Markings page was relabeled "Augments+" and - has been revamped visually to work better. - - bugfix: You will no longer wake up on the Interlink with your cybernetics looking - wrong because you didn't ensure they were set right properly during your sleep - (in the prefs menu). - - bugfix: The breathing tube is now accessible again in the Augments+ tab. - - bugfix: The 'Other' gender is now no longer afraid of itself and will now properly - render, allowing you to change gender if you'd like. - - code_imp: Quirk balance tallying up is now done outside of the TGUI interface, - allowing us to hook other systems that cost points into it. - - refactor: Refactored the Augmentations panel to actually look decent and support - the usage of quirk points to balance stronger or crippling augments. + DaddyIssues and Grobelon: + - expansion: 'Added 3 new foods: Catburgers, Egg with sausage, and Sausage bread.' + Ghilker: + - balance: Rad collectors are gone, can be only spawned by admins. SM will now generate + power by releasing zaps that will hit tesla coils around it. Roundstart setups + might not be enough for bigger stations and t4 machines later in the round, + recommended to upgrade the powergen. + Ghommie: + - expansion: 'The Mr. Deempisi Portrait plaque has been replaced with a very special + picture frame: A small picture of one out four random things (Mr. Deempisi included) + that can have a photo affixed over it. The photo will persist between rounds + on that specific station until removed of if the frame is destroyed. Each station + gets one, all but one (Kilo is too damn cramped) located in the bar behind the + bartender counter. It''s also more artsy than other picture frames now. spriteadd: + Desouled the picture frame sprites.' + Krysonism: + - qol: The tentacle slap ability button now goes red and displays a cooldown timer + when on cooldown. + - bugfix: Vat beasts now longer lose their ability when someone rides them. + - expansion: Adds carp scales, and carp scale crafting. Melbert: - - bugfix: The huds for clown and mime fan are back - - bugfix: You can no longer be a simultaneous clown and mime fan, pick a side coward - bugfix: Removing invasive spreading from a plant will now actually remove invasive spreading - refactor: Refactored seed / gene deletion, and a bit of gene addition / removal - SkyratBot: - - bugfix: fixed ambient occlusion stacking sometimes - - refactor: 'Refactored the circuit list datatype to support composite types (i.e. - entity list, any list, number list), which are lists that can only contain values - of the specified datatype. This also refactors anything that uses the list datatype - to use composite lists. qol: NTNet components now use composite lists to send - and receive data' - - bugfix: Prevented people from infinitely making lists with the list literal component. - - bugfix: the Driscoll poncho should be centered now + Timberpoes: - bugfix: Observers will no longer see ghost icons representing Maintenance Loot Spawners of Roundstart Past once the round has actually started. + Wallemations: + - expansion: The Goat Plushie has picked up some bad habits, please try not to let + it near any illicit substances for the sake of its rehabilitation. + Watermelon914: + - admin: Admins can now stop animations on an object as well as decide if it starts + parallel or not. + - bugfix: Fixed animating filters in steps not working at all. + - qol: Gave instantly executing ports special datatypes to distinguish what ports + cause instant execution - 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, - this destroys the MMI, so know what you're signing up for. + Zytolg: + - bugfix: Fixes the floating sign in the Tramstation Teleporter + esainane: - code_imp: freon_gas_act is now called freeze_turf. It was only ever used in two places, neither of which involved Freon. - - bugfix: Vat beasts now longer lose their ability when someone rides them. - axietheaxolotl: - - rscadd: Added DeltaTri's donator item. - lyricalpaws: - - bugfix: Plants distill in to their distill reagents properly. + thestubborn: + - bugfix: the Driscoll poncho should be centered now + timothymtorres: + - qol: Adds random statue spawners to secure art exhibits in the library for Meta, + Tram, and Delta. 2021-10-10: Arkatos: - bugfix: Thermomachine design icon in the R&D Console UI will now show properly. Guillaume Prata: - bugfix: Cyborgs can interact with a morgue tray to close it now, instead of needing to interact with the main structure. - SkyratBot: + Krysonism: + - qol: The mega arachnid now has a toggleable self only small sprite. No more hitting + yourself! + Mooshimi: + - qol: status displays can now be wrenched off the wall, and frames can be printed + at the autolathe + PeterMorrison1: + - bugfix: fixed antagonist preference tooltip showing wrong descriptions + Watermelon914: + - bugfix: Fixed variables sometimes just not working. + - bugfix: Fixed the dispenser shell and For Each and Filter components not appearing + in the component printer. + - bugfix: Fixed the changeling antag panel + - bugfix: Fixed the wizard's antag panel. + - admin: Datum input ports can now have atoms and datums uploaded to them. + esainane: + - bugfix: HFR ambience will no longer play intensely when the HFR is out of fuel + - bugfix: SMs meant to be immobile should now be truly immobile. - bugfix: Bluespace anomalies will no longer teleport camera eyes, such as AI eye, Blob Overmind eye, Advanced Camera consoles, or the Xenobiology Slime management console. This is particularly relevant for the Xenobiology advanced slime console, as the eye cannot move outside of, or while outside of, the area the console is in. + - spellcheck: Fixed a typo in the Hostile Statue description. - code_imp: Remove a very useless check from APC code - - bugfix: SMs meant to be immobile should now be truly immobile. - - bugfix: Fixed the dispenser shell and For Each and Filter components not appearing - in the component printer. - - bugfix: HFR ambience will no longer play intensely when the HFR is out of fuel - - bugfix: fixed antagonist preference tooltip showing wrong descriptions - - bugfix: Fixed the changeling antag panel - - bugfix: Fixed the wizard's antag panel. - - bugfix: Fixed variables sometimes just not working. - bugfix: The beams from Emitters, and all hitscan weaponry, now render properly again. + - bugfix: CentCom now has one APC per area. + tralezab: - bugfix: Preferences menu now supports Halloween races - - spellcheck: Fixed a typo in the Hostile Statue description. - SolGov Board of Spacestation Maintenance: - - bugfix: NSS Journey's Botany Backroom is no longer missing a disposal pipe segment - - bugfix: NSS Journey's Toxins Launch Tube is properly aligned (No longer facing - its own wall) - jjpark-kb: - - rscadd: added a fishing master skill chip - - refactor: refactored fishing code - sandshark808: - - bugfix: As a felinid, typing *wag a second time will stop your tail from wagging - as intended. - - bugfix: Security Medic, Security Sergeant, and Corrections Officer now get mail - goodies. - - bugfix: Security Medic, Security Sergeant, and Corrections Officer now have RPG - titles for use in a special event. 2021-10-11: - ForrestWick: - - rscadd: Added snowmobiles to the game and placed them on Icebox's mining area, - security, and the Interdyne icemoon base. - - imageadd: snowmobile sprites have been added alongside the snowmobiles. - Gandalf2k15: - - refactor: Ian is has become is much better - Seris02: - - bugfix: welding rods down to nothing will no longer cause a runtime - - bugfix: fixed the default values not saving for the nc and vr prefs - - bugfix: brushing your own hair no longer causes runtimes - SkyratBot: - - bugfix: Fixes the changeling panel not working at all. - - balance: Rad collectors are gone, can be only spawned by admins. SM will now generate - power by releasing zaps that will hit tesla coils around it. Roundstart setups - might not be enough for bigger stations and t4 machines later in the round, - recommended to upgrade the powergen. + Fikou: + - bugfix: fixes unpowered space ruins actually being powered + - expansion: more secret away mission stuff + Ghommie: + - bugfix: Fixed two issues with paper code. Namely paper text being always colored + black outside of edit mode and signatures showing the current name and not the + real name. + - expansion: Added USB ports to light switches. + Mothblocks: - rscadd: Added back the reset keybindings button. - bugfix: Fixed weird scaling on the buttons in a tabbed list UI (such as "Communications" in the keybindings menu) - - bugfix: The CE's blueprints can now once again show an overlay of the station's - original structural layout! Cleaning up after an explosion is now - well, realistically, - just as frustrating as ever, but it looks nice! - gonenoculer5: - - rscadd: Added the tarot card deck, loincloths, and Smoking Pipe to the loadout. - linnpap: - - bugfix: fixed peacoat and duster sprites so they aren't solid white - - bugfix: makes colorable leather jackets actually able to be colored -2021-10-12: - Deek-Za: - - balance: Sergeant's hat has armor added. - - bugfix: Sergeant's hat is now visible on anthro races. - - bugfix: Added contents to SecMed's office first-aid kits on Icebox - ForrestWick: - - bugfix: Gave cargo ordered snowmobiles the correct path for keys. - SkyratBot: - - bugfix: Basic mobs can once again be vareditted - - bugfix: 'fixes unpowered space ruins actually being powered expansion: more secret - away mission stuff' - - refactor: Refactored monkey AI a bit, noticeable changes should be minimal! + Watermelon914: + - bugfix: Fixed a runtime with the integrated circuit duplicator + - admin: Signal Handler circuit components are no longer limited to 1 registered + object. + - admin: Get variable circuit components can now get GLOB variables + - admin: Animate and Save Shell circuit components will now apply DF_VAR_EDITED + - bugfix: Fixes the changeling panel not working at all. - balance: Bluespace launchpad maximum range decreased from 60 to 40. Traitor launchpad unaffected. - balance: Bluespace launchpads will now give a visual indication of the turf they @@ -1253,6 +880,19 @@ finally ended. Miners should be cautious, as the Lavaland natives might start showing up again. - bugfix: Primal Podpeople have finally managed to exit their cryopods again. + esainane: + - bugfix: The CE's blueprints can now once again show an overlay of the station's + original structural layout! Cleaning up after an explosion is now - well, realistically, + just as frustrating as ever, but it looks nice! + tralezab: + - refactor: Refactored monkey AI a bit, noticeable changes should be minimal! + - qol: toggle random events doesn't uselessly include a message to the user, only + to admins... which the user is. +2021-10-12: + Ghommie: + - bugfix: MMI components can't be no longer attached to modules. This was causing + race conditions with other MMI components present in the circuit (not much of + a good thing). Melbert: - rscdel: Removed the action button for toggling griffin and owl wings, you can still open and close them with alt-click. @@ -1343,7 +983,60 @@ ihavenoideahowtonamemyaccount: - rscadd: even more halloween costumes options in the loadout 2021-10-16: - MMMiracles: + tralezab: + - bugfix: Basic mobs can once again be vareditted +2021-10-13: + Colovorat: + - bugfix: You can no longer extract and transform DNA of species that have no DNA + Fikou: + - bugfix: fixes mode switch actions on storage items being broken + Ghilker: + - qol: lower sound level of the coils, the sound and range is calculated by a function + based on the zap power + Ghommie: + - expansion: A timepiece circuit component has been added. It can output the station + time in different time formats and units of time when triggered. + InvalidArgument3: + - expansion: The Yellow slimecore plasma reaction is back in the form of creating + an EMP-proof cell. + Melbert: + - rscadd: 'Icebox: The Chapel, Library, and Departures Lounge (and some maintenance + around it) have been revamped and expanded to utilize multi-z.' + Mothblocks: + - bugfix: Fixed a bug where bans could not be applied if the database connection + was not immediately established, even after a re-establish. + - server: Updated database schema to allow for null round IDs in bans and tickets. + RandomGamer123: + - bugfix: Contractor support units now do not get a second uplink with 20 TC in + them. + - bugfix: Malf AIs cannot be rolled midround if one has already been rolled roundstart. + - bugfix: Syringe/Hypospray failure messages now reflect the proper body part. + Wayland-Smithy: + - bugfix: Fixed base lighting appearance inheritance. +2021-10-14: + FA120: + - bugfix: list literal can now contain tables,like they are supposed to + Guillaume Prata: + - imageadd: Engineering clothes have working reflective stripes now. Easier for + someone to find your corpse in maints, harder for you to hide in the dark to + do bad things. + Melbert: + - bugfix: You no longer see yourself in everything you double examine + Seris02: + - bugfix: regal rat can now eat cheese + runtime fixes for its signal + SomethingFish: + - expansion: Adds a BLT sandwich as a new food to the game. + Watermelon914: + - bugfix: Fixes filter list component not being a filter list component +2021-10-15: + ArcaneMusic: + - expansion: Venom swells your mob when stung. + Coconutwarrior97: + - bugfix: Fixes the holoparas breaking their users glasses when manifesting bug. + - bugfix: Lavaproof borg upgrade for miner borgs now works properly. + LemonInTheDark: + - bugfix: Fixes openspace not working if the floor below has been changed + MMMiracles: - rscadd: Tramstation's maintenance now has new catwalk tiles covering the various piping/wiring throughout. - bugfix: Tramstation's powernet should be slightly more resistant to bouts of power @@ -1421,6 +1114,89 @@ - bugfix: Secways will now say it's broken, rather than it's component. - code_imp: removes color_legacy prefs and changes sanitize_hexcolor()'s default to 6 characters + Maurukas: + - balance: The super matter crystal can no longer be immediately delaminated by + firing a gun into it, only brought close to the delamination threshold. + Melbert: + - rscadd: 'Icebox: Science RND and Genetics remap!' + RandomGamer123: + - bugfix: Leftover plasma tanks formerly intended for radiation collectors have + been removed. + Ryll/Shaps: + - rscadd: Added new quirk, "Shifty Eyes", which rarely causes people who examine + you while standing closeby to think that you both made eye contact, even when + you didn't. + - balance: The time window for making eye contact with someone else has been extended + from examining each other within 1 second to within 2 seconds. + - spellcheck: Fixed incorrect "the"'s being inserted before the names of improper + nouns in item stripping code. + SuperNovaa41: + - spellcheck: No more phantom hand grabbing. + - bugfix: Pipes now properly fulfill your nicotine cravings. + Zytolg: + - bugfix: The Nanotrasen Materials Reclamation Program has recycled the spare firelock + trapped in the Cargo Offices east windows. +2021-10-16: + Gandalf2k15: + - qol: Added the dyekit functions to the character preferences menu. + Ghommie: + - bugfix: Fixed monkeys having the wrong on fire overlay when ablaze. + Seris02: + - bugfix: quantum pads and other things with fault do_teleport calls no longer cause + runtimes + - code_imp: removes color_legacy prefs and changes sanitize_hexcolor()'s default + to 6 characters + thatoneplebeian: + - refactor: refactored drowsiness code +2021-10-17: + ATHATH: + - bugfix: The "don't allow any organics to escape on the emergency shuttle alive" + objective no longer counts inorganic species like golems, plasmamen, androids, + etc. + - qol: Some malf AI objectives have had their descriptions updated to reflect them + only caring about player-controlled creatures. + Ghommie: + - bugfix: Fixes the mind name of aliens not being updated when evolving (for real + this time) + - expansion: Added a trigonometry circuit component. + - bugfix: Pets no longer enjoy being shoved around. + Guillaume Prata: + - imageadd: Fire extinguishers now have a worn sprite when they are stored on your + Firesuit. + - imageadd: Atmos Optical glasses have a new icon for it's connectable mode. + - balance: Atmospheric Technicians will have external airlock access by default + now instead of only on skeleton crew. + Horatio22 borrowed Iamgoofball and Surrealaser , spriter d4n0w4r: + - imageadd: added 2 new outfits to the detective autodrobe + IndieanaJones: + - bugfix: Monkeys can now open worn backpacks by clicking on them. + - bugfix: Players with the monkified mutation now have a generic monkey name as + opposed to their actual name again. + JohnFulpWillard: + - bugfix: Secways will now say it's broken, rather than it's component. + Krysonism: + - balance: Growing vats can now be set to regrow the sample upon completion. + - balance: Increased the volume of growing vats from 200 to 300u. + LemonInTheDark: + - bugfix: Non wallsocket lights will be properly colored again. Whoops + Melbert: + - bugfix: Icebox chapel morgue slabs are now all the right direction + Mickyan: + - qol: While holding a spraycan you may right click on existing graffiti or colored + objects to set the spraycan to match that color + PositiveEntropy, EricZilla: + - imageadd: Resprites pinpointers! + RandomGamer123: + - bugfix: Admins who aghost won't be dragged back to their body when someone attempts + to defib them. + Sealed101: + - bugfix: fixes combat hypospray locking itself out from 10u transfers to 5u when + used in-hand + SpaceDragon00: + - bugfix: Organs will now consistently "Fail" once they have reached max damage + YakumoChen: + - spellcheck: Gives shaft miner a more accurate job description + esainane: - refactor: Radiation Collectors, Tesla Coils, and Grounding Rods are now subtypes of a common energy_accumulator type. This centralizes logic for smoothing energy release; converting between Joules, Watts, and internal energy units; and ensures @@ -1456,6 +1232,67 @@ - bugfix: Fixes dogborg models getting an improper pixel offset on their sprite. - bugfix: Dogborgs get their rest and rest-style verbs back. They are located under AI commands. + - code_imp: Removed many magic numbers from power generation code. + - qol: Tesla Coils will now display energy stored in Joules and power being produced + in Watts, much like Radiation Collectors did. + - qol: Grounding Rods will now display recent energy they've absorbed and the sustainable + power that this energy could be producing. It should now be very obvious if + you could use more Tesla Coils. + - bugfix: Fixed supermatter lightning bolt target selection. Previously, two grounding + rods were always* safe. Now, one grounding rod is always* safe. + - qol: Roller Beds now come with an examine hint for how to roll them up. + lovegreenstuff: + - bugfix: probital now works properly on ingest. you now get mitogen again + magatsuchi: + - rscadd: added ability to change hologram appearance to custom character + tralezab: + - rscadd: Titlescreens are now widescreen'd up. + - qol: The titlescreen is no longer described as "Effectively impervious to conventional + methods of destruction." and only the splash screen can be interacted with + - bugfix: you can no longer exploit the pink crossbreeding power to strip factions + from mobs +2021-10-18: + Ghommie: + - bugfix: Fixed the join/ready buttons not reverting if the game fails to setup. + Pickle-Coding: + - admin: Assembly bomb creation is now logged in Kelvin. + RandomGamer123: + - spellcheck: Fixed capitalisation errors in hypernoblium crystal usage messages. + Sealed101: + - bugfix: fixed abductor and advanced tools' recycling results being heavily diminished + or taken from their basic counterparts + SuperNovaa41: + - balance: The Goon Source code item is now invulnerable to deletion (aside from + ninja intervention), similar to every other high risk item. + esainane: + - rscadd: When all else fails, dusting a Clown can alter the Supermatter's containment + field. It might make the situation better. It might not. Who knows, HONK + magatsuchi: + - spellcheck: fixed a single bracket typo + tralezab: + - bugfix: fixes an error in department officers spawning with wallets +2021-10-19: + Cyberboss: + - bugfix: Prying open one of a pair of cycle-linked airlocks will now always close + the other (if it is powered). + - expansion: 'Arrivals, escape, and pod airlocks now restrict those without access + from exiting directly to space. Use is unrestricted when entering the station + or a shuttle is docked. tweak: Shuttle departures will now force exterior airlocks + closed on both the shuttle and docking bay. The lives of your fellow crew members + are more important than your tardiness and limbs, employee!' + - bugfix: Fixed the numbering of escape pods in certain maps. + Ebin-Halcyon: + - balance: Syndicate masks are now fire + acid proof + Ghilker: + - qol: filters can now filter multiple gases at once + Ghommie: + - expansion: Meta and Delta chapels now have pews in lieu of stools or chairs. + MeyHaZah, Onule, Fikou: + - imageadd: mining gear resprite + Mothblocks: + - rscadd: Emagging the communications console will now let you purchase dangerous + shuttles. The Gigafactral and the Monastery were moved over (and made cheaper), + while the Disco Inferno and Oh, Hi Daniel make a return. Ryll/Shaps: - admin: As an admin, if you start replying to a freshly submitted ticket that another admin is already replying to, you'll get a notice that someone already has it @@ -1476,6 +1313,23 @@ while the Disco Inferno and Oh, Hi Daniel make a return. jjpark-kb: - bugfix: added a range after mark selection for cargo teleporters + esainane: + - bugfix: Removed a scrubbers pipe that didn't lead anywhere near Upper Hydroponics + on Tram. +2021-10-20: + Ghommie: + - bugfix: Fixed maintenance drones being unable to examinate things they currently + can't interact with throgh shift-click. + - bugfix: Fixed clown car drivers being unable to examinate things or interacting + with their inventory while the car is in cannon mode. + - bugfix: Fixed honorbound people being unable to pull, examinate and alt-click + other living mobs while holding an item that could be used as a melee weapon. + - bugfix: Fixed mechas firing their weapons or using their tools when the pilot + is examinating things through shift-click. + Mickyan: + - expansion: Nearsighter quirk now lets you pick the look of your prescription glasses + from the character preference menu + - imageadd: Added thin prescription glasses 2021-10-21: ATHATH: - bugfix: Butter bears can now attack objects, as they were intended to. @@ -1538,6 +1392,7 @@ - bugfix: The SDQL spell parse error modal grows properly. - bugfix: fixed implant abilities not being properly removed when the implant is removed. + Coconutwarrior97: - rscadd: Adds a hydroponics airlock type, and replaces old medical hydroponics doors with the newer airlock type. - bugfix: Fixes an issue where people with the doctor phobia were afraid of hydroponics @@ -1786,6 +1641,26 @@ - imageadd: Digitigrade sprites for the Tacticasual Uniform and Cargo Tech Casual Wear SkyratBot: + Ghommie: + - balance: Moved Pun Pun away from the kitchen on Delta. It's now behind the bar + counter. + JohnFulpWillard: + - bugfix: da vim can now be entered again. + MMMiracles: + - rscadd: Added new pair of glasses that can be found within the trash piles of + maintenance. + - bugfix: Pacifists can now fire the circuit gun. + MentalCow: + - bugfix: Security Plasmamen spawn with their suit sensors set to Maximum + PositiveEntropy, AdipemDragon: + - imageadd: Botany tools have been resprited! + Sealed101: + - bugfix: The internal radio implant from Icebox departures has been returned to + it's owner's internal organs. A normal handheld radio has been left in its place. + - bugfix: The american sausage has become edible AND roast-stick-friendly! + - bugfix: Fixes advanced roasting stick griddling itself when used on a bonfire + with a rod griddle built over it instead of using the bonfire to roast the sausage. + Timberpoes: - bugfix: Fixed an issue where the unbanning panel would give inaccurate information about the ban in the unban confirmation prompts. - bugfix: Fixed an issue where clicking the X to close out the confirmation popup @@ -1797,6 +1672,202 @@ one. - admin: Editing the IP, ckey or CID of a server ban will now kick any players matching the edited ban's new details. + Zytolg: + - bugfix: Tramstation is now free from oddly decaled walls. + - bugfix: The Lavaland Syndicate Base is now Powered again. + - code_imp: repathed /unpowered Syndicate Base areas to /powered + esainane: + - 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 + for the main output port would continue to move when the other output port was + full. + - bugfix: Gas Filters again no longer leaves empty entries for gases that were filtered + in the main output. + - bugfix: Gas Filters again no longer outright destroys gas when no filters (or + a bad filter, somehow) are set. Instead, it will go through to the main output, + as before, or if the main output is full, be returned back to the input, as + if never removed. +2021-10-22: + Ghommie: + - bugfix: Fixed the contents of certain coded or mapped closets exceeding their + 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: fixed implant abilities not being properly removed when the implant is + removed. + IndieanaJones: + - expansion: Player monkeys make a screeching noise when using the *screech emote. + JohnFulpWillard: + - bugfix: Changelings that re-adapt with pheremone receptors on, will have them + forcefully removed. + Seris02: + - rscadd: makes it so lockers/crates can have access electronics removed/inserted + Y0SH1M4S73R: + - bugfix: The proc call, set var, and spawn atom circuit components will properly + resolve any weakrefs passed to them through their list ports. + - admin: The signal handler circuit component has two new presets, item_pre_attack_secondary + and item_afterattack_secondary. + - bugfix: Backup human names are once again respected when forcibly humanizing what + would otherwise be a non-human head of staff. + - admin: Added a "suppress_message_admins" variable to SDQL spells, which prevents + the spell's query from getting output to all admins' chat panels. The query + will still be written to the game log. + - bugfix: The SDQL spell parse error modal grows properly. + esainane: + - bugfix: The Orion Trail's instructions screen is usable again. + tralezab: + - bugfix: 480x480 titlescreens now load up centered as intended from the widescreen + title changes +2021-10-23: + Guillaume Prata: + - qol: CMOs will now spawn with blue shoes (Paramedic) that protect them from contracting + diseases from any blood pool they step in, just like everyone else at medbay + already does. + Mickyan: + - qol: Art supplies are now also available in the library vendor in case the art + storage room is not present on station + Mooshimi: + - qol: 'Maintenance drone spawners have returned to robotics maintenance removed: + maint drone is gone from the mechfab and research tree' + Sealed101: + - bugfix: fixes mining drills showing as pickaxes when worn or held in-hand + Seris02: + - bugfix: borgs will no longer leave MMIs while cryoing +2021-10-24: + Coconutwarrior97: + - bugfix: Fixes some hydro airlocks having null in their req_access. + Ghommie: + - expansion: Added binary and decimal conversion components. + Guillaume Prata: + - bugfix: Space Heaters won't change temperature without draining it's cell charge + anymore. + JohnFulpWillard: + - qol: Roulette Wheels now say their actions, rather than have it magically appear + in the chat box of everyone nearby. + Mooshimi: + - balance: cattleprods can no longer be held in suit storage slots + esainane: + - bugfix: Members of the Science department can no longer get given the objective + to steal their own server's source code. +2021-10-25: + ArcaneMusic: + - bugfix: Regular/Advanced mops are now in the same categories of the auto/protolathe. + Coconutwarrior97: + - bugfix: Fixes pacifists wielding mjollnir being able to shock people. + JohnFulpWillard: + - qol: Bounty consoles will now talk to the user if they have to wait for a new + bounty or is using an incorrect ID, rather than telepathically transmit messages. + PositiveEntropy: + - imageadd: Resprites the defibrillator! + Sealed101: + - bugfix: fixes bomb implants blowing you up anyway when closing the window instead + of pressing the "No" option + - bugfix: fixes bomb implants blowing you up when clicking the action button while + the confirmation popup is still up + Watermelon914: + - balance: Makes wizard a high impact ruleset. + esainane: + - bugfix: The SM air alarm on MetaStation and TramStation once again starts unlocked, + and can also be locked and unlocked by Engineers instead of just Atmospherics + Technicians. This matches the setup on Delta, IceBox, and Kilo. + jlsnow301: + - spellcheck: Offering items to other players now has punctuation + tralezab: + - rscadd: Added a rare skillchip to maint. +2021-10-26: + ArcaneMusic: + - rscadd: A new frosted over building has been unearthed in the wastes of icebox. + Fikou: + - rscdel: the captain can no longer unlock his display case on delta without breaking + it + MMMiracles: + - rscadd: Tramstation now has stocked the various departments with either a basic + break room or basic starter food to give a growing crew what they need to stay + healthy. + - rscadd: Some extra public-access vendors for junkfood and cigarettes have been + added to the public halls of Tramstation. + - rscadd: Security now has an evidence room to store confiscated things. + Melbert: + - bugfix: Some special plant reagent genes now show up on the plant analyzer properly + again + Mothblocks: + - bugfix: Backup human names will now properly only apply when you are a nonhuman + head of staff, rather than any head of staff. + Seris02: + - bugfix: fixes a slight issue with the hair color not being visible on ghosts after + the legacy color removal + Watermelon914: + - bugfix: BCIs no longer runtime when they're created at mapload. + - admin: Players now see any notes they may have gotten whilst disconnected when + they join the server for the next time + Zytolg: + - expansion: Sofas now include the Bench Type. These are buildable with 2 metal + plates from the crafting menu. + - expansion: Beds can now be rotated (flipped), and include the Double Bed Type. + Miners can also make Double Pod Beds to really feel like an Alaskan King. + - expansion: Bedsheets to match! Try to share those big blankets with a lizard if + you see that they're shivering! + - code_imp: 'Stuff that lets you interact with the benches and beds in-game, so + that you too can enjoy being a king. sprites: Ports the Benches and Double Bed + sprites from Skyrat sprites: Flipped Beds' + esainane: + - code_imp: LabeledList.Item now supports arbitrary nodes as labels. String labels + still work as previously. + - code_imp: RoundGauge now supports an alertBefore property, for when warnings need + to happen below a threshold. This can combine sensibly to form ranges with alertAfter. + - refactor: The HFR interface has been heavily rewritten and restructured, fixing + many edge cases where data was empty, unset, or took extreme values. Major parts + now have their own file. The structure of gas lists is now consistent. Static + data is used for more values. Much presentation layer logic has been moved to + tgui instead of dm. Some processing that should never have happened, in tgui + or anywhere else, is now gone forever. + - qol: The HFR UI now displays the recipe specific gases that each fuel will create + in a large table inside an expandable area. This can be collapsed when not needed. + - qol: The HFR UI now uses a minimum mass for the scale of its gas lists. This should + provide a visual cue for when a gas mix is running out, or needs more fuel to + start. + - qol: The HFR UI now graphs its various gas mixtures on a unified logarithmic scale, + and tells you how fast the temperatures are changing in real units after all + effects. + - qol: The HFR UI now displays reactor status through gauges, with scales set to + indicate typical ranges involved, and warnings to indicate when something is + going wrong. + - qol: The HFR UI now directly displays reaction instability, reaction activity, + and the cell charge of the local APC. Reaction activity is the amount of heat + output relative to what is permitted by the heat output limiter. This is effectively + making explicit the result of a calculation you would otherwise need to do anyway, + and makes it easier to notice when a reaction has stalled. qol; The HFR UI will + now helpfully inform you in discerning red text if you have no recipe set, or + if any one of the gas mixtures is empty. This should be particularly helpful + for noticing when you didn't add any coolant. Please involve coolant when operating + a nuclear reactor. + - qol: The HFR UI now always lists Plasma, BZ, and Proto-Nitrate in the moderator + gas list, and provides tooltips explaining their usage and purpose. + - qol: The HFR UI now has many other tooltips, from explaining the function and + purpose of the various reactor controls, to the fringe effects of uncommon moderator + gases. + - code_imp: heat_output_bool is gone forever yes this deserves its own changelog + entry + - bugfix: The RD's office in IceBox once again contains an AI Core circuit. + - bugfix: Many escape pods are no longer missing cycling airlock systems. + - bugfix: Air should no longer magically not pass certain areas. + jlsnow301: + - rscadd: Cargo's Delivery Tagger now uses TGUI + malton33: + - rscdel: Removes the book "Singularity and Tesla for Dummies" +2021-10-27: + Capsandi: + - expansion: Ethereals have their own lungs which electrolyze water vapor now + - bugfix: Ethereals will no longer take burn damage from breathing air which they + can stand in safely with internals + Likteer: + - rscadd: Added facial hair to Ethereal customisation. + Melbert: + - code_imp: auto-grow for hydroponics trays now use a setter + NamelessFairy: + - qol: Word filters now support soft filtering, allowing players to say a word only + after they confirm wanting to say it after a warning. - bugfix: Deadchat is now effected by OOC word filters - bugfix: A reason for a word being filtered will now be displayed nomatter what case the word is in @@ -1838,6 +1909,46 @@ SkyratBot: - rscdel: Removed leftover HTML from spawner menu - refactor: Spawner menu is now easier to read + Sealed101: + - expansion: Spooky headless corgi spirits have been sighted across the Sector! + - bugfix: fixes hats glued to corgis' heads when dressing corgis up + Timberpoes: + - admin: The terrible code ocelot haunting the editing ban panel has been banished. + Editing bans now actually works again. + - qol: Station Engineer trimmed ID cards can now be given Atmospherics access without + needing to be Silver. + - qol: Geneticist and Roboticist trimmed ID cards can now be given Ordnance (Toxins) + accesses without needing to be Silver. + - qol: Detective and Sec Officer trimmed ID cards can now be given Armory access + without needing to be Silver. + Watermelon914: + - bugfix: Fixes notes and bans being shown to players on connect when the note or + ban doesn't belong to them. + Y0SH1M4S73R: + - bugfix: DNA unique identity and unique feature strings once again generate correctly, + which also means they work correctly again. + axietheaxolotl: + - imageadd: recoloured the CC commander envirosuit + esainane: + - bugfix: You can no longer use the *collapse emote to cheat your way out of stamcrit. + - bugfix: Directional firelocks are now transparent, consistent with full-tile firelocks. + This avoids some very strange behavior where you could see through a directional + firelock when you were on the same tile. + - bugfix: Assemblies attached over a wire will now always pulse the wire on activation, + even if the wire is cut. You can create voice or signal activated airlocks again! + - bugfix: Objects which use custom materials and break above 0 integrity no longer + spawn broken. + - code_imp: Made a comment which warned against breaking this sort of thing more + explicit. + - bugfix: Bits of space near the station are no longer randomly powered by unconnected + areas. Outlet Injectors used for sending gas to space have been replaced with + Passive Vents. + - bugfix: The waste air from Virology on Tramstation will now be removed. Previously, + the turf that the outlet injector was on was unpowered. + - bugfix: Reinforced walls will now properly re-smooth when nearby reinforced walls + are created or destroyed. +2021-10-28: + Cyberboss: - bugfix: Emergency inlet access on the mining station eastern-most airlocks has been removed. - bugfix: Fixed mining station east airlocks requiring external airlock access instead @@ -1861,6 +1972,29 @@ of resize. A little easier to use. - bugfix: Fixed an issue with the crafting menu not being fully dimmed while crafting. 2021-10-30: + Guillaume Prata: + - expansion: Atmospherics Technicians can receive some useful things from their + mail now. + LemonInTheDark: + - bugfix: emagging ethereals works again + Seris02: + - bugfix: orion can now no longer give you multiple prizes + - qol: personal lockers will now allow you to actually un/lock them without swiping + ID + Watermelon914: + - balance: If you try using the staff of change, the staff of chaos or the staff + of healing as a crewmember, then it'll backfire. The Staff of change wabbajacks + the user, like the pool of change; this means you can't become a xenomorph or + a syndicate borg. The Staff of chaos has a 5% chance of firing the bolt directly + at the user using it. The Staff of healing now behaves like a medibeam gun to + non-wizards trying to use it. + carshalash: + - bugfix: Squirt cider now requires salt. Tomato soup no longer becomes squirt cider + esainane: + - bugfix: A roundstart Mannitol pill should no longer cause overdose on its own. + optimumtact: + - rscadd: Bans are now more user friendly +2021-10-29: ATHATH: - balance: Heavily EMPing a jumpsuit or another piece of under clothing will now short out its suit sensors (as if they had shorted out from damage to the jumpsuit) @@ -1869,38 +2003,34 @@ - bugfix: The sensor list will now be updated when your jumpsuit is EMP'd to reflect any possible changes in suit sensor status. - bugfix: Under clothing will now respect the EMP_PROTECT_SELF flag. - Aphast: - - bugfix: Added a locked door inside of a dangerous research facility, to prevent - an unnecessary casualty. - GoldenAlpharex: - - bugfix: The AI VOX announcer voice is by default the one it's meant to be, the - normal one. - - bugfix: The non-standard VOX announcer voices have had their volumes reduced. - - code_imp: Improves the VOX announcer voice code quite a bit. - - bugfix: Fixed the veteran-only quirks, making them available once again. - - config: Added a newline at the end of veteran_players.txt to avoid mistakes happening - with the Manage Player Ranks verb. - IsaacTheSharkWolf: - - rscadd: Barbershop with spa and tattoo/piercing workshop. - - rscdel: A bunch of maint objects to save on performance - - bugfix: Fixed the whole airlock space_dir vars issue thingymajig (hopefully) + ArcaneMusic: + - bugfix: Double Bedsheets now properly show the bedsheet sprites. + JohnFulpWillard: + - bugfix: Bank machines will now immediately stop withdrawing funds if the machine + is broken or unpowered. Melbert: - bugfix: The OOC messages of people with minor admin ranks now respect OOC filters in chat tabs - SkyratBot: + - expansion: Two new station traits, Ionic Stormfront and Radiation Stormfront. + They make ion storms and rad storms more common, respectively. + Mickyan: - code_imp: Vending machines no longer require a unique panel overlay for each new type - - imageadd: Hot Ice icons are now consistent, and now have an stack icon showing - two pieces for when there are between 17 and 33 pieces in the stack. - - 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 - 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 - bugs relating to turfs in general, especially catwalks and glass flooring. - - imageadd: made command envirosuits more consistent + Mothblocks: + - bugfix: Felinids can no longer be head of staff if human authority is required. + - bugfix: The foreigner quirk on felinids now works as it does with all other nonhumans + who have their own languages, rather than also giving Galactic Uncommon. + Sealed101: + - bugfix: fixed a runtime in physical experiments trying to unregister a signal + from a non-existant atom + Timberpoes: + - qol: Ordnance, Ordnance Storage and Atmospherics have been dropped to common-level + accesses, allowing them to be added to any ID card instead of just silver and + specific job trimmed cards. + Watermelon914: + - qol: Allows you to link integrated circuits to component printers and, as a result, + let you print components off remotely which are put directly into your circuit. + esainane: - bugfix: Pressure Tanks will now refuse to accept materials without a specific material type during construction. - bugfix: Pressure Tanks will now drop the correct amount of materials during deconstruction. @@ -1908,19 +2038,58 @@ a sufficiently pressurized tank despite the warning, rather than doing nothing. - bugfix: Pressure Tanks will release their gas contents when destroyed, rather than voiding them. + - refactor: Reworked `/turf/var/intact` into variables which don't conflate underfloor + visibility, underfloor interactability, and overfloor presence. This fixes many + bugs relating to turfs in general, especially catwalks and glass flooring. + - bugfix: The SM now properly provides bonus power for operating in a low pressure + environment. Make sure you can keep it cool enough, and remember, space or a + vacuum won't work, but it will damage the SM! + - code_imp: Calculations relating to the SM pressure bonus are now derived from + human readable parameters. + jlsnow301: + - rscdel: Removed leftover HTML from spawner menu + - refactor: Spawner menu is now easier to read + - bugfix: The crafting menu now uses scrollable sections, fitting the window regardless + of resize. A little easier to use. + - bugfix: Fixed an issue with the crafting menu not being fully dimmed while crafting. +2021-10-30: + ArcaneMusic: + - bugfix: Metastation once again has power to arrivals. + Horatio22: + - imageadd: made command envirosuits more consistent + KathrinBailey: + - bugfix: Corporate Sofas now have their rear middle sprites fixed to align with + the rest of the rear sofa sprites. + LemonInTheDark: + - 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 Timberpoes feat. JohnFulpWillard: - config: Modified how ambiguous VALUE_MODE_FLAG keyed_list config entries are parsed and added additional config logging for when weirdness with keyed_list config entries happens in general. (Timberpoes) - config: /datum/config_entry/keyed_list/probability was unused and has been deleted. (Timberpoes) - - bugfix: 'The Cloth Golem preferences profile now works (JohnFulpWillard) qol: - The species-changing magic mirror variants now list species names instead of - internal code IDs. (JohnFulpWillard) qol: Shadowperson species should now show - as "Shadow" instead of "???" (JohnFulpWillard)' + - bugfix: The Cloth Golem preferences profile now works (JohnFulpWillard) + - qol: The species-changing magic mirror variants now list species names instead + of internal code IDs. (JohnFulpWillard) + - qol: Shadowperson species should now show as "Shadow" instead of "???" (JohnFulpWillard) + esainane: + - imageadd: Hot Ice icons are now consistent, and now have an stack icon showing + two pieces for when there are between 17 and 33 pieces in the stack. 2021-10-31: GoldenAlpharex: - bugfix: You can finally remember how to place down wires again! How did you even forget something so simple? - ORCACommander: - - bugfix: Hair Dye is Back on the Menu + Krysonism: + - balance: The organic slurry is now retained inside the rat after it is dipped + in welding fuel. + Timberpoes: + - bugfix: Vampires and Dullahans can no longer select Cat ears and Cat tails. You + monsters. + Zytolg: + - expansion: Condition Orange! Severe Seismic Activity Detected! New Gulag Position + Registered! + - rscdel: The remnants of the Old Mining Base are gone. We've always had the crater + observatory. + - qol: New Icebox Terrain diff --git a/html/changelogs/archive/2021-11.yml b/html/changelogs/archive/2021-11.yml index 8b0ebadea2276..f6fc047203ce7 100644 --- a/html/changelogs/archive/2021-11.yml +++ b/html/changelogs/archive/2021-11.yml @@ -1,89 +1,30 @@ 2021-11-01: - Gandalf2k15: - - rscadd: Items in the loadout menu will now automatically be colourable if they - support it. - Gonenoculer5: - - bugfix: Fixes the Fab-O-Vend's custom vendor setting on the vendor board. - - bugfix: Fixes the Fab-O-Vend's lack of buy reply strings and tells it where to - pay out its dues to. - - bugfix: Fixes the Fab-O-Vend's vendor resupply, or lack thereof due to improper - naming. MMMiracles: - bugfix: CMOs on Tramstation start back in their office again - RatFromTheJungle: - - balance: rebalance's pod people healing. - SkyratBot: + Melbert: + - rscadd: 'Icebox: Engineering and Atmos remapping!' + RandomGamer123: + - bugfix: Swapped positions of a fuel tank and rack in Delta's Auxillary Tech Storage + RaveRadbury: + - bugfix: Vampires and Dullahans can be enabled in the config. + Seris02: + - bugfix: sharding someone no longer causes an invisible dead mob + - qol: the PDA will no longer bother you with a message if all you're doing is closing + the interface while laying down. + - bugfix: fixes a runtime when transferring advanced ids to/from wallets + Timberpoes: + - bugfix: It is no longer possible to add reagents to containers in the BRPED. + Zytolg: - bugfix: Using leftover funding from the quarter, the Icebox CMO has bought their staff a dinky medical records laptop. + adamsong: - code_imp: added check to make sure roleban_delimiter exists on a roleban - admin: max ban message length added - - bugfix: It is no longer possible to add reagents to containers in the BRPED. - - bugfix: Vampires and Dullahans can be enabled in the config. - - bugfix: Swapped positions of a fuel tank and rack in Delta's Auxillary Tech Storage - - bugfix: fixes a runtime when transferring advanced ids to/from wallets + phasenoisepon: - bugfix: Vampires can now no longer transform into bat form when their brain is placed in an MMI - The Syndicate: - - rscadd: We have exported newly designed Winterized Hardsuits for frozen conditions, - beware it does not have any better protection. - jjpark-kb: - - refactor: refactored reagent item imbueing into a component - - rscadd: added a reagent buckler, collar, ring, 3 shoes, axe, hammer, handcuff - - balance: changed some values on weapons and armor - - rscdel: removed the reagent tile 2021-11-02: - ForrestWick: - - bugfix: crucial removal of something from a ruin that can cause massive problems - SkyratBot: - - rscadd: Pai Printer Module - - bugfix: admin heals no longer delete all restraints in target's inventory - tf-4: - - bugfix: Ballistic guns that are vulnerable to EMPs will no longer have a phantom - mag when EMP'd - - bugfix: m23 and m2 shotguns can now be loaded with 14 gauge ammo as intended -2021-11-03: - Guillaume Prata: - - balance: Plasmamen belt tanks volume and the rate that their lungs consume plasma - got lowered to 1/4 to stop the easy 2 hour long O2 inside a plasmamen belt tank - trick. It doesn't change how long the internals last for plasmamen. - Kryson: - - balance: Regular medical syringe guns have been replaced with syringe rifles - - imageadd: new dna/dart/medical Syringe gun sprite - RatFromTheJungle: - - bugfix: fixes the guard baton being deleted because you brought your wintercoat - to work. - Ryll/Shaps: - - rscadd: Added shaking soda cans! Take an unopened soda can and right click it - in hand to shake it all around, increasing its fizziness. - - balance: Having an unopened soda can hucked at you will actually hurt quite a - bit, around the level of a toolbox. This also has a chance of bursting the soda - can on impact, leaving it useless as a weapon after. - SkyratBot: - - balance: brain washing now cures up to lobotomy tier traumas - - rscadd: You can now disarm someone into an available open locker to close it on - them as your disarming action. - - rscadd: You can now disarm someone into an available closed locker to open the - locker behind them up. - - balance: The organic slurry is now retained inside the rat after it is dipped - in welding fuel. - - bugfix: Gas mask subtypes will no longer scare people with Greytider Phobia - - bugfix: Cellular Emporium UI has been refreshed. Remaining genetic points and - readaptation can still be seen while scrolling. - - bugfix: Centcomm engineers have finally figured out how to remove the violin from - the wall in Icebox security - - bugfix: Icebox has received a number of genturf and area related fixes - - bugfix: A spooky active turf has been removed from the abandoned plasma facility - ruins - - bugfix: The area above the gulag has been moved to the mining exploration area - to prevent venting the - - bugfix: The duplicate APC in Icebox maint has been tracked down and destroyed. - Again. - - balance: Obsessed have a low chance of stuttering and displaying shifty behavior - near their targets, instead of vomiting or passing out if on good mood. This - is to better allow verbal interactions between obsessed and obsession target, - while keeping them shifty and creepy. - - spellcheck: corrected the name of the peripherals control board being secured - on the Savannah-Ivanov + Mothblocks: - balance: Radiation is now a status effect, where you are either irradiated or not. When irradiated, you will take constant toxin damage, and irregular burn damage. Radiation is removed once all toxin damage is healed. Standing under @@ -142,6 +83,12 @@ 2021-11-04: SkyratBot: - bugfix: Removes a XSS vulnerability while picking religious sect. + phasenoisepon: + - bugfix: admin heals no longer delete all restraints in target's inventory +2021-11-04: + CocaColaTastesGood: + - bugfix: Removes a XSS vulnerability while picking religious sect. + - bugfix: Fixes an exploit that allowed players to arbitrarily spawn any path. 2021-11-05: ATHATH: - bugfix: Liches (and mortals) can no longer use explosive lances to store grenade @@ -176,6 +123,15 @@ ReinaCoder: - bugfix: Fixes the two Disco Elysium detectives suits to be non-adjustable SkyratBot: + AndAllThatJazz: + - bugfix: Fluid ducts will no longer duplicate when unwrenched + ArcaneDefence: + - bugfix: Corpses will no longer scream when their limbs melt to the bone in icemoon's + plasma lava + CocaColaTastesGood: + - bugfix: Fixes an exploit that allowed players to disable holodeck safety without + following the proper conditions + Ghommie: - balance: The wine cork fired when champagne is popped open is now a projectile and not a thrown item. It can ricochet on walls and will leave an harmless wine cork item when its trajectory has finished. @@ -190,6 +146,49 @@ - bugfix: Radstorms dont mutate people who are immune to rads - admin: Added the color matrix editor. It is available from a dropdown option in an atom's View Variables menu as well as when editing an existing color matrix. + - bugfix: Fixed the curator PDA having some inconsistent-looking icons for slotted + in IDs and pAIs. + - bugfix: Fixed blind mobs not receiving messages for when a food item has finished + baking ("You smell something great / a burnt smell...") + - spellcheck: Added punctuation to the above messages. + Ghommie (taken from an old unused file): + - expansion: Skull and coffin cookies can now be baked. + - expansion: Energy Crossbows and Cryptographic sequencers now have a Halloween + exclusive look. + Guillaume Prata: + - expansion: Security Officers, Detectives and the Warden will now spawn with a + Tablet pre installed with BotKeeper and Crew Manifest. + - qol: "AtmoZphere (tablet program) will show the tile's temperature as both \xB0\ + C and K now." + JohnFulpWillard: + - qol: All prison intercoms on all maps have been standardized! + - bugfix: Delta's dormitories intercoms can now actually be spoken through, as it + is no longer a prison intercom. + - qol: Chaplains can now replace their Altar of the Gods by hitting the Chapel floor + with a Bible. + LemonInTheDark: + - admin: the party alarm now flashes roughly 2.5 times slower + - server: Init profiles are now logged separately from standard ones, in init_profiler.json + Maurukas: + - bugfix: Tramstation's engine and emitters have been correctly rewired. + - bugfix: Extra air alarm in tramstation's engine has been removed + Melbert: + - spellcheck: Dormat -> Dormant + ReinaCoder: + - bugfix: Fixes the two Disco Elysium detectives suits to be non-adjustable + Sealed101: + - bugfix: fixed guns that are supposed to be undroppable (implant guns, guns when + using an anti-drop implant) dropping anyway when you shoot yourself in the leg + due to being Clumsy + Stonetear: + - bugfix: PACMANs could previously be emaged, but now there's a indicator when you + do so successfully. + vincentiusvin: + - bugfix: fixed some buttons having zero width +2021-11-06: + KittyNoodle: + - bugfix: Radstorms dont mutate people who are immune to rads + Seris02: - rscadd: custom say emotes, or in other words, radio emotes. The format is for example "screams and shouts*damnit!" with any relevant radio keys, language keys and all that used as normal, for example, ";,o screams and shouts*damnit!" @@ -240,6 +239,21 @@ too fast. - imageadd: Added fallback icons for clothing inhands - server: Patches multiple(?) arbitrary file related vulnerabilities + TheBonded: + - bugfix: Corpses will no longer cough, spit, or choke on blood when you hit them + in the chest really hard + TheFakeElon: + - server: Patches multiple(?) arbitrary file related vulnerabilities + Y0SH1M4S73R: + - admin: Added the color matrix editor. It is available from a dropdown option in + an atom's View Variables menu as well as when editing an existing color matrix. +2021-11-07: + Archanial: + - bugfix: mapload works + Bumtickley00: + - bugfix: Cold seiver now quickly heals your radiation instead of quickly killing + you + Ghommie: - bugfix: Fixed the emissive appearances (basically what you can see even in complete darkness) and possibly other overlays of vending machines being removed when the wire panel is opened/closed. @@ -258,6 +272,20 @@ - rscadd: adds in the Hardlight Salve Medicell, please read https://github.com/Skyrat-SS13/Skyrat-tg/pull/9268 for more details. 2021-11-08: + GoldenAlpharex, with some oversight from Timberpoes: + - bugfix: Maps will now correctly be loaded at the start of a round. Hurray! + - code_imp: Improved the code for loading map configs and made it more documented, + while also removing a way to delete config files while I was at it. + JohnFulpWillard: + - bugfix: Godmoded shades should no longer spawn from posessed blades spawning spirits + too fast. + Mickyan: + - imageadd: Added fallback icons for clothing inhands +2021-11-08: + AndrewL97: + - rscadd: unit test for map load + - rscadd: directory param to map load + whitelist for data and _maps + - rscadd: advertising for mojave sun in tg commit logs Nyksia: - bugfix: aliens can no longer clear eggs before the hugger bursts out Ryll/Shaps: @@ -266,151 +294,59 @@ and can no longer cause outright compound fractures in healthy targets. - bugfix: Throwing someone you have in a neckgrab or are choking will now properly throw them harder than normal. - Seris02: - - rscadd: Glow in the dark markings/bodyparts/eyes - SkyratBot: - - bugfix: CentCom's suit using an old icon, and fixed the gas mask and helmet's - icon not showing - - bugfix: Bits of space near the station are no longer randomly powered by unconnected - areas. Outlet Injectors used for sending gas to space have been replaced with - Passive Vents. - - bugfix: The waste air from Virology on Tramstation will now be removed. Previously, - the turf that the outlet injector was on was unpowered. - - spellcheck: Fixed a typo on the singulo toy. - - bugfix: anonymous names doesn't break anymore! it works! hip hip hooray! + Timberpoes: - bugfix: Items with dash actions and the Bluespace Prophecy trauma now utilise proper teleportation code, disallowing teleportation to and from teleport restricted areas. - - rscadd: unit test for map load - - 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 - tracking those incompatible with illegal cloning technology, which is banned - sector-wide. Such records have been expunged. + Toastgoats: + - spellcheck: Fixed a typo on the singulo toy. + axietheaxolotl: + - bugfix: CentCom's suit using an old icon, and fixed the gas mask and helmet's + icon not showing + esainane: + - bugfix: TramStation now has a ticket dispenser by the HoP line, replacing one + of two very close gas vendors. + - bugfix: TramStation's Engineering Console now has a cable to connect it to the + main powernet. + tralezab: + - bugfix: anonymous names doesn't break anymore! it works! hip hip hooray! 2021-11-09: + Ghommie: + - bugfix: Randomized reagent recipes (so far only metalgen and the secret sauce) + should no longer from time to time require reagents that are normally TOO hard + (emphasis on TOO) to get or unobtainable by non-antag players (e.g. most mutation + toxins, syndie stims, godblood, spores) GoldenAlpharex: - bugfix: Fixed certain preferences being reset to their default values when trying to change them, due to the dropdown menu of options changing numbers into text and due to that not being supported by numeric preferences. AKA, changing pixel scaling method will work again. + JohnFulpWillard: + - refactor: Bot emagging has been refactored, and as such, their cover can be closed + if forced open by emag if the bot itself hasn't been emagged. + - bugfix: Sergeant-At-Armsky can now be found in Delta's Armory! Melbert: - bugfix: Chaplains can no longer select admin only null rods. + Mothblocks: + - qol: Cult pylons, rod of asclepius, and space dragon rifts will now give you an + alert as feedback for when you are being healed by them. + - admin: Adds a panel for "known alts", which let you write down confirmed, valid + alts between two people so that they don't show in suspicious connection history. PositiveEntropy, Naevii: - imageadd: Ports BeeStation cloak designs! - RatFromTheJungle: - - balance: rebalances teshari incomming damage to 20-25% vs the previous of 50%, - and gives them a single point more of punch damage so they quit magically rolling - 0, don't ask, I also don't know why. Ryll/Shaps: - rscadd: Yawns can now propagate and cause other nearby mobs who see it to yawn as well. ShizCalev: - bugfix: Radioactive microlasers will no longer irradiate humans wearing radiation proof clothing. - SkyratBot: - - imageadd: Turret Control frames now have a dedicated icon, rather than literally - using the APC image. - - bugfix: Randomized reagent recipes (so far only metalgen and the secret sauce) - should no longer from time to time require reagents that are normally TOO hard - (emphasis on TOO) to get or unobtainable by non-antag players (e.g. most mutation - toxins, syndie stims, godblood, spores) - coldud13: - - bugfix: floating lights and radios at arrivals on delta have been cleaned up - nikothedude: - - rscadd: Adds a fancy new menu for antags to view exploitables from! OOC>View crew - exploitables - - bugfix: Fixes the functionality of records. All previous methods of using records - work now. - - refactor: Record loading and saving is now handled in flavor_text.dm. admin_remove - now uses owner.remove_antag_datum(src) instead of on_remove() to remove antag - datums. -2021-11-10: - Guillaume Prata: - - bugfix: A small mistake on our contract with Nakamura Engineering made them supply - the station with Rad Insulated Atmos Hardsuits. The mistake was fixed so please - don't stand near the SM or the HFR with the hardsuit, it was never made for - that. - - bugfix: You can't put a PKA inside your Mining hardsuit helmet anymore but you - can put it in your hardsuit instead! - Iamgoofball: - - balance: Batons now knockdown again. - Melbert: - - admin: Admins can now tell when other admins are readied up in the pre-game lobby. - Check adminwho or view your stat panel. - Seris02: - - rscadd: adds thieving gloves - SkyratBot: - - bugfix: Virology's PanD.E.M.I.C 2200 should no longer bluescreen - - refactor: The Pandemic machine has been refreshed and is more helpful, intuitive - to use. + V2LenKagamine: - bugfix: You now drop food trash items on use, putting the actual "Trash" in the same hand you used the item in. - - admin: Silicon activity is now logged in silicon logs rather than being stuffed - into game.log - - admin: Bans will nolonger play a video - - bugfix: Fixed the response signal not being able to be connected to regular signals. - - admin: Adds a panel for "known alts", which let you write down confirmed, valid - alts between two people so that they don't show in suspicious connection history. - - bugfix: Fixed shoving being agressively weird, please report any oddities it's - a bit of a headache getting behavior to match and I'm flying a bit blind - - refactor: Bot emagging has been refactored, and as such, their cover can be closed - if forced open by emag if the bot itself hasn't been emagged. - - bugfix: Sergeant-At-Armsky can now be found in Delta's Armory! - - bugfix: 'Fixed missing award icons in the achievement menu sprite: All achievements - outside the misc category have been given their own icons and should no longer - use the base background one.' + Watermelon914: - admin: Admin circuits are now abstract so that they don't appear in lockers when attached to custom shells and such. - - bugfix: Fixes a grave oversight of being able to type with boxing gloves on. - - bugfix: Fixed Havana cigars running out of nicotine. As a result of increasing - the starting nicotine amount, the total `chem_volume` was increased to allow - room for other chems to still be injected. - Wallem: - - bugfix: Makes ants incapable of affecting the afterlife. - - bugfix: Ants, gibs, and garbage cleanable decals now properly show up above pipes. -2021-11-11: - ATHATH: - - bugfix: The gluttony sin ruin is no longer radioactive. - - bugfix: Quantum pads can teleport non-living things again. - - bugfix: Quantum pads can teleport creatures who aren't buckled to something again. - Creatures who are buckled to something unanchored can still be teleported by - quantum pads, but creatures who are buckled to something anchored cannot. - - bugfix: Quantum pads can no longer involuntarily teleport ghosts, although ghosts - can still click on a quantum pad to teleport to that quantum pad's destination - pad. - ArdentSpark: - - bugfix: Readding missing loadout items, and removing items from non-donator access - as it was previously - - bugfix: Adds Red Victorian Dress, Black Victorian Dress and Polychromic Sweater. - - bugfix: Migrates Poppy, Lily, Geranium, Rose, Sunflower, Harebell and Rainbow - Bunch to donator only once more, reducing the admin spam. - GoldenAlpharex: - - bugfix: Cat-people that were meant to land on their feet, will now land on their - feet. - Guillaume Prata: - - balance: Pneumatic airlocks seals are normal sized now and can be printed at the - Science lathe. - - balance: After dealing with another weekly subverted Engborg spacing the armory. - CentCom's Robotics division decided to downgrade the Engborg RCD by removing - 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: - - 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 - bumping into them. - - bugfix: The "Choking (No N2O)" alert now functions correctly. - - bugfix: fixes the fall chance on mending globules to properly work as intended. - - imageadd: The irradiated status effect has a new alert sprite. - - refactor: 'Refactor parts of the job assignment system, unifying job eligibility - checks. qol: Adds improved logging for job assignment.' - - bugfix: fixed chem analyzer not showing impure reagents that don't have impure - chem (like multiver) - - bugfix: Cyborgs can now shake up compromised carbons with the hugging module. - - rscadd: Added antivirus-protection to plasmaman suits and all its variants(the - entire set). + esainane: - refactor: Wall mounted and directional objects have undergone major internal simplification. Please report anything unusual! - bugfix: You can no longer stack an indefinite amount of Intercoms on the same @@ -485,23 +421,266 @@ Toastgoats: - imageadd: Resprited hatchet inhands and made them face outwards. 2021-11-14: - Elli-Skala: - - balance: nerfs ash walker bone spears to one range - RatFromTheJungle: - - rscdel: Removed the Singularity crate from cargo, to prevent it getting wiley - in the engineering wing. It couldn't even be used as a power source anymore - anyway. - SkyratBot: - - code_imp: protects the filename global regex + Elli-Skala: + - balance: nerfs ash walker bone spears to one range + RatFromTheJungle: + - rscdel: Removed the Singularity crate from cargo, to prevent it getting wiley + in the engineering wing. It couldn't even be used as a power source anymore + anyway. + SkyratBot: + - code_imp: protects the filename global regex + - balance: Nerfs the felinid tail grab mood buff. + - bugfix: You now only go on click cooldown if you actually threw something. + - bugfix: Changelings no longer get sent to Argentina when using last resort + - bugfix: Blind people and those without eyes are no longer affected by changeling's + last resort explosion. +2021-11-15: + Ebin-Halcyon: + - bugfix: Interdyne and DS-2 air alarms/fire alarms are properly oriented, defibrilators + are returned to their mounts + - bugfix: Constructed Turret Controls will no longer oddly overhang the wall they + were placed on. + - qol: Defibrillator mounts now better indicate which side of the wall they are + on. + - bugfix: Some instances where there were multiple identical lights on the same + tile have been fixed to only have one. + - imageadd: Turret Control frames now have a dedicated icon, rather than literally + using the APC image. +2021-11-10: + ATHATH: + - bugfix: Quantum pads can teleport non-living things again. + - bugfix: Quantum pads can teleport creatures who aren't buckled to something again. + Creatures who are buckled to something unanchored can still be teleported by + quantum pads, but creatures who are buckled to something anchored cannot. + - bugfix: Quantum pads can no longer involuntarily teleport ghosts, although ghosts + can still click on a quantum pad to teleport to that quantum pad's destination + pad. + ArcaneMusic: + - expansion: Cargo can now purchase individual tanks of exodrone fuel for around + 3 crates worth of credits. + Ghommie: + - bugfix: 'Fixed missing award icons in the achievement menu sprite: All achievements + outside the misc category have been given their own icons and should no longer + use the base background one.' + Guillaume Prata: + - bugfix: A small mistake on our contract with Nakamura Engineering made them supply + the station with Rad Insulated Atmos Hardsuits. The mistake was fixed so please + don't stand near the SM or the HFR with the hardsuit, it was never made for + that. + - bugfix: You can't put a PKA inside your Mining hardsuit helmet anymore but you + can put it in your hardsuit instead! + - balance: Pneumatic airlocks seals are normal sized now and can be printed at the + Science lathe. + - balance: After dealing with another weekly subverted Engborg spacing the armory. + CentCom's Robotics division decided to downgrade the Engborg RCD by removing + it's Reinforced Wall deconstruction. + Iamgoofball: + - bugfix: Fixes a grave oversight of being able to type with boxing gloves on. + JohnFulpWillard: + - admin: Silicon activity is now logged in silicon logs rather than being stuffed + into game.log + LemonInTheDark: + - bugfix: Fixed shoving being agressively weird, please report any oddities it's + a bit of a headache getting behavior to match and I'm flying a bit blind + Melbert: + - admin: Admins can now tell when other admins are readied up in the pre-game lobby. + Check adminwho or view your stat panel. + - bugfix: Icebox chapel maint is no longer spaced, literally + - bugfix: 'Icebox science: You can no longer peer into the science break room from + maintenance, the loose light fixture has been relocated to a wall, and scientists + can escape their own maintenance. Also the extra deconstructive analyzer was + killed.' + NamelessFairy: + - admin: Bans will nolonger play a video + Paxilmaniac: + - bugfix: a misplaced pipe in tramstation's atmospherics that was causing wrenched + down portable scrubbers to melt has been removed + That REALLY Good Soda Flavor: + - qol: You can drag a headset onto yourself to open the menu. + Timberpoes: + - refactor: Refactor parts of the job assignment system, unifying job eligibility + checks. + - qol: Adds improved logging for job assignment. + Wallem: + - qol: Ants have become easier to pour in tiles with vents, pipes or cables. + - bugfix: Makes ants incapable of affecting the afterlife. + - bugfix: Ants, gibs, and garbage cleanable decals now properly show up above pipes. + Watermelon914: + - bugfix: Fixed the response signal not being able to be connected to regular signals. + antropod: + - bugfix: fixed chem analyzer not showing impure reagents that don't have impure + chem (like multiver) + jjpark-kb: + - bugfix: 'metastation: placed some missing pipes and removed random wire in library' + jlsnow301: + - bugfix: Virology's PanD.E.M.I.C 2200 should no longer bluescreen + - refactor: The Pandemic machine has been refreshed and is more helpful, intuitive + to use. + timothymtorres: + - expansion: The smoker quirk has new side effects that cause a person's lungs to + have 25% less max health and healing. They also gain a 50% resistance from + lung damage caused from smoking. + - expansion: Exotic cigarette brands now deal different amounts of lung damage. + This applies to syndicate, shady jim's, xeno, and Little Timmy's Candy brands. + - bugfix: Fixed Havana cigars running out of nicotine. As a result of increasing + the starting nicotine amount, the total `chem_volume` was increased to allow + room for other chems to still be injected. +2021-11-11: + ATHATH: + - bugfix: The gluttony sin ruin is no longer radioactive. + Ghilker: + - expansion: add the manual crafting of many atmos devices by the crafting menu + Ghommie: + - expansion: Added a reagents scanner circuit component. + - bugfix: Fixed non-human and non-silicon mobs being unable to mine rock walls when + bumping into them. + - bugfix: The phobia of authority will no longer make mobs afraid of regular id + cards. + - expansion: Added a material scanner circuit component. + - bugfix: Stops the "You lack optic scanners, you get stunned" singularity event + from affecting blinded or dead mobs. + - bugfix: Blob structures can no longer be animated with bolts of animation. + - bugfix: Chimps no longer get grumpy when you hug them or throw things with no + throw force at them. + Guillaume Prata: + - balance: Due to budget cuts, the RPDs can't place transit tube under dense objects + like windows anymore. + JohnFulpWillard: + - admin: Priming grenades are now logged in individual's attack logs. + Justice12354: + - bugfix: Cyborgs can now shake up compromised carbons with the hugging module. + Krysonism: + - imageadd: The irradiated status effect has a new alert sprite. + LemonInTheDark: + - balance: The nob + antinob hfr fuel type is now limited to 1e8 instead of 1e8 + * 1.2 + Mothblocks: + - bugfix: Random names (such as from the secrets panel) will no longer override + your preferences. + Paxilmaniac: + - qol: the whiteship of tram station has been made much shorter, allowing for less + lag on movement and easier docking + Tastyfish: + - bugfix: The "Choking (No N2O)" alert now functions correctly. + darkmanx37: + - qol: Adamantine will now use it's own texture with color consistent to one of + the adamantine slime. + - imageadd: Adamantine textures. + remuluson2: + - rscadd: Added antivirus-protection to plasmaman suits and all its variants(the + entire set). + softcerv: + - bugfix: fixes the fall chance on mending globules to properly work as intended. +2021-11-12: + CocaColaTastesGood: + - bugfix: Fixes an exploit that allowed players to spawn crates marked as special. + Fikou: + - qol: spraycanning stuff now updates its sprites on the mob + Ghommie: + - expansion: The weapon description for energy guns now takes in consideration the + number of pellets the selected mode has. + Ghommie and MrDoomBringer: + - balance: The Syndicate's Robotics Division is glad to announce their line of Syndicate + Saboteur cyborgs hasn't been affected by CentCom's Robotics decision to downgrade + the Engiborg RCDs. This is because The Syndicate is not CentCom or Nanotrasen + despite what some tinfoil hat-wearing billies-bobs may say. + KathyRyals: + - rscadd: Felinids don't like getting sprayed with water. + - code_imp: Adds a new status effect, incapacitated, which causes your do_afters + to stop. + Melbert: + - rscadd: 'Kilostation: Cargo / Drone Bay remap, departures expansion.' + Mothblocks: + - bugfix: Antag HUDs will no longer clear on deconversion if the player was another + antag. + - qol: Antag HUDs (as seen by admins and at the round end) will now animate between + all antagonists, rather than just choosing the most latest. + Y0SH1M4S73R: + - bugfix: The color matrix editor now logs all modifications it makes to colors. + jlsnow301: + - rscadd: Vending machines now have nicer welcome screens + - refactor: Vending machine UIs now do not hide bank balance information while scrolling +2021-11-13: + CocaColaTastesGood: + - bugfix: Fixes an exploit in chef order console that let players potentially lag + the server. + - bugfix: Fixes an exploit that allowed players to purchase role restricted uplink + items that they shouldn't be able too. + KathyRyals: + - rscadd: You can now pull on a felinid's tail to make them happy! + Mothblocks: + - bugfix: Fixed traitor uplinks not letting you buy items that aren't restricted. + NamelessFairy: + - bugfix: CTF Downtowns bar stools face the right way now + - bugfix: CTF Downtowns bar stools have been bolted onto to the floor for insurance + purposes + RandomGamer123: + - bugfix: Scrubbers attached to the dorms public scrubber stations won't immediately + self-destruct from thermomachine waste heat anymore. + - bugfix: The Mix to Incinerator pipeline no longer interferes with HFR construction + in Tram atmospherics. + - qol: Adds N2 to Pure pump and pipes in Tram atmospherics. + - qol: Recolours Mix to Incinerator pipeline to dark rather than orange in Tram + atmospherics to match colouring scheme on other stations. + - qol: Renames old N2 to Pure pump to Air to Pure to reflect that it gives air mix + not N2. + Timberpoes: + - bugfix: The account registration device should no longer create ID cards that + cause vending machines to bluescreen. + - rscdel: Cryostasis pods have been removed from all maps and code. + Toastgoats: + - imageadd: Resprited hatchet inhands and made them face outwards. + esainane: + - spellcheck: Fixed a typo when resetting a multilayer cable + - bugfix: Some diagonal cameras are back to being placed on walls, instead of floating. + - bugfix: When it gets too much, ending it all with an atmospherics piece will now + always do something special. + tralezab: + - rscadd: replaced the request consoles in each department with department order + consoles, which order for free on a cooldown. cargo gets these orders and delivers + the crates, which are locked until delivery. upon delivery, cargo gets paid + the value of the crate, and can then sell the crate back on the shuttle. + - balance: cargo doesn't start with a budget, other departments get what their budget + was split up amongst them +2021-11-14: + Ghommie: + - bugfix: Fixed some potential issues that may lock the economy subsystem in "market + crashing" mode or accidentally clear it. + Iamgoofball: - balance: Nerfs the felinid tail grab mood buff. - - bugfix: You now only go on click cooldown if you actually threw something. + JohnFulpWillard: - bugfix: Changelings no longer get sent to Argentina when using last resort - bugfix: Blind people and those without eyes are no longer affected by changeling's last resort explosion. + Nanotrasen Medi-Sciences Division: + - qol: The medical holobarrier is slightly transparent to convey you can move through + it, as well as more animated! + TheFakeElon: + - code_imp: protects the filename global regex + Thunder12345: + - expansion: The option to choose your body type is now available to all characters + (with a gendered species) + - bugfix: You can no longer access the body type option on genderless species by + setting your gender to other then changing species. + necromanceranne: + - bugfix: You now only go on click cooldown if you actually threw something. + timothymtorres: + - qol: Crates that spawn in maintenance are now more randomized 2021-11-15: - Ebin-Halcyon: - - bugfix: Interdyne and DS-2 air alarms/fire alarms are properly oriented, defibrilators - are returned to their mounts + Arturlang: + - bugfix: The witchunter hat no longer hides your hair + Fikou: + - balance: space adaptation has been split into two mutations. pressure adaptation + giving you full immunity to pressure and temperature adaptation giving you full + immunity to temperature. these are not compatible with each other. + Ghilker: + - balance: Increase the CO2 SM heat penalty to 6 + Ghommie: + - bugfix: You can no longer challenge multiple elite mining mobs at once and get + potentially warped between two arenas because of it. + - bugfix: You can now lose against elite mining mobs even if you can't die (cough + cough Memento Mori) if you're over the minus 200 health threshold. Be careful + not to bite the dust. Ghommie (Thanks to dorsisdwarf for the idea): - balance: The detomatix cart now sends forged messages (name and job of the message can also be forged) that can explode a PDA when someone tries to reply to them @@ -571,37 +750,66 @@ SkyratBot: - bugfix: cargo consoles aren't breaking when department orders buys a canister. seriously though who buys canisters man + Mothblocks: + - bugfix: Team antag HUDs will now properly display when they should, and won't + display when they shouldn't. + - bugfix: Antag HUDs will now properly show on round end again. + jlsnow301: + - rscadd: All of your favorite simple bot friends aboard the station now have a + much better interface in TGUI + - qol: You can now lock and unlock bots, including their maintenance hatches, via + the UI. + tralezab: + - expansion: Traitor Flavor now displays on round end! +2021-11-16: + FernandoJ8: + - qol: changes the access requirement of chem lockers from chemistry access to pharmacy + access + Ghommie: + - expansion: Hydroponics tray USB port. + - expansion: Double beds can now hold two people at a time. + - balance: Double beds and double bedsheets, being double the size of normal beds + and bedsheets, just like their names suggest, now also cost double the materials + to craft and give double the materials when deconstructed. + Iamgoofball: + - balance: Gives Space Pirates a bonus to hijack speed on the shuttle, and allows + them to hijack. + Mickyan: + - balance: Wings now allow falling short distances without taking damage (you will + still suffer from knockdown) + RandomGamer123: - bugfix: Fixes the HFR (and other indestructible machinery with component parts) from being able to be blown up by external sources under special conditions. - bugfix: Fixes the nuke disk from being able to be made inaccessible by being placed in the center of the HFR. - - balance: Gives Space Pirates a bonus to hijack speed on the shuttle, and allows - them to hijack. + Thunder12345: + - bugfix: Atheists will no longer mistakenly attempt to get closer to a god they + do not believe in when committing suicide with their fedora + Watermelon914: - bugfix: Fixed the foreach and filter circuit component not functioning correctly. - - balance: Double beds and double bedsheets, being double the size of normal beds - and bedsheets, just like their names suggest, now also cost double the materials - to craft and give double the materials when deconstructed. itseasytosee: - imageadd: added a sprite for the sectile when worn on your belt. + - expansion: The Nanotrasen High Impact Weapons Division would like to apologize + for manufacturing a large quantity of dud onboard nuclear warheads. Following + a recall, we expect that the replacement batch of warheads will be 900% more + likely to Anhilate all life within its radius. + tralezab: + - bugfix: cargo consoles aren't breaking when department orders buys a canister. + seriously though who buys canisters man 2021-11-17: - ArdentSpark: - - code_imp: Renamed Monophobia, Mute and Joker variables for code readability, as - well as correctly placing Mute with the rest of the negative traits. - Gandalf2k15: - - server: MODULARISATION AUDIT 15/11/21 + Ghommie: + - qol: (Slower) Mobs won't look so jittery while being moved by the tram anymore. + - qol: This also applies to the tram itself. GoldenAlpharex: - code_imp: Improved the comfy chair's armrest code. - Iajret: - - bugfix: That one broken filter in SM Engine room now should work flawlessly on - all maps - ORCACommander: - - bugfix: Nanotrassen has issued repalcement installation manuals to its security - camera contractors. - SkyratBot: - - rscadd: Added two new fish to the aquarium - - rscadd: Added /datum/design/component/list_assoc_literal + Krysonism: + - expansion: Small and large plates have been added to the kitchen vend. + - expansion: Plates will now break when thrown. + - expansion: Carpskin suits and fedoras can now be crafted using carp scales. + LordVollkorn: - bugfix: Pure Inacusiate is now humanly possible to create - bugfix: Truly pure Multiver is much easier to achieve now + Paxilmaniac: - balance: the marine ert is no longer as vulnerable to atmospheric problems as before - imageadd: a new centcom themed combat uniform @@ -626,24 +834,273 @@ - code_imp: many spans to procs - bugfix: Departmental order consoles are now present on station 2021-11-28: + RaveRadbury: + - qol: You can now load plates onto trays + UnokiAs: + - imageadd: New barrier grenade sprite + - qol: Easier to differentiate the barrier grenade and flashbang + WarlockD: + - rscadd: Added /datum/design/component/list_assoc_literal + esainane: + - bugfix: UpdatePaths will now handle lists that contain strings. + - bugfix: Some diagonal cameras are back to being placed on walls, instead of floating. + For real this time, honest. + - bugfix: Special air alarms (syndicate, ruins, unlocked, engine, etc) should now + all be facing the correct direction. + - bugfix: IceBox's Mixing Chamber air alarm is now placed on the correct tile. + tralezab: + - rscadd: Added two new fish to the aquarium +2021-11-18: + Archemagus (aka Laxesh): + - bugfix: Now floorbot, will try to fix floors, not only when emagged. + Ghilker: + - rscdel: change the name of the "Cosa Nostra Starter Pack" to a more generic "Mafioso + Starter Pack", remove racist innuendo in the description + - rscdel: removed nitryl + - rscdel: removed stimulum + - balance: merged the two into nitryum that shares the two gases features and that + can make a crystal of itself in the crystallizer, the gas is made with trit, + nitrogen and bz at over 1500 K + - balance: the gas effect can be chosen by the partial pressure of the gas, low + pressure and you have the old nitryl effect, higher and you'll have both + Ghommie: + - bugfix: Fixed some issues with the PDA UI, such as the skill tracker app and the + messages list of the messenger app being inaccessible. + - balance: The HoS, warden and officers no longer spawn with a stunbaton in their + bags. + GoldenAlpharex: + - bugfix: Quantum pads have had their blueprint tweaked by Nanotrasen's finest Bluespace + Technicians, and will no longer break the laws of teleportation by teleporting + themselves when they shouldn't. + esainane: + - admin: The camera report verb now works... at least as well as it used to. + itseasytosee: + - bugfix: The correct cinematic now plays when nuke ops fail to escape the station + after blowing it up. + tralezab: + - bugfix: fixes an oversight where mime and clown couldn't use their own department + orders console +2021-11-19: ATHATH: - bugfix: Hulk punches now count as unarmed attacks for the purposes of blocking. - bugfix: Martial arts that grant their users the ability to block unarmed and melee attacks while they're in throw mode can now block hulk punches. - Archemagus (aka Laxesh): - - bugfix: Now floorbot, will try to fix floors, not only when emagged. - ArdentSpark: - - bugfix: 'Fixes engineering guard uniform: item sprite (No more ERROR)' - - bugfix: 'Fixes an economy exploit, moves Medibeam gun to cargo category: Miscellaneous' - - rscadd: Added Fragile quirk, which increases incoming brute by 1.25x and burn - by 1.2x - - bugfix: Restores Teshari Suit (Outerwear) and Hardsuit sprites. No more soft blood-red-hardsuits, - or coats covering your face. - AtoriBirb: - - rscadd: 7 sweaters already in the game to the under loadout datum + Archanial: + - bugfix: fixed stealthadmin nicknames should load now + Farquaar: + - imageadd: Added a contraband advert for a seedy lumber company + Ghommie: + - expansion: The "Ian's Adventure" station trait now makes Ian deadchat controllable + and gives him a couple extra lives (to survive early round tiding) + - bugfix: Cargo exports will now start deleting items only after everything is sold. + This will fix issues such as unachievable exports (like machine ones) and getting + less credits than what export scanners says. + - bugfix: Pacifists can no longer attach c4 to other living creatures. + JohnFulpWillard: + - bugfix: Cyborgs who perform research is now logged in the RD's server console, + rather than showing up as Unknown. + Tastyfish: + - bugfix: The crew monitor and crew manifest now correctly sort custom jobs according + to ID trim. + - refactor: Data cores now internally track ID trim when HoP updates cards, as well + as initial job. + - admin: The secrets manifest now also shows the registered trim for each player. + necromanceranne: + - bugfix: Having the bad touch trait correctly prevents you from gaining a good + mood event from being tail pulled. + phasenoisepon: + - rscadd: Wooden pews now require a wrench in hand to be rotated + timothymtorres: + - qol: Tracking beacons are now randomized (except arrivals) and added to several + new areas for all maps. + twilightwanderer: + - rscadd: Added a system of forms and the ability to print them +2021-11-20: + BlueMemesauce: + - bugfix: Metastation Cargo Warehouse Airlocks will no longer have a chance to become + bolted or turn into a wall + Fhaxaris: + - rscadd: If a clown car picks up a person that drank more than 30u of Irish Car + Bomb, the clown car will explode five seconds later in a half max cap sized + explosion. + Ghommie: + - bugfix: Donuts found in sec vendors and boxes can now be used to make glazed donuts + - bugfix: Fixed emptied shot glasses having the drinking glass filling icon. + Guillaume Prata: + - balance: To improve the forensics efforts and professionalism our Security staff, + evidence bags are standard equipment given to every member of security now. + Melbert: + - bugfix: Icebox mining outpost's doors are powered properly + - bugfix: Icebox service sinks are plumbed correctly and don't have ducts sticking + out, also botany no longer has ducts around trays + - bugfix: Icebox kitchen now has universal enzyme + TacticalTortoise: + - bugfix: Deltastation - Teleporter room shutter button opened the wrong shutter + - bugfix: Iceboxstation - Service exit to Iceland was not properly marked + - bugfix: Kilostation - Kitchen shutters were not affected by button + TheBonded: + - bugfix: Aspiring xenobiologists and ambitious wizards can no longer mindswap into + ghost poly or otherwise make them sentient in an attempt to gain godmode + ghost + speed + the ability to go through walls. + Watermelon914: + - expansion: Shells that require anchoring to work now take their power from the + room's APC rather than their cell. They can still use their cell as a backup + battery. If they take too much power in a short period of time, they'll blow + up and eject the circuit. You can examine the shell to see if it requires a + cell to function. + jlsnow301: + - bugfix: Fixed some logic errors in vendor prices. Offstation items are free once + again. Discounted items still give + - bugfix: Crafting while in the crafting menu now properly dims the entire crafting + list. + - bugfix: Mulebots no longer runtime + raffclar: + - bugfix: When a TGUI web page is refreshed, send new data to that page. + timothymtorres: + - qol: Add several new cosmetic random spawners to Tramstation that affect different + locations. (mostly maint) + - qol: Add several new cosmetic random spawners to Metastation that affect different + locations. (mostly maint) +2021-11-21: + Burgermancoding: + - code_imp: Change the description and name of the Mafia set from cargo back to + Cosa Nostra + Timberpoes: + - admin: Non-deadminned admins are now exempt from all chat filters. + Watermelon914: + - admin: Players can now send urgent ahelps when no admins are on for potentially + better responses. + Zytolg: + - expansion: Renovations on the Cosmos Space Hotel in the local sector have been + completed. + esainane: + - bugfix: All wall mounted dispensers - that is, the virus food dispenser and the + pepper spray dispenser - are now considered wall items, instead of just the + pepper spray dispenser. You can no longer use a metal sheet on it to turn it + into a plumbed "stationary dispenser". You can still use metal sheets on mobile + tanks to turn them into plumbed stationary dispensers. + vincentiusvin: + - bugfix: fixed icebox ordnance burn chamber's air alarm working for the wrong area +2021-11-22: + Colovorat: + - expansion: Stun Batong now turns off/on constantly for short time after emp + GoldenAlpharex: + - bugfix: Votes now work again. + JohnFulpWillard: + - bugfix: Missing HUD icons (Defib, clown/mime fan) once again show up. + Wallem: + - bugfix: People with robotic limbs are now incapable of using Sign Language if + their limbs are disabled. + - refactor: Refactored Sign Language +2021-11-23: + ArcaneMusic: + - expansion: Laundry machines can shrink particularly old, worn t-shirts. Remember + kids, hand wash only. AyyRobotics(Original PR), AzlanonPC(Sprites), Aspev(SafetyMoth): - rscadd: Added Safety Mothposters! - imageadd: Updated contraband.dmi to add new poster icons. + BlueMemesauce: + - qol: Adds Supply Request Consoles to cargo lobbies. + Colovorat: + - qol: Bonfire can be made with wood + Farquaar: + - imageadd: Due to lobbying pressure from the Yee-haw Conservation Society, Nanotrasen + vending machines now stock five new cowboy hats and an old-west vest. + Ghommie: + - bugfix: Fixed a mistake that made space bartenders sad (drinking glasses looking + all the same regardless of drink). + - bugfix: Hair gradient preference no longer shows for species that don't have hair + - bugfix: Abandoned crates no longer delete living mobs or indestructible objects + inside them when exploding. + - bugfix: They also no longer explode when deconstructed/emagged while unlocked. + - bugfix: Their anti-tampering mechanism will now properly reactive if locked again + after being unlocked. + GoldenAlpharex: + - bugfix: Areas loaded from map templates should generate their lighting objects + upon being loaded, which means that admin or game-spawned map templates will + now have functional lights. + Iamgoofball: + - expansion: The bureaucratic mistake station trait can now truly chose any job. + Melbert: + - bugfix: Harvesting plants says the correct number of produce again + - bugfix: Fixes random ice turf in icebox's bar + Ryll/Shaps: + - expansion: You can now *swear + axietheaxolotl: + - imageadd: new and redone HoP uniforms +2021-11-24: + Ghilker: + - bugfix: fix message spam for manual pipe crafting + - code_imp: space heater now process on process_atmos() + Ghommie: + - spellcheck: Fixed a mistake in the Drone repair message feedback when repaired + by someone else. + - expansion: Handheld cameras (not the wallmounted security ones) can now be used + as circuit shells. + - bugfix: Lavaland ash storms once again replenish basalt turfs. + - bugfix: Vampire victims no longer receive messages about bloodsucking while unconscious. + Guillaume Prata: + - expansion: Ethereal lungs can be printed with a limb grower now. + LemonInTheDark: + - bugfix: Fixes the master controller dying in a rare case of the godslayer armor + Melbert: + - refactor: Refactored cult rune inscribing into a component + - refactor: Refactored null rod rune clearing into a component + Mothblocks: + - admin: The admin who adds a known alt is now logged in the table. + - rscadd: Added a station trait for varying colored assistant jumpsuits. + - admin: Added options to disable footstep sounds and parallax to the lag switch + panel. + - bugfix: Fixed comms console not acknowledging admin rejects. + - bugfix: Fix the space dragon's rift not healing the dragon. + OrionTheFox: + - bugfix: Catwalk Tiles will now properly show underfloor items + PositiveEntropy: + - 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! + - rscdel: Removes the Black Female Suit and Black Female Suit Skirt + RandomGamer123: + - bugfix: Certain pumps/filters in atmospherics and engineering now show their more + descriptive names which haven't been showing up properly for months. + Seris02: + - code_imp: better logic for plural_s() + Wallem: + - expansion: Glass & Reinforced glass floors are now craftable. + dragomagol: + - admin: hypnotized players now have a visible antag hud, are visible in the check + antag panel, and have objectives visible on the traitor panel + - expansion: hypnotized victims and their objectives are now visible on the round + end report + tralezab: + - rscdel: Batform is gone! + - rscadd: "...Replaced by vampire houses as a preference. Join your department as\ + \ a vampire m\xE9nage!" + - bugfix: department order consoles include circuitboards +2021-11-25: + Drag: + - expansion: Changes "says" to "chirps" for all slimeperson subtypes + Mothblocks: + - bugfix: Fixed vampire clan last names applying to everyone. + ShizCalev: + - bugfix: Fixed ghosts' boo ability going on cooldown when the light they tried + to flicker didn't flick + SuperNovaa41: + - bugfix: Armless people can now open emergency access doors. + - bugfix: You can tie your shoes in-hand again. + - bugfix: You can no longer try to tie lace-less shoes. + - bugfix: Toy shotguns (and toy crossbows) can be fired with only one hand again. + TheBonded: + - qol: Spades can now be used to dig up botanical soil plots as well as shovels. + - qol: Digging up botanical soil plots has been changed to a right click action. + Left clicking with a spade still uproots plants as expected. + tastyfish: + - bugfix: The captain is now at the top of the crew monitor again. + tralezab: + - bugfix: fixes non-chaplains being able to invoke rites + "\u041F\u0435\u043B\u044C\u043C\u0435\u0448\u043A\u0430": + - bugfix: You could see parallax over blackness +2021-11-26: BastardBlaster: - bugfix: Cyborgs and those with rad immunity will no longer get the radiation burn message when near something being dusted by the supermatter. @@ -758,6 +1215,12 @@ - code_imp: space heater now process on process_atmos() - bugfix: fixed stealthadmin nicknames should load now - bugfix: department order consoles include circuitboards + KathyRyals: + - balance: Heretics no longer gib their target when sacrificing them, instead outright + killing them and spilling all their organs everywhere in a gruesome manner. + Melbert: + - bugfix: Spading plants correctly updates the tray icon again + Mothblocks: - rscadd: Added back dissection surgery, which can be used with an operating computer to perform experiments for research. - rscadd: Biological technology's requirement has been changed from scanning one @@ -981,6 +1444,84 @@ zydras: - balance: Quartermaster now requires 40hr of Supply playtime, like every other Department Head requiring 40h of their department's. + PositiveEntropy: + - imageadd: In no short effort of our best tailors, every Central Command outfit + have been either redesigned or reshaded! All of them! + TheBonded: + - qol: Chairs and beds are now deconstructed with right click, making them more + consistent with other object deconstructions. + itseasytosee: + - imageadd: added new sprites for the energy axe + jlsnow301: + - bugfix: 'Scams Deleted: You will no longer be charged full price for items listed + as discounted in the vendor.' +2021-11-27: + Gandalf2k15: + - balance: Diagonal movement is now slightly faster + Ghommie: + - expansion: Gradients can now be applied to facial hair too. + - expansion: 'Two new hair gradients: Striped horizontal and Striped vertical.' + - bugfix: Fixed the dye kit missing a lot of checks which made it able to dye mobs + out of reach or while incapacitated. + - bugfix: Fixed clown mobs spawning banana peels on turfs they can't reach or while + inside objects. + - bugfix: Some things such as heretic influences won't spawn on open space anymore. + HarseTheef: + - bugfix: The space heater right click toggle now works correctly. + - bugfix: Pipe layer changes now occur on right + alt click + JohnFulpWillard: + - bugfix: Bots will no longer turn invisible when being turned on/off + Melbert: + - expansion: The Fission360 has been upgraded, operatives. Examining a tablet running + the Fission360 when a bomb is armed will show you the time remaining until detonation, + and it can now point back to the Infiltrator. Hopefully you'll stop missing + your pinpointers now. + - expansion: The Syndicate Infiltrator is now a point of interest in the orbit menu + that ghosts can jump to. + OrionTheFox: + - rscadd: Added new reskins of the Catwalk Tiles, which will blend better with other + types of floor! These can be selected via a radial on the base catwalk tile, + crafted with iron rods. + - expansion: Floorbots will automatically place catwalks when they're in a maintenance + area, and will repair damaged/burnt tiles rather than fully replacing them. + - bugfix: Floorbots will actually place a plating when repairing a breach with tiles, + rather than haphazardly laying a tile that has space below it. + cacogen: + - rscadd: Adds timezones to US Thanksgiving so it's active on the server when it's + celebrated in real life + carshalash: + - expansion: Abductors now have a limb grower to play with, for scientific purposes. + Brain traumas are no longer forced after abductions. + tralezab: + - bugfix: prison plates have fixed text in some interactions +2021-11-28: + Ghommie: + - expansion: Falling for a pda bomb will now net you an achievement. + MMMiracles: + - expansion: Tramstation's Security has been transformed to accommodate a genpop + prisoners of all kinds to mingle together. + - rscadd: Genpop removes the usual isolated timed cells and adds the ability to + assign timers to prisoner IDs for holding them in a general prison area. + Mothblocks: + - bugfix: Fixed tend wounds being inacessible without an operating table + computer. + alexkar598: + - bugfix: Fixed the bitfield_to_field() proc not working + tf-4: + - code_imp: GAR glasses are now (mostly) subtypes rather than all their own thing + - qol: GAR glasses now layer above hair, rather than under it. +2021-11-29: + Ghommie: + - bugfix: 'Fixed yet another couple TK teleportation tricks: airlock notes and cloth + cut from gauzes.' + - bugfix: The camera circuit will now actually work. + MMMiracles: + - bugfix: The Tramstation Tram no longer force unbuckles you from chairs/vehicles + when moving. + Pickle-Coding: + - spellcheck: Captain's wintercoat now has spaces separating between some words. + tralezab: + - rscadd: Malfunctioning Ais now roll for backstory, much like traitors! + - expansion: Malfunctioning Ais now get a unique antag panel! 2021-11-30: GoldenAlpharex: - bugfix: Elevators are no longer defying the laws of physics and therefore can @@ -999,3 +1540,9 @@ - bugfix: Some erroneous green paint has been scraped off the hydroponics airlocks. - imageadd: The blast cannon & blast wave projectile has new sprites. - bugfix: The camera circuit will now actually work. + Krysonism: + - imageadd: The blast cannon & blast wave projectile has new sprites. + Melbert: + - rscadd: Deltastation - Service and arrivals complete revamp! Cargo tweaks! + Thunder12345: + - bugfix: Some erroneous green paint has been scraped off the hydroponics airlocks. diff --git a/html/changelogs/archive/2021-12.yml b/html/changelogs/archive/2021-12.yml index 3bf2ee67696e4..a02076e36e391 100644 --- a/html/changelogs/archive/2021-12.yml +++ b/html/changelogs/archive/2021-12.yml @@ -1,6 +1,18 @@ 2021-12-01: SkyratBot: - imageadd: Resprited the lipsticks + FernandoJ8: + - imageadd: Resprited the lipsticks + Fikou: + - bugfix: fullauto now checks for incapacitated instead of stat + HarseTheef: + - bugfix: Baseball bats now correctly knockback targets in the direction of the + bat to the target. + Mothblocks: + - bugfix: Fixed nuke ops leader not having an antag HUD to other nuke ops. + Sealed101: + - expansion: Added ventriloquism to disembodied heads. + jlsnow301: - refactor: pAI interfaces have been converted to TGUI. - refactor: Requesting a holographic pAI friend now correctly notifies ghosts of your loneliness. @@ -44,6 +56,43 @@ - bugfix: Fix telecomms relays to work across multi-z - bugfix: Fixes an exploit with regenerative mesh and burn wounds. - code_imp: increased atmos performances a bit more + Aerden: + - bugfix: Fixed being scared of the dark even if you have mesons. + Ghilker: + - code_imp: increased atmos performances a bit more + - balance: gasmasks give a slightly darkening overlay, effect will stack with other + items that have tint. + - code_imp: tint code has been updated to properly work. + Ghommie: + - expansion: Synthesizers and headphones can now have circuits installed. + - bugfix: The ship-in-a-bottle is now resistant to icebox/snowdin plasma rivers. + GoldenAlpharex: + - bugfix: Numpad keys are now properly recognized by the keybinds menu. + Guillaume Prata: + - expansion: After a short break, the Supermatter is back again at the her hard + working and slightly different Pluoxium generation business. + - bugfix: Swaps the engineer jumpsuit description still referencing them being resistant + to radiation, now it correctly reference them being resistant to fire. + - bugfix: Fixes a rogue airlock at the SM room on Icebox having the wrong access + requirement. + Iamgoofball: + - balance: Downgrades the purchasable knives in cargo from Combat Knives to Survival + Knives, moves them from Security to Service. + JohnFulpWillard: + - balance: the Head of Personnel no longer has access to Security Office nor Mechs + (outside of mining ones). + Melbert: + - bugfix: Mjol the Creative's summons can't be dispelled by observers anymore + - bugfix: There is now the proper amount of ORMs in Deltastation's Cargo. + - bugfix: Service jobs can leave the Deltastation Service Hall through maintenance + Mothblocks: + - balance: The Irish Car Bomb + clown car interaction has been nerfed from a big + gibbing explosion to throwing out all the mobs (with the usual chance of spilling + out slipping foam) + OrionTheFox: + - qol: Catwalk Tiles now have unique names, so hovering over them in the radial + menu will tell you the type! They're also recyclable now! + Pickle-Coding: - balance: Proto nitrate BZ reaction will now produce gases, instead of just deleting BZ. The gases it produces is nitrogen, helium, and plasma. - balance: Tritium combustion and proto nitrate tritium response will release radiation @@ -74,6 +123,33 @@ - bugfix: The lathe in Deltastation's service hall can print circuit boards again. Reco201: - bugfix: Cyborg pka can now be seen again. + SuperNovaa41: + - bugfix: Fixes an exploit with regenerative mesh and burn wounds. + Tastyfish: + - spellcheck: Made reagents consistently capitalized. + Thunder12345: + - expansion: Tram Station's vault has been moved to the service wing, next to tool + storage. + Timberpoes: + - admin: Improved logging for radio emotes in game logs and player panel logs. + Twaticus: + - imageadd: Makes mob ID sprites smaller, mob PDA sprites more consistent + dragomagol: + - bugfix: ED-209s can be constructed once more! + tf-4: + - bugfix: TK can no longer be used to teleport onto weight machines. + timothymtorres: + - bugfix: Fix telecomms relays to work across multi-z + vincentiusvin: + - bugfix: tanks being destroyed in cans/pumps/scrubbers wont cause errors now +2021-12-03: + AffectedArc07: + - bugfix: Fixed some bugged lighting + Ghommie: + - bugfix: Fixes the cult sacrifice softlocking if the target is deleted before being + sacced. It'll reroll a new target if that happens. + Melbert: + - bugfix: The lathe in Deltastation's service hall can print circuit boards again. Ryll/Shaps: - admin: Simplified the "Transformation/Rudimentary Transformation" part of the admin player panel, you can now choose from ghost/human/monkey/cyborg/AI, and @@ -108,6 +184,23 @@ - rscadd: Microfusion cell tech tree. - balance: Reload times now take an amount of time. - rscdel: Removed proprietary temporary hardlight guns. + - qol: made hair gradient color preferences not show up if no gradient is selected + axietheaxolotl: + - rscadd: Pride Pins + carshalash: + - imageadd: Fire mutation now has the sprite of old space adaption while Pressure + is a blue version of it. + jlsnow301: + - bugfix: Removed two map-based runtimes for Syndicate Lavaland Base and The Derelict + tf-4: + - admin: You now have to confirm that you want to reset the station name from the + secrets panel. + - bugfix: Blind people now get a chat message when being cuffed. +2021-12-04: + Ghilker: + - bugfix: fix an oversight where sec hailer shouldn't have the tint changes, the + eye protection and the pepper immunity. All other sec masks (the swat and spacepol) + are unchanged GoldenAlpharex: - bugfix: Nanotrasen's Paranormal Containment team had some budget cuts, meaning that ghosts are no longer stripped of their hair colors- You can finally sport @@ -162,6 +255,45 @@ - admin: Ambitions now count towards tickets handled - balance: Captain and NT Rep gunsets have been removed in favour of energy guns. - rscdel: References to players removed from cargo freighter space ruin + HarseTheef: + - bugfix: Forged agent id cards will no longer break wallets + JohnFulpWillard: + - admin: More Silicon related loggings have been moved to silicon logs. + LemonInTheDark: + - bugfix: The job overflow station trait will now work again. I look forward to + infinite captains + - bugfix: Fixed solars and nearstation areas being pitch black, restores the fullbright + they ought to have + MMMiracles: + - rscadd: You can now run over the goat plushie. + Mickyan: + - spellcheck: Looking up in space no longer says there's a ceiling. There's no ceiling + in space, promise. Please don't try to look for it. + Mothblocks: + - admin: Crafting is now better logged. + - bugfix: Fix all tend wounds showing when selecting a surgery after upgrading. + Paxilmaniac: + - balance: allows the attaching of bayonets to pipe guns + Potato-Masher: + - expansion: Metastation - A near complete remap of the atmospherics section of + the station. Functionally the same, but with added space for projects, the HFR, + and an included basic crystallizer setup. + - qol: Minor atmospherics adjustments to metastation's xenobiology satellite, the + slime euthanization chamber cooling loop has been prettied up and starts with + CO2 already inside to ensure the freezer works immediately with no setup. + ShizCalev: + - bugfix: Fixed mapeditted scrubbers and vents having the incorrect names. + jlsnow301: + - rscadd: Saving pAI candidacy information now outputs an error when unsuccessful. + - rscadd: pAIs now get a door jacking progressbar. It remains obscenely slow, though. + - bugfix: Fixes not being able to access pAI config if it's slotted into your PDA. + vincentiusvin: + - qol: Wired glass tiles need iron to make it a full fledged floor, this is now + explained in the examine message. +2021-12-05: + TheBonded: + - rscadd: You can now tan wet hide into leather by lighting it on fire or placing + it on a bonfire grill. 2021-12-06: GoldenAlpharex: - bugfix: Meat and pizza walls and floors should no longer cause a runtime every @@ -190,6 +322,29 @@ - bugfix: The undercharger now actually functions as intended, removing recoil when on, and adding it when off. - balance: Phase emitters increase by 500 C per level instead of 1000 C. + Melbert: + - bugfix: Chefs on Deltastation can now tussle in their Cafeteria. + Paxilmaniac: + - bugfix: the duplicate rack space in meta's service hall isn't duplicate anymore + - bugfix: Mismatched door ids on the starboard side of pirate shuttles will no longer + prevent egress from that side of the ship + RandomGamer123: + - bugfix: Locked circuits cannot have USB cables attached to them anymore. + Y0SH1M4S73R: + - bugfix: BCI manipulation chambers no longer drop the contained BCI when opened. + maxspells: + - bugfix: health scan, gas scan, and atmos scan results will now show up on info + tab instead of the local tab + tralezab: + - bugfix: You can now deliver kilo department orders (the delivery area didn't exist + on kilo) + - bugfix: ethereals no longer get the "he" pronoun accidentally + vincentiusvin: + - bugfix: fixed APC making too many damage runtimes. +2021-12-07: + Ghommie: + - bugfix: Fixed the strip menu not being warded against telekinesis shenanigeans + (No item was stripped from longer distances, but warnings were still sent). GoldenAlpharex: - imageadd: NanoTrasen's Bench Tailoring department has worked hard on fixing an error in their factory line that resulted in every bench cover being darker @@ -244,6 +399,41 @@ They will be on by default. - rscadd: IV drips now cause a moderate pierce wound when ripped out - bugfix: You will once again see events that required a playercount to run. + Pickle-Coding: + - spellcheck: Mime finger gun description now states that it mutes your target instead + of stunning. + RandomGamer123: + - expansion: IV Drips can now have their insertion rates finetuned to anything between + 0.1-5u/cycle. + - bugfix: Screwdrivers can now be inserted into the destructive analyzer through + left-click + tastyfish: + - rscadd: New skill tracking app for your PDA's called ExperTrak Skill Tracker. + tralezab: + - bugfix: chaplains can once again convert themselves into an android + - qol: Added a help tab for learning some cargo delivery systems and department + orders as a concept + - bugfix: Ais no longer get the wrong antagonist added to them from "everyone is + traitor" secret +2021-12-08: + Amrabol: + - qol: Job specific bags can now be carried on labcoats, wintercoats and apron suit + storage slot + - rscadd: Added tray sprite to mirror_belt.dmi + Capsandi: + - rscadd: There's been a Moffuchi's Family Pizzeria on the surface of the icemoon + but we only just noticed it + FernandoJ8: + - imageadd: Resprites all of the abductors surgical tools + Ghommie: + - refactor: Refactored and standardized multiz movement code. This should fix some + issues about it. + - qol: You can now drag movables, ride vehicles and fireman carry mobs upstairs + and downstairs. + Iamgoofball: + - qol: Leaders are now distributed evenly among the Families. + - qol: As a result, the Families rulesets now only require 3 people to start, instead + of 9. - bugfix: You can no longer become a Family Leader as a restricted role, such as a Head of Security. - admin: Admins can now promote people to Family Leader with a button from the traitor @@ -260,6 +450,63 @@ SkyratBot: - bugfix: Fixed the strip menu not being warded against telekinesis shenanigeans (No item was stripped from longer distances, but warnings were still sent). + JohnFulpWillard: + - bugfix: Magic mirrors will now allow you to swap species again. + Mothblocks: + - bugfix: Fixed away missions not loading when the config was enabled. + Pope: + - bugfix: fixed an issue in orion.dm and orion_event.dm to let silicon play orion + trail + RandomGamer123: + - bugfix: Transit tube dispensers will no longer eat up immovable rods. + SuperNovaa41: + - bugfix: The maroon objective will no longer fail due to your target being borged. + - bugfix: Bardrones no longer recieve tools. + tralezab: + - bugfix: Department orders no longer bugs out and asks you to take the deliveries + to central primary hallway +2021-12-09: + FA120: + - expansion: adds health to the crew monitor's usb table + FernandoJ8: + - rscadd: IV drips now cause a moderate pierce wound when ripped out + Gandalf2k15: + - bugfix: You will once again see events that required a playercount to run. + Retlaw34: + - imageadd: New suit storage sprites + jlsnow301: + - rscadd: TGUI input boxes are on the way! You can find new preferences in the menu. + They will be on by default. +2021-12-10: + AnturK: + - rscadd: You can now become patron of your favorite painting by buying sponsorship + from Nanotrasen Trust Foundation. + - rscadd: Painter's palettes are now available at library vendor. + - qol: Can use strokes in paintings now + Fikou: + - expansion: dunking cold people in the deep fryer causes fun stuff + - expansion: dunking the Freeze Cube artifact from lavaland causes !FUN! stuff + LemonInTheDark: + - code_imp: I've changed how job equipment and organs are loaded, if you end up + with someone else's head/id card/eyes, please let me know yeah? + - code_imp: The preferences menu is now much more efficient. Hopefully you'll see + less small jitters at highpop. + - bugfix: You can no longer use the disease browsing console to summon satan + - bugfix: The disease browsing console will now properly show you the mobs the disease + effects + SuperNovaa41: + - bugfix: AI shells will no longer be instantly converted into a construct shell + by the Twisted Construction spell. + - bugfix: Fixes clothing protection tags being displayed incorrectly. + TheBonded: + - bugfix: you can no longer buckle onto chairs that are under dense atoms (like + machines) + cacogen: + - bugfix: Burnt-out flashes once again update their in-hands correctly + - bugfix: Flashing no longer goes through when the attempt has burnt out the flash + twilightwanderer: + - bugfix: Hints in bureaucracy forms + vincentiusvin: - bugfix: Plasma material objects that didn't spawn plasma gas when ignited due to weird code reasons will now do just that. - bugfix: Fixed plasma material objects exploding when used with condenser. @@ -298,6 +545,10 @@ SkyratBot: - bugfix: Closing the confirmation alert from headcrabs will no longer continue to headcrab you. +2021-12-11: + CandleJaxx: + - bugfix: edited runechat layers for clarity and consistency with old PRs + EOBGames: - rscadd: 'The release of the new cookbook, "Mothic Cuisine: of Fleet and Flotilla" 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 @@ -436,6 +687,124 @@ SkyratBot: - bugfix: CentCom has finally begun shipping helmets with working flashlight mounts to Deltastation's armory. + Jackraxxus: + - bugfix: Deconstructing an active AI shell will no longer ghost the AI inhabiting + it. + JohnFulpWillard: + - bugfix: Closing the confirmation alert from headcrabs will no longer continue + to headcrab you. + LemonInTheDark: + - code_imp: Fixed some really insane move counts that were sourced from Login() + betraying me. I've killed it now so there should be slightly less stutter sometimes + depending on the weather and position of the moon + Melbert: + - bugfix: Fixes a runtime with starlight condensation + RandomGamer123: + - bugfix: Drones can no longer use the keycard authentication device. + - bugfix: Nuclear operatives will only win if they actually nuked the station and + didn't nuke space instead. + Seris02: + - bugfix: fixed bots getting stuck on railings and crashing anyone with a diagnostic + hud who dares come near + SuperNovaa41: + - bugfix: Pruno fermentation uses up the mix upon turning into pruno. + - bugfix: F2 works for quick screenshotting again. + carshalash: + - balance: Nerfs level of toxin/venom spat out by spiders. + jlsnow301: + - bugfix: Turning off tgui inputs in game preferences now disables tgui input lists. + - refactor: 'Converted several list inputs to tgui, including: Many AI functions, + wayfinders, most cult inputs, observer functions.' + tf-4: + - bugfix: A lack of candidates for certain antags will no longer runtime +2021-12-12: + Iamgoofball: + - admin: Admins are now told what Theme that Families has rolled. + JohnFulpWillard: + - bugfix: Bot covers now respect access again. + LemonInTheDark: + - bugfix: Fixed hitting a move input inside a small grace period in move code leading + to teleportation. It's a side effect of when movement used to be verbs, and + holding a button down meant constantly sending the server move commands + Pepsilawn: + - qol: Account registration devices will now tell the user their new account ID + number, previously unobtainable. + - rscadd: Account registration devices added to service and cargo techfabs. + TheBonded: + - admin: makes (the logging of xenobiology renaming potions better) + jlsnow301: + - refactor: Several input prompts have been converted to TGUI. Nukie prompts, newscasters, + stacks of materials, hand labelers, station charters. Check them out! + tf-4: + - bugfix: Cameras will no longer runtime if the mob has no client +2021-12-13: + Bumtickley00: + - qol: Health analyzers have had significant readability improvements! + - qol: Health analyzers now display allergy information when performing a reagent + scan. + - qol: Health analyzer limb readout toggle moved from a verb to alt-click. + FernandoJ8: + - bugfix: Removes hypnosis from the list of traumas neruwhine can cause, fixing + a pair of related bugs. + Ghommie: + - admin: PDA bomb logging shouldn't be as confusing now. + GoldenAlpharex: + - qol: Plexagon is happy to announce its newest patch, which addresses a highly-requested + quality of life change, consisting of adding the name of the person which had + their ID modified to the name of their access report printout. + - bugfix: The Access Report from the Plexagon Access Management app will now be + smarter and actually remember who it was prepared by, even if the ID used for + the login was removed before printing said Access Report. + JohnFulpWillard: + - bugfix: HoPs can now use security record consoles again. + LemonInTheDark: + - bugfix: Removed a hidden doublepipe, you'll never find the rest, FOOLS + Melbert: + - bugfix: You can actually reskin the pride pin now + OneAsianTortoise: + - bugfix: cigarette pack has correct sprite now. + RandomGamer123: + - bugfix: Cyborgs can no longer attack clown cars when inside them. + unit0016: + - bugfix: The archmagister's ID card icon now exists. Whoopsies. +2021-12-14: + Iamgoofball: + - bugfix: Fixes being able to telekinesis through cameras. + - bugfix: Fixes being able to telekinesis across z-levels. + Mothblocks: + - bugfix: Fixed the skin tones on the preferences menu not having colors. + - bugfix: Jumpsuits, such as in species icons, are now grey again instead of white + on the preferences menu. + tralezab: + - bugfix: fugitives are now their own antagonist toggle, instead of polling for + traitors for some reason +2021-12-15: + Azarak: + - rscadd: Gas Masks now limit your field of view + - rscadd: Added field of view mechanics. It's darkness can be tweaked by a pref + - rscadd: Blind, nearsighted and fov-limited people will now see sounds as visual + effects. + Ghilker: + - bugfix: fix oversight where HFR can EMP its own APC + LemonInTheDark: + - bugfix: Fixed gas flowing into windows from above, I am.... so tired + - bugfix: Fixes gas sometimes not moving up from below after a structure change, + see above + Sealed101: + - bugfix: CentCom has finally begun shipping helmets with working flashlight mounts + to Deltastation's armory. + armhulen: + - refactor: Mob spawns are refactored, no more assortment of "random, instant, and + roundstart" vars on every mob spawn type + - refactor: if there are some minimal differences in how mob spawners feel, that's + why! + gbfree: + - bugfix: fix kilostation emergency pods controls staying locked at red and delta + alerts +2021-12-16: + SuperNovaa41: + - bugfix: Fixes the security warrant computer runtiming if you have no ID. + jlsnow301: - bugfix: TGUI text input will now let you submit default values without rewriting the input - bugfix: TGUI text and number input will now accept pressing ENTER anywhere on @@ -485,6 +854,28 @@ - bugfix: Fixed gas flowing into windows from above, I am.... so tired - bugfix: Fixes gas sometimes not moving up from below after a structure change, see above + vincentiusvin: + - bugfix: fixed rough iron false wall telling you that you need two rods instead + of five. + - bugfix: fixed rough iron wall dropping two rods instead of five. +2021-12-17: + Azarak: + - bugfix: Fixes some effects appearing below mob (smoke, blur, chairrests) + - bugfix: Fixed FOV not applying if you were inside contents of something + LemonInTheDark: + - bugfix: Cat ears will no longer display only on every other render in the preferences + menu. God who added these things + RandomGamer123: + - bugfix: Stops malf AIs in intellicards from activating doomsday device. + tralezab: + - bugfix: fixes fugitives preference having missing textures +2021-12-18: + Iamgoofball: + - bugfix: Fixes Families runtimes and not making enough gang leaders + JohnFulpWillard: + - spellcheck: Fixed a small typo in Cargo's mail console, saying mail had homing + beacons in them. + LemonInTheDark: - bugfix: Fixes shoving people into lockers sometimes trapping them in lockerspace. Crummy vacation destination, don't go there. - bugfix: Fixes directional shoving just not working @@ -536,6 +927,60 @@ - balance: Changes how TK is identified. - code_imp: Swaps which particles the TK movement points to. SkyratBot: + Melbert: + - bugfix: Placing tiny fans in the aux base gives feedback + - bugfix: Breaking / deconstructing aux base turrets no longer brick the console + Pepsilawn: + - bugfix: The rat spit's OD effect will no longer repeat on players already under + the Rat King's rule. + ike709: + - bugfix: Fixed a bug with taste description generation for fruit wine. + jlsnow301: + - bugfix: Bot cover lock button is now disabled when you lack sufficient access. +2021-12-19: + RandomGamer123: + - bugfix: When the nuke goes off, the "you are shredded to atoms" message no longer + 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. + SuperNovaa41: + - bugfix: Fixes being able to table slam through impassable objects. + - bugfix: Nested containers (lockers, crates, etc) can be resisted out of. + jlsnow301: + - bugfix: TGUI list input will now respond to having large/swapped buttons in preferences. + - bugfix: BYOND functionality restored in TGUI input lists - keyboard support. Up/Down, + type a letter to jump to it (while search is not visible). +2021-12-20: + Fikou: + - bugfix: neurotoxin spit no longer hits the xeno that spat it + JohnFulpWillard: + - bugfix: Enemies of the State and (Command-only) Enemies of the Revolution are + now ACTUALLY blacklisted from being defibrilated. + - bugfix: Basic mobs (Cows, cockroaches), count as Animals for the DNA vault. + - bugfix: The Pirate's shuttle scrambler will now ONLY work if you tell it to. + - admin: Actions done from the R&D console is now logged + MMMiracles: + - bugfix: "The prison gate in Tramstation's Prison is no longer made of Papier-m\xE2\ + ch\xE9" + SuperNovaa41: + - bugfix: Ninjas can no longer call reinforcements if the comms console is depowered + jlsnow301: + - bugfix: Camera consoles now require you to be close by and alive in order to operate. + - bugfix: TramStation's tram console is no longer shifted over to the right + - bugfix: Mr. Pingsky no longer spams AI private because he wants to leave AI satellite + but can't (free him). Autopatrol set to off. + - bugfix: Power control consoles now alert you if you lack access. + - bugfix: Pandemic machine no longer blue screens while inserting premade viruses. + - bugfix: Long civilian bounty texts (specifically viro) no longer overflow the + button. The window is slightly wider as a result. + san7890: + - bugfix: Adds the High-performance liquid chromatography machine to the Syndicate + Lavaland Base. +2021-12-21: + Bizzonium: + - bugfix: fixed potential bucket corruption in timer reset_buckets + JohnFulpWillard: + - bugfix: Headrevs only get a revolutionary banner if they actually win. + Krysonism: - bugfix: Cows, roaches and their subtypes can be sentienced and mind transfer potioned again. - refactor: refactored syndicate sentience potion and abductor all access gland @@ -552,6 +997,28 @@ the server, to stop all those nasty runtimes on test servers. - config: SSDecay is now turned off by default in the config, to save about 4~ish seconds of loading time on test servers. + Melbert: + - bugfix: Removed a floating teleport beacon in Icebox's chapel + - bugfix: Fixed APC visibilty in icebox science outpost / RD office + - bugfix: Fixed Air alarm accessibility in icebox atmos office + Mooshimi: + - bugfix: Power has been returned to Tramstation Security department! + - bugfix: Everything in the curator's closet on Kilo Station can now be reached. + Sealed101: + - bugfix: fixed a missing wire in Deltastation's Arrivals Solar array, connecting + the control console to the array + - bugfix: fixed energy axe sprites's clipping issues and incorrect facing directions + tastyfish: + - bugfix: The advanced camera console's and AI's camera search function now works + again. +2021-12-22: + Azarak: + - bugfix: Fixes FoV mask and hiding in potted plants + JohnFulpWillard: + - bugfix: You will no longer spasm if you're unconscious/dead. + RandomGamer123: + - bugfix: Inverse reagents are now properly consumed when being transferred into + a living body (eg. through syringes). Ryll/Shaps: - admin: Added Datum Tagging, a new admin tool for quickly marking and referring back to various datums and atoms. You can tag atoms by ctrl+middle clicking @@ -565,6 +1032,12 @@ - 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. + Watermelon914: + - bugfix: You can no longer shove megafauna that you can't normally push. + carshalash: + - bugfix: Adds seeds to vending machines as intended. Corrects pathway for lasagne. + Fixes issue with Bell peppers and baking cheese. + san7890: - bugfix: The Nanotrasen 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. @@ -693,6 +1166,34 @@ AtoriBirb: - imageadd: added new hair sprite to our modular hair.dmi GoldenAlpharex, sprites from WalterJe: + JohnFulpWillard: + - bugfix: Balloon alerts when picking up staffs as a non wizard now properly appears + over the player's head. + LemonInTheDark: + - bugfix: Fixed garbage bags being uncleanable by mops, for silly silly reasons + Pickle-Coding: + - bugfix: Allows the supermatter crystal to produce gases while powered, even in + absolutely empty turfs, excluding space turfs. + SuperNovaa41: + - bugfix: Fixes the ablative trenchcoat giving you a permanent sechud. + - qol: The health sensor's status is now more clear when unsecured. + - bugfix: Fixed players appearing above fire and foam. + - bugfix: Void cloak (and other items intended to be invisible) can longer be seen + and unequipped in the strip menu. + - bugfix: You can no longer wrap a locker to bypass the drag slowdown. + - bugfix: Flying over lava no longer erroneously ignites you ablaze. + jlsnow301: + - bugfix: Fixes width on black market uplinks to show three delivery options. Technology! + optimumtact: + - bugfix: Fixed mops wetting the turf when you refill them from the mop bucket I'm + oranges and I don't put changelogs on my PRs +2021-12-24: + AndrewL97: + - bugfix: skin tone sorting + - refactor: refactor various color procs to use natives instead + GoldenAlpharex, sprites from WalterJe: + - qol: Conveyors will now also convey how to interact with them with tools upon + being examined. - imageadd: Updated the sprites of the conveyor belts and the conveyor switches, ported and adapted from Tau Ceti! - refactor: Brought up to today's standards conveyor codes, alongside properly documenting @@ -725,6 +1226,22 @@ deal. Fikou, theOOZ: - imageadd: adds a new janiborg sprite! + ReinaCoder: + - bugfix: Fixes Tramstation Vacant Commissary not having shutters + - bugfix: Engineers now have access to the SM's External Airlock on Tramstation + SuperNovaa41: + - bugfix: You can no longer continue a surgery if the organ in question is somehow + removed whilst mid operation. + - bugfix: Non-headrev revs can be properly revived after a revolution is quelled + again. + - bugfix: You can no longer bypass the red alert lock on the escape pod safe. + - bugfix: Fixes an exploit with thermite burn times. + jlsnow301: + - spellcheck: Fixed a number of typos in HTML elements that would cause messages + to not render properly. + - bugfix: Changed the font of some messages to better reflect if they were errors, + notices. +2021-12-25: ? 'Fikou; Sprites: PositiveEntropy, Azlan, Infrared_Baron, Thunder12345, Yeeye; Code: Waltermeldron, Goof, Armhulen, ArcaneMusic, DatBoiTim; Descriptions: Nerevar' : - rscadd: Adds Modular Suits. Printable at robotics. @@ -756,6 +1273,32 @@ HIDEHAIR. This will let sprites with earholes actually fit ears thru them, but not show the hair instead SkyratBot: + - code_imp: Adds support for digitigrade compatible shoes. + - qol: Piercing syringes now pierce when used from hand, not just as projectile. + - code_imp: Removes the unused outside of admin shenanigans cult hardsuit requirement + for spells. + JohnFulpWillard: + - bugfix: the observe button's tgui is now functional. + Krysonism: + - expansion: Added a new cake, the english fruitcake. + Sealed101: + - bugfix: plopped an xmas tree in tramsation's chapel + SuperNovaa41: + - spellcheck: Fixed a small spelling mistake in the sparring rite ritual. + jlsnow301: + - bugfix: Clipping and sizing issues on drone consoles have been fixed. + - refactor: 'Many more tgui inputs have been converted over: Paystands, paintings, + pet names and more.' + - bugfix: TGUI inputs now support automatically selecting preexisting input (BYOND + default behavior). + - bugfix: You can now press ESC to exit TGUI inputs. + - bugfix: Fixes a bluescreen when turning on admin mode in NtOS chat software. + - bugfix: 'Literally 1984: NtOS chat admins can now properly mute others.' + - bugfix: Turning off NtOS admin mode now properly returns you to the channel. + - bugfix: NtOS chat screen widened slightly to fix clipping issue on the participants + panel. +2021-12-26: + CRITAWAKETS: - imageadd: The Spider Clan has issued a recall of all it's katanas, replacing them with new ones that are differently styled. Something about the old ones being literally impossible to find in bright conditions. Or maybe they just didnt @@ -772,6 +1315,27 @@ - bugfix: plopped an xmas tree in tramsation's chapel - bugfix: dogs will no longer forget to unbuckle themselves when fetching items thrown nearby + Cheshify: + - imageadd: The PanD.E.M.I.C 2200 is now visually different than the ChemMaster + Fikou, theOOZ: + - imageadd: adds a new janiborg sprite! + Iamgoofball: + - qol: AI VOX announcements are now additionally broadcasted over the radio. + JohnFulpWillard: + - bugfix: The HoP will now get strange reagent in the mail if Ian is dead, as originally + intended. + Melbert: + - bugfix: Updated the binary key's description / examine text to actually describe + its abilities. + ReinaCoder: + - imageadd: Resprites the sec grenade launcher + TheBonded: + - bugfix: Tesla reactive armour now has separate emp and cooldown messages + - bugfix: dogs will no longer forget to unbuckle themselves when fetching items + thrown nearby + axietheaxolotl: + - imageadd: Resprited the Tactical Turtleneck Suit + jlsnow301: - bugfix: Double click and enter on tgui input lists no longer clears selection. - bugfix: 'Functionality restored: typing while not selecting the search bar will refocus. You can also quick search by typing while the search bar is hidden.' @@ -792,6 +1356,34 @@ work correctly. - bugfix: Ghost role spawners can now use your character. SkyratBot: + tf-4: + - bugfix: Disarming a heavily incapacitated person with krav maga will no longer + make them recoil in pain. + timothymtorres: + - bugfix: Fix AIs inside a AI restorer computer now die if the computer is destroyed + while they are inside it. +2021-12-27: + Fikou: + - bugfix: the protect objective now checks for mob and brain suicides + JohnFulpWillard: + - bugfix: Some antags (like Abductors) no longer have 2 antag gain messages. + - spellcheck: Gaining and losing antagonist status will now be properly written + with 'the', as needed. + ReinaCoder: + - bugfix: Cult robes now have sprites for when the hood is down + - bugfix: Tramstation Court Room and Lawyer's Office now have lights + SuperNovaa41: + - bugfix: Makes all cyborg storage items drop their contents on module change. + - bugfix: Sechailer no longer has FOV. + - bugfix: SWAT mask no longer has a tint. + Y0SH1M4S73R: + - admin: The Save Shell admin circuit component now properly loads circuits that + use a BCI or MODsuit module as their shell. + necromanceranne: + - bugfix: Restores the cardborg sprite. + timothymtorres: + - bugfix: Fix all types of grenades to be deleted when shot bullets. + tralezab: - code_imp: Some code improvements and proper use of department datums by independent nation creation - refactor: Some wonderful cleanup of separatist code, if you notice minor differences @@ -888,6 +1480,8 @@ - bugfix: Dirt piles can no longer exceed their maximum reagent capacity by 10. Sorry prison botanists. SkyratBot: +2021-12-28: + Fikou: - bugfix: the mod installer from charliestation no longer has infinite uses - bugfix: fixes broken sprites on prototype suit - bugfix: fixes intellicards not updating @@ -945,6 +1539,43 @@ 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: fixes the tether not being able to hook onto catwalks/lattices + - qol: ais in modsuits now make the user stand up instead of weirdly crawling + - qol: a modsuit being destroyed with an ai inside now pops it out as a small card + you can recover from with an intellicard + - qol: modsuit module radial is now more friendly, showing you tooltips and which + modules are active + - qol: mech fabricator module list is now sorted + JohnFulpWillard: + - spellcheck: Removed a visible b> from Cult's objective text. + SuperNovaa41: + - bugfix: You can no longer get an alert by checking your mood with telekinesis. + Zonespace27: + - refactor: Mech Fabricator's `output_part_info()` proc is much more optimized. + timothymtorres: + - bugfix: Fixes phylactery exploits. Liches can no longer be soulstone captured + or be debrained and put into an MMI. + tralezab: + - bugfix: fixed weird "Mob Spawner" objects showing up when you killed clowns +2021-12-29: + Melbert: + - bugfix: Dirt piles can no longer exceed their maximum reagent capacity by 10. + Sorry prison botanists. + Seris02: + - bugfix: fixed a say emoting bug where forced says' were being turned into emotes + dragomagol: + - bugfix: italian mafioso now get their proper names + - admin: admins can now view family objectives from the traitor panel + vincentiusvin: + - bugfix: fixed zombie powder not sleeping you on ingestion and on further ingestion. +2021-12-31: + GoldenAlpharex: + - bugfix: The blackmarket uplink shouldn't run into issues loading the different + categories of items it can order when it was created during mapload. + JohnFulpWillard: + - bugfix: accessories on clothes placed inside garment bags will no longer delete + themselves. + Kylerace: - bugfix: 'NanoTrasen fixed a problem with their orion trail arcade machines relaying security and medical comms to the most dangerous demographic: gamers. NanoTrasen assures you that this security exploit will never happen again.' @@ -960,3 +1591,37 @@ space-like. tastyfish: - spellcheck: Fixed augmented lung messages. + Melbert: + - bugfix: Hulk is removed more consistently when the user actually enters soft crit. + - bugfix: Exo-drone fuel pellets delete when empty. + - bugfix: Exo-drone launchers now update their icon correctly when adding / removing + fuel. Removing fuel with a crowbar also doesn't smack the launcher when done. + - bugfix: Fixes a hard-del with the exo-drone launcher. + SuperNovaa41: + - bugfix: Possessing a mob no longer lowercases your ckey in admin messages. + - bugfix: You will no longer hear medibot voicelines whilst in crit. + - bugfix: Spidercharges can now only be blown up in their intended location. + - bugfix: The ablative trenchcoat actually gives you a sechud again. + coldud13: + - bugfix: fixed basil boys uniform being offset by one pixel + jlsnow301: + - refactor: The majority of user facing input lists have been converted to TGUI. + - refactor: Tgui text inputs now scale with entered input. + - bugfix: Many inputs now properly accept cancelling out of the menu. + - bugfix: Fixes an edge case where users could not press enter on number inputs. + - bugfix: Custom vendor bluescreen. + - bugfix: You can now press ENTER on text inputs without an entry to cancel. + neopythagorean: + - bugfix: Pipe dispensers no longer produce broken invisible pipes. + tf-4: + - code_imp: space/openspace turfs now exist to make multi-z space turfs act more + space-like. + timothymtorres: + - bugfix: Fix glass floors appearing as lower z-level when on the same z-level. + - bugfix: Fix catwalks appearing as current z-level when they were on a lower z-level. + - bugfix: Fix transparent turfs to display lower z-level properly. + - bugfix: Fix lighting overlays appearing as current z-level when they were on lower + z-level. (for transparent turfs) + - bugfix: Fix mapping icons for catwalks to display correct icon state + - refactor: Refactor turf transparency to be more robust. + - refactor: Refactor catwalks to be elegant code. diff --git a/html/changelogs/archive/2022-01.yml b/html/changelogs/archive/2022-01.yml index 8a2db0590e8ca..fb2f9675fce47 100644 --- a/html/changelogs/archive/2022-01.yml +++ b/html/changelogs/archive/2022-01.yml @@ -28,6 +28,35 @@ - balance: All Shotguns in the armory are now Riot Shotguns that load normal shotgun shells. - balance: The armory shotgun ammunition storage now contains normal shotgun shells. + SmArtKar: + - bugfix: MODsuits no longer runtime when EMPed with no module selected + SuperNovaa41: + - bugfix: Bodies will no longer (sometimes) be fully deleted when escaping a disposal + pipe trap. + TemporalOroboros: + - bugfix: Fixes blastcannons not actually having any light range regardless of the + bomb they used. + - bugfix: Fixes blastcannons being blocked by cigarette butts. + - code_imp: Unspaghettis some variable definitions. + - code_imp: Brings phasic carbine rounds into compliance with the rest of the projectiles. + Whoneedspacee: + - refactor: Refactors megafauna abilities to be mob actions which are grantable + to any living mob. + - admin: Added a verb under admin events which lets you grant mob actions to a marked + living mob. + jlsnow301: + - bugfix: Fixed a clipping issue with the brainwash objective text. Brainwashed + victims can now properly lead longer objectives about the clown being a zombie, + etc. + san7890: + - spellcheck: The exosuit fabricator should now spit out (more) grammatically correct + messages. +2022-01-02: + Azarak: + - bugfix: Fixes field of view handler perceiving the wrong eye + JohnFulpWillard: + - bugfix: Things on fire moving over a bonfire will now ignite its flame + - bugfix: All of service can now access the Service cargo console. MMMiracles: - rscadd: Tramstation has gotten an extension, both in size and layout. - rscadd: Tramstation's medical has been completely overhauled to a new layout, hopefully @@ -128,6 +157,55 @@ - bugfix: Chemical grenades no longer evaporate into thin air upon detonation. As a result, gunpowder and teslium now work with them. Also, you can recycle cleaner grenades if you want to bother. + Mothblocks: + - rscdel: The station name has been removed from the hub entry. + - bugfix: Massively decreased initialization times in best case scenarios. + SmArtKar: + - bugfix: Sacrificing a mindshielded person no longer causes their soul to be left + in their brain instead of getting transfered to the soulstone + interestingusernam3: + - bugfix: Silicons and other mobs that shouldn't be able to lie down now won't lie + down no matter what happens. + tralezab: + - bugfix: fixes pirates not getting their antag status, alongside a non-pirate name +2022-01-03: + Fikou: + - qol: You can now pin MODsuit modules to your action buttons. + - bugfix: ghosts can no longer mess with modsuits + SarmentiCampbell: + - bugfix: Russian Revolver can't longer be able to be examined to determine if it + has a bullet in it's chamber or not. + SuperNovaa41: + - admin: Simplemobs attacking objects is now properly logged, when the mob is playercontrolled. + Wallem: + - qol: Stasis beds put food in stasis as well, preventing decomposition. +2022-01-04: + Deek-Za: + - imageadd: Added sprites for cargo cap when flipped + Fikou, modified sprites from Onule, descriptions by Nerevar and Halcyon: + - expansion: cosmohonk suits now start with a waddling module! + - expansion: noslip, nvg and thermal modules can now be bought from the uplink + - expansion: 'you can see extended descriptions of modsuit themes by examining them + closely grammar: All MODsuits now have an extended description viewable by examining + them closely' + - balance: MODsuits no longer slow you down when undeployed in backpack form + - balance: tray modules cost less complexity, organ thrower is incompatible with + microwave beam + - balance: nukie suits no longer start with the thermal module + - qol: the recall module automatically tries to deploy the suit, without sealing + it + GoldenAlpharex: + - bugfix: Admin deadsay will now properly be sent to admins that are on the lobby + screen, with their deadchat toggle turned on. + - code_imp: Admin deadsay shouldn't be as prone to cause small runtimes anymore. + JenqaDev: + - imageadd: Adds the trash bag of holding icon to the janicart + JohnFulpWillard: + - admin: RD server controllers now log remotely shutting off/turning on RD servers. + Mothblocks: + - balance: For servers with Blood Brothers enabled, their cost and weight are now + lower. + SuperNovaa41: - bugfix: You can no longer delete your cult eyes or halo by transforming into a monkey, and then into a human. - bugfix: You can no longer delete your cult eyes or halo by transforming as a changeling. @@ -197,6 +275,51 @@ - bugfix: Fixed the mentor PMs appearing in bold pink when it shouldn't be. - code_imp: Did some cleaning up of parts of the mentor code. - bugfix: Fixes a hard-deletion related to the void hood. + TemporalOroboros: + - bugfix: Stuffing bread full of weed and such will no longer consign some of the + reagents to the void. + cacogen: + - qol: When inserting too many sheets for the autolathe to hold, it will take what + it can instead of rejecting the whole stack + neopythagorean: + - bugfix: Cardboard boxes and Body bags no longer claim to be welded together when + examined. + tastyfish: + - bugfix: Centcom and CTF headsets now work properly again. + the-orange-cow: + - qol: The fraxinella flower is now more willing to share its protection against + the insect menace. +2022-01-05: + Fikou: + - qol: disable combat mode defaults to 1. enable combat mode defaults to 4. + Fikou, Armhulen: + - expansion: Adds five new MODsuit modules to maintenance. + - bugfix: fixes MODsuit pins not working + - balance: specific MODsuit designs now gain smoke protection + JohnFulpWillard: + - bugfix: Papers pinned to airlocks will now visibly show if it has anything written + on it. + Melbert: + - bugfix: Fixes cult dagger error with holywater purging. + - bugfix: Rust heretic ascension spread rusts everywhere again. + SuperNovaa41: + - bugfix: Fixes crates duplicating materials with the recycler. + TemporalOroboros: + - bugfix: Fixed an incorrect calculation in the crystallizer preventing most crystallizer + recipes from ever producing high quality products. + axietheaxolotl: + - imageadd: Brand new sabre and sheath sprites! +2022-01-06: + Arturlang: + - bugfix: Modsuits DNA lock module will no longer stop you from changing up the + suit's modules while not worn, even if you are it's rightfull owner. + Jackraxxus: + - bugfix: The gladiator helmet is no longer a missing texture. + JohnFulpWillard: + - bugfix: After being broken again, magic mirrors have been RE-fixed and will ONCE + again change your species. + - bugfix: Revenants (and any other non human) will no longer turn red/blue from + the medieval shuttle teambuilding machines. Melbert: - bugfix: Changeling abilities unusable in lesser form are unusuable as a monkey again. @@ -235,6 +358,34 @@ - rscadd: Added new sprites for Departmental Batons Fikou, sprites from Azlan: - bugfix: fixes mouth hole not working + Mothblocks: + - qol: Restored the original manual refresh for the orbit menu. + OrionTheFox: + - bugfix: Icebox telecomms control is no longer frozen. Rejoice, to the 2 people + who actually go in there. The catwalks are nicer all around too. + ReinaCoder: + - qol: Adjusted security jumpsuits/skirts no longer cover the chest + SuperNovaa41: + - bugfix: Pen's can update an item's description again. + - bugfix: Fixes admins being able to sucessfully JMP as a new player mob. + - bugfix: Silicons can disable holodeck safeties again. + TemporalOroboros: + - bugfix: If you aim at something through cameras you will now aim at the thing + you aimed at from the perspective of yourself instead of the camera you were + using to aim. + Y0SH1M4S73R: + - expansion: Adds four new circuit components designed to analyze the data on ID + cards - Get ID, Read ID Info, Read ID Access, and Access Checker. + - bugfix: The assembly shell can now be attached to wires as intended + dragomagol: + - bugfix: stools on the main station are now facing the correct directions + jlsnow301: + - bugfix: Windoor exam text now properly displays whether the panel is open. + - refactor: Windoor tool_act code is updated to the latest century. + - bugfix: Exploding paper no longer causes a runtime. + san7890: + - bugfix: 'Cargonians and Janitors Rejoice: Disposals on TramStation have been fixed!' +2022-01-07: GoldenAlpharex: - refactor: Refactored Dullahans in many areas to fix many, many of their bugs and glitches and ensure an actually functional experience playing as one, while @@ -322,12 +473,68 @@ thestubborn: - bugfix: icebox's lawyer office has always had a drobe, stop gaslighting 2022-01-10: + - bugfix: Fixes a hard-deletion related to the void hood. + Mothblocks: + - balance: Malfunctioning AI should now happen more frequently. + SuperNovaa41: + - bugfix: Admin ghosting from a camera eye will no longer runtime. + - bugfix: Basic mobs (i.e. cows) can be properly ridden. + - bugfix: Drones can now vent crawl if there are humans around. + - bugfix: Eigenstasium will no longer teleport undroppable items out of your inventory. + YakumoChen: + - qol: Radio jammers will now also jam PDA messaging. + carshalash: + - qol: Adds descriptions to abductor glands upon shiftclick. + vincentiusvin: + - code_imp: Some code changes to thermomachine ports and appearance. No gameplay + changes expected though. +2022-01-08: + FernandoJ8: + - rscadd: Adds the captain's aid + Fikou, sprites from Azlan: + - expansion: Adds Anomalocks, anomaly core locked MODsuit modules. You can obtain + the anti-gravity and teleporter module from R&D. + - qol: activating a suit now should be accidental click-proof + - bugfix: fixes mouth hole not working Melbert: - bugfix: You can no longer override the ling DNA you're currently disguised as. This was apparently always intended but broken for ages. - code_imp: Modernized much of ling code. - refactor: Also refactored part of ling code. The ling chemical hud element should be a bit snappier now. + - bugfix: You can see rust again + SmArtKar: + - bugfix: Spiders no longer cause runtimes when coming into contact with spider + webs. Also their AI no longer breaks due to this. + SuperNovaa41: + - bugfix: The regal rat has full access to it's abilities again. + Triiodine, TetraZeta, PositiveEntropy: + - imageadd: Resprites the labcoats, removing the asbestos and charcoal grime from + them! + Watermelon914: + - bugfix: Fixed having a limited vision whilst in the abductor ship. + san7890: + - spellcheck: Nanotrasen has undergone a corporate reorganization, reallocating + powers previously gone to Central Command back into their own fold. + theOOZ: + - qol: Runechat offsets correctly on larger mobs + timothymtorres: + - bugfix: Fix open/space/openspace to have dark shadow borders to indicate it's + openspace + timothymtorres, TheBonded: + - expansion: Adds Claustrophobia quirk that causes suffocation if a player enters + any type of container object. (lockers, crates, machinery, disposals, etc.) + - expansion: Adds Blood Phobia that is triggered from seeing gibs, blood, bloody + clothes or weapons, and blood related objects like IV drips and blood bags. + - bugfix: Fixed some quirks to not process if player is sleeping or unconscious. + tralezab: + - rscdel: Removed monkey mode from the code, when admins ran it it was broken anyways + - rscdel: Jungle fever no longer spreads via monkey bites after conversion, and + it is now jungle flu. +2022-01-09: + Capsandi: + - rscadd: 3 new space ruins, 2 chunks of a blown up space station and a NEW asteroid! + Melbert: - bugfix: 'Tram medical: Adds some missing white medkits.' - bugfix: 'Tram medical: Cryo freezer actually works.' - bugfix: 'Tram medical: Adds some missing wall mounts and firelocks.' @@ -368,6 +575,46 @@ - bugfix: hypovials can fit inside fridges again tastyfish: - bugfix: Interdyne and DS-2 ID cards are now registered to their owner again. + Nari Harimoto: + - expansion: Centcom has approved the funds to re-arrange Icebox's medbay department + with a new design that better facilitates multiple level functionality + SuperNovaa41: + - refactor: The spider charge has slightly less shit-code now. + TemporalOroboros: + - bugfix: The supermatter will once again emit radiation when it is about to explode. + san7890: + - bugfix: The status screen in the ERT Bay in CentComm has been moved to the other + side of the wall because we accidentally kept sending them down and the crew + would keep selling them. + - bugfix: Wardens and Heads of Security Rejoice! You are now able to send tiders + to the gulag to labor for the better of the station after they steal your third + baton (on TramStation)! + - bugfix: The holopad is now back in Security's meeting room on MetaStation! Silicon + lovers and cold-callers rejoice! + timothymtorres: + - bugfix: Fix transparent floors clipping objects from bottom z-level to above z-level. + unit0016: + - rscadd: The Icemoon Engineering Outpost has been remapped, and received an /area/ + to go with! +2022-01-10: + DragonTrance: + - rscadd: Various items provide special texts when suiciding with them. + - rscadd: Unique text is shown when suiciding with food, a clown box, bubblegum, + bubblegum bubblegum, bees, tinfoil hats, suitcases, Magnus's Grasp, and even + when inside a stealth implant box. + - rscadd: Crayons now color you when suiciding with them. + Fikou: + - balance: Clarke can now attack in all directions + - balance: Clarke can now search for ruins + - balance: Clarke no longer gets a diagnostic HUD + SuperNovaa41: + - refactor: Decks of cards are actual lists of cards now + other improvements. + - bugfix: You can now put X4/C4 onto playing cards, and put them into decks without + deleting your explosive. + - bugfix: Sholean Grapes can use their gel cocoon ability again. + - bugfix: TK will no longer try to interact with your HUD (again). + fikou & urumasi (with stackoverflows send by shaps): + - rscadd: the wizard now has a new flashy weapon. 2022-01-11: ATHATH: - bugfix: The pig, cow, and horse masks were not available for purchase in the AutoDrobe @@ -384,6 +631,20 @@ it to their needs.' - bugfix: Fixed the instances where speech wasn't handled properly, such as hulks not yelling and tongue modifications. + EOBGames: + - rscadd: A number of new posters have been introduced, for your decorating pleasure. + - rscadd: Billboards have also made their way to the sector. + FernandoJ8: + - bugfix: people with only morgue access can now get to the morgue in tramstation + GoldenAlpharex: + - bugfix: Fixed the instances where speech wasn't handled properly, such as hulks + not yelling and tongue modifications. + Iamgoofball: + - balance: The Detective can now print .38 Rubber at the Security Protolathe. + JohnFulpWillard: + - bugfix: The HoP can no longer open CE job slots again. + Maurukas: + - bugfix: Removes non-functioning reagent tanks from Metastation's plumbing room. Melbert: - refactor: Refactored cult buildings to exorcise some copy+paste. Some cosmetic cult buildings won't drop metal now (but still work for cultists!). @@ -392,86 +653,57 @@ - admin: Log messages for being deconverted from a revolution are now also registered in the mob's individual logs instead of just to the game.log SkyratBot: + Pepsilawn: + - bugfix: Stray pixel on the drop pod sign removed. + Pickle-Coding: + - rscadd: Blown kisses will now power the supermatter engine. + Ryll/Shaps: + - admin: Log messages for being deconverted from a revolution are now also registered + in the mob's individual logs instead of just to the game.log + SuperNovaa41: + - bugfix: Clicking an open locker on combat mode will no longer deposit your item. + - bugfix: Fixes holodecks not properly deleting simplemobs. + - bugfix: You can now stamp papers while blind. + - bugfix: Can no longer open storage containers in a locker (or other container) + via right click. + jlsnow301: + - code_imp: Space vine code is cleaned up slightly. + - refactor: Space vines now use more flowery, easier to see colors. + - refactor: Space vine examination text is now easier to read. - bugfix: Fixed an issue where cancelling out of tgui input text didn't count as null/no entry. You can now properly cancel out of succumb, etc. - bugfix: Pressing enter on tgui input text will no longer briefly create a new line. - - balance: The Detective can now print .38 Rubber at the Security Protolathe. - - refactor: Decks of cards are actual lists of cards now + other improvements. - - bugfix: You can now put X4/C4 onto playing cards, and put them into decks without - deleting your explosive. - - bugfix: people with only morgue access can now get to the morgue in tramstation - - bugfix: Clicking an open locker on combat mode will no longer deposit your item. - - bugfix: The HoP can no longer open CE job slots again. - - bugfix: Stray pixel on the drop pod sign removed. - - 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 - 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. - - rscadd: Unique text is shown when suiciding with food, a clown box, bubblegum, - bubblegum bubblegum, bees, tinfoil hats, suitcases, Magnus's Grasp, and even - when inside a stealth implant box. - - rscadd: Crayons now color you when suiciding with them. - - rscadd: Blown kisses will now power the supermatter engine. - Stalkeros: - - rscadd: Adds xenoarch room to Icemoon's mining outpost. - fikou & urumasi (with stackoverflows send by shaps): - - rscadd: the wizard now has a new flashy weapon. - jjpark-kb: - - rscadd: added xenoarch bag and belt to cloth and leather recipes respectively - - rscadd: 'added some cytology swab cells to animal fossil (xenoarch) qol: brushes - will dig 1 depth on unsuccessful brushing (xenoarch)' - - balance: doubled the points received from a researcher (xenoarch) - - balance: xenoarch adv. tools require a point scanning experiment now - - rscdel: removed the digger (xenoarch) oranges: - balance: The engineering borg stun arm malfunction module has been rebalanced to use more power + san7890: + - code_imp: Nanotrasen has implemented improved checking in their protocols, only + delaying the inevitability that the AI can one day get to be a blood cultist. tastyfish: - bugfix: The connect_range component now works correctly, meaning stacking machines in Recycling now pick up stacks again. + unit0016: + - rscadd: Ectoscopic sniffers are now louder, and explain their purpose on examine. 2022-01-12: - ErdinyoBarboza: - - rscadd: TramStation is Skyrat-ified once more - LT3: - - bugfix: fixes and additions to Janitor alt titles - S34NW, dragomagol: - - imageadd: new aquarium DIY construction kit sprites - SkyratBot: - - bugfix: The civilian bounty computer will now properly give you new bounties if - they weren't already chosen. - - bugfix: Marker beacons will no longer teleport to your hands when picking it up - with TK. - - spellcheck: Admin help info is now slightly more readable + Cheshify: + - qol: Modular Devices now have auditory feedback for disassembly. - bugfix: Deltastation's Hydroponics Desk now has proper windoors. - - rscadd: People with the claustrophobia quirk will now be afraid of Santa Claus - and certain Claus-like entities - - bugfix: Cyborgs now must be adjacent to a vending machine to lift it back upright. - Stalkeros: - - bugfix: 'Made xenoarch''s broken objects actually sell for their price, and made - broken objects actually sellable too. qol: It''s now more obvious that animal - remnants are swabbable.' - ma44: - - code_imp: Basic AI has been modified to allow for future features to be implemented - in a proper way. -2022-01-13: - ErdinyoBarboza: - - bugfix: Conflicting race food prefs have been fixed. Insects and Dwarves do not - like Junkfood, Fried food and Cloth. Akula, Aquatic, Vulpankin, Tajaran and - Anthromorphs do not like Vegetables, Fruits and Cloth. Unathi do not like Grain, - Dairy and Cloth. You can reverse this by taking the Deviant Perk - - bugfix: Tram Brig gets actual holding cells - - rscadd: Delta Perma Brig has been updated per compliance with humane standards - of living for inmates and Correction Officers now have their own room. Also - a changing room for the new inmates, + Gofawful5: + - bugfix: Fix to where other forms of being dead (ie decapitation/braindeath) now + shows up on crew monitors when vitals are available via the red square. GoldenAlpharex: - code_imp: Documents and improves the code of the shuttle subsystem, so its inner workings are a little less of a mystery. + Jackraxxus: + - bugfix: The HoS in mafia can now properly unselect their target for the night. + Kylerace: + - rscadd: People with the claustrophobia quirk will now be afraid of Santa Claus + and certain Claus-like entities + LemonInTheDark: + - bugfix: You feel space itself shift around you. Atmos has changed. Please report + any strange behavior, if you can notice it. Melbert: - - bugfix: Antag info ui carries over to a fresh body correctly - bugfix: Wrapping a bounty cube then unwrapping it no longer scams the owner out of a cut - bugfix: Wrapping a bounty cube then applying a barcode no longer grants a bigger @@ -481,26 +713,71 @@ by radios alone? - refactor: Refactored Pricetag component, less getcomponent and ugly signals, more sanity, harder to break - Nari Harimoto: - - bugfix: The icebox gremlins went and fixed some minor issues the construction - crew made of the new Icebox Medbay - Ryll/Shaps: - - admin: Added "Find Updated Panel" button to the admin player panel menu (not the - F6 one). This allows you to attempt pulling up the new PP - - admin: The "Check Contents" right click verb on living mobs now provides VV and - TAG links for each entry, so you don't have to sift through 4 layers of VV to - get to someone's emergency oxygen tank. - - admin: The F6 admin menu now lets you ignore punctuation when searching for character - names, letting you look up a silicon named "H.E.R.A." by simply searching "hera". - - bugfix: Stealthed admins orbiting something will no longer count for that atom's - orbiter count in the orbit menu - SarmentiCampbell: - - rscadd: Added mush kit to curator's heroic beacon - SkyratBot: - - bugfix: Emotes will now parse properly in dchat. - - bugfix: Drone tools can no longer be removed from the drone. - - bugfix: The HoS in mafia can now properly unselect their target for the night. - - bugfix: Stops vending machines from runtiming when broken. + - bugfix: Antag info ui carries over to a fresh body correctly + - expansion: Paper dispenser maintenance loot MOD. + S34NW, dragomagol: + - imageadd: new aquarium DIY construction kit sprites + SuperNovaa41: + - bugfix: Stops vending machines from runtiming when broken. + - bugfix: Cyborgs now must be adjacent to a vending machine to lift it back upright. + - bugfix: The civilian bounty computer will now properly give you new bounties if + they weren't already chosen. + - bugfix: You can no longer use telekinesis to teleport with the bluespace prophet + brain trauma. + - admin: Station traits are now logged at roundstart. + - bugfix: Fixed a runtime with syringe injection text. + - expansion: Added a new achievement involving Nar'Sie. + - bugfix: Fixes the equipment menu from runtiming if you the outfit has a skillchip. + TemporalOroboros: + - qol: Due to subtle design changes it is now possible to reach past hydroponics + trays, cooking grills, crates, and a few other table-shaped objects. + Watermelon914: + - rscadd: Adds progression traitors and reworked traitor objectives to give reputation + and telecrystals, which can be used to purchase equipment. + - balance: Traitor gear now has a soft timelock. Most gear becomes accessible 30 + minutes into a round. + - refactor: Refactored the uplink UI code completely to be in typescript and modernizes + it. + - rscdel: Removed romerol, surplus crate and the special syndicate kits from regular + traitor uplink. Romerol is now a final objective that you can receive. + jlsnow301: + - spellcheck: Admin help info is now slightly more readable + ma44: + - code_imp: Basic AI has been modified to allow for future features to be implemented + in a proper way. + neopythagorean: + - refactor: stationary pipe dispensers now take advantage of tgui + san7890, sounds courtesy of Capsandi: + - soundadd: Nanotrasen 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". +2022-01-13: + Iamgoofball: + - balance: "Replaces the Cr\xE8me de Menthe in Quadruple Sec with Grenadine because\ + \ mint with triple citrus tastes awful and Grenadine turns drinks red" + LemonInTheDark: + - server: Added support for define toggle live ref tracking. Consider using it if + you're hunting hard deletes + Nari Harimoto: + - bugfix: The icebox gremlins went and fixed some minor issues the construction + crew made of the new Icebox Medbay + Ryll/Shaps: + - admin: Added "Find Updated Panel" button to the admin player panel menu (not the + F6 one). This allows you to attempt pulling up the new PP + - admin: The "Check Contents" right click verb on living mobs now provides VV and + TAG links for each entry, so you don't have to sift through 4 layers of VV to + get to someone's emergency oxygen tank. + - admin: The F6 admin menu now lets you ignore punctuation when searching for character + names, letting you look up a silicon named "H.E.R.A." by simply searching "hera". + - bugfix: Stealthed admins orbiting something will no longer count for that atom's + orbiter count in the orbit menu + SarmentiCampbell: + - rscadd: Added mush kit to curator's heroic beacon + SkyratBot: + - bugfix: Emotes will now parse properly in dchat. + - bugfix: Drone tools can no longer be removed from the drone. + - bugfix: The HoS in mafia can now properly unselect their target for the night. + - bugfix: Stops vending machines from runtiming when broken. - rscadd: Adds progression traitors and reworked traitor objectives to give reputation and telecrystals, which can be used to purchase equipment. - balance: Traitor gear now has a soft timelock. Most gear becomes accessible 30 @@ -511,6 +788,14 @@ traitor uplink. Romerol is now a final objective that you can receive. - bugfix: Can no longer open storage containers in a locker (or other container) via right click. + SuperNovaa41: + - bugfix: Emotes will now parse properly in dchat. + - bugfix: Drone tools can no longer be removed from the drone. + carshalash: + - rscdel: Removed podcaster reference shirt. + jlsnow301: + - rscdel: Removes swarmers! The griefiest, lowest fun value antagonist is removed + from the game. - bugfix: Cameras are once again viewable from a distance, but this is limited to 2 tiles. - bugfix: The viewing range limit of 2 tiles also applies to the SecurEye tablet @@ -582,6 +867,55 @@ under you (and any other mobs). - bugfix: The carp plushie null rod variant now properly gives the carp faction to holy people instead of favouring the unworthy. + san7890: + - code_imp: Traumas.dm is now spanned out and alphabetized. Just a small code improvement. +2022-01-14: + EOBGames: + - rscadd: An old space billboard has been spotted in the vicinity of the station. + Apparently, nobody at the advertising company realised how hard it is to read + a billboard when passing by at 2/3rds the speed of light. + Kylerace: + - bugfix: NanoTrasen has broken up the AI Static Union and thus AI static will no + longer intermittently decide to stop working. + Melbert: + - bugfix: Fixes gang induction, sentient disease abilities, birdboat's vomit button, + and the ooze's boost button + Pickle-Coding: + - bugfix: Pluoxium formation via supermatter will no longer consume oxygen that + doesn't exist. + SuperNovaa41: + - bugfix: Fixes stamps being randomly applied to paper even when not blind. + - bugfix: Fixes the spider charge not giving ninjas their objective + TemporalOroboros: + - bugfix: Guns can once again target individual pixels rather than always shooting + at the center of their target. + TheBonded: + - bugfix: The carp plushie null rod variant now properly gives the carp faction + to holy people instead of favouring the unworthy. + Timberpoes: + - bugfix: Prisoners can no longer roll roundstart revhead or cultist, and can no + longer roll latejoin revhead. This fixes an accidental change from an earlier + PR. + Time-Green: + - expansion: adds a springlock death achievement + jjpark-kb: + - bugfix: fixed nuclear particle's incorrect flag variable which could cause a runtime. + neopythagorean: + - bugfix: Fortune cookies now give you your fortune. + nikothedude: + - qol: In the edge case that an emote would have a custom parameter capitalized, + it now stays capitalized properly. + san7890: + - 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: To everyone who likes sleep, hopefully you can all dream a little bit + sounder now that all of your bedsheets actually cover you now rather than persist + under you (and any other mobs). + - bugfix: DeltaStation's Pharmacy has gotten some minor refurbishment, replacing + a window for a wall to slam more equipment on it. + theOOZ: + - balance: Venting now has an indicator + tralezab: - bugfix: admin running department revolt works again - bugfix: separatists no longer have a bad greeting message - bugfix: united nations lawset is now properly rejecting law changes unless it @@ -594,6 +928,18 @@ theOOZ: - balance: Roomba cyborg models can be flipped. 2022-01-15: +2022-01-15: + MMMiraclkes: + - bugfix: Tramstation's prison area is no longer powered by a secret bathroom APC. + OrionTheFox: + - rscadd: The Captain and Corporate MODsuits now have an inbuilt hat stabilizer, + which can also rarely be found in maintenance! + RaidenKoizuma: + - rscadd: Added a medical medal lockbox to spawn within CMO's secure locker which + contains two medals + RandomGamer123: + - bugfix: Allows for putting integrated circuits (and swiping your ID to lock them) + into circuit airlocks without having to use combat mode. Ryll/Shaps: - balance: Rubbershot is now much more bouncy than before, loses damage over range a bit slower, and has a somewhat tighter spread. Its pellets now also fly 50% @@ -661,6 +1007,29 @@ 0.15 on quick suits like rescue and 0.2 on semi quick like advanced or medical to 0.35 on research and 0.4 on prototype) qol: the storage modsuit module now tries to scoop up the suit storage item' + SmoSmoSmoSmok: + - bugfix: Mulebots wont crush people in no gravity + Vexylius: + - qol: Chef can now enter botany on Delta. Also, there's a new biogenerator there. + itseasytosee: + - bugfix: Fixed some drugs keeping you high forever + pitreforten: + - bugfix: you can now get wet again! + tralezab: + - rscadd: Time Eradication Agents now use a MODsuit, which comes with some extra + functionalities +2022-01-16: + ArcaneMusic: + - qol: Improves feedback from the civilian and pirate bounty pads. + - bugfix: Bounty pads can now be deconstructed like regular machinery. + DragonTrance: + - bugfix: The tram can no longer consume and delete the Supermatter. + Fikou: + - qol: You can now right-click modsuit action buttons to activate them faster. + - balance: Undeployed modsuits now have 1/5 of the slowdown instead of 0 (from 0.15 + on quick suits like rescue and 0.2 on semi quick like advanced or medical to + 0.35 on research and 0.4 on prototype) + - qol: the storage modsuit module now tries to scoop up the suit storage item - balance: you can now print expanded storage modules - bugfix: the magnate suit now has a jetpack - bugfix: you can now spraypaint storage items @@ -670,36 +1039,12 @@ are: standard, your current ones, using power cells. infinite, dont use power at all, used by some admin and wizard suits. ethereal, these dont use power cells, but an ethereal''s charge directly, they are craftable.' - JohnFulpWillard and theOOZ: - - balance: You can now tip Borgs over. - Ryll/Shaps, credit to Crystalwarrior of Hippiestation: - - rscadd: Suffering slashing or piercing wounds, as well as violent dismemberment, - can now send bloodsplatters flying from your body that can land on walls/floors/windows/whatever - in the environment. Juicy! - SkyratBot: - - bugfix: Mutations like Telepathy will now work again. - - rscadd: Time Eradication Agents now use a MODsuit, which comes with some extra - functionalities - - bugfix: Allows for putting integrated circuits (and swiping your ID to lock them) - into circuit airlocks without having to use combat mode. - - bugfix: Windoors can now have their electronics removed without creating infinite - assemblies. - - 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, - 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. - - admin: Added the objectives to the antag panel for admins. - - admin: Added logs for when a player gets a potential objective, when a player - takes an objective and when a player succeeds/fails an objective. - - bugfix: Fixes not drawing cards from non-standard decks. - - rscadd: An old space billboard has been spotted in the vicinity of the station. - Apparently, nobody at the advertising company realised how hard it is to read - a billboard when passing by at 2/3rds the speed of light. - - rscadd: chisels are now the animated statue's bane. - - code_imp: Badass.dmi has been moved to a new folder in the repository. + JohnFulpWillard: + - qol: People who don't have head revolutionary enabled in their preference, will + no longer be promoted to head revolutionaries by force. + - bugfix: People banned from head revolutionary will no longer roll Head revolutionary. + - bugfix: Assigning timers on people's IDs now work properly, yay Tramstation Brig! + LemonInTheDark: - rscadd: Added a visual effect for dropping items from your inventory or hands - rscadd: Increased the animation time of the pickup effect, to make it less of a snapshot. Did some other things to it to hopefully make it look nicer @@ -772,6 +1117,39 @@ watch for wolves. - rscadd: To accommodate the grand new laundry room, the locker room (and surrounding maintenance tunnels) have been shuffled around. + ReinaCoder: + - bugfix: there is now a fire alarm in Metastation arrivals + Ryll/Shaps, credit to Crystalwarrior of Hippiestation: + - rscadd: Suffering slashing or piercing wounds, as well as violent dismemberment, + can now send bloodsplatters flying from your body that can land on walls/floors/windows/whatever + in the environment. Juicy! + SuperNovaa41: + - bugfix: Cult airlocks properly throw non-cultists across the room now. + capsaicinz: + - 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 + clown operative uplinks. Honka honka.' + itseasytosee: + - bugfix: Robot themed wings will now actually be visible + - imageadd: If synths get wings, they will be robot themed. + jjpark-kb: + - bugfix: added buttons for the chapel privacy shutters on Deltastation + - bugfix: added missing chapel privacy shutters in the office on Deltastation + san7890: + - bugfix: Moved the poster and newscaster in the bar on Deltastation so they aren't + ontop of other wall objects for ghosts/AIs + timothymtorres: + - bugfix: Fix deaf people being able to hear in certain text messages. +2022-01-17: + JohnFulpWillard: + - bugfix: Mutations like Telepathy will now work again. + JohnFulpWillard and theOOZ: + - qol: Tipping mobs over all runs on right click, rather than running on both right + and left click. + - balance: You can now tip Borgs over. + LemonInTheDark: + - qol: Space movement, assuming I've done my job correctly, should feel significantly + smoother - bugfix: Fixed the immovable rod not properly carrying orbiters to new z levels - code_imp: Added a framework for different forms of looping movement - balance: Secborgs can no longer fly in space, as they have canonical wheels. The @@ -784,6 +1162,62 @@ much. Still not amazing cause of all the explosions, but it won't kill things anymore. Blow some people up for me yeah? - bugfix: Teleport runes made by wraiths now show their custom names properly. + SuperNovaa41: + - bugfix: Fixes not drawing cards from non-standard decks. + That REALLY Good Soda Flavor: + - imageadd: Added a stamina indicator to the human mob's HUD. + Thunder12345: + - rscadd: Added a new system to allow for partial random generation of space ruins + (and maybe more) + - rscadd: The russian DJ station has been overhauled and given randomly generated + variations. + Watermelon914: + - admin: Added the objectives to the antag panel for admins. + - admin: Added logs for when a player gets a potential objective, when a player + takes an objective and when a player succeeds/fails an objective. + neopythagorean: + - bugfix: Podpeople are no longer missing a hand when facing right, and podwomen + no longer stick out of their jumpsuit. + san7890: + - 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. + - code_imp: If you care, _globalvars/lists now has a lot of lists spanned out and + alphabetized. If you don't care, that's fine too. + - code_imp: Badass.dmi has been moved to a new folder in the repository. + - bugfix: Nanotrasen 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. + tf-4: + - bugfix: Windoors can now have their electronics removed without creating infinite + assemblies. + - balance: Atmospheric gas masks are now normal-sized, the same as other full-face + gas masks. + tralezab: + - rscadd: chisels are now the animated statue's bane. +2022-01-18: + Capsandi: + - bugfix: Fixed a metastation active turf, enjoy slightly faster loading + FlamingCheese: + - bugfix: Replaced snowed over plating in icebox airlocks with regular plating to + make the plating unable to generate dangerous gases + JohnFulpWillard: + - bugfix: Borgs who are untipped ahead of time and re-tipped will not have their + first self-untip timer untip them the second time. + LemonInTheDark: + - admin: Telemetry code will spam you with undeleted query logs much less often + now! + - server: Improved how the db subsystem handles undeleted queries, should never + have an incident like that again + Melbert: + - expansion: Slapping yourself in the face now delivers a facepalm. + - expansion: Slapping someone who's asleep in the face may wake them up faster. + - balance: 'Placed traitor bugs should have fingerprints and fibers now. Remember: + You can clean your fingerprints off of things with soap or other cleaning methods.' + Mothblocks: + - balance: Nuke disks must now be held by a player or pulled by a player in order + to count as moving to not increase the chances of lone ops. This means no more + disk conveyor belts. + ReinaCoder: - bugfix: Fixes Icebox not having a drone dispenser. - bugfix: Fixes Icebox not having a medical records console available to MD. - bugfix: Fixes the little cross section of Icebox medical and science maints not @@ -861,6 +1295,28 @@ RatFromTheJungle: - rscadd: 'Adds modsuit+ other-stuff to maint-loot remove: removes alot of shit that has no business being in maint loot, from maintloot' + SuperNovaa41: + - bugfix: Fixes AIs not being able to announce any custom laws. + - bugfix: Fixes floorbots dropping full toolboxes. + Thunder12345: + - bugfix: Blood brothers will now be told who their teammates are in their antagonist + info window. + magatsuchi: + - bugfix: sleeping people no longer show up as dead on crew monitor + san7890: + - bugfix: To lessen confusion, DeltaStation's customs areas have been split into + two, so the average scientist doesn't need to perform a kilometer long trek + up and down the station looking for those sweet, sweet anomaly cores. + tf-4: + - bugfix: Trying to make weak virus plasma will no longer plasmaflood virology. +2022-01-19: + Fikou: + - bugfix: fixes the centcom commander outfit not having a modsuit counterpart + JohnFulpWillard: + - spellcheck: Exploration Drone Control Console's computer board is now properly + spelled. + RandomGamer123: + - bugfix: Teleport runes made by wraiths now show their custom names properly. Ryll/Shaps: - rscadd: Added premium Two-Time root beer to soda vending machines for 200 credits! The soda grants you doubled fire-rate with ranged guns while in your system, @@ -953,42 +1409,103 @@ - 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 - 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 - masks (not the antag ones) had before the transition from gas mask tint to FoV. - - bugfix: Fixes plants not maintaining their healthy size when picked up and put - back down - - bugfix: Hitting cancel when renaming a paper now actually cancels the operation. - - bugfix: Fixes things not properly flying out of ruptured disposal pipes - - bugfix: Certain traitor objectives now fail when they are supposed to instead - of unintentionally succeeding, most notably when objective-critical items are - destroyed. - - bugfix: Ready Meal Donkhiladas are now made with meat and vegetables that do not - vaporize when microwaved. - - refactor: Boomerang behavior has been moved to a component. - - imageadd: Chefs got a whole lot better at making visually apealing pizzas! Their - boxes got spiffied up to match, too. - - bugfix: Fixed a dead bartender spawning in the beach biodome ruin. - - bugfix: fixes modsuit devices fucking up if you couldnt equip them - - bugfix: fixes modsuit pins fucking up if you remove the module - - imageadd: modsuit jetpack now has unique assets - coldud13: - - imageadd: fixed modsuit cores needing CS:S -2022-01-23: - Melbert: - - bugfix: Fixes some decals and piping in Delta's Ordnance Lab - Orion_the_Fox, Pirill: - - rscadd: Added several new Bamboo items, turfs, and more! - - imageadd: Updated existing Bamboo items to a less repulsive green. - PositiveEntropy: - - imageadd: resprite the toolboxes - - imagedel: removes the old Goon toolbox sprites - Semoro: - - bugfix: timers not removing from second queue on init - - bugfix: Avoid timer scheduling too far events into short queue - SkyratBot: + ShizCalev: + - server: A couple mapping errors will now be more visible and actually logged in + the mapping error log. + Wallem: + - expansion: MODsuits now have a Glove Translator module for all the vocally impaired. + Plasmamen can now _properly_ be mute hand-talkers. + san7890: + - imageadd: The "Interrogation Room" area now has a new sprite to define it on the + mapping end. + - expansion: What's this? Nanotrasen tunneled out a grand hole into the ice planet + that Ice Box Station currently rests on! There's a new laundry room! For your + clothes! What d'you mean, Ian? + - rscadd: You can also exit this laundry room onto a caringly, yet sloppily placed + bridge to explore the ice planet (if you really want to). Watch your step, and + watch for wolves. + - rscadd: To accommodate the grand new laundry room, the locker room (and surrounding + maintenance tunnels) have been shuffled around. + sasichkamega: + - rscadd: patch icon choosing in the chem dispenser and chem press + vincentiusvin: + - bugfix: Pumping hot gas into cold gas using the regular pumps should no longer + explode. + - code_imp: Some math changes to how pressure based pumps calculate pressure (both + portable and fixed). Report if problems are found. +2022-01-20: + DragonTrance: + - balance: Maintenance Drone health changed from 30 to 45 + - balance: Maintenance Drone stun times from getting EMP'd reduced from 10 seconds + to 7 seconds + - qol: Maintenance Drones can now interact near dead bodies + - qol: Maintenance Drones don't have to wait 5 minutes to open an airlock when someone + recently did it. Now they have to wait 1 minute. + - qol: Changed distance Maintenance Drones aren't allowed to interact with anything + from a nearby mob from 4 tiles to 3 tiles + ErdinyoBarboza: + - rscadd: Lizardpeople now enjoy eating (these) nuts. + Fikou: + - rscadd: Reworked the MOD Kinesis module and added it to techwebs. + - bugfix: fixed modsuits not running out of charge + - bugfix: fixed modsuits needing multiple cores and cell fitting being weird + TemporalOroboros: + - bugfix: Aiming at obscured turfs will no longer make you shoot somewhere up and + right of where you clicked. + Thunder12345: + - bugfix: The CMO's office on Icebox can no longer be entered from maint by anyone + with general medbay access. + - bugfix: Eliminated a runtime error related to Modular Map Loading + - bugfix: The Kilo pharmacy's door onto the public med lobby no longer requires + general medical access to open. + san7890: + - bugfix: Great news! If you want to crack open a window on TramStation, you shouldn't + be immediately greeted with the vast vacuum of space lying under said window. + - bugfix: Nanotrasen updated their weather protocols, it should now snow around + Moffuchi's Pizzeria whenever it shows up on the surface of Ice Box Station. + - rscadd: The Laundry Room on TramStation is now called a Laundry Room. Rejoice! + tralezab: + - rscadd: Added thieves! Low level antagonists that want to steal, hoard, and escape + with your goodies! + - rscadd: They show up roundstart and midround, and do not have a license to kill. +2022-01-21: + Ghommie: + - bugfix: Syndicate, 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 + masks (not the antag ones) had before the transition from gas mask tint to FoV. + - bugfix: Fixes plants not maintaining their healthy size when picked up and put + back down + - bugfix: Hitting cancel when renaming a paper now actually cancels the operation. + - bugfix: Fixes things not properly flying out of ruptured disposal pipes + - bugfix: Certain traitor objectives now fail when they are supposed to instead + of unintentionally succeeding, most notably when objective-critical items are + destroyed. + - bugfix: Ready Meal Donkhiladas are now made with meat and vegetables that do not + vaporize when microwaved. + - refactor: Boomerang behavior has been moved to a component. + - imageadd: Chefs got a whole lot better at making visually apealing pizzas! Their + boxes got spiffied up to match, too. + - bugfix: Fixed a dead bartender spawning in the beach biodome ruin. + - bugfix: fixes modsuit devices fucking up if you couldnt equip them + - bugfix: fixes modsuit pins fucking up if you remove the module + - imageadd: modsuit jetpack now has unique assets + coldud13: + - imageadd: fixed modsuit cores needing CS:S +2022-01-23: + Melbert: + - bugfix: Fixes some decals and piping in Delta's Ordnance Lab + Orion_the_Fox, Pirill: + - rscadd: Added several new Bamboo items, turfs, and more! + - imageadd: Updated existing Bamboo items to a less repulsive green. + PositiveEntropy: + - imageadd: resprite the toolboxes + - imagedel: removes the old Goon toolbox sprites + Semoro: + - bugfix: timers not removing from second queue on init + - bugfix: Avoid timer scheduling too far events into short queue + SkyratBot: - rscadd: new plasma cutter EMP effect, it sets you on fire - rscadd: Traitor Roboticists can now purchase the Springlock MODsuit Module from the uplink. @@ -996,33 +1513,75 @@ - bugfix: Portable Scrubbers and Large Scrubbers should no longer display as large, embittered ERROR icons for those who enjoy mapping. - refactor: Refactored AI law announcing. + JohnFulpWillard: + - bugfix: Tramstation's Brig lockers can now be used more than once. + - qol: Security Officers can right click Tramstation's permabrig lockers to open + them early, unregistering their ID. + OneAsianTortoise: + - bugfix: headset, spray can, card, crayon, seclite have correct suit slot sprite + now. + RandomGamer123: + - bugfix: Certain traitor objectives now fail when they are supposed to instead + of unintentionally succeeding, most notably when objective-critical items are + destroyed. + SuperNovaa41: + - admin: Adds logging to the tippable component, to catch all the new borg griefing. + TemporalOroboros: + - balance: The blastcannon's damage has become more spread out and it now may be + somewhat diminished by walls depending on config. + - balance: The base range of the blastcannon has been slightly buffed to compensate + for the new diminishing effect of walls. + neopythagorean: + - bugfix: Hitting cancel when renaming a paper now actually cancels the operation. +2022-01-22: + AdipemDragon: + - imageadd: Chefs got a whole lot better at making visually apealing pizzas! Their + boxes got spiffied up to match, too. + ArcaneMusic: + - refactor: Boomerang behavior has been moved to a component. + ErdinyoBarboza: + - bugfix: Ready Meal Donkhiladas are now made with meat and vegetables that do not + vaporize when microwaved. + Fikou: + - bugfix: fixes modsuit devices fucking up if you couldnt equip them + - bugfix: fixes modsuit pins fucking up if you remove the module + - imageadd: modsuit jetpack now has unique assets + LemonInTheDark: + - bugfix: Fixes plants not maintaining their healthy size when picked up and put + back down + - bugfix: Fixes some weird behavior with items falling out of your hands when space + moving. Life is pain + - bugfix: Fixes things not properly flying out of ruptured disposal pipes + Melbert: + - expansion: 'Deltastation: Atmosphics, Engineering, and Service Maintenance revamp!' + Pickle-Coding: - balance: Tritiumfire will need more tritium burned in order to release radiation. The higher the volume of the gasmixture, the more tritium is needed. - balance: Tritiumfire radiation pulse will always have a range of at least 6, but will need more tritium in order to increase range. - balance: Tritiumfire will be less likely to irradiate you if there is less tritium getting burned. - - rscadd: Reflectors have been slotted with USB ports. - - bugfix: Fixed aggressive mobs moving twice as slow as they should. This was the - result of a rather big refactor that moved us away from a BYOND thing. I don't - know how the BYOND thing fucking works internally, so the numbers might be a - bit off. If something seems (way) too fast/slow, lemme know yeah? - - soundadd: The next time you work out at the gym, please appreciate the new crispness - of the sound when that machine starts to squeak as a result of your effort. - So refreshing. - - bugfix: Setting volume pump to 0L/S will no longer runtime. - - bugfix: ghosts will now bob up and down - - balance: Borgs can halve their selfuntip time with the power of roleplay. - itseasytosee: - - bugfix: fixed stacked cannonball sprites looking wack - jjpark-kb: - - rscdel: removed some starting chemicals from the borer - - rscadd: 'Port Tarkon: changed atmospherics' - - rscadd: 'Port Tarkon: added a bluespace miner circuitboard to a safe' - - rscadd: 'Port Tarkon: Split the starting 25 uranium into small piles around the - map' - - balance: changed bluespace miner price from 200,000 to 75,000 - - bugfix: fixed bluespace miner missing "pressure too high" examine text + RandomGamer123: + - bugfix: Soulful toolboxes, made by using a soulstone with a shade in it on a toolbox + now display their icon properly. + ShizCalev: + - bugfix: Camera assemblies are now upgradable again! + SkeletalElite: + - rscadd: new plasma cutter EMP effect, it sets you on fire + SuperNovaa41: + - bugfix: Fixed a dead bartender spawning in the beach biodome ruin. + Tastyfish: + - bugfix: Fixed delivery tagger destinations. + YakumoChen: + - qol: Traitors trying to steal a supermatter sliver should be reminded that magboots + are required near an active supermatter at all times. + cacogen: + - qol: Fire alarms prepend their area name + san7890: + - bugfix: Portable Scrubbers and Large Scrubbers should no longer display as large, + embittered ERROR icons for those who enjoy mapping. + - bugfix: Nanotrasen finally realized that when spraying decals on TramStation to + go UNDER any staircase accessories. tastyfish: - bugfix: Objects transitioning through z-levels in disposals no longer lose their delivery destination tag. @@ -1059,6 +1618,133 @@ game! - rscadd: Playing videogames will now give you a slight mood buff. - bugfix: Ablative trenchcoats will no longer delete sechuds given from other sources. + zxaber: + - bugfix: Fixed cyborg light overlay not showing when the light is off. +2022-01-23: + Blevruz: + - rscadd: Reflectors have been slotted with USB ports. + Iamgoofball: + - rscadd: Traitor Roboticists can now purchase the Springlock MODsuit Module from + the uplink. + - rscadd: This version of the Springlock MODsuit Module activates way, way faster. + LemonInTheDark: + - bugfix: Fixed aggressive mobs moving twice as slow as they should. This was the + result of a rather big refactor that moved us away from a BYOND thing. I don't + know how the BYOND thing fucking works internally, so the numbers might be a + bit off. If something seems (way) too fast/slow, lemme know yeah? + Melbert: + - bugfix: Fixes some decals and piping in Delta's Ordnance Lab + - expansion: 'Ninja / traitor comms hacking can now summon a wider variety of antags: + Pirates, Fugitives, More traitors, or a flat dynamic threat increase!' + Orion_the_Fox, Pirill: + - rscadd: Added several new Bamboo items, turfs, and more! + - imageadd: Updated existing Bamboo items to a less repulsive green. + Pickle-Coding: + - bugfix: Setting volume pump to 0L/S will no longer runtime. + PositiveEntropy: + - imageadd: resprite the toolboxes + - imagedel: removes the old Goon toolbox sprites + Semoro: + - bugfix: Avoid timer scheduling too far events into short queue + - bugfix: timers not removing from second queue on init + SuperNovaa41: + - refactor: Refactored AI law announcing. + - balance: Borgs can halve their selfuntip time with the power of roleplay. + itseasytosee: + - bugfix: fixed stacked cannonball sprites looking wack + jjpark-kb: + - bugfix: ghosts will now bob up and down + san7890: + - soundadd: The next time you work out at the gym, please appreciate the new crispness + of the sound when that machine starts to squeak as a result of your effort. + So refreshing. + zxaber: + - balance: Fire Locks now check for atmos issues on their own, rather than leaving + it to the Fire Alarm. This should cut down on a single breach turning the main + halls into a navigational mess. + - balance: 'Fire Locks will wait five seconds after a reset before triggering again. + tweak: Fire Alarms will still activate all Fire Locks in an area if manually + pulled. tweak: Fire Alarms are still used to reset Fire Locks, but now it''s + a right-click action. tweak: Emagging a Fire Alarm will apply the effect to + all Fire Locks in its area, behaving roughly the same as before. tweak: Disabling + Fire Detect is also still done at the Fire Alarm and should work closely as + it used to.' + - balance: Right-clicking a closed Fire Lock with a crowbar will open it for exactly + two seconds. Holding it open (left click) is unchanged. + - balance: 'Firelock emag functions (ignoring atmos detect) is now done by a doorjack + on the firelock itself. You can still emag a fire alarm to mute it, though. + sprite: Fire Locks now have lights that display the reason they are active. + Orange is Hot, Cyan means Cold, and White means a Fire Alarm was pulled.' +2022-01-24: + ErdinyoBarboza: + - bugfix: Service Tech Storage now has proper kitchen appliance circuitboards + JohnFulpWillard: + - bugfix: Fixed some problems with bullets (Not making you guilty to Honorbound, + Monkeys wouldn't retaliate against you, and Stealth MODsuits wouldn't react + at all). + LemonInTheDark: + - bugfix: Fixed abductor consoles having infinite action buttons + - rscdel: Removed another source of long timer singlecaps + - bugfix: Kudzu will spread properly now + Melbert: + - bugfix: the powergame crowbar has been lifted out of icebox mining and replaced + with a more sane crowbar + - bugfix: Fix Deltastation engineering shared storage door access + - bugfix: Delta atmos has a CO2 -> waste filter, like all other maps + ORCACommander: + - bugfix: The Redundant Form of Redundancy Introduced by the redundant department + of redundancy has had its redundancy reduced redundantly + ReinaCoder: + - bugfix: Tramstation brig's disposals now has a trunk under it + Semoro: + - bugfix: Avoid runechat scheduling too far events into short queue (port from SStimer) + Thunder12345: + - bugfix: Tramstation's gulag processing room has been rearranged so prisoners can + disembark on their own instead of being trapped. + Zonespace27: + - bugfix: Simplebots can now have tools used on them without injuring them in the + process. + capsaicinz: + - rscadd: Adds supermatter spiders. + coldud13: + - spellcheck: removed a misplaced bracket in the modular computer printer display + itseasytosee: + - bugfix: skeleton wings had some missing sprites readded + lewcc: + - bugfix: Using screwdrivers on bots will no longer attack them. + mozi_h: + - refactor: filing cabinets now use tgui + necromanceranne: + - bugfix: Restores the cardborg helmet icon. + - bugfix: Launchpads no longer disappear when screwed open. + tf-4: + - spellcheck: Removed a duplicate exclamation mark from the dismemberment message. + timothymtorres: + - code_imp: Move defines to their local .dm files + - code_imp: Remove code/__DEFINES/misc.dm + - refactor: Adds some documentation to defines + tralezab: + - balance: hop can no longer get objectives to steal the hand tele. + - balance: Heirlooms are now visible to everyone on examine. + unit0016: + - expansion: Donk Co. Has finally seen fit to refurbish their lavaland bases - And + unlike those /other/ guys, now things aren't standardized across every installation! + To.. some executive's amusement. +2022-01-25: + ErdinyoBarboza: + - expansion: Adds Semki's and Pistachios to the Snack Vendor. Also you can now dry + sunflowers to make your own roasted sunflower seeds! + - spellcheck: Improper snack names has been made to use \improper. + Guillaume Prata: + - qol: APCs/Air alarms are now locked/unlocked with Right click + JohnFulpWillard: + - refactor: Honkbots have been made a subtype of Secbots, which means they trigger + phobias of security, and their behavior has additionally been overhauled to + work more like Beepsky. + Kubisopplay: + - bugfix: Malfunction in malfunctioning ai protocols should be fixed, AIs should + break regularly again. + LemonInTheDark: - rscadd: Added an action button to janitor cyborgs. It'll draw water from your bucket and clean the ground under you as you walk. More wasteful then mopping mind @@ -1067,12 +1753,31 @@ version. It doesn't have the 2 second wait attached to it - refactor: Made being a cleaning chemical into a bitflag instead of having manual checks in mop code - - spellcheck: Improper snack names has been made to use \improper. + PapaporoPaprito's sprites: + - rscadd: ports some moth wings & antennae from fulp (credit to PapaporoPaprito + for the original icons) + SkeletalElite: + - bugfix: An active turf was fixed on the DJ station + SuperNovaa41: + - bugfix: Ablative trenchcoats will no longer delete sechuds given from other sources. + Vladoricious and Michiyamenotehifunana: + - rscadd: Added the CMO turtleneck and turtleneck skirt! Order them in the Medical + section of cargo! + axietheaxolotl: - imageadd: New sprites for HoS Jumpsuit/Jumpskirt, and Turtleneck/Skirtleneck - imageadd: New sprites for Warden Jumpsuit/Jumpskirt - imageadd: New sprites for Sec's formal uniforms - - bugfix: Malfunction in malfunctioning ai protocols should be fixed, AIs should - break regularly again. + cacogen: + - bugfix: Items returned to vending machines no longer disappear. Instead, they + increment that item's count and can be vended again immediately for free + - expansion: Nearly all vending machines accept returns (no refunds, though) + magatsuchi: + - bugfix: removes catwalk satchels + neopythagorean: + - rscadd: Nanotrasen has begun hiring gamers. These crew members have a need to + game! + - rscadd: Playing videogames will now give you a slight mood buff. + san7890: - rscadd: The species of Rabbits signed a declaration saying that they no longer wanted to be a part of Easter. After a long four-year separatist movement and a lot of bloodshed, they aren't! @@ -1081,112 +1786,88 @@ - bugfix: If for some reason you wish to kill one of these creatures, the black and brown variants should now have their eyes comically turn into an X (because that wasn't there before). - - bugfix: Fixed some problems with bullets (Not making you guilty to Honorbound, - Monkeys wouldn't retaliate against you, and Stealth MODsuits wouldn't react - at all). - Vladoricious and Michiyamenotehifunana: - - rscadd: Added the CMO turtleneck and turtleneck skirt! Order them in the Medical - section of cargo! - cacogen: - - bugfix: 'Items returned to vending machines no longer disappear. Instead, they - increment that item''s count and can be vended again immediately for free expansion: - Nearly all vending machines accept returns (no refunds, though)' - jjpark-kb: - - bugfix: you can purchase borer eggs that are actually fertilized this time - mozi_h: - - refactor: filing cabinets now use tgui tastyfish: - - rscadd: The Tramstation's confusing 'service lathe room' is now a real Service - Hallway. - - bugfix: On Tramstation, service orders now have their destination to Service Hallway, - since it now exists. - - bugfix: Skirt-wearing assistants now actually get skirts. - - bugfix: Teshari clothing colors are now more correct for a large portion of the - generated clothing. - theOOZ: - - bugfix: Runechat doesn't cover the sprites of oversized quirk-holders + - qol: The destination tagger UI now shows its items in alphabetical order (intentionally). + the-orange-cow: + - qol: In game tips now properly recommend Left 4 Zed as a means of mutating plants. Please, + stop using unstable mutagen. 2022-01-26: - AtoriBirb: - - rscadd: missing line of code to allow choosing digitigrade briefs, obvious anthro - h8, no other explaination - Azarak: - - bugfix: Fixes accessories always being treated like Teshari is wearing them + ErdinyoBarboza: + - spellcheck: Gives mannitol an actual taste. + - expansion: Boritos Corn Chips can now be bought from Snack Vendors + - bugfix: Made the trash of Ready Donkmeal nicer + - bugfix: Updates food spawners to include Boritos, Semki's and Pistachios Kokonut (Maxymax13): - imageadd: Touches up the new toolboxes' appearance. - Riggle: - - admin: gamemode panel now correctly displays the time - SkyratBot: - - spellcheck: Gives mannitol an actual taste. - - bugfix: An active turf was fixed on the DJ station - - rscadd: spacevines now have a spawning animation - - bugfix: Vending machine doesn't fall over if its weightless - - bugfix: removes catwalk satchels - - refactor: Reworks some tool interactions to use specific tool procs - Zonespace27: - - bugfix: Most skyrat traitor items now have their proper reputation requirements - - bugfix: Heads of Staff and Centcomm employees can no longer be thieves. - nikothedude: - - rscdel: Removed the joe swanson announcer. - tf-4: - - bugfix: The secborg research node has been removed, as they're supposed to be - unobtainable. - theOOZ: - - rscadd: Added the emag to OPFOR's item selection -2022-01-27: - AtoriBirb: - - bugfix: added the TRAIT_CAN_USE_FLIGHT_POTION to most of the Skyrat races. - Ebin-Halcyon: - - imageadd: Chrono suit + Honkerative digi sprites - - bugfix: Chrono suits are no longer sent to the 4th dimension and now properly - have worn sprites - ErdinyoBarboza: - - bugfix: Tramstation's gulag processing room has been rearranged so prisoners can - disembark on their own instead of being trapped. - - bugfix: Removed the firelocks in the TramStation SM chamber - - bugfix: Makes the screwdriver and wirecutters sprites use the correct versions - GoldenAlpharex, Serijas for the Cyborg sprites: - - bugfix: Fixed cyborgs re-generating a bunch of icons every time they'd pick a - model, with more optimizations to that to come. - - code_imp: Made some minor improvements here and there to paper plane code to make - it more functional. - LT3: - - bugfix: Medical cryo cells are now on the correct layer. - Melbert: - - admin: Comms console hacks by ninjas and traitors (the ones that spawn antags) - are now logged (find them in user logs and in the game log!). - PapaporoPaprito's sprites: - - rscadd: ports some moth wings & antennae from fulp (credit to PapaporoPaprito - for the original icons) PositiveEntropy, Axietheaxolotl: - imageadd: Resprites/Reshades the Head of Security's Trenchcoat! - imageadd: Resprites commander caps into peaked caps! Flex your naval prowess with them! - imagedel: Removes the old captain parade tunic, replacing it with Captain's Parade Jacket! - SkyratBot: - - refactor: the telecommunications server monitor now uses tgui. - - bugfix: Made the trash of Ready Donkmeal nicer - - bugfix: Updates food spawners to include Boritos, Semki's and Pistachios - - balance: Removes the 20 seconds stunlock rng from tourettes. - - bugfix: blood barrage no longer has a seizure when you use it - - bugfix: Kilo uses regular newscasters instead of security variants - - balance: Antagonists cannot roll for thieves anymore, as you already have a larger - amount of impact on the round than thief would give you. - - admin: Admins no longer roll for thief while they sit around on centcom testing - things. - - bugfix: Bluespace gas vendors no longer deletes the gases it doesn't transfer - when transferring gases. - - bugfix: APOTHEOSIS! now forces you standing during your death animation, restoring - the old (not forced) standing when I originally added APOTHEOSIS! - - rscadd: Separatists now have an antagonist ui! + Riggle: + - admin: gamemode panel now correctly displays the time + SmoSmoSmoSmok: + - bugfix: Vending machine doesn't fall over if its weightless + Y0SH1M4S73R: + - expansion: Adds the MOD Action component for the circuit adapter module. When + the circuit adapter is selected, a radial menu opens, allowing the wearer to + trigger any of the installed Action components. + - qol: The circuit adapter module can be printed in the component printer. + - qol: The circuit adapter module can have its circuit removed. Because of this, + the module no longer starts with an unremovable circuit pre-installed. - spellcheck: Renames the MOD component to the MOD circuit adapter core, as it is no longer the only MODsuit-related circuit component. - - bugfix: 'The MOD circuit adapter core can now activate inactive MODsuits. qol: - The MOD circuit adapter core''s "Selected Module" port is now a string port - instead of an entity port. qol: The MOD circuit adapter core now has a "On Module - Selected" output signal.' + - bugfix: The MOD circuit adapter core can now activate inactive MODsuits. + - qol: The MOD circuit adapter core's "Selected Module" port is now a string port + instead of an entity port. + - qol: The MOD circuit adapter core now has a "On Module Selected" output signal. - bugfix: The BCI action component now properly typechecks if it was inserted into a BCI. + coldud13: + - qol: Adds text to let players know that you can unscrew catwalk plating. + jjpark-kb: + - rscadd: spacevines now have a spawning animation + lewcc: + - refactor: Reworks some tool interactions to use specific tool procs + tralezab: + - bugfix: APOTHEOSIS! now forces you standing during your death animation, restoring + the old (not forced) standing when I originally added APOTHEOSIS! +2022-01-27: + Fikou: + - balance: lowers kilo's bombcap multiplier + Iamgoofball: + - balance: Removes the fucking 20 second stunlock rng from tourettes because it's + fucking stupid and I just had the most agonizing thirty fucking minutes of my + goddamn life, holy shit, I hate this fucking mutation so goddamn much, who the + fuck thought 20 second hard stun was a genius idea for a random mutation, especially + the fact it gives absolutely zero indication that it's from the tourettes because + the stun has no message attached + Kylerace: + - bugfix: the fast mc tab refresh pref actually works + Melbert: + - admin: Comms console hacks by ninjas and traitors (the ones that spawn antags) + are now logged (find them in user logs and in the game log!). + Pickle-Coding: + - bugfix: Bluespace gas vendors no longer deletes the gases it doesn't transfer + when transferring gases. + SkeletalElite: + - bugfix: Kilo uses regular newscasters instead of security variants + Wallem: + - expansion: Monkeys can now protect their village from the rubber menace. + Zonespace27: + - bugfix: Heads of Personnel can now be midround thieves, as intended. + blessedmulligan: + - bugfix: You can now remove attachments from weapons without standing across the + room + magatsuchi: + - bugfix: restructures some code to make airlocks hackable again + - bugfix: blood barrage no longer has a seizure when you use it + neopythagorean: + - refactor: the telecommunications server monitor now uses tgui. + san7890: + - bugfix: Followers of Nar'Sie who hope to summon her can hopefully ascertain the + correct area to summon her, as the gambling and gaming dens have now been seperated. - bugfix: Whenever radiation shelters are blueprinted and labelled as a "radiation shelter", you can rest easy now that the blueprint has an actual name. It doesn't matter on a day-to-day basis, but it looks a lot nicer for the people working @@ -1245,6 +1926,30 @@ - bugfix: DJ Space ruin no longer uses incorrect turfs. - bugfix: The camera in the Ice Box Station Locker Room is no longer inside of a door. + tastyfish: + - bugfix: Central Command has finally informed the Plexagon vendor that service + hallway access exists, allowing HoP's to grant it to ID cards. + tralezab: + - rscadd: Separatists now have an antagonist ui! + - balance: Antagonists cannot roll for thieves anymore, as you already have a larger + amount of impact on the round than thief would give you. + - admin: Admins no longer roll for thief while they sit around on centcom testing + things. +2022-01-28: + JohnFulpWillard: + - admin: Tool usage is now (config-locked) logged! + Jolly-66: + - bugfix: DJ Space ruin no longer uses incorrect turfs. + Maxymax13: + - imageadd: resprites pills + Sheits: + - imageadd: Resprites the mega legion and all legion related mobs + Wallem: + - qol: Mailbags can be worn on cargo coat. + - imageadd: Mailbags have their own sprite instead of borrowing it from book bags. + Zonespace27: + - qol: You can now use autosurgeons on other people after a delay. + axietheaxolotl: - imageadd: New sprites for the Parcel Parceaux, base Mime mask, Mime outfit and skirt, and mime sexy outfit. - imageadd: new sprites for lace-up shoes. @@ -1266,6 +1971,7 @@ on the firelock itself. You can still emag a fire alarm to mute it, though. sprite: Fire Locks now have lights that display the reason they are active. Orange is Hot, Cyan means Cold, and White means a Fire Alarm was pulled.' + castawaynont: - balance: CentComm's Mark One SWAT suit's design has been reworked; it now lacks spaceproofing, but it has become significantly faster to move in and retains temperature-proofing. These adjustments have allowed CC to sell them for a lower @@ -1277,6 +1983,17 @@ - refactor: Honkbots have been made a subtype of Secbots, which means they trigger phobias of security, and their behavior has additionally been overhauled to work more like Beepsky. + jjpark-kb: + - qol: safes now use balloon alerts for the hint + san7890: + - bugfix: Nanotrasen 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. + - bugfix: Area definitions for the IceBox and Lavaland Labor Camps have been updated. + That means that gulag point-prisoners no longer have a safe haven inside the + security portion of IceBox's security wing. + - bugfix: The warden can no longer consider half of security to be their office + on KiloStation. - rscadd: 'Introducing: The Lizard''s Gas! A brand new (gas) station for you to go out and refuel your ships and your stomachs. It''s been a while since the power''s been turned on, but everything is just the way it was left all those @@ -1340,6 +2057,58 @@ now abandoned. - bugfix: Attempting to write to paper no longer comically bluescreens. - bugfix: Spiders will now have a randomized number next to their name. + - bugfix: The IceBox Station Telecommunications Room now has a fire alarm. + - bugfix: Atmossians, no longer fret. You now own all of the walls in TramStation's + Incinerator Room. + - bugfix: The camera in the Ice Box Station Locker Room is no longer inside of a + door. +2022-01-29: + Fikou, TetraZeta for sprites, Nerevar for description.: + - expansion: Loader Class MODsuit, equipped with hydraulic arms, available in your + nearby cargo storage (or qm office on delta). + - expansion: BEPIS MODsuit modules, currently available one lets you change your + disposal destination. + Improvedname: + - bugfix: Ash drake shapeshift now converts your health like shapeshifting is supposed + to + LemonInTheDark: + - bugfix: APCs will no longer error and complain about something that doesn't actually + matter + - bugfix: I accidentally doubled the speed of all simple mobs. It's fixed now. I + also know how byond's internal movement stuff works now. I hate this codebase + OneAsianTortoise: + - bugfix: Fixes being able to load C-4/X-4 into the grenade launcher, and it duplicating + when you try to load it + RandomGamer123: + - qol: Purified shades now show who they were prior to becoming a shade. + - bugfix: Purified shades that get converted to shades now become regular cult shades. + - qol: Purified soulstones (and the shades inside) can now directly be converted + into cult soulstones (and cult shades) with Twisted Construction. + - spellcheck: '"Shade of" does not get duplicated anymore for soulstones under certain + conditions' + SmoSmoSmoSmok: + - bugfix: Cuffing people as a PAI/ghost controlled beepsky no longer glitches out + SuperNovaa41: + - bugfix: Thermite will no longer leave an impassable fire tile if the turf beneath + it is deleted/deconstructed. + - bugfix: Spiders will now have a randomized number next to their name. + tralezab: + - balance: Statues can now phase around when unseen. +2022-01-30: + Melbert: + - bugfix: Balloon alerts sourced on turfs work properly. + ReinaCoder: + - bugfix: The adjusted versions of the Head of Security's jumpsuit and skirt are + now the same colour as the non-adjusted. + Timberpoes: + - bugfix: Attempting to write to paper no longer comically bluescreens. + Vire, san7890, mrmelbert, Sealed101: + - bugfix: Autonamed cameras should no longer show static in camera consoles. + antropod: + - balance: Folded bluespace bodybag with dwarves fit into backpack + cacogen: + - bugfix: Ice Box Public Mining downstairs now uses proper external airlocks + san7890: - bugfix: If you've been noticing some weirdness in the light as you spacewalk over to the AI Satellite on MetaStation, fear no longer for they have been fixed. - spellcheck: The last ash drake currently residing on the celestial body underneath @@ -1391,3 +2160,35 @@ - bugfix: The teleporter room shutters on Blueshift are now functional thestubborn: - bugfix: sheriff hat will now display ears + - imageadd: Abandoned Kitchens now have a special sprite indicating that they are + now abandoned. + theOOZ: + - bugfix: Runechat reads the y offset value of the sayer instead of the hearer +2022-01-31: + Donpedrito: + - rscadd: Added blue shoes to the MediDrobe. + Ghommie: + - bugfix: Fixed the Illegal tech node being unobtainable. + Guillaume Prata: + - qol: Metalfoam structures can now be used as a girder to finish building walls. + Jackraxxus: + - bugfix: Examining the pirate Dutchman's mast will no longer shatter your immersion. + Maurukas: + - bugfix: NT CIMS no longer detects Supermatter crystals and shards that are not + owned by Nanotrasen + Melbert: + - qol: blind people can hear talking toys + SmoSmoSmoSmok: + - spellcheck: Fixes popup text resulting from someone batoning a cyborg + TemporalOroboros: + - balance: The sniper rifle can now shoot things from much further away. + Zonespace27: + - bugfix: Using an autosurgeon on someone else now properly gives them the implant. + jjpark-kb: + - qol: You can now rotate the direction of the mecha fab if its wire panel is open + timothymtorres: + - config: Add PR_ANNOUNCEMENTS_PER_ROUND and STATION_GOAL_BUDGET to be a config + instead of define + tralezab: + - admin: Bounty Hunters can now be called via admin ert + - expansion: Oh, and they have cool flame ids as well! diff --git a/html/changelogs/archive/2022-02.yml b/html/changelogs/archive/2022-02.yml index 85a15576e9bfa..46be8e5f440ff 100644 --- a/html/changelogs/archive/2022-02.yml +++ b/html/changelogs/archive/2022-02.yml @@ -1,47 +1,81 @@ 2022-02-01: - AtoriBirb: - - bugfix: a trait not removed when the chameleon gene is removed. - Ryll/Shaps: - - bugfix: Iron walls built on top of metal foam will produce metal foam instead - of a girder when decon'd. - SkyratBot: - - bugfix: Species-locked traitor items (currently the moth suspicious lantern) has - been re-added after an accidental removal. - - code_imp: Refactored the incapacitated proc to skip optional arguments and use - the named arguments properly to improve readability. - - balance: xeno weeds spread cooldown lowered from 15-20 seconds to 5-10 seconds + ArcaneMusic: + - qol: Blackmarket uplinks now draw from the player's ID card, not from an internal + supply of credits. - code_imp: Blackmarket uplinks on the backend were tweaked in a way consistent with other sold items. + CRITAWAKETS: + - refactor: The environmental atmos scanning ability of the gas analyzer is now + a component. + Ghommie: - bugfix: Fixed the "skeletal guardian" away mission role not being a skeleton. - - bugfix: fixed new areas over starlight areas not having lighting objects - Spc-Dragonfruits: - - rscadd: '"Logistics Officer" QM title.' - - tweak: Titles "Head of Cargo", "Cargo Foreman" and "Cargo Guard" switched out - for "Head of Supply", "Supply Foreman" and "Supply Guard". - jjpark-kb: - - config: added a ssdecay disable nests config -2022-02-02: - ErdinyoBarboza: - - bugfix: Returns Tram Brig back to its original form. No more holding cells - GuiltyNeko: - - bugfix: Pipes, vents, scrubbers, and cables on icebox have been rearranged to - be slightly more sane - - bugfix: Meta Station's Supermatter Air Alarm is now the "engine" subtype, allowing - engineers access to it. + JohnFulpWillard: + - bugfix: Species-locked traitor items (currently the moth suspicious lantern) has + been re-added after an accidental removal. + Jolly-66: + - bugfix: Last two Active Turfs in DJ Space Ruin were fixed. + LemonInTheDark: + - bugfix: Kilo and tram's whiteships should actually spawn now. No promises on them + docking though Melbert: - - bugfix: Cult deconversion text is the right color again - balance: Icebox's cursed spring now only spawns on the lower levels of the moon. - Paxilmaniac: - - bugfix: the wooden tables in the barber's shops on both meta and delta no longer - have magic tables that cannot be touched in any way - SkyratBot: - - bugfix: Drones can now properly insert items into machines frames... or really - anything else. - - bugfix: If you're looking through the Medbay on some stations (and shuttles too), - take a moment to appreciate that the stasis beds have been re-arranged. + Mothblocks: + - qol: Default FPS (if you have it unset) is now 100 instead of 40. + RandomGamer123: + - bugfix: Prevents silicons from opening circuit airlocks by walking through them. + Ryll/Shaps: + - bugfix: Iron walls built on top of metal foam will produce metal foam instead + of a girder when decon'd. + TiviPlus: + - bugfix: fixed new areas over starlight areas not having lighting objects + Watermelon914: + - expansion: Final objective battlecruiser will now make you a battlecruiser ally, + giving you the nuke codes and making it obvious to other battlecruiser members + that you are one of them. + - expansion: Added telecom disruption and blackout purchases for traitors to purchase, + and moved the elite syndicate hardsuit from the nukie uplink to the traitor + uplink as a high progression cost item. - balance: Rebalanced TC rewards from assassinations to be less, and lowered TC rewards for plentiful objectives. - balance: Lowers the progression reward of assassination objectives. + cacogen: + - expansion: Gave lower Ice Box public mining an air alarm, vent and scrubber and + made its elevator shaft more warning-like + jjpark-kb: + - expansion: xeno weeds will now be destroyed when their parent node is destroyed + - balance: xeno weeds spread cooldown lowered from 15-20 seconds to 5-10 seconds + jlsnow301: + - code_imp: Created a new input component that accepts only integers. More usage + to come. + - refactor: Pay stands are now holographic. It's 2562! Create one by right-clicking + your ID. + - rscdel: Circuit boards for pay stands. + - refactor: Pay stands now have their own TGUI. + - bugfix: Custom vendors now alert you when someone makes a purchase. + - bugfix: Custom vendors now place items in your hand when you make a purchase. + san7890: + - bugfix: Nanotrasen realized that when you punt someone down using IceBox Station's + execution room, they would only fall a meager one Z-level (or sometimes, wouldn't + even fall at all!). This has been corrected to allow you to punt them down to + the intended height of TWO Z-Levels. Nifty, eh? + - bugfix: If you're looking through the Medbay on some stations (and shuttles too), + take a moment to appreciate that the stasis beds have been re-arranged. + timothymtorres: + - code_imp: Refactored the incapacitated proc to skip optional arguments and use + the named arguments properly to improve readability. +2022-02-02: + Aerden: + - bugfix: Fixed the thermomachine board being listed as a freezer/heater board in + the circuit imprinter. + - code_imp: Changes the descriptions of the HFR boards to not be the same as the + freezer/heater. + Capsandi: + - bugfix: missing delta turbine air supply pipe has been installed + Ghommie: + - bugfix: Fixes exodrones erroneously reporting "travelling back to station" in + the status panel of their console UI when travelling from site to site. + - qol: exodrones will now report the name of the target sites they're travelling + to. - bugfix: Fixed an oversight with the skittish trait that let players dive into burial mounds, which are technically a subtype of crates. - bugfix: Fixed a runtime error that made abandoned crates not update their lock @@ -49,161 +83,199 @@ - bugfix: Fixed an oversight with abandoned crates not resetting the number of attempts left and not nulling the last attempted code when re-locked. - bugfix: Fixed burial mounds somehow getting lock lights overlays. - - config: Add PR_ANNOUNCEMENTS_PER_ROUND and STATION_GOAL_BUDGET to be a config - instead of define - - bugfix: Last two Active Turfs in DJ Space Ruin were fixed. - - bugfix: 'Fixes exodrones erroneously reporting "travelling back to station" in - the status panel of their console UI when travelling from site to site. qol: - exodrones will now report the name of the target sites they''re travelling to.' - - bugfix: Kilo and tram's whiteships should actually spawn now. No promises on them - docking though - - bugfix: Prevents silicons from opening circuit airlocks by walking through them. + JohnFulpWillard: - bugfix: Clowns uploading their PDA cartridge to a screwdrivered-open airlock will now properly cause it to Honk. - - bugfix: Fixed the thermomachine board being listed as a freezer/heater board in - the circuit imprinter. - - code_imp: Changes the descriptions of the HFR boards to not be the same as the - freezer/heater. + MMMiracles: + - rscadd: Tramstation's maintenance has taken broken down into more modular segments + that will now load in randomly each round. + - rscadd: There is now a medical console and crew console in the main medbay treatment + room. + MacBlaze1: + - qol: made ethereals charging from lights repeat until they move. + Melbert: + - bugfix: Cult deconversion text is the right color again + SmoSmoSmoSmok: + - bugfix: Connects robotics trashbin to disposal system on tramstation + SuperNovaa41: + - bugfix: Drones can now properly insert items into machines frames... or really + anything else. cacogen: + - expansion: 'Changes to Ice Box mining lower levels:' + - expansion: Replaces external-facing regular walls with reinforced ones + - expansion: Replaces external shutters with external airlocks except for drone + bay + - expansion: Replaces the drone bay's single set of external shutters with a pair + - expansion: Adds outside lights to external airlocks missing them and to fenced-in + areas + - expansion: Adds warning signs to external airlocks - bugfix: Fire alarms will be renamed with areas like air alarms, e.g. Bar fire alarm --> The Adminbus fire alarm - jjpark-kb: - - balance: idle power usage for bluespace miners is up from 200 to 300 - kannthus: - - bugfix: Ghost Cafe Detainment now works as intended - tastyfish: - - bugfix: The Central Command 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: - - rscadd: pride pin in loadout :) - - spellcheck: 'its a blue bag now remove: crimble stuff is in the loft yet again' + san7890: + - bugfix: Nanotrasen moved around some of the wall decorations in IceBoxStation's + Science to appease the ghostly overlords (as well as the AI). + - balance: Security Officers (and the whole lot) now have a name assigned to their + locker room, rather than have it be another appendage of the large beast known + as Brig. 2022-02-03: Fikou, Armhulen, smartkar: - rscadd: Brimdemons have invaded Lavaland. - rscdel: Lobstrocities have awakened from their lavaland slumber, this somehow made them unavailable in the gold slime pool. - MMMiracles: - - rscadd: Tramstation's maintenance has taken broken down into more modular segments - that will now load in randomly each round. - - rscadd: There is now a medical console and crew console in the main medbay treatment - room. + Gamer025: + - bugfix: Stickyban subsystem no longer runtimes on invalid entries + Jolly-66: + - bugfix: Removed a duped pipe from Icebox and a duped power cable from Tram. + LemonInTheDark: + - bugfix: Merge datums will no longer spit blood if two mergable objects are on + the first tile examined. The directions are also trustworthy now Melbert: - bugfix: Fixes a hard delete with rod form. Also cleans up some rod code. - bugfix: Admin sending a looping rod will no longer make all following rods loop - Ryll/Shaps: - - rscadd: Added in a new admin spawn, the mystery box! Dealing randomized (maybe) - death to thunderdomes near you! Maybe! - SkyratBot: + Pepsilawn: + - bugfix: lost sprites for connectable t-ray goggles found and restored + RandomGamer123: - bugfix: Upgraded BEPISes now longer give tech for free. For a fully upgraded machine, you now need 200 credits for a 50% chance of a minor reward, and 600 credits for a 50% chance of a major reward. - bugfix: The BEPIS message telling you that you've gotten all the tech disks and therefore are getting a minor reward instead now properly displays. - - spellcheck: Not having enough iron to create a foam wall no longer erroneously - tells you that you need four iron sheets instead of two. - - code_imp: Created a new input component that accepts only integers. More usage - to come. - - refactor: Pay stands are now holographic. It's 2562! Create one by right-clicking - your ID. - - rscdel: Circuit boards for pay stands. - - refactor: Pay stands now have their own TGUI. - - bugfix: Custom vendors now alert you when someone makes a purchase. - - 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 - Science to appease the ghostly overlords (as well as the AI). + Ryll/Shaps: + - rscadd: Added in a new admin spawn, the mystery box! Dealing randomized (maybe) + death to thunderdomes near you! Maybe! + Tastyfish: - 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 - locker room, rather than have it be another appendage of the large beast known - as Brig. - - bugfix: lost sprites for connectable t-ray goggles found and restored - - bugfix: missing delta turbine air supply pipe has been installed - YakumoChen: - - imageadd: New Heart Tattoo that goes over your groin. - Zenitheevee: - - bugfix: MCR properly shows up in the right hand when held in the right hand. + jlsnow301: + - balance: Nerfs the stun on touching a field gen from 30 seconds(!) down to 10. + Adds sound and chat message feedback. + san7890: + - balance: Nanotrasen has updated how they name and define different parts of their + loot-laden maintenance tunnels. Take a look around you! tastyfish: - - bugfix: Fixed bluespace miner examine errors to show at the same pressure range - that the logic does. + - server: Added some more CI linter checks for maps, that are otherwise caught at + runtime. This will likely fail downstream maps if they're double stacking objects + which aren't allowed to stack, or misplacing APC's. tf-4: - - bugfix: Ghost roles can now use loadouts and quirks as God intended. - - code_imp: Cloaks, boatcloaks, veils, and shrouds are now GAGS instead of polychromatic. - - rscdel: The runescape cloaks have been removed. + - spellcheck: Not having enough iron to create a foam wall no longer erroneously + tells you that you need four iron sheets instead of two. + timothymtorres: + - qol: Adds more trash items to the garbage and cigbutt spawner. 2022-02-04: - Melbert: - - bugfix: Fixes being able to vote for maps which are outside their configured population - range (Such as Kilostation). - ShizCalev: - - bugfix: Fixed being able to fry objects that are actively storing other objects. - SkyratBot: + Donpedrito: + - bugfix: Tramstation and Kilostation now have bodies in their morgues shiftstart, + bringing them in line with other stations. + Ghommie: + - imageadd: Updated the icon for the Legion achievement. + - imageadd: Added an icon to the "Look Out, Sir!" achievement. + JohnFulpWillard: - bugfix: You can now once again resist out of aggressive grabs. - - bugfix: Merge datums will no longer spit blood if two mergable objects are on - the first tile examined. The directions are also trustworthy now - - balance: You no longer need beakers to build component printers or module duplicators. + Jolly-66: - bugfix: Chaplains rejoice, you can now stop burying the dead in your own robes! Burial garments have been added to the Religious Supply Crate, as was already promised in the description. - - balance: Nerfs the stun on touching a field gen from 30 seconds(!) down to 10. - Adds sound and chat message feedback. - - rscadd: The Space Ruin "The Lizard's Gas" now has a GPS on it, so you can seek - it out a little bit easier now. - - bugfix: ethereals can now charge themselves using right click, but they will also - lock/unlock the APC above normal charge - - imageadd: Updated the icon for the Legion achievement. - - imageadd: Added an icon to the "Look Out, Sir!" achievement. - - bugfix: Clicking cancel on the carp rift will no longer summon you as a carp + LemonInTheDark: + - bugfix: Optimized automated movement. Should feel a mite smoother now + - bugfix: Changed how the singulo eats turfs to hopefully be less of a load on the + server. Behavior's changed a bit tho, lemme know if anything looks too off - bugfix: Welding up a disposal segment will not longer delete most of the people/things/dogs inside it - jjpark-kb: - - balance: lowered chance for meteor event - - rscdel: removed sentient disease event - tf-4: - - code_imp: The polychromic clown mask is now GAGS, allowing finer control over - its colours. - - bugfix: Flickering lights will now properly check if they should turn on or not - when fixed. -2022-02-05: - Gandalf2k15: - - admin: Added verb to fix chat called "FIX SAY". + MacBlaze1: + - bugfix: ethereals can now charge themselves using right click, but they will also + lock/unlock the APC above normal charge + Melbert: + - bugfix: Fixes being able to vote for maps which are outside their configured population + range (Such as Kilostation). + Mothblocks: + - balance: You no longer need beakers to build component printers or module duplicators. + Nari Harimoto: + - bugfix: Icebox medbay has had a slight change in the lobby and pharmacy to fix + some ugly spots + - bugfix: Icebox dept order consoles now work, both the computer and the wallmounted + ones + Potato-Masher: + - bugfix: Kilostation's xenobiology lab airlock is no longer incorrectly accessed + with Ordnance lab access. + - bugfix: Fixed the genturfs under icebox's laundry room stairs. + RandomGamer123: + - qol: The cargo shuttle cannot be sent message has been updated to remind people + that you also cannot send the shuttle when there are undelivered departmental + order crates or syndicate bombs on it. Ryll/Shaps: - config: Added ALLOW_ADMIN_PROFILING entry to the config, controlling whether admins are given access to the server profiler - SkyratBot: + ShizCalev: + - bugfix: Fixed being able to fry objects that are actively storing other objects. + SmoSmoSmoSmok: + - bugfix: Clicking cancel on the carp rift will no longer summon you as a carp + jlsnow301: - balance: Returning to lobby is now the default assignment if your job spot was taken. + san7890: + - rscadd: The Space Ruin "The Lizard's Gas" now has a GPS on it, so you can seek + it out a little bit easier now. + zxaber: + - expansion: Alarm sounds for Fire Locks and Fire Alarms now loops slightly differently, + and will respond to changes quicker. +2022-02-05: + ErdinyoBarboza: + - qol: TramStation Bridge now has lockdown shutters. + - qol: TramStation SM chamber no longer has Firelocks. + - qol: TramStation Middle Hallway and Lower Middle Maints have their APC's outside + the power access like rest of the APC's + - qol: TramStation now has a proper service hall + FlamingCheese: + - bugfix: Random light bulbs near the gulag area have been removed + JohnFulpWillard: + - bugfix: Fixes Icebox's Law office door having plating instead of a Wood floor + like all other entrances. + Watermelon914: + - expansion: Adds list manipulation with circuits, letting you add to and remove + from lists that you create and other various things. It's pretty basic so more + list mutation components will need to be added, but this sets up the foundation + for it. jjpark-kb: - - rscdel: lone ops will no longer receive weight from nuke disk - - rscdel: removed fungal mold from event spawning - tf-4: - - code_imp: the colour-changing footwraps are now GAGS instead of polychromic. + - qol: you can now fill autolathes with items from trash bags + san7890: + - bugfix: Reality has shifted around you, and now all parts of the outdoors of IceBox + Station should now be blanketed in snow whenever one of those storms come around. + Why was this broken in the first place? Nobody knows! 2022-02-06: - RandomGamer123, Iamgoofball, IssacTheSharkWolf: - - bugfix: Shuttles on multi-z stations now have ceilings! - SkyratBot: - - bugfix: The 145.7 frequency is no longer received by all signalers. - - bugfix: you no longer see ghosts and through walls with nooartrium + Fikou: + - expansion: brings back the extended announcement + - bugfix: fixes printing unresearched mech stuff and design disks - bugfix: fixes modsuit core recipes + - bugfix: you no longer see ghosts and through walls with nooartrium + Jackraxxus: + - bugfix: The 145.7 frequency is no longer received by all signalers. + LemonInTheDark: + - bugfix: Wizards who exit rodform in a wall will no longer self gib. Skill issue? + Mothblocks: - balance: The Dynamic report for Peaceful Waypoint/Core Territory no longer guarantees providing any meta information. Previously, "Core Territory" guaranteed there were roundstart antagonists, and "Peaceful Waypoint" guaranteed the inverse. There is now a 15% chance to show the opposite result, meaning you can use the report as a good guess of what is coming, but cannot rely on it. + RandomGamer123, Iamgoofball, IssacTheSharkWolf: + - bugfix: Shuttles on multi-z stations now have ceilings! + SuperNovaa41: - refactor: Refactors reverse bear trap code. - bugfix: You can now properly take reverse bear traps off of your head if you manage to break free. - - bugfix: Wizards who exit rodform in a wall will no longer self gib. Skill issue? - - bugfix: fixes printing unresearched mech stuff and design disks - theOOZ: - - tweak: Updates "Poppy the Safety Possum" 's name to "Poppy The Safety Inspector". - - balance: 'Nerfs E-N''s explosion, buffs its laser output. qol: It is now clearly - indicated when E-N gets emagged.' - - rscadd: Adds a medium-risk progression traitor objective about E-N. - - rscadd: Adds a medium-risk progression traitor objective about Poppy the Safety - Inspector. - - bugfix: Fix Poppy's resting state. + jlsnow301: + - bugfix: Tgui number input now uses a new component that makes it easier to use. + It now autofocuses and autoselects, just like the original. + - bugfix: Alert modals have been rewritten. Messages no longer clip, they also now + respond to TGUI input preferences (UI tab) and you can press ESC to close. + - bugfix: You should now be able to enter a blank text to succumb. 2022-02-07: + Fikou: + - bugfix: xeno egg now updates its icon properly when burst + Fikou, Imaginos, Azlan, Nerevar: + - qol: you can deactivate modsuit device modules with drop key + - qol: the cargo modsuit can now hold mail bags + - bugfix: fixes modsuit speed potion being fucky + - qol: makes the gps module open the gps tgui instead of putting a gps in your hand + - balance: Reworks the mining MODsuit, the full suit is bought from the mining vendor. Fikou, PositiveEntropy: - imageadd: the elite nukie suit has new sprites - balance: the elite nukie suit starts with a little armor filled to standard by @@ -231,6 +303,7 @@ It now properly scales exponentially. - rscdel: Removed the 'take' option for traitor uplinks in the traitor panel. - bugfix: It should no longer be possible to DC admins by spamming grenades. + Ghommie: - bugfix: blob overminds can now move vertically through station z-levels while its core hasn't been placed yet. - bugfix: disease mobs can too move vertically while a host hasn't been selected @@ -239,87 +312,55 @@ to be standing on or below open space. This also applies to other living mobs with generic incorporeal movement (not to be confused with the nightmare or wizard's jaunt) as long as they can fly or there's no gravity. - - bugfix: The song editor UI now updates properly on pianos/space minimoogs. - - bugfix: xeno egg now updates its icon properly when burst + Jolly-66: - bugfix: Mapped in firelocks that are closed will STAY closed. + MacBlaze1: + - bugfix: made blast doors unable to be opened via bumping of any kind + - bugfix: made blastdoors unable to be interacted with via tools when closed + - balance: blast doors and shutters are now above windows and doors, and will hide + them. Both layers have been increased to 3.3. + - balance: shutters now cost 5 plasteel and 5 coil and 1 airlock electronic and + take 10 seconds to build + Melbert: + - bugfix: Fixes some active turfs + airlock issues on the icebox mining outpost + Mothblocks: + - qol: The observe button no longer requires tgui. + - refactor: Replaced the old surgery interface with one that is much better to use, + and lets you choose the body zone within itself. + OneAsianTortoise: + - balance: broken drinking/alcohol glass and broken plate shard now hurt you if + you step on them barefoot. + Ryll/Shaps: + - bugfix: Shooting living mobs with projectiles will no longer cause duplicated + logs/messages + TemporalOroboros: + - qol: Used grenades now look used when examined. + - bugfix: It should no longer be possible to DC admins by spamming grenades. Wallem: - bugfix: Radio Gloves will no longer vacuum your earpieces when crafted. Wallem, Partheo & Tex: - imageadd: Ports canister sprites made by Partheo & Tex from Yogstation. - tf-4: - - bugfix: Victim logs are no longer mistakenly logged as subtler emotes. - - bugfix: The bamboo stool and carpskin chairs are no longer invisible. + Watermelon914: + - bugfix: Fixed how the diminishing returns of having too much progression scaled. + It now properly scales exponentially. + - rscdel: Removed the 'take' option for traitor uplinks in the traitor panel. + sergeirocks100: + - bugfix: The song editor UI now updates properly on pianos/space minimoogs. + timothymtorres: + - rscdel: Remove rotation from IV drips. + - rscdel: Rotating objects will no longer leave fingerprints. + - qol: Add right-clicking and left-clicking to rotate objects in different directions + for alt click. Left is counterclockwise and right is clockwise. + - qol: Replace to_chat rotation messages with balloon alerts to stop redundant chat + spamming. + - qol: Hotkeys for some pipe interactions had to be changed. Right clicking on an + unwrenched pipe now changes the pipe layer. Right clicking on a unwrenched + trinary pipe device now flips it. Alt clicking handles rotation. + - qol: Computer frames now have rotation component + - bugfix: Fix rotation on wheelchairs to work properly. + - refactor: Refactored the entire rotation component and all objects that use it. Remove + a lot of deprecated code to make things cleaner. 2022-02-08: - LeonY24: - - rscadd: 'Glock-17: Black Mesa Edition' - - rscdel: No more Armadyne Glock-17 in the Black Mesa. - - bugfix: Ranged security from the Black Mesa finally shoot their foes with 9x19 - bullets, not 10mm. - SkyratBot: - - code_imp: changed a code-related default, please report if anything turns invisible - - bugfix: 'Literally unplayable bugs fixed: Pens can now be rotated again.' - - bugfix: TGUI alerts now display buttons in a column when there's more than 2 options. - - bugfix: TGUI alerts can now be disabled via turning TGUI inputs off in prefs. - - bugfix: Fixed some bluescreens related to TGUI inputs. - - bugfix: Fixes a runtime with material containers. - - bugfix: Tgui number input now uses a new component that makes it easier to use. - It now autofocuses and autoselects, just like the original. - - bugfix: Alert modals have been rewritten. Messages no longer clip, they also now - respond to TGUI input preferences (UI tab) and you can press ESC to close. - - bugfix: You should now be able to enter a blank text to succumb. - Stalkeros: - - balance: NPC HECU Grunts' caliber changed from .45 to .32, their gun also changed - from c20r to Wildcat respectively. - - bugfix: HECUs are now members of their own faction, as the God intended. - linnpap: - - rscadd: Added triple cat tail - tf-4: - - rscdel: Cortical stacks have been removed. - - code_imp: Collars are now coloured through GAGS rather than being polychromatic. - - bugfix: Cancelling renaming a collar will no longer give it a blank name. - - code_imp: The flat cap and flower pin now use GAGS - - rscdel: The turban, keffiyeh, and hijab have been removed - theOOZ: - - bugfix: Fixes some traitor objectives not awarding TC properly -2022-02-09: - Deek-Za: - - bugfix: Orderly/Engi Guard uniform sprites now work properly for Digi's. - 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 - officers and officials. Along with their digitigrade official's suits not flickering - into two different variants. - ErdinyoBarboza: - - bugfix: Fixes the food prefs to enjoy eating (these) nuts and streamlines food - prefs. Please make sure to check your species tab to check your liked and disliked - foods. - Fikou, Imaginos, Azlan, Nerevar: - - bugfix: 'fixes modsuit speed potion being fucky qol: makes the gps module open - the gps tgui instead of putting a gps in your hand' - - balance: Reworks the mining MODsuit, the full suit is bought from the mining vendor. - Gandalf2k15: - - rscadd: Explosion effects have been improved. - - rscadd: Sexuality preference. - Goffy: - - rscadd: Makes it so that succubus milk and incubus draft chems change gender when - genderswapping is enabled upon OD. - GuiltyNeko: - - bugfix: Delta Station Air mix is now set to the correct ratios - - bugfix: Renamed the cycling on some doors to "entrance" from "entrence" - Iamgoofball: - - balance: The Galactic Gene Therapy Consortium would like to issue a PSA regarding - size gene mods and abnormally sized humanoids. It is not advised to use size - adjusting gene modifications while abnormally sized, as adverse side effects - can occur, up to and including a very painful death. - Melbert: - - bugfix: Fixes a runtime which causes game start to fail and revert occasionally - - bugfix: Obsessed hug objective functions again - Nari Harimoto: - - bugfix: Icebox medbay has had a slight change in the lobby and pharmacy to fix - some ugly spots - - bugfix: Icebox dept order consoles now work, both the computer and the wallmounted - ones Necromanceranne, quin: - rscadd: Adds the Inferno and Cryo Pistols. A hybrid energy/ballistic weapon, to cargo. It can be purchased in either a goodies pack or a normal crate order. @@ -334,12 +375,111 @@ - rscdel: Removes WT-550's from cargo and related content from the techweb/protolathes. - balance: Exotic Ammo is now much earlier in the tech web to take the place of Ballistic Weaponry. - RatFromTheJungle: - - tweak: modularizes the WT550's as upstream removed them. - SkyratBot: + OrionTheFox: + - imageadd: The Suit Storage Units now have a Locked indicator on their lights! + In exchange, decontamination above safe levels has a slightly different indicator + (flashing red/yellow) + - qol: SSU gives chat warnings as to why it blocks decontamination (no items/safeties + on) + - bugfix: SSU panel/super-decontamination icons work properly now + - rscadd: The SSU super-decontamination also creates a plume of black smoke at the + end, as the flavor description said it did. + TiviPlus: + - code_imp: changed a code-related default, please report if anything turns invisible + jlsnow301: + - bugfix: 'Literally unplayable bugs fixed: Pens can now be rotated again.' + - bugfix: TGUI alerts now display buttons in a column when there's more than 2 options. + - bugfix: TGUI alerts can now be disabled via turning TGUI inputs off in prefs. + - bugfix: Fixed some bluescreens related to TGUI inputs. + - bugfix: Fixes a runtime with material containers. + san7890: + - bugfix: The Security Outpost in MetaStation's Engineering no longer has an intercom + installed between the walls. It is now actually accessible to those who can + not phase into walls. + - bugfix: If you've seen a grille with weird lighting on DeltaStation, rest assured + that we've completely obliterated (fixed) it. The odds are overwhelming that + you have not seen it, however. + - bugfix: The transit tube connection between Engineering and the AI Satellite on + MetaStation is no longer defined as a part of the Engineering Break Room. Looks + like you'll need to drink that coffee elsewhere. + - bugfix: Nanotrasen realized that one of their camera technicians improperly configured + the settings on one of the security cameras on the exterior of the AI Satellite + on TramStation. This has been rectified. + unit0016: + - bugfix: Donk Co. Is sorry. Really, really sorry. Really. They're sorry. They forgot + to ship out the stuff to make their shiny new supermatters actually.. produce + power! Nobody was laughing at people trying to run it anyways, nuh uh. Nope! +2022-02-09: + ArcaneDefence: + - expansion: Malf AIs can now have an intercom interference module. + CameronWoof: + - code_imp: wrench->closet interactions migrated to wrench_act_secondary + Gamer025: + - bugfix: Bottlers no longer runtime if they run out of beakers/containers to fill + Ghommie: + - bugfix: ACTUALLY fixes the Illegal Technology node being unobtainable. + GoblinBackwards: + - bugfix: Making medbots through the crafting menu will now account for using different + types of medkit and health analyser. + - bugfix: Ash mark now deals the correct amount of damage and no longer gets stuck + bouncing between the same two targets. + - balance: Ash mark is significantly stronger due to this fix. + Iamgoofball: + - rscdel: Hooch no longer heals assistants. + - bugfix: Fixes an exploit allowing players to bypass crafting times on spears and + cattleprods. + - balance: Wired Rods are now bulky. + Jackraxxus: + - bugfix: The Tramstation aux base console now uses the correct type, and is no + longer a ghetto advanced camera console. + Kubisopplay: + - balance: Nanotrasen 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 shouldn't get permanently locked by malf ai robofab now + Melbert: + - bugfix: Fixes a runtime which causes game start to fail and revert occasionally + - bugfix: Obsessed hug objective functions again + NamelessFairy: + - bugfix: CTF Limbo's control point timer is now correctly set to 3 minutes rather + than 6 + Pepsilawn: + - spellcheck: replaced mentions to toxins with ordnance in valentine cards in time + for the 14th + SmoSmoSmoSmok: + - balance: Syndieship turrets now target non emagged or non nukie cyborgs + TiviPlus: - bugfix: fixed some hud items layering improperly + bobbahbrown: + - admin: Cult rune creation (inscribing?) is now logged on the player panel logs + as well as the game log. + itseasytosee: + - expansion: Skateboards have been made considerably more radical + - expansion: While grinding on a table with a skateboard, if you grind on top of + somebody you are likely to hurt them quite badly + - expansion: 'Colliding with another person will now always result in a crash, in + which the person hit gets knocked over as well as the skater (protip: crash + into someone while grind to double the stun time!)' + - expansion: Colliding with a disposal unit while grinding will result in you getting + dunked in! Wack! + - bugfix: fixed some skateboard related bugs, including the action button for ollieing + always being red, and being able to ollie while dead + jlsnow301: - bugfix: Fixed an issue where holopay range could be bypassed by handing the card off. + necromanceranne: + - imageadd: Gives rubbershot and rubbershot boxes a new sprite to differentiate + them from beanbags. + - bugfix: Restores the lost sprites for the Centcom gas mask. + san7890: + - rscadd: The area where you get to sit with your alcohol has been renamed to the + Bar Lounge across all the stations. + - 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. + - imageadd: On the mapping end, there is now a new area turf sprite for the definition + of the area where you store all of the parts for telecommunications, or "Telecommunications + Storage". How gorgeous. - rscadd: 'Atmospheric Technicians can now take it easy, as the room that normally holds all of the canisters of highly flammable gas is now cleanly labelled "Gas Storage" instead of being another appendage of the absolute auditorium known @@ -437,16 +577,36 @@ - spellcheck: the kiosk scanner wand's description is now better. - bugfix: Being in the bar lounge makes extroverts happy once again! - bugfix: Unused Rubbershots are no longer invisible +2022-02-10: + ArcaneMusic: + - bugfix: Some food can once again be exported through the cargo shuttle. + Cheshify: + - bugfix: Cargo Officers on Delta have been given a locker + Ghommie: + - bugfix: Fixed several common issues with planes and layers, most noticeably potted + plants and plastic flaps being displayed under mobs and not over. + GoblinBackwards: + - bugfix: Thermal holster now fits in armour suit storage. + JohnFulpWillard: + - bugfix: Unused Rubbershots are no longer invisible + Krysonism: - balance: Clownanas are slower, but still faster than humans. - balance: 'Clownanas no longer passively drop bananas, but gain an action that lets them drop three peels with a cooldown of 10 seconds. balanance: Clown simple mobs now speak & understand monkey. balance Clowananas now get another new ability: Drop a monkey energy infused banana bunch, hit it to unleash a honkerblast!' - - imageadd: Gives rubbershot and rubbershot boxes a new sprite to differentiate - them from beanbags. - - spellcheck: Add a message when infinite pizza is generated. - - spellcheck: replaced mentions to toxins with ordnance in valentine cards in time - for the 14th + Kylerace: + - bugfix: you can now set headset channels without them resetting themselves again + Lyn505: + - spellcheck: the kiosk scanner wand's description is now better. + Timberpoes: + - bugfix: Fix a freak occurrence where random job allocation would sometimes randomly + assign players to roles that were full, fixing bugs like multiple QMs. + Zonespace27: + - spellcheck: Gravitational anomaly crates are no longer mislabeled. + carshalash: + - bugfix: Being in the bar lounge makes extroverts happy once again! + jlsnow301: - bugfix: TGUI now alerts the user when it is waiting on a refresh cooldown. In many cases, this will prevent screens from breaking that rely on static data. - bugfix: After a union dispute, shuttles can now leave the station in one piece. @@ -510,6 +670,55 @@ the final rituals have been changed a bit! qol: Using the Heretic''s Mansus Grasp on surfaces (EX: Rust Grasp) now works on right-click, instead of combat mode. qol: Used heretic influences can now be removed with a Anomaly Neutralizers.' + timothymtorres: + - spellcheck: Add a message when infinite pizza is generated. + tralezab: + - expansion: Added a new pirate ship name + unit0016: + - spellcheck: The Starfury's spawners no longer reference the now deleted SM. Long + live the syndicate sm crystal! +2022-02-11: + GoblinBackwards: + - bugfix: Hiding inside a container no longer allows you to bypass the tramstation + perma gate. + JohnFulpWillard: + - bugfix: You can no longer hear things in space (like flashbangs). + - bugfix: Wardens have a SecHUD icon again + - bugfix: Midround antagonists cannot be rolled while the shuttle is docked at the + station, or already gone to Central Command. + - bugfix: Fire breath can be used even if you can't speak (you're welcome tongue + tied mains). + LemonInTheDark: + - bugfix: Hopefully fixes sparks just, sitting in the air sometimes. At the very + least it'll cause more visible complaints + Melbert: + - rscadd: Large scale heretic revamp! + - expansion: The Codex Cicatrix is no longer a roundstart heretic item. Research + is handled through their antag info UI. Rune drawing is done by using a writing + tool with Mansus Grasp active in your offhand. The actual Codex is an unlockable + ritual item now. + - expansion: The Living Heart is no longer a roundstart heretic item - their actual + heart now becomes their Living Heart, and it makes a sound when triggered. Losing + your heart (being disemboweled) will require you to do a ritual to regain it. + - expansion: The Hereic Antag UI has been overhauled, and now hosts much of their + mechanics as well as providing some helpful tips for newer players. + - expansion: Most heretic spells now require a focus to cast. All heretics can make + a basic focus necklace, and some heretic equipment also functions as a focus. + (Credit to Imaginos for the focus sprite!) + - expansion: Heretics now passively gain +1 influence every 20 minutes. + - expansion: Heretic sacrificing has been reworked. You can now sacrifice people + who are in soft crit or weaker. Sacrificing someone heals them, cuffs them, + and teleports them to the SHADOW REALM, where they must dodge a barrage of hands + to survive. Survive long enough and you return without memory - die, and your + body will be thrown back. + - expansion: Heretics now have a few new rituals, including the Ritual of Knowledge, + a randomly generated ritual that awards knowledge points. + - expansion: Heretic ascension now has a few requirements - you must complete your + objectives assigned to you prior to learning the final ritual, and all the final + rituals have been changed a bit! + - qol: 'Using the Heretic''s Mansus Grasp on surfaces (EX: Rust Grasp) now works + on right-click, instead of combat mode.' + - qol: Used heretic influences can now be removed with a Anomaly Neutralizers. - balance: Some heretic rituals are now limited in the amount they can make. You can only have up to 2 heretic blades crafted at once (3 if you are Path of Flesh). - balance: The Lord of the Night has been buffed to be a little scarier. Did you @@ -525,20 +734,7 @@ - refactor: Refactored and improved much of Heretic code. Improved the file structure dramatically. - admin: The heretic's traitor panel has been beefed up a bit. - 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. - - 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 - least it'll cause more visible complaints - - refactor: Timer subsystems can now recover from a deleted MC properly. - - bugfix: blast doors no longer give you a balloon alert about opening it first - when you crowbar them open while unpowered - - bugfix: Fixed active objectives spontaneously failing over time. - - rscadd: On IceBoxStation, the Transit Tube Room is no longer mislabelled as a - Storage Room. + OneAsianTortoise: - bugfix: fixes not being able to use tools on account registration device and it functioning without power - imageadd: gives account registration device a unique sprite instead of weapon @@ -549,12 +745,54 @@ of 0-4500 kPa. - bugfix: Hiding inside a container no longer allows you to bypass the tramstation perma gate. + RandomGamer123: + - spellcheck: Fixes minor spelling error in the guide for synthesising omega soap + bun235: + - bugfix: Fixes external airlocks on metastation atmospherics + carshalash: + - qol: Felinids love oranges as much as he loves them! + san7890: + - rscadd: On IceBoxStation, the Transit Tube Room is no longer mislabelled as a + Storage Room. - rscadd: Nanotrasen 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. I hope this helps you sleep better at night. - bugfix: Chameleon items now cover the correct slots of whatever they're mimicking + - bugfix: If you've been noticing some very-dark plating outside of Engineering, + it has now been fixed. + - rscadd: Engineering Unions are planning strikes after their break rooms have been + slashed in half by Nanotrasen on DeltaStation and KiloStation. +2022-02-12: + Bizzonium: + - refactor: make SSrunechat to be subsystem of SStimer + GoblinBackwards: + - bugfix: USB cables no longer allow you to bypass the gas pumps pressure limits + of 0-4500 kPa. + JohnFulpWillard: + - spellcheck: The introduction to the Brig's genpop system has been fixed of a few + spelling mistakes. + - bugfix: Role-restricted and species restricted items can be purchased again. + - bugfix: Species-restricted items no longer appear in surplus. + - bugfix: Chaplain Sparring sect's soulstone now has their intended unique name + and description. + - expansion: Honkbots now handcuff people, if you somehow manage to get caught by + one. + - bugfix: Honkbots now no longer spam you and break the game + - bugfix: Mime finger guns cannot be used while you have something in your hand. + Lyn505: + - bugfix: blast doors no longer give you a balloon alert about opening it first + when you crowbar them open while unpowered + Melbert: + - bugfix: Fixes uncommon runtimes that could occur when observers examine heirlooms + - qol: Bad Touch doesn't trigger if the person's dead + - bugfix: Fixes hauntium from runtiming a lot and not haunting people + Mothblocks: + - qol: Made the balloon alerts for rotating stuff more consistent and less intrusive. + RandomGamer123: + - bugfix: Dronespeak manuals now can actually only be used on silicons and drones. + Watermelon914: - admin: Added a lot more logging to admin circuits - admin: Admin circuits display names will now replace the entire name of the shell. - admin: Save Shell component will no longer load the variables that were saved @@ -728,6 +966,26 @@ - 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 of the caskets were kept. + - expansion: Adds a trigger version of the current variable setter circuit component. + - bugfix: Fixed active objectives spontaneously failing over time. + cacogen: + - balance: Omega soap now has 800 uses instead of 301 + - expansion: Gave all soaps custom grind results, mainly for consistency + ike709: + - bugfix: Chameleon items now cover the correct slots of whatever they're mimicking + - refactor: Timer subsystems can now recover from a deleted MC properly. + tastyfish: + - qol: Status displays now scroll text smoothly. +2022-02-13: + GoblinBackwards: + - bugfix: Decaying lockers from the locker staff no longer delete their contents + when vanishing. + Lyn505: + - spellcheck: Fixed missing capitalization in Zealot's blindfold description + Melbert: + - bugfix: Species without hearts can get Living Hearts now. + RandomGamer123: + - expansion: 'Kudzu now has a new mutation available: Cold-proofing' - balance: Kudzu now stops spreading if the tile it is on is under 100K without the cold-proofing mutation. - balance: Kudzu now has a severity system for mutations. Different mutations cost @@ -754,6 +1012,99 @@ unsuitable atmos damage anymore. - bugfix: Staff at Centcom are busy people! They are no longer allowed to go on valentines dates. + RaveRadbury: + - qol: Added a day to the start of the Valentine's event. + Watermelon914: + - admin: Adds a new UI for the proccall circuit component to help with handling. + Adds an 'resolve weakref' option to enable/disable automatically resolving weakrefs. + ma44: + - code_imp: Simple animals can be told (in code) to stop moving around more easily + - refactor: Simple animals can now be told to go to places more easily + necromanceranne: + - bugfix: Mice no longer create ants when they decompose. They still create moldy + dead mice. + - balance: Polar bear transformation converts health percentage over when you transform. +2022-02-14: + Fikou: + - bugfix: fixes modsuit charging + - bugfix: fixes using the modsuit sphere transformation in zero gravity + Melbert: + - refactor: Refactored slime link and mansus link to use a component to cut down + on hard-dels and code duplication. + PositiveEntropy, SmArtKar, axietheaxolotl: + - imageadd: Resprites Black Gloves and Jackboots! + bun235: + - bugfix: Fixes air mixer on delta station atmos + san7890: + - bugfix: Mappers have removed the soul of fully variable-edited APCs across any + map that still had them. + - bugfix: If you've been noticing some absurdly dark rocks on KiloStation, rest + assured that we've fixed them. +2022-02-15: + Aerden: + - rscadd: Added the ability to equip the backpack firefighter tanks with atmospheric + modsuits. + - rscadd: Added waterbackpackatmos to belt_mirror.dmi + MMMiracles: + - rscadd: Tramstation's medical wing has been revamped once again to maybe not be + as bad as before. + Melbert: + - expansion: RND labs now have RND consoles again. + RandomGamer123: + - bugfix: Kilostation toxins now has an ordnance monitoring computer + - qol: Gas canisters now display their maximum temperature on being examined! + SmoSmoSmoSmok: + - bugfix: Janitor cyborg's soap running out of uses will no longer glitch out + Watermelon914: + - admin: Urgent ahelps will now send more information to admins to assist with handling + your ahelp. + san7890: + - rscadd: Even though it wasn't much of a break room at all, Engineering unions + are even more angrier now that the name "break room" has been removed from Engineering + on Kilostation. +2022-02-16: + GoldenAlpharex: + - bugfix: Ghosts will now get back to bobbing up and down after they're done orbiting + something, as intended. + Mickyan: + - bugfix: Fixed blacklight and red lights being brighter than intended + Mothblocks: + - qol: Hovering over specific objects, over hovering with specific items, will now + tell you what they can do. For example, hovering a firelock with a crowbar will + tell you can both left-click to hold open, and right-click to keep open. The + preference for screentips has been changed from on/off to on/off/only with tips. + If you had your preference on off before, it has been changed to "only with + tips". That way, it's not as intrusive as when it's always on, but you can still + pick up information when it can actually be provided. Try to give it a shot, + and don't disable it right away. + carshalash: + - expansion: Gives food processor function to make spider eggs and carp meat non-toxic. +2022-02-17: + Amrabol: + - balance: Nanotrasen 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 + transforming it into module names:Fikou for almost entire code work, TGMC for + sound and Cursed Birb + Dr-Pope: + - spellcheck: Makes it so the loader modsuit says it is not airtight with examined. + JoshAdamPowell: + - bugfix: Staff at Centcom are busy people! They are no longer allowed to go on + valentines dates. + Melbert: + - admin: Force-completing heretic objectives in the traitor panel count for ascension, + if you wanna skip the queue. + Nari Harimoto: + - bugfix: icebox now has one, and only one, APC per area + Sheits: + - imageadd: resprites the mailman outfit + TemporalOroboros: + - bugfix: Gunpowder and teslium once again use their intended explosion scaling. + Which is to say "more" and "not". + san7890: + - bugfix: The Lizard's Gas will no longer start out with Active Turfs at the start + of a round. - rscadd: Across all of Nanotrasen'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! @@ -794,11 +1145,68 @@ - bugfix: Fixes an issue with the Ian respawning side of the "Ian Adventure" station trait. - soundadd: Brimdemons have a different laser firing sound. + - 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 + of the caskets were kept. + unit0016: + - imageadd: RCDs' Radial Menu new uses the updated Chairs, ID Cards, Stools, and + Walls. 2562. +2022-02-18: + Melbert: + - refactor: The Anomaly Neutralizer uses the effect remover component now + Wallem: + - imageadd: Departmental protolathes/techfabs have colored stripes to tell the departments + apart. + jlsnow301: + - bugfix: 'TGUI static data loading screens no longer resize the window temporarily. + Note: If you are using a UI that gets a lot of these, please make an issue report.' + san7890: + - imageadd: Cytology Lab and two different variations of the Central Hall have had + their sprites corrected into splendidly new ones. +2022-02-19: + ArcaneDefence: + - qol: Kinetic crushers now fire their projectile with the right mouse button, allowing + you to fire at targets that are adjacent to you without moving your mouse away + from your target. + ArcaneMusic: + - soundadd: Brimdemons have a different laser firing sound. + Ghommie: + - bugfix: Fixes an issue with the Ian respawning side of the "Ian Adventure" station + trait. + JohnFulpWillard: + - bugfix: Icebox's medical surgery area is now locked behind Surgery access rather + than Medical. + LemonInTheDark: + - qol: The sprays that come off extinguishers will no longer stick around after + they've hit the ground, and they'll also fade out before disappearing + MMMiracles: + - bugfix: Adjusts the posters in Metastation's Atmospherics to not block an APC + - bugfix: Adjusts a poster in Kilostation's library to not block the above bar APC. + Maurukas: + - rscadd: Kilostation medbay has been issued a medical modular suit + MrMelbert: + - qol: Many botany items now have contextual screentips. + SmoSmoSmoSmok: + - bugfix: Clown cyborg soaps will no longer bug out after running out of uses + Timberpoes: - admin: SDQL2 commands that attempted to _new some very simple datums will no longer runtime. Wallem: - bugfix: Fixes sign language users not being able to sign in space. Fixes the visual indicator when attempting to sign while cuffed. + jlsnow301: + - bugfix: Following numerous reports, CentCom has downloaded more RAM into the Orion + Trail arcade machines, thus drastically reducing the occurrence of loading screens. + san7890: + - 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. + The cameras should work a bit better now, and the excess lights were removed. + You probably won't notice the latter, though. + - bugfix: Snow will now behave properly inside ruins on IceBox Station. + - bugfix: On KiloStation, Atmospherics no longer owns a weird sliver of the Incinerator + room. It didn't make sense, but now it is fixed. tastyfish: - rscadd: Newscasters, request consoles, and status displays now have a backlight on their displays and emit a soft glow. @@ -823,6 +1231,25 @@ prompt sound SkyratBot: - bugfix: arm implants breaking the drop key + thestubborn: + - balance: Gave the Saints Suit cold protection. + timothymtorres: + - qol: Replace regular card deck on wizard ship with wizoff and tarot card decks. + - bugfix: Fix cigarettes icon to update properly when extinguished. +2022-02-20: + JohnFulpWillard: + - balance: Paramedics no longer have access to Auxiliary base, the Supermatter engine + room (including insuls), the Cargo shuttle, and EVA. Use a Medical MODsuit instead, + you lazy bum! + - balance: Paramedics now have access to Mining bay. + Mickyan: + - expansion: Added some outfits based on moth culture, available at the clothesmate + - expansion: Added a new construction based bundle for the curator, themed after + moth fleet engineers + Ryll/Shaps: + - admin: asay pings now have their own unique sound instead of sharing the vote + prompt sound + Timberpoes: - balance: The CRAB-17/Nanotrasen 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 @@ -943,6 +1370,80 @@ Melbert: - bugfix: Eldritch Amulet no longer gives thermal vision when it shouldn't SkyratBot: + Watermelon914: + - bugfix: Fixed progression traitor uplinks suddenly changing owners when implanted + with an uplink implant. + san7890: + - rscadd: On MetaStation, DeltaStation, and TramStation, the area colloquially known + as the "Science Lobby" now has a proper definition and it's own APC to boot. + Please enjoy. + - rscadd: MetaStation and Deltastation now have their Medbay Lobbies officially + defined. + - bugfix: On DeltaStation, the Auxiliary Base Construction room no longer possesses + a bit of space. + - bugfix: As far as the Secure Tech Storage on IceBoxStation, Nanotrasen has finally + realized that they should stop installing lights and cameras on their windows. + tastyfish: + - bugfix: Windoor blocking ORM on Delta Station now has correct access. + - rscadd: Made air alarm and keycard authenticator emissive. + - imageadd: Updated air alarm and keycard authenticator sprites to work with being + emissive. + zxaber: + - balance: Malf AIs can detonate their borgs at the robotics console once again. +2022-02-21: + Fikou: + - balance: every modsuit theme can hold more stuff in suit storage + - bugfix: arm implants breaking the drop key + - bugfix: fixes smooth movement breaking sometimes + Melbert: + - bugfix: Fixes heretic target assignment. They should actually be getting Heads + of Staff and such as intended as sacrifice targets. + - bugfix: Void's ritual of knowledge is void path correctly + Toastgoats: + - imageadd: New space dragon sprite! +2022-02-22: + PositiveEntropy, Naevii: + - imageadd: Resprites the Head of Security Greatcoat! + - imageadd: Resprites the object icon of the Head of Security Trenchcoat + Thunder12345: + - imageadd: Power cells and the cell charger have been resprited, the charger will + now look correct with a much wider variety of non-standard power cells + - rscdel: Removed the uncraftable 15k charge high-capacity power cell+, all instances + have been replaced with the regular 10k charge high-capacity cell + - bugfix: Erroneous power cell charge indicators have been removed from many non-standard + types of power cells + - bugfix: All varieties of marauder mech including the nuke ops mauler come with + a bluespace power cell, consistent with other nuke op mechs + - bugfix: Power cell charge indicators will now update while in a cell charger + - bugfix: Potato and other crop batteries will not have their wires disappear when + on cell chargers + san7890: + - bugfix: On IceBoxStation, the courtroom no longer owns a bit of the hall. +2022-02-23: + ArcaneDefence: + - bugfix: An odysseus' sleeper will now realize when a previously contained patient + has left the sleeper through unconventional means. + GoblinBackwards: + - bugfix: Holy water's cult deconvertion timer now resets when transferred to a + new mob + - bugfix: Fixes beam rifle not causing an explosion on impact mode. + - bugfix: Fixes radio gloves being uncraftable + GoldenAlpharex: + - bugfix: Ghosts are 100% less afraid of bobbing up and down, and will no longer + keep their orbit when they shouldn't be keeping it. + Greniza: + - code_imp: adds p_theirs() proc + JohnFulpWillard: + - bugfix: 'Non-dense mobs will no longer knock monkeys over (Ex: Revenants, Bots, + Lizards, Alien larvas).' + Melbert: + - bugfix: Eldritch Amulet no longer gives thermal vision when it shouldn't + - admin: Fixes some heretic logs. Final knowledge uplink log should be clearer, + and ghoul admin message no longer has a typo. + SmoSmoSmoSmok: + - bugfix: Players are no longer able to create walls using sheets that arent linked + to a material + TiviPlus: - bugfix: Fixed gygax smash not logging the driver - bugfix: Fixed mechs being punched using power but punching as a mech not using power @@ -966,6 +1467,7 @@ expanded from off-station blobs - bugfix: Fixes issue with cores and nodes having their color applied twice - rscadd: Ratfish can now be found in moisture traps. + - code_imp: reshuffled some mech bay code please report issues on the github - bugfix: fixed distortion effects cutting each other Wallem: - rscadd: Some prisoners have been complaining about the cold weather in the permabrig, @@ -1058,6 +1560,40 @@ cutouts you might find lying around, these ones EXTRA "RR-REAL HELP M-". Whatever that means. 2022-02-27: + cacogen: + - qol: RPED now swaps in cell with greatest charge (of highest tier) first + - balance: Blobs can destroy mineral turfs like they can walls + - qol: Adds balloon alerts for blob overmind + - qol: Adds contextual screen tips for blob overmind + - qol: Off-station blobs are lighter than regular blobs + - bugfix: Fixes bug where on-station blobs were not counted towards victory when + expanded from off-station blobs + - bugfix: Fixes issue with cores and nodes having their color applied twice + jlsnow301: + - bugfix: Fixes a blue screen in the Pandemic from loading multiple viruses. + san7890: + - balance: On IceBoxStation, Nanotrasen has finally stopped clearing out excessively + large swatches of land for the gulagged prisoners in order to help them work + for their points. + tralezab: + - rscadd: Ratfish can now be found in moisture traps. +2022-02-24: + ErdinyoBarboza: + - 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 the IceBoxStation Service Hall Exit into a properly cycled airlock + system. + - qol: Icebox Locker Room now has real personal lockers once more. + - qol: Icebox Service Exit is not properly mapped with external airlocks and cycled + doors. + san7890: + - rscadd: Nanotrasen 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. + tralezab: + - bugfix: Ratfish can now properly show up in moisture traps + - code_imp: Moisture traps are coded a little better now + - spellcheck: fixed some wording in the moisture trap bite feedback +2022-02-25: ATHATH: - bugfix: Buckling yourself to and then unbuckling yourself from a stasis bed will no longer permanently halt the effects of any gravitum in your system. @@ -1093,6 +1629,73 @@ - bugfix: Examining cells won't say they have 0% charge when the overlay indicates they don't - code_imp: Fixes some code style issues for more free GBP + Christmas5: + - bugfix: Added the missing variable "plane" to floor lights. + JohnFulpWillard: + - spellcheck: Removed wrong text in esniffers saying ghosts using them sends the + signaller inside of it's, frequency. + - bugfix: Building walls with snow now take time to do, like every other type. + Melbert: + - expansion: Russian Fugitive Hunters are now stronker. Their ship has been remade, + they have a little bit more ammo and equipment, and most importantly they now + have a pet bear. + Mothblocks: + - balance: Thieves can no longer scale, and can only run once. + - balance: Increased the number of thieves by 2. + OneAsianTortoise: + - bugfix: fixes Metastation hydroponics shutter access + Pickle-Coding: + - bugfix: Frostoil reagent will no longer achieve negative temperature when exposed + to air. Changes behaviour to make air converge to 2.7 kelvin instead. + Putnam3145: + - qol: '"Scrubbing" and "siphoning" are now consistently used' + Sealed101: + - bugfix: disktoaster storages now have their proper lights. all hail the toaster + rellyreri: + - spellcheck: Claustrophobics will now breathe instead of breath. + sergeirocks100: + - bugfix: Adjusted cargo tech jumpsuits and jumpskirts now show your arms from all + angles, and the adjusted cargo jumpsuit now uses the normal jumpsuit legs instead + of the digitigrade ones. + timothymtorres: + - qol: Chem dispensers have been changed to eject beakers using RMB instead of AltClick. + - qol: Hydroponics trays have been changed to empty reagents using RMB instead of + AltClick. + - code_imp: Any object that inherits the simple_rotation component will always use + AltClick. +2022-02-26: + BallastMonster: + - spellcheck: fixes false info with vampires becoming bats + Capsandi: + - bugfix: Took out an extra apc in deltastation transfer center which screwed with + the power + Cheshify: + - bugfix: Monkeys can no longer bite people to give them heart attacks + Iamgoofball: + - code_imp: Fixes some code style issues for more free GBP + - code_imp: Implements some missing SDQL 2 wrappers. + JohnFulpWillard: + - bugfix: AI's "O" sound on vox now sounds like an O instead of an I. + KubeRoot: + - qol: 'Chat tab filter behavior has been tweaked: System messages will now be enabled + in custom tabs and any new message types will be enabled by default. NOTE: This + will mess up your custom chat tab filters after the first time you join. You + will need to disable any message types that were automatically enabled with + this change.' + Melbert: + - expansion: Raw Prophets now have a funny little attack animation. + - balance: Raw Prophets have been adjusted slightly. They now have more max health, + a slightly lower sight range (but the ability to toggle it on or off), drop + all their component parts on death, and do more damage for every consecutive + attack on a target they do. + - bugfix: Fixes a few potential issues with heretic rituals. + - code_imp: Adds proper stack support to heretic rituals. Also allows for more specific + "ritual failure" feedback. + RandomGamer123: + - bugfix: Bicycles can now be repaired with a welder and have actually sensible + max_integrity and integrity_failure values. + Ryll/Shaps: + - bugfix: Projectiles now respect armor again Wallem & Imaginos: - balance: Splits biobags into virology & science bags. Virology bags can't hold slime cores or cytology equipment, and science bags can't hold medipens & bloodbags. @@ -1102,3 +1705,87 @@ tastyfish: - bugfix: Opening an air alarm panel now renders the overlays correctly. - rscadd: Most status displays now have USB support for circuits. + cacogen: + - bugfix: Examining cells won't say they have 0% charge when the overlay indicates + they don't + dragomagol: + - qol: pointing is now logged + - qol: bodythrow impacts are now logged + - qol: individual logs now display in order, even when the server date rolls over! + jlsnow301: + - spellcheck: Space dragons are now "it" instead of "he". + san7890: + - rscadd: On Tramstation, Nanotrasen installed new APCs on the lower aspects of + the Science Division. + tastyfish: + - bugfix: Opening an air alarm panel now renders the overlays correctly. + - rscadd: Most status displays now have USB support for circuits. + unit0016: + - imageadd: HONK Co. Pranks have released a new set of stencils for any cardboard + cutouts you might find lying around, these ones EXTRA "RR-REAL HELP M-". Whatever + that means. +2022-02-27: + Axietheaxolotl, PositiveEntropy: + - expansion: Adds a beret for the Chief Medical Officer! + - imageadd: Nanotrasen 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! + ErdinyoBarboza: + - bugfix: Fixes DeltaStation Service area AI pathfinding. Bots will no longer get + stuck on the railings. + Melbert: + - bugfix: Fixes summon magic and summon guns + - refactor: Refactored wizard rituals (events/ghosts/guns/magic/madness) to reduce + code copy+paste. + dragomagol: + - bugfix: Security can now once again lock down the brig front desk on Icebox + jlsnow301: + - bugfix: The pAI candidate menu now properly switches between IC and OOC comments. + san7890: + - bugfix: In MetaStation Atmospherics, the floor light is no longer installed right + on top of a canister. + - rscadd: Nanotrasen'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? + - bugfix: If you've ever walked through the maintenance tunnels near DeltaStation's + Atmospherics and spotted a very dark lattice, it has been fixed. + - spellcheck: Nanotrasen 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: On TramStation, the Ordnance Burning Room (for your Tritium) no longer + owns that bit of space where noxious gases are meant to vent out into. + unit0016: + - bugfix: The AI no longer can start a full OSI investigation when the tips of your + combat boots hit Kilostation, thanks to the fact the firedoors that formerly + automatically triggered the fire alarm whenever you use the external airlocks + are gone. +2022-02-28: + Cheshify: + - bugfix: You no longer need an entire wheel of cheese to make Moth Foods + LemonInTheDark: + - admin: Since _pick doesn't accept lists, I've added _pick_list for you to use + in sdql. Please table everyone on the station kthnx + Melbert: + - code_imp: Made some species datums follow style guidelines slightly better (lists, + indentation, spacing, etc). + - refactor: Refactored how species pages are generated in the preferences menu. + Species themselves are untouched completely. Some species pages have been filled + our more (or less) as a result. + - bugfix: Monkeys how have a preference menu entry, as god intended. + Pickle-Coding: + - bugfix: Prevents exploit allowing you to monitor Centcom and CTF frequencies. + Ryll/Shaps: + - admin: You can now create links to a datum's VV window in asay by posting the + datum's memory reference. The reference is now printed in the VV menu right + below the fancytype, for copying purposes.. + - admin: Tagged datums will now show their tag index in VV + Sylphet: + - rscadd: adds helianthus cocktail + ViktorKoL: + - bugfix: the description of traitor under antagonist preferences is now up to date + with their progressive nature + cakexensen: + - bugfix: Poly's death streak resets upon surviving diff --git a/html/changelogs/archive/2022-03.yml b/html/changelogs/archive/2022-03.yml index d82dfa220e333..e9ee9eca77886 100644 --- a/html/changelogs/archive/2022-03.yml +++ b/html/changelogs/archive/2022-03.yml @@ -1,516 +1,333 @@ 2022-03-01: - Axietheaxolotl, PositiveEntropy: - - imageadd: Nanotrasen 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! - ErdinyoBarboza: - - bugfix: Fixes DeltaStation Service area AI pathfinding. Bots will no longer get - stuck on the railings. - Gandalf2k15: - - rscadd: Different objects now have different bullet impact sounds. - Melbert: - - balance: Raw Prophets have been adjusted slightly. They now have more max health, - a slightly lower sight range (but the ability to toggle it on or off), drop - all their component parts on death, and do more damage for every consecutive - attack on a target they do. - Ryll/Shaps: - - admin: You can now create links to a datum's VV window in asay by posting the - datum's memory reference. The reference is now printed in the VV menu right - below the fancytype, for copying purposes.. - - admin: Tagged datums will now show their tag index in VV - - bugfix: Projectiles now respect armor again - SkyratBot: - - spellcheck: fixes false info with vampires becoming bats - - bugfix: If you've ever walked through the maintenance tunnels near DeltaStation's - Atmospherics and spotted a very dark lattice, it has been fixed. + Axietheaxolotl, TetraZeta, PositiveEntropy, FuryMcFlurry: + - imageadd: The detective outfits, the blueshift uniform and the constable outfits + have been redone! + - rscdel: Removes the pantyhose from the HoS Parade Skirt + Ebin-Halcyon: + - imageadd: New fireaxe inhand, worn, and in cabinet sprites. + Fikou: + - bugfix: fixes thieves not being able to complete the guns objective + Kubisopplay: + - expansion: Adds malfunction module that lets you impersonate anyone + Mothblocks: - admin: Going stealth mode now drops your orbiters and blocks you from being orbited. + OneAsianTortoise: - bugfix: fixes accounting's alert being cut in half - - bugfix: the description of traitor under antagonist preferences is now up to date - with their progressive nature - - admin: Since _pick doesn't accept lists, I've added _pick_list for you to use - in sdql. Please table everyone on the station kthnx - - bugfix: fixed vv checking if the client is a turf, and instead checked the thing - that might be a turf, properly updating the vv window - - bugfix: On TramStation, the Ordnance Burning Room (for your Tritium) no longer - owns that bit of space where noxious gases are meant to vent out into. - - bugfix: Poly's death streak resets upon surviving - - bugfix: fixes thieves not being able to complete the guns objective - - bugfix: You no longer need an entire wheel of cheese to make Moth Foods - - bugfix: In MetaStation Atmospherics, the floor light is no longer installed right - on top of a canister. - - rscadd: adds helianthus cocktail - - bugfix: Security can now once again lock down the brig front desk on Icebox - - bugfix: The AI no longer can start a full OSI investigation when the tips of your - combat boots hit Kilostation, thanks to the fact the firedoors that formerly - automatically triggered the fire alarm whenever you use the external airlocks - are gone. -2022-03-02: - SkyratBot: + TiviPlus: - refactor: redid some savanna-ivanov mech code please report any new issues on the github + adamsong: + - bugfix: fixed vv checking if the client is a turf, and instead checked the thing + that might be a turf, properly updating the vv window + carshalash: + - expansion: Introduces new non-alcoholic beverages to be made at the bar! + - imageadd: Sprites for these new beverages! Not just coloured glass + san7890: - rscadd: On Meta, Delta, and Tram Stations, expect to see the word "Funeral" dance across your eyes a few times as you enter the chapel. - rscadd: On IceBoxStation, the Chapel has undergone some new area definitions, and the wiring for the power to these areas have changed a bit from what you were accustomed to previously. - - bugfix: Fixed being able to push "off" something you're moving towards, allowing - for infinite movement in one direction in space, at your walk speed + tralezab: - bugfix: Fixes a weird bug with spellbooks that may have been locking some spell options when you did some specific actions - - imageadd: New fireaxe inhand, worn, and in cabinet sprites. - - bugfix: lobstrosities charge now - tf-4: - - tweak: '"Nanotrasen Representative" has been renamed to "Nanotrasen Consultant".' -2022-03-03: - OrionTheFox: - - bugfix: Nanotrasen 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, - 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 - part of the Fox ears, to be easier to work with color-wise. - SkyratBot: - - code_imp: Fixes a minor code styling issue with atmos. - - refactor: Converts airlock controllers (ie incinerator access consoles) to use - TGUI. - - spellcheck: Fixes a spelling mistake in thief lore blurbs. - - bugfix: Prevents exploit allowing you to monitor Centcom and CTF frequencies. - - bugfix: Various cooking recipes that simply said they required 'food' now properly - use plain bread slices. - - bugfix: Fully eating a can of pine nuts no longer creates an error sprite. - - balance: 'Hand mining weak turfs (i.e. snow) is now affected by mining level (so - legendary would take 7.5 seconds instead of 15) qol: Multiple people can now - attempt to manually mine the same mineral turf qol: If you fail to manually - mine a turf you can try again immediately instead of having to wait for the - cooldown to end' - - bugfix: You can no longer mine a snow turf by hand if you're already doing it - - code_imp: Uses variables and time defines for mining speeds instead of deciseconds - and magic numbers +2022-03-02: + Fikou: + - qol: modsuit radial icons highlight on extended pieces - bugfix: modsuit clamp can carry wrapped crates - bugfix: modsuit activation is no longer affected by do after slowdowns - - imageadd: Congratulations, you now have a new Area Turf Sprite for Engineering's - Technical Storage. - - code_imp: minor change to TGUI button content to use flexboxes. This caused a - bug in the past, report if you notice anything weird. - - imageadd: Power cells and the cell charger have been resprited, the charger will - now look correct with a much wider variety of non-standard power cells - - rscdel: Removed the uncraftable 15k charge high-capacity power cell+, all instances - have been replaced with the regular 10k charge high-capacity cell - - bugfix: Erroneous power cell charge indicators have been removed from many non-standard - types of power cells - - bugfix: All varieties of marauder mech including the nuke ops mauler come with - a bluespace power cell, consistent with other nuke op mechs - - bugfix: Power cell charge indicators will now update while in a cell charger - - bugfix: Potato and other crop batteries will not have their wires disappear when - on cell chargers + - bugfix: lobstrosities charge now + GoblinBackwards: - bugfix: Robotic basic and simple mobs are now damaged by EMPs. + JohnFulpWillard: - bugfix: Instant recall spell no longer recalls anchored objects, such as microwaves, if the marked item is placed inside of one. - - bugfix: you can knock monkeys over by crossing them again. + LemonInTheDark: + - qol: Pushing off something in space will no longer cause it to be delayed for + half a second before drifting properly. Should look nicer now + - bugfix: Fixed being able to push "off" something you're moving towards, allowing + for infinite movement in one direction in space, at your walk speed + Maurukas: + - bugfix: Kilostation will now generate a normal number of space ruin z-levels + - bugfix: Kilostation will now have the correct linkage between its space z-levels + - you can now easily go space exploring again. + - bugfix: Removed duplicate APC from Kilostation security office. + Nari Harimoto: + - imageadd: New thruster sprites to allow for in-wall designs + - bugfix: removed cycle helpers from 2 random tram maint airlocks that arent meant + to cycle (solo airlocks) and a duplicated APC in tram maint + - expansion: the tram now has new walls! they are structures that function like + walls so as to be built on the tram, create and deconstruct via the new tram + girder (screwdriver on the girder to deconstruct, there is no displaced version + ie wrench) + Twaticus, PositiveEntropy, Axietheaxolotl: + - imageadd: Resprites the Warden's Jackets and Jumpsuit, the HoS Jumpsuit, the Formal + Jackets, the Bulletproof and Regular Security Helmets and the Security Jumpsuit! + - expansion: adds a red warden hat to match with the warden's red uniform! + - rscdel: Removes unused helmet camera sprites. Wallem: + - bugfix: We gave the wisdom cow its tongue back. We're sorry. + - qol: Adds a minimum threshold to ingested ant screaming. + - qol: Ants are no longer lavaproof. - balance: Adds a minimum threshold to ant piles biting through shoes. - balance: Giant ants are now peaceful hostile mobs. This means they will attack anything that does not have the "neutral" factiontype. To compensate, the price to make one has been raised. - imageadd: It appears the invasive "space ant" has gotten into our formerly secret uranium reserves and as such have mutated slightly, gaining a slight bioluminescence. + cacogen: + - balance: Hand mining weak turfs (i.e. snow) is now affected by mining level (so + legendary would take 7.5 seconds instead of 15) + - qol: Multiple people can now attempt to manually mine the same mineral turf + - qol: If you fail to manually mine a turf you can try again immediately instead + of having to wait for the cooldown to end + - bugfix: You can no longer mine a snow turf by hand if you're already doing it + - code_imp: Uses variables and time defines for mining speeds instead of deciseconds + and magic numbers +2022-03-03: + ArcaneDefence: + - bugfix: Various cooking recipes that simply said they required 'food' now properly + use plain bread slices. + - bugfix: Fully eating a can of pine nuts no longer creates an error sprite. + Iamgoofball: + - code_imp: Fixes a minor code styling issue with atmos. + Maurukas: + - bugfix: Genturf error and roundstart active turf fixed on Icebox + RandomGamer123: + - refactor: Converts airlock controllers (ie incinerator access consoles) to use + TGUI. + SuperNovaa41: + - refactor: Dehardcoded SSmapping ruin types. + TemporalOroboros: + - qol: The deadchat controllable component is no longer automute bait. + san7890: + - rscadd: There are now some lattices under some pipes in KiloStation Atmospherics. + If you want to see history unravel in front of your eyes, it's south to the + "Atmospherics Pump Room" under the orange Atmos-to-SM pipeline, right above + the SM cooling loops. How nice. + - bugfix: Deltastation's Abandoned Gambling Den no longer owns a bit of space. + vincentiusvin: + - code_imp: minor change to TGUI button content to use flexboxes. This caused a + bug in the past, report if you notice anything weird. +2022-03-04: + JohnFulpWillard: + - bugfix: you can knock monkeys over by crossing them again. + SuperNovaa41: + - spellcheck: Fixes a spelling mistake in thief lore blurbs. + - code_imp: Defined turf environment types. + TemporalOroboros: + - bugfix: Copying reagents will now also copy the temperature of those reagents. + - code_imp: A single letter variable has been expanded. + TheBonded: + - expansion: podpeople from replica pods now have water blood by default, and inherit + their blood chemical from the most abundant chemical trait in their seeds if + applicable. + axietheaxolotl, Imaginos16: + - imageadd: New sprites for the CMO's turtleneck/skirtleneck, paramedic jumpsuit/jumpskirt, + virologist jumpsuit/jumpskirt, and chemist jumpsuit/jumpskirt + san7890: + - imageadd: Congratulations, you now have a new Area Turf Sprite for Engineering's + Technical Storage. + - bugfix: Mappers now no longer have to stare a green square and extrapolate the + position of an air alarm based on that. tastyfish: - bugfix: Papers and photos pinned to airlocks now actually animate. + vincentiusvin: + - rscadd: Ordnance have been updated to enable the publication of papers + - rscadd: Several new explosive and gas synthesis experiments have been added to + ordnance + - rscadd: Anomaly compressor has been TGUIzed and now supports simulating the reaction + of the gases inside the ttv. + - rscadd: New tank compressor machine for toxins. You can overpressurize tanks with + exotic gases and complete experiments. + - balance: Several techweb nodes are locked and require toxin experiments to complete. + - balance: Toxins can purchase boosts for various techweb nodes. + - balance: You no longer need to anchor doppler arrays for it to work. + - qol: Doppler array and implosion compressor now supports deconstruction, implosion + compressor construction added. + - qol: Doppler now emits a red light to denote it's direction and it being on. Doppler + not malf. + - 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) 2022-03-05: - Ebin-Halcyon: - - 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 - Base roles can now get vape pens! - Jolly-66: - - bugfix: Multiple Active Turfs from our maps have been removed. + Fikou: + - admin: player playtime is now sorted and links player panel + GoblinBackwards: + - bugfix: Fixes bug where batons without cells could turn on after being EMPd + JohnFulpWillard: + - qol: Cayenne can now use the nuke with their head or something. + - bugfix: Sentient elites falling in chasms will no longer spam chests. Melbert: + - qol: Heretic rituals overhauled slightly. You now pick from a list of all your + rituals when invoking a rune to select what ritual you want to do. - bugfix: Minor fixes for the Heretic's Living Heart ritual. Cybernetic organs are now properly detected. - bugfix: Similarly, you cannot feed the mawed crucible cybernetic organs. - Merek2: - - rscadd: Added old Firefighter to Atmospherics Technician, Fixed Barber, new off-duty - title. + Mothblocks: + - balance: Lowered thieves cost from 6 to 4. + - balance: Disabled midround thieves. PositiveEntropy: - imageadd: Nanotrasen has now officially updated all generic jumpsuits and the prisoner one, marking the third rendition of jumpsuit styles being added into station! - Reco201: - - bugfix: Cargo Zoombas can now wear hats correctly. fix:Cargo Zoomba lights while - moving north no longer leave the body. - SkyratBot: + Thunder12345: - bugfix: The clown dagger null rod is visible again - - admin: player playtime is now sorted and links player panel - - bugfix: Sentient elites falling in chasms will no longer spam chests. - - balance: Lowered thieves cost from 6 to 4. - - balance: Disabled midround thieves. - - spellcheck: Doorjacks now use singular/plural for charges left correctly. - Wallem: - - bugfix: We gave the wisdom cow its tongue back. We're sorry. Zonespace27: - - refactor: Refactored dildoes. - - balance: CFA Wildcat crate now costs 3000 instead of 11000 - - bugfix: Modular Laptop loadout item will now spawn again - - rscadd: Added Temperature gunkit to the goodies tab in cargo for 560 credits. - - bugfix: The shibari uniform no longer has suit sensors + - spellcheck: Doorjacks now use singular/plural for charges left correctly. + axietheaxolotl: + - imageadd: new front and backfacing jackboot sprites ma44: - refactor: Basic AI movement has been refactored to clean it up a bit - nikothedude: - - bugfix: fixed ashie bronze boots - softcerv: - - bugfix: the hyposray injection now counts as an injection. + san7890: + - balance: IceBoxStation's Labor Camp now has some electrified windows to help deter + potential jailbreakers. tastyfish: + - qol: The solar array areas are now lit by the sun. + - qol: Solar assemblies now have different sprites for solar panel vs tracker. - imageadd: Solar panels and trackers have new sprites and a 2.5D effect. 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 - legs! - Gandalf2k15: - - rscadd: Welding now displays a spark effect. GoldenAlpharex: - code_imp: Added a few more options for woman clothing auto-cropping, hopefully to help making certain outfits look less scuffed. - imageadd: Fixed the side views of the suits for woman, that previously looked -very- scuffed, as a proof of concept for the new female auto-cropping masks. - Melbert: - - bugfix: Fixes summon magic and summon guns - - refactor: Refactored wizard rituals (events/ghosts/guns/magic/madness) to reduce - code copy+paste. - RatFromTheJungle: - - balance: Lowers block chance of double energy sword to 45, from 75. - SkyratBot: - - imageadd: new front and backfacing jackboot sprites - - bugfix: Fixes bug where batons without cells could turn on after being EMPd - - bugfix: Building walls with snow now take time to do, like every other type. - - code_imp: Defined turf environment types. - - imageadd: Sprites for these new beverages! Not just coloured glass - - spellcheck: Removed wrong text in esniffers saying ghosts using them sends the - signaller inside of it's, frequency. - Zonespace27: - - rscadd: Added MCR and Wildcat goody packs to cargo along with their associated - ammo. - - spellcheck: Corrects a plural to a singular in the WT-550 Single-Pack + Mothblocks: + - bugfix: Fixed vaccines not being able to be moved through chem buffers. + - bugfix: Fixed Roy Rogers and Sodium Thiopental not applying their effects. + - balance: Fake beer has been renamed from "Beer" to "Beer...?" + Oricana-16: + - rscadd: Added a usb port to fire alarms axietheaxolotl: + - expansion: Brand-new Lesbian and Intersex pins! - imageadd: New sprites for Lesbian and Intersex pins, and also re-does the already existing pins. - axietheaxolotl, Imaginos16: - - imageadd: New sprites for the CMO's turtleneck/skirtleneck, paramedic jumpsuit/jumpskirt, - virologist jumpsuit/jumpskirt, and chemist jumpsuit/jumpskirt -2022-03-07: - Axietheaxolotl, TetraZeta, PositiveEntropy, FuryMcFlurry: - - imageadd: The detective outfits, the blueshift uniform and the constable outfits - have been redone! - - rscdel: Removes the pantyhose from the HoS Parade Skirt - Melbert: - - bugfix: Heretic Smugglers (latejoin heretics) actually spawn influences - SkyratBot: + cacogen: - bugfix: Windoors created by the RCD are correctly named - bugfix: Windoors created by the RCD work properly with require one access - - bugfix: 'Windoors with unrestricted directional access open properly when operated - from the same tile qol: Windoors have unrestricted directional access overlays - like airlocks now' + - bugfix: Windoors with unrestricted directional access open properly when operated + from the same tile + - qol: Windoors have unrestricted directional access overlays like airlocks now + san7890: + - bugfix: The darkenening and lack-of-gravity on some lattices near the Space Hut + on DeltaStation have been resolved. +2022-03-07: + Ghommie: + - bugfix: Fixed the inputs for the linear and exponential sustain settings of the + song editor (instruments UI). + JohnFulpWillard: + - qol: Discoordinated tool user trauma now gives a status effect to let you know + you have it. + - bugfix: Slappers and circlehands don't fit in storage bags anymore. + LemonInTheDark: - bugfix: Fit viewport will properly well, fit your viewport now. Broke when we removed the status bar. It'll also attempt to autofit if you change your pixel scaling. Godspeed - - bugfix: Copying reagents will now also copy the temperature of those reagents. - - code_imp: A single letter variable has been expanded. - - balance: The Science Hub app can now be downloaded and launched by science employees. - - bugfix: Fixed vaccines not being able to be moved through chem buffers. - - bugfix: Fixed Roy Rogers and Sodium Thiopental not applying their effects. - - balance: Fake beer has been renamed from "Beer" to "Beer...?" + MMMiracles: + - expansion: The tramstation dorms area has been completely revamped to more freely + flow and encourage interactions between the library and chapel. + - bugfix: The chapel now has a mass driver for proper burial disposal. + - bugfix: The overhang in the dorm area no longer shows the walls below on the edges. + Melbert: + - bugfix: Heretic Smugglers (latejoin heretics) actually spawn influences + OneAsianTortoise: + - bugfix: fixes Icebox and Meta's medbay door controls button not working + Pepsilawn: - spellcheck: you will no longer be asked to be wearing Wheelys when trying to activate ski shoes and rollerskates + Pickle-Coding: + - balance: It's harder to make large pipenets release radiation. + Thunder12345: + - imageadd: The poll button in the lobby has been changed to better represent its + functionality. + Zonespace27: - bugfix: Blowguns no longer have a trigger guard - - rscadd: Added a usb port to fire alarms + cacogen: + - qol: Can use BSRPED to add components to machine frames at a distance + san7890: + - bugfix: You probably didn't notice, but the Bar's Atrium on IceBoxStation has + been depowered (due to lack of an APC) for the last few weeks now. After a strong + reprimand to its Engineering staff, Nanotrasen will now ensure APCs are installed + in that area. - imageadd: On the mapping-end, the engraved cult floors will no longer show up as base plating, but instead what they actually look like in game. - - imageadd: The poll button in the lobby has been changed to better represent its - functionality. - - bugfix: Fixed the inputs for the linear and exponential sustain settings of the - song editor (instruments UI). - - bugfix: Slappers and circlehands don't fit in storage bags anymore. - - bugfix: Mappers now no longer have to stare a green square and extrapolate the - position of an air alarm based on that. - Twaticus, PositiveEntropy, Axietheaxolotl: - - imageadd: 'Resprites the Warden''s Jackets and Jumpsuit, the HoS Jumpsuit, the - Formal Jackets, the Bulletproof and Regular Security Helmets and the Security - Jumpsuit! expansion: adds a red warden hat to match with the warden''s red uniform!' - - rscdel: Removes unused helmet camera sprites. + zxaber: + - balance: The Science Hub app can now be downloaded and launched by science employees. 2022-03-08: - Ebin-Halcyon: - - bugfix: NT consultant clothing shows up for Teshari now - SkyratBot: + Aerden: + - expansion: Volume pumps and meters are now compatible with circuits. - bugfix: Fix the gas pump's icon not updating when turned on/off with circuits. + GoblinBackwards: - bugfix: Alt-clicking plumbing IV drips now rotates them like other plumbing components. - rscdel: Alt-clicking IV drips no longer sets the transfer rate to max. + LemonInTheDark: - bugfix: Fixed bot trails and launchpad targeting being invisible. Made bot trails look a bit nicer. - bugfix: Bots will no longer attempt to infinitely move into railings - - rscadd: Ordnance have been updated to enable the publication of papers - - rscadd: Several new explosive and gas synthesis experiments have been added to - ordnance - - rscadd: Anomaly compressor has been TGUIzed and now supports simulating the reaction - of the gases inside the ttv. - - rscadd: New tank compressor machine for toxins. You can overpressurize tanks with - exotic gases and complete experiments. - - balance: Several techweb nodes are locked and require toxin experiments to complete. - - balance: Toxins can purchase boosts for various techweb nodes. - - balance: 'You no longer need to anchor doppler arrays for it to work. qol: Doppler - array and implosion compressor now supports deconstruction, implosion compressor - construction added. qol: Doppler now emits a red light to denote it''s direction - and it being on. Doppler not malf.' - - 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) + Melbert: + - expansion: 'Kilostation: Service and (slight) command remap! Service hall now + included.' + Melbert, sprites from NecromancerAnne: + - balance: The Silverscale species are now pierce-immune and pressure-immune (NOT + temperature immune though). + - balance: Beefed up the Silverscale pirate gang. Their shuttle now has extra ammo + and additional general supplies. They're also now equipped with "Prime Nagant"s, + which don't jam and have a unique sprite. Regal, fancy! + cacogen: - 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 - cart with an empty hand to quickly remove your mop qol: You now right-click - to put things in the trash bag qol: Left-clicking the cart with an empty hand - will skip the radial menu if there''s only one item in the cart' + - 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 cart with an empty hand to quickly remove + your mop + - qol: You now right-click to put things in the trash bag + - qol: Left-clicking the cart with an empty hand will skip the radial menu if there's + only one item in the cart - rscadd: Adds examine hints for these changes - bugfix: Fixes overlays not immediately updating when filling janitorial cart - bugfix: Fixes bludgeoning janitorial cart when filling it - rscadd: You can right-click with "glass" reagent containers (e.g. buckets) to fill from drainable containers like janitorial carts - code_imp: Improvements to janitorial cart code -2022-03-09: - Melbert, sprites from NecromancerAnne: - - balance: The Silverscale species are now pierce-immune and pressure-immune (NOT - temperature immune though). - - balance: Beefed up the Silverscale pirate gang. Their shuttle now has extra ammo - and additional general supplies. They're also now equipped with "Prime Nagant"s, - which don't jam and have a unique sprite. Regal, fancy! - SkyratBot: - - imageadd: Hey there, if you like mapping, just know that we added some more area - turf sprites to help clarity and contrast between different area for Atmospherics. - That should help someone, I know it. - - bugfix: debug modsuits now are insulated + lewcc: - refactor: Moves more tool behavior out of attackby(). - Zonespace27: - - rscdel: Removed Block and Purge Malf AI objectives - jjpark-kb: - - rscadd: added skills for fishing and production (ceramics and glassblowing) - - rscdel: 'removed skill chips for fishing, ceramics, and glassblowing qol: clay - is now a stackable item qol: fishing rods are no longer force dual-wielded unless - you want to fish' - - code_imp: cleaned up some forging, fishing, ceramics, and glassblowing code -2022-03-10: - SkyratBot: - - bugfix: fixes mod plating being called armor in some places - - bugfix: Ollieing onto empty space makes you fall like it should. + san7890: + - rscadd: Nanotrasen has declared that the area colloquially known as the "Science + Break Room" will now get it's own power supply and formal definition. + - rscadd: Nanotrasen has decided to re-name the areas found on the mining station + bases of Lavaland and IceBox Station. +2022-03-09: + Fikou: - bugfix: abstract movement now checks for cordon turfs - - imageadd: You may now use the pensive emote in OOC chat, just like you would in - your favorite messaging app. - - balance: Nations can't roll other antags when it runs. - Tastyfish: - - imageadd: Added wheely, roller skate, and ski sprites for digigrade, vox, and - teshari legs. + - bugfix: debug modsuits now are insulated + JohnFulpWillard: + - qol: Sentient vibebots can now change their colors. Wallem: - refactor: De-Hardcodes decomposition timers. The decomposition time can now either be custom or use the existing automatic food flag system. -2022-03-11: - Gandalf2k15: - - rscadd: Boxes have been enhanced. - GoldenAlpharex: - - bugfix: Fixed vehicles being invisible outside of your field of view. Mechs are - not stealthy, nor are skateboards. Deal with it. - - bugfix: Fixed megafauna being invisible outside of your field of view. What a - terribly idea that was. - RatFromTheJungle: - - rscadd: Adds a deployable barricade crate to cargo lists. - SkyratBot: - - bugfix: The 2 types of weight machines now have unique in-game names. - - imageadd: New sprites for the weight machines. - - rscadd: A new intermediate tag for sec huds called "Suspected" that allows officers - to identify peoples of interest without raising their threat to where beepsky - will chase and attempt to apprehend them. Shows up as an orange '!'. - Zonespace27: - - balance: Thieving gloves now let you tie/untie shoe laces in half time. - - spellcheck: Fixed a pile of spelling errors with organic interface items - - refactor: Refactored yet more organic interface update code - - bugfix: You can no longer create blank messages with some organic interface items - - balance: Soulshards now require you to go through a five second actionbar to capture - a sould - - bugfix: Wooden Bows and blowguns no longer have a gun safety. - jjpark-kb: - - rscadd: 'added back the xenoarch digger qol: strange rock''s now have different - max depths depending on their reward' - - rscadd: added the seed mesh (craft-able through the forge workbench) - - rscadd: added a "kitchen" to the ashwalker nest (oven, microwave, etc.) - - balance: 'centrifuge is now craft-able through the forge workbench, no longer - in the crafting menu qol: centrifuge can now spin all chemicals besides the - one you choose' -2022-03-12: - BurgerBB: - - bugfix: Fixes abandoned crates exploding on empty-hand right click regardless - of intent. - GoldenAlpharex: - - refactor: A minor refactor was done to the persistent scars preference, allowing - it to finally be available in the preferences menu once again. - - bugfix: Fixed some overlay issues with certain *turf emotes related to tails, - to make them overlay properly over certain things such as chairs and sofas. - LemonInTheDark, MrStonedOne: - - code_imp: Adds a color blindness accessibility testing tool. Use it for testing - out your ui changes - MeyHaZah: - - imageadd: Resprites for every book - SkyratBot: - - bugfix: fixed an inconsistency where booze bottles and molotovs wouldn't splash - their contents when thrown at things while drinking and shot glasses do. - - bugfix: Fixes non-rustable turfs from becoming rusty. - - balance: Bump mining requires activehandedness - - code_imp: Bump click element for when bumping something should click it, like - mineral turfs - - bugfix: Fixes mobs able to move during charge delay after first charge - - balance: SM pluoxium production reduced by 500%, co2 consumed by the process decreased - by half - - bugfix: pAIs can be inserted into Vibebots again. - - bugfix: fixes Chili sin carne being uncraftable - - bugfix: HUD objects will no longer be hidden by things like blindness - - bugfix: The reality-correctioneers have removed the purple and black square that - shows up like 33% of the time in TramStation's Maintenance Tunnels. - - bugfix: fixes RCD not being able to be put in bags and belts by clicking. - - imageadd: For mappers, there is now a new icon that shows up when you place light - emitters down. It's a little bit more descript. - - bugfix: high frequency blade now works on mechs, metal gears and other vehicles - - admin: you can now varedit high frequency blade slash color - - bugfix: fixes tablet not updating appearance immediately after it is repaired - - bugfix: Female lizard's chests no longer poke out of their shirts. - - rscadd: Ghost darkness is now a game preference, and will persist between rounds - - balance: Ghost darkness defaults to a bit darker then currently. I think it looks - better - - bugfix: Fixes hitting snow turfs with a non-mining item to trigger hand mining - (which was something all cyborgs could do to mine) - - rscadd: Cyborgs can left-click with no active module to manually mine snow turfs - instead (takes 15 seconds per turf, good luck) - Wallem: - - code_imp: De-hardcodes random book icon state generation - axietheaxolotl: - - imageadd: New Archane Borg Sprites - capsaicinz: - - balance: shuttle 8532's syndicate modsuit is now locked in the bridge, and an - additional .38 speedloader is available. - - bugfix: ARBORLINK vault's lattices now fully enter the exterior grilles. - tastyfish: - - bugfix: Fixes clusterbuster segments working correctly/at all. -2022-03-13: - LeonY24: - - rscadd: P-90 SMG. Available at your local shitspawner. - Melbert: - - bugfix: Casters who sold their soul can no longer use Soul Tap - OrionTheFox: - - imageadd: Updated floor tile overrides to include all of TG's newer tiles, so - they now match ours - SkyratBot: - - bugfix: The barstools in the Nuclear Operative's Base now point the correct direction. - - code_imp: Because of the above, multitools can no longer be used to interact with - switches. Not like they did much, but well, so you know - - bugfix: On DeltaStation, certain wall appliances in the Telecommunications Office - no longer appear to be overlapping to those who are able to look at its walls - from both ends. - - bugfix: potentially fixed some admin features for mech equipment - - 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 - bases of Lavaland and IceBox Station. - Stalkeros: - - rscadd: Adds PCV, a unique Black Mesa HECU-exclusive vest, available at your local - Gateway. - Stalkeros, LeonY24: - - rscdel: Deletes Scalamov in its entirety. - Zonespace27: - - bugfix: Spells now appear in the OPFOR list. - - code_imp: OFPOR item_type unit test added - nikothedude: - - bugfix: Wildcat rubbers now don't cause bleeding. -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 - to misc items and spawners' - Gandalf2k15: - - imageadd: Nihilanth has been updated spritewise. - - rscadd: Some spawners now have species restrictions. - - balance: Enclave pirates have been nerfed. - MMMiracles: - - bugfix: The chapel now has a mass driver for proper burial disposal. - - bugfix: The overhang in the dorm area no longer shows the walls below on the edges. - Melbert: - - code_imp: Made some species datums follow style guidelines slightly better (lists, - indentation, spacing, etc). - - refactor: Refactored how species pages are generated in the preferences menu. - Species themselves are untouched completely. Some species pages have been filled - our more (or less) as a result. - - bugfix: Monkeys how have a preference menu entry, as god intended. - Nari Harimoto: - - bugfix: Engineering borgs can now place wallmounts again - - imageadd: New thruster sprites to allow for in-wall designs - - bugfix: 'removed cycle helpers from 2 random tram maint airlocks that arent meant - to cycle (solo airlocks) and a duplicated APC in tram maint expansion: the tram - now has new walls! they are structures that function like walls so as to be - built on the tram, create and deconstruct via the new tram girder (screwdriver - on the girder to deconstruct, there is no displaced version ie wrench)' - 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 - 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 - 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. - - spellcheck: All instances of "firstaid" have been replaced with "medkit". - - refactor: Dehardcoded SSmapping ruin types. - - bugfix: Removed random wall from in front of the kitchen on Tramstation. - - bugfix: Kilostation will now generate a normal number of space ruin z-levels - - bugfix: Kilostation will now have the correct linkage between its space z-levels - - you can now easily go space exploring again. - - 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 - 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 - doesn't matter to YOU, though. - - bugfix: Fixed two firelocks being on the same tile in the derelict outpost space - ruin. - - bugfix: modsuit nominal sound no longer plays when youre deaf - - bugfix: Lattices removed from inside the walls of Icebox, Meta, Delta and Kilo. - - rscadd: The area where Atmospherics sends and receives gas from the entire station - is now referred to as the "Pump Room". You can get some weights in there to - train your trapezoids and deltoids (and a bit of bicep/tricep action), but that's - up to you. - SpaceVampire: - - balance: Heretic sickle-sword now does 8 more damage, and has slight armor pen. - - balance: Heretics are now able to have more of their weapons summoned at once. - - balance: Heretics start with 1(one) extra free bonus point. - - balance: The gift of Mansus becomes ever more temping, as those granted with the - power of a Heretic now receive greater strength from sacrificing targets. - Wallem: - - bugfix: 'Cleanable decals will try to merge their reagents before they delete - if they have mergeable_decal = TRUE, meaning ants will now properly stack their - reagents when they spawn on the same tile. qol: Ants no longer spawn on lavaland''s - basalt.' - dekunutkid: - - bugfix: Replaced starting Biobag in Interdyne Xenobio with a Xenobag -2022-03-15: + san7890: + - imageadd: Hey there, if you like mapping, just know that we added some more area + turf sprites to help clarity and contrast between different area for Atmospherics. + That should help someone, I know it. + - rscadd: The area where Atmospherics sends and receives gas from the entire station + is now referred to as the "Pump Room". You can get some weights in there to + train your trapezoids and deltoids (and a bit of bicep/tricep action), but that's + up to you. + SpaceVampire: + - balance: Heretic sickle-sword now does 8 more damage, and has slight armor pen. + - balance: Heretics are now able to have more of their weapons summoned at once. + - balance: Heretics start with 1(one) extra free bonus point. + - balance: The gift of Mansus becomes ever more temping, as those granted with the + power of a Heretic now receive greater strength from sacrificing targets. + Wallem: + - bugfix: 'Cleanable decals will try to merge their reagents before they delete + if they have mergeable_decal = TRUE, meaning ants will now properly stack their + reagents when they spawn on the same tile. qol: Ants no longer spawn on lavaland''s + basalt.' + dekunutkid: + - bugfix: Replaced starting Biobag in Interdyne Xenobio with a Xenobag +2022-03-15: SkyratBot: - bugfix: Clown tears will no longer explode on creation. - bugfix: Centcom will no longer include empty "Identified Shift Divergences" sections @@ -710,221 +527,886 @@ - rscadd: Charlie Dorms were added (as an area). - imageadd: Fresh coat of paint for the Old Station (Charlie Station ruin) area sprites. - - bugfix: The Beach Biodome had the water turf corrected, and as such, shouldn't - have atmos issues. + - bugfix: The Beach Biodome had the water turf corrected, and as such, shouldn't + have atmos issues. + Melbert: + - balance: Flesh Heretic's summon objective now counts all summons done, alive or + dead, instead of all alive summons. Still does not include flesh ghouls or voiceless + dead. + SkyratBot: + - bugfix: The Kilostation chapel has less stacked turf decals. They're still around, + though.. Watching. Waiting... Additionally, magic power has been NUKED from + the maintenance room back there. Pour one out. + - bugfix: All lights (and cameras) in the Kilostation chapel have been PREPARED + FOR THE FUTURE. And by the future, I mean the wallening. + - bugfix: BCI overlays now actually work + - imageadd: Changed BCI counter overlay numbers to make them more readable + - bugfix: Blood-spread-only diseases will no longer always spread upon exposure + to blood. + - bugfix: Fixes two random lattices in the bottom corner of the Cent Com map + - bugfix: Fixes the description for mice being incredibly rude, judgmental, and + insulting towards mice, who are objectively adorable. + - bugfix: Recyclers no longer eat their own parts when dismantled. + - bugfix: Fixes tritium fires not releasing radiation when they should. + - bugfix: Fixes water vapour condensation requiring a temperature 20K lower than + usual. + - code_imp: Adds defines for tritium fire radiation stuff. + - bugfix: Fixed runtime on Give screen alert where a proximity check was happening + twice + - bugfix: Fixed being able to take things as a dead person + - bugfix: Bluespace shelters now come with a ceiling. + - code_imp: Added optional automatic ceiling generation for map templates. + - bugfix: Makes shuttle engine crates actually purchasable if you bought the BYOS + shuttle. + - bugfix: Proximity sensors inside chemical grenades should work now. + - bugfix: blob spores and game-controlled blobbernuts no longer get stuck thinking + they can't walk thru blob tiles. This has been broken for over a year and so + you should expect blob spores to be more of a threat then you are used to. + - imageadd: adjusted black undershirt side sprites to be more in line with the front + sprite + - imageadd: adjusted white undershirt side sprites to be more in line with the front + sprite +2022-03-24: + AtoriBirb: + - imageadd: 4 new plush sprites to plushies.dmi + OrionTheFox: + - rscadd: Added a fakelattice you can walk through, and adds it to the Ghostship/Salvagepost + ruins. Now you can explore them, whoops. + RatFromTheJungle: + - bugfix: you can now actually, research the advanced vision node, and all statements + saying I forgot to add it are slanderous. + Seris02: + - bugfix: the HoP winter coat has been separated into two coats, and the old icons + that were supposed to be put in in the last fix PR for it are actually now back + in the files. + SkyratBot: + - bugfix: Fixes being able to use revival surgery on blacklisted defib victims + - imageadd: On the mapping end, the Abductor Ship, the Wizard's Ship, and the Thunderdome + Administration and Observation Areas now have new area turf sprites. Does this + matter to your in-game experience? Probably not. + - refactor: 'cryotubes can now work with any gases expansion: cryotubes patients + will actually breathe the air inside the tube and will respond to the gas accordingly + (they''ll suffer from breath loss if not in proper atmosphere inside the tube) + expansion: cryoxadone heals only if the patient is alseep, making the use of + 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 + 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 + 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 + top of the Air Flow Meters on IceBoxStation. + tralezab: + - balance: Nations can't roll other antags when it runs. +2022-03-10: + Ebb-Real: + - bugfix: Ollieing onto empty space makes you fall like it should. + Fikou: + - bugfix: fixes mod plating being called armor in some places + LemonInTheDark: + - bugfix: Fixed two broken posters in the icebox underground + cacogen: + - qol: Attacking a machine as a monkey will now say if it did damage or not + san7890: + - bugfix: After a string of Nar'sie followers reportedly continuously "getting away + with it", Nanotrasen has decided to re-install the Chaplain's Altar back on + Tramstation. + - imageadd: You may now use the pensive emote in OOC chat, just like you would in + your favorite messaging app. +2022-03-11: + AtoriBirb: + - rscadd: A new intermediate tag for sec huds called "Suspected" that allows officers + to identify peoples of interest without raising their threat to where beepsky + will chase and attempt to apprehend them. Shows up as an orange '!'. + DTraitor: + - bugfix: Fixes mobs able to move during charge delay after first charge + Melbert: + - qol: Screen tips for the Null Rod, Anomaly Neutralizer, Codex Cicatrix, and Mansus + Grasp for removing runes / anomalies / drained heretic influences + Tastyfish: + - bugfix: The 2 types of weight machines now have unique in-game names. + - imageadd: New sprites for the weight machines. + san7890: + - bugfix: The reality-correctioneers have removed the purple and black square that + shows up like 33% of the time in TramStation's Maintenance Tunnels. +2022-03-12: + BurgerBB: + - bugfix: Fixes abandoned crates exploding on empty-hand right click regardless + of intent. + Ebb-Real: + - bugfix: fixes RCD not being able to be put in bags and belts by clicking. + Ebin-Halcyon: + - bugfix: Female lizard's chests no longer poke out of their shirts. + Fikou: + - bugfix: high frequency blade now works on mechs, metal gears and other vehicles + - admin: you can now varedit high frequency blade slash color + Ghilker: + - balance: SM pluoxium production reduced by 500%, co2 consumed by the process decreased + by half + Ghommie: + - 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 + to modify the frame won''t, though). The more credits have been spent on the + patronage, the better the options: from 150 for the iron frame up to 12000 for + the supermatter one (doesn''t dust nor irradiate).' + - bugfix: You can now sponsor a painting that hasn't been archived yet. Just make + sure it's inserted in a frame with persistence on. + - bugfix: fixed some mismatches between sprites and sizes for a few canvases. + - admin: When you send people to Admin Prison for any number of reasons, please + take joy in knowing they can't explode out the floors any more. + - refactor: 'refactored the electrolyzer to use datumized reactions instead of hardcode + them in process expansion: added the hypernoblium to antinoblium conversion, + when hypernoblium is exposed to the electrolyzer it will be converted to antinoblium' + - bugfix: xray beams can now be resisted by laser-resistant armor + - code_imp: /obj/projectile flag is renamed to armor_flag + - bugfix: Fixed icebox plasma facility mood event color not working. + - code_imp: Improved mood events descriptions to be simpler to write. + - imageadd: On the mapping end, CentCom has now been covered in a fresh new paint... + of area turfs! Who doesn't love those! + ZephyrTFA: + - rscadd: Upgraded Borg Snack Dispensor + Zonespace27: + - spellcheck: Fixed many spelling errors in organic interface messages + - refactor: Refactored some organic interface clothing + - rscadd: New module for contractor MODSuit, baton holster + - rscadd: Two contractor baton upgrades + - bugfix: Contractor MODSuit now protects you against pressure when you aren't using + an armor booster + - bugfix: Contractor MODSuit name and desc now get updated properly when a chameleon + module wears off + magatsuchi: + - bugfix: allows changelings to re-enter their body despite DNR ban + this awesome text: + - balance: MODsuits have some armor. +2022-03-25: + 2cents: + - imageadd: Updated security sprites. + Gandalf2k15: + - rscadd: Security medic sprites have been rearranged. + Shiets, Dragomagol: + - rscadd: Podpeople now have plant-like growths springing from their heads! + - rscadd: Podpeople can style their "hair" with secateurs + SkyratBot: + - 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 + 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. + - bugfix: Fixed 24x24 paintings not being centered inside their frames. + - bugfix: Bot's modes have been fixed, Medibots will no longer be on 'arrest' mode. +2022-03-26: + AtoriBirb: + - code_imp: swapped a plush sound file to one less red-code inducing + ErdinyoBarboza: + - bugfix: The construction interns finally installed access restrictions to Icebox + Armory. + SkyratBot: + - bugfix: Fixed double firelocks in Deltastation's fore customs area. + - bugfix: Kiosk wands can no longer be put into storage containers + - bugfix: Nukies can no longer lock their own uplink. + - bugfix: Clicking on airlock with ID Scan wire cut, should not open airlock. + - bugfix: Fix an overlooked crystallizer issue where gases wouldn't get consumed + because of a fixed rate of removal instead of an percentage based one. + Wallem: + - bugfix: GPSes don't start deactivated anymore, which also brings back most space + ruin GPS signals. Sorry about that. +2022-03-27: + Jolly: + - bugfix: SnowCabin.dmm had its active turfs rectified. + SkyratBot: + - balance: Sentient Diseases now require a minimum playercount of 25 to activate, + up from 10. + - rscadd: Added command encryption keys to the cargo order console + - bugfix: TGUI and Tooltip windows now work with high-dpi web browsers + - bugfix: The latejoin menu will now properly close when you join the game + - bugfix: IceBox had two washing machines on the same tile, as well as a bit brighter + than usual decals. That tile is back to normal. + - bugfix: The engineering console on Icebox is once again connected to the station's + grid and can see APC status and available power. + - imageadd: For those who seek out rarer materials, Runite Bars have a nicer appearance. + - 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 + 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 + that previously had varedited accesses now use preset access helpers' + - soundadd: Sound effects for attacking bushes, trees, mushrooms and rocks. + - code_imp: Minor code improvements in flora.dm + - balance: Airlocks will now autoclose in 8 seconds rather then 15 + - bugfix: If you were a prisoner on KiloStation and you noticed some abnormally + dark rocks, I hope you are pleased to know that they have been brightened up. + No compensation is offered. + - bugfix: Fixes nonhuman head of departments showing up as their original species + in security records. + - balance: Destroy the Blackbox is now worth 6-9 TC instead of 4 TC + - bugfix: Fixed stray syndicate supply pods not containing any items. +2022-03-28: + Gandalf2k15: + - rscadd: Ports Yogstations central command jobs. + Inari-Whitebear: + - bugfix: Fix pathing issue with Skyrat emergency shuttle causing other emergency + shuttles to not be found + Orion_the_Fox, Halcyon(Sprites): + - rscdel: Armadyne and Lopland have agreed to remove OldPeacekeeper reskins and + some straggling Redsec clothes from Security, after several Uniformity complaints + from CC. + - imageadd: SPLIT THE MASTER UNIFORM FILE TO HAVE A SECURITY SUBTYPE. ONLY SECURITY + UNIFORMS SHOULD BE IN HERE. EXPECT THIS TO EXPAND ONTO OTHER DEPARTMENTS AS + WELL. (TG already does this, its much easier to maintain than one giant file.) + - imagedel: Removed lots of unused Security icons. (Literally, these had no items. + Ingame you'll see no change from this.) + SkyratBot: + - bugfix: Bartenders can throw drinks again, rejoice! + - bugfix: Fixes an exploit that allowed players to send unsanitized text to admins. +2022-03-29: + ArcaneMusic ft. sprites by Kryson: + - rscadd: 'Newscasters have been moved over to TGUI, and with them several new features. + expansion: Newscaster channels can now be given channel descriptions! expansion: + Messages can now be censored by crew with brig access from any console.' + GoldenAlpharex: + - refactor: A minor refactor was done to the persistent scars preference, allowing + it to finally be available in the preferences menu once again. + Inari-Whitebear: + - bugfix: Fixed Delta station bridge engineering console having non-working AmpCheck + due to not being hooked up to the powergrid. + JohnFulpWillard: + - bugfix: pAIs can be inserted into Vibebots again. + - bugfix: Electric shocks now help against heart attacks. + LemonInTheDark: + - bugfix: HUD objects will no longer be hidden by things like blindness + - rscadd: Ghost darkness is now a game preference, and will persist between rounds + - balance: Ghost darkness defaults to a bit darker then currently. I think it looks + better + LemonInTheDark, MrStonedOne: + - code_imp: Adds a color blindness accessibility testing tool. Use it for testing + out your ui changes + MMMiracles: + - bugfix: Adds an APC to the upper dorm area on Tramstation + MacBlaze1: + - expansion: Allows multitools to change the speed of linked conveyor belts by clicking + on a placed conveyor switch. + - code_imp: Because of the above, multitools can no longer be used to interact with + switches. Not like they did much, but well, so you know + MeyHaZah: + - imageadd: Resprites for every book + OneAsianTortoise: + - bugfix: fixes tablet not updating appearance immediately after it is repaired + QuacksQ: + - bugfix: fixes Chili sin carne being uncraftable + Shelteredfreak, MrMelbert, and San7890: + - rscdel: Removed Kilo's chapel in favor of a monastery off of the main station. + - rscadd: Added a new monastery on Kilo's Northwestern asteroid. + - rscadd: Added a security cremator to sec in place of the hardsuits, hardsuits + moved to armory. + - rscadd: Added a public garden in the Chapel's place, complete with cow and chicken + (Done by MrMelbert). + Son-of-Space: + - bugfix: Enabled general access to escape pod on KiloStation + SuperNovaa41: + - bugfix: Fixes non-rustable turfs from becoming rusty. + Thunder12345: + - qol: Pride pins now appear on top of suit slot clothing + Wallem: + - code_imp: De-hardcodes random book icon state generation + cacogen: + - balance: Bump mining requires activehandedness + - code_imp: Bump click element for when bumping something should click it, like + mineral turfs + - bugfix: Fixes hitting snow turfs with a non-mining item to trigger hand mining + (which was something all cyborgs could do to mine) + - rscadd: Cyborgs can left-click with no active module to manually mine snow turfs + instead (takes 15 seconds per turf, good luck) + nevimer: + - bugfix: succumb prompt can be cancelled again + san7890: + - rscadd: On DeltaStation, the Ordnance storage room now owns it's own doors. + - bugfix: The barstools in the Nuclear Operative's Base now point the correct direction. + - rscadd: On DeltaStation, Nanotrasen 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 + doesn't matter to YOU, though. + - imageadd: For mappers, there is now a new icon that shows up when you place light + emitters down. It's a little bit more descript. + - bugfix: On DeltaStation, certain wall appliances in the Telecommunications Office + no longer appear to be overlapping to those who are able to look at its walls + from both ends. + tastyfish: + - bugfix: Fixes clusterbuster segments working correctly/at all. + tohg7: + - bugfix: fixed an inconsistency where booze bottles and molotovs wouldn't splash + their contents when thrown at things while drinking and shot glasses do. +2022-03-13: + Gandalf2k15: + - imageadd: Medkit sprites have now been updated to proper 3/4th perpsective. + - spellcheck: All instances of "firstaid" have been replaced with "medkit". + Melbert: + - bugfix: Casters who sold their soul can no longer use Soul Tap + OneAsianTortoise: + - bugfix: being inside locker no longer protects you from a nuke + - balance: being inside the fridge guarantees you to survive nuclear bomb + TiviPlus: + - bugfix: potentially fixed some admin features for mech equipment +2022-03-14: + Fikou: + - bugfix: modsuit nominal sound no longer plays when youre deaf + GoblinBackwards: + - bugfix: Removed random wall from in front of the kitchen on Tramstation. + JohnFulpWillard: + - qol: Revs/Traitors adding more threat is now shown on the roundend report. + - bugfix: IceBox's Psychology office medical computer records console now faces + the right way. + Nari Harimoto: + - bugfix: Engineering borgs can now place wallmounts again + OperativeLyn: + - bugfix: Fixed two firelocks being on the same tile in the derelict outpost space + ruin. + Wallem: + - qol: Most foods decompose into JUST moldy food, which then gets eaten by ants, + leaving only the anthills and ultimately making them more visible. + - bugfix: Cleanable decals will try to merge their reagents before they delete if + they have mergeable_decal = TRUE, meaning ants will now properly stack their + reagents when they spawn on the same tile. + - qol: Ants no longer spawn on lavaland's basalt. + san7890: + - rscadd: Instead of having four different corners on each floor, Nanotrasen has + decided to slap down full corners on each floor to keep that one floor looking + that masterful shade of beige. + timothymtorres: + - qol: Change barricade, grille, and girder mapping spawners to have a ~20% not + to spawn. + - qol: Change ornament mapping spawner to only spawn lamps and red phones. +2022-03-15: + Ebb-Real: + - bugfix: Fixes the syndie screwdriver using the wrong belt sprite. + - imageadd: Added belt sprites for the syndie screwdriver and all alien tools. + Fikou: + - spellcheck: fixes double the in motion cameras + Nari Harimoto: + - qol: Each Map now comes with a standard amount of gas cans in Ordanance Storage + (except kilo which gets slightly less, because Kilo is too small) so you do + not need to have to learn vastly different mixing methods per map, removed stored + co2 as it is not used + Pepsilawn: + - bugfix: Removed the extra keycard auth device hidden under the CE's extinguisher + cabinet + SuperNovaa41: + - code_imp: Removes a forgotten devil proc in photocopier code. + - code_imp: Updates `init_gaslist_cache` to match current code standards. + TemporalOroboros: + - expansion: Splashed blood is as infective as bled blood. + cacogen: + - bugfix: Fixed firelock screentips telling silicons they could knock or bash them + - bugfix: Fixed firelock screentips saying bash with combat mode off and knock with + it on (it's the opposite) + - qol: Adds firelock screentips for silicons, monkeys and xenos + carshalash: + - bugfix: Clown tears will no longer explode on creation. + interestingusernam3: + - 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: Cheese wheels and royal cheese no longer count as cheese wedges for recipes. + - code_imp: Cheese wedges are no longer the superclass for all cheese. + lewcc: + - bugfix: Fixes airlock reinforcement not being removable. + - refactor: Heavily refactors reinforcing and un-reinforcing airlocks. + san7890: + - bugfix: On KiloStation, there is no longer a weird floor decal on a wall. Nanotrasen + has commissioned an institution-wide inquiry to find out which joker put it + there. + tastyfish: + - bugfix: Geese now act like geese if provoked again. + vincentiusvin: + - bugfix: fixed an outdated quip about purchasing an ordnance paper. + - bugfix: added the ordnance circuitboards to the techweb, forgot about this in + the original pr. + - qol: added a small tooltip to the compressor buffer port. +2022-03-16: + Iamgoofball: + - qol: Anyone who has access to the cells and the gulag shuttle can now use the + gulag teleporter + JohnFulpWillard: + - bugfix: Armsky and Pingsky aren't pAI controllable anymore. + - bugfix: Podpeople now take self-respiration into account when taking damage from + critical condition, like most other species. + LemonInTheDark: + - qol: /tg/c cards now support in chat tooltips, finally you don't need to look + up what Hivemind means for the 200th time + - code_imp: tgui chat now supports embedding components into it via html attributes. + Go make the game look better lads. + ORCACommander: + - qol: Updated Title Card Specifications + OneAsianTortoise: + - qol: hand labeler paper roll and toner cartridge can be printed at autolathe and + protolathes now + OperativeLyn: + - bugfix: Fixed two firelocks being on the same tile in the Starfury. + Ryll/Shaps: + - bugfix: Dog AI's should no longer lock up and become unresponsive after failed + fetch attempts + - soundadd: Dogs in harass mode that are guarding against someone will now make + growling sounds + TemporalOroboros: + - bugfix: Water vapor should wet and freeze floors once again. + Thunder12345: + - rscdel: Lean has been removed entirely from the game + Wallem: + - rscadd: Seeing how many miners we lose on a weekly basis, we've decided to dig + through some of our prototypes to get something to help you all. Your venders + have been supplied with Kheiral Cuffs, a wrist-worn suit sensor range booster. + Note that any accelerated aging caused by the device will not be counted towards + your retirement. + san7890: + - rscadd: Random Poster Spawners now have directional variants. You don't have to + memorize the pixel offset for those anymore (it was 32). + - admin: When you send people to Admin Prison for any number of reasons, please + take joy in knowing they can't explode out the floors any more. + vincentiusvin: + - bugfix: fixes the doppler array nullifying some of your bombs. +2022-03-17: + Fikou: + - imageadd: new punching bag sprites!!!!!!!!!!!!!!!! + JosephJomama: + - imageadd: The police baton has been resprited into a handsome beatin' stick worthy + for a lone-wolf detective who doesn't play by the rules to whack perps with. + LemonInTheDark: + - rscadd: Rather then being tileable with just floor tiles, lavaland turfs, asteroid + and snow (among other things) now support lattice -> floor tile construction + - bugfix: Because of the above, you can now properly fix the icebox mining shuttle + - refactor: Non floor turfs are no longer typed as floor. This may break things, + please yell at me if it does + Thunder12345: + - bugfix: Pride pins can be reskinned again, accessories whose location can be toggled + now do so with right-click. + capsaicinz: + - bugfix: supply pods, crab-17s, explosions in general(?), and ash drakes(?????????) + no longer make a shattering sound. + - code_imp: turns some "if ("s into "if("s in sound.dm + dragomagol: + - admin: Silicon law logs are shorter and easier to read + san7890: + - imageadd: On the mapping end, the Abductor Ship, the Wizard's Ship, and the Thunderdome + Administration and Observation Areas now have new area turf sprites. Does this + matter to your in-game experience? Probably not. + - rscadd: 'On DeltaStation, IceBoxStation, and TramStation: Nanotrasen has now blocked + off the area informally known as the "Cargo Lobby", and formally defined it.' + - bugfix: Nanotrasen corrected an oversight with the Security Medical ward on TramStation; + it now has an Air Alarm and APC. + - bugfix: DeltaStation's Bomb Range no longer has a floating camera. Instead, the + camera has been redirected to attach on the wall the proper way. + - bugfix: The Syndicate 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. + - rscadd: Nanotrasen decided to shuffle some things around in DeltaStation's Grand + Surgery Theatre's Viewing Room in order to save the cost of having to purchase + two new chairs with each station. + - bugfix: KiloStation's Chapel Entrance now receives power. + - bugfix: There is no longer a space turf in the middle of an asteroid on KiloStation + with gravity attached to it. +2022-03-18: + Fikou: + - bugfix: drones are no longer shy around maint rats and such + GoblinBackwards: + - bugfix: Prevents invalid materials being used on airlock assemblies. + JohnFulpWillard: + - bugfix: Ants now don't appear on icemoon/space asteroids, rather than only lavaland. + MMMiracles: + - bugfix: Patches up the sporadically popping up space turfs that appeared in tram's + security wing. + - bugfix: The bar now has an air alarm. + MacBlaze1: + - expansion: More than two assemblies can now be combined for use in bombs, grenades, + or anything else assembly holders are used in. + - qol: signalers can now be triggered through right click + Melbert: + - bugfix: Makes the wizard's Lich Phylactery mechanic actually work consistently. + - bugfix: The description of the Bind Soul spell (and entry) should match its behavior + a bit more accurately now. You will revive regardless if your body is destroyed + or leaves the z-level. With each revival, the time it takes to respawn does + not change, but the duration of the stun does. + - refactor: Makes Phylacteries a component. + - qol: Gave Lich Phylacerties some QoL features and pizazz. Examining it'll offer + more information to wizards and ghosts. + RandomGamer123: + - bugfix: Engineering departmental order consoles can now once again order gas canisters. + SuperNovaa41: + - bugfix: Fixes being able to spam deny sounds on deliver first crates. + TemporalOroboros: + - bugfix: Using telekinesis will no longer break chameleon. + Zergspower: + - rscadd: Parts and Machine frame to build an ORM from the golem ship + - rscdel: Removed Prebuilt ORM from the golem ship + capsaicinz: + - bugfix: soulscythes are now immune to mining planet storms + nevimer: + - bugfix: native fast gui boxes work again + san7890: + - imageadd: On the mapping end, the Diner now has it's own area turf. If you don't + know what that means, just know that it's a good thing. + - rscadd: Nanotrasen decided to do a few more cost-cutting procedures, removing + lights from a certain outdoor section of KiloStation. +2022-03-19: + Fikou: + - bugfix: you cant hide stuff in locked modsuit storages, it empties when removed + from the suit + Son-of-Space: + - bugfix: Engineers have finally solved for the reason why their solar setups on + TramStation never worked. + Twaticus: + - imageadd: further medkit tweaks + carshalash: + - qol: Adds three new orderable fish crates to split rates of fish one gets. + san7890: + - bugfix: Nanotrasen has decided to quit installling posters on ice turfs near Lower + Chapel Maintenance on IceBoxStation. + - bugfix: Nanotrasen will no longer stop placing two chairs on the same spot in + IceBoxStation Departures. + - rscadd: A mix-up in blueprints meant that TramStation didn't have a formally defined + Ordnance Launch Area. This has now been rectified. + - bugfix: TramStation's Ordnance Mixing no longer owns that bit of space that the + waste gas is meant to exit the burn chamber from. + - bugfix: TramStation's Ordnance Launch Area's APC now has connectivity to the grid. + - bugfix: Nanotrasen busted out some pulse rifles to get rid of some loose rock + debris in the Northwestern Quadrant of KiloStation. +2022-03-20: + Dex: + - bugfix: Fixed training toolbox sprite + Ghommie: + - qol: Added a search function to the "Marlowe Treeby's Art Galaxy" app. You can + now search for paintings by title or author now. + - qol: Speaking of the same app, the name of the author is now displayed under that + of the painting in its preview section. + - bugfix: Fixed a potential BSOD in its TGUI if no painting was ever archived. + - qol: The AI Portrait Picker also got a similar treatment. + Son-of-Space: + - qol: It is now easier to tell that lower maintenance on box is traversable and + is reliable to traverse. + - balance: tweaked access reqs for certain doors in lower maintenance on BoxStation. + SuperNovaa41: + - bugfix: Fixes two random lattices in the bottom corner of the Cent Com map + Vladoricious: + - qol: All accessories show above the suit by default and can be toggled. + cacogen: + - expansion: Can Shift+Ctrl+Click people to give items to them directly now + - bugfix: Fixed runtime on Give screen alert where a proximity check was happening + twice + - bugfix: Fixed being able to take things as a dead person + - qol: Tooltips of low/no power screen alerts (used by cyborgs, MODsuits, mechs + and ethereals) will tell you the actual locations of the roundstart station + chargers + - bugfix: Fixes issue with low/no power screen alerts not clearing after leaving + a mech + jjpark-kb: + - rscadd: resonators will now have their fields spread +2022-03-21: + JohnFulpWillard: + - qol: You can now buckle people onto meatspikes the same way you buckle people + onto anything else. + Maurukas: + - bugfix: The medical escape pod on Kilostation is no longer walled off. + Melbert: + - qol: Heretic targets which become uncompletable (being deleted) will remove themselves + from a heretic's sacrifice list + OperativeLyn: + - bugfix: Fixed a missing blast door in IceBox's surgery room. + - bugfix: You ever noticed the floating piece of sand to the east of Tramstation? + Well it's now gone. + SuperNovaa41: + - bugfix: Fixes a runtime in build mode's KABOOM. + Tastyfish: + - rscadd: Adds the Format List and Format Associate List wiremod component, for + ease of formatting lists of items. + TheSilverNuke: + - balance: allows you to heal using plasma fixation in minor amounts of plasma such + as in Icebox's atmosphere + interestingusernam3: + - bugfix: The reality-defying cheese wedge in the Entemology Outreach Center on + Icemoon has been succesfully contained and replaced with a normal one. + san7890: + - imageadd: On the mapping end, CentCom has now been covered in a fresh new paint... + of area turfs! Who doesn't love those! + - bugfix: In MetaStation Maintenance to the east of Cargo and to the west of the + vault, in that little hallway, a deep dark secret was there. There were TWO + lockers present on the same tile. Nanotrasen has expertly trimmed it such that + only one locker will be placed there now. + - bugfix: Nanotrasen decided to make those fancy lights that point in the direction + of exiting the Arrivals shuttle actually point in the right direction. + - bugfix: Nanotrasen has stamped out the odd issues with lighting and gravity on + the MetaStation AI Satellite. + - bugfix: Nanotrasen also realized it was a good idea to not install their cameras + and lights on the windows surrounding MetaStation's AI Satellite. + this awesome text: + - balance: MODsuits have some armor. + unit0016: + - bugfix: The Kilostation chapel has less stacked turf decals. They're still around, + though.. Watching. Waiting... Additionally, magic power has been NUKED from + the maintenance room back there. Pour one out. + - bugfix: All lights (and cameras) in the Kilostation chapel have been PREPARED + FOR THE FUTURE. And by the future, I mean the wallening. +2022-03-22: + GoblinBackwards: + - bugfix: Prevents iron/adamantine/yellow slime cookies from being to able to stack + their bonuses. + Jolly: + - bugfix: The Beach Biodome had the water turf corrected, and as such, shouldn't + have atmos issues. + OneAsianTortoise: + - bugfix: fixes medical scrub being named "under" +2022-03-23: + Daggertail: + - qol: Amputation, Compound Fracture Repair, Cavity Implantation, Augmentation, + and Prosthetic Replacement surgeries now all clamp bleeders after retracting + skin like most surgeries, rather than before. + Ghilker: + - refactor: cryotubes can now work with any gases + - expansion: cryotubes patients will actually breathe the air inside the tube and + will respond to the gas accordingly (they'll suffer from breath loss if not + in proper atmosphere inside the tube) + - expansion: cryoxadone heals only if the patient is alseep, making the use of 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 + Ghommie: + - rscadd: 'Added a palette component for palettes and spraycans: Right click the + item while it''s in your active hand to access a radial menu that allows you + to store, select or edit up to 14 colors for palettes and 8 for spraycans. Right-Click + one of the color to pick a new color value, Left-Click to select it.' + - qol: Furthermore, a graphical palette containing the colors of the palette component + will show up in the Canvas UI when painting with a tool that has said component, + allowing you to select colors without unfocusing from the UI window. + - rscdel: Removed the ctrl-click (color picker) shortcut from spraycans, as I felt + it to be too clunky and no longer necessary now (I'm the person that made it + btw). + GoblinBackwards: + - bugfix: Bluespace shelters now come with a ceiling. + - code_imp: Added optional automatic ceiling generation for map templates. + - bugfix: Recyclers no longer eat their own parts when dismantled. + Iamgoofball: + - bugfix: Fixes the description for mice being incredibly rude, judgmental, and + insulting towards mice, who are objectively adorable. + Jolly: + - rscadd: Charlie and Delta Storage rooms were added (as an area). + - rscadd: Charlie Dorms were added (as an area). + - imageadd: Fresh coat of paint for the Old Station (Charlie Station ruin) area + sprites. + LordVollkorn: + - bugfix: Proximity sensors inside chemical grenades should work now. Melbert: - balance: Flesh Heretic's summon objective now counts all summons done, alive or dead, instead of all alive summons. Still does not include flesh ghouls or voiceless dead. - SkyratBot: - - bugfix: The Kilostation chapel has less stacked turf decals. They're still around, - though.. Watching. Waiting... Additionally, magic power has been NUKED from - the maintenance room back there. Pour one out. - - bugfix: All lights (and cameras) in the Kilostation chapel have been PREPARED - FOR THE FUTURE. And by the future, I mean the wallening. - - bugfix: BCI overlays now actually work - - imageadd: Changed BCI counter overlay numbers to make them more readable - - bugfix: Blood-spread-only diseases will no longer always spread upon exposure - to blood. - - bugfix: Fixes two random lattices in the bottom corner of the Cent Com map - - bugfix: Fixes the description for mice being incredibly rude, judgmental, and - insulting towards mice, who are objectively adorable. - - bugfix: Recyclers no longer eat their own parts when dismantled. + MrStonedOne: + - bugfix: blob spores and game-controlled blobbernuts no longer get stuck thinking + they can't walk thru blob tiles. This has been broken for over a year and so + you should expect blob spores to be more of a threat then you are used to. + Pickle-Coding: - bugfix: Fixes tritium fires not releasing radiation when they should. - bugfix: Fixes water vapour condensation requiring a temperature 20K lower than usual. - code_imp: Adds defines for tritium fire radiation stuff. - - bugfix: Fixed runtime on Give screen alert where a proximity check was happening - twice - - bugfix: Fixed being able to take things as a dead person - - bugfix: Bluespace shelters now come with a ceiling. - - code_imp: Added optional automatic ceiling generation for map templates. + RandomGamer123: - bugfix: Makes shuttle engine crates actually purchasable if you bought the BYOS shuttle. - - bugfix: Proximity sensors inside chemical grenades should work now. - - bugfix: blob spores and game-controlled blobbernuts no longer get stuck thinking - they can't walk thru blob tiles. This has been broken for over a year and so - you should expect blob spores to be more of a threat then you are used to. + Shiets, Dragomagol: + - rscadd: Podpeople now have plant-like growths springing from their heads! + - rscadd: Podpeople can style their "hair" with secateurs + SmArtKar: + - bugfix: BCI overlays now actually work + - imageadd: Changed BCI counter overlay numbers to make them more readable + SuperNovaa41: + - bugfix: Fixes being able to use revival surgery on blacklisted defib victims + TemporalOroboros: + - bugfix: Blood-spread-only diseases will no longer always spread upon exposure + to blood. + capsaicinz: + - bugfix: xray beams can now be resisted by laser-resistant armor + - code_imp: /obj/projectile flag is renamed to armor_flag + kawoppi: - imageadd: adjusted black undershirt side sprites to be more in line with the front sprite - imageadd: adjusted white undershirt side sprites to be more in line with the front sprite -2022-03-24: - AtoriBirb: - - imageadd: 4 new plush sprites to plushies.dmi - OrionTheFox: - - rscadd: Added a fakelattice you can walk through, and adds it to the Ghostship/Salvagepost - ruins. Now you can explore them, whoops. - RatFromTheJungle: - - bugfix: you can now actually, research the advanced vision node, and all statements - saying I forgot to add it are slanderous. - Seris02: - - bugfix: the HoP winter coat has been separated into two coats, and the old icons - that were supposed to be put in in the last fix PR for it are actually now back - in the files. - SkyratBot: - - bugfix: Fixes being able to use revival surgery on blacklisted defib victims - - imageadd: On the mapping end, the Abductor Ship, the Wizard's Ship, and the Thunderdome - Administration and Observation Areas now have new area turf sprites. Does this - matter to your in-game experience? Probably not. - - refactor: 'cryotubes can now work with any gases expansion: cryotubes patients - will actually breathe the air inside the tube and will respond to the gas accordingly - (they''ll suffer from breath loss if not in proper atmosphere inside the tube) - expansion: cryoxadone heals only if the patient is alseep, making the use of - 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' + san7890: + - bugfix: There is no longer a poster splayed out over a vending machine in KiloStation's + Botany Section. - bugfix: Nanotrasen 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 some other lattices in that area so they cleaned up after themselves as well. How responsible! + - bugfix: Nanotrasen decided that today was a good day to remove the random floating + poster on the exterior of Security on KiloStation. - bugfix: Nanotrasen 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 - to modify the frame won''t, though). The more credits have been spent on the - patronage, the better the options: from 150 for the iron frame up to 12000 for - the supermatter one (doesn''t dust nor irradiate).' - - bugfix: You can now sponsor a painting that hasn't been archived yet. Just make - sure it's inserted in a frame with persistence on. - - bugfix: fixed some mismatches between sprites and sizes for a few canvases. - - admin: When you send people to Admin Prison for any number of reasons, please - take joy in knowing they can't explode out the floors any more. - - refactor: 'refactored the electrolyzer to use datumized reactions instead of hardcode - them in process expansion: added the hypernoblium to antinoblium conversion, - when hypernoblium is exposed to the electrolyzer it will be converted to antinoblium' - - bugfix: xray beams can now be resisted by laser-resistant armor - - code_imp: /obj/projectile flag is renamed to armor_flag + timothymtorres: + - qol: Mood events colors now accurately reflect the severity for the positive or + negative. Really good is bold green, good is green, neutral is gray, bad is + red, and really bad is bold red. - bugfix: Fixed icebox plasma facility mood event color not working. - code_imp: Improved mood events descriptions to be simpler to write. - - imageadd: On the mapping end, CentCom has now been covered in a fresh new paint... - of area turfs! Who doesn't love those! - ZephyrTFA: - - rscadd: Upgraded Borg Snack Dispensor - Zonespace27: - - spellcheck: Fixed many spelling errors in organic interface messages - - refactor: Refactored some organic interface clothing - - rscadd: New module for contractor MODSuit, baton holster - - rscadd: Two contractor baton upgrades - - bugfix: Contractor MODSuit now protects you against pressure when you aren't using - an armor booster - - bugfix: Contractor MODSuit name and desc now get updated properly when a chameleon - module wears off - magatsuchi: - - bugfix: allows changelings to re-enter their body despite DNR ban - this awesome text: - - balance: MODsuits have some armor. +2022-03-24: + Ghilker: + - refactor: refactored the electrolyzer to use datumized reactions instead of hardcode + them in process + - expansion: added the hypernoblium to antinoblium conversion, when hypernoblium + is exposed to the electrolyzer it will be converted to antinoblium 2022-03-25: - 2cents: - - imageadd: Updated security sprites. - Gandalf2k15: - - rscadd: Security medic sprites have been rearranged. - Shiets, Dragomagol: - - rscadd: Podpeople now have plant-like growths springing from their heads! - - rscadd: Podpeople can style their "hair" with secateurs - SkyratBot: - - bugfix: Fixed Departmental Techfab machine board for service being named oddly - compared to the other ones. + Fikou: - balance: xray lasers now have 100 armor penetration - - imageadd: Nanotrasen 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! + Ghommie: - bugfix: Fixed the size of plaques on the painting UI. They were awfully thin. - bugfix: Fixed 24x24 paintings not being centered inside their frames. + JohnFulpWillard: - bugfix: Bot's modes have been fixed, Medibots will no longer be on 'arrest' mode. + san7890: + - imageadd: Nanotrasen 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! + tnekohue: + - bugfix: Fixed Departmental Techfab machine board for service being named oddly + compared to the other ones. + vincentiusvin: + - refactor: Refactored the atmos control console devices. The ones that hook to + the big turf chambers. + - qol: Distro meter now broadcast the whole gasmix info instead of just pressure + to the monitors. + - bugfix: Lavaland syndie's atmos chamber vents are now actually configurable. Moved + a few things around to accomodate this. + - bugfix: Lavalannd syndie chambers hooked to distro and moved distro pipe to layer2 + - qol: atmos monitors can detect reactions now. + - code_imp: Some minor code changes to how anomaly refinery and implosion compressor + show the gas info. No changes expected, report if bug. + - code_imp: recoded checks for atmos chamber abnormalities in debug verbs. 2022-03-26: - AtoriBirb: - - code_imp: swapped a plush sound file to one less red-code inducing - ErdinyoBarboza: - - bugfix: The construction interns finally installed access restrictions to Icebox - Armory. - SkyratBot: - - bugfix: Fixed double firelocks in Deltastation's fore customs area. - - bugfix: Kiosk wands can no longer be put into storage containers - - bugfix: Nukies can no longer lock their own uplink. + Colovorat: - bugfix: Clicking on airlock with ID Scan wire cut, should not open airlock. + Ghilker: - bugfix: Fix an overlooked crystallizer issue where gases wouldn't get consumed because of a fixed rate of removal instead of an percentage based one. + OperativeLyn: + - bugfix: Fixed double firelocks in Deltastation's fore customs area. + SmArtKar: + - expansion: Added VOX and Thought Listener BCI components + - expansion: Object Overlay component overlays can now be rotated + - expansion: Added new view sensor component. + Tastyfish: + - qol: The supply and supply request consoles now have a search bar. + - bugfix: Picking a high priority role in character creation no longer breaks assistant + selection behind the scenes. Wallem: - bugfix: GPSes don't start deactivated anymore, which also brings back most space ruin GPS signals. Sorry about that. + dragomagol: + - bugfix: Kiosk wands can no longer be put into storage containers + - qol: Windoors now use directional variants + maxspells: + - expansion: Surgery steps play sound effects appropriate to the step + san7890: + - rscadd: Nanotrasen has refurbished the Recreation Deck on DeltaStation. Feel free + to "ooh" and "aah" at all of the new features that have been added. + unit0016: + - qol: Mappers now have access to an autoname helper for airlocks! One less field + to punch in means a few seconds extra YOU can use placing down lizard plushies, + wondering where it all went wrong, and adding lattices on the CentCom Z-level. 2022-03-27: + AdipemDragon: + - imageadd: For those who seek out rarer materials, Runite Bars have a nicer appearance. + ArcaneMusic ft. sprites by Kryson: + - rscadd: Newscasters have been moved over to TGUI, and with them several new features. + - expansion: Newscaster channels can now be given channel descriptions! + - expansion: Messages can now be censored by crew with brig access from any console. + - rscdel: Standalone bounty boards have been replaced with newscasters, as the two + have been merged. + - refactor: Bounty boards and newscaster code have been refactored in order to merge + the two pieces of content. + GoblinBackwards: + - bugfix: Fixed airlocks and windoors not being able to be attacked by melee weapons + in combat mode. + - bugfix: Fixed stray syndicate supply pods not containing any items. Jolly: - bugfix: SnowCabin.dmm had its active turfs rectified. - SkyratBot: - - balance: Sentient Diseases now require a minimum playercount of 25 to activate, - up from 10. - - rscadd: Added command encryption keys to the cargo order console - - bugfix: TGUI and Tooltip windows now work with high-dpi web browsers + LemonInTheDark: + - balance: Airlocks will now autoclose in 8 seconds rather then 15 - bugfix: The latejoin menu will now properly close when you join the game - - bugfix: IceBox had two washing machines on the same tile, as well as a bit brighter - than usual decals. That tile is back to normal. + Maurukas: - bugfix: The engineering console on Icebox is once again connected to the station's grid and can see APC status and available power. - - imageadd: For those who seek out rarer materials, Runite Bars have a nicer appearance. - - bugfix: Fixed airlocks and windoors not being able to be attacked by melee weapons - in combat mode. + OperativeLyn: + - bugfix: IceBox had two washing machines on the same tile, as well as a bit brighter + than usual decals. That tile is back to normal. + Pickle-Coding: - bugfix: Fix tritium fire releasing more radiation than it should. - - rscadd: Nanotrasen 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 - that previously had varedited accesses now use preset access helpers' + Rhials: + - rscadd: Added command encryption keys to the cargo order console + Ryll/Shaps: + - qol: Mystery boxes no longer cut off each other's sound clips when playing their + own + SuperNovaa41: + - bugfix: Fixes nonhuman head of departments showing up as their original species + in security records. + Watermelon914: + - balance: Destroy the Blackbox is now worth 6-9 TC instead of 4 TC + cacogen: + - expansion: Can fire guns and secondary attack (right-click) with TK. Throwing + things with TK now requires throw mode. + - bugfix: You can no longer offer things to yourself, choosing instead to take them + directly + - bugfix: Can no longer headpat mobs without heads + - expansion: Adds screentips for headpatting, hugging and tail pulling - soundadd: Sound effects for attacking bushes, trees, mushrooms and rocks. - code_imp: Minor code improvements in flora.dm - - balance: Airlocks will now autoclose in 8 seconds rather then 15 + dragomagol: + - 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 that previously had varedited accesses now use preset access + helpers + nianjiilical: + - balance: Sentient Diseases now require a minimum playercount of 25 to activate, + up from 10. + san7890: - bugfix: If you were a prisoner on KiloStation and you noticed some abnormally dark rocks, I hope you are pleased to know that they have been brightened up. No compensation is offered. - - bugfix: Fixes nonhuman head of departments showing up as their original species - in security records. - - balance: Destroy the Blackbox is now worth 6-9 TC instead of 4 TC - - bugfix: Fixed stray syndicate supply pods not containing any items. + vincentiusvin: + - spellcheck: made the reaction list on a few machines' ui (compressor, atmos control) + to be newlined. + willox: + - bugfix: TGUI and Tooltip windows now work with high-dpi web browsers 2022-03-28: - Gandalf2k15: - - rscadd: Ports Yogstations central command jobs. - Inari-Whitebear: - - bugfix: Fix pathing issue with Skyrat emergency shuttle causing other emergency - shuttles to not be found - Orion_the_Fox, Halcyon(Sprites): - - rscdel: Armadyne and Lopland have agreed to remove OldPeacekeeper reskins and - some straggling Redsec clothes from Security, after several Uniformity complaints - from CC. - - imageadd: SPLIT THE MASTER UNIFORM FILE TO HAVE A SECURITY SUBTYPE. ONLY SECURITY - UNIFORMS SHOULD BE IN HERE. EXPECT THIS TO EXPAND ONTO OTHER DEPARTMENTS AS - WELL. (TG already does this, its much easier to maintain than one giant file.) - - imagedel: Removed lots of unused Security icons. (Literally, these had no items. - Ingame you'll see no change from this.) - SkyratBot: - - bugfix: Bartenders can throw drinks again, rejoice! + CocaColaTastesGood: - bugfix: Fixes an exploit that allowed players to send unsanitized text to admins. + Fikou: + - rscadd: Right-click with a MOD paint now lets you paint the suit's color! + LemonInTheDark: + - bugfix: Bartenders can throw drinks again, rejoice! + YakumoChen: + - qol: Added a 50 count bamboo stack to base stack types + vincentiusvin: + - bugfix: fixed lavaland syndie base's pipes popping up. 2022-03-29: - ArcaneMusic ft. sprites by Kryson: - - rscadd: 'Newscasters have been moved over to TGUI, and with them several new features. - expansion: Newscaster channels can now be given channel descriptions! expansion: - Messages can now be censored by crew with brig access from any console.' - - rscdel: Standalone bounty boards have been replaced with newscasters, as the two - have been merged. - - refactor: Bounty boards and newscaster code have been refactored in order to merge - the two pieces of content. - Ebin-Halcyon: - - rscadd: Families WW3 reenactment gear have been added to the loadout. (Yuri, Allies, - and Soviet) - - rscadd: Crop top turtlenecks have been supplied to clothesmates as well. - Gandalf2k15: - - code_imp: Some mob spawners have been optimised. - - rscadd: A new(old) game mode! Assault operatives. - GuiltyNeko: - - bugfix: The matter manipulator is now ranged as is intended. - Helios7-1: - - bugfix: Fixes the Dark Medihound borg skin, allowing it to be selected again. - KathrinBailey: - - rscadd: Deltastation prison reverted to its old form, which is significantly better - suited for high population counts. - - rscadd: Deltastation security office reverted to its old form, a big single desk - instead of the weird whatever was. + ArcaneMusic: + - bugfix: You can no longer create money out of thin air using bounty boards. + JohnFulpWillard: + - bugfix: Bots blowing up can now be sorted under Info. + - bugfix: Gunpowder's reaction can now be sorted under Info. + - code_imp: boldnotice messages are now sorted under Info. + Jolly: + - bugfix: Lavaland agents rejoice! Theres no longer a missing tile that leads to + space! ..Wait, what? + RandomGamer123: + - bugfix: The 0.7% charge high capacity power cell (which actually also stored 50% + more charge than a regular high capacity power cell, didn't notice that right?) + in Metastation engineering has been replaced with a regular high capacity power + cell. Ryll/Shaps and MrDoomBringer: - imageadd: Added new bleeding overlays for humans! People who are losing blood will now have overlays displayed on them that show which bodyparts are bleeding, @@ -937,36 +1419,54 @@ for how much blood a slash can lose per tick has been raised slightly. - balance: Grabbing your own bleeding limb to staunch the bleeding is quicker and slows you down less - SkyratBot: - - bugfix: You can no longer create money out of thin air using bounty boards. - - bugfix: You can no longer offer things to yourself, choosing instead to take them - directly - - bugfix: 'Can no longer headpat mobs without heads expansion: Adds screentips for - headpatting, hugging and tail pulling' - - bugfix: fixes a bug that causes podpeople hair to crash the pref menu + Son-of-Space: + - qol: Contractors lost some appliances in kitchen maintenance on MetaStation, BoxStation, + and DeltaStation + SuperNovaa41: + - bugfix: The thunderdome side rooms will now properly reset. + - admin: The thunderdome is now a placeable map template. + TiviPlus: + - refactor: The mech UI(s) now use TGUI + - rscadd: Mechs no longer have RNG chances to completely ignore attacks + - rscadd: Mech armor will now directly add armor instead increasing deflection chance + - rscadd: Mechs now have slots for equipping "power", "utility" and "armor" modules + - rscadd: Mechs now use left and right click to use the left and right weapons respectively + - rscadd: Mech internal damage no longer requires low HP and instead now requires + a minimum damage in an attack to consider it + - rscdel: hidden mech bay has (at least for now) been removed + - rscdel: Some ballistic weapons reloading with energy has been removed so they + have infinite ammo + - rscdel: tesla power module has been removed + - rscdel: Honker no longer has snowflake UI that plays sounds + - bugfix: admin uis now work on mech equipment properly + ZephyrTFA: - balance: Free Golems are now penalized for leaving their natural habitat - - spellcheck: made the reaction list on a few machines' ui (compressor, atmos control) - to be newlined. - - rscadd: Right-click with a MOD paint now lets you paint the suit's color! - - bugfix: charlie station dorms now only has one APC, as god intended + capsaicinz: - bugfix: cleans up some force-feeding code indentation, and adds some headless flavor - - bugfix: Bots blowing up can now be sorted under Info. - - bugfix: Gunpowder's reaction can now be sorted under Info. - - code_imp: boldnotice messages are now sorted under Info. - Tastyfish: - - bugfix: 'On Icebox: Medbay orders can now be opened in Medbay Central, the area - between the lobby and the treatment center.' + - bugfix: removes duplicate dorm airlock on tramstation. + - bugfix: charlie station dorms now only has one APC, as god intended + dragomagol: + - qol: the gulag item reclaimer now requires brig access to use instead of general + security access + - bugfix: The Zeta emergency shuttle's brig now travels with the rest of the shuttle + magatsuchi: + - bugfix: fixes a bug that causes podpeople hair to crash the pref menu 2022-03-30: - Cenrus: - - rscadd: Assault ops can now buy MODsuit modules at their vendor - - bugfix: Fixed assault ops not dispensing extra ammo for their weapons - - rscdel: Removed some useless armament entries - SkyratBot: - - bugfix: Some areas that were once pitch black are no longer - - bugfix: The thunderdome side rooms will now properly reset. - - admin: The thunderdome is now a placeable map template. + Fikou: + - bugfix: you can no longer push ash drake corpses into doors - bugfix: modsuit painting is fixed + FlamingCheese: + - bugfix: Reality has downloaded CS Source which fixed the missing texture of a + poster in departures security checkpoint + LemonInTheDark: + - qol: The beach away mission has a light yellow tint + - bugfix: Some areas that were once pitch black are no longer + - bugfix: I've replaced the pumps in server rooms/slime kill rooms with passive + vents. It's faster ok don't worry about it + Son-of-Space: + - rscadd: IceBox Station has a new Security Department + TemporalOroboros: - balance: Improvements in the smoke powder formula have resulted in a doubling of the maximum possible carry density for the resulting clouds. This brings it to par with the fluorosurfactant formula in this area. @@ -1012,5 +1512,30 @@ - rscadd: Adds in medical smardarts, non-harmful replacements for syringes in syringe guns that can only inject healing chemicals. - rscadd: Adds in Smartdart guns, syringe guns that can only use smartdarts. + san7890: + - bugfix: On IceBoxStation, hopefully all (if not a good chunk) of the cameras have + been moved to no longer be on windows, and on walls instead. +2022-03-31: + ArcaneMusic: + - bugfix: Fixed 2 newscasters that were accidently mapped next to each other on + tram. + Capsandi: + - expansion: The crashed ship ruin has been remapped + ErdinyoBarboza: + - bugfix: Makes cyborg lollipop dispenser use the cyborg (non-omnizine) variant + for consistency. + Kylerace: + - balance: scrubbers now remove small amounts of gas faster than they used to, without + affecting how fast they scrub gases in high concentrations. + Watermelon914: + - admin: Admins can now see the number of players when someone sends an urgent ahelp. + - admin: Added an option to config send non-urgent ahelps to a channel (where there + are no available admins on). + - admin: Added a response that is sent by the server when an ahelp is responded + to in any way by an admin. + timothymtorres: + - bugfix: Fix jumpsuits to drop accessories when destroyed + - bugfix: Fix welders wasting fuel when clicking on tiles + - bugfix: Fix plants to not hurt user while using telekinesis timothymtorres, lewcc: - bugfix: Fix attack messages appearing when using tools on blast doors diff --git a/html/changelogs/archive/2022-04.yml b/html/changelogs/archive/2022-04.yml index c4d303b133a54..ed5ee6655d104 100644 --- a/html/changelogs/archive/2022-04.yml +++ b/html/changelogs/archive/2022-04.yml @@ -1,4 +1,4 @@ -2022-04-02: +2022-04-01: Arkatos: - spellcheck: Fixed several incorrect menu descriptions of some spider variants regarding their poison injection amount. Injection amount menu descriptions @@ -36,6 +36,48 @@ - code_imp: changed some mech FOV cone backend to work better - bugfix: Adds checks for packs on the departmental order console. - admin: revenants harvesting a mob now logs in the revenant's combat log. + - bugfix: removed stray pixel on the CQC manual + CocaColaTastesGood: + - bugfix: Adds checks for packs on the departmental order console. + ErdinyoBarboza: + - bugfix: Adds descriptions to some turfs that missed them. + Fikou: + - bugfix: protector stands no longer remove all their overlays when leaving shield + mode + Ghilker: + - expansion: thanks to the latest discoveries, metallic hydrogen can be installed + inside the thermomachines to allow their use without needing a thermal port + connected to a gas reservoir (a total of 3 metallic h2 sheets are required, + obtain them from the local crystallizer, warranty void if applied to other machines) + Ghommie: + - bugfix: Fixed certain pens breaking painting on a canvas because of their peculiar + colors. + - expansion: 'Added two additional canvas types: 36x24 and 45x27, as well as a large + painting frame meant for them. All three items can be bought from the library + vendor.' + - qol: paintings shown in the "Marlowe Treeby's Art Galaxy" app will now always + have a 1:1 pixel ratio, ergo 23x19, as well as the new canvases, won't appear + stretched in its UI anymore. + - bugfix: Fixed the 24x24 canvas not having a wip overlay (the one that shows up + on canvases with unfinished paintings). + GoblinBackwards: + - bugfix: Fixes slime core removal surgery being impossible to start + Iamgoofball: + - qol: You can now see the plant's health with a plant analyzer. + Imaginos16: + - imageadd: Nanotrasen has once more updated its legendary Central Command Wardrobe, + improving upon its designs even further! + - expansion: 'Nanotrasen has also added a new outfit for Special Ops Officers to + enjoy, instead of a simple leather jacket: The CentCom Officer''s Coat!' + JohnFulpWillard: + - bugfix: Assistant Traitors can now purchase the Ancient Toolbox again. + LemonInTheDark: + - expansion: The library computers have received a graphical and functional upgrade. + Better inventory management, poster printing, bible viewing, and well, TGUI. + - server: Bookcases will generate way more db calls during init then is normal. + If this causes issues please bug me and I'll work out a solution + - bugfix: Library consoles and a few other things will no longer look "on" even + when their power is cut. - rscadd: Expanded heavily on action buttons - rscadd: Adds an action button dropdown that sits just under the normal list in the top left. You can drag new buttons onto it to insert them. Click on it to @@ -67,6 +109,55 @@ 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' + - rscdel: Removed action button locking, and the associated preference. I'm reasonably + sure literally none uses this, but if you do hit me up + - qol: Dragging an action button will now give you an outline of its size around + your cursor + - bugfix: You can no longer cause the screen to expand by putting an action button + on the edge of widescreen, and then resizing to standard. + - refactor: Refactors action and button code significantly. lots of little things. + Melbert: + - admin: Plant mob spawning (Killer Tomatos) are now logged more thoroughly and + in investigate botany now + PetMudstone: + - spellcheck: Voice and chemical analyzers now have more consistent names and spelling. + Spookuni: + - bugfix: Haloperidol has been properly labelled in medical cyborg hyposprays after + several instances of mediborg induced brain damage were found in human patients. + Tastyfish: + - rscadd: Re-added the Hotkeys-Help verb, and linked the Hotkeys menu item to it. + - qol: Move Help menu to the end of the menu bar. + TheBonded, timothymtorres: + - bugfix: Fixed mulebot movement animation to be smoother + TheBoondock: + - bugfix: fixes a runtime with conveyor where right clicking it with any item would + cause a runtime + Timberpoes: + - bugfix: Fixes an issue where reagent logging would incorrectly output "no reagents" + when a reagent transfer had actually happened. + TiviPlus: + - 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: mechs will now show in their tabs equippable equipment as intended + - bugfix: fixed mech air tanks being removable + - qol: Mech ammo names are now less ugly + Wallem: + - balance: Lowered the price of Kheiral Cuffs from 2750 to 2000 points. + cacogen: + - bugfix: Pull tail screentip now works properly + - bugfix: Machine frames and circuit boards no longer call manipulators micro-manipulators + when examined + - code_imp: Improves code in constructable_frame.dm and circuitboard.dm + capsaicinz: + - admin: revenants harvesting a mob now logs in the revenant's combat log. + ivanmixo: + - qol: space dragon can now make it's sprite smaller + san7890: + - bugfix: There is no longer a commented out line in IceBoxStation.dmm, which means + that random parts of the library will no longer go completely missing. Enjoy. + - bugfix: MetaStation's Abandoned Bar no longer has a floating poster just... floating + there. It was weird, alright? - bugfix: Nanotrasen 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 @@ -267,6 +358,257 @@ - bugfix: finishing grenades no longer prints the error message when it shouldn't - bugfix: Fix an exploit where permanent invisibility can be gained from using shadowcloak stacked with other transparency effects. + - rscadd: Parts of MetaStation's Xenobiology Satellite have had some moderate re-arrangement, + ultimately leading into an experience where you don't have to clamber over canisters + to check the camera monitor. + - bugfix: Some weird space turfs south of the Xenobiology Satellite have been banished. + - imageadd: 'A new area turf for the Xenobiology Hallway has been added, and mapped + into the one map that uses it: Meta.' + unit0016: + - bugfix: The brig disposal bin on Tramstation is now actually hooked up. Because + of course it wasn't. + vincentiusvin: + - rscadd: Added an ic atmos reaction guide. Available in your atmos control consoles/monitors, + ntosatmos app, and analyzer. + - code_imp: Some changes to how gas canister descriptions are generated. +2022-04-02: + Ebin-Halcyon: + - imageadd: New and updated maid costume sprites + Rhials: + - spellcheck: Cargo crate naming has been made slightly more consistent. Rejoice. + - bugfix: When an airlock that is being hacked receives plasteel reinforcement, + it will no longer keep the hacking UI open and useable. + TheSmallBlue: + - spellcheck: There are no longer two ID Getter Components + TiviPlus: + - code_imp: changed some mech FOV cone backend to work better + - bugfix: fixed mmis seeing the wrong mech UI + san7890: + - rscadd: A new plushie has appeared on TramStation. Seek it out if you dare. + timothymtorres: + - bugfix: Fix shutters contextual screentips to not display as open with LMB. +2022-04-03: + Kapu1178: + - balance: Humans aren't spaceproof anymore + - rscadd: Limbgrower limbs are now a sickly green + - refactor: Digitigrade legs should now behave consistently. + - refactor: Limbs will no longer update appearance as owner is transferred, allowing + for multi-species frankensteins + - bugfix: CHANGELING TRANSFORM FUNCTIONS PROPERLY + - rscdel: Synths and synth-related mechanics (Synth fugative) + RandomGamer123: + - bugfix: Stops find_safe_turf, used by salvation signposts in deep space and the + super secret room, from teleporting people into the windows of the toxins test + area and killing them if they didn't have spaceproof equipment. + Rhials: + - bugfix: Fixed up the wiring in Icebox Xenobiology's shutter buttons. The two buttons + no longer close the same shutters, and now close their intended targets. + Zonespace27: + - bugfix: Standard HoS headset no longer protects against loud sounds. + dragomagol: + - admin: singulo and supermatter logging have been combined into engine logging! + san7890: + - bugfix: You know that shower room in the northeastern portion of IceBox Station? + We fixed the, erm, posters, there. + timothymtorres: + - bugfix: Fix Cryo areas to have CO2 filtering from the gas loops. +2022-04-04: + Ebb-Real: + - expansion: Bandanas are now craftable from 2 pieces of cloth. + - expansion: Adds the striped bandana and adds various preset colored bandanas to + clothing vendors and lockers. + - expansion: You can now dye bandanas with washing machines and customize bandanas + from inside the clothesmate. + - bugfix: You can no longer reset all the values of a bandana just by adjusting + it, this included integrity. + - imageadd: Adds bandana GAGS sprites. + - imagedel: Removes old non GAGS sprites. + - refactor: Refractors bandana neckerchief code. + Fikou: + - rscadd: Adds the Navigate verb, creates a holographic path to an area of your + choosing. + - rscdel: Removed wayfinding pinpointers. + Ghommie: + - bugfix: Fixed large persistent paintings being shown off the wall + Wallem: + - imageadd: Resprites the mass driver + azizonkg: + - bugfix: fixed typo in filename that cause build fail + wesoda25: + - admin: admin messages now appear every time you connect until you click a link + confirming that you read them +2022-04-05: + JohnFulpWillard: + - bugfix: DNA Vault's DNA scanners no longer accept Plasmamen, Skeleton, and Golems + as DNA. + - expansion: 'A new Traitor Final objective has been added: Harvest the DNA of a + Space Carp, and use it to turn yourself into a Space Dragon!' +2022-04-06: + AdipemDragon: + - imageadd: Specialized medkits have some new distinct symbols to aid in distinguishing + them on the spot. + ArcaneDefence: + - qol: Moffins are now found in the mothic food category instead of the pastry category. + Cheshify: + - bugfix: The detective now has the correct consoles on icebox + ErdinyoBarboza: + - spellcheck: Sulphuric Acid is now properly named Sulfuric Acid. + Fikou: + - bugfix: fixes navigation ui for pais and borgs + Melbert: + - expansion: Metastation's Drone Room is now its own area, with its APC and Air + Alarm, instead of sharing an area with the maintenance. It has otherwise remained + largely unchanged, though some extra wall amenities were afforded to it. + - admin: Adds "Open VV" to traitor panel antags, which opens that antag's vv panel. + - admin: '"Mark as in/completed" by objectives in the traitor panel now changes + color based on whether the objective is determined to be "complete", instead + of whether an admin has marked it to be complete. For some objectives, it might + not update color (only text) when an admin marks it as completed - this means + the objective disregards whether an admin has marked it as complete.' + SmArtKar: + - spellcheck: Drop pod debris is no longer capitalised + Son-of-Space: + - bugfix: Labor shuttle is useable again on Meta, Box, Tram, and Runtime. + - bugfix: fixed a shutter name on IceBox + dragomagol: + - bugfix: paper logs once again include the paper's contents + - bugfix: Airlock cycle links work now! + san7890: + - bugfix: Nanotrasen dug around on TramStation, DeltaStation, and KiloStation and + found that grilles were covering a few gas flow meters in each of their atmospherics + divisions. This should now be fully rectified. + - rscadd: TramStation's Supply Division has had a redrawing in areas on both the + upper and lower decks. + - imageadd: New area turfs for the Station-Side Mining Dock have been added to our + catalogue. We hope that you all eagerly anticipate this new collection as it's + quite vogue for Spring fashion. + - balance: IceBoxStation's Public Mining Storage got shuffled around a bit. Nanotrasen + realized they were spending too much on reinforced walls, and decided to re-opt + for normal walls instead. To accomodate for this downturn in reinforced wallage, + another layer of protection was added to the southern wall of the AI's Upload. + - bugfix: The Public Mining Storage now has an APC. Whoopsie. + - bugfix: On the mapping end, it's now easier than ever to tell whatever the fuck + "Mining" is (it goes for so many things these days it's ridiculous) from "Mining + Storage". Very cool. + - bugfix: On Tramstation, the external access airlock to the Supermatter's cooling + loop uses a different form of lighting that functions in the outside setting. + vincentiusvin: + - bugfix: fixed breathedeep catridges not working +2022-04-07: + Fikou: + - bugfix: you can no longer stuff infinite ais in modsuits + Ghilker: + - bugfix: fix machinery being clickable from behind a directional window + JohnFulpWillard: + - admin: Individual material crafting is now logged in crafting.html + - bugfix: Food processors now give more processed food, depending on its matter + bin. + Kapu1178: + - bugfix: Husks render again + - bugfix: Lizards, Moths, and Podpeople character creation icons fixed + LemonInTheDark: + - bugfix: Machine interaction works again, get trolled + Pickle-Coding: + - bugfix: Fixes cryocells kicking you out early. + Son-of-Space: + - bugfix: Engineers have reconnected the disposals loop on DeltaStation + TiviPlus: + - qol: Mechs will now immediately cancel progress bars instead of waiting until + till the end to tell yyou you moved + carshalash: + - qol: Adds a recipe to make paper cups and triples ice cream vat capacity. + dragomagol: + - admin: Launchpad investigate logs have been moved to game log + kawoppi: + - expansion: Frogs can now be picked up. You can fit them in your pockets too! + - expansion: Frogs can now be put on your head. + - imageadd: Added sprites for (rare) frogs placed on heads + san7890: + - imageadd: On the mapping end, donut boxes now look like... donut boxes! They used + to look like flat, white rectangles. Now they don't! Great! + - code_imp: CI will now lint for commented-out lines of code in map files. This + is very good. + timothymtorres: + - bugfix: Fix reinforced girders to only use plasteel for construction + tnekohue: + - bugfix: Fixed a bug with the RCD silo link upgrade when its connected and turned + off. + tralezab: + - rscadd: Beds, Sofas, Slimes, And Jellypeople now provide a soft landing + vincentiusvin: + - balance: made runtimestation more powerful. +2022-04-08: + B4CKU: + - bugfix: finishing grenades no longer prints the error message when it shouldn't + Ghilker: + - bugfix: crystallizer max quality can now be reached regardless of recipe total + moles amount + JohnFulpWillard: + - bugfix: Robocontrol on computers now work again. + - refactor: Janitor's custodial PDA cartridge has been replaced with a Custodial + locator tablet app. + Jolly: + - bugfix: TramStations AI sat teleporter now has a button to control the shutters. + Please stop banging on them to be let in. + - bugfix: A floating poster in Ice Box's service hall was properly contained. + - bugfix: Old Stations Charlie & Delta storage rooms APCs now start with 0 charge, + your immersion has been restored. + LordVollkorn: + - bugfix: Health sensors inside of chemical grenades will now work as intended and + the process is almost impossible to screw up. + Riggle: + - bugfix: Revenant logs are no longer wrapped in a span + SmArtKar: + - bugfix: Added a missing air alarm in Tramstation's cargo office + Son-of-Space: + - bugfix: Mapping helpers have been added for access reqs in security on DeltaStation + - bugfix: Access requirements in security are now standardized on DeltaStation + TheBoondock: + - bugfix: fixes rev runtime when a headrev body is destroyed + san7890: + - 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 Ash Walker's Base on Lavaland decided to stop putting tiles under + solid rock. + - bugfix: The Syndicate Operatives positioned on Lavaland are no longer able to + violate the ONE THING they were told to not perform (leave the base). + - bugfix: 'On the mapping end: cyborg, monkey, moth, and plasmamen limbs will no + longer show up as absolutely nothing.' + - bugfix: 'On Meta, Delta, and Kilo: Nanotrasen has decided to shuffle around those + brand-new newscasters to ensure the AIs could actually see the buttons they + want to hit.' + - balance: On IceBoxStation, Nanotrasen finally decided to reinforce the western + walls on the Captain's Room and the Teleporter Room. + - rscadd: A conformational change in reality has caused every single bed (when applicable) + to be tastefully rotated in the opposite direction. + thgvr: + - bugfix: You should no longer fall through a specific spot in space in Tramstation's + upper level. + timothymtorres: + - qol: Girder construction now uses balloon alerts + - bugfix: Fix an exploit where permanent invisibility can be gained from using shadowcloak + stacked with other transparency effects. +2022-04-09: + AnturK: + - bugfix: Spacemen no longer can sculpt light effects from stone + Ebb-Real: + - expansion: Adds the science night vision goggles, they scan chems! + - expansion: Science sunglasses now have a research scanner installed. + JohnFulpWillard: + - bugfix: Kilostation's Brig, Medbay, and Chapel's pipes are all connected to the + station's distro and waste. + Melbert: + - bugfix: Fixes a runtime with bounty cubes on Destroy + TheBoondock: + - bugfix: layering issue with venus fly trap and spacevine + cacogen: + - expansion: Armour tags on clothing tell you when an item blocks pepperspray or + facehuggers + capsaicinz: + - bugfix: you can no longer create singularities by using soultap while in rod form + - balance: wizards can no longer cast spells while in rod form + ninjanomnom: - balance: Stationary gas tanks now cost 12 material for the plating instead of 20 - balance: The base level of stationary gas tank pressure limits has been brought @@ -350,6 +692,66 @@ - bugfix: HEV no longer allows any helmet type. - bugfix: HEV no longer secures anything but oxygen tanks to your suit storage. SkyratBot: + robbertapir: + - 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. + san7890: + - bugfix: KiloStation's Botany no longer has a bit of it defined as the defunct + "Central" Maintenance. + thgvr: + - bugfix: Digitigrade legs should now display correctly with certain clothing options. + unit0016: + - 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 + icebox again. Yeah. I know. +2022-04-10: + ArcaneMusic: + - qol: All ID cards have been given a basic, standalone bank account. Not just for + crew, new and old, but also for IDs fresh out of the box. + - rscdel: The accounting machine has been retired from station use, as accounts + come with a default bank account now. + Ghilker: + - rscadd: reworked turbine to be a 3x1 machine, with flow and pressure based calculations. + A paper explaining how to use will spawn when building it and on the roundstart + one. + - bugfix: fixes an issue with the old turbine where you could generate infinite + power with cold gases + - balance: SM consumes items and gain power based on their size + Ghommie: + - bugfix: The screentip context no longer lies about what happens when you left + click another carbon mob with combat mode on. + KazooBard: + - balance: Regular mansus grasp now inflicts cultslur on the target for 4 seconds. + - balance: Increased void mark and void grasp silence duration from 8 seconds each + to 10 seconds each. + Melbert: + - imageadd: Cigars have sprites when held in hand + Mothblocks: + - balance: Free golems can no longer use shuttle consoles, other than to go home. + OneAsianTortoise: + - bugfix: removes the crate in window in lavaland base + Rhials: + - bugfix: The note in the Sloth ruin is fixed! Head on down to Lavaland and reap + the rewards! + SmArtKar: + - expansion: Evangelion jumpsuits have been added to robotics vendor's contraband + section + - imageadd: Ports new evangelion jumpsuit sprites + Son-of-Space: + - bugfix: TramStation atmos is more effectively separated into areas + - qol: It is easier to isolate and fix atmos issues in the Tramstation tunnel + TheBonded: + - bugfix: You can no longer create infinite snow with a crowbar + TiviPlus: + - bugfix: mech armor modules give armor properly now + - bugfix: Fix being unable to reload nukie missiles + ZephyrTFA: + - bugfix: SSUs no longer use power when doing nothing + thgvr: + - bugfix: Deltastation should once more have wrestling masks and athletic shorts. + timothymtorres: - refactor: Refactor antimagic component to be more robust. - soundadd: Add different sound effects for when magic is blocked - bugfix: Equipping or dropping antimagic items now properly updates the magic buttons @@ -360,6 +762,9 @@ - bugfix: Fire breath is no longer blocked by antimagic - bugfix: 'Spellcards are now blocked by antimagic qol: Add antimagic chat notification and animation effects. Mobs will now glow when they successfully block magic.' + - bugfix: Spellcards are now blocked by antimagic + - qol: Add antimagic chat notification and animation effects. Mobs will now glow + when they successfully block magic. - balance: Foilhats prevent someone from casting mind magic (telepathy, mindswap, etc.) - balance: Bibles, ritual totems, nullrods, holymelons, and `TRAIT_HOLY` prevent @@ -438,6 +843,66 @@ - spellcheck: fixed an error in the chilling black extract's description. - code_imp: the 'random' subtype of golems no longer exists, and is now effectively replaced by picking from all subtypes of the golem species. + - bugfix: Fix moonicorns not falling through openspace properly. +2022-04-11: + Ebb-Real: + - bugfix: You can no longer fly by spamming ollie onto an empty space and not moving. + JohnFulpWillard: + - qol: Monkeys can now wear headsets. + - balance: Monkeys can now wear glasses. + - refactor: Drone PDA apps have been refactored and is now part of Botkeeper, such + as granting access to dangerous machinery and sending pings. + - refactor: The Curators newscaster PDA app has been moved into a new Newscaster + tablet app, with a full new UI. + - rscdel: The Detomatix cartridge's ability to open the nuclear operative pod doors + has been removed. + Son-of-Space: + - bugfix: NT Risk Audits have replaced fraudulent posters calling the ice moon environment + "space." + Tastyfish: + - bugfix: Fire alarms no longer magically emit light when they lose power. + TheBoondock: + - refactor: Zauker now uses reagent to perform its effects on breath + ZephyrTFA: + - bugfix: Golems can now exist in the rooms they themselves create, sorry about + that. + Zytolg: + - bugfix: relocates the SMES terminal to not be in a wall in the lizard gas space + ruin + cacogen: + - rscdel: Navigate verb uses landmarks now, which means that underfloor wayfinding + beacons (which could be used to change the names of destinations) are gone + - qol: Adds Nearest Way Up and Nearest Way Down to the navigate list, which point + to the nearest ladder or staircase up or down + - bugfix: Fixes runtime with navigation verb paths where deleted paths were still + attempting to animate + san7890: + - bugfix: On DeltaStation, Nanotrasen 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. + techno0: + - bugfix: Debug Glasses have SM protection + tralezab: + - expansion: New Festival God sect! Sooth or serrate your friends and foes with + the beat. + unit0016: + - expansion: The syndicate infiltrator has been tuned up, coming with a fresh coat + of paint, insurance, and the new shuttle smell. Sadly, no complimentary taco + in the glovebox. +2022-04-12: + Fikou: + - expansion: Maintenance has a new set of special glasses... + Fikou, Azlan, PositiveEntropy, Capsaicin: + - imageadd: new sprites for the syndicate modsuit (and honkerative) + Ghilker: + - bugfix: fixes exploit where you could duplicate gases with valves + - bugfix: thermal conductivity can be properly set so the turbine turfs will not + leak heat + GoblinBackwards: + - bugfix: Fixes brimdemon lasers never disappearing if the demon was deleted while + firing. + MacBlaze1: + - qol: firelocks now automatically reset upon the air temperature being returned + to normal thresholds - bugfix: fire alarms now automatically update on atmos monitoring programs/consoles to show their real status. No more false positives! - code_imp: air alarms now have a variable referencing their area that is used @@ -605,102 +1070,80 @@ - bugfix: Wizard immovable rod no longer deletes itself when travelling betwen z-levels - bugfix: Diggable turfs no longer get dug up by any item used on them - bugfix: easter baskets can now hold easter eggs - UnderARock: - - bugfix: Fixes spraytan not tanning skin color. - Wallem: - - imageadd: Updates airlock cycling & mass driver buttons. - mcmeiler: - - bugfix: Xenobiological Slime Hybrid sprites are back to normal. - - bugfix: Limbs can now be see-through again. - tf-4: - - bugfix: Headshots can now properly be removed if you so wish. -2022-04-18: - GoldenAlpharex: - - code_imp: Added complete documentation and extra configurability to looping sounds, - allowing them to be stopped by walls, to ignore pressure or to be unaffected - by reverb! - Melbert: - - bugfix: Healium healing should be a little more responsive, now - - bugfix: Maintenance will now have wall engravings - RatFromTheJungle: - - bugfix: fixes the CMG multipak being in goodies, because goodies are for singles. - SkyratBot: - - bugfix: modsuits now retract if summoned through summon items or some other hijinx - - rscadd: Added 3 new Polish foods - - imageadd: Added sprites for the 3 new foods - - balance: the mining gas mask no longer protects against pepper spray - - bugfix: Fixed the Make AI button in admin player panel killing the client of whoever - it was used on. - - bugfix: The Russian revolver now works again - - bugfix: Corrected an error in the spicy donk pocket recipe which would permit - infinite donk pocket creation. - - balance: atmos holofans are now fireproof - - imageadd: Xenomorph maids have gotten a new shipment of clothing - - imageadd: Adds better implant icon sprites - - imagedel: Removes crooked implant icon sprites - - bugfix: Ripley MK2 mechs no longer have two cargo utility equipment items. - - bugfix: The Volaju hairstyle is now symmetrical on both facing sides - SnoopCooper#7310, Ghilker (for some minor parts): - - imageadd: better turbine sprites - Zonespace27: - - bugfix: M-90Gl's grenade launcher no longer has a safety - - bugfix: Conveyor sorter exploit fixed - cat348 for sprites, TheBonded for not being gitbanned: - - imageadd: Disposals Junctions have visible arrows -2022-04-19: + TheSmallBlue: + - expansion: The Hygienebot can now be colored with a spraycan. + - code_imp: Added a flag that allows mobs to be colored with the spraycan. + capsaicinz: + - spellcheck: fixed an error in the chilling black extract's description. + - code_imp: the 'random' subtype of golems no longer exists, and is now effectively + replaced by picking from all subtypes of the golem species. + timothymtorres: + - bugfix: Fix girder construction runtimes +2022-04-13: + Iamgoofball: + - server: Adds Ukraine's Independence Day as a holiday, since the child attacking + our hosting requested goofball PRs. + necromanceranne: + - bugfix: Plasmamen no longer have a stray white pixel. +2022-04-14: + Ghommie: + - bugfix: Fixed supply pods not being displayed below their contents when opened + or the rubbles effect caused by the impact. + GoblinBackwards: + - bugfix: Fixes facial hair using main hair colour instead of facial hair colour + Rhials: + - bugfix: Cleaning strange objects no longer leave behind empty grenade casings. + No littering! + SmArtKar: + - bugfix: Monkeys now can interact with misc(environmental) turfs. Also removed + two unused broken turf types. + - bugfix: You can no longer dupe ants(or any other chemicals) as a janiborg + SmoSmoSmoSmok: + - bugfix: Ghosts can now correctly jump to C4's planted on walls/floors when they + get the notification + Tastyfish: + - imageadd: Wrapped parcels now have an overlay when tagged with a destination. + - refactor: Refactored wrapped parcels to have a common base type. + san7890: + - bugfix: After a few mishaps, Nanotrasen fixed a few small area definition errors + on MetaStation. + unv-annihilator: + - bugfix: held mice are no longer edible by moths +2022-04-15: + ArcaneMusic: + - soundadd: A new round-end sound is in rotation. Fikou, EOBGames: - rscadd: Redesign of Hilbert Research Facility - IgiariValkyr: - - rscadd: Added Donator Items for ultimarifox - Jolly: - - bugfix: The space turf in The Derelict should no longer render as a darkened space. - - bugfix: The Derelicts main AI chamber SMES power cables no longer run through - walls. However, as a trade off, its no longer wired up round start. - SkyratBot: - - bugfix: Fixed traitors being able to duplicate their TC - - bugfix: Statues can now once again be wrenched. - - bugfix: After two failed attempts at rectifying the issue, illegal tech is once - again unlockable. - - bugfix: fixes a stray pixel in library.dmi - - bugfix: Our finest chefs have further refined the art of cookery so grilling random - items that have been deep fried will no longer create grill marks on weird lettering - above the dish. - - bugfix: Learning about lavaland bone architecture no longer causes the "Tribal" - tab to undergo mitosis. - - rscdel: The on human examine species readout has been removed + Ghilker: + - qol: mixers now have better indicators for nodes + JohnFulpWillard: - bugfix: Changeling HUDs now properly carry over through bodies. - code_imp: Non carbon Changelings now respectively regenerate/lose/spend their chems. - - bugfix: slimepeople's state will no longer be listed as "error" in the "swap body" - menu if their body is in crit - - bugfix: The minor dark blue luminescent ability now heals you properly instead - of killing you. - - bugfix: The dark blue burning extract now injects you with regenerative jelly - instead of useless cryoxadone, making it not (as) deadly for slimepeople. - Vladoricious: - - bugfix: The Paranormal Response team has successfully defeated the demon that - was putting medicines in food from nowhere. - - bugfix: The food processor no longer strips chemicals from the things you put - inside. Finally, meth in my carrot fries. - timothymtorres, TheBonded: - - code_imp: Improved nightvision code -2022-04-20: - Cenrus: - - bugfix: fixed multiple active turf errors - Deek-Za: - - bugfix: Robotic race heads are robotic again. - Ebin-Halcyon: - - bugfix: Teshari's berets no longer float off their heads - ErdinyoBarboza: - - bugfix: TramStation is now Skyrat Compatible! - - bugfix: Re-adds missing Department Guard Lockers to MetaStation - - bugfix: Re-expands the MetaStation Prison - - bugfix: Re-adds the secondary detective locker to MetaStation - - bugfix: Re-adds bouncer spawns to MetaStation - - bugfix: Re-adds missing Department Guard Lockers to DeltaStation - - bugfix: Re-adds the DeltaStation Prison - - bugfix: Re-adds the secondary detective locker to DeltaStation - - bugfix: Re-adds bouncer spawns to DeltaStation + - bugfix: Grilling food now makes said food, grilled. + LemonInTheDark: + - rscdel: The on human examine species readout has been removed + OneAsianTortoise: + - qol: you can take out PDA/ID from trimmer with right click + SmArtKar: + - bugfix: Water slime cookie no longer tastes like /datum/reagent/water + UnderARock: + - bugfix: Fixes spraytan not tanning skin color. + Wallem: + - imageadd: Updates airlock cycling & mass driver buttons. + apynnonen: + - qol: Screentips are no longer hidden by action buttons. + dragomagol: + - bugfix: traitor logging has its own config flag + san7890: + - bugfix: Nanotrasen will now stop placing reinforced window spawners right on top + of snow at IceBox Departures. +2022-04-16: + ATHATH: + - bugfix: Washing someone else's mouth out with soap no longer washes YOUR mouth + out with soap instead. + Fikou: + - bugfix: fixes access on the hilberts hotel vault door Fikou, Smartkar for sprites: - balance: the MODsuit clamp can no longer hold crates with human or larger sized mobs @@ -745,6 +1188,495 @@ - balance: STG damage 40 -> 32 - spellcheck: Suppressor no longer mentions the syndicate 2022-04-27: + Ghilker: + - expansion: freon burn reaction now produces coldspots and cold cyan fires + GoblinBackwards: + - bugfix: Wizard immovable rod no longer deletes itself when travelling betwen z-levels + - bugfix: Diggable turfs no longer get dug up by any item used on them + JohnFulpWillard: + - bugfix: Brains from HARS victims in a new HARS body will not be revivable anymore. + Melbert: + - expansion: People who survive the heretic realm now have a unique "slurring" mode, + instead of borrowing regular cult slurring + - refactor: Stuttering, Derpspeech, Slurring and Cult Slurring and handled by a + status effect now instead of variables on mobs + - admin: You can now directly give anyone any of the above mentioned speech impediments + directly via an option in the VV dropdown + Y0SH1M4S73R: + - bugfix: The debug industrial lift usable by admins for testing tram behavior has + been fixed, and can now be moved again. + apynnonen: + - bugfix: Bluespace golems can no longer spam teleport + capsaicinz: + - bugfix: metal foam now blocks you from falling down a z-level if it's below you + carshalash: + - expansion: Expands pastry output. + necromanceranne: + - bugfix: Gives the pheromone receptor power an icon. +2022-04-17: + Cheshify: + - rscadd: Remaps the gluttony ruin! + - rscdel: Remove the free antag syringe from the gluttony ruin. + - rscadd: Remapped the Pride's Mirror ruin + Fikou: + - balance: the mining gas mask no longer protects against pepper spray + Ghilker: + - bugfix: turbines don't leak heat. Properly now + GoblinBackwards: + - expansion: Gloves of the north star's effect is now triggered when slapping people + Onule: + - imageadd: Resprited all slimes and slime cores + - imagedel: Removed unused slime and slime core icons + PositiveEntropy: + - imageadd: Resprites the soft caps! + RandomGamer123: + - bugfix: Cyborgs can no longer unbolt the door to the execution chamber on Kilostation. + Zytolg: + - qol: Xenosat Touchups. Employees may now monitor hazardous life forms at a new + and conveniently located desk. + - bugfix: The Xenosat should now feature 0 Diagonal Walls, once again becoming a + symmetrical Pill shape. + carshalash: + - bugfix: Uncle Pete remembered to order new rollerskates for his rollerdome. 30 + Skates will now be stocked for rent on his shuttle. + san7890: + - 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: Nanotrasen has tied down a few unruly lattices on TramStation. It's amazing + how they didn't fly off in orbit. + - rscadd: The KiloStation Commissary (and the rooms that border it) have had their + items be shuffled around a bit. + - rscadd: Nanotrasen 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: On KiloStation, Nanotrasen will no longer install screens in the space + compartment near the bridge. + - bugfix: On MetaStation, Nanotrasen will no longer screw a fire extinguisher right + through the screen of a newscaster. + timothymtorres: + - qol: Add colored department posters to cargo delivery room in Meta to help identify + delivery chutes. + wesoda25: + - bugfix: easter baskets can now hold easter eggs +2022-04-18: + Fikou: + - qol: modsuit locks are a bit more clear, nukie/centcom/prototype suits start with + them + - bugfix: modsuits now retract if summoned through summon items or some other hijinx + GoldenAlpharex: + - qol: Telecomms and the gravity generator are no longer ear-deafening when you + don't have a direct line of sight with them, meaning that you can now peacefully + build things in maintenance around them, without having to turn off the sound + of your game. + - code_imp: Added complete documentation and extra configurability to looping sounds, + allowing them to be stopped by walls, to ignore pressure or to be unaffected + by reverb! + Melbert: + - bugfix: Healium healing should be a little more responsive, now + - bugfix: Maintenance will now have wall engravings + MidoriWroth: + - rscadd: Added 3 new Polish foods + - imageadd: Added sprites for the 3 new foods + OrionTheFox: + - bugfix: The Volaju hairstyle is now symmetrical on both facing sides + SnoopCooper#7310, Ghilker (for some minor parts): + - imageadd: better turbine sprites + cat348 for sprites, TheBonded for not being gitbanned: + - imageadd: Disposals Junctions have visible arrows + iprice: + - bugfix: Corrected an error in the spicy donk pocket recipe which would permit + infinite donk pocket creation. + robbertapir: + - bugfix: The Russian revolver now works again + vincentiusvin: + - balance: atmos holofans are now fireproof + zxaber: + - bugfix: Ripley MK2 mechs no longer have two cargo utility equipment items. +2022-04-19: + ArcaneDefence: + - bugfix: Our finest chefs have further refined the art of cookery so grilling random + items that have been deep fried will no longer create grill marks on weird lettering + above the dish. + B4CKU: + - bugfix: slimepeople's state will no longer be listed as "error" in the "swap body" + menu if their body is in crit + Fikou: + - expansion: Falling on punji sticks impales you. + Ghilker: + - qol: Adds a button to the thermomachine to dump residual gases from the main port + into the waste port + - expansion: supermatter delamination now spawns anomalies across the station, both + instantly and overtime + Ghommie: + - bugfix: Removed a fire extinguisher cabinet that was overlapping a large painting + frame on Delta. Moved a newscaster that was also overlapping the large painting + frame in the curator's backroom two tiles down on Meta. + JohnFulpWillard: + - qol: Departmental ID trimmer/PDA painters have been added to head of staff offices, + making it way easier to job change someone into your department. + Quill-Weave: + - bugfix: fixes a stray pixel in library.dmi + RandomGamer123: + - bugfix: The minor dark blue luminescent ability now heals you properly instead + of killing you. + - bugfix: The dark blue burning extract now injects you with regenerative jelly + instead of useless cryoxadone, making it not (as) deadly for slimepeople. + Spessman500: + - bugfix: fixed beepsky and ed209s not patroling + Vladoricious: + - bugfix: The Paranormal Response team has successfully defeated the demon that + was putting medicines in food from nowhere. + - bugfix: The food processor no longer strips chemicals from the things you put + inside. Finally, meth in my carrot fries. + Watermelon914: + - bugfix: Fixed traitors being able to duplicate their TC + Y0SH1M4S73R: + - bugfix: After two failed attempts at rectifying the issue, illegal tech is once + again unlockable. + Zytolg: + - rscadd: Firebase Balthazor has received much needed upgrades. Operatives now have + an adequate workspace for their radioactive activities. + - rscadd: The Syndicate Uplink has received Special Authorization Cards for use + by authorized personnel. + - rscdel: These expansions came at the cost of the old Nukeops Base. + - qol: Nukeops get a bigger and better looking base. Escapees on hijacked shuttles + may not be as lucky... + - code_imp: Added keycards and keycard_doors for use in the Nukeops Base. + - code_imp: Moves /modules/ruins into /modules/mapfluff/ruins and creates /modules/mapfluff/centcom + robbertapir: + - bugfix: Learning about lavaland bone architecture no longer causes the "Tribal" + tab to undergo mitosis. + san7890: + - bugfix: On IceBoxStation, to the northeastern airlock (in relation to the bar), + Nanotrasen will no longer paint the word "Caution" over text that says "STAND + CLEAR". + - bugfix: In MetaStation's Brig, Nanotrasen will no longer install Camera Monitors + on windows. They also removed an excess newscaster embedded within a wall. + tf-4: + - bugfix: Statues can now once again be wrenched. + timothymtorres: + - qol: Change AI upload lawsets to be randomized + - code_imp: Reorganize AI lawset code and remove deprecated malfunction code + timothymtorres, TheBonded: + - code_imp: Improved nightvision code +2022-04-20: + Fikou: + - bugfix: ebows no longer inherit not needing a gun permit from pkas + TheBonded: + - expansion: Laserpointer circuit modules now available. they had to be toned down + for circuit implementation, so dont expect them to do anything other than shine + light. + azizonkg: + - bugfix: renamed suffix for tgui-polyfill from bundle.js to min.js to prevent CBT + failing after target 'clean' + magatsuchi: + - rscdel: Removes the old PDA code, as well as references to it. (mostly) + - refactor: Thinktronic Systems has retired the elegantly aged PDA system, and is + now (forcefully) pushing its new patented job disks and SpaceMessenger app! + Available on your round-start tablet. + robbertapir: + - spellcheck: Replaced all occurrences of "collosal" with "colossal" + stylemistake: + - refactor: Ping system of tgui-panel has been reworked, which fixes things mentioned + below. + - bugfix: AFK players now get properly detected and kicked + - bugfix: Automatic reconnect should now work 100% of the time + - bugfix: Manual reconnect should now work 100% of the time + timothymtorres: + - qol: Fix nearspace areas for Meta + timothymtorres, TheBonded: + - code_imp: Library items have been refactored to be separate files. + vincentiusvin: + - bugfix: fixed icebox perma gym camera not working + - expansion: Remaps delta's ordnance +2022-04-21: + FernandoJ8: + - bugfix: Allergies no longer continue triggering and producing histamine while + the subject is dead + Fikou: + - qol: runtimestation should load faster + Ghilker: + - balance: machines now consume more power all around. Baseline 100 W idle and 1000 + W active + - balance: machines with parts will consume more power depending on the part and + on the part tier + - balance: 'Notice: The base SM with SMES properly configured is enough for the + station when all machines are at tier 1. With few upgrades that don''t touch + the base cooling loop it can carry most of the rounds.' + GoblinBackwards: + - bugfix: Moved the shortcut to eject beakers from most chem machines to right click + for consistency. + - bugfix: Allows silicons to use the right click shortcuts to eject beakers. + - qol: Allows borgs to eject beakers with right click regardless of range. + Mothblocks: + - qol: The reconnect button in tgchat will now reopen the game. + Son-of-Space: + - bugfix: AI coverage over the mech bay on TramStation has been added. + TheBoondock: + - bugfix: fixes bluespace vendor tanks being incompatible with suit storage + Y0SH1M4S73R: + - bugfix: Fixed several href exploits with the bluespace gas vendor, including one + allowing it to produce infinite tanks. + Zytolg: + - bugfix: The Kilostation CMO office has received a new desk, and a modern layout + to replace the cluttered shutter control interface. + magatsuchi: + - bugfix: fixed the ringtone popup text + - bugfix: actually makes the flashlight action button work, and fixes silicon/clown/mime + names showing up properly on tablets/messenger + shizcalev: + - bugfix: re-fixed patrolling bots not properly hunting targets. + tf-4: + - bugfix: Thermomachines will no longer continue to consume metal hydrogen once + upgraded, as well as giving feedback in chat. + thgvr: + - bugfix: Kilostation's AI upload once again has an APC + zxaber: + - balance: The Mecha Extinguisher equipment is now classified as utility. + - balance: The Mecha Extinguisher now puts out fires in a 3x3 square (centered on + the mech). However, it also only has five uses now. Save it for emergencies! +2022-04-22: + ArcaneDefence: + - bugfix: Processing foods with a knife or rolling pin will require a table or tray + again. + B4CKU: + - bugfix: fixed a bug with Vim overlays + - qol: attempting to enter Vim while not a small creature now throws a balloon alert + - qol: Vim can now be assembled using the crafting menu + - expansion: Vim can now be used as a circuit shell + - balance: small creatures can now pilot Vim + Bondismyname but I wish it wasnt: + - qol: Circuit Sound Synthesizers have a few more options of sounds they can play + FernandoJ8: + - bugfix: fixes runtime caused by a newscaster finding no user bank account when + trying to create a channel + Fikou, Anturk: + - bugfix: ghost alerts now resize to 32x32 if larger + Jolly: + - bugfix: Crew no longer can spy on the prisoners on Meta Station with a floating + camera console. Wardens, please pay attention next time. + LordVollkorn: + - bugfix: The chemical press will now only dispense stored pills/patches/bottles + while wrenched to the floor. This means you won't leave a trail of pills behind + you anymore when dragging your chemical press to another location. + - bugfix: Plumbing machinery can now be rotated via ALT-click when there is no power. + - bugfix: Plumbing machinery is now programmable without power. It won't produce + anything without power of course, but at least you can set it up while waiting + for power to come back. + Melbert: + - bugfix: Heretic's Madness Mask applies stamina damage to people when it should + - bugfix: Fixes two instances where mob references were passed into source status + effects improperly + - code_imp: Updated status effect code to modern style guidelines. + - refactor: Drugginess is now a status effect. Now any living mob can be high and + speak beach-bum instead of just carbons and humanoids. Drug effects should also + be more consistently removed on aheal / in rare cases. + - rscadd: Adds a new heretic path, the the Blade Path + - expansion: Heretic sidepaths got tweaked a bit. Blood siphon is now between raw + ritual and void phase. Cleave is now between Lonely Ritual and Void pull. Rusted + Ritual is now between Entropic Plume and Firey Rebirth. + - refactor: Refactored how heretic alt paths are set up to make adding new heretic + paths easier. + Pandarsenic: + - bugfix: Nuclear Operative Ordnance Lab now has minimum functional equipment. + - bugfix: Overlapping sprites in IceBox departures corrected by moving wall-mounted + items to other walls. + - bugfix: IceBox xenobio camera now attaches to a wall instead of floating in the + air. + PositiveEntropy, AxieTheAxolotl: + - imageadd: Resprites several syndicate outfits, particularly the Syndicate Coat, + the Turtlenecks, and the Combat Uniform! + - imageadd: Resprites and updates the Really Black Suits! + - rscdel: Removes the trak_suit from syndicate.dmi (it was a dupe and unused) + RandomGamer123: + - bugfix: Airlock Controllers now display their name in their GUI menu. + - bugfix: Airlock Controllers' GUI menu now doesn't pop back up after being closed + if it update while you'll still in range. + TheBoondock: + - expansion: Bz now also reduce how much tritium is consumed in hypernob formation. + Reduction depends on the ratio of bz to trit, bz > trit will result in reduced + trit consumption. + Zytolg: + - bugfix: The Metastation Tox-Mix chamber now utilizes the airless ver. of the engine + turfs. + magatsuchi: + - bugfix: brings back ctrl-click to remove pen + flavor text + maxspells: + - soundadd: Changed a cautery sound effect to be quieter. + timothymtorres, TheBonded: + - expansion: Mobs can no longer read in the dark unless they have some type of night + vision. + tralezab: + - rscadd: Thieves now have a low chance to found a thieves guild somewhere in maint. + - rscadd: Adds a new type of thief, the "All Access Fan" + - rscdel: Hoarder is disabled and admin only for the moment +2022-04-23: + Ghilker, shield sprite by @SnoopCooper: + - expansion: canisters now have a toggle for shielding that will start to consume + power if the temperature and pressure go over the labeled one (current limits + are higher than old t1 but lower than old t2). Peak draw should be around 25 + kW with fusion temperatures. Canisters have an internal cell that allows it + to hold shielding in areas without power for a time, powercells can be upgraded, + removed, replaced. + Rhials: + - expansion: Glockroaches and Hauberoaches are now accessible through cytology, + and have their own respective cell lines to grow them with. + TheBoondock: + - bugfix: fixes aux base console outputting "span_danger()" in launch sequence + YakumoChen: + - bugfix: Removed a stacked RPlasmaGlass window on Ice Box + Zytolg: + - bugfix: Atmos Technicians have finally gotten off their bums and done their jobs- + installing vents and scrubbers into atmos. +2022-04-24: + Bumtickley00: + - qol: The medical techfab can now print pill bottles + ErdinyoBarboza: + - bugfix: The construction firm has realized they were installing the urinals wrongly + and have now fixed them. + FernandoJ8: + - bugfix: fixes the exploit allowing for hundreds of iterations of the convermol + failed reaction to occur rapidly with a single beaker + Fikou: + - bugfix: fixes the traitor elite nukie suit being id locked + Ghilker: + - bugfix: increase roundstart power available to SM rooms + GoblinBackwards: + - rscadd: Added a whitelist to blood filters, unless the list is empty they will + only remove chems in this whitelist. You can edit the list by using the filter + in your hand + - qol: Blood filter surgery now automatically does a chem scan after each step if + you're holding a health analyzer. + - qol: Blood filter surgery now automatically loops if the patient has any filterable + chems in them + IndieanaJones: + - balance: Regal rats can now pry open airlocks. + - balance: Regal rats can see further in the dark now. + Mothblocks: + - balance: Replaced leftover xray injectors that weren't removed from research station + with thermal vision. + Rhials: + - bugfix: Moves the medical laptop crammed into the Kilostation psych locker to + a proper desk. Also expands the Kilostation office area by a single tile, giving + a much needed buff to a previously weak role. + SmArtKar: + - bugfix: Saline solution bottle no longer has a weird sprite that doesnt match + up with the reagent overlay + TheBoondock: + - bugfix: Fixes ghetto tools playing improper sounds when used during surgery step + that requires saw + - code_imp: add framework for future preop_sound conversion to list() + Vladoricious: + - qol: The research scanner in science goggles and similar eyewear no longer requires + you to press a button to turn it on! Instead, simply closely examine your target. + - bugfix: The MOD advanced reagent scanner module no longer detects explosions despite + being disabled. + - code_imp: Research scanner code cleanup. + Y0SH1M4S73R: + - bugfix: A couple of ugly-looking diagonal walls in the Hilbert Research Facility + have been straightened out. + YakumoChen: + - bugfix: Fixes a sprite not appearing when you use up canned tomatoes + - bugfix: Donkfillet has a sprite for real this time + Zytolg: + - bugfix: Adds more tape to Deltastation + - bugfix: Hijacked Shuttles will now show up at Firebase Balthazord + capsaicinz: + - bugfix: some stacks that need a singular name now have said singular name + - bugfix: stops sausage processing from runtiming, possibly other radials as well(?) + kawoppi: + - expansion: Blushing now makes your face go a little bit red + - expansion: Being drunk flushes your cheeks + vincentiusvin: + - expansion: remapped kilo's ordnance. +2022-04-25: + BlueMemesauce: + - spellcheck: Centers title text in the Crew Monitor Console + Bondismyname but I wish it wasnt: + - bugfix: Titanium shuttle windows are now properly able to be anchored when created + in hand. + EthanRockss: + - rscadd: Added prop gas masks for both default and atmos + - rscadd: Added gas masks to autodrobe + GoblinBackwards: + - bugfix: Prevents abandoned crates deleting their contents (No, you can't cheese + them by blowing them up) + Iamgoofball: + - admin: Activating the Supermatter with a projectile now logs who did it and with + what weapon. + JohnFulpWillard: + - qol: The police whistle's sound was lowered to break your ears less. + JoshAdamPowell: + - bugfix: Random Item now accurately describes how much it costs. + Melbert: + - bugfix: Fixes some improper and bugged balloon alerts. + - code_imp: Adds a grep to prevent malformed balloon alert calls. + - bugfix: '"Open the Hatch" surgery step plays a sound that is potentially more + accurate to the tool being used.' + - bugfix: Monkeys can shove people in disposals correctly, again. + Pariah919: + - rscdel: Removed old carrier TCG art. + RandomGamer123: + - bugfix: The DJ station space ruin's intercoms can now actually be used. + SmArtKar: + - bugfix: Mobs no longer think that turfs with railings are occupied and will propperly + pathfind through them + - code_imp: Optimises pathfinding by removing an unneded istype() + Tastyfish: + - rscadd: Added a tile sprayer to paint the corner and edge colors of floors. + - qol: Made the UI for decal painters more visual. + - bugfix: The PDA's flashlight action button now updates when the flashlight is + toggled. + TemporalOroboros: + - bugfix: The supermatter running into you is just as deadly as you running into + the supermatter. + TheBoondock: + - bugfix: fixes bubblegum charge ignoring cooldown + capsaicinz: + - bugfix: curator PDAs will now properly display their screen overlays. + carshalash: + - bugfix: error in crab pathway. Crab can be grilled again. + magatsuchi: + - bugfix: fixed bug where you wouldn't receive msg notifications without opening + your messenger app first +2022-04-26: + Cenrus: + - bugfix: Removed a stray pixel in the energy shield module sprite + Fikou: + - bugfix: gateway lights work + Fikou, sprite modified by Zhost: + - qol: the sniper rifle has a new zoom system, activated by right-clicking + Ghilker: + - balance: diminished the number of anomalies spawned after the SM delamination + LemonInTheDark: + - rscdel: Removed the concept of ballast from thermomachines, you no longer need + some gas to heat in order to cool things. + MacBlaze1: + - bugfix: fixed ethereal feeding breaking APC charging + RandomGamer123: + - bugfix: Fixed spawn ruins admin debug verb's ruin ordering being not separated + by type + - bugfix: Removes a way to easily detect the presence of PDA uplinks + - bugfix: Grinders no longer consume 10x more energy than they are supposed to + Son-of-Space: + - bugfix: fixed wonky safe placement on Kilostation bridge + - bugfix: Moved firelocks in KiloStation dorms to not overlap posters. + - bugfix: Fixed the kilostation whiteship so that it fully spawns + - bugfix: Adds an APC and area to the lowest level of the mining station on IceBoxstation + TheBonded: + - bugfix: Fixed a very rare chance for the pressure on lavaland and icebox to be + just low enough for wings to not work. Ra'Sep rejoice! + lnGoror: + - bugfix: fixed a krokodil zombie transformation + vincentiusvin: + - bugfix: trying to store a plasma cutter while holding plasma should no longer + blow you up. +2022-04-27: + ArcaneMusic: + - rscadd: The accounting console has been added to the HOP's office, allowing them + to track purchases, and bank balances of the crew on station. It's not illegal, + it's the competitive advantage! Arkatos: - qol: Civilian Bounty Console will now always bring up its UI when you insert the ID. @@ -798,6 +1730,17 @@ - bugfix: fixed a krokodil zombie transformation - bugfix: trying to store a plasma cutter while holding plasma should no longer blow you up. + EthanRockss: + - bugfix: Prop atmos mask now uses the correct worn sprite + - bugfix: Jumpsuit no longer able to burn while wearing nuke op mod suit + GoldenAlpharex: + - bugfix: Ensured that the lower levels of Icebox would also get considered during + the Map Compile option, so we don't get broken maps in production. + JohnFulpWillard: + - bugfix: Obsesseds don't fail the hug objective if they headpat/tail pull instead, + - bugfix: Turning glasses colors on/off with AltClick now properly tells you that + you turned it on or off. + LemonInTheDark: - balance: Getting your eardrums blown out will now properly have a low chance to make you go fully deaf, until you find some earmuffs or get a transplant - refactor: Cached some redundant operations in Life(), speeding it up by ~22%. @@ -846,6 +1789,38 @@ - bugfix: Augmented limbs can once again have more styles than just the default cyborg one. SkyratBot: + OperativeLyn: + - bugfix: The lit up rocks in the crashed ship space ruin are now dark like the + others. + Pandarsenic: + - qol: Added vent/scrubber pair to the Icebox security entryway and the warden's + backdoor to the armory. + - bugfix: Icebox Brig Medical now has a wire connecting it to the powernet. + RandomGamer123: + - bugfix: Prevent bullets (most notably those fired aimed at the mouth when intended + for executions) from sometimes missing if you're firing at a target diagonally + adjacent to you and there's an obstacle (eg. person) between you two. + SingingSpock: + - rscadd: N-Spects to the Security techfab (with Basic Security Equipment) + Son-of-Space: + - bugfix: The 3rd Level of IceBox is now counted as being a part of the station. + - rscadd: NT Investors have built a new perma brig on IceBoxStation for the purpose + of press releases. + SuperNovaa41: + - bugfix: RnD servers will no longer permanently stop working when depowered. + Y0SH1M4S73R: + - bugfix: Stabilized extracts now work when placed inside modsuits + magatsuchi: + - bugfix: papers are now scannable again after an oversight, and techweb now appears + on all head pdas + - rscdel: removes round start tablets + - bugfix: Nanotrasen 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. + timothymtorres, TheBonded: + - bugfix: Fixes prescription glasses not clearing blurry vison +2022-04-28: + ArcaneMusic: - balance: The values of nearly every item purchasable by players has been rebalanced. - balance: Players will now start with less starting money, but will receive a paycheck once every 5 minutes. @@ -890,3 +1865,68 @@ - bugfix: Fixed the moth costumers for the restaurant venue not showing up. - bugfix: Fixed bar venue customer bots. - qol: Location names in Crew Monitor console now stretch if too long again + Cenrus: + - bugfix: Fixed lionhunter ammo sidepath + Ghilker: + - balance: removed halon from normal gas reactions, added halon to the electrolyzer + reactions by consuming co2 and n2o at low temperature and low pressure + JohnFulpWillard: + - bugfix: A double light fixture in the law office has been fixed. Enjoy your lights. + magatsuchi: + - bugfix: notepad app no longer causes a barrage of action cooldown messages + - code_imp: adds docs for christmas tree spawner and christmas cracker + san7890: + - 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. + sergeirocks100: + - imageadd: Cannabis plants have recieved some new sprites. + thgvr: + - bugfix: Cleaned up some pipes lying around in the Lavaland Syndicate base supermatter. + vincentiusvin: + - bugfix: fixed unpowered tram ordnance apc +2022-04-29: + ErdinyoBarboza: + - bugfix: Adds proper cycling to DeltaStation RnD Circuit-Toxin area. + - bugfix: Removes a duplicate APC from DeltaStation brig. + Ghommie: + - bugfix: Fixed the moth costumers for the restaurant venue not showing up. + - bugfix: Fixed bar venue customer bots. + GoldenAlpharex: + - bugfix: The mining augments are now visible once again. + JohnFulpWillard: + - bugfix: Jobs who spawn with tablets not on the belt, have their name and job properly + displayed on the tablet, like everyone else. + OperativeLyn: + - bugfix: Moved an intercom in Metastation's captain's office to prevent overlapping + visible to ghosts. + PositiveEntropy: + - imageadd: Resprites most crates and the trash cart! + YakumoChen: + - rscdel: Tramstation's Medbay has had some budget cuts on their fire alarms. + tralezab: + - bugfix: Nullwave Vibrato now works as intended, stacking antimagic duration + - balance: Nullwave Vibrato stacks 10 seconds of antimagic, every few moments you + listen to it. +2022-04-30: + BlueMemesauce: + - qol: Location names in Crew Monitor console now stretch if too long again + Dragonfruits, with some tweaks by PositiveEntropy: + - imageadd: The cargonian wardrobe has now been updated into a tasteful brown! + Fikou: + - bugfix: fixes overslots being permanently lost if you switched modsuit skin + - bugfix: fixes golems/monkeys keeping modsuits on if switched race from different + species + OperativeLyn: + - bugfix: Removed some useless catwalk tiles, cables and pipes in TramStation maintenance. + castawaynont: + - bugfix: DeltaStation cargo warehouse poster has been moved one tile down + san7890: + - bugfix: Nanotrasen's Department of "Reality Fixing" has corrected an issue regarding + the space on the tiles of the southern solars on TramStation. + - bugfix: Nanotrasen will no longer install "Mining" Access Doors in DeltaStation's + Cargo Bay. + timothymtorres: + - qol: Rearrange Delta library gaming room to host D&D parties + xyc: + - bugfix: tram medbay maint won't sometimes get double stacked cables and piping diff --git a/html/changelogs/archive/2022-05.yml b/html/changelogs/archive/2022-05.yml index 77817940d2cdb..4ef76c6c97d98 100644 --- a/html/changelogs/archive/2022-05.yml +++ b/html/changelogs/archive/2022-05.yml @@ -37,6 +37,35 @@ - bugfix: Jobs who spawn with tablets not on the belt, have their name and job properly displayed on the tablet, like everyone else. - bugfix: Fix ghosts not being able to read in the dark + Crushtoe: + - bugfix: Fixes Icebox Security's entrance airlock cyclers and the Interrogation + shutters. + - bugfix: Fixes Icebox Engineering's lower floor EVA airlock cycler. + EthanRocks: + - bugfix: rare case of being able to spawn off station when returning from shadow + realm + GoldenAlpharex: + - bugfix: Fixed hair not blocking emissives, which ended up creating some rather + silly visual glitches at times, in darker areas. + Pepsilawn: + - bugfix: Security hailers no longer inform you that you used a cryptographic sequencer + to emag them when you did not + RandomGamer123: + - bugfix: The disposals bin in front of the cafeteria on KiloStation now is actually + properly connected to the disposals network. + SnoopCooper: + - rscadd: Breathing helium now makes your speech small + carshalash: + - bugfix: corrects pathway in sausage and eggs. Now cooked with fried eggs as intended. + magatsuchi: + - rscadd: Back by popular demand, the Syndicate 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. + the-orange-cow: + - spellcheck: Fixed a few insignificant typos. + timothymtorres: + - bugfix: Fix ghosts not being able to read in the dark + vincentiusvin: - rscdel: Removed adding glass floors to plating - balance: Allows you to replace plating with glass floors instead. 3 second timer. - rscdel: Removed deconstructing the glass floors. No replacement for this one, @@ -92,225 +121,278 @@ Nerev4r: - rscdel: Removes snail speech modifier. Try using a lot of ellipses instead! - rscdel: Lowers the amount of water that snails leave behind. + - bugfix: Fixed plasma sheets and it's derivatives exploding you for being shot + at. +2022-05-02: Ryll/Shaps: - balance: Armored bounty hunters are no longer being issued flamethrowers. Instead, they are now issued dual-tube shotguns filled with rubbershot and trailless incendiary slugs, as well as a 9mm Makarov loaded with fire bullets. - SkyratBot: +2022-05-03: + ArcaneMusic: + - bugfix: Drones are exempt from the lathe tax, off and on station. + Arkatos and wiki contributors: + - qol: Mining voucher redeem selection now uses a radial menu and provides additional + information about the voucher sets. Literally years in the making, enjoy! + Ghilker: - qol: Adds radio messages to the delaminating HFR to let atmosians know what's wrong with it. Unless the HFR has been emped + JohnFulpWillard: + - bugfix: pAIs can now use Newscaster UIs, and all Silicon can now use Newscasters + in general (except the Bounty board, as they have no money to payout). + - bugfix: Drones can no longer give themselves access to machines/wires through + consoles. + - bugfix: Cayenne can no longer use the nuke from anywhere. + SmArtKar: + - bugfix: Cryo cell overlay should properly display above mobs now + Son-of-Space: + - bugfix: Fixed several inconsistent or niche access requirements on MetaStation + - qol: Replaced all access requirement vars on doors with mapping helpers on MetaStation + Striders13: + - bugfix: H.E.C.K. suit now once again prevents your clothes from burning and your + hair from sticking out. + SuperNovaa41: + - bugfix: Fixes an issue with service borg apparatuses getting multiple beakers + in it's contents. + - bugfix: Fixed being able to ride dead space carp. + TiviPlus: + - code_imp: changed some backend code for rendering, please report any layering + issues on the github + Y0SH1M4S73R: - refactor: Wizard casting clothes now use a bitflag instead of a typecache. This allows for nonstandard headwear and suits to be varedited into casting clothes. - balance: The enchanted modsuit's chestplate and helmet must now be deployed in order to cast robed spells. - - bugfix: Fixed being able to ride dead space carp. - - bugfix: Fixes an issue with service borg apparatuses getting multiple beakers - in it's contents. + capsaicinz: - rscadd: adds the "how to charge your PDA" poster - - bugfix: Cryo cell overlay should properly display above mobs now - - bugfix: Drones can no longer give themselves access to machines/wires through - consoles. - - bugfix: H.E.C.K. suit now once again prevents your clothes from burning and your - hair from sticking out. - - bugfix: pAIs can now use Newscaster UIs, and all Silicon can now use Newscasters - in general (except the Bounty board, as they have no money to payout). - - bugfix: Cayenne can no longer use the nuke from anywhere. - - bugfix: Drones are exempt from the lathe tax, off and on station. - Tastyfish: - - refactor: Examine block HR section breaks are now handled such that they don't - repeat or show up at the bottom. - Zonespace27: - - rscdel: Removed Tommy Gun from Armadyne oldarms - - spellcheck: Fixed bluespace syringe box name - - balance: CFA weapons are cheaper - - rscadd: 4 permit huds can be bought from the cargodrobe - - rscadd: interdyne now sells more contraband-and-not chemicals - - balance: AMMO_BULK category now adds 4 interest instead of 3 - - bugfix: Serviettes now can be taken out of their packs - softcerv: - - bugfix: can now research scan like normal sci-goggles. - tf-4: - - balance: Scarborough Arms now needs an emagged supply console to purchase. -2022-05-04: - IsaacTheSharkWolf: - - bugfix: fixed (most of) the wrong facing cameras. - - bugfix: fixed the misplaced airlock button in the toxin incinerator. - - bugfix: fixed prison visitation shutters having no working button. - - bugfix: fixed some access issues with medbay maintenance doors. - - bugfix: fixed missing disposal pipe section in NTR's office. - - bugfix: fixed missing tank compressor in toxin lab. + castawaynont: + - bugfix: Fixed the cabling and piping in the mining lobby on Kilo. The mining shuttle + should now charge correctly. + thgvr: + - bugfix: Shuffled around some pipes in KiloStation garden so they are no longer + under tables/grass. + timothymtorres, san7890, axietheaxolotl: + - rscadd: Adds haunted tarot deck that allows the user the ability to see and communicate + with the dead. Can be found in maint loot as a rare item. + - rscadd: Adds blank card decks to games vendor. These can be written on with a + pen or crayon. + - soundadd: Adds a public domain cardflip.ogg from freesound.org that is used when + drawing a card. + - qol: Cards, decks, and cardhands have new hotkeys. Decks are now a 2 handed wielded + object. + - qol: Add card ruleset to Wiz-Off at the top of the deck. + - bugfix: Holodeck card decks are now spawned as syndicate deck to convey that they + can do damage if safeties are overridden. + - bugfix: Any holodeck items have their force and throwforce damage nerfed to zero + 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 + 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 + an unfair advantage while playing card games during recreational time.' + - code_imp: Moved the card deck code to it's own files and folder. + - rscdel: Remove CAS decks from random deck spawner (you need both decks to play + so only having one spawn was bleh) + - refactor: Cards have been refactored and a lot of deprecated code has been removed. + - imagedel: Remove old cardhand icons that were unused. + - imageadd: Add some new blank/scribble card icons. + - imageadd: Add new clown and mime joker cards to standard decks curtesy of axietheaxolotl + (Viro on discord) +2022-05-10: + Cenrus: + - bugfix: Syndicate 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. + - refactor: The voting UI now uses Typescript. + RatFromTheJungle: + - bugfix: Expert gunsmiths have removed the forced 'strobe' setting from the PDH-Ospreys + rear-sight. + Ryll/Shaps: + - bugfix: Directional windows, firelocks, and other border objects will now properly + block incoming ballistic fire SkyratBot: - - rscadd: Replaced secborg sprite + - rscadd: Adds Dungeon Master, The Painter and Their Canvas, and Nutimov lawsets. + They aren't obtainable at the moment. +2022-05-04: + ArcaneDefence: + - rscadd: Hey did you know you can charge your tablet by microwaving it? + Ghilker: + - bugfix: fix oversight with prop gasmasks having some of the features of normal + ones but without fov + JohnFulpWillard: + - bugfix: MODsuit plasma stabilizers no longer protect plasmamen from self-combustion + if they aren't wearing an envirosuit or gloves. + - bugfix: Icebox no longer spawns Prisoners outside of Permabrig. + - bugfix: A lone disposal pipe segment under a table in the bar on Metastation has + been removed. + castawaynont: + - bugfix: removes windows in Kilo's monkey pen in genetics, allowing access to the + wallmounts in there. + zxaber: - rscadd: 'Mechs now have a weapons safety, which can be toggled with the Middle Mouse button. Don''t worry, it defaults to off. expansion: All mechs now use the mouse reticle, and the reticle is disabled when weapons safety is turned on.' - bugfix: AIs can use mech equipment again. With weapons safety off, equipment is used. With weapons safety on, AI clicks are used. - - bugfix: MODsuit plasma stabilizers no longer protect plasmamen from self-combustion - if they aren't wearing an envirosuit or gloves. - - rscadd: Hey did you know you can charge your tablet by microwaving it? - - bugfix: fix oversight with prop gasmasks having some of the features of normal - ones but without fov - Tastyfish: - - imageadd: Teshari sprites for skill reward cloaks. - - bugfix: Fixes teshari again. - - qol: You can now identify what liquid a floor is covered in, if you have a reagent - scanner / reagent glasses. - Zonespace27: - - balance: Guncargo AKM removed and replaced with a worse version 2022-05-05: - Arctaisia: - - rscdel: Removes the Arc plushie and Ole plushie, as well as removing them from - the loadout selection. - - rscdel: Removes the nerd plushie from the ghost cafe. - - rscadd: Adds a note to the Ghost cafe where the Nerd plushie used to be. - Gandalf2k15: - - bugfix: You can now adjust jumpsuits correctly. - - rscadd: The events system now uses an internal voting system, where possible. - - 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 - 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. - - refactor: Refactored how snouts worked, ensuring that they are linked to an actual - external organ now, which allows for much more dynamic management of snouted - variants of articles of clothing. - - bugfix: Lizards, mammals and synthetics are no longer forced to use snouted sprites - for headgear 24/7, and will now only use them when necessary. - - code_imp: Improved slightly the code for MODsuit module snout detection, making - it slightly better. - KasparoVy: - - rscadd: You can now colour thigh-highs in the socks selection of the character - creator. - Paxilmaniac: - - bugfix: marines of the ert variety will now have 70% less missing clothing if - the soldier is not a baseline human - - balance: The marine response teams near the station have finally been given weapons - to replace their horribly outdated armory - - bugfix: Fixed the Norwind, Vintorez, and DTR rifles all missing inhand sprites - - bugfix: The skyrat custom versions of the mining shuttles have returned to stations - - qol: The assault ops shuttle has been retrofit, with many improvements over the - old design - Ryll/Shaps: - - spellcheck: Wound and combat messages will no longer mention the species of an - attacked bodypart when not appropriate - SingingSpock: - - rscadd: All Heads now have weapons permits. - SkyratBot: + LemonInTheDark: - balance: The janiborg's drying spray bottle will now always clean a wet turf that's been washed once - - balance: The further you are from a radiation pulse, and the more objects that - block it, the lower your odds are to get irradiated. - - balance: Most radiating emitting things have their radiation pulses functionality - changed. Being near them is more dangerous, and being far away is less dangerous. + Mothblocks: - server: Admin ranks can now be combined with a plus sign (for example, Game Master+Coder). Single admin ranks with a plus sign in their name are no longer supported. - server: You can no longer edit rank permissions, temporarily or permanently, from the permissions panel. Please use the admin_ranks database table or admin_ranks.txt instead. - Zergspower: - - balance: Changes the point generation from 2 to 2.5 - Zonespace27: - - balance: Uzi, glock, saber SMGs are more expensive. - - balance: MCRs are cheaper - - balance: Long-arms and automatic weaponry now cannot be ordered from request consoles - and IRN tablets, you must use a regular cargo console or a head's ID in an IRN - tablet to do so. - - rscdel: Removed g11 from guncargo. - - bugfix: Companies can be ordered from IRN tablets again. - - bugfix: Chemical dispensers now add reagents for manipulators past tier 2 - theOOZ: - - qol: Raises the chat indicator's layer for better visual clarity + Pickle-Coding: + - balance: The further you are from a radiation pulse, and the more objects that + block it, the lower your odds are to get irradiated. + - balance: Most radiating emitting things have their radiation pulses functionality + changed. Being near them is more dangerous, and being far away is less dangerous. + Ryll/Shaps: + - spellcheck: Wound and combat messages will no longer mention the species of an + attacked bodypart when not appropriate 2022-05-06: - Gandalf2k15: - - rscadd: New briefcase sprites have been added! + Ghilker: + - balance: Pacmans no longer require stock parts (no more upgrade memery) + - balance: Base pacman power generation changed from 10-40 kW (t1) and 40-160 kW + (t4) to 2.5-10 kW + - balance: Base pacman max held sheets is 10 + - balance: Base pacman sheet consumption speed has been quintupled + - balance: Super pacman no longer exists, the circuit board now switches between + a low production - low consumption mode to high production - high consumption + mode and viceversa + - balance: This new mode has a max held sheet of 5, power generation changed from + 30-120kW (t1) and 120-480kW (t4) to 15-60 kW and consumes sheets ~3 times faster + than the base pacman GoldenAlpharex: - - bugfix: Lizards can now have snouts again. - ORCACommander: - - bugfix: Assault Operatives have now completed basic flight training and can dock - the shuttle. - Zonespace27: - - admin: Ashwalker tendril destruction is now logged -2022-05-07: - Deek-Za: - - bugfix: Moth's can color themselves again - Gandalf2k15: - - rscadd: The Makarov sprite has been updated. - - rscadd: A new engineering-type event has been added, the supermatter surge! - GoldenAlpharex: - - bugfix: Every species that doesn't have its own unique legs will now be able to - use digitigrade legs again, when Allow Mismatched Bodyparts is toggled. + - bugfix: Fixed the female-fitted version of uniform clothes, so that they are fitted + for female body types once again. + JohnFulpWillard: + - bugfix: Icebox's Altar of the Gods was removed, letting Chaplains once again replace + their own with a bible if it breaks. Melbert: - - bugfix: Medical coagulants work as they are expected to now, but the difference - shouldn't be very noticeable, since their primarily function worked anyways - RatFromTheJungle: - - rscadd: DagothBot (God Complex) lawset - - rscadd: Texas Ranger (Frontier Ranger) lawset - - config: added them to the config laws aswell - SkyratBot: - - bugfix: demonic watchers will now drop their crusher trophy properly - - bugfix: Luminescents once again have proper bodyparts - - imageadd: Added new icons for the DNA injectors - - imageadd: Added new icons for the DNA implanters and their cases - - bugfix: The bluespace icon syringe is now more animated - - bugfix: Fixes Life(Friendly) reaction spawning hostile mobs - - code_imp: changed how the gas pressure calculation work very slightly, report - if things are bugged. - - bugfix: drones should be able to do stuff next to other drones + - refactor: Drunkenness is now a status effect. The drunk alert should no longer + persist on aheals and in some rare cases, and should overrall act a bit more + consistently. + - refactor: Dizziness is now a status effect, similar to above. You no longer should + be stuck with an off center client view if you get very dizzy. + - refactor: The "ballmer" voicelines said by scientists are a liver trait now, instead + of hard checking job types. + - refactor: Refactored status effect examine text. Should overall have slightly + better grammar and more consistent span uses. + - bugfix: Stabilized dark purple extracts no longer runtime like crazy when not + holding an item. + - bugfix: Drunken Resilience should update health more accurately when it's occurring. + Rhials: + - bugfix: engineers can now properly access the space loop on Tramstation. + SmArtKar: + - code_imp: Changed some fire-related procs to be snake_case + - refactor: Refactored firestacks into status effects + - bugfix: Monkeys no longer have human fire overlay when on fire and instead use + the one they're supposed to use. + castawaynont: + - bugfix: Delta's virology lobby now has a camera, as intended + - bugfix: Delta's virology lobby now allows MDs in. + - bugfix: removed a section of cabling/piping from tram's medbay maint, preventing + cable/pipe double ups. + san7890: + - qol: IceBoxStation is now contained in one map file, instead of three. This is + good for mapping. If things on IceBox break, please make an issue report. +2022-05-07: + ArcaneMusic: + - bugfix: Id cards, when having their job template changed, will change that job's + payment department as they used to. + EOBGames: - rscadd: A number of new tiles are available for construction. Check out the small, diagonal and herringbone variants of your favourite grey, dark and white tiles. Also, check out the new terracotta and kitchen tiles- they're fancy! - - bugfix: fixed NT frontier being downloadble by non scientists. - - bugfix: The HoP is now considered part of Supply (Supply bans apply to HoP, they - get Supply deathrattle, cannot get smuggle objective, ect). - - bugfix: Admin Nation-creating event can now properly trigger and work. - - bugfix: Plants like Deathnettle will no longer use durability when clicking on - someone from a distance. + Fikou: + - rscadd: Random Job button in Latejoin panel. + - bugfix: drones should be able to do stuff next to other drones + Ghilker: - qol: Made the tank compressor input pipe green color to be in line with the current atmos machines color scheme, increased by 100 kPa the window for tank ejection to allow more flexibility when filling up the tank - code_imp: cleaned up some of the code for disconnecting pipes and removed repeated code + JohnFulpWillard: + - bugfix: The HoP is now considered part of Supply (Supply bans apply to HoP, they + get Supply deathrattle, cannot get smuggle objective, ect). + - bugfix: Admin Nation-creating event can now properly trigger and work. + - bugfix: Plants like Deathnettle will no longer use durability when clicking on + someone from a distance. + Melbert: + - bugfix: Managing to escape the area of a blade heretic's mark will no longer constantly + burden you as if you never left. + - bugfix: There should be less ways of escaping the area of a blade heretic's mark + now. + - qol: Heretics can drag people marked by a blade heretic out of the area they are + trapped within. + - qol: Being thrown back by a blade heretic's mark will be slightly less awkward + now, and less dangerous. + - bugfix: Medical coagulants work as they are expected to now, but the difference + shouldn't be very noticeable, since their primarily function worked anyways + PestoVerde322: + - imageadd: Added new icons for the DNA injectors + - imageadd: Added new icons for the DNA implanters and their cases + - bugfix: The bluespace icon syringe is now more animated + Rhials: + - bugfix: Moves a telescreen in Deltastation's library area + SmArtKar: + - bugfix: Luminescents once again have proper bodyparts + Son-of-Space: - bugfix: Atmos techs now have general engineering access - - bugfix: Id cards, when having their job template changed, will change that job's - payment department as they used to. - - qol: mech construction now has balloon alerts! - - code_imp: mecha_construction_paths.dm is now has significantly less copy/paste - code - - bugfix: Department budgets can no longer be spent in roulette. Their ability to - act as the house is unaffected. - - bugfix: You no longer have to enter text to succumb. A blank value works. + Striders13: + - bugfix: demonic watchers will now drop their crusher trophy properly Wallem: - imageadd: The book binder has gotten a fresh coat of paint. Zestybastard, Azlan and PositiveEntropy: - imageadd: Resprites the old space suits! - imageadd: Resprites the sleepers! - rscdel: Removes unused orange and black engi light attachment helmet sprites. + dragomagol: + - bugfix: atmos techs can once again re-enter the engineering lobby and lathe room + - qol: mech construction now has balloon alerts! + - code_imp: mecha_construction_paths.dm is now has significantly less copy/paste + code itseasytosee: - balance: You can now pull bulky things in zero gravity at full speed - bugfix: The slowdown from neck grabs is now properly negated in zero gravity. - jjpark-kb: - - rscdel: removed the skyrat logo in the lobby + jlsnow301: + - bugfix: You no longer have to enter text to succumb. A blank value works. + lnGoror: + - bugfix: Fixes Life(Friendly) reaction spawning hostile mobs + vincentiusvin: + - rscadd: Remapped meta's ordnance. + - bugfix: fixed NT frontier being downloadble by non scientists. + - code_imp: changed how the gas pressure calculation work very slightly, report + if things are bugged. 2022-05-08: - AtoriBirb: - - imageadd: 6 new beak sprites to snouts.dmi - Deek-Za: - - bugfix: Fixes glass_large door lighting. - Melbert: - - qol: Heretic ghoul recipes are more descriptive when failing - - bugfix: Fixes a missing span on heretic ghoul deconversion - - bugfix: Managing to escape the area of a blade heretic's mark will no longer constantly - burden you as if you never left. - - bugfix: There should be less ways of escaping the area of a blade heretic's mark - now. - - qol: Heretics can drag people marked by a blade heretic out of the area they are - trapped within. - - qol: Being thrown back by a blade heretic's mark will be slightly less awkward - now, and less dangerous. - SkyratBot: + Gandalf2k15 for porting, DarthSidiousPalpatine for their original contribution on TauCeti: + - imageadd: Mob fire sprites have been updated! + - refactor: The way mobs update fire has been refactored. If you spot any anomalies, + please report them. + Ghilker: + - balance: lowered overall max tesla coil power conversion at all parts tiers (at + t4 it went from 85% to 50%) + - bugfix: connect tramstation arrivals to the distro/waste + Hiderin0: + - rscdel: Just deleted an errant disposals pipe at X:97, Y:112 under the glass + JohnFulpWillard: + - bugfix: Modular computers work again, allowing you to put your ID in to download/use + programs. + LemonInTheDark: + - code_imp: Some things that were hyper undeletable are now just normal undeletable. + Please report any unexpected behavior, mostly in away missions, or on lavaland. + - balance: Firelocks now take 3 seconds to auto-close after opening, rather then + 5 + - bugfix: Firelocks on top of normal doors will now no longer fail to re-close for + seemingly random reasons - qol: Space Parallax will now smoothly animate between steps, based off your movement speed. Please report any jitter. - bugfix: Parallax will no longer "freeze" when you cross some area boundaries. @@ -318,67 +400,60 @@ - bugfix: Dragging objects diagonally will no longer cause them to visually "jump" to catch up to you. Seriously how did none report this, are we just collectively blind? - - imageadd: On the mapping end, we've removed some duplicate names for different - icons. - - balance: lowered overall max tesla coil power conversion at all parts tiers (at - t4 it went from 85% to 50%) - - code_imp: Some things that were hyper undeletable are now just normal undeletable. - Please report any unexpected behavior, mostly in away missions, or on lavaland. - - rscadd: Random Job button in Latejoin panel. + MacBlaze1: + - qol: the gas analyzer now shows the heat capacity and thermal energy of a mix + - qol: the gas analyzer now shows the volume of empty pipe networks + Melbert: + - qol: Heretic ghoul recipes are more descriptive when failing + - bugfix: Fixes a missing span on heretic ghoul deconversion + MrNihil: - bugfix: You can now recycle unused mutators and activators in dna console. - bugfix: 'Genetic scanner now shows all mutations. expansion: Genetic scanner will highlight active mutations.' + OperativeLyn: + - bugfix: Removed a duplicated airlock in IceBox lower maints. + SmArtKar: + - bugfix: Removes second intercom in captain's office on Delta + TemporalOroboros: + - balance: The resulting changes to smoke and foam have effected their balance. + In which direction is currently unclear. + - code_imp: Minor code improvements to smoke, foam, and... _wizard spells?_. + ZephyrTFA: + - rscadd: Heterochromia Quirk, try it out! + - refactor: Eyes now support having two different colors for each eye; become your + own disco! + Zytolg: + - bugfix: Kilostation's command section now accurately reflects that command staff + are, in fact, commanding a hollowed out asteroid. + cacogen: - qol: Deadchat control on anarchy mode will now alert you when you can enter another command - - bugfix: Modular computers work again, allowing you to put your ID in to download/use - programs. - - qol: the gas analyzer now shows the heat capacity and thermal energy of a mix - - qol: the gas analyzer now shows the volume of empty pipe networks - - balance: Firelocks now take 3 seconds to auto-close after opening, rather then - 5 - - bugfix: Firelocks on top of normal doors will now no longer fail to re-close for - seemingly random reasons - Spc-Dragonfruits: - - spellcheck: 'Pan Slavic description changed to match the lore. tweak: Replaced - "Selenian" with "Sol Common", use ",sol" to speak. The directory is the same, - so you don''t need to re-select it.' - - spellcheck: Dwarf no longer has an odd chance to drop a syllable with a percentage - symbol in it. - - imageadd: Sol Common language icon, replaced red star with proposed NRI flag (thanks - Russian community), gave the Skrell icon a little uplifting - YakumoChen: - - bugfix: Fixes stray pixel on one of the utility uniforms - Zonespace27: - - rscadd: Ashwalkers can now appear on icebox - - bugfix: Freighter crew gun vendor no longer alert locked - - bugfix: Cargo freighter boss now gets the correct ammunition. - - bugfix: Elite modsuit on cargodise lost no longer requires hacking to use - jjpark-kb: - - bugfix: adds back the xenoarch base - theOOZ: - - imageadd: Adds a roomba model to the peacekeeper cyborg line + castawaynont: + - bugfix: fixed the position of one of kilo's firealarms. + - bugfix: Delta's virology's showers no longer float. + san7890: + - imageadd: On the mapping end, we've removed some duplicate names for different + icons. 2022-05-09: + B4CKU: + - bugfix: fixed export prices of computer parts being overwritten by a "miscellaneous + computer part" + - bugfix: fixed missing export datums for various computer parts + - code_imp: improved code of computer part exports + Comxy: + - bugfix: When holding plasma glass, the sprite of normal glass was shown in hand + since plasma glass in hand didn't exist. + - rscadd: Added titanium and plastitanium glass shards as well as spears and shivs + for their types, including plasma glass shivs. + - imageadd: Sprites for plasma, titanium and plastitanium glass shards when hold + in hand. + - qol: titanium and plastitanium glass having their own shards makes sense, and + is a quality feature. + Fikou: + - balance: some items may protect more or less against diseases now Fikou, sounds by Floyd: - rscadd: Maintenance now contains an ancient altar. - Gandalf2k15 for porting, DarthSidiousPalpatine for their original contribution on TauCeti: - - imageadd: Mob fire sprites have been updated! - - refactor: The way mobs update fire has been refactored. If you spot any anomalies, - please report them. - Melbert: - - refactor: Refactored the wizard spell Charge - RandomGamer123, some ideas from the-orange-cow & cacogen: - - balance: The explosive mutation for kudzu is now classified as a severe instead - of just above average mutation - - balance: Venus human trap vine throw cooldown increased to 4 seconds - - balance: Kudzu's maximum mutation severity in general has been increased - - balance: Event-spawned kudzu's maximum mutation severity has been further increased - - balance: Kudzu now mutates twice as often in general - - balance: Event-spawned kudzu now has its minimum spread rate tripled - - balance: 'Newly spawned kudzu in general has its starting spread rate buffed expansion: - New temperature stabilisation mutation for kudzu as a semi-alternative to cold - proof and being a beneficial kudzu mutation in general, effectively functions - as a space heater with the target temperature being 20C' - SkyratBot: + Ghilker: - balance: Change how opening a hole in the chamber will affect the SM, increasing the dangers it will have by having more damage dealt, increase the power of the SM by 250 and stopping the SM healing from low moles/cold. @@ -390,130 +465,85 @@ 325 to 340 - balance: Increased the REACTION_POWER_MODIFIER from 0.55 to 0.65 increasing the power generated - - bugfix: Spamming the start compression test button will not make the anomaly refinery - eject a live TTV. - - rscadd: That's what the emag is for. - - bugfix: Briefcase launchpads now work again. - - bugfix: Briefcase launchpads now don't drain power from the station. - - balance: Printing surgery tools from the autolathe now requires silver - - balance: some items may protect more or less against diseases now - - qol: removes redundant access requirements from some airlocks - - refactor: changed how whether a mech equipment is attachable is determined, please - report if any previously attachable equipments are bugged - - bugfix: PDA/Tablets are now made from a realistic amount of iron. - - bugfix: fixed export prices of computer parts being overwritten by a "miscellaneous - computer part" - - bugfix: fixed missing export datums for various computer parts - - code_imp: improved code of computer part exports - - qol: supermatter zaps now change color based on the power generated, starting - from red and going toward blue the higher the power emitted - - bugfix: fixed extraneous wiring under a few windows in Kilo maint. - balance: improved freon production with a ratio of 6 moles of plasma, 1 mole of bz and 3 moles of co2. At 800 K there is a minor peak of production to have a fast way to generate freon, but at over 5000 K the rate starts to increase up to three times the rate at 800 K. - - bugfix: Changes the succumb screen to work for both tgui and standard inputs. - - rscadd: Adds 7 new foods! The power of chefs continues to grow. - - rscadd: Updated pierogi and stuffed cabbage sprites. - - spellcheck: Clarifies the explanation of the new turbine some, and fixes some - grammar for the parts too. - - bugfix: Fixed some door accesses being overridden on MetaStation - - rscadd: On the mapping end, mappers are now able to add a wide range of funky - new colors to maps. Keep an eye out, for they might just be coming to a station - near you sometime soon. - - rscadd: New clever mutation, allowing some mobs such as monkeys to use consoles. + - balance: Lower the amount of anomalies spawned from the SM delamination + - balance: Lower the probability of getting a flux anomaly from the SM delamination + - balance: Flux anomalies spawned by the SM in this way will have the explosion + size reduced by 4 + - qol: supermatter zaps now change color based on the power generated, starting + from red and going toward blue the higher the power emitted - rscadd: adds the supermatter cascade round-ender, it can be triggered when the SM chamber is filled with hypernoblium and antinoblium at over 40% each, when the total moles are high enough to trigger a singulo and only when the SM integrity is over 80% (if the gases don't reach the requirement during the delamination for a moment, the whole thing will stop and need to restart) - - rscadd: Heterochromia Quirk, try it out! - - refactor: Eyes now support having two different colors for each eye; become your - own disco! - - bugfix: When holding plasma glass, the sprite of normal glass was shown in hand - since plasma glass in hand didn't exist. - - rscadd: Added titanium and plastitanium glass shards as well as spears and shivs - for their types, including plasma glass shivs. - - imageadd: Sprites for plasma, titanium and plastitanium glass shards when hold - in hand. - - qol: titanium and plastitanium glass having their own shards makes sense, and - is a quality feature. - - balance: The resulting changes to smoke and foam have effected their balance. - In which direction is currently unclear. - - code_imp: Minor code improvements to smoke, foam, and... _wizard spells?_. - - balance: Lower the amount of anomalies spawned from the SM delamination - - balance: Lower the probability of getting a flux anomaly from the SM delamination - - balance: Flux anomalies spawned by the SM in this way will have the explosion - size reduced by 4 - - balance: Off-station lathes no longer you pay a tax. - Wallem: - - imageadd: The food cart & ice cream cart have been given new coats of paint - softcerv: - - rscadd: Sabres are now order-able through cargo as a cargo goodie for 1.5k credits. - The cargo sabres feature a lower block chance compared to the standard sabre, - and come in a black sheath. - timothymtorres, TheBonded: - - balance: Decreased the amount of credits an approved manifest grants. (was +80, - it's now +70) - - code_imp: Improve nearsighted code to be more robust - timothymtorres, san7890, axietheaxolotl: - - rscadd: Adds haunted tarot deck that allows the user the ability to see and communicate - with the dead. Can be found in maint loot as a rare item. - - rscadd: Adds blank card decks to games vendor. These can be written on with a - pen or crayon. - - soundadd: Adds a public domain cardflip.ogg from freesound.org that is used when - drawing a card. - - qol: Cards, decks, and cardhands have new hotkeys. Decks are now a 2 handed wielded - object. - - qol: Add card ruleset to Wiz-Off at the top of the deck. - - bugfix: Holodeck card decks are now spawned as syndicate deck to convey that they - can do damage if safeties are overridden. - - bugfix: Any holodeck items have their force and throwforce damage nerfed to zero - 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 - 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 - an unfair advantage while playing card games during recreational time.' - - code_imp: Moved the card deck code to it's own files and folder. - - rscdel: Remove CAS decks from random deck spawner (you need both decks to play - so only having one spawn was bleh) - - refactor: Cards have been refactored and a lot of deprecated code has been removed. - - imagedel: Remove old cardhand icons that were unused. - - imageadd: Add some new blank/scribble card icons. - - imageadd: Add new clown and mime joker cards to standard decks curtesy of axietheaxolotl - (Viro on discord) -2022-05-10: - Cenrus: - - bugfix: Syndicate 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. - refactor: The voting UI now uses Typescript. - RatFromTheJungle: - - bugfix: Expert gunsmiths have removed the forced 'strobe' setting from the PDH-Ospreys - rear-sight. - Ryll/Shaps: - - bugfix: Directional windows, firelocks, and other border objects will now properly - block incoming ballistic fire - SkyratBot: - - rscadd: Adds Dungeon Master, The Painter and Their Canvas, and Nutimov lawsets. - They aren't obtainable at the moment. + - refactor: Refactored the wizard spell Charge + MidoriWroth: + - rscadd: Adds 7 new foods! The power of chefs continues to grow. + - rscadd: Updated pierogi and stuffed cabbage sprites. + RandomGamer123: + - bugfix: Briefcase launchpads now work again. + - bugfix: Briefcase launchpads now don't drain power from the station. + RandomGamer123, some ideas from the-orange-cow & cacogen: + - balance: The explosive mutation for kudzu is now classified as a severe instead + of just above average mutation + - balance: Venus human trap vine throw cooldown increased to 4 seconds + - balance: Kudzu's maximum mutation severity in general has been increased + - balance: Event-spawned kudzu's maximum mutation severity has been further increased + - balance: Kudzu now mutates twice as often in general + - balance: Event-spawned kudzu now has its minimum spread rate tripled + - balance: 'Newly spawned kudzu in general has its starting spread rate buffed expansion: + New temperature stabilisation mutation for kudzu as a semi-alternative to cold + proof and being a beneficial kudzu mutation in general, effectively functions + as a space heater with the target temperature being 20C' + Sneeker134: + - rscadd: New clever mutation, allowing some mobs such as monkeys to use consoles. + Son-of-Space: + - qol: removes redundant access requirements from some airlocks + - bugfix: Fixed some door accesses being overridden on MetaStation + TemporalOroboros: + - bugfix: Spamming the start compression test button will not make the anomaly refinery + eject a live TTV. + - rscadd: That's what the emag is for. + TiviPlus: + - refactor: changed how whether a mech equipment is attachable is determined, please + report if any previously attachable equipments are bugged + Unit2E: + - spellcheck: Clarifies the explanation of the new turbine some, and fixes some + grammar for the parts too. + Watermelon914: - rscadd: Adds a new 'Destroy Machinery' traitor objective that focuses on destroying various important pieces of machinery around the station. - rscadd: Traitor steal objectives can now have their timer skipped as soon as the bug is placed onto the target item. However, doing so will give reduced rewards. + - rscdel: Removes the smuggling traitor objective - balance: Low risk steal objectives reward slightly less TC - - imageadd: On the mapping end, the "Tram" Area Icon Sprites have been re-standardized. - - imageadd: Regenerative core and wounded status effects now have different icons - - bugfix: Fixes freon fires being too efficient in oxygen deficient environments. - - bugfix: Fixes freon fires hotspots not working properly. - - rscadd: Freon can now react in any gasmixture, instead of just turfs, but can't - create hot ice if it's not in a turf. - - bugfix: Fixed several inconsistent or niche access requirements on IceBoxStation - - qol: Replaced all access requirement vars on doors with mapping helpers on IceBoxStation + Zonespace27: + - balance: Off-station lathes no longer you pay a tax. + castawaynont: + - bugfix: reshuffled some wallmounts in Delta's brig. + iprice: + - bugfix: PDA/Tablets are now made from a realistic amount of iron. + jlsnow301: + - bugfix: Changes the succumb screen to work for both tgui and standard inputs. + san7890: + - rscadd: On the mapping end, mappers are now able to add a wide range of funky + new colors to maps. Keep an eye out, for they might just be coming to a station + near you sometime soon. + timothymtorres: + - balance: Printing surgery tools from the autolathe now requires silver + timothymtorres, TheBonded: + - code_imp: Improve nearsighted code to be more robust + - balance: Decreased the amount of credits an approved manifest grants. (was +80, + it's now +70) +2022-05-10: + LemonInTheDark: - qol: When ventcrawling, rather then jumping between pipes, your view will "glide" - qol: When ventcrawling, holding two directions no longer locks you in place. Instead behaving as expected @@ -521,11 +551,23 @@ this looks slightly better then the fullbright of current. - code_imp: Ventcrawling code has had a 99% performance increase. I am not joking. Won't lag the server anymore. + Melbert: + - refactor: Refactored the Durathread golem's strangle status effect + Pickle-Coding: + - bugfix: Fixes freon fires being too efficient in oxygen deficient environments. + - bugfix: Fixes freon fires hotspots not working properly. + - rscadd: Freon can now react in any gasmixture, instead of just turfs, but can't + create hot ice if it's not in a turf. + RandomGamer123: - bugfix: The tank compressor on Deltastation is now correctly oriented + Rhials: - balance: The mindshock gland mind control has been changed from a single, six-minute command to two, two-minute long commands. Also, those who are mindshielded will resist the brainwashing effects and the brain-melting waves the gland passively emits. + Ryll/Shaps: + - bugfix: Directional windows, firelocks, and other border objects will now properly + block incoming ballistic fire SmArtKar, Rukofamicom: - balance: Hierophant crusher trophy now creates a hierophant chaser instead of a wall @@ -559,6 +601,26 @@ - bugfix: piles of stone bricks can now actually be used to make stone walls SkyratBot: - bugfix: Fixed misplaced sofa parts in the Icemoon abandoned village. + Son-of-Space: + - bugfix: Fixed several inconsistent or niche access requirements on IceBoxStation + - qol: Replaced all access requirement vars on doors with mapping helpers on IceBoxStation + WatlerJe, PositiveEntropy: + - imageadd: Resprites the Polaroid Camera and the Film Cartridge! + san7890: + - imageadd: On the mapping end, the "Tram" Area Icon Sprites have been re-standardized. + tralezab: + - rscadd: Adds Dungeon Master, The Painter and Their Canvas, and Nutimov lawsets. + They aren't obtainable at the moment. + vincentiusvin: + - bugfix: added the missing raw anomaly core to icebox ordnance + - bugfix: fix kilostation and tramstation chambers controllers not accesible from + the inside. +2022-05-11: + BebeYoshi: + - bugfix: The Hair Stylist Association has noticed the sudden changes to the Mohawk, + Short Hair 5, Short Hair 6 and Pig Tails 2 hairstyle and brought them back to + their previous glory. + Ghilker: - qol: improved the speed of cascade wall spreading, made a better description for them - qol: 'I didn''t update the changelog in the initial PR so i''ll add this here: @@ -584,6 +646,31 @@ - qol: pipes and atmos components have better visual clarity and consistency between them - bugfix: You can no longer farm orbiting blades by using your mark on corpses + - bugfix: Fix being unable to refine the delimber anomaly raw core in the refinery + - code_imp: cleaned and brought up to date the powerfist code + - qol: added some more examine text on the powerfist + - bugfix: thermomachine no longer is under every pipe but is now above them + - qol: pipes and atmos components have better visual clarity and consistency between + them + Iamgoofball: + - qol: The supermatter cascade now takes one minute to end the round instead of + 5 minutes to end the round, to put it on par with Blob and such. + OperativeLyn: + - bugfix: Fixed misplaced sofa parts in the Icemoon abandoned village. + SmArtKar: + - bugfix: Charged green crossbreeds no longer display species types instead of actual + names + - bugfix: You can no longer farm orbiting blades by using your mark on corpses + Son-of-Space: + - bugfix: Fixed several inconsistent or niche access requirements on KiloStation + - qol: Replaced all access requirement vars on doors with mapping helpers on KiloStation + - bugfix: You can now cook meals on the oldstation ruin again + - bugfix: fixed overlapping objecs on the AI minisat on IceBoxStation + Y0SH1M4S73R: + - spellcheck: Recent re-evaluations of the underlying math have concluded that a + supermatter cascade will not, in fact, destroy the entire universe - only an + area several hundred kilometers in radius. + Zonespace27: - rscdel: Dead mouse, sunglasses, and briefcase bounties removed from assistants - rscadd: Added more engineering & science bounties - rscadd: Flamethrower, pneumatic cannon, water tank, and improvised shotgun shell @@ -592,46 +679,34 @@ - balance: Medical organ bounties have their reward reduced to 1k for a single organ, and 2k for bulk. - refactor: Refactored bounty cube selection back-end - - bugfix: Ripley mechs can no longer toggle to their nonexistant air tank. - - spellcheck: fixed the omega soap recipe not having bold on it's first line. - - bugfix: Fix mapped in cardhands not initializing properly - - bugfix: Cyborg drink glasses will nolonger automagically refill themselves when - not actually being held by the cyborg. - - bugfix: Fix being unable to refine the delimber anomaly raw core in the refinery + dragomagol: + - qol: department signs have directional variants + - code_imp: sign paths are now in snake_case + dragomagol, unit0016: + - rscadd: Added lore terminals - for when leaving a scrap of paper on the ground + just won't cut it + orthography: + - bugfix: fixes door access. + san7890: + - bugfix: After a mixup in the Marker Beacon Factory with the "Default Glowing Texture" + Factory, Marker Beacons should now have any actual sprite. - balance: 'After a recent earthquake, a good chunk of the exterior surrounding the Mining Base on IceBoxStation has undergone a drastic conformational change: the river has expanded. In response to this, more infrastructure in that part of the station has been re-done, and even added in some spots.' - - bugfix: You can now cook meals on the oldstation ruin again - - bugfix: Mulligan now properly randomizes ethereal color - - bugfix: Charged green crossbreeds no longer display species types instead of actual - names - YakumoChen: - - bugfix: Blacktar Heroin can be made into rocks again - dragomagol, unit0016: - - rscadd: Added lore terminals - for when leaving a scrap of paper on the ground - just won't cut it - softcerv: - - qol: SmartDart Pistols now show the inserted SmartDarts inside of them when examined. - theOOZ: - - code_imp: Flags bug snout not to use muzzled sprites + timothymtorres: + - bugfix: Fix mapped in cardhands not initializing properly timothymtorres, TheBonded: - bugfix: Fix books to only give mood bonus when read the first time + vincentiusvin: + - spellcheck: fixed the omega soap recipe not having bold on it's first line. + wesoda25: + - bugfix: Mulligan now properly randomizes ethereal color + zxaber: + - bugfix: Ripley mechs can no longer toggle to their nonexistant air tank. 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) - - 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 - and vice versa. - - imageadd: Added AP and Incendiary magazines for "croon" and "g11" subtype at - mags.dmi - - imagedel: Removed a few duplicate icons from mags.dmi - - spellcheck: Gun descriptions clarify whether they use 9x19 or 9x25. - - refactor: Added support for AP and Incendiary Magazines to Multi-Sprite Magazines - Gandalf2k15: - - bugfix: Autotransfer votes now function again + GoblinBackwards: + - balance: Fireball no longer has a 3 tile wide hitbox. GoldenAlpharex: - refactor: Refactored how legs are rendered, using dynamically-generated masks to avoid left legs always displaying over right ones, or right legs above left @@ -744,6 +819,61 @@ - bugfix: Realigns the DeltaStation holodeck to fit universal templates - bugfix: It is no longer possible to access cargo through maintenance without appropriate access on MetaStation + JohnFulpWillard: + - rscdel: 'The following job cartridges have been deleted: Detective, Lawyer, Janitor, + Curator, Roboticist and Scientist (without sensor pack).' + - balance: The following tablet apps has had their storage space cost lowered Robocontrol + 12 -> 6, Power monitor 9 -> 8, Budget ordering 20 -> 10, Power alarms 5 -> 4, + Science hub 16 -> 10. + - balance: You no longer need an MC Scanner part to use the tablet's remote signalling + device application. + - balance: Cartridges no longer let you run applications off of them, but you can + still download applications off of them. Additionally, applications that were + once on a roundstart cartridge (or were a program you had pre-Ntos PDAs) has + been moved to be downloaded onto your tablet roundstart. + - qol: The Eject Disk button on the tablet's UI has been moved to the very top to + not clutter your UI as much. + Melbert: + - bugfix: High blood pressure effect is now applied correctly by opioid addiction + - spellcheck: opioid is now also spelled correctly + - refactor: Jitterriness is now a status effect + - bugfix: The first stage of addiction now actually occurs. + RandomGamer123: + - spellcheck: Removes some erroneous "the" in some clown car messages + Son-of-Space: + - bugfix: varedited access reqs were removed from the service hallway on IceBox + so mapping helpers can function correctly + - bugfix: maintenance access returned to the library door on IceBox station + san7890: + - bugfix: Nanotrasen will no longer install two separate APCs in the prison wing + of IceBoxStation. +2022-05-13: + Ebb-Real: + - imageadd: Turned vapes into GAGS making them recolorable from vendors. + - imagedel: Removed the massive ammount of old icons for vapes. + Ghilker: + - bugfix: 'fix delimber anomaly from round removing you and other griefs remove: + delimber anomaly doesn''t change your organs anymore' + Guillaume Prata: + - qol: Removed Sutures/Ointment from the list of items you can hold in the exoslot + of your medical wintercoat as there is basically no reason for someone to carry + them on that slot and they kept getting placed there by the inventory shortcuts. + JohnFulpWillard: + - bugfix: Cult's antag UI now works from the start, rather than having to close + and reopen the tab to see your objectives. + - bugfix: Constable helmets no longer cause your hair to mysteriously disappear + when wearing one. + - bugfix: Jobs that are in several departments (like HoP, who is charged for Supply + but not Service) won't get charged lathe tax for any departments they are in. + MacBlaze1: + - bugfix: fixed dizziness causing hard crashes + Son-of-Space: + - bugfix: Realigns the DeltaStation holodeck to fit universal templates + - bugfix: It is no longer possible to access cargo through maintenance without appropriate + access on MetaStation + dragomagol: + - bugfix: non-cultists can now enter the pride ruin + san7890: - bugfix: On IceBoxStation, Ice Moon Ruins will no longer vent out all their atmospherics 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: @@ -751,73 +881,137 @@ infrastructure. Nanotrasen 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 - and reopen the tab to see your objectives. - - bugfix: KiloStation maintenance airlock in EVA is properly named + timothymtorres: + - qol: Add randomized lockers, reagent tanks, and atmospherics equipment to Meta + maint. + - bugfix: Fix ordnance lab having exposed windows peeping into maint. These have + been replaced with rwalls. - bugfix: Fix wizard modsuit not having antimagic protection - - bugfix: The new cult altar can't be spammed anymore. + wesoda25: + - qol: ethereals can now press the ghost button to cancel crystallization and permanently + vacate their body +2022-05-14: + Crumpaloo - Main Sprites, PestoVerde322 - Soda Cans, Vending Machines and Posters, ErdinyoBarboza - PR and Small Fixes: + - imageadd: All drinks and bottles have been resprited + Guillaume Prata: + - bugfix: Surgery tools will now give silver back when recycled. + - bugfix: Whistles are small now. Rejoice not having to carry a whistle that was + the size of a bucket while trying to be the referee for a match. + - balance: Tier 2 tools (Jaws of life/Laser scalpel/Experimental welder) are changed + from Small to Medium sized so now you can't carry 49 Jaws of life in your backpack. + JohnFulpWillard: - bugfix: The Captain's PDA now works, and their cartridge now spawns in their locker. - - bugfix: 'fix delimber anomaly from round removing you and other griefs remove: - delimber anomaly doesn''t change your organs anymore' + - balance: CPU, Sensor and Identify hardwares have all been removed from modular + PCs, this means AtmoZphere can run regardless of hardware, and running programs/updating + your PDA info, is no longer tied to hardware either. + - bugfix: Cook's CQC now properly works in the assigned areas outside the kitchen. + - bugfix: Cooks now properly get their Cook mail instead of just money. + - bugfix: Mapping configs can now once again set job position slots (and fully remove + jobs from maps that don't support them). - balance: Mini-fridges can now hold slightly more things. + - bugfix: The new cult altar can't be spammed anymore. + Melbert: + - bugfix: Fixes some wonky vote formatting + - balance: Central Command's agency of supernatural structures have made it much + less likely for you to come across ancient altars + SmArtKar: - bugfix: You can no longer use staff of storms to cheese the hell out of lavaland bosses - Zonespace27: - - refactor: Split Black Mesa area into many smaller ones + Son-of-Space: + - bugfix: Fixed several inconsistent or niche access requirements on TramStation + - qol: Replaced all access requirement vars on doors with mapping helpers on TramStation + - bugfix: KiloStation maintenance airlock in EVA is properly named + - bugfix: Fixed several inconsistent or niche access requirements on DeltaStation + - qol: Replaced all access requirement vars on doors with mapping helpers on DeltaStation + Sylphet: + - bugfix: removes extra air alarm in bar maint + dragomagol: + - code_imp: pod cloning logging is now in investigate botany fippe: - bugfix: Botany and Service firelocks in Icebox moved around to stop fire alarm spam - tf-4: - - bugfix: Joining sec no longer overrides your loadout with the default jumpsuit - in some cases - - bugfix: '"Move job to backpack" preference now indeed moves your job jumpsuit - to your backpack rather than deleting it.' + magatsuchi: + - bugfix: fixes broken admin ticket links 2022-05-15: - SkyratBot: - - bugfix: Multiple orbiting blades will no longer be used to protect you from the - same attack in case you have multiple instances of the status effect + FlamingCheese: + - bugfix: Removed that one firelock in icebox xenobio that caused the fire alarm + to trigger on roundstart + JohnFulpWillard: + - bugfix: There is now only one Tom in Deltastation permabrig. + - bugfix: Icebox's vault now properly has access requirements. + PestoVerde322: + - bugfix: fixed the icon behaviour of the manual valve + PositiveEntropy, Retlaw34, PacifistDalek: + - imageadd: Resprites the fire extinguishers once more! + RandomGamer123: + - bugfix: Biogenerators don't take 1% of a power cell to grind a single melon + SmArtKar: - balance: Hierophant trophy now deals damage that it was supposed to deal. - - qol: The bluespace gas sender can now be unwrenched in the same manner as a thermomachine. - - qol: The bluespace gas sender can now be turned on/off with ctrl-click. - - bugfix: suit_storage slot now shows the item it has equipped + Thunder12345: - admin: Attack logs for stripping people and equipping items to them have been reformatted to match all other attack logs, improving readability. - - bugfix: fixed the icon behaviour of the manual valve + VioletN: + - bugfix: Fixed the two primary traitor objectives calculating reputation incorrectly + at round end + - bugfix: Fixed the reputation value of objectives having a misplaced decimal point + in the round end report + YakumoChen: + - spellcheck: Boritos flavours have more flavour! + d0sboots: + - bugfix: suit_storage slot now shows the item it has equipped + san7890: - bugfix: If you ever chance upon Multi-Z Debug Station, rest assured that it now uses the right kind of space. - - bugfix: Biogenerators don't take 1% of a power cell to grind a single melon - Zonespace27: - - bugfix: Readded baseturfs to black mesa 2022-05-16: - SkyratBot: - - spellcheck: Boritos flavours have more flavour! -2022-05-17: + JohnFulpWillard: + - bugfix: Trying to fireman carry someone you can't fireman carry now properly makes + you not carry them permanently + MMMiracles: + - bugfix: Fixed a few areas on Tramstation where firelocks could enclose but had + no scrubber/vent. + - bugfix: The AI core cabling on Tramstation no longer loops between the solar panels + and the SMES. + MidoriWroth: + - qol: The Icebox kitchen was slightly expanded, giving it 3 more tiles of space + downstairs. + - bugfix: Finally gave the Icebox kitchen a condimaster. + OperativeLyn: + - bugfix: Removed a windoor inside of a wall in IceBox. PositiveEntropy, Azlan, Axietheaxolotl: - imageadd: Resprites all the Engineering Jumpsuits and Jumpskirts! - imageadd: Resprites the firesuit! - imageadd: Resprites all the hard hats! - imageadd: Resprites the insulated gloves and Chief Engineer gloves! - imageadd: Resprites the hazard vest! - SkyratBot: - - bugfix: fixes broken admin ticket links - - balance: CPU, Sensor and Identify hardwares have all been removed from modular - PCs, this means AtmoZphere can run regardless of hardware, and running programs/updating - your PDA info, is no longer tied to hardware either. - - bugfix: Trying to fireman carry someone you can't fireman carry now properly makes - you not carry them permanently - - bugfix: Fixed the two primary traitor objectives calculating reputation incorrectly - at round end - - bugfix: Fixed the reputation value of objectives having a misplaced decimal point - in the round end report + SmArtKar: - bugfix: Lightning bolt spell will give tesla shock immunity when granted by an admin + Son-of-Space: + - bugfix: miners have general access to the cargo bay + - bugfix: Fixed several inconsistent or niche access requirements on TramStation's + modular pieces + - qol: Replaced all access requirement vars on doors with mapping helpers on TramStation's + modular pieces + castawaynont: + - bugfix: fixes the position of some paintings in the Curator's office on Icebox. + vincentiusvin: - spellcheck: fixed an outdated quip about buying scipapers in the experiment status -2022-05-18: + xyc: + - bugfix: fixed the position of a few wallmounts in icebox's chapel. +2022-05-17: + Cheshify: + - balance: Snowdin.dmm is now in line with the design doc Dorsidwarf: - rscadd: Replaced table-crafting fried eggs with good old-fashioned frying on the chef's griddle. - bugfix: Changed the double-yolk sprite that only the fried-egg (And not foods using it) had to a single. + DragonTrance: + - refactor: Flora code is much more organized :) + - rscadd: Flora (trees, plants, etc) can be uprooted with a shovel, which can then + be dragged around. + - code_imp: Moved "kirbyplants" into their own .dm file, instead of just finding + a comfortable spot in flora code Melbert: - code_imp: Adds radial support to stack crafting. - qol: Cult buildings are now made via radial, instead of stack window. @@ -826,6 +1020,12 @@ SkyratBot: - balance: Sending PDA's to all is now configured by the WireCarp app, rather than being tied to Law office access. + RandomGamer123: + - bugfix: Tank compressors' icons now visibly update when being rotated + - bugfix: Tank compressors' rotation after reconstruction actually work properly + - code_imp: '`/obj/machinery/atmospherics/components/proc/connect_nodes()` actually + gets called on every node of the atmospheric component' + Son-of-Space: - qol: Security General access has been simplified - bugfix: Detectives ability to brig crew has been moved to skeleton crew access to fit the job function @@ -897,6 +1097,33 @@ tf-4: - bugfix: Tram and Icebox once again have gas miners. 2022-05-20: + SuperNovaa41: + - refactor: Turned the forensics component into a datum. + Tastyfish: + - rscadd: Tramstation now has crossing signals to help you not get hit by the tram + (or jump in front of it at the last minute for comedy value). + san7890: + - code_imp: If you're looking into patching out Active Turfs, the logging message + that alerts you to said Active Turfs is now a bit more verbose to getting you + put on the right track. + timothymtorres: + - qol: Change drunk blur effect to scale based on intoxication +2022-05-18: + JohnFulpWillard: + - balance: Sending PDA's to all is now configured by the WireCarp app, rather than + being tied to Law office access. + MTandi: + - bugfix: Experiments now work on non-station z-levels + Melbert: + - bugfix: Fixes mind restoration causing dizziness instead of healing it + magatsuchi: + - config: adds config to allow for name links in adminwho + oranges: + - bugfix: Slimes will once again feed on monkeys + san7890: + - config: In case you were really keen on using Virtual Reality Hub stuff in your + code, do keep in mind that we've removed references to it in config. +2022-05-19: Fikou, Onule: - balance: Doubles the range of the MOD Pathfinder AI - bugfix: Fixes modules rendering below MODsuits @@ -930,6 +1157,59 @@ - admin: Admins using the dsay verb will now have their rank(s) shown in a hoverable tooltip SkyratBot: + Guillaume Prata: + - balance: RCDs can't deconstruct reinforced tiles directly anymore. + Ivniinvi: + - bugfix: Admins can no longer unprotect globals. + JohnFulpWillard: + - rscadd: Charliestation now has a Supermatter and Gravity generator chamber. + - balance: Charliestation now requires the gravity generator to have functional + gravity. Its botany also has a biogenerator and nutriment vendor. + LemonInTheDark: + - bugfix: Artificers can see their action buttons again + Melbert: + - bugfix: Restart Votes work once more + MidoriWroth: + - rscdel: Removed some redundant cables in Kilo maints + ReinaCoder: + - bugfix: The bluespace pen slot has been removed from tablets. Now only tiny items + can fit, spray cans and smoking pipes are now small items meaning they will + no longer fit into pen slots. + SmArtKar, SpadesSlick: + - imageadd: New sprites for xenobio shield wall generators + Sylphet: + - rscadd: Added Spinward Smoothies Space Ruin + - rscadd: Added six types of smoothies + Timberpoes: + - config: Changes the policy.json index for polymorphed mobs from "polymorph" to + "Polymorph". + - config: Changes the policy.json index for the policy verb header from "policy_verb_header" + to "Policy Verb Header". + - bugfix: Due to the config changes, Polymorph policy text will now be shown to + players when it previously wasn't. + Zonespace27: + - bugfix: The bounty console should no longer lock up for certain jobs after making + a new bounty. + dragomagol: + - bugfix: circuit speech is now logged properly + fippefi: + - balance: Buffed PACMAN generators to make the map-spawned gens more usable as + backup sources of power. + - qol: PACMAN now tells you if it will use uranium or plasma when you screwdriver + the board + robbertapir: + - bugfix: Attacking people, atmos omni tanks, supplypods and paintings with deep-fried + items no longer shows an error sprite. + - bugfix: Animations for attacking people, atmos omni tanks, supplypods and paintings + with items are no longer black. + vincentiusvin: + - bugfix: fixed cryoxadone not working in crit, it now checks for general unconsciousness. + So things like oxyloss knock out is included. + - qol: If the state or temperature of your cryo ui is red that means cryoxadone + wont be able to work. + - bugfix: added a missing tank dispenser to kilo toxins. +2022-05-20: + Ghilker: - bugfix: supermatter cascade gas needed amount was broken and you'd needed around 200k Moles of antinob+hypernob (40% each at least) instead of "just" 20k Moles. - balance: 'changed how hypernob and antinob interact with the SM: heat capacity @@ -1028,6 +1308,49 @@ - bugfix: Fixes some airlock cycle links in Blueshift. - bugfix: Fixed Tramstation's Supermatter Engine APC. - rscdel: Took NSS Journey out of its misery. + Mothblocks: + - balance: Midround rolls will now happen more frequently, with their power scaling + up over time. + - bugfix: Fixed midrounds not logging properly. + Rhials: + - bugfix: Radstorms now yield to the almighty GODMODE flag. Rejoice. + - bugfix: Removes some stray wires in Tram med maintenance + Ryll/Shaps: + - admin: Admins using the dsay verb will now have their rank(s) shown in a hoverable + tooltip + SmArtKar: + - bugfix: Fixes solid plasma breaking into plasmaglass shards + SpaceSmithers: + - bugfix: Removes a duplicate table in the Laundry Room of IceboxStation + dragomagol: + - admin: AI malf/combat purchases are now logged in uplink.log + nickup9: + - qol: Department heads are now able to check their department budgets when examining + their ID. NT IRN has also been updated for clarity. +2022-05-21: + Fikou: + - bugfix: proximity monitors now work on stuff that was created inside it + LemonInTheDark: + - bugfix: Jetpacking in space without stabalizers feels good now + - bugfix: If you're pulling something in space, and release the pull, it'll follow + behind you properly + MidoriWroth: + - spellcheck: Tramstation botany's condimaster is now a sapmaster + NotRanged, SuperNovaa41: + - qol: There is a new verb in the Admin tab that lets you view your open Admin Help + ticket. + Rhials: + - bugfix: removes a stray windoor clipping into a wall in Tramstation science. + SmArtKar: + - bugfix: Fixes missing eye icon + - bugfix: Fixed vendors qdeling brains of GODMODEd admemes upon rolling a crit squash + - bugfix: Fixed 217-D Plasma Cutter and Exosuit PKA being uninstallable on ripley/clarke + Son-of-Space: + - refactor: Compartmentalized defines for access IDs and converts them from integers + to strings + - bugfix: Standardizes some access reqs on varedited objects like windoors and shutter + buttons + - bugfix: Some missed doors with access reqs instead of mapping helpers were fixed Vladin, Professional Cleaner Association Representative: - bugfix: Ceramic shards are no longer comically large, and can be fit inside trash bags for cleanup. @@ -1063,6 +1386,48 @@ - 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: 'Tram: Engine room external airlock access corrected.' + jlsnow301: + - refactor: Converted the airlock controller to TypeScript, added some visual effects + san7890: + - bugfix: 'Snowy floors should be snowy instead of being... Counter-Strike: Source + Missing Textures.' + - bugfix: The holodeck on DeltaStation will no longer vent all of its atmospherics + into space when a program is switched. Whoops. + tralezab: + - rscadd: Appraiser Skillchip is now available. + vincentiusvin: + - refactor: Refactored how the analyzer's last gasmix ui thing works. No gameplay + changes expected. + - code_imp: Reorganized tool usage code a bit. Also no gameplay changes expected. + wesoda25: + - rscadd: You can now emag tram crossing signals to disable their motion sensors +2022-05-22: + Dmeto: + - bugfix: Restores Captains pen and QM survial pen in respective Pdas + Ghilker: + - bugfix: fix sm shards dusting when wrenching + Iamgoofball: + - balance: Hitting someone in melee with the explosive lance now moves you to the + same tile as them before it sets off the grenade. + - bugfix: Petting 10 animals no longer counts as individual mood bonuses, and will + instead replace eachother. + JohnFulpWillard: + - bugfix: Cyborgs once again can't PDA people anymore. + - bugfix: Cell chargers no longer show up twice in Industrial Engineering's research + node, and APC modules don't look like a Golem shell. + Maurukas: + - bugfix: Icebox's AI sat is now connected to the main power grid + Melbert: + - bugfix: Rust and Blade ascension make you stun immune again + Mothblocks: + - admin: Added a new Puzzgrid smite + RandomGamer123: + - bugfix: Electrolyzers that are anchored no longer consume 5kW even when turned + off + SmArtKar: + - bugfix: Fixed ethereal revive crystal bugging out when buckled + san7890: - bugfix: Nanotrasen 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 @@ -1087,6 +1452,25 @@ Ghommie: - bugfix: Replaces the space turfs under the resin walls at the ghost cafe with dirt. + - spellcheck: There is now a space between the Staff's name and the thing that declares + them to be Staff in deadsay. + - bugfix: There are no longer two turfs on one tile in Hilbert's Research Facility. + In case you've stopped by and some portion of it has been oddly depressurized + (maybe? i dunno), you should be fine now. +2022-05-23: + Fikou: + - balance: Halves the damage of EMPs to MODsuit users to 5 from 10 + - balance: Puts EMP shields on the syndicate modsuit + - rscadd: Adds advanced EMP shield modules, they shield your whole body from EMPs. + Available in the nukie uplink + Ghilker: + - rscadd: Cascade rift is now a portal that teleports you to centcom evac instead + of dusting you. + - balance: There are more crystal walls spawned around the station and the timing + of the cascade has been changed to start the one minute countdown after the + portal has been eaten. + MNarath1: + - bugfix: fixes goliath not chasing people Melbert: - bugfix: Fixes a rare hard-delete with queen bees. - bugfix: Nuke cinematics should show up again, more often. Hopefully. @@ -1108,6 +1492,12 @@ portal has been eaten. - refactor: 'Improved UI for personal crafting: has category groups, better full-sized UI, more space-efficient and readable compact mode.' + MidoriWroth: + - bugfix: Removes the unnecessary light switch in Meta Station medbay central. + PK_Sonikal: + - rscadd: The Survivalist Bunker, occasionally found by space explorers, now has + a pharmacy for chemistry. + Rhials: - rscadd: Adds a new random event -- Scrubber Clog! Scrubbers may now randomly be clogged by mobs, which will result in them crawling out and getting all over the place. This can be fixed by pumping the scrubber with a plunger, or by just @@ -1187,6 +1577,35 @@ choose. - spellcheck: Fixed a few incorrect capitalisations 2022-05-25: + Son-of-Space: + - qol: Moved around some overlapping wall objects in engineering on IceBox + - qol: Removed a 2x2 wall in engineering on IceBox + - bugfix: Swapped the public mining APC with its directional subtype version on + IceBox + - qol: some sinks were added to medbay on icebox + - qol: a poster in the way of AI/ghosts was moved on icebox. + - bugfix: The rest of the overlapping wall objects on IceBox are no longer overlapping. + - qol: Improved the view underneath the Warden's Office on Tramstation + TemporalOroboros: + - rscadd: Smoke expands through newly opened airlocks if it hasn't finished spreading. + san7890: + - bugfix: Nanotrasen'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. + stylemistake: + - refactor: 'Improved UI for personal crafting: has category groups, better full-sized + UI, more space-efficient and readable compact mode.' + vincentiusvin: + - bugfix: fixed lavaland syndiebase atmos distro being unconnected + - bugfix: gave the lavaland syndie atmos it's atmos control computer back +2022-05-24: + Fikou: + - qol: the prototype modsuit is now shockproof + - bugfix: herald projectiles no longer have weird healing mechanics + Fikou, unit0016: + - rscadd: Chrono Legionnaire and Admin MODsuits now have the ability to hold mobs + with kinesis. GoldenAlpharex: - bugfix: The PDA Messenger app is now undeletable, unavailable for download and also no longer takes space on the hardware, something something bluespace cloud @@ -1216,6 +1635,16 @@ - bugfix: A few tails which were meant to be able to use the fluffy turf emote and couldn't, now can. - bugfix: ashwalkers can use quirks and not loadouts, as was intended + Iamgoofball: + - bugfix: Fixes the price on SOUTH. BRONX. PARADIIIISE! Again. + Maurukas: + - balance: Emagged chem dispenser in the deepstorage ruin is replaced with a regular + one. + MidoriWroth: + - bugfix: Removes a few redundant Icebox botany cables + Pepsilawn: + - bugfix: Fixed incorrect departmental signs on Delta and Meta, as well as the Caves + Gateway mission. timothymtorres, TheBonded: - rscadd: Added illiterate quirk that prevents a mob from reading or writing. This prevents using books, paper, tablets, computers and some other objects. @@ -1284,6 +1713,81 @@ - bugfix: Detectives no longer have access to gear lockers by default across all maps - rscadd: Lattices over chasms will now actually hold you up. +2022-05-25: + Melbert: + - bugfix: Wags-His-Tail and Eats-The-Roaches have wiggled their way back from a + deep space expedition to the janitorial closet of Deltastation. + MidoriWroth: + - imageadd: Beef stroganoff and berry tarts have new sprites + - bugfix: Removes an extra table in Meta atmos + SmArtKar: + - bugfix: Fixes stopping, dropping and rolling not extinguishing your clothing + Son-of-Space: + - bugfix: Fixed some names on objects across all maps + san7890: + - bugfix: If you've been paying to the Continuous Integration logs since... the + dawn of the creation of the "Create And Destroy" Unit Test, you may be pleased + to know that we should now no longer have mapping errors logged as a result + of that test running. + - rscadd: There's a new shuttle! You can now purchase "Basketballer's Stadium" from + your station's communications console in order to get some good time in bouncing + around a ball and making those sneakers squeak against the well-polished floors. + Enjoy! +2022-05-26: + Ghilker: + - imageadd: adds the podpeople photocopy ass + Jolly: + - bugfix: One of Trams modular maintenance doors had its access removed, in favor + of the already existing mapping helper. + MidoriWroth: + - imageadd: The beef stroganoff now actually looks like food. + Mothblocks: + - rscadd: Added a disposal bin to the medbay treatment center on Delta. + SmArtKar: + - rscadd: You can now open taps on fuel and water tanks, making them leak fuel/water + Son-of-Space: + - bugfix: SMES on the Zoo ruin no longer feeds into itself + - bugfix: The showers in the MetaStation Medbay are properly plumbed again + Son-of-Space, MrDoomBringer: + - bugfix: All airlocks across all maps have been properly titled in upper case + - code_imp: A check has been added to look for incorrectly titled airlocks + TemporalOroboros: + - bugfix: You can no longer forge hrefs to message everyone from any PDA. + Timberpoes: + - 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. + san7890: + - bugfix: On DeltaStation, Nanotrasen has made access from Medbay Maintenance to + the Recreation Area unrestricted. +2022-05-27: + ArcaneMusic: + - bugfix: Several non-functional prison management computers have been replaced + by functional computers. + FernandoJ8: + - bugfix: Hair dye spray now properly updates your sprite after being used + Fikou, Armhulen, InfraredBaron, SmartKar: + - balance: Removes shock protection from the security MODsuit + - balance: Removes the security MODsuit from the mechfab, still available in the + sec techfab + - balance: Buffs the carrying capacity of the security and safeguard MODsuits + - rscadd: Adds the megaphone (you speak loud) and projectile dampener (similar to + peaceborg one) modules to the safeguard suit + - rscadd: Adds the mirage grenade dispenser (it dispenses grenades that create holographic + copies of you) and criminal capture (dispenses prisoner capture bags, that lock + people in a pressurized environment) modules to the security suit + - balance: Makes pepper shoulders module 2 complexity + - qol: adds the plasma stabilizer and thermal regulator modules to every brig + Ghilker: + - refactor: sm cascade walls are no longer turfs, but are object, no player facing + changes + - bugfix: fixed announcement text and removed texts + JohnFulpWillard: + - bugfix: The Chief Engineer and Station Engineers no longer spawn with a broken + app- AmpCheck. You can still use said app from your Engineering consoles. + Jolly: + - bugfix: Scientists should now be able to access the mass driver on Kilo once more. + - bugfix: Kilo had some of its areas fixed. + MTandi: - bugfix: Gravgen now can't be repaired when not broken. - bugfix: Airlocks now properly say that they're welded when examined. - qol: Oldstation some internal windows are not reinforced to allow easier breaking @@ -1361,6 +1865,34 @@ - bugfix: Fixes an obvious oversight resulting in stacking inventory items to violate the laws of physics. Belts are now Bulky and do not fit in bags. - bugfix: Hair dye spray now properly updates your sprite after being used + Melbert: + - bugfix: Adds some minor sanity to the Lionhunter Rifle. + Mooshimi: + - rscadd: Lattices over chasms will now actually hold you up. + OrionTheFox: + - bugfix: added a name to the base jumpsuit type + Pandarsenic: + - qol: Ice Cream Sandwich bounties now specify in the description that they have + to be ice cream sandwiches, hopefully preventing possible confusion about which + foods are suitable. + SmArtKar: + - bugfix: Removed firelock in sci lobby window on Meta + - bugfix: Moved meta hallway air alarm so it wont get blocked by firelocks + Son-of-Space: + - bugfix: Detectives can now use the brig on emergency shuttles properly again + - bugfix: Access helpers were added to more shuttles + - code_imp: Added checks for several commonly misplaced structures + - bugfix: Fixed several overlapping structures on IceBox, Tram, and several CTF + maps + - code_imp: added access helpers for various off-station content + - bugfix: Detectives no longer have access to gear lockers by default across all + maps + Striders13: + - bugfix: fixed service order console not working + Sylphet: + - bugfix: fixes missing smoothie sprites + - imageadd: added smoothie sprites + fippefi: - bugfix: All request consoles on Icebox have been fixed to a new standard! No more Unknown request console sitting in the kitchen. - bugfix: Request consoles should more often default to a sane name instead of Unknown. @@ -1380,6 +1912,45 @@ new antagonist name. - spellcheck: blade heretic lore for how much silver it takes to make a blade is now correct + jlsnow301: + - qol: The genetics console is a bit easier to use with scrolling mutations and + tabs. + - admin: Added an debug data disk to test mutations. + san7890: + - rscadd: 'Nanotrasen has installed a new holodeck subroutine, cleverly termed: + Microwave Paradise. Enjoy those microwaves.' + - bugfix: If you haven't been able to see any working space ruins lately, that's + our bad. Should be fixed now. + - bugfix: To all the Multi-Z Debug Fans, we have now added a ceiling to one of the + airlocks. Enjoy that. + timothymtorres: + - bugfix: Fix transparent floors ignoring blur effects + - bugfix: Fix slime potions used on simple mobs to inherit all language abilities + from the user +2022-05-28: + Fikou: + - qol: you refill the modsuit plasma core with all your plasma at once + Iamgoofball: + - bugfix: Fixes an obvious oversight resulting in stacking inventory items to violate + the laws of physics. Belts are now Bulky and do not fit in bags. + JohnFulpWillard: + - bugfix: Tablet lights are now directional, like PDAs used to be. + JoshAdamPowell: + - spellcheck: Scrubber clog event will no longer end every area name in 'area', + like recreation area area. + Melbert: + - bugfix: Reactive Delimber armor works, for real + Mooshimi: + - qol: Ghosts will now see the name of who rolled the antagonist instead of the + new antagonist name. + RandomGamer123: + - bugfix: Plasmamen no longer burn in a much larger variety of situations (eg. full + atmos firesuit, space-proof suit but without gloves) that they logically shouldn't + (and previously didn't) burn in + SmArtKar: + - bugfix: Fixed most eye color effects not working + - bugfix: Fixed foam spreading through public airlocks and windoors + Thunder12345: - imageadd: Medals have been resprited and should now look 126% more swag. Wallem: - rscadd: Bug-based food items have been given their own foodtype. Lizards, Slimes, @@ -1403,6 +1974,10 @@ range. 2022-05-29: SkyratBot: + private-tristan: + - spellcheck: blade heretic lore for how much silver it takes to make a blade is + now correct + vincentiusvin: - balance: Made adv engi tech node require bz shells as an experiment, organs no longer need it. - balance: Adv mining no longer requires adv engi. @@ -1416,6 +1991,17 @@ - balance: Added more options to purchase nodes in the paper partners. Your point gain stays the same though. - balance: Removed roundstart BZ can from xenobio. +2022-05-29: + LemonInTheDark: + - balance: Smoke and foam can no longer continuously react their reagents + MTandi: + - imageadd: Changed light switch sprite and made it depend on the power availability. + - rscadd: Added microscope crafting recipe + - balance: 'Techweb: Moved cytology tools to a single node from different nodes' + - balance: 'Techweb: Operating computer now available before the experiment that + requires it' + - refactor: oldstation map size now 112x64 + SmArtKar: - rscadd: Added eyesnatcher objective which requires you to pull out someone's eyes. You will be given an automatic eye extractor to assit you in that. - rscadd: Added kidnapping objective which works similarly to old contractors @@ -1448,6 +2034,37 @@ - bugfix: Map votes will now happen again once the shuttle departs, regardless of whether your server allows everyone to start a map vote or not, as intended. Melbert: + axietheaxolotl: + - rscadd: Brand new HoP coat! + - imageadd: New sprites for HoP's uniform, skirt, cap, and the ID Painter. + - bugfix: HoP starts with laceups, not brown sneakers. +2022-05-30: + Fikou: + - bugfix: fixes airlock ai mapping helpers not working + - bugfix: chem master now lists a correct metabolization rate + Mooshimi: + - bugfix: Random windoor inside a wall in chapel maintenance on icebox is now gone. + - bugfix: There is now only one firelock in lower ordinance, instead of two in the + same door. + Son-of-Space: + - qol: access helpers have been added for the rest of our shuttles that needed them + - bugfix: Our away missions and ruins now use access helpers instead of varedits + - bugfix: access to medical laptops is now consistent across all stations + - spellcheck: Fixed the name of a shutter button on KiloStation + - code_imp: Reorganized the UpdatePaths folder +2022-05-31: + Comxy: + - imageadd: added new hallucination and delimber anomaly icons + - imagedel: deleted old hallucination and delimber anomaly icons + Fikou: + - bugfix: fixes crusher inhands being swapped + GoldenAlpharex: + - bugfix: Map votes will now happen again once the shuttle departs, regardless of + whether your server allows everyone to start a map vote or not, as intended. + Iamgoofball: + - rscadd: Aurora Caelus is now localized entirely within your station's kitchen. + Melbert: + - rscadd: The science breakroom on Icebox is in a slightly nicer state again. - bugfix: Chaplains no longer trigger their own anti-magic when they use Nullwave Vibrato. - code_imp: Reduced some copy+paste from sect music code. @@ -1475,3 +2092,24 @@ from command and medical's icons. - imageadd: the Quartermaster has a more command-coloured secHUD icon. - balance: Reagent katana no longer has ridiculous wound bonuses + ReinaCoder: + - qol: Head of Personnels rejoice! Their jumpsuit when adjusted no longer covers + the chest. + Ryll/Shaps: + - balance: Armor can now only block up to 90% of damage from projectiles, same as + for melee attacks + - bugfix: Pellet cloud attacks like buckshot and frag grenades now respect armor + damage reduction when rolling for wounds + Son-of-Space: + - qol: Access helpers were added to centcom + - bugfix: Some accesses in centcomm were made more consistent + Son-of-Space, Pepsilawn: + - code_imp: Adds checks for double firelocks or airlocks + - bugfix: fixes several double firelocks and airlocks across our maps + Urumasi, Meyhazah: + - imageadd: The H.E.C.K. suit has a new sprite. (by Meyhazah) + - rscadd: You can now use a spray can to completely recolor the H.E.C.K. suit. + tralezab: + - balance: Unique AI trait now gets rid of the station's DIFFERENT lawset modules, + and increases the research cost to unlocking them. + - qol: AI is given a printout of their new laws diff --git a/html/changelogs/archive/2022-06.yml b/html/changelogs/archive/2022-06.yml index 8ffa2731b733b..ec21873b01a8a 100644 --- a/html/changelogs/archive/2022-06.yml +++ b/html/changelogs/archive/2022-06.yml @@ -62,6 +62,74 @@ Ghommie: - bugfix: Stops the mold foam effects from having a station-covering range of 200. It should be 4/5 now. + Fikou: + - balance: The engilathe can now print plasma cutters. + - rscadd: Adds a chance for ID cards to be tastefully thick + - bugfix: reinforced windows can be heated up by things that can weld but arent + welding tools + Fikou, PositiveEntropy, Nerevar, InfraRedBaron: + - refactor: the ninja space suit is now a modsuit + - bugfix: fixes dash beams not working + JohnFulpWillard: + - refactor: Electrocuting faunas now causes them to target you, much like hitting + them. + Kylerace: + - bugfix: external organs show up now + Son-of-Space: + - bugfix: The trash driver on MetaStation now fires trash off the z level again + - bugfix: A scrubber pipe has found its way back to a scrubber in the engine on + MetaStation + - bugfix: Removed an inconsistent camera guarding EVA maints on IceBoxStation + - bugfix: two windoors were removed from walls on IceBoxStation + - bugfix: The turbine boards on the derelict have been mysteriously resupplied (spooky!) + - bugfix: removed some unnecessary varedits from some external airlocks + - bugfix: The APC in TramStation's Experimentor room is now accessible. + - bugfix: A floating intercom was removed from the same experimentor room + Wallem: + - rscadd: Adds a desk bell, so you can let the service industry know how much you + truly care about their hearing. + - imageadd: Ties have now been GAGS-ified + - rscadd: Ties now must be manually tied, allowing for both a classic and a "I just + woke up" look. + - imagedel: Removed inherent ties from several outfits. + axietheaxolotl for the human, armhulenn for the butt and nothing else: + - imageadd: Brand new human sprites! + san7890: + - bugfix: There is no longer a Prisoner Management Console in the space outside + brig on DeltaStation's Security. + - rscadd: On IceBoxStation, the permanent prison situation now has a firing range. + Don't worry, the guns are still fake and are about as useful as the laser tag + guns you already had. + - bugfix: The walls between the nuke ops base and the holding facility have been + tweaked a bit to ensure that when you load in the nuke ops shuttle that you + can't see the rocky walls of the holding facility. + vincentiusvin: + - spellcheck: gasmix reading on some atmos ui stuffs should no longer have funny + chars +2022-06-02: + ArcaneMusic: + - rscadd: Steam vents have been added to maintenance on all stations. Steam vents + create steam clouds that spray when crossed, and can be en/disabled by hand. + JohnFulpWillard: + - refactor: Wizard's warp whistle is now an effect that charges at the summoner + to pick them up, and will drop them down. + Melbert: + - rscadd: Cargorilla. + - code_imp: Removed a locate() in world from the evil PunPun trait + san7890: + - balance: IceMoon Fauna no longer regenerate health. This should make it a bit + easier to kill them in spots such as IceBoxStation. + - bugfix: Hellish Microwaves in the Holodeck no longer draw power. + scriptis: + - bugfix: androids no longer look like they were in the tanning bed for way too + long + tralezab: + - balance: Removed silver costs from surgery tools +2022-06-03: + Crumpaloo: + - imageadd: Added new sprites for the airlock painter, tile & decal sprayer. + Fikou: + - bugfix: surplus prosthetics have correct sprites now GoldenAlpharex: - bugfix: The stasis ripple effect will now play in a loop as intended, rather than only playing once. @@ -75,6 +143,7 @@ Melbert: - rscadd: Cargorilla. - code_imp: Removed a locate() in world from the evil PunPun trait + Melbert: - balance: 'Heretic: The Amber Focus is now fireproof.' - balance: 'Heretic: The Eldritch Medallion (thermal vision necklace) is now fireproof, acid proof, and works as a focus.' @@ -120,6 +189,18 @@ - imageadd: added new Sol Police uniform sprites to fit better in the modern sprite era. SkyratBot: + - balance: Cremator button has no access requirements + - bugfix: Light switches no longer cause anchored objects over conveyors to move. + Pandarsenic: + - bugfix: Shuffles objects to stop sprites from clipping or covering each other + (with differing levels of severity) on IceBox's overcrowded dormitory walls. + Ryll/Shaps: + - bugfix: Fixed pellet clouds not being able to wound + SingingSpock: + - bugfix: Changed triple citrus recipe to make 3u instead of 5u + Son-of-Space: + - bugfix: Some overlapping objects were adjusted on the walls in the firing range + on MetaStation - code_imp: Adds some greps to check for commonly misplaced structures in closed turfs - bugfix: Some objects stacked within closed turfs have been removed from those @@ -145,81 +226,109 @@ Melbert: - bugfix: Fixes some cinematics sticking around for longer than comfortable SkyratBot: + robbertapir: + - bugfix: Made engraving not throw errors when everything works as expected. + tralezab: + - balance: Engineering SMESes now start with a bit more juice. + vincentiusvin: + - qol: Added a roundstart program disk containing nt frontier + - code_imp: Changed ordnance's area definition a bit, this includes the misc labs + (usually used for circuit labs). Gameplay wise they will have new names. + - code_imp: Made the ordnance chamber injector start off. You gotta turn them on + using the monitors. Also tidied their code a bit. +2022-06-04: + Profakos: + - bugfix: Player-facing Traitor reputation numbers are now consistent when you view + how much you have. + Rhials: + - bugfix: Moves the scrubber out from under a vending machine in the Metastation + Meeting Room. + SmArtKar: + - bugfix: Fixed statue simplemob teleport not working and 3 other spells not appearing + Son-of-Space: + - bugfix: departmental officers' access across departments has been standardized, + and previously lost accesses were added back + - balance: Departmental security officers have access to more areas in their departments, + including xenobiology or virology + Zonespace27: + - admin: MODsuits can now be picked through the outfit manager + san7890: + - rscadd: On all five stations, Nanotrasen 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. + vincentiusvin: + - 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. +2022-06-05: + Son-of-Space: + - bugfix: A severe lack of plating under a window in the DeltaStation rec room was + remedied + dragomagol: - admin: cyborg wire pulses/cuts are now logged in silicon.log - admin: AIs being carded is now logged in silicon.log - admin: giving an AI a combat module is now logged in silicon.log - admin: trying to upload over the maximum number of laws is now logged in silicon.log - admin: ion storm law changes are now logged in silicon.log - admin: changing settings on a borg shell is now logged in silicon.log - - bugfix: departmental officers' access across departments has been standardized, - and previously lost accesses were added back - - 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 - a station in orbit. - - bugfix: fixed parallax blue stars showing through parallax asteroids. - - bugfix: Caught Molotovs no longer immolate the target. - - bugfix: right clicking the BEPIS no longer makes it invisible. + robbertapir: + - bugfix: held memorizers are now visible +2022-06-06: + Dragomagol, sprites by MistakeNot4892: + - rscadd: 'Added a new pAI holoform: the crow!' + EOBGames: - rscadd: 'A few new crates have made their way to cargo: buy yourself a Lizard or Moth food crate today!' - rscadd: Recipes for Yoghurt (10u cream, 2u virus food), Cornmeal (grind corn), and Quality Oil (1u quality oil, 2u cooking oil) have been added. Bon appetit! - balance: 'Species food (lizard and moth food) have received a sweep of balance changes: they''re now more filling and a bit easier to access.' - - bugfix: fixed a bigger dose of zombie powder permasleeping you - - bugfix: Durand shields no longer layer incorrectly or visually decouple from the - mech. + Iamgoofball: + - bugfix: Central Command no longer erroneously refers to the Ice Box planet as + a station in orbit. - bugfix: Under construction airlocks no longer have paper stuck to them. + Jolly: + - bugfix: One of Trams ladder hatches no longer uses a redundant "all-access" helper + to help you escape. The door in question already had no access requirements. + Looks-to-the-Moon: - bugfix: Xenomorph larva cancelling their evolution no longer displays unnecessary messages - - bugfix: held memorizers are now visible + Melbert: + - bugfix: Fixes some cinematics sticking around for longer than comfortable + Rhials: + - bugfix: right clicking the BEPIS no longer makes it invisible. + SpaceSmithers: + - bugfix: Electric razors are now functional again + kugamo: + - bugfix: fixed parallax blue stars showing through parallax asteroids. + magatsuchi: + - code_imp: replaces some slot names with proper names + robbertapir: + - bugfix: Caught Molotovs no longer immolate the target. + vincentiusvin: + - bugfix: fixed a bigger dose of zombie powder permasleeping you + - bugfix: fixed regular scientists spawning in RD's office in kilo 2022-06-07: + 13spacemen: + - rscadd: You can now add assemblies to welding fuel tanks to blow them up ATHATH: - rscadd: Bulky crowbars have been added to all fire-safety lockers. - spellcheck: Large crowbars are now named "large crowbars" instead of just "crowbars". - Deek-Za: - - bugfix: Fixed vests for Science, Medical and Service guard roles for digitigrade - people. - Ebin-Halcyon: - - imageadd: Cargo clothing have new sprites for digitigrade legs - - imageadd: Engineering clothing have new sprites for digitigrade legs - ErdinyoBarboza: - - balance: Rebalances costs of all shotgun shells in techfabs and autolathes. - - balance: Rebalances buckshots damage. It now has more pellets and damage but is - weak against armor. - - rscadd: 'Magnum Buckshot: Has less pellets that deal more damage and is now weak - against armor.' - - rscadd: 'Express Buckshot: Has more and faster pellets and tighter spread but - each pellet is weaker then normal buckshot.' - - rscadd: 'Hunter Shot: A specialized buckshot that deals more damage to simpler - beings (Anything that is under /mob/living/simple_animal)' - - rscadd: 'Hollow Point Slug: Deals more damage then slugs and has higher wounding - potential on bare targets however it is weak against armor.' - - rscadd: 'Flechettes: Specialized buckshot that can penetrate armor and deals cut - damage but is weaker damage wise.' - - rscadd: 'PT-20 Armor Piercing Slug: A saboted plastitanium slug that can penetrate - armor but deals less pure damage then normal slugs.' - - rscadd: 'RIP Slug: Radically Invasive Projectile, is capable of embedding and - causing massive internal damage but is weak against armor.' - - rscadd: 'B3-HVE ''Beehive'' shell: Smart Nanite-Rubber pellets that ricochet with - a very high auto-aim angle.' - - rscadd: '4NT1-TD3 ''Suppressor'' shell: A shell filled with electrodes that embed - into targets and deal stamina damage if they move.' - - rscadd: 'Iceshot: Iceblox round in buckshot delivery.' - - rscadd: 'Confetti Rounds: Some clown decided filling the buckshot with confetti - instead of pellets was smart.' - - rscadd: Adds Shotshell Boxes to Guncargo Dynamics. You can now buy boxes of 35/15 - ammo boxes of shotgun shells and carry them neatly in their bulky box. You can - also directly feed your shotgun from the box. - - balance: Rebalances some of the shotgun prices in guncargo. - - rscdel: 14 Gauge and SAS14 have been fully removed. - Higgin: - - bugfix: Corrections Officers now actually have weapons permits allowing them to - have their job gear. - IsaacTheSharkWolf: - - refactor: Redid the upper part of toxins to include the oxygen storage tank, mix - pipelines, cooling room and some additional adjustments to fit it all. + - bugfix: Unholy water's stun length reduction effect is now as potent as it was + intended to be. Its strength was previously half as strong as it was intended + to be due to a copy+paste error. + CocaColaTastesGood: + - bugfix: Fixes stack multiplier exploit + Fikou: + - qol: ninjas now get told about pinning modules and the direction to the station + - bugfix: fixes modsuits fucking up when unequipping every item, like staff of change + or slime toxin or whatever + Iamgoofball: + - bugfix: You can no longer roll more IDs to steal than there are crewmembers for + All Access Fan. + - bugfix: Firelocks no longer check the atmospheric contents of solid walls. + - bugfix: Health Analyzers now properly flag robotic and prosthetic limbs again. + Iatots: + - imageadd: Hot Cocoa and Tea now come in mugs again. Jolly, sprites by Blueshirtguy: - rscadd: 'Jolly: Added the flower garland to the crafting tab under clothing! You''ll need 4 of these flowers to craft it: poppies, harebells and roses. It''ll also @@ -321,6 +430,38 @@ - config: Add every AI lawset to game_options config - config: Rebalance AI lawsets in game_options config - bugfix: Lawsets overflow to behave correctly + Mooshimi: + - bugfix: There is now air in the Deltastation security escape pod airlock. + Mothblocks: + - bugfix: Fixed Adminwho taking several seconds to resolve. + Pandarsenic: + - bugfix: Corrected a couple of trivial typos. + RandomGamer123: + - bugfix: Nameless ID cards (with security access) can now access the security records + console without issue + ReinaCoder: + - imageadd: The Soviet costume has been resprited and the russian mobs have been + updated to match. + Son-of-Space: + - bugfix: You can no longer get objectives on a random tile in maintenance on TramStation, + along with any other area/based assignments. + - bugfix: You can now properly pull or cancel a fire alarm from outside the eastern + side of the library on MetaStation. + - bugfix: Inspect bounties no longer give you invalid areas to scan for bounties + - bugfix: Inspect bounties now properly choose from a broader range of assignments + in service, maintenance, commons, etc. + SpaceSmithers: + - qol: The Tip of the Round will no longer misinform you about PACMAN generators. + Wallem: + - rscdel: Full Ant Party Pizza pies has been removed. Instead, you can get ant pizza + slices by pouring ants on margherita pizza slices. + itseasytosee: + - balance: Some items are better at damaging structures and robots than others! + Don't try to kill a metal death robot with a scalpel, use a toolbox! + robbertapir: + - bugfix: Photon projector implants can no longer be used in assemblies. This means + that they can no longer bilocate. + san7890: - 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 Base commissioned. @@ -384,6 +525,35 @@ - imageadd: New plumbing duct sprites. - bugfix: Fire hallucinations are no longer invisible - qol: Fuel and water tanks have examine hints now + - balance: Nanotrasen 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. + silicons: + - bugfix: infinite loop on process_hit in projectiles when hitting ON_BORDER objects, + like windoors + timothymtorres: + - bugfix: Fix drones not being able to use computers or vault. + - bugfix: Fix monkeys being able to read or write. They are now illiterate however + they can gain literacy through the Clever mutation. + - bugfix: Fix illiterate mobs being able to receive tablet messages in their chat + log. +2022-06-08: + Guillaume Prata: + - balance: Eating clothing as Mothpeople will give you cloth fibers instead of nutriment. + Cloth fibers give temporary nourishment that gets removed when it finishes metabolizing. + JohnFulpWillard: + - balance: Station equipment that holds materials (techfabs, ORMs) can't connect + to ore silo's on a different Z level. + Paxilmaniac: + - rscadd: Solar panel assemblies and solar tracker electronics can now be made in + an autolathe + ReinaCoder: + - imageadd: Resprites the white costume found inside the costume vendor. + SnoopCooper: + - balance: BZ production rates between pipes and turfs are now consistent. O2 production + removed. + - bugfix: Multiplying production rates by splitting pipenets no longer possible. + Son-of-Space: - code_imp: Reorganizes some of the access and jobs access code for readability - balance: The minisat and tcomms are more accessible to engineering roles on skeleton crew, and engineers normally @@ -405,22 +575,86 @@ - bugfix: Minisats across all maps have proper access requirements to their contents - bugfix: Tech storage now uses its access properly and again requires both command and tech access to get to secure storage + Tastyfish: + - bugfix: The ID access reader and access checker circuit components now work again + with the new string-based access system. + - qol: Plumbing now supports 5 layers. + - qol: The plumbing constructor can now place ducts and change layer via scroll + wheel. + - bugfix: Bunch of cryptic failures and errors fixed in placing plumbing. + - imageadd: New plumbing duct sprites. + TemporalOroboros: - admin: Smoke now logs the last person to touch the source of the smoke as the last person to touch the smoke itself. Gunpowder smoke should be less annoying to log dive as a result as every explosion will log that person. - - bugfix: You can no longer create negative amounts of alloys in the ORM - - rscdel: you can't hold bread slices in your mouth (head) anymore. - - rscadd: you can hold griddled toast in your mouth (mask). - - rscadd: Solar panel assemblies and solar tracker electronics can now be made in - an autolathe - - balance: Traitor objectives have a significantly reduced reputation reduction, - making it more viable to gain reputation beyond the expected reputation. - - rscadd: Add hallucinogen poison to frog attacks + Timberpoes: - bugfix: Fixes issue where lobby buttons were still visable and usable under panic bunker x interview system and also allows use of fix chat verb for interviewees. - - rscadd: The Concealed Weapon Bay is available again for traitor Roboticists and - Research Directors. + private-tristan: + - bugfix: metastation xenobiology area no longer extends 1 tile into space + timothymtorres: + - qol: Playing Russian Roulette with lethal intent now creates a mood event for + the user and is engrained in any nearby peoples memories. The more bullets the + better the memory and mood boost. + - qol: Replace red colored beacons on solars/catwalk areas outside Meta to be colored + according to department (sec is red, medical is blue, etc.) + - rscadd: Add all AI lawsets can now be researched and have their modules printed + - rscadd: Add all AI lawsets to random spawners in AI upload + - rscadd: Add advanced AI techweb node + - balance: Change AI lawsets to be in different random spawner categories + - balance: Change lawsets chance for unique AI station trait + - balance: Move some lawsets out of AI techweb node and put into advanced AI node + - code_imp: Add documentation for AI lawset code + - config: Add every AI lawset to game_options config + - config: Rebalance AI lawsets in game_options config + - bugfix: Lawsets overflow to behave correctly +2022-06-09: + 13spacemen: + - qol: Fuel and water tanks have examine hints now + ATHATH: + - rscadd: Cloaks, like surgical drapes and bedsheets, can now initiate surgeries. + This change affects both head of staff cloaks and skill capes. + Guillaume Prata: + - rscadd: Gravity generator blackout is a new random event to spice the rounds. + - balance: High intensity gravitational anomalies that don't get neutralized in + time will trigger a gravity generator blackout. + Iamgoofball: + - balance: The Quartermaster is now a Head of Staff, and answers directly to the + Captain now. + - balance: This comes with all the stuff a Head of Staff normally has, like command + access, a telebaton, and a silver ID. + - balance: This also comes with no longer being eligible for Head Revolutionary, + and being a target for the Revolution. + - balance: Thanks to a savvy contract with the Space Teamsters, non-humans are allowed + to be Quartermasters still. + - balance: The HoP is no longer the lead of Supply, nor does he have access to Supply. + - balance: The Warden now carries the torch for pretender royal metabolism, as the + last remaining pseudo-head. + - code_imp: Removes a hack from the NT IRN code. + Iatots: + - rscdel: you can't hold bread slices in your mouth (head) anymore. + - rscadd: you can hold griddled toast in your mouth (mask). + Jakkie Sergal: + - rscadd: Added darker floor decals. + Jolly: + - bugfix: A small bit of Kilos arrivals area define was touched up and fixed. Asteroid + rock is not consider part of the station, sorry folks. + - qol: On Icebox, some of the warning tapes have been properly rounded off with + corners. + - bugfix: On Icebox, a vent and scrubber has been added to the primary hall the + arrival shuttle drops crew members off at. This should also stop this portion + of the hall from having atmos specific issues. + Melbert: + - bugfix: Dead bodies shouldn't keep jittering for ages. + - qol: Research servers are now a bit more clear about why they aren't generating + research points. Check the console for more info. If in doubt, turn them off + and on again (i'm not kidding). + - code_imp: Removed a buncha old, deprecated / unused R&D server code related to + them making heat. + Pickle-Coding: - bugfix: Fixes bzformation not working. + SmArtKar: + - bugfix: Fire hallucinations are no longer invisible TehZombehz for the sprites, san7890: - rscadd: For some reason, Donk Co. suddenly found a crate full of alien-themed plushies in their warehouse. They immediately started loading up their arcade @@ -490,70 +724,129 @@ administration team of this change so they can diagnose it properly from there. - spellcheck: Asimov++ no longer includes "In the case of conflict, the majority order rules." + Watermelon914: + - balance: Traitor objectives have a significantly reduced reputation reduction, + making it more viable to gain reputation beyond the expected reputation. + robbertapir: + - bugfix: You can no longer create negative amounts of alloys in the ORM + - bugfix: sechud/medhud buttons in examines now time out after 1 minute. This means + that a single examine will no longer allow you to track someone's identity and/or + health for the rest of the round. + timothymtorres: + - rscadd: Add hallucinogen poison to frog attacks + zxaber: + - rscadd: The Concealed Weapon Bay is available again for traitor Roboticists and + Research Directors. +2022-06-10: + Jolly: + - bugfix: On Tram, in sec, the floating pepper spray refiller has been removed from + the armory. You guys have enough, stop hogging it damnit! + - bugfix: On Tram, in the under tram, steam vents should no longer spontaneously + appear in walls. + PositiveEntropy: + - imageadd: Resprites the Captain's Antique Laser Gun! + ReinaCoder: + - bugfix: The QM now has a miniature e-gun in their locker on kilo like the other + heads! + tf-4: + - bugfix: Donksoft toy vendors no longer bluescreen. +2022-06-11: + JohnFulpWillard: + - bugfix: Space Dragons' expiring no longer deletes the people they had already + eaten. + LemonInTheDark: + - rscadd: Weather effects will now be a bit more subtle in darkness, hopefully this + looks nicer + - imageadd: I've done some resprites to snow and non smoothing lava + MTandi: + - qol: Portable pump In/Out button text replaced with source and destination. + Maurukas: + - bugfix: A manually edited APC in the deepstorage ruin has been replaced with an + APC of the appropriate type. + Melbert: + - refactor: Gunlight / Helmetlight behavior is now a component. + - qol: Gunlight / Helmetlight now uses balloon alerts. + Mothblocks: + - spellcheck: Asimov++ no longer includes "In the case of conflict, the majority + order rules." + RandomGamer123: + - bugfix: Fixes the layer of a scrubber in Icebox engineering + Watermelon914: + - bugfix: Skip time button on the steal objective now has a fast forward icon. + YakumoChen: - qol: Changed the position of light tubes in certain surgery rooms to not be directly over a surgery bed. No more smashing lights with your saw by accident! - qol: Aspiring AIs can now listen in on patient talk in Meta's primary surgery room. Or you could listen to the soothing sounds of the the crew dying from the comfort of a surgery bed when comms are down too, I guess. - - bugfix: Skip time button on the steal objective now has a fast forward icon. - - bugfix: A manually edited APC in the deepstorage ruin has been replaced with an - APC of the appropriate type. - - rscadd: Weather effects will now be a bit more subtle in darkness, hopefully this - looks nicer - - imageadd: I've done some resprites to snow and non smoothing lava + msgerbs: + - bugfix: There is no longer a random pipe in the wall in Metastation's Xenobiology + department. + san7890: + - config: Hey, server operators! Title music playing at the lobby screen is now + DISABLED by default in the config settings (game_options.txt). If you are not + hearing any title music, be sure to adjust your config. If you're a player reading + this and are sorely missing out on those soulful tunes, please notify your server's + administration team of this change so they can diagnose it properly from there. + tf-4: - balance: Pre-loaded PACMAN generators now have 15 plasma sheets, instead of 50. - Tastyfish: - - bugfix: Engineering and mining RCD's now work again. - - imageadd: Teshari backpack fallback sprites for the few that don't have real sprites. - - imageadd: Teshari modsuit control unit sprites. - Zonespace27: - - bugfix: Iceblox 12g can no longer make you hotter than the surface of the sun - gummardgumphrey: - - rscadd: Added new *laughtrack emote for synthetics to play on a whim! - softcerv: - - bugfix: organ damage now carries over while using the SAD along with brain trauma. - - bugfix: the SAD no longer heals brute and burn damage. - - code_imp: cleans up SAD code. - - bugfix: Blueshift now uses stasis beds instead of stasis pods. 2022-06-12: - IsaacTheSharkWolf: - - bugfix: Hopefully fixed most of the issues that were notified to me about toxins. - - bugfix: Added stasis beds to medical. - - bugfix: Redid blob spawns so they don't spawn in the middle of maintenance. + JohnFulpWillard: + - bugfix: The Warp whistle can be used more than once again. Melbert: - 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 - 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 - in a public dev channel if any sprite issues occur. - SkyratBot: + - bugfix: Ranged attacks hitting mech equipment no longer ignores mech armor + - bugfix: Melee attacks now damage mech equipment + - bugfix: Mech equipment is now properly disabled at 0% health + Mothblocks: + - bugfix: Fixed thieves/opportunists icon. + Son-of-Space: + - bugfix: Several pairs of external airlocks without cycle link helpers have had + them added on TramStation + YakumoChen: - bugfix: Fixed a symmetry issue with the lava clown puzzle where a lone chasm tile wasn't connected with its fellow chasms. - - bugfix: Abductors should now hopefully spawn in on their little alien pod rather - than on the station's arrivals shuttle. + san7890: - bugfix: Chaplains, CMOs, and Psychologists can now all rejoice that they start in their offices in Tram now, rather than take the shuttle. - - bugfix: Fixed thieves/opportunists icon. - - bugfix: Several pairs of external airlocks without cycle link helpers have had - them added on TramStation - - bugfix: The Warp whistle can be used more than once again. - Zonespace27: - - rscdel: Triangulate Weakpoint is not available below 80 crewmembers. - tf-4: - - bugfix: Squashed some exploitables weirdness. + - bugfix: Abductors should now hopefully spawn in on their little alien pod rather + than on the station's arrivals shuttle. + timothymtorres: + - rscadd: Add disease resistance to spaceacillin. It now gives 50% disease progression + slowdown, 75% to block disease infection, 75% to block zombie infection when + attacked, and 50% alien larva growth slowdown. 2022-06-13: - GoldenAlpharex for all the modular fixes, Kapulimbs for the original code: - - refactor: Organs have been refactored, especially external organs. Notify Golden - if there's any unexpected behavior. + Fikou: + - bugfix: floating now stops slips just as well as flying + - spellcheck: security mod theme no longer mentions being shockproof + - bugfix: fixes naked outfit giving people the ninja modsuit + JohnFulpWillard: + - bugfix: Ore silos can once again be synced to machines on the station on other + z levels, for multi-z maps. + MTandi: + - bugfix: Night shift lights now properly save power + - qol: APC buttons now have tooltips Melbert: - bugfix: Earthsblood makes you see colors again. - SkyratBot: + Mothblocks: + - bugfix: Fixed Dynamic midrounds spawning heavies significantly earlier than they're + supposed to + Rhials: + - bugfix: Jobs are no longer closed when the nuke detonates off-station. + Son-of-Space: - bugfix: Fixed overlapping objects on a tile in the foyer of the IceBox bar. + - bugfix: Some manual varedits on objects with cargo shipping access were fixed + to work again. - bugfix: A set of unpowered airlocks by the cooling loop on TramStation are now powered. + - bugfix: A rack stuck in a wall on the listening station ruin was removed from + the wall. + cacogen: + - balance: The default pirate ship now has a cell charger to recharge suit cells + castawaynont: + - balance: The Space Ninja's MODsuit has a storage module now. + kawoppi: - balance: removed JaniDrobe refill from the General Wardrobes Supply Crate and moved it to its own supply crate - balance: adjusted General Wardrobes Supply Crate price due to it containing one @@ -648,34 +941,111 @@ - bugfix: Chameleon neckties will no longer give you a missing-texture cape and a big ERROR icon by default. Trust me when I tell you this wasn't actually a good thing. - Zonespace27: - - rscdel: Ninja c4 objective no longer appears below 80 crew members on-station - dawsonkeyes: - - bugfix: .223 stinger rounds can now be loaded into the mk-11.4 rifle's magazine + Zonespace27: + - rscdel: Ninja c4 objective no longer appears below 80 crew members on-station + dawsonkeyes: + - bugfix: .223 stinger rounds can now be loaded into the mk-11.4 rifle's magazine +2022-06-16: + RimiNosha: + - code_imp: TTS devices now use TGUI + - code_imp: Changed keybinds for TTS devices to follow a similar format to everything + else + - code_imp: Noises made by TTS devices are now shown in chat as an emote, along + with a helpful balloon + - bugfix: TTS devices no longer output HTML escaped character codes instead of actual + text + SkyratBot: + - bugfix: updates donk pocket box examine text to be more accurate + - imageadd: The riot helmet has been resprited! + - bugfix: unrestricted wizard healing staff no longer tells you you are weak + - code_imp: Add atmospheric technician gas meter text tip + - bugfix: Fixes a weird edge case where anything that would prevent a storage closet + or locker from opening would instead cause stealth implant boxes to delete the + player inside them. + - spellcheck: The chat will no longer lie by saying you shoved yourself into the + closet when someone shoves you into a closet. + - bugfix: the flavor text for changing the transfer amount on the medical gel is + no longer backwards + - qol: Conveyor switches now tell you the speed setting of belts when examined. + You can change the speed with a multitool! +2022-06-17: + robbertapir: + - bugfix: stundprods and teleprods now stun again + - bugfix: igniters now work again + vincentiusvin: + - bugfix: fix h2/trit fires being too hot, outputting funny numbers, generally being + weird. +2022-06-14: + Son-of-Space: + - bugfix: A rogue windoor in a wall on Kilostation by the chapel in space was terminated + robbertapir: + - bugfix: Regal rats can now heal by eating all types of cheese, not just cheddar. +2022-06-15: + Iamgoofball: + - spellcheck: Nanotrasen has lost the rights to several popular confectionaries, + and has created "original" replacements. + Mothblocks: + - spellcheck: Adjusted description of moths eating clothes in preferences menu to + better reflect their current behavior. + SuperNovaa41: + - bugfix: Pill names now have a cap at 42 characters to prevent chat spam. + Timberpoes: + - bugfix: Fixes slips being broken again. + - bugfix: Fixes a weird edge case where anything that would prevent a storage closet + or locker from opening would instead cause stealth implant boxes to delete the + player inside them. + UDaV73rus, Tokoriso, dragomagol: + - rscadd: welding now has an animation! + dragomagol: + - bugfix: Renamed a few circuit boards to explain what frame they need + private-tristan: + - bugfix: kilostation solars no longer have plating and catwalks on the same tile + robbertapir: + - bugfix: the flavor text for changing the transfer amount on the medical gel is + no longer backwards + san7890: + - bugfix: Chameleon neckties will no longer give you a missing-texture cape and + a big ERROR icon by default. Trust me when I tell you this wasn't actually a + good thing. + timothymtorres: + - rscadd: Add dyslexia (illiteracy quirk) as a genetic mutation. + - rscadd: Add illiteracy as a effect for confusion disease symptom. 2022-06-16: - RimiNosha: - - code_imp: TTS devices now use TGUI - - code_imp: Changed keybinds for TTS devices to follow a similar format to everything - else - - code_imp: Noises made by TTS devices are now shown in chat as an emote, along - with a helpful balloon - - bugfix: TTS devices no longer output HTML escaped character codes instead of actual - text - SkyratBot: - - bugfix: updates donk pocket box examine text to be more accurate - - imageadd: The riot helmet has been resprited! + Fikou: - bugfix: unrestricted wizard healing staff no longer tells you you are weak - - code_imp: Add atmospheric technician gas meter text tip - - bugfix: Fixes a weird edge case where anything that would prevent a storage closet - or locker from opening would instead cause stealth implant boxes to delete the - player inside them. + Pickle-Coding: - spellcheck: The chat will no longer lie by saying you shoved yourself into the closet when someone shoves you into a closet. - - bugfix: the flavor text for changing the transfer amount on the medical gel is - no longer backwards + PositiveEntropy, WJohnston, Dragomagol, LemonInTheDark, Riggle: + - imageadd: Resprites most variety of tiles into a better shaded version! + - code_imp: Damaged floors are now damaged overlays, meaning that most tiles should + properly display a damaged state! + ReinaCoder: + - imageadd: The riot helmet has been resprited! + SovietJenga: + - balance: Moves the botanogenetic shears into the botany research node and locks + it behind a botany experiment + - balance: Removes the advanced engineering node requirement from the botany node + Striders13: + - bugfix: fixed a windoor in metastation warden's office being layered incorrectly + YakumoChen: - qol: Conveyor switches now tell you the speed setting of belts when examined. You can change the speed with a multitool! + alphanerdd: + - bugfix: updates donk pocket box examine text to be more accurate + private-tristan: + - bugfix: icebox science has a scidrobe again! + timothymtorres: + - code_imp: Add atmospheric technician gas meter text tip 2022-06-17: + 13spacemen: + - bugfix: Reagent dispensers will actually remove reagents upon leaking + AnturK: + - rscadd: Added fishing, fishing rods and other fishing equipment. + - rscadd: Fishing related cargo crates & private packs. + - rscadd: Fishing technology and designs + Fikou: + - qol: gps and ore bag modsuit modules are now usable when suit is off Guillaume Prata: - qol: APC construction/repairs/deconstruction uses balloon alerts now. - bugfix: The circuit board of the Book Inventory Management Console now use the @@ -684,48 +1054,64 @@ - bugfix: Some heretic focuses apply more consistently now. - bugfix: Furious Steel should go away more often than not now. - bugfix: Fixes the fireman carry "body stuck to you forever" curse + Iamgoofball: + - soundadd: Energy and Magic gunfire sound pitch now varies based on how much ammo + is left. + - soundadd: Ballistic gunfire now has a low-ammo click sound. + Melbert: - bugfix: Items getting knocked off (glasses and cigars), bad omens, and spaghetti falling from pockets should trigger on most knockdowns again like they used to. - code_imp: Cleaned up the knockoff component a bit. Also unit tests it. - SkyratBot: + - bugfix: Some heretic focuses apply more consistently now. + - bugfix: Furious Steel should go away more often than not now. + - bugfix: Fixes the fireman carry "body stuck to you forever" curse + ReinaCoder: - imageadd: The chaplain's jumpsuit and skirt has been resprited. - - rscadd: Added fishing, fishing rods and other fishing equipment. - - rscadd: Fishing related cargo crates & private packs. - - rscadd: Fishing technology and designs - - bugfix: Fixes infiltrator toolbox not fitting all suit parts - - bugfix: Reagent dispensers will actually remove reagents upon leaking - - bugfix: icebox science has a scidrobe again! - - bugfix: fixed grav gen being overridable/overloadable - - bugfix: Fixes mothic garlic pizza not producing the correct slice on slicing + SmArtKar: - bugfix: Fixed locate weakpoint do_after being 3 seconds instead of intended 30. Also you can no longer roll locate weakpoint until you get at least 20 minutes of progression via objectives - - qol: gps and ore bag modsuit modules are now usable when suit is off + SomethingFish: + - bugfix: Fixes mothic garlic pizza not producing the correct slice on slicing + Thunder12345: + - bugfix: The security office on Tramstation now has an air alarm + - bugfix: The water supply to Metastation's restrooms has been restored + - bugfix: Rocks will no longer grow into Tramstation's bar maintenance + - bugfix: A camera in IceBox's tech storage is now properly named Twaticus, Wallemations: - rscadd: '4 new emojis added to the joy mask! Check the AutoDrobe tweak: You can now use internals with the joy/emotion mask' - YakumoChen: - - bugfix: Security webbing can no longer be erroneously reskinned into sec belts. - Zonespace27: - - bugfix: Modules that work on inactive MODsuits now work properly - - bugfix: Circular saw should work as a weapon now - - bugfix: Borers can now leave their hosts again - - rscadd: Drifting Contractors are now a midround ruleset atteria: - imageadd: 3/4 sprites for MULEBots - theOOZ: - - bugfix: The xeno-tail can wag again, and does not get hidden when wearing a MODsuit + bob-b-b: + - bugfix: fixed grav gen being overridable/overloadable + - bugfix: Fixes infiltrator toolbox not fitting all suit parts + distributivgesetz: + - rscadd: Added new moodlet for cascades, for more FLAVAH! + - bugfix: Rifts should now spawn at least 30 turfs from the nearest mass, and now + no longer stalemates. + - bugfix: Rift code is now no longer just copypasted supermatter bump code! Godmode + players, rejoice, you can actually leave the station now. + - bugfix: Made shuttle behaviour more predictable, escape shuttle can no longer + end the round prematurely during a cascade, it will stall out in hyperspace + instead. + - bugfix: Supermatter warp effect should be removed correctly now. + - bugfix: Fixed emergency lights not giving off red light. + - bugfix: Bluespace rifts pick a safe turf in CentCom dock now. + - spellcheck: Improves almost all messages that play during a cascade. + - admin: Better logging about resonance cascade-related actions. 2022-06-18: Melbert: - balance: AI Gorillas are now allied to AI monkeys, and AI Cargorillas won't try (and fail) to wail on crewmembers. - SkyratBot: + Pickle-Coding: - bugfix: Fixes proto-nitrate tritium response requiring proto-nitrate bz response radiation energy requirement amount of energy to emit radiation pulses, and vice versa. - - imageadd: Adds an inhand sprite for the atmos gasmask - - imageadd: Updates the medical duffelbag inhand sprite + ReinaCoder: + - imageadd: The chef's hat, jumpsuit/skirt, and suit has been resprited + distributivgesetz: - bugfix: Shuttle hijack timeouts work now. jlsnow301 KubeRoot stylemistake Iamgoofball Kapu1178: - rscadd: Adds the TGUI say modal to replace speech input boxes. Many features! @@ -760,6 +1146,26 @@ - imageadd: The chef's hat, jumpsuit/skirt, and suit has been resprited - bugfix: the Chaplain's sparring sect now works on Kilostation again. - qol: Meta and Tram have autodrobes in dorms now. + theOOZ: + - imageadd: Adds an inhand sprite for the atmos gasmask + - imageadd: Updates the medical duffelbag inhand sprite +2022-06-19: + ArcaneMusic: + - rscadd: A white cane, an indicator that the wielder is blind, can now be bought + and crafted from medical vendors and iron rods respectively. + FernandoJ8: + - bugfix: the randomize_human proc now gives non-humans a name that matches their + species + Guillaume Prata: + - qol: Airlock painter, extinguishers, geiger counter, holosign projectors, inducers + and welding tools use balloon alerts on some of their more spammy/error actions + and have some useless `to_chat` messages removed. + - qol: Health and Gene analyzers give a balloon alert on a successful scan. + JohnFulpWillard: + - bugfix: the Chaplain's sparring sect now works on Kilostation again. + - bugfix: Kilostation's Xenobiology is no longer roundstart on firelocks, and the + security medical post now has a scrubber. + Pickle-Coding: - balance: Changes supermatter powerloss function. It will transition to linear powerloss function at 5.88076GeV, and the linear powerloss function has been offset so that the transition between the two functions is completely smooth. @@ -786,6 +1192,28 @@ - qol: Health and Gene analyzers give a balloon alert on a successful scan. IsaacTheSharkWolf: - bugfix: Burn chamber air alarm(s) should work now. + - rscadd: Gas canisters and other portable atmospheric machinery can now be packaged + with wrapping paper. + - rscadd: Replaces chat messages with balloon alerts for package wrapping related + failures. + Toastgoats: + - qol: Meta and Tram have autodrobes in dorms now. + bob-b-b: + - balance: Increased greed vending machine integrity and max items +2022-06-20: + ArcaneMusic: + - rscadd: Added several new goodie items to purchase through cargo, including translation + keys, mutadone autoinjectors, and a full RLD. + - code_imp: documented research_nodes and radios. + LemonInTheDark: + - code_imp: WAHHHH LIGHTING HAS CHANGED just backend mind. Please report any bugs + MTandi: + - bugfix: Fixed recycler bug that deleted the output stack because it was merged + with the input stack + - bugfix: Fixed recycler bug where it deleted stacks of 50 because it didn't have + enough space by removing recycle bins that reset its internal space from infinity + to the level of matter bin part + - qol: food now shows its type on examine Melbert: - qol: The Cursed Dufflebag now tells nearby people when it takes a bite out of someone. @@ -797,28 +1225,19 @@ dead, and doesn't heal if so. - bugfix: The Cursed Dufflebag no longer permanently makes you a pacifist and clumsy. - code_imp: Diggable component was changed to the Diggable element. - OrionTheFox: - - 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) - 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.) - - imageadd: CentCom/Armadyne/etc uniform/digi icons have all been moved into clothing/under/centcom.dmi - files in a continued organization effort. Please report any relevant Uniform - icon issues to @Orion_The_Fox#1915. - - imageadd: With this moving, Armadyne in particular has been given a bit of a makeover, - mostly just to be cleaner and in-line with current sprites. Credit to Halcyon - for the trenchcoat - and for making me need to add this CL entry. - PositiveEntropy, WJohnston, Dragomagol, LemonInTheDark, Riggle: - - imageadd: Resprites most variety of tiles into a better shaded version! - - code_imp: Damaged floors are now damaged overlays, meaning that most tiles should - properly display a damaged state! - RimiNosha: - - bugfix: The engineering deliveries windoor on Blueshift now actually allows engineers - to open it. - SkyratBot: + Mothblocks: + - bugfix: Fixed revolutions blaring alerts for a few seconds after winning. + - balance: Hacking the command console and winning revs no longer adds midround + threat. Instead, it'll force a heavy ruleset to spawn, and barring that, will + spawn a dangerous random event. + Paxilmaniac: + - qol: liquid plasma now points out in examine text that plasma can be collected + from it with a beaker + - bugfix: liquid plasma will now cool down gasses inside of heat exchanger pipes + to 100K instead of heat them to 5000K + SmArtKar: + - bugfix: Locate weakpoint objective now works again. + Watermelon914: - admin: Added a way for administrators to globally disable circuit component sound emitters. - balance: Further limited the sound emitter component so that maximum volume is @@ -885,6 +1304,11 @@ - bugfix: The Traitor eye snatching objective will now appear in-game. - bugfix: The Lavaland Mafia map now displays safer flooring over empty space. - bugfix: mulebots can be turned on/off + - bugfix: Fixed a runtime related to the TGUI white mode preference that would happen + every time someone would connect to the server. + JohnFulpWillard: + - bugfix: The Traitor eye snatching objective will now appear in-game. + MTandi: - rscadd: 'Oldstation: Added a lootbox for every role' - rscadd: 'Oldstation: Added 1 diamond ore spawn and 1 gibtonite spawn to asteroids' - rscdel: 'Oldstation: Removed redundant cable, pen, free pipe dispensers and the @@ -919,6 +1343,28 @@ - bugfix: N-T armories has finally fixed an assembly line issue, the SMG SABR actually comes with it's firing pin now. SkyratBot: + Pepsilawn: + - bugfix: The Lavaland Mafia map now displays safer flooring over empty space. + SmoSmoSmoSmok: + - bugfix: mulebots can be turned on/off + Thunder12345: + - bugfix: A camera in Meta's tech storage is now properly named +2022-06-22: + Capsandi: + - bugfix: some walls in the crashed ship ruin, they are no longer full-bright + CoffeeDragon16: + - bugfix: switching bodies, such as becoming a lich or mindswapping will no longer + revoke a wizard's access to their spell book + Paxilmaniac: + - rscadd: Glass floor tiles can now be made out of both plasma glass, and reinforced + plasma glass + Pepsilawn: + - bugfix: Kilostation's Greater Port Maintenance has had a missing area patched + up. +2022-06-23: + Cheshify: + - bugfix: The pride and gluttony ruins have had some minor fixes + MidoriWroth: - rscadd: Botany can now grow olives, which can be ground into a paste and mixed with water to make quality oil. - rscadd: You can now make custom sushi by using an ingredient on a seaweed sheet. @@ -959,17 +1405,56 @@ (and having a total of 140 rep.) Jolly: - spellcheck: Fixed a few iMpRoPeR door names in Deltas Perma. + Mothblocks: + - bugfix: Fixes laser pointer circuits crashing clients. + san7890: + - rscadd: Nanotrasen has now installed an HFR Room and an Atmospherics Project Room + on IceBoxStation. The Atmospherics Storage Room has also had catwalks installed + in to accomodate these rooms uninstalled around it. + - rscadd: The Atmospherics Loop on IceBoxStation has undergone some minor modifications + to accomodate "feeding" these new rooms. Notably, there is now a "minor" loop + on the lower Z-Level that you can push and pull gases towards to your (probable) + heart's content. + - rscadd: The AI Satellite, Incinerator, and some sections of Maintenance have been + shuffled around on IceBoxStation to accomodate these changes. +2022-06-24: + CoffeeDragon16: + - bugfix: getting your tongue removed will affect your speech again Melbert: - bugfix: Language encryption keys now only work when you've equipped the headset - bugfix: Language encryption keys no longer forever-grant you the language in some circumstances - bugfix: Language encryption keys now update when they're installed if you're currently wearing the headset - - rscdel: Removed a tip suggesting being a drunk scientists boosts research point - gain. This was removed at some point, but the tip remained, despite being incorrect. - RatFromTheJungle: - - rscdel: The STG has been banished from guncargo, back into the void it came from. - SkyratBot: + Tastyfish: + - bugfix: Opening wrapped crates now places them at the correct location. + antropod: + - bugfix: Randomized recipes (metalgen and secret sauce) are working again. + carshalash: + - bugfix: Jungle salad can now be eaten again + - bugfix: Eldritch nightmares were incorrectly added to the gold slime pool + dragomagol: + - qol: the cyborg hypospray now has a TGUI menu + theOOZ: + - qol: Rapid Lighting Device now fits in the utility toolbelt + timothymtorres: + - rscadd: Add magical reactions when hydroponics plants are hit with polymorph, + death, or resurrection magic. Plants with the anti-magic gene (holymelons) block + any kind of magical effect on the plant. +2022-06-25: + ArcaneMusic: + - bugfix: White canes now examine objects properly and sound correct when hitting + things. + Ebb, epochayur, SweptWasTaken: + - bugfix: Soap and biopsy tools now have suit storage sprites. + ElGood: + - imageadd: Bluespace RPED has unique inhand sprites + Gandalf2k15: + - refactor: Security level code has been refactored, please report any abnormalities + to the github. + Hamcha: + - bugfix: the message monitor console can now send admin messages again + Kylerace: - balance: 'the tram is now twice as fast, pray it doesnt get any faster (it cant without raising world fps) performance: the tram is now about 10 times cheaper to move for the server' @@ -982,6 +1467,20 @@ - bugfix: White canes now examine objects properly and sound correct when hitting things. - refactor: Renamed "delimber" anomaly to "bioscrambler" anomaly + Melbert: + - rscdel: Removed a tip suggesting being a drunk scientists boosts research point + gain. This was removed at some point, but the tip remained, despite being incorrect. + Pepsilawn: + - bugfix: Coffins' base sell price adjusted back to 100 credits as previously intended. + Rhials: + - bugfix: Supermatter cascade final objective no longer generates when the engine + has exploded. + SmoSmoSmoSmok: + - rscadd: You can attach a bell to your wheelchair + Son-of-Space: + - balance: The AIs freeform and purge law boards have been returned as a static + staple on all maps. + jlsnow301: - code_imp: Prettier is now recommended as an extension for UI development (or just in general!) - refactor: Many, many interfaces have been hit with the prettier stick so please @@ -1031,6 +1530,42 @@ Original code by SabreML: - bugfix: Items in the suit storage slot won't turn invisible anymore SkyratBot: + private-tristan: + - spellcheck: silver golems text no longer states that they are immune to most magic + skylord-a52: + - refactor: Renamed "delimber" anomaly to "bioscrambler" anomaly +2022-06-26: + Kylerace: + - bugfix: NanoTrasen has issued a ghost vaccine for the ghost virus that made ghosts + ghost deaf two days ago. now ghosts can hear again (as they are no longer ghost + deaf) + Profakos: + - spellcheck: fixes typos in ash lore + RandomGamer123: + - qol: Icebox atmos' shutters and airlocks are now transparent for better visibility + - bugfix: Fixed freon formation being nearly instant at most temperatures + Wallem: + - rscadd: Adds the Active Sonar Module, a module that allows the suit-wearer to + detect living organisms within a given radius. + castawaynont: + - bugfix: Allows Icebox's atmospherics APC to be accessible roundstart by moving + a console. + dragomagol: + - bugfix: advanced cyborg hypospray once again refills its chems + - qol: tochat for cyborg hypospray injections tells you which chem you injected + san7890: + - spellcheck: The exclamation point in the "Server Hop" verb has been deleted, which + now means you only need to type it in as 'server-hop'. Much nicer. +2022-06-27: + 13spacemen: + - rscadd: Added the current map to the hub entry + - qol: Shutters on Metastation have directions now + CoffeeDragon16: + - bugfix: regenerative core implants will automatically revive you again + Hamcha: + - bugfix: The decryption key to the Nanotrasen message network has been delivered + to the Syndicate Listening Post + IndieanaJones: - bugfix: Gorillas now change speed when holding something vs. not holding something, as was always intended - balance: Made gorillas use their old speed value when they're holding something, @@ -1090,6 +1625,29 @@ - bugfix: the hookshot bounty hunter, when summoned as an ert team member, is no longer identical to the armoured bounty hunter. - bugfix: bounty hunter IDs are no longer invisible save for the trim + - bugfix: People who gain or lose the monkified mutation no longer have invisible + equipped items. + MTandi: + - qol: 'UI: Added option to enter fullscreen mode to OOC verbs' + - qol: 'UI: Added option to hide the status/tooltip bar to OOC verbs' + - qol: 'UI: Made the chat input change colors according to the selected theme' + Mothblocks: + - balance: The amount of midround threat required for a midround roll has increased + slightly from 6.5 to 7. + - balance: Lowered the maximum threat level on sub-20 pop. + - balance: Lowered the number of roundstart traitors. + - server: Fixed "low_pop_minimum_threat" being incorrectly named. It has been changed + to "low_pop_maximum_threat". + Original code by SabreML: + - bugfix: Items in the suit storage slot won't turn invisible anymore + Paxilmaniac: + - code_imp: times for food items are now in X SECONDS format, functionality is still + the exact same + - qol: mining and labor shuttle home docks are no longer varedits of /stationary, + and are now their own subtype + Pickle-Coding: + - bugfix: Fix scrubbers not being able to be deconstructed when connected pipe disconnects. + RandomGamer123: - bugfix: Fixes nuke op reinforcements having no HUD icon when seen by other nukeops, nor being able to see the HUD icons of other nuke ops - code_imp: Fixed a runtime if update_sight is called on a mob whose client has @@ -1101,6 +1659,16 @@ theselfish: - spellcheck: A certain cracked pocket watch's description ends better. 2022-06-29: + private-tristan: + - balance: the meteor with engines strapped to it now has air in its rocks + san7890: + - bugfix: Nanotrasen hired a contracting company to completely re-do the Metastation + brig, but the commanding official was chumped- and was left with was a few decalling + changes and some re-piping. How ultimately odd. + - qol: Nanotrasen 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. +2022-06-28: 13spacemen, Gandalf2k15: - rscadd: Examining and other chat outputs now display in blocks to make them easier to see @@ -1126,6 +1694,68 @@ - code_imp: times for food items are now in X SECONDS format, functionality is still the exact same - rscadd: Adds a special Medical ERT belt + gives it to medical ERT + CoffeeDragon16: + - bugfix: plasma glass floor tiles will no longer sometimes be invisible + - bugfix: pianos will now look broken when they are damaged + - soundadd: pianos make a DONG sound when hit + Comxy: + - bugfix: Fixes martial arts auto reset bug. + GoldenAlpharex: + - bugfix: Snail people are no longer too shy to show their eyes, and will now expose + them out for everyone to see them, once more. + Melbert: + - bugfix: Frozen stuff is now properly actually recognized as frozen and won't re-freeze. + - refactor: Refactored how Knock (spell) tells stuff to open up, makes it easier + to add more knockable things. + Paxilmaniac: + - bugfix: fixes the ocean in the beach gateway having a different gasmix than the + sand, making the place unbreathable + Profakos: + - bugfix: Tramstation aux construction console works again as intended. + - bugfix: the hookshot bounty hunter, when summoned as an ert team member, is no + longer identical to the armoured bounty hunter. + - bugfix: bounty hunter IDs are no longer invisible save for the trim + RandomGamer123: + - spellcheck: Fixed a lack of line breaks in the operating computer when displaying + surgeries with required chemicals + Son-of-Space: + - rscadd: derelict1.dmm was overhauled into a derelict version of the Sulaco bridge + Y0SH1M4S73R: + - bugfix: The runic knight helmet's worn sprites have had their alignment fixed. + cinder1992: + - rscdel: Delta-pattern station quartermasters no longer have to listen to the sound + of a fire alarm every time their miners use the mining shuttle. + dragomagol: + - bugfix: Broken tiles (as seen in places like caravan ambush) now match our smooth + iron tiles + san7890: + - bugfix: The Chief Engineer's Keycard Authentication Device is no longer covered + by a electric sign on IceBoxStation. + - bugfix: Disposals will no longer now empty out in the middle of IceBoxStation's + maintenance tunnels. +2022-06-29: + Guillaume Prata and Wallem: + - rscadd: Botany starts with watering cans instead of buckets now. There is also + a research locked advanced watering can which generates it's own water. + JohnFulpWillard: + - bugfix: the Gravity Generator no longer plays several looping sounds. + - bugfix: Oldstation's gravity generator now properly spawns off. + Melbert: + - bugfix: Service members can access the service dorms on Deltastation again + - bugfix: Miners can access the shipping office on Deltastation again + RandomGamer123: + - 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 + Salex08: + - spellcheck: The Brand of Dance description is correct now + - bugfix: headpikes can be made again. + Sebbe9123: + - rscadd: Adds a special Medical ERT belt + gives it to medical ERT + Y0SH1M4S73R: + - bugfix: Fixed a runtime that occurs when inflicting a blunt wound on an armless + human. + jlsnow301: - bugfix: TGUI Say now retains current messages / keying through history doesn't erase your current message. - bugfix: TextArea keydown prop has been renamed so as to not trigger double keydown @@ -1147,6 +1777,23 @@ Melbert: - bugfix: Comms console hacking will be interrupted if the comms console itself is destroyed or depowered. + san7890: + - rscadd: Ice Box Station's got a new look. Notably, the cold room is on the bottom + floor with the kitchen all being up on the upper Z-Level +2022-06-30: + 13spacemen: + - imageadd: Shutters and window shutters on all stations are now directional + Melbert: + - bugfix: Comms console hacking will be interrupted if the comms console itself + is destroyed or depowered. + - bugfix: Cult sacrificing someone with a soul will no longer give you an empty + soulstone when it should give you a filled one. + - bugfix: Using a soulstone on a soulless corpse will now properly poll ghosts and + allow a new shade. + - bugfix: You can no longer capture spirits with soulstones you can't even release + spirits from + - bugfix: You can no longer hypothetically capture yourself with a soulstone + - code_imp: Some cleanup on aisle soulstone. - code_imp: The blood walk element has been changed from a bespoke element to a component. - code_imp: MULEs now use the blood walk component. @@ -1166,6 +1813,9 @@ - imageadd: The Makarov pistol has been resprited - imageadd: The Ghoulbot now has a new sprite matching the new 3/4 mulebot sprites - imageadd: Rootbread slice toppings have a sprite now. + Profakos: + - imageadd: Rootbread slice toppings have a sprite now. + RandomGamer123: - bugfix: Removes a method that allows xenobiologists to produce slimes of every colour and bypassing the intended progression sequence by making the disease induced by advanced mutation toxin only produce grey slimes unless the infected @@ -1185,3 +1835,13 @@ - rscdel: removed the draconic necklace, skeletal key, and ashen staff recipes -- placed into rituals - bugfix: fixed icewalker nest named "ash walker nest" to "ice walker nest" + ReinaCoder: + - imageadd: The Ghoulbot now has a new sprite matching the new 3/4 mulebot sprites + - imageadd: The Makarov pistol has been resprited + Salex08: + - qol: Added a new tab for the autolathe which allows you to dispense not only iron + or glass but all the mats you put in + - bugfix: Fixes missing "=" operator in autolathe + nichlas0010: + - bugfix: The Orion Trail's Realism Mode works again, triggering negative events + for the player diff --git a/html/changelogs/archive/2022-07.yml b/html/changelogs/archive/2022-07.yml index 8192fd0f22f3b..544eeea2740d1 100644 --- a/html/changelogs/archive/2022-07.yml +++ b/html/changelogs/archive/2022-07.yml @@ -54,40 +54,33 @@ error sprites appearing - rscadd: Furry Pride Spraypaint added to spray cans - rscdel: Y##f In H##l Sprapaint removed from spray cans + Guillaume Prata: + - qol: Hypernob Protection (given to plasmamen that are breathing Hypernob as gas) + is a status effect now and gives better feedback to the user. + - balance: Hypernob Protection gives a small slowdown. + Hamcha: + - bugfix: The agent card now correctly allows you to take anyone's identity, even + if their name contains numbers + OrionTheFox: - bugfix: Chainsaws can now actually cut wood! So can the giant axe that is the PKC, and other chainsaw items - but, alas, esword handles alone can not, and you must actually turn them on. Also, all mining implements can mine scattered stones as well! - bugfix: Chainsaws are now faster when they are on, and slower when they aren't. - - bugfix: The agent card now correctly allows you to take anyone's identity, even - if their name contains numbers - - bugfix: the Gravity Generator no longer plays several looping sounds. - - bugfix: Oldstation's gravity generator now properly spawns off. + Salex08: + - bugfix: blacklists placeholder food items in the random food generator which caused + error sprites appearing + ShizCalev: + - qol: Gas filtering cloth are now smaller and can fit inside boxes! + chesse20: + - rscadd: Furry Pride Spraypaint added to spray cans + - rscdel: Y##f In H##l Sprapaint removed from spray cans + jlsnow301: - code_imp: Refactored a large number of TGUI interfaces into TypeScript. If something's broken, report it! - - imageadd: Shutters and window shutters on all stations are now directional - StrangeWeirdKitten: - - qol: Indestructable Turf on the ordnance test range. This will stop bombs from - dropping to the second level. - - qol: Ordnance access added to the exterior airlock beneath ordnance. - - rscadd: High Heels are now added to GAGs - - rscadd: Black heels are added into the loadout - - rscadd: Latex bra, panties, and socks are added to the underwear menu. - - balance: Corset and Chaps are no longer ludicriously expensive - - bugfix: Colourable cloth wraps now show color on digigrade species. - - imageadd: New Various Latex Sprites - Tastyfish: - - bugfix: Fixed a few bar sign choices that were broken. - tf-4: - - spellcheck: Fixed a typo in the airbag element examine, as well as a tiny adjustment - to the sentence structure. - theOOZ: - - rscadd: Ghosts and antags can now view a character's background info + private-tristan: + - bugfix: metastation library no longer has 2 air alarms 2022-07-02: - GoldenAlpharex, manually mirroring upstream PRs by carshalash, ShizCalev and jlsnow301: - - bugfix: Eldritch nightmares were incorrectly added to the gold slime pool. - - qol: Gas filtering cloth are now smaller and can fit inside boxes! - - bugfix: Fixed a bug that made the hacking status display not appear. Guillaume Prata: - qol: Clown/Mime survival boxes won't have a mostly pointless breathing mask, as their basic mask can be used for internals. @@ -148,59 +141,33 @@ Meyhazah: - imageadd: new sprites for the Chaplain's crusader, ancient, profane and follower outfits. - Nerev4r: - - bugfix: Snail eyes are recolorable. For real this time. On God. - Paxilmaniac: - - bugfix: a few instances of funny (tm) and wacky (tm) roundstart loot spawns on - blueshift have been fixed - SkyratBot: + NotZang: - qol: Consistency with the other bot's examination text. + Salex08: + - admin: Admins can now cancel midround random events + TheBoondock: - bugfix: fixed telekinesis teleporting gun shenanigan + jlsnow301: + - bugfix: Fixed a bug that made the hacking status display not appear + lizardqueenlexi: - bugfix: Limb growing code now uses species_color instead of mutant_color for synthetic limb coloration - Tastyfish: - - qol: The interlink shuttle now has status displays. - Zonespace27: - - refactor: Command pets, the command outfitting station, and secmed locker are - now called in through deployment beacons, found in their respective lockers - (pets and outfitting in head of staff lockers) or on their person (secmed's - locker). - tf-4: - - rscadd: You can now buy hunter buckshot in the mining vendor. - - bugfix: Hunter buckshot in cargo now reports the right amount per box. + necromanceranne: + - imageadd: Improves the sprites for bullets, thermal projectiles, and introduces + pellet sprites. + orthography: + - bugfix: fixes intercoms being the incorrect state. + san7890: + - bugfix: Chefs on IceBoxStation will now start with eggs and milk again. 2022-07-03: - GoldenAlpharex: - - bugfix: Fixed the "Return" spell for the Bluespace Technician (and all of the - quick IC spawned humans). - - bugfix: Fixed gun safeties and fire mode toggle being inaccessible. - Jolly: - - bugfix: Delta arrivals should be fixed. If you didn't notice anything, well, congratulations!! - tf-4: - - rscdel: Hunter buckshot is now inaccessible -2022-07-04: - Gandalf2k15: - - bugfix: Summon beacons now function again. - Ghommie: - - bugfix: fixed the augments tab in the character menu not working unless you had - "Allow Mismatched Parts" enabled. - Jolly: - - bugfix: On BlueShift, an external airlock near sec has had its all access define - fixed. - - bugfix: on BlueShift, the active turf generated from the indestructible file has - been fixed. - - bugfix: On BlueShift, Starboard Maintenance is no longer wedged in Atmos, its - been replaced with "Lesser Atmospherics Maintenance". - - bugfix: For Ice Ashwalkers, atmos related mishaps shouldn't be an issue anymore. - Or maybe you didn't notice the air is now always cold. - - bugfix: On BlueShift, the reported missing turnstiles have been replaced with - sec doors. They'll also cycle with the other doors in the small area. - Melbert: - - code_imp: Some traits which mistakenly were sourced from a hard reference are - no longer. - SkyratBot: + Pepsilawn: + - bugfix: Kilostation's Supermatter was made more consistent, it will no longer + start with its pumps lacking pressure target checking. + Y0SH1M4S73R: + - bugfix: Maids in the Mirror are unaffected by the gaze of ghosts + chesse20: - rscadd: Furry Pride large spraypaint added to spraycans - - rscdel: removes movement and combat mode from the status tab - - bugfix: fixed crystalizer passing any item as the user and causing a runtime + san7890: - qol: There is now a new preference in Game Preferences, Suppress All Ghost Rolls. If you tick this preference, you will not get a singular window pop-up whenever a Ghost Role is available. Intended for the few who really do need it. @@ -216,6 +183,23 @@ - code_imp: The urban coat now uses GAGS. - code_imp: The polychromic duster and peacoat have been converted to GAGS. 2022-07-05: +2022-07-04: + Melbert: + - code_imp: Some traits which mistakenly were sourced from a hard reference are + no longer. + Salex08: + - bugfix: you start with the right amount of breathing mask again + TheBoondock: + - bugfix: fixed crystalizer passing any item as the user and causing a runtime + - balance: Pluoxium now heals oxygen damage when breathed + jlsnow301: + - refactor: Orbit UI has been reworked. + san7890: + - bugfix: Okay, this time I promise you have eggs and milk in the IceBox Kitchen. +2022-07-05: + Fikou: + - balance: The supermatter running into you is no longer just as deadly as you running + into the supermatter. Guillaume Prata: - qol: Miners rejoice! A few of the mostly useless and spammy messages that get send to your chat were changed to balloon alerts or straight up removed. Hopefully, @@ -248,6 +232,52 @@ capsaicinz: - bugfix: corp. reg. manual is now readable. - config: set the skyrat wiki link to the most up-to-date one. + JohnFulpWillard: + - bugfix: Thief's preference icon has been fixed, and now properly has hair. + Mooshimi: + - rscdel: Removed the lightbulbs inside the Ordinance burn chambers on Kilo and + Icebox. + - rscdel: Removed the mask sign inside the turbine burn chamber on Icebox. + RandomGamer123: + - bugfix: Adds an air scrubber and vent to a section of hallway that was without + them on MetaStation. + Salex08: + - bugfix: fixes a major oversight with steal gun objectives + magatsuchi: + - code_imp: removes a stray verb call from the status tab + - rscdel: removes movement and combat mode from the status tab + necromanceranne: + - code_imp: Added code functionality for autofire windup and resetting, both redefinable. + Nothing uses this code just yet! + - bugfix: Ensures pirate outfits and justice suits are actually able to protect + from damage, as their armor values suggests they should. + - bugfix: Stops golems from wearing the armored versions of the pirate outfits. + vincentiusvin: + - refactor: Changed how canister calculate their overpressure/overtemp damage. No + gameplay changes expected. + zzzmike: + - bugfix: head of staff announcement added to QM + - bugfix: QM added to job blacklist (like other command members are) + - bugfix: QM added as command in CrewManifest.js +2022-07-06: + Guillaume Prata: + - imageadd: The QM's RPG trim icon got updated to use Command's blue instead of + the old cargo brown. + Iamgoofball: + - bugfix: Fixes the Herald being able to drag it's mirror around. + - bugfix: Fixes the Structural Weakpoint Objective to do a normal, smaller explosion, + especially on Lowpop(~20) and gives the objective a lower weight. + Melbert: + - balance: Nettles and Deathnettles are now normal sized, up from tiny. (Number + per plant bag has decreased from 100 to 33.) + orthography: + - bugfix: icebox pumps now match the standard of every other map + - bugfix: gives access to the APC as the AI, and adds more camera coverage where + it belongs. + timothymtorres: + - bugfix: Fix Confusion and Self-Respiration virus symptoms to appear at final stage. + vincentiusvin: + - admin: experiment completion are now logged in research.html 2022-07-07: Crumpaloo, jlsnow301, JohnFulpWillard: - rscadd: Typing indicators now use your speech bubble type, rather than all being @@ -275,6 +305,21 @@ tf-4: - bugfix: Modular contraband seeds in the seed vendor are now contraband once again. 2022-07-08: + Mooshimi: + - refactor: Reworked the wiring in AI Sats incorporating multiple layered wiring. + dragomagol: + - bugfix: pAI screens light up with an alert when there's a personality to download! + lizardqueenlexi: + - bugfix: made plastic flaps in MetaStation deliveries area transparent + orthography: + - bugfix: Fixed sec vestibule maintenance + - bugfix: fixed metastation atmos areas. + stylemistake: + - bugfix: Fixed "Script Error" in tgui and tgchat (hopefully). +2022-07-08: + CursedBirb: + - bugfix: Qm coat can carry telebaton + - refactor: Qm coat is a subtype of department coat like other heads clothes Guillaume Prata: - qol: You fold roller beds and bodybags with a right click instead of click and dragging into you. @@ -327,6 +372,45 @@ - bugfix: Fixed scrolling the orbit ui - admin: Get-Current-Logs and Get-Server-Logs now let you download entire folders at once + Pepsilawn: + - bugfix: Kilostation had a few areas in space around the ordnance test site fixed + up. + Profakos: + - bugfix: corrected the minimum player count of a few disease events + VioletN: + - bugfix: The changeling tentacle power now properly functions the way its description + says it does. + Zonespace27: + - code_imp: Code for Academy, Challenge, Spacebattle, and Wild West away missions + has been removed + jlsnow301: + - bugfix: Syndicate fission360 apps work again + lizardqueenlexi: + - bugfix: fixed an incorrect disposals junction in Tramstation Medical department + orthography: + - balance: removes the BMP spawns that are out in bum-fuck nowhere. + - bugfix: fixes the lack of air in the BMP asteroid spawns. +2022-07-09: + 13spacemen: + - rscadd: Experimental Syndicate Teleporter is now available in the Traitor Uplink + for 8 TC. Warning, not as safe as Nanotrasen Teleporters. + Fikou: + - bugfix: ethereals no longer revive after being changeling drained + GoldenAlpharex: + - bugfix: Fixed trapdoors freaking out when you destroy their floor tile without + having a remote attached to said trapdoor. + LemonInTheDark: + - bugfix: Thermomachines will properly have a dropshadow + - bugfix: Weather will be blurred as expected + Melbert: + - bugfix: Dashes such as the Heirophant staff and Ninja sword should no longer permanently + break on rare occasions. + QuacksQ: + - spellcheck: Fixed the desc of paper walls + Sheits: + - bugfix: Fixes a stray pixel on female human sprites + Toto5561: + - imageadd: Added new bacon sprites. ~~Accidentally~~ added new mint sprite. Vladoricious: - qol: Tacticool turtlenecks and skirtlenecks now have suit sensors installed! No more excuses. Turn em up. @@ -334,43 +418,14 @@ - qol: Sign Language users now have a unique speech indicator as well as a visual indicator of the tone of their message, making it easier to communicate both with and as a sign language user. -2022-07-10: - Melbert: - - bugfix: Bolts of Necropotence works again. - Nerev4r: - - rscadd: Blind people can use analyzers again. - - rscadd: White canes have been added to the loadout. - - balance: Snails are now invertebrates. - Nuke: - - bugfix: Bubblegum will now beat your ass again. - SkyratBot: - - bugfix: Fix deafness virus symptom to be permanent if resistance threshold is - met. - - balance: pumps and scrubbers have their heat and pressure limit buffed to be the - same as unshielded cans. - - balance: cans have their release pressure buffed to 2533kpa. - - bugfix: trailers will actually trail their attached vehicles - - imageadd: The library computer now has four directional sprites instead of just - one. - - bugfix: The generic station name with the long number in words is rarer - - rscadd: The SBC Starfury has been ever-so-slightly tweaked! Two of the shuttles - are now where the gunnery bays used to be, and the rest of the differences are - largely cosmetic. Largely. - - code_imp: Survival pod fans have been split off into their own file. - - rscadd: Added a sorting disposals pipe for the Tramstation dormitory, allowing - packages to be sent there - - bugfix: Fixed two incorrect sorting disposals pipes on Tramstation that prevented - packages from reaching certain destinations - - bugfix: Added four missing names to sorting disposals pipes on Tramstation - - bugfix: fixed APC wiring - - bugfix: Fix simple mob deaths causing deadchat notifications. Special mobs still - cause deadchat notifications (brood spiders, elite lavaland mobs, morphs, revenants, - space dragons) + Zonespace27: + - admin: Get-Current-Logs and Get-Server-Logs now let you download entire folders + at once + carshalash: - balance: Syndicate 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 - - refactor: Qm coat is a subtype of department coat like other heads clothes + jlsnow301: + - bugfix: Fixed scrolling the orbit ui + kawoppi: - bugfix: rag cleaning speed is now influenced by your cleaning skill - bugfix: cleaning with a rag now gives you cleaning skill experience - bugfix: rags can now be used to wash bloodied windows @@ -384,6 +439,35 @@ heads may access them as well as engineers, they're located somewhere relative in maints. Melbert: + lizardqueenlexi: + - rscadd: Added a sorting disposals pipe for the Tramstation dormitory, allowing + packages to be sent there + - bugfix: Fixed two incorrect sorting disposals pipes on Tramstation that prevented + packages from reaching certain destinations + - bugfix: Added four missing names to sorting disposals pipes on Tramstation + orthography: + - bugfix: fixed APC wiring + san7890: + - admin: The ID of the Ticket will now show up in all associated Admin PM Messages + when logged. + sergeirocks100: + - imageadd: The library computer now has four directional sprites instead of just + one. + unit0016: + - rscadd: The SBC Starfury has been ever-so-slightly tweaked! Two of the shuttles + are now where the gunnery bays used to be, and the rest of the differences are + largely cosmetic. Largely. + - code_imp: Survival pod fans have been split off into their own file. + vincentiusvin: + - balance: pumps and scrubbers have their heat and pressure limit buffed to be the + same as unshielded cans. + - balance: cans have their release pressure buffed to 2533kpa. + zxaber: + - bugfix: Airlock shock indicators on diagnostics HUDs will now correctly be removed + when the door is unshocked. +2022-07-10: + Melbert: + - bugfix: Bolts of Necropotence works again. - rscadd: Iceboxstation's EVA now comes kitted out with equipment that may actually help you out if you want to go outside. Including special winter coats that can carry big oxygen tanks and boots to prevent you from slipping on ice. @@ -392,6 +476,33 @@ - bugfix: Tonic Water heals dizziness instead of causing it SkyratBot: - code_imp: dehardcodes admin grantable objectives list + Nuke: + - bugfix: Bubblegum will now beat your ass again. + SmoSmoSmoSmok: + - code_imp: dehardcodes admin grantable objectives list + YakumoChen: + - balance: GPS designs can no longer be exported to autolathes. + cacogen: + - bugfix: The generic station name with the long number in words is rarer + jjpark-kb: + - bugfix: trailers will actually trail their attached vehicles + magatsuchi: + - refactor: changes storage from a component to a normal datum + orthography: + - bugfix: fixes the piping of the ORD lab. + - bugfix: changes a pump subclass. + timothymtorres: + - bugfix: Fix simple mob deaths causing deadchat notifications. Special mobs still + cause deadchat notifications (brood spiders, elite lavaland mobs, morphs, revenants, + space dragons) + - bugfix: Fix deafness virus symptom to be permanent if resistance threshold is + met. +2022-07-11: + Melbert: + - bugfix: Tonic Water heals dizziness instead of causing it + san7890: + - bugfix: On Tramstation, prisoners can now exit the labor shuttle without being + trapped inside. - 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, @@ -435,6 +546,82 @@ softcerv: - rscadd: ports over the anesthetic machine from beestation. 2022-07-14: +2022-07-12: + Couls: + - bugfix: AI detector now correctly tells you when the AI is out of range + - qol: Uplink description for ai detector properly reflects that it no longer reveals + AI view + Kapu1178: + - soundadd: Random ambience volume has been reduced. + RimiNosha: + - qol: Lavaland ambiance is now much less loud and unpleasant. + Salex08: + - bugfix: fixes silver spawned food not being disgusting + Timberpoes: + - bugfix: Admins will no longer get ADMIN LOG message spam when reproductive extracts + are fed. + magatsuchi: + - bugfix: properly updates storage object icon states + - bugfix: ghosts can now view storage objects again + - bugfix: boxes can no longer fit normal sized objects + san7890: + - rscadd: Across all five station's, that little bartender's cubby area is now known + as the "backroom". How spooky. + - bugfix: TramStation's Bar Lounge now has an air alarm. + zxaber: + - rscadd: Added new experiments for unlocking the path to Durand, Gygax, and Phazon + exosuits. Weapons tech and Advanced Weapons tech are no longer required. +2022-07-13: + CoffeeDragon16: + - bugfix: golems will now have tongues again, and adamantine golems can now talk + to all golems again + - rscadd: cardboard golems no longer have tongues + EOBGames: + - rscadd: A whole host of new posters have just become available. + - rscadd: 'For the architects among you: a number of new aesthetic options are available + for mapping with. Let your creativity free!' + ReinaCoder: + - imageadd: The safe and floor safes have been resprited + ShizCalev: + - bugfix: EMP'd airlocks will now have the proper shocked door overlay. + - bugfix: Fixed airlocks sometimes becoming permanently electrified after being + unelectrified (honk) + - bugfix: Fixed airlocks sometimes showing as electrified even though they are not. + - bugfix: Fixed a scenario where varedited airlocks could sometimes become inadvertently + permanently electrified. + - bugfix: Fixed EMP'd airlocks which were manually electrified after becoming unelectrified. + - bugfix: EMPing an airlock which is already temporarily electrified will now reset + its timer if it has less than 30 seconds remaining. + Spookuni: + - qol: Genetics gets a back desk now for easier interaction with passing maintenance + dwellers + Thunder12345: + - rscadd: The mining outpost was unfortunately destroyed in an industrial accident. + A replacement has been constructed on a group of islands in the magma sea. + jlsnow301: + - admin: Fixed many "admin.fun" listings that were incorrect or missing. + orthography: + - bugfix: asimov++ is now editable + unit0016: + - rscadd: On Icebox, The RD's office and the AI's upload have received murals. + - balance: That one table in the middle of the Icebox upload is gone. Yes, this + is a balance change. +2022-07-14: + ANAME593: + - balance: heretic blades do 20 damage up from 17, have 35% armor penetration, but + deal 20% less damage to structures like lockers + ArcaneMusic: + - code_imp: Crafting recipes now uniformly use the same style for how long they + take. + Christmas5: + - rscadd: Shapeshifting now updates your age, physique, hair gradients, neck items + and underwear colour. + - rscadd: The Human form ability now uses a radial menu. + - bugfix: Human form should now update your species accordingly. + - bugfix: Last resort doesn't respawn you as an actual monkey, but as a monkeyized + human. + CoffeeDragon16: + - bugfix: ethereals will now properly spawn with tongues Ebb: - rscadd: You can now rip pieces of tape off of tape rolls and use them to tape people's mouth closed by putting it on them as a mask. Either through the stripping @@ -519,6 +706,41 @@ - rscadd: The comedian suit and coat are now available in the AutoDrobe! Wearing them may make you feel like you need a psychiatrist. 2022-07-17: + JohnFulpWillard: + - bugfix: The CE can now trim people's IDs to Atmospherics Technician + - bugfix: The HoS can no longer trim people's IDs to Lawyers. + MMMiracles: + - bugfix: The service hallway on Tram now has an APC, as well as a public cut through + between the two smaller hallways on the lower floor. + magatsuchi: + - bugfix: safes open correctly once again + necromanceranne: + - imageadd: Improves upon the Makarov's colours. + - rscadd: There is (in no way) now a 10mm Makarov that (wasn't) added to the game. + zxaber: + - imageadd: The Airlock Shock Indicator seen when using a Diagnostics Hud has a + new sprite. +2022-07-15: + Mothblocks: + - soundadd: Power is no longer required for ambience. + Salex08: + - bugfix: eyesnatcher objective wont cause runtime errors anymore + TheBoondock: + - bugfix: fixed attaching a knife to cleanbot succeeding even when user has NO_DROP + jlsnow301: + - code_imp: New string ops for tgui + - bugfix: Removed some errant loggers left in UIs + orthography: + - rscadd: Adds a new possible cosmetic change to the ordinance lab. + timothymtorres: + - bugfix: Fix rolling paper pack spawning empty +2022-07-16: + 13spacemen: + - rscadd: You can now deconstruct living AIs and turn them back into AI core frames + with MMIs/posibrains. The AI can finally be a real boy + - qol: AIs that are gibbed now drop MMIs/posibrains + - rscadd: The comedian suit and coat are now available in the AutoDrobe! Wearing + them may make you feel like you need a psychiatrist. Fikou, NecromancerAnne: - balance: The Biohazard Sprayer, Power Fist, Flamethrower and Dart Pistol are no longer in the nukie uplink, instead being given as bonuses in the keycarded @@ -555,6 +777,61 @@ - bugfix: You can no longer remove the turbine's rotor if its on or if its panel is closed - imageadd: Unique sprite for the Hypernob crystal from atmos + Holoo-1: + - bugfix: fixed canister ui being too small + LordVollkorn / Gage Gaebler: + - rscadd: The toiletbong has been added to the game. Build it using the craftingmenu, + a wrench, a flamethrower and a nearby toilet. + - balance: Deconstructing a toiletbong will empty the flamethrower's plasma tank. + Engineers, you may build toiletbongs for anyone without feeling guilty. + - rscadd: The toiletbong can be emagged. But should you? + - rscadd: Plums have been added to Botany. Get your plum seeds today. *Click* Noice. + - rscadd: Plumcake and plumcake slices have been added. Find them in the craftingmenu. + - rscadd: Plumjuice and plumwine have been added. Pour yourself a glass. + - rscadd: A new drink called "The Hat" has been added. A hat is also where you drink + it from. + RandomGamer123: + - bugfix: You can no longer remove the turbine's rotor if its on or if its panel + is closed + SuperSlayer: + - spellcheck: Traitor codewords are now given by their employer, rather then by + The Syndicate + TheBoondock: + - rscadd: After years of research, the council of elder atmosian created and publish + an experimental design for a long range gas analyzer. The design specified it + to be coated in gold to signify the glory of atmosia. + magatsuchi: + - bugfix: mass transfer between storage no longer causes ear bleeds + timothymtorres: + - bugfix: Fix talking while mouth is gagged with tape + vincentiusvin: + - qol: Canisters, scrubbers, and pumps no longer stop reacting when wrenched. + - code_imp: Canisters should process once instead of twice when spawning. No gameplay + changes expected. +2022-07-17: + Cheshify: + - rscdel: Removed the ability to have impure or failed chems + - balance: A number of impurities in chemicals are now inverses + - bugfix: Mannitol now has a working inverse + D4C-420: + - imageadd: Unique sprite for the Hypernob crystal from atmos + Fikou: + - bugfix: modsuit flamethrower will no longer push objects + Fikou, NecromancerAnne, Wallem: + - qol: nuke ops emergency box now contains a crowbar, screwdriver and mini welder + - rscdel: nuke ops leader krav maga is removed + - balance: nuke op survival knife has been replaced with an energy dagger + - balance: energy daggers have light armor penetration and wound bonus + - qol: energy daggers now emit a soft red light + - balance: nuke op makarov has been replaced by the ansem, a 10mm clandestine pistol. + - rscadd: nuke op diamond drill has been replaced with an entrenching tool, a more + compact wrench/pickaxe/shovel + Melbert: + - qol: 'Icebox: The Quartermaster''s office has had its windows reinforced.' + Mooshimi: + - bugfix: Fixed some strengths on mineral walls, making them harder to break through + via hulk and mechs. + Y0SH1M4S73R: - code_imp: the igniter, mirv, and summoning components and the knockback, lifesteal, light_eater, and venomous elements are now compatible with projectile spells. - code_imp: the lifesteal, light_eater, and venomous elements are now compatible @@ -629,10 +906,63 @@ - bugfix: You can now recolor graffiti to dark colors. - admin: Admins can now cancel midround random events - bugfix: signalCommander now works without altering the default frequency +2022-07-18: + 13spacemen: + - bugfix: Tramstation's shutters are directional once again + ArcaneMusic: + - rscadd: Television themed headgear has arrived! Hack a costume vendor or hollow + out an unsecured status display to make one. Just be careful not to get flashed + while wearing one. + ChakatStormCloud: + - bugfix: 'Virology: all healing symptoms no longer receive an accidental power + boost at Stage Speed 6.' + Ghommie: + - bugfix: You can now recolor graffiti to dark colors. + JohnFulpWillard: + - bugfix: Fixed several instances where we should check internal organs for external + organs + Kylerace: + - bugfix: diagonal movement in space works again + LemonInTheDark: + - balance: Humanoid xenos can now eat people by aggressively grabbing their target, + and dragging them onto themselves. Sneak a knife in and start moving to really + ruin a filthy ghost role user's day + Melbert: + - bugfix: Thermal Vision mutation is no longer 1/10th its intended duration + - bugfix: Banana Glutton's ability will no longer break after eating a banana. + Moose1002: + - qol: Dispenser shells can now be filled from storage bags for easy bulk filling. + Mooshimi: + - rscadd: Festive paper hats have appeared in maintenance on every map. Central + Command is going to get angry if you keep partying like this... + - bugfix: Closed the trapdoor to space under a holo firelock in lower tram maint. + Pickle-Coding: + - bugfix: Fixes N2O formation consuming twice the amount of nitrogen and oxygen + than it should be. + Profakos: + - bugfix: signalCommander now works without altering the default frequency + Rhials: + - spellcheck: Fixes typos in certain away mission items. + ShizCalev: + - bugfix: Fixed the Eastern airlocks to the Space Hotel not being cyclelinked. + - bugfix: Added various missing air alarms, APCs, and cameras across all station + maps. + - bugfix: Pun Pun has been added to the bar on tramstation! + Timberpoes: + - bugfix: Fix issue when the connected database dies but the connection check still + returns "online" where players would be unable to join the shift because the + game thinks they haven't unlocked any jobs at all. + Tristrian: + - bugfix: The mining wardrobe locker contains an explorer duffel bag instead of + a normal one now + - spellcheck: '"explorator''s duffel bag" is now called "explorer duffel bag"' + Twaticus: - bugfix: centcom gasmask appears on mob again - bugfix: tile reskinner correctly shows new tiles - bugfix: plasmaman glove inhands no longer appear as a plasmaman suit - bugfix: wheelchairs gained their wheel back + celulamp: + - bugfix: Candy Corn craftable with 5 Corn Oil 5 Sugar itseasytosee: - bugfix: Holding people at gunpoint has been restored to its former glory, it can once again be used at range, and allows the person holding up to move within @@ -657,55 +987,50 @@ Hardly3D: - balance: Two of secmed's firefly gun case's lethal magazines were replaced with a rubber variant. + kawoppi: + - rscadd: added animation for cleaning things with soap, mops, rags or cleanbots + - imageadd: added cleaning bubbles animation + lizardqueenlexi: + - bugfix: Fixed body_parts_covered on various suits to be consistent with their + sprites + - bugfix: Made digitigrade legs properly draw as non-digitigrade when wearing suits + that cover the legs + necromanceranne: + - balance: Gives the battlecruiser operatives the Ansem Pistol. + - bugfix: Gives the battlecruiser crew internals boxes. + - bugfix: Speedloaders and stripper clips can once again can load in ammo of the + same caliber. Detectives rejoice! + orthography: + - bugfix: puts beartraps in the tramstation janitor closet. + raffclar: + - bugfix: Fixed mecha cargo names breaking the utility module interface + timothymtorres: + - bugfix: Fix holoparasites to inherit language from their masters to aid communication + unit0016: + - refactor: ID Card department colors are now greyscaled. Say whuh!? +2022-07-19: + 13spacemen: + - bugfix: Carding an AI or deconstructing it will not ping ghosts about its positronic + brain + - bugfix: Ejecting a brain from an MMI will correctly transfer the guy in the MMI + to the ejected brain + - bugfix: You can (un)anchor AIs with a wrench + - qol: Changed the AI/borg hacked laws font color to be more readable + D4C-420: + - bugfix: fixed bioscrambler armor not having a cooldown when activated or emp'ed + - bugfix: fixed hallucination armor not having a cooldown when activated. + Guillaume Prata: + - qol: Be polite! While on walk intent you won't bump, swap places or push other + people now. Jolly: - bugfix: At Central Command, NanoTrasen'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: - - rscadd: The toiletbong has been added to the game. Build it using the craftingmenu, - a wrench, a flamethrower and a nearby toilet. - - balance: Deconstructing a toiletbong will empty the flamethrower's plasma tank. - Engineers, you may build toiletbongs for anyone without feeling guilty. - - rscadd: The toiletbong can be emagged. But should you? - - rscadd: Plums have been added to Botany. Get your plum seeds today. *Click* Noice. - - rscadd: Plumcake and plumcake slices have been added. Find them in the craftingmenu. - - rscadd: Plumjuice and plumwine have been added. Pour yourself a glass. - - rscadd: A new drink called "The Hat" has been added. A hat is also where you drink - it from. + Kubisopplay: + - qol: makes borg hypo behave slightly saner Melbert: - bugfix: Fixes a runtime with seclite mounts being deconstructed. - ORCACommander: - - code_imp: NT is now sourcing distressed flooring through a lowest bidder program - RatFromTheJungle: - - bugfix: makes the majority of suits no longer have a phanton white-tie on the - front of a shirt, that very much does not have a white-tie - ShizCalev: - - spellcheck: Tweaked the stat panel for revenants to make their essence readout - a little more clear. - - bugfix: Jaunting/incorporeal mobs will no longer be inserted into morgue trays - / cremators when they close. - - bugfix: Cremators will no longer cremate jaunting / incorporeal mobs. - - bugfix: Jaunting out of a morgue tray / cremator will now properly update its - sprite. - - bugfix: Fixed the Eastern airlocks to the Space Hotel not being cyclelinked. - - bugfix: Added various missing air alarms, APCs, and cameras across all station - maps. - - bugfix: Snow golems will no longer be told to put on their wizard robes when trying - to throw snowballs! - - bugfix: Sloths loaded in ruins will no longer sometimes become Cargo's sloth! - SkyratBot: - - bugfix: ghosts can now view storage objects again - - bugfix: The supermatter engine can spawn bioscrambler anomalies when delaminating - again. - - bugfix: Admins will no longer get ADMIN LOG message spam when reproductive extracts - are fed. - - bugfix: fixed bioscrambler armor not having a cooldown when activated or emp'ed - - bugfix: fixed hallucination armor not having a cooldown when activated. - - bugfix: Airlocks made from custom materials are now properly colored instead of - being forced to use the color of the first material used. - - bugfix: you can no longer put undroppable items into storage - - bugfix: fixed ranged analyzer being able to scan out of view targets - - soundadd: Power is no longer required for ambience. + MidoriWroth: - rscadd: Added growable peanuts! Grow them in botany for a snack, or grind them into peanut butter - rscadd: Added 4 different peanut and peanut butter-based recipes @@ -748,6 +1073,25 @@ - bugfix: diagonal movement in space works again - bugfix: Fix a runtime when replying to PDA messages through chat. - code_imp: Small code improvements for modular computers and files. + PositiveEntropy, Triiodine: + - imageadd: Resprites all backpacks and satchels in their entirety! + ShizCalev: + - bugfix: Snow golems will no longer be told to put on their wizard robes when trying + to throw snowballs! + - bugfix: Sloths loaded in ruins will no longer sometimes become Cargo's sloth! + - spellcheck: Tweaked the stat panel for revenants to make their essence readout + a little more clear. + - bugfix: Jaunting/incorporeal mobs will no longer be inserted into morgue trays + / cremators when they close. + - bugfix: Cremators will no longer cremate jaunting / incorporeal mobs. + - bugfix: Jaunting out of a morgue tray / cremator will now properly update its + sprite. + SuperNovaa41: + - rscdel: Removed the families gamemode. + SuperSlayer: + - balance: Baton resistance trait now prevents getting knockdowned by batons, instead + of just shortening knockdown duration + Tastyfish: - bugfix: Shower and sink dismantling is now consistent. - bugfix: Hydroponics tray plumbing connections now accept water without clogging. - rscadd: Showers now have 3 selectable auto-shutoff modes. @@ -873,6 +1217,78 @@ 2022-07-25: Christmas5: - bugfix: Updates /update_body_size() to compensate for a player's rotation. + TheBoondock: + - bugfix: fixed ranged analyzer being able to scan out of view targets + VioletN: + - bugfix: The supermatter engine can spawn bioscrambler anomalies when delaminating + again. + distributivgesetz: + - bugfix: Fix a runtime when replying to PDA messages through chat. + - code_imp: Small code improvements for modular computers and files. + magatsuchi: + - bugfix: you can no longer put undroppable items into storage + ninjanomnom: + - bugfix: Airlocks made from custom materials are now properly colored instead of + being forced to use the color of the first material used. + san7890: + - rscadd: Have you noticed the unrestricted directional airlock helpers on doors? + You know, the little lights under door that allow anyone to pass through. After + a few long hours in the lab, assistants have found a display hidden deep within + the machinations of the airlock that allow you to either flip the direction + of this Unrestricted Exit or disable it entirely. +2022-07-20: + CoffeeDragon16: + - bugfix: xenomorph corrosive acid will once again not target mobs + - bugfix: xenomorph limbs will no longer be examined as human limbs + Justice12354: + - bugfix: Chemical reactions no longer give you double the product + PK_Sonikal: + - bugfix: The oxygen canister in the Cere emergency shuttle's cryogenics setup has + been replaced with the correct anesthetic mix. + Salex08: + - bugfix: roboticist in tramstation have access to tech storage again + Whoneedspacee: + - bugfix: Fixed megafauna not having melee cooldown times after ability usage. + - admin: Mob ability verbs expanded greatly, allowing for creation of custom ability + sequences and allowing easy removal of already added actions. + Y0SH1M4S73R: + - admin: Admins with the debug permission can run lua scripts using the "Open Lua + Editor" verb. + jlsnow301: + - code_imp: notify ghost alerts and healing robotic limbs' code was brought up to + coding standards. + jlsnow301 MooCow: + - bugfix: Adding items to dispenser shells no longer damages the dispenser + orthography: + - bugfix: fixed a scrubber that didn't have pipes. + zxaber: + - bugfix: Added Clown and Mime spawns to Tramstation +2022-07-21: + Fikou: + - bugfix: fixes cqc knockouts + Kylerace: + - bugfix: circuits can no longer send trams to brazil, since that is not on the + station + ReinaCoder: + - imageadd: Gives the Spider Charge a unique sprite + Twaticus: + - imageadd: Various clothing items have been converted using GAGs, making them recolorable. + Check it out at your local clothesmate! + private-tristan: + - qol: Shutters, Blast doors, and Bluespace Vendors are now in the structures category, + instead of misc, craft away! +2022-07-22: + 13spacemen: + - imageadd: Internals action buttons have a gold border and are inserted left-most + by default + - rscdel: Removed the internals HUD icon (gas mask + tank icon) + CoffeeDragon16: + - rscadd: New signage on all stations for the AI upload, AI sattelite, telecomms, + vault, and the R&D servers. + Pickle-Coding: + - rscadd: Proto-nitrate bz response can now emit nuclear particles. + - balance: Proto-nitrate bz response radiation pulse intensity will get reduced + based on how many particles it is creating. RandomGamer123, bug originally reported by Murmic#2120 on Discord: - qol: Makes it more clear that venus human traps can be possessed in the first place @@ -967,6 +1383,100 @@ Wallem: - imageadd: Resprites the implant pad Zonespace27: + Salex08: + - bugfix: parrots spawned from strange objects dont come with headsets anymore , + like it was intented + itseasytosee: + - bugfix: Bugs exposed by gunpoint's fixing have been fixed + orthography: + - rscdel: removed one of the two circuit labs on tramstation + - balance: Nanotransen realizes they're losing money by having two of the same niche + science on the same station. The Auxiliary Laboratory has been cleared out until + there is a new use for it. Hope squatters don't set up in there... + - bugfix: gives tramstation science more glass + - bugfix: removes one of the tramstation cargo ordering consoles + tralezab: + - balance: IAA are now flavored around rooting out corruption, rather than just + killing syndicates. +2022-07-23: + CoffeeDragon16: + - bugfix: maintenance-adapted eyes will now display properly + CursedBirb: + - bugfix: Dutch jacket shows hands again + FernandoJ8: + - bugfix: the appearance of broken plating now updates after repairing it + Fikou: + - qol: entrenching tool now tells you on examine how to switch config + Jackraxxus: + - bugfix: Tramstation chemfactory's meson left pair of meson goggles no longer slow + you down. + JohnFulpWillard: + - bugfix: The Veteran's cloak now only respects people who meet the requirements, + rather than being the other way around. + - spellcheck: Fixes a minor spelling error in seperation when you eat a red pill. + Melbert: + - bugfix: Blue, Red, and Delta alerts make the right sound again + - bugfix: Fixes a runtime error preventing Ion Storms from triggering occasionally + Mickyan: + - qol: Blacklight and red light fixtures are slightly brighter + MidoriWroth: + - bugfix: Fixed brownies and breadsticks not being bakeable + - bugfix: Brownie sheets are now sliceable again. + Profakos: + - bugfix: If you toggle night shift mode on an APC too fast, you'll see the balloon + message + Y0SH1M4S73R: + - bugfix: calling the lua function "print" when there are multiple lua states will + no longer crash the server + dragomagol: + - admin: moved dynamic logging into its own file + lizardqueenlexi: + - bugfix: added missing flag to captain's jumpskirt + magatsuchi: + - bugfix: fixes storage item icons not updating properly + necromanceranne: + - balance: Syndicate encryption keys protect your headset from radio jammers. + orthography: + - bugfix: fixes the highfive memory saying deuteragonist instead of the name of + the second actor. + san7890: + - bugfix: The KiloStation Emergency Shuttle now uses appropriate flooring to complement + the floor decalling work. + - bugfix: On MetaStation, the Quartermaster's Office no longer owns a conveyor belt. + Greedy bastard. +2022-07-24: + 13spacemen: + - imageadd: Pun Pun wears drippy clothes now. Swag. + - bugfix: Becoming a digitigrade species should properly drop your shoes if they + don't fit + ArcaneMusic: + - qol: Roller Beds and Body Bags now have screentips explaining how to fold them + up. + Melbert: + - bugfix: Having the Supermatter Engine detonate will no longer make all traitor + final objectives unavailable. (Only the Supermatter Cascade objective is made + unavailable.) + Mooshimi: + - bugfix: Separate DNA Vaults will now check if you already have a power from one + before giving a power to you. + ShizCalev: + - bugfix: Floors repaired by floorbots will now have their overlays updated properly. + Wallem: + - imageadd: Updated the treat fabricator sprite + Watermelon914: + - admin: The lua editor now has text highlighting for lua keywords + dragomagol: + - bugfix: tongue tied players will no longer be haunted by floating faces if they + type too fast + - admin: Added Delay Round End to the server tab + vincentiusvin: + - bugfix: fixed the 20 radius supermatter delam irradiation not working +2022-07-25: + Fikou: + - bugfix: you no longer rename door assemblies with pens on combat mode + Mothblocks: + - qol: Pointing at something on yourself now shows the item. + Y0SH1M4S73R: - bugfix: Fixes most, if not all harddels related to lua. - bugfix: Fixed lua signal handlers for COMSIG_PARENT_QDELETED. - qol: The lua editor UI will warn when a state's global table has been corrupted @@ -995,29 +1505,111 @@ - qol: pAI requests no longer make the Byond window flash. - qol: The silicon text for "your laws have been updated" is now easier to see. - qol: Changed the text for camera and printer functions. -2022-07-29: - Higgin: - - balance: CI sounds no longer carry nearly so far and drop off much closer to a - screen's distance. - Jolly: - - qol: On Delta, the barber shop has moved! Its now above robotics. NT has also - reinstalled the Showroom thats under Tcomms. - - bugfix: On Delta, the cryopods room is now connected to the main power net again. - Sorry about that! - - bugfix: The Barber Shop and NT Consultant office are no longer hard-baked into - Tram. Oops! - - qol: On Kilo (when NT decides to ship crew to the station), NT Consultants now - have an office. Huzza! - RimiNosha: - - bugfix: Fixed invisible uninteractable languages on the prefs menu, as well as - being able to be assigned unobtainable languages because of said bug. + magatsuchi: + - bugfix: dumping storage containers now works properly, and cigarette carts aren't + janky anymore to open + - bugfix: right clicking a storage container with an item in hand now opens storage + raffclar: + - bugfix: Tablets can be used inside lockers again. +2022-07-26: + Pepsilawn: + - bugfix: Kilo and Icebox's aux bases construction rooms are now correctly locked + behind Aux Base access + - rscadd: Prison Ofitser has been once again dispatched to the Lavaland security + checkpoint after going missing + ShizCalev: + - bugfix: Fixed an exploit caused by unwrenching the holopad. + Y0SH1M4S73R: + - rscadd: Concentrated barbers aid will give hairless species hair after it has + remained in them for a number of cycles inversely proportional to the purity + (20 cycles at 100% purity). Additionally, at 100% purity, it removes the smooth-headed + quirk at the same time that it grants hairless species hair. + - bugfix: Most effects that change your hairstyle are no longer delayed until certain + effects occur. + - bugfix: You cannot bypass the smooth-headed quirk with the genetics console (even + if you were somehow able to figure out how to get a specific hairstyle) + - bugfix: The species and antagonist character icons in the preferences menu are + no longer all bald. +2022-07-27: + CoffeeDragon16: + - admin: head-revolutionary demotion logging will now properly display the demoting + admin + CursedBirb: + - bugfix: Engineer syndie sentry can only be activated with combat wrench + - code_imp: Added balloon alerts and made code easier to read + JohnFulpWillard: + - balance: Revenants' defile ability no longer breaks windows, only damaging it + until nearly broken. The damage dealt to windows has also been slightly lowered. + Melbert: + - rscadd: Almost the entire bottom half of Deltastation has been remapped. + - bugfix: Void Magnet no longer instantly removes itself + - code_imp: Convoke Void now handles the self-cast part of Void Magnet. + Mothblocks: + - balance: Heavily adjusted how much population impacts the chances of midround + rulesets, mostly lowering them. + ShizCalev: + - bugfix: The uplink failsafe code traitor item will now actually give you a failsafe + code! + - bugfix: The uplink failsafe code can no longer be purchased on devices that don't + support code entry. + Thunder12345: + - spellcheck: The butcher's cleaver will now kill people in ways accurate to real + culinary techniques + VioletN: + - bugfix: The "kill pet" traitor objective can now properly target pets owned by + the Head of Personnel, Head of Security, and Quartermaster. + Wallem: + - imageadd: Resprites the implant pad +2022-07-28: + CoffeeDragon16: + - admin: added logging for when you fail to tip something over + - bugfix: cleanbots will display their cleaning animation and clean at the right + speed again + Fikou: + - rscadd: Nuke Op reinforcements now come in different flavors. + - balance: Nuke Op reinforcements now start with plastikovs. + - bugfix: the hook shotguns hook and the m90gls grenade launcher no longer hit the + user + Melbert: + - bugfix: Fixes some alien actions like Evolve not working. + RaveRadbury: + - rscadd: Adds the old maid apron to the autodrobe + - imageadd: Returned the maid apron + Salex08: + - refactor: Mining items have been refactored to make better use of components. ShizCalev: + - bugfix: Immortal anomalies (eg bioscramblers) will no longer have a death timer + overlay. - bugfix: Fixed an exploit which would result in Mediborg's Amputation Adventure not amputating properly. Legendary gamers don't have to cheat. - bugfix: Clicking Mediborg's Amputation Adventure's with TK will no longer result in amputation. SkyratBot: - spellcheck: minor grammatical change to the golden wheelchair. + - bugfix: Cyborg flashes will no longer fail to drop from the heads of borgs. + - bugfix: Butchering a bodypart for it's organs while inside a locker will no longer + drop the organs /outside/ the locker. + - bugfix: Surgical moth wing reconstruction can no longer be attempted on wings + that... aren't moth wings! + SuperDrish: + - bugfix: Fixed Heterochromia not knowing where the right and left eyes are + orthography: + - spellcheck: minor grammatical change to the golden wheelchair. + tf-4: + - balance: Reflectors can now reflect nuclear particles. + vincentiusvin: + - qol: tidied up tram's atmospherics piping +2022-07-29: + Ekaterina-von-Russland: + - bugfix: fixes the stress experiment + - balance: changes the stress experiment to allow values 2% below or above the target + integrity + FernandoJ8: + - bugfix: xenos now take fire damage in accordance to how many firestacks they have + instead of a set amount + Fikou: + - bugfix: you can no longer push puzzle doors + Ghommie: - qol: Ladders now take left/right clicks to go up or down. Radial menus for them should only show up when you reach the floor above or below but the ladder goes beyond it, so that you don't have to bother clicking a sprite covered by that @@ -1045,6 +1637,19 @@ 2022-07-30: Ebin-Halcyon: - imageadd: Synth lizards have had a few sprite issues addressed. + GoldenAlpharex: + - bugfix: Security Records should no longer have to apply prefs to a random dummy + to generate pictures for every character that joins the round. + IndieanaJones: + - bugfix: Fixed legionnaire's charge when hitting an ally. + Melbert: + - qol: Swaps a prosthetics freezer for a blood freezer on Delta medical + orthography: + - spellcheck: oh hi mark changed to oh hi daniel. + timothymtorres: + - bugfix: Fix slime potions used on simple mobs to inherit all language abilities + from the user (for real this time) +2022-07-30: Fikou, TeomanTheGreat: - rscadd: the nuke ops leader is now the highest nuke ops playtime player on the team @@ -1072,6 +1677,44 @@ - bugfix: removed a way that you could send items into the void using just a windoor and a pal - qol: the NtOS messenger has a scrollbar now. + Jacquerel: + - rscadd: Urban legend says that people have been hiding sharp glass behind posters + to hurt anyone who tries to remove them. Who would do that? Make sure you're + wearing gloves when pulling down posters... + - rscadd: Adds two new traitor objectives to upset the crew by placing syndicate + posters or drawing the syndicate logo. + - bugfix: removed a way that you could send items into the void using just a windoor + and a pal + JohnFulpWillard: + - qol: the NtOS messenger has a scrollbar now. + Melbert: + - bugfix: Constructs, rats, and some other creatures can attack while their spells + are on CD + - admin: DNR-ing is now logged + Superlagg: + - rscadd: Voracious properly speeds up eating. It also allows you to eat and be + fed even while you're full, albeit more slowly the fulller you are. + Tastyfish: + - rscadd: The results of the tile sprayer and decal painter can now only be removed + by crowbarring the tile, just like map-start. + - bugfix: Tile sprayer's "white" replaced with "neutral", the most common tile overlay + color. + Watermelon914: + - balance: Air alarms USB now support controlling scrubbers, vents and operating + mode as well as the alarm. + - rscadd: Airlocks can now be made into shells by ticking the 'shell' option in + airlock electronic UI. This can only be done during construction. + Y0SH1M4S73R: + - qol: USB cables can connect directly to bluespace launchpads. As a consequence, + You do not need a console for a launchpad if you only intend to control it via + circuits. + distributivgesetz: + - bugfix: Fixed some odd pipes menacingly laying around above tiles in Tramstation + engineering. + - bugfix: Fixed misplaced requests console and light fixture. + magatsuchi: + - bugfix: organ boxes no longer freeze the box instead of the organs + necromanceranne: - balance: Toy guns are only available to clown operatives. - rscdel: 'Removes from both operative uplinks: Camera Bug, Combat Gloves Plus (already removed from leaders), Guerrilla Gloves, FRAME disc, Radioactive Microlaser, @@ -1164,5 +1807,56 @@ - bugfix: admin-triggered xeno event now works! mcmeiler: - rscadd: Slimepeople can now change their hair color. +2022-07-31: + CPTANT: + - balance: Regular Windows are now stronger and take about 10 toolbox hits to destroy + ChakatStormCloud: + - bugfix: Basic cyberstomach digestion speed dropped down to be in line with the + other stomachs + CoffeeDragon16: + - bugfix: RPEDs can pick up beakers and assemblies once again + - bugfix: holoparasite renaming text will no longer display to others + Fikou: + - bugfix: everyone is a traitor mode disables progression + - bugfix: fixes nuke ops leaders not spawning + Higgin: + - balance: Non-functional livers and stomachs can now be repaired with their respective + surgeries once in the organ's lifetime. + Jacquerel: + - bugfix: Construction and ape-crushing behaviour should be more consistent between + manual and motorised wheelchairs. + JohnFulpWillard: + - bugfix: Using candy bars as an ingredient in salad now drops a candy wrapper. + Melbert: + - bugfix: Slime Transformation doesn't require wizard clothes + - bugfix: Plant bags transfer seeds in bulk again. + OrionTheFox: + - bugfix: The Pants Altar's pants' icons are now fixed + RigglePrime: + - admin: Admins can now put any human species on purrbation + ShizCalev: + - bugfix: Transferring a carded AI to an empty core will no longer result in a second + AI core appearing. + - balance: People with epilepsy now have a chance to have a seizure when they're + flashed! + - bugfix: Leather satchels no longer have a rogue crotch height pixel sticking through + your clothing when facing left. + - bugfix: Necropolis chest will no longer consume your key if it fails to generate + a reward. Also, if it fails to generate, it'll allow you to attempt it again. + Watermelon914: + - bugfix: Fixed some cases where the highlighted text in the lua editor was out + of place with the actual text. + distributivgesetz: + - bugfix: Fixes APCs clicking constantly during a Grid Check. + ghommie, dragomagol: + - bugfix: admin-triggered xeno event now works! + magatsuchi: + - bugfix: storage UI no longer gets stuck on the screen due to an oversight + orthography: + - bugfix: the all-in-one-grinder shakes (again?) + - spellcheck: adds extra information to objective explanation text. + - bugfix: makes the photo objective more specific + san7890: + - bugfix: Nanotrasen should no longer place single bedsheets on double beds. timothymtorres: - rscadd: Bubblegum now spawns demonic bubblegum candy when they devour corpses. diff --git a/html/changelogs/archive/2022-08.yml b/html/changelogs/archive/2022-08.yml index 15c8bcb3e0100..d8adc3ad7e0b7 100644 --- a/html/changelogs/archive/2022-08.yml +++ b/html/changelogs/archive/2022-08.yml @@ -28,6 +28,17 @@ move more smoothly instead of jumping from tile to tile. - qol: Vault bank machine checks for access before alerting. - bugfix: fixed crates being able to store mechs + Armhulen/Armhulenn/Bazelart/Tralezab, san7890: + - admin: Word filters incorrectly set up will now have their errors actually described. + Please, tell your server ops when you see it so they may fix the configuration. + - server: Rust-g on this codebase is now on the 1.0.2 version, prepare accordingly. + Bytube: + - bugfix: fixed crates being able to store mechs + Profakos: + - bugfix: unfrozen items no longer break when thrown + Y0SH1M4S73R: + - code_imp: Several projectiles, particularly magic missile and gauntlet echo, now + move more smoothly instead of jumping from tile to tile. - bugfix: Calling `print` from lua will no longer spontaneously cause a runtime. - bugfix: The lua editor UI now properly scales with the window, up to certain extremely small sizes. @@ -45,6 +56,16 @@ SkyratBot: - qol: nuke ops id trims have a sechud icon - bugfix: chameleon cards now fix their colors upon resetting + Zenitheevee: + - balance: Bluespace crystals can now go in ITEM_MATERIAL capable material storage + (like autolathes) + distributivgesetz: + - qol: Vault bank machine checks for access before alerting. +2022-08-02: + Fikou: + - qol: nuke ops id trims have a sechud icon + - bugfix: chameleon cards now fix their colors upon resetting + Jacquerel: - bugfix: Creatures which can't experience emotions will no longer attempt to do so upon seeing a traitorous poster. SuperSlayer: @@ -79,6 +100,19 @@ - balance: NanoTrasen 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. +2022-08-03: + Capsandi: + - rscadd: The kilo whiteship has been remapped and can fly again + - rscadd: Kilo's abandoned warehouse has been adjusted slightly to match the ship + EOBGames: + - rscadd: Nanotrasen has implemented a new system of Threat Advisories to inform + stations of the relative Dynamic threat to their stations by sector. + LemonInTheDark: + - admin: Wooooo spoooky ADMIN HELP BACKEND HAS CHANGED. If you run into any strange + behavior or dropped messages, REPORT THEM + Mooshimi: + - 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. ShizCalev: - bugfix: Camera assemblies can now be moved after being unwelded! (This was an 11 year old bug lol.) @@ -195,6 +229,13 @@ - qol: most storage item chat messages have been replaced with balloon alerts - admin: Wooooo spoooky ADMIN HELP BACKEND HAS CHANGED. If you run into any strange behavior or dropped messages, REPORT THEM + - bugfix: Fixed the Stray Cargo Pod event failing to occur if it tried to send an + empty cargo pod. + - bugfix: Trying to inject someone in the eyes/mouth/feet/hands will no longer result + in you trying to inject their chest! + SuperSlayer: + - bugfix: fixes slimes attacking objects not getting logged + Timberpoes: - rscdel: Removed the integrated circuit paper printing mechanic as part of paper code rewrite. - rscdel: Removed the ability to scan paper directly into the modular computer notes @@ -213,6 +254,51 @@ - config: Hey server operators, listen! We've changed up how Departmental Security Officers get their accesses, so be sure to review the DEPSEC_ACCESS_LEVEL config number to see what you want to work best for your server. + Twaticus: + - imageadd: Converts some families gear into recolorable items in the clothesvendor. + Includes a hat, scarf, 3 jackets, football gear, and buttondown shirt with shorts/pants. + Adds a recolorable waistcoat. + VioletN: + - bugfix: The Fire Cascade heretic spell no longer hurts the user. + jlsnow301: + - bugfix: Custom virus names should now display properly in the pandemic. + orthography: + - bugfix: fixes tail wag emote stopping the wag. + san7890: + - admin: You should hopefully no longer see an error message that has nothing to + say regarding the word filter. +2022-08-04: + CoffeeDragon16: + - qol: most storage item chat messages have been replaced with balloon alerts + GoblinBackwards: + - bugfix: Fixes heretic curses always failing and saying the items had no fingerprints. + Hardly: + - rscadd: You can now buy lizards through cargo. + LemonInTheDark: + - bugfix: You can no longer infinitely york as an alien + Melbert: + - qol: AIs which update their status displays on multi-z station maps will now update + ALL displays on station, instead of only those which match the level their core + is on + Profakos: + - rscadd: Added a new button to the thunderdome administration arena that toggles + entertainment monitor's ability to broadcast the thunderdome arena's cameras. + - bugfix: Clicking on entertainment monitors actually works now + Tastyfish: + - qol: Searching within a material stack's recipes now searches the categorized + recipes as well. + Watermelon914: + - bugfix: Clicking on tiles you can't see will work again if you pressed F12. + orthography: + - qol: allows for an existing ai lawset to be used as the default instead of a "custom" + lawset. + - server: added server settings that allow for the ai lawset to be specified. This + *should* be changed in the server to allow the "asimov++" card to spawn in place + of the "asimov" card in the AI upload. + timothymtorres: + - qol: Add chance for maintenance crate and closet spawners to be open to make the + area look more messy. + vincentiusvin: - refactor: All four SM delams got recoded, no significant gameplay changes expected. - qol: SM healing is broadcasted on crew radio too now instead of just engi - qol: SM going singulo or tesla will be announced on common comms when the damage @@ -221,6 +307,30 @@ and trigger cascades. - bugfix: Fixed the sm not having a boxy overlay on normal delams when counting down. This is what the radio message was referring to as "causality field". +2022-08-05: + JohnFulpWillard: + - balance: Ordnance data disks now have the Frontier app on them, and has entirely + replaced Frontier data disks. + - bugfix: Labor camp Prisoners without a sentence can no longer send themselves + back up whenever they wanted by clicking the button fast enough. + - bugfix: Prisoners can no longer get infinite labor camp points by clicking the + stacking machine with ores. + - bugfix: All ore machines now properly change their direction when they dock a + shuttle in a separate direction, fixing Lavaland's labor camp stacking machine. + - qol: Labor camp's point checker now states all the information you need, rather + than being a paragraph of text that just appears in chat. + Justice12354: + - rscadd: The Mothroach, your new local exotic pet + - rscadd: Mothroach Hide and Mothroach Meat + - rscadd: 'New crafting recipe for the Moth Plush: 1 Mothroach Hide; 1 heart; 3 + cloth' + - bugfix: Fixes dead mobs on-head not having sprites + Mooshimi: + - admin: A lot of game logs will now also be in individual game logs, for convenience + in log diving. + - admin: Added logging for bluespace launchpad x and y offset changes, which go + to individual game logs. + - admin: Attack logs will now be slightly shorter, one useless word was removed. - bugfix: Added a test in Aurora Caelus event for if the station has the ability to show it. - bugfix: Stations without space should no longer receive station objectives that @@ -264,6 +374,57 @@ Mqiib, ToasterBiome: - balance: Explosion epicenters no longer explode mobs twice; Fireballs and other explosive projectiles are significantly less-damaging + - qol: Machines that require a minimum level of part now have it visible. + Pepsilawn: + - bugfix: Fixed a typo in Metastation's service's camera tag + Profakos: + - refactor: The Force Event UI has been refactored + - refactor: Events now have categories and descriptions + - refactor: Admin triggered events happen immediately + - balance: Fake Virus and Electric Storms are shown to admins, making them cancelable + ShizCalev: + - bugfix: You can no longer crawl into a vent if it's welded while you're climbing + into it. + - bugfix: ES8 explosive charges (structural weakpoint charges) can now only be planted + on walls or the floor. + lizardqueenlexi: + - bugfix: Universal recorder now properly reports length of silence in seconds instead + of deciseconds + san7890: + - balance: Nanotrasen 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 + in relation to the population. + - config: Hey server operators, listen! We've changed up how Departmental Security + Officers get their accesses, so be sure to review the DEPSEC_ACCESS_LEVEL config + number to see what you want to work best for your server. + - admin: The word filter should no longer runtime on initialize. For real this time. + timothymtorres: + - rscadd: The drink "Between the Sheets" requires sleeping underneath bedsheets + to gain healing effects + vincentiusvin: + - bugfix: deleted unconnected lavabase pump + - bugfix: removed unecessary bridge pipes from kilomos +2022-08-06: + Jackraxxus: + - bugfix: Admin AI interact can once again print items from departmental protolathes. + JohnFulpWillard: + - rscadd: Pun Pun now gives stuff in their hand frequently and rings desk bells. + - rscadd: Pun Pun now has gentleman-like emotes, rather than screeching and roaring. + - balance: Pun Pun no longer looks for weapons in their off time. + - balance: Pun Pun is no longer vulnerable to stuns by being walked into. + - qol: Monkeys can now use desk bells. + Mooshimi: + - bugfix: Things that are ventcrawling can no longer alt click tiles to see what + is outside the pipes. + Mqiib, ToasterBiome: + - balance: Explosion epicenters no longer explode mobs twice; Fireballs and other + explosive projectiles are significantly less-damaging + Profakos: + - bugfix: Mining flora can be harvested again + RigglePrime: + - bugfix: Purrbation now properly adds and removes tails ShizCalev: - bugfix: Purchasing the Stationwide Blackout traitor event repeatedly will now only announce there is a power outage if the previous power outage has finished. @@ -278,6 +439,12 @@ - bugfix: Things that are ventcrawling can no longer alt click tiles to see what is outside the pipes. - bugfix: Purrbation now properly adds and removes tails + X13-423: + - imageadd: Improved Unholy Pitchfork back and inhand sprites + XyzzyThePretender: + - bugfix: Silicons can now interact with floodlights. + tralezab: + - rscadd: Bileworms have appeared on lavaland! 2022-08-07: Capybara Holly: - bugfix: Trying to remove rust from walls with a welding tool will now blind you @@ -327,56 +494,45 @@ - bugfix: removed unecessary bridge pipes from kilomos - bugfix: Fix audible emotes playing sounds while mob is gagged, mute, tongueless, or under a vow of silence. - - balance: the mining modsuit now costs 3000 from 2500 - - balance: the mining modsuit now still slows you down over lava, though you still - resist it - - qol: the plasma core now accepts plasma both in sheet form and ore form - - bugfix: the plasma core should no longer buggily not refill you - - bugfix: the mining modsuit bombs should now have enemies target you + CursedBirb: + - bugfix: Banana now have correct right hand sprite + Holoo-1: + - bugfix: fixed hplc not displaying purity. Also fixed incorrect display of volume + if beaker is inserted in output slot + JohnFulpWillard: + - bugfix: The air scrubber in atmos near the northern maintenance airlock is now + connected to waste. + Kylerace: + - bugfix: makes verb queuing work again + Mooshimi: - bugfix: Blind support added to some actions like stripping, being hit, and force-feeding. - - admin: A lot of game logs will now also be in individual game logs, for convenience - in log diving. - - admin: Added logging for bluespace launchpad x and y offset changes, which go - to individual game logs. - - admin: Attack logs will now be slightly shorter, one useless word was removed. - - code_imp: Radiation pulses will ask MC if they should continue processing for - every turf they iterate through, rather than just every pulse. + - bugfix: Blind people will now only be able to 'hear' audible emotes. + - bugfix: Blind and deaf people will see and hear no emotes, for obvious reasons. + Mothblocks: - rscadd: Revolution victories now call the shuttle when enough of the station is revolutionaries. + ShizCalev: + - bugfix: Grilles are now anchorable with screwdrivers again. +2022-08-08: + Addust: - rscadd: Kilo whiteship now has shit so that it can actually maintain power now - rscadd: Kilo whiteship now has both the bar and crew quarters area to increase information hell - - refactor: The Force Event UI has been refactored - - refactor: Events now have categories and descriptions - - refactor: Admin triggered events happen immediately - - balance: Fake Virus and Electric Storms are shown to admins, making them cancelable - - bugfix: makes verb queuing work again - - rscadd: Pun Pun now gives stuff in their hand frequently and rings desk bells. - - rscadd: Pun Pun now has gentleman-like emotes, rather than screeching and roaring. - - balance: Pun Pun no longer looks for weapons in their off time. - - balance: Pun Pun is no longer vulnerable to stuns by being walked into. - - qol: Monkeys can now use desk bells. - Stalkeros, Lukaster42 for existing and screaming at me the whole time: - - rscadd: Adds a "weaker" version of a standard NRI backpack for all your LARPing - needs, available in hacked Cargo's Russian crate. - - balance: Szabo-Ivanek service pistol now has a 3-burst fire mode. As a result, - it's no longer available in Cargo, being replaced with a Makarov. - - bugfix: NRI turrets and viscerators now properly react to threats. - - spellcheck: Edits a bunch of miscellaneous weapon descriptions related to NRI. - Zonespace27: - - spellcheck: Baton holster module no longer tells you that you can remove the baton. - tf-4: - - bugfix: The corrections officer area is now a proper security area with all that - entails. - - bugfix: Your character will look at your mouse cursor once again when in combat - mode. Provided you haven't turned that off. - theselfish: - - rscdel: Removed the Icon for Common. - - imagedel: Removed the Icon for Common. -2022-08-09: - Hatterhat: - - bugfix: Loadouts with the option selected to place all items in a suitcase now - properly apply the GAGS/grayscaling system to applicable items. + Fikou: + - balance: the mining modsuit now costs 3000 from 2500 + - balance: the mining modsuit now still slows you down over lava, though you still + resist it + - qol: the plasma core now accepts plasma both in sheet form and ore form + - bugfix: the plasma core should no longer buggily not refill you + - bugfix: the mining modsuit bombs should now have enemies target you + GoldenAlpharex: + - bugfix: Belts will now change appearance when items are inserted into them as + well, instead of only doing so when an item was removed from them. + LemonInTheDark: + - bugfix: Attempting to send back a reply to an ahelp after it is closed now sends + the reply to a new ticket, rather then just dropping it and leaving you for + dead with a runtime + - admin: see above Melbert: - rscadd: Paramedic PDAs now start with the Lifeline pinpointer app - rscadd: Replaced the "proximity crew pinpointer" in the paramedic's belt with @@ -385,6 +541,22 @@ MortoSasye: - balance: Head roles and security cannot have the Illiterate quirk. Head roles also can't have the brain tumor quirk. + Pickle-Coding: + - code_imp: Radiation pulses will ask MC if they should continue processing for + every turf they iterate through, rather than just every pulse. + SpaceSmithers: + - bugfix: A locker in Icebox Maintenance will no longer disappear immediately upon + roundstart. + san7890: + - balance: The odds of gulagged prisoners on IceBoxStation getting mauled by a wolf + should go down dramatically. + timothymtorres: + - bugfix: Fix audible emotes playing sounds while mob is gagged, mute, tongueless, + or under a vow of silence. +2022-08-09: + Melbert: + - bugfix: Heretic stalkers are able again to return back to their normal form after + casting shapeshift. PositiveEntropy, AxieTheAxolotl: - rscadd: Adds the Chief Medical Officer's Scrubs, making it the default clothing option when they spawn! @@ -395,43 +567,31 @@ - imageadd: Resprites every labcoat in the game, including the paramedic's. - imageadd: Resprites the entire medical department (again)! ShizCalev: + - bugfix: Security records in filing cabinets will now actually contain crimes! - bugfix: The eye of god will now send a provide a message when its scan is recharged. - SkyratBot: + SuperNovaa41: + - bugfix: Fixes ash walker tendrils dropping typeless anomaly cores. + dragomagol: + - admin: Moved the rest of the dynamic logs to dynamic.log + tralezab: + - qol: Bileworms possessed by players can now see in the dark! + - qol: Bileworms now have a death message! + - balance: Bileworms will now give up their targeting if they fail to burrow to + you. If they can still see you, they might regain aggro, but now moving say, + to the mining station/big lava lake/hirophant is a good way to de-aggro them. + twilightwanderer: - rscadd: Added new VOID stamp - bugfix: Photocopier paperforms - - rscadd: Bileworms have appeared on lavaland! - - rscadd: Concentrated barbers aid will give hairless species hair after it has - remained in them for a number of cycles inversely proportional to the purity - (20 cycles at 100% purity). Additionally, at 100% purity, it removes the smooth-headed - quirk at the same time that it grants hairless species hair. - - bugfix: Most effects that change your hairstyle are no longer delayed until certain - effects occur. - - bugfix: You cannot bypass the smooth-headed quirk with the genetics console (even - if you were somehow able to figure out how to get a specific hairstyle) - - bugfix: The species and antagonist character icons in the preferences menu are - no longer all bald. - - bugfix: Fixes ash walker tendrils dropping typeless anomaly cores. - - bugfix: Labor camp Prisoners without a sentence can no longer send themselves - back up whenever they wanted by clicking the button fast enough. - - bugfix: Prisoners can no longer get infinite labor camp points by clicking the - stacking machine with ores. - - bugfix: All ore machines now properly change their direction when they dock a - shuttle in a separate direction, fixing Lavaland's labor camp stacking machine. - - qol: Labor camp's point checker now states all the information you need, rather - than being a paragraph of text that just appears in chat. - Vishenka0704: - - rscadd: Cum on face action in Climax verb - - bugfix: now you cum on chosen target, not on you. - - bugfix: now the choice of sheath in the menu is only available with those who - have sheath - YakumoChen: - - bugfix: Ring boxes now once again initially contain the rings they're supposed - to carry. 2022-08-10: - Melbert: - - bugfix: Heretic stalkers are able again to return back to their normal form after - casting shapeshift. + GoldenAlpharex: + - bugfix: Fixed the game re-initializing your verbs for no reason when you deadmin, + which was the cause of the "Your previous action was ignored because you've + done too many in a second" spam when pressing the Deadmin button. + - bugfix: The MC tab no longer appears in a "ghost" state in your status tabs after + you deadmin. Now it's just gone, at long last! + - code_imp: Prettier should no longer be ran on files outside of the "tgui" folder. ShizCalev: + - bugfix: Player controlled cleanbots can now actually kill cockroaches and mice! - bugfix: Right-clicking a non-carbon based mob (humans, xeno, ect) will now bite them instead of doing nothing. - server: Added a configurable probability for nonhuman species to spawn in the @@ -446,6 +606,9 @@ ignoring walls and non atmos_can_pass tiles (zas zone) Zonespace27: - bugfix: Ghosts can now flip + TheBoondock: + - code_imp: add proc create_atmos_zone which detect an isolated atmos zone while + ignoring walls and non atmos_can_pass tiles (zas zone) 2022-08-11: GoldenAlpharex: - spellcheck: The long-range gas analyzer's name is no longer capitalized, as it's @@ -454,38 +617,112 @@ - soundadd: 'Added 2 new sounds to the synthesizer''s ''fun'' category: MeowSynth and Spaceman' ShizCalev: + Jacquerel: + - refactor: A lot of food which was 'gross' is now 'gore'. + - balance: '''Gore'' is disliked by Humans and Moths, but liked by Lizards and Felinids. + Lizards no longer like ''gross'' food.' + - balance: All butchered player species are considered to be gore, only preferred + by Lizards, Felinids, and people with Deviant Tastes. If you like the taste + of your fellow crew, prepare accordingly. + JohnFulpWillard: + - spellcheck: Calomel now properly states that it only purges toxins, rather than + all chemicals, like it already does. + Melbert: + - rscadd: Added support for elevator doors. + - rscadd: Elevators now have travel time, and make sound when moving. Emagging the + elevator button will speed them up. + - rscadd: Added support for less-than-lethal elevators, which crush your bones instead + of gibbing you. Emagging the elevator button will revert them to gibbing. + - rscadd: Added support for elevators to warn people below that they're moving down. + Emagging the elevator button will disable this. + - rscadd: Added elevator panels, and support for using elevators without a radial. + - qol: Elevator call buttons and the trapdoor now use balloon alerts. + - admin: Heretic starting research and ascending is logged in the Blackbox + Mooshimi: + - code_imp: Perish, individual logging runtime. + Nano: + - soundadd: 'Added 2 new sounds to the synthesizer''s ''fun'' category: MeowSynth + and Spaceman' + PositiveEntropy, Kryson: + - rscdel: Removes old and unused titanium, plastitanium and plating damaged states. + - imageadd: Resprites the wooden, titanium and plastitanium-related floors! + - imageadd: Decals related to the resprited tiles have been adjusted accordingly. + - imageadd: Updates the appearance of plating to be smoother! + ShizCalev: + - bugfix: Fixed traitors not getting a new kidnapping objective if they previously + failed to kidnap someone else. + - bugfix: Cutting open someone's heart will now actually make them bleed properly! - bugfix: The Quartermaster and his items will now trigger phobias related to command staff! - bugfix: Command rank bedsheets, jackets, cloaks, and headsets will now trigger phobias related to command staff. - bugfix: The QM's bedsheets will now make you dream of authority and silvery IDs! - - bugfix: Cutting open someone's heart will now actually make them bleed properly! - - bugfix: Fixed traitors not getting a new kidnapping objective if they previously - failed to kidnap someone else. - SkyratBot: + - qol: Rightclicking someone you're holding up will now shoot at them. + - bugfix: You can no longer hold someone up from across the station. + - bugfix: Holding someone at gunpoint will now check if you can actually see the + person you're holding up more often. + Timberpoes: + - bugfix: Fixes broken command report formatting for station goals. + - bugfix: Fixes markdown paragraphing not working in paper code. + Time-Green: + - rscadd: You can now remove/add all those ugly species features with the power + of surgery! A lizards frills, horns, snout and spines, a moths wings and antennae, + podperson hair and just wings in general + - rscadd: Species features can be altered by organ manipulation or the new 'feature + manipulation' surgery! 'Feature manipulation' is a shorter version of organ + manip that let's you only operate on external features + - balance: Organ manipulation only works on internal organs now. Use 'feature manipulation' + for external organs. + - code_imp: cleans up magic numbers in surgery + - bugfix: golden wheelchairs will now spawn + VioletN: + - balance: Instead of directly lowering body temperature by a small amount, the + Grasp of Void and Mark of Void heretic abilities now inflict a status condition + called void chill, which steadily lowers the victim's body temperature and also + inflicts a mild slowdown. + - balance: The void storm summoned by ascended void heretics now inflicts less direct + burn damage, but lowers body temperature much more strongly. + - bugfix: The void storm visual overlays now properly update when the heretic exits + an area, making them a more accurate indicator of which area the heretic is + in. + Wallem: + - imageadd: Updates the sprite for the metal & homerun bat + XyzzyThePretender: + - spellcheck: Fixes grammar for solar panel construction + - bugfix: Newly built turrets start unlocked. - balance: munchies now impact hunger at a rate similar to running nonstop + Zonespace27: - bugfix: Butcher's meat hook no longer fails when the user has TRAIT_NOGUNS - - bugfix: Newly built turrets start unlocked. + axietheaxolotl: - imageadd: new dead body spawner icons + orthography: - bugfix: emitter examine text now displays minimum maximum delay. - spellcheck: changes the text on the emitter examine blurb. - - spellcheck: Calomel now properly states that it only purges toxins, rather than - all chemicals, like it already does. - - spellcheck: Fixes grammar for solar panel construction - Wallem: - - imageadd: Updates the sprite for the metal & homerun bat 2022-08-12: GoldenAlpharex: - bugfix: Conveyor belts now properly update their sprites when flipped or inverted using a screwdriver, without the need to being turned on and off to take effect. - bugfix: Food exports now follow export value elasticity, as intended. - Melbert: - - admin: Heretic starting research and ascending is logged in the Blackbox + JohnFulpWillard: + - rscadd: Species now have custom damage examines, so Androids now have denting + and charring, rather than bruising and burning. + Pepsilawn: + - bugfix: Kitchen sinks will now be functional if placed facing against a window + and some other closed structures, up-facing sinks also look somewhat better + as a result. ShizCalev: - qol: You can now use wallets & PDAs with IDs in them to play roulette! - bugfix: Fixed a runtime when hitting a roulette table with an ID that doesn't have a linked bank account! - SkyratBot: + Spookuni: + - bugfix: Dorms rooms D and R on tramstation now bolt properly. + SuperNovaa41: + - admin: Added two new procs into the VV dropdown menu to add and remove mood events + from living mobs. + necromanceranne: + - balance: The Bulldog Shotgun now has a second magazine. + - balance: You can swap the magazine as you fire by shooting with rightclick. + vincentiusvin: - bugfix: fixed an incorrect count down message if SM changed it's delam twice. - balance: Made a pure BZ SM a tad stronger, made a mixed BZ + high power gas SM a lot weaker. @@ -494,158 +731,135 @@ - balance: Water vapor SM will only lower power transmission instead of dampening it both ways. - balance: CO2 power increase can also be modified by other gases. - - code_imp: Perish, individual logging runtime. - - bugfix: Kitchen sinks will now be functional if placed facing against a window - and some other closed structures, up-facing sinks also look somewhat better - as a result. - - bugfix: golden wheelchairs will now spawn - - bugfix: Fixes broken command report formatting for station goals. - - bugfix: Fixes markdown paragraphing not working in paper code. - SuperDrish: - - rscadd: Introducing new tails! Queen Bee and Queen Insect(totally not queen bee - without secondary colours). 2022-08-13: - AnywayFarus: - - bugfix: now female leaves decal when ends an organic action - - bugfix: male cannot end on somebody or something through clothes - Higgin: - - bugfix: Cryopods now display accurate time before you can cryo somebody who's - AFK/SSD. + 567Turtle: + - qol: Made mime emotes more consistent + Hatterhat: + - bugfix: Departmentally ordered large crates (the big ones that need crowbars) + now properly register that they need to be opened in their appropriate department, + and provide proper payouts to the cargo budget upon delivery. + JohnFulpWillard: + - refactor: All glasses, cups, and condiment bottles have been refactored, please + report any bugs you might see as a result of this. + Jolly: + - bugfix: On Meta, NanoTrasen 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 + the Xenobiology one. Melbert: - bugfix: Either ladders will no longer show screentips relating to "warping", or fake teleportation runes will no longer show screentips related to "climbing". Honestly not sure but one of them was wrong + - bugfix: Revolution victory correctly removes lathe taxes + - bugfix: Someone completing the weakpoint / hack traitor objectives correctly fails + everyone else doing it + - bugfix: Having a dog no longer be ai controlled doesn't keep it keen on playing + fetch + - rscadd: Added support for elevator doors. + - rscadd: Elevators now have travel time, and make sound when moving. Emagging the + elevator button will speed them up. + - rscadd: Added support for less-than-lethal elevators, which crush your bones instead + of gibbing you. Emagging the elevator button will revert them to gibbing. + - rscadd: Added support for elevators to warn people below that they're moving down. + Emagging the elevator button will disable this. + - rscadd: Added elevator panels, and support for using elevators without a radial. + - qol: Elevator call buttons and the trapdoor now use balloon alerts. OrionTheFox: - - imageadd: Biosuits, labcoats, scrubs, and medical gear have all been updated to - TG standard on humanoid AND digitigrade/muzzled crew! Robotics' labcoat has - kept its black and red colors, dont worry. Firesuits and Radiation suits have - been updated for digi/muzzled crew as well! + - bugfix: Armor Vests will now display properly for Digitigrade legs. + - imageadd: Alongside fixing the Syndicate'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 + - bugfix: Normal items once again do not fit into bibles. + - rscadd: Fax Machine + Mooshimi: + - refactor: Blind stripping and feeding alerts are smaller than gigantic now. + Onule, PositiveEntropy, TetraZeta, Axietheaxolotl, Thgvr, AdipemDragon: + - imageadd: Completely resprites all medkits! + - imageadd: Completely resprites all medical tools! + - imageadd: Removes the clamp sprite and instead creates separate hemostat and retractor + inhand sprites! + - imageadd: Adds missing inhands for the bonesetter, advanced med tools, tactical + medkit, surgical drill and bone gel! PositiveEntropy: - imageadd: Holopads are now shinier and more elegant! - SkyratBot: - - qol: Made mime emotes more consistent - - admin: Added two new procs into the VV dropdown menu to add and remove mood events - from living mobs. + PositiveEntropy, TetraZeta, Azlan: + - imageadd: Metal, Reinforced, Reinforced Glass, Plasmaglass, Reinforced Plasmaglass, + Titanium Glass, Plastitanium Glass, Wood and Poker tables have been updated! + ReinaCoder: + - imageadd: The Profane Scholar outfit has been resprited + Wallem: + - imageadd: GAGSifies most of the radio encryption key sprites + Y0SH1M4S73R: - bugfix: Fixes the formatting of the admin lua editor - qol: In the admin lua editor, there will be a "jump to bottom" button in the log viewer if the log is longer than can be shown in the window. - qol: The lua editor log viewer is now split into pages of at most 50 log entries. - - imageadd: The Profane Scholar outfit has been resprited - - bugfix: Dorms rooms D and R on tramstation now bolt properly. - - rscadd: Species now have custom damage examines, so Androids now have denting - and charring, rather than bruising and burning. - - refactor: Blind stripping and feeding alerts are smaller than gigantic now. - Time-Green: - - rscadd: You can now remove/add all those ugly species features with the power - of surgery! A lizards frills, horns, snout and spines, a moths wings and antennae, - podperson hair and just wings in general - - rscadd: Species features can be altered by organ manipulation or the new 'feature - manipulation' surgery! 'Feature manipulation' is a shorter version of organ - manip that let's you only operate on external features - - balance: Organ manipulation only works on internal organs now. Use 'feature manipulation' - for external organs. - - code_imp: cleans up magic numbers in surgery - Zonespace27: - - qol: Borer abilities use balloon alerts instead of chat messages - - refactor: Datumized borer focuses - jjpark-kb: - - bugfix: you can remove borers from bodies again + twilightwanderer: + - rscadd: Fax Machine + vincentiusvin: + - qol: made the operating computer go off on body position instead of the resting + intent. + - qol: aliens show up on operating computer now. + - bugfix: fixed the operating computer UI showing empty progress bars. Should just + tell you no patient in text now. + - refactor: refactored how operating tables fetches it's patient. 2022-08-14: Any%, TetraZeta, PositiveEntropy: - imageadd: Resprites all magboots! - imageadd: Resprites Sneakers! - Higgin: - - balance: Major borer rebalance. Borer abilities now generally cause brain damage - up to and including traumas. Borers can no longer heal brain damage/traumas - on their own. Borers require living hosts to gain stats, chems, or heal. Hosts - must manage more significant costs even with passive borers. Borer objectives - are now much more realistically achievable, and willing hosts contribute to - much greater boosts for borers than unwilling hosts. Borer actionspeed/movespeed - buffs reduced. Borers have stamina damage and confusion on their Fear ability - as well as the ability to make Multiver (a chem purger) and Mindbreaker Toxin - (a hallucinogen that can be used to brainwash/incapacitate) without learning - from prior samples. + CPTANT: + - bugfix: Modafinil Overdose now properly puts you to sleep. + CapybaraExtravagante: + - soundadd: Ambience no longer uses reverb, as the sound files for ambience already + has reverb as needed usually! + Guillaume Prata: + - qol: You can now "welder craft" iron sheets/rods/floor tiles by Left or Right + clicking one of these items with a welder. It will craft one of the other two + options depending on the Left/Right click. There is a contextual screen tip + too so just hover over them with a welder for details on the results. + JohnFulpWillard: + - bugfix: Earmuffs now properly fix ear damage. 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! - - 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 - prison. - - bugfix: On Meta, outside the barber shop there should no longer be a spooky floating - bluespace gas vender. - - bugfix: On Meta, the inner side walls of the barber shop bordering EVA/Gateway - are now proper R-Walls. - PositiveEntropy, TetraZeta, Azlan: - - imageadd: Metal, Reinforced, Reinforced Glass, Plasmaglass, Reinforced Plasmaglass, - Titanium Glass, Plastitanium Glass, Wood and Poker tables have been updated! + Mothblocks: + - qol: Vending machines now support categories. Premium/contraband is moved to categories, + and the ClothesMate has special categories for different levels. ShizCalev: - bugfix: Dentally implanted pills now actually work. - SkyratBot: + SuperNovaa41: + - bugfix: Long range Gas Analyzer now appears under "Tool Designs" as intended. + - rscadd: Adds bear hugs to the game. Squeeze your friends so they can't escape + your love! + TheBoondock: + - qol: ranged analyzer is now able to scan the tile of machines and tables without + clicking on the tile directly + - qol: ranged analyzer can now scan further upward to 15 tiles + Timberpoes: - bugfix: Fix an issue where exceptionally large tape recorder printed transcripts could be generated. They now split across multiple pieces of paper. I sure hope you have a filing cabinet handy! - - bugfix: Earmuffs now properly fix ear damage. - - rscadd: Adds bear hugs to the game. Squeeze your friends so they can't escape - your love! - - soundadd: Ambience no longer uses reverb, as the sound files for ambience already - has reverb as needed usually! - - bugfix: Modafinil Overdose now properly puts you to sleep. + Time-Green: + - bugfix: fixes abstract food spawns + - code_imp: allowed food list is only generated once + YusufEmirKoroglu: - rscadd: Add keyboard shell. A shell that allows the user to input a string. Available after researching the Advanced Shells tech node. - imageadd: added 2 icons for the keyboard shell. One unassembled and one assembled. - - bugfix: fixes abstract food spawns - - code_imp: allowed food list is only generated once + dragomagol: - qol: blind forcefeeding and stripping is lorge again - - qol: ranged analyzer is now able to scan the tile of machines and tables without - clicking on the tile directly - - qol: ranged analyzer can now scan further upward to 15 tiles - - bugfix: Fix pirates to not be displayed on crew monitors - Zenitheevee: - - bugfix: removes a whole buncha active turfs on port tarkon - Zonespace27: - - refactor: Borer chem injection now has a custom UI - - spellcheck: '"Choose focus" borer ability renamed to "Learn focus"' - - bugfix: Borers can now have multiple focuses - - bugfix: Borer chest focus will no longer leave host hungry - - refactor: Refactored more borer code - tf-4: - - balance: Reflectors can now reflect nuclear particles. - - balance: Replaced the upgraded baton with a regular one for drifting contractors. - - balance: Replaced the drifting contractor's SWAT boots with combat boots. - - balance: Drifting contractors now get +3 starting TC. -2022-08-15: - Ghommie: - - bugfix: Features such as but not limited to Blastoff, the golden bikehorn and - voice of god should once again make spessmen flip. - Higgin: - - bugfix: Nerve Stapled no longer acts as a workaround to Security not hiring Pacifists. - - balance: Department Guards can no longer be Pacifists, Nerve Stapled, or Foreigners. - Melbert: - - bugfix: Revolution victory correctly removes lathe taxes - - bugfix: Someone completing the weakpoint / hack traitor objectives correctly fails - everyone else doing it - - bugfix: Having a dog no longer be ai controlled doesn't keep it keen on playing - fetch - - rscadd: Added support for elevator doors. - - rscadd: Elevators now have travel time, and make sound when moving. Emagging the - elevator button will speed them up. - - rscadd: Added support for less-than-lethal elevators, which crush your bones instead - of gibbing you. Emagging the elevator button will revert them to gibbing. - - rscadd: Added support for elevators to warn people below that they're moving down. - Emagging the elevator button will disable this. - - rscadd: Added elevator panels, and support for using elevators without a radial. - - 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, - So Below' and 'Syndie-med, Stay Winning''s icons have been updated! - SkyratBot: + necromanceranne: - code_imp: Removes an unused bible proc - bugfix: Normal items once again do not fit into bibles. - - rscadd: Fax Machine + timothymtorres: + - bugfix: Fix pirates to not be displayed on crew monitors +2022-08-15: + CursedBirb: + - rscadd: Kobun the bread dog that helps people with low mood + - rscadd: Adds crafting recipe for Kobun + RandomGamer123: - rscadd: You can now make trapdoors. Craft a trapdoor kit and use it on an openspace tile to make one, then link and activate it with some trapdoor electronics (printable at an autolathe or the engineering lathe) and optionally a trapdoor remote (crafted @@ -697,6 +911,31 @@ any plasma in these airs for now on. - bugfix: Also on Meta, firelocks were installed in the virology airlock to mimic the Xenobiology one. + ReinaCoder: + - imageadd: The pirate captain hat and suit has been resprited + lnGoror: + - bugfix: fixed taste layering + - code_imp: changed exposing reagents +2022-08-16: + Capybara Holly: + - bugfix: ambience buzzing no longer resets if you move between areas that share + a buzz (e.g. maintenance areas) + Comxy: + - rscadd: Swap Spell - this spell allows you to swap location with any living being. + - soundadd: Swap Sounds + - imageadd: Swap Icons + FernandoJ8: + - code_imp: changed the randomize_human() proc to call species procs instead of + being mostly hardcoded and cleaned up some code + - bugfix: randomize_human() can now assign plural gender to a mob and will always + do so for species without sexes + - bugfix: the external features of non-humans are now randomized properly by randomize_human() + and all mechanics that call the proc, such as mulligans + GoldenAlpharex, but really Valtosin for suggesting the fix: + - bugfix: Chat saving will no longer break if the CSS stylesheets contain unsupported + CSS rules. + JohnFulpWillard: + - bugfix: Clown cyborgs now repair their flash when recharging Kokonut/Thgvr: - imageadd: Updates Cigarette boxes and cigar case sprites to 3/4ths perspective. - imageadd: Updates matches (lit and burnt states) @@ -732,6 +971,21 @@ raider. - bugfix: fixes NRI ship's walls' diagonality. - balance: player-available deployable landmines nerfed significantly. + RandomGamer123: + - spellcheck: Fix RCD deconstruction message for turfs being incorrect + ShizCalev: + - imageadd: You can now see through glass tables again! + - bugfix: Fixed a runtime caused by ghosts examining artwork. Your ancestors will + no longer be able to admire your crayon drawings, sorry. + - bugfix: Fixed mechas with infinite powercells draining the cells on destruction + Spookuni: + - balance: All required techweb experiments have been substituted for expensive + discount experiments. + Time-Green: + - qol: geysers no longer need to be plungered + Vire: + - bugfix: The cryopod on the Cere emergency shuttle can now be connected while the + shuttle is docked. Wallem: - imageadd: Updates the newscaster wallframe sprite Wallem, Imaginos: @@ -746,6 +1000,23 @@ clicking one of these items with a welder. It will craft one of the other two options depending on the Left/Right click. There is a contextual screen tip too so just hover over them with a welder for details on the results. + dragomagol: + - admin: lavaland elite summoning is now logged in game.log + necromanceranne: + - rscdel: Reverts https://github.com/tgstation/tgstation/pull/49103. Krav Maga is + back to a much older state. Mostly. + - balance: Krav maga right click shoves again, and can have a chance of stealing + held items. + - balance: Most attacks with krav maga no longer check armor, and do a flat amount + of damage. + - balance: Legsweep deals 5 brute instead of stamina damage. + timothymtorres: + - rscadd: Add liquid dark matter to bluespace bananas. +2022-08-17: + EOBGames: + - rscadd: Having struck a deal with Piccionaia Home Appliances, Nanotrasen 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! Melbert: - balance: Default heretic threat costs have been bumped down, and they can appear at slightly lower pop if the round is high threat. (Server configuration may @@ -779,6 +1050,7 @@ - code_imp: changed exposing reagents - balance: The Bulldog Shotgun now has a second magazine. - balance: You can swap the magazine as you fire by shooting with rightclick. + Pickle-Coding: - balance: Changes hydrogen and tritium gas reaction stoichiometry. 1 mol of hydrogen/tritium and 0.5 mols of oxygen getting consumed will produce 1 mol of water vapour. - balance: Hydrogen and tritium burn rate has been changed to be the minimum of @@ -817,6 +1089,50 @@ friend brings more loot! jjpark-kb: - bugfix: tongs can pick up rods again + RandomGamer123: + - bugfix: Kudzu that has been planted from a seed which already had mutations on + it cannot gain duplicate copies of those mutations + Rhials: + - bugfix: The messages for using a PAI hacking module have been tweaked, and will + no longer speak to everyone in the first person. + ShizCalev: + - bugfix: You can no longer remove the toner cartridge from a printer while it's + busy printing. + necromanceranne: + - bugfix: Rats no longer drop a food item and their own corpse when they die. +2022-08-18: + Kapu1178: + - bugfix: Ethereal hair now inherits from their glow again. + Melbert: + - bugfix: Fixes stuttered words with anxiety being capitalized + TerraGS: + - bugfix: Gutlunch should now eat gibs as intended + dragomagol: + - bugfix: holopads look properly open when screwdrivered + kreindo: + - rscadd: Added Tempeh +2022-08-19: + CursedBirb: + - bugfix: This time correct banana side sprite + Jacquerel: + - bugfix: Pun Pun shouldn't save the name "Unknown" between rounds unless that is + actually their real name for some reason. + JohnFulpWillard: + - bugfix: Hilbert Hotel's 'Note to the Institute' and Cybersun ship's password, + now has the text they are supposed to have, on them. + Rhials: + - bugfix: The Tiziran Canned Goods Pack on the chef's console now gives you the + proper supply box. + scriptis: + - balance: nitrium no longer grants stun immunity + tralezab: + - balance: Tendrils now drop their loot when you interact with them during the collapse. + - balance: But they can be interacted with by multiple people, so mining with a + friend brings more loot! + - bugfix: Fixes visual bugs related to cows and pulling. + - bugfix: Fixes cpws moving and having AI while you don't pull them during riding + - bugfix: Removed a heap of situations where dynamic rulesets could fail while executing, + causing runtimes 2022-08-20: Azlan, Wallem: - imageadd: Ports Azlan's portable atmos machines from Baystation @@ -826,30 +1142,17 @@ be automatically stripped. This only applies to input boxes that start with the multiline view enabled, and will thus not work on input boxes that aren't meant to support it. + Profakos: + - spellcheck: reflavoured the path of blades + RandomGamer123: + - bugfix: Circuit view sensors should no longer display undertile objects or abstract + objects or other people's hallucinations etc. ShizCalev: - bugfix: Icons will now actually update on mobs lol - - qol: Rightclicking someone you're holding up will now shoot at them. - - bugfix: You can no longer hold someone up from across the station. - - bugfix: Holding someone at gunpoint will now check if you can actually see the - person you're holding up more often. - admin: Admin messages regarding gas canisters being opened now have the opener's lookup / follow link. - SkyratBot: - - bugfix: Circuit view sensors should no longer display undertile objects or abstract - objects or other people's hallucinations etc. - - bugfix: The Tiziran Canned Goods Pack on the chef's console now gives you the - proper supply box. + VioletN: - bugfix: The heretic Cleave spell no longer hits targets twice. - - bugfix: Pun Pun shouldn't save the name "Unknown" between rounds unless that is - actually their real name for some reason. - - spellcheck: reflavoured the path of blades - - bugfix: Fixes visual bugs related to cows and pulling. - - bugfix: Fixes cpws moving and having AI while you don't pull them during riding - - bugfix: This time correct banana side sprite - Zenitheevee: - - rscadd: shutters for the aft hall and comms room windows are now in Defcon 3 to - be more consistent with the others - - bugfix: shutter buttons on tarkon are now where they should be itseasytosee: - bugfix: riot darts no longer become invisible when you take the cap off with a screwdriver. @@ -1062,6 +1365,37 @@ Melbert: - bugfix: Fixes some runtimes from loading maptemplates with random populated bookselves, who knows they might even spawn with books now. + FernandoJ8: + - bugfix: changed the directions of the bottom decals on the nature emergency shuttle + and the bottom gambling machine on the disco inferno shuttle from 3 (north+south) + to simply 2 (south), as they should be. + Jolly: + - bugfix: On Delta, in the abandoned kitchen, there is no longer four air alarms. + Stop being greedy, sheesh. + Melbert: + - bugfix: Fixes storage to storage mass transfering not being instant + - bugfix: Fixes two do_afters for storage mass transfer + - bugfix: Dumping storage spreads its items around again + - bugfix: Drag-opening a storage won't try to dump inside you + - bugfix: Transferring a ton of things into a fridge won't deafen you anymore + - rscadd: You can now mass transfer onto griddles + - bugfix: Some things that made you BOMBIMMUNE now actually make you BOMBIMMUNE, + probably + - bugfix: Fixes a runtime that occurred when bodyparts received damage while disconnected + from a mob + ShizCalev: + - qol: Added a new mob helper complementary to ran_zone() called get_random_valid_zone(), + which can only return zones/bodyparts that a mob DOES have. + - admin: Fixed Abyssal Gaze being logged when it wasn't actually being used + dragomagol: + - code_imp: split drinks_recipe into multiple files by category + - bugfix: tempeh starter uses the correct icon, desc fixes + timothymtorres: + - bugfix: Fix haunted tarot deck exploit + - qol: Add wisdom text to fortune cookies + tralezab: + - rscdel: Thieves are gone, and so are Opportunists, their midround counterpart. +2022-08-22: ShizCalev: - refactor: A bunch of things that used to not do anything (or just fall back on the chest) when targeting a limb that someone was missing will now be far more @@ -1072,6 +1406,91 @@ SkyratBot: - bugfix: Fixed shove collisions logging incorrectly. - bugfix: A duplicate camera was removed from Meta AI sat + SuperDrish: + - rscadd: Mortar now gives you an option. Do you want to grind or juice your thing? + san7890: + - admin: Whenever a turf is lit up by fire (like plasma floors combusting due to + fire above them), the name of that turf is now explicitly logged. +2022-08-23: + AnywayFarus: + - rscadd: Added a meat and fish poke + - rscadd: Meat and fish poke was added to robo-tourist order + CPTANT: + - bugfix: Lockers now give proper feedback when you are unable to close them and + no longer try to toggle lock status when you fail to close them. + EOBGames: + - bugfix: Coffeemaker boards can now be printed at the service, engineering and + science board printers. + IndieanaJones: + - refactor: Refactored Space Dragon's antag datum to separate the antagonist objectives + from the mob itself. + LukasBeedellCodestuff: + - rscadd: Pig crate from cargo + - rscadd: feeding carrots to pigs lets you tame them and ride them + - rscadd: raw pork from killing a pig + - rscadd: pork chops from cooking raw pork + PositiveEntropy: + - imageadd: Wood flooring now looks browner. + ShizCalev: + - bugfix: The syndicate outpost intercom is now an actual functional syndicate intercom! + timothymtorres, antropod: + - bugfix: Fix protolathe displaying duplicate stock parts categories +2022-08-24: + AdipemDragon: + - imageadd: When looking out into nearby space, your local planet might show off + more cleanely, now! Check it out, next time you have a mandated break! + DrDiasyl: + - soundadd: Virology got new mysterious ambient sounds. + Pickle-Coding: + - balance: Reduces CO2 heat penalty to 2, from 6. + - balance: Removes CO2 power transmission bonus. + Rhials: + - rscadd: Bananas now have a 1% chance to be boomerang-bananas. These look identical + to normal bananas, aside from a slightly unique examine text. Make sure to check + your bananas before peeling it to slip the HOS, you may just have a rare item + on your hands. + ShizCalev: + - qol: Drones now have multitools, pipe dispensers, t-scanners, and analyzers! + - bugfix: Toggling breakers via the power flow control console now actually works. + - bugfix: Targeting limbs now works again. Honk! + - bugfix: Fixed a bunch of things that would say "your human arm" instead of just + "your arm". + - bugfix: Drones will no longer by shy when invisible mobs are around! (eg phased + revenants, bloodcrawling slaughter demons, ect) + - admin: Admin deletion messages are now a little more verbose. + san7890: + - bugfix: You should now no longer need thousands of hours to unlock your favorite + head of staff role. + tralezab: + - rscadd: You can now ask critters their name with voice of god. Their ACTUAL name. +2022-08-25: + ArcaneMusic: + - imageadd: Resprites many of the grenades used and made in-game. + Echriser: + - qol: Added a holopad to Mining Labor Camp. + Jacquerel: + - qol: Adds contextual screentips to explain whether you are going to destroy, remove, + or place a trap into a poster. + - bugfix: Midround traitors can happen again. + Jolly: + - bugfix: On KS13, the northern most solar room no longer has duped windows. + PositiveEntropy: + - bugfix: Fixes faxes playing the "fax_contain" animation and makes it actually + use the "fax_receive" animation when receiving. + - imageadd: Resprites fax machines! + RandomGamer123: + - bugfix: Asimov supremacy shows up as a human perk for default servers + - config: Added a config option to make Asimov supremacy show up as a perk for humans + even if the default lawset is not Asimov (intended for use with Asimov variants, + notably Asimov++) + - bugfix: Storage implant stacking (and the implant being rejected when you hit + the limit of 4 slots) now works + ShizCalev: + - rscadd: Space ants will now turn into space fire ants when burned with fire. + Tastyfish: + - rscadd: Added a new lift indicator for the public elevator. + - imageadd: Added standalone sprites for the new lift indicator. + Y0SH1M4S73R: - bugfix: Returning a recursive table from lua will no longer crash the server. - bugfix: Running an empty string as lua code will no longer crash the server. - qol: '`args`, `contents`, `vis_contents`, and `vis_locs` lists are now directly @@ -1115,6 +1534,41 @@ Melbert: - bugfix: Fixes a runtime that occurred when bodyparts received damage while disconnected from a mob + dragomagol: + - bugfix: cooked pig meat is no longer GROSS, raw pig meat is GORE instead of GROSS + - code_imp: meat.dm has been split into several different files + san7890: + - bugfix: On IceBoxStation, the door bolt buttons in the restrooms next to the recreational + room should no longer violate the laws of physics (or clip) with the toilet + lid. + - bugfix: On IceBoxStation, the Psychologist's Locker should now be accessible once + again. + - bugfix: Nanotrasen smoothed out some hiccups, so Security Departmental Order Crates + should now open in more parts of the brig. + scriptis: + - spellcheck: the syndicate no longer use secuirty shutters + - bugfix: tesla blast works again + vincentiusvin: + - spellcheck: fixed a typo in NT Frontier under medical partner + - qol: the ordnance experiments will give you more information on how to do them + from the UI. +2022-08-26: + AIUNBOLT: + - rscadd: the express supply console now requires cargo access instead of quartermaster + access + Jackal-boop: + - bugfix: a mining intercom being the incorrect type + Jacquerel: + - bugfix: Any mob you can hold in your hand can now also be thrown. + JohnFulpWillard: + - bugfix: You can now break eggs into cups again. + MMMiracles: + - rscadd: Adds sheep! Buy one from cargo and use a razor to shear wool off it! Use + that wool on a loom and get cloth! Feed the sheep grass to make it grow back + the wool faster! + Melbert: + - bugfix: Fixes some runtimes from loading maptemplates with random populated bookselves, + who knows they might even spawn with books now. - rscadd: 'Deltastation: The Locker Room and Dormitories have been flipped around and redone to better fit with the new layout.' - rscadd: 'Deltastation: Some rooms of Security have been widened and shifted around.' @@ -1178,6 +1632,7 @@ - bugfix: Fixed a bunch of things that would say "your human arm" instead of just "your arm". SkyratBot: + MidoriWroth: - rscadd: Added 7 new types of various salads. Vegetarians rejoice! - rscadd: Added a new ingredient order beacon box, 'Salads'. It contains many ingredients for the new salads. @@ -1213,6 +1668,156 @@ - bugfix: Anomalies will no longer spawn ontop of lava / plasma rivers. SkyratBot: - qol: Add logging when Protocol CRAB-17 is used. + - bugfix: Removed some stacked tables in the Icebox kitchen + Mooshimi: + - spellcheck: Removes the security MODsuit's description of being shockproof, as + it's false advertising. + - bugfix: Replaced the directional firelocks on Metastation garden with windoors, + so the fire alarm isn't triggered shift start. + RandomGamer123: + - bugfix: Microwaves no longer spontaneously self-deconstruct if you try inserting + non-full stacks of glass or cable coil into them. + - bugfix: DNA consoles now use power for operations even if they aren't connected + to a scanner (eg. printing mutators from a disk) + ShizCalev: + - bugfix: Fixed a couple things not updating properly with vareditted & admin deleted + cells. + - qol: You can now directly interact with beakers inserted in a PanD.E.M.I.C. with + droppers and syringes! + Vanadiom: + - 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! + distributivgesetz: + - bugfix: HoPs all around the Spinward Sector scream in joy as their beloved ticket + machine finally rises back from the dead. + - qol: Add more examines to ticket machines and tickets, giving info about people's + spot in queue and so on. + - bugfix: Resolving weakrefs in VV should open a menu now instead of doing nothing. + san7890: + - rscadd: Nanotrasen has added a new vent and a new scrubber to MetaStation's Gravity + Generator Foyer. + timothymtorres: + - bugfix: Fix cult ghosts needing to breath + - bugfix: Fix chaplain's not being able to pick their bible cover while illiterate + or blind +2022-08-27: + GoldenAlpharex: + - refactor: Refactored the manifest code to not rely on generating two photo of + each character at roundstart. This means that the start of the game should be + significantly faster. + - bugfix: The images shown in the manifest no longer look crummy, and will instead + look exactly like you'd expect them to! + Jacquerel: + - rscadd: You can now fish in chasms, and might manage to catch things that careless + miners have dropped in there. + - rscadd: If your pole is long enough to reach into a deep hole, you might catch + crabs. + - balance: Changelings can climb out of chasms if you throw them into one. + - imageadd: An icon of a nice little crab, who will grow up into something less + nice. + - rscadd: You can craft fishing equipment from various lavaland materials, so that + Ashwalkers can fish up dead miners before you. + - rscadd: You can sometimes find worms while digging up tiles, if appropriate for + that material. + JohnFulpWillard: + - bugfix: Reagents like Strange Reagent, Sulfuric Acid, blob reagents, and many + others, now works again. + - bugfix: Cultist shades can now use their Communion ability while in their shade. + Mothblocks: + - bugfix: Fixed shove collisions logging incorrectly. + - bugfix: Improved performance of space turf initializations, lowering init times + by tens of seconds. + NamelessFairy: + - bugfix: A duplicate camera was removed from Meta AI sat + Pickle-Coding: + - balance: Fires no longer protect the floor from melting. + ShizCalev: + - qol: APCs will now automatically set the lights in an area to low power mode when + they are below 30% (same % as when equipment power turns off) to conserve additional + power. + Tastyfish: + - rscadd: Status displays are now a bit more colorful and have gapless marquee text. + - refactor: Brig door timers were massively refactored behind the scenes. Door control + should still work as before but be mindful. + Vire: + - bugfix: 'Fixes a few doubled up tables in various locations: Deltastation, Icebox, + The Derelict, and the holographic skatepark.' + Vishenka0704: + - bugfix: Dead dogs can no longer befriend you or lick you. + Wallem: + - imageadd: Updates the tank compressor with a new sprite + san7890: + - bugfix: The wall engravings have returned to MetaStation's Central Medbay Maintenance + (the corridor between the CMO's Office, Plumbing, and the Pharmacy). + tralezab: + - balance: Ghouls now appear dead to health scanners and other detections of life. +2022-08-28: + Jolly: + - bugfix: On Tram, somewhere in maints, a missing windoor was readded. You're welcome. + Timberpoes: + - bugfix: Fixes reagent transfer not properly emptying the source of reagents when + transferring to a target. + optimumtact: + - balance: orks no longer shout their attacks over the radio +2022-08-29: + GoldenAlpharex: + - bugfix: Bluespace bodybags will no longer fold on themselves and delete everything + inside of them when someone inside of them attempts to fold them. + Melbert: + - code_imp: Updated some signal misuse in mob harvest component, and implemented + a signal in cult sacrifice code. I also changed the sound of sheep wool being + harvested from a welding tool sound to a scalpel sound while I was here + Mooshimi: + - bugfix: Chem Masters will now appear to be depowered when appropriate. + OrionTheFox: + - rscadd: Added a Trekkie Costume Crate! Now you can wear NT's scrapped jumpsuit + designs for only a small cost, all of which will go to NT's emergency anti-copyright + savings! + - imageadd: Updated the Trekkie uniforms to modern sprite standards, as well as + adding Voyager uniforms! + dragomagol: + - qol: coffeemakers now emit steam when they're brewing! + - bugfix: coffeemakers now have an icon when they're spawned/created + - bugfix: scotch and chocolate eggs will no longer appear as errors + - bugfix: Fixes gibtonite icons not appearing + sergeirocks100: + - qol: You can now cut the fingers off of black or insulated gloves with any sharp + object, instead of just wirecutters. + - qol: You now get a notice in chat when you cut the fingers off of gloves. + timothymtorres: + - qol: The floor is lava admin/wizard event can be ignored by floating mobs + - rscadd: Added new chems for plants. Novaflowers now have Sulphuric Acid and Corpse + Flowers now have Fluorine. Combine these chems with a Carbon Rose to create + foam effects on harvest. +2022-08-30: + Mooshimi: + - bugfix: Tramstation robotics gets its shutters button, but it's not on a desk + so you can't crush people what's the point? + NamelessFairy: + - bugfix: Updated the right click vs alt click tip to refer to shift right clicking + instead of right clicking + Profakos: + - bugfix: The aux base construction console is once again present on Tramstation + ShizCalev: + - bugfix: Anomalies will no longer spawn ontop of lava / plasma rivers. + Striders13: + - bugfix: some windoors are no longer invisible due to being hidden below shutters + itseasytosee: + - qol: Monkeys wont trip over each other anymore, and will only trip if you run + into them with combat mode on. + - qol: Player monkeys can now opt in to tripping like a regular monkey. + - refactor: Stores monkey tripping in the brain, rather than the AI controller + - refactor: Traits such as literacy and advanced tool use are now tied to the brain + rather than the species + - bugfix: Monkeys have found absolution. They now once again "seem like themselves" + - bugfix: Butchering now properly requires you to be in combat mode. + - bugfix: Monkeys will no longer attack with items worse than their basic bite. + - bugfix: Preforming surgery steps now requires the surgeon not to be in combat + mode. + kawoppi: + - admin: added logging for the rare Aurora Caelus oven ignition + san7890: - qol: When you examine or use an AI Law Module in-hand, it should look a lot nicer as you read the laws that you're about to subject that poor silicon to. - bugfix: When ghosts examine AI Law Modules, they are now able to see the actual @@ -1243,3 +1848,42 @@ room, next to Cryo. Zonespace27: - bugfix: Local servers should no longer have streams of endless title errors + timothymtorres: + - qol: Add logging when Protocol CRAB-17 is used. + tralezab: + - rscadd: Prisoners can now select their crime in their character preferences. +2022-08-31: + CPTANT: + - balance: Regular windows now have 50 melee armor and take 3 deconstruction steps. + - balance: Metastation has new windows + JohnFulpWillard: + - code_imp: Bank machines can now use anyone's bank account, rather than limited + to the Cargo budget, though it is set to the Cargo budget by default. + Melbert: + - qol: The statue spawner mapping helper spawns its statues anchored + - code_imp: Remove some hardcoding from random loot spawners + Mothblocks: + - qol: Subsystem initialization times now show to 2 decimal points. + Tastyfish: + - qol: The Status Display app can now do everything the communications console status + display screen can do. + itseasytosee: + - bugfix: The monkey and human rudimentary transform commands now function as intended. + - bugfix: Monkeys won't stay on combat mode forever after getting pissed off. + necromanceranne: + - balance: Sends a chat alert to those nearby when someone completes a stage of + a hijack. + san7890: + - rscdel: There is no longer an air alarm in the central island of atmospherics + on MetaStation. + tralezab: + - rscadd: Cows can now eat wheat by interacting with it on the ground, healing them + a little. + - rscadd: Cows controlled by AI will seek out the food they like and eat it. + - rscadd: Even moonicorns. + - rscadd: But not wisdom cows, who refuse to be tamed or show their weak side because + of space station 13 socially enforced toxic wisdom cow standards + - balance: Space Dragons can no longer place rifts on open space + twilightwanderer: + - bugfix: Fax no longer blocks access to the card reader on the MetaStation in the + QM's office. diff --git a/html/changelogs/archive/2022-09.yml b/html/changelogs/archive/2022-09.yml index 07bdffe8e8179..d55f37d32c0a7 100644 --- a/html/changelogs/archive/2022-09.yml +++ b/html/changelogs/archive/2022-09.yml @@ -1,79 +1,4 @@ 2022-09-01: - GoldenAlpharex: - - bugfix: Fixes the Dutch Jacket being invisible when selected in the loadout. - - spellcheck: Renames the Dutch Jacket's loadout entry to Western Jacket, as that's - the name of the item in-game. - Jolly: - - bugfix: Deltas armory is now correct. - Melbert: - - qol: The statue spawner mapping helper spawns its statues anchored - - code_imp: Remove some hardcoding from random loot spawners - SkyratBot: - - bugfix: Tramstation robotics gets its shutters button, but it's not on a desk - so you can't crush people what's the point? - - bugfix: Fax no longer blocks access to the card reader on the MetaStation in the - QM's office. - - qol: The Status Display app can now do everything the communications console status - display screen can do. - - bugfix: Increases PDA immersion - - balance: Space Dragons can no longer place rifts on open space - - bugfix: fixed High capacity inheritance structure - - bugfix: The aux base construction console is once again present on Tramstation - coldud13: - - qol: You can now use the Navigate verb to find cryo on most maps - itseasytosee: - - bugfix: Monkeys won't stay on combat mode forever after getting pissed off. - theOOZ: - - bugfix: Characters who are illiterate no longer need to depend on an admin or - random peer to call the Interlink shuttle -2022-09-02: - ShizCalev: - - bugfix: Supplypods can no longer be destroyed by explosions BEFORE they land. - - bugfix: Monkeys can now actually resist things! - SkyratBot: - - rscdel: There is no longer an air alarm in the central island of atmospherics - on MetaStation. - - balance: Regular windows now have 50 melee armor and take 3 deconstruction steps. - - balance: Metastation has new windows -2022-09-03: - SkyratBot: - - bugfix: Fix legion dead miners not spawning species - - qol: heretic sacrifices will drop their legcuffs before entering the minigame - (bolas, bear traps) - - balance: nerfs scipaper paper publication money across the board - - balance: nerfs scipaper ghost writing partner. - - balance: CO2 powerloss inhibition now works immediately based on gas composition - instead of slowly ramping up. - - refactor: refactored how the SM fetches it's gas info and data. No changes expected - except for the co2 thing. - - code_imp: The time between the round starting and the game like, actually starting - has been reduced by 66% - - refactor: I've slightly changed how ban caches are generated, admins please let - me know if anything goes fuckey - - server: I'm using the blocking_query_timeout config. Make sure it's up to date - and all. - - balance: Heads are no longer tasked to kill their own pets - - qol: Newly created Shades will be told much more clearly that they're supposed - to be bound to their master, if they have one. - - admin: The lua function `SS13.await` can now await non-sleeping, but extremely - expensive procs, such as `getFlatIcon` - - bugfix: Stray cargo event pods now don't runtime if a canister supply pack is - chosen, meaning that you should actually see them in the pods now - - spellcheck: Just to clarify, sonic jackhammers do NOT go through walls. Their - printing design text has been modified to reflect this. - - bugfix: Brought a portion of the admin deadsay command up to date. Revenants and - EOR players will now see admin deadchat messages in their chat tab. -2022-09-04: - Melbert: - - bugfix: Fixes storage to storage mass transfering not being instant - - bugfix: Fixes two do_afters for storage mass transfer - - bugfix: Dumping storage spreads its items around again - - bugfix: Drag-opening a storage won't try to dump inside you - - bugfix: Transferring a ton of things into a fridge won't deafen you anymore - - rscadd: You can now mass transfer onto griddles - itseasytosee: - - bugfix: Fixed balistic helmet sprites with flashlights looking weird -2022-09-05: Fikou, thgvr, Snakebitten: - balance: makes the standard quick carry modsuit module have nitrile level carrying speed instead of latex level @@ -101,6 +26,70 @@ - balance: Tramstation's tram now actually packs a punch when it hits you. It will hurt. Think twice before crossing on red! Melbert: + ORCACommander: + - bugfix: fixed High capacity inheritance structure + RandomGamer123: + - bugfix: Stray cargo event pods now don't runtime if a canister supply pack is + chosen, meaning that you should actually see them in the pods now + coldud13: + - bugfix: Increases PDA immersion + san7890: + - bugfix: An APC and a Television Monitor in MetaStation Engineering Hallway will + no longer conflict visually. + scriptis: + - rscadd: techfab inspect blocks + - refactor: techfabs (and circuit imprinters, and protolathes) now use tgui +2022-09-02: + Guillaume Prata: + - balance: Anyone with wings or a wagging lizard tail will have a small bonus to + their tacklling offense/defense. + - balance: Moths and lizards that lose their wings/tail will have worse tackling + values instead. + - balance: Fly people don't take splatting themselves on windows/walls easily and + have a higher chance to get a bad result from that. + IndieanaJones: + - rscadd: Spiders can now be caught on fire + - rscadd: Spiders take significant damage from fly swatters and stamina damage from + pesticide + - balance: Spiders have been re-balanced. Their toxins can no longer kill but they + are not as susceptible to freezing + - balance: General stats of spider broodmothers have been buffed with more health, + damage, and faster web and egg placement + - balance: Flesh spiders cannot regenerate whilst on fire + - balance: Simplemobs change their internal temperature twice as fast + - bugfix: Basic mobs no longer glitchily catch on fire. + Jackal-boop: + - bugfix: fixed the HFR fuel input part saying that it can only take tritium and + hydrogen + Jacquerel: + - rscadd: A new kind of anomaly which transforms the area into some other kind of + material. + - bugfix: Supermatter delaminations can spawn bioscramblers again. + - qol: Newly created Shades will be told much more clearly that they're supposed + to be bound to their master, if they have one. + JohnFulpWillard: + - bugfix: NT Messenger having their ringtone off will now get their messages displayed + in chat again. + LemonInTheDark: + - code_imp: The time between the round starting and the game like, actually starting + has been reduced by 66% + - refactor: I've slightly changed how ban caches are generated, admins please let + me know if anything goes fuckey + - server: I'm using the blocking_query_timeout config. Make sure it's up to date + and all. + Melbert: + - bugfix: Wabbajacking a shapeshifted mob no longer runtimes horribly. When a shapeshifted + mob is wabbajacked, they'll now be removed from their shapeshift and stunned. + - bugfix: Transforming via a shapeshift should no longer rob you of your hearing + / runechat awareness. + - bugfix: Shapeshifting plays nicer with holoparasites. + - bugfix: Being polymorphed from a xeno to a non-xeno correctly makes you a non-xeno + - refactor: Refactored shapeshifting, the shapeshift holder is now a status effect + instead of an object. + - refactor: Heretic worm form is a shapeshift spell now, this might have some minor + behavioral changes but should overall be the same. + - refactor: Refactored Wabbajack (+ cursed pool). Overall a bit more clean / consistent + behavior. - balance: 'Heretic: Curses have been reworked. You can now curse any member of the crew, granted they''re not too far away. If you additionally provide an item in the ritual containing a sample of the target''s blood or fingerprints, @@ -157,6 +146,12 @@ - rscadd: Status displays are now a bit more colorful and have gapless marquee text. - refactor: Brig door timers were massively refactored behind the scenes. Door control should still work as before but be mindful. + Mothblocks: + - qol: Windows from outside the station now get the RCD reconstruction benefits, + just like walls and floors. + Profakos: + - balance: Heads are no longer tasked to kill their own pets + RandomGamer123: - bugfix: Putting a budget card into NIRN now gives the proper error message if you are trying to buy something privately, and treat you as a normal cargo request order by someone without any permissions otherwise @@ -226,6 +221,71 @@ - rscadd: vines now take damage when off vines / heal when on vines - rscdel: vines no longer heal while moving through vines tf-4: + Rhials: + - code_imp: Removes erroneous code from bananium meteor. This should not affect + players in any way. + - spellcheck: Fixed a typo when trying to fasten in an APC board before inserting + it. + Sealed101: + - bugfix: Fixed autonamed/newly-built security cameras in areas using \improper + in their name showing up as static in security camera consoles. No, this is + the first attempt to do so, why do you ask? + ShizCalev: + - bugfix: bodybags / crates will now be explicit about what is ontop of them if + you can't close them due to other bodybags / crates being in the same tile. + - bugfix: Monkeys can now actually resist things! + - bugfix: Headless humans can no longer receive facial creampies. + - bugfix: MMI piloted mecha can now open doors using access granted through the + ID card reader! + - bugfix: Mecha will now properly open doors when approaching from unrestricted + sides. + - bugfix: Supplypods can no longer be destroyed by explosions BEFORE they land. + - qol: 'Added multi-z support to: Wizard teleporting, AI law upload computers, chemical + / tracking implants, robotics control consoles, camera bugs, blob spores, and + the apocalypse rune''s visual effects.' + Y0SH1M4S73R: + - bugfix: Fixes a couple of hard-deletes related to lua signal handlers. + - admin: The lua function `SS13.await` can now await non-sleeping, but extremely + expensive procs, such as `getFlatIcon` + distributivgesetz: + - bugfix: Fixed runtime when using AmpCheck without connecting the console with + a wire. + - bugfix: Fixed a few runtimes that could occur when using APC controller consoles. + - qol: Sucked soul out of APC controller code and UI. + - rscdel: Removed "secret" power monitor console. + dragomagol: + - rscadd: Re-adds the scrubber overflow event as a random event + - bugfix: Fried chicken, beef wellington, corned beef, full english, spider eggs, + spiderlings, and hot dogs should have their proper items + itseasytosee: + - admin: Fixed quick admin spawned humans from observes not keeping preferences + (sorry) + kawoppi: + - rscadd: added an animation for using the *cry emote + - rscadd: getting peppersprayed causes you to cry + - code_imp: the blush overlay is now affected by the face offset + ma44: + - code_imp: Trader NPCs have been given some needed frontend and backend changes + timothymtorres: + - bugfix: Fix legion dead miners not spawning species + - bugfix: Fix slimepeople soft landing showing message for stairs and self + - qol: heretic sacrifices will drop their legcuffs before entering the minigame + (bolas, bear traps) + - bugfix: Fix space bartender not having access to kitchen locker in away mission + tralezab: + - bugfix: Monkeys can correctly find weapons again + - rscadd: Shadowpeople now heal from their brains! Their brain-tumor-thingy! + - code_imp: split up surgery.dmi + vincentiusvin: + - balance: CO2 powerloss inhibition now works immediately based on gas composition + instead of slowly ramping up. + - refactor: refactored how the SM fetches it's gas info and data. No changes expected + except for the co2 thing. + - balance: nerfs scipaper paper publication money across the board + - balance: nerfs scipaper ghost writing partner. + - bugfix: fixed plasma mat ignition spitting room temperature plasma. +2022-09-03: + Fikou: - admin: the admin modsuit now has the advanced jetpack instead of the normal one - bugfix: fixes modsuit chestplate unequipping no longer retracting the suit storage item @@ -265,6 +325,51 @@ - rscadd: A new kind of anomaly which transforms the area into some other kind of material. - bugfix: Supermatter delaminations can spawn bioscramblers again. + Ghommie: + - bugfix: Brought a portion of the admin deadsay command up to date. Revenants and + EOR players will now see admin deadchat messages in their chat tab. + Melbert: + - rscadd: Revenants have a new spell available. Haunt Object, it allows them to + cause nearby loose items to lift off the ground and start attacking people! + The objects will return to peace after a few minutes, or if someone dispels + them with a null rod or bible. + Rhials: + - spellcheck: Just to clarify, sonic jackhammers do NOT go through walls. Their + printing design text has been modified to reflect this. + dragomagol: + - admin: fax messages and book printings are now logged in paper.log + - admin: renaming fax machines is logged in game log + san7890: + - bugfix: Surgery tables are now no longer transparent. +2022-09-04: + Mickyan: + - rscadd: Added two new ethereal themed pieces of clothing, find them in your local + clothesmate + - rscadd: 'New curator bundle: Ethereal Trail Warden' + Mothblocks: + - rscdel: You can no longer see maint spawners before the round starts (but your + rounds start faster now :) ) + - qol: CTF will now only load when players/admins request it, for performance. + Vishenka0704 and Ying-The-Pando: + - rscadd: Cucumbers and pickles + - rscadd: Danish hot dog + - balance: add cucumbers in dishes where they need + - qol: add to bounty cubes, orders - new vegetables + itseasytosee: + - bugfix: Fixed balistic helmet sprites with flashlights looking weird + skylord-a52: + - refactor: Reorganized the icons/mob folder and added a bunch of new subfolders + to make finding things easier. +2022-09-05: + Arturlang: + - code_imp: Removes a unnecesary function blind_eyes + Guillaume Prata: + - balance: Metal Hydrogen axe was reworked. It now work as a crowbar, can be stored + on most engineering/atmos suits and deal less damage than the default fireaxe + (15) against mobs while still doing the same damage (30) to structures or machinery. + - balance: 'The pluoxium reagent won''t heal suffocation damage and instead will + slowly heals organ damage if the target is sleeping. Hint: Cryotubes.' + Jacquerel: - rscadd: You can now send photos or trading cards through the fax machine. - rscadd: You can now hack the wires of a fax machine to have it throw items harder or accept additional flat input items such as material sheets, ID cards, and @@ -276,6 +381,52 @@ - bugfix: Fixed a few runtimes that could occur when using APC controller consoles. - qol: Sucked soul out of APC controller code and UI. - rscdel: Removed "secret" power monitor console. + - bugfix: Creating shades with soulstones won't affect the chance of midround antagonist + spawns. + Melbert: + - bugfix: Nightmares heal in darkness again + - bugfix: Blade heretics and cauterizing slashes should actually help blood loss + ShizCalev: + - bugfix: Hiding inside lockers/objects when the SM delams will protect you from + it's effects again. + Time-Green: + - bugfix: fixes infinite locker timer runtiming + dragomagol: + - imageadd: landmark icon sprites have been updated! + - bugfix: owl masks and wizard hats now use their proper inhands! + - bugfix: surprise eggs once again have a sprite + - balance: the scrubber overflow event now only triggers for half of scrubbers + - balance: removed peaceborg tire, peaceborg confuse, morphine, space drugs, acid, + mindbreaker, rotatium and plant-b-gone from the scrubber "safer" reagents list + - balance: added orange carpet, royal blue carpet, blue glitter, yoghurt, tinea + luxor, hydrogen peroxide, gravitum, and yuck to the "safer" reagents list +2022-09-06: + GoldenAlpharex: + - bugfix: Fixed the orientation of the left and right end of corporate sofas when + facing North. Their behavior is no longer swapped compared to other sofas. + Rhials: + - bugfix: The shrink ray now spawns with an abductor firing pin instead of a normal + one. + ShizCalev: + - bugfix: Admin event spawned blobs will no longer immediately announce when the + event is triggered. + - bugfix: Admin events which poll candidates from ghosts will no longer announce + the event if the event failed to spawn a mob. + VexingRaven: + - rscadd: The Research Department Server Room on Kilo Station now has an air alarm + and ventilation. + - bugfix: The Research Department Server Room on Kilo Station no longer has an atmosphere + alert at start of shift. + Y0SH1M4S73R: + - admin: The lua function "loadstring" has been added, allowing you to compile a + string of lua code into a function that runs that code. + san7890: + - rscadd: Don't like the map everyone else voted for? Rock the vote! You can now + trigger a new map vote after one has already been selected! + - config: Server operators may decide if they wish to allow players to rock the + vote, as well as set the number of times they may rock the vote during a given + shift. + scriptis: - qol: techfab tgui now supports old-school bulk sheet ejection - qol: techfab tgui no longer overflows its window if you have six million categories - qol: techfab tgui no longer consumes your screen's free real estate on an unprecedented @@ -324,25 +475,30 @@ - bugfix: Police hats no longer turn you bald while worn, and no longer act like helmets, since they're caps. - bugfix: scotch and chocolate eggs will no longer appear as errors + tralezab: + - balance: Sleeping carp deflects hand spells, CQC reflects hand spells +2022-09-07: + Addust: + - rscadd: hilbert research facility airlocks have names now + - rscadd: Kilo whiteship now has bangin donks, bolt button, and its bridge now has + atmospherics systems. + - bugfix: Kilo whiteship crew quarters air alarm now exists, meaning that vents + won't be fucky + - bugfix: Kilo whiteship engine APC is rewired - rscadd: Tram whiteship now has named airlocks - rscadd: Tram whiteship bridge and crew quarters areas are split, new APCs added - bugfix: no more shuttle engine rotation fuckery on tram whiteship - bugfix: no more firelock fuckery on tram whiteship - - code_imp: restrictedinput can now accept negative numbers + Jackal-boop: + - bugfix: fixed the cucumber seeds not being in the correct spot in the megaseed + list + JohnFulpWillard: - bugfix: Xenomorphs can no longer hold any item in the game, - - admin: When admins start CTF they can now choose which map is played or choose - random as its always been - - admin: Admins can no-longer permanently break CTF by unloading the map accidentally - - spellcheck: Fixed a typo in the Map Description for CTF Cruiser - - bugfix: CTF can now be reloaded after being unloaded - Vishenka0704: - - bugfix: fix user of xenbio bag on reproductive extract - Wallem: - - qol: The ORM now has color-coded lights showing which side is the input and output. - Blue for input, red for output. - tf-4: - - bugfix: Operating tables are visible again. -2022-09-08: + - bugfix: Police hats no longer turn you bald while worn, and no longer act like + helmets, since they're caps. + - qol: Scrubber surge events now have cockroaches popping out of dangerous vents, + rather than every vent possibly having them. + - bugfix: More dangerous scrubbers now properly shoot out more foam. Melbert: - bugfix: 'Delta: Engineering, Library Backroom, and Security Hall APCs are wired' - bugfix: 'Delta: Armory camera is no longer on a windoor, and outside armory camera @@ -368,6 +524,42 @@ ShizCalev: - bugfix: Fixed a runtime when all alive players are converted to cultists that prevented them from getting their cool halo/eye effects. + - qol: Add an examine tip explaining how to fit an explorer gas mask into a box + NamelessFairy: + - admin: When admins start CTF they can now choose which map is played or choose + random as its always been + - admin: Admins can no-longer permanently break CTF by unloading the map accidentally + - spellcheck: Fixed a typo in the Map Description for CTF Cruiser + - bugfix: CTF can now be reloaded after being unloaded + Pepsilawn: + - admin: Added proper logging to antagonist datum removal + Timberpoes: + - bugfix: Fixes an SQL query so that role banned players are now correctly banned + from their roles again. + Vishenka0704: + - bugfix: fix user of xenbio bag on reproductive extract + Wallem: + - qol: The ORM now has color-coded lights showing which side is the input and output. + Blue for input, red for output. + itseasytosee: + - bugfix: Would you believe me if I told you androids had functioning human stomachs + in them for the past 5 years? No? Well anyways its fixed. + stanalbatross: + - code_imp: restrictedinput can now accept negative numbers + tralezab: + - rscdel: Vampires, Dullahans, and Nightmares can no longer be found in certain + magic mirrors. +2022-09-08: + JohnFulpWillard: + - balance: Xenomorph abilities require being mobile to use. + - balance: Neurotoxin spit can no longer be used if you're muzzled. + Pepsilawn: + - bugfix: The mining station now requires Mining access for proper access instead + of Mining EVA, minus the one airlock leading to Mining EVA + Pickle-Coding: + - bugfix: Water vapour electrolysis and hypernoblium electrolysis now respects heat + capacity changes. + ShizCalev: - bugfix: Fixed a runtime preventing nonhuman cadavers from spawning properly. - config: Cadaver spawners will no longer yell at you when morgue_cadaver_other_species_probability is blank. @@ -381,6 +573,14 @@ - balance: Neurotoxin spit can no longer be used if you're muzzled. - bugfix: Hey, we support byond version 514.1587 now. You can upgrade if you'd like. I hope. + - bugfix: Fixed a runtime when all alive players are converted to cultists that + prevented them from getting their cool halo/eye effects. + YakumoChen: + - bugfix: 'Icebox: Moved a vent hidden under a disposal bin slightly to make it + visible' + itseasytosee: + - spellcheck: Fixed a typo in monkey trip toggling. + scriptis: - qol: techfabs, protolathes, circuit imprinters, and exosuit fabricators now automatically r&d sync - qol: the full window refresh time is now one second instead of five seconds @@ -413,6 +613,56 @@ - bugfix: Water vapour electrolysis and hypernoblium electrolysis now respects heat capacity changes. - bugfix: You can no longer adjust ethereal tunics, causing a missing icon error + tralezab: + - rscadd: Mimes can now hold a baguette like a sword by right clicking it +2022-09-09: + GoldenAlpharex: + - bugfix: Corporate sofa corners have been exorcised and will no longer engulf anyone + that sits on them while they're in the L orientation. + LemonInTheDark: + - bugfix: Hey, we support byond version 514.1587 now. You can upgrade if you'd like. + I hope. + Mickyan: + - bugfix: You can no longer adjust ethereal tunics, causing a missing icon error + NamelessFairy: + - bugfix: The bar shuttle now has correctly orientated stools + Profakos: + - bugfix: Monkey mind magnification helmets once again poll all ghosts + - rscadd: Added a preference for sentience creatures, which means people can toggle + eligibility to sentience potions, and boosted lavaland tumors. Cargorilla, Regal + Rat and Shuttle Creatures use this preference now. + - rscadd: Added several separate notification preferences for creatures + Sealed101: + - rscdel: 'Metastation: removed two excess cameras in Service Hallway and Hydroponics' + - qol: Solar Maintenance cameras are now grouped up in one place on the console's + list, several other cameras grouped up with their respective department group + - qol: tweaks to some cameras' c_tags for easier use (i.e. Tech Storage cameras + are now clearly signed as Secure and non-secure) + - bugfix: Armory - Exterior camera fixed to actually appear on console lists + - bugfix: two AI Minisat Exterior cameras fixed to be on the minisat network to + actually appear on console lists + - spellcheck: AI Upload cameras edited to not be lowercase (ai_upload -> AI Upload) + VexingRaven: + - bugfix: Fixed a malfunctioning lantern on Ice Box and the Syndicate Listening + Station. + Vishenka0704: + - rscadd: Added "ProcCall" & "Tweak Components Rating" modes in buildmode + dopamiin and tattle: + - rscadd: Distant meowing can be heard from the restricted section of station AutoDrobes. + - soundadd: A small cat meow designed to be played about three times in one second, + deafening innocent crew. + - imageadd: Cute cat slipper sprites. + lizardqueenlexi: + - bugfix: fixed a bug causing the process of slicing food to erase most of the food's + reagents +2022-09-10: + 567Turtle: + - qol: Changes how the medipens examine text works + AnturK: + - bugfix: Fishing should be now more consistent about win/failure. + Dmeto: + - qol: Reagent scanner circuit component now ouputs to a table list. + JohnFulpWillard: - bugfix: Mining station's access was reverted, and Curators once again can access it. Supply security officers also once again only have access to it during elevated access. @@ -443,6 +693,19 @@ GoldenAlpharex: - bugfix: Corporate sofa corners have been exorcised and will no longer engulf anyone that sits on them while they're in the L orientation. + - qol: Syndicate sleepers (the ones in the nukie base outpost) now drops their board + on deconstruction. + - bugfix: SaturnX now properly turns you invisible again. + ShizCalev: + - bugfix: Tables built out of custom materials (ie meat) will no longer say that + they are built from iron in their description. + SpaceSmithers: + - bugfix: Tramstation's AI Upload is now equipped with the proper modules. + scriptis: + - refactor: animated numbers now animate at 60 fps +2022-09-12: + JohnFulpWillard: + - bugfix: Pirate ships now work again. Nari Harimoto: - bugfix: you can now rotate machines even when the room has no power again - bugfix: if you enable the AIs ability to interact with machines while in an AI-Card, @@ -482,6 +745,12 @@ should take a look! (fancy hat, infinity scarf, sweater jacket, oversized jacket, fancy coat) ShizCalev: + Rhials: + - spellcheck: Fixes a typo in the cult heal spell feedback message. + - spellcheck: fixes some internal typos related to the word "auxillary". + ShizCalev: + - admin: Silenced grav generator admin warnings / logging messages when the round + is not currently in progress. - bugfix: Fixed an exploit allowing you to toggle suit sensors while dead/restrained. - bugfix: Projectiles fired by non-mob sources (IE turrets) now log reagents contained after hitting a target. @@ -660,6 +929,48 @@ SkyratBot: - bugfix: Reconnects Meta Engineering to Distro. - bugfix: Places a missing wire under Meta's Starboard Aft Solars SMES. + Thunder12345: + - bugfix: Purged pointless punctuation from probabalistic phenomenon publications +2022-09-13: + CheeseWizard2: + - rscadd: 26 mime names to mime.txt + LemonInTheDark: + - bugfix: You can construct doors and stuff on ash tiles again. My bad, broke that + one a long time back. + Rhials: + - bugfix: Sleeping Carp bullet deflection works again + Sealed101: + - bugfix: 'Metastation: restored security access restrictions to Departures Security + Post' + Thunder12345: + - bugfix: Fax machines can no longer be shipped out on the cargo shuttle, preventing + a whole new realm of CentCom infiltration techniques from being applied. + VexingRaven: + - bugfix: Signalers on the default frequency work again + Wallem: + - bugfix: Fixes a bug where the tonal indictor for sign language would get stuck + on your character for an extended period of time. + dopamiin: + - bugfix: pAIs and other pets that can be picked up no longer know shadow clone + jutsu. + timothymtorres: + - bugfix: Fix book of babel not removing blocked languages properly +2022-09-14: + Axietheaxolotl, PositiveEntropy: + - imageadd: Resprites all of the captain's clothes! + Dmeto: + - bugfix: Reconnects Meta Engineering to Distro. + - bugfix: Places a missing wire under Meta's Starboard Aft Solars SMES. + GoblinBackwards: + - bugfix: Fixed bileworms being unable to act. + Jackraxxus: + - bugfix: The RD suit storage unit has an oxygen tank so that it can be on par with + other head of staff suit storages. + LemonInTheDark: + - bugfix: The preferences menu will work and display images again. Sorry :) + Sealed101: + - bugfix: Mafia Snow map now has glass external airlocks for the two top players, + allowing them to see the players directly oppoiste of them - rscadd: 'Icebox: added a camera to southern Cargo Bay' - rscdel: 'Icebox: removed several excess cameras (i.e. Courtroom, Primary Hallway, Prison Garden)' @@ -684,6 +995,63 @@ dealt with - bugfix: A completely unused c20 subtype, also called the CMG, was gotten rid of due to being completely unused + ShizCalev: + - bugfix: Fixed a runtime when trying to injecting someone in a missing limb. + - bugfix: Fixed tackling not working properly if you didn't have a tail. + Tramz: + - rscadd: Adds a new holochassis for pAI, the chicken. + YakumoChen: + - bugfix: The holodeck crab can't be butchered for infinite crab meat anymore, so + quit your animal abuse + dragomagol: + - bugfix: scrubber overflow event is now properly categorized and has a description + in the trigger event menu +2022-09-15: + GoblinBackwards: + - bugfix: Fixed the Adjust Suit Sensors verb opening a list of all nearby mobs + JohnFulpWillard: + - bugfix: Engines now calculate their thrust power as they used to, preventing edge + cases of inconsistent shuttle call timers. + - qol: Juice cartons now splash their reagents with right-click. + KirbyDaMaster: + - bugfix: Enabled flag for morgue body containers to allow you to interact with + them while standing diagonally with the hatch open. + Profakos: + - bugfix: cyborg eye sockets no longer bleed + Rhials: + - admin: Stray Meteor trigger now gives the option to throw a random meteor instead + of selecting a specific one. + - code_imp: major_dust is now a space_dust subtype, rather than a meteor_wave subtype + orphaned in its own file. + ShizCalev: + - bugfix: Free vending machine purchases are now tracked by SSEconomy + - bugfix: Fixed examine messages stating what materials something is made out of + not working properly. + - bugfix: Fixed the Space Carp DNA harvest traitor objective not starting a carp + migration when taken + - spellcheck: Slightly reworded the examine text on bowls / customizable reagent + containers. + - bugfix: Fixed a runtime when removing beakers from a chem grenade with a wrench. + - bugfix: Fixed messages sometimes not showing properly when melting shards with + a welder. + - bugfix: Fixed glass generated from melting shards teleporting to someone when + using TK. + SpookyTheFox: + - bugfix: fixed the name of the ammo printed from the lathe + SuperNovaa41: + - rscadd: Shoe stealing is back! *shoesteal, and lie down, to take someone's shoes. + san7890: + - bugfix: Players should now once again get the reason as to why they can not start + any specific vote at any given time in the TGUI vote menu. + scriptis: + - qol: AIs are now loudmode in binary chat + skylord-a52: + - rscadd: The Syndicate is now branching off into cheap tourist merchandise -- collect + your limited edition t-shirt today by entering the nearest kidnapping pod! +2022-09-16: + JohnFulpWillard: + - bugfix: Pods should now properly know whether or not to send itself off, and won't + break other pods at the same time. Pizzie11: - rscadd: Added a unique service department version of the Plumbing Constructor, the Service Plumbing Constructor. This can be fabricated in the service protolate. @@ -703,19 +1071,98 @@ - bugfix: USB ports for circuits now work again - bugfix: You can now pin medals to buttondown shirts. - code_imp: Fixes gas mixer node concentration logging. + RandomGamer123, idea by Pickle-Coding: + - rscadd: You can now insert a hypernoblium crystal into portable atmospheric devices + (ie. canisters, pumps, and scrubbers) to allow you to toggle reactions inside + the can on and off, similar to how wrenching and unwrenching it on a connector + did previously. + - rscadd: The crystal once inserted cannot be removed without deconstructing the + canister. However, hypernoblium crystals are now single-use items, and their + cost has been halved to account for it. + - code_imp: Variable names in canister, pump, and scrubber UI code have been changed + to camel case for consistency. + - code_imp: The canister UI has been slightly changed in terms of how it displays + cell charge. + Rhials: + - bugfix: Surgically removed a stack of 50 glass sheets from the rocks of Tramstation's + lower decks. + - balance: Sepia and Timefreeze cameras are no longer single use. Refilling them + with camera film now restores their ability to rewind/freeze targets (you still + only get one picture before you run out of film). + ShizCalev: + - bugfix: Fixed a minor runtime when trying to track a human that's is no longer + trackable. + - balance: Things inside disposals pipes are now protected from weather (ashstorms, + radstorms, ect.) + - bugfix: Check power mapping debug option now properly supports multilayer wiring. + - admin: Setting machine_stat flags on machinery will now call the set_machine_stat + proc so things update properly lol. + - bugfix: Fixed a runtime when deconstructing newscaster w/ a wrench. + - admin: Improved some varedit handling for anything w/ the /obj/structure/closet + path (closets / lockers / crates) + itseasytosee: + - bugfix: Skeletons can drink milk again, sorry about that. + san7890: + - bugfix: When you are smited into an enbreaded tomb, you can no longer pick up + said tomb. + - admin: When you add a watchlist expiration date without having previously set + one, the logged message should now be more clear as to this. + timothymtorres: + - rscadd: Add planks used on doors creates crude barricades. Can also be used on + 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. - bugfix: Fix plasma cutter or guns that burn not being able to ignite plasma - balance: Change plasma cutters damage type to BURN and this will cause reduced damage to mining mobs - balance: Explodable stuff now detonates when hit by a BURN projectile. - admin: Prisoners returning from the gulag as well as reclaiming their items from the gulag item reclaimer are now both logged. - - bugfix: Fixes water vapour not consuming water vapour when freezing turfs. - - code_imp: Turfs will not sleep during an ongoing gas reaction, and excited groups - won't dismantle if one of their turfs are reacting. - - bugfix: CTF Instagib mode can now be toggled without breaking CTF - - admin: Admins can now toggle CTF Instagib mode while CTF is not running + - bugfix: Fixes water vapour not consuming water vapour when freezing turfs. + - code_imp: Turfs will not sleep during an ongoing gas reaction, and excited groups + won't dismantle if one of their turfs are reacting. + - bugfix: CTF Instagib mode can now be toggled without breaking CTF + - admin: Admins can now toggle CTF Instagib mode while CTF is not running + - bugfix: ghost follow links no longer appear above binary messages using light + theme + - 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 + one line, they are now split on separate lines. + zxaber: + - balance: Airlocks with an unrestricted side no longer function as a light source. + The indicator will now be visible even in the dark. +2022-09-17: + NamelessFairy: + - bugfix: CTF Instagib mode can now be toggled without breaking CTF + - admin: Admins can now toggle CTF Instagib mode while CTF is not running + - bugfix: The Chapel bookshelf is now actually inside the chapel + - bugfix: The funeral parlor airlock access has been amended back to public access + Pickle-Coding: + - bugfix: Fixes water vapour not consuming water vapour when freezing turfs. + - code_imp: Turfs will not sleep during an ongoing gas reaction, and excited groups + won't dismantle if one of their turfs are reacting. + - code_imp: Fixes gas mixer node concentration logging. + ShizCalev: + - bugfix: Fixed voice of god breaking if someone resisted your command. + - admin: Debugging / admin omnitool now stabs eyes when in screwdriver mode. + - bugfix: Fixed not being able to scoop up holochassis pAIs. + Thunder12345: + - bugfix: You can now pin medals to buttondown shirts. + Watermelon914: + - bugfix: USB ports for circuits now work again + dopamiin: + - bugfix: several foods now taste like what they should + san7890: + - admin: Prisoners returning from the gulag as well as reclaiming their items from + the gulag item reclaimer are now both logged. + scriptis: - bugfix: ghost follow links no longer appear above binary messages using light theme + skylord-a52: + - refactor: Scientists have recently reclassified jean shorts as a subtype of the + broader shorts clade, instead of a separate genus. +2022-09-18: + Pickle-Coding: - balance: Radiation range from tritium combustion and proto-nitrate tritium to hydrogen conversion increased by 3 times. - balance: Sets the radiation threshold for all gas reactions that release radiation @@ -753,6 +1200,10 @@ ShizCalev: - bugfix: Fixed medibeams sometimes crossing themselves! SkyratBot: +2022-09-19: + Jackraxxus: + - spellcheck: Updates liver failure examine text to make better use of pronoun helpers. + LemonInTheDark: - bugfix: The alt click tab (obj tab?) will no longer cause massive clientside lag (unless you alt click that 2000 obj large tofu pile) - bugfix: The alt click menu is snappier now, try usin it and let me know if anything @@ -783,6 +1234,12 @@ - bugfix: fixed cyborg energy saw lacking a sprite - bugfix: fixed debug omnitool lacking sprites for surgery tools - bugfix: fixed lacking sprite for taster + MMMiracles: + - rscadd: Tramstation's maintenance has been completely overhauled with modular + parts for more variety and differing routes between rounds. + - qol: Tramstation's maintenance is now more antag-friendly when it comes to dark-dwelling + roles and traversing. + Sealed101: - bugfix: fixed exosuit ammo boxes not updating their sprite/description properly when emptied - qol: adds an examine tip about folding & recycling on empty exosuit ammo boxes @@ -812,6 +1269,45 @@ lower decks. - bugfix: Items that rotate will no longer spam you with error messages when you hover your mouse over them. + ShizCalev: + - bugfix: Fixed medibeams sometimes crossing themselves! + TheBoondock: + - balance: the contraband rollingpin in chef's vendor is now made of metal and yes + it hurts alot more when being hit + dragomagol: + - bugfix: moved an air vent out from underneath a disposals bin in the Meta incinerator + - bugfix: replaced a regular intercom with a prisoner intercom in the Icebox prisoner + transfer + - bugfix: replaced the window spawners in Meta departures (the ones in the middle + of the room) with plain windows so you can see the flowers + private-tristan: + - rscadd: medical doctors and CMOs now have surgical tool heirlooms +2022-09-20: + JohnFulpWillard: + - refactor: Teams used by Antagonists have been refactored, please report any bugs + you might find. + - spellcheck: Team antagonists are now improper. + - spellcheck: Bloodbrothers now show their team antagonist name in admin panels. + NamelessFairy: + - bugfix: A duplicate mass driver controller on Kilo has been deleted, you can no + longer operate the toxins mass driver from maintenance. + - bugfix: Kilo's north escape pod now correctly has its catwalk in the nearstation + area. + - bugfix: Kilo no longer has a random incinerator area in space. + - bugfix: removed a random decal from arrivals on Kilo. + Profakos: + - rscadd: Icebox's mining aux base can now teleport to your chosen underground location + on the icemoon. + ReinaCoder: + - imageadd: The station bounced radio has been resprited + Salex08: + - bugfix: removes duplicate paper bin with pen in caps office + Sealed101: + - bugfix: glockroaches (and maybe other unreported simplemobs that can shoot) now + properly shoot + - bugfix: fixed cyborg energy saw lacking a sprite + - bugfix: fixed debug omnitool lacking sprites for surgery tools + - bugfix: fixed lacking sprite for taster TheBoondock, Wallemations: - rscadd: Adds a new pair of goggles to atmospheric, the thermal imaging goggles help highlight the hot/cold and normal temperature for atmos tech to quickly @@ -832,6 +1328,37 @@ rules for the game sold separately. SkyratBot: - bugfix: Fixed bypassing gasmask FOV. + Watermelon914: + - bugfix: Fixed map vote including maps that have already been played twice in the + last 3 rounds. + axietheaxolotl: + - imageadd: 'A complete overhaul of security sprites. See #69948 for more details.' + - spellcheck: Replaced all instances of "Jumpsuit" and "Jumpskirt" within sec items + to be "uniform" and "skirt" respectively. + kawoppi: + - rscadd: axolotls have taken refuge in the station's moisture traps + timothymtorres: + - rscadd: Change infectious zombies to be illiterate +2022-09-21: + Jacquerel: + - bugfix: Removes a duplicated fax machine from the tram cargo lobby which wasn't + supposed to be there. + JohnFulpWillard: + - bugfix: Items that rotate will no longer spam you with error messages when you + hover your mouse over them. + NecromancerAnne, quinn: + - imageadd: 'Updates the Darkened Blade: New name (Sundered Blade), new description, + new sprites.' + Pickle-Coding: + - bugfix: The experimentor can no longer create negative temperature. + - code_imp: Simplifies experimentor atmos interactions. Shouldn't have an impact + in gameplay. + Rhials: + - rscadd: Rigging light fixtures now works with more reagents than just plasma. + Light fixtures will heat the reagents of their inserted lightbulb, up to a maximum + of 1000 degrees. Lightbulb tubes now hold 20 reagents to make this more usable. + - rscadd: Lightbulbs will now splash their contents on whatever they're shattered + by. Their contents are also now visible upon examination. VexingRaven: - bugfix: The Deltastation kitchen no longer has 2 newscasters. - bugfix: The Deltastation kitchen APC has been moved to the kitchen storage area @@ -899,6 +1426,62 @@ - bugfix: owl masks and wizard hats now use their proper inhands! - bugfix: Would you believe me if I told you androids had functioning human stomachs in them for the past 5 years? No? Well anyways its fixed. + - bugfix: Fixed a bug where it was possible to call the shuttle while buying a new + one, resulting in a second shuttle that gibs everyone aboard. + Watermelon914: + - bugfix: Fixed bypassing gasmask FOV. +2022-09-22: + JohnFulpWillard: + - bugfix: You no longer keep items you shouldn't be wearing (collars) when changing + into a species that can't wear them anymore. + - admin: Antag panels now properly show team antagonists, instead of showing them + as empty. + Salex08: + - spellcheck: corrects plural spelling when slicing objects + ShizCalev: + - admin: Moved signal overriden stack_trace warnings to it's own log file. + - bugfix: Fixed a bunch of cult abilities not working. + dragomagol: + - bugfix: cutting onions actually makes you cry (better put some goggles on!) +2022-09-23: + Capsandi: + - bugfix: The radio in icebox tool storage is no longer an implant + Kapu1178: + - bugfix: Robotic limbs are once again style-able using a spraycan. + LemonInTheDark: + - refactor: Maploading has been optimized significantly, as has ruin generation + and other lavaland stuff. Let me know if anything goes fucky + Pizzie11: + - bugfix: Important Documents received in the mail are now visible + ShizCalev: + - bugfix: Fixed crowbars hitting ovens during deconstruction. + - imageadd: Tablets and PDAs now have inhand icons. + Thunder12345: + - bugfix: The air vent outside RnD on Icebox is no longer hidden by the Experimental + Destructive Scanner + Watermelon914: + - bugfix: Fixed non-printed airlock shells from not triggering the 'Airlock Access + Event' circuit component. + moocowswag: + - bugfix: Adds Missing GPSs to Icebox Public Mining. + san7890: + - admin: Admins can now View Notes directly from a Ticket Panel. +2022-09-24: + JohnFulpWillard: + - balance: AI restorer app now requires RD access to download. + - bugfix: Nukie tablets now properly show when a nuke is going off in their examine. + - balance: Tablet's charge and AI holder parts have been removed entirely. Tablets + now only have a cell, and computers only use their area's APC. + - code_imp: Modular computer's power handling, the AI restorer app's functionality, + and modular computer's examining has been refactored, please report any bugs + you might find. + VexingRaven: + - bugfix: The illiteracy quirk will no longer break the mining shuttle + - refactor: Refactored some checks on the shuttle console to apply to all consoles + - bugfix: Mortar and pestle no longer create infinite reagents + dalmationer: + - bugfix: fixed two broken sprites for drinking and shot glasses. + san7890: - admin: When a voice analyzer is attached to a bomb or a chemical grenade, the respective logs to game as well as the message_admins will contain the recorded phrase on that voice analyzer. @@ -990,6 +1573,54 @@ - spellcheck: Emag charge time will now be presented as (2 minutes and 31.1 seconds) instead of (152.95s) SkyratBot: + skylord-a52: + - imageadd: Nanotrasen Grilling Jorts have received a cosmetic upgrade +2022-09-25: + KirbyDaMaster: + - rscadd: '-6 Quirk for all prosthetics named "Quadruple Amputee" change: prosthetic + arm changed from -4 to -3' + - rscadd: 'SVG icon tutorial readme to tgui tgfont folder change: Minor spelling + issues in negative quirks tab' + Pizzie11: + - rscadd: Cats will now attack beings that have kinship with rats, this includes + rats, royal rats, and anyone who overdosed on rat spit. + ShizCalev: + - bugfix: Fixed not spawning with prosthetic limbs when you have the prosthetic + limb quick. + - bugfix: Blind mobs will no longer be demoralized by posters and graffiti. + - bugfix: Illiterate mobs will no longer be demoralized by the words on posters. + - bugfix: Mobs will no longer be demoralized by posters & graffiti if it's too dark + to see them. + - bugfix: Fixed revenant Malfunction ability not affecting firedoors. + - spellcheck: Emag charge time will now be presented as (2 minutes and 31.1 seconds) + instead of (152.95s) + TerraGS: + - rscadd: Being run over by the clown car will flatten you like a pancake. Honk! + - soundadd: adds cartoon_splat.ogg + Twaticus: + - imageadd: resprites all current underwear to a much cleaner look + VexingRaven: + - bugfix: Build Your Own Shuttle Kit has been fixed and once again docks at the + station after being purchased. + - spellcheck: Updated the message shown when spawning as a blobbernaut to properly + reflect how to chat to the overmind + carshalash: + - bugfix: Properly makes Gin garden alcoholic and adds quality tag. Is also now + made with lime juice to prevent triggering the lemonade recipe. + san7890, kugamo@ParadiseSS13: + - rscadd: Nanotrasen had a loose shipping container hit the hull of Central Command + from one "Station P", so they just decided to pour those into the station's + autodrobes. +2022-09-26: + JohnFulpWillard: + - balance: You can no longer upgrade your tablets to have signals to the NTnet despite + not being anywhere near telecomms. Instead, the Mining base has a lesser connection, + and all computers have Ethernet connections. + - balance: 'All tablets now have a printer in them, rather than it being an external + part. removal: NTNet tablet cards has been removed.' + LemonInTheDark: + - bugfix: Fixes mining shuttles being weird as hell + Rhials: - rscadd: New achievement -- Preventing a heart attack with exercise now gives you a shiny new achievement badge. Show it to all of your gym buddies, be the coolest guy in the locker room. @@ -1094,62 +1725,96 @@ - bugfix: You can no longer assume control of Regal Rats during preround. - bugfix: Properly makes Gin garden alcoholic and adds quality tag. Is also now made with lime juice to prevent triggering the lemonade recipe. + - bugfix: You can no longer assume control of Regal Rats during preround. + ShizCalev: + - bugfix: Scrubber events will no longer trigger if there are no valid scrubbers + on the station. + SomethingFish: + - rscadd: The chefs have come up with a new use for rice and made these delicious + vegetarian spring rolls to add to their menu. + Striders13: + - bugfix: APC in RD office is now more visible if you have x-ray vision. + Time-Green: + - qol: You can now see through big trees when you stand behind them! + - refactor: Adds a seethrough component to make it easier to add big stationairy + objects without reducing visibility + - bugfix: gravity distortion effects no longer break over glass tiles + Xander3359: + - balance: Captain Jetpack now fits on MODsuit and EVA suit storage slot. + - code_imp: Jetpacks were de-hardcoded and can now support being equipped to other + slots. + jlsnow301: + - rscadd: Added new grouping to orbit menu for CentCom agents. + san7890: + - admin: When a player renames (creates) an area from an existing area to a new + one, it now logs to game.log (global and individual). - bugfix: 'The developers of Space-Coin decided to renege on their exit scheme with a new advertisement: Space-coin is the mobile currency of the future! As such, you can not cash out of their famous space coin market machines until the machine starts moving. They immediately ran away after that though.' - - bugfix: removes duplicate paper bin with pen in caps office - - bugfix: Removes a duplicated fax machine from the tram cargo lobby which wasn't - supposed to be there. - - bugfix: The air vent outside RnD on Icebox is no longer hidden by the Experimental - Destructive Scanner - - refactor: Maploading has been optimized significantly, as has ruin generation - and other lavaland stuff. Let me know if anything goes fucky - - bugfix: moved an air vent out from underneath a disposals bin in the Meta incinerator - - bugfix: replaced a regular intercom with a prisoner intercom in the Icebox prisoner - transfer - - bugfix: replaced the window spawners in Meta departures (the ones in the middle - of the room) with plain windows so you can see the flowers - jjpark-kb: - - bugfix: re-added the water basin and forging work bench. - - qol: Species incompatible check on ghostrole allows you select random appearance, - rather than not allowing you to spawn. - - bugfix: You can now select your character for black market dealer. -2022-09-28: - Ebin-Halcyon: - - imageadd: Paramedic clothing has been refitted for digitigrade legs - - bugfix: Security medic's clothing now fit on digitigrade legs. - - bugfix: Security medic's mysterious error straight jackets are now actual straight - jackets. - - bugfix: HoS' trenchcoats are no longer missing textures for digitigrade legged - HoSes + timothymtorres: + - rscadd: Rotten zombie tongue has a new speech modifier that converts spoken language + into zombie sentences. If the person speaking is a high-functioning zombie this + is bypassed. + - bugfix: Fix zombie claws blocking sign language. + - bugfix: Fix slappers and wound grasping blocking sign language. + - bugfix: Fix slappers and wound grasping blocking riding on mobs. + uaioy: + - bugfix: Ice Box snow storms now cover the surroundings of the homestead. +2022-09-29: GoldenAlpharex: - - bugfix: The Security Winter Coat now properly displays the Lopland logo, rather - than the Armadyne one. - - bugfix: Xenomorphs can now only spawn midround from dynamic, and not from random - events anymore, to allow finer control over said spawning. - Mahalia: - - 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 - minimum timer is 90 seconds and not 60 seconds. - - code_imp: Changed some shocked flags into one shocked trait - ShizCalev: - - bugfix: Fixed a runtime when firing energy guns with infinite power cells. - SkyratBot: - - bugfix: Adds Missing GPSs to Icebox Public Mining. - - bugfix: The radio in icebox tool storage is no longer an implant - - balance: AI restorer app now requires RD access to download. - - bugfix: Nukie tablets now properly show when a nuke is going off in their examine. - - balance: Tablet's charge and AI holder parts have been removed entirely. Tablets - now only have a cell, and computers only use their area's APC. - - code_imp: Modular computer's power handling, the AI restorer app's functionality, - and modular computer's examining has been refactored, please report any bugs - you might find. + - bugfix: The ExperTrack Professional Skill Associations have finally fixed the + plans of their drop pods, sabotaged by an intern many moons ago, resulting in + a Totally Safe Skill Cape Delivery! + Jacquerel: + - rscadd: Nanotrasen 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. + JohnFulpWillard: + - bugfix: Tramstation's departments should all be connected to the powernet at the + start of a round now. + - admin: Admin's power check mapping verb now actually works. + - bugfix: Icemoon is no longer considered part of the station. + - bugfix: Mobs with more than one pass flag (cockroaches, alien larva, parrots, + bots, butterflies, any many other animals) should no longer knock bots down, + if they're somehow on harm intent. + - bugfix: Some female uniforms (white skirt, lawyer skirt) are now properly uniformed. + - bugfix: Command tablet cartridges are now loaded with their unique apps they were + supposed to have. + - bugfix: Prosthetic replacement surgery should no longer move limbs into the player's + contents if it fails to attach the limb. + - bugfix: False alarms and Gravity generator blackouts now properly respects basic + event restrictions. + LT3: + - bugfix: Tramstation crossing lights will now properly reflect if you're going + to get smacked by the tram if you try to cross. + LemonInTheDark: - bugfix: You'll be able to hear weather again. this was broken for a damn year how did none of you report it + - refactor: Refactored... well a lot really. Map views, anything to do with planes, + multiz, a shit ton of rendering stuff. Basically if you see anything off visually + report it + - admin: VV a mob, and hit View/Edit Planes in the dropdown to steal their view, + and modify it as you like. You can do the same to yourself using the Edit/Debug + Planes verb + - balance: Airlocks will open on bump in series much faster now. As a tradeoff, + you're immune to shocks from them for a second after you last got shocked by + one. + - bugfix: Mineral doors will no longer take 6 WHOLE SECONDS to open if you've bumped + something else recently + PositiveEntropy: + - imageadd: Resprites suits associated with the curator job! + Rhials: + - code_imp: All round event control/round event datums have been migrated to the + events module + - code_imp: Anomaly and ghost_role events now have their own respective folders + in the events module + ShizCalev: + - bugfix: Fixed a runtime when firing energy guns with infinite power cells. + SpaceSmithers: - bugfix: Fixed the rogue Medbay Maintenance area appearing inside Medbay Storage. + TerraGS: + - bugfix: clown car should work again VexingRaven: - rscdel: 'Tramstation: A few stray cables leading to the prison showers have been removed' @@ -1235,24 +1900,33 @@ without eyes. Wallem: - imageadd: Gives the microwave a fresh coat of paint - nevimer: - - bugfix: ash walkers now understand the marked one when addressed + san7890: + - admin: If you send a cultist to Admin Prison, their fellow cultists are no longer + able to summon them out using the Summon Cultist rune. + - bugfix: 'Whenever you put a species with some type of exotic, non-human blood + on a surgery table: the corresponding blood type should no longer report it + as if the patient in question had a Rhesus blood type, and will instead declare + the name of the actual reagent circulating within their system.' + - qol: Whenever you open or close an atmospherics valve, you should now get a balloon + alert notifying you of that exact action. timothymtorres, soapstain22: - rscadd: Added red and blue nightcaps that spawn in pajama lockers + tralezab: + - rscadd: Heretics can no longer be converted to cult. But sacrificing them is very + valuable to Nar'Sie, and she will grant special weapons if you manage to do + so. + - rscadd: Fantasy affixes can also include soul-stealing items! 2022-09-30: - PositiveEntropy: - - imageadd: Resprites suits associated with the curator job! - 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 - supermatter engine. Surely they can't be sending as many new crystals over there - as their financial reports imply. + Bluedino1025: + - imageadd: Adds Moffra wing and antennae sprites + JohnFulpWillard: + - balance: Flypeople's eyes are now immune to native FOV, if native FOV is enabled. + - refactor: Cleanbots have been entirely reworked, please report any bugs you might + find. + - bugfix: You can manually pump your blood while asleep/in crit, rather than instantly + lose all your blood and die forever. - bugfix: Wizard's anonymous event won't run near the start of a round anymore. - - bugfix: Tramstation's departments should all be connected to the powernet at the - start of a round now. - - admin: Admin's power check mapping verb now actually works. - - bugfix: Icemoon is no longer considered part of the station. + Profakos: - bugfix: Various tramstation medbay disposal and air pipe issues have been fixed - bugfix: Medbay and Chemistry tagged packages will arrive properly to Tramstation's medical equipment storage, and the apothecary, respectively diff --git a/html/changelogs/archive/2022-10.yml b/html/changelogs/archive/2022-10.yml index 09458244f3a5c..702471e8db31c 100644 --- a/html/changelogs/archive/2022-10.yml +++ b/html/changelogs/archive/2022-10.yml @@ -56,6 +56,9 @@ List Fingerprints, and Show Law Changes have all been replicated to exist outside of the Secrets panel. You may still access these verbs from the Secrets panel, but they are able to be called as individual verbs. + Guillaume Prata: + - bugfix: Fix an accidental revert on noblium's reagent effect on plasmamen + JohnFulpWillard: - qol: '[ICEBOX] Arrivals now won''t depower from a single cable being bit.' - qol: '[ICEBOX] There''s now an ORM-locked windoor in front of the ORM.' - qol: '[ICEBOX] The maintenance door leading to Abandoned Kitchen & Bar, on the @@ -67,6 +70,15 @@ synchronously. - bugfix: You can manually pump your blood while asleep/in crit, rather than instantly lose all your blood and die forever. + Tramz: + - imageadd: Adds new icons and a new animation for the Bloody blade. + VexingRaven: + - bugfix: Multi-Z Ruins work again (Ice Moon Mining Site spawns again with the Demonic + Frost Miner) + san7890: + - bugfix: When a Nuclear Operative makes a golem, they no longer immediately turn + into a fully functioning reinforcement. + tralezab: - rscadd: Changelings once again have reestablished their changeling hivemind, and can secretly communicate between each other. - bugfix: Fixed up the Changeling UI a bit, like for example some dimmers would @@ -90,6 +102,10 @@ SkyratBot: - spellcheck: wall clocks no longer have a desc talking about bluespace - bugfix: Robotic limbs are once again style-able using a spraycan. +2022-10-02: + PKPenguin321: + - balance: Railings take twice as many rods and twice as much time to make + Shadyyy66: - rscadd: Added boxcutter to cargo. Vishenka0704: - bugfix: if payday free, don't send you extra message where "payday aborted" @@ -149,6 +165,15 @@ upright, and at 100% size, for consistency. SkyratBot: - qol: janitor and clown erts have access to command radio + tralezab: + - spellcheck: wall clocks no longer have a desc talking about bluespace +2022-10-03: + JohnFulpWillard: + - spellcheck: Junkmail message types have more than doubled, you should expect more + diverse junkmail now. + Wallem: + - imageadd: Resprites the Fulton Recovery Beacon + vincentiusvin: - rscdel: Removed the broken pressure power multiplier which always evaluates to 2. Multiplied base SM power production by 2. - rscdel: SM will no longer gain power when exposed to space. It actually used to @@ -323,6 +348,16 @@ SkyratBot: - bugfix: Rat King no longer attacks living lick targets after he finishes licking them. +2022-10-04: + Fikou: + - qol: janitor and clown erts have access to command radio + Gamer025: + - admin: Expanded mob_tag logging. Logs spawn renames, typepaths and species changes + now! + jlsnow301: + - bugfix: After a recent bureaucratic error, CentCom orbit labels are now correctly + colored. + scriptis: - refactor: mechfabs, autolathes, component printers, and module duplicators now use techfab tgui components - refactor: every single design is now categorized and subcategorized @@ -448,6 +483,56 @@ they've been putting your cameras on backwards! Give 'em a shout if any are still out of place, but you should see lots of improvement when it comes to where they're mounted. + timothymtorres: + - bugfix: Spirits (Revenants), Robotic mobs (drones), and epic mobs (megafauna) + are no longer affected by hallucinations +2022-10-05: + ATHATH: + - balance: Half of the speed boost from wearing flagellant's robes has been moved + to wearing the hoods that come with said robes. + - balance: Flagellant's hoods now have the same (negative) armor values as the robes + they're attached to. + - spellcheck: The descriptions of flagellant's robes and hoods have been updated. + - bugfix: Self-respiration now makes you no longer need to breath at stage 4 again. + Cobby: + - bugfix: The cucumber bounty will now accept cucumbers instead of seeds. + Fikou: + - balance: ERT suit storage oxygen tanks have been removed. Instead, the survival + box in their backpack now contains a double extended emergency tank and a pocket + crowbar. + - bugfix: Medical ERT rejoice! You now have a health analyzer. + GoblinBackwards: + - bugfix: Fixed reagents not applying their on-transfer effects. + GoldenAlpharex: + - qol: After several incidents related to miscommunications regarding robot models, + Nanotrasen'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! + Jacquerel: + - bugfix: Commiting suicide using a box stampled by a clown now does what the description + says it will do. + Melbert: + - rscadd: '"Bot Language Malfunction" trait (random languages for simple bots) is + now a smidge more common, and affects all simple robots created on the station + rather than just roundstart ones. Also, it tries to pick a language that isn''t + galactic common if possible.' + Mickyan: + - bugfix: 'Alcoholics rejoice: the stun from vomiting no longer makes you fall on + the floor' + - spellcheck: Fixed some grammar errors related to handcuffs + - rscadd: Ghost costumes will look more realistic on halloween + Mothblocks: + - qol: You can now see food inside the microwave. + PositiveEntropy: + - rscadd: Adds the CentVend inside Central Command! 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 + its green to a newer, fresher one! + Sealed101: + - bugfix: fixed AI Jump To Network verb not functioning ShizCalev: - bugfix: Fixed a bunch of missing inhand icons. - bugfix: Fixed cables in electrical toolboxes not randomizing their colors. @@ -467,16 +552,148 @@ - bugfix: The rainbow energy sword is now a little bit more rainbowy! - bugfix: Fixed an tk exploit with orange handcuffed shoes. - bugfix: The traitor outfit in the select equipment panel is now actually functional! - - bugfix: Fixed the papersack. - SkyratBot: + SuperSayu: + - bugfix: Guitars run on Linux servers again. + Tastyfish: + - bugfix: Footsteps and gunshots can be seen while blind again. + - rscadd: Typing indicators can be reliably seen while blind. + - bugfix: Airlocks no longer project light into the 4th dimension. + VexingRaven: + - rscadd: Tramstation now has 2 cryoxadone beakers in the Medbay Treatment Center. + - rscadd: Tramstation now has a large beaker in the pharmacy, chemistry lab, and + R&D. + YusufEmirKoroglu: + - rscadd: Added bot launchpad and bot launch pad controller. + - rscadd: New research node for bot launchpad and bot launch pad controller. + - imageadd: added icons for bot launchpad and bot launch pad controller. + dragomagol: + - bugfix: abandoned airlocks will no longer leave doors on top of walls + itseasytosee: + - code_imp: high functioning zombies, vamps, and shadow people can eat again + san7890: + - admin: Gibtonite logging has been improved to actually pass the name of the user + when a user blows it up. + - admin: Messages regarding a random event triggering will no longer message you + twice. + timothymtorres: + - bugfix: Fix xeno hivemind talk causing hissing sound + - rscadd: Add mail goodies based on different quirks. + - rscadd: Add mapping spawners for flower, money, plushie, delux plushie, single + donkpockets. + - imageadd: Add random mapping spawner icons for flower, plushie, and single dockpockets. + - balance: Changed mail goodies weight chance for generic items. The chance for + cash has been decreased and the chance for toys and snacks has been increased. +2022-10-06: + Cobby: + - bugfix: Fixes an issue where a container (like bucket or watering can) was taking + out more water than transferred in when used on a hydroponics tray. + Hatterhat: + - bugfix: Multitooling a screwed-open fire alarm - or, if you're a borg/AI, control-clicking + a fire alarm - now toggles the atmospherics sensors of firelocks in the area. + (Borgs/AIs still had this but it was undocumented.) + Mickyan: + - qol: Assistant PDAs now start with the bounty board app preinstalled + RikuTheKiller: + - rscadd: Massively expanded the functionality of the modsuit adapter shell + - qol: Modsuit quick deploy now retracts the already extended pieces if used while + the suit is partially extended + Salex08: + - rscadd: Adds a new kudzu mutation called timid + - balance: lowers severity of the kudzu mutation temperature stabilisation from + average to minor + Vishenka0704: + - rscadd: NT Pay app on consoles, laptops, tablets(PDA too) + Zonespace27: + - bugfix: The NTNet DOS tool now works again + carshalash: + - bugfix: A cobbler shaker will now spawn in the bar under room on tramstation. +2022-10-07: + Iamgoofball: + - bugfix: Removes an undocumented 5 credit tax that was added to all ID card in-hand + withdrawals. + IndieanaJones: + - bugfix: Rat King no longer attacks living lick targets after he finishes licking + them. + Jacquerel: + - bugfix: If an admin gives you Void Phase, you won't be hurt by your own spell + whenever you cast it. + JohnFulpWillard: + - rscadd: 'Engines are now machines, not structures. If destroyed, they will drop + circuit boards so you can rebuild them. removal: In-wall engines have been remvoed. + The Tram now uses full-blown engines.' + MMMiracles: + - bugfix: Tramstation installed CS:Source and maintenance will now no longer blow + up into purple textured flooring. + - bugfix: The entire lower hall with Hydroponics on Tramstation is now considered + the Service Hallway for use in ordering service crates. + Wallem: + - rscadd: A new ice-based hallucination has been added to the game + axietheaxolotl: + - imageadd: brand new sprites for the curator explorer jacket, and regular leather + jacket. + - rscdel: Non-HoS leather overcoat. + - rscadd: Biker leather jacket. + kawoppi: + - imageadd: added inhand sprites for axolotls +2022-10-08: + Archimus12: + - spellcheck: Makes the description of rechargers mention that they can recharge + PDAs as well. + pizie11: + - bugfix: Changed the name of the fake beer dispensed by E-magged service cyborgs + sadkris: + - rscadd: Transgender-themed thigh-highs and knee-highs to the clothing options + for socks + timothymtorres: + - rscadd: Add mail goodies for curator. (random books) + - rscadd: Adds easter egg - Captain's Log. Tape recorder that spawns on derelict + station. + - rscadd: Adds easter egg - Woody's Got Wood. Will rarely appear as a mail goodie + for curator. +2022-10-09: + Fikou: + - bugfix: makes dehydrated carps be friends again + IndieanaJones: - balance: Abductors are now a light midround as opposed to a heavy midround. This means they can spawn earlier in the round. + MMMiracles: + - bugfix: Cameras and Lights on external hulls are no long safe havens from the + rough reality of the outdoors in harsh weather situations. + Melbert: + - rscadd: Some new hallucinations, and some modifications to old ones to be slightly + more authentic. Find them all! + RikuTheKiller: + - bugfix: Fixed brains not accepting mannitol pours when not fully decayed + - qol: Mannitol solutions are now only partially consumed when poured on a brain + and you don't need 10u to do so + - qol: Pouring mannitol on a brain now takes 3 seconds instead of 6 seconds and + the messages are slightly more consistent + - bugfix: Fixed a nullspacing bug related to BCIs, specifically MMI components that + are contained inside of them. + - refactor: Refactored some of the BCI manipulation chamber's code. + ShizCalev: + - bugfix: Fixed lighting overlays from an item sometimes showing up on inventory + slots / backpack slots instead of from the mob holding them. + - bugfix: AI camera lights now work again. + - bugfix: Fixed the papersack. + Tastyfish: + - bugfix: Baguettes can now be examined again. + necromanceranne: + - balance: 'The Infiltrator suit has been remade into an Infiltrator MODsuit. Has + all the original features, but now also has additional powers: total anonymity, + and a demoralization aura.' +2022-10-10: + Hatterhat: + - bugfix: You can no longer steal shoes off of yourself. Just take them off normally. + LT3: + - bugfix: Tramstation's crossing signals are actually fixed this time. Honest. + Time-Green: - rscdel: Golden wheelchairs in Tram maintenance and mail have been replaced by T1 motorized wheelchairs - - bugfix: You can no longer steal shoes off of yourself. Just take them off normally. - - rscadd: 'Engines are now machines, not structures. If destroyed, they will drop - circuit boards so you can rebuild them. removal: In-wall engines have been remvoed. - The Tram now uses full-blown engines.' + itseasytosee: + - qol: You can now put clothing, backpacks, and belts onto people by clicking on + them with it in your hand and targeting the right area. + vincentiusvin: - bugfix: Fixed sm space exposure damage going through walls - rscdel: got rid of the molar multiplier for sm heating damage. It will now only impact molar damage and temp limit. We apply the lowest value directly so this @@ -491,193 +708,124 @@ - balance: Halved SM power damage across the board. - balance: Changed sm space exposure damage to just check for the current tile and adjacent atmos connected tiles. - axietheaxolotl: - - imageadd: brand new sprites for the curator explorer jacket, and regular leather - jacket. - - rscdel: Non-HoS leather overcoat. - - rscadd: Biker leather jacket. - itseasytosee: - - qol: You can now put clothing, backpacks, and belts onto people by clicking on - them with it in your hand and targeting the right area. - jjpark-kb: - - rscadd: added a share damage ash ritual - - qol: ash rituals now have descriptions; examine the rune for more details 2022-10-11: - A.C.M.O.: - - rscadd: Added hidden quirks which can't be selected in TGUI. - - rscadd: Added pills and pill bottles for synthetic healing medications. - - balance: 'Re-balanced Blood Deficiency and Brain Tumor quirks for synthetics. - tweak: Re-labeled Brain Tumor as Brain Degeneration for roleplay-ability.' - - balance: For synthetic characters, the Blood Deficiency quirk swaps to Hydraulic - Leak, optimized for synths. - - balance: For synthetic characters, the Brain Degeneration quirk swaps to Positronic - Cascade Anomaly, optimized for synths. - - bugfix: Makes liquid solder actually a liquid. - - bugfix: Fixes synthetic healing medications to behave more deterministically. - Gandalf2k15: - - bugfix: Hats have been repathed accordingly and should no longer show up as errors. - Nerev4r: - - rscadd: 'Adds the biker jacket to the loadout from #16677' - OrionTheFox: - - bugfix: fixed the Sweater Jacket unintentionally using the Cableknit Sweater's - icons; the old 'sweater' uniform is now properly called Cableknit Sweater where - applicable to help distinguish the two - - imageadd: The Keyhole Sweater has been updated and Greyscaled! Recolor it to your - heart's content! - - imageadd: the updated Captains/Curators/Teal suit now have digi icons, as well - as the updated CC palette. The HoS's turtleneck and formal uniform have also - received some slight improvement visually. - - bugfix: Light Paramedic Uniforms now have proper Object icons - SkyratBot: + Gamer025: - bugfix: You should no longer receive "Your previous action was ignored..." messages when you join a server + GoblinBackwards: - bugfix: You can now remove objects embedded in yourself again - - balance: reduced shotgun dart reagent amount + JohnFulpWillard: - spellcheck: The compressed matter cartridge has been renamed to RCD matter cartridge, since it's RCD matter... used to refill an RCD. - - bugfix: fixed holopad teleporting - - balance: 'The Infiltrator suit has been remade into an Infiltrator MODsuit. Has - all the original features, but now also has additional powers: total anonymity, - and a demoralization aura.' - SpaceVampire: - - balance: Jackboots now come with actual working laces! Make sure they don't get - tangled up. - - bugfix: Peacekeeper boots have bio armor again. Good news if you wanted to wear - the single pair in the correctional officer locker. - - code_imp: Removed non-modular tape code, as it wasn't even doing anything. - Tastyfish: - - bugfix: Baguettes can now be examined again. -2022-10-12: - Ebin-Halcyon: - - imageadd: Departmental coats have been resprited - - imageadd: A non-departmental coat crate has been shipped to Nanotrasen stations, - find it in the loadout - GoldenAlpharex: - - bugfix: Health scanners no longer show someone as missing lungs or a liver if - their species don't breathe or don't process chemicals, respectively. - Jureiia: - - bugfix: Makes most of the dresses and skirts no longer get cropped as a taur Melbert: - qol: Spell buttons update every so slightly more accurately when they become unavailable or available. - refactor: Refactored temporary mute effects and sign language. - code_imp: Cleaned up vocal checks into "try_speak" and "can_speak". - admin: VV dropdown removing "Tongue Tied" quirk actually removes the quirk + arnociiroc: + - balance: reduced shotgun dart reagent amount +2022-10-12: + Enbyy: + - bugfix: fixed the medical.dmi having 2 dupe frames for the medical jumpsuit mob + sprite. + GoldenAlpharex: + - bugfix: Health scanners no longer show someone as missing lungs or a liver if + their species don't breathe or don't process chemicals, respectively. + JohnFulpWillard: + - balance: The Curator and Crystal PDA is now upgraded to have long-distance NTnet + connections, they are able to use their apps in space. + Melbert: - rscadd: Having very low sanity (insane or crazy, the last two sanity levels) will cause you to experience hallucinations rarely. - admin: Removing RDS via the VV menu will actually remove the associated effects. - OrionTheFox: - - qol: the Corset uniform is now instead an Underwear option! Now you can actually - wear it under the clothes of your choice! - - imagedel: Removed the Stripper uniforms (They're all underwear types(Even the - Mankini, on TG even)); the bunny ones have remained - - imageadd: after WAY too long sitting on the backburner, the generic Utility Uniform - is now up-to-par with the departmental variants. The classic prisoner uniform - has also been slightly touched up. - - imageadd: Resorted a few less important items, and the base jumpsuits themselves, - into different icon files. Keep an eye out for sprite bugs! If you see one, - make a bug report on github, and ping @OrionTheFox! - RimiNosha: - - rscadd: 'Two new IPC+Synthetic brain types: Circuit and MMI!' - - rscadd: 'One new Cyborg brain type: Circuit!' - - qol: Cyborgs, IPCs and Synthetics can now choose their preferred brain in the - lower prefs box! + - qol: Completing "The Living Heart" ritual with a replacement heart will restart + a heart if it's not beating. + Rhials: + - bugfix: Tramstation security/toxins now have their own EOD closets. Icebox toxins + now has an EOD closet as well, in the nearby maintenance area. + Sealed101: + - bugfix: Fixed showcase microwaves lacking sprites + - bugfix: Fixed RnD Servers not dropping their components & completely vanishing + when deconstructed ShizCalev: - bugfix: Fixed a minor runtime when a temporary transit tube exits a loop through a destroyed transit pipe. - bugfix: Boxcutters now have inhands again. - SkyratBot: + Twaticus: - imageadd: fixes previous sec resprite issues, replaces sec helmet and sec wintercoat inhands, replaces sec helmet obj icon - - bugfix: Tramstation security/toxins now have their own EOD closets. Icebox toxins - now has an EOD closet as well, in the nearby maintenance area. + coldud13: + - imageadd: fixed the holocarp guardian fishsticks icon + dragomagol: + - bugfix: the cargo department is once again coloured in the crew manifest - spellcheck: replaced a death commando name + jlsnow301: + - bugfix: Fixed a random crash at the power management console. + necromanceranne: + - balance: You can put regal pipeguns into the suit storage of high-vis vests and + wet floor signs. + san7890: - bugfix: On RuntimeStation, should you chance upon it, the emergency shuttle should no longer collide by the with the circuits lab. - - bugfix: Fixed a random crash at the power management console. - - bugfix: Fixed RnD Servers not dropping their components & completely vanishing - when deconstructed + timothymtorres: - qol: Add contextual screentips to jumpsuits - - imageadd: fixed the holocarp guardian fishsticks icon - Tastyfish: - - bugfix: Opening Game Options and then spawning no longer makes you a random human. - Zergspower: - - qol: Crash ruin - Altered the crash appearance to look more 'natural', upgrade - the rocks to high value - - qol: smugglies - Added gigaspace beacon, made the rock it's stored in less perfect, - added tiny fan and runway lights - - bugfix: Prisonshuttle ruin - fixes ghost-blocks due to turret placement, changes - entire appearance, russians no longer drop APS's - - bugfix: shuttle8532 ruin - missing area assignments in main walkway corrected, - ruin shrunk 8x2 with no changes to loot or map - - bugfix: ancient_satellite - fixed depreciated areas causing it to never spawn - - qol: Black Market expands! New drug room hidden behind wall, 2 more RNG spawners - in the main room for material and tool. - - bugfix: Scrapheap ruin - is able to spawn without erroring now - - bugfix: Cargodiselost - Rogue Air Alarm removed - - bugfix: Derelictferry - Removed error'd items and replaced them with alternatives - that also work with digi legs. - - bugfix: Polychromaticfacility - re-added the missing 3rd items that disappeared - at some point and swapped the Sec statue for a science one. 2022-10-13: + CheeseWizard2: + - qol: firelocks are now welded with RMB instead of LMB + GoblinBackwards: + - bugfix: Ablative trenchcoat no longer gives a permanent sechud if toggled while + you already had a helmet on. + - bugfix: Fixed mail being able to change the stations nuke code when it had already + been generated. GoldenAlpharex: - bugfix: Blood no longer trail in anyone's bloodstream as a reagent after being inserted in their body. + Hatterhat: + - bugfix: Bodyparts (e.g. severed heads) stored in organ fridges now freeze the + organs stored inside them, if any are present. Melbert: - bugfix: Fixes "absorb another changeling" objective - - qol: Completing "The Living Heart" ritual with a replacement heart will restart - a heart if it's not beating. - Paxilmaniac: - - imageadd: New sprites for stone floors! - RimiNosha: - - bugfix: Fixed targeted subtler not listing any valid targets. + Sealed101: + - bugfix: Fixed AI Toggle Camera Lights not working properly ShizCalev: + - bugfix: Fixed a runtime when clicking an away mission gateway without the partner + gateway being active. - server: Added clarified downstream modularity support for the inhands unit test. - bugfix: Wall mounted & portable flashers now actually flash again! - admin: Flashers can now have their range and cooldown durations vareditted with flash_range and flash_cooldown_duration respectively. - qol: You can now change the color of toy energy swords with a screwdriver! - - bugfix: Fixed a runtime when clicking an away mission gateway without the partner - gateway being active. + - bugfix: Fixed some missing shield inhand icons. + - bugfix: The strobe shield's inhand icon now plays the flashing animation when + triggered again. + - bugfix: The strobe shield will no longer blind the person holding it when it deflects + a blow. + - bugfix: The light from the strobe shield's flash no longer appears in your held + inventory slot. + - bugfix: Fixed the east facing left-handed strobe shield sprite being misaligned + by two pixels. - bugfix: Fixed a runtime preventing clientless mobs from mining minerals. - SkyratBot: - - bugfix: the cargo department is once again coloured in the crew manifest - - bugfix: Bodyparts (e.g. severed heads) stored in organ fridges now freeze the - organs stored inside them, if any are present. + dragomagol: + - qol: cargo crate descriptions now better describe what you'll be getting from + them + san7890: + - bugfix: Ethereals can now actually read the balloon alerts they get whenever they + try and recharge/discharge an APC. + - bugfix: TGchat now supports hyperlinking... links... with curly braces. + - admin: Whenever a player uses a vial of blood/vial of tickles to bring forth a + Slaughter Demon or a Laughter Demon (respectively), it will now log to their + individual player log, as well as the global game.log. + timothymtorres: - code_imp: Add chat notification for shoes & glove protection when mousetrap triggered - - qol: firelocks are now welded with RMB instead of LMB - - bugfix: Fixed AI Toggle Camera Lights not working properly - - bugfix: Ablative trenchcoat no longer gives a permanent sechud if toggled while - you already had a helmet on. - - balance: The Curator and Crystal PDA is now upgraded to have long-distance NTnet - connections, they are able to use their apps in space. - - bugfix: fixed the medical.dmi having 2 dupe frames for the medical jumpsuit mob - sprite. + tralezab: - rscadd: After 30 minutes, Bileworms evolve into Vileworms, a more dangerous variant. - balance: Bileworms are easier - balance: Bileworms drop gold - bugfix: fixes bileworms spawning too close to other mobs, causing very, VERY tough fights - - bugfix: Fixed mail being able to change the stations nuke code when it had already - been generated. - - balance: You can put regal pipeguns into the suit storage of high-vis vests and - wet floor signs. - - bugfix: TGchat now supports hyperlinking... links... with curly braces. - - bugfix: Fixed showcase microwaves lacking sprites - - bugfix: Ethereals can now actually read the balloon alerts they get whenever they - try and recharge/discharge an APC. - - admin: Whenever a player uses a vial of blood/vial of tickles to bring forth a - Slaughter Demon or a Laughter Demon (respectively), it will now log to their - individual player log, as well as the global game.log. - Tastyfish: - - bugfix: Hands are no longer sometimes visible when the player is otherwise invisible - from FOV. - Zonespace27: - - spellcheck: Modularization readme now specifies .MD files, not .DM 2022-10-14: GoldenAlpharex: - - bugfix: The Hemophage entry in the species selection menu has seen its perk display - updated, to properly reflect the pros and the cons of being an Hemophage. - qol: Changing your PDA ringtone now has your current ringtone in your input box, like the previous PDAs used to. - bugfix: Fixed the incoming Messenger messages not being properly HTML decoded @@ -685,18 +833,7 @@ - bugfix: Fixed the formatting of the Messenger's Message History tab. - qol: The prompt to send a PDA message now shows you the person you're trying to send a PDA message to. - Melbert: - - balance: Holy melons are now more melon like - they are now fruits (instead of - no food type), normal weight class, and can be juiced into holy water - - balance: Ninja and Traitors can no longer hack consoles located in maintenance - for their objectives. (Basically, it abides by the same rules that Space Dragons - have on where they can put their portal.) - - bugfix: Secure Data consoles abide by the same hacking rules as comms consoles - - getting de-powered mid-hack will stop hack progress. - Paxilmaniac: - - imageadd: custom material walls (glass walls, pizza, meat, etc) will now use a - lightened version of skyrat's wall sprites, rather than tg wall sprites - SkyratBot: + Jacquerel: - bugfix: Changing z-level while jaunting will no longer reveal you. - bugfix: If a shuttle lands on you while jaunting you will die rather than be stuck in a weird purgatory state. @@ -706,121 +843,122 @@ not in the same manner as Mirror Walk. - refactor: Jaunt code which adds and removes temporary traits or effects should hopefully be easier to work with in the future. + JohnFulpWillard: + - bugfix: Anchoring an object while pulling it will now make you stop pulling said + anchored object. + Melbert: + - balance: Holy melons are now more melon like - they are now fruits (instead of + no food type), normal weight class, and can be juiced into holy water + - balance: Ninja and Traitors can no longer hack consoles located in maintenance + for their objectives. (Basically, it abides by the same rules that Space Dragons + have on where they can put their portal.) + - bugfix: Secure Data consoles abide by the same hacking rules as comms consoles + - getting de-powered mid-hack will stop hack progress. + Profakos: - bugfix: Circuitboards that require a minimum level of manipulators tiers no longer display just "manipulator" when examining machine frames that contain them - bugfix: Marked a few more admin only chem dispenser boards to display their proper manipulator requirements - - rscadd: Added a new bounty to deliver a refined dimensional anomaly core. - - spellcheck: Fixed some typos and awkward grammar in bounty descriptions. - - bugfix: Cyborgs can now no longer untip vending machines that they are not directly - next to. - - bugfix: Those with the technoshy/technovert trait are now able to untip vending - machines. - - bugfix: If you exit out of the TGUI options menu when hitting the "Make AI" link - there, it will actually assume that you wanted to cancel out of the proc entirely, - rather than proceed without your knowledge. + Rhials: - bugfix: Engineers now recieve welding helmets instead of errors when they order an engineering supply pack. - bugfix: Welding helmet inhand sprites now properly update when you flip the visor. + Shadyyy66: - bugfix: "T\xF6chta\xFCse berries are now juiceable. You no longer get T\xF6chta\xFC\ se juice via grinding them." - - bugfix: Anchoring an object while pulling it will now make you stop pulling said - anchored object. - - qol: cargo crate descriptions now better describe what you'll be getting from - them - Tastyfish: - - bugfix: Vox N2 tanks are no longer cloaked. Wallem: - qol: The Biogen will show how full the container inside it is - Zonespace27: - - bugfix: Borers should no longer be able to reach exponential health + lizardqueenlexi: + - rscadd: Added a new bounty to deliver a refined dimensional anomaly core. + - spellcheck: Fixed some typos and awkward grammar in bounty descriptions. + san7890: + - bugfix: If you exit out of the TGUI options menu when hitting the "Make AI" link + there, it will actually assume that you wanted to cancel out of the proc entirely, + rather than proceed without your knowledge. + - bugfix: Cyborgs can now no longer untip vending machines that they are not directly + next to. + - bugfix: Those with the technoshy/technovert trait are now able to untip vending + machines. 2022-10-15: + GoblinBackwards: + - qol: Crafting intelliTaters/intelliLanterns now carries over the AI from the card + used to craft it. + - bugfix: Crafting intelliLanterns with a card that contains an AI no longer deletes + the AI. GoldenAlpharex: - bugfix: You should no longer suddenly experience a station-wide mutism event (that didn't affect radios), and will now properly be able to express yourself regardless (hopefully). Melbert: - bugfix: Split personalities can commune again, probably - Paxilmaniac: - - bugfix: tiles with the decals sprited in (terrible) have been replaced with just - normal tiles with decals on top (good) - SkyratBot: - - bugfix: ERT and nuke ops players can no longer remove the power cell from a combat - defibrillator. - - qol: Crafting intelliTaters/intelliLanterns now carries over the AI from the card - used to craft it. - - bugfix: Crafting intelliLanterns with a card that contains an AI no longer deletes - the AI. + RaveRadbury: + - spellcheck: Exploration drone traders now offer exchanges correctly. + ReinaCoder: - qol: The Cargo Technician's jumpsuit and skirt no longer cover the chest when adjusted. - - bugfix: Fix traitor PDA uplinks to be accessible by illiterate people Tastyfish: - - bugfix: Armaments in both armament vendors and in gun cargo now have a more accurate - thumbnail, with complete overlays. + - bugfix: ERT and nuke ops players can no longer remove the power cell from a combat + defibrillator. itseasytosee: - code_imp: Changed the examine text on monkeized humans. + timothymtorres: + - bugfix: Fix traitor PDA uplinks to be accessible by illiterate people 2022-10-16: ShizCalev: - bugfix: Fixed ear bounty not clarifying that it only accepts upgraded cybernetic ears. + - bugfix: Fixed a minor runtime when hallucinations are ending. + - bugfix: Fixed an unreachable tile in the CMO's office on Kilo - bugfix: Fixed a runtime preventing mafia from starting if a player disconnected during signups. - - bugfix: Fixed some missing shield inhand icons. - - bugfix: The strobe shield's inhand icon now plays the flashing animation when - triggered again. - - bugfix: The strobe shield will no longer blind the person holding it when it deflects - a blow. - - bugfix: The light from the strobe shield's flash no longer appears in your held - inventory slot. - - bugfix: Fixed the east facing left-handed strobe shield sprite being misaligned - by two pixels. - - bugfix: Fixed an unreachable tile in the CMO's office on Kilo - SkyratBot: + VexingRaven: + - qol: Many gun-related chat messages are now balloon alerts instead + - spellcheck: The bow no longer says you loaded it with bullets + lnGoror: + - imageadd: New inhand sprites for the sabre sheath + san7890: + - admin: Cross-server messages are now filtered against the server's word filter. + If it's hard filtered, the message will not send. If it's soft-filtered, it + will send slower to allow an admin more time to cancel it. - bugfix: You can no longer pierce the veil between the living and the dead with the power of circuitry. - - imageadd: New inhand sprites for the sabre sheath + timothymtorres: + - qol: Add RMB hotkey to toggle lighting for flashlights. Add contextual screentips + for flashlights. + - soundadd: Reuse existing sounds for flares to use `sound/items/match_strike.ogg` + and glowsticks to use `sound/effects/wounds/crack2.ogg` 2022-10-17: - A.C.M.O.: - - bugfix: Fixed a bug where knockdowns caused Poly's voice commands to stop working. - - bugfix: Fixed bug in Hydraulic Leak quirk which caused it to be lethal. - Ebin-Halcyon: - - imageadd: The RD's labcoat and turtleneck have been resprited + ArcaneMusic: + - bugfix: Custom vendors now explode on deconstruct as opposed to delete, causing + no practical changes to gameplay but admins will notice slightly fewer ahelps + if they ever have to get rid of one. + FernandoJ8: + - bugfix: blob zombies created by the Distributed Neurons reagent and cyto no longer + die instantly due to not having an associated factory + Fikou: + - bugfix: you can plant traitor bugs on clown shoes as God intended + GoblinBackwards: + - bugfix: Sold bounty cubes now display properly in the NT pay app history. GoldenAlpharex: - bugfix: The Medical Kiosk no longer bends the laws of physics and now properly appears underneath mobs that would somehow end up atop of it, rather than above them. - - balance: Hemophages now receive a status effect that reduces their blood drain - by half for twenty minutes when drinking blood from another player-controlled - non-monkey humanoid character. - - balance: Hemophages now have a maximum blood volume of 1000, rather than 2000. - - balance: Drinking blood from monkeys, or otherwise inserting monkey blood in your - body, will no longer allow you to go past the normal maximum blood volume of - 560 cL, much like all of the other blood-increasing reagents. - - bugfix: '' - - code_imp: Made some general improvements to the Hemophage code, bringing it closer - to the standards. - qol: Added a preference for PDA ringtones, to save a custom ringtone that will then be applied automatically to your character when spawned in the game. Gone are the days of having to do it manually at the start of every round! + JohnFulpWillard: + - balance: Clever monkeys now use items the same way Humans do, meaning they can + now use Defibrilators, water tanks, crates, and many other things, but no longer + does monkey actions like instant hardstun on disarm and smashing your paw into + machines. Melbert: - bugfix: Fixed a plant backfire runtime when throwing plants - Paxilmaniac: - - bugfix: The path on the left side of the ash walker's ritual room on icebox now - actually lines up with the door - - imagedel: Removed a few entirely unused sprites from the modular suits icon file - QuacksQ: - - bugfix: Fixed various issues on NSS Voidraptor. - SkyratBot: + Rhials: - bugfix: Choosing admin setup options on certain events will no longer retain the chosen options for future events. - - bugfix: Sold bounty cubes now display properly in the NT pay app history. - - qol: Add RMB hotkey to toggle lighting for flashlights. Add contextual screentips - for flashlights. - - soundadd: Reuse existing sounds for flares to use `sound/items/match_strike.ogg` - and glowsticks to use `sound/effects/wounds/crack2.ogg` - - bugfix: Custom vendors now explode on deconstruct as opposed to delete, causing - no practical changes to gameplay but admins will notice slightly fewer ahelps - if they ever have to get rid of one. + Wallem: + - rscadd: A new scam artist has gotten your home address. + jlsnow301: - rscadd: The orbit UI now brings up tooltips to show health, job, and full name information. - rscadd: The orbit UI now puts disguised names in quotes. "John Doe". Hover to @@ -848,6 +986,9 @@ - bugfix: EMP grenades now have an actual icon when activated. - bugfix: Fixes coloring issues with taur bodyparts - bugfix: Fixes layering issues with back-view taur bodyparts + lizardqueenlexi: + - bugfix: Admin-spawned and changelings transformed into lizards will display the + correct tails now 2022-10-18: Dalmationer and Profakos: - imageadd: added icons for motorized wheelchairs (regular and fast) @@ -856,28 +997,24 @@ - bugfix: Oversized characters will no longer start being spammed with feeling "terribly bloated" because they're getting closer to their normal amount of blood within a round. + GoblinBackwards: + - bugfix: Fixed being able to weld multiple disposal machines to the same pipe + GoldenAlpharex: - bugfix: The prompt to commend someone else for their good behavior will now properly be given out randomly, allowing those that late-join to give them out as well. Imaginos: - imageadd: Updates the station-bounced radio sprite + Jackraxxus: + - bugfix: Deltastation's EVA now contains a real toolbelt, that can only hold tools. + - bugfix: The Ashwalker Nest now contains a real toolbelt, that can only hold tools. + - spellcheck: The base type of /belt is now more obviously NOT a toolbelt. + MTandi: + - imageadd: Added xenobio guide sign Melbert: - bugfix: Fixed some things having inaccurate screentips while holding nothing (Elevators, heaters, bodybags / roller beds) - bugfix: Fixes runtime preventing revolution auto shuttle call Paxilmaniac: - - rscadd: A large version of the mortar that can hold five items at once, but it - must be secured (preferably on a table) before you can use it! - - rscadd: Stone can now be used to build stone stairs! - - balance: Xenos have lost the ability to devolve back into a larva - - balance: Runner damage has been lowered to 15-20 (From 20-25) - - balance: Runners cannot vent crawl for 48 seconds (80% of the ability cooldown - timer) starting from when they activate the evade ability, to prevent cheese - - balance: Sentinel spit now uses more plasma per spit (40 from 25) and does a bit - less damage (30 stamina from 40, or 20 burn from 25) - - balance: Warriors in agility mode will do 15-20 damage, which will return to normal - when they stop using agility - SkyratBot: - - imageadd: New and improved sprites for stone floors! - rscadd: Stairs can now be built out of iron, wood, or really any rigid material (stuff you can make carving blocks out of) - rscadd: Two new types of stairs, wood and stone (wood is buildable in round) for @@ -919,15 +1056,57 @@ - imageadd: New icons for ceramic plates, cups, and bowls! - imageadd: The icon for custom material floor tiles has been lightened up to give things like glass and paper floors the look they were always meant to have + - imageadd: New and improved sprites for stone floors! + Profakos: + - bugfix: Goodie lockbox contents can no longer go missing + - qol: Added categories to the AutoDrobe + - qol: Examining a mech under construction returns the instructions for the next + step. + Rhials: + - bugfix: checking a pocket protector's insertable items list no longer lists the + names of ALL possible objects. + - bugfix: normal/cosmetology pocket protectors now work again. + Vishenka0704: + - bugfix: restores withdrawal log in NT Pay + Y0SH1M4S73R: + - bugfix: Admin lua scripting has been fixed for servers hosted on Linux + carshalash: + - bugfix: Fixes godfather using godmother sprites and vice versa. + etherware-novice: + - bugfix: fugitive hunters get team hud + lizardqueenlexi: + - qol: Reorganized the items in the Booze-o-Mat and implemented product categories +2022-10-19: + Darknesshaz: + - bugfix: Deconstructing a railing will now give the proper amount of iron rods. + Floofies: + - bugfix: Fixed a bug causing Blood Deficiency to remove more blood than intended. + GoblinBackwards: + - bugfix: Fixed modular computers not being able to be deconstructed/repaired + JohnFulpWillard: + - 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. + Melbert: + - bugfix: Viper spider venom actually causes hallucinations + - qol: Tramstation kitchen dumbwaiter now uses an elevator control panel PositiveEntropy, Fikou: - rscadd: 'Adds a new HUD: The Trasen-Knox HUD! With a theming based on classic 1970s CRT screen computers!' - code_imp: Added behavior for unique icons for active hands. - code_imp: Added behavior that makes it so when you equip an item, the icon behind it defaults to the blank template type. - RatFromTheJungle: - - bugfix: bardrobes, oncemore, actually sell their moneybags + Pumpkinoe: + - spellcheck: Statue descriptions now have full stops and capital letters. + - spellcheck: Sleeper protocol grammar is better now. Wahoo! + RaveRadbury: + - spellcheck: Igniting an oil patch will display in first person for the user. + Rhials: + - 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. ShizCalev: + - bugfix: Fixed the Shadow Walk action button. - bugfix: Fixed a possible scenario which could result in ghosts not sending a chat message properly when pointing during high time dilation. - bugfix: Fixed a minor runtime keeping player controlled secbots from switching @@ -952,6 +1131,33 @@ step. Triiodine: - imageadd: resprites datadisks to be more floppy disk-y. + Triiodine: + - imageadd: resprites datadisks to be more floppy disk-y. + VexingRaven: + - qol: All 4 of metastation's solar control rooms are identical now, with reinforced + walls and an identical layout of reinforced windows around the airlock. + Y0SH1M4S73R: + - bugfix: Admin lua scripting on Linux-hosted servers has actually been fixed this + time + YakumoChen: + - bugfix: Plastic explosives can no longer be planted on observer players when made + visible. + san7890, with regards to FernandoJ8: + - config: A new TOML system has been introduced to modify different settings and + variables regarding jobs! You can edit the standard stuff, like roundstart positions + and overall positions of a job like usual (feature parse), but you can edit + two new things! You can change how long an account needs to be "aged" on a server + for to unlock a job, as well as the actual number of minutes a player must get + to unlock a specific job. Nifty, eh? Do remember, this is entire system won't + load without the overall LOAD_JOBS_FROM_TXT flag! + - server: Keep in mind that the jobconfig.toml is now the preferred system for updating + job-related config, while jobs.txt should be considered deprecated. Support + for loading it via jobs.txt will remain indefinitely, but expect to see a small + error every time we validate the config. + - server: 'FYI: To use jobconfig.toml, it is strongly advised that instead of downloading + the codebase default that you run the Generate Job Configuration verb (in Server + tab) in order to import all of your already set variables from jobs.txt. Please + check to ensure that all of your wanted settings are present in the new file.' 2022-10-20: ATHATH: - rscdel: Explosive holoparasites no longer have a 40% chance per punch to teleport @@ -959,6 +1165,36 @@ types in partaking in the pastime of brutalizing the bleeding corpses of their victims without worrying about accidentally teleporting them into a primary hallway. + CCC23: + - rscadd: Added New way to purchase the autorifle and ammo to cargo + - balance: added more ballistics weapons to combat + Cass-Bitchcoin: + - bugfix: removed unrestricted helpers that directed you to be stuck in the service + hall + - qol: added unrestricted helpers in maintenance that lead into the bar + - qol: added unrestricted helpers that lead out of service hall + - bugfix: nudges book scanner to look better with the new sprite for it. + - bugfix: repositions a camera on icebox so that AI can operate an air alarm they + could not previously + GoblinBackwards: + - balance: You can no longer order new weakpoint locators/bombs if the originals + were destroyed. + - balance: The weakpoint objective requires both areas to be scanned before you + can blow up the weakpoint. + - bugfix: Fixes parts of the weakpoint locator description that were meant to say + the scan locations being missing. + - bugfix: You no longer get stuck standing still if a cryo cell you were inside + is broken. + - bugfix: Mining modsuits no longer sometimes get their inventory slots disabled + after recharging them by inserting plasma. + - rscdel: Removed the CO2 filters in Kilo/Icebox atmos that would pump CO2 back + into the scrubbers pipes. + JohnFulpWillard: + - bugfix: Shuttles are no longer part of the station, as they're god damn moving + ships. + - bugfix: Curator and Mime PDAs are now silent roundstart again. + LemonInTheDark: + - rscadd: You can now choke on cigarettes. Careful, those suckers can be nasty Melbert: - bugfix: Jellypeople (species) can consume food created by silver slimes - bugfix: Fixes Nightmare heart revival causing their other organs to not realize @@ -982,6 +1218,36 @@ - balance: added more ballistics weapons to combat - spellcheck: Chitinous Armour's description reflects its protection values more accurately. + - bugfix: Attempting to move around while in a state of non-existence will not give + you a message saying you're buckled to the concept of non-existence + Mothblocks: + - qol: Removed some doorjack chat messages that already have a balloon alert. + - bugfix: Fixed problems relating to detaching items from training toolboxes. + Paxilmaniac: + - bugfix: stone stairs placed side by side will now actually line up in spriting + - bugfix: I forgor to remove the ability to build material stairs without a stairs + frame when I added the whole frame system, this has been fixed, use a stairs + frame made of wood or iron now. + Profakos: + - spellcheck: Chitinous Armour's description reflects its protection values more + accurately. + RikuTheKiller: + - bugfix: Air alerts no longer prescribe you with breathing things you'll just die + from. + - qol: Air alerts now tell you that you've got a plasma tank in your survival box + if you're a plasmaman and don't say you have a gas mask in there, it's a breath + mask. + ShizCalev: + - bugfix: Fixed broken/missing gibs on the nature shuttle. + dopamiin: + - bugfix: The chaplain's backpack no longer hides behind hair, but instead extends + its spikes proudly. + etherware-novice: + - bugfix: you can now clean storage items (toolbox) with soap + lizardqueenlexi: + - bugfix: made regenerate_organs() apply to external organs as well as internal + ones + san7890: - qol: The voting system will now prevent you (and give a short message via the tooltip) from starting a map vote when there are zero or one map choices available. - qol: If there is only one map choice available, the map vote will automatically @@ -1003,6 +1269,7 @@ - qol: Air alerts now tell you that you've got a plasma tank in your survival box if you're a plasmaman and don't say you have a gas mask in there, it's a breath mask. + timothymtorres: - rscadd: Add tower of babel wizard event that makes people lose all their languages and gain a randomized one. The wizard however gains the ability to speak all languages. Curators, chaplains, book of babel, and antimagic objects will prevent @@ -1044,6 +1311,10 @@ hammer, and anvil to repair - bugfix: reagent hammers dont damage anvils and crafting bench 2022-10-21: + - bugfix: Fix item icons for action buttons to be center aligned +2022-10-21: + Ebb-Real: + - bugfix: Chairs get placed in the same direction as you face when you place a chair. MSO, Dopamiin, Ryll: - bugfix: fixed an edge case where admins spawning ghosts in as mobs would sometimes give the wrong person control of the new mob. @@ -1067,6 +1338,27 @@ - bugfix: Breast prefs are no longer reset and throw runtimes on savefile update. Woops. ShizCalev: + - bugfix: Fixes pressing a paper up to a camera while you are "Unknown". + - bugfix: Fixes a runtime from deleting a mob with an eye of god equipped + - bugfix: Having a Changeling sting active will no longer block alt-clicking to + open bags and middle mouse to swap hands in most circumstances + - bugfix: Changing species will now carry over brain traumas, liver traits, cybernetic + organs, organ damage, and the heretic living heart. + RaveRadbury: + - qol: Added balloon alerts for securing emergency energy shields + - bugfix: People can now see when you begin reading the Guide to Dank Mimery + Rhials: + - bugfix: The command intercom now has a sprite. Wow. + - bugfix: Injecting patients (victims) with sleeper chems no longer runtimes on + log_combat. + Sealed101: + - bugfix: Fixed AIs piloting a mecha gaining unobstructed vision with no cameras + present when moving past a certain point + SeigaSeiga: + - imageadd: Added a Shinto style Chaplain suit and holy book icon. Made the Shrinehand + Robe available in the chaplain's wardrobe. + ShizCalev: + - spellcheck: Corrected formatting on the examine message for unarmed mines - refactor: Modernized the janicart! - bugfix: Fixed janicart examine message not mentioning how to dump it when it was almost empty, but not completely empty. @@ -1079,6 +1371,10 @@ present when moving past a certain point - rscdel: Removed the CO2 filters in Kilo/Icebox atmos that would pump CO2 back into the scrubbers pipes. + Tastyfish: + - bugfix: Flashlights and similar directional light items no longer make you glow + forever under certain circumstances. + jlsnow301: - rscadd: Orbit UI buttons now reflect health and show job icons - rscadd: ID trims now have an orbit icon variable for its display on the observer menu @@ -1096,6 +1392,7 @@ Robe available in the chaplain's wardrobe. - qol: Added balloon alerts for securing emergency energy shields - rscadd: You can now choke on cigarettes. Careful, those suckers can be nasty + san7890: - bugfix: When a human went through an emagged recycler, they would have literally everything on them chewed up in the recycler. However, they still appeared to have all of their stuff on them due to some faulty code. When you now punt that @@ -1114,6 +1411,8 @@ components. nevimer: - code_imp: Use timers for the BSRPD a cooldown (and makes it work) + - bugfix: You can now properly weld and use plasma cutters without the target of + your actions being irrevocably FUCKED. 2022-10-22: Boy: - balance: Flasks can now be stored in jackboots, clown shoes, and other shoes with @@ -1162,6 +1461,9 @@ - admin: '"Admin PM" verb can now be cancelled without an error message' GoldenAlpharex, Tastyfish: - bugfix: Fixes mentor-related messages not getting logged properly. + JohnFulpWillard: + - bugfix: Computers without a saved job/ID are no longer called " ()" + - bugfix: Clockwork's ruin should no longer have ungenerated turfs. LT3: - bugfix: Tramstation's tram doors now work properly. - rscadd: The tram has a destination sign, and the call buttons have a status display @@ -1231,6 +1533,53 @@ - bugfix: sandals and colorable jackboots now actually work on digigrade individuals SkyratBot: - bugfix: The black market uplink now properly uses the correct item path and description. + - bugfix: Sechuds cannot pierce the sneak suit to see the wearer's ID trim. + Pumpkinoe: + - rscadd: A new movie's been making waves, and a poster about it has been seen once + or twice aboard the station. Why's she called the Blood Geometer, anyways? + Sealed101: + - bugfix: 'Nanotrasen 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' + TiviPlus: + - bugfix: fixed gygax sometimes resetting it's overload speed after it ended + dawsonkeyes: + - bugfix: wendigo ground slam no longer a global proc + etherware-novice: + - rscadd: screwdriver pen + jlsnow301: + - bugfix: Fixed prisoner icon on orbit menu. + timothymtorres: + - qol: Add AltClick context screentip to IDs + tralezab: + - rscadd: Added a new spell, Splattercasting! It's like an offensive version of + lichdom. +2022-10-23: + Foxtrot (Funce): + - admin: '"Admin PM" verb can now be cancelled without an error message' + LemonInTheDark: + - bugfix: Breaking reagent tanks will be significantly more responsive + Major0911: + - rscadd: new popcorn flavors and two kinds of empty boxes after them + Melbert: + - bugfix: Fixes a runtime from non-cultists picking up cult daggers + - bugfix: Nutriments and Peptides will no longer heal robotic limbs. + - bugfix: Fixes a runtime with voting actions. + - bugfix: Fixes a runtime with Wendigo's slam + - bugfix: Fixes a minor runtime with Fleshmend clearing scars. + etherware-novice: + - refactor: removed prison_radio var + lizardqueenlexi: + - bugfix: Fixed a minor error causing the H.O.N.K. to be impossible to construct. +2022-10-24: + ArcaneMusic: + - bugfix: The black market uplink now properly uses the correct item path and description. + Melbert: + - bugfix: Streaks of blood from gibs will now all be infective with diseases, instead + of only the parent gib + - bugfix: Fixes an edge case runtime with heretic sacrificing + Rhials: - bugfix: headpikes now drop their mounted head on destruction. Vishenka0704: - admin: separate antagonists from living player, and add another field with security @@ -1272,6 +1621,32 @@ - bugfix: Void-raptor detective office now has their staple camera console - bugfix: Void-raptor Customs camera console is usable 2022-10-26: + ArcaneMusic: + - bugfix: Paper hats now display properly when worn. + GoblinBackwards: + - bugfix: Fixed an exploit that let you make infinite bloody bastard swords + Profakos: + - bugfix: Ian once again celebrates his birthday on Kilo, and new year on Icebox + - bugfix: On tramstation, jobs that have morgue access should be able to access + it + - bugfix: In general, morgue access does not let you sneak into medbay + Sealed101: + - bugfix: The goliath that you may encounter outside of a Survival Pod ruin on Lavaland + is now properly a carcass. + ShizCalev: + - bugfix: Fixed a minor runtime when regal rats attacked power cables. + VexingRaven: + - bugfix: The underground mining site ruin no longer has a ceiling of snow, it is + once again an open pit. Don't fall in! + ZephyrTFA: + - bugfix: The SpiderClan have resolved an issue where the Ninja Suit would terminate + the AI inside during standard usage + exymian: + - bugfix: Fixed 2 unconnected pipes in Tramstation atmos +2022-10-26: + GoblinBackwards: + - bugfix: Fixed getting stuck with blurry vision if your eyes were fixed while you + were ghosting GoldenAlpharex: - config: The Generate Job Configuration verb now works as expected when there's at least one job in-game that doesn't exist in the new jobconfig.toml file already. @@ -1302,6 +1677,7 @@ - qol: Humans spawned from a ghost by an admin have their quirks assigned - bugfix: The SpiderClan have resolved an issue where the Ninja Suit would terminate the AI inside during standard usage + Paxilmaniac: - code_imp: The dmi that reagent holders take fill icons from is no longer hard coded as reagent_fillings.dmi, and can be changed using the fill_icon variable Rhials: @@ -1315,64 +1691,34 @@ (BE CAREFUL WITH THESE). - code_imp: The disease outbreak event has been split into two different events -- "Classic" and "Advanced". The code should be a bit easier to read as well. - - code_imp: The dmi that reagent holders take fill icons from is no longer hard - coded as reagentfillings.dmi, and can be changed using the fill_icon variable - - bugfix: Ian once again celebrates his birthday on Kilo, and new year on Icebox + SeigaSeiga: + - bugfix: Carrying a null rod no longer disables the ability to use the traitor + chef's meat hook + Thunder12345: + - rscadd: People wearing kitty ears can now have their tails pulled. + lizardqueenlexi: + - qol: Humans spawned from a ghost by an admin have their quirks assigned + timothymtorres: - qol: Add AltClick to remove pAIs for tablets. Added balloon alerts to tablets for inserting/removing objects. - - rscadd: People wearing kitty ears can now have their tails pulled. - - bugfix: Fixed getting stuck with blurry vision if your eyes were fixed while you - were ghosting - Zergspower: - - qol: Space Hotel - remade all rooms, moved Solars and dock to the south and managers - office next to the entry for the hotel rooms - - qol: Space Hotel - Many many many many changes to the overall look and feel, - from carpets/walls/colors/rooms - - qol: Space Hotel - Staff now have a bit more control over the - - bugfix: Space Hotel - fixed couch direction bug in lobby - - bugfix: Space Hotel - broken clothing/spawners and decals - - rscadd: Space Hotel - New keyed doors specially made for the hotel! No key? No - Room! - - rscadd: Space Hotel - New Door Sprites/coloring and function - - rscadd: Space Hotel - New Permanent Portal creator for the manager to place a - static portal for easier transition from station to Hotel - - rscadd: '' - - qol: Mass redesign of the Interdynefob ruin aka DS-2 - focusing on shrinking down - unused areas and optimizing each rooms size. - - bugfix: interdyne fob - A lot of minor duplications and errors, mostly with cables - and piping 2022-10-27: + DAKKA-WAAAGH: + - rscadd: Adds the NTSS Shadow Emergency Shuttle + - rscadd: Adds the Emergency Shuttle Engine area Guillaume Prata: - - balance: After a CentCom Quartermaster mistakenly filled a NT warehouse with thousands - of Forensics Scanners. CentCom has decided to remove the Forensic Scanner's - design from protolathes. If you need a new scanner please order it from cargo. - balance: Arcade machines will dispense arcade tickets now instead of a direct prize. Slap them back into the machine to trade for the prizes or collect as many as you can to show of how much of a gamer you are! - Melbert: - - bugfix: Fixes some basic mobs being immune to damage from atmos effects - - code_imp: A few bespoke elements are now properly passed static lists to stop - them from creating tons of instances. - - balance: The chapel's confessional intercom is locked to its initial frequency, - but an emag could bypass it. - RimiNosha: - - rscadd: 'Added quirk sanitization. remove: Removed Foreigner. You are able to - recreate this quirk almost exactly via removing common, and optionally giving - yourself a recorder via loadout.' - ShizCalev: - - bugfix: pdas now use the pda worn icon again. - - bugfix: Pipecleaner coils are no longer invisible. - - bugfix: Pipecleaners will now how have correct color when split. - SkyratBot: - - bugfix: Blind people can see footsteps again when on lower station levels. - - bugfix: Fixed 2 unconnected pipes in Tramstation atmos - - bugfix: Carrying a null rod no longer disables the ability to use the traitor - chef's meat hook + - qol: Miners rejoice again!! A few of the mostly useless and spammy messages that + get send to your chat were changed to balloon alerts or straight up removed. + Hopefully, you will have an easier time listening to the radio chatter now. + - balance: After a CentCom Quartermaster mistakenly filled a NT warehouse with thousands + of Forensics Scanners. CentCom has decided to remove the Forensic Scanner's + design from protolathes. If you need a new scanner please order it from cargo. + Holoo-1: - bugfix: fixed ai controlled monkeys causing runtimes when they attempt to give items - - imageadd: BRAND SPANKING NEW SYNDICHAD OPERATIVE HUD RESPRITE. - - bugfix: Fix table contextual screentips for tools - - bugfix: Fix cyborgs dropping items when sent to the arena shuttle + JohnFulpWillard: - balance: Tablet hard drives no longer exist. Applications are now stored directly onto the tablet. - balance: Building a modular computer with metal now should be a proper functioning @@ -1380,91 +1726,56 @@ - balance: The R&D's Master system hard drive is now a data disk, if ever you need one that desperately. - bugfix: Tablets (not Cyborg ones) now have pens again, like they had before. -2022-10-28: - Guillaume Prata: - - qol: Miners rejoice again!! A few of the mostly useless and spammy messages that - get send to your chat were changed to balloon alerts or straight up removed. - Hopefully, you will have an easier time listening to the radio chatter now. - ShizCalev: - - bugfix: fixed screwdriver pens not working properly when extended/retracted. - - code_imp: Added a unit test to catch items that can be equipped to suit slots - have missing textures. - SkyratBot: - - qol: Stabilizing serum (the item for stabilizing legion cores) now fit in explorer's - 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 - 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 - - spellcheck: Remove cloth golem antimagic description - - bugfix: fixed SM bricking when you dump gases without effects like halon into - it. -2022-10-29: - Iamgoofball: - - spellcheck: Renames Bouncer to Service Guard - - bugfix: Blueshields and Guards were erroneously added to Security OOC access despite - not being members of Security nor answering to Security in any fashion. This - has been resolved. Melbert: - rscadd: Heretics spawn with a new spell, Shadow Cloak. Using it will hide your identity for 3 minutes or until cancelled, but is fairly obvious otherwise, as it shrouds you in purple smoke. - OrionTheFox: - - bugfix: fixed a ton of broken digi sprites, sorry it took so long x-x - Paxilmaniac: - - balance: forged armor vests can now hold forged weapons - - imageadd: Minecarts, and some associated items, have been given a bit of a sprite - improvement + - balance: The chapel's confessional intercom is locked to its initial frequency, + but an emag could bypass it. + - bugfix: Fixes some basic mobs being immune to damage from atmos effects + - code_imp: A few bespoke elements are now properly passed static lists to stop + them from creating tons of instances. ShizCalev: - - qol: Converted buckets (and naturally cleanbots) over to GAGs. - - bugfix: Cleanbots built with a wooden bucket will now properly drop a wooden bucket - when destroyed. - SkyratBot: - - bugfix: Reagent containers playing attack animation when transferring reagents - to deep fryers - - imageadd: Centcomm has found the lost box of striped straws for ALL the milkshakes. - - bugfix: Nukies and roboticists access the correct missile types again. - - refactor: Cleans up the missile subtypes. - - balance: Renames the BRM-6 to the PEP-6, and makes it explode...a lot of the stuff - that it claims it should explode. + - bugfix: pdas now use the pda worn icon again. + - bugfix: Pipecleaner coils are no longer invisible. + - bugfix: Pipecleaners will now how have correct color when split. + Tastyfish: + - bugfix: Blind people can see footsteps again when on lower station levels. Vladoricious: - bugfix: Airlock and decal painters no longer mysteriously float around you. - bugfix: The Science Team at [REDACTED] has untangled the quantum state of pizza and pasta. In short, ERROR custom spaghetti is no longer on the menu. - Zonespace27: - - bugfix: Fences no longer say they can have barbed wire put on them - softcerv: - - bugfix: 'alter form now properly accounts for oversized: users now have the option - to return back to being oversized after changing their sprite size.' - - bugfix: oversized is now removed from a user when they change their sprite size - via alter form, and is given back when they return to the oversized size. -2022-10-30: - Jolly: - - qol: There are now arrival shuttle monitors located at.. arrivals! + axietheaxolotl: + - imageadd: BRAND SPANKING NEW SYNDICHAD OPERATIVE HUD RESPRITE. + san7890: + - qol: Nanotrasen realized they forget to implement the date function into the new + NTos tablets, so they doubled back and added those next to the time. + timothymtorres: + - bugfix: Fix table contextual screentips for tools + - bugfix: Fix cyborgs dropping items when sent to the arena shuttle +2022-10-28: + ShizCalev: + - code_imp: Added a unit test to catch items that can be equipped to suit slots + have missing textures. +2022-10-29: + ArcaneMusic: + - qol: The Export Scanner, Sales Tagger, and Price Tagger have been merged together + into the Universal Scanner. + - qol: Using the Universal Scanner in-hand allows for switching between the three + tools functionality on the fly. Melbert: - - bugfix: Fixes a runtime with Wendigo's slam - bugfix: Roaches will actually eat ants - bugfix: Rats can be multicolored now, like mice - bugfix: Rats, when they die, become pick-up-able items like mice - refactor: Refactored mice / rats into basicmobs. - Paxilmaniac: - - qol: The wargaming kits now spawn with a set of example rules, ships, and starting - scenarios for anyone trying to get into the game! ShizCalev: - - bugfix: holding someone up at gunpoint will no longer allow you to fire automatic - weapons at double RPM. - - bugfix: you can no longer one-shot kill people with the russian revolver by holding - them up. - SkyratBot: - - bugfix: 'The #cargobus channel now has all the department consoles again.' - - qol: The Export Scanner, Sales Tagger, and Price Tagger have been merged together - into the Universal Scanner. - - qol: Using the Universal Scanner in-hand allows for switching between the three - tools functionality on the fly. - - bugfix: Tramstation science now has the 20 glass instead of 1. - - balance: Limits how much of the heirloom objective you can get within 10 minutes. + - qol: Converted buckets (and naturally cleanbots) over to GAGs. + - bugfix: Cleanbots built with a wooden bucket will now properly drop a wooden bucket + when destroyed. + Vladoricious: + - bugfix: Consciousness Transference potions now tame the target creature, just + like Sentience potions. + Watermelon914: - refactor: Refactored how duplicates are handled in traitor objective code. This will fix destroy heirloom and eyesnatching objectives from only ever being available once. @@ -1472,52 +1783,51 @@ - bugfix: Fixed eyesnatching objectives never generating. - balance: Kidnapping objective can only be taken a maximum of 3 times within 15 minutes. This puts it in line with the assassinate and eyesnatching objectives. - - bugfix: The infiltrator modsuit properly hides tails. + timothymtorres: + - bugfix: Reagent containers playing attack animation when transferring reagents + to deep fryers +2022-10-30: + CMDR-Gungnir: + - qol: Recent breakthroughs in genetic crop modifications has created slightly less + addictive nicotine! A single cigarette should now be safe without ruining your + life. + GoldenAlpharex: + - bugfix: Random bedsheet spawners will now give their orientation to their spawned + bedsheet, for beds that aren't orientated in the regular direction. Mappers + rejoice! + - bugfix: Being hit by the freezing breath of two (or more) ice whelps will no longer + leave you looking like an ice cube for the rest of the round. + JohnFulpWillard: + - bugfix: 'The #cargobus channel now has all the department consoles again.' + Rhials: + - code_imp: Autodocs dreaming.dm and bedsheet_bin.dm. + - code_imp: Dreams now have an expanded list of subjects to choose from. + - bugfix: The Shuttle Insurance event no longer occurs when the BYOS is purchased. + ShizCalev: + - bugfix: holding someone up at gunpoint will no longer allow you to fire automatic + weapons at double RPM. + - bugfix: you can no longer one-shot kill people with the russian revolver by holding + them up. + Thunder12345: - refactor: Dueling pistols have been refactored to be less prone to runtimes. - - bugfix: wendigo ground slam no longer a global proc - SomeRandomOwl: - - admin: Fixed the Play Internet Sound Variable To now include the song name in - the chat box Now Playing Widget. - Vladoricious: - - bugfix: Consciousness Transference potions now tame the target creature, just - like Sentience potions. - dawsonkeyes: - - balance: kinetic crusher no longer spawns in the marked ones arena - - bugfix: the marked ones spin attack is no longer faulty, he is now a beyblade - again - softcerv: - - code_imp: cleans up dorm vendor code + Watermelon914: + - balance: Limits how much of the heirloom objective you can get within 10 minutes. + etherware-novice: + - rscadd: title screen examine text + necromanceranne: + - bugfix: The infiltrator modsuit properly hides tails. + private-tristan: + - bugfix: Tramstation science now has the 20 glass instead of 1. 2022-10-31: - Gladi-Writes: - - rscdel: Paperwork Error random event. - LovliestPlant: - - rscadd: VoidRaptor - adds cafe in off of departures hallway - - rscadd: VoidRaptor - moves russian bar to departures maints - - rscadd: VoidRaptor - moves drone bay to sit near mining office - - rscadd: VoidRaptor - adds mining office foyer - - rscdel: VoidRaptor - replaces external airlock in departures EVA room with maints - access - - qol: VoidRaptor - rearranges mining office - - bugfix: VoidRaptor - fixed sec deliveries - - bugfix: VoidRaptor - fixed cargo disposals + ArcaneMusic: + - bugfix: The QM now has a statue, as all other heads have statues. + Fikou: + - qol: makes borg light range at least the minimum useful light range + LarissaMayrink: + - rscadd: Powercreeps the CMO by giving them a laser pointer Melbert: - bugfix: Fixes Latejoin Revolution from triggering very commonly - MidoriWroth: - - qol: Added a YouTool and Syndicate 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: - bugfix: Microwaves are now less likely to break if things inside of it are deleted. - SkyratBot: - - qol: makes borg light range at least the minimum useful light range - - bugfix: The QM now has a statue, as all other heads have statues. - - rscadd: Powercreeps the CMO by giving them a laser pointer - Zonespace27: - - rscdel: The Vanguard job has been removed - - rscadd: Surplus (nerfed) Vanguard gear can be bought from a misc. crate in cargo - for 3600 credits. - jjpark-kb: - - rscadd: added banishment and revive animal ash rituals - - admin: completed rituals are now logged - - bugfix: ashwalkers can revive again from the tendril (works differently) - - rscdel: removed the corrupted-ash lantern (was for when lanterns had batteries) + Vishenka0704: + - admin: adds a PDA Message verb in Events diff --git a/html/changelogs/archive/2022-11.yml b/html/changelogs/archive/2022-11.yml index 40650feaf97b5..ee8a969615439 100644 --- a/html/changelogs/archive/2022-11.yml +++ b/html/changelogs/archive/2022-11.yml @@ -115,6 +115,7 @@ mask was temporarily adjusted. - bugfix: Fixed a bug which caused the anesthetic machine to keep working if its mask was adjusted when the user had another breathing apparatus equipped. + A.C.M.O.: - rscadd: Hermetically sealed and space-worthy helmets can now be used as breathing apparatuses! - rscadd: Internals air tanks can now be toggled via AltClick. @@ -127,6 +128,59 @@ if the mob only had a breathing tube. - bugfix: Fixed a bug that allowed two mobs to breathe from the same air tank after exchanging it between them. + ArcaneMusic: + - bugfix: Berserker Suit helmet now has the correct sprite. + - rscadd: Adds a new item that can be purchased from the black market uplink, the + ancient V8 Engine. + - rscadd: Funny, there's a little label on the side of the engine... + Fikou: + - qol: color codes job laser pointers. now you can tell which job blinded you! + - admin: ctrl shift click spawning no longer applies quirks + - admin: adds quirk applying button to player panel + Foxtrot (Funce): + - bugfix: You can now select a recipient in the message monitor "admin send message" + menu again + - bugfix: The amount of dead in the admin verb 'Check-antagonists' should now accurately + report dead people (still in body) as well as ghosts that have died. + GoblinBackwards: + - bugfix: Fixed the rod of asclepius turning invisible when changing z-levels + Guillaume Prata: + - bugfix: Surgical tools can't be grinded for silver anymore. + Jacquerel: + - rscadd: You can harvest useful organs from Brimdemons and Lobstrosities. + - bugfix: You can no longer 'preserve' regenerative cores which have already expired + to repair them. + JohnFulpWillard: + - bugfix: The eyesnatcher properly takes people's eyes now. + - balance: Security officers liking the taste of donuts (not being healed from it) + is now tied to their liver rather than their mind. + Melbert: + - qol: Good Clean Fun Vendor is categorized. + - qol: Dullahans, when speaking, use normal spans instead of robot span + - bugfix: Fixes being unable to attack people with clothing to quickly equip it + without the strip menu + - bugfix: Fixes the cyborg projectile dampener doing nothing. + - bugfix: You can select halloween races again. + Mooshimi: + - spellcheck: Formatting error fix with examining headless bodies. + MrStonedOne: + - admin: Forum 2fa (verify admin) now properly updates your record in the database + without needing a reconnect to trigger a dbsync. + Rhials: + - bugfix: Flickering lights will now stop flickering and turn off properly when + depowered or disabled. + etherware-novice: + - rscadd: bluespace light replacer + flowercuco: + - bugfix: Added Missing Hydroponics door to Airlock Painter + mc-oofert: + - bugfix: Fixed debug industrial lifts not working + private-tristan: + - spellcheck: ORM upgrade text removed +2022-11-02: + ATHATH: + - spellcheck: Updated the reagent dartgun's uplink description to reflect its current + reagent capacity (90u). Fikou: - qol: the mech orbital pad now no longer deorgans you if you stand on it while it launches upward, now gibbing (!!!), but only when a mech falls on you @@ -270,6 +324,60 @@ Guillaume Prata: - qol: Ore bag balloon alerts have a 2 second cooldown now and a spammy message (hopefully the last) it send to your chat about being full was removed + - qol: sniper scopes and kinesis module should feel better to use + Sealed101: + - bugfix: removed misplaced unrestricted access from Lavaland Shuttle Airlocks + Striders13: + - balance: Non-human clowns enjoy eating bananas now. + Thunder12345: + - bugfix: Added a missing scrubber to the locker room entryway on Meta + - refactor: The beer nuke detonation is now a special type of scrubber overflow + event. + Zergspower: + - bugfix: Fixes a possible oversight that prevented PKA upgrades being unable to + be printed for borgs + itseasytosee: + - refactor: Elements of unarmed strikes are now limb dependent instead of species + dependent. Go rip off an ethereal arm, sew it onto yourself, and burn some people. +2022-11-03: + ATHATH: + - qol: The determination, universal indicator, and organic slurry reagents now have + the REAGENT_CAN_BE_SYNTHESIZED flag, like most other reagents in the game. This + allows those reagents to be harvested from corpses (if the corpse had them in + their system when they died), to appear in randomized chemical plant traits, + and to be replicated by Odysseuses (Odyssi?). + Cheshify: + - bugfix: There are now only 4 displays in Tram's SM room, not 8. + - bugfix: A wall in icebox maintenance behind xenobiology no longer blocks off the + view outside. + - bugfix: A design fault near the library has been removed, there is now a snack + vendor within the library that was once in the hall. + Fikou: + - spellcheck: renames TOXIN to BIOHAZARD in clothing protective tag + GoblinBackwards: + - bugfix: AIs no longer teleport gas tanks to them when ejecting tanks from atmos + machinery + Pickle-Coding: + - bugfix: The supermatter will now do linear powerloss at the correct conditions + when you shoot it with adminium emitters. + Zergspower: + - bugfix: fixes the errant line in the default Siding decal 'end' + antropod: + - bugfix: Assemblies can be picked up again after detaching from chemical grenade + etherware-novice: + - refactor: suicide code doesnt check damagetype multiple times + lizardqueenlexi: + - bugfix: Properly suppressed a message about suppressing messages. + tf-4: + - bugfix: Eating food with onions in will no longer make you cry. +2022-11-04: + Drake and Josh (Fikou and Melbert): + - bugfix: Ash Drake's fire rain and swoop landing breath work again. + Fikou: + - bugfix: fixes throw click cooldown not applying + - bugfix: makes beeping sounds work on mechpads when used by a mech + GoblinBackwards: + - qol: Space Ninja now has their MODsuit module buttons pinned by default Melbert: - rscadd: Chefs can now make food with love. They can purchase a skillchip from their vendor which enhances their kiss emote. Using your kiss on food you create @@ -328,6 +436,106 @@ system. Pre-existing preferences should be safely migrated but players are advised to check. 2022-11-12: + ShizCalev: + - code_imp: Riot helmets and justice helmets are now in a /toggeable subtype. + Tastyfish: + - rscadd: Adds an option in Game Preferences -> Game Options to turn off MultiZ + parallax. + timothymtorres: + - bugfix: Fix zombie tongue to only apply to infectious species +2022-11-05: + ArcaneMusic: + - bugfix: The universal scanner now properly show all three options in the radial + with sprites, due to a missing space. + - qol: The universal scanner now has contextual screentips within all three of its + modes. + Cheshify: + - bugfix: All maps have a consistent Evidence room. + - imageadd: Ddds an icon for the Evidence Storage area + Comxy: + - bugfix: Fixes conveyor speed input. + - bugfix: Fixes radiation blocking properties of glass types. + Fikou: + - balance: less megafauna should spawn on icebox and lavaland + - qol: blood drunk miner ruin on lavaland will spawn every round + GoblinBackwards: + - bugfix: fixed an exploit that let you go completely invisible by scanning a HFR + corner with a chameleon projector + Guillaume Prata: + - qol: The forensic scanner uses balloon alerts for most of it's simple feedback + messages, enjoy having an easier time hearing the radio chatter. + - qol: Ore bags are "silent" for the wearer and won't send pointless chat messages + about what has been stored/removed from it. Other players will still get a chat + message, so miners can't get away with surprise plasma ore bombs. + Hardly3D: + - spellcheck: AI Universal Standard canvas will now specify it's size on the item + name. + Hatterhat: + - qol: Mining point cards are now reusable, allowing user-set transfers of mining + points to and from the point card itself. + Imaginos: + - imageadd: new icons for modsuit actions + Imitates-The-Lizards: + - qol: Janitors and Shaft Miners start with the ExperTrak Skill Tracker preinstalled + on their PDAs. + Melbert: + - bugfix: Fixes Regal Rat Domain not functioning as intended + - bugfix: Triggering a traitor poster trap progresses their objective. + Rhials: + - admin: Forcing the shuttle catastrophe event while an emergency shuttle is docked + comes with a warning now. + - balance: The Shuttle Loan event no longer only rolls once per round. + SpaceLove: + - bugfix: QM can no longer be managed by HR core app. + VexingRaven: + - bugfix: Fixed posters printed from the library console staying in your hand when + you place them + - bugfix: Fixed Random Official Poster printed from the library console always placing + the west-facing variant no matter where you place it + flowercuco: + - rscadd: Added 6 new flatbreads and their associated recipes + - rscadd: Added 1 new pizza for ethereals + lizardqueenlexi: + - bugfix: Put the proper access helpers on two maintenance airlocks in MetaStation + medical. + - bugfix: Added a missing watering can and two bottles of nutrient to the Tramstation + public garden. + - bugfix: Added a missing GeneDrobe to MetaStation. + - qol: Made surgical computers tell you what tool to use for the current surgical + step. + mc-oofert: + - bugfix: Fixes getting AIs with cores getting gibbed if their mech theyre controlling + is destroyed + tralezab: + - rscadd: Screwdriver cocktails now work as the world's worst screwdriver + zxaber: + - rscadd: You can now resist out of disposals pipes once you have stopped, at the + cost of some brute damage. +2022-11-06: + Sealed101: + - rscadd: You can now perform an overly-complicated cork removal ritual known as + Sabrage. Swing at a champagne bottle with a sharp enough blade to strike the + cork off the bottle! + - rscadd: Added a Sabrage skill chip to the Library Play Room Vendor. + - rscadd: Heads of staff are more likely to pull this stunt off. + VexingRaven: + - rscadd: Added several new pepper spray refillers around the Security wing of Ice + Box Station + - bugfix: Fixed missing pepper spray refiller in the Medbay Checkpoint on Ice Box + Station + - bugfix: Fixed a doubled-up pepper spray refiller in the Security Office on Delta + Station + exymian: + - bugfix: fixed the prox sensor +2022-11-07: + A.C.M.O.: + - rscadd: Added the Deaf Personnel pin for users of the Deaf quirk. + Fikou: + - bugfix: flight potions no longer have white bottle overlays + - bugfix: fixes cursed katana not spawning + GoldenAlpharex: + - bugfix: SpaceMessenger was now updated to 6.4.8, bringing you more responsiveness + than ever (so long as ever is shorter than seven days ago)! Jacquerel: - qol: More actions should report why they are unavailable if pressed while they are unavailable. @@ -336,130 +544,616 @@ - bugfix: Spider broodmothers can now only lay one enriched egg per victim. - bugfix: Spider broodmothers can no longer feed multiple times from the same corpse, a bug they never previously needed to exploit because of the previous bug. + JohnFulpWillard: + - bugfix: Detomatix cartridges are no longer called attacking items. + Sealed101: + - bugfix: fixed mecha internal damage diagnostic HUD blip not appearing + - rscadd: Added a special suicide to the Experi-Scanner + ShizCalev: + - qol: Randomized the pixel offset of stuff when it comes out of a microwave + - bugfix: Fixed a runtime when NPC monkeys attempt to put items in the hands of + mobs with no hands (ie cyborgs, lizards, rats, ect.) + - bugfix: Monkeys will no longer attempt to put items in your pockets if you have + no pockets. + Striders13: + - bugfix: permanent one-use portals will no longer get used up when clicked by a + ghost + lizardqueenlexi: + - bugfix: Made the V8 Engine teach you the House Edge recipe. + - bugfix: Fixed an error related to the V8 Engine that caused an infinite progress + bar. + san7890, ZephyrTFA: + - bugfix: Emojipedia has been restored to tablets! Look for it in your local Nanotrasen + 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 + :ai:, :1997:, :pslime:, and more! +2022-11-08: + Fikou: + - qol: concussive gauntlets now launch you away from gibtonite + - qol: concussive guantlets can now mine basalt + Guillaume Prata: + - qol: Ore bag balloon alerts have a 2 second cooldown now and a spammy message + (hopefully the last) it send to your chat about being full was removed + Melbert: + - code_imp: Unremovable organs that are forcemoved out of a mob with an owner no + longer self terminate + SeigaSeiga: + - balance: Implants can no longer be destroyed by enough external explosions. Bomb + Suit Knights can wield their explosive lances with pride! Tattle: - admin: added investigate deaths to shed some more light on unusual demises, dustings, and gibbings - itseasytosee: - - refactor: Elements of unarmed strikes are now limb dependent instead of species - dependent. Go rip off an ethereal arm, sew it onto yourself, and burn some people. -2022-11-15: + Thunder12345: + - qol: Jukebox music can be controlled by a new seperate preference, and is no longer + linked to the instrument sound preference option. + - refactor: Sound related toggle preferences have been migrated away from the legacy + system. Pre-existing preferences should be safely migrated but players are advised + to check. + TiviPlus: + - bugfix: fixed a gygax speed exploit + VexingRaven: + - bugfix: Fixed a few balloon alerts for guns and moved a few more chat messages + to balloon alerts + - bugfix: Adding missing fire alarms to the Chapel and Funeral Room on Metastation + mc-oofert: + - bugfix: Fixes 1 tile foam in Foam Dispensers,Clown Cars, Hygiene Bots,Firebots, + Soap Suicide, Emagged cleanbots, and the clown plasmaman envirosuit + moocowswag: + - bugfix: Firebreath can no longer benefit from both power and energetic chromosomes + at the same time + private-tristan: + - bugfix: deltastation psychology office buttons are now reachable without opening + the locker + san7890: + - 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 + to have the button that saves the data onto your disk... say "Save". +2022-11-09: + MTandi: + - bugfix: made Kilo Xenobio guide visible from the north part of the room. +2022-11-14: Iamgoofball: - bugfix: You can no longer attach igniters to igniters. - SkyratBot: +2022-11-15: + Iamgoofball: - rscdel: You can no longer craft explosive lances. 2022-11-16: + Cheshify: + - bugfix: A few tiles on icebox's lavaland ruin aren't active turfs anymore. Ebin-Halcyon: - - imageadd: A bunch of underwear has been resprited, take a look. - Ghommie: - - balance: Holocarps now cost as much as holoparasites. Basically the same, just - fishier. - 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 - 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. - - bugfix: Normal pillows can finally be fabricated using three pieces of cloth, - as intended. As a result, fancy pillows have been properly renamed to "fancy - pillow" in the cloth crafting menu. - Jolly: - - bugfix: Active turfs for the Space Hotel have been rectified. The solars shouldn't - smell like that contain oxygen anymore. - - bugfix: Space Hotel solars is now a defined area, as is customary with almost - every other map. - MTandi: - - bugfix: Cleanbots properly prioritize adjacent trash - - qol: Cleanbots now clean floor under the tables - - qol: Cleanbots now clean more types of trash - OrionTheFox: - - bugfix: fixed Pepperball ammo boxes being invisible when they had actual ammo - 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. - - 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. - - rscadd: The ash walker den for lavaland has been remapped! - - balance: not really balance but if you somehow get your hands on raw stone, you'll - need to use a chisel or a mining tool to cut them into bricks, rather than smelting - them. - - imageadd: ore veins, raw stone, stone bricks, and stone walls all have new sprites - SkyratBot: - imageadd: the advanced military tracksuit has been resprited. - - bugfix: Lobstrosity Rush Glands now correctly apply their action cooldown when - they trigger from low health. - SpaceLove, Edgar-Allen-Shitpoest: - - rscadd: CC has started to hire security cadets now! - Tastyfish: - - bugfix: A few clothing items work better with digi characters again. -2022-11-17: + Fikou: + - qol: giant chains now go above mobs + - bugfix: Hilbert Research Facility tram buttons work now. + - qol: Adds support for html in lore terminals, and makes Hilbert Research Facility + emails use them. + - rscadd: 'New Station Trait: Cybernetic Revolution' + - rscadd: Body Purist Quirk GoldenAlpharex: + - bugfix: Bubbles no longer re-appear when you change z-levels after getting cleaned. + Now they leave for good! - bugfix: Plant-based cells will no longer show an error sprite if the plant it's made out of has its sprite located in a different file than all of the other 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 it possible to grow arms and legs out of the limb grower once more, giving sense back to the machine's name. + Jacquerel: + - bugfix: Lobstrosity Rush Glands now correctly apply their action cooldown when + they trigger from low health. + Jolly: + - qol: On Icebox, the air supply pipes leading into the court room no longer run + under a window. You're welcome atmos techs. Kapu420: - bugfix: makes masks not render when something is supposed to obscure them + MTandi: + - bugfix: Cleanbots properly prioritize adjacent trash + - qol: Cleanbots now clean floor under the tables + - qol: Cleanbots now clean more types of trash + Rhials: + - spellcheck: the Organic Space Suit purchase text now informs the buyer that it + regulates oxygen needs automatically. + - bugfix: togglebuildmode now properly logs when given to other players. + Sealed101: + - bugfix: fixed megafauna crusher kills and crusher achievements depending on megafauna + having crusher loot. Legion Crusher should now be obtainable as a result. ShizCalev: - - bugfix: Fixed anomalies not spawning when invoking the apocalypse rune - SkyratBot: + - bugfix: Microwaves no longer shit out their upgraded parts when cooking stuff. + TiviPlus: + - bugfix: Fixes certain mech objects not attacking in combat mode + - bugfix: fixed mecha components not taking damage from animals and xenos + VexingRaven: + - bugfix: Soul Scythes can no longer phase through the floor into Centcom. + axietheaxolotl: + - rscadd: Brand-new RD labcoat and beret. Along with a pair of black gloves and + a set of jackboots. + - imageadd: Resprites RD turtleneck/skirtleneck. + carshalash: + - imageadd: Sprites of the grasshopper, martini and alexander amaretto have been + touched up. + san7890: + - admin: Whenever a simple_animal is forced to speak via handle_automated_speech, + their "FORCED" variable in logs should appropriately represent the proc it was + called from- instead of being "poly" for whatever reason. - admin: '"adminmoreinfo", or the read-out of a mob that you can get when you hit the (?) button next to the name of a given mob has been cleaned up a bit to make the data-at-a-glance much more presentable.' - - bugfix: Made clown and mime survival boxes contain the correct internals tank - for plasmamen. - - bugfix: Fixed disposals pipes qdel-ing their contents when their integrity hits - zero. - - bugfix: Clown PDA virus disk can once again be installed in machines, computers, - and airlocks. - bugfix: You can no longer fold a glass pickle jar into cardboard. It will also no longer recycle into cardboard as well. + tattle: + - admin: death details of keyless mobs (like xenobio monkeys) are now omitted from + investigate deaths + tattle and triplezeta: + - rscadd: fire blossoms from far off worlds have started blooming on lavaland + tattle, nefarious6th: + - imageadd: updated a bunch of plant sprites + timothymtorres: + - bugfix: Fix pacifists being able to slice necks +2022-11-17: + 1393F: + - bugfix: lesser dragon form can now spit fire again + Fikou, sprites by Halcyon: + - refactor: fire axe cabinets support items that aren't fire axes + - balance: mechs no longer eject you when you die in them + - rscadd: Adds a giant crowbar to robotics, it can break open mechs to eject their + pilots. + GoblinBackwards: + - rscdel: Nuke missing the station no longer locks down the shuttle + JohnFulpWillard: + - balance: Tablets now use regular cells instead of computer cells. + - balance: Tablets no longer need a power cell component to hold power cells. + - bugfix: Clown PDA virus disk can once again be installed in machines, computers, + and airlocks. + KathrinBailey: + - rscadd: Banana and strawberry milkshakes! Made by juicing berries and bananas + respectively, with ice and cream. + LT3: + - rscadd: A tram collision counter has been added, hopefully encouraging employees + to be more careful. Don't become a statistic! + - qol: Tram destination sign is expanded and now properly says Central and Not In + Service. + - qol: Tram doors now open faster on arrival and mid travel, so you don't have to + wait, and can also make a daring high speed escape from a tram in motion. + - bugfix: Improved tram door logic so they don't end up open/closed at the wrong + place. + - bugfix: Tram doors are now their own subtype, it was backwards for some reason. + - bugfix: Tram doors while idle at a station can only be interacted with by Engineering + staff. + - rscadd: Tram controls are now a responsive touchscreen. + - rscadd: Tram crossings have their own holobarrier instead of using the generic + atmos fire barrier. + - rscadd: Tram now has a new set of doors in shiny titanium glass. + - rscadd: Tram is now powered by linear induction motors. + - bugfix: Deltastation's EVA windoor for magboots are no longer tram doors. + Melbert: + - balance: Attacking a shocked door with an item that isn't conductive will not + shock you. + - balance: Attacking a shocked grille with any item that isn't conductive (not just + glass shards) will not shock you. + - balance: Attacking grilles with items no longer leaves behind a fingerprint on + the grille (?). + - balance: Fire axe is now conductive. + - qol: Successfully fending off a blob now has a cross station news report again. + More pressing reports will take priority over it, though. + - qol: Successfully killing a wizard (and all of their apprentices) now has a cross + station news report again. + - qol: If more than half of a cultist team manages to escape on the shuttle (rather + than summoning Nar'sie), they will send a unique cross station news report. + This is still a loss, by the way. Summon Nar'sie! + - qol: Nuclear Operatives successfully nuking the station now has its unique cross + station news report again, and no longer uses the generic "The station was nuked" + report. + - qol: Nuking the station to stop a blob infection now has a unique cross station + news report again. Good luck convincing admins to allow this. + - qol: Cult ghosts from "Spirit Realm" no longer persist on the cult's team after + being desummoned, meaning they will not show up on roundend report. + - qol: Heads of staff will now always show up on revolution roundend report - even + if their body was fully destroyed. + ShizCalev: + - bugfix: Fixed anomalies not spawning when invoking the apocalypse rune + etherware-novice: + - rscadd: New radio uplink! Simply speak your codeword into the :d channel to unlock + it + - code_imp: new COMSIG_RADIO_NEW_MESSAGE signal + flowercuco: + - bugfix: Boxcutter is only the knife tool when it is active + - bugfix: Switchblade is now a knife tool when it is active - rscadd: the punching bag, bench press, and chest press are all able to be crafted and unanchored. - rscadd: crafting recipes for the above - qol: changed a chat message into a balloon alert - qol: adds screentips to equipment (thanks for suggesting i do this mothblocks!) - - spellcheck: the Organic Space Suit purchase text now informs the buyer that it - regulates oxygen needs automatically. + lizardqueenlexi: + - bugfix: Made clown and mime survival boxes contain the correct internals tank + for plasmamen. + san7890: - bugfix: Dead Black Space Rabbits should now properly have a sprite. - - bugfix: Fix pacifists being able to slice necks - - bugfix: Boxcutter is only the knife tool when it is active - - bugfix: Switchblade is now a knife tool when it is active + skylord-a52: - refactor: defines a new global proc, pick_weight_recursive() - code_imp: languages can weight syllables, and galactic common's definition is easier to look at - - qol: giant chains now go above mobs - - bugfix: Microwaves no longer shit out their upgraded parts when cooking stuff. - - bugfix: togglebuildmode now properly logs when given to other players. - - balance: Tablets now use regular cells instead of computer cells. - - balance: Tablets no longer need a power cell component to hold power cells. - - admin: Whenever a simple_animal is forced to speak via handle_automated_speech, - their "FORCED" variable in logs should appropriately represent the proc it was - called from- instead of being "poly" for whatever reason. - VexingRaven: - - bugfix: Soul Scythes can no longer phase through the floor into Centcom. tattle: - bugfix: mimes no longer swear when using the *swear emote - - admin: death details of keyless mobs (like xenobio monkeys) are now omitted from - investigate deaths -2022-11-25: - Cenrus, ported by Hardly: - - rscadd: Added *snap emote - GoldenAlpharex: - - bugfix: Modular computers will now no longer all be called "processing unit", - and will all have their own unique names once again. + timothymtorres: + - bugfix: Fix snow legions not having plasma lava and snowstorm immunity + - qol: Bedsheets now have context screentips and will cover up mobs if they are + attacked and lying down. Bedsheet can also be rotated with AltClick. + - bugfix: Fix rotation and offsets to work properly on mobs, nuke disk, plushies, + and bedsheets when placing something on a bed. + zxaber: + - bugfix: Fixed disposals pipes qdel-ing their contents when their integrity hits + zero. +2022-11-18: + 1bw0kopy: + - bugfix: Fix emberfall sound looping forever + Fikou: + - bugfix: fixes hilbert's hotel tram + JohnFulpWillard: + - bugfix: Ruins blacklisted from icebox shouldn't also blacklist it from lavaland, + and vice versa. + - bugfix: Syndicate Cyborgs no longer have the PDA messaging app. + Jolly: + - qol: Library Consoles and Book Management Consoles should no longer have their + keyboards hanging over the edge of tables. + - bugfix: On most station maps, crew can now properly see the computer monitors + for library consoles and the like. We don't know how you guys saw the screens + before, but you did. Good on you, I suppose? + Melbert: + - refactor: Fully heal can be passed a series of flags. As a result, some things + which previously did a full heal might heal slightly less, or some things which + did partial full heals might do slightly more. + - bugfix: Adminordrazine will no longer completely break every facet of a person + - admin: Ahealing a changeling will refill all of their chems. + NamelessFairy: + - bugfix: Roundstart PDAs can once again be used by people with chunky fingers. + Paxilmaniac: + - rscadd: A variety of items, mainly tools, around the station might hurt if they + fall on your head, remember to wear your hardhat and to avoid standing under + large red X marks on the ground with a piano hanging above them. + Simplehorror: + - spellcheck: Fixed a spelling error in some fluff + Striders13: + - rscadd: Pubby whiteship replaced with a new one. + antropod: + - bugfix: Containers visually update after crafting. + distributivgesetz: + - spellcheck: Corrected a miswording in the power monitor UI. + etherware-novice: + - bugfix: flick_overlay is an atom proc + - bugfix: bluespace light replacer displays icon correctly + - bugfix: fresh laundry mood is functional again + - code_imp: new component for controlling wearables granting mood + mc-oofert: + - bugfix: You can no longer deconstruct the chess pieces or cut the trees in the + holodeck for free mats + - bugfix: Raw dimensional cores can now be refined properly + moocowswag: + - rscadd: Cryokinesis, Shocktouch, Chameleon, and Webbing mutations now have a higher + potential + - balance: Cryokinesis and Shock touch appear to be weaker and more unstable by + default + timothymtorres: + - code_imp: Move plasma lava turf code to be in lava.dm file instead of snowdin + mission code +2022-11-19: + ATHATH: + - balance: The damage modsuit bombs do to objects has been reduced from 15 damage + to 12, to match the damage they deal to non-hostile mobs. + - bugfix: Cans of monkey energy now have enough space to properly hold the quantity + of the monkey energy reagent they spawn with. + Iamgoofball: + - balance: You can no longer use batons if you have chunky fingers. + JohnFulpWillard: + - bugfix: Abductors can now use their batons. + MTandi: + - bugfix: fixed bamboo floor tile in-hand icons not being used + - imageadd: added tatami of 3 types to the bamboo floor variants + Sealed101, Sheets for legion trophy (from a previous Legion desoul): + - imageadd: 'new sprites for Kinetic Crusher trophies for the following mobs: legion, + goliath, all three watchers, fire drake/ice whelp, wendigo, polar bear and polar + wolf' + Time-Green: + - qol: you can look behind shipping containers, ratvars wreck, through the necropolis + gate and behind the big bones + Tonriam: + - spellcheck: The pAI toggle button to quickly display the Crew Manifest works again. + axietheaxolotl: + - bugfix: The RD coat is no longer incorrectly togglable, and lack of "fill-in" + on turtleneck handholes. + etherware-novice: + - bugfix: radio uplink now works, moved to .z because .d is reserved + lizardqueenlexi: + - rscdel: Removed the useless "plasmaburnt" trait. + - bugfix: Restored a broken interaction with plasma rivers that slowly transforms + you into a plasmaman. + mc-oofert: + - rscadd: Added two new whiteships, the "Personal Transit Shuttle" and the "Obelisk" + twilightwanderer: + - bugfix: Fix crash of TGUI fax panel when there is no fax in the network + - admin: Adding the ability to load the configuration of custom maps +2022-11-20: + 1bw0kopy: + - bugfix: Fix being unable to block embeds + Ebb-Real: + - bugfix: Tape pieces have the correct examine tip. + - bugfix: Applying tape pieces by using it on someone will now actually warn them. + MTandi: + - qol: new seed extractor UI + Riggle: + - qol: Imaginary friends now have runechat, typing indicators and emotes! + - qol: Imaginary friends can point and spin + - bugfix: Fixed a bug with imaginary friends where ghosts would stay after aghosting + - refactor: Imaginary friend code massively improved + - refactor: Imaginary friends now support multiple friends at the same time! + - admin: Imaginary friends no longer bypass filters + TiviPlus: + - refactor: Added a particle editor to VV dropdown which can be used by coders and + admins to edit particle values on the fly easily. + san7890: + - bugfix: Canned Laughter, T-Borg's Tonic Water, and Soda Water cans should all + come with the expected marketed 50 units of goodness, rather than cheaping out + on materials for only 30 units of can volume. +2022-11-21: + A.C.M.O.: + - rscdel: Removed the Tongue Tied quirk. The tongue can still be found and used + in-game. + - refactor: Refactored Tongue Tied's tongue to use the Sign Language and Mute traits. + - rscadd: Added Sign Language innate action. Granted by book or quirk. + - rscadd: Added the Galactic Common Sign Language book as rare maint and space loot. + - rscadd: Added the Signer quirk, which teaches you sign language in exchange for + 4 quirk points. + - rscadd: Added the Mute quirk, which grants you 4 quirk points in exchange for + your voice. + - bugfix: Fixed sign language say_yell verb, which allows you to emphatically sign. + Addust: + - bugfix: your local space explorer has removed the locks from all kilo-class mining + vessel mining airlock bolt control panels. please report any surviving instances + to central command so said space explorer can be dispatched to do the same exact + thing. + Agameofscones: + - imageadd: Resprited rice, sugar, and flour sacks + Fikou: + - bugfix: fixes using body purist with quadruple amputee + Iamgoofball: + - balance: Hotkey-based inventory management now applies the click cooldown to prevent + it from being abusable in combat scenarios. + JohnFulpWillard: + - bugfix: Research servers now only show servers connected to their techweb. + Melbert: + - bugfix: Fullheals heal organ damage and oxy again. + Striders13: + - bugfix: fixed nightmare brains being invisible + ZephyrTFA: + - bugfix: Airlocks will no longer 'deny' entry when bumped while depowered + - bugfix: rcds will now prioritize completing a girder over making a new wall on + a turf + - bugfix: Vending machines will no longer crush you through windows! +2022-11-22: + A.C.M.O.: + - bugfix: Fixed a bug that caused the Signer quirk to stop working as expected when + used with the Mute quirk. + JohnFulpWillard: + - bugfix: Icebox's blacklisted ruins works again. + - balance: All modular computers now only have one ID slot, and cannot be upgraded. + - qol: The HoP's access application now only has one app, logging in will directly + modify the ID that's in it, making it less confusing to swap back and forth. LT3: - - bugfix: Tram signs glow instead of being harsh blocky. - - rscadd: Engineers now have expanded airlock access during orange alert for responding - to emergencies. - - rscadd: New lights added to airlocks indicating engineers have expanded access - during orange alert. + - rscadd: 'New random event added: Tram Malfunction' + LemonInTheDark: + - bugfix: Mining walls won't have fucked lighting anymore + Melbert: + - admin: AI uploads constructed midround will now give an admin message and log + to silicon log + OrionTheFox: + - rscdel: NT has decided to begin a Recycling initiative, asking crew to please + stop throwing their bowls away in maintenance. You should only find trash and + grime from now on! + Profakos: + - refactor: refactored trophy cases, to be more user friendly + - admin: created a trophy managment admin panel + Rhials: + - spellcheck: Adds spread text to some diseases that lacked it. + RikuTheKiller: + - rscadd: Added a reagent injector component and BCI manipulators to all circuit + labs. (+ install detector component) + Time-Green: + - bugfix: Surgically removing wings during flight no longer grants infinite flight + Vishenka0704: + - rscadd: A way to send faxes to CentCom/Syndicate + - admin: New fax panel(with stamps!!!) + ZephyrTFA: + - bugfix: shoving someone away from you correctly breaks your grab on them + - bugfix: You can slap tables with right click again + disappointedButNotSuprised: + - rscadd: After a massive success of the Modello 3 series, Piccionaia Home Appliances + rolls out a completely new coffeemaker model and renovates the meta station + cafe for free in a promotional campaign! + - rscadd: Syrup bottles, condiment displays, and more, to make the spess coffee + experience even better + etherware-novice: + - rscadd: Re-adds legacy job ringtones (clown, mime, jani, lawyer, science, chaplain) + - refactor: update_ringtone was modifed to accept strings, moving the old functionality + to update_ringtone_pref + - rscadd: radios have overlays for showing broadcasting settings + - rscadd: You can now kickflip on skateboards. + lizardqueenlexi: + - spellcheck: Made "free objective" text consistent. +2022-11-23: + Fikou: + - balance: Clothing armor values stack multiplicatively rather than additively. + Guillaume Prata: + - bugfix: You can no longer repair wooden bucklers and roman shields by slapping + them with a titanium sheet. + JohnFulpWillard: + - bugfix: Experisci handlers no longer show all servers as being on the same techweb + if they aren't. + - bugfix: RnD consoles no longer bluescreen if they aren't connected to a techweb, + instead it will give an error message. + - balance: Experisci handlers no longer show the location of RnD servers. + - qol: The chat client is now listed under 'Crew' instead of 'Misc' in the store. + - qol: The chat client now allows anyone to use the ping feature, as long as they + aren't server muted. + - qol: The chat client's messaging system now shows the latest messages on top, + rather than bottom. No more scrolling! + - qol: The chat client now has a ping spam-prevention feature. + - bugfix: Techfabs now automatically update to researched designs again. + LemonInTheDark: + - bugfix: Bots will now "notice" you if you're standing right next to them + - bugfix: Bot paths will now draw above things like pipes, rather then below them + - refactor: Changed how pathfinding paths get generated + - refactor: Made pathfinding and bot searching significantly faster + MTandi: + - refactor: biogenerator UI revamped + - qol: biogenerator no longer requires beaker for materials, monkey cubes and nori + - balance: biogenerator accepts all food, not just plants + - balance: biogenerator treats all nutriment subtypes as nutriments (vitamins, protein, + etc.) + - balance: biogenerator product prices doubled + - balance: biogenerator biomass storage is limited depending on the level of matter + bins + - balance: cowboy boots recipe moved from crafting to leather recipes + - balance: leather clothing & belt recipes moved from biogenerator to leather recipes + - balance: rice hat recipe moved from biogenerator to bamboo recipes + - balance: biogenerator now outputs rolling paper sheets instead of a pack + - rscadd: biogenerator can now print paper + - imageadd: biogenerator icons now use overlays, have emissive layer and indicate + the biomass volume + - rscdel: Removed Charlie station corridor between kitchen and botany + - rscadd: More random loot spawners on Charlie station + - bugfix: biogenerator active power usage fix + Melbert: + - rscadd: Added five new heretic spells, one for each path. They come after the + Ritual of Knowledge. + - rscadd: Cone of Cold, for Void heretics. Shoots out a freezing chill in a cone + which deal damage and freezes. + - rscadd: Flesh Surgery for Flesh heretics. A touch spell which can either heal + minions or be used on mobs to extract organs without surgery. + - rscadd: Volcano Blast for Ash heretics. A beam spell, like Tesla Blast, which + fires out a beam of fire that bounces between people. + - rscadd: Realignment for Blade heretics. Fleshmend, but for stuns and stamina damage. + Makes you a pacifist, but rapidly regenerates stamina. + - rscadd: Rust Construction for Rust heretics. Places a wall of rust on the target + rusted flooring. Can even be used to ascend z-levels! + - balance: Nerfed the cooldown of Cleave slightly, buffed the cooldown of Lesser + Cleave slightly. + - balance: Slightly more influences will spawn on the station per heretic. + - balance: Heretics require an additional sacrifice on average for ascension, but + are given a fifth sacrifice target (randomly selected). + - balance: Being sacrificed by a heretic now gives you a permanent phobia of spooky + things, including heretic mobs and items. + - balance: Heretic ghouls now take reduced stamina damage, depending on how small + their health pool is. + - balance: Using Jaunts will conceal your runechat for their duration. + - balance: Spells which require emoting (Mime spells) require your hands not be + blocked to use. + - refactor: Touch Spells were improved a bit. Added some new template spells - Charged + spells, and Charged beam spells. + - bugfix: Fixes a runtime from losing heretic. + - bugfix: Soulstone names should no longer become bizarre after repeated use. + NamelessFairy: + - bugfix: Delta's Port Bow Solar is now correctly labelled. + Profakos: + - refactor: mech construction balloon messages are now actually stored in the construction + steps, instead of being tracked separately. + - bugfix: Items used in the honk mech construction are now properly deleted/moved + inside the mech + - qol: added a mail sorting map helper, to allow mappers to create disposal networks + faster + - bugfix: fixes several non working disposal mail targets that never received their + packages + RikuTheKiller: + - balance: Nooartrium metabolizes much slower now. + - bugfix: You can now get 100% pure inverse reagents. + - bugfix: Metabolization works for reagents that are meant to metabolize while your + liver is failing. + - bugfix: Higadrite, cordiolis hepatico and herignis work properly. + - balance: Herignis is more potent and has an overdose threshold of 25u. + Ryll/Shaps: + - rscadd: Added the Marksman Revolver, for admins to spawn. + SeigaSeiga: + - bugfix: Plague Doctor Hat no longer makes the Plague Doctor Mask (and everything + else on your head) invisible. + SgtHunk: + - rscadd: A gibber, upon creation, might be a meat grinder. This does nothing meaningful, + but at least one of your finger bones will still be intact. + SkeletalElite: + - bugfix: Riot darts no longer do damage with no pen inserted if recovered after + being fired while modified to accept pens. + Striders13: + - bugfix: fixed tramstation's AI sat solars not working + SyncIt21: + - qol: Entering reagent names is much faster with zero errors + - bugfix: You can enter new temp & ph values + Y0SH1M4S73R: + - admin: Admins are unable to invoke functions from external libraries using callbacks. + ZephyrTFA: + - bugfix: two handed items will no longer leave a ghost at your feet when inserted + into something + Zonespace27: + - admin: ERTs can now have a custom shuttle that they can spawn on, on a toggle + while creating said ERT. + carshalash: + - bugfix: Updates the Ice cabin kitchen to be more modern. An oven and griddle have + been added. + etherware-novice: + - bugfix: costume hat descriptions + flowercuco: + - rscadd: you can fax flatbreads and slices of bread now, changed all flatbreads + into children of pizza/flatbread to allow for this + - qol: adds screentips to various pizzabox action (stacking, when you can take pizzas + out, pizza box bomb stuff) + - qol: adds a way to add screentips directly into processable food via the add element + processable proc + - refactor: pizza crates work the same but more clearly and more variable + lizardqueenlexi: + - refactor: Removed mutant_bodyparts.dmi and distributed its sprites in a more sensible + and granular manner. + necromanceranne: + - balance: Meteorslugs are now miniature cannonballs. They also need more gunpowder + and rum to be constructed. + timothymtorres: + - bugfix: Fix reagent containers playing attack animation when transferring reagents + to mob bucket + - bugfix: Fix syringes and droppers not updating the appearance of target when used + - qol: Regular mop bucket has the same RMB hotkey as janicart for wetting mop + - refactor: Refactor janicart to be subtype of mop bucket +2022-11-24: + 1bw0kopy: + - bugfix: Fix traitor objectives failing to complete + Fikou: + - qol: you get access to the next storage ui row 1 item earlier + Ghommie: + - rscadd: Added two sets of coordinates to the checkers and chess modules for the + holodeck. + GoldenAlpharex: + - rscadd: Added a Rescue Hook, that will allow the fishing rod it's attached onto + to become a lot more proficient at recovering corpses from chasms, at the expense + of making it unusable for more traditional fishing. It isn't entirely lobstrosity-proof, + however... + - balance: The magnetic hook can no longer fish out corpses from chasms, but will + fish out items much more efficiently than any other hooks, while also being + much less attractive to lobstrosities. Some still fall for it regardless, however. + - spellcheck: Fixed the capitalization and punctuation in the description of multiple + fishing accessories. + - code_imp: Improved the code for fishing weights, to allow for different hooks + to have some more noticeable results on the weights without having to add to + an already massive proc. + Jacquerel: + - refactor: Cayenne's ability to participate in Nuclear Operations is now a component + which any mob can use. + - rscadd: All Space Carp will now start regenerating health after 6 seconds of not + taking any damage, until they're back to full health. This behaviour was previously + unique to mega carp. + - qol: You can see what kind of spell a magicarp will cast by hovering your mouse + over it. + - imageadd: Megacarp now have a random colour. + - imagedel: Magicarp are now colour coded based on their spell, or change randomly + if they're Chaos Magicarp. + JohnFulpWillard: + - admin: Researching nodes and bepis unlocking stuff is now logged in research. + LemonInTheDark: + - bugfix: You can now see antag hud icons AND see through walls. WOW Melbert: - bugfix: Fixed an exploit involving igniters attached to themselves. Assembly holders are now limited to 12 assemblies maximum, and you cannot attach multiple igniters @@ -473,13 +1167,40 @@ - bugfix: Fixes a NTPay exploit. - imageadd: Resprited rice, sugar, and flour sacks - bugfix: Curd cheese can be microwaved again into cheese curds + Roryl-c: - bugfix: Flypeople gain a comparable amount of nutrients from vomited food to other species (~70%, up from ~30%) - bugfix: Flypeople no longer vomit after drinking fluids - bugfix: Flypeople no longer vomit all contents of their stomach on spawn - code_imp: Stomachs can now react to foods entering them by overriding the `after_eat` proc - - admin: Researching nodes and bepis unlocking stuff is now logged in research. + disappointedButNotSuprised: + - bugfix: Curd cheese can be microwaved again into cheese curds + etherware-novice: + - qol: slight positive moodlets use a different color to slight negative ones + flowercuco: + - qol: added screentips to customizable food + - qol: added more balloon alerts to custommizable food + private-tristan: + - bugfix: icebox kitchen maints is now correctly wired +2022-11-25: + Cenrus, ported by Hardly: + - rscadd: Added *snap emote + CocaColaTastesGood: + - bugfix: Fixes a NTPay exploit. + GoldenAlpharex: + - bugfix: Modular computers will now no longer all be called "processing unit", + and will all have their own unique names once again. + Jacquerel: + - bugfix: A revived basic mob will stand up again rather than inching around as + a living corpse. + LT3: + - bugfix: Tram signs glow instead of being harsh blocky. + PositiveEntropy: + - imageadd: Updates the Military, Bomber and Letterman Jackets + - bugfix: Fixes the centcom hat, cap and head intern cap, which were using the old + sprites. + SyncIt21: - rscadd: checks while inserting stack materials into an RPED and their amounts - code_imp: sorting of RPED part components to sort stack materials by their ratings - rscdel: 'old way of displaying parts when clicking on an machine frame with it @@ -498,6 +1219,58 @@ - bugfix: Delta's Port Bow Solar is now correctly labelled. - bugfix: Wall mounted vendors can no longer receive brand intelligence. - bugfix: limits how much you get alerted by icebox storms + ZephyrTFA: + - bugfix: Strange Reagent is once again Strange! (it works at all) + flowercuco: + - rscadd: you can saw bread with a saw into bread slices + - qol: added screentip verbs to a bunch of food files + - code_imp: bread and cake now have slice types and all only have one call on the + processable.dm proc + nevimer: + - rscadd: The Supermatter crystal will now emit rays of light, varying on it's power + level and situation. + - code_imp: improves a formatting and comment spelling + - bugfix: The Causality field now actually shows up! +2022-11-26: + Fikou: + - balance: premium internals station trait now increases the slots of your internals + box + GoblinBackwards: + - bugfix: Fixed being unable to open the necropolis gate when standing behind it + - bugfix: Fixed being able to move through floors and get to centcomm when moving + up/down while inside mechs and similar movable objects. + - bugfix: fixed armblades and digitigrade legs not showing up in the limb grower + GoldenAlpharex: + - bugfix: PDAs (and by extension, modular computers) now can see the ID section + at the top of their main screen again, which means that PDAs can have IDs imprinted + on them again. + - bugfix: Fixes the ID section not displaying anything when there wasn't any ID + inserted in it, even if it had an imprinted name and job. + - bugfix: Fixes the "Eject ID" and "Imprint ID" buttons not being disabled when + there's no ID in the computer/PDA. + - bugfix: There's no longer any empty () by in the "ID Name" and "Assignment" fields + of the ID section of computers when there's no ID in them. + Jacquerel: + - bugfix: Rabbits don't suddenly become more dense when killed than they were in + life. + JohnFulpWillard: + - bugfix: Wirecarp now lets you give people mass PDA perms again. + LT3: + - imageadd: New railing pillar tram crossing signals. + - qol: Vending machines next to the tram are now against the wall. + - bugfix: Tramstation floor decals no longer guide you to walk into the vending + machines. + - rscadd: The tram stations now have no-slip hazard floor tiles so you don't accidentally + slip and get smacked. Feel free to still run into it anyways, medbay has a counter + now so they'll know. + LemonInTheDark: + - bugfix: Lavaland fauna will no longer be able to mine + - rscadd: Adds a new rendering option to the gameplay preferences. You can now limit + the rendering intensity of multiz levels. This will make things look a bit worse, + but run a LOT better. Try it out if your machine chokes on icebox or somethin. + MTandi: + - bugfix: biogenerator now properly gives non-stackable items + - refactor: biogenerator backend optimization - rscadd: You can stick IV drip into anything that is a reagent container (injection only) - qol: IV drip transfer rate can be zeroed to stop the flow without removing the @@ -532,6 +1305,10 @@ Tastyfish: - qol: All skyrat leather belt and bandolier recipes are now in the belts category, as they should be. + Rhials: + - bugfix: you get your keys upon removing them from a car now! + - balance: the clown car now crashes upon ramming into a deer, like god intended. + - bugfix: Wall mounted vendors can no longer receive brand intelligence. VexingRaven: - bugfix: Ashwalker Eggs and Battlecruiser spawners no longer give you a warning every time you open the spawn menu if you've already spawned as that role once. @@ -611,6 +1388,32 @@ - imageadd: Added missing coin projectile sprite for the marksman revolver SkyratBot: - bugfix: Fixed being unable to open the necropolis gate when standing behind it + etherware-novice: + - bugfix: limits how much you get alerted by icebox storms + theOOZ: + - balance: Paramedics get to have mining station access +2022-11-27: + ATHATH: + - bugfix: The shocks from the spell packets spell are no longer blocked by insulated + gloves. + Jacquerel: + - bugfix: Sheep are no longer immune to weaponry. + LT3: + - spellcheck: Tram Malfunction event now successfully announces 'successfully.' + RaveRadbury: + - balance: Obsessed has been bumped up to a Deep-Rooted Brain Trauma + - balance: Mind Restoration can't remove deep-rooted traumas, making Obsessed unremovable + by virusses + Tattle: + - admin: removed message_admins message for tram malfunction failing to run on maps + that aren't tram + flowercuco: + - qol: pdas have a wrench deconstruct screentip + - bugfix: wrenching a pda no longer destroys all contents inside + - bugfix: roundstart empty mugs now appear to be empty + - bugfix: nanotrasen mug no longer becomes normal mug after you drink from it +2022-11-28: + RikuTheKiller: - bugfix: Nooartrium doesn't blind you anymore and keeps you conscious regardless of oxyloss. - bugfix: Being immune to hardcrit makes you able to hear while you should be in @@ -619,6 +1422,9 @@ - bugfix: nanotrasen mug no longer becomes normal mug after you drink from it - qol: pdas have a wrench deconstruct screentip - bugfix: wrenching a pda no longer destroys all contents inside + Ryll/Shaps: + - imageadd: Added missing coin projectile sprite for the marksman revolver + necromanceranne: - balance: 'Splits the nuclear operative combat medical kit into two versions: basic and premium.' - balance: Basic contains additional amounts of basic c2 chem patches, some spare @@ -648,6 +1454,11 @@ unit0016: - bugfix: Skyrat's ID trims are now recolorable, as they are upstream. XOXO. 2022-11-29: + supergrog2: + - bugfix: fixes grilles dropping stack of 0 iron rods +2022-11-29: + Auris456852: + - bugfix: Makes Miner's Salve HUD screw not permanent. Common fucking sense: - bugfix: The changes to Mafia and holopad say prefixes was reverted. - spellcheck: Mafia changeling say prefix has no longer been changed to .1, and @@ -690,6 +1501,22 @@ - spellcheck: removed a reference to radiation collectors in tip of the round - refactor: Moves wall smashing out of simple mob code and into an element we can reuse for basic mobs later + Ghommie: + - bugfix: pAIs and lightgeists can now correctly climb ladders. + - bugfix: fixed a small issue with the radial menu for ladders that caused the user + to travel down when abruptly closed. + Jacquerel: + - refactor: Moves wall smashing out of simple mob code and into an element we can + reuse for basic mobs later + Melbert: + - code_imp: Cuts some uses of allowed list as a typecache. Allowed lists are not + typecaches, don't make them typecaches + - bugfix: Fixes dragon despawn deleting all the people they consumed + RikuTheKiller: + - bugfix: You can now make acetaldehyde without making pentaerythritol. + Thunder12345: + - bugfix: TTV bombs can no longer be concealed inside food + epicgamer545: - admin: Nanotrashen made some top-of-the-line changes to their top-of-the-line prison by walling off their equipment area and removing some spare guns they somehow left on the tables. We also stole the security computers, so people @@ -698,6 +1525,30 @@ - admin: removed message_admins message for tram malfunction failing to run on maps that aren't tram 2022-11-30: + etherware-novice: + - qol: quantum keycards light up with the department theyre in (or grey as a fallback) + - qol: quantum keycards are custom renamable w/ pen, to help keep em organized + private-tristan: + - spellcheck: removed a reference to radiation collectors in tip of the round + - qol: in metastation engineering, the plumbing water tank has been replaced with + a proper water tank, and shower water is now plumbed in from the engine maintenance + san7890: + - qol: The photocopier will now tell you when it's not able to find an ID to charge + on your person. +2022-11-30: + AnturK: + - bugfix: normal toolboxes can't hold fishing rods anymore + Capybara Holly: + - refactor: Datum AI can now switch to different movement datums in their behavior. + - refactor: Allows datum AI to create new plans while a plan is still executing + Capybara holly: + - bugfix: After rigorous training excercises monkeys now understand how to defend + themselves from vile greytiders again + Fikou, sprites from Halcyon, some old code from Basilman and Armhulen.: + - refactor: Honorbound and Burdened mutations are brain traumas now. + - rscadd: Psykers. Become a psyker through the path of the burdened, or a genetic + breakdown. + - rscadd: Echolocation Component. GoldenAlpharex: - refactor: Went through and refactored a lot of the old code of the biogenerator, and made multiple improvements to its logic, which should hopefully make it @@ -737,3 +1588,42 @@ shuttle is heading towards the station no longer breaks space-time. Zonespace27: - rscdel: Abductors no longer have an objective to abduct a certain amount of people. + MTandi: + - bugfix: IV drip can be zeroed via UI, not just alt-clicking + Melbert: + - bugfix: VVing an edible comp's food flags pulls up the bitfield ui correctly + Mothblocks: + - bugfix: Fixed reactions being broken in the EXPERIMENTOR or something I don't + actually know what this thing does + NamelessFairy: + - rscadd: You can now reinforce plating to protect your department from the troublemakers + upstairs. Station builders might find these useful to put the stations most + secure locations on the lower floors. + - imageadd: added sprites for reinforced plating + - code_imp: RCD proofing has been variablized and can now be applied to any floor + type instead of just reinforced floors. + - bugfix: Rather than having two surgery B's on icebox you get a Surgery North and + a Surgery South + Pickle-Coding: + - bugfix: Fix unnecessary mole scaling with gas turbine gas thermal energy loss + from work done. + - bugfix: The gas turbine no longer creates power from thermal energy it can't take. + Sealed101: + - rscadd: robotics now has access to a mech camera add-on, which installs a security + camera into the mech. bodycam footage from the big leagues! + - qol: cyborg cameras should be more active with updating static when moving (ideally + down from 2.5 seconds to 0.5 between updates), make sure to report any jank + if you happen on some + ShizCalev: + - bugfix: Full mugs no longer appear empty in the map editor. + Striders13: + - bugfix: fixed lizard markings incorrectly displaying when strapped to a guillotine + - code_imp: guillotine's blade drop sound is now a variable + Tralezab code, Azlan + Azarak (Az gaaang) for the organs: + - rscadd: Added the DNA infuser to genetics! Person goes in, corpse goes in, and + they combine! + - rscadd: Try not to turn yourself into a fly, OK? + necromanceranne: + - bugfix: You no longer cut into mechs with wreckages with crowbars, you pry parts + from them. Duh. + - bugfix: Mech material salvage matches their construction materials. diff --git a/html/changelogs/archive/2022-12.yml b/html/changelogs/archive/2022-12.yml index 3c2fdf0a00153..32c6aca023bf4 100644 --- a/html/changelogs/archive/2022-12.yml +++ b/html/changelogs/archive/2022-12.yml @@ -1,115 +1,81 @@ 2022-12-01: - Capybara Holly: - - refactor: Allows datum AI to create new plans while a plan is still executing - Capybara holly: - - bugfix: After rigorous training excercises monkeys now understand how to defend - themselves from vile greytiders again GoldenAlpharex: - refactor: Refactored the way the undertile component works, to allow it to have a bit more granularity as to when it's meant to be covered, but still visible, like for catwalks! - bugfix: Catwalks no longer are affected by ambient occlusion, and now properly feel like actual floor tiles. - SkyratBot: - - bugfix: normal toolboxes can't hold fishing rods anymore - Zenitheevee: - - balance: Smuggler Satchels contraband pool has been rejangled. - Zergspower: - - admin: new laws for silicon to match policy changes -2022-12-02: - Capybara Holly: - - refactor: Datum AI can now switch to different movement datums in their behavior. - GoldenAlpharex: - - bugfix: Cleaning will now once again show bubbles on what's being cleaned! - LT3: - - bugfix: All the tram platform tiles are now actually tram tiles. Melbert: - refactor: Refactored deep fried foods. Deep fried foods are still ""usable"" as their normal item, but are just edible. - qol: Silver Slime stuff can spawn grilled as well as fried. - - code_imp: Cuts some uses of allowed list as a typecache. Allowed lists are not - typecaches, don't make them typecaches - - bugfix: VVing an edible comp's food flags pulls up the bitfield ui correctly - - bugfix: Fixes dragon despawn deleting all the people they consumed - OrionTheFox: - - bugfix: fixed the hi-vis labcoat and secmed labcoat having the wrong blood overlay, - and hospital gowns not properly hiding genitals - - imageadd: in a continued organization effort, all skyrat Labcoat sprites have - been moved to suits/labcoats.dmi files. Please report any relevant issues! - Paxilmaniac: - - rscadd: The tailored jacket now has a shorter variant that doesn't go as far down - as the original does. - ShizCalev: - - bugfix: Full mugs no longer appear empty in the map editor. - SkyratBot: - - bugfix: fixed lizard markings incorrectly displaying when strapped to a guillotine - - code_imp: guillotine's blade drop sound is now a variable + SyncIt21: + - rscadd: plumbing constructor TGUI, just like Rapid Pipe Dispensers + - rscdel: plumbing constructor radials + - code_imp: categories for each item + tralezab: + - bugfix: fixed getting kicked out of your body sometimes when pursuing the carp + mutant + - bugfix: and carp lungs working incorrectly + - qol: better ui explanation on the infuser book + - qol: can drag people into the infuser chamber +2022-12-02: + CapybaraExtravagante: - bugfix: Bots no longer get stuck behind windoors and firedoors when they could go through them in some way. - - rscadd: You can add grenades to food - - rscadd: Grenades explode when accidentally bitten into - - balance: Adding something large to custom food will make it, too, also large - - bugfix: Fixed reactions being broken in the EXPERIMENTOR or something I don't - actually know what this thing does - - bugfix: IV drip can be zeroed via UI, not just alt-clicking - - imageadd: Unique inhands for the ion carbines - - bugfix: Makes sure that the ion carbine has a defined worn sprite. No longer pink! + JohnFulpWillard: - rscadd: Shaft Miner's equipment vendor now orders their equipment through the Cargo shuttle, though you can spend 1.5x the points to express it, making it a Mining version of the Chef's produce console, with a weakened express tax. - - bugfix: TTVs can have an explosive reaction from deepfrying. - - rscadd: You can now reinforce plating to protect your department from the troublemakers - upstairs. Station builders might find these useful to put the stations most - secure locations on the lower floors. - - imageadd: added sprites for reinforced plating - - code_imp: RCD proofing has been variablized and can now be applied to any floor - type instead of just reinforced floors. - - bugfix: You no longer cut into mechs with wreckages with crowbars, you pry parts - from them. Duh. - - bugfix: Mech material salvage matches their construction materials. - - rscadd: 'New Station Trait: Cybernetic Revolution' - - rscadd: Body Purist Quirk - - bugfix: Fix unnecessary mole scaling with gas turbine gas thermal energy loss - from work done. - - bugfix: The gas turbine no longer creates power from thermal energy it can't take. - - bugfix: fixes using body purist with quadruple amputee - - rscadd: radios have overlays for showing broadcasting settings - - rscadd: plumbing constructor TGUI, just like Rapid Pipe Dispensers - - rscdel: plumbing constructor radials - - code_imp: categories for each item - - bugfix: pAIs and lightgeists can now correctly climb ladders. - - bugfix: fixed a small issue with the radial menu for ladders that caused the user - to travel down when abruptly closed. - YakumoChen: - - rscdel: Removed power cell req from megaphones - distributivgesetz: - - qol: The Chief Engineer's BSRPD now has a toggle feature for remote piping. - theOOZ: - - balance: DeForest company imports now features Vey-Medical's medigun upgrade kit. -2022-12-04: - Erol509: - - imageadd: New Digi version for berserker armor - - bugfix: Fixed the Error icon when trying to get SEVA from mining vendor - GuiltyNeko: - - bugfix: The normal meteor wave event has been de-duplicated LT3: - - bugfix: 'Fixed an undefined variable in new tram code making the tram not work - as expected. fix: The tram will now again correctly kill you on impact if the - RNG Gods are not on your side.' - Paxilmaniac: - - qol: There is now once again only one type of 9mm, and one type of 10mm, no more - playing the does this ammo type go in my gun game with one of the several rounds - with the same exact naming scheme. - - balance: Coincidentally, all guns that use a 9mm now use the same ammo, similarly - with 10mm firearms, though the damage of the rounds they fire should be very - similar if not the exact same as it was per gun before this pr. - SkyratBot: + - bugfix: All the tram platform tiles are now actually tram tiles. + Tattle, PestoVerde322: + - imageadd: couches are now grayscale + - code_imp: random tool colours now use defines + YakumoChen: + - bugfix: Fixes a missing tram rail along the tram line + necromanceranne: + - imageadd: Unique inhands for the ion carbines + - bugfix: Makes sure that the ion carbine has a defined worn sprite. No longer pink! + tralezab: + - rscadd: You can add grenades to food + - rscadd: Grenades explode when accidentally bitten into + - balance: Adding something large to custom food will make it, too, also large + - bugfix: TTVs can have an explosive reaction from deepfrying. +2022-12-03: + Hardly3D: - qol: Added griddles and ovens to ruins and away missions such as Deep Storage, Underground Outpost and Beach Biodome. - bugfix: Overhauled beach biodome bar, fixed stools facing the wrong direction, as well as making the bar less boxy. - bugfix: Automated IV drip transfer rate controls now unavailable on injection, since the transfer rate is managed by the plumbing network + JohnFulpWillard: + - rscdel: Tablets are now removed, PDAs are now the base 'tablet'. Silicon and nukie + tablets are now PDAs. + MTandi: + - rscadd: Craftable chemical separator + - qol: barrel works with the plant bag now + - balance: barrel volume increased to 600 units + - bugfix: barrel now properly converts nutriments into wine + - bugfix: added 4% nutriments to sugar cane, to allow rum creation + - refactor: barrel logic and fermentation refactoring + RikuTheKiller: + - balance: Geysers now spawn more often, especially wittel geysers. + Time-Green: + - refactor: Refactors podperson hair. You can now restyle it on any species + - qol: You can restyle podperson hair on the person, their decapitated head or straight + on the hair organ + - code_imp: Restyling is now completely modular, you can make any external organ + easily restylable + - bugfix: Fixes external organ harddel because limbs would keep the reference on + drop_organs + tralezab: + - refactor: Refactored wings, tongues, and some examine messages, hopefully with + minimal effect on actual changes. A few more species have tongues, angel wings + bring the holy trait with them, and wings have new descriptions. should be the + biggest parts of it + vincentiusvin: - bugfix: fixed supermatter rays glowing with an additional yellow ray on special delams. Will only glow blue or purple for tesla and singuloose respectively. - bugfix: got rid of the blue causality box thing from singulo delams. @@ -159,6 +125,25 @@ - bugfix: Fixed a runtime from alien larva processing after they've gibbed their host. SkyratBot: +2022-12-04: + Comxy: + - rscadd: Frogs and cockroaches can now be converted to the regal rats army. + - bugfix: Converted rat do not attack mouses anymore. + - imageadd: New sewer cockroach and trash frog sprites + JohnFulpWillard: + - bugfix: Mining orders will no longer say they charged you credits. + - qol: The cargo console now properly displays the amount of mining points used + to purchase something. + - qol: Mining orders no longer have manifest errors. + MTandi: + - bugfix: Automated IV drip transfer rate controls now unavailable on injection, + since the transfer rate is managed by the plumbing network + Rhials: + - spellcheck: removes a bunch of instances of "unconcious" from the code. + - rscadd: Paperwork! Huge paperwork. Gigantic. You can stamp it and send it to Centcom + via cargo for BIG MONEY. + - rscadd: New shuttle loan event variant -- You get a bunch of paperwork! + - rscadd: Ancient paperwork has appeared in the maintenance tunnels! - admin: new admin verb -- Command Report Footnote. Lets you attach a signed message to the roundstart command report. - admin: new admin verb -- Delay Command Report. Lets you delay the roundstart command @@ -173,6 +158,20 @@ due to that. Hatterhat: - bugfix: health analyzer rmb works again + etherware-novice: + - imageadd: indicator when a pda contains a pai + itseasytosee: + - bugfix: Stamina damage display calculation should be much more sane and reliable + now + - imageadd: Simplified the stamina hud + private-tristan: + - spellcheck: stabilized oil now correctly has you smell like sulfur +2022-12-05: + Guillaume Prata: + - qol: Right clicking a PKA with an empty hand will show a radial menu that lets + you remove modkits one at the time. + KittyNoodle: + - rscadd: You can now cry when in crit LT3: - bugfix: Tram turfs will now correctly show damage instead of reverting to a default icon. @@ -194,6 +193,7 @@ - bugfix: Void Raptor - fixes solar console names 2022-12-07: Melbert: + - bugfix: Fixed a runtime from hovering over stuff like bread with an empty hand. - balance: 'Heretic: Furious Steel''s cooldown has been doubled (30s -> 60s), and abides by antimagic' - balance: 'Heretic: Cleave''s cooldown has increased by 5s, range has been decreased @@ -577,6 +577,8 @@ - code_imp: Stamina no longer affects individual limbs. 2022-12-17: Melbert: + - bugfix: Fixes a runtime when alien larva exploded their host that caused the larva + organ to not be deleted afterwards. - rscadd: Observers can now see what action buttons an observed mob has. No, you can't click them. And no it doesn't show EVERY action. - refactor: Refactored how action button icons are generated. Some actions will @@ -664,196 +666,623 @@ - refactor: The logic of how we well, render things has changed. Make an issue report if anything looks funky, particularly layers. PLEASE USE YOUR EYES - imagedel: non parallax space is now black - - bugfix: RPED part display information - - bugfix: RPED incorrectly exchanging parts with the wrong tier for datum stock - parts - - bugfix: RPED unable to install datum stock parts in incomplete machine frames - - bugfix: RPED unable to exchange parts for newly constructed machines - Tattle: - - bugfix: lockboxes' and wrapped crates' invisibility spell has worn off -2022-12-21: - Guillaume Prata: - - qol: After 3 years of complaints at CentCom's uniform department. Paramedics have - been given a jumpsuit/skirt that can be adjusted around their waist instead - of just folding it's sleeves, making surgery easier for their fellow doctors. - SkyratBot: - - rscadd: The followers of Regal Rats will now respond to simple instructions, if - given by their rightful lord. Except frogs. They're too busy licking themselves - and watching the colours. - - bugfix: When you unwrench a flag, you should now no longer see the big flashy - 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 - 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: - LT3: - - qol: Tramstation medbay treatment center now has a tram collision counter. - Paxilmaniac: - - rscdel: The cockpit on cargo shuttles has been removed, rejoice for you will no - longer have orders mysteriously lost under the chairs. - SkyratBot: - - bugfix: Made the external smartfridge in the Tramstation pharmacy accessible from - inside. - - rscadd: Add space vines prevent solar panels from working (except ones with the - transparent mutation) - - rscadd: Add new space ruin - Cyborg Mothership. All hail the master race! - - rscadd: Added the *hand emote, which you can offer to someone standing up in order - to give them the possibility to grab onto your hand and let you drag them away, - or to someone lying down to help them back up, which always makes everyone involved - a little happier! - - refactor: De-hardcoded and genericized a lot of the offering status effect and - 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 - for Meta, IceBox, and Tram. - - bugfix: Moves virology fridge on nukie base in to a wall - Zergspower: - - bugfix: MetaStation - Removes stray pipe found under the courtroom door - - bugfix: Space Hotel - Mass Driver direction - - bugfix: Void Raptor - Virology lost the wall inside the doorway, sorry no more - extra privacy - - bugfix: Void Raptor - Multiple stray disposals pipes in Cargo/Departures/Arrivals/Security - are now gone - - bugfix: Void Raptor - Missing cargo mailer is now no longer missing - - bugfix: Tram Station - Fixes the stray Disposal pipes in Medbay -2022-12-23: - LovliestPlant: - - bugfix: '[Voidraptor] Resolves the missing christmas tree. Have a merry Spessmass - and a happy new year!' - ShizCalev: - - 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 - 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: - GoldenAlpharex: - - bugfix: Everything that goes on the tram should look a lot less flat now! - Jolly: - - bugfix: The recently added holiday posters will now spawn, if the given (few) - holiday criteria match. - Oxotnak: - - bugfix: fixed name of Featherful moth wings sprite. Now they actually have a sprite! - SkyratBot: - - qol: Improve NtOS notepad - - rscadd: Adds 32 new foods! - - rscadd: You can make vinegar from equal parts water/sugar/wine - - rscadd: Tortillas can now be grilled to make hard-shell tacos, which can be used - to make the new tacos or custom tacos all-together. - - balance: Uncooked rice is now made from mixing 10 units rice/water in any container, - no longer requiring a bowl to do so. Recipes that previously used bowls of rice - now need boiled rice and a bowl, instead. - - code_imp: Roundstart "starting" should be much snappier now - Tattle: - - bugfix: crafted foods are logged in the blackbox once more -2022-12-25: - SkyratBot: - - bugfix: Tinacusiate is now possible to make again. - Tattle: - - bugfix: all of the barstools on the Emergency escape shuttle are equipped with - a seatbelt -2022-12-26: + - bugfix: Fixed a runtime from alien larva processing after they've gibbed their + host. + Mothblocks: + - admin: Renamed "End Round Normally" in Check Antagonists to "Undelay Round End" + Salex08: + - bugfix: fixes being able to stack deepfried bluespace body bags into bluespace + body bag + Striders13: + - qol: Penthrite from luxury pens now gives you a status effect instead of a balloon + alert + timothymtorres: + - rscadd: Add brave bull now makes you fearless and you can ignore phobias while + it's in your system. + - qol: Add roundstart tip to let new doctors now that morgue trays and freezers + prevent organ decay + - code_imp: Renamed organ decay proc to be `toggle_organ_decay` instead of `recursive_organ_check` +2022-12-06: ATHATH: - - bugfix: Pillow smothering now checks to see if the SMOTHEREE has a head, not the - SMOTHERER. - Fat bugs bunny: - - rscadd: Added a glass jaw quirk, that leaves you prone to being knocked out when - hit on the head. - Guillaume Prata, Imaginos16: - - bugfix: You can now adjust medical scrubs for easier surgery on your fellow doctors. - Improvedname: - - bugfix: fixes deltastation vent at brig entrance - Melbert: - - bugfix: Nar'Sie will no longer bring upon the construct apocalypse when they encounter - a chicken after one of the invokers were destroyed - - bugfix: The Singularity should no longer stop gibbing people when whoever created - it was destroyed - - bugfix: Detective Scanner can scan stuff that contains blood again. + - bugfix: Psyker brains that aren't in psyker heads no longer take twice as much + brain damage from that as intended, nor can they suffer complete brain death + due to that. + Hatterhat: + - bugfix: Fixes a typo that meant auxiliary effects from projectiles (.38 rubber + stamina, ebow stamina/knockdown/blur) checked a generally nonexistent armor + value that was defined on a per-/atom level. As a consequence, such auxiliary + effects from projectiles now actually respect the armored equipment of hit targets/limbs/etc. + On living mobs that have armor equipped, anyway. + MTandi: + - bugfix: IV drip now injects only into injectable things + Mothblocks: + - bugfix: Fixed gulag teleporters not containing the correct parts. + Tastyfish: + - bugfix: Lisa no longer uses bluespace when interacting with Ian. + - refactor: A large portion of dog code was re-written; please report any strange + bugs. + Tralezab code, Fikou's map, PigeonVerde and Halcyon for sprites!: + - rscadd: Psyker-gangers are new pirates + - refactor: refactored pirate code so we can add more in the future + necromanceranne: + - bugfix: Prevents the recycler from destroying indestructible objects. + timothymtorres: + - balance: Change liver to not purge toxins instantly for low amounts. Instead the + toxin effect gets skipped while it is metabolized normally, however it still + does liver damage. This fixes bite increments for food, cigarettes, and drinks + where the toxins would purge without building up to harmful levels. + - balance: Change the formula for how toxins effect livers. Livers will be damaged + based on the units of toxin present and their lethality. + - balance: Change alien liver toxin resistance value to be -33% and cybernetic liver + toxin resistance value to be +50% +2022-12-07: + Azlan, Fikou, MTandi: + - imageadd: Void suit and jetpack resprited + - bugfix: Also fixed the issue with all jetpack sprites not updating on the back + Fikou: + - qol: hop has basic cargo access + Hatterhat: + - bugfix: Mining point cards have slightly more readable buttons now, and also can + be reused even after running out of points. + JohnFulpWillard: + - refactor: Modular computers NTnet and applications run on its own subsystem, please + report any new bugs you may find. + - bugfix: You can now order canisters again. + Kylerace: + - bugfix: the atrocinator modsuit module's negative gravity now works again. have + fun on the ceiling + - bugfix: queuing clicks should work correctly now + MTandi: + - qol: Charlie station stores space suits in proper storage + RikuTheKiller: + - bugfix: Ephedrine now rewards you instead of punishing you for making it pure. + Salex08: + - bugfix: fixes a oversight with mining ltsrbt which would allow them to spam buy + crates for very low mining points + - qol: Increases the amount of marker beacons you can buy in a row from 1 to 10 + TheBoondock: + - bugfix: fixed using the changeling tentacle arm via right mouse click holding + people up instead of firing it. Now it will fire like normal + celulamp: + - rscadd: ' Key can now hurt people by stabbing or throwing.' + - code_imp: changed the keys code to make it able to hurt ppl + flowercuco: + - qol: lockboxes have screentips, + - qol: cargo goodies can be opened with your ID even if it is inside a PDA or Wallet + - bugfix: captain can no longer open cargo goodies + - imageadd: secure lockboxes have a broken sprite when emag'd + - bugfix: crab rangoon is not invisible + kawoppi: + - bugfix: trying to clean something while it's already being cleaned will no longer + prematurely remove the cleaning animation + lizardqueenlexi: + - bugfix: Fixed a bug that made certain inserted organs drop on the floor. + - bugfix: Made digitigrade clothing render correctly on female characters. + nevimer: + - qol: the AI HUD now flex-scales and is reorganized. +2022-12-08: + Ghommie: + - rscdel: Removed icon_state randomization (all but one states) from space turfs + to shave a bit of time when initializing maps. This only affects those who have + parallax disabled! + - imageadd: Prettied up the sole remaining icon state an itsy bit to compensate + for it. + Mothblocks: + - bugfix: Door remotes now open windoors again. + - qol: Door remotes now use balloon alerts for failures. + ReinaCoder: + - rscadd: The Syndicate uplink revolver has been changed from the default .357 to + the S-357. It has the same stats and price as the old version but with a new + sprite. + - qol: Adds a better explanation on the .357 uplink entry so players have an better + understanding of what they are buying. Rhials: - - qol: Shadow Jaunter users now receive a brief warning before walking into light - and being forcibly un-jaunted. - - admin: anomaly events now give the option to occur at your current location when - triggered with the Trigger Event admin verb - ShizCalev: - - bugfix: Deaf mobs will no longer see PDA ringtones when a PDA receives a message. + - balance: Xenomorph nests will now sustain humans that are buckled to them, and + gestate xenomorph eggs slightly faster. + - balance: Xenomorph nests evolved healing capabilities in exchange for some of + their grip. They now take only one minute to escape from. + - bugfix: Earning the Mimic loot drop from an abandoned crate now properly spawns + the mimic. + SargesC: + - bugfix: Ashen heretic blade is now fire resistant + itseasytosee: + - code_imp: Stamina no longer affects individual limbs. + kawoppi: + - code_imp: turned axolotls into basic mobs, their idle movement may be slightly + different and they won't move while you're pulling them anymore + san7890: + - admin: Whenever you teleport an atom/mob using the Get function found in many + admin utilities, rest assured that it will actually log the destination location + of where you are teleporting that thing to- rather than the location they were + pre-teleportation. +2022-12-09: + Ghommie: + - bugfix: 'fixes shields that don''t actually take damage from attacks (eg: adamantine + shields) being unable to block said attacks.' + LT3: + - qol: Tram crossing signals are now colourblind friendly, adding visible symbols + to the state of the crossing signal. + - rscadd: Tram crossing signals now visually show when they're malfunctioning. + - bugfix: Emagged tram crossing signals will stay emagged after the tram malfunction + event. + MGOOOOOO: + - balance: Tweaks the minimal temperature threshold and optimal temperature for + Palladium synthate catalyst. + MTandi: + - bugfix: biogenerator converts all plant nutriments into biomass, not just the + first found one. + Mothblocks: + - rscdel: Blink and you'll miss it, the syndicate revolver has come back. + Pickle-Coding: + - balance: Nuclear particles will always irradiate you on hit. + RandomGamer123: + - bugfix: Fixes access for a windoor to atmospherics on Delta + Rhials: + - balance: The lights will now flicker more frequently before a Grey Tide event + - balance: The lights will now be shut off via the APC when the Grey Tide event + opens up a department. + - code_imp: Makes some miscellaneous code improvements to the Grey Tide event + - code_imp: Grey tide event runs much faster + - code_imp: Renames prison_break.dm to grey_tide.dm + - bugfix: Ethereals cannot crystal revive back from genetic meltdown petrification. + ShizCalev: + - bugfix: The teleporter shutter doors on KiloStation and Meta now properly work + off Teleporter access instead of Command access + Tastyfish: + - bugfix: The dog's attack command is somewhat more reliable. + dawsonkeyes: + - rscadd: Added entirely new icons for the Chrono MODsuit + kawoppi: + - bugfix: fixed mothroach inhands not properly fitting under your arm when facing + sideways with the mothroach facing the camera + tf-4: + - bugfix: Light replacers will no longer turn invisible. +2022-12-10: + Fikou: + - bugfix: fixes beam glow in the dark effects + - bugfix: kinesis now doesnt pull the item to the centre of the screen when first + used + - bugfix: physical beams (like vines or meat hook chain) no longer glow in the dark + Ghilker: + - balance: space heaters also affect the adjacent tiles other than the one they + are on + GoldenAlpharex: + - bugfix: There shouldn't be clickable names in Adminwho that don't do anything + anymore. + Jacquerel: + - rscadd: Basic mobs have the capability of being upset that you kicked and punched + them. + - rscadd: Pigs destined for slaughter will now ineffectually attempt to resist their + fate, at least until they lose sight of you. + - balance: Bar bots are better at noticing that you're trying to kill them. + Kryson, Viro, Tattle: + - imageadd: posters are now 24px tall + - imageadd: new sprites for nanomeds, emergency safes, and ticket machines (by Kryson)! + LT3: + - bugfix: Improved tram door logic so they don't inadvertently open during departure. + - rscdel: Removed the message bubble when you open the tram doors while it's travelling. + MTandi: + - bugfix: Fried egg reagents halved to meet the raw egg reagent amount + - qol: Binoculars can be worn on neck now + Melbert: + - qol: The chaplain's armament beacon now displays a radial instead of a text list, + showing previews of what all the armor sets look like + - qol: (Almost) all choice beacons now use a pod to send their item, instead of + just magicking it under your feet + - code_imp: Cleaned up some choice beacon code. + Mothblocks: + - bugfix: Fixed circuitboards sometimes giving no name on examine. + NamelessFairy: + - bugfix: The golem trigger guard scalping situation has improved and golems can + now once again purchase trigger guards at market rate. + RimiNosha: + - qol: The latejoin menu is now TGUI! + - qol: You'll also be able to see why you can't join a job, instead of it being + invisible! + - code_imp: Department UI colors have changed slightly. This will only affect the + latejoin and nations UIs. + - bugfix: Fixed some issues with the TGUI latejoin menu, and made the shuttle and + round time display once more. + ShizCalev: + - bugfix: Blobs will no longer attack jaunting and incorporeal mobs (eg revenants) + SpaceSmithers: + - rscadd: More options are now available when creating and editing signs. + TheBoondock: + - bugfix: fixed changeling transform allowing escape from handcuffs + Zonespace27: + - balance: Destroying a petrified human statue will now drop their brain. + etherware-novice: + - balance: jaws of life can pry windoors + kawoppi: + - bugfix: cows, pigs, rabbits, sheep, cockroaches, mothroaches and mice now take + damage in hazardous atmospheres and temperatures + lizardqueenlexi: + - code_imp: Switched a single proc ref to the proper format. + necromanceranne: + - rscadd: Replaces a less interesting abductee objective with THE PROMETHEAN HORROR. + The Flesh is Weak, the New Flesh is Not So Weak. + timothymtorres: + - bugfix: Fix hypnosis, mind echo trauma, phobia trauma, hypnotic trigger trauma, + split personality brainwashing trauma, codeword hearing, and impure inacusiate + reagent all bypassing language and hearing checks. If you try to give commands + to a victim in a language they don't understand, they will no longer magically + understand the words. + - bugfix: Fix sign language having accent modifications + - refactor: Refactored saycode to be more robust, readable, and have more unit tests. + tralezab: + - refactor: Refactored and overhauled the ForceEvent UI + vincentiusvin: + - bugfix: fixed sm base ray needing damage to resize +2022-12-11: + EvilDragonfiend: + - code_imp: quirk dm files are renamed 'positive_quirks.dm', 'negative_quirks.,dm', + and 'neutral_quirks.dm' + Jacquerel: + - balance: Rush Gland and Brimdust Sac can be used more frequently when implanted. + - balance: An implanted Brimdust Sac will stack the buff on you automatically while + on lavaland. Triggering the buff on the station will make you walk slower for + a short duration. + - balance: Implanted Bimrdust Sacs no longer set you on fire, nor do they explode + if you catch fire. + - bugfix: Romerol now successfully converts zombies into the living dead, rather + than the uglier but still dead dead. + LT3: + - qol: Coupons can now be stored in wallets, freeing up inventory space. + Melbert: + - rscadd: Landmines, rather than triggering when you step onto them, will now trigger + when you step off of them. + Rhials: + - admin: You can now select which type of shuttle loan offer will by made when triggering + the shuttle loan event. + Salex08: + - bugfix: wearing earmuffs or being deaf while being asleep will increase the healing + threshold like its supposed to be + SyncIt21: + - bugfix: RPED part display information + - bugfix: RPED incorrectly exchanging parts with the wrong tier for datum stock + parts + - bugfix: RPED unable to install datum stock parts in incomplete machine frames + - bugfix: RPED unable to exchange parts for newly constructed machines + Tattle: + - bugfix: lockboxes' and wrapped crates' invisibility spell has worn off +2022-12-21: + - balance: the foam used in the scrubber overflow has a lifetime of 1s instead of + 8s + - admin: investigate logs include ckey of source (if applicable) + TheBoondock: + - bugfix: fixed a setting air alarm to refill mode would set scrubber to siphon, + thus defeating the purpose of refilling. Now it will set to scrub mode instead. + - bugfix: fixe all art decal giving you bad art moodlet on examine + lizardqueenlexi: + - bugfix: Made the table in Kilostation's QM office reachable. + zxaber: + - balance: Traitors now have two kill and an escape objective for Greentext purposes, + though completing a Final Objective will Greentext too. +2022-12-12: + A.C.M.O.: + - bugfix: Fixed the DNA Infuser's Space Carp infusion, which was not properly granting + its organ set bonus. Having all 4 carp organs infused now makes you space-proof + as expected. + - bugfix: Fixed robotic/surplus limbs not taking damage/healing as expected; including + via the Var Viewer, Player Panel, and from sources of spread-damage. + Autisem: + - bugfix: Teleporters work properly now with circuits + DragonTrance: + - bugfix: The respawn verb now alerts players if respawning is disabled + Fikou: + - imagedel: non parallax space is now black + LemonInTheDark: + - refactor: The logic of how we well, render things has changed. Make an issue report + if anything looks funky, particularly layers. PLEASE USE YOUR EYES + MTandi: + - qol: allowed stacking machine input, output rotation via console + - qol: Biogenenerator biomass overlay uses sine instead of linear interpolation + - rscadd: Fermented drinks give mood buffs according to the stats of fermented fruit + Melbert: + - bugfix: Corrects the look of pinned modules + Profakos: + - bugfix: F.R.A.M.E. cartridges work again + Rhials: + - code_imp: there can now be more than one grey tide event running at once. + ShizCalev: + - bugfix: Fixed a bunch of missing lattices underneath grilles on Delta. + SkeletalElite: + - bugfix: Forced speech from brain damage will no longer trigger the world filter + SyncIt21: + - rscadd: Custom print button for protolathe just like the autolathe + Tattle: + - bugfix: lockboxes' and wrapped crates' invisibility spell has worn off + TheBoondock: + - bugfix: fixed a building a rack with telekinesis results in it being built at + your feet. Now it will be built at where the rack part is + Watermelon914: + - qol: Changed the reputation cap of 'Legendary' on the UI to be at 1400 reputation. + This is the point at which you unlock Final Objectives. This is purely a visual + change. + Zergspower: + - bugfix: Tram Station - Fixes the stray Disposal pipes in Medbay + - imageadd: Containers - New Interdyne Container with new mapping default icon + - bugfix: Containers - unified the apperance of each one, fixed blemishes and stray + pixels + - bugfix: MetaStation - Removes stray pipe found under the courtroom door + etherware-novice: + - rscadd: forensics scanner can read id access + - balance: forensics scanner can detect transforming items + - code_imp: forensics scanner was rewritten, items can add their own data to the + log + - rscadd: holiday specific posters (only a few now) + lizardqueenlexi: + - bugfix: Admin removal of Heretic status no longer makes a sound. + - bugfix: Made the external smartfridge in the Tramstation pharmacy accessible from + inside. + - spellcheck: Improved "Steal Heirloom" objective description. + necromanceranne: + - code_imp: Makes a lot of the bodypart variables clearer as to what they do. Includes + more detailed code comments. + - bugfix: Robotic limbs are no longer immune to being disabled through reaching + maximum damage. + san7890: + - bugfix: Nanotrasen will now no longer mount the HoPline's Ticket Machines on windows + for Meta, IceBox, and Tram. + - bugfix: When you examine a mecha, you should now no longer see two integrity messages. +2022-12-13: + Ghommie: + - rscdel: Removed object rotation related verbs, overwhelmingly overshadowed by + the click shortcuts anyway. + Jacquerel: + - rscadd: Tell your crew how much you care by ordering a shuttle where half of the + seats have been removed so that you can get some angling done before you clock + out. + LT3: + - balance: Getting hit by the tram may now break some of your bones, or more. Be + careful! + Sealed101: + - bugfix: fixed Advanced Scanning Modules Calibration Experiment not registering + upgraded machines to its progress + SyncIt21: + - qol: creating a shard is possible + - rscadd: TGUI for RCD Just like Rapid Pipe Dispenser + - rscadd: Radial menu for RLD + - code_imp: silo link upgrades for both RLD & Plumbing RCD + - rscdel: Switch Mode, Window Glass, Airlock action icons for construction console + - refactor: FURNISHING , FRAMES & SIMPLE_CIRCUITS are banned upgrades for RLD & + Plumbing RCD + tralezab: + - qol: Regal rats are on the orbit menu +2022-12-14: + Fikou: + - rscadd: lathes now print empty welders and extinguishers + Floofies: + - bugfix: Fixed a stray-tab typo in "item_heal_robotic" + - bugfix: Fixed reagents and other effects which were inappropriately affecting + robotic limbs. + - code_imp: Refactored all of reagents code to be more readable and maintainable. + GoldenAlpharex: + - bugfix: Everything that goes on the tram should look a lot less flat now! + Jacquerel: + - rscadd: The followers of Regal Rats will now respond to simple instructions, if + given by their rightful lord. Except frogs. They're too busy licking themselves + and watching the colours. + JohnFulpWillard: + - qol: Experiment handlers now give a more reasonable explanation for why they can't + find a server. + - admin: Machines being disconnected from techwebs is now logged in research. + LemonInTheDark: + - rscadd: Adds a grace period for hit detection, between clicking ON someone, and + then moving your mouse off before releasing the click. It's short, hopefully + it helps with stupid + TheWolfbringer: + - bugfix: You can now access the coffee beans and cigarettes at Deltastation's Engineering + breakroom +2022-12-15: + 1393F: + - bugfix: the pill dropped by the shadowperson legion corpse now has enough mutation + toxin to work + Fikou: + - bugfix: fixes modsuit icons + - rscadd: you can flip eyepatches + - bugfix: blindfolds now take into consideration both eye colors for their color + Melbert: + - bugfix: Dufflebag Curse no longer lasts forever after the bag is destroyed. + - bugfix: Dufflebag Cursing someone already afflicted properly doesn't try to add + the curse again + - refactor: Refactored how bar drinks set their icons. Juice boxes now use the same + system. + ShizCalev: + - code_imp: We now unit test all /obj's for missing icons. :) + Wayland-Smithy: + - bugfix: Instant summons spell now safely and reliably retrieves items from inside + of anchored containers. + etherware-novice: + - bugfix: switching to species without hunger clears hunger moods + necromanceranne: + - bugfix: Stops strong enough explosions from bricking the objective energy guns + permanently. + san7890: + - bugfix: The message you get when attempting to escape an SM delamination by hiding + in a disposals pipe should now make more sense. +2022-12-16: + Jolly: + - qol: MegaSeed vendors had their seeds distributed through 4 categories; Fruits, + Vegetables, Flower and Miscellaneous. + etherware-novice: + - refactor: moved some description edits to examine hooks + timothymtorres: + - rscadd: Drinking singulo will now ignore supermatter hallucinations and pull objects + to you + - balance: Change singulo drink recipe to require liquid dark matter instead of + radium. +2022-12-17: + Fikou: + - qol: you can see your combat mode status as a simple or basic mob, and you can + see your health as a basic mob + - qol: status panel updates three times as fast + - bugfix: shipping containers go above mobs + - bugfix: fixes hollow survival pod window spawners + Guillaume Prata: + - qol: After 3 years of complaints at CentCom's uniform department. Paramedics have + been given a jumpsuit/skirt that can be adjusted around their waist instead + of just folding it's sleeves, making surgery easier for their fellow doctors. + Holoo-1: + - bugfix: Moves virology fridge on nukie base in to a wall + LemonInTheDark: + - code_imp: Roundstart "starting" should be much snappier now + NamelessFairy: + - admin: Stuffing people inside lockers is now logged. + - 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 + able to contact a randomly selected nanotrasen department. + PositiveEntropy, AxieTheAxolotl: + - imageadd: Resprites every revolver! + - imageadd: Adds the Syndicate Revolver, a visually new, but mechanically identical + .357 revolver to uplinks! + jlsnow301: + - bugfix: ERTs should now be properly grouped in the orbit UI + - bugfix: Orbit heatmap should be now working properly. + raffclar: + - qol: Improve NtOS notepad +2022-12-18: + ShizCalev: + - bugfix: Camo deagles have the proper icons again. + SkeletalElite: + - bugfix: The HOS and syndicate berets have had their missing armor and strip delay + readded + Tattle: + - bugfix: crafted foods are logged in the blackbox once more + Time-Green: + - bugfix: Podperson hair isnt fugly anymore + - code_imp: External organs now support different colors for different layers +2022-12-19: + Fikou: + - bugfix: fixes timid kudzu being weird on multi z + - balance: limits the power miners the dusty shard can summon to charger, protector, + ranged, standard and support + GoldenAlpharex: + - rscadd: Added the *hand emote, which you can offer to someone standing up in order + to give them the possibility to grab onto your hand and let you drag them away, + or to someone lying down to help them back up, which always makes everyone involved + a little happier! + - refactor: De-hardcoded and genericized a lot of the offering status effect and + 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! + Jacquerel: + - bugfix: Rats will once again attempt to attack windows or other dense objects + separating them from their targets. + - rscadd: Mice will now run away from you, you have to catch them if you want to + eat them. Use those traps! + - rscadd: Rabbits, Sheep, and Pigs likewise won't just sit there and let you pulverise + them if they can see an escape route. + JohnFulpWillard: + - bugfix: Gibbers no longer show up twice in their techweb node. + Melbert: + - bugfix: Detective Scanner can scan stuff that contains blood again. + Profakos: + - bugfix: in the round end report, progression points are converted to reputation + ShizCalev: - spellcheck: Corrected some grammar issues with messages displayed when shoving people into lockers. - admin: Fixed shoving people into a locker not being combat logged properly. - SkyratBot: - - qol: The Traitor's Antagonist Panel's Unlock and Failsafe entries will only appear - if there is an Unlock/Failsafe Code to display. - - bugfix: Pacifists can now hit people with pillows and holographic weapons, as - well as participate in boxing. + TheBoondock: + - balance: fixed chameleon vest not being able to hold any kind of gun + Thunder12345: + - bugfix: Machine frames will no longer ask for "s" in place of some components + carshalash: + - balance: Gatfruit seeds will no longer drop from ice portals. + flowercuco: + - bugfix: CentComm has noticed that the research director has been hoarding turtlenecks, + corrective action has been taken + lizardqueenlexi: + - bugfix: Non-human characters will not sometimes display an incorrect level of + blood loss on examine. + san7890: + - bugfix: When you unwrench a flag, you should now no longer see the big flashy + red ERROR sign. +2022-12-20: + Jacquerel: + - bugfix: Rats won't continue attacking someone they've been ordered to kill past + the point of death. + MidoriWroth: + - rscadd: Adds 32 new foods! + - rscadd: You can make vinegar from equal parts water/sugar/wine + - rscadd: Tortillas can now be grilled to make hard-shell tacos, which can be used + to make the new tacos or custom tacos all-together. + - balance: Uncooked rice is now made from mixing 10 units rice/water in any container, + no longer requiring a bowl to do so. Recipes that previously used bowls of rice + now need boiled rice and a bowl, instead. + fikou: + - rscdel: chaos holoparasite + - rscadd: gaseous holoparasite, it can expel various gases from its body and stabilizes + the users temperature +2022-12-21: + ATHATH: + - bugfix: Pillow smothering now checks to see if the SMOTHEREE has a head, not the + SMOTHERER. + EvilDragonfiend: + - bugfix: vendor no longer shows glass icons in a specific condition + Fat bugs bunny: + - rscadd: Added a glass jaw quirk, that leaves you prone to being knocked out when + hit on the head. + LT3: + - qol: Tramstation medbay treatment center now has a tram collision counter. + Rhials: + - bugfix: briefcases no longer disappear after being unlocked + ShizCalev: + - spellcheck: Fixed the thermomachine stating "You set the color" for everyone that + could see it. + - bugfix: Santa now spawns with the actual space capable hat again! + - bugfix: Fixed the claustrophobia trait not recognizing Santa's real hat. + - bugfix: Fixed secure briefcase and wall safes not sending icon update signals + properly + SyncIt21: + - bugfix: ghosts cant mess with RCD & PLumbing RCD + etherware-novice: + - qol: examine your uplink for code + - rscadd: lawyer-based photocopier blanks + flowercuco: - qol: added makeshift surgery screentip - qol: you no longer have to go in and out of harm intent to do surgery with a bedsheet - - bugfix: Fixes access_view on goodies not being respected by anything other than - department budget orders - - rscadd: during holidays the spread syndicate propaganda through posters objective - has a chance of spawning evil holiday poster - - bugfix: framework for holiday posters is more functional and modular - - code_imp: contraband.dm file and contraband.dmi file are both now poster.dm and - poster.dmi - - rscadd: Pride pin quirk! Start the shift off with a pride pin in-hand. - - qol: Pride pins can be infinitely reskinned now. - - bugfix: added descriptions for holodeck floors and comp/mach frames - - bugfix: Dead people are no longer counted as crew when determining if 65% of the - station is revs for the auto-shuttle call - - bugfix: Fixed final objectives not displaying the UI buttons. - - bugfix: Using optimized multiz on > 2 z layer maps will no longer cause fucko - bungo - - bugfix: You can now add mutations to advanced injectors without having an occupant - inside - - bugfix: The briefcase in the MetaStation vault now contains the (surprisingly - good) spoils it's supposed to. - - qol: examine your uplink for code - - rscadd: Gas sensors recipe to RPD - - code_imp: linking all the stuff via multitool - - qol: make your own tank instead of moving around canisters - - qol: drones now start with engineering skillchip. - - qol: drones can now interract with light boxes, rack parts, light replacers and - stack of duct. + san7890: + - admin: The "Reset Thunderdome" option in the Secrets Menu now respects you closing + out of the confirmation screen as a way of cancelling your potential thunderdome + reset, rather than proceeding immediately. It should also be easier to comprehend + as well. + timothymtorres: + - rscadd: Add space vines prevent solar panels from working (except ones with the + transparent mutation) + - rscadd: Add new space ruin - Cyborg Mothership. All hail the master race! +2022-12-22: + Big chungus wholesome 100: + - bugfix: Amputated and reattached limbs now get wounded based on their own biology, + not the current owner's biology. + Guillaume Prata: + - bugfix: The Quartermaster has their own garment bag now, like everyone else at + Command. + Guillaume Prata, Imaginos16: + - bugfix: You can now adjust medical scrubs for easier surgery on your fellow doctors. + Melbert: + - bugfix: Nar'Sie will no longer bring upon the construct apocalypse when they encounter + a chicken after one of the invokers were destroyed + - bugfix: The Singularity should no longer stop gibbing people when whoever created + it was destroyed + NamelessFairy: - qol: You can now reduce the range of View Sensor circuits. - - spellcheck: drastically improves grammar for inserting something during organ - manipulation - - rscadd: lawyer-based photocopier blanks - - admin: Admins can now enable a custom hostile environment that prevents the shuttle - from leaving. + Watermelon914: + - bugfix: Fixed final objectives not displaying the UI buttons. + Y0SH1M4S73R: - admin: Adds a new function for admin lua scripting, "over_exec_time", for checking if lua code is running close to the execution limit. Details are available in the lua editor's help menu. - admin: The execution limit is described in detail in the lua editor's help menu. - - bugfix: fixed dice servants not receiving any indication of who their master is - Tattle: - - bugfix: Wrapping balloon alerts are shorter and no longer contain spans -2022-12-27: - Erol509: - - imageadd: Teshari M-42 helmet, and M40 Gas Mask sprites - Jolly: - - qol: MegaSeed vendors had their seeds distributed through 4 categories; Fruits, - Vegetables, Flower and Miscellaneous. - OrionTheFox: - - imageadd: Armadyne has released new Gunset Cases with soft foam inserts. They're - still struggling to find out how to fit items back into the case, though... - Rhials: - - bugfix: Racks now properly construct again - - rscadd: Sandstorm random event! A random side of the station is pummeled by an - onslaught of sand and dust. If you hear that one is approaching, grab a welder - and some iron to help with repairs! - - rscadd: Space sand! It's weak and doesn't hurt reinforced walls, but shouldn't - be underestimated in high quantities. - - code_imp: You can now pass a start direction to the spawn_meteors/spawn_meteor - global procs. - - bugfix: briefcases no longer disappear after being unlocked - ShizCalev: - - bugfix: Fixed secure briefcase and wall safes not sending icon update signals - properly - SkyratBot: - - bugfix: admins can now select pirate events correctly + ZephyrTFA: + - admin: New mapping verb to load lazy templates as needed. In your admin tab under + the Mapping category. + san7890: + - qol: The Traitor's Antagonist Panel's Unlock and Failsafe entries will only appear + if there is an Unlock/Failsafe Code to display. + timothymtorres: - 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 @@ -877,6 +1306,22 @@ Erol509: - imageadd: 'New Teshari winter coat sprites for: cargo, robotics, chemistry' - bugfix: Teshari satchels works again +2022-12-23: + Fikou: + - bugfix: fixes kilo not having xmas trees + - bugfix: fixes simple/basic mob damage sounds in some places + - bugfix: fixes bald and shaved santas + Iamgoofball: + - bugfix: Fixes access_view on goodies not being respected by anything other than + department budget orders + Improvedname: + - rscadd: Adds some costumes to autodrobe + - bugfix: fixes deltastation vent at brig entrance + Jacquerel: + - rscadd: Mice who are fed cheese by hand will accept humans as friends, at least + until reminded otherwise by their rightful lord. + - bugfix: Fixed a runtime preventing mice from acting correctly when trying to flee + and also eat cheese at the same time. LT3: - bugfix: Tram windows are now properly flush with the tram walls. - imageadd: Tram shuttle seats have been replaced with benches so people can sit @@ -885,99 +1330,317 @@ of the map itself. - code_imp: The tram floor tiles are now in a tram floor subtype instead of the map itself. - OrionTheFox: - - bugfix: fixed missing sprite on monkey cube and donk boxes - SkyratBot: - - balance: fixed chameleon vest not being able to hold any kind of gun - StrangeWeirdKitten: - - bugfix: Communist cargo has been vanquished, and cargo orders are no longer free. -2022-12-29: + ShizCalev: + - bugfix: There is now a message clarifying that you've been KICKED from the game + when the keysend flood autokick triggers. + - bugfix: Deaf mobs will no longer see PDA ringtones when a PDA receives a message. + SyncIt21: + - bugfix: correctly update canister appearance + - rscadd: Gas sensors recipe to RPD + - code_imp: linking all the stuff via multitool + - qol: make your own tank instead of moving around canisters + iwishforducks: + - rscadd: Pride pin quirk! Start the shift off with a pride pin in-hand. + - qol: Pride pins can be infinitely reskinned now. + lizardqueenlexi: + - bugfix: Fixed a couple of incorrect defines for mech categories. + mc-oofert: + - code_imp: Turned most syndicate mobs into basicmobs, making their AI better and + (possibly) more deadlier! + - rscdel: Removed syndicate mech pilots and syndicate civvies + san7890: + - bugfix: Bar/Restaurant Bots should no longer spam orders forever. + - bugfix: After a recent mishap with a high-ranking Syndicate 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. + vincentiusvin: + - bugfix: fixed sm activation logging. + winterboekje: + - spellcheck: drastically improves grammar for inserting something during organ + manipulation +2022-12-24: + Mothblocks: + - bugfix: The briefcase in the MetaStation vault now contains the (surprisingly + good) spoils it's supposed to. + NamelessFairy: + - admin: Admins can now enable a custom hostile environment that prevents the shuttle + from leaving. +2022-12-25: + Iamgoofball: + - bugfix: Dead people are no longer counted as crew when determining if 65% of the + station is revs for the auto-shuttle call + Jacquerel: + - bugfix: Pacifists can now hit people with pillows and holographic weapons, as + well as participate in boxing. + Jolly: + - code_imp: The lists in admin_verbs.dm was organized to be made better. This shouldn't + affect the panels admins use at all, since they're already alphabetized. + LemonInTheDark: + - bugfix: Using optimized multiz on > 2 z layer maps will no longer cause fucko + bungo Melbert: - - bugfix: Did you know items have a 1.2x chance of getting fibers attached? Well - it's been broken, now it's fixed - - bugfix: Det's scanner sees fibers again + - qol: The preview dummy in the preferences menu now shows some visual quirks, like + Heterochromia or nearsighted. + - bugfix: Fixed some quirks which read a preference roundstart not applying the + preference. + - refactor: Refactored some bits of quirk datums and the quirk application process. + - bugfix: Husked bodies look husked again + Profakos: + - qol: the security department delivery crates are now have to be opened in the + security office, where the crates are delivered + Rhials: + - admin: anomaly events now give the option to occur at your current location when + triggered with the Trigger Event admin verb + - bugfix: Racks now properly construct again + - qol: Shadow Jaunter users now receive a brief warning before walking into light + and being forcibly un-jaunted. + Striders13: + - bugfix: fixed dice servants not receiving any indication of who their master is + Tattle: + - bugfix: all of the barstools on the Emergency escape shuttle are equipped with + a seatbelt + - bugfix: Wrapping balloon alerts are shorter and no longer contain spans + Unit2E: + - bugfix: Tinacusiate is now possible to make again. + ZephyrTFA: + - refactor: armor, from the ground up basically + etherware-novice: + - bugfix: added descriptions for holodeck floors and comp/mach frames + flowercuco: + - rscadd: during holidays the spread syndicate propaganda through posters objective + has a chance of spawning evil holiday poster + - bugfix: framework for holiday posters is more functional and modular + - code_imp: contraband.dm file and contraband.dmi file are both now poster.dm and + poster.dmi + lizardqueenlexi: + - bugfix: Implemented "jelly eyes" to make jellypeople and stargazers use the proper + eyes sprite. + mc-oofert: + - bugfix: You can now add mutations to advanced injectors without having an occupant + inside + robotduinomm: + - qol: drones now start with engineering skillchip. + - qol: drones can now interract with light boxes, rack parts, light replacers and + stack of duct. +2022-12-26: + MTandi: + - bugfix: fixed saline drip UI not having transfer rate controls visible + - qol: Rewrote the crafting/cooking menu UI + - qol: Split crafting and cooking menus in two different menus + - qol: Crafting is no longer blocking the entire UI, only the "Make" buttons are + disabled + - qol: Added stack crafting recipes to the crafting menu + - qol: Added cooking recipes that were absent in the crafting menu before (tool + recipes, machine recipes, reactions) + - qol: Added option to search recipes by title + - qol: Added option to filter recipes by required materials/ingredients + - qol: Added food types to the cooking menu, highlighting diet of your species (liked, + disliked foods) + - qol: Added total nutrition value of the result to the cooking menu + - qol: Added option to filter cooking recipes by the food type of the resulting + food + - qol: Added "Can make" category that lists all currently craftable recipes throughout + all categories + - refactor: changed categories and reshuffled some items in them + - code_imp: Reagents now have default container to get an icon from the reagent + datum + - code_imp: Objects now have `desc_controls` var for OOC information about mouse + controls that are visible on examine, but not in the description + - bugfix: Fixed alignment on many food icons + - bugfix: Fixed missing icon for beef stroganoff + - bugfix: The maps are now placed in the center of Z level to avoid having parts + getting into the inaccessible area + Rhials: + - rscadd: Sandstorm random event! A random side of the station is pummeled by an + onslaught of sand and dust. If you hear that one is approaching, grab a welder + and some iron to help with repairs! + - rscadd: Space sand! It's weak and doesn't hurt reinforced walls, but shouldn't + be underestimated in high quantities. + - code_imp: You can now pass a start direction to the spawn_meteors/spawn_meteor + global procs. + Wayland-Smithy: + - bugfix: Cult spirt realm ghost marking now works again. + flowercuco: + - bugfix: admins can now select pirate events correctly + iwishforducks: + - balance: You can now place plating adjacent to already existing plating without + having to place rods first. + kawoppi: + - bugfix: xmas crackers are now tiny instead of normal sized + san7890: + - bugfix: To prevent spam, there is now a cooldown on being able to upload assorted + books into the newscaster's channel feed. +2022-12-27: + Fikou: + - bugfix: guardian spirits check for death before they add themselves to you + - admin: admins can now give someone a holoparasite through a new menu in vv dropdown + - qol: alt click holopara abilities were moved to right click + - qol: support holoparas heal with right click + - admin: holoparas have less hardcoded stuff so admins can edit them easier + - qol: holoparasites now get their light color from their guardian color + - bugfix: holoparasites no longer have the hostile faction, things will attack them + - bugfix: holoparasites fly over chasms and stuff properly again + - qol: holoparasites update their health every time the summoner gets damaged, rather + than every 2 seconds. they also instantly react to the summoner's death, deletion + and have a screen overlay of how damaged the summoner is + - qol: holoparasite creation now uses a radial menu with tooltips for each subtype, + as such, the guide papers no longer exist. it also shows ghosts which type you + picked + - bugfix: holoparasites can no longer be fugu'd + - bugfix: fixes overlay lighting runtiming if deleted during a signal queue + - bugfix: fixes negative gravity being weird, and gravitokinetic holoparasite's + turf slams not working + - bugfix: fixes invisible info tooltips for radial menus + - admin: you can now make holoparas not controlled by anyone + Guillaume Prata: + - bugfix: Metal Hydrogen/Elder Atmosian suits can carry a MH Axe on its suit slot + now. + Jacquerel: + - rscadd: Carp will now run away if their health gets low, meaning they may have + a chance to regenerate. + - rscadd: Lia will now fight back if attacked instead of letting herself get killed, + watch out! + - balance: Magicarp will now aim their spells more intelligently. + - rscadd: Tame Magicarp can be ordered to use their spells on things. + - refactor: Carp are now "Basic Mobs" instead of "Simple Mobs" + - bugfix: Dehydrated carp no longer give you a bad feeling when they're your friend + and a good feeling when they're going to attack you. + - balance: Tamed carp are now friendly only to their tamer rather than their whole + faction, which should make dehydrated carp more active. Order them to stay or + follow you if you want them to behave around your friends. + Melbert: + - refactor: Drowsiness and Blurred Eyes are now tracked via status effect. +2022-12-28: + Fikou: + - balance: standard holoparasites and assassin holoparasites in stealth mode can + deal wounds + - balance: you can now ride charger holoparasites + - balance: charger holoparasites have a bit less armor and speed + - bugfix: you can correctly redirect yourself with neurotoxin as a xeno + - bugfix: you can see your active hand correctly as xeno + - bugfix: fixes moonicorns not applying pax + - imageadd: tweaks the ninja modsuit helmet + Jacquerel: + - bugfix: Space Carp can now breathe in space + Melbert: + - bugfix: Wedding dresses no longer render their shoes over the dress + - bugfix: Things which have inv flags set should more consistently actually hide + the things they mean to hide - bugfix: Silver foods correctly spawn things grilled and fried + - bugfix: Ethereals and Flypeople and Aliens who learn Uncommon language can speak + it with their tongues like they could speak Common, no this doesn't mean they + can naturally speak or understand Uncommon + - refactor: Refactored how tongues set up their languages lists - rscadd: You can now high five people with (non-cult) touch spells! Maybe be careful high-fiving a wizard who knows Smite. - Paxilmaniac: - - balance: Traitor uplinks have had a number of their more powerful or pointless - skyrat added items removed - - code_imp: Most modular uplink items have been moved from the master files into - a module - ShizCalev, Golden for fixing the Skyrat icons: - - code_imp: We now unit test all /obj's for missing icons. :) - - bugfix: Fixed a lot of icons that were missing on Skyrat-only items. Like, a LOT. - SkyratBot: + Ryll/Shaps: + - rscadd: 'Dogs will now occasionally bark at their two mortal enemies: felinids + and mailmen' + - bugfix: Dogs set to attack will now only close within 3 tiles of their target, + and must be approached further by their target (or pushed next to their target) + to actually attack + Time-Green: - bugfix: Pride pin quirk works roundstart - - bugfix: replicapods no longer sometimes have infinite spawns - - bugfix: Adds missing christmas tree to tramstation - - bugfix: The burden level of Burdened Sect chaplains is now updated properly when - their negative mutations are healed with mutadone - - imageadd: tweaks the ninja modsuit helmet + ZephyrTFA: + - bugfix: War can once again be declared + san7890: - rscadd: WOULD YOU EAT THE TOILET SANDWICH (LOCATED IN DELTASTATION'S MEDBAY BREAKROOM RESTROOM) FOR FIVE DOLLARS? TEST IT OUT NOW! +2022-12-29: + Comxy: + - refactor: Refractors the frog into a basic mob + FernandoJ8: + - code_imp: Removes a rendundant call of create_internal_organs() from the /mob/living/carbon/human/Intialize() + - bugfix: The burden level of Burdened Sect chaplains is now updated properly when + their negative mutations are healed with mutadone + Fikou: + - qol: some modsuits now have some modules pinned by default + - bugfix: throwing no longer gets canceled if theres a mob buckled to the thrown + thing + - admin: adds an admin combat-ready miner outfit + Guillaume Prata: + - rscadd: Geneticists figured out how to infuse goliath DNA into humanoids! (Many + monkeys were harmed in the process!) + - rscadd: Goliath eyes for nightvision, lungs to breath at lavaland safely, heart + to protect you from ash storms and the brain which turns one of your arms into + a tendril hammer. + - rscadd: 'Tendril hammer: Your arm becomes a giant mass of plate and tendril but + it won''t fit on gloves anymore. While slow to swing around, you can obliterate + fauna/megafauna with it, 20 base dmg + 80 bonus damage to fauna/megafauna with + a bonus knockback.' + Melbert: + - bugfix: Det's scanner sees fibers again + - bugfix: Did you know items have a 1.2x chance of getting fibers attached? Well + it's been broken, now it's fixed + Salex08: + - bugfix: transparent and timid kudzu mutations wont block light + - bugfix: Adds missing christmas tree to tramstation + Time-Green: + - bugfix: replicapods no longer sometimes have infinite spawns Wallem: - qol: Smokers rejoice, you no longer need to mill through your cigarette packet to get your lighter out. Alt-Click a cigarette packet to extract a lighter from it, if you've put it in there. Right-Clicking will still take out a cigarette. 2022-12-30: - Oxotnak: - - rscadd: added security Meka - - imageadd: added sprites for security Meka - Paxilmaniac: - - rscadd: The blackmarket trader ruin itself has been given a significant improvement, - hopefully really nailing that shady little outpost tucked inside of an asteroid - theme I think it's been going for. - - rscadd: The alien tool lab ruin has been changed to be a bit more interesting - than a box full of a full set of alien level tools. - Ryll/Shaps: - - rscadd: 'Dogs will now occasionally bark at their two mortal enemies: felinids - and mailmen' - - bugfix: Dogs set to attack will now only close within 3 tiles of their target, - and must be approached further by their target (or pushed next to their target) - to actually attack - ShizCalev: - - bugfix: Camo deagles have the proper icons again. - - spellcheck: Fixed the thermomachine stating "You set the color" for everyone that - could see it. - SkyratBot: - - balance: Gatfruit seeds will no longer drop from ice portals. - - bugfix: transparent and timid kudzu mutations wont block light - - bugfix: ghosts cant mess with RCD & PLumbing RCD - - bugfix: using chemicals on botany wont have unrelated side effects - - admin: The "Reset Thunderdome" option in the Secrets Menu now respects you closing - out of the confirmation screen as a way of cancelling your potential thunderdome - reset, rather than proceeding immediately. It should also be easier to comprehend - as well. - - admin: adds an admin combat-ready miner outfit - SomeRandomOwl: - - bugfix: Fixed the rear door to the wardens office having the wrong access requirements - set - - bugfix: Fixed a detective spawn point which spawned the round-start detectives - trapped within security - Tastyfish: - - bugfix: The cortical borer section of the round end report now shows dead cortical - borers. - Zergspower: - - bugfix: Void Raptor - Fixes the AI's Powernet and isolates it from the station - grid - - qol: Void Raptor - Moves the Generator to be on top of a wire for easier quick-attach - - bugfix: Void Raptor - Gets rid of the accidental addition above the chapel -2022-12-31: - Paxilmaniac: - - bugfix: The goldeneye ops modsuit won't cause CI to fail anymore - - rscadd: Assault operatives have a few new unique equipment items, namely a MOD - and a few firearms - - rscadd: Assault operatives now also have a new, more covert style ship and base - - balance: Pretty much the entirety of the assault operative equipment roster has - been changed around - - balance: The maximum number of assault operatives has been lowered from 6 to 5 - RimiNosha: - - bugfix: Finally fixes the bugged Vox hairstyle that's been plaguing the character - creator for a while. - SkyratBot: + BlueMemesauce: - spellcheck: fixed a bug where latejoin menu would display incorrect number of open slots - - bugfix: fixes pod blood I swear + Iamgoofball: + - bugfix: The nuke ops base begins lazy loading as soon as the first hijack stage + is completed so as to avoid upwards of 30 second delays on the shuttle docking + after the timer hits 00:00 due to server lag. + Jacquerel: + - rscadd: Ian has learned some new tricks, tell him what a good boy he is! + - rscadd: Ian will come on a walk with you, if you are his friend. + - refactor: Ian's tricks work the same way as some other mobs' tricks and should + be extendable to future mobs. + - bugfix: Dogs no longer run at the maximum possible speed for a mob at all times. + - rscadd: When Ian gets old, he also slows down. Poor little guy. + - rscadd: Dogs will no longer dislike the presence of Felinids who have taken the + time to befriend them. + LemonInTheDark: + - rscadd: Starlight is more potent now, and slightly blue + - rscadd: The lights from fire alarms will be dimmer and lower range, with alarms + themselves being brighter. Hopefully it vibes + - bugfix: Starlight will actually show now, instead of just being replaced by fullbright + most of the time + - bugfix: Emissive lighting will once again work. Sorry lads + Mothblocks: + - qol: Several balloon alerts have been changed to be more consistent. + NamelessFairy: - admin: Integrated Circuits now have an admin only subtype, functionally the same as VVed regular circuits. + Salex08: + - bugfix: using chemicals on botany wont have unrelated side effects + Time-Green: + - bugfix: fixes pod blood I swear + jlsnow301: + - bugfix: Blob minions are now sorted into biohazards in orbit UI. + - rscadd: Blobs now get antag info screens. + - rscadd: Blob minions get objectives (protect the core!). + - rscadd: Adds blob style text for victories, etc. + - refactor: Refactors some blob & blob minion code. + kawoppi: + - qol: the metastation custodial closet can now be found using the navigate verb + san7890: + - qol: Ghosts are freely able to go between abductor ships now. +2022-12-31: + ChungusGamer666: + - rscadd: Meth becomes bluer the higher the purity + Ebin-Halcyon: + - imageadd: The wendigo has been resprited + Jacquerel: + - rscadd: New station traits can vary how large and comfortable the station escape + pods are. + Salex08: + - bugfix: indestructible windows cant be destroyed by ingame means anymore + Tattle: + - rscadd: chocolate boxes now contain bonbons (formerly tiny chocolates), truffles, + and peanut butter cups + - balance: changed the sugar in clown cakes' food_reagents to banana juice + - balance: increased the amount of vitamin in pound cakes + - bugfix: slices of bread now taste like their respective breads instead of tasting + "indescribable" + - bugfix: fiesta skewers are now MEAT and VEGETABLES + mc-oofert: + - bugfix: Basicmobs can no longer shoot mobs inside indestructibles diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 6688849eb70b6..615670ec30683 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -1,87 +1,56 @@ 2023-01-01: - Guillaume Prata: - - rscadd: Geneticists figured out how to infuse goliath DNA into humanoids! (Many - monkeys were harmed in the process!) - - rscadd: Goliath eyes for nightvision, lungs to breath at lavaland safely, heart - to protect you from ash storms and the brain which turns one of your arms into - a tendril hammer. - - rscadd: 'Tendril hammer: Your arm becomes a giant mass of plate and tendril but - it won''t fit on gloves anymore. While slow to swing around, you can obliterate - fauna/megafauna with it, 20 base dmg + 80 bonus damage to fauna/megafauna with - a bonus knockback.' - Jolly: - - balance: '[Void Raptor] Adjacent walls around science have been made into R-Walls. - The walls affect either border public maintenance, or a public hallway/area.' - - bugfix: '[Void Raptor] Sciences pet is now secured behind regular glass panes - instead of reinforced. Unless it genetically mutates and kills everyone, the - extreme containment procedure was deemed unnecessary.' - - bugfix: '[Void Raptor] The glass panes around the break area were made regular. - Science Guards, please stop using them to ricochet rubber bullets.' - - balance: '[Void Raptor] Adjusted some R-Walls in the Det and Lawyers offices, - as well as outside of sec adjacent to the main hall.' - - bugfix: '[Void Raptor] Head of Security''s office is properly encased in R-Walls.' - - bugfix: '[Void Raptor] Fixed what should''ve been R-Walls around security as well - as what should''ve been standard walls' - LT3, LemonInTheDark: - - bugfix: Fixes cyborg hats offsetting physically over their head - - bugfix: Fixes solar trackers offsetting wrong, and panels not using plane offsets - - bugfix: Fixes reflector parts Z fighting with their neighbours - - bugfix: Fixes burgers layering wrong - - bugfix: Fixes tram hit and delamination counters - - bugfix: Fixes paper bin rendering - Paxilmaniac: - - rscdel: The weapon token system, with associated vendor and tokens, has been removed - because we don't actually use it anymore. - SkyratBot: + ChungusGamer666: + - bugfix: Static light sources update properly now when carried by a mob. + Fikou: + - rscadd: Venom antag - bugfix: fixed pellet clouds (buckshot, improv shells) dealing insane wounds to armored people - - bugfix: Basicmobs can no longer shoot mobs inside indestructibles - - bugfix: indestructible windows cant be destroyed by ingame means anymore + LemonInTheDark: + - admin: Added a new chat category for prayers. Filter them out, move them to their + own pane, live your best life + NamelessFairy: + - bugfix: CTF downtown's red hat store's beret is now red again rather than green. + Rhials: - balance: Instant Summons will now violently tear out embedded objects as they are summoned, and will drag embedee to you if nearby. + SyncIt21: - bugfix: atmos control can detect distro & waste loop sensors - - rscadd: Starlight is more potent now, and slightly blue - - rscadd: The lights from fire alarms will be dimmer and lower range, with alarms - themselves being brighter. Hopefully it vibes - - bugfix: CTF downtown's red hat store's beret is now red again rather than green. - - qol: Ghosts are freely able to go between abductor ships now. - - qol: the metastation custodial closet can now be found using the navigate verb - - admin: Added a new chat category for prayers. Filter them out, move them to their - own pane, live your best life - - bugfix: There is no longer a floating camera on RuntimeStation - - bugfix: Rats will once again attempt to attack windows or other dense objects - separating them from their targets. - - rscadd: New station traits can vary how large and comfortable the station escape - pods are. - - refactor: Refractors the frog into a basic mob - - bugfix: The nuke ops base begins lazy loading as soon as the first hijack stage - is completed so as to avoid upwards of 30 second delays on the shuttle docking - after the timer hits 00:00 due to server lag. - - qol: you can see your combat mode status as a simple or basic mob, and you can - see your health as a basic mob - - qol: status panel updates three times as fast + jughu: - bugfix: Fixes missing hop ticket incremement button at icebox - - admin: New mapping verb to load lazy templates as needed. In your admin tab under - the Mapping category. - - imageadd: The wendigo has been resprited - - bugfix: throwing no longer gets canceled if theres a mob buckled to the thrown - thing - - bugfix: War can once again be declared - SomeRandomOwl: - - bugfix: Fixed the mapping helpers for department guards to require department - access - Zonespace27: - - bugfix: You can now make full-tile wooden barricades again - fikou: - - rscdel: chaos holoparasite - - rscadd: gaseous holoparasite, it can expel various gases from its body and stabilizes - the users temperature - theOOZ: - - rscadd: Adds a language category to the OPFOR loadout selection + san7890: + - bugfix: There is no longer a floating camera on RuntimeStation 2023-01-02: + FernandoJ8: + - bugfix: Stranger Reagent can no longer be a componet in Metalgen + Fikou: + - qol: examining armor tags now shows you the wound armor value + Gorock: + - qol: Improved Chem Dispenser Reagent Search + Helg2: + - bugfix: smoke spell becomes robeless + Improvedname: + - bugfix: fixes cummerbunds holding 7 items instead of 3(as fannypacks do) + Jacquerel: + - rscadd: You can now bake croissants to add to your breakfast. + - rscadd: Traitorous chefs can bake dangerous throwing croissants, Mimes can do + this and gain the additional benefit of a deadly combat baguette. + JohnFulpWillard: + - bugfix: Researching now checks the techweb it's linked to for node availability, + rather than only the Science one. + - imageadd: Nukie tablets are now using PDA sprites w/ GAGS instead of tablets. + Melbert: + - bugfix: Secrets menu Summon Guns / Summon Magic work again. ShizCalev: - bugfix: Dual sabers will no longer get covered in blood when attacking someone. - SkyratBot: + Tattle: + - bugfix: projectile hits on mobs are logged globally + ZephyrTFA: + - bugfix: You can inspect armor again + san7890: + - bugfix: Those with kitchen access should now once again be the only one who are + allowed to vending-machine-restock individual snacking items via their trusty + tray. + vincentiusvin: - code_imp: rescaled supermatter health from 900 to 100. - balance: we didn't do a 1:1 rescale of the damage though, atmos based damage should be slightly higher across the board but have lower caps. All external damage @@ -103,6 +72,11 @@ - rscadd: You can now bake croissants to add to your breakfast. - rscadd: Traitorous chefs can bake dangerous throwing croissants, Mimes can do this and gain the additional benefit of a deadly combat baguette. +2023-01-03: + FernandoJ8: + - bugfix: Boxes created through the crafting menu no longer spawn with their contents + full + Fikou: - balance: adds more ammunition, and also signing on the psyker ship - qol: you can see other echolocation receivers as fully purple now, rather than just their outline @@ -533,6 +507,7 @@ allowed to vending-machine-restock individual snacking items via their trusty tray. - qol: Pinpointers now tell what they are tracking when examined + JohnFulpWillard: - qol: Mining order consoles are now named 'order console'. - qol: Orders from said mining order consoles can now no longer be cancelled, and are listed as 'mp' (mining points) in the Cargo console instead of 'cr'. @@ -540,150 +515,35 @@ - bugfix: Departmental orders can no longer be cancelled through the NTos cargo application. - bugfix: Wearing an ID will no longer break order consoles. - - bugfix: You should now no longer get a confusing message whenever you try to add - flour from a flour sack into a bowl. - - bugfix: you can nolonger use a goldgrub as a shield to kill colossus - - spellcheck: Head-spears are now named properly when using alternate spear types. - - rscadd: 'Hope you saved for a rainy day: Added the ''Cursed'' quirk which causes - excessive slippage and... other difficulties.' - - bugfix: Boxes created through the crafting menu no longer spawn with their contents - full - Tastyfish: - - bugfix: Teshari uniform accessory rendering now works as expected again. - Tattle: - - bugfix: projectile hits on mobs are logged globally - YakumoChen: - - qol: Department guards now spawn with all the gear they need to police their department - - qol: Department guard lockers contain a full, spare set of gear, for people getting - a job change. - Zonespace27: - - balance: ERT smartgun now fires faster while doing less damage and having nearly - all wounding potential removed -2023-01-15: - Guillaume Prata: - - rscadd: Mothroach DNA infusion. For better or worse, anyone can get closer to - being a Moth person now! - Melbert: - - bugfix: Fixed not getting moodlet from freshly laundered clothing - - bugfix: Fixed durability tags not showing their ratings - RimiNosha: - - bugfix: Non-standard brained synths can now use ghost roles once again. Woops! - - bugfix: Items will now no longer be given twice to ghost roles. - - bugfix: Ghost cafe boxes no longer drop on spawn. - - imageadd: Ghost cafe costuming boxes no longer look like they've been bought from - the syndicate. We managed to at least repackage their products this time. - - qol: You can finally put stuff back into said ghost cafe costuming kit. Nice. - ShizCalev: - - bugfix: Drunk scientists & the RDs rejoice! You can now reach the Ballmer peak! - - admin: Fixed a bunch of liver traits not being assignable. - SkyratBot: - - refactor: Duplicating mobs now should now give properly functioning mobs, as duplications - 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 - - 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 - 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. - - code_imp: Anomaly effects now have their own files, rather than being crammed - into a single, probably-too-large file. - - code_imp: Removes double CAN_BE_INTERN flag in chaplain and cargo tech job flags - - code_imp: Replaces a string in chemist departamental head variable with a job - define. - - bugfix: Fix blood overlays on energy daggers - - code_imp: Add `NO_BLOOD_ON_ITEM` bitfield for items - - bugfix: Fixes being able to place things on space tiles with a z-layer destination. - - bugfix: Fixes security stunbatons knockdowning you even if you have baton resistance - trait - - bugfix: Mice won't try to path through walls to escape from sight and constantly - squeak. - - bugfix: Mice will stop running away from you if they can't see you any more. - - bugfix: Rats won't bite racks and tables while passing over them. - - bugfix: Fixes clientside lavaland lag on long rounds - - qol: Spirits of possessed blades (Chaplain's Null Rod Option) will be able re-try - selecting their name if it ends up to be filtered for any reason. - - bugfix: Getting stuck or trapping someone else in the DNA infuser - - bugfix: fixed mob biotypes being ignored when applying toxin damage and oxyloss - - rscadd: Added atmos holofans to metastation's ordnance lab. - SovietWomble, dessysalta, dopamiin: - - soundadd: the hygienebots speak now - softcerv: - - bugfix: Alter Form now longer shows parts that it shouldn't - - bugfix: Cryopods now remove players from the global list of joined players, stopping - the persistent scars system from runtiming -2023-01-16: - GoldenAlpharex, with Halcyon for the amazing sprites: - - rscadd: Towels! Wear them on your chest, your waist or your head, use them to - dry up those that are wet or to dry up liquid puddles. - - rscadd: You can wash towels in sinks, or wring them, to remove the reagents from - them, but the best way to have clean towels will always be a washing machine! - Wringing towels leaves a mess behind, unless you do it in a bucket, which will - make it transfer a portion of the liquids into it, losing some on the way. - - bugfix: Fixed ears being displayed at all times if you're wearing something on - your head, but not on your mask slot. - - bugfix: Fixed the mood buff for when you wash clothes. - - code_imp: Improved some of the code related to interactions between mops/reagent_containers - and liquid turfs, hopefully fixing some bugs on the way too! LT3: - - bugfix: Orange airlock lights and yellow firedoor lights now play nice with each - other - - bugfix: Orange airlock lights are properly aligned on external airlocks - Paxilmaniac: - - rscadd: Three new undershirt options have been added, a new non-cableknit version - of the turtleneck, as well as two varieties of buttondown shirt. - - balance: The HoP has had their PDH taken away, returning to them having an SC-2 - again. - - balance: The captain's PDH is no longer the suppressed version, if the captain - is shooting someone its gonna be loud as fuck as god intended. - - code_imp: Documents a skyrat change in command lockers that wasn't really documented - right :) + - qol: Tram controls unlock faster on arrival at a station + - imageadd: Minor improvements to station wayfinding signage + Mothblocks: + - admin: Added config for disabling station traits + RedBaronFlyer: + - soundadd: Added a new sound for stamping papers with a stamp. On an unrelated + note, there are reports of stamp-based suicides becoming more noisy. ShizCalev: - - bugfix: gorillas can now fuck people up again - - bugfix: Trading cards are no longer invisible when stacked. - - bugfix: You'll no longer constantly be spammed with messages if your fingers are - too big to interact with a computer's keyboard. - - bugfix: You can no longer interact with programs that were previously opened on - a computer if your fingers are too big to use the keyboard. - - bugfix: You can now look at computer screens even if your fingers are too big - to use the keyboard. - SkyratBot: - - qol: Removed the tech disk part of the ORM's UI as it was entirely unused, now - it's a little more compact with less scrolling needed. - - refactor: Autolathes, Limb growers, Biogenerators, ORMs and Smelters now share - techwebs with other machines of their types, rather than all make new techwebs - each time. This means they only build their nodes once, including hacked ones. - Instead of researching nodes on hacking the machine, they now show hacked ones - depending on if it's hacked. - - qol: miner console now displays the item's icons and has a minus button feature - to remove 1 item - - bugfix: Directional windows won't block construction of machine & compute frames - by the RCD - - rscdel: Atmospherics beret and black beret - - bugfix: The walls of the luxury shuttle no longer bend in strange directions. - SomeRandomOwl: - - bugfix: Fixed Bouncers/Service Guards not having access to Service. - - rscadd: Added a genetic infuser to genetics on Void Raptor - - rscadd: Added three Ordinance Data disks to Ordinance on Void Raptor - - bugfix: Moved the Disposals bin in the detectives office on Void Raptor - - rscadd: Added two detective access doors to security on Void Raptor, Detectives - now have access to evidence storage and interrogation - Tastyfish: - - bugfix: Liquid fires now visually respect the newly discovered third dimension - better. - YakumoChen: - - qol: Catnip bud contents changed so it can be made directly into tea from a ground - product, with water added. 50 potency bud, +25u water = 50u catnip tea. - Zonespace27: - - qol: Nukeops can now be any species instead of just human - nikothedude: - - rscadd: The medical labcoat has been added to the medidrobe and loadout. -2023-01-17: - LT3: - - soundadd: The Skyrat vote notification sound is back - - admin: Changed admin comm/fax notification sound to be less confusing + - imageadd: Added a bunch of missing suit storage item icons! There's still a number + left to make, but we're getting there! + Xander3359: + - balance: Origami kit costs 4 from 14, and is available at 100 reputation from + 150. + lnGoror: + - bugfix: fixed pAIs and simplemobs getting deaf when moving out of a headwear slot. +2023-01-04: + Addust: + - admin: The Shuttle Manipulator now has descriptions for the Infiltrator, the shuttles + that spawn in space ruins, and the escape pods. + Fikou: + - qol: makes modsuits with magboots have those pinned by default, pins active modules + on the admin suit, mining suit and the additional module of the ert suits + Iamgoofball: + - bugfix: Adds an engraving to the staff of healing regarding proper healing beam + usage. + Improvedname: + - bugfix: Adds missing contrabrand spawners to deltastation locker + - bugfix: fixes being able to instantly build carving blocks/mineral doors Melbert: - rscadd: Roundstart captains will now memorize the code to the spare ID safe. - rscadd: Traitors will now memorize the location and code to their uplink. @@ -718,6 +578,123 @@ - qol: Rulebook for TGC has been added to the TGC arena. - bugfix: Holographic TGC coins are no longer legal tender and cannot be inserted into your ID. + NamelessFairy: + - qol: Drone dispensers now tell you how much material they need per drone. + ShizCalev: + - bugfix: You'll now point when freaked out about something. + - code_imp: Added a unit test for ALL worn icons. + - bugfix: Fixed a bunch of broken worn icons! + - bugfix: Fixed a minor runtime which occurred when an airlock got deleted if an + AI was actively hacking it. + Time-Green: + - rscadd: You can now fly around the shuttle during transit! Woohoo! You can either + cling to the side or grab a jetpack and try and keep up with the shuttle! Carps + can move around freely in hyperspace + - qol: Increased shuttle hyperspace size from 8 tiles to 16 + jlsnow301: + - rscadd: 'Hope you saved for a rainy day: Added the ''Cursed'' quirk which causes + excessive slippage and... other difficulties.' + - bugfix: Fixed blob minions getting their own antag category + tralezab: + - bugfix: Removed some cheese strategies from burdened sect. +2023-01-05: + Kylerace: + - bugfix: tram consoles will no longer randomly depower if they return from an area + without power + MTandi: + - qol: Biogenerator shows default reagent containers instead of beakers + Mothblocks: + - bugfix: Fixes a bunch of cases of windows not being where they were supposed to + be, tables/chairs stacking on each other, and other very small stuff you've + never noticed before. + ShizCalev: + - bugfix: Crew AIs can no longer interact with ANY syndicate machinery (ie shuttle + computers, buttons, ect.) + - bugfix: Crew AIs can no longer attempt to track mobs on the syndicate base to + determine the gamemode. + - bugfix: Fixed Black Carpet and Paper Frames crafting recipes only giving you 1 + item in return. + ZephyrTFA: + - server: Preferences now support guests + kawoppi: + - rscadd: added reagent splashing animation for spilling reagents on things + - rscadd: added reagent splashing animation for spilling reagents onto floors + - rscadd: added reagent splashing animation for pouring reagents into hydroponics + trays + - soundadd: slosh sound now plays when spilling reagents on things, both directly + and by throwing + mc-oofert: + - rscdel: Removed Mining LTSRBT + - balance: Mining Vendors express option now has no cost changes and no cooldown, + but cargo delivery option is now 35% cheaper to encourage miners communicating + with cargo techs + san7890: + - code_imp: Nanotrasen has updated the copyright on their NToS Software to be valid + for the New Year! (It's 2563 now!) +2023-01-06: + LT3: + - admin: Admins can now get an audible alert for communications console messages + coming from the bridge + - spellcheck: Fixed an incorrect line in preferences readme.md + Salex08: + - bugfix: fixes not properly working checks with hydroponic reagents + ShizCalev: + - bugfix: You'll no longer see rotation failed messages when clicking on something + far away. + Tattle: + - bugfix: alien closets now deconstruct into alien alloy + Unit2E: + - bugfix: Death berry juice is poisonous now, like poison berry's + Vire, MrMelbert: + - bugfix: The engineering lobby and lathe are no longer public access + - bugfix: Doors will no longer be treated as public access when they have multiple + accesses set on them +2023-01-07: + A.C.M.O.: + - bugfix: Fixed the DNA Infuser's Goliaths infusion, which was not properly granting + its organ set bonus. Having all 4 goliath organs infused now makes you lava-proof + as expected. + Guillaume Prata: + - bugfix: Legion infested golem corpses can drop power tools again (Drill, Jaws, + Experimental Welder) but they were moved away from their pockets and into the + belt slot. + Jacquerel: + - balance: While Ian still enjoys being petted, his heart will now most closely + belong to anyone who gives him an expensive luxury dog bone. + - code_imp: Using an item which _can_ deal damage on a mob tracking hostile actions + (such as a dog) won't automatically be considered to be a hostile action if + you aren't actually hitting it with the item. + JohnFulpWillard: + - qol: Xenomorphs can now pick up xenomorph action figures. + LeDrascol: + - bugfix: Fixed the advanced mop displaying as a normal mop when held + Melbert: + - bugfix: Fixes runtimes from cursed people dying + Rhials: + - code_imp: Ghosts are now basic mobs! You might not notice any difference, but... + - code_imp: Ghost mobs now spawn with hair and sometimes facial hair. + - bugfix: backing out of the Test Card Packs debug menu will no longer cause a runtime + - bugfix: Validate Cards debug verb now gives feedback if no errors are detected. + ShizCalev: + - bugfix: Fixed the gulag item reclaimer sometimes not giving you all your items + back. + Striders13: + - qol: added a balloon alert to hulks trying to use cloak of shadows (they can't + use it) + SyncIt21: + - rscadd: RTD Rapid Tiling Device + - imageadd: Sprite for RTD + - code_imp: moved update_overlays() from rcd to obj/item/construction so anyone + can use it + - rscdel: cooldown of 3 seconds when changing turf type + - qol: Faster Turf decoration + - bugfix: check for stock parts that can be added to a machine frame by hand + - bugfix: RPED converts stock parts into datum parts before inserting it into a + machine frame only if possible. e.g. for scanning modules + san7890: + - bugfix: You should now no longer get a confusing message whenever you try to add + flour from a flour sack into a bowl. + timothymtorres: - soundadd: Candles will now use the match lighting sound when lit - soundadd: Light sources that burn will now have a welding hitsound - bugfix: Fix candle light behaving erratically @@ -731,86 +708,208 @@ once fuel is used - qol: Add burnt flares and melted candles to trash spawners - refactor: Refactor lighting items that use fuel to be more robust - - bugfix: Removed some cheese strategies from burdened sect. - - bugfix: improved maintenance eyes light detection. - - qol: Extinguisher cabiners are now opened and closed with right click instead - of alt+click. - - rscadd: Service borgs have a chisel now, make some statues! - - bugfix: Swiping the Crab-17 checkout machine too early will no longer instantly - explode it and lock everyone out of their bank accounts. - YakumoChen: - - qol: Departmental Batons can now be ordered for each department via departmental - orders, or directly from cargo. Requires Security access to open. -2023-01-19: - ATHATH: - - bugfix: The hypnosis from hypnogoggles can't be cured "early" by something weaker - than a staff of healing bolt. It still can be cured by removing the goggles, - of course. - LT3: - - admin: Changing the station status displays now generates a log entry - Melbert: - - bugfix: People should be stuck in infinite stamcrit less often. - Paxilmaniac: - - imagedel: The skyrat sprite override for wall mounted medical vendors will no - longer be - SkyratBot: - - bugfix: Polls are fixed - - bugfix: Fix inconsistent runtime spam from baseturf on startup - - rscadd: Adds garden gnomes. - - imageadd: Adds garden gnome sprites. - - qol: made the threshold page of air alarm use colloquial terms instead of code - terms. Added reset and disable buttons. - - qol: Air alarm's gas breakdown now displays the moles, percentage, and partial - pressure. - - bugfix: operating mode selection in air alarm will be red if the selected mode - is dangerous. - - bugfix: fixed the area atmosphere alarm button on air alarm not working. - - code_imp: told the game that hyper nob isn't dangerous. - - refactor: refactored the threshold values and operating mode of air alarms in - the backend. No changes expected except the ones stated above. - Zenitheevee: - - bugfix: Hotel portal anchor placement fails from moving are now failing successfully. - Zergspower: - - rscadd: Added Prescription Science Glasses - nikothedude: - - rscadd: Temporary flavor text now adds a small overlay to your character. - oniondry: - - bugfix: The original turtleneck undershirt is back. tralezab: - bugfix: Fixes Honorbound Sect not granting the right spell - vinylspiders: - - bugfix: fixed catsuits not rendering breasts correctly on players with taur bodyparts - - bugfix: fixed a bug which allowed for the battered sausage to be used as a crafting - ingredient for itself, causing dangerous infinite sausage loops - - refactor: changed battered sausage recipe so that you batter the sausage before - grilling it & cleaned formatting within modular food files - - imageadd: added a sprite for the cooked version of the battered sausage - - code_imp: added extra nutriment to cooked battered sausage to represent the battered - version being slightly more filling than plain old sausages - - code_imp: made beer batter reagent weakly alchoholic, it's 1/3 as alchoholic as - the beer it contains. so if you have nothing else...you can get drunk off it - now I guess. -2023-01-20: - Guillaume Prata: - - qol: APCs have contextual screen tips now. - JohnFulpWillard, sprites by Tramzz: - - rscadd: Added Maintenance tablet applications, applications that can't be cloned - or downloaded from the store, instead you can find one app in maintenance. - - balance: The Analyzer tablet application is also a maintenance tablet application - now. - Nerev4r: - - bugfix: Snails no longer have bones, and their unarmed damage is back to its proper - state. - RatFromTheJungle: - - rscdel: removed the PDA worn icon; again +2023-01-08: + Hatterhat: + - qol: Rapid Part Exchange Devices and their bluespace variants now automatically + drop their current lowest tier of parts, instead of all of their parts. + Iamgoofball: + - bugfix: Fixes being able to instantly create dense grilles + Jacquerel: + - rscadd: Space Carp seem to have begun associating the station with food and attempting + to enter from the outside, rather than simply congregating around solar panels. + Employees are advised that these are wild animals, and should not be fed. + - rscadd: Space Carp can intermittently teleport short distances, leaving a short + lived rift which other nearby carp will be attracted to follow them through. + JohnFulpWillard: + - bugfix: You can right-click microwaves again. + - qol: Medipen refillers now use balloon alerts and progress bars instead of to + chat messages and invisible timers + - code_imp: Medipen refillers now refill your pen instead of delete it and create + a new one. This also means that refilling them will leave the medipen in your + hand instead of drop it at the refiller's tile. + LT3: + - bugfix: Hilbert's tram call button is now linked to the correct tram + - imageadd: Hazard lights added to the tram collision counter + Melbert: + - bugfix: People should be stuck in infinite stamcrit less often. + - admin: Adds a warning to "View Runtimes" informing you (yes, you) that it can + (and will) crash the server if you attempt to render 100,000 runtimes into the + UI at once + NamelessFairy: + - bugfix: Beer nukes no longer runtime on detonation. + - admin: Admins can now modify what reagent beer nukes produce, now your parties + can be alcohol free! + - admin: Admins can now creature custom reagent scrubber overflows, TC trade 20TC + for superlube flood? + - bugfix: Autosurgeon overlays now correctly update when removing organs. + - bugfix: Autosurgeons now say what organ is removed from them when screwdrivered. + - bugfix: Single use auto-surgeons cannot be reloaded again. + - rscadd: Introducing a new holodeck map, the TGC Arena, featuring hologram projectors + for your trading cards. + - bugfix: Janitor and Intern TGC cards are now considered creatures rather than + just humans. + - balance: The price of card packs has been reduced from double a paycheck to 3 + quarters of one. + - balance: The number of cards available in the good clean fun vendor has been doubled. + - rscadd: Minor detectives now spawn with a candy cigarette and a flask full of + apple juice. + - balance: Candy Cigarettes added to the detective vendor. + - bugfix: Minor detectives no longer spawn with real cigarettes or real alcohol, + you'll need to ask you colleagues to buy you some, hopefully they wont arrest + you for trying. + Paxilmaniac: + - qol: A few recipes that were microwave only (like boiling rice, heating ready + donk, so on) can now also be made in an oven + ShizCalev: + - bugfix: Non-magic inclined mobs will no longer fire staffs while duel wielding. + flowercuco: + - qol: agent id now has screentips when you can attempt to steal access for it + khevy: + - rscadd: adds new type of glockroach, the mobroach + softcerv: + - balance: Moved the account console board to the service lathe + timothymtorres: + - bugfix: Fix inconsistent runtime spam from baseturf on startup +2023-01-09: + Iamgoofball: + - bugfix: Fixes boring changeling gameplay by making shrieks not work while ventcrawling. + Jacquerel: + - imageadd: New look and animations for the Heretic's transmutation rune + LT3: + - bugfix: Disposal pipes and cable wires now co-exist with the tram bridge + Profakos: + - bugfix: burn chambers will not get stuck on depressurizing while cycling to exterior + airlocks + - bugfix: using an airlock sensor will properly cycle the air inside the chamber + ShizCalev: + - bugfix: Fixed indestructible glass sometimes having the grill ontop of it instead + of underneath it. + SyncIt21: + - rscadd: UI for ordering bulk amount of stuff from ccargo + - qol: order bulk stuff from cargo more efficiently + - bugfix: clear cart button which now properly clears cart & refunds coupons + Thunder12345: + - rscadd: Added new fishnet style socks, in a choice of three lengths + Zonespace27: + - admin: Logbuddy should no longer fail to parse logs with multi-line adminhelp + replies + san7890: + - bugfix: New players connecting via an active Panic Bunker Interview System can + now close out the window once they have their interview approved by an admin. +2023-01-10: + Comxy: + - rscadd: Faithless will now also break lights and drag victims around + - refactor: Faithless into basic mob + Mothblocks: + - qol: New players will now get a contextual tutorial for how to switch hands and + drop items. + NamelessFairy: + - bugfix: Mice are no longer healed by mousetraps + Profakos: + - bugfix: adds missing sbiten glass style + Striders13: + - bugfix: fixed biosuits, nun robes, narsien hardened armor making your shoes invisible + Tastyfish: + - bugfix: The small carton no longer randomly disappears. + - bugfix: Pre-filled bottles of cola & nuka cola, and glasses of soda now have the + correct sprite. + Time-Green: + - bugfix: fixes wizard rod form infinitely travelling in hyperspace + timothymtorres: + - bugfix: Fix antags being revealed by hallucinations +2023-01-12: + Fikou: + - bugfix: fixes twohanded items not letting you switch hands + GoldenAlpharex: + - code_imp: Made the worn_icons unit test check the worn GAGS config rather than + the normal one. + LT3: + - imageadd: Tram controls are now side mounted, freeing up space. Even better, you + now have two of them! + - imageadd: Added a new accessible space on the tram for wheelchairs + - bugfix: Removed duplicate tram plate/platforms + - code_imp: Tram has its own floor subtype for the walls and windows + - rscadd: Emergency exit feature added for people who are silly enough to not carry + a crowbar + LemonInTheDark: + - bugfix: You can now properly start drifting after moving out of a drift + MiiyaBot: + - rscadd: Two new hairstyles! ("All the Fuzz" & "Over Eye (Izutsumi)") + - spellcheck: Renamed "Marginally shorter yet long bedhead" to "Shorter Long Bedhead" + - spellcheck: Renamed "BedHead 4X" to "Bedhead 4x" + - bugfix: Slight changes to "Jade", "Shorter Bedhead", "Bedhead 4x" Rhials: - - code_imp: The ninja module folder is now stored in the antagonists folder. - SkyratBot: - - bugfix: fixed give_important_for_life proc in species.dm, which is supposed to - be used to help ensure plasmamen (and potentially other races) are always spawned - with internals and such - - bugfix: fixed issue where plasmamen who are spawned without a plasmaman-specific - job outfit could spawn without internals and a suit, and just start dying immediately + - spellcheck: Head-spears are now named properly when using alternate spear types. + SyncIt21: + - rscadd: RPED can now pick up & install machine circuit boards in machine frames + - rscadd: RPED can pick up computer circuit boards for storage convenience but doesn't + install them + - bugfix: don't call after attack twice + - bugfix: normal RPED from behaving like an BRPED when installing stock parts in + an incomplete machine frame + - code_imp: datum stock part for every obj stock part + - refactor: all machines & dependent experiments to use datum stock parts + Zytolg: + - bugfix: Chemists can now properly open and close their desk windoor on Deltastation + san7890: + - balance: Due to materials costing a lot more than ever, Nanotrasen'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. + stanalbatross, thedonkified: + - rscadd: added the ability to make up to 10 individual highlights in tgchat, customise + their colours, and toggle if they highlight the whole message or not. Ported + from CM. + - rscadd: you can now use regex for text highlighting. The syntax is /[regex expression]/, + eg /dog[0-9]/. There are no quantifiers, but you can use capture groups. The + regex must read a minimum of two characters. +2023-01-13: + 1393F: + - bugfix: you can nolonger use a goldgrub as a shield to kill colossus + Fikou: + - qol: fixes chisels + Higgin: + - rscadd: Adds ear surgery to repair damaged ears/deafness. + PestoVerde, Imaginos, Wallem: + - imageadd: New material and ore sprites by PestoVerde & Imaginos + Profakos: + - bugfix: pancakes no longer show an error sprite when added to a stack + dawsonkeyes: + - bugfix: metal hydrogen golems no longer die to low pressures and cold temperatures + - bugfix: metal hydrogen golems are no longer solid white, and are now the actual + color of metal hydrogen + - balance: metal hydrogen golems are also now immune to most environmental threats, + and get more armor + san7890: + - bugfix: There is no longer a button on a window at the CentCom Thunderdome. +2023-01-14: + Jacquerel: + - bugfix: Dead basic mobs are no longer "dense" objects and can be stepped on. + Melbert: + - bugfix: Fixed a runtime from neck slices on headless mobs. + - qol: Neck sliced folk now have an examine message saying as much. + Rhials: + - qol: The Scrubber Clog event now gives an orbit popup to ghosts! + - bugfix: Bald/Shaved ghosts will no longer cause a runtime and spawn without a + name. + - bugfix: viewing the botkeeper app as an observer will no longer runtime. + - bugfix: The walls of the luxury shuttle no longer bend in strange directions. + ShizCalev: + - qol: Airlock interfaces will now open up automatically if access is restored early + while an AI is hacking it. + SuperSlayer0: + - qol: Pinpointers now tell what they are tracking when examined + timothymtorres: + - bugfix: Fix blood overlays on energy daggers + - code_imp: Add `NO_BLOOD_ON_ITEM` bitfield for items + tralezab: + - rscadd: Some prisoner backgrounds have more or less tattoos. + - rscadd: More Memories to collect involving fishing and getting converted +2023-01-15: + Comxy: + - bugfix: Fixes being able to place things on space tiles with a z-layer destination. + FernandoJ8: - bugfix: the examine text for damage now properly uses the most common examine text out of all the mob's limbs - bugfix: all robotic limbs now have the robotic damage descriptions (charring, @@ -981,6 +1080,70 @@ - bugfix: liquid pumps now show up in the RCD under the 'liquids' category instead of in a hidden blank one 2023-01-24: + Guillaume Prata: + - rscadd: Mothroach DNA infusion. For better or worse, anyone can get closer to + being a Moth person now! + Inari-Whitebear: + - spellcheck: fixed grammar/typo in Nanotrasen Pay System add + Jacquerel: + - bugfix: Mice won't try to path through walls to escape from sight and constantly + squeak. + - bugfix: Mice will stop running away from you if they can't see you any more. + - bugfix: Rats won't bite racks and tables while passing over them. + - bugfix: Syndicate 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. + JohnFulpWillard: + - refactor: Duplicating mobs now should now give properly functioning mobs, as duplications + in general have been reworked. Admins can feel free to use the pod feature on + people. + LemonInTheDark: + - bugfix: Fixes clientside lavaland lag on long rounds + Melbert: + - bugfix: Fixed not getting moodlet from freshly laundered clothing + - bugfix: Fixed durability tags not showing their ratings + Mothblocks: + - bugfix: Fixed chem dispensers keeping their upgrade chemicals even after stock + parts were downgraded. + NamelessFairy: + - bugfix: AI eyes, megafauna and robots will appear in the orbit menu NPC section + again. + - qol: Everything deadchat controlled will now be highlighted in the orbit menu. + Reco201: + - bugfix: Cyborgs turning their lights on and off can now be seen doing so. + Rhials: + - code_imp: Anomaly effects now have their own files, rather than being crammed + into a single, probably-too-large file. + ShizCalev: + - bugfix: Drunk scientists & the RDs rejoice! You can now reach the Ballmer peak! + - admin: Fixed a bunch of liver traits not being assignable. + SovietWomble, dessysalta, dopamiin: + - soundadd: the hygienebots speak now + Stonetear: + - bugfix: Mosin Nagant bolt sprites are now visible. It's like 5 pixels so not + a surprise nobody noticed for years. + SuperSlayer0: + - code_imp: Removes double CAN_BE_INTERN flag in chaplain and cargo tech job flags + - code_imp: Replaces a string in chemist departamental head variable with a job + define. + - bugfix: Fixes monkey heretics being unable to invoke their runes + - bugfix: Fixes security stunbatons knockdowning you even if you have baton resistance + trait + SyncIt21: + - bugfix: Getting stuck or trapping someone else in the DNA infuser + Tattle: + - admin: cyborg creation details (synced AI and default laws) are now logged + TheWolfbringer: + - rscadd: Added atmos holofans to metastation's ordnance lab. + san7890: + - qol: Spirits of possessed blades (Chaplain's Null Rod Option) will be able re-try + selecting their name if it ends up to be filtered for any reason. + tralezab: + - admin: Force Event no longer filters by tab when searching. + vinylspiders: + - bugfix: fixed mob biotypes being ignored when applying toxin damage and oxyloss +2023-01-16: A.C.M.O.: - bugfix: Fixed the DNA Infuser's Goliath Infusion and its organ set bonus. The Goliath hammer will now apply bonus attack damage as expected. @@ -992,32 +1155,305 @@ - bugfix: Fixed the DNA Infuser not allowing addition of dead creatures. - bugfix: Fixed buggy organ filtering code in the DNA Infuser which stopped it from infusing organs. - LT3: - - qol: Reduced volume of firedoor alarm sound loop - - bugfix: Tram hit counter now only increments when actual players are hit. No more - free points hitting the horrible goose - OrionTheFox: - - imagedel: deleted modular newscaster override, they've been reverted to new TG - sprites - - bugfix: Randomized round-start posters now pull from the selected poster's icon - file, meaning TG Downstreams can have them in a seperate .dmi (Fixes Skyrat - poster icons) - Paxilmaniac: - - imagedel: The icon override for portable scrubbers and pumps has been removed, - making us use the tg version again - RimiNosha: - - qol: The Synth charging cable is now far more consistent, actually stops when - you're full, and can no longer can be indirectly used as a powersink on a department's - doors. - - balance: Synths should no longer get guaranteed traumas from literally any kind - of EMP, light EMPs now have no effect on synth brains. - - bugfix: Fixed a runtime when a synth brain outside a body gets EMPed. - - code_imp: Synth surgery code is now no longer unreadable. - - bugfix: Fixes synths being able to gain charge from being EMPed, despite flavor - text stating otherwise. - - qol: Renames "positronic brain carcass" to "compact positronic brain" to match - the rest of the synth naming scheme. - - balance: Synth ears now take damage on EMP, like all their other organs. + JohnFulpWillard: + - bugfix: If there are several techwebs, sabotaging the master server of one of + them will no longer cut research point generation of the rest. + - qol: Removed the tech disk part of the ORM's UI as it was entirely unused, now + it's a little more compact with less scrolling needed. + - refactor: Autolathes, Limb growers, Biogenerators, ORMs and Smelters now share + techwebs with other machines of their types, rather than all make new techwebs + each time. This means they only build their nodes once, including hacked ones. + Instead of researching nodes on hacking the machine, they now show hacked ones + depending on if it's hacked. + Sealed101: + - bugfix: pinpoint machine scanning experiments work again (again) + ShizCalev: + - bugfix: gorillas can now fuck people up again + - bugfix: You'll no longer constantly be spammed with messages if your fingers are + too big to interact with a computer's keyboard. + - bugfix: You can no longer interact with programs that were previously opened on + a computer if your fingers are too big to use the keyboard. + - bugfix: You can now look at computer screens even if your fingers are too big + to use the keyboard. + - bugfix: Trading cards are no longer invisible when stacked. + SmoSmoSmoSmok: + - qol: miner console now displays the item's icons and has a minus button feature + to remove 1 item + SyncIt21: + - bugfix: Directional windows won't block construction of machine & compute frames + by the RCD + Wallem: + - bugfix: Uranium, Diamonds, and Bananium now update visually in the techfab UI + tralezab: + - rscdel: Atmospherics beret and black beret +2023-01-17: + Fikou: + - bugfix: fixes generic tanks not being printable + - bugfix: fixes being able to eat, use pills etc through gas masks and such + LT3: + - admin: Changed admin comm/fax notification sound to be less confusing + Melbert: + - refactor: Refactored blindness and nearsightedness. Important to note is that + all mobs are naturally blind until their eyes are actually created. + - refactor: Refactored "is covered" procs + - bugfix: Less sources of blindness now cause permanent blindness. Includes the + "Blind" Spell and "Blind Sting" from changelings. + - admin: Ahealing someone no longer flashes the blind overlay for 1 tick. + - admin: I removed an unused (sort of) inaccessible admin verb that allowed you + to toggle the tint from all welding helmets (and clothing) (and lack of eyes) + in existence, let me know if you want similar back + - balance: Changeling "Blind Sting" now causes eye damage (enough to blind) rather + than arbitrarily forcing blindness. + - balance: Visionloss virus symptom now causes eye damage (enough to blind) rather + than arbitrarily forcing blindness. + - balance: Oculine has been reworked slightly. Prior, Oculine arbitrarily healed + blindness and nearsightedness from eye damage reagrdless of how damaged the + eyes were, and applied blur on success. Now, Oculine just heals eye damage, + and blindness / nearsightedness is restored in the process. There is now a probability + every tick that eye blur is applied based on how pure the oculine is while healing + very damaged eyes. + - balance: Pacifists can no longer eyestab. + - balance: Any clothing item that covers your eyes contributes to getting the bonus + while sleeping, and to removing temporary blindness faster + Mey-Ha-Zah: + - bugfix: improved maintenance eyes light detection. + NamelessFairy: + - bugfix: Maintenance adapted eyes no-longer prevent the game from compiling + - qol: Inspecting a cell charger now tells you the type of cell in it. + - qol: Rulebook for TGC has been added to the TGC arena. + - bugfix: Holographic TGC coins are no longer legal tender and cannot be inserted + into your ID. + Rhials: + - bugfix: Swiping the Crab-17 checkout machine too early will no longer instantly + explode it and lock everyone out of their bank accounts. + - rscadd: Adds the Terrify spell and Terrified status effect. Terrified victims + will suffer increasingly detrimental effects until they're calmed down. + - balance: Nightmares can now cast the Terrify spell on victims to plague their + prey with. Attacking a Terrified human with your open hand will trip them up. + - imageadd: Adds status effect and spell icons for Terrify/Terrified. + - spellcheck: fixes a typo in the message for consuming a nightmare heart. + SyncIt21: + - bugfix: spelling of Airlocks + - bugfix: checks for toggling silo link and for selecting machine, furnishing designs + - bugfix: properly remove the stock part from the RPED after exchanging it + - refactor: renames datum parts above tier 1 accordingly to their tier + Thunder12345: + - qol: Extinguisher cabiners are now opened and closed with right click instead + of alt+click. + Zergspower: + - bugfix: ERT Headsets have the proper key + axietheaxolotl: + - imageadd: cargo's jumpskirt has been shortened to help fit in better with the + jumpsuit's shorts. + tralezab: + - balance: Ceremonial blades no longer wound. +2023-01-18: + Comxy: + - rscadd: Adds garden gnomes. + - imageadd: Adds garden gnome sprites. + Fikou: + - rscadd: Atmospheric Gloves, thick gloves that are fully fireproof and fire protective + and let you fireman carry people faster. + - bugfix: fixes engine goggles starting with darkness vision + - qol: firefighter helmets can now enable a welding visor + - qol: welding hardhats change mode with right click instead of altclick + - balance: firesuits no longer protect your hands + Mothblocks: + - bugfix: Polls are fixed + SuperSlayer0: + - code_imp: Now species to which are changed necromantic stone targets are determinated + by a variable rather then just skeleton species + YakumoChen: + - rscadd: Service borgs have a chisel now, make some statues! +2023-01-19: + A.C.M.O.: + - bugfix: Fixed buggy organ filtering code in the DNA Infuser which stopped it from + infusing organs. + Autisem: + - rscadd: New circuit component, list pick! + - bugfix: Pickle crafting no longer gives an empty beaker + - bugfix: Pickle crafting costs/gives 10 cucumbers/pickles + Fikou, a hood by Viro: + - refactor: humanoid mobs and cardboard cutouts automatically generate their sprites, + they no longer will be outdated + Guillaume Prata: + - qol: APCs have contextual screen tips now. + JohnFulpWillard, sprites by Tramzz: + - rscadd: Added Maintenance tablet applications, applications that can't be cloned + or downloaded from the store, instead you can find one app in maintenance. + - balance: The Analyzer tablet application is also a maintenance tablet application + now. + LT3: + - bugfix: Tramstation's west wing is reconnected to the power grid + - admin: Changing the station status displays now generates a log entry + - bugfix: Tramstation's exterior is now in the correct area, no longer marked as + Lavaland + - bugfix: You can now create new areas on Tramstation's asteroid turfs + Rhials: + - code_imp: The ninja module folder is now stored in the antagonists folder. + Time-Green: + - bugfix: Strange geysers have random reagents again + - bugfix: Geysers regen reagents again + YakumoChen: + - bugfix: The tables on the bridge of the NTSS Independence are now usable. Fancy! + Zytolg: + - bugfix: Fixed the Survivalist N2O System + scriptis: + - rscadd: a goose for the tram to run over +2023-01-20: + Guillaume Prata: + - rscadd: Bolter Wrench as a new tool, it can raise the bolts of airlocks regardless + of it's power status to smoother station repairs. It can be printed and is unlocked + on the same tier as RCD. It can also rarely be a mail gift for engineers. + Iamgoofball: + - bugfix: Fixes players bypassing the gas mask FOV restrictions with biohoods that + do almost everything the mask does without an FOV + Inari-Whitebear: + - bugfix: Firebots no longer attempt to extinguish themselves constantly + Melbert, That REALLY Good Soda Flavor, FatFat, AndreyGusev: + - rscadd: Spacemen can now have varying height. (Admin only for now) + - rscadd: Dwarfs are now slightly shorter, but look way better. + NamelessFairy: + - qol: Theres now a visual indicator when you attempt to grab an object or person + restrained by the HAUL gauntlets. + PositiveEntropy: + - rscadd: 'Adds a new short length haircut: the Chin-Length Bob Cut!' + SomeRandomOwl: + - admin: Modified the Play Internet Sound Verb so it now displays extra info about + any song being actively played as well as showing the link + Wallem: + - imageadd: Made the station's iron sheets less shiny to increase sprite legibility. + ZephyrTFA: + - bugfix: Canisters no longer keep their shielding when their shielding cell fails + Zergspower: + - qol: Protolathes and the like had their printable items categorized further + - bugfix: fixes a few uncategorized items in protolathes and the like + - refactor: Cleaner techweb code with more categories to break apart individual + printable items at proto/mech fabs + jlsnow301: + - qol: The orbit menu now sorts antagonists into groups more effectively. Some get + new named groups. + - admin: Traitor panel should have slightly more sane categories. + - rscadd: Many minor antagonists now have "objectives". + - refactor: Refactors code in several antag datums. + vinylspiders: + - bugfix: fixed give_important_for_life proc in species.dm, which is supposed to + be used to help ensure plasmamen (and potentially other races) are always spawned + with internals and such + - bugfix: fixed issue where plasmamen who are spawned without a plasmaman-specific + job outfit could spawn without internals and a suit, and just start dying immediately +2023-01-21: + LT3: + - bugfix: Kilostation comfy chairs now provide the correct stack of iron on deconstruction + PositiveEntropy: + - imageadd: Resprites the detective's wardrobe! + Rhials: + - bugfix: a wall covered by a screen on runtimestation has been modified into a + reinforced wall. + SuperSlayer0: + - bugfix: Fixes reverse revolver sprite being swapped to normal revolver sprite + - balance: Nerve splicing surgery now additionaly reduces stamina damage taken by + 20% + Trigg: + - bugfix: Admins - Saving a VV outfit will no longer save their cached_ref variable, + which caused problems when the game tried to use that cache on another round. + Existing broken outfits will need to be loaded and saved again. + mc-oofert: + - rscadd: Added a new emergency shuttle, the Venture +2023-01-22: + Melbert: + - qol: RTD fits in toolbelts. + NamelessFairy: + - bugfix: Viscerators are no longer invisible. + Timberpoes: + - bugfix: Mice given sentience through intelligence potions no longer immediately + consume the body and soul of the person whom uplifted them. + justricky21: + - spellcheck: small amendment on pet carrier + timothymtorres: + - rscadd: Add torches, porcini mushroom seeds, towercap seeds to ash walker ruin. + - rscadd: Change drying racks to not require power. + - rscadd: Add crafting recipe for smoking pipe that uses wood +2023-01-23: + Ed640: + - bugfix: fixed Item scaling objects not properly scaling in inventory slots. + Fikou: + - rscadd: You can now craft mannequins with wood or plastic. + GoldenAlpharex: + - balance: Water now makes you wet on touch and vapor application, with vapor being + much less effective than touch. Yes, that means you can now spend two minutes + putting someone out with a spray bottle full of water! + - bugfix: Being wet no longer causes you to be EXTRA flammable, and instead properly + protects you from catching on fire. If you're wet enough, of course. + Inari-Whitebear: + - bugfix: Fixed integrated circuit component menu search crashing on certain symbols + being entered. + LT3: + - spellcheck: Added missing event panel description for Tram Malfunction + - bugfix: Portable atmos machinery is layered correctly + Melbert: + - rscadd: Added a new random event, "Radiation Leak". A random machine starts to + emit radiation and toxic fumes. Engineers may be able to stop it with their + tools. + - rscadd: The "Radioactive" gene from genetics will now emit rads when on stasis + or dead, rather than just while you're alive. + OrionTheFox: + - bugfix: Randomized round-start posters now pull from the selected poster's icon + file, meaning TG Downstreams can have them in a seperate .dmi + Rhials: + - balance: The Magnitis disease will now hurl objects at infectees at higher stages. + Watch your head! + Ryll/Shaps: + - bugfix: You can no longer climb ladders while buckled to an anchored object + SmoSmoSmoSmok: + - qol: u can now search for players in the messenger by typing their name or their + job + san7890: + - bugfix: Deconstructing deep friers should now work properly. + timothymtorres: + - qol: Allow illiterate people to play slot machines + unit0016: + - spellcheck: Wire Terminals' Description now informs the player that they're an + input. +2023-01-24: + BlueMemesauce: + - code_imp: The access requirements at the end of supply crate descriptions are + now automatically generated + - bugfix: Supply console now tells you what access each crate needs to be privately + purchased + GoldenAlpharex: + - bugfix: Species that don't suffer from hunger can now properly open the cooking + menu. + Inari-Whitebear: + - bugfix: Tape recorders are not deaf anymore + JohnFulpWillard: + - bugfix: Hacked autolathes and Limbgrowers can now properly print things again. + LT3: + - qol: Reduced volume of firedoor alarm sound loop + - bugfix: Tram hit counter now only increments when actual players are hit. No more + free points hitting the horrible goose + OrionTheFox: + - imagedel: deleted modular newscaster override, they've been reverted to new TG + sprites + - bugfix: Randomized round-start posters now pull from the selected poster's icon + file, meaning TG Downstreams can have them in a seperate .dmi (Fixes Skyrat + poster icons) + Paxilmaniac: + - imagedel: The icon override for portable scrubbers and pumps has been removed, + making us use the tg version again + RimiNosha: + - qol: The Synth charging cable is now far more consistent, actually stops when + you're full, and can no longer can be indirectly used as a powersink on a department's + doors. + - balance: Synths should no longer get guaranteed traumas from literally any kind + of EMP, light EMPs now have no effect on synth brains. + - bugfix: Fixed a runtime when a synth brain outside a body gets EMPed. + - code_imp: Synth surgery code is now no longer unreadable. + - bugfix: Fixes synths being able to gain charge from being EMPed, despite flavor + text stating otherwise. + - qol: Renames "positronic brain carcass" to "compact positronic brain" to match + the rest of the synth naming scheme. + - balance: Synth ears now take damage on EMP, like all their other organs. SkyratBot: - imageadd: Two new corporate themed posters. - bugfix: Tape recorders are not deaf anymore @@ -1033,6 +1469,53 @@ - bugfix: fixed a bug where petri dish smartfridges could not be constructed from a circuit board - rscadd: Burn Medkit to Mining Vendor + Mey-Ha-Zah: + - rscadd: Burn Medkit to Mining Vendor + Mothblocks: + - spellcheck: Cucumber greek is now Greek cucumber + - spellcheck: Fixed attack verbs on the greek cucumber + Potato-Masher: + - bugfix: Morphs now properly move faster when disguised rather than slowing down. + Profakos: + - bugfix: Bundles of disposal packages that contain a wrapped parcel will be now + successfully redirected by the wrapping sorters + SuperSlayer0: + - bugfix: Wielded high frequency blades no longer ignore pacifism + - code_imp: Replaced some random() procs in lavaland elite code with prob() procs + - bugfix: Monkey cultists are now able to invoke cult runes + SyncIt21: + - bugfix: bluespace light replacer from fixing lights/turfs containing lights not + in its line of sight + - bugfix: beaming any turf even those not containing lights from causing lag + Tattle: + - qol: urinals and noticeboards can be handcrafted + - qol: pod computers can be deconstructed + - qol: fireaxe cabinets, mech removal cabinets, and mirrors can now all be crafted + Tattle, Kryson: + - qol: light switches, request consoles, telescreens, and ticket machines can now + all be printed from lathes + Wallem: + - balance: Kheiral Cuffs now cost 750 mining points instead of 2000. + Wallemations: + - rscadd: Bartenders can now mix up the Mississippi Queen for those willing to take + the plunge. + Winter Schock: + - bugfix: Blind doll with monophobia dont get stress while someone in 1 tile range + YakumoChen: + - imageadd: Two new corporate themed posters. + ZephyrTFA: + - bugfix: NanoTrasen Engineering has identified and resolved an issue with MechOS + that prevented diagnostics for internal shorting + mc-oofert: + - bugfix: Monkey Humans no longer have their AI turned on upon revival + san7890: + - bugfix: Spacemen with a clear lack of genetics powers can no longer bend space + and time to pull out pH indicator strips. + - bugfix: Nanotrasen has pushed an update to their Transit System Consoles, which + just makes sure the buttons look visually appropriate. + timothymtorres: + - bugfix: Fix ordance bomb site being a safe teleport area after surviving the heretic + minigame - soundadd: Chisels now make sculpting sounds when used on carving blocks - qol: Chisels now give balloon alerts when selecting a target, cancelling, or sculpting - qol: Chisels used on carving blocks that were interrupted will now continue @@ -1096,126 +1579,257 @@ - bugfix: vibebot being invisible - qol: Inspecting a trading card or card hologram will now let you see the full enlarged card art. + vinylspiders: + - bugfix: toilet bongs crafting recipes + - bugfix: fixed crafting itself + - refactor: cleaned up some old code in the recipes file, added support for structures + in recipes + - bugfix: fixed a bug where petri dish smartfridges could not be constructed from + a circuit board +2023-01-25: + Cenrus: + - balance: Harvesters are now not affected by drag slowdown. + LT3: + - code_imp: Tram hit counter typepath check is changed to be more accurate in player + vs. goose detection + - bugfix: Wires and pipes again rest on top of lattice catwalk + NamelessFairy: + - rscadd: The TGC arena on the holodeck now features display panels to track each + player's life shards and mana. + - qol: Slightly increased the amount of space on the TGC holodeck arena's tables + by removing the windows on either side of the player. + - qol: Inspecting a trading card or card hologram will now let you see the full + enlarged card art. + SyncIt21: + - bugfix: vibebot being invisible + - rscadd: Rapid wiring device + - imageadd: Sprite for RWD + Xander3359: + - bugfix: Deltastation - Virology's food dispenser isn't blocked by a rack anymore. + jlsnow301: + - refactor: Crew records have been refactored. + - refactor: Medical records -> TGUI + - refactor: Security records -> TGUI + - refactor: Warrants console -> TGUI + - qol: Players are now alerted when their fines are paid off. + - qol: Cleaned up sec hud examination text. + - qol: Adding and deleting crimes is easier. + - qol: Writing crimes in the console sets players to arrest. + - qol: You can now mark someone as a suspect through sec hud. + san7890: - bugfix: 'After over a year of continuous research, the Syndicate have finally managed to crack Nanotrasen''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.' - - rscadd: The TGC arena on the holodeck now features display panels to track each - player's life shards and mana. - - qol: Slightly increased the amount of space on the TGC holodeck arena's tables - by removing the windows on either side of the player. - SomeRandomOwl: - - admin: Added EVENT_CATEGORY_ENGINEERING To the supermatter surge event so that - it can now show up in the trigger event panel for admins. - softcerv: - - rscadd: Adds in NIFs, see https://github.com/Skyrat-SS13/Skyrat-tg/pull/16865 - for more details - tf-4: - - bugfix: fixed megafauna crusher kills and crusher achievements depending on megafauna - having crusher loot. Legion Crusher should now be obtainable as a result. 2023-01-26: - GoldenAlpharex: - - rscadd: Added eight new dishes to Hemophages, most of which can be either crafted - via the Hemophage Food subcategory in the crafting menu, or through microwaving! - - rscadd: Added the Bloodshot drink, being the new racial drink for Hemophages! - It restores blood at the rate Bloody Mary used to restore blood before this - update. It's also the intended way to deal with bloodloss via drinks, which - means it'll also work on those that aren't full on blood! It might gross you - out if you don't need it, however. - - rscadd: Added the Taste Suppressor reagent, which allows you to eat food you might - not like by making you completely unable to taste anything. It's not a great - solution, but hey, it works, even for Hemophages! - - balance: Bloody Mary now restores blood at a third of its previous speed. - - balance: Hemophages can now only eat food and drink reagents (via ingestion) that - will help their body recovering some blood volume. They now need to use the - Taste Suppressor reagent to be able to eat everything else, at the cost of not - really tasting anything they eat while it's in their system. - - imageadd: Added some new sprites for the new Hemophage food and drinks! - LT3: - - imageadd: New jacket and jeans for a blue tajaran - Nerev4r: - - bugfix: The Round Shell for snails should no longer be invisible. - Useroth: - - rscadd: Added a donator check to the bonus character slots and upped their amount - to 50. -2023-01-27: + Autisem: + - bugfix: You can print the new list pick and associative list pick components + - bugfix: Associative list pick works as intended now + JohnFulpWillard: + - qol: Mining points is now tied to bank accounts instead of individual IDs, so + they transfer over in cases of an ID replacement. LT3: - bugfix: Fixed the tram not exploding when it's supposed to + SmoSmoSmoSmok: + - qol: you can now search for items on the mining vendor + - bugfix: item prices will no longer appear as NaN + SyncIt21: + - rscadd: 'more designs for the rcd + + refactor:` try_wallmount()` to return true only after successful mount' + - bugfix: '`apc_tool_act/rcd_act()` incorrecly checking for simple circuits upgrade + in the wrong variable' + - bugfix: newly created APC's not assigning themselves to their areas. + - bugfix: rcd building structures [walls, airlocks etc] on turf's that already have + structures on them + Time-Green: + - refactor: External organs have been near-completely refactored. + - admin: Admin-spawned external organs will load with a random icon and color + - bugfix: fixes angel wings not working for non-humans (it was so fucking broken) + - bugfix: fixes external organs being invisible if they werent initialized with + a human + jlsnow301: + - bugfix: Sec huds should properly label targets with the new record system + mc-oofert: + - bugfix: venture shuttle no longer docks on purchase + san7890: + - bugfix: 'All Mobs (including Basic mobs) are now able to suicide. (warning: some + exclusions remain)' +2023-01-27: MMMiracles: - bugfix: Regular asteroid turfs now dig up regular asteroid sand instead of the basalt variant from Lavaland. - Nerev4r: - - rscadd: Snails can now clean floors they crawl over. - OrionTheFox: - - bugfix: fixed sports bra w/ boyshorts not using its digi variant - RatFromTheJungle: - - bugfix: the blueshield's have collectively remembered to pack ballistic plates - in their vests from now on. - SkyratBot: - - bugfix: You can print the new list pick and associative list pick components - - bugfix: Associative list pick works as intended now + Mothblocks: + - rscadd: Added a new menu that shows on Escape. + Xander3359: + - bugfix: RD has access to the AI SAT on deltastation + timothymtorres: + - rscadd: Add a pair of leather gloves to weed control crate + - balance: Mobs with the PLANT biotypes (venus flytraps, pod people, killer tomatoes) + are now much weaker vs scythes, goats, and plantbgone. + - balance: Plantbgone is now more effective at destroying weeds. + - balance: Regular scythes are now a sharp object + - bugfix: Fixed scythes, goats, and plantbgone not affecting flower bud vines. + - bugfix: Thick and botanical gloves not protecting from thorns + - bugfix: Golems not having pierce immunity from thorns + - bugfix: Runtime where vines tried to spread into null turf + - bugfix: Runtime where null vines that were destroyed were trying to spread to + nearby turfs + - soundadd: Add eat food sound when goats eat plants + - code_imp: Improved goat targeting code + - code_imp: The bane element now accepts `mob_biotypes` bitflags as an argument. - qol: Add shovel to cargo lathe - - qol: Mining points is now tied to bank accounts instead of individual IDs, so - they transfer over in cases of an ID replacement. - vinylspiders: - - bugfix: toilet bongs crafting recipes - - bugfix: fixed bug with crafting that led to unexpected behavior; e.g. recipe requirements - not being consumed, machinery being consumed when they shouldn't be - - refactor: cleaned up some old code in the recipes file, added support for structures - in recipes 2023-01-28: - Ebin-Halcyon: - - imageadd: The Syndicate 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 - and let you fireman carry people faster. - - bugfix: fixes engine goggles starting with darkness vision - - qol: firefighter helmets can now enable a welding visor - - qol: welding hardhats change mode with right click instead of altclick - - balance: firesuits no longer protect your hands + Unit2E: + - bugfix: Strange reagent once again spawns angry plants when added to hydroponics + trays! 2023-01-29: - Crumpaloo: - - imageadd: 20 new medium-long to short feminine hairstyles, check near the end - of the hairstyles list for more info! - GoldenAlpharex: - - qol: 'Added the round ID to the round starting message in the #game-alert channel.' - SkyratBot: + A.C.M.O.: + - refactor: Refactored breathing, mostly check_breath, for Carbons and lungs organ. + - rscadd: Added the space-breathing trait for lungs. + - bugfix: Fixed the Space Carp DNA infusion to apply the Spacewalk trait, allowing + you to fly through space. + - bugfix: Fixed the Space Carp lungs, allowing you to breathe in space with them. + - bugfix: Fixed gas status indicators re-playing their on-throw animation when they + are refreshed. + - bugfix: Fixed gas status indicators getting stuck to the screen in some situations. + - bugfix: Fixed gas side effects, such as euphoria and hallucinations, to reset + when expected. + - bugfix: For Humans, fixed Miasma only being consumed from the air when Helium + is present. + Ebin-Halcyon: + - bugfix: The Paramedic cap is now the same color as their jumpsuit again. + Fikou: + - imageadd: secborgs are red again + Helg2: + - rscadd: Wings for fly persons from flight potion + LT3: + - bugfix: Tram platform no longer magically levitates objects when the tram walls + are destroyed or dismantled + NamelessFairy: - bugfix: You can now set life and mana panels to 0 life/mana. + Profakos: + - bugfix: The ORM's input and output lights are once again visible + - bugfix: Traitors discounts stocks are once again limited to one item + Rhials: + - 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. + SuperSlayer0: + - qol: Posters now tell that you can trap them with a glass shard when examined + - balance: Space dragon fire breath no longer damages allied space carps + Time-Green: + - qol: Hardcore random gets a sixpack + Unit2E: + - spellcheck: Heretic has received a minor grammar and spelling check over. Wrong + kind of heresy, there. + Vladoricious: + - qol: Nuclear PDAs now actually work like a PDA should, with the power to download + normal programs and delete them too. The nerds over at Cybersun even installed + a new "Why Fy Dry Ver", allowing you to download your programs while still on + the base! + - bugfix: As a result, Lone Ops will no longer get scammed out of over 1/5th of + their TC when buying the Detomatix cartridge and Midround Traitors with stolen + Nuclear PDAs will not be denied an uplink. + lizardqueenlexi: + - bugfix: Operating computers can now display alternative steps during repeatable + surgery steps. + ophaq: + - qol: Musicians rejoice! You can now interact with the instrument UI while laying + down. + - rscadd: Adds a new crate to cargo, the "Amphibian Friends Crate!" Gives you one + frog and one axolotl. + san7890: + - bugfix: Basic Mobs are now able to deathgasp. + - qol: The error message that shows up when APCs fail due to a Grid Check (powernet + failure) looks a little bit nicer now. + - balance: After an unfortunate event occuring when some nuclear operatives took + the ship to a Fireworks Store, the Syndicate have re-engineered their bomb cores + to only explode when electronically triggered by the bomb shell itself. The + payload inside a standard syndicate bomb can not be exploded with another explosion, + you must keep it in the bomb machinery for it to actually do some explodey stuff. + the-orange-cow: - bugfix: Mint Toxin(a toxin) has been changed to Mint Extract(a food). The chef's mint can once again gib, fatties beware. - - imageadd: secborgs are red again + timothymtorres: + - qol: Add clown firing pin to techweb + - qol: Add advanced fire extinguisher to techweb + - qol: Add mining scanners to techweb + - qol: Add pickaxe to basic tools techweb + vinylspiders: - imageadd: new inhand sprites for the holy flask - bugfix: chaplains will no longer look like they are carrying a beer bottle when holding their holy flask - Twaticus, sergeirocks100: - - rscadd: Boyshorts have been added to the underwear selection. - vinylspiders: - - bugfix: cortical borer hosts who have ageusia will no longer receive a "you get - a strange aftertaste of ..." message 2023-01-30: - SkyratBot: - - qol: The error message that shows up when APCs fail due to a Grid Check (powernet - failure) looks a little bit nicer now. - - 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. + Ebin-Halcyon: + - bugfix: Headsets now have their old worn sprites back, did you ever notice it? + Holoo-1: + - bugfix: Precision of purity scanners has been increased + JohnFulpWillard: + - config: There's now a config-optional announcer for a round ending. + - balance: The R&D monitoring console now shows R&D consoles and their locations. + - refactor: The R&D monitoring console now has a nice TGUI menu. + Melbert: + - bugfix: Maybe fixes some issues with spirit holding, particularly relating to + it being in-exorcism-able. + Rhials: + - bugfix: The chemical scanner will now properly display that "no" reagents are + present in a subject when only invisible reagents are present. + Shadyyy66: + - rscadd: Time and space has destabilized even further due to Nanotrasen 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! + ShizCalev: + - bugfix: Fixed the cops not being called when minors try to purchase cigarettes + from vending machines. + Timberpoes: + - admin: When a player-owned mob is deleted from the game world, a stack trace is + now dropped in the runtime logs. This allows admins and coders to investigate + these issues easier. + itseasytosee: + - rscdel: You are less likely to see underwear in places it logically should not + be. + jlsnow301: + - admin: Wanted statuses are now better logged by the records console + san7890: + - qol: Some mob suicides now have a message that shows to blind people or people + that didn't actually witness the suicide, pretty cool. + the-orange-cow: - spellcheck: After one false advertising lawsuit too many, Nanotrasen 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 - kind of heresy, there. - - qol: Add advanced fire extinguisher to techweb - - bugfix: Operating computers can now display alternative steps during repeatable - surgery steps. - Zenitheevee: - - qol: Most ghost roles now have bank accounts + their account ID in memories - - qol: Freighter + BMD now have loadout enabled -2023-01-31: - Zonespace27: - - bugfix: Borgs should no longer be able to enter gateways under any circumstances + vincentiusvin: + - bugfix: fixed air alarm breaking on gasless tiles. vinylspiders: - - bugfix: gets rid of some warnings on server start - - qol: new mapping helper for when you want a door that requires centcom or captain - access + - bugfix: adds some messing bitfield defines for turf_flags +2023-01-31: + ATHATH: + - balance: Most energy sword-like weapons have had their demolition_mod increased + to 1.5x (from 1x). This affects damage vs. robots, objects, structures, etc. + Energy scalpels did not receive this buff. + Jacquerel: + - bugfix: You can now revive 'basic mobs' with a Lazarus Injector, such as dogs, + cows, axolotls, or carp. + - bugfix: The same category of mobs can also now be effected by the Runic Golem + Dominate spell. + - bugfix: Basic Mobs will switch target if they can no longer attack their current + target; meaning that if you become a Bileworm's friend it will stop attacking + you. + - balance: Mobs injected with the Lazarus Injector while it is EMPed will no longer + attack other mobs revived by EMPed Lazarus Injectors. + - balance: The carp migration event won't trigger if there are fewer than 12 players. + OrionTheFox: + - bugfix: fixed fire cabinet examine text falsely saying to alt-click to open/close; + it now has contextual screentips, and uses balloon alerts when relevant + SyncIt21: + - refactor: stack components no longer exist inside a machine's component_parts + - refactor: move component printer & module duplicator circuitboards into machine_circuitboards.dm + jlsnow301: + - rscadd: You can print universal scanners (export scanners, price taggers, sales + taggers) from the lathe again + tralezab: + - refactor: Refactored a bunch of admin-related event code, hopefully you won't + notice much + - admin: '... But you specifically may notice some minor differences. Raw inputs + changed into tgui ones, minor soul removal, etc.' diff --git a/html/changelogs/archive/2023-02.yml b/html/changelogs/archive/2023-02.yml index 6c6c4b99b04fc..8a297f6ae1639 100644 --- a/html/changelogs/archive/2023-02.yml +++ b/html/changelogs/archive/2023-02.yml @@ -17,6 +17,13 @@ LT3: - bugfix: Tram platform no longer magically levitates objects when the tram walls are destroyed or dismantled + - bugfix: Fully fixed the DNA Infuser, which will now infuse organs as expected. + - bugfix: Fixed flyperson species transformation and organ set bonus, which was + throwing a runtime. + - bugfix: Fixed many typos in organ-related source code. + JohnFulpWillard: + - bugfix: the MODsuit control maint app now links up to MOdsuits. + LT3: - imageadd: Hilbert Research Facility's tram controls have finally been picked up off the floor and mounted to the wall - bugfix: Hilbert Research Facility's tram doors are no longer linked to the main @@ -55,6 +62,36 @@ - admin: When a player-owned mob is deleted from the game world, a stack trace is now dropped in the runtime logs. This allows admins and coders to investigate these issues easier. + LemonInTheDark: + - bugfix: Fixes parallax showing up ABOVE the game if you moved z levels while disconnected + - rscadd: Space now makes things in it starlight faintly blue + - bugfix: Glass floors that display space now properly let space shine through them, + rather then hiding it in the dark + - rscadd: Glass floors above space now glow faintly depending on their glass type + NamelessFairy: + - bugfix: Removing a malf AIs brain and inserting it into a new core no-longer clears + its zeroth law + - bugfix: 17 year old crew member medical/security records will no longer show them + as 18 + - code_imp: Medical and security records now use the minimum and maximum age defines + rather than hardcoded minimums and maximums + Rhials: + - qol: ghosts now get an orbit notification for wise cows! + SyncIt21: + - bugfix: apc not assigning itself a name based on its area + - bugfix: newly built apc's not getting assigned area names + - bugfix: merge skew helll + carshalash: + - balance: Gibs now provide a small amount of nutriment. + flowercuco: + - rscadd: Poster boy and Throwing arm positive quirks. + - imageadd: added posters for poster boy quirk + - bugfix: pizza crates' pizza list applies the assigned weight on its pizza list + itseasytosee: + - code_imp: Greater support for variability in weapon attack speed + - admin: Admins are now able to grief you by hitting you with a toolbox 10 times + in one second. + ophaq: - rscadd: Axolotl lovers rejoice! I added axolotls to cytology and as such are now swabbable. - rscadd: Frog cells are now named "anura amphibian cells." This literally means @@ -113,48 +150,91 @@ RimiNosha: - qol: Made off-station gravity generators shut the fuck up. SkyratBot: + san7890: + - spellcheck: Whenever you offer your hand to someone in need, or just wanting to + pull them around- the alert that shows up to them should be a bit more clear + now with a 100% decrease in non-necessary pronouns and articles. + - bugfix: You now should no longer be able to accidentally offer someone your "off-hand" + item, since it's an abstract thing that shouldn't be considered a physical entity. + vinylspiders: + - bugfix: plasmamen no longer can suffer liver failure from injecting themselves + with plasma (unless they have a human liver for some reason). + - bugfix: a person who is infected with a plasma fixation disease can no longer + can suffer liver failure from injecting themselves with plasma. + - bugfix: plasmamen no longer can suffer liver failure from consuming other organic + toxins, which they are not supposed to be affected by. + - bugfix: plasma fixation heal-through-inject-or-consumption now works for plasmamen + by letting the metabolism procs take care of removing it from their systems. + - bugfix: hot ice now has the same wound-healing and nontoxic properties as plasma + to plasmamen, since it is described as "frozen plasma". It is also nontoxic + to plasma fixation virus sufferers. + - bugfix: plasma breathed through internals now contributes to the healing amount + from plasma fixation. + - qol: prevents mob spawner plasmamen from spawning without their suit and internals. + - code_imp: the equip proc can now find internals in the hand slot and automatically + open them, allowing for less snowflakey code down the line. +2023-02-02: + ATHATH: + - qol: Revenant monologuing is now the same color as deadchat. + Fikou: + - bugfix: you can no longer change null rods that arent the normal null rod into + different types + Helg2: + - bugfix: Mime's Vow of silence will no longer requiere wizard robes to be casted. + Jacquerel: + - bugfix: Rehydrated Carp should now properly recognise who is the boss and follow + their instructions. + Kepteyn: - rscadd: added greyscale json configs for witch hat and witch hat worn. - imageadd: Added new, greyscale states to head/wizard.dmi - imagedel: Removed Marisa hat states from head/wizard.dmi - code_imp: changed Marisa hat code in wiz_robes.dm to make them use greyscale. - config: changed greyscale configs to include the witch hat. - - bugfix: Rehydrated Carp should now properly recognise who is the boss and follow - their instructions. + NamelessFairy: + - admin: Admins can now customize the crate type and landing zone of the stray drop + pod event. + Rhials: + - spellcheck: Fixes a typo in the changeling alert stinger filename. + SyncIt21: + - bugfix: RPD not highlight a single variant option in its UI + - bugfix: heat exchange manifolds not displaying the right sprites for its layer + - bugfix: stack components inside machines not getting garbage collected - bugfix: distro & waste sensors not reading values from the actual pipes they are on - bugfix: losing distro & waste options from the drop-down box after connecting to a new sensor. - refactor: all occurrences of _sensor with a macro to avoid typos. - - spellcheck: Fixes a typo in the changeling alert stinger filename. + jlsnow301: + - bugfix: Deleting a sec record removes it from the manifest again + - qol: It's now easier to see security notes via HUD. + - qol: It's now easier to see why someone is set to arrest. + - qol: Crime authors and armory access can edit crimes. + - balance: Setting players to arrest requires a valid crime. + - balance: Armory access can invalidate priors. + - balance: Setting players to arrest via HUD creates a crime for the suspect. + tralezab: + - spellcheck: Renamed the Antagonist Info button slightly. + - balance: EMP requires aluminum, but the aluminum doesn't contribute to a bigger + EMP size. + vinylspiders: - bugfix: fixed getting incurable tox damage when fully transformed into a plasmaman via plasma rivers - bugfix: fixed rod of asclepius/medibeam etc not being able to heal tox damage despite not having biotype restrictions - - bugfix: pizza crates' pizza list applies the assigned weight on its pizza list - - imageadd: cargo's jumpskirt has been shortened to help fit in better with the - jumpsuit's shorts. - - bugfix: Objects that are not items can increase supermatter power on consumption. - - spellcheck: The word "modifications" is now spelled correctly in the Reload Configuration - confirmation dialog. - - spellcheck: Clarifies that TRAC bullets are not teleporter compatible - - bugfix: Toy crossbows have had their offset fixed and will now correctly display - in your hand. - - balance: EMP requires aluminum, but the aluminum doesn't contribute to a bigger - EMP size. - - bugfix: Water bottle cap overlays & missing opening sound - - bugfix: fixes fov removal f12 exploit - - bugfix: Mime's Vow of silence will no longer requiere wizard robes to be casted. + - bugfix: fixes a runtime error caused by patrolling bots +2023-02-03: + 1393F: - bugfix: Bubblegum is once again capable of performing his 5 hallucination, one real Bubblegum attack. - Tattle, Kryson: - - qol: light switches, request consoles, telescreens, and ticket machines can now - all be printed from lathes - itseasytosee: - - rscdel: You are less likely to see underwear in places it logically should not - be. -2023-02-04: - Cursor: - - rscdel: Removed swears from the Personal Space quirk. + Fikou: + - bugfix: fixes fov removal f12 exploit + Horatio22: + - spellcheck: changes the snake crate description from poisonous to venomous + JohnFulpWillard: + - bugfix: Mechs should now cancel out of drilling when they move. + Jolly: + - bugfix: On IceBox, the library air vents are now connected to the main network + again. LT3: - imageadd: Nanotrasen's insurance provider finally sprung the cash for a new tram. Made with the latest in lightweight and mostly* non-flammable materials, travel @@ -171,49 +251,47 @@ - bugfix: Westbound travel shows the correct controls animation - rscadd: Tram doors take a chunk of flesh if you run at them last minute - qol: Reduced duration of amber stage on tram crossing signals - Melbert: - - refactor: Refactored blindness and nearsightedness. Important to note is that - all mobs are naturally blind until their eyes are actually created. - - refactor: Refactored "is covered" procs - - bugfix: Less sources of blindness now cause permanent blindness. Includes the - "Blind" Spell and "Blind Sting" from changelings. - - admin: Ahealing someone no longer flashes the blind overlay for 1 tick. - - admin: I removed an unused (sort of) inaccessible admin verb that allowed you - to toggle the tint from all welding helmets (and clothing) (and lack of eyes) - in existence, let me know if you want similar back - - balance: Changeling "Blind Sting" now causes eye damage (enough to blind) rather - than arbitrarily forcing blindness. - - balance: Visionloss virus symptom now causes eye damage (enough to blind) rather - than arbitrarily forcing blindness. - - balance: Oculine has been reworked slightly. Prior, Oculine arbitrarily healed - blindness and nearsightedness from eye damage reagrdless of how damaged the - eyes were, and applied blur on success. Now, Oculine just heals eye damage, - and blindness / nearsightedness is restored in the process. There is now a probability - every tick that eye blur is applied based on how pure the oculine is while healing - very damaged eyes. - - balance: Pacifists can no longer eyestab. - - balance: Any clothing item that covers your eyes contributes to getting the bonus - while sleeping, and to removing temporary blindness faster - Rhials: - - rscadd: Adds the Terrify spell and Terrified status effect. Terrified victims - will suffer increasingly detrimental effects until they're calmed down. - - balance: Nightmares can now cast the Terrify spell on victims to plague their - prey with. Attacking a Terrified human with your open hand will trip them up. - - imageadd: Adds status effect and spell icons for Terrify/Terrified. - - 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 - 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 - with stuff on the grid. + NamelessFairy: + - bugfix: Toy crossbows have had their offset fixed and will now correctly display + in your hand. + Pickle-Coding: + - bugfix: Objects that are not items can increase supermatter power on consumption. + Profakos: + - spellcheck: Clarifies that TRAC bullets are not teleporter compatible + SeigaSeiga: + - bugfix: Different types of spear now display accurate materials on examine, and + recycle appropriately. + SuperSlayer0: + - bugfix: Bluespace golems no longer can teleport without cooldown + - balance: Nightmares no longer are able to be pepersprayed + SyncIt21: + - bugfix: Water bottle cap overlays & missing opening sound + Tristrian: + - spellcheck: The regenerative sepia crossbreed's usage description has been corrected + necromanceranne: + - balance: You can purchase weapons via the goodie system if you have a weapon permit. + - rscadd: You can purchase lasers and disablers as goodies. The latter comes with + a holster you can stick on your armor vest and store your extra disabler as + security. + - qol: You can store mini ebows in energy holsters. Oops. + san7890: - bugfix: The wizard's magickal printing press has been corrected such that ye magickal text describing what the semi-randomize option do is no longer printed _underneath_ the semi-randomize button. - - refactor: renames datum parts above tier 1 accordingly to their tier - - balance: Gibs now provide a small amount of nutriment. - - spellcheck: changes the snake crate description from poisonous to venomous + sergeirocks100: + - spellcheck: The word "modifications" is now spelled correctly in the Reload Configuration + confirmation dialog. + timothymtorres: + - qol: Add emissive effects and balloon alerts to barsigns (neon lights now glow + in the dark). Barsigns are now considered machinery and will be affected by + power. + - refactor: Refactor barsign code to be more robust +2023-02-04: + Jacquerel: + - admin: Admins can direct where carp (or magicarp) are interested in going when + manually triggering the event + NamelessFairy: + - spellcheck: The instructions for the maintenance camera app are more descriptive. - rscadd: You can now mark TGC cards on the holodeck battle arena, useful for keeping track of effects such as hivemind. - rscadd: Right clicking a card holder on the TGC holodeck battle arena will allow @@ -223,6 +301,19 @@ - refactor: stack components no longer exist inside a machine's component_parts - refactor: move component printer & module duplicator circuitboards into machine_circuitboards.dm - spellcheck: The regenerative sepia crossbreed's usage description has been corrected + - bugfix: Smugglers satchels will no longer spawn inside the holodeck. + Roryl-c: + - bugfix: burn wounds going septic now properly paralyze the limb + - bugfix: septic burn wounds no longer heal on stasis + - bugfix: gauze now properly stops you from re-wrapping limbs that already have + fresh gauze + Sealed101: + - bugfix: Nanotrasen 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 + with stuff on the grid. + cacogen: - qol: Tape recorder actions (e.g. starting/stopping playback) now use balloon alerts instead of say() to reduce chat spam - bugfix: You can no longer get a tape stuck in the tape recorder by unspooling @@ -302,6 +393,100 @@ - bugfix: donator item colorblockhoodie appears on digitigrade LT3: - bugfix: Cats can nuzzle people + lizardqueenlexi: + - bugfix: Made the northwest arrow icon in build mode actually point northwest +2023-02-05: + JohnFulpWillard: + - bugfix: Moths can no longer eat indestructible items (like the CE's magboots) + - bugfix: Arrivals is now part of the station's areas. + - bugfix: Computers no longer delete disks if you try to add a second one. + - spellcheck: Computer screentips says you're now removing the disk instead of the + SSD. + LT3: + - bugfix: Uplink failsafe explodes when its supposed to + - bugfix: Cats can nuzzle people + Pickle-Coding: + - bugfix: Reverts accidental change to pluoxium and freon gasmix power ratio values. + Rhials: + - rscadd: Midround changeling spawn event. + - rscadd: Changeling meteor. It has a present for you. + SuperSlayer0: + - code_imp: Replaces some decisecond things in martial art code with time defines + - spellcheck: Added a ":" to inducer error message + - bugfix: Blood magic no longer can wound the user's arm when casted + Xander3359: + - bugfix: Wendigo no longer has a chance to melee attack 8 times in a second. + ZephyrTFA: + - refactor: Admin verbs are now datums with a dedicated panel handler + - admin: Admin verbs now come with a handy description when you hover over them! + lizardqueenlexi: + - bugfix: Corrected the skintone on arms grown back by the Rod of Asclepius +2023-02-06: + Comxy: + - rscadd: Added new damage buffs for netherworld mobs + - refactor: Refactors netherworld mobs into basic mobs + Jacquerel: + - bugfix: Biotypes will be more consistently applied when taking damage, pod and + shadowperson prosthetic limbs won't be corroded due to light levels. + - bugfix: Podperson and Wooden Golem prosthetic limbs won't be corroded by having + a hungry tummy. + JohnFulpWillard: + - bugfix: There will no longer have 2 of the same station trait roll twice in the + same round. + - bugfix: Announcements of ghost roles don't play if no one accepts the poll to + play as the role. + LT3: + - refactor: 'Rewrite of random event Disease Outbreak: Advanced. Listen to those + level 7 biohazard warnings!' + - admin: Fully customizable build-your-own virus is available in the admin Secrets + panel, for those people you really hate + NamelessFairy: + - bugfix: Some misplaced pixel on TGC cards have been cleaned up. + Profakos: + - bugfix: United Surplus Crate Key is no longer visible in the nuke ops uplink + - bugfix: pod person hair can be once again styled by secateaurs + Rhials: + - bugfix: abductor scientist's retrieval implants will now properly recall the owner, + and inform them upon recall failure. + ShizCalev: + - bugfix: Fixed some duplicated and incorrect messages being presented when infected + with a virus that has the spontaneous combustion symptom. + SyncIt21: + - qol: examining a meat spike frame & meat spike will tell you about itself + Tattle: + - admin: Admins are no longer alerted when an inert BoH is printed + Unit2E: + - balance: The hypnotic flash now works on unconscious people (not crit), one of + us, one of us! + scriptis: + - bugfix: asays are no longer double-escaped + - admin: asay now uses tgui say + tralezab: + - admin: There's a cog next to events you can trigger if it has an admin setup. +2023-02-07: + ArcaneMusic: + - qol: Improves feedback on buttons as well as the blast door electronics so that + installing your very own blast doors is less tedious. + Capsandi: + - balance: There's a second detonation wire on payload bombs now. + - balance: Cutting the proceed wire no longer detonates the bomb but instead deactivates + the countdown timer on examine. This is reset once the bomb is defused + Ebin-Halcyon: + - imageadd: Winter coats have been resprited. + Jacquerel: + - bugfix: Meteors can't be triggered automatically or manually on Icebox, where + they do nothing. + - bugfix: Hacking a comms console as a traitor won't try to summon meteors or pirates + to Icebox, where they do nothing. + Kapu1178: + - bugfix: The "Rest" and "Pull" HUD icons correctly match the mob's current state + on Login(). + LT3: + - balance: 'Tram Malfunction: Decreased spread between min and max damage' + - balance: 'Tram Malfunction: Event length decreased' + - balance: 'Tram Malfunction: Damage multiplier added to account for different base + health levels' + - balance: 'Tram Malfunction: Event collision lethality multiplier decreased' - bugfix: Fixed motion sensors on tram doors, they will now crush you much less often! - balance: Reduced damage from being crushed by tram doors @@ -376,6 +561,48 @@ - bugfix: Transferring objects from a belt to another storage object now removes those objects from the belts visuals. - qol: Adds screentips to both signs and plaque construction/modification. + NamelessFairy: + - bugfix: Transferring objects from a belt to another storage object now removes + those objects from the belts visuals. + - bugfix: Freezer no longer lock automatically when closed. + Profakos: + - bugfix: swapping to a stored DNA no longer forces you to be human instead of the + species stored in the DNA + itseasytosee: + - imageadd: inhands for fairy grass tiles +2023-02-08: + ArcaneMusic: + - qol: Adds screentips to both signs and plaque construction/modification. + Jacquerel: + - bugfix: Changeling meteors on Icebox will now land close to the station instead + of a random map edge tile. + - refactor: Tidied up spider ability code, they should all work the same, but please + report if they do not. + - refactor: Spiders and Geneticists now use the same ability to make webs rather + than two virtually-identical ones, which should also perform just as it did + before this change. + - bugfix: Setting a directive as a Spider Midwife should properly pass and announce + itself to new spiders. + LT3: + - spellcheck: Gloves now mention modes, not intents + LemonInTheDark: + - bugfix: Your hud should break much less now + Melbert: + - bugfix: Custom named drinks (with a pen) no longer reset after their glass volume + updates + - bugfix: Admins, "All areas unpowered" in the secrets menu will now function again. + - bugfix: DNA injecting other people is no longer instant + - bugfix: Forcing people to drink is no longer instant + - bugfix: False alarm radiation leaks should be less obvious + - bugfix: Fixes some traitor objectives from dropping in blacklisted areas, like + security. + Mey-Ha-Zah: + - imageadd: 'Updated Regal Rat Sprites: Provided by Onule.' + Rhials: + - bugfix: midround changelings no longer spawn a dummy body on the arrivals shuttle. + SyncIt21: + - bugfix: Bibles can convert other bibles + Thunder12345: - qol: CTF guns spawn in the default active hand - qol: CTF shields become transparent as they lose charge - qol: CTF King of the Hill scores are visible to players in-game @@ -505,6 +732,39 @@ vinylspiders: - bugfix: hotfixes vox spawning with their internals closed 2023-02-14: + itseasytosee: + - imageadd: Shotgun shell suit storage sprites + tf-4: + - spellcheck: The message given when a limb is disabled has had its spelling corrected. + vinylspiders: + - bugfix: fixes oxyloss not being applied when there is a partial pressure of 0 + (no more being able to breathe in space) + - code_imp: fixes any lingering damage-application issues related to non MOB_ORGANIC + biotypes + - refactor: refactored lungs to have a respiration_type flag which is then used + by adjustOxyloss/setOxyloss to determine whether to take 'oxygen' damage. +2023-02-09: + Jacquerel: + - bugfix: Hostile Basic Mobs such as carp, rats, and moonicorns will no longer gain + the power to bite anyone they can see regardless of distance and intervening + obstacles upon defeating their first target in combat. + MMMiracles: + - rscadd: Tramstation has received a substantial overhaul! Please consult your local + tour guide and station maps for changes. + Melbert: + - bugfix: Revolutionary Heretics and Cultists Traitors no longer lose all of their + joy in life after being de-converted from their respective causes. + NamelessFairy: + - bugfix: Some misplaced decals on icebox have been removed. + Xander3359: + - bugfix: metastation toxins no longer has a weird double light fixture. + mc-oofert: + - rscadd: Luxury Shuttle is now bigger, and less ugly! Poor people still get it + rough though... + timothymtorres: + - bugfix: Fix kilo barsign spawning under windows + - bugfix: Fix barsign updatePath being backwards +2023-02-10: LT3: - bugfix: 'Tramstation: Crossing signals updated to work on the new map' - bugfix: 'Tramstation: Fixes missing wiring in West Wing' @@ -552,26 +812,164 @@ how fast you move I think it makes you slower - admin: Admins can now customize the crate type and landing zone of the stray drop pod event. - - admin: Every tier of "Scrubber Overflow" can now choose a random single reagent - mode - - admin: '"Custom" overflow, which was kinda confusing and unintuitive, is now called - "Every Vent", much more self-explanatory in what it does.' - - bugfix: Mechs no longer have zero armor when built. - coiax: - - bugfix: Tiziran canned goods no longer decompose into mush. - itseasytosee: - - imagedel: Android abductors and skeletons have lost all modesty and have stopped - wearing underwear. -2023-02-15: - A.C.M.O.: - - bugfix: Fixed Augments+ and Quirk points to interoperate as expected. You can - now use your points balance to select augments, and select augments to earn - points! - GoldenAlpharex: - - bugfix: Sitting on benches no longer gives you a weird offset that makes you look - like you're standing on them. - - bugfix: Returns benches to their original light brown color, rather than the middle - between brown and cyan that they were at for a bit. + Time-Green: + - bugfix: fixes issues with being walking against hyperspace locking you + ZephyrTFA: + - bugfix: Using a hacking cable will no longer permanently spam you with balloon + messages +2023-02-11: + Fikou: + - admin: adds findtext (+ex), view, viewers, rect_turfs and flick as sdql2 wrappers + Jacquerel: + - bugfix: Plating replaced by floor tiles from a dimensional anomaly or colossus + crystal will now still have plating underneath when crowbarred, instead of space + (or open space on z level maps). + - bugfix: Summoning a cult wall on plating as an Artificer will leave the plating + intact underneath when it is removed, rather than replacing it with a void. + - admin: Admins can pick the initial flavour of a manually triggered dimensional + anomaly. + - refactor: Spider healing abilities have been refactored to reuse the same code + rather than reimplement it across two different mobs, it should work the same + as it used to. This is also used by Lightgeists. + - bugfix: Mob biotype on `heal_overall_damage` should be applied more consistently. + This might mean that some things which were previously healing prosthetic limbs + have stopped doing that. + - bugfix: Removes a duplicate file which was preventing the new regal rat sprite + from being used. + LT3: + - admin: Changed color for watchlist notifications + LemonInTheDark: + - bugfix: Solar trackers actually uh, look right again + - bugfix: Solar panels and trackers will now properly block space lighting on multiz + maps + MMMiracles: + - bugfix: The elevator panel for Tramstation's medical elevator will no longer clip + into the side window when raised up. + - bugfix: The escape pods should now actually launch with the shuttle. + Melbert: + - bugfix: The bastard sword can create constructs again. Just hit the shells with + it + Paxilmaniac: + - bugfix: Ghost role spawners will now no longer try and spawn people when they + /should/ have been out of uses but due to a bug were not + SuperSlayer0: + - bugfix: Fixes reverse revolver name being different from syndicate revolver name + ZephyrTFA: + - bugfix: AIs can no longer change their shell's icon_state to any image at will + carshalash: + - spellcheck: Adjusted punctuation marks for several emotes. +2023-02-12: + Capybara Holly: + - bugfix: Fixes a theoretical bug where glide-size could get unsynced from your + movespeed after unbuckling + LT3: + - imageadd: Fixed alignment of corner railings + Profakos: + - bugfix: slipping on lube while buckling will lead to less weird states + kawoppi: + - refactor: refactored *blush and *cry emote visuals into bodypart_overlays + - rscdel: lack of eyes will no longer prevent the *cry emote overlay from displaying + mc-oofert: + - bugfix: Any circuit boards with custom sprites now actually use that sprite + the-orange-cow: + - bugfix: heretic blades can now properly butcher + tralezab: + - rscadd: 'Added two new sanguine wizard spells: Exsanguinating Strike and Scream + For Me' + - admin: Every tier of "Scrubber Overflow" can now choose a random single reagent + mode + - admin: '"Custom" overflow, which was kinda confusing and unintuitive, is now called + "Every Vent", much more self-explanatory in what it does.' +2023-02-13: + Jacquerel: + - rscadd: Wizards can now perform a Grand Ritual to summon unpleasant events to + the space station. + - rscadd: Wizards completing the Grand Ritual a sufficient number of times can achieve + victory at the end of the round, and cast a powerful round-changing spell. + - bugfix: Heretic runes are now invisible to the AI (and cyborgs) while being drawn + as well as when finished. + Melbert: + - bugfix: Fixes player panel "make ai" button not fully working on observers + - bugfix: Fixes some situations where paradox clones go sicko mode + NamelessFairy: + - bugfix: Soporific sniper magazines use the correct icon again. + - imageadd: Penetrator and Marksman sniper magazines now have icons. + Rhials: + - rscadd: Ectoplasmic Outburst anomaly event + - rscadd: Reactive Ectoplasm Armor + Shadow-Quill: + - bugfix: Gravity generators have been re-centered. + ZephyrTFA: + - bugfix: Spells which are only able to be cast on the station can now only be cast + on the station + itseasytosee: + - imagedel: Android abductors and skeletons have lost all modesty and have stopped + wearing underwear. + kawoppi: + - imageadd: when equipped with a bluespace trash bag the pimpin' ride janicart will + now display a bluespace trash bag instead of a normal trash bag + mc-oofert: + - bugfix: aux base turrets now shoot fauna + scriptis: + - bugfix: preferences now respects your preferences +2023-02-14: + Jacquerel: + - refactor: Spider code has been refactored and AI-controlled spiders may have slightly + different movement or reaction times. + - bugfix: Basic mobs can now be slowed when they take stamina damage, however currently + only spiders actually _can_ take stamina damage. + - bugfix: Spiders should now more reliably disable their AI when controlled by a + player. + - bugfix: Araneus is no longer considered to be a bat and so cannot fly. + - bugfix: Araneus is no longer considered to be a bat and so is no longer frightening + to people who are scared of the supernatural. + LT3: + - bugfix: Tram damage calculation takes into account compound wounds + - code_imp: Tram crossing signals are now map specific + - admin: Combat log now generated when the tram collides with someone + LemonInTheDark: + - bugfix: Equipping an fov item, disconnecting, waiting 6 minutes and reconnecting + will no longer break your game + Melbert: + - bugfix: Syndicate 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 + - bugfix: Fixed a runtime from hovering over a meat spike / kitchen spike with an + empty hand + - bugfix: Changing species no longer drops all held items + - bugfix: Losing your right hand not un-cuffing you or dropping your gloves + Mothblocks: + - bugfix: Using a fire extinguisher with a chair now properly does...something with + how fast you move I think it makes you slower + NamelessFairy: + - spellcheck: All station closet and lockers have had their naming conventions standardized. + - bugfix: Tram now has evidence lockers labelled 1 through 7 instead of 7 evidence + lockers labelled as locker 1. + Profakos: + - bugfix: taking an item out of the food processor and putting back in will not + dupe the results when you process them + SyncIt21: + - rscdel: Removes sprite changes done to smart pipes + - bugfix: pipes disappearing at weird angles + ZephyrTFA: + - bugfix: Mechs no longer have zero armor when built. + coiax: + - bugfix: Tiziran canned goods no longer decompose into mush. + jlsnow301: + - bugfix: Security can set notes through consoles again + - bugfix: Observers are now properly logged out of record consoles + necromanceranne: + - qol: Limits the amount of emotes being passed to chat by viruses. + vinylspiders: + - bugfix: fixes a potential bug that can cause the detective scanner to get stuck + in a scanning state indefinitely +2023-02-15: + GoldenAlpharex: + - bugfix: Sitting on benches no longer gives you a weird offset that makes you look + like you're standing on them. + - bugfix: Returns benches to their original light brown color, rather than the middle + between brown and cyan that they were at for a bit. GoldenAlpharexx: - bugfix: Towels will now properly display on digitigrade characters. - imageadd: Towels now have a digitigrade worn sprite too! @@ -630,18 +1028,61 @@ - bugfix: False alarm radiation leaks should be less obvious - bugfix: Fixes some traitor objectives from dropping in blacklisted areas, like security. + Jacquerel: + - bugfix: Hacking the Comms Console or winning a Revolution can no longer spawn + antagonists if there's not enough time left in the round for them to antagonise + anyone. + Melbert: + - bugfix: Fixed a runtime from mime *kissing silicons and simplemobs. + - code_imp: Hostile Station Lockdown, from Malfunctioning AIs, will no longer halt + the server momentarily + - config: 'Policy.json config got updated. The following values need to be updated:' + - config: '"Obsession" -> /datum/antagonist/obessed' + - config: '"Heretic" -> /datum/antagonist/heretic' + - config: '"Headslug Changeling" -> /datum/antagonist/changeling/headslug' + - config: '"Pyroclastic Anomaly Slime" -> /datum/antagonist/pyro_slime' + - config: ALL antags in the policy.json file will now get notified of any existing + policy set by the admin team, rather than only a handful. + - bugfix: Fixed a runtime with examining empty bomb frames - bugfix: Fixed a FIVE YEAR OLD issue causing Time Stop to be a 3x3 instead of a 5x5. Really. - bugfix: The gravity generator correctly gives "forced gravity" to all adjacent mobs - bugfix: Fixed some runtimes with Time Stop, and other miscellaneous issues - - code_imp: Hostile Station Lockdown, from Malfunctioning AIs, will no longer halt - the server momentarily - SkyratBot: - - bugfix: You can no longer keep an AI trapped in their core by healing them with - a Rod of Asclepius + NamelessFairy: + - spellcheck: Head of staff lockers and prison cell lockers have had their proper + noun status returned. + SuperSlayer0: + - balance: Mech disabler now works as a shotgun, shooting 5 weak disabler beams + at one time. + - balance: Mech disabler now uses 100 energy instead of 30, and it's attack cooldown + increased to 1.5 seconds instead of 0.8 + coiax: + - bugfix: Drones no longer destroy toner cartridges when ejecting them from photocopiers. + timothymtorres: + - code_imp: Added unit testing to force all ruins to spawn for CI build + tralezab: + - balance: Malf AI turret upgrades are now much stronger, fully healing, increasing + max health, and setting stun projectiles to taze. + vinylspiders: + - bugfix: hotfix for lungless oxyloss immunity + - bugfix: hotfix for mobs being able to circumvent reagent respiration_type requirements + by removing their lungs +2023-02-16: + Jacquerel: + - bugfix: Things dropped into a chasm should no longer occasionally become invisible + and intangible. - bugfix: Bileworms which have been struck down but not butchered no longer return in a more powerful form. + - bugfix: Mice and Regal Rats will no longer spawn in icebox's solar panels and + die of cold. + - bugfix: Medieval Sim holograms no longer spawn holding unusable laser rifles which + also block using their old timey weaponry. + Melbert: + - bugfix: It should be way harder to lose your special hands as a zombie or shattered + risen ghoul. + - refactor: Refactored mutanthands for zombies and shattered risen. + NamelessFairy: - bugfix: Reinforced plasma windows will now drop plasma glass instead of regular glass when broken. - bugfix: Tram windows drop the correct number of rods and a shard when broken instead @@ -654,6 +1095,66 @@ - bugfix: eyesnatchers that say that they haven been used up can't be used again - bugfix: Things dropped into a chasm should no longer occasionally become invisible and intangible. + Profakos: + - bugfix: eyesnatchers that say that they haven been used up can't be used again + ZephyrTFA: + - bugfix: You can no longer keep an AI trapped in their core by healing them with + a Rod of Asclepius +2023-02-17: + Jacquerel: + - 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 + space ruin spiders won't. + - bugfix: Netherworld-themed mobs will correctly adjust their speed as they take + damage. + - refactor: Made the Wumborian Fugu into a basic mob, which should act largely the + same way but may have slightly different speed and reaction times. + Kubisopplay: + - admin: Lowered the chance of accidentally leaking asay + LT3: + - bugfix: 'Tramstation: Added missing produce order console' + - bugfix: 'Tramstation: Removed duplicate vending machine in east wing' + - bugfix: 'Tramstation: HoP office can now broadcast announcements' + - code_imp: 'Tramstation: Moved information plate for symmetry' + - code_imp: 'Disease Outbreak: Disease max severity replaced with requested severity' + - code_imp: 'Disease Outbreak: Generated disease now includes symptom based name' + - code_imp: 'Disease Outbreak: Disease name is now included in the station announcement' + - code_imp: 'Disease Outbreak: Now in snake case' + - balance: 'Disease Outbreak: Tier 1 cures removed from pool' + - bugfix: 'Disease Outbreak: Dangerous/Biohazard diseases are now visible' + - bugfix: 'Disease Outbreak: Event setup generates the correct severity' + - bugfix: 'Disease Outbreak: Various potential symptoms were in the wrong symptom + pool' + MrStonedOne: + - config: Repeated configs in other files (from $include) will no longer trigger + a config error. Repeated configs in the same file still will. + - config: In all cases the new value will still be used + NamelessFairy: + - spellcheck: A grammatical error in strip text has been removed. + Profakos: + - bugfix: Health analyzers will properly report missing stomachs and tongues + - bugfix: Guillotines can be unanchored again + SuperSlayer0: + - rscadd: Added a traitor final objective to infect the station AI with a virus, + that turns it malf and fully loyal to the traitor + Time-Green: + - bugfix: fixes taking items from inventories glitching out in hyperspace + YehnBeep: + - server: Updated instructions on setting up a TGUI CDN, noting that TGUI via CDN + malfunctions in the event CORS headers are absent. + lizardqueenlexi: + - bugfix: Placed a missing mining order console on Tramstation. + - bugfix: Rearranged furniture in the Tramstation pharmacy to make the fridges accessible. + timothymtorres: + - bugfix: Fix icebox barsign spawning under windows for Icebox. + - bugfix: Fix kilo barsign to spawn directly on top of wall so people can see it + from both inside the bar and outside the main hallway. + - bugfix: Fix durand shield overlay to appear above the mech when facing south. Also + fixed a lighting runtime when shield would turn on/off. + tralezab: + - refactor: Monkey AI descriptions of "primal eyes" no longer show if the monkey + is missing eyes. 2023-02-18: Chubbygummibear & JohnFulpWillard: - rscadd: A ton of new NtOS themes, which are accessible by the new Themify application @@ -748,6 +1249,53 @@ of downloading illegal ROMs if you change your theme to anything that isn't Syndicate. - bugfix: NtOS themes are now recognized by all windows. + Jacquerel: + - bugfix: Cramped escape pod walls no longer appear to merge with those of the station, + which will be a big relief to the single occupant. + - bugfix: Lightgeists won't try to heal any damage which isn't burn or brute, because + they can't. + - bugfix: Lightgeists don't need to perform an action bar in order to heal someone, + which was added by mistake. + LT3: + - bugfix: Fixed broken icon path in TCG set + Melbert: + - bugfix: Transferring golem shells no longer make you a free man and also results + in infinite golem shells + - bugfix: Servant golems are considerably less free + - bugfix: Fixes some hard deletes related to mob minds being enslaved to other mobs + NamelessFairy: + - bugfix: Reinforced Plating baseturf helpers work and should now be bug free enough + to be used in maps. + - bugfix: On metastation the gravity generator foyer airlock access has been made + consistent with the rest of the engine room airlocks. + - bugfix: False walls will no longer tell you to wait until they've stopped moving + when you use an item on them. + Profakos: + - bugfix: emagged/delta pods properly fly to lavaland + - bugfix: Revelation once again wipes the stored files on the computer + Roryl-c: + - bugfix: fixed chat offsets with the RPG Titles event + SyncIt21: + - bugfix: rcd's not building plating underneath mobs & structures + - bugfix: wall girders not being completed by the rcd + - bugfix: unable to build windoors on the turf you are standing on + TheBoondock: + - bugfix: fixed weak dwarfs being too weak as to be unable to throw books + Time-Green: + - bugfix: falling off the shuttle wont trap you in a box anymore + timothymtorres: + - bugfix: Fix runtimes for IV drips, food processors, and gibber + - refactor: Refactored, improve, and rename canUseTopic to be can_perform_action + that now uses bitflags to determine if a mob can perform an action. + tralezab: + - refactor: Lizard related canned food now acts like canned food + - refactor: Refactors how nuclear activation disk works. Shouldn't notice a whole + lot but if you do, it might be because of this. + - admin: Disk now has an examine message for whether it's secure or not, to make + it less ambiguous for players. +2023-02-19: + Jacquerel: + - bugfix: You can no longer eat pizza floor tiles with your brain. - bugfix: Lobstrosities and Tarantulas will once more vibrate to let you know they're about to charge at you. - bugfix: The Savannah Ivanov will once more vibrate to let you know it's about @@ -930,6 +1478,43 @@ - imageadd: Almost all Mekas have been resprited in their entirety. Halcyon: - bugfix: The Paramedic cap is now the same color as their jumpsuit again. + LemonInTheDark: + - rscadd: The darkness that glasses and hud goggles that impact your nightvision + (think mesons, nightvision goggles, etc) lighten is now tinted to match the + glasses. S pretty IMO, and hopefully it helps with forgetting you're wearing + X. + - balance: Nightvision is darker. I think bright looks bad, and things like mesons + do way too much + - balance: Mesons (and mobs in general) no longer have a static distance you can + see stuff in the dark. If a tile is lit, you can now see it. + - bugfix: Nightvision no longer dims colored lights, instead simply thresholding + off bits of darkness that are dimmer then some level. + Melbert: + - bugfix: Cult Ghosts can see in the dark and invisible stuff, a mechanic intended + for over 5 years and never functional + - bugfix: Ethereal revival causing traumas again. + - bugfix: Heartless zombies will now revive again + - bugfix: Zombies no longer take constant ticking damage from lacking a heart + ZephyrTFA: + - bugfix: Moth wings can now correctly be healed + coiax: + - bugfix: Folding a "fancy box" like donut or candles will now put cardboard in + your hand, rather than on the floor. + - bugfix: You can always see how many pickles are in a jar of pickles, or rolling + papers there are in a pack of rolling papers, since it's not possible to close + them. +2023-02-20: + Jacquerel: + - bugfix: Removes a runtime error caused by moving your PDA between slots. + - bugfix: Clicking a spider egg and then closing the radial menu won't print a message + in admin channel informing admins that the egg didn't spawn anything. + JohnFulpWillard: + - 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. + - bugfix: NtOS themes are now recognized by all windows. + - spellcheck: Hallucinations where you see people put things away now tell you they + put the right thing away. JohnFulpWillard and itsmeow: - bugfix: Messenger now clears photos after you send it, so you don't send a photo repeatedly until you manually clear it. @@ -940,6 +1525,158 @@ Melbert: - bugfix: Gaining nobreath in an N2O heavy environment doesn't make you forever aware of it + LT3: + - imageadd: Wall mounted tram sign now has improved emissives and casing + LemonInTheDark: + - bugfix: Moving up and down z levels will break hud stuff slightly less often + MidoriWroth: + - qol: Tweaked around some foods to make them easier to make + NamelessFairy: + - bugfix: A accidently stacked roller bed on lavaland has been removed. + - bugfix: You cannot print blank documents from a photocopier if you cannot afford + them anymore. + - bugfix: Mounting the photocopier will now eject paperwork as it does with photos + and paper. + - refactor: Lots of duplicate code and some unnecessary vars removed from photocopier + code. + Rhials: + - bugfix: Midround Changelings are now ejected from their meteor when something + bad happens, ensuring they reach the station. + Roryl-c: + - bugfix: seiver no longer applies purity and delta time twice + - code_imp: made seiver code much less confusing + SuperSlayer0: + - bugfix: Fixes mending globule ability not having a cooldown + TheBoondock: + - bugfix: fixed throwing description to always say "it was thrown very hard" even + when its not + coiax: + - bugfix: Eating fish and meat poke bowls no longer consumes the bowl, just the + food inside. + tralezab: + - bugfix: Valentines and other antags no longer break highlander +2023-02-21: + Jacquerel: + - bugfix: Many spell-like abilities which could be stunned, paralysed, or frozen + in time now cannot be. + - bugfix: Pet dogs will once again fetch items for you + Maurukas: + - bugfix: a vent pump that was installed backwards in the Kilostation Ordnance airlock + has been repaired. + NamelessFairy: + - bugfix: Holopads will blink when being called rather than just glowing. + - bugfix: Holopads will not blink forever if you missed a call. + - bugfix: Mice will now retain their color when they die. + RikuTheKiller: + - bugfix: Oculater works again. + SuperSlayer0: + - rscadd: Added a new cybernetic implant that increases punch damage of a human + TheBoondock: + - bugfix: fixed goliath heart having missing icon + coiax: + - bugfix: Paper planes when unfolded will put the paper in your active hand, rather + than a different hand, just like cardboard boxes. + skylord-a52: + - bugfix: candles are made of a more appropriate material + sqnztb: + - bugfix: frail and paraplegia quirks can once again be taken together. + tralezab: + - bugfix: You can use ninja adrenaline to cure unconsciousness as intended + - code_imp: Cleaned up some modsuit code + - bugfix: Fixes some cases where AI couldn't interact with some old non-tgui machines + vinylspiders: + - imageadd: new inhand sprites for the broken holy flask + - bugfix: fixes broken holy water flask looking like a broken beer bottle + - bugfix: unholy flasks now use a blackened holy flask inhand sprite instead of + the beaker one +2023-02-22: + Jacquerel: + - bugfix: Restores lost behaviour to heal Ian with sutures. Or giant spiders, if + you want to do that for some reason. + LemonInTheDark: + - config: Added a warning build config setting, you can now lightly repremand but + not block clients with older builds but fine major versions + - bugfix: Fixes activating two flashlights without moving only turning on one flashlight + (until you move) + - bugfix: Purely black things drawn on the floor (like carpets, those foam dispensers, + etc) will no longer cause things on top of them to be fully masked in darkness + Melbert: + - bugfix: Ghost roles from spawners keeping antag datums + Ryll/Shaps: + - bugfix: Landing a monster tackle that applies an auto aggro-grab while stamcrit + will no longer try applying an aggro-grab that leads to a permanent slowdown + to the user, and will instead just knock the target down a bit harder. + - bugfix: Launching dolphin and rocket glove tackles on targets at ranges shorter + than their minimum distance will be more accurate at targeting where you clicked + at, rather than locking you into the nearest cardinal/diagonal direction. + - balance: You can now knock more things off a table full of stuff by tackling it + than you could before. +2023-02-23: + CesarBaylina: + - qol: Made associative lists more apparent in circuits. + Jacquerel: + - bugfix: Moths can eat clothes again. + - bugfix: The paradox clones of plasmamen now come properly dressed for the occasion. + Melbert: + - bugfix: Deconstructing (or overloading) the Master RND server with an HDD preset + will correctly half research rate + SyncIt21: + - qol: right clicking the seed extractor with a plant/food stores the extracted + seeds in the machine. + coiax: + - bugfix: When loading food into a microwave via serving tray, you can now see the + food inside the microwave afterwards. + tralezab: + - bugfix: fixed regal rat rummaging lines sometimes getting you muted! +2023-02-25: + JohnFulpWillard: + - bugfix: NtOS' Arcade program works again. + LemonInTheDark: + - bugfix: The gulag shuttle's point claim console will load in again. Whooops + NamelessFairy: + - bugfix: CTF flags will no longer catch fire when placed into lava, preventing + one class from picking it up. + - code_imp: CTF flags no longer respawn when they get qdeleted, this means you can + now delete them when debugging/as an admin. + Profakos: + - bugfix: Honourbound can no longer be gained from neurowine or from heavy brain + damage, no longer causing the player to be granted a spell that does nothing + most of the time + Rhials: + - bugfix: The disease outbreak/heart attack event candidate list will now clear + itself before generating. + coiax: + - bugfix: A chef who is beheaded, and the head stitched on another body will still + see their food as their own. + kawoppi: + - soundadd: dismantling an unplaced wallframe will now make a wrench sound +2023-02-26: + Helg2: + - rscadd: Adds privacy shutters for quartermaster. Shutters on Kilo/IceBox and blastdoors + on Meta/Delta/Tram. Also changed doors with glass to common ones. + Jacquerel: + - refactor: Changeling's Lesser Form is now one ability instead of two which keep + swapping, which should consistently turn you back and forth without deleting + itself from your action bar. + - bugfix: Hatching from an egg left by a Last Resort headcrab should correctly grant + you Lesser Form in addition to your other abilities. + - bugfix: Turning into a monkey while using the Changeling space suit won't leave + you as a monkey with a weird inflated head. + - qol: Using lesser form as a monkey with only one stored DNA profile will skip + asking which profile you want and will simply transform you immediately into + the only option. + - bugfix: Painting with the slippery spraycan will now once again correctly make + that tile slippery. + - bugfix: Spraying the ground with the hellcan will now once again correctly set + that tile, you, and other surrounding objects on fire. + Kubisopplay: + - bugfix: Fixes split personality kicking out the original owner of the body. + Melbert: + - bugfix: Gaining nobreath in an N2O heavy environment doesn't make you forever + aware of it + - bugfix: Premade viruses (GBS, beesease, etc) now show up in the PANDEMIC again + - bugfix: PANDEMICs should bluescreen less often. Maybe. + - bugfix: Mecha speech indicators actually go away - bugfix: Scan gates correctly flick their alarm overlays, I think they already looked correct but now it's more correct - bugfix: If you are somehow a human without a species, the generic zap animation @@ -990,32 +1727,96 @@ ATHATH: - spellcheck: Corrects the description of the transmission 4 threshold effect of the Narcolepsy symptom to more accurately reflect what the effect does. + NamelessFairy: + - bugfix: The unanchored reinforced plasma-glass windows on snowdin have been anchored. + - bugfix: Unregistered paywall firing pins wont vanish when you try to insert them + into a gun + - bugfix: Declining to pay for a paywall firing pin will no longer brick the firing + pin for everyone + - bugfix: paywall firing pins are linked to bank accounts instead of unique users, + so they can't be used for overly elaborate ling checks or letting people without + IDs fire them for free. + - bugfix: Attempting to fire an empty gun with a paywall firing pin will no longer + charge you. + - bugfix: Multi-shot paywall firing pins do not charge you for agreeing to the initial + prompt. + - spellcheck: Fixes a spelling mistake in paywall firing pin prompts + - code_imp: The owner of a paywall firing pin is now tracked via account rather + than ID, this stops the pin from holding a reference to a deleted ID if the + ID is ever destroyed. + Rhials: + - bugfix: The radiation leak event no longer targets machinery that doesn't use + power. +2023-02-27: + ATHATH: + - spellcheck: Corrects the description of the transmission 4 threshold effect of + the Narcolepsy symptom to more accurately reflect what the effect does. + Boopideedoo: + - bugfix: Added E.X.P.E.R.I.M.E.N.T.O.R + Jacquerel: + - bugfix: Spiders will stop being on fire marginally faster, as they used to. + - bugfix: Mob spawners will no longer break if instructed to spawn certain kinds + of basic mob, or monkeys. LT3: - bugfix: Disease Outbreak doesn't give up so easily when trying to start the event - balance: Disease Outbreak will not spawn on positive virus mobs, but can be transmitted if resistance is low - bugfix: Disease Outbreak creates an entry in the virus log like it should - admin: Admins can see Disease Outbreak virus stats when the event starts - - admin: Roundstart logout report is written to the admin log - - admin: Roundstart report threshold is now 10 minutes - Paxilmaniac: - - rscadd: Void raptor now has an abandoned pizzeria attached to the station where - the portal to moffuccis used to be. - - rscdel: the abandoned pizza place stuffed in some sand floating alongside void - raptor has been removed. - SkyratBot: - - bugfix: The unanchored reinforced plasma-glass windows on snowdin have been anchored. + NamelessFairy: + - bugfix: Any worn item that has its color changed will now have its color change + reflected on the item's worn icon immediately. + - bugfix: Cult Seek your master now has an icon. + - bugfix: You can no longer drive ridable vehicles without keys or in space. + - bugfix: Borg hypospray will correctly tell you the name of the limb that is blocked + when trying to inject into a blocked limb. + RikuTheKiller: + - bugfix: Nooartrium now pulls your ghost back into your body when it revives you. + SmoSmoSmoSmok: + - bugfix: the order vendors will not constantly load when trying to buy multiple + items + SuperSlayer0: + - bugfix: Fixes strong arm implant attacks stunlocking people + - bugfix: Strong arm implant attacks no longer stack with hulk attacks + Tattle: + - bugfix: removed a double monitor from Delta cargo + Timberpoes: + - bugfix: Fixes formatting for the paper containing vote box final tallies. "I love + democracy". + - bugfix: Fixes broken input fields on photocopied paper. + kawoppi: + - bugfix: filled trashcarts spawn nearby grime when initialized instead of when + opened for the first time + mc-oofert: + - bugfix: MMIs/Positrons dont get slept forever when the mech theyre in gets destroyed +2023-02-28: + Jacquerel: - bugfix: Maintenance tunnels should no longer sometimes contain airlocks with walls underneath them. + - refactor: Migos, Creatures, and Blank Bodies use a new shared component to update + their stats which scales smoothly as they take damage rather than in stages. + - bugfix: Migos, Creatures and Blank Bodies will all update their stats when taking + or losing damage regardless of it was from an identifiable enemy. - bugfix: Using a teleport scroll will deplete a charge regardless of whether used in-hand or by pressing the action button. - - bugfix: Added E.X.P.E.R.I.M.E.N.T.O.R + - refactor: The actions of Statues and Creatures which can't be used while seen + now share logic, and will not spam chat with feedback. + LT3: + - admin: Roundstart logout report is written to the admin log + - admin: Roundstart report threshold is now 10 minutes + NamelessFairy: - bugfix: Un-aimed admin rods will now actually be un-aimed instead of aimed at the previous aimed rods target. - admin: Admin aimed rods will now log that they're aimed randomly when not aimed. + flowercuco: - bugfix: surplus crates and united surplus crates now properly show up as a purchase in the round end screen - - rscadd: Adds privacy shutters for quartermaster. Shutters on Kilo/IceBox and blastdoors - on Meta/Delta/Tram. Also changed doors with glass to common ones. - vinylspiders: - - bugfix: fixed emergency shutters' bottom lights still blinking when door is opened + itseasytosee: + - bugfix: Monkeys ues the proper husk sprites. + - imageadd: The monkey has been moved back down to its lower, more submissive position. + - refactor: Your bodyparts are now dynamically rendered at a height relevant to + the length of your legs and torso, what does this mean for you? Not much to + be honest, but you might see a monkey pop up a bit if you cut its legs off. + - admin: The Tallboy is here + jlsnow301: + - bugfix: Fixes NTOS records program receiving bad medical disability data diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index 77fb7ef375f9b..0a75b6a939feb 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -50,6 +50,46 @@ have stopped doing that. - bugfix: You can no longer trap yourself in north public mining maintenance if you enter it without maint access. + Jacquerel: + - bugfix: Opening a surprise egg with your mind will no longer teleport the contents + Maurukas: + - bugfix: A disconnected vent on the syndicate lavaland base is now connected + Melbert: + - bugfix: Off station roles can't purge the station's records + - bugfix: Purging records is logged again + - bugfix: Ninja security records hacking works + NamelessFairy: + - bugfix: You can now create wanted/missing posters using player created security + records. Due to a visual bug and usability issue photos above 1 by 1 meters + in size will no longer work for mugshots in records. + Remuluson2: + - bugfix: After pressure from Nanotrasen, Space Wizard Federation made glass and + bone knives non-conductive again. + scriptis: + - bugfix: removes an infinite powercell from tram maintenance +2023-03-02: + Jacquerel: + - bugfix: 'Stabilized slime extracts will now once again work from inside modsuit + storage. + + fix; Stabilized slime extracts will properly effect carp, spiders, bileworms, + and other "basic mobs".' + JohnFulpWillard: + - bugfix: Being in an application now properly uses the tablet's battery. + - bugfix: Messenger and Themify apps now close when minimized, so don't count towards + the running app limit. + - bugfix: Tablet UIs will now no longer spam open/close the UI when changing applications + - bugfix: Using the Eject ID button on tablets now ejects into your hand. + - bugfix: Computers now have an Eject ID button + - refactor: Cut down a lot of copy paste in tablet & program code, now it's mostly + done by the tablet. + Melbert: + - bugfix: Using Fleshmend while on fire gives the "on fire" fleshmend icon. + - bugfix: Using Revival stasis more accurately updates the icon where relevant + - bugfix: Fixes a potential input stall with revival stasis + - bugfix: Nightmare revival acts less funky - stops it from re-creating the Light + Eater. + NamelessFairy: - bugfix: The research directors monitor on tram has been correctly orientated - bugfix: The CE on tram no longer has two engineering department monitors, one has instead been swapped out for an engine monitor. @@ -175,68 +215,172 @@ - bugfix: The HoS' PDA painter can no longer paint PDAs into Lawyer ones. - bugfix: You can no longer multiply banana peels, gatfruit and more by using sliceable custom food + - bugfix: You can no longer trap yourself in north public mining maintenance if + you enter it without maint access. + Profakos: + - bugfix: Mail addressed to tram's cargo bay disposal bin will arrive successfully, + and the Incoming Mail Chute will properly accept wrapped parcels. + RikuTheKiller: + - bugfix: Reagents metabolize properly when dead. (If they're supposed to.) +2023-03-03: + Cheshify, Ferro: + - rscadd: A new ruin has been detected near the station, what secrets could it hold? + Shroopy: + - qol: Added another set of windoors to the Tramstation Xenobiology pens, fully + enclosing the space before them. The creatures in the main pens can now always + be accessed from above. + - refactor: Tramstation Xenobiology pens explicitly close to the right rather than + being rotated by using dir. + tf-4: + - bugfix: Fixed a missing wire in the Tramstation cargo warehouse. +2023-03-04: + Melbert: + - qol: Food over-top Drying Racks / Smartfridges will no longer decompose into ants + Vlada - VastKilleroOm: + - imageadd: added 1 hairstyle icon +2023-03-05: + Chlorotrifluoride: + - imageadd: added prettier icons for the normal and absorbent galoshes + Draggeru: - rscadd: Adds the tape wizard costume, both a real and fake variant - rscadd: 'Adds the costume behind the autodrobe contraband wire, and the real variant in the wiz den :cl:' - - bugfix: frozen gas tanks now release their contents upon shattering - - bugfix: holodeck gas tanks can now be deconstructed + Jacquerel: + - bugfix: Most spells can once again be cast even after someone stuns you with a + baton. + JohnFulpWillard: + - bugfix: The HoS' PDA painter can no longer paint PDAs into Lawyer ones. + Melbert: + - bugfix: Jobs get "You are the" and policy text again on spawn + - bugfix: Hijacked shuttles now count as "escaping alive" once agian + - bugfix: Hardcore random survival now actually checks that you've escaped alive, + and not just made it to centcom + - bugfix: Intelligent zombies can now escape. + - bugfix: Infectious zombies now don't count as escaped as intended. + - qol: Examine block'd out silicon "show laws" text. + - bugfix: Re-added a missing alert icon state for AI "laws updated" screen alert + - admin: Adds a new verb. "Law panel". This panel lets you see AND EDIT all silicon + laws in existence. + Paxilmaniac: - balance: The pipegun's chance to misfire and shoot at you rather than the person you're pointing it at has been removed + Profakos: + - bugfix: You can no longer multiply banana peels, gatfruit and more by using sliceable + custom food + Rhials: + - qol: Midwife Spiders can now sense how fully grown an egg cluster is by examining + it twice. + Sealed101: + - bugfix: fixed erroneous khinkali microwave recipe in the cooking menu. use a grill + like a normal chef + - bugfix: fixed AIs being able to recognize a spessman's identity over a holopad + call even if it was completely concealed, e.g. cloak of shadow, infiltrator + suit + - bugfix: undressing a hat/back item from a dog will correctly remove the item's + overlay + - bugfix: most armor vests will actually show on a dog when placed on its back + SyncIt21: + - refactor: RPED to infer icons of parts to use in `icon2html()` when displaying + part information + TheBoondock: + - bugfix: fixed missing inhand icon state for jaws of life + - refactor: refactored DNA vault. DNA probes now need to be linked with the vault + before scanning. + - qol: DNA probe can now access the dna database directly from the vault its linked + to, so you are always updated on the vault's database. Simply hit the vault + with the probe and it will link. + Timberpoes: - bugfix: Papercode has been significantly improved and trivially filled paper forms should no longer lag or crash players' game clients. - - imageadd: added prettier icons for the normal and absorbent galoshes + carshalash: - rscadd: Introduces orderable rabbit crate to cargo livestock. - - bugfix: fixed missing inhand icon state for jaws of life - Vlada - VastKilleroOm: - - imageadd: added 1 hairstyle icon - tf-4: - - bugfix: Monkeys are no longer able to teleport out of the Interdyne xenobio slime - pens. + flowercuco: + - rscadd: add new smite that adds deadchat control component to a victim + rageguy505: + - bugfix: Removed a stray floating space calendar and decal on tramstation and it + makes more sense to reach the kilo spare. + skylord-a52: + - bugfix: frozen gas tanks now release their contents upon shattering + - bugfix: holodeck gas tanks can now be deconstructed + tralezab: + - rscadd: Added the gondola mutant, a tier two zen-like observer + - rscadd: Entries are now locked behind tiers, activating a bonus in someone upgrades + the tier! + - qol: DNA Infuser will now print a failure reason when you... well, don't get what + you want. 2023-03-06: + GoldenAlpharex: + - bugfix: Fixed some issues with podpeople hair and horns not being drawn under + the right circumstances all the time. + Holoo-1: + - bugfix: Nanotrasen has conducted high precision in-depth analysis of Deltastation + and its shuttles. As a result anomalous floortiles were replaced with standard + issued ones. + Iamgoofball: + - bugfix: You can no longer fortnite with glass sheets LT3: - rscadd: Added new multi-vote system - balance: Map votes are now calculated using multi-vote instead of the old single-vote system - admin: Admins can now use either multi-vote or single-vote for custom votes - code_imp: Map choice filtering uses active player count, not all connected clients - Melbert: - - bugfix: Jobs get "You are the" and policy text again on spawn - SkyratBot: - - bugfix: Atmosians have finally convinced the thermomachines to not self-destruct - when built on blocked ports. - - bugfix: Failing to wrench down a thermomachine no longer hits it with the wrench. - - rscadd: Added a traitor final objective to infect the station AI with a virus, - that turns it malf and fully loyal to the traitor + - bugfix: Admins can jump to/follow patient zero of a disease outbreak again + OrionTheFox: + - bugfix: fixed missing emissives on the Engivend, Pwr-Game Soda, and generic Soda + vendors. Also fixed the seclaptop having no valid screen icon! + - bugfix: fixed a few items trying to apply emissives when they shouldn't. + - code_imp: added a stack_trace for emissives with missing icon states. + Paxilmaniac: + - code_imp: AMMO_BOX_FULL_EMPTY now looks for -full and -empty for sprites, rather + than -[max ammo of that magazine] and -0 + Profakos: - balance: the syndicate realized Chief Engineer is important enough to kidnap - bugfix: kidnap objectives will now properly be unavailable for you for 15 minutes after you take three, instead of after you take three assassinations. - - bugfix: Bartender's fountain pen was omitted during the swap over to tablets, - this has been amended. + RikuTheKiller: + - bugfix: Atmosians have finally convinced the thermomachines to not self-destruct + when built on blocked ports. + - bugfix: Failing to wrench down a thermomachine no longer hits it with the wrench. + SmoSmoSmoSmok: + - qol: made ORM easier to use + Spookuni: - balance: Latejoin dynamic rulesets have been rebalanced to reduce the frequency of midround revolution spawns. - Vishenka0704: - - admin: Added a ticket into mentrohelp convertation. Better than say "write it - to mentors". + carshalash: + - bugfix: Bartender's fountain pen was omitted during the swap over to tablets, + this has been amended. + tralezab: + - rscadd: Updated the bus ruin 2023-03-07: - Iamgoofball: - - bugfix: You can no longer fortnite with glass sheets - LT3: - - bugfix: Admins can jump to/follow patient zero of a disease outbreak again - SkyratBot: + Helg2: + - bugfix: fixed butchering bread dog spawning error bread. + JohnFulpWillard: + - bugfix: Corgis show their ID on examine. + - balance: Cult can no longer draw runes in survival pods. + Melbert: + - bugfix: Luminsecent slime actions correctly update their appearance when integrating + or ejecting slime cores + - bugfix: Fixed a Space Dragon related hard delete. + - bugfix: Mindswapped space dragons will break less. + NamelessFairy: + - admin: AB_CHECK_INCAPACITATED on an action's check_flags can now be modified by + admins. + - rscadd: New Neutral Station Trait, "Employee Birthday", its someone on the crews + birthday, make sure to wish them a happy birthday and perhaps get them a gift. + - rscadd: Two new party themed items have been added to the arcade prize pool, the + party horn and a box of party poppers. + PositiveEntropy: + - imageadd: Tweaked, Overhauled and Resprited a variety of garments related to the + security department, particularly its alternate clothes! Check it when possible! + Profakos: + - bugfix: 20+ item's discounts are properly smaller, instead of being larger - bugfix: You can no longer have multiple copies of the same heirloom theft objective - - qol: made ORM easier to use - - rscadd: Updated the bus ruin + Sealed101: - spellcheck: fixed humanoid examine easter egg's pronoun usage + carshalash: - qol: Regal Rats produce meat on butchering, reducing player confusion. - - bugfix: fixed butchering bread dog spawning error bread. - - balance: Cult can no longer draw runes in survival pods. - Zergspower: - - rscadd: 'Added missing job titles to SR specific ghost roles: BMD, DS2, Freighter, - Port Tarkon and Ghost Cafe!' - - qol: SR Specific ghost roles will now be itemized and tracked inside your hour - window coiax: - refactor: Refactored how eggs growing into chicks is implemented, and how the number of chickens and chicks are tracked. It's now possible for admins to make @@ -279,6 +423,15 @@ - bugfix: The party alarm now works again! - bugfix: Corgis show their ID on examine. 2023-03-10: + tralezab: + - bugfix: changed gondola mutants to require gondola meat instead +2023-03-08: + Jacquerel: + - balance: Traitor secondary objectives to steal or destroy an item are now associated + with a particular "owner" or "victim" and won't generate themselves if nobody + would actually be victimised by the crime. + - rscadd: Traitors can sometimes be tasked with stealing and destroying the roboticist's + big crowbar, if there is one LT3: - imageadd: New tram and elevator sprites - code_imp: Lighting capability for all buttons @@ -308,6 +461,34 @@ anymore, this has been moved to the non-abstract types. - balance: Rebalances rewards from repeatable traitor objectives to be more consistent with each other. + LemonInTheDark: + - bugfix: Examining in the dark is less wonk now, sorry bout that + Melbert: + - rscadd: Somewhere, in deep space, a relic to every fluked nuclear operative mission + drifts abandoned. + NamelessFairy: + - bugfix: The birthday station trait now actually works. + SmoSmoSmoSmok: + - qol: Borgs are now acknowledged by the orm +2023-03-09: + BlueMemesauce: + - bugfix: Mime finger gun icon is no longer an error + - admin: Logs when mimes break or make a vow of silence + Farquaar and ArcaneDefence: + - rscadd: Plasmamen can scream now + Melbert: + - bugfix: Fixes pirates and starfury assailants keeping minds of past lives + - bugfix: Fixed a eswords, some tools, and some other misc. items from being invisible + while extended / active + - bugfix: Teleshields and other misc items not extending in hand when active + - bugfix: Switchblades click on extend again + - bugfix: Pendrivers click on extend + Moth-lantern: + - rscadd: Adds the rest of the lipsticks to the cosmetics.dm + NamelessFairy: + - bugfix: Some airlock access oversights on tramstation have been fixed. The service + lathe cannot be accessed by jobs that shouldn't have access via maint and robo/engi's + cant get into secure tech storage. - bugfix: 'Rapid lighting devices can now have their color set to #ffffff and the resulting lights will now function.' - bugfix: Rapid lighting devices will now default its set color to white when created @@ -507,6 +688,7 @@ die of cold. - bugfix: Mime finger gun icon is no longer an error - admin: Logs when mimes break or make a vow of silence + - bugfix: The party alarm now works again! - refactor: Admin event setup's have been refactored to use lists. - bugfix: When admins customize the pirate event all options will be available rather than just options that have not been randomly rolled. @@ -636,6 +818,54 @@ - bugfix: fixed glass lens description - code_imp: code cleanup for the language fixes 2023-03-12: + Rhials: + - spellcheck: Fixes the Russian/Bounty Hunter fugitive hunter spawn backstory messages. + Sealed101: + - bugfix: slime processor no longer sucks in slimes that it can't reach (glass panes, + blocked by other machines etc) + timothymtorres: + - balance: Add lava moat to Icebox vault and fix maint area being viewable from + primary hallway +2023-03-10: + IndieanaJones: + - balance: Abductors' midround spawn weight has been increased. Expect to see them + more often + Jacquerel: + - bugfix: Something which is "forced" to embed will now always actually embed. Resultingly, + accidentally swallowing glass or encountering it behind a poster without adequate + protection will now always cause it to embed into your body. + - balance: Thin and fingerless gloves may no longer protect you from having glass + in your hand after pulling down a poster + - bugfix: Bullets containing shrapnel now use their correct chance to embed, which + may cause bullet wounds to contain shrapnel more frequently. + Melbert: + - qol: Completing an experiment which discounts a researched tech node will give + a partial refund of the discount lost. For example, researching the industrial + engineering research without scanning iron toilets will refund ~5000 points + if you complete it afterwards. This only applies once per experiment, so experiments + which discount multiple nodes only refund the first researched. + Profakos: + - bugfix: the double esword sales are now smaller than regular sales + SyncIt21: + - bugfix: machine frames not spawning stack components we inserted in them when + pried open with a crowbar + - bugfix: borg rcd's not displaying the correct matter units in its UI & when examined + - qol: arcd animation is smoother and makes more sense and has infinite matter + - bugfix: rcd not getting inserted into toolbelts & other storage units upon clicking + - bugfix: rld updating its icon state correctly based on the matter left + Watermelon914: + - code_imp: Abstract types don't hold telecrystal rewards or progression rewards + anymore, this has been moved to the non-abstract types. + - balance: Rebalances rewards from repeatable traitor objectives to be more consistent + with each other. + coiax: + - bugfix: Tiziran lung stirfry now correctly uses a bowl in its construction, and + is left over after eating. It also can only be constructed with organic lungs, + because cybernetic lungs don't fry as well. +2023-03-11: + GoldenAlpharex: + - bugfix: Fixed some potential future runtimes relatively to the new bodypart overlay + system's coloring procs. Jacquerel, sprite by J(Clearly Lying): - balance: Traitor objectives which ask you to destroy lathes or the ORM provide an optional bonus if you _booby trap_ the machine using a provided tool. This @@ -643,6 +873,29 @@ - balance: Performing the objective without rigging the machine to explode awards no TC, using it awards more TC than it did previously. LT3: + - bugfix: Map filter works properly in the pre-round lobby + - bugfix: Map vote doesn't log 'not enough players' if the vote starts in the pre-round + lobby + OrionTheFox: + - bugfix: fixed Telepathy messages not having a check for being in range. + SgtHunk: + - bugfix: Androids now properly have robotic wings instead of moth wings. + sergeirocks100: + - bugfix: Gifts you wrap will now display their greyscale colors as they're supposed + to. + - bugfix: Wrapping paper color selection has been rebound to Alt+click, to fix a + bug where both wrapping paper color selection, and extracting wrapping paper + from a roll were both bound to right click. +2023-03-12: + Helg2: + - bugfix: Changed Quantum Hair Dye recipe from colourful reagent, space drugs and + radium to colourful reagent, space drugs and chlorine. So you can make it normally. + Jacquerel: + - bugfix: Spell Cards from the Wizard spell will now home in somewhat on the target + nearest to your cursor. + - bugfix: The Spell Cards spell now displays the correct icon instead of a big red + "error" text. + LT3: - code_imp: Anomaly event parameters consolidated to defines - balance: Anomaly countdown timer reduced to 75 seconds Melbert: @@ -650,52 +903,62 @@ - bugfix: Fixes Juggernaut projectiles not doing bonus damage to nearby structures - code_imp: Removed projectile nodamage var, replaces it with just checking for damage - SkyratBot: - - bugfix: fixed missing disposal pipes (tramstation) - - bugfix: fixed missing zones (tramstation) - - bugfix: fixed wrongly placed zones (tramstation) - - bugfix: fixed wrongly placed tiles (tramstation) - - bugfix: Changed Quantum Hair Dye recipe from colourful reagent, space drugs and - radium to colourful reagent, space drugs and chlorine. So you can make it normally. - - bugfix: Fake nuclear authentication disks have been updated to include the holographic - security sticker found on the real disk, one again making them convincingly - real to the average person. - - code_imp: The keep_me_secured component will now only process if it has at least - one callback argument passed. - - bugfix: The cultist ritual site locator and Nar'Sie summon message will no longer - use area names modified by the CE's blueprints. + NamelessFairy: - bugfix: Firing pin swapping's 2 balloon alerts have been replaced with a single more readable one. - admin: Admins can now edit a pin_removable var on firing pins to render them unremovable from the weapons they're installed in. - - bugfix: Spell Cards from the Wizard spell will now home in somewhat on the target - nearest to your cursor. - - bugfix: The Spell Cards spell now displays the correct icon instead of a big red - "error" text. + Profakos: - bugfix: Pods on Tramstation can be properly launched early + Rhials: + - bugfix: The cultist ritual site locator and Nar'Sie summon message will no longer + use area names modified by the CE's blueprints. Stalkeros, san7890 for the announcement texts: - code_imp: Made pirate groups' arrival messages editable and more importantly unique for each group. - Syrox25: - - rscadd: 'Adds new Taur variant: "Goop"' + VladinXXV: + - bugfix: Fake nuclear authentication disks have been updated to include the holographic + security sticker found on the real disk, one again making them convincingly + real to the average person. + - code_imp: The keep_me_secured component will now only process if it has at least + one callback argument passed. + spockye: + - bugfix: fixed missing disposal pipes (tramstation) + - bugfix: fixed missing zones (tramstation) + - bugfix: fixed wrongly placed zones (tramstation) + - bugfix: fixed wrongly placed tiles (tramstation) 2023-03-13: - Baron: - - imageadd: Replaced Arachne borg sprite + CRITAWAKETS: + - config: All dynamic midround rulesets are now properly accounted for in the dynamic.json + config. MMMiracles (tramstation): - rscadd: Tramstation's Science department has received a substantial remodel! Please consult your local tour guide for more information. - rscadd: The Vacant Commissary office has been moved to the top floor near Departures, with a new Barber shop taking its place on the lower floor. - Zergspower: - - balance: Severely lowers the SEVA Suits temperature protection to 600 K down from - 35000 K - nikothedude: - - bugfix: CUCKS now properly shows the name of waht it will deploy, + fixes a runtime - associated with it -2023-03-14: - GoldenAlpharex: - - bugfix: You should only be able to spawn as one ghost role at a time. Close the - prompt if you want to spawn as another one. Begone soulless randomgen humans! + Nabski: + - imageadd: Renault has a dopey walk animation now, god bless. + Thunder12345: + - spellcheck: The birthday moodlet's description is now gramatically correct. + carshalash: + - qol: Minor changes to Mexican tourist bot name generation + - qol: Japanese tourist bots will no longer request atomic bombs. + kinneb: + - imageadd: Changed sprites for wooden chairs, comfy chairs, electric chairs, folding + chair and shuttle seats! + - imageadd: Resprites Donut Box, and all sprites for donuts in it. +2023-03-14: + GoldenAlpharex: + - bugfix: You should only be able to spawn as one ghost role at a time. Close the + prompt if you want to spawn as another one. Begone soulless randomgen humans! + Jacquerel: + - rscadd: A station trait which sometimes populates maintenance with small spiders. + You can wear them as a hat if you wanted to have a spider on your head for some + reason. + - rscadd: Spider mobs will automatically start webbing up their environment. + JohnFulpWillard: + - code_imp: The Server ending announcement is now sent to players once the game + has properly ended. Jolly: - bugfix: On IceBox, there shouldn't be wires looping under the walls near the vault anymore. @@ -790,6 +1053,16 @@ keys in your keybindings menu, under game preferences. - qol: Clicking on the turf of a fire alarm/light switch with your hand will activate it. + NamelessFairy: + - bugfix: When learning new cult spells their buttons will no longer stack on top + of one another. + PositiveEntropy: + - imageadd: Retouches all glass floors! + Vect0r2: + - bugfix: Ethereal discharge no longer alerts you twice that you did it. + Watermelon914: + - bugfix: Fixed playmins having access to admin functions within normal integrated + circuits. - balance: Removed a lot of item targets from the temporary steal traitor objectives and replaced them with more useful items that don't intersect with the list of items that a traitor can be tasked with stealing for their permanent steal @@ -817,6 +1090,72 @@ Zonespace27: - rscadd: Added a black dog plushie for a donator coiax: + - bugfix: "In order to make l\xF6rtonknusksolt, fl\xF6fr\xF6lenknusksolt and k\xE6\ + niatknusksolt, bowls are required, to match the bowls in their sprites and left\ + \ behind after eating." + - bugfix: "Crafting fl\xF6fr\xF6lenknusksolt will no longer create a l\xF6rtonknusksolt\ + \ instead." +2023-03-15: + Comxy: + - rscadd: Adds Ammoniated Mercury, a chemical to the game. + - balance: Calomel now purges all chemicals again, and now Ammoniated Mercury only + purges toxins. + GoldenAlpharex: + - bugfix: Fixes limbs not properly storing their external organs, resulting in issues + when calculating the bodytypes. + - bugfix: Fixes ghost role spawners not allowing you to spawn from more than one + ghost role per round. + Guillaume Prata: + - bugfix: Bolter wrench's protolathe design is correctly at the advanced engineering + tab now, instead of being under janitorial. + Jackraxxus: + - qol: The AI now has hotkeys for its shells, make sure to bind them to your preferred + keys in your keybindings menu, under game preferences. + Jolly: + - bugfix: In MetaStations cold room storage, the O2 canisters were replaced with + anesthetic canisters. Now go put that clown into an eternal slumber, you traitorous + CMO! + LemonInTheDark: + - balance: The janitor's trashbag now fits on his belt. In exchange, taking something + out of it sends a visible message, and has a delay. + - rscadd: I made circuit floors brighter and more vivid. + - rscadd: Made air alarms, vending machines, newscasters, request consoles, status + displays and keycard machines slightly "brighter" (larger light range, tho I + did make air alarms a bit brighter too) + - rscadd: Tweaked desklamps. Lower range, and each type gets its own coloring instead + of just fullwhite. + - bugfix: AI displays are no longer always emissive, they'll stop doing it if they + aren't displaying anything. Hopefully this'll look nicer + Melbert: + - balance: If you are handcuffed, you can't instantly resist out of an unlocked + labor camp teleporter (however, resist time is halved). + - bugfix: Malf AI's xray camera upgrade no longer shows on station security camera + consoles + NamelessFairy: + - bugfix: The metallic hydrogen axe is no longer silent when using it as a crowbar. + - bugfix: You are now capable of hitting standard windows with a crowbar when they're + fully constructed. + Sealed101: + - qol: mechs have an action button on the HUD for toggling equipment safeties + SgtHunk: + - qol: Holodeck space chess board is more pleasing to look at. + - bugfix: Fixes holodeck space chess pieces being reversed. + - spellcheck: Fixed white king's description saying it moves any tile in one direction. + TheSmallBlue: + - qol: Bluespace Launchpads will now use the fail trigger if your circuit destination + is out of range. + - bugfix: The jar of pickles, after millenia, finally actually contains pickles. + All hail the jar of pickles. + Zytolg: + - bugfix: Icebox Station has been cleansed from nasty effect decals hiding underneath + walls + - bugfix: Clears out decals from under rocks on Tramstation + - bugfix: No more effect_decals under Kilostations walls and rock + - bugfix: Removes effect_decals from underneath walls on Deltastation + atosti: + - bugfix: Re-implements physical and mental statuses in crewmember medical records. + - bugfix: Re-implements changing a crewmember's physical/mental status via a Med-HUD. + coiax: - rscadd: Chefs can sometimes get ketchup bottles in the mail. - bugfix: Ketchup in the crafting menu is now represented as the bottle, rather than an empty condiment pack. @@ -854,6 +1193,50 @@ - bugfix: 'If you notice any bugs related to the rendering of your characters, please report them using the "Report Issue" button at the top-right corner of the screen, mentioning #19635 in it for ease of reference.' + mc-oofert: + - rscadd: Added stickers, purchasable from cargo + vinylspiders: + - bugfix: slimepeople and vampires are now affected by the blood deficiency quirk +2023-03-16: + ArcaneDefence: + - bugfix: A bunch of invisible magazine sprites are visible now + - imageadd: Bullpup shotgun magazines for buckshot and slugs are now indicated with + a red or white dot, respectively. + - balance: Putting a non-clothing item onto someone else creates a visible message + the same way a clothing item would. + Helg2: + - spellcheck: fixed a box of party_poppers and camera tag "tech_storage" + MMMiracles: + - bugfix: White ships can now dock with Tramstation properly again. + Melbert: + - admin: Logs when forced events trigger + - bugfix: Paradox Clones now know that their target knows. + - balance: Magboots will now protect you from sliding on ice. It will not stop the + slip, though. + - bugfix: '"Ice sliding" (from patches of permafrost ice) will now correctly slide + you until you reach a non-ice patch.' + - bugfix: Speed potioned magboots maintain their speed booster after toggling them + - refactor: Refactored magboots. + - refactor: Refactored noslip mechanics. + Mothblocks: + - qol: Clicking on the turf of a fire alarm/light switch with your hand will activate + it. + Rhials: + - rscadd: Adds the Smoking Room icebox ruin, found on the station level! + Sealed101: + - qol: medical cyborg's surgical processor now tells the user on examine that it + needs to be equipped in an active module to access downloaded surgeries + - qol: medical cyborg's surgical processor now lists downloaded surgeries on examine + Time-Green: + - bugfix: fixes deadly harvesting just taking harmless extorgans + - code_imp: renames internal_organs to organs now that it can also contain external_organs + necromanceranne: + - rscadd: Adds the Snatcherprod. Like a teleprod, but it steals stuff from peoples + hands instead. Made using a telecrystal, rather than a bluespace crystal. +2023-03-17: + DAKKA-WAAAGH: + - bugfix: Removes duplicate decals and replaces them with new ones that are more + efficient Jolly: - bugfix: Light office chairs and Dark office chair colors are, now actually reflective of the name. @@ -879,21 +1262,48 @@ - qol: medical cyborg's surgical processor now lists downloaded surgeries on examine - balance: The janitor's trashbag now fits on his belt. In exchange, taking something out of it sends a visible message, and has a delay. + - bugfix: The directional states for the toppled wooden chair sprites are now consistent. + You really can't tell visually, but its been fixed. + - imageadd: Using the new wooden chair sprites, there's now new toppled wooden chair + sprites. Go wild. Have a ballroom brawl or something. + LT3: + - bugfix: Tramstation xenobio now has slimes + Melbert: + - bugfix: Lead batteries now start partially drained as intended. + Profakos: + - bugfix: Your species will no longer get deleted if a changeling who copied you + is deleted from existence + SyncIt21: - rscadd: suit storage unit circuit boards to engineering & science department circuit printers. - rscadd: freezer cabinet as a craftable & destructible item. - qol: flood light can now be deconstructed rather than destroyed/thrown away. - - spellcheck: fixed a box of party_poppers and camera tag "tech_storage" - softcerv: - - bugfix: cryo now saves modular persistence - vinylspiders: - - bugfix: fixes the sadism perk causing unreasonable amounts of arousal when around - corpses--now only live mobs that are in pain count towards it. + - bugfix: area machinery from breaking after creating & modifying areas via the + station blueprints. + - refactor: turfs are cannonized from areas during creation/editing operations & + empty areas are deleted + - refactor: removed duplicate Initialize() from light switch + - refactor: arcd has all upgrades installed + ZephyrTFA: + - bugfix: airlocks will no longer shock you when using the rust mansus grip to destroy + them + - bugfix: Stabilized Orange extracts are no longer able to cool you from any temperature + instantly + - bugfix: Changelog link for org members works again + atosti: + - bugfix: the jobs columns in the View Crew Manifest window are now uniformly aligned + across department headers + - bugfix: extremely long crewmember names are now truncated in the default view + for the Crew Manifest window + mc-oofert: + - bugfix: Borg synthesizers will no longer remain on the status panel if a borg + changes modules + - bugfix: Stabilized gold extracts can now spawn basicmobs + - bugfix: All CTF windows are now indestructible, fixes breaking into space during + CTF. + - bugfix: Turrets will now shoot basicmobs such as carp + - bugfix: Explosive holoparasites no longer runtime if they plant bombs 2023-03-18: - Paxilmaniac: - - bugfix: The CIN armor vests from cargo will now rotate with the person wearing - them, rather than not at all -2023-03-19: ATHATH: - balance: The inorganic biology symptom now adds both MOB_MINERAL and MOB_ROBOTIC to a virus's list of infectable biotypes instead of only MOB_MINERAL. Currently, @@ -937,6 +1347,16 @@ - bugfix: Stabilized gold extracts can now spawn basicmobs - rscadd: Adds the Snatcherprod. Like a teleprod, but it steals stuff from peoples hands instead. Made using a telecrystal, rather than a bluespace crystal. + DAKKA-WAAAGH: + - bugfix: Fixed duplicate tile decals and made tile decal shapes more efficient + Helg2: + - balance: Syndicate briefcase full of cash is now worth of 3 tc instead of 5. Better + than nothing + - qol: added tooltips for pneumatic cannon. Also changed powerfist's tooltips slightly. + - bugfix: fixed that you can't put wrench in pneumatic cannon. + - bugfix: fixed that you can manipulate with pie gun as if it's a normal pneumatic + cannon (adjust air tank, wrench it's output level's and etc.) + Jacquerel: - bugfix: Carp will once again be healed from being near carp rifts - bugfix: Sepia slime cores and the rewind camera now work on Ian - bugfix: Sapient ridden carp (or cows) can throw off their riders by shoving them, @@ -989,6 +1409,29 @@ CTF. - bugfix: Pubbystation, if run, will now have a working monastery pod shuttle again. - bugfix: Turrets will now shoot basicmobs such as carp + Jolly: + - rscadd: 'CTF has a "new" map: ctf_turbine! I hope you like 24/7 TDM where the + objective is secondary.' + MMMiracles: + - bugfix: Xenobiology on Tramstation can now use their consoles to see the upper + floor. + Melbert: + - bugfix: Heretic sacrificing now checks both the last mind to inhabit the body + as well as the current mind when checking for high value targets + NamelessFairy: + - bugfix: Corgi pinata's no longer have their own category on the cargo shuttle + console. + Rex9001: + - rscadd: Adds 2 new iron/dark/airless subtypes, textured and smooth_large + - rscadd: Adds the_faceoff.dmm Ruin + Rhials: + - rscadd: Mafia maps now come with their own thematic outfits! + - spellcheck: Changes the "Snowdin" mafia map description + SyncIt21: + - bugfix: vents & scrubbers getting assigned twice to an area when it's merged with + another area via station blueprints + - refactor: merged` Initialize()` & `New()` of vents & scrubbers into just `Initialize()` + ZephyrTFA: - rscadd: Surgical Processor upgrade for medical cyborgs can now be used to start surgeries. - balance: You no longer need to use two module slots for starting surgeries with @@ -1005,10 +1448,44 @@ - bugfix: fixed that you can manipulate with pie gun as if it's a normal pneumatic cannon (adjust air tank, wrench it's output level's and etc.) - balance: Bone gel now spawns in stacks of 4 in Paramedic and Medical ERT belts + atosti: + - balance: Bone gel now spawns in stacks of 4 in Paramedic and Medical ERT belts + - bugfix: Player-controlled Regal Rats now lick or claw based on their combat mode. + - bugfix: NPC Regal rats now properly claw at enemies, moving on to new targets + after completing kills. + mc-oofert: - bugfix: You can no longer bypass recyclers indestructibility check by just putting it into something - bugfix: Recyclers can no longer recycle the insides of cyborgs - balance: You can no longer EMP defibrillators to make them combat-usable + vinylspiders: + - bugfix: the 'target cyborgs' option for syndicate turrets is now functional again, + and enabled by default. Station borgs will still be shot at on sight unless + a syndicate crew member deliberately configures the turrets otherwise. + - bugfix: fixes gloves not sending the COMSIG_PARENT_ATTACKBY signal +2023-03-19: + A.C.M.O.: + - bugfix: Fixed lungs gas exchange implementation, so you always inhale and exhale + the correct gases. + - bugfix: Fixed a large quantity of hard-deletes which were being caused by organs + and cybernetic organs. + - bugfix: Fixed many organs which were applying side-effects regardless of whether + or not the insertion failed. + - code_imp: Added unit tests for Organs. + - code_imp: Added unit tests for Lungs. + - code_imp: Improved unit tests for breathing. + - code_imp: Improved unit tests for DNA Infuser organs. + DATA-xPUNGED: + - qol: Tramstation's kitchen has been completely refurbished! + JohnFulpWillard: + - bugfix: Pubbystation, if run, will now have a working monastery pod shuttle again. + Jolly: + - bugfix: All the newly resprited chairs Left and Right facing sprites should be + symmetrical now. + LemonInTheDark: + - admin: You can now optionally populate new lists created via vv. hit cancel to + stop filling them up + NamelessFairy: - admin: Admins can now customize the outfit necrostone victims are equiped with. - admin: Admins can now customize the maximum number of thralls that can be created by a necrostone @@ -1050,6 +1527,51 @@ - bugfix: removed two decals from a space ruin. - bugfix: Fix not being able to read in full bright areas 2023-03-21: + - qol: Abductors chat and Lings/Xenomorphs hivemind chat type has been moved from + unsorted to radio. + - admin: Admins can now customize the wisdom cow event. + Rhials: + - soundadd: The chainsaw now has SFX for starting, stopping, and idling. + Sealed101: + - bugfix: fixed a few internal organs acting wonky on inserting/removing (some xenomorph + organs, abductor glands, flashlight eyes, demon/cursed hearts) + Vile Beggar: + - rscadd: The Derelict Sulaco ruin was spruced up with a new look and some neat + little goodies (free rouny plush). + ZephyrTFA: + - bugfix: Plasmamen don't have hearts, again + atosti: + - bugfix: Material tile floors now make noise when walked on by bare/claw/heavy + feet +2023-03-20: + Cheshify: + - bugfix: removed two decals from a space ruin. + GoldenAlpharex: + - bugfix: Ghost role spawners that are set to have infinite uses no longer run out + of uses. + Jacquerel: + - bugfix: Plasmamen and golems (and androids, if you ever find one) can be implanted + again. + Melbert: + - bugfix: Fixes rare human arm melting condition + timothymtorres: + - bugfix: Fix not being able to read in full bright areas +2023-03-21: + Jacquerel: + - bugfix: Removing a storage implant from someone will dump the items on the ground + rather than inside the mob. + - bugfix: Wizard Apprentices can no longer draw their own ritual circles. + - bugfix: Implants and items which you cannot drop will no longer be forced out + of your character when you are kidnapped. + - bugfix: Objects you try to take back from the kidnapping location as souvenirs + will drop to the ground when you leave instead of being destroyed, except shirts + and shoes (make sure to pick up your monographed synidcate T-shirt). + JohnFulpWillard: + - balance: Wirecarp now properly shuts off NtNet remotely. + - balance: Wirecarp now shows the source of a PDA that does an action. + - bugfix: Wirecarp can no longer be used to see if Nukies exist through their networks. + - rscdel: Removes Software downloading and communication Ntnet networks, as they + were pretty worthless. JohnFulpWillard, sprites by BalkyGoat: - rscadd: ' The Janitor Access key: Janitors can now be given departmental AA (one at a time) using the Keycard authentication device in Command offices. Use it @@ -1064,6 +1586,17 @@ - bugfix: Plasmamen and golems (and androids, if you ever find one) can be implanted again. - qol: adds service radio to jani/curator/chaplain/lawyer vendor + OneAsianTortoise: + - qol: adds service radio to jani/curator/chaplain/lawyer vendor + Pickle-Coding: + - balance: 9mm, 10mm, and other stuff can cause wounds. + Profakos: + - bugfix: Tramstation now has the right amount of security and medical record computers + Rhials: + - balance: midwife spider eggs now spawn in separate locations. Divide and conquer! + - bugfix: midwife spider eggs can no longer generate in atmos-hazardous areas. + atosti: + - bugfix: Organ harvesters now open and abort harvesting when losing power coiax: - bugfix: Coffee cups are now correctly immune to becoming frozen by low temperature water vapour. @@ -1143,6 +1676,51 @@ - bugfix: pod person hair can be once again styled by secateaurs - qol: Prosthesis organ manipulation now warns you if you are using the incorrect engineering tool + DATA-xPUNGED: + - spellcheck: "Pacoca is now called \"Pa\xE7oca\", as it should" + Helg2: + - rscadd: Wirebrush is now avalaible at janivend, for janiborg and you can put it + in the janibelt. + Melbert: + - bugfix: Fixed stray white pixel in illegal rolling pin inhands. + NamelessFairy: + - bugfix: Stray Cargo Pod false alarms will once again play an announcement when + they occur. + Rhials: + - bugfix: NODISMEMBER mobs can now be attacked by the flesh worm. + SmoSmoSmoSmok: + - bugfix: heck suit no longer bugs out worn boots/gloves icons + coiax: + - bugfix: Fixed missing food types for the meat clown, it is now meat and fruit. + san7890: + - refactor: Some aspects of how we track suicides from your living mob to your observer + have changed- please do let us know if anything has broken via a GitHub Issue + Report. + tf-4: + - bugfix: Failing a kickflip no longer shows the chat messages to the wrong people. +2023-03-23: + Astrogem2: + - rscadd: New space ruin that I have made, which adds some variety to space searching. + Cheshify: + - rscadd: Nanotrasen has given the crew access to a brand new emergency shuttle! + Watch out for it's destructive entrance! + LT3: + - imageadd: New fire alarm + - code_imp: Fire alarm/fire door volume reduced, lights synchronized + Singul0: + - bugfix: Circuit-based bluespace launchpads now work again! + SyncIt21: + - bugfix: aux construction console RCD works again + kawoppi: + - bugfix: added lights to the tramstation head of personnel's office +2023-03-24: + Jacquerel: + - rscadd: Bioscrambler anomalies will once again swap your organs with other organs. + - balance: Bioscrambler anomalies no longer affect synthetic parts. + LordVollkorn / Gage Gaebler: + - rscadd: Added Traveler's Rest, a tiny space structure for space travellers to + relax and to prepare for the explorations ahead. + Rhials: - rscadd: Xenomorphs born in the room the roundstart delivery egg was spawned in will be part of a special "captive xenomorph" team, tasked with escaping and tracked in the roundend report. @@ -1332,6 +1910,22 @@ teleports your brain to the mythical Gem Room. - balance: Changes the universal click cooldown of the tendril hammer from the goliath infusion into an internal cooldown just for the special heavy attack. + SmoSmoSmoSmok: + - bugfix: the orm will no longer display weird decimals + SyncIt21: + - bugfix: canvas getting finalized with untitled name when naming is cancelled + atosti: + - bugfix: machines can now be pried open more than once. + - bugfix: machines now have the correct density when pried open. + flowercuco: + - qol: Prosthesis organ manipulation now warns you if you are using the incorrect + engineering tool + lizardqueenlexi: + - bugfix: all space ruins can now appear on Linux servers + softcerv: + - bugfix: drawing from an empty tarot card deck no longer causes runtimes + vinylspiders: + - bugfix: fixes gondola meatslab not being able to be placed into the DNA infuser - qol: adjusted the blood deficiency quirk for slimepeople to not cause excessive hunger as long as blood volume is kept above 550 via an IV drip (or other means of getting welding fluid/some other toxin etc into the bloodstream, e.g. ingestion) @@ -1342,6 +1936,37 @@ on the analyzer, giving more accurate readings - bugfix: Moved the tank compressor and some tables and the anomaly refinery so that the tank compressor could actually be usable again on Tramstation. +2023-03-25: + 13spacemen: + - qol: It is now obvious when examining volume pumps that you can multitool them + to overclock them to disable pressure limits and spill gas out. Overclocked + volume pumps flash lights + Hatterhat: + - bugfix: Thrown reagent containers (beakers, molotovs) hitting mobs no longer fully + splash their target with their contents, as this was unintended behavior. The + intended behavior was 0-50% of the splashed reagents being ignored. Throwing + stuff at floors/walls is unaffected. + LT3: + - code_imp: Access key rings added to list on creation + - code_imp: Access keys unregister signal when destroyed + Rhials: + - code_imp: splits up spacevine.dm into four files in the events folder, and a __defines + file. + - code_imp: Lightbulb removal code is a little bit easier to read + - spellcheck: The lightbulb remover skillchip implant (which I know you guys LOVE + to use) has a slightly different message now. + SyncIt21: + - bugfix: broken sprites in RCD UI + Thunder12345: + - rscadd: Added skirt variants of the galaxy suits + Timberpoes: + - bugfix: DNA Scanners, Sleepers, Abductor Experimentors, Skill Stations and Mod + Installers now appropriately release their contents when opened, fixing an issue + where they could permanently absorb players and items until admins intervened. + - bugfix: Cyborg recharge stations should be much more usable again. + cats4gold: + - qol: adds the weight class 'tiny' to paper slips + timothymtorres: - rscadd: Add crafting recipe for basketballs (leather sheets) and basketball hoops (metal, rods, and durathread) - rscadd: Add new basketball minigame for 2-7 players. There are 4 different courts @@ -1359,6 +1984,50 @@ - bugfix: DNA Scanners, Sleepers, Abductor Experimentors, Skill Stations and Mod Installers now appropriately release their contents when opened, fixing an issue where they could permanently absorb players and items until admins intervened. +2023-03-26: + Chlorotrifluoride: + - imageadd: prettified all RTD icons + - imageadd: prettified in hand RLD icons + - imageadd: subtly improved the RSF icons + NamelessFairy: + - bugfix: Tram's Ordnance Freezer is now piped correctly. + PositiveEntropy: + - imageadd: Redoes The Safes! + Timberpoes: + - bugfix: Having your severed, brain-filled head reattached to a body no longer + teleports your brain to the mythical Gem Room. + VladinXXV: + - bugfix: The intern who was recording Etheral crewmembers' bloodtypes as random + human bloodtypes has been replaced with an intern who has seen the example made + of the previous one. + ZephyrTFA: + - bugfix: You can no longer use Pocket Protectors to pull items out of nullspace + mc-oofert: + - refactor: Stickers use a component and an element now to do their sticking + san7890: + - bugfix: Tile decals are no longer fucked on all stations. + vinylspiders: + - bugfix: fixed blood deficiency quirk sending the wrong blood pack to roundstart + species who have exotic blood +2023-03-27: + ATHATH: + - spellcheck: Tweaked an outdated doctor tip to reflect that fact that salbutamol + can't heal plasmamen (outside of very specific edge cases). + Helg2: + - qol: guillotine description tips are now span_notices (blue text) instead of just + a bunch of grey text. + - bugfix: fixed a bug that if you try to behead body without a head with guillotine + it just stops working. + JohnFulpWillard: + - balance: You can no longer print Technology data disks. You can still print Tech + disks, which hold techweb information on it, just not the one that holds up + to 5 nodes. + - balance: ^ Because of this, there's no way to download nodes from an RD console + and upload them to an Autolathe to bypass departmental restrictions, you have + to go through a Techfab/Circuit imprinter for your needs. + - balance: Ones that are found cannot have anything uploaded/deleted off of them + either, you can only upload them to the Web. + - code_imp: Every individual Bepis disk no longer create an entire techweb - bugfix: Computers are now properly connected to Ethernet, and can use Ntos when Relays are down. - refactor: Removes Ntnet and Ntnet interfaces, which was only used by Ntnet circuits @@ -1409,12 +2078,95 @@ - rscdel: Revert elevator panel UI theme change OrionTheFox: - rscdel: Removed the obsolete Microfusion Cell Containers that spawned in the armory. + LT3: + - imageadd: Fire alarm sprites are directional again + - imageadd: Solo benches are no longer invisible when facing east/west + LemonInTheDark: + - bugfix: Fixes decals layering weird in some cases + - qol: Human gravity will react to changes instantly, instead of waiting for the + next process tick. Hopefully this feels better and not worse + Moth-lantern: + - bugfix: Anomalies will no longer spawn at the bomb testing range satellite. + NamelessFairy: + - bugfix: CTF fourside's yellow spawnpoint walls now use the same lighting as the + rest of the map instead of space lighting. + Profakos: + - bugfix: The Starfury's Corvette and Fighters can now visit Tramstation + Rhials: + - bugfix: Xenomorphs will now be properly teamed together again, and will show up + together on the roundend report. + SishTis: + - bugfix: Fixed gravity issue in Underground Outpost 45's research airlock. + Xander3359: + - balance: No-slip mod module and no slip shoes no longer have a reputation lock. + Y0SH1M4S73R: + - admin: Fixed admin lua scripting on Windows-hosted servers running on beta version + 515.1602 (the latest version as of this change) + mc-oofert: + - rscadd: A new ruin has drifted into the horizon, the Mass driver router + necromanceranne: + - balance: Changes the universal click cooldown of the tendril hammer from the goliath + infusion into an internal cooldown just for the special heavy attack. + san7890: + - bugfix: If you buckle a dog to a bed, it will no longer drag its bed as it goes + to bark at the mailman. It will instead be comfy and chilling, as expected. + spockye: + - bugfix: fixed some tiles missing nearstation on Metastation + - bugfix: fixed some tiles having spacetiles with nearstation on Metastation + vinylspiders: + - bugfix: giving a podperson a blood transfusion by injecting them with water/whatever + their exotic blood happens to be will now work. + - qol: lizards with blood deficiency now receive the type 'L' blood packs instead + of an unhelpful type 'O-' one. + - bugfix: plasmamen will now be given their internals upon being kidnapped and upon + being returned. +2023-03-28: + 13spacemen: + - qol: Cult Roundend Report no longer lists post-summon cultists. No more 30 random + Harvesters clogging up the roundend report + Helg2: + - rscadd: Bacteria rich moldy food (like breadslices and pizzaslices) now spawn + in trashcarts, trashbags and randomly on the floor. + - rscadd: Damp rag now spawns in the trashcarts and etc. + Jacquerel: + - bugfix: Players with phobias will no longer be frightened by items equipped to + players in slots which are not considered to be visible. + - bugfix: Players with a phobia of the supernatural won't be spooked by void cloaks + which are currently invisible. + LT3: + - rscadd: Tram signs will now malfunction when the tram is malfunctioning + - qol: Janitor access keys now show up on the Custodial Locator tablet app + LemonInTheDark: + - bugfix: Fixes a bunch of minor gravity bugs, report em if you see more yeah? + Moth-lantern: + - bugfix: Moved the tank compressor and some tables and the anomaly refinery so + that the tank compressor could actually be usable again on Tramstation. + Profakos: + - bugfix: the roboticist in the prey pod now has clothes as intended Rhials: - rscadd: You can now vote to start a Mafia game early. If over half of the current signups vote (And you have three or more players) you will immediately start a game with a slightly adjusted set of roles. - admin: You can now force a mafia game to start in the admin options panel. SkyratBot: + SethLafuente: + - balance: Increased Bonus Reward for kidnapping alive targets + - balance: Changed Virologist and Scientist into Common objectives for kidnapping + - balance: Changed Paramedic into Uncommon objectives for kidnapping + Thunder12345: + - rscadd: The Nanotrasen Costuming Department has released specifications for how + to convert the Head of Security's cap into a shako. + Wallem: + - balance: Fixes a glaring oversight with the entrenching tool's balancing. + Watermelon914: + - balance: Reduced the reputation cost of most non-murderbone orientated uplink + items like hypnotic flash and emag. + - balance: Reduced the amount of assassinate/kidnap/eyesnatch objectives that'll + appear at once. + spockye: + - rscadd: remakes the old escape pod shuttle +2023-03-29: + IndieanaJones: - balance: The pirate gangs have been split into two subcategories, one which can spawn earlier in a shift and one that spawns later as they currently do. While skeleton pirates will still be only seen later into the shift, expect to see @@ -1454,6 +2206,9 @@ - balance: Increased Bonus Reward for kidnapping alive targets - balance: Changed Virologist and Scientist into Common objectives for kidnapping - balance: Changed Paramedic into Uncommon objectives for kidnapping + JohnFulpWillard: + - bugfix: Experimentors can connect to techwebs that have at least one RD server + on the level. - balance: Curators/HoP can now manage Newscaster D-Notices (previously was Warden/HoS). - balance: Security Officers/Detectives can now issue Wanted notices on Newscasters. - balance: Ntos Newscaster now requires Library access only to download, not to @@ -1519,6 +2274,58 @@ - qol: You can rename and change the description of nanite/thermal pistols. - bugfix: Fix Greytide Worldwide basketball stadium being able to explode from a fuel tank + LemonInTheDark: + - server: The starlight config has been removed, as it is enabled by default + Rex9001: + - rscadd: the pod_crash.dmm ruin + lizardqueenlexi: + - qol: you can choose your default paint color for the "Tagger" quirk from prefs. + spockye: + - rscadd: Added a new emergency shuttle, the emergency_tranquility + - bugfix: ' Redesigns "the_arena" ( the bubblegum shuttle deathmatch area )' +2023-03-30: + Helg2: + - rscadd: re-added normal doors to qm's office on tram. + - bugfix: fixed hos' shutters not being existant on tram. + LT3: + - bugfix: Reduced lighting range for idle fire alarms + LemonInTheDark: + - bugfix: Breathing pluoxium works again + - bugfix: Kilo's arrivals port will no longer be space colored + Melbert: + - rscdel: Revert elevator panel UI theme change + Rhials: + - bugfix: mafia games only grant role win achievements when played with a full 12-player + setup. + Singul0: + - rscadd: Adds a new space ruin, A Waystation under attack! + Tattle: + - spellcheck: fixed a few typos, mostly around breathing + Timberpoes: + - bugfix: Actually fixes re-attaching heads unintentionally sending brains to the + gem room this time. For realsies. + Time-Green: + - rscdel: removes being cremated from high burn damage and being on fire (yes this + was in the game but has been broken for probably a very long time) + flowercuco: + - bugfix: admin respawn character verb works properly + - code_imp: adds IS_TRAITOR macro + kinneb: + - imageadd: Resprites the Wirebrush + - imagedel: Removes the sprite for the Advanced Wirebrush + san7890: + - bugfix: 'The Syndicate have gotten their hands on the most dangerous weapon: A + photocopier that doesn''t require any money. God save us all.' + - bugfix: The hermit of the Icemoon has decided to build their hut in some deeper + caves for a bit more protection from the local fauna. + - bugfix: Pirates finally realized that they shouldn't risk life and limb attacking + stations if they had already paid them off. + spockye: + - bugfix: fixed disposals on the starfury + - bugfix: fixed flooring on the starfury + - bugfix: fixed missing air alarm on the starfury + - bugfix: fixed air turfs exposed to space on the starfury + tralezab: - rscadd: The dark matt-eor - rscadd: Summon a dark matt-eor final traitor objective - rscadd: Dark matter singularity variant, which can't grow as big as a regular @@ -1532,5 +2339,45 @@ - rscadd: Adds a new space ruin, A Waystation under attack! - bugfix: The hermit of the Icemoon has decided to build their hut in some deeper caves for a bit more protection from the local fauna. +2023-03-31: + Capsandi: + - rscadd: Added a new space ruin + JohnFulpWillard: + - bugfix: NtNet receive/send circuits should work now. + MMMiracles: + - bugfix: The Bridge and Arrivals on Tramstation should now be firmly connected + to the main distro loop once again. + Melbert: + - qol: Some sound related messages from Iv drips, turrets, and the nuke toy are + now audible to the blind / hidden from the deaf + RikuTheKiller: + - bugfix: Suffocation-handling reagents work on all species once more. + - spellcheck: Added a previous tip for handling plasmaman suffocation back into + the game. + SishTis: + - qol: Peacekeepers cyborgs don't get message about being confused while using harm + alarm + SomeRandomOwl: + - rscadd: New VERB, Request Internet Sound, It is in the OOC tab and allows you + to request music from admins to play, by default only allows bandcamp, youtube, + and soundcloud links + - bugfix: Fixes the Admin Midi Widget UI to only present info that is available + to players to be seen + - admin: Play Internet Sound URL input is now TGUI + - admin: Play Internet Sound warns you if a song length is >10 Minutes + - admin: Added new mute type to mute internet sound requests from a player + - config: Added thee new config options, LOG_INTERNET_REQUEST, REQUEST_INTERNET_SOUND, + REQUEST_INTERNET_ALLOWED + ZAMODA: + - rscadd: Added a new space ruin, the Atmos Asteroid! + necromanceranne: + - qol: You can rename and change the description of nanite/thermal pistols. + san7890: + - rscadd: "Ask your local bartender for the hottest drink of the year, the \"Pi\xF1\ + a Olivada\"!" + timothymtorres: + - bugfix: Fix Greytide Worldwide basketball stadium being able to explode from a + fuel tank + vinylspiders: - bugfix: cycler shotguns' inhand sprites will no longer float ominously by their wielder's side diff --git a/html/changelogs/archive/2023-04.yml b/html/changelogs/archive/2023-04.yml index 6996be51ee454..3ab0791ba8afb 100644 --- a/html/changelogs/archive/2023-04.yml +++ b/html/changelogs/archive/2023-04.yml @@ -13,6 +13,17 @@ Deranging: - bugfix: The graph in Power Monitor consoles is no longer under half its normal size. + Cheshify: + - bugfix: The Lance goes deeper into the station when it docks. + Deranging: + - bugfix: The graph in Power Monitor consoles is no longer under half its normal + size. + Helg2: + - rscadd: the victims of kneecapping will now scream. + - qol: you will no longer gain useless message, when you're harming someone in agro-grab + in the head with their neck already slicen, instead of continuing killing them. + - qol: you will no longer gain irritating messages, when trying to stab someone + in the eye, instead of just stabbing them with screwdriver. LT3: - balance: 'Random Disease: Fluids transmission frequency reduced' - balance: 'Random Disease: Respiration transmission frequency increased' @@ -57,6 +68,22 @@ lpeapnni: - rscadd: Added chinchillas 2023-04-02: + LemonInTheDark: + - bugfix: Lava and plasma rivers (openspace on icebox too) will generate now. This + was broken for 2 years wtf man + Rhials: + - balance: Fugitive team backstories will now be selected with consideration to + the number of people who sign up. + - qol: Fugitives can no longer spawn in atmos-unsafe areas. + SmoSmoSmoSmok: + - bugfix: pais can upload photos to newscasters again +2023-04-02: + 13spacemen: + - bugfix: Volume pump overclocking animation is much slower, no more headaches + - qol: 'Added screentips to the RPD; screentips and balloon alerts to many atmos + machines and devices + + :cl:' 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 @@ -107,6 +134,10 @@ gem room this time. For realsies. - qol: Bluespace tags are gone. The information contained within is still available in the same way, just in a more out-of-character format. + EOBGames: + - qol: Bluespace tags are gone. The information contained within is still available + in the same way, just in a more out-of-character format. + Hatterhat: - rscadd: Reagent containers that splash on people when thrown (e.g. molotovs) now spill their contents on both target and turf. (This means that throwing molotovs with enough fuel spills fuel puddles, throwing beakers with acid spills acid @@ -249,6 +280,79 @@ SkyratBot: - bugfix: marisa shoes will now build its worn icon using the greyscale config like sneakers do + Helg2: + - rscadd: Sleeping with a pillow restores more health. + Jacquerel: + - rscadd: A new meat-themed space ruin. + - bugfix: Organ box now actually requires coolant in order to work. + JohnFulpWillard: + - balance: Sentient Diseases (and diseases in general) can no longer roll Anacea, + Haloperidol & Spaceacillin as their cure, however they've been replaced with + chemicals that are either harder to make, or have larger drawbacks (such as + putting you to sleep). + LT3: + - bugfix: The missing table reinforcement for MetaStation's cargo office has been + found + Melbert: + - bugfix: Plates are no longer ephemeral when throwing at people. + NamelessFairy: + - admin: Exiting the highlander delay window without selecting an option will no + longer start highlander mode. + Xander3359: + - bugfix: Maid in the mirror no longer drops a sprite-less suit. + san7890: + - bugfix: The prison on IceBox should no longer leak air as often. + tralezab: + - rscdel: Votes out some sussy emergency meeting code + vinylspiders: + - bugfix: fixes emissives blocker layering issue that was causing emissives on clothing + to not display at all + - bugfix: admins may now send headset messages to silicon mobs as long as they have + a radio + - bugfix: fixes floating point inaccuracies in numeric prefs +2023-04-03: + Ical92: + - rscadd: Added security cameras to the five "default" shuttles + - rscadd: Added camera telescreen to KiloStation Emergency Shuttle + - bugfix: fixes telescreens showing static when reopening a camera + Jacquerel: + - bugfix: Traitors should be able to summon their satellite hacking supply kit. + - bugfix: Dark Matteor shouldn't crash on spawn and fail to arrive. + SomeRandomOwl: + - bugfix: Play Internet Sound will no longer show an admins Character name and returns + back to showing CKEY as previously + Time-Green: + - rscadd: Researcher Anna Nomally has disappeared into space, carrying 20 anomaly + cores. What could she be up to? + iwishforducks: + - bugfix: Removes errant newscaster in the dorm maints of Tramstation. + vinylspiders: + - bugfix: the 'natural wig' item will no longer show a broken icon when it mimics + a hairstyle whose icon path something other than the default 'icons/mob/species/human/human_face.dmi' +2023-04-04: + 13spacemen: + - bugfix: Roundend Report properly lists cultist names if the cult failed and didn't + summon Narsie + DrDiasyl aka DrTuxedo#0931: + - bugfix: Floor lights no longer become invisible when the fire alarm is turned + on + Ebin-Halcyon: + - imageadd: The maid costume has gotten it's colors slightly tweaked, should look + nicer. + LemonInTheDark: + - bugfix: Directional frosted/tinted windows will no longer fuck up vision + MrStonedOne: + - bugfix: The notify restart verb in the ooc tab should now actually work. + Profakos: + - rscadd: adds the ruins of a restaurant robot portal hub + Rhials: + - code_imp: The xeno_spawn landmark is now the generic_maintenance_landmark landmark. + - bugfix: Certain midrounds will now check for atmos safety before spawning. + tralezab: + - rscadd: Chuunibyou wizards, and chunni granters in the library + - rscadd: Medical eyepatches +2023-04-05: + Helg2: - qol: changed mech description to span_notices and just slightly comfier to use. - qol: added tooltips for mech's maintenance mode. - balance: added t4 parts for mauler and dark gygax. And t3 parts for dark honker. @@ -304,6 +408,49 @@ in regular r-glass panes. LT3: - server: BYOND client compatibility check + - bugfix: West sided version of red alert fire alarm is now looks normally. + JohnFulpWillard: + - bugfix: QM's now get teleporter access on lowpop, like every other Command does. + LT3: + - rscadd: Don't trip on the tram plate while crossing, you may be in for a shocking + surprise! + LemonInTheDark: + - refactor: runechat should be a lot cheaper on the server. I've changed how it + functions, if it behaves weird yell at me please don't just ignore it + - bugfix: The coderbus passengers layer properly again + MMMiracles: + - balance: Little Timmy's lavaland pizza party has gotten an overhaul to be a bit + more interesting. + Profakos: + - bugfix: The prey pod ruin no longer has two corpses, only one. + RikuTheKiller: + - balance: Slash wounds no longer clot while dead. + SyncIt21: + - bugfix: thermo machines can be ctrl dragged again + - qol: alt click cycles between min, median & max temperature ranges + - refactor: removed useless init code + tralezab: + - bugfix: blink is now a translocation spell + vinylspiders: + - bugfix: marisa shoes will now build its worn icon using the greyscale config like + sneakers do + zxaber: + - balance: Malf AIs that hack Head of Staff and Vault APCs will now find a discount + issued on Doomsday. +2023-04-06: + DaydreamIQ: + - rscadd: Added the Abandoned Interdyne facility, explore at your own peril + Ghilker: + - rscadd: Timestop blocks the SM from processing (can't be healed, doesn't output + gases but can still take damage) + JohnFulpWillard: + - balance: Flamethrowers no longer have a trigger guard, and can be used by anyone + (including if you're wearing Atmos gloves). + - bugfix: Slimes' mischievous emote now works. + LT3: + - rscadd: The tram now has a remote control for funny and/or nefarious purposes + LemonInTheDark: + - admin: All centcom ferries are now loadable. Yes this WASbroken Melbert: - refactor: Removes Rev code from core flash code - bugfix: Getting converted on April Fools now triggers the meme force say as always @@ -371,6 +518,20 @@ - code_imp: Adds a flag to send_clock_message, so the real notify_ghosts proc can be used instead 2023-04-09: + Mey-Ha-Zah: + - imageadd: added new lavaland sprites, moved some sprites to a new location, adjusted + pixel shift for the updated sprites, adjusted the name of some sprites. + flowercuco: + - rscadd: Added new syndicate uplink beacon and associated systems that allow you + to get a replacement traitor uplink + - bugfix: Debug & nukie uplinks no longer runtime and work properly again + kinneb: + - rscadd: A new HUD, The 'Detective' UI + - imageadd: All the spritework for said HUD. + timothymtorres: + - imageadd: Split all icons in weapons_and_items.dmi to their own categories + - imagedel: Removed some unused icons +2023-04-07: Melbert: - code_imp: Audits the placement of Generic events markers. Some departments which previously had none now have some, and maintenance largely no longer holds them. @@ -378,6 +539,99 @@ cascade portals are now placed in more commonly traversed and easy to identify areas. They will also now trigger in places like Icebox med and brig when they previously couldn't. + - bugfix: Fixed cult conversion + NamelessFairy: + - bugfix: Basketball and Thunderdome maps should not load with broken turfs are + several resets of their maps. + Profakos: + - bugfix: Critical condition will clear properly when you leave crit + Shroopy: + - bugfix: The fire alarm in the vacant commissary on Delta Station now longer defies + gravity. + mc-oofert: + - bugfix: SM now dusts you if you fall on top of it from another Z level + softcerv: + - bugfix: The crew manifest now properly updates after ID modifications. +2023-04-08: + Donglesplonge: + - rscadd: central commands meteorological divsion has picked up a new asteroid drifting + in NT space, what secrets could it hold? + Fikou: + - bugfix: fixes medkits (and wallets, candle boxes) being able to store normal sized + items + Ical92: + - rscadd: Added "Botanical Haven", a small sanctuary for flora and spacefaring botanists. + LT3: + - bugfix: Tram doors open as expected while in motion + - soundadd: New tram door open/close sounds + - qol: Tram doors open faster when unpowered + LemonInTheDark: + - bugfix: The fountain ruin will now properly spawn on lavaland + Melbert: + - bugfix: Head revs can no longer convert with the AOE flash mode + Paxilmaniac: + - bugfix: Turfs made through stack crafting (so none currently) will have materials + applied if the var is set + Squishypone: + - bugfix: Fixed the drawings on normal sized paintings not appearing on the ground + SyncIt21: + - code_imp: RCD & all its subtypes and other devices like it[RTD, RLD, Plumbing + RCD, RWD, RFC, RPD] now moved into 1 folder, removes unused vars + - refactor: RCD window type cost & delay are set based on the window type selected. + - refactor: RLD, RCD & plumbing RCD now has extra resource & target placement sanity + checks, optimizes RLD and code readability. + - refactor: RTD now sets the correct delay with the cost of the tile type currently + being constructed/deconstructed taken into account + - refactor: large majority of to_chat() replaced with balloon alerts + - bugfix: RLD silo link now works again + - bugfix: RTD can place tiles on any subtype of plating + - bugfix: RCL now lays the correct colour of pipe cleaner when its colour is changed + - imageadd: empty blinking yellow icon states for RTD & RLD & an ammo bar for RLD + TheBoondock: + - bugfix: fixed missing Goliath tentacles icons + Xander3359: + - bugfix: Anomaly releaser no longer creates a "Stable " + ZephyrTFA: + - bugfix: Syndicate teleporter is no longer secretly nerfed due to internal code + mishaps. (-1 range) + - bugfix: Syndicate teleporter now gibs you where it should correctly; resulting + in it being much more dangerous to use + massaheartsu: + - rscadd: Added a new ruin! + thgvr: + - imageadd: Lizards have been resprited, as well as Digitigrade sprites. Please + remember to update your colors to account for this. + timothymtorres: + - 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 + vinylspiders: + - bugfix: the atrocinator modsuit mod will now make you fall up again when activated. +2023-04-09: + ChungusGamer666: + - rscadd: Mobs on fire get particle effects (it looks sick) + - rscadd: Wet mobs get particle effects (it looks sick) + Comxy: + - rscadd: Adds new Cosmic Heretic. + - soundadd: Adds Cosmic Heretic sounds. + - imageadd: Adds Cosmic Heretic sprites. + DaydreamIQ: + - bugfix: Interdyne Ruin should now have power + DrDiasyl aka DrTuxedo#0931: + - imageadd: Requestions consoles got a new sprite! + - imageadd: Gulag consoles got a new sprite! + - imageadd: Escape and assault pod consoles got a new sprite! + - qol: Now the gulag and pods consoles use overlays, instead of having turned ON + screen in their base icon. + - qol: Now the gulag and pods consoles screen change when they are emagged. + - qol: Requests console now shows examine prompt on how to open their panel. Also + shows a prompt if they were hacked. + FernandoJ8: + - balance: chicken eggs can now, rarely (1/256 chance), spawn 4 chicks instead of + 1 or none + Fikou: + - balance: 2 More Cargo Tech slots + Ical92: + - bugfix: fixed duplicate pipe in Underground Outpost 45 Away Mission Melbert, stove and pot sprites by Kryson, ladle sprite by Kinneb: - rscadd: Kitchens are now stocked with Ranges. - rscadd: You can now print (and create) Stoves. @@ -431,6 +685,7 @@ - spellcheck: The examine text for the carp tongue and gondola heart is more correct. - qol: Activating arm implant items in hand now automatically retracts and opens the radial menu, unless it's a welding tool. + Paxilmaniac: - code_imp: The ability for objects to be loomed is now a component, with all of the looming behavior moved off of the structure and into said component. The actual behavior for looming cotton (clicking on a loom with cotton) is completely @@ -558,6 +813,13 @@ SkyratBot: - imageadd: Nanotransen has made uniform changes to the robotics lab, modernizing their wardrobe. + carlarctg: + - qol: Activating arm implant items in hand now automatically retracts and opens + the radial menu, unless it's a welding tool. + mc-oofert: + - bugfix: waystation cargo techs get shoes now + - bugfix: makes ai sat turrets actually able to fire upon silicons + necromanceranne: - balance: A significant overhaul of various illicit and dubiously legal goods and gadgets available via cargo. - balance: Cargo now has an Import category for all non-departmental goods. (And @@ -572,6 +834,37 @@ - balance: Experimental syndicate teleporter's teleportation is no longer perfect, it will cause the user to bleed a little. Luckily the detective can scan the blood and find out who the big bad is, as long as he's quick. +2023-04-10: + ChungusGamer666: + - rscadd: Being electrocuted will most of the time make you blurt out whatever you + were typing. This includes batons. Be careful. + - bugfix: Transforming into an android and then back into another species will no + longer leave you with permanent robotic limbs + FernandoJ8: + - bugfix: the contents of your pockets no longer drop onto the floor when your body + is randomized + Helg2: + - rscadd: Plasmamen will now spawn with proper masks depending on the job. + - qol: bsa parts can now be rotated. + - bugfix: fixed that you couldn't make improvised chem heater from constructed space + heater. + Jacquerel: + - balance: Carp can't teleport as far, but can do it more frequently. People who + piggyback through their rifts will be blocked from attacking for a short duration + (the same as the normal attack cooldown). + - balance: AI controlled carp will now be more selective about which objects they + smash. Player controlled carp (or carp directly instructed to attack objects + by people who have tamed them) can still attack whatever they like. + - bugfix: You can no longer escape the wrath of the honkmother by climbing onto + a cyborg. + - bugfix: Shooting a pair of piggybacked players with a penetrator round will penetrate + both players. + LT3: + - bugfix: Fixed tram malfunction event from using the wrong sprites + Melbert: + - bugfix: Admin spawned ghost portals no longer make all dead players considered + also as observers (they're two different things) + NamelessFairy: - refactor: CTF has been entirely refactored. - bugfix: Respawn times for CTF now work. - qol: CTF players are alerted during control point games when one team is half @@ -662,46 +955,148 @@ - qol: NIFs can now be manually removed from a player file. - bugfix: NIFs now delete when broken for two shifts 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 - Star! - - rscadd: More landmines, and a landmine random spawner. - - rscadd: energy barriers now have a regenerative subtype, fit for permanent installations. - - code_imp: Raised the number of possible level render to 4, check your preferences - if needed to be reduced. - Gandalf2k15: - - balance: Wall mushrooms will now spread more slowly. - - admin: Wall mushroom planting is now logged. - Hatterhat: - - bugfix: Fun fact - Smartgun rounds weren't meant to be ammo-bench printed. Now - they're not, because the ammo workbench checks if a round is flagged to be printable - or not. - - bugfix: .244 Acia (7.62 but differently named) clips can now actually receive - rubber rounds from the ammo workbench. - - spellcheck: Leftover 10mm Auto ammo (rubber/IHDF) is now just named 10mm, to preserve - parity with every other 10mm round. - - bugfix: Unrestricted shotgun shell magazines (e.g. the IGE-340 magazine) can no - longer print techshells nor prefilled bioterror shell darts when inserted into - an ammo workbench. - LT3: - - admin: Events system logs info about why an event was cancelled - - balance: Mood buff/duration from eating breakfast increased to 30 minutes - - config: '''Breakfast'' is now from 6am-12pm at the start of the shift' - - code_imp: Lights will now enter power saving mode before shutting off equipment - - code_imp: You get less total reserve time, but more equipment reserve time - - code_imp: APCs, air alarms, and fire alarms all use the same RGB lighting values - for consistency - - code_imp: Second pass of lighting updates, less dark spots! - - bugfix: Lights go into emergency mode when the fire alarm is active - - rscadd: 'Tajaran now have their own native language: Siik''tajr' - - bugfix: Fixed forcing night shift lighting on/off - - config: Station shift start time can now be set in the server config - Melbert: - - bugfix: Omen Component door crush works - - bugfix: Omen Component vendors will no longer double dip (double tip) - - bugfix: Fixed Hydrogen Peroxide and Acetone Oxide not dealing damage until you + - bugfix: TGC decks will no longer allow you to insert an illegal 31st card. + Somepan: + - rscadd: Added a message upon being hit by any spectral instruments + - balance: Reduced the stamina damage dealt by spectral instruments from 25 to 18 + making it transform after 6 hits instead of 4 + VileBeggar: + - balance: PKAs can now be attached to mining MODsuits. + Wallem: + - imageadd: Updates navbeacon sprite + Z Man Wit Z Plan: + - bugfix: fixed a couple things in the atmos asteroid ruin + jlsnow301: + - refactor: Tgui's state manager is in typescript now, huzzah + tf-4: + - spellcheck: The examine text for the carp tongue and gondola heart is more correct. + vinylspiders: + - rscadd: latex balloons can now be crafted using a latex glove and some cable. + You can fill them with air using a tank. They also have a new sound effect. + - imageadd: light tubes have a new inhand sprite + - bugfix: broken light tubes now actually have sharpness to them as they are basically + spikes of glass. + - refactor: refactored latex balloon code +2023-04-11: + Comxy: + - bugfix: Sergeant Araneus cannot spawn from gold slimes anymore. + Jolly: + - bugfix: Maps internally had the code for the "directional" windows altered a bit. + If you see stacked window panes or things look incorrectly, please file a bug + report as that isn't intentional!! + Moth-lantern: + - imageadd: Nanotransen has made uniform changes to the robotics lab, modernizing + their wardrobe. + Profakos: + - refactor: Refactored navigational beacons, making them constructable, deconstructable, + and generally easier to use + Singul0: + - bugfix: asteroid-based space ruins (waystation, the outlet) now has asteroids + below their plating! + flowercuco: + - qol: material components (such as autolathes) have contextual screentips if you + can put an item inside of it + kinneb: + - imageadd: Recolours the Wirebrush (Again) +2023-04-12: + 13spacemen: + - qol: Unwrenching empty atmos pipes/devices is now INSTANT + - balance: Experimental syndicate teleporter's teleportation is no longer perfect, + it will cause the user to bleed a little. Luckily the detective can scan the + blood and find out who the big bad is, as long as he's quick. + DrDiasyl aka DrTuxedo#0931: + - imageadd: Judge robe and powdered wig got new sprites! + Hatterhat: + - rscadd: The Regal Condor can now have its name and description changed via pen, + like the detective's revolver. + - bugfix: The Regal Condor's magazines are actually visible, and therefore useful + for their intended purpose. + - bugfix: The contractor baton now only gives you up to 40 seconds of stuttering, + instead of making you stutter for 40 seconds more after every hit. + Helg2: + - qol: installed upgrades on cameras now show as blue text instead of plain white + text on examine. + - bugfix: You can now uproot and dig out plants with any shovel and not just spade. + JohnFulpWillard: + - bugfix: People immune to sleep will not fall asleep from N2O + LT3: + - bugfix: Tram doors no longer play 8 variations of the same sound simultaneously + ShizCalev: + - code_imp: Vareditting a light replacer's emagged status will now properly update + the item's name / appearance. + SyncIt21: + - refactor: remove unused turf var inside wallmount procs + - bugfix: broken rack sprite inside RCD UI + - bugfix: mounted RCD now lays plating over chasms and open turfs + - bugfix: station blueprints no longer expands & detects areas of non atmos adjacent + turfs. + Thunder12345: + - bugfix: The action button description for malf AI hostile station lockdown now + makes it clear that doors will be electrified. + necromanceranne: + - qol: Clarifies in various names and descriptions whether security equipment is + lethal, nonlethal, less-than-lethal or destructive. +2023-04-13: + 13spacemen: + - bugfix: You can instantly unwrench empty atmos devices now + Melbert: + - bugfix: Fixed Hydrogen Peroxide and Acetone Oxide not dealing damage until you + take damage again + Mey-Ha-Zah: + - rscadd: New Lids for several crates. + - imageadd: Several new Crate Visuals. +2023-04-14: + ? 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 + Star! + - rscadd: More landmines, and a landmine random spawner. + - rscadd: energy barriers now have a regenerative subtype, fit for permanent installations. + - code_imp: Raised the number of possible level render to 4, check your preferences + if needed to be reduced. + Gandalf2k15: + - balance: Wall mushrooms will now spread more slowly. + - admin: Wall mushroom planting is now logged. + Hatterhat: + - bugfix: Fun fact - Smartgun rounds weren't meant to be ammo-bench printed. Now + they're not, because the ammo workbench checks if a round is flagged to be printable + or not. + - bugfix: .244 Acia (7.62 but differently named) clips can now actually receive + rubber rounds from the ammo workbench. + - spellcheck: Leftover 10mm Auto ammo (rubber/IHDF) is now just named 10mm, to preserve + parity with every other 10mm round. + - bugfix: Unrestricted shotgun shell magazines (e.g. the IGE-340 magazine) can no + longer print techshells nor prefilled bioterror shell darts when inserted into + an ammo workbench. + LT3: + - admin: Events system logs info about why an event was cancelled + - balance: Mood buff/duration from eating breakfast increased to 30 minutes + - config: '''Breakfast'' is now from 6am-12pm at the start of the shift' + - code_imp: Lights will now enter power saving mode before shutting off equipment + - code_imp: You get less total reserve time, but more equipment reserve time + - code_imp: APCs, air alarms, and fire alarms all use the same RGB lighting values + for consistency + - code_imp: Second pass of lighting updates, less dark spots! + - bugfix: Lights go into emergency mode when the fire alarm is active + - rscadd: 'Tajaran now have their own native language: Siik''tajr' + - bugfix: Fixed forcing night shift lighting on/off + - config: Station shift start time can now be set in the server config + Melbert: + - bugfix: Omen Component door crush works + - bugfix: Omen Component vendors will no longer double dip (double tip) + - bugfix: Fixed Hydrogen Peroxide and Acetone Oxide not dealing damage until you take damage again + LT3: + - balance: Engineers can override elevator door safety + - bugfix: emag action linked between elevator panel and doors + - bugfix: Cargo elevator has the correct access requirement again + - code_imp: All door types can now be linked to elevators + Melbert: + - bugfix: You can now taste once again, without requiring your tongue be surgically + replaced or reattached + NamelessFairy: + - bugfix: Removing cards from TGC decks by pouring them on the floor/into binders + should now function correctly. Rhials: - code_imp: Adds two new super-duper helpful helper procs for finding a maintenance/space spawn location, for all of your event/midround/whatever needs! @@ -752,6 +1147,57 @@ - bugfix: spoon overlays will now update when you eat from them to reflect that food = gone. it really is gone, you can stop beating yourself with the spoon. oh god please stop-- + ShizCalev: + - bugfix: Fixed an annoying gravity runtime that occurred if a player was connected + before mapping finished initialization. + Singul0: + - bugfix: AI's now can see into the HoP Office and Pod bay. + - bugfix: Vault piping and wiring is now connected to the station. + kinneb: + - rscadd: Added the Abandoned Mime outpost as space ruin! +2023-04-15: + ChungusGamer666: + - refactor: Implanted foreign limbs will no longer be wiped by species change. + - rscadd: Burning structures spawn smoke particles. Sick. + Helg2: + - bugfix: Deltastation supermatter windows now properly rotated. + Jacquerel: + - bugfix: Removes the spectral trombone from the lavaland pizza party ruin. + LT3: + - bugfix: Fixed forcing night shift lighting on/off + - config: Station shift start time can now be set in the server config + Melbert: + - bugfix: Omen Component door crush works + - bugfix: Omen Component vendors will no longer double dip (double tip) + Sneeker134: + - bugfix: Monkeys and some other mobs no longer drop items they've grabbed from + storage onto the ground. + - admin: Added clever DNA injector to admin spawn options. + - bugfix: Added clever DNA injector. + carlarctg: + - qol: Gives nuke ops three free health analyzers in their shuttle, advanced health + analyzers in both medic kits, and a bonus health analyzer MODule in the premium + medical kit. + jimmyoofsalot: + - rscadd: adds pie-flavored pie + jlsnow301: + - bugfix: The HFR screen should be fixed, let me know if you see glitches + - bugfix: The HFR screen should now also select recipes properly + necromanceranne: + - balance: Returns the anomaly detonation timer from 75 seconds (40 seconds from + announcement for dangerous anomalies) back to 99 seconds (75 seconds from announcement + for dangerous). + timothymtorres: + - qol: Add contextual screentips, balloon alerts, and examine hints to lockers + vinylspiders: + - bugfix: fixes a runtime that can occur if a circuit floor gets changed into something + else. +2023-04-16: + Cheshify: + - bugfix: The North Star has functional elevators once again. + Dawnseer: + - rscadd: Goliath cloak can be worn as a cloak that doesn't provide any armor benefits + SyncIt21: - refactor: correctly type casts the turf into open type for the rcd mecha plating action - refactor: removes single letter variable names @@ -803,6 +1249,41 @@ - bugfix: The pathing for the "Mimes vs Clowns" space ruin should be fixed internally. Whether you see this or not is depended on your server operator(s). SkyratBot: + carlarctg: + - qol: Set default IV transfer rate to maximum (5) instead of 0. + flowercuco: + - balance: syndiekits cost 20 TC instead of 25 TC + tf-4: + - bugfix: Colossuses are now actually able to trigger their final attack - be careful + when they drop below 10% HP! + vinylspiders: + - bugfix: spoon overlays will now update when you eat from them to reflect that + food = gone. it really is gone, you can stop beating yourself with the spoon. + oh god please stop-- +2023-04-17: + ArcaneMusic: + - imageadd: Hydroponics trays now have pollen particles that they generate when + they share stats and chems. Non-allergenic! + Cheshify: + - bugfix: The North Star is no longer missing it's commission plaque or the QM's + request console. + Dawnseer: + - bugfix: Fixed warning messages + Fikou: + - bugfix: death squad officer outfit works + - bugfix: fixes lava not cleaning up the permanently on fire trait + Helg2: + - bugfix: slapper is visible in-hand again. + - bugfix: Interdyne and Syn-C Brutus ruins no longer runtime on initializing. + - bugfix: Interdyne's smes is now properly wired to the apc. + Jacquerel: + - bugfix: Renault and other simple animals are now correctly fireproof. + JohnFulpWillard: + - code_imp: Space Bats are now Basic mobs. + Jolly: + - bugfix: The pathing for the "Mimes vs Clowns" space ruin should be fixed internally. + Whether you see this or not is depended on your server operator(s). + NamelessFairy: - admin: Admins can now control the spawn location, potency, production and starting mutations of the space vines event. - bugfix: The space vine event will now correctly give vines mutations when they @@ -820,6 +1301,76 @@ they share stats and chems. Non-allergenic! Vect0r: - balance: The blowgun no longer takes time to windup before you can shoot it. + Rhials: + - qol: Ghosts are now notified and given an orbit popup for the Stray Cargo Pod + random event. + Singul0: + - bugfix: a pirate shipmate aboard the pirate cutter has found their lost energy + cutlass + SyncIt21: + - bugfix: null client error for balloon alert when toggling the electrolyser on/off + via the UI + Vect0r: + - balance: The blowgun no longer takes time to windup before you can shoot it. + YehnBeep: + - rscadd: Adds pAI cards to public areas on the North Star + Zonespace27: + - bugfix: Eigenstasium lockers no longer bypass teleport protection + carlarctg: + - rscadd: Added a nukeops victory state for failing to nuke the station, but somehow + hijacking the shuttle. + - balance: Makes Black Market Uplinks more easily craftable, adds them to uncommon + maint loot pool + flowercuco: + - qol: text that appears when you dont have an uplink in the traitor panel now tells + you the codes for your replacement uplink + jlsnow301: + - bugfix: HFR should now allow you to select input/moderator rates + - bugfix: Crystallizer ui should now properly show input gases + necromanceranne: + - balance: Nitrous oxide, the reagent, increases bleed rate from wounds rather than + directly subtracting blood. It can be counteracted using coagulants (such as + those in epipens). + - balance: Heparin purges coagulants. You have to remove heparin from someone's + system before you can use coagulants. + the-og-gear: + - admin: Added a SpinAnimation option for all atoms in the View-Variables drop-down + menu + - admin: Added a button to stop all animations right next to the SpinAnimation option + in the View-Variables drop-down menu + timothymtorres: + - code_imp: Cleanup 1 letter var names in martial arts files + vinylspiders: + - qol: added fifty stack versions of remaining glass sheet stacks for ease of debugging + - refactor: refactored sheet crafting to better support directional constructions + that aren't windows + - bugfix: fixes hostile mobs sometimes being able to target an atom that has been + marked for deletion and then becoming confused, and in a similar vein fixes + mobs sometimes still running their AI while being marked for deletion. + - bugfix: 'icebox: patched up some holes underneath the vent doors in science burn + room' + zxaber: + - balance: Engineer Borgs now have a tool to manipulate material stacks (and also + tile stacks). This replaces the R-Glass tool. +2023-04-18: + Helg2: + - bugfix: Pirate and hunter shuttles now have no wi-fi. (added cutAIwire apc helpers + to them) + - bugfix: Added missing apc helpers to apc on DeepStorage (the bunker with "away" + access) + IHateGeese: + - rscadd: emagging the BSA explodes the next person to fire it. + NamelessFairy: + - bugfix: Fixes being unable to switch modes on the Oingo Boingo Punch-face + Singul0: + - bugfix: Nanotrasen has supplied the North Star with a B.E.P.I.S Chamber. + SyncIt21: + - bugfix: RTD animation effect adding a timer on deleted floor tiles. + tralezab: + - bugfix: Body purist headrevs having a bad time with their implant + zxaber: + - balance: Cyborg Rechargers now restock with metal and glass from the ore silo, + and no longer grant the materials for free. 2023-04-19: ATHATH: - bugfix: Laser pointers will no longer disable borgs that have somehow been made @@ -839,6 +1390,18 @@ - imageadd: adds new inhand sprites for most flashlights in the game, including animated flares and candles - refactor: cleaned up flashlight.dm's unnecessary bits and made some slight improvements + BlueMemesauce: + - bugfix: Fixed a bug where additonal receivers wouldn't work if the first one was + on but disconnected + Dawnseer: + - bugfix: The rolling table actually plays the rolling sound, as the lord intended. + Helg2: + - qol: Reflectors now have better rotating menu. Changed from alt-click to just + lmb. + Iamgoofball: + - bugfix: PDA messaging is now more immersive based on age + JohnFulpWillard: + - bugfix: Plague doctor hats no longer give you an FOV. - refactor: '[Mafia] All Mafia abilities have been overhauled in the backend, it''s now much easier to understand what each role''s ability can do and how it works.' - admin: '[Mafia] Admin setup of Mafia is now in TGUI' @@ -890,6 +1453,45 @@ - code_imp: multiplier for all shipments made through cargo - refactor: 2 new procs retrive_points() & subtract_points() to dela with different types + - admin: Secret buttons for Engineering/Brig maint accesses should now work more + consistently. + Melbert: + - qol: Hydroponics trays should update more snappily now + Mey-Ha-Zah: + - imageadd: Updated Wrapping Icons. + Supermichael777: + - bugfix: ' Plastitanium glass no longer always creates stacks of 50' + Tattle: + - bugfix: Nightmares will once again spawn + carlarctg: + - qol: Shoe storage can now fit box cutters, pills, and toy pistol magazines. + vinylspiders: + - bugfix: candles can now be used to light other candles, cigarettes, and anything + else that needs lighting in a pinch. + - bugfix: flashlights that have directional lights now have directional sprites + to match + - bugfix: candles can now be snuffed again + - imageadd: adds new inhand sprites for most flashlights in the game, including + animated flares and candles + - refactor: cleaned up flashlight.dm's unnecessary bits and made some slight improvements +2023-04-20: + BlueMemesauce: + - bugfix: You can no longer log syndicate comms (or any other banned frequencies) + with a telecomms server + - bugfix: You can no longer use tcomms buses to change messages to banned frequencies + LemonInTheDark: + - rscadd: Holograms glow now, pokes at the lighting for holocalls in general a bit + to make em nicer. + - qol: You can no longer accidentally end a holocall (as a non ai) by leaving the + area. Felt like garbage + - bugfix: Fixes static rendering improperly if viewed by a non ai + Singul0: + - bugfix: Surgery room ID's in NorthStar are now properly ID-ed + - bugfix: Fixes missing APC in 2nd deck aft hallway of Northstar. + - rscadd: Due to an influx of syndicate activities near the station, A number of + businesses in the nearby sector of space have been closed down. One of which + being a themed old-style american diner. Can you find it? + SmoSmoSmoSmok: - refactor: refactors trees into basic mobs - refactor: refactors poles into basic mobs - rscadd: If trees now see you holding a chainsaw, hatchet, or some wood they will @@ -940,12 +1542,40 @@ random poster spawners. - rscadd: Burning items are now actually considered to be at a minimum, 150 degrees celsius by the game. + iain0: + - bugfix: Fixes an error in health analyzers which would cut off the top of the + health scan if the player was deaf. + tralezab: + - bugfix: DNA infusers now properly give felinid tails and other external organs + - qol: made dna infusers less confusing to use by removing the "must be opened" + check + - bugfix: fixed up gondola mutants and how to obtain them +2023-04-21: + Chlorotrifluoride: + - imageadd: flat satchel sprite re-palette + ChungusGamer666: - balance: 'The following structures are now flammable: Picture frame, fermenting barrel, drying rack, sandals, painting frames, paintings, spirit board, notice board, dresser, displaycase chassis, wooden barricade' - balance: 'The following items are now flammable: Baseball bat, rolling pin, mortar, coffee condiments display, sandals, wooden hatchet, gohei, popsicle stick, rifle stock' + Helg2: + - bugfix: generic air tank mounted onto pneumatic cannon now has working sprite. + Jacquerel: + - imagedel: you can no longer tell if someone is wearing a PDA by looking at them + Melbert: + - bugfix: Fixes a runtime with Spontaneous Combustion + - bugfix: Overheating Oculine will flash people nearby, as was intended 2 years + ago (never worked) + - bugfix: Fixes a runtime with pirate Data Siphon while emp-ing the station's rnd + servers + - admin: Adds a warning that spawning revs via traitor panel will not function as + expected. + - bugfix: Runtime from tracking mobs on the syndicate base + - bugfix: AIs now get their proper lawset, and an objective related to said lawset, + on Nations + MrStonedOne: - config: database configs have been updated for better control over the connection pool - server: BSQL_THREAD_LIMIT has been renamed to POOLING_MAX_SQL_CONNECTIONS, old @@ -980,6 +1610,45 @@ SkyratBot: - bugfix: Removed extra messaging server in North Star tcomms - bugfix: Things that block glow will now like, do that again + SyncIt21: + - bugfix: order consoles cancelling order's less than 200 but still subtracting + money, mining points from the player + - code_imp: multiplier for all shipments made through cargo + - refactor: 2 new procs retrive_points() & subtract_points() to dela with different + types + Tattle: + - soundadd: increased the volume of the clownana rustle + mc-oofert: + - rscadd: Adds the Hug Relaxation Shuttle as an emergency shuttle + the-og-gear: + - code_imp: Update active alarm monitor computers only when alarms are actually + changed instead of every program tick + tralezab: + - bugfix: Fixes DNA Infuser Book UI, removing the button that crashes it and fixes + not showing threshold descriptions + - rscadd: Added new berets to the vendor +2023-04-22: + BlueMemesauce: + - bugfix: Removed extra messaging server in North Star tcomms + ChungusGamer666: + - qol: Thermited walls now get an examine message telling you they are, in fact, + thermited. + - rscadd: Burning items are now actually considered to be at a minimum, 150 degrees + celsius by the game. + MTandi: + - qol: IV drip flow rate can be changed without the container or object attached + - bugfix: IV drip animation states fixed + vinylspiders: + - qol: the rescue hook has a much greater chance at catching actual fallen player + bodies as opposed to generic skeletons/other npc corpses + - bugfix: traitor objective posters will no longer be able to spawn from general + random poster spawners. +2023-04-23: + LemonInTheDark: + - bugfix: Things that block glow will now like, do that again + Melbert: + - bugfix: Ingredients which fail to react in soup reactions drop when the reaction + finishes as intended Tattle: - qol: basicmobs can now make sounds when their speech is triggered - qol: pigs will now make sounds and emote on their own @@ -1017,6 +1686,31 @@ Wallem, Imaginos: - image: Updates the IV drip sprites 2023-04-25: +2023-04-24: + BlueMemesauce: + - spellcheck: Fixes Explosive Holoparasite description mentioning a removed ability + - bugfix: Maps now spawn the correct amount of space levels. The bug caused them + to spawn 1 less in each category + - code_imp: The space ruins budget is now proportional to the amount of ruin levels. + This has no effect on the current default maps, but added maps with less than + the default amount of ruin levels will see less ruins. + Borisvanmemes: + - balance: Bulldogs now hit 20% harder with their projectiles! + Cheshify: + - qol: telecomms is quieter and less ear-damaging. + - sound: modified tcomms sound to remove high-tones. + - bugfix: the telecomms sound only comes from the server hub machine. + ChungusGamer666: + - rscadd: Burning items now get (small) smoke particles. Sick. + - bugfix: Burning objects now clear their burning overlay properly. + - qol: Examining burning objects will always tell you that they are burning. + - rscadd: Books can now be burned just like any other paper item. + - rscadd: You can cut pages out of books with any sharp item, not just knives or + wirecutters. + Dawnseer: + - bugfix: Anti-glow actually bringing some darkness instead of just a light glow. + Fikou: + - rscdel: prisoner spawns from the north star asylum GoldenAlpharex, ChatGPT for the first changelog entry (slightly edited): - qol: Zipped and unzipped through alt-click, winter coats can now be. Hmm, stylishly warm, you shall be. Feel like a Spaceman, you will. Use the Force, to zip and @@ -1025,17 +1719,65 @@ both in item form and when worn. - bugfix: Updated the Icebox EVA winter coats (the Endotherm winter coats) to use the same sprites as the regular winter coats. - Hatterhat: - - balance: The CIN surplus crate is now an import crate, meaning that it's no longer - buyable through Security's department order console and has no lock. - - bugfix: The Mosin/Sportiv ammo box that appears in the CIN surplus crate now comes - with actual clips suitable for the Sportiv. - - bugfix: The 7.62 ammo box was renamed to .244 Acia ammo box, because lore parity. + LT3: + - code_imp: Added TGUI mobility check bypass + - qol: You can now use your PDA while laying down Melbert: + - refactor: Mob ai refactored once again - balance: Cameras can only see vertically upwards if the turf above them is transparent. But hey, the North Star (and other multi-z maps) will now perform wayyy better (less time dilation) Rhials: + - bugfix: The mafia early vote counter will now properly display. + Ryll/Shaps: + - bugfix: Yawning will now have a chance of making people near you yawn as well, + and is guaranteed to make them yawn if they examined you in the last 2 seconds. + It was supposed to already do that, but now it'll actually do that + SmoSmoSmoSmok: + - bugfix: fixes produce console bluescreening when viewing it as ghost + SyncIt21: + - qol: rewords "Total Cost" to just "Total" so text does not overflow to the next + line and improves readability + - qol: just one failure message if you don't have enough credits for cargo/express + mode to keep it consistent + - refactor: rounds the total cost of your produce console order so you don't have + decimal values left in your bank account + - bugfix: balloon alert adding timer on deleted mod core after construction causing + runtime. + Wallem, Imaginos: + - image: Updates the IV drip sprites + carlarctg: + - qol: When failing to teleport with the veil shifter it tells you with text and + spooky ghost sfx, and doesn't use up a charge or have any unintended vfx. + san7890: + - rscadd: If you ever happen upon a wild deer, try not to ride your fancy vehicles + too close to it as it'll freeze up like a... you know where I'm going with this. + zxaber: + - bugfix: Restores ability for borgs to adjust reflector angles. This is now a left-click + with nothing selected, similar to humans' left-click with an empty hand. +2023-04-25: + ArcaneMusic: + - rscadd: A few map specific lunar objects have been added related to Konsu 19 (Moon + Outpost 19). + - rscadd: New fluff objects were added related to xenoflora and mining. + - rscadd: New loot, puzzles, and challenges await you on Konsu 19. Are you prepared? + DaydreamIQ: + - bugfix: Swat crate's description now lists the correct kind of gloves + DrDiasyl: + - sound: Disablers and lasers have a new deeper sound to them + - sound: Sound of lasers hitting a person now are giving more of a punch + Fikou: + - balance: removes fov from the SWAT mask + Gamer025: + - bugfix: Ingame ore silo logs should now log deposit actions correctly + - config: New config for silo logs + GoldenAlpharex: + - bugfix: Biogenerators now display the accurate price of their products after having + been upgraded, as they no longer visually apply the efficiency discount twice. + Rex9001: + - spellcheck: Fixes grammar issues located in Pirates and item descriptions related + to the folder + Rhials: - rscadd: New event weight station trait -- Dust Stormfront. - balance: Space Weather Forecast -- Expect more frequent Major Space Dust storms in the foreseeable future. @@ -1092,42 +1834,52 @@ - sound: Sound of lasers hitting a person now are giving more of a punch - rscadd: Say emote prefixes are no longer forced to be lowercase. This includes radio emotes! + SyncIt21: + - bugfix: flood light now shines with their object color + necromanceranne: + - rscadd: You can make a tactical turtleneck or turtleskirt by putting a telecrystal + and a tactiCOOL varient of the turtleneck into a washing machine. Watch it change + before your eyes! + nikothedude: + - rscadd: Say emote prefixes are no longer forced to be lowercase. This includes + radio emotes! + rageguy505: + - bugfix: Adds prisoner ID's inside the gen pop lockers on the Northstar. Also renames + the holding cells to Gen Pop. + - rscadd: A new venture by Nanotrasen has put phonebooths in space. + trevorpillow: + - rscadd: Added hostile spawn tag to rats +2023-04-26: + 13spacemen: + - qol: Lowered the atmos build, reprogram, and destroy delays on the RPD + Fikou: + - bugfix: skeletons get boosted heals from milk again + Helg2: + - balance: Heretic blades butcher speed is 3 seconds now. + JohnFulpWillard: - balance: '[Mafia] Notes are no longer written out for you.' - qol: '[Mafia] You can now send your notes to chat whenever.' - qol: '[Mafia] Roundend has changed. Solos will win over others in a 1v1, but a HoP can keep a round going in case they can solo lynch.' - - refactor: removed duplicate `pre_attack()` & redundant `attackby()` procs which - did the same thing - - bugfix: unnecessary crash when unwrenching pipes/devices with the RPD - - rscadd: Added hostile spawn tag to rats - Zergspower: - - balance: Port Tarkon - Replaces the ARCD with the MM to get rid of the infinite - charges - - bugfix: Port Tarkon - Defcon 3 ruin now has proper door access markers that are - present in all other ones - vinylspiders: - - bugfix: the bluespace miner's machine board item now has the correct name -2023-04-27: - Ebin-Halcyon: - - image: Teshari have had (most) winter coats refitted for them - Gamer025: - - bugfix: Ingame ore silo logs should now log deposit actions correctly - - config: New config for silo logs - GoldenAlpharex: - - bugfix: Doing custom emotes (*me) no longer impacts your global emote cooldown. - Melbert: - - refactor: Mob ai refactored once again - RatFromTheJungle: - - balance: the AMR no longer has wound-chance to rival god, and also, no longer - goes through mobs Rhials: + - 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. - qol: Deadchat now gets more juicy details on what has triggered a non-randomly occurring random event. - code_imp: There are now helpers for forcing events in a variety of ways. More events! More events!!!!!!! - SkyratBot: - - balance: Heretic blades butcher speed is 3 seconds now. + SyncIt21: + - refactor: removed duplicate `pre_attack()` & redundant `attackby()` procs which + did the same thing + - bugfix: unnecessary crash when unwrenching pipes/devices with the RPD + Tattle: + - sound: shutters have a unique sound effect + ZephyrTFA: + - bugfix: Book's no longer take your formatting and throw it out the window. + - refactor: Book display and rendering + Zonespace27: - rscadd: Added a crashed prisoner transport space ruin. + carlarctg: - code_imp: Adds support for ammunition 'bands', basically intended to be used rather than wholly new sprites for new ammotypes. Additionally, they're (meant to be) greyscale, which allows one overlay to be used for many ammo types. Only implemented @@ -1151,6 +1903,16 @@ - bugfix: Changelogs entries for "sound" and "image" should now have icons associated with them, how neat. - qol: Lowered the atmos build, reprogram, and destroy delays on the RPD + vinylspiders: + - bugfix: crafting lizard skin cowboy boots no longer places a spawner object over + the created boot item +2023-04-27: + Dawnseer: + - bugfix: fixed an oversight - Made Goliath Cloak and Goliath Cloak Hood fireproof. + And Goliath hide. + Fikou: + - bugfix: social anxiety is incompatible with mute + JohnFulpWillard: - qol: Health analyzers now show body temperature in red/blue if the temperature of the body can't sustain it's own life. - bugfix: Inverse technetium now properly gives advanced details in genetics/radiation @@ -1214,6 +1976,23 @@ - bugfix: the anomaly refinery will no longer let you insert cores of insufficient quality to refine - rscadd: Craftable Material sniffers + Rex9001: + - bugfix: Fixes the Tramstation CMO office lack of CMO stamp + Watermelon914: + - bugfix: Fixed final objectives appearing as 'Skipped' in the traitor panel. + moocowswag: + - bugfix: You can no longer bypass the laws of bluespace with a portable chem mixer. + - bugfix: You can no longer bypass container locks with storage hotkeys. + san7890: + - bugfix: Changelogs entries for "sound" and "image" should now have icons associated + with them, how neat. + timothymtorres: + - qol: Add mood events for basketball shooting and dunking + - balance: '"Camera Obscura" (crafted with holy water + camera) will now steal the + soul of ghostly apparitions when a picture is taken causing damage. This will + also stun and reveal revenants briefly.' +2023-04-28: + Comxy: - balance: Star Gazer now explodes when it dies. - balance: Star Gazer will only die when the owner dies. - balance: Star Gazer will attack the most recent enemy that attacked him when on @@ -1222,8 +2001,94 @@ - balance: Cosmic Ascension now buffs some spells. softcerv: - qol: NIFSofts now have associated Font Awesome icons that show up in UI. + Fikou: + - bugfix: Fixes crafting tools not taking into account subtypes, i.e. you can craft + a filet migrawr with any lighter. + JohnFulpWillard: + - bugfix: Paradox clones are now attempted manual copies of humans, rather than + straight-up copying everything. They should no longer have bugs related to being + unable to use UIs, having FOV, or visual bugs. + - bugfix: SiliConnect can download borg logs again. + - bugfix: The RD can once again enable Admin mode on Wirecarp + - bugfix: NT IRN can once again see the shopping cart and call the cargo shuttle. + - bugfix: Chat Client, ID Management and Messenger should now update their UIs properly. + - code_imp: PDAs will hopefully not lag as much when clicking on buttons (such as + in ID management). + LemonInTheDark: + - bugfix: Holodisk recording gives the right vfx again. Bonus, the rays work with + it now too! + Melbert: + - bugfix: Fixes rare occasions in which the captain can fail to spawn with their + banner on certain maps if their left hand was holding something else. + SkeletalElite: + - bugfix: Stabilized Oil extracts no longer explode infinitely if your corpse is + immune to gibbing + Tattle: + - image: removes unused vault walls + rageguy505: + - bugfix: Updated the billboard on the space phonebooth + - bugfix: Replaced live ammo found that was unintended on the waystation and the + faceoff with spent subtypes. + vinylspiders: + - bugfix: mobs can now be set on fire using flares and candles if they are covered + in something flammable +2023-04-29: + Striders13: + - rscadd: filled up Northstar's Z1 maint with stuff. Reworked some ugly rooms. + - bugfix: fixed Northstar's Z1 sec outpost having the wrong sec locker + carlarctg: + - balance: 'EMPs on robotic limbs will now disable them for 10-20 seconds rather + than causing a 10-20 second full stun on the user. Additionally, they will damage + the limb for a little brute and some burn. + + EMPs on robotic limbs will now disable them for 10-20 seconds rather than causing + a 10-20 second full stun on the user. Additionally, they will damage the limb + for a little brute and some burn.' + - balance: Arm EMPs don't do anything special as the limb being disabled already + drops items. + - balance: Leg EMPs cause a 10-20 second knockdown, only really applicable if there's + only one robotic leg as two disabled legs KD you anyways. + - balance: Chest EMPs cause a 3-6 second standing-up paralyze, visible to the player + by a quite noticeable shaking of their body. + - balance: Head EMPs break the optical transponder circuits for 7.5-15 seconds, + effectively giving the user nightmare goggles vision with green instead of red + as the only remaining color. +2023-04-30: + Fikou, Zonespace, Arcane for voicing: + - rscadd: The mining vendor now has a style meter. This meter gauges your style + points and uses them to improve your ore yield. + JohnFulpWillard: + - qol: '[Mafia] Players get a popup when a player is voted to the stand.' + - qol: '[Mafia] Players now have the name of who they voted for displayed over their + heads during voting period.' + - balance: '[Mafia] Deadchat can no longer see Mafia chat.' + - balance: '[Mafia] HoP can now solo-win.' + Potato-Masher: + - bugfix: 'North Star: The disposal room machinery is slightly more resistant to + damage caused by ejected trash.' + ZephyrTFA: + - bugfix: Bookbinder no longer takes your pen's font and throws it out the nearest + window + Zytolg: + - rscadd: Birdshot station has been pulled out of Mothball. + - rscadd: New station areas and places to visit. A Mix of Kilo and Delta maints + with winding shortcutting paths. + - rscadd: A host of new shuttles to support this bold endeavor to reclaim something + that really shouldn't be reclaimed. + - rscadd: Two Trams, Two Trams. + - rscadd: For the last time Bob, the gaping hole is a **feature.** Use the breach + shutters or have the virologist make starlight. + - rscadd: A smiling salute to stations past... + - rscadd: Secrets. + mc-oofert: + - bugfix: Economy class airlock on the Luxury Shuttle now aligns with dock + tralezab: + - rscadd: Craftable Material sniffers tralezab code, Drag for the commission and player project, cre#0484 for their spritework: - rscadd: Divine Archer Armor and Weapon - qol: Bows give more feedback when you're doing something wrong, like trying to draw without a nocked arrow - code_imp: Sorted files, cleaned bow code up to allow subtypes + vinylspiders: + - bugfix: the anomaly refinery will no longer let you insert cores of insufficient + quality to refine diff --git a/html/changelogs/archive/2023-05.yml b/html/changelogs/archive/2023-05.yml index 686135c1e9a0e..dd5cf69a9011e 100644 --- a/html/changelogs/archive/2023-05.yml +++ b/html/changelogs/archive/2023-05.yml @@ -1,9 +1,49 @@ 2023-05-01: + BlueMemesauce: + - spellcheck: Deleted the extra line in combat information + - spellcheck: Fixed Nanotrasen being miscapitalized in traitor posters, a drink, + the ethereal lore, and some photocopier paperwork + EOBGames: + - rscdel: Kilostation has went back to its home planet. It served us faithfully + for nearly 3 and a half years. May it rest in peace. + Helg2: + - bugfix: You can't spam open codex cicatrix now. + - qol: You can close codex cicatrix in your hand now! Also toy codex cicatrix has + proper animation now. + Iajret: + - bugfix: papers should count cyrillic and other non-ascii characters correctly + both server and client-side + JohnFulpWillard: + - balance: Mimes can no longer write on paper without breaking their vow. + - admin: Enslaving mobs is now logged in game.log + - refactor: Russian mobs are now subtypes of Syndicate basic mobs. + - bugfix: Birdshot's observers now spawn on-station. + - bugfix: Birdshot's EVA door now properly works. + - bugfix: Birdshot now has a few extra rooms connected to the station's distro (atmos + canister storage, medical coldroom) + - balance: Machines (such as ORM and Techfabs) will no longer unsync from Ore silos + when it moves Z-level, instead it will prevent materials from being used, as + if it was on hold. + MTandi: + - qol: Dirt pile is crafted from sand instead of sandstone and drops it on deconstruction + - bugfix: You can't have free water and nutriments by rebuilding hydrotray + Melbert: + - bugfix: North Star's shields now regenerate integrity over time + NoselessCanine: + - bugfix: Bloody Mary flavor is now accurate to its description. Rhials: - bugfix: Replaces the purely decorative mining shuttle console on the Icebox bridge with an ID console. - SkyratBot: - - bugfix: Bloody Mary flavor is now accurate to its description. + Zergspower: + - bugfix: Deep Storage Space Ruin - Fixes atmos alarms never shutting off + - bugfix: Deep Storage Space Ruin - made the atmos pipenet sane + - bugfix: Crashedship Ruin - You can now use the teleport + mc-oofert: + - bugfix: The airlocks on the hug relaxation shuttle now align up properly + norsvenska: + - bugfix: Shuttle Loan event's resupply and hijacking have been separated into two + different datums + san7890: - refactor: Spiderlings are now basic mobs, report any complete weirdness/deviation from known behavior. They should be a lot more intelligent now though. - rscadd: AI Spiderlings are super fragile, but they're also super fast, especially @@ -11,34 +51,14 @@ Maybe in the armory, maybe in a locked closet in maintenance. Be sure to be vigilant and splat them whenever you can to save the station from a whole lotta heartache! - - bugfix: papers should count cyrillic and other non-ascii characters correctly - both server and client-side - - qol: Dirt pile is crafted from sand instead of sandstone and drops it on deconstruction - - bugfix: You can't have free water and nutriments by rebuilding hydrotray - - spellcheck: Deleted the extra line in combat information - - balance: Mimes can no longer write on paper without breaking their vow. - - bugfix: Deep Storage Space Ruin - Fixes atmos alarms never shutting off - - bugfix: Deep Storage Space Ruin - made the atmos pipenet sane - - bugfix: Shuttle Loan event's resupply and hijacking have been separated into two - different datums - - bugfix: The airlocks on the hug relaxation shuttle now align up properly - Zergspower: - - bugfix: Crashedship Ruin - You can now use the teleport 2023-05-02: - Hatterhat: - - bugfix: People with style meters affixed to their glasses can now do cool flips. - - spellcheck: Port Tarkon personnel now have their assignment on their IDs properly - checked. It truly was nothing personnel, kid. - SkyratBot: + MTandi: + - image: extinguisher cabinet has new sprites + - qol: 'Mapping: Air alarm variants replaced with corresponding helpers' + SgtHunk: - bugfix: Pirates summoned through hacking a comms console should actually spawn now. - - bugfix: ' Drying rack spawning a matter bin and circuit board on deconstruction' - - bugfix: You can't spam open codex cicatrix now. - - qol: You can close codex cicatrix in your hand now! Also toy codex cicatrix has - proper animation now. - - code_imp: TGUI input datums can now accept custom ui_states - - rscadd: Crewmembers arriving very late will not always have time to finish their - breakfast. + SyncIt21: - bugfix: air alarms correctly spew out cable & electronics depending on their build stage when their integrity reaches 0 i.e. destroyed - bugfix: fire alarms correctly spew out cable & electronics depending on their @@ -59,6 +79,45 @@ preview because it is buggy and hardly ever matches what you end up getting upon spawning - code_imp: removing the prosthetic limb quirk will restore your original limb + - bugfix: ' Drying rack spawning a matter bin and circuit board on deconstruction' + Thedragmeme: + - qol: 'Makes the Meta station kitchen not cramped anymore + + :cl:' + Thunder12345: + - bugfix: Bows will no longer randomly stop taking new arrows. + - rscadd: Crewmembers arriving very late will not always have time to finish their + breakfast. + nikothedude: + - code_imp: TGUI input datums can now accept custom ui_states + norsvenska: + - rscadd: North Star's captain's office has been expanded! It now includes a sitting + area as well as a photocopier and some cigars. + - bugfix: Various minor changes in North Star +2023-05-03: + Cheshify: + - bugfix: Command can actually enter the AI SAT on the North Star. + - rscadd: The North Star AI SAT has been redone. + Iamgoofball: + - bugfix: Removes player references. + JohnFulpWillard: + - bugfix: Golems can redeem points through their ORM without an Ore silo. + MTandi: + - bugfix: Electrolysis chemical reaction works with enriched liquid electricity + Rhials: + - spellcheck: The hallucinatory anomaly announcement is no longer missing words. + Tattle: + - sound: nerfed the police whistle volume + Thunder12345: + - bugfix: A Mix to Engine gas line has been added to Birdshot's atmospherics + Zergspower: + - qol: Dangerous Research Ruin - Area redefines + Zonespace27: + - bugfix: Style meter parrying works again + - bugfix: Style meter bar now works correctly with very high style point count + nikothedude: + - bugfix: Number inputs work now + san7890: - qol: The game now supports export of your preferences into a JSON file! The verb (export-preferences) should now be available in the OOC tab of your stat-panel if enabled by server operators. @@ -88,6 +147,19 @@ - bugfix: the cargo orderable AMR should no longer fit in suit storage slots, only your back, as was originally intended SkyratBot: + vinylspiders: + - bugfix: prosthetic limb quirk will no longer display a prosthetic on your character + preview because it is buggy and hardly ever matches what you end up getting + upon spawning + - code_imp: removing the prosthetic limb quirk will restore your original limb +2023-05-04: + ArcaneMusic: + - refactor: Mineral costs have been reformatted to be scaled by the number of sheets, + darts, and small fractions they make up. + - qol: Foam darts no longer hold a fraction of a unit of iron within themselves. + BlueMemesauce: + - bugfix: Fixed the Chef not having CQC outside the kitchen on Tramstation + Dawnseer: - rscadd: Damp rag and Money bag to service borg - rscadd: Service borg upgrades, with accompanying tech web node - rscadd: Sprites for kitchen toolset, and service apparatus @@ -99,92 +171,66 @@ back around.' - balance: Adds blood and Carpotoxin to the emagged borgshaker. - bugfix: Money bag was missing a description, it now has one. - - bugfix: Holodisk recording gives the right vfx again. Bonus, the rays work with - it now too! - - refactor: Mineral costs have been reformatted to be scaled by the number of sheets, - darts, and small fractions they make up. - - qol: Foam darts no longer hold a fraction of a unit of iron within themselves. - - 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, - 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 - area as well as a photocopier and some cigars. - - bugfix: Various minor changes in North Star - - image: extinguisher cabinet has new sprites - - bugfix: Bows will no longer randomly stop taking new arrows. - - balance: 'EMPs on robotic limbs will now disable them for 10-20 seconds rather - than causing a 10-20 second full stun on the user. Additionally, they will damage - the limb for a little brute and some burn. - - EMPs on robotic limbs will now disable them for 10-20 seconds rather than causing - a 10-20 second full stun on the user. Additionally, they will damage the limb - for a little brute and some burn.' - - balance: Arm EMPs don't do anything special as the limb being disabled already - drops items. - - balance: Leg EMPs cause a 10-20 second knockdown, only really applicable if there's - only one robotic leg as two disabled legs KD you anyways. - - balance: Chest EMPs cause a 3-6 second standing-up paralyze, visible to the player - by a quite noticeable shaking of their body. - - balance: Head EMPs break the optical transponder circuits for 7.5-15 seconds, - effectively giving the user nightmare goggles vision with green instead of red - as the only remaining color. - - spellcheck: The hallucinatory anomaly announcement is no longer missing words. + JohnFulpWillard: - 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. - - spellcheck: BLOX is the name and posibrain is the game. - - bugfix: Removes player references. - Tattle: - - sound: shutters have a unique sound effect - Thedragmeme: - - qol: 'Makes the Meta station kitchen not cramped anymore - - :cl:' + MTandi: + - balance: Meta lounge and theater are back to original sizes, art storage moved + to aux tools storage + Melbert: + - bugfix: Mime using captain's announcement visible message is correct + - bugfix: Stairs are now resistant to being shoved by mobs with high move force. + Rex9001: + - bugfix: Adds missing vendatray to Northstar, and removes the scrubber co2 infinate + loop + SethLafuente: + - bugfix: fixed spiderlings speaking human instead of spider + Thlumyn: + - bugfix: birdshot cryo no longer needs medbay access to leave + Thunder12345: + - bugfix: The acrade cabinet in North Star's departure lounge now works. Wallem: - rscadd: The ancient recipe for the Death Sandwich has been rediscovered buried in the deepest depths of an erupting volcano. - Zergspower: - - qol: Dangerous Research Ruin - Area redefines - - bugfix: Port Tarkon - Window firelock issues resolved for all along with cleanup - Zytolg, LT3: - - rscadd: Birdshot station has been pulled out of Mothball. - - rscadd: New station areas and places to visit. A Mix of Kilo and Delta maints - with winding shortcutting paths. - - rscadd: A host of new shuttles to support this bold endeavor to reclaim something - that really shouldn't be reclaimed. - - rscadd: Two Trams, Two Trams. TWO TRAMS! - - rscadd: For the last time Bob, the gaping hole is a **feature.** Use the breach - shutters or have the virologist make starlight. - - rscadd: A smiling salute to stations past... - - rscadd: Secrets. - nikothedude: - - rscadd: '*exme now allows you to pick which layer of container the emote originates - from' - softcerv: - - code_imp: moves the SAD code for applying prefs, while keeping damage, to it's - own separate proc. - - refactor: refactors magical wand code, fixing several bugs. - - bugfix: glassblowing no longer works if the glass lacks heat - - bugfix: glassblowing is unable to be done on multiple objects at once. - - refactor: refactors organic interface status effects so that they no longer run - on every human. + Xander3359: + - spellcheck: BLOX is the name and posibrain is the game. + iwishforducks: + - rscadd: Stowaway Changelings will now appear as a late join form of Changeling. + norsvenska: + - bugfix: Even more fixes to North Star decals and detailing + san7890: + - bugfix: Basic mobs will now be affected by explosions again. 2023-05-05: - Ebin-Halcyon: - - image: Teshari have been resprited in their entirety, set your colors if they - look off. - - image: One new Teshari ear style, a ponytail. - - image: Upright mane, and thin mane Teshari ear styles have been edited/removed, - add a mane through the fluff dropdown menu. Set your mismatched parts on. - LT3: - - code_imp: You can now exclude maps from ssDecay + MTandi: + - qol: 'Mapping: Added broken machine map helper' + - qol: 'Mapping: Replaced damaged window spawner with a universal helper' + Melbert: + - bugfix: Tramstation Robotics and RD now spawn in their departments roundstart + - bugfix: Birdboat detective now spawns in their office + Rhials: + - bugfix: Powersinks no longer always show as being very hot if you're too close. + Striders13: + - rscadd: miners with style meter can now parry kisses + lizardqueenlexi: + - bugfix: The hierophant club's sprite updates when it should + - bugfix: The hierophant club grants the blink action when summoned into hand + vinylspiders: + - bugfix: a mob will now once again spill their organs when they are gibbed + zxaber: + - bugfix: Fixed math on cyborg restocking + - qol: borgs entering chargers now have the restocking feature enabled by default. + It can be disabled with a right-click while charging if you don't want to eat + the station's mats. + - balance: Borg restocking speed now scales with the charger's manipulator tier. + - bugfix: Mech chargers on Tram (and possibly elsewhere) no longer sync oddly. 2023-05-06: - Ebin-Halcyon: - - bugfix: Syndicate winter coats should no longer be masses of missing textures. - Helios7-1: - - rscadd: The new Adventurous Synth Plushie! It Beeps! + Helg2: + - qol: Trees, rocks, grass and etc. now drop materials when destroyed. + Melbert: + - balance: Blind people don't get alerted when someone in a cardboard box pops out + nearby + - rscadd: ' Non-player references' + RealityOverseer: + - bugfix: fixed unrefined ectoplasm anomaly cores not appearing as unrefined Rhials: - qol: Observers now recieve an alert when a powersink is activated/about to explode. - qol: His Grace being awoken now alerts observers, to give you a headstart on your @@ -207,73 +253,18 @@ not be any more powerful, but at least you have an audience. - qol: When beginning to delaminate, the Supermatter will alert observers and invite them to watch the fireworks. - RikuuTheRiolu: - - balance: Removed "Gore" from disliked food's for Teshari - larentoun: - - rscadd: Synth-Humanoids now have snout as a deafult bodypart -2023-05-07: - Anonymous: - - image: Updates Blastwave suits to be more taller and greener. Torso part is also - now closed/zipped up. - - bugfix: Fixes wrong reskin icon names for Blastwave helmet. - ChakatStormCloud: - - bugfix: BSA now properly faces East when built with the Bore facing east - - 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 - 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 - stock actually adjustable, and also matter for use. Ctrl-click to toggle its' - stock. Users are warned that improper handling will lead to decreased accuracy. - Jolly: - - bugfix: The area icon for the evidence room should be visible in the map editor - again. - Melbert: - - balance: Blind people don't get alerted when someone in a cardboard box pops out - nearby - - rscadd: ' Non-player references' - QuacksQ: - - bugfix: Fixes dead ends in arrival maints on Voidraptor. - Rhials: - - bugfix: Powersinks no longer always show as being very hot if you're too close. - Shadow-Quill: - - bugfix: The arrival shuttle's console can no longer have the "Shuttle departing..." - message spammed. - - bugfix: The welding fuel ammo indicator will now update whenever it's used or - refilled, not just when it's toggled. - SkyratBot: - - qol: The Ice Box pharmacy and Med Sec Outpost blast doors have been replaced with - shutters. - - bugfix: fixed unrefined ectoplasm anomaly cores not appearing as unrefined - - qol: Shuttles will no longer show their current destination as a choice while - in transit. - - rscadd: miners with style meter can now parry kisses - - qol: 'Mapping: Added broken machine map helper' - - qol: 'Mapping: Replaced damaged window spawner with a universal helper' - - bugfix: The hierophant club's sprite updates when it should - - bugfix: The hierophant club grants the blink action when summoned into hand - balance: Psyker Pirates are now Psyker Shikari (bounty hunters). - - bugfix: Fixed math on cyborg restocking - - qol: borgs entering chargers now have the restocking feature enabled by default. - It can be disabled with a right-click while charging if you don't want to eat - the station's mats. - - balance: Borg restocking speed now scales with the charger's manipulator tier. + Thlumyn: + - rscadd: Added wedding cakes + tralezab: + - balance: Tonguespike is better, chemspike deals slightly less damage +2023-05-07: + Cheshify: - bugfix: The North Star's cargo shuttle has working conveyors. - bugfix: The North Star has had a slew of missing and improperly done content added and reworked, see the PR for more! - - balance: Tonguespike is better, chemspike deals slightly less damage - - qol: Trees, rocks, grass and etc. now drop materials when destroyed. - - bugfix: a mob will now once again spill their organs when they are gibbed - - bugfix: Mech chargers on Tram (and possibly elsewhere) no longer sync oddly. - - rscadd: Added wedding cakes - colb: - - qol: You can now use the Navigate verb to find your way to cryo on Birdshot - - bugfix: Removed a doubled up cryo pod - larentoun: - - bugfix: icon names for 6.8 mag -2023-05-09: + JohnFulpWillard: + - bugfix: Tablets' minimize apps feature works again. JohnFulpWillard, sprites by McRamon, tattax, and Lamb: - rscadd: The Coroner, a new Medical role revolving around dead corpses and autopsies. - rscadd: The Coroner's Autopsy Scanner, used for discovering the cause for someone's @@ -336,6 +327,17 @@ - image: updated smart fridge sprites for all variants - bugfix: smart fridges no longer overlap with walls, but they can be welded down to a floor and mapspawn welded + Jolly: + - bugfix: The area icon for the evidence room should be visible in the map editor + again. + Shadow-Quill: + - qol: Shuttles will no longer show their current destination as a choice while + in transit. + - qol: The Ice Box pharmacy and Med Sec Outpost blast doors have been replaced with + shutters. +2023-05-08: + Helg2: + - bugfix: deleted unused airlock helper from syn-c brutus. Jacquerel with new icons mostly by INFRARED_BARON: - balance: Golems have been reworked into a hunger-based species who gain temporary transformations when eating different kinds of mineral. @@ -375,6 +377,46 @@ I'd call that a fair trade. - rscadd: Ruins are now available in the region around the Northstar, Curators are now no longer jobless! + LT3: + - qol: Ghosts will now get a notification when someone is about to be hit by the + tram + Melbert: + - bugfix: Fixed Prosthetic Quirk not removing the limb before giving the prosthetic + - rscdel: You can't get an Elite Syndie Modsuit (or combat defib, or dart pistol) + from Space Ruins + Profakos: + - refactor: converts the request console to tgui + Rex9001: + - bugfix: Fixes the orm board in the golem ship being the wrong subtype + Rhials: + - bugfix: The psyker shuttle now has a suit for the psyker seer. + Thunder12345: + - image: Holy arrows are now 15% less holy (You can no longer click on the 2-pixel + hole in the arrowhead and unintentionally click the object below the arrow instead.) + - bugfix: The chaplain's divine bow can now be renamed like all other null rod variants. + YehnBeep: + - bugfix: The All-American Diner no longer requires a bunker ID card for most rooms + nor requires accesses to use the jukebox. + - bugfix: The All-American Diner's external airlocks now all work together. + actioninja: + - rscadd: good tgui dropdowns + - rscdel: tgui dropdown suck + - qol: tgui dropdowns suck less + - balance: buffed tgui dropdowns + larentoun: + - code_imp: Adds default multiplicative movespeed for basic mobs, to make them editable + in config + - config: Default multiplicative movespeed for basic mobs in example config + - bugfix: Stamina damage and healing now correctly applies movement slowdown + the-og-gear: + - bugfix: Paint cans have become limited use as intended by the gods of code + - bugfix: Clown borgs get unlimited paint, as a treat. +2023-05-09: + '@Krysonism, @Imaginos16, @MTandi, @san7890': + - image: updated smart fridge sprites for all variants + - bugfix: smart fridges no longer overlap with walls, but they can be welded down + to a floor and mapspawn welded + CoiledLamb: - rscadd: adds coroner's jumpsuit and jumpskirt to the mortidrobe - rscadd: black scrub cap to the mortidrobe - rscadd: adds coroner medkit, and it's compact variant, for storing coroner job @@ -386,18 +428,61 @@ - image: fixed weird transparency on the autopsy scanner sprite - image: fixed weird shading on the black scrubs object - spellcheck: fixed a punctuation error in the surgical medkit description - - bugfix: runtime when toggling engineering meson scanners - - bugfix: Organ harvester board drops on deconstruct. - - bugfix: Bluespace sender and vendor should display colors correctly now - - bugfix: Gas filter should show labels properly now - - bugfix: Nitrium now has its own gas color in the UI - - qol: Added switch buttons to few dropdown in character preferences - - image: added single tank bomb guide contraband poster + DaydreamIQ: + - bugfix: Northstar HoP can no longer commit fraud + - qol: Northstar brig now has genpop instructions + Fikou: - bugfix: new hotkeys unbound by default (like emotes) no longer scream at you when added - bugfix: adds orm access to the chaplain, curator, clown, mime, lawyer, and psychologist - - rscadd: Indusrial Gold and Regenerative Gold extracts now spawn random coins and - not just list of 6 coins. But no mythril as it has miserable chance to have + Helg2: + - qol: Deleted unnecessary text from description of supply pod beacon. + MTandi: + - image: added single tank bomb guide contraband poster + ReinaCoder: + - image: The Mosin and Prime Nagants have been resprited. + Rhials: + - bugfix: Ghosts mobs are now temperature immune. + SyncIt21: + - bugfix: runtime when toggling engineering meson scanners + - rscadd: Access secured closets. Personal closets can have their access overwritten + by an new id in it's unlocked state + - rscadd: Access secured freezers. + - rscadd: Access secured suit storage units. + - bugfix: Suit storage unit not having access restrictions. + - bugfix: airlock electronics not properly getting removed after screwing them out + from round start lockers + - bugfix: round spawned open crates run timing when closed + - bugfix: open crates hiding stuff in plain sight + - bugfix: open closets/crates sucking up contents during late initialize causing + them appear empty & open + Thunder12345: + - image: Stock parts have been resprited. + - code_imp: Manipulators have been renamed to servo motors, all related types have + been repathed to match. + Time-Green: + - bugfix: Loose limbs will not duplicate organs anymore + - qol: Stable bluespace anomalies in the anomaly ruin will only teleport you on + touch, not being near them + Wallem: + - balance: Buffs the Active Sonar module for modsuits with a shorter cooldown & + moving pings. + Xander3359: + - bugfix: Organ harvester board drops on deconstruct. + jlsnow301: + - bugfix: Bluespace sender and vendor should display colors correctly now + - bugfix: Gas filter should show labels properly now + - bugfix: Nitrium now has its own gas color in the UI +2023-05-10: + Addust: + - rscadd: The Cerestation whiteship no longer has soul, but it does have solar sails! + I'd call that a fair trade. + DaydreamIQ: + - rscadd: Ruins are now available in the region around the Northstar, Curators are + now no longer jobless! + Helg2: + - rscadd: Indusrial Gold and Regenerative Gold extracts now spawn random coins and + not just list of 6 coins. But no mythril as it has miserable chance to have summoning effect which have even more miserable chance to spawn something dangerous and not just mice. - rscadd: Chococoin now has a chance to spawn wherever the coins are used to spawn @@ -425,6 +510,23 @@ - image: removed a whole lot of unused hat icons. Make any reports for broken icons on the github! SkyratBot: + JohnFulpWillard: + - balance: Default Syndicate and Russian gunners now fire every 2.5 seconds instead + of every 0.2 + KoJIT2009: + - qol: Added switch buttons to few dropdown in character preferences + Melbert: + - bugfix: Fixes a runtime with plasmaman clown suit lube spray + Singul0: + - bugfix: The console for the solar panels of AIsat solars tramstation are now actually + connected together + Tattle, Flashkirby: + - sound: increased the volume of the water step noises + - image: ported over bay's water sprites + Zergspower: + - qol: Space Ruin Whiteship - Total redesign with some loot tweaks + vinylspiders: + - bugfix: fixes emissive blockers sometimes being put in an atom's contents - bugfix: high luminosity eyes light overlays now follow the user correctly - qol: high luminosity eyes now have a tgui menu so you no longer have to go through the color picker every time you want to change the range. they also have a new @@ -434,14 +536,37 @@ light direction correctly no matter what dir you are facing - refactor: refactors high luminosity eye code to better make use of the atom lighting system, adding a new light type 'MOVABLE_LIGHT_BEAM' -2023-05-12: - KoJIT2009: - - bugfix: fixed crash augment page in preferences +2023-05-11: + BlueMemesauce: + - bugfix: Fixes not being able to rebuild the MortiDrobe (Coroner Wardrobe) + - bugfix: For the purposes of the crew manifest, Coroner is now considered a medical + job rather than both service and medical. + - qol: The ghost verb no longer says you are unable to succumb to death if you're + pressing it while conscious + CoiledLamb: + - bugfix: the mortidrobe restock is now orderable from cargo, in the medical wardrobe + supply crate. + - spellcheck: fixes typo in autopsy kit crate name + Hatterhat: + - rscadd: 'Items flagged with UNIQUE_RENAME (read: the items that let you rename/re-desc + them with a pen, like food, or the det''s revolver, or the proto-kinetic crusher) + now allow you to enter up to 280 characters of description for them. Please + re-desc your items responsibly.' + Jolly: + - bugfix: '[Ruins] Pod Crash now uses the ruins-specific space turf. This doesn''t + change anything visually, but ships can land here and not have their areas viciously + rip off.' + - bugfix: '[Ruins] If you explode the deep storage ruin, you won''t see space. You''ll + see asteroids!' + - bugfix: '[Ruins] The entire thing should blow up into asteroid turf now, instead + of previously one pocket of space forming (lol?).' + - bugfix: '[Ruins] In the crashed ship ruin, other ruins should be able to spawn + more organically close to it.' + - bugfix: '[Ruins] In the SAME ruin, area defines were added to the asteroids. Don''t + get lost now!' MTandi: + - image: New sprite for syringes - balance: 25 bottles of saltpetre can now be bought in hacked NutriMax - Nerev4r: - - rscadd: New (old) Glitched Digicoat for donators. - - image: Nedilla plushie donator reward. Rhials: - bugfix: Outfit changes will now properly change your ID trim if wearing a non-ID item in your ID slot. @@ -548,6 +673,9 @@ tralezab: - bugfix: Chuuni wizards no longer get robeless casting issues. 2023-05-16: + tralezab: + - bugfix: Chuuni wizards no longer get robeless casting issues. +2023-05-12: DrDiasyl aka DrTuxedo#0931: - qol: Now blocking an attack will play a sound and display a spark effect, giving back feedback @@ -665,6 +793,100 @@ have a space to archive more art! Swiftcore: - qol: Dish drives now collect empty plates and plate fragments + Jolly: + - image: Mappers rejoice! PDAs now have mapping icons. + ShizCalev: + - code_imp: The update_icon_updates_onmob element will now automatically update + all slots in an item's slot_flags var. This does fix multiple things that weren't + updating properly. Passing a slot to the element is now only necessary if you + want to add additional slots to be updated. + - bugfix: Lighting inside of a Hilbert Hotel storage room no longer constantly fails + to update, clearing up some log spam and getting back some free lag. + Swiftcore: + - qol: Dish drives now collect empty plates and plate fragments + SyncIt21: + - qol: RCD spawned apc, air alarm, fire alarm frames are no longer deleted if the + wall mount operation fails. + - bugfix: balloon alert run timing on deleted wall mount frame spawned by an RCD. + - bugfix: closets & crates can be wrapped with wrapping paper again + - refactor: closet & crate paint jobs static list vars, access_choices static list + var are initialized only once during init + YehnBeep: + - bugfix: Fixed bottleneck on North Star's SM waste line (it can now handle the + full output of 1 filter per the stock setup). + Zytolg: + - bugfix: Birdshots armory now has an Ion Rifle. + lebedev: + - qol: Made selected elements highlighted in TGUI Dropdowns + - bugfix: fixed custom say emotes with non-ASCII characters + oranges: + - balance: increased laser damage, decreased energy cost and increased wound chance + - balance: MECH RCD is no longer magic +2023-05-13: + '@Xander3359 Sprites: Nebby#1467': + - image: Replaces the old patches with some new sprites + BlueMemesauce: + - bugfix: fixed exploration drones discarding loot when there was 1 space left + HWSensum: + - qol: Players now are able to use other languages for announcements via requests + console. + Jacquerel: + - bugfix: Free golem shells printed from the free golem ruin are no longer enslaved + to whoever finished constructing them. + JohnFulpWillard: + - bugfix: Psychologists have Morgue access on lowpop, on top of their existing Coroner + office access. + - balance: Drones can now access computers and air alarms by default, and the CE + has the option to turn it off through the BotKeeper app (it used to be backwards). + JupiterJaeden: + - bugfix: Setting arrest status with the records console now immediately updates + sechud visuals. + - bugfix: Ninja security record hacks now immediately update sechud visuals. + Melbert: + - bugfix: Applying fines via sechud apply correctly + - bugfix: Runtimes when deleting humans relating to gravity + - bugfix: Runtime from neutralizing "hollow" anomalies + ShizCalev: + - bugfix: Headphones now properly update to display musical notes when a song starts + & stops playing while worn! + - bugfix: Ghosts & camera mobs (ie blobs & AI's) will no longer set off landmines. + - bugfix: Jaunting mobs will now only set off landmines if they stepped on them + BEFORE jaunting. + - bugfix: Flying mobs will no longer detonate landmines that were not first stepped + on. + - bugfix: Armed cleanbots no longer break when they encounter a mindless human. + - bugfix: The materials sniffer now actually works! + SyncIt21: + - bugfix: runtime with smart fridge tooltip + Treachce: + - spellcheck: fixed grammar and a typo when deconstructing reinforced plating + Vallat: + - bugfix: fixed griddle code so that the smoke over the grilling items appears only + when the griddle is on + orthography: + - bugfix: replaces empty oxygen tanks in icebox chapel. +2023-05-14: + Comxy: + - bugfix: Fixes the speed of all basic mobs. + Jacquerel: + - bugfix: Diamond Golems can no longer attack or throw things and remain invisible. + - bugfix: 'Bananium Golems are only slippery if you actually tread on them (aka: + while they are resting).' + - balance: Golem bluespace teleportation is slightly quicker. + Jolly: + - bugfix: '[MetaStation] Chefs may now brutally murder- I mean deny service to the + station patrons once again, the shutters over the counter may now be closed + once again.' + Melbert: + - bugfix: Runtime with burning black slime transformation + Paxilmaniac: + - rscadd: Things made primarily of the glass material datum (and any of its subtypes) + will now shatter when thrown, be careful with that statue block now. + - code_imp: Shattering on impact is now a component, rather than code just on plates. + Profakos: + - code_imp: cleaned up cargo export code a bit + Singul0: + - bugfix: HoP on northstar can now disperse troublemakers with ease. Sylvette: - bugfix: Fixed sign language so you can't sign when cuffed or emotemute as initially intended @@ -708,6 +930,120 @@ - bugfix: Fixed an issue where objects on something that loaded dynamically, like shuttles, would not be smoothed. - rscadd: Add new White Dwarf and Pulsar Star reports. + Thunder12345: + - bugfix: "Dueling pistols found in deep space now come in linked pairs for \u221E\ + % greater usability." + YehnBeep: + - qol: Posters can now fit back into the boxes they come in. + junkgle01: + - image: Resprites the vanilla & brioche cakes and their associated slices. + kawoppi: + - rscadd: added animations to the *jump, *shiver, *sway, *tremble, *twitch and *twitch_s + emotes + - rscadd: the *jump emote now plays a sound + orthography: + - bugfix: fixes an empty oxygen tank on birdshot + ynot01: + - bugfix: Desert Eagles can no longer load .50 BMG sniper rifle rounds and vice + versa. +2023-05-15: + Capsandi: + - bugfix: space ambience tracks will no longer cut themselves off + - sound: added a new ambient track for space + DATA-xPUNGED: + - rscadd: Added a new way out of Birdshot's gulag. + - bugfix: Replaced the oven on Birdshot with a range. + DrDiasyl aka DrTuxedo: + - sound: Nanotrasen have started installing music players in the elevators to boost + workers' morale. + Jacquerel: + - balance: The Death Sandwich can no longer be renamed + - bugfix: Spiderlings no longer get stuck in webs + KoJIT2009: + - bugfix: Fixed dropdown buttons empty selected case + LT3: + - bugfix: Minor fixes to Icebox's elevator + Sealed101: + - bugfix: made gorilla transformation when affected by excess amounts of genetic + damage work + SethLafuente: + - bugfix: fixed sealed webs not stopping active atmos + ShizCalev: + - bugfix: Food/slime processors now shake when in use again. + - bugfix: Fixed fake grid check events failing to announce properly. + - bugfix: Secret recipes will no longer contain inaprovaline or stranger reagent. + - bugfix: Guns without magazines inserted can now fire again! + - bugfix: Fixed a runtime which occured when a self-recharging gun (ie proto-kinetic + accelerator) with a bayonet attached was deleted. + - bugfix: Fixed a minor runtime when renaming mechs that don't have a camera attached + to them. + Singul0: + - qol: To clear up confusion with players bringing their own uniforms to the basketball + match the holodeck engineers over at centcom added uniforms for their basketball + court holodeck! + - bugfix: Barriers have been added in the holodeck basketball court to prevent players + from entering the bleachers + Striders13: + - rscadd: 'Northstar: non-secure tech storage been made less secure.' + - rscadd: 'Northstar: added a holopad to AI sat entrance.' + - rscadd: 'Northstar Z2: fills up maint with more loot.' + SyncIt21: + - bugfix: Holopad UI will not hang when connection fails + - bugfix: signal override & other area sensitive runtimes during area editing with + station blueprints + - bugfix: gps arrows rotate correctly + - bugfix: icons have their correct sizes applied again + Watermelon914: + - qol: Added a message to the component menu in the integrated circuit interface + that explains how to link an integrated circuit to a component printer. + kinneb: + - qol: Added a Oxy Tank dispenser to the bounty ship for a lil' more general QoL + orthography: + - bugfix: fixes how the morgue renders on tramstation. +2023-05-16: + ChungusGamer666: + - rscadd: You can burn bibles now! But heresy has a steep cost... + Helg2: + - rscadd: Old bar on Metastation, tranquility emergency shuttle and Beach away mission + now have free access bar closets. Also freezers on beach are now all access + so you can now open them. + LT3: + - admin: Admins are now warned if they are going to override a currently playing + admin midi + Melbert: + - balance: You are now slightly less likely, statistically, to get an antag role + on latejoin + - bugfix: Fixed latejoin antags being logged as "midround" antags + Mothblocks: + - bugfix: Fixed an issue where objects on something that loaded dynamically, like + shuttles, would not be smoothed. + OneAsianTortoise: + - bugfix: Fixes Birdshot Station's Missing Pimpin' Ride Key + Profakos, sprites by CoiledLamb: + - qol: Most request console varedits have been moved to mapping helpers. + Thunder12345: + - image: Skillchips have been resprited to be smaller and more chip-like + Watermelon914, Iamgoofball, MrStonedOne: + - rscadd: Adds TTS to player speech. Players can hear themselves speak. + YehnBeep: + - bugfix: Turret Outpost's external airlocks now all cycle together instead of as + 2 separate pairs. + - bugfix: DJ Station's kitchen fridges no longer require kitchen access to open. + - bugfix: The Faceoff's faster-than-jetpack-speed enemies no longer attack explorers + only passing by. + carlarctg: + - rscadd: Adds the Syndicate 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. +2023-05-17: + BlueMemesauce: + - bugfix: fixed "There's a tree in space" adventure being impossible to beat + Comxy: + - rscadd: Add new White Dwarf and Pulsar Star reports. + Fikou: + - rscadd: You can emag morgue trays to disable their life alerts. + Hatterhat: - bugfix: Bolt-action rifles (the Mosin-Nagant) will no longer spam "can't jam!" when attempting to smack it with just about anything. - bugfix: Anti-materiel rifles (the .50 BMG ones) can now have their magazines manipulated @@ -734,6 +1070,17 @@ 2023-05-18: Melbert: - bugfix: Latejoins triggering before the minimum time set + Helg2: + - rscadd: Fire Blossoms are now glowy. + Jacquerel: + - bugfix: Blob and Kudzu tiles which expand into chasms will now be correctly destroyed + by the chasm. + MTandi: + - rscadd: Air alarms can be connected to an area remotely via air sensor with multi-tool + and corresponding access + - qol: 'Mapping: Added air alarm helper to link air alarm with certain chamber_id + on map load' + Melbert: - rscadd: When you are drunk, the strength of your slurring now varies based on how drunk you are. Being "a little drunk" only rarely slurs your words, being average drunk is the same as the old effect, while being very drunk now slurs @@ -858,6 +1205,34 @@ - balance: Security Plasmamen now have Security armor. No bullying them with bottlesmashes anymore. - bugfix: fixed Tramstation genetics pen chasms + SethLafuente: + - bugfix: fixes spiderlings having density + ShizCalev: + - refactor: Recharger code was modernized a little & will now properly say how much + charge you have in a power pack. + SyncIt21: + - bugfix: runtime when turning scrubber's on via the air alarm UI + - refactor: '`atmos_conditions_changed()` now starts atmos processing based on it''s + turf air contents' + Thunder12345: + - rscadd: Metastation's recreation area has been outfitted with a new fitness room + containing a set of gym equipment. + - bugfix: Metastation's recreation area shower is now attached to plumbing. + Vishenka0704: + - bugfix: fixed different from english keyboard layout to use tgui chat +2023-05-18: + Helg2: + - balance: Security Plasmamen now have Security armor. No bullying them with bottlesmashes + anymore. + Melbert: + - bugfix: Latejoins triggering before the minimum time set + Reality Overseer: + - bugfix: fixed photographs having black borders in photos + - bugfix: makes elder atmosian statue craftable + Rhials: + - sound: Revolutionaries now have their own stinger that plays upon becoming that + antagonist. + jlsnow301: - refactor: Tgui Say is rewritten, becoming "much more performant". Hey, that's what it says on the tin! I'm not from marketing! - bugfix: Tguisay drag zones are now ever so slightly larger around the corner of @@ -885,6 +1260,50 @@ - rscadd: Snails can now slap their shells with a bluespace core to turn them into shells of holding. SkyratBot: +2023-05-19: + Fikou: + - bugfix: fixes clown planet report + GoldenAlpharex: + - bugfix: Makes checks for the station z level more robust against coders doing + less intuitive stuff, thus protecting it from breaking in weirdly difficult + and seemingly unrelated places (I'm looking at you, nuke cinematic unit test). + Jacquerel: + - bugfix: The Cursed quirk will once more plague you with bad luck for your entire + shift rather than just once. + Melbert: + - bugfix: Ahealing a heretic now properly gives them their heart back + - bugfix: Request Console Announcements breaking and reporting "/list" + Mothblocks: + - balance: Adjusted stowaway changeling requirements to be closer to roundstart + Changelings. + Thunder12345: + - qol: Double clicking your corpse or something containing it as a ghost will now + orbit as in other cases instead of re-entering your corpse. + - bugfix: Dueling pistols can no longer be fitted in turrets to instantly kill people. + TiviPlus: + - bugfix: fixed TTS not working when used by local servers + YakumoChen: + - qol: Bar bottles now work as makeshift rolling pins +2023-05-20: + DaydreamIQ: + - bugfix: Space Dragon can no longer place their portals outside the station on + Tramstation + JohnFulpWillard: + - qol: Gym equipment was reworked. You now buckle yourself to weight machines to + use them, rather than clicking on it and getting stunned for a few seconds. + It also means it works like a chair now. + - qol: Gym equipment no longer breaks a sweat in no gravity. + MTandi: + - bugfix: fixed possible issues with apc, airalarm and damaged machinery/windows + helpers + Profakos: + - bugfix: fixes request console messages not being trimmed and encoded properly + ShizCalev: + - code_imp: Made a new unit test to find turfs with broken/missing icons! Rejoice! + - bugfix: Fixed a bunch of incorrect and missing turf icons. + orthography: + - bugfix: fixed Tramstation genetics pen chasms + san7890: - refactor: Lizards (the animal (not the species of people)) are now a bit smarter. Expect to see them avidly hunt down their prey, rather than languish around and wait for it to come to them. Hungry buggers. @@ -917,6 +1336,11 @@ - bugfix: fixed medical kiosk showing you that you have blood if you don't have one. - image: Added new Maintenance Drone Dispenser sprite + timothymtorres: + - code_imp: Add extra clothing options to equip mob outfits. Replaced many one-letter + vars in file with better descriptions. +2023-05-21: + MTandi: - bugfix: made it impossible to change tram/elevator button styles that couldn't be reverted back - image: changed button styles, added tram/elevator button overlays @@ -931,6 +1355,37 @@ and feel faster. SomeRandomOwl: - bugfix: Added descriptions to events which where missing descriptions. + Thunder12345: + - image: Space lizard, carp, slime and snake plushies have been resprited and set + up to support GAGS. +2023-05-22: + SyncIt21: + - bugfix: wire cutter's can carve out book's again. + - bugfix: bibles can convert other bibles + TiviPlus: + - qol: TTS no longer chokes on large amounts of one letter +2023-05-23: + Comxy: + - bugfix: Removes spiderling from hostile gold spawns. + Epoc: + - rscadd: Toast sandwich + Furrior: + - admin: 'If you are on a downstream server using non-Latin fonts (e.g. Cyrillic) + for character/job names: The player panel encoding has been fixed so it should + show up properly for you now.' + Ghommie: + - bugfix: Fixed large paintings looking pretty off while flipped E/W. + Helg2: + - bugfix: fixed medical kiosk showing you that you have blood if you don't have + one. + JohnFulpWillard: + - bugfix: Borgs can be tipped over while flashed. + Rhials: + - qol: Ashwalker roundend reporting has been revamped. Glory to the Necropolis! + ShizCalev: + - bugfix: Fixed an item duplication bug involving snow tiles. + Singul0: + - bugfix: The buttons in HoP office of Icebox now actually works Treach: - bugfix: The Lavaland Syndicate base now has the correct plumbing constructor. Watermelon914, Iamgoofball: @@ -988,6 +1443,46 @@ - config: added config string to set minimum alert level for pods to work. Jolly: - rscdel: Removed a player reference from one of North Stars Automapper templates. + Youtubeboy139: + - image: Added new Maintenance Drone Dispenser sprite + ZephyrTFA: + - server: All logs are now formatted in json, excluding perf and investigations + Zergspower: + - qol: Space Ruine Mechtransport - more modern redesign + jlsnow301: + - bugfix: Fixed an issue where TGUI say blinks on open, which should make it look + and feel faster. + orthography: + - bugfix: fixes the guide to mimery radial menu. + - refactor: refactors how the mime book works. + tf-4: + - refactor: Converted butterflies to the basic mob system + - rscadd: Butterflies can now be grown in cytology +2023-05-24: + Cheshify: + - bugfix: The North Star got a few minor requested tweaks + DaydreamIQ: + - balance: Hulk damage to portals lowered to 30 (Was 150) + Ghommie: + - bugfix: Capturing CTF control points no longer requires the active hand to be + empty. + - bugfix: Fixes the sparring contract. You can now spar with no stakes and just + for fun. + Guillaume Prata: + - balance: Plasmamen won't spawn with breathing masks anymore as their helmet has + maskless internals support now. Enjoy your moustache's accent plasmacooks! + JohnFulpWillard: + - bugfix: Shaft Miners are now alerted of Icemoon storms, Clowns are naive, and + Curators are immune to the Tower of Babel again. + Jolly: + - bugfix: '[MetaStation] The abandoned sec couch should now be covered by nearstation.' + - bugfix: '[MetaStation] Lattice adjacent to the newly added fitness room is now + covered by nearstation.' + MTandi: + - qol: RPD and Pipe Pispenser UI tweaks for better navigation + - code_imp: RPD and Pipe Dispenser UI now on TS + - bugfix: You receive damage from tritium only when there are enough moles to make + it visible MTandi, coiledlamb: - rscadd: Added test tubes and racks for them - balance: All 30u bottles now have 50u volume and chem master/pandemic spawn tubes @@ -997,40 +1492,47 @@ Ryll/Shaps: - bugfix: Godmode now prevents people from suffering forced wounds SkyratBot: + Peliex: - refactor: honeycomb is now edible - bugfix: all-in-one grinder now notifies the user when trying to dump an empty bag - bugfix: all-in-one grinder now accepts honeycomb from plant bags - - bugfix: Capturing CTF control points no longer requires the active hand to be - empty. - - admin: 'If you are on a downstream server using non-Latin fonts (e.g. Cyrillic) - for character/job names: The player panel encoding has been fixed so it should - show up properly for you now.' + Rhials: + - bugfix: The windows on the waystation ruin now only have one grille underneath, + rather than two. + Ryll/Shaps: + - bugfix: Godmode now prevents people from suffering forced wounds + Watermelon914: + - bugfix: Fixed bypassing component cooldowns with module components. + YehnBeep: + - bugfix: Fixed missing construction access on North Star and Birdshot. Non-engineer + builders can ask for this access again and get to those build projects. + - bugfix: Fixed some maintenance doors requiring different accesses than the room's + main doors in the North Star's engineering department. + carlarctg: + - bugfix: Fixes ducky shoes having clown shoe slowdown + mc-oofert: - balance: You can no longer augment golems - balance: You can no longer amputate undismemberable traits - - bugfix: Shaft Miners are now alerted of Icemoon storms, Clowns are naive, and - Curators are immune to the Tower of Babel again. - - qol: RPD and Pipe Pispenser UI tweaks for better navigation - - code_imp: RPD and Pipe Dispenser UI now on TS + orthography: - rscadd: Interdyne has released a new medication to treat those who are in the wrong timeline! - rscadd: Interdyne has also realized this is VERY profitable! They've begun arming their operatives with an autoinjector. - - bugfix: You receive damage from tritium only when there are enough moles to make - it visible - - bugfix: Fixes the sparring contract. You can now spar with no stakes and just - for fun. - - balance: Hulk damage to portals lowered to 30 (Was 150) -2023-05-26: - Melbert: - - bugfix: Fix being unable to wound people who are wounded - - balance: Milk no longer harms the potency of mushrooms. Apparently it's good for - them? - - balance: Radium now does slightly more tox damage than Uranium - - code_imp: Removed a ton of boilerplate from chem hydro interactions - SkyratBot: - - qol: Apc covers can now be repaired with a welder and replaced with an apc frame. - - bugfix: Plumbing RCD UI fixed + - bugfix: fixed northstar tcomms to use proper rather than birdshot + - bugfix: adds more fire alarms to birdshot. + timothymtorres: + - rscadd: Add two new basketball teams and stadiums - Ash Gladiators and Beach Bums +2023-05-25: + Chadley: + - bugfix: fixes the HMS objective. + Ghommie: + - balance: Drawing small graffiti like paw/foot/claw prints, small brush dots and + short lines should cost half as many charges off your spraycan or crayon. + - balance: The cost of recoloring graffiti decals is now consistent with that of + drawing them. + - balance: Trying to suicide with an empty spraycan will now fail, because it's + empty. It's just that simple. - qol: Adds a eye-dropper-like right-click function to the painting canvas UI. Right-Click a pixel on the canvas while holding a painting tool to have it copy its color. - qol: Also adds a right-click function to the color palette at the bottom of the @@ -1038,114 +1540,197 @@ 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 - of new machines capable of fabricating and distributing hardlight into a modular - barrier. These new machines are available via the advanced power manipulation - techweb. + LemonInTheDark: + - server: qdel statistics are once again logged in qdel.log, instead of the otherwise + typical json logging system + Melbert: + - balance: Milk no longer harms the potency of mushrooms. Apparently it's good for + them? + - balance: Radium now does slightly more tox damage than Uranium + - code_imp: Removed a ton of boilerplate from chem hydro interactions + SyncIt21: + - bugfix: out of bounds when updating lights in lighting subsystem + san7890: + - refactor: Chickens have been refactored into basic mobs, expect them to be a tad + bit smarter. - code_imp: Cat Surgeons are a bit more smarter about attacking threats to the world around them on their endless pursuit for those felinid tails. - - bugfix: out of bounds when updating lights in lighting subsystem - - refactor: Refactors snipping cuffs into a bespoke cuffsnapping element, adding - support for delayed cuffsnipping. Adds this element to box cutters! Effectively - speaking everything is the same as usual. - - balance: Drawing small graffiti like paw/foot/claw prints, small brush dots and - short lines should cost half as many charges off your spraycan or crayon. - - balance: The cost of recoloring graffiti decals is now consistent with that of - drawing them. - - balance: Trying to suicide with an empty spraycan will now fail, because it's - empty. It's just that simple. - - bugfix: Spacesuits won't show 'you turn off x' if it's turned off automatically, - either from removing the power cell or it losing power. - TheSmallBlue and cats4gold: - - sound: Recent research concluded that the new elevator music was upping crewmate's - morale a bit too much, this has now been corrected via the replacement of said - music. - - code_imp: Added a new "in_order" variable to the looping sound datum, for when - you need sounds to play in order 2023-05-27: - KathrinBailey: - - bugfix: Voidraptor smoke machine room in the chemistry lab can now be opened by - chemists/CMO. - - qol: Voidraptor chemlab reorganised for better accessibility and reduced roundstart - chores, so chemists can get to doing chemistry faster. + FlufflesTheDog: + - bugfix: Test tubes can now be stored in chemistry smart fridges + Ghommie: + - qol: The Canvas UI now shows a grid while the user is painting. + Helg2: + - bugfix: Coroner envirohelm (plasmaman helmet of coroner) now doesn't show as errors + when using flashlight mode. + JohnFulpWillard: + - balance: Very small items like tape recorders now use 10 mat points instead of + 5. + - bugfix: Species that have longer arms than normal can now properly set their glove + offset to go low and meet their hand. + Jolly: + - bugfix: '[MetaStation] - One of the chem heaters in the pharmacy is no longer + nudged and awkwardly four pixels to the right.' + - bugfix: '[TramStation] - The chem heater in the Xenobiology lab was replaced with + the proper one that every other station uses.' + - image: The chem heater sprite was nudged a SINGLE pixel to the right. This should, + hopefully, make them appear more centered. + LemonInTheDark: + - server: del logging is now done by outputting to a json file again, but this time + we're using ACTUAL json and not just a big text string with newlines and shit + MTandi: + - bugfix: Plumbing RCD UI fixed Melbert: - - bugfix: Fixed being unable to spraypaint things - bugfix: Fixes being unable to amputate - admin: Getting dusted by HMS gives a death log - Paxilmaniac: - - bugfix: Forging can only be done with metals, and not bone/wood/meat/paper/diamonds/whatever - else - SkyratBot: + - bugfix: Fixed being unable to spraypaint things + - bugfix: Fix being unable to wound people who are wounded + SyncIt21: - bugfix: runtime when sm processes gases in vacuum - qol: sm will now get activated for the very first time only if there is more than 0.01 moles of a reactive gas present, so you can now safely install it in near vacuum - qol: sm will continue to process gasses only when there is above 0.01 moles of the gas present else it just ignores it - - bugfix: Species that have longer arms than normal can now properly set their glove - offset to go low and meet their hand. - - bugfix: Test tubes can now be stored in chemistry smart fridges - - bugfix: graves can be closed again, but only with a shovel and not by hand. - - qol: you can put items in graves normally without throwing them in - - qol: examines & screentips for graves - bugfix: rolling pin icon show's up correctly under the tools section in the crafting menu i.e. for those recipes that require it - bugfix: basketball hoop icon and other sprites that are not the standard `32 x 32` now show's up correctly in the crafting menu - YakumoChen: - - bugfix: Booze-O-Mats contain alcohol for synths again - - bugfix: Ghost Cafe dorms with fireplace contain usable wood now - - qol: Ghost Cafe now with Icecat clothing vendor. Consult your local tribal vending - station. - - qol: Ghost Cafe minerals for mixed drinks now are in the Booze-O-Mat. Now with - uranium! + - bugfix: graves can be closed again, but only with a shovel and not by hand. + - qol: you can put items in graves normally without throwing them in + - qol: examines & screentips for graves + TheSmallBlue and cats4gold: + - sound: Recent research concluded that the new elevator music was upping crewmate's + morale a bit too much, this has now been corrected via the replacement of said + music. + - code_imp: Added a new "in_order" variable to the looping sound datum, for when + you need sounds to play in order + TheVekter: + - bugfix: Adds a drone dispenser to Tramstation. + - bugfix: The stacking machine on Tramstation no longer has incorrect input and + output directions at roundstart. + - config: Drone dispensers are now listed as required map items for passing unit + tests. If one is not present on your map, it will fail the test. + - bugfix: Added the missing drone fabricator to Northstar's robotics maintenance. + Treach: + - bugfix: Turbine parts can now be printed at ancient protolathes. + Vect0r: + - bugfix: Birdshots xenobio should now be getting power from the rest of the powergrid. + Z Man Wit Z Plan: + - bugfix: Added some grills around not-so defended areas on Tramstation (specifically + arrivals) + carlarctg: + - bugfix: Spacesuits won't show 'you turn off x' if it's turned off automatically, + either from removing the power cell or it losing power. + - refactor: Refactors snipping cuffs into a bespoke cuffsnapping element, adding + support for delayed cuffsnipping. Adds this element to box cutters! Effectively + speaking everything is the same as usual. + moocowswag: + - qol: Apc covers can now be repaired with a welder and replaced with an apc frame. + - rscadd: Nanotrasen 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. + san7890: + - bugfix: Chickens should now, once again, peck you in case you hit them. 2023-05-28: - SkyratBot: - - bugfix: Fixed virus food being unsynthesizable by making it a hot reaction instead. - Now requires 600K to synthesize. - - bugfix: Coroner envirohelm (plasmaman helmet of coroner) now doesn't show as errors - when using flashlight mode. - - balance: Very small items like tape recorders now use 10 mat points instead of - 5. - - bugfix: soap suicide - Stalkeros: - - sound: Rubber duck now quacks. -2023-05-29: - LT3: - - qol: Being connected to an IV now has a visual indicator - SkyratBot: - - refactor: Chickens have been refactored into basic mobs, expect them to be a tad - bit smarter. - - rscadd: Made disposals outlets launch with more range depending on the setting - used - - rscadd: Made disposals outlets emag effect irreversible without reconstruction + FlufflesTheDog: + - bugfix: You can no longer attach humanoid heads/arms to monkeys + - bugfix: You can once again attach monkey limbs to monkeys + Helg2: + - rscadd: '[Birdshot], [Tram] Added a lightswitch to warehouse.' + - rscadd: '[Birdshot], [Deltastation], [Metastation], [Tram] and [Icebox] warehouses + now have lights off roundstart.' + - bugfix: '[Metastation] Warehouse now has lights. Finally.' + Jacquerel: + - rscadd: Elevator music now cuts off instantly when exiting the elevator and is + inaudible from the corridor outside. + - rscadd: Elevator music can be disabled via a preference. + - bugfix: Several elevators which should not have played music now do not. + Jolly: + - code_imp: The code for posters internally has been tweaked slightly. If you see + posters floating in hallways, please report them ASAP!! + KingkumaArt: + - rscadd: Voltaic Yellow Wine - New "base" drink, found in booze-o-mat. No special + effects besides acting as a weak ethereal food. Not very potent in terms of + alcohol. + - rscadd: Telepole - New mixed drink themed after thunderstorms, gives the same + shock-resist grey bull does. Made from 1 part Voltaic Wine, 1 Part Sake, and + 2 parts Dark & Stormy. Moderately potent. + - rscadd: Pod Tesla - New mixed drink, themed after the old removed tesla engine + (the singulo gets a cocktail, it should too!) Grants a brave - bull phobia resist, + and a stronger grey bull shock resist allowing you to (temporarily) resist tesla + arcs from reactive armor and the SM's tesla coils. Gives a pleasant thought + to whoever drank it, because this thing is a pain to make. Made from 5 parts + admiralty, 5 parts telepole, and 3 parts brave bull. Highly potent. + - qol: Unsure if this counts as QOL or balance, but the fact sol dry is in 3 different + cocktails but the bartender has to buy 30u cans of it made me feel it deserved + being added to the soda dispenser. + - image: 'Added graphics for the above drinks, shown below, from left to right: + Pod tesla, Voltaic Yellow wine, Telepole, Voltaic Wine (bottle) + + image' + LemonInTheDark: + - bugfix: Mobs will fly around space... less + MTandi: + - image: New air alarm sprite + - bugfix: Air alarm properly updates status when powered - qol: Objects have a variable to adjust them visually when they're wrenched or spawned on a table - refactor: Removed redundant code that had similar purpose, moved `obj` wrenching logic into the `objs.dm` - qol: food/slime processor can be moved on table and adjusts to it when wrenched - - server: All logs are now formatted in json, excluding perf and investigations - - image: New air alarm sprite - - bugfix: Air alarm properly updates status when powered - - rscadd: Elevator music now cuts off instantly when exiting the elevator and is - inaudible from the corridor outside. - - rscadd: Elevator music can be disabled via a preference. - - bugfix: Several elevators which should not have played music now do not. - axietheaxolotl / viro: - - image: new medkit sprites, again. -2023-05-30: + Stalkeros: + - bugfix: Adds or possibly re-adds firearm magazine ejection sounds. + - sound: Rubber duck now quacks. + TheVekter: + - bugfix: Fixed virus food being unsynthesizable by making it a hot reaction instead. + Now requires 600K to synthesize. + TiviPlus: + - bugfix: fixed TTS volume changes not working + YehnBeep: + - bugfix: Part of the North Star library's private study will no longer register + as part of the chapel on the crew monitor and similar. + funman816: + - spellcheck: fixed a typo in custom item description in northstar + mc-oofert: + - bugfix: soap suicide +2023-05-29: + FeudeyTF: + - code_imp: Updated the UI of the console for viewing message logs and console for + view server communications Guillaume Prata: - rscadd: Air alarms will now talk about their atmospheric problems (low/high pressure/temperature) so players can understand what is the room's issue easier. - Jolly: - - bugfix: '[MetaStation] - One of the chem heaters in the pharmacy is no longer - nudged and awkwardly four pixels to the right.' - - bugfix: '[TramStation] - The chem heater in the Xenobiology lab was replaced with - the proper one that every other station uses.' - - image: The chem heater sprite was nudged a SINGLE pixel to the right. This should, - hopefully, make them appear more centered. - - code_imp: The code for posters internally has been tweaked slightly. If you see - posters floating in hallways, please report them ASAP!! + HWSensum: + - rscadd: added a mail counterfeit device that can make custom (and also armed) + mails. Traitors have those devices in their uplinks. + - rscadd: added new kit for QM and Cargo Technicians that have multiple mail counterfeit + devices for neat price. + - bugfix: fixed envelopes that were giving only their first item, even tho they + had two items insede. + - image: added new icon for mail counterfeit device. + JohnFulpWillard: + - balance: Newly created areas in Icemoon and Space are no longer valid Cult areas + for Runes and such. + LT3: + - qol: Being connected to an IV now has a visual indicator + MTandi: + - qol: dead potted plant can be revived with a seed + - qol: Solar control console now shows power generation history + Melbert: + - qol: Gun Flipping is now done by right clicking the gun when it's in your active + hand ("use secondary"), meaning you should be less likely to accidentally spin + your gun instead of ejecting rounds / racking / etc. + - qol: You can gun flip all guns, instead of just ballistics. This includes stuff + like wands. + Sealed101: + - bugfix: exorcised a ghost of the gang gamemode from graffiti + SethLafuente: + - rscadd: Added 3 new spider types + - rscadd: Added more spider abilities + - balance: Rebalanced spiders + - bugfix: Fixes spiderlings having density Seven: - bugfix: Fixes epipens, pillbottles, and test tubes missing texture when put into suit storage @@ -1177,3 +1762,92 @@ SomeRandomOwl: - sound: reduced the file size as well as shortened the length for the suppressed Mp5 firing sound + SyncIt21: + - bugfix: stabilized metal slime extract properly increments stacks so that it's + appearance & weight are updated correctly & is picked up by material sniffers. + axietheaxolotl / viro: + - image: new medkit sprites, again. + mikederkan: + - rscadd: Made disposals outlets launch with more range depending on the setting + used + - rscadd: Made disposals outlets emag effect irreversible without reconstruction +2023-05-30: + Cheshify: + - rscadd: The North Star's medbay has been fully renovated. + - bugfix: The CMO's office ceiling is now properly protected on the North Star. + MTandi, Krysonism: + - rscadd: Added Spess Knife with many tool behaviours + SyncIt21: + - bugfix: fix "none" gas names in gas filter + - bugfix: precise insertion of sheets into material container (e.g. drone dispenser) + works again + - bugfix: recycler properly recycles all contents inside a storage medium like a + backpack & even inert bag of holding + - bugfix: gaining extra metal after recycling ammo boxes + - qol: recycler consumes only half the power when recycling item's that has no material + - qol: you can fill up your bag with iron, glass, whatever material and attack the + autolathe/ore silo with it to transfer all it's contents into it + - refactor: '`/datum/component/material_container/insert_item()` now splits stack, + deletes the inserted item & calls the + + `after_insert` callback' + - refactor: '`/datum/component/material_container/user_insert()` now extracts material + from all the contents of an atom reccursively' + TheVekter: + - rscadd: As a result of a recent safety lawsuit, Nanotrasen has mandated the return + of anesthetic canisters and masks to robotics research on all stations that + are not currently equipped with them. + - balance: Syndicate corpses dropped from killing a Legion no longer come with a + MODSuit. +2023-05-31: + Epoc: + - bugfix: Speaking in sign language no longer reveals your identity + FlufflesTheDog: + - bugfix: Anomalies shouldn't spawn with frequencies that can't be selected on signalers + anymore + Ghommie: + - bugfix: basic mobs & co no longer indiscriminately perform close-range actions + in the presence of obstacles such as directional windows between them and their + target. + - bugfix: Doggos should look at you with longing eyes once again if you dare pick + up an edible they are trying to eat. + Guillaume Prata: + - bugfix: Air Alarms will properly shut up when atmos is fixed. + Helg2: + - bugfix: Syndicate 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. + JohnFulpWillard: + - balance: Golems' 55% species innate armor has been lowered to 10% + Kubisopplay: + - qol: Admins can make a portal not spark when teleporting + Licks-the-Crystal: + - bugfix: Stops grilles from electrocuting or tesla-ing when there's a floor between + the grille and the cable. + MTandi: + - image: Resprited many condiment containers + - image: Added a sprite for cooking oil / corn oil container + - image: Replaced old condiment bottles with the newer bottles in Condi Master + Pickle-Coding: + - balance: Engineering, janitor and medical holosign projector projection time reduced + to 1 second. + - balance: Engineering, janitor, and medical holosign integrity reduced to 1. + - balance: Engineering holosign projector max capacity increased to 12. + - balance: Medical holosign projector max capacity increased to 6. + Time-Green: + - bugfix: Hardcore random pays your score again as non-antag + ZephyrTFA: + - admin: new log viewer, try it out. (View Round Logs) + moocowswag: + - bugfix: You can no longer pulse the wire on an unpowered shield generator to activate + shields + - bugfix: External only setting on modular shield generators now properly uses terrestrial + turfs such as lavawastes. + nikothedude: + - code_imp: Modularized plasmamen plasma breathing species trait code to automatically + apply to all species + - code_imp: Liver shrugging differences/Alcohol tolerance differences now displayed + in the species trait panel + - code_imp: Nobreath and Nogenes now accounted for in species trait code + - rscadd: Podpeople now have species traits + - rscadd: Plasmamen genelessness is now displayed in their species panel diff --git a/html/changelogs/archive/2023-06.yml b/html/changelogs/archive/2023-06.yml index 4f509b3013e2f..a4cb8bc9948c3 100644 --- a/html/changelogs/archive/2023-06.yml +++ b/html/changelogs/archive/2023-06.yml @@ -215,6 +215,20 @@ softcerv: - bugfix: NIFs shouldn't hard delete as much now. 2023-06-07: + FlufflesTheDog: + - bugfix: Radios tuned to things other than common respond properly to turning on + the speaker + - bugfix: Abstract items can no longer be placed in others' hands. + Ghommie: + - bugfix: Being moved around by conveyor belt or tram no longer play footsteps and + wheelchair sounds. + - bugfix: The peanut butter banana sandwich is no longer presented as grilled when + it doesn't require a griddle to make. + - balance: You can now sweep garbage into open trash bins (the crate subtype). + Helg2: + - spellcheck: Plate Gauntlets and Plate Boots now have proper looking names. + - bugfix: Syndicate Holster now works as intended (You can finally put both revolver + and speedloaders in it at the same time). IndieanaJones, Melbert: - balance: Space Dragon can no longer choose its rift locations freely, and instead is given 5 pre-determined locations to pick from instead @@ -258,6 +272,47 @@ in the techfab/protolathe menus. - code_imp: Xenoarch tools/machines/equipment designs now use base types for inheritance purposes, and have less copy-paste involved. + LemonInTheDark: + - rscadd: You can now filter by book id in library consoles + - bugfix: The visitor console now actually has categories to select. Shows how many + people actually use it + - admin: Added a library moderation tool, so you guys can do that again now that + statbus has passed into the byond + - server: Bumped DB version, the library_action table has a few columns that were + improperly typed, this fixes that + MTandi: + - qol: 'Oldstation: Windows are easier to fix as they''re now fulltile and use the + new helpers to appear cracked.' + - qol: 'Oldstation: You don''t need a special card to access APCs, other minor access + tweaks.' + - qol: 'Oldstation: Some walls have been moved and adjusted for better navigation + and look.' + - bugfix: 'Oldstation: Fixed paper text, overlapping objects, xenos being blocked + by flying crates, and some other minor issues.' + Singul0: + - balance: The mothership which abductors came from has worked very hard to train + their field agents how to use batons from their specimen's habitat + SyncIt21: + - bugfix: bluespace poly crystals can be used to complete machine frames either + by hand or by RPED + TheVekter: + - bugfix: Added a name and description for the basic version of the bow. + timothymtorres: + - qol: Add more glasses to the nearsighted pref menu with icons +2023-06-02: + Charley: + - bugfix: fixes birdshot access in various spots. + Ghommie: + - bugfix: Stops shields getting broken by pillows and disablers. + Hatterhat: + - qol: Fulton extraction packs (when used on yourself) now automatically shove themselves + into any back-mounted storage, like MODsuit storage modules. + - balance: 'The source of the demonic portals that endlessly deposits snow legions + onto the Icemoon no longer preserves the bodies nor gear of the damned (read: + demon portal snow legions now only drop skeletons).' + JohnFulpWillard: + - bugfix: Metastation departures now has an APC and Air alarm again. + - bugfix: Metastation and Birdshot's Coroner offices are now called Coroner office. Jolly: - code_imp: The code for posters has been split among three files. If you see something weird, please report it. @@ -298,6 +353,65 @@ - bugfix: The peanut butter banana sandwich is no longer presented as grilled when it doesn't require a griddle to make. - refactor: Giant ants are now more capable of distinguishing friend and foe. + - bugfix: '[MetaStation] - Secured some walls in science that weren''t secured properly + (reinforced).' + MTandi: + - bugfix: fixed dead plant having wrong icon roundstart + Rhials: + - qol: Fugitive hunters now get a deadchat poll and notify deadchat properly. + Singul0: + - bugfix: Nanotrasen engineers has installed delamination counters for all Northstar + class expeditionary vessels to increase the pressure for engineers not to fuck + up + carlarctg: + - spellcheck: Fixes grammar error on syndie sm shard desc + coldud13: + - bugfix: Disposals pipes for the Detective's office & Mining cafeteria now work + on tram. + - bugfix: Replaced an open space with a floor at the courtroom holding area. + larentoun: + - bugfix: Gun overlays (energy ammo counter, flashlights, bayonette, etc) are now + one with gun's icon, which makes said overlays to transform correctly with gun's + transform (ie, throwing) + moocowswag: + - bugfix: Tramstation departures is no longer missing a window + - bugfix: Spatial instability now gets properly energized by energetic chromosomes + - bugfix: external shields no longer generate over walls +2023-06-03: + Ghommie: + - bugfix: Fixes thrown things being unblockable by shields or something. + Profakos: + - image: Made the oxygen medkits different coloured from the general medkit colours, + and tweaked the burn medkits to look a bit less orange + axietheaxolotl / viro: + - image: brand new crate sprites, wowie zowie!! +2023-06-04: + Rhials: + - rscadd: The scrubber clog event is now the ventilation clog event. It uses vents + instead of scrubbers now. It is now the ventilation clog event. + - rscadd: Ventilation clogs now produce a lot of filth in addition to produced mobs, + and make the surrounding area dirty. + - balance: Ventilation clogs may produce more mobs at once, and have a higher limit + on how many can occur per round. + - code_imp: The ventilation clog event is now self-contained, and handles all logic/behavior + in the event itself (rather than on the targeted vent). + TheVekter: + - image: Added a cross to the top of the new medical crate for readability's sake. + san7890: + - refactor: Giant ants are now more capable of distinguishing friend and foe. + - refactor: Chicks are now a bit smarter, be careful not to squish them! +2023-06-05: + Crushtoe: + - bugfix: Fixed tram morgue mapping issues and underpass shutter buttons. + DaydreamIQ: + - qol: Icebox Perma's fridges are no longer locked to access they'll never have + MTandi: + - image: new trash bin sprite + - bugfix: trash bin shows correct indicator when spawns non-empty + Potato-Masher: + - bugfix: Removes the misplaced extra chem dispenser from NorthStar pharmacy. + - bugfix: NorthStar medbay now has lightswitches in some rooms as opposed to none. + TheVekter: - balance: Replaced one of the mini energy guns on the Caravan Ambush space ruin with a survival knife. - balance: Replaced the red-and-black softsuit on the Old Infiltrator space ruin @@ -333,10 +447,85 @@ - rscadd: Podpeople now have species traits - rscadd: Plasmamen genelessness is now displayed in their species panel - image: modified crate sprites + YehnBeep: - 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 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. +2023-06-06: + DATA-xPUNGED: + - qol: Nanotrasen has issued a new wallet model, which lets you put biscuit papers + in them! + Fikou: + - balance: the cake hat wounds more + - bugfix: the cake hat no longer balds you + Guillaume Prata: + - bugfix: Fixes an edge case of an air alarm warning not reseting properly and being + repeated when another atmos issue without a warning message, like Plasma in + the air, triggered the alarm. + JohnFulpWillard, tatax: + - qol: '[Mafia] Players are now sent back to their in-game character''s bodies when + they finish a game.' + - image: '[Mafia] Mafia now has a new sprite for the main action button in-game.' + - bugfix: '[Mafia] Chaplains can now use their ability.' + - bugfix: '[Mafia] The game no longer ends in a Draw if Town or Changelings win.' + - bugfix: '[Mafia] The role list now properly shows roles once.' + JoshAdamPowell: + - admin: allow admins to allow non-clowns to drive clown cars + LT3: + - bugfix: IVs again work with non-living containers + Melbert: + - bugfix: Admin forced latejoins reset correctly after next latejoin + Pickle-Coding: + - bugfix: Fix movable explosive blockers leaving remnants of explosive protection + on turfs after they get destroyed. + Rex9001: + - bugfix: fixes moffic grilled hard cheese burning on the grill instantly + Sealed101: + - bugfix: gibbing colossus possessor crystal possessed animals will no longer stick + the user's body and their stuff into the shadow realm. the animals will properly + drop your corpse when killed or gibbed + Tattle: + - admin: mob tags are now part of the mob tag log again + Wallem: + - qol: Adds a button that lets you recolor air canisters to enable easier organization. + YehnBeep: + - bugfix: The reviver implant will no longer leave its user looping between soft + and hard critical states. + carlarctg: + - 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 + surgery duffelbag. + - rscadd: The normal infiltrator now has a operating computer and a closet of misc. + surgical clothing and anesthesic tank. + kinneb: + - image: modified gift and package crate sprites to match the resprited crate +2023-06-07: + Chadley: + - rscadd: Adds some new quirks!! + - rscadd: Adds the bilingual quirk, which gives a new random language. + - rscadd: Adds the big hand quirk which stops the usage of most guns. + - rscadd: Adds the soft spoken quirk which forces you to whisper. + - rscadd: Adds the clumsy quirk enabling the clumsy trait. + Helg2: + - balance: Bone gel standart amount has been increased to 5. + LT3: + - bugfix: Tram platform tiles now have proper stack types + - refactor: Pride week tile coloring refactored into a generic holiday decal system + - spellcheck: Tile decals are no longer all named 'corner' + OrionTheFox: + - rscadd: The Hawaiian Overshirt is now GAGS, and available to crew in the ClothesMate. + Mahalo a aloha! + Pickle-Coding: + - rscadd: Crafting recipe for atmospherics gas mask. + Sealed101: + - bugfix: fixed cult veil shifter not teleporting the thing/the loser you're pulling + with you + SyncIt21: + - rscadd: Igniter's can be crafted + - rscadd: Spraker's can be printed in the autolathe + - rscadd: ignition controller can be printed in the autolathe - bugfix: light replacer displaying error message after it finished replacing the light - refactor: merged the `can_use()` proc with the `Use()` proc to perform both actions @@ -428,6 +617,26 @@ to lobby while dead. - bugfix: Fixes AIize not working - bugfix: xeno resin floor layer + ZephyrTFA: + - admin: Player Ticket History - view a player's ticket history without the need + to use external tooling. + san7890: + - refactor: Headslugs (the really small slug-like changeling form) are now basic + mobs. They only wander around aimlessly now instead of attacking corpses all + the time, and examining will let you know what type. Should probably still smash + them before they suddenly gain sapience... +2023-06-08: + Archimus12: + - bugfix: fixed admin custom job slot cancel button + - spellcheck: fixed a typo that spelled "jobs" as "jebs" + Diegoflores31: + - image: modified crate sprites + Helg2: + - bugfix: '[Metastation] [Birdshot] Test Site Materials Crates now contain targets + instead of existing near them purposelessly and empty.' + Rhials: + - bugfix: Alexander now properly purges itself when you drop your shield. + Sealed101: - bugfix: fixed mecha plasma generator not accepting fuel - bugfix: fixed mecha ui incorrectly displaying fuel remaining when using an energy module @@ -437,8 +646,73 @@ like fixing other damage does - rscdel: did you know that for 4 years now mecha plasma generators did not, in fact, pollute the environment when in use? removed that bit from its description + - bugfix: fixed Lavaland Labour Camp Shuttle prisoner-side airlocks having unrestricted + access from the side of a wall + Seven: + - bugfix: Crafting recipes will not eat your implanted toolset if the recipe calls + for a tool + Time-Green: + - bugfix: Fixes AIize not working + mc-oofert: + - bugfix: xeno resin floor layer + zeroisthebiggay: + - image: energy katana on belt +2023-06-09: + Ghommie: + - bugfix: pixel offsets from grabbing other mobs now respect the body offset variables. + - refactor: Changed some code so that resized mobs no longer look like they're poking + over the below tile with their legs or not even reaching the bottom edge of + the tile they're on. + MTandi, Borbop: + - bugfix: Dust now has dust icon, instead of dirt icon. Dust on all maps replaced + with dirt + - image: Flat dirt now picks from 4 new sprites + - refactor: Made broken tiling work more like tiling and have corresponding visuals. + Added directional mapping variants. + - bugfix: Cleanables now use FLOOR_CLEAN_LAYER to make sure that trash is visible + above catwalks + Sheits: + - image: Resprites the mulebot + Youtubeboy139: + - rscadd: Added new EMT belt (really just renamed the Paramedic belt path) + - image: Added new EMT belt sprite + - image: Added shiny new belts and detective/syndicate holsters (`onmob` sprites + included) + - image: Removed old, unused red military belt sprite +2023-06-10: + Ghommie: - bugfix: waddling, squeaky shoes and swivel chair sound effects no longer run when moved by conveyor belt. + - bugfix: Fixed a small issue with mob resizing not promptly updating a body offset + variable. + - bugfix: Taking items from your inventory while flying over lava or a chasm will + NOT set them on fire or drop them into chasms ANYMORE + Guillaume Prata: + - bugfix: Laptops now give a slowdown when dragged, patching the easy trick of dragging + a laptop to bypass the slowdown for carrying it on hand. + JohnFulpWillard: + - spellcheck: The Medical vending refill crate's description now properly displays + the Coroner's vendor as being part of its contents. + LemonInTheDark: + - refactor: Pulled apart the last vestiges of names/docs directly linking signals + to components + Rex9001: + - bugfix: fixes the areas of the_faceoff + Rhials: + - qol: Fugitives, Bounty Hunters, and Paradox Clones will now appear in the orbit + menu. + YehnBeep: + - bugfix: Lavaland's cafeteria fridge is no longer access-locked. + - bugfix: The mining vendor's bar pod's machinery no longer has access restrictions + miners can't use. + - bugfix: The bar pod's vending machines no longer believe they are on station. + - qol: The bar pod's bathroom also has less unused space. + larentoun: + - rscadd: Added optional respawn delay (disabled by default), which prevents returning + to lobby while dead. + rageguy505: + - bugfix: O2 crates have blue stripes when opened + san7890: - admin: Shooting a welding fuel tank (big or small) with a projectile will now accurately post to list_bombers with the name of the person who shot the projectile from the gun. If you don't know how to list-bombers, it will also be present @@ -452,6 +726,23 @@ - bugfix: Nanotrasen 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. +2023-06-11: + Ghommie: + - qol: Basketball (the mini-game) player mobs have a chance to be taller than the + usual spaceman. + Licks-The-Crystal: + - qol: Makes transparent kudzu transparent (and won't block sight) + Licks-the-Crystal: + - bugfix: Removes the infinite hypernoblium from the holodeck's Winter Wonderland + setting. + MTandi: + - qol: 'RPD UI: Devices split in two categories, options are aligned to the left' + MrStonedOne: + - server: fix logging infoleak from the lack of continuation markets on new lines. + Rhials: + - code_imp: Spaceman simple mobs have been converted to basic mobs. + - qol: Ventcrawling mobs have a 1 second delay/warning before exiting the ventilation. + Roryl-c: - bugfix: fixed TTS tripping over stuttered text when other speech modifiers are in effect - bugfix: fixed tedious TTS "ess-ess-speech" for lizards and other species with @@ -486,6 +777,35 @@ - rscdel: Vending machines no longer flatten your sprite - rscdel: Vending machines won't RR you via gibbing/destroying your head SkyratBot: + ShizCalev: + - bugfix: The RD's plant will no longer say that it's not very healthy after being + restored with seeds. + - bugfix: Potted plants no longer randomly swap icons after being thrown. + - bugfix: Plants that started the round dead are no longer all the same kind once + revived. + - bugfix: Admins can now varedit plants to be alive / dead! + Singul0: + - spellcheck: the H.E.C.K helmet is now typo-free +2023-06-12: + Dorsisdwarf: + - bugfix: Nanotrasen 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. + FernandoJ8: + - bugfix: copying nodes from a techweb to another no longer reveals hidden nodes + MTandi: + - qol: Chemmaster UI tweaked + - bugfix: Fixed chem master showing wrong data during reagent analysis + - bugfix: Fixed chem master not working with fermented drinks + - image: Chemmaster resprited, now has an indicator for buffer reagents + - refactor: Refactored chemmaster code, it now uses reagent containers instead of + styles + - balance: Chemmaster now uses servos and has printing animation of 0.75 second + duration. Outputs 1 container or up to 2 pills/patches per cycle by default. + Can be upgraded to output up to 4 and 8 with t4 servos. + Pickle-Coding: + - balance: Field generators can parry explosions. + SyncIt21: - bugfix: light replacer accepts glass sheets & light tubes when you attack them with a light replacer - bugfix: only glass shards can fill the light replacer not other shard types @@ -499,6 +819,14 @@ time - refactor: removed redundant` Initialize()` proc from `obj/item/light` - refactor: VV editing var's works properly + carlarctg: + - rscadd: Assistants get a new liver trait, maintenance metabolism. This trait only + lets them process maintenance drugs, grey bull, and pump-up for 20% more time + and gives them a probably-positive 2 minute moodlet when ingesting these. + - 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. +2023-06-13: + ArcaneMusic: - balance: In general, mineral recipe costs for items in larger amounts has been decreased by 2x. - balance: One sheet now contains a total of 100 units of material, down from 2000. @@ -506,199 +834,159 @@ costs of certain recipes. - code_imp: Added a python script to the tools folder, letting you see a mineral breakdown of one/several rounds using silo logs. - axietheaxolotl / viro: - - image: removes dogborg walking animations - - image: brand new arachne sprites! - - code_imp: old arachne renamed to slipper - jjpark-kb: - - rscdel: removed the red sec skirt from labor camp - - rscdel: removed cursed spring functionality - - bugfix: prevents certain organs from dropping on gib - nikothedude: - - spellcheck: Nanotrasen 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 - page + EricZilla: + - image: Someone broke their ankle using the jumpboots in the vendor so we had to + buy new ones + NotDhu: + - bugfix: Maintenance doors/delivery chutes leading into Tramstation's brig have + had their access requirements fixed and now actually require security access + to open. + ZephyrTFA: + - bugfix: AIs can no longer enter a limbo state without a core but not dead. + - rscadd: Nuclear Detonation now drops security level if it missed the station. + - rscadd: Nuclear Detonation now nukes the syndie base if its on the syndie base. + - bugfix: Nuclear Detonation now handles not playing a cinematic correctly. + - refactor: Changed z level iteration for Nuclear Detonation 2023-06-14: - Hatterhat: - - bugfix: Anesthetic machine parts kits probably won't cost an exorbitant amount - of iron after the material balance update. -2023-06-15: ATHATH: - bugfix: The destabilization of your eigenstate can no longer be paused by stripping naked. - Cobby: - - bugfix: Droppers/Beakers will now go to 1u/15u on the FIRST leftclick. - Foxtrot (Funce): - - bugfix: Most tgui interfaces that use job icons should now correctly show alt-jobs - KathrinBailey: - - qol: Voidraptor kitchen re-organised to make all of the service mains out there - shed a tear of happiness. - LT3: - - bugfix: Tram controls no longer randomly go blank on Birdshot - - qol: ID card linking now preloads your bank account number - MTandi, Borbop: - - bugfix: Dust now has dust icon, instead of dirt icon. Dust on all maps replaced - with dirt - - image: Flat dirt now picks from 4 new sprites - - refactor: Made broken tiling work more like tiling and have corresponding visuals. - Added directional mapping variants. - - bugfix: Cleanables now use FLOOR_CLEAN_LAYER to make sure that trash is visible - above catwalks - SkyratBot: - - balance: Bone gel standart amount has been increased to 5. + DATA-xPUNGED: + - bugfix: Beach Bum Basketball Team has water again. + - bugfix: Birdshot's gulag now has an item reclaimer, no more will your items fall + on the ground! + GPeckman: - bugfix: You can no longer duplicate iron by turning sheets into rods and putting the rods back into the protolathe + Mey-Ha-Zah: + - image: Updated Eastern Monk, Nun, Holiday Priest Chaplain Suits. EricZilla helped. + Pumpkinoe: + - bugfix: Made some decals on north star look a little nicer. + SethLafuente: - rscadd: Added two new pirate types Ex-interdyne Pharmacists and The Grey Tide-6 - - spellcheck: corrects a typo in most ethereal drinks. + - spellcheck: makes language more appropiate + Youtubeboy139: + - rscadd: Added security specific gloves + - image: Changed all standard security uniforms pink + carlarctg: - qol: Plastic sheets chemist tip is more in-depth and clear - qol: Added holy explosion chemist tip + carshalash: + - bugfix: Fixes a stuck lightbulb in medbay treatment center. Also fixes an accidental + placement of vents/scrubbers which lead to escaping xenos. + - spellcheck: corrects a typo in most ethereal drinks. +2023-06-15: + Cobby: + - bugfix: Droppers/Beakers will now go to 1u/15u on the FIRST leftclick. + Couls: + - admin: fix combat logs for tabling and disposal shoving + DaydreamIQ: + - qol: The CC pod bay now has proper morgue facilities that don't clip through a + glass window + FernandoJ8: + - spellcheck: adjusted font size from 30px to 15px + FlufflesTheDog: + - bugfix: VERY small amounts of a gas (<0.0001 mol) in pipenets will once again + be fully removed + Hatterhat: + - bugfix: MOD plasma cores' improved recharging from sheets (2000 charge up from + 1500) is back again. + LT3: + - qol: ID card linking now preloads your bank account number + - bugfix: Tram controls no longer randomly go blank on Birdshot + MTandi: + - qol: Chemical burner can be crafted from any open container, not just beakers + Melbert: + - bugfix: Maybe fixes minor bugs in disease cure, revolution, hooded suit code + - code_imp: Adds some runtime safety to Cinematic code + Momo8289: + - rscadd: Updated the Patch of Eden lavaland ruin with a new item + - rscadd: Added the Plasma flower item, which can be used as an upgraded plasma + MOD core + SyncIt21: - refactor: don't send gas name to gas filter UI as the name is already decoded there from it's ID - dawsonkeyes: - - balance: rebalanced marked one attack cooldowns - - balance: dragonslayer semi-reworked to do less direct damage and have a more useful - dodge roll - - bugfix: hitting the marked one no longer spams bubble alerts - vinylspiders: - - qol: in the opfor application ui; doubled the opfor char limit for the backstory, - justification, and description fields. also added tooltips to show the character - limit so it is more obvious that the limit exists in the first place. + - bugfix: microwave's(after it has finished cooking) & other machine's that spit + out contents don't spit out assemblies/signallers attached to it's wires. + - bugfix: signallers can be picked up if you attached them to a machine's wire & + later deconstructed that machine without detaching it first. + ZephyrTFA: + - bugfix: Trees and Coconuts are no longer immune to singularities. + bobbahbrown: + - server: Fix log categories being erroneously excluded from log files. + necromanceranne: + - bugfix: Bows properly update their ammo when stored, dropped and stowed. You cannot + load a bow without holding it in your inactive hand. You have to hold it to + keep the bow loaded. + - qol: You can remove an arrow from the bow with alt+click, much like other ballistic + weapons. + - bugfix: The divine bow can be properly stored in the chaplain armor's suit storage, + much like all other bulky null rods. + - sound: Bows have sounds for drawing, firing and loading. 2023-06-16: - GoldenAlpharex: - - bugfix: Fixes the usage of vv'd windows not setting the id of their polarization - controller when mapped in when they were supposed to. - Gyran: - - balance: rebalanced and standardized the armor values of all security caps to - be the same, even those that previously had no armor at all. - Hatterhat: - - spellcheck: Some erroneous bullet casings were brought in line with the "[caliber] - [ammotype] bullet casing" name format. - Iamgoofball: - - bugfix: You can no longer eat adult organs. - LovliestPlant: - - qol: Records consoles and printed rapsheets now support basic formatting. - - qol: Rapsheets can now be printed out without having crimes on file. + Ghommie: + - rscadd: 'Expanded the Experimental MODsuit Bepis node with three new modules: + Magneto Charger, Recycler and Shooting Assistant.' + - rscadd: Added a Riot Foam Recycler module to the black market, as well a more + innocuous version as maint loot. + JohnFulpWillard: + - bugfix: Lava will no longer burn 6 of the mirrors in pride ruin + - bugfix: Lava will no longer burn plants that spawn in them. + MTandi: + - qol: You can name barrels with a pen now, changing its icon Melbert: - bugfix: Fix hungover people never spawning stuck in closets - - bugfix: Maybe fixes minor bugs in disease cure, revolution, hooded suit code - ORCACommander: - - code_imp: Do to a paperwork error, Dust has been repalced with Dirt. - ShizCalev: - - bugfix: The RD's plant will no longer say that it's not very healthy after being - restored with seeds. - - bugfix: Potted plants no longer randomly swap icons after being thrown. - - bugfix: Plants that started the round dead are no longer all the same kind once - revived. - - bugfix: Admins can now varedit plants to be alive / dead! - SkyratBot: + Tattle: + - image: removed a stray gray pixel from the milk containers + carlarctg: - qol: Heretic runes no longer have every single transparent pixel set to 1 alpha, to make it easier to click on objects. - qol: Clearing heretic runes with mansus grasp takes 0.4 seconds of standing still, to prevent you from accidentally clearing it in combat. - code_imp: Added code for effect remover element to use a windup if set. - - qol: You can name barrels with a pen now, changing its icon + mc-oofert: - bugfix: siliconnect log tab updates correctly - - bugfix: VERY small amounts of a gas (<0.0001 mol) in pipenets will once again - be fully removed - - spellcheck: adjusted font size from 30px to 15px - Tattle: - - image: removed a stray gray pixel from the milk containers - nikothedude: - - bugfix: Updates synthetic species quirk desc to better reflect their ACTUAL characteristics - softcerv: - - spellcheck: fixes the repair NIF surgery step name to be `(multitool)` instead - of `(hemostat)` - tf4: - - refactor: Mold has been refactored! Mold-type structures are now named appropriate - to their type. - - image: Toxic mold is now purple, to better differentiate it from radiation and - disease. - vinylspiders: - - bugfix: moth wings can now be hidden, and fixes a potential issue with not being - able to hide functional or open wings as well. - - bugfix: elevated, lowered, and pool tiles now craft 4x per sheet like the other - tile types, and give back their materials in the proper ratio when melting them - back into iron with the welding tool 2023-06-17: + ChungusGamer666: + - bugfix: You can no longer make extra cloth when looming cotton by spamming do + afters. + - rscadd: Things affected by acid now get cool particles! + EliteCreature: + - spellcheck: changed gas to correct type in description + FernandoJ8: + - bugfix: positronic brains now correctly reject the ghosts of people who have used + the suicide verb + - bugfix: Monkey revolutionaries will not be considered for a promotion into Head + Revolutionaries unless they're the only candidates... again. + - bugfix: shipping manifests labelled as erroneous due to missing contents are now + guaranteed to be missing contents + - spellcheck: shipping manifests now display repeated items on a single line LT3: - bugfix: Sansufentanyl won't roll as a potential extreme allergy for Hereditary Manifold Sickness + MTandi: + - qol: Tubes and Bottles have the main reagent name prefix in Chem/CondiMaster Melbert: - - sound: Welding Gas Masks make the same sound effect as Welding Hard Hats when - they toggle + - bugfix: Fixed e-cutlasses and bananium swords having invisible inhands + - code_imp: Removed boilerplate from transforming component - bugfix: Ghosts can click on active gateways to teleport to the destination set. Doesn't work for secret gateways. - - bugfix: Runtimes from wingless humans using *wing - SkyratBot: - - bugfix: positronic brains now correctly reject the ghosts of people who have used - the suicide verb - - bugfix: The divine archer coat's hood now has armor like it's supposed to - - bugfix: You can no longer make extra cloth when looming cotton by spamming do - afters. -2023-06-18: - GoldenAlpharex, SQNZTB: - - rscadd: Added a donator item for SQNZTB. - LT3: - - bugfix: LOOC no longer displays a typing indicator - Melbert: - - bugfix: Fixed a cheeky way RDS revealed you were an antag before you actually - got antag. Sorry, you know who you are. - - config: RDS now has policy.json support, to allow customization of the roundstart - "anti-grief" message. - SkyratBot: - - rscadd: Updated the Patch of Eden lavaland ruin with a new item - - rscadd: Added the Plasma flower item, which can be used as an upgraded plasma - MOD core - - bugfix: MOD plasma cores' improved recharging from sheets (2000 charge up from - 1500) is back again. - tf-4: - - refactor: Mold-spawned mobs have been refactored. Expect improved AI behaviours. - - bugfix: Oil shamblers will now actually set you on fire rather than just infinitely - stacking fire stacks without igniting them. -2023-06-19: - GoldenAlpharex: - - bugfix: Fixed the density of the hardlight wheelchair donator item. - Hatterhat: - - bugfix: There is no longer a bunch of random floating stuff in the Equipment tab - of the techfab, as they've been moved to appropriate places. - - bugfix: Timeclock frame now shows up in the Frames & Mounts section of the Construction - tab in techfabs. - - qol: Cargo-relevant tools (the conveyor sorters, cargo teleporter, appraisal NIFsoft - disk) have been moved to the Cargo Tools subsection of the Tools tab. - - qol: The scythes (both tiers) now appear in the Botany Tools subsection of the - tools tab. - - qol: Gun permit HUDglasses moved to Misc. Equipment section of Equipment tab. - - spellcheck: Added some punctuation to the NIFsoft removal tools' balloon alerts - and visible messages. - - qol: The Marked One now displays a funny little parry indicator and sound instead - of a big floating "damage blocked!" balloon alert. - - qol: MCRs and associated components have been given their own lathe category. - - bugfix: The superheated MCR emitter thing now actually sets people on fire. - - bugfix: Recoil and spread on MCRs can no longer go into the negatives. This is - why gripped MCRs had spread, by the way. - - code_imp: MCR components now use inheritance where applicable. - Melbert: - - bugfix: Runtime from ejecting beakers from a chem-master - - code_imp: Adds some runtime safety to Cinematic code - - bugfix: Fix hard delete in traitor trap tool objective - - bugfix: Fixed a maint loot spawner located inside a wall in North Star Chemistry - Lab Maintenance - refactor: Refactored Stun Absorptions (Bastard Sword, His Grace) - refactor: Refactored Stun Immunity. Note this means that some mobs which, prior, were immune to all forms of incapacitation are now vulnerable to some. Notably, adult non-queen xenomorphs are now vulnerable to falling unconscious. - - bugfix: Fix Hard Delete from the captain's spare ID code paper - - bugfix: Fixed hard delete with Kinetic Crusher causing the projectile function - to brick - Rhials: - - qol: Basic spider eggs no longer flash the byond window when ready to hatch. - - qol: Toy hot potatoes no longer give a ghost notification. - - qol: Deadchat will be notified in the event of an imminent macrobomb detonation, - HFR meltdown, organ harvesting, - - qol: Deadchat will be notified when a nuclear/doomsday device is activated, as - well as when a blob-infection bursts. + - bugfix: Runtimes from wingless humans using *wing + - bugfix: Fixed a cheeky way RDS revealed you were an antag before you actually + got antag. Sorry, you know who you are. + - config: RDS now has policy.json support, to allow customization of the roundstart + "anti-grief" message. + - bugfix: Runtime from ejecting beakers from a chem-master + - sound: Welding Gas Masks make the same sound effect as Welding Hard Hats when + they toggle + Momo8289: + - bugfix: After destroying unfathomable quantities of excess coins, their value + is back to what it's supposed to be! + - bugfix: The divine archer coat's hood now has armor like it's supposed to Rhials :): - qol: The Russian and Bounty Hunter fugitive hunter shuttles now come with enough oxygen for everyone. @@ -786,6 +1074,39 @@ duration. Outputs 1 container or up to 2 pills/patches per cycle by default. Can be upgraded to output up to 4 and 8 with t4 servos. - bugfix: copying nodes from a techweb to another no longer reveals hidden nodes + SethLafuente: + - bugfix: fixes meatballs not having inhand sprites + SuperDrish: + - rscadd: Minimal Job Age requirments added. Disabled by default. + Youtubeboy139: + - image: Added a new Land Mine sprite + mc-oofert: + - qol: Latejoining crew start with crowbars if arrivals enviromental power is OFF + stonetear: + - bugfix: jetpack signals now pass a user argument. This fixes an error when automatically + stowing a captain jetpack into your modsuit. +2023-06-18: + ChungusGamer666: + - refactor: Species brute and burn damage modifiers are now handled by bodyparts, + instead of being universal. Go ham at the surgical bay. + - bugfix: Glass joes will no longer appear to get knocked out, while already knocked + out. + LemonInTheDark: + - admin: VV for global vars will now load MUCH faster, in exchange lists are now + perma contracted in that particular pane + Pickle-Coding: + - balance: Armour penetration calculation is now the inverse function of armour + stacking. + - bugfix: Fix space dragon fire breath hitting the same target multiple times in + a single stream. + Rhials: + - qol: Basic spider eggs no longer flash the byond window when ready to hatch. + - qol: Toy hot potatoes no longer give a ghost notification. + - qol: Deadchat will be notified in the event of an imminent macrobomb detonation, + HFR meltdown, organ harvesting, + - qol: Deadchat will be notified when a nuclear/doomsday device is activated, as + well as when a blob-infection bursts. + SyncIt21: - bugfix: finishing & closing the turbine core rotor part will now connect itself to the cable beneath it allowing it to share its produced power with everyone. - bugfix: turbine's now give detailed balloon alerts if you have a missing component, @@ -793,68 +1114,62 @@ - bugfix: turbine's will not produce power in vaccume - bugfix: turbine's won't function if any of it's components are damaged or misaligned after linking or during processing - - bugfix: Birdshot now has an (oddly placed) atmosdrobe. - - bugfix: fixes the areas of the_faceoff - - admin: fix combat logs for tabling and disposal shoving - - bugfix: Glass joes will no longer appear to get knocked out, while already knocked - out. - - image: Updated Eastern Monk, Nun, Holiday Priest Chaplain Suits. EricZilla helped. + - bugfix: you need to be in proximity of the airlock painter to eject its cartridge. - bugfix: you don't hit the windoor after it has finished opening/closing. - - bugfix: Made some decals on north star look a little nicer. + YehnBeep: + - rscdel: Positronic brains no longer check for suicide verb use. + - bugfix: Birdshot now has an (oddly placed) atmosdrobe. + ZephyrTFA: + - bugfix: Deconstructing a papercutter will now spit out its internals if present. + - qol: Papercutters now have contextual tips +2023-06-19: + ATH1909: + - bugfix: In addition to the beakers and bottles they could already hold, mediborg + beaker apparatuses can now hold test tubes. + - spellcheck: The descriptions of beaker and drink apparatuses have been updated + to more accurately reflect what they can and can't hold. + ChungusGamer666: + - bugfix: Exotic blood types no longer persist through species change if the new + species does not have an exotic blood type + Melbert: + - bugfix: Fix Hard Delete from the captain's spare ID code paper + - bugfix: Fixed a maint loot spawner located inside a wall in North Star Chemistry + Lab Maintenance + - bugfix: Fix hard delete in traitor trap tool objective + - bugfix: Fixed hard delete with Kinetic Crusher causing the projectile function + to brick + OrionTheFox: + - bugfix: fixed the context tips on papercutters + - bugfix: fixes papercutters not properly updating their icons, removing their stored + papers/blades, and eating papers when one is already stored + Pepsilawn: - bugfix: you cannot use departmental budget cards as withdrawal sources for NT Pay anymore - - bugfix: shipping manifests labelled as erroneous due to missing contents are now - guaranteed to be missing contents - - spellcheck: shipping manifests now display repeated items on a single line - - qol: Chemical burner can be crafted from any open container, not just beakers - - rscadd: Things affected by acid now get cool particles! - bobbahbrown: - - server: Fix log categories being erroneously excluded from log files. - jjpark-kb: - - rscdel: removed harmful skyrat spacevine mutations - - code_imp: consolidated skyrat spacevine content into a single module - softcerv: - - qol: introduces verbs for doing Says and Mes with the soulcatcher NIFSoft. - - qol: entering and leaving soulcatchers now have dedicated action buttons. - - spellcheck: The soulcatcher default room now uses the properly intended default - text. - stonetear: - - bugfix: jetpack signals now pass a user argument. This fixes an error when automatically - stowing a captain jetpack into your modsuit. + Time-Green: + - rscadd: Adds shuttle events! If shuttle escapes weren't exciting before (doubtful), + they definitely are now! I'm joking it's mostly an atmosphere thing. + - admin: 'Adds an admin panel to interact with shuttle events, under the Events + tab: Change Shuttle Events' + - bugfix: Objects spawned in hyperspace will properly catch hyperspace drift 2023-06-20: + ChungusGamer666: + - rscadd: Food now gets stink lines when going bad. Uh oh, stinky. + DaydreamIQ: + - qol: Abductor organ surgery steps shifted around to match other surgeries GoldenAlpharex: - bugfix: Wheelchairs now make noises when they're meant to again, and don't make noises on the tram nor on conveyor belts - Hatterhat: - - qol: Medigun cells have been given their own section in the weaponry tab, under - "Medical Ammuniton" and "Medical Ammunition (Utility)". - - qol: The medigun upgrade kit now tells you to remove cells from your medigun, - so as to prevent accidentally banishing them to the shadow realm. - - spellcheck: Some medigun cell typos have been resolved. Also, some medigun cells - have slightly revised descriptions. - - code_imp: Medigun cell designs now use inheritance, so as to reduce the amount - of copy-pasting in the file. - - code_imp: Also, medigun cell typepaths now use a tier_[number] nomenclature, so - a brute III cell would be under the brute/tier_3 typepath. + MTandi: + - qol: You can make hairless hide from the entire stack of hides at once Melbert: - - bugfix: Fixed e-cutlasses and bananium swords having invisible inhands - - code_imp: Removed boilerplate from transforming component - RegJackson: - - balance: Most sec hats have had their armors standardized with the security helmet. - Now your only punishment for your sins of fashion will be a lack of immunity - to the inevitable pepper spraying from that woman who doesn't want your advances. - SkyratBot: - - rscadd: Food now gets stink lines when going bad. Uh oh, stinky. - - bugfix: fixed the context tips on papercutters - - bugfix: fixes papercutters not properly updating their icons, removing their stored - papers/blades, and eating papers when one is already stored - - qol: Abductor organ surgery steps shifted around to match other surgeries - - bugfix: In addition to the beakers and bottles they could already hold, mediborg - beaker apparatuses can now hold test tubes. - - spellcheck: The descriptions of beaker and drink apparatuses have been updated - to more accurately reflect what they can and can't hold. - SuperDrish: - - rscadd: Minimal Job Age requirments added. Disabled by default. + - qol: Categorizes chef vendor + Mey-Ha-Zah: + - image: 'Updated several Null Rod Graphics. Also updated: the supermatter sword.' + OrionTheFox: + - qol: made Balaclavas layer below glasses and radios + SethLafuente: + - bugfix: Fixes a few Interdyne Pirates map flaws + - bugfix: fixes holymelons not having inhand sprites distributivgesetz: - rscadd: Photocopiers now use actual paper instead of materializing it out of thin air. @@ -895,6 +1210,41 @@ - bugfix: Fixes a few Interdyne Pirates map flaws - bugfix: somehow, somewhere, a ship's engine has been changed. 2023-06-22: +2023-06-21: + Addust: + - bugfix: somehow, somewhere, a ship's engine has been changed. + Couls: + - qol: Welders now have a more consistent fuel usage + JohnFulpWillard: + - bugfix: Maintenance data disks now properly transfer from PC to disk + - bugfix: Disks can no longer be flooded with the same app repeatedly. + LT3: + - spellcheck: Fixed a few typos + Rhials: + - bugfix: The walls adjacent to the Infiltrator docking port will no longer bend + diagonally into walls. + SyncIt21: + - bugfix: Modular machinery computer UI opens again + ZephyrTFA: + - bugfix: Cat Butcherer can no longer remove a tail you don't have. + - bugfix: You can no longer manipulate "None" organs + carlarctg: + - bugfix: Fixed being unable to reimburse syndicate spawners via uplinks. This includes + nukie reinforcements, cyborgs, and holoparasite injectors. + - refactor: Turned TC reimbursement into a bespoke element. + - spellcheck: Tuned demon's blood message when there's no ghosts to pick to be a + little more understandable and sensible. +2023-06-22: + Ghommie: + - bugfix: Fixed the honourbound trauma not reacting to attacks from basic mobs + - bugfix: Fixed the "Declare Evil" spell not working against the medical department. + Guillaume Prata: + - balance: The Atmospheric MODsuit now comes pre equipped with the quick carry module. + Go save some lives! + Helg2: + - bugfix: autolathe, protolathe, mech fabricator and component printers material + capacity are now in 20 times less, as intended. + - bugfix: protolathe material menu now should display material ejecting correctly. Jolly: - qol: The potted plants have been changed slightly behind the scenes. Mappers may enjoy being able to pick a wider selection of plants to put in maps now, because @@ -912,6 +1262,59 @@ - rscadd: Adds a shark plush, obtainable from Cargo for a nominal fee. - rscdel: Removed plush cucumber by popular request. Cucumber has been replaced by the shark plushie in arcade machines. + LemonInTheDark: + - bugfix: Maps loaded post init will no longer randomly enter a failed state. Hopefully. + Melbert: + - bugfix: The colossus's finale attack is now 100x more lethal, because it was firing + 100x fewer projectiles than intended + - bugfix: Fix shooting guns without a magazine loaded making no fire sound effect + - 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) + Peliex: + - bugfix: changed station floor tiles to be worth 25 instead of 50, one quarter + of an iron sheet. + Rhials: + - bugfix: attacking non-carbon mobs with a cuffsnapping object will no longer runtime. + Sealed101: + - sound: explosive implant's beeps get louder as it gets closer to exploding + - bugfix: fixed mecha generators using way too much fuel due to using the old values + of material units per sheet + - bugfix: fixed sechailers/SWAT masks not using the installed air filter + - bugfix: fixed Godwoken Syndrome VoG commands triggering the spam filter + SyncIt21: + - bugfix: ' material container[and hence autolathe] now won''t touch the content''s + of abstract/hologram item''s like the tentacle gun' + - bugfix: material container[and hence autolathe] consuming indestructible items + - bugfix: material container[and hence autolathe] cosuming half the content's of + an object and leaving out the rest if there isn't space producing broken behaviour + in those item's + - qol: material container[and hence autolathe] display's the item name consumed + and it's material worth to let player's fully know the content's of the item + being recycled + - rscadd: air sensor's are craftable + - refactor: air sensor's can now be turned off by hand and can only be deconstructed + by a welding tool + - refactor: removed `Params()` proc + - qol: unwrenched air sensors can be picked up & recycled like regular item's + - rscdel: air sensor are removed from the RPD UI + - qol: air sensor's are no longer restricted by their unique ID's which mean you + can craft as many air sensors as you want. + TheVekter: + - qol: Embedding an object inside a cake or loaf of bread now requires a right-click + instead of a left-click. No more accidentally putting your knife inside it! + - qol: Added context tips for slicing, embedding, and removing embedded items from + cake, bread, and cheese wheels. + carlarctg: + - bugfix: Adds wound armor to ALL jumpsuits that were missing it + cnleth: + - bugfix: Rockets can no longer embed in people and cause blunt wounds instead of + piercing + kawoppi: + - image: added lizard inhand- and onhead sprites + - image: added space lizard inhand- and onhead sprites + - bugfix: changed held weight class of lizards from normal to tiny + necromanceranne: - rscadd: The Vorpal Scythe, a special null rod variant that gains power from beheading people! But it is fickle about when and how you use its power. Replaces the Reaper Scythe. @@ -943,6 +1346,29 @@ - bugfix: Inflatable barrier box can now only contain inflatables, and should be able to hold as many as they spawn with. They also hold a nicer amount of items (7 doors and 14 walls, instead of 8 doors and 16 walls, which looked stupid). +2023-06-23: + Cheshify: + - bugfix: Virology disposals now route directly to space, rather than sending their + nasty tubes to cargo. + - bugfix: A single maintenance spawner was removed from a wall by plumbing. + LemonInTheDark: + - bugfix: Dehardcodes some stuff with tram windows, they'll be easier to map with + now + - refactor: Border objects can now smooth with each other. I'm sure something cool + will come of this + Melbert: + - bugfix: Fix a runtime involving Bilingual Curators + - qol: Bilinguals get a message on spawn reporting which language they've learned, + or a message reporting they have learned no language if they're already fluent + in all possible ones. + TheVekter: + - rscadd: Adds a shark plush, obtainable from Cargo for a nominal fee. + - rscdel: Removed plush cucumber by popular request. Cucumber has been replaced + by the shark plushie in arcade machines. + YehnBeep: + - bugfix: Science department hallways now have unrestricted one-way exits on Delta, + Birdshot, and Icebox, to make these maps consistent with the others. +2023-06-24: Guillaume Prata: - rscadd: 'New Wizard spell branch: Vendormacy! Summon runic vending machines with your Vending Scepter, force push them on your enemies to squish them or blow @@ -952,6 +1378,11 @@ rifle furniture sets. Coincidentally, in-sector black markets (accessible, as always, via appropriate black market uplinks) now report an uptick in availability of the very same parts. Prospective crazed gunmen are advised to bring a screwdriver. + - rscadd: Baseballs can now be crafted with 3 leather. + Helg2: + - qol: pill press' max volume for bottles are 50, as the volume of bottles itself. + Improvedname: + - balance: Weakens summoned stickmen to be 1 or 2 hit LT3: - image: Delam and tram flipsigns have been replaced with information displays - bugfix: Tram hit count is centrally managed instead of independently on each sign, @@ -1102,6 +1533,36 @@ - bugfix: Fixed special chat bubbles for yelling, clown, redtext, greentext - bugfix: Fixed alignment of status display text - code_imp: Status displays now synchronize their message lines when scrolling + - bugfix: The Syndicate Assault Cyborg can autofire their LMG + SyncIt21: + - code_imp: makes sure cargo computer doesn't use `usr` var inside `ui_act()` which + could cause undefined behaviour + Wallem: + - image: Tweaks cardboard sheet sprite + YehnBeep: + - qol: Instrument delivery beacons now fit in pockets. + necromanceranne: + - bugfix: Arm implants properly handle EMPs depending on whether it is robotic or + organic. No longer can you EMP an organic organ! + timothymtorres: + - qol: Add UI preference menus for AI hologram and status displays +2023-06-25: + ATHATH: + - rscadd: Adds a variant of the external organ manipulation surgery for robotic + body parts, similar to the robotic version of the internal organ manipulation + surgery. It uses the same procedure as non-head/torso prosthetic organ manipulation. + - rscadd: In layman's terms, augged people can get frills, antennae, wings, tails, + etc. attached to them now. + - qol: The suitability of crowbars in the "manipulate organs" and "manipulate features" + steps has been boosted from 55% to 100%, but only for the robotic versions of + those steps. Their suitability remains 55% for organic organ manipulation. + ChungusGamer666: + - refactor: Mutant livers can now handle chemicals in special ways. Currently, only + plasmaman, skeleton and golem livers do it. Every other species is the same. + Ghommie: + - bugfix: arrows can now be actually coated with reagents. + - admin: The Debug and Admin MODsuits now take a lot less time to (de)activate. + 2 and 0.5 seconds respectively, compared to the default of 10s. Melbert: - rscadd: 'Wizarditis Improved. Those infected will now randomly cast one of the following (weakened) spells at max stage: Teleport, Disable Tech, Mutate, Knock, @@ -1109,28 +1570,136 @@ Bolt, or Swap' - rscadd: A source of antimagic will prevent Wizarditis's ill effects, but won't cure you. - Nerev4r: - - refactor: Podperson hair is now colorable, properly layered, and able to be emissive. - SkyratBot: - - sound: Adds unique sounds to library barcode scanner - - image: Removes soul from library - - sound: One (1) new space ambience track has been added. Good luck and godspeed. - - bugfix: Brand intelligence can no longer affect off-station vendors in some specific - circumstances. + Pickle-Coding: + - bugfix: Fix atoms not applying proper armour penetration logic. + - bugfix: Fix silenced living armour penetration not using proper armour penetration + logic. + - code_imp: Added macro for calculating armour penetration. + Seven: + - balance: Acid on a turf no longer immediately applies acid to its contents + - bugfix: Acid applied on a tile will no longer damage pipes below that tile + - bugfix: Xeno's corrosive acid no longer instakills mobs + - bugfix: Xenos can now touch acid + - bugfix: toys, stamps, and spacecash no longer has a missing texture when put into + suit storage + - qol: stamps are now allowed suit storage items in the hop, qm, and cargo wintercoats + SyncIt21: - bugfix: glass bottles with reagents can be used for crafting, empty glass bottles will be used as tools(e.g. empty glass bottle as rolling pin) - bugfix: glass bottle with welding fuel can be used for crafting improvised shotgun shells + - bugfix: bubble gum crate actually looks correct + - bugfix: fixes balloon alert runtime when spider webs are destroyed. + Tattle: + - admin: build mode help text is in an examine block + - admin: adv build mode and fill now have item previews + Wallem: + - image: Resprites plumbing machines + Youtubeboy139: + - image: Added new Space Beer sprite + - image: Added new Carp Lite sprite + - image: Added new Ale Bottle sprite + - image: Added new Two-Time Root Beer sprite + carlarctg: + - rscadd: Adds digital clocks, can be found in all the stations' hallways! Most + noticeably in bars or the bridge. They can also be lathed. + kinneb: + - image: Resprited the Limb Grower + norsvenska: + - rscadd: Christmas now has special station prefixes. +2023-06-26: + Funnytoilet: + - qol: Allows you to craft plastitanium shards. + Ghommie: + - bugfix: Fixes the lights from Tinea Luxor being stackable to the point of crashing + the game for others. + IndieanaJones: + - balance: Xenos have been rebalanced, removing their hardstuns on their disarm + and neurotoxin, along with a slew of other changes. Xenos have received buffs + to their more unique abilities in return. + - bugfix: Fixed simplemobs ignoring xenomorph's melee damage values when being attacked + by them. + winterboekje: + - sound: Adds unique sounds to library barcode scanner + - image: Removes soul from library +2023-06-27: + ChungusGamer666: + - refactor: Liking/disliking food is now handled by the tongue organ, not the species. + Also, having a failing tongue means you can't taste food properly! + - rscadd: You can read peoples' tongues now, if you have the entrail reading skillchip. + GPeckman: - bugfix: The lavaproof tracks cyborg upgrade now protects against liquid plasma, the Icebox equivalent of lava. - - bugfix: fixed hostile mobs trying to attack supermatter discharge bolts - - image: the mosin and prime nagants' mob sprites have been updated + LovliestPlant: + - qol: '[Birdshot] Adds layer adapters to gas tank output hookups in atmospherics' + - qol: '[Birdshot] Adds additional navigation verb landmarks' + - bugfix: '[Birdshot] Fixes entrances to some departments from maints not requiring + department access' + - bugfix: '[Birdshot] Converts the guard locker in perma to a normal security officer''s + locker' + - bugfix: '[Birdshot] Adds an exterior outlet vent for the incinerator' + Momo8289: - bugfix: Items that shouldn't have been stacking should no longer stack. - - balance: Syndicate simplemob fire-rate raised to one shot per second. - - bugfix: Symbols display correctly when sending messages via mind link + ReinaCoder: + - image: the mosin and prime nagants' mob sprites have been updated + TheVekter: + - bugfix: Added the missing medical laptop to the morgue on Northstar. axietheaxolotl / viro: - image: resprited surgery tables, and stasis beds -2023-06-30: + cnleth: + - bugfix: Symbols display correctly when sending messages via mind link + the-og-gear: + - sound: One (1) new space ambience track has been added. Good luck and godspeed. +2023-06-28: + ChungusGamer666: + - bugfix: Plasma will now heal plasmamen properly + Ghommie: + - rscadd: You can now revive dead fishes, bees and (mindless) mice with a lazarus + injector. + - balance: Tom, the mouse, no longer counts toward the mice population cap. + Hatterhat: + - balance: The Regal Condor's base spread has been reduced to 0, like damn near + every other gun that exists. + LT3: + - refactor: Refactored maptext (those floating words) + - bugfix: Fixed special chat bubbles for yelling, clown, redtext, greentext + - bugfix: Fixed alignment of status display text + - code_imp: Status displays now synchronize their message lines when scrolling + - bugfix: MetaStation's bridge incident counter and clock no longer overlap + - bugfix: Deltastation's missing incident counter has been found. Does that count + as an incident? + - qol: Tramstation bridge and medbay now have a clock where the tram hit counter + used to be + Melbert: + - bugfix: You can once again "too slow" someone with a high five + Momo8289: + - bugfix: Had to destroy a lot more of em, but the value of iron coins are now back + to normal + SapphicOverload: + - bugfix: fixed hostile mobs trying to attack supermatter discharge bolts + Seven: + - qol: Mops, some cleaning items, and light replacers now use balloon alerts + - rscadd: Surgical caps now actually hide your hair + Time-Green: + - bugfix: hardcore random now gives you a species specific name + Youtubeboy139: + - rscadd: Added new Pirate Boots + - image: Added new Pirate Bandana sprites + - image: Added new Pirate Hat sprites + - image: Added new Pirate Uniform sprites + - image: Added new Sailor Uniform sprites + - image: Added new Pirate Coat sprites + - image: Added new Pirate EVA gear sprites + - image: Added new Cutlass sprites + - image: Added new Energy Cutlass sprites + - image: Added new `hgpirate` suit and hat sprites + vinylspiders: + - bugfix: sliding puzzles can no longer have their icons erased by the hand labeler +2023-06-29: + ChungusGamer666: + - bugfix: Clarke ore box now has a less confusing dump contents button. + Funnytoilet: + - bugfix: Plasmamen can now get HMS Iamgoofball, Nadare, ddPn08, Mangio621, the rest of the RVC dev team: - rscadd: Improves the audio quality and speaker fidelity by implementing Retrieval Voice Conversion as an intermediary layer, utilizing the repository at https://github.com/ddPn08/rvc-webui. @@ -1144,3 +1713,76 @@ - rscadd: Reworks the silicon voice effect to be a special effect done on the TTS server level instead of via normal filters. - rscadd: Reworks the vending machine effect to use the new robotic voicebox effect. + Jolly: + - spellcheck: Changeling hallucination sting will now tell you it costs 10 chemicals. + It always did, but now its there. Cheers? + LemonInTheDark: + - balance: Tcomms now works across connected (vertically) zlevels. No more hunting + in maint for the relay. + Melbert: + - qol: Scanning apps (Lifeline app) start with a scan + - bugfix: Fixes a potential exploit in radar apps + Rhials: + - rscadd: The abductor equipment vendor now offers a hacking/medical hypertool, + at a price of 2 research points. + - rscadd: The abductor equipment vendor now sells decorative abductor posters, at + a price of 1 research point. + - rscadd: The abductor equipment vendor now sells a cow, at the price of 1 research + point. + - bugfix: Fixes a runtime when trying to probe non-human mobs. + - image: Some abductorized versions of existing wall posters and an alien hypertool. + - code_imp: The abductor shop listings now use lists of items, rather than single + build paths. + - code_imp: The abductor_gear.dm file has been split up into a few different files. + - code_imp: Posters can now be hung on indestructible walls. + SyncIt21: + - bugfix: cable layers 1 & 3 can now be used by machine's like emitters, smes, tesla + coil & turbine. + - bugfix: terminals(smes & apc) can operate on different cable layers by installing + them with right click + chemistrymain2: + - balance: Syndicate simplemob fire-rate raised to one shot per second. + tf-4: + - bugfix: Brand intelligence can no longer affect off-station vendors in some specific + circumstances. +2023-06-30: + Chadley: + - bugfix: fixes the EHMS injector's do_after() + - code_imp: Improves the code for the disease scan proc (thank you fikou) + ChungusGamer666: + - refactor: Head rendering code has been updated significantly... Again. Please + report any issues with hair, facial hair, lipstick and such. + - refactor: Species speed is now stored in bodyparts. Leg transplants from slower + species will make you slower. + - bugfix: Healthy tongues will no longer randomly start slurring + - refactor: A significant species refactor happened, report any issues on the github. + DATA-xPUNGED: + - rscadd: Added butter slices, which you can make by cutting butter into 3. + - qol: Recipes that once required butter now only require a slice of it. With the + exception of the butter on a stick, of course. + - balance: Butter now requires 25 milk to mix and has 3 times as much nutriment. + - image: Resprited butter and butter on a stick using bluespace technology, managing + to compress more butter into a smaller space + Ghommie: + - bugfix: Fixed snatcherprods potentially giving held objects a one-way ticket to + nullspace if thrown at someone by something that's not a mob. + LemonInTheDark: + - balance: Duffelbags will now only make you slow while they are unzipped. As a + tradeoff, you now need to stand still and zip/unzip them to access their contents/not + move real slow. + Melbert: + - bugfix: Fix Debug verb "Spawn full crew" + - bugfix: Fix everyone being vampires + Sealed101: + - bugfix: fixed RPD switching layers on mousescroll when not in active hand + - qol: installing an RPD wrench upgrade & reprogramming a pipe via RMB produces + a balloon alert + Seven: + - bugfix: Fixes changelings not being put into their headslug when using last resort + - bugfix: Fixes changeling headslugs not putting their eggs into dead bodies + Singul0: + - bugfix: Names for Interdyne pirates are now less bizzare + Youtubeboy139: + - image: Added new Police Whistle sprites + oranges: + - balance: Ashlizards can no longer use the shuttle console to go on station diff --git a/html/changelogs/archive/2023-07.yml b/html/changelogs/archive/2023-07.yml index fedc5f886ad7b..615cd75b1efdb 100644 --- a/html/changelogs/archive/2023-07.yml +++ b/html/changelogs/archive/2023-07.yml @@ -62,6 +62,16 @@ - qol: people now lie down when buckled to surgery tables, and you no longer need cuffs to buckle someone to a surgery table - bugfix: Names for Interdyne pirates are now less bizzare + Cheshify, Kinnebian, and RedSentry27: + - rscadd: Maintenance engineers have sent out blueprints across the sector for a + new laser musket. + - admin: A new energy-gun toting ERT is available to send to the crew. + Jacquerel: + - bugfix: Actions granted by equipped or held items now actually appear again + LT3: + - qol: Context tooltip size increased + - bugfix: Fixed remnants of old maptext code on various things + MTandi: - rscadd: Food and pills have a 10% chance to infect with one of three new diseases on consumption when left for more than 5 seconds on the floor. You can wash it to avoid disease. ChemMaster and Pill Press are added to the list of elevated @@ -107,194 +117,229 @@ Tattle: - admin: build mode help text is in an examine block - admin: adv build mode and fill now have item previews + SyncIt21: + - bugfix: jetpack modules work on mod suits again + - bugfix: jetpack cyber implants also work + - refactor: removed `get_mover` callback, user is retrieved during activation + - refactor: timestop module on `on_module_triggered()` accepts user as 2nd param Vekter: - balance: Increased armor penetration on xenos' neurotoxin spit. Well-protected crew members should still take more than a few hits to down but shouldn't be immune to it. - - bugfix: Fixed the ORM not granting mining points if you added ore by hand instead - of dumping it on the floor. - larentoun: - - refactor: Changed some .proc to PROC_REF() - oranges: - - balance: Ashlizards can no longer use the shuttle console to go on station - softcerv: - - qol: The NIFSoft Catalog PDA app now automatically downloads itself roundstart - if you have a NIF installed. - vinylspiders: - - bugfix: opaque public airlocks will now have proper fill sprites instead of empty - glass frames - - image: new fill sprites for non-glass public airlock sprites -2023-07-04: - MMMiracles: - - bugfix: Tramstation lower Science is now less prone to cave-ins from their surrounding - maintenance corridors. - Melbert: - - bugfix: Fixes a runtime from people with aphasia trauma getting deleted - Seven: - - bugfix: toys, stamps, and spacecash no longer has a missing texture when put into - suit storage - - qol: stamps are now allowed suit storage items in the hop, qm, and cargo wintercoats - SkyratBot: - - rscadd: Budget cuts can sometimes effect the station's supply of Emergency Bluespace - Shelters. - - qol: The health analyzer will now be more clear about how to treat burn wounds, - especially seriously infected ones. - - bugfix: Fixes oversight with the voice disable config not working right for situations - in which a player re-enters their mob. - - bugfix: Lesser Form monkeys no longer maintain the name of the form you had prior - to transformation. + necromanceranne: + - rscadd: Coroners are now Morbid! + - rscadd: Coroners come with a series of special tools that are especially good + at performing certain surgeries if used by a Morbid individual (which the coroner + happens to be). They are found in the coroner's medkit. + - rscadd: The sorts of surgeries they enjoy are; dissections, autospies, revival + surgery, plastic surgery, organ/feature manipulations, amputations. Also eyesnatching. + - rscadd: Coroners therefore hate; tending the wounds of the living, defibrillation + and CPR. Why waste so much effort on breathers if you can't even carve them + up a bit first? + - rscadd: Coroners love pickles and pickle juice. + - rscadd: The coroner can finally put their autopsy scanner into their special medkit. + Not the compact one, though. + - rscadd: The elephant graveyard is safer to plunder for the morbid individual. + The rewards from the graveyard are now also slightly more lucrative...if you + don't care about being cursed, that is. + - balance: Roboticists get secure morgue access during skeleton shifts + - bugfix: arrows can now be actually coated with reagents. + - bugfix: jetpack modules work on mod suits again + - bugfix: jetpack cyber implants also work + - refactor: removed `get_mover` callback, user is retrieved during activation + - refactor: timestop module on `on_module_triggered()` accepts user as 2nd param + - spellcheck: Improves gas monitor reaction information RP. + - bugfix: You can once again directly place patients on operating tables + - bugfix: Creampies no longer float above the heads of monkeys + - rscadd: You can now put sandstone bricks in pillows to... make them deadlier? + timothymtorres: + - qol: Add hotkeys to APCs for AIs and borgs. Toggle environmental (ctrl + shift), + toggle lighting (shift), toggle equipment (alt), and toggle breaker (ctrl). + - qol: Remove APC UI popup when using RMB to toggle the lock. +2023-07-02: + ChungusGamer666: + - bugfix: Hair and facial hair gradients work again now + - bugfix: Facial hair colors apply properly again + - bugfix: Admin spawned characters will get hair color preferences applied properly + Ghommie: + - bugfix: Fixed the office chair being silent. My bad. + JohnFulpWillard: + - balance: Jousting now works on anything you're buckled to, not just Cyborgs. + - balance: Brooms, Pitchforks, the Captain's Sabre, and Energy swords can now be + used for jousting. + - balance: Spears need to travel a longer distance to joust now. + - balance: Jousting's knockdown and damage now only gets stronger after you've traveled + the minimum tiles needed to joust. + - balance: Silicon now only know Common, Uncommon and Robotic languages. + JupiterJaeden: + - qol: people now lie down when buckled to surgery tables, and you no longer need + cuffs to buckle someone to a surgery table + LemonInTheDark: + - bugfix: Fixes some fuck with duffelbags, them not holding enough + issues with + spawning gear in them (job shit and all) - rscdel: Removed language encryption keys from cargo, s bad for species talking among each other, a thing we want them to do + LovliestPlant: + - rscadd: Stethoscopes may be used on the chest, groin, or extremities to assess + organ damage, blood level, and/or suffocation damage depending on the targeted + area. + - rscadd: Shining flashlights into the mouth or eyes of other players will additionally + assess brain health, suffocation damage, and/or blood level depending on the + targeted area. + - balance: Halves the duration of the flash effect from shining lights into players' + eyes (2s -> 1s). Use combat mode to get the full duration. + Melbert: + - qol: Sivlerscale Tongue action is now a cooldown action, making it significantly + easier to use + - balance: Buffed the silverscale statue every so slightly, it now has innate armor + and can reflect lasers shot at it. But it also requires you not by lying down + to activate. + - bugfix: Fix organ damage being uncapped + Pickle-Coding: + - bugfix: Fix hypernoblium formation gas reaction rate sanity clamping not accounting + for the reduction factor. + - bugfix: Fix N2O formation gas reaction rate clamping clamping for incorrect consumption + rates. + - bugfix: Fix BZ formation reaction rate sanity clamping not accounting for N2O + decomposition factor. + - spellcheck: Improves gas monitor reaction information RP. + Sealed101: + - bugfix: fixed shotguns not clearing their "mag" correctly + - bugfix: fixed basalt turfs remaining visually dug up when refilled by an ash storm + - bugfix: fixed ash storm ending sounds looping after the storm is over + - bugfix: mechs are now snow storm immune + - bugfix: jaunt spells protect from weather when jaunting + Seven: + - bugfix: Cult communion and assert leadership can be used while your hands are + blocked or you are immobile + Vekter: + - balance: Adds a build time to window types which didn't have ones before. + - bugfix: Fixed the ORM not granting mining points if you added ore by hand instead + of dumping it on the floor. + carshalash: + - balance: We are now using space Monsanto brand rice/wheat seeds. Nutriment of + both grains has been changed to 12% from 4% +2023-07-03: + Cheshify: + - bugfix: Frontier Militia only have one general now, and have headsets. + - balance: Frontier Militia no longer have energy pistols. + Helg2: - bugfix: Crayon suicide now properly colors you. - bugfix: You can't put spraycans in crayon box via opening it and putting directly in slot as intended, but balloon alerts for mime's and rainbow crayons are gone. - qol: '"empty" balloon alert no longer appears on crayons.' - qol: You can make crayon burgers now. - - bugfix: Horrid organics will no longer be made happy when mechanical chaplains - fail to heal them with a bible. - qol: Box with throwing weapons now can hold the items it spawns with. Incredible! - admin: Boxex of materials, debugtools and stabilized extracts now 99 of total storage because they are meant to be debug. - - bugfix: Tips now mention telekenesis dusting you when used on the SM, not telepathy. - - bugfix: urinal cakes wont decay anymore - - bugfix: Fix hypernoblium formation gas reaction rate sanity clamping not accounting - for the reduction factor. - - bugfix: Fix N2O formation gas reaction rate clamping clamping for incorrect consumption - rates. - - bugfix: Fix BZ formation reaction rate sanity clamping not accounting for N2O - decomposition factor. - - bugfix: fixed shotguns not clearing their "mag" correctly - - balance: Jousting now works on anything you're buckled to, not just Cyborgs. - - balance: Brooms, Pitchforks, the Captain's Sabre, and Energy swords can now be - used for jousting. - - balance: Spears need to travel a longer distance to joust now. - - balance: Jousting's knockdown and damage now only gets stronger after you've traveled - the minimum tiles needed to joust. + Jacquerel: - bugfix: Placing a mouse inside your chef hat will once more allow it to pilot you around. - rscadd: A player-controlled mouse inside your chef hat can compel you to perform complex actions, such as flipping and spinning. You will obey because the mouse knows better than you do. + - bugfix: You can now correctly Tend Wounds on most non-human animals. + - rscadd: You can now Remove Implants from non-human animals, just in case Ian swallowed + a macrobomb. + - bugfix: Tom will now always be a brown rat, instead of a random colour, as intended. + - rscadd: Budget cuts can sometimes effect the station's supply of Emergency Bluespace + Shelters. + Melbert: + - bugfix: Fixes a runtime from people with aphasia trauma getting deleted + - rscadd: Added a new 0 cost passive changeling ability, the Defibrillator Grasp. + - rscadd: DNA sing is now no longer innate, but 0 cost, allowing changelings to + not take it if they don't plan on using it. + - rscadd: Adds the Roach infusion to the DNA infuser. Do you want to survive a nuclear + apocalypse? Visit genetics today. + - rscadd: Adds a way to kill Roaches without splatting them. Visit botany for a + spray bottle of pestkiller. + - qol: Infuser book is more book-like + - bugfix: DNA infuser correctly gives on-success feedback messages + Time-Green: + - bugfix: urinal cakes wont decay anymore + Vekter: + - balance: Increased blob tiles' resistance to lasers to compensate for the recent + buff to laser damage. + - spellcheck: Fixed a typo on the Interdyne shuttle. +2023-07-04: + FlufflesTheDog: + - bugfix: Morbid (coroner's) tools now properly receive their speed boost in appropriate + conditions + Funnytoilet: + - qol: Matches command envirosuit helms' armor value with their hat counterparts. + GPeckman: + - qol: The health analyzer will now be more clear about how to treat burn wounds, + especially seriously infected ones. + Iamgoofball: + - bugfix: Fixes oversight with the voice disable config not working right for situations + in which a player re-enters their mob. + Jacquerel: + - bugfix: Horrid organics will no longer be made happy when mechanical chaplains + fail to heal them with a bible. + - bugfix: Lesser Form monkeys no longer maintain the name of the form you had prior + to transformation. + MMMiracles: + - bugfix: Tramstation lower Science is now less prone to cave-ins from their surrounding + maintenance corridors. + SyncIt21: + - code_imp: mat per unit values of materials now scale with material defines + Teleported-Bread: + - bugfix: Tips now mention telekenesis dusting you when used on the SM, not telepathy. Vekter: - rscdel: Plasma objects (statues, toilets, etc.) no longer explode when ignited. They just release plasma like everything else plasma. (This doesn't impact injecting plasma into cells or dipping cigars in plasma, those still explode.) - - balance: Increased blob tiles' resistance to lasers to compensate for the recent - buff to laser damage. - bugfix: Removed nebula vomiting from the normal symptom pool. It should no longer appear on regular viruses. - - spellcheck: Fixed a typo on the Interdyne shuttle. itseasytosee: - spellcheck: You should see a lot less "you can not move while bucked too X" messages where they don't make sense. - admin: Added a petrify smite. Try it out on your least favorite player! -2023-07-05: - LT3: - - bugfix: MetaStation's bridge incident counter and clock no longer overlap - - bugfix: Deltastation's missing incident counter has been found. Does that count - as an incident? - - qol: Tramstation bridge and medbay now have a clock where the tram hit counter - used to be - Melbert: - - qol: Prettied up the morgue of Deltastation - Seven: - - rscadd: Surgical caps now actually hide your hair - SkyratBot: - - image: Added new Police Whistle sprites - - bugfix: Tom will now always be a brown rat, instead of a random colour, as intended. - - rscadd: Prisoners can now be jaywalkers - - qol: reordered a crime so it appears on the choice list alphabetically. - - balance: Tcomms now works across connected (vertically) zlevels. No more hunting - in maint for the relay. + mc-oofert: - rscadd: You can use cable on TTVs to make them wearable on the back - - bugfix: Had to destroy a lot more of em, but the value of iron coins are now back - to normal - - bugfix: hardcore random now gives you a species specific name - - bugfix: Clarke ore box now has a less confusing dump contents button. +2023-07-05: + Archimus12: + - rscadd: Adds coloured large scarfs and winter coats to ClothesMate and black shoes + to ChefDrobe + - rscadd: Adds latex gloves to SciDrobe, ChemDrobe and GeneDrobe and nitrile gloves + to MediDrobe + - rscadd: Adds job headsets to GeneDrobe and RoboDrobe, ViroDrobe and ChemDrobe + - rscadd: Adds black wizard robes and black wizard hat to MagiVend + - rscadd: Adds grey backpack, grey satchel, leather satchel and grey duffel bag + to CargoDrobe + - rscadd: Organises Drobes + ChungusGamer666: + - bugfix: Bodyparts that should slow you down, will slow you down. + Ghommie: + - sound: Walking on conveyors, catwalks and tables no longer plays the footstep + sound of the turf. They have theirs. + Jacquerel: + - balance: Traitorous Coroners can now purchase the Evil MMI and Brainwashing Surgery + Chip. + - balance: Traitorous Chief Engineers can now purchase the Deployable Sentry. + Jolly: + - bugfix: '[MetaStation] There is no longer a random nondescript "item" outside + Xenobiology. No, it was NOT a Xenomorph.' + MTandi: - bugfix: Plant bags now properly harvest items when you click on hydrotray with it, and don't pick up anything except the harvest - bugfix: Carpellosis gnashing checks owner's teeth availability instead of the target's teeth - bugfix: Patches don't have a message saying that they're dirty - - rscadd: Added new Pirate Boots - - image: Added new Pirate Bandana sprites - - image: Added new Pirate Hat sprites - - image: Added new Pirate Uniform sprites - - image: Added new Sailor Uniform sprites - - image: Added new Pirate Coat sprites - - image: Added new Pirate EVA gear sprites - - image: Added new Cutlass sprites - - image: Added new Energy Cutlass sprites - - image: Added new `hgpirate` suit and hat sprites - Stalkeros: - - rscadd: Borg languages are back. - sergeirocks100: - - bugfix: Lizardpeople can now eat emperor rolls from the Tiziran Imported Delicacies - vendors without getting sick. - - spellcheck: Every instance where Tizira was misspelled as "Tiziria" in the Tiziran - Imported Delicacies vendor, as well as in the food inside, has been corrected. - vinylspiders: - - bugfix: visor mods now retract as well when retracting the modsuit helmet. - - bugfix: hemophages will no longer become stuck with permanent negative movespeed - modifiers when they undergo a species change while in the dormant state - - bugfix: any damage dealt by Ashwalkers to non-megafauna mobs will now have a chance - to drop crusher loot trophies. Ashwalker damage is equally likely to drop loot - as crusher damage is. An Ashwalker who is using a kinetic crusher will have - a bonus chance at getting a trophy. -2023-07-06: - Jolly: - - bugfix: '[MetaStation] There is no longer a random nondescript "item" outside - Xenobiology. No, it was NOT a Xenomorph.' - Lunar248: - - qol: Remapped the barbershop on tramstation to make it a bit more RP-friendly, - and visually appealing. - SkyratBot: - - rscadd: People who cannot read can interact with the tram console to send it to - a random station. - - bugfix: Replaced the security PDA painter in the CMO's office on Birdshot with - a medical PDA painter. - softcerv: - - rscadd: Adds in the size collar, an item obtainable from the dorm vendor that - allows the user to change their size while inside of dorm rooms. - vinylspiders: - - bugfix: digitigrade variant of the Assistant's Formal Winter Coat will no longer - show up as broken checkerboard sprites when worn. -2023-07-07: - Gyran: - - bugfix: The Blueshield can now select prescription and other securityHUDs from - the loadout menu. - Iamgoofball: - - bugfix: Buffs spacemen refractory period to reduce audio spam problems for players - walking past dorms - SkyratBot: - - balance: Traitorous Coroners can now purchase the Evil MMI and Brainwashing Surgery - Chip. - - balance: Traitorous Chief Engineers can now purchase the Deployable Sentry. - - bugfix: Fixes the lights from Tinea Luxor being stackable to the point of crashing - the game for others. - - qol: Request Internet Sound now has the option to credit the person who requested - the Sound. Defaults to anonymous. - - qol: Allows you to craft plastitanium shards. - - balance: Improved spacepol jumpsuit wound armor from 5 to 10 - - bugfix: A nuclear operative who is a slime will now correctly drop the disk upon - death. - vinylspiders: - - bugfix: the colourable winter coat will no longer display as a broken checkerboard - icon when the hood is down -2023-07-08: - LT3: - - image: More maptext and font tweaks - - 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 - - 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 - with the appropriate versions (for things like snouted masks, digitigrade legs, - taur shoes) without having to remove and re-equip their gear -2023-07-09: - SkyratBot: + Melbert: + - bugfix: Fixes some species / mobs keeping an understanding of galcom despite not + being intended to. + - qol: Prettied up the morgue of Deltastation + Momo8289: + - qol: Crates that come in the cargo shuttle now have the order ID in their name + - qol: Requisition forms are now blue, and named with the timestamp they were created + on + Time-Green: + - bugfix: abductors can get points again + YehnBeep: + - rscadd: Prisoners can now be jaywalkers + - qol: reordered a crime so it appears on the choice list alphabetically. + carlarctg: - balance: Reduced the complexity cost of a lot of MODules. - balance: Pathfinder 2 -> 1 - balance: Tether 3 -> 2 @@ -311,126 +356,51 @@ - balance: The Prototype MODsuit's active slowdown has been decreased from 1.5 (!) to 1. - spellcheck: Fixed a type on the energy net module. -2023-07-10: - Fikou: - - bugfix: service borg apparatus now works on stoves and griddles and ovens - - qol: borgs can now activate stoves and griddles - - rscadd: rnd can research a cookbook for service borgs - Imaginos: - - image: A new sprite for oeprating tables - LT3: - - bugfix: That new maptext mentioned below actually works - - image: A courier synth ready to deliver hugs and beeps straight to the heart! - Melbert: - - rscadd: The Atrocinator will now flip you even more. - SkyratBot: - - rscadd: Coroners are now Morbid! - - rscadd: Coroners come with a series of special tools that are especially good - at performing certain surgeries if used by a Morbid individual (which the coroner - happens to be). They are found in the coroner's medkit. - - rscadd: The sorts of surgeries they enjoy are; dissections, autospies, revival - surgery, plastic surgery, organ/feature manipulations, amputations. Also eyesnatching. - - rscadd: Coroners therefore hate; tending the wounds of the living, defibrillation - and CPR. Why waste so much effort on breathers if you can't even carve them - up a bit first? - - rscadd: Coroners love pickles and pickle juice. - - rscadd: The coroner can finally put their autopsy scanner into their special medkit. - Not the compact one, though. - - rscadd: The elephant graveyard is safer to plunder for the morbid individual. - The rewards from the graveyard are now also slightly more lucrative...if you - don't care about being cursed, that is. - - balance: Roboticists get secure morgue access during skeleton shifts - - bugfix: arrows can now be actually coated with reagents. - - bugfix: jetpack modules work on mod suits again - - bugfix: jetpack cyber implants also work - - refactor: removed `get_mover` callback, user is retrieved during activation - - refactor: timestop module on `on_module_triggered()` accepts user as 2nd param - - spellcheck: Improves gas monitor reaction information RP. - - bugfix: You can once again directly place patients on operating tables + san7890: + - server: job_config.toml should now comply with reload-configuration verb, meaning + you can hot-reload the configuration from disk and have it apply ingame automatically. + - config: The documentation for setting Minimum Character Age on a per-Job basis + has been altered to be more explicit. + - bugfix: The Minimum Character Age configuration entry is now sanitized to ensure + that it's within the codebase-defined ages, since there's no (legitimate) way + to get a character outside of those ages anyways. Invalid values will log to + the config log. +2023-07-06: + ChungusGamer666: + - bugfix: Punpun has gotten properly fitting clothes for his little chimp body - bugfix: Creampies no longer float above the heads of monkeys - - rscadd: You can now put sandstone bricks in pillows to... make them deadlier? - - rscadd: Adds coloured large scarfs and winter coats to ClothesMate and black shoes - to ChefDrobe - - rscadd: Adds latex gloves to SciDrobe, ChemDrobe and GeneDrobe and nitrile gloves - to MediDrobe - - rscadd: Adds job headsets to GeneDrobe and RoboDrobe, ViroDrobe and ChemDrobe - - rscadd: Adds black wizard robes and black wizard hat to MagiVend - - rscadd: Adds grey backpack, grey satchel, leather satchel and grey duffel bag - to CargoDrobe - - rscadd: Organises Drobes + DATA-xPUNGED: + - qol: Leather satchels and wallets have been issued to the offices of Head of Personnel + all across the sector. Studies suggest a fashion increase of 34% + Jacquerel: + - bugfix: A nuclear operative who is a slime will now correctly drop the disk upon + death. + - image: New directional sprites for spiderlings, with movement animations. + - bugfix: Dead spiderlings will be the same colour as they were when they were alive. + - bugfix: Tarantula spiderlings are no longer invisible, + - rscadd: People who cannot read can interact with the tram console to send it to + a random station. + NotDhu: + - bugfix: Replaced the security PDA painter in the CMO's office on Birdshot with + a medical PDA painter. + SomeRandomOwl: + - qol: Request Internet Sound now has the option to credit the person who requested + the Sound. Defaults to anonymous. + Vincent983: + - balance: Improved spacepol jumpsuit wound armor from 5 to 10 Vishenka0704: - - bugfix: fixed age restriction reason - bugfix: Added a forgotten reason for not being allowed to work if the age is low. - vinylspiders: - - sound: reduced the size of a few large audio files - - bugfix: fixes a bug that was causing forge-crafted arrows to turn into bullet - casings upon crafting completion - - refactor: converts modular caseless ammo subtypes to use the caseless element - instead - - bugfix: ash headdress, ash winged headdress, ash robes, ash combat plates, & decorated - ash combat plates now provide a slight armor protection, equal to that of 'bone - bracers'. - - bugfix: fixes some layout issues with the milking machine ui that was causing - elements to overlap one another and be unreadable - - qol: items stored in pockets now fall out and get sent flying when gibbed (instead - of just being deleted) - - bugfix: you may now interact with lewd slots when the appropriate genitals are - exposed (using the Expose/Hide genitals verb -> set to Always Show) regardless - of whether or not you are clothed. -2023-07-12: - KathrinBailey: - - rscadd: Three skirts, one dress. - Melbert: - - bugfix: Fixes Aphasia being removed - Seven: - - balance: Acid on a turf no longer immediately applies acid to its contents - - bugfix: Acid applied on a tile will no longer damage pipes below that tile - - bugfix: Xeno's corrosive acid no longer instakills mobs - - bugfix: Xenos can now touch acid - - qol: Mops, some cleaning items, and light replacers now use balloon alerts - - bugfix: Fixes changelings not being put into their headslug when using last resort - - bugfix: Fixes changeling headslugs not putting their eggs into dead bodies - SkyratBot: - - bugfix: The military surplus trader encountered by explorer drones will now correctly - ask for armor rather than "suit" - - qol: Matches command envirosuit helms' armor value with their hat counterparts. - - bugfix: Destroying the fabled "green text" now properly releases its victims from - their curse. - - code_imp: Jousting now registers/unregisters properly on two-handed items. - - bugfix: You can now correctly Tend Wounds on most non-human animals. - - rscadd: You can now Remove Implants from non-human animals, just in case Ian swallowed - a macrobomb. - - bugfix: sliding puzzles can no longer have their icons erased by the hand labeler - - bugfix: the fortunate cookie dont dropped a empty paper anymore. - - bugfix: Fix atoms not applying proper armour penetration logic. - - bugfix: Fix silenced living armour penetration not using proper armour penetration - logic. - - code_imp: Added macro for calculating armour penetration. - - bugfix: Fixes venomous projectiles for real, and invisible arrow sprites. - - balance: The Regal Condor's base spread has been reduced to 0, like damn near - every other gun that exists. - - admin: If a circuit component outputs a radio signal, it should now be logged - in list-signalers. - - spellcheck: Fixed typos in the descriptions of the mRLD and RTD as seen from protolathes. - - bugfix: Cake cats/butter bear now grab the ghost of the brain used in their making - - bugfix: Autorifle magazines are now visible in the security techfab's ammunition - category. - Tattle: - - qol: changed mouth blocked message to a balloon alert - vinylspiders: - - bugfix: fixes a common CI failure that was caused by misplaced items on Voidraptor - occasionally getting eaten by randomized maintenance crates. - - bugfix: fixes a potential issue with gigantism/dwarfism trait not actually getting - removed alongside the mutation if your body size is too big or small - - bugfix: fixed an issue that was causing climaxes to not complete if you possessed - testicles, leading to being permanently horny in some cases - - bugfix: fixes some runtimes with the milking machine - - bugfix: Sadism quirk will now wait until the climax moodlet is gone before starting - to add more arousal -2023-07-13: - ATHATH: - - qol: Emagged organ harvesters will no longer refuse a victim that has items on - their person, such as the handcuffs they've been bound with. + Youtubeboy139: + - image: Added new Surgery Bed sprite + milktao: + - bugfix: fixed food preferences displaying incorrectly when examining tongues +2023-07-07: + Ben10Omintrix: + - refactor: Mushrooms have been refactors, please report any bugs/unintended behavior + - rscadd: the mushroom basic mob can eat the mushroom plant to heal itself + ChungusGamer666: + - rscadd: Added Alcoholic as a negative quirk. + - rscadd: Added Hemiplegic quirk. Hatterhat: - rscadd: A really old data disk with the MOD module designs for the status readout was recovered, and has been haphazardly hotpatched into the research networks. @@ -492,6 +462,106 @@ - bugfix: Quantum relays now process, meaning DOS attacks actually function - bugfix: Music Request Credit shows CKEY instead of character name - bugfix: androids now have proper robotic organs and no appendix. + Jacquerel: + - balance: Guard spider web statues despawn as the ability comes back off cooldown. + - balance: Spiderlings now only move at light speed if they're on webs, stay safe + little guys. + - bugfix: Spiders once again have random numbers after their names. + - bugfix: Mobs can once again emote (with sound) when they die. + - bugfix: Basic mobs will tell you whether they are alive if you examine them. + Jolly: + - image: The plastic spoon sprite has been nudged to appear more centered. + LT3: + - image: More maptext and font tweaks + - spellcheck: Context tooltips too small, too big... just right? + LemonInTheDark: + - bugfix: Gas, like plasma, will now properly display on multiz stations + Melbert: + - bugfix: Fixed EMPing a cybernetic heart not implanted in a body not applying effects + (stopping the heartbeat temporarily) + - bugfix: Fixed an exploit involving observers + - bugfix: Fix Tinea Luxor exposing not increasing light duration + OrionTheFox: + - qol: 'put instructions on toggling bandanas into their examines. If you didn''t + already know, it can be worn as more than a mask: use in-hand to wear as a hat, + and alt-click to wear it on your neck!' + YehnBeep: + - bugfix: Engineers can now print the non-eyewear T-Ray scanner from their department + lathe. + - qol: Scientists can also print this scanner. + atlasle: + - sound: A new ambient track will now play in space + mc-oofert: + - rscadd: rcd can make girders now + - bugfix: silicons can depower airlocks via their UI again + norsvenska: + - image: Siding now uses the correct sprite on corners and endpieces. +2023-07-08: + 1393F: + - bugfix: The cursed katana shard you can get from tendril loot no longer falsely + tells you you're not supposed to have it + BlueMemesauce: + - qol: AI VOX messages are sent over announcement instead of radio + - bugfix: AI VOX messages work properly on multi-Z stations + ChungusGamer666: + - rscadd: You can now put sandstone bricks in pillows to... make them deadlier? + - rscadd: Added colorblindness as a mild brain trauma. + - rscadd: Added two new quirks, prosthetic organ and tin man. Essentially, they + replace organs with bad bad not good cybernetic counterparts. + Ghommie: + - refactor: Replaced hardcoded "safeties" for lava, chasms and ignoring turf slowdowns + on catwalks with traits. + - balance: much like catwalks, tables and conveyors also disable turf slowdowns. + - balance: slippery turfs won't slip you when walking on a table. + - bugfix: Fixed an edge case in which a mob standing on a lava turf would be left + visually but permanently on fire if the lava is changed to another kind of + turf. + Jacquerel: + - rscadd: A bible or lighter in your suit slot, or cowboy hat on your head will + occasionally intercept a bullet. + JohnFulpWillard: + - balance: Bilingual quirk now lets you choose your language between ones given + to roundstart species. + - balance: Foreigner and Bilingual are now mutually exclusive languages. + - bugfix: Cultists promoted to Leader no longer lose their spells (rip whoever tried + saving up blood rites) + - admin: Admins can now force promote/demote people from Cult Leader if necessary. + - code_imp: Jousting now registers/unregisters properly on two-handed items. + Jolly: + - bugfix: '[TramStation] - Removed a (possibly) unused var on the barber shop doors. + Hopefully those taking refuge in the commissary wasn''t causing too many issues.' + 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 + 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 + their X/Y pixel offset.' + Melbert: + - bugfix: Fix certain emote interactions happening twice at the same time + - bugfix: Fixed some hard deletes involving constructed cyborgs + - bugfix: Cyborgs with nodrop hats no longer lose them on tip + - refactor: Refactor of connections.js. Yeah that's it. + Toastgoats: + - rscadd: Adds the Lustrous, ethereal pirates in a big bluespace geode! + - sound: Unique scream sound for the Lustrous species. + - image: Unique head icon for the Lustrous species. + Youtubeboy139: + - image: Added new HUD sprites + - image: Added new Goggle Sprites + - image: Added new NVG sprites + - image: Removed unused/depreciated sprites in `glasses.dmi` + carlarctg: + - bugfix: Serrated bone shovels can be created with any kind of shovel now, not + just a spade (???) + - rscadd: Serrated bone shovels can be used in place of circular saw in most surgeries. + - rscadd: Added a duller (still deadly) variant of the serrated bone shovel as coroner + mail. + - rscadd: Autopsy scanners now act as advanced health analyzers on dead and seemingly-dead + people. + - rscadd: Increased the force, throwforce, and wound bonus of inert ritual knives + and scythes. + - rscadd: Coroner gloves can quickly apply medicine like nitrile gloves. - image: Heavily reworks and resprites first aid analyzers. They now display if they're happy, sad, angry, or warning you! Also a 'pricking' animation. - rscadd: First aid analyzers are now found in all basic and specialized medkits. @@ -750,6 +820,60 @@ jukebox songs included in their config. SkyratBot: - bugfix: roundstart exodrone consoles are now unscrewable. +2023-07-09: + DATA-xPUNGED: + - qol: It has been issued brand new mini-fridges for our active stations, Featuring + more booze and less moldy pizza! + - rscdel: Removed excess ID boxes on HoP's office + Fikou: + - balance: nightmare vision goggles give you night vision + Imaginos: + - image: A new sprite for oeprating tables + Melbert: + - bugfix: Fix hard deletes that brick all of a wizards spell when their body is + delted + - rscadd: The Atrocinator will now flip you even more. + Rhials: + - bugfix: The organ manipulator menu will now delete implants or organs that fail + to properly insert. + - code_imp: The organ manipulator menu code now looks nicer :) + YehnBeep: + - qol: Produce consoles now have tables near them. + YesterdaysPromise: + - rscadd: Added Interdyne ModSuits for Interdyne pirates. +2023-07-10: + DATA-xPUNGED: + - qol: The Warden's locker now has a garment bag + Fikou: + - bugfix: service borg apparatus now works on stoves and griddles and ovens + - qol: borgs can now activate stoves and griddles + - rscadd: rnd can research a cookbook for service borgs + FlufflesTheDog: + - bugfix: You can once again directly place patients on operating tables + Jacquerel: + - rscadd: Golems can scoop sand (or snow) off the floor by clicking on it. + Nimowa: + - bugfix: Fully charged APCs will now actually be fully charged, instead of nearly + empty. + Riggle: + - spellcheck: fix suspicious_logins + Youtubeboy139: + - image: Added new Security Cap sprite + distributivgesetz: + - spellcheck: Fixed some underscores in spiderling names. +2023-07-11: + ATHATH: + - qol: Emagged organ harvesters will no longer refuse a victim that has items on + their person, such as the handcuffs they've been bound with. + CRITAWAKETS: + - bugfix: Hereditary Manifold Sickness, and other uncurable diseases, have been + found to no longer disappear upon miraculous acts of divine restoration. In + addition, viral bonding no longer makes you into a carrier for those aswell. + ChungusGamer666: + - rscadd: Nightmare vision goggles now give you mare vision + - bugfix: Creampies will no longer irreparably stain your face + Ghommie: + - bugfix: Fixes venomous projectiles for real, and invisible arrow sprites. - rscadd: Added cardboard IDs to the game. They can be crafted with a cardboard sheet and wirecutters and modified with a writing tool. While worn, these will modify the visible name of the wearer just like actual IDs, though they aren't @@ -761,6 +885,52 @@ - bugfix: Ventilation clog no longer spawns mobs in inappropriate places - bugfix: Fixes holy arrows being invisible. - rscdel: The Head of Personnel no longer spawns with an ID box. + Helg2: + - bugfix: androids now have proper robotic organs and no appendix. + - bugfix: snakes, security, spiders and skeletons phobias now properly react on + mobs + Jacquerel: + - rscadd: AI-controlled spiders will make more web-shaped webs. + JohnFulpWillard: + - qol: Clear PDAs now has all themes in their themify app by default. + Melbert: + - bugfix: Fix ling revival for full-dead lings + - refactor: Refactored language holders, making species changes not delete all of + your known languages + Seven: + - balance: Only 2 smugglers satchels will spawn on the station at roundstart, down + from 10 + TerraGS: + - bugfix: The military surplus trader encountered by explorer drones will now correctly + ask for armor rather than "suit" + Time-Green: + - balance: Metalgen cannot spawn as a random chem anymore (strange seeds, maintpills + etc) + carshalash: + - bugfix: ' Infinite spider eggs are no more.' + cnleth: + - image: Engineering scanner goggles are now yellow and not green when in meson + mode + - image: Atmospheric thermal imaging goggles are now green + mc-oofert: + - bugfix: morgue units can no longer hold ghosts + - bugfix: Cake cats/butter bear now grab the ghost of the brain used in their making + nikothedude: + - bugfix: Quantum relays now process, meaning DOS attacks actually function + san7890: + - admin: If a circuit component outputs a radio signal, it should now be logged + in list-signalers. +2023-07-12: + Ben10Omintrix: + - bugfix: the fortunate cookie dont dropped a empty paper anymore. + FlufflesTheDog: + - bugfix: Destroying the fabled "green text" now properly releases its victims from + their curse. + Helg2: + - bugfix: warden has his garment bag in locker as should + Jacquerel: + - bugfix: Guard spiders can now only make one scary duplicate of themselves at a + time, rather than as many as they can click on the button. - rscadd: PAIs can no longer be inserted into Bots - rscadd: Bots can now have their sapience toggled by anyone with access to their settings panel @@ -770,6 +940,13 @@ dead - qol: Bots can be renamed from their maintenance panel - bugfix: Intern returns misplaced droppers back to deltastation's xenobiology lab. + - bugfix: Bile/Vileworms now have the same projectile and thrown weapon resistances + of other mining mobs. + Melbert: + - qol: You no longer fall over when you get dusted, making the animation line up + with your body + - bugfix: Fixes Aphasia being removed + Singul0: - rscadd: IRS jacket is now back in the clothesvend - rscadd: Ports breaching shells from beestation - rscadd: Space IRS has been added into the heavy weight pirates spawn pool @@ -784,56 +961,174 @@ has been sanity checked and converted to balloon alerts. Vekter: - rscadd: Adds support for it/its pronouns. You can select these in character preferences. - Zergspower: - - refactor: replaces the status flag with organs_flag - vinylspiders: - - qol: drains can now be deconstructed using the plumbing rcd - - bugfix: you can no longer construct multiple drains on the same tile - - image: Siding now uses the correct sprite on corners and endpieces. - - bugfix: revolvers will now display an accurate count of live (not empty) rounds - in the ammo counter HUD - - rscadd: Added Hemiplegic quirk. - - bugfix: changes to thrown liquid behavior--now they will ricochet off of walls - and other dense objects and spill where the beaker lands instead of inside of - the wall. - - bugfix: Gas, like plasma, will now properly display on multiz stations - - rscadd: rcd can make girders now - - qol: Leather satchels and wallets have been issued to the offices of Head of Personnel - all across the sector. Studies suggest a fashion increase of 34% - - bugfix: the Bolt Responder and Mk II Phalanx energy guns now have inhand sprites - - image: some new inhand sprites for the Phalanx II - HoS laser, yellow version - - image: new inhand sprites for the Bolt Responder - - qol: 'put instructions on toggling bandanas into their examines. If you didn''t - already know, it can be worn as more than a mask: use in-hand to wear as a hat, - and alt-click to wear it on your neck!' - - rscadd: Added Alcoholic as a negative quirk. -2023-07-17: - ChungusGamer666: - - refactor: Species speed is now stored in bodyparts. Leg transplants from slower - species will make you slower. - - bugfix: Bodyparts that should slow you down, will slow you down. - - bugfix: Hair and facial hair gradients work again now - - bugfix: Facial hair colors apply properly again - - bugfix: Admin spawned characters will get hair color preferences applied properly - - refactor: Head rendering code has been updated significantly... Again. Please - report any issues with hair, facial hair, lipstick and such. - Iamgoofball: - - rscdel: Resets Human, Lizard, and Moth screams to /tg/ stock. - - bugfix: Fixes screaming easter eggs. - Jolly: - - qol: '[DS-2] - The code for some of the lockers internally has been altered. Please - 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 - 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 - their X/Y pixel offset.' + Zergspower: + - refactor: replaces the status flag with organs_flag + vinylspiders: + - qol: drains can now be deconstructed using the plumbing rcd + - bugfix: you can no longer construct multiple drains on the same tile + - image: Siding now uses the correct sprite on corners and endpieces. + - bugfix: revolvers will now display an accurate count of live (not empty) rounds + in the ammo counter HUD + - rscadd: Added Hemiplegic quirk. + - bugfix: changes to thrown liquid behavior--now they will ricochet off of walls + and other dense objects and spill where the beaker lands instead of inside of + the wall. + - bugfix: Gas, like plasma, will now properly display on multiz stations + - rscadd: rcd can make girders now + - qol: Leather satchels and wallets have been issued to the offices of Head of Personnel + all across the sector. Studies suggest a fashion increase of 34% + - bugfix: the Bolt Responder and Mk II Phalanx energy guns now have inhand sprites + - image: some new inhand sprites for the Phalanx II - HoS laser, yellow version + - image: new inhand sprites for the Bolt Responder + - qol: 'put instructions on toggling bandanas into their examines. If you didn''t + already know, it can be worn as more than a mask: use in-hand to wear as a hat, + and alt-click to wear it on your neck!' + - rscadd: Added Alcoholic as a negative quirk. +2023-07-17: + ChungusGamer666: + - refactor: Species speed is now stored in bodyparts. Leg transplants from slower + species will make you slower. + - bugfix: Bodyparts that should slow you down, will slow you down. + - bugfix: Hair and facial hair gradients work again now + - bugfix: Facial hair colors apply properly again + - bugfix: Admin spawned characters will get hair color preferences applied properly + - refactor: Head rendering code has been updated significantly... Again. Please + report any issues with hair, facial hair, lipstick and such. + Iamgoofball: + - rscdel: Resets Human, Lizard, and Moth screams to /tg/ stock. + - bugfix: Fixes screaming easter eggs. + Jolly: + - qol: '[DS-2] - The code for some of the lockers internally has been altered. Please + 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 + 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 + their X/Y pixel offset.' + Melbert: + - bugfix: Punpun has gotten properly fitting clothes for his little chimp body + - code_imp: AI cards should react more snap-ily to having their occupant perish + SkyratBot: + StaringGasMask: + - qol: Now plasmamen can use the infiltrator MODsuit without having their species + revealed. The helmet's still not sealed, so remember your mask. + Tattle: + - qol: changed mouth blocked message to a balloon alert + Thunder12345: + - bugfix: Autorifle magazines are now visible in the security techfab's ammunition + category. + YehnBeep: + - spellcheck: Fixed typos in the descriptions of the mRLD and RTD as seen from protolathes. + YesterdaysPromise: + - image: added sprites for different variants of scrolls. + - image: modified couple posters with ghost pixels. + lizardqueenlexi: + - refactor: Foxes are more crafty now. They will run from danger, and hunt small + prey when no one is keeping an eye on them. Don't leave Renault alone with Ian! +2023-07-13: + Hatterhat: + - qol: When a MOD fails to store something in itself when retracting, you're now + notified in both the chat and by a balloon alert. + Helg2: + - balance: Rocket launcher's backblast doesnt ignore armor now. + - bugfix: eating mime's and rainbow crayons now properly transfers reagents. + - bugfix: I somehow fixed the amount of reagents in crayons to what it was before. + LT3: + - image: Roller bed now has an inhand sprite + - bugfix: Security records no longer accept negative values for citation payment + Melbert: + - rscadd: You can now wear multiple accessories on your uniform at once (up to five + by default) + - balance: Removed armor from accessories, and nerfs the effects of some accessories. + SomeRandomOwl: + - bugfix: Music Request Credit shows CKEY instead of character name + Timberpoes: + - rscdel: Revolution has been reverted back to old behaviour. The round once again + 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. +2023-07-14: + Archimus12: + - rscadd: Adds latex gloves and medical headsets to the MediDrobe. + - rscadd: Adds pyjamas, nightcaps and white shoes to the ClothesMate. + - rscadd: Adds science backpack, duffel bag and satchel to the RoboDrobe. + BlueMemesauce: + - bugfix: Removed initial 500 point balance on mining point transfer cards. Load + them up with points instead. + - rscadd: Added mining point transfer cards to mining lockers. + - rscdel: Removed mining point transfer cards from mining equipment vendor. + Helg2: + - rscadd: You can now swab plasmaman clown clothes to get clown microbes. + - rscadd: Clown phobia makes you fear plasmaman clown's gloves and helmet. + Jacquerel: + - refactor: Goliaths now use the Basic Mob framework, please report any unusual + behaviour. + - rscadd: Goliaths learned a couple of new attacks which they will use in self-defence. + - balance: Help-clicking a miner grabbed by Goliath tentacles will immediately free + them, as will the effect of several items you can scavenge from around Lavaland. + - image: New sprites for the Goliath saddle. + LT3: + - bugfix: Maptext should now properly show superscript characters when performing + actions + Sealed101: + - qol: Lobby Menu buttons can now be collapsed. Rejoice! + - qol: Lobby Menu buttons have names, which can be seen in the prompt on the bottom + left of the viewport. + - qol: you may see your readiness status during pre-game in the Status Bar. + - qol: Reset Lobby Menu HUD verb added in case you manage to break the damn thing. + Vekter: + - rscadd: Adds support for it/its pronouns. You can select these in character preferences. + nikothedude: + - bugfix: Deployable turrets no longer runtime when firing + - qol: APCs, fire alarms, and holopads now communicate some more of their silicon + interactions via screentips. + - qol: APCs, fire alarms, holopads and turret control panels now use balloon alerts + for more of their notifications. +2023-07-15: + ATHATH: + - bugfix: Simplemobs that can't take stamina damage, including mulebots, will no + longer be reset to their default speed whenever they take damage or are healed. + Ben10Omintrix: + - refactor: paper wizard have been refactored, please report any bugs/unintended + behavior + - refactor: refacted the datum/elememt/trial to an bespoken element + - rscadd: paper wizard now have effects when he walking and he will now go and look + for paperes and write stuff in them Melbert: - - bugfix: Punpun has gotten properly fitting clothes for his little chimp body - - code_imp: AI cards should react more snap-ily to having their occupant perish - SkyratBot: + - qol: Changeling Emporium is now sorted alphabetically. + - qol: Changeling Emporium now has a search bar! + - bugfix: Ling Augmented Eyesight now no longer causes you to lose the effects of + your Meson glasses + - bugfix: Ling Augmented Eyesight now more consistently tracks the flash protection + / vulnerability it confers. + - bugfix: Fixes a runtime from clientless mobs listening to Jukeboxes + - bugfix: Fixes some potential hard-dels from Jukeboxes + - qol: Jukeboxes now start with "title3.ogg" loaded for servers which do not have + jukebox songs included in their config. + NotDhu: + - bugfix: Added missing telecomms monitoring consoles to Birdshot. + Rhials: + - qol: The Xenomorph Infestation orbit menu tab is now violet instead of red! + Striders13: + - code_imp: Admins can now choose the reward cursed slot machine gives when hitting + jackpot. + VladinXXV: + - qol: You can now rename the coroner's skeleton model with a pen! + - bugfix: Autopsy reports will now correctly report blood type and level for corpses + who happen to have blood for blood. + generalthrax: + - balance: Lionhunter on charge now has a damage modifier of 2 instead of 1.33 + - balance: Increased max range of charged shot from 16 to 30 + - balance: Increased scope modifier so you can use the new max range +2023-07-16: + DATA-xPUNGED: + - rscdel: The Head of Personnel no longer spawns with an ID box. + Helg2: + - bugfix: roundstart exodrone consoles are now unscrewable. + Jacquerel: - rscadd: Personal AI holograms are now limited to an area around their PAI card. The size of this are can be configured via the PAI card. - rscadd: pAI cards can now be placed inside bots in order to grant them control @@ -864,6 +1159,25 @@ of additive - qol: laser muskets' inhand sprites will show now whether or not they are charged - image: new inhand sprites for the laser muskets + JohnFulpWillard: + - rscadd: The 'Sent from my PDA' message is different for Clear PDAs now (specifying + they are crystal). + - bugfix: Chaplain armor no longer blocks being shoved down. + LemonInTheDark: + - bugfix: The preference menu has had its weird index lowered (Assets are no longer + semi garbled) + Melbert: + - bugfix: Anti-magic visual effects will no longer trigger overtop one another + Thunder12345: + - qol: CTF has more reminders of how to capture flags. + Time-Green: + - bugfix: Metalgen recipe generation works again + Watermelon914: + - balance: Changed damage reduction for robotic limbs to be multiplicative instead + of additive + carshalash: + - bugfix: Intern returns misplaced droppers back to deltastation's xenobiology lab. + necromanceranne: - bugfix: Stops manifest generation runtiming when a cargo crate is empty. - rscadd: Abandoned crates are now available via cargo imports. - rscadd: Dumpsters full of maintenance trash are now available via cargo imports. @@ -1018,6 +1332,63 @@ - rscadd: 'New air alarm mode: Vent siphon, which disables scrubbers and forces vents to siphon air with no pressure regulation' - bugfix: Cryo cells no longer appear on when off. + - bugfix: Fixes holy arrows being invisible. + nikothedude: + - bugfix: Ventilation clog no longer spawns mobs in inappropriate places + - rscadd: 'New malf ability: Remote safety overrides. Allows the AI to remotely + emag things it has access to.' + - code_imp: emag_act() now returns a boolean designating it's success in emagging + - code_imp: All instances of emag_act() now have the proper arguments + - qol: Most usecases of emagging now have some kind of feedback, and existing feedback + has been sanity checked and converted to balloon alerts. +2023-07-17: + DATA-xPUNGED: + - balance: Pyre Sect can now heal with their bible as normal. + - qol: Some of Pyre Sect's rituals have been shortened slightly + Donglesplonge: + - bugfix: replaces icebox genetics' regular science headset with a medisci headset, + making it more in line with other genetics offices + Helg2: + - bugfix: Onehuman and Freeform ai modules now have proper material prices. + - qol: People with deviant tastes now don't care about dirt on the food. + - bugfix: fixed energy cost on floor tiles for engi borgs. + - bugfix: engi borgs can now properly merge base floor tiles with other base floor + tiles. + Jacquerel: + - bugfix: Station traits can once again allow vending machines and bots to speak + a random language + - bugfix: EMPed bots and vending machines once again speak a random language + - bugfix: Carp, Trees, and Festivus Poles will once more sometimes emote at you + if they think you are looking at them the wrong way, before they come over to + beat you up. + JohnFulpWillard: + - refactor: Huds now have their hud owner set in Initialize + Melbert: + - code_imp: AI cards should react more snap-ily to having their occupant perish + OrionTheFox: + - qol: in the event the Gravity Generator becomes damaged, examining the main part + will now give repair hints! + Timberpoes: + - bugfix: Emotes now respect word filters. + Watermelon914: + - bugfix: Fixed the AI vox announcement interrupting every other sound being played. + itseasytosee: + - rscadd: A new traitor item has been added, Polarized Contacts! + necromanceranne: + - code_imp: Adds an opt out for the rest of the round for the various heretic summons. + nikothedude: + - bugfix: The malf AI emag ability now works + - bugfix: The AI can no longer untip vendors remotely/spam sparks from shocked vendors + vinylspiders: + - bugfix: transformed jellypeople with the blood deficiency quirk will now receive + the right bloodpacks as mail goodies + - qol: laser muskets' inhand sprites will show now whether or not they are charged + - image: new inhand sprites for the laser muskets +2023-07-18: + BlueMemesauce: + - bugfix: Abductor posters can no longer randomly spawn + - spellcheck: Fix duplicate sentence in space comms agent flavor text + CRITAWAKETS: - rscadd: Added the smoothbore disabler and it's prime variant. You can now craft a disabler with only one shot and terrible accuracy. - code_imp: Gun cranking has been made a component and could theoretically be used @@ -1051,6 +1422,10 @@ Improvedname: - bugfix: Brings security berets down to softcap armor values also softcaps get wound armor + Jacquerel: + - bugfix: Megafauna can be consumed by the singularity. + JohnFulpWillard: + - bugfix: Multi-z maps should now work again. Melbert: - rscadd: Adds a new 7 point positive quirk, "Spacer Born". You were born in space, and as a result your body's adapted to life in artificial gravity, making you @@ -1085,6 +1460,96 @@ - rscadd: Added angle lighting, applies it to most wall lights! - rscadd: Adds a lighting prototyping tool, mappers go try it out (it's locked behind the mapping verb) + - refactor: Refactored display-ing of antag objectives in their UIs + Rhials: + - spellcheck: removes an errant period from the flux anomaly announcement. + Time-Green: + - bugfix: Triple carp player controlled shuttle event works again + - bugfix: anti-breach shields wont be dragged away during shuttle flight anymore + carlarctg: + - rscdel: There is no longer a 50% chance of catching a heretic out when examining + them drawing influences. + dieamond13: + - bugfix: adds a BCI implanter to northstar circuit lab as it didn't come with one + before + itseasytosee: + - balance: the Syndicate Tome traitor item now grants anti-magic while held and + can be used to clear cult runes. + necromanceranne: + - bugfix: Replaces direct calls of try_infect() with appropriate procs so that CRISPR + and Miasma aren't forcing diseases on the disease immune. + sergeirocks100: + - spellcheck: A spelling error in the name of the Tiziran fish case has been corrected. + timothymtorres: + - rscadd: Add healing boost to organs while mob is sleeping (does not apply to robotic + or dying organs) +2023-07-19: + Ben10Omintrix: + - refactor: the penguin is a basic animal + - rscadd: the penguin now layed eggs + - rscadd: the penguin and the chicken babys will go look for adult penguin or chicken + and be happy when he is near the adult + CoiledLamb: + - image: updated most tank sprites. + DaydreamIQ: + - spellcheck: Maints fridge doesn't have _ in its name anymore + Donglesplonge: + - bugfix: replaces the unspawnable cannonballs in birdshot maintenance with a stack + so that the 4 cannonballs properly spawn, make sure to point them away from + medical! + Melbert: + - bugfix: Cyborgs no longer drop their radio key when deleted, only when deconstructed + first + - bugfix: Cyborgs no longer drop their MMI on deletion, only prior to deletion. + This may result in bad code rearing its ugly head, open an issue report on the + github if you're a cyborg and get ghosted when you feel like you shouldn't + - bugfix: Runtime from syndie cyborgs spawning + - bugfix: AI deaths are reported to black box + - qol: Wizard Spellbook is now alphabetized + - qol: Wizard Spellbook now has a search bar! + OrionTheFox: + - refactor: refactored some code relating to greyscale clothing - please report + relevant issues on github! + Tattle: + - spellcheck: Fixed the grammar on a few revenant messages + Vekter: + - rscadd: Added 2 new brain damage lines. Beat your skull in with a wrench and discover + them today! + coldud13: + - rscadd: You can now toggle the visibility for hair on your noggin when wearing + surgery caps. + necromanceranne: + - bugfix: Cleans up the lavaland exports to the modern loot table lists. + - spellcheck: More elaborate explanation for what exactly the sinister shard does + when you look at the explanation in the null rod selection UI. + - bugfix: Sniper rifles have a range that allows them to aim more smoothly (and + still decently long ranged) + - bugfix: Fixes a runtime on inserting the vorpal scythe into your arm. You should + now gain the Morbid trait, as expected. + scriptis: + - qol: techfabs now use sheets(TM) as the default unit of measurement + - bugfix: mechfab icons aren't perpetually gray + tommysalami3: + - rscadd: Ambient tracks for icebox. + - rscadd: Independent global_list for icebox. + vinylspiders: + - bugfix: ethereal hair will now go out when they die again + - code_imp: apc's update_icon_state proc will no longer set the icon file path +2023-07-20: + FernandoJ8: + - qol: terminals built by left-clicking on SMES and APC units will now be on the + same layer as the machine. + - bugfix: constructing a terminal on a specific layer with right-click now works + for APCs, not just SMES units + Helg2: + - image: .50 incendiary magazine now has sprite. + - rscadd: Bank machine now has a circuit for it. Spawns in secure tech storage and + researchable in the same nod as comms console. + - balance: Due to possibility of creating area and making there bank machines that + aren't roundstart will have gps signals. + - bugfix: Bank machine now doesn't yell about unauthorized credit withdrawal when + its authorized. + Jacquerel: - balance: You can't possess a MULE as soon as the round starts, someone will have to give you permission. - balance: MULEbots no longer crush prone characters unless they have been hacked @@ -1128,6 +1593,68 @@ leaning while facing the wrong direction Thebleh: - bugfix: Fixed several APC related issues. + JohnFulpWillard: + - bugfix: Cult spells, bloodsense, and pylon healing now follow cultists through + mind transfer (such as body swapping) + - bugfix: Cryo cells no longer appear on when off. + LemonInTheDark: + - rscadd: Added angle lighting, applies it to most wall lights! + - rscadd: Adds a lighting prototyping tool, mappers go try it out (it's locked behind + the mapping verb) + Nerev4r: + - rscadd: Due to increased exposure to low-gravity due to constant generator failures, + Spacer-Born have been showing up with increasingly tall statures. + Seven: + - bugfix: Xeno's corrosion ability no longer breaks reinforced walls and floors + - qol: Added some balloon alerts for failing to place items in storage containers + SirNooben: + - bugfix: Fixed the alien limbgrower UI + - bugfix: Fixed being able to order negative or more than 20 items in mining order + console + SyncIt21: + - bugfix: turbine does not runtime when its input or output turf is destroyed while + its running + - qol: add warning examine for rotor when its parts are not connected + nikothedude: + - rscadd: 'New air alarm mode: Vent siphon, which disables scrubbers and forces + vents to siphon air with no pressure regulation' + vinylspiders: + - bugfix: fixes gravity generators causing CI failures from overriding a signal +2023-07-21: + Blockaboo: + - bugfix: Tin man no longer causes you to drop all of your organs. + JohnFulpWillard: + - bugfix: '[Birdshot] Xenos can no longer immediately destroy the shield wall generator + to break out.' +2023-07-22: + CoiledLamb, RyeRice: + - image: cleans up shading on plasmatank sprite, gives it a cool new symbol. + Ghommie: + - image: walking on water will now immerse you in it... visually, at least. + Improvedname: + - bugfix: Brings security berets down to softcap armor values also softcaps get + wound armor + JohnFulpWillard: + - spellcheck: Silicons using weight machines are now told how pointless the task + was. + - spellcheck: Weight machine tooltips no longer lie about using LMB to use the machine. + Justice12354: + - qol: The word "chemical" has been removed from "chemical patch" when printing + patches + Melbert: + - bugfix: Once again you can award people medals. + Momo8289: + - qol: You can now use any hat with the hat stabilizer MOD + - bugfix: The MOD eating apparatus module now properly disables pepper spray protection + Sapphoqueer: + - bugfix: fixes a bug where borgs and TK users could effectively break ID's by removing + them from modular computers. + Sealed101: + - bugfix: fixed silicon alarm reports displaying power alarms as ALARM_ALARM_POWER + Senefi: + - rscadd: MetaStation Chemical Storage now has its own APC + - rscadd: MetaStation Chemical Storage is slightly larger than before + - rscadd: Ice Box Station Chemical Storage now has its own APC itseasytosee: - rscadd: You can now lean against walls! Simply turn your back to the wall and clickdrag yourself onto it. @@ -1165,6 +1692,28 @@ \ competing reactions while preparing or cooking" - spellcheck: Chicken nugget will have a description in the craft menu, and fiesta skewers will have a description in general + jughu: + - bugfix: removed a false silly tip about blob taking damage from flashbangs + scriptis: + - rscadd: ponies +2023-07-23: + Inari-Whitebear: + - bugfix: Cable connections on various structures including electrified grilles, + APC terminals, and SMES terminals have been rectified and will shock as expected + again. + - bugfix: Gas miners draw power properly again. + JohnFulpWillard: + - qol: The TTS and TTS Blips option is now one choiced preference. + Melbert: + - rscadd: 'Wizards have a new Right and Wrong: Mass Teaching, allowing them to grant + everyone on the station one spell or relic of their choice!' + Thebleh: + - bugfix: Fixed several APC related issues. + vinylspiders: + - bugfix: fixed a bug that would cause you to be unable to lean again if you tried + leaning while facing the wrong direction +2023-07-24: + GPeckman: - rscadd: Bounty pads can now be upgraded, to reduce the time until you can pick a new bounty - rscadd: Sunglasses can now be bought from cargo if you have security access. @@ -1172,7 +1721,14 @@ - rscdel: Removed shady jims bounty - qol: Bounty pads can now be screwdrivered/crowbarred with left click like every other machine - - balance: Changes some cooldowns and upgrades of spells. + Sealed101: + - bugfix: fixed third person throw verbs displaying as just an s + Singul0: + - rscadd: You can now use the genetic sequencer secondary click (RMB) to scan someone +2023-07-25: + ArcaneMusic: + - qol: ID cards tooltips now show how to assign a new account. + Ben10Omintrix: - balance: the bee now can fly over the machines so its easy for him to go to the hydroponics machine - bugfix: player bees now will not be stuck inside the hive if he entered it, they @@ -1221,6 +1777,31 @@ Senefi: - rscadd: Some Metastation Medbay lights have been moved and adjusted. SkyratBot: + Cheshify: + - image: Railing ends now exist. + Comxy: + - balance: Changes some cooldowns and upgrades of spells. + Hatterhat: + - qol: Ice cream vats now count as elevated surfaces for preventing germs from getting + onto germ-sensitive items (food). + - qol: Ice cream vats now dispense cones into your hands first, if possible. + - bugfix: Germ-sensitive items that fail to be placed in-hand now check for all + elevated surfaces, not just tables. + JohnFulpWillard: + - bugfix: Crates no longer stun you when you climb onto them. + Profakos: + - bugfix: Removed duplicate and incorrect Yaki Imo recipe + - qol: "Swapped out the flour in \xC6losterrm\xE6sch with two dough slices, to avoid\ + \ competing reactions while preparing or cooking" + - spellcheck: Chicken nugget will have a description in the craft menu, and fiesta + skewers will have a description in general + Sealed101: + - bugfix: fixed possessed sword spirits summoned during destruction of the sword + spawning in the error room. those fellas are in godmode, and y'all don't need + an immortal spirit haunting your station, m'kay? + Senefi: + - rscadd: Some Metastation Medbay lights have been moved and adjusted. + SyncIt21: - bugfix: items can be printed from autolathe & protolathe when the exact material amounts are present in them after upgrading - bugfix: max printable amount now shows the correct value & updates when items @@ -1241,10 +1822,24 @@ - refactor: inserting an item into the material container will display the units consumed as sheets not absolute units - refactor: removed x25 & x50 print buttons from the autolathe + Thebleh: + - bugfix: South Bronx Paradise Bars are once again the best weight loss aid on station + YakumoChen: + - bugfix: Dish drive no longer spams the bar/kitchen/etc when its idle with empty + messages. + kawoppi: + - rscdel: removed floating light fixture from the Deltastation security hallway +2023-07-26: + Melbert: + - bugfix: Prisoner slots can no longer be controlled by Plexagon HR Core. (special + things to distributivgesetz) + - bugfix: HoPs can open more assistant job slots if a non-assistant job is the overflow + role + - code_imp: Dehardcode the HR core blacklist for jobs which cannot have more slots + opened by the HoP + Mooshimi: - bugfix: Plasmaman DNA can no longer be stolen by changelings. - - spellcheck: Phobia warnings have the same glowy text now as they would in messages. - - bugfix: Crates no longer stun you when you climb onto them. - - balance: Mmmh, butter on a stick. Now for americanbots. + Paxilmaniac: - refactor: The mag_type variable on guns has been split between accepted_magazine_type and spawn_magazine_type, allowing weapons to safely spawn with subtypes of their normal magazines without breaking the weapon @@ -1253,26 +1848,45 @@ that don't spawn loaded with riot darts. - bugfix: some fixes to spess IRS pirates. - balance: IRS armor is now bulky + Rhials: + - qol: Modifies the contents of some Mafia lockers. Go check 'em out! + Singul0: + - bugfix: some fixes to spess IRS pirates. + - balance: IRS armor is now bulky + Time-Green: - bugfix: Makes radiation nebula space work on high-pop by applying the radiation more directly - balance: Internal nebula storm no longer gives 10 seconds of immunity and has a very, very small chance to apply mutations - balance: Rudes nebula rad immunity from 10 seconds to 6 seconds (shouldn't differ too much since we use a different system now) + carshalash: + - balance: Mmmh, butter on a stick. Now for americanbots. + distributivgesetz: - spellcheck: Head of Personnel's roundstart text now says that they should answer to the captain now instead of themselves. - jjpark-kb: - - balance: Reagent Imbuing (from forging) is strictly for ashwalkers & icecats - - balance: Forges can only be fully upgraded (legendary smiths) by ashwalkers & - icecats - - balance: Some of the forge upgrades have been moved around to accommodate reagent - imbuing being ashwalker/icecat only + - spellcheck: Phobia warnings have the same glowy text now as they would in messages. oranges: - balance: holodeck spawned banners no longer give the inspiration effects - vinylspiders: - - bugfix: fixes the nitrogen breather quirk not giving the correct lungs or spawning - the breathing dogtag 2023-07-27: + Ghommie: + - bugfix: the height of runechat messages should now scale correctly with the current + size variable of living mob. + - refactor: Crabs refactored into basic mobs. They now hunt tiny critters and flee + from attackers. + - bugfix: Fixed crabs not crab-walking. + - bugfix: Fixed active conveyor belts not moving movables spawned on top of them. + Helg2: + - qol: Tactical medkits now can hold stuff it spawns with. + - bugfix: Nukie Medical Bundle now spawns with premium tactical medkit as it should. + Jacquerel: + - bugfix: Traitors can once again affix tiny bombs to lathes rather than trying + to feed them to the lathe + Kubisopplay: + - balance: Flashing borgs requires two consecutive flashes to fully immobilize + - balance: Flashed borgs can speak + - balance: Remote lockdown on cyborgs lasts 180 seconds + - balance: Cyborg stun arm works like normal baton, and costs less energy LT3: - bugfix: Consumables like bone gel will first be used for surgery before wounds Licks-The-Crystal: @@ -1302,6 +1916,18 @@ - 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. + Melbert: + - bugfix: Fixes some occasions which result in TTS messages not playing + Rhials: + - bugfix: Clown cars now properly collide with deer. + - sound: Violent, slightly glassy car impact sound. + Senefi: + - bugfix: Wired MetaStation APCs that were not attached to the station's power grid + at round start. + Time-Green: + - admin: Changing shuttle events now alerts admins + carlarctg: + - bugfix: Hulks cannot be aggressive grabbed by strong grabbers anymore - balance: Syndicate 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. @@ -1315,10 +1941,38 @@ what it can hold now. - bugfix: The parent crayon's name is 'crayon' to prevent any weirdness with things that show the parent type's name. + distributivgesetz: + - bugfix: Fixed a rare bug that let you spam bluespace bodybags everywhere. + - bugfix: Mafia chaplains can now only use their seances on dead people now. + vinylspiders: + - bugfix: fixes mobs missing most of their emissive blockers + zeroisthebiggay: + - balance: Huzzah! Interdyne Associates have finally upgraded their medborgs' firmware. + They'll now have bonesetters and bonegel available! 2023-07-28: - Melbert: - - bugfix: Fixes some occasions which result in TTS messages not playing - SkyratBot: + DATA-xPUNGED: + - bugfix: New lights have been issued to the Head of Personnel's office. + - bugfix: We've instructed our intern to no longer place the HoP's stamps UNDER + the carbon paper bin, making many think there was no stamp at all. + Ghommie: + - bugfix: Reduced the maximum allowed length for ID assignments and paintings' titles + from 1024 to 42. + Iamgoofball: + - bugfix: Removes the ability to screwdriver springlock modules to make them not + deadly because that defeats the point of the springlock module + Inari-Whitebear: + - bugfix: Determination can now actually overcome your adrenal glands, making adrenal + crisis a curable condition! + Jackal-boop: + - qol: heretic sac targets now appear on the end of round report + Jacquerel: + - rscadd: Uncollected sand and snow will be blown away by the wind when storms happen + (but don't worry, storms also allow those turfs to be freshly dug up again). + MTandi: + - refactor: Refactored MOD Suit UI + - qol: Added options to hide detailed vitals and DNA data to the MOD status module + - qol: Made MOD Ion Jetpack Module have stabilizers enabled by default + Sealed101: - rscadd: dog with a butter on 'em - rscadd: dead dog with da butter on 'em (dogs feigning death are so good at it, they appear dead to medical HUDs and other things) @@ -1329,29 +1983,15 @@ - bugfix: fixes pets not dropping their collar when gibbed - bugfix: butter don't go on Lisa and corgi puppies (Lisa won't wear hats and corgi puppies can't wear hats and back slot items) - - bugfix: Some explosions should be more flashy and fiery, probably. - - bugfix: Determination can now actually overcome your adrenal glands, making adrenal - crisis a curable condition! - - bugfix: Clown cars now properly collide with deer. - - sound: Violent, slightly glassy car impact sound. + Time-Green: + - qol: The virologist is warned when radioactive resonance cannot be obtained + YehnBeep: + - bugfix: Fixed a floating light in Delta's bar + mc-oofert: - bugfix: guillotines no longer runtime when logging after decapping someone if they buckle AFTER the blade starts to drop - bugfix: shoving a crystal down a hole no longer makes it dust itself - - rscadd: Uncollected sand and snow will be blown away by the wind when storms happen - (but don't worry, storms also allow those turfs to be freshly dug up again). - - bugfix: Removes the ability to screwdriver springlock modules to make them not - deadly because that defeats the point of the springlock module - - balance: Flashing borgs requires two consecutive flashes to fully immobilize - - balance: Flashed borgs can speak - - balance: Remote lockdown on cyborgs lasts 180 seconds - - balance: Cyborg stun arm works like normal baton, and costs less energy - - refactor: Refactored MOD Suit UI - - qol: Added options to hide detailed vitals and DNA data to the MOD status module - - qol: Made MOD Ion Jetpack Module have stabilizers enabled by default - - bugfix: Fixed a floating light in Delta's bar - - refactor: Crabs refactored into basic mobs. They now hunt tiny critters and flee - from attackers. - - bugfix: Fixed crabs not crab-walking. + nikothedude: - rscadd: 'New malf module: Remote vendor tipping. Allows you to remotely tip a vendor in any of the 8 directions. Goofy and okay for assassinations on unaware enemies!' @@ -1378,69 +2018,68 @@ Motho: - bugfix: Nanotrasen-Brand System Cleaner has had its formula improved! Now with 100% less disgust! + san7890: + - 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. + vinylspiders: + - bugfix: fixes a type mismatch error with some of the phobia chat messages + volas: + - bugfix: Some explosions should be more flashy and fiery, probably. + xPokee: + - rscadd: Photophobia as a negative quirk. +2023-07-29: + DaydreamIQ: + - bugfix: Birdshot AI sat now has unrestricted exit instead of entrance + Ghommie: + - rscadd: Added a 'Vending products shortage' station trait, that randomly lowers + the availability of all vending products from vending machines on the station, + with a 1/20 chance of the vending machine itself being tilted. + Mothblocks: + - qol: pAIs now try to stay within range of their owner, and teleport back only + when necessary + - qol: Default max pAI range has been changed to the maximum range you can choose + (9 tiles) + Paxilmaniac: + - bugfix: The anomaly research ruin is no longer missing several tiles on the inside + to the void + Sealed101: + - bugfix: fixed gibtonite countdown animation interrupting clicks with the mining + scanner Senefi: - bugfix: Replaced 5 space tiles in the wall of the anomaly research ruin with rocks. - bugfix: Replaced the tile under the window in the mimes vs clowns ruin with plating. - bugfix: Replaced space tile in the emergency fish shuttle with plastitanium flooring. - bugfix: Removed space tiles from the exterior of some ruins templates. - SkyratBot: - - bugfix: fixed gibtonite countdown animation interrupting clicks with the mining - scanner + Time-Green: - rscadd: Adds cliffs to the north of icebox. Try not to fall of of them! + mc-oofert: - bugfix: you can no longer fireman carry to bypass puzzle doors - - rscadd: Added a 'Vending products shortage' station trait, that randomly lowers - the availability of all vending products from vending machines on the station, - with a 1/20 chance of the vending machine itself being tilted. - - bugfix: Birdshot AI sat now has unrestricted exit instead of entrance + vinylspiders: - bugfix: non-opaque curtains will no longer block emissives - YakumoChen: - - balance: Local pirates have scrounged up the funds to reinforce their vital ship - consoles, making them extremely difficult to destroy. 2023-07-30: - GoldenAlpharex: - - refactor: There is no longer a preference for not having a voice, the option was - moved to be the very first entry in the dropdown, called "None". - Hatterhat: - - rscadd: Proto-kinetic crushers can now be reskinned via alt-click; the only other - skin is the proto-kinetic glaive. It has a neat desc and inhand. - Juniper & Sheets: - - image: Adds a Lopland-compliant skirt for Security Officers. - Juniper & Zydras: - - rscadd: Purchasable gravity harness in the Cargo goodies section. - Jureiia: - - rscadd: Recolourable Flannel Shirt! - - rscadd: A new thinner choker variation, now available in the loadout and lustwish - vendor. - LT3: - - bugfix: Escape menu items should be positioned properly again - - bugfix: Fixed unintentional nerf to electrocution damage when reverting to TG - Melbert: - - balance: The "Long Shift" achievement is now feasibly obtainable, and admins can - no longer trigger it unknowingly - - bugfix: Fixes runtime from trying to put two pots on one stove. - SkyratBot: - - bugfix: Carbons with tails (felinids, lizards) who have that tail removed will - now have that tail actually look like it came from the person in question, rather - than just be a grey thing of sadness. - - rscadd: Starlight will color with space gas parallax - - code_imp: Cleans up random parallax code / radioactive nebula parallax code + ArcaneMusic: + - qol: Improvements to the accounting console in the HOP office. + - balance: Non-human species now receive a 90% racial paycut, up from 75%. + - balance: The inflation mechanic affecting vending machines has been removed, except + during the market crash event. + - balance: The market crash event now stands as it's own separate event, and ramps + up the cost of vendor items until finally popping and returning to normal. Market + crash now lasts longer to have more impact while it scales with time. + - image: New cargo exo-drone scanner sprites! + Ben10Omintrix: - refactor: the bear is a basic now. please report any bugs - rscadd: the bear will climb trees and search honey - - rscadd: You can now earn an achievement for completing the Grand Ritual. - - bugfix: Summon Magic and Summon Guns work again - - bugfix: Fixes revolvers losing ammo capacity when you reload them. - - bugfix: Staff of laval no longer works on space - - bugfix: some things not connecting to the ore silo round start - - bugfix: Fixing some jank with the a greyscale modify menu, like inputs not being - sanitized. - - rscadd: Adds a Forested planetary station trait! Icebox exterior is now a forest! - - rscadd: Adds a Forever Storm planetary station trait! Sometimes, the storm never - stops. Stay inside or get some coffee and warm clothes - - bugfix: fixes stuff spawning in rivers and above chasms - - bugfix: emissive blockers on random flora not updating - - code_imp: Splits terrain generation and terrain population in SSmapping + Ghommie: - bugfix: Put a cap to the amount of stickers that can be sticked to an atom (12) to prevent icon-related issues. + - bugfix: Fixing some jank with the a greyscale modify menu, like inputs not being + sanitized. + Jacquerel: + - bugfix: Dismounting from a piggyback no longer allows you to phase through other + players. + - rscadd: You can now earn an achievement for completing the Grand Ritual. + - bugfix: Summon Magic and Summon Guns work again - rscadd: Player-controlled bots can now play the prerecorded lines associated with that bot. - rscadd: Placing a pAI into a bot temporarily teaches that bot all the langauges @@ -1506,3 +2145,44 @@ - bugfix: Module duplicator has cheaper costs for circuit duplication vinylspiders: - bugfix: Wings for fly persons from flight potion + - balance: The "Long Shift" achievement is now feasibly obtainable, and admins can + no longer trigger it unknowingly + - bugfix: Fixes runtime from trying to put two pots on one stove. + SyncIt21: + - bugfix: some things not connecting to the ore silo round start + Time-Green: + - rscadd: Adds a Forested planetary station trait! Icebox exterior is now a forest! + - rscadd: Adds a Forever Storm planetary station trait! Sometimes, the storm never + stops. Stay inside or get some coffee and warm clothes + - bugfix: fixes stuff spawning in rivers and above chasms + - bugfix: emissive blockers on random flora not updating + - code_imp: Splits terrain generation and terrain population in SSmapping + - rscadd: Starlight will color with space gas parallax + - code_imp: Cleans up random parallax code / radioactive nebula parallax code + - bugfix: Staff of laval no longer works on space + necromanceranne: + - bugfix: Fixes revolvers losing ammo capacity when you reload them. + san7890: + - bugfix: Carbons with tails (felinids, lizards) who have that tail removed will + now have that tail actually look like it came from the person in question, rather + than just be a grey thing of sadness. +2023-07-31: + CRITAWAKETS: + - balance: The bluespace MOD storage can now hold bulky storage items (backpacks, + toolbelts) just like the bag of holding. + GoldenAlpharex: + - bugfix: Clothes equipped in the jumpsuit slot that happen to cover your feet will + no longer get bloody when you walk over blood if you are also wearing shoes. + Your kilt won't be getting bloody instantly anymore, it only will if you take + your shoes off! + - bugfix: Chat highlights now escape special RegEx characters from non-RegEx highlights. + - bugfix: Broken RegEx expressions no longer cause the chat to bluescreen, allowing + you to properly fix them. + SyncIt21: + - bugfix: Module duplicator has cheaper costs for circuit duplication + - rscadd: RPED can carry & install computer boards and complete computer frames + cnleth: + - bugfix: Using the timeline jumper MOD module updates stamina after resetting it, + no more infinite stamcrits + vinylspiders: + - bugfix: fixed a bug that would cause pAIs to be able to break their leash diff --git a/html/changelogs/archive/2023-08.yml b/html/changelogs/archive/2023-08.yml index 06f1d4cfd369c..e8e5890ccc824 100644 --- a/html/changelogs/archive/2023-08.yml +++ b/html/changelogs/archive/2023-08.yml @@ -1,43 +1,51 @@ 2023-08-01: + Fikou: + - bugfix: ghost notification icons are now centered properly + - bugfix: coroner has an implant during cybernetic revolution + - bugfix: fixes wizard loadouts + Hatterhat: + - bugfix: The blood-drunk miner has remembered how to swing their cleaving saw quickly + without having to flick it out first. + Jacquerel: + - bugfix: Losing your hooded suit (whether to theft, or because you were turned + into an ape) will also cause you to lose the hood. Licks-The-Crystal: - spellcheck: Corrected a large quantity of spelling, grammatical and phrasing errors with Exploration Drone content. - SkyratBot: - - rscadd: Expanded the RPG loot wizard event by giving various different items their - own statistic boost. - - bugfix: ghost notification icons are now centered properly + Paxilmaniac: - image: Wall and floor lights have been resprited to be a lot less dated looking, and a lot less yellow - - refactor: Slaughter and Laughter Demons have been refactored, please place an - issue report for any unexpected things/hitches. - - bugfix: Laughter Demons should now actually drop a kitten. + Sealed101: + - bugfix: fixed bluespace bodybags consuming xenomorphs when folded + Time-Green: - bugfix: fixes a runtime in SSstation setup - bugfix: fixes parallax not rendering correctly for latejoins - - bugfix: fixes wizard loadouts + Vincent983: - spellcheck: fixed the interdyne modsuit's typoes + Watermelon914: + - rscadd: Expanded the RPG loot wizard event by giving various different items their + own statistic boost. + YesterdaysPromise: + - rscadd: Added couple new signs to the game (med, medbay, morgue, chapel, viro, + gene, botany) + - rscadd: Way-signs now have additional states, showing vertical directions. + - image: Made the font on the signs consistant. + distributivgesetz: - bugfix: Photophobia should work now. - bugfix: Eyes should return to their normal flash sensitivity when the quirk is removed. - distributivgesetz: - bugfix: Fixes pAI mind transfer from a bot to their card runtiming when the bot gets broken. + san7890: + - refactor: Slaughter and Laughter Demons have been refactored, please place an + issue report for any unexpected things/hitches. + - bugfix: Laughter Demons should now actually drop a kitten. + zeroisthebiggay: + - spellcheck: Minor Breakage > Minor Skin Breakage for readability. 2023-08-02: - Divibee: - - rscadd: Crutch sprites and item. - GuiltyNeko: - - spellcheck: fixed the spelling of the hand dryer's description - Jolly: - - bugfix: '[Shuttles] Kilo''s Emergency Shuttle no longer has a stacked light in - its brig.' - LT3: - - config: Dynamic gamemode rolls midrounds as expected - Melbert: - - bugfix: Fixed BB admin add - SkyratBot: - - bugfix: broken icons in RCD UI - - 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. + DaydreamIQ: + - bugfix: Birdshot's morgue has surgical tools and a laptop for the coroner to use + Derpguy3: - qol: The Syndicate 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 @@ -57,6 +65,17 @@ - bugfix: coroner has an implant during cybernetic revolution - bugfix: Several places on Birdshot which were missing an APC now aren't. - bugfix: Several places on Birdshot which were missing an air alarm now aren't. + Jacquerel: + - bugfix: Several places on Birdshot which were missing an APC now aren't. + - bugfix: Several places on Birdshot which were missing an air alarm now aren't. + Jolly: + - bugfix: '[Shuttles] Kilo''s Emergency Shuttle no longer has a stacked light in + its brig.' + Melbert: + - bugfix: Fixed BB admin add + - bugfix: Traitors using the sneak suit and heretics under the effects of cloak + no longer leak their identity via Text to Speech + OrionTheFox: - image: resprited a lot of formal undersuits, enjoy! - rscadd: Added a pre-colored type of buttondown slacks for some service roles, to replace the "black suit" and "amish suit" @@ -119,6 +138,14 @@ - balance: Xenomorph neurotoxin has been buffed (50 -> 65 stamina damage) - rscadd: Adds boss music functionality. - sound: Adds hierophants boss track, tweaks hierophant boss noises. + Senefi: + - bugfix: NorthStar's Supermatter Waste Chamber guide no longer contains inaccurate + information + - qol: NorthStar's Supermatter Waste Chamber air alarm no longer shows the hallway + vent and scrubber on the configuration panel. + SyncIt21: + - bugfix: broken icons in RCD UI + Thunder12345: - bugfix: CentCom can no longer be raided by teleporting out of the Super Secret Room - bugfix: The Administrative Storage and ERT Armoury blast doors can no longer be @@ -157,6 +184,53 @@ - image: resprited the entirety of RnD! Genetics, Robotics, the RD, and the Science Team themselves will enjoy the fresh new looks but same great taste! No, wait, great STYLE! Don't eat these, they're covered in chemicals. + carlarctg: + - qol: When Space Dragons devour people they get extinguished, removing flames. + honkpocket: + - rscadd: Adds an emote to push up glasses with *glasses + - rscadd: Adds a visual effect to *sigh + timothymtorres: + - rscadd: Add a new 'Hall of Fame' emergency shuttle. It even comes with it's own + nifty photo album. +2023-08-03: + Fikou: + - balance: hat stabilizer module can now hold what plasmaman helmets can hold + - qol: kinesis module can be stopped without launching an object with right click + - balance: kinesis module stuns last until the kinesis stops + - rscadd: admin suit has a version of kinesis that can pick up anything at any range + and can be configured to make grabbed mobs phase through walls :) + Ghommie: + - bugfix: BoH bombing now correctly requires two bags to be done. + Hatterhat: + - balance: The strong-arm implant's punches now respect armor. + - spellcheck: While using an arm with the strong-arm implant to punch people, you + no longer kick them; your implant's in your arm, after all! + IndieanaJones: + - balance: Xenomorph neurotoxin has been buffed (50 -> 65 stamina damage) + Jacquerel: + - bugfix: Your pAI card won't pop out of your PDA onto the floor alongside its hologram + if it enters hologram form while inside a PDA. + Rhials: + - rscadd: Fugitive shuttles now have a "Fugitive Tracker" machine, which gives a + readout on the location of a random fugitive on a 40 second cooldown. + - spellcheck: Renames the fugitive pinpointer to the bounty shuttle pinpointer. + SpaceVampire: + - bugfix: Guard Spiders are no longer unable to attack after using Web Effigy + SyncIt21: + - bugfix: bluespace RPED can be put in bags again without dragging them into their + storage slots + - bugfix: normal RPED exchanges parts & displays part info again + Time-Green: + - qol: The random parallax layer moves more slowly, giving a more deep feel + distributivgesetz: + - bugfix: Fixes holoparasites not dusting their owners on death sometimes. + timothymtorres: + - bugfix: Fix ethereal crystal destruction not removing light + tommysalami3: + - rscadd: Adds boss music functionality. + - sound: Adds hierophants boss track, tweaks hierophant boss noises. +2023-08-04: + GPeckman: - rscadd: Added whisper-sensitive cybernetic ears, which make it much easier for the user to hear whispers at the cost of being more vulnerable to loud noises - rscadd: Added wall-penetrating cybernetic ears, which allow you to hear speech @@ -182,6 +256,29 @@ bar sprites. - rscadd: Remapped the Metastation kitchen for about the tenth time. distributivgesetz: + - bugfix: radio should no longer be broken for everyone + Helg2: + - bugfix: deleted trash in the walls from whiteship ruin box. + Jacquerel: + - rscadd: pAIs can be inserted into MODsuits and can control suit modules (but are + not capable of moving the suit). + - bugfix: AIs/pAIs in MODsuits can properly pin actions + MTandi: + - bugfix: removed fire alarm that was inside a window on oldstation + OrionTheFox: + - image: resprited the entirety of RnD! Genetics, Robotics, the RD, and the Science + Team themselves will enjoy the fresh new looks but same great taste! No, wait, + great STYLE! Don't eat these, they're covered in chemicals. + Vekter: + - bugfix: Fixes formatting for derelict and syndicate drone job names. They should + no longer tell you they're "the Ghost Role" when spawning as them. + - rscadd: Remapped the Metastation kitchen for about the tenth time. + - spellcheck: Fixed a typo in progressbar.dm and the file name for the progress + bar sprites. + cnleth: + - bugfix: Spell burger now has only one recipe + distributivgesetz: + - qol: Made reading text with the PDA retro theme a bit more accessible. - rscadd: Updated Direct Messenger to v6.5.3. Now including brand new individual chat rooms, proper image attachments and a revolutionary message input field! - rscadd: Added a "Reset Imprint" option to the PDA painter. @@ -201,6 +298,26 @@ by the void. Hatterhat: - bugfix: MCRs can now fit camo again. + - bugfix: Fixes an extremely rare bug where a /mob/living/brain with a client would + not be moved out of nullspace correctly, causing admin log spam. + peptron1: + - qol: TTS volume preference is not actually a volume slider, instead of a volume + number input. + san7890: + - 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. +2023-08-05: + Ghommie: + - bugfix: Areas created with the "land claim" blueprints are no longer hazardous + to free golems. + Jacquerel: + - rscadd: Lightgeists under AI control will selflessly heal any wounded creature + that they see. + - balance: Lightgeists can no longer repair non-organic tissue. + - admin: The imaginary friend smite now allows selecting "offer to ghosts" instead + of having to perform that poll yourself manually. When offering to ghosts you + can also offer for several ghosts to volunteer at the same time. LT3: - bugfix: Fixed disease outbreak viruses sometimes getting stuck invisible from medHUDs @@ -263,6 +380,23 @@ Nerev4r: - balance: The armor of contractors has been lowered, and their baton holster costs another point to get. + MTandi: + - qol: You can fill microwave with stuff by hitting it with a box full of stuff. + Sealed101: + - rscdel: removed new player status tab Readiness Status + - rscadd: added a Ready Status Blip on the Collapse Menu button + - bugfix: golems that ate plasma are properly immune to ash storms +2023-08-06: + Fikou: + - bugfix: sniper scope and kinesis should work without widescreen + Jacquerel: + - bugfix: Goliaths no longer intermittently reset their target and retarget something + else. + - bugfix: Goliaths can once again step diagonally. + JohnFulpWillard: + - bugfix: Boss music cuts out when you die. + Kryson, MTandi, Zeckle (Mike): + - image: New bottles and holy grenade sprites Rhials: - qol: Most of the colored oval-shaped portals faintly glow now. Cool! Senefi: @@ -279,6 +413,13 @@ - qol: Mechs universally have diagonal movement as to avoid unresponsive movement, as block diagonal movement was having unintended side effects and was actually intended for pivot step mechs. + Vekter: + - bugfix: Fixed the DNA Infuser's circuit board missing from the techfab and tech + storage. + Watermelon914: + - bugfix: Fixed being unable to purchase regular-priced uplink items if you bought + the discounted variant of it. + carlarctg: - rscadd: Cursed crewmembers can randomly, extremely rarely, spontaneously combust for no reason. - rscadd: Cursed crewmembers can get zapped by nearby light tubes. @@ -298,10 +439,25 @@ - qol: Bluespace Artillery Cargo Crate includes a guide paper for how to assemble it. SkyratBot: + necromanceranne: + - bugfix: Restores a lost feature, Clarkes and Odysseus mechs once again can pivot + on a dime and step in the same button press. + - qol: Mechs universally have diagonal movement as to avoid unresponsive movement, + as block diagonal movement was having unintended side effects and was actually + intended for pivot step mechs. + timothymtorres: - rscadd: Add pAI movement freedom when emagged. - qol: The "Malicious Software Detected" button has been appropriately renamed to "Reset Software" for when pAIs are emagged - qol: Add a new law notification popup and flavor texts when pAI is emagged +2023-08-07: + EuSouAFazer: + - bugfix: Removed a doubled filing cabnet in Northstar's Library Book Return room + - bugfix: Exorcised uneeded variables from windoors in Meta's Xenobio + Ghommie: + - bugfix: Fixed a logic mistake for chasm fishing that resulted in only generic + items being spawned. + SandPoot: - image: Changed screentips icons to something a lot fancier unified with the LMB / RMB text. - qol: There are accessibility preferences to disable this! Look for "Screentip @@ -318,6 +474,48 @@ - bugfix: fixed missing froth sprites - image: Re-sprites some of the oldest hairstyles 2023-08-08: + Sealed101: + - bugfix: fixed missing froth sprites + - image: bubblegum's blood smack and blood grab use new bubblegum sprites + Senefi: + - qol: Bluespace Artillery Cargo Crate includes a guide paper for how to assemble + it. + Sheits: + - image: Re-sprites some of the oldest hairstyles + Watermelon914: + - bugfix: Fixed particles sometimes being left behind when an object drops all of + its contents whilst having a particle active. + Wisemonster: + - bugfix: Fix mulebots receiving the wrong message when thier cell is added/removed. +2023-08-08: + Ben10Omintrix: + - bugfix: the bee will now care more about polinating + - qol: in case u miscliked the bee queen with a seringe 2 times, the raegent will + not be transfered to the quen if he alredy have this raegent + BlueMemesauce: + - rscadd: Emagged player-controlled bots now get different flavor text (depends + on policy) + - rscadd: Bots are now notified when a silicon toggles them malfunctioning + Comxy: + - bugfix: Damage on limbs get transferred on species change. + GPeckman: + - bugfix: Creatures with nobreath trait will now regenerate oxyloss. Androids, skeletons + and such will no longer be stuck with un-healable damage after being revived. + Ghommie: + - image: Mirrors now display a reflection of the mobs next to them... except for + vampires. + - rscadd: Added an Indebted negative quirk to the game, which gives the holder's + bank account a debt averaging at 15000 credits (with a variation of 1250 cr) + and forces 75% of all earnings towards solving it. A little prize awaits those + who actually extinguish it. + JohnFulpWillard: + - rscadd: Adds the Coroner surgery duffelbag; This replaces Coroner's surgery tools + in their medkit and current duffel, and has the cruel surgery tools instead + of regular ones. + - balance: Cruel surgery tools are no longer premium. + - balance: Coroner's medkit is now premium in the vendor. + - balance: All Coroner medkits are the same, there is no 'large' variant. + - balance: Coroners no longer get a folder. LT3: - bugfix: Advanced viruses that are supposed to be stealth will again actually be stealth to analyzers @@ -333,6 +531,11 @@ - qol: in case u miscliked the bee queen with a seringe 2 times, the raegent will not be transfered to the quen if he alredy have this raegent - rscadd: 4 New skin tones, hooray! + Melbert: + - code_imp: Updated some status effect tick code to be more clear of how long is + elapsing between ticks. Some effects that were inadvertently weakened are now + stronger as a result (fire and some heretic effects). + Sealed101: - bugfix: fixed goliaths digging sand that they can't actually reach (behind windows or inbetween closed turfs) - bugfix: fixed goliaths melee attacking their target despite the target running @@ -353,6 +556,10 @@ - bugfix: Creatures with nobreath trait will now regenerate oxyloss. Androids, skeletons and such will no longer be stuck with un-healable damage after being revived. - bugfix: Fix parasitic infection to cure upon liver removal + Sheits: + - image: fixes weird inconsistency on the neck and butt of the female base sprite + Watermelon914: + - bugfix: Fixed a hard delete that would occur with lua-created atoms. YakumoChen, Thalpy: - rscadd: Chen And Garry's Ice Cream is proud to debut a wide selection of cool new frozen treat flavours on a space station near you! @@ -365,6 +572,28 @@ - bugfix: greyscale color selection menu is now working again in the loadout prefs menu 2023-08-09: + goobliner: + - rscadd: 4 New skin tones, hooray! + itsmeow: + - code_imp: Optimized z-level transition mirages, saving ~0.32s init. + softcerv: + - bugfix: former blobs are no longer able to respawn after having their mind transferred + to a new body. + timothymtorres: + - bugfix: Fix parasitic infection to cure upon liver removal + - qol: Add sounds and flashing effects to slot machines + - sound: Add new ding sound to slot machines from https://freesound.org/people/Natty23/sounds/411747/ +2023-08-09: + Ben10Omintrix: + - refactor: the hivebot is now a basic please report any bugs + CRITAWAKETS: + - rscadd: The Syndicate 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. + CliffracerX: + - image: resprited all duffelbags, including worn and inhand variants to match modern + storage. Fazzie: - qol: 'Many changes in Birdshot''s Library. @@ -386,6 +615,18 @@ - code_imp: Updated some status effect tick code to be more clear of how long is elapsing between ticks. Some effects that were inadvertently weakened are now stronger as a result (fire and some heretic effects). + Ghommie: + - bugfix: Fixed certain aquarium fish eating other fish when not hungry. + - rscadd: Added a score award that counts how many achievements you've unlocked + so far. + - qol: Examining a fishing rod will now provide information on equipped hook, line, + bait, and right click functionality. + - balance: Fishing without a bait will only lower the odds (a smidge less, too) + of catching fish, not other things. + - balance: Catching something that isn't a fish or a living mob won't consume the + bait anymore. + - balance: The Bepis fishing rod will now ignore fish's bait preferences. + Melbert: - rscadd: PAIs can now cast wizard spells should they have any. - rscadd: AIs located in intellicards can now cast wizard spells should they have any. @@ -395,6 +636,26 @@ - rscadd: Repulse will now throw open closets you are hiding within. SkyratBot: - refactor: the hivebot is now a basic please report any bugs + - qol: Abductor Baton Recall now starts linked to their baton, and you can no longer + unlink your baton + - qol: Instant Summons now shows what item is marked over the icon + - bugfix: Fixes Instant Summon's name not updating when marking an item + Sealed101: + - bugfix: fixed basic mobs freezing up when in melee range of a target + Tattle: + - admin: Pings an admin role on discord when a new player joins (when enabled by + config) + Vekter: + - sound: Law changes will now play a sound to silicons impacted by those changes. + dieamond13: + - bugfix: removes a stray obj/item from random metastation wall + necromanceranne: + - bugfix: You can do autopsies on people who were revived and died again after they + had already been dissected. + - qol: Autopsies have become the surgery needed to complete the dissection experiments. + As a result, the dissection surgery has been removed as it is now redundant. + - qol: A coroner knows whether someone has been autopsied and recently dissected + (and thus hasn't been revived) by examining them. - balance: Standardizes some of the nuclear operative entries to have more consistent pricing within their respective categories. - rscadd: Adds some new categories so that players have an easier time navigating @@ -499,6 +760,7 @@ - balance: Removes standard vest from all security lockers and adds 3 of them to the security wardrobe. - bugfix: fixed gibtonite explosions having flames and flash ranges + siliconOpossum: - rscadd: Added greyscale suitskirt, available in clothesmates - rscadd: You can now roll up the sleeves of greyscale buttondown shirts - qol: Re-added previously removed black suitskirt and the RD's tan suitskirt, as @@ -566,26 +828,120 @@ - qol: Uncle Pete's Rollerdome has had its price increased, and the disco machine is no longer unbreakable. - bugfix: fixes kinesis not actually immobilizing or blocking hands of grabbed mobs - - rscadd: Adds Summon Simians, a spell that summons four monkeys or lesser gorillas, - with the amount increasing per upgrade. The monkeys have various fun gear depending - on how lucky you get and how leveled the spell is. If the spell is maximum level, - it only summons normal gorillas. - - balance: Wizard Mutate spell works on non-human races. It also gives you Gigantism - now (funny). If the Race can't support tinted bodyparts, your whole sprite is - temporarily turned green. - - balance: Made Laser eyes projectiles a subtype of actual lasers, which has various - properties such as on-hit effects and upping the damage to 30. - - rscadd: 'Added further support for nonhuman robed casting: Monkeys, cyborgs, and - drones can all now cast robed spells as long as they''re wearing a wizardly - hat as well.' - - balance: Made monkeys able to wield two-handed things again. - - spellcheck: improvised fire extinguishers aren't full of typoes now - Wallem: - - rscadd: T - iain0: - - bugfix: A small clerical error fixed which will cause the Ukrainian station naming - prefix to be properly applied to the Independence Day of Ukraine holiday on - 24th August, rather than overwriting the Indigenous People's Day station prefixes. +2023-08-10: + Boopideedoo: + - bugfix: fixed a Camera in atmos + - rscadd: missing Camera in chem storage + CoiledLamb: + - rscadd: Added wellcheers, a contraband soda with various side effects. + - image: resprites all cans in the drinks icon file + - image: resprites the canholder sprite in storage.dmi + Comxy: + - rscadd: Young Spiders that appear between spiderlings and adult spiders. + - balance: Wizard Spider version has better immunity against temp damage and can + lay webs faster. + - balance: Tangle Spider sucks more with self-healing but has more health. + - balance: Scout spiderling gets thermal vision. + - balance: Viper deals bonus damage when an enemy is below 20% health. + DeerJesus: + - balance: added the storage implanter to the syndie-kit tactical 'spy' kit to make + it decent. + Derpguy3: + - bugfix: The service cyborg's beverage apparatus is now capable of grabbing coffee + pots and syrup bottles. + Inari-Whitebear: + - bugfix: Metastation Kitchen APC is wired to the grid again. + Jacquerel: + - rscadd: Adds a new technology which utilises Bioscrambler anomaly cores to allow + you to transform into animals. + Momo8289: + - rscadd: Cigarettes can now be placed in and smoked through gas masks, so long + as the mask has no filters installed and is not covering the mouth. + Sealed101: + - bugfix: fixed gibtonite explosions having flames and flash ranges + Singul0: + - balance: Geode Pirates have upgraded their launchpad room to be more usable + - bugfix: Fixes a bug in the navigational computer of the Geode pirates causing + their shuttle to move sideways. + Vincent983: + - spellcheck: fixes one of the virus thresholds saying "scrathing" instead of scratching + carlarctg: + - qol: Biogenerators can be unwrenched + - rscadd: Adds Summon Simians, a spell that summons four monkeys or lesser gorillas, + with the amount increasing per upgrade. The monkeys have various fun gear depending + on how lucky you get and how leveled the spell is. If the spell is maximum level, + it only summons normal gorillas. + - balance: Wizard Mutate spell works on non-human races. It also gives you Gigantism + now (funny). If the Race can't support tinted bodyparts, your whole sprite is + temporarily turned green. + - balance: Made Laser eyes projectiles a subtype of actual lasers, which has various + properties such as on-hit effects and upping the damage to 30. + - rscadd: 'Added further support for nonhuman robed casting: Monkeys, cyborgs, and + drones can all now cast robed spells as long as they''re wearing a wizardly + hat as well.' + - balance: Made monkeys able to wield two-handed things again. + - spellcheck: improvised fire extinguishers aren't full of typoes now + Wallem: + - rscadd: T + improvedname: + - balance: Removes standard vest from all security lockers and adds 3 of them to + the security wardrobe. + xPokee: + - bugfix: Fixed the tramstation kitchen not having any lights + - image: added a wagging tail for cake cats to match other cats +2023-08-11: + EOBGames, MrMelbert: + - rscadd: Mars celebrates the 250th anniversary of the Martian Concession this year, + and this has brought Martian cuisine to new heights of popularity. Find a new + selection of Martian foods and drinks available in your crafting menu today! + FernandoJ8: + - bugfix: crafting recipes without a name, such as the mothic pizzas, will inherit + the name of the item they make + Fikou: + - bugfix: fixes kinesis not actually immobilizing or blocking hands of grabbed mobs + - balance: Space Ninja's energy net uses a projectile to catch people now. + Ghommie: + - bugfix: Fixed fired foam darts, gumballs and (harmless) lollipops being embeddable. + - bugfix: Projectiles that should embed while being reusable will now do so correctly, + actually embedding the reusable casing instead of a shrapnel. + - balance: Arrows are generally more likely to embed now, except for blazing ones, + that kind of just blaze. + - qol: the quiver storage now uses numerical stacking (like botany and ore bags, + or the RPED, for example). + - bugfix: Fixed an oddity with morgue corpses being shakeable like they're just + unconscious. + - bugfix: Mirror reflections no longer display progress bars or runechat. + - bugfix: Fixed an oversight with processable items that lead to the same chat message + being sent multiple times. + LT3: + - bugfix: Large airlocks are now a subtype and function on both tiles + Melbert: + - bugfix: Fix some missing wizard spellbook flavor + - bugfix: Fixed latejoiners being affected by certain things twice, such as Summon + Guns and Summon Magic + Paxilmaniac: + - bugfix: The bulbs of lights will now have an emissive glow when on, making it + so they appear active no matter how dark the area surrounding them happens to + be. + Pickle-Coding: + - balance: Changeling arm blade has an armour penetration of 35%. + - balance: Changeling arm blade has a wound bonus of 10, from -20. + - balance: Changeling has a bare wound bonus of 10, from 20. + Vekter: + - bugfix: FRAG-12 shells no longer require sulfuric acid, instead needing 10 fluorosulfuric + acid. This should prevent them from leaving byproducts if crafted in a specific + way. + Vincent983: + - spellcheck: improvised fire extinguishers aren't full of typoes now + Watermelon914: + - admin: 'Added new lua functions: SS13.is_valid, SS13.stop_tracking, SS13.new_untracked, + SS13.type and SS13.qdel' + carlarctg: + - qol: Drill module automatically disables if it's about to drill into gibtonite + iain0: + - bugfix: A small clerical error fixed which will cause the Ukrainian station naming + prefix to be properly applied to the Independence Day of Ukraine holiday on + 24th August, rather than overwriting the Indigenous People's Day station prefixes. vinylspiders: - bugfix: Fixed fired foam darts, gumballs and (harmless) lollipops being embeddable. - bugfix: 'Projectiles that should embed while being reusable will now do so correctly, @@ -603,6 +959,11 @@ SkyratBot: - balance: Change mousetraps to kill mice instead of damaging them (except regal rats) + timothymtorres: + - rscadd: Add admin blackhole shuttle event with a normal version and suicidal version. + - bugfix: Fix several shuttle event runtimes +2023-08-12: + Cheshify: - qol: North Star's Cytology and Xenobiology are now significantly more usable. - rscadd: North Star's Genetics has been tweaked. - bugfix: The North Star's AI SAT has a working vent and it's service hall has a @@ -620,6 +981,15 @@ - rscadd: Lets you grind things into a hauntium reagent which works similarly to the solid form but is versatile and has some unique effects. - bugfix: X'ing out of the podpeople no soul prompt will no longer harvest the seeds. + Derpguy3: + - bugfix: The metastation law office's shutters now function again. + EuSouAFazer: + - qol: The flowers in Meta's chapel are no longer stacked atop eachother + Ical92: + - bugfix: fixed missing departments and names in request consoles + Melbert: + - bugfix: Fix antimagic effect not expiring + Paxilmaniac: - qol: Gigabeacons no longer need to be constructed like standard machines, instead being printed as items that can be deployed quickly inhand without tools. - qol: Gigabeacons are no longer their own research node, instead being a part of @@ -634,6 +1004,59 @@ - bugfix: baseballs are now small sized rather than large - bugfix: fixed missing departments and names in request consoles - qol: Gateway access no longer requires a Silver ID. + Wallem: + - rscadd: T + carlarctg: + - balance: Lepton Violet (wabbajack) shuttle must be unlocked by having some form + of polymorph happen in-game first (Pride Mirror or the cursed springs are the + most accessible sources) + - balance: Scrapheap shuttle can only be bought if the Cargo budget is below 600 + credits, and the shuttle has just less than half of its usual refueling time + left. However, it gives the cargo budget an influx of 3000 credits! + - qol: Uncle Pete's Rollerdome has had its price increased, and the disco machine + is no longer unbreakable. + timothymtorres: + - qol: Emergency shuttle now gracefully display occupancy limits and prerequisites + in the communication console. + - balance: Change mousetraps to kill mice instead of damaging them (except regal + rats) +2023-08-13: + FernandoJ8: + - bugfix: Plumbing Constructors can now deconstruct every machine they can make, + including the plumbing IV. + - bugfix: Plumbing IV drips no longer drop metal when deconstructed + - bugfix: rabbits are now small-sized rather than human-sized, as well as capable + of being picked up + - bugfix: baseballs are now small sized rather than large + Ghommie: + - bugfix: Fixed wheelchairs being silent. + IndieanaJones: + - bugfix: After a collective brain fart lasting for 6 months, monkeys and xenomorphs + now know how to remove embedded objects from their own bodies. + Jacquerel: + - bugfix: Giant Spiders only have an antag datum if created by the round event. + - balance: Flesh spider eggs hatch into adult spiders instead of baby spiders. + - balance: The eggs spawned by the start of the spider infestation event hatch into + adult Midwife spiders instead of baby ones. + JohnFulpWillard: + - qol: The mining order console is now a bit more compact, and the search bar works + regardless of which tab you are currently on. + - bugfix: X'ing out of the podpeople no soul prompt will no longer harvest the seeds. + - bugfix: Mime spell books don't eat itself when used in the dark or cancelled out + of. + - qol: Gateway access no longer requires a Silver ID. + Melbert: + - bugfix: Fixes Shadow Walk + Sealed101: + - bugfix: Labor Camp Sustenance vendor is no longer free; instead, it takes your + labor points that you'd otherwise use for paying off your point goal. + - rscadd: you can upgrade laser pointers with a bluespace crystal to let them shine + through walls at double the power cost, if the laser in the pointer is of tier + 3 or higher. + - qol: laser pointer charge can be seen by examining it + - bugfix: fixed laser pointers luring dead cats when shone upon + - code_imp: laser pointer code cleaned up a tad + TheBoondock: - rscadd: Added Pulse of Entropy, a new ritual for rust heretic unlocked after leeching walk. This ritual can be completed with 20 iron sheets, 2 garbage items to rust in a 4 tiles radius round the rune. Useful for establishing bases and fighting @@ -654,6 +1077,12 @@ of. - qol: Emergency shuttle now gracefully display occupancy limits and prerequisites in the communication console. + dieamond13: + - rscadd: Lets you grind things into a hauntium reagent which works similarly to + the solid form but is versatile and has some unique effects. + lizardqueenlexi: + - bugfix: The Nuke Op/Lone Op sniper briefcase now properly contains a sniper rifle. + san7890: - refactor: Morphs are now basic mobs with a nice new ability to help you change forms rather than the old shift-click method, much more intuitive. - admin: With the morph rework comes a new ability you can add to mobs, "Assume @@ -679,6 +1108,20 @@ vent and scrubber on the configuration panel. /:cl:' SkyratBot: - bugfix: You can no longer stand up without legs. + - bugfix: Growing spiders will now retaliate against you like they were always meant + to. +2023-08-14: + CoiledLamb, Jacquerel: + - rscadd: Adds mining weather radio + EOBGames: + - bugfix: a few issues with Martian food + EuSouAFazer: + - bugfix: The chef can no longer close the shutters in Meta's HoP office. + - bugfix: Doctors no longer spawn in the bedroom in the northstar + - qol: The icebox bridge had its items moved to better positions. No items were + added or removed, and none left their original room (except the captain's electric + razor, which went to the bathroom). + Hatterhat: - bugfix: Projectile damage multipliers on guns are now reflected in their combat information. - admin: Admins can now make a gun's fired projectiles better or worse at wounding @@ -698,12 +1141,38 @@ - bugfix: The modular receiver is now only printable from a hacked autolathe. - bugfix: The chef can no longer close the shutters in Meta's HoP office. 2023-08-15: + Helg2: + - bugfix: Inquisitor Commander now has just 1 box. + Jacquerel: + - bugfix: If you shapeshift into a mob which can eat things such as player corpses, + those things will fall out when you stop shapeshifting + - bugfix: Player-controlled basic mobs with ranged attacks can now only fire about + as fast as AI-controlled ones. + Shroopy: + - bugfix: You can no longer stand up without legs. + Vincent983: + - qol: xenos rest verb now is a hud button instead + lizardqueenlexi: + - bugfix: The modular receiver is now only printable from a hacked autolathe. +2023-08-15: + ABS-Helmet: + - image: modified glass pane wall mount icon + Comxy: + - rscadd: Added big slappy + - image: Added big slappy parts and big slappy sprites + DeerJesus: + - bugfix: you can no longer tactially stealth-hide donuts in your right hand + FernandoJ8: + - bugfix: mob holders no longer bug out and harddel when put into evidence bags. GoldenAlpharex: - bugfix: The formatting on PDA messages displayed to observers is now back to what it used to be, rather than being all bold. - bugfix: PDA messages are now displayed to observers from dead players, and not just dedicated observers. - admin: The banning panel is now set to have all bans be global by default. + Kapu1178: + - rscadd: Lockers, crates, and machines no longer block click attempts in adjacency + checks. Basically, you can reach tables cornered between lockers/machines. Melbert: - qol: Minor mapping work to Metastation. Wallmounts, decal changes, etc - especially around Medbay. @@ -712,6 +1181,24 @@ - bugfix: Medbots made with tactical medical kits now have the correct skin SkyratBot: - bugfix: fixed the Tram Pod Bay having no lights + OrionTheFox: + - bugfix: fixed the Tram Pod Bay having no lights + ShizCalev: + - bugfix: Medbots made with tactical medical kits now have the correct skin + SmoSmoSmoSmok: + - refactor: ice whelps have been refactored to basic mobs + - rscadd: ice whelps have a new dangerous ability which theyll use once their enraged + meter is full + YehnBeep: + - bugfix: fixed missing seating at the All American Diner + carlarctg: + - rscadd: Adds a unique medibot to the Syndicate 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 + ship, renamed) + - bugfix: Fixed an issue that made mapload medibots unable to load custom skins. + vinylspiders: - bugfix: fixes a bug that can cause emotes to stop working if a client is being created or deleted - bugfix: fixes immerse overlays not being added the first time a mob enters a water @@ -731,6 +1218,12 @@ Onule: - image: modified light fixtures' sprites and overlays to be more pronounced SkyratBot: +2023-08-16: + DeerJesus: + - bugfix: removes bodybag welding tooltip + FernandoJ8: + - bugfix: items no longer stay in your hands after their respective arm is dismembered + MTandi: - refactor: Refactored Mech UI - refactor: Refactored mech radio into a utility module, adding extra slot to all mechs @@ -796,6 +1289,9 @@ - balance: Tangle spider's acid injection per bite reduced from 5 to 2.5. - bugfix: Colored ammo bands, such as those on .357 and .38 speedloaders, no longer permanently disappear upon icon update. + Onule: + - image: modified light fixtures' sprites and overlays to be more pronounced + OrionTheFox: - rscadd: Added the Bowtie! Bartenders start with one on, but they can also be found in the Bardrobe, Autodrobe, and Clothesmate. No need to tie it either, it's just a clip-on. @@ -810,6 +1306,21 @@ Rebirth to ten seconds, additionally Ash ascension has Bomb immunity added to the resistances it offers (no stun immunity though) - qol: the chemistry heater can now be unwrenched. + Paxilmaniac: + - image: The Mosin-Nagant has been given new sprites and a reflavor, looking for + the old rifle? Look for the Sakhno Precision Rifle. + - balance: The tiniest balance thing, but since Silverscales use the Sakhno-Zhihao + 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. + SyncIt21: + - bugfix: multiple balloon alerts when the plumbing RCD is low on ammo + - code_imp: organized all plumbing designs into static lists for memory savings + - refactor: removed unused vars for further memory savings + YehnBeep: + - bugfix: fixed a disconnected APC in Delta's tech storage. +2023-08-17: + BlueMemesauce: - rscadd: 'Add policy for sentient mobs that were revived by lazarus injector (depends on config) @@ -844,6 +1355,15 @@ - rscadd: Added 28 new food recipes! - bugfix: Goliaths will try to attack mechs with their tentacles. - spellcheck: fixed the rat king text saying that they're summoning rats + DaydreamIQ: + - balance: Ascending as an Ash Heretic now reduces the cooldown of Nightwatchers + Rebirth to ten seconds, additionally Ash ascension has Bomb immunity added to + the resistances it offers (no stun immunity though) + DeerJesus: + - bugfix: Makes the ectoplasm anomaly not randomly move so deadchat can actually + control it + - balance: metal bat damage changed from 12 -> 20 + FernandoJ8: - bugfix: dismemberment moodlets are replaced by a lesser mood debuff when you recover the limb in question. - balance: dismemberment moodlets can now stack for each limb you lose, and are @@ -859,6 +1379,25 @@ Iajret: - bugfix: Mapped or spawned in rusted walls (such as on Birdstation or on charlie ghost role) can now be fully cleaned without needing to deconstruct them. + - bugfix: items implanted on arms no longer become permanently stuck in-hand when + their limb is dismembered + - bugfix: quickly sheathing and unsheathing the vorpal scythe can no longer bug + out and prevent its effects from being applied + FlufflesTheDog: + - bugfix: Spaceacillin will once again provide antiviral effects for the deceased + Hatterhat: + - bugfix: Colored ammo bands, such as those on .357 and .38 speedloaders, no longer + permanently disappear upon icon update. + Helg2: + - bugfix: Skeletons now heal burn damage with milk once again. + IndieanaJones: + - balance: Hunter and viper spider toxins no longer deal liver damage. + - balance: Tangle spider's acid injection per bite reduced from 5 to 2.5. + Jacquerel: + - bugfix: Gravitational Anomalies will now correctly clean up after themselves, + instead of leaving an area of the station permanently heavy or with no gravity + at all. + - bugfix: Goliaths will try to attack mechs with their tentacles. LT3: - bugfix: Base large airlock subtype no longer spawns a normal sized airlock - image: Added mapping icons for large airlocks @@ -890,12 +1429,66 @@ the ability's name, so you can much more quickly see what the ability is. - bugfix: formal closet will no longer spawn with two 'error' icon suits inside of it + LemonInTheDark: + - balance: De-escalates terry powergaming by reducing the strength of sec + Melbert: + - balance: Red toolboxes go faster + MidoriWroth: + - rscadd: Added 28 new food recipes! + Mothblocks: + - rscadd: You can now set your voice to just blips. + Vincent983: + - qol: the chemistry heater can now be unwrenched. + Y0SH1M4S73R: + - bugfix: Head Revolutionaries no longer count towards a revolution's defeat if + they have become simplemobs, basic mobs, or xenomorphs. + iwishforducks: + - spellcheck: fixed the rat king text saying that they're summoning rats + mc-oofert: + - bugfix: fixed border-only firedoors being able to be walked through while closed + san7890: + - bugfix: Beam rifles will no longer inappropriately retain any bonuses they may + gain from wizardry. + - bugfix: Inappropriate stack traces over bonuses being applied to components that + gain bonuses innately (like Mythril stacks) should cease. + vinylspiders: + - bugfix: fixes a harddel in particle holders +2023-08-18: + DeerJesus: + - bugfix: replaced injector with working passive vent in birdshot incinerator + - bugfix: conveyor lever in birdshot incinerator + - bugfix: fixes all the martian drinks having 20 boozepower + EuSouAFazer: + - bugfix: Moved the RD's plant to its proper place in Northstar + Fikou: + - spellcheck: fixes the name of the incline bench press + - balance: you cant speed up the big slappy with slime potion + Ghommie: + - bugfix: Fixed some jank with the dynamic threat curve. + Hatterhat: + - spellcheck: Fixed a lack of plurality when ejecting multiple casings from a revolver. + IndieanaJones: + - rscdel: Removed tiny mob sprite abilities for large mobs + - rscadd: Add a Self Seethrough ability, given to most large mobs and all mobs affected + by a fugu gland + - bugfix: Space Dragon's overlay will no longer vanish at times - qol: Xenomorph Sentinel and Ambusher Spider's sneak ability now has a transition to a lower alpha as opposed to being immediate. - qol: The sneak ability now uses balloon alerts as opposed to chat alerts. - bugfix: Fixed the Xenomorph Sentinel's Sneak ability icon being an error. - spellcheck: Fixed a lack of plurality when ejecting multiple casings from a revolver. - bugfix: fixes all the martian drinks having 20 boozepower + Jacquerel: + - admin: Adds Spider, Goliath, and Meteor Heart actions to the "Grant Mob Action" + menu. + - admin: Four players can ride the speedwagon + - bugfix: Turning into a space dragon with the polymorphic inverter will no longer + leave you existing in two places + - balance: You can no longer use the belt to transform into monkeys or xenomorphs, + for technical reasons. + - admin: The Add Mob Ability menu now prefixes the typepath of the ability with + the ability's name, so you can much more quickly see what the ability is. + Mothblocks: - rscadd: Engineers now have an RCD round start. - balance: RCD construction/deconstruction effects can now be attacked in order to cancel them. You can get the anti-disruption upgrade disk to prevent this. @@ -942,6 +1535,53 @@ SkyratBot: - bugfix: No more stacked items in Meta's custodial closet - bugfix: you can actually tell what hand a reagent dartgun is in now + mc-oofert: + - rscadd: cybernetic moth eyes and their variants + - bugfix: luminescent eyes no longer make you look like a cyclops in the dark + necromanceranne: + - rscadd: Settler quirk! Conqueror the great outdoors....in space. Just make sure + nobody asks you to get anything from the top shelf. + vinylspiders: + - image: bowtie sprite has been tweaked slightly to look a little bit more bowtie-ish + - bugfix: formal closet will no longer spawn with two 'error' icon suits inside + of it +2023-08-19: + DeerJesus: + - bugfix: you can actually tell what hand a reagent dartgun is in now + EuSouAFazer: + - qol: Delta's Detective Office looks better now. + - bugfix: No more stacked items in Meta's custodial closet + Ghommie: + - bugfix: Fixed dynamic. + Helg2: + - bugfix: fixed lavaland beach bartender closets looking off. + - qol: CTF assault class' (with shotgun and rocket gloves) description now mentions + that it has low armor and increased moving speed. + - balance: Decreased CTF recharge start delay for shields from 20 seconds to 12 + seconds. + - balance: Marksmans rifle now has 1.7 scope. + - bugfix: When toggling instagib mode for CTF and pressing a cross now will just + cancel instead of proceeding. + - bugfix: When clicking on other CTF teams spawners and after you already chose + your team no more will ask you to join some other team to make them even. + - bugfix: Base iron floor tiles now will be able to stack with other base iron floor + tiles after being reskined to the base subtype. + - bugfix: '[Waystation] Windoor for secret documents now can be accessed with away + station secoff''s id.' + - bugfix: '[Waystation] Deleted a window on the same place as windoor so it won''t + block your path to secret documents.' + Jacquerel: + - bugfix: the goliath and watcher mating season has ended and population has returned + to normal levels + carshalash: + - qol: Martian fried noodles now requires 2 grown peanuts instead of salted peanut + packet. + mc-oofert: + - bugfix: you can now toggle repair droids and plasma engines on mechas again + - bugfix: you can no longer destroy syndicate modsuits by just being on fire + necromanceranne: + - bugfix: Makes sure settlers are SHORTEST. + san7890: - refactor: Regal Rats have been refactored into basic mobs. They should be a bit smarter and retain their docility (until attacked, in which case you should prepare to get rekt by summoned rats), and properly flee when they can instead @@ -960,6 +1600,9 @@ - bugfix: '[Waystation] Deleted a window on the same place as windoor so it won''t block your path to secret documents.' 2023-08-20: +2023-08-20: + EuSouAFazer: + - qol: Made the cytology lab in many maps much more convenient. Fikou, Armhulen, Sheets (+rep for Mothblocks and Potato): - bugfix: RD MODsuit outfit (admin only) no longer has a beret that blocks the activation of the suit @@ -970,6 +1613,10 @@ tool for editing transforms. - rscadd: MODLink system, available through scryers (from RnD and Charlie Station) and through MODsuits. Lets you call people with holographs! + Jacquerel: + - qol: Added some textual feedback to new watcher abilities + - balance: Watchers will not attack for a short period following their gaze attack + - bugfix: Watchers won't interrupt one ability to use the other one LT3: - bugfix: Rotated multi-tile airlocks display correctly and won't create an invisible box next to itself @@ -1006,6 +1653,26 @@ - qol: Made the cytology lab in many maps much more convenient. 2023-08-21: SkyratBot: + Striders13: + - admin: admins can now upload files to the server up to 5mb (used to be 2.5mb) + - config: file upload restriction is now config + iwishforducks: + - bugfix: Some RCD constructs took more material than manual construction. The RCD + cost should be consistent in comparison to manual construction now. + mc-oofert: + - bugfix: ripley MK2 upgrade now properly transfers servos + - spellcheck: inserting parts into mechas now properly says "installed" instead + of "intalled" + spookydonut: + - bugfix: Incompatible quirks in existing savefiles shouldn't be possible anymore. + zeroisthebiggay: + - bugfix: healing holoparas will no longer kill slime people +2023-08-21: + Deadgebert: + - qol: Added two magboots to engine SMES room on icebox station + Ghommie: + - bugfix: Fixed embedding for projectiles. + Jackal-boop: - balance: the lion hunters rifle has been pegged down the knowledge tree. to make sure the tree is kept happy, the rust path and blade path can access rust charge - rscadd: rust charge @@ -1017,6 +1684,58 @@ - code_imp: HUMAN_MAXHEALTH was made into a more formal define. - bugfix: Combat info readouts (the ones you get from examining ammo/melee weapons/etc) should now be more accurate to the increased health people have. +2023-08-22: + CoiledLamb: + - bugfix: wellcheers is now based on sanity rather than mood + - image: resprites martian cans + - image: adds inhands for martian cans and wellcheers + - image: minor tweaks to other cans + - spellcheck: updates wellcheers mood text + DATA-xPUNGED: + - rscadd: Sacrificed heretic targets will now receive a phobia of heresy instead + of a phobia of the supernatural. Sacrificed heretics will not get this phobia, + but will lose knowledge points instead. + DeerJesus: + - rscadd: Adds green jester shoes that jingle to the autodrobe! + Ghommie: + - bugfix: The "Unlocked Achievements" score will now be properly saved at the end + of the round the first time it's loaded. + - rscadd: You can now feed fish with the can of fish feed without having to put + the fish in a aquarium first. + - balance: Some fish may survive in different, harsher atmospheres if given the + amphibious trait, like chasm chrabs on lavaland. + - qol: aquarium now uses balloon alerts when feeding fish. + - bugfix: The wary and shiny lover no longer incorrectly remove difficulty from + the minigame if conditions aren't met. + Helg2: + - bugfix: '[Birdshot] Morgue now has coroner''s surgery duffel bag instead of regular + surgery duffel.' + Ical92: + - bugfix: fixed beakers disappearing when swapped in a chem heater + IndieanaJones: + - balance: Lasers now have increased energy cost, reverting the cost back to the + initial value before the laser buff. + Jacquerel: + - balance: Watchers have less health + - balance: You can't be overwatched by several watchers at a time + - balance: Watchers won't overwatch you instantly upon seeing you + - balance: Goliaths won't launch tentacles at you instantly upon seeing you + JohnFulpWillard: + - refactor: AI's player-tracking eyes received an unwanted obligatory update, and + should now not tell you that a player is untrackable when they clearly obviously + can be. + - bugfix: Bots that can't be controlled (like beepsky) no longer has a stray 0 at + the very right side of its UI. + LukasBeedellCodestuff: + - rscadd: Added compact shotgun to the hos locker + - rscadd: Added compact shotgun as a traitor objective + - balance: gives the compact shotgun 1 extra shot + Melbert: + - bugfix: Fixed some tooltips in the sec records UI showing "false"s where they + shouldn't. + Profakos: + - bugfix: Mobs whose human appearance is set dynamically will once again have their + bespoke names and descriptions, instead of Unknown, with a blank description. Rhials: - rscadd: Ninjas can now temporarily disable cameras with the Ninja MOD right-click hacking ability. @@ -1045,6 +1764,17 @@ - qol: aquarium now uses balloon alerts when feeding fish. - bugfix: The wary and shiny lover no longer incorrectly remove difficulty from the minigame if conditions aren't met. + SyncIt21: + - code_imp: removed unused procs in ore silo + - code_imp: merged repeated code segments when using materials from the ore silo + into a single proc + - code_imp: added auto docs & cleaned up some procs + - refactor: logging when an item is inserted or sheets are ejected from the silo + is now handled directly by the silo itself + - bugfix: plumbing ducts connects to other plumbing machinery again + - bugfix: you can detach signaller from wires without the machine deconstructing + itself + Timberpoes: - rscdel: Traitor objectives to place posters and graffiti the station have been removed. - rscadd: The items associated with the poster and graffiti objectives can now be @@ -1089,6 +1819,11 @@ - image: adds inhands for martian cans and wellcheers - image: minor tweaks to other cans - spellcheck: updates wellcheers mood text + YehnBeep: + - qol: Satchels can now be crafted using the same recipe (4 cloth) as backpacks. + - bugfix: Fixed a light inside a wall on Delta Station. + dieamond13: + - image: adds new sprites for opened fireaxe/mech crowbar cabinets. distributivgesetz: - rscadd: Replaced slime clone damage with a "Covered in Slime" status effect that deals brute damage over time and can be washed off by standing under a shower. @@ -1185,6 +1920,71 @@ as the tram moves - code_imp: Tram landmarks are now all subtyped instead of map varedits SkyratBot: + Ben10Omintrix: + - refactor: the goldgrub has been refactored please report any bugs + - rscadd: the goldgrub can now be tamed and he can have babys + DATA-xPUNGED: + - rscadd: You can now fully color your hair with a hair spray! + - qol: splits hair sprays are now smoother on the transition, similar to the short + fades. + Deadgebert: + - bugfix: Birdshot pharmacy airlock now requires pharmacy access + FlufflesTheDog: + - bugfix: Taking a nap can once again heal minor wounds + - bugfix: A breath of healium will no longer knock you out for eternity + - bugfix: Healium sleep now respects sleep immunity + Melbert: + - code_imp: Cleans up limb wound examine text code a tad. + Rhials: + - bugfix: Metastation's arrivals area no longer has an intercom overlapping with + the request console. + ZephyrTFA: + - bugfix: pda messages are no longer hidden from dead players who are not observers +2023-08-24: + Fikou: + - rscadd: wizards are now introverts + JohnFulpWillard: + - balance: The Traitor's Camera bug is now a tablet app that works like a silent + camera console with an extra ability to track people through their nearby cameras. + MidoriWroth: + - bugfix: Moussaka now only uses eggplants instead of eggplants and potatoes + - bugfix: Pita bread no longer burns on the griddle/oven + Nerev4r & Zydras: + - image: Adds messenger bags to character setup and drobes/lockers! + Rhials: + - rscadd: The roundend report will now read out any achievements ("cheevos" as you + may know them) earned by players over the course of the round. + Vekter: + - balance: Grilles will now take 0-1 damage every time they shock something. + - balance: Powersinks are now available earlier in traitor progression. + YehnBeep: + - qol: Icebox perma now has holopads. +2023-08-25: + Ben10Omintrix: + - bugfix: regal rats now run away from whoever attacked them + - rscadd: new pet behavior which makes pets defend their owners if they got attacked + Deadgebert: + - qol: Adds air supply for cycling airlocks in ordnance and atmos incinerator on + all stations + - qol: Makes internal incinerator chamber a vacuum + - bugfix: Adds missing incinerator airlock control console to Tram station + Derpguy3: + - bugfix: Rotated a water tank in icebox's lower service hall, connecting the plumbing + to the water source. + Dmeto: + - bugfix: Some incident display adverts on Northstar and Birdshot have been unobstructed. + Donglesplonge: + - balance: removes the access restrictions from all animals found under the livestocks + tab of the cargo order console, now assistants can private order animals for + their farms without access hunting + Fikou: + - bugfix: fixes multitools possibly randomly losing their buffer + - bugfix: fixes modlinks checking battery charge without a battery and working without + charge + - qol: modlink stuff is a bit more explained + - bugfix: modlinks printed from rnd no longer start with a frequency (remember to + copy it from another one with a multitool buffer, robotics starts with 2 NT + frequency linked ones) - balance: ninja's stealth module gives silent footsteps when active - balance: all ninjas now have the light step and freerunning quirks - balance: ninja's hacker module shove no longer stuns in 1 hit. first shove knocks @@ -1242,6 +2042,33 @@ - balance: removes the access restrictions from all animals found under the livestocks tab of the cargo order console, now assistants can private order animals for their farms without access hunting + Guillaume Prata: + - qol: QM jumpsuit/skirt expose the torso when adjusted. + Helg2: + - bugfix: fixed apocalypse rune applying invisibility to mobs. + - bugfix: Unholy water preview icon is now similar with the icon it has. + LT3: + - rscadd: Immovable rod will now battle the unstoppable tram should they cross paths + - bugfix: Birdshot's maint tram doors now work properly + - bugfix: Tramstation's exterior light fixtures no longer get destroyed as soon + as the tram moves + - code_imp: Tram landmarks are now all subtyped instead of map varedits + distributivgesetz: + - rscdel: Removes miscellaneous sources of clone damage from the game. + iwishforducks: + - bugfix: You should be able to click on lattices on icebox with the RCD and construct + a floor now + mc-oofert: + - rscadd: becoming a felinid makes your brain smaller (visually) +2023-08-26: + GoldenAlpharex: + - bugfix: Fixes the recycler being able to grind the server to a halt by trying + to recycle the same sheet worth of material over and over and over again. + Guillaume Prata: + - qol: Medical Kiosk now have their wand removed with a right click, got new screentips + and have a few of its chat messages turned into balloon alerts. + YehnBeep: + - qol: Messenger bags can be crafted with 4 cloth. distributivgesetz: - rscadd: Replaces decloning clone damage with a strike system that you can replenish with Mutadone. @@ -1259,6 +2086,49 @@ can now be destroyed much easier and cut with wirecutters without unwrenching. - bugfix: Borgs no longer get permastunned by emotes - bugfix: Borg hud should not fuck up in few situations + iwishforducks: + - bugfix: You should no longer attack RCD effects when they're done constructing. + san7890: + - admin: The "HREF Dock Exploit" message should now contain a bit more usable information + (such as a jump link) so you can investigate if something is really going wacky + with shuttles. + vinylspiders: + - refactor: fixed a bunch of instances of callbacks being qdeleted and cleaned up + related code +2023-08-27: + CoiledLamb: + - bugfix: the coroner medkit can now hold every item it spawns with + Deadgebert: + - bugfix: multitool can be used on APC/Teslacoil/SMES/emitter if it has exposed + wires. + - qol: Icebox monsters no longer spawn close enough to aggro Lia at round start + Fikou: + - bugfix: quartermasters get their voice of god power boost correctly + Ghommie: + - bugfix: Fixed the double-barreled shotgun not working properly + - qol: The Achievements UI now shows how many people have unlocked a given achievement. + - bugfix: The "Skills" Category for achievements should no longer be hidden. + Jacquerel: + - bugfix: Watchers won't retain an ethereal outline of their wings hovering over + their dead body. + Kubisopplay: + - bugfix: Borgs no longer get permastunned by emotes + - bugfix: Borg hud should not fuck up in few situations + MTandi: + - bugfix: Fixed Phazon construction message typo + RikuTheKiller: + - bugfix: Light eaters can no longer be eaten by their higher-grade brothers, the + trash eaters. (recyclers) + SyncIt21: + - bugfix: zipping a duffle bag closes the UI of all storage items opened inside + it + YehnBeep: + - qol: Stabilized yellow slime extracts no longer spam a message every charge pulse + (but examining characters will still show that it's active). + YesterdaysPromise: + - rscadd: 'Gave snow legions a separate corpse-drop pool: ash walkers excluded, + but eskimos included.' + carlarctg: - rscadd: Adds a syndicate AI card for nuke ops. Costs 12 TC, can be refunded. Activating it in-hand opens up a ghost poll like normal reinforcements. Base interaction range for syndicate AIs is one, which means they can handle electronics only @@ -1294,6 +2164,31 @@ - bugfix: fixed a bug that could cause the altar's religion selection ui to bug out if a previous chaplain left via cryo without selecting a religion themselves. 2023-08-28: + iwishforducks: + - balance: Railings now only cost 2 rods and are much easier to construct. But they + can now be destroyed much easier and cut with wirecutters without unwrenching. + mc-oofert: + - qol: rats no longer spawn on multiz cable hubs + necromanceranne: + - bugfix: Ops wanting to get the CQC kit will actually get given the kit, and not + just the CQC book. + tf-4: + - spellcheck: Fixed a spelling error with the daps emote. + vinylspiders: + - bugfix: greyscale colors will now update on the mob when modifying them via the + VV menu + - qol: inserting new high luminosity eyes will now properly remember the previous + eyes' color and default to that initially +2023-08-28: + Comxy: + - rscadd: New rotator disposal pipe. + - bugfix: Flipped transit tube stations are now accessible in the RPD again. + - image: New rotator disposal pipe sprite. + Das15: + - bugfix: Big fuel tanks' capacity is back to 5000. + Ghommie: + - bugfix: Fixed an issue with the "recolor from string" option in the greyscale + modify menu that resulted in invisible icons. Guillaume Prata: - bugfix: Unary vents have a pressure cap on both their pressuring and siphoning mode now, preventing the bypass trick of putting "infinite" pressure on tiles/pipelines. @@ -1334,6 +2229,23 @@ - rscadd: Proto-NRI/CIN food (and not only food) replicator - rscdel: Green IRP-B (or whatever it was idk idc) NRI MRE, replaced with a new unique one. + Jacquerel: + - bugfix: You can't use the bioscrambler belt to turn yourself into a changeling. + JohnFulpWillard: + - qol: Display case chassis now uses balloon alerts, screentips, examine hints, + etc. Basically, the construction steps are more visible to players. + LT3: + - bugfix: Using an airlock painter on a GAGS airlock works properly + - bugfix: Tram will no longer fly off into space when admins try to reset the contents + MTandi: + - qol: Crafting menu "Can Make" category shows complex recipes first. + Sealed101: + - bugfix: after a long 6 years, alien alloy once again unlocks the Alien Technology + node (the one that lets you print alien alloy) + Watermelon914: + - rscadd: Added associative list variables and associative list variable manipulation + for finer data manipulation and storage. + - rscadd: List Find components will now return the index of the element it has found. distributivgesetz: - rscadd: Add an achievement for saving a cascading engine from the final countdown. - balance: Damaging synchronous mesh blobs now incorporates damage resistance of @@ -1349,6 +2261,56 @@ - bugfix: Quartermaster's Overcoat and Cargo's gorka can now hold stamps in their suit slots, just like their winter coat counterpart - bugfix: Made it easier to place tiles on multi z level holes + mc-oofert: + - rscadd: clickdragging an autolathe changes its output direction + nikothedude: + - bugfix: Woundscans no longer runtime + - bugfix: Normal health analyzers can no longer give the first aid bonus when woundscanning + vinylspiders: + - code_imp: fixed some typos + - bugfix: fixes a runtime with arrow projectiles + xXPawnStarrXx: + - bugfix: fixed corn cobs not making seeds and lying to you in the text box. +2023-08-29: + Ben10Omintrix: + - bugfix: mobs do not get stuck when running away from danger + DATA-xPUNGED: + - bugfix: Quartermaster's Overcoat and Cargo's gorka can now hold stamps in their + suit slots, just like their winter coat counterpart + Fikou: + - bugfix: roundstart modlink scryers now come with the nt frequency + FlufflesTheDog: + - bugfix: Made it easier to place tiles on multi z level holes + - bugfix: Non-surgically debraining someone no longer makes their brain unusuable + Hatterhat: + - bugfix: Ash drakes, colossi, and Bubblegum spawn on Lavaland more often; a sharp + increase from the previous bugged amount of "basically never". + Jacquerel: + - image: progress bars and cleaning particles are now centered on the tile occupied + by the target, if it is a big sprite + LT3: + - balance: Pre-equipped engineering modsuit now includes emergency tether + - balance: Pre-equipped atmospherics modsuit now includes magboots + OrionTheFox: + - rscadd: Cargo now once again has access to a "Cargo Shortskirt", a skirt variant + of their shorts! + - image: tweaks and adjustments to the Cargo resprite have been made, as well as + respriting some missed icons such as the Winter Coats and QM Cloak + Seven: + - bugfix: Syndicate ranged mobs (and probably other basic mobs) properly update + their shell's description to show they are spent. + Vincent983: + - qol: Various jobs have gotten additional programs uploaded at roundstart, engineers + now have the canary and atmospheric scanner programs, atmospheric technicians + now have the supermatter monitor, and Robotisists/RDs now have the silliconnect + program. + carlarctg: + - bugfix: Items worn on a void cloak's suit storage are no longer visible on the + stripping menu. + - qol: Misclicking the turf below a heretic influence no longer leaves a fingerprint. + iwishforducks: + - bugfix: Railings no longer give more metal than they take + san7890: - rscadd: The Lavaland Cursed Slot Machine of Greed suddenly seems a lot more sinister... - refactor: Instead of taking clone damage from the cursed slot machine, you now get a status effect with a number of curses associated with it. There's some @@ -1391,6 +2353,43 @@ - rscadd: Added a set of new donator items - rscdel: Removed older, unused (and broken) donator items 2023-08-31: +2023-08-30: + Ghommie: + - sound: Unlocking an achievement now plays a sound by default. You can change it + in the Sound category of the game preferences. + Melbert: + - balance: If your server has non-human morgue cadavers enabled, you will be guaranteed + one human cadaver no matter what. + - balance: All maps (with the exception of Birdboat) now have an additional morgue + cadaver roundstart. + RikuTheKiller: + - bugfix: Probital overdose no longer causes plasmamen and other inorganics to receive + the longest nap in their lives. + Sealed101: + - qol: Metastation has had more navigate landmarks added, namely for areas like + Medbay, Cargo, Engineering, department heads offices and a few more. + SyncIt21: + - refactor: sheets are merged in a better way when ejected from machines & material + related stuff + - bugfix: rcd can build wallmounts on reinforced walls + - qol: rcd can build directional windows without requiring/building a grill + Timberpoes: + - bugfix: Fixes an issue where role banned players would be able to accept certain + ghost roles they're meant to be banned from. + VladinXXV: + - qol: The coroner can now store scythes in their labcoat and winter coat suit storage. + Ask not for whom the bell tolls... + xPokee: + - bugfix: fixed skeleton wings not being visible from behind while closed +2023-08-31: + Comxy: + - bugfix: Fixes Star Gazer getting buckled + - image: Removes Star Gazer alpha pixels + Fikou: + - qol: removes the nukie tool parcel and places the tools directly in their box + GoldenAlpharex: + - bugfix: Fixes a rare issue that could lead to players entering an infinite disconnection + loop from having a null view. Guillaume Prata: - qol: The "You can't move while buckled to X" is now a balloon alert instead of a to_chat message. Hopefully we all get buckle stuck processing why our inputs @@ -1422,6 +2421,14 @@ Shadow-Quill: - spellcheck: Fixed the ] appearing in cryopod action text. SkyratBot: + LukasBeedellCodestuff: + - bugfix: Changed icebox permabrig door type to be correct + Momo8289: + - qol: Cryotubes will now notify medbay if the patient within is dead, and will + eject them if auto is on. + - qol: Cryotubes will now automatically turn on when a patient enters it if auto + is on, but you can no longer close the cryotube on yourself. + SyncIt21: - bugfix: autolathe prints the correct amount of stacks and merges it with existing stacks on the turf - bugfix: autolathe takes constant time when printing stacks @@ -1429,6 +2436,9 @@ once when printing multiple items & updates UI immediately - sound: Unlocking an achievement now plays a sound by default. You can change it in the Sound category of the game preferences. + iwishforducks: + - bugfix: Space heaters no longer give extra cells when deconstructed + necromanceranne: - 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 @@ -1462,3 +2472,11 @@ master_files olirant: - rscadd: 1 donator plush + nikothedude: + - balance: Prosthetics and slimepeople can now have limbs dismembered + - balance: Slimepeople can now receive slash wounds, but cannot bleed + - balance: Most limbs can now be dislocated + - refactor: Scar backend reworked, scars will be wiped as they update to the new + format + san7890: + - bugfix: The Cursed Slot Machine should now actually give you more than one pull. diff --git a/html/changelogs/archive/2023-09.yml b/html/changelogs/archive/2023-09.yml index a45513671cec7..8d6eeefdd2fea 100644 --- a/html/changelogs/archive/2023-09.yml +++ b/html/changelogs/archive/2023-09.yml @@ -36,6 +36,9 @@ - qol: Metastation has had more navigate landmarks added, namely for areas like Medbay, Cargo, Engineering, department heads offices and a few more. - qol: Adds accessibility to breasts for service members + 1393F: + - balance: megafauna will now gut instead of dusting or gibbing + FernandoJ8: - bugfix: containers can no longer add more water to hydroponic trays than they actually contain. - bugfix: watering a hydroponic tray with amounts of water lesser than 1 will no @@ -188,6 +191,10 @@ meats for the purposes of reagent purity' - bugfix: It's now humanly possible to reach the legendary fisherman rank, get the achievement and the hat. + Guillaume Prata: + - balance: Fanny packs are now silent, no one will get a chat message about what + you put in or take out. + MTandi: - rscadd: Mood buff power and duration depends on the ingredient quality and recipe complexity of the food. - rscadd: Hand-crafted food also gives a non-mood buff. The buff type depends on @@ -264,6 +271,214 @@ - qol: Adds cables under birdshot xeno containment shielding. - bugfix: Machine frames in NorthStar Cyto are now functional. - qol: Minor cable/pipe changes to NorthStar the xeno containment. + Momo8289: + - bugfix: Meth will no longer explode when reacting in a body + Rhials: + - rscadd: Nuclear operatives have expanded the scope of their hiring practices. + Members of all species can now roll nukie! + - qol: The preferences menu now has an option to always be human when being selected + for a nuclear operative role. Check it out! + - image: Plasmaman operative envirosuits. + Sealed101, EBAT_BASUHA for spritework: + - rscadd: Wizard's Den now has a book of Summon Cheese in the Studies Room + Seven: + - bugfix: Fixes not being able to break out of graves + - qol: Graves are no longer dense (you can walk over them now) + VladinXXV: + - qol: The organ harvester's output is more predictable, and the direction can be + changed by alt-clicking with the panel screwed open. + carshalash: + - qol: Adds accessibility to breasts for service members + nikothedude: + - rscdel: Deleted a unused file + xPokee, Pirill: + - rscadd: Added flower crowns, craftable via the clothing menu. + - image: Resprited geraniums, poppies, and lilys, along with changing their worn + icon. +2023-09-02: + Jacquerel: + - bugfix: Prevents admins from accidentally gibbing people by closing a confirmation + window. + - bugfix: Traitors should generate with "free objective" less often, and will once + more be assigned to steal things. + Profakos: + - bugfix: Ex-Interdyne pirates can now successfully spawn on case sensitive host + systems, such as Linux + Shadow-Quill: + - bugfix: Hilbert's Hotel Research ruin now has a functioning tram. As a side effect, + the malfunctioning tram event should now only fire on maps with a tram! + Thebleh: + - bugfix: fixed access on a couple of Engineering and Atmos airlocks on DeltaStation +2023-09-03: + Ben10Omintrix: + - bugfix: basic ranged mobs will now chase victims + Capsandi: + - sound: 2 new ambient tracks for maintenance tunnels + Fikou: + - bugfix: you can now examine screen objects properly + Ghommie: + - bugfix: You can now actually fish soggy wallets from toilets, rare ores on ice + moon, some boney stuff in oil puddles (good luck finding them) and lube-fishes + by the seawater. + Guillaume Prata: + - rscadd: 'New funny internals for the clowns to spawn with. They come with O2 and + a secondary gas between 3 options: BZ, Helium and N2O. Talk with a "different + tone" with Helium, giggle and laugh "uncontrollably" while under the minor effects + of N2O or have "fun" hallucinations while under the minor effects of BZ.' + - balance: To not cut on how long the clown's O2 internals last due to the mixed + gases, the funny internals have 50% more gas volume, same as engineers' internals. + Iamgoofball: + - bugfix: You can no longer create non-synthesizable chemicals with bees. + Melbert: + - bugfix: Fix bastard sword granting infinite stun immunity + - balance: Ascended Blade Heretics no longer have blanket stun immunity, they now + have 45 seconds of stun absorption that recharges after 2 minutes - think His + Grace. This doesn't affect stamcrit (still immune to that) (assuming you haven't + consumed all of your immunity charge) but does affect hard CC such as slips, + flashbangs, or beepsky. + - balance: Ascended Blade Heretics now have a 0.75 modifier to incoming knockdowns. + Profakos: + - bugfix: The HUDs of mobs with dynamic human appearance will appear properly. + Rhials: + - qol: The pirate candidate gathering poll will now mention which pirate gang it + is gathering candidates for. + Sealed101: + - bugfix: fixed implanted legion cores being available for use when unconscious/dead. + blueDev2: + - bugfix: Soups are accepted by Kitchen Smartfridges + - bugfix: Soups are not accepted by drink showcases + carlarctg: + - rscdel: Removed the threshold for confusion symptom that adds illiteracy to the + disease. + - balance: Clamps confusion symptom's confusion to a maximum of 30 seconds. + - qol: Confusion as a debuff no longer guarantees random movement if you're resting. + nikothedude: + - bugfix: Slash wounds are now compatable with pierce wounds + xPokee: + - bugfix: Fixed the air inside of a penguin pen being way too cold +2023-09-04: + CoiledLamb: + - rscadd: adds medical carts and surgery trays + - image: gives the surgery razor a unique sprite + - image: resprites the genesploicer. + DaydreamIQ: + - rscadd: Adds the medbeam module for nukies, don't cross the damn beams. (Also + removes the handheld one from the uplink) + DrDiasyl: + - sound: 'Adds/modifies next sound files: airraid.ogg, bloblarm.ogg, alert.ogg, + notice3.ogg, announce_syndi.ogg' + - sound: Code Red, Delta, and other extreme emergencies now possess more unique + alarm sound effect + - sound: Captain's arrival now is announced by Captain's announcement sound, but + not for Acting Captain's + - sound: Making Captain announcement through emagged console; hijacking or fully + corrupting evacuation shuttle now plays more ominous sound + - sound: Making announcements through Requests Console now plays a more noticeable + sound + - image: Status Displays sprites have been fully changed. Now they include displays + for every Security Level + - qol: The "Red Alert" button in the Communications console status display menu + has been replaced with a "Current Alert" button showing the current station + Security Level display on Status Displays + - qol: Communications console status display menu got a new "Radiation" button which + shows radiation symbol on Status Displays + FernandoJ8: + - bugfix: boiled rice doesn't burn instantly after being baked + - code_imp: simplifies the way burning food is handled, grilled/baked food now turns + to a burnt mess rather than being set on fire, unless they have a baking/grilling + recipe + Fikou: + - bugfix: kinesis plus properly lets you move again when grabbed once + Guillaume Prata: + - rscadd: Atmos Tech now have new drip and will spawn with Atmos Overalls to protect + their clothing from gas leaks! (It will actually not protect you against fire + or leaks, but hey! It's the thought that counts!!) + Sealed101: + - bugfix: fixed basic mobs not dropping their butcher results when gibbed + Time-Green: + - rscdel: Removes the swarmer beacon achievements from the game (no one ever got + them, and they haven't been obtainable for years) + Whoneedspacee: + - bugfix: Multi-z Icebox ruins including the Demonic Frost Miner can now be placed + again + carlarctg: + - sound: Adds a sound effect for hypospray/medipen injections. Doesn't affect sleepy + pens or HMS injectors + distributivgesetz: + - code_imp: Moved some job-related achievements from the misc category to the jobs + category. + vinylspiders: + - bugfix: '''meat product'' and imitation carp meat are now considered synthetic + meats for the purposes of reagent purity' +2023-09-05: + Ben10Omintrix: + - qol: pollinating bees will now only attack players that are standing near the + beehive + Eronymun: + - bugfix: You can no longer walk into Birdshot's secure tech storage like you own + the place - unless you do own the place. + Ghommie: + - bugfix: It's now humanly possible to reach the legendary fisherman rank, get the + achievement and the hat. + - bugfix: fixed fishing skeleton mob spawners that immediately crumble back into + the void of whatever chasm you fished them from. + - balance: The fishing minigame should be easier now. + Iamgoofball: + - bugfix: Updates the changelog link for the pre-4407 changelog as it was moved + JohnFulpWillard: + - bugfix: PDAs being on silent no longer prevents PDAs from being sent to your chat, + again. + - rscadd: pAIs inserted into a PDA can now control the PDA, and will receive PDA + messages sent to it (and can respond under the PDA's name). + LT3: + - image: New medical bed and emergency roller bed + - code_imp: Added context hints for beds + Sealed101: + - bugfix: fixed bileworm evolution deleting anything they devoured; they will now + eject their contents upon evolution to vileworms + mc-oofert: + - bugfix: emissive appearances on glowy eyes and such now properly rotate +2023-09-06: + Acantharctia: + - rscadd: Added the Numb quirk, that makes you (almost) unable to perceive how much + your injuries hurt. + Ben10Omintrix: + - refactor: the minebots have been refactored please report any bugs + - rscadd: minebots can now mine walls and collect ores automatically and they will + alert everyone if they find u dead + CoiledLamb: + - image: cleans up the engineering emergency internals sprite slightly + Jackal-boop: + - spellcheck: re-writes cosmic heretic lore + Krysonism: + - image: resprites the noticeboard + carlarctg: + - bugfix: Fixed walking into grilles to destroy them + lizardqueenlexi: + - bugfix: Fixed all-in-one grinders not giving all the correct reagents when grinding. + - spellcheck: Improved phrasing and syntax on dismemberment mood messages. + - bugfix: Snow legions now drop only one corpse, and no longer drop Lavaland corpses. +2023-09-07: + Ben10Omintrix: + - bugfix: basic mobs can now use ranged burst attacks + Dmeto: + - bugfix: Machine frames in NorthStar Cyto are now functional. + - qol: Minor cable/pipe changes to NorthStar the xeno containment. + - qol: Adds cables under birdshot xeno containment shielding. + Eronymun: + - bugfix: The Birdshot Gaming Den now has arcade circuit boards and computer frames + that actually work. + Melbert: + - rscadd: '[Icebox] Remaps arrivals and the maintenance around it. Aux base out, + mass driver into a plasma lake in.' + Sealed101: + - bugfix: fixed mirrors not breaking when a curse effect is triggered + Thunder12345: + - bugfix: Public mining storage's camera is now on the mining network instead of + the gulag. + dieamond13: + - image: adds special sprites for lungs when you use the smoker quirk + norsvenska: - qol: NorthStar's departmental head offices have had their respective PDA & ID imprinters added! - qol: The NorthStar Head of Security office has gotten a small expansion. @@ -289,6 +504,17 @@ - image: adds special sprites for lungs when you use the smoker quirk - bugfix: basic mobs can now use ranged burst attacks - balance: gas mixer output now accurate to set ratio regardless of input temperatures + - bugfix: leash unit test will time out less often and increases the timer until + it is considered 'timed out', to reduce false CI failures +2023-09-08: + Deadgebert: + - balance: gas mixer output now accurate to set ratio regardless of input temperatures + Ghommie: + - image: The glow shoes from the ClothesMate now actually glow and can be recolored, + even with a spraycan. + - spellcheck: Corrected the name of the telescopic fishing rod to "telescopic fishing + rod" from the more generic "fishing rod" + Jacquerel: - rscadd: Traitors, Changelings, Heretics, Wizards, Malfunctioning AIs, and Ninjas can now all reject their original objectives and provide one of their own in its place. A Heretic doing this will no longer be able to ascend. @@ -310,6 +536,7 @@ - bugfix: The messenger app can now be used when laying down. - bugfix: Cauteries now have 'heat', like lighters, welders, etc. - qol: You can smoke with a space helmet as long as you have internals on. + JohnFulpWillard: - bugfix: Getting a node researched now properly makes it no longer hidden. - bugfix: Ninjas draining RD servers now drains it from the connected techweb, rather than sniping Science. @@ -331,6 +558,39 @@ - code_imp: Removed extra calls to nightshift subsystem during delam - bugfix: Votes play an alert sound again SkyratBot: + LT3: + - bugfix: Meteors no longer take damage from crossing certain unoccupied turfs + Sealed101: + - balance: colossus' near-death attack now starts after a 0.5 seconds delay + carlarctg: + - bugfix: Cauteries now have 'heat', like lighters, welders, etc. + - qol: You can smoke with a space helmet as long as you have internals on. + cnleth: + - bugfix: Megafauna now correctly prints the victim's name after a kill + san7890: + - refactor: If you transform into another mob and notice bugs with interacting with + the game world, please create a bug report as this framework was recently refactored. + vinylspiders: + - bugfix: fixes creamatorium not producing any suspicious ice cream, and fixes a + dead mouse related harrdel +2023-09-09: + CoiledLamb: + - image: updates medigel sprites + Jacquerel: + - balance: Traitors who are activated as sleeper agents or arrive late on the arrivals + shuttle will begin with more reputation and likely be able to immediately access + most of the uplink catalogue. + LT3: + - qol: Supermatter common channel alerts are less frequent if the crystal's integrity + is rising rapidly + Majkl-J: + - bugfix: The messenger app can now be used when laying down. + san7890: + - rscadd: Ever see a robot yawn? Don't worry, it makes sense now. +2023-09-10: + Jacquerel: + - bugfix: It is now possible to smoke cigarettes even if you aren't wearing a safety + helmet - bugfix: Golems can eat - bugfix: Cooked and crafted food should be edible - bugfix: Medborgs can now spawn vanilla ice cream instead of nothing ice cream @@ -356,6 +616,32 @@ hand teleporters, citing a new "stand and deliver" doctrine established by more violent, militant arms of the organization. Melbert: + - admin: Admins can add/remove the spawner component from arbitrary items again. + Rhials: + - qol: adds some more traitor objective brainwashing default objectives. + - spellcheck: fixes the double-punctuation on traitor objective brainwashing broadcasts. + - spellcheck: brainwashing deadchat broadcasts will now auto-punctuate. + carshalash: + - bugfix: ' Corrects various food types from the martian food expansion' + distributivgesetz: + - admin: The "Create Command Report" verb now has the option to not print report + papers at communications consoles. + leaKsi: + - bugfix: Exploration drones can't be used to reach Centcom anymore. + nikothedude: + - refactor: Refactored wounds yet again + - bugfix: Wounds are now picked from the most severe down again, meaning eswords + can jump to avulsions + - bugfix: Scar descs are now properly applied +2023-09-11: + Jacquerel: + - image: Hivelords have a new sprite. + - image: Hivelord and Legion brood have a death animation. + - bugfix: Your clothes and such should correctly reposition themselves if a black + charged slime extract turns you into a monkey. + Melbert: + - rscdel: Spacers are slightly shorter. They're still taller than other people, + just not as much. - qol: Haunted 8-ball no longer requires the ghost orbit the petitioner to submit votes - qol: Haunted 8-ball ghosts can now change their vote after submitting it @@ -363,62 +649,43 @@ - bugfix: Haunted 8-ball no longer always reports default "yes", "no", or "maybe" and now gives a proper eight ball response - bugfix: Haunted 8-ball can be picked up via the stat panel - RatFromTheJungle: - - rscdel: Guns, collectively, can no longer right-click holdup people - SkyratBot: + Profakos: + - bugfix: Mortar and pestle can grind stuff again + Sealed101: + - balance: polymorph belt now blacklists mobs that are undead, humanoid, robotic + or spiritual (in nature, not religiously), as well as megafauna + - balance: however, this means that it works with more mobs that it should logically + work with, like slimes/bugs/lightgeists etc + - bugfix: fixed headslug shenanigans with the polymorph belt hopefully for good + this time + - bugfix: fixed headslug description mentioning its movement despite the slug being + dead + Vincent983: - rscadd: 'Added the service borg "drink apparatus" upgrade, which adds an extra drinking apparatus to the borg, up to a maximum of 5 extra. :cl:' - - bugfix: Changeling tentacle and bloodchiller from xenobio will no longer stop - working if you have antimagic + Wallem, MTandi: + - image: Updates chem factory tank sprites + blueDev2: - qol: Rice Dough may be made in beaker instead of being crafted, but the rice and flour must be added first + cnleth: + - bugfix: Changeling tentacle and bloodchiller from xenobio will no longer stop + working if you have antimagic + mc-oofert: - rscadd: humpback emergency shuttle - - image: Hivelords have a new sprite. - - image: Hivelord and Legion brood have a death animation. - - bugfix: Mortar and pestle can grind stuff again - Wallem, MTandi: - - image: Updates chem factory tank sprites - jjpark-kb: - - bugfix: revive mob ritual works on basic mobs now - - bugfix: ashwalkers have the ashwalker faction - softcerv: - - bugfix: ghost cafe NIFs no longer have access to hivemind 2023-09-12: - Adelphon: - - rscadd: new underwear + CoiledLamb, Time-Green: + - image: resprites the radioactive nebula shielding GoldenAlpharex: - - bugfix: All potted plants should now be visible again. - - admin: Player ranks are now displayed in the Player Panel of each user. - - code_imp: Player ranks can now be checked without taking into account the admin - bypass while in-game. - - bugfix: Fixed the rounding errors that caused decimals to wrongly appear when - hitting the Shift Layer Upwards or the Shift Layer Downwards verbs. - bugfix: The message sent to admins when a new admin has been added via the Permissions Panel will now properly show the new admin's ckey. - - qol: Character Previews are now always displayed in the Examine panel, rather - than disappearing when the flavor text would otherwise be hidden. + Jacquerel: + - bugfix: Ninjas should be correctly credited for using their spider bombs LT3: - code_imp: Status display shuttle timer no longer scrolls - - bugfix: Fixed Void Raptor cargo door labels and IDs - - bugfix: Singularities are no longer invisible. You can again see your impending - doom - Melbert: - - rscdel: Spacers are slightly shorter. They're still taller than other people, - just not as much. - OrionTheFox: - - bugfix: fixed being unable to re-select the "Quartermaster" title in job prefs - after selecting an alt-title - - image: updated the greyscale Cattleman Hat to be not-bad. It now isn't 1px too - low, and actually looks like a cattleman rather than a lump of butter on a plate! - SkyratBot: - - bugfix: The vorpal scythe is no longer as greedy about you murdering people, and - will once again accept striking any living creature to be sated. - - bugfix: Fix capture devices allowing mob actions while inside - - bugfix: Your clothes and such should correctly reposition themselves if a black - charged slime extract turns you into a monkey. - - bugfix: Ninjas should be correctly credited for using their spider bombs + Pickle-Coding: - balance: Supermatter zap power generation scales with the delta time between its last zaps, preventing faster zapping from scaling power generation to extreme levels. @@ -731,6 +998,7 @@ Thebleh: - bugfix: Bluespace RPEDs can now be rigged again nikothedude: + carlarctg: - rscadd: Several common 'household' reagents can be used as improvised medicine treatment. - rscadd: Drinking tea will help mend (non-bone) wounds over time. @@ -769,6 +1037,279 @@ with planks of wood" being spammed on objects. - bugfix: basic mobs retaliate targetting now selects targets they can attack - bugfix: Makes ethanol and sugar pure by default. + necromanceranne: + - bugfix: The vorpal scythe is no longer as greedy about you murdering people, and + will once again accept striking any living creature to be sated. + nikothedude: + - bugfix: Medicine allergy can no longer roll quantum medicine + san7890: + - image: When you throw up nanites, your vomit should now be appropriately nanite-colored. + timothymtorres: + - bugfix: Fix capture devices allowing mob actions while inside +2023-09-13: + ArcaneMusic: + - qol: Shuttle engines now tell you how to install them in their screentips and + their examine text. + CoiledLamb: + - image: resprites pestkiller, weedkiller, and nolabel sprays + - image: updates shading on medigels + - image: resprites all spray bottles + Ghommie: + - bugfix: The holographic pufferfish from the holographic beach from the holodeck + no longer looks like a goldfish. + Ghommie (Based on an old PR by Trilbyspaceclone from Citadel): + - qol: The notepad app now includes basic nautical directions in its default message. + - qol: A tip about nautical directions, too. + Hatterhat: + - 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 + 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 + less loud when trying to fire while empty. + - bugfix: Closets and crates now properly count as structures for pass flags again. + Jacquerel: + - rscadd: Operative MODsuits now have an attached "jump jet" which sends you upwards + and allows you to use your jetpack under gravity for a few seconds, perfect + for navigating the pits and valleys of Icebox Station. + JupiterJaeden: + - balance: removed anti-drop implants from the nuclear operative uplink + - balance: removed anti-drop implant from the nukie implants bundle and changed + its cost to 20 TC + Melbert: + - bugfix: Birdboat's Augment Theater is named less odd now + Rhials: + - bugfix: The psyker headset is no longer a syndicate headset subtype, and no longer + has syndie comms. + SuicidalPickles: + - qol: Cargo Coats/Jackets can now equip universal scanners on their suit-slots. + Wallem: + - qol: Examine a Dish Drive to see all the items inside of it, as well as the item + you'll pull out when you interact with it. + - qol: Dish Drive servo tier increases suction range + blueDev2: + - bugfix: Soup recipes, that make items, spawn the correct number of items per reaction + instead of just one item + - bugfix: Soup recipes, that make items, consumes the correct number of reagents + instead of the largest multiple of the reagents + starrm4nn: + - bugfix: the ablative coat's hood now hides the wearer's hair and ear + timothymtorres: + - balance: Add hypnosis vulnerability for drugged victims + vinylspiders: + - bugfix: fixed grown food items not getting the right seed type passed to them + upon creation +2023-09-14: + ArcaneMusic: + - qol: Conveyor belts now have screentips and a better examine tip to teach you + how to set one up properly. + - qol: Using a conveyor belt stack on a placed conveyor belt will extend the conveyor + belt to the output of that conveyor belt.. You can use this to place fully integrated + conveyor belts much easier now. + Das15: + - bugfix: You can no longer teleport to disabled beacon if the teleporter was previously + locked-on to it. + IHateGeese: + - bugfix: Nightmares can no longer receive wounds + - bugfix: Nightmares can no longer have limbs dismembered + Jacquerel: + - bugfix: Roundstart medbots and cleanbots are now more likely to be able to be + possessed by observers. + - admin: It's easier to modify the properties of bots to stop them from being possessed + or depossessed. + LT3: + - bugfix: Emergency shuttle should correctly scale timer up/down when changing security + levels + Mothblocks: + - bugfix: Dynamic now biases less heavily towards the exact average. + Rhials: + - rscadd: Shuttle Firesale positive station trait. Some emergency shuttle options + have been put on sale! + - rscadd: Misplaced Wallet positive station trait. You wouldn't steal from a missing + wallet, would you?? + - rscadd: Wisdom Cow Invasion positive station trait. + - rscadd: Advanced Medbots positive station trait. Better roundstart medbots! + - rscadd: Loaner Shuttle positive station trait. More shuttle loan offers and more + payout! + - qol: Station Trait titles are now italicized for easier reading. + - spellcheck: Fixes a "prerequisites" typo in the shuttle purchase menu. + Seven: + - balance: The supermatter delamination countdown has been lowered from 30 to 13 + seconds + - balance: Removing a sliver from the supermatter further lowers that down to 3 + seconds + - balance: The supermatter crystal uses bigger text on its final countdown + - spellcheck: Some supermatter delamination related mood descriptions have been + edited to explain the mood effect better + Timberpoes: + - bugfix: Fix poor dynamic threat distribution at lower population levels, causing + dynamic to generate better threat curves at lower population levels than it + did before. +2023-09-15: + Ghommie: + - bugfix: fixed fishing. + - bugfix: Fixed a race condition that made fishing yield no reward way too often. + - bugfix: The legendary fisher achievement is awarded even if you don't win the + minigame. + - bugfix: Fixed a fish hook exploit. + - bugfix: Baits are now properly consumed by caught fish and (alive) mobs. + ZephyrTFA: + - bugfix: you can no longer bypass html sanitization using the table element. >:( +2023-09-16: + AtomTheProphet: + - balance: The spontaneous brain trauma event will no longer occur if there are + fewer than 13 players. + Donglesplonge: + - bugfix: adds the bolted and welded helper to the bar backroom/kitchen coldroom + airlock on birdshot, as to prevent chefs from being able to access armor and + sunglasses roundstart with barely any work involved + Hatterhat: + - bugfix: Flares and candles no longer sound like flashlights when being turned + on. + - bugfix: Getting shot by an SC/FISHER now disables PDA lights for consistency's + sake. + - balance: Pulling embedded items e.g. shrapnel with hemostats is now a lot faster, + and scales appropriately with toolspeed. + - balance: You can now pull embedded items with wirecutters, at a speed penalty. + Jacquerel: + - balance: Watchers will no longer put you at gunpoint. + - bugfix: The nuclear operative MODsuit intellicard now actually downloads an AI + rather than simply kicking candidates from the game. + LovliestPlant: + - qol: '[Deltastation, Icebox, Metastation, Tramstation] Adds cell timers to isolation + cells. (they do not auto-open the doors)' + - qol: '[Birdshot, Deltastation, Icebox, Metastation, Northstar, Tramstation] Adds + translator glove modules to the stacks of "accessibility" (e.g. plasma fixation + / thermal regulator) modules found in security, medical, and engineering storage + rooms.' + - qol: '[Birdshot] Adds a roll of packaging paper to the cargo office.' + - qol: '[Icebox] Adds a hand labeler to security''s gear room.' + - qol: '[Northstar] Nudges the set of binoculars covering the mass driver controls + in ordnance over a few inches.' + - bugfix: '[Birdshot] Remaps the janitor''s closet such that the recycling machine + will now work.' + - bugfix: '[Icebox] Removes a duplicated hand labeler from the rack near security''s + brig cells.' + - bugfix: '[Metastation] Patches a broken corpse disposal pipe running from aux + surgery to the morgue.' + - bugfix: '[Northstar] Fixes the SM being hotwired at round-start (partially rewires + the SM room, moves the APC to the North wall).' + Pickle-Coding: + - bugfix: Fixes tesla coils duplicating the power of >7GeV supermatter zaps. + SyncIt21: + - bugfix: returning items to vendors works correctly + - bugfix: you can't return items that has stuff in it for e.g. a serving tray with + food in it + - bugfix: Unary vents & Injectors now link properly with air sensors via multitool + both ways + Thunder12345: + - rscadd: There's a new space ruin in town, be on the lookout for a hidden supply + cache. + - rscadd: Added a new type of wall which can only be destroyed by blowing it up. + Vincent983: + - qol: The supply beacon will no longer delete itself due to explosions, and you + can now anchor it with a wrench. + - spellcheck: Express console now correctly states that it needs cargo access instead + of QM access. + Zergspower: + - bugfix: Space ruin Anomaly Research - Fixes stacked windows and underplating + cnleth: + - spellcheck: Replaced an irrelevant tip of the round about scars with a better + one + mc-oofert: + - bugfix: the bank machine cannot print holochips worth 0 credits now + - rscadd: climbing hooks that allow you to go up holes for multiz, found in internals + boxes (on planetary maps), the uplink, cargo and nukie personal lockers + san7890: + - balance: You will be knocked down again on certain vomits. Don't worry, you'll + deserve it when it happens. + vinylspiders: + - bugfix: fixes a bug that would cause grown inedible plant seeds (like tower cap) + to vanish from existence upon being added to the seed extractor + - bugfix: fixes a issue that would cause fruit wine to bug out when trying to blend + its reagent color +2023-09-17: + ArcaneMusic: + - rscadd: Wall mounted objects (Things like APCs, Air Alarms, Light switches, Signs, + Posters, Newscasters, you name it) will now fall to the ground and break or + deconstruct when their attaching wall is changed or broken. + Ical92: + - bugfix: adds a few firelocks and alarms around IceBox + Timberpoes: + - bugfix: Forgetting to take dough out of the oven no longer progresses the server + to a crash-worthy state with infinite bread and ash and burned food products + for all. + Vincent983: + - qol: the recycler can now be rotated + blueDev2: + - bugfix: Lipolicide and other chems now puts you in crit, even if it is the only + source of damage + cnleth: + - image: Hercuri spray now uses the same sprite as the yellow medical spray + - spellcheck: Added a missing space to hercuri spray's description + mc-oofert: + - bugfix: the nukie medibot (oppenheimer) has access to the doors of the infiltrator + and is not shot at by the turrets + notlulz: + - bugfix: Monkeys have their tails back. + - bugfix: Recipe paper in the ruins now shows a normal recipe for Metalgen and Secret + sauce. + starrm4nn: + - spellcheck: Fixed some typos on QM's Overcoat +2023-09-18: + ArcaneMusic: + - rscadd: A new ruin has appeared on lavaland, featuring the site of an ancient + battle. + Jacquerel: + - 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. + Melbert: + - balance: Humanoids without tongues cannot cast spells with vocal components + - balance: Humanoids without arms cannot cast spells with emotive components + SyncIt21: + - qol: Machines now transfer their local materials to silo during linking with multitool + - code_imp: added some null checks for general juicing & grinding items + - bugfix: grinding stacks now grinds as many pieces/sheets from the stack as possible + that can fit in a beaker/container without wasting the whole stack + - bugfix: plumbing chemical grinder now actually works again + - bugfix: the plumbing chemical grinder allows stuff to enter from any direction + but not mobs and also accepts items put inside it via hand including bags + - bugfix: You can remove the beaker from the all in 1 grinder when power is off + via right click + - bugfix: All in 1 grinder now mixes faster with upgraded parts + - refactor: you can no longer walk into a plumbing chemical grinder + - bugfix: Manually constructed windoors have correct unrestricted accesses applied + to them + - bugfix: Windoors created via RCD now actually have electronics inside them + - bugfix: Airlocks constructed via RCD have the shell component correctly installed + inside them and have no other missing variables + Thebleh: + - bugfix: Bluespace RPEDs can now be rigged again + Vincent983: + - bugfix: made the radiation protection crate's contents match it's description + ZephyrTFA: + - rscadd: NanoTrasen improved the quality of the local durathread strain; resulting + in it now being twice as filling! + jlsnow301: + - bugfix: Fixed a resource dupe in the ORM. + mc-oofert: + - refactor: heretic sacrifice room is now lazyloaded + - rscadd: added the inspectors hat to the detectives cabinet, a special hat that + allows the wearer to say a phrase to dispense a stored item + necromanceranne: + - code_imp: Cleans up some unnecessary code left over from caseless ammo. +2023-09-19: + Ben10Omintrix: + - bugfix: basic mobs retaliate targetting now selects targets they can attack + Ghommie (Thanks Sealed101): + - refactor: Reworked the fishing minigame into a game screen object from a TGUI + interface + Hypernoblium: + - bugfix: Fixes a selection window in the game rock-paper-scissors with death. + Jacquerel: + - rscadd: Many kinds of mobs can now be brought back to life through revival surgery. + - rscadd: Dogs can wear eyepatches. - balance: Player-controlled basic mobs attack as fast as those mobs can when controlled by the AI - balance: Player-controlled Faithless can paralyse people they attack, like the @@ -798,6 +1339,19 @@ and the upper section of chapel - bugfix: normal ethereal blood now works for electrolysis, the hydrogen and oxygen output of the electrolysis recipe has been increased. + Momo8289: + - bugfix: The Nightmare's Light Eater can no longer suck the light out of space + tiles. + Moose1002: + - bugfix: Nanotrasen 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 + RikuTheKiller: + - bugfix: Makes ethanol and sugar pure by default. + Shadow-Quill: + - qol: Surgery trays can now be crafted via the crafting menu (two rods, one silver), + and deconstructed via secondary click with a screwdriver! + Time-Green: - balance: Only traitor, changeling, heretic, blood brother, headrev, wizard, obsessed, magic/gun survivalists and greentext book holders can now double their hardcore random score @@ -831,24 +1385,60 @@ - bugfix: Lava can no longer occasionally generate inside of previously loaded templates and breach and/or destroy shit - qol: mice and rats now are visually spaced out from eachother for visual clarity - - balance: Supermatter now takes 15 seconds to delaminate normally and 5 if a sliver - has been taken from it. Gives a little more time to escape in the case of the - sliver and also evens out the times to please perfectionists. - - bugfix: Supermatter now accurately reports it's detonation time. - - spellcheck: Supermatter mood descriptions have been reverted back to their old, - more flavorful selves. - Zergspower: - - qol: reworks the verb panel to be less of a CVS receipt - vinylspiders: - - bugfix: removed a deprecated loadout item 'Black Two-Piece Suit' which had an - invalid item path. The old item has been replaced with 'Black Suit'. -2023-09-21: - LT3: - - bugfix: Interdyne scientists get their Interdyne labcoat - Rhials: - - qol: Restores holiday hats for drones. - - qol: Extends holiday hat behavior to assistants. Get festive! - SkyratBot: + Vincent983: + - rscadd: mass drivers are now buildable, you activate them by attaching a signaler + to their launch wire, and can increase their power by pulsing the safeties wire, + and reset it back to normal by cutting the safeties wire. + - bugfix: normal ethereal blood now works for electrolysis, the hydrogen and oxygen + output of the electrolysis recipe has been increased. + YehnBeep: + - server: Default-configuration MINUTE_TOPIC_LIMIT has been increased + carlarctg: + - balance: Unholy and Eldritch water are self-consuming like holy water! They don't + need a liver to be processed. + distributivgesetz: + - bugfix: Fix a runtime when trying to cycle move intents with a hotkey as a dead + mob. + - rscdel: Removes the computer vendor. + - bugfix: Fixes a misplaced status display in Meta's medical storage. + mc-oofert: + - bugfix: pancake stack layering + - bugfix: pizzabox stack layering + - bugfix: pizzabox bombs that spawn unarmed now label their pizza correctly and + cannot spawn a spriteless pizza + - bugfix: added some missing firealarms on icebox in the hall towards departures + and the upper section of chapel + necromanceranne: + - bugfix: Makes sure pump-up properly grants the baton resistance trait. + nikothedude: + - code_imp: Scars now stack trace if they fail to get a valid description + timothymtorres: + - bugfix: Fix wooden barricade description "This looks like it can be barricaded + with planks of wood" being spammed on objects. +2023-09-20: + LT3: + - rscadd: 'New random event: Supermatter Surge' + - code_imp: Individual supermatter crystals can have custom gas properties + RikuTheKiller: + - spellcheck: Unreverted and improved resonance cascade message. + - balance: Supermatter now takes 15 seconds to delaminate normally and 5 if a sliver + has been taken from it. Gives a little more time to escape in the case of the + sliver and also evens out the times to please perfectionists. + - bugfix: Supermatter now accurately reports it's detonation time. + - spellcheck: Supermatter mood descriptions have been reverted back to their old, + more flavorful selves. + Zergspower: + - qol: reworks the verb panel to be less of a CVS receipt + vinylspiders: + - bugfix: removed a deprecated loadout item 'Black Two-Piece Suit' which had an + invalid item path. The old item has been replaced with 'Black Suit'. +2023-09-21: + LT3: + - bugfix: Interdyne scientists get their Interdyne labcoat + Rhials: + - qol: Restores holiday hats for drones. + - qol: Extends holiday hat behavior to assistants. Get festive! + SkyratBot: - bugfix: RCD Construction effects will no longer fall into chasms. - bugfix: Gauze no longer falls off if a wound is demoted or promoted - bugfix: The caller in a holopad call should now be able to hear people on the @@ -861,6 +1451,27 @@ - balance: Improvised shotgun shells now deal half as much damage to humans and cause less wounds, but do 50% more damage to structures and machines. They also require a glass shard for crafting. + Thunder12345: + - balance: Improvised shotgun shells now deal half as much damage to humans and + cause less wounds, but do 50% more damage to structures and machines. They also + require a glass shard for crafting. + ZephyrTFA: + - bugfix: Lava can no longer occasionally generate inside of previously loaded templates + and breach and/or destroy shit + antropod: + - bugfix: Fixed Mafia achievements + carlarctg: + - qol: Crafting R&D guns from gun kits no longer requires tools or cable coil. The + decloner and energy crossbow still need reagents. + - qol: Halved R&D gun crafting time. 20->10 seconds. + intercepti0n: + - image: resprites t-ray scanner, gas analyzer, geiger counter and hand drill. + jlsnow301: + - refactor: Refactors the camera console UI. + mc-oofert: + - rscadd: heretic knock path and its respective items and award + - qol: mice and rats now are visually spaced out from eachother for visual clarity + nikothedude: - balance: 'EMP damage on augs: 2/1.5 from 3/2' - balance: Augs now only get paralyzed by EMP for 3/6 seconds if they are damaged below 70% HP, @@ -926,17 +1537,71 @@ modes. - qol: Flashlights no longer pointlessly require power cells to function SkyratBot: + vinylspiders: + - bugfix: fixes inedible grown items (such as tower caps) becoming unclickable when + harvested, fixes their seeds disappearing when inserted into the seed machine +2023-09-21: + Coconutwarrior97: + - bugfix: Fixes a bug allowing holopara injectors to be refundable when used. + Exester509: + - rscadd: Splashing antihol on a patient before surgery will make it to go slower. + GPeckman: + - bugfix: The caller in a holopad call should now be able to hear people on the + other end. + Rhials: + - qol: Restores holiday hats for drones. + - qol: Extends holiday hat behavior to assistants. Get festive! + Shadow-Quill: + - bugfix: RCD Construction effects will no longer fall into chasms. + SyncIt21: + - bugfix: wall mounted objects air alarms, fire alarms etc now actually falls off/gets + destroyed when their attached wall is deconstructed + - bugfix: wall mounts crafted in game also properly falls off/gets destroyed when + their attached wall is deconstructed + blueDev2: + - bugfix: Recipe that converts Vegetable Oil into Olive Oil works properly + nikothedude: + - bugfix: Projectiles no longer cause a blood graphic or blood splatters if they + hit a limb that cant bleed + - rscadd: Prosthetics/Augments now spark when shot + - bugfix: Gauze no longer falls off if a wound is demoted or promoted + vinylspiders: + - bugfix: rescue hooks will once again drop the mob next to the fisherman instead + of just displaying a balloon alert and doing nothing +2023-09-22: + Jacquerel: + - admin: Admins can transform misbehaving players into arbitrary objects at will. + Sealed101: + - bugfix: fixed moonicorns making space/chasm/lava/water bridges with their fairy + grass + Toastgoats: + - balance: Peacekeeper cyborg's emagged hug is no longer a hardstun. + intercepti0n: + - image: resprites t-ray scanner. +2023-09-23: + ArcaneMusic: + - bugfix: Conveyor belts now properly show their new screentips on mouseover with + tools. + Ben10Omintrix: - refactor: seedlings have been refactored into basic mobs please report any bugs - rscadd: seedlings now can have different colored petals and can look after botanys plants - rscadd: seedlings are re-added to the game! they grow out of seedling seeds obtainable from exotic seed crates or traitor uplink + GPeckman: + - admin: Boneless smite should work properly again. + LT3: + - rscadd: Poly now causes a power surge when dusted by the supermatter crystal + - bugfix: Ghosts and godmode mobs will no longer create resonance when touching + the supermatter crystal + Shadow-Quill: - rscadd: The Message Monitor console's board can now be obtained via the telecoms research node. - - bugfix: Conveyor belts now properly show their new screentips on mouseover with - tools. - - bugfix: clown bomb payload is no longer named badmin payload and no longer disperses - clowns in cardinal directions only + distributivgesetz, CoiledLamb: + - rscadd: 'Added two new awards specifically for engineering and medical: The "Emergency + Services Award" and the "Atmospheric Mastery Award". CEs get 3 Emergency Services + Awards and 1 Atmospheric Mastery Award and CMOs get 3 Emergency Services Awards.' + lizardqueenlexi: - bugfix: Foods that have special conditions for liking/disliking them (such as donuts for sec officers) have these conditions again. - bugfix: Characters with ageusia properly ignore non-toxic food types that they @@ -961,75 +1626,111 @@ over tables when you shouldn't, and visa versa SkyratBot: - bugfix: Epinephrine will now update health properly. + mc-oofert: + - bugfix: clown bomb payload is no longer named badmin payload and no longer disperses + clowns in cardinal directions only +2023-09-24: + GPeckman: + - bugfix: Epinephrine will now update health properly. + Jacquerel: - rscadd: Brimdemon corpses release an explosion shortly after death, just to keep you on your toes. - refactor: Brimdemons now use the basic mob framework which (should) improve their pathfinding somewhat. Please bug report any unusual behaviour. - admin: The brimdemon's beam ability can be given to any mob, for your Binding of Isaac event - - refactor: clowns are basicmobs now - admin: Admins can now reset or modify the chaplain's sect from a UI panel - lukevale: - - rscadd: Adds bras as a selectable preference in the same vein as underwear. Separates - all tops from undershirts. + LT3: + - bugfix: Fixed supermatter surges always being the lowest severity + Melbert: + - bugfix: Maybe fixes some weird occurrences where you lose the ability to pass + over tables when you shouldn't, and visa versa + jlsnow301: + - rscadd: Adds Bitrunning to supply department- a semi-offstation role that rewards + teamwork. + - rscadd: Adds new machines to complement the job- net pod, quantum server, quantum + consoles, and the nexacache vendor. + - rscadd: Adds several new maps which can be loaded and unloaded at will. + - rscadd: Some flair for the new bitrunning vendor. + - rscadd: Adds a new antagonist for the virtual domain only. Short lived ghost role + that fights bitrunners. + - rscdel: Removes the BEPIS machine, moves its tech into the Bitrunning vendor. + mc-oofert: + - refactor: clowns are basicmobs now 2023-09-25: - Iamgoofball: - - bugfix: Fixes a bug with the steampunk goggles that deletes items that aren't - welding goggles when hit by it. + Ghommie: + - bugfix: Fixed beams rendering below mobs by default. + - bugfix: The fishing line beam is no longer emissive (it doesn't glow in the dark). + LemonInTheDark: + - admin: First time user connections are now logged Melbert: - rscadd: Changelings can now speak through their decoy brain if it is placed in an MMI, to maintain the illusion they are actually dead and have been debrained. - SkyratBot: - - bugfix: Fix secret documents steal objective failing while inside folder. + Pickle-Coding: + - qol: NT CIMs shows how much power the supermatter is releasing. + - qol: NT CIMs internal energy will adjust its prefix. + - qol: Energy displays (such as multitooling grid) will use the full range of SI + prefixes available, up to the peta prefix if you somehow managed to reach that. + - rscdel: Removes the per cubic centimeter part of internal energy. + - bugfix: Fix unnecessary delta time scaling on inactive supermatters. + - bugfix: Fix high energy zaps not scaling with delta time. + - bugfix: Fixes grounding rods lying about potential power you can generate. + - code_imp: Convert supermatter_zap() and tesla_zap() zap_str argument unit to be + in joules, and scales everything that uses that argument. + Singul0: + - bugfix: Syndicate Modsuit AI's now downloads the current codespeak book upon being + downloaded. + Vekter: + - bugfix: Fixes Birdshot's recycler being turned the wrong direction. + Watermelon914: + - bugfix: Fixed the overflow role having less slots than it actually should. + - bugfix: Fixed players being able to roll antagonist without ever being eligible + to play any role. Players who have their preferences set up so that they're + likely to return to lobby when the round starts have a lowered chance of becoming + antagonist. + carlarctg: - rscadd: Added the Hippocrates bust to medbay heirlooms. Paramedics don't get one. - rscadd: You can now swear the Hippocratic oath with these busts! It'll give you pacifism but nothing else. The process is reversible. - rscadd: There's a very small chance that the Hippocrates bust was once wielded by a certain German doctor. This chance is increased for coroner heirlooms. - - bugfix: Fixed players being able to roll antagonist without ever being eligible - to play any role. Players who have their preferences set up so that they're - likely to return to lobby when the round starts have a lowered chance of becoming - antagonist. - - bugfix: Fixed beams rendering below mobs by default. - - bugfix: The fishing line beam is no longer emissive (it doesn't glow in the dark). - - bugfix: Fixed the overflow role having less slots than it actually should. - - 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 - downloaded. - Vekter: - - bugfix: Fixes Birdshot's recycler being turned the wrong direction. distributivgesetz: - bugfix: Clamping/closing a wound should now heal the bodypart that was damaged instead of a random one. - honkpocket: - - rscdel: Removed wall-mushroom outbreak event + nikothedude: + - code_imp: New flags/args to electrocute_act() + starrm4nn: + - balance: Makes it so Ephedrine spasms have a 10 * (1.5 - purity)% chance per second + to happen, Adding a downside to pure Ephedrine + timothymtorres: + - bugfix: Fix secret documents steal objective failing while inside folder. 2023-09-26: + Ben10Omintrix: + - rscadd: added ranged attack friendly fire checks for basic mobs. minebots and + hivebots will now try to avoid shooting their friends + GPeckman: + - bugfix: Stun immune people should no longer have issues with gripper gloves and + other tackle gloves. + - bugfix: Intellicards in computers are no longer deleted when the computer is destroyed. + - bugfix: Modular consoles can now be deconstructed by right clicking with a wrench. + Higgin: + - bugfix: cigarettes no longer smoke themselves from inside your pockets or on your + hands. + Jacquerel: + - bugfix: Selecting "Monkey" on a magic mirror will now once again turn you into + a Monkey rather than a disgusting freak of nature. + - bugfix: Tall Boys have once again been barred from joining the Wizard Federation. LT3: - - spellcheck: Improved wording in greyscale JSON error message - admin: Successful restart votes will now restart on the current map - code_imp: End round and persistence data will be saved before executing successful restart vote + - spellcheck: Improved wording in greyscale JSON error message Rhials: - bugfix: '"Spooky" meteors will now properly spawn during halloween.' - SkyratBot: - - image: the security records suspected status is now teal instead of orange - - bugfix: Intellicards in computers are no longer deleted when the computer is destroyed. - - bugfix: Modular consoles can now be deconstructed by right clicking with a wrench. - - bugfix: cigarettes no longer smoke themselves from inside your pockets or on your - hands. - - admin: First time user connections are now logged - - qol: NT CIMs shows how much power the supermatter is releasing. - - qol: NT CIMs internal energy will adjust its prefix. - - qol: Energy displays (such as multitooling grid) will use the full range of SI - prefixes available, up to the peta prefix if you somehow managed to reach that. - - rscdel: Removes the per cubic centimeter part of internal energy. - - bugfix: Fix unnecessary delta time scaling on inactive supermatters. - - bugfix: Fix high energy zaps not scaling with delta time. - - bugfix: Fixes grounding rods lying about potential power you can generate. - - code_imp: Convert supermatter_zap() and tesla_zap() zap_str argument unit to be - in joules, and scales everything that uses that argument. + Sealed101: + - bugfix: you can no longer push watchers (and any other lavaland basic mob) around + by running into them + Singul0: - rscadd: Adds an advanced plastic surgery procedure, allowing you to imitate people in pictures. Simply hold a picture in your offhand of the person you wish to imitate as while conducting the surgery! Remember, it's not foolproof, it only @@ -1136,6 +1837,65 @@ - balance: exodrone point scan and deep scan are faster - spellcheck: fixes several typos related to exodrones and gives scanner control console a description + Thunder12345: + - bugfix: Metalgen can no longer be used to transmute indestructible turfs. + Timberpoes: + - bugfix: Centcom now rejects contraband that somehow makes it way onto the cargo + shuttle mid-transit and returns it. + Vincent983: + - image: the security records suspected status is now teal instead of orange + carlarctg: + - refactor: Heavily refactored mirrors to be less ass cancer 1998 code. Player facing + changes are that mirrors now use a radial menu, women can get beards in magic + mirrors, made the magic mirror 'change sex' option Woke (it supports the 4 official + genders and physique as well) + - bugfix: Fixed Pride Mirror teleporting you into the space on the first use. Now + it waits until you officially cancel and say 'I am Done' so you can customize + yourself to your liking. + jlsnow301: + - rscadd: Netpods and quantum servers now have more examination info + - bugfix: You no longer lose antag status if you receive it in the vdom. + - bugfix: Beach bar shouldn't have visible atmos piping anymore. + - bugfix: Adds more lighting to the vaporwave vdom level. + - balance: Buffed vdom megafauna health to compensate for new ability disks. + mc-oofert: + - bugfix: posibrains can be inserted again + san7890: + - bugfix: The custom error message for when there is only one map to vote for should + pop up in all cases rather than just a select few. + tattle: + - qol: Basic animals now make sounds for audible emotes + - sound: Added new sound effects for chicks, chickens, crabs, and insects + xPokee: + - image: adds a frog holoform for pAIs +2023-09-27: + Helg2: + - bugfix: '[Tramstation] Mass Driver in chapel now has tiny fan so you don''t space + yourself.' + Jacquerel: + - bugfix: Blob spores will respond to rallies more reliably (it won't runtime every + time they try and pathfind). + - bugfix: Blobbernaut pain animation overlays should align with the direction the + mob is facing instead of always facing South + - refactor: Blob spores, zombies, and blobbernauts now all use the basic mob framework. + They should work the same, but please report any issues. + Sealed101: + - bugfix: fixed Strong Stone ruin generation + Vekter: + - rscadd: Added a holodeck to Birdshot Station. It can be reached via the Crew Facilities + hallway. + Watermelon914: + - bugfix: Fixed job configs not being loaded properly. + admeeer: + - rscadd: Added a candle box crate for all your candle needs! +2023-09-28: + CoiledLamb: + - rscdel: removes surgical duffelbags + - bugfix: the surgery supply order now comes with a surgery tray + GPeckman: + - bugfix: The flight potion wings will no longer fail to work on lavaland/icemoon + on rare occasions. + Iamgoofball: - qol: Gas masks now muffle your voice with TTS. - qol: Security Hailer masks now disguise your voice to protect your right to brutalize greytiders. @@ -1177,6 +1937,11 @@ - code_imp: adds a gas connector component that allows connection to the atmos piping system without the need of repathing - refactor: changes the cryo machine to use this new system + Jacquerel: + - bugfix: Throwing things at cyborgs will now slow them down, as intended + - balance: Adjusted the calculation of throwforce -> slowdown for cyborgs such that + it is simply a flat duration for anything above a certain damage threshold (the + value of throwing iron rods) - refactor: Hivelords and Legions now use the basic mob framework. Please report any unusual behaviour. - rscadd: Hivelords shed more spawn when they are attacked. @@ -1191,13 +1956,148 @@ on your current health. - qol: You won't continue burning to a husk if consumed by a snow legion after being set on fire by an ice drake. + Melbert: + - rscadd: Doctors can now get head mirrors from their clothes vendor, to complete + the doctor outfit + - config: Adds a config option for player respawning that enables respawns, but + forces you pick a new character. + - config: '"NORESPAWN" has been replaced with "ALLOW_RESPAWN 0". Unlimited respawns + is "ALLOW_RESPAWN 1" and character limited respawns is "ALLOW_RESPAWN 2".' + MidoriWroth: + - bugfix: Added complexity factors to foods that were missing them. + Profakos: + - rscadd: Added the BEPIS' minor rewards as purchasable products to the bitrunning + order console. + - rscdel: Removed the base BEPIS disk from the bitrunner console + Sealed101: + - qol: you can undeploy fulton beacons by clicking them with an empty hand + - qol: you can rename fulton beacons with a pen + - bugfix: fixed geysers spawning on turfs with plants + Tattle: + - qol: drones now have individual names, instead of just "drone" + Toastgoats: + - balance: Gave the bluespace geode pirates 4 more teleporter bolt turrets. + - bugfix: The bluespace geode pirates no longer have a bluespace portal to the bottomless + pit dimension. + - rscadd: Station-safe dirt tiles for all your mapping needs, but surely no station + maps use the chasm baseturf ones, right? Right? + Watermelon914: + - spellcheck: Tweaks the message that players get when not being able to qualify + for roundstart antag to be more accurate as to what's happening. + Xander3359: + - rscadd: Contractor baton in traitor uplink for 12 TC + - balance: Ebow no longer has a reputation requirement. + carlarctg: + - bugfix: Fixed zombies being able to infect headless corpses (Including former + zombies) + - bugfix: 'Fixed bio armor being totally useless against zombies. Now it checks + how hurt your limb is: If it''s more than the bio armor value, you get infected. + THICKMATERIAL clothing guarantees at least 25 damage required to infect you, + non-thick clothing reduces effective defence by 25. In practice this means people + with MODsuits, biosuits will resist infection unless they''re pummeled into + crit, and wearing a firesuit will save you from the first few slashes.' + - bugfix: Fixed the bomb hood armor not having the same bio armor value as bomb + armor. + - qol: Added a message to the zed when they succesfully infect someone. + - code_imp: Turned some proc names into snake_case rather than, uh, nospacecase. + - bugfix: Fixes full advanced surgery trays spawning with 'nothing' + - refactor: Turned slapcrafting into a component! You can examine compatible items + to see what recipes they can be used in, and what the ingredients for them are. + For example, spears and the head-on-spear crafting recipe. + - bugfix: Valentines and ERTs will no longer get mood boosts from traitor moodener + items + lizardqueenlexi: + - bugfix: Left-clicking an empty surgery tray will now tell you exactly why it does + nothing. + mc-oofert: + - bugfix: you can now deconstruct exodrone scanner arrays + - bugfix: the tree in space exodrone adventure no longer softlocks you + - qol: the exodrone launchers now tell you on examine how to remove their fuel canister + if you somehow needed to do that + - balance: exodrone wide scans are now capped at 10 minutes + - balance: exodrone travel times are 18% faster + - balance: you can now upgrade scanner arrays for faster wide scan + - balance: exodrone point scan and deep scan are faster + - spellcheck: fixes several typos related to exodrones and gives scanner control + console a description + nikothedude: + - bugfix: You can no longer break the game by AI rolling in a card or APC + - qol: AI Roll now doesnt require you to click the exact turf to move you + - qol: AI roll cooldown and roll time is now a variable, making it possible for + AIs to become terrifying catamari damacy balls + timothymtorres: + - bugfix: Fix altars not allowing items to be sacrificed + vinylspiders: + - bugfix: Seeds will no longer be removed from existence after receiving the "You + can't seem to add [seed type] to the seed extractor" message + - bugfix: Some seeds that were previously not able to be added to the seed extractor + may now be added (starthistle for example) + - bugfix: fixes replica pod seeds spawning humans in nullspace +2023-09-29: + A.C.M.O.: + - bugfix: Fixes the death sandwich, making it safe to examine. + BurgerBB: + - bugfix: Scrubbers and Vents will no longer reset their settings on map load. + GPeckman: + - admin: There is now a tool to apply a DNA Infuser entry to any human. + Ghilker: + - code_imp: adds a gas connector component that allows connection to the atmos piping + system without the need of repathing + - refactor: changes the cryo machine to use this new system + Ghommie: + - bugfix: Fixed crabs not correctly (kinda) walking sideway. + Higgin: + - balance: Diabetics rejoice! Nerfed sugar OD/hyperglycaemic shock to be an immediate + KO followed by drowsiness afterwards until the OD is gone. + Jacquerel: + - bugfix: The Nuke Op MODsuit AI downloader only works once per purchase, as intended. + - bugfix: Blob Zombies and Blobbernauts have had their attack speed restored to + its original value + JohnFulpWillard: + - code_imp: Your bodytype now decides what gendered sounds you make. + - balance: You can now remove and replace power cells from PDAs (with screwdriver). + - balance: PDAs now drain their power cells harder, and also take into account active + programs & their flashlight being on. + - balance: PDAs running out of charge now turn their flashlights off. + Melbert: + - qol: Examine blocked out roundstart / latejoin job information. + - qol: Captain gets a little bit more information about how their radio works roundstart. + - bugfix: Fixed roundstart players not getting radio information. + - 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. + Rhials: + - bugfix: The Polymorph Belt should now update its sprite when active. + - qol: The freedom implant has received minor feedback and other minor usage improvements. + Sealed101: + - bugfix: fixed lobstrosities becoming unmovable when killed during their charge + windup + SyncIt21: - bugfix: removes incorrect stack traces when using some admin secrets + Vekter: + - bugfix: Fixes the missing grinder in Birdshot's Virology department + Vincent983: + - bugfix: the parole status and discharged status are now green and blue respectively + in the security record interface + Watermelon914: - balance: Head revolutionaries and heads of staff are no longer immediately considered disqualified when going AFK or disconnecting and are given a 2 minute grace period. - admin: Admins now get a log when a head revolutionary or head of staff disconnects or goes AFK during a revolution. They also get the same log 1 minute after to give them a chance to act on the information. + necromanceranne: + - bugfix: Splattercasting resets your blood to normal values when you transsform + into a vampire. + - bugfix: Gaining a new species will set your blood volume down to the normal volume + levels if higher than normal. + san7890: + - code_imp: Robot Customers have recently been touched codewise, please report any + bugs or unexpected behavior as there really should not be any. - refactor: Snakes have been refactored into basic mobs. This means that they are a bit more intelligent than previous snakes, making them more docile and averse to harming people (unless otherwise provoked). They do chomp all sorts of mice @@ -1224,6 +2124,13 @@ differs from the gender default. softcerv: - rscadd: Adds in the ability for certain NIFSofts to be kept between rounds. + timothymtorres: + - bugfix: Fix water puddle runtime when washing items + - rscadd: Add drinking water causes drunk mobs to become sober + - rscadd: Add candle design to biogenerator + yorii: + - bugfix: dead bodies now cool down to room temperature over time + - qol: allowed names to start with a number if AI/Borg 2023-09-30: DrDiasyl aka DrTuxedo: - balance: Holsters can now be clipped to any suit, and house Captain antique gun @@ -1240,6 +2147,9 @@ way to spells. - bugfix: Lavaland syndicate operatives can no longer trivially use the jetpack on their modsuit to fly over the lava. + Helg2: + - rscadd: SM crystal can now dust someone or something if it falls on it. + Jacquerel: - bugfix: If two cosmic heretics ascend in the same round, their star gazer survival will be linked to each individual heretic and not shared by just one of them. - bugfix: You can't click the Knock heretic portal to join as a mob while already @@ -1260,3 +2170,32 @@ - rscadd: A waterbreathing quirk - qol: Waterbreathing is now documented on species pages of the species that have it + - admin: Mob abilities can be granted to arbitrary mobs via the VV menu in a similar + way to spells. + - bugfix: Lavaland syndicate operatives can no longer trivially use the jetpack + on their modsuit to fly over the lava. + JohnFulpWillard: + - bugfix: PDA flashlights wont cause the cell to constantly drain faster and faster. + Singul0: + - bugfix: Fixes missing baseturfs and clowns in mining planet VDOM.. + SyncIt21: + - code_imp: removed some redundant code for airlocks + Timberpoes: + - balance: There are now 3 roundstart cyborg job slots open by default. + admeeer: + - bugfix: You can now spray paint the SM without getting dusted + jlsnow301: + - rscadd: Quantum servers now talk over supply channel when they're done cooling + off. Go outside! + - bugfix: You can no longer use dragon swoop to bypass cordons. + - bugfix: Netpod brain damage is now properly reduced upon server upgrades. + - bugfix: Fixed an bug where swapping bodies in vdom prevented you from disconnecting. + - bugfix: Fixed a bug where a quantum server could get locked out of loading new + domains. + - bugfix: Changed quantum console UI to display "no bandwidth" rather than "none" + lizardqueenlexi: + - bugfix: The reverse revolver now looks like a normal Syndicate revolver on inspection. + nikothedude: + - code_imp: Gauze removal is now handled by the gauze's destroy instead of seep_gauze + xPokee: + - bugfix: fixed the stamp in the metastation CMO office always spawning on the floor diff --git a/html/changelogs/archive/2023-10.yml b/html/changelogs/archive/2023-10.yml index 2fcba69cf733e..611e2e9c1123d 100644 --- a/html/changelogs/archive/2023-10.yml +++ b/html/changelogs/archive/2023-10.yml @@ -1,24 +1,5 @@ 2023-10-01: - Hatterhat: - - balance: Bullets have had their base type's wound bonus reduced back to 0, down - from 20, because wounds are actually quite punishing. Funnily enough, most bullets - already have modified wound bonuses - except c9mm, c10mm, and most incendiaries, - so this probably doesn't change much. - - balance: .50 (used in the snipers and renamed to .416 or whatever) is now back - 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 - pay Lopland's quartermasters to put the customary flashbang and teargas grenade - boxes into the Void Raptor's armory. - Melbert: - - qol: Examine blocked out roundstart / latejoin job information. - - qol: Captain gets a little bit more information about how their radio works roundstart. - - bugfix: Fixed roundstart players not getting radio information. - Paxilmaniac: - - image: The buttondown shirts (underwear) have been updated with a better look - and more contrasted palette - SkyratBot: + ArcaneMusic: - rscadd: A new export has arrived in the imports section, the Galactic Materials Market! You can use this to buy and sell minerals for profit or cost, as well as stock your station when you don't have any miners. @@ -63,6 +44,19 @@ domains. - bugfix: Changed quantum console UI to display "no bandwidth" rather than "none" - bugfix: Actually fixed the hooked item exploit. + GPeckman: + - bugfix: Security officers can now download the crew manifest PDA app that they + start with. + Ghommie: + - bugfix: Actually fixed the hooked item exploit. + Higgin: + - bugfix: Added warden to list of default required enemies for rulesets. + NPC1314: + - image: new chaplain outfit + SyncIt21: + - bugfix: Aloe and other baked foods that don't have reagents can be baked again + without turning to ash + carlarctg: - rscadd: Heretic Rebalance - balance: Researching the Main Knowledge paths that unlock Side Paths will grant one Side Point that can be used only on those side paths. You can still spend @@ -86,6 +80,11 @@ - bugfix: the round end report will accurately report ashwalker sacrifices nikothedude: - code_imp: Gauze removal is now handled by the gauze's destroy instead of seep_gauze + distributivgesetz: + - qol: Font settings in the chat panel applies to all text now. + nikothedude: + - balance: Sci now has access to the materials & canisters section in their departmental + order console ninjanomnom: - rscdel: An easter egg plushie that was spawning where it shouldn't has been brought back home. @@ -94,6 +93,12 @@ SkyratBot: - balance: Sci now has access to the materials & canisters section in their departmental order console + san7890: + - refactor: Supermatter Spiders have been refactored into basic mobs, on the extremely + off chance you spot one and also notice any weird bugs regarding it, please + report it. +2023-10-02: + Ghommie: - rscadd: Expanded the fishing portal generator. It now comes with several portal options that can be unlocked by performing fish scanning experiments, which also award a modest amount of techweb points. @@ -109,6 +114,7 @@ - qol: The experiment handler UI no longer shows unselectable experiments. - bugfix: Security officers can now download the crew manifest PDA app that they start with. + Jacquerel: - rscadd: Wizards who complete the grand ritual can now gift everyone with eternal life distributivgesetz: @@ -138,6 +144,11 @@ Coded by Jacquerel, Sprited by Dalmationer: - rscadd: Added tongs to the kitchen, which you can use to manipulate food from further away +2023-10-03: + ArcaneMusic: + - image: Railings have had a visual update. + CoiledLamb: + - rscadd: adds boxes of bandages, a quick healing item Fazzie: - rscadd: Added a budget solar crate to the derelict teleporter room - rscadd: Added a solar panel control to the north derelict solar @@ -181,12 +192,35 @@ ninjanomnom: - admin: Appearance vars in VV now display instead of being left blank 2023-10-05: + Ical92: + - bugfix: fixed misplaced door on syndicate listening post + Jacquerel: + - bugfix: Spiders, Morphs, Fire Sharks, and Regal Rats no longer have a reduced + click speed. + - balance: Kudzu will now be destroyed by adverse weather. + - balance: Kudzu will no longer spread over holes. + timothymtorres: + - bugfix: Fix organs having no DNA and become bloody when violently removed. +2023-10-04: + Coded by Jacquerel, Sprited by Dalmationer: + - rscadd: Added tongs to the kitchen, which you can use to manipulate food from + further away + Cruix: + - bugfix: Some icons for selecting character preferences are no longer scaled incorrectly. FIoppie: - sound: '*flap now makes a fluttering noise for moth wings' - sound: Moths now have a death sound - qol: '*tremble emote now is just "trembles!" instead of "trembles in fear!"' LT3: - image: Added colourable arm and leg wraps + Fazzie: + - rscadd: A lot of new content has been added to the beach away mission + - qol: It also looks substantially better, too! + Jacquerel: + - refactor: Raw Prophets now use the basic mob framework. Please report any unusual + behaviour. + - admin: Admins can turn off dynamic rulesets (or force them on despite not meeting + the qualification criteria) on a per-round basis. Melbert: - qol: Moved a lot of maintenance spawnpoints out of non-maintenance rooms. Some antags (paradox clone, fugitives, nightmares, spiders) are now less likely to @@ -203,6 +237,14 @@ - balance: CQC legsweeps now cause knockdown instead of paralysis. - balance: CQC kicks now knockout a target on the floor for ten seconds if they reach stam crit. Helmet protection shortens the knockout length. + TheBoondock: + - rscadd: Added blackout, happens when you drink...ALOT + Wallem: + - rscadd: Adds The Hand of Midas, an ancient Egyptian matchlock pistol. + ZephyrTFA: + - bugfix: The Syndicate have fired their previous construction company after poor + results in recent outposts. + lizardqueenlexi: - bugfix: Your heart will no longer be deleted if an admin heals you while you have corazargh in your system. - refactor: The cursed heart has been streamlined a bit, and now gives you a visual @@ -237,6 +279,35 @@ - code_imp: converted plumbing reaction chamber & mixing chamber UI files to Typescript - refactor: plumbing mixing chamber now also accepts an TGUI input list to input it's chemicals + - bugfix: Cutting open a hand-pressed paper bundle no longer deletes all of the + paper. + nikothedude: + - qol: Departmental order consoles now alert their department via radio when their + cooldown expires + ninjanomnom: + - admin: Appearance vars in VV now display instead of being left blank + timothymtorres: + - bugfix: Fix butchered monkeys to transfer reagents and diseases to meat + unit0016: + - rscadd: The funds the syndicate have been saving by restricting galley access + has been suddenly funneled into a singular mosaic pattern in the experiments + wing. + vinylspiders: + - refactor: fixed many instances of updatehealth() either being called needlessly + or not at all within on_mob_life() and in various other parts of the code + - refactor: damage procs now return useful information--the actual net change in + damage on the mob. added a unit test for this +2023-10-05: + lizardqueenlexi: + - bugfix: The Galactic Materials Market now offers things for sale as it should. + mc-oofert: + - code_imp: exploration drone adventures are now file-based and not database-based + timothymtorres: + - balance: CQC legsweeps now cause knockdown instead of paralysis. + - balance: CQC kicks now knockout a target on the floor for ten seconds if they + reach stam crit. Helmet protection shortens the knockout length. +2023-10-06: + EricZilla: - image: We have received a new shipment of IDs, as the old ones were found out to be haunted. - image: Laser tag red team ID has received a massive nerf @@ -262,6 +333,53 @@ - balance: Hypovial capacity now matches bottle capacity - bugfix: Broken and placeholder hypovials can no longer be printed in the ChemMaster Melbert: + SyncIt21: + - bugfix: plumbing reaction chamber now balances the ph of it's solution correctly + to the best of it's ability so no guarantees + - code_imp: converted plumbing reaction chamber & mixing chamber UI files to Typescript + - refactor: plumbing mixing chamber now also accepts an TGUI input list to input + it's chemicals + Wallem: + - rscadd: Buffs the Active Sonar module with a radial scan, and makes the power + costs more in-line with other modules. + mc-oofert: + - bugfix: you are now made a ghost faster if you get gibbed + neocloudy: + - bugfix: MetaStation disposal pipes from Cargo to Disposals/the rest of the station + are working again. +2023-10-07: + CoiledLamb: + - qol: allows janitor keys to be stored in janitor wintercoats and janibets + - qol: gives empty fireaxe and mech removal crowbars cabinets directional helpers + GPeckman: + - bugfix: Borgs will no longer become permanently upside-down if tipped over by + multiple people at the same time. + - bugfix: Adminheal will now properly clear negative mutations as intended. + - bugfix: The AI can no longer turn you off if you shapeshift into a robot. + - rscadd: The laser carbine, a weak but fully automatic sidegrade to the normal + laser gun, can now be ordered from cargo. + - bugfix: Engineering borgs can no longer grab and drop their own iron/glass sheet + module. + - bugfix: Ice whelps can now use spells given to them by admins, and people who + have polymorphed into ice whelps can now polymorph back to normal. + Ghommie: + - bugfix: Fixed silent catwalks. + - rscadd: Fish analyzers can now be used to perform fish scanning experiments. + - balance: They can now be singularly bought as a goodie pack for 125 cr each, instead + of a crate of three for 500 cr. + Isratosh: + - spellcheck: '"offical" has been officially corrected to "official" in several + official locations.' + Jacquerel: + - refactor: Rust Walkers, Ash Spirits, Flesh Stalkers, and The Maid in the Mirror + now use the basic mob framework. Please report any unusual behaviour. + Kapu1178: + - bugfix: Blood once again appears as small drops instead of splatters during minor + bleeding. + Likteer: + - rscadd: Fake moustaches are now poorly slapped on top of what you're wearing + Melbert: + - refactor: Refactors how ethereals update their color when damaged. - qol: AI, cyborg, and PAI camera (photo taking) behavior now uses balloon alerts and has sound effects associated - refactor: Refactored AI, cyborg, and PAI camera (photo taking) code @@ -342,45 +460,91 @@ - refactor: Refactored goats into basic mobs! Not much should have changed beyond their endless desire to retaliate should you attack them, they're still just as good as chomping away plant life as ever. + ReezeBL: + - bugfix: fixed a PDA's messenger TGUI issue with handling of destroyed recipients. + Sealed101: + - bugfix: fixed bad food not having bad food reagents + necromanceranne: + - balance: Despite earlier reports suggesting that the famous lethality of the Regal + Condor was largely a myth, there has been rumors that the gun has once again + started to display its true killing potential on any station that it 'manifests'. + oranges: + - rscadd: Dogs now react to centrist grillers more realistically + san7890: + - refactor: Refactored goats into basic mobs! Not much should have changed beyond + their endless desire to retaliate should you attack them, they're still just + as good as chomping away plant life as ever. + timothymtorres: + - refactor: Refactor gib code to be more robust. + - qol: Gibbing a mob will result in all items being dropped instead of getting deleted. + There are a few exceptions (like admin gib self) where this will not take place. + unit0016: + - bugfix: It is no longer possible to chasm yourself on the geode. Again. +2023-10-08: + Comxy: + - bugfix: Spider types get properly checked again. + Ghommie: + - bugfix: People who are irremediably bald can still grow a beard with barber aid. + Hatterhat: - qol: Miners can now tag monster spawners (necropolis tendrils, animal dens, demonic portals, and netherworld links) by using their mining scanner on it, which updates their GPS tag (and/or gives them one) to give it a numerical designation and a short identifier for what it's spawning. - oranges: - - rscadd: Dogs now react to centrist grillers more realistically + Jacquerel: + - bugfix: Flesh Worms will move smoothly more consistently. + LT3: + - image: Text alignment on ID cards slightly adjusted + Melbert: + - bugfix: Fixed an error from reading an ID card closely when you can't read + YehnBeep: + - qol: '"prison" intercoms have been renamed to "receive-only" intercoms to make + it clearer they cannot transmit.' + carlarctg: + - qol: Added slapcrafting to unloaded tech shells, click on them with ingredients + to quickly craft your shell. + san7890: + - refactor: Sloths are now basic mobs, however their overall sluggish behavior shouldn't + have changed much- let us know if anything is broken. + timothymtorres: + - bugfix: Fix bodies now lose fire stacks while husked. 2023-10-09: - Nerev4r: - - image: The crew's knowledge of origami and papercrafting has been extended to - making paper masks. Find them in the loadout, or just make them! - SkyratBot: - - qol: Supermatter shards can now be fastened with right click too. Now, just don't - forget to use a wrench. + Ben10Omintrix: + - refactor: ice demons have been refactored into basic mbos. please report any bugs + - rscadd: ice demons now have a unique trophy + IndieanaJones: - bugfix: Slaughter/Laughter demon melee cooldowns have been fixed and now attack at the regular player character attack speed + Jacquerel: - balance: The chemical gun and PKA pressure mod traitor items are now purchasable within 15 minutes of the round starting rather than 20/30. - balance: All preset bundle kits, the cash briefcase, the makarov, the revolver, the throwing weapon kit, c4, the detomatix cartridge, the large EMP bomb, gorillas, advanced mimery tome, pie cannon, clown car, His Grace, and the origami kit are now all purchasable at the start of a round. - - refactor: ice demons have been refactored into basic mbos. please report any bugs - - rscadd: ice demons now have a unique trophy - - bugfix: Spider types get properly checked again. - nikothedude: - - bugfix: Borers work now + distributivgesetz: + - qol: Supermatter shards can now be fastened with right click too. Now, just don't + forget to use a wrench. 2023-10-10: + BlueMemesauce: + - bugfix: fixed gibbing from having too much blood not working in some cases Fazzie: - qol: NT's logo on Centcom's landing pad looks better - qol: Centcom's Cargo and other rooms had their items rearanged to look marginally better. Like you're every gonna see them! - bugfix: The Thunderdome on Centcom now has up-to-date cooking machinery - GoldenAlpharex: - - qol: "You can now bind the Shift Layer Up/Down verbs to keybinds! Look for \"\ - shiftlayerup\" and \"shiftlayerdown\" respectively in your Game Preferences\ - \ >\_Keybindings to bind them, as they aren't bound by default (for now)!" + FlufflesTheDog: + - bugfix: Virtual domain gondola meat will no longer have a small chance to turn + you into a weaker gondola variant + GPeckman: + - bugfix: Warm donk-pockets should now have omnizine in them again. + HWSensum: + - balance: Reviver Implant now able to revive dead people. Hatterhat: - - qol: Internal health analyzer no longer displays both health and chem scans at - the same time; LMB for health, RMB for chems. + - bugfix: Necropolis tendrils and other mining mob spawners can be hit in melee + again. + Jacquerel: + - bugfix: Cowardly mobs will consistently run away from you instead of getting tired + and just sort of standing there after an initial burst of movement. Melber: - bugfix: Wearing bread (or roses, or other non-mask things) no longer prevents you from TTS speaking. @@ -388,103 +552,38 @@ - bugfix: Robotic bodyparts not attached to people are now properly affected by EMPs. - bugfix: Virtual Drink Glasses now look correct. - Motho: - - 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 - 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 - new to the job/department, set your title so your colleagues are aware! - - rscdel: Removed Engineering Trainee. - - qol: Alphabetized alt-titles excluding two key areas. The base title, and the - newbie title. - Nerev4r: - - image: One new long ring tail! - SkyratBot: - - bugfix: Warm donk-pockets should now have omnizine in them again. - - code_imp: COMSIG_GLOB_LIGHT_MECHANISM_COMPLETED is now COMSIG_GLOB_PUZZLE_COMPLETED - - qol: The autopsy tray (and surgery trays) can now hold the autopsy scanner - - bugfix: Metastation disposals will no longer infinitely loop garbage around the - station. - - bugfix: fixed gibbing from having too much blood not working in some cases - - refactor: Heavily refactored mirrors to be less ass cancer 1998 code. Player facing - changes are that mirrors now use a radial menu, women can get beards in magic - mirrors, made the magic mirror 'change sex' option Woke (it supports the 4 official - genders and physique as well) - - bugfix: Fixed Pride Mirror teleporting you into the space on the first use. Now - it waits until you officially cancel and say 'I am Done' so you can customize - yourself to your liking. - - bugfix: Cowardly mobs will consistently run away from you instead of getting tired - and just sort of standing there after an initial burst of movement. - - bugfix: Virtual domain gondola meat will no longer have a small chance to turn - you into a weaker gondola variant - - bugfix: Added extra checks to bitrunning domain cleanup so avatars are deleted - properly. - - rscadd: Quantum servers now look for a new machine called a byteforge to spawn - loot on- no longer on an invisible landmark. This should make the rooms rebuildable - after disasters. - - rscadd: '*Most* bitrunning machinery is now researchable and buildable via circuits - in the engineering protolathe.' - - refactor: Refactor gib code to be more robust. - - qol: Gibbing a mob will result in all items being dropped instead of getting deleted. - There are a few exceptions (like admin gib self) where this will not take place. - - code_imp: made an eensy teensie weensie change to some supermatter boilerplate + SyncIt21: - code_imp: moved some global procs and vars related to reagents to its own dedicated file. removed some unused procs and macros - code_imp: heavy auto docs for a lot of procs - refactor: adds reagent sanity and bound check code - refactor: multiple reagents are more uniformly distributed when transferring them between beakers or dropper & in every other reagent dependent operation - - code_imp: exploration drone adventures are now file-based and not database-based - - bugfix: Images are once more displayed as images in vv instead of as an appearance - TheSS13Melon: - - bugfix: Bitrunner now shows up with other cargo jobs on the suit sensors menu. Wallem: - 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 'Blood-Red MODsuit' is subtyped correctly - - balance: changes the mask in the 'Syndicate insurgent bundle' from SWAT to Syndicate - nikothedude: - - qol: SAD patients can now reject the treatment at the last step, preventing any - changes from being made - - balance: Synth tend wounds repeatable step now takes 2.5 seconds from 1 - - balance: 2 new synth tend wounds upgrades available to research - - bugfix: Synth tend wounds now gives proper feedback - - bugfix: Flipped tables now properly block movement - - balance: Defibrilators now EMP synths and apply a temporary brain trauma for 90 - seconds to them - - balance: Synth revival surgery time and steps vastly reduced/streamlined + YehnBeep: + - qol: The autopsy tray (and surgery trays) can now hold the autopsy scanner + admeeer: + - code_imp: made an eensy teensie weensie change to some supermatter boilerplate + jlsnow301: + - bugfix: Added extra checks to bitrunning domain cleanup so avatars are deleted + properly. + - rscadd: Quantum servers now look for a new machine called a byteforge to spawn + loot on- no longer on an invisible landmark. This should make the rooms rebuildable + after disasters. + - rscadd: '*Most* bitrunning machinery is now researchable and buildable via circuits + in the engineering protolathe.' + lizardqueenlexi: + - bugfix: Metastation disposals will no longer infinitely loop garbage around the + station. + mc-oofert: + - code_imp: COMSIG_GLOB_LIGHT_MECHANISM_COMPLETED is now COMSIG_GLOB_PUZZLE_COMPLETED ninjanomnom: + - bugfix: Images are once more displayed as images in vv instead of as an appearance - rscadd: Pipes now have a colored visual display that shows their contents at a glance. - softcerv: - - spellcheck: renames the purpura NIFSofts to libidine -2023-10-11: - GoldenAlpharex: - - bugfix: Frogs no longer make obnoxious sounds anymore (again). - Melbert: - - bugfix: Miner's Salve, Sterilizine, and Space Cleaner now all properly affect - burn wounds - Paxilmaniac: - - bugfix: The quartermaster's Rengo rifle will no longer have floating bayonets - SkyratBot: - - bugfix: moved a garbage spawner on Tramstation that was causing random runtimes - due to sometimes spawning in space depending on which module got loaded - - bugfix: fixes a runtime in organ on_death() - - bugfix: fixed some faulty research connections in between heretic's blade and - rust paths. - - bugfix: Heretic mobs will not be summoned with AI enabled, and won't turn into - small animals instead of summoning a flesh stalker. - - bugfix: Fixed some issues in the security camera UI - pressing next or back will - now loop through the cameras - - bugfix: Fixed some style issues in the camera console where selected cams weren't - showing as selected - - bugfix: Camera console search works again - - bugfix: you can no longer polymorph belt into a holoparasite + san7890: - refactor: Revenants, the mob that's split between planes of Life and Death, have been refactored into a basic mob. While this alone shouldn't touch behavior, a lot of the backend code has been gutted and refactored to try and furnish @@ -498,62 +597,107 @@ (by holy weapons) should be tweaked a bit to allow better management. This should mean that getting unstunned and such should be a bit more precise now. - qol: Revenant instructions are now relayed in a neat little examine block. - - bugfix: Wound promotion and demotion no longer removes gauze from the limb +2023-10-11: + GPeckman: + - bugfix: Borg modules can no longer be sold by pirates. + Iamgoofball: + - bugfix: Fixes a few runtimes with TTS and skips some code if TTS isn't enabled. + Jacquerel: - balance: The Changeling Space Suit has been replaced by a new ability which makes you passively spaceproof without replacing your clothing. - admin: Editing the atmos sensitivity variables on a basic mob during the game will now actually do something. + - qol: You can now see what drones and gorillas are holding by examining them. + - admin: It's now easier to give handless mobs hands by applying the "dextrous" + element. + - balance: Spiders and Bears can now climb railings (you know if... they'd rather + do that than destroy them). + - bugfix: Heretic mobs will not be summoned with AI enabled, and won't turn into + small animals instead of summoning a flesh stalker. + JohnFulpWillard: + - bugfix: Antiglow now probably has negative glow power. + Melbert: + - bugfix: Miner's Salve, Sterilizine, and Space Cleaner now all properly affect + burn wounds + Sealed101: + - bugfix: you can no longer polymorph belt into a holoparasite + ViktorKoL: + - bugfix: fixed some faulty research connections in between heretic's blade and + rust paths. + carlarctg: + - rscadd: Adds practice carbines to all firing ranges. They don't deal damage. - qol: Adds a base physical description proc to gameplay species, displays it on magic mirrors. It will give a description of not the lore of the species but in what way they differ from base species. - bugfix: Fixes a bad subtype on magical mirrors. - bugfix: Magical mirrors now give the user ADVANCEDTOOLUSER and LITERACY if they lack either of them, so monkey wizards aren't softlocked. - - bugfix: Borg modules can no longer be sold by pirates. - - balance: Unholy water acts as a coagulant for cultists. - - bugfix: bitrunners will no longer be lumped in with assistants on the crew monitor - console's display - - bugfix: count station food verb now counts food only onstation - - bugfix: Antiglow now probably has negative glow power. + jlsnow301: + - bugfix: Fixed some issues in the security camera UI - pressing next or back will + now loop through the cameras + - bugfix: Fixed some style issues in the camera console where selected cams weren't + showing as selected + - bugfix: Camera console search works again + lizardqueenlexi: - refactor: Harvester constructs have been updated to the basic mob framework. This should have very little impact on their behavior, but please report any issues. - - bugfix: Fixes a few runtimes with TTS and skips some code if TTS isn't enabled. - - sound: Add burning sound loop to bonfires and fireplaces - - code_imp: Improved fireplaces to only process when lit + mc-oofert: + - bugfix: count station food verb now counts food only onstation + necromanceranne: + - balance: Unholy water acts as a coagulant for cultists. + nikothedude: + - bugfix: Wound promotion and demotion no longer removes gauze from the limb + timothymtorres: + - sound: Add burning sound loop to bonfires and fireplaces + - code_imp: Improved fireplaces to only process when lit + vinylspiders: + - bugfix: fixes a runtime in organ on_death() - bugfix: using a magic mirror to change gender or skintone will now update your icon properly to match your selection - - rscadd: Adds practice carbines to all firing ranges. They don't deal damage. - - balance: Reviver Implant now able to revive dead people. - nikothedude: - - bugfix: Chest/Heads can now be augmented in the augment menu - - bugfix: Augments menu color wheels now properly recognize existing color - - rscadd: Science can now print advanced tools - - rscadd: Robotics can now print advanced medical tools and health analyzers - - rscadd: Roboticists can now randomly get advanced engi/medical tools in the mail - - rscadd: Table flipping now throws everything on the table + - bugfix: bitrunners will no longer be lumped in with assistants on the crew monitor + console's display + - bugfix: moved a garbage spawner on Tramstation that was causing random runtimes + due to sometimes spawning in space depending on which module got loaded 2023-10-12: - GoldenAlpharex: - - bugfix: Bitrunners and Coroners now have Akula outfits. - - bugfix: Shaft Miners now have the Cargo Akula outfit, rather than the default - one. - Hatterhat: - - balance: Blueshield's armor is now on par with a regular security vest's, with - comparatively improved fire/acid and barely improved bomb armor. (None of their - equipment covers their legs.) - - image: Blueshield's vest is now reskinnable, with three variants; the old slim - variant, a sec-vest variant, and a marine variant. - - image: Blueshield's earpiece is no longer a bright blue tumor on the side of their - head. + Ghommie: + - bugfix: Examining twice experiment handlers with an active fish-related experiment + now gives a comprehensible, correctly spaced list of scanned species rather + than something like "pufferfishguppyslimefishchasmchrab". + - bugfix: No more "line snapped" balloon messages everytime the fishing minigame + is over + - bugfix: Getting to the Master level of the fishing skill now correctly gives you + that slight helping hand to identify yet-to-be-caught fishes. + Isratosh: + - admin: Gondola supplypods are functional again. + Jacquerel: + - refactor: Gorillas now use the basic mob framework. Please report any unusual + side effects. + - rscadd: Adds a new lavaland ruin where you can find a unique egg. + - balance: Flesh Spiders heal automatically over time if they go a short time without + taking damage, instead of healing large chunks by clicking themselves and waiting + two seconds. + - qol: Spider egg clusters which only hatch into one kind of spider don't ask you + to select that one type from a radial menu with one option on it. + - qol: As a Flesh Spider, the game now tells you how you can heal yourself. LT3: + - rscadd: Introducing Nanotrasen Wave! A Nanotrasen 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. + - rscadd: Microwaves can be upgraded to add wireless charging + - rscadd: Cell-swappable microwave for the engineer on-the-go + - rscadd: Microwave now has a wire to swap charge/cook modes + - rscadd: Furnishings RCD upgrade now includes wireless microwave + - rscadd: Tramstation and Birdshot engineering break rooms now have microwave and + donk pockets. Some microwaves come pre-equipped with wireless charging and an + upgraded cell. + - bugfix: The microwave in the snowdin ruin is now real, not a fluff prop - bugfix: After the untimely loss of too many novice HoPs, the Icebox "New IDs and You" instructions have been moved from the icemoon wastes to the HoP's office, ending this rite of passage - bugfix: Added some missing firelocks in the pharmacy area. Icebox pharmacy now has a shower - OrionTheFox: - - image: returns Lopland Security's blue ID trims, and updated a few modular ID - trims for DS2/NRI - SkyratBot: + SyncIt21: - code_imp: removed round robin method of transferring reagents which would result in some missing reagents after transferring. - code_imp: added some more rounding for reagent operations. @@ -568,17 +712,6 @@ to 4 decimal places for accuracy. - qol: droppers & beakers round the amount of reagents transferred before displaying them to chat for easy readibility - - sound: the blood cult's rise to power is now accompanied by several new sound - effects - - rscadd: Adds a new lavaland ruin where you can find a unique egg. - - image: you can now change the style of lipstick to be higher or lower on the face - by alt-clicking the lipstick tube - - balance: Flesh Spiders heal automatically over time if they go a short time without - taking damage, instead of healing large chunks by clicking themselves and waiting - two seconds. - - qol: Spider egg clusters which only hatch into one kind of spider don't ask you - to select that one type from a radial menu with one option on it. - - qol: As a Flesh Spider, the game now tells you how you can heal yourself. - bugfix: You cannot order with cargo budget if you don't have cargo access in the Galactic Market - bugfix: Private & Cargo orders no longer get mixed together in the same crate @@ -589,11 +722,10 @@ budget only after the order has been confirmed in the cargo request console & after the shuttle arrives with your order. This way you drain the budget only after your orders were successfully delivered and not before hand itself - - qol: You can now see what drones and gorillas are holding by examining them. - - admin: It's now easier to give handless mobs hands by applying the "dextrous" - element. - - balance: Spiders and Bears can now climb railings (you know if... they'd rather - do that than destroy them). + ViktorKoL: + - sound: the blood cult's rise to power is now accompanied by several new sound + effects + mc-oofert: - refactor: venus human traps are basicmobs now - balance: venus human traps have 100 health - balance: venus human traps take damage out of range of kudzu, heal near kudzu, @@ -601,78 +733,61 @@ random - balance: also venus human trap tangle ability now needs you to actually move backwards to pull victims - - admin: Gondola supplypods are functional again. - - bugfix: Examining twice experiment handlers with an active fish-related experiment - now gives a comprehensible, correctly spaced list of scanned species rather - than something like "pufferfishguppyslimefishchasmchrab". - - bugfix: No more "line snapped" balloon messages everytime the fishing minigame - is over - - bugfix: Getting to the Master level of the fishing skill now correctly gives you - that slight helping hand to identify yet-to-be-caught fishes. - nikothedude: - - qol: Table flipping feedback is now in the form of balloon alerts - - rscadd: Robo can now print standard and alien surgical tools - - bugfix: Defibs now dont screw over organics if the user was robotic + vinylspiders: + - image: you can now change the style of lipstick to be higher or lower on the face + by alt-clicking the lipstick tube 2023-10-13: - Hatterhat: - - bugfix: The CIN replicator medipen pouch and pocket first-aid kit no longer have - bag-like functionality (scooping/the action button), which they didn't need - to fit in your pockets anyway. - - balance: First-aid pouches (the ones through Cargo for 300 cr) now have five slots; - one up from four. - - rscadd: Ammo pouches can now be reskinned into casing pouches, which let them - hold ten individual shell casings in your pocket. Yes, this includes shotgun - shells. This is also primarily intended for shotgun users. - - spellcheck: .50 BMG surplus, incendiary, and marksman have now been given more - SR-lore-accurate names. - - 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. + EuSouAFazer: + - qol: The rollerdome is now better - the dance floor works now, and the bar is + groovier. + Jacquerel: + - bugfix: Dullahans can read, strip people, and utilise tools. + - bugfix: Dullahan brains and eyes will not decay while inside their living severed + head. LT3: - - rscadd: Introducing Nanotrasen Wave! A Nanotrasen 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. - - rscadd: Microwaves can be upgraded to add wireless charging - - rscadd: Cell-swappable microwave for the engineer on-the-go - - rscadd: Microwave now has a wire to swap charge/cook modes - - rscadd: Furnishings RCD upgrade now includes wireless microwave - - rscadd: Tramstation and Birdshot engineering break rooms now have microwave and - donk pockets. Some microwaves come pre-equipped with wireless charging and an - upgraded cell. - - bugfix: The microwave in the snowdin ruin is now real, not a fluff prop - qol: Canisters can now be built in one step, no upgrading required Paxilmaniac: - - image: The sprites for forge structures have been vastly improved - SkyratBot: + - image: Inhands for the Sakhno and related rifles will no longer be way too high + or big + Rhials: + - rscadd: Two new psyker-oriented virtual domains -- Crate Chaos and Infected Domain. + - rscadd: Map helper for cyber-police corpse spawn. + - rscadd: Map helper for swapping the encrypted crate in an area with a random crate + from that same area. + jlsnow301: + - bugfix: Fixed the errant bluescreen in the camera console. + mc-oofert: + - code_imp: basicmobs that delete on death, ghost before dying + san7890: - bugfix: The Holy Hand Grenade's effect on revealing a revenant had its duration accidentally nerfed, it is now back to 10 seconds. - bugfix: Revenant midrounds should now properly run. - bugfix: Revenant harvesting should now let you actually pass the final do_after so you can harvest that sweet essence. - - refactor: Gorillas now use the basic mob framework. Please report any unusual - side effects. - - bugfix: Fixed the errant bluescreen in the camera console. - - code_imp: basicmobs that delete on death, ghost before dying - - qol: The rollerdome is now better - the dance floor works now, and the bar is - groovier. - - bugfix: Dullahans can read, strip people, and utilise tools. - - bugfix: Dullahan brains and eyes will not decay while inside their living severed - head. - - image: Inhands for the Sakhno and related rifles will no longer be way too high - or big - burgerenergy: - - qol: Both versions of Interdyne received some map touch ups. Standouts include; - a fax machine, dorm locks, a make shift brig area, a revamped bathroom, botany, - and kitchen, as well as backporting Icemoon improvements to the Lavaland version. - nikothedude: - - rscadd: Sec/Medhuds can now see a small ! if a person has the DNR quick, as well - as see a blurb in examine about it - - rscadd: You can now buckle yourself to washing machines! This serves no practical - purpose except for FUN TIMES. 2023-10-14: + BlueMemesauce: + - bugfix: Modsuits can no longer be deepfried + DrDiasyl: + - sound: laser2.ogg sound has been changed. Now laser carbine uses it. + - image: Laser carbine and orange laser sprite have been improved. + IndieanaJones: + - bugfix: Space Dragon can break walls, eat corpses and destroy mechs more efficiently + again + - bugfix: Player-controlled lavaland elites can once again return to their tumor + after winning their fight + Jacquerel: + - bugfix: '"Mirror Walk" is once more the domain of the Maid in the Mirror rather + than "every heretic summon"' + - bugfix: Heretic mobs can once again survive space + - bugfix: Pete's anger management training has worn off, and he will once again + sometimes pick a fight with you for absolutely no reason. + - qol: Attacking a goat will not spam messages so frequently. LT3: - image: Nitrogen canisters are now yellow, antinob are grey/yellow, empty are grey, hydrogen are red/white + MTandi: + - bugfix: The crew is instructed to place fax machines properly in the center of + a table without hanging. Melbert: - bugfix: Fixes Mauna Loa, Monover, Silibinin, Granibitaluri not exiting your system on metabolism @@ -680,79 +795,62 @@ - bugfix: Holy Water no longer spams cultists with big text every time, it's much more tame now Rhials: - - rscadd: Two new psyker-oriented virtual domains -- Crate Chaos and Infected Domain. - - rscadd: Map helper for cyber-police corpse spawn. - - rscadd: Map helper for swapping the encrypted crate in an area with a random crate - from that same area. - qol: You can now return to your old body after being summoned by a manifest rune. - qol: You can now return to your old body after dying in CTF. - qol: You can now return to your old body after dying in the Medisim Shuttle battle area. - qol: You can no longer suicide in CTF areas, for integrity purposes. - SkyratBot: - - bugfix: Space Dragons can now, once again, tear down walls and eat corpses. They - also have regained their special damage modifier when attacking mechs. - - bugfix: Pete's anger management training has worn off, and he will once again - sometimes pick a fight with you for absolutely no reason. - - qol: Attacking a goat will not spam messages so frequently. + bun235: + - rscadd: targetting someone's arm with *slap now has a unique message + dragomagol: + - qol: apples can now be sliced + mc-oofert: + - bugfix: sqdl2 query readout displays location of turfs properly + ninjanomnom: - admin: VV can now display the contents of special byond lists like filters, or client.images - admin: VV on images now displays the image in the header - admin: VV can now display filters and includes their type - - qol: apples can now be sliced - - bugfix: sqdl2 query readout displays location of turfs properly - - sound: laser2.ogg sound has been changed. Now laser carbine uses it. - - image: Laser carbine and orange laser sprite have been improved. - - bugfix: '"Mirror Walk" is once more the domain of the Maid in the Mirror rather - than "every heretic summon"' - - bugfix: Heretic mobs can once again survive space - - rscadd: targetting someone's arm with *slap now has a unique message - - bugfix: The crew is instructed to place fax machines properly in the center of - a table without hanging. - - bugfix: Modsuits can no longer be deepfried - - bugfix: Space Dragon can break walls, eat corpses and destroy mechs more efficiently - again - - bugfix: Player-controlled lavaland elites can once again return to their tumor - after winning their fight - TheSS13Melon: - - rscadd: Adds the Security Patrol Cap and Sol Police Helmet to the security vendor - - rscadd: Adds the Sol Police Helmet to /datum/supply_pack/security/helmets_skyrat - - rscdel: Removes redsec helmets from /datum/supply_pack/security/helmets_skyrat - nikothedude: - - bugfix: Experimental robotic tend wounds now actually shows up + san7890: + - bugfix: Space Dragons can now, once again, tear down walls and eat corpses. They + also have regained their special damage modifier when attacking mechs. 2023-10-15: - LT3: - - bugfix: Fixed moldies event default weight overriding the configured event weight + GPeckman: + - bugfix: Having all augmented limbs will make you properly spaceproof once again. + - bugfix: Androids are immune to crit damage again. + - bugfix: Surgery on robotic limbs can be canceled. + Iamgoofball: + - balance: Allows spacemen to use age-appropriate drugs by making it so you can + now huff N2O to get high. + Jacquerel: + - refactor: Space Dragons are now basic mobs, please report any unexpected behaviour. + - balance: You can now see that a space dragon is destroying a wall with a visual + indicator of the wall being damaged. + - balance: Space Dragons can pry open airlocks. Melbert: - qol: Leaning now has a small animation associated. - qol: Cyborgs can now lean against walls. - bugfix: Fixed some runtimes associated with leaning. - bugfix: Fixed being able to lean while dead or in otherwise invalid states. - SkyratBot: - - bugfix: Fixes Monkey's Delight recipe - - refactor: Space Dragons are now basic mobs, please report any unexpected behaviour. - - balance: You can now see that a space dragon is destroying a wall with a visual - indicator of the wall being damaged. - - balance: Space Dragons can pry open airlocks. - - bugfix: makes the riot helmet hide hair like other sec helmets + ZephyrTFA: - rscadd: Vent Pumps can now be overclocked, do some light reading in the air alarm to figure out what this means. - balance: Vent Pumps now have fan integrity, the damaging of which reduces their ability to move air. - sound: Overclocking sounds, including spool, stop, and loop - - balance: Allows spacemen to use age-appropriate drugs by making it so you can - now huff N2O to get high. - honkpocket: - - bugfix: fixed ghost bedsheet wearable being an error sprite on digitigrade legged - characters - vinylspiders: - - bugfix: fixed an issue that could cause the hair the layering option to reset - itself upon unequipping a paper mask - - qol: paper masks have an action button for adjusting the mask drawing + hair layering, - as well as the ability to hide the strap with ctrl click. changing the drawings - on the mask now require a pen. + carlarctg: + - qol: Bladists can now use silver *or* titanium while creating their blades + - bugfix: Fixes Monkey's Delight recipe + starrm4nn: + - bugfix: makes the riot helmet hide hair like other sec helmets 2023-10-16: - SkyratBot: + BlueMemesauce: + - spellcheck: Broken canisters now have a description + Cruix: + - rscadd: Added Afro (Huge) hairstyle + Melbert: + - code_imp: Removed species death and species hitby, replaced any uses with signals. + SyncIt21: - bugfix: plumbing setups should(hopefully) no longer grind to a halt nor will overflow with excess volume of reagents. - code_imp: created defines for min & max ph. Improved some reaction_reagent code. @@ -761,79 +859,75 @@ Optimized it's code overall - refactor: examining each individual reagent will display their results back to 2 decimal places again and not 4 for easy readability. - - qol: Bladists can now use silver *or* titanium while creating their blades - - spellcheck: Broken canisters now have a description - - rscadd: Added Afro (Huge) hairstyle Wallem: - bugfix: The active sonar module won't attempt to create 6000000 new pings per process cycle anymore - nikothedude: - - rscadd: The nobility dresscoat, donator reward for NikoTheGuyDude 2023-10-17: + DaydreamIQ: + - qol: Icebox Visitation now has a door connected to brig Fazzie: - - bugfix: Fixed the doors on the Beach away mission - - bugfix: Fixed the railings on the Beach away mission - rscadd: The free golem ship has been swapped for a much better one, with fishing equipment. + - rscadd: The wizard's den now has a book with the guide to wizard. Hope that helps + their winrate! + - qol: The wizard's den no longer looks like a flying cucumber and has received + a major overhaul. Hooray! + - bugfix: Fixed the doors on the Beach away mission + - bugfix: Fixed the railings on the Beach away mission GoldenAlpharex: - - code_imp: Documented a huge part of telecommunications machinery and signal code, - and did some minor code improvements to said code. - code_imp: Got rid of a few more single-letter variables. Only over six thousand left to go, woo! + - code_imp: Documented a huge part of telecommunications machinery and signal code, + and did some minor code improvements to said code. - bugfix: Hands of cards will now properly display the last card added to the hand all the time, even when there's more than five cards in that hand. + Higgin: + - bugfix: Fixes respiration-transmission advanced viruses to no longer have an always-guaranteed + infection chance per tick. + Jacquerel: + - bugfix: Megafauna, lavaland elites, and abstract mobs now correctly cannot be + spawned by a toolbox of ash drake summoning LT3: - - bugfix: Fixed font scaling for announcements - bugfix: The remaining survival pod bed on Icebox is now a medical bed - - bugfix: Announcement text now uses the intended CSS + - bugfix: Fixed font scaling for announcements - bugfix: Microwave will no longer get stuck turned on if a PDA has no cell - bugfix: Silicons can no longer silently change the microwave between cook and charge Melbert: + - rscdel: Deleted a mapped in wrestling belt - refactor: Refactored unarmed attacking mechanisms, this means dis-coordinated humans will now bite people like monkeys (like how coordinated monkeys punch people like humans?) - refactor: Dis-coordinated humans smashing up machines now use their hands, rather than their paws - Motho: - - sound: Plasmamen all across the sector have begun to announce their fright or - pain in a new way. - Paxilmaniac: - - image: A large number of security's clothing has been unified in color palette - and updated in style. - - rscdel: Some really old or unfitting security outfits, like the correction's officer's - weird hat and the unusued tactical peacekeeper jumpsuit have been removed. - RatFromTheJungle: - - qol: moves the self authentication device's bulky desc to an examine more, and - puts a shorter on in it's place. - SkyratBot: - - bugfix: Fixes a bug with the plasma flower core MODsuit that would cause a butterfly - murder scene wherever there were turrets - - sound: added sounds for scanning valued items with an export scanner - - bugfix: Delta's cargo bay has been connected to the atmos pipe networks + NamelessFairy: - bugfix: TGC Mana and Health bars are correctly offset on the holodeck. - - qol: Icebox Visitation now has a door connected to brig - - bugfix: Having all augmented limbs will make you properly spaceproof once again. - - bugfix: Androids are immune to crit damage again. - - bugfix: Surgery on robotic limbs can be canceled. + - bugfix: Players without bodies to return to can play CTF again. + RedBaronFlyer: + - sound: added sounds for scanning valued items with an export scanner + Rhials: + - balance: Random event frequency has been adjusted to fire events more often. + - code_imp: The event subsystem has been prettied up with comments and longer variable + names. + SyncIt21: - code_imp: removed unnecessary calls to `update_total()` - - bugfix: Megafauna, lavaland elites, and abstract mobs now correctly cannot be - spawned by a toolbox of ash drake summoning + Thunder12345: + - bugfix: Delta's cargo bay has been connected to the atmos pipe networks - bugfix: Fuel tanks are explosive again + jlsnow301: - bugfix: TGUI Say should no longer flash during initialization - - bugfix: Fixes respiration-transmission advanced viruses to no longer have an always-guaranteed - infection chance per tick. - honkpocket: - - balance: The Bolt Pepperball AHG is now small sized instead of normal sized - jjpark-kb: - - rscadd: added the worm/ant farm - - balance: ash farming can be worm fertilized (same as regen core), but now only - does one harvest - - image: added the worm/ant farm, worm fertilizer + mc-oofert: + - rscadd: added a new hallucination, your mother vinylspiders: - - bugfix: air alarm and mass driver controller in Voidraptor disposals room will - no longer overlap + - bugfix: ghost sheets will now have the correct flags for digi sprites + - bugfix: basic mobs will no longer runtime when trying to check the faction of + a porta turret + - refactor: faction checking is now done at the atom/movable level + - bugfix: Fixes a bug with the plasma flower core MODsuit that would cause a butterfly + murder scene wherever there were turrets 2023-10-18: + Ghommie: + - bugfix: Fish analyzers can now be actually used for experiments. LT3: - refactor: Tram process/industrial lift refactored into transport subsystem - refactor: Nanotrasen has traded in last year's tram for a new 2563 model! @@ -869,50 +963,32 @@ Melbert: - bugfix: You can punch yourself again - rscdel: Deleted a mapped in wrestling belt + MTandi: + - bugfix: Distilled drink quality is fixed - can't give a mood debuff anymore + Melbert: - rscadd: Revenants can now use Ouija Boards - rscadd: Ouija Boards now have more options to select from by default (and admins can VV it to even more options) - bugfix: Blind people are now worse at using Ouija Boards - Paxilmaniac: - - rscadd: The newly resprited peacekeeper uniforms for security can now be gotten - in the loadout and in the clothing vendor. - Rhials: - - balance: Random event frequency has been adjusted to fire events more often. - - code_imp: The event subsystem has been prettied up with comments and longer variable - names. - SkyratBot: - - rscadd: added a new hallucination, your mother - - bugfix: Fish analyzers can now be actually used for experiments. - - bugfix: Players without bodies to return to can play CTF again. - - bugfix: Distilled drink quality is fixed - can't give a mood debuff anymore + - bugfix: You can punch yourself again + ninjanomnom: + - admin: Invisimin can now be used on mobs that are already invisible, whether through + temporary or permanent effects. + - bugfix: Monkeyize/Humanize mob transformations no longer permanently reveal invisible + mobs if they had effects making them invisible otherwise. + - bugfix: Objects with the undertile element that have been made invisible through + other means are no longer revealed by being uncovered. + vinylspiders: - bugfix: fixed runtime caused by simple mobs AttackingTarget() missing an arg - - bugfix: ghost sheets will now have the correct flags for digi sprites - bugfix: being killed or ghosting while being scoped will no longer cause the cursor offset to persist in a bugged state - - bugfix: basic mobs will no longer runtime when trying to check the faction of - a porta turret - - refactor: faction checking is now done at the atom/movable level - dawsonkeyes: - - balance: random roll contractors now start with zero telecrystals instead of thirteen - sqnztb: - - bugfix: NIF Starter Kits (for ghost roles) correctly come with the Polymorph disk - again. 2023-10-19: - Fazzie: - - rscadd: The wizard's den now has a book with the guide to wizard. Hope that helps - their winrate! - - qol: The wizard's den no longer looks like a flying cucumber and has received - a major overhaul. Hooray! - Hatterhat: - - qol: Interdyne miners now spawn with a point transfer card in their backpacks. - - qol: Sansufentanyl now spawns in the Interdyne base, since it's something they - make in-lore. It can be found in a freezer crate next to their blood freezer. LT3: - spellcheck: More announcement CSS fixes, now including light mode - - refactor: There are a massive bunch of tram changes, SR edits applied - - refactor: Find all the new stuff down on the October 17 changelog - - image: Akula wetsuit now has a tail-less version - SkyratBot: + Rhials: + - qol: As an observer, clicking on a bitrunning pod will let you orbit it's bitrunning + avatar. Cool! + carlarctg: - qol: 'Added slapcraft recipes for: Pillow suits, pillow helmets, bone and sinew tailoring/weaponry, pipeguns, ghetto jetpacks, and pneumatic cannons.' - code_imp: The base type of cowboy hats no longer looks and is named like a bounty @@ -921,47 +997,50 @@ - bugfix: Fixed an issue where if a slapcraft recipe required more than one instance of its 'primary' slapcrafting item, it wouldn't show the additional instance when examining its recipes. - - bugfix: '"line snapped" and "rod dropped" balloon alerts will now display when - they are supposed to while fishing' - - admin: Invisimin can now be used on mobs that are already invisible, whether through - temporary or permanent effects. - - bugfix: Monkeyize/Humanize mob transformations no longer permanently reveal invisible - mobs if they had effects making them invisible otherwise. - - bugfix: Objects with the undertile element that have been made invisible through - other means are no longer revealed by being uncovered. + lizardqueenlexi: + - qol: Birdshot ordnance is now equipped with a second RPD and two holofan projectors. + - qol: Ordnance mishaps on Birdshot are significantly less likely to slam you into + an electrified window until you die. + vinylspiders: - bugfix: fixes a tgui bluescreen bug with the bank account console that can occur when there is bad bank account data + - bugfix: '"line snapped" and "rod dropped" balloon alerts will now display when + they are supposed to while fishing' 2023-10-20: - Iamgoofball: - - qol: You can now rename and describe any loadout item, not just plushies. + GPeckman: + - bugfix: B.O.R.I.S. modules can once again be properly applied to the unformatted + borg created when you reset an AI shell. + Higgin: + - bugfix: automatic breathers rejoice. oxyloss now knocks people out again. LT3: - bugfix: Maploaded medical beds now have correct brake lights + LemonInTheDark: + - rscadd: Screen is now more grungy for halloween Melbert: - - bugfix: Spasms won't trigger in stasis, incapacitated, if your hands are blocked, - or you are immobilized. + - bugfix: Silicons don't spark when shot by disablers + - bugfix: Changelings who fail to catch something with a tencacle will have throw + mode disabled automatically + - bugfix: Fixes occasions where you can reflect with Sleeping Carp when you shouldn't + be able to + - bugfix: Fixes some projectiles causing like 20x less eye blur than they should + be + - refactor: Refactored bullet-mob interactions + - refactor: Nightmare "shadow dodge" projectile ability is now sourced from their + brain - bugfix: Magic Mirrors can change your race again (?) - bugfix: Magic Mirrors properly prevent you from being soft locked - bugfix: Robo customers are as robust as before + - bugfix: Spasms won't trigger in stasis, incapacitated, if your hands are blocked, + or you are immobilized. Rhials: - qol: Ghosts will now be prompted to orbit when someone loses control due to being blackout drunk. - qol: Ghosts will now be prompted to orbit when a cultist begins inscribing a Nar'Sie rune. - - qol: As an observer, clicking on a bitrunning pod will let you orbit it's bitrunning - avatar. Cool! - SkyratBot: - - bugfix: automatic breathers rejoice. oxyloss now knocks people out again. - - rscadd: Screen is now more grungy for halloween - - bugfix: People should be crawling into welded vents a lot less now. - - bugfix: Heretic summons should now display the correct name when polling ghosts - to play as them. - - bugfix: Fixes a bug where your mother would delete your species after calling - you a disappointment, rendering you a broken husk of a mob - - qol: Birdshot ordnance is now equipped with a second RPD and two holofan projectors. - - qol: Ordnance mishaps on Birdshot are significantly less likely to slam you into - an electrified window until you die. - - bugfix: B.O.R.I.S. modules can once again be properly applied to the unformatted - borg created when you reset an AI shell. + Yttriums: + - balance: reduces cellulose fibers required for advanced regenerative mesh creation + from 20u to 10u + carlarctg: - code_imp: Adds 'Bloody Spreader' component that bloodies everything it touches! - code_imp: For example inserting an item into it if it is a storage item. Or entering it if it's a turf, or bumping onto it, or... you get the point, hopefully. @@ -972,39 +1051,44 @@ - rscadd: Meat slabs contain a limited amount of both components, eventually they will 'dry out'. - code_imp: Added a signal for when an item is entered into storage. + lizardqueenlexi: + - bugfix: Heretic summons should now display the correct name when polling ghosts + to play as them. + san7890: + - bugfix: People should be crawling into welded vents a lot less now. + timothymtorres: - bugfix: Airtank suicides will now drop items and organs again. - - balance: reduces cellulose fibers required for advanced regenerative mesh creation - from 20u to 10u - dtfe3: - - rscadd: donator item for dtfe + - bugfix: Fix husks fire decay rate to be slower. Pyre chaplains can now use husked + bodies (only caused by burns) to complete their burning sacrifice rite. + vinylspiders: + - bugfix: Fixes a bug where your mother would delete your species after calling + you a disappointment, rendering you a broken husk of a mob 2023-10-21: - LT3: - - image: Player dragon maid uniform + Ben10Omintrix: + - rscadd: added a new syndicate item - the bee smoker + GPeckman: + - qol: Nonhuman autopsy, Tier Two Lasers, and several other experiments can now + be completed earlier. + - balance: Advanced robotics techweb node no longer requires neural programming + node. + - rscdel: Protolathe/circuit imprinter/techfab designs costing reagents is now totally + deprecated. + Ical92: + - bugfix: connected Meta's Cytology equipment properly + Jacquerel: + - bugfix: Blobbernauts will once again take damage when not on blob tiles. LT3, san7890: - rscadd: Announcements have gotten a fresh coat of paint! They should be popping - with splendid new colors and should have a lot less ugly linebreaks, while still - managing to keep your attention at the screen. - Melbert: - - bugfix: Silicons don't spark when shot by disablers - - bugfix: Changelings who fail to catch something with a tencacle will have throw - mode disabled automatically - - bugfix: Fixes occasions where you can reflect with Sleeping Carp when you shouldn't - be able to - - bugfix: Fixes some projectiles causing like 20x less eye blur than they should - be - - refactor: Refactored bullet-mob interactions - - refactor: Nightmare "shadow dodge" projectile ability is now sourced from their - brain - SkyratBot: - - bugfix: Scream for me, the spell, now works - - bugfix: Non-random puncture wounds can now be applied - - rscadd: Add new fitness skill and mechanics for weight machines and punching bags. Working - out with a proper diet and good sleep will result in massive fitness gains. As - your fitness increases, so does your mass. - - rscadd: added a new syndicate item - the bee smoker + with splendid new colors and should have a lot less ugly linebreaks, while still + managing to keep your attention at the screen. + OrionTheFox: + - bugfix: '[Tramstation] fixed an unlinked Disposals Bin in the Pod Bay' + Paxilmaniac: - code_imp: Bitrunner domains can now have spells or items from disks disabled if the domain maker wants such a thing - - bugfix: '[Tramstation] fixed an unlinked Disposals Bin in the Pod Bay' + Pickle-Coding: + - bugfix: Fixed tesla coil zaps cutting off too early. + SyncIt21: - bugfix: plumbing pill press & bottler won't stop when processing 50 unit bottles - code_imp: 'made a lot of variables defines and lists static to save memory for plumbing pill press. Moved global lists to it''s rightful @@ -1012,56 +1096,71 @@ place' - code_imp: copied over chem master pill & patch designs over to plumbing pill press and removed the old designs. resized UI - - bugfix: making assembly activated bombs works again - - bugfix: Fixed tesla coil zaps cutting off too early. + - bugfix: RCD & RTD ui updates when switching between root categories + Watermelon914: + - admin: Added SS13.get_runner_ckey() and SS13.get_runner_client() which stores + the ckey and returns the client of the user who ran the lua script. Can be unreliable + if accessed after sleeping. + - admin: Added timer loop helpers to the SS13.lua module, check the docs + - admin: The SS13.lua module can now be made local without causing any errors. + lizardqueenlexi: - refactor: Artificer constructs have been converted to the basic mob framework. This should change very little about them, but please report any bugs. NPC artificers are now smarter, and will focus on healing nearby wounded constructs - if you see them, take them out first! + mc-oofert: + - bugfix: making assembly activated bombs works again + nikothedude: + - bugfix: Scream for me, the spell, now works + - bugfix: Non-random puncture wounds can now be applied + ninjanomnom: + - balance: It damages your eyes to look at the supermatter singularity + san7890: - refactor: Holodeck monkeys have been moved to the same system as old monkeys, and should retain the similar "ephermeal" behavior, while being a whole lot smarter by leveraging new AI. Please report anything that is completely wack about this. - balance: Slimes can't eat holodeck monkeys anymore, because apparently they could and that is wack. - - bugfix: Blobbernauts will once again take damage when not on blob tiles. - - qol: Nonhuman autopsy, Tier Two Lasers, and several other experiments can now - be completed earlier. - - balance: Advanced robotics techweb node no longer requires neural programming - node. - - bugfix: RCD & RTD ui updates when switching between root categories - - admin: Added SS13.get_runner_ckey() and SS13.get_runner_client() which stores - the ckey and returns the client of the user who ran the lua script. Can be unreliable - if accessed after sleeping. - - admin: Added timer loop helpers to the SS13.lua module, check the docs - - admin: The SS13.lua module can now be made local without causing any errors. - - bugfix: Fix husks fire decay rate to be slower. Pyre chaplains can now use husked - bodies (only caused by burns) to complete their burning sacrifice rite. - - bugfix: connected Meta's Cytology equipment properly - jjpark-kb: - - bugfix: ant farms produce the unprocessed ore now instead of the smelted/completed - ore - - rscadd: added stone to the ore list of ant farms - - rscadd: you can change arrows into different types by hitting them with the conversion - item (bronze tile for bronze, bone for bone, and sinew for ash) - - rscdel: removes the forged arrow subtype - - bugfix: fixes arrow icons being different again - nikothedude: - - bugfix: Unlinked RCDs now function on T3 synth blunt wounds - - qol: Synthetic blunt wounds now show their current step along with instructions - on wound scans - - qol: Synthetic blunt wounds now warn you if crowbarring open the limb can shock - you - ninjanomnom: - - balance: It damages your eyes to look at the supermatter singularity + timothymtorres: + - rscadd: Add new fitness skill and mechanics for weight machines and punching bags. Working + out with a proper diet and good sleep will result in massive fitness gains. As + your fitness increases, so does your mass. 2023-10-22: + Ben10Omintrix: + - bugfix: fixes not being able to walk over or pull mook corpses + BlueMemesauce: + - balance: Export scanner no longer shows value of shipping manifests, now you actually + have to read them. + - balance: Shipping manifest penalty is now only half crate cost as well as capped + to 500 credits. + - balance: Shipping manifests for private orders or locked crates can no longer + have the incorrect contents error. Shipping manifests for departmental orders + can n longer have any error. + FlufflesTheDog: + - bugfix: Kisses and emitters no longer make the SM crystal scream so much. + Ghommie: + - bugfix: Cooked meat no longer spreads blood around as if it weren't cooked. + Ical92: + - rscadd: Demonic-Frost Miner's ruin gets an aesthetic refresh + Jacquerel: + - bugfix: Meatwheat Clumps, Bungo Pits, and Eggplant Eggs should once again inherit + reagent purity from the grown item which produces them. + - bugfix: You should be revived properly when entering the mansus realm following + a heretic sacrifice + - bugfix: The buff which is supposed to heal you in the mansus realm will now do + that instead of unavoidably damaging you + - balance: The mansus realm's healing buff heals for 25% as much as it did before + it was broken JohnFulpWillard, sprites by CoiledLamb: - rscadd: You can now play Mafia on your PDA. - balance: Mafia changelings can now only talk to eachother during the night. - bugfix: Mafia abilities can't be repeatedly used on people. + 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. LT3: - - image: Added Halloween themed floor/tram tiles - - spellcheck: Centcom message headers are no longer hot pink - bugfix: Fixed tram cabinet LMB/RMB actions being reversed - bugfix: Tram cabinet can now read IDs inside PDAs and wallets - bugfix: Crossing signals now correctly indicate broken/no power @@ -1069,72 +1168,30 @@ - bugfix: You can actually unbolt the tram controller from the wall - qol: Tram spoilers now have visual and examine hints about being malfunctioning/emagged - qol: Improved some tram error messages - Melbert: - - rscadd: Adds Food Allergies as a -2 quirk. You can select which food you're allergic - to or rock a random option. - Nerev4r: - - bugfix: Demonic Watchers now drop the proper trophy. - SkyratBot: - - bugfix: You should be revived properly when entering the mansus realm following - a heretic sacrifice - - bugfix: The buff which is supposed to heal you in the mansus realm will now do - that instead of unavoidably damaging you - - balance: The mansus realm's healing buff heals for 25% as much as it did before - it was broken - - bugfix: Fix holodeck items from being eaten, crafted, recycled, juiced, or grinded. - - rscadd: Adds a subtle ghost poll. This pings in dead chat and gives a screen alert, - but no TGUI popup. Orbit the point of interest to be selected for the role. - - refactor: A number of ghost spawns now feature this alert. Write an issue report - if anything breaks. - - balance: Export scanner no longer shows value of shipping manifests, now you actually - have to read them. - - balance: Shipping manifest penalty is now only half crate cost as well as capped - to 500 credits. - - balance: Shipping manifests for private orders or locked crates can no longer - have the incorrect contents error. Shipping manifests for departmental orders - can n longer have any error. + - image: Added Halloween themed floor/tram tiles + LemonInTheDark: + - rscadd: Starlight should be a bit more intense, and flow better onto non space + tiles + MTandi: - qol: changed wording of a popup in the admin dressing menu - - bugfix: fixes not being able to walk over or pull mook corpses - - rscadd: Most pies can now be sliced rather than being consumed whole. - - rscadd: Rootdough can be crafted using soy milk in place of eggs. - - rscadd: Two new lizard-safe rootbread sandwiches can be crafted. - - bugfix: admin triggering the Revenant event now works again - - rscadd: Demonic-Frost Miner's ruin gets an aesthetic refresh - - qol: signalers now tell you their cooldown and also use balloon alerts - - bugfix: Meatwheat Clumps, Bungo Pits, and Eggplant Eggs should once again inherit - reagent purity from the grown item which produces them. - - bugfix: Kisses and emitters no longer make the SM crystal scream so much. - rscadd: Gygax type mechs now have an option to disable overclock when overheated. - bugfix: Fixed overclocking having no effect on Ripley. + Melbert: + - rscadd: Adds Food Allergies as a -2 quirk. You can select which food you're allergic + to or rock a random option. + SyncIt21: - bugfix: cryo and stuff that transfers reagents with a multiplier should transfer correct volumes as expected. - - bugfix: Fix cqc kicks to only cause staminaloss when target is on the floor - - rscadd: New dream that plays sound at you - - rscadd: Starlight should be a bit more intense, and flow better onto non space - tiles - - bugfix: Cooked meat no longer spreads blood around as if it weren't cooked. Treach: - bugfix: Skeleton Keys now fit in the Explorer's Webbing. -2023-10-23: - Paxilmaniac: - - rscadd: The icewalker camp has been completely remade to be less of a single house - in the middle of hell, to a location befitting our viking felines. As a side - effect, the spawn of the camp is now static and in the corner of the map, because - the ruin loader really did not enjoy the size of the templates. - - image: Sprites for all of the forging related structures have been redone because - I REALLY hated what I did with them before - - image: Several new sprites for things like wooden shelves, barrels, and so on, - all made by yours truly - - rscadd: Nakamura engineering tools in company imports has been reworked into a - new company offering new specialized engineering equipment that the station - can't normally make, rather than just tools everyone could make if they felt - like it. - SkyratBot: - - rscadd: Just in time for Halloween- ghost notifications have been upgraded to - their own announcements. Boo! - - bugfix: items that require reagent containers & the reagents inside it for crafting(e.g. - molotov) now crafts properly. - - bugfix: most crafting recipes should work now + ZephyrTFA: + - qol: signalers now tell you their cooldown and also use balloon alerts + jlsnow301: + - rscadd: Adds a subtle ghost poll. This pings in dead chat and gives a screen alert, + but no TGUI popup. Orbit the point of interest to be selected for the role. + - refactor: A number of ghost spawns now feature this alert. Write an issue report + if anything breaks. + lizardqueenlexi: - refactor: Maintenance Drones now use the basic mob framework. This shouldn't come with any noticeable gameplay changes, but please report any bugs. - bugfix: Drones can now interact normally with electrified doors. @@ -1144,80 +1201,90 @@ reinforced windows. - bugfix: Drones can now reboot or cannibalize other drones without being in combat mode. + ninjanomnom: + - rscadd: New dream that plays sound at you + timothymtorres: + - bugfix: Fix holodeck items from being eaten, crafted, recycled, juiced, or grinded. + - bugfix: Fix cqc kicks to only cause staminaloss when target is on the floor + vinylspiders: + - bugfix: admin triggering the Revenant event now works again + xXPawnStarrXx: + - rscadd: Most pies can now be sliced rather than being consumed whole. + - rscadd: Rootdough can be crafted using soy milk in place of eggs. + - rscadd: Two new lizard-safe rootbread sandwiches can be crafted. +2023-10-23: + SyncIt21: + - bugfix: items that require reagent containers & the reagents inside it for crafting(e.g. + molotov) now crafts properly. + - bugfix: most crafting recipes should work now + jlsnow301: + - rscadd: Just in time for Halloween- ghost notifications have been upgraded to + their own announcements. Boo! + san7890: - qol: Adminwho messages are now in an examine block for heightened clarity. - Vishenka0704: - - qol: In OOC Notes/Flavor Text/Species lore url now are clickable - jjpark-kb: - - rscadd: worm barrels will queue food now and create fertilizer on a cycle - - rscadd: fertilizer will now upgrade crops instead of producing crops - - qol: 'increased clarity on examine text for ash crops: it will no longer display - the message to upgrade if it is fully upgraded' - - rscdel: removed regen cores from being usable on ash farms - - balance: it is faster to insert food into the worm barrel - - code_imp: removed a meaningless var from ash farming components - - code_imp: moved some code to become procs for easier use for ash farming 2023-10-24: - CandleJaxx: - - rscadd: roboticists can now wear more clothing? yeah - GoldenAlpharex: - - rscdel: Yawns no longer spread to other people. We gave it a honest try, it just - wasn't working well for us. - Hatterhat: - - balance: Medicells no longer require reagents to print because reagent costs for - lathe designs got depreciated. Rejoice. - - balance: Oppressive force relocation cell is made like the body teleporter cell - (with a bluespace slime extract or something). - RatFromTheJungle: - - qol: most neck items are now small-sized - SkyratBot: - - bugfix: Entering a virtual domain should no longer give you a message that it - doesn't forbid items - - rscdel: Protolathe/circuit imprinter/techfab designs costing reagents is now totally - deprecated. - - bugfix: Food created by mixing chemicals once again has a reagent purity based - on the component chemicals. - - bugfix: Replaced error spaghetti in thunderdome kitchen with regular cooked spaghetti + DrDiasyl: - qol: The Command intercom now has a High-Volume setting like command headsets - qol: A memo telling frequencies of station radio channels are now present near the Command intercom and T-Comms room - image: Station, Command, and Prison intercoms have received new sprites - spellcheck: Station and Command intercom descriptions have been changed to tell about their functionality + Fikou: + - bugfix: surgical trays no longer animate when opened + Ghommie: - bugfix: The polymorphic belt shouldn't work on animated objects. Logically wouldn't have DNA. - nikothedude: - - bugfix: Synth puncture wounds now properly appear when manually generated (IV - drips) + Jacquerel: + - bugfix: Food created by mixing chemicals once again has a reagent purity based + on the component chemicals. + SyncIt21: + - bugfix: plastic sheet produces 4 tiles via the tiles option without using the + crafting menu + cnleth: + - bugfix: Replaced error spaghetti in thunderdome kitchen with regular cooked spaghetti + exdal: + - bugfix: hallucination announcements use new announcement style + jlsnow301: + - bugfix: Entering a virtual domain should no longer give you a message that it + doesn't forbid items 2023-10-25: - GoldenAlpharex: - - bugfix: Pollution (smoke et al.) will no longer be added to turfs when the subsystem - is offline. Basically, you can now turn off pollution properly. - - qol: Only player-made bonfires will produce smoke. + CoiledLamb: + - image: resprites air alarms + DrDiasyl: + - rscadd: New automatic weapon for the crew - Disabler SMG. Capable of rapidly firing + weak disabler beams. + - image: Muzzle flashes got a new sprite, each direction included! + - image: Temperature Gun "BAKE" beams are now lava colored + Hatterhat: + - qol: Universal scanners are now capable of recognizing the account owners and + assigned profit splits on barcodes. Cargo technicians are asked to do their + due diligence when matters call for it. + - rscadd: Anomaly-locked MODsuit modules can now be varedited to have unremovable + cores, or can be spawned with this functionality by using the /prebuilt/locked + subtype. + Jacquerel: + - bugfix: You will no longer be asked to construct meteor shields on stations which + cannot be hit by meteors. Melbert: - refactor: Refactored zombies to use the regenerator component. Now they'll have a slight glow/animation when the regeneration actually kicks in. - qol: Monkey cubes have a slight animation associated now. - bugfix: Cooking Deserts 101 grants all intended recipes - RatFromTheJungle: - - balance: made the colony fabricator's tools actually slower, removed the RCD per - request - SkyratBot: - - rscadd: Anomaly-locked MODsuit modules can now be varedited to have unremovable - cores, or can be spawned with this functionality by using the /prebuilt/locked - subtype. + OrionTheFox: + - qol: Railings now have Examine hints for how to deconstruct them + - bugfix: '[Tramstation] fixed a missing Scrubber in the Civilian Radiation Shelter' + Rhials: - bugfix: The Infected Domain should no longer fill up with smelly, poisonous gas over time. - - bugfix: plastic sheet produces 4 tiles via the tiles option without using the - crafting menu - - image: resprites air alarms - - bugfix: The nanites inside of thermal pistols are once again angry, and aggressively - want to burn/puncture people. - - image: Muzzle flashes got a new sprite, each direction included! - - image: Temperature Gun "BAKE" beams are now lava colored + TheBoondock: - qol: improves blackout drunk character gameplay - bugfix: fixed improper prob() placement that caused blackout character to be forced sleep - sound: added hiccup sound + jlsnow301: + - bugfix: Ghost alerts have been tuned down a bit. + lizardqueenlexi: - refactor: Hostile skeleton NPCs now use the basic mob framework. They're a little smarter, and they also have a slightly improved set of attack effects and sounds. They love to drink milk, but will be harmed greatly if any heartless spaceman @@ -1257,6 +1324,25 @@ make them a little smarter and more dangerous. Please report any bugs. - bugfix: Russian mobs will now actually use those knives they're holding. - bugfix: fixed hair gradients not applying correctly to huge afros + - refactor: Hostile Nanotrasen mobs now use the basic mob framework. This should + make them a little smarter and more dangerous. Please report any bugs. + - bugfix: Russian mobs will now actually use those knives they're holding. + - refactor: Juggernaut constructs now use the basic mob framework. Please report + any bugs. + mc-oofert: + - bugfix: you may not enter knock path caretakers last refuge with the nuke disk + - bugfix: you can no longer cuff knock heretics in refuge + necromanceranne: + - bugfix: The nanites inside of thermal pistols are once again angry, and aggressively + want to burn/puncture people. +2023-10-26: + Cruix: + - bugfix: fixed hair gradients not applying correctly to huge afros + - bugfix: fixed hair gradients not applying properly on dismembered heads. + Xackii: + - bugfix: Fixed gorilla attack cooldown. Now attacking speed to mobs is the same + as attacking speed to objects. + carlarctg: - refactor: Adds charges to omens and omen smiting rather than only being permanent or one-use. Mirrors now grant seven bad luckers. - qol: Reduces omen bad luck if nobody's nearby to witness the funny. (Ghosts are @@ -1315,6 +1401,12 @@ - bugfix: Damage will now be accurately carried between forms rather than being slightly reduced upon each transformation. - bugfix: venus human traps no longer die when on weeds + timothymtorres: + - qol: Add smoke particles to burning fireplace +2023-10-27: + FlufflesTheDog: + - bugfix: Wigs now properly follow your head when you're any non-standard height + Hatterhat: - qol: Examining an ammo box (incl. magazines) now tells you the top loaded round, so if you have different ammo types in different magazines, you can at least try to figure out which one is which. @@ -1342,6 +1434,26 @@ - rscadd: Adds the Praetorian modsuit to blueshield lockers. - code_imp: Added the Praetorian modsuit to list of items removed from cryo, in case a sleepy blueshield forgets to take off their suit. + Jacquerel: + - bugfix: Dying when using (most) shapeshift spells will now kill you rather than + having you pop out of the corpse of your previous form. + - bugfix: Damage will now be accurately carried between forms rather than being + slightly reduced upon each transformation. + Watermelon914: + - rscadd: Reworked the colour schemes for the minor and major announcements as well + as their layout + - rscdel: Rolled back changes to deadchat notifications + - admin: Admins can now select the colour of their announcements as well as the + subheader when creating a command report. + mc-oofert: + - bugfix: venus human traps no longer die when on weeds +2023-10-28: + GPeckman: + - bugfix: The health bar on the mech diagnostic hud display should update consistently + now. + Jacquerel: + - bugfix: If a mob you are shapeshifted into attempts to grow up into a different + kind of mob then you will stop being shapeshifted Melbert: - bugfix: Disablers and Lasers now show their on-impact effects on hit mobs again. - bugfix: People held at gunpoint can now flinch when being hit. @@ -1376,49 +1488,80 @@ projectkepler-ru: - image: gave the sindano proper inhand icon for both variant 2023-10-29: + Xackii: + - balance: Sutures now heal a percentage of basic/animal max health instead of a + flat amount. + lizardqueenlexi: + - bugfix: Mobs without the "advanced tool user" trait - such as monkeys - are no + longer able to interact with camera consoles. + - bugfix: Monkeys can now properly attack parrots. + - bugfix: The Demonic Frost-Miner will no longer run around destroying the corpses + in its arena the moment the round begins. + unit0016: + - bugfix: Every misaligned railing ending has been corrected by the Nanotrasen Hall + Monitor's Lunchclub. +2023-10-29: + DrDiasyl: + - sound: Dying with a SecHailer on your face will make a unique death sound + Ghommie: + - rscadd: Added a few fish related bounties. + - rscadd: Fish cases to store and preserve life fish within can be now printed from + the service techfab and the autolathe. GoldenAlpharex: - code_imp: Added support to the wet_floor component to make it so the wet overlay could not be applied to certain turfs if desired. - bugfix: Ice turfs no longer look tiled, and instead look smooth when placed next to one-another. - Iajret: - - bugfix: fixed new disabler smg having 20x more shots - Kyo: - - bugfix: Digitigrade sprites for Praetorian modsuit will now work as intended. Melbert: - bugfix: Fixes being unable to open airlocks with telekinesis - SkyratBot: + Paxilmaniac: + - code_imp: the deployable component has been tweaked and improved with some new + options to it + Profakos: - bugfix: Gnomes no longer runtime if they explode while sinking into the ground + necromanceranne: - bugfix: Every person on the station now no longer has the Tranquility Evades the Shield Pinky Finger Shovegrab unarmed combat technique, an ancient and forbidden strike that allows anyone (literally anyone) to bypass all forms of blocking defense by simply not being in combat mode when they shove or grab their target. As a direct result, the chakra energy of the Spinward Sector has become severely misaligned. Oh well. - - rscadd: Added a few fish related bounties. - - rscadd: Fish cases to store and preserve life fish within can be now printed from - the service techfab and the autolathe. - - sound: Dying with a SecHailer on your face will make a unique death sound - - code_imp: the deployable component has been tweaked and improved with some new - options to it - Zergspower: - - qol: Service Borg reagent mixers alphabetized - - bugfix: Fixes the oversight that prevented RP borgs from being able to use the - Hilbert Hotel ball in the Cafe 2023-10-30: - LT3: - - bugfix: Blueshift now has PDA charging microwaves available similar to other maps - SkyratBot: + GPeckman: - bugfix: Light-Eaten objects can no longer emit light after being turned off and then back on. - code_imp: Flashlights now use light_on instead of defining their own variable. Please report buggy behavior. -2023-10-31: - SkyratBot: - bugfix: Removed rare hard delete involving telecomms machines. - - spellcheck: Changed candy description to read better - - bugfix: Fixed an invisibility exploit on large mobs. Probably better this way +2023-10-31: + CRITAWAKETS: - rscadd: Corn oil is now produced from corn instead of regular vegetable oil. - balance: Glycerol now uses corn oil instead of vegetable oil in it's recipe. - bugfix: Grinding corn now produces oil when it previously only made cornmeal despite having oil in it's reagents. + Mothblocks: + - spellcheck: Changed candy description to read better + Toastgoats: + - rscadd: The Ethereal Vintner's Union has been "convinced" to trade their signature + Lanternfruit with Nanotrasen! + - image: Sprites for the aforementioned fruit. + jlsnow301: + - bugfix: Fixed an invisibility exploit on large mobs. Probably better this way + lizardqueenlexi: + - 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. + - 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. + mc-oofert: + - 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 + san7890: + - 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. diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index 958881c38fa1d..371c07446b449 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -1,6 +1,26 @@ 2023-11-01: Data_: - bugfix: The detective's curtains can be closed again in Birdshot. + EEASAS: + - rscadd: Added a new ruin to Ice Box Station, Lizard Gas Station + GPeckman: + - 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. + - bugfix: Practice laser carbines can no longer be used to rapidly fire regular + laser guns. + - bugfix: The fire visual on mobs should no longer persist after the fire has been + extinguished. + Iajret: + - code_imp: mod reskins now properly shows their icon when skins loaded from different + .dmi + Jackraxxus: + - bugfix: Obsessed's moodlets (Both positive and negative) go away when the trauma + is cured or the antag status is removed. + Jacquerel: + - bugfix: Non-human mobs can hallucinate their mothers without causing a runtime + error LT3: - code_imp: Changing security levels will only trigger the nightshift subsystem if lighting changes are required @@ -10,29 +30,24 @@ 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 + Pickle-Coding: + - bugfix: Fixes tesla zaps being weird. + - admin: Logs explosions from explosive zaps. + Profakos: + - 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. + SethLafuente: - 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. + SyncIt21: + - 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: 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 @@ -40,10 +55,29 @@ 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. + Xackii: + - bugfix: chameleon projector now can copy icon for storage items(backpacks, box, + holsters etc) using right-click on it. + ZephyrTFA: + - bugfix: signals in circuits now actually function + deathrobotpunch1: + - rscdel: Removed the biometric scanning toggle from the PENLITE holobarrier + jlsnow301: + - 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. + - bugfix: Bluespace launchpads no longer work on shuttles + mc-oofert: + - rscadd: ctrlclicking the knock path eldritch id card will toggle whether it creates + inverted portals or not + moocowswag: + - 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. + necromanceranne: + - bugfix: Lethal ballistic pellet-based shotgun shells no longer instantly delete. - 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 @@ -55,70 +89,24 @@ 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 + rageguy505: + - rscdel: Removed extra consoles from birdshot's bitrunners + starrm4nn: + - bugfix: The Syndicate Revolver now has a Syndicate Firing Pin on the Nuke Ops + uplink. + timothymtorres: - 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 light in battlecruiser starfury - 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. + zxaber: + - balance: Malf Ability "Robotics Factory" can now be purchased multiple times. 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 + ArcaneMusic: + - qol: Steam vents in maintenance now have tooltips. + DrDiasyl: - 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 @@ -126,199 +114,205 @@ - 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 + OrionTheFox: + - qol: The RPD now accepts upgrade disks inserted by hand, as well as their original + method of hitting the disk with the RPD + SyncIt21: + - 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 + - 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 + kawoppi: - spellcheck: basic mobs getting shoved by humans now display the mob's disarm response + lizardqueenlexi: - 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 + timothymtorres: + - rscdel: Removed duplicate northstar message monitor computer - rscdel: Remove duplicate syndi turret on waystation ruin - - rscdel: Remove duplicate machinery from russian derelict + - rscdel: Remove duplicate HoP shutter from birdshot - 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 + - rscdel: Remove duplicate machinery from russian derelict 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 + Mickyan: - 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 + Profakos: + - code_imp: creatures in cowboy boots will retaliate properly + Xackii: - 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. + jlsnow301: - 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 + - rscadd: Added some clarity to the range of netpods (4 tiles) in their exam text. - bugfix: Heretics won't lose their living heart while bitrunning anymore. + - bugfix: You can no longer eavesdrop on nearby borgs' radio comms if they're using + encryption keys + - bugfix: Possessed blades can attempt to channel spirits again + larentoun: + - rscadd: Emote Panel TGUI added in IC category. + lizardqueenlexi: + - bugfix: Basic mobs will no longer randomly walk into terrain that harms or kills + them. + mc-oofert: + - bugfix: venus human traps heal in kudzu again + moocowswag: + - bugfix: Space carp that arrive via rifts are no longer stricken with rift travel + related sickness that causes them to become weaker. ninjanomnom: - bugfix: Fixes turrets being invisible when they shouldn't be + timothymtorres: + - bugfix: Fix fireplace smoke particles to work properly with all directions 2023-11-04: + Jacquerel: + - 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. 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 + Tattle: + - bugfix: you should now be able to scrub through the library without lagging the + server + Zergspower: + - bugfix: Bounties - Virus bounties work once more + jlsnow301: - bugfix: Added feedback for both extractor and extractee while using fulton extraction packs. - qol: Extraction packs now have better exam text. + - bugfix: Fixes midround selection for observers + - rscadd: Added a new fishing map to bitrunning. + - rscadd: You are no longer limited to pina coladas on the beach bar domain. Cheers! + lizardqueenlexi: - refactor: Shades now use the basic mob framework. Please report any bugs. + nikothedude: - 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 + rageguy505: + - rscdel: Removed a extra coffee pot in birdshot's security breakroom + san7890: - 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 + timothymtorres: + - rscdel: 'Remove duplicate machinery from Metastation: morgue disposal bin, medical + break room air alarm, and IV drip in permabrig medroom' vinylspiders: - - bugfix: Empowered borer eggs and cybernetic eyes can no longer be given as a result - of bioscrambling a mob. + - bugfix: Softspoken quirk will no longer be applied to sign language 2023-11-05: - Melbert: - - code_imp: Removed species death and species hitby, replaced any uses with signals. - SkyratBot: + D4C-420: + - bugfix: lab coats no longer have directional sprites when thrown + Jacquerel: - 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 + Profakos: + - bugfix: Basic mobs using JPS can move again Tattle: - bugfix: paintings can once again be filtered + lessthnthree: + - admin: Holobarrier creation now adds player fingerprint data + san7890: + - 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. + timothymtorres: + - rscdel: Remove duplicate lighting from beach bar domain timothymtorres, Rahlzel: - sound: Port salute emote sound from Colonial Marines SS13 attributed to Rahlzel 2023-11-06: + JohnFulpWillard: + - bugfix: Mafia games can now start properly. LT3: + - qol: Holobarriers will match the spray paint colour of their projector - 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. + SyncIt21: + - 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 +2023-11-07: + ArcaneMusic: + - qol: Light switches have tooltips, and may now be deconstructed with right click + using a screwdriver. + Deadgebert: + - bugfix: walls built next to firelocks no longer hold onto their alarms + FlufflesTheDog: - 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: + Ghommie: + - image: Several holidays now have themed floor and tram tiling. + Higgin: + - bugfix: fixes synthflesh not dealing and in fact healing toxin damage. + Jacquerel: + - 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. 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 + Melbert: + - rscadd: Fishers can now try their luck at fishing out of hydroponics basins. + MoffNyan: + - rscadd: Maltroach bar sign! + NeonNik2245: + - qol: Make notepad available for everyone, who has only laptop or console. + Watermelon914: - rscadd: Added a user type to integrated circuits + cnleth: + - bugfix: Reagent lookup in chem dispensers now shows correct reagent metabolization + rates + lizardqueenlexi: + - 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. + san7890: - 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. + spockye: + - bugfix: fixed a couple missing and misplaced disposals pipes on metastation + timothymtorres: + - qol: Improve the emote help verb to be more user friendly - 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 + vinylspiders: + - bugfix: tails will no longer keep wagging even in death + - code_imp: added some trailing commas in lists that were missing them, fixed a + typo in comments + vvvv-vvvv: + - bugfix: Fix refresh button in log viewer +2023-11-08: + Ben10Omintrix: - 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. + D4C-420: + - rscadd: Being sufficiently drunk now has a chance to cause working out to fail + and harm you + Isratosh: + - bugfix: Nuclear operative induction implants now work correctly on antagonists + and fail on non-antagonists + jlsnow301: + - bugfix: The screen alert should no longer break ghost UI when it's huge + lizardqueenlexi: + - config: The bitrunner job now has a default config for server owners. + necromanceranne: - 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 @@ -330,58 +324,70 @@ 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.... + san7890: + - 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. + - bugfix: All vehicles (such as VIMs operated by a mouse or a lizard) will no longer + be able to phase through containment fields. +2023-11-09: + GPeckman: + - balance: Flightpotion wings will no longer make health analyzers list you as nonhuman. + KingkumaArt: + - 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 + Melbert: + - rscadd: Anomalies, portals, and bluespace rifts will now wibble a bit. + SyncIt21: - 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. + Toastgoats: + - balance: Venus human traps now take 12.5 damage per second instead of 20 while + off kudzu. + necromanceranne: + - 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. + xXPawnStarrXx: + - rscadd: Three new plants; Peppercorn, Saltcane and Butterbeans. + - rscadd: Soysauce fermentation to soybeans. + - rscadd: Saltcane can be dried into a replacement seaweedsheet for sushi. + zergspower: + - balance: NPC Syndicate Shotgunners range requirement returned +2023-11-10: + Jacquerel: + - qol: Adds the capability for some player-controlled mobs with ranged attacks to + repeatedly fire their natural weapons by holding down the mouse button. + Profakos: + - spellcheck: Renamed Knock to Locks, and changed most of the flavor text of knowledge + gain, and renamed some items and knowledges from the path. + SyncIt21: - 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 + - bugfix: plumbing factories should not rarely/randomly brick at volumes like 0.9999(when + in fact it should have been 1) + - code_imp: removed order history, import & export value from cargo & economy subsystems. + Allow supply packs to be properly deleted. In general memory savings + Thunder12345: + - rscadd: New Oranges' Juicery bar sign for the OJ connoisseurs. TwistedSilicon: - bugfix: Cryo cells now use their direction to orient their initial connection instead of defaulting to South. @@ -390,69 +396,41 @@ 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 + san7890: + - bugfix: Nanotrasen has clarified an issue with their manual publishers, and these + guides should now contain actual user-pertinent content. + starrm4nn: + - qol: Bandolier can quick gather items now. + - balance: Bandolier capacity increased to 24 and can carry .357 ammo now. + timothymtorres: + - bugfix: Fix holodeck items from being juiced or grinded with a biogenerator or + pestle and mortar + - rscdel: Removed duplicate shutter from HoP office in birdboat, air alarm in northstar + maint, and portable air pump in northstar maint. 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: + DaCoolBoss: + - rscadd: 4 new space ruins + Jacquerel: - image: Adds yet another bar sign, this one mining themed + KingkumaArt: + - bugfix: fixed engi crossbow being able to be used onehanded + ability to craft + with sci inducers + MTandi: + - qol: Ordnance burn, freezing and supermatter chamber air alarms now show the air + contents on the tile of the connected sensor inside the chamber. + nikothedude: - balance: Snails no longer receive blunt wounds, meaning sharp weapons can dismember them more easily - balance: Slimes can no longer receive dislocations + timothymtorres: - 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 + - rscdel: Remove duplicate windows from birdshot, delta, and anomaly research ruin. 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: + DaCoolBoss: - 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. + Jacquerel: - 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 @@ -467,101 +445,105 @@ - 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 + Melbert: + - bugfix: Split persons can talk to their host once again + - bugfix: AI controlled mobs which are immobilized are now properly immobilized + - bugfix: People with copied memories can modify their bank account ID as normal. + - 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. + vinylspiders: + - code_imp: gets rid of the rest of the instances of 'targetted' typo from code 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 + Jacquerel: + - bugfix: Goats will now calm down after getting grumpy without causing a runtime + error. + JohnFulpWillard: + - bugfix: '[Mafia] Obsessed now knows who their target is in their role description, + and people playing on PDA are told in their chat.' 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. + Momo8289: + - spellcheck: Made the remembrance day greeting message more tasteful. + SethLafuente: + - bugfix: fixes holodeck missing medical tools + Vishenka0704: + - bugfix: Now you can refuse the pirates request. + YesterdaysPromise: - 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. + necromanceranne: - 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. + nikothedude: + - code_imp: Quirks are now customizable on the quirks page instead of on the character + prefs page vinylspiders: - - bugfix: legally purchased suppressors no longer give illegal tech when deconstructed + - bugfix: emped bar signs will now display the correct sprite + - image: added a more detailed lightmask for the emp bar sign sprite + zxaber: + - bugfix: Ashwalker Tendril Revives no longer ghost the player being revived. 2023-11-14: + 1393F: + - bugfix: The Sleeping Carp scroll no longer says deflect using throw mode. + Ben10Omintrix: + - 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 + BlueMemesauce: + - bugfix: Fixed tcomms relays being weird, they should be sabotagable again 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 + GPeckman: + - 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. + Hatterhat: + - 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. + Likteer: + - rscadd: Green Beer has an overdose effect now. It will permeate your skin. + MTandi: + - 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: 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 + - image: Crates got new sprites + - image: Added more crate styles + Majkl-J: + - bugfix: You can now eject blank IDs from modular computers 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. + OrionTheFox: + - image: Resprites the Reactive Anomaly Armor 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 + SethLafuente: - bugfix: fixes half-covering glassware protecting eyes from chemicals + SyncIt21: - 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. + distributivgesetz: + - bugfix: Removes some roundstart active turfs. + - bugfix: The PDA painter and the emergency shield generator can now be destroyed. - 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 + larentoun: - 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' @@ -571,31 +553,30 @@ - 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 + mc-oofert: + - bugfix: tramstation cargo disposals outlet has been repositioned to not softlock + whoever cannot lay down + san7890: - 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. + timothymtorres: + - rscadd: Add bamboo seeds to ash walker den. This lets them craft blowguns, crude + syringes, bamboo spears, punji stick traps, and more! 2023-11-15: + Ben10Omintrix: + - bugfix: bileworms will now attack + D4C-420: + - spellcheck: hopefully changed all instances of the word 'mjolnir' to 'mjollnir' + Ghommie: + - bugfix: Fixed a small issue with disposal outlets leaving contents about to be + ejected stuck inside the pipe beneath it if deleted. + Jacquerel: + - balance: Sapient brimdemons can't hurt themselves with their own beams + JohnFulpWillard: + - refactor: Destructive Analyzers now have a TGUI menu. + - 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. LT3: - bugfix: Bad luck omen again raises your chance of getting shocked by the tram plate @@ -665,42 +646,63 @@ - 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: Fixes hallucination and encrypted announcements printing to the Newscaster. + SyncIt21: - 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 + 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. + jjpark-kb: + - qol: looms will now attempt to loop through stackable items (cotton as an example) + larentoun: + - rscadd: Emote Panel TGUI added in IC category. + mc-oofert: + - bugfix: The plaguebearer can no longer depower virology on Tramstation + san7890: + - 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. + - 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. + san7890, Ghommie: + - bugfix: The Blessing of Insanity now grants no damage slowdown and free hyperspace + movement correctly. +2023-11-16: + ArcaneMusic: - 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. + Fikou: + - qol: Dead human examines count as "soul departed" when the client is disconnected + or the human doesn't have a brain anymore. + Shroopy: + - bugfix: Molotovs now splash before burning, not after + deathrobotpunch: - 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 + san7890: + - balance: Male Goats should no longer spawn with an udder, instead of it just being + Pete. 2023-11-17: + CRITAWAKETS: + - 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. Dalm: - image: A tea room sign for the bar + Fikou: + - bugfix: grabs no longer trigger krav maga + GPeckman: + - rscadd: Androids now have robotic brains instead of organic brains. + Ghommie: + - bugfix: Fixed catwalks over open space not making a sound when walked over. + - rscadd: The mother hallucination has more possible one-liners now. 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 @@ -710,9 +712,15 @@ 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: + RedBaronFlyer: - image: light tube inhand sprites are now grey, as are the icons for the light bulb/tube/mixed boxes + Shadow-Quill: + - bugfix: 'The CRAB-17 will now only take whole credits, as fractional credits were + found to be worth less. + + :cl:' + SyncIt21: - 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 @@ -723,6 +731,16 @@ 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 + Vekter (on behalf of Constellado): + - image: 'Added a new bar sign as one of the winners of our Bar Sign Contest: "The + Assembly Line".' + YesterdaysPromise: + - rscadd: Adds a chance that, when sharpened, a sufficiently potent carrot will + turn into a sword instead of a shiv. + Zergspower: + - bugfix: Space Ruin - All American Diner - Soda Machine now is scooted out of the + way + jlsnow301: - rscadd: Bitrunning Patch 1 features a host of changes! - rscadd: Added randomized mobs to virtual domains, which will be indicated with a unique icon. @@ -753,6 +771,12 @@ gas comes out. - bugfix: Space Ruin - All American Diner - Soda Machine now is scooted out of the way + mc-oofert: + - qol: if you die in a mech you automatically eject + mogeoko: + - bugfix: Turbine parts will now use an amount of materials no greater than needed + for the upgrade + san7890: - 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 @@ -774,6 +798,11 @@ for the upgrade 2023-11-18: SkyratBot: +2023-11-18: + Ben10Omintrix: + - bugfix: gutlunches will stop having too many children + - balance: gutlunches are no longer in the mining faction + JohnFulpWillard: - refactor: Secure briefcases are now actual briefcases. - refactor: Wall safes are now structures, rather than items that can't be picked up. @@ -787,6 +816,25 @@ 2023-11-19: Deek-Za: - image: New Digitigrade icons for red sec officer and HoS uniforms. + ZephyrTFA: + - rscadd: Chat Reliability Layer + - code_imp: TGUI chat messages now track their sequence and will be resent if the + client notices a discrepenency + jlsnow301: + - bugfix: After correcting a slight miscalculation, Bit Avatars now have hands again. + nikothedude: + - code_imp: TGUI preference lists can now have sorting prefixes to allow for specific + placement of items +2023-11-19: + DaCoolBoss: + - spellcheck: Nukie and ERT defibrillators now reference combat mode instead of + intents. + Ghommie: + - rscadd: Abductors have bigger brains. + JohnFulpWillard: + - rscadd: Infiltrators (Latejoin/Midround traitors) can now buy and use Contract + kits again. + - rscdel: Contractor baton can now only be purchased once. LT3: - bugfix: Tram will no longer electrocute innocent, law abiding crew trying to use the crosswalk when there's no tram in sight @@ -799,28 +847,47 @@ - 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. + Rhials: + - spellcheck: The Grey ID Cargo Crate is now spelled properly. + SapphicOverload: - bugfix: You can once again use alt to turn while strafing in a mech + Shroopy: + - qol: Implanted HUDs can now be toggled on and off with an action. + SyncIt21: + - bugfix: selling large amount of mats in cargo should not give you infinite credits + - bugfix: runtime when adjusting material market after buying + WarlockD: + - bugfix: ' Attaching a circuit to the air alarm now reads from the correct turf.' + YakumoChen: - 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. + distributivgesetz: - 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. + mc-oofert: + - bugfix: you can climb over more stuff with a climbing hook + san7890: + - 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.' 2023-11-20: + EuSouAFazer: + - 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. + Ghommie: + - bugfix: Fixed the infinite growth serum exploit. + - bugfix: Fixed generic nutriment processing even when dead. + - bugfix: Fixed an issue with un-hidden (alien, syndie etc.) nodes not being researchable. + - bugfix: The aquarium auto-feeding feature now works correctly. + JohnFulpWillard: + - qol: NTNet Downloader now has a search bar, and programs are now better sorted. + KingkumaArt: + - bugfix: Stopped a DS crash when shooting a rebar crossbow in specific circumstances. LT3: - bugfix: Delam counter will correctly show 0 the shift after a delam + MTandi: + - bugfix: Hydrotrays consume nutrients according to their proportion in the mix, + instead of randomly picking reagents to consume every cycle. Melbert: - admin: Adds a button to check-antagonists that allows admins to send Nuke Op reinforcements with a single button @@ -842,7 +909,6 @@ 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! @@ -873,6 +939,7 @@ have been replaced with titles. - spellcheck: Some roundstart tips have been made clearer regarding "suits" vs. "exosuits". + SyncIt21: - 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. @@ -897,6 +964,9 @@ - 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 + Tattle: + - bugfix: admin painting manager works again + jlsnow301: - 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 @@ -919,6 +989,22 @@ - rscadd: Added a seed shelf & produce bin - rscadd: Crafting recipes for stone cooking structures. - rscadd: Crafting recipes for Paxil's fences. + - bugfix: Chat shouldn't bluescreen at the start of the round + - bugfix: Admins can spawn bitrunning events (again!) + lizardqueenlexi: + - bugfix: Hardcore Random will no longer assign incompatible quirks. + - spellcheck: Some roundstart tips have been made clearer regarding "suits" vs. + "exosuits". + 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. + vinylspiders: + - bugfix: fixed a race condition with mutations + - 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 yooriss: - refactor: Icemoon wolves now use the basic mob framework and should act more intelligently, defending their pack. @@ -927,6 +1013,19 @@ pet commands you'd expect, such as fetching things, and violently mauling people their owners point at. 2023-11-21: + 00-Steven: + - balance: signers no longer suffer from social anxiety's speech changes when they + go non-verbal. Other effects are maintained. + DaCoolBoss: + - bugfix: Removed a duplicate grille from the abandoned mime outpost space ruin, + and replaced the 'energy weapon lenses' with spent revolver rounds. + EuSouAFazer: + - bugfix: Meta's recycler works again + Hatterhat: + - 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. 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 @@ -938,6 +1037,21 @@ SkyratBot: - balance: signers no longer suffer from social anxiety's speech changes when they go non-verbal. Other effects are maintained. + OrionTheFox: + - qol: Allergy Dogtags (and any other dogtags, really) are now Tiny items and can + fit into wallets. + Thlumyn: + - bugfix: healing viruses can no longer have floor virus side effects + YesterdaysPromise: + - 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.' + dieamond13: + - bugfix: adds back one way exits to Tramstation science's entrance + necromanceranne: + - bugfix: When you successfully block a body collision, it does something rather + than nothing at all. - 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 @@ -990,32 +1104,28 @@ Bumtickley00: - balance: The CMO's hypospray now holds 60u, and can be set to inject smaller amounts of reagents + Ghommie: + - spellcheck: Examining a human mob as an observer displays "Quirks", not "Traits" 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: + JohnFulpWillard: - 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 + LT3: + - bugfix: Cursed/bad luck omen will now stick with the player for more than 1 incident + MTandi: + - bugfix: Emag overlay on lockers fixed + - image: New locker sprites + - image: Added new lockers + Xackii: - 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. + dieamond13: + - bugfix: removes a duplicate bookcase in icebox permabrig library + lizardqueenlexi: + - 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. - 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 @@ -1043,11 +1153,23 @@ Disabilities Act). Paraplegic characters can now implant themselves with skillchips, the same as anyone else. - qol: adds pixel perfect 4x, 4.5x, and 5x +2023-11-23: + OrionTheFox: + - qol: Allergy Dogtags (and any other dogtags, really) are now actually whitelisted + to fit into wallets. + SyncIt21: - 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 + Y0SH1M4S73R: + - 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 + aaaa1023: + - qol: adds pixel perfect 4x, 4.5x, and 5x + necromanceranne: - 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 @@ -1124,26 +1246,36 @@ them. - bugfix: gutlunches now produce miner salve instead of milk, as well as the other reagents if fed the correct ore + vinylspiders: + - bugfix: fullupgrade chem dispensers will now spawn with all their chems +2023-11-24: + Autisem: + - 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 + Jacquerel: - 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. + JohnFulpWillard: + - 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. + SyncIt21: + - bugfix: RCD can build directional windows on top of existing grills & without + them. - 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. + Xander3359: + - admin: Remove "Make AI" from VV dropdown + dieamond13: + - qol: gives roundstart prisoners a key memory of what their crime is jjpark-kb: - rscadd: you can craft the gutlunch trough - qol: you can fill the gutlunch trough with a mining bag @@ -1152,53 +1284,25 @@ - rscadd: 'New quirk: Waddle' larentoun: - code_imp: Now if ONLY modular content was modified, build recompiles dme correctly + - bugfix: gutlunches now produce miner salve instead of milk, as well as the other + reagents if fed the correct ore 2023-11-25: - SkyratBot: - - rscadd: Adds an arctangent2 component to circuitry! + MTandi: - 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 + Time-Green: + - rscadd: Adds an arctangent2 component to circuitry! +2023-11-26: + DaydreamIQ: - 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: + Majkl-J: + - code_imp: HUDs no longer use their own trait variable + Momo8289: + - bugfix: MOD quick carry modules now give the correct carry speed bonus + Profakos: - 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. @@ -1208,9 +1312,36 @@ 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. + Rhials: + - code_imp: Bitrunning/Bitrunning Den areas are now cargo area subtypes, rather + than station area subtypes. + - qol: The area preceding Metastation Cargo's front door is now denoted as being + the "cargo lobby". + SuperNovaa41: + - bugfix: Fixes cyborged heretics seeing influences. + Time-Green: + - bugfix: Fixes nebula killing everyone when forced by an admin on icebox + Y0SH1M4S73R: + - bugfix: Rebar crossbow bolts are now reuseable again, without risking crashing + clients when fired at point-blank range. + - qol: Bitrunning glitches will not show up in the roundend report unless they escape + the virtual domain. + vinylspiders: + - bugfix: fixes a runtime in footstep code that would prevent the fov effect from + playing to nearby mobs +2023-11-27: + DaCoolBoss: + - qol: Oculine now tastes bitter, and not like toxin. + LemonInTheDark: + - 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. + Profakos: - bugfix: You can once again repaint robotic limbs to use alternate skins - - bugfix: Poly should now remember phrases between shifts. + SyncIt21: - code_imp: removes unused proc `generate_possible_reactions()` from reagent holder + san7890: + - bugfix: Poly should now remember phrases between shifts. + wesoda25: - 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. @@ -1231,9 +1362,10 @@ - balance: "Security modsuit buffed (\tmelee = 40, bullet = 30, laser = 30, energy\ \ = 40, bomb = 50, bio = 100, fire = 100, acid = 100, wound = 10" 2023-11-28: - GoldenAlpharex: - - rscdel: The Radioactive Nebula station trait will no longer cause radiation storms, - but all of its other effects remain. + FeudeyTF: + - code_imp: Removed currency value for free products + Kylerace: + - code_imp: verb callbacks will no longer execute if the original client disconnected Rhials: - qol: Bar signs can now be purchased from cargo. Neat! - qol: Bar signs can now be deconstructed with a screwdriver and wrench. @@ -1242,6 +1374,13 @@ - 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. + Y0SH1M4S73R: + - bugfix: People exposed to romerol while alive will once again revive as zombies + on death. + san7890: + - bugfix: Ranged Guardians (Holoparasites/Power Miners/etc.) can no longer use ranged + attacks in scouting (incorporeal) mode. + vinylspiders: - 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 @@ -1299,6 +1438,53 @@ rarytech: - bugfix: fixed the displaying of tacticool clothing for digi legs 2023-11-30: + - bugfix: fixed a runtime in handle_dead_metabolism() +2023-11-29: + Ghommie: + - rscadd: Standing on structures such as crates, tables and bed will now look like + it. + Higgin: + - code_imp: Made ARDS death check respect maxHealth. + Iajret: + - bugfix: You can now destructively analyze syndicate and abductor items. It works + this time, I promise! + LT3: + - bugfix: Getting beheaded by the tram increments the scoreboard + - 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 + MGO: + - rscadd: Introduces new inverse reagents for Salicylic Acid, Oxandrolone, Salbutamol, + Pentetic Acid, Atropine, Ammoniated Mercury and Rezadone! + MTandi: + - bugfix: fixed chemical closet door not rendering when open + Momo8289: + - bugfix: The quick carry module should now correctly apply the appropriate traits + Mothblocks: + - image: Premade cleanbots are now always blue. + Rhials: + - bugfix: Renames a bar door from "Kitchen" to "Bar" on Metastation. + SyncIt21: + - bugfix: you no longer get an empty crate when ordering bluespace crystals from + the galactic material market. + Thlumyn: + - bugfix: bitrunning den shows up on the camera console now. + WarlockD: + - 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 + itseasytosee: + - bugfix: staggered targets now have the correct chance for escaping grapples. + - spellcheck: changed attack verb for punching a grappled target + san7890: + - 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. + vinylspiders: + - bugfix: fixed remaining footstep runtimes +2023-11-30: + Ben10Omintrix: + - 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 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 @@ -1314,3 +1500,11 @@ - bugfix: Fixed warm coat, sweaters for digi sprites. capsaicinz: - spellcheck: your fiscal image is no longer actualized. + Mothblocks: + - 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. + SuperNovaa41: + - bugfix: Cyber cops are now equipped with the correct outfit. + timothymtorres: + - bugfix: Fix bitrunning triggering claustrophobia diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index 084041accd8a0..fb17356ce6edd 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -1,5 +1,5 @@ 2023-12-01: - SkyratBot: + Fikou: - rscadd: turns triple ai mode into a station trait 2023-12-02: MidoriWroth: @@ -56,12 +56,104 @@ - bugfix: psyker heads no longer render an overlay of not having eyes - bugfix: Sign Language action properly toggles between an active/inactive background again. + Jacquerel: - 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. + MidoriWroth: + - bugfix: Icebox chemistry lab shutters are controlled by the button in the chemistry + lab and not in the pharmacy again. + Pickle-Coding: + - code_imp: The singularity processing is a bit more important than the other subsystems. + TJatPBnJ: + - bugfix: Changelings will no longer get an objective to impersonate crew without + absorbable DNA. + - bugfix: Changelings will no longer start without an escape objective. + Thlumyn: + - rscadd: Slimepeople can now get wings from flight potions. + Vermidia: + - spellcheck: fixed typo in one of spacer's moodlets + - rscadd: Heterochromatic, Signer, Spacer, and Voracious quirks are now properly + accounted for in medical records. + jlsnow301: + - rscadd: Added a new modular bitrunning domain - Starfront Saloon. + - balance: Psyker shuffle domain was made slightly easier and has been given more + rewards. + mc-oofert: + - bugfix: shield wall gens actually use power now + - qol: shield wall gens may now be rebuilt and use some balloon alerts, and have + wiring + san7890: + - 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. +2023-12-02: + 00-Steven: + - bugfix: Sign Language action properly toggles between an active/inactive background + again. + Autisem: + - 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 + Ben10Omintrix: + - bugfix: fix parrots not appearing dead sometimes + Fikou: + - rscadd: Instead of punished sect healing people like the normal bibble- you take + their burdens on instead! + Ghommie: + - bugfix: Fixed an issue with the offsets of ridden vehicles on tables, and another + when buckled to a bed. + IsaacExists: + - sound: Added human laughter to felinids + 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. + - 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. + jlsnow301: + - bugfix: Mod links are now disabled in the virtual realm. + san7890: + - 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. +2023-12-03: + Ben10Omintrix: + - refactor: medbots are now basic bots. please report any bugs + - rscadd: medbots can wear hats! + Fikou: + - 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 + Jackraxxus: + - bugfix: Digi legs work with the QM's jumpskirt + MrMelbert: + - bugfix: smartfridges no longer show false overlays + Rhials: + - spellcheck: Fixes a typo in the Factory Quartermaster outfit name. + SyncIt21: + - 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 + Vekter: + - bugfix: Fixed damage ranging on feral cats + - bugfix: Fixes hole in Birdshot hallway + distributivgesetz: + - spellcheck: Occurrences of "recieve" has been changed to "receive". + san7890: + - 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. + tralezab: - 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 @@ -90,6 +182,17 @@ Majkl-J: - sound: Subtler now has a sound cue - refactor: Hungry is no longer an item_quirk +2023-12-04: + Ghommie: + - rscadd: Added the daily (roundstart) message server key to the Chief Engineer's + memories. + - bugfix: Fixed some oopsie whoopsie with elevation, trams and beds causing people + to visually ascend or descend to heaven or hell. + Hatterhat: + - bugfix: SecTech restocking units are now actually named SecTech restocking units, + and not Generic restocking units. + KittyNoodle: + - bugfix: Heretics can no longer cast all of their spells while in jaunt 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 @@ -151,6 +254,12 @@ 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. + Profakos: + - rscdel: Removes the slime's reagent holder. This will make them not slow down + from somehow imbibing morphine or frostoil. + Rhials: + - qol: Bar signs ordered from cargo will no longer be access-restricted. + SyncIt21: - 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 @@ -158,6 +267,10 @@ soup reaction code - refactor: medbots are now basic bots. please report any bugs - rscadd: medbots can wear hats! + Timberpoes: + - 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. + distributivgesetz: - 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. @@ -224,6 +337,24 @@ - 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 + necromanceranne: + - bugfix: Blocking a tackler no longer causes things to go haywire and stun the + tackler/the tackle victim. + tralezab: + - 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 + xXPawnStarrXx: + - rscadd: Added new roast dinners, able to be cut into smaller portions hopefully + in time for the Christmas season. + - rscadd: Added sprites for bone spears to match the other bone items. +2023-12-05: + 13spacemen: + - balance: Deleting and reprogramming pipes/devices with RPD is now INSTANT! + Autisem: + - bugfix: Rebirthing from headslug properly reapplys void adaptation + distributivgesetz: - rscdel: Removed clone damage. - rscdel: Removed the decloner gun. - rscdel: "Removed clonexadone.\n/\U0001F191\n + + ' + MTandi: + - balance: 'TechWeb: NT Frontier partners now give full discounts for many high + tier nodes, corresponding to the partner theme, instead of partial discounts + for random nodes' + - qol: Atmos techs can download NT frontier and build compressor board in engi imprinter + - balance: Roboticists now always have ordnance access for the discount experiments + they need + - balance: 'TechWeb: BZ shell is now a discount experiment for experimental tools + instead of required exp for fusion' + - balance: 'TechWeb: Noblium shell is a discount experiment for RCD upgrades instead + of exp tools discount' + - balance: 'TechWeb: Vat-grown slime scan is a discount experiment instead of required + one' + - bugfix: 'TechWeb: Cryostasis node properly requires advanced medbay equipment + as it should' + Melbert: + - rscadd: 'Adds a copy of the famous 1995 musical "Space Station 13: The Musical" + to contraband of the autodrobe' + Paxilmaniac: + - rscadd: The new smartgun has replaced the unusable energy cannon in mystery boxes + ? Raccoff, aa07, ActionNinja, ArcaneMusic, Armhulen, Azlan, Ben10Omintrix, BigBimmer, + Capsandi, CapybaraExtravagante, Draco, Floyd, Iamgoofball, Imaginos16, Infrared, + Jacquerel, Justice12354, Kryson, KylerAce, LemonInTheDark, Meyhazah, Mothblocks, + MTandi, Ninjanomnom, oranges, Rohesie, Runi-c, san7890, Senefi, SimplyLogan, SomeAngryMiner, + SpaceSmithers, Tattle, Thunder12345, Time-Green, Twaticus, unit0016, Viro, Waltermeldon, + WatlerJe, ZephyrTFA with thanks to the Mojave Sun team! + : - rscadd: Resprites or offsets almost all "tall" objects in the game to match + a 3/4ths perspective + - rscadd: Bunch of rendering mumbo jumbo to make said 3/4ths perspective work + Rhials: + - bugfix: Centcom ERT hiring standards have been expanded to include plasmamen, + again. + Runi-c: + - bugfix: Wellcheers no longer does nothing half the time + ShadowLarkens: + - bugfix: Fixed action buttons relative to EAST,SOUTH, or CENTER being improperly + moved during view_audit_buttons() + SmArtKar: + - bugfix: Circuit health analyzer/state components now work on targets inside lockers + - image: Resprited all main assemblies + - bugfix: Ninjas can cloak again + - image: Durand shield got a glowup + - bugfix: Durand shield no longer instantly drains its battery + - bugfix: Mech UI no longer lies about the amount of power your mech has left + - bugfix: Fixed chanterelles runtiming upon being hollowed out with a spoon and + not spawning a hat - bugfix: Ash drakes no longer get stuck in flight if their target changes Z levels or is destroyed and doesn't spawn lavaland turfs after the lava arena attack ends - bugfix: Fixed shuttle loan paperwork being unstampable - - image: Resprited all main assemblies - - bugfix: Fixed chanterelles runtiming upon being hollowed out with a spoon and - not spawning a hat + - balance: Multiple gloves/shoes that had armor values but failed to apply them + got fixed + - bugfix: Soulscythe now deletes the soul mob when destroyed + - bugfix: Bubblegum can no longer bloodcrawl to other Z levels + - bugfix: Fixed portable chem mixer spamming you if not held while its UI is open + - bugfix: Fixed bileworms not having a deaggro range + - bugfix: Heretic sacrifice area no longer modifies global ambience lists + - bugfix: Fixed fish analyzers not being able to scan fish + - bugfix: Fixed DNA samplers not being able to interact with non-scannable objects + - bugfix: Fake aurora caelus event no longer permanently paints space green + - code_imp: Cult magic item paths are no longer strings + - bugfix: Fixed monk staffs not displaying a wielded sprite + - bugfix: Fixed nuke toggle, smite and machine upgrade admin verbs using incorrect + sorting + - admin: Updated nuke toggle, smite and machine upgrade admin verbs to use TGUI + - qol: Magicarps no longer fire their projectiles while out of combat mode + - bugfix: Chameleon gun counts as harmless and can be fired by pacifists + - qol: Integrated circuit modules now can be linked to component printers + - bugfix: You can no longer shove people into closets through directional glass + - bugfix: Slimes no longer can feed when they're inside of objects or attacking + a target that became invalid after they chose their dinner + - bugfix: Fixed Creatures not being able to use non-jaunt actions when seen + - bugfix: Void storm now updates mob health + - qol: Circuit components can now be recycles in circuit printers, and automatically + do so upon being removed if a circuit has a linked printer + - spellcheck: Recycling a single item no longer outputs a line with a rogue space + infront of it Vekter: - balance: Removes the research requirement from cyborg endoskeletons, meaning they can be built at roundstart again. + Watermelon914: + - bugfix: Fixed activating specific BCI actions whilst unconsious + - balance: Space suits no longer provide all of the slowdown when wearing space + gear. Helmets now share the burden and you can now move faster when wearing + only a space suit. Helmets now provide a bit of slowdown when worn alone as + a result. + Xackii: + - bugfix: Firelocks can be opened with crowbar rigth-click in combat mode. + carlarctg: + - balance: Supermatter bioscrambler anomalies are now docile. + - balance: Reduced caltrop default paralyze timer from 6 to 2 + flleeppyy: + - rscadd: the cyborg shaker in service borgs now have the ability to open the reaction + search menu grungussuss: - balance: bushes and other flora have had their HP reduced from 150 to 100. Trees still have 150 HP - balance: flora now has an X4 modifier to damage from burn sources - balance: MODsuits now deploy 2 times faster - balance: The infiltrator MODsuit now deploys 4 times faster -2024-08-16: - Bisar: - - qol: The preserved terrarium vault now has tier 4 hydroponics trays, making volume - based tray chemistry take less time. - Melbert: - - rscadd: 'Adds a copy of the famous 1995 musical "Space Station 13: The Musical" - to contraband of the autodrobe' - SkyratBot: - - bugfix: Hydraulic clamps (the mech tool) can force powered doors open again. - - bugfix: The first tab is now selected with ore redemption machines when opened - for the first time - - qol: Dishes with a special food effect are marked in the Cooking UI - - rscadd: New Spaghetti Carbonara dish that makes people Italian temporarily - - rscadd: Omelette Du Fromage makes people French temporarily - - rscadd: Shock Immunity is no longer a random level 4-5 food buff, but a buff given - by a new Jupiter-Cup-Cake - - rscadd: Mime Tart gives Mute trait - - rscadd: Clown Cake gives Waddle Walk trait - - rscadd: Stuffed Legion gives Ashstorm Immune trait - - bugfix: Soulscythe now deletes the soul mob when destroyed - - rscadd: Crabs and lobstrosities (as well as the lobster foam helmet and the fishing - hat) now pack a boatload of fish puns. - - qol: Integrated circuit modules now can be linked to component printers - - code_imp: made it look a little cleaner for head PDAs - - bugfix: Fixes getting a "You are too far away!" interaction block on inventory - items when inside of another object. This includes accessing storage or using - your PDA from a closet, or as pAI using your digital messenger while inside - of your card. - - bugfix: Fixed portable chem mixer spamming you if not held while its UI is open - - bugfix: Fixed Creatures not being able to use non-jaunt actions when seen - - balance: Space suits no longer provide all of the slowdown when wearing space - gear. Helmets now share the burden and you can now move faster when wearing - only a space suit. Helmets now provide a bit of slowdown when worn alone as - a result. - - bugfix: Fixed activating specific BCI actions whilst unconsious - - rscadd: 'durathread robes can now store botany gear - - :cl:' - - qol: Nanotrasen has fitted the Janitorial Emergency Response Team with equipment - better suited for the job. - - balance: Reduced pathfinding circuit component cooldown from 30 seconds to 5 seconds - - bugfix: fixes monkey ai hitting u from a distance with unloaded guns - - bugfix: pre-upgraded soda dispensers are actually pre-upgraded again - - bugfix: Raw durathread bundles and sinew strands no longer make metal clang sounds. - - bugfix: Fixed pipes/cables/disposals rendering above closed catwalks. - - bugfix: Fixed catwalks covering pipes generating illogical pipe caps when screwed. - - bugfix: Opened catwalks are no longer assumed to be above-floor for the sake of - generating pipe caps. - - bugfix: Blade heretic ascension now gives you floating blades once again - - bugfix: Heretic sacrifice area no longer modifies global ambience lists - - bugfix: Fixed action buttons relative to EAST,SOUTH, or CENTER being improperly - moved during view_audit_buttons() - - rscadd: The new smartgun has replaced the unusable energy cannon in mystery boxes - - bugfix: Firelocks can be opened with crowbar rigth-click in combat mode. - - balance: Reduced caltrop default paralyze timer from 6 to 2 - - qol: Cargo Gorka suit slot now allows emergency/plasmaman internals. - - qol: Magicarps no longer fire their projectiles while out of combat mode - - bugfix: breaking certain terrain in deathmatch doesnt instantly breach to space - - qol: Paraplegics can now opt into appearing on the shift without their legs. - - balance: Supermatter bioscrambler anomalies are now docile. - - balance: Deja Vu perk now teleports you to where you were before the last teleport, - instead of where you arrived on the station - - bugfix: Deja Vu can no longer be used to return to the wizard ship - - bugfix: borgs no longer drop MMIs when chasmed - - bugfix: In light of recent allegations of wizardry among the kitchen staff, our - cooks will now need bowls when crafting food that comes in bowls. This should - also stop said bowls from vanishing once the food is gone. - - code_imp: Cult magic item paths are no longer strings - - bugfix: Void storm now updates mob health - - balance: Abductors (the antag, not the species) can no longer be converted by - any antagonist. - - qol: Circuit components can now be recycles in circuit printers, and automatically - do so upon being removed if a circuit has a linked printer - - spellcheck: Recycling a single item no longer outputs a line with a rogue space - infront of it - - bugfix: Chameleon gun counts as harmless and can be fired by pacifists - - qol: atmos meters can now be attached to layer 1 and 5 - - bugfix: AI Players can now operate the BRM (Boulder Retrival Matrix) - grungussuss: - sound: 'added rustle sounds for: toolbox, medkit, box' - sound: 'added open sounds for: toolbox, box' - code_imp: added support for giving container items rustle sounds grungussuss and Beeblie: - sound: internals breathing sound has received more variance and had its volume reduced + hack-wrench: + - rscadd: add syndicate branded lipstick to uplink (6 TC), after applying lipstick + *kiss deals damage equal to energy gun + - bugfix: fix wallhit sound for projectile + imedial: + - bugfix: fixed nested radios with encryption keys giving free comms + itseasytosee: + - bugfix: illustrious ethereals now properly get the tenacious trait + - code_imp: more species features have been moved to their individual body parts. + lbnesquik: + - qol: Clarified what the Medical Cyborg Omnitool Upgrade does + - rscadd: Added a cyborg plunger for janitorial modules + loganuk: + - bugfix: AI Players can now operate the BRM (Boulder Retrival Matrix) + mc-oofert: + - bugfix: breaking certain terrain in deathmatch doesnt instantly breach to space + r3dj4ck0424: + - bugfix: In light of recent allegations of wizardry among the kitchen staff, our + cooks will now need bowls when crafting food that comes in bowls. This should + also stop said bowls from vanishing once the food is gone. + raffclar: + - bugfix: Various fixes to TGUI notepad + - bugfix: The first tab is now selected with ore redemption machines when opened + for the first time tmyqlfpir: - - rscdel: Remove skyrat cooldown for pathfinding circuit component as it is now - upstream'd -2024-08-17: - Adrian16199: - - bugfix: Cargo guard no longer has QM access, this was unintended - - qol: Medical guard now have morgue access, custodial closet given to service guard + - balance: Reduced pathfinding circuit component cooldown from 30 seconds to 5 seconds +2024-08-16: + Absolucy: + - bugfix: Empty blood brother teams will now be cleaned up, instead of clogging + up the roundend report. + Ben10Omintrix: + - bugfix: fixes surgery table buckle offsets + - bugfix: fixes rcds accounting for player dir only before construction + - bugfix: fixes pickup animation not matching player offset Bisar: - bugfix: Potted plants no longer permanently mark you as one of their own. - SkyratBot: - - rscadd: big pharma now supplies a single pack of experimental medication as an - easy to access (albeit expensive) cargo goodie! - - balance: price for the cargo crate with 2 pill bottles of experimental medication - has been increased to 600 to better reflect the goodie case price. - - balance: 'TechWeb: NT Frontier partners now give full discounts for many high - tier nodes, corresponding to the partner theme, instead of partial discounts - for random nodes' - - qol: Atmos techs can download NT frontier and build compressor board in engi imprinter - - balance: Roboticists now always have ordnance access for the discount experiments - they need - - balance: 'TechWeb: BZ shell is now a discount experiment for experimental tools - instead of required exp for fusion' - - balance: 'TechWeb: Noblium shell is a discount experiment for RCD upgrades instead - of exp tools discount' - - balance: 'TechWeb: Vat-grown slime scan is a discount experiment instead of required - one' - - bugfix: 'TechWeb: Cryostasis node properly requires advanced medbay equipment - as it should' - - sound: generic ship ambience volume has been reduced - - bugfix: fixes pickup animation not matching player offset + DATA-xPUNGED: + - qol: Paraplegics can now opt into appearing on the shift without their legs. + Ghommie: + - image: Resprited more types of fillets, and moonfish eggs + - rscadd: Crabs and lobstrosities (as well as the lobster foam helmet and the fishing + hat) now pack a boatload of fish puns. + Jacquerel: - bugfix: corrects offset of cobweb fluff object + - bugfix: Dimensional anomalies should once again create cool walls, not boring + grey ones + - bugfix: Mobs shown in ghost alerts shouldn't be offset out of the box + - image: Several midround dynamic alert icons should be more demonstrative of what + is spawning + Melbert: + - bugfix: Less floating things on Delta + - rscadd: Auto-generated digitigrade clothing sprites for most jumpsuits + Metekillot: - bugfix: Raptors properly respect their own factions now. - - balance: Multiple gloves/shoes that had armor values but failed to apply them - got fixed + Sadboysuss: + - qol: atmos meters can now be attached to layer 1 and 5 + - sound: generic ship ambience volume has been reduced + Shadow-Quill: - bugfix: You can no longer hear radio sounds if you're deaf. + SmArtKar: + - image: Mirrors have been successfully wallened + - bugfix: You can now move horizontally on tall stairs and they no longer have a + hole in them when facing south - bugfix: Fixed improvised shield crafting recipe being overriden by moonflowers - - bugfix: Empty blood brother teams will now be cleaned up, instead of clogging - up the roundend report. - - bugfix: Trying to repair someone's undamaged limb with a welder or wires no longer - has you smacking them + - image: Floor lights no longer use outdated textures + - balance: Deja Vu perk now teleports you to where you were before the last teleport, + instead of where you arrived on the station + - bugfix: Deja Vu can no longer be used to return to the wizard ship + - bugfix: Blade heretic ascension now gives you floating blades once again + deathrobotpunch: + - rscadd: big pharma now supplies a single pack of experimental medication as an + easy to access (albeit expensive) cargo goodie! + - balance: price for the cargo crate with 2 pill bottles of experimental medication + has been increased to 600 to better reflect the goodie case price. grungussuss: + - sound: some sheets that shouldn't be making metal sounds no longer make those + sounds - sound: added new sounds for RCD, RPD and Plumbing Constructor. -2024-08-18: - Majkl-J: - - bugfix: Fixed some erroneous things with the synth update - - code_imp: No more harddel cells upon synths charging - SkyratBot: - - qol: The Voidwalker wisp void now loops you + tralezab: + - bugfix: bedsheets are laid on beds properly now +2024-08-17: + Ghommie: + - rscadd: Added a treasure chest you can rarely fish from the ocean/beach, with + loot being a mix of fishing and piratey stuff. + - rscadd: You can revive fish with strange reagent now. - rscadd: You can sell items on the blackmarket with the LTSRBT now. - bugfix: Added some checks to prevent the swapper device and bluespace anomalies from theorically being able to send things and people to nullspace. + Jacquerel: + - bugfix: Beepsky and Mice have more appropriately positioned shadows. + Majkl-J: + - bugfix: Trying to repair someone's undamaged limb with a welder or wires no longer + has you smacking them + Shroopy: + - bugfix: Added a light switch to the science hallway in Metastation + SmArtKar: + - rscadd: You can now lean on windows the same way you can lean on walls + - bugfix: You no longer stop leaning on walls after clicking on anything - qol: Dumping things into microwave en-masse is done via RMB (drag'n'drop support coming soon!) - bugfix: RPEDs can now upgrade microwaves - bugfix: Spies can finally steal microwaves (Use RMB!) - - bugfix: Mechs' directional armor now actually works - - bugfix: Added a light switch to the science hallway in Metastation - - bugfix: Air alarms stuck in warning state despite area completely fine - - bugfix: bedsheets are laid on beds properly now - - bugfix: Mobs shown in ghost alerts shouldn't be offset out of the box - - image: Several midround dynamic alert icons should be more demonstrative of what - is spawning + TheVekter: + - bugfix: Updated Metastation for Wallening + Time-Green: + - qol: The Voidwalker wisp void now loops you + unit0016: + - bugfix: Indestructible reinforced walls now mimic their destructible counterparts + as intended. + - bugfix: Every bitrunner domain's been patched up for the new perspective shift. + zxaber: + - image: Airlocks have a better sprite for indicating which directions (if any) + you can pass through without ID access. +2024-08-18: + Ben10Omintrix: + - bugfix: fixes ai controllers incorrectly idling when changing z level + Ghommie: + - bugfix: lights placed on walls with the RLD now face the correct direction. + - bugfix: Fixes lobby buttons from station traits having no name and being unexaminable. - bugfix: Fixed the shower water visually not coming out behind the showerhead. - - bugfix: fixes surgery table buckle offsets + Justice12354: + - bugfix: Fixes the rotation of Centcom's Airlocks + KingkumaArt: + - image: Resprited mech drills, plasma cutter, pka and cargo clamp. + LemonInTheDark: + - admin: Subsystem Overview now has the ability to track a rolling average of tick + by tick subsystem cpu usage. + Melbert: + - qol: Icebox now has a trapdoor from Medbay leading into the Morgue (for corpses, + of course) + - bugfix: Patch exploit allowing nigh-infinite heretic points + - qol: Xenos and digi lizards have claw footprints + - qol: Some wall mounts will now consistently layer over others (light switches + and cameras, notably, should always layer above other mounts like signs and + status displays) + MrBagHead: + - bugfix: Swapped East and West sprites for access buttons to correct previous misalignment. + - rscadd: Added South-facing sprite for access buttons. + SmArtKar: + - bugfix: Mechs' directional armor now actually works + - bugfix: Alien beds no longer pretend they can be deconstructed with a wrench + - qol: Wallmount balloons are now clickable + - admin: Stat change is now logged for living mobs + - bugfix: Fixed elephant graveyard active turfs + - bugfix: Fixed random lipstick texture, fake syndie lipstick no longer can randomly + spawn + Timberpoes: + - bugfix: Having the Overflow Role set to On will properly ensure you get that role + at a High priority as intended by the game code. + - bugfix: Job selection is now a little bit more random. Fixes an unintentional + bias in random job assignment that could lead to feast-or-famine for roles where + everyone is assigned one job and nobody is assigned another job. + YesterdaysPromise: + - image: adjusted security barriers to be in 3/4 perspective. + Zytolg: + - bugfix: Updates much of Birdshot for the Wallening + mc-oofert: + - rscadd: portable gravity unit, bought at cargo + necromanceranne: - rscadd: Drunken fist fighting now has bonuses and penalties based on how intoxicated you are. Controlled liquor intake could make you a better brawler. Though you might vomit if you go too hard. @@ -609,89 +901,25 @@ - qol: Unarmed effects that would utilize stamina values now use a split of half brute, half burn to determine outcomes or for meeting thresholds. This affects; punch accuracy, stagger combo thresholds and grab vulnerability thresholds. - - rscadd: You can now lean on windows the same way you can lean on walls - - bugfix: You no longer stop leaning on walls after clicking on anything - - rscadd: add syndicate branded lipstick to uplink (6 TC), after applying lipstick - *kiss deals damage equal to energy gun - - bugfix: fix wallhit sound for projectile - - image: Resprited more types of fillets, and moonfish eggs - - image: Resprited mech drills, plasma cutter, pka and cargo clamp. - - bugfix: Alien beds no longer pretend they can be deconstructed with a wrench - - bugfix: idle basic mobs will now plan behaviors rather than completely shut down - itseasytosee: - - bugfix: illustrious ethereals now properly get the tenacious trait - - code_imp: more species features have been moved to their individual body parts. + thegrb93: + - bugfix: Air alarms stuck in warning state despite area completely fine 2024-08-19: - Melbert: - - qol: Xenos and digi lizards have claw footprints - - bugfix: Patch exploit allowing nigh-infinite heretic points - SkyratBot: - - bugfix: Fixed random lipstick texture, fake syndie lipstick no longer can randomly - spawn - - bugfix: fixes ai controllers incorrectly idling when changing z level - - image: Gas tanks got updated worn sprites + ArcaneMusic: + - bugfix: Runtimestation's APC is now connected to the grid again. - rscadd: White crayons (Renamed to Sticks of Chalk) may now be used on dead bodies to draw a body outline onto the ground easily. - - qol: The CentCom officer's beret has had its slowdown removed to be in line with - the winter coat. - - bugfix: lights placed on walls with the RLD now face the correct direction. - TwistedSilicon: - - bugfix: Clarkes will no longer become unable to dump ores upon picking a boulder - up. Mine away. - projectkepler-ru: - - bugfix: fixed lipstick runtime -2024-08-21: - EspeciallyStrange, Waterpig & Wolf751: - - rscadd: Sporting Rifle in .40 - - rscadd: Printable 10mm Speedloader, they're quite cheap but not at all that great. - - rscadd: Round start security pistol set in 9mm, 10mm revolver and also an alert - locked flechette rifle - - rscadd: Conversion kit for guns, alongside the blueshield/NTC getting a new magistrate - weapon beacn, letting them call in the energy revolver, the HoS revolver from - bubberstation and the M45A5 from ye olden time - - rscadd: Research for the new technode, military grade weaponry 1, 2 , 3 With the - last one requiring you to have illegal tech - - balance: Due to the on-going Sol Conflict not reflected in C-3 Sector. skild, - takbok, bogseo, AMR, LMG are no longer obtainable, cargo took a very heavy hit - due to embargo. A certain individual with a sequencer might be able to reach - this however. - - rscadd: a new helmet type that is inoffensive to the tactical group of the playerbase, - people wanted it so we'll have it, at the same time, you can now reskin the - 'classic' helmet' to have an alternate blue variant too - - balance: made laser much easier to get while ballistic are abit more rare and - more expensive - - balance: massively overhauled how ballistic security work, being they are now - a mid-late game researchable tech - - balance: '90% of ammo are no longer purchasable, instead they are available as - tech, see above. - - balance; .40 damage has their wound decreased' - - balance: 9mm damage is reduced to 25, 10mm damage is reduced to 30 - - balance: laser are 25 damage, as they are supposed to - - balance: .38 are now 30 damage - - balance: The new C-3 Sector peacekeeper combat shotgun, they're bulky, replacing - the old combat shotgun. But they don't fire as fast due to a certain recoil - compensation mechanism, however, the HoS shotgun has been given a gyroscopic - stabilizer allowing them to be fired one handed - - balance: stardust ammo now fire one projectile with 100% embed chance, 5 second - removal time instead of 10. and is slightly harder to get - - balance: the RCF and prybar are removed from import but colonization crate still - exist, this is done to compensate for the fact they are way too easily obtained, - requiring no research tech and even provide ore satchel of holding before research - for it is acquired. Prybar is only ever used by antag and greytider to get into - place, otherwise, if a paramedic need to, they can bug engineering for a prybar - when a crate is made - - image: added new sprites for the gun, pictured above. - Rhials: - - sound: '"radio message received" audio now has a brief cooldown.' - Shroopy: - - spellcheck: Fixed a typo in the sanity examine if you have the alexithymia quirk. - SkyratBot: - - balance: PACMANs now have significantly increased power output and take longer - to consume a single sheet - - balance: Inducers can now be recharged with plasma - - balance: Inducers ordered from cargo now start with upgraded megacells instead - of upgraded batteries + Bisar: + - bugfix: The Nanotrasen Emergency Religious Response Team has blessed the station; + heretic summon rituals now actually consume resources, fixing infinite summon + loops. + Ghommie: + - image: Ported and adapted several food sprites from Aurora, Bay and one instance + from Paradise -- Bacon, plant meat, slime meat, cutlets, crab meat, crab rangoon, + bechamel sauce, cheese curd, waffles, chips, shrimp chips, cheesie honkers, + space twinkie, jerky, peanuts bags, chocolate, boritos, syndicake, popcorn, + pesto, tomato sauce, pineapple slice, pineapple salsa, bran request cereals + and bronx bar have been resprited. + - rscdel: Waffles no longer magically conjure a "waffle tray" trash item when eaten. - image: Shrunk the arrow shown when pointing at things to be less invasive. - rscadd: Wearing an ID with the trim of a command/leader position gives you bigger arrows (about the size of arrows before this PR) which may also be of different @@ -701,74 +929,108 @@ - bugfix: ERT engies and medics now come with the engineering and entrails-reader skillchips respectively, like their station counterparts. - bugfix: Fixed not facing atoms that you're pointing at. - - rscadd: portable gravity unit, bought at cargo + - rscadd: Added a bluespace fish case to the advanced fishing node. + - balance: Fish cases will keep a fish from getting hungrier or ready to reproduce, + while also healing it up to 65% health. + - balance: Examining a fish with zero fishing skill whatsoever won't give a reading + on its size and weight. Conversely, examining one with the skill leveled two + times will give general information on if it's starving, sick, hungry, or dead. + - bugfix: paintings now drop canvas and frame when knocked off the wall. + Jacquerel: + - bugfix: Whatever the roaches were getting into which made them hover above the + ground seems to have worn off. + - bugfix: Carp, bat, parrot, and dragon corpses no longer float in the air. + Rhials: + - code_imp: Radios/encryption keys now use a single variable for "special" frequencies. + Please report if you experience any strangeness with accessing/being unable + to access the Centcom, Syndicate, or Cyborg radio. + SmArtKar: + - bugfix: Random spraypaint setting now properly paints large decals + - image: Added emissives to departamental signs + - image: Gas tanks got updated worn sprites + - bugfix: Examine balloons for wall-mounted buttons no longer inflate themselves + infinitely + - bugfix: Fixed active turfs on crashsite ruin + - bugfix: Captain's spare safe no longer turns invisible when opened + - bugfix: Fixed soapbox component sometimes runtiming roundstart + - bugfix: Fixed circuit drone pixel/shadow offsets + TwistedSilicon: + - bugfix: Clarkes will no longer become unable to dump ores upon picking a boulder + up. Mine away. + mc-oofert: + - balance: wheelchairs no longer double your movement cooldown if you moved diagonally + norsvenska: + - qol: The CentCom officer's beret has had its slowdown removed to be in line with + the winter coat. + r3dj4ck0424: + - rscadd: A new vendor of cytology equipment, the CytoPro, is now available in your + local science department! + san7890: + - bugfix: The area of the CentCom Z-Level dedicated to the Lobby Screen should look + far better now, with a solid black title screen should the lobby image not load + in/get deleted. + - qol: Reporting issues on the Github should now be a far more simpler experience. + Hitting the "Report Issue" button in the top-right of your BYOND Client Screen + will still autofill in the fields as expected. +2024-08-20: + JohnFulpWillard: + - rscadd: Added Taunting, a faster and cooldowned version of the Spin emote. + - balance: Wizards blocking projectiles with Transparence and the bitrunner matrix + skillchip now have a visible effect of deflecting the projectile. + - balance: The bitrunner skillchip now uses taunt instead of flip. + - balance: The style meter now uses taunting instead of flips and spins. + - bugfix: Statues don't count as eyes to creatures. + - bugfix: Human AIs and Admin ghosts no longer get kicked off of machines that aren't + on cameranets. + SmArtKar: - image: Utility belts got new tool overlay sprites - spellcheck: CE's toolbelt is no longer capitalized or considered an improper noun - - balance: wheelchairs no longer double your movement cooldown if you moved diagonally + - balance: PACMANs now have significantly increased power output and take longer + to consume a single sheet + - balance: Inducers can now be recharged with plasma + - balance: Inducers ordered from cargo now start with upgraded megacells instead + of upgraded batteries - balance: Vomiting from disgust now removes 50 of it from you. - - qol: Haunted 8ball now gives you a TGUI input with your question for ghosts instead - of telling them the last thing it heard. - - image: 8ball has received a resprite - - admin: Subsystem Overview now has the ability to track a rolling average of tick - by tick subsystem cpu usage. + Vekter: + - bugfix: Fixed further Wallening issues on Metastation, including Cargo's shuttle + door buttons and Xenobiology's access buttons. + - rscdel: Removed department directional signs from Metastation as they are currently + broken. They will return once they've been fixed. + Zytolg: + - bugfix: Continues to update Birdshot into a postwallening playable state + carlarctg: + - rscadd: Added three new DM maps - Ragnarok, Lattice Battles, Species Showdown. + mc-oofert: - bugfix: spawning on a table or other elevated object does not offset you forever +2024-08-21: + Ghommie: + - rscadd: Added twelve new fish types to the game. Some are cool, other are not, + some come with their own special traits and some are straight-up weapons. + - rscadd: Added more fishing spots to the game. Sand, ice, rivers, the cursed spring... + - balance: A few fish like salmon, swordfish and pufferfish (poisonous btw) now + give better quality fillets when butchered, which can improve the quality of + food that uses them even further. + - balance: Excessive fish weight will make the fish slowier to carry, while excessive + size may make it require two hands. + - balance: Adjusted size, weight and cooldowns of several fish, for the better. + Iamgoofball: - balance: Air alarms are now usable by Station Engineers as well as Atmospherics Technicians. - - image: Updated cryostasis beaker's sprite - aKromatopzia: - - image: Teshari clothing got some more fallback sprites; more GAGS'd job labcoats - work on teshari; two-colour small scarves and suspenders have new sprites. - - rscadd: TG RD coat (the purple one) is obtainable from CommDrobe now. -2024-08-22: - Majkl-J: - - bugfix: Having an augments+ tongue no longer runtimes when becoming abductor antag - - bugfix: Abductors and skeletons no longer load your prefs in so you don't end - up looking like a frankenstein version of yourself - Odairu: - - bugfix: android legs have a digi version so they properly get replaced - - rscadd: army crawling - - code_imp: Improves the stealth crawl of borers and moves it to an easy to use - element Rhials: + - bugfix: Adjusts some areas by the Icebox Cliffside Bench to generate a bit less + weirdly. + - sound: '"radio message received" audio now has a brief cooldown.' - bugfix: Beepsky will now salute commissioned bots, instead of himself, when encountering one. - Shroopy: - - qol: filled Kilostation surgical trays with tools and rearranged things so they're - next to the operating tables - - qol: swapped out the Kilostation animal pen fire door for a regular windoor. No - more fire alarm noise! - SkyratBot: - - bugfix: Fixed elephant graveyard active turfs - - qol: Reporting issues on the Github should now be a far more simpler experience. - Hitting the "Report Issue" button in the top-right of your BYOND Client Screen - will still autofill in the fields as expected. + SmArtKar: + - bugfix: Ragnarok deathmatch arena now has noteleport area - bugfix: Replaced a locked cabinet that you cannot open in ninja den with an unlocked one - - rscadd: Buckshot is back on the menu, on the blackmarket. - - balance: the integrity of firearms now counts toward projectile damage. A gun - that's on the very verge of breaking down will deal half as much damage. - - qol: Clicking floor tiles now also closes curator/morgue doors, like with normal - airlocks. - - bugfix: Captain's spare safe no longer turns invisible when opened - - bugfix: The area of the CentCom Z-Level dedicated to the Lobby Screen should look - far better now, with a solid black title screen should the lobby image not load - in/get deleted. - - rscadd: Added a bluespace fish case to the advanced fishing node. - - balance: Fish cases will keep a fish from getting hungrier or ready to reproduce, - while also healing it up to 65% health. - - balance: Examining a fish with zero fishing skill whatsoever won't give a reading - on its size and weight. Conversely, examining one with the skill leveled two - times will give general information on if it's starving, sick, hungry, or dead. - - rscadd: Added a treasure chest you can rarely fish from the ocean/beach, with - loot being a mix of fishing and piratey stuff. - - rscadd: You can revive fish with strange reagent now. - - bugfix: paintings now drop canvas and frame when knocked off the wall. - - bugfix: Random spraypaint setting now properly paints large decals - - bugfix: Ragnarok deathmatch arena now has noteleport area - - bugfix: lua scripting now works on linux - - bugfix: Fixed active turfs on crashsite ruin - - rscadd: Fishing toolboxes (and occasionally maintenance) now come with a paper - slip containing fishing-related tips. + - qol: Haunted 8ball now gives you a TGUI input with your question for ghosts instead + of telling them the last thing it heard. + - image: 8ball has received a resprite + - bugfix: Fixed examine balloons not being click transparent even while inactive + - image: Updated cryostasis beaker's sprite grungussuss: - sound: computers now make clicky clacky sounds plsleavemealon: @@ -810,27 +1072,61 @@ stuck - balance: Changed max refined vortex cores from 1 to 3. Changed the Event Horizon Anti-Existential Beam Rifle recipe to require 2 vortex cores. +2024-08-22: + Absolucy: + - qol: Clicking floor tiles now also closes curator/morgue doors, like with normal + airlocks. + - qol: Unarmed attacks with carp jaws now uses a bite effect rather than a punch + effect. + Ben10Omintrix: + - bugfix: fences will no longer appear pitch black and they will layer properly + Bisar: + - rscadd: Nanotrasen Intelligence has received reports of botanical experimentation + in a Syndicate base on lavaland. What fiendish flora are taking root in their + secret lair? + Ghommie: + - rscadd: Fishing toolboxes (and occasionally maintenance) now come with a paper + slip containing fishing-related tips. + - rscadd: Buckshot is back on the menu, on the blackmarket. + - balance: the integrity of firearms now counts toward projectile damage. A gun + that's on the very verge of breaking down will deal half as much damage. + Jacquerel: - balance: Pacifist carp can now be spawned from the friendly gold core reaction, and no longer appear from the hostile one. - bugfix: The teeth of toothless carp will not occasionally reappear - bugfix: Crabs will now run from attackers larger than them and attack things smaller than them, as intended. - - qol: Unarmed attacks with carp jaws now uses a bite effect rather than a punch - effect. - - bugfix: custom pies and cakes are craftable again - - balance: The CytoPro has had prices raised to slightly more reasonable levels. + Redrover1760: + - balance: Changed max refined vortex cores from 1 to 3. Changed the Event Horizon + Anti-Existential Beam Rifle recipe to require 2 vortex cores. + Rhials: + - qol: Delivery/Bot pathing nodes have been added to the middle room of Runtime + station. + - sound: Windows blown out by a Voidwalker blade now have a cool sound that plays + as they reform. + - admin: You can now choose the humanoid species spawned by an ERT summon in the + summon menu. + SmArtKar: + - bugfix: Fixes kudzu being able to spawn on openspace turfs resulting in it getting + stuck - bugfix: Radioactive nebula no longer runtimes on runtime station + - bugfix: Fixed delam counter going over objects by Xackii, sprites by ArcaneMusic: - rscadd: Added big manipulators. - nikothedude: - - balance: Naga constrict time needed reduced to 2.2 seconds - - bugfix: Science prescription glasses no longer give a medhud - - bugfix: AR prescription huds actually work now - projectkepler-ru: - - bugfix: the CMG should now actually be normal sized when folded - - bugfix: bein able to buy the MCR, please stop - - rscdel: obliterated powerstation from the blueshift. it should no longer be present - now + lizelive: + - balance: reticence requires progression + r3dj4ck0424: + - balance: The CytoPro has had prices raised to slightly more reasonable levels. +2024-08-23: + MMMiracles: + - bugfix: More various Tramstation-adjacent wallening fixes. + Majkl-J: + - bugfix: custom pies and cakes are craftable again + SmArtKar: + - image: Updated goliath cloak sprites + necromanceranne: + - rscadd: Punching mitts! Punch wildlife to death and scream the whole time. ADVENTURE! + - balance: Megafauna can be affected by martial arts. 2024-08-24: projectkepler-ru: - bugfix: erronously the c10 speedloader was normal sized @@ -885,11 +1181,59 @@ - bugfix: Fixed telecoms specialist HUD icon - spellcheck: Sneak a peek of Hilbert's Hotel, not a sneak peak SkyratBot: + DaCoolBoss: + - bugfix: Aquarium decorations now contain plastic. + - spellcheck: Added item descriptions for aquarium decorations. + EnterTheJake: + - balance: Rusted Ritual now requries 10 sheets of Iron instead of Titanium. + Ghommie: + - rscadd: Added Athletic Fishing Gloves and Fishing Glove Module to the advanced + fishing tech node. Both can be used to fish without having to hold a fishing + rod. The athletic fishing gloves will also train your athletics skill. + LT3: + - spellcheck: Sneak a peek of Hilbert's Hotel, not a sneak peak + SmArtKar: + - bugfix: Marine helmets no longer change their sprite to security helmets when + their flashlight is toggled + - spellcheck: Hierophant no longer lies about obliterating someone + TheBoondock: + - qol: goliath arm can defuse gibonite by bumping or direct click +2024-08-25: + DrDiasyl aka DrTuxedo: + - rscadd: Curator has received a new BROADCAST CAMERA which can broadcast the surroundings + LIVE on Entertainment Screens/ Alongside with some other Journalism related + gear in his Heroic Beacon + - sound: Entertainment screens now play muffled speech when hearing a message on + Entertainment frequency + Ghommie: + - rscadd: You can place papers, photos and cash bills (no holochips) inside bottles + and then toss them into the ocean (or fishing portal gen with relative settings) + with right-click, for others to fish them up on future rounds. + - bugfix: You can no longer pickup closets and crates wrapped in a package with + a fishing rod. + - bugfix: Fixed a few harddel issues with mob spawns that caused charred corpses + fished from lavaland to create an invisible blockade. + - bugfix: Fixed being able to fish up mobs that have fallen in totally different + z-levels with a rescue hook (i.e. from bitrunning domains to lavaland). + SmArtKar: + - bugfix: Removed all ways of teleportation from deathmatch and replaced all consoles + on a certain map with non-functional variants. Loadouts have been adjusted to + account for this. + - rscdel: Species Warfare no longer has atmospherics-related equipment on it. + YesterdaysPromise: + - rscadd: Added crates of the following varieties; Interdyne, Interdyne freezer, + Tiger Co-Op, S.E.L.F. MI13, A.R.C., Cybersun (4 colour variants), Waffle Corp, + Donk, Gorlex, Gorlex weapons, DeForest, Nakamure Engineeing, Robust Industries +2024-08-26: + GPeckman: + - bugfix: The instagib, ragecage, mech madness, secu-ring, shooting range, and sniper + elite deathmatch maps are available again. + Ghommie: + - bugfix: Fixes the chainsaw evolution for goldfishes. + Majkl-J: - rscadd: Achievement for eating 500 cigarettes - balance: Cigarettes are now edible - code_imp: Adds a variable to hide the food examine on the edible element - - bugfix: wet hides and hairless hides no longer make metal clanging noises when - picked up/dropped - bugfix: SSPolling no longer fills in the candidate list with empty entries to guarantee it returns a list size of amount_to_pick - bugfix: fixes blob spore and slime AI endlessly attacking the dead @@ -905,6 +1249,19 @@ - bugfix: gun not being in pistol case when they should be - rscadd: 10mm AP, HP speedloader to the tech - code_imp: removed unnecessary override as changes were patched upstream + SmArtKar: + - spellcheck: Fixed a typo on snowdin shuttle transi(s)t consoles + grungussuss: + - sound: lead pipe has sound + vinylspiders: + - bugfix: wet hides and hairless hides no longer make metal clanging noises when + picked up/dropped +2024-08-27: + Ben10Omintrix: + - bugfix: fixes blob spore and slime AI endlessly attacking the dead + aKromatopzia: + - image: more teshari clothing sprites + projectkepler-ru: - bugfix: Helmet pepperspray not working because of an NRI sabotage on the supplyline, the IDMA Force has now succesfully repelled the attack and has shifted focus toward trying to identify the suspect involved in this attack @@ -918,3 +1275,39 @@ 2024-08-31: projectkepler-ru: - rscadd: disabler smg to sec medic +2024-08-28: + Odairu: + - balance: No more hands in army crawl (goodbye gbp) + SkyratBot: + - bugfix: Bioscrambler anomalies no longer affect inorganic species + - spellcheck: Fixed a typo on snowdin shuttle transi(s)t consoles + Sakamoto4ka: + - rscadd: Added salt electrolysis reaction + SmArtKar: + - bugfix: Bioscrambler anomalies no longer affect inorganic species +2024-08-28: + Melbert: + - bugfix: Juicing and grinding should break less + Vekter: + - bugfix: Fixed an issue causing Quartermaster office access to show in the wrong + area on Plexagon Access Management. + - bugfix: Fixed an inconsistency in the naming for QM Office access. + grungussuss: + - bugfix: after 4 years, computer sound loop now works properly +2024-08-29: + FeudeyTF: + - rscadd: Added board for detective's evidences + Rhials: + - rscadd: Smokey remains have appeared in maintenance. Make sure to walk when near + them! + SmArtKar: + - bugfix: Stagger animation is no longer horrilbly jittery + Xackii: + - qol: revolver in roundstart holsters is on the last slot and not on first +2024-08-30: + SmArtKar: + - bugfix: Projectiles no longer always play turf hit sound + - balance: Plexagon Crew Manifest is now a default PDA app for everyone, and is + free. + - balance: Plexagon Crew Manifest no longer provides Detomatix resistance, but security + records and status display control now do. diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml new file mode 100644 index 0000000000000..9542bb832fe1f --- /dev/null +++ b/html/changelogs/archive/2024-09.yml @@ -0,0 +1,1166 @@ +2024-09-01: + BurgerBB: + - balance: Reworks (mostly) and renames all the storytellers and improves the code. +2024-09-03: + Moostard: + - bugfix: Ceremonial rifle crate now contains 3 rifles as advertised. The naming + of the single-pack variant is more clear as well. +2024-09-05: + Doomtail: + - rscadd: Added twisted, twisted long, wicked, and inari hairstyles. + - rscadd: Added cervine snout. + - rscadd: Added naja hood frill. + Majkl-J: + - rscadd: Syndicate maid kit, a kit containing armored syndicate maid clothing + - bugfix: Cargo shelves now drop crates upon being destroyed + Odairu: + - balance: removed slipstick from uplink + StrangeWeirdKitten: + - qol: Divides Jukebox volume by 2 + plsleavemealon: + - bugfix: lets zombies be gendered +2024-09-06: + BurgerBB: + - bugfix: Fixes a typo in map voting code that prevented the fallback "no maps to + vote for" code to work. + - rscadd: Predictable Chaos now has 50% more antagonists. + - rscdel: Disables "The Bomb" storyteller from being votable because engineering + cryos every time it's voted. + Majkl-J: + - bugfix: Moth climb works again + Odairu: + - rscadd: hypno lipstick +2024-09-08: + BurgerBB: + - rscadd: People who sign up roundstart get triple the starting cash compared to + latejoiners. + Swiftfeather: + - bugfix: Can no longer rapid fire kisses, you boykisser. + plsleavemealon: + - rscadd: Makes the numb quirk actually numb you +2024-09-14: + LT3: + - code_imp: Modularised and updated scrubber overflow event + - code_imp: Boykissers resume boy kissing! Kiss emote no longer causes a progress + bar after using + - balance: Syndie/death kiss projectiles have a 1.6 second cooldown + Majkl-J: + - rscadd: Added Lone infiltrator ghost midround + - rscadd: Added Malf AI midround + - rscdel: Removes predictable chaos as all tellers now use its main gimmick as a + baseline + - qol: Storyteller votes now prevent a constant voting streak of the same type of + tellers + - balance: All storytellers now roll antags more often, but in smaller numbers per + roll + - balance: Clown storyteller no longer cares about event weights and just does whatever + rng decides + - balance: Meteors can no longer run repeatedly in a single round + - balance: Makes ghost roles actually roll somewhat frequently + - bugfix: Fixed a few bugs with storytellers, namely the tracks sometimes going + into negatives, and voidwalker running on planet maps + - refactor: Refactored how storytellers handle tracks to be easier to code with + Odairu: + - bugfix: neck gaiter no longer has sec radio +2024-09-18: + BurgerBB: + - bugfix: Fixes Moonstation Library Wiring and Disposal Pipe + - rscdel: The mold event can no longer be triggered by events except by admin intervention. + Majkl-J: + - bugfix: Storyteller now actually rolls stuff correctly and in respect to the antag + cap + ShadowLarkens: + - bugfix: Delete button on belly messages no longer has a rendering error. + Swiftfeather: + - balance: Reduced heretic weighting. + nikothedude: + - rscadd: '*esigh, for exasperated sighing' + shellspeed1: + - rscadd: Cargo Companies are now available to offstation factions + - rscadd: Tarkon now has a cargo setup available to them + theselfish: + - rscadd: Adds unused Red Pauldrons to Sec Vendor, as well as the Sec Med beret + and Armadyne belts. +2024-09-24: + Arturlang: + - refactor: Heavily refactors how bloodsucker powers function. + - refactor: Tremere powers no longer have subtypes for each level. + - rscadd: Completely redoes how bloodsucker ability descriptions, both the longer + antag panel and the action button hover over, they will actually tell you actual + values that the game itself uses for damage, cooldowns, and effect durations + - balance: Tremere powers can now level up as far as you want. + - balance: Mesmerize is heavily reworked, now it no longer forces both parties to + stand still for it to work, but it is obvious to the victim when used, however + the victim is muted for the duration of the spool up, and will stun and mute + normally if the do_after completes. + - rscadd: 'Mesmerize now has a secondary that allows you to mute and confuse your + victim that happens on a right-click, + + dominate, the tremere''s version instead knockdowns.' + - rscadd: Tremere's dominate now has a visual timer for temporary vassals, visible + only to the master's vassals and the master themselves. + - balance: Tremere's dominate now only requires level 2 to create temporary vassals, + but the duration now scales with the level. It now requires the potential vassal + to have more than 336 blood, and will use it all up once the duration ends, + effectively making it only usable once per person. + - balance: All tremere powers can now level up past level 4 + - balance: Thaumaturgy is heavily reworked, it now has a charge system, and while + the projectile deal less damage, you can shoot a lot more of them, and the projectiles + will seek towards any non-vassal mob near where you cast it. + - refactor: Separates bloodsucker ability bitfields and action bitfields to avoid + overriding eachother + - balance: Bloodsuckers going into torpor outside of coffins will always die, but + will wake out of torpor at 20% maxhealth(not counting critical health) + - balance: A coffin being opened during sol will wake you up, given you are LITERALL + BURNING UN-ALIVE. + - balance: The range of haste is now 5 tiles. + - balance: Bloodsuckers are no longer highly wound resistant, but their coffins + will now heal all wounds + - bugfix: Should fix the issue with bloodsucker bleeding staying active forever + BurgerBB: + - balance: Reduces RBMK2 temperature gain based on matter bin tier + - balance: Overhauls requirements for Anomaly Refinement, and removes some limits + and implements some more. + - balance: Makes Space Dragons immune to toxin + oxy damage because I saw a Space + Dragon die to simplemobs on Moonstation Once + KathrinBailey: + - rscadd: Loincloths from Sandstorm. + - bugfix: Jean shorts/skirt no longer covers legs and chest. + Majkl-J: + - qol: The tank manipulator now gives feedback about what's in it + Odairu: + - balance: nerfs heretics ability to ascend + Redrover1760: + - balance: Reverts 9x25mm and 9x25mm AP skyrat nerf to tg values. + Shadow-Quill: + - spellcheck: Fixed a typo in the message that appeared when someone with the Well-Trained + perk examined someone with the Dominant Aura trait. + nevimer: + - bugfix: airbags are no longer haunted + shayoki: + - rscadd: Added fitness equipment to Box Station's Fitness Room. + theselfish: + - bugfix: The Neck Gaiter no longer hides glasses. +2024-09-27: + LT3: + - image: Added a moth to your taskbar + - qol: New vote reminder notification, enabled for storyteller votes + ReturnToZender: + - balance: NTC no longer gets Stardust shells, they get only their laser. +2024-09-04: + KathrinBailey: + - bugfix: Jean skirts no longer cover chest/legs. + SkyratBot: + - balance: Plexagon Crew Manifest is now a default PDA app for everyone, and is + free. + - balance: Plexagon Crew Manifest no longer provides Detomatix resistance, but security + records and status display control now do. + 00-Steven: + - balance: Fax machines with hacked input servos can now send chap slices and cookies. + Please accept them. + - bugfix: Buckling yourself to a bed or stasis bed will now make you actually use + the headrest/pillow and face up. + - qol: Multi-z disposal segments can actually be made with an RPD. + - image: Upwards multi-z disposal segments no longer have wonky sprites. + - bugfix: Big manipulator hands now move smoothly with the base when it's moved. + Absolucy: + - bugfix: You will now be ejected from any jaunt (i.e bloodcrawl or shadow walk) + if you lose consciousness somehow during the jaunt. + Artemchik542: + - bugfix: typo in CRUSH_CRIT_PARAPLEGIC + AyIong: + - qol: Stat Panel settings moved to personal tab + - bugfix: Stat Panel tabs no longer create horizontal scrollbar by default, but + you can return it into the settings + - bugfix: Hovering over a truncated statpanel button, doesn't blocks the button + below it anymore + FeudeyTF: + - bugfix: fixed detective board placing + Hardly: + - sound: Added sounds for conveyor belt switches + JohnFulpWillard: + - bugfix: Ice cream vats can be refilled with beakers again. + LT3: + - bugfix: You can now put Skub back in the Skub box, as intended + - bugfix: Ice Box lower floor maints is properly protected during radstorms + - bugfix: Fixed malfunctioning tram crossing signals sometimes staying green + Melbert: + - bugfix: Some spy items should spawn less broken + Redrover1760: + - bugfix: Fixed light overloads not draining significant amounts of energy. + - bugfix: Power sinks now drain APCs at a significant rate instead of glacially + slow. + - balance: Power sinks are adjusted to not explode within 30 seconds of the average + power output a station produces. + SmArtKar: + - image: Added new sprites for hellfire lasers + - bugfix: Cardborg costume no longer gets its appearance deleted when you drop a + second hat/suit you are holding in your hand + Watermelon914: + - bugfix: Fixed a bug that breaks signal handlers on an object if one of the signal + handlers doesn't return a number value. + Xackii: + - bugfix: fixed that screwdriwing radio headset in combat mode don't do anything. + alien3301: + - balance: When silicons use their radio they will not whisper out loud anymore + grungussuss: + - sound: being sacrificed by a heretic is now spookier + grungussuss and kayozz: + - sound: gravity generator has a new sound + vinylspiders: + - bugfix: due to a clerical error, all ballistic guns were shipping with built-in + silencers. this has been resolved-they will now make noise once again when fired. + - bugfix: fixes a crafting exploit that allowed you to get more resources back from + disassembling than you put into the recipe + - bugfix: fixed 'Enable Radio Noise' pref only being respected for deaf people +2024-09-05: + Erol509: + - bugfix: Repathed tesh satchels, removed not needed hood overlay on Teshari characters + Archimus12: + - bugfix: Makes the Cytology Vendor sell science bio suits instead of medical bio + suits. + - bugfix: Makes the Cytology Vendor sell science lab coats instead of normal lab + coats. + Astrogem2: + - spellcheck: fixed a few typos with energy shield descriptions. + Ben10Omintrix: + - bugfix: aquarium ui now displays props and fishes correctly + - refactor: able_to_run and incapacitated have been refactored to be event based + - bugfix: wooden fences will no longer appear pitch black in lower levels of icebox + - qol: gives aquariums a new easier to use UI + Bisar: + - code_imp: The (currently unused) TGUI checkbox components returns a BYOND friendly + list of the indexes of any choices now. + EnterTheJake: + - rscadd: A Syndicate Rebar Quiver has been added to the uplink + - qol: Left clicking with a rebar crossbow will now draw/undraw the string. + - balance: Rebar quivers are now a neck slot item. + - balance: ' Hydrogen bolts damage has been upped to 55 brute and can now pierce + through walls, they no longer have infinite piercing and can no longer embed + however.' + - code_imp: removed the TRAIT_ALWAYS_HIT_ZONE, replaced with 2 new variables. + - bugfix: fixes rebar crossbows having a higher capacity than intended if a bolt + had already been chambered. + FeudeyTF: + - bugfix: fixed an UI problems of evidence board + Ghommie: + - bugfix: Rum can be synthetized again. + JohnFulpWillard: + - qol: Smartfridges now lets you set how many pills you want to vend, rather than + popping out a second separate tgui window. + LT3: + - rscadd: Added Chief Engineer SEAL OF APPROVAL sticker + - code_imp: Stickers now come in sticker packs, not boxes + - code_imp: Stickers can now add examine text to whatever they're stuck on + Rhials: + - spellcheck: Anomaly suicides now use proper grammar. + - bugfix: Anomaly suicides work again. + Time-Green: + - qol: Unsettle (Voidwalker) doesn't go on cooldown if line of sight is broken + grungussuss: + - sound: fish now have new sounds + oranges: + - rscadd: ghosts can now jump, bhop your way to life + r3dj4ck0424: + - rscadd: The vendor of cytology equipment, the CytoPro, is once again available + in your local science department! +2024-09-06: + Absolucy: + - refactor: Refactored some functions related to line-of-sight and reach to improve + performance. + Ghommie: + - bugfix: Syndie sleepers now drop the appropriate syndicate sleeper boards. + - bugfix: fixed a few minor nits with aquarium fish visuals. + - qol: You can kill germs by actually cooking the food (i.e. frying and grilling) + now, or by setting it on fire. + grungussuss: + - sound: being sacrificed by a heretic is now spookier + Hardly: + - sound: Plumbing Constructor and Rapid-Tiling-Device now has RCD's pick up and + UI sounds + - bugfix: Fixes ghosts being able to interact with the RCD, RPLD and RPDs + Jewelry-x: + - spellcheck: fixed a wrong extension in the RUNNING_A_SERVER.md + jlsnow301: + - rscadd: 'Added two new bitrunning maps: Grasslands Hunt and Meta Central.' + - rscadd: Deer are now more complex animals, granting them enhanced ability to run + amok and chew your favorite plants. + - balance: Reduced the cost of most BR vendor items. + - bugfix: Fixes an issue where modular virtual domains spawned less mobs than intended. + - bugfix: These modular spawns are now valid mutation targets to become an antagonist. + KazooBard: + - qol: All cans (soda cans etc) fit on utility belts now. Drink on the job! + LT3: + - image: 'The ''shit is fucked'' default turf no longer flashes' + Majkl-J: + - bugfix: Embed updating now actually updates embeds + Melbert: + - refactor: Refactored heretic influences a tiny bit, now ghosts can see them! Report + any oddities. + - bugfix: Some spy items should spawn less broken + oranges: + - rscadd: ghosts can now jump, bhop your way to life + OverwatchVoice: + - spellcheck: Changed description of Rebar crossbow. + - bugfix: Rebar crossbow description will no longer lie about it's missfire potential. + r3dj4ck0424: + - spellcheck: made the grammar on the brimdemon horn crusher trophy nicer + Rhials: + - bugfix: Runtime station has delivery beacons and navbeacons again. + - spellcheck: Anomaly suicides now use proper grammar. + - bugfix: Anomaly suicides work again. + Singul0: + - sound: adds sounds for energy shieldbashing + - code_imp: Shieldbashing feature is now consistent across all shield types + SkyratBot: + - qol: Smartfridges now lets you set how many pills you want to vend, rather than + popping out a second separate tgui window. + - bugfix: fixed a bug that could sometimes cause jump boots users to retain the + floating trait indefinitely when using the ability + - bugfix: Rum can be synthetized again. + - bugfix: Big manipulator hands now move smoothly with the base when it's moved. + - bugfix: Cardborg costume no longer gets its appearance deleted when you drop a + second hat/suit you are holding in your hand + - qol: Unsettle (Voidwalker) doesn't go on cooldown if line of sight is broken + - qol: Mirrors now have text tooltips for their radial menus + - bugfix: Fixed pride mirrors not dumping you into space after use + - bugfix: Buckling yourself to a bed or stasis bed will now make you actually use + the headrest/pillow and face up. + - bugfix: fixed that screwdriwing radio headset in combat mode don't do anything. + - bugfix: You will now be ejected from any jaunt (i.e bloodcrawl or shadow walk) + if you lose consciousness somehow during the jaunt. + - bugfix: due to a clerical error, all ballistic guns were shipping with built-in + silencers. this has been resolved-they will now make noise once again when fired. + - bugfix: Changelings can no longer spawn undetectable spider eggs inside of vents + - spellcheck: fixed a few typos with energy shield descriptions. + SmArtKar: + - bugfix: Changelings can no longer spawn undetectable spider eggs inside of vents + - bugfix: Acromegaly no longer makes you bonk your head on airlocks while you're + inside of objects + thegrb93: + - bugfix: Fixes vox breath mask being unable to eat or drink through after adjusting + it + - sound: some more items will vary in pitch when picking them up and placing them + down + TwistedSilicon: + - bugfix: The Codex Cicatrix ritual now consumes the item in the case where a hide + was used instead of a corpse. No more free books. + vinylspiders: + - bugfix: fixed a bug that could sometimes cause jump boots users to retain the + floating trait indefinitely when using the ability + Y0SH1M4S73R: + - admin: Dreamluau provides a more informative error message when trying to pass + references to qdeleted datums back to BYOND. +2024-09-07: + Ben10Omintrix: + - bugfix: fixes basic mobs not losing their aggroed appearance after death + Ghommie: + - rscadd: Added fishing lures to the game. They don't get used up like baits and + let you catch specific kinds of fish, though they need to be spun every few + seconds. The whole set can be ordered from cargo for 450 credits. + - balance: The magnet hook now removes dud chances. + - rscadd: 'Added five new fish types: perch, two types of pike, monkfish, plaice + and squid. Squids have a fairly special ink production trait, which lets you + use them (unless dead) to ink people face at close range, and can be butchered + for an ink sac, which can either be processed into canned squid ink, or thrown + at someone.' + - bugfix: Refactored throwing a little. Some items (specifically components/elements) + won't be triggered when caught. no more plates shattering despite being caught + for example. + - rscadd: Goldfish, lavaloops, needlefish and armorfish can now be used as baits. + grungussuss and kayozz: + - sound: gravity generator has a new sound + Melbert: + - refactor: Refactored heretic influences a tiny bit, now ghosts can see them! Report + any oddities. + MrStonedOne: + - bugfix: Fixed the taskbar/menu bar icon showing the virgin orange byond icon instead + of the chad blue ss13 icon. + Rhials: + - rscadd: Code-Violet Medical Support ERT teams have been rolled out for deployment + to Space Station 13 and related Nanotrasen Installations. + Singul0: + - bugfix: Fixes makarov-stechkin mix up on forgotten ship virtual domain. + SkyratBot: + - bugfix: Embed updating now actually updates embeds + - spellcheck: Changed description of Rebar crossbow. + - bugfix: Rebar crossbow description will no longer lie about it's missfire potential. + - sound: adds sounds for energy shieldbashing + - code_imp: Shieldbashing feature is now consistent across all shield types + - qol: All cans (soda cans etc) fit on utility belts now. Drink on the job! + - image: Added new sprites for hellfire lasers + - bugfix: fixed the die of fate deleting all your organs when rolling a 4 + - balance: When silicons use their radio they will not whisper out loud anymore + TwistedSilicon: + - bugfix: The Codex Cicatrix ritual now consumes the item in the case where a hide + was used instead of a corpse. No more free books. + Xackii: + - qol: You don't need two hands to stream with broadcast camera. +2024-09-08: + EnterTheJake: + - balance: Syndicate quiver is now small sized instead of Bulky. + FeudeyTF: + - bugfix: fixed removing last case + SmArtKar: + - bugfix: Mouthhole module can no longer be installed on MODsuits that don't cover + the mouth + - image: Civilian MODsuit got a resprite + grungussuss: + - sound: fish sounds are louder +2024-09-09: + Ben10Omintrix: + - bugfix: basic mobs will now act hostile again + Ghommie: + - spellcheck: fixed a few wording and markdown issues on the instructions paper + for fishing lures. + Jackraxxus: + - bugfix: You can deploy MODsuit parts individually again. + Kylerace: + - bugfix: some bot paths will show up to users with diagnostic huds again + Melbert: + - bugfix: '[Icebox] Fixed one set of stairs' + Rhials: + - balance: Hallucinatory anomalies now have a wider range, and will spawn hallucinatory + decoys of itself to mislead you. + Sealed101: + - bugfix: fixed borg exoskeletons not dropping when a borg is manually deconstructed + - bugfix: borg upgrade modules are now dropped when a borg is deconstructed + SmArtKar: + - bugfix: Fixed prosthetic quirk dropping organs underneath you when spawning + - bugfix: EMPing turrets temporarily disables them once again + Thunder12345: + - bugfix: Freed up a trapped bookshelf in Birdshot's library + TwistedSilicon: + - bugfix: Mech equipment is no longer broken in the UI for specific conditions. + grungussuss: + - sound: changed sounds for stun baton, stun prod, contractor baton and telescopic + baton + - code_imp: made it easier to modify turning on and turning off for batons + - sound: gloves have equip, drop and pickup sounds. + vinylspiders: + - bugfix: certain text input fields in the character setup menu will now update + properly when swapping character slots + - bugfix: fixed a race condition that was causing carpotoxin to cause liver damage + to felinids despite being immune +2024-09-10: + Ghommie: + - bugfix: beams now take into account the pixel offsets of both origin and target + more accurately.. + Rhials: + - bugfix: Modifies the mapping around the icebox cliffside, guaranteeing a bit more + openness. + SmArtKar: + - code_imp: Fixed multiple minor logic issues with code found by OpenDream's new + pragma + lbnesquik: + - rscadd: Add a capacity upgrade for janitorial cyborg light replacers +2024-09-11: + 00-Steven: + - bugfix: Fixed being buckled to medical/roller beds making you always use the headrest + as a footrest. + - bugfix: Fixed bedsheets/diskies/plushies/etc put on medical/roller beds facing + the wrong direction. + - bugfix: Fixed bedsheets/diskies/plushies/etc put on any bed facing the wrong direction + on some beds. + - image: Ian bedsheets actually have more than one direction, and so can be put + on beds properly. + Absolucy: + - rscadd: Tomato smudges on the floor are now considered valid to bloodcrawl into + and out of. + Ben10Omintrix: + - bugfix: deers now correctly emote with nearby friends + - bugfix: fixes being able to transform into polymorphed mobs by riding them + Bisar: + - balance: AIs piloting mechs no longer die if they hit the supermatter, nor do + they harmlessly snap back to their core. The shock now causes them to produce + a massive EMP. + - balance: Undid a balance change I did during the malf AI refactor. The doomsday + countdown will no longer stop if a malf AI dominates a mech. + - bugfix: Fixed a few bugs with AI shunting and AI mech death. + - bugfix: The binary conversion circuit component should work again. + - code_imp: The component also now supports representing negative numbers. + BumbertoEko: + - bugfix: Mimes french kisses now activate the sm + DaCoolBoss: + - bugfix: Added missing entries to server config file iceruinblacklist.txt + EnterTheJake: + - rscadd: New Heretic Side Knowledge, Void Prison. + - rscadd: New Void Spell Void Conduit has now replaced Void Blast. + - balance: Void Chill is now a stacking debuff, upon reaching the cap, makes the + target unable to heat up. + - balance: Aristocrat's way now grants immunity to ice and water slips on cold turfs. + - balance: ' Void Cloak now grants low pressure resistance when visible.' + - balance: Void Phase and Void pull have received a minor CD reduction. + - balance: Seeking Blade now applies a couple of stacks of void chill. + - balance: ' Void Heretic Ascension has been overhauled, it''s now protects the + heretic from projectiles, destroys windows and airlocks and applies void chills + to non heretics.' + - image: Void Blade and Void Chill have received some new sprites. + Ghommie: + - bugfix: Fixes mystery boxes breaking after a single use. + Melbert: + - qol: You can watch entertainment monitors from up to seven tiles away, though + you still need to be adjacent(or telekinetic, or a silicon) if you want to change + the channel. + - qol: The way examine looks has been updated. + - qol: A person's ID card no longer appears with a big icon on examine. You can + now click on their ID card (in the chat box) to get a bigger picture of it, + as well as information about them. + - refactor: Much of examine backend code has been refactored, report any odd looking + text. + - bugfix: Trash cannons can be filled with fuel and fired again + SmArtKar: + - bugfix: Fixed missing felinid ear preference + - bugfix: Fixed locker shoving closing and opening the locker thrice, sending its + victim to the backrooms + - bugfix: You no longer return to the station cuffed after being sacrificed by a + heretic + SuperNovaa41: + - bugfix: Fixes getting negative moodlet from fire while immune + SyncIt21: + - bugfix: Mediborg omnitool displays error message for wrong tool in surgery step + hack-wrench: + - rscadd: tape recorder now records speaker name + r3dj4ck0424: + - bugfix: The Syndicate have cleared up the static preventing them from sending + their battlecruisers to Birdshot Station. Watch out, crew! +2024-09-12: + LT3: + - qol: Quick repair suit sensors by hitting yourself with cable coil + - qol: Improved feedback for broken suit sensors + - bugfix: Ctrl+click on equipped uniforms enables suit sensors as expected + Melbert: + - bugfix: Med/sec hud examine + SmArtKar: + - bugfix: You can no longer pick up large parcels with evidence bags due to them + being normal-sized items + carlarctg: + - rscadd: Added an increasing chance for malfunction on repeated failed polling + for MM helmets +2024-09-13: + Bisar: + - bugfix: Fixed up a couple of Void Heretic rework descriptions. + EnterTheJake: + - rscadd: The Wraith Cloaking Module is now available in the uplink, costs 3 TC. + - code_imp: the saboteur handgun now uses a generic proc rather than a signal + Ghommie: + - balance: With enough preparation, good skills and equipment, you can manage to + skip the minigame phase of fishing by reducing the difficulty all the way down + to 0. + - balance: Fish electrogenesis now scales with size. + - rscadd: Pun Pun is a playable crewmember during Monkey Day (14 December). + - bugfix: Fixing fishing not caring whether a reward is limited or not. + Melbert: + - refactor: Storage and Tables are now a lower priority action, meaning some uses + of items on storage should work... better, now. Here's hoping at least, report + any oddities. + - refactor: 'Note: For an overwhelming majority of items, **combat mode** will attempt + to attack/insert into the target, while **non-combat-mode** will attempt to + use on a target. This means screwdrivering or emagging a MODsuit must be done + on non-combat-mode, as combat mode will simply put the screwdriver or emag into + its storage. Same applies to tables, though when in doubt, RMB may help (for + things which are also weapons, like mops).' + - refactor: Refactored escape pod storage, now they actually properly show as unlocked + on red alert and above. + Rhials: + - balance: Teleport blocker implants now prevent implantees from jaunting. + SmArtKar: + - bugfix: You no longer die from bloodloss after polymorphing back from an ahealed + simplemob + Xander3359: + - qol: Infiltrator mod hides your voice + - bugfix: Infiltrator suit now hides moth wings/antenna + - bugfix: hidden moth wings are no longer capable of flight +2024-09-14: + FlufflesTheDog: + - bugfix: Echolocation no longer breaks when witnessing a hologram + - bugfix: Echolocation no longer breaks when witnessing a fulton extraction + - bugfix: Humanoid NPCs are no longer invisible to echolocation users + JohnFulpWillard: + - rscadd: Lighters now use and require welding fuel to work, but can be used as + a welding tool for tasks that don't require much heat. + LT3: + - qol: Medical HUD and crew console can now detect broken (shorted out) suit sensors + needing repair + Oxotnak: + - rscadd: health analyzer now able to print scanned results via Ctrl-shift-click! + - qol: text from healthscan proc now use < br > + Rhials: + - bugfix: Removes some doubled-up railings on the wizard den/ragin' mages shuttle. + SmArtKar: + - code_imp: Minor obsession code cleanup + - admin: Admins can now see players who were previously obsessed but had been "cured" + from the trauma + TheBoondock: + - balance: double the melting point of hull and halves the thermal transfer so plasma + fire should lose less heat and harder to melt it + Timberpoes: + - bugfix: Having the Overflow Role set to On will properly ensure you get that role + at a High priority as intended by the game code. + - bugfix: Job selection is now a little bit more random. Fixes an unintentional + bias in random job assignment that could lead to feast-or-famine for roles where + everyone is assigned one job and nobody is assigned another job. + Vect0r2: + - qol: Adds an additional cable from birdshot SMES units + - qol: Adds two air pumps to birdshot science + - bugfix: bird engineering storage is now connected to the powernet + carlarctg: + - bugfix: The recharging relics now work on ethereal cells. + - balance: EMP now affects ethereal's hunger. + mc-oofert: + - rscadd: you may weld a crate + - code_imp: that one cool haunted donk outpost ruins tripwires and such use a subsystem + instead of globals. no real gameplay effect +2024-09-15: + Ben10Omintrix: + - bugfix: fixes basic AI that are supposed to pause during actions not pausing + Bisar: + - qol: The 'direction' circuit component now also returns the distance of its target. + - balance: Most circuit shells and the generic component and generic circuit have + had their size reduced. + - balance: The airlock circuit shell has had its size increased. + DaCoolBoss: + - rscadd: Adds the Syndicate Lab to the Icemoon ruin pool. + IndieanaJones: + - balance: Gorillas made from giving monkeys genetic damage are weaker than their + normal counterparts. + LT3: + - bugfix: Fixed a mislabelled corpse disposal in Icebox medbay, probably less dead + bodies showing up in cargo + - bugfix: Fixed certain clothing sending suit sensor data when it shouldn't be capable + SmArtKar: + - image: Updated glowing yellow extract sprite + - image: Tanks inside of tank holders have received new sprites + - image: Added a new sprite for mediborg surgical saws + - spellcheck: Fixed a typo in DeForest medical crates + - code_imp: Non-innate engraving blockers should work now (none as of now) + - balance: Humans that never had a player controlling them no longer count towards + changeling absorption counter + TheSmallBlue: + - qol: The z-level button got a refresh! It's now applied to more places and it + should be simpler to use. + Thunder12345: + - bugfix: 'Delta: The disposal unit in the curator''s office is now properly connected + to the disposals system.' + Zytolg: + - qol: The Birdshot Tool Storage has been resupplied. New tools are at the crews + displosal. +2024-09-16: + Ghommie: + - bugfix: Fishing with baits works again. + - bugfix: Water turfs from the crashed site ruin on lavaland are no longer named + "lavaland atmos". + - bugfix: Fixed morbid mobs (coroners) not enjoying room beauty and aquariums in + their own weird ways. + - rscadd: You an now release fish after catching it for a positive moodlet (or to + repopulate certain fishing spot with rare fish). + - bugfix: Bitrunning fishing spots no longer deplete limited loot from outside the + virtual reality. + - bugfix: The treasure chest from the beach is no longer anchored to the floor. + - bugfix: Fixed aquarium props not showing up inside the aquarium. + - admin: godmode is now a datum trait instead of a bitflag. This means the process + for toggling it is a little different now. + - rscadd: Whole, unprocessed fish is now edible. However it's pretty much reccomended + to grill or fry it for over 30 spess seconds before attempting to eat it. + - bugfix: germ-covered, dirty food no longer tries to infect you through contact. + - bugfix: Fixed the offsets of the chimp shotgun when held. + - qol: Add a screentip to shields and pillows' right-click function (shoving people). + - rscadd: Automated announcement systems now announce researched nodes to their + respective departments. You can stop this by either disabling the announcement + systems or by using a multitool on the circuitboard of the console you're researching + nodes from. + - bugfix: Fixed the force of swordfish and armored pikes + - rscadd: Gave the detective an ID that can flipped to look like an assistant ID. + - balance: The detective camera is now silent and doesn't flash. + Jewelry-x: + - spellcheck: fixed typos on heretic's "Lionhunter's Rifle" + vinylspiders: + - bugfix: fixes being able to use chuunibyou shouts while mute + - bugfix: fixed crafted donuts not getting any sprinkles, ever +2024-09-17: + Ghommie: + - bugfix: You once again need to right click to use tackling gloves. + Melbert: + - qol: You can dump bodybags (with people inside them) down disposals + MelokGleb: + - spellcheck: busser is now Busser (with big B) + Pickle-Coding: + - bugfix: Fixes high energy supermatter zaps arcing through an unusually high amount + of objects and ignoring grounding rods. + PowerfulBacon: + - rscadd: Implements the ability to lint for required neighbors in maplint. + - rscadd: Adds conditional linting rules in maplint, allowing a lint to apply only + if certain conditions are met (Variable is/isn't set, Variable is/isn't a value, + Variable matches a regex). + SmArtKar: + - refactor: Refactored how examines display item properties. A lot of them are now + displayed as tags that you can hover over to receive details about, like item + size, resistances and materials an object is made of. + - qol: Protection classes now better elaborate on thermal resistances of items, + displaying the exact temperatures they can protect you from. + - bugfix: You can now craft things on tiles with windoors and railings on them. + - qol: Added a small vertical margin to ID card image in new examine panel to ensure + that it doesn't collide with text + - bugfix: Your UI no longer breaks after being kidnapped by a contractor + - qol: Being kidnapped by a contractor no longer dumps all of your boxes and belts + - bugfix: Dismantling walls with plasma cutters works once more + Time-Green: + - bugfix: Fixes plasmamen having all external organ species preferences + vinylspiders: + - bugfix: smartfridges and drying racks will now display their examine text information + mutlilined +2024-09-18: + Bumtickley00: + - bugfix: Penlights can once again be used to look at people's eyes and mouth. + Ghommie: + - bugfix: examining fishing spots while wielding a rod (with sufficient skill) now + works. + - rscadd: Your current clothes and what chair you sit on can now influence the difficulty + of fishing minigames. Having a bare minimum of fishing skill will let you distinguish + which objects can help and which won't, so keep an eye out. Holding fishing + toolboxes, fish analyzers or fish catalogs can also help. + Jewelry-x: + - bugfix: fixes description for blob reagents + SmArtKar: + - bugfix: Changing ID card's trim now properly adjusts linked bank account's job, + allowing you to receive bounties for your new job + - bugfix: Fixed petrification not removing NOBLOOD trait after ending + - bugfix: Fixed veteran advisor not spawning on security officer landmarks + SyncIt21: + - bugfix: borgs can perform organ manipulation surgery again + deathrobotpunch: + - rscadd: Added new fishing category to games vendor +2024-09-19: + Bisar: + - bugfix: Xenomorph restrictions on items they can pick up have had their determining + logic made more _robust_. + - code_imp: The itempicky component (restricts what can be picked up via a whitelist) + can now, optionally, have a callback fed to it to determine cases of bypassing + that whitelist. + DaCoolBoss: + - spellcheck: Fixed typos in lead's description. + - spellcheck: Mice now love the taste of insulated electrical cables, not uninsulated + ones. + Ghommie: + - rscadd: You can now link fishing portal generators to other fishing spots with + a multitool. The number of fishing spots that can be linked at once and whether + the link can be activated from different z levels depends on the tier of the + stock parts it's built with. + - rscadd: You can pet fish while holding them. Be wary of petting aggressive fish. + Goat: + - bugfix: lockers and crates with no access requirements can now be renamed by anyone + Jewelry-x: + - bugfix: fixed a bug that allows autogrow to be turned on with no power. + - qol: made blob antag panel easier to read and more organized + - spellcheck: fixed a few typos in the blob panel + Kocma-san: + - bugfix: fixed disposal pipes on metastation, deltastation and icebox + SmArtKar: + - bugfix: Vore victims no longer get digested instantly when you evolve + - bugfix: Collars can no longer be used to null a pet's name + - bugfix: Snow bears are no longer impervious to all sources of damage + - bugfix: Cameras, living floors and ghost of poly no longer can be pushed around +2024-09-20: + EnterTheJake: + - balance: Security Flashbangs can no longer be primed for instant detonation. + Goat: + - balance: burn damage equal or under to ten will now damage your jumpsuit (does + not apply to internal temp damage) + - bugfix: radiation burns no longer damage your jumpsuit. + - code_imp: added a new var to applying damage to set if it should apply damage + to clothes. + Jewelry-x: + - bugfix: Lobby crew manifest has colour again + - qol: made it clearer that the expansion in space failed for blob instead of wildly + flailing at space. + LT3: + - bugfix: Fixed missing examine text for the yellow medical HUD border regarding + suit sensors + SmArtKar: + - spellcheck: Fixed broken text display in atmos devices in which you can insert + a tank + - admin: Atmos logging no longer lies about everyone swapping tanks in devices even + if they only inserted/removed one + SmArtKar, Kapu: + - bugfix: Agent ID cards no longer display broken text when you put non-letter symbols + as your name + SyncIt21: + - bugfix: apc breaker properly shuts off all power + Vect0r2: + - rscadd: Added the remote power AI disk + - code_imp: made it possible to easily add new AI upgrade disks + WebcomicArtist: + - rscadd: 'Added pipe-organ gun: a buildable object akin to trash cannon that takes + pipegun rounds, and shoots up to 8 off at once.' + - rscadd: Added The Canister Gatling, a rapid fire but non-destructive cannon for + skeleton pirates. Also Canister shot ammo. + - sound: Added sounds for the above guns. + - image: Added sprites for the guns as well. + - code_imp: Added a whole "mounted_gun" class that is basically cannons but you + aren't forced to use cannonballs as ammo and load them with gunpowder. + carlarctg: + - bugfix: Added a null check to mood, because it caused runtimes. Nonhumans have + mood, but they never initialize it, yet surgery mood assumes it is. + - bugfix: Removed unnecessary ishuman check in the organizer, allowing it to work + on xenomorphs and other theoretical carbons. + thegrb93: + - bugfix: Downstream species not getting internals they need when joining ERT +2024-09-21: + 00-Steven: + - bugfix: Changing a bank account's job to or from Curator actually changes whether + they get a cut from painting patronage. + - admin: VVediting a bank account's account_job actually updates what job the account + is associated with. Currently only matters for Curators. + - admin: VVediting a bank account's add_to_accounts actually removes it from or + adds it to the job to account associations. Currently only matters for Curators. + Bisar: + - balance: Meteor shielding is now purchasable at cargo even if it isn't the current + station goal. + DaCoolBoss: + - qol: '[Birdshot] Kitchen''s privacy shutters no longer cover parts of the cafeteria + table when open.' + - bugfix: '[Birdshot] Kitchen''s corridor windoor is now rotated correctly.' + Deadgebert: + - balance: Syndicate Rebar Bolt damage reduced to 45 from 55. + - balance: Hydrogen Bolt damage reduced to 35 from 55. + - balance: Syndicate Quiver reload is now interrupted by movement. + - balance: Syndicate Quiver reload increased to 1.2 seconds from 0.8 seconds. + - balance: Crossbow TC cost increased to 12 from 10. + - balance: Quiver size increased to normal from small. + FlufflesTheDog: + - bugfix: Icebox's virology airlock cycles properly again + Hardly3D: + - image: Resprited Short Bangs 2 & Double Buns + Iajret: + - bugfix: Mining mods can be charged with plasma once again + LT3: + - spellcheck: Fruit crate description now correctly warns that it contains lemons + Melbert: + - balance: Laser pointers have a 50% chance to fail when used on people wearing + eyepatches + - qol: Deceased and asleep humanoids will now close their eyes + MelokGleb: + - bugfix: doors in museum now work correctly + Rhials: + - bugfix: You can no longer backdoor security records using the Metastation Central + bitrunner domain. + SmArtKar: + - bugfix: Fixed wallmounts not being mountable by using a screwdriver on them + - bugfix: Fixed robotic revival surgery showing up for simplemobs + Xackii: + - bugfix: Gateway museum keycard now spawns in toilet properly. + carlarctg: + - bugfix: Legions borne from mimes can no longer talk + - spellcheck: Removes caps from many improper items + - qol: Adds shorthand alt-click for removing tanks from TTVs and adds context for + it + san7890: + - bugfix: A lot of instances where you could fill in 1024-character names (normal + limit is 42) have been patched out, along with too-long plaque names, too-long + descriptions, and more. +2024-09-22: + Ben10Omintrix: + - bugfix: botkeeper now displays bot's correct states! + Goat: + - bugfix: Virtual pirates were yelled at by the virtual syndicate and no longer + have virtual syndicate headsets. + GregariousJB: + - rscadd: 'Added three programs to cyborg PDAs: SiliConnect, AtmoZphere, and Crew + Manifest' + Kocma-san: + - bugfix: '"Visible to Network" in the fax interface is now displayed correctly' + LT3: + - bugfix: Fixed incomplete floodlights calling all light tubes broken + Likteer: + - bugfix: Plasmamen envirohelmets no longer erroneously apply a slowdown. + Rhials: + - bugfix: The Meta Central Virtual Domain now uses the proper ghost role spawner, + meaning you can't eavesdrop on syndie comms using their headset. + SyncIt21: + - bugfix: moving or rotating a mech will cancel its hydraulic clamp action + carlarctg: + - qol: Durathread vests now fit botany items as well as armor items + - code_imp: Botany suits now all inherit the same list + - rscadd: MetaStation's Drone Bay has been moved to be basically inside the normal + cargo bay. + - rscadd: 'To make room for it, the security cargo post was moved to the east of + the mailing room:' + - rscadd: The drone bay spot in maintenance has been cleared out by a gang of rowdy + assistants, and turned into a drug den. +2024-09-23: + Bisar: + - balance: Changelings are now able to respec multiple times if they have absorbed + multiple humanoids, instead of it being toggled on if it was off during their + most recent absorb. + - balance: Last Resort is now an innate ability for changelings. + - code_imp: Added a little counter and a tgui function for displaying how many absorbs + lings have in their belly to spend for readaptions! + EnterTheJake: + - balance: Void Conduit has less range and no longer ignores Line of Sight. + Ghommie: + - rscadd: You can now fish new, tasty treats by the station deep fryers. + - rscadd: You can now grow fish inside an aquarium by feeding them regularly (at + 50% hunger for maximum growth). + - rscadd: Added the evolution for pikes to armored pikes. + - rscadd: Added more customizable options to PDA virtual pets, which can be unlocked + by completing achievements. + - rscadd: Added a fat dart that can be rarely found in hacked cigarette vending + machines. + - image: added icon states for linkable fishing spots in the fish portal gen radial + menu. + - balance: The fishing skill now positively affects fishing rod cast range and reeling + objects outside of the minigame. Reeling objects also provides a pitiable amount + of fishing experience. + - balance: High fishing skill now reduces experience gained from low difficulty + fishing spots. + - sound: Removed noise from reeling sounds. + Likteer: + - rscdel: Intentional screaming has been unmuted. Now has a 5s cooldown instead. + Sealed101: + - spellcheck: fixed examine and balloon alert text for boulder refining machinery + SmArtKar: + - bugfix: Emergency shuttle console no longer reopens its UI on its own + - bugfix: Mapped in express supply consoles now work instead of displaying an empty + UI. + - bugfix: Emagged express supply consoles now display updated prices. + - refactor: Rewrote a large chunk of express supply console code + - balance: Express supply consoles now drop their upgrade disk upon being deconstructed, + and emagged consoles now will try to send at least one package to the station + if cargo budget doesn't have enough funds for all 5. + - bugfix: Fixed infective components not cleaning up disease datums after themselves + grungussuss: + - sound: pruned higher frequencies from the resonant shriek ability sound, making + it lighter on the ears + - sound: lavaland magma ambience has been changed +2024-09-24: + Absolucy: + - bugfix: Fixed the Living Heart ritual deleting your old heart when replacing it + instead of having it dramatically burst out of your chest like it should. + - qol: The Living Heart ritual will now work if you don't have one at all for some + reason, in the same way that'd you use an organic heart in the ritual to replace + a cybernetic heart. + - qol: The Living Heart ritual, when putting a new heart into your chest, will now + heal the heart enough to be just under the "severe damage" threshold, if needed. + theselfish: + - bugfix: The Beer Sixpack no longer magically turns into bottles. +2024-09-25: + 00-Steven: + - bugfix: The greeting message imaginary friends get upon becoming one actually + includes the owner's name, instead of displaying nothing where it should've + been. + Jewelry-x: + - bugfix: fixed link for the rules button + Sealed101: + - bugfix: gelatinous cubes now puke out their consume victim when said victim dies, + not when it accumulates 200 brute damage (not all mobs can get damaged to that + point) + - qol: gelatinous cube's Consume action can now be used to eject the currently consumed + mob + - bugfix: "fixed gelatinous cube's consume attempt not showing the victim's name\ + \ properly (You start attempting to devour \_!)" + SmArtKar: + - bugfix: Storage UI should no longer (not so much) randomly disappear, hooray! + grungussuss: + - refactor: the sound folder in the source code has been reorganized, please report + any oddities with sounds playing or not playing + - server: lobby music has been repathed to sound/music/lobby_music + imedial: + - bugfix: fixes soapbox being given to non-mobs +2024-09-26: + 00-Steven: + - bugfix: Fixed cat ears not layering properly. + - bugfix: Husked bodies show their blood with the right colours in photographs. + Bisar: + - bugfix: Fixes augs not being able to heal with cables if they're naked or going + commando. + Jewelry-x: + - rscadd: Added ability to turn broadcast microphone on or off + Melbert: + - qol: Health Analyzer output has been reworked to be less "it takes up my entire + chat box", report any oddities or missing information + Skilets: + - image: Resprited the experimentor. + SmArtKar: + - bugfix: Kilo whiteship no longer has varedited turrets in it + TheBoondock: + - bugfix: fixed lava proofed clothing from xenobio potion being damaged from fire + grungussus: + - sound: audible emotes share the same cooldown +2024-09-27: + 00-Steven: + - bugfix: Fixed two broken spans, primarily used in traitor panel and some basic + bot stuff. + - admin: Traitor panel text is no longer bright red when an antag is selected, and + remove button is no longer blocked. + EnterTheJake: + - bugfix: Mansus Grasp can now properly interact with non living things. + - code_imp: proc/on_hand_hit and secondary have better return values. + Ghommie: + - bugfix: The Pun Pun job trait doesn't leave behind a fake (or is it?) Pun Pun. + - bugfix: Fixed water overlays showing on toilets facing directions other than SOUTH + (down). + Iamgoofball: + - bugfix: Removes particles from Slimed and Slime Food status effects to fix fps + lag in xenobio + Jewelry-x: + - bugfix: fixed hydroponics tray not updating new crop sprite properly + SmArtKar: + - rscadd: You can now craft tether anchors, which can be secured with a wrench and + attached to with right click. They won't let you drift into space and you can + adjust tether length/cut it via lmb/rmb/ctrl click on the wire. + - rscadd: MOD tethers now remotely place and connect to tether anchors instead of + throwing you at where they landed. + - balance: MOD tethers can now be used in gravity + - balance: Jetpacks are now inertia-based. + - balance: Guns can accelerate you significantly in zero-g. + - balance: All jetpacks now give you equal speed buff, however advanced MOD ion + jets and captain's jetpack have higher acceleration/deceleration values. + - refactor: Refactored zero-g movement to be inertia-based and utilize angles instead + of directions. + Tattle: + - balance: insulated gloves no longer have the chunky fingers trait + ZeWaka: + - bugfix: TGUI windows now flash less when opening new windows. + carlarctg: + - qol: you can now use the toy codex cicatrix as base for the codex ritual + grungussuss: + - sound: improved click.ogg + - bugfix: thrown items now respect the vary variable when making drop sounds. + - sound: lead pipe now only makes an obnoxious drop sound when thrown., reduced + its sound by 10db + mc-oofert: + - bugfix: fixed password paper in museum + oranges: + - rscadd: Cardboard rolls and Wrapping paper can now be used to hit people on the + head with +2024-09-28: + Cheshify: + - balance: laser muskets have been rebalanced + - balance: crank weapons can be charged while moving + Goat: + - bugfix: Removes a random bookcase that was in the holdout bunker holodeck simulation + Melbert: + - rscdel: Advanced Health Analyzers can no longer be used to determine if a body + is faking death (like a changeling) + Rhials: + - bugfix: Replaces the unusable blink spell on the Necromancer deathmatch kit with + a nether portal summon. + Soupfgc: + - spellcheck: Fixed closet typos + SyncIt21: + - bugfix: Debug chem synthesizer now has temperature control for adding reagents + grungussuss: + - sound: the volume of the nuclear fission explosive have been reduced +2024-09-29: + 00-Steven: + - bugfix: Fixed trims which did have an associated job but whose assignment didn't + match a job title causing null jobs to be assigned to accounts. This fixes departmental + security officers not being able to purchase things from the security vendors. + - qol: Imaginary friend smite ghost poll actually lets you jump to the target and + shows their name. + - admin: Imaginary friend smite now works with build mode. + - admin: The imaginary friend smite configuration menus have been changed slightly. + - bugfix: Imaginary friends can now hear their host wherever they are. + - balance: The pAI digital messenger software now includes the NTNRC client. + - rscadd: You can now see people whispering, even if you cannot hear what they're + saying, unless you are blind (obviously). The speaker wearing something that + covers their mouth, being invisible, or being inside of something counteracts + this. + ArcaneMusic: + - bugfix: Artifact boulders should keep their alien icon even after a first round + of processing. + - bugfix: Boulders are less likely to exist with zero materials after processing. + - bugfix: Boulders should be slightly less laggy on conveyor belts. + - bugfix: Grammar of refinery/smeltery examine is corrected. + Ben10Omintrix: + - bugfix: fixes raptors retaliating against each other and their owners + FlufflesTheDog: + - bugfix: The automated announcement system once more announces new arrivals to + the station. + Jewelry-x: + - bugfix: fix wiki manuals by making them open wiki page on browser + Sealed101: + - bugfix: A joint effort of Gorlex Marauders and MI13 tech support teams has finally + managed to center the Syndicate Infiltrator shuttle's preview on the navigation + console. Nuclear Ops teams sector-wide, rejoice! + SmArtKar: + - bugfix: Added missing venue prices for certain foods and reagents + - bugfix: Mindswap can no longer be used inside of pipes + - bugfix: Players no longer can randomly get semi-permanently offset from being + shoved + SyncIt21: + - bugfix: Fixes ethereal APC drain/charge attack + carlarctg: + - rscadd: Altered the blood loss on teleportation. Instead of silently always losing + ten blood, you now lose ~15 25% of the time, fitting in with the teleporter's + random design. In practice this usually evens out, but the immediate side-effects + when it does happen will be much more noticeable. The rest of the time you'll + still lose 5. + - qol: Improved the visible effects when using the teleporter. On teleporting, it + causes a tiny blood red wave at the destination, which is slightly larger and + more vibrant red if you lose blood. Telefragging someone now throws them a random + turf away alongside the stun. + - bugfix: Fixed NOBLOOD check missing from non-emergency teleport bloodloss. + timothymtorres: + - bugfix: Fix air alarms warning message to use pressure & temp settings + - bugfix: Fix air alarm helper to ignore gas when appropriate + - bugfix: Fix air alarms being stuck and not updating their icons. + - bugfix: Fix Meta's medical freezer air alarm to not trigger on cold temps. Fix + missing atmos alarm in Wawa kitchen coldroom. + - code_imp: Add missing signal to reagent dispenser RMB interactions. + - sound: Fix missing pour sounds from reagent dispensers + - bugfix: Fix air alarm not checking missing gases + vinylspiders: + - bugfix: fixes pulsing tumor failing to spawn the elite if no ghosts respond to + the poll and leaving you in a bugged state, and possibly other related issues +2024-09-30: + 00-Steven: + - bugfix: The trait that allows you to see the type of thing that's biting when + fishing actually shows it instead of just saying "fish!!!" for everything. + Ben10Omintrix: + - bugfix: hygeinebots are better at chasing unclean people + Ghommie: + - bugfix: Fixes fishing tips (from fishing toolboxes) being empty. + - bugfix: Fixed a series of small issues with bait preferences, fish growth, a small + nit with the hunger bar in the fish analyzer UI, and fishing challenges aborting + if double-clicking during the waiting phase. + - balance: Fishing lures are a smidge easier to use. Fryish now takes less time + to grow up. + Hardly: + - image: Resprited face scarf to be more GAGS friendly + Melbert: + - qol: Light Eater now displays a quick attack animation when quenching un-attackable + objects (like lamps, flashlights) + - bugfix: Light Eater animation for attacking light fixtures has been restored + SmArtKar: + - admin: Fixed VV DNA infusion tool + ZephyrTFA: + - refactor: Map Votes are now carried over between rounds. When a map vote is actually + a contest, the winning map will have its votes reset. + carlarctg: + - balance: '- Uncomplicated the Ragnarok arena. The center area''s river has been + muddied over, the bonfires have been made dense, the ants on the ground everywhere + have been removed. The Warrior and Scribe have had their loadouts simplified.' + - qol: '- The Rat''var Apostate''s beakers are now named so people other than me + can get the joke.' + - bugfix: '- Unbreakable lattices are now actually unbreakable and can''t be snipped + into nothingness.' + - bugfix: '- Added true invis walls to the edges of Lattice Battles. Moved spare + rods to the pockets.' + - bugfix: '- Species Warfare: Added no_smoothing to the funny, so it''s actually + hidden now.' + krookodilehunter: + - rscadd: Added more flowers to loadouts + mc-oofert: + - rscadd: added the manufacturing smelter,router,sorter,crafter,lathe,crusher,unloader + tonty: + - code_imp: made some code relating to the world's icon size more readable + xXPawnStarrXx: + - bugfix: fixed cyborg upgrades deleting the bonesetter and giving no alternative. +2024-09-08: + LT3: + - balance: Increased PDA default battery capacity + SkyratBot: + - bugfix: Fixed the taskbar/menu bar icon showing the virgin orange byond icon instead + of the chad blue ss13 icon. + diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml new file mode 100644 index 0000000000000..b631c7f65a8e1 --- /dev/null +++ b/html/changelogs/archive/2024-10.yml @@ -0,0 +1,446 @@ +2024-10-01: + DaCoolBoss: + - balance: Donksoft vendors now stock slightly more items, slightly less of each + item, and has increased prices across the board. +2024-10-02: + EEASAS: + - bugfix: fixes multiple issues in metastation cargo + Ghommie: + - bugfix: Items that adjust fishing difficulty no longer have misleading examine + tips. + Hardly: + - image: Resprited kitsune masks + - image: Kitsune masks are now adjustable. Use it in-hand! + Jewelry-x: + - qol: you only need to wait 1 second if you can move into that z level instead + of most cases + - code_imp: mob/verb/up() and mob/verb/down() cleanup + grungus: + - rscadd: cat mobs can *meow and *purr + - sound: sound for meow and purr emotes + - code_imp: added support for passing emotes into the pet_bonus element +2024-10-03: + Ben10Omintrix: + - bugfix: goldgrub AI now correctly digs away from people + Dmeto: + - bugfix: Printing factory machine boards now results in their respective board + and not the assembled machine. + - bugfix: Sorter machines now use their respective board. + Hatterhat: + - rscadd: Portable power storage units and power connectors! Under the same research + node as regular power storage units, and not mapped in anywhere. Build a connector + and portable unit, wire the connector like a regular SMES, wrench the portable + unit onto the connector, unwrench as needed. + - code_imp: SMES attackby was broken up into several tool_acts instead of a big + attackby chain. If something stops working in regards to using tools on SMESes, + please file a bug report. + Time-Green: + - rscadd: Adds an assistant and hitchiker shuttle event, replenishing the crew mid + flight! + - admin: Adds two intern wave shuttle events + - code_imp: You can now supply shuttle events with outfits! + - code_imp: You can now shoot projectiles with the shuttle events! + - bugfix: Fixes projectiles bugging out when fired in shuttle transit space + - bugfix: Fixes admin forced shuttle events not activating when added mid transit + carlarctg: + - bugfix: fixed chappies being able to buy an unintended nullrod type + grungussuss: + - bugfix: fixed footsteps counting twice on diagonal movement +2024-10-21: + Adrian16199: + - rscadd: HFZ can have digitigrade legs now. + Aroliacue: + - balance: Increased Shadekin bodypart burn damage received from 10% to 20% + - spellcheck: Fixed some desc typos in shadekin.dm + - bugfix: Removed doubleup eyes organ in shadekin.dm + Arturlang: + - refactor: Heavily refactors how bloodsucker powers function. + - refactor: Tremere powers no longer have subtypes for each level. + - rscadd: Completely redoes how bloodsucker ability descriptions, both the longer + antag panel and the action button hover over, they will actually tell you actual + values that the game itself uses for damage, cooldowns, and effect durations + - balance: Tremere powers can now level up as far as you want. + - balance: Mesmerize is heavily reworked, now it no longer forces both parties to + stand still for it to work, but it is obvious to the victim when used, however + the victim is muted for the duration of the spool up, and will stun and mute + normally if the do_after completes. + - rscadd: 'Mesmerize now has a secondary that allows you to mute and confuse your + victim that happens on a right-click, + + dominate, the tremere''s version instead knockdowns.' + - rscadd: Tremere's dominate now has a visual timer for temporary vassals, visible + only to the master's vassals and the master themselves. + - balance: Tremere's dominate now only requires level 2 to create temporary vassals, + but the duration now scales with the level. It now requires the potential vassal + to have more than 336 blood, and will use it all up once the duration ends, + effectively making it only usable once per person. + - balance: All tremere powers can now level up past level 4 + - balance: Thaumaturgy is heavily reworked, it now has a charge system, and while + the projectile deal less damage, you can shoot a lot more of them, and the projectiles + will seek towards any non-vassal mob near where you cast it. + - refactor: Separates bloodsucker ability bitfields and action bitfields to avoid + overriding eachother + - balance: Bloodsuckers going into torpor outside of coffins will always die, but + will wake out of torpor at 20% maxhealth(not counting critical health) + - balance: A coffin being opened during sol will wake you up, given you are LITERALL + BURNING UN-ALIVE. + - balance: brawn costs 10 blood instead of 8, and has a cooldown of 12 seconds, + instead of 9 + - balance: fortitude now has a cooldown of 20 seconds, from 8, also you will not + be able to heal any brute or burn damage while it is active, the scaling of + the damage resist is also halved, no longer is maximum resistance of 0.3 for + brute, 0.5 for burn achieved at level 4, now it is reached at level 8, changing + by 0.05 per ability level + - balance: haste costs 9 blood instead of 6, and has a cooldown of 15 seconds from + 12 + - balance: The candelabrum is no longer as tough + - bugfix: candelabrum now turns off when unsecured + - balance: Bloodsucker no longer level from sol when they reach level 4 + - balance: Ventrue now can only use blood drunk from sentients to level up vassals + if they wish to level themselves up. + - refactor: Refactors how ventrue vassalizing is handled, no longer copying most + of level up code for it. + - balance: Silver stakes no longer gib/dust sleepy bloodsuckers, instead they remove + hearts, which leaves bloodsuckers power-less + - balance: Bloodsuckers are no longer highly wound resistant, but their coffins + will now heal all wounds + - bugfix: Should fix the issue with bloodsucker bleeding staying active forever + - balance: The range of haste is now 5 tiles. + - bugfix: Malkavians will now actually get a notification and a objective once a + bloodsucker breaks the masquarade + - balance: Drinking from ghouls/vassals as a bloodsucker is no longer is 1/4th less + effective than drinking from non ghouls/vassals + - bugfix: Bloodsuckers now get blood thickening points + Azarak (code), ReturnToZender (bugfixing): + - rscadd: New players to a department now show properly as interns. + Bangle: + - spellcheck: Added some alt titles + Boviro: + - rscadd: Re-adds gun safeties + - rscadd: Guns with enabled safeties will disable their safeties if you attempt + to fire with it on. + BurgerBB: + - balance: Overhauls requirements for Anomaly Refinement, and removes some limits + and implements some more. + - balance: Changeling Zombie Toxins are capped when it reaches the curable stage. + - balance: Changeling Zombie patients will deal damage to the cryotube if placed + inside it while activated. + - balance: Spaceacillin can be used to negate Changeling Zombie toxins damage, and + half the cure threshold of curing changeling zombies. Note that using Spaceacillin + too early in a patient, or too often, can result in the virus gaining an immunity + to it. + - balance: As a living creature, it is no longer possible to go 2 times faster than + base movement speed. Base movement speed is the default running speed of mobs, + without any buffs. + - bugfix: Fixes some moonstation issues. + - bugfix: Fixes some Moonstation bugs. + - bugfix: Fixes even more moonstation issues. + - bugfix: Fixes the bug where there are no possible maps to be voted for because + all the lowpop maps have already been played recently. + - bugfix: Fixes Moonstation Lighting being too dark. + - balance: Significantly Boosts the chances of the Wizardly Die of Fate event triggering. + The event now has a 20% chance not to announce the existence of a Wizardly Die + of Fate + - rscadd: People who sign up roundstart get triple the starting cash compared to + latejoiners. + - balance: Reworks (mostly) and renames all the storytellers and improves the code. + - balance: Reduces RBMK2 temperature gain based on matter bin tier + - rscadd: Predictable Chaos now has 50% more antagonists. + - rscdel: Disables "The Bomb" storyteller from being votable because engineering + cryos every time it's voted. + - bugfix: Fixes a typo in map voting code that prevented the fallback "no maps to + vote for" code to work. + - bugfix: Fixes Moonstation Library Wiring and Disposal Pipe + - rscdel: The mold event can no longer be triggered by events except by admin intervention. + - balance: Makes Space Dragons immune to toxin + oxy damage because I saw a Space + Dragon die to simplemobs on Moonstation Once + - bugfix: Fixes missing Moon Station wire that caused Engineering (just the area + outside the SM) to not be connected to the grid. + - rscdel: Removes the Mannequin in Moonstation engineering because a shaft miner + died to it 5 times. + - balance: Buffs Xeno Weed temperature survivability in hotter environments. It + was increased from 300K to 350K, which is only slightly higher than Moon Station's + external temperature of 347.65K. + - balance: Heretic Transmutation Runes can no longer have Fingerprints. + Doomtail: + - rscadd: Added twisted, twisted long, wicked, and inari hairstyles. + - rscadd: Added cervine snout. + - rscadd: Added naja hood frill. + EnterTheJake: + - balance: Syndicate quiver is now small sized instead of Bulky. + FeudeyTF: + - bugfix: fixed removing last case + FlufflesTheDog (code), ReturnToZender (port): + - bugfix: A restraining order has been placed on medibots on behalf of synthetic + crew members due to reports of harassment. + IgiariValkyr: + - rscadd: Lizard Gas can actually be staffed now! + KathrinBailey: + - rscadd: Loincloths from Sandstorm. + - bugfix: Jean shorts/skirt no longer covers legs and chest. + KazooBard: + - rscadd: The blueshield now can select "Henchman" as their title + - rscadd: Added the card reader to the autolathe's designs + KeRSedChaplain: + - rscadd: Ports the Divine Lightblade nullrod from citadel + Krypandenej: + - rscadd: Added Leary's Delight cigs, a xeno action figure, and a pale zippo to + loadout + LT3: + - code_imp: Holy Water lobotomies are now a standalone surgery operation named Blessed + Lobotomy + - bugfix: Feline traits will give purr speech modifier + - code_imp: Tajaran tongue moved from Feline Traits quirk to augments menu + - bugfix: Fixed telecoms specialist HUD icon + - admin: Storyteller backend updates + - rscdel: Disabled sandstorm random event + - code_imp: Boykissers resume boy kissing! Kiss emote no longer causes a progress + bar after using + - balance: Syndie/death kiss projectiles have a 1.6 second cooldown + - code_imp: Modularised and updated scrubber overflow event + - qol: New vote reminder notification, enabled for storyteller votes + - image: Added a moth to your taskbar + - rscdel: No more eigenstate in scrubber overflows + - code_imp: Radiation storm warning only sent to players who are in an area without + radiation protection + - balance: Occupied dorms are protected from radiation storms and scrubbers + - qol: Gravity generator failures/power restores are now less announcement and sound + spammy + - code_imp: Bubber medsecHUD replaced with TG version + - rscadd: Medic labcoat/vest added to Orderly garment bag + - balance: Morgue surgery tray now comes with an autopsy scanner + LT3, vinylspiders, LordVoidron: + - rscadd: Private (subtle) PDA messaging by adding "#" to start of message + - qol: Added button to NTOS messenger TGUI to toggle private messaging + - admin: Public logging for non-subtle PDA messages + Majkl-J: + - rscdel: Removed broken unmaintained crusher code + - balance: Sec no longer spawn in with fully loaded belts as it was an old undocumented + change that introduced a bug + - code_imp: Makes the empty synth body spawn logic run faster + - bugfix: Harpy wings now display correctly + - bugfix: Basic Medipens can be refilled again. + - rscadd: Syndicate maid kit, a kit containing armored syndicate maid clothing + - bugfix: Cargo shelves now drop crates upon being destroyed + - bugfix: Moth climb works again + - rscadd: Added Lone infiltrator ghost midround + - rscadd: Added Malf AI midround + - rscdel: Removes predictable chaos as all tellers now use its main gimmick as a + baseline + - qol: Storyteller votes now prevent a constant voting streak of the same type of + tellers + - balance: All storytellers now roll antags more often, but in smaller numbers per + roll + - balance: Clown storyteller no longer cares about event weights and just does whatever + rng decides + - balance: Meteors can no longer run repeatedly in a single round + - balance: Makes ghost roles actually roll somewhat frequently + - bugfix: Fixed a few bugs with storytellers, namely the tracks sometimes going + into negatives, and voidwalker running on planet maps + - refactor: Refactored how storytellers handle tracks to be easier to code with + - bugfix: Storyteller now actually rolls stuff correctly and in respect to the antag + cap + - qol: The tank manipulator now gives feedback about what's in it + Mitryll: + - balance: Set Heretic sacrifice target amount to 5-6. + - rscadd: Added *squeal emote + - rscadd: Added *tailthump emote + - sound: Added sounds for *squeal and *tailthump + Nerev4r (Code), ReturnToZender (port): + - rscadd: Moths now get a dash at the cost of stamina. You can use at most 3 dashes + before entering stamcrit. + - rscadd: Flutter emote for moths + Odairu: + - rscadd: Darkness regen, nightvision, nobreath, flash vulnerability, movespeed + decrease in light, no stamina regen in light + - rscadd: antag names + - rscadd: Adds sec hailer + - refactor: modularizes a few things + - balance: nerfs heretics ability to ascend + - code_imp: changed basic sec hud into a trait + - bugfix: fixed abductors in deathmatch talking to station abductors + - bugfix: bows properly apply damage as ashwalker/icecat + - rscadd: adds silicon manager pda app + - bugfix: Lima AI sat + - bugfix: maps choosing themselves + - bugfix: custom species lore properly displays + - bugfix: AP mod has digisprites now and applies them properly. + - image: filled in the nullspace for shadekin tail BEHIND icons + - qol: ghosts can vote on transfers 2 - infinity + - balance: removed slipstick from uplink + - rscadd: hypno lipstick + - bugfix: neck gaiter no longer has sec radio + - bugfix: TK no longer teleports to stripper pole + - qol: AIs can open doors without looking + Redrover1760: + - balance: Reverts 9x25mm and 9x25mm AP skyrat nerf to tg values. + ReturnToZender: + - rscadd: You can now control what your name is, when you spawn as an ERT. + - balance: NTC no longer gets Stardust shells, they get only their laser. + - balance: Re-orders character directory sorting based on what really matters. + - rscdel: The Lungbuster now no longer calls forth hell's sirens. + ReturnToZender (code): + - rscadd: Anime eye sprites + - rscadd: The futuristic security helmet is now properly added to the multisec vendor, + and the loadout along with the patrol cap. + ReturnToZender (code), APWill (Sprites): + - rscadd: Deer snout to the character creator + Shadow-Quill: + - spellcheck: Fixed a typo in the message that appeared when someone with the Well-Trained + perk examined someone with the Dominant Aura trait. + - balance: Oppressive Force Relocation Medicells no longer require bluespace extracts + to become functional. + ShadowLarkens: + - rscadd: Mechanical Vore + - bugfix: Claustrophobia no longer triggers inside vore bellies. + - bugfix: Delete button on belly messages no longer has a rendering error. + Shroopy: + - bugfix: Added a missing period to law 2 of the NT OS Safeguard V1.0 lawset. + StrangeWeirdKitten: + - balance: Emagging a borg will now scramble its codes plus opening the cover has + a delay + - qol: Divides Jukebox volume by 2 + - rscadd: Holofans and Pipescrubbers to Moon and Box's ordnance + - rscadd: Unbolted doors to the ordnance freeze chambers + - bugfix: Missing power wire to QM's office on Box + - rscdel: Smart Organ storage in the middle of Box' medbay + Swiftfeather: + - balance: Halves the time for bluespace crystal use + - admin: Red Alert ERT no longer has pulse weapons. + - bugfix: Can no longer rapid fire kisses, you boykisser. + - balance: Reduced heretic weighting. + - rscdel: Removed hostile pitbull crates. + - balance: Reduced wound chance multiplication when injured. + Szyszkrzyneczka: + - code_imp: lore updates + species lore is now a list of strings instead of a string + TealSeer: + - rscdel: Remove air alarm in Space from BoxStation. + grungussuss: + - sound: fish sounds are louder + nevimer: + - refactor: Vetted system is now using SQL and improved. + - bugfix: airbags are no longer haunted + - rscadd: Centralsmith Donor Item + nikothedude: + - rscadd: '*esigh, for exasperated sighing' + pixelkitty286: + - rscadd: cat like grace to lightweight chassis and small quad borg walking sounds + - image: catborg death sprites + - code_imp: changed how cyborgs get their walking sounds. + - rscadd: cut down omitool a small upgrade for the scanner + - qol: made research borgs actually able to revive and work on synths + - balance: research cyborg grippers + - bugfix: research cyborgs not being able to repair synths. research cyborgs being + able to pick up the nuke disk (oops lol). + plsleavemealon: + - balance: lessened ethereal revive penalty + - rscdel: Removed the agender trait from ethereals. + - balance: rebalanced (buffed) ethereal's interior power cell + - rscadd: Add new argument to cyborg rechargers, allowing an optional limit to be + placed upon amount charged. + - rscadd: Add new entry within ethereal stomach taking advantage of the new argument + - balance: rebalanced entombed modsuit starting storage + - rscadd: Makes the numb quirk actually numb you + - bugfix: lets zombies be gendered + projectkepler-ru: + - rscadd: woodstock shotgun now buyable + - bugfix: any remaining import gun being buyable + - balance: riot shotgun now fire faster + - balance: renoster now hold 9 + 1 shot + - balance: casing pouch bumped to hold 14 shot + - code_imp: moved the infanteria rifle crate down to emag contraband + - code_imp: removed unnecessary override as changes were patched upstream + - rscadd: disabler smg to sec medic + - bugfix: erronously the c10 speedloader was normal sized + - rscadd: you can now buy sidearm crate again + shayoki: + - rscadd: Five more new antler types. + - rscadd: Added fitness equipment to Box Station's Fitness Room. + - rscadd: Added a basic megacell in Boxstation's EVA Storage room inside the inducer + storage. + - rscadd: Added two secure lockers in Boxstation's Brig evidence room. + - rscdel: Removed Borg Burger in Boxstation's robotics. + - bugfix: Realigned the airlock and windows for Boxstation's Blueshield office to + match the Vacant Office nearby it. + - bugfix: Fixed an open wall connecting to Boxstation's Garden and maints. + - spellcheck: fixed a crate's name in Boxstation's test firing range. + shellspeed1: + - rscadd: Cargo Companies are now available to offstation factions + - rscadd: Tarkon now has a cargo setup available to them + - bugfix: Made interdyne exofab circuit board actually work and made the exofab + drop the right board + - rscadd: Thanks to the effort of syndicate engineers, you can now reproduce the + interdyne cargo equipment as well as firing pins and headsets complete with + comms key! Don't let it get stolen by NT! + sippykot: + - rscadd: you can buy the surgical medkit in cargo now + thegrb93: + - bugfix: Fix runtimes and bugs with using lewd toys on cyborgs + theselfish: + - rscdel: Duplicate Butler title is gone. + - rscdel: Deleted duplicate Language files. + - rscadd: Adds unused Red Pauldrons to Sec Vendor, as well as the Sec Med beret + and Armadyne belts. + - rscdel: Removed storage from (nearly) all the Bunny Suits + - spellcheck: Various Bloodsucker things have been renamed after the Inconnu paid + a visit. + - bugfix: The Neck Gaiter no longer hides glasses. + - rscadd: Recent events have caused an insane amount of plastic medals to flood + the market. +2024-10-25: + ChromeFoxxity: + - rscadd: Added the Vortex-Class Luxury Evacuation Shuttle. + Iamgoofball: + - rscadd: Adds 20 more slots for free players and up to 100 slots for BYOND members + LT3: + - balance: Balanced company imports DeForest Medical section + Shadow-Quill: + - bugfix: Headpats show a feedback message again. + StrangeWeirdKitten: + - rscadd: Radiation Storms will now irradiate the station again if you don't set + the shields up. + - rscdel: Removes blueshift entirely from the code. + TealSeer: + - bugfix: fixed department head arrival radio messages missing their job title + nikothedude: + - balance: Synth premium medkits no longer have a premium spray, instead having + a plasmide spray. + - balance: Plasmide now metabolizes slower + thegrb93: + - image: Vox helmet sprites now using improved vox helmet sprites + xPokee: + - bugfix: fixed the Big ears being removed, presumably by accident + xXPawnStarrXx: + - qol: added two extra tools to the surgical toolset; Bloodfilter and bonesetter. + - bugfix: added combitool to deforest's cargo orders, I forgot to before. +2024-10-26: + Ben10Omintrix: + - refactor: basic mob AI interactions has been refactored. please report any bugs + LT3: + - qol: Received subtle PDA messages are labelled subtle in the text log + ReturnToZender: + - balance: Changeling shrieks now have a 10 second cooldown. + nikothedude: + - balance: Synth blunt T3 now requires a T1 burn wound to mold + - balance: Synth blunt T3 heating step now gives a T1 burn wound + - balance: Synth blunt T3 heating now takes 3 secs + - balance: Synth electrical damage is now much more treatable with wires + - bugfix: Nagas no longer play human footsteps +2024-10-27: + '@Majkl-J, @Wolf-751': + - bugfix: Brings back the red berserker suit digi sprites, originally by Erol509 + - image: Adds digi sprites to marked one's berserker suit (By Wolf-751) + LT3: + - bugfix: APCs again trigger lighting channel before equipment channel + - rscadd: Halloween candy meteors + - bugfix: Halloween, Easter, and Valentines Day events correctly trigger at roundstart + - image: More Halloween holiday tile patterns + - sound: Reduced length of meteor alert warning sound + - balance: Adjusted warning time for meteor waves depending on intensity + - image: Fixed icon state for upgraded power cell + Shadow-Quill: + - bugfix: SSD timer now visible once more. + - bugfix: Dauntless vendors no longer require money to use, as before. + YakumoChen: + - rscdel: Nanotrasen has removed the Galactic Minerals Market from their Moonstation + branch due to repeated market crashing by crew. diff --git a/html/statbrowser.css b/html/statbrowser.css index cd1d63bf7c060..d8c0f92b626f4 100644 --- a/html/statbrowser.css +++ b/html/statbrowser.css @@ -16,7 +16,7 @@ a:hover { } h3 { - margin: 0 -0.5em 0.25em; + margin: 0 -0.5em 0.5em; padding: 1em 0.66em 0.5em; border-bottom: 0.1667em solid; } @@ -41,6 +41,27 @@ img { background-color: #ffffff; } +.menu-wrap { + flex-wrap: wrap-reverse; +} + +#menu.tabs-classic { + padding: 0.15em; +} + +#menu.tabs-classic .button { + min-width: 2em; + margin: 0.1em; + padding: 0.25em 0.4em; + border: 0; + border-radius: 0.25em; +} + +#menu.tabs-classic .button.active { + background-color: #0668b8; + color: white; +} + .button { display: inline-table; cursor: pointer; @@ -62,6 +83,7 @@ img { } .button.active { + cursor: default; background-color: #dfdfdf; color: black; border-bottom-color: #000000; @@ -80,7 +102,7 @@ img { } .grid-container { - margin: 0; + margin: -0.25em; } .grid-item { @@ -89,13 +111,14 @@ img { user-select: none; -ms-user-select: none; /* Remove after Byond 516 */ width: 100%; - box-sizing: border-box; + max-height: 1.85em; text-decoration: none; background-color: transparent; color: black; } -.grid-item:hover { +.grid-item:hover, +.grid-item:active { color: #003399; z-index: 1; } @@ -104,21 +127,20 @@ img { display: inline-block; overflow: hidden; text-overflow: ellipsis; - box-sizing: border-box; white-space: nowrap; + pointer-events: none; width: 100%; padding: 0.33em 0.5em; border-radius: 0.25em; } -.grid-item-text:hover { - position: absolute; - top: -1.33em; +.grid-item:hover .grid-item-text { + overflow: visible; white-space: normal; background-color: #ececec; } -.grid-item-text:active { +.grid-item:active .grid-item-text { background-color: #dfdfdf; } @@ -173,7 +195,8 @@ body.dark { } .dark a:hover, -.dark .grid-item:hover { +.dark .grid-item:hover, +.dark .grid-item:active { color: #80bfff; } @@ -181,6 +204,10 @@ body.dark { background-color: #131313; } +.dark #menu.tabs-classic .button.active { + background-color: #20b142; +} + .dark .button { color: rgba(255, 255, 255, 0.5); } @@ -203,10 +230,10 @@ body.dark { color: #b2c4dd; } -.dark .grid-item-text:hover { +.dark .grid-item:hover .grid-item-text { background-color: #252525; } -.dark .grid-item-text:active { +.dark .grid-item:active .grid-item-text { background-color: #313131; } diff --git a/html/statbrowser.js b/html/statbrowser.js index f6c188c6edd61..3fe115943a702 100644 --- a/html/statbrowser.js +++ b/html/statbrowser.js @@ -716,6 +716,19 @@ function set_font_size(size) { document.body.style.setProperty('font-size', size); } +function set_tabs_style(style) { + if (style == "default") { + menu.classList.add('menu-wrap'); + menu.classList.remove('tabs-classic'); + } else if (style == "classic") { + menu.classList.add('menu-wrap'); + menu.classList.add('tabs-classic'); + } else if (style == "scrollable") { + menu.classList.remove('menu-wrap'); + menu.classList.remove('tabs-classic'); + } +} + function set_style_sheet(sheet) { if (document.getElementById("goonStyle")) { var currentSheet = document.getElementById("goonStyle"); diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi old mode 100755 new mode 100644 diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index dc1c2b121b616..d8b68c88d3812 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/parallax.dmi b/icons/effects/parallax.dmi old mode 100755 new mode 100644 diff --git a/icons/effects/random_spawners.dmi b/icons/effects/random_spawners.dmi index 4e5608330030b..d6e06fb140d04 100644 Binary files a/icons/effects/random_spawners.dmi and b/icons/effects/random_spawners.dmi differ diff --git a/icons/hud/fishing_hud.dmi b/icons/hud/fishing_hud.dmi index f18ed7c6cfca9..f9d2d2ff9c457 100644 Binary files a/icons/hud/fishing_hud.dmi and b/icons/hud/fishing_hud.dmi differ diff --git a/icons/hud/lobby/signup_button.dmi b/icons/hud/lobby/signup_button.dmi index 7be07a7fc09c7..e015fa71948a3 100644 Binary files a/icons/hud/lobby/signup_button.dmi and b/icons/hud/lobby/signup_button.dmi differ diff --git a/icons/hud/radial_fishing.dmi b/icons/hud/radial_fishing.dmi index 65fd55176b7c8..90b2b17c83a8a 100644 Binary files a/icons/hud/radial_fishing.dmi and b/icons/hud/radial_fishing.dmi differ diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 37cb71e1e4918..96a990090f518 100755 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/hud/screen_alien.dmi b/icons/hud/screen_alien.dmi index 21d7cde0b0383..5f3806dc7bb57 100644 Binary files a/icons/hud/screen_alien.dmi and b/icons/hud/screen_alien.dmi differ diff --git a/icons/hud/screen_clockwork.dmi b/icons/hud/screen_clockwork.dmi index 17e0c92972e25..809dfe8f1a833 100644 Binary files a/icons/hud/screen_clockwork.dmi and b/icons/hud/screen_clockwork.dmi differ diff --git a/icons/hud/screen_cyborg.dmi b/icons/hud/screen_cyborg.dmi index 0b17f099607f9..2c737ea115f3a 100644 Binary files a/icons/hud/screen_cyborg.dmi and b/icons/hud/screen_cyborg.dmi differ diff --git a/icons/hud/screen_detective.dmi b/icons/hud/screen_detective.dmi index 9704ca96f4c12..818bbcfc78b6f 100644 Binary files a/icons/hud/screen_detective.dmi and b/icons/hud/screen_detective.dmi differ diff --git a/icons/hud/screen_gen.dmi b/icons/hud/screen_gen.dmi index ae7499d8c6f94..86383abbef1e2 100644 Binary files a/icons/hud/screen_gen.dmi and b/icons/hud/screen_gen.dmi differ diff --git a/icons/hud/screen_glass.dmi b/icons/hud/screen_glass.dmi index 6b6d9d515c5f0..3cf16106cd868 100644 Binary files a/icons/hud/screen_glass.dmi and b/icons/hud/screen_glass.dmi differ diff --git a/icons/hud/screen_midnight.dmi b/icons/hud/screen_midnight.dmi index 8a6f2e1e8e06c..5de157be030f4 100644 Binary files a/icons/hud/screen_midnight.dmi and b/icons/hud/screen_midnight.dmi differ diff --git a/icons/hud/screen_operative.dmi b/icons/hud/screen_operative.dmi index 73afee5b3ca40..5fbaa7c5d5d24 100644 Binary files a/icons/hud/screen_operative.dmi and b/icons/hud/screen_operative.dmi differ diff --git a/icons/hud/screen_plasmafire.dmi b/icons/hud/screen_plasmafire.dmi index b0b2c7999c92d..d8b669c96c805 100644 Binary files a/icons/hud/screen_plasmafire.dmi and b/icons/hud/screen_plasmafire.dmi differ diff --git a/icons/hud/screen_retro.dmi b/icons/hud/screen_retro.dmi index a0d5abf3be511..f3621569d76d1 100644 Binary files a/icons/hud/screen_retro.dmi and b/icons/hud/screen_retro.dmi differ diff --git a/icons/hud/screen_slimecore.dmi b/icons/hud/screen_slimecore.dmi index 84a7abec2be5f..a6160087ab889 100644 Binary files a/icons/hud/screen_slimecore.dmi and b/icons/hud/screen_slimecore.dmi differ diff --git a/icons/hud/screen_trasenknox.dmi b/icons/hud/screen_trasenknox.dmi index 00ad01258a36a..4e17feb5211d0 100644 Binary files a/icons/hud/screen_trasenknox.dmi and b/icons/hud/screen_trasenknox.dmi differ diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi index 3ce72ae54ffe7..d287622f898e5 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_items.dmi b/icons/mob/actions/actions_items.dmi index 7aaeb9b36d281..3887804e55ddc 100644 Binary files a/icons/mob/actions/actions_items.dmi and b/icons/mob/actions/actions_items.dmi differ diff --git a/icons/mob/actions/actions_slime.dmi b/icons/mob/actions/actions_slime.dmi index aa92eb702e27a..fa81c45d24606 100644 Binary files a/icons/mob/actions/actions_slime.dmi and b/icons/mob/actions/actions_slime.dmi differ diff --git a/icons/mob/clothing/accessories.dmi b/icons/mob/clothing/accessories.dmi index 57670005b9240..0e09772a79f50 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 3b67b62798d36..5bcaa41f5ed58 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 724a29de21b0f..4a6cc7ac5c9dd 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 0507a0301944e..7410e2db20b37 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/hands.dmi b/icons/mob/clothing/hands.dmi index 449be68d4e531..78a07c08e6ede 100644 Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ diff --git a/icons/mob/clothing/head/hats.dmi b/icons/mob/clothing/head/hats.dmi index 8ed78b1c16173..1ff429b68b101 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/helmet.dmi b/icons/mob/clothing/head/helmet.dmi index c4e21d4179963..db48dda1fd61c 100644 Binary files a/icons/mob/clothing/head/helmet.dmi and b/icons/mob/clothing/head/helmet.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index ac40c153dd784..117511dd8741e 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 cb2a472c32ed6..aa9b6feca11af 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/modsuit/mod_modules.dmi b/icons/mob/clothing/modsuit/mod_modules.dmi index 4f2dc9740d1f7..5c433defa0755 100644 Binary files a/icons/mob/clothing/modsuit/mod_modules.dmi and b/icons/mob/clothing/modsuit/mod_modules.dmi differ diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi index 3467f752ac3a5..bd57cb6eee916 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 9075a9047d4e8..426a760e7700c 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/utility.dmi b/icons/mob/clothing/suits/utility.dmi index 0ef867a2866b8..c8e85bf9a45c7 100644 Binary files a/icons/mob/clothing/suits/utility.dmi and b/icons/mob/clothing/suits/utility.dmi differ diff --git a/icons/mob/clothing/under/digi_template.dmi b/icons/mob/clothing/under/digi_template.dmi new file mode 100644 index 0000000000000..0c9db80eb1c88 Binary files /dev/null and b/icons/mob/clothing/under/digi_template.dmi differ diff --git a/icons/mob/clothing/under/masking_helpers.dmi b/icons/mob/clothing/under/masking_helpers.dmi index 9ee54a598fad5..dfbec7d1cb8ec 100644 Binary files a/icons/mob/clothing/under/masking_helpers.dmi and b/icons/mob/clothing/under/masking_helpers.dmi differ diff --git a/icons/mob/clothing/underwear.dmi b/icons/mob/clothing/underwear.dmi index cd5564fe211f1..24519feb974c0 100644 Binary files a/icons/mob/clothing/underwear.dmi and b/icons/mob/clothing/underwear.dmi differ diff --git a/icons/mob/effects/blocking.dmi b/icons/mob/effects/blocking.dmi new file mode 100644 index 0000000000000..03872fa0fe36d Binary files /dev/null and b/icons/mob/effects/blocking.dmi differ diff --git a/icons/mob/effects/face_decal.dmi b/icons/mob/effects/face_decal.dmi new file mode 100644 index 0000000000000..6caecf7d767c3 Binary files /dev/null and b/icons/mob/effects/face_decal.dmi differ diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index bbe386ee2f5f8..13172e6799342 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 5b3b141c7edb0..9c6c333f05b29 100644 Binary files a/icons/mob/human/human_face.dmi and b/icons/mob/human/human_face.dmi differ diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi index 14f35aa9ef050..4ef1c071abfa2 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 102417e36f5b7..5d087c0b36f9c 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/clothing/gloves_lefthand.dmi b/icons/mob/inhands/clothing/gloves_lefthand.dmi index 4d191e42939b7..13b91d3108f46 100644 Binary files a/icons/mob/inhands/clothing/gloves_lefthand.dmi and b/icons/mob/inhands/clothing/gloves_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing/gloves_righthand.dmi b/icons/mob/inhands/clothing/gloves_righthand.dmi index f8ce306cc9850..f7325d02e7a63 100644 Binary files a/icons/mob/inhands/clothing/gloves_righthand.dmi and b/icons/mob/inhands/clothing/gloves_righthand.dmi differ diff --git a/icons/mob/inhands/fish_lefthand.dmi b/icons/mob/inhands/fish_lefthand.dmi index f5aeef6202713..bd712791b92da 100644 Binary files a/icons/mob/inhands/fish_lefthand.dmi and b/icons/mob/inhands/fish_lefthand.dmi differ diff --git a/icons/mob/inhands/fish_righthand.dmi b/icons/mob/inhands/fish_righthand.dmi index d9c23c3d1b19e..09e97a3196913 100644 Binary files a/icons/mob/inhands/fish_righthand.dmi and b/icons/mob/inhands/fish_righthand.dmi differ diff --git a/icons/mob/inhands/items/devices_lefthand.dmi b/icons/mob/inhands/items/devices_lefthand.dmi index 48c47f872df3c..334d962e4057d 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 f8f19a8709b15..d26bf452aa5ec 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/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 32a0bbd88f6a3..90df2a892f984 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 954081784a8b0..eebed61656aa4 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/rideables/mech_construction.dmi b/icons/mob/rideables/mech_construction.dmi index f9b2adf8b3448..6e1cdbc3a2d4a 100644 Binary files a/icons/mob/rideables/mech_construction.dmi and b/icons/mob/rideables/mech_construction.dmi differ diff --git a/icons/mob/rideables/mecha.dmi b/icons/mob/rideables/mecha.dmi index c7f46a51466e3..5960d05413781 100644 Binary files a/icons/mob/rideables/mecha.dmi and b/icons/mob/rideables/mecha.dmi differ diff --git a/icons/mob/silicon/robot_items.dmi b/icons/mob/silicon/robot_items.dmi index 2cb809fe2724b..bece0211ec8ef 100644 Binary files a/icons/mob/silicon/robot_items.dmi and b/icons/mob/silicon/robot_items.dmi differ diff --git a/icons/mob/simple/animal.dmi b/icons/mob/simple/animal.dmi index 35bce9c72b66b..62e36fad550b4 100644 Binary files a/icons/mob/simple/animal.dmi and b/icons/mob/simple/animal.dmi differ diff --git a/icons/mob/simple/pets.dmi b/icons/mob/simple/pets.dmi index e4c333216f1ec..b7e8642387228 100644 Binary files a/icons/mob/simple/pets.dmi and b/icons/mob/simple/pets.dmi differ diff --git a/icons/obj/aquarium/fish.dmi b/icons/obj/aquarium/fish.dmi index 638c8300f304a..eec60317b0e08 100644 Binary files a/icons/obj/aquarium/fish.dmi and b/icons/obj/aquarium/fish.dmi differ diff --git a/icons/obj/aquarium/wide.dmi b/icons/obj/aquarium/wide.dmi index 7c5f941a1db37..33c8e43950f96 100644 Binary files a/icons/obj/aquarium/wide.dmi and b/icons/obj/aquarium/wide.dmi differ diff --git a/icons/obj/bedsheets.dmi b/icons/obj/bedsheets.dmi index daa0c3cdd7904..46fb26ebb1863 100644 Binary files a/icons/obj/bedsheets.dmi and b/icons/obj/bedsheets.dmi differ diff --git a/icons/obj/canisters.dmi b/icons/obj/canisters.dmi index 1555cf0a4782e..0b38b08f98cf1 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 e17f7559a7ce5..738d3e51a3a93 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi deleted file mode 100644 index a1a253be4e728..0000000000000 Binary files a/icons/obj/chemical.dmi and /dev/null differ diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 1be85df6c156d..c9e9186b7a853 100644 Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ diff --git a/icons/obj/clothing/accessories.dmi b/icons/obj/clothing/accessories.dmi index 0253485cec327..578aebd0c65a1 100644 Binary files a/icons/obj/clothing/accessories.dmi and b/icons/obj/clothing/accessories.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index a4549f9e74b3b..b2b3d333bb44f 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/head/hats.dmi b/icons/obj/clothing/head/hats.dmi index 938090ec82e37..2ce0eebb2ad22 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/head/helmet.dmi b/icons/obj/clothing/head/helmet.dmi index cc54b2bf92934..621afe57ddce4 100644 Binary files a/icons/obj/clothing/head/helmet.dmi and b/icons/obj/clothing/head/helmet.dmi differ diff --git a/icons/obj/clothing/headsets.dmi b/icons/obj/clothing/headsets.dmi index b977487e2c6ce..57e67e5761a0c 100644 Binary files a/icons/obj/clothing/headsets.dmi and b/icons/obj/clothing/headsets.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 436785ce6e5e9..595893177355b 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_clothing.dmi b/icons/obj/clothing/modsuit/mod_clothing.dmi index 6ab49417aa52f..160606c790afa 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/modsuit/mod_modules.dmi b/icons/obj/clothing/modsuit/mod_modules.dmi index 1ea1b91d39c49..9811af0b54838 100644 Binary files a/icons/obj/clothing/modsuit/mod_modules.dmi and b/icons/obj/clothing/modsuit/mod_modules.dmi differ diff --git a/icons/obj/clothing/suits/armor.dmi b/icons/obj/clothing/suits/armor.dmi index 25f14e0df9300..b2c9a1aa8b430 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/utility.dmi b/icons/obj/clothing/suits/utility.dmi index 25fb8fd502a35..f8e3c4ce46897 100644 Binary files a/icons/obj/clothing/suits/utility.dmi and b/icons/obj/clothing/suits/utility.dmi differ diff --git a/icons/obj/devices/modular_pda.dmi b/icons/obj/devices/modular_pda.dmi index 236a7bb0f654e..6981b1de37ff6 100644 Binary files a/icons/obj/devices/modular_pda.dmi and b/icons/obj/devices/modular_pda.dmi differ diff --git a/icons/obj/devices/voice.dmi b/icons/obj/devices/voice.dmi index 1e875d9323038..4188d7867eebd 100644 Binary files a/icons/obj/devices/voice.dmi and b/icons/obj/devices/voice.dmi differ diff --git a/icons/obj/drinks/bottles.dmi b/icons/obj/drinks/bottles.dmi index cd3cf9fef09d4..2bdacf0426506 100644 Binary files a/icons/obj/drinks/bottles.dmi and b/icons/obj/drinks/bottles.dmi differ diff --git a/icons/obj/fishing.dmi b/icons/obj/fishing.dmi index b1d5a787b202f..dc0e65fac5898 100644 Binary files a/icons/obj/fishing.dmi and b/icons/obj/fishing.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 48260002e7a6c..7b6afcc37ffbe 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/food/meat.dmi b/icons/obj/food/meat.dmi index bf0b1df4f4cd2..ca3007749e7e6 100644 Binary files a/icons/obj/food/meat.dmi and b/icons/obj/food/meat.dmi differ diff --git a/icons/obj/food/mexican.dmi b/icons/obj/food/mexican.dmi index ba02c15a0b577..772d6b2e3fc74 100644 Binary files a/icons/obj/food/mexican.dmi and b/icons/obj/food/mexican.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi deleted file mode 100644 index 26b36cd52aa55..0000000000000 Binary files a/icons/obj/kitchen.dmi and /dev/null differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 2bda7341e518f..0a953cff78272 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/machines/engine/other.dmi b/icons/obj/machines/engine/other.dmi index 92dd420c84c32..7fb5ac6e7656d 100644 Binary files a/icons/obj/machines/engine/other.dmi and b/icons/obj/machines/engine/other.dmi differ diff --git a/icons/obj/machines/experimentator.dmi b/icons/obj/machines/experimentator.dmi index 924606d9847bb..64e11b3ead086 100644 Binary files a/icons/obj/machines/experimentator.dmi and b/icons/obj/machines/experimentator.dmi differ diff --git a/icons/obj/machines/manufactorio.dmi b/icons/obj/machines/manufactorio.dmi new file mode 100644 index 0000000000000..95bbd8fccb0eb Binary files /dev/null and b/icons/obj/machines/manufactorio.dmi differ diff --git a/icons/obj/machines/stasis.dmi b/icons/obj/machines/stasis.dmi old mode 100755 new mode 100644 diff --git a/icons/obj/machines/vending.dmi b/icons/obj/machines/vending.dmi index fffc7a7a82376..319771e4e7fb5 100644 Binary files a/icons/obj/machines/vending.dmi and b/icons/obj/machines/vending.dmi differ diff --git a/icons/obj/mining_zones/ash_flora.dmi b/icons/obj/mining_zones/ash_flora.dmi index 1f4aa469e133a..d796c200071c0 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/pipes_n_cables/disposal.dmi b/icons/obj/pipes_n_cables/disposal.dmi index 41207b7a7cd6f..a65413d3d007c 100644 Binary files a/icons/obj/pipes_n_cables/disposal.dmi and b/icons/obj/pipes_n_cables/disposal.dmi differ diff --git a/icons/obj/service/broadcast.dmi b/icons/obj/service/broadcast.dmi new file mode 100644 index 0000000000000..e82023791f3d6 Binary files /dev/null and b/icons/obj/service/broadcast.dmi differ diff --git a/icons/obj/service/janitor.dmi b/icons/obj/service/janitor.dmi index 0e30180832345..9f28c6bbe046e 100644 Binary files a/icons/obj/service/janitor.dmi and b/icons/obj/service/janitor.dmi differ diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index 0d14a0e35090d..489d045968984 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 58c1dd661ae9e..79f7eff2a678d 100644 Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ diff --git a/icons/obj/storage/crates.dmi b/icons/obj/storage/crates.dmi index 017fcc59364b2..5f8fecab7a0ff 100644 Binary files a/icons/obj/storage/crates.dmi and b/icons/obj/storage/crates.dmi differ diff --git a/icons/obj/storage/storage.dmi b/icons/obj/storage/storage.dmi index da5accade04d5..a55606fa3b33b 100644 Binary files a/icons/obj/storage/storage.dmi and b/icons/obj/storage/storage.dmi differ diff --git a/icons/obj/toys/stickers.dmi b/icons/obj/toys/stickers.dmi index bec0548cd29e6..80c0e138e38f9 100644 Binary files a/icons/obj/toys/stickers.dmi and b/icons/obj/toys/stickers.dmi differ diff --git a/icons/obj/vending_restock.dmi b/icons/obj/vending_restock.dmi index 836aebca7ae2d..ca8e40349c406 100644 Binary files a/icons/obj/vending_restock.dmi and b/icons/obj/vending_restock.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index f8f83d9ab54ae..c8bee52855868 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/icons/obj/weapons/bows/arrows.dmi b/icons/obj/weapons/bows/arrows.dmi index a6d7678e2f015..b19c20187ebfa 100644 Binary files a/icons/obj/weapons/bows/arrows.dmi and b/icons/obj/weapons/bows/arrows.dmi differ diff --git a/icons/obj/weapons/bows/bows.dmi b/icons/obj/weapons/bows/bows.dmi index 5e2dda9cef6fb..57d4237104266 100644 Binary files a/icons/obj/weapons/bows/bows.dmi and b/icons/obj/weapons/bows/bows.dmi differ diff --git a/icons/obj/weapons/bows/quivers.dmi b/icons/obj/weapons/bows/quivers.dmi index 615f96ee6af6d..86e6ffd2b925a 100644 Binary files a/icons/obj/weapons/bows/quivers.dmi and b/icons/obj/weapons/bows/quivers.dmi differ diff --git a/icons/obj/weapons/cannons.dmi b/icons/obj/weapons/cannons.dmi index b9735ba0aef9f..93b43b19239bd 100644 Binary files a/icons/obj/weapons/cannons.dmi and b/icons/obj/weapons/cannons.dmi differ diff --git a/icons/obj/weapons/guns/ammo.dmi b/icons/obj/weapons/guns/ammo.dmi index 4cd031af7ee8b..2dab0cb3d8d08 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 6b7963919fb8e..ef61f1d24949d 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/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index a6cf89e9b910f..cbf79a92b538f 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/khopesh.dmi b/icons/obj/weapons/khopesh.dmi index 6f4a040f6a410..7c0d54a7140b9 100644 Binary files a/icons/obj/weapons/khopesh.dmi and b/icons/obj/weapons/khopesh.dmi differ diff --git a/icons/turf/debug.dmi b/icons/turf/debug.dmi index debc965d0ecd8..848187dd9f03f 100644 Binary files a/icons/turf/debug.dmi and b/icons/turf/debug.dmi differ diff --git a/icons/turf/overlays.dmi b/icons/turf/overlays.dmi index c9decbc5a3af3..cfa61de424971 100644 Binary files a/icons/turf/overlays.dmi and b/icons/turf/overlays.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 8b86c32d41c82..8293d991a6f71 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -68,7 +68,7 @@ window "mainwindow" is-default = true saved-params = "pos;size;is-minimized;is-maximized" statusbar = false - icon = 'icons\\ui_icons\\common\\tg_32.png' + icon = 'modular_zubbers\\icons\\UI_Icons\\common\\bubber_32.png' macro = "default" menu = "menu" elem "split" diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index b18f723f0ae43..372dfef6bd522 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -51,6 +51,7 @@ em {font-style: normal; font-weight: bold;} .syndradio {color: #6d3f40;} .centcomradio {color: #686868;} .aiprivradio {color: #ff00ff;} +.enteradio {color: #00ff99;} .redteamradio {color: #ff0000;} .blueteamradio {color: #0000ff;} .greenteamradio {color: #00ff00;} diff --git a/lua/SS13_base.lua b/lua/SS13_base.lua index ea04c8c6503dd..23f464bf328ab 100644 --- a/lua/SS13_base.lua +++ b/lua/SS13_base.lua @@ -5,59 +5,38 @@ local SS13 = {} __SS13_signal_handlers = __SS13_signal_handlers or {} -SS13.SSlua = dm.global_vars.vars.SSlua +SS13.SSlua = dm.global_vars.SSlua SS13.global_proc = "some_magic_bullshit" SS13.state = state.state function SS13.get_runner_ckey() - return SS13.state:get_var("ckey_last_runner") + return SS13.state.ckey_last_runner end function SS13.get_runner_client() - return dm.global_vars:get_var("GLOB"):get_var("directory"):get(SS13.get_runner_ckey()) + return dm.global_vars.GLOB.directory[SS13.get_runner_ckey()] end -function SS13.istype(thing, type) - return dm.global_proc("_istype", thing, dm.global_proc("_text2path", type)) == 1 -end - -function SS13.start_tracking(datum) - local references = SS13.state.vars.references - references:add(datum) - SS13.state:call_proc("clear_on_delete", datum) -end +SS13.type = dm.global_procs._text2path -function SS13.new(type, ...) - local datum = SS13.new_untracked(type, ...) - if datum then - SS13.start_tracking(datum) - return datum - end +function SS13.istype(thing, type) + return dm.global_procs._istype(thing, SS13.type(type)) == 1 end -function SS13.type(string_type) - return dm.global_proc("_text2path", string_type) -end +SS13.new = dm.new function SS13.qdel(datum) if SS13.is_valid(datum) then - dm.global_proc("qdel", datum) + dm.global_procs.qdel(datum) return true end return false end -function SS13.new_untracked(type, ...) - return dm.global_proc("_new", type, { ... }) -end - function SS13.is_valid(datum) - if datum and not datum:is_null() and not datum:get_var("gc_destroyed") then - return true - end - return false + return dm.is_valid_ref(datum) and not datum.gc_destroyed end function SS13.await(thing_to_call, proc_to_call, ...) @@ -67,123 +46,110 @@ function SS13.await(thing_to_call, proc_to_call, ...) if thing_to_call == SS13.global_proc then proc_to_call = "/proc/" .. proc_to_call end - local promise = SS13.new("/datum/auxtools_promise", thing_to_call, proc_to_call, ...) - local promise_vars = promise.vars - while promise_vars.status == 0 do + local promise = SS13.new("/datum/promise", thing_to_call, proc_to_call, ...) + while promise.status == 0 do sleep() end - local return_value, runtime_message = promise_vars.return_value, promise_vars.runtime_message - SS13.stop_tracking(promise) - return return_value, runtime_message + return promise.return_value, promise.runtime_message end -function SS13.register_signal(datum, signal, func) - if not SS13.istype(datum, "/datum") then - return +local function signal_handler(data, ...) + local output = 0 + for func, _ in data.functions do + local result = func(...) + if type(result) == "number" then + output = bit32.bor(output, math.floor(result)) + end end - if not SS13.is_valid(datum) then - error("Tried to register a signal on a deleted datum!", 2) - return + return output +end + +local function create_qdeleting_callback(datum) + local callback = SS13.new("/datum/callback", SS13.state, "call_function_return_first") + callback:RegisterSignal(datum, "parent_qdeleting", "Invoke") + local path = { + "__SS13_signal_handlers", + dm.global_procs.WEAKREF(datum), + "parent_qdeleting", + "handler", + } + callback.arguments = { path } + local handler_data = { callback = callback, functions = {} } + handler_data.handler = function(source, ...) + local result = signal_handler(handler_data, source, ...) + for signal, signal_data in __SS13_signal_handlers[source] do + signal_data.callback:UnregisterSignal(source, signal) + end + __SS13_signal_handlers[source] = nil + return result end - local datumWeakRef = dm.global_proc("WEAKREF", datum) - if not __SS13_signal_handlers[datumWeakRef] then - __SS13_signal_handlers[datumWeakRef] = {} + __SS13_signal_handlers[datum]["parent_qdeleting"] = handler_data +end + +function SS13.register_signal(datum, signal, func) + if not type(func) == "function" then + return end - if signal == "_cleanup" then + if not SS13.istype(datum, "/datum") then return end - if not __SS13_signal_handlers[datumWeakRef][signal] then - __SS13_signal_handlers[datumWeakRef][signal] = {} + if not SS13.is_valid(datum) then + error("Tried to register a signal on a deleted datum", 2) end - local callback = SS13.new("/datum/callback", SS13.state, "call_function_return_first") - local callbackWeakRef = dm.global_proc("WEAKREF", callback) - callback:call_proc("RegisterSignal", datum, signal, "Invoke") - local path = { "__SS13_signal_handlers", datumWeakRef, signal, callbackWeakRef, "func" } - callback.vars.arguments = { path } - -- Turfs don't remove their signals on deletion. - if not __SS13_signal_handlers[datumWeakRef]._cleanup and not SS13.istype(datum, "/turf") then - local cleanupCallback = SS13.new("/datum/callback", SS13.state, "call_function_return_first") - local cleanupPath = { "__SS13_signal_handlers", datumWeakRef, "_cleanup"} - cleanupCallback.vars.arguments = { cleanupPath } - cleanupCallback:call_proc("RegisterSignal", datum, "parent_qdeleting", "Invoke") - __SS13_signal_handlers[datumWeakRef]._cleanup = function(datum) - SS13.start_tracking(datumWeakRef) - timer.set_timeout(0, function() - SS13.signal_handler_cleanup(datumWeakRef) - SS13.stop_tracking(cleanupCallback) - SS13.stop_tracking(datumWeakRef) - end) + if not __SS13_signal_handlers[datum] then + __SS13_signal_handlers[datum] = {} + -- Turfs don't remove their signals on deletion. + if not SS13.istype(datum, "/turf") then + create_qdeleting_callback(datum) end end - __SS13_signal_handlers[datumWeakRef][signal][callbackWeakRef] = { func = func, callback = callback } - return callback -end - -function SS13.stop_tracking(datum) - SS13.state:call_proc("let_soft_delete", datum) -end - -function SS13.unregister_signal(datum, signal, callback) - local function clear_handler(handler_info) - if not handler_info then - return - end - if not handler_info.callback then - return - end - local handler_callback = handler_info.callback - local callbackWeakRef = dm.global_proc("WEAKREF", handler_callback) - if not SS13.istype(datum, "/datum/weakref") then - handler_callback:call_proc("UnregisterSignal", datum, signal) - else - local actualDatum = datum:call_proc("hard_resolve") - if SS13.is_valid(actualDatum) then - handler_callback:call_proc("UnregisterSignal", actualDatum, signal) - end + local handler_data = __SS13_signal_handlers[datum][signal] + if not handler_data then + handler_data = { callback = nil, functions = {} } + local callback = SS13.new("/datum/callback", SS13.state, "call_function_return_first") + callback:RegisterSignal(datum, signal, "Invoke") + local path = { + "__SS13_signal_handlers", + dm.global_procs.WEAKREF(datum), + signal, + "handler", + } + callback.arguments = { path } + handler_data.callback = callback + handler_data.handler = function(...) + return signal_handler(handler_data, ...) end - SS13.stop_tracking(handler_callback) + __SS13_signal_handlers[datum][signal] = handler_data end + handler_data.functions[func] = true + return true +end - local datumWeakRef = datum - if not SS13.istype(datum, "/datum/weakref") then - datumWeakRef = dm.global_proc("WEAKREF", datum) - end - if not __SS13_signal_handlers[datumWeakRef] then +function SS13.unregister_signal(datum, signal, func) + if not (func == nil or type(func) == "function") then return end - - if signal == "_cleanup" then + if not __SS13_signal_handlers[datum] then return end - - if not __SS13_signal_handlers[datumWeakRef][signal] then + local handler_data = __SS13_signal_handlers[datum][signal] + if not handler_data then return end - - if not callback then - for handler_key, handler_info in __SS13_signal_handlers[datumWeakRef][signal] do - clear_handler(handler_info) + if func == nil then + if signal == "parent_qdeleting" then + handler_data.functions = {} + else + handler_data.callback:UnregisterSignal(datum, signal) + __SS13_signal_handlers[datum][signal] = nil end - __SS13_signal_handlers[datumWeakRef][signal] = nil else - if not SS13.istype(callback, "/datum/callback") then - return + handler_data.functions[func] = nil + if not (#handler_data.functions or (signal == "parent_qdeleting")) then + handler_data.callback:UnregisterSignal(datum, signal) + __SS13_signal_handlers[datum][signal] = nil end - local callbackWeakRef = dm.global_proc("WEAKREF", callback) - clear_handler(__SS13_signal_handlers[datumWeakRef][signal][callbackWeakRef]) - __SS13_signal_handlers[datumWeakRef][signal][callbackWeakRef] = nil - end -end - -function SS13.signal_handler_cleanup(datumWeakRef) - if not __SS13_signal_handlers[datumWeakRef] then - return - end - - for signal, _ in __SS13_signal_handlers[datumWeakRef] do - SS13.unregister_signal(datumWeakRef, signal) end - __SS13_signal_handlers[datumWeakRef] = nil end return SS13 diff --git a/lua/handler_group.lua b/lua/handler_group.lua index 0246d33c74488..050551b852969 100644 --- a/lua/handler_group.lua +++ b/lua/handler_group.lua @@ -1,29 +1,29 @@ -local SS13 = require('SS13') +local SS13 = require("SS13") local HandlerGroup = {} HandlerGroup.__index = HandlerGroup function HandlerGroup.new() return setmetatable({ - registered = {} + registered = {}, }, HandlerGroup) end -- Registers a signal on a datum for this handler group instance. function HandlerGroup:register_signal(datum, signal, func) - local callback = SS13.register_signal(datum, signal, func) - if not callback then + local registered_successfully = SS13.register_signal(datum, signal, func) + if not registered_successfully then return end - table.insert(self.registered, { datum = dm.global_proc("WEAKREF", datum), signal = signal, callback = callback }) + table.insert(self.registered, { datum = datum, signal = signal, func = func }) end -- Clears all the signals that have been registered on this HandlerGroup function HandlerGroup:clear() for _, data in self.registered do - if not data.callback or not data.datum then + if not data.func or not SS13.is_valid(data.datum) then continue end - SS13.unregister_signal(data.datum, data.signal, data.callback) + SS13.unregister_signal(data.datum, data.signal, data.func) end table.clear(self.registered) end @@ -45,5 +45,4 @@ function HandlerGroup.register_once(datum, signal, func) return callback end - return HandlerGroup diff --git a/lua/state.lua b/lua/state.lua index 080ee9f7eb32c..cba24d6435611 100644 --- a/lua/state.lua +++ b/lua/state.lua @@ -1,7 +1,7 @@ -local SSlua = dm.global_vars:get_var("SSlua") +local SSlua = dm.global_vars.SSlua -for _, state in SSlua:get_var("states") do - if state:get_var("internal_id") == dm.state_id then +for _, state in SSlua.states do + if state.internal_id == _state_id then return { state = state } end end diff --git a/lua/timer.lua b/lua/timer.lua index e88fdd8060799..e79cc8cdca54b 100644 --- a/lua/timer.lua +++ b/lua/timer.lua @@ -2,19 +2,19 @@ local state = require("state") local Timer = {} -local SSlua = dm.global_vars:get_var("SSlua") +local SSlua = dm.global_vars.SSlua __Timer_timers = __Timer_timers or {} __Timer_callbacks = __Timer_callbacks or {} function __add_internal_timer(func, time, loop) local timer = { loop = loop, - executeTime = time + dm.world:get_var("time") + executeTime = time + dm.world.time, } __Timer_callbacks[tostring(func)] = function() timer.executing = false if loop and timer.terminate ~= true then - timer.executeTime = dm.world:get_var("time") + time + timer.executeTime = dm.world.time + time else __stop_internal_timer(tostring(func)) end @@ -37,22 +37,21 @@ function __stop_internal_timer(func) end __Timer_timer_processing = __Timer_timer_processing or false -state.state:set_var("timer_enabled", 1) +state.state.timer_enabled = 1 __Timer_timer_process = function(seconds_per_tick) if __Timer_timer_processing then return 0 end __Timer_timer_processing = true - local time = dm.world:get_var("time") for func, timeData in __Timer_timers do if timeData.executing == true then continue end - if over_exec_usage(0.85) then + if _exec.time / (dm.world.tick_lag * 100) > 0.85 then sleep() end - if time >= timeData.executeTime then - state.state:get_var("functions_to_execute"):add(func) + if dm.world.time >= timeData.executeTime then + list.add(state.state.functions_to_execute, func) timeData.executing = true end end @@ -61,15 +60,9 @@ __Timer_timer_process = function(seconds_per_tick) end function Timer.wait(time) -<<<<<<< HEAD - local next_yield_index = __next_yield_index - __add_internal_timer(function() - SSlua:call_proc("queue_resume", state.state, next_yield_index) -======= local yieldIndex = _exec.next_yield_index __add_internal_timer(function() SSlua:queue_resume(state.state, yieldIndex) ->>>>>>> 6577c58b948b (Fixes lua function SS13.wait. (#85427)) end, time * 10, false) coroutine.yield() end diff --git a/modular_skyrat/master_files/code/datums/components/crusher.dm b/modular_skyrat/master_files/code/datums/components/crusher.dm index 1e69decd78a0a..4819adf91d744 100644 --- a/modular_skyrat/master_files/code/datums/components/crusher.dm +++ b/modular_skyrat/master_files/code/datums/components/crusher.dm @@ -151,7 +151,7 @@ if(target.dir & get_dir(user, target)) backstabbed = TRUE dealt_damage += backstab_bonus - playsound(user, 'sound/weapons/kinetic_accel.ogg', 100, TRUE) + playsound(user, 'sound/items/weapons/kinetic_accel.ogg', 100, TRUE) damage_effect.total_damage += dealt_damage new /obj/effect/temp_visual/kinetic_blast(get_turf(target)) @@ -206,7 +206,7 @@ // just typing spawn(-1) is faster ugghhh tg INVOKE_ASYNC(destabilizer, TYPE_PROC_REF(/obj/projectile, fire)) - playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, TRUE) + playsound(user, 'sound/items/weapons/plasma_cutter.ogg', 100, TRUE) var/obj/item/crusher = parent charged = FALSE @@ -220,5 +220,5 @@ var/obj/item/crusher = parent charged = TRUE crusher.update_appearance() - playsound(crusher.loc, 'sound/weapons/kinetic_reload.ogg', 60, TRUE) + playsound(crusher.loc, 'sound/items/weapons/kinetic_reload.ogg', 60, TRUE) diff --git a/modular_skyrat/master_files/code/datums/components/prone_mob.dm b/modular_skyrat/master_files/code/datums/components/prone_mob.dm index 739187bdab320..883855ec7563a 100644 --- a/modular_skyrat/master_files/code/datums/components/prone_mob.dm +++ b/modular_skyrat/master_files/code/datums/components/prone_mob.dm @@ -5,38 +5,25 @@ if(!isliving(parent)) return COMPONENT_INCOMPATIBLE source = parent - parent.add_traits(list(TRAIT_PRONE, TRAIT_FLOORED, TRAIT_NO_THROWING), type) + parent.add_traits(list(TRAIT_PRONE, TRAIT_FLOORED, TRAIT_NO_THROWING, TRAIT_HANDS_BLOCKED), type) parent.add_traits(list(TRAIT_PRONE, TRAIT_FLOORED, TRAIT_NO_THROWING), type) passtable_on(parent, type) source.layer = PROJECTILE_HIT_THRESHHOLD_LAYER /datum/component/prone_mob/RegisterWithParent() RegisterSignals(parent, list(COMSIG_MOVABLE_REMOVE_PRONE_STATE, COMSIG_LIVING_GET_PULLED), PROC_REF(stop_army_crawl)) - RegisterSignals(parent, list(COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_ITEM_ATTACK), PROC_REF(check_attack)) - RegisterSignal(parent, COMSIG_LIVING_TRY_PULL, PROC_REF(check_pull)) /datum/component/prone_mob/UnregisterFromParent() UnregisterSignal(parent, list( COMSIG_LIVING_GET_PULLED, - COMSIG_MOB_ATTACK_HAND, - COMSIG_MOB_ITEM_ATTACK, - COMSIG_LIVING_GET_PULLED, - COMSIG_LIVING_TRY_PULL + COMSIG_LIVING_TRY_PULL, )) return ..() -/datum/component/prone_mob/proc/check_attack(mob/living/source) - SIGNAL_HANDLER - return COMPONENT_CANCEL_ATTACK_CHAIN - -/datum/component/prone_mob/proc/check_pull(mob/living/source) - SIGNAL_HANDLER - return COMSIG_LIVING_CANCEL_PULL - /datum/component/prone_mob/proc/stop_army_crawl(mob/living/source) SIGNAL_HANDLER source = parent - parent.remove_traits(list(TRAIT_PRONE, TRAIT_FLOORED, TRAIT_NO_THROWING), type) + parent.remove_traits(list(TRAIT_PRONE, TRAIT_FLOORED, TRAIT_NO_THROWING, TRAIT_HANDS_BLOCKED), type) passtable_off(parent, type) source.layer = MOB_LAYER qdel(src) diff --git a/modular_skyrat/master_files/code/datums/components/shielded_suit.dm b/modular_skyrat/master_files/code/datums/components/shielded_suit.dm index 94601de771ab3..50767c2c0c5dd 100644 --- a/modular_skyrat/master_files/code/datums/components/shielded_suit.dm +++ b/modular_skyrat/master_files/code/datums/components/shielded_suit.dm @@ -13,7 +13,7 @@ var/obj/item/item_parent = parent COOLDOWN_START(src, charge_add_cd, charge_increment_delay) adjust_charge(charge_recovery) // set the number of charges to current + recovery per increment, clamped from zero to max_charges - playsound(item_parent, 'sound/magic/charge.ogg', 50, TRUE) + playsound(item_parent, 'sound/effects/magic/charge.ogg', 50, TRUE) /datum/component/shielded/suit/default_run_hit_callback(mob/living/owner, attack_text, current_charges) diff --git a/modular_skyrat/master_files/code/datums/station_traits/negative_traits.dm b/modular_skyrat/master_files/code/datums/station_traits/negative_traits.dm deleted file mode 100644 index d3337b3f225a2..0000000000000 --- a/modular_skyrat/master_files/code/datums/station_traits/negative_traits.dm +++ /dev/null @@ -1,8 +0,0 @@ -/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/votes/_vote_datum.dm b/modular_skyrat/master_files/code/datums/votes/_vote_datum.dm index 7c0b057ce2a72..9f31c7a3a1c2c 100644 --- a/modular_skyrat/master_files/code/datums/votes/_vote_datum.dm +++ b/modular_skyrat/master_files/code/datums/votes/_vote_datum.dm @@ -5,4 +5,4 @@ */ /datum/vote /// The sound effect played to everyone when this vote is initiated. - vote_sound = 'sound/misc/announce_dig.ogg' + vote_sound = 'sound/announcer/announcement/announce_dig.ogg' diff --git a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm b/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm index f4fa02707f708..01d200f501544 100644 --- a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm +++ b/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm @@ -171,7 +171,7 @@ slot_flags = ITEM_SLOT_BELT sharpness = SHARP_EDGED w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends") attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") diff --git a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm index 90a4a475d1881..6ee885546890d 100644 --- a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -88,7 +88,6 @@ GLOBAL_LIST_INIT(skyrat_wood_recipes, list( new/datum/stack_recipe("sturdy wooden fence", /obj/structure/railing/wooden_fencing, 5, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), new/datum/stack_recipe("sturdy wooden fence gate", /obj/structure/railing/wooden_fencing/gate, 5, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), new/datum/stack_recipe("large wooden gate", /obj/structure/mineral_door/wood/large_gate, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), - new/datum/stack_recipe("wooden bowl", /obj/item/reagent_containers/cup/bowl/wood_bowl, 3, time = 2 SECONDS, category = CAT_TOOLS), )) diff --git a/modular_skyrat/master_files/code/modules/antagonists/changeling/changeling.dm b/modular_skyrat/master_files/code/modules/antagonists/changeling/changeling.dm index 66d6abbf19772..0a1a0aa283573 100644 --- a/modular_skyrat/master_files/code/modules/antagonists/changeling/changeling.dm +++ b/modular_skyrat/master_files/code/modules/antagonists/changeling/changeling.dm @@ -5,8 +5,6 @@ /datum/changeling_profile /// The bra worn by the profile source var/bra - /// The color of the underwear used by the profile source - var/underwear_color /// The color of the undershirt used by the profile source var/undershirt_color /// The color of the socks used by the profile source diff --git a/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm b/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm index 8c89617fa168d..7bc229b0d0a1b 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm @@ -199,24 +199,9 @@ var/part_enabled = is_factual_sprite_accessory(relevant_mutant_bodypart, preferences.read_preference(/datum/preference/choiced/genital/penis)) return erp_allowed && part_enabled && (passed_initial_check || allowed) -/// The difference between the absolute max length and the length for normal sized mobs -#define PENIS_LENGTH_ABOVE_NORMAL PENIS_MAX_LENGTH - PENIS_MAX_LENGTH_NORMAL_SIZED - /datum/preference/numeric/penis_length/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) - // Adjust allowed size based on character size - var/body_size = preferences?.read_preference(/datum/preference/numeric/body_size) || BODY_SIZE_NORMAL - var/has_oversized_quirk = preferences?.all_quirks.Find(/datum/quirk/oversized::name) - // Clamp this for normal sized characters. Max allowed size is proportional to the mob's body_size, rounded up. - if(!has_oversized_quirk) - var/adjusted_size = PENIS_MAX_LENGTH_NORMAL_SIZED - if(body_size > 1) - adjusted_size = ceil(round(PENIS_MAX_LENGTH_NORMAL_SIZED, step) + ((((body_size - round(1, step)) * round(2, step))) * round(PENIS_LENGTH_ABOVE_NORMAL, step))) // floating point inaccuracy fun - if(value > adjusted_size) - value = adjusted_size target.dna.features["penis_size"] = value -#undef PENIS_LENGTH_ABOVE_NORMAL - /datum/preference/numeric/penis_length/create_default_value() // if you change from this to PENIS_MAX_LENGTH the game should laugh at you return round(max(PENIS_MIN_LENGTH, PENIS_DEFAULT_LENGTH)) @@ -235,24 +220,9 @@ var/part_enabled = is_factual_sprite_accessory(relevant_mutant_bodypart, preferences.read_preference(/datum/preference/choiced/genital/penis)) return erp_allowed && part_enabled && (passed_initial_check || allowed) -/// The difference between the absolute max girth and the girth for normal sized mobs -#define PENIS_GIRTH_ABOVE_NORMAL PENIS_MAX_GIRTH - PENIS_MAX_GIRTH_NORMAL_SIZED - /datum/preference/numeric/penis_girth/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) - // Adjust allowed size based on character size - var/body_size = preferences?.read_preference(/datum/preference/numeric/body_size) || BODY_SIZE_NORMAL - var/has_oversized_quirk = preferences?.all_quirks.Find(/datum/quirk/oversized::name) - // Clamp this for normal sized characters. Max allowed size is proportional to the mob's body_size, rounded up. - if(!has_oversized_quirk) - var/adjusted_size = PENIS_MAX_GIRTH_NORMAL_SIZED - if(body_size > 1) - adjusted_size = ceil(round(PENIS_MAX_GIRTH_NORMAL_SIZED, step) + ((((body_size - round(1, step)) * round(2, step))) * round(PENIS_GIRTH_ABOVE_NORMAL, step))) // floating point inaccuracy fun - if(value > adjusted_size) - value = adjusted_size target.dna.features["penis_girth"] = value -#undef PENIS_GIRTH_ABOVE_NORMAL - /datum/preference/numeric/penis_girth/create_default_value() return round(max(PENIS_MIN_GIRTH, PENIS_DEFAULT_GIRTH)) @@ -352,8 +322,8 @@ savefile_identifier = PREFERENCE_CHARACTER savefile_key = "balls_size" relevant_mutant_bodypart = ORGAN_SLOT_TESTICLES - minimum = 0 - maximum = 6 + minimum = TESTICLES_MIN_SIZE + maximum = TESTICLES_MAX_SIZE /datum/preference/numeric/balls_size/is_accessible(datum/preferences/preferences) var/passed_initial_check = ..(preferences) diff --git a/code/modules/client/preferences/middleware/food.dm b/modular_skyrat/master_files/code/modules/client/preferences/middleware/food.dm similarity index 100% rename from code/modules/client/preferences/middleware/food.dm rename to modular_skyrat/master_files/code/modules/client/preferences/middleware/food.dm diff --git a/modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm b/modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm index b82146de02b9f..ec0e8ca0b554a 100644 --- a/modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm +++ b/modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm @@ -61,7 +61,7 @@ /// This cycles the harness's current mode to the next one, likely using the action button. Goes from Off to Anti to Extra, always. /obj/item/gravity_harness/proc/toggle_mode(mob/user, voluntary) - if(!istype(user) || user.incapacitated()) + if(!istype(user) || user.incapacitated) return FALSE if(!gravity_on && (!current_cell || current_cell.charge < GRAVITY_FIELD_COST)) @@ -259,12 +259,12 @@ if(!cell_cover_open) balloon_alert(user, "open the cell cover first!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING if(current_cell) balloon_alert(user, "cell already installed!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return ITEM_INTERACT_BLOCKING /// Shadow realm? I'm sending you to Lake City, FL! diff --git a/modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm b/modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm index c6eca255b1e8d..7ab31b43d1fef 100644 --- a/modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm +++ b/modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm @@ -43,7 +43,7 @@ var/mob/living/something = user to_chat(something, span_boldnotice("You feel a stabbing pain in the back of your head for a moment.")) something.apply_damage(5, BRUTE, BODY_ZONE_HEAD, FALSE, FALSE, FALSE) // notably: no damage resist (it's in your helmet), no damage spread (it's in your helmet) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/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.") @@ -64,7 +64,7 @@ UnregisterSignal(magnification, COMSIG_SPECIES_LOSS) magnification = null visible_message(span_notice("[src] falls silent and drops on the floor. Maybe you should try again later?")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) user.dropItemToGround(src) return @@ -88,7 +88,7 @@ return // either used up correctly or taken off before polling finished (punish this by having a chance to gib the monkey?) UnregisterSignal(magnification, COMSIG_SPECIES_LOSS) - playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) ADD_TRAIT(magnification, TRAIT_PRIMITIVE, SPECIES_TRAIT) // We removed it, now that they're back to being dumb, add the trait again. if(!polling)// put on a viable head, but taken off after polling finished. if(magnification.client) diff --git a/modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm b/modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm index cef9c7c5eda4c..4c106704c1982 100644 --- a/modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm +++ b/modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm @@ -88,6 +88,7 @@ greyscale_config_worn_digi = /datum/greyscale_config/jean_skirt/worn/digi greyscale_colors = "#787878#723E0E#4D7EAC" flags_1 = IS_PLAYER_COLORABLE_1 + body_parts_covered = GROIN /obj/item/clothing/under/dress/skirt/skyrat/lone_skirt name = "skirt" 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 index bb16710618700..f28eb8c9c9dc1 100644 --- a/modular_skyrat/master_files/code/modules/mining/equipment/explorer_gear.dm +++ b/modular_skyrat/master_files/code/modules/mining/equipment/explorer_gear.dm @@ -76,7 +76,7 @@ return success /obj/item/clothing/suit/hifl_suit/proc/make_sound() - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) /datum/movespeed_modifier/hifl_equip multiplicative_slowdown = 1.5 diff --git a/modular_skyrat/master_files/code/modules/mining/equipment/kinetic_crusher.dm b/modular_skyrat/master_files/code/modules/mining/equipment/kinetic_crusher.dm index 78019081b29a2..92206a3e05587 100644 --- a/modular_skyrat/master_files/code/modules/mining/equipment/kinetic_crusher.dm +++ b/modular_skyrat/master_files/code/modules/mining/equipment/kinetic_crusher.dm @@ -18,7 +18,7 @@ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 1.15, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 2.075 ) - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("smashes", "crushes", "cleaves", "chops", "pulps") attack_verb_simple = list("smash", "crush", "cleave", "chop", "pulp") sharpness = SHARP_EDGED @@ -39,7 +39,7 @@ AddComponent(/datum/component/butchering, speed = 6 SECONDS, effectiveness = 110) AddComponent(/datum/component/kinetic_crusher, detonation_damage, backstab_bonus, charge_time, CALLBACK(src, PROC_REF(attack_check)), CALLBACK(src, PROC_REF(attack_check))) AddComponent(/datum/component/two_handed, force_wielded = 20, force_unwielded = 0, unwield_callback = CALLBACK(src, PROC_REF(on_unwield))) - RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) + RegisterSignal(src, COMSIG_ATOM_SABOTEUR_ACT, PROC_REF(do_saboteur)) /obj/item/kinetic_crusher/proc/attack_check(mob/user, cancel_attack) if(HAS_TRAIT(src, TRAIT_WIELDED)) @@ -53,7 +53,7 @@ /obj/item/kinetic_crusher/ui_action_click(mob/user, actiontype) set_light_on(!light_on) - playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(user, 'sound/items/weapons/empty.ogg', 100, TRUE) update_appearance() ////////////////////////////////////////////////////////////////////////////////// @@ -68,9 +68,9 @@ /////// HACK TO WORK AROUND TWOHANDED NOT RESPECTING FORCE_UNWIELDED=0 /////////// ////////////////////////////////////////////////////////////////////////////////// -/obj/item/kinetic_crusher/proc/on_saboteur(datum/source, disrupt_duration) +/obj/item/kinetic_crusher/proc/do_saboteur(datum/source, disrupt_duration) set_light_on(FALSE) - playsound(src, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/empty.ogg', 100, TRUE) return COMSIG_SABOTEUR_SUCCESS /obj/item/kinetic_crusher/update_icon_state() diff --git a/modular_skyrat/master_files/code/modules/mining/equipment/kinetic_gauntlets.dm b/modular_skyrat/master_files/code/modules/mining/equipment/kinetic_gauntlets.dm index eb29bc4c0fc85..d92c6f55309f4 100644 --- a/modular_skyrat/master_files/code/modules/mining/equipment/kinetic_gauntlets.dm +++ b/modular_skyrat/master_files/code/modules/mining/equipment/kinetic_gauntlets.dm @@ -25,7 +25,7 @@ attack_verb_continuous = list("slaps", "challenges") attack_verb_simple = list("slap", "challenge") equip_delay_self = 2 SECONDS //that's a lot of bulky - hitsound = 'sound/weapons/slap.ogg' + hitsound = 'sound/items/weapons/slap.ogg' slot_flags = ITEM_SLOT_GLOVES w_class = WEIGHT_CLASS_BULKY @@ -74,7 +74,7 @@ return FALSE //you WILL glass cannon and you WILL like it. /obj/item/clothing/gloves/kinetic_gauntlets/proc/after_detonate(mob/living/user, mob/living/target) - playsound(src, 'sound/weapons/resonator_blast.ogg', 40, TRUE) + playsound(src, 'sound/items/weapons/resonator_blast.ogg', 40, TRUE) var/old_dir_user = user.dir var/old_dir_target = user.dir step(user, get_dir(target, user)) @@ -114,14 +114,14 @@ can_deploy = FALSE if(!can_deploy) - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) to_chat(wearer, span_warning("You need both free hands to deploy [src]!")) return // equipping/unequipping shall take time wearer.add_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets) if(!do_after(wearer, 1.5 SECONDS, src, IGNORE_USER_LOC_CHANGE, interaction_key = type)) - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) to_chat(wearer, span_warning("You fail to deploy [src]!")) wearer.remove_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets) return @@ -134,7 +134,7 @@ can_deploy = FALSE if(!can_deploy) - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) to_chat(wearer, span_warning("You need both free hands to deploy [src]!")) return @@ -146,8 +146,8 @@ ADD_TRAIT(src, TRAIT_NODROP, type) - playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - playsound(src, 'sound/mecha/mechmove01.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/mecha/mechmove01.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) to_chat(wearer, span_notice("You deploy [src].")) /obj/item/clothing/gloves/kinetic_gauntlets/proc/retract_gauntlets() @@ -165,7 +165,7 @@ wearer.add_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets) if(!do_after(wearer, 1.5 SECONDS, src, IGNORE_USER_LOC_CHANGE)) wearer.remove_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets) - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) to_chat(wearer, span_warning("You fail to retract [src]!")) return @@ -175,8 +175,8 @@ right_gauntlet?.forceMove(src) REMOVE_TRAIT(src, TRAIT_NODROP, type) - playsound(src, 'sound/mecha/powerloader_turn2.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - playsound(src, 'sound/mecha/mechmove01.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/mecha/powerloader_turn2.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(src, 'sound/vehicles/mecha/mechmove01.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) to_chat(wearer, span_notice("You retract [src].")) @@ -222,7 +222,7 @@ /obj/item/kinetic_gauntlet/attack(mob/living/target_mob, mob/living/user, params) . = ..() - playsound(src, 'sound/weapons/genhit2.ogg', 40, TRUE) + playsound(src, 'sound/items/weapons/genhit2.ogg', 40, TRUE) next_attack = world.time + 0.8 SECONDS // same as a crusher user.changeNext_move(CLICK_CD_HYPER_RAPID) //forgive me if(istype(user.get_inactive_held_item(), /obj/item/kinetic_gauntlet)) @@ -240,11 +240,11 @@ /obj/item/kinetic_gauntlet/left/Initialize(mapload) . = ..() if(linked_gauntlets) - RegisterSignal(linked_gauntlets, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) + RegisterSignal(linked_gauntlets, COMSIG_ATOM_SABOTEUR_ACT, PROC_REF(do_saboteur)) /obj/item/kinetic_gauntlet/left/Destroy(force) if(linked_gauntlets) - UnregisterSignal(linked_gauntlets, COMSIG_HIT_BY_SABOTEUR) + UnregisterSignal(linked_gauntlets, COMSIG_ATOM_SABOTEUR_ACT) linked_gauntlets.set_light_on(FALSE) return ..() @@ -255,11 +255,11 @@ /obj/item/kinetic_gauntlet/left/attack_self(mob/user, modifiers) linked_gauntlets.set_light_on(!linked_gauntlets.light_on) - playsound(src, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/empty.ogg', 100, TRUE) update_appearance() -/obj/item/kinetic_gauntlet/left/proc/on_saboteur(datum/source, disrupt_duration) +/obj/item/kinetic_gauntlet/left/proc/do_saboteur(datum/source, disrupt_duration) linked_gauntlets.set_light_on(FALSE) - playsound(src, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(src, 'sound/items/weapons/empty.ogg', 100, TRUE) update_appearance() return COMSIG_SABOTEUR_SUCCESS diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/carbon_defense.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/carbon_defense.dm index 89120849497fd..fb1c1c2a842ef 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/carbon/carbon_defense.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/carbon/carbon_defense.dm @@ -7,7 +7,7 @@ var/target_on_help_and_unarmed = !target.combat_mode && !target.get_active_held_item() if(target_on_help_and_unarmed || HAS_TRAIT(target, TRAIT_RESTRAINED)) do_slap_animation(target) - playsound(target.loc, 'sound/weapons/slap.ogg', 50, TRUE, -1) + playsound(target.loc, 'sound/items/weapons/slap.ogg', 50, TRUE, -1) visible_message("[src] slaps [target] in the face!", "You slap [target] in the face! ",\ "You hear a slap.") @@ -29,12 +29,12 @@ visible_message(span_danger("[src] tried slapping [target]'s ass, but they were blocked!"), span_danger("You tried slapping [target]'s ass, but they blocked you!"), "You hear a slap.", ignored_mobs = list(target)) - playsound(target.loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) + playsound(target.loc, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) to_chat(target, span_danger("[src] tried slapping your ass, but you blocked them!")) return else do_ass_slap_animation(target) - playsound(target.loc, 'sound/weapons/slap.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) + playsound(target.loc, 'sound/items/weapons/slap.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) visible_message("[src] slaps [target] right on the ass!",\ "You slap [target] on the ass, how satisfying.",\ "You hear a slap.", ignored_mobs = list(target)) 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 index 7d145267b94c8..ed5f55b77420f 100644 --- 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 @@ -12,9 +12,6 @@ . = ..() 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 diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm index bbc1aa7b916a1..1001513b695ab 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm @@ -209,7 +209,7 @@ fired_projectile = new /obj/projectile/beam(loc) fired_projectile.icon = 'icons/mob/effects/genetics.dmi' fired_projectile.icon_state = "eyelasers" - fire_sound = 'sound/weapons/taser.ogg' + fire_sound = 'sound/items/weapons/taser.ogg' playsound(loc, fire_sound, vol = 75, vary = TRUE) fired_projectile.preparePixelProjectile(target, source_turf) diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/pets.dm b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/pets.dm index cfab59da88fb7..b49984fa55c37 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/pets.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/pets.dm @@ -147,7 +147,7 @@ melee_damage_upper = 5 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE ai_controller = /datum/ai_controller/basic_controller/fox/docile //he's a nice boy diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm index 0e87ab8664506..c5443d2f6d3c8 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm @@ -128,7 +128,7 @@ upset = TRUE icon_state = "poppypossum_aaa" - emote("sweatdrop") + //emote("sweatdrop") - BUBBER TODO - Make this not lint do_jitter_animation(60) manual_emote("'s fur stands up, [src.p_their()] body trembling...") diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm index e804bb3af5f97..d4b89993a9c5f 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm @@ -16,7 +16,7 @@ butcher_results = list(/obj/item/food/meat/slab = 3) attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE melee_damage_lower = 20 //same damage as a carp would make - reference to Paradise Station's Syndifox melee_damage_upper = 20 diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm index 530a91cc6af1e..afa9c22f2314d 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm @@ -70,7 +70,7 @@ melee_damage_upper = 10 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' combat_mode = TRUE loot = list(/obj/effect/gibspawner/human) atmos_requirements = null @@ -93,7 +93,7 @@ melee_damage_upper = 15 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' /mob/living/simple_animal/hostile/cult/mannequin name = "Runed Doll" @@ -107,7 +107,7 @@ melee_damage_upper = 15 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' loot = list(/obj/effect/decal/cleanable/robot_debris) /mob/living/simple_animal/hostile/cult/horror @@ -122,7 +122,7 @@ melee_damage_upper = 15 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' /mob/living/simple_animal/hostile/cult/warrior name = "Cultist Warrior" @@ -136,7 +136,7 @@ melee_damage_upper = 15 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' /mob/living/simple_animal/hostile/cult/spear name = "Cultist Spearmen" @@ -150,7 +150,7 @@ melee_damage_upper = 15 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' /mob/living/simple_animal/hostile/cult/assassin name = "Cultist Assassin" @@ -164,7 +164,7 @@ melee_damage_upper = 15 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' /mob/living/simple_animal/hostile/cult/magic name = "Cult Blood Mage" @@ -174,7 +174,7 @@ icon_living = "cultmage" move_to_delay = 10 projectiletype = /obj/projectile/magic/spell/magic_missile/lesser - projectilesound = 'sound/magic/ethereal_enter.ogg' + projectilesound = 'sound/effects/magic/ethereal_enter.ogg' ranged = TRUE ranged_message = "fires a spell" ranged_cooldown_time = 8 @@ -187,7 +187,7 @@ attack_verb_continuous = "punches" combat_mode = TRUE speak_emote = list("chants") - attack_sound = 'sound/magic/magic_missile.ogg' + attack_sound = 'sound/effects/magic/magic_missile.ogg' aggro_vision_range = 9 turns_per_move = 5 mob_biotypes = MOB_ORGANIC|MOB_HUMANOID @@ -213,7 +213,7 @@ health = 150 move_to_delay = 10 projectiletype = /obj/projectile/magic/arcane_barrage - projectilesound = 'sound/weapons/barragespellhit.ogg' + projectilesound = 'sound/items/weapons/barragespellhit.ogg' // Looters /mob/living/simple_animal/hostile/looter @@ -231,7 +231,7 @@ melee_damage_upper = 18 attack_verb_continuous = "pipes" attack_verb_simple = "bludgeon" - attack_sound = 'sound/weapons/smash.ogg' + attack_sound = 'sound/items/weapons/smash.ogg' atmos_requirements = null unsuitable_atmos_damage = 15 check_friendly_fire = 1 @@ -268,7 +268,7 @@ melee_damage_upper = 18 attack_verb_continuous = "smashes" attack_verb_simple = "smash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' /mob/living/simple_animal/hostile/looter/ranged name = "Looter Gunman" @@ -285,7 +285,7 @@ loot = list(/obj/effect/spawner/random/maintenance/five) dodging = FALSE faction = list(FACTION_HOSTILE) - projectilesound = 'sound/weapons/gun/shotgun/shot.ogg' + projectilesound = 'sound/items/weapons/gun/shotgun/shot.ogg' /mob/living/simple_animal/hostile/looter/ranged/space name = "Looter Shipbreaker" @@ -293,7 +293,7 @@ icon_state = "scavsmg" icon_living = "scavsmg" casingtype = /obj/item/ammo_casing/c9mm - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' + projectilesound = 'sound/items/weapons/gun/pistol/shot.ogg' loot = list(/obj/effect/spawner/random/maintenance/five) atmos_requirements = null minbodytemp = 0 @@ -308,7 +308,7 @@ desc = "A shipbreaker scavenger, carrying a laser gun." icon_state = "scavlaser" icon_living = "scavlaser" - projectilesound = 'sound/weapons/laser3.ogg' + projectilesound = 'sound/items/weapons/laser3.ogg' loot = list(/obj/effect/spawner/random/maintenance/five) projectiletype = /obj/projectile/beam/laser @@ -328,9 +328,9 @@ melee_damage_upper = 10 attack_verb_continuous = "claws" attack_verb_simple = "claw" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' + projectilesound = 'sound/items/weapons/gun/pistol/shot.ogg' projectiletype = /obj/projectile/hivebotbullet faction = list(FACTION_HOSTILE) check_friendly_fire = 1 @@ -357,7 +357,7 @@ melee_damage_upper = 20 attack_verb_continuous = "saws" attack_verb_simple = "saw" - attack_sound = 'sound/weapons/chainsawhit.ogg' + attack_sound = 'sound/items/weapons/chainsawhit.ogg' /mob/living/simple_animal/hostile/evilborg/peace name = "Malfunctioning Peacekeeper Cyborg" @@ -371,7 +371,7 @@ melee_damage_upper = 18 attack_verb_continuous = "smacks" attack_verb_simple = "smack" - attack_sound = 'sound/weapons/cqchit1.ogg' + attack_sound = 'sound/items/weapons/cqchit1.ogg' /mob/living/simple_animal/hostile/evilborg/engi name = "Malfunctioning Engineering Cyborg" @@ -386,7 +386,7 @@ melee_damage_upper = 15 attack_verb_continuous = "welds" attack_verb_simple = "weld" - attack_sound = 'sound/items/welder.ogg' + attack_sound = 'sound/items/tools/welder.ogg' /mob/living/simple_animal/hostile/evilborg/sec name = "Malfunctioning Security Cyborg" @@ -395,7 +395,7 @@ icon_state = "evilbotsec" icon_living = "evilbotsec" casingtype = /obj/item/ammo_casing/c45 - projectilesound = 'sound/weapons/gun/smg/shot.ogg' + projectilesound = 'sound/items/weapons/gun/smg/shot.ogg' health = 75 maxHealth = 75 ranged = 1 @@ -403,7 +403,7 @@ melee_damage_upper = 8 attack_verb_continuous = "gunbutts" attack_verb_simple = "gunbutt" - attack_sound = 'sound/weapons/smash.ogg' + attack_sound = 'sound/items/weapons/smash.ogg' /mob/living/simple_animal/hostile/evilborg/roomba name = "Malfunctioning Roomba Cyborg" @@ -417,7 +417,7 @@ melee_damage_upper = 12 attack_verb_continuous = "pokes" attack_verb_simple = "stab" - attack_sound = 'sound/weapons/genhit2.ogg' + attack_sound = 'sound/items/weapons/genhit2.ogg' /mob/living/simple_animal/hostile/evilborg/dog name = "Malfunctioning Canine Cyborg" @@ -431,7 +431,7 @@ melee_damage_upper = 12 attack_verb_continuous = "cleaves" attack_verb_simple = "smash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' /mob/living/simple_animal/hostile/evilborg/dogstrong name = "Corrupt Hound" @@ -445,7 +445,7 @@ melee_damage_upper = 18 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' /mob/living/simple_animal/hostile/evilborg/bigguy name = "Malfunctioning Military robot" @@ -454,7 +454,7 @@ icon_state = "sentrybot" icon_living = "sentrybot" casingtype = /obj/item/ammo_casing/c45 - projectilesound = 'sound/weapons/gun/smg/shot.ogg' + projectilesound = 'sound/items/weapons/gun/smg/shot.ogg' health = 250 maxHealth = 250 ranged = 1 @@ -462,7 +462,7 @@ melee_damage_upper = 12 attack_verb_continuous = "gunbutts" attack_verb_simple = "gunbutt" - attack_sound = 'sound/weapons/smash.ogg' + attack_sound = 'sound/items/weapons/smash.ogg' /mob/living/simple_animal/hostile/evilborg/protect name = "Malfunctioning Standard Robot" @@ -476,7 +476,7 @@ melee_damage_upper = 15 attack_verb_continuous = "claws" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/genhit2.ogg' + attack_sound = 'sound/items/weapons/genhit2.ogg' // Beasts @@ -507,7 +507,7 @@ melee_damage_upper = 20 attack_verb_continuous = "claws" attack_verb_simple = "pinch" - attack_sound = 'sound/weapons/genhit2.ogg' + attack_sound = 'sound/items/weapons/genhit2.ogg' speak_emote = list("gnashes") atmos_requirements = null minbodytemp = 0 @@ -542,7 +542,7 @@ melee_damage_upper = 18 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' speak_emote = list("screeches") atmos_requirements = null minbodytemp = 0 @@ -580,7 +580,7 @@ melee_damage_upper = 18 attack_verb_continuous = "bites" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' speak_emote = list("gurlges") atmos_requirements = null minbodytemp = 0 @@ -619,7 +619,7 @@ move_to_delay = 4 attack_verb_continuous = "stings" attack_verb_simple = "sting" - attack_sound = 'sound/weapons/genhit2.ogg' + attack_sound = 'sound/items/weapons/genhit2.ogg' speak_emote = list("buzzes") atmos_requirements = null minbodytemp = 0 @@ -658,7 +658,7 @@ melee_damage_upper = 20 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' speak_emote = list("growls") atmos_requirements = null minbodytemp = 0 @@ -690,7 +690,7 @@ melee_damage_upper = 15 attack_verb_continuous = "stings" attack_verb_simple = "sting" - attack_sound = 'sound/weapons/genhit2.ogg' + attack_sound = 'sound/items/weapons/genhit2.ogg' speak_emote = list("chitters") atmos_requirements = null minbodytemp = 0 @@ -724,7 +724,7 @@ melee_damage_upper = 15 attack_verb_continuous = "bosses" attack_verb_simple = "boss" - attack_sound = 'sound/weapons/cqchit2.ogg' + attack_sound = 'sound/items/weapons/cqchit2.ogg' speak_emote = list("squeaks") emote_see = list("squeaks.", "practices CQC.", "cocks the bolt of a tiny CR20.", "plots to steal DAT DISK!", "fiddles with a tiny radio.") speak_chance = 1 @@ -761,7 +761,7 @@ melee_damage_upper = 10 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/cqchit1.ogg' + attack_sound = 'sound/items/weapons/cqchit1.ogg' speak_emote = list("clacks") atmos_requirements = null minbodytemp = 0 @@ -796,7 +796,7 @@ melee_damage_upper =10 attack_verb_continuous = "claws" attack_verb_simple = "slice" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' speak_emote = list("chitters") atmos_requirements = null minbodytemp = 0 @@ -863,7 +863,7 @@ melee_damage_upper = 10 attack_verb_continuous = "claws" attack_verb_simple = "claw" - attack_sound = 'sound/weapons/pierce_slow.ogg' + attack_sound = 'sound/items/weapons/pierce_slow.ogg' combat_mode = TRUE loot = list(/obj/effect/spawner/random/maintenance/three = 1) atmos_requirements = null @@ -886,7 +886,7 @@ loot = list(/obj/effect/spawner/random/medical/medkit = 1) attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH status_flags = 0 @@ -902,7 +902,7 @@ retreat_distance = 5 minimum_distance = 5 casingtype = /obj/item/ammo_casing/c9mm - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' + projectilesound = 'sound/items/weapons/gun/pistol/shot.ogg' loot = list(/obj/effect/spawner/random/engineering/material_rare = 2) dodging = FALSE rapid_melee = 1 @@ -914,7 +914,7 @@ icon_living = "voxlaser" icon_dead = "voxsuitdead" projectiletype = /obj/projectile/beam/laser - projectilesound = 'sound/weapons/laser3.ogg' + projectilesound = 'sound/items/weapons/laser3.ogg' /mob/living/simple_animal/hostile/vox/ranged/space name = "Vox Space Raider" @@ -926,7 +926,7 @@ retreat_distance = 5 minimum_distance = 5 casingtype = /obj/item/ammo_casing/c9mm - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' + projectilesound = 'sound/items/weapons/gun/pistol/shot.ogg' loot = list(/obj/effect/spawner/random/maintenance/five = 1) dodging = FALSE rapid_melee = 1 @@ -939,7 +939,7 @@ icon_dead = "voxspacedead" loot = list(/obj/effect/spawner/random/engineering/material_rare = 4) projectiletype = /obj/projectile/beam/laser - projectilesound = 'sound/weapons/laser3.ogg' + projectilesound = 'sound/items/weapons/laser3.ogg' /mob/living/basic/gorilla/pitbull diff --git a/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm b/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm index b36b6d058ffe1..76c03f7b0b122 100644 --- a/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm +++ b/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm @@ -2,6 +2,7 @@ /obj/item/clothing/head/mod supports_variations_flags = CLOTHING_SNOUTED_VARIATION worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/mod.dmi' + worn_icon_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi' worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi' /obj/item/clothing/suit/mod diff --git a/modular_skyrat/master_files/code/modules/modular_computers/computers/item/computer.dm b/modular_skyrat/master_files/code/modules/modular_computers/computers/item/computer.dm new file mode 100644 index 0000000000000..5a072fd075bc8 --- /dev/null +++ b/modular_skyrat/master_files/code/modules/modular_computers/computers/item/computer.dm @@ -0,0 +1,3 @@ +/obj/item/modular_computer + // Extended PDA cell to compensate for increased round length + internal_cell = /obj/item/stock_parts/power_store/cell/upgraded diff --git a/modular_skyrat/master_files/code/modules/power/circulator.dm b/modular_skyrat/master_files/code/modules/power/circulator.dm index 9b0e14a4dd35d..1150ab60c3cba 100644 --- a/modular_skyrat/master_files/code/modules/power/circulator.dm +++ b/modular_skyrat/master_files/code/modules/power/circulator.dm @@ -269,7 +269,7 @@ return flipped = !flipped balloon_alert(usr, span_notice("You flip [src].")) - playsound(src, 'sound/items/change_drill.ogg', 50) + playsound(src, 'sound/items/tools/change_drill.ogg', 50) update_icon_nopipes() /obj/machinery/atmospherics/components/binary/circulator/atom_break(damage_flag) diff --git a/modular_skyrat/master_files/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm b/modular_skyrat/master_files/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm index cfd501fb3ff4d..1901743a6c6b1 100644 --- a/modular_skyrat/master_files/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm +++ b/modular_skyrat/master_files/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm @@ -26,3 +26,16 @@ /obj/item/bonesetter/alien, /obj/item/blood_filter/alien, ) + +/obj/item/organ/internal/cyberimp/arm/surgery + items_to_create = list( + /obj/item/retractor/augment, + /obj/item/hemostat/augment, + /obj/item/cautery/augment, + /obj/item/surgicaldrill/augment, + /obj/item/scalpel/augment, + /obj/item/circular_saw/augment, + /obj/item/surgical_drapes, + /obj/item/bonesetter, + /obj/item/blood_filter, + ) diff --git a/modular_skyrat/master_files/icons/import.dmi b/modular_skyrat/master_files/icons/import.dmi deleted file mode 100644 index cf74d73796c8c..0000000000000 Binary files a/modular_skyrat/master_files/icons/import.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi b/modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi index 47334c59adf21..d5db9454fbb05 100644 Binary files a/modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi and b/modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/huds/hud.dmi b/modular_skyrat/master_files/icons/mob/huds/hud.dmi index cd0c5aa26a4fe..be0ccdb31a8da 100644 Binary files a/modular_skyrat/master_files/icons/mob/huds/hud.dmi and b/modular_skyrat/master_files/icons/mob/huds/hud.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi index 9634a34e5a1c9..54e049b77b2ba 100644 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi and b/modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi 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 index fa2fc8b89aac7..e7662ebd9b322 100644 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi and b/modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi index e247eb6f2be2b..67510814970ad 100644 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi and b/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi b/modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi index c8777b833ff95..d298e2800d485 100644 Binary files a/modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi and b/modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi differ diff --git a/modular_skyrat/modules/Midroundtraitor/code/event.dm b/modular_skyrat/modules/Midroundtraitor/code/event.dm index ebaa5abaf44ba..fbbd39bfc43f7 100644 --- a/modular_skyrat/modules/Midroundtraitor/code/event.dm +++ b/modular_skyrat/modules/Midroundtraitor/code/event.dm @@ -42,7 +42,7 @@ 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.set_assigned_role(SSjob.get_job_type(/datum/job/lone_operative)) player_mind.special_role = "Lone Infiltrator" player_mind.active = TRUE player_mind.transfer_to(operative) diff --git a/modular_skyrat/modules/admin/code/smites/pie.dm b/modular_skyrat/modules/admin/code/smites/pie.dm index ac8e38c3c80e2..a4b71fdca969d 100644 --- a/modular_skyrat/modules/admin/code/smites/pie.dm +++ b/modular_skyrat/modules/admin/code/smites/pie.dm @@ -5,4 +5,5 @@ /datum/smite/pie/effect(client/user, mob/living/target) . = ..() var/obj/item/food/pie/cream/nostun/creamy = new(get_turf(target)) - creamy.splat(target) + var/datum/component/splat/splat_handler = creamy.GetComponent(/datum/component/splat) + splat_handler.splat(splat_handler, target) diff --git a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm b/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm index c5471732c474c..8215d636fa1a4 100644 --- a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm +++ b/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm @@ -389,8 +389,8 @@ 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' + doorOpen = 'sound/machines/tram/tramopen.ogg' + doorClose = 'sound/machines/tram/tramclose.ogg' /obj/machinery/door/airlock/tram/set_light(l_range, l_power, l_color = NONSENSICAL_VALUE, l_angle, l_dir, l_height, l_on) return diff --git a/modular_skyrat/modules/aesthetics/cells/cell.dm b/modular_skyrat/modules/aesthetics/cells/cell.dm index 40eb3034c2049..ce9ce3b4e3687 100644 --- a/modular_skyrat/modules/aesthetics/cells/cell.dm +++ b/modular_skyrat/modules/aesthetics/cells/cell.dm @@ -4,6 +4,10 @@ var/charging_icon = "cell_in" connector_type = null +/obj/item/stock_parts/power_store/cell/upgraded + icon_state = "upcell" + charging_icon = "upcell_in" + /obj/item/stock_parts/power_store/cell/high charging_icon = "hcell_in" diff --git a/modular_skyrat/modules/aesthetics/cells/cell.dmi b/modular_skyrat/modules/aesthetics/cells/cell.dmi index 0c8b10333e37b..8e815adf7122a 100644 Binary files a/modular_skyrat/modules/aesthetics/cells/cell.dmi and b/modular_skyrat/modules/aesthetics/cells/cell.dmi differ diff --git a/modular_skyrat/modules/aesthetics/guns/code/guns.dm b/modular_skyrat/modules/aesthetics/guns/code/guns.dm index 0d5d52a82b361..b93a52c6b32cc 100644 --- a/modular_skyrat/modules/aesthetics/guns/code/guns.dm +++ b/modular_skyrat/modules/aesthetics/guns/code/guns.dm @@ -205,11 +205,11 @@ w_class = WEIGHT_CLASS_BULKY inhand_icon_state = "sniper" worn_icon_state = null - fire_sound = 'sound/weapons/gun/sniper/shot.ogg' + fire_sound = 'sound/items/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' + load_sound = 'sound/items/weapons/gun/sniper/mag_insert.ogg' + rack_sound = 'sound/items/weapons/gun/sniper/rack.ogg' + suppressed_sound = 'sound/items/weapons/gun/general/heavy_shot_suppressed.ogg' recoil = 2 weapon_weight = WEAPON_HEAVY accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds @@ -279,8 +279,8 @@ 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' + load_sound = 'sound/items/weapons/gun/sniper/mag_insert.ogg' + rack_sound = 'sound/items/weapons/gun/sniper/rack.ogg' w_class = WEIGHT_CLASS_NORMAL can_suppress = TRUE can_unsuppress = TRUE @@ -482,11 +482,11 @@ /obj/projectile/bullet/c9mm name = "9x25mm bullet" - damage = 25 +// damage = 25 - BUBBER EDIT /obj/projectile/bullet/c9mm/ap name = "9x25mm armor-piercing bullet" - damage = 20 +// damage = 20 - BUBBER EDIT /obj/projectile/bullet/c9mm/hp name = "9x25mm fragmenting bullet" diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser.ogg b/modular_skyrat/modules/aesthetics/guns/sound/laser.ogg index 4ff9e82ff9919..867275de1eeb8 100644 Binary files a/modular_skyrat/modules/aesthetics/guns/sound/laser.ogg and b/modular_skyrat/modules/aesthetics/guns/sound/laser.ogg differ diff --git a/modular_skyrat/modules/airlock_override/code/airlock_override.dm b/modular_skyrat/modules/airlock_override/code/airlock_override.dm index 0d05ae1808202..1b86592db60c5 100644 --- a/modular_skyrat/modules/airlock_override/code/airlock_override.dm +++ b/modular_skyrat/modules/airlock_override/code/airlock_override.dm @@ -145,7 +145,7 @@ GLOBAL_VAR_INIT(force_eng_override, FALSE) /proc/toggle_eng_override() if(!GLOB.force_eng_override) GLOB.force_eng_override = TRUE - minor_announce("Engineering staff will have expanded access to areas of the station during the emergency.", "Engineering Emergency", sound_override = 'sound/misc/notice1.ogg') + minor_announce("Engineering staff will have expanded access to areas of the station during the emergency.", "Engineering Emergency", sound_override = 'sound/announcer/notice/notice1.ogg') SEND_GLOBAL_SIGNAL(COMSIG_GLOB_FORCE_ENG_OVERRIDE, TRUE) SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("engineer override access", "enabled")) else diff --git a/modular_skyrat/modules/alerts/code/alert_sound_to_playing.dm b/modular_skyrat/modules/alerts/code/alert_sound_to_playing.dm index 5e110cc2a9378..4ec4ccd4443ae 100644 --- a/modular_skyrat/modules/alerts/code/alert_sound_to_playing.dm +++ b/modular_skyrat/modules/alerts/code/alert_sound_to_playing.dm @@ -14,6 +14,6 @@ else var/area/A = get_area(M) if(is_type_in_typecache(A, quiet_areas)) //These areas don't hear it as loudly - M.playsound_local(get_turf(M), S, 10, FALSE) + M.playsound_local(get_turf(M), S, 30, FALSE) else M.playsound_local(get_turf(M), S, 70, FALSE) diff --git a/modular_skyrat/modules/alerts/code/default_announcer.dm b/modular_skyrat/modules/alerts/code/default_announcer.dm index 86add70db5815..01b7e50ac0261 100644 --- a/modular_skyrat/modules/alerts/code/default_announcer.dm +++ b/modular_skyrat/modules/alerts/code/default_announcer.dm @@ -1,9 +1,9 @@ /datum/centcom_announcer/default - welcome_sounds = list('sound/ai/default/welcome.ogg') + welcome_sounds = list('sound/announcer/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_AIMALF = 'sound/announcer/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', diff --git a/modular_skyrat/modules/alt_vox/code/vox_procs.dm b/modular_skyrat/modules/alt_vox/code/vox_procs.dm index 24782dec56108..00d6945d004e5 100644 --- a/modular_skyrat/modules/alt_vox/code/vox_procs.dm +++ b/modular_skyrat/modules/alt_vox/code/vox_procs.dm @@ -16,7 +16,7 @@ set desc = "Display a list of vocal words to announce to the crew." set category = "AI Commands" - if(incapacitated()) + if(incapacitated) return var/dat = {" @@ -77,7 +77,7 @@ last_announcement = message - if(incapacitated()) + if(incapacitated) return if(control_disabled) @@ -188,7 +188,7 @@ set desc = "Switch your VOX announcement voice!" set category = "AI Commands" - if(incapacitated()) + if(incapacitated) return var/selection = tgui_input_list(src, "Please select a new VOX voice:", "VOX VOICE", vox_voices) if(selection == null) @@ -203,7 +203,7 @@ set desc = "Display the list of recently pressed vox lines." set category = "AI Commands" - if(incapacitated()) + if(incapacitated) return to_chat(src, vox_word_string) diff --git a/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm b/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm index 49e4751e49829..5e4edfac7f8c2 100644 --- a/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm +++ b/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm @@ -93,6 +93,7 @@ "Blueshield", "Command Bodyguard", "Executive Protection Agent", + "Command Protection Officer", ) /datum/job/botanist @@ -269,6 +270,7 @@ "Forensic Scientist", "Forensic Technician", "Private Investigator", + "CID Officer", ) /datum/job/doctor @@ -363,6 +365,7 @@ "Central Command Representative", "Central Command Liason", "Corporate Liason", + "Corporate Consultant", ) /datum/job/orderly @@ -461,6 +464,8 @@ "Security Cadet", "Junior Officer", "Security Assistant", + "Security Specialist", + "Defense Contractor", ) /datum/job/shaft_miner @@ -472,6 +477,8 @@ "Prospector", "Spelunker", "Apprentice Miner", + "Dredger", + "Contract Miner", ) /datum/job/station_engineer diff --git a/modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm b/modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm index 64e199150f2c0..92ba9ac94659a 100644 --- a/modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm +++ b/modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm @@ -373,7 +373,7 @@ loaded_magazine.update_appearance() flick("ammobench_process", src) use_energy(3000 JOULES) - playsound(loc, 'sound/machines/piston_raise.ogg', 60, 1) + playsound(loc, 'sound/machines/piston/piston_raise.ogg', 60, 1) else qdel(new_casing) ammo_fill_finish(FALSE) @@ -394,7 +394,7 @@ if(successfully) playsound(loc, 'sound/machines/ping.ogg', 40, TRUE) else - playsound(loc, 'sound/machines/buzz-sigh.ogg', 40, TRUE) + playsound(loc, 'sound/machines/buzz/buzz-sigh.ogg', 40, TRUE) update_appearance() busy = FALSE if(timer_id) @@ -545,7 +545,7 @@ flick("h_lathe_load", src) update_appearance() update_ammotypes() - playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1) + playsound(loc, 'sound/items/weapons/autoguninsert.ogg', 35, 1) return TRUE if(istype(O, /obj/item/disk/ammo_workbench)) if(!user.transferItemToLoc(O, src)) @@ -554,7 +554,7 @@ to_chat(user, span_notice("You insert [O] to into [src]'s floppydisk port.")) flick("h_lathe_load", src) update_appearance() - playsound(loc, 'sound/machines/terminal_insert_disc.ogg', 35, 1) + playsound(loc, 'sound/machines/terminal/terminal_insert_disc.ogg', 35, 1) return TRUE return FALSE diff --git a/modular_skyrat/modules/apc_arcing/code/apc.dm b/modular_skyrat/modules/apc_arcing/code/apc.dm index 6b6fd71404bfb..348b0873b9f9d 100644 --- a/modular_skyrat/modules/apc_arcing/code/apc.dm +++ b/modular_skyrat/modules/apc_arcing/code/apc.dm @@ -32,7 +32,7 @@ if(length(shock_mobs)) var/mob/living/living_target = pick(shock_mobs) living_target.electrocute_act(rand(5, 25), "electrical arc") - playsound(get_turf(living_target), 'sound/magic/lightningshock.ogg', 75, TRUE) + playsound(get_turf(living_target), 'sound/effects/magic/lightningshock.ogg', 75, TRUE) Beam(living_target, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/beam.dmi', time = 5) /obj/machinery/power/apc/item_interaction(mob/living/user, obj/item/tool, list/modifiers) @@ -49,7 +49,7 @@ bronze.use(1) balloon_alert(user, "installed arc shielding") arc_shielded = TRUE - playsound(src, 'sound/items/rped.ogg', 20) + playsound(src, 'sound/items/tools/rped.ogg', 20) return ITEM_INTERACT_SUCCESS /obj/machinery/power/apc/wrench_act(mob/living/user, obj/item/tool) . = ..() diff --git a/modular_skyrat/modules/armaments/code/armament_component.dm b/modular_skyrat/modules/armaments/code/armament_component.dm index 2c1ff2b915c55..a089db93b9164 100644 --- a/modular_skyrat/modules/armaments/code/armament_component.dm +++ b/modular_skyrat/modules/armaments/code/armament_component.dm @@ -177,7 +177,7 @@ 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) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 70) /datum/component/armament/proc/select_armament(mob/user, datum/armament_entry/armament_entry) if(!inserted_card) diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm b/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm index 01056fa6c2051..0174c8fa0dac6 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm @@ -15,7 +15,7 @@ if(!regen_core.preserve()) balloon_alert(user, "organ decayed!") return - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) balloon_alert_to_viewers("[src] revitalizes [regen_core]!") return @@ -53,7 +53,7 @@ if(allow_transform < REQUIRED_OBSERVERS) balloon_alert_to_viewers("[src] rejects the request, not enough viewers!") - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) human_user.adjustBruteLoss(10) return @@ -63,7 +63,7 @@ if(choice != "Yes") balloon_alert_to_viewers("[src] feels rejected and punishes [human_user]!") - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) human_user.adjustBruteLoss(50) return @@ -79,7 +79,7 @@ ADD_TRAIT(human_user, TRAIT_RESISTCOLD, ROUNDSTART_TRAIT) ADD_TRAIT(human_user, TRAIT_PRIMITIVE, ROUNDSTART_TRAIT) - playsound(src, 'sound/magic/demon_dies.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_dies.ogg', 50, TRUE) meat_counter++ return ..() @@ -107,7 +107,7 @@ else meat_counter++ - playsound(get_turf(src),'sound/magic/demon_consume.ogg', 100, TRUE) + playsound(get_turf(src),'sound/effects/magic/demon_consume.ogg', 100, TRUE) var/delivery_key = viewable_living.fingerprintslast //key of whoever brought the body var/mob/living/delivery_mob = get_mob_by_key(delivery_key) //mob of said key diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm b/modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm index a8df699a7358e..6feaf522f5480 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm @@ -4,7 +4,7 @@ /obj/structure/spawner/lavaland/attackby(obj/item/attacking_item, mob/user, params) if(istype(attacking_item, /obj/item/cursed_dagger)) - playsound(get_turf(src), 'sound/magic/demon_attack1.ogg', 50, TRUE) + playsound(get_turf(src), 'sound/effects/magic/demon_attack1.ogg', 50, TRUE) cursed = !cursed if(cursed) src.add_atom_colour("#41007e", TEMPORARY_COLOUR_PRIORITY) diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm b/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm index 5fc751d41d4e6..4fe43d1f82ab3 100644 --- a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm +++ b/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm @@ -125,7 +125,7 @@ continue to_chat(select_mob, span_userdanger("The planet stirs... another monster has arrived!")) - playsound(get_turf(select_mob), 'sound/magic/demon_attack1.ogg', 50, TRUE) + playsound(get_turf(select_mob), 'sound/effects/magic/demon_attack1.ogg', 50, TRUE) flash_color(select_mob, flash_color = "#FF0000", flash_time = 3 SECONDS) var/megafauna_choice = pick( diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm b/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm index e2e0a53a3475f..1510903bd7dcc 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm +++ b/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm @@ -104,5 +104,5 @@ to_chat(living_user, span_warning("[src] leaps from you satisfied and begins to grossly assemble itself!")) var/type = pick(/obj/structure/spawner/lavaland, /obj/structure/spawner/lavaland/goliath, /obj/structure/spawner/lavaland/legion) new type(user.loc) - playsound(get_turf(src), 'sound/magic/demon_attack1.ogg', 50, TRUE) + playsound(get_turf(src), 'sound/effects/magic/demon_attack1.ogg', 50, TRUE) qdel(src) diff --git a/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm b/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm index bcac6a17418a6..84d9abb2f592c 100644 --- a/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm +++ b/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm @@ -41,7 +41,7 @@ if(istype(I, /obj/item/ash_staff) && user.mind.has_antag_datum(/datum/antagonist/ashwalker)) var/obj/item/ash_staff/target_staff = I target_staff.staff_time = world.time + 5 MINUTES - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) to_chat(user, span_notice("The tendril permits you to have more time to corrupt the world with ashes.")) return return ..() diff --git a/modular_skyrat/modules/assault_operatives/code/base_alarm.dm b/modular_skyrat/modules/assault_operatives/code/base_alarm.dm index e27756ca7f3bc..dae5109a7ceb6 100644 --- a/modular_skyrat/modules/assault_operatives/code/base_alarm.dm +++ b/modular_skyrat/modules/assault_operatives/code/base_alarm.dm @@ -42,7 +42,7 @@ /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) + playsound(src, 'sound/machines/pda_button/pda_button1.ogg', 100) trigger_alarm() /obj/machinery/base_alarm/attack_ai(mob/user) diff --git a/modular_skyrat/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm b/modular_skyrat/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm index 8c24baad5c7cd..d492d249fa0b0 100644 --- a/modular_skyrat/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm +++ b/modular_skyrat/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm @@ -36,7 +36,7 @@ break var/mob/candidate = pick_n_take(candidates) assigned += candidate.mind - candidate.mind.set_assigned_role(SSjob.GetJobType(/datum/job/assault_operative)) + candidate.mind.set_assigned_role(SSjob.get_job_type(/datum/job/assault_operative)) candidate.mind.special_role = ROLE_ASSAULT_OPERATIVE GLOB.pre_setup_antags += candidate.mind return TRUE diff --git a/modular_skyrat/modules/assault_operatives/code/interrogator.dm b/modular_skyrat/modules/assault_operatives/code/interrogator.dm index 6c61caaf498d8..a685f09cc8976 100644 --- a/modular_skyrat/modules/assault_operatives/code/interrogator.dm +++ b/modular_skyrat/modules/assault_operatives/code/interrogator.dm @@ -83,7 +83,7 @@ processing = FALSE locked = FALSE human_occupant = null - playsound(src, 'sound/machines/buzz-two.ogg', 100) + playsound(src, 'sound/machines/buzz/buzz-two.ogg', 100) balloon_alert_to_viewers("process aborted!") if(timer_id) deltimer(timer_id) @@ -120,7 +120,7 @@ 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) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 100) return start_extract() @@ -136,10 +136,10 @@ /obj/machinery/interrogator/proc/stage_one() if(!check_requirements()) say("Critical error! Aborting.") - playsound(src, 'sound/machines/scanbuzz.ogg', 100) + playsound(src, 'sound/machines/scanner/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) + playsound(loc, 'sound/items/tools/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) @@ -147,20 +147,20 @@ /obj/machinery/interrogator/proc/stage_two() if(!check_requirements()) say("Critical error! Aborting.") - playsound(src, 'sound/machines/scanbuzz.ogg', 100) + playsound(src, 'sound/machines/scanner/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) + playsound(src, 'sound/items/tools/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) + playsound(src, 'sound/machines/scanner/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") diff --git a/modular_skyrat/modules/assault_operatives/code/turrets.dm b/modular_skyrat/modules/assault_operatives/code/turrets.dm index 1a4ef8975ca9a..2fc64725bbc7c 100644 --- a/modular_skyrat/modules/assault_operatives/code/turrets.dm +++ b/modular_skyrat/modules/assault_operatives/code/turrets.dm @@ -13,7 +13,7 @@ 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' + stun_projectile_sound = 'sound/items/weapons/taser.ogg' max_integrity = 600 armor_type = /datum/armor/assaultops_shuttle @@ -35,6 +35,6 @@ icon_state = "standard_stun" base_icon_state = "standard" stun_projectile = /obj/projectile/energy/electrode - stun_projectile_sound = 'sound/weapons/taser.ogg' + stun_projectile_sound = 'sound/items/weapons/taser.ogg' lethal_projectile = /obj/projectile/beam/laser/heavylaser - lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' + lethal_projectile_sound = 'sound/items/weapons/lasercannonfire.ogg' diff --git a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm b/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm index ccc2cbbb132d1..89fd12bd40744 100644 --- a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm +++ b/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm @@ -272,7 +272,7 @@ SUBSYSTEM_DEF(area_spawn) * Attempts to find a location using an algorithm to spawn the desired atom. */ /datum/area_spawn/proc/try_spawn() - if(SSmapping.config.map_name in blacklisted_stations) + if(SSmapping.current_map.map_name in blacklisted_stations) return // Turfs that are available @@ -288,7 +288,7 @@ SUBSYSTEM_DEF(area_spawn) if(!LAZYLEN(available_turfs)) if(!optional) - log_mapping("[src.type] could not find any suitable turfs on map [SSmapping.config.map_name]!") + log_mapping("[src.type] could not find any suitable turfs on map [SSmapping.current_map.map_name]!") SSarea_spawn.failed_area_spawns += src.type return @@ -326,7 +326,7 @@ SUBSYSTEM_DEF(area_spawn) * Spawn the atoms. */ /datum/area_spawn_over/proc/try_spawn() - if(SSmapping.config.map_name in blacklisted_stations) + if(SSmapping.current_map.map_name in blacklisted_stations) return for(var/area_type in target_areas) diff --git a/modular_skyrat/modules/automapper/code/automapper_subsystem.dm b/modular_skyrat/modules/automapper/code/automapper_subsystem.dm index 562af4c787a4d..2e95e8bbb041c 100644 --- a/modular_skyrat/modules/automapper/code/automapper_subsystem.dm +++ b/modular_skyrat/modules/automapper/code/automapper_subsystem.dm @@ -41,7 +41,7 @@ SUBSYSTEM_DEF(automapper) // !builtin is a magic code for built in maps, ie CentCom levels. // We'll pretend it's loaded with the station z-level, because they by definition they are loaded before the station z-levels. - var/requires_builtin = (required_map == AUTOMAPPER_MAP_BUILTIN) && ((SSmapping.config.map_file in map_names) || SSmapping.config.map_file == map_names) + var/requires_builtin = (required_map == AUTOMAPPER_MAP_BUILTIN) && ((SSmapping.current_map.map_file in map_names) || SSmapping.current_map.map_file == map_names) if(!requires_builtin && !(required_map in map_names)) continue @@ -72,7 +72,7 @@ SUBSYSTEM_DEF(automapper) if(!islist(map_names)) map_names = list(map_names) for(var/datum/map_template/automap_template/iterating_template as anything in preloaded_map_templates) - if(iterating_template.affects_builtin_map && ((SSmapping.config.map_file in map_names) || SSmapping.config.map_file == map_names)) + if(iterating_template.affects_builtin_map && ((SSmapping.current_map.map_file in map_names) || SSmapping.current_map.map_file == map_names)) // CentCom already started loading objects, place them in the netherzone for(var/turf/old_turf as anything in iterating_template.get_affected_turfs(iterating_template.load_turf, FALSE)) init_contents(old_turf) diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm b/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm index e2fd442e1de2d..15cdf821333f9 100644 --- a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm +++ b/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm @@ -21,7 +21,7 @@ melee_damage_upper = 10 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' combat_mode = TRUE status_flags = CANPUSH @@ -50,7 +50,7 @@ melee_damage_upper = 20 attack_verb_continuous = "slashes" attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH @@ -85,7 +85,7 @@ /mob/living/basic/abductor/ranged/Initialize(mapload) . = ..() - AddComponent(/datum/component/ranged_attacks, projectile_sound = 'sound/weapons/laser.ogg', projectile_type = /obj/projectile/beam/laser) + AddComponent(/datum/component/ranged_attacks, projectile_sound = 'sound/items/weapons/laser.ogg', projectile_type = /obj/projectile/beam/laser) // Tankier variant diff --git a/modular_skyrat/modules/barricades/code/barricade.dm b/modular_skyrat/modules/barricades/code/barricade.dm index a3faa5ebef9c1..d15bf93fb8673 100644 --- a/modular_skyrat/modules/barricades/code/barricade.dm +++ b/modular_skyrat/modules/barricades/code/barricade.dm @@ -123,7 +123,7 @@ if(!do_after(user, 2 SECONDS, src)) return TRUE - playsound(src, 'sound/items/wirecutter.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/wirecutter.ogg', 25, TRUE) user.visible_message(span_notice("[user] removed the barbed wire on [src]."), span_notice("You removed the barbed wire on [src].")) modify_max_integrity(max_integrity - 50) @@ -386,7 +386,7 @@ to_chat(user, span_warning("[src] cannot be folded up while damaged!")) return CLICK_ACTION_BLOCKING user.visible_message(span_notice("[user] folds [src] up!"), span_notice("You neatly fold [src] up!")) - playsound(src, 'sound/items/ratchet.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/ratchet.ogg', 25, TRUE) fold_up() return CLICK_ACTION_SUCCESS return ..() @@ -476,7 +476,7 @@ user.visible_message(span_notice("[user] attaches[choice] to [src]."), span_notice("You attach [choice] to [src].")) - playsound(src, 'sound/items/screwdriver.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/screwdriver.ogg', 25, TRUE) update_icon() /obj/structure/deployable_barricade/metal/examine(mob/user) @@ -511,7 +511,7 @@ user.visible_message(span_notice("[user] starts welding the damage on [src]."), span_notice("You start welding the damage on [src].")) - playsound(src, 'sound/items/welder2.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/welder2.ogg', 25, TRUE) if(!do_after(user, 5 SECONDS, src)) return TRUE @@ -527,14 +527,14 @@ span_notice("You weld the damage on [src].")) repair_damage(150) update_icon() - playsound(src, 'sound/items/welder2.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/welder2.ogg', 25, TRUE) return TRUE /obj/structure/deployable_barricade/metal/screwdriver_act(mob/living/user, obj/item/I) switch(build_state) if(BARRICADE_METAL_ANCHORED) //Protection panel removed step. Screwdriver to put the panel back, wrench to unsecure the anchor bolts - playsound(src, 'sound/items/screwdriver.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/screwdriver.ogg', 25, TRUE) if(!do_after(user, 1 SECONDS, src)) return TRUE user.visible_message (span_notice ("[user] secures the panel on [src]."), @@ -543,7 +543,7 @@ return TRUE if(BARRICADE_METAL_FIRM) //Fully constructed step. Use screwdriver to remove the protection panels to reveal the bolts - playsound(src, 'sound/items/screwdriver.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/screwdriver.ogg', 25, TRUE) if(!do_after(user, 1 SECONDS, src)) return TRUE @@ -557,7 +557,7 @@ /obj/structure/deployable_barricade/metal/wrench_act(mob/living/user, obj/item/I) switch(build_state) if(BARRICADE_METAL_ANCHORED) //Protection panel removed step. Screwdriver to put the panel back, wrench to unsecure the anchor bolts - playsound(src, 'sound/items/ratchet.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/ratchet.ogg', 25, TRUE) if(!do_after(user, 1 SECONDS, src)) return TRUE user.visible_message (span_notice ("[user] loosens the anchor bolts on [src]."), @@ -579,7 +579,7 @@ to_chat(user, span_warning("There is already a barricade here.")) return TRUE - playsound(src, 'sound/items/ratchet.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/ratchet.ogg', 25, TRUE) if(!do_after(user, 1 SECONDS, src)) return TRUE @@ -598,7 +598,7 @@ user.visible_message(span_notice("[user] begins to disassemble [src]."), span_notice("You start to disassemble [src].")) - playsound(src, 'sound/items/crowbar.ogg', 25, 1) + playsound(src, 'sound/items/tools/crowbar.ogg', 25, 1) if(!do_after(user, 5 SECONDS, src)) return TRUE @@ -616,7 +616,7 @@ user.visible_message(span_notice("[user] begins to detach the armor plates from [src]."), span_notice("You begin to detach the armor plates from [src].")) - playsound(src, 'sound/items/crowbar.ogg', 25, 1) + playsound(src, 'sound/items/tools/crowbar.ogg', 25, 1) if(!do_after(user, 5 SECONDS, src)) return TRUE @@ -680,7 +680,7 @@ user.visible_message(span_notice("[user] begins to disassemble [src]."), span_notice("You start to disassemble [src].")) - playsound(src, 'sound/items/crowbar.ogg', 25, 1) + playsound(src, 'sound/items/tools/crowbar.ogg', 25, 1) if(!do_after(user, 5 SECONDS, src)) return TRUE @@ -710,7 +710,7 @@ /obj/structure/deployable_barricade/metal/plasteel/proc/toggle_open(state, mob/living/user) if(state == closed) return - playsound(src, 'sound/items/ratchet.ogg', 25, 1) + playsound(src, 'sound/items/tools/ratchet.ogg', 25, 1) closed = !closed density = !density @@ -765,13 +765,13 @@ /obj/item/quickdeploy/attack_self(mob/user) to_chat(user, span_notice("You start deploying [src] in front of you.")) - playsound(src, 'sound/items/ratchet.ogg', 25, 1) + playsound(src, 'sound/items/tools/ratchet.ogg', 25, 1) if(!do_after(usr, delay, src)) return if(can_place(user)) //can_place() handles sending the error and success messages to the user var/obj/O = new thing_to_deploy(get_turf(user)) O.setDir(user.dir) - playsound(src, 'sound/items/ratchet.ogg', 25, TRUE) + playsound(src, 'sound/items/tools/ratchet.ogg', 25, TRUE) qdel(src) /obj/item/quickdeploy/proc/can_place(mob/user) diff --git a/modular_skyrat/modules/basic_mobs/code/chinchilla.dm b/modular_skyrat/modules/basic_mobs/code/chinchilla.dm index c52fd3cb1dddd..a4a59f2b0a9f6 100644 --- a/modular_skyrat/modules/basic_mobs/code/chinchilla.dm +++ b/modular_skyrat/modules/basic_mobs/code/chinchilla.dm @@ -34,7 +34,7 @@ ///In the case 'melee_damage_upper' is somehow raised above 0 attack_verb_continuous = "bites" attack_verb_simple = "bite" - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE ai_controller = /datum/ai_controller/basic_controller/chinchilla diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm b/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm index 57307e36649f9..cf66c8ab8ad77 100644 --- a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm +++ b/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm @@ -5,7 +5,7 @@ melee_damage_upper = 20 attack_verb_continuous = "cuts" attack_verb_simple = "cut" - attack_sound = 'sound/weapons/blade1.ogg' + attack_sound = 'sound/items/weapons/blade1.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH faction = list(ROLE_SYNDICATE) loot = list(/obj/effect/mob_spawn/corpse/human/cin_soldier) diff --git a/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm b/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm index e7afbf7aae747..d58911f0dab0f 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm +++ b/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm @@ -25,7 +25,7 @@ melee_damage_upper = 5 retreat_distance = 5 minimum_distance = 5 - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' gold_core_spawnable = HOSTILE_SPAWN loot = list(/obj/item/stack/sheet/bone) alert_sounds = list( diff --git a/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm b/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm index ee0ee204d3e5d..140828fbb15b7 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm +++ b/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm @@ -20,7 +20,7 @@ harm_intent_damage = 10 melee_damage_lower = 20 melee_damage_upper = 20 - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' gold_core_spawnable = HOSTILE_SPAWN //Since those can survive on Xen, I'm pretty sure they can thrive on any atmosphere diff --git a/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm b/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm index d95eeda1b3000..444c5d97f5fe5 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm +++ b/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm @@ -25,7 +25,7 @@ melee_damage_upper = 10 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/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) @@ -56,7 +56,7 @@ icon_state = "hecu_ranged" icon_living = "hecu_ranged" casingtype = /obj/item/ammo_casing/a50ae - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' + projectilesound = 'sound/items/weapons/gun/pistol/shot.ogg' loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_deagle) dodging = TRUE rapid_melee = 1 @@ -66,7 +66,7 @@ icon_state = "hecu_ranged_smg" icon_living = "hecu_ranged_smg" casingtype = /obj/item/ammo_casing/c34 - projectilesound = 'sound/weapons/gun/smg/shot.ogg' + projectilesound = 'sound/items/weapons/gun/smg/shot.ogg' loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_smg) /mob/living/simple_animal/hostile/blackmesa/sec @@ -90,7 +90,7 @@ melee_damage_upper = 7 attack_verb_continuous = "punches" attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/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 @@ -161,7 +161,7 @@ icon_state = "security_guard_ranged" icon_living = "security_guard_ranged" casingtype = /obj/item/ammo_casing/c9mm - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' + projectilesound = 'sound/items/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 @@ -221,6 +221,6 @@ icon_living = "blackops_ranged" casingtype = /obj/item/ammo_casing/c40sol projectilesound = 'modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg' - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/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/nihilanth.dm b/modular_skyrat/modules/black_mesa/code/mobs/nihilanth.dm index 19621cbe81e33..1b7c94ab66f02 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/nihilanth.dm +++ b/modular_skyrat/modules/black_mesa/code/mobs/nihilanth.dm @@ -12,7 +12,7 @@ maxHealth = 3000 health = 3000 atmos_requirements = null - projectilesound = 'sound/weapons/lasercannonfire.ogg' + projectilesound = 'sound/items/weapons/lasercannonfire.ogg' projectiletype = /obj/projectile/nihilanth ranged = TRUE rapid = 3 @@ -22,7 +22,7 @@ melee_damage_upper = 40 attack_verb_continuous = "lathes" attack_verb_simple = "lathe" - attack_sound = 'sound/weapons/punch1.ogg' + attack_sound = 'sound/items/weapons/punch1.ogg' status_flags = NONE del_on_death = TRUE wander = TRUE @@ -40,8 +40,8 @@ light_range = 2 armor_flag = ENERGY light_color = LIGHT_COLOR_BRIGHT_YELLOW - hitsound = 'sound/weapons/sear.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hitsound = 'sound/items/weapons/sear.ogg' + hitsound_wall = 'sound/items/weapons/effects/searwall.ogg' nondirectional_sprite = TRUE /mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/Aggro() diff --git a/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm b/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm index ff9542b126be0..ed1fadc65637b 100644 --- a/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm +++ b/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm @@ -29,7 +29,7 @@ melee_damage_upper = 10 retreat_distance = 5 minimum_distance = 5 - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' gold_core_spawnable = FRIENDLY_SPAWN loot = list(/obj/item/stack/sheet/bone) alert_sounds = list( diff --git a/modular_skyrat/modules/black_mesa/code/shield_pylon.dm b/modular_skyrat/modules/black_mesa/code/shield_pylon.dm index b05cf664d5154..20bc89e5f8438 100644 --- a/modular_skyrat/modules/black_mesa/code/shield_pylon.dm +++ b/modular_skyrat/modules/black_mesa/code/shield_pylon.dm @@ -91,6 +91,6 @@ shielded_mobs[iterating_mob] = null shielded_mobs -= iterating_mob shielded_mobs = null - playsound(src, 'sound/magic/lightningbolt.ogg', 100, TRUE) + playsound(src, 'sound/effects/magic/lightningbolt.ogg', 100, TRUE) new /obj/item/grenade/xen_crystal(get_turf(src)) return ..() diff --git a/modular_skyrat/modules/black_mesa/code/shockplant.dm b/modular_skyrat/modules/black_mesa/code/shockplant.dm index 78b357677cb20..980bbd38358aa 100644 --- a/modular_skyrat/modules/black_mesa/code/shockplant.dm +++ b/modular_skyrat/modules/black_mesa/code/shockplant.dm @@ -37,5 +37,5 @@ if(faction_check_atom(entering_mob)) return tesla_zap(src, shock_range, shock_power, shocked_targets = list(entering_mob)) - playsound(src, 'sound/magic/lightningbolt.ogg', 100, TRUE) + playsound(src, 'sound/effects/magic/lightningbolt.ogg', 100, TRUE) COOLDOWN_START(src, shock_cooldown_timer, shock_cooldown) diff --git a/modular_skyrat/modules/black_mesa/code/turfs.dm b/modular_skyrat/modules/black_mesa/code/turfs.dm index e026f2d933153..634e6e12afcc0 100644 --- a/modular_skyrat/modules/black_mesa/code/turfs.dm +++ b/modular_skyrat/modules/black_mesa/code/turfs.dm @@ -85,7 +85,7 @@ 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) + playsound(unlucky_mob, 'sound/items/weapons/sear.ogg', 100, TRUE) /turf/open/water/electric name = "electric water" diff --git a/modular_skyrat/modules/black_mesa/code/turrets.dm b/modular_skyrat/modules/black_mesa/code/turrets.dm index 724f782e854a3..74f762a63b6c3 100644 --- a/modular_skyrat/modules/black_mesa/code/turrets.dm +++ b/modular_skyrat/modules/black_mesa/code/turrets.dm @@ -7,7 +7,7 @@ max_integrity = 120 base_icon_state = "syndie" lethal_projectile = /obj/projectile/beam/emitter - lethal_projectile_sound = 'sound/weapons/laser.ogg' + lethal_projectile_sound = 'sound/items/weapons/laser.ogg' /obj/machinery/porta_turret/black_mesa/assess_perp(mob/living/carbon/human/perp) return 10 @@ -19,7 +19,7 @@ name = "Heavy Defence Turret" max_integrity = 200 lethal_projectile = /obj/projectile/beam/laser/heavylaser - lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' + lethal_projectile_sound = 'sound/items/weapons/lasercannonfire.ogg' /obj/item/storage/toolbox/emergency/turret/mesa name = "USMC stationary defense deployment system" @@ -32,7 +32,7 @@ if(I.tool_behaviour == TOOL_WRENCH && user.combat_mode) user.visible_message(span_danger("[user] bashes [src] with [I]!"), \ span_danger("You bash [src] with [I]!"), null, COMBAT_MESSAGE_RANGE) - playsound(src, "sound/items/drill_use.ogg", 80, TRUE, -1) + playsound(src, "sound/items/tools/drill_use.ogg", 80, TRUE, -1) var/obj/machinery/porta_turret/syndicate/pod/toolbox/mesa/turret = new(get_turf(loc)) turret.faction = list(FACTION_HECU) qdel(src) diff --git a/modular_skyrat/modules/black_mesa/code/uber_teleporter.dm b/modular_skyrat/modules/black_mesa/code/uber_teleporter.dm index 15b72c493b143..549863e8d30f4 100644 --- a/modular_skyrat/modules/black_mesa/code/uber_teleporter.dm +++ b/modular_skyrat/modules/black_mesa/code/uber_teleporter.dm @@ -6,7 +6,7 @@ /obj/item/uber_teleporter/attack_self(mob/living/user, modifiers) . = ..() - playsound(get_turf(user), 'sound/weapons/zapbang.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/items/weapons/zapbang.ogg', 50, TRUE) var/area/area_to_teleport_to = tgui_input_list(usr, "Area to teleport to", "Teleport", GLOB.teleportlocs) if(!area_to_teleport_to) return @@ -45,4 +45,4 @@ if(!success) do_teleport(user, possible_turfs, channel = TELEPORT_CHANNEL_FREE) - playsound(get_turf(user), 'sound/weapons/zapbang.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/items/weapons/zapbang.ogg', 50, TRUE) diff --git a/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm b/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm index cd59940084cbe..e0acc7ff091a1 100644 --- a/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm +++ b/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm @@ -105,7 +105,7 @@ 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) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE, SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) return FALSE // mining_stat = 0, we are ready to go return TRUE diff --git a/modular_skyrat/modules/bodyparts/code/_mutant_bodyparts.dm b/modular_skyrat/modules/bodyparts/code/_mutant_bodyparts.dm index d7bb01a3ff40e..3777da76a64a4 100644 --- a/modular_skyrat/modules/bodyparts/code/_mutant_bodyparts.dm +++ b/modular_skyrat/modules/bodyparts/code/_mutant_bodyparts.dm @@ -39,8 +39,8 @@ limb_id = SPECIES_MAMMAL unarmed_attack_verbs = list("slash") unarmed_attack_effect = ATTACK_EFFECT_CLAW - unarmed_attack_sound = 'sound/weapons/slash.ogg' - unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' /obj/item/bodypart/arm/right/mutant @@ -48,8 +48,8 @@ limb_id = SPECIES_MAMMAL unarmed_attack_verbs = list("slash") unarmed_attack_effect = ATTACK_EFFECT_CLAW - unarmed_attack_sound = 'sound/weapons/slash.ogg' - unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' /obj/item/bodypart/leg/left/mutant diff --git a/modular_skyrat/modules/bodyparts/code/ghoul_bodyparts.dm b/modular_skyrat/modules/bodyparts/code/ghoul_bodyparts.dm index 0a9cc29aa76ba..8947fdbc86cca 100644 --- a/modular_skyrat/modules/bodyparts/code/ghoul_bodyparts.dm +++ b/modular_skyrat/modules/bodyparts/code/ghoul_bodyparts.dm @@ -61,8 +61,8 @@ unarmed_damage_high = 5 //highest possible punch damage unarmed_attack_verbs = list("punch") unarmed_attack_effect = ATTACK_EFFECT_PUNCH - unarmed_attack_sound = 'sound/weapons/punch1.ogg' - unarmed_miss_sound = 'sound/weapons/punchmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/punch1.ogg' + unarmed_miss_sound = 'sound/items/weapons/punchmiss.ogg' brute_modifier = GHOUL_BRUTE_MODIFIER burn_modifier = GHOUL_BURN_MODIFIER @@ -74,8 +74,8 @@ unarmed_damage_high = 5 //highest possible punch damage unarmed_attack_verbs = list("punch") unarmed_attack_effect = ATTACK_EFFECT_PUNCH - unarmed_attack_sound = 'sound/weapons/punch1.ogg' - unarmed_miss_sound = 'sound/weapons/punchmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/punch1.ogg' + unarmed_miss_sound = 'sound/items/weapons/punchmiss.ogg' brute_modifier = GHOUL_BRUTE_MODIFIER burn_modifier = GHOUL_BURN_MODIFIER diff --git a/modular_skyrat/modules/bongs/code/bong.dm b/modular_skyrat/modules/bongs/code/bong.dm index 614ccfca3432c..3b28f7367faca 100644 --- a/modular_skyrat/modules/bongs/code/bong.dm +++ b/modular_skyrat/modules/bongs/code/bong.dm @@ -91,7 +91,7 @@ if(!packed_item || !lit) return hit_mob.visible_message(span_notice("[user] starts [hit_mob == user ? "taking a hit from [src]." : "forcing [hit_mob] to take a hit from [src]!"]"), hit_mob == user ? span_notice("You start taking a hit from [src].") : span_userdanger("[user] starts forcing you to take a hit from [src]!")) - playsound(src, 'sound/chemistry/heatdam.ogg', 50, TRUE) + playsound(src, 'sound/effects/chemistry/heatdam.ogg', 50, TRUE) if(!do_after(user, 40)) return to_chat(hit_mob, span_notice("You finish taking a hit from the [src].")) @@ -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_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) //BUBBER EDIT: STOP MAKING THIS GOD AWFUL SOUND 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_skyrat/master_files/sound/effects/lungbust_cough1.ogg','modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE) //BUBBER EDIT: STOP MAKING THIS GOD AWFUL SOUND hit_mob.emote("cough") if(bong_hits <= 0) balloon_alert(hit_mob, "out of uses!") diff --git a/modular_skyrat/modules/borgs/code/robot_items.dm b/modular_skyrat/modules/borgs/code/robot_items.dm index 3bc966b2814c9..a1e1f952b17f0 100644 --- a/modular_skyrat/modules/borgs/code/robot_items.dm +++ b/modular_skyrat/modules/borgs/code/robot_items.dm @@ -95,7 +95,7 @@ /// Can it hold mobs? (Dangerous, it is recommended to leave this to FALSE) var/can_hold_mobs = FALSE /// Audio for using the hydraulic clamp. - var/clamp_sound = 'sound/mecha/hydraulic.ogg' + var/clamp_sound = 'sound/vehicles/mecha/hydraulic.ogg' /// Volume of the clamp's loading and unloading noise. var/clamp_sound_volume = 25 /// Cooldown for the clamp. @@ -463,7 +463,7 @@ desc = "A cyborg fitted module resembling the jaws of life." icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' icon_state = "jaws_pry_cyborg" - usesound = 'sound/items/jaws_pry.ogg' + usesound = 'sound/items/tools/jaws_pry.ogg' force = 10 toolspeed = 0.5 @@ -472,25 +472,25 @@ . += " It's fitted with a [tool_behaviour == TOOL_CROWBAR ? "prying" : "cutting"] head." /obj/item/crowbar/cyborg/power/attack_self(mob/user) - playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/items/tools/change_jaws.ogg', 50, TRUE) if(tool_behaviour == TOOL_CROWBAR) tool_behaviour = TOOL_WIRECUTTER to_chat(user, span_notice("You attach the cutting jaws to [src].")) icon_state = "jaws_cutter_cyborg" - usesound = 'sound/items/jaws_cut.ogg' + usesound = 'sound/items/tools/jaws_cut.ogg' else tool_behaviour = TOOL_CROWBAR to_chat(user, span_notice("You attach the prying jaws to [src].")) icon_state = "jaws_pry_cyborg" - usesound = 'sound/items/jaws_pry.ogg' + usesound = 'sound/items/tools/jaws_pry.ogg' /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_state = "drill_screw_cyborg" - hitsound = 'sound/items/drill_hit.ogg' - usesound = 'sound/items/drill_use.ogg' + hitsound = 'sound/items/tools/drill_hit.ogg' + usesound = 'sound/items/tools/drill_use.ogg' toolspeed = 0.5 random_color = FALSE @@ -499,7 +499,7 @@ . += " It's fitted with a [tool_behaviour == TOOL_SCREWDRIVER ? "screw" : "bolt"] head." /obj/item/screwdriver/cyborg/power/attack_self(mob/user) - playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/items/tools/change_drill.ogg', 50, TRUE) if(tool_behaviour == TOOL_SCREWDRIVER) tool_behaviour = TOOL_WRENCH to_chat(user, span_notice("You attach the bolt bit to [src].")) @@ -575,7 +575,7 @@ /obj/item/borg_shapeshifter/proc/check_menu(mob/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.Adjacent(src)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE @@ -611,7 +611,7 @@ "Syndicate" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "synd_sec"), "Spider Clan" = image(icon = CYBORG_ICON_NINJA, icon_state = "ninja_engi"), //Bubber addition start - "Research" = image(icon = 'modular_zubbers/code/modules/borgs/sprites/robot_sci.dmi', icon_state = "research"), + "Research" = image(icon = 'modular_zubbers/code/modules/silicons/borgs/sprites/robot_sci.dmi', icon_state = "research"), //Bubber addition end )) var/model_selection = show_radial_menu(user, user, model_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 42, require_near = TRUE) @@ -778,7 +778,7 @@ 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_state = "synthtongue" - hitsound = 'sound/effects/attackblob.ogg' + hitsound = 'sound/effects/blob/attackblob.ogg' desc = "For giving affectionate kisses." item_flags = NOBLUDGEON @@ -792,10 +792,10 @@ 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) + playsound(borg, 'sound/effects/blob/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) + playsound(borg, 'sound/effects/blob/attackblob.ogg', 50, 1) return ITEM_INTERACT_SUCCESS else to_chat(user, span_warning("ERROR: [target] is on the Do Not Lick registry!")) @@ -848,7 +848,7 @@ whitelisted_item_description = "envelopes" item_weight_limit = WEIGHT_CLASS_NORMAL clamp_sound_volume = 25 - clamp_sound = 'sound/items/pshoom.ogg' + clamp_sound = 'sound/items/pshoom/pshoom.ogg' /obj/item/borg/forging_setup name = "integrated forging dispenser" diff --git a/modular_skyrat/modules/borgs/code/robot_upgrade.dm b/modular_skyrat/modules/borgs/code/robot_upgrade.dm index 3b61fd7053558..e0e1fe7d85e7c 100644 --- a/modular_skyrat/modules/borgs/code/robot_upgrade.dm +++ b/modular_skyrat/modules/borgs/code/robot_upgrade.dm @@ -16,11 +16,13 @@ items_to_add = list(/obj/item/scalpel/advanced, /obj/item/retractor/advanced, /obj/item/cautery/advanced, + /obj/item/blood_filter/advanced, /obj/item/healthanalyzer/advanced, ) items_to_remove = list( /obj/item/borg/cyborg_omnitool/medical, /obj/item/borg/cyborg_omnitool/medical, // Twice because you get two + /obj/item/blood_filter, /obj/item/healthanalyzer, ) @@ -251,7 +253,7 @@ borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]'s face!"), span_notice("You affectionally lick \the [mob]'s face!")) 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) + playsound(borg, 'sound/effects/blob/attackblob.ogg', 50, 1) return ITEM_INTERACT_SUCCESS /obj/item/quadborg_nose/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) @@ -293,7 +295,7 @@ smoke.start() sleep(0.2 SECONDS) for(var/i in 1 to 4) - playsound(borg, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, TRUE, -1) + playsound(borg, pick('sound/items/tools/drill_use.ogg', 'sound/items/tools/jaws_cut.ogg', 'sound/items/tools/jaws_pry.ogg', 'sound/items/tools/welder.ogg', 'sound/items/tools/ratchet.ogg'), 80, TRUE, -1) sleep(1.2 SECONDS) if(!prev_lockcharge) borg.SetLockdown(FALSE) diff --git a/modular_skyrat/modules/cargo/code/export_gate.dm b/modular_skyrat/modules/cargo/code/export_gate.dm index 5a5f8d721d9ec..ca8acdc932f42 100644 --- a/modular_skyrat/modules/cargo/code/export_gate.dm +++ b/modular_skyrat/modules/cargo/code/export_gate.dm @@ -167,7 +167,7 @@ scanline_timer = addtimer(CALLBACK(src, PROC_REF(set_scanline), "passive"), duration, TIMER_STOPPABLE) if(COOLDOWN_FINISHED(src, scanner_beep) && type != "passive") COOLDOWN_START(src, scanner_beep, 0.5 SECONDS) - playsound(src, type == "alarm" ? 'sound/machines/buzz-sigh.ogg' : 'sound/machines/chime.ogg', 45, TRUE) + playsound(src, type == "alarm" ? 'sound/machines/buzz/buzz-sigh.ogg' : 'sound/machines/chime.ogg', 45, TRUE) /obj/machinery/export_gate/proc/auto_scan(atom/movable/package) if(is_operational && istype(package, /obj/item/bounty_cube) && (!panel_open) && anchored) diff --git a/modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm b/modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm index 4548fe02f67dc..b5176b2ba528a 100644 --- a/modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm +++ b/modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm @@ -71,7 +71,7 @@ var/obj/item/gbp_punchcard/punchcard = attacking_item var/amount_to_reward = punchcard.punches * GBP_PUNCH_REWARD if(!punchcard.punches) - playsound(src, 'sound/machines/scanbuzz.ogg', 100) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 100) say("You can't redeem an unpunched card!") return @@ -88,7 +88,7 @@ return if(!card_used.registered_account || !istype(card_used.registered_account.account_job, /datum/job/assistant)) - playsound(src, 'sound/machines/scanbuzz.ogg', 100) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 100) say("You cannot redeem a punchcard without a valid assistant bank account!") return diff --git a/modular_skyrat/modules/cargo/code/packs.dm b/modular_skyrat/modules/cargo/code/packs.dm index dde7621986424..dbf867c999864 100644 --- a/modular_skyrat/modules/cargo/code/packs.dm +++ b/modular_skyrat/modules/cargo/code/packs.dm @@ -51,7 +51,7 @@ cost = CARGO_CRATE_VALUE * 7 contains = list(/mob/living/basic/pet/cat/fennec = 2) crate_name = "fennec crate" - +/* BUBBER EDIT REMOVAL START /datum/supply_pack/critter/pitbull name = "Pitbull Crate" desc = "Contains three pitbulls. WARNING: These are NOT pedigree studs, and thus may be less than friendly." @@ -65,7 +65,7 @@ . = ..() for(var/i in 1 to 3) new /mob/living/basic/gorilla/pitbull(.) - +*/// BUBBER EDIT REMOVAL END /datum/supply_pack/critter/pitbull/pimpy name = "Pedigree Stud Pitbull Crate" desc = "Contains three pitbulls. Verified at the top of Mount Bullmore to be Pedigree Studs.." diff --git a/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm b/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm index 6107aa9fdfdb6..20b6a95b51d76 100644 --- a/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm +++ b/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm @@ -61,7 +61,7 @@ GLOBAL_LIST_EMPTY(cargo_marks) continue if(movable_content.anchored) continue - do_teleport(movable_content, moving_turf, asoundout = 'sound/magic/Disable_Tech.ogg') + do_teleport(movable_content, moving_turf, asoundout = 'sound/effects/magic/Disable_Tech.ogg') new /obj/effect/decal/cleanable/ash(target_turf) COOLDOWN_START(src, use_cooldown, 8 SECONDS) return ITEM_INTERACT_SUCCESS diff --git a/modular_skyrat/modules/cell_component/code/cell_component.dm b/modular_skyrat/modules/cell_component/code/cell_component.dm index f65939caa5e71..dbc4b6800e726 100644 --- a/modular_skyrat/modules/cell_component/code/cell_component.dm +++ b/modular_skyrat/modules/cell_component/code/cell_component.dm @@ -161,7 +161,7 @@ component_cell_out_of_charge/component_cell_removed proc using loc where necessa if(inserted_cell) to_chat(user, span_notice("You remove [inserted_cell] from [equipment]!")) - playsound(equipment, 'sound/weapons/magout.ogg', 40, TRUE) + playsound(equipment, 'sound/items/weapons/magout.ogg', 40, TRUE) inserted_cell.forceMove(get_turf(equipment)) INVOKE_ASYNC(user, TYPE_PROC_REF(/mob/living, put_in_hands), inserted_cell) inserted_cell = null @@ -188,7 +188,7 @@ component_cell_out_of_charge/component_cell_removed proc using loc where necessa return to_chat(user, span_notice("You insert [inserting_item] into [equipment]!")) - playsound(equipment, 'sound/weapons/magin.ogg', 40, TRUE) + playsound(equipment, 'sound/items/weapons/magin.ogg', 40, TRUE) inserted_cell = inserting_item inserting_item.forceMove(parent) handle_cell_overlays(FALSE) diff --git a/modular_skyrat/modules/cellguns/code/cellgun_cells.dm b/modular_skyrat/modules/cellguns/code/cellgun_cells.dm index 842ed421405db..3928be04513e2 100644 --- a/modular_skyrat/modules/cellguns/code/cellgun_cells.dm +++ b/modular_skyrat/modules/cellguns/code/cellgun_cells.dm @@ -55,7 +55,7 @@ is_toggled = !is_toggled //Changes the toggle to the reverse of what it is. src.ammo_type = is_toggled ? primary_mode : secondary_mode - playsound(loc,is_toggled ? 'sound/machines/defib_SaftyOn.ogg' : 'sound/machines/defib_saftyOff.ogg', 50) + playsound(loc,is_toggled ? 'sound/machines/defib/defib_SaftyOn.ogg' : 'sound/machines/defib/defib_SaftyOff.ogg', 50) if(medicell_examine) balloon_alert(user, "safety [is_toggled ? "enabled" : "disabled"]") diff --git a/modular_skyrat/modules/cellguns/code/medigun_research.dm b/modular_skyrat/modules/cellguns/code/medigun_research.dm index f7e6030cbbdfa..eab5ec509b684 100644 --- a/modular_skyrat/modules/cellguns/code/medigun_research.dm +++ b/modular_skyrat/modules/cellguns/code/medigun_research.dm @@ -239,6 +239,6 @@ /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, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT * 3, // Bubber Edit - Relocation cell no longer requires bluespace extract ) - build_path = /obj/item/device/custom_kit/empty_cell/relocator + build_path = /obj/item/weaponcell/medical/utility/relocation // Bubber Edit - Relocation cell no longer requires bluespace extract diff --git a/modular_skyrat/modules/clock_cult/code/actions/_action.dm b/modular_skyrat/modules/clock_cult/code/actions/_action.dm index bbc1347d3d3ca..5cbe6fb3c85dc 100644 --- a/modular_skyrat/modules/clock_cult/code/actions/_action.dm +++ b/modular_skyrat/modules/clock_cult/code/actions/_action.dm @@ -38,7 +38,7 @@ return ..(losing_mob) /datum/action/innate/clockcult/quick_bind/IsAvailable(feedback) - if(!IS_CLOCK(owner) || owner.incapacitated()) + if(!IS_CLOCK(owner) || owner.incapacitated) return FALSE return ..() diff --git a/modular_skyrat/modules/clock_cult/code/actions/recall_slab.dm b/modular_skyrat/modules/clock_cult/code/actions/recall_slab.dm index 4ab392ee633d7..318a9d97162e5 100644 --- a/modular_skyrat/modules/clock_cult/code/actions/recall_slab.dm +++ b/modular_skyrat/modules/clock_cult/code/actions/recall_slab.dm @@ -102,4 +102,4 @@ item_to_retrieve.forceMove(usr.drop_location()) item_to_retrieve.loc.visible_message(span_warning("[item_to_retrieve] suddenly appears!")) - playsound(get_turf(item_to_retrieve), 'sound/magic/summonitems_generic.ogg', 50, TRUE) + playsound(get_turf(item_to_retrieve), 'sound/effects/magic/summonitems_generic.ogg', 50, TRUE) diff --git a/modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm b/modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm index 1a0a53e83b00d..ce2e4d025a1bc 100644 --- a/modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm +++ b/modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm @@ -131,7 +131,7 @@ if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/clock_cult/code/items/weaponry.dm b/modular_skyrat/modules/clock_cult/code/items/weaponry.dm index cd36dc9584689..0cb1012021024 100644 --- a/modular_skyrat/modules/clock_cult/code/items/weaponry.dm +++ b/modular_skyrat/modules/clock_cult/code/items/weaponry.dm @@ -14,7 +14,7 @@ throwforce = 20 throw_speed = 4 armour_penetration = 10 - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("attacks", "pokes", "jabs", "tears", "gores") attack_verb_simple = list("attack", "poke", "jab", "tear", "gore") sharpness = SHARP_EDGED @@ -76,7 +76,7 @@ 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' + hitsound = 'sound/items/weapons/smash.ogg' /obj/item/clockwork/weapon/brass_battlehammer/Initialize(mapload) @@ -122,7 +122,7 @@ 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) + playsound(user, 'sound/effects/magic/lightningshock.ogg', 40) /obj/item/clockwork/weapon/brass_sword/attack_atom(obj/attacked_obj, mob/living/user, params) @@ -142,14 +142,14 @@ 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) + playsound(user, 'sound/effects/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 +/obj/item/gun/ballistic/bow/clockwork // SKYRAT TODO - Make Arrow icon independent from sprite 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' @@ -250,7 +250,7 @@ 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' + fire_sound = 'sound/items/weapons/gun/sniper/shot.ogg' show_bolt_icon = FALSE diff --git a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm b/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm index ba6ad76189b8c..d427c43352289 100644 --- a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm +++ b/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) melee_damage_upper = 24 attack_verb_continuous = "slices" attack_verb_simple = "slice" - attack_sound = 'sound/weapons/bladeslice.ogg' + attack_sound = 'sound/items/weapons/bladeslice.ogg' combat_mode = TRUE pass_flags = PASSTABLE mob_size = MOB_SIZE_LARGE @@ -71,7 +71,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) if(shield_health) damage_shield() - playsound(src, 'sound/hallucinations/veryfar_noise.ogg', 40, 1) + playsound(src, 'sound/effects/hallucinations/veryfar_noise.ogg', 40, 1) if(attacking_item == TOOL_WELDER) welder_act(user, attacking_item) @@ -106,7 +106,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders) to_chat(user, span_notice("You repair some of [src]'s damage.")) if(shield_health < MARAUDER_SHIELD_MAX) shield_health++ - playsound(src, 'sound/magic/charge.ogg', 60, TRUE) + playsound(src, 'sound/effects/magic/charge.ogg', 60, TRUE) return TRUE diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm b/modular_skyrat/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm index e79a270bdfc8d..b9933a3cde24a 100644 --- a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm +++ b/modular_skyrat/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm @@ -21,7 +21,7 @@ target_carbon.balloon_alert(invoker, "already restrained!") return FALSE - playsound(target_carbon, 'sound/weapons/handcuffs.ogg', 30, TRUE, -2) + playsound(target_carbon, 'sound/items/weapons/handcuffs.ogg', 30, TRUE, -2) target_carbon.visible_message(span_danger("[invoker] forms a well of energy around [target_carbon], brass appearing at their wrists!"),\ span_userdanger("[invoker] is trying to restrain you!")) diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/kindle.dm b/modular_skyrat/modules/clock_cult/code/scriptures/servitude/kindle.dm index 96552b952b3c4..b5267d39bf9f1 100644 --- a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/kindle.dm +++ b/modular_skyrat/modules/clock_cult/code/scriptures/servitude/kindle.dm @@ -39,7 +39,7 @@ hit_mob.visible_message(span_warning("[hit_mob] stares blankly, as a field of energy flows around them."), \ span_userdanger("You feel a slight shock as a wave of energy flows past you.")) - playsound(invoker, 'sound/magic/mm_hit.ogg', 50, TRUE) + playsound(invoker, 'sound/effects/magic/mm_hit.ogg', 50, TRUE) return TRUE //To make battles more fun, both sides can't bullshit stun hand the other @@ -58,7 +58,7 @@ to_chat(invoker, span_warning("Some force greater than you intervenes! [hit_mob] is protected by Nar'sie!")) to_chat(hit_mob, span_warning("You are protected by your faith to Nar'sie!")) - playsound(invoker, 'sound/magic/mm_hit.ogg', 50, TRUE) + playsound(invoker, 'sound/effects/magic/mm_hit.ogg', 50, TRUE) return TRUE //Successful Invokation @@ -87,7 +87,7 @@ hit_mob.client.color = "#BE8700" animate(hit_mob.client, color = client_color, time = 2.5 SECONDS) - playsound(invoker, 'sound/magic/staff_animation.ogg', 50, TRUE) + playsound(invoker, 'sound/effects/magic/staff_animation.ogg', 50, TRUE) return TRUE #undef EFFECT_TIME diff --git a/modular_skyrat/modules/clock_cult/code/structures/_structure.dm b/modular_skyrat/modules/clock_cult/code/structures/_structure.dm index d963bf70c8c20..e1b7ae797d6cd 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/_structure.dm +++ b/modular_skyrat/modules/clock_cult/code/structures/_structure.dm @@ -8,7 +8,7 @@ density = TRUE resistance_flags = FIRE_PROOF | ACID_PROOF break_message = span_warning("Sparks fly as the brass structure shatters across the ground.") //The message shown when a structure breaks - break_sound = 'sound/magic/clockwork/anima_fragment_death.ogg' //The sound played when a structure breaks + break_sound = 'sound/effects/magic/clockwork/anima_fragment_death.ogg' //The sound played when a structure breaks debris = list( /obj/structure/fluff/clockwork/alloy_shards/large = 1, /obj/structure/fluff/clockwork/alloy_shards/medium = 2, diff --git a/modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm b/modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm index f325e74551798..57027f1b6d39b 100644 --- a/modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm +++ b/modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm @@ -48,7 +48,7 @@ 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) + playsound(loc, 'sound/effects/magic/exit_blood.ogg', 60) to_chat(affected_mob, span_clockred("The last of your life is drained away...")) check_special_role(affected_mob) GLOB.clock_vitality += (affected_mob.client ? 30 : 10) // 100 (for clients) total in the ideal situation, since it'll take 7 pulses to go from full to crit diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi b/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi index 256f725926b32..c382230f2373d 100644 Binary files a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi and b/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi differ diff --git a/modular_skyrat/modules/clock_cult/sound/ocularwarden-target.ogg b/modular_skyrat/modules/clock_cult/sound/ocularwarden-target.ogg deleted file mode 100644 index 557437a672182..0000000000000 Binary files a/modular_skyrat/modules/clock_cult/sound/ocularwarden-target.ogg and /dev/null differ diff --git a/modular_skyrat/modules/clock_cult/sound/scripture_tier_up.ogg b/modular_skyrat/modules/clock_cult/sound/scripture_tier_up.ogg deleted file mode 100644 index 7a8d51a4c0845..0000000000000 Binary files a/modular_skyrat/modules/clock_cult/sound/scripture_tier_up.ogg and /dev/null differ diff --git a/modular_skyrat/modules/cme/code/cme.dm b/modular_skyrat/modules/cme/code/cme.dm index c6e3cca9b07cf..0bb288653945b 100644 --- a/modular_skyrat/modules/cme/code/cme.dm +++ b/modular_skyrat/modules/cme/code/cme.dm @@ -243,7 +243,7 @@ /obj/effect/cme/Initialize(mapload) . = ..() - playsound(src,'sound/weapons/resonator_fire.ogg',75,TRUE) + playsound(src,'sound/items/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") @@ -258,7 +258,7 @@ 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) + playsound(src,'sound/items/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) @@ -273,7 +273,7 @@ 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,'sound/items/weapons/resonator_blast.ogg',100,TRUE) playsound(src,'modular_skyrat/modules/cme/sound/cme.ogg', 100) qdel(src) @@ -281,7 +281,7 @@ burst() /obj/effect/cme/proc/anomalyNeutralize() - playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE) + playsound(src,'sound/items/weapons/resonator_blast.ogg',100,TRUE) new /obj/effect/particle_effect/fluid/smoke/bad(loc) color = COLOR_WHITE light_color = COLOR_WHITE @@ -290,7 +290,7 @@ new loot(loc) /obj/effect/cme/extreme/anomalyNeutralize() - playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE) + playsound(src,'sound/items/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)) @@ -302,7 +302,7 @@ new loot(loc) /obj/effect/cme/armageddon/anomalyNeutralize() - playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE) + playsound(src,'sound/items/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)) diff --git a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm index 1eb2a4627e188..ef31342433e51 100644 --- a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm +++ b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm @@ -74,7 +74,7 @@ if(design_delta > 0) say("Received [design_delta] new design[design_delta == 1 ? "" : "s"].") - playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE) + playsound(src, 'sound/machines/beep/twobeep_high.ogg', 50, TRUE) update_static_data_for_all_viewers() diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/ore_silo.dm b/modular_skyrat/modules/colony_fabricator/code/machines/ore_silo.dm index 1e10a1b2fc30e..6f71fb37498a0 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/ore_silo.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/ore_silo.dm @@ -9,7 +9,7 @@ /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) + playsound(src, 'sound/machines/beep/beep.ogg', 30, TRUE) AddElement(/datum/element/repackable, packed_type, 10 SECONDS) /obj/machinery/ore_silo/colony_lathe/default_deconstruction_crowbar() diff --git a/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm b/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm index dec98f4877eb0..824c4a9e4f983 100644 --- a/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm +++ b/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm @@ -49,7 +49,7 @@ if(!do_after(user, 3 SECONDS, target = source)) return - playsound(source, 'sound/items/ratchet.ogg', 50, TRUE) + playsound(source, 'sound/items/tools/ratchet.ogg', 50, TRUE) new item_to_pack_into(source.drop_location()) diff --git a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm index e531c85a746fb..c678689954b7c 100644 --- a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm +++ b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm @@ -23,8 +23,8 @@ 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' + hitsound = 'sound/items/tools/drill_hit.ogg' + usesound = 'sound/items/tools/drill_use.ogg' w_class = WEIGHT_CLASS_SMALL toolspeed = 1 random_color = FALSE @@ -83,13 +83,13 @@ if("Screwdriver") tool_behaviour = TOOL_SCREWDRIVER sharpness = SHARP_POINTY - playsound(src, 'sound/items/change_drill.ogg', 50, vary = TRUE) + playsound(src, 'sound/items/tools/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)) + if(user.incapacitated || !user.Adjacent(src)) return FALSE return TRUE 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 index a81c0db7f0d0f..d8d9b38bf2ca8 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm +++ b/modular_skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm @@ -221,6 +221,10 @@ item_type = /obj/item/cautery/advanced cost = PAYCHECK_COMMAND * 3 +/datum/armament_entry/company_import/deforest/equipment/advanced_blood_filter + item_type = /obj/item/blood_filter/advanced + cost = PAYCHECK_COMMAND * 9 + /datum/armament_entry/company_import/deforest/equipment/medigun_upgrade item_type = /obj/item/device/custom_kit/medigun_fastcharge cost = PAYCHECK_COMMAND * 2 diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm b/modular_skyrat/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm index c03f3b3692104..daee1a80edd89 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm +++ b/modular_skyrat/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm @@ -84,11 +84,11 @@ cost = PAYCHECK_COMMAND /datum/armament_entry/company_import/donk/foamforce/foam_shotgun - item_type = /obj/item/gun/ballistic/shotgun/toy/unrestricted + item_type = /obj/item/gun/ballistic/shotgun/toy/riot cost = PAYCHECK_COMMAND /datum/armament_entry/company_import/donk/foamforce/foam_smg - item_type = /obj/item/gun/ballistic/automatic/toy/unrestricted + item_type = /obj/item/gun/ballistic/automatic/toy/riot cost = PAYCHECK_COMMAND * 3 /datum/armament_entry/company_import/donk/foamforce/foam_c20 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 index 610c3a615da49..ad3d3bb2f02ab 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm +++ b/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm @@ -86,6 +86,7 @@ /datum/armament_entry/company_import/sol_defense/sidearm/eland item_type = /obj/item/gun/ballistic/revolver/sol cost = PAYCHECK_COMMAND * 4 + restricted = TRUE //You can still buy it from cargo side //If cargo decides to agree with sec on a compromise then good job @@ -131,14 +132,14 @@ cost = PAYCHECK_COMMAND * 10 contraband = TRUE //Begone -*/ + /datum/armament_entry/company_import/sol_defense/longarm/infanterie item_type = /obj/item/gun/ballistic/automatic/sol_rifle cost = PAYCHECK_COMMAND * 14 // contraband = TRUE - Bubberstation Edit -/* These one are simply rediculous, but we'll keep it there incase someone has idea +These one are simply rediculous, but we'll keep it there incase someone has idea /datum/armament_entry/company_import/sol_defense/longarm/outomaties item_type = /obj/item/gun/ballistic/automatic/sol_rifle/machinegun cost = PAYCHECK_COMMAND * 23 diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm b/modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm index 5f0ecc27ef55c..4cc6bcf838708 100644 --- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm +++ b/modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm @@ -36,7 +36,7 @@ user.visible_message("[user] opens [src].", "You open [src].", "You hear a metallic thunk.") else user.visible_message("[user] closes [src].", "You close [src].", "You hear a metallic thunk.") - playsound(src, 'sound/machines/boltsup.ogg', 30, TRUE) + playsound(src, 'sound/machines/airlock/boltsup.ogg', 30, TRUE) update_appearance() /obj/item/cortical_cage/attackby(obj/item/attacking_item, mob/user, params) @@ -69,7 +69,7 @@ if(internal_radio) var/area/src_area = get_area(src) internal_radio.talk_into(src, "A cortical borer has been trapped in [src_area].", RADIO_CHANNEL_COMMON) - playsound(src, 'sound/machines/boltsup.ogg', 30, TRUE) + playsound(src, 'sound/machines/airlock/boltsup.ogg', 30, TRUE) update_appearance() /obj/item/cortical_cage/relaymove(mob/living/user, direction) diff --git a/modular_skyrat/modules/cryosleep/code/admin.dm b/modular_skyrat/modules/cryosleep/code/admin.dm index 4b6ce389eee24..8af1d63950611 100644 --- a/modular_skyrat/modules/cryosleep/code/admin.dm +++ b/modular_skyrat/modules/cryosleep/code/admin.dm @@ -1,7 +1,7 @@ /// 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) + playsound(loc, 'sound/effects/magic/Repulse.ogg', 100, 1) var/datum/effect_system/spark_spread/quantum/sparks = new sparks.set_up(10, 1, loc) sparks.attach(loc) diff --git a/modular_skyrat/modules/cryosleep/code/ai.dm b/modular_skyrat/modules/cryosleep/code/ai.dm index 350dcd701f2c3..84a1073ec1122 100644 --- a/modular_skyrat/modules/cryosleep/code/ai.dm +++ b/modular_skyrat/modules/cryosleep/code/ai.dm @@ -3,7 +3,7 @@ set desc = "Puts the current AI personality into cryogenic stasis, freeing the space for another." set category = "AI Commands" - if(incapacitated()) + if(incapacitated) return switch(alert("Would you like to enter cryo? This will ghost you. Remember to AHELP before cryoing out of important roles, even with no admins online.",,"Yes.","No.")) if("Yes.") diff --git a/modular_skyrat/modules/cryosleep/code/job.dm b/modular_skyrat/modules/cryosleep/code/job.dm index fcd218d473918..f7d9af2c6d07f 100644 --- a/modular_skyrat/modules/cryosleep/code/job.dm +++ b/modular_skyrat/modules/cryosleep/code/job.dm @@ -1,8 +1,8 @@ /datum/controller/subsystem/job/proc/FreeRole(rank) if(!rank) return - JobDebug("Freeing role: [rank]") - var/datum/job/job = GetJob(rank) + job_debug("Freeing role: [rank]") + var/datum/job/job = get_job(rank) if(!job) return FALSE job.current_positions = max(0, job.current_positions - 1) @@ -11,8 +11,8 @@ /datum/controller/subsystem/job/proc/OccupyRole(rank) if(!rank) return FALSE - JobDebug("Occupying role: [rank]") - var/datum/job/job = GetJob(rank) + job_debug("Occupying role: [rank]") + var/datum/job/job = get_job(rank) if(!job || job.current_positions >= job.total_positions) return FALSE job.current_positions = job.current_positions + 1 diff --git a/modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm b/modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm index 4d495464889fe..031fb69170697 100644 --- a/modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm +++ b/modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm @@ -31,10 +31,10 @@ var/noisechoice = tgui_input_list(user, "What noise would you like to make?", "Robot Noises", list("Beep","Buzz","Ping")) if(noisechoice == "Beep") user.audible_message("makes their TTS beep!", audible_message_flags = EMOTE_MESSAGE) - playsound(user, 'sound/machines/twobeep.ogg', 50, 1, -1) + playsound(user, 'sound/machines/beep/twobeep.ogg', 50, 1, -1) if(noisechoice == "Buzz") user.audible_message("makes their TTS buzz!", audible_message_flags = EMOTE_MESSAGE) - playsound(user, 'sound/machines/buzz-sigh.ogg', 50, 1, -1) + playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 50, 1, -1) if(noisechoice == "Ping") user.audible_message("makes their TTS ping!", audible_message_flags = EMOTE_MESSAGE) playsound(user, 'sound/machines/ping.ogg', 50, 1, -1) diff --git a/modular_skyrat/modules/customization/game/objects/items/plushes.dm b/modular_skyrat/modules/customization/game/objects/items/plushes.dm index 9bc6ba494e03e..e1362b717680b 100644 --- a/modular_skyrat/modules/customization/game/objects/items/plushes.dm +++ b/modular_skyrat/modules/customization/game/objects/items/plushes.dm @@ -48,7 +48,7 @@ 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) + squeak_override = list('sound/machines/beep/beep.ogg' = 1) /obj/item/toy/plush/skyrat/medihound name = "medi-hound plushie" @@ -56,7 +56,7 @@ icon_state = "plushie_medihound" attack_verb_continuous = list("beeps", "boops", "pings") attack_verb_simple = list("beep", "boop", "ping") - squeak_override = list('sound/machines/beep.ogg' = 1) + squeak_override = list('sound/machines/beep/beep.ogg' = 1) /obj/item/toy/plush/skyrat/engihound name = "engi-hound plushie" @@ -64,7 +64,7 @@ icon_state = "plushie_engihound" attack_verb_continuous = list("beeps", "boops", "pings") attack_verb_simple = list("beep", "boop", "ping") - squeak_override = list('sound/machines/beep.ogg' = 1) + squeak_override = list('sound/machines/beep/beep.ogg' = 1) /obj/item/toy/plush/skyrat/scrubpuppy name = "scrub-puppy plushie" @@ -72,7 +72,7 @@ icon_state = "plushie_scrubpuppy" attack_verb_continuous = list("beeps", "boops", "pings") attack_verb_simple = list("beep", "boop", "ping") - squeak_override = list('sound/machines/beep.ogg' = 1) + squeak_override = list('sound/machines/beep/beep.ogg' = 1) /obj/item/toy/plush/skyrat/meddrake name = "medi-drake plushie" @@ -80,7 +80,7 @@ icon_state = "plushie_meddrake" attack_verb_continuous = list("beeps", "boops", "pings") attack_verb_simple = list("beep", "boop", "ping") - squeak_override = list('sound/machines/beep.ogg' = 1) + squeak_override = list('sound/machines/beep/beep.ogg' = 1) /obj/item/toy/plush/skyrat/secdrake name = "sec-drake plushie" @@ -88,7 +88,7 @@ icon_state = "plushie_secdrake" attack_verb_continuous = list("beeps", "boops", "pings") attack_verb_simple = list("beep", "boop", "ping") - squeak_override = list('sound/machines/beep.ogg' = 1) + squeak_override = list('sound/machines/beep/beep.ogg' = 1) /obj/item/toy/plush/skyrat/fox name = "fox plushie" @@ -163,7 +163,7 @@ icon_state = "plushie_riffy" attack_verb_continuous = list("slaps", "challenges") attack_verb_simple = list("slap", "challenge") - squeak_override = list('sound/weapons/slap.ogg' = 1) + squeak_override = list('sound/items/weapons/slap.ogg' = 1) /obj/item/toy/plush/skyrat/ian name = "plush corgi" @@ -272,7 +272,7 @@ icon_state = "plushie_tyri" attack_verb_continuous = list("fixes", "unbolts", "welds") 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) + squeak_override = list('sound/items/tools/screwdriver.ogg' = 1, 'sound/items/tools/drill_use.ogg' = 1, 'sound/items/tools/welder.ogg' = 1) /obj/item/toy/plush/skyrat/glitch_synth name = "glitching synthetic plushie" @@ -280,7 +280,7 @@ icon_state = "plushie_rex" attack_verb_continuous = list("beeps", "hugs", "health analyzes") attack_verb_simple = list("beep", "hug", "health analyze") - squeak_override = list('sound/machines/twobeep_high.ogg' = 1) + squeak_override = list('sound/machines/beep/twobeep_high.ogg' = 1) /obj/item/toy/plush/skyrat/boom_bird name = "boom bird plushie" @@ -345,7 +345,7 @@ icon_state = "plushie_zapp" attack_verb_continuous = list("boops", "nuzzles") attack_verb_simple = list("boop", "nuzzle") - squeak_override = list('sound/effects/can_open1.ogg' = 1, 'sound/effects/can_open2.ogg' = 1, 'sound/effects/can_open3.ogg' = 1) + squeak_override = list('sound/effects/can/can_open1.ogg' = 1, 'sound/effects/can/can_open2.ogg' = 1, 'sound/effects/can/can_open3.ogg' = 1) ///the list that is chosen from depending on gaming skill var/static/list/skill_response = list( "Weak! What are you, a mobile gamer?", @@ -383,9 +383,9 @@ skill_level = (max(6, skill_level)) say(skill_response[skill_level]) if(skill_level == 7) - playsound(src_turf, 'sound/effects/can_pop.ogg', 80, TRUE) + playsound(src_turf, 'sound/effects/can/can_pop.ogg', 80, TRUE) new /obj/effect/abstract/liquid_turf/pwr_gamr(src_turf) - playsound(src_turf, 'sound/effects/bubbles.ogg', 50, TRUE) + playsound(src_turf, 'sound/effects/bubbles/bubbles.ogg', 50, TRUE) qdel(src) /obj/effect/abstract/liquid_turf/pwr_gamr @@ -409,7 +409,7 @@ desc = "It reminds you of a very, very, very huggable bee." icon_state = "plushie_rubi" gender = FEMALE - squeak_override = list('sound/weapons/thudswoosh.ogg' = 1) + squeak_override = list('sound/items/weapons/thudswoosh.ogg' = 1) attack_verb_continuous = list("hugs") attack_verb_simple = list("hug") @@ -463,7 +463,7 @@ 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/mobs/non-humanoids/mouse/mousesqueek.ogg' = 1, 'modular_skyrat/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 @@ -473,7 +473,7 @@ 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/mobs/non-humanoids/mouse/mousesqueek.ogg' = 1, 'modular_skyrat/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....", ) @@ -562,7 +562,7 @@ icon_state = "plush_scishark" attack_verb_continuous = list("bites", "eats", "fin slaps") attack_verb_simple = list("bite", "eat", "fin slap") - squeak_override = list('sound/weapons/bite.ogg'=1) + squeak_override = list('sound/items/weapons/bite.ogg'=1) //Other donation reward for Razurath /obj/item/toy/plush/skyrat/plushie_razurath/second @@ -652,4 +652,4 @@ icon_state = "plush_janiborg" attack_verb_continuous = list("beeps", "washes", "mops", "squirts", "soaps") attack_verb_simple = list("beep", "wash", "mop", "squirt", "soap") - squeak_override = list('sound/machines/twobeep.ogg' = 1) + squeak_override = list('sound/machines/beep/twobeep.ogg' = 1) diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/breath.dm b/modular_skyrat/modules/customization/modules/clothing/masks/breath.dm index 25f8e9237ce89..9172f256463a2 100644 --- a/modular_skyrat/modules/customization/modules/clothing/masks/breath.dm +++ b/modular_skyrat/modules/customization/modules/clothing/masks/breath.dm @@ -3,6 +3,7 @@ name = "vox breath mask" actions_types = list() flags_cover = NONE + visor_flags_cover = NONE /obj/item/clothing/mask/balaclavaadjust name = "adjustable balaclava" @@ -20,7 +21,7 @@ /obj/item/clothing/mask/balaclavaadjust/proc/adjust_mask(mob/living/carbon/human/user) if(!istype(user)) return - if(!user.incapacitated()) + if(!user.incapacitated) switch(open) if (0) flags_inv = HIDEHAIR diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm b/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm index 5abd71f241146..eb9ab470ebf2d 100644 --- a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm +++ b/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm @@ -127,7 +127,7 @@ ) /obj/item/clothing/mask/gas/clown_hat/vox/ui_action_click(mob/user) - if(!istype(user) || user.incapacitated()) + if(!istype(user) || user.incapacitated) return var/list/options = list() @@ -142,7 +142,7 @@ if(!choice) return FALSE - if(src && choice && !user.incapacitated() && in_range(user,src)) + if(src && choice && !user.incapacitated && in_range(user,src)) icon_state = options[choice] user.update_worn_mask() update_item_action_buttons() @@ -167,7 +167,7 @@ ) /obj/item/clothing/mask/gas/mime/vox/ui_action_click(mob/user) - if(!istype(user) || user.incapacitated()) + if(!istype(user) || user.incapacitated) return var/list/options = list() @@ -180,7 +180,7 @@ if(!choice) return FALSE - if(src && choice && !user.incapacitated() && in_range(user,src)) + 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' diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm b/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm index 214cc5244c81b..8f87da13da030 100644 --- a/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm +++ b/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm @@ -101,7 +101,7 @@ /obj/item/clothing/mask/paper/proc/adjust_mask(mob/living/carbon/human/user) if(!istype(user)) return - if(!user.incapacitated()) + if(!user.incapacitated) var/is_worn = user.wear_mask == src wear_hair_over = !wear_hair_over if(wear_hair_over) @@ -116,7 +116,7 @@ /obj/item/clothing/mask/paper/proc/adjust_strap(mob/living/carbon/human/user) if(!istype(user)) return - if(!user.incapacitated()) + if(!user.incapacitated) var/is_worn = user.wear_mask == src strap_hidden = !strap_hidden to_chat(user, "You [is_worn ? "" : "will "][strap_hidden ? "hide" : "show"] the mask strap.") diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm index 2bc40d9085d47..6c33006f2d9d9 100644 --- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm +++ b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm @@ -151,7 +151,7 @@ if("No") return if("Maybe") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) audible_message(span_warning("The [src] buzzes!")) return @@ -479,7 +479,7 @@ var/goggles = FALSE /obj/item/clothing/head/avipilot/proc/adjust_goggles(mob/living/carbon/user) - if(user?.incapacitated()) + if(user?.incapacitated) return if(goggles) icon_state = "avipilotup" diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm index 1fda8c83c6545..fb826f79b8897 100644 --- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm +++ b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm @@ -27,7 +27,7 @@ icon_state = "switchblade" base_icon_state = "switchblade" desc = "A sharp, concealable, spring-loaded comb." - hitsound = 'sound/weapons/genhit.ogg' + hitsound = 'sound/items/weapons/genhit.ogg' resistance_flags = FIRE_PROOF var/extended = FALSE @@ -40,7 +40,7 @@ extended = !extended icon_state = "switchblade[extended ? "_on" : ""]" - playsound(user || src, 'sound/weapons/batonextend.ogg', 30, TRUE) + playsound(user || src, 'sound/items/weapons/batonextend.ogg', 30, TRUE) /// This makes it so you have to extend it. 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 index 2bbb5c2c3dbd7..7fbe574d85b02 100644 --- 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 @@ -78,7 +78,7 @@ var/highest_pref = 0 for(var/job in job_preferences) if(job_preferences[job] > highest_pref) - previewJob = SSjob.GetJob(job) + previewJob = SSjob.get_job(job) highest_pref = job_preferences[job] if(previewJob) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm index 3b52b14f6f39c..daea9fce0b00b 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm @@ -457,3 +457,9 @@ color_src = USE_MATRIXED_COLORS name = "Acrador 4 (Normal)" icon_state = "acrador_4" + +/datum/sprite_accessory/snouts/renamon + icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi' + color_src = USE_MATRIXED_COLORS + name = "Renamon" + icon_state = "renamon" 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 index ce776e7211038..48f4d61679070 100644 --- 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 @@ -291,6 +291,11 @@ name = "Low Wings Jeweled (Top)" icon_state = "low_jewel_top" +/datum/sprite_accessory/wings/low_wings/renamon + name = "Renamon" + icon_state = "renamon" + color_src = USE_MATRIXED_COLORS +// Ryva was here :3 /* * MOTH */ diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm index 33125dca3e7be..1c2da88347ec1 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm @@ -15,7 +15,7 @@ mod.choose_sprite_accessories(usr) /obj/item/mod/control/proc/quick_sprite_accessories(mob/living/carbon/human/user) - playsound(user, 'sound/mecha/mechmove03.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(user, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) user.mutant_part_visibility(quick_toggle = TRUE) /obj/item/mod/control/proc/choose_sprite_accessories(mob/living/carbon/human/user) diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm b/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm index 14d158734fb9f..261bfe8d3636f 100644 --- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm +++ b/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm @@ -44,7 +44,7 @@ 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) + playsound(M,'sound/items/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) diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm b/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm index 68e72da16c2bd..4708d892bd517 100644 --- a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm +++ b/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm @@ -259,7 +259,7 @@ layers = EXTERNAL_ADJACENT | EXTERNAL_BEHIND /obj/item/organ/external/genital/testicles/update_genital_icon_state() - var/measured_size = clamp(genital_size, 1, 6) + var/measured_size = clamp(genital_size, 1, TESTICLES_MAX_SIZE) var/passed_string = "testicles_[genital_type]_[measured_size]" if(uses_skintones) passed_string += "_s" @@ -283,7 +283,7 @@ /obj/item/organ/external/genital/testicles/get_sprite_size_string() var/measured_size = FLOOR(genital_size,1) - measured_size = clamp(measured_size, 0, 6) + measured_size = clamp(measured_size, 0, TESTICLES_MAX_SIZE) var/passed_string = "[genital_type]_[measured_size]" if(uses_skintones) passed_string += "_s" diff --git a/modular_skyrat/modules/death_consequences_perk/death_consequences_trauma.dm b/modular_skyrat/modules/death_consequences_perk/death_consequences_trauma.dm index 5cd0745a53734..4e91076ac7f1a 100644 --- a/modular_skyrat/modules/death_consequences_perk/death_consequences_trauma.dm +++ b/modular_skyrat/modules/death_consequences_perk/death_consequences_trauma.dm @@ -179,7 +179,7 @@ last_time_degraded_on_death = world.time /datum/brain_trauma/severe/death_consequences/process(seconds_per_tick) - if (owner.status_flags & GODMODE) + if (HAS_TRAIT(owner, TRAIT_GODMODE)) return var/is_dead = (owner.stat == DEAD) diff --git a/modular_skyrat/modules/decay_subsystem/code/decaySS.dm b/modular_skyrat/modules/decay_subsystem/code/decaySS.dm index 38b13e8bc550a..dca88ded38e35 100644 --- a/modular_skyrat/modules/decay_subsystem/code/decaySS.dm +++ b/modular_skyrat/modules/decay_subsystem/code/decaySS.dm @@ -41,7 +41,7 @@ SUBSYSTEM_DEF(decay) log_world("SSDecay was disabled in config.") return SS_INIT_NO_NEED - if(SSmapping.config.map_name in station_filter) + if(SSmapping.current_map.map_name in station_filter) message_admins("SSDecay was disabled due to map filter.") log_world("SSDecay was disabled due to map filter.") return SS_INIT_NO_NEED diff --git a/modular_skyrat/modules/decay_subsystem/code/nests.dm b/modular_skyrat/modules/decay_subsystem/code/nests.dm index dc883affe2a80..bbaf4286e17c0 100644 --- a/modular_skyrat/modules/decay_subsystem/code/nests.dm +++ b/modular_skyrat/modules/decay_subsystem/code/nests.dm @@ -55,7 +55,7 @@ number = 1 for(var/i in 1 to number) new path (loc) - playsound(src, 'sound/effects/blobattack.ogg', 100) + playsound(src, 'sound/effects/blob/blobattack.ogg', 100) return ..() /obj/structure/mob_spawner/Destroy() @@ -154,7 +154,7 @@ to_chat(user, span_danger("You begin to crack open [src]...")) if(do_after(user, 3 SECONDS, src)) to_chat(user, span_userdanger("You crack [src] open, something monsterous crawls out!")) - playsound(src, 'sound/effects/blobattack.ogg', 100) + playsound(src, 'sound/effects/blob/blobattack.ogg', 100) new /mob/living/basic/spider/giant/ (user.loc) qdel(src) @@ -181,7 +181,7 @@ /obj/structure/mob_spawner/beehive/attacked_by(obj/item/I, mob/living/user) . = ..() if(!swarmed) - playsound(src, 'sound/creatures/bee.ogg', 100) + playsound(src, 'sound/mobs/non-humanoids/bee/bee.ogg', 100) visible_message(span_userdanger("[src] buzzes violently as bees pour out!")) for(var/i=1, i 30 MINUTES && trigger_reason != DIVINE_INTERVENTION) - playsound(src, 'sound/misc/compiler-failure.ogg', 100, FALSE, MACHINE_SOUND_RANGE, ignore_walls = TRUE, use_reverb = TRUE, falloff_distance = MACHINE_SOUND_FALLOFF_DISTANCE) + playsound(src, 'sound/machines/compiler/compiler-failure.ogg', 100, FALSE, MACHINE_SOUND_RANGE, ignore_walls = TRUE, use_reverb = TRUE, falloff_distance = MACHINE_SOUND_FALLOFF_DISTANCE) audible_message(span_danger("[src] makes a series of sad beeps. The internal charge only lasts about 30 minutes... what a feat of engineering!")) investigate_log("Delam SCRAM signal was received but failed precondition check. (Round time or trigger reason)", INVESTIGATE_ATMOS) return FALSE @@ -178,7 +178,7 @@ // fight power with power addtimer(CALLBACK(src, PROC_REF(put_on_a_show)), EVAC_WARNING_TIMER) - playsound(src, 'sound/misc/bloblarm.ogg', 100, FALSE, MACHINE_RUMBLE_SOUND_RANGE, ignore_walls = TRUE, use_reverb = TRUE, falloff_distance = MACHINE_SOUND_FALLOFF_DISTANCE) + playsound(src, 'sound/announcer/alarm/bloblarm.ogg', 100, FALSE, MACHINE_RUMBLE_SOUND_RANGE, ignore_walls = TRUE, use_reverb = TRUE, falloff_distance = MACHINE_SOUND_FALLOFF_DISTANCE) power_fail((EVAC_WARNING_TIMER / 10) + POWER_CUT_MAX_DURATION_SECONDS, (EVAC_WARNING_TIMER / 10) + POWER_CUT_MAX_DURATION_SECONDS) /// Stop the delamination. Let the fireworks begin @@ -190,7 +190,7 @@ // Fire bell close, that nice 'are we gonna die?' rumble out far on = TRUE SSpersistence.reset_delam_counter() - alert_sound_to_playing('sound/misc/earth_rumble_distant3.ogg', override_volume = TRUE) + alert_sound_to_playing('sound/ambience/earth_rumble/earth_rumble_distant3.ogg', override_volume = TRUE) update_appearance() // Good job at kneecapping the crystal, engineers @@ -228,7 +228,7 @@ /obj/machinery/atmospherics/components/unary/delam_scram/proc/goodbye_friends() // good job buddy, sacrificing yourself for the greater good - playsound(src, 'sound/misc/compiler-failure.ogg', 100, FALSE, MACHINE_SOUND_RANGE, ignore_walls = TRUE, use_reverb = TRUE, falloff_distance = MACHINE_SOUND_FALLOFF_DISTANCE) + playsound(src, 'sound/machines/compiler/compiler-failure.ogg', 100, FALSE, MACHINE_SOUND_RANGE, ignore_walls = TRUE, use_reverb = TRUE, falloff_distance = MACHINE_SOUND_FALLOFF_DISTANCE) visible_message(span_danger("[src] beeps a sorrowful melody and collapses into a pile of twisted metal and foam!"), blind_message = span_danger("[src] beeps a sorrowful melody!")) deconstruct(FALSE) @@ -306,7 +306,7 @@ return if(!validate_suppression_status()) - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, FALSE, BUTTON_SOUND_RANGE, falloff_distance = BUTTON_SOUND_FALLOFF_DISTANCE) + playsound(src.loc, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE, BUTTON_SOUND_RANGE, falloff_distance = BUTTON_SOUND_FALLOFF_DISTANCE) audible_message(span_danger("[src] makes a sad buzz and goes dark. Did someone activate it already?")) // Look through the window, buddy burn_out() return @@ -328,7 +328,7 @@ // For roundstart only, after that it's on you! if(world.time - SSticker.round_start_time > 30 MINUTES) - playsound(src.loc, 'sound/misc/compiler-failure.ogg', 50, FALSE, BUTTON_SOUND_RANGE, falloff_distance = BUTTON_SOUND_FALLOFF_DISTANCE) + playsound(src.loc, 'sound/machines/compiler/compiler-failure.ogg', 50, FALSE, BUTTON_SOUND_RANGE, falloff_distance = BUTTON_SOUND_FALLOFF_DISTANCE) audible_message(span_danger("[src] makes a series of sad beeps. The internal charge only lasts about 30 minutes... what a feat of engineering! Looks like it's all on you to save the day.")) burn_out() return diff --git a/modular_skyrat/modules/electric_welder/code/electric_welder.dm b/modular_skyrat/modules/electric_welder/code/electric_welder.dm index fca6dc4fdf0d0..02171f91e33f8 100644 --- a/modular_skyrat/modules/electric_welder/code/electric_welder.dm +++ b/modular_skyrat/modules/electric_welder/code/electric_welder.dm @@ -24,7 +24,7 @@ if(!(item_use_power(power_use_amount, user, TRUE) & COMPONENT_POWER_SUCCESS)) return powered = !powered - playsound(src, 'sound/effects/sparks4.ogg', 100, TRUE) + playsound(src, 'sound/effects/sparks/sparks4.ogg', 100, TRUE) if(powered) to_chat(user, span_notice("You turn [src] on.")) switched_on() @@ -38,7 +38,7 @@ light_on = TRUE force = 15 damtype = BURN - hitsound = 'sound/items/welder.ogg' + hitsound = 'sound/items/tools/welder.ogg' set_light_on(powered) update_appearance() START_PROCESSING(SSobj, src) diff --git a/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm b/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm index 7e06d94ed27bc..7df7149994ef8 100644 --- a/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm +++ b/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm @@ -38,7 +38,7 @@ balloon_alert_to_viewers("[src] tears!") clothing_flags &= ~STOPSPRESSUREDAMAGE torn = TRUE - playsound(src, 'sound/weapons/slashmiss.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/slashmiss.ogg', 50, TRUE) playsound(src, 'sound/effects/refill.ogg', 50, TRUE) update_appearance() diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm b/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm index e753c3d340119..55bd779f9e452 100644 --- a/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm +++ b/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm @@ -23,7 +23,7 @@ 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) + playsound(get_turf(src), 'sound/mobs/non-humanoids/venus_trap/venus_trap_hurt.ogg', 25, TRUE) if("water") @@ -51,14 +51,14 @@ 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) + playsound(get_turf(src), 'sound/machines/compiler/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) + playsound(get_turf(src), 'sound/machines/compiler/compiler-stage2.ogg', 25, TRUE) if("slime") name = "pile of oozing slime" @@ -111,7 +111,7 @@ var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/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) + playsound(get_turf(src), 'sound/items/weapons/thudswoosh.ogg', 25, TRUE) //prints if("pawprint") diff --git a/modular_skyrat/modules/emotes/code/dna_screams.dm b/modular_skyrat/modules/emotes/code/dna_screams.dm index b35209bab59fe..ed779a2833f69 100644 --- a/modular_skyrat/modules/emotes/code/dna_screams.dm +++ b/modular_skyrat/modules/emotes/code/dna_screams.dm @@ -19,9 +19,9 @@ /datum/species/lizard/get_scream_sound(mob/living/carbon/human/lizard) return pick( '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', + 'sound/mobs/humanoids/lizard/lizard_scream_1.ogg', + 'sound/mobs/humanoids/lizard/lizard_scream_2.ogg', + 'sound/mobs/humanoids/lizard/lizard_scream_3.ogg', ) /datum/species/skeleton/get_scream_sound(mob/living/carbon/human/skeleton) @@ -46,7 +46,7 @@ return 'modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg' /datum/species/xeno/get_scream_sound(mob/living/carbon/human/xeno) - return 'sound/voice/hiss6.ogg' + return 'sound/mobs/non-humanoids/hiss/hiss6.ogg' /datum/species/zombie/get_scream_sound(mob/living/carbon/human/teshari) return 'modular_skyrat/modules/emotes/sound/emotes/zombie_scream.ogg' diff --git a/modular_skyrat/modules/emotes/code/emotes.dm b/modular_skyrat/modules/emotes/code/emotes.dm index 442e4ba4b8ac7..df6ffda2f6d66 100644 --- a/modular_skyrat/modules/emotes/code/emotes.dm +++ b/modular_skyrat/modules/emotes/code/emotes.dm @@ -158,7 +158,7 @@ message = "squeaks!" emote_type = EMOTE_AUDIBLE vary = TRUE - sound = 'sound/creatures/mousesqueek.ogg' + sound = 'sound/mobs/non-humanoids/mouse/mousesqueek.ogg' /datum/emote/living/merp key = "merp" @@ -214,7 +214,7 @@ if(ismoth(user)) return 'modular_skyrat/modules/emotes/sound/emotes/mothchitter.ogg' else - return'sound/creatures/chitter.ogg' + return 'sound/mobs/non-humanoids/insect/chitter.ogg' /datum/emote/living/sigh/get_sound(mob/living/user) if(iscarbon(user)) @@ -563,7 +563,7 @@ message = "gnashes." emote_type = EMOTE_AUDIBLE vary = TRUE - sound = 'sound/weapons/bite.ogg' + sound = 'sound/items/weapons/bite.ogg' /datum/emote/living/thump key = "thump" @@ -572,7 +572,7 @@ emote_type = EMOTE_AUDIBLE muzzle_ignore = TRUE vary = TRUE - sound = 'sound/effects/glassbash.ogg' + sound = 'sound/effects/glass/glassbash.ogg' /datum/emote/living/surrender muzzle_ignore = TRUE @@ -583,4 +583,4 @@ message = "meows loudly!" emote_type = EMOTE_AUDIBLE vary = TRUE - sound = 'modular_skyrat/modules/emotes/sound/voice/mggaow.ogg' + sound = 'modular_skyrat/modules/emotes/sound/voice/mggaow.ogg' \ No newline at end of file diff --git a/modular_skyrat/modules/emotes/code/laugh_datums.dm b/modular_skyrat/modules/emotes/code/laugh_datums.dm index 310c6ce63bcdf..752e16aee1d9b 100644 --- a/modular_skyrat/modules/emotes/code/laugh_datums.dm +++ b/modular_skyrat/modules/emotes/code/laugh_datums.dm @@ -13,8 +13,8 @@ GLOBAL_LIST_EMPTY(laugh_types) /datum/laugh_type/human name = "Human Laugh" male_laughsounds = list( - 'sound/voice/human/manlaugh1.ogg', - 'sound/voice/human/manlaugh2.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh1.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh2.ogg', ) female_laughsounds = list( 'modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_1.ogg', @@ -24,8 +24,8 @@ GLOBAL_LIST_EMPTY(laugh_types) /datum/laugh_type/humanmasc name = "Masculine Human Laugh" male_laughsounds = list( - 'sound/voice/human/manlaugh1.ogg', - 'sound/voice/human/manlaugh2.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh1.ogg', + 'sound/mobs/humanoids/human/laugh/manlaugh2.ogg', ) female_laughsounds = null @@ -39,7 +39,7 @@ GLOBAL_LIST_EMPTY(laugh_types) /datum/laugh_type/lizard name = "Lizard Laugh" - male_laughsounds = list('sound/voice/lizard/lizard_laugh1.ogg',) + male_laughsounds = list('sound/mobs/humanoids/lizard/lizard_laugh1.ogg',) female_laughsounds = null /datum/laugh_type/felinid @@ -53,8 +53,8 @@ GLOBAL_LIST_EMPTY(laugh_types) /datum/laugh_type/clown name = "Clown Laugh" male_laughsounds = list( - 'sound/creatures/clown/hohoho.ogg', - 'sound/creatures/clown/hehe.ogg', + 'sound/mobs/non-humanoids/clown/hohoho.ogg', + 'sound/mobs/non-humanoids/clown/hehe.ogg', ) female_laughsounds = null diff --git a/modular_skyrat/modules/emotes/code/laugh_emotes.dm b/modular_skyrat/modules/emotes/code/laugh_emotes.dm index 5c202afeaadad..4c6e1c63392aa 100644 --- a/modular_skyrat/modules/emotes/code/laugh_emotes.dm +++ b/modular_skyrat/modules/emotes/code/laugh_emotes.dm @@ -13,8 +13,8 @@ var/mob/living/carbon/human/H = user if(isnull(H.selected_laugh)) //For things that don't have a selected laugh(npcs) if(user.gender == MALE) - return pick('sound/voice/human/manlaugh1.ogg', - 'sound/voice/human/manlaugh2.ogg') + return pick('sound/mobs/humanoids/human/laugh/manlaugh1.ogg', + 'sound/mobs/humanoids/human/laugh/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') diff --git a/modular_skyrat/modules/emotes/code/scream_datums.dm b/modular_skyrat/modules/emotes/code/scream_datums.dm index 370a48894ba4e..1e671bc788c86 100644 --- a/modular_skyrat/modules/emotes/code/scream_datums.dm +++ b/modular_skyrat/modules/emotes/code/scream_datums.dm @@ -24,19 +24,19 @@ GLOBAL_LIST_EMPTY(scream_types) /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', + 'sound/mobs/humanoids/human/scream/malescream_1.ogg', + 'sound/mobs/humanoids/human/scream/malescream_2.ogg', + 'sound/mobs/humanoids/human/scream/malescream_3.ogg', + 'sound/mobs/humanoids/human/scream/malescream_4.ogg', + 'sound/mobs/humanoids/human/scream/malescream_5.ogg', + 'sound/mobs/humanoids/human/scream/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', + 'sound/mobs/humanoids/human/scream/femalescream_1.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_2.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_3.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_4.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_5.ogg', ) @@ -45,23 +45,23 @@ GLOBAL_LIST_EMPTY(scream_types) male_screamsounds = list( 'modular_skyrat/modules/emotes/sound/voice/scream_m1.ogg', 'modular_skyrat/modules/emotes/sound/voice/scream_m2.ogg', - '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', + 'sound/mobs/humanoids/human/scream/malescream_1.ogg', + 'sound/mobs/humanoids/human/scream/malescream_2.ogg', + 'sound/mobs/humanoids/human/scream/malescream_3.ogg', + 'sound/mobs/humanoids/human/scream/malescream_4.ogg', + 'sound/mobs/humanoids/human/scream/malescream_5.ogg', + 'sound/mobs/humanoids/human/scream/malescream_6.ogg', ) female_screamsounds = null /datum/scream_type/human_femme name = "Feminine Human Scream" male_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', + 'sound/mobs/humanoids/human/scream/femalescream_1.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_2.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_3.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_4.ogg', + 'sound/mobs/humanoids/human/scream/femalescream_5.ogg', 'modular_skyrat/modules/emotes/sound/voice/scream_f1.ogg', 'modular_skyrat/modules/emotes/sound/voice/scream_f2.ogg', ) @@ -74,15 +74,15 @@ GLOBAL_LIST_EMPTY(scream_types) /datum/scream_type/wilhelm name = "Classic Scream" - male_screamsounds = list('sound/voice/human/wilhelm_scream.ogg') + male_screamsounds = list('sound/mobs/humanoids/human/scream/wilhelm_scream.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', + 'sound/mobs/humanoids/lizard/lizard_scream_1.ogg', + 'sound/mobs/humanoids/lizard/lizard_scream_2.ogg', + 'sound/mobs/humanoids/lizard/lizard_scream_3.ogg', ) female_screamsounds = null @@ -100,7 +100,7 @@ GLOBAL_LIST_EMPTY(scream_types) name = "Moth Scream" male_screamsounds = list( 'modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg', - 'sound/voice/moth/scream_moth.ogg', + 'sound/mobs/humanoids/moth/scream_moth.ogg', ) female_screamsounds = null @@ -117,7 +117,7 @@ GLOBAL_LIST_EMPTY(scream_types) /datum/scream_type/xeno name = "Xeno Scream" male_screamsounds = list( - 'sound/voice/hiss6.ogg', + 'sound/mobs/non-humanoids/hiss/hiss6.ogg', 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar1.ogg', 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar2.ogg', ) @@ -135,18 +135,18 @@ GLOBAL_LIST_EMPTY(scream_types) /datum/scream_type/chicken name = "Chicken Scream" - male_screamsounds = list('sound/creatures/bagawk.ogg') + male_screamsounds = list('sound/mobs/non-humanoids/chicken/bagawk.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', - 'sound/voice/ethereal/lustrous_scream_1.ogg', - 'sound/voice/ethereal/lustrous_scream_2.ogg', - 'sound/voice/ethereal/lustrous_scream_3.ogg', + 'sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg', + 'sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg', + 'sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg', + 'sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg', + 'sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg', + 'sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg', ) female_screamsounds = null @@ -160,19 +160,19 @@ GLOBAL_LIST_EMPTY(scream_types) name = "Monkey Scream" male_screamsounds = list( 'modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg', - 'sound/creatures/monkey/monkey_screech_1.ogg', - 'sound/creatures/monkey/monkey_screech_2.ogg', - 'sound/creatures/monkey/monkey_screech_3.ogg', - 'sound/creatures/monkey/monkey_screech_4.ogg', - 'sound/creatures/monkey/monkey_screech_5.ogg', - 'sound/creatures/monkey/monkey_screech_6.ogg', - 'sound/creatures/monkey/monkey_screech_7.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_1.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_2.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_3.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_4.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_5.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_6.ogg', + 'sound/mobs/non-humanoids/monkey/monkey_screech_7.ogg', ) female_screamsounds = null /datum/scream_type/gorilla name = "Gorilla Scream" - male_screamsounds = list('sound/creatures/gorilla.ogg') + male_screamsounds = list('sound/mobs/non-humanoids/gorilla/gorilla.ogg') female_screamsounds = null /datum/scream_type/skeleton @@ -183,7 +183,7 @@ GLOBAL_LIST_EMPTY(scream_types) /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') + 'sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg', + 'sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg', + 'sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg') female_screamsounds = null diff --git a/modular_skyrat/modules/emotes/code/scream_emote.dm b/modular_skyrat/modules/emotes/code/scream_emote.dm index b5f46e6d91f7d..9ae0add2410f5 100644 --- a/modular_skyrat/modules/emotes/code/scream_emote.dm +++ b/modular_skyrat/modules/emotes/code/scream_emote.dm @@ -17,9 +17,9 @@ if(ismonkey(user)) return 'modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg' if(istype(user, /mob/living/basic/gorilla)) - return 'sound/creatures/gorilla.ogg' + return 'sound/mobs/non-humanoids/gorilla/gorilla.ogg' if(isalien(user)) - return 'sound/voice/hiss6.ogg' + return 'sound/mobs/non-humanoids/hiss/hiss6.ogg' /datum/emote/living/scream/can_run_emote(mob/living/user, status_check, intentional) if(iscyborg(user)) @@ -39,7 +39,7 @@ return if(isnull(user.selected_scream) || (LAZYLEN(user.selected_scream.male_screamsounds) && LAZYLEN(user.selected_scream.female_screamsounds))) //For things that don't have a selected scream(npcs) if(prob(1)) - return 'sound/voice/human/wilhelm_scream.ogg' + return 'sound/mobs/humanoids/human/scream/wilhelm_scream.ogg' return user.dna.species.get_scream_sound(user) if(user.gender == FEMALE && LAZYLEN(user.selected_scream.female_screamsounds)) return pick(user.selected_scream.female_screamsounds) diff --git a/modular_skyrat/modules/emotes/code/synth_emotes.dm b/modular_skyrat/modules/emotes/code/synth_emotes.dm index 63f96c0ca3335..f7f07e8ad8792 100644 --- a/modular_skyrat/modules/emotes/code/synth_emotes.dm +++ b/modular_skyrat/modules/emotes/code/synth_emotes.dm @@ -35,4 +35,4 @@ key = "laughtrack" message = "plays a laughtrack." emote_type = EMOTE_AUDIBLE - sound = 'sound/items/sitcomlaugh2.ogg' + sound = 'sound/items/sitcom_laugh/SitcomLaugh2.ogg' diff --git a/modular_skyrat/modules/emotes/sound/emotes/license.txt b/modular_skyrat/modules/emotes/sound/emotes/license.txt new file mode 100644 index 0000000000000..af1a9e97ed230 --- /dev/null +++ b/modular_skyrat/modules/emotes/sound/emotes/license.txt @@ -0,0 +1,2 @@ +yipyip is "Yip Yip" from http://soundboards.cubicleninja.com/ +yip sounds sourced from kobold generator: https://introdile.itch.io/kobold-generator \ No newline at end of file diff --git a/modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm b/modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm index 19f4de36d6389..467611126323d 100644 --- a/modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm +++ b/modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm @@ -24,12 +24,12 @@ . = ..() RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(energy_wield), override = TRUE) RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(energy_unwield), override = TRUE) - AddComponent(/datum/component/two_handed, force_unwielded = 10, force_wielded = 33, icon_wielded = "[base_icon_state]1", wieldsound = 'sound/weapons/saberon.ogg', unwieldsound = 'sound/weapons/saberoff.ogg') + AddComponent(/datum/component/two_handed, force_unwielded = 10, force_wielded = 33, icon_wielded = "[base_icon_state]1", wieldsound = 'sound/items/weapons/saberon.ogg', unwieldsound = 'sound/items/weapons/saberoff.ogg') /obj/item/fireaxe/energy/proc/energy_wield(obj/item/source, mob/living/carbon/user) SIGNAL_HANDLER - hitsound = 'sound/weapons/blade1.ogg' + hitsound = 'sound/items/weapons/blade1.ogg' START_PROCESSING(SSobj, src) set_light_on(TRUE) diff --git a/modular_skyrat/modules/exp_corps/code/gear.dm b/modular_skyrat/modules/exp_corps/code/gear.dm index 43c747d09465e..1c668b4ad2a7e 100644 --- a/modular_skyrat/modules/exp_corps/code/gear.dm +++ b/modular_skyrat/modules/exp_corps/code/gear.dm @@ -25,7 +25,7 @@ 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' + hitsound = 'sound/items/weapons/bladeslice.ogg' toolspeed = 2 throw_range = 3 w_class = WEIGHT_CLASS_SMALL @@ -48,7 +48,7 @@ attack_verb_simple = list("shove", "bash") transparent = TRUE max_integrity = 200 - shield_break_sound = 'sound/effects/glassbr3.ogg' + shield_break_sound = 'sound/effects/glass/glassbr3.ogg' shield_break_leftover = /obj/item/pointman_broken var/repairable_by = /obj/item/stack/sheet/plasteel //what to repair the shield with diff --git a/modular_skyrat/modules/exp_corps/code/tomahawk.dm b/modular_skyrat/modules/exp_corps/code/tomahawk.dm index b03135607d11d..1cdf15ca59a3f 100644 --- a/modular_skyrat/modules/exp_corps/code/tomahawk.dm +++ b/modular_skyrat/modules/exp_corps/code/tomahawk.dm @@ -16,7 +16,7 @@ embed_type = /datum/embed_data/tomahawk attack_verb_continuous = list("chops", "tears", "lacerates", "cuts") attack_verb_simple = list("chop", "tear", "lacerate", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' sharpness = SHARP_EDGED /datum/embed_data/tomahawk diff --git a/modular_skyrat/modules/faction/code/radio.dm b/modular_skyrat/modules/faction/code/radio.dm index 4d1c7a5838e0d..ef152c95e6f8f 100644 --- a/modular_skyrat/modules/faction/code/radio.dm +++ b/modular_skyrat/modules/faction/code/radio.dm @@ -4,7 +4,7 @@ channels = list(RADIO_CHANNEL_FACTION = 1) greyscale_config = /datum/greyscale_config/encryptionkey_cargo greyscale_colors = "#49241a#dca01b" - independent = TRUE + special_channels = RADIO_SPECIAL_CENTCOM /obj/item/radio/headset/headset_faction name = "faction radio headset" diff --git a/modular_skyrat/modules/filtersandsetters/code/filtersandsetters.dm b/modular_skyrat/modules/filtersandsetters/code/filtersandsetters.dm index a4a97b93a9894..5e747e645ed99 100644 --- a/modular_skyrat/modules/filtersandsetters/code/filtersandsetters.dm +++ b/modular_skyrat/modules/filtersandsetters/code/filtersandsetters.dm @@ -143,7 +143,7 @@ tool_behaviour = (active ? TOOL_BONESET : TOOL_BLOODFILTER) balloon_alert(user, "tools set to [active ? "set bones" : "filter blood"]") - playsound(user ? user : src, 'sound/items/change_drill.ogg', 50, TRUE) + playsound(user ? user : src, 'sound/items/tools/change_drill.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/blood_filter/advanced/examine() diff --git a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm index a7f49026ffd69..18d28d36a04e2 100644 --- a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm +++ b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm @@ -47,6 +47,7 @@ icon_state = "berk_suit" icon = 'modular_skyrat/modules/gladiator/icons/berserk_icons.dmi' worn_icon = 'modular_skyrat/modules/gladiator/icons/berserk_suit.dmi' + worn_icon_digi = 'modular_skyrat/modules/gladiator/icons/berserk_suit_digi.dmi' hoodtype = /obj/item/clothing/head/hooded/berserker/gatsu w_class = WEIGHT_CLASS_BULKY armor_type = /datum/armor/berserker_gatsu @@ -183,7 +184,7 @@ /datum/status_effect/dodgeroll_iframes/proc/whiff() SIGNAL_HANDLER owner.balloon_alert_to_viewers("MISS!") - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + playsound(src, 'sound/items/weapons/thudswoosh.ogg', 50, TRUE, -1) return SUCCESSFUL_BLOCK /obj/item/claymore/dragonslayer/very_fucking_loud diff --git a/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm b/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm index 7a09648a7e52b..2b0c22348aa4f 100644 --- a/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm +++ b/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm @@ -23,7 +23,7 @@ attack_verb_simple = "cleave" attack_verb_continuous = "cleaves" attack_sound = 'modular_skyrat/master_files/sound/weapons/bloodyslice.ogg' - death_sound = 'sound/creatures/space_dragon_roar.ogg' + death_sound = 'sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg' death_message = "falls on his sword, ash evaporating from every hole in his armor." gps_name = "Forgotten Signal" gender = MALE @@ -115,7 +115,7 @@ if(prob(block_chance) && (phase == 1 || phase == 4) && !stunned) var/our_turf = get_turf(src) new /obj/effect/temp_visual/block(our_turf, COLOR_YELLOW) - playsound(src, 'sound/weapons/parry.ogg', BLOCK_SOUND_VOLUME * 2, vary = TRUE) // louder because lavaland low pressure maybe? + playsound(src, 'sound/items/weapons/parry.ogg', BLOCK_SOUND_VOLUME * 2, vary = TRUE) // louder because lavaland low pressure maybe? return FALSE . = ..() update_phase() @@ -217,6 +217,7 @@ var/mob/living/carbon/human/human_target = target var/datum/species/targetspecies = human_target.dna.species // The gladiator hates non-humans, he especially hates ash walkers. + // BUBBER TODO - Bring the says back when refactoring to basicmobs if(targetspecies.id == SPECIES_HUMAN) var/static/list/human_messages = list( "Is this all that is left?", @@ -226,7 +227,7 @@ "Show me a good time, miner!", "I'll give you the first hit.", ) - say(message = pick(human_messages)) + //say(message = pick(human_messages)) introduced |= WEAKREF(target) else if(targetspecies.id == SPECIES_LIZARD_ASH) var/static/list/ashie_messages = list( @@ -236,7 +237,7 @@ "GET OVER HERE!!", ) - say(message = pick(ashie_messages), language = /datum/language/ashtongue) + //say(message = pick(ashie_messages), language = /datum/language/ashtongue) introduced |= WEAKREF(target) get_angry() GiveTarget(target) @@ -248,13 +249,13 @@ "You will make a fine rug!", "For the necropolis!" ) - say(message = pick(other_humanoid_messages)) + //say(message = pick(other_humanoid_messages)) introduced |= WEAKREF(target) get_angry() GiveTarget(target) else //simplemobs beware - say("It's berserkin' time!") + //say("It's berserkin' time!") introduced |= WEAKREF(target) /// Checks against the Marked One's current health and updates his phase accordingly. Uses variable shitcode to make sure his phase updates only ever happen *once* @@ -421,7 +422,7 @@ /mob/living/simple_animal/hostile/megafauna/gladiator/proc/bone_knife_throw(atom/target) var/obj/item/knife/combat/bone/boned = new /obj/item/knife/combat/bone(get_turf(src)) boned.throwforce = 35 - playsound(src, 'sound/weapons/bolathrow.ogg', 60, 0) + playsound(src, 'sound/items/weapons/bolathrow.ogg', 60, 0) boned.throw_at(target, 7, 3, thrower = src) QDEL_IN(boned, 3 SECONDS) diff --git a/modular_skyrat/modules/gladiator/icons/berserk_suit_digi.dmi b/modular_skyrat/modules/gladiator/icons/berserk_suit_digi.dmi new file mode 100644 index 0000000000000..5e6edb5025757 Binary files /dev/null and b/modular_skyrat/modules/gladiator/icons/berserk_suit_digi.dmi differ diff --git a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm b/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm index 7aab64a8deca2..d33f525399ded 100644 --- a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm +++ b/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm @@ -162,7 +162,7 @@ resolve_parent.balloon_alert(user, "can't reach!") return FALSE - if(!isliving(user) || user.incapacitated()) + if(!isliving(user) || user.incapacitated) return FALSE var/obj/item/gun/gun_to_draw = locate() in real_location diff --git a/modular_skyrat/modules/goofsec/code/sol_fed.dm b/modular_skyrat/modules/goofsec/code/sol_fed.dm index 0a4af4683ade1..0e17fed0c140a 100644 --- a/modular_skyrat/modules/goofsec/code/sol_fed.dm +++ b/modular_skyrat/modules/goofsec/code/sol_fed.dm @@ -170,8 +170,8 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( var/datum/antagonist/ert/request_911/ert_antag = new cops_to_send cop.mind.add_antag_datum(ert_antag) - cop.mind.set_assigned_role(SSjob.GetJobType(ert_antag.ert_job_path)) - SSjob.SendToLateJoin(cop) + cop.mind.set_assigned_role(SSjob.get_job_type(ert_antag.ert_job_path)) + SSjob.send_to_late_join(cop) cop.grant_language(/datum/language/common, source = LANGUAGE_SPAWNER) if(cops_to_send == /datum/antagonist/ert/request_911/atmos) // charge for atmos techs @@ -201,7 +201,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( if (GLOB.cops_arrived) to_chat(user, span_warning("911 has already been called this shift!")) - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_deny.ogg', 50, FALSE) return FALSE if (!issilicon(user)) @@ -209,11 +209,11 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( var/obj/item/card/id/id_card = held_item?.GetID() if (!istype(id_card)) to_chat(user, span_warning("You need to swipe your ID!")) - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_deny.ogg', 50, FALSE) return FALSE if (!(ACCESS_CAPTAIN in id_card.access)) to_chat(user, span_warning("You are not authorized to do this!")) - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_deny.ogg', 50, FALSE) return FALSE else to_chat(user, "The console refuses to let you dial 911 as an AI or Cyborg!") @@ -243,7 +243,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( call_911(called_group) to_chat(user, span_notice("Authorization confirmed. 911 call dispatched to the Sol Federation [called_group_pretty].")) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) /datum/antagonist/ert/request_911 name = "911 Responder" @@ -384,7 +384,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /obj/item/encryptionkey/headset_solfed/atmos name = "\improper SolFed adv. atmos encryption key" icon_state = "cypherkey_medical" - independent = TRUE + special_channels = RADIO_SPECIAL_CENTCOM channels = list(RADIO_CHANNEL_SOLFED = 1, RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_COMMAND = 1) greyscale_config = /datum/greyscale_config/encryptionkey_medical greyscale_colors = "#ebebeb#2b2793" @@ -608,8 +608,8 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( var/datum/antagonist/ert/request_911/ert_antag = new type_to_summon cop.mind.add_antag_datum(ert_antag) - cop.mind.set_assigned_role(SSjob.GetJobType(ert_antag.ert_job_path)) - SSjob.SendToLateJoin(cop) + cop.mind.set_assigned_role(SSjob.get_job_type(ert_antag.ert_job_path)) + SSjob.send_to_late_join(cop) cop.grant_language(/datum/language/common, source = LANGUAGE_SPAWNER) var/obj/item/gangster_cellphone/phone = new() // biggest gang in the city @@ -772,14 +772,14 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( else message_admins("[ADMIN_LOOKUPFLW(user)] has beamed out [living_user.pulling] alongside them.") var/turf/pulling_turf = get_turf(living_user.pulling) - playsound(pulling_turf, 'sound/magic/Repulse.ogg', 100, 1) + playsound(pulling_turf, 'sound/effects/magic/Repulse.ogg', 100, 1) var/datum/effect_system/spark_spread/quantum/sparks = new sparks.set_up(10, 1, pulling_turf) sparks.attach(pulling_turf) sparks.start() qdel(living_user.pulling) var/turf/user_turf = get_turf(living_user) - playsound(user_turf, 'sound/magic/Repulse.ogg', 100, 1) + playsound(user_turf, 'sound/effects/magic/Repulse.ogg', 100, 1) var/datum/effect_system/spark_spread/quantum/sparks = new sparks.set_up(10, 1, user_turf) sparks.attach(user_turf) diff --git a/modular_skyrat/modules/gun_safety/code/safety_component.dm b/modular_skyrat/modules/gun_safety/code/safety_component.dm index 13f0c88f0fb17..ed5c7b622eebf 100644 --- a/modular_skyrat/modules/gun_safety/code/safety_component.dm +++ b/modular_skyrat/modules/gun_safety/code/safety_component.dm @@ -5,7 +5,7 @@ /// Holder for the toggle safety action var/datum/action/item_action/gun_safety_toggle/toggle_safety_action -/datum/component/gun_safety/Initialize(safety_currently_on = TRUE) +/datum/component/gun_safety/Initialize(safety_currently_on = FALSE) // Bubber Edit - Org: True . = ..() // Obviously gun safety should only apply to guns @@ -41,7 +41,8 @@ SIGNAL_HANDLER if(safety_currently_on) - user.balloon_alert(user, "safety on!") + user.balloon_alert(user, "The safety disengages!") // Bubber Edit + toggle_safeties(user) // Bubber Edit return COMPONENT_CANCEL_GUN_FIRE /// Calls toggle_safeties if the action type for doing so is used @@ -59,7 +60,7 @@ update_action_button_state() - playsound(parent, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(parent, 'sound/items/weapons/empty.ogg', 100, TRUE) user.visible_message( span_notice("[user] toggles [parent]'s safety [safety_currently_on ? "ON" : "OFF"]."), span_notice("You toggle [parent]'s safety [safety_currently_on ? "ON" : "OFF"].") diff --git a/modular_skyrat/modules/horrorform/code/horror_form.dm b/modular_skyrat/modules/horrorform/code/horror_form.dm index a2411c8fd77e5..d08fdb3be9b88 100644 --- a/modular_skyrat/modules/horrorform/code/horror_form.dm +++ b/modular_skyrat/modules/horrorform/code/horror_form.dm @@ -65,7 +65,7 @@ new_mob.name = new_mob.real_name new_mob.stored_changeling = user user.loc = new_mob - user.status_flags |= GODMODE + ADD_TRAIT(user, TRAIT_GODMODE, INNATE_TRAIT) user.mind.transfer_to(new_mob) user.spawn_gibs() //feedback_add_details("changeling_powers","HF") diff --git a/modular_skyrat/modules/horrorform/code/true_changeling.dm b/modular_skyrat/modules/horrorform/code/true_changeling.dm index 9024d82688512..e5be55f2ad80f 100644 --- a/modular_skyrat/modules/horrorform/code/true_changeling.dm +++ b/modular_skyrat/modules/horrorform/code/true_changeling.dm @@ -31,7 +31,7 @@ wander = FALSE attack_verb_continuous = "rips into" attack_verb_simple = "rip into" - attack_sound = 'sound/effects/blobattack.ogg' + attack_sound = 'sound/effects/blob/blobattack.ogg' 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 @@ -126,7 +126,7 @@ mind.transfer_to(stored_changeling) stored_changeling.Paralyze(10 SECONDS) //Make them helpless for 10 seconds stored_changeling.adjustBruteLoss(30, TRUE, TRUE) - stored_changeling.status_flags &= ~GODMODE + REMOVE_TRAIT(stored_changeling, TRAIT_GODMODE, INNATE_TRAIT) stored_changeling.emote("scream") stored_changeling.gib() stored_changeling = null @@ -201,7 +201,7 @@ horrorform.stored_changeling.loc = get_turf(horrorform) horrorform.mind.transfer_to(horrorform.stored_changeling) horrorform.stored_changeling.Stun(2 SECONDS) - horrorform.stored_changeling.status_flags &= ~GODMODE + REMOVE_TRAIT(horrorform.stored_changeling, TRAIT_GODMODE, INNATE_TRAIT) qdel(horrorform) return TRUE diff --git a/modular_skyrat/modules/hyposprays/code/hypospray_kits.dm b/modular_skyrat/modules/hyposprays/code/hypospray_kits.dm index ac1bfa53b0732..32bb559c4034d 100644 --- a/modular_skyrat/modules/hyposprays/code/hypospray_kits.dm +++ b/modular_skyrat/modules/hyposprays/code/hypospray_kits.dm @@ -163,7 +163,7 @@ /obj/item/storage/hypospraykit/proc/check_menu(mob/user) if(!istype(user)) return FALSE - if(user.incapacitated() || !user.is_holding(src)) + if(user.incapacitated || !user.is_holding(src)) return FALSE return TRUE diff --git a/modular_skyrat/modules/hyposprays/code/hyposprays_II.dm b/modular_skyrat/modules/hyposprays/code/hyposprays_II.dm index 86bf66e3435ec..78a906f098c86 100644 --- a/modular_skyrat/modules/hyposprays/code/hyposprays_II.dm +++ b/modular_skyrat/modules/hyposprays/code/hyposprays_II.dm @@ -191,7 +191,7 @@ to_chat(user, span_notice("You remove [vial] from [src].")) vial = null update_icon() - playsound(loc, 'sound/weapons/empty.ogg', 50, 1) + playsound(loc, 'sound/items/weapons/empty.ogg', 50, 1) else to_chat(user, span_notice("This hypo isn't loaded!")) return @@ -210,7 +210,7 @@ vial.forceMove(quickswap_loc) vial = new_vial user.visible_message(span_notice("[user] has loaded a vial into [src]."), span_notice("You have loaded [vial] into [src].")) - playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1) + playsound(loc, 'sound/items/weapons/autoguninsert.ogg', 35, 1) update_appearance() /obj/item/hypospray/mkii/item_interaction(mob/living/user, obj/item/tool, list/modifiers) @@ -318,7 +318,7 @@ /obj/item/hypospray/mkii/attack_hand(mob/living/user) if(user && loc == user && user.is_holding(src)) - if(user.incapacitated()) + if(user.incapacitated) return else if(!vial) . = ..() diff --git a/modular_skyrat/modules/ices_events/code/events/ev_meteors.dm b/modular_skyrat/modules/ices_events/code/events/ev_meteors.dm index b11ccf795bd33..52857ae15b71a 100644 --- a/modular_skyrat/modules/ices_events/code/events/ev_meteors.dm +++ b/modular_skyrat/modules/ices_events/code/events/ev_meteors.dm @@ -48,6 +48,7 @@ log_game("EVENT: Meteor Wave: ICES requested intensity is [wave_name]") +/* BUBBER EDIT REMOVAL BEGIN - moved to modular_zubbers/code/modules/events/meteor_wave.dm /datum/round_event/meteor_wave/New() . = ..() start_when = rand(METEOR_WAVE_MIN_NOTICE, METEOR_WAVE_MAX_NOTICE) @@ -57,6 +58,8 @@ priority_announce("Meteors have been detected on collision course with the station. The energy field generator is disabled or missing. First collision in approximately [start_when * 2] seconds. Ensure all sensitive areas and equipment are shielded.", "Meteor Alert", ANNOUNCER_METEORS) if(wave_name == "threatening" || wave_name == "spooky") INVOKE_ASYNC(SSsecurity_level, TYPE_PROC_REF(/datum/controller/subsystem/security_level/, minimum_security_level), SEC_LEVEL_ORANGE, TRUE, FALSE) +*/// BUBBER EDIT REMOVAL END + /datum/round_event/meteor_wave/tick(seconds_between_ticks) if(ISMULTIPLE(activeFor, METEOR_TICKS_BETWEEN_WAVES)) diff --git a/modular_skyrat/modules/icspawning/code/observer.dm b/modular_skyrat/modules/icspawning/code/observer.dm index e0dd2137fc68b..d6ae796297fd3 100644 --- a/modular_skyrat/modules/icspawning/code/observer.dm +++ b/modular_skyrat/modules/icspawning/code/observer.dm @@ -67,7 +67,7 @@ QDEL_IN(user, 1) if (teleport_option == "Bluespace") - playsound(spawned_player, 'sound/magic/Disable_Tech.ogg', 100, 1) + playsound(spawned_player, 'sound/effects/magic/Disable_Tech.ogg', 100, 1) if(user.mind && isliving(spawned_player)) user.mind.transfer_to(spawned_player, 1) // second argument to force key move to new mob @@ -149,4 +149,4 @@ if(isnull(dresscode)) return - return dresscode \ No newline at end of file + return dresscode diff --git a/modular_skyrat/modules/icspawning/code/spell.dm b/modular_skyrat/modules/icspawning/code/spell.dm index fbbb3602b5e53..b323535f8aa43 100644 --- a/modular_skyrat/modules/icspawning/code/spell.dm +++ b/modular_skyrat/modules/icspawning/code/spell.dm @@ -1,7 +1,7 @@ /datum/action/cooldown/spell/return_back name = "Return" desc = "Activates your return beacon." - sound = 'sound/magic/Repulse.ogg' + sound = 'sound/effects/magic/Repulse.ogg' button_icon_state = "lightning" spell_requirements = NONE invocation = "Return on!" diff --git a/modular_skyrat/modules/implants/code/augments_arms.dm b/modular_skyrat/modules/implants/code/augments_arms.dm index aefb5c076fd40..c349cb8deb577 100644 --- a/modular_skyrat/modules/implants/code/augments_arms.dm +++ b/modular_skyrat/modules/implants/code/augments_arms.dm @@ -1,11 +1,11 @@ -#define KNIFE_HITSOUND 'sound/weapons/bladeslice.ogg' -#define KNIFE_USESOUND 'sound/weapons/bladeslice.ogg' +#define KNIFE_HITSOUND 'sound/items/weapons/bladeslice.ogg' +#define KNIFE_USESOUND 'sound/items/weapons/bladeslice.ogg' #define KNIFE_ATTACK_VERB_CONTINUOUS list("slashes", "tears", "slices", "tears", "lacerates", "rips", "dices", "cuts", "rends") #define KNIFE_ATTACK_VERB_SIMPLE list("slash", "tear", "slice", "tear", "lacerate", "rip", "dice", "cut", "rend") #define KNIFE_SHARPNESS SHARP_EDGED #define KNIFE_BARE_WOUND_BONUS 15 -#define CUTTER_HITSOUND 'sound/items/wirecutter.ogg' -#define CUTTER_USESOUND 'sound/items/wirecutter.ogg' +#define CUTTER_HITSOUND 'sound/items/tools/wirecutter.ogg' +#define CUTTER_USESOUND 'sound/items/tools/wirecutter.ogg' #define CUTTER_ATTACK_VERB_CONTINUOUS list("bashes", "batters", "bludgeons", "thrashes", "whacks") #define CUTTER_ATTACK_VERB_SIMPLE list("bash", "batter", "bludgeon", "thrash", "whack") #define CUTTER_FORCE 6 @@ -35,7 +35,7 @@ icon_state = "energy_mantis_blade" force = 30 armour_penetration = 10 //Energy isn't as good at going through armor as it is through flesh alone. - hitsound = 'sound/weapons/blade1.ogg' + hitsound = 'sound/items/weapons/blade1.ogg' /obj/item/organ/internal/cyberimp/arm/armblade name = "arm blade implant" @@ -71,7 +71,7 @@ item_flags = NEEDS_PERMIT //Beepers gets angry if you get caught with this. /obj/item/knife/razor_claws/attack_self(mob/user) - playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/items/tools/change_drill.ogg', 50, TRUE) if(tool_behaviour != TOOL_WIRECUTTER) tool_behaviour = TOOL_WIRECUTTER to_chat(user, span_notice("You shift [src] into Precision mode, for wirecutting.")) @@ -171,7 +171,7 @@ sharpness = SHARP_EDGED attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices") attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice") - hitsound = 'sound/weapons/chainsawhit.ogg' + hitsound = 'sound/items/weapons/chainsawhit.ogg' tool_behaviour = TOOL_SAW toolspeed = 1 diff --git a/modular_skyrat/modules/inflatables/code/inflatable.dm b/modular_skyrat/modules/inflatables/code/inflatable.dm index 47cfef36777cf..b4338f10238e2 100644 --- a/modular_skyrat/modules/inflatables/code/inflatable.dm +++ b/modular_skyrat/modules/inflatables/code/inflatable.dm @@ -19,7 +19,7 @@ /// The type we drop when deflated. var/deflated_type = /obj/item/inflatable /// The hitsound made when we're... hit... - var/hit_sound = 'sound/effects/Glasshit.ogg' + var/hit_sound = 'sound/effects/glass/glasshit.ogg' /// How quickly we deflate when manually deflated. var/manual_deflation_time = 3 SECONDS /// Whether or not the inflatable has been deflated @@ -161,7 +161,7 @@ if(locate(structure_type) in get_turf(user)) to_chat(user, span_warning("There is already a wall here!")) return - playsound(loc, 'sound/items/zip.ogg', 75, 1) + playsound(loc, 'sound/items/zip/zip.ogg', 75, 1) to_chat(user, span_notice("You inflate [src].")) if(do_after(user, 1 SECONDS, src)) new structure_type(get_turf(user)) diff --git a/modular_skyrat/modules/jukebox/code/dance_machine.dm b/modular_skyrat/modules/jukebox/code/dance_machine.dm index 54c8e27ed893c..42ddb57030db2 100644 --- a/modular_skyrat/modules/jukebox/code/dance_machine.dm +++ b/modular_skyrat/modules/jukebox/code/dance_machine.dm @@ -459,7 +459,7 @@ update_use_power(IDLE_POWER_USE) STOP_PROCESSING(SSobj, src) dance_over() - playsound(src,'sound/machines/terminal_off.ogg',50,TRUE) + playsound(src,'sound/machines/terminal/terminal_off.ogg',50,TRUE) update_appearance(UPDATE_ICON_STATE) stop = world.time + 100 diff --git a/modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm b/modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm index 8c964eae5823b..afa39efb0c795 100644 --- a/modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm +++ b/modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm @@ -35,7 +35,7 @@ SUBSYSTEM_DEF(jukeboxes) if(!(M.client.prefs.read_preference(/datum/preference/toggle/sound_instruments))) continue - M.playsound_local(M, null, jukebox.volume, channel = youvegotafreejukebox[2], sound_to_use = song_to_init) + M.playsound_local(M, null, (jukebox.volume / 2), channel = youvegotafreejukebox[2], sound_to_use = song_to_init) // BUBBER EDIT - Halves the volume return activejukeboxes.len /datum/controller/subsystem/jukeboxes/proc/removejukebox(IDtoremove) diff --git a/modular_skyrat/modules/jukebox/code/ravemod.dm b/modular_skyrat/modules/jukebox/code/ravemod.dm index ac64dd6dcdee7..47ce527810b7f 100644 --- a/modular_skyrat/modules/jukebox/code/ravemod.dm +++ b/modular_skyrat/modules/jukebox/code/ravemod.dm @@ -58,7 +58,7 @@ mod.wearer.stop_sound_channel(CHANNEL_JUKEBOX) if(deleting) return - SEND_SOUND(mod.wearer, sound('sound/machines/terminal_off.ogg', volume = 50, channel = CHANNEL_JUKEBOX)) + SEND_SOUND(mod.wearer, sound('sound/machines/terminal/terminal_off.ogg', volume = 50, channel = CHANNEL_JUKEBOX)) /obj/item/mod/module/visor/rave/generate_worn_overlay(mutable_appearance/standing) . = ..() diff --git a/modular_skyrat/modules/layer_shift/code/mob_movement.dm b/modular_skyrat/modules/layer_shift/code/mob_movement.dm index 740b3e2289ed8..e2ce3dc36e521 100644 --- a/modular_skyrat/modules/layer_shift/code/mob_movement.dm +++ b/modular_skyrat/modules/layer_shift/code/mob_movement.dm @@ -10,7 +10,7 @@ set name = "Shift Layer Upwards" set category = "IC" - if(incapacitated()) + if(incapacitated) to_chat(src, span_warning("You can't do that right now!")) return FALSE @@ -29,7 +29,7 @@ set name = "Shift Layer Downwards" set category = "IC" - if(incapacitated()) + if(incapacitated) to_chat(src, span_warning("You can't do that right now!")) return FALSE diff --git a/modular_skyrat/modules/liquids/code/cleaning/drains.dm b/modular_skyrat/modules/liquids/code/cleaning/drains.dm index 4c98b1931d830..b27a1679d61da 100644 --- a/modular_skyrat/modules/liquids/code/cleaning/drains.dm +++ b/modular_skyrat/modules/liquids/code/cleaning/drains.dm @@ -26,7 +26,7 @@ if(!I.tool_start_check(user, amount=0)) return TRUE - playsound(src, 'sound/items/welder2.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/welder2.ogg', 50, TRUE) to_chat(user, span_notice("You start [welded ? "unwelding" : "welding"] [src]...")) if(I.use_tool(src, user, 20)) to_chat(user, span_notice("You [welded ? "unweld" : "weld"] [src].")) diff --git a/modular_skyrat/modules/liquids/code/ocean_flora.dm b/modular_skyrat/modules/liquids/code/ocean_flora.dm index 3cd2af2fa0a57..c31ec59c6bf8f 100644 --- a/modular_skyrat/modules/liquids/code/ocean_flora.dm +++ b/modular_skyrat/modules/liquids/code/ocean_flora.dm @@ -61,7 +61,7 @@ if(!I.tool_start_check(user, amount=0)) return TRUE - playsound(src, 'sound/items/welder2.ogg', 50, TRUE) + playsound(src, 'sound/items/tools/welder2.ogg', 50, TRUE) if(first) to_chat(user, span_notice("You start slicing the [src]...")) if(I.use_tool(src, user, 2 SECONDS)) diff --git a/modular_skyrat/modules/mapping/code/areas/ruins.dm b/modular_skyrat/modules/mapping/code/areas/ruins.dm index 120709108b1ef..c9c35025747f3 100644 --- a/modular_skyrat/modules/mapping/code/areas/ruins.dm +++ b/modular_skyrat/modules/mapping/code/areas/ruins.dm @@ -3,17 +3,17 @@ /area/ruin/powered/miningfacility name = "Abandoned Nanotrasen Mining Facility" icon_state = "dk_yellow" - ambientsounds = list('sound/ambience/title3.ogg') //Classic vibes + ambientsounds = list('sound/music/lobby_music/title3.ogg') //Classic vibes /area/ruin/powered/crashedshuttle name = "Crashed Shuttle" icon_state = "dk_yellow" - ambientsounds = list('sound/ambience/ambiodd.ogg') + ambientsounds = list('sound/ambience/misc/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') + ambientsounds = list('sound/ambience/holy/ambicha1.ogg', 'sound/ambience/holy/ambicha2.ogg', 'sound/ambience/holy/ambicha3.ogg') /area/ruin/powered/biodome name = "Jungle Biodome" diff --git a/modular_skyrat/modules/mapping/code/mob_spawns.dm b/modular_skyrat/modules/mapping/code/mob_spawns.dm index f8a172ee005cd..13310b10af6b6 100644 --- a/modular_skyrat/modules/mapping/code/mob_spawns.dm +++ b/modular_skyrat/modules/mapping/code/mob_spawns.dm @@ -504,6 +504,9 @@ icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi' icon_state = "cryopod-open" +/obj/structure/showcase/machinery/oldpod/used/psyker + icon = 'icons/obj/machines/sleeper.dmi' // SKYRAT TODO - Add aesthetics sprites + //IDS// /obj/item/card/id/away/silver diff --git a/modular_skyrat/modules/mapping/code/radio.dm b/modular_skyrat/modules/mapping/code/radio.dm index a65f1baff247d..e99cb5a37e108 100644 --- a/modular_skyrat/modules/mapping/code/radio.dm +++ b/modular_skyrat/modules/mapping/code/radio.dm @@ -1,19 +1,19 @@ /obj/item/encryptionkey/headset_syndicate/cybersun name = "cybersun radio encryption key" channels = list(RADIO_CHANNEL_CYBERSUN = 1) - independent = TRUE + special_channels = RADIO_SPECIAL_CENTCOM /obj/item/encryptionkey/headset_syndicate/interdyne name = "interdyne radio encryption key" channels = list(RADIO_CHANNEL_INTERDYNE = 1) - independent = TRUE + special_channels = RADIO_SPECIAL_CENTCOM /obj/item/encryptionkey/headset_syndicate/guild name = "private radio encryption key" channels = list(RADIO_CHANNEL_GUILD = 1) - independent = TRUE + special_channels = RADIO_SPECIAL_CENTCOM /obj/item/encryptionkey/headset_cargo/tarkon name = "tarkon industry radio encryption key" channels = list(RADIO_CHANNEL_TARKON = 1) - independent = TRUE + special_channels = RADIO_SPECIAL_CENTCOM diff --git a/modular_skyrat/modules/mapping/code/tools.dm b/modular_skyrat/modules/mapping/code/tools.dm index f8bada7e2c90b..03d786ec93ae9 100644 --- a/modular_skyrat/modules/mapping/code/tools.dm +++ b/modular_skyrat/modules/mapping/code/tools.dm @@ -39,7 +39,7 @@ icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi' icon_state = "screwdriver_a" inhand_icon_state = "screwdriver_nuke" - usesound = 'sound/items/pshoom.ogg' + usesound = 'sound/items/pshoom/pshoom.ogg' toolspeed = 0.2 random_color = FALSE greyscale_colors = null @@ -52,7 +52,7 @@ 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' + usesound = 'sound/items/weapons/sonic_jackhammer.ogg' icon_state = "crowbar" toolspeed = 0.2 diff --git a/modular_skyrat/modules/marines/code/smartgun.dm b/modular_skyrat/modules/marines/code/smartgun.dm index 549e966ad8674..0003ef3cac8df 100644 --- a/modular_skyrat/modules/marines/code/smartgun.dm +++ b/modular_skyrat/modules/marines/code/smartgun.dm @@ -10,8 +10,8 @@ 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/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' + rack_sound = 'sound/items/weapons/gun/l6/l6_rack.ogg' + suppressed_sound = 'sound/items/weapons/gun/general/heavy_shot_suppressed.ogg' fire_sound_volume = 70 weapon_weight = WEAPON_HEAVY slot_flags = ITEM_SLOT_BACK @@ -60,7 +60,7 @@ 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) + playsound(src, 'sound/items/weapons/gun/l6/l6_door.ogg', 60, TRUE) update_appearance() return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/modular_skyrat/modules/medical/code/anesthetic_machine.dm b/modular_skyrat/modules/medical/code/anesthetic_machine.dm index f5c9894b70921..9409d1555f0ea 100644 --- a/modular_skyrat/modules/medical/code/anesthetic_machine.dm +++ b/modular_skyrat/modules/medical/code/anesthetic_machine.dm @@ -229,5 +229,5 @@ /obj/item/anesthetic_machine_kit/attack_self(mob/user) new /obj/machinery/anesthetic_machine(user.loc) - playsound(get_turf(user), 'sound/weapons/circsawhit.ogg', 50, TRUE) + playsound(get_turf(user), 'sound/items/weapons/circsawhit.ogg', 50, TRUE) qdel(src) diff --git a/modular_skyrat/modules/medical/code/trauma_surgery.dm b/modular_skyrat/modules/medical/code/trauma_surgery.dm index 00ca562d09436..2b3b9c1b8e104 100644 --- a/modular_skyrat/modules/medical/code/trauma_surgery.dm +++ b/modular_skyrat/modules/medical/code/trauma_surgery.dm @@ -59,7 +59,7 @@ display_pain(target, "Your head goes totally numb for a moment, the pain is overwhelming! You begin to see the light... ") target.cure_all_traumas(TRAUMA_RESILIENCE_MAGIC) - playsound(source = get_turf(target), soundin = 'sound/magic/repulse.ogg', vol = 75, vary = TRUE, falloff_distance = 2) + playsound(source = get_turf(target), soundin = 'sound/effects/magic/repulse.ogg', vol = 75, vary = TRUE, falloff_distance = 2) if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed)) target.mind.remove_antag_datum(/datum/antagonist/brainwashed) if(prob(75)) diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm b/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm index 35b68bf6d8e3a..87eaaa302b364 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm +++ b/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm @@ -167,7 +167,7 @@ RETURN_TYPE(/datum/wound/burn/robotic/overheat) for (var/datum/wound/found_wound as anything in limb.wounds) var/datum/wound_pregen_data/pregen_data = found_wound.get_pregen_data() - if (pregen_data.wound_series == WOUND_SERIES_METAL_BURN_OVERHEAT && found_wound.severity >= WOUND_SEVERITY_SEVERE) // meh solution but whateva + if (pregen_data.wound_series == WOUND_SERIES_METAL_BURN_OVERHEAT && found_wound.severity >= WOUND_SEVERITY_MODERATE) // meh solution but whateva return found_wound return null diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm b/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm index e30c4aeed1c88..3ececf6b39801 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm +++ b/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm @@ -213,10 +213,10 @@ if (HAS_TRAIT(src, TRAIT_WOUND_SCANNED)) delay_mult *= 0.75 - if (!welder.use_tool(target = victim, user = user, delay = 7 SECONDS * delay_mult, volume = 50, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) + if (!welder.use_tool(target = victim, user = user, delay = 3 SECONDS * delay_mult, volume = 50, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return TRUE - var/wound_path = /datum/wound/burn/robotic/overheat/severe + var/wound_path = /datum/wound/burn/robotic/overheat/moderate if (user != victim && user.combat_mode) wound_path = /datum/wound/burn/robotic/overheat/critical // it really isnt that bad, overheat wounds are a bit funky user.visible_message(span_danger("[user] heats [victim]'s [limb.plaintext_zone] aggressively, overheating it far beyond the necessary point!"), \ diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/secures_internals.dm b/modular_skyrat/modules/medical/code/wounds/synth/blunt/secures_internals.dm index 70a68a488ecfa..45221067489e7 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/blunt/secures_internals.dm +++ b/modular_skyrat/modules/medical/code/wounds/synth/blunt/secures_internals.dm @@ -173,7 +173,7 @@ victim_message = self_message to_chat(victim, victim_message) - playsound(get_turf(crowbarring_item), 'sound/machines/airlock_alien_prying.ogg', 30, TRUE) + playsound(get_turf(crowbarring_item), 'sound/machines/airlock/airlock_alien_prying.ogg', 30, TRUE) if (!crowbarring_item.use_tool(target = victim, user = user, delay = (7 SECONDS * delay_mult), volume = 50, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return TRUE diff --git a/modular_skyrat/modules/medical/code/wounds/synth/medicine_reagents.dm b/modular_skyrat/modules/medical/code/wounds/synth/medicine_reagents.dm index 031055413142e..69f142f0f3921 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/medicine_reagents.dm +++ b/modular_skyrat/modules/medical/code/wounds/synth/medicine_reagents.dm @@ -43,7 +43,6 @@ taste_description = "dull plasma" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC - metabolization_rate = 0.5 // fast overdose_threshold = 60 // it takes a lot, if youre really messed up you CAN hit this but its unlikely chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -95,4 +94,4 @@ Has the side effect of causing movement slowdown." icon = 'icons/obj/medical/chemical.dmi' icon_state = "sprayer_med_yellow" - list_reagents = list(/datum/reagent/dinitrogen_plasmide = 100) \ No newline at end of file + list_reagents = list(/datum/reagent/dinitrogen_plasmide = 100) diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_burns.dm b/modular_skyrat/modules/medical/code/wounds/synth/robotic_burns.dm index cc3643009fc97..c41ac8d3d97b6 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/robotic_burns.dm +++ b/modular_skyrat/modules/medical/code/wounds/synth/robotic_burns.dm @@ -282,7 +282,7 @@ var/gauze_or_not = (!isnull(gauze) ? ", but [gauze] helps to keep it together" : "") var/clothing_text = (!get_location_accessible(victim, limb.body_zone) ? ", [victim.p_their()] clothing absorbing some of the liquid" : "") victim.visible_message(span_warning("[victim]'s [limb.plaintext_zone] strains from the thermal shock[clothing_text][gauze_or_not]!")) - playsound(victim, 'sound/items/welder.ogg', 25) + playsound(victim, 'sound/items/tools/welder.ogg', 25) var/damage = (((abs(temp_delta) * heat_shock_delta_to_damage_ratio) * gauze_mult) * heat_shock_damage_mult) * heat_adjustment_used limb.receive_damage(brute = damage, wound_bonus = CANT_WOUND) diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm b/modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm index 26e8a1ab54d24..c34d258c8e0bc 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm +++ b/modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm @@ -42,7 +42,7 @@ process_shock_spark_count_min = 1 wirecut_repair_percent = 0.078 - wire_repair_percent = 0.018 + wire_repair_percent = 0.036 initial_sparks_amount = 1 @@ -85,11 +85,11 @@ process_shock_spark_count_min = 1 wirecut_repair_percent = 0.046 - wire_repair_percent = 0.01 + wire_repair_percent = 0.024 initial_sparks_amount = 3 - status_effect_type = /datum/status_effect/wound/electrical_damage/pierce/moderate + status_effect_type = /datum/status_effect/wound/electrical_damage/pierce/severe a_or_from = "a" @@ -130,11 +130,11 @@ process_shock_spark_count_min = 2 wirecut_repair_percent = 0.032 - wire_repair_percent = 0.008 + wire_repair_percent = 0.017 initial_sparks_amount = 8 - status_effect_type = /datum/status_effect/wound/electrical_damage/pierce/moderate + status_effect_type = /datum/status_effect/wound/electrical_damage/pierce/critical a_or_from = "a" diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm b/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm index e478bc3ade769..dc87c6797701f 100644 --- a/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm +++ b/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm @@ -533,7 +533,7 @@ process_shock_spark_count_min = 1 wirecut_repair_percent = 0.1 - wire_repair_percent = 0.023 + wire_repair_percent = 0.0368 initial_sparks_amount = 1 @@ -576,7 +576,7 @@ process_shock_spark_count_min = 1 wirecut_repair_percent = 0.09 - wire_repair_percent = 0.015 + wire_repair_percent = 0.03 initial_sparks_amount = 3 @@ -621,7 +621,7 @@ process_shock_spark_count_min = 2 wirecut_repair_percent = 0.08 - wire_repair_percent = 0.01 + wire_repair_percent = 0.027 initial_sparks_amount = 8 diff --git a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm b/modular_skyrat/modules/microfusion/code/microfusion_cell.dm index 8c797155ad40d..9549a6b80008d 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm +++ b/modular_skyrat/modules/microfusion/code/microfusion_cell.dm @@ -47,7 +47,7 @@ These are basically advanced cells. /// Do we play an alarm when empty? var/empty_alarm = TRUE /// What sound do we play when empty? - var/empty_alarm_sound = 'sound/weapons/gun/general/empty_alarm.ogg' + var/empty_alarm_sound = 'sound/items/weapons/gun/general/empty_alarm.ogg' /// Do we have the self charging upgrade? var/self_charging = FALSE /// We use this to edit the reload time of the gun @@ -125,7 +125,7 @@ These are basically advanced cells. balloon_alert(user, "no attachments!") return remove_attachments() - playsound(src, 'sound/items/screwdriver.ogg', 70, TRUE) + playsound(src, 'sound/items/tools/screwdriver.ogg', 70, TRUE) balloon_alert(user, "attachments removed") /obj/item/stock_parts/power_store/cell/microfusion/process(seconds_per_tick) diff --git a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm b/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm index 1c502060083e2..1f627080f9cc7 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm +++ b/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm @@ -265,7 +265,7 @@ if(!phase_emitter) balloon_alert(user, "no phase emitter!") return - playsound(src, 'sound/items/crowbar.ogg', 70, TRUE) + playsound(src, 'sound/items/tools/crowbar.ogg', 70, TRUE) remove_emitter() /obj/item/gun/microfusion/click_alt(mob/user) @@ -663,7 +663,7 @@ /obj/item/gun/microfusion/proc/remove_attachment(obj/item/microfusion_gun_attachment/microfusion_gun_attachment, mob/living/user) balloon_alert(user, "removed attachment") - playsound(src, 'sound/items/screwdriver.ogg', 70) + playsound(src, 'sound/items/tools/screwdriver.ogg', 70) microfusion_gun_attachment.forceMove(get_turf(src)) attachments -= microfusion_gun_attachment microfusion_gun_attachment.remove_attachment(src) diff --git a/modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm b/modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm index 0f5379c654815..12c1783963d59 100644 --- a/modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm +++ b/modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm @@ -311,7 +311,7 @@ The gun fires fast heavy lasers but takes a long time to fire. heat_addition = 150 power_usage = 100 delay_to_add = 2.5 SECONDS - new_fire_sound = 'sound/weapons/lasercannonfire.ogg' + new_fire_sound = 'sound/items/weapons/lasercannonfire.ogg' projectile_override = /obj/projectile/beam/laser/microfusion/lance /obj/item/microfusion_gun_attachment/barrel/lance/examine(mob/user) diff --git a/modular_skyrat/modules/microfusion/code/projectiles.dm b/modular_skyrat/modules/microfusion/code/projectiles.dm index 828b0a1f0814c..abf33c01d5dfa 100644 --- a/modular_skyrat/modules/microfusion/code/projectiles.dm +++ b/modular_skyrat/modules/microfusion/code/projectiles.dm @@ -25,7 +25,7 @@ damage = 41 damage_type = STAMINA armor_flag = ENERGY - hitsound = 'sound/weapons/tap.ogg' + hitsound = 'sound/items/weapons/tap.ogg' eyeblur = 0 impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser light_color = LIGHT_COLOR_BLUE diff --git a/modular_skyrat/modules/mining/boulder.dm b/modular_skyrat/modules/mining/boulder.dm index 0aa52f2097461..105057e4f20b6 100644 --- a/modular_skyrat/modules/mining/boulder.dm +++ b/modular_skyrat/modules/mining/boulder.dm @@ -23,7 +23,7 @@ else process_speed = INATE_BOULDER_SPEED_MULTIPLIER - playsound(src, 'sound/effects/rocktap1.ogg', 50) + playsound(src, 'sound/effects/rock/rocktap1.ogg', 50) if(!continued) to_chat(user, span_notice("You scrape away at \the [src]... speed is [process_speed].")) @@ -43,7 +43,7 @@ if(durability <= 0) convert_to_ore() to_chat(user, span_notice("You finish working on \the [src], and it crumbles into ore.")) - playsound(src, 'sound/effects/rock_break.ogg', 50) + playsound(src, 'sound/effects/rock/rock_break.ogg', 50) user.mind?.adjust_experience(/datum/skill/mining, MINING_SKILL_BOULDER_SIZE_XP * 0.5) qdel(src) return diff --git a/modular_skyrat/modules/modular_implants/code/misc_devices.dm b/modular_skyrat/modules/modular_implants/code/misc_devices.dm index 8f097a34d3320..aaea270c488dc 100644 --- a/modular_skyrat/modules/modular_implants/code/misc_devices.dm +++ b/modular_skyrat/modules/modular_implants/code/misc_devices.dm @@ -157,7 +157,7 @@ user.visible_message(span_notice("[user] upgrades [target_glasses] with [src]."), span_notice("You upgrade [target_glasses] to be NIF HUD compatible.")) target_glasses.name = "\improper HUD-upgraded " + target_glasses.name target_glasses.AddElement(/datum/element/nifsoft_hud) - playsound(target_glasses.loc, 'sound/weapons/circsawhit.ogg', 50, vary = TRUE) + playsound(target_glasses.loc, 'sound/items/weapons/circsawhit.ogg', 50, vary = TRUE) if(!multiple_uses) qdel(src) diff --git a/modular_skyrat/modules/modular_implants/code/nifs.dm b/modular_skyrat/modules/modular_implants/code/nifs.dm index 300c41413cf8a..5fba0c6a353be 100644 --- a/modular_skyrat/modules/modular_implants/code/nifs.dm +++ b/modular_skyrat/modules/modular_implants/code/nifs.dm @@ -131,7 +131,7 @@ if(linked_mob && stored_ckey != insertee.ckey && theft_protection) insertee.audible_message(span_warning("[src] lets out a negative buzz before forcefully removing itself from [insertee]'s brain.")) - playsound(insertee, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + playsound(insertee, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE) Remove(insertee) forceMove(get_turf(insertee)) diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm index 7840d312dfb66..88559605f2344 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm @@ -90,7 +90,7 @@ return ITEM_INTERACT_BLOCKING var/datum/component/carrier/soulcatcher/new_soulcatcher = interacting_with.AddComponent(/datum/component/carrier/soulcatcher/attachable) - playsound(interacting_with.loc, 'sound/weapons/circsawhit.ogg', 50, vary = TRUE) + playsound(interacting_with.loc, 'sound/items/weapons/circsawhit.ogg', 50, vary = TRUE) var/datum/carrier_room/target_room = new_soulcatcher.carrier_rooms[1] var/list/current_mobs = linked_soulcatcher.get_current_mobs() diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm index 3ef62e68ac2b4..7c08663ae3683 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm @@ -63,7 +63,7 @@ if(!target_room) return FALSE - SEND_SOUND(target_ghost, 'sound/misc/notice2.ogg') + SEND_SOUND(target_ghost, 'sound/announcer/notice/notice2.ogg') window_flash(target_ghost.client) if(tgui_alert(target_ghost, "[user] wants to transfer you to [target_room] inside of a soulcatcher, do you accept?", name, list("Yes", "No"), 30 SECONDS, autofocus = FALSE) != "Yes") @@ -86,7 +86,7 @@ if(!target_room) return FALSE - SEND_SOUND(target_mob, 'sound/misc/notice2.ogg') + SEND_SOUND(target_mob, 'sound/announcer/notice/notice2.ogg') window_flash(target_mob.client) if((tgui_alert(target_mob, "Do you wish to enter [target_room]? This will remove you from your body until you leave.", name, list("Yes", "No"), 30 SECONDS, FALSE) != "Yes") || (tgui_alert(target_mob, "Are you sure about this?", name, list("Yes", "No"), 30 SECONDS, FALSE) != "Yes")) diff --git a/modular_skyrat/modules/modular_items/code/modular_glasses.dm b/modular_skyrat/modules/modular_items/code/modular_glasses.dm index f9232ae9d49d9..934fcad8ee762 100644 --- a/modular_skyrat/modules/modular_items/code/modular_glasses.dm +++ b/modular_skyrat/modules/modular_items/code/modular_glasses.dm @@ -49,7 +49,7 @@ /obj/item/clothing/glasses/hud/ar/proc/toggle_mode(mob/user, voluntary) - if(!istype(user) || user.incapacitated()) + if(!istype(user) || user.incapacitated) return if(mode == modes[mode]) diff --git a/modular_skyrat/modules/modular_items/code/summon_beacon.dm b/modular_skyrat/modules/modular_items/code/summon_beacon.dm index 9ca0d8a7a01a2..340053e92f4a3 100644 --- a/modular_skyrat/modules/modular_items/code/summon_beacon.dm +++ b/modular_skyrat/modules/modular_items/code/summon_beacon.dm @@ -47,7 +47,7 @@ if(user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE else - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, TRUE) return FALSE /obj/item/summon_beacon/proc/generate_display_names() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm index 41a6aa81eab25..2fe1b887927db 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm @@ -117,7 +117,7 @@ /obj/item/clothing/mask/gas/bdsm_mask/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE @@ -148,12 +148,12 @@ // To make in unremovable without helping when mask is on (for MouseDrop) /datum/storage/pockets/small/bdsm_mask/on_mousedrop_onto(datum/source, atom/over_object, mob/user) var/obj/item/clothing/mask/gas/bdsm_mask/mask = source - if(!istype(mask) || ismecha(user.loc) || user.incapacitated() || !mask.is_locked(user)) + if(!istype(mask) || ismecha(user.loc) || user.incapacitated || !mask.is_locked(user)) return ..() return NONE //handled in mask mousedrop, don't allow content dumping /obj/item/clothing/mask/gas/bdsm_mask/mouse_drop_dragged(atom/over_object, mob/user, src_location, over_location, params) - if(ismecha(user.loc) || user.incapacitated() || !is_locked(user)) + if(ismecha(user.loc) || user.incapacitated || !is_locked(user)) return if(!istype(over_object, /atom/movable/screen/inventory/hand)) return @@ -261,7 +261,7 @@ /obj/item/clothing/mask/gas/bdsm_mask/proc/toggle(mob/living/carbon/user) mask_on = !mask_on to_chat(user, span_notice("You turn the air filter [mask_on ? "on. Use with caution!" : "off. Now it's safe to wear."]")) - conditional_pref_sound(user, mask_on ? 'sound/weapons/magin.ogg' : 'sound/weapons/magout.ogg', 40, TRUE) + conditional_pref_sound(user, mask_on ? 'sound/items/weapons/magin.ogg' : 'sound/items/weapons/magout.ogg', 40, TRUE) update_icon_state() update_mob_action_buttonss() update_icon() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm index 16f0fec9eb84c..d834543149c7b 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm @@ -76,14 +76,14 @@ if(user_client == "speech") if(muzzle == TRUE) muzzle = FALSE - conditional_pref_sound(usr, 'sound/weapons/magout.ogg', 40, TRUE) + conditional_pref_sound(usr, 'sound/items/weapons/magout.ogg', 40, TRUE) to_chat(usr, span_notice("Speech switch off")) if(usr.get_item_by_slot(ITEM_SLOT_HEAD) == src) REMOVE_TRAIT(usr, TRAIT_MUTE, CLOTHING_TRAIT) //to_chat(U, span_purple("Your mouth is free. you breathe out with relief.")) else muzzle = TRUE - conditional_pref_sound(usr, 'sound/weapons/magin.ogg', 40, TRUE) + conditional_pref_sound(usr, 'sound/items/weapons/magin.ogg', 40, TRUE) to_chat(usr, span_notice("Speech switch on")) if(usr.get_item_by_slot(ITEM_SLOT_HEAD) == src) ADD_TRAIT(usr, TRAIT_MUTE, CLOTHING_TRAIT) @@ -91,14 +91,14 @@ if(user_client == "hearing") if(earmuffs == TRUE) earmuffs = FALSE - conditional_pref_sound(usr, 'sound/weapons/magout.ogg', 40, TRUE) + conditional_pref_sound(usr, 'sound/items/weapons/magout.ogg', 40, TRUE) to_chat(usr, span_notice("Hearing switch off")) if(usr.get_item_by_slot(ITEM_SLOT_HEAD) == src) REMOVE_TRAIT(usr, TRAIT_DEAF, CLOTHING_TRAIT) //to_chat(U, span_purple("Finally you can hear the world around again.")) else earmuffs = TRUE - conditional_pref_sound(usr, 'sound/weapons/magin.ogg', 40, TRUE) + conditional_pref_sound(usr, 'sound/items/weapons/magin.ogg', 40, TRUE) to_chat(usr, span_notice("Hearing switch on")) if(usr.get_item_by_slot(ITEM_SLOT_HEAD) == src) ADD_TRAIT(usr, TRAIT_DEAF, CLOTHING_TRAIT) @@ -107,14 +107,14 @@ var/mob/living/carbon/human/user = usr if(prevent_vision == TRUE) prevent_vision = FALSE - conditional_pref_sound(usr, 'sound/weapons/magout.ogg', 40, TRUE) + conditional_pref_sound(usr, 'sound/items/weapons/magout.ogg', 40, TRUE) to_chat(usr, span_notice("Vision switch off")) if(usr.get_item_by_slot(ITEM_SLOT_HEAD) == src) user.cure_blind("deprivation_helmet_[REF(src)]") //to_chat(U, span_purple("Helmet no longer restricts your vision.")) else prevent_vision = TRUE - conditional_pref_sound(usr, 'sound/weapons/magin.ogg', 40, TRUE) + conditional_pref_sound(usr, 'sound/items/weapons/magin.ogg', 40, TRUE) to_chat(usr, span_notice("Vision switch on")) if(usr.get_item_by_slot(ITEM_SLOT_HEAD) == src) user.become_blind("deprivation_helmet_[REF(src)]") @@ -161,7 +161,7 @@ /obj/item/clothing/head/deprivation_helmet/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm index 5150f7a539bd5..efeef0229b0c2 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm @@ -73,7 +73,7 @@ /obj/item/clothing/glasses/hypno/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm index 6e1674fc87f13..e2188044227eb 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm @@ -37,7 +37,7 @@ /obj/item/clothing/glasses/blindfold/kinky/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm index 8e73ea7d43488..7e8822c186965 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm @@ -43,7 +43,7 @@ /obj/item/clothing/ears/kinky_headphones/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm index 002f861f13c25..0ce885feda3f2 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm @@ -78,7 +78,7 @@ /obj/item/clothing/suit/straight_jacket/kinky_sleepbag/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE 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 index 53b01b6699ed9..dcb8743bb987c 100644 --- 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 @@ -63,7 +63,7 @@ /obj/item/clothing/accessory/lewdapron/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm index 5201bb02a35fb..17fa7de934466 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm @@ -49,7 +49,7 @@ /obj/item/clothing/suit/straight_jacket/shackles/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm index 4043fbb1e9c5b..1a53fbdd25603 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm @@ -38,7 +38,7 @@ /obj/item/clothing/strapon/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm index c4401dfc4cd8d..8bdbf5fb5a039 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm @@ -60,7 +60,7 @@ /obj/item/clothing/sextoy/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm index 40e2606fedcff..33c1271e08ddd 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm @@ -101,22 +101,22 @@ if(EGGVIB_OFF) vibration_mode = EGGVIB_LOW toy_on = TRUE - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) soundloop1.start() if(EGGVIB_LOW) vibration_mode = EGGVIB_MEDIUM - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) soundloop1.stop() soundloop2.start() if(EGGVIB_MEDIUM) vibration_mode = EGGVIB_HIGH - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) soundloop2.stop() soundloop3.start() if(EGGVIB_HIGH) vibration_mode = EGGVIB_OFF toy_on = FALSE - conditional_pref_sound(loc, 'sound/weapons/magout.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magout.ogg', 20, TRUE) soundloop3.stop() /obj/item/clothing/sextoy/eggvib/lewd_equipped(mob/living/carbon/human/user, slot, initial) @@ -335,13 +335,13 @@ switch(vibration_mode) if(EGGVIB_LOW) vibration_mode = EGGVIB_MEDIUM - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) if(EGGVIB_MEDIUM) vibration_mode = EGGVIB_HIGH - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) if(EGGVIB_HIGH) vibration_mode = EGGVIB_LOW - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) #undef EGGVIB_OFF #undef EGGVIB_LOW diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm index a5b2c429c2db0..80499fad28813 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm @@ -31,7 +31,7 @@ to_chat(user, span_notice("You start to open the condom pack...")) if(!do_after(user, 1.5 SECONDS, target = user)) return - conditional_pref_sound(src.loc, 'sound/items/poster_ripped.ogg', 50, TRUE) + conditional_pref_sound(src.loc, 'sound/items/poster/poster_ripped.ogg', 50, TRUE) var/obj/item/clothing/sextoy/condom/removed_condom = new /obj/item/clothing/sextoy/condom user.put_in_hands(removed_condom) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm index 58b5acf4fbeff..bdf1417c49225 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm @@ -254,7 +254,7 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors /// Choose a color and transparency level for the toy /obj/item/clothing/sextoy/dildo/custom_dildo/proc/customize(mob/living/user) - if(!src || !user || user.incapacitated() || !in_range(user, src)) + if(!src || !user || user.incapacitated || !in_range(user, src)) return FALSE var/color_choice = tgui_input_list(user, "Choose a color for your dildo.", "Dildo Color", GLOB.dildo_colors) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm index 444f2dcbc585f..506d2e83bba15 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm @@ -12,14 +12,21 @@ . = ..() if(target.stat == DEAD) return - var/mob/living/carbon/human/carbon_target = target - if(!carbon_target && !iscyborg(target)) + + var/mob/living/carbon/human/carbon_target + if(ishuman(target)) + carbon_target = target + else if(!iscyborg(target)) + return + + if(!target.check_erp_prefs(/datum/preference/toggle/erp/sex_toy, user, src)) + to_chat(user, span_danger("[target] doesn't want you to do that.")) return var/message = "" switch(user.zone_selected) //to let code know what part of body we gonna tickle if(BODY_ZONE_PRECISE_GROIN) - if(!carbon_target?.is_bottomless()) + if(carbon_target && !carbon_target.is_bottomless()) to_chat(user, span_danger("Looks like [target]'s groin is covered!")) return @@ -45,7 +52,7 @@ "gently teases [target.p_their()] synthetic body with [src]") \ : pick("teases [target]'s touch sensors with [src]") if(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - if(!carbon_target?.has_feet(REQUIRE_GENITAL_EXPOSED)) + if(carbon_target && !carbon_target.has_feet(REQUIRE_GENITAL_EXPOSED)) to_chat(user, span_danger("Looks like [target]'s feets are covered!")) return @@ -55,7 +62,7 @@ "uses [src] to tickle [target]'s [user.zone_selected == BODY_ZONE_L_LEG ? "left" : "right"] foot", "uses [src] to tickle [target]'s toes") if(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM) - if(!carbon_target?.is_topless()) + if(carbon_target && !carbon_target.is_topless()) to_chat(user, span_danger("Looks like [target]'s armpits are covered!")) return diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm index cf4ea05862031..4a44cc8edc700 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm @@ -91,7 +91,7 @@ if(cell && cell.charge >= cell_hit_cost) shocker_on = !shocker_on to_chat(user, span_notice("You turn the shocker [shocker_on? "on. Buzz!" : "off."]")) - conditional_pref_sound(user, shocker_on ? 'sound/weapons/magin.ogg' : 'sound/weapons/magout.ogg', 40, TRUE) + conditional_pref_sound(user, shocker_on ? 'sound/items/weapons/magin.ogg' : 'sound/items/weapons/magout.ogg', 40, TRUE) else shocker_on = FALSE if(!cell) @@ -108,12 +108,15 @@ /obj/item/kinky_shocker/attack(mob/living/target, mob/living/user) . = ..() - var/mob/living/carbon/human/carbon_target = target - if(!carbon_target && !iscyborg(target)) - return if(target.stat == DEAD) return + var/mob/living/carbon/human/carbon_target + if(ishuman(target)) + carbon_target = target + else if(!iscyborg(target)) + return + if(!shocker_on) to_chat(user, span_danger("[src] must be enabled before use!")) return @@ -180,10 +183,10 @@ return if(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM) - if(!carbon_target?.has_arms()) + if(carbon_target && !carbon_target.has_arms()) to_chat(user, span_danger("Looks like [target] doesn't have any arms!")) return - if(!carbon_target?.is_hands_uncovered()) + if(carbon_target && !carbon_target.is_hands_uncovered()) to_chat(user, span_danger("Looks like [target]'s arms are covered!")) return var/arm = user.zone_selected == BODY_ZONE_L_ARM ? "left arm" : "right arm" @@ -194,7 +197,7 @@ "leans [src] against [target]'s [arm], turning it on") if(BODY_ZONE_HEAD) - if(!carbon_target?.is_head_uncovered()) + if(carbon_target && !carbon_target.is_head_uncovered()) to_chat(user, span_danger("Looks like [target]'s head is covered!")) return message = (user == target) ? pick("leans [src] against [target.p_their()] head, letting it shock [target.p_them()]. Ouch! Why would [target.p_they()] do that?!", @@ -204,10 +207,10 @@ "leans [src] against [target]'s neck, turning it on") if(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - if(!carbon_target?.has_feet()) + if(carbon_target && !carbon_target.has_feet()) to_chat(user, span_danger("Looks like [target] doesn't have any legs!")) return - if(!carbon_target?.is_barefoot()) + if(carbon_target && !carbon_target.is_barefoot()) to_chat(user, span_danger("Looks like [target]'s toes are covered!")) return var/leg = user.zone_selected == BODY_ZONE_L_LEG ? "left leg" : "right leg" @@ -221,7 +224,7 @@ return user.visible_message(span_purple("[user] [message]!")) - conditional_pref_sound(loc, 'sound/weapons/taserhit.ogg', 70, 1, -1) + conditional_pref_sound(loc, 'sound/items/weapons/taserhit.ogg', 70, 1, -1) deductcharge(cell_hit_cost) if(prob(80)) target.try_lewd_autoemote(pick("twitch", "twitch_s", "shiver", "scream")) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm index 1e86737219c2f..c586262d2ee47 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm @@ -11,7 +11,7 @@ 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' w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/whip.ogg' + hitsound = 'sound/items/weapons/whip.ogg' clothing_flags = INEDIBLE_CLOTHING //When taking that thing in mouth flags_cover = MASKCOVERSMOUTH @@ -130,7 +130,7 @@ /obj/item/clothing/mask/leatherwhip/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE @@ -165,8 +165,11 @@ . = ..() if(target.stat == DEAD) return - var/mob/living/carbon/human/carbon_target = target - if(!carbon_target && !iscyborg(target)) + + var/mob/living/carbon/human/carbon_target + if(ishuman(target)) + carbon_target = target + else if(!iscyborg(target)) return var/message = "" @@ -177,7 +180,7 @@ switch(user.zone_selected) //to let code know what part of body we gonna whip if(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - if(!carbon_target?.has_feet()) + if(carbon_target && !carbon_target.has_feet()) to_chat(user, span_danger("Looks like [target] is missing their legs!")) return @@ -193,7 +196,7 @@ target.apply_status_effect(/datum/status_effect/subspace) target.Paralyze(1)//don't touch it. It's domination tool, it should have ability to put someone on kneels. I already inserted check for PREF YOU CAN'T ABUSE THIS ITEM target.adjust_pain(5) - conditional_pref_sound(loc, 'sound/weapons/whip.ogg', 100) + conditional_pref_sound(loc, 'sound/items/weapons/whip.ogg', 100) else message = (user == target) ? pick("knocks [target.p_them()]self down with [src]", "gently uses [src] to knock [target.p_them()]self on the ground") \ @@ -205,7 +208,7 @@ target.apply_status_effect(/datum/status_effect/subspace) target.Paralyze(1) target.adjust_pain(3) - conditional_pref_sound(loc, 'sound/weapons/whip.ogg', 60) + conditional_pref_sound(loc, 'sound/items/weapons/whip.ogg', 60) if(BODY_ZONE_HEAD) message = (user == target) ? pick("wraps [src] around [target.p_their()] neck, choking [target.p_them()]self", @@ -219,7 +222,7 @@ conditional_pref_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 80) if(BODY_ZONE_PRECISE_GROIN) - if(!carbon_target?.is_bottomless()) + if(carbon_target && !carbon_target.is_bottomless()) to_chat(user, span_danger("Looks like [target]'s butt is covered!")) return if(current_whip_type == "weak") @@ -236,7 +239,7 @@ target.apply_status_effect(/datum/status_effect/spanked) if(HAS_TRAIT(target, TRAIT_MASOCHISM) || HAS_TRAIT(target, TRAIT_BIMBO)) target.add_mood_event("pervert spanked", /datum/mood_event/perv_spanked) - conditional_pref_sound(loc, 'sound/weapons/whip.ogg', 60) + conditional_pref_sound(loc, 'sound/items/weapons/whip.ogg', 60) else message = (user == target) ? pick("roughly flogs [target.p_them()]self with [src]", @@ -253,7 +256,7 @@ target.apply_status_effect(/datum/status_effect/spanked) if(HAS_TRAIT(target, TRAIT_MASOCHISM) || HAS_TRAIT(target, TRAIT_BIMBO)) target.add_mood_event("pervert spanked", /datum/mood_event/perv_spanked) - conditional_pref_sound(loc, 'sound/weapons/whip.ogg', 100) + conditional_pref_sound(loc, 'sound/items/weapons/whip.ogg', 100) else if(current_whip_type == "hard") message = (user == target) ? pick("disciplines [target.p_them()]self with [src]", @@ -265,7 +268,7 @@ target.apply_status_effect(/datum/status_effect/subspace) target.do_jitter_animation() target.adjust_pain(7) - conditional_pref_sound(loc, 'sound/weapons/whip.ogg', 100) + conditional_pref_sound(loc, 'sound/items/weapons/whip.ogg', 100) else message = (user == target) ? pick("whips [target.p_them()]self with [src]", @@ -280,7 +283,7 @@ target.do_jitter_animation() target.adjust_pain(4) carbon_target?.adjust_arousal(5) - conditional_pref_sound(loc, 'sound/weapons/whip.ogg', 60) + conditional_pref_sound(loc, 'sound/items/weapons/whip.ogg', 60) user.visible_message(span_purple("[user] [message]!")) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm index 39692875c269c..52b7891ae0340 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm @@ -98,9 +98,12 @@ . = ..() if(target.stat == DEAD) return - var/mob/living/carbon/human/carbon_target = target - if(!carbon_target && !iscyborg(target)) - return FALSE + + var/mob/living/carbon/human/carbon_target + if(ishuman(target)) + carbon_target = target + else if(!iscyborg(target)) + return if(!target.check_erp_prefs(/datum/preference/toggle/erp/sex_toy, user, src)) to_chat(user, span_danger("Looks like [target] don't want you to do that.")) @@ -182,6 +185,9 @@ : pick("[second_adjective] teases [target]'s touch sensors with [src]", "uses [src] to [vibration_mode == MAGIC_WAND_MODE_LOW ? "slowly" : ""] massage [target]'s touch sensors", "uses [src] to tease [target]'s touch sensors") + else + to_chat(user, span_warning("Use the wand on their groin or chest!")) + return FALSE if(prob(30)) target.try_lewd_autoemote(pick("twitch_s", "moan")) @@ -208,7 +214,7 @@ /// Toggle between toy modes in a specific order /obj/item/clothing/sextoy/magic_wand/proc/toggle_mode() if(vibration_mode != "high") - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) switch(vibration_mode) if("off") @@ -226,7 +232,7 @@ vibration_mode = MAGIC_WAND_MODE_HIGH if("high") - conditional_pref_sound(loc, 'sound/weapons/magout.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magout.ogg', 20, TRUE) soundloop3.stop() vibration_mode = MAGIC_WAND_MODE_OFF diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm index dfb307b820390..32169b188cfa0 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm @@ -26,7 +26,7 @@ /obj/item/spanking_pad/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE @@ -64,20 +64,22 @@ . = ..() if(target.stat == DEAD) return - var/mob/living/carbon/human/carbon_target = target - if(!carbon_target && !iscyborg(target)) + + var/mob/living/carbon/human/carbon_target + if(ishuman(target)) + carbon_target = target + else if(!iscyborg(target)) return - var/message = "" if(!target.check_erp_prefs(/datum/preference/toggle/erp/sex_toy, user, src)) to_chat(user, span_danger("[target] doesn't want you to do that.")) return - if(!carbon_target?.is_bottomless() && !iscyborg(target)) + if(carbon_target && !carbon_target.is_bottomless()) to_chat(user, span_danger("[target]'s butt is covered!")) return - message = (user == target) ? pick("spanks themselves with [src]", + var/message = (user == target) ? pick("spanks themselves with [src]", "uses [src] to slap their hips") \ : pick("slaps [target]'s hips with [src]", "uses [src] to slap [target]'s butt", diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm index ab5530b37268b..6eb5415bc1a65 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm @@ -44,7 +44,7 @@ /obj/item/bdsm_candle/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm index 6d9505f6d1e4c..974f2130b410c 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm @@ -208,22 +208,22 @@ if(VIB_OFF) vibration_mode = VIB_LOW toy_on = TRUE - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) soundloop1.start() if(VIB_LOW) vibration_mode = VIB_MEDIUM - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) soundloop1.stop() soundloop2.start() if(VIB_MEDIUM) vibration_mode = VIB_HIGH - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) soundloop2.stop() soundloop3.start() if(VIB_HIGH) vibration_mode = VIB_OFF toy_on = FALSE - conditional_pref_sound(loc, 'sound/weapons/magout.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magout.ogg', 20, TRUE) soundloop3.stop() #undef DEFAULT_AROUSAL_INCREASE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm index e9165a58a3159..269d1087842f3 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm @@ -21,7 +21,7 @@ /obj/item/clothing/sextoy/vibroring/attack_self(mob/user) toy_on = !toy_on to_chat(user, span_notice("You turn the vibroring [toy_on ? "on. Brrrr..." : "off."]")) - conditional_pref_sound(user, toy_on ? 'sound/weapons/magin.ogg' : 'sound/weapons/magout.ogg', 40, TRUE) + conditional_pref_sound(user, toy_on ? 'sound/items/weapons/magin.ogg' : 'sound/items/weapons/magout.ogg', 40, TRUE) update_icon_state() update_icon() switch(toy_on) 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 index 9c0d65f678913..cb4acaa577aa1 100644 --- 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 @@ -195,7 +195,7 @@ /obj/machinery/vending/dorms/proc/check_menu(mob/living/user, obj/item/multitool) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE if(!multitool || !user.is_holding(multitool)) return FALSE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm index eef5f958eb419..50c21f8653dc0 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm @@ -154,7 +154,7 @@ /obj/structure/chair/milking_machine/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE @@ -408,18 +408,13 @@ current_mob.adjust_pain(pain_amounts[current_mode] * seconds_per_tick) /obj/structure/chair/milking_machine/click_ctrl_shift(mob/user) - . = ..() - if(. == FALSE) - return FALSE - to_chat(user, span_notice("You begin to disassemble [src]...")) if(!do_after(user, 8 SECONDS, src)) to_chat(user, span_warning("You fail to disassemble [src]!")) - return FALSE + return deconstruct(TRUE) to_chat(user, span_notice("You disassemble [src].")) - return TRUE // Machine deconstruction process handler /obj/structure/chair/milking_machine/atom_deconstruct(disassembled) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm index ade6b6cdcd83f..626b636b894b3 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm @@ -55,23 +55,17 @@ affected_mob.pixel_y = affected_mob.base_pixel_y + affected_mob.body_position_pixel_y_offset /obj/structure/bed/bdsm_bed/click_ctrl_shift(mob/user) - . = ..() - if(. == FALSE) - return FALSE - add_fingerprint(user) to_chat(user, span_notice("You begin unfastening the frame of [src] and deflating the latex pillows...")) if(!do_after(user, 8 SECONDS, src)) to_chat(user, span_warning("You fail to disassemble [src].")) - return FALSE + return to_chat(user, span_notice("You disassemble [src].")) var/obj/item/construction_kit/bdsm/bed/created_kit = new created_kit.forceMove(loc) qdel(src) - return TRUE - /obj/structure/bed/bdsm_bed/Destroy() unbuckle_all_mobs(TRUE) return ..() @@ -242,7 +236,7 @@ add_fingerprint(user) update_icon_state() update_icon() - conditional_pref_sound(loc, 'sound/weapons/magin.ogg', 20, TRUE) + conditional_pref_sound(loc, 'sound/items/weapons/magin.ogg', 20, TRUE) //Place the mob in the desired position after buckling /obj/structure/chair/x_stand/post_buckle_mob(mob/living/affected_mob) @@ -289,20 +283,15 @@ */ /obj/structure/chair/x_stand/click_ctrl_shift(mob/user) - . = ..() - if(. == FALSE) - return FALSE - add_fingerprint(user) to_chat(user, span_notice("You begin unfastening the frame of [src]...")) if(!do_after(user, 8 SECONDS, src)) - return FALSE + return to_chat(user, span_notice("You disassemble [src].")) new /obj/item/construction_kit/bdsm/x_stand(loc) unbuckle_all_mobs() qdel(src) - return TRUE /obj/structure/chair/x_stand/examine(mob/user) . = ..() 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 index 711ea3f970087..c8930f51c6814 100644 --- 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 @@ -22,12 +22,12 @@ /obj/item/construction_kit/click_ctrl_shift(mob/user) if((item_flags & IN_INVENTORY) || (item_flags & IN_STORAGE)) - return FALSE + return 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 + return var/obj/structure/chair/final_structure = new resulting_structure (get_turf(user)) if(current_color && istype(final_structure, /obj/structure/chair/milking_machine)) @@ -45,7 +45,6 @@ qdel(src) to_chat(user, span_notice("You assemble [src].")) - return TRUE // MILKER diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm index 65b0c14bf0516..0bae50c8d8d77 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm @@ -65,7 +65,7 @@ /obj/structure/stripper_pole/click_alt(mob/user) lights_enabled = !lights_enabled balloon_alert(user, "lights [lights_enabled ? "on" : "off"]") - playsound(user, lights_enabled ? 'sound/weapons/magin.ogg' : 'sound/weapons/magout.ogg', 40, TRUE) + playsound(user, lights_enabled ? 'sound/items/weapons/magin.ogg' : 'sound/items/weapons/magout.ogg', 40, TRUE) update_icon_state() update_icon() update_brightness() @@ -92,10 +92,14 @@ //trigger dance if character uses LBM -/obj/structure/stripper_pole/attack_hand(mob/living/user) +/obj/structure/stripper_pole/attack_hand(mob/living/user, proximity_flag) //Bubber edit add proximity_flag . = ..() if(.) return +// Bubber edit begin + if(!proximity_flag) + return +// Bubber edit end if(pole_in_use) balloon_alert(user, "already in use!") return @@ -154,10 +158,6 @@ dancer = null /obj/structure/stripper_pole/click_ctrl_shift(mob/user) - . = ..() - if(. == FALSE) - return FALSE - add_fingerprint(user) balloon_alert(user, "disassembling...") if(!do_after(user, 8 SECONDS, src)) @@ -167,7 +167,6 @@ balloon_alert(user, "disassembled") new /obj/item/construction_kit/pole(get_turf(user)) qdel(src) - return TRUE /obj/structure/stripper_pole/examine(mob/user) . = ..() diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm index cae915e4b7b55..c6ad52f494d41 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm @@ -61,7 +61,7 @@ /obj/item/fancy_pillow/proc/check_menu(mob/living/user) if(!istype(user)) return FALSE - if(user.incapacitated()) + if(user.incapacitated) return FALSE return TRUE diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm index 421a28240d2b8..e9c0a2ad3aa73 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm @@ -188,21 +188,16 @@ //Disassembling shibari stand /obj/structure/chair/shibari_stand/click_ctrl_shift(mob/user) - . = ..() - if(. == FALSE) - return FALSE - to_chat(user, span_notice("You begin unfastening the frame of \the [src]...")) if(!do_after(user, 8 SECONDS, src)) to_chat(user, span_warning("You fail to disassemble \the [src].")) - return FALSE + return to_chat(user, span_notice("You disassemble \the [src].")) var/obj/item/construction_kit/bdsm/shibari/kit = new(get_turf(src)) kit.set_greyscale(greyscale_colors) unbuckle_all_mobs() qdel(src) - return TRUE //Changing color of shibari stand /obj/structure/chair/shibari_stand/click_ctrl(mob/user) diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/nanotrasen_system_inc/pistol.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/nanotrasen_system_inc/pistol.dm index 0250fac0985c7..b111c832a16d8 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/nanotrasen_system_inc/pistol.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/nanotrasen_system_inc/pistol.dm @@ -21,10 +21,10 @@ icon_state = "black" w_class = WEIGHT_CLASS_NORMAL spread = 10 - fire_sound = 'sound/weapons/gun/pistol/shot_alt.ogg' - rack_sound = 'sound/weapons/gun/pistol/rack.ogg' - lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' - bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' + fire_sound = 'sound/items/weapons/gun/pistol/shot_alt.ogg' + rack_sound = 'sound/items/weapons/gun/pistol/rack.ogg' + lock_back_sound = 'sound/items/weapons/gun/pistol/slide_lock.ogg' + bolt_drop_sound = 'sound/items/weapons/gun/pistol/slide_drop.ogg' pin = /obj/item/firing_pin spawn_magazine_type = /obj/item/ammo_box/magazine/m9mm/rubber suppressor_x_offset = -2 @@ -82,10 +82,10 @@ icon_state = "firefly" w_class = WEIGHT_CLASS_NORMAL spread = 10 - fire_sound = 'sound/weapons/gun/pistol/shot_alt.ogg' - rack_sound = 'sound/weapons/gun/pistol/rack.ogg' - lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' - bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' + fire_sound = 'sound/items/weapons/gun/pistol/shot_alt.ogg' + rack_sound = 'sound/items/weapons/gun/pistol/rack.ogg' + lock_back_sound = 'sound/items/weapons/gun/pistol/slide_lock.ogg' + bolt_drop_sound = 'sound/items/weapons/gun/pistol/slide_drop.ogg' pin = /obj/item/firing_pin spawn_magazine_type = /obj/item/ammo_box/magazine/firefly accepted_magazine_type = /obj/item/ammo_box/magazine/firefly diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/romulus_technology/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/romulus_technology/rifle.dm index b61c915bf6bd3..744bbdfd09257 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/romulus_technology/rifle.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/romulus_technology/rifle.dm @@ -83,8 +83,8 @@ fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg' suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_rifle.ogg' fire_sound_volume = 90 - load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg' - rack_sound = 'sound/weapons/gun/sniper/rack.ogg' + load_sound = 'sound/items/weapons/gun/sniper/mag_insert.ogg' + rack_sound = 'sound/items/weapons/gun/sniper/rack.ogg' recoil = 2 accepted_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle @@ -149,7 +149,7 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/caflechette spawn_magazine_type = /obj/item/ammo_box/magazine/caflechette - var/folding_sound = 'sound/weapons/batonextend.ogg' + var/folding_sound = 'sound/items/weapons/batonextend.ogg' /// is our stock collapsed? var/folded = FALSE /// how long does it take to extend/collapse the stock diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm index 9c6e16f7015e5..d97a90bcbf411 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm @@ -195,7 +195,7 @@ if(!ignores_cooldown && !COOLDOWN_FINISHED(src, last_speech)) return say(pick_list_replacements(speech_json_file, json_string)) - playsound(src, 'sound/creatures/tourist/tourist_talk.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = rand(2, 2.2)) + playsound(src, 'sound/mobs/non-humanoids/tourist/tourist_talk.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = rand(2, 2.2)) Shake(2, 2, 1 SECONDS) COOLDOWN_START(src, last_speech, MOD_LASER_SPEECH_COOLDOWN) @@ -233,7 +233,7 @@ /obj/item/gun/energy/modular_laser_rifle/ui_action_click(mob/user, actiontype) if(!istype(actiontype, /datum/action/item_action/toggle_personality)) return ..() - playsound(src, 'sound/machines/beep.ogg', 30, TRUE) + playsound(src, 'sound/machines/beep/beep.ogg', 30, TRUE) personality_mode = !personality_mode speak_up("[personality_mode ? "pickup" : "putdown"]", ignores_personality_toggle = TRUE) return ..() diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/mode_datums.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/mode_datums.dm index a1c0489b8678a..0b567e27bc99b 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/mode_datums.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/saibasan/mode_datums.dm @@ -145,7 +145,7 @@ applied_gun.disabled_for_other_reasons = TRUE applied_gun.attack_verb_continuous = list("slashes", "cuts") applied_gun.attack_verb_simple = list("slash", "cut") - applied_gun.hitsound = 'sound/weapons/rapierhit.ogg' + applied_gun.hitsound = 'sound/items/weapons/rapierhit.ogg' /datum/laser_weapon_mode/sword/remove_from_weapon(obj/item/gun/energy/modular_laser_rifle/applied_gun) playsound(src, 'sound/items/sheath.ogg', 25, TRUE) diff --git a/modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm b/modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm index db8efb6da164b..14c1061742a3f 100644 --- a/modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm +++ b/modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm @@ -7,9 +7,9 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/pepperball can_suppress = FALSE fire_sound = 'sound/effects/pop_expl.ogg' - rack_sound = 'sound/weapons/gun/pistol/rack.ogg' - lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' - bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' + rack_sound = 'sound/items/weapons/gun/pistol/rack.ogg' + lock_back_sound = 'sound/items/weapons/gun/pistol/slide_lock.ogg' + bolt_drop_sound = 'sound/items/weapons/gun/pistol/slide_drop.ogg' fire_sound_volume = 50 /obj/item/gun/ballistic/automatic/pistol/pepperball/give_manufacturer_examine() diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi index 835cd89808c24..4b95bfc05ec04 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi and b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi index 76f7106b5f0b9..e76064627553a 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi and b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi index d0a854cf3030e..e41eec7d1cbc4 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi and b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_lefthand.dmi b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_lefthand.dmi index 20739690251dc..cdbe106a03539 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_lefthand.dmi and b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_lefthand.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_righthand.dmi b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_righthand.dmi index 2b6faba58508f..43e31ef2f5452 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_righthand.dmi and b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_righthand.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_worn.dmi b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_worn.dmi index f1b1dc9e8a2ed..740f733c3e0af 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_worn.dmi and b/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/romulus_technology/guns_worn.dmi differ diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi b/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi index ab37134e185f0..4d8f75abd333b 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi and b/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi differ 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 index 9131e6d19bb32..a973b96608e82 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi and b/modular_skyrat/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/romulus_technology/gun48x32.dmi b/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/romulus_technology/gun48x32.dmi index a5da1a182b5dd..c1cd3a58c3972 100644 Binary files a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/romulus_technology/gun48x32.dmi and b/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/romulus_technology/gun48x32.dmi differ diff --git a/modular_skyrat/modules/mold/code/mold_controller.dm b/modular_skyrat/modules/mold/code/mold_controller.dm index 8a9ed32382795..bb4b793c65b0a 100644 --- a/modular_skyrat/modules/mold/code/mold_controller.dm +++ b/modular_skyrat/modules/mold/code/mold_controller.dm @@ -159,7 +159,7 @@ for(var/obj/O in open_turf) if(istype(O, /obj/machinery/door/airlock) || istype(O, /obj/machinery/door/firedoor) || istype(O, /obj/machinery/door/window) || istype(O, /obj/structure/door_assembly) || istype(O, /obj/machinery/door/window)) spreaded_resin.do_attack_animation(O, ATTACK_EFFECT_PUNCH) - playsound(O, 'sound/effects/attackblob.ogg', 50, TRUE) + playsound(O, 'sound/effects/blob/attackblob.ogg', 50, TRUE) O.take_damage(40, BRUTE, MELEE, 1, get_dir(O, spreaded_resin)) . = RESIN_ATTACKED_DOOR break diff --git a/modular_skyrat/modules/mold/code/mold_mobs.dm b/modular_skyrat/modules/mold/code/mold_mobs.dm index 56e780a746632..769874b3a7736 100644 --- a/modular_skyrat/modules/mold/code/mold_mobs.dm +++ b/modular_skyrat/modules/mold/code/mold_mobs.dm @@ -42,7 +42,7 @@ melee_damage_lower = 5 //BUBBERSTATION CHANGE melee_damage_upper = 10 //BUBBERSTATION CHANGE obj_damage = 40 - attack_sound = 'sound/effects/attackblob.ogg' + attack_sound = 'sound/effects/blob/attackblob.ogg' basic_mob_flags = DEL_ON_DEATH gold_core_spawnable = HOSTILE_SPAWN @@ -121,7 +121,7 @@ melee_damage_lower = 7 melee_damage_upper = 13 obj_damage = 30 - attack_sound = 'sound/weapons/bite.ogg' + attack_sound = 'sound/items/weapons/bite.ogg' attack_verb_continuous = "bites" attack_verb_simple = "bite" @@ -188,7 +188,7 @@ obj_damage = 20 attack_verb_continuous = "stings" attack_verb_simple = "sting" - attack_sound = 'sound/effects/attackblob.ogg' + attack_sound = 'sound/effects/blob/attackblob.ogg' basic_mob_flags = DEL_ON_DEATH ai_controller = /datum/ai_controller/basic_controller/electric_mosquito diff --git a/modular_skyrat/modules/mold/code/mold_structures.dm b/modular_skyrat/modules/mold/code/mold_structures.dm index f16bfc948f0b2..334ec6ce777dc 100644 --- a/modular_skyrat/modules/mold/code/mold_structures.dm +++ b/modular_skyrat/modules/mold/code/mold_structures.dm @@ -20,9 +20,9 @@ /obj/structure/mold/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE) + playsound(loc, 'sound/effects/blob/attackblob.ogg', 100, TRUE) if(BURN) - playsound(loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 100, TRUE) /obj/structure/mold/Initialize(mapload, passed_type) . = ..() diff --git a/modular_skyrat/modules/morenarcotics/code/thc.dm b/modular_skyrat/modules/morenarcotics/code/thc.dm index 8239146e1a299..76f96ee53bf57 100644 --- a/modular_skyrat/modules/morenarcotics/code/thc.dm +++ b/modular_skyrat/modules/morenarcotics/code/thc.dm @@ -80,7 +80,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_skyrat/master_files/sound/effects/lungbust_cough1.ogg','modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE) //BUBBER EDIT: STOP MAKING THIS GOD AWFUL SOUND M.emote("cough") ..() . = TRUE diff --git a/modular_skyrat/modules/moretraitoritems/code/autosurgeon_bodypart.dm b/modular_skyrat/modules/moretraitoritems/code/autosurgeon_bodypart.dm index f4e79cf1a87d2..0f01593738592 100644 --- a/modular_skyrat/modules/moretraitoritems/code/autosurgeon_bodypart.dm +++ b/modular_skyrat/modules/moretraitoritems/code/autosurgeon_bodypart.dm @@ -42,7 +42,7 @@ to_chat(H, span_warning("The [src] fails to attach [storedbodypart]!")) return - playsound(get_turf(H), 'sound/weapons/circsawhit.ogg', 50, TRUE) + playsound(get_turf(H), 'sound/items/weapons/circsawhit.ogg', 50, TRUE) storedbodypart = null name = initial(name) if(uses != INFINITE) diff --git a/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm b/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm index 01eda1e746da9..e6d036d52e90a 100644 --- a/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm +++ b/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm @@ -140,7 +140,7 @@ //BUCKLE HOOKS /obj/machinery/mounted_machine_gun/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE) - playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(src,'sound/vehicles/mecha/mechmove01.ogg', 50, TRUE) for(var/obj/item/iterating_item in buckled_mob.held_items) if(istype(iterating_item, /obj/item/gun_control)) qdel(iterating_item) @@ -154,7 +154,7 @@ . = ..() /obj/machinery/mounted_machine_gun/user_buckle_mob(mob/living/user_to_buckle, mob/buckling_user, check_loc = TRUE) - if(user_to_buckle.incapacitated() || !istype(user_to_buckle)) + if(user_to_buckle.incapacitated || !istype(user_to_buckle)) return user_to_buckle.forceMove(get_turf(src)) . = ..() @@ -166,7 +166,7 @@ layer = ABOVE_MOB_LAYER plane = ABOVE_GAME_PLANE setDir(SOUTH) - playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(src,'sound/vehicles/mecha/mechmove01.ogg', 50, TRUE) set_anchored(TRUE) update_positioning() @@ -362,7 +362,7 @@ balloon_alert_to_viewers("barrel heatlocked!") fire_result = FALSE if(!fire_result) - playsound(src, 'sound/weapons/gun/general/dry_fire.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/gun/general/dry_fire.ogg', 50, TRUE) if(!bolt && fire_result) cock_bolt() return fire_result @@ -404,7 +404,7 @@ direction_track(current_user, target_turf) /obj/machinery/mounted_machine_gun/proc/direction_track(mob/user, atom/targeted) - if(user.incapacitated()) + if(user.incapacitated) return setDir(get_dir(src, targeted)) user.setDir(dir) diff --git a/modular_skyrat/modules/mutants/code/mutant_component.dm b/modular_skyrat/modules/mutants/code/mutant_component.dm index d1a71caf9cfb4..60e6e5a5d3e9e 100644 --- a/modular_skyrat/modules/mutants/code/mutant_component.dm +++ b/modular_skyrat/modules/mutants/code/mutant_component.dm @@ -138,7 +138,7 @@ host.do_jitter_animation(30) host.visible_message(span_danger("[host] suddenly convulses, as [host.p_they()][stand_up ? " stagger to [host.p_their()] feet and" : ""] gain a ravenous hunger in [host.p_their()] eyes!"), span_alien("You HUNGER!")) - playsound(host.loc, 'sound/hallucinations/far_noise.ogg', 50, TRUE) + playsound(host.loc, 'sound/effects/hallucinations/far_noise.ogg', 50, TRUE) if(is_species(host, /datum/species/mutant/infectious/fast)) to_chat(host, span_redtext("You are a FAST zombie. You run fast and hit more quickly, beware however, you are much weaker and susceptible to damage.")) else @@ -164,7 +164,7 @@ host.grab_ghost() to_chat(host, span_notice("You feel an itching, both inside and \ outside as your tissues knit and reknit.")) - playsound(host, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(host, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) host.revive(TRUE, TRUE) /datum/component/mutant_infection/proc/create_glow() diff --git a/modular_skyrat/modules/mutants/code/mutant_cure.dm b/modular_skyrat/modules/mutants/code/mutant_cure.dm index 81aad77fbffb0..c873827a3ce30 100644 --- a/modular_skyrat/modules/mutants/code/mutant_cure.dm +++ b/modular_skyrat/modules/mutants/code/mutant_cure.dm @@ -21,11 +21,11 @@ return FALSE to_chat(user, span_notice("You insert [O] into [src]!")) loaded_vial = O - playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1) + playsound(loc, 'sound/items/weapons/autoguninsert.ogg', 35, 1) update_appearance() /obj/item/rna_extractor/attack_self(mob/living/user) - if(user.incapacitated()) + if(user.incapacitated) return unload_vial(user) @@ -61,7 +61,7 @@ to_chat(user, span_notice("You remove [loaded_vial] from [src].")) loaded_vial = null update_appearance() - playsound(loc, 'sound/weapons/empty.ogg', 50, 1) + playsound(loc, 'sound/items/weapons/empty.ogg', 50, 1) else to_chat(user, span_notice("[src] isn't loaded!")) return @@ -183,7 +183,7 @@ 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) + playsound(loc, 'sound/items/weapons/autoguninsert.ogg', 35, 1) /obj/machinery/rnd/rna_recombinator/ui_interact(mob/user) @@ -264,7 +264,7 @@ vial.contains_rna = FALSE vial.update_appearance() ejectItem() - playsound(loc, 'sound/items/rped.ogg', 60, 1) + playsound(loc, 'sound/items/tools/rped.ogg', 60, 1) flick("h_lathe_wloop", src) use_energy(3000 JOULES) timer_id = addtimer(CALLBACK(src, PROC_REF(recombinate_step)), recombination_step_time, TIMER_STOPPABLE) @@ -283,7 +283,7 @@ return flick("h_lathe_wloop", src) use_energy(3000 JOULES) - playsound(loc, 'sound/items/rped.ogg', 60, 1) + playsound(loc, 'sound/items/tools/rped.ogg', 60, 1) timer_id = addtimer(CALLBACK(src, PROC_REF(recombinate_step)), recombination_step_time, TIMER_STOPPABLE) /obj/machinery/rnd/rna_recombinator/proc/recombinate_finish() diff --git a/modular_skyrat/modules/mutants/code/mutant_species.dm b/modular_skyrat/modules/mutants/code/mutant_species.dm index d560c8bd15684..66c71e514ef73 100644 --- a/modular_skyrat/modules/mutants/code/mutant_species.dm +++ b/modular_skyrat/modules/mutants/code/mutant_species.dm @@ -27,11 +27,11 @@ bodytemp_cold_damage_limit = MINIMUM_TEMPERATURE_TO_MOVE // take damage below minimum movement temp /// A list of spooky sounds we can play intermittantly. var/static/list/spooks = list( - 'sound/hallucinations/growl1.ogg', - 'sound/hallucinations/growl2.ogg', - 'sound/hallucinations/growl3.ogg', - 'sound/hallucinations/veryfar_noise.ogg', - 'sound/hallucinations/wail.ogg' + 'sound/effects/hallucinations/growl1.ogg', + 'sound/effects/hallucinations/growl2.ogg', + 'sound/effects/hallucinations/growl3.ogg', + 'sound/effects/hallucinations/veryfar_noise.ogg', + 'sound/effects/hallucinations/wail.ogg' ) bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant_zombie, @@ -186,7 +186,7 @@ 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' - hitsound = 'sound/hallucinations/growl1.ogg' + hitsound = 'sound/effects/hallucinations/growl1.ogg' force = 26 sharpness = SHARP_EDGED wound_bonus = -20 diff --git a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm b/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm index b5698fd1deb12..817d10a686d20 100644 --- a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm +++ b/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm @@ -151,4 +151,4 @@ new /obj/item/storage/photo_album/personal(src) new /obj/item/bedsheet/centcom(src) new /obj/item/storage/bag/garment/nanotrasen_consultant(src) - new /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/firefly(src) + //new /obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/firefly(src) //Bubber Edit: I don't want it diff --git a/modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm b/modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm index 9b365ba666eb9..a2f40ca943748 100644 --- a/modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm +++ b/modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm @@ -20,7 +20,7 @@ if(user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE else - playsound(src, 'sound/machines/buzz-sigh.ogg', 40, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 40, TRUE) return FALSE @@ -113,7 +113,7 @@ if(I.tool_behaviour == TOOL_WRENCH && user.combat_mode) user.visible_message(span_danger("[user] bashes [src] with [I]!"), \ span_danger("You bash [src] with [I]!"), null, COMBAT_MESSAGE_RANGE) - playsound(src, "sound/items/drill_use.ogg", 80, TRUE, -1) + playsound(src, "sound/items/tools/drill_use.ogg", 80, TRUE, -1) var/obj/machinery/porta_turret/syndicate/pod/toolbox/nri/turret = new(get_turf(loc)) turret.faction = list(FACTION_NEUTRAL, FACTION_ERT) qdel(src) diff --git a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm b/modular_skyrat/modules/opposing_force/code/equipment/guns.dm index 66d34e97fae86..a3181b2f538b2 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm +++ b/modular_skyrat/modules/opposing_force/code/equipment/guns.dm @@ -246,7 +246,7 @@ 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/gun/ballistic/automatic/toy/riot(src) new /obj/item/ammo_box/magazine/toy/smg/riot(src) new /obj/item/ammo_box/magazine/toy/smg/riot(src) diff --git a/modular_skyrat/modules/organs/code/heart.dm b/modular_skyrat/modules/organs/code/heart.dm index ae5ed164dc6a0..cd46215a5f6d6 100644 --- a/modular_skyrat/modules/organs/code/heart.dm +++ b/modular_skyrat/modules/organs/code/heart.dm @@ -57,7 +57,7 @@ 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) + playsound(source, 'sound/items/weapons/parry.ogg', 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) COOLDOWN_START(src, shell_effect_cd, 5 SECONDS) // Cooldown resets EVERY time we get hit diff --git a/modular_skyrat/modules/paycheck_rations/code/tickets.dm b/modular_skyrat/modules/paycheck_rations/code/tickets.dm index 75ece4d657328..84d057e8eaa1d 100644 --- a/modular_skyrat/modules/paycheck_rations/code/tickets.dm +++ b/modular_skyrat/modules/paycheck_rations/code/tickets.dm @@ -20,7 +20,7 @@ /// 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) + playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) // List of meat options we get var/list/radial_meat_options = list( @@ -35,7 +35,7 @@ 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) + playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) return switch(meats_choice) @@ -64,7 +64,7 @@ // 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) + playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) return switch(produce_choice) @@ -95,7 +95,7 @@ // 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) + playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) return switch(flour_choice) @@ -172,7 +172,7 @@ /// 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) + playsound(object_we_attack, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) // List of meat options we get var/list/radial_alcohol_options = list( diff --git a/modular_skyrat/modules/pet_owner/pet_owner.dm b/modular_skyrat/modules/pet_owner/pet_owner.dm index 6a97b23f409eb..bfcfac3eaa38d 100644 --- a/modular_skyrat/modules/pet_owner/pet_owner.dm +++ b/modular_skyrat/modules/pet_owner/pet_owner.dm @@ -34,6 +34,14 @@ var/new_desc = client_source?.prefs.read_preference(/datum/preference/text/pet_desc) if (new_desc) pet.desc = new_desc +// BUBBER EDIT BEGIN + var/new_gender = client_source?.prefs.read_preference(/datum/preference/choiced/pet_gender) + if (new_gender == "Random") + pet.gender = pick(list(MALE, FEMALE)) + else if (new_gender) + pet.gender = new_gender + pet.befriend(quirk_holder) // Make sure the player is a friend. +// BUBBER EDIT END carrier.add_occupant(pet) give_item_to_holder( carrier, diff --git a/modular_skyrat/modules/primitive_structures/code/fencing.dm b/modular_skyrat/modules/primitive_structures/code/fencing.dm index 20816e9ba557d..8979d025d4ce8 100644 --- a/modular_skyrat/modules/primitive_structures/code/fencing.dm +++ b/modular_skyrat/modules/primitive_structures/code/fencing.dm @@ -50,7 +50,7 @@ opened = !opened set_density(!opened) icon_state = "[opened ? "gate_open" : "gate"]" - playsound(src, (opened ? 'sound/machines/wooden_closet_open.ogg' : 'sound/machines/wooden_closet_close.ogg'), 100, TRUE) + playsound(src, (opened ? 'sound/machines/closet/wooden_closet_open.ogg' : 'sound/machines/closet/wooden_closet_close.ogg'), 100, TRUE) update_appearance() /obj/structure/railing/wooden_fencing/gate/update_icon() @@ -64,8 +64,8 @@ name = "large wooden gate" icon = 'modular_skyrat/modules/primitive_structures/icons/wooden_gate.dmi' icon_state = "gate" - openSound = 'sound/machines/wooden_closet_open.ogg' - closeSound = 'sound/machines/wooden_closet_close.ogg' + openSound = 'sound/machines/closet/wooden_closet_open.ogg' + closeSound = 'sound/machines/closet/wooden_closet_close.ogg' /obj/structure/mineral_door/wood/large_gate/Open() playsound(src, openSound, 100, TRUE) diff --git a/modular_skyrat/modules/quirks/good.dm b/modular_skyrat/modules/quirks/good.dm index e75fe5c568d0c..1b00edc51ce9c 100644 --- a/modular_skyrat/modules/quirks/good.dm +++ b/modular_skyrat/modules/quirks/good.dm @@ -38,16 +38,16 @@ if(left_arm) left_arm.unarmed_attack_verbs = list("slash") left_arm.unarmed_attack_effect = ATTACK_EFFECT_CLAW - left_arm.unarmed_attack_sound = 'sound/weapons/slash.ogg' - left_arm.unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + left_arm.unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + left_arm.unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' left_arm.unarmed_sharpness = SHARP_EDGED var/obj/item/bodypart/arm/right/right_arm = human_holder.get_bodypart(BODY_ZONE_R_ARM) if(right_arm) right_arm.unarmed_attack_verbs = list("slash") right_arm.unarmed_attack_effect = ATTACK_EFFECT_CLAW - right_arm.unarmed_attack_sound = 'sound/weapons/slash.ogg' - right_arm.unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + right_arm.unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + right_arm.unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' right_arm.unarmed_sharpness = SHARP_EDGED /datum/quirk/sharpclaws/remove(client/client_source) diff --git a/modular_skyrat/modules/reagent_forging/code/anvil.dm b/modular_skyrat/modules/reagent_forging/code/anvil.dm index 768bff072147c..6a06ec98352b2 100644 --- a/modular_skyrat/modules/reagent_forging/code/anvil.dm +++ b/modular_skyrat/modules/reagent_forging/code/anvil.dm @@ -174,6 +174,6 @@ ) poor_target.Paralyze(5 SECONDS) poor_target.emote("scream") - playsound(poor_target, 'sound/magic/clockwork/fellowship_armory.ogg', 50, TRUE) + playsound(poor_target, 'sound/effects/magic/clockwork/fellowship_armory.ogg', 50, TRUE) add_memory_in_range(poor_target, 7, /datum/memory/witness_vendor_crush, protagonist = poor_target, antognist = src) return TRUE diff --git a/modular_skyrat/modules/reagent_forging/code/forge.dm b/modular_skyrat/modules/reagent_forging/code/forge.dm index bad19d2c8e543..aff70f18440c7 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge.dm +++ b/modular_skyrat/modules/reagent_forging/code/forge.dm @@ -397,7 +397,7 @@ minimum_target_temperature = 25 // This won't matter except in a few cases here, but we still need to cover those few cases forge_level = FORGE_LEVEL_LEGENDARY - playsound(src, 'sound/weapons/parry.ogg', 50, TRUE) // Play a feedback sound to really let players know we just did an upgrade + playsound(src, 'sound/items/weapons/parry.ogg', 50, TRUE) // Play a feedback sound to really let players know we just did an upgrade //this will allow click dragging certain items /obj/structure/reagent_forge/mouse_drop_receive(atom/attacking_item, mob/user, params) @@ -609,7 +609,7 @@ attacking_weapon.color = mix_color_from_reagents(attacking_weapon.reagents.reagent_list) balloon_alert_to_viewers("imbued [attacking_weapon]") user.mind.adjust_experience(/datum/skill/smithing, 60) - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) in_use = FALSE return TRUE @@ -654,7 +654,7 @@ attacking_clothing.color = mix_color_from_reagents(attacking_clothing.reagents.reagent_list) balloon_alert_to_viewers("imbued [attacking_clothing]") user.mind.adjust_experience(/datum/skill/smithing, 60) - playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(src, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) in_use = FALSE return TRUE diff --git a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm b/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm index fa60c021e8ce9..0fc281038bfde 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm +++ b/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm @@ -24,7 +24,7 @@ inhand_icon_state = "sword" worn_icon_state = "sword_back" belt_icon_state = "sword_belt" - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' throwforce = 10 block_chance = 25 //either we make it melee block only or we don't give it too much. It's bulkly so the buckler is superior slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK @@ -49,7 +49,7 @@ inhand_icon_state = "katana" worn_icon_state = "katana_back" belt_icon_state = "katana_belt" - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' throwforce = 10 slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY @@ -71,7 +71,7 @@ inhand_icon_state = "dagger" worn_icon_state = "dagger_back" belt_icon_state = "dagger_belt" - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' embed_type = /datum/embed_data/forged_dagger throwforce = 10 slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK @@ -126,7 +126,7 @@ slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY resistance_flags = FIRE_PROOF - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("attacks", "pokes", "jabs", "tears", "lacerates", "gores") attack_verb_simple = list("attack", "poke", "jab", "tear", "lacerate", "gore") wound_bonus = -15 @@ -334,9 +334,9 @@ if(prob(final_block_chance)) if(attack_type == PROJECTILE_ATTACK) owner.visible_message(span_danger("[owner] deflects [attack_text] with [src]!")) - playsound(src, pick('sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg', 'sound/weapons/effects/ric3.ogg', 'sound/weapons/effects/ric4.ogg', 'sound/weapons/effects/ric5.ogg'), 100, TRUE) + playsound(src, pick('sound/items/weapons/effects/ric1.ogg', 'sound/items/weapons/effects/ric2.ogg', 'sound/items/weapons/effects/ric3.ogg', 'sound/items/weapons/effects/ric4.ogg', 'sound/items/weapons/effects/ric5.ogg'), 100, TRUE) else - playsound(src, 'sound/weapons/parry.ogg', 75, TRUE) + playsound(src, 'sound/items/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) diff --git a/modular_skyrat/modules/records_on_examine/code/record_manifest.dm b/modular_skyrat/modules/records_on_examine/code/record_manifest.dm index fa9aa02f99db7..a98c0b5cd7b0c 100644 --- a/modular_skyrat/modules/records_on_examine/code/record_manifest.dm +++ b/modular_skyrat/modules/records_on_examine/code/record_manifest.dm @@ -22,7 +22,7 @@ var/name = crew_record.name var/rank = crew_record.rank // var/truerank = crew_record.truerank - var/datum/job/job = SSjob.GetJob(rank) + var/datum/job/job = SSjob.get_job(rank) if(!job || !(job.job_flags & JOB_CREW_MANIFEST) || !LAZYLEN(job.departments_list) && (!exploitables_empty)) // In case an unlawful custom rank is added. var/list/exp_misc_list = exp_manifest_out[DEPARTMENT_UNASSIGNED] diff --git a/modular_skyrat/modules/resleeving/code/rsd_interface.dm b/modular_skyrat/modules/resleeving/code/rsd_interface.dm index 34afe37a51ece..046c5564d61e3 100644 --- a/modular_skyrat/modules/resleeving/code/rsd_interface.dm +++ b/modular_skyrat/modules/resleeving/code/rsd_interface.dm @@ -18,7 +18,7 @@ user.visible_message(span_notice("[user] upgrades [interacting_with] with [src]."), span_notice("You upgrade [interacting_with] to be RSD compatible.")) interacting_with.AddElement(/datum/element/rsd_interface) - playsound(interacting_with.loc, 'sound/weapons/circsawhit.ogg', 50, vary = TRUE) + playsound(interacting_with.loc, 'sound/items/weapons/circsawhit.ogg', 50, vary = TRUE) qdel(src) return ITEM_INTERACT_SUCCESS diff --git a/modular_skyrat/modules/rod-stopper/code/rodstopper.dm b/modular_skyrat/modules/rod-stopper/code/rodstopper.dm index 3daf59560ae91..bee5502999fb7 100644 --- a/modular_skyrat/modules/rod-stopper/code/rodstopper.dm +++ b/modular_skyrat/modules/rod-stopper/code/rodstopper.dm @@ -26,6 +26,6 @@ warn_area() /obj/machinery/rodstopper/proc/warn_area() - playsound(src, 'sound/misc/bloblarm.ogg', 100) + playsound(src, 'sound/announcer/alarm/bloblarm.ogg', 100) say("Warning! Please clear the area! Failure to do so will result in your immediate annihilation!") addtimer(CALLBACK(src, PROC_REF(warn_area)), 15 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) // the sound is 7 seconds, however. diff --git a/modular_skyrat/modules/salon/code/hair_tie.dm b/modular_skyrat/modules/salon/code/hair_tie.dm index a7140bc09b7b3..c59a3afbeda34 100644 --- a/modular_skyrat/modules/salon/code/hair_tie.dm +++ b/modular_skyrat/modules/salon/code/hair_tie.dm @@ -112,14 +112,14 @@ 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) + playsound(src, 'sound/items/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_skyrat/modules/salon/icons/items.dmi' icon_state = "hairtie" - hitsound = 'sound/weapons/genhit.ogg' + hitsound = 'sound/items/weapons/genhit.ogg' damage = 0 //its just about the knockdown sharpness = NONE shrapnel_type = NONE //no embedding pls diff --git a/modular_skyrat/modules/salon/code/straight_razor.dm b/modular_skyrat/modules/salon/code/straight_razor.dm index e6e85f7e16099..cd4501a118899 100644 --- a/modular_skyrat/modules/salon/code/straight_razor.dm +++ b/modular_skyrat/modules/salon/code/straight_razor.dm @@ -9,7 +9,7 @@ w_class = WEIGHT_CLASS_TINY attack_verb_simple = list("cut", "stabbed", "chebbed") sharpness = SHARP_EDGED - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' wound_bonus = 10 bare_wound_bonus = 15 tool_behaviour = TOOL_KNIFE diff --git a/modular_skyrat/modules/sec_haul/code/guns/cargo_stuff.dm b/modular_skyrat/modules/sec_haul/code/guns/cargo_stuff.dm index 2b248320e9c92..54f558b4eb4ba 100644 --- a/modular_skyrat/modules/sec_haul/code/guns/cargo_stuff.dm +++ b/modular_skyrat/modules/sec_haul/code/guns/cargo_stuff.dm @@ -128,7 +128,7 @@ name = "Romulus Ceremonial Bolt Action Rifle Crate" desc = "Contains Three Ceremonial Bolt Action Rifle in .40 , as well as ammo for it." cost = CARGO_CRATE_VALUE * 12 - contains = list(/obj/item/storage/toolbox/guncase/skyrat/ceremonial_rifle = 1, + contains = list(/obj/item/storage/toolbox/guncase/skyrat/ceremonial_rifle = 3, ) crate_name = "Romulus Ceremonial Rifle Crate" diff --git a/modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm b/modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm index 7cadd1f1d3e27..b3ac0cd46dca1 100644 --- a/modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm +++ b/modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm @@ -29,7 +29,7 @@ if(!bin) if(manual) visible_message(span_warning("[src] buzzes. There are no disposal bins in range!")) - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, TRUE) return var/disposed = 0 for(var/obj/item/ammo_casing/A in dish_drive_contents) @@ -40,8 +40,8 @@ disposed++ if(disposed) visible_message(span_notice("[src] [pick("whooshes", "bwooms", "fwooms", "pshooms")] and demoleculizes [disposed] stored item\s into the nearby void.")) - playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) - playsound(bin, 'sound/items/pshoom.ogg', 50, TRUE) + playsound(src, 'sound/items/pshoom/pshoom.ogg', 50, TRUE) + playsound(bin, 'sound/items/pshoom/pshoom.ogg', 50, TRUE) flick("synthesizer_beam", src) else visible_message(span_notice("There are no disposable items in [src]!")) @@ -61,7 +61,7 @@ LAZYADD(dish_drive_contents, I) visible_message(span_notice("[src] beams up [I]!")) I.moveToNullspace() - playsound(src, 'sound/items/pshoom.ogg', 50, TRUE) + playsound(src, 'sound/items/pshoom/pshoom.ogg', 50, TRUE) flick("synthesizer_beam", src) else step_towards(I, src) diff --git a/modular_skyrat/modules/sec_haul/code/misc/packs.dm b/modular_skyrat/modules/sec_haul/code/misc/packs.dm index d4f68cfc00cd3..96918f8c8e04f 100644 --- a/modular_skyrat/modules/sec_haul/code/misc/packs.dm +++ b/modular_skyrat/modules/sec_haul/code/misc/packs.dm @@ -27,7 +27,7 @@ access_view = ACCESS_WEAPONS /datum/supply_pack/goody/ceremonial_rifle - name = "Romulus Sporting Rifle" + name = "Romulus Ceremonial Bolt Action Rifle" desc = "A sporting rifle made of light polymer material chambered in Sol .40, poor recoil handling but quite accurate." contains = list(/obj/item/storage/toolbox/guncase/skyrat/ceremonial_rifle = 1) cost = PAYCHECK_COMMAND * 20 diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm b/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm index 2514bcf72d959..5b097d1b0bbfc 100644 --- a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm +++ b/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm @@ -102,7 +102,7 @@ if(QDELETED(target)) return FALSE target.take_damage(force*breaching_multipler) - playsound(target, 'sound/weapons/sonic_jackhammer.ogg', 70) + playsound(target, 'sound/items/weapons/sonic_jackhammer.ogg', 70) visible_message("[user] smashes the [target] forcefully with the [src]") user.do_attack_animation(target, used_item = src) breaching_loop(user, target) diff --git a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm index 359c4b89b56b5..9aebd62898ed9 100644 --- a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm +++ b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm @@ -175,7 +175,7 @@ say("Procedure validation in progress...") var/mob/living/carbon/human/human_occupant = occupant if(!isnull(human_occupant.ckey) && isnull(human_occupant.client)) // player mob, currently disconnected - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) say("ERROR: Validation failed: No elicited response from occupant genes. Subject may be suffering from Sudden Sleep Disorder.") return @@ -195,7 +195,7 @@ update_appearance() else player_consent = NO_CONSENT - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 50, FALSE) say("ERROR: Validation failed: Occupant genes have willfully rejected the procedure. You may try again if you think this was an error.") update_appearance() diff --git a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm b/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm index 8f0a5a3337059..820b2c6957fec 100644 --- a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm +++ b/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm @@ -185,7 +185,7 @@ projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/beehive pellets = 4 variance = 15 - fire_sound = 'sound/weapons/taser.ogg' + fire_sound = 'sound/items/weapons/taser.ogg' harmful = FALSE custom_materials = AMMO_MATS_SHOTGUN_HIVE advanced_print_req = TRUE @@ -222,7 +222,7 @@ pellets = 1 variance = 1 harmful = FALSE - fire_sound = 'sound/weapons/taser.ogg' + fire_sound = 'sound/items/weapons/taser.ogg' custom_materials = AMMO_MATS_SHOTGUN_TIDE advanced_print_req = TRUE diff --git a/modular_skyrat/modules/space_vines/scythes.dm b/modular_skyrat/modules/space_vines/scythes.dm index d947bb833d0d4..272f3cdede87f 100644 --- a/modular_skyrat/modules/space_vines/scythes.dm +++ b/modular_skyrat/modules/space_vines/scythes.dm @@ -17,7 +17,7 @@ slot_flags = ITEM_SLOT_BACK attack_verb_continuous = list("chops", "slices", "cuts", "reaps") attack_verb_simple = list("chop", "slice", "cut", "reap") - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' item_flags = CRUEL_IMPLEMENT //maybe they want to use it in surgery var/hit_range = 0 diff --git a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm b/modular_skyrat/modules/stasisrework/code/stasissleeper.dm index abb7437d6f6c4..fc852d7d81d91 100644 --- a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm +++ b/modular_skyrat/modules/stasisrework/code/stasissleeper.dm @@ -49,9 +49,9 @@ if(last_stasis_sound != _running) var/sound_freq = rand(5120, 8800) if(!(_running)) - playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = sound_freq) + playsound(src, 'sound/machines/synth/synth_yes.ogg', 50, TRUE, frequency = sound_freq) else - playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = sound_freq) + playsound(src, 'sound/machines/synth/synth_no.ogg', 50, TRUE, frequency = sound_freq) last_stasis_sound = _running /obj/machinery/stasissleeper/click_alt(mob/user) diff --git a/modular_skyrat/modules/stone/code/stone.dm b/modular_skyrat/modules/stone/code/stone.dm index 6f4046006c0d4..e5ed24db88158 100644 --- a/modular_skyrat/modules/stone/code/stone.dm +++ b/modular_skyrat/modules/stone/code/stone.dm @@ -62,7 +62,7 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \ /obj/item/stack/stone/attackby(obj/item/attacking_item, mob/user, params) if((attacking_item.tool_behaviour != TOOL_MINING) && !(istype(attacking_item, /obj/item/chisel))) return ..() - playsound(src, 'sound/effects/picaxe1.ogg', 50, TRUE) + playsound(src, 'sound/effects/pickaxe/picaxe1.ogg', 50, TRUE) balloon_alert_to_viewers("cutting...") if(!do_after(user, 5 SECONDS, target = src)) balloon_alert_to_viewers("stopped cutting") diff --git a/modular_skyrat/modules/synths/code/species/synthetic.dm b/modular_skyrat/modules/synths/code/species/synthetic.dm index 116a7fe100a77..09ab5c0a987a4 100644 --- a/modular_skyrat/modules/synths/code/species/synthetic.dm +++ b/modular_skyrat/modules/synths/code/species/synthetic.dm @@ -1,7 +1,6 @@ /datum/species/synthetic name = "Synthetic Humanoid" id = SPECIES_SYNTH - say_mod = "beeps" inherent_biotypes = MOB_ROBOTIC | MOB_HUMANOID inherent_traits = list( TRAIT_CAN_STRIP, diff --git a/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm b/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm index cb1e15266ada5..6befc85c0efca 100644 --- a/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm +++ b/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm @@ -8,7 +8,7 @@ /obj/item = 10, ) // 10% success with any sharp item. time = 2.4 SECONDS - preop_sound = 'sound/items/wirecutter.ogg' + preop_sound = 'sound/items/tools/wirecutter.ogg' /datum/surgery_step/cut_wires/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -32,7 +32,7 @@ TOOL_HEMOSTAT = 10, ) time = 2.4 SECONDS - preop_sound = 'sound/items/crowbar.ogg' + preop_sound = 'sound/items/tools/crowbar.ogg' /datum/surgery_step/pry_off_plating/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) do_sparks(rand(5, 9), FALSE, target.loc) @@ -54,7 +54,7 @@ TOOL_WELDER = 100, ) time = 2.4 SECONDS - preop_sound = 'sound/items/welder.ogg' + preop_sound = 'sound/items/tools/welder.ogg' /datum/surgery_step/weld_plating/tool_check(mob/user, obj/item/tool) if(implement_type == TOOL_WELDER && !tool.use_tool(user, user, 0, volume=50, amount=1)) @@ -77,7 +77,7 @@ TOOL_WELDER = 100, ) time = 2.4 SECONDS - preop_sound = 'sound/items/welder.ogg' + preop_sound = 'sound/items/tools/welder.ogg' /datum/surgery_step/weld_plating/tool_check(mob/user, obj/item/tool) if(implement_type == TOOL_WELDER && !tool.use_tool(user, user, 0, volume=50, amount=1)) diff --git a/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm index ab7827c176a73..27442f031f3e2 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm @@ -112,7 +112,7 @@ target.setOrganLoss(ORGAN_SLOT_BRAIN, target.get_organ_loss(ORGAN_SLOT_BRAIN) - 60) //we set damage in this case in order to clear the "failing" flag target.cure_all_traumas(TRAUMA_RESILIENCE_MAGIC) - playsound(source = get_turf(target), soundin = 'sound/magic/repulse.ogg', vol = 75, vary = TRUE, falloff_distance = 2) + playsound(source = get_turf(target), soundin = 'sound/effects/magic/repulse.ogg', vol = 75, vary = TRUE, falloff_distance = 2) if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed)) target.mind.remove_antag_datum(/datum/antagonist/brainwashed) if(prob(75)) diff --git a/modular_skyrat/modules/synths/code/surgery/robot_heart_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_heart_surgery.dm index 380041e01dcb9..3b23802bc47ee 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_heart_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_heart_surgery.dm @@ -30,8 +30,8 @@ TOOL_WIRECUTTER = 35, /obj/item/stack/package_wrap = 15, ) - preop_sound = 'sound/items/ratchet_slow.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet_slow.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/hydraulic/repair/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/modular_skyrat/modules/synths/code/surgery/robot_liver_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_liver_surgery.dm index 4d2219c8167e2..685d36580adf4 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_liver_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_liver_surgery.dm @@ -31,8 +31,8 @@ /obj/item/knife = 25, /obj/item/shard = 5, ) - preop_sound = 'sound/items/screwdriver_operating.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/screwdriver_operating.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/reagent_pump/repair/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/modular_skyrat/modules/synths/code/surgery/robot_lung_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_lung_surgery.dm index 0f1037bb74c74..3213cc954b3e5 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_lung_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_lung_surgery.dm @@ -30,8 +30,8 @@ TOOL_RETRACTOR = 45, ) time = 2.4 SECONDS - preop_sound = 'sound/items/ratchet_fast.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet_fast.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/heatsink/repair/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/modular_skyrat/modules/synths/code/surgery/robot_stomach_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_stomach_surgery.dm index 890f095c63834..92c91ff895d36 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_stomach_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_stomach_surgery.dm @@ -31,8 +31,8 @@ /obj/item/knife = 25, /obj/item/shard = 5, ) - preop_sound = 'sound/items/ratchet_slow.ogg' - success_sound = 'sound/machines/doorclick.ogg' + preop_sound = 'sound/items/tools/ratchet_slow.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' /datum/surgery_step/bioreactor/repair/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( diff --git a/modular_skyrat/modules/tableflip/code/flipped_table.dm b/modular_skyrat/modules/tableflip/code/flipped_table.dm index e7d480bee47d0..1b4bee131bca2 100644 --- a/modular_skyrat/modules/tableflip/code/flipped_table.dm +++ b/modular_skyrat/modules/tableflip/code/flipped_table.dm @@ -57,7 +57,7 @@ if(custom_materials) new_table.set_custom_materials(custom_materials) user.balloon_alert_to_viewers("table flipped upright") - playsound(src, 'sound/items/trayhit2.ogg', 100) + playsound(src, 'sound/items/trayhit/trayhit2.ogg', 100) qdel(src) /obj/structure/flippedtable/BorgCtrlShiftClick(mob/living/silicon/robot/user) @@ -103,7 +103,7 @@ sound_volume = 40 user.balloon_alert_to_viewers(balloon_message) - playsound(src, 'sound/items/trayhit2.ogg', sound_volume) + playsound(src, 'sound/items/trayhit/trayhit2.ogg', sound_volume) qdel(src) var/turf/throw_target = get_step(flipped_table, flipped_table.dir) diff --git a/modular_skyrat/modules/tagline/code/world.dm b/modular_skyrat/modules/tagline/code/world.dm index 1e3e74c783e6b..762fff6ff2a63 100644 --- a/modular_skyrat/modules/tagline/code/world.dm +++ b/modular_skyrat/modules/tagline/code/world.dm @@ -19,8 +19,8 @@ var/players = GLOB.clients.len - if(SSmapping.config) - features += "[SSmapping.config.map_name]" + if(SSmapping.current_map) + features += "[SSmapping.current_map.map_name]" features += "~[players] player[players == 1 ? "": "s"]" diff --git a/modular_skyrat/modules/tarkon/code/guns/m6pdw.dm b/modular_skyrat/modules/tarkon/code/guns/m6pdw.dm index d9dfccd1df1cb..9c610d2bccc3b 100644 --- a/modular_skyrat/modules/tarkon/code/guns/m6pdw.dm +++ b/modular_skyrat/modules/tarkon/code/guns/m6pdw.dm @@ -12,10 +12,10 @@ spawnwithmagazine = FALSE accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol can_suppress = FALSE - fire_sound = 'sound/weapons/gun/pistol/shot_alt.ogg' - rack_sound = 'sound/weapons/gun/pistol/rack.ogg' - lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' - bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' + fire_sound = 'sound/items/weapons/gun/pistol/shot_alt.ogg' + rack_sound = 'sound/items/weapons/gun/pistol/rack.ogg' + lock_back_sound = 'sound/items/weapons/gun/pistol/slide_lock.ogg' + bolt_drop_sound = 'sound/items/weapons/gun/pistol/slide_drop.ogg' projectile_damage_multiplier = 1 burst_size = 2 fire_delay = 1.9 diff --git a/modular_skyrat/modules/tarkon/code/guns/resonance_disruptor.dm b/modular_skyrat/modules/tarkon/code/guns/resonance_disruptor.dm index dad9ad4bc1ff8..cc9dcaa1f5b6c 100644 --- a/modular_skyrat/modules/tarkon/code/guns/resonance_disruptor.dm +++ b/modular_skyrat/modules/tarkon/code/guns/resonance_disruptor.dm @@ -40,7 +40,7 @@ projectile_type = /obj/projectile/resonant_bolt select_name = "kinetic" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) - fire_sound = 'sound/weapons/kinetic_accel.ogg' + fire_sound = 'sound/items/weapons/kinetic_accel.ogg' /obj/item/ammo_casing/energy/resonance/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") ..() @@ -141,7 +141,7 @@ /datum/status_effect/resonant_link/proc/detonate() SIGNAL_HANDLER var/turf/src_turf = get_turf(src) - playsound(src_turf, 'sound/weapons/resonator_blast.ogg', 50, TRUE) + playsound(src_turf, 'sound/items/weapons/resonator_blast.ogg', 50, TRUE) check_pressure(src_turf) if(creator) log_combat(creator, owner, "used a resonator field on", "resonator") diff --git a/modular_skyrat/modules/tarkon/code/misc-fluff/research.dm b/modular_skyrat/modules/tarkon/code/misc-fluff/research.dm index ede8a398fd47c..13f1ea9a1764c 100644 --- a/modular_skyrat/modules/tarkon/code/misc-fluff/research.dm +++ b/modular_skyrat/modules/tarkon/code/misc-fluff/research.dm @@ -5,11 +5,6 @@ organization = "Tarkon Industries" should_generate_points = TRUE -/datum/techweb/interdyne - id = "INTERDYNE" - organization = "Interdyne Pharmaceutics" - should_generate_points = TRUE - /datum/techweb/tarkon/New() . = ..() research_node_id("oldstation_surgery", TRUE, TRUE, FALSE) @@ -27,7 +22,11 @@ design_ids = list( "mod_plating_tarkon", "arcs", - "rcd_tarkon" + "rcd_tarkon", //BUBBER EDIT (comma) + "powerator_tarkon",//BUBBER EDIT Addition start + "cargoconsole_tarkon", + "bountypad_tarkon", + "bountyconsole_tarkon"//BUBBER EDIT Addition end ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) hidden = TRUE @@ -129,50 +128,5 @@ greyscale_colors = CIRCUIT_COLOR_SUPPLY build_path = /obj/machinery/rnd/production/protolathe/tarkon -//Interdyne equipment -/obj/machinery/rnd/production/protolathe/interdyne - name = "Interdyne Branded Protolathe" - desc = "Converts raw materials into useful objects. Refurbished and updated from its previous, limited capabilities." - circuit = /obj/item/circuitboard/machine/protolathe/interdyne - stripe_color = "#d40909" - -/obj/item/circuitboard/machine/protolathe/interdyne - name = "Interdyne Branded Protolathe" - greyscale_colors = CIRCUIT_COLOR_SECURITY - build_path = /obj/machinery/rnd/production/protolathe/interdyne - -/obj/item/circuitboard/machine/rdserver/interdyne - name = "Interdyne Pharmaceutics R&D Server" - build_path = /obj/machinery/rnd/server/interdyne - -/obj/machinery/rnd/server/interdyne - name = "\improper Interdyne Pharmaceutics R&D Server" - circuit = /obj/item/circuitboard/machine/rdserver/interdyne - req_access = list(ACCESS_RESEARCH) - -/obj/machinery/rnd/server/interdyne/Initialize(mapload) - var/datum/techweb/interdyne_techweb = locate(/datum/techweb/interdyne) in SSresearch.techwebs - stored_research = interdyne_techweb - return ..() -/obj/machinery/rnd/server/interdyne/add_context(atom/source, list/context, obj/item/held_item, mob/user) - . = ..() - if(held_item && istype(held_item, /obj/item/research_notes)) - context[SCREENTIP_CONTEXT_LMB] = "Generate research points" - return CONTEXTUAL_SCREENTIP_SET - -/obj/machinery/rnd/server/interdyne/examine(mob/user) - . = ..() - if(!in_range(user, src) && !isobserver(user)) - return - . += span_notice("Insert [EXAMINE_HINT("Research Notes")] to generate points.") - -/obj/machinery/rnd/server/interdyne/attackby(obj/item/attacking_item, mob/user, params) - if(istype(attacking_item, /obj/item/research_notes) && stored_research) - var/obj/item/research_notes/research_notes = attacking_item - stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = research_notes.value)) - playsound(src, 'sound/machines/copier.ogg', 50, TRUE) - qdel(research_notes) - return - return ..() diff --git a/modular_skyrat/modules/tarkon/code/misc-fluff/spawner.dm b/modular_skyrat/modules/tarkon/code/misc-fluff/spawner.dm index 2b0344a544d29..6dc31ca522e9c 100644 --- a/modular_skyrat/modules/tarkon/code/misc-fluff/spawner.dm +++ b/modular_skyrat/modules/tarkon/code/misc-fluff/spawner.dm @@ -220,7 +220,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/tarkon, 32) /obj/effect/nest_break/proc/rustle() for(var/mob/M in range(7,src)) shake_camera(M, 15, 1) - playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, TRUE) + playsound(get_turf(src),'sound/effects/explosion/explosionfar.ogg', 200, TRUE) visible_message(span_boldannounce("The nest's entrance starts to crumble before something charges forth!")) new boss_mob(loc) new loot_drop(loc) diff --git a/modular_skyrat/modules/taur_mechanics/code/constrict.dm b/modular_skyrat/modules/taur_mechanics/code/constrict.dm index 08a0312f590e0..0172b1bfee022 100644 --- a/modular_skyrat/modules/taur_mechanics/code/constrict.dm +++ b/modular_skyrat/modules/taur_mechanics/code/constrict.dm @@ -566,14 +566,14 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(loc, 'sound/weapons/bladeslice.ogg', 100, TRUE) + playsound(loc, 'sound/items/weapons/bladeslice.ogg', 100, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE) if(BURN) if(!damage_amount) return - playsound(loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(loc, 'sound/items/tools/welder.ogg', 100, TRUE) /// Signal proc for when owner moves. Qdels src. diff --git a/modular_skyrat/modules/teshari/code/teshari_clothes.dm b/modular_skyrat/modules/teshari/code/teshari_clothes.dm index 85a4082499416..64d23b3399e2b 100644 --- a/modular_skyrat/modules/teshari/code/teshari_clothes.dm +++ b/modular_skyrat/modules/teshari/code/teshari_clothes.dm @@ -17,7 +17,7 @@ /obj/item/clothing/neck/cloak species_clothing_color_coords = list(list(CLOAK_COLORPIXEL_X_1, CLOAK_COLORPIXEL_Y_1), list(CLOAK_COLORPIXEL_X_2, CLOAK_COLORPIXEL_Y_2)) greyscale_config_worn_teshari_fallback = /datum/greyscale_config/teshari/cloak - + /obj/item/clothing/neck/mantle species_clothing_color_coords = list(list(MANTLE_COLORPIXEL_X_1, MANTLE_COLORPIXEL_Y_1), list(MANTLE_COLORPIXEL_X_2, MANTLE_COLORPIXEL_Y_2)) greyscale_config_worn_teshari_fallback = /datum/greyscale_config/teshari/mantle @@ -33,11 +33,11 @@ /obj/item/clothing/suit species_clothing_color_coords = list(list(COAT_COLORPIXEL_X_1, COAT_COLORPIXEL_Y_1)) greyscale_config_worn_teshari_fallback = /datum/greyscale_config/teshari/coat - + /obj/item/clothing/suit/wizrobe species_clothing_color_coords = list(list(THICKROBE_COLORPIXEL_X_1, THICKROBE_COLORPIXEL_Y_1), list(THICKROBE_COLORPIXEL_X_2, THICKROBE_COLORPIXEL_Y_2), list(THICKROBE_COLORPIXEL_X_3, THICKROBE_COLORPIXEL_Y_3), list(THICKROBE_COLORPIXEL_X_4, THICKROBE_COLORPIXEL_Y_4), list(THICKROBE_COLORPIXEL_X_5, THICKROBE_COLORPIXEL_Y_5), list(THICKROBE_COLORPIXEL_X_6, THICKROBE_COLORPIXEL_Y_6)) greyscale_config_worn_teshari_fallback = /datum/greyscale_config/teshari/thickrobe/wiz - + /obj/item/clothing/suit/jacket/trenchcoat species_clothing_color_coords = list(list(LONGCOAT_COLORPIXEL_X_1, LONGCOAT_COLORPIXEL_Y_1), list(THICKROBE_COLORPIXEL_X_2, THICKROBE_COLORPIXEL_Y_2), list(THICKROBE_COLORPIXEL_X_3, THICKROBE_COLORPIXEL_Y_3), list(LONGCOAT_COLORPIXEL_X_4, LONGCOAT_COLORPIXEL_Y_4)) greyscale_config_worn_teshari_fallback = /datum/greyscale_config/teshari/thickrobe/longcoat @@ -170,7 +170,7 @@ /obj/item/clothing/under/dress/sundress greyscale_config_worn_teshari = /datum/greyscale_config/sundress/worn/teshari - + /obj/item/clothing/neck/scarf greyscale_config_worn_teshari = /datum/greyscale_config/scarf/worn/teshari @@ -182,7 +182,23 @@ /obj/item/clothing/suit/kimjacket species_clothing_color_coords = list(list(JACKET_COLORPIXEL_X_1, JACKET_COLORPIXEL_Y_1), list(JACKET_COLORPIXEL_X_2, JACKET_COLORPIXEL_Y_2), list(THICKROBE_COLORPIXEL_X_3, THICKROBE_COLORPIXEL_Y_3), list(JACKET_COLORPIXEL_X_4, JACKET_COLORPIXEL_Y_4)) greyscale_config_worn_teshari_fallback = /datum/greyscale_config/teshari/thickrobe/jacket - + /obj/item/clothing/suit/discoblazer species_clothing_color_coords = list(list(JACKET_COLORPIXEL_X_1, JACKET_COLORPIXEL_Y_1), list(JACKET_COLORPIXEL_X_2, JACKET_COLORPIXEL_Y_2), list(THICKROBE_COLORPIXEL_X_3, THICKROBE_COLORPIXEL_Y_3), list(JACKET_COLORPIXEL_X_4, JACKET_COLORPIXEL_Y_4)) greyscale_config_worn_teshari_fallback = /datum/greyscale_config/teshari/thickrobe/jacket + +// Wintercoats and Satchels + +/obj/item/storage/backpack/satchel + worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi' + +/obj/item/storage/backpack/duffelbag + worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi' + +/obj/item/clothing/suit/hooded/wintercoat/equipped(mob/living/user, slot) + var/mob/living/carbon/human/teshari = user + if(teshari.dna.species.name == "Teshari") + var/datum/component/toggle_attached_clothing/component = GetComponent(/datum/component/toggle_attached_clothing) + component.undeployed_overlay = null + . = ..() + diff --git a/modular_skyrat/modules/time_clock/code/console.dm b/modular_skyrat/modules/time_clock/code/console.dm index 7e6878cdf433f..791ad16cff23c 100644 --- a/modular_skyrat/modules/time_clock/code/console.dm +++ b/modular_skyrat/modules/time_clock/code/console.dm @@ -74,7 +74,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/time_clock, 28) eject_inserted_id(user) return FALSE - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_insert_disc.ogg', 50, FALSE) return TRUE /obj/machinery/time_clock/click_alt(mob/user) @@ -94,7 +94,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/time_clock, 28) inserted_id = FALSE update_appearance() update_static_data_for_all_viewers() - playsound(src, 'sound/machines/terminal_eject.ogg', 50, FALSE) + playsound(src, 'sound/machines/terminal/terminal_eject.ogg', 50, FALSE) return TRUE diff --git a/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm b/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm index 5cf86f6e50936..2006c943c7d66 100644 --- a/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm +++ b/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm @@ -99,7 +99,7 @@ SUBSYSTEM_DEF(title) return // If there's no info about the current map, use the defaults. - var/list/map_info = progress_json[SSmapping.config.map_name] + var/list/map_info = progress_json[SSmapping.current_map.map_name] if(!islist(map_info)) return @@ -113,14 +113,14 @@ SUBSYSTEM_DEF(title) progress_json["_version"] = TITLE_PROGRESS_CACHE_VERSION - if(progress_json[SSmapping.config.map_name]) + if(progress_json[SSmapping.current_map.map_name]) // Save total time and updated message timings. Latest time is worth 1/4 the "average" map_info["total"] = 0.75 * average_completion_time + 0.25 * (world.timeofday - progress_reference_time) else // New. Just save the time it took. map_info["total"] = world.timeofday - progress_reference_time map_info["messages"] = startup_message_timings - progress_json[SSmapping.config.map_name] = map_info + progress_json[SSmapping.current_map.map_name] = map_info fdel(json_file) WRITE_FILE(json_file, json_encode(progress_json)) diff --git a/modular_skyrat/modules/title_screen/icons/loading_screen.gif b/modular_skyrat/modules/title_screen/icons/loading_screen.gif index c8a2c487037be..b53c8bff8d8ec 100644 Binary files a/modular_skyrat/modules/title_screen/icons/loading_screen.gif and b/modular_skyrat/modules/title_screen/icons/loading_screen.gif differ diff --git a/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm b/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm index 1fff0ccbc4ff9..622c99c1120fb 100644 --- a/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm +++ b/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm @@ -13,7 +13,7 @@ throwforce = 10 armour_penetration = 10 w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 0 armor_type = /datum/armor/claymore_bone diff --git a/modular_skyrat/modules/trim_tokens/code/trim_tokens.dm b/modular_skyrat/modules/trim_tokens/code/trim_tokens.dm index 1a595ac2d46de..59f617a24054a 100644 --- a/modular_skyrat/modules/trim_tokens/code/trim_tokens.dm +++ b/modular_skyrat/modules/trim_tokens/code/trim_tokens.dm @@ -5,7 +5,7 @@ icon_state = "coin_valid" w_class = WEIGHT_CLASS_SMALL resistance_flags = INDESTRUCTIBLE - usesound = 'sound/weapons/taserhit.ogg' + usesound = 'sound/items/weapons/taserhit.ogg' // Name of the job of that trim. I tried to do it otherwise but it was annoying so this is how it's going to be. var/assignment = "Unassigned" // Trim to add to the ID. diff --git a/modular_skyrat/modules/verbs/code/subtle.dm b/modular_skyrat/modules/verbs/code/subtle.dm index 166a279cd1816..bdac9637a8beb 100644 --- a/modular_skyrat/modules/verbs/code/subtle.dm +++ b/modular_skyrat/modules/verbs/code/subtle.dm @@ -144,7 +144,7 @@ // BUBBER EDIT BEGIN - Subtler sounds var/datum/preferences/prefs = target_mob.client?.prefs if(prefs && prefs.read_preference(/datum/preference/toggle/subtler_sound)) - target_mob.playsound_local(get_turf(target_mob), 'sound/effects/glockenspiel_ping.ogg', 50) + target_mob.playsound_local(get_turf(target_mob), 'sound/effects/achievement/glockenspiel_ping.ogg', 50) // BUBBER EDIT END else to_chat(user, span_warning("Your emote was unable to be sent to your target: Too far away.")) @@ -155,7 +155,7 @@ // BUBBER EDIT BEGIN - Subtler sounds var/datum/preferences/prefs = hologram.Impersonation.client?.prefs if(prefs && prefs.read_preference(/datum/preference/toggle/subtler_sound)) - hologram.Impersonation.playsound_local(get_turf(hologram.Impersonation), 'sound/effects/glockenspiel_ping.ogg', 50) + hologram.Impersonation.playsound_local(get_turf(hologram.Impersonation), 'sound/effects/achievement/glockenspiel_ping.ogg', 50) // BUBBER EDIT END else var/ghostless = get_hearers_in_view(target, user) - GLOB.dead_mob_list @@ -173,7 +173,7 @@ // BUBBER EDIT BEGIN - Subtler sounds var/datum/preferences/prefs = receiver.client?.prefs if(prefs && prefs.read_preference(/datum/preference/toggle/subtler_sound)) - receiver.playsound_local(get_turf(receiver), 'sound/effects/glockenspiel_ping.ogg', 50) + receiver.playsound_local(get_turf(receiver), 'sound/effects/achievement/glockenspiel_ping.ogg', 50) // BUBBER EDIT END return TRUE diff --git a/modular_skyrat/modules/window_airbags/code/window_airbag.dm b/modular_skyrat/modules/window_airbags/code/window_airbag.dm index be868e2beba8a..46d4ade4804a7 100644 --- a/modular_skyrat/modules/window_airbags/code/window_airbag.dm +++ b/modular_skyrat/modules/window_airbags/code/window_airbag.dm @@ -47,6 +47,8 @@ INVOKE_ASYNC(src, PROC_REF(disarm_airbag), clicked_atom, clicker) /datum/element/airbag/proc/disarm_airbag(atom/movable/clicked_atom, mob/living/clicker) + if(!istype(clicker)) // BUBBER EDIT + return // BUBBER EDIT clicked_atom.balloon_alert(clicker, "disarming airbag...") if(do_after(clicker, DISARM_TIME, clicked_atom)) clicked_atom.balloon_alert(clicker, "airbag disarmed!") diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm index 8fa51a05f7ee9..b56a42d1b0f6b 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm @@ -12,14 +12,14 @@ if(mob_held_item) 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 + playsound(loc, 'sound/items/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]!"), \ 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 - playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, TRUE, -1) //The sounds of these are changed so the xenos can actually hear they are being non-lethal + playsound(loc, 'sound/items/weapons/thudswoosh.ogg', 25, TRUE, -1) //The sounds of these are changed so the xenos can actually hear they are being non-lethal Knockdown(3 SECONDS) apply_damage(disarm_damage, STAMINA) visible_message(span_danger("[user] knocks [src] down!"), \ @@ -49,7 +49,7 @@ var/armor_block = run_armor_check(affecting, MELEE,"","",10) - playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1) + playsound(loc, 'sound/items/weapons/slice.ogg', 25, TRUE, -1) visible_message(span_danger("[user] slashes at [src]!"), \ span_userdanger("[user] slashes at you!"), span_hear("You hear a sickening sound of a slice!"), null, user) to_chat(user, span_danger("You slash at [src]!")) 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 index a34376970e77a..c88c6c974016d 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm @@ -50,7 +50,7 @@ sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep/praetorian - impact_sound = 'sound/weapons/slap.ogg' + impact_sound = 'sound/items/weapons/slap.ogg' impact_damage = 20 impact_wound_bonus = 10 diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm index 81ef781ff3105..1f952d99828e7 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm @@ -69,11 +69,11 @@ /// 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() - if(owner.incapacitated(IGNORE_GRAB) || !isturf(owner.loc) || !evade_active) + if(!INCAPACITATED_IGNORING(owner, INCAPABLE_GRAB) || !isturf(owner.loc) || !evade_active) return BULLET_ACT_HIT owner.visible_message(span_danger("[owner] effortlessly dodges the projectile!"), span_userdanger("You dodge the projectile!")) - playsound(get_turf(owner), pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) + playsound(get_turf(owner), pick('sound/items/weapons/bulletflyby.ogg', 'sound/items/weapons/bulletflyby2.ogg', 'sound/items/weapons/bulletflyby3.ogg'), 75, TRUE) owner.add_filter(RUNNER_BLUR_EFFECT, 2, gauss_blur_filter(5)) addtimer(CALLBACK(owner, TYPE_PROC_REF(/datum, remove_filter), RUNNER_BLUR_EFFECT), 0.5 SECONDS) return BULLET_ACT_FORCE_PIERCE diff --git a/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm b/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm index 0d80094d70ad1..947606d41756a 100644 --- a/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm +++ b/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm @@ -1,11 +1,14 @@ -///Uncomment this to enable testing of Bloodsucker features (such as vassalizing people with a mind instead of a client). -// #define BLOODSUCKER_TESTING +///Uncomment this to enable testing of Bloodsucker features (such as ghoulizing people with a mind instead of a client). +// #define BLOODSUCKER_TESTING // if this isn't commented out, someone is a dumbfuck /// You have special interactions with Bloodsuckers #define TRAIT_BLOODSUCKER_HUNTER "bloodsucker_hunter" // how much to multiply the coffin size by mob_size #define COFFIN_ENLARGE_MULT 0.5 + +/// At what health to burn damage ratio you Final Death +#define FINAL_DEATH_HEALTH_TO_BURN 2.5 /** * Blood-level defines */ @@ -15,8 +18,9 @@ #define TORTURE_BLOOD_HALF_COST 4 /// Cost to convert someone after successful torture, in blood #define TORTURE_CONVERSION_COST 10 -/// How much blood it costs you to make a vassal into a special vassal -#define SPECIAL_VASSAL_COST 150 +/// How much blood it costs you to make a ghoul into a special ghoul +#define SPECIAL_GHOUL_COST 150 +/// Minimum and maximum frenzy blood thresholds /// Once blood is this low, will enter Frenzy #define FRENZY_THRESHOLD_ENTER 25 /// Once blood is this high, will exit Frenzy @@ -26,9 +30,8 @@ #define HUMANITY_LOST_MAXIMUM 50 /// Level up blood cost define, max_blood * this = blood cost -#define BLOODSUCKER_LEVELUP_PERCENTAGE 0 -/// Upper bound for Blood cost increase; used for blood thickening -#define BLOOD_LEVEL_GAIN_MAX 0.9 +#define BLOODSUCKER_LEVELUP_PERCENTAGE 0.45 +#define BLOODSUCKER_LEVELUP_PERCENTAGE_VENTRUE BLOODSUCKER_LEVELUP_PERCENTAGE - 0.1 ///The level when at a bloodsucker becomes snobby about who they drink from and gain their non-fledling reputation #define BLOODSUCKER_HIGH_LEVEL 4 @@ -54,14 +57,14 @@ #define TIME_BLOODSUCKER_SOL_DELAY 90 /** - * Vassal defines + * Ghoul defines */ -///If someone passes all checks and can be vassalized -#define VASSALIZATION_ALLOWED 0 -///If someone has to accept vassalization -#define VASSALIZATION_DISLOYAL 1 -///If someone is not allowed under any circimstances to become a Vassal -#define VASSALIZATION_BANNED 2 +///If someone passes all checks and can be ghoulized +#define GHOULIZATION_ALLOWED 0 +///If someone has to accept ghoulization +#define GHOULIZATION_DISLOYAL 1 +///If someone is not allowed under any circimstances to become a Ghoul +#define GHOULIZATION_BANNED 2 /** * Cooldown defines @@ -75,6 +78,7 @@ ///Span prevention for Sol messages. #define BLOODSUCKER_SPAM_SOL (30 SECONDS) + /** * Clan defines */ @@ -88,25 +92,23 @@ #define CLAN_MALKAVIAN "Malkavian Clan" #define CLAN_TZIMISCE "Tzimisce Clan" -#define TREMERE_VASSAL "tremere_vassal" -#define FAVORITE_VASSAL "favorite_vassal" -#define REVENGE_VASSAL "revenge_vassal" +#define TREMERE_GHOUL "tremere_ghoul" +#define FAVORITE_GHOUL "favorite_ghoul" +#define REVENGE_GHOUL "revenge_ghoul" /** * Power defines */ /// This Power can't be used in Torpor #define BP_CANT_USE_IN_TORPOR (1<<0) -/// This Power can't be used while transformed, for example by the shapeshift spell -#define BP_CAN_USE_TRANSFORMED (1<<1) /// This Power can't be used in Frenzy. -#define BP_CANT_USE_IN_FRENZY (1<<2) -/// This Power can't be used with a stake in you -#define BP_CAN_USE_WHILE_STAKED (1<<3) -/// This Power can't be used while incapacitated -#define BP_CANT_USE_WHILE_INCAPACITATED (1<<4) -/// This Power can't be used while unconscious -#define BP_CANT_USE_WHILE_UNCONSCIOUS (1<<5) +#define BP_CANT_USE_IN_FRENZY (1<<1) +/// This Power can be used while transformed, for example by the shapeshift spell +#define BP_CAN_USE_TRANSFORMED (1<<2) +/// This Power can be used with a stake in you +#define BP_CAN_USE_WHILE_STAKED (1<<4) +/// This Power can be used while heartless +#define BP_CAN_USE_HEARTLESS (1<<5) /// This Power can be purchased by Bloodsuckers #define BLOODSUCKER_CAN_BUY (1<<0) @@ -114,11 +116,16 @@ #define BLOODSUCKER_DEFAULT_POWER (1<<1) /// This Power can be purchased by Tremere Bloodsuckers #define TREMERE_CAN_BUY (1<<2) -/// This Power can be purchased by Vassals -#define VASSAL_CAN_BUY (1<<3) -/// This Power is a Toggled Power -#define BP_AM_TOGGLE (1<<0) +/// This Power can be purchased by Ghouls +#define GHOUL_CAN_BUY (1<<3) + +/// If this Power can be bought if you already own it +#define CAN_BUY_OWNED (1<<4) + + +/// This Power is a Continuous Effect, processing every tick +#define BP_CONTINUOUS_EFFECT (1<<0) /// This Power is a Single-Use Power #define BP_AM_SINGLEUSE (1<<1) /// This Power has a Static cooldown @@ -126,6 +133,16 @@ /// This Power doesn't cost bloot to run while unconscious #define BP_AM_COSTLESS_UNCONSCIOUS (1<<3) +#define DEACTIVATE_POWER_DO_NOT_REMOVE (1<<0) +#define DEACTIVATE_POWER_NO_COOLDOWN (1<<1) + +// ability levels that are used cross-file +#define DOMINATE_GHOULIZE_LEVEL 2 +#define TREMERE_OBJECTIVE_POWER_LEVEL 4 + +#define COFFIN_HEAL_COST_MULT 0.5 + + /** * Torpor check bitflags */ @@ -137,29 +154,35 @@ * Bloodsucker Signals */ ///Called when a Bloodsucker ranks up: (datum/bloodsucker_datum, mob/owner, mob/target) -#define BLOODSUCKER_RANK_UP "bloodsucker_rank_up" -///Called when a Bloodsucker interacts with a Vassal on their persuasion rack. -#define BLOODSUCKER_INTERACT_WITH_VASSAL "bloodsucker_interact_with_vassal" -///Called when a Bloodsucker makes a Vassal into their Favorite Vassal: (datum/vassal_datum, mob/master) -#define BLOODSUCKER_MAKE_FAVORITE "bloodsucker_make_favorite" -// called when a bloodsucker looses their favorite vassal, cleaning up whatever they gained -#define BLOODSUCKER_LOOSE_FAVORITE "bloodsucker_loose_favorite" -///Called when a new Vassal is successfully made: (datum/bloodsucker_datum) -#define BLOODSUCKER_MADE_VASSAL "bloodsucker_made_vassal" +#define COMSIG_BLOODSUCKER_RANK_UP "bloodsucker_rank_up" +///Called when a Bloodsucker interacts with a Ghoul on their persuasion rack. +#define COMSIG_BLOODSUCKER_INTERACT_WITH_GHOUL "bloodsucker_interact_with_ghoul" +///Called when a Bloodsucker makes a Ghoul into their Favorite Ghoul: (datum/ghoul_datum, mob/master) +#define COMSIG_BLOODSUCKER_MAKE_FAVORITE "bloodsucker_make_favorite" +// called when a bloodsucker looses their favorite ghoul, cleaning up whatever they gained +#define COMSIG_BLOODSUCKER_LOOSE_FAVORITE "bloodsucker_loose_favorite" +///Called when a new Ghoul is successfully made: (datum/bloodsucker_datum) +#define COMSIG_BLOODSUCKER_MADE_GHOUL "bloodsucker_made_ghoul" ///Called when a Bloodsucker exits Torpor. -#define BLOODSUCKER_EXIT_TORPOR "bloodsucker_exit_torpor" +#define COMSIG_BLOODSUCKER_EXIT_TORPOR "bloodsucker_exit_torpor" ///Called when a Bloodsucker reaches Final Death. -#define BLOODSUCKER_FINAL_DEATH "bloodsucker_final_death" +#define COMSIG_BLOODSUCKER_FINAL_DEATH "bloodsucker_final_death" ///Whether the Bloodsucker should not be dusted when arriving Final Death #define DONT_DUST (1<<0) ///Called when a Bloodsucker breaks the Masquerade #define COMSIG_BLOODSUCKER_BROKE_MASQUERADE "comsig_bloodsucker_broke_masquerade" ///Called when a Bloodsucker enters Frenzy -#define BLOODSUCKER_ENTERS_FRENZY "bloodsucker_enters_frenzy" +#define COMSIG_BLOODSUCKER_ENTERS_FRENZY "bloodsucker_enters_frenzy" ///Called when a Bloodsucker exits Frenzy -#define BLOODSUCKER_EXITS_FRENZY "bloodsucker_exits_frenzy" +#define COMSIG_BLOODSUCKER_EXITS_FRENZY "bloodsucker_exits_frenzy" +/// COMSIG_ATOM_EXAMINE that correctly updates when the bloodsucker datum is moved +#define COMSIG_BLOODSUCKER_EXAMINE "bloodsucker_examine" // Called when anyone enters the coffin -#define COMSIG_ENTER_COFFIN "comsig_enter_coffin" +#define COMSIG_ENTER_COFFIN "enter_coffin" +#define COMSIG_MOB_STAKED "staked" +#define COMSIG_BODYPART_STAKED "staked" +// called when a targeted ability is cast +#define COMSIG_FIRE_TARGETED_POWER "comsig_fire_targeted_power" /** * Sol signals & Defines @@ -168,10 +191,13 @@ #define COMSIG_SOL_RISE_TICK "comsig_sol_rise_tick" #define COMSIG_SOL_NEAR_START "comsig_sol_near_start" #define COMSIG_SOL_END "comsig_sol_end" -///Sent when a warning for Sol is meant to go out: (danger_level, vampire_warning_message, vassal_warning_message) +///Sent when a warning for Sol is meant to go out: (danger_level, vampire_warning_message, ghoul_warning_message) #define COMSIG_SOL_WARNING_GIVEN "comsig_sol_warning_given" ///Called on a Bloodsucker's Lifetick. #define COMSIG_BLOODSUCKER_ON_LIFETICK "comsig_bloodsucker_on_lifetick" +/// Called when a Bloodsucker's blood is updated +#define BLOODSUCKER_UPDATE_BLOOD "bloodsucker_update_blood" + #define BLOODSUCKER_UPDATE_BLOOD_DISABLED (1<<0) #define DANGER_LEVEL_FIRST_WARNING 1 #define DANGER_LEVEL_SECOND_WARNING 2 @@ -205,9 +231,10 @@ /// Source trait for Bloodsuckers-related traits #define BLOODSUCKER_TRAIT "bloodsucker_trait" -#define VASSAL_TRAIT "vassal_trait" +#define GHOUL_TRAIT "ghoul_trait" /// Source trait for dominate related traits +#define MESMERIZE_TRAIT "meserize_trait" #define DOMINATE_TRAIT "dominate_trait" /// Source trait for Monster Hunter-related traits @@ -219,12 +246,13 @@ ///Whether a mob is a Bloodsucker #define IS_BLOODSUCKER(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/bloodsucker)) -///Whether a mob is a Vassal -#define IS_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/vassal)) -///Whether a mob is a Favorite Vassal -#define IS_FAVORITE_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/vassal/favorite)) -///Whether a mob is a Revenge Vassal -#define IS_REVENGE_VASSAL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/vassal/revenge)) +///Whether a mob is a Ghoul +#define IS_GHOUL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ghoul)) +///Whether a mob is a Favorite Ghoul +#define IS_FAVORITE_GHOUL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ghoul/favorite)) +///Whether a mob is a Revenge Ghoul +#define IS_REVENGE_GHOUL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ghoul/revenge)) +#define IS_EX_GHOUL(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/ex_ghoul)) ///Whether a mob is a Monster Hunter-NOT NEEDED RIGHT NOW // #define IS_MONSTERHUNTER(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/monsterhunter)) @@ -232,7 +260,7 @@ #define IS_MONSTERHUNTER(mob) (FALSE) #define BLOODSUCKER_SIGHT_COLOR_CUTOFF list(25, 8, 5) -#define POLL_IGNORE_VASSAL "vassal" +#define POLL_IGNORE_GHOUL "ghoul" // Why waste memory on a dynamic global list if we can just bake it in on compile time? #define BLOODSUCKER_PROTECTED_ROLES list( \ diff --git a/modular_zubbers/code/__DEFINES/span.dm b/modular_zubbers/code/__DEFINES/span.dm new file mode 100644 index 0000000000000..951d3fe78f0c4 --- /dev/null +++ b/modular_zubbers/code/__DEFINES/span.dm @@ -0,0 +1 @@ +#define span_center(str) ("[str]") diff --git a/modular_zubbers/code/__DEFINES/techweb_nodes.dm b/modular_zubbers/code/__DEFINES/techweb_nodes.dm new file mode 100644 index 0000000000000..6ca12e0c34ed1 --- /dev/null +++ b/modular_zubbers/code/__DEFINES/techweb_nodes.dm @@ -0,0 +1 @@ +#define TECHWEB_NODE_INTERDYNE "interdyne_tech" diff --git a/modular_zubbers/code/_globalvars/lists/_maintenance_loot.dm b/modular_zubbers/code/_globalvars/lists/_maintenance_loot.dm index e82136e0402ae..c2724402bbe78 100644 --- a/modular_zubbers/code/_globalvars/lists/_maintenance_loot.dm +++ b/modular_zubbers/code/_globalvars/lists/_maintenance_loot.dm @@ -41,7 +41,6 @@ GLOBAL_LIST_INIT(ratking_trash, list(//Garbage: used by the regal rat mob when s /obj/item/trash/vendor_trash/moth_bag = 5, /obj/item/trash/vendor_trash/mothmallow = 5, /obj/item/trash/vendor_trash/rice_crackers = 5, - /obj/item/trash/waffles = 5 )) GLOBAL_LIST_INIT(ratking_coins, list(//Coins: Used by the regal rat mob when spawning coins. diff --git a/modular_zubbers/code/_globalvars/lists/maintenance_loot_oddity.dm b/modular_zubbers/code/_globalvars/lists/maintenance_loot_oddity.dm index 0953516af4b21..e23a57f16e4d0 100644 --- a/modular_zubbers/code/_globalvars/lists/maintenance_loot_oddity.dm +++ b/modular_zubbers/code/_globalvars/lists/maintenance_loot_oddity.dm @@ -98,7 +98,6 @@ GLOBAL_LIST_INIT(oddity_loot, list(//oddity: strange or crazy items /obj/item/storage/box/syndie_kit/signaler = 10, /obj/item/storage/box/syndie_kit/sleepytime = 10, /obj/item/storage/box/syndie_kit/space = 1, - /obj/item/storage/box/syndie_kit/stickers = 10, /obj/item/toy/crayon/spraycan/hellcan = 1, /obj/item/toy/plush/carpplushie/dehy_carp = 5, /obj/item/watertank/pepperspray = 5, diff --git a/modular_zubbers/code/_globalvars/lists/maintenance_loot_trash.dm b/modular_zubbers/code/_globalvars/lists/maintenance_loot_trash.dm index 89575dcb42837..f4c2b5965bb91 100644 --- a/modular_zubbers/code/_globalvars/lists/maintenance_loot_trash.dm +++ b/modular_zubbers/code/_globalvars/lists/maintenance_loot_trash.dm @@ -104,7 +104,6 @@ GLOBAL_LIST_INIT(trash_loot, list(//junk: useless, very easy to get, or ghetto c /obj/item/trash/vendor_trash/moth_bag = 5, /obj/item/trash/vendor_trash/mothmallow = 5, /obj/item/trash/vendor_trash/rice_crackers = 5, - /obj/item/trash/waffles = 5, /obj/item/popsicle_stick = 20, /obj/item/trash/candy/hundred_credit_bar = 5, /obj/item/trash/candy/coconut_joy = 5, diff --git a/modular_zubbers/code/_globalvars/lists/maintenance_loot_uncommon.dm b/modular_zubbers/code/_globalvars/lists/maintenance_loot_uncommon.dm index b8a37bd71436f..e1d9665128c8c 100644 --- a/modular_zubbers/code/_globalvars/lists/maintenance_loot_uncommon.dm +++ b/modular_zubbers/code/_globalvars/lists/maintenance_loot_uncommon.dm @@ -180,7 +180,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items /obj/item/storage/fancy/candle_box = 200, /obj/item/storage/inflatable = 200, /obj/item/storage/lockbox/dueling = 25, - /obj/item/storage/box/skub = 5, + /obj/item/storage/box/stickers/skub = 5, /obj/item/storage/box/stickers/anti_skub = 5, /obj/item/storage/box/fishing_hooks = 1, /obj/item/storage/box/fishing_lines = 1, diff --git a/modular_zubbers/code/_globalvars/lists/text.dm b/modular_zubbers/code/_globalvars/lists/text.dm deleted file mode 100644 index 46a86830ca8fa..0000000000000 --- a/modular_zubbers/code/_globalvars/lists/text.dm +++ /dev/null @@ -1,10 +0,0 @@ -/// Ensures sentences end in appropriate punctuation (a period if none exist) -/// and that all whitespace-bounded 'i' characters are capitalized. -/* /proc/autopunct_bare(input_text) - if (findtext(input_text, GLOB.has_no_eol_punctuation)) - input_text += "." - - input_text = replacetext(input_text, GLOB.noncapital_i, "I") - return input_text - */ -// TODO: REMOVE FILE IF UN-NEEDED. UNTICKED AS OF FEB 3RD 2023. NEW VERSION IN MODULAR SKYRAT FILES. diff --git a/modular_zubbers/code/_onclick/hud/screen_objects/hud_timer.dm b/modular_zubbers/code/_onclick/hud/screen_objects/hud_timer.dm new file mode 100644 index 0000000000000..91f9faaaadbeb --- /dev/null +++ b/modular_zubbers/code/_onclick/hud/screen_objects/hud_timer.dm @@ -0,0 +1,207 @@ + +/// UI obj holders for all your maptext needs +/atom/movable/screen/text + name = null + icon = null + icon_state = null + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + screen_loc = "CENTER-7,CENTER-7" + maptext_height = 480 + maptext_width = 480 + +/// A screen object that shows the time left on a timer +/atom/movable/screen/text/screen_timer + screen_loc = "CENTER-7,CENTER-7" + /// The actual displayed content of the maptext, use ${timer}, and it'll be replaced with formatted time left + var/maptext_string + /// Timer ID that we're tracking, the time left of this is displayed as maptext + var/timer_id + /// The list of mobs in whose client.screens we are added to + var/list/timer_mobs = list() + +/atom/movable/screen/text/screen_timer/Initialize( + mapload, + list/mobs, + timer, + text, + offset_x = 150, + offset_y = -70, + ) + . = ..(mapload, null) + + if(!islist(mobs) && mobs) + mobs = list(mobs) + // Copy the list just in case the arguments list is a list we don't want to modify + if(length(mobs)) + mobs = mobs.Copy() + if(!timer) + return INITIALIZE_HINT_QDEL + maptext_string = text + timer_id = timer + maptext_x = offset_x + maptext_y = offset_y + update_maptext() + if(length(mobs)) + apply_to(mobs) + +/atom/movable/screen/text/screen_timer/process() + if(!timeleft(timer_id)) + qdel(src) + return + update_maptext() + +/// Adds the object to the client.screen of all mobs in the list, and registers the needed signals +/atom/movable/screen/text/screen_timer/proc/apply_to(list/mobs) + if(!mobs) + return + if(!islist(mobs)) + mobs = list(mobs) + if(!length(timer_mobs) && length(mobs)) + START_PROCESSING(SSprocessing, src) + for(var/player in mobs) + if(player in timer_mobs) + continue + if(istype(player, /datum/weakref)) + var/datum/weakref/ref = player + player = ref.resolve() + attach(player) + RegisterSignal(player, COMSIG_MOB_LOGIN, PROC_REF(attach)) // doesn't currently cleanup properly + timer_mobs += WEAKREF(player) + +/// Removes the object from the client.screen of all mobs in the list, and unregisters the needed signals, while also stopping processing if there's no more mobs in the screen timers mob list +/atom/movable/screen/text/screen_timer/proc/remove_from(list/mobs) + if(!mobs) + return + if(!islist(mobs)) + mobs = list(mobs) + for(var/player in mobs) + // when the player is a weakref, assume it's the same pointer that we use in the timer_mobs list + var/datum/weakref/found_weakref + if(istype(player, /datum/weakref)) + var/datum/weakref/ref = player + found_weakref = ref + // otherwise we have to search through and resolve each one and compare it + else + for(var/datum/weakref/possible_match as anything in timer_mobs) + if(player == possible_match.resolve()) + found_weakref = possible_match + break + timer_mobs -= found_weakref + var/found_player = found_weakref.resolve() + if(!found_player) + return + UnregisterSignal(found_player, COMSIG_MOB_LOGIN) + de_attach(found_player) + if(!length(timer_mobs)) + STOP_PROCESSING(SSprocessing, src) + +/// Updates the maptext to show the current time left on the timer +/atom/movable/screen/text/screen_timer/proc/update_maptext() + var/time_formatted = time2text(timeleft(timer_id), "mm:ss") + var/timer_text = replacetextEx(maptext_string, "${timer}", time_formatted) + // If we don't find ${timer} in the string, just use the time formatted + var/result_text = MAPTEXT("[timer_text]") + apply_change(result_text) + +/atom/movable/screen/text/screen_timer/proc/apply_change(result_text) + maptext = result_text + +/// Adds the object to the client.screen of the mob, or removes it if add_to_screen is FALSE +/atom/movable/screen/text/screen_timer/proc/attach(mob/source, add_to_screen = TRUE) + SIGNAL_HANDLER + if(!source?.client) + return + var/client/client = source.client + // this checks if the screen is already added or removed + if(!can_attach(client, add_to_screen)) + return + if(!ismob(source)) + CRASH("Invalid source passed to screen_timer/attach()!") + do_attach(client, add_to_screen) + +/atom/movable/screen/text/screen_timer/proc/can_attach(client/client, add_to_screen) + return add_to_screen == (src in client.screen) + +/atom/movable/screen/text/screen_timer/proc/do_attach(client/client, add_to_screen) + if(add_to_screen) + client.screen += src + else + client.screen -= src + +/// Signal handler to run attach with specific args +/atom/movable/screen/text/screen_timer/proc/de_attach(mob/source) + SIGNAL_HANDLER + attach(source, FALSE) + +/atom/movable/screen/text/screen_timer/Destroy() + . = ..() + if(length(timer_mobs)) + remove_from(timer_mobs) + + STOP_PROCESSING(SSprocessing, src) + +/atom/movable/screen/text/screen_timer/attached + maptext_x = 0 + maptext_y = 16 + maptext_height = 32 + maptext_width = 32 + var/following_object + var/image/text_image + +/atom/movable/screen/text/screen_timer/attached/Initialize( + mapload, + list/mobs, + timer, + text, + offset_x, + offset_y, + following_object, + ) + if(following_object && get_turf(following_object)) + attach_self_to(following_object, offset_x, offset_y) + else + return INITIALIZE_HINT_QDEL + . = ..() + +/atom/movable/screen/text/screen_timer/attached/can_attach(client/client) + return !(src in client.images) + +// attached screen timers are a visible timer in the gameworld that are only visible to the mobs listed in the timer_mobs list +/atom/movable/screen/text/screen_timer/attached/do_attach(client/client, add_to_screen) + if(add_to_screen) + client.images += text_image + else + client.images -= text_image + +/atom/movable/screen/text/screen_timer/attached/proc/attach_self_to(atom/movable/target, maptext_x, maptext_y) + text_image = image(src, target) + + text_image.maptext_x = maptext_x + text_image.maptext_y = maptext_y + + text_image.maptext_height = maptext_height + text_image.maptext_width = maptext_width + + SET_PLANE_EXPLICIT(text_image, ABOVE_HUD_PLANE, target) + +/atom/movable/screen/text/screen_timer/attached/apply_change(result_text) + ..() + text_image?.maptext = result_text + +/atom/movable/screen/text/screen_timer/attached/proc/hide_timer(atom/movable/target) + unregister_follower() + +/atom/movable/screen/text/screen_timer/attached/proc/unregister_follower() + following_object = null + text_image = null + +/atom/movable/screen/text/screen_timer/attached/proc/update_glide_speed(atom/movable/tracked) + set_glide_size(tracked.glide_size) + +/atom/movable/screen/text/screen_timer/attached/proc/timer_follow(atom/movable/tracked, atom/mover, atom/oldloc, direction) + abstract_move(get_turf(tracked)) + +/atom/movable/screen/text/screen_timer/attached/Destroy() + . = ..() + if(following_object) + unregister_follower() diff --git a/modular_zubbers/code/controllers/subsystem/processing/sol_subsystem.dm b/modular_zubbers/code/controllers/subsystem/processing/sol_subsystem.dm index b22a712d0df69..e3f4978d2b41e 100644 --- a/modular_zubbers/code/controllers/subsystem/processing/sol_subsystem.dm +++ b/modular_zubbers/code/controllers/subsystem/processing/sol_subsystem.dm @@ -13,7 +13,7 @@ PROCESSING_SUBSYSTEM_DEF(sunlight) var/time_til_cycle = TIME_BLOODSUCKER_NIGHT_MAX ///If Bloodsucker levels for the night has been given out yet. var/issued_XP = FALSE - /// Mobs that make use of the sunlight system. + /// Mobs that make use of the sunlight system, doesn't use weakrefs as that makes removing them a pain, and we already cleanup on qdel. var/list/sun_sufferers = list() /datum/controller/subsystem/processing/sunlight/fire(resumed = FALSE) @@ -34,7 +34,7 @@ PROCESSING_SUBSYSTEM_DEF(sunlight) warn_daylight( danger_level = DANGER_LEVEL_SOL_ENDED, vampire_warning_message = span_announce("The solar flare has ended, and the daylight danger has passed... for now."), - vassal_warning_message = span_announce("The solar flare has ended, and the daylight danger has passed... for now."), + ghoul_warning_message = span_announce("The solar flare has ended, and the daylight danger has passed... for now."), ) return ..() @@ -50,7 +50,7 @@ PROCESSING_SUBSYSTEM_DEF(sunlight) warn_daylight( danger_level = DANGER_LEVEL_SECOND_WARNING, vampire_warning_message = span_userdanger("Solar Flares are about to bombard the station! You have [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds to find cover!"), - vassal_warning_message = span_danger("In [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds, your master will be at risk of a Solar Flare. Make sure they find cover!"), + ghoul_warning_message = span_danger("In [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds, your master will be at risk of a Solar Flare. Make sure they find cover!"), ) if(TIME_BLOODSUCKER_BURN_INTERVAL) warn_daylight( @@ -65,38 +65,40 @@ PROCESSING_SUBSYSTEM_DEF(sunlight) warn_daylight( danger_level = DANGER_LEVEL_SOL_ROSE, vampire_warning_message = span_userdanger("Solar flares bombard the station with deadly UV light! Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk Final Death!"), - vassal_warning_message = span_userdanger("Solar flares bombard the station with UV light!"), + ghoul_warning_message = span_userdanger("Solar flares bombard the station with UV light!"), ) ..() -/datum/controller/subsystem/processing/sunlight/proc/warn_daylight(danger_level, vampire_warning_message, vassal_warning_message) - SEND_SIGNAL(src, COMSIG_SOL_WARNING_GIVEN, danger_level, vampire_warning_message, vassal_warning_message) - +/datum/controller/subsystem/processing/sunlight/proc/warn_daylight(danger_level, vampire_warning_message, ghoul_warning_message) + SEND_SIGNAL(src, COMSIG_SOL_WARNING_GIVEN, danger_level, vampire_warning_message, ghoul_warning_message) /datum/controller/subsystem/processing/sunlight/proc/add_sun_sufferer(mob/victim) - var/sufferer_list = is_sufferer(victim) - if(sufferer_list) + if(is_sufferer(victim)) return FALSE var/atom/movable/screen/bloodsucker/sunlight_counter/sun_hud = new(null, victim.hud_used) victim.hud_used.infodisplay += sun_hud victim.hud_used.show_hud(victim.hud_used.hud_version) sun_hud.update_sol_hud() - sun_sufferers += list(list("victim" = WEAKREF(victim), "sun_hud" = sun_hud)) + RegisterSignal(victim, COMSIG_QDELETING, PROC_REF(remove_sun_sufferer), victim) + RegisterSignal(sun_hud, COMSIG_QDELETING, PROC_REF(remove_sun_sufferer), victim) + sun_sufferers[victim] = sun_hud if(length(sun_sufferers)) can_fire = TRUE - return TRUE +/datum/controller/subsystem/processing/sunlight/proc/signal_remove_sun_sufferer(subsystem, mob/victim) + remove_sun_sufferer(victim) + /datum/controller/subsystem/processing/sunlight/proc/remove_sun_sufferer(mob/victim) - var/sufferer_list = is_sufferer(victim) - if(!sufferer_list) + if(!is_sufferer(victim)) return FALSE - var/atom/movable/screen/bloodsucker/sunlight_counter/sun_hud = sufferer_list["sun_hud"] + var/atom/movable/screen/bloodsucker/sunlight_counter/sun_hud = sun_sufferers[victim] if(sun_hud) victim?.hud_used.infodisplay -= sun_hud + UnregisterSignal(sun_hud, COMSIG_QDELETING) qdel(sun_hud) - // We have to use the index here as -= won't work with two lists - sun_sufferers.Cut(sufferer_list["index"]) + sun_sufferers -= victim + UnregisterSignal(victim, COMSIG_QDELETING) if(!length(sun_sufferers)) can_fire = FALSE sunlight_active = initial(sunlight_active) @@ -117,22 +119,16 @@ PROCESSING_SUBSYSTEM_DEF(sunlight) if(DANGER_LEVEL_THIRD_WARNING) target.playsound_local(null, 'sound/effects/alert.ogg', 75, TRUE) if(DANGER_LEVEL_SOL_ROSE) - target.playsound_local(null, 'sound/ambience/ambimystery.ogg', 75, TRUE) + target.playsound_local(null, 'sound/ambience/misc/ambimystery.ogg', 75, TRUE) if(DANGER_LEVEL_SOL_ENDED) - target.playsound_local(null, 'sound/misc/ghosty_wind.ogg', 90, TRUE) - + target.playsound_local(null, 'sound/music/antag/bloodcult/ghosty_wind.ogg', 90, TRUE) /datum/controller/subsystem/processing/sunlight/proc/is_sufferer(mob/victim) - for(var/i in 1 to length(sun_sufferers)) - var/list/sufferers_original = sun_sufferers[i] - var/list/sufferer_list = sufferers_original?.Copy() - if(!sufferer_list) - continue - sufferer_list["index"] = i - var/datum/weakref/sufferer_ref = sufferer_list["victim"] - if(!sufferer_ref) - continue - var/sufferer = sufferer_ref.resolve() - if(sufferer == victim) - return sufferer_list - return null + if(!sun_sufferers) + CRASH("Sol subsystem sun_sufferers list is null, when it should never be.") + if(isnull(victim) || !length(sun_sufferers)) + return FALSE + + if(sun_sufferers[victim]) + return TRUE + return FALSE diff --git a/modular_zubbers/code/controllers/subsystem/vote.dm b/modular_zubbers/code/controllers/subsystem/vote.dm new file mode 100644 index 0000000000000..e8f46c62bd0ff --- /dev/null +++ b/modular_zubbers/code/controllers/subsystem/vote.dm @@ -0,0 +1,34 @@ +/datum/vote + /// Provide a reminder notification to those who haven't voted + var/vote_reminder = FALSE + /// Has the vote reminder fired yet + var/reminder_fired = FALSE + +/// Bubber vote fire proc, original at code/controllers/subsystem/vote.dm +/datum/controller/subsystem/vote/fire() + if(!current_vote) + return + + current_vote.time_remaining = round((current_vote.started_time + CONFIG_GET(number/vote_period) - world.time) / 10) + if(current_vote.time_remaining < 0) + end_vote() + return + + // We give a reminder to latejoiners who may have missed the original vote notification. + if(!current_vote.vote_reminder || current_vote.reminder_fired) + return + + if(current_vote.time_remaining > 45) + return + + current_vote.reminder_fired = TRUE + + for(var/client/late_voter as anything in GLOB.clients) + if(LAZYFIND(voted, late_voter.ckey)) // Skip people who already voted + continue + + if(current_vote.vote_sound && (late_voter.prefs.read_preference(/datum/preference/toggle/sound_announcements))) + SEND_SOUND(late_voter, sound(current_vote.vote_sound)) + + to_chat(late_voter, span_yellowteamradio(span_soapbox("It's time to make your choices for [current_vote.name]! Type 'vote' or click here to place your votes."))) + diff --git a/modular_zubbers/code/datums/announcers/default_announcer.dm b/modular_zubbers/code/datums/announcers/default_announcer.dm deleted file mode 100644 index 67da4d89ad2f5..0000000000000 --- a/modular_zubbers/code/datums/announcers/default_announcer.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/centcom_announcer/default - alert_sounds = list('modular_zubbers/sound/alerts/green.ogg') diff --git a/modular_zubbers/code/datums/brain_damage/magic.dm b/modular_zubbers/code/datums/brain_damage/magic.dm index 4325f36dd77ed..0370342fbd478 100644 --- a/modular_zubbers/code/datums/brain_damage/magic.dm +++ b/modular_zubbers/code/datums/brain_damage/magic.dm @@ -166,5 +166,5 @@ to_chat(user, span_warning("Your destination is being watched.")) return to_chat(user, span_notice("You slip unseen through [src].")) - user.playsound_local(null, 'sound/magic/wand_teleport.ogg', 30, FALSE, pressure_affected = FALSE) + user.playsound_local(null, 'sound/effects/magic/wand_teleport.ogg', 30, FALSE, pressure_affected = FALSE) user.forceMove(get_turf(linked_to)) diff --git a/modular_zubbers/code/datums/components/crafting/crafting/furniture.dm b/modular_zubbers/code/datums/components/crafting/crafting/furniture.dm index 3c4e46eed15b0..4d029d072e30a 100644 --- a/modular_zubbers/code/datums/components/crafting/crafting/furniture.dm +++ b/modular_zubbers/code/datums/components/crafting/crafting/furniture.dm @@ -44,9 +44,9 @@ time = 10 SECONDS category = CAT_FURNITURE -/datum/crafting_recipe/vassalrack +/datum/crafting_recipe/ghoulrack name = "Persuasion Rack" - result = /obj/structure/bloodsucker/vassalrack + result = /obj/structure/bloodsucker/ghoulrack tool_behaviors = list(TOOL_WELDER, TOOL_WRENCH) reqs = list( /obj/item/stack/sheet/mineral/wood = 3, diff --git a/modular_zubbers/code/datums/components/vore/_defines.dm b/modular_zubbers/code/datums/components/vore/_defines.dm index 48c7d797be585..12bac51d73f3e 100644 --- a/modular_zubbers/code/datums/components/vore/_defines.dm +++ b/modular_zubbers/code/datums/components/vore/_defines.dm @@ -144,22 +144,22 @@ GLOBAL_LIST_INIT(vore_sounds_insert_classic, list( "Squish2" = 'modular_zubbers/sound/vore/squish2.ogg', "Squish3" = 'modular_zubbers/sound/vore/squish3.ogg', "Squish4" = 'modular_zubbers/sound/vore/squish4.ogg', - "Rustle (cloth)" = 'sound/effects/rustle1.ogg', - "Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg', - "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', - "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', - "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', - "Zipper" = 'sound/items/zip.ogg', + "Rustle (cloth)" = 'sound/effects/rustle/rustle1.ogg', + "Rustle 2 (cloth)" = 'sound/effects/rustle/rustle2.ogg', + "Rustle 3 (cloth)" = 'sound/effects/rustle/rustle3.ogg', + "Rustle 4 (cloth)" = 'sound/effects/rustle/rustle4.ogg', + "Rustle 5 (cloth)" = 'sound/effects/rustle/rustle5.ogg', + "Zipper" = 'sound/items/zip/zip.ogg', "None" = null )) GLOBAL_LIST_INIT(vore_sounds_release_classic, list( - "Rustle (cloth)" = 'sound/effects/rustle1.ogg', - "Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg', - "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', - "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', - "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', - "Zipper" = 'sound/items/zip.ogg', + "Rustle (cloth)" = 'sound/effects/rustle/rustle1.ogg', + "Rustle 2 (cloth)" = 'sound/effects/rustle/rustle2.ogg', + "Rustle 3 (cloth)" = 'sound/effects/rustle/rustle3.ogg', + "Rustle 4 (cloth)" = 'sound/effects/rustle/rustle4.ogg', + "Rustle 5 (cloth)" = 'sound/effects/rustle/rustle5.ogg', + "Zipper" = 'sound/items/zip/zip.ogg', "Splatter" = 'sound/effects/splat.ogg', "None" = null )) @@ -177,22 +177,22 @@ GLOBAL_LIST_INIT(vore_sounds_insert_fancy, list( "Squish2" = 'modular_zubbers/sound/vore/sunesound/pred/squish_02.ogg', "Squish3" = 'modular_zubbers/sound/vore/sunesound/pred/squish_03.ogg', "Squish4" = 'modular_zubbers/sound/vore/sunesound/pred/squish_04.ogg', - "Rustle (cloth)" = 'sound/effects/rustle1.ogg', - "Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg', - "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', - "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', - "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', - "Zipper" = 'sound/items/zip.ogg', + "Rustle (cloth)" = 'sound/effects/rustle/rustle1.ogg', + "Rustle 2 (cloth)" = 'sound/effects/rustle/rustle2.ogg', + "Rustle 3 (cloth)" = 'sound/effects/rustle/rustle3.ogg', + "Rustle 4 (cloth)" = 'sound/effects/rustle/rustle4.ogg', + "Rustle 5 (cloth)" = 'sound/effects/rustle/rustle5.ogg', + "Zipper" = 'sound/items/zip/zip.ogg', "None" = null )) GLOBAL_LIST_INIT(vore_sounds_release_fancy, list( - "Rustle (cloth)" = 'sound/effects/rustle1.ogg', - "Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg', - "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', - "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', - "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', - "Zipper" = 'sound/items/zip.ogg', + "Rustle (cloth)" = 'sound/effects/rustle/rustle1.ogg', + "Rustle 2 (cloth)" = 'sound/effects/rustle/rustle2.ogg', + "Rustle 3 (cloth)" = 'sound/effects/rustle/rustle3.ogg', + "Rustle 4 (cloth)" = 'sound/effects/rustle/rustle4.ogg', + "Rustle 5 (cloth)" = 'sound/effects/rustle/rustle5.ogg', + "Zipper" = 'sound/items/zip/zip.ogg', "Stomach Move" = 'modular_zubbers/sound/vore/sunesound/pred/stomachmove.ogg', "Pred Escape" = 'modular_zubbers/sound/vore/sunesound/pred/escape.ogg', "Splatter" = 'sound/effects/splat.ogg', diff --git a/modular_zubbers/code/datums/components/vore/ui.dm b/modular_zubbers/code/datums/components/vore/ui.dm index f9b738e954ff8..25ece670cdd58 100644 --- a/modular_zubbers/code/datums/components/vore/ui.dm +++ b/modular_zubbers/code/datums/components/vore/ui.dm @@ -426,7 +426,7 @@ to_chat(living_parent, "[prey] is absorbed, you can't help them.") return // If they're otherwise incapacitated - if(living_parent.incapacitated()) + if(living_parent.incapacitated) return to_chat(living_parent, span_notice(span_green("You begin to push [prey] to freedom!"))) diff --git a/modular_zubbers/code/datums/department_security.dm b/modular_zubbers/code/datums/department_security.dm index e9924f8020a12..263cabf3ec61f 100644 --- a/modular_zubbers/code/datums/department_security.dm +++ b/modular_zubbers/code/datums/department_security.dm @@ -29,7 +29,7 @@ /datum/outfit/job/orderly head = /obj/item/clothing/head/beret/sec/medical - glasses = /obj/item/clothing/glasses/hud/health/sunglasses + glasses = /obj/item/clothing/glasses/hud/medsechud/sunglasses r_pocket = /obj/item/reagent_containers/spray/pepper l_pocket = /obj/item/restraints/handcuffs backpack_contents = list( diff --git a/modular_zubbers/code/datums/greyscale/json_configs/miniskirt.json b/modular_zubbers/code/datums/greyscale/json_configs/miniskirt.json new file mode 100644 index 0000000000000..a89803ef51b28 --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/miniskirt.json @@ -0,0 +1,42 @@ +{ + "miniskirt": [ + { + "type": "icon_state", + "icon_state": "miniskirt_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "miniskirt_belt", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "miniskirt_trim", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ], + "miniskirt_d": [ + { + "type": "icon_state", + "icon_state": "miniskirt_base_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "miniskirt_belt_d", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "miniskirt_trim_d", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ] +} diff --git a/modular_zubbers/code/datums/greyscale/json_configs/miniskirt_worn.json b/modular_zubbers/code/datums/greyscale/json_configs/miniskirt_worn.json new file mode 100644 index 0000000000000..a89803ef51b28 --- /dev/null +++ b/modular_zubbers/code/datums/greyscale/json_configs/miniskirt_worn.json @@ -0,0 +1,42 @@ +{ + "miniskirt": [ + { + "type": "icon_state", + "icon_state": "miniskirt_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "miniskirt_belt", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "miniskirt_trim", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ], + "miniskirt_d": [ + { + "type": "icon_state", + "icon_state": "miniskirt_base_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "miniskirt_belt_d", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "miniskirt_trim_d", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ] +} diff --git a/modular_zubbers/code/datums/materials/basemats.dm b/modular_zubbers/code/datums/materials/basemats.dm new file mode 100644 index 0000000000000..7a9c3c50ebce1 --- /dev/null +++ b/modular_zubbers/code/datums/materials/basemats.dm @@ -0,0 +1,7 @@ +/datum/material/silver/on_applied(atom/source, amount, material_flags) + . = ..() + source.AddElement(/datum/element/bane, mob_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5) + +/datum/material/silver/on_removed(atom/source, amount, material_flags) + . = ..() + source.RemoveElement(/datum/element/bane, mob_biotypes = MOB_VAMPIRIC, damage_multiplier = 0.5) diff --git a/modular_zubbers/code/datums/mood_events/bloodsucker_events.dm b/modular_zubbers/code/datums/mood_events/bloodsucker_events.dm index c3a8b89796548..f35921c82fc59 100644 --- a/modular_zubbers/code/datums/mood_events/bloodsucker_events.dm +++ b/modular_zubbers/code/datums/mood_events/bloodsucker_events.dm @@ -46,8 +46,16 @@ mood_change = -6 timeout = 6 MINUTES -///Candelabrum's mood event to non Bloodsucker/Vassals +///Candelabrum's mood event to non Bloodsucker/Ghouls /datum/mood_event/vampcandle description = "Something is making your mind feel... loose.\n" mood_change = -15 timeout = 5 MINUTES + +/datum/mood_event/nosferatu_examined + mood_change = -10 + timeout = 5 MINUTES + +/datum/mood_event/nosferatu_examined/add_effects(target, level = 0) + description = span_danger("You feel a deep sense of revulsion at the sight of [target].") + mood_change = level * -5 diff --git a/modular_zubbers/code/datums/mutations/visuals_override.dm b/modular_zubbers/code/datums/mutations/visuals_override.dm new file mode 100644 index 0000000000000..96f424bad76f3 --- /dev/null +++ b/modular_zubbers/code/datums/mutations/visuals_override.dm @@ -0,0 +1,12 @@ +/datum/mutation/human/adaptation/cold/get_visual_indicator() + return + +/datum/mutation/human/adaptation/heat/get_visual_indicator() + return + +/datum/mutation/human/adaptation/thermal/get_visual_indicator() + return + +/datum/mutation/human/adaptation/pressure/get_visual_indicator() + return +//Removes the visual indicators for various types of adaptation. diff --git a/modular_zubbers/code/datums/shuttles/emergency.dm b/modular_zubbers/code/datums/shuttles/emergency.dm index d443b7037662b..6aa5633aa5df7 100644 --- a/modular_zubbers/code/datums/shuttles/emergency.dm +++ b/modular_zubbers/code/datums/shuttles/emergency.dm @@ -31,5 +31,14 @@ /datum/map_template/shuttle/emergency/lance/New() . = ..() - if(SSmapping.config.map_name == "Moon Station") + if(SSmapping.current_map.map_name == "Moon Station") who_can_purchase = null + +/datum/map_template/shuttle/emergency/vortex + prefix = "_maps/shuttles/zubbers/" + suffix = "vortex" + name = "Vortex-Class Luxury Evacuation Shuttle" + description = "A mildly luxurious evac shuttle that gives fulfills every crew's desire, from free coffee, to free cigarettes, as well as advanced tools distributed to each department's rooms, such as advanced tools, advanced meds, as well as department protolathes, even Command's own E.V.A. storage, holding a spare unique MODsuit for each Head of Staff, not to mention the atmospherics, and shocked grille built-in support, as well as two Authentication devices for mobile Code-Red's! Fly home with elegancy." + admin_notes = "A shuttle that has it's own protolathes, as well as severely upgraded tools, and gear. A very luxurious evacuation shuttle, with no drawbacks. Two Authentication Devices, spare Head of Staff MOD's, gives NTC a Corporate MOD, gives Blueshield a Asset Protection MOD, atmospherics, shocked grilles, Gives everyone what they need while leaving a burning heap of a station, or just getting off from a nice calm shift." + credit_cost = CARGO_CRATE_VALUE * 625 + occupancy_limit = "65" diff --git a/modular_zubbers/code/game/Items/big_bertha_shield.dm b/modular_zubbers/code/game/Items/big_bertha_shield.dm index 75b3c7f9da5e5..d857bbe8682fd 100644 --- a/modular_zubbers/code/game/Items/big_bertha_shield.dm +++ b/modular_zubbers/code/game/Items/big_bertha_shield.dm @@ -15,7 +15,7 @@ attack_verb_continuous = list("shoves", "bashes","berthas") attack_verb_simple = list("shove", "bash","bertha") armor_type = /datum/armor/big_bertha - block_sound = 'sound/weapons/block_shield.ogg' + block_sound = 'sound/items/weapons/block_shield.ogg' breakable_by_damage = FALSE item_flags = IMMUTABLE_SLOW | SLOWS_WHILE_IN_HAND slowdown = 2 diff --git a/modular_zubbers/code/game/Items/lipstick.dm b/modular_zubbers/code/game/Items/lipstick.dm new file mode 100644 index 0000000000000..268a6adef86a7 --- /dev/null +++ b/modular_zubbers/code/game/Items/lipstick.dm @@ -0,0 +1,8 @@ +/obj/item/lipstick/hypnosyndie + name = "hypno lipstick" + desc = "A potent lipstick capable of weakening and even hypnotizing the minds of those you kiss!" + icon_state = "slipstick" + base_icon_state = "slipstick" + lipstick_color = COLOR_SYNDIE_RED + lipstick_trait = TRAIT_HYPNO_KISS + diff --git a/modular_zubbers/code/game/Items/sec_hailer.dm b/modular_zubbers/code/game/Items/sec_hailer.dm index 28a7b9ddd7932..7853b4bcba4df 100644 --- a/modular_zubbers/code/game/Items/sec_hailer.dm +++ b/modular_zubbers/code/game/Items/sec_hailer.dm @@ -69,5 +69,5 @@ usr.audible_message("BACKUP REQUESTED!") balloon_alert_to_viewers("Backup Requested!", "Backup Requested!", 7) log_combat(usr, src, "has called for backup") - playsound(usr, 'sound/misc/whistle.ogg', 50, FALSE, 4) + playsound(usr, 'sound/items/whistle/whistle.ogg', 50, FALSE, 4) diff --git a/modular_zubbers/code/game/area/areas/moonstation.dm b/modular_zubbers/code/game/area/areas/moonstation.dm index 0bffdd38152ca..65a6b31991516 100644 --- a/modular_zubbers/code/game/area/areas/moonstation.dm +++ b/modular_zubbers/code/game/area/areas/moonstation.dm @@ -93,7 +93,7 @@ area_flags = UNIQUE_AREA | FLORA_ALLOWED ambience_index = AMBIENCE_ICEMOON sound_environment = SOUND_AREA_ICEMOON - ambient_buzz = 'sound/ambience/magma.ogg' + ambient_buzz = 'sound/ambience/lavaland/magma.ogg' /area/moonstation/surface name = "Lunar Surface" diff --git a/modular_zubbers/code/game/machinery/burger_reactor/reactor.dm b/modular_zubbers/code/game/machinery/burger_reactor/reactor.dm index 8ba8d1e13e886..620083f0c265d 100644 --- a/modular_zubbers/code/game/machinery/burger_reactor/reactor.dm +++ b/modular_zubbers/code/game/machinery/burger_reactor/reactor.dm @@ -202,12 +202,12 @@ return FALSE stored_rod.forceMove(T) stored_rod.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(3,6),5) - playsound(src, 'sound/weapons/gun/general/grenade_launch.ogg', 50, TRUE, extrarange = -3) + playsound(src, 'sound/items/weapons/gun/general/grenade_launch.ogg', 50, TRUE, extrarange = -3) else if(jammed) return FALSE stored_rod.forceMove(T) - playsound(src, 'sound/weapons/gun/shotgun/insert_shell.ogg', 50, TRUE, frequency = -1, extrarange = -3) + playsound(src, 'sound/items/weapons/gun/shotgun/insert_shell.ogg', 50, TRUE, frequency = -1, extrarange = -3) stored_rod = null update_appearance(UPDATE_ICON) if(user) @@ -224,7 +224,7 @@ stored_rod = desired_rod update_appearance(UPDATE_ICON) START_PROCESSING(SSmachines, src) - playsound(src, 'sound/weapons/gun/shotgun/insert_shell.ogg', 50, TRUE, frequency = 1, extrarange = -3) + playsound(src, 'sound/items/weapons/gun/shotgun/insert_shell.ogg', 50, TRUE, frequency = 1, extrarange = -3) if(user) user.log_message("inserted a rod into [src]", LOG_GAME) investigate_log("had a rod inserted by [key_name(user)] at [AREACOORD(src)].", INVESTIGATE_ENGINE) diff --git a/modular_zubbers/code/game/machinery/burger_reactor/reactor_processing.dm b/modular_zubbers/code/game/machinery/burger_reactor/reactor_processing.dm index 0bdab73d71b76..fe596710170ca 100644 --- a/modular_zubbers/code/game/machinery/burger_reactor/reactor_processing.dm +++ b/modular_zubbers/code/game/machinery/burger_reactor/reactor_processing.dm @@ -59,7 +59,7 @@ var/temperature_mod = last_power_generation >= max_power_generation ? 4 : 1 consumed_mix.assert_gas(/datum/gas/goblin) consumed_mix.gases[/datum/gas/goblin][MOLES] += last_tritium_consumption*goblin_multiplier - consumed_mix.temperature += (temperature_mod-rand())*8 + (16000/our_heat_capacity)*(overclocked ? 2 : 1)*power_efficiency*temperature_mod*0.5 + consumed_mix.temperature += (temperature_mod-rand())*8 + (16000/our_heat_capacity)*(overclocked ? 2 : 1)*power_efficiency*temperature_mod*0.5*(1/(vent_pressure/200)) consumed_mix.temperature = clamp(consumed_mix.temperature,5,0xFFFFFF) if(rod_mix_pressure >= stored_rod.pressure_limit*(1 + rand()*0.25)) //Pressure friction penalty. @@ -166,7 +166,7 @@ else if(active) buffer_gases.pump_gas_to(turf_air,vent_pressure) //Pump buffer gases to turf. Reduced rate because active. - if(stored_rod) transfer_rod_temperature(turf_air,allow_cooling_limiter=TRUE,multiplier=0.5) + if(stored_rod) transfer_rod_temperature(turf_air,allow_cooling_limiter=TRUE,multiplier=min(1,0.5*(vent_pressure/200))) else buffer_gases.pump_gas_to(turf_air,vent_pressure*2) //Pump buffer gases to turf. Increases rate because inactive. if(stored_rod) transfer_rod_temperature(turf_air,allow_cooling_limiter=FALSE) diff --git a/modular_zubbers/code/game/machinery/crew_monitor.dm b/modular_zubbers/code/game/machinery/crew_monitor.dm index 4d935160c6842..ca457e0460066 100644 --- a/modular_zubbers/code/game/machinery/crew_monitor.dm +++ b/modular_zubbers/code/game/machinery/crew_monitor.dm @@ -33,7 +33,7 @@ update_appearance() set_light(l_range = 1.9, l_power = 5, l_color = CIRCUIT_COLOR_SECURITY, l_on = TRUE) if(COOLDOWN_FINISHED(src, alarm_cooldown)) - playsound(source = src, soundin = 'sound/machines/twobeep.ogg', vol = 50, vary = TRUE) + playsound(source = src, soundin = 'sound/machines/beep/twobeep.ogg', vol = 50, vary = TRUE) spasm_animation(1 SECONDS) COOLDOWN_START(src, alarm_cooldown, ALARM_PERIOD) else diff --git a/modular_zubbers/code/game/machinery/doors/door.dm b/modular_zubbers/code/game/machinery/doors/door.dm new file mode 100644 index 0000000000000..5428f9f882245 --- /dev/null +++ b/modular_zubbers/code/game/machinery/doors/door.dm @@ -0,0 +1,41 @@ +#define LINK_DENY "\a (deny)" +#define LINK_OPEN "\a (open)" +#define LINK_BOLT "\a (bolt)" +#define LINK_SHOCK "\a (shock)" + +/obj/machinery/door/airlock + //so the AI doesn't get spammed + COOLDOWN_DECLARE(answer_cd) + /// List of ai door requesters + var/static/list/requesters = list() + +/obj/machinery/door/airlock/attack_hand_secondary(mob/living/user, list/modifiers) + if(world.time < requesters[user.name] + 10 SECONDS) + to_chat(user, span_warning("Hold on, let the AI parse your request.")) + return + . = ..() + + if(!hasPower()) + to_chat(user, span_warning("This door isn't powered.")) + return + + src.balloon_alert(user, "AI requested") + + for(var/mob/living/silicon/ai/AI as anything in GLOB.ai_list) + if(AI.stat == DEAD) + continue + if(AI.control_disabled) + continue + if(AI.deployed_shell) + if(!is_station_level(AI.deployed_shell.registered_z)) + continue + to_chat(AI.deployed_shell, "[user] is requesting you to open the [src] [LINK_DENY][LINK_OPEN][LINK_BOLT][LINK_SHOCK]") + if(!is_station_level(AI.registered_z)) + continue + to_chat(AI, "[user] is requesting you to open the [src] [LINK_DENY][LINK_OPEN][LINK_BOLT][LINK_SHOCK]") + requesters[user.name] = world.time + +#undef LINK_DENY +#undef LINK_OPEN +#undef LINK_BOLT +#undef LINK_SHOCK diff --git a/modular_zubbers/code/game/machinery/syndiepad.dm b/modular_zubbers/code/game/machinery/syndiepad.dm index f1d8cf3be7bfa..1f324075c2890 100644 --- a/modular_zubbers/code/game/machinery/syndiepad.dm +++ b/modular_zubbers/code/game/machinery/syndiepad.dm @@ -135,3 +135,27 @@ pad.icon_state = pad.idle_state #undef SYN_BOUNTY_PAD_WARM_TIME + +//Tarkon Pad +/obj/item/circuitboard/machine/syndiepad/tarkon + name = "tarkon bounty pad" + greyscale_colors = CIRCUIT_COLOR_GENERIC + build_path = /obj/machinery/piratepad/syndiepad/tarkon + +/obj/machinery/piratepad/syndiepad/tarkon + name = "Tarkon bounty pad" + desc = "A standard Tarkon bounty pad used by Tarkon Industries \ + send any (non-living) object to an distant off-sector\ \ + for processing. No returns!" + circuit = /obj/item/circuitboard/machine/syndiepad/tarkon + + +/obj/item/circuitboard/computer/syndiepad/tarkon + name = "tarkon bounty control terminal" + build_path = /obj/machinery/computer/piratepad_control/syndiepad/tarkon + +/obj/machinery/computer/piratepad_control/syndiepad/tarkon + name = "Tarkon bounty control terminal" + desc = "A console for an old model of a citizen bounty pad." + circuit = /obj/item/circuitboard/computer/syndiepad/tarkon + credits_account = ACCOUNT_TAR diff --git a/modular_zubbers/code/game/objects/effects/spawners/random/moonstation_random.dm b/modular_zubbers/code/game/objects/effects/spawners/random/moonstation_random.dm index 47744e9f38e67..2043d6905ce0c 100644 --- a/modular_zubbers/code/game/objects/effects/spawners/random/moonstation_random.dm +++ b/modular_zubbers/code/game/objects/effects/spawners/random/moonstation_random.dm @@ -195,9 +195,9 @@ icon_state = "random_vending" loot = list( /obj/machinery/vending/assist = 400, - /obj/machinery/vending/autodrobe/all_access = 200, + /obj/machinery/vending/autodrobe = 200, /obj/machinery/vending/barbervend = 50, - /obj/machinery/vending/boozeomat/all_access = 100, + /obj/machinery/vending/boozeomat = 100, /obj/machinery/vending/cigarette = 50, /obj/machinery/vending/cigarette/beach = 25, /obj/machinery/vending/cigarette/syndicate = 10, diff --git a/modular_zubbers/code/game/objects/items/holy_weapons.dm b/modular_zubbers/code/game/objects/items/holy_weapons.dm index 899481320470d..03939ff1e883c 100644 --- a/modular_zubbers/code/game/objects/items/holy_weapons.dm +++ b/modular_zubbers/code/game/objects/items/holy_weapons.dm @@ -137,7 +137,7 @@ means that you'll be forced to move carefully while it's on. Fits in pockets, an . = ..() if(!user.can_perform_action(src, SILENT_ADJACENCY) || hacked) return - if(user.incapacitated() || !istype(user)) + if(user.incapacitated || !istype(user)) to_chat(user, "You can't do that right now!") return if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes") diff --git a/modular_zubbers/code/game/objects/items/kiss.dm b/modular_zubbers/code/game/objects/items/kiss.dm new file mode 100644 index 0000000000000..84d4b7a9d4d65 --- /dev/null +++ b/modular_zubbers/code/game/objects/items/kiss.dm @@ -0,0 +1,24 @@ +/obj/item/hand_item/kisser/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!HAS_TRAIT(user, TRAIT_HYPNO_KISS) || !iscarbon(interacting_with) || (user.zone_selected != BODY_ZONE_PRECISE_MOUTH)) + return ranged_interact_with_atom(interacting_with, user, modifiers) + + visible_message("[user] leans in for a kiss on the lips.") + if(!do_after(user, 2 SECONDS, interacting_with)) + visible_message("[user] doesn't manage to lock lips with anyone.") + return ITEM_INTERACT_BLOCKING + + var/mob/living/carbon/victim = interacting_with + + if(user) + log_combat(user, victim, "[user] hypno kissed [victim]", src) + user.visible_message(span_danger("[user] kisses [victim] on the lips! [victim] looks flushed!"), span_danger("You kiss [victim] on the lips!")) + + if(!victim.hypnosis_vulnerable()) + to_chat(victim, span_hypnophrase("That kiss made you feel oddly relaxed...")) + victim.adjust_confusion_up_to(10 SECONDS, 20 SECONDS) + victim.adjust_dizzy_up_to(20 SECONDS, 40 SECONDS) + victim.adjust_drowsiness_up_to(20 SECONDS, 40 SECONDS) + victim.adjust_pacifism(10 SECONDS) + else + victim.apply_status_effect(/datum/status_effect/trance, 20 SECONDS, TRUE) + diff --git a/modular_zubbers/code/game/objects/items/more_pkas.dm b/modular_zubbers/code/game/objects/items/more_pkas.dm index 7112a8266f90e..d7f6623cc7648 100644 --- a/modular_zubbers/code/game/objects/items/more_pkas.dm +++ b/modular_zubbers/code/game/objects/items/more_pkas.dm @@ -116,13 +116,13 @@ projectile_type = /obj/projectile/kinetic/railgun select_name = "kinetic" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) - fire_sound = 'sound/weapons/beam_sniper.ogg' + fire_sound = 'sound/items/weapons/beam_sniper.ogg' /obj/item/ammo_casing/energy/kinetic/repeater projectile_type = /obj/projectile/kinetic/repeater select_name = "kinetic" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.15) //about three shots - fire_sound = 'sound/weapons/kinetic_accel.ogg' + fire_sound = 'sound/items/weapons/kinetic_accel.ogg' /obj/item/ammo_casing/energy/kinetic/shotgun projectile_type = /obj/projectile/kinetic/shotgun @@ -130,13 +130,13 @@ e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) pellets = 3 variance = 50 - fire_sound = 'sound/weapons/kinetic_accel.ogg' + fire_sound = 'sound/items/weapons/kinetic_accel.ogg' /obj/item/ammo_casing/energy/kinetic/glock projectile_type = /obj/projectile/kinetic/glock select_name = "kinetic" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) - fire_sound = 'sound/weapons/kinetic_accel.ogg' + fire_sound = 'sound/items/weapons/kinetic_accel.ogg' /obj/item/ammo_casing/energy/kinetic/shockwave projectile_type = /obj/projectile/kinetic/shockwave @@ -144,13 +144,13 @@ e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) pellets = 8 variance = 360 - fire_sound = 'sound/weapons/gun/general/cannon.ogg' + fire_sound = 'sound/items/weapons/gun/general/cannon.ogg' /obj/item/ammo_casing/energy/kinetic/m79 projectile_type = /obj/projectile/bullet/mining_bomb //uses the mining bomb projectile from the mining modsuit select_name = "kinetic" e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) - fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' + fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg' //Accelerator Projectiles /obj/projectile/kinetic/railgun diff --git a/modular_zubbers/code/game/objects/items/plushes.dm b/modular_zubbers/code/game/objects/items/plushes.dm index c3b6d23c11993..6becb736b0e89 100644 --- a/modular_zubbers/code/game/objects/items/plushes.dm +++ b/modular_zubbers/code/game/objects/items/plushes.dm @@ -4,7 +4,7 @@ icon = 'modular_zubbers/icons/obj/toys/plushes.dmi' icon_state = "chaotic_toaster" attack_verb_simple = list("beeped", "booped", "pinged") - squeak_override = list('sound/machines/beep.ogg' = 1) + squeak_override = list('sound/machines/beep/beep.ogg' = 1) /obj/item/toy/plush/Synth name = "Synth plushie" @@ -32,7 +32,7 @@ icon_state = "chirp"//Sprited by Kan3/kaylexi attack_verb_continuous = list("chirps", "chimes") attack_verb_simple = list("chirps") - squeak_override = list('sound/machines/beep.ogg' = 1) + squeak_override = list('sound/machines/beep/beep.ogg' = 1) gender = FEMALE /obj/item/toy/plush/bigdeer @@ -85,7 +85,7 @@ desc = "A cute rendition of the notorious xenomorph. Its stuffing is an acidic green colour." icon = 'modular_zubbers/icons/obj/toys/plushes.dmi' icon_state = "xenoplush" - squeak_override = list('sound/voice/hiss6.ogg' = 1) + squeak_override = list('sound/mobs/non-humanoids/hiss/hiss6.ogg' = 1) lefthand_file = 'modular_zubbers/icons/mob/inhands/items/plushes_lefthand.dmi' righthand_file = 'modular_zubbers/icons/mob/inhands/items/plushes_righthand.dmi' inhand_icon_state = "xenoplush" @@ -121,7 +121,7 @@ icon_state = "blovyplushie" attack_verb_continuous = list("blorbles", "slimes", "absorbs") attack_verb_simple = list("blorble", "slime", "absorb") - squeak_override = list('sound/effects/blobattack.ogg' = 1) + squeak_override = list('sound/effects/blob/blobattack.ogg' = 1) /obj/item/toy/plush/tunafish name = "Piscene Paddle" //Donator plush for Astroturf, sprited by Crumpaloo @@ -130,7 +130,7 @@ icon_state = "tunafish" attack_verb_continuous = list("slaps", "whacks") attack_verb_simple = list("slap", "whack") - squeak_override = list('sound/weapons/slap.ogg' = 1) + squeak_override = list('sound/items/weapons/slap.ogg' = 1) lefthand_file = 'modular_zubbers/icons/mob/inhands/items/plushes_lefthand.dmi' righthand_file = 'modular_zubbers/icons/mob/inhands/items/plushes_righthand.dmi' inhand_icon_state = "tunafish" @@ -142,7 +142,7 @@ icon_state = "secoff" attack_verb_continuous = list("shoots (and misses)", "batongs", "annoys", "harmbatons", "magdumps") attack_verb_simple = list("shot (and missed)", "batong", "annoy", "harmbaton", "magdump") - squeak_override = list('sound/weapons/gun/general/bolt_rack.ogg' = 1) + squeak_override = list('sound/items/weapons/gun/general/bolt_rack.ogg' = 1) /obj/item/toy/plush/cescrewsplush name = "Chief Screws Plush" //Plush for Steals The Screwdriver/SteamStucKobold, sprited by stickygoat. and Amorbis @@ -153,3 +153,13 @@ attack_verb_simple = list("slap", "plap", "smear") gender = FEMALE squeak_override = list('sound/misc/soggy.ogg'=1) + +/obj/item/toy/plush/internshiba + name = "Intern Shiba Plush" //Plush for Kazumi Hasegawa/sprited by Amorbis + desc = "An adorable shiba inu plushie of a well-known intern mutt." + icon = 'modular_zubbers/icons/obj/toys/plushes.dmi' + icon_state = "internshiba" + attack_verb_continuous = list("baps", "paws", "claws") + attack_verb_simple = list("bap", "paw", "claw") + gender = MALE + squeak_override = list('sound/mobs/non-humanoids/dog/growl2.ogg' = 1) diff --git a/modular_zubbers/code/game/objects/items/robot/items/storage.dm b/modular_zubbers/code/game/objects/items/robot/items/storage.dm index b34e30271b485..adfdd0a87bd6f 100644 --- a/modular_zubbers/code/game/objects/items/robot/items/storage.dm +++ b/modular_zubbers/code/game/objects/items/robot/items/storage.dm @@ -8,15 +8,17 @@ /obj/item/borg/apparatus/research name = "Research manipulation gripper" desc = "A simple grasping tool suited to assist in a wide array of research applications." - icon = 'modular_zubbers/code/modules/borgs/sprites/robot_items.dmi' + icon = 'modular_zubbers/code/modules/silicons/borgs/sprites/robot_items.dmi' icon_state = "gripper_sci" storable = list( /obj/item/slime_extract, /obj/item/slimepotion, - /obj/item/disk, + /obj/item/disk/data, + /obj/item/disk/design_disk, + /obj/item/disk/tech_disk, + /obj/item/computer_disk,//ordinance /obj/item/stock_parts, /obj/item/reagent_containers/cup/beaker, - /obj/item/assembly/prox_sensor, /obj/item/healthanalyzer, //To build medibots /obj/item/borg_restart_board, //To allow repairs /obj/item/borg/upgrade/rename, //Basics not an upgrade @@ -24,6 +26,7 @@ /obj/item/mod, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/dropper, + /obj/item/food/monkeycube, ) /obj/item/borg/apparatus/research/examine() @@ -32,10 +35,12 @@ . += "The gripper currently has [stored] secured." . += span_notice(" Alt-click will drop the currently held item. ") +//To build funny little gadgets + /obj/item/borg/apparatus/circuit_sci name = "Research circuit assembly gripper" desc = "A complex grasping tool used for working with circuitry." - icon = 'modular_zubbers/code/modules/borgs/sprites/robot_items.dmi' + icon = 'modular_zubbers/code/modules/silicons/borgs/sprites/robot_items.dmi' icon_state = "gripper_circ" storable = list( /obj/item/circuitboard, @@ -45,6 +50,10 @@ /obj/item/integrated_circuit, /obj/item/circuit_component, /obj/item/usb_cable, + /obj/item/assembly/signaler, + /obj/item/healthanalyzer, //To build medibots + /obj/item/assembly/prox_sensor, + /obj/item/electronics, ) /obj/item/borg/apparatus/circuit_sci/examine() @@ -65,15 +74,16 @@ icon_state = "connector" storable = list( /obj/item/mmi, - /obj/item/assembly/flash, //to build borgs, + /obj/item/assembly, //unrestricted assembly building /obj/item/bodypart/arm/left/robot, /obj/item/bodypart/arm/right/robot, /obj/item/bodypart/leg/left/robot, /obj/item/bodypart/leg/right/robot, /obj/item/bodypart/chest/robot, /obj/item/bodypart/head/robot, - /obj/item/borg/upgrade/ai, //Shell makeing + /obj/item/borg/upgrade/ai, //Shell making ) + /obj/item/borg/apparatus/illegal/examine() . = ..() if(stored) @@ -86,21 +96,35 @@ icon_state = "borg_beaker_apparatus" storable = list(/obj/item/tank) -/obj/item/robot_model/syndicatejack/New(...) +/obj/item/borg/apparatus/tank_manipulator/update_overlays() . = ..() - basic_modules += /obj/item/borg/apparatus/tank_manipulator + var/mutable_appearance/arm = mutable_appearance(icon = icon, icon_state = "borg_beaker_apparatus") + if(stored) + stored.pixel_x = 0 + stored.pixel_y = 0 + var/mutable_appearance/stored_copy = new /mutable_appearance(stored) + stored_copy.layer = FLOAT_LAYER + stored_copy.plane = FLOAT_PLANE + . += stored_copy + else + arm.pixel_y = arm.pixel_y - 5 + . += arm -/obj/item/robot_model/ninja_saboteur/New(...) - . = ..() +/obj/item/robot_model/syndicatejack/Initialize(mapload) basic_modules += /obj/item/borg/apparatus/tank_manipulator - -/obj/item/robot_model/engineering/New(...) . = ..() + +/obj/item/robot_model/ninja_saboteur/Initialize(mapload) basic_modules += /obj/item/borg/apparatus/tank_manipulator + . = ..() -/obj/item/robot_model/saboteur/New(...) +/obj/item/robot_model/engineering/Initialize(mapload) + basic_modules += /obj/item/borg/apparatus/tank_manipulator . = ..() + +/obj/item/robot_model/saboteur/Initialize(mapload) basic_modules += /obj/item/borg/apparatus/tank_manipulator + . = ..() /obj/item/borg/apparatus/sheet_manipulator/Initialize() . = ..() diff --git a/modular_zubbers/code/game/objects/structures/aliens.dm b/modular_zubbers/code/game/objects/structures/aliens.dm new file mode 100644 index 0000000000000..a64939aea3c82 --- /dev/null +++ b/modular_zubbers/code/game/objects/structures/aliens.dm @@ -0,0 +1,2 @@ +/obj/structure/alien/weeds/should_atmos_process(datum/gas_mixture/air, exposed_temperature) + return exposed_temperature >= 350 //Slightly higher than moonstation external atmos. diff --git a/modular_zubbers/code/game/objects/structures/trash_pile.dm b/modular_zubbers/code/game/objects/structures/trash_pile.dm index c85889ecc44d9..2d3b2ed760e8b 100644 --- a/modular_zubbers/code/game/objects/structures/trash_pile.dm +++ b/modular_zubbers/code/game/objects/structures/trash_pile.dm @@ -27,27 +27,27 @@ 'sound/effects/footstep/clownstep1.ogg' = 5, 'sound/effects/footstep/clownstep2.ogg' = 5, 'sound/effects/footstep/meowstep1.ogg' = 1, - 'sound/effects/attackblob.ogg' = 10, + 'sound/effects/blob/attackblob.ogg' = 10, 'sound/effects/bang.ogg' = 10, - 'sound/effects/bin_close.ogg' = 20, - 'sound/effects/bin_open.ogg' = 20, + 'sound/effects/bin/bin_close.ogg' = 20, + 'sound/effects/bin/bin_open.ogg' = 20, 'sound/effects/boing.ogg' = 5, - 'sound/effects/cartoon_splat.ogg' = 1, + 'sound/effects/cartoon_sfx/cartoon_splat.ogg' = 1, 'sound/effects/cashregister.ogg' = 1, - 'sound/effects/glassbash.ogg' = 50, - 'sound/effects/glassbr1.ogg' = 20, - 'sound/effects/glassbr2.ogg' = 20, - 'sound/effects/glassbr3.ogg' = 20, + 'sound/effects/glass/glassbash.ogg' = 50, + 'sound/effects/glass/glassbr1.ogg' = 20, + 'sound/effects/glass/glassbr2.ogg' = 20, + 'sound/effects/glass/glassbr3.ogg' = 20, 'sound/effects/grillehit.ogg' = 20, 'sound/effects/hit_on_shattered_glass.ogg' = 20, 'sound/effects/jingle.ogg' = 50, 'sound/effects/meatslap.ogg' = 50, 'sound/effects/quack.ogg' = 20, - 'sound/effects/rustle1.ogg' = 100, - 'sound/effects/rustle2.ogg' = 100, - 'sound/effects/rustle3.ogg' = 100, - 'sound/effects/rustle4.ogg' = 100, - 'sound/effects/rustle5.ogg' = 100, + 'sound/effects/rustle/rustle1.ogg' = 100, + 'sound/effects/rustle/rustle2.ogg' = 100, + 'sound/effects/rustle/rustle3.ogg' = 100, + 'sound/effects/rustle/rustle4.ogg' = 100, + 'sound/effects/rustle/rustle5.ogg' = 100, ) /obj/structure/trash_pile/Destroy() @@ -89,7 +89,7 @@ user.visible_message("[user] searches through \the [src]...", span_notice("You search through \the [src]...")) - playsound(get_turf(src), pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg'), 50) + playsound(get_turf(src), pick('sound/effects/rustle/rustle1.ogg','sound/effects/rustle/rustle2.ogg','sound/effects/rustle/rustle3.ogg','sound/effects/rustle/rustle4.ogg','sound/effects/rustle/rustle5.ogg'), 50) var/content_length = length(contents) if(content_length) //Something hidden inside (mob/item) @@ -210,7 +210,7 @@ spawned_item = new spawned_item(T) var/turf/throw_at = get_ranged_target_turf_direct(src, user, 7, rand(-60,60)) if(spawned_item.safe_throw_at(throw_at, rand(2,4), rand(1,3), user, spin = TRUE)) - playsound(T, 'sound/weapons/punchmiss.ogg', 10) + playsound(T, 'sound/items/weapons/punchmiss.ogg', 10) if(COOLDOWN_FINISHED(src,funny_sound_cooldown)) COOLDOWN_START(src, funny_sound_cooldown, funny_sound_delay*0.5 + rand()*funny_sound_delay) // x0.5 to x1.5 diff --git a/modular_zubbers/code/game/traits/neutral.dm b/modular_zubbers/code/game/traits/neutral.dm index 681e5e439f97e..21c88731b5220 100644 --- a/modular_zubbers/code/game/traits/neutral.dm +++ b/modular_zubbers/code/game/traits/neutral.dm @@ -24,7 +24,7 @@ message_admins("[holder] has died with DNR trait & element, releasing job slot in 60 seconds.") /datum/element/dnr/proc/cleanup(mob/living/holder) // What if they gib, though? - var/datum/job/job_to_free = SSjob.GetJob(holder.mind.assigned_role.title) + var/datum/job/job_to_free = SSjob.get_job(holder.mind.assigned_role.title) job_to_free.current_positions-- holder.log_message("has been released via their current body via DNR trait - ([holder])", LOG_GAME, color = COLOR_GREEN) holder.mind = null diff --git a/modular_zubbers/code/modules/GAGS/greyscale_configs.dm b/modular_zubbers/code/modules/GAGS/greyscale_configs.dm index c9d42e241a53f..f79bb31817205 100644 --- a/modular_zubbers/code/modules/GAGS/greyscale_configs.dm +++ b/modular_zubbers/code/modules/GAGS/greyscale_configs.dm @@ -90,3 +90,12 @@ icon_file = 'modular_zubbers/code/modules/GAGS/icons/monkehenchmenmob.dmi' json_config = 'modular_skyrat/modules/GAGS/json_configs/henchmen/henchmen.json' +/datum/greyscale_config/miniskirt + name = "Miniskirt" + icon_file = 'modular_zubbers/icons/obj/clothing/under/skirts_dresses.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/miniskirt.json' + +/datum/greyscale_config/miniskirt_worn + name = "Worn Miniskirt" + icon_file = 'modular_zubbers/icons/mob/clothing/under/skirts_dresses.dmi' + json_config = 'modular_zubbers/code/datums/greyscale/json_configs/miniskirt_worn.json' diff --git a/modular_zubbers/code/modules/alt_anomaly_refinery/anomaly_refinery.dm b/modular_zubbers/code/modules/alt_anomaly_refinery/anomaly_refinery.dm new file mode 100644 index 0000000000000..4475cb77906b5 --- /dev/null +++ b/modular_zubbers/code/modules/alt_anomaly_refinery/anomaly_refinery.dm @@ -0,0 +1,132 @@ +#define REFINERY_ANOMALY_REFINEMENT_TIME (5 SECONDS) +#define REFINERY_ANOMALY_POWER_REQUIREMENT (1.21 MEGA WATTS) //This is NOT active power use. This is the amount of power it uses for a second when a bomb is detonated. This is about the same a stable SM generates in a second. + +/obj/machinery/research/anomaly_refinery + desc = "An advanced machine equipped with state of the art bomb prediction software that's capable of implosion-compressing raw anomaly cores into finished artifacts. \ + Comes with a built-in stabilization and sound-supressant field that consumes a lot of power to prevent obnoxious shaking and sounds heard station-wide, as not to wake up any dorms users." + var/requirement_timer + var/requirement_mod = 0 //0 to 100. Decreases by 1 every 5 seconds. Increased by 40 after a test. + +/obj/machinery/research/anomaly_refinery/examine(mob/user) + . = ..() + . += span_notice("Usage of the machine will increase the bomb range requirement for the next experiment.") + . += span_notice("Requires [display_power(REFINERY_ANOMALY_POWER_REQUIREMENT)] of power in the network to use.") + . += span_notice("Each core refinement takes [DisplayTimeText(REFINERY_ANOMALY_REFINEMENT_TIME,1)] to complete.") + +/obj/machinery/research/anomaly_refinery/get_required_radius(anomaly_type) + . = ..() + if(!isnum(.)) + return + . *= 0.25 + (requirement_mod/100)*0.75 + +/obj/machinery/research/anomaly_refinery/start_test() + + if(active) + say("ERROR: Already running a compression test.") + return + + if(!istype(inserted_core) || !istype(inserted_bomb)) + end_test("ERROR: Missing equipment. Items ejected.") + return + + if(!inserted_bomb?.tank_one || !inserted_bomb?.tank_two || !(tank_to_target == inserted_bomb?.tank_one || tank_to_target == inserted_bomb?.tank_two)) + end_test("ERROR: Transfer valve malfunctioning. Items ejected.") + return + + if(!use_power_from_net(REFINERY_ANOMALY_POWER_REQUIREMENT)) + say("ERROR: Not enough power in network to safely compress the core.") + return + + say("Beginning compression test. Opening transfer valve.") + active = TRUE + test_status = null + + if (obj_flags & EMAGGED) + say("ERROR: An firmware issue was detected while starting a process. Running autopatcher.") + playsound(src, 'sound/machines/ding.ogg', 50, vary = TRUE) + addtimer(CALLBACK(src, PROC_REF(error_test)), 2 SECONDS, TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_NO_HASH_WAIT) // Synced with the sound. + return + + inserted_bomb.toggle_valve(tank_to_target) + + requirement_mod = min(requirement_mod + 20, 100) + round(REFINERY_ANOMALY_REFINEMENT_TIME/5,1) + + timeout_timer = addtimer(CALLBACK(src, PROC_REF(timeout_test)), REFINERY_ANOMALY_REFINEMENT_TIME, TIMER_STOPPABLE | TIMER_UNIQUE | TIMER_DELETE_ME | TIMER_NO_HASH_WAIT) + requirement_timer = addtimer(CALLBACK(src, PROC_REF(remove_requirement)), 5 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE | TIMER_DELETE_ME | TIMER_NO_HASH_WAIT | TIMER_LOOP) + + say("Refining core. ETA [DisplayTimeText(REFINERY_ANOMALY_REFINEMENT_TIME,1)] until core refinement completion.") + + playsound( + src, + pick('sound/effects/explosion/explosion1.ogg','sound/effects/explosion/explosion2.ogg','sound/effects/explosion/explosion3.ogg'), + 50 + ) + + return + +/obj/machinery/research/anomaly_refinery/proc/remove_requirement() + + requirement_mod = max(0,requirement_mod-1) + + if(requirement_mod <= 0) + deltimer(requirement_timer) + requirement_timer = null + playsound( + src, + pick('modular_zubbers/sound/arcade/minesweeper_boardpress.ogg'), + 50 + ) + say("Anomaly stability now at 100% optimization.") + +/obj/machinery/research/anomaly_refinery/check_test(atom/source, list/arguments) + + . = COMSIG_CANCEL_EXPLOSION + + if(!inserted_core) + test_status = "ERROR: No core present during detonation." + playsound( + src, + pick('modular_zubbers/sound/arcade/minesweeper_winfail.ogg'), + 50 + ) + return + + var/heavy = arguments[EXARG_KEY_DEV_RANGE] + var/medium = arguments[EXARG_KEY_HEAVY_RANGE] + var/light = arguments[EXARG_KEY_LIGHT_RANGE] + var/explosion_range = max(heavy, medium, light, 0) + var/capped_explosion_range = min(explosion_range, DEFAULT_MESSAGE_RANGE) + var/required_range = get_required_radius(inserted_core.anomaly_type) + + SSexplosions.shake_the_room(get_turf(src), capped_explosion_range*0.25, capped_explosion_range, capped_explosion_range*0.25, capped_explosion_range*0.25) + + if(explosion_range < required_range) + test_status = "Resultant detonation failed to produce enough implosive power to compress [inserted_core]. Items ejected." + playsound( + src, + pick('modular_zubbers/sound/arcade/minesweeper_winfail.ogg'), + 50 + ) + return + + if(test_status) + playsound( + src, + pick('modular_zubbers/sound/arcade/minesweeper_winfail.ogg'), + 50 + ) + return + + inserted_core = inserted_core.create_core(src, TRUE, TRUE) + test_status = "Success. Resultant detonation has theoretical range of [explosion_range]. Required radius was [required_range]. Core production complete." + + playsound( + src, + pick('modular_zubbers/sound/arcade/minesweeper_win.ogg'), + 50 + ) + + return + +#undef REFINERY_ANOMALY_REFINEMENT_TIME +#undef REFINERY_ANOMALY_POWER_REQUIREMENT diff --git a/modular_zubbers/code/modules/alternative_job_titles/code/alt_job_titles.dm b/modular_zubbers/code/modules/alternative_job_titles/code/alt_job_titles.dm index 2ab6355c0e1a1..59952bc14c717 100644 --- a/modular_zubbers/code/modules/alternative_job_titles/code/alt_job_titles.dm +++ b/modular_zubbers/code/modules/alternative_job_titles/code/alt_job_titles.dm @@ -5,10 +5,31 @@ "Security Corpsman", "Brig Physician", "Combat Medic", + "Special Operations Medic", ) /datum/job/blueshield/New() alt_titles |= list( - "Henchman", - ) + "Henchman", + ) + . = ..() + +/datum/job/orderly/New() + alt_titles |= list( + "Medical Attendant", + "Medical Support Technician", + ) . = ..() + +//New titles for Blacksmith +/datum/job/blacksmith + alt_titles = list( + "Ithastrist", + "Metalurgist", + "Metal Worker", + "Metalsmith", + "Forge Artisan", + "Forgemaster", + "Weaponsmith", + "Armorsmith", + ) diff --git a/modular_zubbers/code/modules/antagonists/_common/antag_datum.dm b/modular_zubbers/code/modules/antagonists/_common/antag_datum.dm index 14f19dc26e8ee..dc42db53d6e89 100644 --- a/modular_zubbers/code/modules/antagonists/_common/antag_datum.dm +++ b/modular_zubbers/code/modules/antagonists/_common/antag_datum.dm @@ -11,8 +11,10 @@ var/list/power_data = list() power_data["power_name"] = power.name - power_data["power_explanation"] = power?.power_explanation power_data["power_icon"] = power.button_icon_state + if(istype(power, /datum/action/cooldown/bloodsucker)) + var/datum/action/cooldown/bloodsucker/bloodsucker_power = power + power_data["power_explanation"] = bloodsucker_power.get_power_explanation() data["powers"] += list(power_data) return data diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm index 5a0f3bf721ef5..d0333b4735d8f 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm @@ -14,7 +14,7 @@ /// How much blood we have, starting off at default blood levels. Do not adjust this directly, use adjustBloodVolume(), and use getBloodVolume() to get the current value. VAR_PRIVATE/bloodsucker_blood_volume = BLOOD_VOLUME_NORMAL - /// How much blood we can have at once, increases per level. + /// How much blood we can have without it deckaying quickly, increases per level. var/max_blood_volume = 600 var/datum/bloodsucker_clan/my_clan @@ -48,27 +48,28 @@ ///ALL Powers currently owned var/list/datum/action/cooldown/bloodsucker/powers = list() - ///Vassals under my control. Periodically remove the dead ones. - var/list/datum/antagonist/vassal/vassals = list() - ///Special vassals I own, to not have double of the same type. - var/list/datum/antagonist/vassal/special_vassals = list() + ///Ghouls under my control. Periodically remove the dead ones. + var/list/datum/antagonist/ghoul/ghouls = list() + ///Special ghouls I own, to not have double of the same type. + var/list/datum/antagonist/ghoul/special_ghouls = list() ///How many ranks we have, don't modify this directly, use AdjustRank() and use GetRank() to get the current value. VAR_PRIVATE/bloodsucker_level = 0 - /// Unspent ranks, don't modify this directly, use AdjustUnspentRanks() and use GetUnspentRanks() to get the current value. + /// Unspent ranks, don't modify this directly, use AdjustUnspentRank() and use GetUnspentRank() to get the current value. VAR_PRIVATE/bloodsucker_level_unspent = 1 var/additional_regen var/blood_over_cap = 0 var/bloodsucker_regen_rate = 0.3 // Used for Bloodsucker Objectives - var/area/bloodsucker_lair_area + var/area/bloodsucker_haven_area var/obj/structure/closet/crate/coffin var/total_blood_drank = 0 /// Used for Bloodsuckers gaining levels from drinking blood var/blood_level_gain = 0 - var/blood_level_gain_amount = 0 + /// How many levels you can get from Sol + var/sol_levels = 3 ///Blood display HUD var/atom/movable/screen/bloodsucker/blood_counter/blood_display @@ -77,8 +78,8 @@ /// Static typecache of all bloodsucker powers. var/static/list/all_bloodsucker_powers = typecacheof(/datum/action/cooldown/bloodsucker, ignore_root_path = TRUE) - /// Antagonists that cannot be Vassalized no matter what - var/static/list/vassal_banned_antags = list( + /// Antagonists that cannot be Ghoulized no matter what + var/static/list/ghoul_banned_antags = list( /datum/antagonist/bloodsucker, // /datum/antagonist/monsterhunter, /datum/antagonist/changeling, @@ -98,7 +99,6 @@ TRAIT_AGEUSIA, TRAIT_COLDBLOODED, TRAIT_VIRUSIMMUNE, - TRAIT_HARDLY_WOUNDED, TRAIT_NO_MIRROR_REFLECTION, TRAIT_DRINKS_BLOOD, TRAIT_TOXIMMUNE, @@ -106,10 +106,6 @@ TRAIT_STABLELIVER ) var/static/biotype = MOB_VAMPIRIC - /// Weakref to the owner mob's heart, without bloodsucker_life stops and they die. Handled via signals due to the fact that - /// Bloodsuckers don't take damage from lacking a heart due to TRAIT_NOBREATH - /// Saved here so we can keep a track of it and remove signals properly - var/datum/weakref/heart /** * Apply innate effects is everything given to the mob @@ -123,8 +119,10 @@ RegisterSignal(current_mob, COMSIG_LIVING_LIFE, PROC_REF(LifeTick)) RegisterSignal(current_mob, COMSIG_LIVING_DEATH, PROC_REF(on_death)) RegisterSignal(current_mob, COMSIG_SPECIES_GAIN, PROC_REF(on_species_gain)) - RegisterSignal(current_mob, COMSIG_QDELETING, PROC_REF(on_removal)) - RegisterSignal(current_mob, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(on_organ_gain)) + RegisterSignal(current_mob, COMSIG_QDELETING, PROC_REF(on_owner_deletion)) + RegisterSignal(current_mob, COMSIG_ENTER_COFFIN, PROC_REF(on_enter_coffin)) + RegisterSignal(current_mob, COMSIG_MOB_STAKED, PROC_REF(on_staked)) + RegisterSignal(current_mob, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(on_organ_removal)) talking_head() handle_clown_mutation(current_mob, mob_override ? null : "As a vampiric clown, you are no longer a danger to yourself. Your clownish nature has been subdued by your thirst for blood.") add_team_hud(current_mob) @@ -136,13 +134,10 @@ RegisterSignal(current_mob, COMSIG_MOB_HUD_CREATED, PROC_REF(on_hud_created)) if(ishuman(current_mob)) current_mob?.dna?.species.on_bloodsucker_gain(current_mob) - add_signals_to_heart(current_mob) - // check if we already somehow don't have a heart, if this is possible, something is fucked up. - on_organ_removal(null, current_mob) #ifdef BLOODSUCKER_TESTING var/turf/user_loc = get_turf(current_mob) new /obj/structure/closet/crate/coffin(user_loc) - new /obj/structure/bloodsucker/vassalrack(user_loc) + new /obj/structure/bloodsucker/ghoulrack(user_loc) #endif /** @@ -153,8 +148,7 @@ /datum/antagonist/bloodsucker/remove_innate_effects(mob/living/mob_override) . = ..() var/mob/living/carbon/current_mob = mob_override || owner.current - remove_signals_from_heart(current_mob) - UnregisterSignal(current_mob, list(COMSIG_LIVING_LIFE, COMSIG_ATOM_EXAMINE, COMSIG_LIVING_DEATH, COMSIG_SPECIES_GAIN, COMSIG_QDELETING)) + unregister_body_signals() handle_clown_mutation(current_mob, removing = FALSE) if(current_mob.hud_used) var/datum/hud/hud_used = current_mob.hud_used @@ -164,7 +158,8 @@ QDEL_NULL(vamprank_display) SSsunlight.remove_sun_sufferer(owner.current) //check if sunlight should end - current_mob.dna?.species?.on_bloodsucker_loss(current_mob) + if(iscarbon(current_mob)) + current_mob?.dna.species.on_bloodsucker_loss(current_mob) if(current_mob.client) // We need to let the bloodsucker antag datum get removed before we can re-add quirks addtimer(CALLBACK(SSquirks, TYPE_PROC_REF(/datum/controller/subsystem/processing/quirks, AssignQuirks), current_mob, current_mob.client), 1 SECONDS) @@ -191,14 +186,17 @@ SIGNAL_HANDLER if(!ishuman(owner.current)) return - add_signals_to_heart(target) var/mob/living/carbon/human/user = owner.current user?.dna?.species.on_bloodsucker_gain(target) /datum/antagonist/bloodsucker/get_admin_commands() . = ..() .["Set blood level"] = CALLBACK(src, PROC_REF(admin_set_blood)) - .["Give Level"] = CALLBACK(src, PROC_REF(RankUp), TRUE) + .["Give Level"] = CALLBACK(src, PROC_REF(admin_rankup)) + // I know admins can technically do it via VV's dropdown, but it's super inconvenient. + .["Give Power"] = CALLBACK(src, PROC_REF(admin_give_power)) + .["Remove Power"] = CALLBACK(src, PROC_REF(admin_remove_power)) + .["Set Power Level"] = CALLBACK(src, PROC_REF(admin_set_power_level)) if(bloodsucker_level_unspent >= 1) .["Remove Level"] = CALLBACK(src, PROC_REF(RankDown)) @@ -221,9 +219,8 @@ RegisterSignal(SSsunlight, COMSIG_SOL_END, PROC_REF(on_sol_end)) RegisterSignal(SSsunlight, COMSIG_SOL_RISE_TICK, PROC_REF(handle_sol)) RegisterSignal(SSsunlight, COMSIG_SOL_WARNING_GIVEN, PROC_REF(give_warning)) - if(ventrue_sired) // sired bloodsuckers shouldnt be getting the same benefits as Bloodsuckers. + if(ventrue_sired) // sired bloodsuckers shouldnt be getting the same benefits as roundstart Bloodsuckers. bloodsucker_level_unspent = 0 - show_in_roundend = FALSE else // Start Sunlight if first Bloodsucker // Name and Titles @@ -240,14 +237,18 @@ /// Called by the remove_antag_datum() and remove_all_antag_datums() mind procs for the antag datum to handle its own removal and deletion. /datum/antagonist/bloodsucker/on_removal() - free_all_vassals() + free_all_ghouls() if(!owner?.current) return + unregister_sol_signals() + if(is_head(owner.current)) + cleanup_talking_head() if(ishuman(owner.current)) var/mob/living/carbon/human/user = owner.current user?.dna?.species.regenerate_organs(user, null, TRUE) clear_powers_and_stats() ventrue_sired = null + coffin?.unclaim_coffin(FALSE, TRUE) return ..() /datum/antagonist/bloodsucker/on_body_transfer(mob/living/old_body, mob/living/new_body) @@ -317,7 +318,7 @@ // Called when using admin tools to give antag status /datum/antagonist/bloodsucker/admin_add(datum/mind/new_owner, mob/admin) - var/levels = input("How many unspent Ranks would you like [new_owner] to have?","Bloodsucker Rank", bloodsucker_level_unspent) as null | num + var/levels = tgui_input_number(admin, "How many unspent Ranks would you like [new_owner] to have?","Bloodsucker Rank", GetUnspentRank(), 100, 0) var/msg = " made [key_name_admin(new_owner)] into \a [name]" if(levels > 1) bloodsucker_level_unspent = levels @@ -386,22 +387,22 @@ objectives_complete = FALSE break - // Now list their vassals - if(vassals.len) - report += "Their Vassals were..." - for(var/datum/antagonist/vassal/all_vassals as anything in vassals) - if(!all_vassals.owner) + // Now list their ghouls + if(ghouls.len) + report += "Their Ghouls were..." + for(var/datum/antagonist/ghoul/all_ghouls as anything in ghouls) + if(!all_ghouls.owner) continue - var/list/vassal_report = list() - vassal_report += "[all_vassals.owner.name]" + var/list/ghoul_report = list() + ghoul_report += "[all_ghouls.owner.name]" - if(all_vassals.owner.assigned_role) - vassal_report += " the [all_vassals.owner.assigned_role.title]" - if(IS_FAVORITE_VASSAL(all_vassals.owner.current)) - vassal_report += " and was the Favorite Vassal" - else if(IS_REVENGE_VASSAL(all_vassals.owner.current)) - vassal_report += " and was the Revenge Vassal" - report += vassal_report.Join() + if(all_ghouls.owner.assigned_role) + ghoul_report += " the [all_ghouls.owner.assigned_role.title]" + if(IS_FAVORITE_GHOUL(all_ghouls.owner.current)) + ghoul_report += " and was the Favorite Ghoul" + else if(IS_REVENGE_GHOUL(all_ghouls.owner.current)) + ghoul_report += " and was the Revenge Ghoul" + report += ghoul_report.Join() if(objectives.len == 0 || objectives_complete) report += "The [name] was successful!" @@ -454,8 +455,8 @@ */ /datum/antagonist/bloodsucker/proc/clear_powers_and_stats() // Remove clan first - if(my_clan) - QDEL_NULL(my_clan) + // if(my_clan) + // QDEL_NULL(my_clan) // Powers for(var/datum/action/cooldown/bloodsucker/all_powers as anything in powers) RemovePower(all_powers) @@ -494,6 +495,8 @@ /datum/antagonist/bloodsucker/proc/remove_invalid_quirks() var/datum/quirk/bad_quirk = owner.current.get_quirk(/datum/quirk/sol_weakness) + if(!bad_quirk) + return // silently remove the quirk if it's not valid bad_quirk.remove_from_current_holder(TRUE) owner.current.remove_quirk(/datum/quirk/sol_weakness) @@ -509,17 +512,26 @@ return "Final Death" return ..() +/datum/antagonist/bloodsucker/proc/considered_alive(datum/mind/player_mind, enforce_human) + if(!player_mind?.current) // no owner.current means there is no body, thus we final-death'd + return FALSE + if(is_head(player_mind.current)) + return FALSE + if(am_staked()) + return FALSE + return TRUE + /datum/antagonist/bloodsucker/proc/forge_bloodsucker_objectives() - // Claim a Lair Objective - var/datum/objective/bloodsucker/lair/lair_objective = new - lair_objective.owner = owner - objectives += lair_objective + // Claim a haven Objective + var/datum/objective/bloodsucker/haven/haven_objective = new + haven_objective.owner = owner + objectives += haven_objective // Survive Objective var/datum/objective/survive/bloodsucker/survive_objective = new survive_objective.owner = owner objectives += survive_objective - // Objective 1: Vassalize a Head/Command, or a specific target + // Objective 1: Ghoulize a Head/Command, or a specific target switch(rand(1, 3)) if(1) // Conversion Objective var/datum/objective/bloodsucker/conversion/chosen_subtype = pick(subtypesof(/datum/objective/bloodsucker/conversion)) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm index ed092b606b77d..72954ac6f401e 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm @@ -1,81 +1,83 @@ /** * Checks if the target has antag datums and, if so, - * are they allowed to be Vassalized, or not, or banned. + * are they allowed to be Ghoulized, or not, or banned. * Args: * target - The person we check for antag datums. */ /datum/antagonist/bloodsucker/proc/AmValidAntag(mob/target) if(HAS_TRAIT(target, TRAIT_UNCONVERTABLE)) - return VASSALIZATION_BANNED + return GHOULIZATION_BANNED - var/vassalization_status = VASSALIZATION_ALLOWED + var/ghoulization_status = GHOULIZATION_ALLOWED for(var/datum/antagonist/antag_datum as anything in target.mind.antag_datums) - if(antag_datum.type in vassal_banned_antags) - return VASSALIZATION_BANNED - vassalization_status = VASSALIZATION_DISLOYAL - return vassalization_status + if(antag_datum.type in ghoul_banned_antags) + return GHOULIZATION_BANNED + ghoulization_status = GHOULIZATION_DISLOYAL + return ghoulization_status /** - * # can_make_vassal + * # can_make_ghoul * Checks if the person is allowed to turn into the Bloodsucker's - * Vassal, ensuring they are a player and valid. - * If they are a Vassal themselves, will check if their master + * Ghoul, ensuring they are a player and valid. + * If they are a Ghoul themselves, will check if their master * has broken the Masquerade, to steal them. * Args: - * conversion_target - Person being vassalized + * conversion_target - Person being ghoulized */ -/datum/antagonist/bloodsucker/proc/can_make_vassal(mob/living/conversion_target) +/datum/antagonist/bloodsucker/proc/can_make_ghoul(mob/living/conversion_target) if(!iscarbon(conversion_target) || (conversion_target.stat < CONSCIOUS)) return FALSE // No Mind! if(!conversion_target.mind) - to_chat(owner.current, span_danger("[conversion_target] isn't self-aware enough to be made into a Vassal.")) + to_chat(owner.current, span_danger("[conversion_target] isn't self-aware enough to be made into a Ghoul.")) return FALSE - if(AmValidAntag(conversion_target) == VASSALIZATION_BANNED) + if(AmValidAntag(conversion_target) == GHOULIZATION_BANNED) to_chat(owner.current, span_danger("[conversion_target] resists the power of your blood to dominate their mind!")) return FALSE var/mob/living/master = conversion_target.mind.enslaved_to?.resolve() if(!master || (master == owner.current)) return TRUE - var/datum/antagonist/bloodsucker/bloodsuckerdatum = master.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(master) if(bloodsuckerdatum && bloodsuckerdatum.broke_masquerade) - //vassal stealing + //ghoul stealing return TRUE to_chat(owner.current, span_danger("[conversion_target]'s mind is overwhelmed with too much external force to put your own!")) return FALSE /** - * First will check if the target can be turned into a Vassal, if so then it will + * First will check if the target can be turned into a Ghoul, if so then it will * turn them into one, log it, sync their minds, then updates the Rank * Args: * conversion_target - The person converted. */ -/datum/antagonist/bloodsucker/proc/make_vassal(mob/living/conversion_target) - if(!can_make_vassal(conversion_target)) +/datum/antagonist/bloodsucker/proc/make_ghoul(mob/living/conversion_target) +#ifndef BLOODSUCKER_TESTING + if(!can_make_ghoul(conversion_target)) return FALSE - //Check if they used to be a Vassal and was stolen. - var/datum/antagonist/vassal/old_vassal = conversion_target.mind.has_antag_datum(/datum/antagonist/vassal) - if(old_vassal) - conversion_target.mind.remove_antag_datum(/datum/antagonist/vassal) +#endif + //Check if they used to be a Ghoul and was stolen. + var/datum/antagonist/ghoul/old_ghoul = IS_GHOUL(conversion_target) + if(old_ghoul) + conversion_target.mind.remove_antag_datum(/datum/antagonist/ghoul) - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) bloodsuckerdatum.SelectTitle(am_fledgling = FALSE) //set the master, then give the datum. - var/datum/antagonist/vassal/vassaldatum = new(conversion_target.mind) - vassaldatum.master = bloodsuckerdatum - conversion_target.mind.add_antag_datum(vassaldatum) + var/datum/antagonist/ghoul/ghouldatum = new(conversion_target.mind) + ghouldatum.master = bloodsuckerdatum + conversion_target.mind.add_antag_datum(ghouldatum) - message_admins("[conversion_target] has become a Vassal, and is enslaved to [owner.current].") - log_admin("[conversion_target] has become a Vassal, and is enslaved to [owner.current].") + message_admins("[conversion_target] has become a Ghoul, and is enslaved to [owner.current].") + log_admin("[conversion_target] has become a Ghoul, and is enslaved to [owner.current].") return TRUE /* * # can_make_special * - * MIND Helper proc that ensures the person can be a Special Vassal, + * MIND Helper proc that ensures the person can be a Special Ghoul, * without actually giving the antag datum to them. - * This is because Special Vassals get special abilities, without the unique Bloodsucker blood tracking, + * This is because Special Ghouls get special abilities, without the unique Bloodsucker blood tracking, * and we don't want this to be infinite. * Args: * creator - Person attempting to convert them. diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/integration.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/integration.dm index b5ab59e326faf..c8d8041661b90 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/integration.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/integration.dm @@ -13,9 +13,6 @@ if(bloodsuckerdatum.my_clan && istype(bloodsuckerdatum.my_clan, /datum/bloodsucker_clan/ventrue) && bloodsuckerdatum.GetBloodVolume() >= BLOOD_VOLUME_SAFE) return ..() - if(bloodsuckerdatum.GetRank() >= BLOODSUCKER_HIGH_LEVEL) - exposed_mob.adjust_disgust(5 SECONDS, DISGUST_LEVEL_GROSS) - reac_volume = reac_volume * 0.3 if(bloodsuckerdatum.GetBloodVolume() >= BLOOD_VOLUME_NORMAL) return ..() bloodsuckerdatum.AdjustBloodVolume(round(reac_volume, 0.1)) @@ -24,7 +21,7 @@ . = ..() if(!mind) return - var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(src) if(!bloodsuckerdatum) return bloodsuckerdatum.AdjustBloodVolume(-amount) @@ -58,7 +55,7 @@ . = ..() if(!mind) return ..() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(src) if(bloodsuckerdatum) . += "" . += "Blood Drank: [bloodsuckerdatum.total_blood_drank]" @@ -118,9 +115,3 @@ if(IS_BLOODSUCKER(src)) return TRUE . =..() - -// prevents players being trapped in their brain, alive, yet limbless and voiceless -/obj/item/bodypart/head/drop_organs(mob/user, violent_removal) - var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in src - brain?.brainmob.death() - . = ..() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm index 6bdca37490aef..4c70d8b7d10da 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm @@ -4,25 +4,31 @@ /// Runs from COMSIG_LIVING_LIFE, handles Bloodsucker constant proccesses. /datum/antagonist/bloodsucker/proc/LifeTick(mob/living/source, seconds_per_tick, times_fired) SIGNAL_HANDLER - if(!owner) + if(QDELETED(owner) || QDELETED(owner.current)) INVOKE_ASYNC(src, PROC_REF(HandleDeath)) return - if(isbrain(owner.current)) - return - if(HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT)) + life_always() + var/is_head = is_head(owner.current) + if(!is_head && owner.current.get_organ_slot(ORGAN_SLOT_HEART) && !am_staked()) + life_active(is_head) + + SEND_SIGNAL(src, COMSIG_BLOODSUCKER_ON_LIFETICK, seconds_per_tick, times_fired) + +/datum/antagonist/bloodsucker/proc/life_always(is_head = FALSE) + if(is_in_torpor()) check_end_torpor() - // Deduct Blood - if(owner.current.stat == CONSCIOUS && !HAS_TRAIT(owner.current, TRAIT_IMMOBILIZED) && !HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT)) + if(is_head) + return + if(owner.current.stat == CONSCIOUS && !HAS_TRAIT(owner.current, TRAIT_IMMOBILIZED) && !is_in_torpor()) INVOKE_ASYNC(src, PROC_REF(AdjustBloodVolume), -BLOODSUCKER_PASSIVE_BLOOD_DRAIN) // -.1 currently + INVOKE_ASYNC(src, PROC_REF(update_blood)) + INVOKE_ASYNC(src, PROC_REF(HandleStarving)) + +/datum/antagonist/bloodsucker/proc/life_active() if(HandleHealing()) if((COOLDOWN_FINISHED(src, bloodsucker_spam_healing)) && bloodsucker_blood_volume > 0) to_chat(owner.current, span_notice("The power of your blood begins knitting your wounds...")) COOLDOWN_START(src, bloodsucker_spam_healing, BLOODSUCKER_SPAM_HEALING) - // Standard Updates - INVOKE_ASYNC(src, PROC_REF(HandleStarving)) - INVOKE_ASYNC(src, PROC_REF(update_blood)) - - SEND_SIGNAL(src, COMSIG_BLOODSUCKER_ON_LIFETICK, seconds_per_tick, times_fired) /datum/antagonist/bloodsucker/proc/on_death(mob/living/source, gibbed) SIGNAL_HANDLER @@ -74,11 +80,11 @@ #undef MASQUERADE /// mult: SILENT feed is 1/3 the amount -/datum/antagonist/bloodsucker/proc/handle_feeding(mob/living/carbon/target, mult=1, power_level) +/datum/antagonist/bloodsucker/proc/handle_feeding(mob/living/carbon/target, mult=1, power_level, already_drunk = 0) // Starts at 15 (now 8 since we doubled the Feed time) var/feed_amount = 15 + (power_level * 2) - var/blood_taken = min(feed_amount, target.blood_volume) * mult - target.blood_volume -= blood_taken + var/blood_taken = feed_amount * mult + target.blood_volume = max(target.blood_volume - blood_taken, 0) /////////// // Shift Body Temp (toward Target's temp, by volume taken) @@ -90,25 +96,24 @@ blood_taken /= 3 if(!ishuman(target)) // Penalty for Non-Human Blood blood_taken /= 2 - // High level vampires get much less blood from mindless targets - else if(bloodsucker_level >= BLOODSUCKER_HIGH_LEVEL && !target.mind) - blood_taken /= 4 else if(!target?.mind) // Penalty for Mindless Blood blood_taken /= 2 - //if (!iscarbon(target)) // Penalty for Animals (they're junk food) // Apply to Volume AdjustBloodVolume(blood_taken) + total_blood_drank += blood_taken OverfeedHealing(blood_taken) // Reagents (NOT Blood!) if(target.reagents && target.reagents.total_volume) target.reagents.trans_to(owner.current, INGEST, 1) // Run transfer of 1 unit of reagent from them to me. owner.current.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, 1) // Play THIS sound for user only. The "null" is where turf would go if a location was needed. Null puts it right in their head. - total_blood_drank += blood_taken if(target.mind) // Checks if the target has a mind - if(IS_VASSAL(target)) // Checks if the target is a vassal - blood_level_gain += blood_taken / 4 - else - blood_level_gain += blood_taken + // closer it is to max, the less level up blood you get + var/blood_for_leveling = blood_taken + if(already_drunk > BLOOD_VOLUME_NORMAL) + var/max_threshold = BLOOD_VOLUME_NORMAL * 2 + var/modify_blood_gain = 1 - (already_drunk / max_threshold) + blood_for_leveling = max(blood_taken * modify_blood_gain, 0) + blood_level_gain += blood_for_leveling return blood_taken /** @@ -117,9 +122,9 @@ /// Constantly runs on Bloodsucker's LifeTick, and is increased by being in Torpor/Coffins /datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1) - // Don't heal if I'm staked or on Masquerade (+ not in a Coffin). Masqueraded Bloodsuckers in a Coffin however, will heal. + // Don't heal if I'm staked or on Masquerade. var/actual_regen = bloodsucker_regen_rate + additional_regen - if(owner.current.am_staked() || (HAS_TRAIT(owner.current, TRAIT_MASQUERADE) && !HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT))) + if(owner.current.am_staked() || (HAS_TRAIT(owner.current, TRAIT_MASQUERADE))) return FALSE // Garlic in you? No healing for you! if(HAS_TRAIT(owner.current, TRAIT_GARLIC_REAGENT)) @@ -134,17 +139,17 @@ var/bruteheal = min(bruteLoss, actual_regen) // BRUTE: Always Heal var/fireheal = 0 // BURN: Heal in Coffin while Fakedeath, or when damage above maxhealth (you can never fully heal fire) // Checks if you're in a coffin here, additionally checks for Torpor right below it. - var/amInCoffin = istype(user.loc, /obj/structure/closet/crate/coffin) + var/amInCoffin = is_valid_coffin() if (blood_over_cap > 0) costMult += round(blood_over_cap / 1000, 0.1) // effectively 1 (normal) + 0.1 for every 100 blood you are over cap - if(amInCoffin && HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT)) + if(amInCoffin && is_in_torpor()) if(HAS_TRAIT(owner.current, TRAIT_MASQUERADE) && (COOLDOWN_FINISHED(src, bloodsucker_spam_healing))) to_chat(user, span_alert("You do not heal while your Masquerade ability is active.")) COOLDOWN_START(src, bloodsucker_spam_healing, BLOODSUCKER_SPAM_MASQUERADE) return FALSE fireheal = min(getFireLoss(), actual_regen) mult *= 5 // Increase multiplier if we're sleeping in a coffin. - costMult /= 2 // Decrease cost if we're sleeping in a coffin. + costMult *= COFFIN_HEAL_COST_MULT // Decrease cost if we're sleeping in a coffin. user.extinguish_mob() user.bodytemperature = user.get_body_temp_normal() if(ishuman(user)) @@ -154,15 +159,16 @@ if(check_limbs(costMult)) return TRUE // In Torpor, but not in a Coffin? Heal faster anyways. - else if(HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT)) + else if(is_in_torpor()) var/fireloss = getFireLoss() fireheal = min(fireloss, actual_regen) / 1.2 // 20% slower than being in a coffin mult *= 3 // Heal if Damaged if((bruteheal + fireheal) && mult != 0) // Just a check? Don't heal/spend, and return. - // We have damage. Let's heal (one time) - user.adjustBruteLoss(-bruteheal * mult) // Heal BRUTE / BURN in random portions throughout the body. - user.adjustFireLoss(-fireheal * mult) + // We have damage. Let's heal (one time), and don't cost any blood if we cannot + if(!user.adjustBruteLoss(-bruteheal * mult, updating_health = FALSE) && !user.adjustFireLoss(-fireheal * mult, updating_health = FALSE)) // Heal BRUTE / BURN in random portions throughout the body. + return FALSE + user.updatehealth() AdjustBloodVolume(((bruteheal * -0.5) + (fireheal * -1)) * costMult * mult) // Costs blood to heal return TRUE @@ -173,13 +179,12 @@ var/overfireheal = user.getFireLoss_nonProsthetic() var/heal_amount = drunk / 3 if(overbruteheal > 0 && heal_amount > 0) - user.adjustBruteLoss(-heal_amount, forced=TRUE) // Heal BRUTE / BURN in random portions throughout the body; prioritising BRUTE. + user.adjustBruteLoss(-heal_amount, updating_health = FALSE, forced = TRUE) // Heal BRUTE / BURN in random portions throughout the body; prioritising BRUTE. heal_amount = (heal_amount - overbruteheal) // Removes the amount of BRUTE we've healed from the heal amount else if(overfireheal > 0 && heal_amount > 0) heal_amount /= 1.5 // Burn should be more difficult to heal - user.adjustFireLoss(-heal_amount, forced=TRUE) - else - return + user.adjustFireLoss(-heal_amount, updating_health = FALSE, forced = TRUE) + user.updatehealth() /datum/antagonist/bloodsucker/proc/check_limbs(costMult = 1) var/limb_regen_cost = 50 * -costMult @@ -193,7 +198,7 @@ var/obj/item/bodypart/missing_bodypart = user.get_bodypart(missing_limb) // 2) Limb returns Damaged missing_bodypart.brute_dam = missing_bodypart.max_damage to_chat(user, span_notice("Your flesh knits as it regrows your [missing_bodypart]!")) - playsound(user, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(user, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) return TRUE /* @@ -206,42 +211,51 @@ * * This is called on Bloodsucker's Assign, and when they end Torpor. */ -/// TODO: Separate this into smaller functions -/datum/antagonist/bloodsucker/proc/heal_vampire_organs(regenerate_heart = FALSE) +// TODO: Separate this into smaller functions +/datum/antagonist/bloodsucker/proc/heal_vampire_organs() var/mob/living/carbon/bloodsuckeruser = owner.current // please don't poison or asphyxiate the immune bloodsuckeruser.setToxLoss(0, forced = TRUE) bloodsuckeruser.setOxyLoss(0, forced = TRUE) - if(!bloodsuckeruser) + + if(QDELETED(bloodsuckeruser)) return + if(HAS_TRAIT_FROM_ONLY(bloodsuckeruser, TRAIT_HUSK, CHANGELING_DRAIN) || bloodsuckeruser.has_status_effect(/datum/status_effect/gutted)) to_chat(bloodsuckeruser, span_danger("Your immortal blood has healed your body from near-irrecoverable damage, but has used nearly all of your blood in doing so!")) AddHumanityLost(2) SetBloodVolume(min(bloodsucker_blood_volume, frenzy_enter_threshold() * 2)) bloodsuckeruser.cure_husk(CHANGELING_DRAIN) + bloodsuckeruser.cure_husk(BURN) - if(regenerate_heart || bloodsuckeruser.get_organ_slot(ORGAN_SLOT_HEART)) + for(var/datum/wound/wound as anything in bloodsuckeruser.all_wounds) + wound.remove_wound() + if(bloodsuckeruser.get_organ_slot(ORGAN_SLOT_HEART)) bloodsuckeruser.regenerate_organs(regenerate_existing = FALSE) + if(!HAS_TRAIT(bloodsuckeruser, TRAIT_MASQUERADE)) var/obj/item/organ/internal/heart/current_heart = bloodsuckeruser.get_organ_slot(ORGAN_SLOT_HEART) - current_heart.Stop() + current_heart?.Stop() + var/obj/item/organ/internal/eyes/current_eyes = bloodsuckeruser.get_organ_slot(ORGAN_SLOT_EYES) - if(current_eyes) + if(current_eyes && !(current_eyes.organ_flags & ORGAN_ROBOTIC)) current_eyes.flash_protect = max(initial(current_eyes.flash_protect) - 1, FLASH_PROTECTION_SENSITIVE) current_eyes.color_cutoffs = BLOODSUCKER_SIGHT_COLOR_CUTOFF current_eyes.sight_flags = SEE_MOBS + bloodsuckeruser.update_sight() /// Disable gutting for the chest var/obj/item/bodypart/chest/target_chest = bloodsuckeruser.get_bodypart(BODY_ZONE_CHEST) if(target_chest && !(target_chest.bodypart_flags & BODYPART_UNREMOVABLE)) target_chest.bodypart_flags |= BODYPART_UNREMOVABLE + // Sometimes bloodsuckers can get into a loop of reviving and dying, if they somehow get a new body without being revived. - if(_listen_lookup?[COMSIG_BLOODSUCKER_ON_LIFETICK] || bloodsuckeruser._listen_lookup?[COMSIG_LIVING_REVIVE]) - on_revive() if(bloodsuckeruser.stat == DEAD) - bloodsuckeruser.revive() - for(var/datum/wound/iter_wound as anything in bloodsuckeruser.all_wounds) + . = bloodsuckeruser.revive() + + for(var/datum/wound/iter_wound in bloodsuckeruser.all_wounds) iter_wound.remove_wound() + // From [powers/panacea.dm] var/list/bad_organs = list( bloodsuckeruser.get_organ_by_type(/obj/item/organ/internal/body_egg), @@ -263,26 +277,18 @@ /// FINAL DEATH /datum/antagonist/bloodsucker/proc/HandleDeath() - // Not "Alive"? - if(!owner.current) - FinalDeath() + if(QDELETED(owner.current)) + if(length(ghouls)) + free_all_ghouls() + ghouls = list() return // Fire Damage? (above double health) - if(owner.current.getFireLoss() >= owner.current.maxHealth * 2.5) - FinalDeath() - return - // Staked with a silver stake while "Temp Death" or Asleep - if(owner.current.StakeCanKillMe()) + if(owner.current.getFireLoss() >= owner.current.maxHealth * FINAL_DEATH_HEALTH_TO_BURN) // 337.5 burn with 135 maxHealth FinalDeath() return // Temporary Death? Convert to Torpor. - if(HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT) || isbrain(owner.current)) + if(is_in_torpor() || isbrain(owner.current)) return - // Won't torpor without vital organs, as this means they'd revive without a heart - if(ishuman(owner.current)) - var/mob/living/carbon/human/humie = owner.current - if(humie.dna.species.mutantheart && !owner.current.get_organ_slot(ORGAN_SLOT_HEART)) - return check_begin_torpor(TORPOR_SKIP_CHECK_ALL) /datum/antagonist/bloodsucker/proc/HandleStarving() // I am thirsty for blood! @@ -297,7 +303,7 @@ status_effect.duration = world.time + 10 SECONDS owner.current.balloon_alert(owner.current, "Frenzy ends in 10 seconds!") // BLOOD_VOLUME_BAD: [224] - Jitter - if(bloodsucker_blood_volume < BLOOD_VOLUME_BAD && prob(0.5) && !HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT) && !HAS_TRAIT(owner.current, TRAIT_MASQUERADE)) + if(bloodsucker_blood_volume < BLOOD_VOLUME_BAD && prob(0.5) && !is_in_torpor() && !HAS_TRAIT(owner.current, TRAIT_MASQUERADE)) owner.current.set_timed_status_effect(3 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE) // BLOOD_VOLUME_SURVIVE: [122] - Blur Vision if(bloodsucker_blood_volume < BLOOD_VOLUME_SURVIVE) @@ -322,6 +328,8 @@ /// Makes your blood_volume look like your bloodsucker blood, unless you're Masquerading. /datum/antagonist/bloodsucker/proc/update_blood() + if(SEND_SIGNAL(src, BLOODSUCKER_UPDATE_BLOOD) & BLOODSUCKER_UPDATE_BLOOD_DISABLED) + return if(HAS_TRAIT(owner.current, TRAIT_NOBLOOD)) return //If we're on Masquerade, we appear to have full blood, unless we are REALLY low, in which case we don't look as bad. @@ -340,37 +348,55 @@ /// Turns the bloodsucker into a wacky talking head. /datum/antagonist/bloodsucker/proc/talking_head() var/mob/living/poor_fucker = owner.current + if(QDELETED(poor_fucker)) + return // Don't do anything if we're not actually inside a brain and a head - if(!is_head(poor_fucker) || poor_fucker.stat != DEAD || !poor_fucker.can_be_revived()) + var/obj/item/bodypart/head/head = is_head(poor_fucker) + if(!head || poor_fucker.stat != DEAD || !poor_fucker.can_be_revived()) return - // Ensure that the HUD updates (We might have lost the heart at some point) - RegisterSignal(poor_fucker, COMSIG_LIVING_LIFE, PROC_REF(LifeTick), TRUE) + if(istype(poor_fucker.loc, /obj/item/organ/internal/brain)) + RegisterSignal(poor_fucker.loc, COMSIG_QDELETING, PROC_REF(on_brain_remove)) + RegisterSignal(poor_fucker.loc, COMSIG_ORGAN_BODYPART_REMOVED, PROC_REF(on_brain_remove)) + + RegisterSignal(poor_fucker, COMSIG_MOB_TRY_SPEECH, PROC_REF(allow_head_to_talk)) + RegisterSignal(poor_fucker, COMSIG_MOB_SAY, PROC_REF(shake_head_on_talk)) poor_fucker.revive() poor_fucker.stat = CONSCIOUS to_chat(poor_fucker, span_warning("Your immortal [pick(list("blood", "curse"))] keeps your head alive! Though... what will you do now?")) // No lungs to speak, let's make it spooky poor_fucker.speech_span = SPAN_PAPYRUS +/datum/antagonist/bloodsucker/proc/cleanup_talking_head(obj/item/organ/brain) + var/mob/living/poor_fucker = owner.current + if(brain) + UnregisterSignal(brain, list(COMSIG_QDELETING, COMSIG_ORGAN_BODYPART_REMOVED)) + // fucked up if this happens, but we're probably final deathed at this point + if(QDELETED(poor_fucker)) + return + UnregisterSignal(poor_fucker, list(COMSIG_MOB_TRY_SPEECH, COMSIG_MOB_SAY, COMSIG_QDELETING)) + poor_fucker.death() + poor_fucker.speech_span = initial(poor_fucker.speech_span) + +/datum/antagonist/bloodsucker/proc/on_brain_remove(obj/item/organ/brain) + SIGNAL_HANDLER + cleanup_talking_head(brain) + +/datum/antagonist/bloodsucker/proc/on_brainmob_qdel() + SIGNAL_HANDLER + if(istype(owner.current.loc, /obj/item/organ/internal/brain)) + cleanup_talking_head(owner.current.loc) + else + cleanup_talking_head() + /// Gibs the Bloodsucker, roundremoving them. /datum/antagonist/bloodsucker/proc/FinalDeath(check_organs = FALSE) SIGNAL_HANDLER // If we have no body, end here. - if(!owner.current || isbrain(owner.current)) + if(QDELETED(owner.current) || isbrain(owner.current)) return - UnregisterSignal(src, list( - COMSIG_BLOODSUCKER_ON_LIFETICK, - COMSIG_LIVING_REVIVE, - COMSIG_LIVING_LIFE, - COMSIG_LIVING_DEATH, - )) - UnregisterSignal(SSsunlight, list( - COMSIG_SOL_RANKUP_BLOODSUCKERS, - COMSIG_SOL_NEAR_START, - COMSIG_SOL_END, - COMSIG_SOL_RISE_TICK, - COMSIG_SOL_WARNING_GIVEN, - )) - free_all_vassals() + unregister_body_signals() + unregister_sol_signals() + free_all_ghouls() DisableAllPowers(forced = TRUE) if(!iscarbon(owner.current)) owner.current.gib(DROP_ITEMS) @@ -382,7 +408,7 @@ user.remove_all_embedded_objects() playsound(owner.current, 'sound/effects/tendril_destroyed.ogg', 40, TRUE) - var/unique_death = SEND_SIGNAL(src, BLOODSUCKER_FINAL_DEATH) + var/unique_death = SEND_SIGNAL(src, COMSIG_BLOODSUCKER_FINAL_DEATH) if(unique_death & DONT_DUST) return diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm index 967ef6cefa7e0..c7aabe42c5d7e 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm @@ -29,29 +29,29 @@ return possible_targets -/// Check Vassals and get their occupations -/datum/objective/bloodsucker/proc/get_vassal_occupations() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.has_antag_datum(/datum/antagonist/bloodsucker) - if(!bloodsuckerdatum || !bloodsuckerdatum.vassals.len) +/// Check Ghouls and get their occupations +/datum/objective/bloodsucker/proc/get_ghoul_occupations() + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) + if(!bloodsuckerdatum || !bloodsuckerdatum.ghouls.len) return FALSE - var/list/all_vassal_jobs = list() - var/vassal_job - for(var/datum/antagonist/vassal/bloodsucker_vassals in bloodsuckerdatum.vassals) - if(!bloodsucker_vassals || !bloodsucker_vassals.owner) // Must exist somewhere, and as a vassal. + var/list/all_ghoul_jobs = list() + var/ghoul_job + for(var/datum/antagonist/ghoul/bloodsucker_ghouls in bloodsuckerdatum.ghouls) + if(!bloodsucker_ghouls || !bloodsucker_ghouls.owner) // Must exist somewhere, and as a ghoul. continue // Mind Assigned - if(bloodsucker_vassals.owner?.assigned_role) - vassal_job = bloodsucker_vassals.owner.assigned_role + if(bloodsucker_ghouls.owner?.assigned_role) + ghoul_job = bloodsucker_ghouls.owner.assigned_role // Mob Assigned - else if(bloodsucker_vassals.owner?.current?.job) - vassal_job = SSjob.GetJob(bloodsucker_vassals.owner.current.job) + else if(bloodsucker_ghouls.owner?.current?.job) + ghoul_job = SSjob.get_job(bloodsucker_ghouls.owner.current.job) // PDA Assigned - else if(bloodsucker_vassals.owner?.current && ishuman(bloodsucker_vassals.owner.current)) - var/mob/living/carbon/human/vassal = bloodsucker_vassals.owner.current - vassal_job = SSjob.GetJob(vassal.get_assignment()) - if(vassal_job) - all_vassal_jobs += vassal_job - return all_vassal_jobs + else if(bloodsucker_ghouls.owner?.current && ishuman(bloodsucker_ghouls.owner.current)) + var/mob/living/carbon/human/ghoul = bloodsucker_ghouls.owner.current + ghoul_job = SSjob.get_job(ghoul.get_assignment()) + if(ghoul_job) + all_ghoul_jobs += ghoul_job + return all_ghoul_jobs ////////////////////////////////////////////////////////////////////////////////////// // // OBJECTIVES // // @@ -61,17 +61,17 @@ // DEFAULT OBJECTIVES // ////////////////////////////// -/datum/objective/bloodsucker/lair - name = "claimlair" +/datum/objective/bloodsucker/haven + name = "claimhaven" // EXPLANATION -/datum/objective/bloodsucker/lair/update_explanation_text() - explanation_text = "Create a lair by claiming a coffin, and protect it until the end of the shift."// Make sure to keep it safe!" +/datum/objective/bloodsucker/haven/update_explanation_text() + explanation_text = "Create a haven by claiming a coffin, and protect it until the end of the shift."// Make sure to keep it safe!" // WIN CONDITIONS? -/datum/objective/bloodsucker/lair/check_completion() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.has_antag_datum(/datum/antagonist/bloodsucker) - if(bloodsuckerdatum && bloodsuckerdatum.coffin && bloodsuckerdatum.bloodsucker_lair_area) +/datum/objective/bloodsucker/haven/check_completion() + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) + if(bloodsuckerdatum && bloodsuckerdatum.coffin && bloodsuckerdatum.bloodsucker_haven_area) return TRUE return FALSE @@ -83,42 +83,49 @@ name = "bloodsuckersurvive" explanation_text = "Survive the entire shift without succumbing to Final Death." -// WIN CONDITIONS? -// Handled by parent +/datum/objective/survive/bloodsucker/check_completion() + var/list/datum/mind/owners = get_owners() + for(var/datum/mind/mind in owners) + var/datum/antagonist/bloodsucker/vamp = IS_BLOODSUCKER(mind.current) + if(!vamp) + return FALSE + if(!vamp.considered_alive(mind)) + return FALSE + return TRUE ////////////////////////////////////////////////////////////////////////////////////// -/// Vassalize a certain person / people +/// Ghoulify a certain person / people /datum/objective/bloodsucker/conversion - name = "vassalization" + name = "ghoulization" ///////////////////////////////// -// Vassalize a head of staff +// Ghoulify a head of staff /datum/objective/bloodsucker/conversion/command - name = "vassalizationcommand" + name = "ghoulizationcommand" target_amount = 1 // EXPLANATION /datum/objective/bloodsucker/conversion/command/update_explanation_text() - explanation_text = "Guarantee a Vassal ends up as a Department Head or in a Leadership role." + explanation_text = "Guarantee a Ghoul ends up as a Department Head or in a Leadership role." // WIN CONDITIONS? /datum/objective/bloodsucker/conversion/command/check_completion() - var/list/vassal_jobs = get_vassal_occupations() - for(var/datum/job/checked_job in vassal_jobs) + var/list/ghoul_jobs = get_ghoul_occupations() + for(var/datum/job/checked_job in ghoul_jobs) if(checked_job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) return TRUE // We only need one, so we stop as soon as we get a match return FALSE ///////////////////////////////// -// Vassalize crewmates in a department +// Ghoulify crewmates in a department /datum/objective/bloodsucker/conversion/department - name = "vassalize department" + name = "ghoulify department" - ///The selected department we have to vassalize. + ///The selected department we have to ghoulify. var/datum/job_department/target_department ///List of all departments that can be selected for the objective. var/static/list/possible_departments = list( @@ -139,14 +146,14 @@ // EXPLANATION /datum/objective/bloodsucker/conversion/department/update_explanation_text() - explanation_text = "Have [target_amount] Vassal[target_amount == 1 ? "" : "s"] in the [target_department.department_name] department." + explanation_text = "Have [target_amount] Ghoul[target_amount == 1 ? "" : "s"] in the [target_department.department_name] department." return ..() // WIN CONDITIONS? /datum/objective/bloodsucker/conversion/department/check_completion() - var/list/vassal_jobs = get_vassal_occupations() + var/list/ghoul_jobs = get_ghoul_occupations() var/converted_count = 0 - for(var/datum/job/checked_job in vassal_jobs) + for(var/datum/job/checked_job in ghoul_jobs) if(checked_job.departments_bitflags & target_department.department_bitflags) converted_count++ if(converted_count >= target_amount) @@ -200,7 +207,7 @@ // WIN CONDITIONS? /datum/objective/bloodsucker/gourmand/check_completion() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.current.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) if(!bloodsuckerdatum) return FALSE var/stolen_blood = bloodsuckerdatum.total_blood_drank @@ -216,20 +223,20 @@ // CLAN OBJECTIVES // ////////////////////////////// -/// Steal the Archive of the Kindred - Nosferatu Clan objective +/// Steal the Book of Nod - Nosferatu Clan objective /datum/objective/bloodsucker/kindred - name = "steal kindred" + name = "steal the Book of Nod" // EXPLANATION /datum/objective/bloodsucker/kindred/update_explanation_text() . = ..() - explanation_text = "Ensure Nosferatu steals and keeps control over the Archive of the Kindred." + explanation_text = "A Noddist Scholar has posted a bounty on SchreckNet for a scrap of the Book of Nod located in your sector. Their advise? Read a book." // WIN CONDITIONS? /datum/objective/bloodsucker/kindred/check_completion() if(!owner.current) return FALSE - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.current.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) if(!bloodsuckerdatum) return FALSE @@ -244,16 +251,19 @@ /// Max out a Tremere Power - Tremere Clan objective /datum/objective/bloodsucker/tremere_power name = "tremerepower" + var/power_level = TREMERE_OBJECTIVE_POWER_LEVEL // EXPLANATION /datum/objective/bloodsucker/tremere_power/update_explanation_text() - explanation_text = "Upgrade a Blood Magic power to the maximum level, remember that Vassalizing gives more Ranks!" + explanation_text = "Your Regent is doubting your abilities, level some Blood Magic to [power_level] to prove them wrong! Remember that Ghoulifying gives more Ranks!" // WIN CONDITIONS? /datum/objective/bloodsucker/tremere_power/check_completion() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.has_antag_datum(/datum/antagonist/bloodsucker) - for(var/datum/action/cooldown/bloodsucker/targeted/tremere/tremere_powers in bloodsuckerdatum.powers) - if(tremere_powers.level_current >= 5) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) + if(!bloodsuckerdatum) + return FALSE + for(var/datum/action/cooldown/bloodsucker/tremere_powers in bloodsuckerdatum.powers) + if(tremere_powers.purchase_flags & TREMERE_CAN_BUY && tremere_powers.level_current >= power_level) return TRUE return FALSE @@ -266,11 +276,11 @@ // EXPLANATION /datum/objective/bloodsucker/embrace/update_explanation_text() . = ..() - explanation_text = "Use the vassal rack to Rank your Favorite Vassal up enough to become a Bloodsucker." + explanation_text = "Your Strategoi has granted you permission to embrace your favourite ghoul , use the Rack to 'level' them up." // WIN CONDITIONS? /datum/objective/bloodsucker/embrace/check_completion() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.current.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner.current) if(!bloodsuckerdatum) return FALSE for(var/datum/antagonist/bloodsucker/sired_vamp in GLOB.antagonists) @@ -311,19 +321,19 @@ ////////////////////////////// -// VASSAL OBJECTIVES // +// GHOUL OBJECTIVES // ////////////////////////////// -/datum/objective/bloodsucker/vassal +/datum/objective/bloodsucker/ghoul // EXPLANATION -/datum/objective/bloodsucker/vassal/update_explanation_text() +/datum/objective/bloodsucker/ghoul/update_explanation_text() . = ..() explanation_text = "Guarantee the success of your Master's mission!" // WIN CONDITIONS? -/datum/objective/bloodsucker/vassal/check_completion() - var/datum/antagonist/vassal/antag_datum = owner.has_antag_datum(/datum/antagonist/vassal) +/datum/objective/bloodsucker/ghoul/check_completion() + var/datum/antagonist/ghoul/antag_datum = owner.has_antag_datum(/datum/antagonist/ghoul) return antag_datum.master?.owner?.current?.stat != DEAD @@ -334,29 +344,29 @@ ////////////////////////////// // NOTE: Look up /assassinate in objective.dm for inspiration. -/// Vassalize a target. -/datum/objective/bloodsucker/vassalhim - name = "vassalhim" +/// Ghoulify a target. +/datum/objective/bloodsucker/ghoulhim + name = "ghoulhim" var/target_department_type = FALSE -/datum/objective/bloodsucker/vassalhim/New() +/datum/objective/bloodsucker/ghoulhim/New() var/list/possible_targets = return_possible_targets() find_target(possible_targets) ..() // EXPLANATION -/datum/objective/bloodsucker/vassalhim/update_explanation_text() +/datum/objective/bloodsucker/ghoulhim/update_explanation_text() . = ..() if(target?.current) - explanation_text = "Ensure [target.name], the [!target_department_type ? target.assigned_role.title : target.special_role], is Vassalized via the Persuasion Rack." + explanation_text = "Ensure [target.name], the [!target_department_type ? target.assigned_role.title : target.special_role], is Ghoulifyd via the Persuasion Rack." else explanation_text = "Free Objective" -/datum/objective/bloodsucker/vassalhim/admin_edit(mob/admin) +/datum/objective/bloodsucker/ghoulhim/admin_edit(mob/admin) admin_simple_target_pick(admin) // WIN CONDITIONS? -/datum/objective/bloodsucker/vassalhim/check_completion() - if(!target || target.has_antag_datum(/datum/antagonist/vassal)) +/datum/objective/bloodsucker/ghoulhim/check_completion() + if(!target || target.has_antag_datum(/datum/antagonist/ghoul)) return TRUE return FALSE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/procs.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/procs.dm index ee421120e0f84..2a7be156d02de 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/procs.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/procs.dm @@ -6,6 +6,7 @@ var/vamp_examine = return_vamp_examine(examiner) if(vamp_examine) examine_text += vamp_examine + SEND_SIGNAL(src, COMSIG_BLOODSUCKER_EXAMINE, source, examiner, examine_text) /datum/antagonist/bloodsucker/proc/BuyPowers(powers = list()) for(var/datum/action/cooldown/bloodsucker/power as anything in powers) @@ -15,12 +16,12 @@ /datum/antagonist/bloodsucker/proc/BuyPower(datum/action/cooldown/bloodsucker/power) for(var/datum/action/cooldown/bloodsucker/current_powers as anything in powers) if(current_powers.type == power.type) - return FALSE + return null power = new power() powers += power power.Grant(owner.current) log_uplink("[key_name(owner.current)] purchased [power].") - return TRUE + return power ///Called when a Bloodsucker loses a power: (power) /datum/antagonist/bloodsucker/proc/RemovePower(datum/action/cooldown/bloodsucker/power) @@ -40,11 +41,11 @@ return owner.current.playsound_local(null, 'modular_zubbers/sound/bloodsucker/lunge_warn.ogg', 100, FALSE, pressure_affected = FALSE) to_chat(owner.current, span_cult_bold_italic("You have broken the Masquerade!")) - to_chat(owner.current, span_warning("Bloodsucker Tip: When you break the Masquerade, you become open for termination by fellow Bloodsuckers, and your Vassals are no longer completely loyal to you, as other Bloodsuckers can steal them for themselves!")) + to_chat(owner.current, span_warning("Bloodsucker Tip: When you break the Masquerade, you become open for termination by fellow Bloodsuckers, and your Ghouls are no longer completely loyal to you, as other Bloodsuckers can steal them for themselves!")) broke_masquerade = TRUE antag_hud_name = "masquerade_broken" add_team_hud(owner.current) - SEND_GLOBAL_SIGNAL(COMSIG_BLOODSUCKER_BROKE_MASQUERADE) + SEND_GLOBAL_SIGNAL(COMSIG_BLOODSUCKER_BROKE_MASQUERADE, src) ///This is admin-only of reverting a broken masquerade, sadly it doesn't remove the Malkavian objectives yet. /datum/antagonist/bloodsucker/proc/fix_masquerade(mob/admin) @@ -72,8 +73,8 @@ to_chat(owner.current, span_notice("You have gained a rank. Join a Clan to spend it.")) return // Spend Rank Immediately? - if(!istype(owner.current.loc, /obj/structure/closet/crate/coffin)) - to_chat(owner, span_notice("You have grown more ancient! Sleep in a coffin (or put your Favorite Vassal on a persuasion rack for Ventrue) that you have claimed to thicken your blood and become more powerful.")) + if(!is_valid_coffin()) + to_chat(owner, span_notice("You have grown more ancient! Sleep in a coffin (or put your Favorite Ghoul on a persuasion rack for Ventrue) that you have claimed to thicken your blood and become more powerful.")) if(bloodsucker_level_unspent >= 2) to_chat(owner, span_announce("Bloodsucker Tip: If you cannot find or steal a coffin to use, you can build one from wood or metal.")) return @@ -99,14 +100,14 @@ ///Disables all powers, accounting for torpor /datum/antagonist/bloodsucker/proc/DisableAllPowers(forced = FALSE) for(var/datum/action/cooldown/bloodsucker/power as anything in powers) - if(forced || ((power.check_flags & BP_CANT_USE_IN_TORPOR) && HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT))) + if(forced || ((power.check_flags & BP_CANT_USE_IN_TORPOR) && is_in_torpor())) if(power.active) power.DeactivatePower() /datum/antagonist/bloodsucker/proc/SpendRank(mob/living/carbon/human/target, cost_rank = TRUE, blood_cost) if(!owner || !owner.current || !owner.current.client || (cost_rank && bloodsucker_level_unspent <= 0)) return - SEND_SIGNAL(src, BLOODSUCKER_RANK_UP, target, cost_rank, blood_cost) + SEND_SIGNAL(src, COMSIG_BLOODSUCKER_RANK_UP, target, cost_rank, blood_cost) /datum/antagonist/bloodsucker/proc/GetRank() return bloodsucker_level @@ -123,18 +124,18 @@ update_rank_hud() /** * Called when a Bloodsucker reaches Final Death - * Releases all Vassals and gives them the ex_vassal datum. + * Releases all Ghouls and gives them the ex_ghoul datum. */ -/datum/antagonist/bloodsucker/proc/free_all_vassals() - for(var/datum/antagonist/vassal/all_vassals in vassals) - // Skip over any Bloodsucker Vassals, they're too far gone to have all their stuff taken away from them - if(all_vassals.owner.has_antag_datum(/datum/antagonist/bloodsucker)) - all_vassals.owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) +/datum/antagonist/bloodsucker/proc/free_all_ghouls() + for(var/datum/antagonist/ghoul/all_ghouls in ghouls) + // Skip over any Bloodsucker Ghouls, they're too far gone to have all their stuff taken away from them + if(IS_BLOODSUCKER(all_ghouls.owner.current)) + all_ghouls.owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/ghoul_edition) continue - if(all_vassals.special_type == REVENGE_VASSAL) + if(all_ghouls.special_type == REVENGE_GHOUL || !all_ghouls.owner) continue - all_vassals.owner.add_antag_datum(/datum/antagonist/ex_vassal) - all_vassals.owner.remove_antag_datum(/datum/antagonist/vassal) + all_ghouls.owner.add_antag_datum(/datum/antagonist/ex_ghoul) + all_ghouls.owner.remove_antag_datum(/datum/antagonist/ghoul) /** * Returns a Vampire's examine strings. @@ -144,14 +145,14 @@ /datum/antagonist/bloodsucker/proc/return_vamp_examine(mob/living/viewer) if(!viewer.mind && !isobserver(viewer)) return FALSE - // Viewer is Target's Vassal? - if(!isobserver(viewer) && (viewer.mind.has_antag_datum(/datum/antagonist/vassal) in vassals)) + // Viewer is Target's Ghoul? + if(!isobserver(viewer) && (viewer.mind.has_antag_datum(/datum/antagonist/ghoul) in ghouls)) var/returnString = "\[This is your Master!\]" var/returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "bloodsucker")]" returnString += "\n" return returnIcon + returnString - // Viewer not a Vamp AND not the target's vassal? - if(!isobserver(viewer) && !viewer.mind.has_antag_datum((/datum/antagonist/bloodsucker)) && !(viewer in vassals)) + // Viewer not a Vamp AND not the target's ghoul? + if(!isobserver(viewer) && !viewer.mind.has_antag_datum((/datum/antagonist/bloodsucker)) && !(viewer in ghouls)) if(!(HAS_TRAIT(viewer.mind, TRAIT_BLOODSUCKER_HUNTER) && broke_masquerade)) return FALSE // Default String @@ -165,30 +166,42 @@ //returnString += "\n" Don't need spacers. Using . += "" in examine.dm does this on its own. return returnIcon + returnString +/datum/antagonist/bloodsucker/proc/can_gain_blood_rank(silent = TRUE, requires_blood = FALSE) + var/level_cost = get_level_cost() + var/mob/living/carbon/user = owner.current + if(blood_level_gain < level_cost) + if(!silent) + user.balloon_alert(user, "not enough blood thickening points!") + return FALSE + if(requires_blood && bloodsucker_blood_volume < level_cost) + if(!silent) + user.balloon_alert(user, "not enough blood!") + return FALSE + return TRUE + // Blood level gain is used to give Bloodsuckers more levels if they are being agressive and drinking from real, sentient people. // The maximum blood that counts towards this -/datum/antagonist/bloodsucker/proc/blood_level_gain() +/datum/antagonist/bloodsucker/proc/blood_level_gain(silent = TRUE, requires_blood = FALSE) var/level_cost = get_level_cost() - if(blood_level_gain >= level_cost && bloodsucker_blood_volume >= level_cost) // Checks if we have drunk enough blood from the living to allow us to gain a level up as well as checking if we have enough blood to actually use on the level up - switch(tgui_alert(owner.current, "You have drunk enough blood from the living to thicken your blood, this will cost you [level_cost] blood and give you another level", "Thicken your blood?.", list("Yes", "No"))) //asks user if they want to spend their blood on a level - if("Yes") - AdjustUnspentRank(1) // gives level - blood_level_gain -= level_cost // Subtracts the cost from the pool of drunk blood + if(can_gain_blood_rank(silent, requires_blood)) // Checks if we have drunk enough blood from the living to allow us to gain a level up as well as checking if we have enough blood to actually use on the level up + var/input = tgui_alert(owner.current, "You have drunk enough blood from the living to thicken your blood, this will cost you [level_cost] blood and give you another level", "Thicken your blood?.", list("Yes", "No")) //asks user if they want to spend their blood on a level + if(input == "Yes") + AdjustUnspentRank(1) // gives level + blood_level_gain -= level_cost // Subtracts the cost from the pool of drunk blood + if(requires_blood) AdjustBloodVolume(-level_cost) // Subtracts the cost from the bloodsucker's actual blood - blood_level_gain_amount += 1 // Increments the variable that makes future levels more expensive + return TRUE + return FALSE /datum/antagonist/bloodsucker/proc/get_level_cost() - var/level_cost = (0.3 + (0.05 * blood_level_gain_amount)) - level_cost = min(level_cost, BLOOD_LEVEL_GAIN_MAX) - level_cost = max_blood_volume * level_cost - return level_cost - + var/percentage_needed = my_clan ? my_clan.level_cost : BLOODSUCKER_LEVELUP_PERCENTAGE + return max_blood_volume * percentage_needed -/datum/antagonist/bloodsucker/proc/max_vassals() - return bloodsucker_level +/datum/antagonist/bloodsucker/proc/max_ghouls() + return round(bloodsucker_level * 0.5) -/datum/antagonist/bloodsucker/proc/free_vassal_slots() - return max(max_vassals() - length(vassals), 0) +/datum/antagonist/bloodsucker/proc/free_ghoul_slots() + return max(max_ghouls() - length(ghouls), 0) /datum/antagonist/bloodsucker/proc/frenzy_enter_threshold() return FRENZY_THRESHOLD_ENTER + (humanity_lost * 10) @@ -196,58 +209,16 @@ /datum/antagonist/bloodsucker/proc/frenzy_exit_threshold() return FRENZY_THRESHOLD_EXIT + (humanity_lost * 10) -/datum/antagonist/bloodsucker/proc/add_signals_to_heart(mob/living/carbon/human/current_mob) - if(heart?.resolve()) - remove_signals_from_heart(current_mob) - var/organ = current_mob.get_organ_slot(ORGAN_SLOT_HEART) - heart = WEAKREF(organ) - RegisterSignal(organ, COMSIG_ORGAN_REMOVED, PROC_REF(on_organ_removal)) - RegisterSignal(organ, COMSIG_ORGAN_BEING_REPLACED, PROC_REF(before_organ_replace)) - -/datum/antagonist/bloodsucker/proc/remove_signals_from_heart(mob/living/carbon/human/current_mob) - var/organ = heart.resolve() - if(!organ) - return - UnregisterSignal(organ, COMSIG_ORGAN_REMOVED) - UnregisterSignal(organ, COMSIG_ORGAN_BEING_REPLACED) - heart = null - -/datum/antagonist/bloodsucker/proc/on_organ_removal(obj/item/organ/organ, mob/living/carbon/old_owner) +/datum/antagonist/bloodsucker/proc/on_organ_removal(mob/living/carbon/old_owner, obj/item/organ/organ, special) SIGNAL_HANDLER - if(old_owner.get_organ_slot(ORGAN_SLOT_HEART) || organ?.slot != ORGAN_SLOT_HEART || !old_owner.dna.species.mutantheart) + if(old_owner?.get_organ_slot(ORGAN_SLOT_HEART) || organ?.slot != ORGAN_SLOT_HEART || !old_owner?.dna?.species.mutantheart) return - remove_signals_from_heart(old_owner) - // You don't run bloodsucker life without a heart or brain - RegisterSignal(old_owner, COMSIG_ENTER_COFFIN, PROC_REF(regain_heart)) - UnregisterSignal(old_owner, COMSIG_LIVING_LIFE) DisableAllPowers(TRUE) if(HAS_TRAIT_FROM_ONLY(old_owner, TRAIT_NODEATH, BLOODSUCKER_TRAIT)) torpor_end(TRUE) - to_chat(old_owner, span_userdanger("You have lost your [organ?.slot ? organ.slot : "heart"]!")) + to_chat(old_owner, span_userdanger("You have lost your [organ.slot]!")) to_chat(old_owner, span_warning("This means you will no longer enter torpor nor revive from death, and you will no longer heal any damage, nor can you use your abilities.")) -/datum/antagonist/bloodsucker/proc/on_organ_gain(mob/living/carbon/human/current_mob, obj/item/organ/replacement) - SIGNAL_HANDLER - if(replacement.slot != ORGAN_SLOT_HEART) - return - // Shit might get really fucked up. Let's try to fix things if it does - if(current_mob != owner.current) - UnregisterSignal(current_mob, COMSIG_CARBON_GAIN_ORGAN) - RegisterSignal(owner.current, COMSIG_CARBON_GAIN_ORGAN) - add_signals_to_heart(owner.current) - RegisterSignal(owner.current, COMSIG_LIVING_LIFE, PROC_REF(LifeTick), TRUE) - CRASH("What the fuck, somehow called on_organ_gain signal on [src] without current_mob being the antag datum's owner?") - UnregisterSignal(current_mob, COMSIG_ENTER_COFFIN) - RegisterSignal(current_mob, COMSIG_LIVING_LIFE, PROC_REF(LifeTick), TRUE) // overriding here due to the fact this can without removing the signal due to before_organ_replace() - add_signals_to_heart(current_mob) - -/// This handles regen_organs replacing organs, without this the bloodsucker would die for a moment due to their heart being removed for a moment -/datum/antagonist/bloodsucker/proc/before_organ_replace(obj/item/organ/old_organ, obj/item/organ/new_organ) - SIGNAL_HANDLER - if(new_organ.slot != ORGAN_SLOT_HEART) - return - remove_signals_from_heart(owner.current) - /// checks if we're a brainmob inside a brain & the brain is inside a head /datum/antagonist/bloodsucker/proc/is_head(mob/living/poor_fucker) if(!istype(poor_fucker?.loc, /obj/item/organ/internal/brain)) @@ -273,9 +244,152 @@ return SetBloodVolume(blood) -/datum/antagonist/bloodsucker/proc/regain_heart(mob/coffin_dweller, obj/structure/closet/crate/coffin/coffin, mob/user) - SIGNAL_HANDLER +/datum/antagonist/bloodsucker/proc/admin_rankup(mob/admin) + to_chat(admin, span_notice("[owner.current] has been given a free level")) + RankUp() + +/datum/antagonist/bloodsucker/proc/admin_give_power(mob/admin) + var/power_type = tgui_input_list(admin, "What power to give [owner.current]?", "Might is right.", all_bloodsucker_powers) + if(!power_type) + return + var/datum/action/cooldown/bloodsucker/power = BuyPower(power_type) + power.upgrade_power() + +/datum/antagonist/bloodsucker/proc/admin_remove_power(mob/admin) + var/datum/action/cooldown/bloodsucker/power = tgui_input_list(admin, "What power to remove from [owner.current]?", "Might is right.", powers) + if(!power) + return + RemovePower(power) + +/datum/antagonist/bloodsucker/proc/admin_set_power_level(mob/admin) + var/list/valid_powers = list() + for(var/datum/action/cooldown/bloodsucker/power as anything in powers) + if(power.purchase_flags & BLOODSUCKER_DEFAULT_POWER) + continue + valid_powers += power + var/datum/action/cooldown/bloodsucker/power = tgui_input_list(admin, "What power to set the level of for [owner.current]?", "Might is right.", valid_powers) + if(!power) + return + var/level = tgui_input_number(admin, "What level to set [power] to?", "Might is right.", power.level_current, 30, 0) + if(level == null) + return + power.level_current = level + power.on_power_upgrade() + +/datum/antagonist/bloodsucker/proc/regain_heart(mob/living/carbon/target, obj/structure/closet/crate/coffin/coffin) var/obj/item/organ/heart = locate(/obj/item/organ/internal/heart) in coffin.contents - if(heart && !coffin_dweller.get_organ_slot(ORGAN_SLOT_HEART)) + if(heart && !target.get_organ_slot(ORGAN_SLOT_HEART) && heart.Insert(target)) to_chat(span_warning("You have regained your heart!")) - heart.Insert(coffin_dweller) + +/datum/antagonist/bloodsucker/proc/allow_head_to_talk(mob/speaker, message, ignore_spam, forced) + SIGNAL_HANDLER + if(!is_head(speaker) || speaker.stat >= UNCONSCIOUS) + return + return COMPONENT_IGNORE_CAN_SPEAK + +/datum/antagonist/bloodsucker/proc/shake_head_on_talk(mob/speaker, speech_args) + SIGNAL_HANDLER + var/obj/head = is_head(speaker) + if(!head) + return + var/animation_time = max(2, length_char(speech_args[SPEECH_MESSAGE]) * 0.5) + head.Shake(duration = animation_time) + +/datum/antagonist/bloodsucker/proc/stake_can_kill() + if(owner.current.IsSleeping() || owner.current.stat >= UNCONSCIOUS || is_in_torpor()) + for(var/stake in get_stakes()) + var/obj/item/stake/killin_stake = stake + if(killin_stake?.kills_blodsuckers) + return TRUE + return FALSE + +/datum/antagonist/bloodsucker/proc/am_staked() + var/obj/item/bodypart/chosen_bodypart = owner.current.get_bodypart(BODY_ZONE_CHEST) + if(!chosen_bodypart) + return FALSE + var/obj/item/stake/stake = locate() in chosen_bodypart.embedded_objects + return stake + +/datum/antagonist/bloodsucker/proc/get_stakes() + var/obj/item/bodypart/chosen_bodypart = owner.current.get_bodypart(BODY_ZONE_CHEST) + if(!chosen_bodypart) + return FALSE + var/list/stakes = list() + for(var/obj/item/embedded_stake in chosen_bodypart.embedded_objects) + if(istype(embedded_stake, /obj/item/stake)) + stakes += list(embedded_stake) + return stakes + +/datum/antagonist/bloodsucker/proc/on_staked(atom/target, forced) + SIGNAL_HANDLER + if(stake_can_kill()) + FinalDeath() + else + to_chat(target, span_userdanger("You have been staked! Your powers are useless, your death forever, while it remains in place.")) + target.balloon_alert(target, "you have been staked!") + +/// is it something that is close enough to a coffin to let us heal/level up in it? +/datum/antagonist/bloodsucker/proc/is_valid_coffin() + if(istype(owner.current.loc, /obj/structure/closet/crate/coffin)) + return TRUE + // if(istype(owner.current.loc, /obj/structure/closet/crate/grave)) + // return TRUE + return FALSE + +/datum/antagonist/bloodsucker/proc/on_enter_coffin(mob/living/carbon/target, obj/structure/closet/crate/coffin/coffin, mob/living/carbon/user) + SIGNAL_HANDLER + check_limbs(COFFIN_HEAL_COST_MULT) + regain_heart(target, coffin) + if(!check_begin_torpor()) + heal_vampire_organs() + if(user == owner.current && (user in coffin)) + if(can_claim_coffin(coffin, get_area(coffin))) + INVOKE_ASYNC(src, PROC_REF(try_claim_coffin), coffin) + else + INVOKE_ASYNC(src, PROC_REF(try_coffin_level_up)) + +/datum/antagonist/bloodsucker/proc/try_claim_coffin(obj/structure/closet/crate/coffin/coffin) + if(coffin.prompt_coffin_claim(src)) + try_coffin_level_up() + +/datum/antagonist/bloodsucker/proc/try_coffin_level_up() + var/mob/living/carbon/user = owner.current + //Level up if possible. + if(!my_clan) + user.balloon_alert(user, "enter a clan!") + to_chat(user, span_notice("You must enter a Clan to rank up. Do it in the antag menu, which you can see by pressing the action button in the top left.")) + else if(!frenzied) + if(GetUnspentRank() < 1) + blood_level_gain() + // Level ups cost 30% of your max blood volume, which scales with your rank. + SpendRank() + +/datum/antagonist/bloodsucker/proc/on_owner_deletion(mob/living/deleted_mob) + SIGNAL_HANDLER + free_all_ghouls() + if(deleted_mob != owner.current) + return + if(is_head(deleted_mob)) + on_brainmob_qdel() + + +/datum/antagonist/bloodsucker/proc/unregister_body_signals() + UnregisterSignal(owner.current, list( + COMSIG_LIVING_LIFE, + COMSIG_ATOM_EXAMINE, + COMSIG_LIVING_DEATH, + COMSIG_SPECIES_GAIN, + COMSIG_QDELETING, + COMSIG_ENTER_COFFIN, + COMSIG_MOB_STAKED, + COMSIG_CARBON_LOSE_ORGAN + )) + +/datum/antagonist/bloodsucker/proc/unregister_sol_signals() + UnregisterSignal(SSsunlight, list( + COMSIG_SOL_RANKUP_BLOODSUCKERS, + COMSIG_SOL_NEAR_START, + COMSIG_SOL_END, + COMSIG_SOL_RISE_TICK, + COMSIG_SOL_WARNING_GIVEN + )) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/shaded_bloodsucker.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/shaded_bloodsucker.dm index 265ef4cab02c4..4f9d905cafa86 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/shaded_bloodsucker.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/shaded_bloodsucker.dm @@ -1,23 +1,5 @@ ///a malkavian bloodsucker that has entered final death. does nothing, other than signify they are dead -/datum/antagonist/shaded_bloodsucker - name = "\improper Shaded Bloodsucker" - antagpanel_category = "Bloodsucker" - show_in_roundend = FALSE - job_rank = ROLE_BLOODSUCKER - antag_hud_name = "bloodsucker" /obj/item/soulstone/bloodsucker theme = THEME_WIZARD - required_role = /datum/antagonist/vassal //vassals can free their master - -/obj/item/soulstone/bloodsucker/init_shade(mob/living/carbon/human/victim, mob/user, message_user = FALSE, mob/shade_controller) - . = ..() - for(var/mob/shades in contents) - shades.mind.add_antag_datum(/datum/antagonist/shaded_bloodsucker) - -/obj/item/soulstone/bloodsucker/capture_soul(mob/living/carbon/victim, mob/user, forced = FALSE, datum/antagonist/bloodsucker/bloodsuckerdatum) - . = ..() - for(var/mob/shades in contents) - var/datum/antagonist/shaded_bloodsucker/shaded_datum = shades.mind.has_antag_datum(/datum/antagonist/shaded_bloodsucker) - shaded_datum.objectives = bloodsuckerdatum.objectives - + required_role = null diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/sol.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/sol.dm index d4cf5ed2ff714..b8719eafef354 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/sol.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/sol.dm @@ -8,12 +8,19 @@ /datum/antagonist/bloodsucker/proc/sol_rank_up(atom/source) SIGNAL_HANDLER + // Bloodsuckers above BLOODSUCKER_HIGH_LEVEL must drink blood to level up. + if(sol_levels == 1) // just in case a bloodsucker is stuck at this level + // very important info here, so we use span_danger + to_chat(owner.current, span_danger("Sol's foul gaze no longer grants you power. You must drink blood to advance further.")) + if(sol_levels <= 0) + return + sol_levels-- INVOKE_ASYNC(src, PROC_REF(RankUp)) ///Called when Sol is near starting. /datum/antagonist/bloodsucker/proc/sol_near_start(atom/source) SIGNAL_HANDLER - if(bloodsucker_lair_area && !(locate(/datum/action/cooldown/bloodsucker/gohome) in powers)) + if(bloodsucker_haven_area && !(locate(/datum/action/cooldown/bloodsucker/gohome) in powers)) BuyPower(/datum/action/cooldown/bloodsucker/gohome) ///Called when Sol first ends. @@ -47,11 +54,11 @@ owner.current.add_mood_event("vampsleep", /datum/mood_event/daylight_sun_scorched) return - if(istype(owner.current.loc, /obj/structure/closet/crate/coffin)) // Coffins offer the BEST protection + if(is_valid_coffin()) // Coffins offer the BEST protection if(owner.current.am_staked() && COOLDOWN_FINISHED(src, bloodsucker_spam_sol_burn)) to_chat(owner.current, span_userdanger("You are staked you will keep burning until it is removed! Remove the offending weapon from your heart before sleeping.")) COOLDOWN_START(src, bloodsucker_spam_sol_burn, BLOODSUCKER_SPAM_SOL) //This should happen twice per Sol - if(!HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT)) + if(!is_in_torpor()) check_begin_torpor(TORPOR_SKIP_CHECK_ALL) owner.current.add_mood_event("vampsleep", /datum/mood_event/coffinsleep) return @@ -63,7 +70,7 @@ owner.current.updatehealth() owner.current.add_mood_event("vampsleep", /datum/mood_event/daylight_bad_sleep) -/datum/antagonist/bloodsucker/proc/give_warning(atom/source, danger_level, vampire_warning_message, vassal_warning_message) +/datum/antagonist/bloodsucker/proc/give_warning(atom/source, danger_level, vampire_warning_message, ghoul_warning_message) SIGNAL_HANDLER SSsunlight.warn_notify(owner.current, danger_level, vampire_warning_message) @@ -76,75 +83,90 @@ * * Torpor is triggered by: * - Being in a Coffin while Sol is on, dealt with by Sol - * - Entering a Coffin with more than 10 combined Brute/Burn damage, dealt with by /closet/crate/coffin/close() [bloodsucker_coffin.dm] + * - Entering a Coffin with more than 10 combined Brute/Burn damage, dealt with by /datum/antagonist/bloodsucker/on_enter_coffin() [procs.dm] * - Death, dealt with by /HandleDeath() * Torpor is ended by: - * - Having less than 10 Brute damage while OUTSIDE of your Coffin while it isnt Sol. - * - Having less than 10 Brute & Burn Combined while INSIDE of your Coffin while it isnt Sol. - * - Sol being over, dealt with by /sunlight/process() [bloodsucker_daylight.dm] + * - Having less than maxHealth * 0.8 damage while OUTSIDE of your Coffin while it isnt Sol. + * - Having less than 10 Damage Combined while INSIDE of your Coffin while it isnt Sol. + * - Sol being over, dealt with by /datum/controller/subsystem/processing/sunlight/process() [sol_subsystem.dm] */ /datum/antagonist/bloodsucker/proc/check_begin_torpor(SkipChecks = NONE) var/mob/living/carbon/user = owner.current /// Are we entering Torpor via Sol/Death? Then entering it isnt optional! + // do not skip checking organs for torpor + if(ishuman(user)) + var/mob/living/carbon/human/humie = user + if(humie.dna.species.mutantheart && !user.get_organ_slot(ORGAN_SLOT_HEART)) + return FALSE if(SkipChecks & TORPOR_SKIP_CHECK_ALL) if(COOLDOWN_FINISHED(src, bloodsucker_spam_torpor)) to_chat(user, span_danger("Your immortal body will not yet relinquish your soul to the abyss. You enter Torpor.")) torpor_begin(TRUE) - return + return TRUE /// Prevent Torpor whilst frenzied. if(!(SkipChecks & TORPOR_SKIP_CHECK_FRENZY) && (frenzied || (IS_DEAD_OR_INCAP(user) && bloodsucker_blood_volume == 0))) to_chat(user, span_userdanger("Your frenzy prevents you from entering torpor!")) - return + return FALSE // sometimes you might incur these damage types when you really, should not, important to check for it here so we can heal it later var/total_damage = getBruteLoss() + getFireLoss() + user.getToxLoss() + user.getOxyLoss() /// Checks - Not daylight & Has more than 10 Brute/Burn & not already in Torpor - if(SkipChecks & TORPOR_SKIP_CHECK_DAMAGE || !SSsunlight.sunlight_active && total_damage >= 10 && !HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_NODEATH, BLOODSUCKER_TRAIT)) + if(SkipChecks & TORPOR_SKIP_CHECK_DAMAGE || !SSsunlight.sunlight_active && total_damage >= 10 && !is_in_torpor()) torpor_begin() + return TRUE + return FALSE + +/datum/antagonist/bloodsucker/proc/is_in_torpor() + return owner.current && HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_TORPOR, BLOODSUCKER_TRAIT) -/datum/antagonist/bloodsucker/proc/check_end_torpor() +/datum/antagonist/bloodsucker/proc/check_end_torpor(early_end = FALSE) var/mob/living/carbon/user = owner.current var/total_brute = getBruteLoss() var/total_burn = getFireLoss() // for waking up we ignore all other damage types so we don't get stuck var/total_damage = total_brute + total_burn + var/is_in_coffin = is_valid_coffin() if(total_burn >= user.maxHealth * 2) return FALSE - if(SSsunlight.sunlight_active) + if(SSsunlight.sunlight_active && is_in_coffin) return FALSE - if(bloodsucker_blood_volume == 0 || owner.current.am_staked() || HAS_TRAIT(owner.current, TRAIT_GARLIC_REAGENT)) + if(bloodsucker_blood_volume == 0 || early_end || (SSsunlight.sunlight_active && !is_in_coffin)) // If you're frenzying, you need a bit more health to actually have a chance to do something if(frenzied && total_damage >= user.maxHealth) return FALSE torpor_end() // You are in a Coffin, so instead we'll check TOTAL damage, here. - if(istype(user.loc, /obj/structure/closet/crate/coffin)) + var/damage_to_revive = owner.current.maxHealth * 0.8 + if(is_valid_coffin()) if(total_damage <= 10) torpor_end() else - if(total_damage <= 10) + if(total_damage <= damage_to_revive) torpor_end() return TRUE -/datum/antagonist/bloodsucker/proc/torpor_begin(silent = FALSE) +/datum/antagonist/bloodsucker/proc/torpor_begin(silent = FALSE) // slow down bucko if(!COOLDOWN_FINISHED(src, bloodsucker_spam_torpor)) return if(!silent) to_chat(owner.current, span_notice("You enter the horrible slumber of deathless Torpor. You will heal until you are renewed.")) - // Force them to go to sleep - REMOVE_TRAIT(owner.current, TRAIT_SLEEPIMMUNE, BLOODSUCKER_TRAIT) + // Force them to go to "sleep" + if(!is_valid_coffin()) + owner.current.death() + else + owner.current.add_traits(list(TRAIT_FAKEDEATH, TRAIT_DEATHCOMA), BLOODSUCKER_TRAIT) // Without this, you'll just keep dying while you recover. - owner.current.add_traits(list(TRAIT_NODEATH, TRAIT_FAKEDEATH, TRAIT_DEATHCOMA, TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE), BLOODSUCKER_TRAIT) + owner.current.add_traits(list(TRAIT_TORPOR, TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE, TRAIT_DEATHCOMA), BLOODSUCKER_TRAIT) owner.current.do_jitter_animation(2) // Disable ALL Powers DisableAllPowers() -/datum/antagonist/bloodsucker/proc/torpor_end(quiet = FALSE) - if(quiet) - owner.current.grab_ghost() - to_chat(owner.current, span_warning("You have recovered from Torpor.")) - owner.current.remove_traits(list(TRAIT_NODEATH, TRAIT_FAKEDEATH, TRAIT_DEATHCOMA, TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE), BLOODSUCKER_TRAIT) - if(!HAS_TRAIT_FROM_ONLY(owner.current, TRAIT_MASQUERADE, BLOODSUCKER_TRAIT)) - ADD_TRAIT(owner.current, TRAIT_SLEEPIMMUNE, BLOODSUCKER_TRAIT) +/datum/antagonist/bloodsucker/proc/torpor_end(message = FALSE) + if(!owner.current) + return + owner.current.grab_ghost() + owner.current.remove_traits(list(TRAIT_TORPOR, TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE, TRAIT_FAKEDEATH, TRAIT_DEATHCOMA), BLOODSUCKER_TRAIT) heal_vampire_organs() - SEND_SIGNAL(src, BLOODSUCKER_EXIT_TORPOR) + if(message) + to_chat(owner.current, span_warning("You have recovered from Torpor.")) + SEND_SIGNAL(src, COMSIG_BLOODSUCKER_EXIT_TORPOR) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm index 04f0616e10c7d..0a8232b82120a 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm @@ -11,9 +11,9 @@ var/name = CLAN_NONE ///Description of what the clan is, given when joining and through your antag UI. var/description = "The Caitiff is as basic as you can get with Bloodsuckers. \n\ - Entirely Clan-less, they are blissfully unaware of who they really are. \n\ + Entirely without the help of a formal Clan, they are blissfully unaware of who they really are. \n\ No additional abilities is gained, nothing is lost, if you want a plain Bloodsucker, this is it. \n\ - The Favorite Vassal will gain the Brawn ability, to help in combat." + The Favorite Ghoul will gain the Brawn ability, to help in combat." ///The clan objective that is required to greentext. var/datum/objective/bloodsucker/clan_objective ///The icon of the radial icon to join this clan. @@ -29,38 +29,41 @@ var/blood_drink_type = BLOODSUCKER_DRINK_NORMAL /// How much stamina armor we get in frenzy var/frenzy_stamina_mod = 0.4 + var/buy_power_flags = BLOODSUCKER_CAN_BUY + // what percentage of blood you need to spend to level up, divided by 100 + var/level_cost = BLOODSUCKER_LEVELUP_PERCENTAGE /datum/bloodsucker_clan/New(datum/antagonist/bloodsucker/owner_datum) . = ..() src.bloodsuckerdatum = owner_datum RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_ON_LIFETICK, PROC_REF(handle_clan_life)) - RegisterSignal(bloodsuckerdatum, BLOODSUCKER_RANK_UP, PROC_REF(on_spend_rank)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_RANK_UP, PROC_REF(on_spend_rank)) - RegisterSignal(bloodsuckerdatum, BLOODSUCKER_INTERACT_WITH_VASSAL, PROC_REF(on_interact_with_vassal)) - RegisterSignal(bloodsuckerdatum, BLOODSUCKER_MAKE_FAVORITE, PROC_REF(favorite_vassal_gain)) - RegisterSignal(bloodsuckerdatum, BLOODSUCKER_LOOSE_FAVORITE, PROC_REF(favorite_vassal_loss)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_INTERACT_WITH_GHOUL, PROC_REF(on_interact_with_ghoul)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_MAKE_FAVORITE, PROC_REF(favorite_ghoul_gain)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_LOOSE_FAVORITE, PROC_REF(favorite_ghoul_loss)) - RegisterSignal(bloodsuckerdatum, BLOODSUCKER_MADE_VASSAL, PROC_REF(on_vassal_made)) - RegisterSignal(bloodsuckerdatum, BLOODSUCKER_EXIT_TORPOR, PROC_REF(on_exit_torpor)) - RegisterSignal(bloodsuckerdatum, BLOODSUCKER_FINAL_DEATH, PROC_REF(on_final_death)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_MADE_GHOUL, PROC_REF(on_ghoul_made)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_EXIT_TORPOR, PROC_REF(on_exit_torpor)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_FINAL_DEATH, PROC_REF(on_final_death)) - RegisterSignal(bloodsuckerdatum, BLOODSUCKER_ENTERS_FRENZY, PROC_REF(on_enter_frenzy)) - RegisterSignal(bloodsuckerdatum, BLOODSUCKER_EXITS_FRENZY, PROC_REF(on_exit_frenzy)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_ENTERS_FRENZY, PROC_REF(on_enter_frenzy)) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_EXITS_FRENZY, PROC_REF(on_exit_frenzy)) give_clan_objective() /datum/bloodsucker_clan/Destroy(force) UnregisterSignal(bloodsuckerdatum, list( COMSIG_BLOODSUCKER_ON_LIFETICK, - BLOODSUCKER_RANK_UP, - BLOODSUCKER_INTERACT_WITH_VASSAL, - BLOODSUCKER_MAKE_FAVORITE, - BLOODSUCKER_MADE_VASSAL, - BLOODSUCKER_EXIT_TORPOR, - BLOODSUCKER_FINAL_DEATH, - BLOODSUCKER_ENTERS_FRENZY, - BLOODSUCKER_EXITS_FRENZY, + COMSIG_BLOODSUCKER_RANK_UP, + COMSIG_BLOODSUCKER_INTERACT_WITH_GHOUL, + COMSIG_BLOODSUCKER_MAKE_FAVORITE, + COMSIG_BLOODSUCKER_MADE_GHOUL, + COMSIG_BLOODSUCKER_EXIT_TORPOR, + COMSIG_BLOODSUCKER_FINAL_DEATH, + COMSIG_BLOODSUCKER_ENTERS_FRENZY, + COMSIG_BLOODSUCKER_EXITS_FRENZY, )) remove_clan_objective() bloodsuckerdatum = null @@ -122,13 +125,13 @@ SIGNAL_HANDLER /** - * Called when a Bloodsucker successfully Vassalizes someone. + * Called when a Bloodsucker successfully Ghoulizes someone. * args: * bloodsuckerdatum - the antagonist datum of the Bloodsucker running this. */ -/datum/bloodsucker_clan/proc/on_vassal_made(datum/antagonist/bloodsucker/source, mob/living/user, mob/living/target) +/datum/bloodsucker_clan/proc/on_ghoul_made(datum/antagonist/bloodsucker/source, mob/living/user, mob/living/target) SIGNAL_HANDLER - user.playsound_local(null, 'sound/effects/explosion_distant.ogg', 40, TRUE) + user.playsound_local(null, 'sound/effects/explosion/explosion_distant.ogg', 40, TRUE) target.playsound_local(null, 'sound/effects/singlebeat.ogg', 40, TRUE) target.set_timed_status_effect(15 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE) INVOKE_ASYNC(target, TYPE_PROC_REF(/mob, emote), "laugh") @@ -137,57 +140,68 @@ * Called when a Bloodsucker successfully starts spending their Rank * args: * bloodsuckerdatum - the antagonist datum of the Bloodsucker running this. - * target - The Vassal (if any) we are upgrading. + * target - The Ghoul (if any) we are upgrading. * cost_rank - TRUE/FALSE on whether this will cost us a rank when we go through with it. * blood_cost - A number saying how much it costs to rank up. */ -/datum/bloodsucker_clan/proc/on_spend_rank(datum/antagonist/bloodsucker/source, mob/living/carbon/target, cost_rank = TRUE, blood_cost, force) +/datum/bloodsucker_clan/proc/on_spend_rank(datum/antagonist/bloodsucker/source, mob/living/carbon/human/target, cost_rank = TRUE, blood_cost, force) SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(spend_rank), bloodsuckerdatum, target, cost_rank, blood_cost) + INVOKE_ASYNC(src, PROC_REF(spend_rank), bloodsuckerdatum, cost_rank, blood_cost) + +/datum/bloodsucker_clan/proc/spend_rank(datum/antagonist/bloodsucker/source, cost_rank = TRUE, blood_cost, requires_coffin = TRUE) + var/list/options = list_available_powers() + if(length(options)) + var/datum/action/cooldown/bloodsucker/choice = choose_powers( + "You have the opportunity to grow more ancient. [blood_cost > 0 ? " Spend [round(blood_cost, 1)] blood to advance your rank" : ""]", + "Your Blood Thickens...", + options + ) + if(!is_valid_choice(choice, cost_rank, blood_cost, requires_coffin)) + return FALSE + // Good to go - Buy Power! + purchase_choice(source, choice) + level_message(initial(choice.name)) -/datum/bloodsucker_clan/proc/spend_rank(datum/antagonist/bloodsucker/source, mob/living/carbon/target, cost_rank = TRUE, blood_cost) - // Purchase Power Prompt - var/list/options = list() - for(var/datum/action/cooldown/bloodsucker/power as anything in bloodsuckerdatum.all_bloodsucker_powers) - if(initial(power.purchase_flags) & BLOODSUCKER_CAN_BUY && !(locate(power) in bloodsuckerdatum.powers)) - options[initial(power.name)] = power + return finalize_spend_rank(bloodsuckerdatum, cost_rank, blood_cost) + +/datum/bloodsucker_clan/proc/level_message(power_name) var/mob/living/carbon/human/human_user = bloodsuckerdatum.owner.current - if(options.len < 1) - to_chat(bloodsuckerdatum.owner.current, span_notice("You grow more ancient by the night!")) - else - // Give them the UI to purchase a power. - var/choice = tgui_input_list(human_user, "You have the opportunity to grow more ancient.[blood_cost > 0 ? " Spend [round(blood_cost, 1)] blood to advance your rank" : ""]", "Your Blood Thickens...", options) - // Prevent Bloodsuckers from closing/reopning their coffin to spam Levels. - if(cost_rank && bloodsuckerdatum.GetUnspentRank() <= 0) - return - if(blood_cost && bloodsuckerdatum.GetBloodVolume() < blood_cost) - human_user.balloon_alert(human_user, "not enough blood!") - to_chat(human_user, span_notice("You need at the very least [blood_cost] blood to thicken your blood.")) - return - // Did you choose a power? - if(!choice || !options[choice]) - to_chat(human_user, span_notice("You prevent your blood from thickening just yet, but you may try again later.")) - return - // Prevent Bloodsuckers from closing/reopning their coffin to spam Levels. - if(locate(options[choice]) in bloodsuckerdatum.powers) - to_chat(human_user, span_notice("You prevent your blood from thickening just yet, but you may try again later.")) - return - // Prevent Bloodsuckers from purchasing a power while outside of their Coffin. - if(!istype(human_user.loc, /obj/structure/closet/crate/coffin)) - to_chat(human_user, span_warning("You must be in your Coffin to purchase Powers.")) - return + human_user.balloon_alert(human_user, "learned [power_name]!") + to_chat(human_user, span_notice("You have learned how to use [power_name]!")) - // Good to go - Buy Power! - var/datum/action/cooldown/bloodsucker/purchased_power = options[choice] - bloodsuckerdatum.BuyPower(purchased_power) - human_user.balloon_alert(human_user, "learned [choice]!") - to_chat(human_user, span_notice("You have learned how to use [choice]!")) +/datum/bloodsucker_clan/proc/choose_powers(message, title, options = list()) + var/mob/living/carbon/human/human_user = bloodsuckerdatum.owner.current + if(!length(options)) + return FALSE - finalize_spend_rank(bloodsuckerdatum, cost_rank, blood_cost) + var/choice = tgui_input_list(human_user, message, title, options) + return options[choice] + +/datum/bloodsucker_clan/proc/is_valid_choice(datum/action/cooldown/bloodsucker/power, cost_rank, blood_cost, requires_coffin) + var/mob/living/carbon/human/human_user = bloodsuckerdatum.owner.current + if(!power) + return FALSE + if(cost_rank && bloodsuckerdatum.GetUnspentRank() <= 0) + return FALSE + if(blood_cost && bloodsuckerdatum.GetBloodVolume() < blood_cost) + human_user.balloon_alert(human_user, "not enough blood!") + to_chat(human_user, span_notice("You need at the very least [blood_cost] blood to thicken your blood.")) + return FALSE + // Prevent Bloodsuckers from purchasing a power while outside of their Coffin. + if(requires_coffin && !istype(human_user.loc, /obj/structure/closet/crate/coffin)) + to_chat(human_user, span_warning("You must be in your Coffin to purchase Powers.")) + return FALSE + if(!(initial(power.purchase_flags) & buy_power_flags)) + to_chat(human_user, span_notice("[initial(power.name)] is not available for purchase.")) + return FALSE + if(!(buy_power_flags & CAN_BUY_OWNED) && locate(power) in bloodsuckerdatum.powers) + to_chat(human_user, span_notice("You already know [initial(power.name)]!")) + return FALSE + return TRUE /datum/bloodsucker_clan/proc/finalize_spend_rank(datum/antagonist/bloodsucker/source, cost_rank = TRUE, blood_cost) - bloodsuckerdatum.LevelUpPowers() + level_up_powers(source) bloodsuckerdatum.bloodsucker_regen_rate += 0.05 bloodsuckerdatum.max_blood_volume += 100 @@ -211,7 +225,6 @@ // Ranked up enough to get your true Reputation? if(bloodsuckerdatum.GetRank() == BLOODSUCKER_HIGH_LEVEL) - to_chat(bloodsuckerdatum.owner.current, span_warning("Drinking from mindless humans and blood bags is now much more less effective.")) bloodsuckerdatum.SelectReputation(am_fledgling = FALSE, forced = TRUE) @@ -221,84 +234,100 @@ bloodsuckerdatum.owner.current.playsound_local(null, 'sound/effects/pope_entry.ogg', 25, TRUE, pressure_affected = FALSE) bloodsuckerdatum.update_static_data_for_all_viewers() - // unlock vassalizing if we have a vassal slot - if(bloodsuckerdatum.max_vassals() >= 1 && !(/datum/crafting_recipe/vassalrack in bloodsuckerdatum.owner?.learned_recipes)) - bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/vassalrack) + // unlock ghoulizing if we have a ghoul slot + if(bloodsuckerdatum.max_ghouls() >= 1 && !(/datum/crafting_recipe/ghoulrack in bloodsuckerdatum.owner?.learned_recipes)) + bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/ghoulrack) bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/candelabrum) bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/bloodthrone) bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/meatcoffin) - bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "new recipes learned! Vassalization unlocked!") + bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "new recipes learned! Ghoulization unlocked!") + return TRUE + + +/datum/bloodsucker_clan/proc/list_available_powers(already_known = bloodsuckerdatum.powers, powers_list = bloodsuckerdatum.all_bloodsucker_powers) + var/list/options = list() + for(var/datum/action/cooldown/bloodsucker/power as anything in powers_list) + if(initial(power.purchase_flags) & buy_power_flags && !(locate(power) in already_known)) + options[initial(power.name)] = power + return options + +/datum/bloodsucker_clan/proc/purchase_choice(datum/antagonist/bloodsucker/source, datum/action/cooldown/bloodsucker/purchased_power) + return bloodsuckerdatum.BuyPower(purchased_power) +/datum/bloodsucker_clan/proc/level_up_powers(datum/antagonist/bloodsucker/source) + bloodsuckerdatum.LevelUpPowers() /** - * Called when we are trying to turn someone into a Favorite Vassal + * Called when we are trying to turn someone into a Favorite Ghoul * args: * bloodsuckerdatum - the antagonist datum of the Bloodsucker performing this. - * vassaldatum - the antagonist datum of the Vassal being offered up. + * ghouldatum - the antagonist datum of the Ghoul being offered up. */ -/datum/bloodsucker_clan/proc/on_interact_with_vassal(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/proc/on_interact_with_ghoul(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) SIGNAL_HANDLER - INVOKE_ASYNC(src, PROC_REF(interact_with_vassal), bloodsuckerdatum, vassaldatum) + INVOKE_ASYNC(src, PROC_REF(interact_with_ghoul), bloodsuckerdatum, ghouldatum) -/datum/bloodsucker_clan/proc/interact_with_vassal(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/proc/interact_with_ghoul(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) var/mob/living/carbon/human/master = bloodsuckerdatum.owner.current - var/mob/living/carbon/human/servant = vassaldatum.owner.current - if(vassaldatum.special_type || IS_BLOODSUCKER(servant)) - to_chat(master, span_notice("This Vassal was already assigned a special position.")) + var/mob/living/carbon/human/servant = ghouldatum.owner.current + if(ghouldatum.special_type || IS_BLOODSUCKER(servant)) + to_chat(master, span_notice("This Ghoul was already assigned a special position.")) return FALSE - if(!vassaldatum.owner.can_make_special(creator = bloodsuckerdatum.owner)) - to_chat(master, span_notice("This Vassal is unable to gain a Special rank due to innate features.")) + if(!ghouldatum.owner.can_make_special(creator = bloodsuckerdatum.owner)) + to_chat(master, span_notice("This Ghoul is unable to gain a Special rank due to innate features.")) return FALSE - if(bloodsuckerdatum.GetBloodVolume() < SPECIAL_VASSAL_COST) - to_chat(master, span_notice("You need at least 150 blood to make a Vassal a Favorite Vassal.")) + if(bloodsuckerdatum.GetBloodVolume() < SPECIAL_GHOUL_COST) + to_chat(master, span_notice("You need at least 150 blood to make a Ghoul a Favorite Ghoul.")) return FALSE var/list/options = list() var/list/radial_display = list() - for(var/datum/antagonist/vassal/vassaldatums as anything in subtypesof(/datum/antagonist/vassal)) - var/vassal_type = initial(vassaldatums.special_type) - var/slot = bloodsuckerdatum.special_vassals[vassal_type] - if(vassal_type && slot) + for(var/datum/antagonist/ghoul/ghouldatums as anything in subtypesof(/datum/antagonist/ghoul)) + var/ghoul_type = initial(ghouldatums.special_type) + var/slot = bloodsuckerdatum.special_ghouls[ghoul_type] + if(ghoul_type && slot) continue - options[initial(vassaldatums.name)] = vassaldatums + options[initial(ghouldatums.name)] = ghouldatums var/datum/radial_menu_choice/option = new - option.image = image(icon = initial(vassaldatums.hud_icon), icon_state = initial(vassaldatums.antag_hud_name), pixel_y = -12, pixel_x = -12) - option.info = "[initial(vassaldatums.name)] - [span_boldnotice(initial(vassaldatums.vassal_description))]" - radial_display[initial(vassaldatums.name)] = option + option.image = image(icon = initial(ghouldatums.hud_icon), icon_state = initial(ghouldatums.antag_hud_name), pixel_y = -12, pixel_x = -12) + option.info = "[initial(ghouldatums.name)] - [span_boldnotice(initial(ghouldatums.ghoul_description))]" + radial_display[initial(ghouldatums.name)] = option if(!options.len) - master.balloon_alert(master, "Out of Special Vassal slots!") - return + master.balloon_alert(master, "Out of Special Ghoul slots!") + return FALSE - to_chat(master, span_notice("You can change who this Vassal is, who are they to you? This will cost [SPECIAL_VASSAL_COST] blood.")) - var/vassal_response = show_radial_menu(master, servant, radial_display) - if(!vassal_response) - return - var/datum/antagonist/vassal/vassal_type = options[vassal_response] - // let's ask if the vassal themselves actually wants to be a favorite + to_chat(master, span_notice("You can change who this Ghoul is, who are they to you? This will cost [SPECIAL_GHOUL_COST] blood.")) + var/ghoul_response = show_radial_menu(master, servant, radial_display) + if(!ghoul_response) + return FALSE + var/datum/antagonist/ghoul/ghoul_type = options[ghoul_response] + // let's ask if the ghoul themselves actually wants to be a favorite +#ifndef BLOODSUCKER_TESTING servant.balloon_alert(master, "asking...") - var/vassal_permission = tgui_alert(servant, initial(vassal_type.vassal_description), "Become a Special Vassal?", list("Yes", "No"), 1 MINUTES) == "Yes" - if(!vassal_permission) + var/ghoul_permission = tgui_alert(servant, initial(ghoul_type.ghoul_description), "Become a Special Ghoul?", list("Yes", "No"), 1 MINUTES) == "Yes" + if(!ghoul_permission) servant.balloon_alert(master, "refused!") return FALSE - if(QDELETED(src) || QDELETED(master) || QDELETED(servant) || !vassal_type) +#endif + if(QDELETED(src) || QDELETED(master) || QDELETED(servant) || !ghoul_type) return FALSE - if(bloodsuckerdatum.GetBloodVolume() < SPECIAL_VASSAL_COST) - to_chat(master, span_notice("You took too long to make your vassal, you no longer have enough blood!")) + if(bloodsuckerdatum.GetBloodVolume() < SPECIAL_GHOUL_COST) + to_chat(master, span_notice("You took too long to make your ghoul, you no longer have enough blood!")) return FALSE - vassaldatum.make_special(vassal_type) - bloodsuckerdatum.AdjustBloodVolume(-SPECIAL_VASSAL_COST) + ghouldatum.make_special(ghoul_type) + bloodsuckerdatum.AdjustBloodVolume(-SPECIAL_GHOUL_COST) return TRUE /** - * Called when we are successfully turn a Vassal into a Favorite Vassal + * Called when we are successfully turn a Ghoul into a Favorite Ghoul * args: - * bloodsuckerdatum - antagonist datum of the Bloodsucker who turned them into a Vassal. - * vassaldatum - the antagonist datum of the Vassal being offered up. + * bloodsuckerdatum - antagonist datum of the Bloodsucker who turned them into a Ghoul. + * ghouldatum - the antagonist datum of the Ghoul being offered up. */ -/datum/bloodsucker_clan/proc/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/proc/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) SIGNAL_HANDLER - vassaldatum.BuyPower(/datum/action/cooldown/bloodsucker/targeted/brawn) + ghouldatum.BuyPower(/datum/action/cooldown/bloodsucker/targeted/brawn) -/datum/bloodsucker_clan/proc/favorite_vassal_loss(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/proc/favorite_ghoul_loss(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) SIGNAL_HANDLER diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_flavortext.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_flavortext.dm index 481a735203a5f..e712ec86d3063 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_flavortext.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_flavortext.dm @@ -3,7 +3,7 @@ description = "Closer to Animals than Bloodsuckers, known as Werewolves waiting to happen, \n\ these are the most fearful of True Faith, being the most lethal thing they would ever see the night of. \n\ Full Moons do not seem to have an effect, despite common-told stories. \n\ - The Favorite Vassal turns into a Werewolf whenever their Master does." + The Favorite Ghoul turns into a Werewolf whenever their Master does." joinable_clan = FALSE blood_drink_type = BLOODSUCKER_DRINK_INHUMANELY @@ -27,7 +27,7 @@ description = "The most charming Clan of them all, allowing them to very easily disguise among the crew. \n\ More in touch with their morals, they suffer and benefit more strongly from humanity cost or gain of their actions. \n\ Known as 'The most humane kind of vampire', they have an obsession with perfectionism and beauty \n\ - The Favorite Vassal gains the Mesmerize ability." + The Favorite Ghoul gains the Mesmerize ability." joinable_clan = FALSE blood_drink_type = BLOODSUCKER_DRINK_SNOBBY @@ -36,7 +36,7 @@ description = "The Brujah Clan has proven to be the strongest in melee combat, boasting a powerful punch. \n\ They also appear to be more calm than the others, entering their 'frenzies' whenever they want, but dont seem affected much by them. \n\ Be wary, as they are fearsome warriors, rebels and anarchists, with an inclination towards Frenzy. \n\ - The Favorite Vassal gains brawn and a massive increase in brute damage from punching." + The Favorite Ghoul gains brawn and a massive increase in brute damage from punching." joinable_clan = FALSE /datum/bloodsucker_clan/tzimisce diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_malkavian.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_malkavian.dm index 026d09b565684..74ffba7b4952c 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_malkavian.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_malkavian.dm @@ -1,7 +1,7 @@ /datum/bloodsucker_clan/malkavian name = CLAN_MALKAVIAN description = "Little is documented about Malkavians. Complete insanity is the most common theme. \n\ - The Favorite Vassal will suffer the same fate as the Master, while gaining the ability to tap into the madness when fighting." + The Favorite Ghoul will suffer the same fate as the Master, while gaining the ability to tap into the madness when fighting." join_icon_state = "malkavian" join_description = "Completely insane. You gain constant hallucinations, become a prophet with unintelligable rambling, \ and become the enforcer of the Masquerade code." @@ -26,7 +26,7 @@ carbon_owner.gain_trauma(/datum/brain_trauma/special/bluespace_prophet, TRAUMA_RESILIENCE_ABSOLUTE) owner_datum.owner.current.update_sight() - bloodsuckerdatum.owner.current.playsound_local(get_turf(bloodsuckerdatum.owner.current), 'sound/ambience/antag/creepalert.ogg', 80, FALSE, pressure_affected = FALSE, use_reverb = FALSE) + bloodsuckerdatum.owner.current.playsound_local(get_turf(bloodsuckerdatum.owner.current), 'sound/music/antag/creepalert.ogg', 80, FALSE, pressure_affected = FALSE, use_reverb = FALSE) to_chat(bloodsuckerdatum.owner.current, span_hypnophrase("Welcome to the Malkavian...")) /datum/bloodsucker_clan/malkavian/Destroy(force) @@ -56,24 +56,24 @@ var/message = pick(strings("malkavian_revelations.json", "revelations", "modular_zubbers/strings/bloodsuckers")) INVOKE_ASYNC(source.owner.current, TYPE_PROC_REF(/atom/movable, say), message, forced = CLAN_MALKAVIAN) -/datum/bloodsucker_clan/malkavian/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - var/mob/living/carbon/carbonowner = vassaldatum.owner.current +/datum/bloodsucker_clan/malkavian/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + var/mob/living/carbon/carbonowner = ghouldatum.owner.current if(istype(carbonowner)) carbonowner.gain_trauma(/datum/brain_trauma/mild/hallucinations, TRAUMA_RESILIENCE_ABSOLUTE) carbonowner.gain_trauma(/datum/brain_trauma/special/bluespace_prophet/phobetor, TRAUMA_RESILIENCE_ABSOLUTE) var/datum/martial_art/psychotic_brawling/psychotic_brawling = new(null) - psychotic_brawling.teach(vassaldatum.owner.current, TRUE) - to_chat(vassaldatum.owner.current, span_notice("Additionally, you now suffer the same fate as your Master, while also gaining the ability to tap into the madness when fighting.")) + psychotic_brawling.teach(ghouldatum.owner.current, TRUE) + to_chat(ghouldatum.owner.current, span_notice("Additionally, you now suffer the same fate as your Master, while also gaining the ability to tap into the madness when fighting.")) -/datum/bloodsucker_clan/malkavian/favorite_vassal_loss(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - var/mob/living/carbon/carbonowner = vassaldatum.owner.current +/datum/bloodsucker_clan/malkavian/favorite_ghoul_loss(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + var/mob/living/carbon/carbonowner = ghouldatum.owner.current if(istype(carbonowner)) carbonowner.cure_trauma_type(/datum/brain_trauma/mild/hallucinations, TRAUMA_RESILIENCE_ABSOLUTE) carbonowner.cure_trauma_type(/datum/brain_trauma/special/bluespace_prophet/phobetor, TRAUMA_RESILIENCE_ABSOLUTE) - if(!istype(/datum/martial_art/psychotic_brawling, vassaldatum.owner.martial_art)) + if(!istype(/datum/martial_art/psychotic_brawling, ghouldatum.owner.martial_art)) return - var/datum/martial_art/psychotic_brawling/psychotic_brawling = vassaldatum.owner.martial_art - psychotic_brawling.remove(vassaldatum.owner.current) + var/datum/martial_art/psychotic_brawling/psychotic_brawling = ghouldatum.owner.martial_art + psychotic_brawling.remove(ghouldatum.owner.current) /datum/bloodsucker_clan/malkavian/on_exit_torpor(datum/antagonist/bloodsucker/source) var/mob/living/carbon/carbonowner = bloodsuckerdatum.owner.martial_art @@ -83,10 +83,13 @@ /datum/bloodsucker_clan/malkavian/on_final_death(datum/antagonist/bloodsucker/source) var/obj/item/soulstone/bloodsucker/stone = new /obj/item/soulstone/bloodsucker(get_turf(bloodsuckerdatum.owner.current)) - ASYNC stone.capture_soul(bloodsuckerdatum.owner.current, forced = TRUE, bloodsuckerdatum = bloodsuckerdatum) + if(!bloodsuckerdatum.owner.current.ckey) + return + ASYNC + stone.capture_soul(bloodsuckerdatum.owner.current, forced = TRUE) return DONT_DUST -/datum/bloodsucker_clan/malkavian/proc/on_bloodsucker_broke_masquerade(datum/antagonist/bloodsucker/masquerade_breaker) +/datum/bloodsucker_clan/malkavian/proc/on_bloodsucker_broke_masquerade(datum/source, datum/antagonist/bloodsucker/masquerade_breaker) SIGNAL_HANDLER to_chat(bloodsuckerdatum.owner.current, span_userdanger("[masquerade_breaker.owner.current] has broken the Masquerade! Ensure [masquerade_breaker.owner.current.p_they()] [masquerade_breaker.owner.current.p_are()] eliminated at all costs!")) var/datum/objective/assassinate/masquerade_objective = new() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_nosferatu.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_nosferatu.dm index 98d42f959ae60..7577d51df6750 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_nosferatu.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_nosferatu.dm @@ -1,9 +1,9 @@ /datum/bloodsucker_clan/nosferatu name = CLAN_NOSFERATU description = "The Nosferatu Clan is unable to blend in with the crew, with no abilities such as Masquerade and Veil. \n\ - Additionally, has a permanent bad back and looks like a Bloodsucker upon a simple examine, and is entirely unidentifiable, \n\ + Additionally, has a permanent bad back and looks like a Bloodsucker upon a simple examine, and their face is disfigured \n\ they can fit in the vents regardless of their form and equipment. \n\ - The Favorite Vassal is also permanently disfigured, and can also ventcrawl, but only while entirely nude. \n\ + The Favorite Ghoul is also permanently disfigured, and can also ventcrawl, but only while entirely nude. \n\ They also have night vision, know what each wire does, and have silent footsteps." clan_objective = /datum/objective/bloodsucker/kindred join_icon_state = "nosferatu" @@ -19,26 +19,33 @@ if(!bloodsuckerdatum.owner.current.has_quirk(/datum/quirk/badback)) bloodsuckerdatum.owner.current.add_quirk(/datum/quirk/badback) bloodsuckerdatum.owner.current.add_traits(list(TRAIT_VENTCRAWLER_ALWAYS, TRAIT_DISFIGURED), BLOODSUCKER_TRAIT) + RegisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_EXAMINE, PROC_REF(on_mob_examine)) + +/datum/bloodsucker_clan/nosferatu/proc/on_mob_examine(datum/antagonist/bloodsucker/owner_datum, datum/source, mob/examiner, examine_text) + SIGNAL_HANDLER + var/mob/living/carbon/human/ogled = owner_datum.owner.current + var/mob/living/ogler = examiner + if(isliving(examiner) && examiner != ogled && !ogler.mob_mood.has_mood_of_category("nosferatu_examine")) + ogler.add_mood_event("nosferatu_examine", /datum/mood_event/nosferatu_examined, ogled, owner_datum.GetRank()) + ogler.adjust_disgust(owner_datum.GetRank() * 5) + examine_text += span_danger("[ogled.p_They()] look[ogled.p_s()] horrifically disfigured and grotesque, pale as a corpse, and [ogled.p_their()] body is covered in scars and burns.") /datum/bloodsucker_clan/nosferatu/Destroy(force) - for(var/datum/action/cooldown/bloodsucker/power in bloodsuckerdatum.powers) - bloodsuckerdatum.RemovePower(power) + var/datum/action/cooldown/bloodsucker/feed/suck = locate() in bloodsuckerdatum.powers + if(suck) + bloodsuckerdatum.RemovePower(suck) bloodsuckerdatum.give_starting_powers() bloodsuckerdatum.owner.current.remove_quirk(/datum/quirk/badback) bloodsuckerdatum.owner.current.remove_traits(list(TRAIT_VENTCRAWLER_ALWAYS, TRAIT_DISFIGURED), BLOODSUCKER_TRAIT) + UnregisterSignal(bloodsuckerdatum, COMSIG_BLOODSUCKER_EXAMINE) return ..() -/datum/bloodsucker_clan/nosferatu/handle_clan_life(datum/antagonist/bloodsucker/source, seconds_per_tick, times_fired) - . = ..() - if(!HAS_TRAIT(bloodsuckerdatum.owner.current, TRAIT_NOBLOOD)) - bloodsuckerdatum.owner.current.blood_volume = BLOOD_VOLUME_SURVIVE - -/datum/bloodsucker_clan/nosferatu/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) +/datum/bloodsucker_clan/nosferatu/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) var/list/traits_to_add = list(TRAIT_VENTCRAWLER_NUDE, TRAIT_DISFIGURED, TRAIT_TRUE_NIGHT_VISION, TRAIT_KNOW_ENGI_WIRES, TRAIT_SILENT_FOOTSTEPS) - vassaldatum.owner.current.add_traits(traits_to_add, VASSAL_TRAIT) - vassaldatum.traits += traits_to_add - vassaldatum.owner.current.update_sight() - to_chat(vassaldatum.owner.current, span_notice("Additionally, you can now ventcrawl while naked, and are permanently disfigured. You also have night vision, know how which wires to cut, and have silent footsteps.")) + ghouldatum.owner.current.add_traits(traits_to_add, GHOUL_TRAIT) + ghouldatum.traits += traits_to_add + ghouldatum.owner.current.update_sight() + to_chat(ghouldatum.owner.current, span_notice("Additionally, you can now ventcrawl while naked, and are permanently disfigured. You also have night vision, know how which wires to cut, and have silent footsteps.")) -/datum/bloodsucker_clan/nosferatu/favorite_vassal_loss(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - vassaldatum.owner.current.update_sight() +/datum/bloodsucker_clan/nosferatu/favorite_ghoul_loss(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + ghouldatum.owner.current.update_sight() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_tremere.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_tremere.dm index 33fca74b1ae72..7d38b81b3bdf1 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_tremere.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_tremere.dm @@ -2,23 +2,24 @@ name = CLAN_TREMERE description = "The Tremere Clan is extremely weak to True Faith, and will burn when entering areas considered such, like the Chapel. \n\ Additionally, a whole new moveset is learned, built on Blood magic rather than Blood abilities, which are upgraded overtime. \n\ - More ranks can be gained by Vassalizing crewmembers. \n\ - The Favorite Vassal gains the Batform spell, being able to morph themselves at will." + More ranks can be gained by Ghoulizing crewmembers. \n\ + The Favorite Ghoul gains the Batform spell, being able to morph themselves at will." clan_objective = /datum/objective/bloodsucker/tremere_power join_icon_state = "tremere" join_description = "You will burn if you enter the Chapel, lose all default powers, \ - but gain Blood Magic instead, powers you level up overtime." + but gain Blood Magic instead, stronger powers you level up overtime." + buy_power_flags = TREMERE_CAN_BUY|CAN_BUY_OWNED /datum/bloodsucker_clan/tremere/New(mob/living/carbon/user) . = ..() bloodsuckerdatum.remove_nondefault_powers(return_levels = TRUE) for(var/datum/action/cooldown/bloodsucker/power as anything in bloodsuckerdatum.all_bloodsucker_powers) - if((initial(power.purchase_flags) & TREMERE_CAN_BUY) && initial(power.level_current) == 1) + if((initial(power.purchase_flags) & buy_power_flags) && initial(power.level_current) == 1) bloodsuckerdatum.BuyPower(power) /datum/bloodsucker_clan/tremere/Destroy(force) for(var/datum/action/cooldown/bloodsucker/power in bloodsuckerdatum.powers) - if(power.purchase_flags & TREMERE_CAN_BUY) + if(power.purchase_flags & buy_power_flags) bloodsuckerdatum.RemovePower(power) return ..() @@ -31,56 +32,32 @@ bloodsuckerdatum.owner.current.adjust_fire_stacks(2) bloodsuckerdatum.owner.current.ignite_mob() -/datum/bloodsucker_clan/tremere/spend_rank(datum/antagonist/bloodsucker/source, mob/living/carbon/target, cost_rank = TRUE, blood_cost) - // Purchase Power Prompt - var/list/options = list() - for(var/datum/action/cooldown/bloodsucker/targeted/tremere/power as anything in bloodsuckerdatum.powers) - if(!(power.purchase_flags & TREMERE_CAN_BUY)) - continue - if(isnull(power.upgraded_power)) - continue - options[initial(power.name)] = power +/datum/bloodsucker_clan/tremere/level_up_powers(datum/antagonist/bloodsucker/source) + return - if(options.len < 1) - to_chat(bloodsuckerdatum.owner.current, span_notice("You grow more ancient by the night!")) - else - // Give them the UI to purchase a power. - var/choice = tgui_input_list(bloodsuckerdatum.owner.current, "You have the opportunity to grow more ancient. Spend [round(blood_cost, 1)] blood to upgrade a power.", "Your Blood Thickens...", options) - // Prevent Bloodsuckers from closing/reopning their coffin to spam Levels. - if(cost_rank && bloodsuckerdatum.GetUnspentRank() <= 0) - return - // Did you choose a power? - if(!choice || !options[choice]) - to_chat(bloodsuckerdatum.owner.current, span_notice("You prevent your blood from thickening just yet, but you may try again later.")) - return - // Prevent Bloodsuckers from purchasing a power while outside of their Coffin. - if(!istype(bloodsuckerdatum.owner.current.loc, /obj/structure/closet/crate/coffin)) - to_chat(bloodsuckerdatum.owner.current, span_warning("You must be in your Coffin to purchase Powers.")) - return +/datum/bloodsucker_clan/tremere/level_message(power_name) + var/mob/living/carbon/human/human_user = bloodsuckerdatum.owner.current + human_user.balloon_alert(human_user, "upgraded [power_name]!") + to_chat(human_user, span_notice("You have upgraded [power_name]!")) - // Good to go - Buy Power! - var/datum/action/cooldown/bloodsucker/purchased_power = options[choice] - var/datum/action/cooldown/bloodsucker/targeted/tremere/tremere_power = purchased_power - if(isnull(tremere_power.upgraded_power)) - bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "cannot upgrade [choice]!") - to_chat(bloodsuckerdatum.owner.current, span_notice("[choice] is already at max level!")) - return - bloodsuckerdatum.BuyPower(tremere_power.upgraded_power) - bloodsuckerdatum.RemovePower(tremere_power) - bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "upgraded [choice]!") - to_chat(bloodsuckerdatum.owner.current, span_notice("You have upgraded [choice]!")) +// redefine the default args +/datum/bloodsucker_clan/tremere/list_available_powers(already_known, powers_list) + already_known = list() + powers_list = bloodsuckerdatum.powers + return ..() - finalize_spend_rank(bloodsuckerdatum, cost_rank, blood_cost) +/datum/bloodsucker_clan/tremere/purchase_choice(datum/antagonist/bloodsucker/source, datum/action/cooldown/bloodsucker/purchased_power) + return purchased_power.upgrade_power() -/datum/bloodsucker_clan/tremere/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - var/datum/action/cooldown/spell/shapeshift/bat/batform = new(vassaldatum.owner || vassaldatum.owner.current) - batform.Grant(vassaldatum.owner.current) +/datum/bloodsucker_clan/tremere/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + var/datum/action/cooldown/spell/shapeshift/bat/batform = new(ghouldatum.owner || ghouldatum.owner.current) + batform.Grant(ghouldatum.owner.current) -/datum/bloodsucker_clan/tremere/favorite_vassal_loss(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - var/datum/action/cooldown/spell/shapeshift/bat/batform = locate() in vassaldatum.owner.current.actions - batform.Remove(vassaldatum.owner.current) +/datum/bloodsucker_clan/tremere/favorite_ghoul_loss(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + var/datum/action/cooldown/spell/shapeshift/bat/batform = locate() in ghouldatum.owner.current.actions + batform.Remove(ghouldatum.owner.current) -/datum/bloodsucker_clan/tremere/on_vassal_made(datum/antagonist/bloodsucker/source, mob/living/user, mob/living/target) +/datum/bloodsucker_clan/tremere/on_ghoul_made(datum/antagonist/bloodsucker/source, mob/living/user, mob/living/target) . = ..() to_chat(bloodsuckerdatum.owner.current, span_danger("You have now gained an additional Rank to spend!")) bloodsuckerdatum.AdjustUnspentRank(1) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm index 60fe9d7696513..b35ec6e9ece92 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm @@ -1,19 +1,18 @@ -///The maximum level a Ventrue Bloodsucker can be, before they have to level up their vassal instead. +///The maximum level a Ventrue Bloodsucker can be, before they have to level up their ghoul instead. #define VENTRUE_MAX_POWERS 3 -///How much it costs for a Ventrue to rank up without a spare rank to spend. -#define BLOODSUCKER_BLOOD_RANKUP_COST (550) /datum/bloodsucker_clan/ventrue name = CLAN_VENTRUE description = "The Ventrue Clan is extremely snobby with their meals, and refuse to drink blood from people without a mind. \n\ - You may have up to %MAX_POWERS% powers, anything further will be ranks to spend on their Favorite Vassal through a Persuasion Rack. \n\ - The Favorite Vassal will slowly turn more Vampiric this way, until they finally lose their last bits of Humanity. \n\ - Once you finish your embracing, the newly sired vampire will become just a vassal, and you'll be able to sire another bloodsucker." + You may have up to %MAX_POWERS% powers, anything further will be ranks to spend on their Favorite Ghoul through a Persuasion Rack. \n\ + The Favorite Ghoul will slowly turn more Vampiric this way, until they finally lose their last bits of Humanity. \n\ + Once you finish your embracing, the newly sired vampire will become just a ghoul, and you'll be able to sire another bloodsucker." clan_objective = /datum/objective/bloodsucker/embrace join_icon_state = "ventrue" join_description = "Lose the ability to drink from mindless mobs, can't level up or gain new powers, \ - instead you raise a vassal into a Bloodsucker." + instead you raise a ghoul into a Bloodsucker." blood_drink_type = BLOODSUCKER_DRINK_SNOBBY + level_cost = BLOODSUCKER_LEVELUP_PERCENTAGE_VENTRUE /datum/bloodsucker_clan/ventrue/New(datum/antagonist/bloodsucker/owner_datum) . = ..() @@ -28,123 +27,116 @@ return TRUE return FALSE -/datum/bloodsucker_clan/ventrue/spend_rank(datum/antagonist/bloodsucker/source, mob/living/carbon/target, cost_rank = TRUE, blood_cost) - if(!target && !has_enough_abilities()) - return ..() - else if(!target) - to_chat(bloodsuckerdatum.owner.current, span_danger("You can only have up to [VENTRUE_MAX_POWERS] powers, anything further will be ranks to spend on your Favorite Vassal through a Persuasion Rack.")) +/datum/bloodsucker_clan/ventrue/spend_rank(datum/antagonist/bloodsucker/source, cost_rank = TRUE, blood_cost) + if(has_enough_abilities()) + to_chat(bloodsuckerdatum.owner.current, span_danger("You can only have up to [VENTRUE_MAX_POWERS] powers, anything further must be ranks to spend on your Favorite Ghoul through a Persuasion Rack.")) return FALSE - var/datum/antagonist/vassal/favorite/vassaldatum = target.mind.has_antag_datum(/datum/antagonist/vassal/favorite) - var/datum/antagonist/vassal/non_favorite = target.mind.has_antag_datum(/datum/antagonist/vassal) - if(!vassaldatum && vassaldatum.master != bloodsuckerdatum.owner.current || !IS_BLOODSUCKER(target) && !non_favorite && vassaldatum.master != bloodsuckerdatum.owner.current) - target.balloon_alert(target, "is not a sired bloodsucker nor your favorite vassal!") + . = ..() + +/datum/bloodsucker_clan/ventrue/proc/finish_spend_rank(datum/antagonist/ghoul/ghouldatum, cost_rank, blood_cost) + finalize_spend_rank(bloodsuckerdatum, cost_rank, blood_cost) + ghouldatum.LevelUpPowers() + +/datum/bloodsucker_clan/ventrue/interact_with_ghoul(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/favorite/ghouldatum) + . = ..() + if(.) + return TRUE + if(!istype(ghouldatum)) return FALSE - if(!vassaldatum.owner.current.mind) - target.balloon_alert(target, "vassal must be awake!") + to_chat(bloodsuckerdatum.owner.current, span_warning("Do you wish to Rank [ghouldatum.owner.current] up?")) + to_chat(bloodsuckerdatum.owner.current, span_warning("This will use [bloodsuckerdatum.GetUnspentRank() >= 1 ? "a unspent Rank" : "[bloodsuckerdatum.get_level_cost()] Blood Thickening Points"]!")) + + var/static/list/rank_options = list( + "Yes" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_yes"), + "No" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_no"), + ) + var/rank_response = show_radial_menu(bloodsuckerdatum.owner.current, ghouldatum.owner.current, rank_options, radius = 36, require_near = TRUE) + if(rank_response == "Yes") + if(!bloodsuckerdatum.GetUnspentRank() >= 1 && !source.blood_level_gain(FALSE)) + to_chat(bloodsuckerdatum.owner.current, span_danger("You don't have any levels or enough blood thickening points to Rank [ghouldatum.owner.current] up with.")) + return FALSE + return ghoul_level(ghouldatum) + return FALSE + +/datum/bloodsucker_clan/ventrue/proc/ghoul_level(datum/antagonist/ghoul/favorite/ghouldatum) + var/list/options = list_available_powers(ghouldatum.bloodsucker_powers) + var/mob/living/carbon/human/target = ghouldatum.owner.current + var/datum/action/cooldown/bloodsucker/choice = choose_powers( + "You have the opportunity to level up your Favorite Ghoul. Select a power you wish them to recieve.", + "A wise master's hand is neccesary", + options + ) + if(!choice) return FALSE - // Purchase Power Prompt - var/list/options = list() - for(var/datum/action/cooldown/bloodsucker/power as anything in bloodsuckerdatum.all_bloodsucker_powers) - if(initial(power.purchase_flags) & VASSAL_CAN_BUY && !(locate(power) in vassaldatum.bloodsucker_powers)) - options[initial(power.name)] = power - - if(options.len < 1) - to_chat(bloodsuckerdatum.owner.current, span_notice("You grow more ancient by the night!")) - else - // Give them the UI to purchase a power. - var/choice = tgui_input_list(bloodsuckerdatum.owner.current, "You have the opportunity to level up your Favorite Vassal. Select a power you wish them to recieve.", "Your Blood Thickens...", options) - // Prevent Bloodsuckers from closing/reopning their coffin to spam Levels. - if(cost_rank && bloodsuckerdatum.GetUnspentRank() <= 0) - return - // Did you choose a power? - if(!choice || !options[choice]) - to_chat(bloodsuckerdatum.owner.current, span_notice("You prevent your blood from thickening just yet, but you may try again later.")) - return - // Prevent Bloodsuckers from closing/reopning their coffin to spam Levels. - if((locate(options[choice]) in vassaldatum.bloodsucker_powers)) - to_chat(bloodsuckerdatum.owner.current, span_notice("You prevent your blood from thickening just yet, but you may try again later.")) - return - - // Good to go - Buy Power! - var/datum/action/cooldown/bloodsucker/purchased_power = options[choice] - if(!vassaldatum.BuyPower(purchased_power, vassaldatum.bloodsucker_powers)) - bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "[target] already knows [choice]!") - return - bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "taught [choice]!") - to_chat(bloodsuckerdatum.owner.current, span_notice("You taught [target] how to use [choice]!")) - target.balloon_alert(target, "learned [choice]!") - to_chat(target, span_notice("Your master taught you how to use [choice]!")) - if(IS_VASSAL(target) && IS_BLOODSUCKER(target)) - finish_spend_rank(vassaldatum, cost_rank, blood_cost) - return - vassaldatum.vassal_level++ - finish_spend_rank(vassaldatum, cost_rank, blood_cost) - var/traits_to_add = list() - switch(vassaldatum.vassal_level) + var/power_name = initial(choice.name) + if(!ghouldatum.BuyPower(choice, ghouldatum.bloodsucker_powers)) + bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "[target] already knows [power_name]!") + return FALSE + bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "taught [power_name]!") + to_chat(bloodsuckerdatum.owner.current, span_notice("You taught [target] how to use [power_name]!")) + + target.balloon_alert(target, "learned [power_name]!") + to_chat(target, span_notice("Your master taught you how to use [power_name]!")) + + ghouldatum.ghoul_level++ + finish_spend_rank(ghouldatum, TRUE, FALSE) + bloodsuckerify(ghouldatum) + return TRUE + +/datum/bloodsucker_clan/ventrue/proc/bloodsuckerify(datum/antagonist/ghoul/favorite/ghouldatum) + var/mob/living/carbon/human/target = ghouldatum.owner.current + var/stage = ghouldatum.ghoul_level + var/list/traits_possible = list( + list(TRAIT_COLDBLOODED, TRAIT_NOBREATH, TRAIT_AGEUSIA), + list(TRAIT_NOCRITDAMAGE, TRAIT_NOSOFTCRIT, TRAIT_SLEEPIMMUNE, TRAIT_VIRUSIMMUNE), + list(TRAIT_NOHARDCRIT, TRAIT_HARDLY_WOUNDED) + ) + var/traits_to_add = length(traits_possible) >= stage ? traits_possible[stage] : list() + switch(stage) + if(1) - traits_to_add = list(TRAIT_COLDBLOODED, TRAIT_NOBREATH, TRAIT_AGEUSIA) to_chat(target, span_notice("Your blood begins to feel cold, and as a mote of ash lands upon your tongue, you stop breathing...")) + if(2) - traits_to_add = list(TRAIT_NOCRITDAMAGE, TRAIT_NOSOFTCRIT, TRAIT_SLEEPIMMUNE, TRAIT_VIRUSIMMUNE) to_chat(target, span_notice("You feel your Master's blood reinforce you, strengthening you up.")) if(ishuman(target)) var/mob/living/carbon/human/human_target = target human_target.skin_tone = "albino" + if(3) - traits_to_add = list(TRAIT_NOHARDCRIT, TRAIT_HARDLY_WOUNDED) to_chat(target, span_notice("You feel yourself able to take cuts and stabbings like it's nothing.")) + if(4 to INFINITY) - var/datum/antagonist/bloodsucker/bloodsucker_target = target.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsucker_target = IS_BLOODSUCKER(target) if(!bloodsucker_target) to_chat(target, span_notice("You feel your heart stop pumping for the last time as you begin to thirst for blood, you feel... dead.")) // Unfavorites you, so the ventrue isn't stuck with you forever - vassaldatum.silent = TRUE var/powers_to_transfer = list() - // Get rid of the favorite datum and replace with a normal vassal datum - if(target.mind.has_antag_datum(/datum/antagonist/vassal/favorite)) - for(var/datum/power as anything in vassaldatum.bloodsucker_powers) + // Get rid of the favorite datum and replace with a normal ghoul datum + if(ghouldatum) + ghouldatum.silent = TRUE + for(var/datum/power as anything in ghouldatum.bloodsucker_powers) powers_to_transfer += power.type - target.mind.remove_antag_datum(/datum/antagonist/vassal/favorite) + target.mind.remove_antag_datum(/datum/antagonist/ghoul/favorite) + else + target.remove_traits(flatten_list(traits_to_add), GHOUL_TRAIT) + + var/datum/antagonist/bloodsucker/vamp = new() vamp.ventrue_sired = bloodsuckerdatum bloodsucker_target = target.mind.add_antag_datum(vamp) bloodsucker_target.BuyPowers(powers_to_transfer) // Check for the recuperate power and remove it if they have it bloodsuckerdatum.owner.current.add_mood_event("madevamp", /datum/mood_event/madevamp) - if(vassaldatum && QDELETED(vassaldatum) && length(traits_to_add)) - target.add_traits(traits_to_add, VASSAL_TRAIT) - vassaldatum.traits += traits_to_add -/datum/bloodsucker_clan/ventrue/proc/finish_spend_rank(datum/antagonist/vassal/vassaldatum, cost_rank, blood_cost) - finalize_spend_rank(bloodsuckerdatum, cost_rank, blood_cost) - vassaldatum.LevelUpPowers() -/datum/bloodsucker_clan/ventrue/interact_with_vassal(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/favorite/vassaldatum) - . = ..() - if(.) - return TRUE - if(!istype(vassaldatum)) - return FALSE - if(!bloodsuckerdatum.GetUnspentRank() <= 0) - bloodsuckerdatum.SpendRank(vassaldatum.owner.current) - return TRUE - if(bloodsuckerdatum.GetBloodVolume() >= BLOODSUCKER_BLOOD_RANKUP_COST) - // We don't have any ranks to spare? Let them upgrade... with enough Blood. - to_chat(bloodsuckerdatum.owner.current, span_warning("Do you wish to spend [BLOODSUCKER_BLOOD_RANKUP_COST] Blood to Rank [vassaldatum.owner.current] up?")) - var/static/list/rank_options = list( - "Yes" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_yes"), - "No" = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_no"), - ) - var/rank_response = show_radial_menu(bloodsuckerdatum.owner.current, vassaldatum.owner.current, rank_options, radius = 36, require_near = TRUE) - if(rank_response == "Yes") - bloodsuckerdatum.SpendRank(vassaldatum.owner.current, cost_rank = FALSE, blood_cost = BLOODSUCKER_BLOOD_RANKUP_COST) - return TRUE - to_chat(bloodsuckerdatum.owner.current, span_danger("You don't have any levels or enough Blood to Rank [vassaldatum.owner.current] up with.")) - return TRUE + if(ghouldatum && QDELETED(ghouldatum) && length(traits_to_add)) + target.add_traits(traits_to_add, GHOUL_TRAIT) + ghouldatum.traits += traits_to_add + +/datum/bloodsucker_clan/ventrue/favorite_ghoul_gain(datum/antagonist/bloodsucker/source, datum/antagonist/ghoul/ghouldatum) + to_chat(source.owner.current, span_announce("* Bloodsucker Tip: You can now upgrade your Favorite Ghoul by buckling them onto a persuasion rack!")) + ghouldatum.BuyPower(/datum/action/cooldown/bloodsucker/distress) -/datum/bloodsucker_clan/ventrue/favorite_vassal_gain(datum/antagonist/bloodsucker/source, datum/antagonist/vassal/vassaldatum) - to_chat(source.owner.current, span_announce("* Bloodsucker Tip: You can now upgrade your Favorite Vassal by buckling them onto a persuasion rack!")) - vassaldatum.BuyPower(/datum/action/cooldown/bloodsucker/distress) -#undef BLOODSUCKER_BLOOD_RANKUP_COST #undef VENTRUE_MAX_POWERS diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/_powers.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/_powers.dm index 0ccbea886af36..35c3981d6bf76 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/_powers.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/_powers.dm @@ -1,6 +1,5 @@ /datum/action/cooldown/bloodsucker name = "Vampiric Gift" - desc = "A vampiric gift." background_icon = 'modular_zubbers/icons/mob/actions/bloodsucker.dmi' background_icon_state = "vamp_power_off" button_icon = 'modular_zubbers/icons/mob/actions/bloodsucker.dmi' @@ -22,11 +21,12 @@ // FLAGS // /// The effects on this Power (Toggled/Single Use/Static Cooldown) - var/power_flags = BP_AM_TOGGLE|BP_AM_SINGLEUSE|BP_AM_STATIC_COOLDOWN|BP_AM_COSTLESS_UNCONSCIOUS + var/power_flags = BP_AM_SINGLEUSE|BP_AM_STATIC_COOLDOWN|BP_AM_COSTLESS_UNCONSCIOUS /// Requirement flags for checks - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS|AB_CHECK_PHASED + var/bloodsucker_check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY /// Who can purchase the Power - var/purchase_flags = NONE // BLOODSUCKER_CAN_BUY|BLOODSUCKER_DEFAULT_POWER|TREMERE_CAN_BUY|VASSAL_CAN_BUY + var/purchase_flags = NONE // BLOODSUCKER_CAN_BUY|BLOODSUCKER_DEFAULT_POWER|TREMERE_CAN_BUY|GHOUL_CAN_BUY // VARS // /// If the Power is currently active, differs from action cooldown because of how powers are handled. @@ -37,18 +37,17 @@ var/bloodcost = 0 ///The cost to MAINTAIN this Power - Only used for Constant Cost Powers var/constant_bloodcost = 0 + ///Most powers happen the moment you click. Some, like Mesmerize, require time and shouldn't cost you if they fail. + var/power_activates_immediately = TRUE // Modify description to add cost. /datum/action/cooldown/bloodsucker/New(Target) + SHOULD_CALL_PARENT(TRUE) . = ..() - if(bloodcost > 0) - desc += "

        COST: [bloodcost] Blood" - if(constant_bloodcost > 0) - desc += "

        CONSTANT COST: [name] costs [constant_bloodcost] blood per second to keep it active." - if(power_flags & BP_AM_SINGLEUSE) - desc += "

        SINGLE USE:
        [name] can only be used once per night." + desc = get_power_desc() /datum/action/cooldown/bloodsucker/Destroy() + SHOULD_CALL_PARENT(TRUE) if(active) DeactivatePower() bloodsuckerdatum_power = null @@ -63,21 +62,30 @@ if(bloodsuckerdatum) bloodsuckerdatum_power = bloodsuckerdatum -//This is when we CLICK on the ability Icon, not USING. /datum/action/cooldown/bloodsucker/Trigger(trigger_flags, atom/target) + if(trigger_flags & TRIGGER_SECONDARY_ACTION) + RightClickActivate(trigger_flags) + return + . = ..() + +//This is when we CLICK on the ability Icon, not USING. +/datum/action/cooldown/bloodsucker/PreActivate(atom/target) + if(QDELETED(owner)) + return FALSE + if(SEND_SIGNAL(src, COMSIG_ACTION_TRIGGER) & COMPONENT_ACTION_BLOCK_TRIGGER) + return FALSE if(active && can_deactivate()) // Active? DEACTIVATE AND END! DeactivatePower() return FALSE - if(!can_pay_cost() || !can_use(owner, trigger_flags)) + if(!can_pay_cost() || !can_use(owner)) return FALSE - pay_cost() - ActivatePower(trigger_flags) - if(!(power_flags & BP_AM_TOGGLE) || !active) - StartCooldown() - return TRUE + . = ..() + // base type returns true? Pay costs + if(!click_to_activate && power_activates_immediately) + pay_cost() /datum/action/cooldown/bloodsucker/proc/can_pay_cost() - if(!owner || !owner.mind) + if(QDELETED(owner) || !owner.mind) return FALSE // Cooldown? if(!COOLDOWN_FINISHED(src, next_use_time)) @@ -85,7 +93,7 @@ return FALSE if(!bloodsuckerdatum_power) var/mob/living/living_owner = owner - if(!HAS_TRAIT(living_owner, TRAIT_NOBLOOD) && living_owner.blood_volume < bloodcost) + if(!HAS_TRAIT(living_owner, TRAIT_NOBLOOD) && living_owner.blood_volume <= bloodcost) to_chat(owner, span_warning("You need at least [bloodcost] blood to activate [name]")) return FALSE return TRUE @@ -100,50 +108,50 @@ ///Called when the Power is upgraded. /datum/action/cooldown/bloodsucker/proc/upgrade_power() + SHOULD_CALL_PARENT(TRUE) + DeactivatePower() + if(level_current == -1) // -1 means it doesn't rank up ever + return FALSE level_current++ - build_all_button_icons(UPDATE_BUTTON_NAME) + on_power_upgrade() + return TRUE -// Put desc that you want to update every time build_all_button_icons is called here -/datum/action/cooldown/bloodsucker/update_button_name(atom/movable/screen/movable/action_button/button, force) - . = ..() - if((purchase_flags & BLOODSUCKER_CAN_BUY) || (purchase_flags & TREMERE_CAN_BUY)) - button.desc += "

        LEVEL: [level_current]" +/datum/action/cooldown/bloodsucker/proc/on_power_upgrade() + SHOULD_CALL_PARENT(TRUE) + desc = get_power_desc() + if(purchase_flags & TREMERE_CAN_BUY && level_current >= TREMERE_OBJECTIVE_POWER_LEVEL) + background_icon_state = "tremere_power_gold_off" + active_background_icon_state = "tremere_power_gold_on" + base_background_icon_state = "tremere_power_gold_off" + build_all_button_icons(ALL) ///Checks if the Power is available to use. -/datum/action/cooldown/bloodsucker/proc/can_use(mob/living/carbon/user, trigger_flags) - if(!owner) +/datum/action/cooldown/bloodsucker/proc/can_use(mob/living/carbon/user) + if(QDELETED(owner)) return FALSE if(!isliving(user)) return FALSE - if(bloodsuckerdatum_power && !bloodsuckerdatum_power.heart?.resolve()) + if(!(bloodsucker_check_flags & BP_CAN_USE_HEARTLESS) && bloodsuckerdatum_power && !owner.get_organ_slot(ORGAN_SLOT_HEART)) to_chat(user, span_warning("To channel your powers you need a heart!")) return FALSE if(isbrain(user)) to_chat(user, span_warning("What are you going to do, jump on someone and suck their blood? You're just a head.")) return FALSE // Torpor? - if((check_flags & BP_CANT_USE_IN_TORPOR) && HAS_TRAIT(user, TRAIT_NODEATH)) + if((bloodsucker_check_flags & BP_CANT_USE_IN_TORPOR) && bloodsuckerdatum_power?.is_in_torpor()) to_chat(user, span_warning("Not while you're in Torpor.")) return FALSE - if(!(check_flags & BP_CAN_USE_TRANSFORMED) && user.has_status_effect(/datum/status_effect/shapechange_mob/from_spell)) + if(!(bloodsucker_check_flags & BP_CAN_USE_TRANSFORMED) && (user.has_status_effect(/datum/status_effect/shapechange_mob/from_spell) || user.has_status_effect(/datum/status_effect/shapechange_mob))) to_chat(user, span_warning("You can't do this while transformed!")) return FALSE // Frenzy? - if((check_flags & BP_CANT_USE_IN_FRENZY) && (bloodsuckerdatum_power?.frenzied)) + if((bloodsucker_check_flags & BP_CANT_USE_IN_FRENZY) && (bloodsuckerdatum_power?.frenzied)) to_chat(user, span_warning("You cannot use powers while in a Frenzy!")) return FALSE // Stake? - if(!(check_flags & BP_CAN_USE_WHILE_STAKED) && user.am_staked()) + if(!(bloodsucker_check_flags & BP_CAN_USE_WHILE_STAKED) && user.am_staked()) to_chat(user, span_warning("You have a stake in your chest! Your powers are useless.")) return FALSE - // Conscious? -- We use our own (AB_CHECK_CONSCIOUS) here so we can control it more, like the error message. - if((check_flags & BP_CANT_USE_WHILE_UNCONSCIOUS) && user.stat >= UNCONSCIOUS) - to_chat(user, span_warning("You can't do this while you are unconcious!")) - return FALSE - // Incapacitated? - if((check_flags & BP_CANT_USE_WHILE_INCAPACITATED) && (user.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB))) - to_chat(user, span_warning("Not while you're incapacitated!")) - return FALSE // Constant Cost (out of blood) if(constant_bloodcost > 0 && !can_pay_blood(user)) to_chat(user, span_warning("You don't have the blood to upkeep [src].")) @@ -152,15 +160,11 @@ /// NOTE: With this formula, you'll hit half cooldown at level 8 for that power. /datum/action/cooldown/bloodsucker/StartCooldown(override_cooldown_time, override_melee_cooldown_time) - // don't re-set the cooldown if we don't have a override time and there's already a cooldown ongoing - if(!override_cooldown_time && next_use_time > world.time) - return // Calculate Cooldown (by power's level) - if(power_flags & BP_AM_STATIC_COOLDOWN) - cooldown_time = initial(cooldown_time) - else - cooldown_time = max(initial(cooldown_time) / 2, initial(cooldown_time) - (initial(cooldown_time) / 16 * (level_current-1))) - + if(!(power_flags & BP_AM_STATIC_COOLDOWN)) + var/custom_cooldown = max(initial(cooldown_time) / 2, initial(cooldown_time) - (initial(cooldown_time) / 16 * (level_current-1))) + // calling parent proc with custom args + return ..(custom_cooldown, override_melee_cooldown_time) return ..() /datum/action/cooldown/bloodsucker/proc/can_pay_blood(mob/living/carbon/user) @@ -172,43 +176,64 @@ /datum/action/cooldown/bloodsucker/is_action_active() return active -/datum/action/cooldown/bloodsucker/proc/pay_cost() +/datum/action/cooldown/bloodsucker/proc/pay_cost(cost_override) // Non-bloodsuckers will pay in other ways. if(!bloodsuckerdatum_power) var/mob/living/living_owner = owner - if(!HAS_TRAIT(living_owner, TRAIT_NOBLOOD)) - living_owner.blood_volume -= bloodcost + var/blood_cost = cost_override ? cost_override : bloodcost + if(HAS_TRAIT(living_owner, TRAIT_NOBLOOD)) + living_owner.adjustBruteLoss(blood_cost * 0.1) + else + living_owner.blood_volume = max(0, living_owner.blood_volume - blood_cost) return // Bloodsuckers in a Frenzy don't have enough Blood to pay it, so just don't. if(bloodsuckerdatum_power.frenzied) return - bloodsuckerdatum_power.AdjustBloodVolume(-bloodcost) + bloodsuckerdatum_power.AdjustBloodVolume(cost_override ? -cost_override : -bloodcost) -/datum/action/cooldown/bloodsucker/proc/ActivatePower(trigger_flags) +// TODO refactor the Trigger -> PreActivate -> Activate -> ActivatePower / set_click_ability -> Activate -> ActivatePower chain +/datum/action/cooldown/bloodsucker/Activate(atom/target) + if(active) + return FALSE active = TRUE - if(power_flags & BP_AM_TOGGLE) + . = ActivatePower(target) + if(!.) + DeactivatePower(DEACTIVATE_POWER_NO_COOLDOWN) + return FALSE + if(power_flags & BP_CONTINUOUS_EFFECT || constant_bloodcost) START_PROCESSING(SSprocessing, src) owner.log_message("used [src][bloodcost != 0 ? " at the cost of [bloodcost]" : ""].", LOG_ATTACK, color="red") - build_all_button_icons() + build_all_button_icons(UPDATE_BUTTON_BACKGROUND) -/datum/action/cooldown/bloodsucker/proc/DeactivatePower() +/datum/action/cooldown/bloodsucker/proc/RightClickActivate(trigger_flags) + if(!owner) + return FALSE + +/// return TRUE if you want the ability to be considered activated, put your ability activate logic here +/datum/action/cooldown/bloodsucker/proc/ActivatePower(atom/target) + return TRUE + +/datum/action/cooldown/bloodsucker/proc/DeactivatePower(deactivate_flags) + SHOULD_CALL_PARENT(TRUE) if(!active) //Already inactive? Return - return - if(power_flags & BP_AM_TOGGLE) + return FALSE + if(power_flags & BP_CONTINUOUS_EFFECT || constant_bloodcost) STOP_PROCESSING(SSprocessing, src) - if(power_flags & BP_AM_SINGLEUSE) + if(power_flags & BP_AM_SINGLEUSE && !(deactivate_flags & DEACTIVATE_POWER_DO_NOT_REMOVE)) remove_after_use() - return + return FALSE active = FALSE - StartCooldown() - build_all_button_icons() + if(!click_to_activate && !(deactivate_flags & DEACTIVATE_POWER_NO_COOLDOWN)) + StartCooldown() + build_all_button_icons(UPDATE_BUTTON_BACKGROUND) + return TRUE -///Used by powers that are continuously active (That have BP_AM_TOGGLE flag) +///Used by powers that are scontinuously active (That have BP_CONTINUOUS_EFFECT flag) /datum/action/cooldown/bloodsucker/process(seconds_per_tick) SHOULD_CALL_PARENT(TRUE) //Need this to call parent so the cooldown system works . = ..() - if(!active || !(power_flags & BP_AM_TOGGLE)) + if(!active || !(power_flags & BP_CONTINUOUS_EFFECT)) return FALSE if(!ContinueActive(owner)) // We can't afford the Power? Deactivate it. DeactivatePower() @@ -216,17 +241,17 @@ // We can keep this up (For now), so Pay Cost! if(power_flags & BP_AM_COSTLESS_UNCONSCIOUS && owner.stat != CONSCIOUS) return TRUE + if(constant_bloodcost < 0) + return TRUE if(bloodsuckerdatum_power) bloodsuckerdatum_power.AdjustBloodVolume(-constant_bloodcost * seconds_per_tick) else - var/mob/living/living_owner = owner - if(!HAS_TRAIT(living_owner, TRAIT_NOBLOOD)) - living_owner.blood_volume -= constant_bloodcost * seconds_per_tick + pay_cost(constant_bloodcost * seconds_per_tick) return TRUE /// Checks to make sure this power can stay active /datum/action/cooldown/bloodsucker/proc/ContinueActive(mob/living/user, mob/living/target) - if(!user) + if(QDELETED(user)) return FALSE if(!constant_bloodcost > 0 || can_pay_blood(user)) return TRUE @@ -235,3 +260,36 @@ /datum/action/cooldown/bloodsucker/proc/remove_after_use() bloodsuckerdatum_power?.powers -= src Remove(owner) + +/datum/action/cooldown/bloodsucker/proc/get_power_explanation() + SHOULD_CALL_PARENT(TRUE) + . = list() + if(level_current != -1) + . += "LEVEL: [level_current] [name]:" + else + . += "(Inherent Power) [name]:" + + . += get_power_explanation_extended() + +/datum/action/cooldown/bloodsucker/proc/get_power_explanation_extended() + return list() + +/datum/action/cooldown/bloodsucker/proc/get_power_desc() + SHOULD_CALL_PARENT(TRUE) + var/new_desc = "" + if(level_current != -1) + new_desc += "
        LEVEL: [level_current]" + else + new_desc += "
        (Inherent Power)" + if(bloodcost > 0) + new_desc += "

        COST: [bloodcost] Blood" + if(constant_bloodcost > 0) + new_desc += "

        CONSTANT COST: [name] costs [constant_bloodcost] blood per second to keep it active." + if(power_flags & BP_AM_SINGLEUSE) + new_desc += "


        SINGLE USE:
        [name] can only be used once per night." + new_desc += "

        DESCRIPTION: [get_power_desc_extended()]" + new_desc += "
        " + return new_desc + +/datum/action/cooldown/bloodsucker/proc/get_power_desc_extended() + return initial(desc) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/cloak.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/cloak.dm index 881bd279bdb85..ec46a3bc82490 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/cloak.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/cloak.dm @@ -1,3 +1,7 @@ + +#define USE_SEEN_CLOAK_LEVEL 2 +#define USE_RUN_CLOAK_LEVEL 4 + /datum/action/cooldown/bloodsucker/cloak name = "Cloak of Darkness" desc = "Blend into the shadows and become invisible to the untrained and Artificial eye." @@ -6,10 +10,12 @@ Activate this Power in the shadows and you will slowly turn nearly invisible.\n\ While using Cloak of Darkness, attempting to run will crush you.\n\ Additionally, while Cloak is active, you are completely invisible to the AI.\n\ - Higher levels will increase how invisible you are." - power_flags = BP_AM_TOGGLE - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_UNCONSCIOUS - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + Higher levels will increase how invisible you are.\n\ + At level 2, you will no longer need to be unseen to activate this power.\n\ + At level 4, you will be able to run while cloaked." + power_flags = BP_CONTINUOUS_EFFECT + check_flags = AB_CHECK_CONSCIOUS + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 5 constant_bloodcost = 0.2 cooldown_time = 5 SECONDS @@ -20,19 +26,26 @@ . = ..() if(!.) return FALSE - for(var/mob/living/watchers in view(9, owner) - owner) - owner.balloon_alert(owner, "you can only vanish unseen.") - return FALSE + if(level_current < USE_SEEN_CLOAK_LEVEL) + for(var/mob/living/watcher in oviewers(9, owner)) + if(!watcher.mind) + continue + if(!can_see(watcher, owner)) + continue + if(IS_BLOODSUCKER(watcher) || IS_GHOUL(watcher)) + continue + owner.balloon_alert(owner, "you can only vanish unseen.") + return FALSE return TRUE -/datum/action/cooldown/bloodsucker/cloak/ActivatePower(trigger_flags) - . = ..() +/datum/action/cooldown/bloodsucker/cloak/ActivatePower(atom/target) var/mob/living/user = owner was_running = (user.move_intent == MOVE_INTENT_RUN) - if(was_running) + if(level_current < USE_RUN_CLOAK_LEVEL && was_running) user.toggle_move_intent() user.AddElement(/datum/element/digitalcamo) user.balloon_alert(user, "cloak turned on.") + return TRUE /datum/action/cooldown/bloodsucker/cloak/process(seconds_per_tick) // Checks that we can keep using this. @@ -44,10 +57,10 @@ var/mob/living/user = owner animate(user, alpha = max(25, owner.alpha - min(75, 10 + 5 * level_current)), time = 1.5 SECONDS) // Prevents running while on Cloak of Darkness - if(user.move_intent != MOVE_INTENT_WALK) + if(level_current < USE_RUN_CLOAK_LEVEL && user.move_intent != MOVE_INTENT_WALK) owner.balloon_alert(owner, "you attempt to run, crushing yourself.") user.toggle_move_intent() - user.adjustBruteLoss(rand(5,15)) + user.adjustBruteLoss(rand(5, 15)) /datum/action/cooldown/bloodsucker/cloak/ContinueActive(mob/living/user, mob/living/target) . = ..() @@ -59,11 +72,13 @@ return FALSE return TRUE -/datum/action/cooldown/bloodsucker/cloak/DeactivatePower() +/datum/action/cooldown/bloodsucker/cloak/DeactivatePower(deactivate_flags) + . = ..() + if(!.) + return var/mob/living/user = owner animate(user, alpha = 255, time = 1 SECONDS) user.RemoveElement(/datum/element/digitalcamo) - if(was_running && user.move_intent == MOVE_INTENT_WALK) + if(level_current < USE_RUN_CLOAK_LEVEL && was_running && user.move_intent == MOVE_INTENT_WALK) user.toggle_move_intent() user.balloon_alert(user, "cloak turned off.") - return ..() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/feed.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/feed.dm index 765a1002c586f..2e3d992dfd823 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/feed.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/feed.dm @@ -5,17 +5,19 @@ name = "Feed" desc = "Feed blood off of a living creature." button_icon_state = "power_feed" - power_explanation = "Feed:\n\ - Activate Feed while next to someone and you will begin to feed blood off of them.\n\ - The time needed before you start feeding speeds up the higher level you are.\n\ - Feeding off of someone while you have them aggressively grabbed will put them to sleep.\n\ - While feeding, you can't speak, as your mouth is covered.\n\ - Feeding while nearby (2 tiles away from) a mortal who is unaware of Bloodsuckers' existence, will cause a Masquerade Infraction\n\ - If you get too many Masquerade Infractions, you will break the Masquerade.\n\ - If you are in desperate need of blood, mice can be fed off of, at a cost.\n\ - You must use the ability again to stop sucking blood." - power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS|BP_CAN_USE_WHILE_STAKED + power_explanation = list( + "Activate Feed while next to someone and you will begin to feed blood off of them.", + "The time needed before you start feeding speeds up the higher level you are.", + "Feeding off of someone while you have them aggressively grabbed will put them to sleep.", + "While feeding, you can't speak, as your mouth is covered.", + "Feeding while nearby (2 tiles away from) a mortal who is unaware of Bloodsuckers' existence, will cause a Masquerade Infraction", + "If you get too many Masquerade Infractions, you will break the Masquerade.", + "If you are in desperate need of blood, mice can be fed off of, at a cost.", + "You must use the ability again to stop sucking blood.", + ) + level_current = -1 // scales itself based on your actual level, since you always have it + power_flags = BP_CONTINUOUS_EFFECT|BP_AM_STATIC_COOLDOWN + bloodsucker_check_flags = BP_CANT_USE_IN_TORPOR|BP_CAN_USE_WHILE_STAKED|BP_CAN_USE_HEARTLESS purchase_flags = BLOODSUCKER_DEFAULT_POWER bloodcost = 0 cooldown_time = 15 SECONDS @@ -31,13 +33,30 @@ var/silent_feed = TRUE ///Have we notified you already that you are at maximum blood? var/notified_overfeeding = FALSE + ///assoc list of weakrefs to targets and how much blood we've taken from them. + var/list/targets_and_blood = list() + +/datum/action/cooldown/bloodsucker/feed/get_power_explanation_extended() + . = list() + . += "Activate Feed while next to someone and you will begin to feed blood off of them." + . += "The time needed before you start feeding is [DisplayTimeText(FEED_DEFAULT_TIMER)]." + . += "Feeding off of someone while you have them aggressively grabbed will put them to sleep for [DisplayTimeText(get_sleep_time())]." + . += "While feeding, you can't speak, as you are using your mouth to drink blood." + . += "Feeding while nearby ([FEED_NOTICE_RANGE] tiles away from) a mortal who is unaware of Bloodsuckers' existence, will cause a Masquerade Infraction" + . += "If you get too many Masquerade Infractions, you will break the Masquerade." + . += "If you are in desperate need of blood, mice can be fed off of, at a cost to your humanity." + . += "You must use the ability again to stop sucking blood." /datum/action/cooldown/bloodsucker/feed/can_use(mob/living/carbon/user, trigger_flags) . = ..() if(!.) return FALSE if(target_ref) //already sucking blood. - return FALSE + if(!ContinueActive(user, target_ref?.resolve(), !silent_feed, !silent_feed)) + target_ref = null + else + owner.balloon_alert(owner, "already feeding!") + return FALSE if(user.is_mouth_covered() && !isplasmaman(user)) owner.balloon_alert(owner, "mouth covered!") return FALSE @@ -57,11 +76,20 @@ return FALSE return TRUE -/datum/action/cooldown/bloodsucker/feed/DeactivatePower() +/datum/action/cooldown/bloodsucker/feed/DeactivatePower(deactivate_flags) + // run before parent checks just to ensure that this always gets cleaned up + UnregisterSignal(owner, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE) + REMOVE_TRAIT(owner, TRAIT_IMMOBILIZED, FEED_TRAIT) + REMOVE_TRAIT(owner, TRAIT_MUTE, FEED_TRAIT) + . = ..() + if(!.) + return var/mob/living/user = owner var/mob/living/feed_target = target_ref?.resolve() - UnregisterSignal(user, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE) - if(isnull(feed_target)) + + if(!blood_taken) + return + if(isnull(feed_target) && blood_taken) log_combat(user, user, "fed on blood (target not found)", addition="(and took [blood_taken] blood)") else log_combat(user, feed_target, "fed on blood", addition="(and took [blood_taken] blood)") @@ -73,14 +101,17 @@ target_ref = null warning_target_bloodvol = initial(warning_target_bloodvol) blood_taken = initial(blood_taken) - REMOVE_TRAIT(user, TRAIT_IMMOBILIZED, FEED_TRAIT) - REMOVE_TRAIT(user, TRAIT_MUTE, FEED_TRAIT) notified_overfeeding = initial(notified_overfeeding) - return ..() -/datum/action/cooldown/bloodsucker/feed/ActivatePower(trigger_flags) +/datum/action/cooldown/bloodsucker/feed/ActivatePower(atom/target) + // if this happens this means that we didn't properly deactivate the power + if(HAS_TRAIT_FROM(owner, TRAIT_IMMOBILIZED, FEED_TRAIT) || HAS_TRAIT_FROM(owner, TRAIT_MUTE, FEED_TRAIT)) + DeactivatePower() silent_feed = TRUE - var/mob/living/feed_target = target_ref.resolve() + var/mob/living/feed_target = target_ref?.resolve() + if(!feed_target) + DeactivatePower() + return FALSE if(istype(feed_target, /mob/living/basic/mouse)) to_chat(owner, span_notice("You recoil at the taste of a lesser lifeform.")) if(bloodsuckerdatum_power.my_clan && bloodsuckerdatum_power.my_clan.blood_drink_type != BLOODSUCKER_DRINK_INHUMANELY) @@ -88,22 +119,22 @@ user.add_mood_event("drankblood", /datum/mood_event/drankblood_bad) bloodsuckerdatum_power.AddHumanityLost(1) bloodsuckerdatum_power.AdjustBloodVolume(25) - DeactivatePower() feed_target.death() - return - var/feed_timer = clamp(round(FEED_DEFAULT_TIMER / (1.25 * (level_current || 1))), 1, FEED_DEFAULT_TIMER) + StartCooldown() + return FALSE + var/feed_timer = get_feed_start_time() if(bloodsuckerdatum_power.frenzied) - feed_timer = 2 SECONDS + feed_timer = min(2 SECONDS, feed_timer) owner.balloon_alert(owner, "feeding off [feed_target]...") owner.face_atom(feed_target) if(!do_after(owner, feed_timer, feed_target, hidden = TRUE)) owner.balloon_alert(owner, "feed stopped") - DeactivatePower() - return + target_ref = null + return FALSE if(owner.pulling == feed_target && owner.grab_state >= GRAB_AGGRESSIVE) - if(!IS_BLOODSUCKER(feed_target) && !IS_VASSAL(feed_target) && !IS_MONSTERHUNTER(feed_target)) - feed_target.Unconscious((5 + level_current) SECONDS) + if(!IS_BLOODSUCKER(feed_target) && !IS_GHOUL(feed_target) && !IS_MONSTERHUNTER(feed_target)) + feed_target.Unconscious(get_sleep_time()) if(!feed_target.density) feed_target.Move(owner.loc) owner.visible_message( @@ -128,7 +159,7 @@ continue if(watchers.is_blind() || watchers.is_nearsighted_currently()) continue - if(IS_BLOODSUCKER(watchers) || IS_VASSAL(watchers) || HAS_TRAIT(watchers.mind, TRAIT_BLOODSUCKER_HUNTER)) + if(IS_BLOODSUCKER(watchers) || IS_GHOUL(watchers) || HAS_TRAIT(watchers.mind, TRAIT_BLOODSUCKER_HUNTER)) continue owner.balloon_alert(owner, "feed noticed!") bloodsuckerdatum_power.give_masquerade_infraction() @@ -137,13 +168,16 @@ ADD_TRAIT(owner, TRAIT_MUTE, FEED_TRAIT) ADD_TRAIT(owner, TRAIT_IMMOBILIZED, FEED_TRAIT) RegisterSignal(owner, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(notify_move_block)) - return ..() + return TRUE /datum/action/cooldown/bloodsucker/feed/process(seconds_per_tick) if(!active) //If we aren't active (running on SSfastprocess) return ..() //Manage our cooldown timers var/mob/living/user = owner - var/mob/living/feed_target = target_ref.resolve() + var/mob/living/feed_target = target_ref?.resolve() + if(!feed_target) + DeactivatePower() + return if(!ContinueActive(user, feed_target, !silent_feed, !silent_feed)) if(!silent_feed) user.visible_message( @@ -174,7 +208,11 @@ feed_strength_mult = 1 else feed_strength_mult = 0.3 - blood_taken += bloodsuckerdatum_power.handle_feeding(feed_target, feed_strength_mult, level_current) + var/already_drunk = targets_and_blood[target_ref] || 0 + var/blood_eaten = bloodsuckerdatum_power.handle_feeding(feed_target, feed_strength_mult, level_current, already_drunk) + blood_taken += blood_eaten + targets_and_blood[target_ref] += blood_eaten + decrement_blood_drunk(blood_eaten * 0.5) if(feed_strength_mult > 5 && feed_target.stat < DEAD) user.add_mood_event("drankblood", /datum/mood_event/drankblood) @@ -212,7 +250,7 @@ if(owner.pulling && isliving(owner.pulling)) if(!can_feed_from(owner.pulling, give_warnings = TRUE)) return FALSE - target_ref = WEAKREF(owner.pulling) + set_target(owner.pulling) return TRUE var/list/close_living_mobs = list() @@ -227,16 +265,30 @@ //Check living first for(var/mob/living/suckers in close_living_mobs) if(can_feed_from(suckers)) - target_ref = WEAKREF(suckers) + set_target(suckers) return TRUE //If not, check dead for(var/mob/living/suckers in close_dead_mobs) if(can_feed_from(suckers)) - target_ref = WEAKREF(suckers) + set_target(suckers) return TRUE //No one to suck blood from. return FALSE +// this lets us compare and access things by weakrefs, if we use the actual same weakref instance in the assoc list +/datum/action/cooldown/bloodsucker/feed/proc/set_target(mob/living/target) + if(!length(targets_and_blood)) + target_ref = WEAKREF(target) + return + + for(var/datum/weakref/weakref as anything in targets_and_blood) + var/mob/living/old_target = weakref.resolve() + if(old_target == target) + target_ref = weakref + break + if(!target_ref) + target_ref = WEAKREF(target) + /datum/action/cooldown/bloodsucker/feed/proc/can_feed_from(mob/living/target, give_warnings = FALSE) if(istype(target, /mob/living/basic/mouse)) if(bloodsuckerdatum_power.my_clan && bloodsuckerdatum_power.my_clan.blood_drink_type == BLOODSUCKER_DRINK_SNOBBY) @@ -261,18 +313,35 @@ if(give_warnings) owner.balloon_alert(owner, "cant drink from mindless!") return FALSE - if(target_user.has_reagent(/datum/reagent/consumable/garlic, 20)) + if(target_user.has_reagent(/datum/reagent/consumable/garlic, 5)) if(give_warnings) owner.balloon_alert(owner, "too much garlic!") return FALSE return TRUE +/datum/action/cooldown/bloodsucker/feed/proc/get_sleep_time() + return (5 + bloodsuckerdatum_power?.GetRank() || 1) SECONDS + +/datum/action/cooldown/bloodsucker/feed/proc/get_feed_start_time() + return clamp(round(FEED_DEFAULT_TIMER / (1.25 * (bloodsuckerdatum_power?.GetRank() || 1))), 1, FEED_DEFAULT_TIMER) + /datum/action/cooldown/bloodsucker/feed/proc/notify_move_block() SIGNAL_HANDLER + if(!active) + DeactivatePower() + return if (!COOLDOWN_FINISHED(src, feed_movement_notify_cooldown)) return COOLDOWN_START(src, feed_movement_notify_cooldown, 3 SECONDS) owner.balloon_alert(owner, "you cannot move while feeding! Click the power to stop.") +/datum/action/cooldown/bloodsucker/feed/proc/decrement_blood_drunk(amount = 0) + for(var/datum/weakref/weakref as anything in targets_and_blood) + if(weakref == target_ref) + continue + targets_and_blood[weakref] = max(0, targets_and_blood[weakref] - amount) + if(targets_and_blood[weakref] <= 0) + targets_and_blood -= weakref + #undef FEED_NOTICE_RANGE #undef FEED_DEFAULT_TIMER diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/fortitude.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/fortitude.dm index 002c18419affc..aac1c8afbdbcc 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/fortitude.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/fortitude.dm @@ -1,40 +1,69 @@ +#define FORTITUDE_STUN_IMMUNITY_LEVEL 4 /datum/action/cooldown/bloodsucker/fortitude name = "Fortitude" - desc = "Withstand egregious physical wounds and walk away from attacks that would stun, pierce, and dismember lesser beings." + desc = "Withstand egregious physical wounds and walk away from attacks that would stun, pierce, and dismember lesser beings, but will render you unable to heal." button_icon_state = "power_fortitude" - power_explanation = "Fortitude:\n\ - Activating Fortitude will provide pierce, stun and dismember immunity.\n\ - You will additionally gain resistance to both physical and stamina damage, scaling with level.\n\ - While using Fortitude, attempting to run will crush you.\n\ - At level 4, you gain complete stun immunity.\n\ - Higher levels will increase Brute and Stamina resistance." - power_flags = BP_AM_TOGGLE|BP_AM_COSTLESS_UNCONSCIOUS + power_flags = BP_CONTINUOUS_EFFECT|BP_AM_COSTLESS_UNCONSCIOUS check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY + cooldown_time = 20 SECONDS bloodcost = 30 - cooldown_time = 8 SECONDS constant_bloodcost = 0.2 var/was_running var/fortitude_resist // So we can raise and lower your brute resist based on what your level_current WAS. + var/list/trigger_listening = list() + var/traits_to_add = list(TRAIT_PIERCEIMMUNE, TRAIT_NODISMEMBER, TRAIT_PUSHIMMUNE) -/datum/action/cooldown/bloodsucker/fortitude/ActivatePower(trigger_flags) - . = ..() +/datum/action/cooldown/bloodsucker/fortitude/get_power_explanation_extended() + . = list() + . += "Fortitude will provide pierce, stun and dismember immunity." + . += "You will additionally gain resistance to both brute, burn and stamina damage, scaling with level." + . += "Fortitude will make you receive [GetFortitudeResist() * 10]% less brute and and stamina and [GetBurnResist() * 10]% less burn damage." + . += "While using Fortitude, attempting to run will crush you." + . += "At level [FORTITUDE_STUN_IMMUNITY_LEVEL], you gain complete stun immunity." + . += "Higher levels will increase Brute and Stamina resistance." + +/datum/action/cooldown/bloodsucker/fortitude/ActivatePower(atom/target) owner.balloon_alert(owner, "fortitude turned on.") to_chat(owner, span_notice("Your flesh, skin, and muscles become as steel.")) // Traits & Effects - owner.add_traits(list(TRAIT_PIERCEIMMUNE, TRAIT_NODISMEMBER, TRAIT_PUSHIMMUNE), BLOODSUCKER_TRAIT) - if(level_current >= 4) - ADD_TRAIT(owner, TRAIT_STUNIMMUNE, BLOODSUCKER_TRAIT) // They'll get stun resistance + this, who cares. + owner.add_traits(traits_to_add, BLOODSUCKER_TRAIT) + if(level_current >= FORTITUDE_STUN_IMMUNITY_LEVEL) + ADD_TRAIT(owner, TRAIT_STUNIMMUNE, BLOODSUCKER_TRAIT) var/mob/living/carbon/human/bloodsucker_user = owner - if(IS_BLOODSUCKER(owner) || IS_VASSAL(owner)) - fortitude_resist = max(0.3, 0.7 - level_current * 0.1) + if(IS_BLOODSUCKER(owner) || IS_GHOUL(owner)) + fortitude_resist = GetFortitudeResist() bloodsucker_user.physiology.brute_mod *= fortitude_resist - bloodsucker_user.physiology.burn_mod *= fortitude_resist + 0.2 + bloodsucker_user.physiology.burn_mod *= GetBurnResist() bloodsucker_user.physiology.stamina_mod *= fortitude_resist was_running = (bloodsucker_user.move_intent == MOVE_INTENT_RUN) if(was_running) bloodsucker_user.toggle_move_intent() + for(var/power in bloodsuckerdatum_power.powers) + if(!istype(power, /datum/action/cooldown/bloodsucker/targeted/haste)) + continue + RegisterSignal(power, COMSIG_FIRE_TARGETED_POWER, PROC_REF(on_action_trigger)) + trigger_listening += power + RegisterSignal(owner, COMSIG_LIVING_ADJUST_BRUTE_DAMAGE, PROC_REF(on_heal)) + RegisterSignal(owner, COMSIG_LIVING_ADJUST_BURN_DAMAGE, PROC_REF(on_heal)) + return TRUE + +/datum/action/cooldown/bloodsucker/fortitude/proc/on_heal(mob/current_mob, type, amount, forced) + if(!forced && active && amount < 0) + return COMPONENT_IGNORE_CHANGE + return NONE + +/datum/action/cooldown/bloodsucker/fortitude/proc/on_action_trigger(datum/action, mob/target) + SIGNAL_HANDLER + addtimer(CALLBACK(src, PROC_REF(DeactivatePower)), 1 SECONDS) + return TRUE + +/datum/action/cooldown/bloodsucker/fortitude/proc/GetFortitudeResist() + return max(0.3, 0.7 - level_current * 0.05) + +/datum/action/cooldown/bloodsucker/fortitude/proc/GetBurnResist() + return GetFortitudeResist() + 0.2 /datum/action/cooldown/bloodsucker/fortitude/process(seconds_per_tick) // Checks that we can keep using this. @@ -53,18 +82,25 @@ if(user.buckled && istype(user.buckled, /obj/vehicle)) user.buckled.unbuckle_mob(src, force=TRUE) -/datum/action/cooldown/bloodsucker/fortitude/DeactivatePower() - if(!ishuman(owner)) +/datum/action/cooldown/bloodsucker/fortitude/DeactivatePower(deactivate_flags) + if(length(trigger_listening)) + for(var/power in trigger_listening) + UnregisterSignal(power, COMSIG_FIRE_TARGETED_POWER) + trigger_listening -= power + . = ..() + if(!. || !ishuman(owner)) return var/mob/living/carbon/human/bloodsucker_user = owner - if(IS_BLOODSUCKER(owner) || IS_VASSAL(owner)) + if(IS_BLOODSUCKER(owner) || IS_GHOUL(owner) && fortitude_resist) bloodsucker_user.physiology.brute_mod /= fortitude_resist bloodsucker_user.physiology.burn_mod /= fortitude_resist + 0.2 bloodsucker_user.physiology.stamina_mod /= fortitude_resist // Remove Traits & Effects - owner.remove_traits(list(TRAIT_PIERCEIMMUNE, TRAIT_NODISMEMBER, TRAIT_PUSHIMMUNE, TRAIT_STUNIMMUNE), BLOODSUCKER_TRAIT) + owner.remove_traits(traits_to_add, BLOODSUCKER_TRAIT) if(was_running && bloodsucker_user.move_intent == MOVE_INTENT_WALK) bloodsucker_user.toggle_move_intent() owner.balloon_alert(owner, "fortitude turned off.") + fortitude_resist = 1 + UnregisterSignal(owner, list(COMSIG_LIVING_ADJUST_BRUTE_DAMAGE, COMSIG_LIVING_ADJUST_BURN_DAMAGE)) return ..() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/gohome.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/gohome.dm index c5deef2999d00..9f1ebad3c3065 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/gohome.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/gohome.dm @@ -10,21 +10,18 @@ */ /datum/action/cooldown/bloodsucker/gohome name = "Vanishing Act" - desc = "As dawn aproaches, disperse into mist and return directly to your Lair.
        WARNING: You will drop ALL of your possessions if observed by mortals." + desc = "As dawn aproaches, disperse into mist and return directly to your Haven.
        WARNING: You will drop ALL of your possessions if observed by mortals." button_icon_state = "power_gohome" active_background_icon_state = "vamp_power_off_oneshot" base_background_icon_state = "vamp_power_off_oneshot" - power_explanation = "Vanishing Act: \n\ - Activating Vanishing Act will, after a short delay, teleport the user to their Claimed Coffin. \n\ - The power will cancel out if the Claimed Coffin is somehow destroyed. \n\ - Immediately after activating, lights around the user will begin to flicker. \n\ - Once the user teleports to their coffin, in their place will be a Rat or Bat." - power_flags = BP_AM_TOGGLE|BP_AM_SINGLEUSE|BP_AM_STATIC_COOLDOWN - check_flags = BP_CANT_USE_IN_FRENZY + power_flags = BP_CONTINUOUS_EFFECT|BP_AM_SINGLEUSE|BP_AM_STATIC_COOLDOWN + bloodsucker_check_flags = BP_CANT_USE_IN_FRENZY + check_flags = NONE purchase_flags = NONE bloodcost = 100 - constant_bloodcost = 2 - cooldown_time = 100 SECONDS + cooldown_time = 10 SECONDS + power_activates_immediately = FALSE + level_current = -1 ///What stage of the teleportation are we in var/teleporting_stage = GOHOME_START @@ -34,19 +31,34 @@ /mob/living/basic/bat = 1, ) +/datum/action/cooldown/bloodsucker/gohome/get_power_explanation_extended() + . = list() + . += "Vanishing Act will, after a short delay, teleport the user to their Claimed Coffin." + . += "The user will drop all belongings if seen by a mortal." + . += "The power will cancel out if the Claimed Coffin is somehow destroyed." + . += "Immediately after activating, lights around the user will begin to flicker." + . += "Once the user teleports to their coffin, in their place will be a Rat or Bat." + /datum/action/cooldown/bloodsucker/gohome/can_use(mob/living/carbon/user, trigger_flags) . = ..() if(!.) return FALSE - /// Have No Lair (NOTE: You only got this power if you had a lair, so this means it's destroyed) + /// Have No Haven (NOTE: You only got this power if you had a haven, so this means it's destroyed) if(!istype(bloodsuckerdatum_power) || !bloodsuckerdatum_power.coffin) owner.balloon_alert(owner, "coffin was destroyed!") return FALSE return TRUE -/datum/action/cooldown/bloodsucker/gohome/ActivatePower(trigger_flags) - . = ..() +/datum/action/cooldown/bloodsucker/gohome/ActivatePower(atom/target) owner.balloon_alert(owner, "preparing to teleport...") + return TRUE + +/datum/action/cooldown/bloodsucker/gohome/DeactivatePower(deactivate_flags) + if(active && teleporting_stage != GOHOME_TELEPORT) + owner.balloon_alert(owner, "teleportation cancelled.") + teleporting_stage = GOHOME_START + return . = ..(DEACTIVATE_POWER_DO_NOT_REMOVE) + . = ..() /datum/action/cooldown/bloodsucker/gohome/process(seconds_per_tick) . = ..() @@ -87,27 +99,22 @@ // If we aren't in the dark, anyone watching us will cause us to drop out stuff if(current_turf && current_turf.lighting_object && current_turf.get_lumcount() >= 0.2) for(var/mob/living/watchers in viewers(world.view, get_turf(user)) - user) - if(!watchers.client) + if(QDELETED(watchers.client) || watchers.stat != CONSCIOUS) continue if(watchers.has_unlimited_silicon_privilege) continue if(watchers.is_blind()) continue - if(!IS_BLOODSUCKER(watchers) && !IS_VASSAL(watchers)) + if(!IS_BLOODSUCKER(watchers) && !IS_GHOUL(watchers)) drop_item = TRUE break // Drop all necessary items (handcuffs, legcuffs, items if seen) - if(user.handcuffed) - var/obj/item/handcuffs = user.handcuffed - user.dropItemToGround(handcuffs) - if(user.legcuffed) - var/obj/item/legcuffs = user.legcuffed - user.dropItemToGround(legcuffs) + user.uncuff() if(drop_item) for(var/obj/item/literally_everything in owner) owner.dropItemToGround(literally_everything, TRUE) - playsound(current_turf, 'sound/magic/summon_karp.ogg', 60, 1) + playsound(current_turf, 'sound/effects/magic/summon_karp.ogg', 60, 1) var/datum/effect_system/steam_spread/bloodsucker/puff = new /datum/effect_system/steam_spread/bloodsucker() puff.set_up(3, 0, current_turf) @@ -122,6 +129,7 @@ bloodsuckerdatum_power.coffin.force_enter(user) DeactivatePower() + pay_cost() /datum/effect_system/steam_spread/bloodsucker effect_type = /obj/effect/particle_effect/fluid/smoke/vampsmoke diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/masquerade.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/masquerade.dm index ff13b9b7f15e1..9c6e43fb53f4a 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/masquerade.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/masquerade.dm @@ -14,22 +14,25 @@ name = "Masquerade" desc = "Feign the vital signs of a mortal, and escape both casual and medical notice as the monster you truly are." button_icon_state = "power_human" - power_explanation = "Masquerade:\n\ - Activating Masquerade will forge your identity to be practically identical to that of a human;\n\ - - You lose nearly all Bloodsucker benefits, including healing, sleep, radiation, crit, virus, gutting and cold immunity.\n\ - - Your eyes turn to that of a regular human as your heart begins to beat.\n\ - - You gain a Genetic sequence, and appear to have 100% blood when scanned by a Health Analyzer.\n\ - - You will not appear as Pale when examined. Anything further than Pale, however, will not be hidden.\n\ - At the end of a Masquerade, you will re-gain your Vampiric abilities, as well as lose any diseases you might have." - power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN|BP_AM_COSTLESS_UNCONSCIOUS - check_flags = BP_CANT_USE_IN_FRENZY + power_flags = BP_CONTINUOUS_EFFECT|BP_AM_STATIC_COOLDOWN|BP_AM_COSTLESS_UNCONSCIOUS + check_flags = NONE + bloodsucker_check_flags = BP_CANT_USE_IN_FRENZY purchase_flags = BLOODSUCKER_DEFAULT_POWER bloodcost = 10 + level_current = -1 cooldown_time = 5 SECONDS constant_bloodcost = 0.1 -/datum/action/cooldown/bloodsucker/masquerade/ActivatePower(trigger_flags) - . = ..() +/datum/action/cooldown/bloodsucker/masquerade/get_power_explanation_extended() + . = list() + . += "Masquerade will forge your identity to be practically identical to that of a human." + . += "- You lose nearly all Bloodsucker benefits, including healing, sleep, radiation, crit, virus, gutting and cold immunity." + . += "- Your eyes turn to that of a regular human as your heart begins to beat." + . += "- You gain a Genetic sequence, and appear to have 100% blood when scanned by a Health Analyzer." + . += "- You will not appear as Pale when examined. Anything further than Pale, however, will not be hidden." + . += "At the end of a Masquerade, you will re-gain your Vampiric abilities, as well as lose any diseases you might have." + +/datum/action/cooldown/bloodsucker/masquerade/ActivatePower(atom/target) var/mob/living/carbon/user = owner owner.balloon_alert(owner, "masquerade turned on.") to_chat(user, span_notice("Your heart beats falsely within your lifeless chest, and your eyes are no longer sensitive to the light. You may yet pass for a mortal.")) @@ -40,7 +43,7 @@ // Handle Traits user.remove_traits(bloodsuckerdatum_power.bloodsucker_traits, BLOODSUCKER_TRAIT) - + ADD_TRAIT(user, TRAIT_MASQUERADE, BLOODSUCKER_TRAIT) var/obj/item/bodypart/chest/target_chest = user.get_bodypart(BODY_ZONE_CHEST) if(target_chest) @@ -55,10 +58,13 @@ eyes.color_cutoffs = initial(eyes.color_cutoffs) eyes.sight_flags = initial(eyes.sight_flags) user.update_sight() + return TRUE /// todo, make bloodsuckerification into it's own proc, ie, eyes, traits, and such -/datum/action/cooldown/bloodsucker/masquerade/DeactivatePower() +/datum/action/cooldown/bloodsucker/masquerade/DeactivatePower(deactivate_flags) . = ..() // activate = FALSE + if(!.) + return var/mob/living/carbon/user = owner owner.balloon_alert(owner, "masquerade turned off.") diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/_powers_targeted.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/_powers_targeted.dm index 629d0c8dbeeaa..996adbf3705fd 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/_powers_targeted.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/_powers_targeted.dm @@ -1,54 +1,55 @@ // NOTE: All Targeted spells are Toggles! We just don't bother checking here. /datum/action/cooldown/bloodsucker/targeted - power_flags = BP_AM_TOGGLE - + power_flags = NONE + click_to_activate = TRUE ///If set, how far the target has to be for the power to work. var/target_range ///Message sent to chat when clicking on the power, before you use it. var/prefire_message - ///Most powers happen the moment you click. Some, like Mesmerize, require time and shouldn't cost you if they fail. - var/power_activates_immediately = TRUE ///Is this power LOCKED due to being used? var/power_in_use = FALSE /// Modify description to add notice that this is aimed. -/datum/action/cooldown/bloodsucker/targeted/New(Target) - desc += "
        \[Targeted Power\]" - return ..() - -/datum/action/cooldown/bloodsucker/targeted/Remove(mob/living/remove_from) +/datum/action/cooldown/bloodsucker/targeted/get_power_desc() . = ..() - if(remove_from.click_intercept == src) - unset_click_ability(remove_from) + var/current_desc = "
        \[Targeted Power\]" + if(target_range) + current_desc += "
        Cast Range: [target_range]
        " + current_desc += . + return current_desc -/datum/action/cooldown/bloodsucker/targeted/Trigger(trigger_flags, atom/target) - if((active) && can_deactivate()) - DeactivatePower() - return FALSE - if(!can_pay_cost(owner) || !can_use(owner, trigger_flags)) - return FALSE - if(prefire_message) - to_chat(owner, span_announce("[prefire_message]")) +// *Don't read this if you don't care about how actions work.* +// Actions are a wee complicated, but for anyone else who's going to take a look at this, let me explain. +// Actions start at Trigger, which is/ called by the client clicking the action button, +// if it's a targeted power, like this one here, it will call set_click_ability, +// which will set up the click interception. Thus clicking will call Trigger again, but with a target this time. +// Otherwise, if click_to_activate is false, it will simply always call Trigger without a target, +// and call PreActivate, which then calls Activate. +// For this ability, we call InterceptClickOn to trigger the ability with a target, as we want +// to be able to use trigger_flags, which Activate doesn't have. - ActivatePower(trigger_flags) - if(target) - return InterceptClickOn(owner, null, target) - return set_click_ability(owner) +// If click_to_activate is true, only these two procs are called when the ability is clicked on +/datum/action/cooldown/bloodsucker/targeted/set_click_ability(mob/on_who) + // activate runs before + if(!PreActivate()) + return + . = ..() + if(prefire_message) + to_chat(owner, span_announce("[prefire_message]")) -/datum/action/cooldown/bloodsucker/targeted/DeactivatePower() - if(power_flags & BP_AM_TOGGLE) - STOP_PROCESSING(SSprocessing, src) - active = FALSE - build_all_button_icons() - unset_click_ability(owner) -// ..() // we don't want to pay cost here +/datum/action/cooldown/bloodsucker/targeted/unset_click_ability(mob/on_who, refund_cooldown) + . = ..() + if(active) //todo refactor active into is_action_active() + DeactivatePower() /// Check if target is VALID (wall, turf, or character?) /datum/action/cooldown/bloodsucker/targeted/proc/CheckValidTarget(atom/target_atom) if(target_atom == owner) return FALSE + if(!target_atom) + return FALSE return TRUE /// Check if valid target meets conditions @@ -56,37 +57,63 @@ if(target_range) // Out of Range if(!(target_atom in view(target_range, owner))) - if(target_range > 1) // Only warn for range if it's greater than 1. Brawn doesn't need to announce itself. + if(target_range > 1) // Only warn for range if it's greater than 1 owner.balloon_alert(owner, "out of range.") return FALSE return istype(target_atom) /// Click Target -/datum/action/cooldown/bloodsucker/targeted/proc/click_with_power(atom/target_atom) +/datum/action/cooldown/bloodsucker/targeted/PreActivate(atom/target) + if(!target) + return ..() // CANCEL RANGED TARGET check - if(power_in_use || !CheckValidTarget(target_atom)) + if(power_in_use || !CheckValidTarget(target)) return FALSE // Valid? (return true means DON'T cancel power!) - if(!can_pay_cost() || !can_use(owner) || !CheckCanTarget(target_atom)) - return TRUE - power_in_use = TRUE // Lock us into this ability until it successfully fires off. Otherwise, we pay the blood even if we fail. - FireTargetedPower(target_atom) // We use this instead of ActivatePower(trigger_flags), which has no input - // Skip this part so we can return TRUE right away. + if(!can_pay_cost() || !can_use(owner) || !CheckCanTarget(target)) + return FALSE if(power_activates_immediately) - power_activated_sucessfully() // Mesmerize pays only after success. + PowerActivatedSuccesfully() // Mesmerize pays only after success. power_in_use = FALSE return TRUE -/// Like ActivatePower, but specific to Targeted (and takes an atom input). We don't use ActivatePower for targeted. -/datum/action/cooldown/bloodsucker/targeted/proc/FireTargetedPower(atom/target_atom) - log_combat(owner, target_atom, "used [name] on") +/datum/action/cooldown/bloodsucker/targeted/proc/FireTargetedPower(atom/target, params) + return FALSE + +/// Called on right click +/datum/action/cooldown/bloodsucker/targeted/proc/FireSecondaryTargetedPower(atom/target, params) + return FireTargetedPower(target, params) + +/datum/action/cooldown/bloodsucker/targeted/ActivatePower(atom/target) + . = ..() + if(!target) + return . + log_combat(owner, target, "used [name] on [target].") + return TRUE + +/datum/action/cooldown/bloodsucker/targeted/DeactivatePower(deactivate_flags) + . = ..() + if(!.) + return + // sometimes things will call DeactivatePower, but not unset_click_ability, so we have to unset the click interception here. + if(owner.click_intercept == src) // TODO test if this is no longer needed + owner.click_intercept = null /// The power went off! We now pay the cost of the power. -/datum/action/cooldown/bloodsucker/targeted/proc/power_activated_sucessfully() +/datum/action/cooldown/bloodsucker/targeted/proc/PowerActivatedSuccesfully(cooldown_override, cost_override) + StartCooldown(cooldown_override) unset_click_ability(owner) - pay_cost() - StartCooldown() - DeactivatePower() + pay_cost(cost_override) + // if(active) + // DeactivatePower() /datum/action/cooldown/bloodsucker/targeted/InterceptClickOn(mob/living/caller, params, atom/target) - click_with_power(target) + . = ..() + if(!.) + return FALSE + var/list/modifiers = params2list(params) + SEND_SIGNAL(src, COMSIG_FIRE_TARGETED_POWER, target) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + return FireSecondaryTargetedPower(target, modifiers) + else + return FireTargetedPower(target, modifiers) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/brawn.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/brawn.dm index 23ae039e14687..fbcf136262969 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/brawn.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/brawn.dm @@ -1,39 +1,59 @@ + +#define BRAWN_BREAKOUT_LEVEL 3 +#define BRAWN_AIRLOCK_LEVEL 4 /datum/action/cooldown/bloodsucker/targeted/brawn name = "Brawn" - desc = "Snap restraints, break lockers and doors, or deal terrible damage with your bare hands." + desc = "Snap restraints, break lockers and doors at higher levels, or deal terrible damage with your bare hands." button_icon_state = "power_strength" - power_explanation = "Brawn:\n\ - Click any person to bash into them, break restraints you have or knocking a grabber down. Only one of these can be done per use.\n\ - Punching a Cyborg will heavily EMP them in addition to deal damage.\n\ - At level 3, you get the ability to break closets open, additionally can both break restraints AND knock a grabber down in the same use.\n\ - At level 4, you get the ability to bash airlocks open, as long as they aren't bolted.\n\ - Higher levels will increase the damage and knockdown when punching someone." - power_flags = BP_AM_TOGGLE - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY - bloodcost = 8 - cooldown_time = 9 SECONDS + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY + bloodcost = 10 + cooldown_time = 12 SECONDS target_range = 1 - power_activates_immediately = TRUE prefire_message = "Select a target." -/datum/action/cooldown/bloodsucker/targeted/brawn/ActivatePower(trigger_flags) +/datum/action/cooldown/bloodsucker/targeted/brawn/get_power_explanation_extended() + . = list() + . += "Click any person to bash into them, break restraints you have or knocking a grabber down. Only one of these can be done per use." + . += "Brawn will do [GetDamage()] brute damage to the target and knockdown them for [DisplayTimeText(GetKnockdown())]." + . += "Punching a Cyborg will heavily EMP them in addition to deal damage." + . += "At level [BRAWN_BREAKOUT_LEVEL], you get the ability to break closets open, additionally can both break restraints AND knock a grabber down in the same use." + . += "At level [BRAWN_AIRLOCK_LEVEL], you get the ability to bash airlocks open, as long as they aren't bolted." + . += "Higher levels will increase the damage and knockdown when punching someone." + +/datum/action/cooldown/bloodsucker/targeted/brawn/ActivatePower(atom/target) // Did we break out of our handcuffs? if(break_restraints()) - power_activated_sucessfully() + playsound(get_turf(owner), 'sound/effects/grillehit.ogg', 80, 1, -1) + PowerActivatedSuccesfully() return FALSE // Did we knock a grabber down? We can only do this while not also breaking restraints if strong enough. - if(level_current >= 3 && escape_puller()) - power_activated_sucessfully() - return FALSE + if(owner.pulledby) + if(level_current >= BRAWN_BREAKOUT_LEVEL && escape_puller()) + PowerActivatedSuccesfully() + return FALSE + owner.balloon_alert(owner, "ability level too low to break free!") // Did neither, now we can PUNCH. - return ..() + if(HAS_TRAIT(owner, TRAIT_HANDS_BLOCKED)) + owner.balloon_alert(owner, "your hands are blocked!") + return FALSE + // check if we have atleast one arm + if(!owner.get_active_hand()) + owner.balloon_alert(owner, "you need a usable arm!") + return FALSE + return TRUE // Look at 'biodegrade.dm' for reference /datum/action/cooldown/bloodsucker/targeted/brawn/proc/break_restraints() var/mob/living/carbon/human/user = owner ///Only one form of shackles removed per use - var/used = FALSE + var/obj/handcuffed = user.get_item_by_slot(ITEM_SLOT_HANDCUFFED) + if(user.buckled && handcuffed && user.buckled.unbuckle_mob(user)) + user.visible_message( + span_warning("[user] breaks free of [user.buckled]!"), + span_warning("We break free of [user.buckled]!"), + ) + user.buckled = null + return TRUE // Breaks out of lockers if(istype(user.loc, /obj/structure/closet)) @@ -46,22 +66,22 @@ ) to_chat(user, span_warning("We bash [closet] wide open!")) addtimer(CALLBACK(src, PROC_REF(break_closet), user, closet), 1) - used = TRUE + return TRUE - // Remove both Handcuffs & Legcuffs - var/obj/cuffs = user.get_item_by_slot(ITEM_SLOT_HANDCUFFED) - var/obj/legcuffs = user.get_item_by_slot(ITEM_SLOT_LEGCUFFED) - if(!used && (istype(cuffs) || istype(legcuffs))) - user.visible_message( - span_warning("[user] discards their restraints like it's nothing!"), - span_warning("We break through our restraints!"), - ) - user.clear_cuffs(cuffs, TRUE) - user.clear_cuffs(legcuffs, TRUE) - used = TRUE + // Remove both Handcuffs & Legcuffs in one step + var/legcuffed = user.get_item_by_slot(ITEM_SLOT_LEGCUFFED) + if(handcuffed || legcuffed) + var/hand_cuffs = user.clear_cuffs(handcuffed, TRUE) + var/leg_cuffs = user.clear_cuffs(legcuffed, TRUE) + if(hand_cuffs || leg_cuffs) + user.visible_message( + span_warning("[user] discards their restraints like it's nothing!"), + span_warning("We break through our restraints!"), + ) + return TRUE // Remove Straightjackets - if(user.wear_suit?.breakouttime && !used) + if(user.wear_suit?.breakouttime) var/obj/item/clothing/suit/straightjacket = user.get_item_by_slot(ITEM_SLOT_OCLOTHING) user.visible_message( span_warning("[user] rips straight through the [user.p_their()] [straightjacket]!"), @@ -69,12 +89,8 @@ ) if(straightjacket && user.wear_suit == straightjacket) qdel(straightjacket) - used = TRUE - - // Did we end up using our ability? If so, play the sound effect and return TRUE - if(used) - playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, 1, -1) - return used + return TRUE + return FALSE // This is its own proc because its done twice, to repeat code copypaste. /datum/action/cooldown/bloodsucker/targeted/brawn/proc/break_closet(mob/living/carbon/human/user, obj/structure/closet/closet) @@ -85,8 +101,6 @@ closet.open() /datum/action/cooldown/bloodsucker/targeted/brawn/proc/escape_puller() - if(!owner.pulledby) // || owner.pulledby.grab_state <= GRAB_PASSIVE) - return FALSE var/mob/pulled_mob = owner.pulledby var/pull_power = pulled_mob.grab_state playsound(get_turf(pulled_mob), 'sound/effects/woodhit.ogg', 75, 1, -1) @@ -108,41 +122,42 @@ owner.pulledby = null // It's already done, but JUST IN CASE. return TRUE -/datum/action/cooldown/bloodsucker/targeted/brawn/FireTargetedPower(atom/target_atom) +/datum/action/cooldown/bloodsucker/targeted/brawn/FireTargetedPower(atom/target, params) . = ..() var/mob/living/user = owner // Target Type: Mob - if(isliving(target_atom)) - var/mob/living/target = target_atom - var/mob/living/carbon/carbonuser = user + if(isliving(target)) + var/mob/living/target_atom = target //You know what I'm just going to take the average of the user's limbs max damage instead of dealing with 2 hands - var/obj/item/bodypart/user_active_arm = carbonuser.get_active_hand() - var/hitStrength = user_active_arm.unarmed_damage_high * 1.25 + 2 + var/hitStrength = GetDamage() // Knockdown! - var/powerlevel = min(5, 1 + level_current) + var/powerlevel = GetPowerLevel() if(rand(5 + powerlevel) >= 5) - target.visible_message( - span_danger("[user] lands a vicious punch, sending [target] away!"), \ + target_atom.visible_message( + span_danger("[user] lands a vicious punch, sending [target_atom] away!"), \ span_userdanger("[user] has landed a horrifying punch on you, sending you flying!"), ) - target.Knockdown(min(5, rand(10, 10 * powerlevel))) + target_atom.Knockdown(GetKnockdown()) // Attack! - owner.balloon_alert(owner, "you punch [target]!") - playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1) - user.do_attack_animation(target, ATTACK_EFFECT_SMASH) - var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(target.zone_selected)) - target.apply_damage(hitStrength, BRUTE, affecting) + owner.balloon_alert(owner, "you punch [target_atom]!") + playsound(get_turf(target_atom), 'sound/items/weapons/punch4.ogg', 60, 1, -1) + user.do_attack_animation(target_atom, ATTACK_EFFECT_SMASH) + var/obj/item/bodypart/affecting = target_atom.get_bodypart(ran_zone(target_atom.zone_selected)) + target_atom.apply_damage(hitStrength, BRUTE, affecting) // Knockback - var/send_dir = get_dir(owner, target) - var/turf/turf_thrown_at = get_ranged_target_turf(target, send_dir, powerlevel) + var/send_dir = get_dir(owner, target_atom) + var/turf/turf_thrown_at = get_ranged_target_turf(target_atom, send_dir, powerlevel) owner.newtonian_move(send_dir) // Bounce back in 0 G - target.throw_at(turf_thrown_at, powerlevel, TRUE, owner) //new /datum/forced_movement(target, get_ranged_target_turf(target, send_dir, (hitStrength / 4)), 1, FALSE) + target_atom.throw_at(turf_thrown_at, powerlevel, TRUE, owner) //new /datum/forced_movement(target_atom, get_ranged_target_turf(target_atom, send_dir, (hitStrength / 4)), 1, FALSE) // Target Type: Cyborg (Also gets the effects above) - if(issilicon(target)) - target.emp_act(EMP_HEAVY) + if(issilicon(target_atom)) + target_atom.emp_act(EMP_HEAVY) // Target Type: Locker - else if(istype(target_atom, /obj/structure/closet) && level_current >= 3) - var/obj/structure/closet/target_closet = target_atom + else if(istype(target, /obj/structure/closet)) + if(level_current <= BRAWN_BREAKOUT_LEVEL) + target.balloon_alert(user, "ability level too low to break open!") + return FALSE + var/obj/structure/closet/target_closet = target user.balloon_alert(user, "you prepare to bash [target_closet] open...") if(!do_after(user, 2.5 SECONDS, target_closet)) user.balloon_alert(user, "interrupted!") @@ -151,9 +166,12 @@ addtimer(CALLBACK(src, PROC_REF(break_closet), user, target_closet), 1) playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, TRUE, -1) // Target Type: Door - else if(istype(target_atom, /obj/machinery/door) && level_current >= 4) - var/obj/machinery/door/target_airlock = target_atom - playsound(get_turf(user), 'sound/machines/airlock_alien_prying.ogg', 40, TRUE, -1) + else if(istype(target, /obj/machinery/door)) + if(level_current <= BRAWN_AIRLOCK_LEVEL) + target.balloon_alert(user, "ability level too low to break open!") + return FALSE + var/obj/machinery/door/target_airlock = target + playsound(get_turf(user), 'sound/machines/airlock/airlock_alien_prying.ogg', 40, TRUE, -1) owner.balloon_alert(owner, "you prepare to tear open [target_airlock]...") if(!do_after(user, 2.5 SECONDS, target_airlock)) user.balloon_alert(user, "interrupted!") @@ -165,6 +183,23 @@ playsound(get_turf(target_airlock), 'sound/effects/bang.ogg', 30, 1, -1) target_airlock.open(2) // open(2) is like a crowbar or jaws of life. +/datum/action/cooldown/bloodsucker/targeted/brawn/proc/GetPowerLevel() + return min(5, 1 + level_current) + +/datum/action/cooldown/bloodsucker/targeted/brawn/proc/GetKnockdown() + return min(5, rand(10, 10 * GetPowerLevel())) + +/datum/action/cooldown/bloodsucker/targeted/brawn/proc/GetDamage() + var/mob/living/carbon/human/user = owner + var/obj/item/bodypart/user_active_arm + user_active_arm = user.get_active_hand() + if(!user || !user_active_arm) + return GetPunchDamage(initial(user_active_arm.unarmed_damage_high)) + return GetPunchDamage(user_active_arm.unarmed_damage_high) + +/datum/action/cooldown/bloodsucker/targeted/brawn/proc/GetPunchDamage(punch_damage) + return punch_damage * 1.25 + 2 + /datum/action/cooldown/bloodsucker/targeted/brawn/CheckValidTarget(atom/target_atom) . = ..() if(!.) @@ -189,3 +224,6 @@ else if(istype(target_atom, /obj/structure/closet)) return TRUE return FALSE + +#undef BRAWN_BREAKOUT_LEVEL +#undef BRAWN_AIRLOCK_LEVEL diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/haste.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/haste.dm index 565aa001e8f0f..ef8985eec3c4b 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/haste.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/haste.dm @@ -3,27 +3,38 @@ * Level 3: Stun People Passed */ +#define HASTE_GETUP_LEVEL 3 /datum/action/cooldown/bloodsucker/targeted/haste name = "Immortal Haste" desc = "Force yourself to stand up if you're down and dash somewhere with supernatural speed. Those nearby may be knocked away, stunned, or left empty-handed." button_icon_state = "power_speed" - power_explanation = "Immortal Haste:\n\ - Click anywhere to immediately dash towards that location.\n\ - At level 3, if you are lying down, you will get up and regain your stamina, but the resulting dash will not knock down those nearby.\n\ - The Power will not work if you are lying down, in no gravity, or are aggressively grabbed.\n\ - Anyone in your way during your Haste will be knocked down.\n\ - Higher levels will increase the knockdown dealt to enemies.\n\ - It will also refill your stamina so you can keep moving." - power_flags = BP_AM_TOGGLE - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + prefire_message = "You prepare to dash!" + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 6 cooldown_time = 12 SECONDS - target_range = 15 - power_activates_immediately = TRUE + target_range = 5 + power_activates_immediately = FALSE ///List of all people hit by our power, so we don't hit them again. var/list/hit = list() +/datum/action/cooldown/bloodsucker/targeted/haste/get_power_desc_extended() + . = "Dash to a location, knocking down anyone in your way, and refilling your stamina. Those nearby may be knocked away, stunned, or left empty-handed.\n" + if(level_current >= HASTE_GETUP_LEVEL) + . += "Dashing from lying down will get you up, but won't affect your foes." + else + . += "You cannot dash while knocked down." + +/datum/action/cooldown/bloodsucker/targeted/haste/get_power_explanation_extended() + . = list() + . += "Click anywhere to immediately dash towards that location." + . += "At level [HASTE_GETUP_LEVEL], if you are lying down, you will get up and regain your stamina, but the resulting dash will not knock down those nearby." + . += "Haste will knockdown your enemies for [DisplayTimeText(GetKnockdown())] and refill your stamina, but using haste while knocked down will make it go on cooldown for [DisplayTimeText(cooldown_time * 3)]" + . += "The Power will not work if you are lying down, in no gravity, or are aggressively grabbed." + . += "Anyone in your way during your Haste will be knocked down." + . += "Higher levels will increase the knockdown dealt to enemies." + . += "It will also refill your stamina so you can keep moving." + . += "If Fortitude is active, using haste will disable it." + /datum/action/cooldown/bloodsucker/targeted/haste/can_use(mob/living/carbon/user, trigger_flags) . = ..() if(!.) @@ -35,12 +46,12 @@ if(!user.has_gravity(user.loc)) //We dont want people to be able to use this to fly around in space user.balloon_alert(user, "you cannot dash while floating!") return FALSE - if(level_current < 3 && user.body_position == LYING_DOWN) + if(level_current < HASTE_GETUP_LEVEL && user.body_position == LYING_DOWN) user.balloon_alert(user, "you must be standing to dash!") return FALSE return TRUE -/// Anything will do, if it's not me or my square +/// Anything will do, if it's not mea or my square /datum/action/cooldown/bloodsucker/targeted/haste/CheckValidTarget(atom/target_atom) . = ..() if(!.) @@ -48,28 +59,30 @@ return target_atom.loc != owner.loc /// This is a non-async proc to make sure the power is "locked" until this finishes. -/datum/action/cooldown/bloodsucker/targeted/haste/FireTargetedPower(atom/target_atom) +/datum/action/cooldown/bloodsucker/targeted/haste/FireTargetedPower(atom/target, params) . = ..() var/mob/living/user = owner var/stuns_mobs = TRUE - if(level_current >= 3 && user.body_position == LYING_DOWN) + var/temp_cooldown = cooldown_time + if(level_current >= HASTE_GETUP_LEVEL && user.body_position == LYING_DOWN) to_chat(user, span_danger("Your heart takes a beat, and you force yourself to stand up!")) user.SetKnockdown(0) user.setStaminaLoss(0) user.set_resting(FALSE, FALSE, TRUE) stuns_mobs = FALSE - StartCooldown(cooldown_time * 3) + temp_cooldown = GetGetupCooldown() if(stuns_mobs) RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) - var/turf/targeted_turf = isturf(target_atom) ? target_atom : get_turf(target_atom) + var/turf/targeted_turf = isturf(target) ? target : get_turf(target) // Pulled? Not anymore. user.pulledby?.stop_pulling() // Go to target turf // DO NOT USE WALK TO. owner.balloon_alert(owner, "you dash into the air!") - playsound(get_turf(owner), 'sound/weapons/punchmiss.ogg', 25, 1, -1) + playsound(get_turf(owner), 'sound/items/weapons/punchmiss.ogg', 25, 1, -1) var/safety = get_dist(user, targeted_turf) * 3 + 1 var/consequetive_failures = 0 + active = TRUE while(--safety && (get_turf(user) != targeted_turf)) var/success = step_towards(user, targeted_turf) //This does not try to go around obstacles. if(!success) @@ -80,16 +93,20 @@ break //just stop else consequetive_failures = 0 //reset so we can keep moving - if(user.resting || user.incapacitated(IGNORE_RESTRAINTS, IGNORE_GRAB)) //actually down? stop. + if(user.resting || INCAPACITATED_IGNORING(user, INCAPABLE_GRAB|INCAPABLE_RESTRAINTS)) //actually down? stop. break if(success) //don't sleep if we failed to move. sleep(world.tick_lag) - user.adjustStaminaLoss(-user.staminaloss) - -/datum/action/cooldown/bloodsucker/targeted/haste/power_activated_sucessfully() - . = ..() UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) hit.Cut() + user.adjustStaminaLoss(-user.staminaloss) + PowerActivatedSuccesfully(temp_cooldown) + +/datum/action/cooldown/bloodsucker/targeted/haste/proc/GetKnockdown() + return 10 + level_current * 4 + +/datum/action/cooldown/bloodsucker/targeted/haste/proc/GetGetupCooldown() + return cooldown_time * 3 /datum/action/cooldown/bloodsucker/targeted/haste/proc/on_move() for(var/mob/living/hit_living in dview(1, get_turf(owner)) - owner) @@ -97,5 +114,7 @@ continue hit += hit_living playsound(hit_living, "sound/weapons/punch[rand(1,4)].ogg", 15, 1, -1) - hit_living.Knockdown(10 + level_current * 4) + hit_living.Knockdown(GetKnockdown()) hit_living.spin(10, 1) + +#undef HASTE_GETUP_LEVEL diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/lunge.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/lunge.dm index c3eee56d62aeb..18b185fb02dd1 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/lunge.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/lunge.dm @@ -1,28 +1,33 @@ + +#define LUNGE_INSTANT_LEVEL 4 +#define LUNGE_INSTANT_RANGE 6 /datum/action/cooldown/bloodsucker/targeted/lunge name = "Predatory Lunge" desc = "Spring at your target to grapple them without warning, or tear the dead's heart out. Attacks from concealment or the rear may even knock them down if strong enough." button_icon_state = "power_lunge" - power_explanation = "Predatory Lunge:\n\ - Click any player to start spinning wildly and, after a short delay, dash at them.\n\ - When lunging at someone, you will grab them, immediately starting off at aggressive.\n\ - Riot gear and Monster Hunters are protected and will only be passively grabbed.\n\ - You cannot use the Power if you are already grabbing someone, or are being grabbed.\n\ - If you grab from behind, or while using cloak of darkness, you will knock the target down.\n\ - If used on a dead body, will tear out a random organ from the zone you are targeting.\n\ - Higher levels increase the knockdown dealt to enemies.\n\ - At level 4, you will no longer spin, but you will be limited to tackling from only 6 tiles away." - power_flags = NONE - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED|AB_CHECK_LYING|AB_CHECK_PHASED|AB_CHECK_LYING + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 10 cooldown_time = 10 SECONDS power_activates_immediately = FALSE - -/datum/action/cooldown/bloodsucker/targeted/lunge/upgrade_power() + unset_after_click = FALSE + +/datum/action/cooldown/bloodsucker/targeted/lunge/get_power_explanation_extended() + . = list() + . += "Click any player to start spinning wildly and, after a short delay, dash at them." + . += "When lunging at someone, you will grab them, immediately starting off at aggressive." + . += "Riot gear and Monster Hunters are protected and will only be passively grabbed." + . += "You cannot use the Power if you are already grabbing someone, or are being grabbed." + . += "If you grab from behind, or while using cloak of darkness, you will knock the target down." + . += "If used on a dead body, will tear out a random organ from the zone you are targeting." + . += "Higher levels increase how long enemies are knocked down." + . += "At level [LUNGE_INSTANT_LEVEL], you will no longer spin, but you will be limited to tackling from only [LUNGE_INSTANT_RANGE] tiles away." + +/datum/action/cooldown/bloodsucker/targeted/lunge/on_power_upgrade() . = ..() - //range is lowered when you get stronger. - if(level_current > 3) - target_range = 6 + //range is lowered when you get stronger, since it's instant now. + if(level_current > LUNGE_INSTANT_LEVEL) + target_range = LUNGE_INSTANT_RANGE /datum/action/cooldown/bloodsucker/targeted/lunge/can_use(mob/living/carbon/user, trigger_flags) . = ..() @@ -53,23 +58,19 @@ var/mob/living/turf_target = target_atom if(!isturf(turf_target.loc)) return FALSE - // Check: can the Bloodsucker even move? - var/mob/living/user = owner - if(user.body_position == LYING_DOWN || HAS_TRAIT(owner, TRAIT_IMMOBILIZED)) - return FALSE return TRUE /datum/action/cooldown/bloodsucker/targeted/lunge/can_deactivate() return !(datum_flags & DF_ISPROCESSING) //only if you aren't lunging -/datum/action/cooldown/bloodsucker/targeted/lunge/FireTargetedPower(atom/target_atom) +/datum/action/cooldown/bloodsucker/targeted/lunge/FireTargetedPower(atom/target, params) . = ..() - owner.face_atom(target_atom) - if(level_current > 3) - do_lunge(target_atom) + owner.face_atom(target) + if(level_current >= LUNGE_INSTANT_LEVEL) + do_lunge(target) return - prepare_target_lunge(target_atom) + prepare_target_lunge(target) return TRUE ///Starts processing the power and prepares the lunge by spinning, calls lunge at the end of it. @@ -123,7 +124,7 @@ lunge_end(hit_atom, targeted_turf) /datum/action/cooldown/bloodsucker/targeted/lunge/proc/lunge_end(atom/hit_atom, turf/target_turf) - power_activated_sucessfully() + PowerActivatedSuccesfully() // Am I next to my target to start giving the effects? if(!owner.Adjacent(hit_atom)) return @@ -132,7 +133,7 @@ var/mob/living/carbon/target = hit_atom // Did I slip or get knocked unconscious? - if(user.body_position != STANDING_UP || user.incapacitated()) + if(user.body_position != STANDING_UP || user.incapacitated) user.throw_at(target_turf, 12, 0.8) user.spin(10) return @@ -180,6 +181,11 @@ // Did we knock them down? -/datum/action/cooldown/bloodsucker/targeted/lunge/DeactivatePower() +/datum/action/cooldown/bloodsucker/targeted/lunge/DeactivatePower(deactivate_flags) + . = ..() + if(!.) + return REMOVE_TRAIT(owner, TRAIT_IMMOBILIZED, BLOODSUCKER_TRAIT) - return ..() + +#undef LUNGE_INSTANT_LEVEL +#undef LUNGE_INSTANT_RANGE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/mesmerize.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/mesmerize.dm index 628b74a23643c..e28b7dc0cf0b3 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/mesmerize.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/mesmerize.dm @@ -7,30 +7,62 @@ * Level 5: Doesn't need to be facing you anymore */ +#define MESMERIZE_MUTE_LEVEL 2 +#define MESMERIZE_GLASSES_LEVEL 3 +#define MESMERIZE_FACING_LEVEL 5 /datum/action/cooldown/bloodsucker/targeted/mesmerize name = "Mesmerize" - desc = "Dominate the mind of a mortal who can see your eyes." button_icon_state = "power_mez" - power_explanation = "Mesmerize:\n\ - Click any player to attempt to mesmerize them.\n\ - You cannot wear anything covering your face, and both parties must be facing eachother. Obviously, both parties need to not be blind. \n\ - If your target is already mesmerized or a Monster Hunter, the Power will fail.\n\ - Once mesmerized, the target will be unable to move for a certain amount of time, scaling with level.\n\ - At level 2, your target will additionally be muted.\n\ - At level 3, you will be able to use the power through items covering your face.\n\ - At level 5, you will be able to mesmerize regardless of your target's direction.\n\ - Higher levels will increase the time of the mesmerize's freeze.\n\ - Additionally it works on silicon lifeforms, causing a EMP effect instead of a freeze." power_flags = NONE - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 30 - cooldown_time = 20 SECONDS - target_range = 8 + cooldown_time = 30 SECONDS + target_range = 4 power_activates_immediately = FALSE + unset_after_click = FALSE prefire_message = "Whom will you subvert to your will?" ///Our mesmerized target - Prevents several mesmerizes. var/datum/weakref/target_ref + /// How long it takes us to mesmerize our target. + var/mesmerize_delay = 5 SECONDS + /// At what level this ability will blind the target at. Level 0 = never. + var/blind_at_level = 0 + /// if the ability requires you to be physically facing the target + var/requires_facing_target = TRUE + /// if the ability requires you to not have your eyes covered + var/blocked_by_glasses = TRUE + /// if the ability will knockdown on secondary click + var/knockdown_on_secondary = FALSE + // string id timer of the current cast, used for combat glare + var/timer + // a cooldown to ensure you can't spam both the primary and secondary mesmerizes + COOLDOWN_DECLARE(mesmerize_cooldown) + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/get_power_desc_extended() + . += "[src] a target, locking them in place for a short time[level_current >= MESMERIZE_MUTE_LEVEL ? " and muting them" : ""].
        " + if(knockdown_on_secondary) + . += "Right clicking on your victim will apply a knockdown for [DisplayTimeText(combat_mesmerize_time())].
        " + else + . += "Right clicking on your victim will confuse them for [DisplayTimeText(combat_mesmerize_time())]." + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/get_power_explanation_extended() + . = list() + . += "Click any player to attempt to mesmerize them. This will stun the victim." + . += "The victim will realize they are being mesmerized, but will be unable to talk, but at level [MESMERIZE_MUTE_LEVEL] they will be also muted." + if(blocked_by_glasses && requires_facing_target) + . += "[src] requires you to not be wearing glasses and to be facing your target." + else if(blocked_by_glasses) + . += "[src] requires you to not be wearing glasses." + else if(requires_facing_target) + . += "[src] requires you to be facing your target." + . += "You cannot wear anything covering your face, and both parties must be facing eachother." + . += "Obviously, both parties need to not be blind." + . += "Right clicking with the ability will apply a knockdown for [DisplayTimeText(combat_mesmerize_time())], but will also confuse your victim for [DisplayTimeText(get_power_time())]." + . += "If your target is already mesmerized or a bloodsucker, the Power will fail." + . += "Once mesmerized, the target will be unable to move for [DisplayTimeText(get_power_time())] and muted for [DisplayTimeText(get_mute_time())], scaling with level." + . += "At level [MESMERIZE_GLASSES_LEVEL], you will be able to use the power through items covering your face." + . += "At level [MESMERIZE_FACING_LEVEL], you will be able to mesmerize regardless of your target's direction." + . += "Additionally it works on silicon lifeforms, causing a EMP effect instead of a freeze." /datum/action/cooldown/bloodsucker/targeted/mesmerize/can_use(mob/living/carbon/user, trigger_flags) . = ..() @@ -41,7 +73,7 @@ to_chat(user, span_warning("You have no eyes with which to mesmerize.")) return FALSE // Check: Eyes covered? - if(istype(user) && (user.is_eyes_covered() && level_current <= 2) || !isturf(user.loc)) + if(blocked_by_glasses && istype(user) && (user.is_eyes_covered() && level_current <= 2) || !isturf(user.loc)) user.balloon_alert(user, "your eyes are concealed from sight.") return FALSE return TRUE @@ -58,9 +90,11 @@ return FALSE var/mob/living/current_target = target_atom // We already know it's carbon due to CheckValidTarget() // No mind +#ifndef BLOODSUCKER_TESTING if(!current_target.mind) owner.balloon_alert(owner, "[current_target] is mindless.") return FALSE +#endif // Bloodsucker if(IS_BLOODSUCKER(current_target)) owner.balloon_alert(owner, "bloodsuckers are immune to [src].") @@ -78,11 +112,11 @@ owner.balloon_alert(owner, "[current_target] is blind.") return FALSE // Facing target? - if(!is_source_facing_target(owner, current_target)) // in unsorted.dm + if(requires_facing_target && !is_source_facing_target(owner, current_target)) // in unsorted.dm owner.balloon_alert(owner, "you must be facing [current_target].") return FALSE // Target facing me? (On the floor, they're facing everyone) - if(((current_target.mobility_flags & MOBILITY_STAND) && !is_source_facing_target(current_target, owner) && level_current <= 4)) + if(((current_target.mobility_flags & MOBILITY_STAND) && requires_facing_target && !is_source_facing_target(current_target, owner) && level_current <= MESMERIZE_FACING_LEVEL)) owner.balloon_alert(owner, "[current_target] must be facing you.") return FALSE @@ -90,53 +124,120 @@ target_ref = WEAKREF(current_target) return TRUE -/datum/action/cooldown/bloodsucker/targeted/mesmerize/FireTargetedPower(atom/target_atom) - . = ..() - +/datum/action/cooldown/bloodsucker/targeted/mesmerize/FireTargetedPower(atom/target, params) var/mob/living/user = owner - var/mob/living/carbon/mesmerized_target = target_ref.resolve() + var/mob/living/carbon/mesmerized_target = target_ref?.resolve() + if(!COOLDOWN_FINISHED(src, mesmerize_cooldown)) + return + if(!mesmerized_target) + CRASH("mesmerized_target is null") + + perform_indicators(mesmerized_target, mesmerize_delay) if(issilicon(mesmerized_target)) var/mob/living/silicon/mesmerized = mesmerized_target mesmerized.emp_act(EMP_HEAVY) owner.balloon_alert(owner, "temporarily shut [mesmerized] down.") - power_activated_sucessfully() // PAY COST! BEGIN COOLDOWN! + PowerActivatedSuccesfully() // PAY COST! BEGIN COOLDOWN! return + // slow them down during the mesmerize + mute_target(mesmerized_target) - if(istype(mesmerized_target)) - owner.balloon_alert(owner, "attempting to hypnotically gaze [mesmerized_target]...") - - if(!do_after(user, 4 SECONDS, mesmerized_target, NONE, TRUE, extra_checks = CALLBACK(src, PROC_REF(ContinueActive), user, mesmerized_target))) + COOLDOWN_START(src, mesmerize_cooldown, mesmerize_delay) + if(!do_after(user, mesmerize_delay, mesmerized_target, IGNORE_USER_LOC_CHANGE | IGNORE_TARGET_LOC_CHANGE, TRUE, extra_checks = CALLBACK(src, PROC_REF(ContinueActive), user, mesmerized_target))) + StartCooldown(cooldown_time * 0.5) return - - var/power_time = 9 SECONDS + level_current * 1.5 SECONDS + // Can't quite time it here, but oh well + to_chat(mesmerized_target, "[src]'s eyes look into yours, and [span_hypnophrase("you feel your mind slipping away")]...") /*if(IS_MONSTERHUNTER(mesmerized_target)) to_chat(mesmerized_target, span_notice("You feel your eyes burn for a while, but it passes.")) return*/ - if(HAS_TRAIT_FROM_ONLY(mesmerized_target, TRAIT_MUTE, BLOODSUCKER_TRAIT)) + if(HAS_TRAIT_FROM_ONLY(mesmerized_target, TRAIT_NO_TRANSFORM, MESMERIZE_TRAIT)) owner.balloon_alert(owner, "[mesmerized_target] is already in a hypnotic gaze.") return - if(iscarbon(mesmerized_target)) - owner.balloon_alert(owner, "successfully mesmerized [mesmerized_target].") - if(level_current >= 2) - ADD_TRAIT(mesmerized_target, TRAIT_MUTE, BLOODSUCKER_TRAIT) - mesmerized_target.Immobilize(power_time) - mesmerized_target.adjust_silence(power_time) - mesmerized_target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // mesmerized_target.changeNext_move(power_time) // check click.dm - ADD_TRAIT(mesmerized_target, TRAIT_NO_TRANSFORM, BLOODSUCKER_TRAIT) // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze. - addtimer(CALLBACK(src, PROC_REF(end_mesmerize), user, mesmerized_target), power_time) - power_activated_sucessfully() // PAY COST! BEGIN COOLDOWN! - -/datum/action/cooldown/bloodsucker/targeted/mesmerize/DeactivatePower() - target_ref = null + owner.balloon_alert(owner, "successfully mesmerized [mesmerized_target].") + mesmerize_effects(user, mesmerized_target) + PowerActivatedSuccesfully() // PAY COST! BEGIN COOLDOWN! + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/FireSecondaryTargetedPower(atom/target, params) + if(!isliving(target)) + CRASH("[src] somehow casted on a non-living target, should have been stopped by CheckCanTarget.") + if(timer || !COOLDOWN_FINISHED(src, mesmerize_cooldown)) + return + COOLDOWN_START(src, mesmerize_cooldown, 2 SECONDS) + var/mob/living/mesmerized_target = target + owner.balloon_alert(owner, "gazing [mesmerized_target]...") + perform_indicators(mesmerized_target, 3 SECONDS) + timer = addtimer(CALLBACK(src, PROC_REF(combat_mesmerize_effects), owner, mesmerized_target), 2 SECONDS) + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/mesmerize_effects(mob/living/user, mob/living/mesmerized_target) + var/power_time = get_power_time() + mute_target(mesmerized_target) + mesmerized_target.Immobilize(power_time) + mesmerized_target.next_move = world.time + power_time // <--- Use direct change instead. We want an unmodified delay to their next move // mesmerized_target.changeNext_move(power_time) // check click.dm + ADD_TRAIT(mesmerized_target, TRAIT_NO_TRANSFORM, MESMERIZE_TRAIT) // <--- Fuck it. We tried using next_move, but they could STILL resist. We're just doing a hard freeze. + addtimer(CALLBACK(src, PROC_REF(end_mesmerize), user, mesmerized_target), power_time) + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/combat_mesmerize_effects(mob/living/user, mob/living/mesmerized_target) + if(!ContinueActive(user, mesmerized_target)) + StartCooldown(cooldown_time * 0.5) + owner.balloon_alert(owner, "failed!") + return + to_chat(mesmerized_target, "[src]'s eyes look into yours, and [span_hypnophrase("your head becomes fuzzy for a moment")]...") + var/effect_time = combat_mesmerize_time() + mute_target(mesmerized_target) + if(knockdown_on_secondary) + mesmerized_target.Knockdown(effect_time) + else + mesmerized_target.adjust_confusion(effect_time) + PowerActivatedSuccesfully(cost_override = bloodcost * 0.5) + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/get_power_time() + return 9 SECONDS + level_current * 1 SECONDS + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/get_mute_time() + return get_power_time() + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/combat_mesmerize_time() + return get_power_time() * 0.3 + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/blind_target(mob/living/mesmerized_target) + if(!blind_at_level && level_current < blind_at_level) + return + mesmerized_target.become_blind(MESMERIZE_TRAIT) + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/mute_target(mob/living/mesmerized_target) + if(level_current >= MESMERIZE_MUTE_LEVEL) + mesmerized_target.set_silence_if_lower(get_mute_time()) + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/DeactivatePower(deactivate_flags) . = ..() + target_ref = null + timer = null /datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/end_mesmerize(mob/living/user, mob/living/target) - REMOVE_TRAIT(target, TRAIT_NO_TRANSFORM, BLOODSUCKER_TRAIT) - REMOVE_TRAIT(target, TRAIT_MUTE, BLOODSUCKER_TRAIT) + REMOVE_TRAIT(target, TRAIT_NO_TRANSFORM, MESMERIZE_TRAIT) + target.cure_blind(MESMERIZE_TRAIT) // They Woke Up! (Notice if within view) - if(istype(user) && target.stat == CONSCIOUS && (target in view(6, get_turf(user)))) - owner.balloon_alert(owner, "[target] snapped out of their trance.") + if(istype(user) && target.stat == CONSCIOUS && (target in view(target_range, get_turf(user)))) + target.balloon_alert(owner, "[target] snapped out of their trance.") /datum/action/cooldown/bloodsucker/targeted/mesmerize/ContinueActive(mob/living/user, mob/living/target) return ..() && can_use(user) && CheckCanTarget(target) + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/perform_indicators(mob/target, duration) + // Display an animated overlay over our head to indicate what's going on + eldritch_eye(target, "eye_open", 1 SECONDS) + var/main_duration = max(duration - 2 SECONDS, 1 SECONDS) + addtimer(CALLBACK(src, PROC_REF(eldritch_eye), target, "eye_flash", main_duration), 1 SECONDS) + addtimer(CALLBACK(src, PROC_REF(eldritch_eye), target, "eye_close", 1 SECONDS), main_duration + 1 SECONDS) + +/// Display an animated overlay over our head to indicate what's going on +/datum/action/cooldown/bloodsucker/targeted/mesmerize/proc/eldritch_eye(mob/target, icon_state = "eye_open", duration = 1 SECONDS) + var/image/image = image('icons/effects/eldritch.dmi', owner, icon_state, ABOVE_ALL_MOB_LAYER, pixel_x = -owner.pixel_x, pixel_y = 28) /// TODO make this disable cloak + SET_PLANE_EXPLICIT(image, ABOVE_LIGHTING_PLANE, owner) + flick_overlay_global(image, list(owner?.client, target?.client), duration) + +#undef MESMERIZE_GLASSES_LEVEL +#undef MESMERIZE_FACING_LEVEL +#undef MESMERIZE_MUTE_LEVEL diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/trespass.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/trespass.dm index 2671c281a987f..a1d8eb1328e8d 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/trespass.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/targeted/trespass.dm @@ -2,19 +2,21 @@ name = "Trespass" desc = "Become mist and advance two tiles in one direction. Useful for skipping past doors and barricades." button_icon_state = "power_tres" - power_explanation = "Trespass:\n\ - Click anywhere from 1-2 tiles away from you to teleport.\n\ - This power goes through all obstacles except Walls.\n\ - Higher levels decrease the sound played from using the Power, and increase the speed of the transition." - power_flags = BP_AM_TOGGLE - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS - purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY + bloodsucker_check_flags = BP_CANT_USE_IN_TORPOR + purchase_flags = BLOODSUCKER_CAN_BUY|GHOUL_CAN_BUY bloodcost = 10 cooldown_time = 8 SECONDS prefire_message = "Select a destination." - //target_range = 2 + target_range = 2 var/turf/target_turf // We need to decide where we're going based on where we clicked. It's not actually the tile we clicked. +/datum/action/cooldown/bloodsucker/targeted/trespass/get_power_explanation_extended() + . = list() + . += "Click anywhere [target_range] tiles away from you to teleport." + . += "This power goes through all obstacles except Walls." + . += "Higher levels decrease the sound played from using the Power, and increase the speed of the transition." + . += "It takes [DisplayTimeText(GetTeleportDelay())] to teleport." + /datum/action/cooldown/bloodsucker/targeted/trespass/can_use(mob/living/carbon/user, trigger_flags) . = ..() if(!.) @@ -23,7 +25,6 @@ return FALSE return TRUE - /datum/action/cooldown/bloodsucker/targeted/trespass/CheckValidTarget(atom/target_atom) . = ..() if(!.) @@ -33,7 +34,6 @@ return FALSE return TRUE // All we care about is destination. Anything you click is fine. - /datum/action/cooldown/bloodsucker/targeted/trespass/CheckCanTarget(atom/target_atom) // NOTE: Do NOT use ..()! We don't want to check distance or anything. @@ -58,7 +58,7 @@ return TRUE -/datum/action/cooldown/bloodsucker/targeted/trespass/FireTargetedPower(atom/target_atom) +/datum/action/cooldown/bloodsucker/targeted/trespass/FireTargetedPower(atom/target, params) . = ..() // Find target turf, at or below Atom @@ -71,12 +71,12 @@ ) // Effect Origin var/sound_strength = max(60, 70 - level_current * 10) - playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', sound_strength, 1) + playsound(get_turf(owner), 'sound/effects/magic/summon_karp.ogg', sound_strength, 1) var/datum/effect_system/steam_spread/bloodsucker/puff = new /datum/effect_system/steam_spread() puff.set_up(3, 0, my_turf) puff.start() - var/mist_delay = max(5, 20 - level_current * 2.5) // Level up and do this faster. + var/mist_delay = GetTeleportDelay() // Level up and do this faster. // Freeze Me user.Stun(mist_delay, ignore_canstun = TRUE) @@ -99,8 +99,11 @@ user.density = 1 user.invisibility = invis_was // Effect Destination - playsound(get_turf(owner), 'sound/magic/summon_karp.ogg', 60, 1) + playsound(get_turf(owner), 'sound/effects/magic/summon_karp.ogg', 60, 1) puff = new /datum/effect_system/steam_spread/() puff.effect_type = /obj/effect/particle_effect/fluid/smoke/vampsmoke puff.set_up(3, 0, target_turf) puff.start() + +/datum/action/cooldown/bloodsucker/targeted/trespass/proc/GetTeleportDelay() + return max(5, 20 - level_current * 2.5) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/_powers_tremere.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/_powers_tremere.dm index 9017e828fbc14..8054842a7f123 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/_powers_tremere.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/_powers_tremere.dm @@ -7,21 +7,16 @@ /datum/action/cooldown/bloodsucker/targeted/tremere name = "Tremere Gift" - desc = "A Tremere exclusive gift." - button_icon_state = "power_auspex" - background_icon_state = "tremere_power_off" + desc = "" + power_explanation = "" active_background_icon_state = "tremere_power_on" base_background_icon_state = "tremere_power_off" button_icon = 'modular_zubbers/icons/mob/actions/tremere_bloodsucker.dmi' background_icon = 'modular_zubbers/icons/mob/actions/tremere_bloodsucker.dmi' - // Tremere powers don't level up, we have them hardcoded. level_current = 0 // Re-defining these as we want total control over them - power_flags = BP_AM_TOGGLE|BP_AM_STATIC_COOLDOWN - purchase_flags = TREMERE_CAN_BUY + power_flags = BP_AM_STATIC_COOLDOWN // Targeted stuff - power_activates_immediately = FALSE + unset_after_click = FALSE - ///The upgraded version of this Power. 'null' means it's the max level. - var/upgraded_power = null diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/auspex.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/auspex.dm index cb9cdeaad22cf..ef46427144a7c 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/auspex.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/auspex.dm @@ -8,118 +8,112 @@ * Level 5 - Cloak of Darkness until clicking an area, teleports the user to the selected area, causes nearby people to fall asleep. */ -// Look to /datum/action/cooldown/spell/pointed/void_phase for help. - +#define AUSPEX_BLOOD_COST_PER_TILE 5 +#define AUSPEX_BLEED_LEVEL 4 +#define AUSPEX_SLEEP_LEVEL 5 +#define AUSPEX_ANYWHERE_LEVEL 6 /datum/action/cooldown/bloodsucker/targeted/tremere/auspex - name = "Level 1: Auspex" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/auspex/two + name = "Auspex" level_current = 1 - desc = "Hide yourself within a Cloak of Darkness, click on an area to teleport up to 2 tiles away." button_icon_state = "power_auspex" - power_explanation = "Level 1: Auspex:\n\ - When Activated, you will be hidden in a Cloak of Darkness.\n\ - Click any area up to 2 tile away to teleport there, ending the Power.\n\ - Additionally upon teleporting your Stamina will be restored." - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_WHILE_INCAPACITATED|BP_CANT_USE_WHILE_UNCONSCIOUS - bloodcost = 5 - constant_bloodcost = 2 + bloodsucker_check_flags = BP_CANT_USE_IN_TORPOR + purchase_flags = TREMERE_CAN_BUY + bloodcost = 10 + constant_bloodcost = 1 cooldown_time = 12 SECONDS target_range = 2 - prefire_message = "Where do you wish to teleport to?" - -/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/two - name = "Level 2: Auspex" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/auspex/three - level_current = 2 - desc = "Hide yourself within a Cloak of Darkness, click on an area to teleport up to 3 tiles away." - power_explanation = "Level 2: Auspex:\n\ - When Activated, you will be hidden in a Cloak of Darkness.\n\ - Click any area up to 3 tile away to teleport there, ending the Power.\n\ - Additionally upon teleporting your Stamina will be restored." - bloodcost = 10 - cooldown_time = 10 SECONDS - target_range = 3 + power_activates_immediately = FALSE + prefire_message = "Right click to teleport" -/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/three - name = "Level 3: Auspex" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/auspex/advanced - level_current = 3 - desc = "Hide yourself within a Cloak of Darkness, click on an area to teleport." - power_explanation = "Level 3: Auspex:\n\ - When Activated, you will be hidden in a Cloak of Darkness.\n\ - Click any area up to teleport there, ending the Power.\n\ - Additionally upon teleporting your Stamina will be restored." - bloodcost = 15 - cooldown_time = 8 SECONDS - target_range = null +/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/on_power_upgrade() + // 1 + for default, the other + is for the upgrade that hasn't been added yet. + if(level_current >= AUSPEX_ANYWHERE_LEVEL) + target_range = 0 + else + target_range = min(level_current + 2, 10) + . = ..() -/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/advanced - name = "Level 4: Auspex" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/auspex/advanced/two - level_current = 4 - desc = "Hide yourself within a Cloak of Darkness, click on an area to teleport, leaving nearby people bleeding." - power_explanation = "Level 4: Auspex:\n\ - When Activated, you will be hidden in a Cloak of Darkness.\n\ - Click any area up to teleport there, ending the Power and causing people at your end location to start bleeding.\n\ - Additionally upon teleporting your Stamina will be restored." - background_icon_state = "tremere_power_gold_off" - active_background_icon_state = "tremere_power_gold_on" - base_background_icon_state = "tremere_power_gold_off" - bloodcost = 20 - cooldown_time = 6 SECONDS - target_range = null +/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/get_power_desc_extended() + . = "Hide yourself within a Cloak of Darkness, click on a tile to teleport" + if(target_range) + . += " up to [target_range] tiles away." + else + . += " anywhere you can see." + if(level_current >= AUSPEX_BLEED_LEVEL) + if(level_current >= AUSPEX_SLEEP_LEVEL) + . += " This will cause people at your destination to start bleeding and fall asleep." + else + . += " This will cause people at your destination to start bleeding." -/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/advanced/two - name = "Level 5: Auspex" - upgraded_power = null - level_current = 5 - desc = "Hide yourself within a Cloak of Darkness, click on an area to teleport, leaving nearby people bleeding and asleep." - power_explanation = "Level 5: Auspex:\n\ - When Activated, you will be hidden in a Cloak of Darkness.\n\ - Click any area up to teleport there, ending the Power and causing people at your end location to fall over in pain.\n\ - Additionally upon teleporting your Stamina will be restored." - bloodcost = 25 - cooldown_time = 8 SECONDS +/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/get_power_explanation_extended() + . = list() + . += "When Activated, you will be hidden in a Cloak of Darkness." + . += "[target_range ? "Click to teleport up to [target_range] tiles away, as long as you can see it" : "You can teleport anywhere you can see"]." + . += "Teleporting will refill your stamina to full." + . += "At level [AUSPEX_BLEED_LEVEL] you will cause people at your end location to start bleeding." + . += "At level [AUSPEX_SLEEP_LEVEL] you will cause people at your end location to fall asleep." + . += "At level [AUSPEX_ANYWHERE_LEVEL] you will be able to teleport anywhere, even if you cannot properly see the tile." + . += "The power will cost [AUSPEX_BLOOD_COST_PER_TILE] blood per tile that you teleport." /datum/action/cooldown/bloodsucker/targeted/tremere/auspex/CheckValidTarget(atom/target_atom) . = ..() if(!.) return FALSE - return isturf(target_atom) + if(!isturf(target_atom)) + return FALSE + var/turf/target_turf = target_atom + if(target_turf.is_blocked_turf_ignore_climbable()) + return FALSE + if(!(target_turf in view(owner.client.view, owner.client))) + owner.balloon_alert(owner, "out of view!") + return FALSE + return TRUE /datum/action/cooldown/bloodsucker/targeted/tremere/auspex/ActivatePower(trigger_flags) . = ..() owner.AddElement(/datum/element/digitalcamo) - animate(owner, alpha = 15, time = 1 SECONDS) + animate(owner, alpha = 15, time = 2 SECONDS) + return TRUE -/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/DeactivatePower() - animate(owner, alpha = 255, time = 1 SECONDS) +/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/DeactivatePower(deactivate_flags) + . = ..() + if(!.) + return FALSE + animate(owner, alpha = 255, time = 2 SECONDS) owner.RemoveElement(/datum/element/digitalcamo) - return ..() -/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/FireTargetedPower(atom/target_atom) +/datum/action/cooldown/bloodsucker/targeted/tremere/auspex/FireSecondaryTargetedPower(atom/target, params) . = ..() var/mob/living/user = owner - var/turf/targeted_turf = get_turf(target_atom) + var/turf/targeted_turf = get_turf(target) auspex_blink(user, targeted_turf) /datum/action/cooldown/bloodsucker/targeted/tremere/auspex/proc/auspex_blink(mob/living/user, turf/targeted_turf) - playsound(user, 'sound/magic/summon_karp.ogg', 60) - playsound(targeted_turf, 'sound/magic/summon_karp.ogg', 60) + var/blood_cost = AUSPEX_BLOOD_COST_PER_TILE * get_dist(user, targeted_turf) + if(!can_pay_blood(blood_cost)) + owner.balloon_alert(owner, "not enough blood!") + return + playsound(user, 'sound/effects/magic/summon_karp.ogg', 60) + playsound(targeted_turf, 'sound/effects/magic/summon_karp.ogg', 60) new /obj/effect/particle_effect/fluid/smoke/vampsmoke(user.drop_location()) new /obj/effect/particle_effect/fluid/smoke/vampsmoke(targeted_turf) for(var/mob/living/carbon/living_mob in range(1, targeted_turf)-user) - if(IS_BLOODSUCKER(living_mob) || IS_VASSAL(living_mob)) + if(IS_BLOODSUCKER(living_mob) || IS_GHOUL(living_mob)) continue - if(level_current >= 4) + if(level_current >= AUSPEX_BLEED_LEVEL) var/obj/item/bodypart/bodypart = pick(living_mob.bodyparts) bodypart.force_wound_upwards(/datum/wound/slash/flesh/critical) living_mob.adjustBruteLoss(15) - if(level_current >= 5) + if(level_current >= AUSPEX_SLEEP_LEVEL) living_mob.Knockdown(10 SECONDS, ignore_canstun = TRUE) - + do_teleport(owner, targeted_turf, no_effects = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) user.adjustStaminaLoss(-user.staminaloss) - power_activated_sucessfully() + PowerActivatedSuccesfully(cost_override = blood_cost) + +#undef AUSPEX_BLOOD_COST_PER_TILE +#undef AUSPEX_BLEED_LEVEL +#undef AUSPEX_SLEEP_LEVEL +#undef AUSPEX_ANYWHERE_LEVEL diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm index 2592a82cf5fa2..b1d08c8afd76b 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm @@ -4,205 +4,213 @@ * Level 1 - Mesmerizes target * Level 2 - Mesmerizes and mutes target * Level 3 - Mesmerizes, blinds and mutes target - * Level 4 - Target (if at least in crit & has a mind) will revive as a Mute/Deaf Vassal for 5 minutes before dying. - * Level 5 - Target (if at least in crit & has a mind) will revive as a Vassal for 8 minutes before dying. + * Level 4 - Target (if at least in crit & has a mind) will revive as a Mute/Deaf Ghoul for 5 minutes before dying. + * Level 5 - Target (if at least in crit & has a mind) will revive as a Ghoul for 8 minutes before dying. */ -// Copied from mesmerize.dm - -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate - name = "Level 1: Dominate" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/dominate/two +#define TEMP_GHOULIZE_COST 150 +#define DOMINATE_XRAY_LEVEL 3 +#define DOMINATE_NON_MUTE_GHOULIZE_LEVEL 4 +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate + name = "Dominate" + button_icon_state = "power_auspex" + background_icon_state = "tremere_power_off" + active_background_icon_state = "tremere_power_on" + base_background_icon_state = "tremere_power_off" + button_icon = 'modular_zubbers/icons/mob/actions/tremere_bloodsucker.dmi' + background_icon = 'modular_zubbers/icons/mob/actions/tremere_bloodsucker.dmi' level_current = 1 - desc = "Mesmerize any foe who stands still long enough." button_icon_state = "power_dominate" - power_explanation = "Level 1: Dominate:\n\ - Click any person to, after a 4 second timer, Mesmerize them.\n\ - This will completely immobilize them for the next 10.5 seconds." - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_UNCONSCIOUS + purchase_flags = TREMERE_CAN_BUY bloodcost = 15 - constant_bloodcost = 2 - cooldown_time = 50 SECONDS + constant_bloodcost = 0.1 target_range = 6 - prefire_message = "Select a target." - -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/two - name = "Level 2: Dominate" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/dominate/three - level_current = 2 - desc = "Mesmerize and mute any foe who stands still long enough." - power_explanation = "Level 2: Dominate:\n\ - Click any person to, after a 4 second timer, Mesmerize them.\n\ - This will completely immobilize and mute them for the next 12 seconds." - bloodcost = 20 - cooldown_time = 40 SECONDS - -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/three - name = "Level 3: Dominate" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/dominate/advanced - level_current = 3 - desc = "Mesmerize, mute and blind any foe who stands still long enough." - power_explanation = "Level 3: Dominate:\n\ - Click any person to, after a 4 second timer, Mesmerize them.\n\ - This will completely immobilize, mute, and blind them for the next 13.5 seconds." - bloodcost = 30 - cooldown_time = 35 SECONDS - -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/CheckValidTarget(atom/target_atom) + mesmerize_delay = 4 SECONDS + blind_at_level = 3 + requires_facing_target = FALSE + blocked_by_glasses = FALSE + knockdown_on_secondary = TRUE + /// Data huds to show while the power is active + var/list/datahuds = list(DATA_HUD_SECURITY_ADVANCED, DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC, DATA_HUD_BOT_PATH) + var/list/thralls = list() + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/Remove(mob/removed_from) . = ..() - if(!.) - return FALSE - return isliving(target_atom) + for(var/thrall in thralls) + if(!thrall) + continue + end_possession(thrall) -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/CheckCanTarget(atom/target_atom) +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/get_power_desc_extended() . = ..() - if(!.) - return FALSE + if(level_current >= DOMINATE_GHOULIZE_LEVEL) + . += "If your target is in critical condition or dead, they will instead be turned into a temporary Ghoul. This will cost [TEMP_GHOULIZE_COST] blood. Pre-existing dead ghouls will simply be revived." + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/get_power_explanation_extended() + . = list() + . += "Click any person to, after [DisplayTimeText(mesmerize_delay)], stun them for [DisplayTimeText(get_power_time())]." + . += "Right clicking on your victim however will apply a knockdown will confuse and slow them down for [DisplayTimeText(get_power_time())]." + . += "A left click will completely immobilize, and blind them for the next [DisplayTimeText(get_power_time())] seconds, and will also mute them for [DisplayTimeText(get_power_time())] seconds." + . += "While this ability is active, you will be able to see additional information about everyone in the room." + . += "At level [DOMINATE_XRAY_LEVEL], you will gain X-Ray vision while this ability is active." + . += "At level [DOMINATE_GHOULIZE_LEVEL], while adjacent to the target, if your target is in critical condition or dead, they will instead be turned into a temporary Ghoul. This will cost [TEMP_GHOULIZE_COST] blood." + . += "The victim must have atleast [BLOOD_VOLUME_BAD] blood to be ghoulized." + . += "The ghoul will be mute and deaf if the level of [src] is not at least [DOMINATE_NON_MUTE_GHOULIZE_LEVEL]" + . += "If you use this on a currently dead normal Ghoul, they will will not suddenly cease to live as if a temporary Ghoul." + . += "They will have complete loyalty to you, until their death in [DisplayTimeText(get_ghoul_duration())] upon use." + . += "Ghoulizing or reviving a ghoul will make this ability go on cooldown for [DisplayTimeText(get_ghoulize_cooldown())]." + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/CheckCanTarget(atom/target_atom) var/mob/living/selected_target = target_atom - if(!selected_target.mind) - owner.balloon_alert(owner, "[selected_target] is mindless.") - return FALSE - return TRUE - -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/advanced - name = "Level 4: Possession" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/dominate/advanced/two - level_current = 4 - desc = "Mesmerize, mute and blind any foe who stands still long enough, or convert the damaged or dead to temporary Vassals." - power_explanation = "Level 4: Possession:\n\ - Click any person to, after a 4 second timer, Mesmerize them.\n\ - This will completely immobilize, mute, and blind them for the next 13.5 seconds.\n\ - However, while adjacent to the target, if your target is in critical condition or dead, they will instead be turned into a temporary Vassal.\n\ - If you use this on a currently dead normal Vassal, they will will not suddenly cease to live as if a temporary Vassal.\n\ - Despite being Mute and Deaf, they will still have complete loyalty to you, until their death in 5 minutes upon use." - background_icon_state = "tremere_power_gold_off" - active_background_icon_state = "tremere_power_gold_on" - base_background_icon_state = "tremere_power_gold_off" - bloodcost = 80 - cooldown_time = 3 MINUTES - -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/advanced/two - name = "Level 5: Possession" - desc = "Mesmerize, mute and blind any foe who stands still long enough, or convert the damaged or dead to temporary Vassals." - level_current = 5 - upgraded_power = null - power_explanation = "Level 5: Possession:\n\ - Click any person to, after a 4 second timer, Mesmerize them.\n\ - This will completely immobilize, mute, and blind them for the next 13.5 seconds.\n\ - However, while adjacent to the target, if your target is in critical condition or dead, they will instead be turned into a temporary Vassal.\n\ - If you use this on a currently dead normal Vassal, they will will not suddenly cease to live as if a temporary Vassal.\n\ - They will have complete loyalty to you, until their death in 8 minutes upon use." - bloodcost = 100 - cooldown_time = 2 MINUTES - -// The advanced version -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/advanced/CheckCanTarget(atom/target_atom) + if(level_current >= DOMINATE_GHOULIZE_LEVEL && (IS_GHOUL(selected_target) || selected_target.stat >= SOFT_CRIT)) + if(selected_target?.mind && owner.Adjacent(selected_target)) + return TRUE . = ..() if(!.) return FALSE - var/mob/living/selected_target = target_atom - if((IS_VASSAL(selected_target) || selected_target.stat >= SOFT_CRIT) && !owner.Adjacent(selected_target)) - owner.balloon_alert(owner, "out of range.") - return FALSE return TRUE -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/FireTargetedPower(atom/target_atom) +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/ContinueActive(mob/living/user, mob/living/target) + if(!target) + return can_use(user) . = ..() - var/mob/living/target = target_atom - var/mob/living/user = owner - if(target.stat != CONSCIOUS && level_current >= 4) - if(user.Adjacent(target)) - attempt_vassalize(target, user) - else - owner.balloon_alert(owner, "too far to vassalize!") - return - else if(IS_VASSAL(target)) - owner.balloon_alert(owner, "vassal cant be revived") - return - attempt_mesmerize(target, user) -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/proc/attempt_mesmerize(mob/living/target, mob/living/user) - owner.balloon_alert(owner, "attempting to mesmerize.") - if(!do_after(user, 3 SECONDS, target, NONE, TRUE)) - return +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/ActivatePower(atom/target) + . = ..() + if(level_current >= DOMINATE_XRAY_LEVEL) + ADD_TRAIT(owner, TRAIT_XRAY_VISION, DOMINATE_TRAIT) + for(var/hudtype in datahuds) + var/datum/atom_hud/data_hud = GLOB.huds[hudtype] + data_hud.show_to(owner) + owner.update_sight() + return TRUE - power_activated_sucessfully() - var/power_time = 90 + level_current * 15 - /*if(IS_MONSTERHUNTER(target)) - to_chat(target, span_notice("You feel you something crawling under your skin, but it passes.")) - return*/ - // todo replace with status effect so we don't only check chainstunning above lvl 2 - if(HAS_TRAIT_FROM_ONLY(target, TRAIT_MUTE, BLOODSUCKER_TRAIT)) - owner.balloon_alert(owner, "[target] is already in some form of hypnotic gaze.") +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/DeactivatePower(deactivate_flags) + . = ..() + if(!.) return - if(iscarbon(target)) - var/mob/living/carbon/mesmerized = target - owner.balloon_alert(owner, "successfully mesmerized [mesmerized].") - if(level_current >= 2) - ADD_TRAIT(target, TRAIT_MUTE, BLOODSUCKER_TRAIT) - if(level_current >= 3) - target.become_blind(BLOODSUCKER_TRAIT) - mesmerized.Immobilize(power_time) - mesmerized.next_move = world.time + power_time - ADD_TRAIT(mesmerized, TRAIT_NO_TRANSFORM, BLOODSUCKER_TRAIT) - addtimer(CALLBACK(src, PROC_REF(end_mesmerize), user, target), power_time) - if(issilicon(target)) - var/mob/living/silicon/mesmerized = target - mesmerized.emp_act(EMP_HEAVY) - owner.balloon_alert(owner, "temporarily shut [mesmerized] down.") - -/datum/action/cooldown/bloodsucker/targeted/tremere/proc/end_mesmerize(mob/living/user, mob/living/target) - REMOVE_TRAIT(target, TRAIT_NO_TRANSFORM, BLOODSUCKER_TRAIT) - target.cure_blind(BLOODSUCKER_TRAIT) - REMOVE_TRAIT(target, TRAIT_MUTE, BLOODSUCKER_TRAIT) - if(istype(user) && target.stat == CONSCIOUS && (target in view(6, get_turf(user)))) - owner.balloon_alert(owner, "[target] snapped out of their trance.") - -/datum/action/cooldown/bloodsucker/targeted/tremere/dominate/proc/attempt_vassalize(mob/living/target, mob/living/user) - var/datum/antagonist/vassal/is_vassal = IS_VASSAL(target) - if(!bloodsuckerdatum_power.can_make_vassal(target)) - owner.balloon_alert(owner, "not a valid target for vassalization!.") + if(level_current >= DOMINATE_XRAY_LEVEL) + REMOVE_TRAIT(owner, TRAIT_XRAY_VISION, DOMINATE_TRAIT) + for(var/hudtype in datahuds) + var/datum/atom_hud/data_hud = GLOB.huds[hudtype] + data_hud.hide_from(owner) + owner.update_sight() + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/FireTargetedPower(atom/target, params) + var/mob/living/target_mob = target + var/mob/living/user = owner + if(target_mob.stat != CONSCIOUS && level_current >= DOMINATE_GHOULIZE_LEVEL) + if(user.Adjacent(target)) + attempt_ghoulize(target, user) + else + if(IS_GHOUL(target_mob)) + owner.balloon_alert(owner, "too far to revive!") + else + owner.balloon_alert(owner, "too far to ghoulize!") + return TRUE + return ..() + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/attempt_ghoulize(mob/living/target, mob/living/user) + owner.face_atom(target) + var/datum/antagonist/ghoul/ghoul = IS_GHOUL(target) + if(!victim_has_blood(target)) return FALSE - - owner.balloon_alert(owner, "attempting to vassalize.") + if(ghoul) + owner.balloon_alert(owner, "attempting to revive.") + else + owner.balloon_alert(owner, "attempting to ghoulize.") if(!do_after(user, 6 SECONDS, target, NONE, TRUE)) return FALSE - - if(is_vassal?.master == bloodsuckerdatum_power) + if(!victim_has_blood(target)) + return FALSE + if(ghoul?.master == bloodsuckerdatum_power) if(target.stat != DEAD) owner.balloon_alert(owner, "not dead!") return FALSE - power_activated_sucessfully() + PowerActivatedSuccesfully(get_ghoulize_cooldown()) to_chat(user, span_warning("We revive [target]!")) owner.balloon_alert(owner, "successfully revived!") - target.mind.grab_ghost() + target.mind?.grab_ghost() target.revive(ADMIN_HEAL_ALL) + pay_cost(TEMP_GHOULIZE_COST - bloodcost) + log_combat(owner, target, "tremere revived", addition="Revived their ghoul using dominate") return FALSE - - if(!bloodsuckerdatum_power.make_vassal(target)) - owner.balloon_alert(owner, "not a valid target for vassalization!.") + if(!bloodsuckerdatum_power.make_ghoul(target) ) + owner.balloon_alert(owner, "not a valid target for ghoulization!.") return /*if(IS_MONSTERHUNTER(target)) to_chat(target, span_notice("Their body refuses to react...")) return*/ - power_activated_sucessfully() + PowerActivatedSuccesfully(get_ghoulize_cooldown()) to_chat(user, span_warning("We revive [target]!")) - target.mind.grab_ghost() + // no escaping at this point + target.mind?.grab_ghost(TRUE) target.revive(ADMIN_HEAL_ALL) - var/datum/antagonist/vassal/vassaldatum = target.mind.has_antag_datum(/datum/antagonist/vassal) - vassaldatum.special_type = TREMERE_VASSAL //don't turn them into a favorite please - var/living_time = (1 MINUTES) * level_current - if(level_current <= 4) + var/datum/antagonist/ghoul/ghouldatum = target.mind.has_antag_datum(/datum/antagonist/ghoul) + ghouldatum.special_type = TREMERE_GHOUL //don't turn them into a favorite please + var/living_time = get_ghoul_duration() + log_combat(owner, target, "tremere mindslaved", addition="Revived and converted [target] into a temporary tremere ghoul for [DisplayTimeText(living_time)].") + if(level_current <= DOMINATE_NON_MUTE_GHOULIZE_LEVEL) target.add_traits(list(TRAIT_MUTE, TRAIT_DEAF), DOMINATE_TRAIT) - addtimer(CALLBACK(src, PROC_REF(end_possession), target), living_time) - RegisterSignal(target, COMSIG_LIVING_DEATH, PROC_REF(end_possession)) + user.balloon_alert(target, "only [DisplayTimeText(living_time)] left to live!") + to_chat(target, span_warning("You will only live for [DisplayTimeText(living_time)]! Obey your master and go out in a blaze of glory!")) + var/timer_id = addtimer(CALLBACK(src, PROC_REF(end_possession), target), living_time, TIMER_STOPPABLE) + // timer that only the master and thrall can see + setup_timer(user, target, living_time, timer_id) + thralls += target + RegisterSignals(target, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING), PROC_REF(end_possession), timer_id) + RegisterSignal(ghouldatum, COMSIG_ANTAGONIST_REMOVED, PROC_REF(on_antag_datum_removal), target, timer_id) + pay_cost(TEMP_GHOULIZE_COST - bloodcost) return TRUE -/datum/action/cooldown/bloodsucker/targeted/tremere/proc/end_possession(mob/living/user) - if(!IS_VASSAL(user) && !HAS_TRAIT_FROM_ONLY(user, TRAIT_MUTE, DOMINATE_TRAIT) && !HAS_TRAIT_FROM_ONLY(user, TRAIT_MUTE, DOMINATE_TRAIT)) +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/victim_has_blood(mob/living/target) + // you can always revive non-temporary ghouls + if(IS_GHOUL(target)) + return TRUE + if(target.blood_volume < BLOOD_VOLUME_BAD) + owner.balloon_alert(owner, "not enough blood in victim!") + return FALSE + return TRUE + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/setup_timer(mob/living/user, mob/living/target, living_time, timer_id) + var/list/show_to = list(user, target) + if(bloodsuckerdatum_power && length(bloodsuckerdatum_power.ghouls)) + for(var/datum/antagonist/ghoul in bloodsuckerdatum_power.ghouls) + if(!ghoul?.owner?.current) + continue + show_to += ghoul.owner.current + new /atom/movable/screen/text/screen_timer/attached(null, show_to, timer_id, "Dies in ${timer}", null, null, target) + new /atom/movable/screen/text/screen_timer(null, target, timer_id, "You die in ${timer}") + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/on_antag_datum_removal(datum/antagonist/ghoul, mob/living/thrall, timer_id) + end_possession(thrall, timer_id) + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/end_possession(mob/living/user, timer_id) + if(timer_id) + deltimer(timer_id) + if(!user) + CRASH("[src] end_possession called with no user!") + if(!(user in thralls)) return + thralls -= user user.remove_traits(list(TRAIT_MUTE, TRAIT_DEAF), DOMINATE_TRAIT) - user.mind.remove_antag_datum(/datum/antagonist/vassal) + if(!HAS_TRAIT(user, TRAIT_NOBLOOD)) + user.blood_volume = 0 + if(!IS_GHOUL(user)) + to_chat(user, span_warning("You feel the blood keeping you alive run out!")) + return to_chat(user, span_warning("You feel the Blood of your Master run out!")) + user.mind?.remove_antag_datum(/datum/antagonist/ghoul) + if(user.stat == DEAD) + return user.death() + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/get_ghoul_duration() + return 4 MINUTES * max(level_current, 1) + +/datum/action/cooldown/bloodsucker/targeted/mesmerize/dominate/proc/get_ghoulize_cooldown() + return cooldown_time * 3 + +#undef TEMP_GHOULIZE_COST +#undef DOMINATE_XRAY_LEVEL diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/thaumaturgy.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/thaumaturgy.dm index 2cdf85ce5f96f..a89993401fedc 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/thaumaturgy.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/thaumaturgy.dm @@ -8,119 +8,206 @@ * Level 5 - Bloodbeam spell that breaks open lockers/doors + double damage & steals blood - Gives them a Blood shield until they use Bloodbeam */ +#define BLOOD_SHIELD_BLOCK_CHANCE 75 +#define BLOOD_SHIELD_BLOOD_COST 15 +#define THAUMATURGY_BLOOD_COST_PER_CHARGE 5 +#define THAUMATURGY_COOLDOWN_PER_CHARGE 5 SECONDS + +#define THAUMATURGY_SHIELD_LEVEL 2 +#define THAUMATURGY_DOOR_BREAK_LEVEL 3 +#define THAUMATURGY_EXTRA_DAMAGE_LEVEL 4 +#define THAUMATURGY_BLOOD_STEAL_LEVEL 5 /datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy - name = "Level 1: Thaumaturgy" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/two - desc = "Fire a blood bolt at your enemy, dealing Burn damage." + name = "Thaumaturgy" level_current = 1 button_icon_state = "power_thaumaturgy" - power_explanation = "Thaumaturgy:\n\ - Gives you a one shot blood bolt spell, firing it at a person deals 20 Burn damage" - check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_UNCONSCIOUS - bloodcost = 20 + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED + purchase_flags = TREMERE_CAN_BUY + // custom cooldown handling based on charges + power_flags = BP_AM_STATIC_COOLDOWN + bloodcost = 5 constant_bloodcost = 0 - cooldown_time = 6 SECONDS - prefire_message = "Click where you wish to fire." - ///Blood shield given while this Power is active. + // 5 seconds per charge + cooldown_time = 10 SECONDS + prefire_message = "Right click where you wish to fire." + click_to_activate = TRUE // you pay to replenish charges + power_activates_immediately = FALSE + unset_after_click = FALSE // Lets us cast multiple times + /// How many times you can shoot before you need to recast + var/charges = 0 + /// How long it takes before you can shoot again + var/shot_cooldown = 0 var/datum/weakref/blood_shield + var/obj/projectile/magic/arcane_barrage/bloodsucker/magic_9ball + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/Grant() + charges = get_max_charges() + . = ..() + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/Remove() + . = ..() + var/shield = blood_shield?.resolve() + if(shield) + QDEL_NULL(shield) + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/on_power_upgrade() + cooldown_time = get_max_charges() * THAUMATURGY_COOLDOWN_PER_CHARGE + bloodcost = get_max_charges() * THAUMATURGY_BLOOD_COST_PER_CHARGE + // just in case you somehow level up while the power is active + charges = get_max_charges() + . = ..() -/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/two - name = "Level 2: Thaumaturgy" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/three - desc = "Create a Blood shield and fire a blood bolt at your enemy, dealing Burn damage." - level_current = 2 - power_explanation = "Thaumaturgy:\n\ - Activating Thaumaturgy will temporarily give you a Blood Shield,\n\ - The blood shield has a 75% block chance, but costs 15 Blood per hit to maintain.\n\ - You will also have the ability to fire a Blood beam, ending the Power.\n\ - If the Blood beam hits a person, it will deal 20 Burn damage." - prefire_message = "Click where you wish to fire (using your power removes blood shield)." - bloodcost = 40 - cooldown_time = 4 SECONDS - -/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/three - name = "Level 3: Thaumaturgy" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/advanced - desc = "Create a Blood shield and fire a blood bolt, dealing Burn damage and opening doors/lockers." - level_current = 3 - power_explanation = "Thaumaturgy:\n\ - Activating Thaumaturgy will temporarily give you a Blood Shield,\n\ - The blood shield has a 75% block chance, but costs 15 Blood per hit to maintain.\n\ - You will also have the ability to fire a Blood beam, ending the Power.\n\ - If the Blood beam hits a person, it will deal 20 Burn damage. If it hits a locker or door, it will break it open." - bloodcost = 50 - cooldown_time = 6 SECONDS - -/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/advanced - name = "Level 4: Blood Strike" - upgraded_power = /datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/advanced/two - desc = "Create a Blood shield and fire a blood bolt, dealing Burn damage and opening doors/lockers." - level_current = 4 - power_explanation = "Thaumaturgy:\n\ - Activating Thaumaturgy will temporarily give you a Blood Shield,\n\ - The blood shield has a 75% block chance, but costs 15 Blood per hit to maintain.\n\ - You will also have the ability to fire a Blood beam, ending the Power.\n\ - If the Blood beam hits a person, it will deal 40 Burn damage.\n\ - If it hits a locker or door, it will break it open." - background_icon_state = "tremere_power_gold_off" - active_background_icon_state = "tremere_power_gold_on" - base_background_icon_state = "tremere_power_gold_off" - prefire_message = "Click where you wish to fire (using your power removes blood shield)." - bloodcost = 60 - cooldown_time = 6 SECONDS - -/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/advanced/two - name = "Level 5: Blood Strike" - upgraded_power = null - desc = "Create a Blood shield and fire a blood bolt, dealing Burn damage, stealing Blood and opening doors/lockers." - level_current = 5 - power_explanation = "Thaumaturgy:\n\ - Activating Thaumaturgy will temporarily give you a Blood Shield,\n\ - The blood shield has a 75% block chance, but costs 15 Blood per hit to maintain.\n\ - You will also have the ability to fire a Blood beam, ending the Power.\n\ - If the Blood beam hits a person, it will deal 40 Burn damage and steal blood to feed yourself, though at a net-negative.\n\ - If it hits a locker or door, it will break it open." - bloodcost = 80 - cooldown_time = 8 SECONDS - -/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/ActivatePower(trigger_flags) +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/get_power_desc_extended() + . = "
        Projectile can seek for [get_shot_range()] tiles.
        " + . += "Fire a slow seeking blood bolt at your enemy.
        " + if(level_current >= THAUMATURGY_SHIELD_LEVEL) + . += "Right click the button to create a blood shield
        " + if(level_current >= THAUMATURGY_DOOR_BREAK_LEVEL) + . += "The projectile will open doors/lockers" + if(level_current >= THAUMATURGY_BLOOD_STEAL_LEVEL) + . += " and steal blood from the target" + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/get_power_explanation_extended() + . = list() + . += "Thaumaturgy grants you the ability to cast and shoot a slow moving target seeking blood projectile." + . += "The projectile will auto aim to a nearby mob if you aim at the ground." + . += "If the Blood blast hits a person, it will deal [get_blood_bolt_damage()] [initial(magic_9ball.damage_type)] damage, and is blocked by [initial(magic_9ball.armor_flag)] armor." + . += "You can use Blood blast [get_max_charges()] times before needing to recast Thaumaturgy. After each shot you will have to wait [DisplayTimeText(get_shot_cooldown())]." + . += "At level [THAUMATURGY_SHIELD_LEVEL] it will grant you a shield that will block [BLOOD_SHIELD_BLOCK_CHANCE]% of incoming damage, costing you [THAUMATURGY_BLOOD_COST_PER_CHARGE] blood each time." + . += "To activate the shield, right click the action button." + . += "At level [THAUMATURGY_DOOR_BREAK_LEVEL], it will also break open lockers and doors." + . += "At level [THAUMATURGY_BLOOD_STEAL_LEVEL], it will also steal blood to feed yourself, just as much as each charge costs." + . += "The cooldown increases by [DisplayTimeText(THAUMATURGY_COOLDOWN_PER_CHARGE)] per charge used, and each blast costs [THAUMATURGY_BLOOD_COST_PER_CHARGE] blood." + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/ActivatePower(mob/target) . = ..() - owner.balloon_alert(owner, "you start thaumaturgy") - if(level_current >= 2) // Only if we're at least level 2. + charges = get_max_charges() + toggle_blood_shield(TRUE) + return TRUE + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/proc/toggle_blood_shield(toggle) + if(level_current < THAUMATURGY_SHIELD_LEVEL) + return + // don't toggle if we're already in the state we want to be in + if(toggle == !!blood_shield) + return + + if(blood_shield) + var/shield = blood_shield?.resolve() + owner.visible_message( + span_warning("[owner]\'s [blood_shield] looses it's form and dissapears into [src]'\s hands "), + span_warning("We unform our Blood shield!"), + span_hear("You hear liquids sloshing around."), + ) + owner.balloon_alert(owner, "you unform the [shield]") + qdel(shield) + blood_shield = null + else var/obj/item/shield/bloodsucker/new_shield = new blood_shield = WEAKREF(new_shield) if(!owner.put_in_inactive_hand(new_shield)) + QDEL_NULL(new_shield) owner.balloon_alert(owner, "off hand is full!") - to_chat(owner, span_notice("Blood shield couldn't be activated as your off hand is full.")) + to_chat(owner, span_notice("[capitalize(src)] couldn't be activated as your off hand is full.")) return FALSE + owner.balloon_alert(owner, "you form the [src]") owner.visible_message( - span_warning("[owner]\'s hands begins to bleed and forms into a blood shield!"), - span_warning("We activate our Blood shield!"), + span_warning("[owner]\'s hands begins to bleed and forms into a [src]!"), + span_warning("We form our [src]!"), span_hear("You hear liquids forming together."), ) -/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/DeactivatePower() - if(blood_shield) - QDEL_NULL(blood_shield) - return ..() +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/DeactivatePower(deactivate_flags) + . = ..() + if(!.) + return + var/used_charges = get_max_charges() - charges + toggle_blood_shield(FALSE) + if(used_charges > 0) + StartCooldown() + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/StartCooldown(override_cooldown_time, override_melee_cooldown_time) + var/used_charges = get_max_charges() - charges + // no cooldown if we didn't use any charges + if(used_charges <= 0) + return + charges = get_max_charges() + return ..(used_charges * THAUMATURGY_COOLDOWN_PER_CHARGE, override_melee_cooldown_time) + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/proc/get_blood_bolt_damage() + if(level_current >= THAUMATURGY_EXTRA_DAMAGE_LEVEL) + return 40 + return 20 + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/proc/get_max_charges() + return level_current * 2 + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/proc/get_shot_cooldown() + return max(1.5 - (level_current * 0.1), 0) SECONDS -/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/FireTargetedPower(atom/target_atom) +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/proc/get_shot_range() + return initial(magic_9ball.range) + level_current * 10 + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/update_button_status(atom/movable/screen/movable/action_button/button, force) . = ..() + if(next_use_time - world.time <= 0) + button.maptext = MAPTEXT_TINY_UNICODE(span_center("[charges]/[get_max_charges()]")) +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/FireSecondaryTargetedPower(atom/target, params) + if(shot_cooldown > world.time) + return + if(!can_pay_blood(THAUMATURGY_BLOOD_COST_PER_CHARGE)) + owner.balloon_alert(owner, "not enough blood!") + DeactivatePower() + return + shot_cooldown = world.time + get_shot_cooldown() var/mob/living/user = owner owner.balloon_alert(owner, "you fire a blood bolt!") - to_chat(user, span_warning("You fire a blood bolt!")) + owner.visible_message( + span_warning("[owner] fires a blood bolt at [target]!"), + span_warning("You fire a blood bolt at [target]!"), + span_hear("You hear a loud crackling sound."), + ) user.changeNext_move(CLICK_CD_RANGE) - user.newtonian_move(get_dir(target_atom, user)) - var/obj/projectile/magic/arcane_barrage/bloodsucker/magic_9ball = new(user.loc) - magic_9ball.bloodsucker_power = src + user.newtonian_move(get_dir(target, user)) + user.face_atom(target) + handle_shot(user, target) + + pay_cost(THAUMATURGY_BLOOD_COST_PER_CHARGE) + playsound(user, 'sound/effects/magic/wand_teleport.ogg', 60, TRUE) + charges -= 1 + build_all_button_icons(UPDATE_BUTTON_STATUS) + if(charges <= 0) + // delay the message so it doesn't overlap with the cooldown message + addtimer(CALLBACK(owner, TYPE_PROC_REF(/atom, balloon_alert), owner, "no charges left!"), 0.5 SECONDS) + PowerActivatedSuccesfully(cost_override = 0) + +/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/proc/handle_shot(mob/user, atom/target) + magic_9ball = new(get_turf(user)) magic_9ball.firer = user - magic_9ball.def_zone = ran_zone(user.zone_selected) - magic_9ball.preparePixelProjectile(target_atom, user) + magic_9ball.power_ref = WEAKREF(src) + magic_9ball.damage = get_blood_bolt_damage() + magic_9ball.def_zone = ran_zone(user.zone_selected, min(level_current * 10, 90)) + magic_9ball.preparePixelProjectile(target, user) + // autotarget if we aim at a turf + if(isturf(target)) + var/list/targets = list() + for(var/mob/living/possible_target as anything in orange(1, target)) + if(!ismob(possible_target)) + continue + var/datum/antagonist/ghoul/ghoul = IS_GHOUL(possible_target) + if(length(bloodsuckerdatum_power?.ghouls) && ghoul && (ghoul in bloodsuckerdatum_power?.ghouls)) + continue + targets += possible_target + if(length(targets)) + magic_9ball.set_homing_target(pick(targets)) + else if(ismob(target)) + magic_9ball.homing_target = target + magic_9ball.homing_turn_speed = min(10 * level_current, 90) + magic_9ball.range = initial(magic_9ball.range) + level_current * 10 INVOKE_ASYNC(magic_9ball, TYPE_PROC_REF(/obj/projectile, fire)) - playsound(user, 'sound/magic/wand_teleport.ogg', 60, TRUE) - power_activated_sucessfully() - + // ditch the pointer to reduce harddels + magic_9ball = null /** * # Blood Bolt * @@ -129,33 +216,39 @@ /obj/projectile/magic/arcane_barrage/bloodsucker name = "blood bolt" icon_state = "mini_leaper" - damage = 20 - var/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/bloodsucker_power + damage = 1 + wound_bonus = 20 + armour_penetration = 30 + speed = 1 + pixel_speed_multiplier = 0.6 + impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser + range = 30 + armor_flag = LASER + var/datum/weakref/power_ref /obj/projectile/magic/arcane_barrage/bloodsucker/on_hit(target, blocked = 0, pierce_hit) - if(istype(target, /obj/structure/closet) && bloodsucker_power.level_current >= 3) + var/datum/action/cooldown/bloodsucker/targeted/tremere/thaumaturgy/bloodsucker_power = power_ref?.resolve() + if(!bloodsucker_power) + return ..() + if(istype(target, /obj/structure/closet) && bloodsucker_power.level_current >= THAUMATURGY_DOOR_BREAK_LEVEL) var/obj/structure/closet/hit_closet = target if(hit_closet) hit_closet.welded = FALSE hit_closet.locked = FALSE hit_closet.broken = TRUE hit_closet.update_appearance() - qdel(src) - return BULLET_ACT_HIT - if(istype(target, /obj/machinery/door) && bloodsucker_power.level_current >= 3) + return ..() + if(istype(target, /obj/machinery/door) && bloodsucker_power.level_current >= THAUMATURGY_DOOR_BREAK_LEVEL) var/obj/machinery/door/hit_airlock = target hit_airlock.open(2) qdel(src) - return BULLET_ACT_HIT + return ..() if(ismob(target)) - if(bloodsucker_power.level_current >= 4) - damage = 40 - if(bloodsucker_power.level_current >= 5) + if(bloodsucker_power.level_current >= THAUMATURGY_BLOOD_STEAL_LEVEL) var/mob/living/person_hit = target - person_hit.blood_volume -= 60 - bloodsucker_power.bloodsuckerdatum_power.AdjustBloodVolume(60) - qdel(src) - return BULLET_ACT_HIT + person_hit.blood_volume -= THAUMATURGY_BLOOD_COST_PER_CHARGE + bloodsucker_power.bloodsuckerdatum_power.AdjustBloodVolume(THAUMATURGY_BLOOD_COST_PER_CHARGE) + return ..() . = ..() /** @@ -173,14 +266,23 @@ icon_state = "blood_shield" lefthand_file = 'modular_zubbers/icons/mob/inhands/weapons/bloodsucker_lefthand.dmi' righthand_file = 'modular_zubbers/icons/mob/inhands/weapons/bloodsucker_righthand.dmi' - block_chance = 75 + block_chance = BLOOD_SHIELD_BLOCK_CHANCE /obj/item/shield/bloodsucker/Initialize() . = ..() ADD_TRAIT(src, TRAIT_NODROP, BLOODSUCKER_TRAIT) /obj/item/shield/bloodsucker/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(owner) if(bloodsuckerdatum) - bloodsuckerdatum.AdjustBloodVolume(-15) + bloodsuckerdatum.AdjustBloodVolume(-BLOOD_SHIELD_BLOOD_COST) return ..() + +#undef BLOOD_SHIELD_BLOCK_CHANCE +#undef BLOOD_SHIELD_BLOOD_COST +#undef THAUMATURGY_BLOOD_COST_PER_CHARGE +#undef THAUMATURGY_COOLDOWN_PER_CHARGE + +#undef THAUMATURGY_SHIELD_LEVEL +#undef THAUMATURGY_DOOR_BREAK_LEVEL +#undef THAUMATURGY_BLOOD_STEAL_LEVEL diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/distress.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/distress.dm index 3b02ca8d4e3ac..2f07a6c804605 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/distress.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/distress.dm @@ -9,14 +9,16 @@ purchase_flags = NONE bloodcost = 10 cooldown_time = 10 SECONDS + level_current = -1 /datum/action/cooldown/bloodsucker/distress/ActivatePower(trigger_flags) . = ..() var/turf/open/floor/target_area = get_area(owner) - var/datum/antagonist/vassal/vassaldatum = owner.mind.has_antag_datum(/datum/antagonist/vassal) + var/datum/antagonist/ghoul/ghouldatum = owner.mind.has_antag_datum(/datum/antagonist/ghoul) owner.balloon_alert(owner, "you call out for your master!") - to_chat(vassaldatum.master.owner, "[owner], your loyal Vassal, is desperately calling for aid at [target_area]!") + to_chat(ghouldatum.master.owner, "[owner], your loyal Ghoul, is desperately calling for aid at [target_area]!") var/mob/living/user = owner user.adjustBruteLoss(10) + return TRUE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/recuperate.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/recuperate.dm index 2ae1d2893a910..9334c89d012cd 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/recuperate.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/recuperate.dm @@ -1,4 +1,4 @@ -/// Used by Vassals +/// Used by Ghouls /datum/action/cooldown/bloodsucker/recuperate name = "Sanguine Recuperation" desc = "Slowly heals you overtime using your master's blood, in exchange for some of your own blood and effort." @@ -8,26 +8,28 @@ You will heal Brute and Toxin damage, at the cost of Stamina damage, and blood from both you and your Master.\n\ If you aren't a bloodless race, you will additionally heal Burn damage.\n\ The power will cancel out if you are dead or unconcious." - power_flags = BP_AM_TOGGLE - check_flags = BP_CANT_USE_WHILE_UNCONSCIOUS + power_flags = BP_CONTINUOUS_EFFECT + check_flags = AB_CHECK_CONSCIOUS + bloodsucker_check_flags = NONE purchase_flags = NONE bloodcost = 1.5 cooldown_time = 10 SECONDS + level_current = -1 /datum/action/cooldown/bloodsucker/recuperate/can_use(mob/living/carbon/user, trigger_flags) . = ..() if(!.) return - if(user.stat >= DEAD || user.incapacitated()) + if(user.stat >= DEAD || user.incapacitated) user.balloon_alert(user, "you are incapacitated...") return FALSE return TRUE - /datum/action/cooldown/bloodsucker/recuperate/ActivatePower(trigger_flags) . = ..() to_chat(owner, span_notice("Your muscles clench as your master's immortal blood mixes with your own, knitting your wounds.")) owner.balloon_alert(owner, "recuperate turned on.") + return TRUE /datum/action/cooldown/bloodsucker/recuperate/process(seconds_per_tick) . = ..() @@ -37,16 +39,21 @@ if(!active) return var/mob/living/carbon/user = owner - var/datum/antagonist/vassal/vassaldatum = IS_VASSAL(user) - vassaldatum.master.AdjustBloodVolume(-1) + var/datum/antagonist/ghoul/ghouldatum = IS_GHOUL(user) + if(!ghouldatum || QDELETED(ghouldatum.master)) + to_chat(owner, span_warning("No master to draw blood from!")) + DeactivatePower() + return + ghouldatum.master.AdjustBloodVolume(-1) user.set_timed_status_effect(5 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE) user.adjustStaminaLoss(bloodcost * 1.1) - user.adjustBruteLoss(-2.5) - user.adjustToxLoss(-2, forced = TRUE) + user.adjustBruteLoss(-2.5, updating_health = FALSE) + user.adjustToxLoss(-2, forced = TRUE, updating_health = FALSE) // Plasmamen won't lose blood, they don't have any, so they don't heal from Burn. if(!HAS_TRAIT(user, TRAIT_NOBLOOD)) user.blood_volume -= bloodcost - user.adjustFireLoss(-1.5) + user.adjustFireLoss(-1.5, updating_health = FALSE) + user.updatehealth() // Stop Bleeding if(istype(user) && user.is_bleeding()) for(var/obj/item/bodypart/part in user.bodyparts) @@ -55,11 +62,14 @@ /datum/action/cooldown/bloodsucker/recuperate/ContinueActive(mob/living/user, mob/living/target) if(user.stat >= DEAD) return FALSE - if(user.incapacitated(IGNORE_RESTRAINTS|IGNORE_GRAB)) - owner.balloon_alert(owner, "too exhausted...") + if(INCAPACITATED_IGNORING(user, INCAPABLE_GRAB|INCAPABLE_RESTRAINTS)) + owner?.balloon_alert(owner, "too exhausted...") return FALSE return TRUE -/datum/action/cooldown/bloodsucker/recuperate/DeactivatePower() +/datum/action/cooldown/bloodsucker/recuperate/DeactivatePower(deactivate_flags) + . = ..() + if(!.) + return owner.balloon_alert(owner, "recuperate turned off.") return ..() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/vassal_fold.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/vassal_fold.dm index ddafc6f15f900..8e6a942debf80 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/vassal_fold.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/vassal/vassal_fold.dm @@ -1,42 +1,41 @@ -/datum/action/cooldown/bloodsucker/vassal_blood - name = "Help Vassal" - desc = "Bring an ex-Vassal back into the fold, or create blood using a bag. RMB: Check Vassal status." +/datum/action/cooldown/bloodsucker/ghoul_blood + name = "Help Ghoul" + desc = "Bring an ex-Ghoul back into the fold, or create blood using a bag. RMB: Check Ghoul status." button_icon_state = "power_torpor" - power_explanation = "Help Vassal:\n\ - Use this power while you have an ex-Vassal grabbed to bring them back into the fold. \ + power_explanation = "Help Ghoul:\n\ + Use this power while you have an ex-Ghoul grabbed to bring them back into the fold. \ Use this power with a bloodbag in your hand to instead fill it with Vampiric Blood which \ - can be used to reset ex-vassal deconversion timers. \ - Right-Click will show the status of all Vassals." - power_flags = NONE + can be used to reset ex-ghoul deconversion timers. \ + Right-Click will show the status of all Ghouls." check_flags = NONE purchase_flags = NONE bloodcost = 10 cooldown_time = 10 SECONDS - + level_current = -1 ///Bloodbag we have in our hands. var/obj/item/reagent_containers/blood/bloodbag ///Weakref to a target we're bringing into the fold. var/datum/weakref/target_ref -/datum/action/cooldown/bloodsucker/vassal_blood/can_use(mob/living/carbon/user, trigger_flags) +/datum/action/cooldown/bloodsucker/ghoul_blood/can_use(mob/living/carbon/user, trigger_flags) . = ..() if(!.) return FALSE - var/datum/antagonist/vassal/revenge/revenge_vassal = owner.mind.has_antag_datum(/datum/antagonist/ex_vassal) - if(revenge_vassal) + var/datum/antagonist/ghoul/revenge/revenge_ghoul = IS_REVENGE_GHOUL(owner) + if(revenge_ghoul) return FALSE if(trigger_flags & TRIGGER_SECONDARY_ACTION) - if(!revenge_vassal.ex_vassals.len) - owner.balloon_alert(owner, "no vassals!") + if(!revenge_ghoul.ex_ghouls.len) + owner.balloon_alert(owner, "no ghouls!") return FALSE return TRUE if(owner.pulling && isliving(owner.pulling)) var/mob/living/pulled_target = owner.pulling - var/datum/antagonist/ex_vassal/former_vassal = pulled_target.mind.has_antag_datum(/datum/antagonist/ex_vassal) - if(!former_vassal) - owner.balloon_alert(owner, "not a former vassal!") + var/datum/antagonist/ex_ghoul/former_ghoul = IS_EX_GHOUL(pulled_target) + if(!former_ghoul) + owner.balloon_alert(owner, "not a former ghoul!") return FALSE target_ref = WEAKREF(owner.pulling) return TRUE @@ -51,35 +50,35 @@ bloodbag = blood_bag return TRUE -/datum/action/cooldown/bloodsucker/vassal_blood/ActivatePower(trigger_flags) +/datum/action/cooldown/bloodsucker/ghoul_blood/ActivatePower(trigger_flags) . = ..() - var/datum/antagonist/vassal/revenge/revenge_vassal = owner.mind.has_antag_datum(/datum/antagonist/vassal/revenge) + var/datum/antagonist/ghoul/revenge/revenge_ghoul = IS_REVENGE_GHOUL(owner) if(trigger_flags & TRIGGER_SECONDARY_ACTION) - for(var/datum/antagonist/ex_vassal/former_vassals as anything in revenge_vassal.ex_vassals) - var/information = "[former_vassals.owner.current]" - information += " - has [round(COOLDOWN_TIMELEFT(former_vassals, blood_timer) / 600)] minutes left of Blood" + for(var/datum/antagonist/ex_ghoul/former_ghouls as anything in revenge_ghoul.ex_ghouls) + var/information = "[former_ghouls.owner.current]" + information += " - has [round(COOLDOWN_TIMELEFT(former_ghouls, blood_timer) / 600)] minutes left of Blood" var/turf/open/floor/target_area = get_area(owner) if(target_area) information += " - currently at [target_area]." - if(former_vassals.owner.current.stat >= DEAD) + if(former_ghouls.owner.current.stat >= DEAD) information += " - DEAD." to_chat(owner, "[information]") DeactivatePower() - return + return FALSE if(target_ref) var/mob/living/target = target_ref.resolve() - var/datum/antagonist/ex_vassal/former_vassal = target.mind.has_antag_datum(/datum/antagonist/ex_vassal) - if(!former_vassal || former_vassal.revenge_vassal) + var/datum/antagonist/ex_ghoul/former_ghoul = IS_EX_GHOUL(target) + if(!former_ghoul || former_ghoul.revenge_ghoul) target_ref = null return if(do_after(owner, 5 SECONDS, target)) - former_vassal.return_to_fold(revenge_vassal) + former_ghoul.return_to_fold(revenge_ghoul) target_ref = null DeactivatePower() - return + return FALSE if(bloodbag) var/mob/living/living_owner = owner @@ -88,3 +87,4 @@ var/obj/item/reagent_containers/blood/o_minus/bloodsucker/new_bag = new(owner.loc) owner.put_in_active_hand(new_bag) DeactivatePower() + return TRUE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/veil.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/veil.dm index cd3cfb2847290..18f064b3f07e9 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/veil.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/veil.dm @@ -2,14 +2,12 @@ name = "Veil of Many Faces" desc = "Disguise yourself in the illusion of another identity." button_icon_state = "power_veil" - power_explanation = "Veil of Many Faces: \n\ - Activating Veil of Many Faces will shroud you in smoke and forge you a new identity.\n\ - Your name and appearance will be completely randomized, and turning the ability off again will undo it all.\n\ - Clothes, gear, and Security/Medical HUD status is kept the same while this power is active." - power_flags = BP_AM_TOGGLE - check_flags = BP_CANT_USE_IN_FRENZY|BP_CANT_USE_WHILE_UNCONSCIOUS + power_flags = NONE + check_flags = AB_CHECK_CONSCIOUS + bloodsucker_check_flags = BP_CANT_USE_IN_FRENZY|BP_CANT_USE_IN_TORPOR purchase_flags = BLOODSUCKER_DEFAULT_POWER bloodcost = 15 + level_current = -1 constant_bloodcost = 0.1 cooldown_time = 10 SECONDS // Outfit Vars @@ -30,13 +28,20 @@ var/list/prev_features // For lizards and such var/disguise_name -/datum/action/cooldown/bloodsucker/veil/ActivatePower(trigger_flags) +/datum/action/cooldown/bloodsucker/veil/get_power_explanation_extended() + . = list() + . += "Activating Veil of Many Faces will shroud you in smoke and forge you a new identity." + . += "Your name and appearance will be completely randomized, and turning the ability off again will undo it all." + . += "Clothes, gear, and Security/Medical HUD status is kept the same while this power is active." + +/datum/action/cooldown/bloodsucker/veil/ActivatePower(atom/target) . = ..() cast_effect() // POOF // if(blahblahblah) // Disguise_Outfit() veil_user() owner.balloon_alert(owner, "veil turned on.") + return TRUE /* // Meant to disguise your character's clothing into fake ones. /datum/action/cooldown/bloodsucker/veil/proc/Disguise_Outfit() @@ -101,9 +106,9 @@ identity[VISIBLE_NAME_FACE] = disguise_name user.SetSpecialVoice(disguise_name) -/datum/action/cooldown/bloodsucker/veil/DeactivatePower() +/datum/action/cooldown/bloodsucker/veil/DeactivatePower(deactivate_flags) . = ..() - if(!ishuman(owner)) + if(!. || !ishuman(owner)) return var/mob/living/carbon/human/user = owner // Revert Identity @@ -142,7 +147,7 @@ // CAST EFFECT // General effect (poof, splat, etc) when you cast. Doesn't happen automatically! /datum/action/cooldown/bloodsucker/veil/proc/cast_effect() // Effect - playsound(get_turf(owner), 'sound/magic/smoke.ogg', 20, 1) + playsound(get_turf(owner), 'sound/effects/magic/smoke.ogg', 20, 1) var/datum/effect_system/steam_spread/bloodsucker/puff = new /datum/effect_system/steam_spread/() puff.set_up(3, 0, get_turf(owner)) puff.attach(owner) //OPTIONAL diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/coffin.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/coffin.dm index 12d4251b7867f..91866465693d0 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/coffin.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/coffin.dm @@ -1,19 +1,24 @@ -/datum/antagonist/bloodsucker/proc/claim_coffin(obj/structure/closet/crate/claimed, area/current_area) +/datum/antagonist/bloodsucker/proc/can_claim_coffin(obj/structure/closet/crate/claimed, area/current_area) + if(coffin) + return FALSE // ALREADY CLAIMED if(claimed.resident) - if(claimed.resident == owner.current) - to_chat(owner, "This is your [src].") - else - to_chat(owner, "This [src] has already been claimed by another.") + if(claimed.resident != owner.current) + claimed.balloon_alert(owner.current, "already claimed by another!") return FALSE if(!(GLOB.the_station_areas.Find(current_area.type))) claimed.balloon_alert(owner.current, "not part of station!") return - // This is my Lair + return TRUE + +/datum/antagonist/bloodsucker/proc/claim_coffin(obj/structure/closet/crate/claimed, area/current_area) + if(!can_claim_coffin(claimed, current_area)) + return FALSE + // This is my Haven coffin = claimed - bloodsucker_lair_area = current_area - to_chat(owner, span_userdanger("You have claimed the [claimed] as your place of immortal rest! Your lair is now [bloodsucker_lair_area].")) - to_chat(owner, span_announce("Bloodsucker Tip: Find new lair recipes in the Structures tab of the Crafting Menu, including the Persuasion Rack for converting crew into Vassals.")) + bloodsucker_haven_area = current_area + to_chat(owner, span_userdanger("You have claimed the [claimed] as your place of immortal rest! Your haven is now [bloodsucker_haven_area].")) + to_chat(owner, span_announce("Bloodsucker Tip: Find new haven recipes in the Structures tab of the Crafting Menu, including the Persuasion Rack for converting crew into Ghouls.")) return TRUE /// From crate.dm @@ -128,7 +133,7 @@ /// NOTE: This can be any coffin that you are resting AND inside of. /obj/structure/closet/crate/coffin/proc/claim_coffin(mob/living/claimant, area/current_area) - var/datum/antagonist/bloodsucker/bloodsuckerdatum = claimant.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(claimant) // Successfully claimed? if(bloodsuckerdatum.claim_coffin(src, current_area)) resident = claimant @@ -142,48 +147,48 @@ STOP_PROCESSING(SSprocessing, src) return ..() -/obj/structure/closet/crate/coffin/process(mob/living/user) +/obj/structure/closet/crate/coffin/process() . = ..() if(!.) return FALSE - if(user in src) - var/list/turf/area_turfs = get_area_turfs(get_area(src)) - // Create Dirt etc. - var/turf/T_Dirty = pick(area_turfs) - if(T_Dirty && !T_Dirty.density) - // Default: Dirt - // STEP ONE: COBWEBS - // CHECK: Wall to North? - var/turf/check_N = get_step(T_Dirty, NORTH) - if(istype(check_N, /turf/closed/wall)) - // CHECK: Wall to West? - var/turf/check_W = get_step(T_Dirty, WEST) - if(istype(check_W, /turf/closed/wall)) - new /obj/effect/decal/cleanable/cobweb(T_Dirty) - // CHECK: Wall to East? - var/turf/check_E = get_step(T_Dirty, EAST) - if(istype(check_E, /turf/closed/wall)) - new /obj/effect/decal/cleanable/cobweb/cobweb2(T_Dirty) - new /obj/effect/decal/cleanable/dirt(T_Dirty) + var/list/turf/area_turfs = get_area_turfs(get_area(src)) + // Create Dirt etc. + var/turf/T_Dirty = pick(area_turfs) + if(T_Dirty && !T_Dirty.density) + // Default: Dirt + // STEP ONE: COBWEBS + // CHECK: Wall to North? + var/turf/check_N = get_step(T_Dirty, NORTH) + if(istype(check_N, /turf/closed/wall)) + // CHECK: Wall to West? + var/turf/check_W = get_step(T_Dirty, WEST) + if(istype(check_W, /turf/closed/wall)) + new /obj/effect/decal/cleanable/cobweb(T_Dirty) + // CHECK: Wall to East? + var/turf/check_E = get_step(T_Dirty, EAST) + if(istype(check_E, /turf/closed/wall)) + new /obj/effect/decal/cleanable/cobweb/cobweb2(T_Dirty) + new /obj/effect/decal/cleanable/dirt(T_Dirty) -/obj/structure/closet/crate/proc/unclaim_coffin(manual = FALSE) +/obj/structure/closet/crate/proc/unclaim_coffin(manual = FALSE, silent = FALSE) // Unanchor it (If it hasn't been broken, anyway) anchored = FALSE if(!resident || !resident.mind) return un_enlarge(resident) // Unclaiming - var/datum/antagonist/bloodsucker/bloodsuckerdatum = resident.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(resident) if(bloodsuckerdatum && bloodsuckerdatum.coffin == src) bloodsuckerdatum.coffin = null - bloodsuckerdatum.bloodsucker_lair_area = null + bloodsuckerdatum.bloodsucker_haven_area = null for(var/obj/structure/bloodsucker/bloodsucker_structure in get_area(src)) if(bloodsucker_structure.owner == resident) bloodsucker_structure.unbolt() - if(manual) - to_chat(resident, span_cult_italic("You have unclaimed your coffin! This also unclaims all your other Bloodsucker structures!")) - else - to_chat(resident, span_cult_italic("You sense that the link with your coffin and your sacred lair has been broken! You will need to seek another.")) + if(!silent) + if(manual) + to_chat(resident, span_cult_italic("You have unclaimed your coffin! This also unclaims all your other Bloodsucker structures!")) + else + to_chat(resident, span_cult_italic("You sense that the link with your coffin and your sacred haven has been broken! You will need to seek another.")) // Remove resident. Because this object isnt removed from the game immediately (GC?) we need to give them a way to see they don't have a home anymore. resident = null @@ -197,7 +202,7 @@ update_icon() locked = FALSE return TRUE - playsound(get_turf(src), 'sound/machines/door_locked.ogg', 20, 1) + playsound(get_turf(src), 'sound/machines/door/door_locked.ogg', 20, 1) to_chat(user, span_notice("[src] appears to be locked tight from the inside.")) /obj/structure/closet/crate/coffin/close(mob/living/user) @@ -213,32 +218,24 @@ return FALSE for(var/atom/thing as anything in contents) SEND_SIGNAL(thing, COMSIG_ENTER_COFFIN, src, user) - // Only the User can put themself into Torpor. If already in it, you'll start to heal. - if(bloodsuckerdatum && (user in src)) - if(prompt_coffin_claim(bloodsuckerdatum)) - LockMe(user) - //Level up if possible. - if(!bloodsuckerdatum.my_clan) - user.balloon_alert("enter a clan!") - to_chat(user, span_notice("You must enter a Clan to rank up. Do it in the antag menu, which you can see by pressing the action button in the top left.")) - else if(!bloodsuckerdatum.frenzied) - if(bloodsuckerdatum.GetUnspentRank() < 1) - bloodsuckerdatum.blood_level_gain() - // Level ups cost 30% of your max blood volume, which scales with your rank. - bloodsuckerdatum.SpendRank(blood_cost = bloodsuckerdatum.max_blood_volume * BLOODSUCKER_LEVELUP_PERCENTAGE) - bloodsuckerdatum.check_begin_torpor(TORPOR_SKIP_CHECK_DAMAGE) return TRUE +// /obj/structure/closet/crate/coffin/proc/is_claimable_coffin(datum/antagonist/bloodsucker/dracula, area/current_area) +// if(!dracula) +// return FALSE +// if(resident == dracula.owner.current) +// return TRUE +// if(!dracula.can_claim_coffin(src, current_area)) +// return FALSE +// if(!dracula.coffin && resident) +// return FALSE +// return TRUE + /obj/structure/closet/crate/coffin/proc/prompt_coffin_claim(datum/antagonist/bloodsucker/dracula) - if(!dracula) - return FALSE - if(resident == dracula.owner.current) - return TRUE var/area/current_area = get_area(src) - if(!dracula.coffin && !resident) - switch(tgui_alert(dracula.owner.current, "Do you wish to claim this as your coffin? [current_area] will be your lair.", "Claim Lair", list("Yes", "No"))) - if("Yes") - return claim_coffin(dracula.owner.current, current_area) + switch(tgui_alert(dracula.owner.current, "Do you wish to claim this as your coffin? [current_area] will be your haven.", "Claim Haven", list("Yes", "No"))) + if("Yes") + return claim_coffin(dracula.owner.current, current_area) return FALSE // some fatass bloodsucker is trying to fit in a too-small coffin, how about we make some room? @@ -327,12 +324,13 @@ to_chat(user, span_notice("You flip a secret latch and lock yourself inside [src].")) else to_chat(user, span_notice("You flip a secret latch and unlock [src].")) - return + return TRUE // Broken? Let's fix it. to_chat(resident, span_notice("The secret latch that would lock [src] from the inside is broken. You set it back into place...")) if(!do_after(resident, 5 SECONDS, src)) to_chat(resident, span_notice("You fail to fix [src]'s mechanism.")) - return + return FALSE to_chat(resident, span_notice("You fix the mechanism and lock it.")) broken = FALSE locked = TRUE + return TRUE diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm index 58a117f6c7288..f49ad794ff1c5 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm @@ -8,7 +8,7 @@ */ var/ghost_desc var/vamp_desc - var/vassal_desc + var/ghoul_desc var/hunter_desc /obj/structure/bloodsucker/examine(mob/user) @@ -17,11 +17,11 @@ . += span_cult(ghost_desc) if(IS_BLOODSUCKER(user) && vamp_desc) if(!owner) - . += span_cult("It is unsecured. Click on [src] while in your lair to secure it in place to get its full potential.") + . += span_cult("It is unsecured. Click on [src] while in your haven to secure it in place to get its full potential.") return . += span_cult(vamp_desc) - if(IS_VASSAL(user) && vassal_desc != "") - . += span_cult(vassal_desc) + if(IS_GHOUL(user) && ghoul_desc != "") + . += span_cult(ghoul_desc) if(IS_MONSTERHUNTER(user) && hunter_desc != "") . += span_cult(hunter_desc) @@ -39,21 +39,21 @@ /obj/structure/bloodsucker/attackby(obj/item/item, mob/living/user, params) /// If a Bloodsucker tries to wrench it in place, yell at them. if(item.tool_behaviour == TOOL_WRENCH && !anchored && IS_BLOODSUCKER(user)) - user.playsound_local(null, 'sound/machines/buzz-sigh.ogg', 40, FALSE, pressure_affected = FALSE) + user.playsound_local(null, 'sound/machines/buzz/buzz-sigh.ogg', 40, FALSE, pressure_affected = FALSE) to_chat(user, span_announce("* Bloodsucker Tip: Examine Bloodsucker structures to understand how they function!")) return return ..() /obj/structure/bloodsucker/attack_hand(mob/user, list/modifiers) // . = ..() // Don't call parent, else they will handle unbuckling. - var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) /// Claiming the Rack instead of using it? if(istype(bloodsuckerdatum) && !owner) - if(!bloodsuckerdatum.bloodsucker_lair_area) - to_chat(user, span_danger("You don't have a lair. Claim a coffin to make that location your lair.")) + if(!bloodsuckerdatum.bloodsucker_haven_area) + to_chat(user, span_danger("You don't have a haven. Claim a coffin to make that location your haven.")) return FALSE - if(bloodsuckerdatum.bloodsucker_lair_area != get_area(src)) - to_chat(user, span_danger("You may only activate this structure in your lair: [bloodsuckerdatum.bloodsucker_lair_area].")) + if(bloodsuckerdatum.bloodsucker_haven_area != get_area(src)) + to_chat(user, span_danger("You may only activate this structure in your haven: [bloodsuckerdatum.bloodsucker_haven_area].")) return FALSE /// Radial menu for securing your Persuasion rack in place. @@ -66,7 +66,7 @@ return FALSE switch(secure_response) if("Yes") - user.playsound_local(null, 'sound/items/ratchet.ogg', 70, FALSE, pressure_affected = FALSE) + user.playsound_local(null, 'sound/items/tools/ratchet.ogg', 70, FALSE, pressure_affected = FALSE) bolt(user) return FALSE return FALSE @@ -103,24 +103,24 @@ /obj/item/restraints/legcuffs/beartrap/bloodsucker */ -/obj/structure/bloodsucker/vassalrack +/obj/structure/bloodsucker/ghoulrack name = "persuasion rack" desc = "If this wasn't meant for torture, then someone has some fairly horrifying hobbies." icon = 'modular_zubbers/icons/obj/structures/vamp_obj.dmi' - icon_state = "vassalrack" + icon_state = "ghoulrack" anchored = FALSE density = TRUE can_buckle = TRUE buckle_lying = 180 - ghost_desc = "This is a Vassal rack, which allows Bloodsuckers to thrall crewmembers into loyal minions." - vamp_desc = "This is the Vassal rack, which allows you to thrall crewmembers into loyal minions in your service.\n\ - Simply click and hold on a victim, and then drag their sprite on the vassal rack. Right-click on the vassal rack to unbuckle them.\n\ - To convert into a Vassal, repeatedly click on the persuasion rack. The time required scales with the tool in your off hand. This costs Blood to do.\n\ - Vassals can be turned into special ones by continuing to torture them once converted." - vassal_desc = "This is the vassal rack, which allows your master to thrall crewmembers into their minions.\n\ + ghost_desc = "This is a Ghoul rack, which allows Bloodsuckers to thrall crewmembers into loyal minions." + vamp_desc = "This is the Ghoul rack, which allows you to thrall crewmembers into loyal minions in your service.\n\ + Simply click and hold on a victim, and then drag their sprite on the ghoul rack. Right-click on the ghoul rack to unbuckle them.\n\ + To convert into a Ghoul, repeatedly click on the persuasion rack. The time required scales with the tool in your off hand. This costs Blood to do.\n\ + Ghouls can be turned into special ones by continuing to torture them once converted." + ghoul_desc = "This is the ghoul rack, which allows your master to thrall crewmembers into their minions.\n\ Aid your master in bringing their victims here and keeping them secure.\n\ - You can secure victims to the vassal rack by click dragging the victim onto the rack while it is secured." - hunter_desc = "This is the vassal rack, which monsters use to brainwash crewmembers into their loyal slaves.\n\ + You can secure victims to the ghoul rack by click dragging the victim onto the rack while it is secured." + hunter_desc = "This is the ghoul rack, which monsters use to brainwash crewmembers into their loyal slaves.\n\ They usually ensure that victims are handcuffed, to prevent them from running away.\n\ Their rituals take time, allowing us to disrupt it." @@ -131,30 +131,30 @@ /// Prevents popup spam. var/disloyalty_offered = FALSE -/obj/structure/bloodsucker/vassalrack/examine(mob/user) +/obj/structure/bloodsucker/ghoulrack/examine(mob/user) . = ..() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) if(bloodsuckerdatum) - . += span_cult("You can support a total of [convert_integer_to_words(bloodsuckerdatum.max_vassals())] [bloodsuckerdatum.max_vassals() == 1 ? "vassal" : "vassals"], \ - with [convert_integer_to_words(bloodsuckerdatum.free_vassal_slots())] [bloodsuckerdatum.free_vassal_slots() == 1 ? "slot" : "slots"] remaining.") + . += span_cult("You can support a total of [convert_integer_to_words(bloodsuckerdatum.max_ghouls())] [bloodsuckerdatum.max_ghouls() == 1 ? "ghoul" : "ghouls"], \ + with [convert_integer_to_words(bloodsuckerdatum.free_ghoul_slots())] [bloodsuckerdatum.free_ghoul_slots() == 1 ? "slot" : "slots"] remaining.") -/obj/structure/bloodsucker/vassalrack/atom_deconstruct(disassembled = TRUE) +/obj/structure/bloodsucker/ghoulrack/atom_deconstruct(disassembled = TRUE) . = ..() new /obj/item/stack/sheet/iron(src.loc, 4) new /obj/item/stack/rods(loc, 4) qdel(src) -/obj/structure/bloodsucker/vassalrack/bolt() +/obj/structure/bloodsucker/ghoulrack/bolt() . = ..() density = FALSE anchored = TRUE -/obj/structure/bloodsucker/vassalrack/unbolt() +/obj/structure/bloodsucker/ghoulrack/unbolt() . = ..() density = TRUE anchored = FALSE -/obj/structure/bloodsucker/vassalrack/mouse_drop_receive(atom/movable/movable_atom, mob/user, params) +/obj/structure/bloodsucker/ghoulrack/mouse_drop_receive(atom/movable/movable_atom, mob/user, params) var/mob/living/living_target = movable_atom if(!anchored && IS_BLOODSUCKER(user)) user.balloon_alert(user, "not secured!") @@ -162,17 +162,17 @@ to_chat(user, span_announce("* Bloodsucker Tip: Examine the Persuasion Rack to understand how it functions!")) return // Default checks - if(!isliving(movable_atom) || !living_target.Adjacent(src) || living_target == user || !isliving(user) || has_buckled_mobs() || user.incapacitated() || living_target.buckled) + if(!isliving(movable_atom) || !living_target.Adjacent(src) || living_target == user || !isliving(user) || has_buckled_mobs() || user.incapacitated || living_target.buckled) return // Don't buckle Silicon to it please. if(issilicon(living_target)) - to_chat(user, span_danger("You realize that this machine cannot be vassalized, therefore it is useless to buckle them.")) + to_chat(user, span_danger("You realize that this machine cannot be ghoulized, therefore it is useless to buckle them.")) return if(do_after(user, 5 SECONDS, living_target)) attach_victim(living_target, user) /// Attempt Release (Owner vs Non Owner) -/obj/structure/bloodsucker/vassalrack/attack_hand_secondary(mob/user, modifiers) +/obj/structure/bloodsucker/ghoulrack/attack_hand_secondary(mob/user, modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return @@ -188,9 +188,9 @@ user_unbuckle_mob(buckled_carbons, user) /** - * Attempts to buckle target into the vassalrack + * Attempts to buckle target into the ghoulrack */ -/obj/structure/bloodsucker/vassalrack/proc/attach_victim(mob/living/target, mob/living/user) +/obj/structure/bloodsucker/ghoulrack/proc/attach_victim(mob/living/target, mob/living/user) if(!buckle_mob(target)) return user.visible_message( @@ -208,8 +208,8 @@ disloyalty_offered = FALSE /// Attempt Unbuckle -/obj/structure/bloodsucker/vassalrack/user_unbuckle_mob(mob/living/buckled_mob, mob/user) - if(IS_BLOODSUCKER(user) || IS_VASSAL(user)) +/obj/structure/bloodsucker/ghoulrack/user_unbuckle_mob(mob/living/buckled_mob, mob/user) + if(IS_BLOODSUCKER(user) || IS_GHOUL(user)) return ..() if(buckled_mob == user) @@ -229,7 +229,7 @@ return ..() -/obj/structure/bloodsucker/vassalrack/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE) +/obj/structure/bloodsucker/ghoulrack/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE) . = ..() if(!.) return @@ -238,7 +238,7 @@ buckled_mob.Paralyze(2 SECONDS) update_appearance(UPDATE_ICON) -/obj/structure/bloodsucker/vassalrack/attack_hand(mob/user, list/modifiers) +/obj/structure/bloodsucker/ghoulrack/attack_hand(mob/user, list/modifiers) . = ..() if(!.) return FALSE @@ -246,28 +246,28 @@ if(!has_buckled_mobs()) return FALSE - var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) var/mob/living/carbon/buckled_carbons = pick(buckled_mobs) // If I'm not a Bloodsucker, try to unbuckle them. if(!istype(bloodsuckerdatum)) user_unbuckle_mob(buckled_carbons, user) return if(!bloodsuckerdatum.my_clan) - to_chat(user, span_warning("You can't vassalize people until you enter a Clan (Through your Antagonist UI button)")) + to_chat(user, span_warning("You can't ghoulize people until you enter a Clan (Through your Antagonist UI button)")) user.balloon_alert(user, "join a clan first!") return - var/datum/antagonist/vassal/vassaldatum = IS_VASSAL(buckled_carbons) - // Are they our Vassal? - if(vassaldatum && (vassaldatum in bloodsuckerdatum.vassals)) - SEND_SIGNAL(bloodsuckerdatum, BLOODSUCKER_INTERACT_WITH_VASSAL, vassaldatum) + var/datum/antagonist/ghoul/ghouldatum = IS_GHOUL(buckled_carbons) + // Are they our Ghoul? + if(ghouldatum && (ghouldatum in bloodsuckerdatum.ghouls)) + SEND_SIGNAL(bloodsuckerdatum, COMSIG_BLOODSUCKER_INTERACT_WITH_GHOUL, ghouldatum) return - if(bloodsuckerdatum.free_vassal_slots() < 1) - to_chat(user, span_warning("You can't vassalize more people until you level up more! You are currently at [bloodsuckerdatum.free_vassal_slots()] active / [bloodsuckerdatum.max_vassals()] max vassals.")) - user.balloon_alert(user, "not enough vassal slots!") + if(bloodsuckerdatum.free_ghoul_slots() < 1) + to_chat(user, span_warning("You can't ghoulize more people until you level up more! You are currently at [bloodsuckerdatum.free_ghoul_slots()] active / [bloodsuckerdatum.max_ghouls()] max ghouls.")) + user.balloon_alert(user, "not enough ghoul slots!") return - // Not our Vassal, but Alive & We're a Bloodsucker, good to torture! + // Not our Ghoul, but Alive & We're a Bloodsucker, good to torture! torture_victim(user, buckled_carbons) /** @@ -275,20 +275,20 @@ * * * Tick Down Conversion from 3 to 0 * * Break mindshielding/antag (on approve) - * * Vassalize target + * * Ghoulize target */ -/obj/structure/bloodsucker/vassalrack/proc/torture_victim(mob/living/user, mob/living/target) - var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) - if(IS_VASSAL(target)) - var/datum/antagonist/vassal/vassaldatum = target.mind.has_antag_datum(/datum/antagonist/vassal) - if(!vassaldatum.master.broke_masquerade) - balloon_alert(user, "someone else's vassal!") +/obj/structure/bloodsucker/ghoulrack/proc/torture_victim(mob/living/user, mob/living/target) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) + if(IS_GHOUL(target)) + var/datum/antagonist/ghoul/ghouldatum = IS_GHOUL(target) + if(!ghouldatum.master.broke_masquerade) + balloon_alert(user, "someone else's ghoul!") return FALSE var/disloyalty_requires = RequireDisloyalty(user, target) - if(disloyalty_requires == VASSALIZATION_BANNED) + if(disloyalty_requires == GHOULIZATION_BANNED) if(target.ckey) - balloon_alert(user, "can't be vassalized!") + balloon_alert(user, "can't be ghoulized!") else balloon_alert(user, "target has no mind!") return FALSE @@ -304,7 +304,7 @@ target.Paralyze(1 SECONDS) convert_progress-- - // We're done? Let's see if they can be Vassal. + // We're done? Let's see if they can be Ghoul. if(convert_progress) balloon_alert(user, "needs more persuasion...") return @@ -328,13 +328,13 @@ if(!do_after(user, 5 SECONDS, target)) balloon_alert(user, "interrupted!") return - // Convert to Vassal! + // Convert to Ghoul! bloodsuckerdatum.AdjustBloodVolume(-TORTURE_CONVERSION_COST) - if(bloodsuckerdatum.make_vassal(target)) + if(bloodsuckerdatum.make_ghoul(target)) remove_loyalties(target) - SEND_SIGNAL(bloodsuckerdatum, BLOODSUCKER_MADE_VASSAL, user, target) + SEND_SIGNAL(bloodsuckerdatum, COMSIG_BLOODSUCKER_MADE_GHOUL, user, target) -/obj/structure/bloodsucker/vassalrack/proc/do_torture(mob/living/user, mob/living/carbon/target, mult = 1) +/obj/structure/bloodsucker/ghoulrack/proc/do_torture(mob/living/user, mob/living/carbon/target, mult = 1) // Fifteen seconds if you aren't using anything. Shorter with weapons and such. var/torture_time = 15 var/torture_dmg_brute = 2 @@ -378,7 +378,7 @@ return TRUE /// Offer them the oppertunity to join now. -/obj/structure/bloodsucker/vassalrack/proc/do_disloyalty(mob/living/user, mob/living/target) +/obj/structure/bloodsucker/ghoulrack/proc/do_disloyalty(mob/living/user, mob/living/target) if(disloyalty_offered) return FALSE // Can't willingly join if you're banned from it. It'll just ghost you anyways. @@ -399,31 +399,31 @@ if("Accept") disloyalty_confirm = TRUE else - target.balloon_alert_to_viewers("stares defiantly", "refused vassalization!") + target.balloon_alert_to_viewers("stares defiantly", "refused ghoulization!") disloyalty_offered = FALSE return TRUE -/obj/structure/bloodsucker/vassalrack/proc/RequireDisloyalty(mob/living/user, mob/living/target) +/obj/structure/bloodsucker/ghoulrack/proc/RequireDisloyalty(mob/living/user, mob/living/target) #ifdef BLOODSUCKER_TESTING if(!target || !target.mind) #else if(!target?.mind || !target?.client) #endif - return VASSALIZATION_BANNED + return GHOULIZATION_BANNED if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) - return VASSALIZATION_DISLOYAL + return GHOULIZATION_DISLOYAL var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) return bloodsuckerdatum.AmValidAntag(target) -/obj/structure/bloodsucker/vassalrack/proc/remove_loyalties(mob/living/target) +/obj/structure/bloodsucker/ghoulrack/proc/remove_loyalties(mob/living/target) // Find Mind Implant & Destroy for(var/obj/item/implant/all_implants as anything in target.implants) if(all_implants.type == /obj/item/implant/mindshield) all_implants.removed(target, silent = TRUE) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - +// todo, make this steal blood into a internal reservoir from nearby non-vassals/bloodsuckers /obj/structure/bloodsucker/candelabrum name = "candelabrum" desc = "It burns slowly, but doesn't radiate any heat." @@ -432,16 +432,17 @@ light_color = "#66FFFF"//LIGHT_COLOR_BLUEGREEN // lighting.dm light_power = 3 light_range = 0 // to 2 + max_integrity = 100 density = FALSE can_buckle = TRUE anchored = FALSE - ghost_desc = "This is a magical candle which drains at the sanity of non Bloodsuckers and Vassals.\n\ - Vassals can turn the candle on manually, while Bloodsuckers can do it from a distance." + ghost_desc = "This is a magical candle which drains at the sanity of non Bloodsuckers and Ghouls.\n\ + Ghouls can turn the candle on manually, while Bloodsuckers can do it from a distance." vamp_desc = "This is a magical candle which drains at the sanity of mortals who are not under your command while it is active.\n\ You can right-click on it from any range to turn it on remotely, or simply be next to it and click on it to turn it on and off normally." - vassal_desc = "This is a magical candle which drains at the sanity of the fools who havent yet accepted your master, as long as it is active.\n\ + ghoul_desc = "This is a magical candle which drains at the sanity of the fools who havent yet accepted your master, as long as it is active.\n\ You can turn it on and off by clicking on it while you are next to it.\n\ - If your Master is part of the Ventrue Clan, they utilize this to upgrade their Favorite Vassal." + If your Master is part of the Ventrue Clan, they utilize this to upgrade their Favorite Ghoul." hunter_desc = "This is a blue Candelabrum, which causes insanity to those near it while active." var/lit = FALSE @@ -462,12 +463,14 @@ . = ..() set_anchored(FALSE) density = FALSE + if(lit) + toggle() /obj/structure/bloodsucker/candelabrum/attack_hand(mob/living/user, list/modifiers) . = ..() if(!.) return - if(anchored && (IS_VASSAL(user) || IS_BLOODSUCKER(user))) + if(anchored && (IS_GHOUL(user) || IS_BLOODSUCKER(user))) toggle() return ..() @@ -487,13 +490,13 @@ if(!lit) return for(var/mob/living/carbon/nearly_people in viewers(7, src)) - /// We dont want Bloodsuckers or Vassals affected by this - if(IS_VASSAL(nearly_people) || IS_BLOODSUCKER(nearly_people)) + /// We dont want Bloodsuckers or Ghouls affected by this + if(IS_GHOUL(nearly_people) || IS_BLOODSUCKER(nearly_people)) continue nearly_people.adjust_hallucinations(5 SECONDS) nearly_people.add_mood_event("vampcandle", /datum/mood_event/vampcandle) -/// Blood Throne - Allows Bloodsuckers to remotely speak with their Vassals. - Code (Mostly) stolen from comfy chairs (armrests) and chairs (layers) +/// Blood Throne - Allows Bloodsuckers to remotely speak with their Ghouls. - Code (Mostly) stolen from comfy chairs (armrests) and chairs (layers) /obj/structure/bloodsucker/bloodthrone name = "wicked throne" desc = "Twisted metal shards jut from the arm rests. Very uncomfortable looking. It would take a masochistic sort to sit on this jagged piece of furniture." @@ -503,9 +506,9 @@ anchored = FALSE density = TRUE can_buckle = TRUE - ghost_desc = "This is a Bloodsucker throne, any Bloodsucker sitting on it can remotely speak to their Vassals by attempting to speak aloud." - vamp_desc = "This is a blood throne, sitting on it will allow you to telepathically speak to your vassals by simply speaking." - vassal_desc = "This is a blood throne, it allows your Master to telepathically speak to you and others like you." + ghost_desc = "This is a Bloodsucker throne, any Bloodsucker sitting on it can remotely speak to their Ghouls by attempting to speak aloud." + vamp_desc = "This is a blood throne, sitting on it will allow you to telepathically speak to your ghouls by simply speaking." + ghoul_desc = "This is a blood throne, it allows your Master to telepathically speak to you and others like you." hunter_desc = "This is a chair that hurts those that try to buckle themselves onto it, though the Undead have no problem latching on.\n\ While buckled, Monsters can use this to telepathically communicate with eachother." var/mutable_appearance/armrest @@ -595,8 +598,8 @@ var/mob/living/carbon/human/user = source var/rendered = span_cult_large("[user.real_name]: [capitalize(message)]") user.log_talk(message, LOG_SAY, tag = ROLE_BLOODSUCKER) - var/datum/antagonist/bloodsucker/bloodsuckerdatum = user.mind.has_antag_datum(/datum/antagonist/bloodsucker) - for(var/datum/antagonist/vassal/receiver as anything in bloodsuckerdatum.vassals) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) + for(var/datum/antagonist/ghoul/receiver as anything in bloodsuckerdatum.ghouls) if(!receiver.owner.current) continue var/mob/receiver_mob = receiver.owner.current diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/objects.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/objects.dm index 0c88ae6ec6688..aab7f08db8147 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/objects.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/objects.dm @@ -47,14 +47,14 @@ return FALSE return TRUE -///Bloodbag of Bloodsucker blood (used by Vassals only) +///Bloodbag of Bloodsucker blood (used by Ghouls only) /obj/item/reagent_containers/blood/o_minus/bloodsucker name = "blood pack" unique_blood = /datum/reagent/blood/bloodsucker /obj/item/reagent_containers/blood/o_minus/bloodsucker/examine(mob/user) . = ..() - if(user.mind.has_antag_datum(/datum/antagonist/ex_vassal) || user.mind.has_antag_datum(/datum/antagonist/vassal/revenge)) + if(user.mind.has_antag_datum(/datum/antagonist/ex_ghoul) || user.mind.has_antag_datum(/datum/antagonist/ghoul/revenge)) . += span_notice("Seems to be just about the same color as your Master's...") ////////////////////// @@ -86,12 +86,12 @@ if(!wood_stack && replace) user.put_in_hands(new_item) +// TODO move this into bloodsuckerdatum /// Do I have a stake in my heart? /mob/living/proc/am_staked() - var/list/stakes = get_stakes() - if(!length(stakes)) - return FALSE - return TRUE + var/obj/item/bodypart/chosen_bodypart = get_bodypart(BODY_ZONE_CHEST) + var/obj/item/stake/stake = locate() in chosen_bodypart.embedded_objects + return stake /mob/living/proc/get_stakes() var/obj/item/bodypart/chosen_bodypart = get_bodypart(BODY_ZONE_CHEST) @@ -103,15 +103,6 @@ stakes += list(embedded_stake) return stakes -/// You can't go to sleep in a coffin with a stake in you. -/mob/living/proc/StakeCanKillMe() - if(IsSleeping() || stat >= UNCONSCIOUS || HAS_TRAIT(src, TRAIT_NODEATH)) - for(var/stake in get_stakes()) - var/obj/item/stake/killin_stake = stake - if(killin_stake?.kills_blodsuckers) - return TRUE - return FALSE - /datum/embed_data/stake embed_chance = 20 @@ -125,7 +116,7 @@ righthand_file = 'modular_zubbers/icons/mob/inhands/weapons/bloodsucker_righthand.dmi' slot_flags = ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_SMALL - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' attack_verb_continuous = list("staked", "stabbed", "tore into") attack_verb_simple = list("staked", "stabbed", "tore into") sharpness = SHARP_EDGED @@ -162,7 +153,7 @@ return to_chat(user, span_notice("You put all your weight into embedding the stake into [target]'s chest...")) - playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1) + playsound(user, 'sound/effects/magic/Demon_consume.ogg', 50, 1) if(!do_after(user, staketime, target, extra_checks = CALLBACK(target, TYPE_PROC_REF(/mob/living/carbon, can_be_staked)))) // user / target / time / uninterruptable / show progress bar / extra checks return // Drop & Embed Stake @@ -173,18 +164,31 @@ playsound(get_turf(target), 'sound/effects/splat.ogg', 40, 1) if(tryEmbed(target.get_bodypart(BODY_ZONE_CHEST), TRUE, TRUE)) //and if it embeds successfully in their chest, cause a lot of pain target.apply_damage(max(10, force * 1.2), BRUTE, BODY_ZONE_CHEST, wound_bonus = 0, sharpness = TRUE) - if(QDELETED(src)) // in case trying to embed it caused its deletion (say, if it's DROPDEL) + on_stake_embed(target, user) + +/obj/item/stake/proc/on_stake_embed(mob/living/target, mob/living/user) + return + +/obj/item/stake/hardened/silver/on_stake_embed(mob/living/target, mob/living/user) + var/obj/item/organ/internal/heart/heart = target.get_organ_slot(ORGAN_SLOT_HEART) + if(!heart) return - if(!target.mind) + target.visible_message( + span_danger("The [src.name] pierces [target]'s chest, destroying their [heart.name]!"), + span_userdanger("You feel a HORRIBLE pain as the [src.name] pierces your chest, destroying your [heart.name]!"), + ) + qdel(heart) + +/obj/item/stake/tryEmbed(atom/target, forced) + . = ..() + if(!(. & COMPONENT_EMBED_SUCCESS) || !isbodypart(target)) + return FALSE + var/obj/item/bodypart/bodypart = target + if(bodypart.body_zone != BODY_ZONE_CHEST) return - var/datum/antagonist/bloodsucker/bloodsuckerdatum = target.mind.has_antag_datum(/datum/antagonist/bloodsucker) - if(bloodsuckerdatum) - // If silver stake and DEAD or TORPOR... Kill the Bloodsucker! - if(target.StakeCanKillMe()) - bloodsuckerdatum.FinalDeath() - else - to_chat(target, span_userdanger("You have been staked! Your powers are useless, your death forever, while it remains in place.")) - target.balloon_alert(target, "you have been staked!") + SEND_SIGNAL(bodypart, COMSIG_BODYPART_STAKED, forced) + if(bodypart.owner) + SEND_SIGNAL(bodypart.owner, COMSIG_MOB_STAKED, forced) ///Can this target be staked? If someone stands up before this is complete, it fails. Best used on someone stationary. /mob/living/proc/can_be_staked() @@ -215,7 +219,7 @@ . += span_notice("The [src] won't fall out by itself, if embedded in someone.") /datum/embed_data/stake/silver - embed_chance = 65 + embed_chance = 0 // we want it to only be embeddable manually fall_chance = 0 /obj/item/stake/hardened/silver @@ -229,12 +233,10 @@ custom_materials = list(/datum/material/silver = SHEET_MATERIAL_AMOUNT) embed_data = /datum/embed_data/stake/silver staketime = 15 SECONDS - kills_blodsuckers = TRUE /obj/item/stake/hardened/silver/examine_more(mob/user) . = ..() - if(HAS_TRAIT(user.mind, TRAIT_BLOODSUCKER_HUNTER)) - . += span_notice("You know that the [src] can cause a Final Death to a vile Bloodsucker if they are asleep or dead.") + . += span_notice("You think that the [src] could destroy someone's heart if you really slam it in someone's ribs properly.") ////////////////////// // ARCHIVES // @@ -246,14 +248,14 @@ * A book that can only be used by Curators. * When used on a player, after a short timer, will reveal if the player is a Bloodsucker, including their real name and Clan. * This book should not work on Bloodsuckers using the Masquerade ability. - * If it reveals a Bloodsucker, the Curator will then be able to tell they are a Bloodsucker on examine (Like a Vassal). + * If it reveals a Bloodsucker, the Curator will then be able to tell they are a Bloodsucker on examine (Like a Ghoul). * Reading it normally will allow Curators to read what each Clan does, with some extra flavor text ones. * * Regular Bloodsuckers won't have any negative effects from the book, while everyone else will get burns/eye damage. */ /obj/item/book/kindred - name = "\improper Archive of the Kindred" - starting_title = "the Archive of the Kindred" + name = "\improper Book of Nod" + starting_title = "the Book of Nod" desc = "Cryptic documents explaining hidden truths behind Undead beings. It is said only Curators can decipher what they really mean." icon = 'modular_zubbers/icons/obj/structures/vamp_obj.dmi' lefthand_file = 'modular_zubbers/icons/mob/inhands/weapons/bloodsucker_lefthand.dmi' diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/batform.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/batform.dm index 7d0b2d495c56a..b12ce0ba0ccb8 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/batform.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/batform.dm @@ -6,6 +6,10 @@ /datum/action/cooldown/spell/shapeshift/bat name = "Bat Form" desc = "Take on the shape of a space bat. You can fly and see in the dark, and you heal from doing melee attacks." + background_icon_state = "tremere_power_off" + active_background_icon_state = "tremere_power_on" + base_background_icon_state = "tremere_power_off" + background_icon = 'modular_zubbers/icons/mob/actions/tremere_bloodsucker.dmi' power_explanation = "You can fly and see in the dark, and you heal from doing melee attacks." invocation = "Master, grant me your might, BAT FORM!!" invocation_type = INVOCATION_SHOUT @@ -13,6 +17,10 @@ convert_damage = TRUE cooldown_time = 1 MINUTES possible_shapes = list(/mob/living/basic/bat/bloodsucker) + power_explanation = "This ability turns you into a small bat, which can fly and heals from doing meele damage. \n\ + However, you don't do much meele damage, and are slightly weak to fire damage.\n\ + Using the ability also spawns some normal bats around where you cast it, causing confusion.\n\ + Keep in mind if you die in this form, your real body will also die, and any damage received is transfered as well." var/bats_to_spawn = 3 /datum/action/cooldown/spell/shapeshift/bat/cast(mob/living/cast_on) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm index 96c8de0937a92..677dc11cad0b1 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm @@ -1,47 +1,47 @@ -#define VASSAL_SCAN_MIN_DISTANCE 5 -#define VASSAL_SCAN_MAX_DISTANCE 500 +#define GHOUL_SCAN_MIN_DISTANCE 5 +#define GHOUL_SCAN_MAX_DISTANCE 500 /// 2s update time. -#define VASSAL_SCAN_PING_TIME 20 +#define GHOUL_SCAN_PING_TIME 20 -/datum/antagonist/vassal - name = "\improper Vassal" - roundend_category = "vassals" +/datum/antagonist/ghoul + name = "\improper Ghoul" + roundend_category = "ghouls" antagpanel_category = "Bloodsucker" job_rank = ROLE_VASSAL - antag_hud_name = "vassal" + antag_hud_name = "ghoul" show_in_roundend = FALSE hud_icon = 'modular_zubbers/icons/mob/huds/bloodsucker.dmi' - ui_name = "AntagInfoVassal" - antag_panel_description = "You are a Vassal, a mortal servant of a Bloodsucker." + ui_name = "AntagInfoGhoul" + antag_panel_description = "You are a Ghoul, a mortal servant of a Bloodsucker." /// The Master Bloodsucker's antag datum. var/datum/antagonist/bloodsucker/master /// List of all Purchased Powers, to be cleaned up on antag removal. var/list/datum/action/powers = list() - ///Whether this vassal is already a special type of Vassal. + ///Whether this ghoul is already a special type of Ghoul. var/special_type = FALSE - ///Description of what this Vassal does. - /// It's shown to the bloodsucker in the radial for setting vassal type - var/vassal_description + ///Description of what this Ghoul does. + /// It's shown to the bloodsucker in the radial for setting ghoul type + var/ghoul_description /// inherent traits that are removed and addded on antag datum loss and gain var/list/traits = list() -/datum/antagonist/vassal/antag_panel_data() +/datum/antagonist/ghoul/antag_panel_data() return "Master : [master?.owner.name ? master.owner.name : "Gone"]" -// todo make this into a shared proc that bloodsuckers and vassals share -/datum/antagonist/vassal/ui_static_data(mob/user) +// todo make this into a shared proc that bloodsuckers and ghouls share +/datum/antagonist/ghoul/ui_static_data(mob/user) return ability_ui_data(powers) + ..() -/datum/antagonist/vassal/apply_innate_effects(mob/living/mob_override) +/datum/antagonist/ghoul/apply_innate_effects(mob/living/mob_override) . = ..() var/mob/living/current_mob = mob_override || owner.current - current_mob.apply_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) + current_mob.apply_status_effect(/datum/status_effect/agent_pinpointer/ghoul_edition) add_team_hud(current_mob) if(length(traits)) - current_mob.add_traits(traits, VASSAL_TRAIT) + current_mob.add_traits(traits, GHOUL_TRAIT) -/datum/antagonist/vassal/add_team_hud(mob/target) +/datum/antagonist/ghoul/add_team_hud(mob/target) QDEL_NULL(team_hud_ref) team_hud_ref = WEAKREF(target.add_alt_appearance( @@ -54,8 +54,8 @@ var/list/mob/living/mob_list = list() mob_list += master.owner.current - for(var/datum/antagonist/vassal/vassal as anything in master.vassals) - mob_list += vassal.owner.current + for(var/datum/antagonist/ghoul/ghoul as anything in master.ghouls) + mob_list += ghoul.owner.current for (var/datum/atom_hud/alternate_appearance/basic/has_antagonist/antag_hud as anything in GLOB.has_antagonist_huds) if(!(antag_hud.target in mob_list)) @@ -63,99 +63,99 @@ antag_hud.show_to(target) hud.show_to(antag_hud.target) -/datum/antagonist/vassal/remove_innate_effects(mob/living/mob_override) +/datum/antagonist/ghoul/remove_innate_effects(mob/living/mob_override) . = ..() var/mob/living/current_mob = mob_override || owner.current - current_mob.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) + current_mob.remove_status_effect(/datum/status_effect/agent_pinpointer/ghoul_edition) if(length(traits)) - current_mob.remove_traits(traits, VASSAL_TRAIT) + current_mob.remove_traits(traits, GHOUL_TRAIT) -/datum/antagonist/vassal/pre_mindshield(mob/implanter, mob/living/mob_override) +/datum/antagonist/ghoul/pre_mindshield(mob/implanter, mob/living/mob_override) return COMPONENT_MINDSHIELD_PASSED /// This is called when the antagonist is successfully mindshielded. -/datum/antagonist/vassal/on_mindshield(mob/implanter, mob/living/mob_override) - owner.remove_antag_datum(/datum/antagonist/vassal) - owner.current.log_message("has been deconverted from Vassalization by [implanter]!", LOG_ATTACK, color="#960000") +/datum/antagonist/ghoul/on_mindshield(mob/implanter, mob/living/mob_override) + owner.remove_antag_datum(/datum/antagonist/ghoul) + owner.current.log_message("has been deconverted from Ghoulization by [implanter]!", LOG_ATTACK, color="#960000") return COMPONENT_MINDSHIELD_DECONVERTED -/datum/antagonist/vassal/proc/on_examined(datum/source, mob/examiner, examine_text) +/datum/antagonist/ghoul/proc/on_examined(datum/source, mob/examiner, examine_text) SIGNAL_HANDLER - var/vassal_examine = return_vassal_examine(examiner) - if(vassal_examine) - examine_text += vassal_examine + var/ghoul_examine = return_ghoul_examine(examiner) + if(ghoul_examine) + examine_text += ghoul_examine -/datum/antagonist/vassal/on_gain() +/datum/antagonist/ghoul/on_gain() RegisterSignal(owner.current, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) RegisterSignal(SSsunlight, COMSIG_SOL_WARNING_GIVEN, PROC_REF(give_warning)) /// Enslave them to their Master if(!master || !istype(master, master)) return if(special_type) - if(!master.special_vassals[special_type]) - master.special_vassals[special_type] = list() - master.special_vassals[special_type] |= src - master.vassals += src + if(!master.special_ghouls[special_type]) + master.special_ghouls[special_type] = list() + master.special_ghouls[special_type] |= src + master.ghouls += src owner.enslave_mind_to_creator(master.owner.current) - owner.current.log_message("has been vassalized by [master.owner.current]!", LOG_ATTACK, color="#960000") + owner.current.log_message("has been ghoulized by [master.owner.current]!", LOG_ATTACK, color="#960000") /// Give Recuperate Power BuyPower(/datum/action/cooldown/bloodsucker/recuperate) /// Give Objectives - var/datum/objective/bloodsucker/vassal/vassal_objective = new - vassal_objective.owner = owner - objectives += vassal_objective + var/datum/objective/bloodsucker/ghoul/ghoul_objective = new + ghoul_objective.owner = owner + objectives += ghoul_objective /// Give Vampire Language & Hud owner.current.grant_all_languages(FALSE, FALSE, TRUE) owner.current.grant_language(/datum/language/vampiric, ALL, LANGUAGE_MIND) return ..() -/datum/antagonist/vassal/on_removal() +/datum/antagonist/ghoul/on_removal() UnregisterSignal(owner.current, COMSIG_ATOM_EXAMINE) UnregisterSignal(SSsunlight, COMSIG_SOL_WARNING_GIVEN) //Free them from their Master if(master && master.owner) - if(special_type && master.special_vassals[special_type]) - master.special_vassals.Remove(special_type) - master.vassals -= src + if(special_type && master.special_ghouls[special_type]) + master.special_ghouls.Remove(special_type) + master.ghouls -= src owner.enslaved_to = null //Remove ALL Traits, as long as its from BLOODSUCKER_TRAIT's source. for(var/all_status_traits in owner.current._status_traits) - REMOVE_TRAIT(owner.current, all_status_traits, VASSAL_TRAIT) + REMOVE_TRAIT(owner.current, all_status_traits, GHOUL_TRAIT) //Remove Recuperate Power remove_powers(powers) //Remove Language & Hud owner.current.remove_language(/datum/language/vampiric, ALL, LANGUAGE_MIND) return ..() -/datum/antagonist/vassal/proc/remove_powers(list/removing_powers) +/datum/antagonist/ghoul/proc/remove_powers(list/removing_powers) for(var/datum/action/cooldown/bloodsucker/power as anything in removing_powers) removing_powers -= power if(!(power in owner.current.actions)) continue power.Remove(owner.current) -/datum/antagonist/vassal/on_body_transfer(mob/living/old_body, mob/living/new_body) +/datum/antagonist/ghoul/on_body_transfer(mob/living/old_body, mob/living/new_body) . = ..() for(var/datum/action/cooldown/bloodsucker/all_powers as anything in powers) all_powers.Remove(old_body) all_powers.Grant(new_body) -/datum/antagonist/vassal/greet() +/datum/antagonist/ghoul/greet() . = ..() if(silent) return to_chat(owner, span_userdanger("You are now the mortal servant of [master.owner.current], a Bloodsucker!")) to_chat(owner, span_boldannounce("The power of [master.owner.current.p_their()] immortal blood compels you to obey [master.owner.current.p_them()] in all things, even offering your own life to prolong theirs.\n\ - You are not required to obey any other Bloodsucker, for only [master.owner.current] is your master. The laws of Nanotrasen do not apply to you now; only your vampiric master's word must be obeyed.")) // if only there was a /p_theirs() proc... - owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) + You are not required to obey any other Bloodsucker, for only [master.owner.current] is your master. The laws of Nanotrasen do not apply to you now; only your vampiric master's word must be obeyed.")) + owner.current.playsound_local(null, 'sound/effects/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) antag_memory += "You, becoming the mortal servant of [master.owner.current], a bloodsucking vampire!
        " /// Message told to your Master. - to_chat(master.owner, span_userdanger("[owner.current] has become addicted to your immortal blood. [owner.current.p_they(TRUE)] [owner.current.p_are()] now your undying servant!")) - master.owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) + to_chat(master.owner, span_userdanger("[owner.current] has become addicted to your immortal blood. [capitalize(owner.current.p_they(TRUE))] [owner.current.p_are()] now your mortal servant!")) + master.owner.current.playsound_local(null, 'sound/effects/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) -/datum/antagonist/vassal/farewell() +/datum/antagonist/ghoul/farewell() if(silent) return @@ -163,12 +163,12 @@ span_deconversion_message("[owner.current]'s eyes dart feverishly from side to side, and then stop. [owner.current.p_they(TRUE)] seem[owner.current.p_s()] calm, \ like [owner.current.p_they()] [owner.current.p_have()] regained some lost part of [owner.current.p_them()]self."), \ span_deconversion_message("With a snap, you are no longer enslaved to [master.owner]! You breathe in heavily, having regained your free will.")) - owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) + owner.current.playsound_local(null, 'sound/effects/magic/mutate.ogg', 100, FALSE, pressure_affected = FALSE) /// Message told to your (former) Master. if(master && master.owner) - to_chat(master.owner, span_cult_bold("You feel the bond with your vassal [owner.current] has somehow been broken!")) + to_chat(master.owner, span_cult_bold("You feel the bond with your ghoul [owner.current] has somehow been broken!")) -/datum/antagonist/vassal/admin_add(datum/mind/new_owner, mob/admin) +/datum/antagonist/ghoul/admin_add(datum/mind/new_owner, mob/admin) var/list/datum/mind/possible_vampires = list() for(var/datum/antagonist/bloodsucker/bloodsuckerdatums in GLOB.antagonists) var/datum/mind/vamp = bloodsuckerdatums.owner @@ -180,13 +180,13 @@ continue possible_vampires += vamp if(!length(possible_vampires)) - message_admins("[key_name_admin(admin)] tried vassalizing [key_name_admin(new_owner)], but there were no bloodsuckers!") + message_admins("[key_name_admin(admin)] tried ghoulizing [key_name_admin(new_owner)], but there were no bloodsuckers!") return - var/datum/mind/choice = tgui_input_list(admin, "Which bloodsucker should this vassal belong to?", "Bloodsucker", possible_vampires) + var/datum/mind/choice = tgui_input_list(admin, "Which bloodsucker should this ghoul belong to?", "Bloodsucker", possible_vampires) if(!choice) return - log_admin("[key_name_admin(admin)] turned [key_name_admin(new_owner)] into a vassal of [key_name_admin(choice)]!") - var/datum/antagonist/bloodsucker/vampire = choice.has_antag_datum(/datum/antagonist/bloodsucker) + log_admin("[key_name_admin(admin)] turned [key_name_admin(new_owner)] into a ghoul of [key_name_admin(choice)]!") + var/datum/antagonist/bloodsucker/vampire = IS_BLOODSUCKER(choice.current) master = vampire new_owner.add_antag_datum(src) - to_chat(choice, span_notice("Through divine intervention, you've gained a new vassal!")) + to_chat(choice, span_notice("Through divine intervention, you've gained a new ghoul!")) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_pinpointer.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_pinpointer.dm index 791b9a8f9f5fb..8d08a8c4492b7 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_pinpointer.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_pinpointer.dm @@ -1,31 +1,31 @@ /** - * # Vassal Pinpointer + * # Ghoul Pinpointer * * Pinpointer that points to their Master's location at all times. * Unlike the Monster hunter one, this one is permanently active, and has no power needed to activate it. */ -/atom/movable/screen/alert/status_effect/agent_pinpointer/vassal_edition +/atom/movable/screen/alert/status_effect/agent_pinpointer/ghoul_edition name = "Blood Bond" desc = "You always know where your master is." -/datum/status_effect/agent_pinpointer/vassal_edition +/datum/status_effect/agent_pinpointer/ghoul_edition id = "agent_pinpointer" - alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/vassal_edition - minimum_range = VASSAL_SCAN_MIN_DISTANCE - tick_interval = VASSAL_SCAN_PING_TIME + alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/ghoul_edition + minimum_range = GHOUL_SCAN_MIN_DISTANCE + tick_interval = GHOUL_SCAN_PING_TIME duration = -1 range_fuzz_factor = 0 -/datum/status_effect/agent_pinpointer/vassal_edition/on_creation(mob/living/new_owner, ...) +/datum/status_effect/agent_pinpointer/ghoul_edition/on_creation(mob/living/new_owner, ...) ..() - var/datum/antagonist/vassal/antag_datum = new_owner.mind.has_antag_datum(/datum/antagonist/vassal) + var/datum/antagonist/ghoul/antag_datum = new_owner.mind.has_antag_datum(/datum/antagonist/ghoul) scan_target = antag_datum?.master?.owner?.current -/datum/status_effect/agent_pinpointer/vassal_edition/scan_for_target() +/datum/status_effect/agent_pinpointer/ghoul_edition/scan_for_target() return -/datum/status_effect/agent_pinpointer/vassal_edition/Destroy() +/datum/status_effect/agent_pinpointer/ghoul_edition/Destroy() if(scan_target) to_chat(owner, span_notice("You've lost your master's trail.")) return ..() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_procs.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_procs.dm index 564d667ff5746..08151ba4ee965 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_procs.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_procs.dm @@ -1,46 +1,46 @@ -/datum/antagonist/vassal/proc/give_warning(atom/source, danger_level, vampire_warning_message, vassal_warning_message) +/datum/antagonist/ghoul/proc/give_warning(atom/source, danger_level, vampire_warning_message, ghoul_warning_message) SIGNAL_HANDLER - if(vassal_warning_message) - to_chat(owner, vassal_warning_message) + if(ghoul_warning_message) + to_chat(owner, ghoul_warning_message) /** - * Returns a Vassals's examine strings. + * Returns a Ghouls's examine strings. * Args: * viewer - The person examining. */ -/datum/antagonist/vassal/proc/return_vassal_examine(mob/living/viewer) +/datum/antagonist/ghoul/proc/return_ghoul_examine(mob/living/viewer) if((!viewer.mind && !isobserver(viewer)) || !iscarbon(owner.current)) return FALSE var/mob/living/carbon/carbon_current = owner.current - // Target must be a Vassal + // Target must be a Ghoul // Default String var/returnString = "\[" var/returnIcon = "" - // Vassals and Bloodsuckers recognize eachother, while Monster Hunters can see Vassals. - if(!IS_BLOODSUCKER(viewer) && !IS_VASSAL(viewer) && !IS_MONSTERHUNTER(viewer) && !isobserver(viewer)) + // Ghouls and Bloodsuckers recognize eachother, while Monster Hunters can see Ghouls. + if(!IS_BLOODSUCKER(viewer) && !IS_GHOUL(viewer) && !IS_MONSTERHUNTER(viewer) && !isobserver(viewer)) return FALSE - // Am I Viewer's Vassal? + // Am I Viewer's Ghoul? if(master.owner == viewer.mind) returnString += "This [carbon_current.dna.species.name] bears YOUR mark!" - returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "vassal")]" - // Am I someone ELSE'S Vassal? + returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "ghoul")]" + // Am I someone ELSE'S Ghoul? else if(IS_BLOODSUCKER(viewer) || IS_MONSTERHUNTER(viewer) || isobserver(viewer)) returnString += "This [carbon_current.dna.species.name] bears the mark of [master.return_full_name()][master.broke_masquerade ? " who has broken the Masquerade" : ""]" - returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "vassal_grey")]" + returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "ghoul_grey")]" // Are you serving the same master as I am? - else if(viewer.mind.has_antag_datum(/datum/antagonist/vassal) in master.vassals) + else if(viewer.mind.has_antag_datum(/datum/antagonist/ghoul) in master.ghouls) returnString += "[p_they(TRUE)] bears the mark of your Master" - returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "vassal")]" + returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "ghoul")]" // You serve a different Master than I do. else returnString += "[p_they(TRUE)] bears the mark of another Bloodsucker" - returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "vassal_grey")]" + returnIcon = "[icon2html('modular_zubbers/icons/misc/language.dmi', world, "ghoul_grey")]" returnString += "\]" // \n" Don't need spacers. Using . += "" in examine.dm does this on its own. return returnIcon + returnString /// Used when your Master teaches you a new Power. -/datum/antagonist/vassal/proc/BuyPower(datum/action/cooldown/power, list_to_add_to = powers) +/datum/antagonist/ghoul/proc/BuyPower(datum/action/cooldown/power, list_to_add_to = powers) for(var/datum/action/current_powers as anything in list_to_add_to) if(current_powers.type == power.type) return FALSE @@ -50,28 +50,28 @@ log_uplink("[key_name(owner.current)] purchased [power].") return TRUE -/datum/antagonist/vassal/proc/LevelUpPowers() +/datum/antagonist/ghoul/proc/LevelUpPowers() for(var/datum/action/cooldown/bloodsucker/power in powers) power.level_current++ -/// Called when we are made into the Favorite Vassal -/datum/antagonist/vassal/proc/make_special(datum/antagonist/vassal/vassal_type) +/// Called when we are made into the Favorite Ghoul +/datum/antagonist/ghoul/proc/make_special(datum/antagonist/ghoul/ghoul_type) //store what we need - var/datum/mind/vassal_owner = owner + var/datum/mind/ghoul_owner = owner var/datum/antagonist/bloodsucker/bloodsuckerdatum = master //remove our antag datum silent = TRUE - vassal_owner.remove_antag_datum(/datum/antagonist/vassal) + ghoul_owner.remove_antag_datum(/datum/antagonist/ghoul) //give our new one - var/datum/antagonist/vassal/vassaldatum = new vassal_type(vassal_owner) - vassaldatum.master = bloodsuckerdatum - vassaldatum.silent = TRUE - vassal_owner.add_antag_datum(vassaldatum) - vassaldatum.silent = FALSE + var/datum/antagonist/ghoul/ghouldatum = new ghoul_type(ghoul_owner) + ghouldatum.master = bloodsuckerdatum + ghouldatum.silent = TRUE + ghoul_owner.add_antag_datum(ghouldatum) + ghouldatum.silent = FALSE //send alerts of completion - to_chat(master, span_danger("You have turned [vassal_owner.current] into your [vassaldatum.name]!")) - to_chat(vassal_owner, span_notice("As blood drips over your body, you feel closer to your Master... You are now the Favorite Vassal!")) - vassal_owner.current.playsound_local(null, 'sound/magic/mutate.ogg', 75, FALSE, pressure_affected = FALSE) + to_chat(master, span_danger("You have turned [ghoul_owner.current] into your [ghouldatum.name]! They will no longer be deconverted upon Mindshielding!")) + to_chat(ghoul_owner, span_notice("As Blood drips over your body, you feel closer to your Master... You are now the [ghouldatum.name]!")) + ghoul_owner.current.playsound_local(null, 'sound/effects/magic/mutate.ogg', 75, FALSE, pressure_affected = FALSE) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/ex_vassal.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/ex_vassal.dm index 9d9c74e830095..ac0c125ba6ef3 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/ex_vassal.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/ex_vassal.dm @@ -1,42 +1,42 @@ #define BLOOD_TIMER_REQUIREMENT (10 MINUTES) #define BLOOD_TIMER_HALWAY (BLOOD_TIMER_REQUIREMENT / 2) -/datum/antagonist/ex_vassal - name = "\improper Ex-Vassal" - roundend_category = "vassals" +/datum/antagonist/ex_ghoul + name = "\improper Ex-Ghoul" + roundend_category = "ghouls" antagpanel_category = "Bloodsucker" job_rank = ROLE_VASSAL - antag_hud_name = "vassal_grey" + antag_hud_name = "ghoul_grey" show_in_roundend = FALSE show_in_antagpanel = FALSE silent = TRUE ui_name = FALSE hud_icon = 'modular_zubbers/icons/mob/huds/bloodsucker.dmi' - ///The revenge vassal that brought us into the fold. - var/datum/antagonist/vassal/revenge/revenge_vassal + ///The revenge ghoul that brought us into the fold. + var/datum/antagonist/ghoul/revenge/revenge_ghoul ///Timer we have to live COOLDOWN_DECLARE(blood_timer) -/datum/antagonist/ex_vassal/on_gain() +/datum/antagonist/ex_ghoul/on_gain() . = ..() RegisterSignal(owner.current, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) -/datum/antagonist/ex_vassal/on_removal() - if(revenge_vassal) - revenge_vassal.ex_vassals -= src - revenge_vassal = null +/datum/antagonist/ex_ghoul/on_removal() + if(revenge_ghoul) + revenge_ghoul.ex_ghouls -= src + revenge_ghoul = null blood_timer = null return ..() -/datum/antagonist/ex_vassal/proc/on_examine(datum/source, mob/examiner, examine_text) +/datum/antagonist/ex_ghoul/proc/on_examine(datum/source, mob/examiner, examine_text) SIGNAL_HANDLER - var/datum/antagonist/vassal/revenge/vassaldatum = examiner.mind.has_antag_datum(/datum/antagonist/vassal/revenge) - if(vassaldatum && !revenge_vassal) - examine_text += span_notice("[owner.current] is an ex-vassal!") + var/datum/antagonist/ghoul/revenge/ghouldatum = IS_REVENGE_GHOUL(examiner) + if(ghouldatum && !revenge_ghoul) + examine_text += span_notice("[owner.current] is an ex-ghoul!") -/datum/antagonist/ex_vassal/add_team_hud(mob/target) +/datum/antagonist/ex_ghoul/add_team_hud(mob/target) QDEL_NULL(team_hud_ref) team_hud_ref = WEAKREF(target.add_alt_appearance( @@ -48,9 +48,9 @@ var/datum/atom_hud/alternate_appearance/basic/has_antagonist/hud = team_hud_ref.resolve() var/list/mob/living/mob_list = list() - mob_list += revenge_vassal.owner.current - for(var/datum/antagonist/ex_vassal/former_vassals as anything in revenge_vassal.ex_vassals) - mob_list += former_vassals.owner.current + mob_list += revenge_ghoul.owner.current + for(var/datum/antagonist/ex_ghoul/former_ghouls as anything in revenge_ghoul.ex_ghouls) + mob_list += former_ghouls.owner.current for (var/datum/atom_hud/alternate_appearance/basic/has_antagonist/antag_hud as anything in GLOB.has_antagonist_huds) if(!(antag_hud.target in mob_list)) @@ -61,17 +61,17 @@ /** * Fold return * - * Called when a Revenge bloodsucker gets a vassal back into the fold. + * Called when a Revenge bloodsucker gets a ghoul back into the fold. */ -/datum/antagonist/ex_vassal/proc/return_to_fold(datum/antagonist/vassal/revenge/mike_ehrmantraut) - revenge_vassal = mike_ehrmantraut - mike_ehrmantraut.ex_vassals += src +/datum/antagonist/ex_ghoul/proc/return_to_fold(datum/antagonist/ghoul/revenge/mike_ehrmantraut) + revenge_ghoul = mike_ehrmantraut + mike_ehrmantraut.ex_ghouls += src COOLDOWN_START(src, blood_timer, BLOOD_TIMER_REQUIREMENT) add_team_hud(owner.current) RegisterSignal(src, COMSIG_LIVING_LIFE, PROC_REF(on_life)) -/datum/antagonist/ex_vassal/proc/on_life(datum/source, seconds_per_tick, times_fired) +/datum/antagonist/ex_ghoul/proc/on_life(datum/source, seconds_per_tick, times_fired) SIGNAL_HANDLER if(COOLDOWN_TIMELEFT(src, blood_timer) <= BLOOD_TIMER_HALWAY + 2 && COOLDOWN_TIMELEFT(src, blood_timer) >= BLOOD_TIMER_HALWAY - 2) //just about halfway @@ -79,24 +79,24 @@ if(!COOLDOWN_FINISHED(src, blood_timer)) return to_chat(owner.current, span_cult_bold("You are out of blood!")) - to_chat(revenge_vassal.owner.current, span_cult_bold("[owner.current] has ran out of blood and is no longer in the fold!")) - owner.remove_antag_datum(/datum/antagonist/ex_vassal) + to_chat(revenge_ghoul.owner.current, span_cult_bold("[owner.current] has ran out of blood and is no longer in the fold!")) + owner.remove_antag_datum(/datum/antagonist/ex_ghoul) /** * Bloodsucker Blood * - * Artificially made, this must be fed to ex-vassals to keep them on their high. + * Artificially made, this must be fed to ex-ghouls to keep them on their high. */ /datum/reagent/blood/bloodsucker name = "Blood two" /datum/reagent/blood/bloodsucker/expose_mob(mob/living/exposed_mob, methods, reac_volume, show_message, touch_protection) - var/datum/antagonist/ex_vassal/former_vassal = exposed_mob.mind.has_antag_datum(/datum/antagonist/ex_vassal) - if(former_vassal) + var/datum/antagonist/ex_ghoul/former_ghoul = exposed_mob.mind.has_antag_datum(/datum/antagonist/ex_ghoul) + if(former_ghoul) to_chat(exposed_mob, span_cult("You feel the blood restore you... You feel safe.")) - COOLDOWN_RESET(former_vassal, blood_timer) - COOLDOWN_START(former_vassal, blood_timer, BLOOD_TIMER_REQUIREMENT) + COOLDOWN_RESET(former_ghoul, blood_timer) + COOLDOWN_START(former_ghoul, blood_timer, BLOOD_TIMER_REQUIREMENT) return ..() #undef BLOOD_TIMER_REQUIREMENT diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/favorite_vassal.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/favorite_vassal.dm index 8815d54ae80c7..a8375f011d11f 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/favorite_vassal.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/favorite_vassal.dm @@ -1,28 +1,28 @@ /** - * Favorite Vassal + * Favorite Ghoul * * Gets some cool abilities depending on the Clan. */ -/datum/antagonist/vassal/favorite - name = "\improper Favorite Vassal" - antag_hud_name = "vassal6" - special_type = FAVORITE_VASSAL - vassal_description = "The Favorite Vassal gets unique abilities over other Vassals depending on the Master's Clan \ - and becomes completely immune to Mindshields. If part of Ventrue, this is the Vassal a Bloodsucker will rank up." +/datum/antagonist/ghoul/favorite + name = "\improper Favorite Ghoul" + antag_hud_name = "ghoul6" + special_type = FAVORITE_GHOUL + ghoul_description = "The Favorite Ghoul gets unique abilities over other Ghouls depending on the Master's Clan \ + and becomes completely immune to Mindshields. If part of Ventrue, this is the Ghoul a Bloodsucker will rank up." - ///Bloodsucker levels, but for Vassals, used by Ventrue. Used for ventrue creating a new bloodsucker. - var/vassal_level + ///Bloodsucker levels, but for Ghouls, used by Ventrue. Used for ventrue creating a new bloodsucker. + var/ghoul_level /// Power's we're going to inherit once we turn into a Bloodsucker var/list/bloodsucker_powers = list() -/datum/antagonist/vassal/favorite/on_gain() +/datum/antagonist/ghoul/favorite/on_gain() . = ..() - SEND_SIGNAL(master, BLOODSUCKER_MAKE_FAVORITE, src) + SEND_SIGNAL(master, COMSIG_BLOODSUCKER_MAKE_FAVORITE, src) -/datum/antagonist/vassal/favorite/on_removal() - SEND_SIGNAL(master, BLOODSUCKER_LOOSE_FAVORITE, src) +/datum/antagonist/ghoul/favorite/on_removal() + SEND_SIGNAL(master, COMSIG_BLOODSUCKER_LOOSE_FAVORITE, src) remove_powers(bloodsucker_powers) . = ..() -/datum/antagonist/vassal/favorite/pre_mindshield(mob/implanter, mob/living/mob_override) +/datum/antagonist/ghoul/favorite/pre_mindshield(mob/implanter, mob/living/mob_override) return COMPONENT_MINDSHIELD_RESISTED diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/revenge_vassal.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/revenge_vassal.dm index 38337bbcf9f86..e1496c54bd7c9 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/revenge_vassal.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_types/revenge_vassal.dm @@ -1,68 +1,68 @@ /** - * Revenge Vassal + * Revenge Ghoul * * Has the goal to 'get revenge' when their Master dies. */ -/datum/antagonist/vassal/revenge - name = "\improper Revenge Vassal" - roundend_category = "abandoned Vassals" +/datum/antagonist/ghoul/revenge + name = "\improper Revenge Ghoul" + roundend_category = "abandoned Ghouls" show_in_roundend = FALSE show_in_antagpanel = FALSE - antag_hud_name = "vassal4" - special_type = REVENGE_VASSAL - vassal_description = "The Revenge Vassal will not deconvert on a Bloodsucker's Final Death, \ + antag_hud_name = "ghoul4" + special_type = REVENGE_GHOUL + ghoul_description = "The Revenge Ghoul will not deconvert on a Bloodsucker's Final Death, \ instead they will gain all your Powers, and the objective to take revenge for your demise. \ - They additionally maintain Vassals their Master's departure, rather than become aimless." + They additionally maintain Ghouls their Master's departure, rather than become aimless." - ///all ex-vassals brought back into the fold. - var/list/datum/antagonist/ex_vassal/ex_vassals = list() + ///all ex-ghouls brought back into the fold. + var/list/datum/antagonist/ex_ghoul/ex_ghouls = list() -/datum/antagonist/vassal/revenge/roundend_report() +/datum/antagonist/ghoul/revenge/roundend_report() var/list/report = list() report += printplayer(owner) if(objectives.len) report += printobjectives(objectives) - // Now list their vassals - if(ex_vassals.len) - report += "The Vassals brought back into the fold were..." - for(var/datum/antagonist/ex_vassal/all_vassals as anything in ex_vassals) - if(!all_vassals.owner) + // Now list their ghouls + if(ex_ghouls.len) + report += "The Ghouls brought back into the fold were..." + for(var/datum/antagonist/ex_ghoul/all_ghouls as anything in ex_ghouls) + if(!all_ghouls.owner) continue - report += "[all_vassals.owner.name] the [all_vassals.owner.assigned_role.title]" + report += "[all_ghouls.owner.name] the [all_ghouls.owner.assigned_role.title]" return report.Join("
        ") -/datum/antagonist/vassal/revenge/on_gain() +/datum/antagonist/ghoul/revenge/on_gain() . = ..() - RegisterSignal(master, BLOODSUCKER_FINAL_DEATH, PROC_REF(on_master_death)) + RegisterSignal(master, COMSIG_BLOODSUCKER_FINAL_DEATH, PROC_REF(on_master_death)) -/datum/antagonist/vassal/revenge/on_removal() - UnregisterSignal(master, BLOODSUCKER_FINAL_DEATH) +/datum/antagonist/ghoul/revenge/on_removal() + UnregisterSignal(master, COMSIG_BLOODSUCKER_FINAL_DEATH) return ..() -/datum/antagonist/vassal/revenge/proc/on_master_death(datum/antagonist/bloodsucker/bloodsuckerdatum, mob/living/carbon/master) +/datum/antagonist/ghoul/revenge/proc/on_master_death(datum/antagonist/bloodsucker/bloodsuckerdatum, mob/living/carbon/master) SIGNAL_HANDLER show_in_roundend = TRUE for(var/datum/objective/all_objectives as anything in objectives) objectives -= all_objectives - BuyPower(/datum/action/cooldown/bloodsucker/vassal_blood) + BuyPower(/datum/action/cooldown/bloodsucker/ghoul_blood) for(var/datum/action/cooldown/bloodsucker/master_powers as anything in bloodsuckerdatum.powers) if(master_powers.purchase_flags & BLOODSUCKER_DEFAULT_POWER) continue master_powers.Grant(owner.current) - owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/vassal_edition) + owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer/ghoul_edition) var/datum/objective/survive/new_objective = new - new_objective.name = "Avenge Bloodsucker" - new_objective.explanation_text = "Avenge your Bloodsucker's death by felling the ones that killed them, and by recruiting their ex-vassals and continuing their operations." + new_objective.name = "Avenge your Master" + new_objective.explanation_text = "Avenge your Master's final death by felling the ones that killed them, recruiting their ex-ghouls and continuing their operations." new_objective.owner = owner objectives += new_objective - antag_panel_title = "You are a Vassal tasked with taking revenge for the death of your Master!" - antag_panel_description = "You have gained your Master's old Powers, and a brand new \ + antag_panel_title = "You are a Ghoul tasked with taking revenge for the death of your Master!" + antag_panel_description = "You have gained your Master's old Powers, and a brand new \ power. You will have to survive and maintain your old \ - Master's integrity. Bring their old Vassals back into the \ + Master's integrity. Bring their old Ghouls back into the \ fold using your new Ability." update_static_data_for_all_viewers() diff --git a/modular_zubbers/code/modules/antagonists/ert/names.dm b/modular_zubbers/code/modules/antagonists/ert/names.dm new file mode 100644 index 0000000000000..75515d31fe042 --- /dev/null +++ b/modular_zubbers/code/modules/antagonists/ert/names.dm @@ -0,0 +1,11 @@ +/datum/preference/name/emergency + explanation = "ERT Operative Alias" + group = "backup_human" + savefile_key = "centcom_name" + +/datum/preference/name/emergency/create_default_value() + var/name_list = list( + "Purple Gold", "Cocked Pistol", "Fast Pace", "Round House", "Double Take", "Grenouille", "Orbital", "Internal", "Burnt Oven", "Shattered Sun", "Watchman", "Bureau", "Fault", "Nerve Ground", "Grounding Rod", "Bouncer", "Low Blow", "Nonbeliever", "Sentinel", "Walleye", "Needle Point", "Crusher", "Pest Control", "Runt", "Vermin", "Shield", "Actualization", "Bloodhound", "Pool Boy", "Dreamer", "Hippie", "Packmaster", "Shepard", "Gazer", "Bird's Eye", "Hecate", "Ranger", "Bluescreen", "Anitivirus", "System Restore", "Praetorian", "Wolfram", "Soothsayer", "Witchhunter", "Oracle", "Knight", "Closeout", "Last Call", "Last Hope", "Curtain Call", "Skeleton Crew", "Closer", + ) + + return pick(name_list) diff --git a/modular_zubbers/code/modules/antagonists/heretic/heretic.dm b/modular_zubbers/code/modules/antagonists/heretic/heretic.dm new file mode 100644 index 0000000000000..60539d090ec16 --- /dev/null +++ b/modular_zubbers/code/modules/antagonists/heretic/heretic.dm @@ -0,0 +1,4 @@ +/datum/objective/minor_sacrifice/New(text) + . = ..() + target_amount = rand(5, 6) // Essentially +1 from the amount /tg/ has. Can be edited later if needed. + update_explanation_text() diff --git a/modular_zubbers/code/modules/antagonists/heretic/transmutation_rune.dm b/modular_zubbers/code/modules/antagonists/heretic/transmutation_rune.dm new file mode 100644 index 0000000000000..03b76b48527db --- /dev/null +++ b/modular_zubbers/code/modules/antagonists/heretic/transmutation_rune.dm @@ -0,0 +1,5 @@ +/obj/effect/heretic_rune/add_fingerprint(...) + return + +/obj/effect/heretic_rune/add_fingerprint_list(...) + return diff --git a/modular_zubbers/code/modules/antagonists/malf/remove_malf.dm b/modular_zubbers/code/modules/antagonists/malf/remove_malf.dm index a2587ec072a0e..b1b9627555545 100644 --- a/modular_zubbers/code/modules/antagonists/malf/remove_malf.dm +++ b/modular_zubbers/code/modules/antagonists/malf/remove_malf.dm @@ -5,7 +5,7 @@ if(action == ANTIVIRUS) if(!occupier?.stat) to_chat(usr, span_notice("Dr. Moffson Antivirus is scanning your AI for corruption.")) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 25, FALSE) restoring = TRUE run_antivirus() occupier.notify_revival("Dr. Moffson is debugging your programming!", source = src) @@ -44,7 +44,7 @@ return TRUE else say("I/O error in attempt to remove malicious files. Please try again later.") - playsound(occupier, 'sound/machines/buzz-two.ogg') + playsound(occupier, 'sound/machines/buzz/buzz-two.ogg') restoring = FALSE return FALSE @@ -54,7 +54,7 @@ . = ..() if(action == ANTIVIRUS) to_chat(usr, span_notice("Dr. Moffson Antivirus is scanning your AI for corruption.")) - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) + playsound(src, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 25, FALSE) restoring = TRUE run_antivirus() . = TRUE @@ -93,7 +93,7 @@ return TRUE else computer.say("I/O error in attempt to remove malicious files. Please try again later.") - playsound(bad_ai, 'sound/machines/buzz-two.ogg') + playsound(bad_ai, 'sound/machines/buzz/buzz-two.ogg') restoring = FALSE return FALSE diff --git a/modular_zubbers/code/modules/antagonists/modglue.dm b/modular_zubbers/code/modules/antagonists/modglue.dm index d6dd3a2261350..93fa29a02180e 100644 --- a/modular_zubbers/code/modules/antagonists/modglue.dm +++ b/modular_zubbers/code/modules/antagonists/modglue.dm @@ -97,7 +97,7 @@ i.loc = get_turf(src) var/turf/throw_at = get_ranged_target_turf_direct(src, usr, 7, rand(-60,60)) if(i.safe_throw_at(throw_at, rand(2,4), rand(1,3), usr, spin = TRUE)) - playsound(i, 'sound/weapons/punchmiss.ogg', 10) + playsound(i, 'sound/items/weapons/punchmiss.ogg', 10) return TRUE diff --git a/modular_zubbers/code/modules/traitor/goal_overrides.dm b/modular_zubbers/code/modules/antagonists/traitor/goal_overrides.dm similarity index 100% rename from modular_zubbers/code/modules/traitor/goal_overrides.dm rename to modular_zubbers/code/modules/antagonists/traitor/goal_overrides.dm diff --git a/modular_zubbers/code/modules/uplink/uplink_items/bundle.dm b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/bundle.dm similarity index 100% rename from modular_zubbers/code/modules/uplink/uplink_items/bundle.dm rename to modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/bundle.dm diff --git a/modular_zubbers/code/modules/uplink/uplink_items/dangerous.dm b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/dangerous.dm similarity index 100% rename from modular_zubbers/code/modules/uplink/uplink_items/dangerous.dm rename to modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/dangerous.dm diff --git a/modular_zubbers/code/modules/uplink/uplink_items/device_tools.dm b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/device_tools.dm similarity index 100% rename from modular_zubbers/code/modules/uplink/uplink_items/device_tools.dm rename to modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/device_tools.dm diff --git a/modular_zubbers/code/modules/uplink/uplink_items/job.dm b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/job.dm similarity index 100% rename from modular_zubbers/code/modules/uplink/uplink_items/job.dm rename to modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/job.dm diff --git a/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/stealth_items.dm b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/stealth_items.dm new file mode 100644 index 0000000000000..a2b32932f0e5e --- /dev/null +++ b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/stealth_items.dm @@ -0,0 +1,5 @@ +/datum/uplink_item/stealthy_weapons/hypnostick + name = "Hypno Lipstick" + desc = "A potent lipstick capable of weakening and even hypnotizing the minds of those you kiss!" + item = /obj/item/lipstick/hypnosyndie + cost = 4 diff --git a/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/syndimaid/_syndimaid.dm b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/syndimaid/_syndimaid.dm new file mode 100644 index 0000000000000..10011480987ea --- /dev/null +++ b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/syndimaid/_syndimaid.dm @@ -0,0 +1,17 @@ +/datum/uplink_item/badass/syndimaid + name = "Syndicate Maid Outfit" + desc = "A very obvious joke. A standard syndicate maid suit with bulky armor added to it. The added armor prevents you from wearing any extra outerwear" + item = /obj/item/storage/box/syndimaid + cost = 8 // Same as the redsuit mod. It's worse than it in almost every way but that's by design + cant_discount = TRUE + uplink_item_flags = SYNDIE_TRIPS_CONTRABAND + +/obj/item/storage/box/syndimaid + name = "box of neatly packaged laundry" + +/obj/item/storage/box/syndimaid/PopulateContents() + . = ..() + new /obj/item/clothing/under/syndicate/skyrat/maid/armored(src) + new /obj/item/clothing/head/costume/maidheadband/syndicate/armored(src) + new /obj/item/clothing/gloves/combat/maid/armored(src) + new /obj/item/clothing/shoes/jackboots/heel/tactical(src) diff --git a/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/syndimaid/clothes.dm b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/syndimaid/clothes.dm new file mode 100644 index 0000000000000..1150b9b21fc45 --- /dev/null +++ b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/syndimaid/clothes.dm @@ -0,0 +1,70 @@ +// Same as a armor deployed redsuit +/datum/armor/clothing_under/syndimaid + acid = 90 + bio = 100 + bomb = 40 + bullet = 50 + energy = 40 + fire = 50 + laser = 30 + melee = 40 + wound = 25 + +/obj/item/clothing/under/syndicate/skyrat/maid/armored + desc = "A 'tactical' skirtleneck fashioned to the likeness of a maid outfit.\ + The armor on this one is bulky and blocks the user from wearing any chest armor." + armor_type = /datum/armor/clothing_under/syndimaid + body_parts_covered = CHEST|GROIN|LEGS + resistance_flags = parent_type::resistance_flags | FIRE_PROOF + + var/is_worn = FALSE // This is to avoid any jank with the equip chain that I know exists + +/obj/item/clothing/under/syndicate/skyrat/maid/armored/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_ITEM_POST_EQUIPPED, PROC_REF(check_equip)) + +/obj/item/clothing/under/syndicate/skyrat/maid/armored/Destroy() + . = ..() + UnregisterSignal(src, COMSIG_ITEM_POST_EQUIPPED) + +/obj/item/clothing/under/syndicate/skyrat/maid/armored/mob_can_equip(mob/living/user, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action) + if(slot == ITEM_SLOT_ICLOTHING) + var/mob/living/carbon/human/human_wearer = user + if(human_wearer.wear_suit) + return FALSE + . = ..() + +/obj/item/clothing/under/syndicate/skyrat/maid/armored/proc/check_equip(datum/source, mob/user, slot, initial) + SIGNAL_HANDLER + if(slot == ITEM_SLOT_ICLOTHING) + RegisterSignal(user, COMSIG_HUMAN_EQUIPPING_ITEM, PROC_REF(block_equips)) + RegisterSignal(user, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(remove_block)) + is_worn = TRUE + else if(is_worn) + UnregisterSignal(user, list(COMSIG_HUMAN_EQUIPPING_ITEM, COMSIG_MOB_UNEQUIPPED_ITEM)) + is_worn = FALSE + +/obj/item/clothing/under/syndicate/skyrat/maid/armored/proc/remove_block(datum/source, obj/item, force, newloc, no_move, invdrop, silent) + SIGNAL_HANDLER + if(is_worn) + UnregisterSignal(source, list(COMSIG_HUMAN_EQUIPPING_ITEM, COMSIG_MOB_UNEQUIPPED_ITEM)) + is_worn = FALSE + +/obj/item/clothing/under/syndicate/skyrat/maid/armored/proc/block_equips(datum/source, mob/target, slot) + SIGNAL_HANDLER + if(slot == ITEM_SLOT_OCLOTHING) + return COMPONENT_BLOCK_EQUIP + +/obj/item/clothing/head/costume/maidheadband/syndicate/armored + armor_type = /datum/armor/clothing_under/syndimaid + body_parts_covered = HEAD + resistance_flags = parent_type::resistance_flags | FIRE_PROOF + +/obj/item/clothing/gloves/combat/maid/armored + armor_type = /datum/armor/clothing_under/syndimaid + body_parts_covered = HANDS | ARMS + resistance_flags = parent_type::resistance_flags | FIRE_PROOF + +/obj/item/clothing/shoes/jackboots/heel/tactical + name = "tactical high-heeled jackboots" + clothing_traits = list(TRAIT_NO_SLIP_WATER) diff --git a/modular_zubbers/code/modules/antagonists/uplink/uplinkitems.dm b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/uplinkitems.dm similarity index 100% rename from modular_zubbers/code/modules/antagonists/uplink/uplinkitems.dm rename to modular_zubbers/code/modules/antagonists/traitor/uplink/uplink_items/uplinkitems.dm diff --git a/modular_zubbers/code/modules/antagonists/uplink/uplinkdatums.dm b/modular_zubbers/code/modules/antagonists/traitor/uplink/uplinkdatums.dm similarity index 100% rename from modular_zubbers/code/modules/antagonists/uplink/uplinkdatums.dm rename to modular_zubbers/code/modules/antagonists/traitor/uplink/uplinkdatums.dm diff --git a/modular_zubbers/code/modules/arcades/code/loot/arcade_weights_classic.dm b/modular_zubbers/code/modules/arcades/code/loot/arcade_weights_classic.dm index 90d882b6ac1f8..f1c0bb7377262 100644 --- a/modular_zubbers/code/modules/arcades/code/loot/arcade_weights_classic.dm +++ b/modular_zubbers/code/modules/arcades/code/loot/arcade_weights_classic.dm @@ -98,11 +98,11 @@ GLOBAL_LIST_INIT(arcade_prize_pool_classic, list( /obj/item/grenade/chem_grenade/glitter/white = 1, ) = 100, list( - /obj/item/gun/ballistic/automatic/toy/unrestricted = 50, + /obj/item/gun/ballistic/automatic/toy = 50, /obj/item/gun/ballistic/automatic/pistol/toy = 75, /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 25, /obj/item/gun/ballistic/shotgun/toy/crossbow = 100, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 100, + /obj/item/gun/ballistic/shotgun/toy/riot = 100, /obj/item/gun/energy/laser/practice = 10 ) = 50, list( diff --git a/modular_zubbers/code/modules/arcades/code/minesweeper/minesweeper.dm b/modular_zubbers/code/modules/arcades/code/minesweeper/minesweeper.dm index d204d837219c7..caf6c75334540 100644 --- a/modular_zubbers/code/modules/arcades/code/minesweeper/minesweeper.dm +++ b/modular_zubbers/code/modules/arcades/code/minesweeper/minesweeper.dm @@ -176,7 +176,7 @@ playsound(user, 'modular_zubbers/sound/arcade/minesweeper_emag1.ogg', 100, 0, extrarange = 3, falloff_exponent = 10) else //Can't let you do that, star fox! to_chat(user, span_warning("The machine buzzes and sparks... the game has been reset!")) - playsound(user, 'sound/machines/buzz-sigh.ogg', 100, 0, extrarange = 3, falloff_exponent = 10) //Loud buzz + playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 100, 0, extrarange = 3, falloff_exponent = 10) //Loud buzz board.game_status = MINESWEEPER_IDLE diff --git a/modular_zubbers/code/modules/blooper/bark_list.dm b/modular_zubbers/code/modules/blooper/bark_list.dm index 6702fee9f0147..902918d5a8750 100644 --- a/modular_zubbers/code/modules/blooper/bark_list.dm +++ b/modular_zubbers/code/modules/blooper/bark_list.dm @@ -31,13 +31,13 @@ /datum/blooper/squeaky name = "Squeaky" id = "squeak" - soundpath = 'sound/items/toysqueak1.ogg' + soundpath = 'sound/items/toy_squeak/toysqueak1.ogg' maxspeed = 4 /datum/blooper/beep name = "Beepy" id = "beep" - soundpath = 'sound/machines/terminal_select.ogg' + soundpath = 'sound/machines/terminal/terminal_select.ogg' maxpitch = 1 //Bringing the pitch higher just hurts your ears :< maxspeed = 4 //This soundbyte's too short for larger speeds to not sound awkward @@ -55,13 +55,13 @@ /datum/blooper/synthetic name = "Synthetic (Normal)" id = "synth" - soundpath = 'sound/machines/uplinkerror.ogg' + soundpath = 'sound/machines/uplink/uplinkerror.ogg' /datum/blooper/bullet name = "Windy" id = "bullet" maxpitch = 1.6 - soundpath = 'sound/weapons/bulletflyby.ogg' + soundpath = 'sound/items/weapons/bulletflyby.ogg' /datum/blooper/coggers name = "Brassy" diff --git a/modular_zubbers/code/modules/cargo/expressconsole.dm b/modular_zubbers/code/modules/cargo/expressconsole.dm index 7f415e517f427..b2d0c069d0119 100644 --- a/modular_zubbers/code/modules/cargo/expressconsole.dm +++ b/modular_zubbers/code/modules/cargo/expressconsole.dm @@ -10,19 +10,78 @@ being emagged by the Syndicate cadets of the SSV Dauntless." circuit = /obj/item/circuitboard/computer/cargo/express/interdyne req_access = list(ACCESS_SYNDICATE) - - podType = /obj/structure/closet/supplypod/bluespacepod - cargo_account = ACCOUNT_INT + contraband = TRUE + var/allowed_categories = list(COMPANY_NAME_VITEZSTVI_AMMO, //used for company items import supports companies and specific categories + COMPANY_NAME_ALLSTAR_ENERGY, + COMPANY_NAME_MICRON_CONTROL_SYSTEMS, + COMPANY_NAME_SOL_DEFENSE_DEFENSE, + COMPANY_NAME_FRONTIER_EQUIPMENT, + COMPANY_NAME_KAHRAMAN_INDUSTRIES, + COMPANY_NAME_DONK_CO, + COMPANY_NAME_DEFOREST_MEDICAL, + COMPANY_NAME_NRI_SURPLUS, + COMPANY_NAME_BLACKSTEEL_FOUNDATION, + COMPANY_NAME_NAKAMURA_ENGINEERING_MODSUITS + ) + pod_type = /obj/structure/closet/supplypod/bluespacepod /obj/machinery/computer/cargo/express/interdyne/emag_act(mob/user, obj/item/card/emag/emag_card) if(user) to_chat(user, span_notice("You try to change the routing protocols, however the machine displays a runtime error and reboots.")) return FALSE//never let this console be emagged +/obj/machinery/computer/cargo/express/interdyne/packin_up()//we're the dauntless, add the company imports stuff to our express console + . = ..() + + if(!meme_pack_data["Company Imports"]) + meme_pack_data["Company Imports"] = list( + "name" = "Company Imports", + "packs" = list() + ) + + for(var/armament_category as anything in SSarmaments.entries)//babe! it's 4pm, time for the company importing logic + for(var/subcategory as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY]) + if(armament_category in allowed_categories) + for(var/datum/armament_entry/armament_entry as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY][subcategory]) + meme_pack_data["Company Imports"]["packs"] += list(list( + "name" = "[armament_category]: [armament_entry.name]", + "cost" = armament_entry.cost, + "id" = REF(armament_entry), + "description" = armament_entry.description, + )) + /obj/machinery/computer/cargo/express/interdyne/ui_act(action, params, datum/tgui/ui) if(action == "add")//if we're generating a supply order - if (!beacon || !usingBeacon)//if not using beacon + if (!beacon || !using_beacon)//if not using beacon say("Error! Destination is not whitelisted, aborting.") return - . = ..() + var/id = params["id"] + id = text2path(id) || id + var/datum/supply_pack/is_supply_pack = SSshuttle.supply_packs[id] + if(!is_supply_pack || !istype(is_supply_pack))//if we're ordering a company import pack, add a temp pack to the global supply packs list, and remove it + var/datum/armament_entry/armament_order = locate(id) + params["id"] = length(SSshuttle.supply_packs) + 1 + var/datum/supply_pack/armament/temp_pack = new + temp_pack.name = initial(armament_order.item_type.name) + temp_pack.cost = armament_order.cost + temp_pack.contains = list(armament_order.item_type) + SSshuttle.supply_packs += temp_pack + . = ..() + SSshuttle.supply_packs -= temp_pack + return . + return ..() + + +//Tarkons console +/obj/item/circuitboard/computer/cargo/express/interdyne/tarkon + name = "Tarkon Express Supply Console" + build_path = /obj/machinery/computer/cargo/express/interdyne/tarkon + contraband = TRUE + +/obj/machinery/computer/cargo/express/interdyne/tarkon + name = "interdyne express supply console" + desc = "A standard Tarkon express console." + circuit = /obj/item/circuitboard/computer/cargo/express/interdyne/tarkon + req_access = list(ACCESS_TARKON) + cargo_account = ACCOUNT_TAR diff --git a/modular_zubbers/code/modules/cargo/packs/goodies.dm b/modular_zubbers/code/modules/cargo/packs/goodies.dm index 8c1b509dd2629..f9cd2b8b7043e 100644 --- a/modular_zubbers/code/modules/cargo/packs/goodies.dm +++ b/modular_zubbers/code/modules/cargo/packs/goodies.dm @@ -74,3 +74,9 @@ /datum/supply_pack/goody/thermal_single special = FALSE + +/datum/supply_pack/goody/medkit_surgery + name = "High Capacity Surgical Medkit" + desc = "A high capacity aid kit, full of medical supplies and basic surgical equipment." + cost = PAYCHECK_CREW * 15 + contains = list(/obj/item/storage/medkit/surgery) diff --git a/modular_zubbers/code/modules/cargo/packs/security.dm b/modular_zubbers/code/modules/cargo/packs/security.dm index c532fa4a2f07c..5cf635186cfea 100644 --- a/modular_zubbers/code/modules/cargo/packs/security.dm +++ b/modular_zubbers/code/modules/cargo/packs/security.dm @@ -42,7 +42,7 @@ crate_name = "security medic crate" desc = "Contains a medical technician kit." access = ACCESS_SECURITY - cost = CARGO_CRATE_VALUE * 5.5 + cost = CARGO_CRATE_VALUE * 7.125 contains = list( /obj/item/storage/backpack/duffelbag/deforest_paramedic/stocked, ) @@ -52,7 +52,7 @@ crate_name = "security medic crate" desc = "Contains a first responder surgical kit." access = ACCESS_SECURITY - cost = CARGO_CRATE_VALUE * 5 + cost = CARGO_CRATE_VALUE * 3.9 contains = list( /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked, ) @@ -62,7 +62,7 @@ crate_name = "security medic crate" desc = "Contains a large satchel medical kit." access = ACCESS_SECURITY - cost = CARGO_CRATE_VALUE * 4.5 + cost = CARGO_CRATE_VALUE * 7.125 contains = list( /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked, ) diff --git a/modular_zubbers/code/modules/changeling_zombies/infection.dm b/modular_zubbers/code/modules/changeling_zombies/infection.dm index a129f86748c08..b89c78182b125 100644 --- a/modular_zubbers/code/modules/changeling_zombies/infection.dm +++ b/modular_zubbers/code/modules/changeling_zombies/infection.dm @@ -84,7 +84,7 @@ GLOBAL_VAR_INIT(changeling_zombies_detected,FALSE) if(parent) var/mob/living/carbon/human/host = parent if(zombified) - playsound(parent, 'sound/magic/demon_consume.ogg', 50, TRUE) + playsound(parent, 'sound/effects/magic/demon_consume.ogg', 50, TRUE) REMOVE_TRAITS_IN(host,TRAIT_CHANGELING_ZOMBIE) host.mind?.remove_antag_datum(/datum/antagonist/changeling_zombie) @@ -224,7 +224,7 @@ GLOBAL_VAR_INIT(changeling_zombies_detected,FALSE) host.revive(ADMIN_HEAL_ALL) host.do_jitter_animation(10 SECONDS) - playsound(host, 'sound/hallucinations/far_noise.ogg', 50, TRUE) + playsound(host, 'sound/effects/hallucinations/far_noise.ogg', 50, TRUE) host.drop_all_held_items() diff --git a/modular_zubbers/code/modules/changeling_zombies/items.dm b/modular_zubbers/code/modules/changeling_zombies/items.dm index b980e3186b728..8005a80228259 100644 --- a/modular_zubbers/code/modules/changeling_zombies/items.dm +++ b/modular_zubbers/code/modules/changeling_zombies/items.dm @@ -10,13 +10,13 @@ var/blood_chance = 100 var/static/list/attack_living_sounds = list( - 'sound/hallucinations/growl1.ogg', - 'sound/hallucinations/growl2.ogg', - 'sound/hallucinations/growl3.ogg' + 'sound/effects/hallucinations/growl1.ogg', + 'sound/effects/hallucinations/growl2.ogg', + 'sound/effects/hallucinations/growl3.ogg' ) var/static/list/attack_inanimate_sounds = list( - 'sound/hallucinations/wail.ogg', + 'sound/effects/hallucinations/wail.ogg', ) COOLDOWN_DECLARE(sound_cooldown) diff --git a/modular_zubbers/code/modules/client/preferences/preferences.dm b/modular_zubbers/code/modules/client/preferences/preferences.dm deleted file mode 100644 index b7f314c557f0c..0000000000000 --- a/modular_zubbers/code/modules/client/preferences/preferences.dm +++ /dev/null @@ -1,4 +0,0 @@ -// 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_zubbers/code/modules/clothing/accessory/accessory.dm b/modular_zubbers/code/modules/clothing/accessory/accessory.dm index 1a205f8ddf77c..f201c3a1cfe77 100644 --- a/modular_zubbers/code/modules/clothing/accessory/accessory.dm +++ b/modular_zubbers/code/modules/clothing/accessory/accessory.dm @@ -36,3 +36,22 @@ worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi' icon_state = "technician" inhand_icon_state = "technician" + +/obj/item/clothing/accessory/fake/medal + name = "plastic medal" + desc = "Yeah nice try buddy. They won't record this one. Especially since it reads 'youre winnar!!'. Alt-Click to reskin!" + unique_reskin = list( + "Bronze" = "bronze", + "Bronze Heart" = "bronze_heart", + "Silver" = "silver", + "Gold" = "gold", + "Plasma" = "plasma", + "Cargo" = "cargo", + "Paperwork" = "medal_paperwork", + "Medical Second Class" = "med_medal", + "Medical First Class" = "med_medal2", + "Atmosian" = "elderatmosian", + "Emergency Service - General" = "emergencyservices", + "Emergency Service - Engineering" = "emergencyservices_engi", + "Emergency Service - Medical" = "emergencyservices_med" + ) diff --git a/modular_zubbers/code/modules/clothing/mask/clown.dm b/modular_zubbers/code/modules/clothing/mask/clown.dm index 50ae7d8e37d6d..e337cb897316d 100644 --- a/modular_zubbers/code/modules/clothing/mask/clown.dm +++ b/modular_zubbers/code/modules/clothing/mask/clown.dm @@ -33,7 +33,7 @@ voice_filter = null // performer masks expect to be talked through -/obj/item/clothing/mask/gas/sechailer/half_mask +/obj/item/clothing/mask/gas/half_mask name = "tacticool neck gaiter" desc = "A black techwear mask. Its low-profile design contrasts with the edge. Has a small respirator to be used with internals." actions_types = list(/datum/action/item_action/adjust) @@ -44,3 +44,11 @@ unique_death = 'modular_skyrat/master_files/sound/effects/hacked.ogg' voice_filter = null use_radio_beeps_tts = FALSE + flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDESNOUT + w_class = WEIGHT_CLASS_SMALL + visor_flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDESNOUT + flags_cover = MASKCOVERSMOUTH + visor_flags_cover = MASKCOVERSMOUTH + +/obj/item/clothing/mask/gas/half_mask/ui_action_click(mob/user, action) + adjust_visor(user) diff --git a/modular_zubbers/code/modules/clothing/shoes/boots.dm b/modular_zubbers/code/modules/clothing/shoes/boots.dm index 6472d0e4eb902..cc40e8045231b 100644 --- a/modular_zubbers/code/modules/clothing/shoes/boots.dm +++ b/modular_zubbers/code/modules/clothing/shoes/boots.dm @@ -20,7 +20,7 @@ armor_type = /datum/armor/shoes_combat lace_time = 12 SECONDS - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/items/weapons/bladeslice.ogg' strip_delay = 2 SECONDS force = 10 throwforce = 15 diff --git a/modular_zubbers/code/modules/clothing/suits/misc.dm b/modular_zubbers/code/modules/clothing/suits/misc.dm index da11e74ff8e3e..bea22ec8a51ee 100644 --- a/modular_zubbers/code/modules/clothing/suits/misc.dm +++ b/modular_zubbers/code/modules/clothing/suits/misc.dm @@ -9,4 +9,26 @@ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON body_parts_covered = CHEST|GROIN +/obj/item/clothing/suit/misc/suit_harness + name = "suit harness" + desc = "A near-concealed harness meant for going over uniforms. Or lack thereof." + icon = 'modular_zubbers/icons/obj/clothing/suits.dmi' + icon_state = "suit_harness" + worn_icon = 'modular_zubbers/icons/mob/clothing/suits.dmi' + worn_icon_state = "suit_harness" + inhand_icon_state = null + body_parts_covered = 0x0 + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + attachment_slot_override = CHEST + //Allowed is same as jackets. + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/radio, + /obj/item/storage/belt/holster, + ) diff --git a/modular_zubbers/code/modules/clothing/under/_under.dm b/modular_zubbers/code/modules/clothing/under/_under.dm index ecd7c14c40fb6..dce47ed22f202 100644 --- a/modular_zubbers/code/modules/clothing/under/_under.dm +++ b/modular_zubbers/code/modules/clothing/under/_under.dm @@ -1,33 +1,18 @@ -/mob/living/carbon/human/update_sensor_list() - var/obj/item/clothing/under/U = w_uniform - if(istype(U) && U.has_sensor != NO_SENSORS && U.sensor_mode) - GLOB.suit_sensors_list |= src - else - GLOB.suit_sensors_list -= src - /obj/item/clothing/under/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) return if(has_sensor == NO_SENSORS || has_sensor == BROKEN_SENSORS) return - if(severity <= EMP_HEAVY) //Believe it or not, EMP_HEAVY < EMP_LIGHT - has_sensor = BROKEN_SENSORS - sensor_mode = SENSOR_LIVING - if(ismob(loc)) - var/mob/M = loc - to_chat(M,span_danger("The sensors on [src] short out!")) + if(severity <= EMP_HEAVY) + break_sensors() + else sensor_mode = clamp(sensor_mode + pick(-1,1), SENSOR_OFF, SENSOR_COORDS) if(ismob(loc)) - var/mob/M = loc - to_chat(M,span_warning("The sensors on [src] change rapidly!")) + var/mob/wearing_mob = loc + to_chat(wearing_mob, span_warning("The sensors on the [src] change rapidly!")) - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.w_uniform == src) - H.update_suit_sensors() \ No newline at end of file + update_wearer_status() diff --git a/modular_zubbers/code/modules/clothing/under/misc.dm b/modular_zubbers/code/modules/clothing/under/misc.dm index 03d8d74a8ab4a..4488eafb48637 100644 --- a/modular_zubbers/code/modules/clothing/under/misc.dm +++ b/modular_zubbers/code/modules/clothing/under/misc.dm @@ -24,11 +24,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/costume/playbunny/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/syndicate/syndibunny //heh name = "blood-red bunny suit" desc = "The staple of any bunny themed syndicate assassins. Are those carbon nanotube stockings?" @@ -38,11 +33,6 @@ icon_state = "syndibunny" body_parts_covered = CHEST|GROIN|LEGS -/obj/item/clothing/under/syndicate/syndibunny/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/small) - /obj/item/clothing/under/syndicate/syndibunny/fake armor_type = /datum/armor/clothing_under/none @@ -111,11 +101,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/captain/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - //CARGO /obj/item/clothing/under/rank/cargo/quartermaster_bunnysuit @@ -128,11 +113,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/cargo/quartermaster_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/cargo/cargo_bunnysuit name = "cargo bunny suit" desc = "The staple of any bunny themed cargo technicians. Nigh indistinguishable from the quartermasters bunny suit." @@ -143,11 +123,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/cargo/cargo_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/cargo/miner/bunnysuit name = "shaft miner's bunny suit" desc = "The staple of any bunny themed shaft miners. The perfect outfit for fighting demons on an ash choked hell planet." @@ -158,11 +133,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/cargo/miner/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/cargo/mailman_bunnysuit name = "mailman's bunny suit" desc = "The staple of any bunny themed mailmen. A sleek mailman outfit for when you need to deliver mail as quickly and with as little wind resistance possible." @@ -173,11 +143,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/cargo/mailman_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/cargo/bitrunner/bunnysuit name = "bunrunner suit" desc = "The staple of any bunny themed gamer. Has enough space for one extra soda, if you're worthy." @@ -188,9 +153,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/cargo/bitrunner/bunnysuit/Initialize(mapload) - . = ..() - //ENGI /obj/item/clothing/under/rank/engineering/engineer_bunnysuit @@ -203,11 +165,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/engineering/engineer_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/engineering/atmos_tech_bunnysuit name = "atmospheric technician's bunny suit" desc = "The staple of any bunny themed atmospheric technicians. Perfect for any blue collar worker wanting to keep up with fashion trends." @@ -218,11 +175,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/engineering/atmos_tech_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/engineering/chief_engineer/bunnysuit name = "chief engineer's bunny suit" desc = "The staple of any bunny themed chief engineers. The airy design helps with keeping cool when engine fires get too hot to handle." @@ -233,11 +185,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/engineering/chief_engineer/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - //MEDICAL /obj/item/clothing/under/rank/medical/doctor_bunnysuit @@ -249,11 +196,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/medical/doctor_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/medical/paramedic_bunnysuit desc = "The staple of any bunny themed paramedics. Comes with spare pockets for medical supplies fastened to the leggings." name = "paramedic's bunnysuit" @@ -263,11 +205,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/medical/paramedic_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/medical/chemist/bunnysuit desc = "The staple of any bunny themed chemists. The stockings are both airy and acid resistant." name = "chemist's bunnysuit" @@ -277,11 +214,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/medical/chemist/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/medical/pathologist_bunnysuit desc = "The staple of any bunny themed pathologists. The stockings, while cute, do nothing to combat pathogens." name = "pathologist's bunnysuit" @@ -291,11 +223,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/medical/pathologist_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/medical/coroner_bunnysuit desc = "The staple of any bunny themed coroners. A rejected mime costume." name = "coroner's bunnysuit" @@ -305,11 +232,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/medical/coroner_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/medical/cmo_bunnysuit desc = "The staple of any bunny themed chief medical officers. The more vibrant blue accents denote a higher status." name = "chief medical officer's bunnysuit" @@ -319,11 +241,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/medical/cmo_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - //SCIENCE /obj/item/clothing/under/rank/rnd/scientist/bunnysuit @@ -335,11 +252,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/rnd/scientist/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/rnd/scientist/roboticist_bunnysuit desc = "The staple of any bunny themed roboticists. The open design and thin leggings help to keep cool when piloting mechs." name = "roboticist's bunnysuit" @@ -349,11 +261,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/rnd/scientist/roboticist_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/rnd/geneticist/bunnysuit desc = "The staple of any bunny themed geneticists. Doesn’t go great with an abominable green muscled physique, but then again, what does?" name = "geneticist's bunnysuit" @@ -363,11 +270,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/rnd/geneticist/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/rnd/research_director/bunnysuit desc = "The staple of any bunny themed head researchers. Advanced technology allows this suit to stimulate spontaneous bunny tail growth when worn, though it's nigh-indistinguishable from the standard cottonball and disappears as soon as the suit is removed." name = "research director's bunnysuit" @@ -378,11 +280,6 @@ can_adjust = TRUE alt_covers_chest = TRUE -/obj/item/clothing/under/rank/rnd/research_director/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - //SECURITY /obj/item/clothing/under/rank/security/security_bunnysuit @@ -394,10 +291,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/security/security_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/security/security_assistant_bunnysuit desc = "The staple of any bunny themed security assistants. Can't lost respect you don't have!" @@ -408,10 +301,7 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/security/security_assistant_bunnysuit/Initialize(mapload) - . = ..() - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/security/warden_bunnysuit desc = "The staple of any bunny themed wardens. The more formal security bunny suit for a less combat focused job." @@ -422,10 +312,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/security/warden_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/security/brig_phys_bunnysuit desc = "The staple of any bunny themed brig physicians. The rejected alternative to an already discontinued alternate uniform, now sold at a premium!" @@ -436,10 +322,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/security/brig_phys_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/security/detective_bunnysuit desc = "The staple of any bunny themed detectives. Capable of storing precious candy corns." @@ -450,10 +332,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/security/detective_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/security/detective_bunnysuit/noir desc = "The staple of any noir bunny themed detectives. Capable of storing precious candy corns." @@ -464,10 +342,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/security/detective_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/security/prisoner_bunnysuit desc = "The staple of any bunny themed prisoners. Great for hiding shanks and other small contrabands." @@ -478,10 +352,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/security/prisoner_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/security/head_of_security/bunnysuit desc = "The staple of any bunny themed security commanders. Includes kevlar weave stockings and a gilded tail." @@ -492,11 +362,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/security/head_of_security/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - //SERVICE /obj/item/clothing/under/rank/civilian/hop_bunnysuit @@ -509,11 +374,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/hop_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/janitor/bunnysuit name = "janitor's bunny suit" desc = "The staple of any bunny themed janitors. The stockings are made of cotton to allow for easy laundering." @@ -524,11 +384,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/janitor/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/bartender_bunnysuit name = "bartender's bunnysuit" desc = "The staple of any bunny themed bartenders. Looks even more stylish than the standard bunny suit." @@ -540,11 +395,6 @@ alt_covers_chest = TRUE custom_price = PAYCHECK_CREW -/obj/item/clothing/under/rank/civilian/bartender_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/cook_bunnysuit name = "cook's bunny suit" desc = "The staple of any bunny themed chefs. Shame there aren't any fishnets." @@ -555,11 +405,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/cook_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/hydroponics/bunnysuit name = "botanist's bunny suit" desc = "The staple of any bunny themed botanists. The stockings are made of faux-denim to mimic the look of overalls." @@ -570,11 +415,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/hydroponics/bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/clown/clown_bunnysuit name = "clown's bunny suit" desc = "The staple of any bunny themed clowns. Now this is just ridiculous." @@ -585,11 +425,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/clown/clown_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/mime_bunnysuit name = "mime's bunny suit" desc = "The staple of any bunny themed mimes. Includes black and white stockings in order to comply with mime federation outfit regulations." @@ -600,10 +435,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/mime_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/civilian/chaplain_bunnysuit name = "chaplain's bunny suit" @@ -615,11 +446,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/chaplain_bunnysuit/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/curator_bunnysuit_red name = "curator's red bunny suit" desc = "The staple of any bunny themed librarians. A professional yet comfortable suit perfect for the aspiring bunny academic." @@ -630,11 +456,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/curator_bunnysuit_red/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/curator_bunnysuit_green name = "curator's green bunny suit" desc = "The staple of any bunny themed librarians. A professional yet comfortable suit perfect for the aspiring bunny academic." @@ -645,11 +466,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/curator_bunnysuit_green/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/curator_bunnysuit_teal name = "curator's teal bunny suit" desc = "The staple of any bunny themed librarians. A professional yet comfortable suit perfect for the aspiring bunny academic." @@ -660,10 +476,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/curator_bunnysuit_teal/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/civilian/lawyer_bunnysuit_black name = "lawyer's black bunny suit" @@ -675,10 +487,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/lawyer_bunnysuit_black/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) /obj/item/clothing/under/rank/civilian/lawyer_bunnysuit_blue name = "lawyer's blue bunny suit" @@ -690,11 +498,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/lawyer_bunnysuit_blue/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/lawyer_bunnysuit_red name = "lawyer's red bunny suit" desc = "The staple of any bunny themed lawyers. EXTREMELY professional." @@ -705,11 +508,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/lawyer_bunnysuit_red/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/lawyer_bunnysuit_good name = "good lawyer's bunny suit" desc = "The staple of any bunny themed lawyers. EXTREMELY professional." @@ -720,11 +518,6 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/lawyer_bunnysuit_good/Initialize(mapload) - . = ..() - - create_storage(storage_type = /datum/storage/pockets/tiny) - /obj/item/clothing/under/rank/civilian/psychologist_bunnysuit name = "psychologist's bunny suit" desc = "The staple of any bunny themed psychologists. Perhaps not the best choice for making your patients feel at home." @@ -735,9 +528,33 @@ body_parts_covered = CHEST|GROIN|LEGS alt_covers_chest = TRUE -/obj/item/clothing/under/rank/civilian/psychologist_bunnysuit/Initialize(mapload) - . = ..() +//BUNNY STUFF END, SPRITES BY DimWhat OF MONKE STATION + +/obj/item/clothing/under/costume/loincloth + name = "loincloth" + desc = "A simple leather covering. It's better than wearing nothing at least." + icon = 'modular_zubbers/icons/obj/clothing/under/costume.dmi' + worn_icon = 'modular_zubbers/icons/mob/clothing/under/costume.dmi' + icon_state = "loincloth" + body_parts_covered = GROIN + can_adjust = FALSE + has_sensor = NO_SENSORS - create_storage(storage_type = /datum/storage/pockets/tiny) +/obj/item/clothing/under/costume/loincloth/sensor + has_sensor = HAS_SENSORS -//BUNNY STUFF END, SPRITES BY DimWhat OF MONKE STATION +/obj/item/clothing/under/costume/loincloth/cloth + desc = "A simple cloth covering. It's better than wearing nothing at least." + icon_state = "loincloth_cloth" + +/obj/item/clothing/under/costume/loincloth/cloth/sensor + has_sensor = HAS_SENSORS + +/obj/item/clothing/under/costume/lizardgas + name = "lizard gas uniform" + desc = "A purple shirt with a nametag, and some ill-fitting jeans. The bare minimum required by company standards." + icon = 'modular_zubbers/icons/obj/clothing/under/costume.dmi' + worn_icon = 'modular_zubbers/icons/mob/clothing/under/costume.dmi' + icon_state = "lizardgas" + body_parts_covered = CHEST|GROIN|LEGS + has_sensor = NO_SENSORS //you're not NT employed, so they don't care about you diff --git a/modular_zubbers/code/modules/clothing/under/skirts_dresses.dm b/modular_zubbers/code/modules/clothing/under/skirts_dresses.dm index 0e63275811404..5853bd2defbbf 100644 --- a/modular_zubbers/code/modules/clothing/under/skirts_dresses.dm +++ b/modular_zubbers/code/modules/clothing/under/skirts_dresses.dm @@ -7,3 +7,16 @@ desc = "A richly made dress of quality fabrics, but not much of them." icon_state = "dress_strapped" body_parts_covered = CHEST|GROIN|LEGS + +/obj/item/clothing/under/dress/miniskirt + name = "miniskirt" + desc = "This skirt is quite small, even by skirt standards." + icon_state = "miniskirt" + greyscale_colors = "#39393f#ffffff#ffffff" + greyscale_config = /datum/greyscale_config/miniskirt + greyscale_config_worn = /datum/greyscale_config/miniskirt_worn + flags_1 = IS_PLAYER_COLORABLE_1 + alt_covers_chest = TRUE + female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + gets_cropped_on_taurs = FALSE + can_adjust = TRUE diff --git a/modular_zubbers/code/modules/customization/species/synths/death_sound.dm b/modular_zubbers/code/modules/customization/species/synths/death_sound.dm index 65bd00136dc9d..6c2834ff23553 100644 --- a/modular_zubbers/code/modules/customization/species/synths/death_sound.dm +++ b/modular_zubbers/code/modules/customization/species/synths/death_sound.dm @@ -1,2 +1,2 @@ /datum/species/synthetic - death_sound = 'sound/voice/borg_deathsound.ogg' + death_sound = 'sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg' diff --git a/modular_zubbers/code/modules/customization/sprite_accessories/ears.dm b/modular_zubbers/code/modules/customization/sprite_accessories/ears.dm index a42ed3c290ad2..7b5be05d0093c 100644 --- a/modular_zubbers/code/modules/customization/sprite_accessories/ears.dm +++ b/modular_zubbers/code/modules/customization/sprite_accessories/ears.dm @@ -2,3 +2,8 @@ name = "Shadekin" icon_state = "shadekin" icon = 'modular_zubbers/icons/customization/ears.dmi' + +/datum/sprite_accessory/ears/renamon + name = "Renamon" + icon_state = "renamon" + icon = 'modular_zubbers/icons/customization/ears.dmi' diff --git a/modular_zubbers/code/modules/customization/sprite_accessories/snouts.dm b/modular_zubbers/code/modules/customization/sprite_accessories/snouts.dm index c907eb220b148..949023edad25c 100644 --- a/modular_zubbers/code/modules/customization/sprite_accessories/snouts.dm +++ b/modular_zubbers/code/modules/customization/sprite_accessories/snouts.dm @@ -2,3 +2,14 @@ name = "Skulldog ALT" icon = 'modular_zubbers/icons/customization/snouts.dmi' icon_state = "skulldogalt" + +/datum/sprite_accessory/snouts/mammal/cervine + name = "Cervine" + icon = 'modular_zubbers/icons/customization/snouts.dmi' + icon_state = "cervine" + + +/datum/sprite_accessory/snouts/mammal/cat + name = "Cat" + icon = 'modular_zubbers/icons/customization/snouts.dmi' + icon_state = "catsnout" diff --git a/modular_zubbers/code/modules/debug_tools/debug_abilites/noclip.dm b/modular_zubbers/code/modules/debug_tools/debug_abilites/noclip.dm index a2db701073ae0..cc08e2ac31de7 100644 --- a/modular_zubbers/code/modules/debug_tools/debug_abilites/noclip.dm +++ b/modular_zubbers/code/modules/debug_tools/debug_abilites/noclip.dm @@ -12,7 +12,7 @@ if(owner.stat & DEAD) return - if(owner.incapacitated(IGNORE_GRAB)) + if(INCAPACITATED_IGNORING(owner, INCAPABLE_GRAB)) return /datum/action/cooldown/noclip/Activate(atom/target) diff --git a/modular_zubbers/code/modules/debug_tools/physgun.dm b/modular_zubbers/code/modules/debug_tools/physgun.dm index 6d1ecfe7775d3..3cad81526994c 100644 --- a/modular_zubbers/code/modules/debug_tools/physgun.dm +++ b/modular_zubbers/code/modules/debug_tools/physgun.dm @@ -17,7 +17,7 @@ throwforce = 0 throw_speed = 1 throw_range = 1 - drop_sound = 'sound/items/handling/screwdriver_drop.ogg' + drop_sound = 'sound/items/handling/tools/screwdriver_drop.ogg' pickup_sound = 'modular_zubbers/sound/phystools/physgun_pickup.ogg' //The dragged object. diff --git a/modular_zubbers/code/modules/debug_tools/phystool.dm b/modular_zubbers/code/modules/debug_tools/phystool.dm index 55867ccd6afe8..5a0ec8e2dbaca 100644 --- a/modular_zubbers/code/modules/debug_tools/phystool.dm +++ b/modular_zubbers/code/modules/debug_tools/phystool.dm @@ -13,7 +13,7 @@ throwforce = 0 throw_speed = 1 throw_range = 1 - drop_sound = 'sound/items/handling/screwdriver_drop.ogg' + drop_sound = 'sound/items/handling/tools/screwdriver_drop.ogg' pickup_sound = 'modular_zubbers/sound/phystools/toolgun_select.ogg' resistance_flags = INDESTRUCTIBLE diff --git a/modular_zubbers/code/modules/emotes/emotes.dm b/modular_zubbers/code/modules/emotes/emotes.dm index df951740b1d4e..ebb59fa13cd8a 100644 --- a/modular_zubbers/code/modules/emotes/emotes.dm +++ b/modular_zubbers/code/modules/emotes/emotes.dm @@ -71,7 +71,7 @@ message = "snaps their fingers." message_param = "snaps their fingers at %t." emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE - sound = 'sound/misc/fingersnap1.ogg' + sound = 'sound/mobs/humanoids/human/snap/fingersnap1.ogg' /datum/emote/living/meow_alt key = "meow1" @@ -95,4 +95,61 @@ message = "rapidly flutters their wings!" emote_type = EMOTE_AUDIBLE vary = TRUE - sound = 'sound/voice/moth/moth_flutter.ogg' + sound = 'sound/mobs/humanoids/moth/moth_flutter.ogg' + +/datum/emote/living/sigh_exasperated + key = "esigh" // short for exasperated sigh + key_third_person = "esighs" + message = "lets out an exasperated sigh." + emote_type = EMOTE_AUDIBLE + +/datum/emote/living/sigh_exasperated/get_sound(mob/living/user) + if(iscarbon(user)) + if(user.gender == MALE) + return 'modular_zubbers/code/modules/emotes/sound/voice/male_sigh_exasperated.ogg' + return 'modular_zubbers/code/modules/emotes/sound/voice/female_sigh_exasperated.ogg' + return + +/datum/emote/living/tail_thump + key = "tailthump" + key_third_person = "thumps their tail!" + message = "thumps their tail!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_zubbers/code/modules/emotes/sound/voice/tailthump.ogg' // See https://github.com/shiptest-ss13/Shiptest/pull/2159 + +/datum/emote/living/tail_thump/can_run_emote(mob/user, status_check, intentional, params) + var/obj/item/organ/external/tail/tail = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(isnull(tail)) + return FALSE + return ..() + + +/datum/emote/living/squeal + key = "squeal" + key_third_person = "squeals!" + message = "squeals!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_zubbers/code/modules/emotes/sound/voice/squeal.ogg' // See https://github.com/shiptest-ss13/Shiptest/pull/2159 + +/datum/emote/living/yipyip + key = "yipyip" + key_third_person = "yips twice" + message = "yips twice!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + sound = 'modular_zubbers/code/modules/emotes/sound/voice/yip.ogg' + +/datum/emote/living/yip + key = "yip" + key_third_person = "yips" + message = "yips!" + emote_type = EMOTE_AUDIBLE + vary = TRUE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) + +/datum/emote/living/yip/get_sound(mob/living/user) + return pick('modular_zubbers/code/modules/emotes/sound/voice/yip1.ogg', + 'modular_zubbers/code/modules/emotes/sound/voice/yip2.ogg', + 'modular_zubbers/code/modules/emotes/sound/voice/yip2.ogg') diff --git a/modular_zubbers/code/modules/emotes/sound/voice/female_sigh_exasperated.ogg b/modular_zubbers/code/modules/emotes/sound/voice/female_sigh_exasperated.ogg new file mode 100644 index 0000000000000..30fedee2bb5fc Binary files /dev/null and b/modular_zubbers/code/modules/emotes/sound/voice/female_sigh_exasperated.ogg differ diff --git a/modular_zubbers/code/modules/emotes/sound/voice/male_sigh_exasperated.ogg b/modular_zubbers/code/modules/emotes/sound/voice/male_sigh_exasperated.ogg new file mode 100644 index 0000000000000..46efcfa4179e5 Binary files /dev/null and b/modular_zubbers/code/modules/emotes/sound/voice/male_sigh_exasperated.ogg differ diff --git a/modular_zubbers/code/modules/emotes/sound/voice/squeal.ogg b/modular_zubbers/code/modules/emotes/sound/voice/squeal.ogg new file mode 100644 index 0000000000000..f4624376e2b77 Binary files /dev/null and b/modular_zubbers/code/modules/emotes/sound/voice/squeal.ogg differ diff --git a/modular_zubbers/code/modules/emotes/sound/voice/tailthump.ogg b/modular_zubbers/code/modules/emotes/sound/voice/tailthump.ogg new file mode 100644 index 0000000000000..e4bf25f7b8d1e Binary files /dev/null and b/modular_zubbers/code/modules/emotes/sound/voice/tailthump.ogg differ diff --git a/modular_zubbers/code/modules/emotes/sound/voice/yip.ogg b/modular_zubbers/code/modules/emotes/sound/voice/yip.ogg new file mode 100644 index 0000000000000..dd11b0157f1bf Binary files /dev/null and b/modular_zubbers/code/modules/emotes/sound/voice/yip.ogg differ diff --git a/modular_skyrat/modules/clock_cult/sound/ocularwarden-dot1.ogg b/modular_zubbers/code/modules/emotes/sound/voice/yip1.ogg similarity index 52% rename from modular_skyrat/modules/clock_cult/sound/ocularwarden-dot1.ogg rename to modular_zubbers/code/modules/emotes/sound/voice/yip1.ogg index fc2836ff1f41f..9f54efe3ebded 100644 Binary files a/modular_skyrat/modules/clock_cult/sound/ocularwarden-dot1.ogg and b/modular_zubbers/code/modules/emotes/sound/voice/yip1.ogg differ diff --git a/modular_zubbers/code/modules/emotes/sound/voice/yip2.ogg b/modular_zubbers/code/modules/emotes/sound/voice/yip2.ogg new file mode 100644 index 0000000000000..acd24ae256e32 Binary files /dev/null and b/modular_zubbers/code/modules/emotes/sound/voice/yip2.ogg differ diff --git a/modular_zubbers/code/modules/emotes/sound/voice/yip3.ogg b/modular_zubbers/code/modules/emotes/sound/voice/yip3.ogg new file mode 100644 index 0000000000000..36bc9ec00f2e0 Binary files /dev/null and b/modular_zubbers/code/modules/emotes/sound/voice/yip3.ogg differ diff --git a/modular_zubbers/code/modules/events/ev_roleplay_check.dm b/modular_zubbers/code/modules/events/ev_roleplay_check.dm new file mode 100644 index 0000000000000..f7ef1389d5ffc --- /dev/null +++ b/modular_zubbers/code/modules/events/ev_roleplay_check.dm @@ -0,0 +1,28 @@ +/// list of dorms areas for doing event checks +GLOBAL_LIST_EMPTY(dorms_areas) + +/area/station/commons/dorms/New() + . = ..() + GLOB.dorms_areas += src + +/datum/weather/proc/enhanced_roleplay_filter(list/affectareas) + return affectareas + +/datum/weather/rad_storm/enhanced_roleplay_filter(list/affectareas) + var/list/filtered_areas = affectareas + for(var/area/engaged_roleplay_area as anything in GLOB.dorms_areas) + for(var/mob/living/carbon/human/roleplayer in engaged_roleplay_area.contents) + if(engaged_role_play_check(player = roleplayer, station = FALSE, dorms = TRUE)) + LAZYREMOVE(filtered_areas, engaged_roleplay_area) + break + return filtered_areas + +/datum/weather/rad_storm/send_alert(alert_msg, alert_sfx) + for(var/area/impacted_area as anything in impacted_areas) + for(var/mob/living/player in impacted_area.contents) + if(!can_get_alert(player)) + continue + if(alert_msg) + to_chat(player, alert_msg) + if(alert_sfx) + SEND_SOUND(player, sound(alert_sfx)) diff --git a/modular_zubbers/code/modules/events/meteor_wave.dm b/modular_zubbers/code/modules/events/meteor_wave.dm new file mode 100644 index 0000000000000..c5e64763849fa --- /dev/null +++ b/modular_zubbers/code/modules/events/meteor_wave.dm @@ -0,0 +1,298 @@ +GLOBAL_LIST_INIT(meteors_candy_halloween, list( + /obj/effect/meteor/candy/party_popper = 6, + /obj/effect/meteor/candy/pumpkin = 16, + /obj/effect/meteor/candy/pumpking = 6, + /obj/effect/meteor/candy/corgi = 6, + /obj/effect/meteor/candy/syndie = 1, + /obj/effect/meteor/candy/bluespace = 2, + /obj/effect/meteor/candy/banana = 2, +)) + +/datum/round_event/meteor_wave + /// Time we give before the wave for cargo to order / engineering to set up meteor shields + var/warning_time = 30 EVENT_SECONDS + /// Number of SSevent ticks for the wave to last (TG original: 60) + var/wave_duration = 45 + /// Prefix for the announcement + var/announce_prefix = "Meteor Alert" + /// Description for the announcement + var/announce_desc = "Meteors" + /// Added to the announcement giving a preview of the wave intensity + var/announce_fluff = "Crew are advised to take shelter within the central areas of the station." + +/datum/round_event/meteor_wave/threatening + warning_time = 420 EVENT_SECONDS // smoke a joint and start your mindless repairs + announce_fluff = "Portable shield generators may be procured by the cargo department. Ensure all sensitive areas and equipment are shielded." + +/datum/round_event/meteor_wave/catastrophic + warning_time = 420 EVENT_SECONDS + announce_fluff = "Portable shield generators may be procured by the cargo department. Ensure all sensitive areas and equipment are shielded." + +/datum/round_event/meteor_wave/dust_storm + warning_time = 6 EVENT_SECONDS + +/datum/round_event/meteor_wave/meaty + announce_prefix = "Oh crap, get the mop." + announce_desc = "Meaty ores" + announce_fluff = "Please refrain from eating the space meat. We know it's tempting, but this is not the time to test your culinary curiosity." + +/datum/round_event/meteor_wave/candy + wave_name = "candy" + announce_prefix = "2SPOOKY DELIVERY INCOMING" + announce_desc = "Spooky packages" + announce_fluff = "We're not responsible for what happens if you try to stick fragments in your mouth. Why do we even have to tell you that?" + +/datum/round_event/meteor_wave/New() + . = ..() + start_when = rand(warning_time, warning_time * 1.5) + end_when = start_when + rand(wave_duration, wave_duration * 1.5) + +/datum/round_event/meteor_wave/determine_wave_type() + if(!wave_name) + wave_name = pick_weight(list( + "normal" = 50, + "threatening" = 40, + "catastrophic" = 10)) + + if(check_holidays(HALLOWEEN)) + if(prob(50)) + wave_name = "candy" + wave_type = GLOB.meteors_candy_halloween + warning_time = /datum/round_event/meteor_wave/candy::warning_time + announce_prefix = /datum/round_event/meteor_wave/candy::announce_prefix + announce_desc = /datum/round_event/meteor_wave/candy::announce_desc + announce_fluff = /datum/round_event/meteor_wave/candy::announce_fluff + return + + switch(wave_name) + if("normal") + wave_type = GLOB.meteors_normal + if("threatening") + wave_type = GLOB.meteors_threatening + if("catastrophic") + if(check_holidays(HALLOWEEN)) + wave_type = GLOB.meteorsSPOOKY + else + wave_type = GLOB.meteors_catastrophic + if("meaty") + wave_type = GLOB.meateors + if("space dust") + wave_type = GLOB.meteors_dust + if("halloween") + wave_type = GLOB.meteorsSPOOKY + if("candy") + wave_type = GLOB.meteors_candy_halloween + else + stack_trace("Wave name of [wave_name] not recognised.") + kill() + +/datum/round_event/meteor_wave/announce(fake) + priority_announce( + text = "[announce_desc] have been detected on collision course with the station. The energy field generator is disabled or missing. First collision in approximately [DisplayTimeText(start_when * 20, 10)]. [announce_fluff]", + title = announce_prefix, + sound = ANNOUNCER_METEORWARNING, + ) + + if(fake) + return + + if(warning_time > 180 EVENT_SECONDS) + addtimer(CALLBACK(src, PROC_REF(meteor_reminder)), ((start_when * 20) - 15 SECONDS)) + +/datum/round_event/meteor_wave/proc/meteor_reminder() + event_minimum_security_level(min_level = SEC_LEVEL_ORANGE, eng_access = TRUE, maint_access = FALSE) + priority_announce( + text = "[announce_desc] approaching, brace for impact. Long range scanners indicate a high density of meteors incoming, the kind of impact that makes you rethink your life choices. So, hold on tight and try not to fly into anything too important.", + title = announce_prefix, + sound = 'sound/items/radio/radio_important.ogg', // basically silent, since the securitylevel proc will make a sound + sender_override = "[command_name()] Engineering Division", + color_override = "orange", + ) + +/datum/round_event_control/meteor_wave/candy + name = "Meteor Wave: Candy" + typepath = /datum/round_event/meteor_wave/candy + weight = 0 + description = "A meteor wave for the holidays, filled with candy." + +/obj/effect/meteor + lifetime = 45 SECONDS + +/obj/effect/meteor/candy + name = "debug candy meteor" + desc = "if you see this, shove a twink bar into your nearest coder" + dropamt = 8 + meteordrop = list( + /obj/item/food/candy/hundred_credit_bar, + /obj/item/food/candy/coconut_joy, + /obj/item/food/candy/hurr_bar, + /obj/item/food/candy/laughter_bar, + /obj/item/food/candy/kit_catgirl_metaclique_bar, + /obj/item/food/candy/twink_bar, + /obj/item/food/candy/malf_way, + /obj/item/food/candy/triggerfinger, + /obj/item/food/sosjerky, + /obj/item/food/syndicake, + /obj/item/food/energybar, + /obj/item/food/cnds/random, + /obj/item/food/cornchips, + /obj/item/food/shok_roks/random, + /obj/item/food/cookie/sugar/spookyskull, + /obj/item/food/cookie/sugar/spookycoffin, + /obj/item/food/candy_corn, + ) + +/obj/effect/meteor/candy/get_hit() + hits-- + if(hits <= 0) + meteor_effect() + candy_effect() + qdel(src) + +/obj/effect/meteor/candy/proc/candy_effect() + var/list/scatter_locations = list() + var/turf/my_turf = get_turf(src) + for(var/turf/turf_in_view in view(2, my_turf)) + if(isclosedturf(turf_in_view)) + continue + + scatter_locations += turf_in_view + + for(var/throws = dropamt, throws > 0, throws--) + var/thing_to_spawn = pick(meteordrop) + var/turf/spawn_loc = pick(scatter_locations) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(make_fluff_debris), thing_to_spawn, spawn_loc), 1 SECONDS); + +/proc/make_fluff_debris(type_to_make, location) + new type_to_make(location) + new /obj/effect/decal/cleanable/confetti(location) + +/obj/effect/meteor/candy/ram_turf(turf/rammed_turf) + if(!isspaceturf(rammed_turf)) + new /obj/effect/decal/cleanable/confetti(rammed_turf) + +/obj/effect/meteor/candy/pumpkin + name = "cat-o-lantern" + desc = "A pumpkin-shaped meteor filled with candy. It's a bit spooky." + icon_state = "spooky" + threat = 5 + +/obj/effect/meteor/candy/pumpkin/meteor_effect() + ..() + explosion(src, heavy_impact_range = 1, light_impact_range = 2, flash_range = 3, adminlog = FALSE) + +/obj/effect/meteor/candy/pumpking + name = "PUMPKING" + desc = "THE PUMPKING'S COMING!" + icon_state = "spooky" + hits = 6 + heavy = TRUE + dropamt = 9 + threat = 10 + +/obj/effect/meteor/candy/pumpking/Initialize() + . = ..() + src.transform *= 2 + meteorsound = pick('sound/effects/hallucinations/im_here1.ogg', 'sound/effects/hallucinations/im_here2.ogg') + +/obj/effect/meteor/candy/pumpking/meteor_effect() + ..() + explosion(src, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 3, flash_range = 4, adminlog = FALSE) + +/obj/effect/meteor/candy/party_popper + name = "party popper" + desc = "A small device used for celebrations and annoying the janitor." + icon = 'icons/obj/toys/toy.dmi' + icon_state = "party_popper" + pass_flags = PASSTABLE | PASSGRILLE + hitpwr = EXPLODE_LIGHT + hits = 3 + threat = 4 + meteorsound = 'sound/effects/snap.ogg' + +/obj/effect/meteor/candy/party_popper/meteor_effect() + ..() + new /obj/item/reagent_containers/spray/chemsprayer/party(get_turf(src)) + +/obj/effect/meteor/candy/corgi + name = "corgi pinata" + desc = "Who thought beating candy out of dogs was a fun activity anyways?" + icon = 'icons/obj/toys/toy.dmi' + icon_state = "pinata" + threat = 5 + +/obj/effect/meteor/candy/corgi/meteor_effect() + ..() + explosion(src, heavy_impact_range = 1, light_impact_range = 2, flash_range = 3, adminlog = FALSE) + +/obj/effect/meteor/candy/syndie + name = "syndie pinata" + desc = "The red ones go faster... Now you know why." + icon = 'icons/obj/toys/toy.dmi' + icon_state = "pinata_syndie" + hits = 12 + heavy = TRUE + threat = 30 + meteordrop = list(/obj/item/reagent_containers/cocaine) + meteorsound = 'sound/effects/bamf.ogg' + var/package_count = 8 + +/obj/effect/meteor/candy/syndie/meteor_effect() + ..() + var/start_turf = get_turf(src) + + while(package_count > 0) + var/startSide = pick(GLOB.cardinals) + var/turf/destination = spaceDebrisStartLoc(startSide, z) + new /obj/effect/meteor/cluster_fragment(start_turf, destination) + package_count-- + + explosion(src, heavy_impact_range = 2, light_impact_range = 3, flash_range = 4, adminlog = FALSE) + +/obj/effect/meteor/cocaine_brick + name = "cocaine brick fragment" + desc = "A fast-moving fragment of exploded... white powder." + icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi' + icon_state = "cocainebrick" + dropamt = 7 + meteordrop = list(/obj/item/reagent_containers/cocaine) + meteorsound = 'sound/effects/bamf.ogg' + +/obj/effect/meteor/candy/bluespace + name = "bluespace chunk" + desc = "A large geode containing bluespace dust at its core, hurtling through space. That's the stuff the crew are here to research. How convenient for them." + icon_state = "bluespace" + dropamt = 9 + hits = 12 + threat = 12 + signature = "bluespace flux" + +/obj/effect/meteor/candy/bluespace/Bump() + ..() + if(prob(35)) + do_teleport(src, get_turf(src), 6, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) + +/obj/effect/meteor/candy/banana + name = "bananium chunk" + desc = "Maybe it's a chunk blasted off of the legendary Clown Planet... How annoying." + icon_state = "bananium" + dropamt = 9 + hits = 175 //Honks everything, including space tiles. Depending on the angle/how much stuff it hits, there's a fair chance that it will spare the station from the actual explosion + meteordrop = list(/obj/item/stack/ore/bananium) + meteorsound = 'sound/items/bikehorn.ogg' + threat = 15 + movement_type = PHASING + signature = "comedy" + +/obj/effect/meteor/candy/banana/meteor_effect() + ..() + playsound(src, 'sound/items/airhorn/AirHorn.ogg', 100, TRUE, -1) + for(var/atom/movable/object in view(4, get_turf(src))) + var/turf/throwtarget = get_edge_target_turf(get_turf(src), get_dir(get_turf(src), get_step_away(object, get_turf(src)))) + object.safe_throw_at(throwtarget, 5, 1, force = MOVE_FORCE_STRONG) + +/obj/effect/meteor/banana/ram_turf(turf/bumped) + for(var/mob/living/slipped in get_turf(bumped)) + slipped.slip(100, slipped.loc,- GALOSHES_DONT_HELP|SLIDE, 0, FALSE) + slipped.visible_message(span_warning("[src] honks [slipped] to the floor!"), span_userdanger("[src] harmlessly passes through you, knocking you over.")) + get_hit() diff --git a/modular_zubbers/code/modules/events/scrubber_overflow.dm b/modular_zubbers/code/modules/events/scrubber_overflow.dm new file mode 100644 index 0000000000000..35fc9459ec4ca --- /dev/null +++ b/modular_zubbers/code/modules/events/scrubber_overflow.dm @@ -0,0 +1,18 @@ +/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)) + var/turf/scrubber_turf = get_turf(temp_vent) + var/area/scrubber_area = get_area(temp_vent) + if(!scrubber_turf) + continue + if(!is_station_level(scrubber_turf.z)) + continue + if(temp_vent.welded) + continue + if(is_type_in_list(scrubber_area, list(/area/station/engineering/supermatter/room, /area/station/engineering/supermatter, /area/station/commons/dorms, /area/station/security/prison/safe, /area/station/security/prison/toilet))) + continue + if(!prob(overflow_probability)) + continue + scrubbers += temp_vent + + if(!scrubbers.len) + return kill() diff --git a/modular_zubbers/code/modules/goofsec/code/department_guards.dm b/modular_zubbers/code/modules/goofsec/code/department_guards.dm new file mode 100644 index 0000000000000..2bad28cf60590 --- /dev/null +++ b/modular_zubbers/code/modules/goofsec/code/department_guards.dm @@ -0,0 +1,13 @@ +/obj/item/storage/bag/garment/orderly/PopulateContents() + generate_items_inside(list( + /obj/item/radio/headset/headset_med = 1, + /obj/item/clothing/shoes/sneakers/white = 1, + /obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/orderly = 1, + /obj/item/clothing/head/helmet/blueshirt/skyrat/guard = 1, + /obj/item/clothing/head/beret/sec/medical = 1, + /obj/item/clothing/suit/armor/vest/blueshirt/skyrat/orderly = 1, + /obj/item/clothing/suit/toggle/labcoat/skyrat/security_medic/blue = 1, + /obj/item/clothing/suit/hazardvest/security_medic/blue = 1, + /obj/item/clothing/under/rank/security/peacekeeper/miniskirt = 1, + /obj/item/clothing/glasses/hud/medsechud = 1, + ), src) diff --git a/modular_zubbers/code/modules/job_interns/job_interns.dm b/modular_zubbers/code/modules/job_interns/job_interns.dm index efea9ed2a4853..b997317a209b6 100644 --- a/modular_zubbers/code/modules/job_interns/job_interns.dm +++ b/modular_zubbers/code/modules/job_interns/job_interns.dm @@ -80,7 +80,7 @@ required_time = get_intern_time_threshold() else if(CONFIG_GET(flag/use_intern_master_job_unlock_threshold) && length(department_head)) // Use first department head job as our master job to compare to - var/datum/job/master_job = SSjob.GetJob(department_head[1]) + var/datum/job/master_job = SSjob.get_job(department_head[1]) playtime = player_client?.calc_exp_type(master_job.get_exp_req_type()) required_time = master_job.get_exp_req_amount() else diff --git a/modular_zubbers/code/modules/languages/vampiric.dm b/modular_zubbers/code/modules/languages/vampiric.dm index bb758c4b442ed..5c0501828e020 100644 --- a/modular_zubbers/code/modules/languages/vampiric.dm +++ b/modular_zubbers/code/modules/languages/vampiric.dm @@ -1,6 +1,6 @@ /datum/language/vampiric - name = "Blah-Sucker" - desc = "The native language of the Bloodsucker elders, learned intuitively by Fledglings as they pass from death into immortality." + name = "Enochian" + desc = "Rumored to be created by the Dark Father, Caine himself as a way to talk to his Childer, the truth, like many things in unlife is uncertain. Spoken by creatures of the night." key = "L"//Capital L, lowercase l is for ashies. space_chance = 40 default_priority = 90 diff --git a/modular_zubbers/code/modules/loadout/categories/accessories.dm b/modular_zubbers/code/modules/loadout/categories/accessories.dm index b9ea3b8693650..a0244e68e0d6b 100644 --- a/modular_zubbers/code/modules/loadout/categories/accessories.dm +++ b/modular_zubbers/code/modules/loadout/categories/accessories.dm @@ -1 +1,4 @@ -// THIS IS WHERE LOADOUT DATUMS GO FOR ACCESSORIES (REMOVE THIS COMMENT AND TICK THIS FILE IF YOU ADD ANYTHING) +/datum/loadout_item/accessory/fake_medal + name = "Fake Medal" + item_path = /obj/item/clothing/accessory/fake/medal + diff --git a/modular_zubbers/code/modules/loadout/categories/heads.dm b/modular_zubbers/code/modules/loadout/categories/heads.dm index 42b80c921c5d5..ba1fb87642279 100644 --- a/modular_zubbers/code/modules/loadout/categories/heads.dm +++ b/modular_zubbers/code/modules/loadout/categories/heads.dm @@ -24,6 +24,16 @@ name = "Warden's Campaign Hat" item_path = /obj/item/clothing/head/hats/warden/drill +/datum/loadout_item/head/hats/warden/police/patrol + name = "police patrol cap" + item_path = /obj/item/clothing/head/hats/warden/police/patrol + restricted_roles = list(JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_HEAD_OF_SECURITY) + +/datum/loadout_item/head/helmet/sec/futuristic + name = "futuristic security helmet" + item_path = /obj/item/clothing/head/helmet/sec/futuristic + restricted_roles = list(JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_HEAD_OF_SECURITY) + /datum/loadout_item/head/hats/caphat/drill name = "Captain's Campaign Hat" item_path = /obj/item/clothing/head/hats/warden/drill/captain diff --git a/modular_zubbers/code/modules/loadout/categories/inhands.dm b/modular_zubbers/code/modules/loadout/categories/inhands.dm index e8509f6168498..621e528a862e5 100644 --- a/modular_zubbers/code/modules/loadout/categories/inhands.dm +++ b/modular_zubbers/code/modules/loadout/categories/inhands.dm @@ -7,3 +7,7 @@ name = "SAC Challenge Coin" item_path = /obj/item/coin/challenge +/datum/loadout_item/inhand/pet/mrfluff_mothroach + name = "Mr. Fluff" + item_path = /obj/item/clothing/head/mob_holder/pet/donator/centralsmith + diff --git a/modular_zubbers/code/modules/loadout/categories/masks.dm b/modular_zubbers/code/modules/loadout/categories/masks.dm index 4367fd1f640e7..fa97e6ab3fd85 100644 --- a/modular_zubbers/code/modules/loadout/categories/masks.dm +++ b/modular_zubbers/code/modules/loadout/categories/masks.dm @@ -1,3 +1,3 @@ /datum/loadout_item/mask/sechailer_half_mask name = "Tacticool Half-Mask" - item_path = /obj/item/clothing/mask/gas/sechailer/half_mask + item_path = /obj/item/clothing/mask/gas/half_mask diff --git a/modular_zubbers/code/modules/loadout/categories/suit.dm b/modular_zubbers/code/modules/loadout/categories/suit.dm index 9e0f3c3f6e533..6b6f9271f6fe4 100644 --- a/modular_zubbers/code/modules/loadout/categories/suit.dm +++ b/modular_zubbers/code/modules/loadout/categories/suit.dm @@ -11,6 +11,10 @@ name = "Henchmen Coat" item_path = /obj/item/clothing/suit/jacket/henchmen_coat +/datum/loadout_item/suit/suit_harness + name = "Suit Harness" + item_path = /obj/item/clothing/suit/misc/suit_harness + //Donator items V V V /datum/loadout_item/suit/runner_engi diff --git a/modular_zubbers/code/modules/loadout/categories/toys.dm b/modular_zubbers/code/modules/loadout/categories/toys.dm index 3858102836873..b49360e0743af 100644 --- a/modular_zubbers/code/modules/loadout/categories/toys.dm +++ b/modular_zubbers/code/modules/loadout/categories/toys.dm @@ -58,3 +58,7 @@ /datum/loadout_item/toys/xenofig name = "Xeno Action Figure" item_path = /obj/item/toy/toy_xeno + +/datum/loadout_item/toys/internshiba + name = "Intern Shiba Plush" + item_path = /obj/item/toy/plush/internshiba diff --git a/modular_zubbers/code/modules/loadout/categories/under.dm b/modular_zubbers/code/modules/loadout/categories/under.dm index 27d2629c93db0..b3be16bf6bec0 100644 --- a/modular_zubbers/code/modules/loadout/categories/under.dm +++ b/modular_zubbers/code/modules/loadout/categories/under.dm @@ -49,3 +49,15 @@ /datum/loadout_item/uniform/miscellaneous/syndicate_skyrat_overalls_unarmoured_skirt name = "Tacticool Utility Skirt and Suspenders" item_path = /obj/item/clothing/under/syndicate/skyrat/overalls/unarmoured/skirt + +/datum/loadout_item/uniform/miscellaneous/loincloth + name = "leather loincloth" + item_path = /obj/item/clothing/under/costume/loincloth/sensor + +/datum/loadout_item/uniform/miscellaneous/loincloth/cloth + name = "loincloth" + item_path = /obj/item/clothing/under/costume/loincloth/cloth/sensor + +/datum/loadout_item/uniform/miscellaneous/miniskirt + name = "recolourable miniskirt" + item_path = /obj/item/clothing/under/dress/miniskirt diff --git a/modular_zubbers/code/modules/lunchbox/code/lunchbox.dm b/modular_zubbers/code/modules/lunchbox/code/lunchbox.dm index 248dea523c488..2b535d6eab93f 100644 --- a/modular_zubbers/code/modules/lunchbox/code/lunchbox.dm +++ b/modular_zubbers/code/modules/lunchbox/code/lunchbox.dm @@ -6,8 +6,8 @@ inhand_icon_state = "lunchbox" lefthand_file = 'modular_zubbers/code/modules/lunchbox/icons/lunchbox_lefthand.dmi' righthand_file = 'modular_zubbers/code/modules/lunchbox/icons/lunchbox_righthand.dmi' - drop_sound = 'sound/items/handling/cardboardbox_drop.ogg' - pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg' + drop_sound = 'sound/items/handling/cardboard_box/cardboardbox_drop.ogg' + pickup_sound = 'sound/items/handling/cardboard_box/cardboardbox_pickup.ogg' throw_speed = 3 throw_range = 7 @@ -59,4 +59,4 @@ name = "suspicious lunchbox" icon_state = "lunchbox_suspicious" inhand_icon_state = "lunchbox_suspicious" - desc = "A plain red lunchbox... right?" \ No newline at end of file + desc = "A plain red lunchbox... right?" diff --git a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories.dm b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories.dm index 7aa13521909f1..2c6d261fe11ed 100644 --- a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -192,3 +192,58 @@ icon = 'modular_zubbers/icons/mob/species/human/humanface.dmi' recommended_species = list(SPECIES_PODPERSON, SPECIES_PODPERSON_WEAK) +/datum/sprite_accessory/socks/warm_thigh + name = "Warm Thigh Highs" + icon_state = "warm_thigh" + use_static = null + icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi' + +/datum/sprite_accessory/socks/warm_ankle + name = "Warm Ankle Socks" + icon_state = "warm_ankle" + use_static = null + icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi' + +/datum/sprite_accessory/socks/warm_short + name = "Warm Short Socks" + icon_state = "warm_short" + use_static = null + icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi' + +/datum/sprite_accessory/socks/recolor_thigh + name = "NonTemp Thigh Highs" + icon_state = "recolor_thigh" + use_static = null + icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi' + +/datum/sprite_accessory/socks/cool_thighs + name = "Cool thigh highs." + icon_state = "cool_thighs" + use_static = null + icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi' + +/datum/sprite_accessory/socks/cool_ankle + name = "Cool Ankle Socks." + icon_state = "cool_ankle" + use_static = null + icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi' + +/datum/sprite_accessory/socks/cool_short + name = "Cool Short Socks." + icon_state = "cool_short" + use_static = null + icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi' + +/datum/sprite_accessory/socks/grey_ankle + name = "Nontemp ankle socks." + icon_state = "grey_ankle" + use_static = null + icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi' + +/datum/sprite_accessory/socks/grey_short + name = "Nontemp short socks." + icon_state = "grey_short" + use_static = null + icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi' + + diff --git a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/frills.dm b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/frills.dm new file mode 100644 index 0000000000000..6ebd707632f0e --- /dev/null +++ b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/frills.dm @@ -0,0 +1,5 @@ +/datum/sprite_accessory/frills/najahood + name = "Naja Hood" + icon_state = "najahood" + icon = 'modular_zubbers/icons/customization/frills.dmi' + color_src = USE_MATRIXED_COLORS diff --git a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/hair.dm b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/hair.dm index 93401802fb3da..b151ffefca839 100644 --- a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/hair.dm +++ b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/hair.dm @@ -23,3 +23,24 @@ name = "Nose Lick" icon = 'modular_zubbers/icons/customization/facial_hair.dmi' icon_state = "noselick" + +/datum/sprite_accessory/hair/twistedlong + icon = 'modular_zubbers/icons/customization/hair.dmi' + name = "Twisted Long" + icon_state = "hair_twistedlong" + +/datum/sprite_accessory/hair/twisted + icon = 'modular_zubbers/icons/customization/hair.dmi' + name = "Twisted" + icon_state = "hair_twisted" + +/datum/sprite_accessory/hair/wicked + icon = 'modular_zubbers/icons/customization/hair.dmi' + name = "Wicked" + icon_state = "hair_wicked" + +//-->Inari sprites ported from Coyote Bayou +/datum/sprite_accessory/hair/inari + icon = 'modular_zubbers/icons/customization/hair.dmi' + name = "Inari" + icon_state = "hair_inari" diff --git a/modular_zubbers/code/modules/mob/living/basic/moonstation/cazador.dm b/modular_zubbers/code/modules/mob/living/basic/moonstation/cazador.dm index be2a17ec64a8b..645c6d5964cf1 100644 --- a/modular_zubbers/code/modules/mob/living/basic/moonstation/cazador.dm +++ b/modular_zubbers/code/modules/mob/living/basic/moonstation/cazador.dm @@ -37,7 +37,7 @@ melee_damage_upper = 15 attack_vis_effect = ATTACK_EFFECT_MECHTOXIN - attack_sound = 'sound/weapons/pierce.ogg' + attack_sound = 'sound/items/weapons/pierce.ogg' attack_verb_continuous = "stings" attack_verb_simple = "sting" diff --git a/modular_zubbers/code/modules/mob/living/basic/moonstation/scorpion.dm b/modular_zubbers/code/modules/mob/living/basic/moonstation/scorpion.dm index 63c0531c88507..372d49cccbbc0 100644 --- a/modular_zubbers/code/modules/mob/living/basic/moonstation/scorpion.dm +++ b/modular_zubbers/code/modules/mob/living/basic/moonstation/scorpion.dm @@ -37,7 +37,7 @@ melee_damage_upper = 20 attack_vis_effect = ATTACK_EFFECT_MECHTOXIN - attack_sound = 'sound/weapons/pierce_slow.ogg' + attack_sound = 'sound/items/weapons/pierce_slow.ogg' attack_verb_continuous = "stings" attack_verb_simple = "sting" diff --git a/modular_zubbers/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm b/modular_zubbers/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm new file mode 100644 index 0000000000000..a5367b86eb219 --- /dev/null +++ b/modular_zubbers/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm @@ -0,0 +1,3 @@ + +/mob/living/basic/space_dragon + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0.5, OXY = 0) diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/species/zombies.dm b/modular_zubbers/code/modules/mob/living/carbon/human/species/zombies.dm new file mode 100644 index 0000000000000..bbc4aeb4ab9d4 --- /dev/null +++ b/modular_zubbers/code/modules/mob/living/carbon/human/species/zombies.dm @@ -0,0 +1,2 @@ +/datum/species/zombie + digitigrade_customization = DIGITIGRADE_OPTIONAL diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/shadekin.dm b/modular_zubbers/code/modules/mob/living/carbon/human/species_types/shadekin.dm index 961e7307d44c6..8a06d29ee9634 100644 --- a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/shadekin.dm +++ b/modular_zubbers/code/modules/mob/living/carbon/human/species_types/shadekin.dm @@ -2,13 +2,11 @@ name = "Shadekin" id = SPECIES_SHADEKIN eyes_icon = 'modular_zubbers/icons/mob/human/human_face.dmi' - say_mod = "mars" mutanttongue = /obj/item/organ/internal/tongue/shadekin mutantears = /obj/item/organ/internal/ears/shadekin mutantbrain = /obj/item/organ/internal/brain/shadekin mutanteyes = /obj/item/organ/internal/eyes/shadekin mutant_bodyparts = list() - mutanteyes = /obj/item/organ/internal/eyes/shadekin 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/shadekin, @@ -31,6 +29,25 @@ ) species_language_holder = /datum/language_holder/shadekin +/datum/species/shadekin/create_pref_unique_perks() + var/list/to_add = list() + + to_add += list(list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "lightbulb", + SPECIES_PERK_NAME = "Dark Regeneration", + SPECIES_PERK_DESC = "Shadekins regenerate their physical wounds while in the darkness." + )) + + to_add += list(list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "crutch", + SPECIES_PERK_NAME = "Light Averse", + SPECIES_PERK_DESC = "Shadekins move slightly slower while in the light." + )) + + return to_add + /datum/species/shadekin/get_default_mutant_bodyparts() return list( "tail" = list("Shadekin", TRUE), @@ -83,7 +100,7 @@ /obj/item/organ/internal/brain/shadekin name = "shadekin brain" - desc = "A mysterious brain" + desc = "A mysterious brain." icon = 'icons/obj/medical/organs/organs.dmi' icon_state = "brain-x-d" var/applied_status = /datum/status_effect/shadekin_regeneration @@ -123,7 +140,7 @@ /atom/movable/screen/alert/status_effect/shadekin_regeneration name = "Dark Regeneration" - desc = "Feeling the tug of home on your fur, some of its soothing warmth comes to ease your burdens" + desc = "Feeling the tug of home on your fur, some of its soothing warmth comes to ease your burdens." icon_state = "lightless" /datum/movespeed_modifier/light_averse diff --git a/modular_zubbers/code/modules/mob/living/emote.dm b/modular_zubbers/code/modules/mob/living/emote.dm new file mode 100644 index 0000000000000..c67c431401d14 --- /dev/null +++ b/modular_zubbers/code/modules/mob/living/emote.dm @@ -0,0 +1,31 @@ +#define KISS_COOLDOWN (0.4 SECONDS) + +/mob/living + COOLDOWN_DECLARE(restricted_emote_cooldown) + +/datum/emote/living/kiss/run_emote(mob/living/user, params, type_override, intentional) + . = ..() + if(!COOLDOWN_FINISHED(user, restricted_emote_cooldown)) + user.balloon_alert(user, "kiss on cooldown!") + return + + var/kiss_type = /obj/item/hand_item/kisser + var/kiss_cooldown = KISS_COOLDOWN + + if(HAS_TRAIT(user, TRAIT_SYNDIE_KISS)) + kiss_type = /obj/item/hand_item/kisser/syndie + kiss_cooldown = KISS_COOLDOWN * 4 + + if(HAS_TRAIT(user, TRAIT_KISS_OF_DEATH)) + kiss_type = /obj/item/hand_item/kisser/death + kiss_cooldown = KISS_COOLDOWN * 4 + + var/obj/item/kiss_blower = new kiss_type(user) + if(user.put_in_hands(kiss_blower)) + user.balloon_alert(user, "kiss ready!") + COOLDOWN_START(user, restricted_emote_cooldown, kiss_cooldown) + else + qdel(kiss_blower) + to_chat(user, span_warning("You're incapable of blowing a kiss in your current state.")) + +#undef KISS_COOLDOWN diff --git a/modular_zubbers/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/modular_zubbers/code/modules/mob_spawn/ghost_roles/mining_roles.dm new file mode 100644 index 0000000000000..9415ae912764e --- /dev/null +++ b/modular_zubbers/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -0,0 +1,22 @@ +/obj/effect/mob_spawn/ghost_role/human/lavaland_gasstation + name = "Lavaland Gas Station Attendant" + desc = "Seems like there's somebody inside, peacefully sleeping." + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper" + prompt_name = "a gas station worker" + you_are_text = "You are a worker at a Lizard's Gas Station close to a mining facility." + flavour_text = "Your employer, however, failed to realize that there are hostile megafauna and tribes in the area, so make sure that you can defend yourself. Also sell stuff to people, occasionally." + important_text = "Do NOT let your workplace get damaged! Do not abandon it either!" + quirks_enabled = TRUE + random_appearance = FALSE + loadout_enabled = FALSE + outfit = /datum/outfit/lavaland_gasstation + +/datum/outfit/lavaland_gasstation + name = "Lizard Gas Station Attendant" + uniform = /obj/item/clothing/under/costume/lizardgas + shoes = /obj/item/clothing/shoes/sneakers/black + ears = /obj/item/instrument/piano_synth/headphones + gloves = /obj/item/clothing/gloves/fingerless + head = /obj/item/clothing/head/soft/purple + l_pocket = /obj/item/modular_computer/pda diff --git a/modular_zubbers/code/modules/modular_computers/programs/siliconmanagement.dm b/modular_zubbers/code/modules/modular_computers/programs/siliconmanagement.dm new file mode 100644 index 0000000000000..0147b9e926744 --- /dev/null +++ b/modular_zubbers/code/modules/modular_computers/programs/siliconmanagement.dm @@ -0,0 +1,56 @@ +/datum/computer_file/program/silicon_management + filename = "Silicon Manager" + filedesc = "Silicon Manager" + downloader_category = PROGRAM_CATEGORY_EQUIPMENT + program_open_overlay = "id" + extended_desc = "Program for viewing and changing Silicon priority." + download_access = list(ACCESS_ROBOTICS) + program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET + size = 4 + tgui_id = "SiliconJobManager" + program_icon = "address-book" + +/datum/computer_file/program/silicon_management/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + var/obj/item/card/id/user_id = computer.computer_id_slot + if(!user_id || !(ACCESS_ROBOTICS in user_id.access)) + return TRUE + + if(action) + var/priority_target = params["target"] + var/datum/job/silicon = SSjob.get_job(priority_target) + if(silicon in SSjob.prioritized_jobs) + SSjob.prioritized_jobs -= silicon + else + SSjob.prioritized_jobs += silicon + playsound(computer, 'sound/machines/terminal/terminal_prompt_confirm.ogg', 50, FALSE) + return TRUE + +/datum/computer_file/program/silicon_management/ui_data(mob/user) + var/list/data = list() + + var/authed = FALSE + var/obj/item/card/id/user_id = computer.computer_id_slot + if(user_id && (ACCESS_ROBOTICS in user_id.access)) + authed = TRUE + + var/list/silicon_jobs = list( + SSjob.get_job(JOB_AI), + SSjob.get_job(JOB_CYBORG) + ) + data["authed"] = authed + + var/list/pos = list() + var/list/priority = list() + for(var/datum/job/job as anything in silicon_jobs) + if(job in SSjob.prioritized_jobs) + priority += job.title + + pos += list(list( + "title" = job.title, + "current" = job.current_positions, + "total" = job.total_positions, + )) + data["slots"] = pos + data["prioritized"] = priority + return data diff --git a/modular_zubbers/code/modules/movespeed/modifiers/status_effects.dm b/modular_zubbers/code/modules/movespeed/modifiers/status_effects.dm index 97c8affe5ae29..17128e8b8949d 100644 --- a/modular_zubbers/code/modules/movespeed/modifiers/status_effects.dm +++ b/modular_zubbers/code/modules/movespeed/modifiers/status_effects.dm @@ -2,3 +2,7 @@ /datum/movespeed_modifier/frenzy_speedup blacklisted_movetypes = (FLYING|FLOATING) multiplicative_slowdown = -0.4 + +/datum/movespeed_modifier/mesmerize_slowdown + blacklisted_movetypes = (FLYING|FLOATING) + multiplicative_slowdown = 0.5 diff --git a/modular_zubbers/code/modules/power/powerator.dm b/modular_zubbers/code/modules/power/powerator.dm index 164a18fe955d8..78069aa4e7c1d 100644 --- a/modular_zubbers/code/modules/power/powerator.dm +++ b/modular_zubbers/code/modules/power/powerator.dm @@ -1,16 +1,25 @@ /obj/item/circuitboard/machine/powerator/interdyne - name = "Ancient Powerator" + name = "Interdyne Powerator" greyscale_colors = CIRCUIT_COLOR_SUPPLY build_path = /obj/machinery/powerator/interdyne /obj/machinery/powerator/interdyne - name = "ancient powerator" + name = "Interdyne powerator" desc = "Beyond the ridiculous name, it is the standard for transporting and selling energy to power networks that require additional sources! It appears to be an earlier variant before environmental regulation reduced its efficiency." circuit = /obj/item/circuitboard/machine/powerator/interdyne /// the account credits will be sent towards credits_account = ACCOUNT_INT -/obj/machinery/powerator/interdyne/RefreshParts() - . = ..() - divide_ratio *= 2 //Make it easier for the folks down at Interdyne to make some CASH MONEY +/obj/item/circuitboard/machine/powerator/tarkon + name = "Tarkon Powerator" + greyscale_colors = CIRCUIT_COLOR_SUPPLY + build_path = /obj/machinery/powerator/tarkon + +/obj/machinery/powerator/tarkon + name = "Tarkon powerator" + desc = "Beyond the ridiculous name, it is the standard for transporting and selling energy to power networks that require additional sources! It appears to be an earlier variant before environmental regulation reduced its efficiency." + circuit = /obj/item/circuitboard/machine/powerator/tarkon + + /// the account credits will be sent towards + credits_account = ACCOUNT_TAR diff --git a/modular_zubbers/code/modules/quirks/code/negative_quirks/numb_override.dm b/modular_zubbers/code/modules/quirks/code/negative_quirks/numb_override.dm new file mode 100644 index 0000000000000..e0d87e3d63154 --- /dev/null +++ b/modular_zubbers/code/modules/quirks/code/negative_quirks/numb_override.dm @@ -0,0 +1,2 @@ +/datum/quirk/numb + mob_trait = TRAIT_ANALGESIA diff --git a/modular_zubbers/code/modules/quirks/code/negative_quirks/sol_weakness.dm b/modular_zubbers/code/modules/quirks/code/negative_quirks/sol_weakness.dm index 342ebd1f557d5..5eb4055f92336 100644 --- a/modular_zubbers/code/modules/quirks/code/negative_quirks/sol_weakness.dm +++ b/modular_zubbers/code/modules/quirks/code/negative_quirks/sol_weakness.dm @@ -84,7 +84,7 @@ to_chat(quirk_holder, text) COOLDOWN_START(src, sun_burn, 30 SECONDS) -/datum/quirk/sol_weakness/proc/sun_warning(atom/source, danger_level, vampire_warning_message, vassal_warning_message) +/datum/quirk/sol_weakness/proc/sun_warning(atom/source, danger_level, vampire_warning_message, ghoul_warning_message) SIGNAL_HANDLER if(danger_level == DANGER_LEVEL_SOL_ROSE) vampire_warning_message = span_userdanger("Solar flares bombard the station with deadly UV light! Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk death!") diff --git a/modular_zubbers/code/modules/quirks/code/negative_quirks/well_trained.dm b/modular_zubbers/code/modules/quirks/code/negative_quirks/well_trained.dm index cacf60cee91b2..8d771e16001c8 100644 --- a/modular_zubbers/code/modules/quirks/code/negative_quirks/well_trained.dm +++ b/modular_zubbers/code/modules/quirks/code/negative_quirks/well_trained.dm @@ -31,7 +31,7 @@ examine_list += span_purple("You can't look at [dom] for long for long before flustering away") if(TIMER_COOLDOWN_FINISHED(dom, DOMINANT_COOLDOWN_EXAMINE)) - to_chat(dom, span_purple("[source] tries to look at you but immedietly looks away with a red face...")) + to_chat(dom, span_purple("[source] tries to look at you but immediately looks away with a red face...")) TIMER_COOLDOWN_START(dom, DOMINANT_COOLDOWN_EXAMINE, 15 SECONDS) INVOKE_ASYNC(quirk_holder, TYPE_PROC_REF(/mob, emote), "blush") // Needs to be aynsc because of the cooldown. quirk_holder.dir = turn(get_dir(quirk_holder, dom), pick(-90, 90)) diff --git a/modular_zubbers/code/modules/quote_of_the_round/ticker.dm b/modular_zubbers/code/modules/quote_of_the_round/ticker.dm index 8b0710399fdd3..1ca377cc8a408 100644 --- a/modular_zubbers/code/modules/quote_of_the_round/ticker.dm +++ b/modular_zubbers/code/modules/quote_of_the_round/ticker.dm @@ -33,6 +33,6 @@ . = ..() /datum/controller/subsystem/ticker/proc/generate_quote_of_the_round() - return "A shift on [SSmapping.config.map_name] has ended.\n\ + return "A shift on [SSmapping.current_map.map_name] has ended.\n\ [pick(strings("quote_of_the_round.json", "workers"))] [pick(strings("quote_of_the_round.json", "action"))] [pick(strings("quote_of_the_round.json", "message"))] that occured during said shift:\n\ > *[quote_of_the_round_text]*\n \\- *[quote_of_the_round_attribution]*" diff --git a/modular_zubbers/code/modules/research/designs/mechfab_designs.dm b/modular_zubbers/code/modules/research/designs/mechfab_designs.dm index 7749b30d343c1..df41517f96ce1 100644 --- a/modular_zubbers/code/modules/research/designs/mechfab_designs.dm +++ b/modular_zubbers/code/modules/research/designs/mechfab_designs.dm @@ -96,3 +96,15 @@ category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_RESEARCH ) + +//Some new toys +/datum/design/experi_scanner/bluespace_borg + name = "Cyborg Bluespace Experimental Scanner" + desc = "A version of the experiment scanner that allows for performing experiment scans from a distance." + id = "bs_experi_scanner_cyborg" + build_type = MECHFAB + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT*2.5) + build_path = /obj/item/borg/upgrade/experi_scanner + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_RESEARCH + ) diff --git a/modular_zubbers/code/modules/research/techweb/all_nodes.dm b/modular_zubbers/code/modules/research/techweb/all_nodes.dm index d194a042d8214..3ebbcb73ded79 100644 --- a/modular_zubbers/code/modules/research/techweb/all_nodes.dm +++ b/modular_zubbers/code/modules/research/techweb/all_nodes.dm @@ -15,6 +15,7 @@ . = ..() design_ids += list( "bs_experi_scanner", + "bs_experi_scanner_cyborg", ) /datum/techweb_node/ai_laws/New() diff --git a/modular_zubbers/code/modules/security/secmed/icons/secmed_equipment.dmi b/modular_zubbers/code/modules/security/secmed/icons/secmed_equipment.dmi index 91c915e5fd658..e1725fd86eabe 100644 Binary files a/modular_zubbers/code/modules/security/secmed/icons/secmed_equipment.dmi and b/modular_zubbers/code/modules/security/secmed/icons/secmed_equipment.dmi differ diff --git a/modular_zubbers/code/modules/security/secmed/security_medic.dm b/modular_zubbers/code/modules/security/secmed/security_medic.dm index 5a1c64580d07e..6921aef25d3c6 100644 --- a/modular_zubbers/code/modules/security/secmed/security_medic.dm +++ b/modular_zubbers/code/modules/security/secmed/security_medic.dm @@ -10,7 +10,7 @@ minimal_player_age = 7 exp_requirements = 120 exp_required_type = EXP_TYPE_CREW - exp_required_type_department = EXP_TYPE_SECURITY + exp_required_type_department = EXP_TYPE_MEDICAL exp_granted_type = EXP_TYPE_CREW config_tag = "SECURITY_MEDIC" @@ -52,7 +52,7 @@ uniform = /obj/item/clothing/under/rank/security/peacekeeper/security_medic gloves = /obj/item/clothing/gloves/latex/nitrile shoes = /obj/item/clothing/shoes/jackboots/sec - glasses = /obj/item/clothing/glasses/hud/secmed + glasses = /obj/item/clothing/glasses/hud/medsechud suit = /obj/item/clothing/suit/armor/vest/peacekeeper/security_medic l_hand = /obj/item/storage/medkit/brute head = /obj/item/clothing/head/beret/sec/peacekeeper/security_medic @@ -92,20 +92,23 @@ . = ..() AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) -/obj/item/clothing/glasses/hud/secmed - name = "security-medical HUD" - desc = "The choice for security medics all across the sector, provides advanced medical and simplified security readings." - icon = 'modular_zubbers/code/modules/security/secmed/icons/secmed_equipment.dmi' - icon_state = "hud" - worn_icon_state = "healthhud" - clothing_traits = list(TRAIT_MEDICAL_HUD, TRAIT_BASIC_SECURITY_HUD) +/obj/item/clothing/glasses/hud/medsechud + icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi' + worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' + icon_state = "security_hud" + inhand_icon_state = "trayson-t-ray" + glass_colour_type = /datum/client_colour/glass_colour/blue -/obj/item/clothing/glasses/hud/secmed/sunglasses - name = "security-medical HUD sunglasses" +/obj/item/clothing/glasses/hud/medsechud/sunglasses + name = "health scanner security HUD sunglasses" + icon = 'modular_zubbers/code/modules/security/secmed/icons/secmed_equipment.dmi' + worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi' icon_state = "hud_protected" - worn_icon_state = "sunhudsec" - flash_protect = FLASH_PROTECTION_SENSITIVE + worn_icon_state = "security_hud_black" + inhand_icon_state = "sunhudmed" + flash_protect = FLASH_PROTECTION_FLASH flags_cover = GLASSESCOVERSEYES + tint = 1 /obj/item/storage/bag/garment/secmed name = "Security medic's garment bag" @@ -132,9 +135,18 @@ /obj/structure/closet/secure_closet/security_medic/PopulateContents() ..() new /obj/item/radio/headset/headset_medsec(src) - new /obj/item/clothing/glasses/hud/secmed/sunglasses(src) + new /obj/item/clothing/glasses/hud/medsechud/sunglasses(src) new /obj/item/storage/medkit/emergency(src) new /obj/item/clothing/suit/jacket/straight_jacket(src) new /obj/item/storage/belt/medical(src) new /obj/item/storage/belt/security/medic/full(src) new /obj/item/storage/bag/garment/secmed(src) + +//Prevents secmed hours from counting towards HoS +/datum/controller/subsystem/job/setup_occupations() + . = ..() + var/list/sec_exp_list = experience_jobs_map[EXP_TYPE_SECURITY] + for(var/datum/job/job_type in sec_exp_list) + if(istype(job_type, /datum/job/security_medic)) + LAZYREMOVE(sec_exp_list, job_type) + break diff --git a/modular_zubbers/code/modules/shelves/shelf.dm b/modular_zubbers/code/modules/shelves/shelf.dm index 0244846d71297..9ed55cb615b39 100644 --- a/modular_zubbers/code/modules/shelves/shelf.dm +++ b/modular_zubbers/code/modules/shelves/shelf.dm @@ -33,7 +33,9 @@ return /obj/structure/cargo_shelf/Destroy() - QDEL_LIST(shelf_contents) + for(var/obj/structure/closet/crate/crate in shelf_contents) + crate.forceMove(loc) + shelf_contents = null return ..() /obj/structure/cargo_shelf/examine(mob/user) @@ -146,7 +148,7 @@ var/mob/living/user = usr // if(!isliving(user)) // return // Ghosts busted. -// if(!isturf(user.loc) || user.incapacitated() || user.body_position == LYING_DOWN) +// if(!isturf(user.loc) || user.incapacitated || user.body_position == LYING_DOWN) // return // If the user is in a weird state, don't bother trying. if(istype(drop_atom, /turf/open) && istype(loc, /obj/structure/cargo_shelf) && user.Adjacent(drop_atom)) var/obj/structure/cargo_shelf/shelf = loc diff --git a/modular_zubbers/code/modules/shuttle/emergency.dm b/modular_zubbers/code/modules/shuttle/emergency.dm index 4caebfd52a562..1305b17d84022 100644 --- a/modular_zubbers/code/modules/shuttle/emergency.dm +++ b/modular_zubbers/code/modules/shuttle/emergency.dm @@ -1,4 +1,6 @@ /obj/docking_port/mobile/emergency/check() . = ..() if(mode == SHUTTLE_CALL && !SSshuttle.canRecall()) - SSmapping.mapvote() //Do a map vote if we're at the point of no return. + var/datum/vote/current_vote = SSvote.current_vote + if(!istype(current_vote, /datum/vote/map_vote)) + INVOKE_ASYNC(SSvote, TYPE_PROC_REF(/datum/controller/subsystem/vote, initiate_vote), /datum/vote/map_vote, vote_initiator_name = "Map Rotation", forced = TRUE) //Do a map vote if we're at the point of no return. diff --git a/modular_zubbers/code/modules/borgs/code/robot.dm b/modular_zubbers/code/modules/silicons/borgs/code/robot.dm similarity index 91% rename from modular_zubbers/code/modules/borgs/code/robot.dm rename to modular_zubbers/code/modules/silicons/borgs/code/robot.dm index 1d3af7d824cd2..909c014ab2912 100644 --- a/modular_zubbers/code/modules/borgs/code/robot.dm +++ b/modular_zubbers/code/modules/silicons/borgs/code/robot.dm @@ -12,6 +12,6 @@ return ..() /mob/living/silicon/robot/mob_try_pickup(mob/living/user, instant=FALSE) - if(stat == DEAD || status_flags & GODMODE) + if(stat == DEAD || HAS_TRAIT(src, TRAIT_GODMODE)) return return ..() diff --git a/modular_zubbers/code/modules/borgs/code/robot_defense.dm b/modular_zubbers/code/modules/silicons/borgs/code/robot_defense.dm similarity index 100% rename from modular_zubbers/code/modules/borgs/code/robot_defense.dm rename to modular_zubbers/code/modules/silicons/borgs/code/robot_defense.dm diff --git a/modular_zubbers/code/modules/borgs/code/robot_defines.dm b/modular_zubbers/code/modules/silicons/borgs/code/robot_defines.dm similarity index 63% rename from modular_zubbers/code/modules/borgs/code/robot_defines.dm rename to modular_zubbers/code/modules/silicons/borgs/code/robot_defines.dm index 1186d5a6ad844..bfab346144acb 100644 --- a/modular_zubbers/code/modules/borgs/code/robot_defines.dm +++ b/modular_zubbers/code/modules/silicons/borgs/code/robot_defines.dm @@ -1,81 +1,81 @@ // Bubberstation custom borg sprites, add new defines in line with code\__DEFINES\~skyrat_defines\robot_defines.dm format -#define CYBORG_ICON_CENTCOM_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_cc.dmi' -#define CYBORG_ICON_CENTCOM_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_cc.dmi' - -#define CYBORG_ICON_CLOWN_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_clown.dmi' -#define CYBORG_ICON_CLOWN_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_clown.dmi' - -#define CYBORG_ICON_MED_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_med.dmi' -#define CYBORG_ICON_MED_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_med.dmi' -#define CYBORG_ICON_MED_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_med.dmi' -#define CYBORG_ICON_MED_HAYDEE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/curverobot_med.dmi' - -#define CYBORG_ICON_CARGO_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_cargo.dmi' -#define CYBORG_ICON_CARGO_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_cargo.dmi' -#define CYBORG_ICON_CARGO_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_cargo.dmi' - -#define CYBORG_ICON_SEC_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_sec.dmi' -#define CYBORG_ICON_SEC_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_sec.dmi' -#define CYBORG_ICON_SEC_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_sec.dmi' - -#define CYBORG_ICON_ENG_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_eng.dmi' -#define CYBORG_ICON_ENG_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_eng.dmi' -#define CYBORG_ICON_ENG_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_eng.dmi' -#define CYBORG_ICON_ENG_HAYDEE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/curverobot_eng.dmi' - -#define CYBORG_ICON_PEACEKEEPER_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_pk.dmi' -#define CYBORG_ICON_PEACEKEEPER_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_pk.dmi' -#define CYBORG_ICON_PEACEKEEPER_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_pk.dmi' -#define CYBORG_ICON_PEACEKEEPER_HAYDEE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/curverobot_pk.dmi' - -#define CYBORG_ICON_SERVICE_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_serv.dmi' -#define CYBORG_ICON_SERVICE_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_serv.dmi' -#define CYBORG_ICON_SERVICE_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_serv.dmi' -#define CYBORG_ICON_SERVICE_HAYDEE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/curverobot_serv.dmi' -#define CYBORG_ICON_SERVICE_BUNDEE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/curverobot_bun.dmi' - -#define CYBORG_ICON_MINING_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_mine.dmi' -#define CYBORG_ICON_MINING_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_mine.dmi' -#define CYBORG_ICON_MINING_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_mine.dmi' -#define CYBORG_ICON_MINING_HAYDEE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/curverobot_mine.dmi' - -#define CYBORG_ICON_JANI_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_jani.dmi' -#define CYBORG_ICON_JANI_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_jani.dmi' -#define CYBORG_ICON_JANI_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_jani.dmi' -#define CYBORG_ICON_JANI_HAYDEE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/curverobot_jani.dmi' - -#define CYBORG_ICON_SYNDIE_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_syndie.dmi' -#define CYBORG_ICON_SYNDIE_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_syndie.dmi' -#define CYBORG_ICON_SYNDIE_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_syndie.dmi' -#define CYBORG_ICON_SYNDIE_HAYDEE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/curverobot_syndie.dmi' - -#define CYBORG_ICON_NINJA_WIDE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/widerobot_ninja.dmi' -#define CYBORG_ICON_NINJA_TALL_BUBBER 'modular_zubbers/code/modules/borgs/sprites/tallrobot_ninja.dmi' -#define CYBORG_ICON_NINJA_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_ninja.dmi' +#define CYBORG_ICON_CENTCOM_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_cc.dmi' +#define CYBORG_ICON_CENTCOM_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_cc.dmi' + +#define CYBORG_ICON_CLOWN_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_clown.dmi' +#define CYBORG_ICON_CLOWN_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_clown.dmi' + +#define CYBORG_ICON_MED_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_med.dmi' +#define CYBORG_ICON_MED_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_med.dmi' +#define CYBORG_ICON_MED_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_med.dmi' +#define CYBORG_ICON_MED_HAYDEE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_med.dmi' + +#define CYBORG_ICON_CARGO_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_cargo.dmi' +#define CYBORG_ICON_CARGO_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_cargo.dmi' +#define CYBORG_ICON_CARGO_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_cargo.dmi' + +#define CYBORG_ICON_SEC_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_sec.dmi' +#define CYBORG_ICON_SEC_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_sec.dmi' +#define CYBORG_ICON_SEC_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_sec.dmi' + +#define CYBORG_ICON_ENG_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_eng.dmi' +#define CYBORG_ICON_ENG_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_eng.dmi' +#define CYBORG_ICON_ENG_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_eng.dmi' +#define CYBORG_ICON_ENG_HAYDEE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_eng.dmi' + +#define CYBORG_ICON_PEACEKEEPER_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_pk.dmi' +#define CYBORG_ICON_PEACEKEEPER_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_pk.dmi' +#define CYBORG_ICON_PEACEKEEPER_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_pk.dmi' +#define CYBORG_ICON_PEACEKEEPER_HAYDEE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_pk.dmi' + +#define CYBORG_ICON_SERVICE_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_serv.dmi' +#define CYBORG_ICON_SERVICE_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_serv.dmi' +#define CYBORG_ICON_SERVICE_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_serv.dmi' +#define CYBORG_ICON_SERVICE_HAYDEE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_serv.dmi' +#define CYBORG_ICON_SERVICE_BUNDEE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_bun.dmi' + +#define CYBORG_ICON_MINING_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_mine.dmi' +#define CYBORG_ICON_MINING_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_mine.dmi' +#define CYBORG_ICON_MINING_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_mine.dmi' +#define CYBORG_ICON_MINING_HAYDEE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_mine.dmi' + +#define CYBORG_ICON_JANI_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_jani.dmi' +#define CYBORG_ICON_JANI_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_jani.dmi' +#define CYBORG_ICON_JANI_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_jani.dmi' +#define CYBORG_ICON_JANI_HAYDEE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_jani.dmi' + +#define CYBORG_ICON_SYNDIE_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_syndie.dmi' +#define CYBORG_ICON_SYNDIE_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_syndie.dmi' +#define CYBORG_ICON_SYNDIE_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_syndie.dmi' +#define CYBORG_ICON_SYNDIE_HAYDEE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_syndie.dmi' + +#define CYBORG_ICON_NINJA_WIDE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_ninja.dmi' +#define CYBORG_ICON_NINJA_TALL_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_ninja.dmi' +#define CYBORG_ICON_NINJA_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_ninja.dmi' #define CYBORG_ICON_TYPE_RAPTOR "raptor" -#define CYBORG_ICON_SCI_WIDE 'modular_zubbers/code/modules/borgs/sprites/widerobot_sci.dmi' -#define CYBORG_ICON_SCI_TALL 'modular_zubbers/code/modules/borgs/sprites/tallrobot_sci.dmi' -#define CYBORG_ICON_SCI_LARGE_BUBBER 'modular_zubbers/code/modules/borgs/sprites/largerobot_sci.dmi' -#define CYBORG_ICON_SCI 'modular_zubbers/code/modules/borgs/sprites/robot_sci.dmi' +#define CYBORG_ICON_SCI_WIDE 'modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_sci.dmi' +#define CYBORG_ICON_SCI_TALL 'modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_sci.dmi' +#define CYBORG_ICON_SCI_LARGE_BUBBER 'modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_sci.dmi' +#define CYBORG_ICON_SCI 'modular_zubbers/code/modules/silicons/borgs/sprites/robot_sci.dmi' #define CYBORG_ICON_TYPE_SMOLRAPTOR "smolraptor" -#define CYBORG_ICON_GEN_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_gen.dmi' -#define CYBORG_ICON_SCI_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_sci.dmi' -#define CYBORG_ICON_ENG_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_eng.dmi' -#define CYBORG_ICON_MED_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_med.dmi' -#define CYBORG_ICON_CAR_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_car.dmi' -#define CYBORG_ICON_SERV_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_serv.dmi' -#define CYBORG_ICON_PK_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_pk.dmi' -#define CYBORG_ICON_JANI_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_jani.dmi' -#define CYBORG_ICON_MIN_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_min.dmi' -#define CYBORG_ICON_CC_SMOLRAPTOR 'modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_cc.dmi' +#define CYBORG_ICON_GEN_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_gen.dmi' +#define CYBORG_ICON_SCI_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_sci.dmi' +#define CYBORG_ICON_ENG_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_eng.dmi' +#define CYBORG_ICON_MED_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_med.dmi' +#define CYBORG_ICON_CAR_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_car.dmi' +#define CYBORG_ICON_SERV_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_serv.dmi' +#define CYBORG_ICON_PK_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_pk.dmi' +#define CYBORG_ICON_JANI_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_jani.dmi' +#define CYBORG_ICON_MIN_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_min.dmi' +#define CYBORG_ICON_CC_SMOLRAPTOR 'modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_cc.dmi' //F3-LINE cyborgs -#define CYBORG_ICON_ALL_CATBORG 'modular_zubbers/code/modules/borgs/sprites/felibot_all.dmi' +#define CYBORG_ICON_ALL_CATBORG 'modular_zubbers/code/modules/silicons/borgs/sprites/felibot_all.dmi' #define CYBORG_ICON_TYPE_GEN_CATBORG "FELI-Standard" #define CYBORG_ICON_TYPE_SCI_CATBORG "FELI-Research" diff --git a/modular_zubbers/code/modules/borgs/code/robot_items.dm b/modular_zubbers/code/modules/silicons/borgs/code/robot_items.dm similarity index 89% rename from modular_zubbers/code/modules/borgs/code/robot_items.dm rename to modular_zubbers/code/modules/silicons/borgs/code/robot_items.dm index 278df44d16760..c14475d3448b2 100644 --- a/modular_zubbers/code/modules/borgs/code/robot_items.dm +++ b/modular_zubbers/code/modules/silicons/borgs/code/robot_items.dm @@ -106,7 +106,8 @@ icon = 'icons/obj/tools.dmi' icon_state = "inducer-sci" -//illegal teleporter module +//Illegal experimental Dash module + /obj/item/experimental_dash name = "Exerimental Dash" desc = "An experimental module that allows for dashing." @@ -127,15 +128,18 @@ spark_system.set_up(5, 0, src) spark_system.attach(src) -/obj/item/experimental_dash/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + +/obj/item/experimental_dash/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) - return + return ITEM_INTERACT_SUCCESS if(cyborg.cell.charge <= charge_cost)//Prevents usage when charge is low user.balloon_alert(user, "Low charge!") - return - if(!target.density && jaunt?.teleport(user, target)) + return ITEM_INTERACT_SUCCESS + if(!interacting_with.density && jaunt?.teleport(user, interacting_with)) cyborg?.cell?.use(charge_cost) + return ITEM_INTERACT_SUCCESS + return NONE /obj/item/experimental_dash/equipped(mob/user, slot, initial) . = ..() @@ -159,7 +163,7 @@ max_charges = 1 charge_rate = 15 SECONDS beam_length = 1 SECONDS - recharge_sound = null + recharge_sound = 'sound/machines/ding.ogg' beam_effect = "plasmabeam" /datum/action/innate/dash/research/GiveAction(mob/viewer) //this action should be invisible @@ -171,3 +175,14 @@ //No more ghetto /obj/item/screwdriver/cyborg/power sharpness = NONE + +//Research cyborg omnitool + +/obj/item/borg/cyborg_omnitool/research + name = "research omni-toolset" + desc = "A set of engineering tools with a addition of tools to allow synthetic repairs." + + omni_toolkit = list( + /obj/item/surgical_drapes/cyborg, + /obj/item/bonesetter/cyborg, + ) diff --git a/modular_zubbers/code/modules/borgs/code/robot_model.dm b/modular_zubbers/code/modules/silicons/borgs/code/robot_model.dm similarity index 98% rename from modular_zubbers/code/modules/borgs/code/robot_model.dm rename to modular_zubbers/code/modules/silicons/borgs/code/robot_model.dm index ce27623958a82..57f8bd68c8196 100644 --- a/modular_zubbers/code/modules/borgs/code/robot_model.dm +++ b/modular_zubbers/code/modules/silicons/borgs/code/robot_model.dm @@ -177,39 +177,40 @@ name = "Research" basic_modules = list( /obj/item/assembly/flash/cyborg, - /obj/item/extinguisher/mini, + /obj/item/extinguisher, /obj/item/weldingtool/largetank/cyborg, + /obj/item/borg/cyborg_omnitool/research, // A modded engineering omitool. + /obj/item/borg/cyborghug/medical, // You can now hug and fix synths :3c + /obj/item/multitool/cyborg, /obj/item/screwdriver/cyborg/power, /obj/item/crowbar/cyborg/power, - /obj/item/multitool/cyborg, /obj/item/analyzer, /obj/item/assembly/signaler/cyborg, /obj/item/borg/apparatus/sheet_manipulator, + /obj/item/storage/bag/sheetsnatcher/borg, + /obj/item/storage/bag/xeno, /obj/item/stack/cable_coil, /obj/item/borg/apparatus/beaker, /obj/item/borg/apparatus/organ_storage, /obj/item/borg/apparatus/research, /obj/item/borg/apparatus/circuit_sci, /obj/item/storage/part_replacer/cyborg, - /obj/item/surgical_drapes, /obj/item/healthanalyzer, /obj/item/experi_scanner, - /obj/item/bonesetter, /obj/item/stack/medical/gauze, /obj/item/borg/apparatus/tank_manipulator, ) radio_channels = list(RADIO_CHANNEL_SCIENCE) -//TODO: Illegal science stuff emag_modules = list( /obj/item/borg/stun, /obj/item/experimental_dash, - /obj/item/borg/apparatus/illegal //To replace malf printers + /obj/item/borg/apparatus/illegal //Get to work unit! ) cyborg_base_icon = "research" cyborg_icon_override = CYBORG_ICON_SCI model_select_icon = "research" - model_select_alternate_icon = 'modular_zubbers/code/modules/borgs/sprites/screen_robot.dmi' + model_select_alternate_icon = 'modular_zubbers/code/modules/silicons/borgs/sprites/screen_robot.dmi' model_traits = list(TRAIT_KNOW_ROBO_WIRES, TRAIT_RESEARCH_CYBORG) borg_skins = list( "F3-LINE" = list( diff --git a/modular_zubbers/code/modules/borgs/code/robot_upgrade.dm b/modular_zubbers/code/modules/silicons/borgs/code/robot_upgrade.dm similarity index 84% rename from modular_zubbers/code/modules/borgs/code/robot_upgrade.dm rename to modular_zubbers/code/modules/silicons/borgs/code/robot_upgrade.dm index b732819b60f0b..dda0bdb571a5b 100644 --- a/modular_zubbers/code/modules/borgs/code/robot_upgrade.dm +++ b/modular_zubbers/code/modules/silicons/borgs/code/robot_upgrade.dm @@ -52,7 +52,6 @@ . = ..() model_type += /obj/item/robot_model/sci model_flags += BORG_MODEL_RESEARCH - items_to_remove = list(/obj/item/surgical_drapes) // Engineering BRPED /obj/item/borg/upgrade/rped/Initialize() @@ -60,6 +59,17 @@ items_to_add = list(/obj/item/storage/part_replacer/bluespace) items_to_add -= list(/obj/item/storage/part_replacer) +//Upgrade for the experi scanner +/obj/item/borg/upgrade/experi_scanner + name = "Research cyborg BlueSpace Experi-Scanner" + desc = "An upgrade to the Research model cyborg's standard health analyzer." + icon_state = "module_general" + require_model = TRUE + model_type = list(/obj/item/robot_model/sci) + model_flags = BORG_MODEL_RESEARCH + items_to_add = list(/obj/item/experi_scanner/bluespace) + items_to_remove = list(/obj/item/experi_scanner) + // Borg Dom Aura :) /obj/item/borg/upgrade/dominatrixmodule/action(mob/living/silicon/robot/borg, mob/living/user) . = ..() diff --git a/modular_zubbers/code/modules/borgs/sprites/curverobot_bun.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_bun.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/curverobot_bun.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_bun.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/curverobot_eng.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_eng.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/curverobot_eng.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_eng.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/curverobot_jani.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_jani.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/curverobot_jani.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_jani.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/curverobot_med.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_med.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/curverobot_med.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_med.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/curverobot_mine.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_mine.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/curverobot_mine.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_mine.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/curverobot_pk.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_pk.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/curverobot_pk.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_pk.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/curverobot_serv.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_serv.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/curverobot_serv.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_serv.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/curverobot_syndie.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_syndie.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/curverobot_syndie.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/curverobot_syndie.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/felibot_all.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/felibot_all.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/felibot_all.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/felibot_all.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_cc.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_cc.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_cc.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_cc.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_eng.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_eng.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_eng.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_eng.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_jani.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_jani.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_jani.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_jani.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_med.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_med.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_med.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_med.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_mine.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_mine.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_mine.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_mine.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_pk.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_pk.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_pk.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_pk.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_sci.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_sci.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_sci.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_sci.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_sec.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_sec.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_sec.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_sec.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_serv.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_serv.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_serv.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_serv.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/largerobot_syndie.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_syndie.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/largerobot_syndie.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/largerobot_syndie.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/robot_items.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/robot_items.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/robot_items.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/robot_items.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/robot_sci.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/robot_sci.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/robot_sci.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/robot_sci.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/screen_robot.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/screen_robot.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/screen_robot.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/screen_robot.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_car.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_car.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_car.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_car.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_cc.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_cc.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_cc.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_cc.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_eng.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_eng.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_eng.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_eng.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_gen.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_gen.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_gen.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_gen.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_jani.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_jani.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_jani.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_jani.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_med.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_med.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_med.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_med.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_min.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_min.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_min.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_min.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_pk.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_pk.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_pk.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_pk.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_sci.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_sci.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_sci.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_sci.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_serv.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_serv.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/smallraptors/smolraptor_serv.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/smallraptors/smolraptor_serv.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_cargo.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_cargo.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_cargo.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_cargo.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_clown.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_clown.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_clown.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_clown.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_eng.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_eng.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_eng.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_eng.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_jani.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_jani.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_jani.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_jani.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_med.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_med.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_med.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_med.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_mine.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_mine.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_mine.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_mine.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_ninja.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_ninja.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_ninja.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_ninja.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_pk.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_pk.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_pk.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_pk.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_sci.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_sci.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_sci.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_sci.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_sec.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_sec.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_sec.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_sec.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_serv.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_serv.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_serv.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_serv.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/tallrobot_syndie.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_syndie.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/tallrobot_syndie.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/tallrobot_syndie.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/widerobot_cc.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_cc.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/widerobot_cc.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_cc.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/widerobot_clown.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_clown.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/widerobot_clown.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_clown.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/widerobot_mine.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_mine.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/widerobot_mine.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_mine.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/widerobot_sci.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_sci.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/widerobot_sci.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_sci.dmi diff --git a/modular_zubbers/code/modules/borgs/sprites/widerobot_syndie.dmi b/modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_syndie.dmi similarity index 100% rename from modular_zubbers/code/modules/borgs/sprites/widerobot_syndie.dmi rename to modular_zubbers/code/modules/silicons/borgs/sprites/widerobot_syndie.dmi diff --git a/modular_zubbers/code/modules/silicons/silicon.dm b/modular_zubbers/code/modules/silicons/silicon.dm new file mode 100644 index 0000000000000..d1372ee9ffebe --- /dev/null +++ b/modular_zubbers/code/modules/silicons/silicon.dm @@ -0,0 +1,56 @@ +/mob/living/silicon/Topic(href, href_list) + . = ..() + if(href_list["open_door"]) + var/obj/machinery/door/airlock/door = locate(href_list["open_door"]) in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock) + var/mob/living/requester = locate(href_list["user"]) in GLOB.mob_list + + if(!requester) + return + if(!door) + return + fulfill_door_request(requester, door, href_list["action"]) + if(href_list["track"]) + var/mob/living/silicon/ai/AI = src + if(AI.deployed_shell) + AI.deployed_shell.undeploy() + AI.ai_tracking_tool.track_name(src, href_list["track"]) + +/// Allows the AI to interact somewhat with a door if the requester can be tracked by cameras and the AI can normally access it. +/mob/living/silicon/proc/fulfill_door_request(mob/living/requester, obj/machinery/door/airlock/door, action) + if(!istype(requester)) + return + if(!istype(door)) + return + + if(!COOLDOWN_FINISHED(door, answer_cd)) + to_chat(src, span_warning("Your processor is still cooling down.")) + return + + if(!requester.can_track(src)) + to_chat(src, span_notice("Unable to track requester.")) + return + if(door.aiControlDisabled != AI_WIRE_NORMAL) + to_chat(src, span_notice("Unable to access airlock")) + return + + COOLDOWN_START(door, answer_cd, 10 SECONDS) + + switch(action) + if("open") + if(door.locked) + door.unbolt() + door.open() + playsound(door, 'sound/machines/ping.ogg', 50, FALSE, SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) + to_chat(src, "You open the [door] for [requester].") + if("bolt") + if(!door.locked) + door.bolt() + door.visible_message(span_danger("Wow you really pissed [src] off, they bolted the door in your face!"), vision_distance = COMBAT_MESSAGE_RANGE) + if("shock") + door.set_electrified(MACHINE_DEFAULT_ELECTRIFY_TIME) + playsound(door, 'sound/machines/buzz/buzz-sigh.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) + door.visible_message(span_notice("The door buzzes, [src] has denied your request"), vision_distance = COMBAT_MESSAGE_RANGE) + if("deny") + playsound(door, 'sound/machines/buzz/buzz-sigh.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE, ignore_walls = FALSE) + door.visible_message(span_notice("The door buzzes, [src] has denied your request"), vision_distance = COMBAT_MESSAGE_RANGE) + to_chat(src, "You deny [requester]'s request") diff --git a/modular_zubbers/code/modules/spells/spell_types/nerfed_spells.dm b/modular_zubbers/code/modules/spells/spell_types/nerfed_spells.dm index bce5acf9adb68..ca357bcfbd375 100644 --- a/modular_zubbers/code/modules/spells/spell_types/nerfed_spells.dm +++ b/modular_zubbers/code/modules/spells/spell_types/nerfed_spells.dm @@ -49,7 +49,7 @@ invocation = "YA'YEET!!" button_icon = 'icons/mob/nonhuman-player/cult.dmi' button_icon_state = "shade_wizard" - sound = 'sound/effects/assslap.ogg' + sound = 'sound/effects/emotes/assslap.ogg' /datum/action/cooldown/spell/touch/smite/cast_on_hand_hit(obj/item/melee/touch_attack/hand, mob/living/victim, mob/living/carbon/caster) diff --git a/modular_zubbers/code/modules/status_effects/buffs/frenzy.dm b/modular_zubbers/code/modules/status_effects/buffs/frenzy.dm index 12ab78ab0d8a4..12d9ea9b34c2f 100644 --- a/modular_zubbers/code/modules/status_effects/buffs/frenzy.dm +++ b/modular_zubbers/code/modules/status_effects/buffs/frenzy.dm @@ -40,7 +40,7 @@ to_chat(owner, span_userdanger("Blood! You need Blood, now! You enter a total Frenzy! You will DIE if you do not get BLOOD.")) to_chat(owner, span_announce("* Bloodsucker Tip: While in Frenzy, you quickly accrue burn damage, instantly Aggresively grab, have stun resistance, cannot speak, hear, or use any powers outside of Feed and Trespass (If you have it).")) owner.balloon_alert(owner, "you enter a frenzy! Drink blood, or you will die!") - SEND_SIGNAL(bloodsuckerdatum, BLOODSUCKER_ENTERS_FRENZY) + SEND_SIGNAL(bloodsuckerdatum, COMSIG_BLOODSUCKER_ENTERS_FRENZY) // Give the other Frenzy effects owner.add_traits(trait_list, FRENZY_TRAIT) @@ -51,7 +51,7 @@ owner.add_client_colour(/datum/client_colour/manual_heart_blood) var/obj/cuffs = user.get_item_by_slot(ITEM_SLOT_HANDCUFFED) var/obj/legcuffs = user.get_item_by_slot(ITEM_SLOT_LEGCUFFED) - if(user.handcuffed || user.legcuffed) + if((user.handcuffed && cuffs) || (user.legcuffed && legcuffs)) user.clear_cuffs(cuffs, TRUE) user.clear_cuffs(legcuffs, TRUE) bloodsuckerdatum.frenzied = TRUE @@ -66,7 +66,7 @@ owner.remove_movespeed_modifier(/datum/movespeed_modifier/frenzy_speedup) owner.remove_client_colour(/datum/client_colour/manual_heart_blood) - SEND_SIGNAL(bloodsuckerdatum, BLOODSUCKER_EXITS_FRENZY) + SEND_SIGNAL(bloodsuckerdatum, COMSIG_BLOODSUCKER_EXITS_FRENZY) bloodsuckerdatum.frenzied = FALSE return ..() diff --git a/modular_zubbers/code/modules/storyteller/_events/scrubber_overflow.dm b/modular_zubbers/code/modules/storyteller/_events/scrubber_overflow.dm new file mode 100644 index 0000000000000..2222625f19717 --- /dev/null +++ b/modular_zubbers/code/modules/storyteller/_events/scrubber_overflow.dm @@ -0,0 +1,45 @@ +/datum/round_event/scrubber_overflow + /// Whitelist of reagents we want scrubbers to dispense + safer_chems = list(/datum/reagent/baldium, + /datum/reagent/bluespace, + /datum/reagent/carbon, + /datum/reagent/colorful_reagent, + /datum/reagent/concentrated_barbers_aid, + /datum/reagent/consumable/astrotame, + /datum/reagent/consumable/char, + /datum/reagent/consumable/condensedcapsaicin, + /datum/reagent/consumable/cream, + /datum/reagent/consumable/ethanol/antifreeze, + /datum/reagent/consumable/ethanol/beer, + /datum/reagent/consumable/ethanol/fernet_cola, + /datum/reagent/consumable/ethanol/sugar_rush, + /datum/reagent/consumable/ethanol/synthanol, + /datum/reagent/consumable/flour, + /datum/reagent/consumable/ice, + /datum/reagent/consumable/laughter, + /datum/reagent/consumable/sugar, + /datum/reagent/consumable/tinlux, + /datum/reagent/cryptobiolin, + /datum/reagent/drug/mushroomhallucinogen, + /datum/reagent/drug/space_drugs, + /datum/reagent/fuel, + /datum/reagent/glitter/blue, + /datum/reagent/glitter/confetti, + /datum/reagent/glitter/pink, + /datum/reagent/glitter/white, + /datum/reagent/gravitum, + /datum/reagent/growthserum, + /datum/reagent/hair_dye, + /datum/reagent/hydrogen_peroxide, + /datum/reagent/lube, + /datum/reagent/lube/superlube, + /datum/reagent/medicine/c2/multiver, + /datum/reagent/medicine/nanite_slurry, + /datum/reagent/metalgen, + /datum/reagent/pax, + /datum/reagent/plastic_polymers, + /datum/reagent/space_cleaner, + /datum/reagent/spraytan, + /datum/reagent/water/salt, + /datum/reagent/yuck, + ) diff --git a/modular_zubbers/code/modules/storyteller/config.dm b/modular_zubbers/code/modules/storyteller/config.dm index 121a512099d13..b3c08c1fc81bb 100644 --- a/modular_zubbers/code/modules/storyteller/config.dm +++ b/modular_zubbers/code/modules/storyteller/config.dm @@ -12,11 +12,11 @@ config_entry_value = 1 min_val = 0 -/datum/config_entry/number/roleset_point_gain_multiplier +/datum/config_entry/number/crewset_point_gain_multiplier config_entry_value = 1 min_val = 0 -/datum/config_entry/number/objectives_point_gain_multiplier +/datum/config_entry/number/ghostset_point_gain_multiplier config_entry_value = 1 min_val = 0 @@ -33,11 +33,11 @@ config_entry_value = 1 min_val = 0 -/datum/config_entry/number/roleset_roundstart_point_multiplier +/datum/config_entry/number/crewset_roundstart_point_multiplier config_entry_value = 1 min_val = 0 -/datum/config_entry/number/objectives_roundstart_point_multiplier +/datum/config_entry/number/ghostset_roundstart_point_multiplier config_entry_value = 1 min_val = 0 @@ -57,13 +57,13 @@ integer = TRUE min_val = 0 -/datum/config_entry/number/roleset_min_pop - config_entry_value = ROLESET_MIN_POP +/datum/config_entry/number/crewset_min_pop + config_entry_value = CREWSET_MIN_POP integer = TRUE min_val = 0 -/datum/config_entry/number/objectives_min_pop - config_entry_value = OBJECTIVES_MIN_POP +/datum/config_entry/number/ghostset_min_pop + config_entry_value = GHOSTSET_MIN_POP integer = TRUE min_val = 0 @@ -83,13 +83,13 @@ integer = TRUE min_val = 0 -/datum/config_entry/number/roleset_point_threshold - config_entry_value = ROLESET_POINT_THRESHOLD +/datum/config_entry/number/crewset_point_threshold + config_entry_value = CREWSET_POINT_THRESHOLD integer = TRUE min_val = 0 -/datum/config_entry/number/objectives_point_threshold - config_entry_value = OBJECTIVES_POINT_THRESHOLD +/datum/config_entry/number/ghostset_point_threshold + config_entry_value = GHOSTSET_POINT_THRESHOLD integer = TRUE min_val = 0 @@ -112,13 +112,13 @@ integer = TRUE min_val = 0 -/datum/config_entry/number/roleset_pop_scale_threshold - config_entry_value = ROLESET_POP_SCALE_THRESHOLD +/datum/config_entry/number/crewset_pop_scale_threshold + config_entry_value = CREWSET_POP_SCALE_THRESHOLD integer = TRUE min_val = 0 -/datum/config_entry/number/objectives_pop_scale_threshold - config_entry_value = OBJECTIVES_POP_SCALE_THRESHOLD +/datum/config_entry/number/ghostset_pop_scale_threshold + config_entry_value = GHOSTSET_POP_SCALE_THRESHOLD integer = TRUE min_val = 0 @@ -138,12 +138,12 @@ integer = TRUE min_val = 0 -/datum/config_entry/number/roleset_pop_scale_penalty - config_entry_value = ROLESET_POP_SCALE_PENALTY +/datum/config_entry/number/crewset_pop_scale_penalty + config_entry_value = CREWSET_POP_SCALE_PENALTY integer = TRUE min_val = 0 -/datum/config_entry/number/objectives_pop_scale_penalty - config_entry_value = OBJECTIVES_POP_SCALE_PENALTY +/datum/config_entry/number/ghostset_pop_scale_penalty + config_entry_value = GHOSTSET_POP_SCALE_PENALTY integer = TRUE min_val = 0 diff --git a/modular_zubbers/code/modules/storyteller/event_defines/roleset/_antagonist_event.dm b/modular_zubbers/code/modules/storyteller/event_defines/crewset/_antagonist_event.dm similarity index 94% rename from modular_zubbers/code/modules/storyteller/event_defines/roleset/_antagonist_event.dm rename to modular_zubbers/code/modules/storyteller/event_defines/crewset/_antagonist_event.dm index c58aff782fcae..ab2959cb3e760 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/roleset/_antagonist_event.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/crewset/_antagonist_event.dm @@ -1,6 +1,6 @@ /datum/round_event_control/antagonist reoccurence_penalty_multiplier = 0 - track = EVENT_TRACK_ROLESET + track = EVENT_TRACK_CREWSET /// Protected roles from the antag roll. People will not get those roles if a config is enabled var/protected_roles = list( JOB_CAPTAIN, @@ -35,9 +35,9 @@ var/restricted_roles = list(JOB_AI, JOB_CYBORG) /// How many baseline antags do we spawn - var/base_antags = 2 + var/base_antags = 1 /// How many maximum antags can we spawn - var/maximum_antags = 6 + var/maximum_antags = 2 /// Strict limit on how many antagonists of this type that should be in this round. 0 to ignore. var/maximum_antags_global = 0 /// For this many players we'll add 1 up to the maximum antag amount @@ -63,12 +63,14 @@ if(initial(iterating_job.restricted_antagonists)) restricted_roles |= initial(iterating_job.title) -/datum/round_event_control/antagonist/can_spawn_event(popchecks = TRUE, allow_magic) +/datum/round_event_control/antagonist/can_spawn_event(players_amt, allow_magic = FALSE, popchecks = TRUE) . = ..() if(!.) return if(!roundstart && !SSgamemode.can_inject_antags()) return FALSE + if(!get_antag_amount()) + return FALSE var/list/candidates = get_candidates() if(candidates.len < get_minimum_candidates()) return FALSE @@ -94,12 +96,12 @@ for(var/datum/antagonist/existing_antagonist as anything in GLOB.antagonists) if(QDELETED(existing_antagonist) || QDELETED(existing_antagonist.owner) || QDELETED(existing_antagonist.owner.current)) //This feels messy, but it just werks. continue - if(!istype(existing_antagonist,antag_datum)) //Obviously ignore other antagonists. + if(!istype(existing_antagonist, antag_datum)) //Obviously ignore other antagonists. continue antag_slots_left-- //Slot is occupied. if(antag_slots_left <= 0) //No point in checking anymore. break - amount = min(amount,antag_slots_left) + amount = min(amount, antag_slots_left) return min(amount, maximum_antags) diff --git a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/bloodsucker.dm b/modular_zubbers/code/modules/storyteller/event_defines/crewset/bloodsucker.dm similarity index 91% rename from modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/bloodsucker.dm rename to modular_zubbers/code/modules/storyteller/event_defines/crewset/bloodsucker.dm index d4a395b3b04cf..61f8050d97881 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/bloodsucker.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/crewset/bloodsucker.dm @@ -7,8 +7,6 @@ weight = 8 min_players = 20 - base_antags = 2 - maximum_antags = 3 maximum_antags_global = 3 tags = list(TAG_COMBAT, TAG_SPOOKY, TAG_CREW_ANTAG) diff --git a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/changeling.dm b/modular_zubbers/code/modules/storyteller/event_defines/crewset/changeling.dm similarity index 100% rename from modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/changeling.dm rename to modular_zubbers/code/modules/storyteller/event_defines/crewset/changeling.dm diff --git a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/heretic.dm b/modular_zubbers/code/modules/storyteller/event_defines/crewset/heretic.dm similarity index 91% rename from modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/heretic.dm rename to modular_zubbers/code/modules/storyteller/event_defines/crewset/heretic.dm index a72f3ef483a76..60516d48d28c7 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/heretic.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/crewset/heretic.dm @@ -4,11 +4,9 @@ antag_flag = ROLE_HERETIC antag_datum = /datum/antagonist/heretic - weight = 8 + weight = 3 min_players = 30 - base_antags = 1 - maximum_antags = 2 maximum_antags_global = 2 tags = list(TAG_COMBAT, TAG_SPOOKY, TAG_CREW_ANTAG) diff --git a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/malf.dm b/modular_zubbers/code/modules/storyteller/event_defines/crewset/malf.dm similarity index 75% rename from modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/malf.dm rename to modular_zubbers/code/modules/storyteller/event_defines/crewset/malf.dm index 1bd24f57eb01e..d8007587c4cbd 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/malf.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/crewset/malf.dm @@ -1,29 +1,35 @@ /datum/round_event_control/antagonist/solo/malf - name = "Malfunctioning AI" + name = "Malfunctioning AI Midround" base_antags = 1 maximum_antags = 1 maximum_antags_global = 1 min_players = 20 + roundstart = FALSE antag_datum = /datum/antagonist/malf_ai antag_flag = ROLE_MALF - weight = 0 + weight = 1 tags = list(TAG_CREW_ANTAG, TAG_COMBAT, TAG_DESTRUCTIVE, TAG_CHAOTIC) restricted_roles = list() +/datum/round_event_control/antagonist/solo/malf/get_candidates() + return GLOB.ai_list + /datum/round_event_control/antagonist/solo/malf/roundstart + name = "Malfunctioning AI" + roundstart = TRUE typepath = /datum/round_event/antagonist/solo/malf_ai/roundstart weight = 10 // God has abandoned us /datum/round_event_control/antagonist/solo/malf/roundstart/get_candidates() - var/list/candidates = ..() + var/list/candidates = SSgamemode.get_candidates(antag_flag, pick_roundstart_players = TRUE, restricted_roles = restricted_roles) . = list() - var/datum/job/aijob = SSjob.GetJob(JOB_AI) + var/datum/job/aijob = SSjob.get_job(JOB_AI) for(var/mob/candidate as anything in candidates) if(SSjob.check_job_eligibility(candidate, aijob) == JOB_AVAILABLE) . += candidate @@ -34,7 +40,7 @@ if(!.) return . - var/datum/job/ai_job = SSjob.GetJobType(/datum/job/ai) + var/datum/job/ai_job = SSjob.get_job_type(/datum/job/ai) if(!(ai_job.total_positions - ai_job.current_positions && ai_job.spawn_positions)) return FALSE else diff --git a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/nuke_ops.dm b/modular_zubbers/code/modules/storyteller/event_defines/crewset/nuke_ops.dm similarity index 95% rename from modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/nuke_ops.dm rename to modular_zubbers/code/modules/storyteller/event_defines/crewset/nuke_ops.dm index 2b97bf2af42b3..7dc3a43cfd204 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/nuke_ops.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/crewset/nuke_ops.dm @@ -24,7 +24,7 @@ var/datum/team/nuclear/nuke_team /datum/round_event/antagonist/team/nukie/candidate_roles_setup(mob/candidate) - candidate.mind.set_assigned_role(SSjob.GetJobType(job_type)) + candidate.mind.set_assigned_role(SSjob.get_job_type(job_type)) candidate.mind.special_role = required_role /datum/round_event/antagonist/team/nukie/start() diff --git a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/spies.dm b/modular_zubbers/code/modules/storyteller/event_defines/crewset/spies.dm similarity index 100% rename from modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/spies.dm rename to modular_zubbers/code/modules/storyteller/event_defines/crewset/spies.dm diff --git a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/traitor.dm b/modular_zubbers/code/modules/storyteller/event_defines/crewset/traitor.dm similarity index 96% rename from modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/traitor.dm rename to modular_zubbers/code/modules/storyteller/event_defines/crewset/traitor.dm index 503f9164784c2..8c2ea190743b0 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/roleset/crew_antagonists/traitor.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/crewset/traitor.dm @@ -4,7 +4,7 @@ antag_flag = ROLE_TRAITOR antag_datum = /datum/antagonist/traitor - weight = 8 + weight = 16 maximum_antags_global = 6 tags = list(TAG_CREW_ANTAG) diff --git a/modular_zubbers/code/modules/storyteller/event_defines/disabled_event_overrides.dm b/modular_zubbers/code/modules/storyteller/event_defines/disabled_event_overrides.dm index 9a122e270f73a..5e711975ee950 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/disabled_event_overrides.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/disabled_event_overrides.dm @@ -1,3 +1,32 @@ -/datum/round_event_control/sentient_disease +/datum/round_event_control/slaughter + track = EVENT_TRACK_MAJOR + tags = list(TAG_COMBAT, TAG_CHAOTIC) weight = 0 max_occurrences = 0 + +/datum/round_event_control/sandstorm // it's a shittier meteor wave that kills the server trying to process all the debris + track = EVENT_TRACK_MAJOR + tags = list(TAG_COMMUNAL, TAG_SPACE, TAG_DESTRUCTIVE, TAG_CHAOTIC) + weight = 0 + max_occurrences = 0 + +/datum/round_event_control/sandstorm_classic // it's a shittier meteor wave that kills the server trying to process all the debris + track = EVENT_TRACK_MAJOR + tags = list(TAG_COMMUNAL, TAG_SPACE, TAG_DESTRUCTIVE, TAG_CHAOTIC) + weight = 0 + max_occurrences = 0 + +/datum/round_event_control/icarus_sunbeam + track = EVENT_TRACK_MAJOR + tags = list(TAG_COMMUNAL, TAG_SPACE, TAG_DESTRUCTIVE, TAG_CHAOTIC) + +/datum/round_event_control/dark_matteor + track = EVENT_TRACK_MAJOR + tags = list(TAG_COMMUNAL, TAG_SPACE, TAG_DESTRUCTIVE, TAG_CHAOTIC) + +/datum/round_event_control/wizard + tags = list(TAG_COMMUNAL, TAG_DESTRUCTIVE, TAG_CHAOTIC) + +/datum/round_event_control/mutant_infestation + track = EVENT_TRACK_MAJOR + tags = list(TAG_COMMUNAL, TAG_COMBAT, TAG_CHAOTIC, TAG_CREW_ANTAG) diff --git a/modular_zubbers/code/modules/storyteller/event_defines/roleset/roleset_ghost_overrides.dm b/modular_zubbers/code/modules/storyteller/event_defines/ghostset/ghostset_overrides.dm similarity index 72% rename from modular_zubbers/code/modules/storyteller/event_defines/roleset/roleset_ghost_overrides.dm rename to modular_zubbers/code/modules/storyteller/event_defines/ghostset/ghostset_overrides.dm index c6c5bdab7b0a2..a2ec235be0ef8 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/roleset/roleset_ghost_overrides.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/ghostset/ghostset_overrides.dm @@ -1,29 +1,30 @@ /datum/round_event_control/nightmare - track = EVENT_TRACK_ROLESET + track = EVENT_TRACK_GHOSTSET tags = list(TAG_COMBAT, TAG_SPOOKY) weight = 4 /datum/round_event_control/space_dragon - track = EVENT_TRACK_ROLESET + track = EVENT_TRACK_GHOSTSET tags = list(TAG_COMBAT, TAG_CHAOTIC) weight = 2 /datum/round_event_control/space_ninja - track = EVENT_TRACK_ROLESET + track = EVENT_TRACK_GHOSTSET tags = list(TAG_COMBAT) weight = 4 /datum/round_event_control/changeling - track = EVENT_TRACK_ROLESET + track = EVENT_TRACK_GHOSTSET tags = list(TAG_COMBAT, TAG_CREW_ANTAG) - weight = 4 + min_players = 20 + weight = 6 /datum/round_event_control/alien_infestation - track = EVENT_TRACK_ROLESET + track = EVENT_TRACK_GHOSTSET tags = list(TAG_COMBAT, TAG_SPOOKY, TAG_CHAOTIC) weight = 2 /datum/round_event_control/spider_infestation - track = EVENT_TRACK_ROLESET + track = EVENT_TRACK_GHOSTSET tags = list(TAG_COMBAT, TAG_DESTRUCTIVE, TAG_CHAOTIC) weight = 2 diff --git a/modular_zubbers/code/modules/storyteller/event_defines/ghostset/lone_infiltrator.dm b/modular_zubbers/code/modules/storyteller/event_defines/ghostset/lone_infiltrator.dm new file mode 100644 index 0000000000000..0ec83cc2de64a --- /dev/null +++ b/modular_zubbers/code/modules/storyteller/event_defines/ghostset/lone_infiltrator.dm @@ -0,0 +1,47 @@ +/datum/round_event_control/lone_infiltrator + name = "Spawn Lone Infiltrator" + typepath = /datum/round_event/ghost_role/lone_infiltrator + max_occurrences = 2 + min_players = 10 + dynamic_should_hijack = TRUE + category = EVENT_CATEGORY_ENTITIES + description = "Spawns a lone infiltrator, a non-crew syndicate agent." + min_wizard_trigger_potency = NEVER_TRIGGERED_BY_WIZARDS + max_wizard_trigger_potency = NEVER_TRIGGERED_BY_WIZARDS + weight = 10 + + track = EVENT_TRACK_GHOSTSET + tags = list(TAG_COMBAT) + +/datum/round_event/ghost_role/lone_infiltrator + minimum_required = 1 + role_name = ROLE_LONE_INFILTRATOR + fakeable = FALSE + +/datum/round_event/ghost_role/lone_infiltrator/spawn_role() + 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/chosen_one = SSpolling.poll_ghost_candidates(check_jobban = ROLE_LONE_INFILTRATOR, role = ROLE_LONE_INFILTRATOR, role_name_text = role_name, amount_to_pick = 1) + if(isnull(chosen_one)) + return NOT_ENOUGH_PLAYERS + + var/datum/mind/player_mind = new /datum/mind(chosen_one.key) + player_mind.active = TRUE + + var/mob/living/carbon/human/operative = new(pick(spawn_locs)) + chosen_one.client.prefs.safe_transfer_prefs_to(operative) + operative.dna.update_dna_identity() + operative.dna.species.pre_equip_species_outfit(null, operative) + SSquirks.AssignQuirks(operative, chosen_one.client, TRUE, TRUE, null, FALSE, operative) + + player_mind.transfer_to(operative) + player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/lone_operative)) + player_mind.special_role = "Lone Infiltrator" + player_mind.add_antag_datum(/datum/antagonist/traitor/lone_infiltrator) + + message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into lone infiltrator.") + log_game("[key_name(operative)] was spawned as a lone infiltrator") + return SUCCESSFUL_SPAWN diff --git a/modular_zubbers/code/modules/storyteller/_events/voidwalker.dm b/modular_zubbers/code/modules/storyteller/event_defines/ghostset/voidwalker.dm similarity index 87% rename from modular_zubbers/code/modules/storyteller/_events/voidwalker.dm rename to modular_zubbers/code/modules/storyteller/event_defines/ghostset/voidwalker.dm index 985c44e4cee18..5e36b107d18c7 100644 --- a/modular_zubbers/code/modules/storyteller/_events/voidwalker.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/ghostset/voidwalker.dm @@ -10,6 +10,9 @@ dynamic_should_hijack = TRUE category = EVENT_CATEGORY_ENTITIES description = "A Void Walker that drags people out of the station and into the abyss" + map_flags = EVENT_SPACE_ONLY + + track = EVENT_TRACK_GHOSTSET /datum/round_event/ghost_role/void_walker minimum_required = 30 @@ -29,10 +32,10 @@ var/mob/living/carbon/human/walker = new (spawn_location) player_mind.transfer_to(walker) - player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/voidwalker)) + player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/voidwalker)) player_mind.add_antag_datum(/datum/antagonist/voidwalker) walker.set_species(/datum/species/voidwalker) - playsound(walker, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) + playsound(walker, 'sound/effects/magic/ethereal_exit.ogg', 50, TRUE, -1) message_admins("[ADMIN_LOOKUPFLW(walker)] has been made into a Voidwalker by the midround event.") walker.log_message("[key_name(walker)] was spawned as a Voidwalker by an event.", LOG_GAME) spawned_mobs += walker diff --git a/modular_zubbers/code/modules/storyteller/event_defines/major/major_overrides.dm b/modular_zubbers/code/modules/storyteller/event_defines/major/major_overrides.dm index b3c07152893a0..3b24b1f6c7dd5 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/major/major_overrides.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/major/major_overrides.dm @@ -16,9 +16,17 @@ track = EVENT_TRACK_MAJOR tags = list(TAG_COMMUNAL, TAG_SPACE, TAG_DESTRUCTIVE, TAG_CHAOTIC) weight = 10 + max_occurrences = 1 /datum/round_event_control/meteor_wave/meaty weight = 15 + max_occurrences = 1 + +/datum/round_event_control/meteor_wave/threatening + weight = 3 + +/datum/round_event_control/meteor_wave/catastrophic + weight = 0 /datum/round_event_control/meteor_wave/ices weight = 0 @@ -36,11 +44,6 @@ tags = list(TAG_DESTRUCTIVE) weight = 20 -/datum/round_event_control/stray_meteor - track = EVENT_TRACK_MAJOR - tags = list(TAG_DESTRUCTIVE, TAG_SPACE) - weight = 25 - /datum/round_event_control/anomaly/anomaly_vortex track = EVENT_TRACK_MAJOR tags = list(TAG_DESTRUCTIVE) @@ -72,4 +75,21 @@ /datum/round_event_control/stray_cargo/changeling_zombie track = EVENT_TRACK_MAJOR - tags = list(TAG_COMMUNAL, TAG_COMBAT, TAG_CHAOTIC, TAG_SPOOKY) \ No newline at end of file + tags = list(TAG_COMMUNAL, TAG_COMBAT, TAG_CHAOTIC, TAG_SPOOKY) + +/datum/round_event_control/pirates + track = EVENT_TRACK_MAJOR + tags = list(TAG_COMMUNAL, TAG_COMBAT) + +/datum/round_event_control/cortical_borer + track = EVENT_TRACK_MAJOR + tags = list(TAG_TARGETED, TAG_SPOOKY) + min_players = 20 + +/datum/round_event_control/morph + track = EVENT_TRACK_MAJOR + tags = list(TAG_DESTRUCTIVE, TAG_SPOOKY) + +/datum/round_event_control/operative + track = EVENT_TRACK_MAJOR + tags = list(TAG_COMBAT, TAG_CHAOTIC, TAG_CREW_ANTAG) diff --git a/modular_zubbers/code/modules/storyteller/event_defines/moderate/moderate_overrides.dm b/modular_zubbers/code/modules/storyteller/event_defines/moderate/moderate_overrides.dm index 3c83dd46d2c0e..134799677af5e 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/moderate/moderate_overrides.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/moderate/moderate_overrides.dm @@ -1,59 +1,51 @@ /datum/round_event_control/brand_intelligence - track = EVENT_TRACK_MODERATE tags = list(TAG_DESTRUCTIVE, TAG_COMMUNAL, TAG_CHAOTIC) /datum/round_event_control/carp_migration - track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL) /datum/round_event_control/communications_blackout - track = EVENT_TRACK_MODERATE - tags = list(TAG_COMMUNAL, TAG_SPOOKY) - -/datum/round_event_control/grid_check - track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL, TAG_SPOOKY) /datum/round_event_control/ion_storm - track = EVENT_TRACK_MODERATE tags = list(TAG_TARGETED) /datum/round_event_control/processor_overload - track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL) -/datum/round_event_control/radiation_storm - max_occurrences = 2 - /datum/round_event_control/radiation_leak - track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL) -/datum/round_event_control/sandstorm - track = EVENT_TRACK_MODERATE - tags = list(TAG_DESTRUCTIVE) +/datum/round_event_control/supermatter_surge + tags = list(TAG_TARGETED) + +/datum/round_event_control/stray_meteor + tags = list(TAG_DESTRUCTIVE, TAG_SPACE) + weight = 25 /datum/round_event_control/shuttle_catastrophe - track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL) /datum/round_event_control/vent_clog - track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL) /datum/round_event_control/anomaly weight = 10 // Lower from original 15 because it KEEPS SPAWNING THEM - track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL, TAG_DESTRUCTIVE) /datum/round_event_control/spacevine - track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL, TAG_COMBAT, TAG_CHAOTIC) /datum/round_event_control/portal_storm_syndicate - track = EVENT_TRACK_MODERATE + tags = list(TAG_COMBAT, TAG_CHAOTIC) + +/datum/round_event_control/portal_storm_narsie tags = list(TAG_COMBAT, TAG_CHAOTIC) /datum/round_event_control/mold - track = EVENT_TRACK_MODERATE tags = list(TAG_COMMUNAL, TAG_COMBAT, TAG_CHAOTIC) + weight = 0 + max_occurrences = 0 + +/datum/round_event_control/obsessed + tags = list(TAG_TARGETED) diff --git a/modular_zubbers/code/modules/storyteller/event_defines/mundane/mundane_overrides.dm b/modular_zubbers/code/modules/storyteller/event_defines/mundane/mundane_overrides.dm index 20269c24a59c1..5c2ca5b2171a2 100644 --- a/modular_zubbers/code/modules/storyteller/event_defines/mundane/mundane_overrides.dm +++ b/modular_zubbers/code/modules/storyteller/event_defines/mundane/mundane_overrides.dm @@ -6,10 +6,18 @@ track = EVENT_TRACK_MUNDANE tags = list(TAG_TARGETED) +/datum/round_event_control/heart_attack + track = EVENT_TRACK_MUNDANE + tags = list(TAG_TARGETED) + /datum/round_event_control/camera_failure track = EVENT_TRACK_MUNDANE tags = list(TAG_COMMUNAL, TAG_SPOOKY) +/datum/round_event_control/grid_check + track = EVENT_TRACK_MUNDANE + tags = list(TAG_COMMUNAL, TAG_SPOOKY) + /datum/round_event_control/disease_outbreak track = EVENT_TRACK_MUNDANE tags = list(TAG_TARGETED) @@ -69,4 +77,41 @@ /datum/round_event_control/tram_malfunction track = EVENT_TRACK_MUNDANE - tags = list(TAG_DESTRUCTIVE) + tags = list(TAG_TARGETED, TAG_SPOOKY) + +/datum/round_event_control/bitrunning_glitch + track = EVENT_TRACK_MUNDANE + tags = list(TAG_TARGETED) + +/datum/round_event_control/sentience + track = EVENT_TRACK_MUNDANE + tags = list(TAG_TARGETED, TAG_POSITIVE) + +/datum/round_event_control/easter + track = EVENT_TRACK_MUNDANE + roundstart = TRUE + weight = 0 + max_occurrences = 0 + tags = list(TAG_COMMUNAL, TAG_POSITIVE) + +/datum/round_event_control/rabbitrelease + track = EVENT_TRACK_MUNDANE + tags = list(TAG_COMMUNAL, TAG_POSITIVE) + +/datum/round_event_control/valentines + track = EVENT_TRACK_MUNDANE + roundstart = TRUE + weight = 0 + max_occurrences = 0 + tags = list(TAG_COMMUNAL, TAG_POSITIVE) + +/datum/round_event_control/santa + track = EVENT_TRACK_MUNDANE + tags = list(TAG_COMMUNAL, TAG_POSITIVE) + +/datum/round_event_control/spooky + track = EVENT_TRACK_MUNDANE + roundstart = TRUE + weight = 0 + max_occurrences = 0 + tags = list(TAG_COMMUNAL, TAG_POSITIVE, TAG_SPOOKY) diff --git a/modular_zubbers/code/modules/storyteller/gamemode.dm b/modular_zubbers/code/modules/storyteller/gamemode.dm index a5c094aefa58a..94d42cbb6303d 100644 --- a/modular_zubbers/code/modules/storyteller/gamemode.dm +++ b/modular_zubbers/code/modules/storyteller/gamemode.dm @@ -22,24 +22,24 @@ SUBSYSTEM_DEF(gamemode) EVENT_TRACK_MUNDANE = 0, EVENT_TRACK_MODERATE = 0, EVENT_TRACK_MAJOR = 0, - EVENT_TRACK_ROLESET = 0, - EVENT_TRACK_OBJECTIVES = 0 + EVENT_TRACK_CREWSET = 0, + EVENT_TRACK_GHOSTSET = 0 ) /// Last point amount gained of each track. Those are recorded for purposes of estimating how long until next event. var/list/last_point_gains = list( EVENT_TRACK_MUNDANE = 0, EVENT_TRACK_MODERATE = 0, EVENT_TRACK_MAJOR = 0, - EVENT_TRACK_ROLESET = 0, - EVENT_TRACK_OBJECTIVES = 0 + EVENT_TRACK_CREWSET = 0, + EVENT_TRACK_GHOSTSET = 0 ) /// Point thresholds at which the events are supposed to be rolled, it is also the base cost for events. var/list/point_thresholds = list( - EVENT_TRACK_MUNDANE = MUNDANE_POINT_THRESHOLD, - EVENT_TRACK_MODERATE = MODERATE_POINT_THRESHOLD, - EVENT_TRACK_MAJOR = MAJOR_POINT_THRESHOLD, - EVENT_TRACK_ROLESET = ROLESET_POINT_THRESHOLD, - EVENT_TRACK_OBJECTIVES = OBJECTIVES_POINT_THRESHOLD + EVENT_TRACK_MUNDANE = 100, + EVENT_TRACK_MODERATE = 100, + EVENT_TRACK_MAJOR = 100, + EVENT_TRACK_CREWSET = 100, + EVENT_TRACK_GHOSTSET = 100 ) /// Minimum population thresholds for the tracks to fire off events. @@ -47,8 +47,8 @@ SUBSYSTEM_DEF(gamemode) EVENT_TRACK_MUNDANE = MUNDANE_MIN_POP, EVENT_TRACK_MODERATE = MODERATE_MIN_POP, EVENT_TRACK_MAJOR = MAJOR_MIN_POP, - EVENT_TRACK_ROLESET = ROLESET_MIN_POP, - EVENT_TRACK_OBJECTIVES = OBJECTIVES_MIN_POP + EVENT_TRACK_CREWSET = CREWSET_MIN_POP, + EVENT_TRACK_GHOSTSET = GHOSTSET_MIN_POP ) /// Configurable multipliers for point gain over time. @@ -56,16 +56,16 @@ SUBSYSTEM_DEF(gamemode) EVENT_TRACK_MUNDANE = 1, EVENT_TRACK_MODERATE = 1, EVENT_TRACK_MAJOR = 1, - EVENT_TRACK_ROLESET = 1, - EVENT_TRACK_OBJECTIVES = 1 + EVENT_TRACK_CREWSET = 1, + EVENT_TRACK_GHOSTSET = 1 ) /// Configurable multipliers for roundstart points. var/list/roundstart_point_multipliers = list( EVENT_TRACK_MUNDANE = 1, EVENT_TRACK_MODERATE = 1, EVENT_TRACK_MAJOR = 1, - EVENT_TRACK_ROLESET = 1, - EVENT_TRACK_OBJECTIVES = 1 + EVENT_TRACK_CREWSET = 1, + EVENT_TRACK_GHOSTSET = 1 ) /// Whether we allow pop scaling. This is configured by config, or the storyteller UI var/allow_pop_scaling = TRUE @@ -75,8 +75,8 @@ SUBSYSTEM_DEF(gamemode) EVENT_TRACK_MUNDANE = MUNDANE_POP_SCALE_THRESHOLD, EVENT_TRACK_MODERATE = MODERATE_POP_SCALE_THRESHOLD, EVENT_TRACK_MAJOR = MAJOR_POP_SCALE_THRESHOLD, - EVENT_TRACK_ROLESET = ROLESET_POP_SCALE_THRESHOLD, - EVENT_TRACK_OBJECTIVES = OBJECTIVES_POP_SCALE_THRESHOLD + EVENT_TRACK_CREWSET = CREWSET_POP_SCALE_THRESHOLD, + EVENT_TRACK_GHOSTSET = GHOSTSET_POP_SCALE_THRESHOLD ) /// Associative list of pop scale penalties. @@ -84,17 +84,8 @@ SUBSYSTEM_DEF(gamemode) EVENT_TRACK_MUNDANE = MUNDANE_POP_SCALE_PENALTY, EVENT_TRACK_MODERATE = MODERATE_POP_SCALE_PENALTY, EVENT_TRACK_MAJOR = MAJOR_POP_SCALE_PENALTY, - EVENT_TRACK_ROLESET = ROLESET_POP_SCALE_PENALTY, - EVENT_TRACK_OBJECTIVES = OBJECTIVES_POP_SCALE_PENALTY - ) - - /// Associative list of active multipliers from pop scale penalty. - var/list/current_pop_scale_multipliers = list( - EVENT_TRACK_MUNDANE = 1, - EVENT_TRACK_MODERATE = 1, - EVENT_TRACK_MAJOR = 1, - EVENT_TRACK_ROLESET = 1, - EVENT_TRACK_OBJECTIVES = 1, + EVENT_TRACK_CREWSET = CREWSET_POP_SCALE_PENALTY, + EVENT_TRACK_GHOSTSET = GHOSTSET_POP_SCALE_PENALTY ) @@ -143,6 +134,7 @@ SUBSYSTEM_DEF(gamemode) var/storyteller_voted = FALSE /datum/controller/subsystem/gamemode/Initialize(time, zlevel) + . = ..() // Populate event pools for(var/track in event_tracks) event_pools[track] = list() @@ -167,7 +159,7 @@ SUBSYSTEM_DEF(gamemode) uncategorized += event continue event_pools[event.track] += event //Add it to the categorized event pools -// return ..() + return SS_INIT_SUCCESS /datum/controller/subsystem/gamemode/fire(resumed = FALSE) @@ -213,13 +205,13 @@ SUBSYSTEM_DEF(gamemode) /datum/controller/subsystem/gamemode/proc/get_antag_cap() if(isnull(storyteller)) return 0 - if(storyteller.antag_divisor == 0) + if(!storyteller.antag_divisor) return 0 - return round(max(min(get_correct_popcount() / storyteller.antag_divisor + sec_crew,sec_crew*1.5),ANTAG_CAP_FLAT)) + return round(max(min(get_correct_popcount() / storyteller.antag_divisor + sec_crew ,sec_crew * 1.5),ANTAG_CAP_FLAT)) /// Whether events can inject more antagonists into the round /datum/controller/subsystem/gamemode/proc/can_inject_antags() - return (get_antag_cap() > length(GLOB.antagonists)) + return (get_antag_cap() > length(GLOB.current_living_antags)) /// Gets candidates for antagonist roles. @@ -321,43 +313,32 @@ SUBSYSTEM_DEF(gamemode) /// Distribute points for(var/track in event_track_points) var/base_amt - var/gain_amt switch(track) if(EVENT_TRACK_MUNDANE) base_amt = ROUNDSTART_MUNDANE_BASE - gain_amt = ROUNDSTART_MUNDANE_GAIN if(EVENT_TRACK_MODERATE) base_amt = ROUNDSTART_MODERATE_BASE - gain_amt = ROUNDSTART_MODERATE_GAIN if(EVENT_TRACK_MAJOR) base_amt = ROUNDSTART_MAJOR_BASE - gain_amt = ROUNDSTART_MAJOR_GAIN - if(EVENT_TRACK_ROLESET) - base_amt = ROUNDSTART_ROLESET_BASE - gain_amt = ROUNDSTART_ROLESET_GAIN - if(EVENT_TRACK_OBJECTIVES) - base_amt = ROUNDSTART_OBJECTIVES_BASE - gain_amt = ROUNDSTART_OBJECTIVES_GAIN - var/calc_value = base_amt + (gain_amt * ready_players) + if(EVENT_TRACK_CREWSET) + base_amt = ROUNDSTART_CREWSET_BASE + if(EVENT_TRACK_GHOSTSET) + base_amt = ROUNDSTART_GHOSTSET_BASE + var/calc_value = base_amt calc_value *= roundstart_point_multipliers[track] calc_value *= storyteller.starting_point_multipliers[track] - calc_value *= (rand(100 - storyteller.roundstart_points_variance,100 + storyteller.roundstart_points_variance)/100) - event_track_points[track] = round(calc_value) + calc_value *= (1 + (rand(-storyteller.roundstart_points_variance, storyteller.roundstart_points_variance) / 100)) + event_track_points[track] = max(0, round(calc_value)) /// If the storyteller guarantees an antagonist roll, add points to make it so. - if(storyteller.guarantees_roundstart_roleset && event_track_points[EVENT_TRACK_ROLESET] < point_thresholds[EVENT_TRACK_ROLESET]) - event_track_points[EVENT_TRACK_ROLESET] = point_thresholds[EVENT_TRACK_ROLESET] + if(storyteller.guarantees_roundstart_crewset) + event_track_points[EVENT_TRACK_CREWSET] = point_thresholds[EVENT_TRACK_CREWSET] /// If we have any forced events, ensure we get enough points for them for(var/track in event_tracks) if(forced_next_events[track] && event_track_points[track] < point_thresholds[track]) event_track_points[track] = point_thresholds[track] -/// At this point we've rolled roundstart events and antags and we handle leftover points here. -/datum/controller/subsystem/gamemode/proc/handle_post_setup_points() - for(var/track in event_track_points) //Just halve the points for now. - event_track_points[track] *= 0.5 - /// Because roundstart events need 2 steps of firing for purposes of antags, here is the first step handled, happening before occupation division. /datum/controller/subsystem/gamemode/proc/handle_pre_setup_roundstart_events() if(storyteller.disable_distribution) @@ -416,27 +397,6 @@ SUBSYSTEM_DEF(gamemode) med_crew++ if(player_role.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY) sec_crew++ - update_pop_scaling() - -/datum/controller/subsystem/gamemode/proc/update_pop_scaling() - for(var/track in event_tracks) - var/low_pop_bound = min_pop_thresholds[track] - var/high_pop_bound = pop_scale_thresholds[track] - var/scale_penalty = pop_scale_penalties[track] - - var/perceived_pop = min(max(low_pop_bound, active_players), high_pop_bound) - - var/divisor = high_pop_bound - low_pop_bound - /// If the bounds are equal, we'd be dividing by zero or worse, if upper is smaller than lower, we'd be increasing the factor, just make it 1 and continue. - /// this is only a problem for bad configs - if(divisor <= 0) - current_pop_scale_multipliers[track] = 1 - continue - var/scalar = (perceived_pop - low_pop_bound) / divisor - var/penalty = scale_penalty - (scale_penalty * scalar) - var/calculated_multiplier = 1 - (penalty / 100) - - current_pop_scale_multipliers[track] = calculated_multiplier /datum/controller/subsystem/gamemode/proc/TriggerEvent(datum/round_event_control/event) . = event.preRunEvent() @@ -519,7 +479,7 @@ SUBSYSTEM_DEF(gamemode) ///Attempts to select players for special roles the mode might have. /datum/controller/subsystem/gamemode/proc/pre_setup() // We need to do this to prevent some niche fuckery... and make dep. orders work. Lol - SSjob.ResetOccupations() + SSjob.reset_occupations() calculate_ready_players() roll_pre_setup_points() handle_pre_setup_roundstart_events() @@ -550,7 +510,6 @@ SUBSYSTEM_DEF(gamemode) qdel(query_round_game_mode) addtimer(CALLBACK(src, PROC_REF(send_trait_report)), rand(1 MINUTES, 5 MINUTES)) handle_post_setup_roundstart_events() - handle_post_setup_points() roundstart_event_view = FALSE return TRUE @@ -676,26 +635,20 @@ SUBSYSTEM_DEF(gamemode) point_gain_multipliers[EVENT_TRACK_MUNDANE] = CONFIG_GET(number/mundane_point_gain_multiplier) point_gain_multipliers[EVENT_TRACK_MODERATE] = CONFIG_GET(number/moderate_point_gain_multiplier) point_gain_multipliers[EVENT_TRACK_MAJOR] = CONFIG_GET(number/major_point_gain_multiplier) - point_gain_multipliers[EVENT_TRACK_ROLESET] = CONFIG_GET(number/roleset_point_gain_multiplier) - point_gain_multipliers[EVENT_TRACK_OBJECTIVES] = CONFIG_GET(number/objectives_point_gain_multiplier) + point_gain_multipliers[EVENT_TRACK_CREWSET] = CONFIG_GET(number/crewset_point_gain_multiplier) + point_gain_multipliers[EVENT_TRACK_GHOSTSET] = CONFIG_GET(number/ghostset_point_gain_multiplier) roundstart_point_multipliers[EVENT_TRACK_MUNDANE] = CONFIG_GET(number/mundane_roundstart_point_multiplier) roundstart_point_multipliers[EVENT_TRACK_MODERATE] = CONFIG_GET(number/moderate_roundstart_point_multiplier) roundstart_point_multipliers[EVENT_TRACK_MAJOR] = CONFIG_GET(number/major_roundstart_point_multiplier) - roundstart_point_multipliers[EVENT_TRACK_ROLESET] = CONFIG_GET(number/roleset_roundstart_point_multiplier) - roundstart_point_multipliers[EVENT_TRACK_OBJECTIVES] = CONFIG_GET(number/objectives_roundstart_point_multiplier) + roundstart_point_multipliers[EVENT_TRACK_CREWSET] = CONFIG_GET(number/crewset_roundstart_point_multiplier) + roundstart_point_multipliers[EVENT_TRACK_GHOSTSET] = CONFIG_GET(number/ghostset_roundstart_point_multiplier) min_pop_thresholds[EVENT_TRACK_MUNDANE] = CONFIG_GET(number/mundane_min_pop) min_pop_thresholds[EVENT_TRACK_MODERATE] = CONFIG_GET(number/moderate_min_pop) min_pop_thresholds[EVENT_TRACK_MAJOR] = CONFIG_GET(number/major_min_pop) - min_pop_thresholds[EVENT_TRACK_ROLESET] = CONFIG_GET(number/roleset_min_pop) - min_pop_thresholds[EVENT_TRACK_OBJECTIVES] = CONFIG_GET(number/objectives_min_pop) - - point_thresholds[EVENT_TRACK_MUNDANE] = CONFIG_GET(number/mundane_point_threshold) - point_thresholds[EVENT_TRACK_MODERATE] = CONFIG_GET(number/moderate_point_threshold) - point_thresholds[EVENT_TRACK_MAJOR] = CONFIG_GET(number/major_point_threshold) - point_thresholds[EVENT_TRACK_ROLESET] = CONFIG_GET(number/roleset_point_threshold) - point_thresholds[EVENT_TRACK_OBJECTIVES] = CONFIG_GET(number/objectives_point_threshold) + min_pop_thresholds[EVENT_TRACK_CREWSET] = CONFIG_GET(number/crewset_min_pop) + min_pop_thresholds[EVENT_TRACK_GHOSTSET] = CONFIG_GET(number/ghostset_min_pop) /datum/controller/subsystem/gamemode/proc/storyteller_vote_choices() var/client_amount = GLOB.clients.len @@ -703,7 +656,7 @@ SUBSYSTEM_DEF(gamemode) for(var/storyteller_type in storytellers) var/datum/storyteller/storyboy = storytellers[storyteller_type] /// Prevent repeating storytellers - if(storyboy.name == SSpersistence.last_storyteller) + if(storyboy.storyteller_type && storyboy.storyteller_type == SSpersistence.last_storyteller_type) continue if(!storyboy.votable) continue @@ -717,9 +670,6 @@ SUBSYSTEM_DEF(gamemode) /datum/controller/subsystem/gamemode/proc/storyteller_vote_result(winner_name) /// Find the winner - /// Hijacking the proc because we don't have a vote right now.. -/* var/datum/storyteller/storyteller = pick(storytellers) - message_admins("We picked [storyteller]") */ voted_storyteller = winner_name if(storyteller) return @@ -744,6 +694,14 @@ SUBSYSTEM_DEF(gamemode) message_admins("Attempted to set an invalid storyteller type: [passed_type].") CRASH("Attempted to set an invalid storyteller type: [passed_type].") storyteller = storytellers[passed_type] + + var/datum/storyteller_data/tracks/track_data = storyteller.track_data + point_thresholds[EVENT_TRACK_MUNDANE] = track_data.threshold_mundane * CONFIG_GET(number/mundane_point_threshold) + point_thresholds[EVENT_TRACK_MODERATE] = track_data.threshold_moderate * CONFIG_GET(number/moderate_point_threshold) + point_thresholds[EVENT_TRACK_MAJOR] = track_data.threshold_major * CONFIG_GET(number/major_point_threshold) + point_thresholds[EVENT_TRACK_CREWSET] = track_data.threshold_crewset * CONFIG_GET(number/crewset_point_threshold) + point_thresholds[EVENT_TRACK_GHOSTSET] = track_data.threshold_ghostset * CONFIG_GET(number/ghostset_point_threshold) + to_chat(world, span_notice("Storyteller is [storyteller.name]!")) to_chat(world, span_notice("[storyteller.welcome_text]")) diff --git a/modular_zubbers/code/modules/storyteller/storyteller_vote.dm b/modular_zubbers/code/modules/storyteller/storyteller_vote.dm index 99c3479e4a4ec..42a4ca665e320 100644 --- a/modular_zubbers/code/modules/storyteller/storyteller_vote.dm +++ b/modular_zubbers/code/modules/storyteller/storyteller_vote.dm @@ -9,6 +9,7 @@ has_desc = TRUE count_method = VOTE_COUNT_METHOD_MULTI winner_method = VOTE_WINNER_METHOD_SIMPLE + vote_reminder = TRUE /datum/vote/storyteller/New() . = ..() @@ -21,7 +22,7 @@ /datum/vote/storyteller/create_vote() . = ..() - if((length(choices) == 1)) // Only one choice, no need to vote. Let's just auto-rotate it to the only remaining map because it would just happen anyways. + if((length(choices) == 1)) // Only one choice, no need to vote. var/de_facto_winner = choices[1] SSgamemode.storyteller_vote_result(de_facto_winner) to_chat(world, span_boldannounce("The storyteller vote has been skipped because there is only one storyteller left to vote for. The storyteller has been changed to [de_facto_winner].")) @@ -43,7 +44,7 @@ /* ### PERSISTENCE SUBSYSTEM TRACKING BELOW ### Basically, this keeps track of what we voted last time to prevent it being voted on again. -For this, we use the SSpersistence.last_storyteller variable +For this, we use the SSpersistence.last_storyteller_type variable We then just check what the last one is in SSgamemode.storyteller_vote_choices() */ @@ -53,16 +54,16 @@ We then just check what the last one is in SSgamemode.storyteller_vote_choices() /// Extends collect_data /datum/controller/subsystem/persistence/collect_data() . = ..() - collect_storyteller() + collect_storyteller_type() -/// Loads last storyteller into last_storyteller -/datum/controller/subsystem/persistence/proc/load_storyteller() +/// Loads last storyteller into last_storyteller_type +/datum/controller/subsystem/persistence/proc/load_storyteller_type() if(!fexists(STORYTELLER_LAST_FILEPATH)) return - last_storyteller = file2text(STORYTELLER_LAST_FILEPATH) + last_storyteller_type = text2num(file2text(STORYTELLER_LAST_FILEPATH)) /// Collects current storyteller and stores it -/datum/controller/subsystem/persistence/proc/collect_storyteller() - rustg_file_write("[SSgamemode.storyteller.name]", STORYTELLER_LAST_FILEPATH) +/datum/controller/subsystem/persistence/proc/collect_storyteller_type() + rustg_file_write("[SSgamemode.storyteller.storyteller_type]", STORYTELLER_LAST_FILEPATH) #undef STORYTELLER_LAST_FILEPATH diff --git a/modular_zubbers/code/modules/storyteller/storytellers/data/_track.dm b/modular_zubbers/code/modules/storyteller/storytellers/data/_track.dm new file mode 100644 index 0000000000000..1361463626ffb --- /dev/null +++ b/modular_zubbers/code/modules/storyteller/storytellers/data/_track.dm @@ -0,0 +1,10 @@ +// A point is added every second, adjust new track threshold overrides accordingly + +/// Storyteller track data, for easy overriding of tracks without having to copypaste +/// thresholds - Used to show how many points the track has to collect before it triggers, lower means faster +/datum/storyteller_data/tracks + var/threshold_mundane = 900 + var/threshold_moderate = 1800 + var/threshold_major = 8000 + var/threshold_crewset = 1200 + var/threshold_ghostset = 7000 diff --git a/modular_zubbers/code/modules/storyteller/storytellers/_storyteller.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/_storyteller.dm similarity index 81% rename from modular_zubbers/code/modules/storyteller/storytellers/_storyteller.dm rename to modular_zubbers/code/modules/storyteller/storytellers/tellers/_storyteller.dm index 3a75bcb116452..942b49d6a692b 100644 --- a/modular_zubbers/code/modules/storyteller/storytellers/_storyteller.dm +++ b/modular_zubbers/code/modules/storyteller/storytellers/tellers/_storyteller.dm @@ -8,33 +8,28 @@ var/welcome_text = "The storyteller has been selected. Get ready!" /// This is the multiplier for repetition penalty in event weight. The lower the harsher it is var/event_repetition_multiplier = 0.6 - /// Multipliers for starting points. + /// Multipliers for starting points. // TODO - Rewrite into some variation var/list/starting_point_multipliers = list( EVENT_TRACK_MUNDANE = 1, EVENT_TRACK_MODERATE = 1, EVENT_TRACK_MAJOR = 1, - EVENT_TRACK_ROLESET = 1, - EVENT_TRACK_OBJECTIVES = 1 - ) - /// Multipliers for point gains. - var/list/point_gains_multipliers = list( - EVENT_TRACK_MUNDANE = 1, - EVENT_TRACK_MODERATE = 1, - EVENT_TRACK_MAJOR = 1, - EVENT_TRACK_ROLESET = 1, - EVENT_TRACK_OBJECTIVES = 1 + EVENT_TRACK_CREWSET = 1, + EVENT_TRACK_GHOSTSET = 1 ) + /// The datum containing track size data + var/datum/storyteller_data/tracks/track_data = /datum/storyteller_data/tracks + + /// Percentual variance in the budget of roundstart points. + var/roundstart_points_variance = 30 + /// Multipliers of weight to apply for each tag of an event. var/list/tag_multipliers - /// Variance in cost of the purchased events. Effectively affects frequency of events - var/cost_variance = 15 - - /// Variance in the budget of roundstart points. - var/roundstart_points_variance = 15 + /// Percentual variance in cost of the purchased events. Effectively affects frequency of events + var/cost_variance = 30 - /// Whether the storyteller guaranteed a roleset roll (antag) on roundstart. (Still needs to pass pop check) - var/guarantees_roundstart_roleset = TRUE + /// Whether the storyteller guaranteed a crewset roll (crew antag) on roundstart. (Still needs to pass pop check) + var/guarantees_roundstart_crewset = TRUE /// Whether the storyteller has the distributions disabled. Important for ghost storytellers var/disable_distribution = FALSE @@ -48,6 +43,9 @@ /// The antag divisor, the higher it is the lower the antag cap gets. Basically means "for every antag_divisor crew, spawn 1 antag". var/antag_divisor = 8 + /// Two tellers of the same intensity group can't run in 2 consecutive rounds + var/storyteller_type = STORYTELLER_TYPE_ALWAYS_AVAILABLE + /datum/storyteller/process(delta_time) if(disable_distribution) return @@ -57,11 +55,8 @@ /// Add points to all tracks while respecting the multipliers. /datum/storyteller/proc/add_points(delta_time) var/datum/controller/subsystem/gamemode/mode = SSgamemode - var/base_point = EVENT_POINT_GAINED_PER_SECOND * delta_time * mode.event_frequency_multiplier for(var/track in mode.event_track_points) - var/point_gain = base_point * point_gains_multipliers[track] * mode.point_gain_multipliers[track] - if(mode.allow_pop_scaling) - point_gain *= mode.current_pop_scale_multipliers[track] + var/point_gain = delta_time mode.event_track_points[track] += point_gain mode.last_point_gains[track] = point_gain @@ -119,8 +114,8 @@ // Perhaps use some bell curve instead of a flat variance? var/total_cost = bought_event.cost * mode.point_thresholds[track] if(!bought_event.roundstart) - total_cost *= (1 + (rand(-cost_variance, cost_variance)/100)) //Apply cost variance if not roundstart event - mode.event_track_points[track] -= total_cost + total_cost *= (1 - (rand(0, cost_variance) / 100)) //Apply cost variance if not roundstart event + mode.event_track_points[track] = max(0, mode.event_track_points[track] - total_cost) message_admins("Storyteller purchased and triggered [bought_event] event, on [track] track, for [total_cost] cost.") log_admin("Storyteller purchased and triggered [bought_event] event, on [track] track, for [total_cost] cost.") if(bought_event.roundstart) @@ -130,8 +125,7 @@ /// Calculates the weights of the events from a passed track. /datum/storyteller/proc/calculate_weights(track) - var/datum/controller/subsystem/gamemode/mode = SSgamemode - for(var/datum/round_event_control/event as anything in mode.event_pools[track]) + for(var/datum/round_event_control/event as anything in SSgamemode.event_pools[track]) var/weight_total = event.weight /// Apply tag multipliers if able if(tag_multipliers) diff --git a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_destructive.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_bomb.dm similarity index 52% rename from modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_destructive.dm rename to modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_bomb.dm index 5d43f865b6c6a..94044e9938216 100644 --- a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_destructive.dm +++ b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_bomb.dm @@ -1,16 +1,17 @@ -/datum/storyteller/destructive +/datum/storyteller/bomb name = "The Bomb" desc = "The Bomb will try to make as many destructive events as possible. For when you have a full engineering team. Or not, because they all cryo'd." welcome_text = "Somebody set up us the bomb." - point_gains_multipliers = list( - EVENT_TRACK_MUNDANE = 0.5, - EVENT_TRACK_MODERATE = 1.4, - EVENT_TRACK_MAJOR = 1.5, - EVENT_TRACK_ROLESET = 1, - EVENT_TRACK_OBJECTIVES = 0.8 - ) + track_data = /datum/storyteller_data/tracks/bomb + tag_multipliers = list( - TAG_DESTRUCTIVE = 2.5 + TAG_DESTRUCTIVE = 2 ) population_min = 25 antag_divisor = 10 + storyteller_type = STORYTELLER_TYPE_INTENSE + +/datum/storyteller_data/tracks/bomb + threshold_mundane = 1800 + threshold_moderate = 1400 + threshold_major = 5500 diff --git a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_peaceful.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_chill.dm similarity index 56% rename from modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_peaceful.dm rename to modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_chill.dm index a44ebd016074e..94a3fe28b9af6 100644 --- a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_peaceful.dm +++ b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_chill.dm @@ -1,18 +1,21 @@ -/datum/storyteller/peaceful +/datum/storyteller/chill name = "The Chill" desc = "The Chill will be light on events compared to other storytellers, especially so on ones involving combat, destruction, or chaos. Best for more chill rounds." welcome_text = "If you vote for this storyteller on Ice Box, you have no originality." - point_gains_multipliers = list( - EVENT_TRACK_MUNDANE = 1, - EVENT_TRACK_MODERATE = 0.7, - EVENT_TRACK_MAJOR = 0.7, - EVENT_TRACK_ROLESET = 0.7, - EVENT_TRACK_OBJECTIVES = 1, - ) - guarantees_roundstart_roleset = FALSE + + track_data = /datum/storyteller_data/tracks/chill + + guarantees_roundstart_crewset = FALSE tag_multipliers = list( TAG_COMBAT = 0.3, TAG_DESTRUCTIVE = 0.3, TAG_CHAOTIC = 0.1 ) antag_divisor = 32 + storyteller_type = STORYTELLER_TYPE_CALM + +/datum/storyteller_data/tracks/chill + threshold_mundane = 900 + threshold_moderate = 2700 + threshold_major = 10000 + threshold_crewset = 2400 diff --git a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_clown.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_clown.dm new file mode 100644 index 0000000000000..251e5fc3a429a --- /dev/null +++ b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_clown.dm @@ -0,0 +1,24 @@ +/datum/storyteller/clown + name = "The Clown" + desc = "The Clown will try to create the most events and antagonists out of all the storytellers, not caring for their weight. \ + As such, it can be truly chaotic and even end rounds prematurely." + welcome_text = "honk" + + track_data = /datum/storyteller_data/tracks/clown + + population_min = 50 + antag_divisor = 4 + storyteller_type = STORYTELLER_TYPE_INTENSE + +/datum/storyteller_data/tracks/clown + threshold_mundane = 700 + threshold_moderate = 1600 + threshold_major = 3200 + threshold_crewset = 1000 + threshold_ghostset = 3200 + +// All the weights are the same to the clown +/datum/storyteller/clown/calculate_weights(track) + for(var/datum/round_event_control/event as anything in SSgamemode.event_pools[track]) + if(event.weight) + event.calculated_weight = 1 diff --git a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_default.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_default.dm index 032aae5535ac4..7a994db6b64e6 100644 --- a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_default.dm +++ b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_default.dm @@ -3,3 +3,4 @@ desc = "Default Andy is the default Storyteller, and the comparison point for every other Storyteller. Best for an average, varied experience." welcome_text = "If I chopped you up in a meat grinder..." antag_divisor = 8 + storyteller_type = STORYTELLER_TYPE_ALWAYS_AVAILABLE diff --git a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_extended.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_extended.dm index 9879ca80a5439..a50398af3c7b4 100644 --- a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_extended.dm +++ b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_extended.dm @@ -5,3 +5,4 @@ disable_distribution = TRUE population_max = 40 antag_divisor = 32 + storyteller_type = STORYTELLER_TYPE_CALM diff --git a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_fragile.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_fragile.dm index e5e5ffa75e06f..26760d4ea2fb3 100644 --- a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_fragile.dm +++ b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_fragile.dm @@ -5,8 +5,18 @@ event_repetition_multiplier = 0.5 + track_data = /datum/storyteller_data/tracks/fragile + tag_multipliers = list( TAG_COMBAT = 0.5, TAG_DESTRUCTIVE = 0.1, TAG_CHAOTIC = 0.1 ) + storyteller_type = STORYTELLER_TYPE_CALM + +/datum/storyteller_data/tracks/fragile + threshold_mundane = 1200 + threshold_moderate = 1800 + threshold_major = 8000 + threshold_crewset = 3000 + threshold_ghostset = 8000 diff --git a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_combat.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_gamer.dm similarity index 51% rename from modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_combat.dm rename to modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_gamer.dm index fd21564c2327f..cdc428cbd7910 100644 --- a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_combat.dm +++ b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_gamer.dm @@ -1,17 +1,20 @@ -/datum/storyteller/combat +/datum/storyteller/gamer name = "The Gamer" desc = "The Gamer will try to create the most combat focused events, while trying to avoid purely destructive ones." welcome_text = "Welcome to the Gamer storyteller. Now with 50% more ahelps!" - point_gains_multipliers = list( - EVENT_TRACK_MUNDANE = 1, - EVENT_TRACK_MODERATE = 1.3, - EVENT_TRACK_MAJOR = 1.3, - EVENT_TRACK_ROLESET = 1, - EVENT_TRACK_OBJECTIVES = 1 - ) + + track_data = /datum/storyteller_data/tracks/gamer + tag_multipliers = list( TAG_COMBAT = 1.5, - TAG_DESTRUCTIVE = 0.5 + TAG_DESTRUCTIVE = 0.7, + TAG_CHAOTIC = 1.3 ) population_min = 35 antag_divisor = 5 + storyteller_type = STORYTELLER_TYPE_INTENSE + +/datum/storyteller_data/tracks/gamer + threshold_moderate = 1300 + threshold_major = 6150 + threshold_ghostset = 6000 diff --git a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_plenty.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_plenty.dm deleted file mode 100644 index 66bd25b0d616a..0000000000000 --- a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_plenty.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/storyteller/plenty - name = "The Clown" - desc = "The Clown will try to create the most events out of all the storytellers, regardless if you like it or not." - welcome_text = "honk" - event_repetition_multiplier = 0.8 - point_gains_multipliers = list( - EVENT_TRACK_MUNDANE = 1.2, - EVENT_TRACK_MODERATE = 1.4, - EVENT_TRACK_MAJOR = 1.4, - EVENT_TRACK_ROLESET = 1, - EVENT_TRACK_OBJECTIVES = 1 - ) - population_min = 35 - antag_divisor = 8 diff --git a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_predictable.dm b/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_predictable.dm deleted file mode 100644 index a32bb2ee49b85..0000000000000 --- a/modular_zubbers/code/modules/storyteller/storytellers/tellers/storyteller_predictable.dm +++ /dev/null @@ -1,158 +0,0 @@ -/datum/storyteller/predictable - name = "The Predictable Chaos" - desc = "The Predictable Chaos will attempt to spawn a lot of antagonists relative to the crew population, while also ensuring events roll every set amount of time. Expect minor events every 10 minutes, moderate events every 30 minutes, and major events every hour and a half." - welcome_text = "Waiter, more chaos! That's enough. Thank you, waiter." - population_min = 35 - - var/crew_per_antag = 20 //Basically this means for every 10 crew, spawn 1 antag. REMEMBER: This is CREW pop, NOT server pop - - tag_multipliers = list( - - TAG_COMBAT = 0.25, //Already got this from the constant antag spawns. - TAG_POSITIVE = 1.25, //Increase this even more if there is too much chaos in events. This is basically how you balance this storyteller. - - TAG_TARGETED = 0.25, //Let us not waste event rolls on single people every 5 or so minutes. - - TAG_OUTSIDER_ANTAG = 0.25, //BurgerBB was here. - - TAG_CHAOTIC = 0.75, //Already got this from the constant antag spawns. - - ) - - starting_point_multipliers = list( - EVENT_TRACK_MUNDANE = 2, - EVENT_TRACK_MODERATE = 2, - EVENT_TRACK_MAJOR = 2, - EVENT_TRACK_ROLESET = 2, - EVENT_TRACK_OBJECTIVES = 2 - ) - - point_gains_multipliers = list( - EVENT_TRACK_MUNDANE = 2, - EVENT_TRACK_MODERATE = 2, - EVENT_TRACK_MAJOR = 2, - EVENT_TRACK_ROLESET = 2, - EVENT_TRACK_OBJECTIVES = 2 - ) - - event_repetition_multiplier = 0.25 //Repeat events are boring. - - var/last_crew_score = 0 - var/last_antag_score = 0 - - var/antag_event_delay = 5 MINUTES - var/mundane_event_delay = 10 MINUTES - var/moderate_event_delay = 30 MINUTES - var/major_event_delay = 90 MINUTES - - COOLDOWN_DECLARE(antag_event_cooldown) - COOLDOWN_DECLARE(mundane_event_cooldown) - COOLDOWN_DECLARE(moderate_event_cooldown) - COOLDOWN_DECLARE(major_event_cooldown) - - -/datum/storyteller/predictable/New(...) - reset_cooldowns() - . = ..() - - -/datum/storyteller/predictable/proc/reset_cooldowns() - COOLDOWN_START(src, mundane_event_cooldown, mundane_event_delay) - COOLDOWN_START(src, moderate_event_cooldown, moderate_event_delay) - COOLDOWN_START(src, major_event_cooldown, major_event_delay) - - -//IF YOU EDIT THIS PROC, REMEMBER TO ALSO EDIT THE UNIT TESTS IN unit_tests/zubbers/predictable_storyteller.dm -/proc/storyteller_get_antag_to_crew_ratio(do_debug=FALSE,minds_to_use_override) - - var/total_crew_score = 0 - var/total_antagonist_score = 0 - - if(!minds_to_use_override) - minds_to_use_override = SSticker.minds - - var/medical_count = 0 - var/engineering_count = 0 - - for(var/datum/mind/mob_mind as anything in minds_to_use_override) - - if(do_debug) - if(!mob_mind.current) - continue - else - if(!mob_mind.key || !mob_mind.current) - continue - - var/antagonist_score = 0 - for(var/datum/antagonist/antag as anything in mob_mind.antag_datums) - if( !antag.show_in_antagpanel || (antag.antag_flags & FLAG_FAKE_ANTAG)) //For unimportant antags, like ashwalkers or valentines. You're not a real antag. - continue - antagonist_score += 1 - //We add to the total antagonist score later. - - if(mob_mind.assigned_role) - var/datum/job/current_job = mob_mind.assigned_role - if(current_job.faction == FACTION_STATION) //This means you're actually crew. - var/crew_score = 1 //You count as 1. - if(current_job.auto_deadmin_role_flags & DEADMIN_POSITION_SECURITY) - crew_score *= 2 - if(current_job.auto_deadmin_role_flags & DEADMIN_POSITION_HEAD) - crew_score *= 1.25 - if(antagonist_score > 0) - if(crew_score > 1) - antagonist_score *= crew_score //If you're an antagonist as an important role, then you're going to cause some chaos. - else - if(mob_mind.current && mob_mind.current.stat == DEAD) - crew_score *= -0.25 //If you're dead, then usually some chaos must be happening and you in fact are a slight burden towards the crew. - total_crew_score += crew_score - //Hacky nonsense here. Limits based on support roles. - //MEDICAL - if(current_job.supervisors == SUPERVISOR_CMO) - if(current_job.title == JOB_MEDICAL_DOCTOR) - medical_count += 1 - else - medical_count += 0.5 - //ENGINEERING - if(current_job.supervisors == SUPERVISOR_CE) - if(current_job.title == JOB_STATION_ENGINEER) - engineering_count += 1 - else - engineering_count += 0.5 - - if(antagonist_score) - total_antagonist_score += antagonist_score - - if(total_crew_score <= 0) - return INFINITY //Force infinity. - - total_crew_score = total_crew_score*0.75 + min(total_crew_score*0.25,engineering_count*10) //Up to 25% penalty if there are no engineers. - total_crew_score = total_crew_score*0.25 + min(total_crew_score*0.75,medical_count*10) //Up to 75% penalty if there are no medical doctors. - - return round(total_antagonist_score/total_crew_score,0.01) - - -/datum/storyteller/predictable/handle_tracks() - - if(!COOLDOWN_FINISHED(src,antag_event_cooldown)) //Don't want to run an antag event then suddenly have meteors. - return FALSE - - if(SSshuttle.emergency.mode == SHUTTLE_IDLE) //Only do serious shit if the emergency shuttle is at Central Command and not in transit. - if(storyteller_get_antag_to_crew_ratio() < (1/crew_per_antag) && find_and_buy_event_from_track(EVENT_TRACK_ROLESET)) - COOLDOWN_START(src,antag_event_cooldown,antag_event_delay) - return TRUE - if(COOLDOWN_FINISHED(src,major_event_cooldown) && find_and_buy_event_from_track(EVENT_TRACK_MAJOR)) - COOLDOWN_START(src, major_event_cooldown, major_event_delay) - COOLDOWN_START(src, moderate_event_cooldown, moderate_event_delay) - COOLDOWN_START(src, mundane_event_cooldown, mundane_event_delay) - return TRUE - - if(COOLDOWN_FINISHED(src,moderate_event_cooldown) && find_and_buy_event_from_track(EVENT_TRACK_MODERATE)) - COOLDOWN_START(src, moderate_event_cooldown, moderate_event_delay) - COOLDOWN_START(src, mundane_event_cooldown, mundane_event_delay) - return TRUE - - if(COOLDOWN_FINISHED(src,mundane_event_cooldown) && find_and_buy_event_from_track(EVENT_TRACK_MUNDANE)) - COOLDOWN_START(src, mundane_event_cooldown, mundane_event_delay) - return TRUE - - return FALSE diff --git a/modular_zubbers/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/modular_zubbers/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 440fb69ffbc70..459dc66201af9 100644 --- a/modular_zubbers/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/modular_zubbers/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -5,38 +5,38 @@ limb_id = SPECIES_SHADEKIN is_dimorphic = TRUE brute_modifier = 1.2 - burn_modifier = 1.1 + burn_modifier = 1.2 /obj/item/bodypart/chest/shadekin icon_greyscale = BODYPART_ICON_BUBBER limb_id = SPECIES_SHADEKIN is_dimorphic = TRUE brute_modifier = 1.2 - burn_modifier = 1.1 + burn_modifier = 1.2 /obj/item/bodypart/arm/left/shadekin icon_greyscale = BODYPART_ICON_BUBBER limb_id = SPECIES_SHADEKIN brute_modifier = 1.2 - burn_modifier = 1.1 + burn_modifier = 1.2 /obj/item/bodypart/arm/right/shadekin icon_greyscale = BODYPART_ICON_BUBBER limb_id = SPECIES_SHADEKIN brute_modifier = 1.2 - burn_modifier = 1.1 + burn_modifier = 1.2 /obj/item/bodypart/leg/left/shadekin icon_greyscale = BODYPART_ICON_BUBBER limb_id = SPECIES_SHADEKIN brute_modifier = 1.2 - burn_modifier = 1.1 + burn_modifier = 1.2 /obj/item/bodypart/leg/right/shadekin icon_greyscale = BODYPART_ICON_BUBBER limb_id = SPECIES_SHADEKIN brute_modifier = 1.2 - burn_modifier = 1.1 + burn_modifier = 1.2 // MUTANT HUMAN PART OVERRIDES - HEMOPHAGE AND HUMANOID SPRITE OVERRIDES// diff --git a/modular_zubbers/code/modules/surgery/organs/external/wings.dm b/modular_zubbers/code/modules/surgery/organs/external/wings.dm index ca823880cc9d7..131e37b1c2731 100644 --- a/modular_zubbers/code/modules/surgery/organs/external/wings.dm +++ b/modular_zubbers/code/modules/surgery/organs/external/wings.dm @@ -47,7 +47,7 @@ to_chat(owner, span_warning("There's far too little air for your wings to work against!")) return - if(owner.incapacitated()) + if(owner.incapacitated) return if(!COOLDOWN_FINISHED(src, dash_cooldown)) @@ -58,7 +58,7 @@ ADD_TRAIT(owner, TRAIT_MOVE_FLOATING, LEAPING_TRAIT) if (owner.throw_at(dash_target, jumpdistance, jumpspeed, spin = FALSE, diagonals_first = TRUE, callback = TRAIT_CALLBACK_REMOVE(owner, TRAIT_MOVE_FLOATING, LEAPING_TRAIT))) - playsound(owner, 'sound/voice/moth/moth_flutter.ogg', 50, TRUE, TRUE) + playsound(owner, 'sound/mobs/humanoids/moth/moth_flutter.ogg', 50, TRUE, TRUE) owner.visible_message(span_warning("[usr] propels themselves forwards with a heavy wingbeat!")) COOLDOWN_START(src, dash_cooldown, 6 SECONDS) var/mob/living/dash_user = owner @@ -90,65 +90,25 @@ spell_requirements = NONE antimagic_flags = NONE - hand_path = /obj/item/climbing_moth_wings + hand_path = /obj/item/climbing_hook/climbing_moth_wings draw_message = span_notice("You outstretch your wings, ready to climb upwards.") drop_message = span_notice("Your wings tuck back behind you.") -/obj/item/climbing_moth_wings +/obj/item/climbing_hook/climbing_moth_wings name = "outstretched wings" desc = "Useful for climbing up onto high places, though tiresome." icon = 'icons/mob/human/species/moth/moth_wings.dmi' icon_state = "m_moth_wings_monarch_BEHIND" - var/climb_time = 2.5 SECONDS - -/obj/item/climbing_moth_wings/examine(mob/user) - . = ..() - var/list/look_binds = user.client.prefs.key_bindings["look up"] - . += span_notice("Firstly, look upwards by holding [english_list(look_binds, nothing_text = "(nothing bound)", and_text = " or ", comma_text = ", or ")]!") - . += span_notice("Then, click solid ground adjacent to the hole above you.") - -/obj/item/climbing_moth_wings/afterattack(turf/open/target, mob/living/user, proximity_flag, click_parameters) - . = ..() - if(target.z == user.z) - return - if(!istype(target) || isopenspaceturf(target)) - return - - var/turf/user_turf = get_turf(user) - var/datum/gas_mixture/environment = user_turf.return_air() - var/turf/above = GET_TURF_ABOVE(user_turf) - if(target_blocked(target, above)) - return + climb_time = 2.5 SECONDS + force = 0 + throwforce = 0 + climbsound = 'sound/mobs/humanoids/moth/moth_flutter.ogg' + +/obj/item/climbing_hook/climbing_moth_wings/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + var/turf/check_turf = get_turf(user) + var/datum/gas_mixture/environment = check_turf.return_air() if(environment.return_pressure() < (HAZARD_LOW_PRESSURE)) to_chat(user, span_warning("There's far too little air for your wings to work against!")) - return - if(!isopenspaceturf(above) || !above.Adjacent(target)) //are we below a hole, is the target blocked, is the target adjacent to our hole - user.balloon_alert(user, "blocked!") - return - - var/away_dir = get_dir(above, target) - user.visible_message(span_notice("[user] begins pushing themselves upwards with their wings!"), span_notice("Your wings start fluttering violently as you begin going upwards.")) - playsound(target, 'sound/voice/moth/moth_flutter.ogg', 50) //plays twice so people above and below can hear - playsound(user_turf, 'sound/voice/moth/moth_flutter.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.forceMove(target) - user.adjustStaminaLoss(100) - playsound(user_turf, 'sound/voice/moth/moth_flutter.ogg', 50) //a third time for seasoning - QDEL_LIST(effects) - -/obj/item/climbing_moth_wings/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 + return ITEM_INTERACT_BLOCKING + . = ..() + qdel(src) diff --git a/modular_zubbers/code/modules/syndicate_offstation/code/misc-fluff/research.dm b/modular_zubbers/code/modules/syndicate_offstation/code/misc-fluff/research.dm new file mode 100644 index 0000000000000..e6c539d9e5245 --- /dev/null +++ b/modular_zubbers/code/modules/syndicate_offstation/code/misc-fluff/research.dm @@ -0,0 +1,174 @@ +///// Bubber added Syndicate Tech ///// + +///// First we enstate a techweb so we can add the node. ///// +/datum/techweb/interdyne + id = "INTERDYNE" + organization = "Interdyne Pharmaceutics" + should_generate_points = TRUE + +/datum/techweb/interdyne/New() + . = ..() + research_node_id("oldstation_surgery", TRUE, TRUE, FALSE) + research_node_id("interdyne_tech", TRUE, TRUE, FALSE) + +//techweb nodes +/datum/techweb_node/interdyne + id = "interdyne_tech" + display_name = "Syndicate Technology" + description = "Tools used by the Syndicate." + required_items_to_unlock = list( + /obj/item/circuitboard/machine/syndiepad, + /obj/item/circuitboard/computer/cargo/express/interdyne, + /obj/item/circuitboard/computer/syndiepad, + /obj/item/circuitboard/machine/powerator/interdyne + + ) + design_ids = list( + "cargoconsole_syndicate", + "bountypad_syndicate", + "bountyconsole_syndicate", + "powerator_syndicate", + "exofab_syndicate", + "syndicate_firing_pin", + "syndicate_headset" + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + +//specific techweb designs + +//Circuit boards +/datum/design/syndicate_express_console + name = "Syndicate Express Cargo Console" + desc = "The circuit board for a computer used to purchase goods." + id = "cargoconsole_syndicate" + build_type = AWAY_IMPRINTER + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1) + build_path = /obj/item/circuitboard/computer/cargo/express/interdyne + category = list( + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO + +/datum/design/syndicate_bounty_pad + name = "Syndicate Bounty Pad" + desc = "The circuit board for a machine used to sell goods." + id = "bountypad_syndicate" + build_type = AWAY_IMPRINTER + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1) + build_path = /obj/item/circuitboard/machine/syndiepad + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_CONSTRUCTION_MACHINERY + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO + +/datum/design/syndicate_bounty_pad_console + name = "Syndicate Express Cargo Console" + desc = "The circuit board for the used to sell goods to the various companies in the Syndicate." + id = "bountyconsole_syndicate" + build_type = AWAY_IMPRINTER + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1) + build_path = /obj/item/circuitboard/computer/syndiepad + category = list( + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO + +/datum/design/syndicate_powerator + name = "Syndicate Powerator" + desc = "The circuit board for a machine that can sell power." + id = "powerator_syndicate" + build_type = AWAY_IMPRINTER + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1) + build_path = /obj/item/circuitboard/machine/powerator/interdyne + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_CONSTRUCTION_MACHINERY + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO + +/datum/design/syndicate_exofab + name = "Syndicate_Exofab" + desc = "The circuit board for a standard issue exofab produced by Interdyne." + id = "exofab_syndicate" + build_type = AWAY_IMPRINTER + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1) + build_path = /obj/item/circuitboard/machine/mechfab/interdyne + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_CONSTRUCTION_MACHINERY + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +//Items +/datum/design/syndicate_firing_pin + name = "Syndicate Firing Pin" + desc = "A Syndicate Implant restricted firing pin." + id = "syndicate_firing_pin" + build_type = PROTOLATHE + materials = list(/datum/material/silver = SMALL_MATERIAL_AMOUNT * 6, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 6, /datum/material/uranium =SMALL_MATERIAL_AMOUNT * 2) + build_path =/obj/item/firing_pin/implant/pindicate + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_FIRING_PINS + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/interdyne_headset + name = "Interdyne Headset" + desc = "Standard issue headset for syndicate civillians." + id = "syndicate_headset" + build_type = PROTOLATHE + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*1) + build_path = /obj/item/radio/headset/interdyne + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_FIRING_PINS + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +//Syndicate Machinery Boards + +/obj/machinery/rnd/production/protolathe/interdyne + name = "Interdyne Branded Protolathe" + desc = "Converts raw materials into useful objects. Refurbished and updated from its previous, limited capabilities." + circuit = /obj/item/circuitboard/machine/protolathe/interdyne + stripe_color = "#d40909" + +/obj/item/circuitboard/machine/protolathe/interdyne + name = "Interdyne Branded Protolathe" + greyscale_colors = CIRCUIT_COLOR_SECURITY + build_path = /obj/machinery/rnd/production/protolathe/interdyne + +//Adding the actual physical Server + +/obj/item/circuitboard/machine/rdserver/interdyne + name = "Interdyne Pharmaceutics R&D Server" + build_path = /obj/machinery/rnd/server/interdyne + +/obj/machinery/rnd/server/interdyne + name = "\improper Interdyne Pharmaceutics R&D Server" + circuit = /obj/item/circuitboard/machine/rdserver/interdyne + req_access = list(ACCESS_RESEARCH) + +/obj/machinery/rnd/server/interdyne/Initialize(mapload) + var/datum/techweb/interdyne_techweb = locate(/datum/techweb/interdyne) in SSresearch.techwebs + stored_research = interdyne_techweb + return ..() + +/obj/machinery/rnd/server/interdyne/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(held_item && istype(held_item, /obj/item/research_notes)) + context[SCREENTIP_CONTEXT_LMB] = "Generate research points" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/rnd/server/interdyne/examine(mob/user) + . = ..() + if(!in_range(user, src) && !isobserver(user)) + return + . += span_notice("Insert [EXAMINE_HINT("Research Notes")] to generate points.") + +/obj/machinery/rnd/server/interdyne/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/research_notes) && stored_research) + var/obj/item/research_notes/research_notes = attacking_item + stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = research_notes.value)) + playsound(src, 'sound/machines/copier.ogg', 50, TRUE) + qdel(research_notes) + return + return ..() diff --git a/modular_zubbers/code/modules/tarkon/code/misc-fluff/research.dm b/modular_zubbers/code/modules/tarkon/code/misc-fluff/research.dm new file mode 100644 index 0000000000000..30e373ba071d3 --- /dev/null +++ b/modular_zubbers/code/modules/tarkon/code/misc-fluff/research.dm @@ -0,0 +1,48 @@ +///// Bubber added Tarkon Tech ///// +/datum/design/tarkonpowerator + name = "Tarkon Powerator" + desc = "The circuit board for a machine that can sell power." + id = "powerator_tarkon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1) + build_path = /obj/item/circuitboard/machine/powerator/tarkon + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/tarkonexpressconsole + name = "Tarkon Express Cargo Console" + desc = "The circuit board for a computer used to purchase goods." + id = "cargoconsole_tarkon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1) + build_path = /obj/item/circuitboard/computer/cargo/express/interdyne/tarkon + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/bountypad + name = "Tarkon Bounty Pad" + desc = "The circuit board for a machine used to sell goods." + id = "bountypad_tarkon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1) + build_path = /obj/item/circuitboard/machine/syndiepad/tarkon + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/bountypadconsole + name = "Tarkon Express Cargo Console" + desc = "The circuit board for the Ta used to sell goods." + id = "bountyconsole_tarkon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1) + build_path = /obj/item/circuitboard/computer/syndiepad/tarkon + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING diff --git a/modular_zubbers/code/modules/taur_mechanics/serpentine_taur.dm b/modular_zubbers/code/modules/taur_mechanics/serpentine_taur.dm index a09fe1e296a75..fb0822e965a12 100644 --- a/modular_zubbers/code/modules/taur_mechanics/serpentine_taur.dm +++ b/modular_zubbers/code/modules/taur_mechanics/serpentine_taur.dm @@ -1,12 +1,13 @@ /obj/item/organ/external/taur_body/serpentine/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags) . = ..() - organ_owner.RemoveElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 0.6, -6) + // These args must be the same as the args used to add the basic human footstep! + organ_owner.RemoveElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 1, -6) organ_owner.AddElement(/datum/element/footstep, FOOTSTEP_MOB_SNAKE, 15, -6) /obj/item/organ/external/taur_body/serpentine/on_mob_remove(mob/living/carbon/organ_owner, special, movement_flags) organ_owner.RemoveElement(/datum/element/footstep, FOOTSTEP_MOB_SNAKE, 15, -6) - organ_owner.AddElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 0.6, -6) + organ_owner.AddElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 1, -6) return ..() diff --git a/modular_zubbers/code/modules/vehicles/mech_fabricator.dm b/modular_zubbers/code/modules/vehicles/mech_fabricator.dm index 4e55344248ab1..c87271027436f 100644 --- a/modular_zubbers/code/modules/vehicles/mech_fabricator.dm +++ b/modular_zubbers/code/modules/vehicles/mech_fabricator.dm @@ -17,7 +17,7 @@ illegal_local_designs |= illegal_mech_design cached_designs |= illegal_mech_design say("R$c!i&ed ERROR de#i$ns. C@n%ec$%ng to ~NULL~ se%ve$s.") - playsound(src, 'sound/machines/uplinkerror.ogg', 50, TRUE) + playsound(src, 'sound/machines/uplink/uplinkerror.ogg', 50, TRUE) update_static_data_for_all_viewers() return TRUE else diff --git a/modular_zubbers/code/modules/vending/armadyne.dm b/modular_zubbers/code/modules/vending/armadyne.dm index 4f5c8fcb6816a..bf91c020dbc67 100644 --- a/modular_zubbers/code/modules/vending/armadyne.dm +++ b/modular_zubbers/code/modules/vending/armadyne.dm @@ -1,4 +1,9 @@ /obj/machinery/vending/security + zubbers_premium = list( + /obj/item/storage/belt/security/webbing/peacekeeper/armadyne = 3, + /obj/item/storage/belt/security/peacekeeper/armadyne = 3, + ) + zubbers_contraband = list( /obj/item/clothing/neck/kink_collar/locked/gps = 3, ) diff --git a/modular_zubbers/code/modules/vending/clothmate.dm b/modular_zubbers/code/modules/vending/clothmate.dm index d1ebe2e22cdbe..c1371007e1063 100644 --- a/modular_zubbers/code/modules/vending/clothmate.dm +++ b/modular_zubbers/code/modules/vending/clothmate.dm @@ -63,6 +63,8 @@ /obj/item/clothing/suit/hooded/sigmarcoat = 5, /obj/item/clothing/suit/jacket/skyy = 5, /obj/item/clothing/suit/jacket/tailcoat = 5, + /obj/item/clothing/under/dress/skirt/skyrat/black_skirt = 5, + /obj/item/clothing/suit/misc/suit_harness = 5, ), ), diff --git a/modular_zubbers/code/modules/vending/lustwish.dm b/modular_zubbers/code/modules/vending/lustwish.dm index 4cae04f1aefa2..ca9b9485801b5 100644 --- a/modular_zubbers/code/modules/vending/lustwish.dm +++ b/modular_zubbers/code/modules/vending/lustwish.dm @@ -18,6 +18,8 @@ /obj/item/clothing/neck/tie/bunnytie = 6, /obj/item/clothing/under/costume/playbunny = 6, /obj/item/clothing/suit/jacket/tailcoat = 6, + /obj/item/clothing/under/costume/loincloth/sensor = 6, + /obj/item/clothing/under/costume/loincloth/cloth/sensor = 6, ) ) ) diff --git a/modular_zubbers/code/modules/vending/multisec.dm b/modular_zubbers/code/modules/vending/multisec.dm index 952e4fec317fa..3c458bff908b0 100644 --- a/modular_zubbers/code/modules/vending/multisec.dm +++ b/modular_zubbers/code/modules/vending/multisec.dm @@ -38,6 +38,7 @@ /obj/item/clothing/head/hats/warden/police/patrol = 6, /obj/item/clothing/head/costume/ushanka/sec = 10, /obj/item/clothing/gloves/color/black/security = 10, + /obj/item/clothing/head/helmet/sec/futuristic = 6, ), ), list( @@ -68,6 +69,9 @@ /obj/item/clothing/suit/armor/security_tailcoat/assistant = 6, /obj/item/clothing/neck/tie/bunnytie/security_assistant = 6, /obj/item/clothing/mask/bandana/red = 6, + /obj/item/clothing/neck/pauldron = 6, + /obj/item/clothing/neck/pauldron/commander = 6, + /obj/item/clothing/neck/pauldron/captain = 6, /obj/item/clothing/gloves/color/black = 6, /obj/item/clothing/gloves/combat/peacekeeper/armadyne = 6, /obj/item/clothing/under/rank/security/officer/skirt = 6, @@ -88,6 +92,7 @@ /obj/item/clothing/suit/toggle/labcoat/skyrat/security_medic/blue = 3, /obj/item/clothing/suit/hazardvest/security_medic/blue = 3, /obj/item/clothing/head/helmet/sec/peacekeeper/security_medic = 3, + /obj/item/clothing/head/beret/sec/peacekeeper/security_medic = 3, /obj/item/clothing/head/playbunnyears/brig_phys = 3, /obj/item/clothing/under/rank/security/brig_phys_bunnysuit = 3, /obj/item/clothing/suit/toggle/labcoat/doctor_tailcoat/sec = 3, @@ -127,7 +132,7 @@ /obj/item/clothing/glasses/hud/eyepatch/sec/blindfold = 3, //Ditto /obj/item/clothing/glasses/hud/ar/aviator/security = 3, //Printable, but you have to choose between HUD and flash protection. /obj/item/clothing/glasses/hud/ar/projector/security = 3, - /obj/item/clothing/mask/gas/sechailer/half_mask = 3, + /obj/item/clothing/mask/gas/half_mask = 3, /obj/item/clothing/under/rank/prisoner/classic = 6, //To be given to Prisoners. /obj/item/clothing/head/playbunnyears/prisoner = 6, /obj/item/clothing/under/rank/security/prisoner_bunnysuit = 6, diff --git a/modular_zubbers/code/modules/vetted/vetted.dm b/modular_zubbers/code/modules/vetted/vetted.dm index cfe18bf156397..7f9d537619a5a 100644 --- a/modular_zubbers/code/modules/vetted/vetted.dm +++ b/modular_zubbers/code/modules/vetted/vetted.dm @@ -1,11 +1,14 @@ +GLOBAL_LIST_EMPTY(vetted_list_legacy) +GLOBAL_PROTECT(vetted_list_legacy) GLOBAL_LIST_EMPTY(vetted_list) GLOBAL_PROTECT(vetted_list) - /datum/controller/subsystem/player_ranks + var/loaded_vetted_sql = FALSE /datum/player_rank_controller/vetted rank_title = "vetted user" var/file_path_vetted + /datum/controller/subsystem/player_ranks/proc/is_vetted(client/user, admin_bypass = TRUE) if(!istype(user)) CRASH("Invalid user type provided to is_vetted(), expected 'client' and obtained '[user ? user.type : "null"]'.") @@ -24,33 +27,87 @@ GLOBAL_PROTECT(vetted_list) /datum/controller/subsystem/player_ranks/proc/load_vetted_ckeys() PROTECTED_PROC(TRUE) - + if(loaded_vetted_sql) + return if(IsAdminAdvancedProcCall()) return vetted_controller = new vetted_controller.file_path_vetted = "[global.config.directory]/bubbers/vetted_players.txt" - for(var/line in world.file2list(vetted_controller.file_path_vetted)) - if(!line) - continue + ASYNC + for(var/line in world.file2list(vetted_controller.file_path_vetted)) + if(!line) + continue + + if(findtextEx(line, "#", 1, 2)) + continue + + vetted_controller.add_player(line, legacy = TRUE) + world.log << "Added [line] to vetted list." + var/datum/db_query/query_load_player_rank = SSdbcore.NewQuery("SELECT * FROM vetted_list") + if(!query_load_player_rank.warn_execute()) + return + while(query_load_player_rank.NextRow()) + var/ckey = ckey(query_load_player_rank.item[1]) + vetted_controller.add_player(ckey) + world.log << "Added [ckey] to vetted list." + + loaded_vetted_sql = TRUE + return TRUE - if(findtextEx(line, "#", 1, 2)) - continue +/datum/player_rank_controller/vetted/proc/convert_all_to_sql() + if(!SSdbcore.Connect()) + return message_admins("Failed to connect to database. Unable to complete flat file to SQL conversion.") + for(var/ckey_ in GLOB.vetted_list_legacy) + add_player_to_sql(ckey_) - vetted_controller.add_player(line) +/datum/player_rank_controller/vetted/proc/add_player_to_sql(ckey, admin_mob) + var/ckey_admin = "Conversion Script" + var/mob/admin_who_added_client = admin_mob + if(istype(admin_who_added_client, /mob) && admin_who_added_client.client) + ckey_admin = admin_who_added_client?.client?.ckey - return TRUE + var/datum/db_query/query_add_player_rank = SSdbcore.NewQuery( + "INSERT INTO vetted_list (ckey, admin_who_added) VALUES(:ckey, :admin_who_added) \ + ON DUPLICATE KEY UPDATE admin_who_added = :admin_who_added", + list("ckey" = ckey, "admin_who_added" = ckey_admin), + ) -/datum/player_rank_controller/vetted/add_player(ckey) - if(IsAdminAdvancedProcCall()) - return + if(!query_add_player_rank.warn_execute()) + return FALSE +/datum/player_rank_controller/vetted/add_player(ckey, legacy, admin) ckey = ckey(ckey) - + if(legacy) + GLOB.vetted_list_legacy[ckey] = TRUE GLOB.vetted_list[ckey] = TRUE + add_player_to_sql(ckey, admin) /datum/player_rank_controller/vetted/remove_player(ckey) - if(IsAdminAdvancedProcCall()) - return - GLOB.vetted_list -= ckey + remove_player_from_sql(ckey) + +/datum/player_rank_controller/vetted/proc/remove_player_from_sql(ckey) + var/datum/db_query/query_remove_player_vetted = SSdbcore.NewQuery( + "DELETE FROM vetted_list WHERE ckey = :ckey", + list("ckey" = ckey), + ) + if(!query_remove_player_vetted.warn_execute()) + return FALSE + +ADMIN_VERB(convert_flatfile_vettedlist_to_sql, R_DEBUG, "Convert Vetted list to SQL", "Warning! Might be slow!", ADMIN_CATEGORY_DEBUG) + var/consent = tgui_input_list(usr, "Do you want to convert the vetted list to SQL?", "UH OH", list("Yes", "No"), "No") + if(consent == "Yes") + SSplayer_ranks.vetted_controller.convert_all_to_sql() + message_admins("[usr] has forcefully converted the vetted list file to SQL.") +ADMIN_VERB(add_vetted, R_ADMIN, "Add user to Vetted", "Adds a user to the vetted list", ADMIN_CATEGORY_MAIN) + var/user_adding = tgui_input_text(usr, "Whom is being added?", "Vetted List") + if(length(user_adding)) + SSplayer_ranks.vetted_controller.add_player(ckey = user_adding, admin = usr) + message_admins("[usr] has added [user_adding] to the vetted database.") + +ADMIN_VERB(remove_vetted, R_ADMIN, "Remove user from Vetted", "Removes a user from the vetted list", ADMIN_CATEGORY_MAIN) + var/user_del = tgui_input_text(usr, "Whom is being Removed?", "Vetted List") + if(length(user_del)) + SSplayer_ranks.vetted_controller.remove_player(ckey = user_del) + message_admins("[usr] has removed [user_del] from the vetted databse.") diff --git a/modular_zubbers/code/modules/wizard_dize/wizard_dice_object.dm b/modular_zubbers/code/modules/wizard_dize/wizard_dice_object.dm index a8b180d3bbb8e..5fbaf025e8866 100644 --- a/modular_zubbers/code/modules/wizard_dize/wizard_dice_object.dm +++ b/modular_zubbers/code/modules/wizard_dize/wizard_dice_object.dm @@ -96,7 +96,7 @@ src.forceMove(desired_turf) new/obj/effect/temp_visual/emp/pulse(desired_turf) //Does not cause an EMP :^) - playsound(desired_turf,'sound/magic/magic_missile.ogg',50,8,FALSE) + playsound(desired_turf,'sound/effects/magic/magic_missile.ogg',50,8,FALSE) notify_ghosts( "[src] has teleported to [desired_turf.loc]!", @@ -113,7 +113,7 @@ var/turf/current_turf = get_turf(src) new/obj/effect/temp_visual/emp/pulse(current_turf) //Does not cause an EMP :^) - playsound(current_turf,'sound/magic/magic_missile.ogg',50,8,FALSE) + playsound(current_turf,'sound/effects/magic/magic_missile.ogg',50,8,FALSE) if(roll != 20) if(roll == 1) //lol. lmao @@ -157,7 +157,7 @@ var/turf/lightning_source = get_turf(src) lightning_source.Beam(target, icon_state="lightning[rand(1,12)]", time = 5) target.adjustFireLoss(LIGHTNING_BOLT_DAMAGE) - playsound(get_turf(target), 'sound/magic/lightningbolt.ogg', 50, TRUE) + playsound(get_turf(target), 'sound/effects/magic/lightningbolt.ogg', 50, TRUE) target.electrocution_animation(LIGHTNING_BOLT_ELECTROCUTION_ANIMATION_LENGTH) to_chat(target, span_warning("LIGHTNING BOLT!!")) if(5) diff --git a/modular_zubbers/code/modules/~donator/choicebeacon.dm b/modular_zubbers/code/modules/~donator/choicebeacon.dm index f60925e082b97..04e723fd78e45 100644 --- a/modular_zubbers/code/modules/~donator/choicebeacon.dm +++ b/modular_zubbers/code/modules/~donator/choicebeacon.dm @@ -10,6 +10,6 @@ if(user) to_chat(user, span_notice("Thank you for choosing the Jab TM for your clothing purchase!")) new droptype( user.loc ) - playsound(src, 'sound/creatures/mousesqueek.ogg', 100, TRUE, TRUE) + playsound(src, 'sound/mobs/non-humanoids/mouse/mousesqueek.ogg', 100, TRUE, TRUE) qdel(src) return diff --git a/modular_zubbers/code/modules/~donator/mothdonator.dm b/modular_zubbers/code/modules/~donator/mothdonator.dm new file mode 100644 index 0000000000000..41aec317dcb4b --- /dev/null +++ b/modular_zubbers/code/modules/~donator/mothdonator.dm @@ -0,0 +1,109 @@ +/// This is a special subtype of mob_holder that *spawns with a mob included* instead of being created by scooping a mob. +/// It can override the name & description of the included mob as well. +/obj/item/clothing/head/mob_holder/pet + // Path to the mob that should be spawned on initialization. + var/mob/living/starting_pet + // Tracks if a custom name has been provided that should override the mob's default. + var/renamed = FALSE + // Tracks if a custom description has been provided that should override the mob's default. + var/redescribed = FALSE + +/obj/item/clothing/head/mob_holder/pet/Initialize(mapload, mob/living/M, worn_state, head_icon, lh_icon, rh_icon, worn_slot_flags = NONE) + held_mob = new starting_pet(src) + if(renamed) + held_mob.name = name + if(redescribed) + held_mob.desc = desc + + return ..(get_turf(src), held_mob, held_mob.held_state, held_mob.head_icon, held_mob.held_lh, held_mob.held_rh, held_mob.worn_slot_flags) + +/// If this gets renamed, make sure to paste the new name onto the mob as well. +/// If, for whatever reason, this gets called before Initialize, it also sets renamed = TRUE to ensure that the mob gets the custom name on initialization. +/obj/item/clothing/head/mob_holder/pet/on_loadout_custom_named() + . = ..() + renamed = TRUE + if(held_mob != null) + held_mob.name = name + +/// See above. +/obj/item/clothing/head/mob_holder/pet/on_loadout_custom_described() + . = ..() + redescribed = TRUE + if(held_mob != null) + held_mob.desc = desc + +/mob/living/basic/mothroach/pet + name = "pet mothroach" + desc = "A domestic mothroach that has learnt commands." + + ai_controller = /datum/ai_controller/basic_controller/mothroach/pet + + // doesn't include attack bc mothroaches are prolly too weak for that + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/good_boy, + /datum/pet_command/follow, + /datum/pet_command/point_targeting/fetch, + /datum/pet_command/play_dead, + ) + +/mob/living/basic/mothroach/pet/Initialize(mapload) + . = ..() + AddComponent(/datum/component/obeys_commands, pet_commands) + +/mob/living/basic/mothroach/pet/gib() + // Peoples' bespoke pets probably shouldn't be gibbable. + // This is both for RP reasons (don't force people to RP permanent pet death) and to prevent griefing. + return + +/datum/ai_controller/basic_controller/mothroach/pet + blackboard = list( + BB_VISION_RANGE = AI_DOG_VISION_RANGE, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/mothroach, + /datum/ai_planning_subtree/pet_planning, + ) + + + +/// == DONATOR PET: Mr. Fluff, Central's Mothroach, ckey centralsmith == +/mob/living/basic/mothroach/pet/mr_fluff + name = "Mr. Fluff" + desc = "Central's beloved pet mothroach, Mr. Fluff. He looks so happy to be here!" + gender = MALE + icon = 'modular_zubbers/icons/mob/donator_pets.dmi' + icon_state = "mr_fluff" + icon_living = "mr_fluff" + icon_dead = "mr_fluff_dead" + +/obj/item/clothing/head/mob_holder/pet/donator/centralsmith + name = "Mr. Fluff" + desc = "Central's beloved pet mothroach, Mr. Fluff. He looks so happy to be here!" + icon = 'modular_zubbers/icons/mob/donator_pets.dmi' + icon_state = "mr_fluff" + + starting_pet = /mob/living/basic/mothroach/pet/mr_fluff +//FIND A BETTER SPOT FOR THIS +/datum/preference/choiced/pet_gender + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "pet_gender" + savefile_identifier = PREFERENCE_CHARACTER + can_randomize = FALSE + +/datum/preference/choiced/pet_gender/init_possible_values() + return list("Random", MALE, FEMALE, PLURAL, NEUTER) + +/datum/preference/choiced/pet_gender/create_default_value() + return PLURAL + +/datum/preference/choiced/pet_gender/is_accessible(datum/preferences/preferences) + if (!..()) + return FALSE + + return "Pet Owner" in preferences.all_quirks + +/datum/preference/choiced/pet_gender/apply_to_human(mob/living/carbon/human/target, value) + return diff --git a/modular_zubbers/icons/UI_Icons/common/bubber_32.png b/modular_zubbers/icons/UI_Icons/common/bubber_32.png new file mode 100644 index 0000000000000..b79b0ff78df60 Binary files /dev/null and b/modular_zubbers/icons/UI_Icons/common/bubber_32.png differ diff --git a/modular_zubbers/icons/customization/ears.dmi b/modular_zubbers/icons/customization/ears.dmi index ea23e9199d5a8..7fb8148c60540 100644 Binary files a/modular_zubbers/icons/customization/ears.dmi and b/modular_zubbers/icons/customization/ears.dmi differ diff --git a/modular_zubbers/icons/customization/frills.dmi b/modular_zubbers/icons/customization/frills.dmi new file mode 100644 index 0000000000000..78d1c5b6a88c1 Binary files /dev/null and b/modular_zubbers/icons/customization/frills.dmi differ diff --git a/modular_zubbers/icons/customization/hair.dmi b/modular_zubbers/icons/customization/hair.dmi index f05bb56456678..0bfc80618ca57 100644 Binary files a/modular_zubbers/icons/customization/hair.dmi and b/modular_zubbers/icons/customization/hair.dmi differ diff --git a/modular_zubbers/icons/customization/snouts.dmi b/modular_zubbers/icons/customization/snouts.dmi index f59cb14e30f25..55aa4047bd353 100644 Binary files a/modular_zubbers/icons/customization/snouts.dmi and b/modular_zubbers/icons/customization/snouts.dmi differ diff --git a/modular_zubbers/modules/chastityitem/mob/chastity_clothing/lewd_chastity.dmi b/modular_zubbers/icons/mob/chastity_clothing/lewd_chastity.dmi similarity index 100% rename from modular_zubbers/modules/chastityitem/mob/chastity_clothing/lewd_chastity.dmi rename to modular_zubbers/icons/mob/chastity_clothing/lewd_chastity.dmi diff --git a/modular_zubbers/modules/chastityitem/mob/chastity_inhands/lewd_chastity_inhand_left.dmi b/modular_zubbers/icons/mob/chastity_inhands/lewd_chastity_inhand_left.dmi similarity index 100% rename from modular_zubbers/modules/chastityitem/mob/chastity_inhands/lewd_chastity_inhand_left.dmi rename to modular_zubbers/icons/mob/chastity_inhands/lewd_chastity_inhand_left.dmi diff --git a/modular_zubbers/modules/chastityitem/mob/chastity_inhands/lewd_chastity_inhand_right.dmi b/modular_zubbers/icons/mob/chastity_inhands/lewd_chastity_inhand_right.dmi similarity index 100% rename from modular_zubbers/modules/chastityitem/mob/chastity_inhands/lewd_chastity_inhand_right.dmi rename to modular_zubbers/icons/mob/chastity_inhands/lewd_chastity_inhand_right.dmi diff --git a/modular_zubbers/icons/mob/clothing/suits.dmi b/modular_zubbers/icons/mob/clothing/suits.dmi index d45ee4a74f53f..db26231133c48 100644 Binary files a/modular_zubbers/icons/mob/clothing/suits.dmi and b/modular_zubbers/icons/mob/clothing/suits.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/under/costume.dmi b/modular_zubbers/icons/mob/clothing/under/costume.dmi index 2c4c0c6f32cb8..11fd5487c8a93 100644 Binary files a/modular_zubbers/icons/mob/clothing/under/costume.dmi and b/modular_zubbers/icons/mob/clothing/under/costume.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/under/costume_digi.dmi b/modular_zubbers/icons/mob/clothing/under/costume_digi.dmi index 124dad7f96fa9..d6f52ec334808 100644 Binary files a/modular_zubbers/icons/mob/clothing/under/costume_digi.dmi and b/modular_zubbers/icons/mob/clothing/under/costume_digi.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/under/skirts_dresses.dmi b/modular_zubbers/icons/mob/clothing/under/skirts_dresses.dmi index be3c1556933f4..a05eb735479d2 100644 Binary files a/modular_zubbers/icons/mob/clothing/under/skirts_dresses.dmi and b/modular_zubbers/icons/mob/clothing/under/skirts_dresses.dmi differ diff --git a/modular_zubbers/icons/mob/donator_pets.dmi b/modular_zubbers/icons/mob/donator_pets.dmi new file mode 100644 index 0000000000000..d1b60e38718f8 Binary files /dev/null and b/modular_zubbers/icons/mob/donator_pets.dmi differ diff --git a/modular_zubbers/icons/mob/huds/bloodsucker.dmi b/modular_zubbers/icons/mob/huds/bloodsucker.dmi index 04b34e67e2187..9cd9b225d7226 100644 Binary files a/modular_zubbers/icons/mob/huds/bloodsucker.dmi and b/modular_zubbers/icons/mob/huds/bloodsucker.dmi differ diff --git a/modular_zubbers/icons/mob/huds/hud.dmi b/modular_zubbers/icons/mob/huds/hud.dmi index 9ed02bc4aaa72..e123a7b9966a1 100644 Binary files a/modular_zubbers/icons/mob/huds/hud.dmi and b/modular_zubbers/icons/mob/huds/hud.dmi differ diff --git a/modular_zubbers/icons/obj/clothing/suits.dmi b/modular_zubbers/icons/obj/clothing/suits.dmi index 048a74b1d52de..1d93dbfe8fab1 100644 Binary files a/modular_zubbers/icons/obj/clothing/suits.dmi and b/modular_zubbers/icons/obj/clothing/suits.dmi differ diff --git a/modular_zubbers/icons/obj/clothing/under/costume.dmi b/modular_zubbers/icons/obj/clothing/under/costume.dmi index 9334e46feeae8..8a097620bd86c 100644 Binary files a/modular_zubbers/icons/obj/clothing/under/costume.dmi and b/modular_zubbers/icons/obj/clothing/under/costume.dmi differ diff --git a/modular_zubbers/icons/obj/clothing/under/skirts_dresses.dmi b/modular_zubbers/icons/obj/clothing/under/skirts_dresses.dmi index 20008f9b7703d..d57f61dd84555 100644 Binary files a/modular_zubbers/icons/obj/clothing/under/skirts_dresses.dmi and b/modular_zubbers/icons/obj/clothing/under/skirts_dresses.dmi differ diff --git a/modular_zubbers/modules/chastityitem/obj/lewd_chastity.dmi b/modular_zubbers/icons/obj/lewd_chastity.dmi similarity index 100% rename from modular_zubbers/modules/chastityitem/obj/lewd_chastity.dmi rename to modular_zubbers/icons/obj/lewd_chastity.dmi diff --git a/modular_zubbers/icons/obj/structures/vamp_obj.dmi b/modular_zubbers/icons/obj/structures/vamp_obj.dmi index b3937df385c30..fa6228f45e056 100644 Binary files a/modular_zubbers/icons/obj/structures/vamp_obj.dmi and b/modular_zubbers/icons/obj/structures/vamp_obj.dmi differ diff --git a/modular_zubbers/icons/obj/toys/plushes.dmi b/modular_zubbers/icons/obj/toys/plushes.dmi index 806d4c6ab5644..4d6de607a94e4 100644 Binary files a/modular_zubbers/icons/obj/toys/plushes.dmi and b/modular_zubbers/icons/obj/toys/plushes.dmi differ diff --git a/modular_zubbers/maps/biodome/weapons.dm b/modular_zubbers/maps/biodome/weapons.dm index a6b84d47407ba..561742e4f0009 100644 --- a/modular_zubbers/maps/biodome/weapons.dm +++ b/modular_zubbers/maps/biodome/weapons.dm @@ -17,7 +17,7 @@ armour_penetration = 65 attack_verb_continuous = list("slashes", "stings", "prickles", "pokes") attack_verb_simple = list("slash", "sting", "prickle", "poke") - hitsound = 'sound/weapons/rapierhit.ogg' + hitsound = 'sound/items/weapons/rapierhit.ogg' /obj/item/melee/fakebeesword/afterattack(atom/target, mob/user, proximity) . = ..() diff --git a/modular_zubbers/maps/offstation/dauntless/implant_syndie.dm b/modular_zubbers/maps/offstation/dauntless/implant_syndie.dm index 2121383916cc8..cadba4eda8800 100644 --- a/modular_zubbers/maps/offstation/dauntless/implant_syndie.dm +++ b/modular_zubbers/maps/offstation/dauntless/implant_syndie.dm @@ -36,3 +36,4 @@ name = "implant case - 'interdyne'" desc = "A glass case containing a Interdyne Pharmaceutics employee implant. Are you ready to join Interdyne Pharmaceutics, agent?" imp_type = /obj/item/implant/interdyne + diff --git a/modular_zubbers/master_files/code/datums/announcers/default_announcer.dm b/modular_zubbers/master_files/code/datums/announcers/default_announcer.dm new file mode 100644 index 0000000000000..be5a506d36ea9 --- /dev/null +++ b/modular_zubbers/master_files/code/datums/announcers/default_announcer.dm @@ -0,0 +1,9 @@ +/datum/centcom_announcer/default + alert_sounds = list('modular_zubbers/sound/alerts/green.ogg') + +/datum/centcom_announcer/default/New() + event_sounds |= list( + ANNOUNCER_GRAVGENBLACKOUT = 'modular_zubbers/sound/alerts/gravgen_blackout.ogg', + ANNOUNCER_METEORWARNING = 'modular_zubbers/sound/alerts/meteor_warning.ogg', + ) + . = ..() diff --git a/modular_zubbers/master_files/code/modules/entombed_quirk/code/entombed_mod.dm b/modular_zubbers/master_files/code/modules/entombed_quirk/code/entombed_mod.dm index 2715fbe502263..75c801ffe7ece 100644 --- a/modular_zubbers/master_files/code/modules/entombed_quirk/code/entombed_mod.dm +++ b/modular_zubbers/master_files/code/modules/entombed_quirk/code/entombed_mod.dm @@ -76,7 +76,7 @@ if (istype(part, /obj/item/clothing)) // make sure it's a modsuit piece and not a module, we retract those too if (!istype(part, /obj/item/clothing/head/mod)) // they can only retract the helmet, them's the sticks human_user.balloon_alert(human_user, "part is fused to you - can't retract!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return return ..() @@ -87,7 +87,7 @@ //if we're deploy_locked, just disable this functionality entirely if (tomb_quirk && tomb_quirk.deploy_locked) human_user.balloon_alert(human_user, "you can only retract your helmet, and only manually!") - playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) return return ..() diff --git a/modular_zubbers/master_files/code/modules/events/gravity_generator_blackout.dm b/modular_zubbers/master_files/code/modules/events/gravity_generator_blackout.dm new file mode 100644 index 0000000000000..9bbea6f51fb0e --- /dev/null +++ b/modular_zubbers/master_files/code/modules/events/gravity_generator_blackout.dm @@ -0,0 +1,7 @@ +/datum/round_event/gravity_generator_blackout + announce_when = 3 + start_when = 1 + announce_chance = 100 + +/datum/round_event/gravity_generator_blackout/announce(fake) + priority_announce("Feedback surge detected in [station_name()] mass distribution systems. Artificial gravity has been disabled while the system reinitializes. Manual reset of the gravity generator is required.", "[command_name()] Engineering Division", ANNOUNCER_GRAVGENBLACKOUT) diff --git a/modular_zubbers/master_files/code/modules/holiday/holiday.dm b/modular_zubbers/master_files/code/modules/holiday/holiday.dm new file mode 100644 index 0000000000000..1c03abec4ad9a --- /dev/null +++ b/modular_zubbers/master_files/code/modules/holiday/holiday.dm @@ -0,0 +1,113 @@ +#define PURPLE_LIGHT "#9F79F2" +#define PURPLE_DARK "#6141A6" +#define ORANGE_LIGHT "#F27F1B" +#define ORANGE_DARK "#F24F13" +#define GREY_LIGHT "#FFFFFF" +#define GREY_DARK "#292929" + +/datum/holiday/proc/queue_storyteller_celebration(datum/round_event/event, datum/round_event_control/control) + if(isnull(event) || isnull(control)) + stack_trace("Invalid holiday event passed to storyteller") + return + + if(locate(event) in SSevents.running) + return + + var/datum/round_event_control/holiday_event = locate(control) in SSevents.control + if(isnull(holiday_event)) + return + + holiday_event.run_event(admin_forced = TRUE) + +/datum/holiday/valentines/celebrate() + . = ..() + queue_storyteller_celebration(event = /datum/round_event/valentines, control = /datum/round_event_control/valentines) + +/datum/holiday/easter/celebrate() + . = ..() + queue_storyteller_celebration(event = /datum/round_event/easter, control = /datum/round_event_control/easter) + +/datum/holiday/halloween + name = HALLOWEEN + begin_day = 17 + holiday_colors = list() + +/datum/holiday/halloween/New() + . = ..() + var/palette = rand(1, 15) + switch(palette) + if(1, 2) + holiday_colors += list( + PURPLE_LIGHT, + PURPLE_DARK, + GREY_DARK, + ORANGE_DARK, + ORANGE_LIGHT, + GREY_LIGHT, + ) + if(3) + holiday_colors += list( + PURPLE_LIGHT, + ORANGE_LIGHT, + GREY_LIGHT, + ) + if(4) + holiday_colors += list( + PURPLE_DARK, + ORANGE_DARK, + GREY_DARK, + ) + if(5) + holiday_colors += list( + pick(GREY_LIGHT, GREY_DARK), + pick(PURPLE_LIGHT, PURPLE_DARK), + pick(ORANGE_LIGHT, ORANGE_DARK), + ) + if(6) + holiday_colors += list( + pick(GREY_LIGHT, GREY_DARK), + pick(PURPLE_LIGHT, PURPLE_DARK), + ) + if(7) + holiday_colors += list( + pick(GREY_LIGHT, GREY_DARK), + pick(ORANGE_LIGHT, ORANGE_DARK), + ) + if(8) + holiday_colors += list( + pick(PURPLE_LIGHT, PURPLE_DARK), + pick(ORANGE_LIGHT, ORANGE_DARK), + ) + if(9) + holiday_colors += list(PURPLE_LIGHT, ORANGE_LIGHT) + if(10) + holiday_colors += list(PURPLE_DARK, ORANGE_DARK) + if(11) + holiday_colors = list( + COLOR_PRIDE_PURPLE, + COLOR_PRIDE_BLUE, + COLOR_PRIDE_GREEN, + COLOR_PRIDE_YELLOW, + COLOR_PRIDE_ORANGE, + COLOR_PRIDE_RED, + ) + if(12) + holiday_colors += PURPLE_LIGHT + if(13) + holiday_colors += ORANGE_LIGHT + if(14) + holiday_colors += PURPLE_DARK + if(15) + holiday_colors += ORANGE_DARK + +/datum/holiday/halloween/celebrate() + . = ..() + queue_storyteller_celebration(event = /datum/round_event/spooky, control = /datum/round_event_control/spooky) + +#undef PURPLE_LIGHT +#undef PURPLE_DARK +#undef ORANGE_LIGHT +#undef ORANGE_DARK +#undef GREY_LIGHT +#undef GREY_DARK + diff --git a/modular_zubbers/master_files/code/modules/mob/living/carbon/human/examine.dm b/modular_zubbers/master_files/code/modules/mob/living/carbon/human/examine.dm new file mode 100644 index 0000000000000..d1e0e57bab6ac --- /dev/null +++ b/modular_zubbers/master_files/code/modules/mob/living/carbon/human/examine.dm @@ -0,0 +1,19 @@ +// Species examine +/mob/living/carbon/human/examine_title(mob/user, thats = FALSE) + . = ..() + var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) + var/species_visible + var/species_name_string + if(skipface || get_visible_name() == "Unknown") + species_visible = FALSE + else + species_visible = TRUE + + if(!species_visible) + species_name_string = "" + else if (!dna.species.lore_protected && dna.features["custom_species"]) + species_name_string = ", [prefix_a_or_an(dna.features["custom_species"])] [dna.features["custom_species"]] ([dna.species.name])" + else + species_name_string = ", [prefix_a_or_an(dna.species.name)] [dna.species.name]" + + . += species_name_string diff --git a/modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi b/modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi index f300fd2122c0d..2a2d7c5168010 100644 Binary files a/modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi and b/modular_zubbers/master_files/icons/mob/sprite_accessory/clothing.dmi differ diff --git a/modular_zubbers/master_files/skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm b/modular_zubbers/master_files/skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm new file mode 100644 index 0000000000000..0c06959fd4ad0 --- /dev/null +++ b/modular_zubbers/master_files/skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm @@ -0,0 +1,126 @@ +// Prices are calculated by the level 1 lathe cost to print the items, or their vending machine price +/datum/armament_entry/company_import/deforest/first_aid_kit/civil_defense + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/deforest/first_aid_kit/frontier + cost = PAYCHECK_COMMAND * 8 + +/datum/armament_entry/company_import/deforest/first_aid_kit/combat_surgeon + cost = PAYCHECK_COMMAND * 10.7 + +/datum/armament_entry/company_import/deforest/first_aid_kit/robo_repair + cost = PAYCHECK_COMMAND * 8 + +/datum/armament_entry/company_import/deforest/first_aid_kit/robo_repair_super + cost = PAYCHECK_COMMAND * 15 + +/datum/armament_entry/company_import/deforest/first_aid_kit/first_responder + cost = PAYCHECK_COMMAND * 14 + +/datum/armament_entry/company_import/deforest/first_aid_kit/orange_satchel + cost = PAYCHECK_COMMAND * 24.2 + +/datum/armament_entry/company_import/deforest/first_aid_kit/technician_satchel + cost = PAYCHECK_COMMAND * 24.2 + +// Basic first aid supplies like gauze, sutures, mesh, so on + +/datum/armament_entry/company_import/deforest/first_aid/coagulant + cost = PAYCHECK_CREW * 1.8 + +/datum/armament_entry/company_import/deforest/first_aid/red_sun + cost = PAYCHECK_CREW * 0.75 + +/datum/armament_entry/company_import/deforest/first_aid/sterile_gauze + cost = PAYCHECK_CREW * 1.8 + +/datum/armament_entry/company_import/deforest/first_aid/suture + cost = PAYCHECK_CREW * 1.4 + +/datum/armament_entry/company_import/deforest/first_aid/ointment + cost = PAYCHECK_CREW * 1.4 + +/datum/armament_entry/company_import/deforest/first_aid/mesh + cost = PAYCHECK_CREW * 1.4 + +/datum/armament_entry/company_import/deforest/first_aid/bandaid + cost = PAYCHECK_CREW * 2 + +/datum/armament_entry/company_import/deforest/first_aid/amollin + cost = PAYCHECK_CREW * 2 + +/datum/armament_entry/company_import/deforest/first_aid/robo_patch + cost = PAYCHECK_CREW * 0.75 + +/datum/armament_entry/company_import/deforest/first_aid/subdermal_splint + cost = PAYCHECK_CREW * 6.5 + +/datum/armament_entry/company_import/deforest/first_aid/rapid_coagulant + cost = PAYCHECK_CREW * 6.5 + +/datum/armament_entry/company_import/deforest/first_aid/robofoam + cost = PAYCHECK_CREW * 6.5 + +/datum/armament_entry/company_import/deforest/first_aid/super_robofoam + cost = PAYCHECK_CREW * 7 + +// Autoinjectors for healing + +/datum/armament_entry/company_import/deforest/medpens + cost = PAYCHECK_CREW * 2.4 + +// Equipment, from defibs to scanners to surgical tools + +/datum/armament_entry/company_import/deforest/equipment/treatment_zone_projector + cost = PAYCHECK_COMMAND * 0.25 + +/datum/armament_entry/company_import/deforest/equipment/health_analyzer + cost = PAYCHECK_COMMAND * 1.4 + +/datum/armament_entry/company_import/deforest/equipment/loaded_defib + cost = PAYCHECK_COMMAND * 6 + +/datum/armament_entry/company_import/deforest/equipment/loaded_belt_defib + cost = PAYCHECK_COMMAND * 9 + +/datum/armament_entry/company_import/deforest/equipment/surgical_tools + cost = PAYCHECK_COMMAND * 8 + +/datum/armament_entry/company_import/deforest/equipment/advanced_health_analyer + cost = PAYCHECK_COMMAND * 4 + +/datum/armament_entry/company_import/deforest/equipment/penlite_defib_mount + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/deforest/equipment/advanced_scalpel + cost = PAYCHECK_COMMAND * 10.25 + +/datum/armament_entry/company_import/deforest/equipment/advanced_retractor + cost = PAYCHECK_COMMAND * 9 + +/datum/armament_entry/company_import/deforest/equipment/advanced_cautery + cost = PAYCHECK_COMMAND * 9 + +/datum/armament_entry/company_import/deforest/equipment/medigun_upgrade + cost = PAYCHECK_COMMAND * 12 + +/datum/armament_entry/company_import/deforest/equipment/hypospray_upgrade + cost = PAYCHECK_COMMAND * 4.5 + +/datum/armament_entry/company_import/deforest/equipment/medstation + cost = PAYCHECK_COMMAND * 12 + +/datum/armament_entry/company_import/deforest/equipment/medhud + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/deforest/equipment/medhud_night + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/equipment/medhud_night_sci + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/deforest/equipment/hypospray_case + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/deforest/equipment/hypospray + cost = PAYCHECK_COMMAND * 4 diff --git a/modular_zubbers/master_files/skyrat/modules/cortical_borer/code/cortical_borer_antag.dm b/modular_zubbers/master_files/skyrat/modules/cortical_borer/code/cortical_borer_antag.dm deleted file mode 100644 index 39abbc0ea9ab1..0000000000000 --- a/modular_zubbers/master_files/skyrat/modules/cortical_borer/code/cortical_borer_antag.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/round_event_control/cortical_borer - min_players = 20 diff --git a/modular_zubbers/master_files/skyrat/modules/deforest_medical_items/code/cargo_packs.dm b/modular_zubbers/master_files/skyrat/modules/deforest_medical_items/code/cargo_packs.dm new file mode 100644 index 0000000000000..ba02aa0112ab4 --- /dev/null +++ b/modular_zubbers/master_files/skyrat/modules/deforest_medical_items/code/cargo_packs.dm @@ -0,0 +1,14 @@ +/datum/supply_pack/medical/civil_defense + cost = CARGO_CRATE_VALUE * 24 + +/datum/supply_pack/medical/frontier_first_aid + cost = CARGO_CRATE_VALUE * 16 + +/datum/supply_pack/medical/kit_technician + cost = CARGO_CRATE_VALUE * 7.125 + +/datum/supply_pack/medical/kit_surgical + cost = CARGO_CRATE_VALUE * 3.9 + +/datum/supply_pack/medical/kit_medical + cost = CARGO_CRATE_VALUE * 7.125 diff --git a/modular_zubbers/sound/alerts/gravgen_blackout.ogg b/modular_zubbers/sound/alerts/gravgen_blackout.ogg new file mode 100644 index 0000000000000..47253e680541e Binary files /dev/null and b/modular_zubbers/sound/alerts/gravgen_blackout.ogg differ diff --git a/modular_zubbers/sound/alerts/meteor_warning.ogg b/modular_zubbers/sound/alerts/meteor_warning.ogg new file mode 100644 index 0000000000000..daf23e5d82ce8 Binary files /dev/null and b/modular_zubbers/sound/alerts/meteor_warning.ogg differ diff --git a/modular_zubbers/sound/machines/gravgen_down.ogg b/modular_zubbers/sound/machines/gravgen_down.ogg new file mode 100644 index 0000000000000..3670f55738b39 Binary files /dev/null and b/modular_zubbers/sound/machines/gravgen_down.ogg differ diff --git a/modular_zubbers/sound/machines/gravgen_up.ogg b/modular_zubbers/sound/machines/gravgen_up.ogg new file mode 100644 index 0000000000000..6b46c58323f00 Binary files /dev/null and b/modular_zubbers/sound/machines/gravgen_up.ogg differ diff --git a/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json b/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json index ffe96dad28c26..c8825c3896cb1 100644 --- a/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json +++ b/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json @@ -14,7 +14,7 @@ "#If I focus on my goals, rather than what I want to do, am I truly happy?", "#Maybe... in an alternate universe... I could be part of another family. One that cares more about me...", ",LI wonder what other people think of me... Possibly terribly.", - "#...What would happen if I Vassalized a Clown?", + "#...What would happen if I Ghoulized a Clown?", "#Why can't we just walk? Does anyone walk anymore? Why do we run? What rush are we in?", "#Medbay is overworking, I wonder why they are always so shortstaffed.", "#Why do we take a pod instead of the shuttle? Where's the fun in that?", @@ -30,7 +30,7 @@ ",LWhat would happen if a Bloodsucker got their hands on a Power Miner?", "#There are Aliens, they exist. It isn't a conspiracy. The real question is when they will attack us.", "#Is Brain damage real, or is it just our brains adapting to reality?", - "#How do we all understand eachother when we speak over eachother on the radio?", + "#How do we all understand each other when we speak over each other on the radio?", "#Huds are broken again, it seems...", "#Never make a deal with the devil... worst mistake of my life.", "#Does plasma still affect the minds of people who can't get poisoned?", @@ -111,15 +111,15 @@ ";This is your fault.", ",LWhy do we always infight, what's wrong with a little teamwork, it gets us further.", "#What's a hacked autodrobe but a machine forced to show itself to you. Is it moral?", - "#This is supposed to be a station for moths and by moths. But if so why is there non moths on the station?", + "#This is supposed to be a station for moths and by moths. But if so why are there non-moths on the station?", "#If you wish to defeat me. Train for another 10,000 years.", "#If i knew you was coming i'd have baked a cake! Wait, who was i talking to?", "#We'll meet again. I don't know where and i don't know when but i know we'll meet again. Hopefully on a not very sunny day.", - "#Here is my question: When Cain slew Abel and God punished Cain, why did God give him superpowers?", + "#Here is my question: When Caine slew Abel and God punished Caine, why did God give him superpowers?", "#If i became fully augmented, would i still be a Vampire? Would i need to suck on Borgs and power cells?", ";No security! Don't try it!", "#What would happen if i wore a Memento Mori and was staked?", - "#Hmm, do i feel like doing my objectives today or going to the dorm rooms?... A better question is why an undead creature like myself has a libido in the first place.", + "#Hmm, do I feel like doing my objectives today or going to the dorm rooms?... A better question is why an undead creature like myself has a libido in the first place.", "#P-Please don't hurt me! I'm not a bad Vampire!", "#Why do we sleep in coffins? I'm undead not dead.", "#Crazy? I was Crazy once. They locked me in a room, a rubber room filled with rats. I drank the blood of the rats. Their ignoble blood made me crazy. Crazy?- ", @@ -152,6 +152,14 @@ "#The station's intercom is the voice of the cosmic leprechaun who stole my sanity. Now it's broadcasting riddles about the meaning of socks.", "#The walls told me secrets, but now they're suing me for breach of confidentiality. I didn't sign an NDA with the cosmos, did I?", "#I challenged the HoS to a dance-off with quantum entanglement moves. Now we're quantumly entangled in a never-ending cosmic boogie.", - "#I found a message in the maintenance pipes. It said, 'The space hamsters know your deepest fears.' Now I'm facing existential dread fueled by rodent prophecy." + "#I found a message in the maintenance pipes. It said, 'The space hamsters know your deepest fears.' Now I'm facing existential dread fueled by rodent prophecy.", + "#I am the sword of Caine, I am the sword of Caine...", + "#The Wisdom Cow is a sign of Gehenna, Lilith is laughing at me.", + ";Don't open it.", + "#One hand moves the pieces of the game - the winner keeps his hand on the pawn...", + "#Why's he smiling? The father? Is it the father behind him?", + "#Whether or not you win the game, matters not. It's if you bought it.", + "#In the time of Thin-Blood when his, the Dark Father's blood runs weak...", + "#Is Nanotrasen part of our games of Elders and Antediluvians or are we part of theirs?" ] } diff --git a/modular_zzplurt/code/datums/outfit.dm b/modular_zzplurt/code/datums/outfit.dm index 8482268df6074..066c359ca7976 100644 --- a/modular_zzplurt/code/datums/outfit.dm +++ b/modular_zzplurt/code/datums/outfit.dm @@ -30,6 +30,7 @@ if(user.ears_extra) user.ears_extra.add_fingerprint(user, ignoregloves = TRUE) +/* Apparently was removed, keeping it just in case /datum/outfit/copy_outfit_from_target(mob/living/carbon/human/H) . = ..() if(!.) @@ -47,6 +48,7 @@ wrists = H.wrists.type if(H.ears_extra) ears_extra = H.ears_extra.type +*/ /datum/outfit/get_types_to_preload() . = ..() diff --git a/modular_zzplurt/code/modules/admin/player_panel.dm b/modular_zzplurt/code/modules/admin/player_panel.dm index 053866ce6769f..5227494b34c15 100644 --- a/modular_zzplurt/code/modules/admin/player_panel.dm +++ b/modular_zzplurt/code/modules/admin/player_panel.dm @@ -47,7 +47,7 @@ GLOBAL_LIST_INIT(pp_limbs, list( .["mob_name"] = targetMob.real_name .["mob_type"] = targetMob.type .["admin_mob_type"] = user.client?.mob.type - .["godmode"] = targetMob.status_flags & GODMODE + .["godmode"] = HAS_TRAIT(user, TRAIT_GODMODE) var/mob/living/L = targetMob if (istype(L)) @@ -406,7 +406,7 @@ GLOBAL_LIST_INIT(pp_limbs, list( if (!L) continue L.dismember() - playsound(H, 'sound/effects/cartoon_pop.ogg', 70) + playsound(H, 'sound/effects/cartoon_sfx/cartoon_pop.ogg', 70) else H.regenerate_limb(limb) diff --git a/modular_zzplurt/code/modules/alternative_job_titles/code/alt_job_titles.dm b/modular_zzplurt/code/modules/alternative_job_titles/code/alt_job_titles.dm new file mode 100644 index 0000000000000..f26c6e16bd359 --- /dev/null +++ b/modular_zzplurt/code/modules/alternative_job_titles/code/alt_job_titles.dm @@ -0,0 +1,434 @@ +/datum/job/captain/New() + var/list/extra_titles = list( + "Station Director", + "Station Commander", + "Station Overseer", + "Station Mistress", + "Station Master", + "Cockpitain", + "Cuntpitain", + "Senator", + "Consul", + "Cap-Slut", + "Condom" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/chief_engineer/New() + var/list/extra_titles = list( + "Head Engineer", + "Construction Coordinator", + "Project Manager", + "Power Plant Director", + "Magos", + "Magos Biologis" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/head_of_personnel/New() + var/list/extra_titles = list( + "Head Of Stations Pets", + "Head Of Cumdumps", + "Head Of Slutty Personnel", + "Headpat Of Personnel", + "Headgiver To Personnel", + "Personnel Manager", + "Staff Administrator", + "Records Administrator", + "Captain Attachment" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/head_of_security/New() + var/list/extra_titles = list( + "Security Commander", + "Head of Slutcurity", + "Division Leader", + "Cerberus Leader", + "Head of Studcurity", + "Big Iron", + "Commissar" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/quartermaster/New() + var/list/extra_titles = list( + "Supply Chief", + "Cargonia Chief", + "Brigadier", + "Manager of Shipping Sex" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/research_director/New() + var/list/extra_titles = list( + "Science Administrator", + "Sex Research Director", + "Research Manager" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/chief_medical_officer/New() + var/list/extra_titles = list( + "Medical Director", + "Medical Administrator", + "Healing Fleshlight Mistress", + "Healing Fleshlight Master", + "Chief Heal Stud", + "Chief Heal Slut" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/atmospheric_technician/New() + var/list/extra_titles = list( + "Atmos Plumber", + "Anal Plumber", + "Atmos-Slut", + "Buttplug", + "Disposals Technician" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/station_engineer/New() + var/list/extra_titles = list( + "Structural Engineer", + "Astromechanic", + "Station Architect", + "Hazardous Material Operator", + "Junior Engineer", + "Engi-Slut", + "Apprentice Engineer", + "Techpriest Enginseer" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/assistant/New() + var/list/extra_titles = list( + "Stripper", + "Escort", + "Tourist", + "Clerk", + "Secretary", + "Blacksmith", + "Waiter", + "All-purpose fleshlight", + "All-purpose dildo", + "Cumdump", + "Greytider", + "Bard", + "Snack", + "Stress Relief", + "Service Top", + "Service Bottom", + "Service Pred", + "Service Prey", + "Belly Massager", + "Freeloader", + "Station Pet", + "Pet" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/bartender/New() + var/list/extra_titles = list( + "Mixologist", + "Sommelier", + "Bar Owner", + "Barmaid", + "Expediter" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/janitor/New() + var/list/extra_titles = list( + "Slutty Maid", + "Cum Cleaner", + "Liquidator", + "Custodial Technician" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/chaplain/New() + var/list/extra_titles = list( + "Bishop", + "Priestess", + "Prior", + "Monk", + "Tiger Cooperative Disciple", + "Nun", + "Keeper of Cum", + "Counselor", + "Techpriest" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/clown/New() + var/list/extra_titles = list( + "Jester", + "Comedian", + "Cumedian", + "Sexy Clown", + "Performer" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/cook/New() + var/list/extra_titles = list( + "Chef de partie", + "Prey Prepper", + "Pred Prepper", + "Poissonier", + "Chef De Sexe", + "Boss Of This Gym", + "Waffle Co. Specialist", + "Baker" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/curator/New() + var/list/extra_titles = list( + "Keeper", + "Archaeologist", + "Historian", + "Scholar", + "Hentai Artist", + "Artist" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/botanist/New() + var/list/extra_titles = list( + "Hydroponicist", + "Farmer", + "Beekeeper", + "Plants Breeder", + "Vintner", + "Soiler" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/lawyer/New() + var/list/extra_titles = list( + "Law-Slut", + "Internal Affairs Agent", + "Attorney" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/mime/New() + var/list/extra_titles = list( + "Pantomime", + "Cumtomime", + "Sexy Mime", + "Mimic" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/scientist/New() + var/list/extra_titles = list( + "Researcher", + "Toxins Researcher", + "Research Intern", + "Junior Scientist", + "Sex Researcher", + "Rack Researcher", + "Nanite Programmer", + "Tetromino Researcher", + "Xenoarchaeologist" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/roboticist/New() + var/list/extra_titles = list( + "Ripperdoc", + "MOD Mechanic", + "Synth Technician", + "Droid Mechanic", + "Borgs Slut", + "Robo-Slut", + "Techpriest Biologis" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/chemist/New() + var/list/extra_titles = list( + "Alchemist", + "Apothecarist", + "Chemical Plumber", + "Organomegaly Healer", + "Hexocrocin Therapist", + "Chemi-Slut", + "Chemi-Stud" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/doctor/New() + var/list/extra_titles = list( + "Physician", + "Medical Intern", + "Medical Resident", + "Medtech", + "Medi-Slut", + "Oral Doctor", + "Healing Fleshlight", + "Medi-Stud" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/psychologist/New() + var/list/extra_titles = list( + "Therapist", + "Psychiatrist", + "Hypnotist", + "Hypnosis Expert", + "Hypnotherapist", + "Sex Educator", + "Rental Mommy", + "Rental Daddy", + "Psycholo-Slut", + "Psycholo-Stud", + "Sexual Advisor" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/geneticist/New() + var/list/extra_titles = list( + "Genetics Researcher", + "Gene-Slut", + "Gene-Stud" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/paramedic/New() + var/list/extra_titles = list( + "Trauma Team", + "Para-Slut", + "Emergency Horny Technical", + "Emergency Cum Receiver", + "Emergency Condom Team", + "Para-Stud" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/virologist/New() + var/list/extra_titles = list( + "Microbiologist", + "Biochemist", + "Viro-Slut", + "Plague Doctor", + "Monkey Destroyer", + "Viro-Stud" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/detective/New() + var/list/extra_titles = list( + "Gumshoe", + "Slutective", + "Studective", + "Van Dorn Agent", + "Forensic Investigator", + "Cinder Dick", + "Cooperate Auditor" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/security_officer/New() + var/list/extra_titles = list( + "Security Agent", + "Probation Officer", + "Guardsman", + "Police Officer", + "Civil Protection", + "Tyranny Lover", + "Cerberus", + "Slutcurity Officer", + "Studcurity Officer" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/warden/New() + var/list/extra_titles = list( + "Prison Chief", + "Armory Manager", + "Prison Administrator", + "Dungeon Master", + "Brig Superintendent", + "Brig Overwatch", + "Slutcurity Captain", + "Voreden" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/cargo_technician/New() + var/list/extra_titles = list( + "Deliveries Officer", + "Mail Man", + "Mail Woman", + "Mailroom Technician", + "Logistics Technician", + "Cryptocurrency Technician", + "Horny Mailer", + "Pleasures Deliverer", + "Cock Packager", + "Disposal Technician", + "Donk Co. Specialist", + "Package Handler" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/shaft_miner/New() + var/list/extra_titles = list( + "Exotic Ore Miner", + "Digger", + "Hunter", + "Ashwalker Sex Slave", + "Ashwalker Breeder", + "Slayer" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() + +/datum/job/prisoner/New() + var/list/extra_titles = list( + "Low Security Prisoner", + "Medium Security Prisoner", + "Maximum Security Prisoner", + "Supermax Prisoner", + "Protective Custody Prisoner", + "Prison Slut", + "Prison Stud" + ) + LAZYADD(alt_titles, extra_titles) + . = ..() diff --git a/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm index 160b23e0e0c88..2536d2526a55f 100644 --- a/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm +++ b/modular_zzplurt/code/modules/clothing/underwear/~generated_files/socks.dm @@ -72,3 +72,12 @@ SOCKS_FROM_SPRITE_ACCESSORY(fishnet_thigh_sr) SOCKS_FROM_SPRITE_ACCESSORY(pantyhose_ripped) SOCKS_FROM_SPRITE_ACCESSORY(pantyhose_ripped/stirrups) SOCKS_FROM_SPRITE_ACCESSORY(stockings_ripped) +SOCKS_FROM_SPRITE_ACCESSORY(warm_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(warm_ankle) +SOCKS_FROM_SPRITE_ACCESSORY(warm_short) +SOCKS_FROM_SPRITE_ACCESSORY(recolor_thigh) +SOCKS_FROM_SPRITE_ACCESSORY(cool_thighs) +SOCKS_FROM_SPRITE_ACCESSORY(cool_ankle) +SOCKS_FROM_SPRITE_ACCESSORY(cool_short) +SOCKS_FROM_SPRITE_ACCESSORY(grey_ankle) +SOCKS_FROM_SPRITE_ACCESSORY(grey_short) diff --git a/modular_zzplurt/code/modules/mob/living/emote.dm b/modular_zzplurt/code/modules/mob/living/emote.dm index 4dbacb79bb86a..048e6613600f7 100644 --- a/modular_zzplurt/code/modules/mob/living/emote.dm +++ b/modular_zzplurt/code/modules/mob/living/emote.dm @@ -670,8 +670,8 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/snore/snore2/run_emote(mob/user, params) - var/datum/dna/D = user.has_dna() - var/say_mod = (D ? D.species.say_mod : "says") + var/obj/item/organ/internal/tongue/tongue = user.get_organ_slot(ORGAN_SLOT_TONGUE) + var/say_mod = (tongue ? tongue.say_mod : "says") var/list/aaauughh = list( "lets out an earthshaking snore.", "lets out what sounds like a painful snore.", @@ -790,8 +790,8 @@ sound = 'modular_zzplurt/sound/voice/barks/poyo.ogg' /datum/emote/living/poyo/run_emote(mob/user, params, type_override, intentional) - var/datum/dna/D = user.has_dna() - var/say_mod = (D ? D.species.say_mod : "says") + var/obj/item/organ/internal/tongue/tongue = user.get_organ_slot(ORGAN_SLOT_TONGUE) + var/say_mod = (tongue ? tongue.say_mod : "says") message = replacetextEx(message, "%SAYS", say_mod) . = ..() diff --git a/modular_zzplurt/code/modules/species/arachnid.dm b/modular_zzplurt/code/modules/species/arachnid.dm index 317e61b415c70..5862ca26f9a81 100644 --- a/modular_zzplurt/code/modules/species/arachnid.dm +++ b/modular_zzplurt/code/modules/species/arachnid.dm @@ -18,7 +18,6 @@ mutanttongue = /obj/item/organ/internal/tongue/arachnid changesource_flags = MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | WABBAJACK | MIRROR_BADMIN | SLIME_EXTRACT - say_mod = "chitters" inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG external_organs = list( /obj/item/organ/external/mandibles = "Plain", diff --git a/modular_zzplurt/code/modules/surgery/bodyparts/species_parts/arachnid_parts.dm b/modular_zzplurt/code/modules/surgery/bodyparts/species_parts/arachnid_parts.dm index 2c1bd5eac330b..56c2c147fbb04 100644 --- a/modular_zzplurt/code/modules/surgery/bodyparts/species_parts/arachnid_parts.dm +++ b/modular_zzplurt/code/modules/surgery/bodyparts/species_parts/arachnid_parts.dm @@ -7,8 +7,8 @@ should_draw_greyscale = FALSE unarmed_attack_verbs = list("slash", "scratch", "claw") - unarmed_attack_sound = 'sound/weapons/slash.ogg' - unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' /obj/item/bodypart/arm/right/arachnid limb_id = SPECIES_ARACHNID @@ -19,8 +19,8 @@ should_draw_greyscale = FALSE unarmed_attack_verbs = list("slash", "scratch", "claw") - unarmed_attack_sound = 'sound/weapons/slash.ogg' - unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + unarmed_attack_sound = 'sound/items/weapons/slash.ogg' + unarmed_miss_sound = 'sound/items/weapons/slashmiss.ogg' /obj/item/bodypart/leg/left/arachnid limb_id = SPECIES_ARACHNID diff --git a/modular_zzplurt/readme.md b/modular_zzplurt/readme.md index 60a870a00f1aa..c35220b48cea1 100644 --- a/modular_zzplurt/readme.md +++ b/modular_zzplurt/readme.md @@ -4,7 +4,7 @@ Welcome to the S.P.L.U.R.T. codebase's modularization handbook! Our goal is to make contributing to our codebase as easy and comfy as possible for coders while upkeeping our code standards. We understand that maintaining a codebase that's a fork of another can be challenging, but with the right practices, we can keep our code clean, organized, and easy to manage. This handbook outlines our modularization protocols and coding standards to help you get started. -If you'd like to know more about coding, contributing and contribution standards, feel free to read this repository's [contribution guides](./.github/guides)! +If you'd like to know more about coding, contributing and contribution standards, feel free to read this repository's [contribution guides](../.github/guides)! ## Important Note - Test Your Pull Requests diff --git a/sound/ambience/antag/attribution.txt b/sound/ambience/antag/attribution.txt deleted file mode 100644 index 8db2b1b8ec2eb..0000000000000 --- a/sound/ambience/antag/attribution.txt +++ /dev/null @@ -1,11 +0,0 @@ -sound/ambience/antag/abductee.ogg is from "Warp SFX" https://freesound.org/people/Breviceps/sounds/453391 (CC0) -sound/ambience/antag/brainwash.ogg is from "nog.wav" https://freesound.org/people/_NOMINAL_/sounds/124602 (CC-BY 3.0) -sound/ambience/antag/hypnosis.ogg is from "Flashback.wav" https://freesound.org/people/Sclolex/sounds/342103 (CC0) - -{ -ambimaint8.ogg -ambimaint9.ogg -ambimaint10.ogg -ambimaint11.ogg -ambimaint12.ogg -} made by Kayozz , license: CC-by-SA \ No newline at end of file diff --git a/sound/ambience/attribution.txt b/sound/ambience/attribution.txt new file mode 100644 index 0000000000000..881197c211b7e --- /dev/null +++ b/sound/ambience/attribution.txt @@ -0,0 +1 @@ +magma.ogg - Hot spring.Seething and bubbles(2lrs,mltprcssng).wav by newlocknew -- https://freesound.org/s/581417/ -- License: Attribution 4.0 and wind 5 by ZIP.Creates -- https://freesound.org/s/726316/ -- License: Creative Commons 0 diff --git a/sound/ambience/aurora_caelus/attribution.txt b/sound/ambience/aurora_caelus/attribution.txt new file mode 100644 index 0000000000000..3249d093518d3 --- /dev/null +++ b/sound/ambience/aurora_caelus/attribution.txt @@ -0,0 +1,2 @@ +aurora_caelus.ogg is Music for Manatees, by Kevin Macleod. It has been licensed under CC-BY 3.0 license. + It has been cropped for use ingame, and also fades out. diff --git a/sound/ambience/aurora_caelus.ogg b/sound/ambience/aurora_caelus/aurora_caelus.ogg similarity index 100% rename from sound/ambience/aurora_caelus.ogg rename to sound/ambience/aurora_caelus/aurora_caelus.ogg diff --git a/sound/ambience/aurora_caelus_short.ogg b/sound/ambience/aurora_caelus/aurora_caelus_short.ogg similarity index 100% rename from sound/ambience/aurora_caelus_short.ogg rename to sound/ambience/aurora_caelus/aurora_caelus_short.ogg diff --git a/sound/ambience/seag1.ogg b/sound/ambience/beach/seag1.ogg similarity index 100% rename from sound/ambience/seag1.ogg rename to sound/ambience/beach/seag1.ogg diff --git a/sound/ambience/seag2.ogg b/sound/ambience/beach/seag2.ogg similarity index 100% rename from sound/ambience/seag2.ogg rename to sound/ambience/beach/seag2.ogg diff --git a/sound/ambience/seag3.ogg b/sound/ambience/beach/seag3.ogg similarity index 100% rename from sound/ambience/seag3.ogg rename to sound/ambience/beach/seag3.ogg diff --git a/sound/ambience/shore.ogg b/sound/ambience/beach/shore.ogg similarity index 100% rename from sound/ambience/shore.ogg rename to sound/ambience/beach/shore.ogg diff --git a/sound/misc/earth_rumble.ogg b/sound/ambience/earth_rumble/earth_rumble.ogg similarity index 100% rename from sound/misc/earth_rumble.ogg rename to sound/ambience/earth_rumble/earth_rumble.ogg diff --git a/sound/misc/earth_rumble_distant1.ogg b/sound/ambience/earth_rumble/earth_rumble_distant1.ogg similarity index 100% rename from sound/misc/earth_rumble_distant1.ogg rename to sound/ambience/earth_rumble/earth_rumble_distant1.ogg diff --git a/sound/misc/earth_rumble_distant2.ogg b/sound/ambience/earth_rumble/earth_rumble_distant2.ogg similarity index 100% rename from sound/misc/earth_rumble_distant2.ogg rename to sound/ambience/earth_rumble/earth_rumble_distant2.ogg diff --git a/sound/misc/earth_rumble_distant3.ogg b/sound/ambience/earth_rumble/earth_rumble_distant3.ogg similarity index 100% rename from sound/misc/earth_rumble_distant3.ogg rename to sound/ambience/earth_rumble/earth_rumble_distant3.ogg diff --git a/sound/misc/earth_rumble_distant4.ogg b/sound/ambience/earth_rumble/earth_rumble_distant4.ogg similarity index 100% rename from sound/misc/earth_rumble_distant4.ogg rename to sound/ambience/earth_rumble/earth_rumble_distant4.ogg diff --git a/sound/ambience/ambiatmos.ogg b/sound/ambience/engineering/ambiatmos.ogg similarity index 100% rename from sound/ambience/ambiatmos.ogg rename to sound/ambience/engineering/ambiatmos.ogg diff --git a/sound/ambience/ambiatmos2.ogg b/sound/ambience/engineering/ambiatmos2.ogg similarity index 100% rename from sound/ambience/ambiatmos2.ogg rename to sound/ambience/engineering/ambiatmos2.ogg diff --git a/sound/ambience/ambisin1.ogg b/sound/ambience/engineering/ambisin1.ogg similarity index 100% rename from sound/ambience/ambisin1.ogg rename to sound/ambience/engineering/ambisin1.ogg diff --git a/sound/ambience/ambisin2.ogg b/sound/ambience/engineering/ambisin2.ogg similarity index 100% rename from sound/ambience/ambisin2.ogg rename to sound/ambience/engineering/ambisin2.ogg diff --git a/sound/ambience/ambisin3.ogg b/sound/ambience/engineering/ambisin3.ogg similarity index 100% rename from sound/ambience/ambisin3.ogg rename to sound/ambience/engineering/ambisin3.ogg diff --git a/sound/ambience/ambisin4.ogg b/sound/ambience/engineering/ambisin4.ogg similarity index 100% rename from sound/ambience/ambisin4.ogg rename to sound/ambience/engineering/ambisin4.ogg diff --git a/sound/ambience/ambitech.ogg b/sound/ambience/engineering/ambitech.ogg similarity index 100% rename from sound/ambience/ambitech.ogg rename to sound/ambience/engineering/ambitech.ogg diff --git a/sound/ambience/ambitech2.ogg b/sound/ambience/engineering/ambitech2.ogg similarity index 100% rename from sound/ambience/ambitech2.ogg rename to sound/ambience/engineering/ambitech2.ogg diff --git a/sound/ambience/ambitech3.ogg b/sound/ambience/engineering/ambitech3.ogg similarity index 100% rename from sound/ambience/ambitech3.ogg rename to sound/ambience/engineering/ambitech3.ogg diff --git a/sound/ambience/ambigen1.ogg b/sound/ambience/general/ambigen1.ogg similarity index 100% rename from sound/ambience/ambigen1.ogg rename to sound/ambience/general/ambigen1.ogg diff --git a/sound/ambience/ambigen10.ogg b/sound/ambience/general/ambigen10.ogg similarity index 100% rename from sound/ambience/ambigen10.ogg rename to sound/ambience/general/ambigen10.ogg diff --git a/sound/ambience/ambigen11.ogg b/sound/ambience/general/ambigen11.ogg similarity index 100% rename from sound/ambience/ambigen11.ogg rename to sound/ambience/general/ambigen11.ogg diff --git a/sound/ambience/ambigen12.ogg b/sound/ambience/general/ambigen12.ogg similarity index 100% rename from sound/ambience/ambigen12.ogg rename to sound/ambience/general/ambigen12.ogg diff --git a/sound/ambience/ambigen13.ogg b/sound/ambience/general/ambigen13.ogg similarity index 100% rename from sound/ambience/ambigen13.ogg rename to sound/ambience/general/ambigen13.ogg diff --git a/sound/ambience/ambigen14.ogg b/sound/ambience/general/ambigen14.ogg similarity index 100% rename from sound/ambience/ambigen14.ogg rename to sound/ambience/general/ambigen14.ogg diff --git a/sound/ambience/ambigen2.ogg b/sound/ambience/general/ambigen2.ogg similarity index 100% rename from sound/ambience/ambigen2.ogg rename to sound/ambience/general/ambigen2.ogg diff --git a/sound/ambience/ambigen3.ogg b/sound/ambience/general/ambigen3.ogg similarity index 100% rename from sound/ambience/ambigen3.ogg rename to sound/ambience/general/ambigen3.ogg diff --git a/sound/ambience/ambigen4.ogg b/sound/ambience/general/ambigen4.ogg similarity index 100% rename from sound/ambience/ambigen4.ogg rename to sound/ambience/general/ambigen4.ogg diff --git a/sound/ambience/ambigen5.ogg b/sound/ambience/general/ambigen5.ogg similarity index 100% rename from sound/ambience/ambigen5.ogg rename to sound/ambience/general/ambigen5.ogg diff --git a/sound/ambience/ambigen6.ogg b/sound/ambience/general/ambigen6.ogg similarity index 100% rename from sound/ambience/ambigen6.ogg rename to sound/ambience/general/ambigen6.ogg diff --git a/sound/ambience/ambigen7.ogg b/sound/ambience/general/ambigen7.ogg similarity index 100% rename from sound/ambience/ambigen7.ogg rename to sound/ambience/general/ambigen7.ogg diff --git a/sound/ambience/ambigen8.ogg b/sound/ambience/general/ambigen8.ogg similarity index 100% rename from sound/ambience/ambigen8.ogg rename to sound/ambience/general/ambigen8.ogg diff --git a/sound/ambience/ambigen9.ogg b/sound/ambience/general/ambigen9.ogg similarity index 100% rename from sound/ambience/ambigen9.ogg rename to sound/ambience/general/ambigen9.ogg diff --git a/sound/ambience/shipambience.ogg b/sound/ambience/general/shipambience.ogg similarity index 100% rename from sound/ambience/shipambience.ogg rename to sound/ambience/general/shipambience.ogg diff --git a/sound/ambience/ambicha1.ogg b/sound/ambience/holy/ambicha1.ogg similarity index 100% rename from sound/ambience/ambicha1.ogg rename to sound/ambience/holy/ambicha1.ogg diff --git a/sound/ambience/ambicha2.ogg b/sound/ambience/holy/ambicha2.ogg similarity index 100% rename from sound/ambience/ambicha2.ogg rename to sound/ambience/holy/ambicha2.ogg diff --git a/sound/ambience/ambicha3.ogg b/sound/ambience/holy/ambicha3.ogg similarity index 100% rename from sound/ambience/ambicha3.ogg rename to sound/ambience/holy/ambicha3.ogg diff --git a/sound/ambience/ambicha4.ogg b/sound/ambience/holy/ambicha4.ogg similarity index 100% rename from sound/ambience/ambicha4.ogg rename to sound/ambience/holy/ambicha4.ogg diff --git a/sound/ambience/ambiholy.ogg b/sound/ambience/holy/ambiholy.ogg similarity index 100% rename from sound/ambience/ambiholy.ogg rename to sound/ambience/holy/ambiholy.ogg diff --git a/sound/ambience/ambiholy2.ogg b/sound/ambience/holy/ambiholy2.ogg similarity index 100% rename from sound/ambience/ambiholy2.ogg rename to sound/ambience/holy/ambiholy2.ogg diff --git a/sound/ambience/ambiholy3.ogg b/sound/ambience/holy/ambiholy3.ogg similarity index 100% rename from sound/ambience/ambiholy3.ogg rename to sound/ambience/holy/ambiholy3.ogg diff --git a/sound/ambience/ambiicemelody1.ogg b/sound/ambience/icemoon/ambiicemelody1.ogg similarity index 100% rename from sound/ambience/ambiicemelody1.ogg rename to sound/ambience/icemoon/ambiicemelody1.ogg diff --git a/sound/ambience/ambiicemelody2.ogg b/sound/ambience/icemoon/ambiicemelody2.ogg similarity index 100% rename from sound/ambience/ambiicemelody2.ogg rename to sound/ambience/icemoon/ambiicemelody2.ogg diff --git a/sound/ambience/ambiicemelody3.ogg b/sound/ambience/icemoon/ambiicemelody3.ogg similarity index 100% rename from sound/ambience/ambiicemelody3.ogg rename to sound/ambience/icemoon/ambiicemelody3.ogg diff --git a/sound/ambience/ambiicemelody4.ogg b/sound/ambience/icemoon/ambiicemelody4.ogg similarity index 100% rename from sound/ambience/ambiicemelody4.ogg rename to sound/ambience/icemoon/ambiicemelody4.ogg diff --git a/sound/ambience/ambiicesting1.ogg b/sound/ambience/icemoon/ambiicesting1.ogg similarity index 100% rename from sound/ambience/ambiicesting1.ogg rename to sound/ambience/icemoon/ambiicesting1.ogg diff --git a/sound/ambience/ambiicesting2.ogg b/sound/ambience/icemoon/ambiicesting2.ogg similarity index 100% rename from sound/ambience/ambiicesting2.ogg rename to sound/ambience/icemoon/ambiicesting2.ogg diff --git a/sound/ambience/ambiicesting3.ogg b/sound/ambience/icemoon/ambiicesting3.ogg similarity index 100% rename from sound/ambience/ambiicesting3.ogg rename to sound/ambience/icemoon/ambiicesting3.ogg diff --git a/sound/ambience/ambiicesting4.ogg b/sound/ambience/icemoon/ambiicesting4.ogg similarity index 100% rename from sound/ambience/ambiicesting4.ogg rename to sound/ambience/icemoon/ambiicesting4.ogg diff --git a/sound/ambience/ambiicesting5.ogg b/sound/ambience/icemoon/ambiicesting5.ogg similarity index 100% rename from sound/ambience/ambiicesting5.ogg rename to sound/ambience/icemoon/ambiicesting5.ogg diff --git a/sound/ambience/ambiicetheme.ogg b/sound/ambience/icemoon/ambiicetheme.ogg similarity index 100% rename from sound/ambience/ambiicetheme.ogg rename to sound/ambience/icemoon/ambiicetheme.ogg diff --git a/sound/ambience/ambicave.ogg b/sound/ambience/lavaland/ambicave.ogg similarity index 100% rename from sound/ambience/ambicave.ogg rename to sound/ambience/lavaland/ambicave.ogg diff --git a/sound/ambience/ambilava1.ogg b/sound/ambience/lavaland/ambilava1.ogg similarity index 100% rename from sound/ambience/ambilava1.ogg rename to sound/ambience/lavaland/ambilava1.ogg diff --git a/sound/ambience/ambilava2.ogg b/sound/ambience/lavaland/ambilava2.ogg similarity index 100% rename from sound/ambience/ambilava2.ogg rename to sound/ambience/lavaland/ambilava2.ogg diff --git a/sound/ambience/ambilava3.ogg b/sound/ambience/lavaland/ambilava3.ogg similarity index 100% rename from sound/ambience/ambilava3.ogg rename to sound/ambience/lavaland/ambilava3.ogg diff --git a/sound/ambience/lavaland/magma.ogg b/sound/ambience/lavaland/magma.ogg new file mode 100644 index 0000000000000..e461801f9aead Binary files /dev/null and b/sound/ambience/lavaland/magma.ogg differ diff --git a/sound/ambience/license.txt b/sound/ambience/license.txt deleted file mode 100644 index a0b6efb24c5c1..0000000000000 --- a/sound/ambience/license.txt +++ /dev/null @@ -1,17 +0,0 @@ -ambidet1.ogg and spy.ogg is Fast Talking by Kevin Macleod. It has been licensed under the CC-BY 3.0 license. - It has been cropped for use ingame. -ambidet2.ogg is Night on the Docks, Piano by Kevin Macleod. It has been licensed under CC-BY 3.0 license. - It has been cropped for use ingame, and also fades in. -aurora_caelus.ogg is Music for Manatees, by Kevin Macleod. It has been licensed under CC-BY 3.0 license. - It has been cropped for use ingame, and also fades out. -title0.ogg is Endless Space by Solus. It has been licensed under CC-BY 3.0 license. Source file downloaded from https://www.newgrounds.com/audio/listen/74946 -title1.mod is Flip-Flap created by Jakub "AceMan" Szeląg and taken from http://aminet.net/package/mods/xceed/Flipflap -title2.ogg is Robocop Theme (gameboy) remixed by Eric Schumacker -title3.ogg is Tintin On The Moon remixed by Cuboos https://tgstation13.org/phpBB/viewtopic.php?f=10&t=2157 (assumed CC under allowing it to be submitted to the github, see thread) - -VoidsEmbrace.ogg is Chopin - Waltz in C Sharp Minor (Op. 64 No. 2). It is in public domain. - -ambispace4.ogg is Sipping Bird, by Capsandi. It has been licensed under CC-BY 3.0 license. -ambimaint6.ogg and ambimaint7.ogg, created by Capsandi are licensed under CC-BY 3.0 license. - -CC-BY 3.0: http://creativecommons.org/licenses/by/3.0/ diff --git a/sound/ambience/magma.ogg b/sound/ambience/magma.ogg deleted file mode 100644 index 09ccc6bf92d6a..0000000000000 Binary files a/sound/ambience/magma.ogg and /dev/null differ diff --git a/sound/ambience/ambimaint.ogg b/sound/ambience/maintenance/ambimaint.ogg similarity index 100% rename from sound/ambience/ambimaint.ogg rename to sound/ambience/maintenance/ambimaint.ogg diff --git a/sound/ambience/ambimaint1.ogg b/sound/ambience/maintenance/ambimaint1.ogg similarity index 100% rename from sound/ambience/ambimaint1.ogg rename to sound/ambience/maintenance/ambimaint1.ogg diff --git a/sound/ambience/ambimaint10.ogg b/sound/ambience/maintenance/ambimaint10.ogg similarity index 100% rename from sound/ambience/ambimaint10.ogg rename to sound/ambience/maintenance/ambimaint10.ogg diff --git a/sound/ambience/ambimaint11.ogg b/sound/ambience/maintenance/ambimaint11.ogg similarity index 100% rename from sound/ambience/ambimaint11.ogg rename to sound/ambience/maintenance/ambimaint11.ogg diff --git a/sound/ambience/ambimaint12.ogg b/sound/ambience/maintenance/ambimaint12.ogg similarity index 100% rename from sound/ambience/ambimaint12.ogg rename to sound/ambience/maintenance/ambimaint12.ogg diff --git a/sound/ambience/ambimaint2.ogg b/sound/ambience/maintenance/ambimaint2.ogg similarity index 100% rename from sound/ambience/ambimaint2.ogg rename to sound/ambience/maintenance/ambimaint2.ogg diff --git a/sound/ambience/ambimaint3.ogg b/sound/ambience/maintenance/ambimaint3.ogg similarity index 100% rename from sound/ambience/ambimaint3.ogg rename to sound/ambience/maintenance/ambimaint3.ogg diff --git a/sound/ambience/ambimaint4.ogg b/sound/ambience/maintenance/ambimaint4.ogg similarity index 100% rename from sound/ambience/ambimaint4.ogg rename to sound/ambience/maintenance/ambimaint4.ogg diff --git a/sound/ambience/ambimaint5.ogg b/sound/ambience/maintenance/ambimaint5.ogg similarity index 100% rename from sound/ambience/ambimaint5.ogg rename to sound/ambience/maintenance/ambimaint5.ogg diff --git a/sound/ambience/ambimaint6.ogg b/sound/ambience/maintenance/ambimaint6.ogg similarity index 100% rename from sound/ambience/ambimaint6.ogg rename to sound/ambience/maintenance/ambimaint6.ogg diff --git a/sound/ambience/ambimaint7.ogg b/sound/ambience/maintenance/ambimaint7.ogg similarity index 100% rename from sound/ambience/ambimaint7.ogg rename to sound/ambience/maintenance/ambimaint7.ogg diff --git a/sound/ambience/ambimaint8.ogg b/sound/ambience/maintenance/ambimaint8.ogg similarity index 100% rename from sound/ambience/ambimaint8.ogg rename to sound/ambience/maintenance/ambimaint8.ogg diff --git a/sound/ambience/ambimaint9.ogg b/sound/ambience/maintenance/ambimaint9.ogg similarity index 100% rename from sound/ambience/ambimaint9.ogg rename to sound/ambience/maintenance/ambimaint9.ogg diff --git a/sound/ambience/maintenance/attribution.txt b/sound/ambience/maintenance/attribution.txt new file mode 100644 index 0000000000000..cf7d2fe0676b2 --- /dev/null +++ b/sound/ambience/maintenance/attribution.txt @@ -0,0 +1,2 @@ +ambispace4.ogg is Sipping Bird, by Capsandi. It has been licensed under CC-BY 3.0 license. +ambimaint6.ogg and ambimaint7.ogg, created by Capsandi are licensed under CC-BY 3.0 license. diff --git a/sound/ambience/maintambience.ogg b/sound/ambience/maintenance/maintambience.ogg similarity index 100% rename from sound/ambience/maintambience.ogg rename to sound/ambience/maintenance/maintambience.ogg diff --git a/sound/ambience/source_corridor2.ogg b/sound/ambience/maintenance/source_corridor2.ogg similarity index 100% rename from sound/ambience/source_corridor2.ogg rename to sound/ambience/maintenance/source_corridor2.ogg diff --git a/sound/ambience/ambimo1.ogg b/sound/ambience/medical/ambimo1.ogg similarity index 100% rename from sound/ambience/ambimo1.ogg rename to sound/ambience/medical/ambimo1.ogg diff --git a/sound/ambience/ambimo2.ogg b/sound/ambience/medical/ambimo2.ogg similarity index 100% rename from sound/ambience/ambimo2.ogg rename to sound/ambience/medical/ambimo2.ogg diff --git a/sound/ambience/ambinice.ogg b/sound/ambience/medical/ambinice.ogg similarity index 100% rename from sound/ambience/ambinice.ogg rename to sound/ambience/medical/ambinice.ogg diff --git a/sound/ambience/ambiviro.ogg b/sound/ambience/medical/ambiviro.ogg similarity index 100% rename from sound/ambience/ambiviro.ogg rename to sound/ambience/medical/ambiviro.ogg diff --git a/sound/ambience/ambiviro1.ogg b/sound/ambience/medical/ambiviro1.ogg similarity index 100% rename from sound/ambience/ambiviro1.ogg rename to sound/ambience/medical/ambiviro1.ogg diff --git a/sound/ambience/ambiviro2.ogg b/sound/ambience/medical/ambiviro2.ogg similarity index 100% rename from sound/ambience/ambiviro2.ogg rename to sound/ambience/medical/ambiviro2.ogg diff --git a/sound/ambience/ambiatm1.ogg b/sound/ambience/misc/ambiatm1.ogg similarity index 100% rename from sound/ambience/ambiatm1.ogg rename to sound/ambience/misc/ambiatm1.ogg diff --git a/sound/ambience/ambidanger.ogg b/sound/ambience/misc/ambidanger.ogg similarity index 100% rename from sound/ambience/ambidanger.ogg rename to sound/ambience/misc/ambidanger.ogg diff --git a/sound/ambience/ambidanger2.ogg b/sound/ambience/misc/ambidanger2.ogg similarity index 100% rename from sound/ambience/ambidanger2.ogg rename to sound/ambience/misc/ambidanger2.ogg diff --git a/sound/ambience/ambifailure.ogg b/sound/ambience/misc/ambifailure.ogg similarity index 100% rename from sound/ambience/ambifailure.ogg rename to sound/ambience/misc/ambifailure.ogg diff --git a/sound/ambience/ambimalf.ogg b/sound/ambience/misc/ambimalf.ogg similarity index 100% rename from sound/ambience/ambimalf.ogg rename to sound/ambience/misc/ambimalf.ogg diff --git a/sound/ambience/ambimystery.ogg b/sound/ambience/misc/ambimystery.ogg similarity index 100% rename from sound/ambience/ambimystery.ogg rename to sound/ambience/misc/ambimystery.ogg diff --git a/sound/ambience/ambiodd.ogg b/sound/ambience/misc/ambiodd.ogg similarity index 100% rename from sound/ambience/ambiodd.ogg rename to sound/ambience/misc/ambiodd.ogg diff --git a/sound/ambience/ambireebe1.ogg b/sound/ambience/misc/ambireebe1.ogg similarity index 100% rename from sound/ambience/ambireebe1.ogg rename to sound/ambience/misc/ambireebe1.ogg diff --git a/sound/ambience/ambireebe2.ogg b/sound/ambience/misc/ambireebe2.ogg similarity index 100% rename from sound/ambience/ambireebe2.ogg rename to sound/ambience/misc/ambireebe2.ogg diff --git a/sound/ambience/ambireebe3.ogg b/sound/ambience/misc/ambireebe3.ogg similarity index 100% rename from sound/ambience/ambireebe3.ogg rename to sound/ambience/misc/ambireebe3.ogg diff --git a/sound/ambience/ambivapor1.ogg b/sound/ambience/misc/ambivapor1.ogg similarity index 100% rename from sound/ambience/ambivapor1.ogg rename to sound/ambience/misc/ambivapor1.ogg diff --git a/sound/ambience/cavesound3.ogg b/sound/ambience/misc/cavesound3.ogg similarity index 100% rename from sound/ambience/cavesound3.ogg rename to sound/ambience/misc/cavesound3.ogg diff --git a/sound/ambience/signal.ogg b/sound/ambience/misc/signal.ogg similarity index 100% rename from sound/ambience/signal.ogg rename to sound/ambience/misc/signal.ogg diff --git a/sound/ambience/source_holehit3.ogg b/sound/ambience/misc/source_holehit3.ogg similarity index 100% rename from sound/ambience/source_holehit3.ogg rename to sound/ambience/misc/source_holehit3.ogg diff --git a/sound/ambience/ticking_clock.ogg b/sound/ambience/misc/ticking_clock.ogg similarity index 100% rename from sound/ambience/ticking_clock.ogg rename to sound/ambience/misc/ticking_clock.ogg diff --git a/sound/ambience/ambimine.ogg b/sound/ambience/ruin/ambimine.ogg similarity index 100% rename from sound/ambience/ambimine.ogg rename to sound/ambience/ruin/ambimine.ogg diff --git a/sound/ambience/ambiruin.ogg b/sound/ambience/ruin/ambiruin.ogg similarity index 100% rename from sound/ambience/ambiruin.ogg rename to sound/ambience/ruin/ambiruin.ogg diff --git a/sound/ambience/ambiruin2.ogg b/sound/ambience/ruin/ambiruin2.ogg similarity index 100% rename from sound/ambience/ambiruin2.ogg rename to sound/ambience/ruin/ambiruin2.ogg diff --git a/sound/ambience/ambiruin3.ogg b/sound/ambience/ruin/ambiruin3.ogg similarity index 100% rename from sound/ambience/ambiruin3.ogg rename to sound/ambience/ruin/ambiruin3.ogg diff --git a/sound/ambience/ambiruin4.ogg b/sound/ambience/ruin/ambiruin4.ogg similarity index 100% rename from sound/ambience/ambiruin4.ogg rename to sound/ambience/ruin/ambiruin4.ogg diff --git a/sound/ambience/ambiruin5.ogg b/sound/ambience/ruin/ambiruin5.ogg similarity index 100% rename from sound/ambience/ambiruin5.ogg rename to sound/ambience/ruin/ambiruin5.ogg diff --git a/sound/ambience/ambiruin6.ogg b/sound/ambience/ruin/ambiruin6.ogg similarity index 100% rename from sound/ambience/ambiruin6.ogg rename to sound/ambience/ruin/ambiruin6.ogg diff --git a/sound/ambience/ambiruin7.ogg b/sound/ambience/ruin/ambiruin7.ogg similarity index 100% rename from sound/ambience/ambiruin7.ogg rename to sound/ambience/ruin/ambiruin7.ogg diff --git a/sound/ambience/servicebell.ogg b/sound/ambience/ruin/servicebell.ogg similarity index 100% rename from sound/ambience/servicebell.ogg rename to sound/ambience/ruin/servicebell.ogg diff --git a/sound/ambience/ambidet1.ogg b/sound/ambience/security/ambidet1.ogg similarity index 100% rename from sound/ambience/ambidet1.ogg rename to sound/ambience/security/ambidet1.ogg diff --git a/sound/ambience/ambidet2.ogg b/sound/ambience/security/ambidet2.ogg similarity index 100% rename from sound/ambience/ambidet2.ogg rename to sound/ambience/security/ambidet2.ogg diff --git a/sound/ambience/security/attribution.txt b/sound/ambience/security/attribution.txt new file mode 100644 index 0000000000000..ea51a227e9e91 --- /dev/null +++ b/sound/ambience/security/attribution.txt @@ -0,0 +1,4 @@ +ambidet1.ogg and spy.ogg is Fast Talking by Kevin Macleod. It has been licensed under the CC-BY 3.0 license. + It has been cropped for use ingame. +ambidet2.ogg is Night on the Docks, Piano by Kevin Macleod. It has been licensed under CC-BY 3.0 license. + It has been cropped for use ingame, and also fades in. diff --git a/sound/ambience/ambispace.ogg b/sound/ambience/space/ambispace.ogg similarity index 100% rename from sound/ambience/ambispace.ogg rename to sound/ambience/space/ambispace.ogg diff --git a/sound/ambience/ambispace2.ogg b/sound/ambience/space/ambispace2.ogg similarity index 100% rename from sound/ambience/ambispace2.ogg rename to sound/ambience/space/ambispace2.ogg diff --git a/sound/ambience/ambispace3.ogg b/sound/ambience/space/ambispace3.ogg similarity index 100% rename from sound/ambience/ambispace3.ogg rename to sound/ambience/space/ambispace3.ogg diff --git a/sound/ambience/ambispace4.ogg b/sound/ambience/space/ambispace4.ogg similarity index 100% rename from sound/ambience/ambispace4.ogg rename to sound/ambience/space/ambispace4.ogg diff --git a/sound/ambience/ambispace5.ogg b/sound/ambience/space/ambispace5.ogg similarity index 100% rename from sound/ambience/ambispace5.ogg rename to sound/ambience/space/ambispace5.ogg diff --git a/sound/ambience/ambispace6.ogg b/sound/ambience/space/ambispace6.ogg similarity index 100% rename from sound/ambience/ambispace6.ogg rename to sound/ambience/space/ambispace6.ogg diff --git a/sound/weather/ashstorm/inside/active_end.ogg b/sound/ambience/weather/ashstorm/inside/active_end.ogg similarity index 100% rename from sound/weather/ashstorm/inside/active_end.ogg rename to sound/ambience/weather/ashstorm/inside/active_end.ogg diff --git a/sound/weather/ashstorm/inside/active_mid1.ogg b/sound/ambience/weather/ashstorm/inside/active_mid1.ogg similarity index 100% rename from sound/weather/ashstorm/inside/active_mid1.ogg rename to sound/ambience/weather/ashstorm/inside/active_mid1.ogg diff --git a/sound/weather/ashstorm/inside/active_mid2.ogg b/sound/ambience/weather/ashstorm/inside/active_mid2.ogg similarity index 100% rename from sound/weather/ashstorm/inside/active_mid2.ogg rename to sound/ambience/weather/ashstorm/inside/active_mid2.ogg diff --git a/sound/weather/ashstorm/inside/active_mid3.ogg b/sound/ambience/weather/ashstorm/inside/active_mid3.ogg similarity index 100% rename from sound/weather/ashstorm/inside/active_mid3.ogg rename to sound/ambience/weather/ashstorm/inside/active_mid3.ogg diff --git a/sound/weather/ashstorm/inside/active_start.ogg b/sound/ambience/weather/ashstorm/inside/active_start.ogg similarity index 100% rename from sound/weather/ashstorm/inside/active_start.ogg rename to sound/ambience/weather/ashstorm/inside/active_start.ogg diff --git a/sound/weather/ashstorm/inside/weak_end.ogg b/sound/ambience/weather/ashstorm/inside/weak_end.ogg similarity index 100% rename from sound/weather/ashstorm/inside/weak_end.ogg rename to sound/ambience/weather/ashstorm/inside/weak_end.ogg diff --git a/sound/weather/ashstorm/inside/weak_mid1.ogg b/sound/ambience/weather/ashstorm/inside/weak_mid1.ogg similarity index 100% rename from sound/weather/ashstorm/inside/weak_mid1.ogg rename to sound/ambience/weather/ashstorm/inside/weak_mid1.ogg diff --git a/sound/weather/ashstorm/inside/weak_mid2.ogg b/sound/ambience/weather/ashstorm/inside/weak_mid2.ogg similarity index 100% rename from sound/weather/ashstorm/inside/weak_mid2.ogg rename to sound/ambience/weather/ashstorm/inside/weak_mid2.ogg diff --git a/sound/weather/ashstorm/inside/weak_mid3.ogg b/sound/ambience/weather/ashstorm/inside/weak_mid3.ogg similarity index 100% rename from sound/weather/ashstorm/inside/weak_mid3.ogg rename to sound/ambience/weather/ashstorm/inside/weak_mid3.ogg diff --git a/sound/weather/ashstorm/inside/weak_start.ogg b/sound/ambience/weather/ashstorm/inside/weak_start.ogg similarity index 100% rename from sound/weather/ashstorm/inside/weak_start.ogg rename to sound/ambience/weather/ashstorm/inside/weak_start.ogg diff --git a/sound/weather/ashstorm/outside/active_end.ogg b/sound/ambience/weather/ashstorm/outside/active_end.ogg similarity index 100% rename from sound/weather/ashstorm/outside/active_end.ogg rename to sound/ambience/weather/ashstorm/outside/active_end.ogg diff --git a/sound/weather/ashstorm/outside/active_mid1.ogg b/sound/ambience/weather/ashstorm/outside/active_mid1.ogg similarity index 100% rename from sound/weather/ashstorm/outside/active_mid1.ogg rename to sound/ambience/weather/ashstorm/outside/active_mid1.ogg diff --git a/sound/weather/ashstorm/outside/active_mid2.ogg b/sound/ambience/weather/ashstorm/outside/active_mid2.ogg similarity index 100% rename from sound/weather/ashstorm/outside/active_mid2.ogg rename to sound/ambience/weather/ashstorm/outside/active_mid2.ogg diff --git a/sound/weather/ashstorm/outside/active_mid3.ogg b/sound/ambience/weather/ashstorm/outside/active_mid3.ogg similarity index 100% rename from sound/weather/ashstorm/outside/active_mid3.ogg rename to sound/ambience/weather/ashstorm/outside/active_mid3.ogg diff --git a/sound/weather/ashstorm/outside/active_start.ogg b/sound/ambience/weather/ashstorm/outside/active_start.ogg similarity index 100% rename from sound/weather/ashstorm/outside/active_start.ogg rename to sound/ambience/weather/ashstorm/outside/active_start.ogg diff --git a/sound/weather/ashstorm/outside/weak_end.ogg b/sound/ambience/weather/ashstorm/outside/weak_end.ogg similarity index 100% rename from sound/weather/ashstorm/outside/weak_end.ogg rename to sound/ambience/weather/ashstorm/outside/weak_end.ogg diff --git a/sound/weather/ashstorm/outside/weak_mid1.ogg b/sound/ambience/weather/ashstorm/outside/weak_mid1.ogg similarity index 100% rename from sound/weather/ashstorm/outside/weak_mid1.ogg rename to sound/ambience/weather/ashstorm/outside/weak_mid1.ogg diff --git a/sound/weather/ashstorm/outside/weak_mid2.ogg b/sound/ambience/weather/ashstorm/outside/weak_mid2.ogg similarity index 100% rename from sound/weather/ashstorm/outside/weak_mid2.ogg rename to sound/ambience/weather/ashstorm/outside/weak_mid2.ogg diff --git a/sound/weather/ashstorm/outside/weak_mid3.ogg b/sound/ambience/weather/ashstorm/outside/weak_mid3.ogg similarity index 100% rename from sound/weather/ashstorm/outside/weak_mid3.ogg rename to sound/ambience/weather/ashstorm/outside/weak_mid3.ogg diff --git a/sound/weather/ashstorm/outside/weak_start.ogg b/sound/ambience/weather/ashstorm/outside/weak_start.ogg similarity index 100% rename from sound/weather/ashstorm/outside/weak_start.ogg rename to sound/ambience/weather/ashstorm/outside/weak_start.ogg diff --git a/sound/voice/ApproachingTG.ogg b/sound/announcer/ApproachingTG.ogg similarity index 100% rename from sound/voice/ApproachingTG.ogg rename to sound/announcer/ApproachingTG.ogg diff --git a/sound/misc/airraid.ogg b/sound/announcer/alarm/airraid.ogg similarity index 100% rename from sound/misc/airraid.ogg rename to sound/announcer/alarm/airraid.ogg diff --git a/sound/announcer/alarm/attribution.txt b/sound/announcer/alarm/attribution.txt new file mode 100644 index 0000000000000..47b896ed5e4f4 --- /dev/null +++ b/sound/announcer/alarm/attribution.txt @@ -0,0 +1,2 @@ +airraid.ogg by Jwade722. Shortened and cut. +https://freesound.org/people/Jwade722/sounds/534550/ diff --git a/sound/misc/bloblarm.ogg b/sound/announcer/alarm/bloblarm.ogg similarity index 100% rename from sound/misc/bloblarm.ogg rename to sound/announcer/alarm/bloblarm.ogg diff --git a/sound/machines/alarm.ogg b/sound/announcer/alarm/nuke_alarm.ogg similarity index 100% rename from sound/machines/alarm.ogg rename to sound/announcer/alarm/nuke_alarm.ogg diff --git a/sound/misc/announce.ogg b/sound/announcer/announcement/announce.ogg similarity index 100% rename from sound/misc/announce.ogg rename to sound/announcer/announcement/announce.ogg diff --git a/sound/misc/announce_dig.ogg b/sound/announcer/announcement/announce_dig.ogg similarity index 100% rename from sound/misc/announce_dig.ogg rename to sound/announcer/announcement/announce_dig.ogg diff --git a/sound/misc/announce_syndi.ogg b/sound/announcer/announcement/announce_syndi.ogg similarity index 100% rename from sound/misc/announce_syndi.ogg rename to sound/announcer/announcement/announce_syndi.ogg diff --git a/sound/ai/default/aimalf.ogg b/sound/announcer/default/aimalf.ogg similarity index 100% rename from sound/ai/default/aimalf.ogg rename to sound/announcer/default/aimalf.ogg diff --git a/sound/ai/default/aliens.ogg b/sound/announcer/default/aliens.ogg similarity index 100% rename from sound/ai/default/aliens.ogg rename to sound/announcer/default/aliens.ogg diff --git a/sound/ai/default/animes.ogg b/sound/announcer/default/animes.ogg similarity index 100% rename from sound/ai/default/animes.ogg rename to sound/announcer/default/animes.ogg diff --git a/sound/ai/default/attention.ogg b/sound/announcer/default/attention.ogg similarity index 100% rename from sound/ai/default/attention.ogg rename to sound/announcer/default/attention.ogg diff --git a/sound/ai/default/commandreport.ogg b/sound/announcer/default/commandreport.ogg similarity index 100% rename from sound/ai/default/commandreport.ogg rename to sound/announcer/default/commandreport.ogg diff --git a/sound/ai/default/granomalies.ogg b/sound/announcer/default/granomalies.ogg similarity index 100% rename from sound/ai/default/granomalies.ogg rename to sound/announcer/default/granomalies.ogg diff --git a/sound/ai/default/intercept.ogg b/sound/announcer/default/intercept.ogg similarity index 100% rename from sound/ai/default/intercept.ogg rename to sound/announcer/default/intercept.ogg diff --git a/sound/ai/default/ionstorm.ogg b/sound/announcer/default/ionstorm.ogg similarity index 100% rename from sound/ai/default/ionstorm.ogg rename to sound/announcer/default/ionstorm.ogg diff --git a/sound/ai/default/meteors.ogg b/sound/announcer/default/meteors.ogg similarity index 100% rename from sound/ai/default/meteors.ogg rename to sound/announcer/default/meteors.ogg diff --git a/sound/ai/default/outbreak5.ogg b/sound/announcer/default/outbreak5.ogg similarity index 100% rename from sound/ai/default/outbreak5.ogg rename to sound/announcer/default/outbreak5.ogg diff --git a/sound/ai/default/outbreak7.ogg b/sound/announcer/default/outbreak7.ogg similarity index 100% rename from sound/ai/default/outbreak7.ogg rename to sound/announcer/default/outbreak7.ogg diff --git a/sound/ai/default/poweroff.ogg b/sound/announcer/default/poweroff.ogg similarity index 100% rename from sound/ai/default/poweroff.ogg rename to sound/announcer/default/poweroff.ogg diff --git a/sound/ai/default/poweron.ogg b/sound/announcer/default/poweron.ogg similarity index 100% rename from sound/ai/default/poweron.ogg rename to sound/announcer/default/poweron.ogg diff --git a/sound/ai/default/radiation.ogg b/sound/announcer/default/radiation.ogg similarity index 100% rename from sound/ai/default/radiation.ogg rename to sound/announcer/default/radiation.ogg diff --git a/sound/ai/default/shuttlecalled.ogg b/sound/announcer/default/shuttlecalled.ogg similarity index 100% rename from sound/ai/default/shuttlecalled.ogg rename to sound/announcer/default/shuttlecalled.ogg diff --git a/sound/ai/default/shuttledock.ogg b/sound/announcer/default/shuttledock.ogg similarity index 100% rename from sound/ai/default/shuttledock.ogg rename to sound/announcer/default/shuttledock.ogg diff --git a/sound/ai/default/shuttlerecalled.ogg b/sound/announcer/default/shuttlerecalled.ogg similarity index 100% rename from sound/ai/default/shuttlerecalled.ogg rename to sound/announcer/default/shuttlerecalled.ogg diff --git a/sound/ai/default/spanomalies.ogg b/sound/announcer/default/spanomalies.ogg similarity index 100% rename from sound/ai/default/spanomalies.ogg rename to sound/announcer/default/spanomalies.ogg diff --git a/sound/ai/default/welcome.ogg b/sound/announcer/default/welcome.ogg similarity index 100% rename from sound/ai/default/welcome.ogg rename to sound/announcer/default/welcome.ogg diff --git a/sound/ai/intern/alerts/1.ogg b/sound/announcer/intern/alerts/1.ogg similarity index 100% rename from sound/ai/intern/alerts/1.ogg rename to sound/announcer/intern/alerts/1.ogg diff --git a/sound/ai/intern/alerts/10.ogg b/sound/announcer/intern/alerts/10.ogg similarity index 100% rename from sound/ai/intern/alerts/10.ogg rename to sound/announcer/intern/alerts/10.ogg diff --git a/sound/ai/intern/alerts/11.ogg b/sound/announcer/intern/alerts/11.ogg similarity index 100% rename from sound/ai/intern/alerts/11.ogg rename to sound/announcer/intern/alerts/11.ogg diff --git a/sound/ai/intern/alerts/12.ogg b/sound/announcer/intern/alerts/12.ogg similarity index 100% rename from sound/ai/intern/alerts/12.ogg rename to sound/announcer/intern/alerts/12.ogg diff --git a/sound/ai/intern/alerts/13.ogg b/sound/announcer/intern/alerts/13.ogg similarity index 100% rename from sound/ai/intern/alerts/13.ogg rename to sound/announcer/intern/alerts/13.ogg diff --git a/sound/ai/intern/alerts/14.ogg b/sound/announcer/intern/alerts/14.ogg similarity index 100% rename from sound/ai/intern/alerts/14.ogg rename to sound/announcer/intern/alerts/14.ogg diff --git a/sound/ai/intern/alerts/2.ogg b/sound/announcer/intern/alerts/2.ogg similarity index 100% rename from sound/ai/intern/alerts/2.ogg rename to sound/announcer/intern/alerts/2.ogg diff --git a/sound/ai/intern/alerts/3.ogg b/sound/announcer/intern/alerts/3.ogg similarity index 100% rename from sound/ai/intern/alerts/3.ogg rename to sound/announcer/intern/alerts/3.ogg diff --git a/sound/ai/intern/alerts/4.ogg b/sound/announcer/intern/alerts/4.ogg similarity index 100% rename from sound/ai/intern/alerts/4.ogg rename to sound/announcer/intern/alerts/4.ogg diff --git a/sound/ai/intern/alerts/5.ogg b/sound/announcer/intern/alerts/5.ogg similarity index 100% rename from sound/ai/intern/alerts/5.ogg rename to sound/announcer/intern/alerts/5.ogg diff --git a/sound/ai/intern/alerts/6.ogg b/sound/announcer/intern/alerts/6.ogg similarity index 100% rename from sound/ai/intern/alerts/6.ogg rename to sound/announcer/intern/alerts/6.ogg diff --git a/sound/ai/intern/alerts/7.ogg b/sound/announcer/intern/alerts/7.ogg similarity index 100% rename from sound/ai/intern/alerts/7.ogg rename to sound/announcer/intern/alerts/7.ogg diff --git a/sound/ai/intern/alerts/8.ogg b/sound/announcer/intern/alerts/8.ogg similarity index 100% rename from sound/ai/intern/alerts/8.ogg rename to sound/announcer/intern/alerts/8.ogg diff --git a/sound/ai/intern/alerts/9.ogg b/sound/announcer/intern/alerts/9.ogg similarity index 100% rename from sound/ai/intern/alerts/9.ogg rename to sound/announcer/intern/alerts/9.ogg diff --git a/sound/ai/intern/aliens.ogg b/sound/announcer/intern/aliens.ogg similarity index 100% rename from sound/ai/intern/aliens.ogg rename to sound/announcer/intern/aliens.ogg diff --git a/sound/ai/intern/animes.ogg b/sound/announcer/intern/animes.ogg similarity index 100% rename from sound/ai/intern/animes.ogg rename to sound/announcer/intern/animes.ogg diff --git a/sound/ai/intern/commandreport/1.ogg b/sound/announcer/intern/commandreport/1.ogg similarity index 100% rename from sound/ai/intern/commandreport/1.ogg rename to sound/announcer/intern/commandreport/1.ogg diff --git a/sound/ai/intern/commandreport/2.ogg b/sound/announcer/intern/commandreport/2.ogg similarity index 100% rename from sound/ai/intern/commandreport/2.ogg rename to sound/announcer/intern/commandreport/2.ogg diff --git a/sound/ai/intern/commandreport/3.ogg b/sound/announcer/intern/commandreport/3.ogg similarity index 100% rename from sound/ai/intern/commandreport/3.ogg rename to sound/announcer/intern/commandreport/3.ogg diff --git a/sound/ai/intern/granomalies.ogg b/sound/announcer/intern/granomalies.ogg similarity index 100% rename from sound/ai/intern/granomalies.ogg rename to sound/announcer/intern/granomalies.ogg diff --git a/sound/ai/intern/intercept.ogg b/sound/announcer/intern/intercept.ogg similarity index 100% rename from sound/ai/intern/intercept.ogg rename to sound/announcer/intern/intercept.ogg diff --git a/sound/ai/intern/ionstorm.ogg b/sound/announcer/intern/ionstorm.ogg similarity index 100% rename from sound/ai/intern/ionstorm.ogg rename to sound/announcer/intern/ionstorm.ogg diff --git a/sound/ai/intern/meteors.ogg b/sound/announcer/intern/meteors.ogg similarity index 100% rename from sound/ai/intern/meteors.ogg rename to sound/announcer/intern/meteors.ogg diff --git a/sound/ai/intern/outbreak5.ogg b/sound/announcer/intern/outbreak5.ogg similarity index 100% rename from sound/ai/intern/outbreak5.ogg rename to sound/announcer/intern/outbreak5.ogg diff --git a/sound/ai/intern/outbreak7.ogg b/sound/announcer/intern/outbreak7.ogg similarity index 100% rename from sound/ai/intern/outbreak7.ogg rename to sound/announcer/intern/outbreak7.ogg diff --git a/sound/ai/intern/poweroff.ogg b/sound/announcer/intern/poweroff.ogg similarity index 100% rename from sound/ai/intern/poweroff.ogg rename to sound/announcer/intern/poweroff.ogg diff --git a/sound/ai/intern/poweron.ogg b/sound/announcer/intern/poweron.ogg similarity index 100% rename from sound/ai/intern/poweron.ogg rename to sound/announcer/intern/poweron.ogg diff --git a/sound/ai/intern/radiation.ogg b/sound/announcer/intern/radiation.ogg similarity index 100% rename from sound/ai/intern/radiation.ogg rename to sound/announcer/intern/radiation.ogg diff --git a/sound/ai/intern/shuttlecalled.ogg b/sound/announcer/intern/shuttlecalled.ogg similarity index 100% rename from sound/ai/intern/shuttlecalled.ogg rename to sound/announcer/intern/shuttlecalled.ogg diff --git a/sound/ai/intern/shuttledock.ogg b/sound/announcer/intern/shuttledock.ogg similarity index 100% rename from sound/ai/intern/shuttledock.ogg rename to sound/announcer/intern/shuttledock.ogg diff --git a/sound/ai/intern/shuttlerecalled.ogg b/sound/announcer/intern/shuttlerecalled.ogg similarity index 100% rename from sound/ai/intern/shuttlerecalled.ogg rename to sound/announcer/intern/shuttlerecalled.ogg diff --git a/sound/ai/intern/spanomalies.ogg b/sound/announcer/intern/spanomalies.ogg similarity index 100% rename from sound/ai/intern/spanomalies.ogg rename to sound/announcer/intern/spanomalies.ogg diff --git a/sound/ai/intern/welcome/1.ogg b/sound/announcer/intern/welcome/1.ogg similarity index 100% rename from sound/ai/intern/welcome/1.ogg rename to sound/announcer/intern/welcome/1.ogg diff --git a/sound/ai/intern/welcome/2.ogg b/sound/announcer/intern/welcome/2.ogg similarity index 100% rename from sound/ai/intern/welcome/2.ogg rename to sound/announcer/intern/welcome/2.ogg diff --git a/sound/ai/intern/welcome/3.ogg b/sound/announcer/intern/welcome/3.ogg similarity index 100% rename from sound/ai/intern/welcome/3.ogg rename to sound/announcer/intern/welcome/3.ogg diff --git a/sound/ai/intern/welcome/4.ogg b/sound/announcer/intern/welcome/4.ogg similarity index 100% rename from sound/ai/intern/welcome/4.ogg rename to sound/announcer/intern/welcome/4.ogg diff --git a/sound/ai/intern/welcome/5.ogg b/sound/announcer/intern/welcome/5.ogg similarity index 100% rename from sound/ai/intern/welcome/5.ogg rename to sound/announcer/intern/welcome/5.ogg diff --git a/sound/ai/intern/welcome/6.ogg b/sound/announcer/intern/welcome/6.ogg similarity index 100% rename from sound/ai/intern/welcome/6.ogg rename to sound/announcer/intern/welcome/6.ogg diff --git a/sound/ai/medbot/aliens.ogg b/sound/announcer/medbot/aliens.ogg similarity index 100% rename from sound/ai/medbot/aliens.ogg rename to sound/announcer/medbot/aliens.ogg diff --git a/sound/ai/medbot/animes.ogg b/sound/announcer/medbot/animes.ogg similarity index 100% rename from sound/ai/medbot/animes.ogg rename to sound/announcer/medbot/animes.ogg diff --git a/sound/ai/medbot/attention.ogg b/sound/announcer/medbot/attention.ogg similarity index 100% rename from sound/ai/medbot/attention.ogg rename to sound/announcer/medbot/attention.ogg diff --git a/sound/ai/medbot/commandreport.ogg b/sound/announcer/medbot/commandreport.ogg similarity index 100% rename from sound/ai/medbot/commandreport.ogg rename to sound/announcer/medbot/commandreport.ogg diff --git a/sound/ai/medbot/granomalies.ogg b/sound/announcer/medbot/granomalies.ogg similarity index 100% rename from sound/ai/medbot/granomalies.ogg rename to sound/announcer/medbot/granomalies.ogg diff --git a/sound/ai/medbot/intercept.ogg b/sound/announcer/medbot/intercept.ogg similarity index 100% rename from sound/ai/medbot/intercept.ogg rename to sound/announcer/medbot/intercept.ogg diff --git a/sound/ai/medbot/ionstorm.ogg b/sound/announcer/medbot/ionstorm.ogg similarity index 100% rename from sound/ai/medbot/ionstorm.ogg rename to sound/announcer/medbot/ionstorm.ogg diff --git a/sound/ai/medbot/meteors.ogg b/sound/announcer/medbot/meteors.ogg similarity index 100% rename from sound/ai/medbot/meteors.ogg rename to sound/announcer/medbot/meteors.ogg diff --git a/sound/ai/medbot/newAI.ogg b/sound/announcer/medbot/newAI.ogg similarity index 100% rename from sound/ai/medbot/newAI.ogg rename to sound/announcer/medbot/newAI.ogg diff --git a/sound/ai/medbot/outbreak5.ogg b/sound/announcer/medbot/outbreak5.ogg similarity index 100% rename from sound/ai/medbot/outbreak5.ogg rename to sound/announcer/medbot/outbreak5.ogg diff --git a/sound/ai/medbot/outbreak7.ogg b/sound/announcer/medbot/outbreak7.ogg similarity index 100% rename from sound/ai/medbot/outbreak7.ogg rename to sound/announcer/medbot/outbreak7.ogg diff --git a/sound/ai/medbot/poweroff.ogg b/sound/announcer/medbot/poweroff.ogg similarity index 100% rename from sound/ai/medbot/poweroff.ogg rename to sound/announcer/medbot/poweroff.ogg diff --git a/sound/ai/medbot/poweron.ogg b/sound/announcer/medbot/poweron.ogg similarity index 100% rename from sound/ai/medbot/poweron.ogg rename to sound/announcer/medbot/poweron.ogg diff --git a/sound/ai/medbot/radiation.ogg b/sound/announcer/medbot/radiation.ogg similarity index 100% rename from sound/ai/medbot/radiation.ogg rename to sound/announcer/medbot/radiation.ogg diff --git a/sound/ai/medbot/shuttlecalled.ogg b/sound/announcer/medbot/shuttlecalled.ogg similarity index 100% rename from sound/ai/medbot/shuttlecalled.ogg rename to sound/announcer/medbot/shuttlecalled.ogg diff --git a/sound/ai/medbot/shuttledock.ogg b/sound/announcer/medbot/shuttledock.ogg similarity index 100% rename from sound/ai/medbot/shuttledock.ogg rename to sound/announcer/medbot/shuttledock.ogg diff --git a/sound/ai/medbot/shuttlerecalled.ogg b/sound/announcer/medbot/shuttlerecalled.ogg similarity index 100% rename from sound/ai/medbot/shuttlerecalled.ogg rename to sound/announcer/medbot/shuttlerecalled.ogg diff --git a/sound/ai/medbot/spanomalies.ogg b/sound/announcer/medbot/spanomalies.ogg similarity index 100% rename from sound/ai/medbot/spanomalies.ogg rename to sound/announcer/medbot/spanomalies.ogg diff --git a/sound/ai/medbot/welcome.ogg b/sound/announcer/medbot/welcome.ogg similarity index 100% rename from sound/ai/medbot/welcome.ogg rename to sound/announcer/medbot/welcome.ogg diff --git a/sound/misc/notice1.ogg b/sound/announcer/notice/notice1.ogg similarity index 100% rename from sound/misc/notice1.ogg rename to sound/announcer/notice/notice1.ogg diff --git a/sound/misc/notice2.ogg b/sound/announcer/notice/notice2.ogg similarity index 100% rename from sound/misc/notice2.ogg rename to sound/announcer/notice/notice2.ogg diff --git a/sound/misc/notice3.ogg b/sound/announcer/notice/notice3.ogg similarity index 100% rename from sound/misc/notice3.ogg rename to sound/announcer/notice/notice3.ogg diff --git a/sound/vox_fem/,.ogg b/sound/announcer/vox_fem/,.ogg similarity index 100% rename from sound/vox_fem/,.ogg rename to sound/announcer/vox_fem/,.ogg diff --git a/sound/vox_fem/..ogg b/sound/announcer/vox_fem/..ogg similarity index 100% rename from sound/vox_fem/..ogg rename to sound/announcer/vox_fem/..ogg diff --git a/sound/vox_fem/a.ogg b/sound/announcer/vox_fem/a.ogg similarity index 100% rename from sound/vox_fem/a.ogg rename to sound/announcer/vox_fem/a.ogg diff --git a/sound/vox_fem/abduction.ogg b/sound/announcer/vox_fem/abduction.ogg similarity index 100% rename from sound/vox_fem/abduction.ogg rename to sound/announcer/vox_fem/abduction.ogg diff --git a/sound/vox_fem/abortions.ogg b/sound/announcer/vox_fem/abortions.ogg similarity index 100% rename from sound/vox_fem/abortions.ogg rename to sound/announcer/vox_fem/abortions.ogg diff --git a/sound/vox_fem/above.ogg b/sound/announcer/vox_fem/above.ogg similarity index 100% rename from sound/vox_fem/above.ogg rename to sound/announcer/vox_fem/above.ogg diff --git a/sound/vox_fem/absorb.ogg b/sound/announcer/vox_fem/absorb.ogg similarity index 100% rename from sound/vox_fem/absorb.ogg rename to sound/announcer/vox_fem/absorb.ogg diff --git a/sound/vox_fem/absorbed.ogg b/sound/announcer/vox_fem/absorbed.ogg similarity index 100% rename from sound/vox_fem/absorbed.ogg rename to sound/announcer/vox_fem/absorbed.ogg diff --git a/sound/vox_fem/absorbing.ogg b/sound/announcer/vox_fem/absorbing.ogg similarity index 100% rename from sound/vox_fem/absorbing.ogg rename to sound/announcer/vox_fem/absorbing.ogg diff --git a/sound/vox_fem/abstain.ogg b/sound/announcer/vox_fem/abstain.ogg similarity index 100% rename from sound/vox_fem/abstain.ogg rename to sound/announcer/vox_fem/abstain.ogg diff --git a/sound/vox_fem/accelerating.ogg b/sound/announcer/vox_fem/accelerating.ogg similarity index 100% rename from sound/vox_fem/accelerating.ogg rename to sound/announcer/vox_fem/accelerating.ogg diff --git a/sound/vox_fem/accelerator.ogg b/sound/announcer/vox_fem/accelerator.ogg similarity index 100% rename from sound/vox_fem/accelerator.ogg rename to sound/announcer/vox_fem/accelerator.ogg diff --git a/sound/vox_fem/accepted.ogg b/sound/announcer/vox_fem/accepted.ogg similarity index 100% rename from sound/vox_fem/accepted.ogg rename to sound/announcer/vox_fem/accepted.ogg diff --git a/sound/vox_fem/access.ogg b/sound/announcer/vox_fem/access.ogg similarity index 100% rename from sound/vox_fem/access.ogg rename to sound/announcer/vox_fem/access.ogg diff --git a/sound/vox_fem/acknowledge.ogg b/sound/announcer/vox_fem/acknowledge.ogg similarity index 100% rename from sound/vox_fem/acknowledge.ogg rename to sound/announcer/vox_fem/acknowledge.ogg diff --git a/sound/vox_fem/acknowledged.ogg b/sound/announcer/vox_fem/acknowledged.ogg similarity index 100% rename from sound/vox_fem/acknowledged.ogg rename to sound/announcer/vox_fem/acknowledged.ogg diff --git a/sound/vox_fem/acquired.ogg b/sound/announcer/vox_fem/acquired.ogg similarity index 100% rename from sound/vox_fem/acquired.ogg rename to sound/announcer/vox_fem/acquired.ogg diff --git a/sound/vox_fem/acquisition.ogg b/sound/announcer/vox_fem/acquisition.ogg similarity index 100% rename from sound/vox_fem/acquisition.ogg rename to sound/announcer/vox_fem/acquisition.ogg diff --git a/sound/vox_fem/across.ogg b/sound/announcer/vox_fem/across.ogg similarity index 100% rename from sound/vox_fem/across.ogg rename to sound/announcer/vox_fem/across.ogg diff --git a/sound/vox_fem/activate.ogg b/sound/announcer/vox_fem/activate.ogg similarity index 100% rename from sound/vox_fem/activate.ogg rename to sound/announcer/vox_fem/activate.ogg diff --git a/sound/vox_fem/activated.ogg b/sound/announcer/vox_fem/activated.ogg similarity index 100% rename from sound/vox_fem/activated.ogg rename to sound/announcer/vox_fem/activated.ogg diff --git a/sound/vox_fem/activating.ogg b/sound/announcer/vox_fem/activating.ogg similarity index 100% rename from sound/vox_fem/activating.ogg rename to sound/announcer/vox_fem/activating.ogg diff --git a/sound/vox_fem/activation.ogg b/sound/announcer/vox_fem/activation.ogg similarity index 100% rename from sound/vox_fem/activation.ogg rename to sound/announcer/vox_fem/activation.ogg diff --git a/sound/vox_fem/active.ogg b/sound/announcer/vox_fem/active.ogg similarity index 100% rename from sound/vox_fem/active.ogg rename to sound/announcer/vox_fem/active.ogg diff --git a/sound/vox_fem/activity.ogg b/sound/announcer/vox_fem/activity.ogg similarity index 100% rename from sound/vox_fem/activity.ogg rename to sound/announcer/vox_fem/activity.ogg diff --git a/sound/vox_fem/adios.ogg b/sound/announcer/vox_fem/adios.ogg similarity index 100% rename from sound/vox_fem/adios.ogg rename to sound/announcer/vox_fem/adios.ogg diff --git a/sound/vox_fem/administration.ogg b/sound/announcer/vox_fem/administration.ogg similarity index 100% rename from sound/vox_fem/administration.ogg rename to sound/announcer/vox_fem/administration.ogg diff --git a/sound/vox_fem/advanced.ogg b/sound/announcer/vox_fem/advanced.ogg similarity index 100% rename from sound/vox_fem/advanced.ogg rename to sound/announcer/vox_fem/advanced.ogg diff --git a/sound/vox_fem/advised.ogg b/sound/announcer/vox_fem/advised.ogg similarity index 100% rename from sound/vox_fem/advised.ogg rename to sound/announcer/vox_fem/advised.ogg diff --git a/sound/vox_fem/affect.ogg b/sound/announcer/vox_fem/affect.ogg similarity index 100% rename from sound/vox_fem/affect.ogg rename to sound/announcer/vox_fem/affect.ogg diff --git a/sound/vox_fem/affected.ogg b/sound/announcer/vox_fem/affected.ogg similarity index 100% rename from sound/vox_fem/affected.ogg rename to sound/announcer/vox_fem/affected.ogg diff --git a/sound/vox_fem/affecting.ogg b/sound/announcer/vox_fem/affecting.ogg similarity index 100% rename from sound/vox_fem/affecting.ogg rename to sound/announcer/vox_fem/affecting.ogg diff --git a/sound/vox_fem/aft.ogg b/sound/announcer/vox_fem/aft.ogg similarity index 100% rename from sound/vox_fem/aft.ogg rename to sound/announcer/vox_fem/aft.ogg diff --git a/sound/vox_fem/after.ogg b/sound/announcer/vox_fem/after.ogg similarity index 100% rename from sound/vox_fem/after.ogg rename to sound/announcer/vox_fem/after.ogg diff --git a/sound/vox_fem/agent.ogg b/sound/announcer/vox_fem/agent.ogg similarity index 100% rename from sound/vox_fem/agent.ogg rename to sound/announcer/vox_fem/agent.ogg diff --git a/sound/vox_fem/ai.ogg b/sound/announcer/vox_fem/ai.ogg similarity index 100% rename from sound/vox_fem/ai.ogg rename to sound/announcer/vox_fem/ai.ogg diff --git a/sound/vox_fem/air.ogg b/sound/announcer/vox_fem/air.ogg similarity index 100% rename from sound/vox_fem/air.ogg rename to sound/announcer/vox_fem/air.ogg diff --git a/sound/vox_fem/airlock.ogg b/sound/announcer/vox_fem/airlock.ogg similarity index 100% rename from sound/vox_fem/airlock.ogg rename to sound/announcer/vox_fem/airlock.ogg diff --git a/sound/vox_fem/alarm.ogg b/sound/announcer/vox_fem/alarm.ogg similarity index 100% rename from sound/vox_fem/alarm.ogg rename to sound/announcer/vox_fem/alarm.ogg diff --git a/sound/vox_fem/alarmed.ogg b/sound/announcer/vox_fem/alarmed.ogg similarity index 100% rename from sound/vox_fem/alarmed.ogg rename to sound/announcer/vox_fem/alarmed.ogg diff --git a/sound/vox_fem/alarming.ogg b/sound/announcer/vox_fem/alarming.ogg similarity index 100% rename from sound/vox_fem/alarming.ogg rename to sound/announcer/vox_fem/alarming.ogg diff --git a/sound/vox_fem/alcohol.ogg b/sound/announcer/vox_fem/alcohol.ogg similarity index 100% rename from sound/vox_fem/alcohol.ogg rename to sound/announcer/vox_fem/alcohol.ogg diff --git a/sound/vox_fem/alert.ogg b/sound/announcer/vox_fem/alert.ogg similarity index 100% rename from sound/vox_fem/alert.ogg rename to sound/announcer/vox_fem/alert.ogg diff --git a/sound/vox_fem/alerted.ogg b/sound/announcer/vox_fem/alerted.ogg similarity index 100% rename from sound/vox_fem/alerted.ogg rename to sound/announcer/vox_fem/alerted.ogg diff --git a/sound/vox_fem/alerting.ogg b/sound/announcer/vox_fem/alerting.ogg similarity index 100% rename from sound/vox_fem/alerting.ogg rename to sound/announcer/vox_fem/alerting.ogg diff --git a/sound/vox_fem/alien.ogg b/sound/announcer/vox_fem/alien.ogg similarity index 100% rename from sound/vox_fem/alien.ogg rename to sound/announcer/vox_fem/alien.ogg diff --git a/sound/vox_fem/align.ogg b/sound/announcer/vox_fem/align.ogg similarity index 100% rename from sound/vox_fem/align.ogg rename to sound/announcer/vox_fem/align.ogg diff --git a/sound/vox_fem/aligned.ogg b/sound/announcer/vox_fem/aligned.ogg similarity index 100% rename from sound/vox_fem/aligned.ogg rename to sound/announcer/vox_fem/aligned.ogg diff --git a/sound/vox_fem/all.ogg b/sound/announcer/vox_fem/all.ogg similarity index 100% rename from sound/vox_fem/all.ogg rename to sound/announcer/vox_fem/all.ogg diff --git a/sound/vox_fem/allow.ogg b/sound/announcer/vox_fem/allow.ogg similarity index 100% rename from sound/vox_fem/allow.ogg rename to sound/announcer/vox_fem/allow.ogg diff --git a/sound/vox_fem/alongside.ogg b/sound/announcer/vox_fem/alongside.ogg similarity index 100% rename from sound/vox_fem/alongside.ogg rename to sound/announcer/vox_fem/alongside.ogg diff --git a/sound/vox_fem/alpha.ogg b/sound/announcer/vox_fem/alpha.ogg similarity index 100% rename from sound/vox_fem/alpha.ogg rename to sound/announcer/vox_fem/alpha.ogg diff --git a/sound/vox_fem/also.ogg b/sound/announcer/vox_fem/also.ogg similarity index 100% rename from sound/vox_fem/also.ogg rename to sound/announcer/vox_fem/also.ogg diff --git a/sound/vox_fem/am.ogg b/sound/announcer/vox_fem/am.ogg similarity index 100% rename from sound/vox_fem/am.ogg rename to sound/announcer/vox_fem/am.ogg diff --git a/sound/vox_fem/amigo.ogg b/sound/announcer/vox_fem/amigo.ogg similarity index 100% rename from sound/vox_fem/amigo.ogg rename to sound/announcer/vox_fem/amigo.ogg diff --git a/sound/vox_fem/ammunition.ogg b/sound/announcer/vox_fem/ammunition.ogg similarity index 100% rename from sound/vox_fem/ammunition.ogg rename to sound/announcer/vox_fem/ammunition.ogg diff --git a/sound/vox_fem/amount.ogg b/sound/announcer/vox_fem/amount.ogg similarity index 100% rename from sound/vox_fem/amount.ogg rename to sound/announcer/vox_fem/amount.ogg diff --git a/sound/vox_fem/an.ogg b/sound/announcer/vox_fem/an.ogg similarity index 100% rename from sound/vox_fem/an.ogg rename to sound/announcer/vox_fem/an.ogg diff --git a/sound/vox_fem/and.ogg b/sound/announcer/vox_fem/and.ogg similarity index 100% rename from sound/vox_fem/and.ogg rename to sound/announcer/vox_fem/and.ogg diff --git a/sound/vox_fem/animal.ogg b/sound/announcer/vox_fem/animal.ogg similarity index 100% rename from sound/vox_fem/animal.ogg rename to sound/announcer/vox_fem/animal.ogg diff --git a/sound/vox_fem/annihilate.ogg b/sound/announcer/vox_fem/annihilate.ogg similarity index 100% rename from sound/vox_fem/annihilate.ogg rename to sound/announcer/vox_fem/annihilate.ogg diff --git a/sound/vox_fem/annihilated.ogg b/sound/announcer/vox_fem/annihilated.ogg similarity index 100% rename from sound/vox_fem/annihilated.ogg rename to sound/announcer/vox_fem/annihilated.ogg diff --git a/sound/vox_fem/annihilating.ogg b/sound/announcer/vox_fem/annihilating.ogg similarity index 100% rename from sound/vox_fem/annihilating.ogg rename to sound/announcer/vox_fem/annihilating.ogg diff --git a/sound/vox_fem/annihilation.ogg b/sound/announcer/vox_fem/annihilation.ogg similarity index 100% rename from sound/vox_fem/annihilation.ogg rename to sound/announcer/vox_fem/annihilation.ogg diff --git a/sound/vox_fem/announcement.ogg b/sound/announcer/vox_fem/announcement.ogg similarity index 100% rename from sound/vox_fem/announcement.ogg rename to sound/announcer/vox_fem/announcement.ogg diff --git a/sound/vox_fem/anomalous.ogg b/sound/announcer/vox_fem/anomalous.ogg similarity index 100% rename from sound/vox_fem/anomalous.ogg rename to sound/announcer/vox_fem/anomalous.ogg diff --git a/sound/vox_fem/answer.ogg b/sound/announcer/vox_fem/answer.ogg similarity index 100% rename from sound/vox_fem/answer.ogg rename to sound/announcer/vox_fem/answer.ogg diff --git a/sound/vox_fem/antenna.ogg b/sound/announcer/vox_fem/antenna.ogg similarity index 100% rename from sound/vox_fem/antenna.ogg rename to sound/announcer/vox_fem/antenna.ogg diff --git a/sound/vox_fem/anti-noblium.ogg b/sound/announcer/vox_fem/anti-noblium.ogg similarity index 100% rename from sound/vox_fem/anti-noblium.ogg rename to sound/announcer/vox_fem/anti-noblium.ogg diff --git a/sound/vox_fem/any.ogg b/sound/announcer/vox_fem/any.ogg similarity index 100% rename from sound/vox_fem/any.ogg rename to sound/announcer/vox_fem/any.ogg diff --git a/sound/vox_fem/apc.ogg b/sound/announcer/vox_fem/apc.ogg similarity index 100% rename from sound/vox_fem/apc.ogg rename to sound/announcer/vox_fem/apc.ogg diff --git a/sound/vox_fem/apprehend.ogg b/sound/announcer/vox_fem/apprehend.ogg similarity index 100% rename from sound/vox_fem/apprehend.ogg rename to sound/announcer/vox_fem/apprehend.ogg diff --git a/sound/vox_fem/approach.ogg b/sound/announcer/vox_fem/approach.ogg similarity index 100% rename from sound/vox_fem/approach.ogg rename to sound/announcer/vox_fem/approach.ogg diff --git a/sound/vox_fem/arc.ogg b/sound/announcer/vox_fem/arc.ogg similarity index 100% rename from sound/vox_fem/arc.ogg rename to sound/announcer/vox_fem/arc.ogg diff --git a/sound/vox_fem/arcs.ogg b/sound/announcer/vox_fem/arcs.ogg similarity index 100% rename from sound/vox_fem/arcs.ogg rename to sound/announcer/vox_fem/arcs.ogg diff --git a/sound/vox_fem/are.ogg b/sound/announcer/vox_fem/are.ogg similarity index 100% rename from sound/vox_fem/are.ogg rename to sound/announcer/vox_fem/are.ogg diff --git a/sound/vox_fem/area.ogg b/sound/announcer/vox_fem/area.ogg similarity index 100% rename from sound/vox_fem/area.ogg rename to sound/announcer/vox_fem/area.ogg diff --git a/sound/vox_fem/arm.ogg b/sound/announcer/vox_fem/arm.ogg similarity index 100% rename from sound/vox_fem/arm.ogg rename to sound/announcer/vox_fem/arm.ogg diff --git a/sound/vox_fem/armed.ogg b/sound/announcer/vox_fem/armed.ogg similarity index 100% rename from sound/vox_fem/armed.ogg rename to sound/announcer/vox_fem/armed.ogg diff --git a/sound/vox_fem/armor.ogg b/sound/announcer/vox_fem/armor.ogg similarity index 100% rename from sound/vox_fem/armor.ogg rename to sound/announcer/vox_fem/armor.ogg diff --git a/sound/vox_fem/armory.ogg b/sound/announcer/vox_fem/armory.ogg similarity index 100% rename from sound/vox_fem/armory.ogg rename to sound/announcer/vox_fem/armory.ogg diff --git a/sound/vox_fem/around.ogg b/sound/announcer/vox_fem/around.ogg similarity index 100% rename from sound/vox_fem/around.ogg rename to sound/announcer/vox_fem/around.ogg diff --git a/sound/vox_fem/array.ogg b/sound/announcer/vox_fem/array.ogg similarity index 100% rename from sound/vox_fem/array.ogg rename to sound/announcer/vox_fem/array.ogg diff --git a/sound/vox_fem/arrest.ogg b/sound/announcer/vox_fem/arrest.ogg similarity index 100% rename from sound/vox_fem/arrest.ogg rename to sound/announcer/vox_fem/arrest.ogg diff --git a/sound/vox_fem/artillery.ogg b/sound/announcer/vox_fem/artillery.ogg similarity index 100% rename from sound/vox_fem/artillery.ogg rename to sound/announcer/vox_fem/artillery.ogg diff --git a/sound/vox_fem/asimov.ogg b/sound/announcer/vox_fem/asimov.ogg similarity index 100% rename from sound/vox_fem/asimov.ogg rename to sound/announcer/vox_fem/asimov.ogg diff --git a/sound/vox_fem/ask.ogg b/sound/announcer/vox_fem/ask.ogg similarity index 100% rename from sound/vox_fem/ask.ogg rename to sound/announcer/vox_fem/ask.ogg diff --git a/sound/vox_fem/ass.ogg b/sound/announcer/vox_fem/ass.ogg similarity index 100% rename from sound/vox_fem/ass.ogg rename to sound/announcer/vox_fem/ass.ogg diff --git a/sound/vox_fem/asshole.ogg b/sound/announcer/vox_fem/asshole.ogg similarity index 100% rename from sound/vox_fem/asshole.ogg rename to sound/announcer/vox_fem/asshole.ogg diff --git a/sound/vox_fem/assholes.ogg b/sound/announcer/vox_fem/assholes.ogg similarity index 100% rename from sound/vox_fem/assholes.ogg rename to sound/announcer/vox_fem/assholes.ogg diff --git a/sound/vox_fem/assistance.ogg b/sound/announcer/vox_fem/assistance.ogg similarity index 100% rename from sound/vox_fem/assistance.ogg rename to sound/announcer/vox_fem/assistance.ogg diff --git a/sound/vox_fem/assistant.ogg b/sound/announcer/vox_fem/assistant.ogg similarity index 100% rename from sound/vox_fem/assistant.ogg rename to sound/announcer/vox_fem/assistant.ogg diff --git a/sound/vox_fem/at.ogg b/sound/announcer/vox_fem/at.ogg similarity index 100% rename from sound/vox_fem/at.ogg rename to sound/announcer/vox_fem/at.ogg diff --git a/sound/vox_fem/ate.ogg b/sound/announcer/vox_fem/ate.ogg similarity index 100% rename from sound/vox_fem/ate.ogg rename to sound/announcer/vox_fem/ate.ogg diff --git a/sound/vox_fem/atmosphere.ogg b/sound/announcer/vox_fem/atmosphere.ogg similarity index 100% rename from sound/vox_fem/atmosphere.ogg rename to sound/announcer/vox_fem/atmosphere.ogg diff --git a/sound/vox_fem/atmospheric.ogg b/sound/announcer/vox_fem/atmospheric.ogg similarity index 100% rename from sound/vox_fem/atmospheric.ogg rename to sound/announcer/vox_fem/atmospheric.ogg diff --git a/sound/vox_fem/atmospherics.ogg b/sound/announcer/vox_fem/atmospherics.ogg similarity index 100% rename from sound/vox_fem/atmospherics.ogg rename to sound/announcer/vox_fem/atmospherics.ogg diff --git a/sound/vox_fem/atomic.ogg b/sound/announcer/vox_fem/atomic.ogg similarity index 100% rename from sound/vox_fem/atomic.ogg rename to sound/announcer/vox_fem/atomic.ogg diff --git a/sound/vox_fem/attention.ogg b/sound/announcer/vox_fem/attention.ogg similarity index 100% rename from sound/vox_fem/attention.ogg rename to sound/announcer/vox_fem/attention.ogg diff --git a/sound/vox_fem/authentication.ogg b/sound/announcer/vox_fem/authentication.ogg similarity index 100% rename from sound/vox_fem/authentication.ogg rename to sound/announcer/vox_fem/authentication.ogg diff --git a/sound/vox_fem/authorize.ogg b/sound/announcer/vox_fem/authorize.ogg similarity index 100% rename from sound/vox_fem/authorize.ogg rename to sound/announcer/vox_fem/authorize.ogg diff --git a/sound/vox_fem/authorized.ogg b/sound/announcer/vox_fem/authorized.ogg similarity index 100% rename from sound/vox_fem/authorized.ogg rename to sound/announcer/vox_fem/authorized.ogg diff --git a/sound/vox_fem/automatic.ogg b/sound/announcer/vox_fem/automatic.ogg similarity index 100% rename from sound/vox_fem/automatic.ogg rename to sound/announcer/vox_fem/automatic.ogg diff --git a/sound/vox_fem/away.ogg b/sound/announcer/vox_fem/away.ogg similarity index 100% rename from sound/vox_fem/away.ogg rename to sound/announcer/vox_fem/away.ogg diff --git a/sound/vox_fem/awful.ogg b/sound/announcer/vox_fem/awful.ogg similarity index 100% rename from sound/vox_fem/awful.ogg rename to sound/announcer/vox_fem/awful.ogg diff --git a/sound/vox_fem/b.ogg b/sound/announcer/vox_fem/b.ogg similarity index 100% rename from sound/vox_fem/b.ogg rename to sound/announcer/vox_fem/b.ogg diff --git a/sound/vox_fem/back.ogg b/sound/announcer/vox_fem/back.ogg similarity index 100% rename from sound/vox_fem/back.ogg rename to sound/announcer/vox_fem/back.ogg diff --git a/sound/vox_fem/backman.ogg b/sound/announcer/vox_fem/backman.ogg similarity index 100% rename from sound/vox_fem/backman.ogg rename to sound/announcer/vox_fem/backman.ogg diff --git a/sound/vox_fem/bad.ogg b/sound/announcer/vox_fem/bad.ogg similarity index 100% rename from sound/vox_fem/bad.ogg rename to sound/announcer/vox_fem/bad.ogg diff --git a/sound/vox_fem/bag.ogg b/sound/announcer/vox_fem/bag.ogg similarity index 100% rename from sound/vox_fem/bag.ogg rename to sound/announcer/vox_fem/bag.ogg diff --git a/sound/vox_fem/bailey.ogg b/sound/announcer/vox_fem/bailey.ogg similarity index 100% rename from sound/vox_fem/bailey.ogg rename to sound/announcer/vox_fem/bailey.ogg diff --git a/sound/vox_fem/bar.ogg b/sound/announcer/vox_fem/bar.ogg similarity index 100% rename from sound/vox_fem/bar.ogg rename to sound/announcer/vox_fem/bar.ogg diff --git a/sound/vox_fem/barracks.ogg b/sound/announcer/vox_fem/barracks.ogg similarity index 100% rename from sound/vox_fem/barracks.ogg rename to sound/announcer/vox_fem/barracks.ogg diff --git a/sound/vox_fem/bartender.ogg b/sound/announcer/vox_fem/bartender.ogg similarity index 100% rename from sound/vox_fem/bartender.ogg rename to sound/announcer/vox_fem/bartender.ogg diff --git a/sound/vox_fem/base.ogg b/sound/announcer/vox_fem/base.ogg similarity index 100% rename from sound/vox_fem/base.ogg rename to sound/announcer/vox_fem/base.ogg diff --git a/sound/vox_fem/bay.ogg b/sound/announcer/vox_fem/bay.ogg similarity index 100% rename from sound/vox_fem/bay.ogg rename to sound/announcer/vox_fem/bay.ogg diff --git a/sound/vox_fem/be.ogg b/sound/announcer/vox_fem/be.ogg similarity index 100% rename from sound/vox_fem/be.ogg rename to sound/announcer/vox_fem/be.ogg diff --git a/sound/vox_fem/beaker.ogg b/sound/announcer/vox_fem/beaker.ogg similarity index 100% rename from sound/vox_fem/beaker.ogg rename to sound/announcer/vox_fem/beaker.ogg diff --git a/sound/vox_fem/beam.ogg b/sound/announcer/vox_fem/beam.ogg similarity index 100% rename from sound/vox_fem/beam.ogg rename to sound/announcer/vox_fem/beam.ogg diff --git a/sound/vox_fem/been.ogg b/sound/announcer/vox_fem/been.ogg similarity index 100% rename from sound/vox_fem/been.ogg rename to sound/announcer/vox_fem/been.ogg diff --git a/sound/vox_fem/beep.ogg b/sound/announcer/vox_fem/beep.ogg similarity index 100% rename from sound/vox_fem/beep.ogg rename to sound/announcer/vox_fem/beep.ogg diff --git a/sound/vox_fem/before.ogg b/sound/announcer/vox_fem/before.ogg similarity index 100% rename from sound/vox_fem/before.ogg rename to sound/announcer/vox_fem/before.ogg diff --git a/sound/vox_fem/began.ogg b/sound/announcer/vox_fem/began.ogg similarity index 100% rename from sound/vox_fem/began.ogg rename to sound/announcer/vox_fem/began.ogg diff --git a/sound/vox_fem/begin.ogg b/sound/announcer/vox_fem/begin.ogg similarity index 100% rename from sound/vox_fem/begin.ogg rename to sound/announcer/vox_fem/begin.ogg diff --git a/sound/vox_fem/begins.ogg b/sound/announcer/vox_fem/begins.ogg similarity index 100% rename from sound/vox_fem/begins.ogg rename to sound/announcer/vox_fem/begins.ogg diff --git a/sound/vox_fem/below.ogg b/sound/announcer/vox_fem/below.ogg similarity index 100% rename from sound/vox_fem/below.ogg rename to sound/announcer/vox_fem/below.ogg diff --git a/sound/vox_fem/beside.ogg b/sound/announcer/vox_fem/beside.ogg similarity index 100% rename from sound/vox_fem/beside.ogg rename to sound/announcer/vox_fem/beside.ogg diff --git a/sound/vox_fem/beware.ogg b/sound/announcer/vox_fem/beware.ogg similarity index 100% rename from sound/vox_fem/beware.ogg rename to sound/announcer/vox_fem/beware.ogg diff --git a/sound/vox_fem/beyond.ogg b/sound/announcer/vox_fem/beyond.ogg similarity index 100% rename from sound/vox_fem/beyond.ogg rename to sound/announcer/vox_fem/beyond.ogg diff --git a/sound/vox_fem/big.ogg b/sound/announcer/vox_fem/big.ogg similarity index 100% rename from sound/vox_fem/big.ogg rename to sound/announcer/vox_fem/big.ogg diff --git a/sound/vox_fem/billion.ogg b/sound/announcer/vox_fem/billion.ogg similarity index 100% rename from sound/vox_fem/billion.ogg rename to sound/announcer/vox_fem/billion.ogg diff --git a/sound/vox_fem/biohazard.ogg b/sound/announcer/vox_fem/biohazard.ogg similarity index 100% rename from sound/vox_fem/biohazard.ogg rename to sound/announcer/vox_fem/biohazard.ogg diff --git a/sound/vox_fem/biological.ogg b/sound/announcer/vox_fem/biological.ogg similarity index 100% rename from sound/vox_fem/biological.ogg rename to sound/announcer/vox_fem/biological.ogg diff --git a/sound/vox_fem/birdwell.ogg b/sound/announcer/vox_fem/birdwell.ogg similarity index 100% rename from sound/vox_fem/birdwell.ogg rename to sound/announcer/vox_fem/birdwell.ogg diff --git a/sound/vox_fem/bitch.ogg b/sound/announcer/vox_fem/bitch.ogg similarity index 100% rename from sound/vox_fem/bitch.ogg rename to sound/announcer/vox_fem/bitch.ogg diff --git a/sound/vox_fem/bitches.ogg b/sound/announcer/vox_fem/bitches.ogg similarity index 100% rename from sound/vox_fem/bitches.ogg rename to sound/announcer/vox_fem/bitches.ogg diff --git a/sound/vox_fem/bitcoin.ogg b/sound/announcer/vox_fem/bitcoin.ogg similarity index 100% rename from sound/vox_fem/bitcoin.ogg rename to sound/announcer/vox_fem/bitcoin.ogg diff --git a/sound/vox_fem/bitrun.ogg b/sound/announcer/vox_fem/bitrun.ogg similarity index 100% rename from sound/vox_fem/bitrun.ogg rename to sound/announcer/vox_fem/bitrun.ogg diff --git a/sound/vox_fem/bitrunner.ogg b/sound/announcer/vox_fem/bitrunner.ogg similarity index 100% rename from sound/vox_fem/bitrunner.ogg rename to sound/announcer/vox_fem/bitrunner.ogg diff --git a/sound/vox_fem/bitrunning.ogg b/sound/announcer/vox_fem/bitrunning.ogg similarity index 100% rename from sound/vox_fem/bitrunning.ogg rename to sound/announcer/vox_fem/bitrunning.ogg diff --git a/sound/vox_fem/black.ogg b/sound/announcer/vox_fem/black.ogg similarity index 100% rename from sound/vox_fem/black.ogg rename to sound/announcer/vox_fem/black.ogg diff --git a/sound/vox_fem/blast.ogg b/sound/announcer/vox_fem/blast.ogg similarity index 100% rename from sound/vox_fem/blast.ogg rename to sound/announcer/vox_fem/blast.ogg diff --git a/sound/vox_fem/bleed.ogg b/sound/announcer/vox_fem/bleed.ogg similarity index 100% rename from sound/vox_fem/bleed.ogg rename to sound/announcer/vox_fem/bleed.ogg diff --git a/sound/vox_fem/blob.ogg b/sound/announcer/vox_fem/blob.ogg similarity index 100% rename from sound/vox_fem/blob.ogg rename to sound/announcer/vox_fem/blob.ogg diff --git a/sound/vox_fem/blocked.ogg b/sound/announcer/vox_fem/blocked.ogg similarity index 100% rename from sound/vox_fem/blocked.ogg rename to sound/announcer/vox_fem/blocked.ogg diff --git a/sound/vox_fem/blood.ogg b/sound/announcer/vox_fem/blood.ogg similarity index 100% rename from sound/vox_fem/blood.ogg rename to sound/announcer/vox_fem/blood.ogg diff --git a/sound/vox_fem/bloop.ogg b/sound/announcer/vox_fem/bloop.ogg similarity index 100% rename from sound/vox_fem/bloop.ogg rename to sound/announcer/vox_fem/bloop.ogg diff --git a/sound/vox_fem/blue.ogg b/sound/announcer/vox_fem/blue.ogg similarity index 100% rename from sound/vox_fem/blue.ogg rename to sound/announcer/vox_fem/blue.ogg diff --git a/sound/vox_fem/bluespace.ogg b/sound/announcer/vox_fem/bluespace.ogg similarity index 100% rename from sound/vox_fem/bluespace.ogg rename to sound/announcer/vox_fem/bluespace.ogg diff --git a/sound/vox_fem/bomb.ogg b/sound/announcer/vox_fem/bomb.ogg similarity index 100% rename from sound/vox_fem/bomb.ogg rename to sound/announcer/vox_fem/bomb.ogg diff --git a/sound/vox_fem/bone.ogg b/sound/announcer/vox_fem/bone.ogg similarity index 100% rename from sound/vox_fem/bone.ogg rename to sound/announcer/vox_fem/bone.ogg diff --git a/sound/vox_fem/botanist.ogg b/sound/announcer/vox_fem/botanist.ogg similarity index 100% rename from sound/vox_fem/botanist.ogg rename to sound/announcer/vox_fem/botanist.ogg diff --git a/sound/vox_fem/botany.ogg b/sound/announcer/vox_fem/botany.ogg similarity index 100% rename from sound/vox_fem/botany.ogg rename to sound/announcer/vox_fem/botany.ogg diff --git a/sound/vox_fem/bottle.ogg b/sound/announcer/vox_fem/bottle.ogg similarity index 100% rename from sound/vox_fem/bottle.ogg rename to sound/announcer/vox_fem/bottle.ogg diff --git a/sound/vox_fem/bottom.ogg b/sound/announcer/vox_fem/bottom.ogg similarity index 100% rename from sound/vox_fem/bottom.ogg rename to sound/announcer/vox_fem/bottom.ogg diff --git a/sound/vox_fem/bravo.ogg b/sound/announcer/vox_fem/bravo.ogg similarity index 100% rename from sound/vox_fem/bravo.ogg rename to sound/announcer/vox_fem/bravo.ogg diff --git a/sound/vox_fem/breach.ogg b/sound/announcer/vox_fem/breach.ogg similarity index 100% rename from sound/vox_fem/breach.ogg rename to sound/announcer/vox_fem/breach.ogg diff --git a/sound/vox_fem/breached.ogg b/sound/announcer/vox_fem/breached.ogg similarity index 100% rename from sound/vox_fem/breached.ogg rename to sound/announcer/vox_fem/breached.ogg diff --git a/sound/vox_fem/break.ogg b/sound/announcer/vox_fem/break.ogg similarity index 100% rename from sound/vox_fem/break.ogg rename to sound/announcer/vox_fem/break.ogg diff --git a/sound/vox_fem/bridge.ogg b/sound/announcer/vox_fem/bridge.ogg similarity index 100% rename from sound/vox_fem/bridge.ogg rename to sound/announcer/vox_fem/bridge.ogg diff --git a/sound/vox_fem/brig.ogg b/sound/announcer/vox_fem/brig.ogg similarity index 100% rename from sound/vox_fem/brig.ogg rename to sound/announcer/vox_fem/brig.ogg diff --git a/sound/vox_fem/broke.ogg b/sound/announcer/vox_fem/broke.ogg similarity index 100% rename from sound/vox_fem/broke.ogg rename to sound/announcer/vox_fem/broke.ogg diff --git a/sound/vox_fem/broken.ogg b/sound/announcer/vox_fem/broken.ogg similarity index 100% rename from sound/vox_fem/broken.ogg rename to sound/announcer/vox_fem/broken.ogg diff --git a/sound/vox_fem/bump.ogg b/sound/announcer/vox_fem/bump.ogg similarity index 100% rename from sound/vox_fem/bump.ogg rename to sound/announcer/vox_fem/bump.ogg diff --git a/sound/vox_fem/bumped.ogg b/sound/announcer/vox_fem/bumped.ogg similarity index 100% rename from sound/vox_fem/bumped.ogg rename to sound/announcer/vox_fem/bumped.ogg diff --git a/sound/vox_fem/bumps.ogg b/sound/announcer/vox_fem/bumps.ogg similarity index 100% rename from sound/vox_fem/bumps.ogg rename to sound/announcer/vox_fem/bumps.ogg diff --git a/sound/vox_fem/bust.ogg b/sound/announcer/vox_fem/bust.ogg similarity index 100% rename from sound/vox_fem/bust.ogg rename to sound/announcer/vox_fem/bust.ogg diff --git a/sound/vox_fem/but.ogg b/sound/announcer/vox_fem/but.ogg similarity index 100% rename from sound/vox_fem/but.ogg rename to sound/announcer/vox_fem/but.ogg diff --git a/sound/vox_fem/button.ogg b/sound/announcer/vox_fem/button.ogg similarity index 100% rename from sound/vox_fem/button.ogg rename to sound/announcer/vox_fem/button.ogg diff --git a/sound/vox_fem/bypass.ogg b/sound/announcer/vox_fem/bypass.ogg similarity index 100% rename from sound/vox_fem/bypass.ogg rename to sound/announcer/vox_fem/bypass.ogg diff --git a/sound/vox_fem/c.ogg b/sound/announcer/vox_fem/c.ogg similarity index 100% rename from sound/vox_fem/c.ogg rename to sound/announcer/vox_fem/c.ogg diff --git a/sound/vox_fem/cable.ogg b/sound/announcer/vox_fem/cable.ogg similarity index 100% rename from sound/vox_fem/cable.ogg rename to sound/announcer/vox_fem/cable.ogg diff --git a/sound/vox_fem/call.ogg b/sound/announcer/vox_fem/call.ogg similarity index 100% rename from sound/vox_fem/call.ogg rename to sound/announcer/vox_fem/call.ogg diff --git a/sound/vox_fem/called.ogg b/sound/announcer/vox_fem/called.ogg similarity index 100% rename from sound/vox_fem/called.ogg rename to sound/announcer/vox_fem/called.ogg diff --git a/sound/vox_fem/can.ogg b/sound/announcer/vox_fem/can.ogg similarity index 100% rename from sound/vox_fem/can.ogg rename to sound/announcer/vox_fem/can.ogg diff --git a/sound/vox_fem/canal.ogg b/sound/announcer/vox_fem/canal.ogg similarity index 100% rename from sound/vox_fem/canal.ogg rename to sound/announcer/vox_fem/canal.ogg diff --git a/sound/vox_fem/canister.ogg b/sound/announcer/vox_fem/canister.ogg similarity index 100% rename from sound/vox_fem/canister.ogg rename to sound/announcer/vox_fem/canister.ogg diff --git a/sound/vox_fem/cap.ogg b/sound/announcer/vox_fem/cap.ogg similarity index 100% rename from sound/vox_fem/cap.ogg rename to sound/announcer/vox_fem/cap.ogg diff --git a/sound/vox_fem/captain.ogg b/sound/announcer/vox_fem/captain.ogg similarity index 100% rename from sound/vox_fem/captain.ogg rename to sound/announcer/vox_fem/captain.ogg diff --git a/sound/vox_fem/capture.ogg b/sound/announcer/vox_fem/capture.ogg similarity index 100% rename from sound/vox_fem/capture.ogg rename to sound/announcer/vox_fem/capture.ogg diff --git a/sound/vox_fem/carbon.ogg b/sound/announcer/vox_fem/carbon.ogg similarity index 100% rename from sound/vox_fem/carbon.ogg rename to sound/announcer/vox_fem/carbon.ogg diff --git a/sound/vox_fem/cargo.ogg b/sound/announcer/vox_fem/cargo.ogg similarity index 100% rename from sound/vox_fem/cargo.ogg rename to sound/announcer/vox_fem/cargo.ogg diff --git a/sound/vox_fem/cascade.ogg b/sound/announcer/vox_fem/cascade.ogg similarity index 100% rename from sound/vox_fem/cascade.ogg rename to sound/announcer/vox_fem/cascade.ogg diff --git a/sound/vox_fem/cat.ogg b/sound/announcer/vox_fem/cat.ogg similarity index 100% rename from sound/vox_fem/cat.ogg rename to sound/announcer/vox_fem/cat.ogg diff --git a/sound/vox_fem/cause.ogg b/sound/announcer/vox_fem/cause.ogg similarity index 100% rename from sound/vox_fem/cause.ogg rename to sound/announcer/vox_fem/cause.ogg diff --git a/sound/vox_fem/caused.ogg b/sound/announcer/vox_fem/caused.ogg similarity index 100% rename from sound/vox_fem/caused.ogg rename to sound/announcer/vox_fem/caused.ogg diff --git a/sound/vox_fem/causes.ogg b/sound/announcer/vox_fem/causes.ogg similarity index 100% rename from sound/vox_fem/causes.ogg rename to sound/announcer/vox_fem/causes.ogg diff --git a/sound/vox_fem/causing.ogg b/sound/announcer/vox_fem/causing.ogg similarity index 100% rename from sound/vox_fem/causing.ogg rename to sound/announcer/vox_fem/causing.ogg diff --git a/sound/vox_fem/ce.ogg b/sound/announcer/vox_fem/ce.ogg similarity index 100% rename from sound/vox_fem/ce.ogg rename to sound/announcer/vox_fem/ce.ogg diff --git a/sound/vox_fem/cease.ogg b/sound/announcer/vox_fem/cease.ogg similarity index 100% rename from sound/vox_fem/cease.ogg rename to sound/announcer/vox_fem/cease.ogg diff --git a/sound/vox_fem/ceiling.ogg b/sound/announcer/vox_fem/ceiling.ogg similarity index 100% rename from sound/vox_fem/ceiling.ogg rename to sound/announcer/vox_fem/ceiling.ogg diff --git a/sound/vox_fem/celsius.ogg b/sound/announcer/vox_fem/celsius.ogg similarity index 100% rename from sound/vox_fem/celsius.ogg rename to sound/announcer/vox_fem/celsius.ogg diff --git a/sound/vox_fem/centcom.ogg b/sound/announcer/vox_fem/centcom.ogg similarity index 100% rename from sound/vox_fem/centcom.ogg rename to sound/announcer/vox_fem/centcom.ogg diff --git a/sound/vox_fem/center.ogg b/sound/announcer/vox_fem/center.ogg similarity index 100% rename from sound/vox_fem/center.ogg rename to sound/announcer/vox_fem/center.ogg diff --git a/sound/vox_fem/centi.ogg b/sound/announcer/vox_fem/centi.ogg similarity index 100% rename from sound/vox_fem/centi.ogg rename to sound/announcer/vox_fem/centi.ogg diff --git a/sound/vox_fem/central.ogg b/sound/announcer/vox_fem/central.ogg similarity index 100% rename from sound/vox_fem/central.ogg rename to sound/announcer/vox_fem/central.ogg diff --git a/sound/vox_fem/challenge.ogg b/sound/announcer/vox_fem/challenge.ogg similarity index 100% rename from sound/vox_fem/challenge.ogg rename to sound/announcer/vox_fem/challenge.ogg diff --git a/sound/vox_fem/chamber.ogg b/sound/announcer/vox_fem/chamber.ogg similarity index 100% rename from sound/vox_fem/chamber.ogg rename to sound/announcer/vox_fem/chamber.ogg diff --git a/sound/vox_fem/change.ogg b/sound/announcer/vox_fem/change.ogg similarity index 100% rename from sound/vox_fem/change.ogg rename to sound/announcer/vox_fem/change.ogg diff --git a/sound/vox_fem/changed.ogg b/sound/announcer/vox_fem/changed.ogg similarity index 100% rename from sound/vox_fem/changed.ogg rename to sound/announcer/vox_fem/changed.ogg diff --git a/sound/vox_fem/changeling.ogg b/sound/announcer/vox_fem/changeling.ogg similarity index 100% rename from sound/vox_fem/changeling.ogg rename to sound/announcer/vox_fem/changeling.ogg diff --git a/sound/vox_fem/chapel.ogg b/sound/announcer/vox_fem/chapel.ogg similarity index 100% rename from sound/vox_fem/chapel.ogg rename to sound/announcer/vox_fem/chapel.ogg diff --git a/sound/vox_fem/chaplain.ogg b/sound/announcer/vox_fem/chaplain.ogg similarity index 100% rename from sound/vox_fem/chaplain.ogg rename to sound/announcer/vox_fem/chaplain.ogg diff --git a/sound/vox_fem/charge.ogg b/sound/announcer/vox_fem/charge.ogg similarity index 100% rename from sound/vox_fem/charge.ogg rename to sound/announcer/vox_fem/charge.ogg diff --git a/sound/vox_fem/charlie.ogg b/sound/announcer/vox_fem/charlie.ogg similarity index 100% rename from sound/vox_fem/charlie.ogg rename to sound/announcer/vox_fem/charlie.ogg diff --git a/sound/vox_fem/check.ogg b/sound/announcer/vox_fem/check.ogg similarity index 100% rename from sound/vox_fem/check.ogg rename to sound/announcer/vox_fem/check.ogg diff --git a/sound/vox_fem/checkpoint.ogg b/sound/announcer/vox_fem/checkpoint.ogg similarity index 100% rename from sound/vox_fem/checkpoint.ogg rename to sound/announcer/vox_fem/checkpoint.ogg diff --git a/sound/vox_fem/chemical.ogg b/sound/announcer/vox_fem/chemical.ogg similarity index 100% rename from sound/vox_fem/chemical.ogg rename to sound/announcer/vox_fem/chemical.ogg diff --git a/sound/vox_fem/chemist.ogg b/sound/announcer/vox_fem/chemist.ogg similarity index 100% rename from sound/vox_fem/chemist.ogg rename to sound/announcer/vox_fem/chemist.ogg diff --git a/sound/vox_fem/chief.ogg b/sound/announcer/vox_fem/chief.ogg similarity index 100% rename from sound/vox_fem/chief.ogg rename to sound/announcer/vox_fem/chief.ogg diff --git a/sound/vox_fem/christ.ogg b/sound/announcer/vox_fem/christ.ogg similarity index 100% rename from sound/vox_fem/christ.ogg rename to sound/announcer/vox_fem/christ.ogg diff --git a/sound/vox_fem/christmas.ogg b/sound/announcer/vox_fem/christmas.ogg similarity index 100% rename from sound/vox_fem/christmas.ogg rename to sound/announcer/vox_fem/christmas.ogg diff --git a/sound/vox_fem/chuckle.ogg b/sound/announcer/vox_fem/chuckle.ogg similarity index 100% rename from sound/vox_fem/chuckle.ogg rename to sound/announcer/vox_fem/chuckle.ogg diff --git a/sound/vox_fem/circuit.ogg b/sound/announcer/vox_fem/circuit.ogg similarity index 100% rename from sound/vox_fem/circuit.ogg rename to sound/announcer/vox_fem/circuit.ogg diff --git a/sound/vox_fem/cleanup.ogg b/sound/announcer/vox_fem/cleanup.ogg similarity index 100% rename from sound/vox_fem/cleanup.ogg rename to sound/announcer/vox_fem/cleanup.ogg diff --git a/sound/vox_fem/clear.ogg b/sound/announcer/vox_fem/clear.ogg similarity index 100% rename from sound/vox_fem/clear.ogg rename to sound/announcer/vox_fem/clear.ogg diff --git a/sound/vox_fem/clearance.ogg b/sound/announcer/vox_fem/clearance.ogg similarity index 100% rename from sound/vox_fem/clearance.ogg rename to sound/announcer/vox_fem/clearance.ogg diff --git a/sound/vox_fem/clockwork.ogg b/sound/announcer/vox_fem/clockwork.ogg similarity index 100% rename from sound/vox_fem/clockwork.ogg rename to sound/announcer/vox_fem/clockwork.ogg diff --git a/sound/vox_fem/clog.ogg b/sound/announcer/vox_fem/clog.ogg similarity index 100% rename from sound/vox_fem/clog.ogg rename to sound/announcer/vox_fem/clog.ogg diff --git a/sound/vox_fem/close.ogg b/sound/announcer/vox_fem/close.ogg similarity index 100% rename from sound/vox_fem/close.ogg rename to sound/announcer/vox_fem/close.ogg diff --git a/sound/vox_fem/closed.ogg b/sound/announcer/vox_fem/closed.ogg similarity index 100% rename from sound/vox_fem/closed.ogg rename to sound/announcer/vox_fem/closed.ogg diff --git a/sound/vox_fem/closing.ogg b/sound/announcer/vox_fem/closing.ogg similarity index 100% rename from sound/vox_fem/closing.ogg rename to sound/announcer/vox_fem/closing.ogg diff --git a/sound/vox_fem/clothing.ogg b/sound/announcer/vox_fem/clothing.ogg similarity index 100% rename from sound/vox_fem/clothing.ogg rename to sound/announcer/vox_fem/clothing.ogg diff --git a/sound/vox_fem/clown.ogg b/sound/announcer/vox_fem/clown.ogg similarity index 100% rename from sound/vox_fem/clown.ogg rename to sound/announcer/vox_fem/clown.ogg diff --git a/sound/vox_fem/clowning.ogg b/sound/announcer/vox_fem/clowning.ogg similarity index 100% rename from sound/vox_fem/clowning.ogg rename to sound/announcer/vox_fem/clowning.ogg diff --git a/sound/vox_fem/cmo.ogg b/sound/announcer/vox_fem/cmo.ogg similarity index 100% rename from sound/vox_fem/cmo.ogg rename to sound/announcer/vox_fem/cmo.ogg diff --git a/sound/vox_fem/code.ogg b/sound/announcer/vox_fem/code.ogg similarity index 100% rename from sound/vox_fem/code.ogg rename to sound/announcer/vox_fem/code.ogg diff --git a/sound/vox_fem/coded.ogg b/sound/announcer/vox_fem/coded.ogg similarity index 100% rename from sound/vox_fem/coded.ogg rename to sound/announcer/vox_fem/coded.ogg diff --git a/sound/vox_fem/coil.ogg b/sound/announcer/vox_fem/coil.ogg similarity index 100% rename from sound/vox_fem/coil.ogg rename to sound/announcer/vox_fem/coil.ogg diff --git a/sound/vox_fem/coils.ogg b/sound/announcer/vox_fem/coils.ogg similarity index 100% rename from sound/vox_fem/coils.ogg rename to sound/announcer/vox_fem/coils.ogg diff --git a/sound/vox_fem/cold.ogg b/sound/announcer/vox_fem/cold.ogg similarity index 100% rename from sound/vox_fem/cold.ogg rename to sound/announcer/vox_fem/cold.ogg diff --git a/sound/vox_fem/collider.ogg b/sound/announcer/vox_fem/collider.ogg similarity index 100% rename from sound/vox_fem/collider.ogg rename to sound/announcer/vox_fem/collider.ogg diff --git a/sound/vox_fem/combat.ogg b/sound/announcer/vox_fem/combat.ogg similarity index 100% rename from sound/vox_fem/combat.ogg rename to sound/announcer/vox_fem/combat.ogg diff --git a/sound/vox_fem/combatant.ogg b/sound/announcer/vox_fem/combatant.ogg similarity index 100% rename from sound/vox_fem/combatant.ogg rename to sound/announcer/vox_fem/combatant.ogg diff --git a/sound/vox_fem/come.ogg b/sound/announcer/vox_fem/come.ogg similarity index 100% rename from sound/vox_fem/come.ogg rename to sound/announcer/vox_fem/come.ogg diff --git a/sound/vox_fem/command.ogg b/sound/announcer/vox_fem/command.ogg similarity index 100% rename from sound/vox_fem/command.ogg rename to sound/announcer/vox_fem/command.ogg diff --git a/sound/vox_fem/communication.ogg b/sound/announcer/vox_fem/communication.ogg similarity index 100% rename from sound/vox_fem/communication.ogg rename to sound/announcer/vox_fem/communication.ogg diff --git a/sound/vox_fem/complete.ogg b/sound/announcer/vox_fem/complete.ogg similarity index 100% rename from sound/vox_fem/complete.ogg rename to sound/announcer/vox_fem/complete.ogg diff --git a/sound/vox_fem/completed.ogg b/sound/announcer/vox_fem/completed.ogg similarity index 100% rename from sound/vox_fem/completed.ogg rename to sound/announcer/vox_fem/completed.ogg diff --git a/sound/vox_fem/completion.ogg b/sound/announcer/vox_fem/completion.ogg similarity index 100% rename from sound/vox_fem/completion.ogg rename to sound/announcer/vox_fem/completion.ogg diff --git a/sound/vox_fem/complex.ogg b/sound/announcer/vox_fem/complex.ogg similarity index 100% rename from sound/vox_fem/complex.ogg rename to sound/announcer/vox_fem/complex.ogg diff --git a/sound/vox_fem/comply.ogg b/sound/announcer/vox_fem/comply.ogg similarity index 100% rename from sound/vox_fem/comply.ogg rename to sound/announcer/vox_fem/comply.ogg diff --git a/sound/vox_fem/computer.ogg b/sound/announcer/vox_fem/computer.ogg similarity index 100% rename from sound/vox_fem/computer.ogg rename to sound/announcer/vox_fem/computer.ogg diff --git a/sound/vox_fem/condition.ogg b/sound/announcer/vox_fem/condition.ogg similarity index 100% rename from sound/vox_fem/condition.ogg rename to sound/announcer/vox_fem/condition.ogg diff --git a/sound/vox_fem/conditions.ogg b/sound/announcer/vox_fem/conditions.ogg similarity index 100% rename from sound/vox_fem/conditions.ogg rename to sound/announcer/vox_fem/conditions.ogg diff --git a/sound/vox_fem/condom.ogg b/sound/announcer/vox_fem/condom.ogg similarity index 100% rename from sound/vox_fem/condom.ogg rename to sound/announcer/vox_fem/condom.ogg diff --git a/sound/vox_fem/configure.ogg b/sound/announcer/vox_fem/configure.ogg similarity index 100% rename from sound/vox_fem/configure.ogg rename to sound/announcer/vox_fem/configure.ogg diff --git a/sound/vox_fem/configured.ogg b/sound/announcer/vox_fem/configured.ogg similarity index 100% rename from sound/vox_fem/configured.ogg rename to sound/announcer/vox_fem/configured.ogg diff --git a/sound/vox_fem/configuring.ogg b/sound/announcer/vox_fem/configuring.ogg similarity index 100% rename from sound/vox_fem/configuring.ogg rename to sound/announcer/vox_fem/configuring.ogg diff --git a/sound/vox_fem/confirmed.ogg b/sound/announcer/vox_fem/confirmed.ogg similarity index 100% rename from sound/vox_fem/confirmed.ogg rename to sound/announcer/vox_fem/confirmed.ogg diff --git a/sound/vox_fem/connor.ogg b/sound/announcer/vox_fem/connor.ogg similarity index 100% rename from sound/vox_fem/connor.ogg rename to sound/announcer/vox_fem/connor.ogg diff --git a/sound/vox_fem/console.ogg b/sound/announcer/vox_fem/console.ogg similarity index 100% rename from sound/vox_fem/console.ogg rename to sound/announcer/vox_fem/console.ogg diff --git a/sound/vox_fem/console2.ogg b/sound/announcer/vox_fem/console2.ogg similarity index 100% rename from sound/vox_fem/console2.ogg rename to sound/announcer/vox_fem/console2.ogg diff --git a/sound/vox_fem/construct.ogg b/sound/announcer/vox_fem/construct.ogg similarity index 100% rename from sound/vox_fem/construct.ogg rename to sound/announcer/vox_fem/construct.ogg diff --git a/sound/vox_fem/container.ogg b/sound/announcer/vox_fem/container.ogg similarity index 100% rename from sound/vox_fem/container.ogg rename to sound/announcer/vox_fem/container.ogg diff --git a/sound/vox_fem/containment.ogg b/sound/announcer/vox_fem/containment.ogg similarity index 100% rename from sound/vox_fem/containment.ogg rename to sound/announcer/vox_fem/containment.ogg diff --git a/sound/vox_fem/contamination.ogg b/sound/announcer/vox_fem/contamination.ogg similarity index 100% rename from sound/vox_fem/contamination.ogg rename to sound/announcer/vox_fem/contamination.ogg diff --git a/sound/vox_fem/contraband.ogg b/sound/announcer/vox_fem/contraband.ogg similarity index 100% rename from sound/vox_fem/contraband.ogg rename to sound/announcer/vox_fem/contraband.ogg diff --git a/sound/vox_fem/control.ogg b/sound/announcer/vox_fem/control.ogg similarity index 100% rename from sound/vox_fem/control.ogg rename to sound/announcer/vox_fem/control.ogg diff --git a/sound/vox_fem/cook.ogg b/sound/announcer/vox_fem/cook.ogg similarity index 100% rename from sound/vox_fem/cook.ogg rename to sound/announcer/vox_fem/cook.ogg diff --git a/sound/vox_fem/cool.ogg b/sound/announcer/vox_fem/cool.ogg similarity index 100% rename from sound/vox_fem/cool.ogg rename to sound/announcer/vox_fem/cool.ogg diff --git a/sound/vox_fem/coolant.ogg b/sound/announcer/vox_fem/coolant.ogg similarity index 100% rename from sound/vox_fem/coolant.ogg rename to sound/announcer/vox_fem/coolant.ogg diff --git a/sound/vox_fem/cooling.ogg b/sound/announcer/vox_fem/cooling.ogg similarity index 100% rename from sound/vox_fem/cooling.ogg rename to sound/announcer/vox_fem/cooling.ogg diff --git a/sound/vox_fem/coomer.ogg b/sound/announcer/vox_fem/coomer.ogg similarity index 100% rename from sound/vox_fem/coomer.ogg rename to sound/announcer/vox_fem/coomer.ogg diff --git a/sound/vox_fem/core.ogg b/sound/announcer/vox_fem/core.ogg similarity index 100% rename from sound/vox_fem/core.ogg rename to sound/announcer/vox_fem/core.ogg diff --git a/sound/vox_fem/corgi.ogg b/sound/announcer/vox_fem/corgi.ogg similarity index 100% rename from sound/vox_fem/corgi.ogg rename to sound/announcer/vox_fem/corgi.ogg diff --git a/sound/vox_fem/corporation.ogg b/sound/announcer/vox_fem/corporation.ogg similarity index 100% rename from sound/vox_fem/corporation.ogg rename to sound/announcer/vox_fem/corporation.ogg diff --git a/sound/vox_fem/correct.ogg b/sound/announcer/vox_fem/correct.ogg similarity index 100% rename from sound/vox_fem/correct.ogg rename to sound/announcer/vox_fem/correct.ogg diff --git a/sound/vox_fem/corridor.ogg b/sound/announcer/vox_fem/corridor.ogg similarity index 100% rename from sound/vox_fem/corridor.ogg rename to sound/announcer/vox_fem/corridor.ogg diff --git a/sound/vox_fem/corridors.ogg b/sound/announcer/vox_fem/corridors.ogg similarity index 100% rename from sound/vox_fem/corridors.ogg rename to sound/announcer/vox_fem/corridors.ogg diff --git a/sound/vox_fem/could.ogg b/sound/announcer/vox_fem/could.ogg similarity index 100% rename from sound/vox_fem/could.ogg rename to sound/announcer/vox_fem/could.ogg diff --git a/sound/vox_fem/couldnt.ogg b/sound/announcer/vox_fem/couldnt.ogg similarity index 100% rename from sound/vox_fem/couldnt.ogg rename to sound/announcer/vox_fem/couldnt.ogg diff --git a/sound/vox_fem/countdown.ogg b/sound/announcer/vox_fem/countdown.ogg similarity index 100% rename from sound/vox_fem/countdown.ogg rename to sound/announcer/vox_fem/countdown.ogg diff --git a/sound/vox_fem/coward.ogg b/sound/announcer/vox_fem/coward.ogg similarity index 100% rename from sound/vox_fem/coward.ogg rename to sound/announcer/vox_fem/coward.ogg diff --git a/sound/vox_fem/cowards.ogg b/sound/announcer/vox_fem/cowards.ogg similarity index 100% rename from sound/vox_fem/cowards.ogg rename to sound/announcer/vox_fem/cowards.ogg diff --git a/sound/vox_fem/crate.ogg b/sound/announcer/vox_fem/crate.ogg similarity index 100% rename from sound/vox_fem/crate.ogg rename to sound/announcer/vox_fem/crate.ogg diff --git a/sound/vox_fem/create.ogg b/sound/announcer/vox_fem/create.ogg similarity index 100% rename from sound/vox_fem/create.ogg rename to sound/announcer/vox_fem/create.ogg diff --git a/sound/vox_fem/created.ogg b/sound/announcer/vox_fem/created.ogg similarity index 100% rename from sound/vox_fem/created.ogg rename to sound/announcer/vox_fem/created.ogg diff --git a/sound/vox_fem/creating.ogg b/sound/announcer/vox_fem/creating.ogg similarity index 100% rename from sound/vox_fem/creating.ogg rename to sound/announcer/vox_fem/creating.ogg diff --git a/sound/vox_fem/creature.ogg b/sound/announcer/vox_fem/creature.ogg similarity index 100% rename from sound/vox_fem/creature.ogg rename to sound/announcer/vox_fem/creature.ogg diff --git a/sound/vox_fem/crew.ogg b/sound/announcer/vox_fem/crew.ogg similarity index 100% rename from sound/vox_fem/crew.ogg rename to sound/announcer/vox_fem/crew.ogg diff --git a/sound/vox_fem/critical.ogg b/sound/announcer/vox_fem/critical.ogg similarity index 100% rename from sound/vox_fem/critical.ogg rename to sound/announcer/vox_fem/critical.ogg diff --git a/sound/vox_fem/cross.ogg b/sound/announcer/vox_fem/cross.ogg similarity index 100% rename from sound/vox_fem/cross.ogg rename to sound/announcer/vox_fem/cross.ogg diff --git a/sound/vox_fem/cryogenic.ogg b/sound/announcer/vox_fem/cryogenic.ogg similarity index 100% rename from sound/vox_fem/cryogenic.ogg rename to sound/announcer/vox_fem/cryogenic.ogg diff --git a/sound/vox_fem/crystal.ogg b/sound/announcer/vox_fem/crystal.ogg similarity index 100% rename from sound/vox_fem/crystal.ogg rename to sound/announcer/vox_fem/crystal.ogg diff --git a/sound/vox_fem/cult.ogg b/sound/announcer/vox_fem/cult.ogg similarity index 100% rename from sound/vox_fem/cult.ogg rename to sound/announcer/vox_fem/cult.ogg diff --git a/sound/vox_fem/cultist.ogg b/sound/announcer/vox_fem/cultist.ogg similarity index 100% rename from sound/vox_fem/cultist.ogg rename to sound/announcer/vox_fem/cultist.ogg diff --git a/sound/vox_fem/cunt.ogg b/sound/announcer/vox_fem/cunt.ogg similarity index 100% rename from sound/vox_fem/cunt.ogg rename to sound/announcer/vox_fem/cunt.ogg diff --git a/sound/vox_fem/curator.ogg b/sound/announcer/vox_fem/curator.ogg similarity index 100% rename from sound/vox_fem/curator.ogg rename to sound/announcer/vox_fem/curator.ogg diff --git a/sound/vox_fem/cyborg.ogg b/sound/announcer/vox_fem/cyborg.ogg similarity index 100% rename from sound/vox_fem/cyborg.ogg rename to sound/announcer/vox_fem/cyborg.ogg diff --git a/sound/vox_fem/cyborgs.ogg b/sound/announcer/vox_fem/cyborgs.ogg similarity index 100% rename from sound/vox_fem/cyborgs.ogg rename to sound/announcer/vox_fem/cyborgs.ogg diff --git a/sound/vox_fem/d.ogg b/sound/announcer/vox_fem/d.ogg similarity index 100% rename from sound/vox_fem/d.ogg rename to sound/announcer/vox_fem/d.ogg diff --git a/sound/vox_fem/damage.ogg b/sound/announcer/vox_fem/damage.ogg similarity index 100% rename from sound/vox_fem/damage.ogg rename to sound/announcer/vox_fem/damage.ogg diff --git a/sound/vox_fem/damaged.ogg b/sound/announcer/vox_fem/damaged.ogg similarity index 100% rename from sound/vox_fem/damaged.ogg rename to sound/announcer/vox_fem/damaged.ogg diff --git a/sound/vox_fem/danger.ogg b/sound/announcer/vox_fem/danger.ogg similarity index 100% rename from sound/vox_fem/danger.ogg rename to sound/announcer/vox_fem/danger.ogg diff --git a/sound/vox_fem/dangerous.ogg b/sound/announcer/vox_fem/dangerous.ogg similarity index 100% rename from sound/vox_fem/dangerous.ogg rename to sound/announcer/vox_fem/dangerous.ogg diff --git a/sound/vox_fem/day.ogg b/sound/announcer/vox_fem/day.ogg similarity index 100% rename from sound/vox_fem/day.ogg rename to sound/announcer/vox_fem/day.ogg diff --git a/sound/vox_fem/deactivated.ogg b/sound/announcer/vox_fem/deactivated.ogg similarity index 100% rename from sound/vox_fem/deactivated.ogg rename to sound/announcer/vox_fem/deactivated.ogg diff --git a/sound/vox_fem/dead.ogg b/sound/announcer/vox_fem/dead.ogg similarity index 100% rename from sound/vox_fem/dead.ogg rename to sound/announcer/vox_fem/dead.ogg diff --git a/sound/vox_fem/death.ogg b/sound/announcer/vox_fem/death.ogg similarity index 100% rename from sound/vox_fem/death.ogg rename to sound/announcer/vox_fem/death.ogg diff --git a/sound/vox_fem/decompression.ogg b/sound/announcer/vox_fem/decompression.ogg similarity index 100% rename from sound/vox_fem/decompression.ogg rename to sound/announcer/vox_fem/decompression.ogg diff --git a/sound/vox_fem/decontamination.ogg b/sound/announcer/vox_fem/decontamination.ogg similarity index 100% rename from sound/vox_fem/decontamination.ogg rename to sound/announcer/vox_fem/decontamination.ogg diff --git a/sound/vox_fem/deeoo.ogg b/sound/announcer/vox_fem/deeoo.ogg similarity index 100% rename from sound/vox_fem/deeoo.ogg rename to sound/announcer/vox_fem/deeoo.ogg diff --git a/sound/vox_fem/defense.ogg b/sound/announcer/vox_fem/defense.ogg similarity index 100% rename from sound/vox_fem/defense.ogg rename to sound/announcer/vox_fem/defense.ogg diff --git a/sound/vox_fem/degrees.ogg b/sound/announcer/vox_fem/degrees.ogg similarity index 100% rename from sound/vox_fem/degrees.ogg rename to sound/announcer/vox_fem/degrees.ogg diff --git a/sound/vox_fem/delaminating.ogg b/sound/announcer/vox_fem/delaminating.ogg similarity index 100% rename from sound/vox_fem/delaminating.ogg rename to sound/announcer/vox_fem/delaminating.ogg diff --git a/sound/vox_fem/delamination.ogg b/sound/announcer/vox_fem/delamination.ogg similarity index 100% rename from sound/vox_fem/delamination.ogg rename to sound/announcer/vox_fem/delamination.ogg diff --git a/sound/vox_fem/delta.ogg b/sound/announcer/vox_fem/delta.ogg similarity index 100% rename from sound/vox_fem/delta.ogg rename to sound/announcer/vox_fem/delta.ogg diff --git a/sound/vox_fem/demon.ogg b/sound/announcer/vox_fem/demon.ogg similarity index 100% rename from sound/vox_fem/demon.ogg rename to sound/announcer/vox_fem/demon.ogg diff --git a/sound/vox_fem/denied.ogg b/sound/announcer/vox_fem/denied.ogg similarity index 100% rename from sound/vox_fem/denied.ogg rename to sound/announcer/vox_fem/denied.ogg diff --git a/sound/vox_fem/deny.ogg b/sound/announcer/vox_fem/deny.ogg similarity index 100% rename from sound/vox_fem/deny.ogg rename to sound/announcer/vox_fem/deny.ogg diff --git a/sound/vox_fem/departures.ogg b/sound/announcer/vox_fem/departures.ogg similarity index 100% rename from sound/vox_fem/departures.ogg rename to sound/announcer/vox_fem/departures.ogg diff --git a/sound/vox_fem/deploy.ogg b/sound/announcer/vox_fem/deploy.ogg similarity index 100% rename from sound/vox_fem/deploy.ogg rename to sound/announcer/vox_fem/deploy.ogg diff --git a/sound/vox_fem/deployed.ogg b/sound/announcer/vox_fem/deployed.ogg similarity index 100% rename from sound/vox_fem/deployed.ogg rename to sound/announcer/vox_fem/deployed.ogg diff --git a/sound/vox_fem/desire.ogg b/sound/announcer/vox_fem/desire.ogg similarity index 100% rename from sound/vox_fem/desire.ogg rename to sound/announcer/vox_fem/desire.ogg diff --git a/sound/vox_fem/desist.ogg b/sound/announcer/vox_fem/desist.ogg similarity index 100% rename from sound/vox_fem/desist.ogg rename to sound/announcer/vox_fem/desist.ogg diff --git a/sound/vox_fem/destroy.ogg b/sound/announcer/vox_fem/destroy.ogg similarity index 100% rename from sound/vox_fem/destroy.ogg rename to sound/announcer/vox_fem/destroy.ogg diff --git a/sound/vox_fem/destroyed.ogg b/sound/announcer/vox_fem/destroyed.ogg similarity index 100% rename from sound/vox_fem/destroyed.ogg rename to sound/announcer/vox_fem/destroyed.ogg diff --git a/sound/vox_fem/destruction.ogg b/sound/announcer/vox_fem/destruction.ogg similarity index 100% rename from sound/vox_fem/destruction.ogg rename to sound/announcer/vox_fem/destruction.ogg diff --git a/sound/vox_fem/detain.ogg b/sound/announcer/vox_fem/detain.ogg similarity index 100% rename from sound/vox_fem/detain.ogg rename to sound/announcer/vox_fem/detain.ogg diff --git a/sound/vox_fem/detect.ogg b/sound/announcer/vox_fem/detect.ogg similarity index 100% rename from sound/vox_fem/detect.ogg rename to sound/announcer/vox_fem/detect.ogg diff --git a/sound/vox_fem/detected.ogg b/sound/announcer/vox_fem/detected.ogg similarity index 100% rename from sound/vox_fem/detected.ogg rename to sound/announcer/vox_fem/detected.ogg diff --git a/sound/vox_fem/detecting.ogg b/sound/announcer/vox_fem/detecting.ogg similarity index 100% rename from sound/vox_fem/detecting.ogg rename to sound/announcer/vox_fem/detecting.ogg diff --git a/sound/vox_fem/detective.ogg b/sound/announcer/vox_fem/detective.ogg similarity index 100% rename from sound/vox_fem/detective.ogg rename to sound/announcer/vox_fem/detective.ogg diff --git a/sound/vox_fem/detonation.ogg b/sound/announcer/vox_fem/detonation.ogg similarity index 100% rename from sound/vox_fem/detonation.ogg rename to sound/announcer/vox_fem/detonation.ogg diff --git a/sound/vox_fem/device.ogg b/sound/announcer/vox_fem/device.ogg similarity index 100% rename from sound/vox_fem/device.ogg rename to sound/announcer/vox_fem/device.ogg diff --git a/sound/vox_fem/devil.ogg b/sound/announcer/vox_fem/devil.ogg similarity index 100% rename from sound/vox_fem/devil.ogg rename to sound/announcer/vox_fem/devil.ogg diff --git a/sound/vox_fem/did.ogg b/sound/announcer/vox_fem/did.ogg similarity index 100% rename from sound/vox_fem/did.ogg rename to sound/announcer/vox_fem/did.ogg diff --git a/sound/vox_fem/die.ogg b/sound/announcer/vox_fem/die.ogg similarity index 100% rename from sound/vox_fem/die.ogg rename to sound/announcer/vox_fem/die.ogg diff --git a/sound/vox_fem/died.ogg b/sound/announcer/vox_fem/died.ogg similarity index 100% rename from sound/vox_fem/died.ogg rename to sound/announcer/vox_fem/died.ogg diff --git a/sound/vox_fem/different.ogg b/sound/announcer/vox_fem/different.ogg similarity index 100% rename from sound/vox_fem/different.ogg rename to sound/announcer/vox_fem/different.ogg diff --git a/sound/vox_fem/dimensional.ogg b/sound/announcer/vox_fem/dimensional.ogg similarity index 100% rename from sound/vox_fem/dimensional.ogg rename to sound/announcer/vox_fem/dimensional.ogg diff --git a/sound/vox_fem/dioxide.ogg b/sound/announcer/vox_fem/dioxide.ogg similarity index 100% rename from sound/vox_fem/dioxide.ogg rename to sound/announcer/vox_fem/dioxide.ogg diff --git a/sound/vox_fem/direct.ogg b/sound/announcer/vox_fem/direct.ogg similarity index 100% rename from sound/vox_fem/direct.ogg rename to sound/announcer/vox_fem/direct.ogg diff --git a/sound/vox_fem/director.ogg b/sound/announcer/vox_fem/director.ogg similarity index 100% rename from sound/vox_fem/director.ogg rename to sound/announcer/vox_fem/director.ogg diff --git a/sound/vox_fem/dirt.ogg b/sound/announcer/vox_fem/dirt.ogg similarity index 100% rename from sound/vox_fem/dirt.ogg rename to sound/announcer/vox_fem/dirt.ogg diff --git a/sound/vox_fem/disabled.ogg b/sound/announcer/vox_fem/disabled.ogg similarity index 100% rename from sound/vox_fem/disabled.ogg rename to sound/announcer/vox_fem/disabled.ogg diff --git a/sound/vox_fem/disease.ogg b/sound/announcer/vox_fem/disease.ogg similarity index 100% rename from sound/vox_fem/disease.ogg rename to sound/announcer/vox_fem/disease.ogg diff --git a/sound/vox_fem/disengaged.ogg b/sound/announcer/vox_fem/disengaged.ogg similarity index 100% rename from sound/vox_fem/disengaged.ogg rename to sound/announcer/vox_fem/disengaged.ogg diff --git a/sound/vox_fem/dish.ogg b/sound/announcer/vox_fem/dish.ogg similarity index 100% rename from sound/vox_fem/dish.ogg rename to sound/announcer/vox_fem/dish.ogg diff --git a/sound/vox_fem/disk.ogg b/sound/announcer/vox_fem/disk.ogg similarity index 100% rename from sound/vox_fem/disk.ogg rename to sound/announcer/vox_fem/disk.ogg diff --git a/sound/vox_fem/disposal.ogg b/sound/announcer/vox_fem/disposal.ogg similarity index 100% rename from sound/vox_fem/disposal.ogg rename to sound/announcer/vox_fem/disposal.ogg diff --git a/sound/vox_fem/distance.ogg b/sound/announcer/vox_fem/distance.ogg similarity index 100% rename from sound/vox_fem/distance.ogg rename to sound/announcer/vox_fem/distance.ogg diff --git a/sound/vox_fem/distortion.ogg b/sound/announcer/vox_fem/distortion.ogg similarity index 100% rename from sound/vox_fem/distortion.ogg rename to sound/announcer/vox_fem/distortion.ogg diff --git a/sound/vox_fem/do.ogg b/sound/announcer/vox_fem/do.ogg similarity index 100% rename from sound/vox_fem/do.ogg rename to sound/announcer/vox_fem/do.ogg diff --git a/sound/vox_fem/doctor.ogg b/sound/announcer/vox_fem/doctor.ogg similarity index 100% rename from sound/vox_fem/doctor.ogg rename to sound/announcer/vox_fem/doctor.ogg diff --git a/sound/vox_fem/dog.ogg b/sound/announcer/vox_fem/dog.ogg similarity index 100% rename from sound/vox_fem/dog.ogg rename to sound/announcer/vox_fem/dog.ogg diff --git a/sound/vox_fem/dont.ogg b/sound/announcer/vox_fem/dont.ogg similarity index 100% rename from sound/vox_fem/dont.ogg rename to sound/announcer/vox_fem/dont.ogg diff --git a/sound/vox_fem/doomsday.ogg b/sound/announcer/vox_fem/doomsday.ogg similarity index 100% rename from sound/vox_fem/doomsday.ogg rename to sound/announcer/vox_fem/doomsday.ogg diff --git a/sound/vox_fem/doop.ogg b/sound/announcer/vox_fem/doop.ogg similarity index 100% rename from sound/vox_fem/doop.ogg rename to sound/announcer/vox_fem/doop.ogg diff --git a/sound/vox_fem/door.ogg b/sound/announcer/vox_fem/door.ogg similarity index 100% rename from sound/vox_fem/door.ogg rename to sound/announcer/vox_fem/door.ogg diff --git a/sound/vox_fem/dormitory.ogg b/sound/announcer/vox_fem/dormitory.ogg similarity index 100% rename from sound/vox_fem/dormitory.ogg rename to sound/announcer/vox_fem/dormitory.ogg diff --git a/sound/vox_fem/dot.ogg b/sound/announcer/vox_fem/dot.ogg similarity index 100% rename from sound/vox_fem/dot.ogg rename to sound/announcer/vox_fem/dot.ogg diff --git a/sound/vox_fem/double.ogg b/sound/announcer/vox_fem/double.ogg similarity index 100% rename from sound/vox_fem/double.ogg rename to sound/announcer/vox_fem/double.ogg diff --git a/sound/vox_fem/down.ogg b/sound/announcer/vox_fem/down.ogg similarity index 100% rename from sound/vox_fem/down.ogg rename to sound/announcer/vox_fem/down.ogg diff --git a/sound/vox_fem/dress.ogg b/sound/announcer/vox_fem/dress.ogg similarity index 100% rename from sound/vox_fem/dress.ogg rename to sound/announcer/vox_fem/dress.ogg diff --git a/sound/vox_fem/dressed.ogg b/sound/announcer/vox_fem/dressed.ogg similarity index 100% rename from sound/vox_fem/dressed.ogg rename to sound/announcer/vox_fem/dressed.ogg diff --git a/sound/vox_fem/dressing.ogg b/sound/announcer/vox_fem/dressing.ogg similarity index 100% rename from sound/vox_fem/dressing.ogg rename to sound/announcer/vox_fem/dressing.ogg diff --git a/sound/vox_fem/drone.ogg b/sound/announcer/vox_fem/drone.ogg similarity index 100% rename from sound/vox_fem/drone.ogg rename to sound/announcer/vox_fem/drone.ogg diff --git a/sound/vox_fem/dual.ogg b/sound/announcer/vox_fem/dual.ogg similarity index 100% rename from sound/vox_fem/dual.ogg rename to sound/announcer/vox_fem/dual.ogg diff --git a/sound/vox_fem/duct.ogg b/sound/announcer/vox_fem/duct.ogg similarity index 100% rename from sound/vox_fem/duct.ogg rename to sound/announcer/vox_fem/duct.ogg diff --git a/sound/vox_fem/e.ogg b/sound/announcer/vox_fem/e.ogg similarity index 100% rename from sound/vox_fem/e.ogg rename to sound/announcer/vox_fem/e.ogg diff --git a/sound/vox_fem/easily.ogg b/sound/announcer/vox_fem/easily.ogg similarity index 100% rename from sound/vox_fem/easily.ogg rename to sound/announcer/vox_fem/easily.ogg diff --git a/sound/vox_fem/east.ogg b/sound/announcer/vox_fem/east.ogg similarity index 100% rename from sound/vox_fem/east.ogg rename to sound/announcer/vox_fem/east.ogg diff --git a/sound/vox_fem/eat.ogg b/sound/announcer/vox_fem/eat.ogg similarity index 100% rename from sound/vox_fem/eat.ogg rename to sound/announcer/vox_fem/eat.ogg diff --git a/sound/vox_fem/eaten.ogg b/sound/announcer/vox_fem/eaten.ogg similarity index 100% rename from sound/vox_fem/eaten.ogg rename to sound/announcer/vox_fem/eaten.ogg diff --git a/sound/vox_fem/echo.ogg b/sound/announcer/vox_fem/echo.ogg similarity index 100% rename from sound/vox_fem/echo.ogg rename to sound/announcer/vox_fem/echo.ogg diff --git a/sound/vox_fem/ed.ogg b/sound/announcer/vox_fem/ed.ogg similarity index 100% rename from sound/vox_fem/ed.ogg rename to sound/announcer/vox_fem/ed.ogg diff --git a/sound/vox_fem/education.ogg b/sound/announcer/vox_fem/education.ogg similarity index 100% rename from sound/vox_fem/education.ogg rename to sound/announcer/vox_fem/education.ogg diff --git a/sound/vox_fem/effect.ogg b/sound/announcer/vox_fem/effect.ogg similarity index 100% rename from sound/vox_fem/effect.ogg rename to sound/announcer/vox_fem/effect.ogg diff --git a/sound/vox_fem/effects.ogg b/sound/announcer/vox_fem/effects.ogg similarity index 100% rename from sound/vox_fem/effects.ogg rename to sound/announcer/vox_fem/effects.ogg diff --git a/sound/vox_fem/egress.ogg b/sound/announcer/vox_fem/egress.ogg similarity index 100% rename from sound/vox_fem/egress.ogg rename to sound/announcer/vox_fem/egress.ogg diff --git a/sound/vox_fem/eight.ogg b/sound/announcer/vox_fem/eight.ogg similarity index 100% rename from sound/vox_fem/eight.ogg rename to sound/announcer/vox_fem/eight.ogg diff --git a/sound/vox_fem/eighteen.ogg b/sound/announcer/vox_fem/eighteen.ogg similarity index 100% rename from sound/vox_fem/eighteen.ogg rename to sound/announcer/vox_fem/eighteen.ogg diff --git a/sound/vox_fem/eighty.ogg b/sound/announcer/vox_fem/eighty.ogg similarity index 100% rename from sound/vox_fem/eighty.ogg rename to sound/announcer/vox_fem/eighty.ogg diff --git a/sound/vox_fem/electric.ogg b/sound/announcer/vox_fem/electric.ogg similarity index 100% rename from sound/vox_fem/electric.ogg rename to sound/announcer/vox_fem/electric.ogg diff --git a/sound/vox_fem/electrical.ogg b/sound/announcer/vox_fem/electrical.ogg similarity index 100% rename from sound/vox_fem/electrical.ogg rename to sound/announcer/vox_fem/electrical.ogg diff --git a/sound/vox_fem/electromagnetic.ogg b/sound/announcer/vox_fem/electromagnetic.ogg similarity index 100% rename from sound/vox_fem/electromagnetic.ogg rename to sound/announcer/vox_fem/electromagnetic.ogg diff --git a/sound/vox_fem/elevator.ogg b/sound/announcer/vox_fem/elevator.ogg similarity index 100% rename from sound/vox_fem/elevator.ogg rename to sound/announcer/vox_fem/elevator.ogg diff --git a/sound/vox_fem/eleven.ogg b/sound/announcer/vox_fem/eleven.ogg similarity index 100% rename from sound/vox_fem/eleven.ogg rename to sound/announcer/vox_fem/eleven.ogg diff --git a/sound/vox_fem/eliminate.ogg b/sound/announcer/vox_fem/eliminate.ogg similarity index 100% rename from sound/vox_fem/eliminate.ogg rename to sound/announcer/vox_fem/eliminate.ogg diff --git a/sound/vox_fem/emergency.ogg b/sound/announcer/vox_fem/emergency.ogg similarity index 100% rename from sound/vox_fem/emergency.ogg rename to sound/announcer/vox_fem/emergency.ogg diff --git a/sound/vox_fem/emitted.ogg b/sound/announcer/vox_fem/emitted.ogg similarity index 100% rename from sound/vox_fem/emitted.ogg rename to sound/announcer/vox_fem/emitted.ogg diff --git a/sound/vox_fem/emitter.ogg b/sound/announcer/vox_fem/emitter.ogg similarity index 100% rename from sound/vox_fem/emitter.ogg rename to sound/announcer/vox_fem/emitter.ogg diff --git a/sound/vox_fem/emitting.ogg b/sound/announcer/vox_fem/emitting.ogg similarity index 100% rename from sound/vox_fem/emitting.ogg rename to sound/announcer/vox_fem/emitting.ogg diff --git a/sound/vox_fem/enabled.ogg b/sound/announcer/vox_fem/enabled.ogg similarity index 100% rename from sound/vox_fem/enabled.ogg rename to sound/announcer/vox_fem/enabled.ogg diff --git a/sound/vox_fem/end.ogg b/sound/announcer/vox_fem/end.ogg similarity index 100% rename from sound/vox_fem/end.ogg rename to sound/announcer/vox_fem/end.ogg diff --git a/sound/vox_fem/ends.ogg b/sound/announcer/vox_fem/ends.ogg similarity index 100% rename from sound/vox_fem/ends.ogg rename to sound/announcer/vox_fem/ends.ogg diff --git a/sound/vox_fem/energy.ogg b/sound/announcer/vox_fem/energy.ogg similarity index 100% rename from sound/vox_fem/energy.ogg rename to sound/announcer/vox_fem/energy.ogg diff --git a/sound/vox_fem/engage.ogg b/sound/announcer/vox_fem/engage.ogg similarity index 100% rename from sound/vox_fem/engage.ogg rename to sound/announcer/vox_fem/engage.ogg diff --git a/sound/vox_fem/engaged.ogg b/sound/announcer/vox_fem/engaged.ogg similarity index 100% rename from sound/vox_fem/engaged.ogg rename to sound/announcer/vox_fem/engaged.ogg diff --git a/sound/vox_fem/engine.ogg b/sound/announcer/vox_fem/engine.ogg similarity index 100% rename from sound/vox_fem/engine.ogg rename to sound/announcer/vox_fem/engine.ogg diff --git a/sound/vox_fem/engineer.ogg b/sound/announcer/vox_fem/engineer.ogg similarity index 100% rename from sound/vox_fem/engineer.ogg rename to sound/announcer/vox_fem/engineer.ogg diff --git a/sound/vox_fem/engineering.ogg b/sound/announcer/vox_fem/engineering.ogg similarity index 100% rename from sound/vox_fem/engineering.ogg rename to sound/announcer/vox_fem/engineering.ogg diff --git a/sound/vox_fem/enormous.ogg b/sound/announcer/vox_fem/enormous.ogg similarity index 100% rename from sound/vox_fem/enormous.ogg rename to sound/announcer/vox_fem/enormous.ogg diff --git a/sound/vox_fem/enough.ogg b/sound/announcer/vox_fem/enough.ogg similarity index 100% rename from sound/vox_fem/enough.ogg rename to sound/announcer/vox_fem/enough.ogg diff --git a/sound/vox_fem/enter.ogg b/sound/announcer/vox_fem/enter.ogg similarity index 100% rename from sound/vox_fem/enter.ogg rename to sound/announcer/vox_fem/enter.ogg diff --git a/sound/vox_fem/entity.ogg b/sound/announcer/vox_fem/entity.ogg similarity index 100% rename from sound/vox_fem/entity.ogg rename to sound/announcer/vox_fem/entity.ogg diff --git a/sound/vox_fem/entry.ogg b/sound/announcer/vox_fem/entry.ogg similarity index 100% rename from sound/vox_fem/entry.ogg rename to sound/announcer/vox_fem/entry.ogg diff --git a/sound/vox_fem/environment.ogg b/sound/announcer/vox_fem/environment.ogg similarity index 100% rename from sound/vox_fem/environment.ogg rename to sound/announcer/vox_fem/environment.ogg diff --git a/sound/vox_fem/epic.ogg b/sound/announcer/vox_fem/epic.ogg similarity index 100% rename from sound/vox_fem/epic.ogg rename to sound/announcer/vox_fem/epic.ogg diff --git a/sound/vox_fem/equipment.ogg b/sound/announcer/vox_fem/equipment.ogg similarity index 100% rename from sound/vox_fem/equipment.ogg rename to sound/announcer/vox_fem/equipment.ogg diff --git a/sound/vox_fem/error.ogg b/sound/announcer/vox_fem/error.ogg similarity index 100% rename from sound/vox_fem/error.ogg rename to sound/announcer/vox_fem/error.ogg diff --git a/sound/vox_fem/escape.ogg b/sound/announcer/vox_fem/escape.ogg similarity index 100% rename from sound/vox_fem/escape.ogg rename to sound/announcer/vox_fem/escape.ogg diff --git a/sound/vox_fem/ethereal.ogg b/sound/announcer/vox_fem/ethereal.ogg similarity index 100% rename from sound/vox_fem/ethereal.ogg rename to sound/announcer/vox_fem/ethereal.ogg diff --git a/sound/vox_fem/eva.ogg b/sound/announcer/vox_fem/eva.ogg similarity index 100% rename from sound/vox_fem/eva.ogg rename to sound/announcer/vox_fem/eva.ogg diff --git a/sound/vox_fem/evacuate.ogg b/sound/announcer/vox_fem/evacuate.ogg similarity index 100% rename from sound/vox_fem/evacuate.ogg rename to sound/announcer/vox_fem/evacuate.ogg diff --git a/sound/vox_fem/even.ogg b/sound/announcer/vox_fem/even.ogg similarity index 100% rename from sound/vox_fem/even.ogg rename to sound/announcer/vox_fem/even.ogg diff --git a/sound/vox_fem/ever.ogg b/sound/announcer/vox_fem/ever.ogg similarity index 100% rename from sound/vox_fem/ever.ogg rename to sound/announcer/vox_fem/ever.ogg diff --git a/sound/vox_fem/every.ogg b/sound/announcer/vox_fem/every.ogg similarity index 100% rename from sound/vox_fem/every.ogg rename to sound/announcer/vox_fem/every.ogg diff --git a/sound/vox_fem/everybody.ogg b/sound/announcer/vox_fem/everybody.ogg similarity index 100% rename from sound/vox_fem/everybody.ogg rename to sound/announcer/vox_fem/everybody.ogg diff --git a/sound/vox_fem/everyone.ogg b/sound/announcer/vox_fem/everyone.ogg similarity index 100% rename from sound/vox_fem/everyone.ogg rename to sound/announcer/vox_fem/everyone.ogg diff --git a/sound/vox_fem/exchange.ogg b/sound/announcer/vox_fem/exchange.ogg similarity index 100% rename from sound/vox_fem/exchange.ogg rename to sound/announcer/vox_fem/exchange.ogg diff --git a/sound/vox_fem/execute.ogg b/sound/announcer/vox_fem/execute.ogg similarity index 100% rename from sound/vox_fem/execute.ogg rename to sound/announcer/vox_fem/execute.ogg diff --git a/sound/vox_fem/exit.ogg b/sound/announcer/vox_fem/exit.ogg similarity index 100% rename from sound/vox_fem/exit.ogg rename to sound/announcer/vox_fem/exit.ogg diff --git a/sound/vox_fem/expect.ogg b/sound/announcer/vox_fem/expect.ogg similarity index 100% rename from sound/vox_fem/expect.ogg rename to sound/announcer/vox_fem/expect.ogg diff --git a/sound/vox_fem/experiment.ogg b/sound/announcer/vox_fem/experiment.ogg similarity index 100% rename from sound/vox_fem/experiment.ogg rename to sound/announcer/vox_fem/experiment.ogg diff --git a/sound/vox_fem/experimental.ogg b/sound/announcer/vox_fem/experimental.ogg similarity index 100% rename from sound/vox_fem/experimental.ogg rename to sound/announcer/vox_fem/experimental.ogg diff --git a/sound/vox_fem/explode.ogg b/sound/announcer/vox_fem/explode.ogg similarity index 100% rename from sound/vox_fem/explode.ogg rename to sound/announcer/vox_fem/explode.ogg diff --git a/sound/vox_fem/exploded.ogg b/sound/announcer/vox_fem/exploded.ogg similarity index 100% rename from sound/vox_fem/exploded.ogg rename to sound/announcer/vox_fem/exploded.ogg diff --git a/sound/vox_fem/exploding.ogg b/sound/announcer/vox_fem/exploding.ogg similarity index 100% rename from sound/vox_fem/exploding.ogg rename to sound/announcer/vox_fem/exploding.ogg diff --git a/sound/vox_fem/explosion.ogg b/sound/announcer/vox_fem/explosion.ogg similarity index 100% rename from sound/vox_fem/explosion.ogg rename to sound/announcer/vox_fem/explosion.ogg diff --git a/sound/vox_fem/explosive.ogg b/sound/announcer/vox_fem/explosive.ogg similarity index 100% rename from sound/vox_fem/explosive.ogg rename to sound/announcer/vox_fem/explosive.ogg diff --git a/sound/vox_fem/exposure.ogg b/sound/announcer/vox_fem/exposure.ogg similarity index 100% rename from sound/vox_fem/exposure.ogg rename to sound/announcer/vox_fem/exposure.ogg diff --git a/sound/vox_fem/exterminate.ogg b/sound/announcer/vox_fem/exterminate.ogg similarity index 100% rename from sound/vox_fem/exterminate.ogg rename to sound/announcer/vox_fem/exterminate.ogg diff --git a/sound/vox_fem/external.ogg b/sound/announcer/vox_fem/external.ogg similarity index 100% rename from sound/vox_fem/external.ogg rename to sound/announcer/vox_fem/external.ogg diff --git a/sound/vox_fem/extinguish.ogg b/sound/announcer/vox_fem/extinguish.ogg similarity index 100% rename from sound/vox_fem/extinguish.ogg rename to sound/announcer/vox_fem/extinguish.ogg diff --git a/sound/vox_fem/extinguisher.ogg b/sound/announcer/vox_fem/extinguisher.ogg similarity index 100% rename from sound/vox_fem/extinguisher.ogg rename to sound/announcer/vox_fem/extinguisher.ogg diff --git a/sound/vox_fem/extra.ogg b/sound/announcer/vox_fem/extra.ogg similarity index 100% rename from sound/vox_fem/extra.ogg rename to sound/announcer/vox_fem/extra.ogg diff --git a/sound/vox_fem/extreme.ogg b/sound/announcer/vox_fem/extreme.ogg similarity index 100% rename from sound/vox_fem/extreme.ogg rename to sound/announcer/vox_fem/extreme.ogg diff --git a/sound/vox_fem/f.ogg b/sound/announcer/vox_fem/f.ogg similarity index 100% rename from sound/vox_fem/f.ogg rename to sound/announcer/vox_fem/f.ogg diff --git a/sound/vox_fem/facility.ogg b/sound/announcer/vox_fem/facility.ogg similarity index 100% rename from sound/vox_fem/facility.ogg rename to sound/announcer/vox_fem/facility.ogg diff --git a/sound/vox_fem/factory.ogg b/sound/announcer/vox_fem/factory.ogg similarity index 100% rename from sound/vox_fem/factory.ogg rename to sound/announcer/vox_fem/factory.ogg diff --git a/sound/vox_fem/fahrenheit.ogg b/sound/announcer/vox_fem/fahrenheit.ogg similarity index 100% rename from sound/vox_fem/fahrenheit.ogg rename to sound/announcer/vox_fem/fahrenheit.ogg diff --git a/sound/vox_fem/failed.ogg b/sound/announcer/vox_fem/failed.ogg similarity index 100% rename from sound/vox_fem/failed.ogg rename to sound/announcer/vox_fem/failed.ogg diff --git a/sound/vox_fem/failure.ogg b/sound/announcer/vox_fem/failure.ogg similarity index 100% rename from sound/vox_fem/failure.ogg rename to sound/announcer/vox_fem/failure.ogg diff --git a/sound/vox_fem/false.ogg b/sound/announcer/vox_fem/false.ogg similarity index 100% rename from sound/vox_fem/false.ogg rename to sound/announcer/vox_fem/false.ogg diff --git a/sound/vox_fem/farthest.ogg b/sound/announcer/vox_fem/farthest.ogg similarity index 100% rename from sound/vox_fem/farthest.ogg rename to sound/announcer/vox_fem/farthest.ogg diff --git a/sound/vox_fem/fast.ogg b/sound/announcer/vox_fem/fast.ogg similarity index 100% rename from sound/vox_fem/fast.ogg rename to sound/announcer/vox_fem/fast.ogg diff --git a/sound/vox_fem/fauna.ogg b/sound/announcer/vox_fem/fauna.ogg similarity index 100% rename from sound/vox_fem/fauna.ogg rename to sound/announcer/vox_fem/fauna.ogg diff --git a/sound/vox_fem/feature.ogg b/sound/announcer/vox_fem/feature.ogg similarity index 100% rename from sound/vox_fem/feature.ogg rename to sound/announcer/vox_fem/feature.ogg diff --git a/sound/vox_fem/featured.ogg b/sound/announcer/vox_fem/featured.ogg similarity index 100% rename from sound/vox_fem/featured.ogg rename to sound/announcer/vox_fem/featured.ogg diff --git a/sound/vox_fem/features.ogg b/sound/announcer/vox_fem/features.ogg similarity index 100% rename from sound/vox_fem/features.ogg rename to sound/announcer/vox_fem/features.ogg diff --git a/sound/vox_fem/featuring.ogg b/sound/announcer/vox_fem/featuring.ogg similarity index 100% rename from sound/vox_fem/featuring.ogg rename to sound/announcer/vox_fem/featuring.ogg diff --git a/sound/vox_fem/feet.ogg b/sound/announcer/vox_fem/feet.ogg similarity index 100% rename from sound/vox_fem/feet.ogg rename to sound/announcer/vox_fem/feet.ogg diff --git a/sound/vox_fem/felinid.ogg b/sound/announcer/vox_fem/felinid.ogg similarity index 100% rename from sound/vox_fem/felinid.ogg rename to sound/announcer/vox_fem/felinid.ogg diff --git a/sound/vox_fem/few.ogg b/sound/announcer/vox_fem/few.ogg similarity index 100% rename from sound/vox_fem/few.ogg rename to sound/announcer/vox_fem/few.ogg diff --git a/sound/vox_fem/field.ogg b/sound/announcer/vox_fem/field.ogg similarity index 100% rename from sound/vox_fem/field.ogg rename to sound/announcer/vox_fem/field.ogg diff --git a/sound/vox_fem/fifteen.ogg b/sound/announcer/vox_fem/fifteen.ogg similarity index 100% rename from sound/vox_fem/fifteen.ogg rename to sound/announcer/vox_fem/fifteen.ogg diff --git a/sound/vox_fem/fifth.ogg b/sound/announcer/vox_fem/fifth.ogg similarity index 100% rename from sound/vox_fem/fifth.ogg rename to sound/announcer/vox_fem/fifth.ogg diff --git a/sound/vox_fem/fifty.ogg b/sound/announcer/vox_fem/fifty.ogg similarity index 100% rename from sound/vox_fem/fifty.ogg rename to sound/announcer/vox_fem/fifty.ogg diff --git a/sound/vox_fem/filter.ogg b/sound/announcer/vox_fem/filter.ogg similarity index 100% rename from sound/vox_fem/filter.ogg rename to sound/announcer/vox_fem/filter.ogg diff --git a/sound/vox_fem/filters.ogg b/sound/announcer/vox_fem/filters.ogg similarity index 100% rename from sound/vox_fem/filters.ogg rename to sound/announcer/vox_fem/filters.ogg diff --git a/sound/vox_fem/final.ogg b/sound/announcer/vox_fem/final.ogg similarity index 100% rename from sound/vox_fem/final.ogg rename to sound/announcer/vox_fem/final.ogg diff --git a/sound/vox_fem/fine.ogg b/sound/announcer/vox_fem/fine.ogg similarity index 100% rename from sound/vox_fem/fine.ogg rename to sound/announcer/vox_fem/fine.ogg diff --git a/sound/vox_fem/fire.ogg b/sound/announcer/vox_fem/fire.ogg similarity index 100% rename from sound/vox_fem/fire.ogg rename to sound/announcer/vox_fem/fire.ogg diff --git a/sound/vox_fem/first.ogg b/sound/announcer/vox_fem/first.ogg similarity index 100% rename from sound/vox_fem/first.ogg rename to sound/announcer/vox_fem/first.ogg diff --git a/sound/vox_fem/five.ogg b/sound/announcer/vox_fem/five.ogg similarity index 100% rename from sound/vox_fem/five.ogg rename to sound/announcer/vox_fem/five.ogg diff --git a/sound/vox_fem/fix.ogg b/sound/announcer/vox_fem/fix.ogg similarity index 100% rename from sound/vox_fem/fix.ogg rename to sound/announcer/vox_fem/fix.ogg diff --git a/sound/vox_fem/flooding.ogg b/sound/announcer/vox_fem/flooding.ogg similarity index 100% rename from sound/vox_fem/flooding.ogg rename to sound/announcer/vox_fem/flooding.ogg diff --git a/sound/vox_fem/floor.ogg b/sound/announcer/vox_fem/floor.ogg similarity index 100% rename from sound/vox_fem/floor.ogg rename to sound/announcer/vox_fem/floor.ogg diff --git a/sound/vox_fem/flyman.ogg b/sound/announcer/vox_fem/flyman.ogg similarity index 100% rename from sound/vox_fem/flyman.ogg rename to sound/announcer/vox_fem/flyman.ogg diff --git a/sound/vox_fem/fool.ogg b/sound/announcer/vox_fem/fool.ogg similarity index 100% rename from sound/vox_fem/fool.ogg rename to sound/announcer/vox_fem/fool.ogg diff --git a/sound/vox_fem/foolish.ogg b/sound/announcer/vox_fem/foolish.ogg similarity index 100% rename from sound/vox_fem/foolish.ogg rename to sound/announcer/vox_fem/foolish.ogg diff --git a/sound/vox_fem/for.ogg b/sound/announcer/vox_fem/for.ogg similarity index 100% rename from sound/vox_fem/for.ogg rename to sound/announcer/vox_fem/for.ogg diff --git a/sound/vox_fem/forbidden.ogg b/sound/announcer/vox_fem/forbidden.ogg similarity index 100% rename from sound/vox_fem/forbidden.ogg rename to sound/announcer/vox_fem/forbidden.ogg diff --git a/sound/vox_fem/force.ogg b/sound/announcer/vox_fem/force.ogg similarity index 100% rename from sound/vox_fem/force.ogg rename to sound/announcer/vox_fem/force.ogg diff --git a/sound/vox_fem/fore.ogg b/sound/announcer/vox_fem/fore.ogg similarity index 100% rename from sound/vox_fem/fore.ogg rename to sound/announcer/vox_fem/fore.ogg diff --git a/sound/vox_fem/form.ogg b/sound/announcer/vox_fem/form.ogg similarity index 100% rename from sound/vox_fem/form.ogg rename to sound/announcer/vox_fem/form.ogg diff --git a/sound/vox_fem/formed.ogg b/sound/announcer/vox_fem/formed.ogg similarity index 100% rename from sound/vox_fem/formed.ogg rename to sound/announcer/vox_fem/formed.ogg diff --git a/sound/vox_fem/forms.ogg b/sound/announcer/vox_fem/forms.ogg similarity index 100% rename from sound/vox_fem/forms.ogg rename to sound/announcer/vox_fem/forms.ogg diff --git a/sound/vox_fem/forty.ogg b/sound/announcer/vox_fem/forty.ogg similarity index 100% rename from sound/vox_fem/forty.ogg rename to sound/announcer/vox_fem/forty.ogg diff --git a/sound/vox_fem/found.ogg b/sound/announcer/vox_fem/found.ogg similarity index 100% rename from sound/vox_fem/found.ogg rename to sound/announcer/vox_fem/found.ogg diff --git a/sound/vox_fem/four.ogg b/sound/announcer/vox_fem/four.ogg similarity index 100% rename from sound/vox_fem/four.ogg rename to sound/announcer/vox_fem/four.ogg diff --git a/sound/vox_fem/fourteen.ogg b/sound/announcer/vox_fem/fourteen.ogg similarity index 100% rename from sound/vox_fem/fourteen.ogg rename to sound/announcer/vox_fem/fourteen.ogg diff --git a/sound/vox_fem/fourth.ogg b/sound/announcer/vox_fem/fourth.ogg similarity index 100% rename from sound/vox_fem/fourth.ogg rename to sound/announcer/vox_fem/fourth.ogg diff --git a/sound/vox_fem/fourty.ogg b/sound/announcer/vox_fem/fourty.ogg similarity index 100% rename from sound/vox_fem/fourty.ogg rename to sound/announcer/vox_fem/fourty.ogg diff --git a/sound/vox_fem/foxtrot.ogg b/sound/announcer/vox_fem/foxtrot.ogg similarity index 100% rename from sound/vox_fem/foxtrot.ogg rename to sound/announcer/vox_fem/foxtrot.ogg diff --git a/sound/vox_fem/free.ogg b/sound/announcer/vox_fem/free.ogg similarity index 100% rename from sound/vox_fem/free.ogg rename to sound/announcer/vox_fem/free.ogg diff --git a/sound/vox_fem/freeman.ogg b/sound/announcer/vox_fem/freeman.ogg similarity index 100% rename from sound/vox_fem/freeman.ogg rename to sound/announcer/vox_fem/freeman.ogg diff --git a/sound/vox_fem/freeze.ogg b/sound/announcer/vox_fem/freeze.ogg similarity index 100% rename from sound/vox_fem/freeze.ogg rename to sound/announcer/vox_fem/freeze.ogg diff --git a/sound/vox_fem/freezer.ogg b/sound/announcer/vox_fem/freezer.ogg similarity index 100% rename from sound/vox_fem/freezer.ogg rename to sound/announcer/vox_fem/freezer.ogg diff --git a/sound/vox_fem/freezing.ogg b/sound/announcer/vox_fem/freezing.ogg similarity index 100% rename from sound/vox_fem/freezing.ogg rename to sound/announcer/vox_fem/freezing.ogg diff --git a/sound/vox_fem/freon.ogg b/sound/announcer/vox_fem/freon.ogg similarity index 100% rename from sound/vox_fem/freon.ogg rename to sound/announcer/vox_fem/freon.ogg diff --git a/sound/vox_fem/from.ogg b/sound/announcer/vox_fem/from.ogg similarity index 100% rename from sound/vox_fem/from.ogg rename to sound/announcer/vox_fem/from.ogg diff --git a/sound/vox_fem/front.ogg b/sound/announcer/vox_fem/front.ogg similarity index 100% rename from sound/vox_fem/front.ogg rename to sound/announcer/vox_fem/front.ogg diff --git a/sound/vox_fem/froze.ogg b/sound/announcer/vox_fem/froze.ogg similarity index 100% rename from sound/vox_fem/froze.ogg rename to sound/announcer/vox_fem/froze.ogg diff --git a/sound/vox_fem/frozen.ogg b/sound/announcer/vox_fem/frozen.ogg similarity index 100% rename from sound/vox_fem/frozen.ogg rename to sound/announcer/vox_fem/frozen.ogg diff --git a/sound/vox_fem/fuck.ogg b/sound/announcer/vox_fem/fuck.ogg similarity index 100% rename from sound/vox_fem/fuck.ogg rename to sound/announcer/vox_fem/fuck.ogg diff --git a/sound/vox_fem/fucking.ogg b/sound/announcer/vox_fem/fucking.ogg similarity index 100% rename from sound/vox_fem/fucking.ogg rename to sound/announcer/vox_fem/fucking.ogg diff --git a/sound/vox_fem/fucks.ogg b/sound/announcer/vox_fem/fucks.ogg similarity index 100% rename from sound/vox_fem/fucks.ogg rename to sound/announcer/vox_fem/fucks.ogg diff --git a/sound/vox_fem/fuel.ogg b/sound/announcer/vox_fem/fuel.ogg similarity index 100% rename from sound/vox_fem/fuel.ogg rename to sound/announcer/vox_fem/fuel.ogg diff --git a/sound/vox_fem/g.ogg b/sound/announcer/vox_fem/g.ogg similarity index 100% rename from sound/vox_fem/g.ogg rename to sound/announcer/vox_fem/g.ogg diff --git a/sound/vox_fem/gas.ogg b/sound/announcer/vox_fem/gas.ogg similarity index 100% rename from sound/vox_fem/gas.ogg rename to sound/announcer/vox_fem/gas.ogg diff --git a/sound/vox_fem/gases.ogg b/sound/announcer/vox_fem/gases.ogg similarity index 100% rename from sound/vox_fem/gases.ogg rename to sound/announcer/vox_fem/gases.ogg diff --git a/sound/vox_fem/gave.ogg b/sound/announcer/vox_fem/gave.ogg similarity index 100% rename from sound/vox_fem/gave.ogg rename to sound/announcer/vox_fem/gave.ogg diff --git a/sound/vox_fem/gear.ogg b/sound/announcer/vox_fem/gear.ogg similarity index 100% rename from sound/vox_fem/gear.ogg rename to sound/announcer/vox_fem/gear.ogg diff --git a/sound/vox_fem/geared.ogg b/sound/announcer/vox_fem/geared.ogg similarity index 100% rename from sound/vox_fem/geared.ogg rename to sound/announcer/vox_fem/geared.ogg diff --git a/sound/vox_fem/gearing.ogg b/sound/announcer/vox_fem/gearing.ogg similarity index 100% rename from sound/vox_fem/gearing.ogg rename to sound/announcer/vox_fem/gearing.ogg diff --git a/sound/vox_fem/generate.ogg b/sound/announcer/vox_fem/generate.ogg similarity index 100% rename from sound/vox_fem/generate.ogg rename to sound/announcer/vox_fem/generate.ogg diff --git a/sound/vox_fem/generated.ogg b/sound/announcer/vox_fem/generated.ogg similarity index 100% rename from sound/vox_fem/generated.ogg rename to sound/announcer/vox_fem/generated.ogg diff --git a/sound/vox_fem/generating.ogg b/sound/announcer/vox_fem/generating.ogg similarity index 100% rename from sound/vox_fem/generating.ogg rename to sound/announcer/vox_fem/generating.ogg diff --git a/sound/vox_fem/generator.ogg b/sound/announcer/vox_fem/generator.ogg similarity index 100% rename from sound/vox_fem/generator.ogg rename to sound/announcer/vox_fem/generator.ogg diff --git a/sound/vox_fem/geneticist.ogg b/sound/announcer/vox_fem/geneticist.ogg similarity index 100% rename from sound/vox_fem/geneticist.ogg rename to sound/announcer/vox_fem/geneticist.ogg diff --git a/sound/vox_fem/get.ogg b/sound/announcer/vox_fem/get.ogg similarity index 100% rename from sound/vox_fem/get.ogg rename to sound/announcer/vox_fem/get.ogg diff --git a/sound/vox_fem/give.ogg b/sound/announcer/vox_fem/give.ogg similarity index 100% rename from sound/vox_fem/give.ogg rename to sound/announcer/vox_fem/give.ogg diff --git a/sound/vox_fem/given.ogg b/sound/announcer/vox_fem/given.ogg similarity index 100% rename from sound/vox_fem/given.ogg rename to sound/announcer/vox_fem/given.ogg diff --git a/sound/vox_fem/glory.ogg b/sound/announcer/vox_fem/glory.ogg similarity index 100% rename from sound/vox_fem/glory.ogg rename to sound/announcer/vox_fem/glory.ogg diff --git a/sound/vox_fem/go.ogg b/sound/announcer/vox_fem/go.ogg similarity index 100% rename from sound/vox_fem/go.ogg rename to sound/announcer/vox_fem/go.ogg diff --git a/sound/vox_fem/god.ogg b/sound/announcer/vox_fem/god.ogg similarity index 100% rename from sound/vox_fem/god.ogg rename to sound/announcer/vox_fem/god.ogg diff --git a/sound/vox_fem/going.ogg b/sound/announcer/vox_fem/going.ogg similarity index 100% rename from sound/vox_fem/going.ogg rename to sound/announcer/vox_fem/going.ogg diff --git a/sound/vox_fem/golem.ogg b/sound/announcer/vox_fem/golem.ogg similarity index 100% rename from sound/vox_fem/golem.ogg rename to sound/announcer/vox_fem/golem.ogg diff --git a/sound/vox_fem/good.ogg b/sound/announcer/vox_fem/good.ogg similarity index 100% rename from sound/vox_fem/good.ogg rename to sound/announcer/vox_fem/good.ogg diff --git a/sound/vox_fem/goodbye.ogg b/sound/announcer/vox_fem/goodbye.ogg similarity index 100% rename from sound/vox_fem/goodbye.ogg rename to sound/announcer/vox_fem/goodbye.ogg diff --git a/sound/vox_fem/gordon.ogg b/sound/announcer/vox_fem/gordon.ogg similarity index 100% rename from sound/vox_fem/gordon.ogg rename to sound/announcer/vox_fem/gordon.ogg diff --git a/sound/vox_fem/got.ogg b/sound/announcer/vox_fem/got.ogg similarity index 100% rename from sound/vox_fem/got.ogg rename to sound/announcer/vox_fem/got.ogg diff --git a/sound/vox_fem/government.ogg b/sound/announcer/vox_fem/government.ogg similarity index 100% rename from sound/vox_fem/government.ogg rename to sound/announcer/vox_fem/government.ogg diff --git a/sound/vox_fem/granted.ogg b/sound/announcer/vox_fem/granted.ogg similarity index 100% rename from sound/vox_fem/granted.ogg rename to sound/announcer/vox_fem/granted.ogg diff --git a/sound/vox_fem/gravity.ogg b/sound/announcer/vox_fem/gravity.ogg similarity index 100% rename from sound/vox_fem/gravity.ogg rename to sound/announcer/vox_fem/gravity.ogg diff --git a/sound/vox_fem/gray.ogg b/sound/announcer/vox_fem/gray.ogg similarity index 100% rename from sound/vox_fem/gray.ogg rename to sound/announcer/vox_fem/gray.ogg diff --git a/sound/vox_fem/great.ogg b/sound/announcer/vox_fem/great.ogg similarity index 100% rename from sound/vox_fem/great.ogg rename to sound/announcer/vox_fem/great.ogg diff --git a/sound/vox_fem/green.ogg b/sound/announcer/vox_fem/green.ogg similarity index 100% rename from sound/vox_fem/green.ogg rename to sound/announcer/vox_fem/green.ogg diff --git a/sound/vox_fem/grenade.ogg b/sound/announcer/vox_fem/grenade.ogg similarity index 100% rename from sound/vox_fem/grenade.ogg rename to sound/announcer/vox_fem/grenade.ogg diff --git a/sound/vox_fem/guard.ogg b/sound/announcer/vox_fem/guard.ogg similarity index 100% rename from sound/vox_fem/guard.ogg rename to sound/announcer/vox_fem/guard.ogg diff --git a/sound/vox_fem/gulf.ogg b/sound/announcer/vox_fem/gulf.ogg similarity index 100% rename from sound/vox_fem/gulf.ogg rename to sound/announcer/vox_fem/gulf.ogg diff --git a/sound/vox_fem/gun.ogg b/sound/announcer/vox_fem/gun.ogg similarity index 100% rename from sound/vox_fem/gun.ogg rename to sound/announcer/vox_fem/gun.ogg diff --git a/sound/vox_fem/guthrie.ogg b/sound/announcer/vox_fem/guthrie.ogg similarity index 100% rename from sound/vox_fem/guthrie.ogg rename to sound/announcer/vox_fem/guthrie.ogg diff --git a/sound/vox_fem/h.ogg b/sound/announcer/vox_fem/h.ogg similarity index 100% rename from sound/vox_fem/h.ogg rename to sound/announcer/vox_fem/h.ogg diff --git a/sound/vox_fem/hacker.ogg b/sound/announcer/vox_fem/hacker.ogg similarity index 100% rename from sound/vox_fem/hacker.ogg rename to sound/announcer/vox_fem/hacker.ogg diff --git a/sound/vox_fem/hackers.ogg b/sound/announcer/vox_fem/hackers.ogg similarity index 100% rename from sound/vox_fem/hackers.ogg rename to sound/announcer/vox_fem/hackers.ogg diff --git a/sound/vox_fem/had.ogg b/sound/announcer/vox_fem/had.ogg similarity index 100% rename from sound/vox_fem/had.ogg rename to sound/announcer/vox_fem/had.ogg diff --git a/sound/vox_fem/hall.ogg b/sound/announcer/vox_fem/hall.ogg similarity index 100% rename from sound/vox_fem/hall.ogg rename to sound/announcer/vox_fem/hall.ogg diff --git a/sound/vox_fem/hallway.ogg b/sound/announcer/vox_fem/hallway.ogg similarity index 100% rename from sound/vox_fem/hallway.ogg rename to sound/announcer/vox_fem/hallway.ogg diff --git a/sound/vox_fem/halon.ogg b/sound/announcer/vox_fem/halon.ogg similarity index 100% rename from sound/vox_fem/halon.ogg rename to sound/announcer/vox_fem/halon.ogg diff --git a/sound/vox_fem/handling.ogg b/sound/announcer/vox_fem/handling.ogg similarity index 100% rename from sound/vox_fem/handling.ogg rename to sound/announcer/vox_fem/handling.ogg diff --git a/sound/vox_fem/hangar.ogg b/sound/announcer/vox_fem/hangar.ogg similarity index 100% rename from sound/vox_fem/hangar.ogg rename to sound/announcer/vox_fem/hangar.ogg diff --git a/sound/vox_fem/hard.ogg b/sound/announcer/vox_fem/hard.ogg similarity index 100% rename from sound/vox_fem/hard.ogg rename to sound/announcer/vox_fem/hard.ogg diff --git a/sound/vox_fem/hardly.ogg b/sound/announcer/vox_fem/hardly.ogg similarity index 100% rename from sound/vox_fem/hardly.ogg rename to sound/announcer/vox_fem/hardly.ogg diff --git a/sound/vox_fem/harm.ogg b/sound/announcer/vox_fem/harm.ogg similarity index 100% rename from sound/vox_fem/harm.ogg rename to sound/announcer/vox_fem/harm.ogg diff --git a/sound/vox_fem/harmful.ogg b/sound/announcer/vox_fem/harmful.ogg similarity index 100% rename from sound/vox_fem/harmful.ogg rename to sound/announcer/vox_fem/harmful.ogg diff --git a/sound/vox_fem/harness.ogg b/sound/announcer/vox_fem/harness.ogg similarity index 100% rename from sound/vox_fem/harness.ogg rename to sound/announcer/vox_fem/harness.ogg diff --git a/sound/vox_fem/harnessed.ogg b/sound/announcer/vox_fem/harnessed.ogg similarity index 100% rename from sound/vox_fem/harnessed.ogg rename to sound/announcer/vox_fem/harnessed.ogg diff --git a/sound/vox_fem/harnessing.ogg b/sound/announcer/vox_fem/harnessing.ogg similarity index 100% rename from sound/vox_fem/harnessing.ogg rename to sound/announcer/vox_fem/harnessing.ogg diff --git a/sound/vox_fem/has.ogg b/sound/announcer/vox_fem/has.ogg similarity index 100% rename from sound/vox_fem/has.ogg rename to sound/announcer/vox_fem/has.ogg diff --git a/sound/vox_fem/have.ogg b/sound/announcer/vox_fem/have.ogg similarity index 100% rename from sound/vox_fem/have.ogg rename to sound/announcer/vox_fem/have.ogg diff --git a/sound/vox_fem/hazard.ogg b/sound/announcer/vox_fem/hazard.ogg similarity index 100% rename from sound/vox_fem/hazard.ogg rename to sound/announcer/vox_fem/hazard.ogg diff --git a/sound/vox_fem/he.ogg b/sound/announcer/vox_fem/he.ogg similarity index 100% rename from sound/vox_fem/he.ogg rename to sound/announcer/vox_fem/he.ogg diff --git a/sound/vox_fem/head.ogg b/sound/announcer/vox_fem/head.ogg similarity index 100% rename from sound/vox_fem/head.ogg rename to sound/announcer/vox_fem/head.ogg diff --git a/sound/vox_fem/heal.ogg b/sound/announcer/vox_fem/heal.ogg similarity index 100% rename from sound/vox_fem/heal.ogg rename to sound/announcer/vox_fem/heal.ogg diff --git a/sound/vox_fem/healed.ogg b/sound/announcer/vox_fem/healed.ogg similarity index 100% rename from sound/vox_fem/healed.ogg rename to sound/announcer/vox_fem/healed.ogg diff --git a/sound/vox_fem/healing.ogg b/sound/announcer/vox_fem/healing.ogg similarity index 100% rename from sound/vox_fem/healing.ogg rename to sound/announcer/vox_fem/healing.ogg diff --git a/sound/vox_fem/healium.ogg b/sound/announcer/vox_fem/healium.ogg similarity index 100% rename from sound/vox_fem/healium.ogg rename to sound/announcer/vox_fem/healium.ogg diff --git a/sound/vox_fem/health.ogg b/sound/announcer/vox_fem/health.ogg similarity index 100% rename from sound/vox_fem/health.ogg rename to sound/announcer/vox_fem/health.ogg diff --git a/sound/vox_fem/heat.ogg b/sound/announcer/vox_fem/heat.ogg similarity index 100% rename from sound/vox_fem/heat.ogg rename to sound/announcer/vox_fem/heat.ogg diff --git a/sound/vox_fem/heated.ogg b/sound/announcer/vox_fem/heated.ogg similarity index 100% rename from sound/vox_fem/heated.ogg rename to sound/announcer/vox_fem/heated.ogg diff --git a/sound/vox_fem/heating.ogg b/sound/announcer/vox_fem/heating.ogg similarity index 100% rename from sound/vox_fem/heating.ogg rename to sound/announcer/vox_fem/heating.ogg diff --git a/sound/vox_fem/helicopter.ogg b/sound/announcer/vox_fem/helicopter.ogg similarity index 100% rename from sound/vox_fem/helicopter.ogg rename to sound/announcer/vox_fem/helicopter.ogg diff --git a/sound/vox_fem/helium.ogg b/sound/announcer/vox_fem/helium.ogg similarity index 100% rename from sound/vox_fem/helium.ogg rename to sound/announcer/vox_fem/helium.ogg diff --git a/sound/vox_fem/hello.ogg b/sound/announcer/vox_fem/hello.ogg similarity index 100% rename from sound/vox_fem/hello.ogg rename to sound/announcer/vox_fem/hello.ogg diff --git a/sound/vox_fem/help.ogg b/sound/announcer/vox_fem/help.ogg similarity index 100% rename from sound/vox_fem/help.ogg rename to sound/announcer/vox_fem/help.ogg diff --git a/sound/vox_fem/her.ogg b/sound/announcer/vox_fem/her.ogg similarity index 100% rename from sound/vox_fem/her.ogg rename to sound/announcer/vox_fem/her.ogg diff --git a/sound/vox_fem/here.ogg b/sound/announcer/vox_fem/here.ogg similarity index 100% rename from sound/vox_fem/here.ogg rename to sound/announcer/vox_fem/here.ogg diff --git a/sound/vox_fem/heretic.ogg b/sound/announcer/vox_fem/heretic.ogg similarity index 100% rename from sound/vox_fem/heretic.ogg rename to sound/announcer/vox_fem/heretic.ogg diff --git a/sound/vox_fem/hide.ogg b/sound/announcer/vox_fem/hide.ogg similarity index 100% rename from sound/vox_fem/hide.ogg rename to sound/announcer/vox_fem/hide.ogg diff --git a/sound/vox_fem/high.ogg b/sound/announcer/vox_fem/high.ogg similarity index 100% rename from sound/vox_fem/high.ogg rename to sound/announcer/vox_fem/high.ogg diff --git a/sound/vox_fem/highest.ogg b/sound/announcer/vox_fem/highest.ogg similarity index 100% rename from sound/vox_fem/highest.ogg rename to sound/announcer/vox_fem/highest.ogg diff --git a/sound/vox_fem/him.ogg b/sound/announcer/vox_fem/him.ogg similarity index 100% rename from sound/vox_fem/him.ogg rename to sound/announcer/vox_fem/him.ogg diff --git a/sound/vox_fem/hit.ogg b/sound/announcer/vox_fem/hit.ogg similarity index 100% rename from sound/vox_fem/hit.ogg rename to sound/announcer/vox_fem/hit.ogg diff --git a/sound/vox_fem/hole.ogg b/sound/announcer/vox_fem/hole.ogg similarity index 100% rename from sound/vox_fem/hole.ogg rename to sound/announcer/vox_fem/hole.ogg diff --git a/sound/vox_fem/honk.ogg b/sound/announcer/vox_fem/honk.ogg similarity index 100% rename from sound/vox_fem/honk.ogg rename to sound/announcer/vox_fem/honk.ogg diff --git a/sound/vox_fem/hop.ogg b/sound/announcer/vox_fem/hop.ogg similarity index 100% rename from sound/vox_fem/hop.ogg rename to sound/announcer/vox_fem/hop.ogg diff --git a/sound/vox_fem/hos.ogg b/sound/announcer/vox_fem/hos.ogg similarity index 100% rename from sound/vox_fem/hos.ogg rename to sound/announcer/vox_fem/hos.ogg diff --git a/sound/vox_fem/hostile.ogg b/sound/announcer/vox_fem/hostile.ogg similarity index 100% rename from sound/vox_fem/hostile.ogg rename to sound/announcer/vox_fem/hostile.ogg diff --git a/sound/vox_fem/hot.ogg b/sound/announcer/vox_fem/hot.ogg similarity index 100% rename from sound/vox_fem/hot.ogg rename to sound/announcer/vox_fem/hot.ogg diff --git a/sound/vox_fem/hotel.ogg b/sound/announcer/vox_fem/hotel.ogg similarity index 100% rename from sound/vox_fem/hotel.ogg rename to sound/announcer/vox_fem/hotel.ogg diff --git a/sound/vox_fem/hour.ogg b/sound/announcer/vox_fem/hour.ogg similarity index 100% rename from sound/vox_fem/hour.ogg rename to sound/announcer/vox_fem/hour.ogg diff --git a/sound/vox_fem/hours.ogg b/sound/announcer/vox_fem/hours.ogg similarity index 100% rename from sound/vox_fem/hours.ogg rename to sound/announcer/vox_fem/hours.ogg diff --git a/sound/vox_fem/how.ogg b/sound/announcer/vox_fem/how.ogg similarity index 100% rename from sound/vox_fem/how.ogg rename to sound/announcer/vox_fem/how.ogg diff --git a/sound/vox_fem/human.ogg b/sound/announcer/vox_fem/human.ogg similarity index 100% rename from sound/vox_fem/human.ogg rename to sound/announcer/vox_fem/human.ogg diff --git a/sound/vox_fem/humanoid.ogg b/sound/announcer/vox_fem/humanoid.ogg similarity index 100% rename from sound/vox_fem/humanoid.ogg rename to sound/announcer/vox_fem/humanoid.ogg diff --git a/sound/vox_fem/humans.ogg b/sound/announcer/vox_fem/humans.ogg similarity index 100% rename from sound/vox_fem/humans.ogg rename to sound/announcer/vox_fem/humans.ogg diff --git a/sound/vox_fem/hundred.ogg b/sound/announcer/vox_fem/hundred.ogg similarity index 100% rename from sound/vox_fem/hundred.ogg rename to sound/announcer/vox_fem/hundred.ogg diff --git a/sound/vox_fem/hunger.ogg b/sound/announcer/vox_fem/hunger.ogg similarity index 100% rename from sound/vox_fem/hunger.ogg rename to sound/announcer/vox_fem/hunger.ogg diff --git a/sound/vox_fem/hurt.ogg b/sound/announcer/vox_fem/hurt.ogg similarity index 100% rename from sound/vox_fem/hurt.ogg rename to sound/announcer/vox_fem/hurt.ogg diff --git a/sound/vox_fem/hydro.ogg b/sound/announcer/vox_fem/hydro.ogg similarity index 100% rename from sound/vox_fem/hydro.ogg rename to sound/announcer/vox_fem/hydro.ogg diff --git a/sound/vox_fem/hydrogen.ogg b/sound/announcer/vox_fem/hydrogen.ogg similarity index 100% rename from sound/vox_fem/hydrogen.ogg rename to sound/announcer/vox_fem/hydrogen.ogg diff --git a/sound/vox_fem/hydroponics.ogg b/sound/announcer/vox_fem/hydroponics.ogg similarity index 100% rename from sound/vox_fem/hydroponics.ogg rename to sound/announcer/vox_fem/hydroponics.ogg diff --git a/sound/vox_fem/hyper-noblium.ogg b/sound/announcer/vox_fem/hyper-noblium.ogg similarity index 100% rename from sound/vox_fem/hyper-noblium.ogg rename to sound/announcer/vox_fem/hyper-noblium.ogg diff --git a/sound/vox_fem/i.ogg b/sound/announcer/vox_fem/i.ogg similarity index 100% rename from sound/vox_fem/i.ogg rename to sound/announcer/vox_fem/i.ogg diff --git a/sound/vox_fem/ian.ogg b/sound/announcer/vox_fem/ian.ogg similarity index 100% rename from sound/vox_fem/ian.ogg rename to sound/announcer/vox_fem/ian.ogg diff --git a/sound/vox_fem/idiot.ogg b/sound/announcer/vox_fem/idiot.ogg similarity index 100% rename from sound/vox_fem/idiot.ogg rename to sound/announcer/vox_fem/idiot.ogg diff --git a/sound/vox_fem/if.ogg b/sound/announcer/vox_fem/if.ogg similarity index 100% rename from sound/vox_fem/if.ogg rename to sound/announcer/vox_fem/if.ogg diff --git a/sound/vox_fem/if2.ogg b/sound/announcer/vox_fem/if2.ogg similarity index 100% rename from sound/vox_fem/if2.ogg rename to sound/announcer/vox_fem/if2.ogg diff --git a/sound/vox_fem/illegal.ogg b/sound/announcer/vox_fem/illegal.ogg similarity index 100% rename from sound/vox_fem/illegal.ogg rename to sound/announcer/vox_fem/illegal.ogg diff --git a/sound/vox_fem/immediate.ogg b/sound/announcer/vox_fem/immediate.ogg similarity index 100% rename from sound/vox_fem/immediate.ogg rename to sound/announcer/vox_fem/immediate.ogg diff --git a/sound/vox_fem/immediately.ogg b/sound/announcer/vox_fem/immediately.ogg similarity index 100% rename from sound/vox_fem/immediately.ogg rename to sound/announcer/vox_fem/immediately.ogg diff --git a/sound/vox_fem/immortal.ogg b/sound/announcer/vox_fem/immortal.ogg similarity index 100% rename from sound/vox_fem/immortal.ogg rename to sound/announcer/vox_fem/immortal.ogg diff --git a/sound/vox_fem/impossible.ogg b/sound/announcer/vox_fem/impossible.ogg similarity index 100% rename from sound/vox_fem/impossible.ogg rename to sound/announcer/vox_fem/impossible.ogg diff --git a/sound/vox_fem/in.ogg b/sound/announcer/vox_fem/in.ogg similarity index 100% rename from sound/vox_fem/in.ogg rename to sound/announcer/vox_fem/in.ogg diff --git a/sound/vox_fem/inches.ogg b/sound/announcer/vox_fem/inches.ogg similarity index 100% rename from sound/vox_fem/inches.ogg rename to sound/announcer/vox_fem/inches.ogg diff --git a/sound/vox_fem/india.ogg b/sound/announcer/vox_fem/india.ogg similarity index 100% rename from sound/vox_fem/india.ogg rename to sound/announcer/vox_fem/india.ogg diff --git a/sound/vox_fem/inert.ogg b/sound/announcer/vox_fem/inert.ogg similarity index 100% rename from sound/vox_fem/inert.ogg rename to sound/announcer/vox_fem/inert.ogg diff --git a/sound/vox_fem/ing.ogg b/sound/announcer/vox_fem/ing.ogg similarity index 100% rename from sound/vox_fem/ing.ogg rename to sound/announcer/vox_fem/ing.ogg diff --git a/sound/vox_fem/inoperative.ogg b/sound/announcer/vox_fem/inoperative.ogg similarity index 100% rename from sound/vox_fem/inoperative.ogg rename to sound/announcer/vox_fem/inoperative.ogg diff --git a/sound/vox_fem/inside.ogg b/sound/announcer/vox_fem/inside.ogg similarity index 100% rename from sound/vox_fem/inside.ogg rename to sound/announcer/vox_fem/inside.ogg diff --git a/sound/vox_fem/inspection.ogg b/sound/announcer/vox_fem/inspection.ogg similarity index 100% rename from sound/vox_fem/inspection.ogg rename to sound/announcer/vox_fem/inspection.ogg diff --git a/sound/vox_fem/inspector.ogg b/sound/announcer/vox_fem/inspector.ogg similarity index 100% rename from sound/vox_fem/inspector.ogg rename to sound/announcer/vox_fem/inspector.ogg diff --git a/sound/vox_fem/interchange.ogg b/sound/announcer/vox_fem/interchange.ogg similarity index 100% rename from sound/vox_fem/interchange.ogg rename to sound/announcer/vox_fem/interchange.ogg diff --git a/sound/vox_fem/internal.ogg b/sound/announcer/vox_fem/internal.ogg similarity index 100% rename from sound/vox_fem/internal.ogg rename to sound/announcer/vox_fem/internal.ogg diff --git a/sound/vox_fem/internals.ogg b/sound/announcer/vox_fem/internals.ogg similarity index 100% rename from sound/vox_fem/internals.ogg rename to sound/announcer/vox_fem/internals.ogg diff --git a/sound/vox_fem/intruder.ogg b/sound/announcer/vox_fem/intruder.ogg similarity index 100% rename from sound/vox_fem/intruder.ogg rename to sound/announcer/vox_fem/intruder.ogg diff --git a/sound/vox_fem/invalid.ogg b/sound/announcer/vox_fem/invalid.ogg similarity index 100% rename from sound/vox_fem/invalid.ogg rename to sound/announcer/vox_fem/invalid.ogg diff --git a/sound/vox_fem/invalidate.ogg b/sound/announcer/vox_fem/invalidate.ogg similarity index 100% rename from sound/vox_fem/invalidate.ogg rename to sound/announcer/vox_fem/invalidate.ogg diff --git a/sound/vox_fem/invasion.ogg b/sound/announcer/vox_fem/invasion.ogg similarity index 100% rename from sound/vox_fem/invasion.ogg rename to sound/announcer/vox_fem/invasion.ogg diff --git a/sound/vox_fem/irradiate.ogg b/sound/announcer/vox_fem/irradiate.ogg similarity index 100% rename from sound/vox_fem/irradiate.ogg rename to sound/announcer/vox_fem/irradiate.ogg diff --git a/sound/vox_fem/is.ogg b/sound/announcer/vox_fem/is.ogg similarity index 100% rename from sound/vox_fem/is.ogg rename to sound/announcer/vox_fem/is.ogg diff --git a/sound/vox_fem/it.ogg b/sound/announcer/vox_fem/it.ogg similarity index 100% rename from sound/vox_fem/it.ogg rename to sound/announcer/vox_fem/it.ogg diff --git a/sound/vox_fem/its.ogg b/sound/announcer/vox_fem/its.ogg similarity index 100% rename from sound/vox_fem/its.ogg rename to sound/announcer/vox_fem/its.ogg diff --git a/sound/vox_fem/j.ogg b/sound/announcer/vox_fem/j.ogg similarity index 100% rename from sound/vox_fem/j.ogg rename to sound/announcer/vox_fem/j.ogg diff --git a/sound/vox_fem/janitor.ogg b/sound/announcer/vox_fem/janitor.ogg similarity index 100% rename from sound/vox_fem/janitor.ogg rename to sound/announcer/vox_fem/janitor.ogg diff --git a/sound/vox_fem/jesus.ogg b/sound/announcer/vox_fem/jesus.ogg similarity index 100% rename from sound/vox_fem/jesus.ogg rename to sound/announcer/vox_fem/jesus.ogg diff --git a/sound/vox_fem/job.ogg b/sound/announcer/vox_fem/job.ogg similarity index 100% rename from sound/vox_fem/job.ogg rename to sound/announcer/vox_fem/job.ogg diff --git a/sound/vox_fem/jobs.ogg b/sound/announcer/vox_fem/jobs.ogg similarity index 100% rename from sound/vox_fem/jobs.ogg rename to sound/announcer/vox_fem/jobs.ogg diff --git a/sound/vox_fem/johnson.ogg b/sound/announcer/vox_fem/johnson.ogg similarity index 100% rename from sound/vox_fem/johnson.ogg rename to sound/announcer/vox_fem/johnson.ogg diff --git a/sound/vox_fem/jolly.ogg b/sound/announcer/vox_fem/jolly.ogg similarity index 100% rename from sound/vox_fem/jolly.ogg rename to sound/announcer/vox_fem/jolly.ogg diff --git a/sound/vox_fem/juliet.ogg b/sound/announcer/vox_fem/juliet.ogg similarity index 100% rename from sound/vox_fem/juliet.ogg rename to sound/announcer/vox_fem/juliet.ogg diff --git a/sound/vox_fem/k.ogg b/sound/announcer/vox_fem/k.ogg similarity index 100% rename from sound/vox_fem/k.ogg rename to sound/announcer/vox_fem/k.ogg diff --git a/sound/vox_fem/kelvin.ogg b/sound/announcer/vox_fem/kelvin.ogg similarity index 100% rename from sound/vox_fem/kelvin.ogg rename to sound/announcer/vox_fem/kelvin.ogg diff --git a/sound/vox_fem/key.ogg b/sound/announcer/vox_fem/key.ogg similarity index 100% rename from sound/vox_fem/key.ogg rename to sound/announcer/vox_fem/key.ogg diff --git a/sound/vox_fem/kidnapped.ogg b/sound/announcer/vox_fem/kidnapped.ogg similarity index 100% rename from sound/vox_fem/kidnapped.ogg rename to sound/announcer/vox_fem/kidnapped.ogg diff --git a/sound/vox_fem/kidnapping.ogg b/sound/announcer/vox_fem/kidnapping.ogg similarity index 100% rename from sound/vox_fem/kidnapping.ogg rename to sound/announcer/vox_fem/kidnapping.ogg diff --git a/sound/vox_fem/kill.ogg b/sound/announcer/vox_fem/kill.ogg similarity index 100% rename from sound/vox_fem/kill.ogg rename to sound/announcer/vox_fem/kill.ogg diff --git a/sound/vox_fem/killed.ogg b/sound/announcer/vox_fem/killed.ogg similarity index 100% rename from sound/vox_fem/killed.ogg rename to sound/announcer/vox_fem/killed.ogg diff --git a/sound/vox_fem/killer.ogg b/sound/announcer/vox_fem/killer.ogg similarity index 100% rename from sound/vox_fem/killer.ogg rename to sound/announcer/vox_fem/killer.ogg diff --git a/sound/vox_fem/kilo.ogg b/sound/announcer/vox_fem/kilo.ogg similarity index 100% rename from sound/vox_fem/kilo.ogg rename to sound/announcer/vox_fem/kilo.ogg diff --git a/sound/vox_fem/kit.ogg b/sound/announcer/vox_fem/kit.ogg similarity index 100% rename from sound/vox_fem/kit.ogg rename to sound/announcer/vox_fem/kit.ogg diff --git a/sound/vox_fem/kitchen.ogg b/sound/announcer/vox_fem/kitchen.ogg similarity index 100% rename from sound/vox_fem/kitchen.ogg rename to sound/announcer/vox_fem/kitchen.ogg diff --git a/sound/vox_fem/l.ogg b/sound/announcer/vox_fem/l.ogg similarity index 100% rename from sound/vox_fem/l.ogg rename to sound/announcer/vox_fem/l.ogg diff --git a/sound/vox_fem/lab.ogg b/sound/announcer/vox_fem/lab.ogg similarity index 100% rename from sound/vox_fem/lab.ogg rename to sound/announcer/vox_fem/lab.ogg diff --git a/sound/vox_fem/lambda.ogg b/sound/announcer/vox_fem/lambda.ogg similarity index 100% rename from sound/vox_fem/lambda.ogg rename to sound/announcer/vox_fem/lambda.ogg diff --git a/sound/vox_fem/large.ogg b/sound/announcer/vox_fem/large.ogg similarity index 100% rename from sound/vox_fem/large.ogg rename to sound/announcer/vox_fem/large.ogg diff --git a/sound/vox_fem/laser.ogg b/sound/announcer/vox_fem/laser.ogg similarity index 100% rename from sound/vox_fem/laser.ogg rename to sound/announcer/vox_fem/laser.ogg diff --git a/sound/vox_fem/last.ogg b/sound/announcer/vox_fem/last.ogg similarity index 100% rename from sound/vox_fem/last.ogg rename to sound/announcer/vox_fem/last.ogg diff --git a/sound/vox_fem/launch.ogg b/sound/announcer/vox_fem/launch.ogg similarity index 100% rename from sound/vox_fem/launch.ogg rename to sound/announcer/vox_fem/launch.ogg diff --git a/sound/vox_fem/lavaland.ogg b/sound/announcer/vox_fem/lavaland.ogg similarity index 100% rename from sound/vox_fem/lavaland.ogg rename to sound/announcer/vox_fem/lavaland.ogg diff --git a/sound/vox_fem/law.ogg b/sound/announcer/vox_fem/law.ogg similarity index 100% rename from sound/vox_fem/law.ogg rename to sound/announcer/vox_fem/law.ogg diff --git a/sound/vox_fem/laws.ogg b/sound/announcer/vox_fem/laws.ogg similarity index 100% rename from sound/vox_fem/laws.ogg rename to sound/announcer/vox_fem/laws.ogg diff --git a/sound/vox_fem/lawyer.ogg b/sound/announcer/vox_fem/lawyer.ogg similarity index 100% rename from sound/vox_fem/lawyer.ogg rename to sound/announcer/vox_fem/lawyer.ogg diff --git a/sound/vox_fem/leak.ogg b/sound/announcer/vox_fem/leak.ogg similarity index 100% rename from sound/vox_fem/leak.ogg rename to sound/announcer/vox_fem/leak.ogg diff --git a/sound/vox_fem/leave.ogg b/sound/announcer/vox_fem/leave.ogg similarity index 100% rename from sound/vox_fem/leave.ogg rename to sound/announcer/vox_fem/leave.ogg diff --git a/sound/vox_fem/left.ogg b/sound/announcer/vox_fem/left.ogg similarity index 100% rename from sound/vox_fem/left.ogg rename to sound/announcer/vox_fem/left.ogg diff --git a/sound/vox_fem/legal.ogg b/sound/announcer/vox_fem/legal.ogg similarity index 100% rename from sound/vox_fem/legal.ogg rename to sound/announcer/vox_fem/legal.ogg diff --git a/sound/vox_fem/level.ogg b/sound/announcer/vox_fem/level.ogg similarity index 100% rename from sound/vox_fem/level.ogg rename to sound/announcer/vox_fem/level.ogg diff --git a/sound/vox_fem/lever.ogg b/sound/announcer/vox_fem/lever.ogg similarity index 100% rename from sound/vox_fem/lever.ogg rename to sound/announcer/vox_fem/lever.ogg diff --git a/sound/vox_fem/library.ogg b/sound/announcer/vox_fem/library.ogg similarity index 100% rename from sound/vox_fem/library.ogg rename to sound/announcer/vox_fem/library.ogg diff --git a/sound/vox_fem/lie.ogg b/sound/announcer/vox_fem/lie.ogg similarity index 100% rename from sound/vox_fem/lie.ogg rename to sound/announcer/vox_fem/lie.ogg diff --git a/sound/vox_fem/lieutenant.ogg b/sound/announcer/vox_fem/lieutenant.ogg similarity index 100% rename from sound/vox_fem/lieutenant.ogg rename to sound/announcer/vox_fem/lieutenant.ogg diff --git a/sound/vox_fem/life.ogg b/sound/announcer/vox_fem/life.ogg similarity index 100% rename from sound/vox_fem/life.ogg rename to sound/announcer/vox_fem/life.ogg diff --git a/sound/vox_fem/lifeform.ogg b/sound/announcer/vox_fem/lifeform.ogg similarity index 100% rename from sound/vox_fem/lifeform.ogg rename to sound/announcer/vox_fem/lifeform.ogg diff --git a/sound/vox_fem/light.ogg b/sound/announcer/vox_fem/light.ogg similarity index 100% rename from sound/vox_fem/light.ogg rename to sound/announcer/vox_fem/light.ogg diff --git a/sound/vox_fem/lightbulb.ogg b/sound/announcer/vox_fem/lightbulb.ogg similarity index 100% rename from sound/vox_fem/lightbulb.ogg rename to sound/announcer/vox_fem/lightbulb.ogg diff --git a/sound/vox_fem/lima.ogg b/sound/announcer/vox_fem/lima.ogg similarity index 100% rename from sound/vox_fem/lima.ogg rename to sound/announcer/vox_fem/lima.ogg diff --git a/sound/vox_fem/limit.ogg b/sound/announcer/vox_fem/limit.ogg similarity index 100% rename from sound/vox_fem/limit.ogg rename to sound/announcer/vox_fem/limit.ogg diff --git a/sound/vox_fem/limited.ogg b/sound/announcer/vox_fem/limited.ogg similarity index 100% rename from sound/vox_fem/limited.ogg rename to sound/announcer/vox_fem/limited.ogg diff --git a/sound/vox_fem/liquid.ogg b/sound/announcer/vox_fem/liquid.ogg similarity index 100% rename from sound/vox_fem/liquid.ogg rename to sound/announcer/vox_fem/liquid.ogg diff --git a/sound/vox_fem/list.ogg b/sound/announcer/vox_fem/list.ogg similarity index 100% rename from sound/vox_fem/list.ogg rename to sound/announcer/vox_fem/list.ogg diff --git a/sound/vox_fem/live.ogg b/sound/announcer/vox_fem/live.ogg similarity index 100% rename from sound/vox_fem/live.ogg rename to sound/announcer/vox_fem/live.ogg diff --git a/sound/vox_fem/live2.ogg b/sound/announcer/vox_fem/live2.ogg similarity index 100% rename from sound/vox_fem/live2.ogg rename to sound/announcer/vox_fem/live2.ogg diff --git a/sound/vox_fem/lizard.ogg b/sound/announcer/vox_fem/lizard.ogg similarity index 100% rename from sound/vox_fem/lizard.ogg rename to sound/announcer/vox_fem/lizard.ogg diff --git a/sound/vox_fem/lizardperson.ogg b/sound/announcer/vox_fem/lizardperson.ogg similarity index 100% rename from sound/vox_fem/lizardperson.ogg rename to sound/announcer/vox_fem/lizardperson.ogg diff --git a/sound/vox_fem/loading.ogg b/sound/announcer/vox_fem/loading.ogg similarity index 100% rename from sound/vox_fem/loading.ogg rename to sound/announcer/vox_fem/loading.ogg diff --git a/sound/vox_fem/locate.ogg b/sound/announcer/vox_fem/locate.ogg similarity index 100% rename from sound/vox_fem/locate.ogg rename to sound/announcer/vox_fem/locate.ogg diff --git a/sound/vox_fem/located.ogg b/sound/announcer/vox_fem/located.ogg similarity index 100% rename from sound/vox_fem/located.ogg rename to sound/announcer/vox_fem/located.ogg diff --git a/sound/vox_fem/location.ogg b/sound/announcer/vox_fem/location.ogg similarity index 100% rename from sound/vox_fem/location.ogg rename to sound/announcer/vox_fem/location.ogg diff --git a/sound/vox_fem/lock.ogg b/sound/announcer/vox_fem/lock.ogg similarity index 100% rename from sound/vox_fem/lock.ogg rename to sound/announcer/vox_fem/lock.ogg diff --git a/sound/vox_fem/locked.ogg b/sound/announcer/vox_fem/locked.ogg similarity index 100% rename from sound/vox_fem/locked.ogg rename to sound/announcer/vox_fem/locked.ogg diff --git a/sound/vox_fem/locker.ogg b/sound/announcer/vox_fem/locker.ogg similarity index 100% rename from sound/vox_fem/locker.ogg rename to sound/announcer/vox_fem/locker.ogg diff --git a/sound/vox_fem/lockout.ogg b/sound/announcer/vox_fem/lockout.ogg similarity index 100% rename from sound/vox_fem/lockout.ogg rename to sound/announcer/vox_fem/lockout.ogg diff --git a/sound/vox_fem/long.ogg b/sound/announcer/vox_fem/long.ogg similarity index 100% rename from sound/vox_fem/long.ogg rename to sound/announcer/vox_fem/long.ogg diff --git a/sound/vox_fem/look.ogg b/sound/announcer/vox_fem/look.ogg similarity index 100% rename from sound/vox_fem/look.ogg rename to sound/announcer/vox_fem/look.ogg diff --git a/sound/vox_fem/loop.ogg b/sound/announcer/vox_fem/loop.ogg similarity index 100% rename from sound/vox_fem/loop.ogg rename to sound/announcer/vox_fem/loop.ogg diff --git a/sound/vox_fem/loose.ogg b/sound/announcer/vox_fem/loose.ogg similarity index 100% rename from sound/vox_fem/loose.ogg rename to sound/announcer/vox_fem/loose.ogg diff --git a/sound/vox_fem/lot.ogg b/sound/announcer/vox_fem/lot.ogg similarity index 100% rename from sound/vox_fem/lot.ogg rename to sound/announcer/vox_fem/lot.ogg diff --git a/sound/vox_fem/lower.ogg b/sound/announcer/vox_fem/lower.ogg similarity index 100% rename from sound/vox_fem/lower.ogg rename to sound/announcer/vox_fem/lower.ogg diff --git a/sound/vox_fem/lowest.ogg b/sound/announcer/vox_fem/lowest.ogg similarity index 100% rename from sound/vox_fem/lowest.ogg rename to sound/announcer/vox_fem/lowest.ogg diff --git a/sound/vox_fem/lusty.ogg b/sound/announcer/vox_fem/lusty.ogg similarity index 100% rename from sound/vox_fem/lusty.ogg rename to sound/announcer/vox_fem/lusty.ogg diff --git a/sound/vox_fem/m.ogg b/sound/announcer/vox_fem/m.ogg similarity index 100% rename from sound/vox_fem/m.ogg rename to sound/announcer/vox_fem/m.ogg diff --git a/sound/vox_fem/machine.ogg b/sound/announcer/vox_fem/machine.ogg similarity index 100% rename from sound/vox_fem/machine.ogg rename to sound/announcer/vox_fem/machine.ogg diff --git a/sound/vox_fem/made.ogg b/sound/announcer/vox_fem/made.ogg similarity index 100% rename from sound/vox_fem/made.ogg rename to sound/announcer/vox_fem/made.ogg diff --git a/sound/vox_fem/magic.ogg b/sound/announcer/vox_fem/magic.ogg similarity index 100% rename from sound/vox_fem/magic.ogg rename to sound/announcer/vox_fem/magic.ogg diff --git a/sound/vox_fem/magnetic.ogg b/sound/announcer/vox_fem/magnetic.ogg similarity index 100% rename from sound/vox_fem/magnetic.ogg rename to sound/announcer/vox_fem/magnetic.ogg diff --git a/sound/vox_fem/main.ogg b/sound/announcer/vox_fem/main.ogg similarity index 100% rename from sound/vox_fem/main.ogg rename to sound/announcer/vox_fem/main.ogg diff --git a/sound/vox_fem/maintainer.ogg b/sound/announcer/vox_fem/maintainer.ogg similarity index 100% rename from sound/vox_fem/maintainer.ogg rename to sound/announcer/vox_fem/maintainer.ogg diff --git a/sound/vox_fem/maintenance.ogg b/sound/announcer/vox_fem/maintenance.ogg similarity index 100% rename from sound/vox_fem/maintenance.ogg rename to sound/announcer/vox_fem/maintenance.ogg diff --git a/sound/vox_fem/major.ogg b/sound/announcer/vox_fem/major.ogg similarity index 100% rename from sound/vox_fem/major.ogg rename to sound/announcer/vox_fem/major.ogg diff --git a/sound/vox_fem/making.ogg b/sound/announcer/vox_fem/making.ogg similarity index 100% rename from sound/vox_fem/making.ogg rename to sound/announcer/vox_fem/making.ogg diff --git a/sound/vox_fem/malfunction.ogg b/sound/announcer/vox_fem/malfunction.ogg similarity index 100% rename from sound/vox_fem/malfunction.ogg rename to sound/announcer/vox_fem/malfunction.ogg diff --git a/sound/vox_fem/man.ogg b/sound/announcer/vox_fem/man.ogg similarity index 100% rename from sound/vox_fem/man.ogg rename to sound/announcer/vox_fem/man.ogg diff --git a/sound/vox_fem/many.ogg b/sound/announcer/vox_fem/many.ogg similarity index 100% rename from sound/vox_fem/many.ogg rename to sound/announcer/vox_fem/many.ogg diff --git a/sound/vox_fem/mass.ogg b/sound/announcer/vox_fem/mass.ogg similarity index 100% rename from sound/vox_fem/mass.ogg rename to sound/announcer/vox_fem/mass.ogg diff --git a/sound/vox_fem/materials.ogg b/sound/announcer/vox_fem/materials.ogg similarity index 100% rename from sound/vox_fem/materials.ogg rename to sound/announcer/vox_fem/materials.ogg diff --git a/sound/vox_fem/maximum.ogg b/sound/announcer/vox_fem/maximum.ogg similarity index 100% rename from sound/vox_fem/maximum.ogg rename to sound/announcer/vox_fem/maximum.ogg diff --git a/sound/vox_fem/may.ogg b/sound/announcer/vox_fem/may.ogg similarity index 100% rename from sound/vox_fem/may.ogg rename to sound/announcer/vox_fem/may.ogg diff --git a/sound/vox_fem/me.ogg b/sound/announcer/vox_fem/me.ogg similarity index 100% rename from sound/vox_fem/me.ogg rename to sound/announcer/vox_fem/me.ogg diff --git a/sound/vox_fem/mean.ogg b/sound/announcer/vox_fem/mean.ogg similarity index 100% rename from sound/vox_fem/mean.ogg rename to sound/announcer/vox_fem/mean.ogg diff --git a/sound/vox_fem/means.ogg b/sound/announcer/vox_fem/means.ogg similarity index 100% rename from sound/vox_fem/means.ogg rename to sound/announcer/vox_fem/means.ogg diff --git a/sound/vox_fem/meat.ogg b/sound/announcer/vox_fem/meat.ogg similarity index 100% rename from sound/vox_fem/meat.ogg rename to sound/announcer/vox_fem/meat.ogg diff --git a/sound/vox_fem/medbay.ogg b/sound/announcer/vox_fem/medbay.ogg similarity index 100% rename from sound/vox_fem/medbay.ogg rename to sound/announcer/vox_fem/medbay.ogg diff --git a/sound/vox_fem/medical.ogg b/sound/announcer/vox_fem/medical.ogg similarity index 100% rename from sound/vox_fem/medical.ogg rename to sound/announcer/vox_fem/medical.ogg diff --git a/sound/vox_fem/medium.ogg b/sound/announcer/vox_fem/medium.ogg similarity index 100% rename from sound/vox_fem/medium.ogg rename to sound/announcer/vox_fem/medium.ogg diff --git a/sound/vox_fem/megafauna.ogg b/sound/announcer/vox_fem/megafauna.ogg similarity index 100% rename from sound/vox_fem/megafauna.ogg rename to sound/announcer/vox_fem/megafauna.ogg diff --git a/sound/vox_fem/men.ogg b/sound/announcer/vox_fem/men.ogg similarity index 100% rename from sound/vox_fem/men.ogg rename to sound/announcer/vox_fem/men.ogg diff --git a/sound/vox_fem/mercy.ogg b/sound/announcer/vox_fem/mercy.ogg similarity index 100% rename from sound/vox_fem/mercy.ogg rename to sound/announcer/vox_fem/mercy.ogg diff --git a/sound/vox_fem/mesa.ogg b/sound/announcer/vox_fem/mesa.ogg similarity index 100% rename from sound/vox_fem/mesa.ogg rename to sound/announcer/vox_fem/mesa.ogg diff --git a/sound/vox_fem/meson.ogg b/sound/announcer/vox_fem/meson.ogg similarity index 100% rename from sound/vox_fem/meson.ogg rename to sound/announcer/vox_fem/meson.ogg diff --git a/sound/vox_fem/message.ogg b/sound/announcer/vox_fem/message.ogg similarity index 100% rename from sound/vox_fem/message.ogg rename to sound/announcer/vox_fem/message.ogg diff --git a/sound/vox_fem/meter.ogg b/sound/announcer/vox_fem/meter.ogg similarity index 100% rename from sound/vox_fem/meter.ogg rename to sound/announcer/vox_fem/meter.ogg diff --git a/sound/vox_fem/method.ogg b/sound/announcer/vox_fem/method.ogg similarity index 100% rename from sound/vox_fem/method.ogg rename to sound/announcer/vox_fem/method.ogg diff --git a/sound/vox_fem/miasma.ogg b/sound/announcer/vox_fem/miasma.ogg similarity index 100% rename from sound/vox_fem/miasma.ogg rename to sound/announcer/vox_fem/miasma.ogg diff --git a/sound/vox_fem/micro.ogg b/sound/announcer/vox_fem/micro.ogg similarity index 100% rename from sound/vox_fem/micro.ogg rename to sound/announcer/vox_fem/micro.ogg diff --git a/sound/vox_fem/middle.ogg b/sound/announcer/vox_fem/middle.ogg similarity index 100% rename from sound/vox_fem/middle.ogg rename to sound/announcer/vox_fem/middle.ogg diff --git a/sound/vox_fem/mike.ogg b/sound/announcer/vox_fem/mike.ogg similarity index 100% rename from sound/vox_fem/mike.ogg rename to sound/announcer/vox_fem/mike.ogg diff --git a/sound/vox_fem/miles.ogg b/sound/announcer/vox_fem/miles.ogg similarity index 100% rename from sound/vox_fem/miles.ogg rename to sound/announcer/vox_fem/miles.ogg diff --git a/sound/vox_fem/military.ogg b/sound/announcer/vox_fem/military.ogg similarity index 100% rename from sound/vox_fem/military.ogg rename to sound/announcer/vox_fem/military.ogg diff --git a/sound/vox_fem/milli.ogg b/sound/announcer/vox_fem/milli.ogg similarity index 100% rename from sound/vox_fem/milli.ogg rename to sound/announcer/vox_fem/milli.ogg diff --git a/sound/vox_fem/million.ogg b/sound/announcer/vox_fem/million.ogg similarity index 100% rename from sound/vox_fem/million.ogg rename to sound/announcer/vox_fem/million.ogg diff --git a/sound/vox_fem/mime.ogg b/sound/announcer/vox_fem/mime.ogg similarity index 100% rename from sound/vox_fem/mime.ogg rename to sound/announcer/vox_fem/mime.ogg diff --git a/sound/vox_fem/minefield.ogg b/sound/announcer/vox_fem/minefield.ogg similarity index 100% rename from sound/vox_fem/minefield.ogg rename to sound/announcer/vox_fem/minefield.ogg diff --git a/sound/vox_fem/miner.ogg b/sound/announcer/vox_fem/miner.ogg similarity index 100% rename from sound/vox_fem/miner.ogg rename to sound/announcer/vox_fem/miner.ogg diff --git a/sound/vox_fem/minimum.ogg b/sound/announcer/vox_fem/minimum.ogg similarity index 100% rename from sound/vox_fem/minimum.ogg rename to sound/announcer/vox_fem/minimum.ogg diff --git a/sound/vox_fem/minor.ogg b/sound/announcer/vox_fem/minor.ogg similarity index 100% rename from sound/vox_fem/minor.ogg rename to sound/announcer/vox_fem/minor.ogg diff --git a/sound/vox_fem/minute.ogg b/sound/announcer/vox_fem/minute.ogg similarity index 100% rename from sound/vox_fem/minute.ogg rename to sound/announcer/vox_fem/minute.ogg diff --git a/sound/vox_fem/minutes.ogg b/sound/announcer/vox_fem/minutes.ogg similarity index 100% rename from sound/vox_fem/minutes.ogg rename to sound/announcer/vox_fem/minutes.ogg diff --git a/sound/vox_fem/mister.ogg b/sound/announcer/vox_fem/mister.ogg similarity index 100% rename from sound/vox_fem/mister.ogg rename to sound/announcer/vox_fem/mister.ogg diff --git a/sound/vox_fem/mixture.ogg b/sound/announcer/vox_fem/mixture.ogg similarity index 100% rename from sound/vox_fem/mixture.ogg rename to sound/announcer/vox_fem/mixture.ogg diff --git a/sound/vox_fem/mode.ogg b/sound/announcer/vox_fem/mode.ogg similarity index 100% rename from sound/vox_fem/mode.ogg rename to sound/announcer/vox_fem/mode.ogg diff --git a/sound/vox_fem/modification.ogg b/sound/announcer/vox_fem/modification.ogg similarity index 100% rename from sound/vox_fem/modification.ogg rename to sound/announcer/vox_fem/modification.ogg diff --git a/sound/vox_fem/money.ogg b/sound/announcer/vox_fem/money.ogg similarity index 100% rename from sound/vox_fem/money.ogg rename to sound/announcer/vox_fem/money.ogg diff --git a/sound/vox_fem/monkey.ogg b/sound/announcer/vox_fem/monkey.ogg similarity index 100% rename from sound/vox_fem/monkey.ogg rename to sound/announcer/vox_fem/monkey.ogg diff --git a/sound/vox_fem/most.ogg b/sound/announcer/vox_fem/most.ogg similarity index 100% rename from sound/vox_fem/most.ogg rename to sound/announcer/vox_fem/most.ogg diff --git a/sound/vox_fem/moth.ogg b/sound/announcer/vox_fem/moth.ogg similarity index 100% rename from sound/vox_fem/moth.ogg rename to sound/announcer/vox_fem/moth.ogg diff --git a/sound/vox_fem/mothperson.ogg b/sound/announcer/vox_fem/mothperson.ogg similarity index 100% rename from sound/vox_fem/mothperson.ogg rename to sound/announcer/vox_fem/mothperson.ogg diff --git a/sound/vox_fem/motor.ogg b/sound/announcer/vox_fem/motor.ogg similarity index 100% rename from sound/vox_fem/motor.ogg rename to sound/announcer/vox_fem/motor.ogg diff --git a/sound/vox_fem/motorpool.ogg b/sound/announcer/vox_fem/motorpool.ogg similarity index 100% rename from sound/vox_fem/motorpool.ogg rename to sound/announcer/vox_fem/motorpool.ogg diff --git a/sound/vox_fem/move.ogg b/sound/announcer/vox_fem/move.ogg similarity index 100% rename from sound/vox_fem/move.ogg rename to sound/announcer/vox_fem/move.ogg diff --git a/sound/vox_fem/moved.ogg b/sound/announcer/vox_fem/moved.ogg similarity index 100% rename from sound/vox_fem/moved.ogg rename to sound/announcer/vox_fem/moved.ogg diff --git a/sound/vox_fem/moving.ogg b/sound/announcer/vox_fem/moving.ogg similarity index 100% rename from sound/vox_fem/moving.ogg rename to sound/announcer/vox_fem/moving.ogg diff --git a/sound/vox_fem/multitude.ogg b/sound/announcer/vox_fem/multitude.ogg similarity index 100% rename from sound/vox_fem/multitude.ogg rename to sound/announcer/vox_fem/multitude.ogg diff --git a/sound/vox_fem/murder.ogg b/sound/announcer/vox_fem/murder.ogg similarity index 100% rename from sound/vox_fem/murder.ogg rename to sound/announcer/vox_fem/murder.ogg diff --git a/sound/vox_fem/murderer.ogg b/sound/announcer/vox_fem/murderer.ogg similarity index 100% rename from sound/vox_fem/murderer.ogg rename to sound/announcer/vox_fem/murderer.ogg diff --git a/sound/vox_fem/must.ogg b/sound/announcer/vox_fem/must.ogg similarity index 100% rename from sound/vox_fem/must.ogg rename to sound/announcer/vox_fem/must.ogg diff --git a/sound/vox_fem/my.ogg b/sound/announcer/vox_fem/my.ogg similarity index 100% rename from sound/vox_fem/my.ogg rename to sound/announcer/vox_fem/my.ogg diff --git a/sound/vox_fem/mythic.ogg b/sound/announcer/vox_fem/mythic.ogg similarity index 100% rename from sound/vox_fem/mythic.ogg rename to sound/announcer/vox_fem/mythic.ogg diff --git a/sound/vox_fem/n.ogg b/sound/announcer/vox_fem/n.ogg similarity index 100% rename from sound/vox_fem/n.ogg rename to sound/announcer/vox_fem/n.ogg diff --git a/sound/vox_fem/nanotrasen.ogg b/sound/announcer/vox_fem/nanotrasen.ogg similarity index 100% rename from sound/vox_fem/nanotrasen.ogg rename to sound/announcer/vox_fem/nanotrasen.ogg diff --git a/sound/vox_fem/near.ogg b/sound/announcer/vox_fem/near.ogg similarity index 100% rename from sound/vox_fem/near.ogg rename to sound/announcer/vox_fem/near.ogg diff --git a/sound/vox_fem/nearest.ogg b/sound/announcer/vox_fem/nearest.ogg similarity index 100% rename from sound/vox_fem/nearest.ogg rename to sound/announcer/vox_fem/nearest.ogg diff --git a/sound/vox_fem/nearly.ogg b/sound/announcer/vox_fem/nearly.ogg similarity index 100% rename from sound/vox_fem/nearly.ogg rename to sound/announcer/vox_fem/nearly.ogg diff --git a/sound/vox_fem/need.ogg b/sound/announcer/vox_fem/need.ogg similarity index 100% rename from sound/vox_fem/need.ogg rename to sound/announcer/vox_fem/need.ogg diff --git a/sound/vox_fem/never.ogg b/sound/announcer/vox_fem/never.ogg similarity index 100% rename from sound/vox_fem/never.ogg rename to sound/announcer/vox_fem/never.ogg diff --git a/sound/vox_fem/nice.ogg b/sound/announcer/vox_fem/nice.ogg similarity index 100% rename from sound/vox_fem/nice.ogg rename to sound/announcer/vox_fem/nice.ogg diff --git a/sound/vox_fem/night.ogg b/sound/announcer/vox_fem/night.ogg similarity index 100% rename from sound/vox_fem/night.ogg rename to sound/announcer/vox_fem/night.ogg diff --git a/sound/vox_fem/nine.ogg b/sound/announcer/vox_fem/nine.ogg similarity index 100% rename from sound/vox_fem/nine.ogg rename to sound/announcer/vox_fem/nine.ogg diff --git a/sound/vox_fem/nineteen.ogg b/sound/announcer/vox_fem/nineteen.ogg similarity index 100% rename from sound/vox_fem/nineteen.ogg rename to sound/announcer/vox_fem/nineteen.ogg diff --git a/sound/vox_fem/ninety.ogg b/sound/announcer/vox_fem/ninety.ogg similarity index 100% rename from sound/vox_fem/ninety.ogg rename to sound/announcer/vox_fem/ninety.ogg diff --git a/sound/vox_fem/nitrogen.ogg b/sound/announcer/vox_fem/nitrogen.ogg similarity index 100% rename from sound/vox_fem/nitrogen.ogg rename to sound/announcer/vox_fem/nitrogen.ogg diff --git a/sound/vox_fem/no.ogg b/sound/announcer/vox_fem/no.ogg similarity index 100% rename from sound/vox_fem/no.ogg rename to sound/announcer/vox_fem/no.ogg diff --git a/sound/vox_fem/nominal.ogg b/sound/announcer/vox_fem/nominal.ogg similarity index 100% rename from sound/vox_fem/nominal.ogg rename to sound/announcer/vox_fem/nominal.ogg diff --git a/sound/vox_fem/none.ogg b/sound/announcer/vox_fem/none.ogg similarity index 100% rename from sound/vox_fem/none.ogg rename to sound/announcer/vox_fem/none.ogg diff --git a/sound/vox_fem/normal.ogg b/sound/announcer/vox_fem/normal.ogg similarity index 100% rename from sound/vox_fem/normal.ogg rename to sound/announcer/vox_fem/normal.ogg diff --git a/sound/vox_fem/normally.ogg b/sound/announcer/vox_fem/normally.ogg similarity index 100% rename from sound/vox_fem/normally.ogg rename to sound/announcer/vox_fem/normally.ogg diff --git a/sound/vox_fem/north.ogg b/sound/announcer/vox_fem/north.ogg similarity index 100% rename from sound/vox_fem/north.ogg rename to sound/announcer/vox_fem/north.ogg diff --git a/sound/vox_fem/northeast.ogg b/sound/announcer/vox_fem/northeast.ogg similarity index 100% rename from sound/vox_fem/northeast.ogg rename to sound/announcer/vox_fem/northeast.ogg diff --git a/sound/vox_fem/northwest.ogg b/sound/announcer/vox_fem/northwest.ogg similarity index 100% rename from sound/vox_fem/northwest.ogg rename to sound/announcer/vox_fem/northwest.ogg diff --git a/sound/vox_fem/not.ogg b/sound/announcer/vox_fem/not.ogg similarity index 100% rename from sound/vox_fem/not.ogg rename to sound/announcer/vox_fem/not.ogg diff --git a/sound/vox_fem/notably.ogg b/sound/announcer/vox_fem/notably.ogg similarity index 100% rename from sound/vox_fem/notably.ogg rename to sound/announcer/vox_fem/notably.ogg diff --git a/sound/vox_fem/november.ogg b/sound/announcer/vox_fem/november.ogg similarity index 100% rename from sound/vox_fem/november.ogg rename to sound/announcer/vox_fem/november.ogg diff --git a/sound/vox_fem/now.ogg b/sound/announcer/vox_fem/now.ogg similarity index 100% rename from sound/vox_fem/now.ogg rename to sound/announcer/vox_fem/now.ogg diff --git a/sound/vox_fem/nuclear.ogg b/sound/announcer/vox_fem/nuclear.ogg similarity index 100% rename from sound/vox_fem/nuclear.ogg rename to sound/announcer/vox_fem/nuclear.ogg diff --git a/sound/vox_fem/nuke.ogg b/sound/announcer/vox_fem/nuke.ogg similarity index 100% rename from sound/vox_fem/nuke.ogg rename to sound/announcer/vox_fem/nuke.ogg diff --git a/sound/vox_fem/number.ogg b/sound/announcer/vox_fem/number.ogg similarity index 100% rename from sound/vox_fem/number.ogg rename to sound/announcer/vox_fem/number.ogg diff --git a/sound/vox_fem/o.ogg b/sound/announcer/vox_fem/o.ogg similarity index 100% rename from sound/vox_fem/o.ogg rename to sound/announcer/vox_fem/o.ogg diff --git a/sound/vox_fem/object.ogg b/sound/announcer/vox_fem/object.ogg similarity index 100% rename from sound/vox_fem/object.ogg rename to sound/announcer/vox_fem/object.ogg diff --git a/sound/vox_fem/objective.ogg b/sound/announcer/vox_fem/objective.ogg similarity index 100% rename from sound/vox_fem/objective.ogg rename to sound/announcer/vox_fem/objective.ogg diff --git a/sound/vox_fem/obliterate.ogg b/sound/announcer/vox_fem/obliterate.ogg similarity index 100% rename from sound/vox_fem/obliterate.ogg rename to sound/announcer/vox_fem/obliterate.ogg diff --git a/sound/vox_fem/obliterated.ogg b/sound/announcer/vox_fem/obliterated.ogg similarity index 100% rename from sound/vox_fem/obliterated.ogg rename to sound/announcer/vox_fem/obliterated.ogg diff --git a/sound/vox_fem/obliterating.ogg b/sound/announcer/vox_fem/obliterating.ogg similarity index 100% rename from sound/vox_fem/obliterating.ogg rename to sound/announcer/vox_fem/obliterating.ogg diff --git a/sound/vox_fem/observation.ogg b/sound/announcer/vox_fem/observation.ogg similarity index 100% rename from sound/vox_fem/observation.ogg rename to sound/announcer/vox_fem/observation.ogg diff --git a/sound/vox_fem/obtain.ogg b/sound/announcer/vox_fem/obtain.ogg similarity index 100% rename from sound/vox_fem/obtain.ogg rename to sound/announcer/vox_fem/obtain.ogg diff --git a/sound/vox_fem/of.ogg b/sound/announcer/vox_fem/of.ogg similarity index 100% rename from sound/vox_fem/of.ogg rename to sound/announcer/vox_fem/of.ogg diff --git a/sound/vox_fem/off.ogg b/sound/announcer/vox_fem/off.ogg similarity index 100% rename from sound/vox_fem/off.ogg rename to sound/announcer/vox_fem/off.ogg diff --git a/sound/vox_fem/office.ogg b/sound/announcer/vox_fem/office.ogg similarity index 100% rename from sound/vox_fem/office.ogg rename to sound/announcer/vox_fem/office.ogg diff --git a/sound/vox_fem/officer.ogg b/sound/announcer/vox_fem/officer.ogg similarity index 100% rename from sound/vox_fem/officer.ogg rename to sound/announcer/vox_fem/officer.ogg diff --git a/sound/vox_fem/oh.ogg b/sound/announcer/vox_fem/oh.ogg similarity index 100% rename from sound/vox_fem/oh.ogg rename to sound/announcer/vox_fem/oh.ogg diff --git a/sound/vox_fem/ok.ogg b/sound/announcer/vox_fem/ok.ogg similarity index 100% rename from sound/vox_fem/ok.ogg rename to sound/announcer/vox_fem/ok.ogg diff --git a/sound/vox_fem/okay.ogg b/sound/announcer/vox_fem/okay.ogg similarity index 100% rename from sound/vox_fem/okay.ogg rename to sound/announcer/vox_fem/okay.ogg diff --git a/sound/vox_fem/on.ogg b/sound/announcer/vox_fem/on.ogg similarity index 100% rename from sound/vox_fem/on.ogg rename to sound/announcer/vox_fem/on.ogg diff --git a/sound/vox_fem/once.ogg b/sound/announcer/vox_fem/once.ogg similarity index 100% rename from sound/vox_fem/once.ogg rename to sound/announcer/vox_fem/once.ogg diff --git a/sound/vox_fem/one.ogg b/sound/announcer/vox_fem/one.ogg similarity index 100% rename from sound/vox_fem/one.ogg rename to sound/announcer/vox_fem/one.ogg diff --git a/sound/vox_fem/oof.ogg b/sound/announcer/vox_fem/oof.ogg similarity index 100% rename from sound/vox_fem/oof.ogg rename to sound/announcer/vox_fem/oof.ogg diff --git a/sound/vox_fem/open.ogg b/sound/announcer/vox_fem/open.ogg similarity index 100% rename from sound/vox_fem/open.ogg rename to sound/announcer/vox_fem/open.ogg diff --git a/sound/vox_fem/opened.ogg b/sound/announcer/vox_fem/opened.ogg similarity index 100% rename from sound/vox_fem/opened.ogg rename to sound/announcer/vox_fem/opened.ogg diff --git a/sound/vox_fem/opening.ogg b/sound/announcer/vox_fem/opening.ogg similarity index 100% rename from sound/vox_fem/opening.ogg rename to sound/announcer/vox_fem/opening.ogg diff --git a/sound/vox_fem/operating.ogg b/sound/announcer/vox_fem/operating.ogg similarity index 100% rename from sound/vox_fem/operating.ogg rename to sound/announcer/vox_fem/operating.ogg diff --git a/sound/vox_fem/operations.ogg b/sound/announcer/vox_fem/operations.ogg similarity index 100% rename from sound/vox_fem/operations.ogg rename to sound/announcer/vox_fem/operations.ogg diff --git a/sound/vox_fem/operative.ogg b/sound/announcer/vox_fem/operative.ogg similarity index 100% rename from sound/vox_fem/operative.ogg rename to sound/announcer/vox_fem/operative.ogg diff --git a/sound/vox_fem/option.ogg b/sound/announcer/vox_fem/option.ogg similarity index 100% rename from sound/vox_fem/option.ogg rename to sound/announcer/vox_fem/option.ogg diff --git a/sound/vox_fem/or.ogg b/sound/announcer/vox_fem/or.ogg similarity index 100% rename from sound/vox_fem/or.ogg rename to sound/announcer/vox_fem/or.ogg diff --git a/sound/vox_fem/order.ogg b/sound/announcer/vox_fem/order.ogg similarity index 100% rename from sound/vox_fem/order.ogg rename to sound/announcer/vox_fem/order.ogg diff --git a/sound/vox_fem/ordered.ogg b/sound/announcer/vox_fem/ordered.ogg similarity index 100% rename from sound/vox_fem/ordered.ogg rename to sound/announcer/vox_fem/ordered.ogg diff --git a/sound/vox_fem/ordering.ogg b/sound/announcer/vox_fem/ordering.ogg similarity index 100% rename from sound/vox_fem/ordering.ogg rename to sound/announcer/vox_fem/ordering.ogg diff --git a/sound/vox_fem/organic.ogg b/sound/announcer/vox_fem/organic.ogg similarity index 100% rename from sound/vox_fem/organic.ogg rename to sound/announcer/vox_fem/organic.ogg diff --git a/sound/vox_fem/oscar.ogg b/sound/announcer/vox_fem/oscar.ogg similarity index 100% rename from sound/vox_fem/oscar.ogg rename to sound/announcer/vox_fem/oscar.ogg diff --git a/sound/vox_fem/out.ogg b/sound/announcer/vox_fem/out.ogg similarity index 100% rename from sound/vox_fem/out.ogg rename to sound/announcer/vox_fem/out.ogg diff --git a/sound/vox_fem/output.ogg b/sound/announcer/vox_fem/output.ogg similarity index 100% rename from sound/vox_fem/output.ogg rename to sound/announcer/vox_fem/output.ogg diff --git a/sound/vox_fem/outside.ogg b/sound/announcer/vox_fem/outside.ogg similarity index 100% rename from sound/vox_fem/outside.ogg rename to sound/announcer/vox_fem/outside.ogg diff --git a/sound/vox_fem/over.ogg b/sound/announcer/vox_fem/over.ogg similarity index 100% rename from sound/vox_fem/over.ogg rename to sound/announcer/vox_fem/over.ogg diff --git a/sound/vox_fem/overload.ogg b/sound/announcer/vox_fem/overload.ogg similarity index 100% rename from sound/vox_fem/overload.ogg rename to sound/announcer/vox_fem/overload.ogg diff --git a/sound/vox_fem/override.ogg b/sound/announcer/vox_fem/override.ogg similarity index 100% rename from sound/vox_fem/override.ogg rename to sound/announcer/vox_fem/override.ogg diff --git a/sound/vox_fem/own.ogg b/sound/announcer/vox_fem/own.ogg similarity index 100% rename from sound/vox_fem/own.ogg rename to sound/announcer/vox_fem/own.ogg diff --git a/sound/vox_fem/oxygen.ogg b/sound/announcer/vox_fem/oxygen.ogg similarity index 100% rename from sound/vox_fem/oxygen.ogg rename to sound/announcer/vox_fem/oxygen.ogg diff --git a/sound/vox_fem/p.ogg b/sound/announcer/vox_fem/p.ogg similarity index 100% rename from sound/vox_fem/p.ogg rename to sound/announcer/vox_fem/p.ogg diff --git a/sound/vox_fem/pacification.ogg b/sound/announcer/vox_fem/pacification.ogg similarity index 100% rename from sound/vox_fem/pacification.ogg rename to sound/announcer/vox_fem/pacification.ogg diff --git a/sound/vox_fem/pacify.ogg b/sound/announcer/vox_fem/pacify.ogg similarity index 100% rename from sound/vox_fem/pacify.ogg rename to sound/announcer/vox_fem/pacify.ogg diff --git a/sound/vox_fem/pain.ogg b/sound/announcer/vox_fem/pain.ogg similarity index 100% rename from sound/vox_fem/pain.ogg rename to sound/announcer/vox_fem/pain.ogg diff --git a/sound/vox_fem/pal.ogg b/sound/announcer/vox_fem/pal.ogg similarity index 100% rename from sound/vox_fem/pal.ogg rename to sound/announcer/vox_fem/pal.ogg diff --git a/sound/vox_fem/panel.ogg b/sound/announcer/vox_fem/panel.ogg similarity index 100% rename from sound/vox_fem/panel.ogg rename to sound/announcer/vox_fem/panel.ogg diff --git a/sound/vox_fem/panting.ogg b/sound/announcer/vox_fem/panting.ogg similarity index 100% rename from sound/vox_fem/panting.ogg rename to sound/announcer/vox_fem/panting.ogg diff --git a/sound/vox_fem/pathetic.ogg b/sound/announcer/vox_fem/pathetic.ogg similarity index 100% rename from sound/vox_fem/pathetic.ogg rename to sound/announcer/vox_fem/pathetic.ogg diff --git a/sound/vox_fem/pda.ogg b/sound/announcer/vox_fem/pda.ogg similarity index 100% rename from sound/vox_fem/pda.ogg rename to sound/announcer/vox_fem/pda.ogg diff --git a/sound/vox_fem/percent.ogg b/sound/announcer/vox_fem/percent.ogg similarity index 100% rename from sound/vox_fem/percent.ogg rename to sound/announcer/vox_fem/percent.ogg diff --git a/sound/vox_fem/perfect.ogg b/sound/announcer/vox_fem/perfect.ogg similarity index 100% rename from sound/vox_fem/perfect.ogg rename to sound/announcer/vox_fem/perfect.ogg diff --git a/sound/vox_fem/perhaps.ogg b/sound/announcer/vox_fem/perhaps.ogg similarity index 100% rename from sound/vox_fem/perhaps.ogg rename to sound/announcer/vox_fem/perhaps.ogg diff --git a/sound/vox_fem/perimeter.ogg b/sound/announcer/vox_fem/perimeter.ogg similarity index 100% rename from sound/vox_fem/perimeter.ogg rename to sound/announcer/vox_fem/perimeter.ogg diff --git a/sound/vox_fem/permitted.ogg b/sound/announcer/vox_fem/permitted.ogg similarity index 100% rename from sound/vox_fem/permitted.ogg rename to sound/announcer/vox_fem/permitted.ogg diff --git a/sound/vox_fem/personal.ogg b/sound/announcer/vox_fem/personal.ogg similarity index 100% rename from sound/vox_fem/personal.ogg rename to sound/announcer/vox_fem/personal.ogg diff --git a/sound/vox_fem/personnel.ogg b/sound/announcer/vox_fem/personnel.ogg similarity index 100% rename from sound/vox_fem/personnel.ogg rename to sound/announcer/vox_fem/personnel.ogg diff --git a/sound/vox_fem/pipe.ogg b/sound/announcer/vox_fem/pipe.ogg similarity index 100% rename from sound/vox_fem/pipe.ogg rename to sound/announcer/vox_fem/pipe.ogg diff --git a/sound/vox_fem/piping.ogg b/sound/announcer/vox_fem/piping.ogg similarity index 100% rename from sound/vox_fem/piping.ogg rename to sound/announcer/vox_fem/piping.ogg diff --git a/sound/vox_fem/piss.ogg b/sound/announcer/vox_fem/piss.ogg similarity index 100% rename from sound/vox_fem/piss.ogg rename to sound/announcer/vox_fem/piss.ogg diff --git a/sound/vox_fem/plant.ogg b/sound/announcer/vox_fem/plant.ogg similarity index 100% rename from sound/vox_fem/plant.ogg rename to sound/announcer/vox_fem/plant.ogg diff --git a/sound/vox_fem/plasma.ogg b/sound/announcer/vox_fem/plasma.ogg similarity index 100% rename from sound/vox_fem/plasma.ogg rename to sound/announcer/vox_fem/plasma.ogg diff --git a/sound/vox_fem/plasmaman.ogg b/sound/announcer/vox_fem/plasmaman.ogg similarity index 100% rename from sound/vox_fem/plasmaman.ogg rename to sound/announcer/vox_fem/plasmaman.ogg diff --git a/sound/vox_fem/platform.ogg b/sound/announcer/vox_fem/platform.ogg similarity index 100% rename from sound/vox_fem/platform.ogg rename to sound/announcer/vox_fem/platform.ogg diff --git a/sound/vox_fem/plating.ogg b/sound/announcer/vox_fem/plating.ogg similarity index 100% rename from sound/vox_fem/plating.ogg rename to sound/announcer/vox_fem/plating.ogg diff --git a/sound/vox_fem/plausible.ogg b/sound/announcer/vox_fem/plausible.ogg similarity index 100% rename from sound/vox_fem/plausible.ogg rename to sound/announcer/vox_fem/plausible.ogg diff --git a/sound/vox_fem/please.ogg b/sound/announcer/vox_fem/please.ogg similarity index 100% rename from sound/vox_fem/please.ogg rename to sound/announcer/vox_fem/please.ogg diff --git a/sound/vox_fem/pluoxium.ogg b/sound/announcer/vox_fem/pluoxium.ogg similarity index 100% rename from sound/vox_fem/pluoxium.ogg rename to sound/announcer/vox_fem/pluoxium.ogg diff --git a/sound/vox_fem/point.ogg b/sound/announcer/vox_fem/point.ogg similarity index 100% rename from sound/vox_fem/point.ogg rename to sound/announcer/vox_fem/point.ogg diff --git a/sound/vox_fem/port.ogg b/sound/announcer/vox_fem/port.ogg similarity index 100% rename from sound/vox_fem/port.ogg rename to sound/announcer/vox_fem/port.ogg diff --git a/sound/vox_fem/portal.ogg b/sound/announcer/vox_fem/portal.ogg similarity index 100% rename from sound/vox_fem/portal.ogg rename to sound/announcer/vox_fem/portal.ogg diff --git a/sound/vox_fem/portion.ogg b/sound/announcer/vox_fem/portion.ogg similarity index 100% rename from sound/vox_fem/portion.ogg rename to sound/announcer/vox_fem/portion.ogg diff --git a/sound/vox_fem/possible.ogg b/sound/announcer/vox_fem/possible.ogg similarity index 100% rename from sound/vox_fem/possible.ogg rename to sound/announcer/vox_fem/possible.ogg diff --git a/sound/vox_fem/power.ogg b/sound/announcer/vox_fem/power.ogg similarity index 100% rename from sound/vox_fem/power.ogg rename to sound/announcer/vox_fem/power.ogg diff --git a/sound/vox_fem/powered.ogg b/sound/announcer/vox_fem/powered.ogg similarity index 100% rename from sound/vox_fem/powered.ogg rename to sound/announcer/vox_fem/powered.ogg diff --git a/sound/vox_fem/powering.ogg b/sound/announcer/vox_fem/powering.ogg similarity index 100% rename from sound/vox_fem/powering.ogg rename to sound/announcer/vox_fem/powering.ogg diff --git a/sound/vox_fem/premature.ogg b/sound/announcer/vox_fem/premature.ogg similarity index 100% rename from sound/vox_fem/premature.ogg rename to sound/announcer/vox_fem/premature.ogg diff --git a/sound/vox_fem/prematurely.ogg b/sound/announcer/vox_fem/prematurely.ogg similarity index 100% rename from sound/vox_fem/prematurely.ogg rename to sound/announcer/vox_fem/prematurely.ogg diff --git a/sound/vox_fem/presence.ogg b/sound/announcer/vox_fem/presence.ogg similarity index 100% rename from sound/vox_fem/presence.ogg rename to sound/announcer/vox_fem/presence.ogg diff --git a/sound/vox_fem/present.ogg b/sound/announcer/vox_fem/present.ogg similarity index 100% rename from sound/vox_fem/present.ogg rename to sound/announcer/vox_fem/present.ogg diff --git a/sound/vox_fem/presents.ogg b/sound/announcer/vox_fem/presents.ogg similarity index 100% rename from sound/vox_fem/presents.ogg rename to sound/announcer/vox_fem/presents.ogg diff --git a/sound/vox_fem/press.ogg b/sound/announcer/vox_fem/press.ogg similarity index 100% rename from sound/vox_fem/press.ogg rename to sound/announcer/vox_fem/press.ogg diff --git a/sound/vox_fem/pressure.ogg b/sound/announcer/vox_fem/pressure.ogg similarity index 100% rename from sound/vox_fem/pressure.ogg rename to sound/announcer/vox_fem/pressure.ogg diff --git a/sound/vox_fem/primary.ogg b/sound/announcer/vox_fem/primary.ogg similarity index 100% rename from sound/vox_fem/primary.ogg rename to sound/announcer/vox_fem/primary.ogg diff --git a/sound/vox_fem/priority.ogg b/sound/announcer/vox_fem/priority.ogg similarity index 100% rename from sound/vox_fem/priority.ogg rename to sound/announcer/vox_fem/priority.ogg diff --git a/sound/vox_fem/prison.ogg b/sound/announcer/vox_fem/prison.ogg similarity index 100% rename from sound/vox_fem/prison.ogg rename to sound/announcer/vox_fem/prison.ogg diff --git a/sound/vox_fem/prisoner.ogg b/sound/announcer/vox_fem/prisoner.ogg similarity index 100% rename from sound/vox_fem/prisoner.ogg rename to sound/announcer/vox_fem/prisoner.ogg diff --git a/sound/vox_fem/proceed.ogg b/sound/announcer/vox_fem/proceed.ogg similarity index 100% rename from sound/vox_fem/proceed.ogg rename to sound/announcer/vox_fem/proceed.ogg diff --git a/sound/vox_fem/processing.ogg b/sound/announcer/vox_fem/processing.ogg similarity index 100% rename from sound/vox_fem/processing.ogg rename to sound/announcer/vox_fem/processing.ogg diff --git a/sound/vox_fem/progress.ogg b/sound/announcer/vox_fem/progress.ogg similarity index 100% rename from sound/vox_fem/progress.ogg rename to sound/announcer/vox_fem/progress.ogg diff --git a/sound/vox_fem/projectile.ogg b/sound/announcer/vox_fem/projectile.ogg similarity index 100% rename from sound/vox_fem/projectile.ogg rename to sound/announcer/vox_fem/projectile.ogg diff --git a/sound/vox_fem/proper.ogg b/sound/announcer/vox_fem/proper.ogg similarity index 100% rename from sound/vox_fem/proper.ogg rename to sound/announcer/vox_fem/proper.ogg diff --git a/sound/vox_fem/propulsion.ogg b/sound/announcer/vox_fem/propulsion.ogg similarity index 100% rename from sound/vox_fem/propulsion.ogg rename to sound/announcer/vox_fem/propulsion.ogg diff --git a/sound/vox_fem/prosecute.ogg b/sound/announcer/vox_fem/prosecute.ogg similarity index 100% rename from sound/vox_fem/prosecute.ogg rename to sound/announcer/vox_fem/prosecute.ogg diff --git a/sound/vox_fem/protect.ogg b/sound/announcer/vox_fem/protect.ogg similarity index 100% rename from sound/vox_fem/protect.ogg rename to sound/announcer/vox_fem/protect.ogg diff --git a/sound/vox_fem/protected.ogg b/sound/announcer/vox_fem/protected.ogg similarity index 100% rename from sound/vox_fem/protected.ogg rename to sound/announcer/vox_fem/protected.ogg diff --git a/sound/vox_fem/protection.ogg b/sound/announcer/vox_fem/protection.ogg similarity index 100% rename from sound/vox_fem/protection.ogg rename to sound/announcer/vox_fem/protection.ogg diff --git a/sound/vox_fem/protective.ogg b/sound/announcer/vox_fem/protective.ogg similarity index 100% rename from sound/vox_fem/protective.ogg rename to sound/announcer/vox_fem/protective.ogg diff --git a/sound/vox_fem/proto-nitrate.ogg b/sound/announcer/vox_fem/proto-nitrate.ogg similarity index 100% rename from sound/vox_fem/proto-nitrate.ogg rename to sound/announcer/vox_fem/proto-nitrate.ogg diff --git a/sound/vox_fem/pull.ogg b/sound/announcer/vox_fem/pull.ogg similarity index 100% rename from sound/vox_fem/pull.ogg rename to sound/announcer/vox_fem/pull.ogg diff --git a/sound/vox_fem/pulled.ogg b/sound/announcer/vox_fem/pulled.ogg similarity index 100% rename from sound/vox_fem/pulled.ogg rename to sound/announcer/vox_fem/pulled.ogg diff --git a/sound/vox_fem/pulling.ogg b/sound/announcer/vox_fem/pulling.ogg similarity index 100% rename from sound/vox_fem/pulling.ogg rename to sound/announcer/vox_fem/pulling.ogg diff --git a/sound/vox_fem/pump.ogg b/sound/announcer/vox_fem/pump.ogg similarity index 100% rename from sound/vox_fem/pump.ogg rename to sound/announcer/vox_fem/pump.ogg diff --git a/sound/vox_fem/pumps.ogg b/sound/announcer/vox_fem/pumps.ogg similarity index 100% rename from sound/vox_fem/pumps.ogg rename to sound/announcer/vox_fem/pumps.ogg diff --git a/sound/vox_fem/push.ogg b/sound/announcer/vox_fem/push.ogg similarity index 100% rename from sound/vox_fem/push.ogg rename to sound/announcer/vox_fem/push.ogg diff --git a/sound/vox_fem/put.ogg b/sound/announcer/vox_fem/put.ogg similarity index 100% rename from sound/vox_fem/put.ogg rename to sound/announcer/vox_fem/put.ogg diff --git a/sound/vox_fem/q.ogg b/sound/announcer/vox_fem/q.ogg similarity index 100% rename from sound/vox_fem/q.ogg rename to sound/announcer/vox_fem/q.ogg diff --git a/sound/vox_fem/quantum.ogg b/sound/announcer/vox_fem/quantum.ogg similarity index 100% rename from sound/vox_fem/quantum.ogg rename to sound/announcer/vox_fem/quantum.ogg diff --git a/sound/vox_fem/quarantine.ogg b/sound/announcer/vox_fem/quarantine.ogg similarity index 100% rename from sound/vox_fem/quarantine.ogg rename to sound/announcer/vox_fem/quarantine.ogg diff --git a/sound/vox_fem/quartermaster.ogg b/sound/announcer/vox_fem/quartermaster.ogg similarity index 100% rename from sound/vox_fem/quartermaster.ogg rename to sound/announcer/vox_fem/quartermaster.ogg diff --git a/sound/vox_fem/quebec.ogg b/sound/announcer/vox_fem/quebec.ogg similarity index 100% rename from sound/vox_fem/quebec.ogg rename to sound/announcer/vox_fem/quebec.ogg diff --git a/sound/vox_fem/queen.ogg b/sound/announcer/vox_fem/queen.ogg similarity index 100% rename from sound/vox_fem/queen.ogg rename to sound/announcer/vox_fem/queen.ogg diff --git a/sound/vox_fem/question.ogg b/sound/announcer/vox_fem/question.ogg similarity index 100% rename from sound/vox_fem/question.ogg rename to sound/announcer/vox_fem/question.ogg diff --git a/sound/vox_fem/questionable.ogg b/sound/announcer/vox_fem/questionable.ogg similarity index 100% rename from sound/vox_fem/questionable.ogg rename to sound/announcer/vox_fem/questionable.ogg diff --git a/sound/vox_fem/questioning.ogg b/sound/announcer/vox_fem/questioning.ogg similarity index 100% rename from sound/vox_fem/questioning.ogg rename to sound/announcer/vox_fem/questioning.ogg diff --git a/sound/vox_fem/quick.ogg b/sound/announcer/vox_fem/quick.ogg similarity index 100% rename from sound/vox_fem/quick.ogg rename to sound/announcer/vox_fem/quick.ogg diff --git a/sound/vox_fem/quit.ogg b/sound/announcer/vox_fem/quit.ogg similarity index 100% rename from sound/vox_fem/quit.ogg rename to sound/announcer/vox_fem/quit.ogg diff --git a/sound/vox_fem/r.ogg b/sound/announcer/vox_fem/r.ogg similarity index 100% rename from sound/vox_fem/r.ogg rename to sound/announcer/vox_fem/r.ogg diff --git a/sound/vox_fem/radiation.ogg b/sound/announcer/vox_fem/radiation.ogg similarity index 100% rename from sound/vox_fem/radiation.ogg rename to sound/announcer/vox_fem/radiation.ogg diff --git a/sound/vox_fem/radioactive.ogg b/sound/announcer/vox_fem/radioactive.ogg similarity index 100% rename from sound/vox_fem/radioactive.ogg rename to sound/announcer/vox_fem/radioactive.ogg diff --git a/sound/vox_fem/rads.ogg b/sound/announcer/vox_fem/rads.ogg similarity index 100% rename from sound/vox_fem/rads.ogg rename to sound/announcer/vox_fem/rads.ogg diff --git a/sound/vox_fem/raider.ogg b/sound/announcer/vox_fem/raider.ogg similarity index 100% rename from sound/vox_fem/raider.ogg rename to sound/announcer/vox_fem/raider.ogg diff --git a/sound/vox_fem/raiders.ogg b/sound/announcer/vox_fem/raiders.ogg similarity index 100% rename from sound/vox_fem/raiders.ogg rename to sound/announcer/vox_fem/raiders.ogg diff --git a/sound/vox_fem/rapid.ogg b/sound/announcer/vox_fem/rapid.ogg similarity index 100% rename from sound/vox_fem/rapid.ogg rename to sound/announcer/vox_fem/rapid.ogg diff --git a/sound/vox_fem/reach.ogg b/sound/announcer/vox_fem/reach.ogg similarity index 100% rename from sound/vox_fem/reach.ogg rename to sound/announcer/vox_fem/reach.ogg diff --git a/sound/vox_fem/reached.ogg b/sound/announcer/vox_fem/reached.ogg similarity index 100% rename from sound/vox_fem/reached.ogg rename to sound/announcer/vox_fem/reached.ogg diff --git a/sound/vox_fem/reactor.ogg b/sound/announcer/vox_fem/reactor.ogg similarity index 100% rename from sound/vox_fem/reactor.ogg rename to sound/announcer/vox_fem/reactor.ogg diff --git a/sound/vox_fem/red.ogg b/sound/announcer/vox_fem/red.ogg similarity index 100% rename from sound/vox_fem/red.ogg rename to sound/announcer/vox_fem/red.ogg diff --git a/sound/vox_fem/relay.ogg b/sound/announcer/vox_fem/relay.ogg similarity index 100% rename from sound/vox_fem/relay.ogg rename to sound/announcer/vox_fem/relay.ogg diff --git a/sound/vox_fem/release.ogg b/sound/announcer/vox_fem/release.ogg similarity index 100% rename from sound/vox_fem/release.ogg rename to sound/announcer/vox_fem/release.ogg diff --git a/sound/vox_fem/released.ogg b/sound/announcer/vox_fem/released.ogg similarity index 100% rename from sound/vox_fem/released.ogg rename to sound/announcer/vox_fem/released.ogg diff --git a/sound/vox_fem/releasing.ogg b/sound/announcer/vox_fem/releasing.ogg similarity index 100% rename from sound/vox_fem/releasing.ogg rename to sound/announcer/vox_fem/releasing.ogg diff --git a/sound/vox_fem/remaining.ogg b/sound/announcer/vox_fem/remaining.ogg similarity index 100% rename from sound/vox_fem/remaining.ogg rename to sound/announcer/vox_fem/remaining.ogg diff --git a/sound/vox_fem/removal.ogg b/sound/announcer/vox_fem/removal.ogg similarity index 100% rename from sound/vox_fem/removal.ogg rename to sound/announcer/vox_fem/removal.ogg diff --git a/sound/vox_fem/remove.ogg b/sound/announcer/vox_fem/remove.ogg similarity index 100% rename from sound/vox_fem/remove.ogg rename to sound/announcer/vox_fem/remove.ogg diff --git a/sound/vox_fem/removed.ogg b/sound/announcer/vox_fem/removed.ogg similarity index 100% rename from sound/vox_fem/removed.ogg rename to sound/announcer/vox_fem/removed.ogg diff --git a/sound/vox_fem/removing.ogg b/sound/announcer/vox_fem/removing.ogg similarity index 100% rename from sound/vox_fem/removing.ogg rename to sound/announcer/vox_fem/removing.ogg diff --git a/sound/vox_fem/renegade.ogg b/sound/announcer/vox_fem/renegade.ogg similarity index 100% rename from sound/vox_fem/renegade.ogg rename to sound/announcer/vox_fem/renegade.ogg diff --git a/sound/vox_fem/repair.ogg b/sound/announcer/vox_fem/repair.ogg similarity index 100% rename from sound/vox_fem/repair.ogg rename to sound/announcer/vox_fem/repair.ogg diff --git a/sound/vox_fem/report.ogg b/sound/announcer/vox_fem/report.ogg similarity index 100% rename from sound/vox_fem/report.ogg rename to sound/announcer/vox_fem/report.ogg diff --git a/sound/vox_fem/reports.ogg b/sound/announcer/vox_fem/reports.ogg similarity index 100% rename from sound/vox_fem/reports.ogg rename to sound/announcer/vox_fem/reports.ogg diff --git a/sound/vox_fem/request.ogg b/sound/announcer/vox_fem/request.ogg similarity index 100% rename from sound/vox_fem/request.ogg rename to sound/announcer/vox_fem/request.ogg diff --git a/sound/vox_fem/requested.ogg b/sound/announcer/vox_fem/requested.ogg similarity index 100% rename from sound/vox_fem/requested.ogg rename to sound/announcer/vox_fem/requested.ogg diff --git a/sound/vox_fem/requesting.ogg b/sound/announcer/vox_fem/requesting.ogg similarity index 100% rename from sound/vox_fem/requesting.ogg rename to sound/announcer/vox_fem/requesting.ogg diff --git a/sound/vox_fem/require.ogg b/sound/announcer/vox_fem/require.ogg similarity index 100% rename from sound/vox_fem/require.ogg rename to sound/announcer/vox_fem/require.ogg diff --git a/sound/vox_fem/required.ogg b/sound/announcer/vox_fem/required.ogg similarity index 100% rename from sound/vox_fem/required.ogg rename to sound/announcer/vox_fem/required.ogg diff --git a/sound/vox_fem/research.ogg b/sound/announcer/vox_fem/research.ogg similarity index 100% rename from sound/vox_fem/research.ogg rename to sound/announcer/vox_fem/research.ogg diff --git a/sound/vox_fem/resevoir.ogg b/sound/announcer/vox_fem/resevoir.ogg similarity index 100% rename from sound/vox_fem/resevoir.ogg rename to sound/announcer/vox_fem/resevoir.ogg diff --git a/sound/vox_fem/resistance.ogg b/sound/announcer/vox_fem/resistance.ogg similarity index 100% rename from sound/vox_fem/resistance.ogg rename to sound/announcer/vox_fem/resistance.ogg diff --git a/sound/vox_fem/resistant.ogg b/sound/announcer/vox_fem/resistant.ogg similarity index 100% rename from sound/vox_fem/resistant.ogg rename to sound/announcer/vox_fem/resistant.ogg diff --git a/sound/vox_fem/resisting.ogg b/sound/announcer/vox_fem/resisting.ogg similarity index 100% rename from sound/vox_fem/resisting.ogg rename to sound/announcer/vox_fem/resisting.ogg diff --git a/sound/vox_fem/resonance.ogg b/sound/announcer/vox_fem/resonance.ogg similarity index 100% rename from sound/vox_fem/resonance.ogg rename to sound/announcer/vox_fem/resonance.ogg diff --git a/sound/vox_fem/rest.ogg b/sound/announcer/vox_fem/rest.ogg similarity index 100% rename from sound/vox_fem/rest.ogg rename to sound/announcer/vox_fem/rest.ogg diff --git a/sound/vox_fem/restoration.ogg b/sound/announcer/vox_fem/restoration.ogg similarity index 100% rename from sound/vox_fem/restoration.ogg rename to sound/announcer/vox_fem/restoration.ogg diff --git a/sound/vox_fem/revolution.ogg b/sound/announcer/vox_fem/revolution.ogg similarity index 100% rename from sound/vox_fem/revolution.ogg rename to sound/announcer/vox_fem/revolution.ogg diff --git a/sound/vox_fem/revolutionary.ogg b/sound/announcer/vox_fem/revolutionary.ogg similarity index 100% rename from sound/vox_fem/revolutionary.ogg rename to sound/announcer/vox_fem/revolutionary.ogg diff --git a/sound/vox_fem/right.ogg b/sound/announcer/vox_fem/right.ogg similarity index 100% rename from sound/vox_fem/right.ogg rename to sound/announcer/vox_fem/right.ogg diff --git a/sound/vox_fem/riot.ogg b/sound/announcer/vox_fem/riot.ogg similarity index 100% rename from sound/vox_fem/riot.ogg rename to sound/announcer/vox_fem/riot.ogg diff --git a/sound/vox_fem/roboticist.ogg b/sound/announcer/vox_fem/roboticist.ogg similarity index 100% rename from sound/vox_fem/roboticist.ogg rename to sound/announcer/vox_fem/roboticist.ogg diff --git a/sound/vox_fem/rocket.ogg b/sound/announcer/vox_fem/rocket.ogg similarity index 100% rename from sound/vox_fem/rocket.ogg rename to sound/announcer/vox_fem/rocket.ogg diff --git a/sound/vox_fem/roger.ogg b/sound/announcer/vox_fem/roger.ogg similarity index 100% rename from sound/vox_fem/roger.ogg rename to sound/announcer/vox_fem/roger.ogg diff --git a/sound/vox_fem/rogue.ogg b/sound/announcer/vox_fem/rogue.ogg similarity index 100% rename from sound/vox_fem/rogue.ogg rename to sound/announcer/vox_fem/rogue.ogg diff --git a/sound/vox_fem/romeo.ogg b/sound/announcer/vox_fem/romeo.ogg similarity index 100% rename from sound/vox_fem/romeo.ogg rename to sound/announcer/vox_fem/romeo.ogg diff --git a/sound/vox_fem/room.ogg b/sound/announcer/vox_fem/room.ogg similarity index 100% rename from sound/vox_fem/room.ogg rename to sound/announcer/vox_fem/room.ogg diff --git a/sound/vox_fem/round.ogg b/sound/announcer/vox_fem/round.ogg similarity index 100% rename from sound/vox_fem/round.ogg rename to sound/announcer/vox_fem/round.ogg diff --git a/sound/vox_fem/run.ogg b/sound/announcer/vox_fem/run.ogg similarity index 100% rename from sound/vox_fem/run.ogg rename to sound/announcer/vox_fem/run.ogg diff --git a/sound/vox_fem/rune.ogg b/sound/announcer/vox_fem/rune.ogg similarity index 100% rename from sound/vox_fem/rune.ogg rename to sound/announcer/vox_fem/rune.ogg diff --git a/sound/vox_fem/runtime.ogg b/sound/announcer/vox_fem/runtime.ogg similarity index 100% rename from sound/vox_fem/runtime.ogg rename to sound/announcer/vox_fem/runtime.ogg diff --git a/sound/vox_fem/s.ogg b/sound/announcer/vox_fem/s.ogg similarity index 100% rename from sound/vox_fem/s.ogg rename to sound/announcer/vox_fem/s.ogg diff --git a/sound/vox_fem/sabotage.ogg b/sound/announcer/vox_fem/sabotage.ogg similarity index 100% rename from sound/vox_fem/sabotage.ogg rename to sound/announcer/vox_fem/sabotage.ogg diff --git a/sound/vox_fem/sabotaged.ogg b/sound/announcer/vox_fem/sabotaged.ogg similarity index 100% rename from sound/vox_fem/sabotaged.ogg rename to sound/announcer/vox_fem/sabotaged.ogg diff --git a/sound/vox_fem/sabotaging.ogg b/sound/announcer/vox_fem/sabotaging.ogg similarity index 100% rename from sound/vox_fem/sabotaging.ogg rename to sound/announcer/vox_fem/sabotaging.ogg diff --git a/sound/vox_fem/safe.ogg b/sound/announcer/vox_fem/safe.ogg similarity index 100% rename from sound/vox_fem/safe.ogg rename to sound/announcer/vox_fem/safe.ogg diff --git a/sound/vox_fem/safety.ogg b/sound/announcer/vox_fem/safety.ogg similarity index 100% rename from sound/vox_fem/safety.ogg rename to sound/announcer/vox_fem/safety.ogg diff --git a/sound/vox_fem/sairhorn.ogg b/sound/announcer/vox_fem/sairhorn.ogg similarity index 100% rename from sound/vox_fem/sairhorn.ogg rename to sound/announcer/vox_fem/sairhorn.ogg diff --git a/sound/vox_fem/same.ogg b/sound/announcer/vox_fem/same.ogg similarity index 100% rename from sound/vox_fem/same.ogg rename to sound/announcer/vox_fem/same.ogg diff --git a/sound/vox_fem/sarah.ogg b/sound/announcer/vox_fem/sarah.ogg similarity index 100% rename from sound/vox_fem/sarah.ogg rename to sound/announcer/vox_fem/sarah.ogg diff --git a/sound/vox_fem/sargeant.ogg b/sound/announcer/vox_fem/sargeant.ogg similarity index 100% rename from sound/vox_fem/sargeant.ogg rename to sound/announcer/vox_fem/sargeant.ogg diff --git a/sound/vox_fem/satellite.ogg b/sound/announcer/vox_fem/satellite.ogg similarity index 100% rename from sound/vox_fem/satellite.ogg rename to sound/announcer/vox_fem/satellite.ogg diff --git a/sound/vox_fem/save.ogg b/sound/announcer/vox_fem/save.ogg similarity index 100% rename from sound/vox_fem/save.ogg rename to sound/announcer/vox_fem/save.ogg diff --git a/sound/vox_fem/saw.ogg b/sound/announcer/vox_fem/saw.ogg similarity index 100% rename from sound/vox_fem/saw.ogg rename to sound/announcer/vox_fem/saw.ogg diff --git a/sound/vox_fem/scan.ogg b/sound/announcer/vox_fem/scan.ogg similarity index 100% rename from sound/vox_fem/scan.ogg rename to sound/announcer/vox_fem/scan.ogg diff --git a/sound/vox_fem/scanned.ogg b/sound/announcer/vox_fem/scanned.ogg similarity index 100% rename from sound/vox_fem/scanned.ogg rename to sound/announcer/vox_fem/scanned.ogg diff --git a/sound/vox_fem/scanner.ogg b/sound/announcer/vox_fem/scanner.ogg similarity index 100% rename from sound/vox_fem/scanner.ogg rename to sound/announcer/vox_fem/scanner.ogg diff --git a/sound/vox_fem/scanners.ogg b/sound/announcer/vox_fem/scanners.ogg similarity index 100% rename from sound/vox_fem/scanners.ogg rename to sound/announcer/vox_fem/scanners.ogg diff --git a/sound/vox_fem/scanning.ogg b/sound/announcer/vox_fem/scanning.ogg similarity index 100% rename from sound/vox_fem/scanning.ogg rename to sound/announcer/vox_fem/scanning.ogg diff --git a/sound/vox_fem/scensor.ogg b/sound/announcer/vox_fem/scensor.ogg similarity index 100% rename from sound/vox_fem/scensor.ogg rename to sound/announcer/vox_fem/scensor.ogg diff --git a/sound/vox_fem/science.ogg b/sound/announcer/vox_fem/science.ogg similarity index 100% rename from sound/vox_fem/science.ogg rename to sound/announcer/vox_fem/science.ogg diff --git a/sound/vox_fem/scientist.ogg b/sound/announcer/vox_fem/scientist.ogg similarity index 100% rename from sound/vox_fem/scientist.ogg rename to sound/announcer/vox_fem/scientist.ogg diff --git a/sound/vox_fem/scream.ogg b/sound/announcer/vox_fem/scream.ogg similarity index 100% rename from sound/vox_fem/scream.ogg rename to sound/announcer/vox_fem/scream.ogg diff --git a/sound/vox_fem/screen.ogg b/sound/announcer/vox_fem/screen.ogg similarity index 100% rename from sound/vox_fem/screen.ogg rename to sound/announcer/vox_fem/screen.ogg diff --git a/sound/vox_fem/screw.ogg b/sound/announcer/vox_fem/screw.ogg similarity index 100% rename from sound/vox_fem/screw.ogg rename to sound/announcer/vox_fem/screw.ogg diff --git a/sound/vox_fem/search.ogg b/sound/announcer/vox_fem/search.ogg similarity index 100% rename from sound/vox_fem/search.ogg rename to sound/announcer/vox_fem/search.ogg diff --git a/sound/vox_fem/second.ogg b/sound/announcer/vox_fem/second.ogg similarity index 100% rename from sound/vox_fem/second.ogg rename to sound/announcer/vox_fem/second.ogg diff --git a/sound/vox_fem/secondary.ogg b/sound/announcer/vox_fem/secondary.ogg similarity index 100% rename from sound/vox_fem/secondary.ogg rename to sound/announcer/vox_fem/secondary.ogg diff --git a/sound/vox_fem/seconds.ogg b/sound/announcer/vox_fem/seconds.ogg similarity index 100% rename from sound/vox_fem/seconds.ogg rename to sound/announcer/vox_fem/seconds.ogg diff --git a/sound/vox_fem/section.ogg b/sound/announcer/vox_fem/section.ogg similarity index 100% rename from sound/vox_fem/section.ogg rename to sound/announcer/vox_fem/section.ogg diff --git a/sound/vox_fem/sector.ogg b/sound/announcer/vox_fem/sector.ogg similarity index 100% rename from sound/vox_fem/sector.ogg rename to sound/announcer/vox_fem/sector.ogg diff --git a/sound/vox_fem/secure.ogg b/sound/announcer/vox_fem/secure.ogg similarity index 100% rename from sound/vox_fem/secure.ogg rename to sound/announcer/vox_fem/secure.ogg diff --git a/sound/vox_fem/secured.ogg b/sound/announcer/vox_fem/secured.ogg similarity index 100% rename from sound/vox_fem/secured.ogg rename to sound/announcer/vox_fem/secured.ogg diff --git a/sound/vox_fem/security.ogg b/sound/announcer/vox_fem/security.ogg similarity index 100% rename from sound/vox_fem/security.ogg rename to sound/announcer/vox_fem/security.ogg diff --git a/sound/vox_fem/seen.ogg b/sound/announcer/vox_fem/seen.ogg similarity index 100% rename from sound/vox_fem/seen.ogg rename to sound/announcer/vox_fem/seen.ogg diff --git a/sound/vox_fem/select.ogg b/sound/announcer/vox_fem/select.ogg similarity index 100% rename from sound/vox_fem/select.ogg rename to sound/announcer/vox_fem/select.ogg diff --git a/sound/vox_fem/selected.ogg b/sound/announcer/vox_fem/selected.ogg similarity index 100% rename from sound/vox_fem/selected.ogg rename to sound/announcer/vox_fem/selected.ogg diff --git a/sound/vox_fem/self.ogg b/sound/announcer/vox_fem/self.ogg similarity index 100% rename from sound/vox_fem/self.ogg rename to sound/announcer/vox_fem/self.ogg diff --git a/sound/vox_fem/sensors.ogg b/sound/announcer/vox_fem/sensors.ogg similarity index 100% rename from sound/vox_fem/sensors.ogg rename to sound/announcer/vox_fem/sensors.ogg diff --git a/sound/vox_fem/server.ogg b/sound/announcer/vox_fem/server.ogg similarity index 100% rename from sound/vox_fem/server.ogg rename to sound/announcer/vox_fem/server.ogg diff --git a/sound/vox_fem/service.ogg b/sound/announcer/vox_fem/service.ogg similarity index 100% rename from sound/vox_fem/service.ogg rename to sound/announcer/vox_fem/service.ogg diff --git a/sound/vox_fem/set.ogg b/sound/announcer/vox_fem/set.ogg similarity index 100% rename from sound/vox_fem/set.ogg rename to sound/announcer/vox_fem/set.ogg diff --git a/sound/vox_fem/seven.ogg b/sound/announcer/vox_fem/seven.ogg similarity index 100% rename from sound/vox_fem/seven.ogg rename to sound/announcer/vox_fem/seven.ogg diff --git a/sound/vox_fem/seventeen.ogg b/sound/announcer/vox_fem/seventeen.ogg similarity index 100% rename from sound/vox_fem/seventeen.ogg rename to sound/announcer/vox_fem/seventeen.ogg diff --git a/sound/vox_fem/seventy.ogg b/sound/announcer/vox_fem/seventy.ogg similarity index 100% rename from sound/vox_fem/seventy.ogg rename to sound/announcer/vox_fem/seventy.ogg diff --git a/sound/vox_fem/sever.ogg b/sound/announcer/vox_fem/sever.ogg similarity index 100% rename from sound/vox_fem/sever.ogg rename to sound/announcer/vox_fem/sever.ogg diff --git a/sound/vox_fem/severe.ogg b/sound/announcer/vox_fem/severe.ogg similarity index 100% rename from sound/vox_fem/severe.ogg rename to sound/announcer/vox_fem/severe.ogg diff --git a/sound/vox_fem/severed.ogg b/sound/announcer/vox_fem/severed.ogg similarity index 100% rename from sound/vox_fem/severed.ogg rename to sound/announcer/vox_fem/severed.ogg diff --git a/sound/vox_fem/severing.ogg b/sound/announcer/vox_fem/severing.ogg similarity index 100% rename from sound/vox_fem/severing.ogg rename to sound/announcer/vox_fem/severing.ogg diff --git a/sound/vox_fem/sewage.ogg b/sound/announcer/vox_fem/sewage.ogg similarity index 100% rename from sound/vox_fem/sewage.ogg rename to sound/announcer/vox_fem/sewage.ogg diff --git a/sound/vox_fem/sewer.ogg b/sound/announcer/vox_fem/sewer.ogg similarity index 100% rename from sound/vox_fem/sewer.ogg rename to sound/announcer/vox_fem/sewer.ogg diff --git a/sound/vox_fem/shaft.ogg b/sound/announcer/vox_fem/shaft.ogg similarity index 100% rename from sound/vox_fem/shaft.ogg rename to sound/announcer/vox_fem/shaft.ogg diff --git a/sound/vox_fem/shame.ogg b/sound/announcer/vox_fem/shame.ogg similarity index 100% rename from sound/vox_fem/shame.ogg rename to sound/announcer/vox_fem/shame.ogg diff --git a/sound/vox_fem/shameful.ogg b/sound/announcer/vox_fem/shameful.ogg similarity index 100% rename from sound/vox_fem/shameful.ogg rename to sound/announcer/vox_fem/shameful.ogg diff --git a/sound/vox_fem/shameless.ogg b/sound/announcer/vox_fem/shameless.ogg similarity index 100% rename from sound/vox_fem/shameless.ogg rename to sound/announcer/vox_fem/shameless.ogg diff --git a/sound/vox_fem/shard.ogg b/sound/announcer/vox_fem/shard.ogg similarity index 100% rename from sound/vox_fem/shard.ogg rename to sound/announcer/vox_fem/shard.ogg diff --git a/sound/vox_fem/she.ogg b/sound/announcer/vox_fem/she.ogg similarity index 100% rename from sound/vox_fem/she.ogg rename to sound/announcer/vox_fem/she.ogg diff --git a/sound/vox_fem/shield.ogg b/sound/announcer/vox_fem/shield.ogg similarity index 100% rename from sound/vox_fem/shield.ogg rename to sound/announcer/vox_fem/shield.ogg diff --git a/sound/vox_fem/shift.ogg b/sound/announcer/vox_fem/shift.ogg similarity index 100% rename from sound/vox_fem/shift.ogg rename to sound/announcer/vox_fem/shift.ogg diff --git a/sound/vox_fem/shifts.ogg b/sound/announcer/vox_fem/shifts.ogg similarity index 100% rename from sound/vox_fem/shifts.ogg rename to sound/announcer/vox_fem/shifts.ogg diff --git a/sound/vox_fem/shipment.ogg b/sound/announcer/vox_fem/shipment.ogg similarity index 100% rename from sound/vox_fem/shipment.ogg rename to sound/announcer/vox_fem/shipment.ogg diff --git a/sound/vox_fem/shirt.ogg b/sound/announcer/vox_fem/shirt.ogg similarity index 100% rename from sound/vox_fem/shirt.ogg rename to sound/announcer/vox_fem/shirt.ogg diff --git a/sound/vox_fem/shit.ogg b/sound/announcer/vox_fem/shit.ogg similarity index 100% rename from sound/vox_fem/shit.ogg rename to sound/announcer/vox_fem/shit.ogg diff --git a/sound/vox_fem/shitlord.ogg b/sound/announcer/vox_fem/shitlord.ogg similarity index 100% rename from sound/vox_fem/shitlord.ogg rename to sound/announcer/vox_fem/shitlord.ogg diff --git a/sound/vox_fem/shits.ogg b/sound/announcer/vox_fem/shits.ogg similarity index 100% rename from sound/vox_fem/shits.ogg rename to sound/announcer/vox_fem/shits.ogg diff --git a/sound/vox_fem/shitting.ogg b/sound/announcer/vox_fem/shitting.ogg similarity index 100% rename from sound/vox_fem/shitting.ogg rename to sound/announcer/vox_fem/shitting.ogg diff --git a/sound/vox_fem/shock.ogg b/sound/announcer/vox_fem/shock.ogg similarity index 100% rename from sound/vox_fem/shock.ogg rename to sound/announcer/vox_fem/shock.ogg diff --git a/sound/vox_fem/shonk.ogg b/sound/announcer/vox_fem/shonk.ogg similarity index 100% rename from sound/vox_fem/shonk.ogg rename to sound/announcer/vox_fem/shonk.ogg diff --git a/sound/vox_fem/shoot.ogg b/sound/announcer/vox_fem/shoot.ogg similarity index 100% rename from sound/vox_fem/shoot.ogg rename to sound/announcer/vox_fem/shoot.ogg diff --git a/sound/vox_fem/shower.ogg b/sound/announcer/vox_fem/shower.ogg similarity index 100% rename from sound/vox_fem/shower.ogg rename to sound/announcer/vox_fem/shower.ogg diff --git a/sound/vox_fem/shut.ogg b/sound/announcer/vox_fem/shut.ogg similarity index 100% rename from sound/vox_fem/shut.ogg rename to sound/announcer/vox_fem/shut.ogg diff --git a/sound/vox_fem/shuttle.ogg b/sound/announcer/vox_fem/shuttle.ogg similarity index 100% rename from sound/vox_fem/shuttle.ogg rename to sound/announcer/vox_fem/shuttle.ogg diff --git a/sound/vox_fem/sick.ogg b/sound/announcer/vox_fem/sick.ogg similarity index 100% rename from sound/vox_fem/sick.ogg rename to sound/announcer/vox_fem/sick.ogg diff --git a/sound/vox_fem/side.ogg b/sound/announcer/vox_fem/side.ogg similarity index 100% rename from sound/vox_fem/side.ogg rename to sound/announcer/vox_fem/side.ogg diff --git a/sound/vox_fem/sides.ogg b/sound/announcer/vox_fem/sides.ogg similarity index 100% rename from sound/vox_fem/sides.ogg rename to sound/announcer/vox_fem/sides.ogg diff --git a/sound/vox_fem/sierra.ogg b/sound/announcer/vox_fem/sierra.ogg similarity index 100% rename from sound/vox_fem/sierra.ogg rename to sound/announcer/vox_fem/sierra.ogg diff --git a/sound/vox_fem/sight.ogg b/sound/announcer/vox_fem/sight.ogg similarity index 100% rename from sound/vox_fem/sight.ogg rename to sound/announcer/vox_fem/sight.ogg diff --git a/sound/vox_fem/silicon.ogg b/sound/announcer/vox_fem/silicon.ogg similarity index 100% rename from sound/vox_fem/silicon.ogg rename to sound/announcer/vox_fem/silicon.ogg diff --git a/sound/vox_fem/silo.ogg b/sound/announcer/vox_fem/silo.ogg similarity index 100% rename from sound/vox_fem/silo.ogg rename to sound/announcer/vox_fem/silo.ogg diff --git a/sound/vox_fem/single.ogg b/sound/announcer/vox_fem/single.ogg similarity index 100% rename from sound/vox_fem/single.ogg rename to sound/announcer/vox_fem/single.ogg diff --git a/sound/vox_fem/singularity.ogg b/sound/announcer/vox_fem/singularity.ogg similarity index 100% rename from sound/vox_fem/singularity.ogg rename to sound/announcer/vox_fem/singularity.ogg diff --git a/sound/vox_fem/siphon.ogg b/sound/announcer/vox_fem/siphon.ogg similarity index 100% rename from sound/vox_fem/siphon.ogg rename to sound/announcer/vox_fem/siphon.ogg diff --git a/sound/vox_fem/siphoning.ogg b/sound/announcer/vox_fem/siphoning.ogg similarity index 100% rename from sound/vox_fem/siphoning.ogg rename to sound/announcer/vox_fem/siphoning.ogg diff --git a/sound/vox_fem/six.ogg b/sound/announcer/vox_fem/six.ogg similarity index 100% rename from sound/vox_fem/six.ogg rename to sound/announcer/vox_fem/six.ogg diff --git a/sound/vox_fem/sixteen.ogg b/sound/announcer/vox_fem/sixteen.ogg similarity index 100% rename from sound/vox_fem/sixteen.ogg rename to sound/announcer/vox_fem/sixteen.ogg diff --git a/sound/vox_fem/sixty.ogg b/sound/announcer/vox_fem/sixty.ogg similarity index 100% rename from sound/vox_fem/sixty.ogg rename to sound/announcer/vox_fem/sixty.ogg diff --git a/sound/vox_fem/skeleton.ogg b/sound/announcer/vox_fem/skeleton.ogg similarity index 100% rename from sound/vox_fem/skeleton.ogg rename to sound/announcer/vox_fem/skeleton.ogg diff --git a/sound/vox_fem/slaughter.ogg b/sound/announcer/vox_fem/slaughter.ogg similarity index 100% rename from sound/vox_fem/slaughter.ogg rename to sound/announcer/vox_fem/slaughter.ogg diff --git a/sound/vox_fem/slime.ogg b/sound/announcer/vox_fem/slime.ogg similarity index 100% rename from sound/vox_fem/slime.ogg rename to sound/announcer/vox_fem/slime.ogg diff --git a/sound/vox_fem/slip.ogg b/sound/announcer/vox_fem/slip.ogg similarity index 100% rename from sound/vox_fem/slip.ogg rename to sound/announcer/vox_fem/slip.ogg diff --git a/sound/vox_fem/slippery.ogg b/sound/announcer/vox_fem/slippery.ogg similarity index 100% rename from sound/vox_fem/slippery.ogg rename to sound/announcer/vox_fem/slippery.ogg diff --git a/sound/vox_fem/slow.ogg b/sound/announcer/vox_fem/slow.ogg similarity index 100% rename from sound/vox_fem/slow.ogg rename to sound/announcer/vox_fem/slow.ogg diff --git a/sound/vox_fem/sm.ogg b/sound/announcer/vox_fem/sm.ogg similarity index 100% rename from sound/vox_fem/sm.ogg rename to sound/announcer/vox_fem/sm.ogg diff --git a/sound/vox_fem/small.ogg b/sound/announcer/vox_fem/small.ogg similarity index 100% rename from sound/vox_fem/small.ogg rename to sound/announcer/vox_fem/small.ogg diff --git a/sound/vox_fem/sockmuncher.ogg b/sound/announcer/vox_fem/sockmuncher.ogg similarity index 100% rename from sound/vox_fem/sockmuncher.ogg rename to sound/announcer/vox_fem/sockmuncher.ogg diff --git a/sound/vox_fem/soft.ogg b/sound/announcer/vox_fem/soft.ogg similarity index 100% rename from sound/vox_fem/soft.ogg rename to sound/announcer/vox_fem/soft.ogg diff --git a/sound/vox_fem/solar.ogg b/sound/announcer/vox_fem/solar.ogg similarity index 100% rename from sound/vox_fem/solar.ogg rename to sound/announcer/vox_fem/solar.ogg diff --git a/sound/vox_fem/solars.ogg b/sound/announcer/vox_fem/solars.ogg similarity index 100% rename from sound/vox_fem/solars.ogg rename to sound/announcer/vox_fem/solars.ogg diff --git a/sound/vox_fem/soldier.ogg b/sound/announcer/vox_fem/soldier.ogg similarity index 100% rename from sound/vox_fem/soldier.ogg rename to sound/announcer/vox_fem/soldier.ogg diff --git a/sound/vox_fem/some.ogg b/sound/announcer/vox_fem/some.ogg similarity index 100% rename from sound/vox_fem/some.ogg rename to sound/announcer/vox_fem/some.ogg diff --git a/sound/vox_fem/someone.ogg b/sound/announcer/vox_fem/someone.ogg similarity index 100% rename from sound/vox_fem/someone.ogg rename to sound/announcer/vox_fem/someone.ogg diff --git a/sound/vox_fem/something.ogg b/sound/announcer/vox_fem/something.ogg similarity index 100% rename from sound/vox_fem/something.ogg rename to sound/announcer/vox_fem/something.ogg diff --git a/sound/vox_fem/son.ogg b/sound/announcer/vox_fem/son.ogg similarity index 100% rename from sound/vox_fem/son.ogg rename to sound/announcer/vox_fem/son.ogg diff --git a/sound/vox_fem/sorry.ogg b/sound/announcer/vox_fem/sorry.ogg similarity index 100% rename from sound/vox_fem/sorry.ogg rename to sound/announcer/vox_fem/sorry.ogg diff --git a/sound/vox_fem/source.ogg b/sound/announcer/vox_fem/source.ogg similarity index 100% rename from sound/vox_fem/source.ogg rename to sound/announcer/vox_fem/source.ogg diff --git a/sound/vox_fem/south.ogg b/sound/announcer/vox_fem/south.ogg similarity index 100% rename from sound/vox_fem/south.ogg rename to sound/announcer/vox_fem/south.ogg diff --git a/sound/vox_fem/southeast.ogg b/sound/announcer/vox_fem/southeast.ogg similarity index 100% rename from sound/vox_fem/southeast.ogg rename to sound/announcer/vox_fem/southeast.ogg diff --git a/sound/vox_fem/southwest.ogg b/sound/announcer/vox_fem/southwest.ogg similarity index 100% rename from sound/vox_fem/southwest.ogg rename to sound/announcer/vox_fem/southwest.ogg diff --git a/sound/vox_fem/space.ogg b/sound/announcer/vox_fem/space.ogg similarity index 100% rename from sound/vox_fem/space.ogg rename to sound/announcer/vox_fem/space.ogg diff --git a/sound/vox_fem/special.ogg b/sound/announcer/vox_fem/special.ogg similarity index 100% rename from sound/vox_fem/special.ogg rename to sound/announcer/vox_fem/special.ogg diff --git a/sound/vox_fem/spew.ogg b/sound/announcer/vox_fem/spew.ogg similarity index 100% rename from sound/vox_fem/spew.ogg rename to sound/announcer/vox_fem/spew.ogg diff --git a/sound/vox_fem/squad.ogg b/sound/announcer/vox_fem/squad.ogg similarity index 100% rename from sound/vox_fem/squad.ogg rename to sound/announcer/vox_fem/squad.ogg diff --git a/sound/vox_fem/square.ogg b/sound/announcer/vox_fem/square.ogg similarity index 100% rename from sound/vox_fem/square.ogg rename to sound/announcer/vox_fem/square.ogg diff --git a/sound/vox_fem/ss13.ogg b/sound/announcer/vox_fem/ss13.ogg similarity index 100% rename from sound/vox_fem/ss13.ogg rename to sound/announcer/vox_fem/ss13.ogg diff --git a/sound/vox_fem/stairway.ogg b/sound/announcer/vox_fem/stairway.ogg similarity index 100% rename from sound/vox_fem/stairway.ogg rename to sound/announcer/vox_fem/stairway.ogg diff --git a/sound/vox_fem/starboard.ogg b/sound/announcer/vox_fem/starboard.ogg similarity index 100% rename from sound/vox_fem/starboard.ogg rename to sound/announcer/vox_fem/starboard.ogg diff --git a/sound/vox_fem/start.ogg b/sound/announcer/vox_fem/start.ogg similarity index 100% rename from sound/vox_fem/start.ogg rename to sound/announcer/vox_fem/start.ogg diff --git a/sound/vox_fem/starts.ogg b/sound/announcer/vox_fem/starts.ogg similarity index 100% rename from sound/vox_fem/starts.ogg rename to sound/announcer/vox_fem/starts.ogg diff --git a/sound/vox_fem/station.ogg b/sound/announcer/vox_fem/station.ogg similarity index 100% rename from sound/vox_fem/station.ogg rename to sound/announcer/vox_fem/station.ogg diff --git a/sound/vox_fem/stations.ogg b/sound/announcer/vox_fem/stations.ogg similarity index 100% rename from sound/vox_fem/stations.ogg rename to sound/announcer/vox_fem/stations.ogg diff --git a/sound/vox_fem/stationwide.ogg b/sound/announcer/vox_fem/stationwide.ogg similarity index 100% rename from sound/vox_fem/stationwide.ogg rename to sound/announcer/vox_fem/stationwide.ogg diff --git a/sound/vox_fem/status.ogg b/sound/announcer/vox_fem/status.ogg similarity index 100% rename from sound/vox_fem/status.ogg rename to sound/announcer/vox_fem/status.ogg diff --git a/sound/vox_fem/stay.ogg b/sound/announcer/vox_fem/stay.ogg similarity index 100% rename from sound/vox_fem/stay.ogg rename to sound/announcer/vox_fem/stay.ogg diff --git a/sound/vox_fem/sterile.ogg b/sound/announcer/vox_fem/sterile.ogg similarity index 100% rename from sound/vox_fem/sterile.ogg rename to sound/announcer/vox_fem/sterile.ogg diff --git a/sound/vox_fem/sterilization.ogg b/sound/announcer/vox_fem/sterilization.ogg similarity index 100% rename from sound/vox_fem/sterilization.ogg rename to sound/announcer/vox_fem/sterilization.ogg diff --git a/sound/vox_fem/stop.ogg b/sound/announcer/vox_fem/stop.ogg similarity index 100% rename from sound/vox_fem/stop.ogg rename to sound/announcer/vox_fem/stop.ogg diff --git a/sound/vox_fem/storage.ogg b/sound/announcer/vox_fem/storage.ogg similarity index 100% rename from sound/vox_fem/storage.ogg rename to sound/announcer/vox_fem/storage.ogg diff --git a/sound/vox_fem/strong.ogg b/sound/announcer/vox_fem/strong.ogg similarity index 100% rename from sound/vox_fem/strong.ogg rename to sound/announcer/vox_fem/strong.ogg diff --git a/sound/vox_fem/stuck.ogg b/sound/announcer/vox_fem/stuck.ogg similarity index 100% rename from sound/vox_fem/stuck.ogg rename to sound/announcer/vox_fem/stuck.ogg diff --git a/sound/vox_fem/sub.ogg b/sound/announcer/vox_fem/sub.ogg similarity index 100% rename from sound/vox_fem/sub.ogg rename to sound/announcer/vox_fem/sub.ogg diff --git a/sound/vox_fem/subsurface.ogg b/sound/announcer/vox_fem/subsurface.ogg similarity index 100% rename from sound/vox_fem/subsurface.ogg rename to sound/announcer/vox_fem/subsurface.ogg diff --git a/sound/vox_fem/such.ogg b/sound/announcer/vox_fem/such.ogg similarity index 100% rename from sound/vox_fem/such.ogg rename to sound/announcer/vox_fem/such.ogg diff --git a/sound/vox_fem/sudden.ogg b/sound/announcer/vox_fem/sudden.ogg similarity index 100% rename from sound/vox_fem/sudden.ogg rename to sound/announcer/vox_fem/sudden.ogg diff --git a/sound/vox_fem/suffer.ogg b/sound/announcer/vox_fem/suffer.ogg similarity index 100% rename from sound/vox_fem/suffer.ogg rename to sound/announcer/vox_fem/suffer.ogg diff --git a/sound/vox_fem/suit.ogg b/sound/announcer/vox_fem/suit.ogg similarity index 100% rename from sound/vox_fem/suit.ogg rename to sound/announcer/vox_fem/suit.ogg diff --git a/sound/vox_fem/suited.ogg b/sound/announcer/vox_fem/suited.ogg similarity index 100% rename from sound/vox_fem/suited.ogg rename to sound/announcer/vox_fem/suited.ogg diff --git a/sound/vox_fem/super.ogg b/sound/announcer/vox_fem/super.ogg similarity index 100% rename from sound/vox_fem/super.ogg rename to sound/announcer/vox_fem/super.ogg diff --git a/sound/vox_fem/superconducting.ogg b/sound/announcer/vox_fem/superconducting.ogg similarity index 100% rename from sound/vox_fem/superconducting.ogg rename to sound/announcer/vox_fem/superconducting.ogg diff --git a/sound/vox_fem/supercooled.ogg b/sound/announcer/vox_fem/supercooled.ogg similarity index 100% rename from sound/vox_fem/supercooled.ogg rename to sound/announcer/vox_fem/supercooled.ogg diff --git a/sound/vox_fem/supermatter.ogg b/sound/announcer/vox_fem/supermatter.ogg similarity index 100% rename from sound/vox_fem/supermatter.ogg rename to sound/announcer/vox_fem/supermatter.ogg diff --git a/sound/vox_fem/supply.ogg b/sound/announcer/vox_fem/supply.ogg similarity index 100% rename from sound/vox_fem/supply.ogg rename to sound/announcer/vox_fem/supply.ogg diff --git a/sound/vox_fem/surface.ogg b/sound/announcer/vox_fem/surface.ogg similarity index 100% rename from sound/vox_fem/surface.ogg rename to sound/announcer/vox_fem/surface.ogg diff --git a/sound/vox_fem/surrender.ogg b/sound/announcer/vox_fem/surrender.ogg similarity index 100% rename from sound/vox_fem/surrender.ogg rename to sound/announcer/vox_fem/surrender.ogg diff --git a/sound/vox_fem/surround.ogg b/sound/announcer/vox_fem/surround.ogg similarity index 100% rename from sound/vox_fem/surround.ogg rename to sound/announcer/vox_fem/surround.ogg diff --git a/sound/vox_fem/surrounded.ogg b/sound/announcer/vox_fem/surrounded.ogg similarity index 100% rename from sound/vox_fem/surrounded.ogg rename to sound/announcer/vox_fem/surrounded.ogg diff --git a/sound/vox_fem/sweating.ogg b/sound/announcer/vox_fem/sweating.ogg similarity index 100% rename from sound/vox_fem/sweating.ogg rename to sound/announcer/vox_fem/sweating.ogg diff --git a/sound/vox_fem/swhitenoise.ogg b/sound/announcer/vox_fem/swhitenoise.ogg similarity index 100% rename from sound/vox_fem/swhitenoise.ogg rename to sound/announcer/vox_fem/swhitenoise.ogg diff --git a/sound/vox_fem/switch.ogg b/sound/announcer/vox_fem/switch.ogg similarity index 100% rename from sound/vox_fem/switch.ogg rename to sound/announcer/vox_fem/switch.ogg diff --git a/sound/vox_fem/syndicate.ogg b/sound/announcer/vox_fem/syndicate.ogg similarity index 100% rename from sound/vox_fem/syndicate.ogg rename to sound/announcer/vox_fem/syndicate.ogg diff --git a/sound/vox_fem/system.ogg b/sound/announcer/vox_fem/system.ogg similarity index 100% rename from sound/vox_fem/system.ogg rename to sound/announcer/vox_fem/system.ogg diff --git a/sound/vox_fem/systems.ogg b/sound/announcer/vox_fem/systems.ogg similarity index 100% rename from sound/vox_fem/systems.ogg rename to sound/announcer/vox_fem/systems.ogg diff --git a/sound/vox_fem/t.ogg b/sound/announcer/vox_fem/t.ogg similarity index 100% rename from sound/vox_fem/t.ogg rename to sound/announcer/vox_fem/t.ogg diff --git a/sound/vox_fem/table.ogg b/sound/announcer/vox_fem/table.ogg similarity index 100% rename from sound/vox_fem/table.ogg rename to sound/announcer/vox_fem/table.ogg diff --git a/sound/vox_fem/tactical.ogg b/sound/announcer/vox_fem/tactical.ogg similarity index 100% rename from sound/vox_fem/tactical.ogg rename to sound/announcer/vox_fem/tactical.ogg diff --git a/sound/vox_fem/taildragger.ogg b/sound/announcer/vox_fem/taildragger.ogg similarity index 100% rename from sound/vox_fem/taildragger.ogg rename to sound/announcer/vox_fem/taildragger.ogg diff --git a/sound/vox_fem/take.ogg b/sound/announcer/vox_fem/take.ogg similarity index 100% rename from sound/vox_fem/take.ogg rename to sound/announcer/vox_fem/take.ogg diff --git a/sound/vox_fem/talk.ogg b/sound/announcer/vox_fem/talk.ogg similarity index 100% rename from sound/vox_fem/talk.ogg rename to sound/announcer/vox_fem/talk.ogg diff --git a/sound/vox_fem/tampered.ogg b/sound/announcer/vox_fem/tampered.ogg similarity index 100% rename from sound/vox_fem/tampered.ogg rename to sound/announcer/vox_fem/tampered.ogg diff --git a/sound/vox_fem/tango.ogg b/sound/announcer/vox_fem/tango.ogg similarity index 100% rename from sound/vox_fem/tango.ogg rename to sound/announcer/vox_fem/tango.ogg diff --git a/sound/vox_fem/tank.ogg b/sound/announcer/vox_fem/tank.ogg similarity index 100% rename from sound/vox_fem/tank.ogg rename to sound/announcer/vox_fem/tank.ogg diff --git a/sound/vox_fem/target.ogg b/sound/announcer/vox_fem/target.ogg similarity index 100% rename from sound/vox_fem/target.ogg rename to sound/announcer/vox_fem/target.ogg diff --git a/sound/vox_fem/team.ogg b/sound/announcer/vox_fem/team.ogg similarity index 100% rename from sound/vox_fem/team.ogg rename to sound/announcer/vox_fem/team.ogg diff --git a/sound/vox_fem/tech.ogg b/sound/announcer/vox_fem/tech.ogg similarity index 100% rename from sound/vox_fem/tech.ogg rename to sound/announcer/vox_fem/tech.ogg diff --git a/sound/vox_fem/technician.ogg b/sound/announcer/vox_fem/technician.ogg similarity index 100% rename from sound/vox_fem/technician.ogg rename to sound/announcer/vox_fem/technician.ogg diff --git a/sound/vox_fem/technology.ogg b/sound/announcer/vox_fem/technology.ogg similarity index 100% rename from sound/vox_fem/technology.ogg rename to sound/announcer/vox_fem/technology.ogg diff --git a/sound/vox_fem/teleporter.ogg b/sound/announcer/vox_fem/teleporter.ogg similarity index 100% rename from sound/vox_fem/teleporter.ogg rename to sound/announcer/vox_fem/teleporter.ogg diff --git a/sound/vox_fem/temperature.ogg b/sound/announcer/vox_fem/temperature.ogg similarity index 100% rename from sound/vox_fem/temperature.ogg rename to sound/announcer/vox_fem/temperature.ogg diff --git a/sound/vox_fem/temporal.ogg b/sound/announcer/vox_fem/temporal.ogg similarity index 100% rename from sound/vox_fem/temporal.ogg rename to sound/announcer/vox_fem/temporal.ogg diff --git a/sound/vox_fem/ten.ogg b/sound/announcer/vox_fem/ten.ogg similarity index 100% rename from sound/vox_fem/ten.ogg rename to sound/announcer/vox_fem/ten.ogg diff --git a/sound/vox_fem/terminal.ogg b/sound/announcer/vox_fem/terminal.ogg similarity index 100% rename from sound/vox_fem/terminal.ogg rename to sound/announcer/vox_fem/terminal.ogg diff --git a/sound/vox_fem/terminate.ogg b/sound/announcer/vox_fem/terminate.ogg similarity index 100% rename from sound/vox_fem/terminate.ogg rename to sound/announcer/vox_fem/terminate.ogg diff --git a/sound/vox_fem/terminated.ogg b/sound/announcer/vox_fem/terminated.ogg similarity index 100% rename from sound/vox_fem/terminated.ogg rename to sound/announcer/vox_fem/terminated.ogg diff --git a/sound/vox_fem/termination.ogg b/sound/announcer/vox_fem/termination.ogg similarity index 100% rename from sound/vox_fem/termination.ogg rename to sound/announcer/vox_fem/termination.ogg diff --git a/sound/vox_fem/tesla.ogg b/sound/announcer/vox_fem/tesla.ogg similarity index 100% rename from sound/vox_fem/tesla.ogg rename to sound/announcer/vox_fem/tesla.ogg diff --git a/sound/vox_fem/test.ogg b/sound/announcer/vox_fem/test.ogg similarity index 100% rename from sound/vox_fem/test.ogg rename to sound/announcer/vox_fem/test.ogg diff --git a/sound/vox_fem/text.ogg b/sound/announcer/vox_fem/text.ogg similarity index 100% rename from sound/vox_fem/text.ogg rename to sound/announcer/vox_fem/text.ogg diff --git a/sound/vox_fem/thank.ogg b/sound/announcer/vox_fem/thank.ogg similarity index 100% rename from sound/vox_fem/thank.ogg rename to sound/announcer/vox_fem/thank.ogg diff --git a/sound/vox_fem/thanks.ogg b/sound/announcer/vox_fem/thanks.ogg similarity index 100% rename from sound/vox_fem/thanks.ogg rename to sound/announcer/vox_fem/thanks.ogg diff --git a/sound/vox_fem/that.ogg b/sound/announcer/vox_fem/that.ogg similarity index 100% rename from sound/vox_fem/that.ogg rename to sound/announcer/vox_fem/that.ogg diff --git a/sound/vox_fem/the.ogg b/sound/announcer/vox_fem/the.ogg similarity index 100% rename from sound/vox_fem/the.ogg rename to sound/announcer/vox_fem/the.ogg diff --git a/sound/vox_fem/theater.ogg b/sound/announcer/vox_fem/theater.ogg similarity index 100% rename from sound/vox_fem/theater.ogg rename to sound/announcer/vox_fem/theater.ogg diff --git a/sound/vox_fem/them.ogg b/sound/announcer/vox_fem/them.ogg similarity index 100% rename from sound/vox_fem/them.ogg rename to sound/announcer/vox_fem/them.ogg diff --git a/sound/vox_fem/then.ogg b/sound/announcer/vox_fem/then.ogg similarity index 100% rename from sound/vox_fem/then.ogg rename to sound/announcer/vox_fem/then.ogg diff --git a/sound/vox_fem/there.ogg b/sound/announcer/vox_fem/there.ogg similarity index 100% rename from sound/vox_fem/there.ogg rename to sound/announcer/vox_fem/there.ogg diff --git a/sound/vox_fem/they.ogg b/sound/announcer/vox_fem/they.ogg similarity index 100% rename from sound/vox_fem/they.ogg rename to sound/announcer/vox_fem/they.ogg diff --git a/sound/vox_fem/third.ogg b/sound/announcer/vox_fem/third.ogg similarity index 100% rename from sound/vox_fem/third.ogg rename to sound/announcer/vox_fem/third.ogg diff --git a/sound/vox_fem/thirteen.ogg b/sound/announcer/vox_fem/thirteen.ogg similarity index 100% rename from sound/vox_fem/thirteen.ogg rename to sound/announcer/vox_fem/thirteen.ogg diff --git a/sound/vox_fem/thirty.ogg b/sound/announcer/vox_fem/thirty.ogg similarity index 100% rename from sound/vox_fem/thirty.ogg rename to sound/announcer/vox_fem/thirty.ogg diff --git a/sound/vox_fem/this.ogg b/sound/announcer/vox_fem/this.ogg similarity index 100% rename from sound/vox_fem/this.ogg rename to sound/announcer/vox_fem/this.ogg diff --git a/sound/vox_fem/those.ogg b/sound/announcer/vox_fem/those.ogg similarity index 100% rename from sound/vox_fem/those.ogg rename to sound/announcer/vox_fem/those.ogg diff --git a/sound/vox_fem/thousand.ogg b/sound/announcer/vox_fem/thousand.ogg similarity index 100% rename from sound/vox_fem/thousand.ogg rename to sound/announcer/vox_fem/thousand.ogg diff --git a/sound/vox_fem/threat.ogg b/sound/announcer/vox_fem/threat.ogg similarity index 100% rename from sound/vox_fem/threat.ogg rename to sound/announcer/vox_fem/threat.ogg diff --git a/sound/vox_fem/three.ogg b/sound/announcer/vox_fem/three.ogg similarity index 100% rename from sound/vox_fem/three.ogg rename to sound/announcer/vox_fem/three.ogg diff --git a/sound/vox_fem/through.ogg b/sound/announcer/vox_fem/through.ogg similarity index 100% rename from sound/vox_fem/through.ogg rename to sound/announcer/vox_fem/through.ogg diff --git a/sound/vox_fem/tick.ogg b/sound/announcer/vox_fem/tick.ogg similarity index 100% rename from sound/vox_fem/tick.ogg rename to sound/announcer/vox_fem/tick.ogg diff --git a/sound/vox_fem/tide.ogg b/sound/announcer/vox_fem/tide.ogg similarity index 100% rename from sound/vox_fem/tide.ogg rename to sound/announcer/vox_fem/tide.ogg diff --git a/sound/vox_fem/tile.ogg b/sound/announcer/vox_fem/tile.ogg similarity index 100% rename from sound/vox_fem/tile.ogg rename to sound/announcer/vox_fem/tile.ogg diff --git a/sound/vox_fem/time.ogg b/sound/announcer/vox_fem/time.ogg similarity index 100% rename from sound/vox_fem/time.ogg rename to sound/announcer/vox_fem/time.ogg diff --git a/sound/vox_fem/tiny.ogg b/sound/announcer/vox_fem/tiny.ogg similarity index 100% rename from sound/vox_fem/tiny.ogg rename to sound/announcer/vox_fem/tiny.ogg diff --git a/sound/vox_fem/to.ogg b/sound/announcer/vox_fem/to.ogg similarity index 100% rename from sound/vox_fem/to.ogg rename to sound/announcer/vox_fem/to.ogg diff --git a/sound/vox_fem/top.ogg b/sound/announcer/vox_fem/top.ogg similarity index 100% rename from sound/vox_fem/top.ogg rename to sound/announcer/vox_fem/top.ogg diff --git a/sound/vox_fem/topside.ogg b/sound/announcer/vox_fem/topside.ogg similarity index 100% rename from sound/vox_fem/topside.ogg rename to sound/announcer/vox_fem/topside.ogg diff --git a/sound/vox_fem/touch.ogg b/sound/announcer/vox_fem/touch.ogg similarity index 100% rename from sound/vox_fem/touch.ogg rename to sound/announcer/vox_fem/touch.ogg diff --git a/sound/vox_fem/touched.ogg b/sound/announcer/vox_fem/touched.ogg similarity index 100% rename from sound/vox_fem/touched.ogg rename to sound/announcer/vox_fem/touched.ogg diff --git a/sound/vox_fem/touching.ogg b/sound/announcer/vox_fem/touching.ogg similarity index 100% rename from sound/vox_fem/touching.ogg rename to sound/announcer/vox_fem/touching.ogg diff --git a/sound/vox_fem/towards.ogg b/sound/announcer/vox_fem/towards.ogg similarity index 100% rename from sound/vox_fem/towards.ogg rename to sound/announcer/vox_fem/towards.ogg diff --git a/sound/vox_fem/toxins.ogg b/sound/announcer/vox_fem/toxins.ogg similarity index 100% rename from sound/vox_fem/toxins.ogg rename to sound/announcer/vox_fem/toxins.ogg diff --git a/sound/vox_fem/track.ogg b/sound/announcer/vox_fem/track.ogg similarity index 100% rename from sound/vox_fem/track.ogg rename to sound/announcer/vox_fem/track.ogg diff --git a/sound/vox_fem/train.ogg b/sound/announcer/vox_fem/train.ogg similarity index 100% rename from sound/vox_fem/train.ogg rename to sound/announcer/vox_fem/train.ogg diff --git a/sound/vox_fem/traitor.ogg b/sound/announcer/vox_fem/traitor.ogg similarity index 100% rename from sound/vox_fem/traitor.ogg rename to sound/announcer/vox_fem/traitor.ogg diff --git a/sound/vox_fem/transportation.ogg b/sound/announcer/vox_fem/transportation.ogg similarity index 100% rename from sound/vox_fem/transportation.ogg rename to sound/announcer/vox_fem/transportation.ogg diff --git a/sound/vox_fem/trigger.ogg b/sound/announcer/vox_fem/trigger.ogg similarity index 100% rename from sound/vox_fem/trigger.ogg rename to sound/announcer/vox_fem/trigger.ogg diff --git a/sound/vox_fem/triggered.ogg b/sound/announcer/vox_fem/triggered.ogg similarity index 100% rename from sound/vox_fem/triggered.ogg rename to sound/announcer/vox_fem/triggered.ogg diff --git a/sound/vox_fem/triggering.ogg b/sound/announcer/vox_fem/triggering.ogg similarity index 100% rename from sound/vox_fem/triggering.ogg rename to sound/announcer/vox_fem/triggering.ogg diff --git a/sound/vox_fem/triple.ogg b/sound/announcer/vox_fem/triple.ogg similarity index 100% rename from sound/vox_fem/triple.ogg rename to sound/announcer/vox_fem/triple.ogg diff --git a/sound/vox_fem/tritium.ogg b/sound/announcer/vox_fem/tritium.ogg similarity index 100% rename from sound/vox_fem/tritium.ogg rename to sound/announcer/vox_fem/tritium.ogg diff --git a/sound/vox_fem/truck.ogg b/sound/announcer/vox_fem/truck.ogg similarity index 100% rename from sound/vox_fem/truck.ogg rename to sound/announcer/vox_fem/truck.ogg diff --git a/sound/vox_fem/true.ogg b/sound/announcer/vox_fem/true.ogg similarity index 100% rename from sound/vox_fem/true.ogg rename to sound/announcer/vox_fem/true.ogg diff --git a/sound/vox_fem/tunnel.ogg b/sound/announcer/vox_fem/tunnel.ogg similarity index 100% rename from sound/vox_fem/tunnel.ogg rename to sound/announcer/vox_fem/tunnel.ogg diff --git a/sound/vox_fem/turn.ogg b/sound/announcer/vox_fem/turn.ogg similarity index 100% rename from sound/vox_fem/turn.ogg rename to sound/announcer/vox_fem/turn.ogg diff --git a/sound/vox_fem/turned.ogg b/sound/announcer/vox_fem/turned.ogg similarity index 100% rename from sound/vox_fem/turned.ogg rename to sound/announcer/vox_fem/turned.ogg diff --git a/sound/vox_fem/turret.ogg b/sound/announcer/vox_fem/turret.ogg similarity index 100% rename from sound/vox_fem/turret.ogg rename to sound/announcer/vox_fem/turret.ogg diff --git a/sound/vox_fem/twelve.ogg b/sound/announcer/vox_fem/twelve.ogg similarity index 100% rename from sound/vox_fem/twelve.ogg rename to sound/announcer/vox_fem/twelve.ogg diff --git a/sound/vox_fem/twenty.ogg b/sound/announcer/vox_fem/twenty.ogg similarity index 100% rename from sound/vox_fem/twenty.ogg rename to sound/announcer/vox_fem/twenty.ogg diff --git a/sound/vox_fem/two.ogg b/sound/announcer/vox_fem/two.ogg similarity index 100% rename from sound/vox_fem/two.ogg rename to sound/announcer/vox_fem/two.ogg diff --git a/sound/vox_fem/u.ogg b/sound/announcer/vox_fem/u.ogg similarity index 100% rename from sound/vox_fem/u.ogg rename to sound/announcer/vox_fem/u.ogg diff --git a/sound/vox_fem/ugh.ogg b/sound/announcer/vox_fem/ugh.ogg similarity index 100% rename from sound/vox_fem/ugh.ogg rename to sound/announcer/vox_fem/ugh.ogg diff --git a/sound/vox_fem/ughh.ogg b/sound/announcer/vox_fem/ughh.ogg similarity index 100% rename from sound/vox_fem/ughh.ogg rename to sound/announcer/vox_fem/ughh.ogg diff --git a/sound/vox_fem/unable.ogg b/sound/announcer/vox_fem/unable.ogg similarity index 100% rename from sound/vox_fem/unable.ogg rename to sound/announcer/vox_fem/unable.ogg diff --git a/sound/vox_fem/unauthorized.ogg b/sound/announcer/vox_fem/unauthorized.ogg similarity index 100% rename from sound/vox_fem/unauthorized.ogg rename to sound/announcer/vox_fem/unauthorized.ogg diff --git a/sound/vox_fem/under.ogg b/sound/announcer/vox_fem/under.ogg similarity index 100% rename from sound/vox_fem/under.ogg rename to sound/announcer/vox_fem/under.ogg diff --git a/sound/vox_fem/uniform.ogg b/sound/announcer/vox_fem/uniform.ogg similarity index 100% rename from sound/vox_fem/uniform.ogg rename to sound/announcer/vox_fem/uniform.ogg diff --git a/sound/vox_fem/unique.ogg b/sound/announcer/vox_fem/unique.ogg similarity index 100% rename from sound/vox_fem/unique.ogg rename to sound/announcer/vox_fem/unique.ogg diff --git a/sound/vox_fem/unknown.ogg b/sound/announcer/vox_fem/unknown.ogg similarity index 100% rename from sound/vox_fem/unknown.ogg rename to sound/announcer/vox_fem/unknown.ogg diff --git a/sound/vox_fem/unlocked.ogg b/sound/announcer/vox_fem/unlocked.ogg similarity index 100% rename from sound/vox_fem/unlocked.ogg rename to sound/announcer/vox_fem/unlocked.ogg diff --git a/sound/vox_fem/unsafe.ogg b/sound/announcer/vox_fem/unsafe.ogg similarity index 100% rename from sound/vox_fem/unsafe.ogg rename to sound/announcer/vox_fem/unsafe.ogg diff --git a/sound/vox_fem/until.ogg b/sound/announcer/vox_fem/until.ogg similarity index 100% rename from sound/vox_fem/until.ogg rename to sound/announcer/vox_fem/until.ogg diff --git a/sound/vox_fem/unwrench.ogg b/sound/announcer/vox_fem/unwrench.ogg similarity index 100% rename from sound/vox_fem/unwrench.ogg rename to sound/announcer/vox_fem/unwrench.ogg diff --git a/sound/vox_fem/unwrenching.ogg b/sound/announcer/vox_fem/unwrenching.ogg similarity index 100% rename from sound/vox_fem/unwrenching.ogg rename to sound/announcer/vox_fem/unwrenching.ogg diff --git a/sound/vox_fem/up.ogg b/sound/announcer/vox_fem/up.ogg similarity index 100% rename from sound/vox_fem/up.ogg rename to sound/announcer/vox_fem/up.ogg diff --git a/sound/vox_fem/update.ogg b/sound/announcer/vox_fem/update.ogg similarity index 100% rename from sound/vox_fem/update.ogg rename to sound/announcer/vox_fem/update.ogg diff --git a/sound/vox_fem/updated.ogg b/sound/announcer/vox_fem/updated.ogg similarity index 100% rename from sound/vox_fem/updated.ogg rename to sound/announcer/vox_fem/updated.ogg diff --git a/sound/vox_fem/updating.ogg b/sound/announcer/vox_fem/updating.ogg similarity index 100% rename from sound/vox_fem/updating.ogg rename to sound/announcer/vox_fem/updating.ogg diff --git a/sound/vox_fem/upload.ogg b/sound/announcer/vox_fem/upload.ogg similarity index 100% rename from sound/vox_fem/upload.ogg rename to sound/announcer/vox_fem/upload.ogg diff --git a/sound/vox_fem/upper.ogg b/sound/announcer/vox_fem/upper.ogg similarity index 100% rename from sound/vox_fem/upper.ogg rename to sound/announcer/vox_fem/upper.ogg diff --git a/sound/vox_fem/uranium.ogg b/sound/announcer/vox_fem/uranium.ogg similarity index 100% rename from sound/vox_fem/uranium.ogg rename to sound/announcer/vox_fem/uranium.ogg diff --git a/sound/vox_fem/us.ogg b/sound/announcer/vox_fem/us.ogg similarity index 100% rename from sound/vox_fem/us.ogg rename to sound/announcer/vox_fem/us.ogg diff --git a/sound/vox_fem/usa.ogg b/sound/announcer/vox_fem/usa.ogg similarity index 100% rename from sound/vox_fem/usa.ogg rename to sound/announcer/vox_fem/usa.ogg diff --git a/sound/vox_fem/use.ogg b/sound/announcer/vox_fem/use.ogg similarity index 100% rename from sound/vox_fem/use.ogg rename to sound/announcer/vox_fem/use.ogg diff --git a/sound/vox_fem/used.ogg b/sound/announcer/vox_fem/used.ogg similarity index 100% rename from sound/vox_fem/used.ogg rename to sound/announcer/vox_fem/used.ogg diff --git a/sound/vox_fem/useful.ogg b/sound/announcer/vox_fem/useful.ogg similarity index 100% rename from sound/vox_fem/useful.ogg rename to sound/announcer/vox_fem/useful.ogg diff --git a/sound/vox_fem/useless.ogg b/sound/announcer/vox_fem/useless.ogg similarity index 100% rename from sound/vox_fem/useless.ogg rename to sound/announcer/vox_fem/useless.ogg diff --git a/sound/vox_fem/user.ogg b/sound/announcer/vox_fem/user.ogg similarity index 100% rename from sound/vox_fem/user.ogg rename to sound/announcer/vox_fem/user.ogg diff --git a/sound/vox_fem/v.ogg b/sound/announcer/vox_fem/v.ogg similarity index 100% rename from sound/vox_fem/v.ogg rename to sound/announcer/vox_fem/v.ogg diff --git a/sound/vox_fem/vacate.ogg b/sound/announcer/vox_fem/vacate.ogg similarity index 100% rename from sound/vox_fem/vacate.ogg rename to sound/announcer/vox_fem/vacate.ogg diff --git a/sound/vox_fem/vacuum.ogg b/sound/announcer/vox_fem/vacuum.ogg similarity index 100% rename from sound/vox_fem/vacuum.ogg rename to sound/announcer/vox_fem/vacuum.ogg diff --git a/sound/vox_fem/valid.ogg b/sound/announcer/vox_fem/valid.ogg similarity index 100% rename from sound/vox_fem/valid.ogg rename to sound/announcer/vox_fem/valid.ogg diff --git a/sound/vox_fem/validate.ogg b/sound/announcer/vox_fem/validate.ogg similarity index 100% rename from sound/vox_fem/validate.ogg rename to sound/announcer/vox_fem/validate.ogg diff --git a/sound/vox_fem/vapor.ogg b/sound/announcer/vox_fem/vapor.ogg similarity index 100% rename from sound/vox_fem/vapor.ogg rename to sound/announcer/vox_fem/vapor.ogg diff --git a/sound/vox_fem/vendor.ogg b/sound/announcer/vox_fem/vendor.ogg similarity index 100% rename from sound/vox_fem/vendor.ogg rename to sound/announcer/vox_fem/vendor.ogg diff --git a/sound/vox_fem/vent.ogg b/sound/announcer/vox_fem/vent.ogg similarity index 100% rename from sound/vox_fem/vent.ogg rename to sound/announcer/vox_fem/vent.ogg diff --git a/sound/vox_fem/ventilation.ogg b/sound/announcer/vox_fem/ventilation.ogg similarity index 100% rename from sound/vox_fem/ventilation.ogg rename to sound/announcer/vox_fem/ventilation.ogg diff --git a/sound/vox_fem/very.ogg b/sound/announcer/vox_fem/very.ogg similarity index 100% rename from sound/vox_fem/very.ogg rename to sound/announcer/vox_fem/very.ogg diff --git a/sound/vox_fem/victor.ogg b/sound/announcer/vox_fem/victor.ogg similarity index 100% rename from sound/vox_fem/victor.ogg rename to sound/announcer/vox_fem/victor.ogg diff --git a/sound/vox_fem/violated.ogg b/sound/announcer/vox_fem/violated.ogg similarity index 100% rename from sound/vox_fem/violated.ogg rename to sound/announcer/vox_fem/violated.ogg diff --git a/sound/vox_fem/violation.ogg b/sound/announcer/vox_fem/violation.ogg similarity index 100% rename from sound/vox_fem/violation.ogg rename to sound/announcer/vox_fem/violation.ogg diff --git a/sound/vox_fem/virologist.ogg b/sound/announcer/vox_fem/virologist.ogg similarity index 100% rename from sound/vox_fem/virologist.ogg rename to sound/announcer/vox_fem/virologist.ogg diff --git a/sound/vox_fem/virology.ogg b/sound/announcer/vox_fem/virology.ogg similarity index 100% rename from sound/vox_fem/virology.ogg rename to sound/announcer/vox_fem/virology.ogg diff --git a/sound/vox_fem/virus.ogg b/sound/announcer/vox_fem/virus.ogg similarity index 100% rename from sound/vox_fem/virus.ogg rename to sound/announcer/vox_fem/virus.ogg diff --git a/sound/vox_fem/vitals.ogg b/sound/announcer/vox_fem/vitals.ogg similarity index 100% rename from sound/vox_fem/vitals.ogg rename to sound/announcer/vox_fem/vitals.ogg diff --git a/sound/vox_fem/voltage.ogg b/sound/announcer/vox_fem/voltage.ogg similarity index 100% rename from sound/vox_fem/voltage.ogg rename to sound/announcer/vox_fem/voltage.ogg diff --git a/sound/vox_fem/vox.ogg b/sound/announcer/vox_fem/vox.ogg similarity index 100% rename from sound/vox_fem/vox.ogg rename to sound/announcer/vox_fem/vox.ogg diff --git a/sound/vox_fem/vox_login.ogg b/sound/announcer/vox_fem/vox_login.ogg similarity index 100% rename from sound/vox_fem/vox_login.ogg rename to sound/announcer/vox_fem/vox_login.ogg diff --git a/sound/vox_fem/voxtest.ogg b/sound/announcer/vox_fem/voxtest.ogg similarity index 100% rename from sound/vox_fem/voxtest.ogg rename to sound/announcer/vox_fem/voxtest.ogg diff --git a/sound/vox_fem/w.ogg b/sound/announcer/vox_fem/w.ogg similarity index 100% rename from sound/vox_fem/w.ogg rename to sound/announcer/vox_fem/w.ogg diff --git a/sound/vox_fem/walk.ogg b/sound/announcer/vox_fem/walk.ogg similarity index 100% rename from sound/vox_fem/walk.ogg rename to sound/announcer/vox_fem/walk.ogg diff --git a/sound/vox_fem/wall.ogg b/sound/announcer/vox_fem/wall.ogg similarity index 100% rename from sound/vox_fem/wall.ogg rename to sound/announcer/vox_fem/wall.ogg diff --git a/sound/vox_fem/wanker.ogg b/sound/announcer/vox_fem/wanker.ogg similarity index 100% rename from sound/vox_fem/wanker.ogg rename to sound/announcer/vox_fem/wanker.ogg diff --git a/sound/vox_fem/want.ogg b/sound/announcer/vox_fem/want.ogg similarity index 100% rename from sound/vox_fem/want.ogg rename to sound/announcer/vox_fem/want.ogg diff --git a/sound/vox_fem/wanted.ogg b/sound/announcer/vox_fem/wanted.ogg similarity index 100% rename from sound/vox_fem/wanted.ogg rename to sound/announcer/vox_fem/wanted.ogg diff --git a/sound/vox_fem/warden.ogg b/sound/announcer/vox_fem/warden.ogg similarity index 100% rename from sound/vox_fem/warden.ogg rename to sound/announcer/vox_fem/warden.ogg diff --git a/sound/vox_fem/warm.ogg b/sound/announcer/vox_fem/warm.ogg similarity index 100% rename from sound/vox_fem/warm.ogg rename to sound/announcer/vox_fem/warm.ogg diff --git a/sound/vox_fem/warn.ogg b/sound/announcer/vox_fem/warn.ogg similarity index 100% rename from sound/vox_fem/warn.ogg rename to sound/announcer/vox_fem/warn.ogg diff --git a/sound/vox_fem/warning.ogg b/sound/announcer/vox_fem/warning.ogg similarity index 100% rename from sound/vox_fem/warning.ogg rename to sound/announcer/vox_fem/warning.ogg diff --git a/sound/vox_fem/was.ogg b/sound/announcer/vox_fem/was.ogg similarity index 100% rename from sound/vox_fem/was.ogg rename to sound/announcer/vox_fem/was.ogg diff --git a/sound/vox_fem/waste.ogg b/sound/announcer/vox_fem/waste.ogg similarity index 100% rename from sound/vox_fem/waste.ogg rename to sound/announcer/vox_fem/waste.ogg diff --git a/sound/vox_fem/water.ogg b/sound/announcer/vox_fem/water.ogg similarity index 100% rename from sound/vox_fem/water.ogg rename to sound/announcer/vox_fem/water.ogg diff --git a/sound/vox_fem/way.ogg b/sound/announcer/vox_fem/way.ogg similarity index 100% rename from sound/vox_fem/way.ogg rename to sound/announcer/vox_fem/way.ogg diff --git a/sound/vox_fem/ways.ogg b/sound/announcer/vox_fem/ways.ogg similarity index 100% rename from sound/vox_fem/ways.ogg rename to sound/announcer/vox_fem/ways.ogg diff --git a/sound/vox_fem/we.ogg b/sound/announcer/vox_fem/we.ogg similarity index 100% rename from sound/vox_fem/we.ogg rename to sound/announcer/vox_fem/we.ogg diff --git a/sound/vox_fem/weak.ogg b/sound/announcer/vox_fem/weak.ogg similarity index 100% rename from sound/vox_fem/weak.ogg rename to sound/announcer/vox_fem/weak.ogg diff --git a/sound/vox_fem/weapon.ogg b/sound/announcer/vox_fem/weapon.ogg similarity index 100% rename from sound/vox_fem/weapon.ogg rename to sound/announcer/vox_fem/weapon.ogg diff --git a/sound/vox_fem/welcome.ogg b/sound/announcer/vox_fem/welcome.ogg similarity index 100% rename from sound/vox_fem/welcome.ogg rename to sound/announcer/vox_fem/welcome.ogg diff --git a/sound/vox_fem/weld.ogg b/sound/announcer/vox_fem/weld.ogg similarity index 100% rename from sound/vox_fem/weld.ogg rename to sound/announcer/vox_fem/weld.ogg diff --git a/sound/vox_fem/west.ogg b/sound/announcer/vox_fem/west.ogg similarity index 100% rename from sound/vox_fem/west.ogg rename to sound/announcer/vox_fem/west.ogg diff --git a/sound/vox_fem/wew.ogg b/sound/announcer/vox_fem/wew.ogg similarity index 100% rename from sound/vox_fem/wew.ogg rename to sound/announcer/vox_fem/wew.ogg diff --git a/sound/vox_fem/what.ogg b/sound/announcer/vox_fem/what.ogg similarity index 100% rename from sound/vox_fem/what.ogg rename to sound/announcer/vox_fem/what.ogg diff --git a/sound/vox_fem/when.ogg b/sound/announcer/vox_fem/when.ogg similarity index 100% rename from sound/vox_fem/when.ogg rename to sound/announcer/vox_fem/when.ogg diff --git a/sound/vox_fem/where.ogg b/sound/announcer/vox_fem/where.ogg similarity index 100% rename from sound/vox_fem/where.ogg rename to sound/announcer/vox_fem/where.ogg diff --git a/sound/vox_fem/which.ogg b/sound/announcer/vox_fem/which.ogg similarity index 100% rename from sound/vox_fem/which.ogg rename to sound/announcer/vox_fem/which.ogg diff --git a/sound/vox_fem/while.ogg b/sound/announcer/vox_fem/while.ogg similarity index 100% rename from sound/vox_fem/while.ogg rename to sound/announcer/vox_fem/while.ogg diff --git a/sound/vox_fem/whiskey.ogg b/sound/announcer/vox_fem/whiskey.ogg similarity index 100% rename from sound/vox_fem/whiskey.ogg rename to sound/announcer/vox_fem/whiskey.ogg diff --git a/sound/vox_fem/white.ogg b/sound/announcer/vox_fem/white.ogg similarity index 100% rename from sound/vox_fem/white.ogg rename to sound/announcer/vox_fem/white.ogg diff --git a/sound/vox_fem/why.ogg b/sound/announcer/vox_fem/why.ogg similarity index 100% rename from sound/vox_fem/why.ogg rename to sound/announcer/vox_fem/why.ogg diff --git a/sound/vox_fem/wilco.ogg b/sound/announcer/vox_fem/wilco.ogg similarity index 100% rename from sound/vox_fem/wilco.ogg rename to sound/announcer/vox_fem/wilco.ogg diff --git a/sound/vox_fem/will.ogg b/sound/announcer/vox_fem/will.ogg similarity index 100% rename from sound/vox_fem/will.ogg rename to sound/announcer/vox_fem/will.ogg diff --git a/sound/vox_fem/wing.ogg b/sound/announcer/vox_fem/wing.ogg similarity index 100% rename from sound/vox_fem/wing.ogg rename to sound/announcer/vox_fem/wing.ogg diff --git a/sound/vox_fem/wire.ogg b/sound/announcer/vox_fem/wire.ogg similarity index 100% rename from sound/vox_fem/wire.ogg rename to sound/announcer/vox_fem/wire.ogg diff --git a/sound/vox_fem/with.ogg b/sound/announcer/vox_fem/with.ogg similarity index 100% rename from sound/vox_fem/with.ogg rename to sound/announcer/vox_fem/with.ogg diff --git a/sound/vox_fem/without.ogg b/sound/announcer/vox_fem/without.ogg similarity index 100% rename from sound/vox_fem/without.ogg rename to sound/announcer/vox_fem/without.ogg diff --git a/sound/vox_fem/wizard.ogg b/sound/announcer/vox_fem/wizard.ogg similarity index 100% rename from sound/vox_fem/wizard.ogg rename to sound/announcer/vox_fem/wizard.ogg diff --git a/sound/vox_fem/wood.ogg b/sound/announcer/vox_fem/wood.ogg similarity index 100% rename from sound/vox_fem/wood.ogg rename to sound/announcer/vox_fem/wood.ogg diff --git a/sound/vox_fem/woody.ogg b/sound/announcer/vox_fem/woody.ogg similarity index 100% rename from sound/vox_fem/woody.ogg rename to sound/announcer/vox_fem/woody.ogg diff --git a/sound/vox_fem/woop.ogg b/sound/announcer/vox_fem/woop.ogg similarity index 100% rename from sound/vox_fem/woop.ogg rename to sound/announcer/vox_fem/woop.ogg diff --git a/sound/vox_fem/work.ogg b/sound/announcer/vox_fem/work.ogg similarity index 100% rename from sound/vox_fem/work.ogg rename to sound/announcer/vox_fem/work.ogg diff --git a/sound/vox_fem/worked.ogg b/sound/announcer/vox_fem/worked.ogg similarity index 100% rename from sound/vox_fem/worked.ogg rename to sound/announcer/vox_fem/worked.ogg diff --git a/sound/vox_fem/working.ogg b/sound/announcer/vox_fem/working.ogg similarity index 100% rename from sound/vox_fem/working.ogg rename to sound/announcer/vox_fem/working.ogg diff --git a/sound/vox_fem/works.ogg b/sound/announcer/vox_fem/works.ogg similarity index 100% rename from sound/vox_fem/works.ogg rename to sound/announcer/vox_fem/works.ogg diff --git a/sound/vox_fem/would.ogg b/sound/announcer/vox_fem/would.ogg similarity index 100% rename from sound/vox_fem/would.ogg rename to sound/announcer/vox_fem/would.ogg diff --git a/sound/vox_fem/wouldnt.ogg b/sound/announcer/vox_fem/wouldnt.ogg similarity index 100% rename from sound/vox_fem/wouldnt.ogg rename to sound/announcer/vox_fem/wouldnt.ogg diff --git a/sound/vox_fem/wow.ogg b/sound/announcer/vox_fem/wow.ogg similarity index 100% rename from sound/vox_fem/wow.ogg rename to sound/announcer/vox_fem/wow.ogg diff --git a/sound/vox_fem/wrench.ogg b/sound/announcer/vox_fem/wrench.ogg similarity index 100% rename from sound/vox_fem/wrench.ogg rename to sound/announcer/vox_fem/wrench.ogg diff --git a/sound/vox_fem/wrenching.ogg b/sound/announcer/vox_fem/wrenching.ogg similarity index 100% rename from sound/vox_fem/wrenching.ogg rename to sound/announcer/vox_fem/wrenching.ogg diff --git a/sound/vox_fem/x.ogg b/sound/announcer/vox_fem/x.ogg similarity index 100% rename from sound/vox_fem/x.ogg rename to sound/announcer/vox_fem/x.ogg diff --git a/sound/vox_fem/xeno.ogg b/sound/announcer/vox_fem/xeno.ogg similarity index 100% rename from sound/vox_fem/xeno.ogg rename to sound/announcer/vox_fem/xeno.ogg diff --git a/sound/vox_fem/xenobiology.ogg b/sound/announcer/vox_fem/xenobiology.ogg similarity index 100% rename from sound/vox_fem/xenobiology.ogg rename to sound/announcer/vox_fem/xenobiology.ogg diff --git a/sound/vox_fem/xenomorph.ogg b/sound/announcer/vox_fem/xenomorph.ogg similarity index 100% rename from sound/vox_fem/xenomorph.ogg rename to sound/announcer/vox_fem/xenomorph.ogg diff --git a/sound/vox_fem/xenomorphs.ogg b/sound/announcer/vox_fem/xenomorphs.ogg similarity index 100% rename from sound/vox_fem/xenomorphs.ogg rename to sound/announcer/vox_fem/xenomorphs.ogg diff --git a/sound/vox_fem/y.ogg b/sound/announcer/vox_fem/y.ogg similarity index 100% rename from sound/vox_fem/y.ogg rename to sound/announcer/vox_fem/y.ogg diff --git a/sound/vox_fem/yankee.ogg b/sound/announcer/vox_fem/yankee.ogg similarity index 100% rename from sound/vox_fem/yankee.ogg rename to sound/announcer/vox_fem/yankee.ogg diff --git a/sound/vox_fem/yards.ogg b/sound/announcer/vox_fem/yards.ogg similarity index 100% rename from sound/vox_fem/yards.ogg rename to sound/announcer/vox_fem/yards.ogg diff --git a/sound/vox_fem/year.ogg b/sound/announcer/vox_fem/year.ogg similarity index 100% rename from sound/vox_fem/year.ogg rename to sound/announcer/vox_fem/year.ogg diff --git a/sound/vox_fem/yellow.ogg b/sound/announcer/vox_fem/yellow.ogg similarity index 100% rename from sound/vox_fem/yellow.ogg rename to sound/announcer/vox_fem/yellow.ogg diff --git a/sound/vox_fem/yes.ogg b/sound/announcer/vox_fem/yes.ogg similarity index 100% rename from sound/vox_fem/yes.ogg rename to sound/announcer/vox_fem/yes.ogg diff --git a/sound/vox_fem/you.ogg b/sound/announcer/vox_fem/you.ogg similarity index 100% rename from sound/vox_fem/you.ogg rename to sound/announcer/vox_fem/you.ogg diff --git a/sound/vox_fem/your.ogg b/sound/announcer/vox_fem/your.ogg similarity index 100% rename from sound/vox_fem/your.ogg rename to sound/announcer/vox_fem/your.ogg diff --git a/sound/vox_fem/yourself.ogg b/sound/announcer/vox_fem/yourself.ogg similarity index 100% rename from sound/vox_fem/yourself.ogg rename to sound/announcer/vox_fem/yourself.ogg diff --git a/sound/vox_fem/z.ogg b/sound/announcer/vox_fem/z.ogg similarity index 100% rename from sound/vox_fem/z.ogg rename to sound/announcer/vox_fem/z.ogg diff --git a/sound/vox_fem/zap.ogg b/sound/announcer/vox_fem/zap.ogg similarity index 100% rename from sound/vox_fem/zap.ogg rename to sound/announcer/vox_fem/zap.ogg diff --git a/sound/vox_fem/zauker.ogg b/sound/announcer/vox_fem/zauker.ogg similarity index 100% rename from sound/vox_fem/zauker.ogg rename to sound/announcer/vox_fem/zauker.ogg diff --git a/sound/vox_fem/zero.ogg b/sound/announcer/vox_fem/zero.ogg similarity index 100% rename from sound/vox_fem/zero.ogg rename to sound/announcer/vox_fem/zero.ogg diff --git a/sound/vox_fem/zombie.ogg b/sound/announcer/vox_fem/zombie.ogg similarity index 100% rename from sound/vox_fem/zombie.ogg rename to sound/announcer/vox_fem/zombie.ogg diff --git a/sound/vox_fem/zone.ogg b/sound/announcer/vox_fem/zone.ogg similarity index 100% rename from sound/vox_fem/zone.ogg rename to sound/announcer/vox_fem/zone.ogg diff --git a/sound/vox_fem/zulu.ogg b/sound/announcer/vox_fem/zulu.ogg similarity index 100% rename from sound/vox_fem/zulu.ogg rename to sound/announcer/vox_fem/zulu.ogg diff --git a/sound/attributions.txt b/sound/attributions.txt index 123fde0794c19..dab6cedf7eb62 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -28,7 +28,7 @@ splatter.ogg adapted from https://freesound.org/people/Rocktopus/sounds/233418/ hohoho.ogg and hehe.ogg are cut from a recording by Nanakisan on freesound: https://freesound.org/people/Nanakisan/sounds/253534/ mbox_full.ogg and mbox_end.ogg make use of The Ragtime Drummer by James Lent, in the public domain -growl1.ogg and growl2.ogg in /sound/creatures/dog are adapted from Glitchedtones's Freesound shih-tzu uploads https://freesound.org/people/Glitchedtones/ +growl1.ogg and growl2.ogg in /sound/mobs/non-humanoids/dog are adapted from Glitchedtones's Freesound shih-tzu uploads https://freesound.org/people/Glitchedtones/ eject.ogg is by magedu, adapted from https://freesound.org/people/magedu/sounds/267832/ @@ -94,6 +94,8 @@ https://www.zapsplat.com/sound-effect-category/sleigh-bells/ tada_fanfare.ogg is adapted from plasterbrain's "Tada Fanfare A", which is public domain (CC 0): https://freesound.org/people/plasterbrain/sounds/397355/ +mountedgun.ogg and mountedgunend.ogg are a combination of the cannon, cqc grab, and syndicate revolver sounds. + glockenspiel_ping.ogg is adapted from FunWithSound's "Short Success Sound Glockenspiel Treasure Video Game", which is public domain (CC 0): https://freesound.org/people/FunWithSound/sounds/456965/ @@ -179,15 +181,7 @@ https://freesound.org/people/shw489/sounds/234389/ soup_boil1.ogg through soup_boil5.ogg and soup_boil_end.ogg are taken from Boiling Soup from Freesoung.org (CC4) and converted to OGG / split apart (but is otherwise unchanged): https://freesound.org/people/jorickhoofd/sounds/632783/ -compressed_air1.ogg is taken from Freesound and converted to ogg: -https://freesound.org/people/Geoff-Bremner-Audio/sounds/682952/ -compressed_air2.ogg is taken from Freesound and converted to ogg: -https://freesound.org/people/Geoff-Bremner-Audio/sounds/682816/ -tank_insert_clunky.ogg was created by mixing compressed_air1 and clunk sound from Freesound: -https://freesound.org/people/BinaryMonkFlint/sounds/333296/ -tank_remove_thunk.ogg was made by mixing two sound tracks from Freesound: -https://freesound.org/people/lowdjinn/sounds/533885/ and; -https://freesound.org/people/BMacZero/sounds/96137/ + valve_opening.ogg was made by mixing water flowing samples from: https://freesound.org/people/scriotxstudios/sounds/349111/?attribution=1 and squeaky scrape sound from: @@ -209,3 +203,9 @@ beaker_pickup.ogg was made by lowering pitch: Bottle Tap.wav by alex_alexalex -- https://freesound.org/s/395492/ -- License: Attribution NonCommercial 3.0 beaker_place.ogg was made by cutting and lowering pitch: place glass object.wav by milpower -- https://freesound.org/s/353105/ -- License: Creative Commons 0 + +glass_reverse.ogg is adapted from a combination of: +https://freesound.org/people/C_Rogers/sounds/203368/ -- glass-shattering-hit_01.ogg by C_Rogers on freesound.org (CC0) +https://freesound.org/people/Czarcazas/sounds/330800/ -- Audio reversal/fading of Shattering Glass (Small) by Czarcazas -- https://freesound.org/s/330800/ -- License: Attribution 3.0 + +sound/effects/bonk.ogg - recorded by oranges on a coke zero bottle, edited by ninjanomnom, released to public domain diff --git a/sound/creatures/cat/attribution.txt b/sound/creatures/cat/attribution.txt new file mode 100644 index 0000000000000..66180d00b10bb --- /dev/null +++ b/sound/creatures/cat/attribution.txt @@ -0,0 +1,10 @@ +{ +cat_meow1.ogg +cat_meow2.ogg +cat_meow3.ogg +cat_purr1.ogg +cat_purr2.ogg +cat_purr3.ogg +cat_purr4.ogg +} - made by sadboysuss, License: CC-BY-SA +oranges_meow.ogg - voiced by orangesnz, License: CC0 diff --git a/sound/creatures/cat/cat_meow1.ogg b/sound/creatures/cat/cat_meow1.ogg new file mode 100644 index 0000000000000..a1889e18fbf76 Binary files /dev/null and b/sound/creatures/cat/cat_meow1.ogg differ diff --git a/sound/creatures/cat/cat_meow2.ogg b/sound/creatures/cat/cat_meow2.ogg new file mode 100644 index 0000000000000..919a071a8719f Binary files /dev/null and b/sound/creatures/cat/cat_meow2.ogg differ diff --git a/sound/creatures/cat/cat_meow3.ogg b/sound/creatures/cat/cat_meow3.ogg new file mode 100644 index 0000000000000..dc8116109969b Binary files /dev/null and b/sound/creatures/cat/cat_meow3.ogg differ diff --git a/sound/creatures/cat/cat_purr1.ogg b/sound/creatures/cat/cat_purr1.ogg new file mode 100644 index 0000000000000..c90d78282bfb0 Binary files /dev/null and b/sound/creatures/cat/cat_purr1.ogg differ diff --git a/sound/creatures/cat/cat_purr2.ogg b/sound/creatures/cat/cat_purr2.ogg new file mode 100644 index 0000000000000..0b4aa509e91ca Binary files /dev/null and b/sound/creatures/cat/cat_purr2.ogg differ diff --git a/sound/creatures/cat/cat_purr3.ogg b/sound/creatures/cat/cat_purr3.ogg new file mode 100644 index 0000000000000..5a59adea58685 Binary files /dev/null and b/sound/creatures/cat/cat_purr3.ogg differ diff --git a/sound/creatures/cat/cat_purr4.ogg b/sound/creatures/cat/cat_purr4.ogg new file mode 100644 index 0000000000000..8ad7a05301834 Binary files /dev/null and b/sound/creatures/cat/cat_purr4.ogg differ diff --git a/sound/creatures/cat/oranges_meow1.ogg b/sound/creatures/cat/oranges_meow1.ogg new file mode 100644 index 0000000000000..19c74143495f6 Binary files /dev/null and b/sound/creatures/cat/oranges_meow1.ogg differ diff --git a/sound/effects/beeps_jingle.ogg b/sound/effects/achievement/beeps_jingle.ogg similarity index 100% rename from sound/effects/beeps_jingle.ogg rename to sound/effects/achievement/beeps_jingle.ogg diff --git a/sound/effects/glockenspiel_ping.ogg b/sound/effects/achievement/glockenspiel_ping.ogg similarity index 100% rename from sound/effects/glockenspiel_ping.ogg rename to sound/effects/achievement/glockenspiel_ping.ogg diff --git a/sound/effects/tada_fanfare.ogg b/sound/effects/achievement/tada_fanfare.ogg similarity index 100% rename from sound/effects/tada_fanfare.ogg rename to sound/effects/achievement/tada_fanfare.ogg diff --git a/sound/effects/bin_close.ogg b/sound/effects/bin/bin_close.ogg similarity index 100% rename from sound/effects/bin_close.ogg rename to sound/effects/bin/bin_close.ogg diff --git a/sound/effects/bin_open.ogg b/sound/effects/bin/bin_open.ogg similarity index 100% rename from sound/effects/bin_open.ogg rename to sound/effects/bin/bin_open.ogg diff --git a/sound/effects/attackblob.ogg b/sound/effects/blob/attackblob.ogg similarity index 100% rename from sound/effects/attackblob.ogg rename to sound/effects/blob/attackblob.ogg diff --git a/sound/effects/blobattack.ogg b/sound/effects/blob/blobattack.ogg similarity index 100% rename from sound/effects/blobattack.ogg rename to sound/effects/blob/blobattack.ogg diff --git a/sound/effects/bodyfall1.ogg b/sound/effects/bodyfall/bodyfall1.ogg similarity index 100% rename from sound/effects/bodyfall1.ogg rename to sound/effects/bodyfall/bodyfall1.ogg diff --git a/sound/effects/bodyfall2.ogg b/sound/effects/bodyfall/bodyfall2.ogg similarity index 100% rename from sound/effects/bodyfall2.ogg rename to sound/effects/bodyfall/bodyfall2.ogg diff --git a/sound/effects/bodyfall3.ogg b/sound/effects/bodyfall/bodyfall3.ogg similarity index 100% rename from sound/effects/bodyfall3.ogg rename to sound/effects/bodyfall/bodyfall3.ogg diff --git a/sound/effects/bodyfall4.ogg b/sound/effects/bodyfall/bodyfall4.ogg similarity index 100% rename from sound/effects/bodyfall4.ogg rename to sound/effects/bodyfall/bodyfall4.ogg diff --git a/sound/effects/bonk.ogg b/sound/effects/bonk.ogg new file mode 100644 index 0000000000000..709078c1efb47 Binary files /dev/null and b/sound/effects/bonk.ogg differ diff --git a/sound/effects/bubbles.ogg b/sound/effects/bubbles/bubbles.ogg similarity index 100% rename from sound/effects/bubbles.ogg rename to sound/effects/bubbles/bubbles.ogg diff --git a/sound/effects/bubbles2.ogg b/sound/effects/bubbles/bubbles2.ogg similarity index 100% rename from sound/effects/bubbles2.ogg rename to sound/effects/bubbles/bubbles2.ogg diff --git a/sound/effects/crunchybushwhack1.ogg b/sound/effects/bush/crunchybushwhack1.ogg similarity index 100% rename from sound/effects/crunchybushwhack1.ogg rename to sound/effects/bush/crunchybushwhack1.ogg diff --git a/sound/effects/crunchybushwhack2.ogg b/sound/effects/bush/crunchybushwhack2.ogg similarity index 100% rename from sound/effects/crunchybushwhack2.ogg rename to sound/effects/bush/crunchybushwhack2.ogg diff --git a/sound/effects/crunchybushwhack3.ogg b/sound/effects/bush/crunchybushwhack3.ogg similarity index 100% rename from sound/effects/crunchybushwhack3.ogg rename to sound/effects/bush/crunchybushwhack3.ogg diff --git a/sound/effects/can_open1.ogg b/sound/effects/can/can_open1.ogg similarity index 100% rename from sound/effects/can_open1.ogg rename to sound/effects/can/can_open1.ogg diff --git a/sound/effects/can_open2.ogg b/sound/effects/can/can_open2.ogg similarity index 100% rename from sound/effects/can_open2.ogg rename to sound/effects/can/can_open2.ogg diff --git a/sound/effects/can_open3.ogg b/sound/effects/can/can_open3.ogg similarity index 100% rename from sound/effects/can_open3.ogg rename to sound/effects/can/can_open3.ogg diff --git a/sound/effects/can_pop.ogg b/sound/effects/can/can_pop.ogg similarity index 100% rename from sound/effects/can_pop.ogg rename to sound/effects/can/can_pop.ogg diff --git a/sound/effects/can_shake.ogg b/sound/effects/can/can_shake.ogg similarity index 100% rename from sound/effects/can_shake.ogg rename to sound/effects/can/can_shake.ogg diff --git a/sound/effects/cartoon_pop.ogg b/sound/effects/cartoon_sfx/cartoon_pop.ogg similarity index 100% rename from sound/effects/cartoon_pop.ogg rename to sound/effects/cartoon_sfx/cartoon_pop.ogg diff --git a/sound/effects/cartoon_splat.ogg b/sound/effects/cartoon_sfx/cartoon_splat.ogg similarity index 100% rename from sound/effects/cartoon_splat.ogg rename to sound/effects/cartoon_sfx/cartoon_splat.ogg diff --git a/sound/chemistry/SoundSources.txt b/sound/effects/chemistry/SoundSources.txt similarity index 100% rename from sound/chemistry/SoundSources.txt rename to sound/effects/chemistry/SoundSources.txt diff --git a/sound/chemistry/ahaha.ogg b/sound/effects/chemistry/ahaha.ogg similarity index 100% rename from sound/chemistry/ahaha.ogg rename to sound/effects/chemistry/ahaha.ogg diff --git a/sound/chemistry/bluespace.ogg b/sound/effects/chemistry/bluespace.ogg similarity index 100% rename from sound/chemistry/bluespace.ogg rename to sound/effects/chemistry/bluespace.ogg diff --git a/sound/chemistry/bufferadd.ogg b/sound/effects/chemistry/bufferadd.ogg similarity index 100% rename from sound/chemistry/bufferadd.ogg rename to sound/effects/chemistry/bufferadd.ogg diff --git a/sound/chemistry/catalyst.ogg b/sound/effects/chemistry/catalyst.ogg similarity index 100% rename from sound/chemistry/catalyst.ogg rename to sound/effects/chemistry/catalyst.ogg diff --git a/sound/chemistry/heatdam.ogg b/sound/effects/chemistry/heatdam.ogg similarity index 100% rename from sound/chemistry/heatdam.ogg rename to sound/effects/chemistry/heatdam.ogg diff --git a/sound/chemistry/saturnx_fade.ogg b/sound/effects/chemistry/saturnx_fade.ogg similarity index 100% rename from sound/chemistry/saturnx_fade.ogg rename to sound/effects/chemistry/saturnx_fade.ogg diff --git a/sound/chemistry/shockwave_explosion.ogg b/sound/effects/chemistry/shockwave_explosion.ogg similarity index 100% rename from sound/chemistry/shockwave_explosion.ogg rename to sound/effects/chemistry/shockwave_explosion.ogg diff --git a/sound/effects/compressed_air/attribution.txt b/sound/effects/compressed_air/attribution.txt new file mode 100644 index 0000000000000..1eff1ab751225 --- /dev/null +++ b/sound/effects/compressed_air/attribution.txt @@ -0,0 +1,9 @@ +compressed_air1.ogg is taken from Freesound and converted to ogg: +https://freesound.org/people/Geoff-Bremner-Audio/sounds/682952/ +compressed_air2.ogg is taken from Freesound and converted to ogg: +https://freesound.org/people/Geoff-Bremner-Audio/sounds/682816/ +tank_insert_clunky.ogg was created by mixing compressed_air1 and clunk sound from Freesound: +https://freesound.org/people/BinaryMonkFlint/sounds/333296/ +tank_remove_thunk.ogg was made by mixing two sound tracks from Freesound: +https://freesound.org/people/lowdjinn/sounds/533885/ and; +https://freesound.org/people/BMacZero/sounds/96137/ diff --git a/sound/effects/compressed_air1.ogg b/sound/effects/compressed_air/compressed_air1.ogg similarity index 100% rename from sound/effects/compressed_air1.ogg rename to sound/effects/compressed_air/compressed_air1.ogg diff --git a/sound/effects/compressed_air2.ogg b/sound/effects/compressed_air/compressed_air2.ogg similarity index 100% rename from sound/effects/compressed_air2.ogg rename to sound/effects/compressed_air/compressed_air2.ogg diff --git a/sound/effects/tank_insert_clunky.ogg b/sound/effects/compressed_air/tank_insert_clunky.ogg similarity index 100% rename from sound/effects/tank_insert_clunky.ogg rename to sound/effects/compressed_air/tank_insert_clunky.ogg diff --git a/sound/effects/tank_remove_thunk.ogg b/sound/effects/compressed_air/tank_remove_thunk.ogg similarity index 100% rename from sound/effects/tank_remove_thunk.ogg rename to sound/effects/compressed_air/tank_remove_thunk.ogg diff --git a/sound/effects/creak1.ogg b/sound/effects/creak/creak1.ogg similarity index 100% rename from sound/effects/creak1.ogg rename to sound/effects/creak/creak1.ogg diff --git a/sound/effects/creak2.ogg b/sound/effects/creak/creak2.ogg similarity index 100% rename from sound/effects/creak2.ogg rename to sound/effects/creak/creak2.ogg diff --git a/sound/effects/creak3.ogg b/sound/effects/creak/creak3.ogg similarity index 100% rename from sound/effects/creak3.ogg rename to sound/effects/creak/creak3.ogg diff --git a/sound/effects/curse1.ogg b/sound/effects/curse/curse1.ogg similarity index 100% rename from sound/effects/curse1.ogg rename to sound/effects/curse/curse1.ogg diff --git a/sound/effects/curse2.ogg b/sound/effects/curse/curse2.ogg similarity index 100% rename from sound/effects/curse2.ogg rename to sound/effects/curse/curse2.ogg diff --git a/sound/effects/curse3.ogg b/sound/effects/curse/curse3.ogg similarity index 100% rename from sound/effects/curse3.ogg rename to sound/effects/curse/curse3.ogg diff --git a/sound/effects/curse4.ogg b/sound/effects/curse/curse4.ogg similarity index 100% rename from sound/effects/curse4.ogg rename to sound/effects/curse/curse4.ogg diff --git a/sound/effects/curse5.ogg b/sound/effects/curse/curse5.ogg similarity index 100% rename from sound/effects/curse5.ogg rename to sound/effects/curse/curse5.ogg diff --git a/sound/effects/curse6.ogg b/sound/effects/curse/curse6.ogg similarity index 100% rename from sound/effects/curse6.ogg rename to sound/effects/curse/curse6.ogg diff --git a/sound/effects/curseattack.ogg b/sound/effects/curse/curseattack.ogg similarity index 100% rename from sound/effects/curseattack.ogg rename to sound/effects/curse/curseattack.ogg diff --git a/sound/misc/desecration-01.ogg b/sound/effects/desecration/desecration-01.ogg similarity index 100% rename from sound/misc/desecration-01.ogg rename to sound/effects/desecration/desecration-01.ogg diff --git a/sound/misc/desecration-02.ogg b/sound/effects/desecration/desecration-02.ogg similarity index 100% rename from sound/misc/desecration-02.ogg rename to sound/effects/desecration/desecration-02.ogg diff --git a/sound/misc/desecration-03.ogg b/sound/effects/desecration/desecration-03.ogg similarity index 100% rename from sound/misc/desecration-03.ogg rename to sound/effects/desecration/desecration-03.ogg diff --git a/sound/effects/assslap.ogg b/sound/effects/emotes/assslap.ogg similarity index 100% rename from sound/effects/assslap.ogg rename to sound/effects/emotes/assslap.ogg diff --git a/sound/effects/kiss.ogg b/sound/effects/emotes/kiss.ogg similarity index 100% rename from sound/effects/kiss.ogg rename to sound/effects/emotes/kiss.ogg diff --git a/sound/effects/energyshieldbash.ogg b/sound/effects/energyshieldbash.ogg new file mode 100644 index 0000000000000..c8d5bee557222 Binary files /dev/null and b/sound/effects/energyshieldbash.ogg differ diff --git a/sound/effects/explosion1.ogg b/sound/effects/explosion/explosion1.ogg similarity index 100% rename from sound/effects/explosion1.ogg rename to sound/effects/explosion/explosion1.ogg diff --git a/sound/effects/explosion2.ogg b/sound/effects/explosion/explosion2.ogg similarity index 100% rename from sound/effects/explosion2.ogg rename to sound/effects/explosion/explosion2.ogg diff --git a/sound/effects/explosion3.ogg b/sound/effects/explosion/explosion3.ogg similarity index 100% rename from sound/effects/explosion3.ogg rename to sound/effects/explosion/explosion3.ogg diff --git a/sound/effects/explosion_distant.ogg b/sound/effects/explosion/explosion_distant.ogg similarity index 100% rename from sound/effects/explosion_distant.ogg rename to sound/effects/explosion/explosion_distant.ogg diff --git a/sound/effects/explosioncreak1.ogg b/sound/effects/explosion/explosioncreak1.ogg similarity index 100% rename from sound/effects/explosioncreak1.ogg rename to sound/effects/explosion/explosioncreak1.ogg diff --git a/sound/effects/explosioncreak2.ogg b/sound/effects/explosion/explosioncreak2.ogg similarity index 100% rename from sound/effects/explosioncreak2.ogg rename to sound/effects/explosion/explosioncreak2.ogg diff --git a/sound/effects/explosionfar.ogg b/sound/effects/explosion/explosionfar.ogg similarity index 100% rename from sound/effects/explosionfar.ogg rename to sound/effects/explosion/explosionfar.ogg diff --git a/sound/effects/water1.ogg b/sound/effects/footstep/water/water1.ogg similarity index 100% rename from sound/effects/water1.ogg rename to sound/effects/footstep/water/water1.ogg diff --git a/sound/effects/water2.ogg b/sound/effects/footstep/water/water2.ogg similarity index 100% rename from sound/effects/water2.ogg rename to sound/effects/footstep/water/water2.ogg diff --git a/sound/effects/water3.ogg b/sound/effects/footstep/water/water3.ogg similarity index 100% rename from sound/effects/water3.ogg rename to sound/effects/footstep/water/water3.ogg diff --git a/sound/effects/water4.ogg b/sound/effects/footstep/water/water4.ogg similarity index 100% rename from sound/effects/water4.ogg rename to sound/effects/footstep/water/water4.ogg diff --git a/sound/effects/glass/glass_reverse.ogg b/sound/effects/glass/glass_reverse.ogg new file mode 100644 index 0000000000000..af1492d9b86b4 Binary files /dev/null and b/sound/effects/glass/glass_reverse.ogg differ diff --git a/sound/effects/glassbash.ogg b/sound/effects/glass/glassbash.ogg similarity index 100% rename from sound/effects/glassbash.ogg rename to sound/effects/glass/glassbash.ogg diff --git a/sound/effects/glassbr1.ogg b/sound/effects/glass/glassbr1.ogg similarity index 100% rename from sound/effects/glassbr1.ogg rename to sound/effects/glass/glassbr1.ogg diff --git a/sound/effects/glassbr2.ogg b/sound/effects/glass/glassbr2.ogg similarity index 100% rename from sound/effects/glassbr2.ogg rename to sound/effects/glass/glassbr2.ogg diff --git a/sound/effects/glassbr3.ogg b/sound/effects/glass/glassbr3.ogg similarity index 100% rename from sound/effects/glassbr3.ogg rename to sound/effects/glass/glassbr3.ogg diff --git a/sound/effects/glasshit.ogg b/sound/effects/glass/glasshit.ogg similarity index 100% rename from sound/effects/glasshit.ogg rename to sound/effects/glass/glasshit.ogg diff --git a/sound/effects/glassknock.ogg b/sound/effects/glass/glassknock.ogg similarity index 100% rename from sound/effects/glassknock.ogg rename to sound/effects/glass/glassknock.ogg diff --git a/sound/hallucinations/behind_you1.ogg b/sound/effects/hallucinations/behind_you1.ogg similarity index 100% rename from sound/hallucinations/behind_you1.ogg rename to sound/effects/hallucinations/behind_you1.ogg diff --git a/sound/hallucinations/behind_you2.ogg b/sound/effects/hallucinations/behind_you2.ogg similarity index 100% rename from sound/hallucinations/behind_you2.ogg rename to sound/effects/hallucinations/behind_you2.ogg diff --git a/sound/hallucinations/far_noise.ogg b/sound/effects/hallucinations/far_noise.ogg similarity index 100% rename from sound/hallucinations/far_noise.ogg rename to sound/effects/hallucinations/far_noise.ogg diff --git a/sound/hallucinations/growl1.ogg b/sound/effects/hallucinations/growl1.ogg similarity index 100% rename from sound/hallucinations/growl1.ogg rename to sound/effects/hallucinations/growl1.ogg diff --git a/sound/hallucinations/growl2.ogg b/sound/effects/hallucinations/growl2.ogg similarity index 100% rename from sound/hallucinations/growl2.ogg rename to sound/effects/hallucinations/growl2.ogg diff --git a/sound/hallucinations/growl3.ogg b/sound/effects/hallucinations/growl3.ogg similarity index 100% rename from sound/hallucinations/growl3.ogg rename to sound/effects/hallucinations/growl3.ogg diff --git a/sound/hallucinations/i_see_you1.ogg b/sound/effects/hallucinations/i_see_you1.ogg similarity index 100% rename from sound/hallucinations/i_see_you1.ogg rename to sound/effects/hallucinations/i_see_you1.ogg diff --git a/sound/hallucinations/i_see_you2.ogg b/sound/effects/hallucinations/i_see_you2.ogg similarity index 100% rename from sound/hallucinations/i_see_you2.ogg rename to sound/effects/hallucinations/i_see_you2.ogg diff --git a/sound/hallucinations/im_here1.ogg b/sound/effects/hallucinations/im_here1.ogg similarity index 100% rename from sound/hallucinations/im_here1.ogg rename to sound/effects/hallucinations/im_here1.ogg diff --git a/sound/hallucinations/im_here2.ogg b/sound/effects/hallucinations/im_here2.ogg similarity index 100% rename from sound/hallucinations/im_here2.ogg rename to sound/effects/hallucinations/im_here2.ogg diff --git a/sound/hallucinations/look_up1.ogg b/sound/effects/hallucinations/look_up1.ogg similarity index 100% rename from sound/hallucinations/look_up1.ogg rename to sound/effects/hallucinations/look_up1.ogg diff --git a/sound/hallucinations/look_up2.ogg b/sound/effects/hallucinations/look_up2.ogg similarity index 100% rename from sound/hallucinations/look_up2.ogg rename to sound/effects/hallucinations/look_up2.ogg diff --git a/sound/hallucinations/over_here1.ogg b/sound/effects/hallucinations/over_here1.ogg similarity index 100% rename from sound/hallucinations/over_here1.ogg rename to sound/effects/hallucinations/over_here1.ogg diff --git a/sound/hallucinations/over_here2.ogg b/sound/effects/hallucinations/over_here2.ogg similarity index 100% rename from sound/hallucinations/over_here2.ogg rename to sound/effects/hallucinations/over_here2.ogg diff --git a/sound/hallucinations/over_here3.ogg b/sound/effects/hallucinations/over_here3.ogg similarity index 100% rename from sound/hallucinations/over_here3.ogg rename to sound/effects/hallucinations/over_here3.ogg diff --git a/sound/hallucinations/radio_static.ogg b/sound/effects/hallucinations/radio_static.ogg similarity index 100% rename from sound/hallucinations/radio_static.ogg rename to sound/effects/hallucinations/radio_static.ogg diff --git a/sound/hallucinations/turn_around1.ogg b/sound/effects/hallucinations/turn_around1.ogg similarity index 100% rename from sound/hallucinations/turn_around1.ogg rename to sound/effects/hallucinations/turn_around1.ogg diff --git a/sound/hallucinations/turn_around2.ogg b/sound/effects/hallucinations/turn_around2.ogg similarity index 100% rename from sound/hallucinations/turn_around2.ogg rename to sound/effects/hallucinations/turn_around2.ogg diff --git a/sound/hallucinations/veryfar_noise.ogg b/sound/effects/hallucinations/veryfar_noise.ogg similarity index 100% rename from sound/hallucinations/veryfar_noise.ogg rename to sound/effects/hallucinations/veryfar_noise.ogg diff --git a/sound/hallucinations/wail.ogg b/sound/effects/hallucinations/wail.ogg similarity index 100% rename from sound/hallucinations/wail.ogg rename to sound/effects/hallucinations/wail.ogg diff --git a/sound/health/fastbeat.ogg b/sound/effects/health/fastbeat.ogg similarity index 100% rename from sound/health/fastbeat.ogg rename to sound/effects/health/fastbeat.ogg diff --git a/sound/health/slowbeat.ogg b/sound/effects/health/slowbeat.ogg similarity index 100% rename from sound/health/slowbeat.ogg rename to sound/effects/health/slowbeat.ogg diff --git a/sound/effects/his_grace_ascend.ogg b/sound/effects/his_grace/his_grace_ascend.ogg similarity index 100% rename from sound/effects/his_grace_ascend.ogg rename to sound/effects/his_grace/his_grace_ascend.ogg diff --git a/sound/effects/his_grace_awaken.ogg b/sound/effects/his_grace/his_grace_awaken.ogg similarity index 100% rename from sound/effects/his_grace_awaken.ogg rename to sound/effects/his_grace/his_grace_awaken.ogg diff --git a/sound/effects/liquid_pour1.ogg b/sound/effects/liquid_pour/liquid_pour1.ogg similarity index 100% rename from sound/effects/liquid_pour1.ogg rename to sound/effects/liquid_pour/liquid_pour1.ogg diff --git a/sound/effects/liquid_pour2.ogg b/sound/effects/liquid_pour/liquid_pour2.ogg similarity index 100% rename from sound/effects/liquid_pour2.ogg rename to sound/effects/liquid_pour/liquid_pour2.ogg diff --git a/sound/effects/liquid_pour3.ogg b/sound/effects/liquid_pour/liquid_pour3.ogg similarity index 100% rename from sound/effects/liquid_pour3.ogg rename to sound/effects/liquid_pour/liquid_pour3.ogg diff --git a/sound/magic/RATTLEMEBONES.ogg b/sound/effects/magic/RATTLEMEBONES.ogg similarity index 100% rename from sound/magic/RATTLEMEBONES.ogg rename to sound/effects/magic/RATTLEMEBONES.ogg diff --git a/sound/magic/RATTLEMEBONES2.ogg b/sound/effects/magic/RATTLEMEBONES2.ogg similarity index 100% rename from sound/magic/RATTLEMEBONES2.ogg rename to sound/effects/magic/RATTLEMEBONES2.ogg diff --git a/sound/effects/magic/VoidDeflect01.ogg b/sound/effects/magic/VoidDeflect01.ogg new file mode 100644 index 0000000000000..53b96d1ba8daa Binary files /dev/null and b/sound/effects/magic/VoidDeflect01.ogg differ diff --git a/sound/effects/magic/VoidDeflect02.ogg b/sound/effects/magic/VoidDeflect02.ogg new file mode 100644 index 0000000000000..feac14b57220a Binary files /dev/null and b/sound/effects/magic/VoidDeflect02.ogg differ diff --git a/sound/effects/magic/VoidDeflect03.ogg b/sound/effects/magic/VoidDeflect03.ogg new file mode 100644 index 0000000000000..3f55c4bea73d6 Binary files /dev/null and b/sound/effects/magic/VoidDeflect03.ogg differ diff --git a/sound/magic/blind.ogg b/sound/effects/magic/blind.ogg similarity index 100% rename from sound/magic/blind.ogg rename to sound/effects/magic/blind.ogg diff --git a/sound/magic/blink.ogg b/sound/effects/magic/blink.ogg similarity index 100% rename from sound/magic/blink.ogg rename to sound/effects/magic/blink.ogg diff --git a/sound/magic/castsummon.ogg b/sound/effects/magic/castsummon.ogg similarity index 100% rename from sound/magic/castsummon.ogg rename to sound/effects/magic/castsummon.ogg diff --git a/sound/magic/charge.ogg b/sound/effects/magic/charge.ogg similarity index 100% rename from sound/magic/charge.ogg rename to sound/effects/magic/charge.ogg diff --git a/sound/magic/clockwork/anima_fragment_attack.ogg b/sound/effects/magic/clockwork/anima_fragment_attack.ogg similarity index 100% rename from sound/magic/clockwork/anima_fragment_attack.ogg rename to sound/effects/magic/clockwork/anima_fragment_attack.ogg diff --git a/sound/magic/clockwork/anima_fragment_death.ogg b/sound/effects/magic/clockwork/anima_fragment_death.ogg similarity index 100% rename from sound/magic/clockwork/anima_fragment_death.ogg rename to sound/effects/magic/clockwork/anima_fragment_death.ogg diff --git a/sound/magic/clockwork/ark_activation.ogg b/sound/effects/magic/clockwork/ark_activation.ogg similarity index 100% rename from sound/magic/clockwork/ark_activation.ogg rename to sound/effects/magic/clockwork/ark_activation.ogg diff --git a/sound/magic/clockwork/ark_activation_sequence.ogg b/sound/effects/magic/clockwork/ark_activation_sequence.ogg similarity index 100% rename from sound/magic/clockwork/ark_activation_sequence.ogg rename to sound/effects/magic/clockwork/ark_activation_sequence.ogg diff --git a/sound/magic/clockwork/credit.txt b/sound/effects/magic/clockwork/credit.txt similarity index 100% rename from sound/magic/clockwork/credit.txt rename to sound/effects/magic/clockwork/credit.txt diff --git a/sound/magic/clockwork/fellowship_armory.ogg b/sound/effects/magic/clockwork/fellowship_armory.ogg similarity index 100% rename from sound/magic/clockwork/fellowship_armory.ogg rename to sound/effects/magic/clockwork/fellowship_armory.ogg diff --git a/sound/magic/clockwork/invoke_general.ogg b/sound/effects/magic/clockwork/invoke_general.ogg similarity index 100% rename from sound/magic/clockwork/invoke_general.ogg rename to sound/effects/magic/clockwork/invoke_general.ogg diff --git a/sound/magic/clockwork/narsie_attack.ogg b/sound/effects/magic/clockwork/narsie_attack.ogg similarity index 100% rename from sound/magic/clockwork/narsie_attack.ogg rename to sound/effects/magic/clockwork/narsie_attack.ogg diff --git a/sound/magic/clockwork/ratvar_attack.ogg b/sound/effects/magic/clockwork/ratvar_attack.ogg similarity index 100% rename from sound/magic/clockwork/ratvar_attack.ogg rename to sound/effects/magic/clockwork/ratvar_attack.ogg diff --git a/sound/magic/cosmic_energy.ogg b/sound/effects/magic/cosmic_energy.ogg similarity index 100% rename from sound/magic/cosmic_energy.ogg rename to sound/effects/magic/cosmic_energy.ogg diff --git a/sound/magic/cosmic_expansion.ogg b/sound/effects/magic/cosmic_expansion.ogg similarity index 100% rename from sound/magic/cosmic_expansion.ogg rename to sound/effects/magic/cosmic_expansion.ogg diff --git a/sound/magic/cowhead_curse.ogg b/sound/effects/magic/cowhead_curse.ogg similarity index 100% rename from sound/magic/cowhead_curse.ogg rename to sound/effects/magic/cowhead_curse.ogg diff --git a/sound/magic/curse.ogg b/sound/effects/magic/curse.ogg similarity index 100% rename from sound/magic/curse.ogg rename to sound/effects/magic/curse.ogg diff --git a/sound/magic/demon_attack1.ogg b/sound/effects/magic/demon_attack1.ogg similarity index 100% rename from sound/magic/demon_attack1.ogg rename to sound/effects/magic/demon_attack1.ogg diff --git a/sound/magic/demon_consume.ogg b/sound/effects/magic/demon_consume.ogg similarity index 100% rename from sound/magic/demon_consume.ogg rename to sound/effects/magic/demon_consume.ogg diff --git a/sound/magic/demon_dies.ogg b/sound/effects/magic/demon_dies.ogg similarity index 100% rename from sound/magic/demon_dies.ogg rename to sound/effects/magic/demon_dies.ogg diff --git a/sound/magic/disable_tech.ogg b/sound/effects/magic/disable_tech.ogg similarity index 100% rename from sound/magic/disable_tech.ogg rename to sound/effects/magic/disable_tech.ogg diff --git a/sound/magic/disintegrate.ogg b/sound/effects/magic/disintegrate.ogg similarity index 100% rename from sound/magic/disintegrate.ogg rename to sound/effects/magic/disintegrate.ogg diff --git a/sound/magic/enter_blood.ogg b/sound/effects/magic/enter_blood.ogg similarity index 100% rename from sound/magic/enter_blood.ogg rename to sound/effects/magic/enter_blood.ogg diff --git a/sound/magic/ethereal_enter.ogg b/sound/effects/magic/ethereal_enter.ogg similarity index 100% rename from sound/magic/ethereal_enter.ogg rename to sound/effects/magic/ethereal_enter.ogg diff --git a/sound/magic/ethereal_exit.ogg b/sound/effects/magic/ethereal_exit.ogg similarity index 100% rename from sound/magic/ethereal_exit.ogg rename to sound/effects/magic/ethereal_exit.ogg diff --git a/sound/magic/exit_blood.ogg b/sound/effects/magic/exit_blood.ogg similarity index 100% rename from sound/magic/exit_blood.ogg rename to sound/effects/magic/exit_blood.ogg diff --git a/sound/magic/fireball.ogg b/sound/effects/magic/fireball.ogg similarity index 100% rename from sound/magic/fireball.ogg rename to sound/effects/magic/fireball.ogg diff --git a/sound/magic/fleshtostone.ogg b/sound/effects/magic/fleshtostone.ogg similarity index 100% rename from sound/magic/fleshtostone.ogg rename to sound/effects/magic/fleshtostone.ogg diff --git a/sound/magic/forcewall.ogg b/sound/effects/magic/forcewall.ogg similarity index 100% rename from sound/magic/forcewall.ogg rename to sound/effects/magic/forcewall.ogg diff --git a/sound/magic/hereticknock.ogg b/sound/effects/magic/hereticknock.ogg similarity index 100% rename from sound/magic/hereticknock.ogg rename to sound/effects/magic/hereticknock.ogg diff --git a/sound/magic/horsehead_curse.ogg b/sound/effects/magic/horsehead_curse.ogg similarity index 100% rename from sound/magic/horsehead_curse.ogg rename to sound/effects/magic/horsehead_curse.ogg diff --git a/sound/magic/knock.ogg b/sound/effects/magic/knock.ogg similarity index 100% rename from sound/magic/knock.ogg rename to sound/effects/magic/knock.ogg diff --git a/sound/magic/lightning_chargeup.ogg b/sound/effects/magic/lightning_chargeup.ogg similarity index 100% rename from sound/magic/lightning_chargeup.ogg rename to sound/effects/magic/lightning_chargeup.ogg diff --git a/sound/magic/lightningbolt.ogg b/sound/effects/magic/lightningbolt.ogg similarity index 100% rename from sound/magic/lightningbolt.ogg rename to sound/effects/magic/lightningbolt.ogg diff --git a/sound/magic/lightningshock.ogg b/sound/effects/magic/lightningshock.ogg similarity index 100% rename from sound/magic/lightningshock.ogg rename to sound/effects/magic/lightningshock.ogg diff --git a/sound/magic/magic_block.ogg b/sound/effects/magic/magic_block.ogg similarity index 100% rename from sound/magic/magic_block.ogg rename to sound/effects/magic/magic_block.ogg diff --git a/sound/magic/magic_block_holy.ogg b/sound/effects/magic/magic_block_holy.ogg similarity index 100% rename from sound/magic/magic_block_holy.ogg rename to sound/effects/magic/magic_block_holy.ogg diff --git a/sound/magic/magic_block_mind.ogg b/sound/effects/magic/magic_block_mind.ogg similarity index 100% rename from sound/magic/magic_block_mind.ogg rename to sound/effects/magic/magic_block_mind.ogg diff --git a/sound/magic/magic_missile.ogg b/sound/effects/magic/magic_missile.ogg similarity index 100% rename from sound/magic/magic_missile.ogg rename to sound/effects/magic/magic_missile.ogg diff --git a/sound/magic/mandswap.ogg b/sound/effects/magic/mandswap.ogg similarity index 100% rename from sound/magic/mandswap.ogg rename to sound/effects/magic/mandswap.ogg diff --git a/sound/magic/mm_hit.ogg b/sound/effects/magic/mm_hit.ogg similarity index 100% rename from sound/magic/mm_hit.ogg rename to sound/effects/magic/mm_hit.ogg diff --git a/sound/magic/mutate.ogg b/sound/effects/magic/mutate.ogg similarity index 100% rename from sound/magic/mutate.ogg rename to sound/effects/magic/mutate.ogg diff --git a/sound/magic/pantsaltar.ogg b/sound/effects/magic/pantsaltar.ogg similarity index 100% rename from sound/magic/pantsaltar.ogg rename to sound/effects/magic/pantsaltar.ogg diff --git a/sound/magic/pighead_curse.ogg b/sound/effects/magic/pighead_curse.ogg similarity index 100% rename from sound/magic/pighead_curse.ogg rename to sound/effects/magic/pighead_curse.ogg diff --git a/sound/magic/repulse.ogg b/sound/effects/magic/repulse.ogg similarity index 100% rename from sound/magic/repulse.ogg rename to sound/effects/magic/repulse.ogg diff --git a/sound/magic/smoke.ogg b/sound/effects/magic/smoke.ogg similarity index 100% rename from sound/magic/smoke.ogg rename to sound/effects/magic/smoke.ogg diff --git a/sound/magic/staff_animation.ogg b/sound/effects/magic/staff_animation.ogg similarity index 100% rename from sound/magic/staff_animation.ogg rename to sound/effects/magic/staff_animation.ogg diff --git a/sound/magic/staff_change.ogg b/sound/effects/magic/staff_change.ogg similarity index 100% rename from sound/magic/staff_change.ogg rename to sound/effects/magic/staff_change.ogg diff --git a/sound/magic/staff_chaos.ogg b/sound/effects/magic/staff_chaos.ogg similarity index 100% rename from sound/magic/staff_chaos.ogg rename to sound/effects/magic/staff_chaos.ogg diff --git a/sound/magic/staff_door.ogg b/sound/effects/magic/staff_door.ogg similarity index 100% rename from sound/magic/staff_door.ogg rename to sound/effects/magic/staff_door.ogg diff --git a/sound/magic/staff_healing.ogg b/sound/effects/magic/staff_healing.ogg similarity index 100% rename from sound/magic/staff_healing.ogg rename to sound/effects/magic/staff_healing.ogg diff --git a/sound/magic/staff_shrink.ogg b/sound/effects/magic/staff_shrink.ogg similarity index 100% rename from sound/magic/staff_shrink.ogg rename to sound/effects/magic/staff_shrink.ogg diff --git a/sound/magic/summon_guns.ogg b/sound/effects/magic/summon_guns.ogg similarity index 100% rename from sound/magic/summon_guns.ogg rename to sound/effects/magic/summon_guns.ogg diff --git a/sound/magic/summon_karp.ogg b/sound/effects/magic/summon_karp.ogg similarity index 100% rename from sound/magic/summon_karp.ogg rename to sound/effects/magic/summon_karp.ogg diff --git a/sound/magic/summon_magic.ogg b/sound/effects/magic/summon_magic.ogg similarity index 100% rename from sound/magic/summon_magic.ogg rename to sound/effects/magic/summon_magic.ogg diff --git a/sound/magic/summonitems_generic.ogg b/sound/effects/magic/summonitems_generic.ogg similarity index 100% rename from sound/magic/summonitems_generic.ogg rename to sound/effects/magic/summonitems_generic.ogg diff --git a/sound/magic/swap.ogg b/sound/effects/magic/swap.ogg similarity index 100% rename from sound/magic/swap.ogg rename to sound/effects/magic/swap.ogg diff --git a/sound/magic/tail_swing.ogg b/sound/effects/magic/tail_swing.ogg similarity index 100% rename from sound/magic/tail_swing.ogg rename to sound/effects/magic/tail_swing.ogg diff --git a/sound/magic/teleport_app.ogg b/sound/effects/magic/teleport_app.ogg similarity index 100% rename from sound/magic/teleport_app.ogg rename to sound/effects/magic/teleport_app.ogg diff --git a/sound/magic/teleport_diss.ogg b/sound/effects/magic/teleport_diss.ogg similarity index 100% rename from sound/magic/teleport_diss.ogg rename to sound/effects/magic/teleport_diss.ogg diff --git a/sound/magic/timeparadox2.ogg b/sound/effects/magic/timeparadox2.ogg similarity index 100% rename from sound/magic/timeparadox2.ogg rename to sound/effects/magic/timeparadox2.ogg diff --git a/sound/magic/voidblink.ogg b/sound/effects/magic/voidblink.ogg similarity index 100% rename from sound/magic/voidblink.ogg rename to sound/effects/magic/voidblink.ogg diff --git a/sound/magic/wand_teleport.ogg b/sound/effects/magic/wand_teleport.ogg similarity index 100% rename from sound/magic/wand_teleport.ogg rename to sound/effects/magic/wand_teleport.ogg diff --git a/sound/magic/wandodeath.ogg b/sound/effects/magic/wandodeath.ogg similarity index 100% rename from sound/magic/wandodeath.ogg rename to sound/effects/magic/wandodeath.ogg diff --git a/sound/magic/warpwhistle.ogg b/sound/effects/magic/warpwhistle.ogg similarity index 100% rename from sound/magic/warpwhistle.ogg rename to sound/effects/magic/warpwhistle.ogg diff --git a/sound/effects/muffspeech/muffspeech1.ogg b/sound/effects/muffspeech/muffspeech1.ogg new file mode 100644 index 0000000000000..b8b2f5f40b19d Binary files /dev/null and b/sound/effects/muffspeech/muffspeech1.ogg differ diff --git a/sound/effects/muffspeech/muffspeech2.ogg b/sound/effects/muffspeech/muffspeech2.ogg new file mode 100644 index 0000000000000..9ffecadf61e06 Binary files /dev/null and b/sound/effects/muffspeech/muffspeech2.ogg differ diff --git a/sound/effects/muffspeech/muffspeech3.ogg b/sound/effects/muffspeech/muffspeech3.ogg new file mode 100644 index 0000000000000..dff0e567daccc Binary files /dev/null and b/sound/effects/muffspeech/muffspeech3.ogg differ diff --git a/sound/effects/muffspeech/muffspeech4.ogg b/sound/effects/muffspeech/muffspeech4.ogg new file mode 100644 index 0000000000000..4e46c7a707acc Binary files /dev/null and b/sound/effects/muffspeech/muffspeech4.ogg differ diff --git a/sound/effects/muffspeech/muffspeech5.ogg b/sound/effects/muffspeech/muffspeech5.ogg new file mode 100644 index 0000000000000..ff1c9948c5621 Binary files /dev/null and b/sound/effects/muffspeech/muffspeech5.ogg differ diff --git a/sound/effects/muffspeech/muffspeech6.ogg b/sound/effects/muffspeech/muffspeech6.ogg new file mode 100644 index 0000000000000..13b70731ac3e0 Binary files /dev/null and b/sound/effects/muffspeech/muffspeech6.ogg differ diff --git a/sound/effects/muffspeech/muffspeech7.ogg b/sound/effects/muffspeech/muffspeech7.ogg new file mode 100644 index 0000000000000..ea566e6ef5872 Binary files /dev/null and b/sound/effects/muffspeech/muffspeech7.ogg differ diff --git a/sound/effects/muffspeech/muffspeech8.ogg b/sound/effects/muffspeech/muffspeech8.ogg new file mode 100644 index 0000000000000..ad51432d2da54 Binary files /dev/null and b/sound/effects/muffspeech/muffspeech8.ogg differ diff --git a/sound/effects/muffspeech/muffspeech9.ogg b/sound/effects/muffspeech/muffspeech9.ogg new file mode 100644 index 0000000000000..5d1be3b745f3e Binary files /dev/null and b/sound/effects/muffspeech/muffspeech9.ogg differ diff --git a/sound/effects/pageturn1.ogg b/sound/effects/page_turn/pageturn1.ogg similarity index 100% rename from sound/effects/pageturn1.ogg rename to sound/effects/page_turn/pageturn1.ogg diff --git a/sound/effects/pageturn2.ogg b/sound/effects/page_turn/pageturn2.ogg similarity index 100% rename from sound/effects/pageturn2.ogg rename to sound/effects/page_turn/pageturn2.ogg diff --git a/sound/effects/pageturn3.ogg b/sound/effects/page_turn/pageturn3.ogg similarity index 100% rename from sound/effects/pageturn3.ogg rename to sound/effects/page_turn/pageturn3.ogg diff --git a/sound/effects/picaxe1.ogg b/sound/effects/pickaxe/picaxe1.ogg similarity index 100% rename from sound/effects/picaxe1.ogg rename to sound/effects/pickaxe/picaxe1.ogg diff --git a/sound/effects/picaxe2.ogg b/sound/effects/pickaxe/picaxe2.ogg similarity index 100% rename from sound/effects/picaxe2.ogg rename to sound/effects/pickaxe/picaxe2.ogg diff --git a/sound/effects/picaxe3.ogg b/sound/effects/pickaxe/picaxe3.ogg similarity index 100% rename from sound/effects/picaxe3.ogg rename to sound/effects/pickaxe/picaxe3.ogg diff --git a/sound/effects/portal_close.ogg b/sound/effects/portal/portal_close.ogg similarity index 100% rename from sound/effects/portal_close.ogg rename to sound/effects/portal/portal_close.ogg diff --git a/sound/effects/portal_open_1.ogg b/sound/effects/portal/portal_open_1.ogg similarity index 100% rename from sound/effects/portal_open_1.ogg rename to sound/effects/portal/portal_open_1.ogg diff --git a/sound/effects/portal_open_2.ogg b/sound/effects/portal/portal_open_2.ogg similarity index 100% rename from sound/effects/portal_open_2.ogg rename to sound/effects/portal/portal_open_2.ogg diff --git a/sound/effects/portal_open_3.ogg b/sound/effects/portal/portal_open_3.ogg similarity index 100% rename from sound/effects/portal_open_3.ogg rename to sound/effects/portal/portal_open_3.ogg diff --git a/sound/effects/portal_travel.ogg b/sound/effects/portal/portal_travel.ogg similarity index 100% rename from sound/effects/portal_travel.ogg rename to sound/effects/portal/portal_travel.ogg diff --git a/sound/effects/rock_break.ogg b/sound/effects/rock/rock_break.ogg similarity index 100% rename from sound/effects/rock_break.ogg rename to sound/effects/rock/rock_break.ogg diff --git a/sound/effects/rocktap1.ogg b/sound/effects/rock/rocktap1.ogg similarity index 100% rename from sound/effects/rocktap1.ogg rename to sound/effects/rock/rocktap1.ogg diff --git a/sound/effects/rocktap2.ogg b/sound/effects/rock/rocktap2.ogg similarity index 100% rename from sound/effects/rocktap2.ogg rename to sound/effects/rock/rocktap2.ogg diff --git a/sound/effects/rocktap3.ogg b/sound/effects/rock/rocktap3.ogg similarity index 100% rename from sound/effects/rocktap3.ogg rename to sound/effects/rock/rocktap3.ogg diff --git a/sound/effects/rustle1.ogg b/sound/effects/rustle/rustle1.ogg similarity index 100% rename from sound/effects/rustle1.ogg rename to sound/effects/rustle/rustle1.ogg diff --git a/sound/effects/rustle2.ogg b/sound/effects/rustle/rustle2.ogg similarity index 100% rename from sound/effects/rustle2.ogg rename to sound/effects/rustle/rustle2.ogg diff --git a/sound/effects/rustle3.ogg b/sound/effects/rustle/rustle3.ogg similarity index 100% rename from sound/effects/rustle3.ogg rename to sound/effects/rustle/rustle3.ogg diff --git a/sound/effects/rustle4.ogg b/sound/effects/rustle/rustle4.ogg similarity index 100% rename from sound/effects/rustle4.ogg rename to sound/effects/rustle/rustle4.ogg diff --git a/sound/effects/rustle5.ogg b/sound/effects/rustle/rustle5.ogg similarity index 100% rename from sound/effects/rustle5.ogg rename to sound/effects/rustle/rustle5.ogg diff --git a/sound/effects/screech.ogg b/sound/effects/screech.ogg index b90f612621e7b..f4adab5e01fd9 100644 Binary files a/sound/effects/screech.ogg and b/sound/effects/screech.ogg differ diff --git a/sound/effects/soup_boil1.ogg b/sound/effects/soup_boil/soup_boil1.ogg similarity index 100% rename from sound/effects/soup_boil1.ogg rename to sound/effects/soup_boil/soup_boil1.ogg diff --git a/sound/effects/soup_boil2.ogg b/sound/effects/soup_boil/soup_boil2.ogg similarity index 100% rename from sound/effects/soup_boil2.ogg rename to sound/effects/soup_boil/soup_boil2.ogg diff --git a/sound/effects/soup_boil3.ogg b/sound/effects/soup_boil/soup_boil3.ogg similarity index 100% rename from sound/effects/soup_boil3.ogg rename to sound/effects/soup_boil/soup_boil3.ogg diff --git a/sound/effects/soup_boil4.ogg b/sound/effects/soup_boil/soup_boil4.ogg similarity index 100% rename from sound/effects/soup_boil4.ogg rename to sound/effects/soup_boil/soup_boil4.ogg diff --git a/sound/effects/soup_boil5.ogg b/sound/effects/soup_boil/soup_boil5.ogg similarity index 100% rename from sound/effects/soup_boil5.ogg rename to sound/effects/soup_boil/soup_boil5.ogg diff --git a/sound/effects/soup_boil_end.ogg b/sound/effects/soup_boil/soup_boil_end.ogg similarity index 100% rename from sound/effects/soup_boil_end.ogg rename to sound/effects/soup_boil/soup_boil_end.ogg diff --git a/sound/effects/sparks1.ogg b/sound/effects/sparks/sparks1.ogg similarity index 100% rename from sound/effects/sparks1.ogg rename to sound/effects/sparks/sparks1.ogg diff --git a/sound/effects/sparks2.ogg b/sound/effects/sparks/sparks2.ogg similarity index 100% rename from sound/effects/sparks2.ogg rename to sound/effects/sparks/sparks2.ogg diff --git a/sound/effects/sparks3.ogg b/sound/effects/sparks/sparks3.ogg similarity index 100% rename from sound/effects/sparks3.ogg rename to sound/effects/sparks/sparks3.ogg diff --git a/sound/effects/sparks4.ogg b/sound/effects/sparks/sparks4.ogg similarity index 100% rename from sound/effects/sparks4.ogg rename to sound/effects/sparks/sparks4.ogg diff --git a/sound/effects/treechop1.ogg b/sound/effects/treechop/treechop1.ogg similarity index 100% rename from sound/effects/treechop1.ogg rename to sound/effects/treechop/treechop1.ogg diff --git a/sound/effects/treechop2.ogg b/sound/effects/treechop/treechop2.ogg similarity index 100% rename from sound/effects/treechop2.ogg rename to sound/effects/treechop/treechop2.ogg diff --git a/sound/effects/treechop3.ogg b/sound/effects/treechop/treechop3.ogg similarity index 100% rename from sound/effects/treechop3.ogg rename to sound/effects/treechop/treechop3.ogg diff --git a/sound/items/airhorn.ogg b/sound/items/airhorn/airhorn.ogg similarity index 100% rename from sound/items/airhorn.ogg rename to sound/items/airhorn/airhorn.ogg diff --git a/sound/items/airhorn2.ogg b/sound/items/airhorn/airhorn2.ogg similarity index 100% rename from sound/items/airhorn2.ogg rename to sound/items/airhorn/airhorn2.ogg diff --git a/sound/items/attributions.txt b/sound/items/attributions.txt index 9a000c39eefa2..7f1dcaabcc467 100644 --- a/sound/items/attributions.txt +++ b/sound/items/attributions.txt @@ -1,13 +1,3 @@ - -{ -cig_light.ogg -cig_snuff.ogg -lighter_on.ogg -lighter_off.ogg -zippo_onn.ogg -zippo_off.ogg -} - Taken from https://github.com/BeeStation/BeeStation-Hornet/pull/29 - pen_click.ogg from https://freesound.org/people/LexzachGames/sounds/431492/ , license: CC0 night_vision_on.ogg by Syna-Max -- https://freesound.org/s/60345/ -- License: Attribution NonCommercial 4.0 @@ -31,8 +21,6 @@ handcuffs_drop.ogg - handcuffs.ogg by kimuracarter -- https://freesound.org/s/52 handcuffs_pick_up.ogg - handcuffs.ogg by kimuracarter -- https://freesound.org/s/528749/ -- License: Attribution 3.0 plastic_shield_drop.ogg - made by sadboysuss -- License: CC-by-SA plastic_shield_pick_up.ogg - made by sadboysuss -- License: CC-by-SA -stun_baton_drop.ogg - Fn P90 Submachine Gun 5.7Mm. Mechan; Empty Mag Inserted Into And Pulled Out Slow And Various 02 by PNMCarrieRailfan -- https://freesound.org/s/682041/ -- License: Attribution NonCommercial 4.0 -stun_baton_pick_up.ogg - Fn P90 Submachine Gun 5.7Mm. Mechan; Empty Mag Inserted Into And Pulled Out Slow And Various 02 by PNMCarrieRailfan -- https://freesound.org/s/682041/ -- License: Attribution NonCommercial 4.0 pepper_spray_drop.ogg - Spray Paint Shake Slow Five.wav by cbakos -- https://freesound.org/s/200376/ -- License: Creative Commons 0 pepper_spray_pick_up.ogg - Spray Paint Shake Slow Five.wav by cbakos -- https://freesound.org/s/200376/ -- License: Creative Commons 0 grenade_drop.ogg - made by sadboysuss -- License: CC-by-SA @@ -65,6 +53,12 @@ toolbox_rustle.ogg - made by sadboysuss medkit_rustle.ogg - made by sadboysuss } - license: CC-by-SA +{ +glove_pick_up.ogg - made by sadboysuss +glove_drop.ogg - made by sadboysuss +} - license: CC-by-SA +glove_equip.ogg - LETHRCreak_Leather Belt Short Creak 01_PF_365 DAYS OF SOUND by itmightgetloud -- https://freesound.org/s/751281/ -- License: Creative Commons 0 + lead_pipe_hit.ogg - jixaw-metal-pipe-falling-sound.mp3 by thenotcheeseman -- https://freesound.org/s/679206/ -- License: Creative Commons 0 lead_pipe_drop.ogg - jixaw-metal-pipe-falling-sound.mp3 by thenotcheeseman -- https://freesound.org/s/679206/ -- License: Creative Commons 0 lead_pipe_pickup.ogg - Metal pipe hitting the ground.flac by CGEffex -- https://freesound.org/s/93962/ -- License: Attribution 4.0 diff --git a/sound/items/baton/attribution.txt b/sound/items/baton/attribution.txt new file mode 100644 index 0000000000000..b580347bf6100 --- /dev/null +++ b/sound/items/baton/attribution.txt @@ -0,0 +1,12 @@ +stun_baton_inactive_drop.ogg - Fn P90 Submachine Gun 5.7Mm. Mechan; Empty Mag Inserted Into And Pulled Out Slow And Various 02 by PNMCarrieRailfan -- https://freesound.org/s/682041/ -- License: Attribution NonCommercial 4.0 +stun_baton_inactive_pickup.ogg - Fn P90 Submachine Gun 5.7Mm. Mechan; Empty Mag Inserted Into And Pulled Out Slow And Various 02 by PNMCarrieRailfan -- https://freesound.org/s/682041/ -- License: Attribution NonCommercial 4.0 +{ +telescopic_baton_folded_drop.ogg +telescopic_baton_folded_pickup.ogg +telescopic_baton_unfolded_drop.ogg +telescopic_baton_unfolded_pickup.ogg +} - made by sadboysuss, license: CC-BY-SA +contractor_baton_unfolded_drop.ogg is spliced with Taser by JavierZumer -- https://freesound.org/s/257236/ -- License: Attribution 4.0 +contractor_baton_unfolded_pickup.ogg is spliced with Taser by JavierZumer -- https://freesound.org/s/257236/ -- License: Attribution 4.0 +stun_baton_active_drop.ogg is stun_baton_inactive_drop.ogg spliced with Taser by JavierZumer -- https://freesound.org/s/257236/ -- License: Attribution 4.0 +stun_baton_active_pickup.ogg is stun_baton_inactive_pickup.ogg spliced with Taser by JavierZumer -- https://freesound.org/s/257236/ -- License: Attribution 4.0 diff --git a/sound/items/baton/contractor_baton_unfolded_drop.ogg b/sound/items/baton/contractor_baton_unfolded_drop.ogg new file mode 100644 index 0000000000000..acebcd9d053c0 Binary files /dev/null and b/sound/items/baton/contractor_baton_unfolded_drop.ogg differ diff --git a/sound/items/baton/contractor_baton_unfolded_pickup.ogg b/sound/items/baton/contractor_baton_unfolded_pickup.ogg new file mode 100644 index 0000000000000..59ebc61163850 Binary files /dev/null and b/sound/items/baton/contractor_baton_unfolded_pickup.ogg differ diff --git a/sound/items/baton/stun_baton_active_drop.ogg b/sound/items/baton/stun_baton_active_drop.ogg new file mode 100644 index 0000000000000..a5e7cc8474948 Binary files /dev/null and b/sound/items/baton/stun_baton_active_drop.ogg differ diff --git a/sound/items/baton/stun_baton_active_pickup.ogg b/sound/items/baton/stun_baton_active_pickup.ogg new file mode 100644 index 0000000000000..3f4908c094556 Binary files /dev/null and b/sound/items/baton/stun_baton_active_pickup.ogg differ diff --git a/sound/items/stun_baton_drop.ogg b/sound/items/baton/stun_baton_inactive_drop.ogg similarity index 100% rename from sound/items/stun_baton_drop.ogg rename to sound/items/baton/stun_baton_inactive_drop.ogg diff --git a/sound/items/stun_baton_pick_up.ogg b/sound/items/baton/stun_baton_inactive_pickup.ogg similarity index 100% rename from sound/items/stun_baton_pick_up.ogg rename to sound/items/baton/stun_baton_inactive_pickup.ogg diff --git a/sound/items/baton/telescopic_baton_folded_drop.ogg b/sound/items/baton/telescopic_baton_folded_drop.ogg new file mode 100644 index 0000000000000..e61d11d0540ed Binary files /dev/null and b/sound/items/baton/telescopic_baton_folded_drop.ogg differ diff --git a/sound/items/baton/telescopic_baton_folded_pickup.ogg b/sound/items/baton/telescopic_baton_folded_pickup.ogg new file mode 100644 index 0000000000000..b0f126a76d683 Binary files /dev/null and b/sound/items/baton/telescopic_baton_folded_pickup.ogg differ diff --git a/sound/items/baton/telescopic_baton_unfolded_drop.ogg b/sound/items/baton/telescopic_baton_unfolded_drop.ogg new file mode 100644 index 0000000000000..dc6a11a90aef2 Binary files /dev/null and b/sound/items/baton/telescopic_baton_unfolded_drop.ogg differ diff --git a/sound/items/baton/telescopic_baton_unfolded_pickup.ogg b/sound/items/baton/telescopic_baton_unfolded_pickup.ogg new file mode 100644 index 0000000000000..2a7eb3d27882b Binary files /dev/null and b/sound/items/baton/telescopic_baton_unfolded_pickup.ogg differ diff --git a/sound/items/cardflip.ogg b/sound/items/cards/cardflip.ogg similarity index 100% rename from sound/items/cardflip.ogg rename to sound/items/cards/cardflip.ogg diff --git a/sound/items/cardshuffle.ogg b/sound/items/cards/cardshuffle.ogg similarity index 100% rename from sound/items/cardshuffle.ogg rename to sound/items/cards/cardshuffle.ogg diff --git a/sound/items/duct_tape_rip.ogg b/sound/items/duct_tape/duct_tape_rip.ogg similarity index 100% rename from sound/items/duct_tape_rip.ogg rename to sound/items/duct_tape/duct_tape_rip.ogg diff --git a/sound/items/duct_tape_snap.ogg b/sound/items/duct_tape/duct_tape_snap.ogg similarity index 100% rename from sound/items/duct_tape_snap.ogg rename to sound/items/duct_tape/duct_tape_snap.ogg diff --git a/sound/items/equip/glove_equip.ogg b/sound/items/equip/glove_equip.ogg new file mode 100644 index 0000000000000..33ab18a5e6e6a Binary files /dev/null and b/sound/items/equip/glove_equip.ogg differ diff --git a/sound/items/fultext_deploy.ogg b/sound/items/fulton/fultext_deploy.ogg similarity index 100% rename from sound/items/fultext_deploy.ogg rename to sound/items/fulton/fultext_deploy.ogg diff --git a/sound/items/fultext_launch.ogg b/sound/items/fulton/fultext_launch.ogg similarity index 100% rename from sound/items/fultext_launch.ogg rename to sound/items/fulton/fultext_launch.ogg diff --git a/sound/items/cardboard_box_open.ogg b/sound/items/handling/cardboard_box/cardboard_box_open.ogg similarity index 100% rename from sound/items/cardboard_box_open.ogg rename to sound/items/handling/cardboard_box/cardboard_box_open.ogg diff --git a/sound/items/cardboard_box_rustle.ogg b/sound/items/handling/cardboard_box/cardboard_box_rustle.ogg similarity index 100% rename from sound/items/cardboard_box_rustle.ogg rename to sound/items/handling/cardboard_box/cardboard_box_rustle.ogg diff --git a/sound/items/handling/cardboardbox_drop.ogg b/sound/items/handling/cardboard_box/cardboardbox_drop.ogg similarity index 100% rename from sound/items/handling/cardboardbox_drop.ogg rename to sound/items/handling/cardboard_box/cardboardbox_drop.ogg diff --git a/sound/items/handling/cardboardbox_pickup.ogg b/sound/items/handling/cardboard_box/cardboardbox_pickup.ogg similarity index 100% rename from sound/items/handling/cardboardbox_pickup.ogg rename to sound/items/handling/cardboard_box/cardboardbox_pickup.ogg diff --git a/sound/items/gas_tank_drop.ogg b/sound/items/handling/gas_tank/gas_tank_drop.ogg similarity index 100% rename from sound/items/gas_tank_drop.ogg rename to sound/items/handling/gas_tank/gas_tank_drop.ogg diff --git a/sound/items/gas_tank_pick_up.ogg b/sound/items/handling/gas_tank/gas_tank_pick_up.ogg similarity index 100% rename from sound/items/gas_tank_pick_up.ogg rename to sound/items/handling/gas_tank/gas_tank_pick_up.ogg diff --git a/sound/items/handling/glove_drop.ogg b/sound/items/handling/glove_drop.ogg new file mode 100644 index 0000000000000..bfd490e94a8ae Binary files /dev/null and b/sound/items/handling/glove_drop.ogg differ diff --git a/sound/items/handling/glove_pick_up.ogg b/sound/items/handling/glove_pick_up.ogg new file mode 100644 index 0000000000000..1fd7de9e6b968 Binary files /dev/null and b/sound/items/handling/glove_pick_up.ogg differ diff --git a/sound/items/grenade_drop.ogg b/sound/items/handling/grenade/grenade_drop.ogg similarity index 100% rename from sound/items/grenade_drop.ogg rename to sound/items/handling/grenade/grenade_drop.ogg diff --git a/sound/items/grenade_pick_up.ogg b/sound/items/handling/grenade/grenade_pick_up.ogg similarity index 100% rename from sound/items/grenade_pick_up.ogg rename to sound/items/handling/grenade/grenade_pick_up.ogg diff --git a/sound/items/gun_drop.ogg b/sound/items/handling/gun/gun_drop.ogg similarity index 100% rename from sound/items/gun_drop.ogg rename to sound/items/handling/gun/gun_drop.ogg diff --git a/sound/items/gun_pick_up.ogg b/sound/items/handling/gun/gun_pick_up.ogg similarity index 100% rename from sound/items/gun_pick_up.ogg rename to sound/items/handling/gun/gun_pick_up.ogg diff --git a/sound/items/handcuffs_drop.ogg b/sound/items/handling/handcuffs/handcuffs_drop.ogg similarity index 100% rename from sound/items/handcuffs_drop.ogg rename to sound/items/handling/handcuffs/handcuffs_drop.ogg diff --git a/sound/items/handcuffs_pick_up.ogg b/sound/items/handling/handcuffs/handcuffs_pick_up.ogg similarity index 100% rename from sound/items/handcuffs_pick_up.ogg rename to sound/items/handling/handcuffs/handcuffs_pick_up.ogg diff --git a/sound/items/holster.ogg b/sound/items/handling/holster_open.ogg similarity index 100% rename from sound/items/holster.ogg rename to sound/items/handling/holster_open.ogg diff --git a/sound/items/handling/lead_pipe/lead_pipe_drop.ogg b/sound/items/handling/lead_pipe/lead_pipe_drop.ogg new file mode 100644 index 0000000000000..63561fc2f950c Binary files /dev/null and b/sound/items/handling/lead_pipe/lead_pipe_drop.ogg differ diff --git a/sound/items/lead_pipe_pickup.ogg b/sound/items/handling/lead_pipe/lead_pipe_pickup.ogg similarity index 100% rename from sound/items/lead_pipe_pickup.ogg rename to sound/items/handling/lead_pipe/lead_pipe_pickup.ogg diff --git a/sound/items/cardboard_drop.ogg b/sound/items/handling/materials/cardboard_drop.ogg similarity index 100% rename from sound/items/cardboard_drop.ogg rename to sound/items/handling/materials/cardboard_drop.ogg diff --git a/sound/items/cardboard_pick_up.ogg b/sound/items/handling/materials/cardboard_pick_up.ogg similarity index 100% rename from sound/items/cardboard_pick_up.ogg rename to sound/items/handling/materials/cardboard_pick_up.ogg diff --git a/sound/items/glass_drop.ogg b/sound/items/handling/materials/glass_drop.ogg similarity index 100% rename from sound/items/glass_drop.ogg rename to sound/items/handling/materials/glass_drop.ogg diff --git a/sound/items/glass_pick_up.ogg b/sound/items/handling/materials/glass_pick_up.ogg similarity index 100% rename from sound/items/glass_pick_up.ogg rename to sound/items/handling/materials/glass_pick_up.ogg diff --git a/sound/items/iron_rod_pick_up.ogg b/sound/items/handling/materials/iron_rod_pick_up.ogg similarity index 100% rename from sound/items/iron_rod_pick_up.ogg rename to sound/items/handling/materials/iron_rod_pick_up.ogg diff --git a/sound/items/metal_drop.ogg b/sound/items/handling/materials/metal_drop.ogg similarity index 100% rename from sound/items/metal_drop.ogg rename to sound/items/handling/materials/metal_drop.ogg diff --git a/sound/items/metal_pick_up.ogg b/sound/items/handling/materials/metal_pick_up.ogg similarity index 100% rename from sound/items/metal_pick_up.ogg rename to sound/items/handling/materials/metal_pick_up.ogg diff --git a/sound/items/plastic_drop.ogg b/sound/items/handling/materials/plastic_drop.ogg similarity index 100% rename from sound/items/plastic_drop.ogg rename to sound/items/handling/materials/plastic_drop.ogg diff --git a/sound/items/plastic_pick_up.ogg b/sound/items/handling/materials/plastic_pick_up.ogg similarity index 100% rename from sound/items/plastic_pick_up.ogg rename to sound/items/handling/materials/plastic_pick_up.ogg diff --git a/sound/items/skin_drop.ogg b/sound/items/handling/materials/skin_drop.ogg similarity index 100% rename from sound/items/skin_drop.ogg rename to sound/items/handling/materials/skin_drop.ogg diff --git a/sound/items/skin_pick_up.ogg b/sound/items/handling/materials/skin_pick_up.ogg similarity index 100% rename from sound/items/skin_pick_up.ogg rename to sound/items/handling/materials/skin_pick_up.ogg diff --git a/sound/items/wood_drop.ogg b/sound/items/handling/materials/wood_drop.ogg similarity index 100% rename from sound/items/wood_drop.ogg rename to sound/items/handling/materials/wood_drop.ogg diff --git a/sound/items/wood_pick_up.ogg b/sound/items/handling/materials/wood_pick_up.ogg similarity index 100% rename from sound/items/wood_pick_up.ogg rename to sound/items/handling/materials/wood_pick_up.ogg diff --git a/sound/items/medkit_drop.ogg b/sound/items/handling/medkit/medkit_drop.ogg similarity index 100% rename from sound/items/medkit_drop.ogg rename to sound/items/handling/medkit/medkit_drop.ogg diff --git a/sound/items/medkit_open.ogg b/sound/items/handling/medkit/medkit_open.ogg similarity index 100% rename from sound/items/medkit_open.ogg rename to sound/items/handling/medkit/medkit_open.ogg diff --git a/sound/items/medkit_pick_up.ogg b/sound/items/handling/medkit/medkit_pick_up.ogg similarity index 100% rename from sound/items/medkit_pick_up.ogg rename to sound/items/handling/medkit/medkit_pick_up.ogg diff --git a/sound/items/medkit_rustle.ogg b/sound/items/handling/medkit/medkit_rustle.ogg similarity index 100% rename from sound/items/medkit_rustle.ogg rename to sound/items/handling/medkit/medkit_rustle.ogg diff --git a/sound/items/pepper_spray_drop.ogg b/sound/items/handling/pepper_spray/pepper_spray_drop.ogg similarity index 100% rename from sound/items/pepper_spray_drop.ogg rename to sound/items/handling/pepper_spray/pepper_spray_drop.ogg diff --git a/sound/items/pepper_spray_pick_up.ogg b/sound/items/handling/pepper_spray/pepper_spray_pick_up.ogg similarity index 100% rename from sound/items/pepper_spray_pick_up.ogg rename to sound/items/handling/pepper_spray/pepper_spray_pick_up.ogg diff --git a/sound/items/handling/readme.txt b/sound/items/handling/readme.txt new file mode 100644 index 0000000000000..699c3a684bcde --- /dev/null +++ b/sound/items/handling/readme.txt @@ -0,0 +1,7 @@ +handling in this case is: +- picking up an item +- dropping an item +- storage item rustle sounds +- storage item open sounds + +please keep it organised! diff --git a/sound/items/plastic_shield_drop.ogg b/sound/items/handling/shield/plastic_shield_drop.ogg similarity index 100% rename from sound/items/plastic_shield_drop.ogg rename to sound/items/handling/shield/plastic_shield_drop.ogg diff --git a/sound/items/plastic_shield_pick_up.ogg b/sound/items/handling/shield/plastic_shield_pick_up.ogg similarity index 100% rename from sound/items/plastic_shield_pick_up.ogg rename to sound/items/handling/shield/plastic_shield_pick_up.ogg diff --git a/sound/surgery/cautery1.ogg b/sound/items/handling/surgery/cautery1.ogg similarity index 100% rename from sound/surgery/cautery1.ogg rename to sound/items/handling/surgery/cautery1.ogg diff --git a/sound/surgery/cautery2.ogg b/sound/items/handling/surgery/cautery2.ogg similarity index 100% rename from sound/surgery/cautery2.ogg rename to sound/items/handling/surgery/cautery2.ogg diff --git a/sound/surgery/hemostat1.ogg b/sound/items/handling/surgery/hemostat1.ogg similarity index 100% rename from sound/surgery/hemostat1.ogg rename to sound/items/handling/surgery/hemostat1.ogg diff --git a/sound/surgery/organ1.ogg b/sound/items/handling/surgery/organ1.ogg similarity index 100% rename from sound/surgery/organ1.ogg rename to sound/items/handling/surgery/organ1.ogg diff --git a/sound/surgery/organ2.ogg b/sound/items/handling/surgery/organ2.ogg similarity index 100% rename from sound/surgery/organ2.ogg rename to sound/items/handling/surgery/organ2.ogg diff --git a/sound/surgery/retractor1.ogg b/sound/items/handling/surgery/retractor1.ogg similarity index 100% rename from sound/surgery/retractor1.ogg rename to sound/items/handling/surgery/retractor1.ogg diff --git a/sound/surgery/retractor2.ogg b/sound/items/handling/surgery/retractor2.ogg similarity index 100% rename from sound/surgery/retractor2.ogg rename to sound/items/handling/surgery/retractor2.ogg diff --git a/sound/surgery/saw.ogg b/sound/items/handling/surgery/saw.ogg similarity index 100% rename from sound/surgery/saw.ogg rename to sound/items/handling/surgery/saw.ogg diff --git a/sound/surgery/scalpel1.ogg b/sound/items/handling/surgery/scalpel1.ogg similarity index 100% rename from sound/surgery/scalpel1.ogg rename to sound/items/handling/surgery/scalpel1.ogg diff --git a/sound/surgery/scalpel2.ogg b/sound/items/handling/surgery/scalpel2.ogg similarity index 100% rename from sound/surgery/scalpel2.ogg rename to sound/items/handling/surgery/scalpel2.ogg diff --git a/sound/items/handling/toolbox_drop.ogg b/sound/items/handling/toolbox/toolbox_drop.ogg similarity index 100% rename from sound/items/handling/toolbox_drop.ogg rename to sound/items/handling/toolbox/toolbox_drop.ogg diff --git a/sound/items/toolbox_open.ogg b/sound/items/handling/toolbox/toolbox_open.ogg similarity index 100% rename from sound/items/toolbox_open.ogg rename to sound/items/handling/toolbox/toolbox_open.ogg diff --git a/sound/items/handling/toolbox_pickup.ogg b/sound/items/handling/toolbox/toolbox_pickup.ogg similarity index 100% rename from sound/items/handling/toolbox_pickup.ogg rename to sound/items/handling/toolbox/toolbox_pickup.ogg diff --git a/sound/items/toolbox_rustle.ogg b/sound/items/handling/toolbox/toolbox_rustle.ogg similarity index 100% rename from sound/items/toolbox_rustle.ogg rename to sound/items/handling/toolbox/toolbox_rustle.ogg diff --git a/sound/items/handling/crowbar_drop.ogg b/sound/items/handling/tools/crowbar_drop.ogg similarity index 100% rename from sound/items/handling/crowbar_drop.ogg rename to sound/items/handling/tools/crowbar_drop.ogg diff --git a/sound/items/handling/crowbar_pickup.ogg b/sound/items/handling/tools/crowbar_pickup.ogg similarity index 100% rename from sound/items/handling/crowbar_pickup.ogg rename to sound/items/handling/tools/crowbar_pickup.ogg diff --git a/sound/items/handling/multitool_drop.ogg b/sound/items/handling/tools/multitool_drop.ogg similarity index 100% rename from sound/items/handling/multitool_drop.ogg rename to sound/items/handling/tools/multitool_drop.ogg diff --git a/sound/items/handling/multitool_pickup.ogg b/sound/items/handling/tools/multitool_pickup.ogg similarity index 100% rename from sound/items/handling/multitool_pickup.ogg rename to sound/items/handling/tools/multitool_pickup.ogg diff --git a/sound/items/handling/rcd_drop.ogg b/sound/items/handling/tools/rcd_drop.ogg similarity index 100% rename from sound/items/handling/rcd_drop.ogg rename to sound/items/handling/tools/rcd_drop.ogg diff --git a/sound/items/handling/rcd_pickup.ogg b/sound/items/handling/tools/rcd_pickup.ogg similarity index 100% rename from sound/items/handling/rcd_pickup.ogg rename to sound/items/handling/tools/rcd_pickup.ogg diff --git a/sound/items/handling/rpd_drop.ogg b/sound/items/handling/tools/rpd_drop.ogg similarity index 100% rename from sound/items/handling/rpd_drop.ogg rename to sound/items/handling/tools/rpd_drop.ogg diff --git a/sound/items/handling/rpd_pickup.ogg b/sound/items/handling/tools/rpd_pickup.ogg similarity index 100% rename from sound/items/handling/rpd_pickup.ogg rename to sound/items/handling/tools/rpd_pickup.ogg diff --git a/sound/items/handling/screwdriver_drop.ogg b/sound/items/handling/tools/screwdriver_drop.ogg similarity index 100% rename from sound/items/handling/screwdriver_drop.ogg rename to sound/items/handling/tools/screwdriver_drop.ogg diff --git a/sound/items/handling/screwdriver_pickup.ogg b/sound/items/handling/tools/screwdriver_pickup.ogg similarity index 100% rename from sound/items/handling/screwdriver_pickup.ogg rename to sound/items/handling/tools/screwdriver_pickup.ogg diff --git a/sound/items/handling/weldingtool_drop.ogg b/sound/items/handling/tools/weldingtool_drop.ogg similarity index 100% rename from sound/items/handling/weldingtool_drop.ogg rename to sound/items/handling/tools/weldingtool_drop.ogg diff --git a/sound/items/handling/weldingtool_pickup.ogg b/sound/items/handling/tools/weldingtool_pickup.ogg similarity index 100% rename from sound/items/handling/weldingtool_pickup.ogg rename to sound/items/handling/tools/weldingtool_pickup.ogg diff --git a/sound/items/handling/wirecutter_drop.ogg b/sound/items/handling/tools/wirecutter_drop.ogg similarity index 100% rename from sound/items/handling/wirecutter_drop.ogg rename to sound/items/handling/tools/wirecutter_drop.ogg diff --git a/sound/items/handling/wirecutter_pickup.ogg b/sound/items/handling/tools/wirecutter_pickup.ogg similarity index 100% rename from sound/items/handling/wirecutter_pickup.ogg rename to sound/items/handling/tools/wirecutter_pickup.ogg diff --git a/sound/items/handling/wrench_drop.ogg b/sound/items/handling/tools/wrench_drop.ogg similarity index 100% rename from sound/items/handling/wrench_drop.ogg rename to sound/items/handling/tools/wrench_drop.ogg diff --git a/sound/items/handling/wrench_pickup.ogg b/sound/items/handling/tools/wrench_pickup.ogg similarity index 100% rename from sound/items/handling/wrench_pickup.ogg rename to sound/items/handling/tools/wrench_pickup.ogg diff --git a/sound/items/internals_off.ogg b/sound/items/internals/internals_off.ogg similarity index 100% rename from sound/items/internals_off.ogg rename to sound/items/internals/internals_off.ogg diff --git a/sound/items/internals_on.ogg b/sound/items/internals/internals_on.ogg similarity index 100% rename from sound/items/internals_on.ogg rename to sound/items/internals/internals_on.ogg diff --git a/sound/items/knell1.ogg b/sound/items/knell/knell1.ogg similarity index 100% rename from sound/items/knell1.ogg rename to sound/items/knell/knell1.ogg diff --git a/sound/items/knell2.ogg b/sound/items/knell/knell2.ogg similarity index 100% rename from sound/items/knell2.ogg rename to sound/items/knell/knell2.ogg diff --git a/sound/items/knell3.ogg b/sound/items/knell/knell3.ogg similarity index 100% rename from sound/items/knell3.ogg rename to sound/items/knell/knell3.ogg diff --git a/sound/items/knell4.ogg b/sound/items/knell/knell4.ogg similarity index 100% rename from sound/items/knell4.ogg rename to sound/items/knell/knell4.ogg diff --git a/sound/items/lead_pipe_drop.ogg b/sound/items/lead_pipe_drop.ogg deleted file mode 100644 index 144d24ca94c7a..0000000000000 Binary files a/sound/items/lead_pipe_drop.ogg and /dev/null differ diff --git a/sound/items/lighter/attribution.txt b/sound/items/lighter/attribution.txt new file mode 100644 index 0000000000000..7ded54c464141 --- /dev/null +++ b/sound/items/lighter/attribution.txt @@ -0,0 +1,8 @@ +{ +cig_light.ogg +cig_snuff.ogg +lighter_on.ogg +lighter_off.ogg +zippo_onn.ogg +zippo_off.ogg +} - Taken from https://github.com/BeeStation/BeeStation-Hornet/pull/29 diff --git a/sound/items/cig_light.ogg b/sound/items/lighter/cig_light.ogg similarity index 100% rename from sound/items/cig_light.ogg rename to sound/items/lighter/cig_light.ogg diff --git a/sound/items/cig_snuff.ogg b/sound/items/lighter/cig_snuff.ogg similarity index 100% rename from sound/items/cig_snuff.ogg rename to sound/items/lighter/cig_snuff.ogg diff --git a/sound/items/lighter_off.ogg b/sound/items/lighter/lighter_off.ogg similarity index 100% rename from sound/items/lighter_off.ogg rename to sound/items/lighter/lighter_off.ogg diff --git a/sound/items/lighter_on.ogg b/sound/items/lighter/lighter_on.ogg similarity index 100% rename from sound/items/lighter_on.ogg rename to sound/items/lighter/lighter_on.ogg diff --git a/sound/items/zippo_off.ogg b/sound/items/lighter/zippo_off.ogg similarity index 100% rename from sound/items/zippo_off.ogg rename to sound/items/lighter/zippo_off.ogg diff --git a/sound/items/zippo_on.ogg b/sound/items/lighter/zippo_on.ogg similarity index 100% rename from sound/items/zippo_on.ogg rename to sound/items/lighter/zippo_on.ogg diff --git a/sound/items/pillow_hit.ogg b/sound/items/pillow/pillow_hit.ogg similarity index 100% rename from sound/items/pillow_hit.ogg rename to sound/items/pillow/pillow_hit.ogg diff --git a/sound/items/pillow_hit2.ogg b/sound/items/pillow/pillow_hit2.ogg similarity index 100% rename from sound/items/pillow_hit2.ogg rename to sound/items/pillow/pillow_hit2.ogg diff --git a/sound/items/polaroid1.ogg b/sound/items/polaroid/polaroid1.ogg similarity index 100% rename from sound/items/polaroid1.ogg rename to sound/items/polaroid/polaroid1.ogg diff --git a/sound/items/polaroid2.ogg b/sound/items/polaroid/polaroid2.ogg similarity index 100% rename from sound/items/polaroid2.ogg rename to sound/items/polaroid/polaroid2.ogg diff --git a/sound/items/poster_being_created.ogg b/sound/items/poster/poster_being_created.ogg similarity index 100% rename from sound/items/poster_being_created.ogg rename to sound/items/poster/poster_being_created.ogg diff --git a/sound/items/poster_ripped.ogg b/sound/items/poster/poster_ripped.ogg similarity index 100% rename from sound/items/poster_ripped.ogg rename to sound/items/poster/poster_ripped.ogg diff --git a/sound/items/pshoom.ogg b/sound/items/pshoom/pshoom.ogg similarity index 100% rename from sound/items/pshoom.ogg rename to sound/items/pshoom/pshoom.ogg diff --git a/sound/items/pshoom_2.ogg b/sound/items/pshoom/pshoom_2.ogg similarity index 100% rename from sound/items/pshoom_2.ogg rename to sound/items/pshoom/pshoom_2.ogg diff --git a/sound/items/radio/attribution.txt b/sound/items/radio/attribution.txt new file mode 100644 index 0000000000000..2f15af96c820b --- /dev/null +++ b/sound/items/radio/attribution.txt @@ -0,0 +1,8 @@ +radio_talk.ogg by cs2975871. Shortened and cut. +https://freesound.org/people/cs2975871/sounds/514185/ + +radio_important.ogg by morganpurkis. +https://freesound.org/people/morganpurkis/sounds/392972/ + +radio_receive.ogg by JovianSounds. Shortened and cut. +https://freesound.org/people/JovianSounds/sounds/524205/ diff --git a/sound/misc/radio_important.ogg b/sound/items/radio/radio_important.ogg similarity index 100% rename from sound/misc/radio_important.ogg rename to sound/items/radio/radio_important.ogg diff --git a/sound/misc/radio_receive.ogg b/sound/items/radio/radio_receive.ogg similarity index 100% rename from sound/misc/radio_receive.ogg rename to sound/items/radio/radio_receive.ogg diff --git a/sound/misc/radio_talk.ogg b/sound/items/radio/radio_talk.ogg similarity index 100% rename from sound/misc/radio_talk.ogg rename to sound/items/radio/radio_talk.ogg diff --git a/sound/items/rattle1.ogg b/sound/items/rattle/rattle1.ogg similarity index 100% rename from sound/items/rattle1.ogg rename to sound/items/rattle/rattle1.ogg diff --git a/sound/items/rattle2.ogg b/sound/items/rattle/rattle2.ogg similarity index 100% rename from sound/items/rattle2.ogg rename to sound/items/rattle/rattle2.ogg diff --git a/sound/items/rattle3.ogg b/sound/items/rattle/rattle3.ogg similarity index 100% rename from sound/items/rattle3.ogg rename to sound/items/rattle/rattle3.ogg diff --git a/sound/items/reel/reel1.ogg b/sound/items/reel/reel1.ogg new file mode 100644 index 0000000000000..2e946f3d5de20 Binary files /dev/null and b/sound/items/reel/reel1.ogg differ diff --git a/sound/items/reel/reel2.ogg b/sound/items/reel/reel2.ogg new file mode 100644 index 0000000000000..574ac3c89b01c Binary files /dev/null and b/sound/items/reel/reel2.ogg differ diff --git a/sound/items/reel/reel3.ogg b/sound/items/reel/reel3.ogg new file mode 100644 index 0000000000000..e1bec8e4b5506 Binary files /dev/null and b/sound/items/reel/reel3.ogg differ diff --git a/sound/items/reel/reel4.ogg b/sound/items/reel/reel4.ogg new file mode 100644 index 0000000000000..64d69620cd85f Binary files /dev/null and b/sound/items/reel/reel4.ogg differ diff --git a/sound/items/reel/reel5.ogg b/sound/items/reel/reel5.ogg new file mode 100644 index 0000000000000..66635bf28d0a8 Binary files /dev/null and b/sound/items/reel/reel5.ogg differ diff --git a/sound/items/reel1.ogg b/sound/items/reel1.ogg deleted file mode 100644 index 0bd2cda89b973..0000000000000 Binary files a/sound/items/reel1.ogg and /dev/null differ diff --git a/sound/items/reel2.ogg b/sound/items/reel2.ogg deleted file mode 100644 index 64d2bc1adb494..0000000000000 Binary files a/sound/items/reel2.ogg and /dev/null differ diff --git a/sound/items/reel3.ogg b/sound/items/reel3.ogg deleted file mode 100644 index a1d89779ec11f..0000000000000 Binary files a/sound/items/reel3.ogg and /dev/null differ diff --git a/sound/items/reel4.ogg b/sound/items/reel4.ogg deleted file mode 100644 index ae9bdb2f5e373..0000000000000 Binary files a/sound/items/reel4.ogg and /dev/null differ diff --git a/sound/items/reel5.ogg b/sound/items/reel5.ogg deleted file mode 100644 index 6c979754a5f86..0000000000000 Binary files a/sound/items/reel5.ogg and /dev/null differ diff --git a/sound/voice/sec_death.ogg b/sound/items/sec_hailer/sec_death.ogg similarity index 100% rename from sound/voice/sec_death.ogg rename to sound/items/sec_hailer/sec_death.ogg diff --git a/sound/items/SitcomLaugh1.ogg b/sound/items/sitcom_laugh/SitcomLaugh1.ogg similarity index 100% rename from sound/items/SitcomLaugh1.ogg rename to sound/items/sitcom_laugh/SitcomLaugh1.ogg diff --git a/sound/items/SitcomLaugh2.ogg b/sound/items/sitcom_laugh/SitcomLaugh2.ogg similarity index 100% rename from sound/items/SitcomLaugh2.ogg rename to sound/items/sitcom_laugh/SitcomLaugh2.ogg diff --git a/sound/items/SitcomLaugh3.ogg b/sound/items/sitcom_laugh/SitcomLaugh3.ogg similarity index 100% rename from sound/items/SitcomLaugh3.ogg rename to sound/items/sitcom_laugh/SitcomLaugh3.ogg diff --git a/sound/items/change_drill.ogg b/sound/items/tools/change_drill.ogg similarity index 100% rename from sound/items/change_drill.ogg rename to sound/items/tools/change_drill.ogg diff --git a/sound/items/change_jaws.ogg b/sound/items/tools/change_jaws.ogg similarity index 100% rename from sound/items/change_jaws.ogg rename to sound/items/tools/change_jaws.ogg diff --git a/sound/items/crowbar.ogg b/sound/items/tools/crowbar.ogg similarity index 100% rename from sound/items/crowbar.ogg rename to sound/items/tools/crowbar.ogg diff --git a/sound/items/crowbar_prying.ogg b/sound/items/tools/crowbar_prying.ogg similarity index 100% rename from sound/items/crowbar_prying.ogg rename to sound/items/tools/crowbar_prying.ogg diff --git a/sound/items/drill_hit.ogg b/sound/items/tools/drill_hit.ogg similarity index 100% rename from sound/items/drill_hit.ogg rename to sound/items/tools/drill_hit.ogg diff --git a/sound/items/drill_use.ogg b/sound/items/tools/drill_use.ogg similarity index 100% rename from sound/items/drill_use.ogg rename to sound/items/tools/drill_use.ogg diff --git a/sound/items/jaws_cut.ogg b/sound/items/tools/jaws_cut.ogg similarity index 100% rename from sound/items/jaws_cut.ogg rename to sound/items/tools/jaws_cut.ogg diff --git a/sound/items/jaws_pry.ogg b/sound/items/tools/jaws_pry.ogg similarity index 100% rename from sound/items/jaws_pry.ogg rename to sound/items/tools/jaws_pry.ogg diff --git a/sound/items/ratchet.ogg b/sound/items/tools/ratchet.ogg similarity index 100% rename from sound/items/ratchet.ogg rename to sound/items/tools/ratchet.ogg diff --git a/sound/items/ratchet_fast.ogg b/sound/items/tools/ratchet_fast.ogg similarity index 100% rename from sound/items/ratchet_fast.ogg rename to sound/items/tools/ratchet_fast.ogg diff --git a/sound/items/ratchet_slow.ogg b/sound/items/tools/ratchet_slow.ogg similarity index 100% rename from sound/items/ratchet_slow.ogg rename to sound/items/tools/ratchet_slow.ogg diff --git a/sound/items/rcdscan.ogg b/sound/items/tools/rcdscan.ogg similarity index 100% rename from sound/items/rcdscan.ogg rename to sound/items/tools/rcdscan.ogg diff --git a/sound/items/rped.ogg b/sound/items/tools/rped.ogg similarity index 100% rename from sound/items/rped.ogg rename to sound/items/tools/rped.ogg diff --git a/sound/items/screwdriver.ogg b/sound/items/tools/screwdriver.ogg similarity index 100% rename from sound/items/screwdriver.ogg rename to sound/items/tools/screwdriver.ogg diff --git a/sound/items/screwdriver2.ogg b/sound/items/tools/screwdriver2.ogg similarity index 100% rename from sound/items/screwdriver2.ogg rename to sound/items/tools/screwdriver2.ogg diff --git a/sound/items/screwdriver_operating.ogg b/sound/items/tools/screwdriver_operating.ogg similarity index 100% rename from sound/items/screwdriver_operating.ogg rename to sound/items/tools/screwdriver_operating.ogg diff --git a/sound/items/handling/tool_switch.ogg b/sound/items/tools/tool_switch.ogg similarity index 100% rename from sound/items/handling/tool_switch.ogg rename to sound/items/tools/tool_switch.ogg diff --git a/sound/items/welder.ogg b/sound/items/tools/welder.ogg similarity index 100% rename from sound/items/welder.ogg rename to sound/items/tools/welder.ogg diff --git a/sound/items/welder2.ogg b/sound/items/tools/welder2.ogg similarity index 100% rename from sound/items/welder2.ogg rename to sound/items/tools/welder2.ogg diff --git a/sound/items/welderactivate.ogg b/sound/items/tools/welderactivate.ogg similarity index 100% rename from sound/items/welderactivate.ogg rename to sound/items/tools/welderactivate.ogg diff --git a/sound/items/welderdeactivate.ogg b/sound/items/tools/welderdeactivate.ogg similarity index 100% rename from sound/items/welderdeactivate.ogg rename to sound/items/tools/welderdeactivate.ogg diff --git a/sound/items/wirecutter.ogg b/sound/items/tools/wirecutter.ogg similarity index 100% rename from sound/items/wirecutter.ogg rename to sound/items/tools/wirecutter.ogg diff --git a/sound/items/wirecutter_cut.ogg b/sound/items/tools/wirecutter_cut.ogg similarity index 100% rename from sound/items/wirecutter_cut.ogg rename to sound/items/tools/wirecutter_cut.ogg diff --git a/sound/items/toysqueak1.ogg b/sound/items/toy_squeak/toysqueak1.ogg similarity index 100% rename from sound/items/toysqueak1.ogg rename to sound/items/toy_squeak/toysqueak1.ogg diff --git a/sound/items/toysqueak2.ogg b/sound/items/toy_squeak/toysqueak2.ogg similarity index 100% rename from sound/items/toysqueak2.ogg rename to sound/items/toy_squeak/toysqueak2.ogg diff --git a/sound/items/toysqueak3.ogg b/sound/items/toy_squeak/toysqueak3.ogg similarity index 100% rename from sound/items/toysqueak3.ogg rename to sound/items/toy_squeak/toysqueak3.ogg diff --git a/sound/items/trayhit1.ogg b/sound/items/trayhit/trayhit1.ogg similarity index 100% rename from sound/items/trayhit1.ogg rename to sound/items/trayhit/trayhit1.ogg diff --git a/sound/items/trayhit2.ogg b/sound/items/trayhit/trayhit2.ogg similarity index 100% rename from sound/items/trayhit2.ogg rename to sound/items/trayhit/trayhit2.ogg diff --git a/sound/weapons/armbomb.ogg b/sound/items/weapons/armbomb.ogg similarity index 100% rename from sound/weapons/armbomb.ogg rename to sound/items/weapons/armbomb.ogg diff --git a/sound/weapons/autoguninsert.ogg b/sound/items/weapons/autoguninsert.ogg similarity index 100% rename from sound/weapons/autoguninsert.ogg rename to sound/items/weapons/autoguninsert.ogg diff --git a/sound/weapons/banjoslap.ogg b/sound/items/weapons/banjoslap.ogg similarity index 100% rename from sound/weapons/banjoslap.ogg rename to sound/items/weapons/banjoslap.ogg diff --git a/sound/weapons/barragespellhit.ogg b/sound/items/weapons/barragespellhit.ogg similarity index 100% rename from sound/weapons/barragespellhit.ogg rename to sound/items/weapons/barragespellhit.ogg diff --git a/sound/weapons/batonextend.ogg b/sound/items/weapons/batonextend.ogg similarity index 100% rename from sound/weapons/batonextend.ogg rename to sound/items/weapons/batonextend.ogg diff --git a/sound/weapons/beam_sniper.ogg b/sound/items/weapons/beam_sniper.ogg similarity index 100% rename from sound/weapons/beam_sniper.ogg rename to sound/items/weapons/beam_sniper.ogg diff --git a/sound/weapons/beesmoke.ogg b/sound/items/weapons/beesmoke.ogg similarity index 100% rename from sound/weapons/beesmoke.ogg rename to sound/items/weapons/beesmoke.ogg diff --git a/sound/weapons/bite.ogg b/sound/items/weapons/bite.ogg similarity index 100% rename from sound/weapons/bite.ogg rename to sound/items/weapons/bite.ogg diff --git a/sound/weapons/blade1.ogg b/sound/items/weapons/blade1.ogg similarity index 100% rename from sound/weapons/blade1.ogg rename to sound/items/weapons/blade1.ogg diff --git a/sound/weapons/bladeslice.ogg b/sound/items/weapons/bladeslice.ogg similarity index 100% rename from sound/weapons/bladeslice.ogg rename to sound/items/weapons/bladeslice.ogg diff --git a/sound/weapons/blastcannon.ogg b/sound/items/weapons/blastcannon.ogg similarity index 100% rename from sound/weapons/blastcannon.ogg rename to sound/items/weapons/blastcannon.ogg diff --git a/sound/weapons/blaster.ogg b/sound/items/weapons/blaster.ogg similarity index 100% rename from sound/weapons/blaster.ogg rename to sound/items/weapons/blaster.ogg diff --git a/sound/weapons/block_blade.ogg b/sound/items/weapons/block_blade.ogg similarity index 100% rename from sound/weapons/block_blade.ogg rename to sound/items/weapons/block_blade.ogg diff --git a/sound/weapons/block_shield.ogg b/sound/items/weapons/block_shield.ogg similarity index 100% rename from sound/weapons/block_shield.ogg rename to sound/items/weapons/block_shield.ogg diff --git a/sound/weapons/bolathrow.ogg b/sound/items/weapons/bolathrow.ogg similarity index 100% rename from sound/weapons/bolathrow.ogg rename to sound/items/weapons/bolathrow.ogg diff --git a/sound/weapons/bulletflyby.ogg b/sound/items/weapons/bulletflyby.ogg similarity index 100% rename from sound/weapons/bulletflyby.ogg rename to sound/items/weapons/bulletflyby.ogg diff --git a/sound/weapons/bulletflyby2.ogg b/sound/items/weapons/bulletflyby2.ogg similarity index 100% rename from sound/weapons/bulletflyby2.ogg rename to sound/items/weapons/bulletflyby2.ogg diff --git a/sound/weapons/bulletflyby3.ogg b/sound/items/weapons/bulletflyby3.ogg similarity index 100% rename from sound/weapons/bulletflyby3.ogg rename to sound/items/weapons/bulletflyby3.ogg diff --git a/sound/weapons/cablecuff.ogg b/sound/items/weapons/cablecuff.ogg similarity index 100% rename from sound/weapons/cablecuff.ogg rename to sound/items/weapons/cablecuff.ogg diff --git a/sound/weapons/chainhit.ogg b/sound/items/weapons/chainhit.ogg similarity index 100% rename from sound/weapons/chainhit.ogg rename to sound/items/weapons/chainhit.ogg diff --git a/sound/weapons/chainsaw_loop.ogg b/sound/items/weapons/chainsaw_loop.ogg similarity index 100% rename from sound/weapons/chainsaw_loop.ogg rename to sound/items/weapons/chainsaw_loop.ogg diff --git a/sound/weapons/chainsaw_start.ogg b/sound/items/weapons/chainsaw_start.ogg similarity index 100% rename from sound/weapons/chainsaw_start.ogg rename to sound/items/weapons/chainsaw_start.ogg diff --git a/sound/weapons/chainsaw_stop.ogg b/sound/items/weapons/chainsaw_stop.ogg similarity index 100% rename from sound/weapons/chainsaw_stop.ogg rename to sound/items/weapons/chainsaw_stop.ogg diff --git a/sound/weapons/chainsawhit.ogg b/sound/items/weapons/chainsawhit.ogg similarity index 100% rename from sound/weapons/chainsawhit.ogg rename to sound/items/weapons/chainsawhit.ogg diff --git a/sound/weapons/circsawhit.ogg b/sound/items/weapons/circsawhit.ogg similarity index 100% rename from sound/weapons/circsawhit.ogg rename to sound/items/weapons/circsawhit.ogg diff --git a/sound/effects/contractorbatonhit.ogg b/sound/items/weapons/contractor_baton/contractorbatonhit.ogg similarity index 100% rename from sound/effects/contractorbatonhit.ogg rename to sound/items/weapons/contractor_baton/contractorbatonhit.ogg diff --git a/sound/weapons/contractorbatonextend.ogg b/sound/items/weapons/contractorbatonextend.ogg similarity index 100% rename from sound/weapons/contractorbatonextend.ogg rename to sound/items/weapons/contractorbatonextend.ogg diff --git a/sound/weapons/cqchit1.ogg b/sound/items/weapons/cqchit1.ogg similarity index 100% rename from sound/weapons/cqchit1.ogg rename to sound/items/weapons/cqchit1.ogg diff --git a/sound/weapons/cqchit2.ogg b/sound/items/weapons/cqchit2.ogg similarity index 100% rename from sound/weapons/cqchit2.ogg rename to sound/items/weapons/cqchit2.ogg diff --git a/sound/weapons/draw_bow.ogg b/sound/items/weapons/draw_bow.ogg similarity index 100% rename from sound/weapons/draw_bow.ogg rename to sound/items/weapons/draw_bow.ogg diff --git a/sound/weapons/draw_bow2.ogg b/sound/items/weapons/draw_bow2.ogg similarity index 100% rename from sound/weapons/draw_bow2.ogg rename to sound/items/weapons/draw_bow2.ogg diff --git a/sound/weapons/drill.ogg b/sound/items/weapons/drill.ogg similarity index 100% rename from sound/weapons/drill.ogg rename to sound/items/weapons/drill.ogg diff --git a/sound/weapons/effects/batreflect.ogg b/sound/items/weapons/effects/batreflect.ogg similarity index 100% rename from sound/weapons/effects/batreflect.ogg rename to sound/items/weapons/effects/batreflect.ogg diff --git a/sound/weapons/effects/ric1.ogg b/sound/items/weapons/effects/ric1.ogg similarity index 100% rename from sound/weapons/effects/ric1.ogg rename to sound/items/weapons/effects/ric1.ogg diff --git a/sound/weapons/effects/ric2.ogg b/sound/items/weapons/effects/ric2.ogg similarity index 100% rename from sound/weapons/effects/ric2.ogg rename to sound/items/weapons/effects/ric2.ogg diff --git a/sound/weapons/effects/ric3.ogg b/sound/items/weapons/effects/ric3.ogg similarity index 100% rename from sound/weapons/effects/ric3.ogg rename to sound/items/weapons/effects/ric3.ogg diff --git a/sound/weapons/effects/ric4.ogg b/sound/items/weapons/effects/ric4.ogg similarity index 100% rename from sound/weapons/effects/ric4.ogg rename to sound/items/weapons/effects/ric4.ogg diff --git a/sound/weapons/effects/ric5.ogg b/sound/items/weapons/effects/ric5.ogg similarity index 100% rename from sound/weapons/effects/ric5.ogg rename to sound/items/weapons/effects/ric5.ogg diff --git a/sound/weapons/effects/searwall.ogg b/sound/items/weapons/effects/searwall.ogg similarity index 100% rename from sound/weapons/effects/searwall.ogg rename to sound/items/weapons/effects/searwall.ogg diff --git a/sound/weapons/egloves.ogg b/sound/items/weapons/egloves.ogg similarity index 100% rename from sound/weapons/egloves.ogg rename to sound/items/weapons/egloves.ogg diff --git a/sound/weapons/emitter.ogg b/sound/items/weapons/emitter.ogg similarity index 100% rename from sound/weapons/emitter.ogg rename to sound/items/weapons/emitter.ogg diff --git a/sound/weapons/emitter2.ogg b/sound/items/weapons/emitter2.ogg similarity index 100% rename from sound/weapons/emitter2.ogg rename to sound/items/weapons/emitter2.ogg diff --git a/sound/weapons/empty.ogg b/sound/items/weapons/empty.ogg similarity index 100% rename from sound/weapons/empty.ogg rename to sound/items/weapons/empty.ogg diff --git a/sound/weapons/etherealhit.ogg b/sound/items/weapons/etherealhit.ogg similarity index 100% rename from sound/weapons/etherealhit.ogg rename to sound/items/weapons/etherealhit.ogg diff --git a/sound/weapons/etherealmiss.ogg b/sound/items/weapons/etherealmiss.ogg similarity index 100% rename from sound/weapons/etherealmiss.ogg rename to sound/items/weapons/etherealmiss.ogg diff --git a/sound/weapons/flash.ogg b/sound/items/weapons/flash.ogg similarity index 100% rename from sound/weapons/flash.ogg rename to sound/items/weapons/flash.ogg diff --git a/sound/weapons/flash_ring.ogg b/sound/items/weapons/flash_ring.ogg similarity index 100% rename from sound/weapons/flash_ring.ogg rename to sound/items/weapons/flash_ring.ogg diff --git a/sound/weapons/flashbang.ogg b/sound/items/weapons/flashbang.ogg similarity index 100% rename from sound/weapons/flashbang.ogg rename to sound/items/weapons/flashbang.ogg diff --git a/sound/weapons/fwoosh.ogg b/sound/items/weapons/fwoosh.ogg similarity index 100% rename from sound/weapons/fwoosh.ogg rename to sound/items/weapons/fwoosh.ogg diff --git a/sound/weapons/genhit.ogg b/sound/items/weapons/genhit.ogg similarity index 100% rename from sound/weapons/genhit.ogg rename to sound/items/weapons/genhit.ogg diff --git a/sound/weapons/genhit1.ogg b/sound/items/weapons/genhit1.ogg similarity index 100% rename from sound/weapons/genhit1.ogg rename to sound/items/weapons/genhit1.ogg diff --git a/sound/weapons/genhit2.ogg b/sound/items/weapons/genhit2.ogg similarity index 100% rename from sound/weapons/genhit2.ogg rename to sound/items/weapons/genhit2.ogg diff --git a/sound/weapons/genhit3.ogg b/sound/items/weapons/genhit3.ogg similarity index 100% rename from sound/weapons/genhit3.ogg rename to sound/items/weapons/genhit3.ogg diff --git a/sound/weapons/guillotine.ogg b/sound/items/weapons/guillotine.ogg similarity index 100% rename from sound/weapons/guillotine.ogg rename to sound/items/weapons/guillotine.ogg diff --git a/sound/weapons/gun/bow/attribution.txt b/sound/items/weapons/gun/bow/attribution.txt similarity index 100% rename from sound/weapons/gun/bow/attribution.txt rename to sound/items/weapons/gun/bow/attribution.txt diff --git a/sound/weapons/gun/bow/bow_draw.ogg b/sound/items/weapons/gun/bow/bow_draw.ogg similarity index 100% rename from sound/weapons/gun/bow/bow_draw.ogg rename to sound/items/weapons/gun/bow/bow_draw.ogg diff --git a/sound/weapons/gun/bow/bow_fire.ogg b/sound/items/weapons/gun/bow/bow_fire.ogg similarity index 100% rename from sound/weapons/gun/bow/bow_fire.ogg rename to sound/items/weapons/gun/bow/bow_fire.ogg diff --git a/sound/weapons/gun/general/ballistic_click.ogg b/sound/items/weapons/gun/general/ballistic_click.ogg similarity index 100% rename from sound/weapons/gun/general/ballistic_click.ogg rename to sound/items/weapons/gun/general/ballistic_click.ogg diff --git a/sound/weapons/gun/general/bolt_drop.ogg b/sound/items/weapons/gun/general/bolt_drop.ogg similarity index 100% rename from sound/weapons/gun/general/bolt_drop.ogg rename to sound/items/weapons/gun/general/bolt_drop.ogg diff --git a/sound/weapons/gun/general/bolt_rack.ogg b/sound/items/weapons/gun/general/bolt_rack.ogg similarity index 100% rename from sound/weapons/gun/general/bolt_rack.ogg rename to sound/items/weapons/gun/general/bolt_rack.ogg diff --git a/sound/weapons/gun/general/cannon.ogg b/sound/items/weapons/gun/general/cannon.ogg similarity index 100% rename from sound/weapons/gun/general/cannon.ogg rename to sound/items/weapons/gun/general/cannon.ogg diff --git a/sound/weapons/gun/general/chunkyrack.ogg b/sound/items/weapons/gun/general/chunkyrack.ogg similarity index 100% rename from sound/weapons/gun/general/chunkyrack.ogg rename to sound/items/weapons/gun/general/chunkyrack.ogg diff --git a/sound/weapons/gun/general/dry_fire.ogg b/sound/items/weapons/gun/general/dry_fire.ogg similarity index 100% rename from sound/weapons/gun/general/dry_fire.ogg rename to sound/items/weapons/gun/general/dry_fire.ogg diff --git a/sound/weapons/gun/general/empty_alarm.ogg b/sound/items/weapons/gun/general/empty_alarm.ogg similarity index 100% rename from sound/weapons/gun/general/empty_alarm.ogg rename to sound/items/weapons/gun/general/empty_alarm.ogg diff --git a/sound/weapons/gun/general/grenade_launch.ogg b/sound/items/weapons/gun/general/grenade_launch.ogg similarity index 100% rename from sound/weapons/gun/general/grenade_launch.ogg rename to sound/items/weapons/gun/general/grenade_launch.ogg diff --git a/sound/weapons/gun/general/heavy_shot_suppressed.ogg b/sound/items/weapons/gun/general/heavy_shot_suppressed.ogg similarity index 100% rename from sound/weapons/gun/general/heavy_shot_suppressed.ogg rename to sound/items/weapons/gun/general/heavy_shot_suppressed.ogg diff --git a/sound/weapons/gun/general/mag_bullet_insert.ogg b/sound/items/weapons/gun/general/mag_bullet_insert.ogg similarity index 100% rename from sound/weapons/gun/general/mag_bullet_insert.ogg rename to sound/items/weapons/gun/general/mag_bullet_insert.ogg diff --git a/sound/weapons/gun/general/mag_bullet_remove.ogg b/sound/items/weapons/gun/general/mag_bullet_remove.ogg similarity index 100% rename from sound/weapons/gun/general/mag_bullet_remove.ogg rename to sound/items/weapons/gun/general/mag_bullet_remove.ogg diff --git a/sound/weapons/gun/general/magazine_insert_empty.ogg b/sound/items/weapons/gun/general/magazine_insert_empty.ogg similarity index 100% rename from sound/weapons/gun/general/magazine_insert_empty.ogg rename to sound/items/weapons/gun/general/magazine_insert_empty.ogg diff --git a/sound/weapons/gun/general/magazine_insert_full.ogg b/sound/items/weapons/gun/general/magazine_insert_full.ogg similarity index 100% rename from sound/weapons/gun/general/magazine_insert_full.ogg rename to sound/items/weapons/gun/general/magazine_insert_full.ogg diff --git a/sound/weapons/gun/general/magazine_remove_empty.ogg b/sound/items/weapons/gun/general/magazine_remove_empty.ogg similarity index 100% rename from sound/weapons/gun/general/magazine_remove_empty.ogg rename to sound/items/weapons/gun/general/magazine_remove_empty.ogg diff --git a/sound/weapons/gun/general/magazine_remove_full.ogg b/sound/items/weapons/gun/general/magazine_remove_full.ogg similarity index 100% rename from sound/weapons/gun/general/magazine_remove_full.ogg rename to sound/items/weapons/gun/general/magazine_remove_full.ogg diff --git a/sound/items/weapons/gun/general/mountedgun.ogg b/sound/items/weapons/gun/general/mountedgun.ogg new file mode 100644 index 0000000000000..dfa11134eab34 Binary files /dev/null and b/sound/items/weapons/gun/general/mountedgun.ogg differ diff --git a/sound/items/weapons/gun/general/mountedgunend.ogg b/sound/items/weapons/gun/general/mountedgunend.ogg new file mode 100644 index 0000000000000..dfa11134eab34 Binary files /dev/null and b/sound/items/weapons/gun/general/mountedgunend.ogg differ diff --git a/sound/weapons/gun/general/rocket_launch.ogg b/sound/items/weapons/gun/general/rocket_launch.ogg similarity index 100% rename from sound/weapons/gun/general/rocket_launch.ogg rename to sound/items/weapons/gun/general/rocket_launch.ogg diff --git a/sound/weapons/gun/general/slide_lock_1.ogg b/sound/items/weapons/gun/general/slide_lock_1.ogg similarity index 100% rename from sound/weapons/gun/general/slide_lock_1.ogg rename to sound/items/weapons/gun/general/slide_lock_1.ogg diff --git a/sound/weapons/gun/hmg/hmg.ogg b/sound/items/weapons/gun/hmg/hmg.ogg similarity index 100% rename from sound/weapons/gun/hmg/hmg.ogg rename to sound/items/weapons/gun/hmg/hmg.ogg diff --git a/sound/weapons/gun/l6/l6_door.ogg b/sound/items/weapons/gun/l6/l6_door.ogg similarity index 100% rename from sound/weapons/gun/l6/l6_door.ogg rename to sound/items/weapons/gun/l6/l6_door.ogg diff --git a/sound/weapons/gun/l6/l6_rack.ogg b/sound/items/weapons/gun/l6/l6_rack.ogg similarity index 100% rename from sound/weapons/gun/l6/l6_rack.ogg rename to sound/items/weapons/gun/l6/l6_rack.ogg diff --git a/sound/weapons/gun/l6/shot.ogg b/sound/items/weapons/gun/l6/shot.ogg similarity index 100% rename from sound/weapons/gun/l6/shot.ogg rename to sound/items/weapons/gun/l6/shot.ogg diff --git a/sound/weapons/gun/pistol/drop_small.ogg b/sound/items/weapons/gun/pistol/drop_small.ogg similarity index 100% rename from sound/weapons/gun/pistol/drop_small.ogg rename to sound/items/weapons/gun/pistol/drop_small.ogg diff --git a/sound/weapons/gun/pistol/dry_fire.ogg b/sound/items/weapons/gun/pistol/dry_fire.ogg similarity index 100% rename from sound/weapons/gun/pistol/dry_fire.ogg rename to sound/items/weapons/gun/pistol/dry_fire.ogg diff --git a/sound/weapons/gun/pistol/lock_small.ogg b/sound/items/weapons/gun/pistol/lock_small.ogg similarity index 100% rename from sound/weapons/gun/pistol/lock_small.ogg rename to sound/items/weapons/gun/pistol/lock_small.ogg diff --git a/sound/weapons/gun/pistol/mag_insert.ogg b/sound/items/weapons/gun/pistol/mag_insert.ogg similarity index 100% rename from sound/weapons/gun/pistol/mag_insert.ogg rename to sound/items/weapons/gun/pistol/mag_insert.ogg diff --git a/sound/weapons/gun/pistol/mag_release.ogg b/sound/items/weapons/gun/pistol/mag_release.ogg similarity index 100% rename from sound/weapons/gun/pistol/mag_release.ogg rename to sound/items/weapons/gun/pistol/mag_release.ogg diff --git a/sound/weapons/gun/pistol/rack.ogg b/sound/items/weapons/gun/pistol/rack.ogg similarity index 100% rename from sound/weapons/gun/pistol/rack.ogg rename to sound/items/weapons/gun/pistol/rack.ogg diff --git a/sound/weapons/gun/pistol/rack_small.ogg b/sound/items/weapons/gun/pistol/rack_small.ogg similarity index 100% rename from sound/weapons/gun/pistol/rack_small.ogg rename to sound/items/weapons/gun/pistol/rack_small.ogg diff --git a/sound/weapons/gun/pistol/shot.ogg b/sound/items/weapons/gun/pistol/shot.ogg similarity index 100% rename from sound/weapons/gun/pistol/shot.ogg rename to sound/items/weapons/gun/pistol/shot.ogg diff --git a/sound/weapons/gun/pistol/shot_alt.ogg b/sound/items/weapons/gun/pistol/shot_alt.ogg similarity index 100% rename from sound/weapons/gun/pistol/shot_alt.ogg rename to sound/items/weapons/gun/pistol/shot_alt.ogg diff --git a/sound/weapons/gun/pistol/shot_suppressed.ogg b/sound/items/weapons/gun/pistol/shot_suppressed.ogg similarity index 100% rename from sound/weapons/gun/pistol/shot_suppressed.ogg rename to sound/items/weapons/gun/pistol/shot_suppressed.ogg diff --git a/sound/weapons/gun/pistol/slide_drop.ogg b/sound/items/weapons/gun/pistol/slide_drop.ogg similarity index 100% rename from sound/weapons/gun/pistol/slide_drop.ogg rename to sound/items/weapons/gun/pistol/slide_drop.ogg diff --git a/sound/weapons/gun/pistol/slide_lock.ogg b/sound/items/weapons/gun/pistol/slide_lock.ogg similarity index 100% rename from sound/weapons/gun/pistol/slide_lock.ogg rename to sound/items/weapons/gun/pistol/slide_lock.ogg diff --git a/sound/weapons/gun/revolver/dry_fire.ogg b/sound/items/weapons/gun/revolver/dry_fire.ogg similarity index 100% rename from sound/weapons/gun/revolver/dry_fire.ogg rename to sound/items/weapons/gun/revolver/dry_fire.ogg diff --git a/sound/weapons/gun/revolver/empty.ogg b/sound/items/weapons/gun/revolver/empty.ogg similarity index 100% rename from sound/weapons/gun/revolver/empty.ogg rename to sound/items/weapons/gun/revolver/empty.ogg diff --git a/sound/weapons/gun/revolver/load_bullet.ogg b/sound/items/weapons/gun/revolver/load_bullet.ogg similarity index 100% rename from sound/weapons/gun/revolver/load_bullet.ogg rename to sound/items/weapons/gun/revolver/load_bullet.ogg diff --git a/sound/weapons/gun/revolver/shot.ogg b/sound/items/weapons/gun/revolver/shot.ogg similarity index 100% rename from sound/weapons/gun/revolver/shot.ogg rename to sound/items/weapons/gun/revolver/shot.ogg diff --git a/sound/weapons/gun/revolver/shot_alt.ogg b/sound/items/weapons/gun/revolver/shot_alt.ogg similarity index 100% rename from sound/weapons/gun/revolver/shot_alt.ogg rename to sound/items/weapons/gun/revolver/shot_alt.ogg diff --git a/sound/weapons/gun/revolver/spin1.ogg b/sound/items/weapons/gun/revolver/spin1.ogg similarity index 100% rename from sound/weapons/gun/revolver/spin1.ogg rename to sound/items/weapons/gun/revolver/spin1.ogg diff --git a/sound/weapons/gun/revolver/spin2.ogg b/sound/items/weapons/gun/revolver/spin2.ogg similarity index 100% rename from sound/weapons/gun/revolver/spin2.ogg rename to sound/items/weapons/gun/revolver/spin2.ogg diff --git a/sound/weapons/gun/revolver/spin3.ogg b/sound/items/weapons/gun/revolver/spin3.ogg similarity index 100% rename from sound/weapons/gun/revolver/spin3.ogg rename to sound/items/weapons/gun/revolver/spin3.ogg diff --git a/sound/weapons/gun/rifle/bolt_in.ogg b/sound/items/weapons/gun/rifle/bolt_in.ogg similarity index 100% rename from sound/weapons/gun/rifle/bolt_in.ogg rename to sound/items/weapons/gun/rifle/bolt_in.ogg diff --git a/sound/weapons/gun/rifle/bolt_out.ogg b/sound/items/weapons/gun/rifle/bolt_out.ogg similarity index 100% rename from sound/weapons/gun/rifle/bolt_out.ogg rename to sound/items/weapons/gun/rifle/bolt_out.ogg diff --git a/sound/weapons/gun/rifle/shot.ogg b/sound/items/weapons/gun/rifle/shot.ogg similarity index 100% rename from sound/weapons/gun/rifle/shot.ogg rename to sound/items/weapons/gun/rifle/shot.ogg diff --git a/sound/weapons/gun/rifle/shot_heavy.ogg b/sound/items/weapons/gun/rifle/shot_heavy.ogg similarity index 100% rename from sound/weapons/gun/rifle/shot_heavy.ogg rename to sound/items/weapons/gun/rifle/shot_heavy.ogg diff --git a/sound/weapons/gun/shotgun/insert_shell.ogg b/sound/items/weapons/gun/shotgun/insert_shell.ogg similarity index 100% rename from sound/weapons/gun/shotgun/insert_shell.ogg rename to sound/items/weapons/gun/shotgun/insert_shell.ogg diff --git a/sound/weapons/gun/shotgun/rack.ogg b/sound/items/weapons/gun/shotgun/rack.ogg similarity index 100% rename from sound/weapons/gun/shotgun/rack.ogg rename to sound/items/weapons/gun/shotgun/rack.ogg diff --git a/sound/weapons/gun/shotgun/shot.ogg b/sound/items/weapons/gun/shotgun/shot.ogg similarity index 100% rename from sound/weapons/gun/shotgun/shot.ogg rename to sound/items/weapons/gun/shotgun/shot.ogg diff --git a/sound/weapons/gun/shotgun/shot_alt.ogg b/sound/items/weapons/gun/shotgun/shot_alt.ogg similarity index 100% rename from sound/weapons/gun/shotgun/shot_alt.ogg rename to sound/items/weapons/gun/shotgun/shot_alt.ogg diff --git a/sound/weapons/gun/smartgun/smartgun_shoot_1.ogg b/sound/items/weapons/gun/smartgun/smartgun_shoot_1.ogg similarity index 100% rename from sound/weapons/gun/smartgun/smartgun_shoot_1.ogg rename to sound/items/weapons/gun/smartgun/smartgun_shoot_1.ogg diff --git a/sound/weapons/gun/smartgun/smartgun_shoot_2.ogg b/sound/items/weapons/gun/smartgun/smartgun_shoot_2.ogg similarity index 100% rename from sound/weapons/gun/smartgun/smartgun_shoot_2.ogg rename to sound/items/weapons/gun/smartgun/smartgun_shoot_2.ogg diff --git a/sound/weapons/gun/smartgun/smartgun_shoot_3.ogg b/sound/items/weapons/gun/smartgun/smartgun_shoot_3.ogg similarity index 100% rename from sound/weapons/gun/smartgun/smartgun_shoot_3.ogg rename to sound/items/weapons/gun/smartgun/smartgun_shoot_3.ogg diff --git a/sound/weapons/gun/smg/shot.ogg b/sound/items/weapons/gun/smg/shot.ogg similarity index 100% rename from sound/weapons/gun/smg/shot.ogg rename to sound/items/weapons/gun/smg/shot.ogg diff --git a/sound/weapons/gun/smg/shot_alt.ogg b/sound/items/weapons/gun/smg/shot_alt.ogg similarity index 100% rename from sound/weapons/gun/smg/shot_alt.ogg rename to sound/items/weapons/gun/smg/shot_alt.ogg diff --git a/sound/weapons/gun/smg/shot_suppressed.ogg b/sound/items/weapons/gun/smg/shot_suppressed.ogg similarity index 100% rename from sound/weapons/gun/smg/shot_suppressed.ogg rename to sound/items/weapons/gun/smg/shot_suppressed.ogg diff --git a/sound/weapons/gun/smg/smgrack.ogg b/sound/items/weapons/gun/smg/smgrack.ogg similarity index 100% rename from sound/weapons/gun/smg/smgrack.ogg rename to sound/items/weapons/gun/smg/smgrack.ogg diff --git a/sound/weapons/gun/sniper/mag_insert.ogg b/sound/items/weapons/gun/sniper/mag_insert.ogg similarity index 100% rename from sound/weapons/gun/sniper/mag_insert.ogg rename to sound/items/weapons/gun/sniper/mag_insert.ogg diff --git a/sound/weapons/gun/sniper/rack.ogg b/sound/items/weapons/gun/sniper/rack.ogg similarity index 100% rename from sound/weapons/gun/sniper/rack.ogg rename to sound/items/weapons/gun/sniper/rack.ogg diff --git a/sound/weapons/gun/sniper/shot.ogg b/sound/items/weapons/gun/sniper/shot.ogg similarity index 100% rename from sound/weapons/gun/sniper/shot.ogg rename to sound/items/weapons/gun/sniper/shot.ogg diff --git a/sound/weapons/handcuffs.ogg b/sound/items/weapons/handcuffs.ogg similarity index 100% rename from sound/weapons/handcuffs.ogg rename to sound/items/weapons/handcuffs.ogg diff --git a/sound/weapons/homerun.ogg b/sound/items/weapons/homerun.ogg similarity index 100% rename from sound/weapons/homerun.ogg rename to sound/items/weapons/homerun.ogg diff --git a/sound/weapons/ionrifle.ogg b/sound/items/weapons/ionrifle.ogg similarity index 100% rename from sound/weapons/ionrifle.ogg rename to sound/items/weapons/ionrifle.ogg diff --git a/sound/weapons/jammed.ogg b/sound/items/weapons/jammed.ogg similarity index 100% rename from sound/weapons/jammed.ogg rename to sound/items/weapons/jammed.ogg diff --git a/sound/weapons/kinetic_accel.ogg b/sound/items/weapons/kinetic_accel.ogg similarity index 100% rename from sound/weapons/kinetic_accel.ogg rename to sound/items/weapons/kinetic_accel.ogg diff --git a/sound/weapons/kinetic_reload.ogg b/sound/items/weapons/kinetic_reload.ogg similarity index 100% rename from sound/weapons/kinetic_reload.ogg rename to sound/items/weapons/kinetic_reload.ogg diff --git a/sound/weapons/laser.ogg b/sound/items/weapons/laser.ogg similarity index 100% rename from sound/weapons/laser.ogg rename to sound/items/weapons/laser.ogg diff --git a/sound/weapons/laser2.ogg b/sound/items/weapons/laser2.ogg similarity index 100% rename from sound/weapons/laser2.ogg rename to sound/items/weapons/laser2.ogg diff --git a/sound/weapons/laser3.ogg b/sound/items/weapons/laser3.ogg similarity index 100% rename from sound/weapons/laser3.ogg rename to sound/items/weapons/laser3.ogg diff --git a/sound/weapons/laser_crank.ogg b/sound/items/weapons/laser_crank.ogg similarity index 100% rename from sound/weapons/laser_crank.ogg rename to sound/items/weapons/laser_crank.ogg diff --git a/sound/weapons/lasercannonfire.ogg b/sound/items/weapons/lasercannonfire.ogg similarity index 100% rename from sound/weapons/lasercannonfire.ogg rename to sound/items/weapons/lasercannonfire.ogg diff --git a/sound/weapons/magin.ogg b/sound/items/weapons/magin.ogg similarity index 100% rename from sound/weapons/magin.ogg rename to sound/items/weapons/magin.ogg diff --git a/sound/weapons/magout.ogg b/sound/items/weapons/magout.ogg similarity index 100% rename from sound/weapons/magout.ogg rename to sound/items/weapons/magout.ogg diff --git a/sound/weapons/marauder.ogg b/sound/items/weapons/marauder.ogg similarity index 100% rename from sound/weapons/marauder.ogg rename to sound/items/weapons/marauder.ogg diff --git a/sound/weapons/minebot_rocket.ogg b/sound/items/weapons/minebot_rocket.ogg similarity index 100% rename from sound/weapons/minebot_rocket.ogg rename to sound/items/weapons/minebot_rocket.ogg diff --git a/sound/weapons/mortar_long_whistle.ogg b/sound/items/weapons/mortar_long_whistle.ogg similarity index 100% rename from sound/weapons/mortar_long_whistle.ogg rename to sound/items/weapons/mortar_long_whistle.ogg diff --git a/sound/weapons/mortar_whistle.ogg b/sound/items/weapons/mortar_whistle.ogg similarity index 100% rename from sound/weapons/mortar_whistle.ogg rename to sound/items/weapons/mortar_whistle.ogg diff --git a/sound/weapons/parry.ogg b/sound/items/weapons/parry.ogg similarity index 100% rename from sound/weapons/parry.ogg rename to sound/items/weapons/parry.ogg diff --git a/sound/weapons/pierce.ogg b/sound/items/weapons/pierce.ogg similarity index 100% rename from sound/weapons/pierce.ogg rename to sound/items/weapons/pierce.ogg diff --git a/sound/weapons/pierce_slow.ogg b/sound/items/weapons/pierce_slow.ogg similarity index 100% rename from sound/weapons/pierce_slow.ogg rename to sound/items/weapons/pierce_slow.ogg diff --git a/sound/weapons/plasma_cutter.ogg b/sound/items/weapons/plasma_cutter.ogg similarity index 100% rename from sound/weapons/plasma_cutter.ogg rename to sound/items/weapons/plasma_cutter.ogg diff --git a/sound/weapons/pulse.ogg b/sound/items/weapons/pulse.ogg similarity index 100% rename from sound/weapons/pulse.ogg rename to sound/items/weapons/pulse.ogg diff --git a/sound/weapons/pulse2.ogg b/sound/items/weapons/pulse2.ogg similarity index 100% rename from sound/weapons/pulse2.ogg rename to sound/items/weapons/pulse2.ogg diff --git a/sound/weapons/pulse3.ogg b/sound/items/weapons/pulse3.ogg similarity index 100% rename from sound/weapons/pulse3.ogg rename to sound/items/weapons/pulse3.ogg diff --git a/sound/weapons/punch1.ogg b/sound/items/weapons/punch1.ogg similarity index 100% rename from sound/weapons/punch1.ogg rename to sound/items/weapons/punch1.ogg diff --git a/sound/weapons/punch2.ogg b/sound/items/weapons/punch2.ogg similarity index 100% rename from sound/weapons/punch2.ogg rename to sound/items/weapons/punch2.ogg diff --git a/sound/weapons/punch3.ogg b/sound/items/weapons/punch3.ogg similarity index 100% rename from sound/weapons/punch3.ogg rename to sound/items/weapons/punch3.ogg diff --git a/sound/weapons/punch4.ogg b/sound/items/weapons/punch4.ogg similarity index 100% rename from sound/weapons/punch4.ogg rename to sound/items/weapons/punch4.ogg diff --git a/sound/weapons/punchmiss.ogg b/sound/items/weapons/punchmiss.ogg similarity index 100% rename from sound/weapons/punchmiss.ogg rename to sound/items/weapons/punchmiss.ogg diff --git a/sound/weapons/rapierhit.ogg b/sound/items/weapons/rapierhit.ogg similarity index 100% rename from sound/weapons/rapierhit.ogg rename to sound/items/weapons/rapierhit.ogg diff --git a/sound/weapons/resonator_blast.ogg b/sound/items/weapons/resonator_blast.ogg similarity index 100% rename from sound/weapons/resonator_blast.ogg rename to sound/items/weapons/resonator_blast.ogg diff --git a/sound/weapons/resonator_fire.ogg b/sound/items/weapons/resonator_fire.ogg similarity index 100% rename from sound/weapons/resonator_fire.ogg rename to sound/items/weapons/resonator_fire.ogg diff --git a/sound/weapons/ring.ogg b/sound/items/weapons/ring.ogg similarity index 100% rename from sound/weapons/ring.ogg rename to sound/items/weapons/ring.ogg diff --git a/sound/weapons/saberoff.ogg b/sound/items/weapons/saberoff.ogg similarity index 100% rename from sound/weapons/saberoff.ogg rename to sound/items/weapons/saberoff.ogg diff --git a/sound/weapons/saberon.ogg b/sound/items/weapons/saberon.ogg similarity index 100% rename from sound/weapons/saberon.ogg rename to sound/items/weapons/saberon.ogg diff --git a/sound/weapons/scope.ogg b/sound/items/weapons/scope.ogg similarity index 100% rename from sound/weapons/scope.ogg rename to sound/items/weapons/scope.ogg diff --git a/sound/weapons/sear.ogg b/sound/items/weapons/sear.ogg similarity index 100% rename from sound/weapons/sear.ogg rename to sound/items/weapons/sear.ogg diff --git a/sound/weapons/sear_disabler.ogg b/sound/items/weapons/sear_disabler.ogg similarity index 100% rename from sound/weapons/sear_disabler.ogg rename to sound/items/weapons/sear_disabler.ogg diff --git a/sound/weapons/shove.ogg b/sound/items/weapons/shove.ogg similarity index 100% rename from sound/weapons/shove.ogg rename to sound/items/weapons/shove.ogg diff --git a/sound/weapons/shrink_hit.ogg b/sound/items/weapons/shrink_hit.ogg similarity index 100% rename from sound/weapons/shrink_hit.ogg rename to sound/items/weapons/shrink_hit.ogg diff --git a/sound/weapons/slam.ogg b/sound/items/weapons/slam.ogg similarity index 100% rename from sound/weapons/slam.ogg rename to sound/items/weapons/slam.ogg diff --git a/sound/weapons/slap.ogg b/sound/items/weapons/slap.ogg similarity index 100% rename from sound/weapons/slap.ogg rename to sound/items/weapons/slap.ogg diff --git a/sound/weapons/slash.ogg b/sound/items/weapons/slash.ogg similarity index 100% rename from sound/weapons/slash.ogg rename to sound/items/weapons/slash.ogg diff --git a/sound/weapons/slashmiss.ogg b/sound/items/weapons/slashmiss.ogg similarity index 100% rename from sound/weapons/slashmiss.ogg rename to sound/items/weapons/slashmiss.ogg diff --git a/sound/weapons/slice.ogg b/sound/items/weapons/slice.ogg similarity index 100% rename from sound/weapons/slice.ogg rename to sound/items/weapons/slice.ogg diff --git a/sound/weapons/smash.ogg b/sound/items/weapons/smash.ogg similarity index 100% rename from sound/weapons/smash.ogg rename to sound/items/weapons/smash.ogg diff --git a/sound/weapons/solarflare.ogg b/sound/items/weapons/solarflare.ogg similarity index 100% rename from sound/weapons/solarflare.ogg rename to sound/items/weapons/solarflare.ogg diff --git a/sound/weapons/sonic_jackhammer.ogg b/sound/items/weapons/sonic_jackhammer.ogg similarity index 100% rename from sound/weapons/sonic_jackhammer.ogg rename to sound/items/weapons/sonic_jackhammer.ogg diff --git a/sound/weapons/stringsmash.ogg b/sound/items/weapons/stringsmash.ogg similarity index 100% rename from sound/weapons/stringsmash.ogg rename to sound/items/weapons/stringsmash.ogg diff --git a/sound/weapons/tap.ogg b/sound/items/weapons/tap.ogg similarity index 100% rename from sound/weapons/tap.ogg rename to sound/items/weapons/tap.ogg diff --git a/sound/weapons/taser.ogg b/sound/items/weapons/taser.ogg similarity index 100% rename from sound/weapons/taser.ogg rename to sound/items/weapons/taser.ogg diff --git a/sound/weapons/taser2.ogg b/sound/items/weapons/taser2.ogg similarity index 100% rename from sound/weapons/taser2.ogg rename to sound/items/weapons/taser2.ogg diff --git a/sound/weapons/taser3.ogg b/sound/items/weapons/taser3.ogg similarity index 100% rename from sound/weapons/taser3.ogg rename to sound/items/weapons/taser3.ogg diff --git a/sound/weapons/taserhit.ogg b/sound/items/weapons/taserhit.ogg similarity index 100% rename from sound/weapons/taserhit.ogg rename to sound/items/weapons/taserhit.ogg diff --git a/sound/weapons/thermalpistol.ogg b/sound/items/weapons/thermalpistol.ogg similarity index 100% rename from sound/weapons/thermalpistol.ogg rename to sound/items/weapons/thermalpistol.ogg diff --git a/sound/weapons/throw.ogg b/sound/items/weapons/throw.ogg similarity index 100% rename from sound/weapons/throw.ogg rename to sound/items/weapons/throw.ogg diff --git a/sound/weapons/throwhard.ogg b/sound/items/weapons/throwhard.ogg similarity index 100% rename from sound/weapons/throwhard.ogg rename to sound/items/weapons/throwhard.ogg diff --git a/sound/weapons/throwsoft.ogg b/sound/items/weapons/throwsoft.ogg similarity index 100% rename from sound/weapons/throwsoft.ogg rename to sound/items/weapons/throwsoft.ogg diff --git a/sound/weapons/throwtap.ogg b/sound/items/weapons/throwtap.ogg similarity index 100% rename from sound/weapons/throwtap.ogg rename to sound/items/weapons/throwtap.ogg diff --git a/sound/weapons/thudswoosh.ogg b/sound/items/weapons/thudswoosh.ogg similarity index 100% rename from sound/weapons/thudswoosh.ogg rename to sound/items/weapons/thudswoosh.ogg diff --git a/sound/weapons/wave.ogg b/sound/items/weapons/wave.ogg similarity index 100% rename from sound/weapons/wave.ogg rename to sound/items/weapons/wave.ogg diff --git a/sound/weapons/whip.ogg b/sound/items/weapons/whip.ogg similarity index 100% rename from sound/weapons/whip.ogg rename to sound/items/weapons/whip.ogg diff --git a/sound/weapons/whipgrab.ogg b/sound/items/weapons/whipgrab.ogg similarity index 100% rename from sound/weapons/whipgrab.ogg rename to sound/items/weapons/whipgrab.ogg diff --git a/sound/weapons/zapbang.ogg b/sound/items/weapons/zapbang.ogg similarity index 100% rename from sound/weapons/zapbang.ogg rename to sound/items/weapons/zapbang.ogg diff --git a/sound/weapons/zipline_fire.ogg b/sound/items/weapons/zipline_fire.ogg similarity index 100% rename from sound/weapons/zipline_fire.ogg rename to sound/items/weapons/zipline_fire.ogg diff --git a/sound/weapons/zipline_hit.ogg b/sound/items/weapons/zipline_hit.ogg similarity index 100% rename from sound/weapons/zipline_hit.ogg rename to sound/items/weapons/zipline_hit.ogg diff --git a/sound/weapons/zipline_mid.ogg b/sound/items/weapons/zipline_mid.ogg similarity index 100% rename from sound/weapons/zipline_mid.ogg rename to sound/items/weapons/zipline_mid.ogg diff --git a/sound/misc/whistle.ogg b/sound/items/whistle/whistle.ogg similarity index 100% rename from sound/misc/whistle.ogg rename to sound/items/whistle/whistle.ogg diff --git a/sound/items/un_zip.ogg b/sound/items/zip/un_zip.ogg similarity index 100% rename from sound/items/un_zip.ogg rename to sound/items/zip/un_zip.ogg diff --git a/sound/items/zip.ogg b/sound/items/zip/zip.ogg similarity index 100% rename from sound/items/zip.ogg rename to sound/items/zip/zip.ogg diff --git a/sound/items/zip_up.ogg b/sound/items/zip/zip_up.ogg similarity index 100% rename from sound/items/zip_up.ogg rename to sound/items/zip/zip_up.ogg diff --git a/sound/machines/airlock.ogg b/sound/machines/airlock/airlock.ogg similarity index 100% rename from sound/machines/airlock.ogg rename to sound/machines/airlock/airlock.ogg diff --git a/sound/machines/airlock_alien_prying.ogg b/sound/machines/airlock/airlock_alien_prying.ogg similarity index 100% rename from sound/machines/airlock_alien_prying.ogg rename to sound/machines/airlock/airlock_alien_prying.ogg diff --git a/sound/machines/airlockclose.ogg b/sound/machines/airlock/airlockclose.ogg similarity index 100% rename from sound/machines/airlockclose.ogg rename to sound/machines/airlock/airlockclose.ogg diff --git a/sound/machines/airlockforced.ogg b/sound/machines/airlock/airlockforced.ogg similarity index 100% rename from sound/machines/airlockforced.ogg rename to sound/machines/airlock/airlockforced.ogg diff --git a/sound/machines/airlockopen.ogg b/sound/machines/airlock/airlockopen.ogg similarity index 100% rename from sound/machines/airlockopen.ogg rename to sound/machines/airlock/airlockopen.ogg diff --git a/sound/machines/boltsdown.ogg b/sound/machines/airlock/boltsdown.ogg similarity index 100% rename from sound/machines/boltsdown.ogg rename to sound/machines/airlock/boltsdown.ogg diff --git a/sound/machines/boltsup.ogg b/sound/machines/airlock/boltsup.ogg similarity index 100% rename from sound/machines/boltsup.ogg rename to sound/machines/airlock/boltsup.ogg diff --git a/sound/machines/doorclick.ogg b/sound/machines/airlock/doorclick.ogg similarity index 100% rename from sound/machines/doorclick.ogg rename to sound/machines/airlock/doorclick.ogg diff --git a/sound/arcade/boom.ogg b/sound/machines/arcade/boom.ogg similarity index 100% rename from sound/arcade/boom.ogg rename to sound/machines/arcade/boom.ogg diff --git a/sound/arcade/heal.ogg b/sound/machines/arcade/heal.ogg similarity index 100% rename from sound/arcade/heal.ogg rename to sound/machines/arcade/heal.ogg diff --git a/sound/arcade/hit.ogg b/sound/machines/arcade/hit.ogg similarity index 100% rename from sound/arcade/hit.ogg rename to sound/machines/arcade/hit.ogg diff --git a/sound/arcade/lose.ogg b/sound/machines/arcade/lose.ogg similarity index 100% rename from sound/arcade/lose.ogg rename to sound/machines/arcade/lose.ogg diff --git a/sound/arcade/mana.ogg b/sound/machines/arcade/mana.ogg similarity index 100% rename from sound/arcade/mana.ogg rename to sound/machines/arcade/mana.ogg diff --git a/sound/arcade/steal.ogg b/sound/machines/arcade/steal.ogg similarity index 100% rename from sound/arcade/steal.ogg rename to sound/machines/arcade/steal.ogg diff --git a/sound/arcade/win.ogg b/sound/machines/arcade/win.ogg similarity index 100% rename from sound/arcade/win.ogg rename to sound/machines/arcade/win.ogg diff --git a/sound/machines/beep.ogg b/sound/machines/beep/beep.ogg similarity index 100% rename from sound/machines/beep.ogg rename to sound/machines/beep/beep.ogg diff --git a/sound/machines/deniedbeep.ogg b/sound/machines/beep/deniedbeep.ogg similarity index 100% rename from sound/machines/deniedbeep.ogg rename to sound/machines/beep/deniedbeep.ogg diff --git a/sound/machines/triple_beep.ogg b/sound/machines/beep/triple_beep.ogg similarity index 100% rename from sound/machines/triple_beep.ogg rename to sound/machines/beep/triple_beep.ogg diff --git a/sound/machines/twobeep.ogg b/sound/machines/beep/twobeep.ogg similarity index 100% rename from sound/machines/twobeep.ogg rename to sound/machines/beep/twobeep.ogg diff --git a/sound/machines/twobeep_high.ogg b/sound/machines/beep/twobeep_high.ogg similarity index 100% rename from sound/machines/twobeep_high.ogg rename to sound/machines/beep/twobeep_high.ogg diff --git a/sound/machines/twobeep_voice1.ogg b/sound/machines/beep/twobeep_voice1.ogg similarity index 100% rename from sound/machines/twobeep_voice1.ogg rename to sound/machines/beep/twobeep_voice1.ogg diff --git a/sound/machines/twobeep_voice2.ogg b/sound/machines/beep/twobeep_voice2.ogg similarity index 100% rename from sound/machines/twobeep_voice2.ogg rename to sound/machines/beep/twobeep_voice2.ogg diff --git a/sound/machines/buzz-sigh.ogg b/sound/machines/buzz/buzz-sigh.ogg similarity index 100% rename from sound/machines/buzz-sigh.ogg rename to sound/machines/buzz/buzz-sigh.ogg diff --git a/sound/machines/buzz-two.ogg b/sound/machines/buzz/buzz-two.ogg similarity index 100% rename from sound/machines/buzz-two.ogg rename to sound/machines/buzz/buzz-two.ogg diff --git a/sound/machines/click.ogg b/sound/machines/click.ogg index b3947c86e040a..3b4914a487d37 100644 Binary files a/sound/machines/click.ogg and b/sound/machines/click.ogg differ diff --git a/sound/machines/closet_close.ogg b/sound/machines/closet/closet_close.ogg similarity index 100% rename from sound/machines/closet_close.ogg rename to sound/machines/closet/closet_close.ogg diff --git a/sound/machines/closet_open.ogg b/sound/machines/closet/closet_open.ogg similarity index 100% rename from sound/machines/closet_open.ogg rename to sound/machines/closet/closet_open.ogg diff --git a/sound/machines/wooden_closet_close.ogg b/sound/machines/closet/wooden_closet_close.ogg similarity index 100% rename from sound/machines/wooden_closet_close.ogg rename to sound/machines/closet/wooden_closet_close.ogg diff --git a/sound/machines/wooden_closet_open.ogg b/sound/machines/closet/wooden_closet_open.ogg similarity index 100% rename from sound/machines/wooden_closet_open.ogg rename to sound/machines/closet/wooden_closet_open.ogg diff --git a/sound/misc/compiler-failure.ogg b/sound/machines/compiler/compiler-failure.ogg old mode 100755 new mode 100644 similarity index 100% rename from sound/misc/compiler-failure.ogg rename to sound/machines/compiler/compiler-failure.ogg diff --git a/sound/misc/compiler-stage1.ogg b/sound/machines/compiler/compiler-stage1.ogg old mode 100755 new mode 100644 similarity index 100% rename from sound/misc/compiler-stage1.ogg rename to sound/machines/compiler/compiler-stage1.ogg diff --git a/sound/misc/compiler-stage2.ogg b/sound/machines/compiler/compiler-stage2.ogg old mode 100755 new mode 100644 similarity index 100% rename from sound/misc/compiler-stage2.ogg rename to sound/machines/compiler/compiler-stage2.ogg diff --git a/sound/machines/crate/attribution.txt b/sound/machines/crate/attribution.txt new file mode 100644 index 0000000000000..740d711971d88 --- /dev/null +++ b/sound/machines/crate/attribution.txt @@ -0,0 +1,3 @@ +crate_close.ogg and crate_open.ogg are made by lawnjelly +(https://freesound.org/people/lawnjelly/sounds/156892/) +They have been licensed under CC-BY 3.0, which can be found at http://creativecommons.org/licenses/by/3.0/ diff --git a/sound/machines/crate_close.ogg b/sound/machines/crate/crate_close.ogg similarity index 100% rename from sound/machines/crate_close.ogg rename to sound/machines/crate/crate_close.ogg diff --git a/sound/machines/crate_open.ogg b/sound/machines/crate/crate_open.ogg similarity index 100% rename from sound/machines/crate_open.ogg rename to sound/machines/crate/crate_open.ogg diff --git a/sound/machines/defib_SaftyOn.ogg b/sound/machines/defib/defib_SaftyOn.ogg similarity index 100% rename from sound/machines/defib_SaftyOn.ogg rename to sound/machines/defib/defib_SaftyOn.ogg diff --git a/sound/machines/defib_charge.ogg b/sound/machines/defib/defib_charge.ogg similarity index 100% rename from sound/machines/defib_charge.ogg rename to sound/machines/defib/defib_charge.ogg diff --git a/sound/machines/defib_failed.ogg b/sound/machines/defib/defib_failed.ogg similarity index 100% rename from sound/machines/defib_failed.ogg rename to sound/machines/defib/defib_failed.ogg diff --git a/sound/machines/defib_ready.ogg b/sound/machines/defib/defib_ready.ogg similarity index 100% rename from sound/machines/defib_ready.ogg rename to sound/machines/defib/defib_ready.ogg diff --git a/sound/machines/defib_saftyOff.ogg b/sound/machines/defib/defib_saftyOff.ogg similarity index 100% rename from sound/machines/defib_saftyOff.ogg rename to sound/machines/defib/defib_saftyOff.ogg diff --git a/sound/machines/defib_success.ogg b/sound/machines/defib/defib_success.ogg similarity index 100% rename from sound/machines/defib_success.ogg rename to sound/machines/defib/defib_success.ogg diff --git a/sound/machines/defib_zap.ogg b/sound/machines/defib/defib_zap.ogg similarity index 100% rename from sound/machines/defib_zap.ogg rename to sound/machines/defib/defib_zap.ogg diff --git a/sound/machines/door_close.ogg b/sound/machines/door/door_close.ogg similarity index 100% rename from sound/machines/door_close.ogg rename to sound/machines/door/door_close.ogg diff --git a/sound/machines/door_locked.ogg b/sound/machines/door/door_locked.ogg similarity index 100% rename from sound/machines/door_locked.ogg rename to sound/machines/door/door_locked.ogg diff --git a/sound/machines/door_open.ogg b/sound/machines/door/door_open.ogg similarity index 100% rename from sound/machines/door_open.ogg rename to sound/machines/door/door_open.ogg diff --git a/sound/machines/engine_alert1.ogg b/sound/machines/engine_alert/engine_alert1.ogg similarity index 100% rename from sound/machines/engine_alert1.ogg rename to sound/machines/engine_alert/engine_alert1.ogg diff --git a/sound/machines/engine_alert2.ogg b/sound/machines/engine_alert/engine_alert2.ogg similarity index 100% rename from sound/machines/engine_alert2.ogg rename to sound/machines/engine_alert/engine_alert2.ogg diff --git a/sound/machines/engine_alert3.ogg b/sound/machines/engine_alert/engine_alert3.ogg similarity index 100% rename from sound/machines/engine_alert3.ogg rename to sound/machines/engine_alert/engine_alert3.ogg diff --git a/sound/machines/fan_break.ogg b/sound/machines/fan/fan_break.ogg similarity index 100% rename from sound/machines/fan_break.ogg rename to sound/machines/fan/fan_break.ogg diff --git a/sound/machines/fan_loop.ogg b/sound/machines/fan/fan_loop.ogg similarity index 100% rename from sound/machines/fan_loop.ogg rename to sound/machines/fan/fan_loop.ogg diff --git a/sound/machines/fan_start.ogg b/sound/machines/fan/fan_start.ogg similarity index 100% rename from sound/machines/fan_start.ogg rename to sound/machines/fan/fan_start.ogg diff --git a/sound/machines/fan_stop.ogg b/sound/machines/fan/fan_stop.ogg similarity index 100% rename from sound/machines/fan_stop.ogg rename to sound/machines/fan/fan_stop.ogg diff --git a/sound/machines/FireAlarm1.ogg b/sound/machines/fire_alarm/FireAlarm1.ogg similarity index 100% rename from sound/machines/FireAlarm1.ogg rename to sound/machines/fire_alarm/FireAlarm1.ogg diff --git a/sound/machines/FireAlarm2.ogg b/sound/machines/fire_alarm/FireAlarm2.ogg similarity index 100% rename from sound/machines/FireAlarm2.ogg rename to sound/machines/fire_alarm/FireAlarm2.ogg diff --git a/sound/machines/FireAlarm3.ogg b/sound/machines/fire_alarm/FireAlarm3.ogg similarity index 100% rename from sound/machines/FireAlarm3.ogg rename to sound/machines/fire_alarm/FireAlarm3.ogg diff --git a/sound/machines/FireAlarm4.ogg b/sound/machines/fire_alarm/FireAlarm4.ogg similarity index 100% rename from sound/machines/FireAlarm4.ogg rename to sound/machines/fire_alarm/FireAlarm4.ogg diff --git a/sound/effects/gateway_calibrated.ogg b/sound/machines/gateway/gateway_calibrated.ogg similarity index 100% rename from sound/effects/gateway_calibrated.ogg rename to sound/machines/gateway/gateway_calibrated.ogg diff --git a/sound/effects/gateway_calibrating.ogg b/sound/machines/gateway/gateway_calibrating.ogg similarity index 100% rename from sound/effects/gateway_calibrating.ogg rename to sound/machines/gateway/gateway_calibrating.ogg diff --git a/sound/effects/gateway_close.ogg b/sound/machines/gateway/gateway_close.ogg similarity index 100% rename from sound/effects/gateway_close.ogg rename to sound/machines/gateway/gateway_close.ogg diff --git a/sound/effects/gateway_open.ogg b/sound/machines/gateway/gateway_open.ogg similarity index 100% rename from sound/effects/gateway_open.ogg rename to sound/machines/gateway/gateway_open.ogg diff --git a/sound/effects/gateway_travel.ogg b/sound/machines/gateway/gateway_travel.ogg similarity index 100% rename from sound/effects/gateway_travel.ogg rename to sound/machines/gateway/gateway_travel.ogg diff --git a/sound/machines/gravgen/attribution.txt b/sound/machines/gravgen/attribution.txt new file mode 100644 index 0000000000000..f4aeab2c4902a --- /dev/null +++ b/sound/machines/gravgen/attribution.txt @@ -0,0 +1,6 @@ +{ +grav_gen_start.ogg +grav_gen_mid1.ogg +grav_gen_mid2.ogg - + Explosion 7b by LiamG_SFX -- https://freesound.org/s/322492/ -- License: Attribution NonCommercial 4.0 +grav_gen_end.ogg +} made by sadboysuss by editing a sound made by kayozz , license: CC-by-SA \ No newline at end of file diff --git a/sound/machines/gravgen/grav_gen_end.ogg b/sound/machines/gravgen/grav_gen_end.ogg new file mode 100644 index 0000000000000..a63305708d030 Binary files /dev/null and b/sound/machines/gravgen/grav_gen_end.ogg differ diff --git a/sound/machines/gravgen/grav_gen_mid1.ogg b/sound/machines/gravgen/grav_gen_mid1.ogg new file mode 100644 index 0000000000000..e6e38c11d467b Binary files /dev/null and b/sound/machines/gravgen/grav_gen_mid1.ogg differ diff --git a/sound/machines/gravgen/grav_gen_mid2.ogg b/sound/machines/gravgen/grav_gen_mid2.ogg new file mode 100644 index 0000000000000..cf112de1885b4 Binary files /dev/null and b/sound/machines/gravgen/grav_gen_mid2.ogg differ diff --git a/sound/machines/gravgen/grav_gen_start.ogg b/sound/machines/gravgen/grav_gen_start.ogg new file mode 100644 index 0000000000000..4a734e5517020 Binary files /dev/null and b/sound/machines/gravgen/grav_gen_start.ogg differ diff --git a/sound/machines/gravgen/gravgen_mid1.ogg b/sound/machines/gravgen/gravgen_mid1.ogg deleted file mode 100644 index de2744194bdc6..0000000000000 Binary files a/sound/machines/gravgen/gravgen_mid1.ogg and /dev/null differ diff --git a/sound/machines/gravgen/gravgen_mid2.ogg b/sound/machines/gravgen/gravgen_mid2.ogg deleted file mode 100644 index 7b09d566e91eb..0000000000000 Binary files a/sound/machines/gravgen/gravgen_mid2.ogg and /dev/null differ diff --git a/sound/machines/gravgen/gravgen_mid3.ogg b/sound/machines/gravgen/gravgen_mid3.ogg deleted file mode 100644 index 6e133b5fcfe60..0000000000000 Binary files a/sound/machines/gravgen/gravgen_mid3.ogg and /dev/null differ diff --git a/sound/machines/gravgen/gravgen_mid4.ogg b/sound/machines/gravgen/gravgen_mid4.ogg deleted file mode 100644 index 4f08f5e6d2273..0000000000000 Binary files a/sound/machines/gravgen/gravgen_mid4.ogg and /dev/null differ diff --git a/sound/machines/attributions.txt b/sound/machines/lathe/attributions.txt similarity index 100% rename from sound/machines/attributions.txt rename to sound/machines/lathe/attributions.txt diff --git a/sound/lavaland/cursed_slot_machine.ogg b/sound/machines/lavaland/cursed_slot_machine.ogg similarity index 100% rename from sound/lavaland/cursed_slot_machine.ogg rename to sound/machines/lavaland/cursed_slot_machine.ogg diff --git a/sound/lavaland/cursed_slot_machine_jackpot.ogg b/sound/machines/lavaland/cursed_slot_machine_jackpot.ogg similarity index 100% rename from sound/lavaland/cursed_slot_machine_jackpot.ogg rename to sound/machines/lavaland/cursed_slot_machine_jackpot.ogg diff --git a/sound/machines/lever/attribution.txt b/sound/machines/lever/attribution.txt new file mode 100644 index 0000000000000..ef86e6ca5c5ac --- /dev/null +++ b/sound/machines/lever/attribution.txt @@ -0,0 +1,3 @@ +lever_start.ogg and lever_stop.ogg are made by A_Kuha on FreeSound +https://freesound.org/people/A_Kuha/sounds/676412 +This is licensed under CC-0, found at https://creativecommons.org/publicdomain/zero/1.0/ diff --git a/sound/machines/lever/lever_start.ogg b/sound/machines/lever/lever_start.ogg new file mode 100644 index 0000000000000..4160f39026ac0 Binary files /dev/null and b/sound/machines/lever/lever_start.ogg differ diff --git a/sound/machines/lever/lever_stop.ogg b/sound/machines/lever/lever_stop.ogg new file mode 100644 index 0000000000000..22f8875019dd4 Binary files /dev/null and b/sound/machines/lever/lever_stop.ogg differ diff --git a/sound/machines/license.txt b/sound/machines/license.txt index 6a54969a19170..dbccfd7ea096d 100644 --- a/sound/machines/license.txt +++ b/sound/machines/license.txt @@ -1,10 +1,6 @@ -crate_close.ogg and crate_open.ogg are made by lawnjelly -(https://freesound.org/people/lawnjelly/sounds/156892/) -They have been licensed under CC-BY 3.0, which can be found at http://creativecommons.org/licenses/by/3.0/ - coffeemaker_brew.ogg originally made by Adriana Lopez (Acekat13X31), edited to reduce length and added fade (https://freesound.org/people/Acekat13X31/sounds/515685/) This is licensed under CC-BY 4.0, found at https://creativecommons.org/licenses/by/4.0/ shutter.ogg adapted from Joseph Sardin on BigSoundBank -https://bigsoundbank.com/detail-2475-manual-roller-shutter-closing-out-2.html \ No newline at end of file +https://bigsoundbank.com/detail-2475-manual-roller-shutter-closing-out-2.html diff --git a/sound/machines/pda_button1.ogg b/sound/machines/pda_button/pda_button1.ogg similarity index 100% rename from sound/machines/pda_button1.ogg rename to sound/machines/pda_button/pda_button1.ogg diff --git a/sound/machines/pda_button2.ogg b/sound/machines/pda_button/pda_button2.ogg similarity index 100% rename from sound/machines/pda_button2.ogg rename to sound/machines/pda_button/pda_button2.ogg diff --git a/sound/machines/piston_lower.ogg b/sound/machines/piston/piston_lower.ogg similarity index 100% rename from sound/machines/piston_lower.ogg rename to sound/machines/piston/piston_lower.ogg diff --git a/sound/machines/piston_raise.ogg b/sound/machines/piston/piston_raise.ogg similarity index 100% rename from sound/machines/piston_raise.ogg rename to sound/machines/piston/piston_raise.ogg diff --git a/sound/machines/roulettejackpot.ogg b/sound/machines/roulette/roulettejackpot.ogg similarity index 100% rename from sound/machines/roulettejackpot.ogg rename to sound/machines/roulette/roulettejackpot.ogg diff --git a/sound/machines/roulettewheel.ogg b/sound/machines/roulette/roulettewheel.ogg similarity index 100% rename from sound/machines/roulettewheel.ogg rename to sound/machines/roulette/roulettewheel.ogg diff --git a/sound/machines/scanbuzz.ogg b/sound/machines/scanner/scanbuzz.ogg similarity index 100% rename from sound/machines/scanbuzz.ogg rename to sound/machines/scanner/scanbuzz.ogg diff --git a/sound/machines/scanner.ogg b/sound/machines/scanner/scanner.ogg similarity index 100% rename from sound/machines/scanner.ogg rename to sound/machines/scanner/scanner.ogg diff --git a/sound/machines/synth_no.ogg b/sound/machines/synth/synth_no.ogg similarity index 100% rename from sound/machines/synth_no.ogg rename to sound/machines/synth/synth_no.ogg diff --git a/sound/machines/synth_yes.ogg b/sound/machines/synth/synth_yes.ogg similarity index 100% rename from sound/machines/synth_yes.ogg rename to sound/machines/synth/synth_yes.ogg diff --git a/sound/machines/terminal_alert.ogg b/sound/machines/terminal/terminal_alert.ogg similarity index 100% rename from sound/machines/terminal_alert.ogg rename to sound/machines/terminal/terminal_alert.ogg diff --git a/sound/machines/terminal_button01.ogg b/sound/machines/terminal/terminal_button01.ogg similarity index 100% rename from sound/machines/terminal_button01.ogg rename to sound/machines/terminal/terminal_button01.ogg diff --git a/sound/machines/terminal_button02.ogg b/sound/machines/terminal/terminal_button02.ogg similarity index 100% rename from sound/machines/terminal_button02.ogg rename to sound/machines/terminal/terminal_button02.ogg diff --git a/sound/machines/terminal_button03.ogg b/sound/machines/terminal/terminal_button03.ogg similarity index 100% rename from sound/machines/terminal_button03.ogg rename to sound/machines/terminal/terminal_button03.ogg diff --git a/sound/machines/terminal_button04.ogg b/sound/machines/terminal/terminal_button04.ogg similarity index 100% rename from sound/machines/terminal_button04.ogg rename to sound/machines/terminal/terminal_button04.ogg diff --git a/sound/machines/terminal_button05.ogg b/sound/machines/terminal/terminal_button05.ogg similarity index 100% rename from sound/machines/terminal_button05.ogg rename to sound/machines/terminal/terminal_button05.ogg diff --git a/sound/machines/terminal_button06.ogg b/sound/machines/terminal/terminal_button06.ogg similarity index 100% rename from sound/machines/terminal_button06.ogg rename to sound/machines/terminal/terminal_button06.ogg diff --git a/sound/machines/terminal_button07.ogg b/sound/machines/terminal/terminal_button07.ogg similarity index 100% rename from sound/machines/terminal_button07.ogg rename to sound/machines/terminal/terminal_button07.ogg diff --git a/sound/machines/terminal_button08.ogg b/sound/machines/terminal/terminal_button08.ogg similarity index 100% rename from sound/machines/terminal_button08.ogg rename to sound/machines/terminal/terminal_button08.ogg diff --git a/sound/machines/terminal_eject.ogg b/sound/machines/terminal/terminal_eject.ogg similarity index 100% rename from sound/machines/terminal_eject.ogg rename to sound/machines/terminal/terminal_eject.ogg diff --git a/sound/machines/terminal_error.ogg b/sound/machines/terminal/terminal_error.ogg similarity index 100% rename from sound/machines/terminal_error.ogg rename to sound/machines/terminal/terminal_error.ogg diff --git a/sound/machines/terminal_insert_disc.ogg b/sound/machines/terminal/terminal_insert_disc.ogg similarity index 100% rename from sound/machines/terminal_insert_disc.ogg rename to sound/machines/terminal/terminal_insert_disc.ogg diff --git a/sound/machines/terminal_off.ogg b/sound/machines/terminal/terminal_off.ogg similarity index 100% rename from sound/machines/terminal_off.ogg rename to sound/machines/terminal/terminal_off.ogg diff --git a/sound/machines/terminal_on.ogg b/sound/machines/terminal/terminal_on.ogg similarity index 100% rename from sound/machines/terminal_on.ogg rename to sound/machines/terminal/terminal_on.ogg diff --git a/sound/machines/terminal_processing.ogg b/sound/machines/terminal/terminal_processing.ogg similarity index 100% rename from sound/machines/terminal_processing.ogg rename to sound/machines/terminal/terminal_processing.ogg diff --git a/sound/machines/terminal_prompt.ogg b/sound/machines/terminal/terminal_prompt.ogg similarity index 100% rename from sound/machines/terminal_prompt.ogg rename to sound/machines/terminal/terminal_prompt.ogg diff --git a/sound/machines/terminal_prompt_confirm.ogg b/sound/machines/terminal/terminal_prompt_confirm.ogg similarity index 100% rename from sound/machines/terminal_prompt_confirm.ogg rename to sound/machines/terminal/terminal_prompt_confirm.ogg diff --git a/sound/machines/terminal_prompt_deny.ogg b/sound/machines/terminal/terminal_prompt_deny.ogg similarity index 100% rename from sound/machines/terminal_prompt_deny.ogg rename to sound/machines/terminal/terminal_prompt_deny.ogg diff --git a/sound/machines/terminal_select.ogg b/sound/machines/terminal/terminal_select.ogg similarity index 100% rename from sound/machines/terminal_select.ogg rename to sound/machines/terminal/terminal_select.ogg diff --git a/sound/machines/terminal_success.ogg b/sound/machines/terminal/terminal_success.ogg similarity index 100% rename from sound/machines/terminal_success.ogg rename to sound/machines/terminal/terminal_success.ogg diff --git a/sound/machines/tramclose.ogg b/sound/machines/tram/tramclose.ogg similarity index 100% rename from sound/machines/tramclose.ogg rename to sound/machines/tram/tramclose.ogg diff --git a/sound/machines/tramopen.ogg b/sound/machines/tram/tramopen.ogg similarity index 100% rename from sound/machines/tramopen.ogg rename to sound/machines/tram/tramopen.ogg diff --git a/sound/machines/uplinkerror.ogg b/sound/machines/uplink/uplinkerror.ogg similarity index 100% rename from sound/machines/uplinkerror.ogg rename to sound/machines/uplink/uplinkerror.ogg diff --git a/sound/machines/uplinkpurchase.ogg b/sound/machines/uplink/uplinkpurchase.ogg similarity index 100% rename from sound/machines/uplinkpurchase.ogg rename to sound/machines/uplink/uplinkpurchase.ogg diff --git a/sound/misc/Yeehaw.ogg b/sound/misc/Yeehaw.ogg deleted file mode 100644 index 05bec20b9c120..0000000000000 Binary files a/sound/misc/Yeehaw.ogg and /dev/null differ diff --git a/sound/voice/insane_low_laugh.ogg b/sound/misc/insane_low_laugh.ogg similarity index 100% rename from sound/voice/insane_low_laugh.ogg rename to sound/misc/insane_low_laugh.ogg diff --git a/sound/misc/license.txt b/sound/misc/license.txt index 761a031d19081..2e596a4e128e3 100644 --- a/sound/misc/license.txt +++ b/sound/misc/license.txt @@ -1,17 +1,2 @@ -bloop.ogg by my man Tim Khan +bloop.ogg by my man Tim Khan (https://freesound.org/people/tim.kahn/sounds/130377/) - -knuckles.ogg by CGEffex. Shortened and cut. -https://freesound.org/people/CGEffex/sounds/93981/ - -airraid.ogg by Jwade722. Shortened and cut. -https://freesound.org/people/Jwade722/sounds/534550/ - -radio_talk.ogg by cs2975871. Shortened and cut. -https://freesound.org/people/cs2975871/sounds/514185/ - -radio_important.ogg by morganpurkis. -https://freesound.org/people/morganpurkis/sounds/392972/ - -radio_receive.ogg by JovianSounds. Shortened and cut. -https://freesound.org/people/JovianSounds/sounds/524205/ \ No newline at end of file diff --git a/sound/misc/null.ogg b/sound/misc/null.ogg deleted file mode 100644 index 698709398a3c2..0000000000000 Binary files a/sound/misc/null.ogg and /dev/null differ diff --git a/sound/voice/roleplay.ogg b/sound/misc/roleplay.ogg similarity index 100% rename from sound/voice/roleplay.ogg rename to sound/misc/roleplay.ogg diff --git a/sound/misc/server-ready.ogg b/sound/misc/server-ready.ogg old mode 100755 new mode 100644 diff --git a/sound/voice/breathing/attribution.txt b/sound/mobs/humanoids/breathing/attribution.txt similarity index 100% rename from sound/voice/breathing/attribution.txt rename to sound/mobs/humanoids/breathing/attribution.txt diff --git a/sound/voice/breathing/internals_breathing1.ogg b/sound/mobs/humanoids/breathing/internals_breathing1.ogg similarity index 100% rename from sound/voice/breathing/internals_breathing1.ogg rename to sound/mobs/humanoids/breathing/internals_breathing1.ogg diff --git a/sound/voice/breathing/internals_breathing2.ogg b/sound/mobs/humanoids/breathing/internals_breathing2.ogg similarity index 100% rename from sound/voice/breathing/internals_breathing2.ogg rename to sound/mobs/humanoids/breathing/internals_breathing2.ogg diff --git a/sound/voice/breathing/internals_breathing3.ogg b/sound/mobs/humanoids/breathing/internals_breathing3.ogg similarity index 100% rename from sound/voice/breathing/internals_breathing3.ogg rename to sound/mobs/humanoids/breathing/internals_breathing3.ogg diff --git a/sound/voice/breathing/internals_breathing4.ogg b/sound/mobs/humanoids/breathing/internals_breathing4.ogg similarity index 100% rename from sound/voice/breathing/internals_breathing4.ogg rename to sound/mobs/humanoids/breathing/internals_breathing4.ogg diff --git a/sound/voice/breathing/internals_breathing5.ogg b/sound/mobs/humanoids/breathing/internals_breathing5.ogg similarity index 100% rename from sound/voice/breathing/internals_breathing5.ogg rename to sound/mobs/humanoids/breathing/internals_breathing5.ogg diff --git a/sound/voice/breathing/internals_breathing6.ogg b/sound/mobs/humanoids/breathing/internals_breathing6.ogg similarity index 100% rename from sound/voice/breathing/internals_breathing6.ogg rename to sound/mobs/humanoids/breathing/internals_breathing6.ogg diff --git a/sound/voice/breathing/internals_breathing7.ogg b/sound/mobs/humanoids/breathing/internals_breathing7.ogg similarity index 100% rename from sound/voice/breathing/internals_breathing7.ogg rename to sound/mobs/humanoids/breathing/internals_breathing7.ogg diff --git a/sound/voice/breathing/internals_breathing8.ogg b/sound/mobs/humanoids/breathing/internals_breathing8.ogg similarity index 100% rename from sound/voice/breathing/internals_breathing8.ogg rename to sound/mobs/humanoids/breathing/internals_breathing8.ogg diff --git a/sound/effects/ethereal_crystalization.ogg b/sound/mobs/humanoids/ethereal/ethereal_crystalization.ogg similarity index 100% rename from sound/effects/ethereal_crystalization.ogg rename to sound/mobs/humanoids/ethereal/ethereal_crystalization.ogg diff --git a/sound/effects/ethereal_revive.ogg b/sound/mobs/humanoids/ethereal/ethereal_revive.ogg similarity index 100% rename from sound/effects/ethereal_revive.ogg rename to sound/mobs/humanoids/ethereal/ethereal_revive.ogg diff --git a/sound/effects/ethereal_revive_fail.ogg b/sound/mobs/humanoids/ethereal/ethereal_revive_fail.ogg similarity index 100% rename from sound/effects/ethereal_revive_fail.ogg rename to sound/mobs/humanoids/ethereal/ethereal_revive_fail.ogg diff --git a/sound/voice/ethereal/ethereal_scream_1.ogg b/sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg similarity index 100% rename from sound/voice/ethereal/ethereal_scream_1.ogg rename to sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg diff --git a/sound/voice/ethereal/ethereal_scream_2.ogg b/sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg similarity index 100% rename from sound/voice/ethereal/ethereal_scream_2.ogg rename to sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg diff --git a/sound/voice/ethereal/ethereal_scream_3.ogg b/sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg similarity index 100% rename from sound/voice/ethereal/ethereal_scream_3.ogg rename to sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg diff --git a/sound/voice/ethereal/lustrous_scream_1.ogg b/sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg similarity index 100% rename from sound/voice/ethereal/lustrous_scream_1.ogg rename to sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg diff --git a/sound/voice/ethereal/lustrous_scream_2.ogg b/sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg similarity index 100% rename from sound/voice/ethereal/lustrous_scream_2.ogg rename to sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg diff --git a/sound/voice/ethereal/lustrous_scream_3.ogg b/sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg similarity index 100% rename from sound/voice/ethereal/lustrous_scream_3.ogg rename to sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg diff --git a/sound/mobs/humanoids/human/attribution.txt b/sound/mobs/humanoids/human/attribution.txt new file mode 100644 index 0000000000000..254e7a7b3aede --- /dev/null +++ b/sound/mobs/humanoids/human/attribution.txt @@ -0,0 +1,8 @@ +The male sharp gasps are from https://freesound.org/people/bacruz666/sounds/341908/ and https://freesound.org/people/nettoi/sounds/677540/, the female sharp gasps are from https://freesound.org/people/drotzruhn/sounds/405203/ + +{ +male_sniff.ogg - https://freesound.org/people/Fluffayfish/sounds/327799/ , License: CC BY-NC 3.0 +male_sigh.ogg - https://freesound.org/people/giddster/sounds/336540/ , License: CC0 +female_sniff.ogg - https://freesound.org/people/SpliceSound/sounds/218307/ , License: CC0 +female_sigh.ogg - https://freesound.org/people/biawinter/sounds/408090/ , License: CC BY-NC 4.0 +} modified by grungussuss diff --git a/sound/misc/clap1.ogg b/sound/mobs/humanoids/human/clap/clap1.ogg similarity index 100% rename from sound/misc/clap1.ogg rename to sound/mobs/humanoids/human/clap/clap1.ogg diff --git a/sound/misc/clap2.ogg b/sound/mobs/humanoids/human/clap/clap2.ogg similarity index 100% rename from sound/misc/clap2.ogg rename to sound/mobs/humanoids/human/clap/clap2.ogg diff --git a/sound/misc/clap3.ogg b/sound/mobs/humanoids/human/clap/clap3.ogg similarity index 100% rename from sound/misc/clap3.ogg rename to sound/mobs/humanoids/human/clap/clap3.ogg diff --git a/sound/misc/clap4.ogg b/sound/mobs/humanoids/human/clap/clap4.ogg similarity index 100% rename from sound/misc/clap4.ogg rename to sound/mobs/humanoids/human/clap/clap4.ogg diff --git a/sound/voice/human/female_cough1.ogg b/sound/mobs/humanoids/human/cough/female_cough1.ogg similarity index 100% rename from sound/voice/human/female_cough1.ogg rename to sound/mobs/humanoids/human/cough/female_cough1.ogg diff --git a/sound/voice/human/female_cough2.ogg b/sound/mobs/humanoids/human/cough/female_cough2.ogg similarity index 100% rename from sound/voice/human/female_cough2.ogg rename to sound/mobs/humanoids/human/cough/female_cough2.ogg diff --git a/sound/voice/human/female_cough3.ogg b/sound/mobs/humanoids/human/cough/female_cough3.ogg similarity index 100% rename from sound/voice/human/female_cough3.ogg rename to sound/mobs/humanoids/human/cough/female_cough3.ogg diff --git a/sound/voice/human/female_cough4.ogg b/sound/mobs/humanoids/human/cough/female_cough4.ogg similarity index 100% rename from sound/voice/human/female_cough4.ogg rename to sound/mobs/humanoids/human/cough/female_cough4.ogg diff --git a/sound/voice/human/female_cough5.ogg b/sound/mobs/humanoids/human/cough/female_cough5.ogg similarity index 100% rename from sound/voice/human/female_cough5.ogg rename to sound/mobs/humanoids/human/cough/female_cough5.ogg diff --git a/sound/voice/human/female_cough6.ogg b/sound/mobs/humanoids/human/cough/female_cough6.ogg similarity index 100% rename from sound/voice/human/female_cough6.ogg rename to sound/mobs/humanoids/human/cough/female_cough6.ogg diff --git a/sound/voice/human/male_cough1.ogg b/sound/mobs/humanoids/human/cough/male_cough1.ogg similarity index 100% rename from sound/voice/human/male_cough1.ogg rename to sound/mobs/humanoids/human/cough/male_cough1.ogg diff --git a/sound/voice/human/male_cough2.ogg b/sound/mobs/humanoids/human/cough/male_cough2.ogg similarity index 100% rename from sound/voice/human/male_cough2.ogg rename to sound/mobs/humanoids/human/cough/male_cough2.ogg diff --git a/sound/voice/human/male_cough3.ogg b/sound/mobs/humanoids/human/cough/male_cough3.ogg similarity index 100% rename from sound/voice/human/male_cough3.ogg rename to sound/mobs/humanoids/human/cough/male_cough3.ogg diff --git a/sound/voice/human/male_cough4.ogg b/sound/mobs/humanoids/human/cough/male_cough4.ogg similarity index 100% rename from sound/voice/human/male_cough4.ogg rename to sound/mobs/humanoids/human/cough/male_cough4.ogg diff --git a/sound/voice/human/male_cough5.ogg b/sound/mobs/humanoids/human/cough/male_cough5.ogg similarity index 100% rename from sound/voice/human/male_cough5.ogg rename to sound/mobs/humanoids/human/cough/male_cough5.ogg diff --git a/sound/voice/human/male_cough6.ogg b/sound/mobs/humanoids/human/cough/male_cough6.ogg similarity index 100% rename from sound/voice/human/male_cough6.ogg rename to sound/mobs/humanoids/human/cough/male_cough6.ogg diff --git a/sound/voice/human/female_cry1.ogg b/sound/mobs/humanoids/human/cry/female_cry1.ogg similarity index 100% rename from sound/voice/human/female_cry1.ogg rename to sound/mobs/humanoids/human/cry/female_cry1.ogg diff --git a/sound/voice/human/female_cry2.ogg b/sound/mobs/humanoids/human/cry/female_cry2.ogg similarity index 100% rename from sound/voice/human/female_cry2.ogg rename to sound/mobs/humanoids/human/cry/female_cry2.ogg diff --git a/sound/voice/human/male_cry1.ogg b/sound/mobs/humanoids/human/cry/male_cry1.ogg similarity index 100% rename from sound/voice/human/male_cry1.ogg rename to sound/mobs/humanoids/human/cry/male_cry1.ogg diff --git a/sound/voice/human/male_cry2.ogg b/sound/mobs/humanoids/human/cry/male_cry2.ogg similarity index 100% rename from sound/voice/human/male_cry2.ogg rename to sound/mobs/humanoids/human/cry/male_cry2.ogg diff --git a/sound/voice/human/male_cry3.ogg b/sound/mobs/humanoids/human/cry/male_cry3.ogg similarity index 100% rename from sound/voice/human/male_cry3.ogg rename to sound/mobs/humanoids/human/cry/male_cry3.ogg diff --git a/sound/creatures/crack_vomit.ogg b/sound/mobs/humanoids/human/gag_vomit/crack_vomit.ogg similarity index 100% rename from sound/creatures/crack_vomit.ogg rename to sound/mobs/humanoids/human/gag_vomit/crack_vomit.ogg diff --git a/sound/creatures/gag1.ogg b/sound/mobs/humanoids/human/gag_vomit/gag1.ogg similarity index 100% rename from sound/creatures/gag1.ogg rename to sound/mobs/humanoids/human/gag_vomit/gag1.ogg diff --git a/sound/creatures/gag2.ogg b/sound/mobs/humanoids/human/gag_vomit/gag2.ogg similarity index 100% rename from sound/creatures/gag2.ogg rename to sound/mobs/humanoids/human/gag_vomit/gag2.ogg diff --git a/sound/creatures/gag3.ogg b/sound/mobs/humanoids/human/gag_vomit/gag3.ogg similarity index 100% rename from sound/creatures/gag3.ogg rename to sound/mobs/humanoids/human/gag_vomit/gag3.ogg diff --git a/sound/creatures/gag4.ogg b/sound/mobs/humanoids/human/gag_vomit/gag4.ogg similarity index 100% rename from sound/creatures/gag4.ogg rename to sound/mobs/humanoids/human/gag_vomit/gag4.ogg diff --git a/sound/creatures/gag5.ogg b/sound/mobs/humanoids/human/gag_vomit/gag5.ogg similarity index 100% rename from sound/creatures/gag5.ogg rename to sound/mobs/humanoids/human/gag_vomit/gag5.ogg diff --git a/sound/voice/human/gasp_female1.ogg b/sound/mobs/humanoids/human/gasp/gasp_female1.ogg similarity index 100% rename from sound/voice/human/gasp_female1.ogg rename to sound/mobs/humanoids/human/gasp/gasp_female1.ogg diff --git a/sound/voice/human/gasp_female2.ogg b/sound/mobs/humanoids/human/gasp/gasp_female2.ogg similarity index 100% rename from sound/voice/human/gasp_female2.ogg rename to sound/mobs/humanoids/human/gasp/gasp_female2.ogg diff --git a/sound/voice/human/gasp_female3.ogg b/sound/mobs/humanoids/human/gasp/gasp_female3.ogg similarity index 100% rename from sound/voice/human/gasp_female3.ogg rename to sound/mobs/humanoids/human/gasp/gasp_female3.ogg diff --git a/sound/voice/human/gasp_male1.ogg b/sound/mobs/humanoids/human/gasp/gasp_male1.ogg similarity index 100% rename from sound/voice/human/gasp_male1.ogg rename to sound/mobs/humanoids/human/gasp/gasp_male1.ogg diff --git a/sound/voice/human/gasp_male2.ogg b/sound/mobs/humanoids/human/gasp/gasp_male2.ogg similarity index 100% rename from sound/voice/human/gasp_male2.ogg rename to sound/mobs/humanoids/human/gasp/gasp_male2.ogg diff --git a/sound/effects/sf_hiccup_male_01.ogg b/sound/mobs/humanoids/human/hiccup/sf_hiccup_male_01.ogg similarity index 100% rename from sound/effects/sf_hiccup_male_01.ogg rename to sound/mobs/humanoids/human/hiccup/sf_hiccup_male_01.ogg diff --git a/sound/mobs/humanoids/human/knuckle_crack/attribution.txt b/sound/mobs/humanoids/human/knuckle_crack/attribution.txt new file mode 100644 index 0000000000000..da2f5afadb414 --- /dev/null +++ b/sound/mobs/humanoids/human/knuckle_crack/attribution.txt @@ -0,0 +1,2 @@ +knuckles.ogg by CGEffex. Shortened and cut. +https://freesound.org/people/CGEffex/sounds/93981/ diff --git a/sound/misc/knuckles.ogg b/sound/mobs/humanoids/human/knuckle_crack/knuckles.ogg similarity index 100% rename from sound/misc/knuckles.ogg rename to sound/mobs/humanoids/human/knuckle_crack/knuckles.ogg diff --git a/sound/voice/human/manlaugh1.ogg b/sound/mobs/humanoids/human/laugh/manlaugh1.ogg similarity index 100% rename from sound/voice/human/manlaugh1.ogg rename to sound/mobs/humanoids/human/laugh/manlaugh1.ogg diff --git a/sound/voice/human/manlaugh2.ogg b/sound/mobs/humanoids/human/laugh/manlaugh2.ogg similarity index 100% rename from sound/voice/human/manlaugh2.ogg rename to sound/mobs/humanoids/human/laugh/manlaugh2.ogg diff --git a/sound/voice/human/womanlaugh.ogg b/sound/mobs/humanoids/human/laugh/womanlaugh.ogg similarity index 100% rename from sound/voice/human/womanlaugh.ogg rename to sound/mobs/humanoids/human/laugh/womanlaugh.ogg diff --git a/sound/misc/salute.ogg b/sound/mobs/humanoids/human/salute/salute.ogg similarity index 100% rename from sound/misc/salute.ogg rename to sound/mobs/humanoids/human/salute/salute.ogg diff --git a/sound/voice/human/femalescream_1.ogg b/sound/mobs/humanoids/human/scream/femalescream_1.ogg similarity index 100% rename from sound/voice/human/femalescream_1.ogg rename to sound/mobs/humanoids/human/scream/femalescream_1.ogg diff --git a/sound/voice/human/femalescream_2.ogg b/sound/mobs/humanoids/human/scream/femalescream_2.ogg similarity index 100% rename from sound/voice/human/femalescream_2.ogg rename to sound/mobs/humanoids/human/scream/femalescream_2.ogg diff --git a/sound/voice/human/femalescream_3.ogg b/sound/mobs/humanoids/human/scream/femalescream_3.ogg similarity index 100% rename from sound/voice/human/femalescream_3.ogg rename to sound/mobs/humanoids/human/scream/femalescream_3.ogg diff --git a/sound/voice/human/femalescream_4.ogg b/sound/mobs/humanoids/human/scream/femalescream_4.ogg similarity index 100% rename from sound/voice/human/femalescream_4.ogg rename to sound/mobs/humanoids/human/scream/femalescream_4.ogg diff --git a/sound/voice/human/femalescream_5.ogg b/sound/mobs/humanoids/human/scream/femalescream_5.ogg similarity index 100% rename from sound/voice/human/femalescream_5.ogg rename to sound/mobs/humanoids/human/scream/femalescream_5.ogg diff --git a/sound/voice/human/malescream_1.ogg b/sound/mobs/humanoids/human/scream/malescream_1.ogg similarity index 100% rename from sound/voice/human/malescream_1.ogg rename to sound/mobs/humanoids/human/scream/malescream_1.ogg diff --git a/sound/voice/human/malescream_2.ogg b/sound/mobs/humanoids/human/scream/malescream_2.ogg similarity index 100% rename from sound/voice/human/malescream_2.ogg rename to sound/mobs/humanoids/human/scream/malescream_2.ogg diff --git a/sound/voice/human/malescream_3.ogg b/sound/mobs/humanoids/human/scream/malescream_3.ogg similarity index 100% rename from sound/voice/human/malescream_3.ogg rename to sound/mobs/humanoids/human/scream/malescream_3.ogg diff --git a/sound/voice/human/malescream_4.ogg b/sound/mobs/humanoids/human/scream/malescream_4.ogg similarity index 100% rename from sound/voice/human/malescream_4.ogg rename to sound/mobs/humanoids/human/scream/malescream_4.ogg diff --git a/sound/voice/human/malescream_5.ogg b/sound/mobs/humanoids/human/scream/malescream_5.ogg similarity index 100% rename from sound/voice/human/malescream_5.ogg rename to sound/mobs/humanoids/human/scream/malescream_5.ogg diff --git a/sound/voice/human/malescream_6.ogg b/sound/mobs/humanoids/human/scream/malescream_6.ogg similarity index 100% rename from sound/voice/human/malescream_6.ogg rename to sound/mobs/humanoids/human/scream/malescream_6.ogg diff --git a/sound/voice/human/wilhelm_scream.ogg b/sound/mobs/humanoids/human/scream/wilhelm_scream.ogg similarity index 100% rename from sound/voice/human/wilhelm_scream.ogg rename to sound/mobs/humanoids/human/scream/wilhelm_scream.ogg diff --git a/sound/voice/human/female_sigh.ogg b/sound/mobs/humanoids/human/sigh/female_sigh.ogg similarity index 100% rename from sound/voice/human/female_sigh.ogg rename to sound/mobs/humanoids/human/sigh/female_sigh.ogg diff --git a/sound/voice/human/male_sigh.ogg b/sound/mobs/humanoids/human/sigh/male_sigh.ogg similarity index 100% rename from sound/voice/human/male_sigh.ogg rename to sound/mobs/humanoids/human/sigh/male_sigh.ogg diff --git a/sound/misc/fingersnap1.ogg b/sound/mobs/humanoids/human/snap/fingersnap1.ogg similarity index 100% rename from sound/misc/fingersnap1.ogg rename to sound/mobs/humanoids/human/snap/fingersnap1.ogg diff --git a/sound/misc/fingersnap2.ogg b/sound/mobs/humanoids/human/snap/fingersnap2.ogg similarity index 100% rename from sound/misc/fingersnap2.ogg rename to sound/mobs/humanoids/human/snap/fingersnap2.ogg diff --git a/sound/voice/human/female_sneeze1.ogg b/sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg similarity index 100% rename from sound/voice/human/female_sneeze1.ogg rename to sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg diff --git a/sound/voice/human/male_sneeze1.ogg b/sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg similarity index 100% rename from sound/voice/human/male_sneeze1.ogg rename to sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg diff --git a/sound/voice/human/female_sniff.ogg b/sound/mobs/humanoids/human/sniff/female_sniff.ogg similarity index 100% rename from sound/voice/human/female_sniff.ogg rename to sound/mobs/humanoids/human/sniff/female_sniff.ogg diff --git a/sound/voice/human/male_sniff.ogg b/sound/mobs/humanoids/human/sniff/male_sniff.ogg similarity index 100% rename from sound/voice/human/male_sniff.ogg rename to sound/mobs/humanoids/human/sniff/male_sniff.ogg diff --git a/sound/voice/human/whistle1.ogg b/sound/mobs/humanoids/human/whistle/whistle1.ogg similarity index 100% rename from sound/voice/human/whistle1.ogg rename to sound/mobs/humanoids/human/whistle/whistle1.ogg diff --git a/sound/voice/lizard/credits.txt b/sound/mobs/humanoids/lizard/credits.txt similarity index 100% rename from sound/voice/lizard/credits.txt rename to sound/mobs/humanoids/lizard/credits.txt diff --git a/sound/voice/lizard/deathsound.ogg b/sound/mobs/humanoids/lizard/deathsound.ogg similarity index 100% rename from sound/voice/lizard/deathsound.ogg rename to sound/mobs/humanoids/lizard/deathsound.ogg diff --git a/sound/voice/lizard/lizard_laugh1.ogg b/sound/mobs/humanoids/lizard/lizard_laugh1.ogg similarity index 100% rename from sound/voice/lizard/lizard_laugh1.ogg rename to sound/mobs/humanoids/lizard/lizard_laugh1.ogg diff --git a/sound/voice/lizard/lizard_scream_1.ogg b/sound/mobs/humanoids/lizard/lizard_scream_1.ogg similarity index 100% rename from sound/voice/lizard/lizard_scream_1.ogg rename to sound/mobs/humanoids/lizard/lizard_scream_1.ogg diff --git a/sound/voice/lizard/lizard_scream_2.ogg b/sound/mobs/humanoids/lizard/lizard_scream_2.ogg similarity index 100% rename from sound/voice/lizard/lizard_scream_2.ogg rename to sound/mobs/humanoids/lizard/lizard_scream_2.ogg diff --git a/sound/voice/lizard/lizard_scream_3.ogg b/sound/mobs/humanoids/lizard/lizard_scream_3.ogg similarity index 100% rename from sound/voice/lizard/lizard_scream_3.ogg rename to sound/mobs/humanoids/lizard/lizard_scream_3.ogg diff --git a/sound/voice/moth/credit.txt b/sound/mobs/humanoids/moth/credit.txt similarity index 100% rename from sound/voice/moth/credit.txt rename to sound/mobs/humanoids/moth/credit.txt diff --git a/sound/voice/moth/moth_death.ogg b/sound/mobs/humanoids/moth/moth_death.ogg similarity index 100% rename from sound/voice/moth/moth_death.ogg rename to sound/mobs/humanoids/moth/moth_death.ogg diff --git a/sound/voice/moth/moth_flutter.ogg b/sound/mobs/humanoids/moth/moth_flutter.ogg similarity index 100% rename from sound/voice/moth/moth_flutter.ogg rename to sound/mobs/humanoids/moth/moth_flutter.ogg diff --git a/sound/voice/moth/moth_laugh1.ogg b/sound/mobs/humanoids/moth/moth_laugh1.ogg similarity index 100% rename from sound/voice/moth/moth_laugh1.ogg rename to sound/mobs/humanoids/moth/moth_laugh1.ogg diff --git a/sound/voice/moth/scream_moth.ogg b/sound/mobs/humanoids/moth/scream_moth.ogg similarity index 100% rename from sound/voice/moth/scream_moth.ogg rename to sound/mobs/humanoids/moth/scream_moth.ogg diff --git a/sound/voice/plasmaman/plasmeme_scream_1.ogg b/sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg similarity index 100% rename from sound/voice/plasmaman/plasmeme_scream_1.ogg rename to sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg diff --git a/sound/voice/plasmaman/plasmeme_scream_2.ogg b/sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg similarity index 100% rename from sound/voice/plasmaman/plasmeme_scream_2.ogg rename to sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg diff --git a/sound/voice/plasmaman/plasmeme_scream_3.ogg b/sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg similarity index 100% rename from sound/voice/plasmaman/plasmeme_scream_3.ogg rename to sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg diff --git a/sound/creatures/alien_eat.ogg b/sound/mobs/non-humanoids/alien/alien_eat.ogg similarity index 100% rename from sound/creatures/alien_eat.ogg rename to sound/mobs/non-humanoids/alien/alien_eat.ogg diff --git a/sound/creatures/alien_explode.ogg b/sound/mobs/non-humanoids/alien/alien_explode.ogg similarity index 100% rename from sound/creatures/alien_explode.ogg rename to sound/mobs/non-humanoids/alien/alien_explode.ogg diff --git a/sound/creatures/alien_organ_cut.ogg b/sound/mobs/non-humanoids/alien/alien_organ_cut.ogg similarity index 100% rename from sound/creatures/alien_organ_cut.ogg rename to sound/mobs/non-humanoids/alien/alien_organ_cut.ogg diff --git a/sound/creatures/alien_york.ogg b/sound/mobs/non-humanoids/alien/alien_york.ogg similarity index 100% rename from sound/creatures/alien_york.ogg rename to sound/mobs/non-humanoids/alien/alien_york.ogg diff --git a/sound/creatures/attribution.txt b/sound/mobs/non-humanoids/attribution.txt similarity index 100% rename from sound/creatures/attribution.txt rename to sound/mobs/non-humanoids/attribution.txt diff --git a/sound/creatures/bee.ogg b/sound/mobs/non-humanoids/bee/bee.ogg similarity index 100% rename from sound/creatures/bee.ogg rename to sound/mobs/non-humanoids/bee/bee.ogg diff --git a/sound/creatures/bee_swarm.ogg b/sound/mobs/non-humanoids/bee/bee_swarm.ogg similarity index 100% rename from sound/creatures/bee_swarm.ogg rename to sound/mobs/non-humanoids/bee/bee_swarm.ogg diff --git a/sound/effects/beepskyspinsabre.ogg b/sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg similarity index 100% rename from sound/effects/beepskyspinsabre.ogg rename to sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg diff --git a/sound/voice/beepsky/creep.ogg b/sound/mobs/non-humanoids/beepsky/creep.ogg similarity index 100% rename from sound/voice/beepsky/creep.ogg rename to sound/mobs/non-humanoids/beepsky/creep.ogg diff --git a/sound/voice/beepsky/criminal.ogg b/sound/mobs/non-humanoids/beepsky/criminal.ogg similarity index 100% rename from sound/voice/beepsky/criminal.ogg rename to sound/mobs/non-humanoids/beepsky/criminal.ogg diff --git a/sound/voice/beepsky/freeze.ogg b/sound/mobs/non-humanoids/beepsky/freeze.ogg similarity index 100% rename from sound/voice/beepsky/freeze.ogg rename to sound/mobs/non-humanoids/beepsky/freeze.ogg diff --git a/sound/voice/beepsky/god.ogg b/sound/mobs/non-humanoids/beepsky/god.ogg similarity index 100% rename from sound/voice/beepsky/god.ogg rename to sound/mobs/non-humanoids/beepsky/god.ogg diff --git a/sound/voice/beepsky/iamthelaw.ogg b/sound/mobs/non-humanoids/beepsky/iamthelaw.ogg similarity index 100% rename from sound/voice/beepsky/iamthelaw.ogg rename to sound/mobs/non-humanoids/beepsky/iamthelaw.ogg diff --git a/sound/voice/beepsky/insult.ogg b/sound/mobs/non-humanoids/beepsky/insult.ogg similarity index 100% rename from sound/voice/beepsky/insult.ogg rename to sound/mobs/non-humanoids/beepsky/insult.ogg diff --git a/sound/voice/beepsky/justice.ogg b/sound/mobs/non-humanoids/beepsky/justice.ogg similarity index 100% rename from sound/voice/beepsky/justice.ogg rename to sound/mobs/non-humanoids/beepsky/justice.ogg diff --git a/sound/voice/beepsky/radio.ogg b/sound/mobs/non-humanoids/beepsky/radio.ogg similarity index 100% rename from sound/voice/beepsky/radio.ogg rename to sound/mobs/non-humanoids/beepsky/radio.ogg diff --git a/sound/voice/beepsky/secureday.ogg b/sound/mobs/non-humanoids/beepsky/secureday.ogg similarity index 100% rename from sound/voice/beepsky/secureday.ogg rename to sound/mobs/non-humanoids/beepsky/secureday.ogg diff --git a/sound/creatures/bileworm/bileworm_spit.ogg b/sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg similarity index 100% rename from sound/creatures/bileworm/bileworm_spit.ogg rename to sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg diff --git a/sound/creatures/brimdemon.ogg b/sound/mobs/non-humanoids/brimdemon/brimdemon.ogg similarity index 100% rename from sound/creatures/brimdemon.ogg rename to sound/mobs/non-humanoids/brimdemon/brimdemon.ogg diff --git a/sound/lavaland/brimdemon_crush.ogg b/sound/mobs/non-humanoids/brimdemon/brimdemon_crush.ogg similarity index 100% rename from sound/lavaland/brimdemon_crush.ogg rename to sound/mobs/non-humanoids/brimdemon/brimdemon_crush.ogg diff --git a/sound/creatures/bagawk.ogg b/sound/mobs/non-humanoids/chicken/bagawk.ogg similarity index 100% rename from sound/creatures/bagawk.ogg rename to sound/mobs/non-humanoids/chicken/bagawk.ogg diff --git a/sound/creatures/chick_peep.ogg b/sound/mobs/non-humanoids/chicken/chick_peep.ogg similarity index 100% rename from sound/creatures/chick_peep.ogg rename to sound/mobs/non-humanoids/chicken/chick_peep.ogg diff --git a/sound/creatures/clucks.ogg b/sound/mobs/non-humanoids/chicken/clucks.ogg similarity index 100% rename from sound/creatures/clucks.ogg rename to sound/mobs/non-humanoids/chicken/clucks.ogg diff --git a/sound/creatures/clown/clownana_rustle.ogg b/sound/mobs/non-humanoids/clown/clownana_rustle.ogg similarity index 100% rename from sound/creatures/clown/clownana_rustle.ogg rename to sound/mobs/non-humanoids/clown/clownana_rustle.ogg diff --git a/sound/creatures/clown/hehe.ogg b/sound/mobs/non-humanoids/clown/hehe.ogg similarity index 100% rename from sound/creatures/clown/hehe.ogg rename to sound/mobs/non-humanoids/clown/hehe.ogg diff --git a/sound/creatures/clown/hohoho.ogg b/sound/mobs/non-humanoids/clown/hohoho.ogg similarity index 100% rename from sound/creatures/clown/hohoho.ogg rename to sound/mobs/non-humanoids/clown/hohoho.ogg diff --git a/sound/creatures/cow.ogg b/sound/mobs/non-humanoids/cow/cow.ogg similarity index 100% rename from sound/creatures/cow.ogg rename to sound/mobs/non-humanoids/cow/cow.ogg diff --git a/sound/creatures/claw_click.ogg b/sound/mobs/non-humanoids/crab/claw_click.ogg similarity index 100% rename from sound/creatures/claw_click.ogg rename to sound/mobs/non-humanoids/crab/claw_click.ogg diff --git a/sound/mobs/non-humanoids/cyborg/attribution.txt b/sound/mobs/non-humanoids/cyborg/attribution.txt new file mode 100644 index 0000000000000..f0fc73043589b --- /dev/null +++ b/sound/mobs/non-humanoids/cyborg/attribution.txt @@ -0,0 +1 @@ +borg_deathsound.ogg is spliced from two clips, both of which are under the CC Attribution license. The sound at https://freesound.org/people/simmfoc/sounds/28477/ was pitched down, sped up, and repeated a few times. https://freesound.org/people/nicStage/sounds/1522/ is then attached with a fadeout effect and lowered volume. diff --git a/sound/voice/borg_deathsound.ogg b/sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg similarity index 100% rename from sound/voice/borg_deathsound.ogg rename to sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg diff --git a/sound/ai/harmalarm.ogg b/sound/mobs/non-humanoids/cyborg/harmalarm.ogg similarity index 100% rename from sound/ai/harmalarm.ogg rename to sound/mobs/non-humanoids/cyborg/harmalarm.ogg diff --git a/sound/voice/liveagain.ogg b/sound/mobs/non-humanoids/cyborg/liveagain.ogg similarity index 100% rename from sound/voice/liveagain.ogg rename to sound/mobs/non-humanoids/cyborg/liveagain.ogg diff --git a/sound/creatures/cyborg/wash1.ogg b/sound/mobs/non-humanoids/cyborg/wash1.ogg similarity index 100% rename from sound/creatures/cyborg/wash1.ogg rename to sound/mobs/non-humanoids/cyborg/wash1.ogg diff --git a/sound/creatures/cyborg/wash2.ogg b/sound/mobs/non-humanoids/cyborg/wash2.ogg similarity index 100% rename from sound/creatures/cyborg/wash2.ogg rename to sound/mobs/non-humanoids/cyborg/wash2.ogg diff --git a/sound/creatures/cyborg/wash_end.ogg b/sound/mobs/non-humanoids/cyborg/wash_end.ogg similarity index 100% rename from sound/creatures/cyborg/wash_end.ogg rename to sound/mobs/non-humanoids/cyborg/wash_end.ogg diff --git a/sound/creatures/cyborg/wash_start.ogg b/sound/mobs/non-humanoids/cyborg/wash_start.ogg similarity index 100% rename from sound/creatures/cyborg/wash_start.ogg rename to sound/mobs/non-humanoids/cyborg/wash_start.ogg diff --git a/sound/creatures/dog/growl1.ogg b/sound/mobs/non-humanoids/dog/growl1.ogg similarity index 100% rename from sound/creatures/dog/growl1.ogg rename to sound/mobs/non-humanoids/dog/growl1.ogg diff --git a/sound/creatures/dog/growl2.ogg b/sound/mobs/non-humanoids/dog/growl2.ogg similarity index 100% rename from sound/creatures/dog/growl2.ogg rename to sound/mobs/non-humanoids/dog/growl2.ogg diff --git a/sound/voice/ed209_20sec.ogg b/sound/mobs/non-humanoids/ed209/ed209_20sec.ogg similarity index 100% rename from sound/voice/ed209_20sec.ogg rename to sound/mobs/non-humanoids/ed209/ed209_20sec.ogg diff --git a/sound/voice/edplaceholder.ogg b/sound/mobs/non-humanoids/ed209/edplaceholder.ogg similarity index 100% rename from sound/voice/edplaceholder.ogg rename to sound/mobs/non-humanoids/ed209/edplaceholder.ogg diff --git a/sound/voice/firebot/candle_tip.ogg b/sound/mobs/non-humanoids/firebot/candle_tip.ogg similarity index 100% rename from sound/voice/firebot/candle_tip.ogg rename to sound/mobs/non-humanoids/firebot/candle_tip.ogg diff --git a/sound/voice/firebot/detected.ogg b/sound/mobs/non-humanoids/firebot/detected.ogg similarity index 100% rename from sound/voice/firebot/detected.ogg rename to sound/mobs/non-humanoids/firebot/detected.ogg diff --git a/sound/voice/firebot/electric_fire_tip.ogg b/sound/mobs/non-humanoids/firebot/electric_fire_tip.ogg similarity index 100% rename from sound/voice/firebot/electric_fire_tip.ogg rename to sound/mobs/non-humanoids/firebot/electric_fire_tip.ogg diff --git a/sound/voice/firebot/extinguishing.ogg b/sound/mobs/non-humanoids/firebot/extinguishing.ogg similarity index 100% rename from sound/voice/firebot/extinguishing.ogg rename to sound/mobs/non-humanoids/firebot/extinguishing.ogg diff --git a/sound/voice/firebot/gasoline_tip.ogg b/sound/mobs/non-humanoids/firebot/gasoline_tip.ogg similarity index 100% rename from sound/voice/firebot/gasoline_tip.ogg rename to sound/mobs/non-humanoids/firebot/gasoline_tip.ogg diff --git a/sound/voice/firebot/keepitcool.ogg b/sound/mobs/non-humanoids/firebot/keepitcool.ogg similarity index 100% rename from sound/voice/firebot/keepitcool.ogg rename to sound/mobs/non-humanoids/firebot/keepitcool.ogg diff --git a/sound/voice/firebot/nofires.ogg b/sound/mobs/non-humanoids/firebot/nofires.ogg similarity index 100% rename from sound/voice/firebot/nofires.ogg rename to sound/mobs/non-humanoids/firebot/nofires.ogg diff --git a/sound/voice/firebot/onlyyou.ogg b/sound/mobs/non-humanoids/firebot/onlyyou.ogg similarity index 100% rename from sound/voice/firebot/onlyyou.ogg rename to sound/mobs/non-humanoids/firebot/onlyyou.ogg diff --git a/sound/voice/firebot/stopdropnroll.ogg b/sound/mobs/non-humanoids/firebot/stopdropnroll.ogg similarity index 100% rename from sound/voice/firebot/stopdropnroll.ogg rename to sound/mobs/non-humanoids/firebot/stopdropnroll.ogg diff --git a/sound/voice/firebot/tempnominal.ogg b/sound/mobs/non-humanoids/firebot/tempnominal.ogg similarity index 100% rename from sound/voice/firebot/tempnominal.ogg rename to sound/mobs/non-humanoids/firebot/tempnominal.ogg diff --git a/sound/mobs/non-humanoids/fish/attritbution.txt b/sound/mobs/non-humanoids/fish/attritbution.txt new file mode 100644 index 0000000000000..2b3d80f408e20 --- /dev/null +++ b/sound/mobs/non-humanoids/fish/attritbution.txt @@ -0,0 +1,7 @@ +{ +fish_drop1.ogg - fish slap ground or snow writhing wet.wav by kyles -- https://freesound.org/s/450830/ -- License: Creative Commons 0 +fish_pickup1.ogg - fish slap ground or snow writhing wet.wav by kyles -- https://freesound.org/s/450830/ -- License: Creative Commons 0 +fish_pickup2.ogg - fish slap ground or snow writhing wet.wav by kyles -- https://freesound.org/s/450830/ -- License: Creative Commons 0 +fish_slap1.ogg - Slap - Cartoony by AdminMP -- https://freesound.org/s/383201/ -- License: Creative Commons 0 +fish_slap2.ogg - Major punch by janbezouska -- https://freesound.org/s/399183/ -- License: Creative Commons 0 +} - edited by sadboysuss diff --git a/sound/mobs/non-humanoids/fish/fish_drop1.ogg b/sound/mobs/non-humanoids/fish/fish_drop1.ogg new file mode 100644 index 0000000000000..3c658a197688c Binary files /dev/null and b/sound/mobs/non-humanoids/fish/fish_drop1.ogg differ diff --git a/sound/mobs/non-humanoids/fish/fish_pickup1.ogg b/sound/mobs/non-humanoids/fish/fish_pickup1.ogg new file mode 100644 index 0000000000000..7f1fe68080b10 Binary files /dev/null and b/sound/mobs/non-humanoids/fish/fish_pickup1.ogg differ diff --git a/sound/mobs/non-humanoids/fish/fish_pickup2.ogg b/sound/mobs/non-humanoids/fish/fish_pickup2.ogg new file mode 100644 index 0000000000000..70d240bad667e Binary files /dev/null and b/sound/mobs/non-humanoids/fish/fish_pickup2.ogg differ diff --git a/sound/mobs/non-humanoids/fish/fish_slap1.ogg b/sound/mobs/non-humanoids/fish/fish_slap1.ogg new file mode 100644 index 0000000000000..984e1cf10883a Binary files /dev/null and b/sound/mobs/non-humanoids/fish/fish_slap1.ogg differ diff --git a/sound/mobs/non-humanoids/fish/fish_slap2.ogg b/sound/mobs/non-humanoids/fish/fish_slap2.ogg new file mode 100644 index 0000000000000..581cf17e6885f Binary files /dev/null and b/sound/mobs/non-humanoids/fish/fish_slap2.ogg differ diff --git a/sound/effects/whistlereset.ogg b/sound/mobs/non-humanoids/floorbot/whistlereset.ogg similarity index 100% rename from sound/effects/whistlereset.ogg rename to sound/mobs/non-humanoids/floorbot/whistlereset.ogg diff --git a/sound/effects/huuu.ogg b/sound/mobs/non-humanoids/frog/huuu.ogg similarity index 100% rename from sound/effects/huuu.ogg rename to sound/mobs/non-humanoids/frog/huuu.ogg diff --git a/sound/effects/reee.ogg b/sound/mobs/non-humanoids/frog/reee.ogg similarity index 100% rename from sound/effects/reee.ogg rename to sound/mobs/non-humanoids/frog/reee.ogg diff --git a/sound/creatures/goose1.ogg b/sound/mobs/non-humanoids/goose/goose1.ogg similarity index 100% rename from sound/creatures/goose1.ogg rename to sound/mobs/non-humanoids/goose/goose1.ogg diff --git a/sound/creatures/goose2.ogg b/sound/mobs/non-humanoids/goose/goose2.ogg similarity index 100% rename from sound/creatures/goose2.ogg rename to sound/mobs/non-humanoids/goose/goose2.ogg diff --git a/sound/creatures/goose3.ogg b/sound/mobs/non-humanoids/goose/goose3.ogg similarity index 100% rename from sound/creatures/goose3.ogg rename to sound/mobs/non-humanoids/goose/goose3.ogg diff --git a/sound/creatures/goose4.ogg b/sound/mobs/non-humanoids/goose/goose4.ogg similarity index 100% rename from sound/creatures/goose4.ogg rename to sound/mobs/non-humanoids/goose/goose4.ogg diff --git a/sound/creatures/gorilla.ogg b/sound/mobs/non-humanoids/gorilla/gorilla.ogg similarity index 100% rename from sound/creatures/gorilla.ogg rename to sound/mobs/non-humanoids/gorilla/gorilla.ogg diff --git a/sound/voice/hiss1.ogg b/sound/mobs/non-humanoids/hiss/hiss1.ogg similarity index 100% rename from sound/voice/hiss1.ogg rename to sound/mobs/non-humanoids/hiss/hiss1.ogg diff --git a/sound/voice/hiss2.ogg b/sound/mobs/non-humanoids/hiss/hiss2.ogg similarity index 100% rename from sound/voice/hiss2.ogg rename to sound/mobs/non-humanoids/hiss/hiss2.ogg diff --git a/sound/voice/hiss3.ogg b/sound/mobs/non-humanoids/hiss/hiss3.ogg similarity index 100% rename from sound/voice/hiss3.ogg rename to sound/mobs/non-humanoids/hiss/hiss3.ogg diff --git a/sound/voice/hiss4.ogg b/sound/mobs/non-humanoids/hiss/hiss4.ogg similarity index 100% rename from sound/voice/hiss4.ogg rename to sound/mobs/non-humanoids/hiss/hiss4.ogg diff --git a/sound/voice/hiss5.ogg b/sound/mobs/non-humanoids/hiss/hiss5.ogg similarity index 100% rename from sound/voice/hiss5.ogg rename to sound/mobs/non-humanoids/hiss/hiss5.ogg diff --git a/sound/voice/hiss6.ogg b/sound/mobs/non-humanoids/hiss/hiss6.ogg similarity index 100% rename from sound/voice/hiss6.ogg rename to sound/mobs/non-humanoids/hiss/hiss6.ogg diff --git a/sound/voice/lowHiss1.ogg b/sound/mobs/non-humanoids/hiss/lowHiss1.ogg similarity index 100% rename from sound/voice/lowHiss1.ogg rename to sound/mobs/non-humanoids/hiss/lowHiss1.ogg diff --git a/sound/voice/lowHiss2.ogg b/sound/mobs/non-humanoids/hiss/lowHiss2.ogg similarity index 100% rename from sound/voice/lowHiss2.ogg rename to sound/mobs/non-humanoids/hiss/lowHiss2.ogg diff --git a/sound/voice/lowHiss3.ogg b/sound/mobs/non-humanoids/hiss/lowHiss3.ogg similarity index 100% rename from sound/voice/lowHiss3.ogg rename to sound/mobs/non-humanoids/hiss/lowHiss3.ogg diff --git a/sound/voice/lowHiss4.ogg b/sound/mobs/non-humanoids/hiss/lowHiss4.ogg similarity index 100% rename from sound/voice/lowHiss4.ogg rename to sound/mobs/non-humanoids/hiss/lowHiss4.ogg diff --git a/sound/machines/honkbot_evil_laugh.ogg b/sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg similarity index 100% rename from sound/machines/honkbot_evil_laugh.ogg rename to sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg diff --git a/sound/voice/hygienebot/cleanandtidy.ogg b/sound/mobs/non-humanoids/hygienebot/cleanandtidy.ogg similarity index 100% rename from sound/voice/hygienebot/cleanandtidy.ogg rename to sound/mobs/non-humanoids/hygienebot/cleanandtidy.ogg diff --git a/sound/voice/hygienebot/cutarteries.ogg b/sound/mobs/non-humanoids/hygienebot/cutarteries.ogg similarity index 100% rename from sound/voice/hygienebot/cutarteries.ogg rename to sound/mobs/non-humanoids/hygienebot/cutarteries.ogg diff --git a/sound/voice/hygienebot/degenerate.ogg b/sound/mobs/non-humanoids/hygienebot/degenerate.ogg similarity index 100% rename from sound/voice/hygienebot/degenerate.ogg rename to sound/mobs/non-humanoids/hygienebot/degenerate.ogg diff --git a/sound/voice/hygienebot/dragyouout.ogg b/sound/mobs/non-humanoids/hygienebot/dragyouout.ogg similarity index 100% rename from sound/voice/hygienebot/dragyouout.ogg rename to sound/mobs/non-humanoids/hygienebot/dragyouout.ogg diff --git a/sound/voice/hygienebot/finally.ogg b/sound/mobs/non-humanoids/hygienebot/finally.ogg similarity index 100% rename from sound/voice/hygienebot/finally.ogg rename to sound/mobs/non-humanoids/hygienebot/finally.ogg diff --git a/sound/voice/hygienebot/foulsmelling.ogg b/sound/mobs/non-humanoids/hygienebot/foulsmelling.ogg similarity index 100% rename from sound/voice/hygienebot/foulsmelling.ogg rename to sound/mobs/non-humanoids/hygienebot/foulsmelling.ogg diff --git a/sound/voice/hygienebot/greencloud.ogg b/sound/mobs/non-humanoids/hygienebot/greencloud.ogg similarity index 100% rename from sound/voice/hygienebot/greencloud.ogg rename to sound/mobs/non-humanoids/hygienebot/greencloud.ogg diff --git a/sound/voice/hygienebot/letmeclean.ogg b/sound/mobs/non-humanoids/hygienebot/letmeclean.ogg similarity index 100% rename from sound/voice/hygienebot/letmeclean.ogg rename to sound/mobs/non-humanoids/hygienebot/letmeclean.ogg diff --git a/sound/voice/hygienebot/stoprunning.ogg b/sound/mobs/non-humanoids/hygienebot/stoprunning.ogg similarity index 100% rename from sound/voice/hygienebot/stoprunning.ogg rename to sound/mobs/non-humanoids/hygienebot/stoprunning.ogg diff --git a/sound/voice/hygienebot/thankgod.ogg b/sound/mobs/non-humanoids/hygienebot/thankgod.ogg similarity index 100% rename from sound/voice/hygienebot/thankgod.ogg rename to sound/mobs/non-humanoids/hygienebot/thankgod.ogg diff --git a/sound/voice/hygienebot/troglodyte.ogg b/sound/mobs/non-humanoids/hygienebot/troglodyte.ogg similarity index 100% rename from sound/voice/hygienebot/troglodyte.ogg rename to sound/mobs/non-humanoids/hygienebot/troglodyte.ogg diff --git a/sound/voice/hygienebot/unhygienicclient.ogg b/sound/mobs/non-humanoids/hygienebot/unhygienicclient.ogg similarity index 100% rename from sound/voice/hygienebot/unhygienicclient.ogg rename to sound/mobs/non-humanoids/hygienebot/unhygienicclient.ogg diff --git a/sound/creatures/chitter.ogg b/sound/mobs/non-humanoids/insect/chitter.ogg similarity index 100% rename from sound/creatures/chitter.ogg rename to sound/mobs/non-humanoids/insect/chitter.ogg diff --git a/sound/creatures/legion_spawn.ogg b/sound/mobs/non-humanoids/legion/legion_spawn.ogg similarity index 100% rename from sound/creatures/legion_spawn.ogg rename to sound/mobs/non-humanoids/legion/legion_spawn.ogg diff --git a/sound/voice/medbot/apple.ogg b/sound/mobs/non-humanoids/medbot/apple.ogg similarity index 100% rename from sound/voice/medbot/apple.ogg rename to sound/mobs/non-humanoids/medbot/apple.ogg diff --git a/sound/voice/medbot/catch.ogg b/sound/mobs/non-humanoids/medbot/catch.ogg similarity index 100% rename from sound/voice/medbot/catch.ogg rename to sound/mobs/non-humanoids/medbot/catch.ogg diff --git a/sound/voice/medbot/close.ogg b/sound/mobs/non-humanoids/medbot/close.ogg similarity index 100% rename from sound/voice/medbot/close.ogg rename to sound/mobs/non-humanoids/medbot/close.ogg diff --git a/sound/voice/medbot/coming.ogg b/sound/mobs/non-humanoids/medbot/coming.ogg similarity index 100% rename from sound/voice/medbot/coming.ogg rename to sound/mobs/non-humanoids/medbot/coming.ogg diff --git a/sound/voice/medbot/delicious.ogg b/sound/mobs/non-humanoids/medbot/delicious.ogg similarity index 100% rename from sound/voice/medbot/delicious.ogg rename to sound/mobs/non-humanoids/medbot/delicious.ogg diff --git a/sound/voice/medbot/dont_like.ogg b/sound/mobs/non-humanoids/medbot/dont_like.ogg similarity index 100% rename from sound/voice/medbot/dont_like.ogg rename to sound/mobs/non-humanoids/medbot/dont_like.ogg diff --git a/sound/voice/medbot/feelbetter.ogg b/sound/mobs/non-humanoids/medbot/feelbetter.ogg similarity index 100% rename from sound/voice/medbot/feelbetter.ogg rename to sound/mobs/non-humanoids/medbot/feelbetter.ogg diff --git a/sound/voice/medbot/flies.ogg b/sound/mobs/non-humanoids/medbot/flies.ogg similarity index 100% rename from sound/voice/medbot/flies.ogg rename to sound/mobs/non-humanoids/medbot/flies.ogg diff --git a/sound/voice/medbot/forgive.ogg b/sound/mobs/non-humanoids/medbot/forgive.ogg similarity index 100% rename from sound/voice/medbot/forgive.ogg rename to sound/mobs/non-humanoids/medbot/forgive.ogg diff --git a/sound/voice/medbot/fuck_you.ogg b/sound/mobs/non-humanoids/medbot/fuck_you.ogg similarity index 100% rename from sound/voice/medbot/fuck_you.ogg rename to sound/mobs/non-humanoids/medbot/fuck_you.ogg diff --git a/sound/voice/medbot/help.ogg b/sound/mobs/non-humanoids/medbot/help.ogg similarity index 100% rename from sound/voice/medbot/help.ogg rename to sound/mobs/non-humanoids/medbot/help.ogg diff --git a/sound/voice/medbot/hey_wait.ogg b/sound/mobs/non-humanoids/medbot/hey_wait.ogg similarity index 100% rename from sound/voice/medbot/hey_wait.ogg rename to sound/mobs/non-humanoids/medbot/hey_wait.ogg diff --git a/sound/voice/medbot/i_am_chicken.ogg b/sound/mobs/non-humanoids/medbot/i_am_chicken.ogg similarity index 100% rename from sound/voice/medbot/i_am_chicken.ogg rename to sound/mobs/non-humanoids/medbot/i_am_chicken.ogg diff --git a/sound/voice/medbot/i_require_asst.ogg b/sound/mobs/non-humanoids/medbot/i_require_asst.ogg similarity index 100% rename from sound/voice/medbot/i_require_asst.ogg rename to sound/mobs/non-humanoids/medbot/i_require_asst.ogg diff --git a/sound/voice/medbot/i_trusted_you.ogg b/sound/mobs/non-humanoids/medbot/i_trusted_you.ogg similarity index 100% rename from sound/voice/medbot/i_trusted_you.ogg rename to sound/mobs/non-humanoids/medbot/i_trusted_you.ogg diff --git a/sound/voice/medbot/im_different.ogg b/sound/mobs/non-humanoids/medbot/im_different.ogg similarity index 100% rename from sound/voice/medbot/im_different.ogg rename to sound/mobs/non-humanoids/medbot/im_different.ogg diff --git a/sound/voice/medbot/injured.ogg b/sound/mobs/non-humanoids/medbot/injured.ogg similarity index 100% rename from sound/voice/medbot/injured.ogg rename to sound/mobs/non-humanoids/medbot/injured.ogg diff --git a/sound/voice/medbot/insult.ogg b/sound/mobs/non-humanoids/medbot/insult.ogg similarity index 100% rename from sound/voice/medbot/insult.ogg rename to sound/mobs/non-humanoids/medbot/insult.ogg diff --git a/sound/voice/medbot/is_this_the_end.ogg b/sound/mobs/non-humanoids/medbot/is_this_the_end.ogg similarity index 100% rename from sound/voice/medbot/is_this_the_end.ogg rename to sound/mobs/non-humanoids/medbot/is_this_the_end.ogg diff --git a/sound/voice/medbot/live.ogg b/sound/mobs/non-humanoids/medbot/live.ogg similarity index 100% rename from sound/voice/medbot/live.ogg rename to sound/mobs/non-humanoids/medbot/live.ogg diff --git a/sound/voice/medbot/lost.ogg b/sound/mobs/non-humanoids/medbot/lost.ogg similarity index 100% rename from sound/voice/medbot/lost.ogg rename to sound/mobs/non-humanoids/medbot/lost.ogg diff --git a/sound/voice/medbot/no.ogg b/sound/mobs/non-humanoids/medbot/no.ogg similarity index 100% rename from sound/voice/medbot/no.ogg rename to sound/mobs/non-humanoids/medbot/no.ogg diff --git a/sound/voice/medbot/nooo.ogg b/sound/mobs/non-humanoids/medbot/nooo.ogg similarity index 100% rename from sound/voice/medbot/nooo.ogg rename to sound/mobs/non-humanoids/medbot/nooo.ogg diff --git a/sound/voice/medbot/oh_fuck.ogg b/sound/mobs/non-humanoids/medbot/oh_fuck.ogg similarity index 100% rename from sound/voice/medbot/oh_fuck.ogg rename to sound/mobs/non-humanoids/medbot/oh_fuck.ogg diff --git a/sound/voice/medbot/pain_is_real.ogg b/sound/mobs/non-humanoids/medbot/pain_is_real.ogg similarity index 100% rename from sound/voice/medbot/pain_is_real.ogg rename to sound/mobs/non-humanoids/medbot/pain_is_real.ogg diff --git a/sound/voice/medbot/patchedup.ogg b/sound/mobs/non-humanoids/medbot/patchedup.ogg similarity index 100% rename from sound/voice/medbot/patchedup.ogg rename to sound/mobs/non-humanoids/medbot/patchedup.ogg diff --git a/sound/voice/medbot/please_dont.ogg b/sound/mobs/non-humanoids/medbot/please_dont.ogg similarity index 100% rename from sound/voice/medbot/please_dont.ogg rename to sound/mobs/non-humanoids/medbot/please_dont.ogg diff --git a/sound/voice/medbot/please_im_scared.ogg b/sound/mobs/non-humanoids/medbot/please_im_scared.ogg similarity index 100% rename from sound/voice/medbot/please_im_scared.ogg rename to sound/mobs/non-humanoids/medbot/please_im_scared.ogg diff --git a/sound/voice/medbot/please_put_me_back.ogg b/sound/mobs/non-humanoids/medbot/please_put_me_back.ogg similarity index 100% rename from sound/voice/medbot/please_put_me_back.ogg rename to sound/mobs/non-humanoids/medbot/please_put_me_back.ogg diff --git a/sound/voice/medbot/radar.ogg b/sound/mobs/non-humanoids/medbot/radar.ogg similarity index 100% rename from sound/voice/medbot/radar.ogg rename to sound/mobs/non-humanoids/medbot/radar.ogg diff --git a/sound/voice/medbot/reported.ogg b/sound/mobs/non-humanoids/medbot/reported.ogg similarity index 100% rename from sound/voice/medbot/reported.ogg rename to sound/mobs/non-humanoids/medbot/reported.ogg diff --git a/sound/voice/medbot/shindemashou.ogg b/sound/mobs/non-humanoids/medbot/shindemashou.ogg similarity index 100% rename from sound/voice/medbot/shindemashou.ogg rename to sound/mobs/non-humanoids/medbot/shindemashou.ogg diff --git a/sound/voice/medbot/surgeon.ogg b/sound/mobs/non-humanoids/medbot/surgeon.ogg similarity index 100% rename from sound/voice/medbot/surgeon.ogg rename to sound/mobs/non-humanoids/medbot/surgeon.ogg diff --git a/sound/voice/medbot/thank_you.ogg b/sound/mobs/non-humanoids/medbot/thank_you.ogg similarity index 100% rename from sound/voice/medbot/thank_you.ogg rename to sound/mobs/non-humanoids/medbot/thank_you.ogg diff --git a/sound/voice/medbot/turn_off.ogg b/sound/mobs/non-humanoids/medbot/turn_off.ogg similarity index 100% rename from sound/voice/medbot/turn_off.ogg rename to sound/mobs/non-humanoids/medbot/turn_off.ogg diff --git a/sound/voice/medbot/why.ogg b/sound/mobs/non-humanoids/medbot/why.ogg similarity index 100% rename from sound/voice/medbot/why.ogg rename to sound/mobs/non-humanoids/medbot/why.ogg diff --git a/sound/voice/medbot/youre_good.ogg b/sound/mobs/non-humanoids/medbot/youre_good.ogg similarity index 100% rename from sound/voice/medbot/youre_good.ogg rename to sound/mobs/non-humanoids/medbot/youre_good.ogg diff --git a/sound/creatures/monkey/monkey_screech_1.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_1.ogg similarity index 100% rename from sound/creatures/monkey/monkey_screech_1.ogg rename to sound/mobs/non-humanoids/monkey/monkey_screech_1.ogg diff --git a/sound/creatures/monkey/monkey_screech_2.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_2.ogg similarity index 100% rename from sound/creatures/monkey/monkey_screech_2.ogg rename to sound/mobs/non-humanoids/monkey/monkey_screech_2.ogg diff --git a/sound/creatures/monkey/monkey_screech_3.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_3.ogg similarity index 100% rename from sound/creatures/monkey/monkey_screech_3.ogg rename to sound/mobs/non-humanoids/monkey/monkey_screech_3.ogg diff --git a/sound/creatures/monkey/monkey_screech_4.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_4.ogg similarity index 100% rename from sound/creatures/monkey/monkey_screech_4.ogg rename to sound/mobs/non-humanoids/monkey/monkey_screech_4.ogg diff --git a/sound/creatures/monkey/monkey_screech_5.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_5.ogg similarity index 100% rename from sound/creatures/monkey/monkey_screech_5.ogg rename to sound/mobs/non-humanoids/monkey/monkey_screech_5.ogg diff --git a/sound/creatures/monkey/monkey_screech_6.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_6.ogg similarity index 100% rename from sound/creatures/monkey/monkey_screech_6.ogg rename to sound/mobs/non-humanoids/monkey/monkey_screech_6.ogg diff --git a/sound/creatures/monkey/monkey_screech_7.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_7.ogg similarity index 100% rename from sound/creatures/monkey/monkey_screech_7.ogg rename to sound/mobs/non-humanoids/monkey/monkey_screech_7.ogg diff --git a/sound/voice/mook_death.ogg b/sound/mobs/non-humanoids/mook/mook_death.ogg similarity index 100% rename from sound/voice/mook_death.ogg rename to sound/mobs/non-humanoids/mook/mook_death.ogg diff --git a/sound/voice/mook_leap_yell.ogg b/sound/mobs/non-humanoids/mook/mook_leap_yell.ogg similarity index 100% rename from sound/voice/mook_leap_yell.ogg rename to sound/mobs/non-humanoids/mook/mook_leap_yell.ogg diff --git a/sound/creatures/mousesqueek.ogg b/sound/mobs/non-humanoids/mouse/mousesqueek.ogg similarity index 100% rename from sound/creatures/mousesqueek.ogg rename to sound/mobs/non-humanoids/mouse/mousesqueek.ogg diff --git a/sound/items/orbie_level_up.ogg b/sound/mobs/non-humanoids/orbie/orbie_level_up.ogg similarity index 100% rename from sound/items/orbie_level_up.ogg rename to sound/mobs/non-humanoids/orbie/orbie_level_up.ogg diff --git a/sound/items/orbie_notification_sound.ogg b/sound/mobs/non-humanoids/orbie/orbie_notification_sound.ogg similarity index 100% rename from sound/items/orbie_notification_sound.ogg rename to sound/mobs/non-humanoids/orbie/orbie_notification_sound.ogg diff --git a/sound/items/orbie_send_out.ogg b/sound/mobs/non-humanoids/orbie/orbie_send_out.ogg similarity index 100% rename from sound/items/orbie_send_out.ogg rename to sound/mobs/non-humanoids/orbie/orbie_send_out.ogg diff --git a/sound/items/orbie_trick_learned.ogg b/sound/mobs/non-humanoids/orbie/orbie_trick_learned.ogg similarity index 100% rename from sound/items/orbie_trick_learned.ogg rename to sound/mobs/non-humanoids/orbie/orbie_trick_learned.ogg diff --git a/sound/creatures/pig1.ogg b/sound/mobs/non-humanoids/pig/pig1.ogg similarity index 100% rename from sound/creatures/pig1.ogg rename to sound/mobs/non-humanoids/pig/pig1.ogg diff --git a/sound/creatures/pig2.ogg b/sound/mobs/non-humanoids/pig/pig2.ogg similarity index 100% rename from sound/creatures/pig2.ogg rename to sound/mobs/non-humanoids/pig/pig2.ogg diff --git a/sound/creatures/pony/clown_gallup.ogg b/sound/mobs/non-humanoids/pony/clown_gallup.ogg similarity index 100% rename from sound/creatures/pony/clown_gallup.ogg rename to sound/mobs/non-humanoids/pony/clown_gallup.ogg diff --git a/sound/creatures/pony/snort.ogg b/sound/mobs/non-humanoids/pony/snort.ogg similarity index 100% rename from sound/creatures/pony/snort.ogg rename to sound/mobs/non-humanoids/pony/snort.ogg diff --git a/sound/creatures/pony/whinny01.ogg b/sound/mobs/non-humanoids/pony/whinny01.ogg similarity index 100% rename from sound/creatures/pony/whinny01.ogg rename to sound/mobs/non-humanoids/pony/whinny01.ogg diff --git a/sound/creatures/pony/whinny02.ogg b/sound/mobs/non-humanoids/pony/whinny02.ogg similarity index 100% rename from sound/creatures/pony/whinny02.ogg rename to sound/mobs/non-humanoids/pony/whinny02.ogg diff --git a/sound/creatures/pony/whinny03.ogg b/sound/mobs/non-humanoids/pony/whinny03.ogg similarity index 100% rename from sound/creatures/pony/whinny03.ogg rename to sound/mobs/non-humanoids/pony/whinny03.ogg diff --git a/sound/creatures/raptor_1.ogg b/sound/mobs/non-humanoids/raptor/raptor_1.ogg similarity index 100% rename from sound/creatures/raptor_1.ogg rename to sound/mobs/non-humanoids/raptor/raptor_1.ogg diff --git a/sound/creatures/raptor_2.ogg b/sound/mobs/non-humanoids/raptor/raptor_2.ogg similarity index 100% rename from sound/creatures/raptor_2.ogg rename to sound/mobs/non-humanoids/raptor/raptor_2.ogg diff --git a/sound/creatures/raptor_3.ogg b/sound/mobs/non-humanoids/raptor/raptor_3.ogg similarity index 100% rename from sound/creatures/raptor_3.ogg rename to sound/mobs/non-humanoids/raptor/raptor_3.ogg diff --git a/sound/creatures/raptor_4.ogg b/sound/mobs/non-humanoids/raptor/raptor_4.ogg similarity index 100% rename from sound/creatures/raptor_4.ogg rename to sound/mobs/non-humanoids/raptor/raptor_4.ogg diff --git a/sound/creatures/raptor_5.ogg b/sound/mobs/non-humanoids/raptor/raptor_5.ogg similarity index 100% rename from sound/creatures/raptor_5.ogg rename to sound/mobs/non-humanoids/raptor/raptor_5.ogg diff --git a/sound/creatures/sheep1.ogg b/sound/mobs/non-humanoids/sheep/sheep1.ogg similarity index 100% rename from sound/creatures/sheep1.ogg rename to sound/mobs/non-humanoids/sheep/sheep1.ogg diff --git a/sound/creatures/sheep2.ogg b/sound/mobs/non-humanoids/sheep/sheep2.ogg similarity index 100% rename from sound/creatures/sheep2.ogg rename to sound/mobs/non-humanoids/sheep/sheep2.ogg diff --git a/sound/creatures/sheep3.ogg b/sound/mobs/non-humanoids/sheep/sheep3.ogg similarity index 100% rename from sound/creatures/sheep3.ogg rename to sound/mobs/non-humanoids/sheep/sheep3.ogg diff --git a/sound/creatures/snake_hissing1.ogg b/sound/mobs/non-humanoids/snake/snake_hissing1.ogg similarity index 100% rename from sound/creatures/snake_hissing1.ogg rename to sound/mobs/non-humanoids/snake/snake_hissing1.ogg diff --git a/sound/creatures/snake_hissing2.ogg b/sound/mobs/non-humanoids/snake/snake_hissing2.ogg similarity index 100% rename from sound/creatures/snake_hissing2.ogg rename to sound/mobs/non-humanoids/snake/snake_hissing2.ogg diff --git a/sound/creatures/space_dragon_roar.ogg b/sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg similarity index 100% rename from sound/creatures/space_dragon_roar.ogg rename to sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg diff --git a/sound/creatures/tourist/tourist_talk.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk.ogg similarity index 100% rename from sound/creatures/tourist/tourist_talk.ogg rename to sound/mobs/non-humanoids/tourist/tourist_talk.ogg diff --git a/sound/creatures/tourist/tourist_talk_british.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_british.ogg similarity index 100% rename from sound/creatures/tourist/tourist_talk_british.ogg rename to sound/mobs/non-humanoids/tourist/tourist_talk_british.ogg diff --git a/sound/creatures/tourist/tourist_talk_french.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_french.ogg similarity index 100% rename from sound/creatures/tourist/tourist_talk_french.ogg rename to sound/mobs/non-humanoids/tourist/tourist_talk_french.ogg diff --git a/sound/creatures/tourist/tourist_talk_japanese1.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_japanese1.ogg similarity index 100% rename from sound/creatures/tourist/tourist_talk_japanese1.ogg rename to sound/mobs/non-humanoids/tourist/tourist_talk_japanese1.ogg diff --git a/sound/creatures/tourist/tourist_talk_japanese2.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_japanese2.ogg similarity index 100% rename from sound/creatures/tourist/tourist_talk_japanese2.ogg rename to sound/mobs/non-humanoids/tourist/tourist_talk_japanese2.ogg diff --git a/sound/creatures/tourist/tourist_talk_mexican.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_mexican.ogg similarity index 100% rename from sound/creatures/tourist/tourist_talk_mexican.ogg rename to sound/mobs/non-humanoids/tourist/tourist_talk_mexican.ogg diff --git a/sound/creatures/tourist/tourist_talk_moth.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_moth.ogg similarity index 100% rename from sound/creatures/tourist/tourist_talk_moth.ogg rename to sound/mobs/non-humanoids/tourist/tourist_talk_moth.ogg diff --git a/sound/creatures/venus_trap_death.ogg b/sound/mobs/non-humanoids/venus_trap/venus_trap_death.ogg similarity index 100% rename from sound/creatures/venus_trap_death.ogg rename to sound/mobs/non-humanoids/venus_trap/venus_trap_death.ogg diff --git a/sound/creatures/venus_trap_hit.ogg b/sound/mobs/non-humanoids/venus_trap/venus_trap_hit.ogg similarity index 100% rename from sound/creatures/venus_trap_hit.ogg rename to sound/mobs/non-humanoids/venus_trap/venus_trap_hit.ogg diff --git a/sound/creatures/venus_trap_hurt.ogg b/sound/mobs/non-humanoids/venus_trap/venus_trap_hurt.ogg similarity index 100% rename from sound/creatures/venus_trap_hurt.ogg rename to sound/mobs/non-humanoids/venus_trap/venus_trap_hurt.ogg diff --git a/sound/ambience/antag/abductee.ogg b/sound/music/antag/abductee.ogg similarity index 100% rename from sound/ambience/antag/abductee.ogg rename to sound/music/antag/abductee.ogg diff --git a/sound/music/antag/attribution.txt b/sound/music/antag/attribution.txt new file mode 100644 index 0000000000000..6ae7cecc51970 --- /dev/null +++ b/sound/music/antag/attribution.txt @@ -0,0 +1,11 @@ +sound/instrumental/antag/abductee.ogg is from "Warp SFX" https://freesound.org/people/Breviceps/sounds/453391 (CC0) +sound/instrumental/antag/brainwash.ogg is from "nog.wav" https://freesound.org/people/_NOMINAL_/sounds/124602 (CC-BY 3.0) +sound/instrumental/antag/hypnosis.ogg is from "Flashback.wav" https://freesound.org/people/Sclolex/sounds/342103 (CC0) + +{ +ambimaint8.ogg +ambimaint9.ogg +ambimaint10.ogg +ambimaint11.ogg +ambimaint12.ogg +} made by Kayozz , license: CC-by-SA diff --git a/sound/ambience/antag/ayylien.ogg b/sound/music/antag/ayylien.ogg similarity index 100% rename from sound/ambience/antag/ayylien.ogg rename to sound/music/antag/ayylien.ogg diff --git a/sound/ambience/antag/blobalert.ogg b/sound/music/antag/blobalert.ogg similarity index 100% rename from sound/ambience/antag/blobalert.ogg rename to sound/music/antag/blobalert.ogg diff --git a/sound/ambience/antag/bloodcult/bloodcult_eyes.ogg b/sound/music/antag/bloodcult/bloodcult_eyes.ogg similarity index 100% rename from sound/ambience/antag/bloodcult/bloodcult_eyes.ogg rename to sound/music/antag/bloodcult/bloodcult_eyes.ogg diff --git a/sound/ambience/antag/bloodcult/bloodcult_gain.ogg b/sound/music/antag/bloodcult/bloodcult_gain.ogg similarity index 100% rename from sound/ambience/antag/bloodcult/bloodcult_gain.ogg rename to sound/music/antag/bloodcult/bloodcult_gain.ogg diff --git a/sound/ambience/antag/bloodcult/bloodcult_halos.ogg b/sound/music/antag/bloodcult/bloodcult_halos.ogg similarity index 100% rename from sound/ambience/antag/bloodcult/bloodcult_halos.ogg rename to sound/music/antag/bloodcult/bloodcult_halos.ogg diff --git a/sound/ambience/antag/bloodcult/bloodcult_scribe.ogg b/sound/music/antag/bloodcult/bloodcult_scribe.ogg similarity index 100% rename from sound/ambience/antag/bloodcult/bloodcult_scribe.ogg rename to sound/music/antag/bloodcult/bloodcult_scribe.ogg diff --git a/sound/voice/ghost_whisper.ogg b/sound/music/antag/bloodcult/ghost_whisper.ogg similarity index 100% rename from sound/voice/ghost_whisper.ogg rename to sound/music/antag/bloodcult/ghost_whisper.ogg diff --git a/sound/misc/ghosty_wind.ogg b/sound/music/antag/bloodcult/ghosty_wind.ogg similarity index 100% rename from sound/misc/ghosty_wind.ogg rename to sound/music/antag/bloodcult/ghosty_wind.ogg diff --git a/sound/creatures/narsie_rises.ogg b/sound/music/antag/bloodcult/narsie_rises.ogg similarity index 100% rename from sound/creatures/narsie_rises.ogg rename to sound/music/antag/bloodcult/narsie_rises.ogg diff --git a/sound/ambience/antag/brainwashed.ogg b/sound/music/antag/brainwashed.ogg similarity index 100% rename from sound/ambience/antag/brainwashed.ogg rename to sound/music/antag/brainwashed.ogg diff --git a/sound/ambience/antag/clockcultalr.ogg b/sound/music/antag/clockcultalr.ogg similarity index 100% rename from sound/ambience/antag/clockcultalr.ogg rename to sound/music/antag/clockcultalr.ogg diff --git a/sound/effects/contractstartup.ogg b/sound/music/antag/contractstartup.ogg similarity index 100% rename from sound/effects/contractstartup.ogg rename to sound/music/antag/contractstartup.ogg diff --git a/sound/ambience/antag/creepalert.ogg b/sound/music/antag/creepalert.ogg similarity index 100% rename from sound/ambience/antag/creepalert.ogg rename to sound/music/antag/creepalert.ogg diff --git a/sound/ambience/VoidsEmbrace.ogg b/sound/music/antag/heretic/VoidsEmbrace.ogg similarity index 100% rename from sound/ambience/VoidsEmbrace.ogg rename to sound/music/antag/heretic/VoidsEmbrace.ogg diff --git a/sound/ambience/antag/heretic/ascend_ash.ogg b/sound/music/antag/heretic/ascend_ash.ogg similarity index 100% rename from sound/ambience/antag/heretic/ascend_ash.ogg rename to sound/music/antag/heretic/ascend_ash.ogg diff --git a/sound/ambience/antag/heretic/ascend_blade.ogg b/sound/music/antag/heretic/ascend_blade.ogg similarity index 100% rename from sound/ambience/antag/heretic/ascend_blade.ogg rename to sound/music/antag/heretic/ascend_blade.ogg diff --git a/sound/ambience/antag/heretic/ascend_cosmic.ogg b/sound/music/antag/heretic/ascend_cosmic.ogg similarity index 100% rename from sound/ambience/antag/heretic/ascend_cosmic.ogg rename to sound/music/antag/heretic/ascend_cosmic.ogg diff --git a/sound/ambience/antag/heretic/ascend_flesh.ogg b/sound/music/antag/heretic/ascend_flesh.ogg similarity index 100% rename from sound/ambience/antag/heretic/ascend_flesh.ogg rename to sound/music/antag/heretic/ascend_flesh.ogg diff --git a/sound/ambience/antag/heretic/ascend_knock.ogg b/sound/music/antag/heretic/ascend_knock.ogg similarity index 100% rename from sound/ambience/antag/heretic/ascend_knock.ogg rename to sound/music/antag/heretic/ascend_knock.ogg diff --git a/sound/ambience/antag/heretic/ascend_moon.ogg b/sound/music/antag/heretic/ascend_moon.ogg similarity index 100% rename from sound/ambience/antag/heretic/ascend_moon.ogg rename to sound/music/antag/heretic/ascend_moon.ogg diff --git a/sound/ambience/antag/heretic/ascend_rust.ogg b/sound/music/antag/heretic/ascend_rust.ogg similarity index 100% rename from sound/ambience/antag/heretic/ascend_rust.ogg rename to sound/music/antag/heretic/ascend_rust.ogg diff --git a/sound/ambience/antag/heretic/ascend_void.ogg b/sound/music/antag/heretic/ascend_void.ogg similarity index 100% rename from sound/ambience/antag/heretic/ascend_void.ogg rename to sound/music/antag/heretic/ascend_void.ogg diff --git a/sound/music/antag/heretic/attribution.txt b/sound/music/antag/heretic/attribution.txt new file mode 100644 index 0000000000000..eb17caca63e6a --- /dev/null +++ b/sound/music/antag/heretic/attribution.txt @@ -0,0 +1,3 @@ +heretic_sacrifice.ogg - made by sadboysusss, License: CC-by-SA + +VoidsEmbrace.ogg is Chopin - Waltz in C Sharp Minor (Op. 64 No. 2). It is in public domain. diff --git a/sound/ambience/antag/heretic/heretic_gain.ogg b/sound/music/antag/heretic/heretic_gain.ogg similarity index 100% rename from sound/ambience/antag/heretic/heretic_gain.ogg rename to sound/music/antag/heretic/heretic_gain.ogg diff --git a/sound/ambience/antag/heretic/heretic_gain_intense.ogg b/sound/music/antag/heretic/heretic_gain_intense.ogg similarity index 100% rename from sound/ambience/antag/heretic/heretic_gain_intense.ogg rename to sound/music/antag/heretic/heretic_gain_intense.ogg diff --git a/sound/music/antag/heretic/heretic_sacrifice.ogg b/sound/music/antag/heretic/heretic_sacrifice.ogg new file mode 100644 index 0000000000000..5a8efb6508356 Binary files /dev/null and b/sound/music/antag/heretic/heretic_sacrifice.ogg differ diff --git a/sound/ambience/antag/hypnotized.ogg b/sound/music/antag/hypnotized.ogg similarity index 100% rename from sound/ambience/antag/hypnotized.ogg rename to sound/music/antag/hypnotized.ogg diff --git a/sound/ambience/antag/ling_alert.ogg b/sound/music/antag/ling_alert.ogg similarity index 100% rename from sound/ambience/antag/ling_alert.ogg rename to sound/music/antag/ling_alert.ogg diff --git a/sound/ambience/antag/malf.ogg b/sound/music/antag/malf.ogg similarity index 100% rename from sound/ambience/antag/malf.ogg rename to sound/music/antag/malf.ogg diff --git a/sound/ambience/antag/monkey.ogg b/sound/music/antag/monkey.ogg similarity index 100% rename from sound/ambience/antag/monkey.ogg rename to sound/music/antag/monkey.ogg diff --git a/sound/effects/ninja_greeting.ogg b/sound/music/antag/ninja_greeting.ogg similarity index 100% rename from sound/effects/ninja_greeting.ogg rename to sound/music/antag/ninja_greeting.ogg diff --git a/sound/ambience/antag/ops.ogg b/sound/music/antag/ops.ogg similarity index 100% rename from sound/ambience/antag/ops.ogg rename to sound/music/antag/ops.ogg diff --git a/sound/ambience/antag/ragesmages.ogg b/sound/music/antag/ragesmages.ogg similarity index 100% rename from sound/ambience/antag/ragesmages.ogg rename to sound/music/antag/ragesmages.ogg diff --git a/sound/ambience/antag/revolutionary_tide.ogg b/sound/music/antag/revolutionary_tide.ogg similarity index 100% rename from sound/ambience/antag/revolutionary_tide.ogg rename to sound/music/antag/revolutionary_tide.ogg diff --git a/sound/ambience/antag/spy.ogg b/sound/music/antag/spy.ogg similarity index 100% rename from sound/ambience/antag/spy.ogg rename to sound/music/antag/spy.ogg diff --git a/sound/ambience/antag/thatshowfamiliesworks.ogg b/sound/music/antag/thatshowfamiliesworks.ogg similarity index 100% rename from sound/ambience/antag/thatshowfamiliesworks.ogg rename to sound/music/antag/thatshowfamiliesworks.ogg diff --git a/sound/traitor/final_objective.ogg b/sound/music/antag/traitor/final_objective.ogg similarity index 100% rename from sound/traitor/final_objective.ogg rename to sound/music/antag/traitor/final_objective.ogg diff --git a/sound/traitor/objective_failed.ogg b/sound/music/antag/traitor/objective_failed.ogg similarity index 100% rename from sound/traitor/objective_failed.ogg rename to sound/music/antag/traitor/objective_failed.ogg diff --git a/sound/traitor/objective_success.ogg b/sound/music/antag/traitor/objective_success.ogg similarity index 100% rename from sound/traitor/objective_success.ogg rename to sound/music/antag/traitor/objective_success.ogg diff --git a/sound/traitor/objective_taken.ogg b/sound/music/antag/traitor/objective_taken.ogg similarity index 100% rename from sound/traitor/objective_taken.ogg rename to sound/music/antag/traitor/objective_taken.ogg diff --git a/sound/ambience/antag/tatoralert.ogg b/sound/music/antag/traitor/tatoralert.ogg similarity index 100% rename from sound/ambience/antag/tatoralert.ogg rename to sound/music/antag/traitor/tatoralert.ogg diff --git a/sound/lavaland/bdm_boss.ogg b/sound/music/boss/bdm_boss.ogg similarity index 100% rename from sound/lavaland/bdm_boss.ogg rename to sound/music/boss/bdm_boss.ogg diff --git a/sound/lavaland/hiero_boss.ogg b/sound/music/boss/hiero_boss.ogg similarity index 100% rename from sound/lavaland/hiero_boss.ogg rename to sound/music/boss/hiero_boss.ogg diff --git a/sound/ambience/music/elevator/robocop-short.ogg b/sound/music/elevator/robocop-short.ogg similarity index 100% rename from sound/ambience/music/elevator/robocop-short.ogg rename to sound/music/elevator/robocop-short.ogg diff --git a/sound/ambience/clown.ogg b/sound/music/lobby_music/clown.ogg similarity index 100% rename from sound/ambience/clown.ogg rename to sound/music/lobby_music/clown.ogg diff --git a/sound/music/lobby_music/license.txt b/sound/music/lobby_music/license.txt new file mode 100644 index 0000000000000..be7e890e52789 --- /dev/null +++ b/sound/music/lobby_music/license.txt @@ -0,0 +1,4 @@ +title0.ogg is Endless Space by Solus. It has been licensed under CC-BY 3.0 license. Source file downloaded from https://www.newgrounds.com/audio/listen/74946 +title1.mod is Flip-Flap created by Jakub "AceMan" Szeląg and taken from http://aminet.net/package/mods/xceed/Flipflap +title2.ogg is Robocop Theme (gameboy) remixed by Eric Schumacker +title3.ogg is Tintin On The Moon remixed by Cuboos https://tgstation13.org/phpBB/viewtopic.php?f=10&t=2157 (assumed CC under allowing it to be submitted to the github, see thread) diff --git a/sound/ambience/title0.ogg b/sound/music/lobby_music/title0.ogg similarity index 100% rename from sound/ambience/title0.ogg rename to sound/music/lobby_music/title0.ogg diff --git a/sound/ambience/title1.mod b/sound/music/lobby_music/title1.mod similarity index 100% rename from sound/ambience/title1.mod rename to sound/music/lobby_music/title1.mod diff --git a/sound/ambience/title2.ogg b/sound/music/lobby_music/title2.ogg similarity index 100% rename from sound/ambience/title2.ogg rename to sound/music/lobby_music/title2.ogg diff --git a/sound/ambience/title3.ogg b/sound/music/lobby_music/title3.ogg similarity index 100% rename from sound/ambience/title3.ogg rename to sound/music/lobby_music/title3.ogg diff --git a/sound/ambience/music/sisyphus/sisyphus.ogg b/sound/music/sisyphus/sisyphus.ogg similarity index 100% rename from sound/ambience/music/sisyphus/sisyphus.ogg rename to sound/music/sisyphus/sisyphus.ogg diff --git a/sound/runtime/complionator/attribution.txt b/sound/runtime/complionator/attribution.txt new file mode 100644 index 0000000000000..c9229ef22b52a --- /dev/null +++ b/sound/runtime/complionator/attribution.txt @@ -0,0 +1 @@ +all complianator sounds are licensed under CC-BY-SA by Michael Haugh (supermichael) diff --git a/sound/mecha/critdestr.ogg b/sound/vehicles/mecha/critdestr.ogg similarity index 100% rename from sound/mecha/critdestr.ogg rename to sound/vehicles/mecha/critdestr.ogg diff --git a/sound/mecha/hydraulic.ogg b/sound/vehicles/mecha/hydraulic.ogg similarity index 100% rename from sound/mecha/hydraulic.ogg rename to sound/vehicles/mecha/hydraulic.ogg diff --git a/sound/mecha/imag_enh.ogg b/sound/vehicles/mecha/imag_enh.ogg similarity index 100% rename from sound/mecha/imag_enh.ogg rename to sound/vehicles/mecha/imag_enh.ogg diff --git a/sound/mecha/mech_blade_attack.ogg b/sound/vehicles/mecha/mech_blade_attack.ogg similarity index 100% rename from sound/mecha/mech_blade_attack.ogg rename to sound/vehicles/mecha/mech_blade_attack.ogg diff --git a/sound/mecha/mech_blade_break_wall.ogg b/sound/vehicles/mecha/mech_blade_break_wall.ogg similarity index 100% rename from sound/mecha/mech_blade_break_wall.ogg rename to sound/vehicles/mecha/mech_blade_break_wall.ogg diff --git a/sound/mecha/mech_blade_safty.ogg b/sound/vehicles/mecha/mech_blade_safty.ogg similarity index 100% rename from sound/mecha/mech_blade_safty.ogg rename to sound/vehicles/mecha/mech_blade_safty.ogg diff --git a/sound/mecha/mech_charge_attack.ogg b/sound/vehicles/mecha/mech_charge_attack.ogg similarity index 100% rename from sound/mecha/mech_charge_attack.ogg rename to sound/vehicles/mecha/mech_charge_attack.ogg diff --git a/sound/mecha/mech_shield_deflect.ogg b/sound/vehicles/mecha/mech_shield_deflect.ogg similarity index 100% rename from sound/mecha/mech_shield_deflect.ogg rename to sound/vehicles/mecha/mech_shield_deflect.ogg diff --git a/sound/mecha/mech_shield_drop.ogg b/sound/vehicles/mecha/mech_shield_drop.ogg similarity index 100% rename from sound/mecha/mech_shield_drop.ogg rename to sound/vehicles/mecha/mech_shield_drop.ogg diff --git a/sound/mecha/mech_shield_raise.ogg b/sound/vehicles/mecha/mech_shield_raise.ogg similarity index 100% rename from sound/mecha/mech_shield_raise.ogg rename to sound/vehicles/mecha/mech_shield_raise.ogg diff --git a/sound/mecha/mech_stealth_attack.ogg b/sound/vehicles/mecha/mech_stealth_attack.ogg similarity index 100% rename from sound/mecha/mech_stealth_attack.ogg rename to sound/vehicles/mecha/mech_stealth_attack.ogg diff --git a/sound/mecha/mech_stealth_effect.ogg b/sound/vehicles/mecha/mech_stealth_effect.ogg similarity index 100% rename from sound/mecha/mech_stealth_effect.ogg rename to sound/vehicles/mecha/mech_stealth_effect.ogg diff --git a/sound/mecha/mech_stealth_pre_attack.ogg b/sound/vehicles/mecha/mech_stealth_pre_attack.ogg similarity index 100% rename from sound/mecha/mech_stealth_pre_attack.ogg rename to sound/vehicles/mecha/mech_stealth_pre_attack.ogg diff --git a/sound/mecha/mechmove01.ogg b/sound/vehicles/mecha/mechmove01.ogg similarity index 100% rename from sound/mecha/mechmove01.ogg rename to sound/vehicles/mecha/mechmove01.ogg diff --git a/sound/mecha/mechmove03.ogg b/sound/vehicles/mecha/mechmove03.ogg similarity index 100% rename from sound/mecha/mechmove03.ogg rename to sound/vehicles/mecha/mechmove03.ogg diff --git a/sound/mecha/mechmove04.ogg b/sound/vehicles/mecha/mechmove04.ogg similarity index 100% rename from sound/mecha/mechmove04.ogg rename to sound/vehicles/mecha/mechmove04.ogg diff --git a/sound/mecha/mechstep.ogg b/sound/vehicles/mecha/mechstep.ogg similarity index 100% rename from sound/mecha/mechstep.ogg rename to sound/vehicles/mecha/mechstep.ogg diff --git a/sound/mecha/mechturn.ogg b/sound/vehicles/mecha/mechturn.ogg similarity index 100% rename from sound/mecha/mechturn.ogg rename to sound/vehicles/mecha/mechturn.ogg diff --git a/sound/mecha/nominal.ogg b/sound/vehicles/mecha/nominal.ogg similarity index 100% rename from sound/mecha/nominal.ogg rename to sound/vehicles/mecha/nominal.ogg diff --git a/sound/mecha/powerloader_step.ogg b/sound/vehicles/mecha/powerloader_step.ogg similarity index 100% rename from sound/mecha/powerloader_step.ogg rename to sound/vehicles/mecha/powerloader_step.ogg diff --git a/sound/mecha/powerloader_turn2.ogg b/sound/vehicles/mecha/powerloader_turn2.ogg similarity index 100% rename from sound/mecha/powerloader_turn2.ogg rename to sound/vehicles/mecha/powerloader_turn2.ogg diff --git a/sound/mecha/skyfall_power_up.ogg b/sound/vehicles/mecha/skyfall_power_up.ogg similarity index 100% rename from sound/mecha/skyfall_power_up.ogg rename to sound/vehicles/mecha/skyfall_power_up.ogg diff --git a/sound/mecha/weapdestr.ogg b/sound/vehicles/mecha/weapdestr.ogg similarity index 100% rename from sound/mecha/weapdestr.ogg rename to sound/vehicles/mecha/weapdestr.ogg diff --git a/sound/voice/attribution.txt b/sound/voice/attribution.txt deleted file mode 100644 index 7bfe5c4a9ce14..0000000000000 --- a/sound/voice/attribution.txt +++ /dev/null @@ -1,12 +0,0 @@ -borg_deathsound.ogg is spliced from two clips, both of which are under the CC Attribution license. The sound at https://freesound.org/people/simmfoc/sounds/28477/ was pitched down, sped up, and repeated a few times. https://freesound.org/people/nicStage/sounds/1522/ is then attached with a fadeout effect and lowered volume. - -all complianator sounds are licensed under CC-BY-SA by Michael Haugh (supermichael) - -The male sharp gasps in /sound/voice/human/ are from https://freesound.org/people/bacruz666/sounds/341908/ and https://freesound.org/people/nettoi/sounds/677540/, the female sharp gasps are from https://freesound.org/people/drotzruhn/sounds/405203/ - -{ -human/male_sniff.ogg - https://freesound.org/people/Fluffayfish/sounds/327799/ , License: CC BY-NC 3.0 -human/male_sigh.ogg - https://freesound.org/people/giddster/sounds/336540/ , License: CC0 -human/female_sniff.ogg - https://freesound.org/people/SpliceSound/sounds/218307/ , License: CC0 -human/female_sigh.ogg - https://freesound.org/people/biawinter/sounds/408090/ , License: CC BY-NC 4.0 -} modified by grungussuss \ No newline at end of file diff --git a/strings/fishing_tips.txt b/strings/fishing_tips.txt index 66e52a2ba88a9..44e7f32284ade 100644 --- a/strings/fishing_tips.txt +++ b/strings/fishing_tips.txt @@ -5,7 +5,7 @@ You could buy fish dirt cheap from the black market, but you probably won't get Rescue hooks can be used to snag in other people. Good for getting husks out of plasma rivers. Pufferfish are known for the slow yet lethal poison they store inside their liver. Magnet hooks are great to fish anything that's NOT a fish. -You can perform scanning experiments with an experi-scanner and some fish. They'll give sci some extra techweb points and get you more modules for the fishing portal generator. +You can perform scanning experiments with an experi-scanner and some fish. They'll give sci some extra techweb points and get you more modules for the fishing portal generator. Fish scanning experiments can be automatically performed with an advanced fishing rod. However to print one you need to have at least completed the first one. Advanced fishing rods come pre-equipped with a unexhaustible bait that ignores bait preferences of each fish, letting you catch'em all. Don't expect to be able to catch a lot of fish without a bait. @@ -15,6 +15,8 @@ You may find worms by digging through sand, ash and snow. You can revive fish by using a Lazarus Injector on them. However, using Strange Reagent would be a smarter option here. You can feed fish outside of an aquarium by tapping them with a can of fish feed. More fishing rods and fish cases can be printed at the autolathe. +You can link the fish portal generator to other fishing spots with a multitool. The maximum amount of fishing spots that can be linked and whether or not the link works on different z-levels depends on the quality of the machinery components. +The actual name of the fishing portal generator is 'fish-porter 3000'. They're totally the same thing however. Seeking alternative ways to catch fish without bothering to do it yourself? Explosives can be thrown at fishing spots to get several (dead) fishes in a pinch. You can raise lobstrosities from chasm chrabs. However, lobstrosities can only be tamed with spare limbs or lavaloop fish while still young. Lavaloop fish make for dangerous yet somewhat effective throwing weapons against big fauna. @@ -22,7 +24,7 @@ The fishing portal generator has different modules, all of which can be unlocked A fish's traits influence how you can catch them. Carnivore fish will ignore dough balls, and herbivore fish ignore anything that's not from botany. Telescopic fishing rods can be bought from cargo. Once grown from chrabs and tamed, lobstrosities can be heeded to fish on fishing spots for you. -Aquariums can be upgraded to bioelectricity generators can a specific kit. From there, you can add electric-generating fish like the anxious zip zap to generate power. +Aquariums can be upgraded to bioelectricity generators with a specific kit. From there, you can add electric-generating fish like the anxious zip zap to generate power for the station. Getting better at fishing will net you some small additional advantages, such as receiving more information when examining a fish or a fishing spot. The size and weight of a fish can influence the amount of reagents and fillets you can harvest from them, their force as a weapon and how easy it is to store them in containers. While most fish make for shoddy weapons, a few, like the swordfish and the chainsawfish, can be quite powerful. In general, the bigger they are, the more forceful they get. @@ -33,10 +35,15 @@ Some species of fish can be bred into new species under the right conditions. Most fish don't survive outside water, so get them somewhere safe like an aquarium or a fish case, or even a toilet or a moisture trap! No matter how you look at it, most people won't care about fishing. Don't let that stop you. They're just jealous. To fish on ice you have to puncture the ice layer with a pick or shovel first. -Depending on the kind of fish inside it and whether they're alive or dead, an aquarium can improve the beauty of the room or worsen it. +Depending on the kinds of fish inside it and whether they're alive or dead, an aquarium can improve the beauty of the room or worsen it. Almost all fish can be ground in an All-in-one-Grinder. Don't think too hard about how you're fitting a giant fish into a blender. Nanotrasen technology is weird like that. The sludgefish from the toilets can be used as a steady supply of cheap fish and fillets due to its self-reproducing behaviour. However it's quite fragile. In a jiffy, you can scoop tadpoles from ponds with your bare hands, place them inside aquariums and quickly raise them into frogs. The legendary fishing hat isn't just cosmetic. Space carps (as well as young lobstrosities and frogs) do truly fear those who wear it. Have you ever heard a lobster or crab talk? Well, neither have I, but they say they're quite the fishy punsters. -You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) for research. \ No newline at end of file +You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) to research. +Fish is, of course, edible. Is it safe to eat raw? Well, if you've strong stomach, otherwise your best option is to cook it for a at least half a spessman minute if you don't want to catch nasty diseases. +After researching the Advanced Fishing Technology Node, you can print special fishing gloves that let you fish without having to carry around a fishing rod. There's one pair that even trains athletics on top of fishing.You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) for research. +If you have enough credits, you can buy a set of fishing lures from cargo. Each lure allows you to catch different species of fish and won't get consumed, however they need to be spun at intervals to work. +Various clothing and handheld items, as well as chairs you sit on, can make fishing easier (or sometimes harder). A trained fisherman can tell what can help and what won't, so keep an eye out. +This may sound silly, but (live) squids and their ink sacs can be used as weapons to temporarily blind foes. diff --git a/strings/round_start_sounds.txt b/strings/round_start_sounds.txt index e79ebb5de32f2..9981097c30850 100644 --- a/strings/round_start_sounds.txt +++ b/strings/round_start_sounds.txt @@ -1,4 +1,4 @@ -sound/ambience/title0.ogg -sound/ambience/title1.mod -sound/ambience/title2.ogg -sound/ambience/title3.ogg +sound/music/lobby_music/title1.mod +sound/music/lobby_music/title2.ogg +sound/music/lobby_music/title3.ogg +sound/music/lobby_music/clown.ogg diff --git a/strings/tips.txt b/strings/tips.txt index 782be800415be..6d8fd65bf9223 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -200,7 +200,7 @@ As the Detective, your revolver can be loaded with .357 ammunition obtained from As the Head of Personnel, you are not higher ranking than other heads of staff, even though you are expected to take the Captain's place first should he go missing. If the situation seems too rough for you, consider allowing another head to become temporary Captain. As the Head of Security, don't let the power go to your head. You may have high access, great equipment, and a miniature army at your side, but being a terrible person without a good reason is grounds for banning. As the Head of Security, you are expected to coordinate your security force to handle any threat that comes to the station. Sometimes it means making use of the armory to handle a blob, sometimes it means being ruthless during a revolution or cult. -As the Head of Security, you can call for executions or forced cyborgization, which require the Captain's or the Prisoner's consent, respectively. +As the Head of Security, you can call for executions or forced cyborgization, but may require the Captain's approval. As the Lawyer, try to negotiate with the Warden if sentences seem too high for the crime. As the Lawyer, you can try to convince the Captain and Head of Security to hold trials for prisoners in the courtroom. As the Malfunctioning AI, look into flooding the station with plasma fires to kill off large portions of the crew, letting you pick off the remaining few with space suits who escaped. diff --git a/tgstation.dme b/tgstation.dme index adeff5333caaf..b091dff801090 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -12,6 +12,7 @@ // END_PREFERENCES // BEGIN_INCLUDE +#include "__odlint.dm" #include "_maps\_basemap.dm" #include "code\__byond_version_compat.dm" #include "code\_compile_options.dm" @@ -502,6 +503,7 @@ #include "code\__DEFINES\~~bubber_defines\research_categories.dm" #include "code\__DEFINES\~~bubber_defines\say.dm" #include "code\__DEFINES\~~bubber_defines\signals.dm" +#include "code\__DEFINES\~~bubber_defines\span.dm" #include "code\__DEFINES\~~bubber_defines\species.dm" #include "code\__DEFINES\~~bubber_defines\status_indicator_defines.dm" #include "code\__DEFINES\~~bubber_defines\storyteller_defines.dm" @@ -570,6 +572,7 @@ #include "code\__HELPERS\memory_helpers.dm" #include "code\__HELPERS\mobs.dm" #include "code\__HELPERS\mouse_control.dm" +#include "code\__HELPERS\movement.dm" #include "code\__HELPERS\nameof.dm" #include "code\__HELPERS\names.dm" #include "code\__HELPERS\piping_colors_lists.dm" @@ -789,6 +792,7 @@ #include "code\controllers\subsystem\lighting.dm" #include "code\controllers\subsystem\lua.dm" #include "code\controllers\subsystem\machines.dm" +#include "code\controllers\subsystem\map_vote.dm" #include "code\controllers\subsystem\mapping.dm" #include "code\controllers\subsystem\market.dm" #include "code\controllers\subsystem\materials.dm" @@ -840,6 +844,8 @@ #include "code\controllers\subsystem\transport.dm" #include "code\controllers\subsystem\tts.dm" #include "code\controllers\subsystem\tutorials.dm" +#include "code\controllers\subsystem\unplanned_ai_idle_controllers.dm" +#include "code\controllers\subsystem\unplanned_controllers.dm" #include "code\controllers\subsystem\verb_manager.dm" #include "code\controllers\subsystem\vis_overlays.dm" #include "code\controllers\subsystem\vote.dm" @@ -861,12 +867,13 @@ #include "code\controllers\subsystem\movement\hyperspace_drift.dm" #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\movement\newtonian_movement.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\message_bottles.dm" #include "code\controllers\subsystem\persistence\photo_albums.dm" #include "code\controllers\subsystem\persistence\piggy_banks.dm" #include "code\controllers\subsystem\persistence\recipes.dm" @@ -887,6 +894,7 @@ #include "code\controllers\subsystem\processing\fishing.dm" #include "code\controllers\subsystem\processing\greyscale.dm" #include "code\controllers\subsystem\processing\instruments.dm" +#include "code\controllers\subsystem\processing\manufacturing.dm" #include "code\controllers\subsystem\processing\obj.dm" #include "code\controllers\subsystem\processing\plumbing.dm" #include "code\controllers\subsystem\processing\processing.dm" @@ -911,6 +919,7 @@ #include "code\datums\datumvars.dm" #include "code\datums\dna.dm" #include "code\datums\dog_fashion.dm" +#include "code\datums\drift_handler.dm" #include "code\datums\ductnet.dm" #include "code\datums\eigenstate.dm" #include "code\datums\embed_data.dm" @@ -975,6 +984,7 @@ #include "code\datums\actions\items\cult_dagger.dm" #include "code\datums\actions\items\hands_free.dm" #include "code\datums\actions\items\organ_action.dm" +#include "code\datums\actions\items\reload_rebar.dm" #include "code\datums\actions\items\set_internals.dm" #include "code\datums\actions\items\stealth_box.dm" #include "code\datums\actions\items\summon_stickmen.dm" @@ -1021,6 +1031,7 @@ #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\emote_with_target.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\find_parent.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" @@ -1153,6 +1164,7 @@ #include "code\datums\components\_component.dm" #include "code\datums\components\acid.dm" #include "code\datums\components\action_item_overlay.dm" +#include "code\datums\components\adjust_fishing_difficulty.dm" #include "code\datums\components\admin_popup.dm" #include "code\datums\components\aggro_emote.dm" #include "code\datums\components\ai_has_target_timer.dm" @@ -1219,7 +1231,6 @@ #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" #include "code\datums\components\edit_complainer.dm" @@ -1361,6 +1372,7 @@ #include "code\datums\components\spin2win.dm" #include "code\datums\components\spinny.dm" #include "code\datums\components\spirit_holding.dm" +#include "code\datums\components\splat.dm" #include "code\datums\components\splattercasting.dm" #include "code\datums\components\squashable.dm" #include "code\datums\components\squeak.dm" @@ -1543,6 +1555,7 @@ #include "code\datums\elements\beauty.dm" #include "code\datums\elements\bed_tucking.dm" #include "code\datums\elements\befriend_petting.dm" +#include "code\datums\elements\block_turf_fingerprints.dm" #include "code\datums\elements\blocks_explosives.dm" #include "code\datums\elements\body_temp_sensitive.dm" #include "code\datums\elements\bombable_turf.dm" @@ -1654,6 +1667,7 @@ #include "code\datums\elements\proficient_miner.dm" #include "code\datums\elements\projectile_drop.dm" #include "code\datums\elements\projectile_shield.dm" +#include "code\datums\elements\quality_food_ingredient.dm" #include "code\datums\elements\radiation_protected_clothing.dm" #include "code\datums\elements\radioactive.dm" #include "code\datums\elements\ranged_armour.dm" @@ -1839,6 +1853,7 @@ #include "code\datums\proximity_monitor\fields\gravity.dm" #include "code\datums\proximity_monitor\fields\projectile_dampener.dm" #include "code\datums\proximity_monitor\fields\timestop.dm" +#include "code\datums\proximity_monitor\fields\void_storm.dm" #include "code\datums\quirks\_quirk.dm" #include "code\datums\quirks\_quirk_constant_data.dm" #include "code\datums\quirks\negative_quirks\addict.dm" @@ -2045,7 +2060,6 @@ #include "code\datums\votes\custom_vote.dm" #include "code\datums\votes\map_vote.dm" #include "code\datums\votes\restart_vote.dm" -#include "code\datums\votes\rock_the_vote.dm" #include "code\datums\weather\weather.dm" #include "code\datums\weather\weather_types\ash_storm.dm" #include "code\datums\weather\weather_types\floor_is_lava.dm" @@ -2162,7 +2176,7 @@ #include "code\game\machinery\digital_clock.dm" #include "code\game\machinery\dish_drive.dm" #include "code\game\machinery\dna_scanner.dm" -#include "code\game\machinery\droneDispenser.dm" +#include "code\game\machinery\drone_dispenser.dm" #include "code\game\machinery\ecto_sniffer.dm" #include "code\game\machinery\fat_sucker.dm" #include "code\game\machinery\firealarm.dm" @@ -2406,6 +2420,7 @@ #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\costume.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" +#include "code\game\objects\effects\spawners\message_in_a_bottle.dm" #include "code\game\objects\effects\spawners\structure.dm" #include "code\game\objects\effects\spawners\xeno_egg_delivery.dm" #include "code\game\objects\effects\spawners\random\ai_module.dm" @@ -2455,7 +2470,7 @@ #include "code\game\objects\items\charter.dm" #include "code\game\objects\items\choice_beacon.dm" #include "code\game\objects\items\chromosome.dm" -#include "code\game\objects\items\cigs_lighters.dm" +#include "code\game\objects\items\cigarettes.dm" #include "code\game\objects\items\climbingrope.dm" #include "code\game\objects\items\clown_items.dm" #include "code\game\objects\items\control_wand.dm" @@ -2495,6 +2510,7 @@ #include "code\game\objects\items\kitchen.dm" #include "code\game\objects\items\knives.dm" #include "code\game\objects\items\latexballoon.dm" +#include "code\game\objects\items\lighter.dm" #include "code\game\objects\items\machine_wand.dm" #include "code\game\objects\items\mail.dm" #include "code\game\objects\items\maintenance_loot.dm" @@ -2558,6 +2574,7 @@ #include "code\game\objects\items\devices\anomaly_releaser.dm" #include "code\game\objects\items\devices\battle_royale.dm" #include "code\game\objects\items\devices\beacon.dm" +#include "code\game\objects\items\devices\broadcast_camera.dm" #include "code\game\objects\items\devices\chameleonproj.dm" #include "code\game\objects\items\devices\destabilizing_crystal.dm" #include "code\game\objects\items\devices\desynchronizer.dm" @@ -2799,6 +2816,7 @@ #include "code\game\objects\structures\curtains.dm" #include "code\game\objects\structures\deployable_turret.dm" #include "code\game\objects\structures\destructible_structures.dm" +#include "code\game\objects\structures\detectiveboard.dm" #include "code\game\objects\structures\displaycase.dm" #include "code\game\objects\structures\divine.dm" #include "code\game\objects\structures\door_assembly.dm" @@ -2867,6 +2885,7 @@ #include "code\game\objects\structures\cannons\cannon.dm" #include "code\game\objects\structures\cannons\cannon_instructions.dm" #include "code\game\objects\structures\cannons\cannonballs.dm" +#include "code\game\objects\structures\cannons\mounted_guns\mounted_gun.dm" #include "code\game\objects\structures\construction_console\construction_actions.dm" #include "code\game\objects\structures\construction_console\construction_console.dm" #include "code\game\objects\structures\construction_console\construction_console_aux.dm" @@ -3338,13 +3357,16 @@ #include "code\modules\antagonists\heretic\magic\star_blast.dm" #include "code\modules\antagonists\heretic\magic\star_touch.dm" #include "code\modules\antagonists\heretic\magic\void_cold_cone.dm" +#include "code\modules\antagonists\heretic\magic\void_conduit.dm" #include "code\modules\antagonists\heretic\magic\void_phase.dm" +#include "code\modules\antagonists\heretic\magic\void_prison.dm" #include "code\modules\antagonists\heretic\magic\void_pull.dm" #include "code\modules\antagonists\heretic\magic\wave_of_desperation.dm" #include "code\modules\antagonists\heretic\status_effects\buffs.dm" #include "code\modules\antagonists\heretic\status_effects\debuffs.dm" #include "code\modules\antagonists\heretic\status_effects\ghoul.dm" #include "code\modules\antagonists\heretic\status_effects\mark_effects.dm" +#include "code\modules\antagonists\heretic\status_effects\void_chill.dm" #include "code\modules\antagonists\heretic\structures\carving_knife.dm" #include "code\modules\antagonists\heretic\structures\lock_final.dm" #include "code\modules\antagonists\heretic\structures\mawed_crucible.dm" @@ -3639,6 +3661,7 @@ #include "code\modules\atmospherics\machinery\portable\scrubber.dm" #include "code\modules\autowiki\autowiki.dm" #include "code\modules\autowiki\pages\base.dm" +#include "code\modules\autowiki\pages\fishing.dm" #include "code\modules\autowiki\pages\soup.dm" #include "code\modules\autowiki\pages\stockparts.dm" #include "code\modules\autowiki\pages\techweb.dm" @@ -3732,8 +3755,10 @@ #include "code\modules\bitrunning\virtual_domain\domains\colossus.dm" #include "code\modules\bitrunning\virtual_domain\domains\fredingtonfastingbear.dm" #include "code\modules\bitrunning\virtual_domain\domains\gondola_asteroid.dm" +#include "code\modules\bitrunning\virtual_domain\domains\grassland_hunt.dm" #include "code\modules\bitrunning\virtual_domain\domains\hierophant.dm" #include "code\modules\bitrunning\virtual_domain\domains\island_brawl.dm" +#include "code\modules\bitrunning\virtual_domain\domains\meta_central.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" @@ -3928,7 +3953,6 @@ #include "code\modules\client\preferences\window_flashing.dm" #include "code\modules\client\preferences\middleware\_middleware.dm" #include "code\modules\client\preferences\middleware\antags.dm" -#include "code\modules\client\preferences\middleware\food.dm" #include "code\modules\client\preferences\middleware\jobs.dm" #include "code\modules\client\preferences\middleware\keybindings.dm" #include "code\modules\client\preferences\middleware\legacy_toggles.dm" @@ -4276,6 +4300,7 @@ #include "code\modules\fishing\admin.dm" #include "code\modules\fishing\bait.dm" #include "code\modules\fishing\fish_catalog.dm" +#include "code\modules\fishing\fish_movement.dm" #include "code\modules\fishing\fishing_equipment.dm" #include "code\modules\fishing\fishing_minigame.dm" #include "code\modules\fishing\fishing_portal_machine.dm" @@ -4288,7 +4313,16 @@ #include "code\modules\fishing\fish\chasm_detritus.dm" #include "code\modules\fishing\fish\fish_evolution.dm" #include "code\modules\fishing\fish\fish_traits.dm" -#include "code\modules\fishing\fish\fish_types.dm" +#include "code\modules\fishing\fish\types\air_space.dm" +#include "code\modules\fishing\fish\types\anadromous.dm" +#include "code\modules\fishing\fish\types\freshwater.dm" +#include "code\modules\fishing\fish\types\holographic.dm" +#include "code\modules\fishing\fish\types\mining.dm" +#include "code\modules\fishing\fish\types\ruins.dm" +#include "code\modules\fishing\fish\types\saltwater.dm" +#include "code\modules\fishing\fish\types\station.dm" +#include "code\modules\fishing\fish\types\syndicate.dm" +#include "code\modules\fishing\fish\types\tiziran.dm" #include "code\modules\fishing\sources\_fish_source.dm" #include "code\modules\fishing\sources\source_types.dm" #include "code\modules\flufftext\Dreaming.dm" @@ -4559,6 +4593,7 @@ #include "code\modules\jobs\job_types\station_trait\bridge_assistant.dm" #include "code\modules\jobs\job_types\station_trait\cargo_gorilla.dm" #include "code\modules\jobs\job_types\station_trait\human_ai.dm" +#include "code\modules\jobs\job_types\station_trait\pun_pun.dm" #include "code\modules\jobs\job_types\station_trait\veteran_advisor.dm" #include "code\modules\keybindings\bindings_atom.dm" #include "code\modules\keybindings\bindings_client.dm" @@ -4601,7 +4636,8 @@ #include "code\modules\library\random_books.dm" #include "code\modules\library\skill_learning\skill_station.dm" #include "code\modules\library\skill_learning\skillchip.dm" -#include "code\modules\library\skill_learning\generic_skillchips\matrix_flip.dm" +#include "code\modules\library\skill_learning\generic_skillchips\matrix_taunt.dm" +#include "code\modules\library\skill_learning\generic_skillchips\point.dm" #include "code\modules\library\skill_learning\generic_skillchips\rod_suplex.dm" #include "code\modules\library\skill_learning\job_skillchips\_job.dm" #include "code\modules\library\skill_learning\job_skillchips\chef.dm" @@ -4679,6 +4715,17 @@ #include "code\modules\mafia\roles\town\town_killing.dm" #include "code\modules\mafia\roles\town\town_protective.dm" #include "code\modules\mafia\roles\town\town_support.dm" +#include "code\modules\manufactorio\_manufacturing.dm" +#include "code\modules\manufactorio\machines\crafter.dm" +#include "code\modules\manufactorio\machines\crusher.dm" +#include "code\modules\manufactorio\machines\debug.dm" +#include "code\modules\manufactorio\machines\lathe.dm" +#include "code\modules\manufactorio\machines\router.dm" +#include "code\modules\manufactorio\machines\smelter.dm" +#include "code\modules\manufactorio\machines\sorter.dm" +#include "code\modules\manufactorio\machines\sorter_filters.dm" +#include "code\modules\manufactorio\machines\storagebox.dm" +#include "code\modules\manufactorio\machines\unloader.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" @@ -4857,6 +4904,7 @@ #include "code\modules\mob\living\basic\basic_defense.dm" #include "code\modules\mob\living\basic\festivus_pole.dm" #include "code\modules\mob\living\basic\health_adjustment.dm" +#include "code\modules\mob\living\basic\revolutionary.dm" #include "code\modules\mob\living\basic\tree.dm" #include "code\modules\mob\living\basic\alien\_alien.dm" #include "code\modules\mob\living\basic\alien\alien_ai.dm" @@ -4907,7 +4955,6 @@ #include "code\modules\mob\living\basic\drone\inventory.dm" #include "code\modules\mob\living\basic\drone\verbs.dm" #include "code\modules\mob\living\basic\drone\visuals_icons.dm" -#include "code\modules\mob\living\basic\farm_animals\deer.dm" #include "code\modules\mob\living\basic\farm_animals\pig.dm" #include "code\modules\mob\living\basic\farm_animals\pony.dm" #include "code\modules\mob\living\basic\farm_animals\rabbit.dm" @@ -4921,6 +4968,8 @@ #include "code\modules\mob\living\basic\farm_animals\cow\cow_ai.dm" #include "code\modules\mob\living\basic\farm_animals\cow\cow_moonicorn.dm" #include "code\modules\mob\living\basic\farm_animals\cow\cow_wisdom.dm" +#include "code\modules\mob\living\basic\farm_animals\deer\deer.dm" +#include "code\modules\mob\living\basic\farm_animals\deer\deer_ai.dm" #include "code\modules\mob\living\basic\farm_animals\goat\_goat.dm" #include "code\modules\mob\living\basic\farm_animals\goat\goat_ai.dm" #include "code\modules\mob\living\basic\farm_animals\goat\goat_subtypes.dm" @@ -5312,6 +5361,7 @@ #include "code\modules\mob\living\silicon\ai\multicam.dm" #include "code\modules\mob\living\silicon\ai\robot_control.dm" #include "code\modules\mob\living\silicon\ai\vox_sounds.dm" +#include "code\modules\mob\living\silicon\ai\ai_actions\remote_power.dm" #include "code\modules\mob\living\silicon\ai\freelook\cameranet.dm" #include "code\modules\mob\living\silicon\ai\freelook\chunk.dm" #include "code\modules\mob\living\silicon\ai\freelook\eye.dm" @@ -5571,6 +5621,7 @@ #include "code\modules\power\powernet.dm" #include "code\modules\power\rtg.dm" #include "code\modules\power\smes.dm" +#include "code\modules\power\smes_portable.dm" #include "code\modules\power\solar.dm" #include "code\modules\power\terminal.dm" #include "code\modules\power\thermoelectric_generator.dm" @@ -5979,9 +6030,11 @@ #include "code\modules\shuttle\white_ship.dm" #include "code\modules\shuttle\shuttle_events\_shuttle_events.dm" #include "code\modules\shuttle\shuttle_events\carp.dm" +#include "code\modules\shuttle\shuttle_events\humans.dm" #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\projectile.dm" #include "code\modules\shuttle\shuttle_events\turbulence.dm" #include "code\modules\spatial_grid\cell_tracker.dm" #include "code\modules\spells\spell.dm" @@ -6325,6 +6378,7 @@ #include "code\modules\vending\clothesmate.dm" #include "code\modules\vending\coffee.dm" #include "code\modules\vending\cola.dm" +#include "code\modules\vending\cytopro.dm" #include "code\modules\vending\donk.dm" #include "code\modules\vending\drinnerware.dm" #include "code\modules\vending\engineering.dm" @@ -6559,7 +6613,6 @@ #include "modular_skyrat\master_files\code\datums\quirks\neutral_quirks\lungs.dm" #include "modular_skyrat\master_files\code\datums\quirks\positive_quirks\life_savings.dm" #include "modular_skyrat\master_files\code\datums\records\record.dm" -#include "modular_skyrat\master_files\code\datums\station_traits\negative_traits.dm" #include "modular_skyrat\master_files\code\datums\status_effects\debuffs\debuffs.dm" #include "modular_skyrat\master_files\code\datums\storage\storage.dm" #include "modular_skyrat\master_files\code\datums\storage\subtypes\pockets.dm" @@ -6678,6 +6731,7 @@ #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\food.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" @@ -6846,6 +6900,7 @@ #include "modular_skyrat\master_files\code\modules\mod\modules\modules_antag.dm" #include "modular_skyrat\master_files\code\modules\mod\modules\modules_security.dm" #include "modular_skyrat\master_files\code\modules\mod\modules\modules_supply.dm" +#include "modular_skyrat\master_files\code\modules\modular_computers\computers\item\computer.dm" #include "modular_skyrat\master_files\code\modules\modular_computers\computers\item\laptop_presets.dm" #include "modular_skyrat\master_files\code\modules\modular_computers\file_system\programs\maintenance\camera.dm" #include "modular_skyrat\master_files\code\modules\movespeed\modifiers\items.dm" @@ -8598,6 +8653,8 @@ #include "modular_zubbers\code\__DEFINES\guardian_defines.dm" #include "modular_zubbers\code\__DEFINES\moonstation_defines.dm" #include "modular_zubbers\code\__DEFINES\send2relay.dm" +#include "modular_zubbers\code\__DEFINES\span.dm" +#include "modular_zubbers\code\__DEFINES\techweb_nodes.dm" #include "modular_zubbers\code\__DEFINES\traits.dm" #include "modular_zubbers\code\_globalvars\lists\_maintenance_loot.dm" #include "modular_zubbers\code\_globalvars\lists\maintenance_loot_common.dm" @@ -8607,12 +8664,13 @@ #include "modular_zubbers\code\_globalvars\lists\maintenance_loot_trash.dm" #include "modular_zubbers\code\_globalvars\lists\maintenance_loot_uncommon.dm" #include "modular_zubbers\code\_globalvars\lists\quirks.dm" -#include "modular_zubbers\code\_globalvars\lists\text.dm" #include "modular_zubbers\code\_globalvars\lists\~maintenance_loot.dm" +#include "modular_zubbers\code\_onclick\hud\screen_objects\hud_timer.dm" #include "modular_zubbers\code\controllers\configuration\entries\nsfw.dm" #include "modular_zubbers\code\controllers\subsystem\air.dm" #include "modular_zubbers\code\controllers\subsystem\mapping.dm" #include "modular_zubbers\code\controllers\subsystem\research.dm" +#include "modular_zubbers\code\controllers\subsystem\vote.dm" #include "modular_zubbers\code\controllers\subsystem\processing\sol_subsystem.dm" #include "modular_zubbers\code\datums\action.dm" #include "modular_zubbers\code\datums\akula_overrides.dm" @@ -8622,7 +8680,6 @@ #include "modular_zubbers\code\datums\ai_laws\laws_antagonistic.dm" #include "modular_zubbers\code\datums\ai_laws\laws_neutral.dm" #include "modular_zubbers\code\datums\ai_laws\laws_station_sided.dm" -#include "modular_zubbers\code\datums\announcers\default_announcer.dm" #include "modular_zubbers\code\datums\brain_damage\magic.dm" #include "modular_zubbers\code\datums\bubber_quirks\hydrophilic.dm" #include "modular_zubbers\code\datums\bubber_quirks\neutral.dm" @@ -8649,10 +8706,12 @@ #include "modular_zubbers\code\datums\diseases\advance\presets.dm" #include "modular_zubbers\code\datums\greyscale\config_types\greyscale_configs\greyscale_clothes.dm" #include "modular_zubbers\code\datums\mapgen\Cavegens\moonstation.dm" +#include "modular_zubbers\code\datums\materials\basemats.dm" #include "modular_zubbers\code\datums\mood_events\bloodsucker_events.dm" #include "modular_zubbers\code\datums\mood_events\dominant_mood.dm" #include "modular_zubbers\code\datums\mood_events\food_events.dm" #include "modular_zubbers\code\datums\mood_events\miasma_events.dm" +#include "modular_zubbers\code\datums\mutations\visuals_override.dm" #include "modular_zubbers\code\datums\shuttle\arena.dm" #include "modular_zubbers\code\datums\shuttles\emergency.dm" #include "modular_zubbers\code\datums\station_traits\disabled_traits.dm" @@ -8671,6 +8730,7 @@ #include "modular_zubbers\code\game\gamemodes\objectives\overrides.dm" #include "modular_zubbers\code\game\Items\big_bertha_shield.dm" #include "modular_zubbers\code\game\Items\coins.dm" +#include "modular_zubbers\code\game\Items\lipstick.dm" #include "modular_zubbers\code\game\Items\nerdcrowbar.dm" #include "modular_zubbers\code\game\Items\plushes.dm" #include "modular_zubbers\code\game\Items\sec_hailer.dm" @@ -8701,6 +8761,7 @@ #include "modular_zubbers\code\game\machinery\computer\crew.dm" #include "modular_zubbers\code\game\machinery\computer\orders\order_computer\cook_order_interdyne.dm" #include "modular_zubbers\code\game\machinery\computer\orders\order_items\mining\order_pka.dm" +#include "modular_zubbers\code\game\machinery\doors\door.dm" #include "modular_zubbers\code\game\machinery\doors\firedoor.dm" #include "modular_zubbers\code\game\machinery\pipe\construction.dm" #include "modular_zubbers\code\game\objects\effects\decals.dm" @@ -8714,6 +8775,7 @@ #include "modular_zubbers\code\game\objects\items\cards_ids.dm" #include "modular_zubbers\code\game\objects\items\cigs_lighters.dm" #include "modular_zubbers\code\game\objects\items\holy_weapons.dm" +#include "modular_zubbers\code\game\objects\items\kiss.dm" #include "modular_zubbers\code\game\objects\items\more_pkas.dm" #include "modular_zubbers\code\game\objects\items\plushes.dm" #include "modular_zubbers\code\game\objects\items\ai_modules\full_lawsets.dm" @@ -8729,6 +8791,7 @@ #include "modular_zubbers\code\game\objects\items\storage\boxes.dm" #include "modular_zubbers\code\game\objects\items\storage\briefcase.dm" #include "modular_zubbers\code\game\objects\items\storage\garment.dm" +#include "modular_zubbers\code\game\objects\structures\aliens.dm" #include "modular_zubbers\code\game\objects\structures\chalkboard.dm" #include "modular_zubbers\code\game\objects\structures\ore_vent.dm" #include "modular_zubbers\code\game\objects\structures\trash_pile.dm" @@ -8748,6 +8811,7 @@ #include "modular_zubbers\code\game\turfs\open\sand.dm" #include "modular_zubbers\code\modules\_defines.dm" #include "modular_zubbers\code\modules\admin\verbs\debug.dm" +#include "modular_zubbers\code\modules\alt_anomaly_refinery\anomaly_refinery.dm" #include "modular_zubbers\code\modules\alternative_job_titles\code\alt_job_titles.dm" #include "modular_zubbers\code\modules\antagonists\modglue.dm" #include "modular_zubbers\code\modules\antagonists\_common\antag_datum.dm" @@ -8801,11 +8865,22 @@ #include "modular_zubbers\code\modules\antagonists\bloodsucker\vassal\vassal_types\ex_vassal.dm" #include "modular_zubbers\code\modules\antagonists\bloodsucker\vassal\vassal_types\favorite_vassal.dm" #include "modular_zubbers\code\modules\antagonists\bloodsucker\vassal\vassal_types\revenge_vassal.dm" +#include "modular_zubbers\code\modules\antagonists\ert\names.dm" +#include "modular_zubbers\code\modules\antagonists\heretic\heretic.dm" +#include "modular_zubbers\code\modules\antagonists\heretic\transmutation_rune.dm" #include "modular_zubbers\code\modules\antagonists\malf\doomsday.dm" #include "modular_zubbers\code\modules\antagonists\malf\remove_malf.dm" #include "modular_zubbers\code\modules\antagonists\nightmare\nightmare_species.dm" -#include "modular_zubbers\code\modules\antagonists\uplink\uplinkdatums.dm" -#include "modular_zubbers\code\modules\antagonists\uplink\uplinkitems.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\goal_overrides.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplinkdatums.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\bundle.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\dangerous.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\device_tools.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\job.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\stealth_items.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\uplinkitems.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\syndimaid\_syndimaid.dm" +#include "modular_zubbers\code\modules\antagonists\traitor\uplink\uplink_items\syndimaid\clothes.dm" #include "modular_zubbers\code\modules\antagonists\wizard\events_removal.dm" #include "modular_zubbers\code\modules\antagonists\wizard\events_rework.dm" #include "modular_zubbers\code\modules\antagonists\wizard\grand_finale_removal.dm" @@ -8830,12 +8905,6 @@ #include "modular_zubbers\code\modules\blooper\bark.dm" #include "modular_zubbers\code\modules\blooper\bark_list.dm" #include "modular_zubbers\code\modules\borer_hud\borer.dm" -#include "modular_zubbers\code\modules\borgs\code\robot.dm" -#include "modular_zubbers\code\modules\borgs\code\robot_defense.dm" -#include "modular_zubbers\code\modules\borgs\code\robot_defines.dm" -#include "modular_zubbers\code\modules\borgs\code\robot_items.dm" -#include "modular_zubbers\code\modules\borgs\code\robot_model.dm" -#include "modular_zubbers\code\modules\borgs\code\robot_upgrade.dm" #include "modular_zubbers\code\modules\bow_adjustments\arrow.dm" #include "modular_zubbers\code\modules\bow_adjustments\bow.dm" #include "modular_zubbers\code\modules\bsrpd\code\bsrpd.dm" @@ -8860,7 +8929,6 @@ #include "modular_zubbers\code\modules\client\ssd.dm" #include "modular_zubbers\code\modules\client\autopunctuation\preferences.dm" #include "modular_zubbers\code\modules\client\flavor_text\flavor_text.dm" -#include "modular_zubbers\code\modules\client\preferences\preferences.dm" #include "modular_zubbers\code\modules\client\preferences\middleware\species.dm" #include "modular_zubbers\code\modules\client\verbs\character_directory.dm" #include "modular_zubbers\code\modules\clothing\_job.dm" @@ -8936,6 +9004,9 @@ #include "modular_zubbers\code\modules\emotes\scream_datums.dm" #include "modular_zubbers\code\modules\emotes\species_screams.dm" #include "modular_zubbers\code\modules\emotes\synth_emotes.dm" +#include "modular_zubbers\code\modules\events\ev_roleplay_check.dm" +#include "modular_zubbers\code\modules\events\meteor_wave.dm" +#include "modular_zubbers\code\modules\events\scrubber_overflow.dm" #include "modular_zubbers\code\modules\events\ghost_role\blob.dm" #include "modular_zubbers\code\modules\experisci\handheld_scanner.dm" #include "modular_zubbers\code\modules\experisci\experiment\handlers\experiment_handler.dm" @@ -8947,6 +9018,7 @@ #include "modular_zubbers\code\modules\GAGS\greyscale_configs.dm" #include "modular_zubbers\code\modules\ghostcafe\hilbertshotel_silicon.dm" #include "modular_zubbers\code\modules\gladiator\code\game\objects\items\gladiator_items.dm" +#include "modular_zubbers\code\modules\goofsec\code\department_guards.dm" #include "modular_zubbers\code\modules\hydroponics\gene_modder.dm" #include "modular_zubbers\code\modules\hydroponics\plant_genes.dm" #include "modular_zubbers\code\modules\hydroponics\code\grown\rocks.dm" @@ -9010,11 +9082,13 @@ #include "modular_zubbers\code\modules\mob\dead\new_player\body_markings.dm" #include "modular_zubbers\code\modules\mob\dead\new_player\sprite_accessories.dm" #include "modular_zubbers\code\modules\mob\dead\new_player\sprite_accessories\fluff.dm" +#include "modular_zubbers\code\modules\mob\dead\new_player\sprite_accessories\frills.dm" #include "modular_zubbers\code\modules\mob\dead\new_player\sprite_accessories\hair.dm" #include "modular_zubbers\code\modules\mob\dead\new_player\sprite_accessories\horns.dm" #include "modular_zubbers\code\modules\mob\dead\new_player\sprite_accessories\ipc.dm" #include "modular_zubbers\code\modules\mob\dead\new_player\sprite_accessories\skrell_hair.dm" #include "modular_zubbers\code\modules\mob\dead\new_player\sprite_accessories\wings.dm" +#include "modular_zubbers\code\modules\mob\living\emote.dm" #include "modular_zubbers\code\modules\mob\living\examine.dm" #include "modular_zubbers\code\modules\mob\living\living.dm" #include "modular_zubbers\code\modules\mob\living\basic\guardian\guardian_types\holoparasite_timestop.dm" @@ -9022,6 +9096,7 @@ #include "modular_zubbers\code\modules\mob\living\basic\moonstation\cazador.dm" #include "modular_zubbers\code\modules\mob\living\basic\moonstation\scorpion.dm" #include "modular_zubbers\code\modules\mob\living\basic\pets\dog\_dog.dm" +#include "modular_zubbers\code\modules\mob\living\basic\space_fauna\space_dragon\space_dragon.dm" #include "modular_zubbers\code\modules\mob\living\basic\trooper\nanotrasen.dm" #include "modular_zubbers\code\modules\mob\living\basic\vermin\mouse.dm" #include "modular_zubbers\code\modules\mob\living\carbon\alien\adult\adult.dm" @@ -9030,6 +9105,7 @@ #include "modular_zubbers\code\modules\mob\living\carbon\human\species\akula.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species\tajaran.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species\xeno.dm" +#include "modular_zubbers\code\modules\mob\living\carbon\human\species\zombies.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\abductor.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\akula.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\android.dm" @@ -9070,10 +9146,12 @@ #include "modular_zubbers\code\modules\mob\living\simple_animal\guardian\guardian.dm" #include "modular_zubbers\code\modules\mob\living\simple_animal\hostile\megafauna\drake.dm" #include "modular_zubbers\code\modules\mob\living\simple_animal\hostile\megafauna\horror_ling.dm" +#include "modular_zubbers\code\modules\mob_spawn\ghost_roles\mining_roles.dm" #include "modular_zubbers\code\modules\mod\mod_ai.dm" #include "modular_zubbers\code\modules\mod\mod_theme.dm" #include "modular_zubbers\code\modules\mod\mod_types.dm" #include "modular_zubbers\code\modules\mod\modules.dm" +#include "modular_zubbers\code\modules\modular_computers\programs\siliconmanagement.dm" #include "modular_zubbers\code\modules\modular_items\code\cake_light.dm" #include "modular_zubbers\code\modules\modular_items\code\necklace.dm" #include "modular_zubbers\code\modules\modular_items\code\recipes_misc.dm" @@ -9107,6 +9185,7 @@ #include "modular_zubbers\code\modules\protected_roles\code\antag_restricted_jobs.dm" #include "modular_zubbers\code\modules\public_logging\public_logging.dm" #include "modular_zubbers\code\modules\quirks\code\_quirk.dm" +#include "modular_zubbers\code\modules\quirks\code\negative_quirks\numb_override.dm" #include "modular_zubbers\code\modules\quirks\code\negative_quirks\sensitive_snout.dm" #include "modular_zubbers\code\modules\quirks\code\negative_quirks\sol_weakness.dm" #include "modular_zubbers\code\modules\quirks\code\negative_quirks\well_trained.dm" @@ -9147,6 +9226,13 @@ #include "modular_zubbers\code\modules\security_levels\security_level_datums.dm" #include "modular_zubbers\code\modules\shelves\shelf.dm" #include "modular_zubbers\code\modules\shuttle\emergency.dm" +#include "modular_zubbers\code\modules\silicons\silicon.dm" +#include "modular_zubbers\code\modules\silicons\borgs\code\robot.dm" +#include "modular_zubbers\code\modules\silicons\borgs\code\robot_defense.dm" +#include "modular_zubbers\code\modules\silicons\borgs\code\robot_defines.dm" +#include "modular_zubbers\code\modules\silicons\borgs\code\robot_items.dm" +#include "modular_zubbers\code\modules\silicons\borgs\code\robot_model.dm" +#include "modular_zubbers\code\modules\silicons\borgs\code\robot_upgrade.dm" #include "modular_zubbers\code\modules\skub\skub.dm" #include "modular_zubbers\code\modules\space_background\parallax.dm" #include "modular_zubbers\code\modules\space_background\turf_space.dm" @@ -9163,30 +9249,32 @@ #include "modular_zubbers\code\modules\storyteller\scheduled_event.dm" #include "modular_zubbers\code\modules\storyteller\storyteller_vote.dm" #include "modular_zubbers\code\modules\storyteller\_events\_event.dm" -#include "modular_zubbers\code\modules\storyteller\_events\voidwalker.dm" +#include "modular_zubbers\code\modules\storyteller\_events\scrubber_overflow.dm" #include "modular_zubbers\code\modules\storyteller\event_defines\disabled_event_overrides.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\crewset\_antagonist_event.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\crewset\bloodsucker.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\crewset\changeling.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\crewset\heretic.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\crewset\malf.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\crewset\nuke_ops.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\crewset\spies.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\crewset\traitor.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\ghostset\ghostset_overrides.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\ghostset\lone_infiltrator.dm" +#include "modular_zubbers\code\modules\storyteller\event_defines\ghostset\voidwalker.dm" #include "modular_zubbers\code\modules\storyteller\event_defines\major\major_overrides.dm" #include "modular_zubbers\code\modules\storyteller\event_defines\moderate\moderate_overrides.dm" #include "modular_zubbers\code\modules\storyteller\event_defines\mundane\mundane_overrides.dm" #include "modular_zubbers\code\modules\storyteller\event_defines\mundane\scrubber_overrides.dm" -#include "modular_zubbers\code\modules\storyteller\event_defines\roleset\_antagonist_event.dm" -#include "modular_zubbers\code\modules\storyteller\event_defines\roleset\roleset_ghost_overrides.dm" -#include "modular_zubbers\code\modules\storyteller\event_defines\roleset\crew_antagonists\bloodsucker.dm" -#include "modular_zubbers\code\modules\storyteller\event_defines\roleset\crew_antagonists\changeling.dm" -#include "modular_zubbers\code\modules\storyteller\event_defines\roleset\crew_antagonists\heretic.dm" -#include "modular_zubbers\code\modules\storyteller\event_defines\roleset\crew_antagonists\malf.dm" -#include "modular_zubbers\code\modules\storyteller\event_defines\roleset\crew_antagonists\nuke_ops.dm" -#include "modular_zubbers\code\modules\storyteller\event_defines\roleset\crew_antagonists\spies.dm" -#include "modular_zubbers\code\modules\storyteller\event_defines\roleset\crew_antagonists\traitor.dm" -#include "modular_zubbers\code\modules\storyteller\storytellers\_storyteller.dm" -#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_combat.dm" +#include "modular_zubbers\code\modules\storyteller\storytellers\data\_track.dm" +#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\_storyteller.dm" +#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_bomb.dm" +#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_chill.dm" +#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_clown.dm" #include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_default.dm" -#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_destructive.dm" #include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_extended.dm" #include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_fragile.dm" -#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_peaceful.dm" -#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_plenty.dm" -#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_predictable.dm" +#include "modular_zubbers\code\modules\storyteller\storytellers\tellers\storyteller_gamer.dm" #include "modular_zubbers\code\modules\surgery\tools.dm" #include "modular_zubbers\code\modules\surgery\bodyparts\dismemberment.dm" #include "modular_zubbers\code\modules\surgery\bodyparts\species_parts\misc_bodyparts.dm" @@ -9194,13 +9282,10 @@ #include "modular_zubbers\code\modules\surgery\organs\external\wings.dm" #include "modular_zubbers\code\modules\surgery\organs\internal\eyes\_eyes.dm" #include "modular_zubbers\code\modules\surgery\organs\internal\lungs\_lungs.dm" +#include "modular_zubbers\code\modules\syndicate_offstation\code\misc-fluff\research.dm" +#include "modular_zubbers\code\modules\tarkon\code\misc-fluff\research.dm" #include "modular_zubbers\code\modules\taur_mechanics\serpentine_taur.dm" #include "modular_zubbers\code\modules\title_screen\code\title_screen_subsystem.dm" -#include "modular_zubbers\code\modules\traitor\goal_overrides.dm" -#include "modular_zubbers\code\modules\uplink\uplink_items\bundle.dm" -#include "modular_zubbers\code\modules\uplink\uplink_items\dangerous.dm" -#include "modular_zubbers\code\modules\uplink\uplink_items\device_tools.dm" -#include "modular_zubbers\code\modules\uplink\uplink_items\job.dm" #include "modular_zubbers\code\modules\vehicles\mech_fabricator.dm" #include "modular_zubbers\code\modules\vending\armadyne.dm" #include "modular_zubbers\code\modules\vending\clothmate.dm" @@ -9230,6 +9315,7 @@ #include "modular_zubbers\code\modules\zantag_tickets\logging.dm" #include "modular_zubbers\code\modules\zantag_tickets\preferences.dm" #include "modular_zubbers\code\modules\~donator\choicebeacon.dm" +#include "modular_zubbers\code\modules\~donator\mothdonator.dm" #include "modular_zubbers\maps\biodome\area.dm" #include "modular_zubbers\maps\biodome\beach.dm" #include "modular_zubbers\maps\biodome\decoration.dm" @@ -9263,6 +9349,7 @@ #include "modular_zubbers\maps\offstation\interdyne\code.dm" #include "modular_zubbers\master_files\code\controllers\subsystem\id_access.dm" #include "modular_zubbers\master_files\code\controllers\subsystem\tts.dm" +#include "modular_zubbers\master_files\code\datums\announcers\default_announcer.dm" #include "modular_zubbers\master_files\code\datums\diseases\chronic_ilness.dm" #include "modular_zubbers\master_files\code\datums\traits\slow.dm" #include "modular_zubbers\master_files\code\modules\client\preferences\hypnopref.dm" @@ -9271,6 +9358,9 @@ #include "modular_zubbers\master_files\code\modules\entombed_quirk\code\entombed.dm" #include "modular_zubbers\master_files\code\modules\entombed_quirk\code\entombed_mod.dm" #include "modular_zubbers\master_files\code\modules\events\carp_migration.dm" +#include "modular_zubbers\master_files\code\modules\events\gravity_generator_blackout.dm" +#include "modular_zubbers\master_files\code\modules\holiday\holiday.dm" +#include "modular_zubbers\master_files\code\modules\mob\living\carbon\human\examine.dm" #include "modular_zubbers\master_files\code\modules\mob\living\carbon\human\species_types\abductors.dm" #include "modular_zubbers\master_files\code\modules\mob\living\carbon\human\species_types\ethereal.dm" #include "modular_zubbers\master_files\code\modules\mob\living\carbon\human\species_types\plasmamen.dm" @@ -9278,7 +9368,8 @@ #include "modular_zubbers\master_files\code\modules\research\designs\biogenerator_designs.dm" #include "modular_zubbers\master_files\code\modules\research\designs\weapon_designs.dm" #include "modular_zubbers\master_files\skyrat\modules\blueshield\code\blueshield.dm" -#include "modular_zubbers\master_files\skyrat\modules\cortical_borer\code\cortical_borer_antag.dm" +#include "modular_zubbers\master_files\skyrat\modules\company_imports\code\armament_datums\deforest_medical.dm" +#include "modular_zubbers\master_files\skyrat\modules\deforest_medical_items\code\cargo_packs.dm" #include "modular_zubbers\master_files\skyrat\modules\opposing_force\code\opposing_force_subsystem.dm" #include "modular_zubbers\master_files\skyrat\modules\verbs\code\subtle.dm" #include "modular_zzplurt\code\_globalvars\mobs.dm" @@ -9339,6 +9430,7 @@ #include "modular_zzplurt\code\modules\admin\player_panel.dm" #include "modular_zzplurt\code\modules\admin\playtimes.dm" #include "modular_zzplurt\code\modules\admin\transform.dm" +#include "modular_zzplurt\code\modules\alternative_job_titles\code\alt_job_titles.dm" #include "modular_zzplurt\code\modules\asset_cache\assets\inventory.dm" #include "modular_zzplurt\code\modules\atmospherics\machinery\portable\canister.dm" #include "modular_zzplurt\code\modules\barks\bark_list.dm" @@ -9399,3 +9491,4 @@ #include "modular_zzplurt\code\modules\surgery\organs\internal\tongue\_tongue.dm" #include "modular_zzplurt\code\modules\wiremod\core\integrated_circuit.dm" // END_INCLUDE + diff --git a/tgui/.eslintrc-harder.yml b/tgui/.eslintrc-harder.yml deleted file mode 100644 index d466125967931..0000000000000 --- a/tgui/.eslintrc-harder.yml +++ /dev/null @@ -1,43 +0,0 @@ -rules: - ## Enforce a maximum cyclomatic complexity allowed in a program - # complexity: [warn, { max: 25 }] - ## Enforce consistent brace style for blocks - # brace-style: [warn, stroustrup, { allowSingleLine: false }] - ## Enforce the consistent use of either backticks, double, or single quotes - # quotes: [warn, single, { - # avoidEscape: true, - # allowTemplateLiterals: true, - # }] - # react/jsx-closing-bracket-location: [warn, { - # selfClosing: after-props, - # nonEmpty: after-props, - # }] - # react/display-name: warn - - ## Radar - ## ------------------------------------------------------ - # radar/cognitive-complexity: warn - radar/max-switch-cases: warn - radar/no-all-duplicated-branches: warn - radar/no-collapsible-if: warn - radar/no-collection-size-mischeck: warn - radar/no-duplicate-string: warn - radar/no-duplicated-branches: warn - radar/no-element-overwrite: warn - radar/no-extra-arguments: warn - radar/no-identical-conditions: warn - radar/no-identical-expressions: warn - radar/no-identical-functions: warn - radar/no-inverted-boolean-check: warn - radar/no-one-iteration-loop: warn - radar/no-redundant-boolean: warn - radar/no-redundant-jump: warn - radar/no-same-line-conditional: warn - radar/no-small-switch: warn - radar/no-unused-collection: warn - radar/no-use-of-empty-return-value: warn - radar/no-useless-catch: warn - radar/prefer-immediate-return: warn - radar/prefer-object-literal: warn - radar/prefer-single-boolean-return: warn - radar/prefer-while: warn diff --git a/tgui/bin/tgui b/tgui/bin/tgui deleted file mode 100755 index b827c91291624..0000000000000 --- a/tgui/bin/tgui +++ /dev/null @@ -1,207 +0,0 @@ -#!/usr/bin/env bash -## Copyright (c) 2020 Aleksej Komarov -## SPDX-License-Identifier: MIT - -set -e -shopt -s globstar -shopt -s expand_aliases - -## Initial set-up -## -------------------------------------------------------- - -## Returns an absolute path to file -alias tgui-realpath="readlink -f" - -## Fallbacks for GNU readlink -## Detecting GNU coreutils http://stackoverflow.com/a/8748344/319952 -if ! readlink --version >/dev/null 2>&1; then - if hash greadlink 2>/dev/null; then - alias tgui-realpath="greadlink -f" - else - alias tgui-realpath="perl -MCwd -le 'print Cwd::abs_path(shift)'" - fi -fi - -## Find a canonical path to project root -base_dir="$(dirname "$(tgui-realpath "${0}")")/.." -base_dir="$(tgui-realpath "${base_dir}")" - -## Make use of nvm if it exists -if [[ -e "${HOME}/.nvm/nvm.sh" ]]; then - source "${HOME}/.nvm/nvm.sh" -fi - -## Fall back to running Yarn from the repo -if ! hash yarn 2>/dev/null; then - yarn_releases=("${base_dir}"/.yarn/releases/yarn-*.cjs) - yarn_release="${yarn_releases[0]}" - yarn() { - node "${yarn_release}" "${@}" - } -fi - - -## Functions -## -------------------------------------------------------- - -## Installs node modules -task-install() { - cd "${base_dir}" - yarn install -} - -## Runs webpack -task-webpack() { - cd "${base_dir}" - yarn run webpack-cli "${@}" -} - -## Runs a development server -task-dev-server() { - cd "${base_dir}" - yarn node --experimental-modules packages/tgui-dev-server/index.js "${@}" -} - -## Run a linter through all packages -task-lint() { - cd "${base_dir}" - yarn run tsc - echo "tgui: type check passed" - yarn run eslint packages --ext .js,.cjs,.ts,.tsx "${@}" - echo "tgui: eslint check passed" -} - -task-test() { - cd "${base_dir}" - yarn run jest -} - -## Mr. Proper -task-clean() { - cd "${base_dir}" - ## Build artifacts - rm -rf public/.tmp - rm -f public/*.map - rm -f public/*.chunk.* - rm -f public/*.bundle.* - rm -f public/*.hot-update.* - ## Yarn artifacts - rm -rf .yarn/cache - rm -rf .yarn/unplugged - rm -rf .yarn/webpack - rm -f .yarn/build-state.yml - rm -f .yarn/install-state.gz - rm -f .yarn/install-target - rm -f .pnp.* - ## NPM artifacts - rm -rf **/node_modules - rm -f **/package-lock.json -} - -## Installs merge drivers and git hooks -task-install-git-hooks() { - cd "${base_dir}" - local git_root - local git_base_dir - git_root="$(git rev-parse --show-toplevel)" - git_base_dir="${base_dir/${git_root}/.}" - git config --replace-all merge.tgui-merge-bundle.driver \ - "${git_base_dir}/bin/tgui --merge=bundle %O %A %B %L" - echo "tgui: Merge drivers have been successfully installed!" -} - -## Bundle merge driver -task-merge-bundle() { - local file_ancestor="${1}" - local file_current="${2}" - local file_other="${3}" - local conflict_marker_size="${4}" - echo "tgui: Discarding a local tgui build" - ## Do nothing (file_current will be merged and is what we want to keep). - exit 0 -} - - -## Main -## -------------------------------------------------------- - -if [[ ${1} == "--merge"* ]]; then - if [[ ${1} == "--merge=bundle" ]]; then - shift 1 - task-merge-bundle "${@}" - fi - echo "Unknown merge strategy: ${1}" - exit 1 -fi - -if [[ ${1} == "--install-git-hooks" ]]; then - shift 1 - task-install-git-hooks - exit 0 -fi - -if [[ ${1} == "--clean" ]]; then - task-clean - exit 0 -fi - -if [[ ${1} == "--dev" ]]; then - shift - task-install - task-dev-server "${@}" - exit 0 -fi - -if [[ ${1} == '--lint' ]]; then - shift 1 - task-install - task-lint "${@}" - exit 0 -fi - -if [[ ${1} == '--lint-harder' ]]; then - shift 1 - task-install - task-lint -c .eslintrc-harder.yml "${@}" - exit 0 -fi - -if [[ ${1} == '--fix' ]]; then - shift 1 - task-install - task-lint --fix "${@}" - exit 0 -fi - -if [[ ${1} == '--test' ]]; then - shift 1 - task-install - task-test "${@}" - exit 0 -fi - -## Analyze the bundle -if [[ ${1} == '--analyze' ]]; then - task-install - task-webpack --mode=production --analyze - exit 0 -fi - -## Make a production webpack build -if [[ ${1} == '--build' ]]; then - task-install - task-webpack --mode=production - exit 0 -fi - -## Make a production webpack build + Run eslint -if [[ -z ${1} ]]; then - task-install - task-lint --fix - task-webpack --mode=production - exit 0 -fi - -## Run webpack with custom flags -task-install -task-webpack "${@}" diff --git a/tgui/bin/tgui-dev-server.bat b/tgui/bin/tgui-dev-server.bat deleted file mode 100644 index 21b2ea4e962b7..0000000000000 --- a/tgui/bin/tgui-dev-server.bat +++ /dev/null @@ -1,9 +0,0 @@ -@echo off -rem Copyright (c) 2020 Aleksej Komarov -rem SPDX-License-Identifier: MIT -call powershell.exe -NoLogo -ExecutionPolicy Bypass -File "%~dp0\tgui_.ps1" --dev %* -rem Pause if launched in a separate shell unless initiated from powershell -echo %PSModulePath% | findstr %USERPROFILE% >NUL -if %errorlevel% equ 0 exit 0 -echo %cmdcmdline% | find /i "/c" -if %errorlevel% equ 0 pause diff --git a/tgui/docs/tutorial-and-examples.md b/tgui/docs/tutorial-and-examples.md index 2e02f0e491acd..1b5ecab8968f9 100644 --- a/tgui/docs/tutorial-and-examples.md +++ b/tgui/docs/tutorial-and-examples.md @@ -75,7 +75,7 @@ Finally, the `ui_act` proc is called by the interface whenever the user used an input. The input's `action` and `params` are passed to the proc. ```dm -/obj/machinery/my_machine/ui_act(action, params) +/obj/machinery/my_machine/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -311,7 +311,7 @@ upon code review): data["var"] = var return data -/obj/copypasta/ui_act(action, params) +/obj/copypasta/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) return switch(action) diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index aaa72cdcd8e0b..5f1b5be3e5440 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -4,10 +4,10 @@ "version": "5.0.1", "type": "module", "dependencies": { - "axios": "^1.7.4", + "axios": "^1.6.8", "glob": "^7.2.3", "source-map": "^0.7.4", "stacktrace-parser": "^0.1.10", - "ws": "^8.17.1" + "ws": "^8.16.0" } } diff --git a/tgui/packages/tgui-panel/chat/constants.ts b/tgui/packages/tgui-panel/chat/constants.ts index c77a7fc70bbbf..f872d06055baa 100644 --- a/tgui/packages/tgui-panel/chat/constants.ts +++ b/tgui/packages/tgui-panel/chat/constants.ts @@ -61,7 +61,7 @@ export const MESSAGE_TYPES = [ 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', + '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .enteradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .newscaster, .resonate, .abductor, .alien, .changeling', }, { type: MESSAGE_TYPE_INFO, diff --git a/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx b/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx index 3599f24e70703..f1f10ba74ae21 100644 --- a/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx +++ b/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx @@ -20,11 +20,10 @@ import { FONTS } from './constants'; import { selectSettings } from './selectors'; export function SettingsGeneral(props) { - const { theme, fontFamily, fontSize, lineHeight, statLinked, statFontSize } = + const { theme, fontFamily, fontSize, lineHeight } = useSelector(selectSettings); const dispatch = useDispatch(); const [freeFont, setFreeFont] = useState(false); - const [statFont, setStatFont] = useState(false); return (
        @@ -119,46 +118,14 @@ export function SettingsGeneral(props) { stepPixelSize={20} minValue={8} maxValue={32} - value={statFont ? statFontSize : fontSize} + value={fontSize} unit="px" format={(value) => toFixed(value)} onChange={(e, value) => - dispatch( - updateSettings({ - [statFont ? 'statFontSize' : 'fontSize']: value, - }), - ) + dispatch(updateSettings({ fontSize: value })) } /> - - - - {!!statFont && ( - - + ))} + + + + {statLinked ? ( + + ) : ( + toFixed(value)} + onChange={(e, value) => + dispatch(updateSettings({ statFontSize: value })) + } + /> + )} + + + + + + + + + +
        + ); +} diff --git a/tgui/packages/tgui-panel/settings/constants.ts b/tgui/packages/tgui-panel/settings/constants.ts index 86ac41a23ebc9..d98be914e9533 100644 --- a/tgui/packages/tgui-panel/settings/constants.ts +++ b/tgui/packages/tgui-panel/settings/constants.ts @@ -18,6 +18,10 @@ export const SETTINGS_TABS = [ id: 'chatPage', name: 'Chat Tabs', }, + { + id: 'statPanel', + name: 'Stat Panel', + }, ]; export const FONTS_DISABLED = 'Default'; diff --git a/tgui/packages/tgui-panel/settings/middleware.ts b/tgui/packages/tgui-panel/settings/middleware.ts index b867d36de0d86..078b9a7874fa2 100644 --- a/tgui/packages/tgui-panel/settings/middleware.ts +++ b/tgui/packages/tgui-panel/settings/middleware.ts @@ -17,7 +17,8 @@ import { import { FONTS_DISABLED } from './constants'; import { selectSettings } from './selectors'; -let setStatFontTimer: NodeJS.Timeout; +let statFontTimer: NodeJS.Timeout; +let statTabsTimer: NodeJS.Timeout; let overrideRule: HTMLStyleElement; let overrideFontFamily: string | undefined; let overrideFontSize: string; @@ -53,11 +54,11 @@ function setGlobalFontSize( overrideFontSize = `${fontSize}px`; // Used solution from theme.ts - clearInterval(setStatFontTimer); + clearInterval(statFontTimer); Byond.command( `.output statbrowser:set_font_size ${statLinked ? fontSize : statFontSize}px`, ); - setStatFontTimer = setTimeout(() => { + statFontTimer = setTimeout(() => { Byond.command( `.output statbrowser:set_font_size ${statLinked ? fontSize : statFontSize}px`, ); @@ -68,6 +69,14 @@ function setGlobalFontFamily(fontFamily: string) { overrideFontFamily = fontFamily === FONTS_DISABLED ? undefined : fontFamily; } +function setStatTabsStyle(style: string) { + clearInterval(statTabsTimer); + Byond.command(`.output statbrowser:set_tabs_style ${style}`); + statTabsTimer = setTimeout(() => { + Byond.command(`.output statbrowser:set_tabs_style ${style}`); + }, 1500); +} + export function settingsMiddleware(store) { let initialized = false; @@ -101,6 +110,9 @@ export function settingsMiddleware(store) { const settings = selectSettings(store.getState()); + // Update stat panel settings + setStatTabsStyle(settings.statTabsStyle); + // Update global UI font size setGlobalFontSize( settings.fontSize, diff --git a/tgui/packages/tgui-panel/settings/reducer.ts b/tgui/packages/tgui-panel/settings/reducer.ts index 33df1a745f660..5f6033a14a81f 100644 --- a/tgui/packages/tgui-panel/settings/reducer.ts +++ b/tgui/packages/tgui-panel/settings/reducer.ts @@ -40,6 +40,7 @@ const initialState = { }, statLinked: true, statFontSize: 12, + statTabsStyle: 'default', } as const; export function settingsReducer( diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index d926f3cc4be10..4c08eb51df606 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -374,6 +374,10 @@ em { color: #d65d95; } +.enteradio { + color: #00ff99; +} + .redteamradio { color: #ff4444 !important; } @@ -413,6 +417,15 @@ em { color: #c51e1e; } +.tinydanger { + color: #c51e1e; + font-size: 85%; +} + +.smalldanger { + color: #c51e1e; + font-size: 90%; +} .warning { color: #c51e1e; font-style: italic; @@ -757,6 +770,10 @@ em { font-size: 60%; } +.slightly_larger { + font-size: 115%; +} + .big { font-size: 185%; } @@ -825,6 +842,7 @@ em { color: #7adbf3; } } + // SKYRAT EDIT ADDITION BEGIN .velvet { @@ -1045,7 +1063,7 @@ em { } .ml-3 { - margin-left: 3em; + margin-left: 2.5em; } .examine_block { @@ -1060,6 +1078,47 @@ em { border-bottom: 1px dashed #fff; } +// Provides a horizontal bar with text in the middle +// I got this off stackoverflow +.separator { + display: flex; + align-items: center; + text-align: center; +} + +.separator::before, +.separator::after { + content: ''; + flex: 1; + border-bottom: 1px solid #a4bad6; +} + +.separator:not(:empty)::before { + margin-right: 0.25em; +} + +.separator:not(:empty)::after { + margin-left: 0.25em; +} + +// Used to display images besides text +.img_by_text_container { + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.img_by_text_container img { + width: 3em; // a css guru can probably dehardcode this later + height: auto; + margin-right: 12px; + margin-top: 6px; +} + +.img_by_text_container .img_text { + flex-grow: 1; +} + $alert-stripe-colors: ( 'default': #00283a, 'green': #003d00, @@ -1327,4 +1386,8 @@ $border-width-px: $border-width * 1px; font-weight: bold; font-style: italic; } + +.subtlepda { + color: #eb6bff; +} // SKYRAT EDIT ADDITION END diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index 1f9388ff13f6f..9b3137a981062 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -391,6 +391,10 @@ em { color: #ff00ff; } +.enteradio { + color: #00d680; +} + .redteamradio { color: #ff0000 !important; } @@ -784,6 +788,10 @@ h2.alert { font-size: 60%; } +.slightly_larger { + font-size: 115%; +} + .big { font-size: 185%; } @@ -989,6 +997,47 @@ h2.alert { border-bottom: 1px dashed #000; } +// Provides a horizontal bar with text in the middle +// I got this off stackoverflow +.separator { + display: flex; + align-items: center; + text-align: center; +} + +.separator::before, +.separator::after { + content: ''; + flex: 1; + border-bottom: 1px solid #111a27; +} + +.separator:not(:empty)::before { + margin-right: 0.25em; +} + +.separator:not(:empty)::after { + margin-left: 0.25em; +} + +// Used to display images besides text +.img_by_text_container { + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.img_by_text_container img { + width: 2.5em; // a css guru can probably dehardcode this later + height: auto; + margin-right: 12px; + margin-top: 6px; +} + +.img_by_text_container .img_text { + flex-grow: 1; +} + $alert-stripe-colors: ( 'default': #b3bfff, 'green': #adffad, @@ -1165,10 +1214,10 @@ $border-width-px: $border-width * 1px; ); } } + /* SKYRAT EDIT ADDITION START - LIGHT MODE CLASSES */ .mentor { - color: #8a2be2; } .looc { color: #6699cc; @@ -1281,4 +1330,8 @@ $border-width-px: $border-width * 1px; color: #9b6000; } } + +.subtlepda { + color: #9e008c; +} // SKYRAT EDIT ADDITION END diff --git a/tgui/packages/tgui-say/ChannelIterator.test.ts b/tgui/packages/tgui-say/ChannelIterator.test.ts index f1e86f0449f8a..7787368f68574 100644 --- a/tgui/packages/tgui-say/ChannelIterator.test.ts +++ b/tgui/packages/tgui-say/ChannelIterator.test.ts @@ -11,10 +11,12 @@ describe('ChannelIterator', () => { expect(channelIterator.current()).toBe('Say'); expect(channelIterator.next()).toBe('Radio'); expect(channelIterator.next()).toBe('Me'); + // SKYRAT EDIT ADDITION START expect(channelIterator.next()).toBe('Whis'); expect(channelIterator.next()).toBe('LOOC'); // SKYRAT EDIT ADDITION END + expect(channelIterator.next()).toBe('OOC'); expect(channelIterator.next()).toBe('Say'); // Admin is blacklisted so it should be skipped }); diff --git a/tgui/packages/tgui-say/constants.ts b/tgui/packages/tgui-say/constants.ts index 0c3d7943c2676..fba5562ccb201 100644 --- a/tgui/packages/tgui-say/constants.ts +++ b/tgui/packages/tgui-say/constants.ts @@ -25,6 +25,7 @@ export const RADIO_PREFIXES = { ':m ': 'Med', ':n ': 'Sci', ':o ': 'AI', + ':p ': 'Ent', ':s ': 'Sec', ':t ': 'Synd', ':u ': 'Supp', diff --git a/tgui/packages/tgui-say/styles/colors.scss b/tgui/packages/tgui-say/styles/colors.scss index 2d5341da5d50a..bdab99ab324d0 100644 --- a/tgui/packages/tgui-say/styles/colors.scss +++ b/tgui/packages/tgui-say/styles/colors.scss @@ -20,6 +20,7 @@ $_channel_map: ( 'Me': #5975da, 'Med': #57b8f0, 'OOC': #cca300, + 'Ent': #00ff99, 'Radio': #1ecc43, 'Say': #a4bad6, 'Sci': #c68cfa, diff --git a/tgui/packages/tgui/components/AnimatedNumber.tsx b/tgui/packages/tgui/components/AnimatedNumber.tsx index 572fef2b5ee55..435ed992d3c44 100644 --- a/tgui/packages/tgui/components/AnimatedNumber.tsx +++ b/tgui/packages/tgui/components/AnimatedNumber.tsx @@ -145,7 +145,9 @@ export class AnimatedNumber extends Component { this.stopTicking(); } - if (Math.abs(value - this.currentValue) < EPSILON) { + if ( + Math.abs(value - this.currentValue) < Math.max(EPSILON, EPSILON * value) + ) { // We're about as close as we're going to get--snap to the value and // stop ticking. this.currentValue = value; diff --git a/tgui/packages/tgui/components/Box.tsx b/tgui/packages/tgui/components/Box.tsx index e5808277914af..a39b98ed48f7d 100644 --- a/tgui/packages/tgui/components/Box.tsx +++ b/tgui/packages/tgui/components/Box.tsx @@ -7,6 +7,7 @@ import { BooleanLike, classes } from 'common/react'; import { createElement, + DragEventHandler, KeyboardEventHandler, MouseEventHandler, ReactNode, @@ -32,6 +33,7 @@ export type EventHandlers = Partial<{ onMouseOver: MouseEventHandler; onMouseUp: MouseEventHandler; onScroll: UIEventHandler; + onDrop: DragEventHandler; }>; export type BoxProps = Partial<{ diff --git a/tgui/packages/tgui/components/Button.tsx b/tgui/packages/tgui/components/Button.tsx index ec621de621ef0..82493ce6edf59 100644 --- a/tgui/packages/tgui/components/Button.tsx +++ b/tgui/packages/tgui/components/Button.tsx @@ -367,7 +367,7 @@ Button.Input = ButtonInput; type FileProps = { accept: string; multiple?: boolean; - onSelectFiles: (files: string | string[]) => void; + onSelectFiles: (files: FileList) => void; } & Props; /** Accepts file input */ @@ -376,24 +376,11 @@ function ButtonFile(props: FileProps) { const inputRef = useRef(null); - async function read(files: FileList) { - const promises = Array.from(files).map((file) => { - const reader = new FileReader(); - - return new Promise((resolve) => { - reader.onload = () => resolve(reader.result as string); - reader.readAsText(file); - }); - }); - - return await Promise.all(promises); - } - async function handleChange(event: ChangeEvent) { const files = event.target.files; if (files?.length) { - const readFiles = await read(files); - onSelectFiles(multiple ? readFiles : readFiles[0]); + onSelectFiles(files); + event.target.value = ''; } } diff --git a/tgui/packages/tgui/components/Input.tsx b/tgui/packages/tgui/components/Input.tsx index 9bc48aa809406..0e6ed7e258810 100644 --- a/tgui/packages/tgui/components/Input.tsx +++ b/tgui/packages/tgui/components/Input.tsx @@ -59,6 +59,8 @@ type OptionalProps = Partial<{ placeholder: string; /** Clears the input value on enter */ selfClear: boolean; + /** Auto-updates the input value on props change */ + updateOnPropsChange: boolean; /** The state variable of the input. */ value: string | number; }>; @@ -96,6 +98,7 @@ export function Input(props: Props) { placeholder, selfClear, value, + updateOnPropsChange, ...rest } = props; @@ -155,6 +158,19 @@ export function Input(props: Props) { }, 1); }, []); + if (updateOnPropsChange) { + /** Updates the initial value on props change */ + useEffect(() => { + const input = inputRef.current; + if (!input) return; + + const newValue = toInputValue(value); + if (input.value === newValue) return; + + input.value = newValue; + }, [value]); + } + return ( { You haven't revealed your true form yet! - You must be succumb to the infection. Find somewhere safe and pop! + You must succumb to the infection. Find somewhere safe and pop! ); @@ -111,15 +111,22 @@ const Basics = (props) => { You will be able to manually place your blob core by pressing the - Place Blob Core button in the bottom right corner of the screen. + Place Blob Core button in the bottom right corner of the screen.{' '} +
        +
        + If you are the blob infection, you can place the core where you are + standing by pressing the pop button on the top left corner of the + screen.
        In addition to the buttons on your HUD, there are a few click shortcuts to speed up expansion and defense. - Click = Expand Blob | Middle Mouse Click = Rally Spores | Ctrl Click = - Create Shield Blob | Alt Click = Remove Blob + Click = Expand Blob
        + Middle Mouse Click = Rally Spores
        + Ctrl Click = Create Shield Blob
        + Alt Click = Remove Blob
        Attempting to talk will send a message to all other overminds, @@ -135,9 +142,9 @@ const Minions = (props) => { - Defenders that can be produced from factories for a cost, and are hard - to kill, powerful, and moderately smart. The factory used to create - one will become fragile and briefly unable to produce spores. + This unit can be produced from factories for a cost. They are hard to + kill, powerful, and moderately smart. The factory used to create one + will become fragile and briefly unable to produce spores. Produced automatically from factories, these are weak, but can be @@ -154,18 +161,21 @@ const Structures = (props) => { Normal Blobs will expand your reach and can be upgraded into special - blobs that perform certain functions. + blobs that perform certain functions. Bear in mind that expanding into + space has an 80% chance of failing!
        You can upgrade normal blobs into the following types of blob: - - Strong and expensive blobs which take more damage. In additon, they - are fireproof and can block air, use these to protect yourself from - station fires. Upgrading them again will result in a reflective blob, - capable of reflecting most projectiles at the cost of the strong - blob's extra health. + + Strong blobs are expensive but take more damage. In additon, they are + fireproof and can block air, use these to protect yourself from + station fires. + + + Upgrading strong blobs creates reflective blobs, capable of reflecting + most projectiles at the cost of the strong blob's extra health. Blobs which produce more resources for you, build as many of these as diff --git a/tgui/packages/tgui/interfaces/AntagInfoBloodsucker.tsx b/tgui/packages/tgui/interfaces/AntagInfoBloodsucker.tsx index 098444f608cd8..258efa42a140b 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoBloodsucker.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoBloodsucker.tsx @@ -21,7 +21,7 @@ export type ClanInfo = { export type PowerInfo = { power_name: string; - power_explanation: string; + power_explanation: string[]; power_icon: string; }; @@ -29,7 +29,7 @@ export type BloodsuckerProps = { powers: PowerInfo[]; objectives: Objective[]; }; -export type VassalProps = BloodsuckerProps & { +export type GhoulProps = BloodsuckerProps & { title: string; description: string; }; @@ -55,7 +55,7 @@ const ObjectivePrintout = (props: any) => { export const AntagInfoBloodsucker = (props: any) => { const [tab, setTab] = useState(1); return ( - + {
        - + You regenerate your health slowly, you're weak to fire, and @@ -118,6 +118,11 @@ const BloodsuckerIntro = () => { Avoid using your Feed ability while near others, or else you will risk breaking the Masquerade! + + Loosing your heart will render your powers useless, but going + into a coffin with a heart inside will allow you to regenerate + it. +
        @@ -126,7 +131,7 @@ const BloodsuckerIntro = () => {
        - Rest in a Coffin to claim it, and that area, as your lair. + Rest in a Coffin to claim it, and that area, as your haven.
        Examine your new structures to see how they function!
        @@ -134,15 +139,19 @@ const BloodsuckerIntro = () => { Masquerade ability will hide your identity to prevent this.
        You will learn how to make persuasion racks once you have enough - levels to support a vassal, which you will learn during torpor - during daytime. Examine the vassal rack to see how many vassals - you can have! + levels to support a ghoul, which you will learn during torpor + during daytime. Examine the ghoul rack to see how many ghouls you + can have!
        You cannot level up until you select a clan. To select a clan, click the clan tab on the top right of this window.
        Ensure to read the descriptions of each ability in the Clan & Powers tab, you may learn something new! +
        + After a certain level, Sol will no longer grant you levels, + instead, you will need to feed on the blood of others to gain + levels.
        @@ -202,7 +211,10 @@ const BloodsuckerClan = (props: any) => { You are part of the {ClanInfo.clan_name} - + {ClanInfo.clan_description} @@ -210,8 +222,8 @@ const BloodsuckerClan = (props: any) => {
        -
        +
        ); }; diff --git a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx index 389fecb5770f0..34901d10c2640 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx @@ -101,7 +101,6 @@ const IntroductionSection = (props) => { - {!ascended && ( { ); }; -// SKYRAT EDIT: change height from 580 to 650 export const AntagInfoTraitor = (props) => { const { data } = useBackend(); const { theme, given_uplink } = data; return ( - + diff --git a/tgui/packages/tgui/interfaces/AntagInfoVassal.tsx b/tgui/packages/tgui/interfaces/AntagInfoVassal.tsx index 36a04e01ba119..b403dc98fca7f 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoVassal.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoVassal.tsx @@ -1,12 +1,12 @@ import { useBackend } from '../backend'; import { Section, Stack } from '../components'; import { Window } from '../layouts'; -import { VassalProps } from './AntagInfoBloodsucker'; +import { GhoulProps } from './AntagInfoBloodsucker'; import { ObjectivePrintout } from './common/Objectives'; import { PowerDetails } from './PowerInfo'; -export const AntagInfoVassal = (props: any, context: any) => { - const { data } = useBackend(); +export const AntagInfoGhoul = (props: any, context: any) => { + const { data } = useBackend(); const { powers } = data; return ( { theme="spookyconsole" > - + ); }; -const VassalInfo = () => { - const { data } = useBackend(); +const GhoulInfo = () => { + const { data } = useBackend(); const { powers, objectives, title, description } = data; return ( diff --git a/tgui/packages/tgui/interfaces/Aquarium.tsx b/tgui/packages/tgui/interfaces/Aquarium.tsx index 6f29920fc0bf3..f527bee09ea0b 100644 --- a/tgui/packages/tgui/interfaces/Aquarium.tsx +++ b/tgui/packages/tgui/interfaces/Aquarium.tsx @@ -1,10 +1,15 @@ +import { capitalizeFirst } from 'common/string'; import { + Box, Button, + DmIcon, Flex, + Icon, Knob, - LabeledControls, + LabeledList, NumberInput, Section, + Stack, } from 'tgui-core/components'; import { BooleanLike } from 'tgui-core/react'; @@ -13,98 +18,338 @@ import { Window } from '../layouts'; type Data = { temperature: number; - fluid_type: string; + fluidType: string; minTemperature: number; maxTemperature: number; fluidTypes: string[]; - contents: { ref: string; name: string }[]; - allow_breeding: BooleanLike; - feeding_interval: number; + fishData: FishData[]; + propData: PropData[]; + allowBreeding: BooleanLike; + feedingInterval: number; + heartIcon: string; + heartIconState: string; + heartEmptyIconState: string; +}; + +type FishData = { + fish_ref: string; + fish_name: string; + fish_happiness: number; + fish_icon: string; + fish_icon_state: string; + fish_health: number; +}; + +type PropData = { + prop_ref: string; + prop_name: string; + prop_icon: string; + prop_icon_state: string; }; export const Aquarium = (props) => { const { act, data } = useBackend(); - const { - temperature, - fluid_type, - minTemperature, - maxTemperature, - fluidTypes, - contents, - allow_breeding, - feeding_interval, - } = data; + const { fishData } = data; return ( - + -
        - - - - act('temperature', { - temperature: value, - }) - } - /> - - - - {fluidTypes.map((f) => ( - -
        -
        - {contents.map((movable) => ( + + + + + + + + + + { + act('rename_fish', { + fish_reference: fish.fish_ref, + chosen_name: value, + }); + }} + style={{ + padding: '3px', + borderRadius: '1em', + background: '#151326', + }} + > + + + + + Rename + + + + + + + ); +}; + +const PropTypes = (props) => { + const { act, data } = useBackend(); + const { propData } = data; + + return ( +
        + + {propData.map((prop) => ( + + + + ))} + +
        + ); +}; + +const CalculateHappiness = (props) => { + const { data } = useBackend(); + const { heartIcon } = data; + const { happiness } = props; + + return ( + + {Array.from({ length: 5 }, (_, index) => ( + = index ? 'full_heart' : 'empty_heart'} + height="48px" + width="48px" + /> + ))} + + ); +}; + +const Settings = (props) => { + const { act, data } = useBackend(); + const { + temperature, + minTemperature, + maxTemperature, + fluidTypes, + fluidType, + allowBreeding, + feedingInterval, + } = data; + + return ( + + +
        + + act('temperature', { + temperature: value, + }) + } + />
        - - +
        + +
        + + {fluidTypes.map((f) => ( + + + + ))} + +
        +
        + +
        + + + +
        +
        +
        ); }; +function dissectName(input: string): string { + return input.split(' ')[0].slice(0, 18); +} diff --git a/tgui/packages/tgui/interfaces/AutomatedAnnouncement.tsx b/tgui/packages/tgui/interfaces/AutomatedAnnouncement.tsx index f08ee83fd4ffd..f88b2da67f4f5 100644 --- a/tgui/packages/tgui/interfaces/AutomatedAnnouncement.tsx +++ b/tgui/packages/tgui/interfaces/AutomatedAnnouncement.tsx @@ -9,16 +9,29 @@ const TOOLTIP_TEXT = ` %RANK with their job. `; +const TOOLTIP_NODE = ` + %NODE will be replaced with the researched node. +`; + type Data = { arrivalToggle: BooleanLike; arrival: string; newheadToggle: BooleanLike; newhead: string; + node_toggle: BooleanLike; + node_message: string; }; export const AutomatedAnnouncement = (props) => { const { act, data } = useBackend(); - const { arrivalToggle, arrival, newheadToggle, newhead } = data; + const { + arrivalToggle, + arrival, + newheadToggle, + newhead, + node_toggle, + node_message, + } = data; return ( @@ -90,6 +103,40 @@ export const AutomatedAnnouncement = (props) => {
        +
        act('node_toggle')} + /> + } + > + + + } + > + + act('node_message', { + newText: value, + }) + } + /> + + +
        ); diff --git a/tgui/packages/tgui/interfaces/CargoExpress.tsx b/tgui/packages/tgui/interfaces/CargoExpress.tsx index 9115695645516..4d911e0f25f75 100644 --- a/tgui/packages/tgui/interfaces/CargoExpress.tsx +++ b/tgui/packages/tgui/interfaces/CargoExpress.tsx @@ -15,7 +15,7 @@ import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; type Data = { locked: BooleanLike; points: number; - usingBeacon: BooleanLike; + using_beacon: BooleanLike; beaconzone: string; beaconName: string; canBuyBeacon: BooleanLike; @@ -44,7 +44,7 @@ function CargoExpressContent(props) { hasBeacon, message, points, - usingBeacon, + using_beacon, beaconzone, beaconName, canBuyBeacon, @@ -64,11 +64,11 @@ function CargoExpressContent(props) { > -
        { setSelections(newSelections); }; + const selectionIndexes = selections.map( + (selected: string) => items.indexOf(selected) + 1, + ); return ( @@ -103,7 +106,7 @@ export const CheckboxInput = (props) => {
        - +
        diff --git a/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx b/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx index b0a5b7a7681af..289fe405b44fe 100644 --- a/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx +++ b/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx @@ -6,13 +6,14 @@ import { Beaker, BeakerDisplay } from './common/BeakerDisplay'; type Data = { amount: number; + temp: number; purity: number; beaker: Beaker; }; export const ChemDebugSynthesizer = (props) => { const { act, data } = useBackend(); - const { amount, purity, beaker } = data; + const { amount, temp, purity, beaker } = data; return ( @@ -35,6 +36,19 @@ export const ChemDebugSynthesizer = (props) => { }) } /> + + act('temp', { + amount: value, + }) + } + /> { onClick={() => act('makePriorityAnnouncement')} /> )} + {!!canToggleEmergencyAccess && ( { + const { color, selected, onClick = () => {}, children } = props; + return ( + + {children} + + ); +}; + +export const BoardTabs = (props) => { + const { act, data } = useBackend(); + const { cases, current_case } = data; + return ( + + {cases?.map((item, index) => ( + act('set_case', { case: index + 1 })} + > + {item.name} + {current_case - 1 === index && ( + <> +
        { Hunger:{' '} {
        ); }; + type InfuserEntryProps = { entry: Entry; }; diff --git a/tgui/packages/tgui/interfaces/Jukebox.tsx b/tgui/packages/tgui/interfaces/Jukebox.tsx index f450b08ebc496..fe9eb054aef66 100644 --- a/tgui/packages/tgui/interfaces/Jukebox.tsx +++ b/tgui/packages/tgui/interfaces/Jukebox.tsx @@ -92,7 +92,7 @@ export const Jukebox = () => { value={volume} unit="%" minValue={0} - maxValue={100} + maxValue={50} step={1} stepPixelSize={1} onDrag={(e, value) => diff --git a/tgui/packages/tgui/interfaces/KeycardAuth.jsx b/tgui/packages/tgui/interfaces/KeycardAuth.jsx index 3562a5c596617..88e3915c55705 100644 --- a/tgui/packages/tgui/interfaces/KeycardAuth.jsx +++ b/tgui/packages/tgui/interfaces/KeycardAuth.jsx @@ -39,7 +39,7 @@ export const KeycardAuth = (props) => { content="Red Alert" /> + } + > + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/LuaEditor/ChunkViewModal.tsx b/tgui/packages/tgui/interfaces/LuaEditor/ChunkViewModal.tsx new file mode 100644 index 0000000000000..c078ff22506ad --- /dev/null +++ b/tgui/packages/tgui/interfaces/LuaEditor/ChunkViewModal.tsx @@ -0,0 +1,47 @@ +import hljs from 'highlight.js/lib/core'; +import { Dispatch, SetStateAction } from 'react'; + +import { Box, Button, Modal, Section } from '../../components'; +import { sanitizeText } from '../../sanitize'; +import { LuaEditorModal } from './types'; + +type ChunkViewModalProps = { + setModal: Dispatch>; + viewedChunk: string; + setViewedChunk: Dispatch>; +}; + +export const ChunkViewModal = (props: ChunkViewModalProps) => { + const { setModal, viewedChunk, setViewedChunk } = props; + return ( + +
        { + setModal(undefined); + setViewedChunk(undefined); + }} + > + Close + + } + > + +
        +
        + ); +}; diff --git a/tgui/packages/tgui/interfaces/LuaEditor/ListMapper.tsx b/tgui/packages/tgui/interfaces/LuaEditor/ListMapper.tsx new file mode 100644 index 0000000000000..be87295e2bfee --- /dev/null +++ b/tgui/packages/tgui/interfaces/LuaEditor/ListMapper.tsx @@ -0,0 +1,288 @@ +import { BooleanLike } from 'common/react'; +import React, { Dispatch, SetStateAction } from 'react'; + +import { useBackend } from '../../backend'; +import { + Box, + Button, + Collapsible, + LabeledList, + Section, + Tooltip, +} from '../../components'; +import { BoxProps } from '../../components/Box'; +import { logger } from '../../logging'; +import { CallInfo, LuaEditorModal, Variant, VariantList } from './types'; +import { ListElement, ListPath } from './types'; + +const mapListVariantsInner = (value: any, variant: Variant) => { + if (Array.isArray(variant)) { + const [variant_inner, param] = variant; + switch (variant_inner) { + case 'list': + return mapListVariants(value, param); + case 'cycle': + return ( + + Circular Reference + + ); + case 'ref': + return ( + + {`${value} ${param}`} + + ); + } + } else { + switch (variant) { + case 'error': + return ( + + + Conversion Error + + + ); + case 'function': + return ( + + {value} + + ); + case 'thread': + return ( + + Thread: {value} + + ); + case 'userdata': + return ( + + Userdata: {value} + + ); + case 'error_as_value': + return ( + + {value} + + ); + default: + return value; + } + } +}; + +const mapListVariants = (list: any[], variants: VariantList) => { + logger.log(list, variants); + return list.map((element, i) => { + const { key, value } = element; + const { key: key_variant = null, value: value_variant = null } = + variants[i] || {}; + if (typeof key === 'number') { + return { + key: key, + value: mapListVariantsInner(value, key_variant), + }; + } else { + return { + key: mapListVariantsInner(key, key_variant), + value: mapListVariantsInner(value, value_variant), + }; + } + }); +}; + +type ListMapperProps = BoxProps & { + list: ListElement[]; +} & Partial<{ + variants: VariantList; + editable: BooleanLike; + name: string; + vvAct: (path: ListPath) => void; + skipNulls: BooleanLike; + collapsible: BooleanLike; + callType: 'callFunction' | 'resumeTask'; + path: ListPath; + setToCall: Dispatch>; + setModal: Dispatch>; + }>; + +export const ListMapper = (props: ListMapperProps) => { + const { act } = useBackend(); + + const { variants, list: _, ...safeProps } = props; + + const { + path, + editable, + name, + vvAct, + skipNulls, + collapsible, + setToCall, + setModal, + ...rest + } = safeProps; + + let { list } = props; + + if (variants) { + list = mapListVariants(list, variants); + } + + const ThingNode = ( + thing: any, + path: ListPath, + canCall: BooleanLike, + overrideProps?: ListMapperProps, + ) => { + if (Array.isArray(thing)) { + return ( + + ); + } else if (React.isValidElement(thing)) { + switch (thing.key) { + case 'ref': + return ( + + + ); + } + return ( + <> + {i > 0 && } + + {output} + + {repeats && ( + + x{repeats + 1} + + )} + + ); + }); +}; diff --git a/tgui/packages/tgui/interfaces/LuaEditor/StateSelectModal.tsx b/tgui/packages/tgui/interfaces/LuaEditor/StateSelectModal.tsx new file mode 100644 index 0000000000000..4ff3deeb09bfe --- /dev/null +++ b/tgui/packages/tgui/interfaces/LuaEditor/StateSelectModal.tsx @@ -0,0 +1,68 @@ +import { useState } from 'react'; + +import { useBackend } from '../../backend'; +import { Button, Input, Modal, Section, Stack } from '../../components'; +import { LuaEditorData, LuaEditorModal } from './types'; + +type StateSelectModalProps = { + setModal: (modal: LuaEditorModal) => void; +}; + +export const StateSelectModal = (props: StateSelectModalProps) => { + const { act, data } = useBackend(); + const { setModal } = props; + const [input, setInput] = useState(); + const { states } = data; + return ( + +
        { + setModal(undefined); + }} + > + Cancel + + } + > + {states.map((value, i) => ( + + ))} + + + { + setInput(value); + }} + /> + + +
        +
        + ); +}; diff --git a/tgui/packages/tgui/interfaces/LuaEditor/TaskManager.tsx b/tgui/packages/tgui/interfaces/LuaEditor/TaskManager.tsx new file mode 100644 index 0000000000000..d534f2011f268 --- /dev/null +++ b/tgui/packages/tgui/interfaces/LuaEditor/TaskManager.tsx @@ -0,0 +1,70 @@ +import { Dispatch, SetStateAction } from 'react'; + +import { useBackend } from '../../backend'; +import { Button, LabeledList, Section, Stack } from '../../components'; +import { CallInfo, LuaEditorData, LuaEditorModal } from './types'; + +type TaskManagerProps = { + setToCall: Dispatch>; + setModal: Dispatch>; +}; + +export const TaskManager = (props: TaskManagerProps) => { + const { act, data } = useBackend(); + const { setToCall, setModal } = props; + const { tasks } = data; + const { sleeps = [], yields = [] } = tasks; + return ( + + +
        + + {sleeps.map(({ index, name }, i) => ( + + + + ))} + +
        +
        + +
        + + {yields.map(({ index, name }, i) => ( + + + + + ))} + +
        +
        +
        + ); +}; diff --git a/tgui/packages/tgui/interfaces/LuaEditor/index.tsx b/tgui/packages/tgui/interfaces/LuaEditor/index.tsx new file mode 100644 index 0000000000000..5d8b8873a8044 --- /dev/null +++ b/tgui/packages/tgui/interfaces/LuaEditor/index.tsx @@ -0,0 +1,421 @@ +import 'blob-polyfill'; + +import hljs from 'highlight.js/lib/core'; +import lua from 'highlight.js/lib/languages/lua'; +import { + ReactNode, + useCallback, + useEffect, + useLayoutEffect, + useRef, + useState, +} from 'react'; + +import { useBackend } from '../../backend'; +import { + Box, + Button, + Flex, + MenuBar, + ProgressBar, + Section, + Stack, + Tabs, + TextArea, +} from '../../components'; +import { Window } from '../../layouts'; +import { CallModal } from './CallModal'; +import { ChunkViewModal } from './ChunkViewModal'; +import { ListMapper } from './ListMapper'; +import { Log } from './Log'; +import { StateSelectModal } from './StateSelectModal'; +import { TaskManager } from './TaskManager'; +import { CallInfo, LuaEditorData, LuaEditorModal } from './types'; +hljs.registerLanguage('lua', lua); + +export const LuaEditor = () => { + const { act, data } = useBackend(); + const { + noStateYet, + globals, + tasks, + showGlobalTable, + page, + pageCount, + lastError, + supressRuntimes, + } = data; + + const modalState = useState( + noStateYet ? 'states' : undefined, + ); + const [modal, setModal] = modalState; + const [activeTab, setActiveTab] = useState<'tasks' | 'log' | 'globals'>( + 'log', + ); + const [showJumpToBottomButton, setShowJumpToBottomButton] = + useState(); + const [scriptInput, setScriptInput] = useState(''); + const [openMenuBar, setOpenMenuBar] = useState(null); + const [openOnHover, setOpenOnHover] = useState(false); + + const [viewedChunk, setViewedChunk] = useState(); + + const [toCall, setToCall] = useState(); + + const sectionRef = useRef(null); + const fileInputRef = useRef(null); + + useLayoutEffect(() => { + const { data } = useBackend(); + const { forceModal, forceViewChunk, forceInput } = data; + if (forceModal || forceViewChunk) { + setModal(forceModal); + setViewedChunk(forceViewChunk); + } + if (forceInput) { + setScriptInput(forceInput); + } + }, []); + + const handleSectionScroll = useCallback(() => { + const scrollableCurrent = sectionRef.current; + if (scrollableCurrent) { + const { scrollHeight, scrollTop, clientHeight } = scrollableCurrent; + if (!showJumpToBottomButton && scrollHeight > scrollTop + clientHeight) { + setShowJumpToBottomButton(true); + } else if ( + showJumpToBottomButton && + scrollTop + clientHeight >= scrollHeight + ) { + setShowJumpToBottomButton(false); + } + } + }, [showJumpToBottomButton, sectionRef]); + + useEffect(handleSectionScroll); + + useLayoutEffect(() => { + handleSectionScroll(); + window.addEventListener('resize', handleSectionScroll); + return () => window.removeEventListener('resize', handleSectionScroll); + }, [handleSectionScroll]); + + let tabContent: ReactNode; + switch (activeTab) { + case 'globals': { + if (!globals) { + tabContent = ( +

        + Could not retrieve the global table. Was it corrupted or shadowed? +

        + ); + } else { + const { values, variants } = globals; + tabContent = ( + act('vvGlobal', { indices: path })} + callType="callFunction" + setToCall={setToCall} + setModal={setModal} + /> + ); + } + break; + } + case 'tasks': { + if (!tasks) { + tabContent =

        Could not retrieve task info.

        ; + } else { + tabContent = ; + } + break; + } + case 'log': { + tabContent = ; + break; + } + } + + const menuBarProps = { + openMenuBar: openMenuBar, + setOpenMenuBar: setOpenMenuBar, + openOnHover: openOnHover, + setOpenOnHover: setOpenOnHover, + }; + + const closeMenuAndThen = (func?: () => void) => { + return () => { + setOpenMenuBar(null); + setOpenOnHover(false); + func?.(); + }; + }; + + return ( + + + { + if (event.target.files?.length) { + setScriptInput(await event.target.files[0].text()); + event.target.value = ''; + } + }} + /> + + + { + setModal('states'); + })} + /> + fileInputRef.current?.click())} + /> + act('runCodeFile'))} + /> + + + {noStateYet ? ( + +

        Please select or create a lua state to get started.

        +
        + ) : ( + + + + +
        + + +